From 3fe0d86ccde2bdac3db61a0a136bb2b6e01d8407 Mon Sep 17 00:00:00 2001 From: skosito Date: Wed, 7 Aug 2024 15:39:43 +0200 Subject: [PATCH 01/21] split custody tests into separate file and add pause tests for custody --- v2/test/ERC20Custody.t.sol | 368 +++++++++++++++++++++++++++++++++++++ v2/test/GatewayEVM.t.sol | 229 ----------------------- 2 files changed, 368 insertions(+), 229 deletions(-) create mode 100644 v2/test/ERC20Custody.t.sol diff --git a/v2/test/ERC20Custody.t.sol b/v2/test/ERC20Custody.t.sol new file mode 100644 index 00000000..78788404 --- /dev/null +++ b/v2/test/ERC20Custody.t.sol @@ -0,0 +1,368 @@ +// SPDX-License-Identifier: MIT +pragma solidity 0.8.26; + +import "forge-std/Test.sol"; +import "forge-std/Vm.sol"; + +import "./utils/ReceiverEVM.sol"; + +import "./utils/TestERC20.sol"; + +import { ERC1967Proxy } from "@openzeppelin/contracts/proxy/ERC1967/ERC1967Proxy.sol"; +import "@openzeppelin/contracts/token/ERC20/IERC20.sol"; +import "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol"; +import { Upgrades } from "openzeppelin-foundry-upgrades/Upgrades.sol"; + +import "./utils/IReceiverEVM.sol"; +import "src/evm/ERC20Custody.sol"; +import "src/evm/GatewayEVM.sol"; +import "src/evm/ZetaConnectorNonNative.sol"; +import "src/evm/interfaces/IERC20Custody.sol"; +import "src/evm/interfaces/IGatewayEVM.sol"; + +contract ERC20CustodyTest is Test, IGatewayEVMErrors, IGatewayEVMEvents, IReceiverEVMEvents, IERC20CustodyEvents { + using SafeERC20 for IERC20; + + address proxy; + GatewayEVM gateway; + ReceiverEVM receiver; + ERC20Custody custody; + ZetaConnectorNonNative zetaConnector; + TestERC20 token; + TestERC20 zeta; + address owner; + address destination; + address tssAddress; + + error EnforcedPause(); + error AccessControlUnauthorizedAccount(address account, bytes32 neededRole); + + bytes32 public constant TSS_ROLE = keccak256("TSS_ROLE"); + bytes32 public constant WITHDRAWER_ROLE = keccak256("WITHDRAWER_ROLE"); + bytes32 public constant ASSET_HANDLER_ROLE = keccak256("ASSET_HANDLER_ROLE"); + bytes32 public constant PAUSER_ROLE = keccak256("PAUSER_ROLE"); + + function setUp() public { + owner = address(this); + destination = address(0x1234); + tssAddress = address(0x5678); + + token = new TestERC20("test", "TTK"); + zeta = new TestERC20("zeta", "ZETA"); + + proxy = Upgrades.deployUUPSProxy( + "GatewayEVM.sol", abi.encodeCall(GatewayEVM.initialize, (tssAddress, address(zeta), owner)) + ); + gateway = GatewayEVM(proxy); + custody = new ERC20Custody(address(gateway), tssAddress, owner); + zetaConnector = new ZetaConnectorNonNative(address(gateway), address(zeta), tssAddress, owner); + receiver = new ReceiverEVM(); + + vm.deal(tssAddress, 1 ether); + + vm.startPrank(owner); + gateway.setCustody(address(custody)); + gateway.setConnector(address(zetaConnector)); + vm.stopPrank(); + + token.mint(owner, 1_000_000); + token.transfer(address(custody), 500_000); + + vm.deal(tssAddress, 1 ether); + } + + function testNewCustodyFailsIfAddressesAreZero() public { + vm.expectRevert(ZeroAddress.selector); + ERC20Custody newCustody = new ERC20Custody(address(0), tssAddress, owner); + + vm.expectRevert(ZeroAddress.selector); + newCustody = new ERC20Custody(address(gateway), address(0), owner); + + vm.expectRevert(ZeroAddress.selector); + newCustody = new ERC20Custody(address(gateway), tssAddress, address(0)); + + newCustody = new ERC20Custody(address(gateway), tssAddress, owner); + } + + function testForwardCallToReceiveERC20ThroughCustody() public { + uint256 amount = 100_000; + bytes memory data = + abi.encodeWithSignature("receiveERC20(uint256,address,address)", amount, address(token), destination); + uint256 balanceBefore = token.balanceOf(destination); + assertEq(balanceBefore, 0); + uint256 balanceBeforeCustody = token.balanceOf(address(custody)); + + bytes memory transferData = abi.encodeWithSignature("transfer(address,uint256)", address(gateway), amount); + vm.expectCall(address(token), 0, transferData); + vm.expectEmit(true, true, true, true, address(receiver)); + emit ReceivedERC20(address(gateway), amount, address(token), destination); + vm.expectEmit(true, true, true, true, address(custody)); + emit WithdrawAndCall(address(token), address(receiver), amount, data); + vm.prank(tssAddress); + custody.withdrawAndCall(address(token), address(receiver), amount, data); + + // Verify that the tokens were transferred to the destination address + uint256 balanceAfter = token.balanceOf(destination); + assertEq(balanceAfter, amount); + + // Verify that the remaining tokens were refunded to the Custody contract + uint256 balanceAfterCustody = token.balanceOf(address(custody)); + assertEq(balanceAfterCustody, balanceBeforeCustody - amount); + + // Verify that the approval was reset + uint256 allowance = token.allowance(address(gateway), address(receiver)); + assertEq(allowance, 0); + + // Verify that gateway doesn't hold any tokens + uint256 balanceGateway = token.balanceOf(address(gateway)); + assertEq(balanceGateway, 0); + } + + function testForwardCallToReceiveERC20ThroughCustodyTogglePause() public { + vm.prank(tssAddress); + vm.expectRevert(abi.encodeWithSelector(AccessControlUnauthorizedAccount.selector, tssAddress, PAUSER_ROLE)); + custody.pause(); + + vm.prank(tssAddress); + vm.expectRevert(abi.encodeWithSelector(AccessControlUnauthorizedAccount.selector, tssAddress, PAUSER_ROLE)); + gateway.unpause(); + + vm.prank(owner); + custody.pause(); + + uint256 amount = 100_000; + bytes memory data = + abi.encodeWithSignature("receiveERC20(uint256,address,address)", amount, address(token), destination); + + vm.expectRevert(EnforcedPause.selector); + vm.prank(tssAddress); + custody.withdrawAndCall(address(token), address(receiver), amount, data); + + vm.prank(owner); + custody.unpause(); + + uint256 balanceBefore = token.balanceOf(destination); + assertEq(balanceBefore, 0); + uint256 balanceBeforeCustody = token.balanceOf(address(custody)); + + bytes memory transferData = abi.encodeWithSignature("transfer(address,uint256)", address(gateway), amount); + vm.expectCall(address(token), 0, transferData); + vm.expectEmit(true, true, true, true, address(receiver)); + emit ReceivedERC20(address(gateway), amount, address(token), destination); + vm.expectEmit(true, true, true, true, address(custody)); + emit WithdrawAndCall(address(token), address(receiver), amount, data); + vm.prank(tssAddress); + custody.withdrawAndCall(address(token), address(receiver), amount, data); + + // Verify that the tokens were transferred to the destination address + uint256 balanceAfter = token.balanceOf(destination); + assertEq(balanceAfter, amount); + + // Verify that the remaining tokens were refunded to the Custody contract + uint256 balanceAfterCustody = token.balanceOf(address(custody)); + assertEq(balanceAfterCustody, balanceBeforeCustody - amount); + + // Verify that the approval was reset + uint256 allowance = token.allowance(address(gateway), address(receiver)); + assertEq(allowance, 0); + + // Verify that gateway doesn't hold any tokens + uint256 balanceGateway = token.balanceOf(address(gateway)); + assertEq(balanceGateway, 0); + } + + function testForwardCallToReceiveERC20ThroughCustodyFailsIfSenderIsNotWithdrawer() public { + uint256 amount = 100_000; + bytes memory data = + abi.encodeWithSignature("receiveERC20(uint256,address,address)", amount, address(token), destination); + + vm.prank(owner); + vm.expectRevert(abi.encodeWithSelector(AccessControlUnauthorizedAccount.selector, owner, WITHDRAWER_ROLE)); + custody.withdrawAndCall(address(token), address(receiver), amount, data); + } + + function testForwardCallToReceiveERC20ThroughCustodyFailsIfAmountIs0() public { + uint256 amount = 0; + bytes memory data = + abi.encodeWithSignature("receiveERC20(uint256,address,address)", amount, address(token), destination); + + vm.prank(tssAddress); + vm.expectRevert(InsufficientERC20Amount.selector); + custody.withdrawAndCall(address(token), address(receiver), amount, data); + } + + function testForwardCallToReceiveERC20PartialThroughCustody() public { + uint256 amount = 100_000; + bytes memory data = + abi.encodeWithSignature("receiveERC20Partial(uint256,address,address)", amount, address(token), destination); + uint256 balanceBefore = token.balanceOf(destination); + assertEq(balanceBefore, 0); + uint256 balanceBeforeCustody = token.balanceOf(address(custody)); + + bytes memory transferData = abi.encodeWithSignature("transfer(address,uint256)", address(gateway), amount); + vm.expectCall(address(token), 0, transferData); + vm.expectEmit(true, true, true, true, address(receiver)); + emit ReceivedERC20(address(gateway), amount / 2, address(token), destination); + vm.expectEmit(true, true, true, true, address(custody)); + emit WithdrawAndCall(address(token), address(receiver), amount, data); + vm.prank(tssAddress); + custody.withdrawAndCall(address(token), address(receiver), amount, data); + + // Verify that the tokens were transferred to the destination address + uint256 balanceAfter = token.balanceOf(destination); + assertEq(balanceAfter, amount / 2); + + // Verify that the remaining tokens were refunded to the Custody contract + uint256 balanceAfterCustody = token.balanceOf(address(custody)); + assertEq(balanceAfterCustody, balanceBeforeCustody - amount / 2); + + // Verify that the approval was reset + uint256 allowance = token.allowance(address(gateway), address(receiver)); + assertEq(allowance, 0); + + // Verify that gateway doesn't hold any tokens + uint256 balanceGateway = token.balanceOf(address(gateway)); + assertEq(balanceGateway, 0); + } + + function testForwardCallToReceiveERC20PartialThroughCustodyFailsIfSenderIsNotWithdrawer() public { + uint256 amount = 100_000; + bytes memory data = + abi.encodeWithSignature("receiveERC20Partial(uint256,address,address)", amount, address(token), destination); + + vm.prank(owner); + vm.expectRevert(abi.encodeWithSelector(AccessControlUnauthorizedAccount.selector, owner, WITHDRAWER_ROLE)); + custody.withdrawAndCall(address(token), address(receiver), amount, data); + } + + function testForwardCallToReceiveERC20PartialThroughCustodyFailsIfAmountIs0() public { + uint256 amount = 0; + bytes memory data = + abi.encodeWithSignature("receiveERC20Partial(uint256,address,address)", amount, address(token), destination); + + vm.prank(tssAddress); + vm.expectRevert(InsufficientERC20Amount.selector); + custody.withdrawAndCall(address(token), address(receiver), amount, data); + } + + function testForwardCallToReceiveNoParamsThroughCustody() public { + uint256 amount = 100_000; + bytes memory data = abi.encodeWithSignature("receiveNoParams()"); + uint256 balanceBefore = token.balanceOf(destination); + assertEq(balanceBefore, 0); + uint256 balanceBeforeCustody = token.balanceOf(address(custody)); + + bytes memory transferData = abi.encodeWithSignature("transfer(address,uint256)", address(gateway), amount); + vm.expectCall(address(token), 0, transferData); + vm.expectEmit(true, true, true, true, address(receiver)); + emit ReceivedNoParams(address(gateway)); + vm.expectEmit(true, true, true, true, address(custody)); + emit WithdrawAndCall(address(token), address(receiver), amount, data); + vm.prank(tssAddress); + custody.withdrawAndCall(address(token), address(receiver), amount, data); + + // Verify that the tokens were not transferred to the destination address + uint256 balanceAfter = token.balanceOf(destination); + assertEq(balanceAfter, 0); + + // Verify that the remaining tokens were refunded to the Custody contract + uint256 balanceAfterCustody = token.balanceOf(address(custody)); + assertEq(balanceAfterCustody, balanceBeforeCustody); + + // Verify that the approval was reset + uint256 allowance = token.allowance(address(gateway), address(receiver)); + assertEq(allowance, 0); + + // Verify that gateway doesn't hold any tokens + uint256 balanceGateway = token.balanceOf(address(gateway)); + assertEq(balanceGateway, 0); + } + + function testWithdrawThroughCustody() public { + uint256 amount = 100_000; + uint256 balanceBefore = token.balanceOf(destination); + assertEq(balanceBefore, 0); + uint256 balanceBeforeCustody = token.balanceOf(address(custody)); + + bytes memory transferData = abi.encodeWithSignature("transfer(address,uint256)", address(destination), amount); + vm.expectCall(address(token), 0, transferData); + vm.expectEmit(true, true, true, true, address(custody)); + emit Withdraw(address(token), destination, amount); + vm.prank(tssAddress); + custody.withdraw(address(token), destination, amount); + + // Verify that the tokens were transferred to the destination address + uint256 balanceAfter = token.balanceOf(destination); + assertEq(balanceAfter, amount); + + // Verify that the tokens were substracted from custody + uint256 balanceAfterCustody = token.balanceOf(address(custody)); + assertEq(balanceAfterCustody, balanceBeforeCustody - amount); + + // Verify that gateway doesn't hold any tokens + uint256 balanceGateway = token.balanceOf(address(gateway)); + assertEq(balanceGateway, 0); + } + + function testWithdrawThroughCustodyFailsIfSenderIsNotWithdrawer() public { + uint256 amount = 100_000; + + vm.prank(owner); + vm.expectRevert(abi.encodeWithSelector(AccessControlUnauthorizedAccount.selector, owner, WITHDRAWER_ROLE)); + custody.withdraw(address(token), destination, amount); + } + + function testWithdrawAndRevertThroughCustody() public { + uint256 amount = 100_000; + bytes memory data = abi.encodePacked("hello"); + uint256 balanceBefore = token.balanceOf(address(receiver)); + assertEq(balanceBefore, 0); + uint256 balanceBeforeCustody = token.balanceOf(address(custody)); + + bytes memory transferData = abi.encodeWithSignature("transfer(address,uint256)", address(gateway), amount); + vm.expectCall(address(token), 0, transferData); + // Verify that onRevert callback was called + vm.expectEmit(true, true, true, true, address(receiver)); + emit ReceivedRevert(address(gateway), data); + vm.expectEmit(true, true, true, true, address(gateway)); + emit RevertedWithERC20(address(token), address(receiver), amount, data); + vm.expectEmit(true, true, true, true, address(custody)); + emit WithdrawAndRevert(address(token), address(receiver), amount, data); + vm.prank(tssAddress); + custody.withdrawAndRevert(address(token), address(receiver), amount, data); + + // Verify that the tokens were transferred to the receiver address + uint256 balanceAfter = token.balanceOf(address(receiver)); + assertEq(balanceAfter, amount); + + // Verify that zeta connector doesn't get more tokens + uint256 balanceAfterCustody = token.balanceOf(address(custody)); + assertEq(balanceAfterCustody, balanceBeforeCustody - amount); + + // Verify that the approval was reset + uint256 allowance = token.allowance(address(gateway), address(receiver)); + assertEq(allowance, 0); + + // Verify that gateway doesn't hold any tokens + uint256 balanceGateway = token.balanceOf(address(gateway)); + assertEq(balanceGateway, 0); + } + + function testWithdrawAndRevertThroughCustodyFailsIfSenderIsNotWithdrawer() public { + uint256 amount = 100_000; + bytes memory data = abi.encodePacked("hello"); + + vm.prank(owner); + vm.expectRevert(abi.encodeWithSelector(AccessControlUnauthorizedAccount.selector, owner, WITHDRAWER_ROLE)); + custody.withdrawAndRevert(address(token), address(receiver), amount, data); + } + + function testWithdrawAndRevertThroughCustodyFailsIfAmountIs0() public { + uint256 amount = 0; + bytes memory data = abi.encodePacked("hello"); + + vm.prank(tssAddress); + vm.expectRevert(InsufficientERC20Amount.selector); + custody.withdrawAndRevert(address(token), address(receiver), amount, data); + } +} \ No newline at end of file diff --git a/v2/test/GatewayEVM.t.sol b/v2/test/GatewayEVM.t.sol index 002f43a6..5027e3f1 100644 --- a/v2/test/GatewayEVM.t.sol +++ b/v2/test/GatewayEVM.t.sol @@ -184,235 +184,6 @@ contract GatewayEVMTest is Test, IGatewayEVMErrors, IGatewayEVMEvents, IReceiver gateway.revertWithERC20(address(token), destination, amount, data); } - function testForwardCallToReceiveERC20ThroughCustody() public { - uint256 amount = 100_000; - bytes memory data = - abi.encodeWithSignature("receiveERC20(uint256,address,address)", amount, address(token), destination); - uint256 balanceBefore = token.balanceOf(destination); - assertEq(balanceBefore, 0); - uint256 balanceBeforeCustody = token.balanceOf(address(custody)); - - bytes memory transferData = abi.encodeWithSignature("transfer(address,uint256)", address(gateway), amount); - vm.expectCall(address(token), 0, transferData); - vm.expectEmit(true, true, true, true, address(receiver)); - emit ReceivedERC20(address(gateway), amount, address(token), destination); - vm.expectEmit(true, true, true, true, address(custody)); - emit WithdrawAndCall(address(token), address(receiver), amount, data); - vm.prank(tssAddress); - custody.withdrawAndCall(address(token), address(receiver), amount, data); - - // Verify that the tokens were transferred to the destination address - uint256 balanceAfter = token.balanceOf(destination); - assertEq(balanceAfter, amount); - - // Verify that the remaining tokens were refunded to the Custody contract - uint256 balanceAfterCustody = token.balanceOf(address(custody)); - assertEq(balanceAfterCustody, balanceBeforeCustody - amount); - - // Verify that the approval was reset - uint256 allowance = token.allowance(address(gateway), address(receiver)); - assertEq(allowance, 0); - - // Verify that gateway doesn't hold any tokens - uint256 balanceGateway = token.balanceOf(address(gateway)); - assertEq(balanceGateway, 0); - } - - function testForwardCallToReceiveERC20ThroughCustodyFailsIfSenderIsNotWithdrawer() public { - uint256 amount = 100_000; - bytes memory data = - abi.encodeWithSignature("receiveERC20(uint256,address,address)", amount, address(token), destination); - - vm.prank(owner); - vm.expectRevert(abi.encodeWithSelector(AccessControlUnauthorizedAccount.selector, owner, WITHDRAWER_ROLE)); - custody.withdrawAndCall(address(token), address(receiver), amount, data); - } - - function testForwardCallToReceiveERC20ThroughCustodyFailsIfAmountIs0() public { - uint256 amount = 0; - bytes memory data = - abi.encodeWithSignature("receiveERC20(uint256,address,address)", amount, address(token), destination); - - vm.prank(tssAddress); - vm.expectRevert(InsufficientERC20Amount.selector); - custody.withdrawAndCall(address(token), address(receiver), amount, data); - } - - function testForwardCallToReceiveERC20PartialThroughCustody() public { - uint256 amount = 100_000; - bytes memory data = - abi.encodeWithSignature("receiveERC20Partial(uint256,address,address)", amount, address(token), destination); - uint256 balanceBefore = token.balanceOf(destination); - assertEq(balanceBefore, 0); - uint256 balanceBeforeCustody = token.balanceOf(address(custody)); - - bytes memory transferData = abi.encodeWithSignature("transfer(address,uint256)", address(gateway), amount); - vm.expectCall(address(token), 0, transferData); - vm.expectEmit(true, true, true, true, address(receiver)); - emit ReceivedERC20(address(gateway), amount / 2, address(token), destination); - vm.expectEmit(true, true, true, true, address(custody)); - emit WithdrawAndCall(address(token), address(receiver), amount, data); - vm.prank(tssAddress); - custody.withdrawAndCall(address(token), address(receiver), amount, data); - - // Verify that the tokens were transferred to the destination address - uint256 balanceAfter = token.balanceOf(destination); - assertEq(balanceAfter, amount / 2); - - // Verify that the remaining tokens were refunded to the Custody contract - uint256 balanceAfterCustody = token.balanceOf(address(custody)); - assertEq(balanceAfterCustody, balanceBeforeCustody - amount / 2); - - // Verify that the approval was reset - uint256 allowance = token.allowance(address(gateway), address(receiver)); - assertEq(allowance, 0); - - // Verify that gateway doesn't hold any tokens - uint256 balanceGateway = token.balanceOf(address(gateway)); - assertEq(balanceGateway, 0); - } - - function testForwardCallToReceiveERC20PartialThroughCustodyFailsIfSenderIsNotWithdrawer() public { - uint256 amount = 100_000; - bytes memory data = - abi.encodeWithSignature("receiveERC20Partial(uint256,address,address)", amount, address(token), destination); - - vm.prank(owner); - vm.expectRevert(abi.encodeWithSelector(AccessControlUnauthorizedAccount.selector, owner, WITHDRAWER_ROLE)); - custody.withdrawAndCall(address(token), address(receiver), amount, data); - } - - function testForwardCallToReceiveERC20PartialThroughCustodyFailsIfAmountIs0() public { - uint256 amount = 0; - bytes memory data = - abi.encodeWithSignature("receiveERC20Partial(uint256,address,address)", amount, address(token), destination); - - vm.prank(tssAddress); - vm.expectRevert(InsufficientERC20Amount.selector); - custody.withdrawAndCall(address(token), address(receiver), amount, data); - } - - function testForwardCallToReceiveNoParamsThroughCustody() public { - uint256 amount = 100_000; - bytes memory data = abi.encodeWithSignature("receiveNoParams()"); - uint256 balanceBefore = token.balanceOf(destination); - assertEq(balanceBefore, 0); - uint256 balanceBeforeCustody = token.balanceOf(address(custody)); - - bytes memory transferData = abi.encodeWithSignature("transfer(address,uint256)", address(gateway), amount); - vm.expectCall(address(token), 0, transferData); - vm.expectEmit(true, true, true, true, address(receiver)); - emit ReceivedNoParams(address(gateway)); - vm.expectEmit(true, true, true, true, address(custody)); - emit WithdrawAndCall(address(token), address(receiver), amount, data); - vm.prank(tssAddress); - custody.withdrawAndCall(address(token), address(receiver), amount, data); - - // Verify that the tokens were not transferred to the destination address - uint256 balanceAfter = token.balanceOf(destination); - assertEq(balanceAfter, 0); - - // Verify that the remaining tokens were refunded to the Custody contract - uint256 balanceAfterCustody = token.balanceOf(address(custody)); - assertEq(balanceAfterCustody, balanceBeforeCustody); - - // Verify that the approval was reset - uint256 allowance = token.allowance(address(gateway), address(receiver)); - assertEq(allowance, 0); - - // Verify that gateway doesn't hold any tokens - uint256 balanceGateway = token.balanceOf(address(gateway)); - assertEq(balanceGateway, 0); - } - - function testWithdrawThroughCustody() public { - uint256 amount = 100_000; - uint256 balanceBefore = token.balanceOf(destination); - assertEq(balanceBefore, 0); - uint256 balanceBeforeCustody = token.balanceOf(address(custody)); - - bytes memory transferData = abi.encodeWithSignature("transfer(address,uint256)", address(destination), amount); - vm.expectCall(address(token), 0, transferData); - vm.expectEmit(true, true, true, true, address(custody)); - emit Withdraw(address(token), destination, amount); - vm.prank(tssAddress); - custody.withdraw(address(token), destination, amount); - - // Verify that the tokens were transferred to the destination address - uint256 balanceAfter = token.balanceOf(destination); - assertEq(balanceAfter, amount); - - // Verify that the tokens were substracted from custody - uint256 balanceAfterCustody = token.balanceOf(address(custody)); - assertEq(balanceAfterCustody, balanceBeforeCustody - amount); - - // Verify that gateway doesn't hold any tokens - uint256 balanceGateway = token.balanceOf(address(gateway)); - assertEq(balanceGateway, 0); - } - - function testWithdrawThroughCustodyFailsIfSenderIsNotWithdrawer() public { - uint256 amount = 100_000; - - vm.prank(owner); - vm.expectRevert(abi.encodeWithSelector(AccessControlUnauthorizedAccount.selector, owner, WITHDRAWER_ROLE)); - custody.withdraw(address(token), destination, amount); - } - - function testWithdrawAndRevertThroughCustody() public { - uint256 amount = 100_000; - bytes memory data = abi.encodePacked("hello"); - uint256 balanceBefore = token.balanceOf(address(receiver)); - assertEq(balanceBefore, 0); - uint256 balanceBeforeCustody = token.balanceOf(address(custody)); - - bytes memory transferData = abi.encodeWithSignature("transfer(address,uint256)", address(gateway), amount); - vm.expectCall(address(token), 0, transferData); - // Verify that onRevert callback was called - vm.expectEmit(true, true, true, true, address(receiver)); - emit ReceivedRevert(address(gateway), data); - vm.expectEmit(true, true, true, true, address(gateway)); - emit RevertedWithERC20(address(token), address(receiver), amount, data); - vm.expectEmit(true, true, true, true, address(custody)); - emit WithdrawAndRevert(address(token), address(receiver), amount, data); - vm.prank(tssAddress); - custody.withdrawAndRevert(address(token), address(receiver), amount, data); - - // Verify that the tokens were transferred to the receiver address - uint256 balanceAfter = token.balanceOf(address(receiver)); - assertEq(balanceAfter, amount); - - // Verify that zeta connector doesn't get more tokens - uint256 balanceAfterCustody = token.balanceOf(address(custody)); - assertEq(balanceAfterCustody, balanceBeforeCustody - amount); - - // Verify that the approval was reset - uint256 allowance = token.allowance(address(gateway), address(receiver)); - assertEq(allowance, 0); - - // Verify that gateway doesn't hold any tokens - uint256 balanceGateway = token.balanceOf(address(gateway)); - assertEq(balanceGateway, 0); - } - - function testWithdrawAndRevertThroughCustodyFailsIfSenderIsNotWithdrawer() public { - uint256 amount = 100_000; - bytes memory data = abi.encodePacked("hello"); - - vm.prank(owner); - vm.expectRevert(abi.encodeWithSelector(AccessControlUnauthorizedAccount.selector, owner, WITHDRAWER_ROLE)); - custody.withdrawAndRevert(address(token), address(receiver), amount, data); - } - - function testWithdrawAndRevertThroughCustodyFailsIfAmountIs0() public { - uint256 amount = 0; - bytes memory data = abi.encodePacked("hello"); - - vm.prank(tssAddress); - vm.expectRevert(InsufficientERC20Amount.selector); - custody.withdrawAndRevert(address(token), address(receiver), amount, data); - } - function testExecuteRevert() public { uint256 value = 1 ether; bytes memory data = abi.encodePacked("hello"); From 9b0385eae7ca8685577744575a5e426bad6d0365 Mon Sep 17 00:00:00 2001 From: skosito Date: Wed, 7 Aug 2024 15:56:08 +0200 Subject: [PATCH 02/21] add tests for non native connector max supply --- v2/src/evm/ZetaConnectorBase.sol | 3 ++ v2/src/evm/ZetaConnectorNonNative.sol | 20 ++++++------- v2/test/ERC20Custody.t.sol | 2 +- v2/test/ZetaConnectorNonNative.t.sol | 43 +++++++++++++++++++++++++++ 4 files changed, 57 insertions(+), 11 deletions(-) diff --git a/v2/src/evm/ZetaConnectorBase.sol b/v2/src/evm/ZetaConnectorBase.sol index 32f397bf..89422576 100644 --- a/v2/src/evm/ZetaConnectorBase.sol +++ b/v2/src/evm/ZetaConnectorBase.sol @@ -28,6 +28,8 @@ abstract contract ZetaConnectorBase is IZetaConnectorEvents, ReentrancyGuard, Pa bytes32 public constant WITHDRAWER_ROLE = keccak256("WITHDRAWER_ROLE"); /// @notice New role identifier for pauser role. bytes32 public constant PAUSER_ROLE = keccak256("PAUSER_ROLE"); + /// @notice New role identifier for tss role. + bytes32 public constant TSS_ROLE = keccak256("TSS_ROLE"); /// @notice Constructor for ZetaConnectors. /// @dev Set admin as default admin and pauser, and tssAddress as tss role. @@ -40,6 +42,7 @@ abstract contract ZetaConnectorBase is IZetaConnectorEvents, ReentrancyGuard, Pa _grantRole(DEFAULT_ADMIN_ROLE, admin_); _grantRole(WITHDRAWER_ROLE, tssAddress_); + _grantRole(TSS_ROLE, tssAddress_); _grantRole(PAUSER_ROLE, admin_); } diff --git a/v2/src/evm/ZetaConnectorNonNative.sol b/v2/src/evm/ZetaConnectorNonNative.sol index 470ef225..46bb7083 100644 --- a/v2/src/evm/ZetaConnectorNonNative.sol +++ b/v2/src/evm/ZetaConnectorNonNative.sol @@ -29,7 +29,7 @@ contract ZetaConnectorNonNative is ZetaConnectorBase { /// @notice Set max supply for minting. /// @param maxSupply_ New max supply. /// @dev This function can only be called by the TSS address. - function setMaxSupply(uint256 maxSupply_) external onlyRole(WITHDRAWER_ROLE) whenNotPaused { + function setMaxSupply(uint256 maxSupply_) external onlyRole(TSS_ROLE) whenNotPaused { maxSupply = maxSupply_; emit MaxSupplyUpdated(maxSupply_); } @@ -50,9 +50,7 @@ contract ZetaConnectorNonNative is ZetaConnectorBase { onlyRole(WITHDRAWER_ROLE) whenNotPaused { - if (amount + IERC20(zetaToken).totalSupply() > maxSupply) revert ExceedsMaxSupply(); - - IZetaNonEthNew(zetaToken).mint(to, amount, internalSendHash); + _mintTo(to, amount, internalSendHash); emit Withdraw(to, amount); } @@ -74,10 +72,8 @@ contract ZetaConnectorNonNative is ZetaConnectorBase { onlyRole(WITHDRAWER_ROLE) whenNotPaused { - if (amount + IERC20(zetaToken).totalSupply() > maxSupply) revert ExceedsMaxSupply(); - // Mint zetaToken to the Gateway contract - IZetaNonEthNew(zetaToken).mint(address(gateway), amount, internalSendHash); + _mintTo(address(gateway), amount, internalSendHash); // Forward the call to the Gateway contract gateway.executeWithERC20(address(zetaToken), to, amount, data); @@ -103,10 +99,8 @@ contract ZetaConnectorNonNative is ZetaConnectorBase { onlyRole(WITHDRAWER_ROLE) whenNotPaused { - if (amount + IERC20(zetaToken).totalSupply() > maxSupply) revert ExceedsMaxSupply(); - // Mint zetaToken to the Gateway contract - IZetaNonEthNew(zetaToken).mint(address(gateway), amount, internalSendHash); + _mintTo(address(gateway), amount, internalSendHash); // Forward the call to the Gateway contract gateway.revertWithERC20(address(zetaToken), to, amount, data); @@ -119,4 +113,10 @@ contract ZetaConnectorNonNative is ZetaConnectorBase { function receiveTokens(uint256 amount) external override whenNotPaused { IZetaNonEthNew(zetaToken).burnFrom(msg.sender, amount); } + + /// @dev mints to provided account and checks if totalSupply will be exceeded + function _mintTo(address to, uint256 amount, bytes32 internalSendHash) internal { + if (amount + IERC20(zetaToken).totalSupply() > maxSupply) revert ExceedsMaxSupply(); + IZetaNonEthNew(zetaToken).mint(address(to), amount, internalSendHash); + } } diff --git a/v2/test/ERC20Custody.t.sol b/v2/test/ERC20Custody.t.sol index 78788404..3a32c79e 100644 --- a/v2/test/ERC20Custody.t.sol +++ b/v2/test/ERC20Custody.t.sol @@ -365,4 +365,4 @@ contract ERC20CustodyTest is Test, IGatewayEVMErrors, IGatewayEVMEvents, IReceiv vm.expectRevert(InsufficientERC20Amount.selector); custody.withdrawAndRevert(address(token), address(receiver), amount, data); } -} \ No newline at end of file +} diff --git a/v2/test/ZetaConnectorNonNative.t.sol b/v2/test/ZetaConnectorNonNative.t.sol index 01739e69..9397459d 100644 --- a/v2/test/ZetaConnectorNonNative.t.sol +++ b/v2/test/ZetaConnectorNonNative.t.sol @@ -41,8 +41,10 @@ contract ZetaConnectorNonNativeTest is address tssAddress; error AccessControlUnauthorizedAccount(address account, bytes32 neededRole); + error ExceedsMaxSupply(); bytes32 public constant WITHDRAWER_ROLE = keccak256("WITHDRAWER_ROLE"); + bytes32 public constant TSS_ROLE = keccak256("TSS_ROLE"); function setUp() public { owner = address(this); @@ -267,4 +269,45 @@ contract ZetaConnectorNonNativeTest is vm.expectRevert(abi.encodeWithSelector(AccessControlUnauthorizedAccount.selector, owner, WITHDRAWER_ROLE)); zetaConnector.withdrawAndRevert(address(receiver), amount, data, internalSendHash); } + + function testWithdrawAndFailsIfMaxSupplyIsReached() public { + uint256 amount = 100_000; + + vm.prank(tssAddress); + zetaConnector.setMaxSupply(amount); + + vm.prank(tssAddress); + vm.expectRevert(ExceedsMaxSupply.selector); + zetaConnector.withdraw(address(receiver), amount + 1, ""); + } + + function testWithdrawAndCallFailsIfMaxSupplyIsReached() public { + uint256 amount = 100_000; + bytes memory data = abi.encodePacked("hello"); + + vm.prank(tssAddress); + zetaConnector.setMaxSupply(amount); + + vm.prank(tssAddress); + vm.expectRevert(ExceedsMaxSupply.selector); + zetaConnector.withdrawAndCall(address(receiver), amount + 1, data, ""); + } + + function testWithdrawAndRevertFailsIfMaxSupplyIsReached() public { + uint256 amount = 100_000; + bytes memory data = abi.encodePacked("hello"); + + vm.prank(tssAddress); + zetaConnector.setMaxSupply(amount); + + vm.prank(tssAddress); + vm.expectRevert(ExceedsMaxSupply.selector); + zetaConnector.withdrawAndRevert(address(receiver), amount + 1, data, ""); + } + + function testSexMaxSupplyFailsIfSenderIsNotTss() public { + vm.prank(owner); + vm.expectRevert(abi.encodeWithSelector(AccessControlUnauthorizedAccount.selector, owner, TSS_ROLE)); + zetaConnector.setMaxSupply(10_000); + } } From 8c3e4f6bd498d3adb6692e04902b7a28d023acc1 Mon Sep 17 00:00:00 2001 From: skosito Date: Wed, 7 Aug 2024 16:00:13 +0200 Subject: [PATCH 03/21] add more connector tests --- v2/test/ZetaConnectorNative.t.sol | 37 +++++++++++++++++++++++++++ v2/test/ZetaConnectorNonNative.t.sol | 38 ++++++++++++++++++++++++++++ 2 files changed, 75 insertions(+) diff --git a/v2/test/ZetaConnectorNative.t.sol b/v2/test/ZetaConnectorNative.t.sol index 87c0c1d6..aaabc455 100644 --- a/v2/test/ZetaConnectorNative.t.sol +++ b/v2/test/ZetaConnectorNative.t.sol @@ -40,9 +40,11 @@ contract ZetaConnectorNativeTest is address destination; address tssAddress; + error EnforcedPause(); error AccessControlUnauthorizedAccount(address account, bytes32 neededRole); bytes32 public constant WITHDRAWER_ROLE = keccak256("WITHDRAWER_ROLE"); + bytes32 public constant PAUSER_ROLE = keccak256("PAUSER_ROLE"); function setUp() public { owner = address(this); @@ -88,6 +90,41 @@ contract ZetaConnectorNativeTest is assertEq(balanceAfter, amount); } + function testWithdrawTogglePause() public { + uint256 amount = 100_000; + bytes32 internalSendHash = ""; + + vm.prank(tssAddress); + vm.expectRevert(abi.encodeWithSelector(AccessControlUnauthorizedAccount.selector, tssAddress, PAUSER_ROLE)); + zetaConnector.pause(); + + vm.prank(tssAddress); + vm.expectRevert(abi.encodeWithSelector(AccessControlUnauthorizedAccount.selector, tssAddress, PAUSER_ROLE)); + zetaConnector.unpause(); + + vm.prank(owner); + zetaConnector.pause(); + + vm.expectRevert(EnforcedPause.selector); + vm.prank(tssAddress); + zetaConnector.withdraw(destination, amount, internalSendHash); + + vm.prank(owner); + zetaConnector.unpause(); + + uint256 balanceBefore = zetaToken.balanceOf(destination); + assertEq(balanceBefore, 0); + + bytes memory data = abi.encodeWithSignature("transfer(address,uint256)", destination, amount); + vm.expectCall(address(zetaToken), 0, data); + vm.expectEmit(true, true, true, true, address(zetaConnector)); + emit Withdraw(destination, amount); + vm.prank(tssAddress); + zetaConnector.withdraw(destination, amount, internalSendHash); + uint256 balanceAfter = zetaToken.balanceOf(destination); + assertEq(balanceAfter, amount); + } + function testWithdrawFailsIfSenderIsNotWithdrawer() public { uint256 amount = 100_000; bytes32 internalSendHash = ""; diff --git a/v2/test/ZetaConnectorNonNative.t.sol b/v2/test/ZetaConnectorNonNative.t.sol index 9397459d..11dc3a31 100644 --- a/v2/test/ZetaConnectorNonNative.t.sol +++ b/v2/test/ZetaConnectorNonNative.t.sol @@ -42,9 +42,11 @@ contract ZetaConnectorNonNativeTest is error AccessControlUnauthorizedAccount(address account, bytes32 neededRole); error ExceedsMaxSupply(); + error EnforcedPause(); bytes32 public constant WITHDRAWER_ROLE = keccak256("WITHDRAWER_ROLE"); bytes32 public constant TSS_ROLE = keccak256("TSS_ROLE"); + bytes32 public constant PAUSER_ROLE = keccak256("PAUSER_ROLE"); function setUp() public { owner = address(this); @@ -91,6 +93,42 @@ contract ZetaConnectorNonNativeTest is assertEq(balanceAfter, amount); } + function testWithdrawTogglePause() public { + uint256 amount = 100_000; + bytes32 internalSendHash = ""; + + vm.prank(tssAddress); + vm.expectRevert(abi.encodeWithSelector(AccessControlUnauthorizedAccount.selector, tssAddress, PAUSER_ROLE)); + zetaConnector.pause(); + + vm.prank(tssAddress); + vm.expectRevert(abi.encodeWithSelector(AccessControlUnauthorizedAccount.selector, tssAddress, PAUSER_ROLE)); + zetaConnector.unpause(); + + vm.prank(owner); + zetaConnector.pause(); + + vm.expectRevert(EnforcedPause.selector); + vm.prank(tssAddress); + zetaConnector.withdraw(destination, amount, internalSendHash); + + vm.prank(owner); + zetaConnector.unpause(); + + uint256 balanceBefore = zetaToken.balanceOf(destination); + assertEq(balanceBefore, 0); + + bytes memory data = + abi.encodeWithSignature("mint(address,uint256,bytes32)", destination, amount, internalSendHash); + vm.expectCall(address(zetaToken), 0, data); + vm.expectEmit(true, true, true, true, address(zetaConnector)); + emit Withdraw(destination, amount); + vm.prank(tssAddress); + zetaConnector.withdraw(destination, amount, internalSendHash); + uint256 balanceAfter = zetaToken.balanceOf(destination); + assertEq(balanceAfter, amount); + } + function testWithdrawFailsIfSenderIsNotWithdrawer() public { uint256 amount = 100_000; bytes32 internalSendHash = ""; From f11f4bec93515bb985af1d511570b3d6fb995282 Mon Sep 17 00:00:00 2001 From: skosito Date: Wed, 7 Aug 2024 17:04:20 +0200 Subject: [PATCH 04/21] cleanup --- v2/src/evm/GatewayEVM.sol | 2 +- v2/test/GatewayEVM.t.sol | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/v2/src/evm/GatewayEVM.sol b/v2/src/evm/GatewayEVM.sol index db1a8507..b2e0b324 100644 --- a/v2/src/evm/GatewayEVM.sol +++ b/v2/src/evm/GatewayEVM.sol @@ -160,7 +160,7 @@ contract GatewayEVM is if (!resetApproval(token, to)) revert ApprovalFailed(); if (!IERC20(token).approve(to, amount)) revert ApprovalFailed(); // Execute the call on the target contract - bytes memory result = _execute(to, data); + _execute(to, data); // Reset approval if (!resetApproval(token, to)) revert ApprovalFailed(); diff --git a/v2/test/GatewayEVM.t.sol b/v2/test/GatewayEVM.t.sol index 5027e3f1..09ec60e4 100644 --- a/v2/test/GatewayEVM.t.sol +++ b/v2/test/GatewayEVM.t.sol @@ -164,7 +164,7 @@ contract GatewayEVMTest is Test, IGatewayEVMErrors, IGatewayEVMEvents, IReceiver gateway.execute(address(receiver), data); } - function testExecuteWithERC20FailsIfNotCustoryOrConnector() public { + function testExecuteWithERC20FailsIfNotCustodyOrConnector() public { uint256 amount = 100_000; bytes memory data = abi.encodeWithSignature("receiveERC20(uint256,address,address)", amount, address(token), destination); @@ -174,7 +174,7 @@ contract GatewayEVMTest is Test, IGatewayEVMErrors, IGatewayEVMEvents, IReceiver gateway.executeWithERC20(address(token), destination, amount, data); } - function testRevertWithERC20FailsIfNotCustoryOrConnector() public { + function testRevertWithERC20FailsIfNotCustodyOrConnector() public { uint256 amount = 100_000; bytes memory data = abi.encodeWithSignature("receiveERC20(uint256,address,address)", amount, address(token), destination); From c730f4c82fdd1de65a1469064f0fcb9a970fbc0c Mon Sep 17 00:00:00 2001 From: skosito Date: Wed, 7 Aug 2024 17:32:21 +0200 Subject: [PATCH 05/21] add gateway set custody connector tests --- v2/src/evm/GatewayEVM.sol | 4 +-- v2/src/evm/interfaces/IGatewayEVM.sol | 3 +++ v2/test/GatewayEVM.t.sol | 37 +++++++++++++++++++++++++++ 3 files changed, 42 insertions(+), 2 deletions(-) diff --git a/v2/src/evm/GatewayEVM.sol b/v2/src/evm/GatewayEVM.sol index b2e0b324..23e7bc77 100644 --- a/v2/src/evm/GatewayEVM.sol +++ b/v2/src/evm/GatewayEVM.sol @@ -266,8 +266,8 @@ contract GatewayEVM is /// @notice Sets the custody contract address. /// @param custody_ Address of the custody contract. function setCustody(address custody_) external onlyRole(DEFAULT_ADMIN_ROLE) { - if (custody != address(0)) revert CustodyInitialized(); if (custody_ == address(0)) revert ZeroAddress(); + if (custody != address(0)) revert CustodyInitialized(); _grantRole(ASSET_HANDLER_ROLE, custody_); custody = custody_; @@ -276,8 +276,8 @@ contract GatewayEVM is /// @notice Sets the connector contract address. /// @param zetaConnector_ Address of the connector contract. function setConnector(address zetaConnector_) external onlyRole(DEFAULT_ADMIN_ROLE) { - if (zetaConnector != address(0)) revert CustodyInitialized(); if (zetaConnector_ == address(0)) revert ZeroAddress(); + if (zetaConnector != address(0)) revert ConnectorInitialized(); _grantRole(ASSET_HANDLER_ROLE, zetaConnector_); zetaConnector = zetaConnector_; diff --git a/v2/src/evm/interfaces/IGatewayEVM.sol b/v2/src/evm/interfaces/IGatewayEVM.sol index 6a702b96..a76cd62e 100644 --- a/v2/src/evm/interfaces/IGatewayEVM.sol +++ b/v2/src/evm/interfaces/IGatewayEVM.sol @@ -68,6 +68,9 @@ interface IGatewayEVMErrors { /// @notice Error for already initialized custody. error CustodyInitialized(); + + /// @notice Error for already initialized connector. + error ConnectorInitialized(); } /// @title IGatewayEVM diff --git a/v2/test/GatewayEVM.t.sol b/v2/test/GatewayEVM.t.sol index 09ec60e4..112c80fc 100644 --- a/v2/test/GatewayEVM.t.sol +++ b/v2/test/GatewayEVM.t.sol @@ -41,6 +41,7 @@ contract GatewayEVMTest is Test, IGatewayEVMErrors, IGatewayEVMEvents, IReceiver bytes32 public constant WITHDRAWER_ROLE = keccak256("WITHDRAWER_ROLE"); bytes32 public constant ASSET_HANDLER_ROLE = keccak256("ASSET_HANDLER_ROLE"); bytes32 public constant PAUSER_ROLE = keccak256("PAUSER_ROLE"); + bytes32 public constant DEFAULT_ADMIN_ROLE = 0x00; function setUp() public { owner = address(this); @@ -71,6 +72,42 @@ contract GatewayEVMTest is Test, IGatewayEVMErrors, IGatewayEVMEvents, IReceiver vm.deal(tssAddress, 1 ether); } + function testSetCustodyFailsIfSenderIsNotAdmin() public { + vm.startPrank(tssAddress); + vm.expectRevert(abi.encodeWithSelector(AccessControlUnauthorizedAccount.selector, tssAddress, DEFAULT_ADMIN_ROLE)); + gateway.setCustody(address(custody)); + } + + function testSetCustodyFailsIfSet() public { + vm.startPrank(owner); + vm.expectRevert(CustodyInitialized.selector); + gateway.setCustody(address(custody)); + } + + function testSetCustodyFailsIfZero() public { + vm.startPrank(owner); + vm.expectRevert(ZeroAddress.selector); + gateway.setCustody(address(0)); + } + + function testSetConnectorFailsIfSenderIsNotAdmin() public { + vm.startPrank(tssAddress); + vm.expectRevert(abi.encodeWithSelector(AccessControlUnauthorizedAccount.selector, tssAddress, DEFAULT_ADMIN_ROLE)); + gateway.setConnector(address(zetaConnector)); + } + + function testSetConnectorFailsIfSet() public { + vm.startPrank(owner); + vm.expectRevert(ConnectorInitialized.selector); + gateway.setConnector(address(zetaConnector)); + } + + function testSetConnectorFailsIfZero() public { + vm.startPrank(owner); + vm.expectRevert(ZeroAddress.selector); + gateway.setConnector(address(0)); + } + function testForwardCallToReceiveNonPayable() public { string[] memory str = new string[](1); str[0] = "Hello, Foundry!"; From 99328dfcc4acc0a8a6a00bd30c002b97ded23ad7 Mon Sep 17 00:00:00 2001 From: skosito Date: Wed, 7 Aug 2024 17:49:49 +0200 Subject: [PATCH 06/21] test for zero addresses --- v2/src/evm/GatewayEVM.sol | 9 +++++++++ v2/test/ERC20Custody.t.sol | 19 +++++++++++++++++++ v2/test/GatewayEVM.t.sol | 38 ++++++++++++++++++++++++++++++++++++++ 3 files changed, 66 insertions(+) diff --git a/v2/src/evm/GatewayEVM.sol b/v2/src/evm/GatewayEVM.sol index 23e7bc77..9c793f13 100644 --- a/v2/src/evm/GatewayEVM.sol +++ b/v2/src/evm/GatewayEVM.sol @@ -130,6 +130,7 @@ contract GatewayEVM is nonReentrant returns (bytes memory) { + if (destination == address(0)) revert ZeroAddress(); bytes memory result = _execute(destination, data); emit Executed(destination, msg.value, data); @@ -156,6 +157,7 @@ contract GatewayEVM is nonReentrant { if (amount == 0) revert InsufficientERC20Amount(); + if (to == address(0)) revert ZeroAddress(); // Approve the target contract to spend the tokens if (!resetApproval(token, to)) revert ApprovalFailed(); if (!IERC20(token).approve(to, amount)) revert ApprovalFailed(); @@ -192,6 +194,7 @@ contract GatewayEVM is nonReentrant { if (amount == 0) revert InsufficientERC20Amount(); + if (to == address(0)) revert ZeroAddress(); IERC20(token).safeTransfer(address(to), amount); Revertable(to).onRevert(data); @@ -203,6 +206,8 @@ contract GatewayEVM is /// @param receiver Address of the receiver. function deposit(address receiver) external payable whenNotPaused nonReentrant { if (msg.value == 0) revert InsufficientETHAmount(); + if (receiver == address(0)) revert ZeroAddress(); + (bool deposited,) = tssAddress.call{ value: msg.value }(""); if (!deposited) revert DepositFailed(); @@ -216,6 +221,7 @@ contract GatewayEVM is /// @param asset Address of the ERC20 token. function deposit(address receiver, uint256 amount, address asset) external whenNotPaused nonReentrant { if (amount == 0) revert InsufficientERC20Amount(); + if (receiver == address(0)) revert ZeroAddress(); transferFromToAssetHandler(msg.sender, asset, amount); @@ -227,6 +233,8 @@ contract GatewayEVM is /// @param payload Calldata to pass to the call. function depositAndCall(address receiver, bytes calldata payload) external payable whenNotPaused nonReentrant { if (msg.value == 0) revert InsufficientETHAmount(); + if (receiver == address(0)) revert ZeroAddress(); + (bool deposited,) = tssAddress.call{ value: msg.value }(""); if (!deposited) revert DepositFailed(); @@ -250,6 +258,7 @@ contract GatewayEVM is nonReentrant { if (amount == 0) revert InsufficientERC20Amount(); + if (receiver == address(0)) revert ZeroAddress(); transferFromToAssetHandler(msg.sender, asset, amount); diff --git a/v2/test/ERC20Custody.t.sol b/v2/test/ERC20Custody.t.sol index 3a32c79e..36c92080 100644 --- a/v2/test/ERC20Custody.t.sol +++ b/v2/test/ERC20Custody.t.sol @@ -191,6 +191,16 @@ contract ERC20CustodyTest is Test, IGatewayEVMErrors, IGatewayEVMEvents, IReceiv custody.withdrawAndCall(address(token), address(receiver), amount, data); } + function testForwardCallToReceiveERC20ThroughCustodyFailsIfReceiverIsZeroAddress() public { + uint256 amount = 1; + bytes memory data = + abi.encodeWithSignature("receiveERC20(uint256,address,address)", amount, address(token), destination); + + vm.prank(tssAddress); + vm.expectRevert(ZeroAddress.selector); + custody.withdrawAndCall(address(token), address(0), amount, data); + } + function testForwardCallToReceiveERC20PartialThroughCustody() public { uint256 amount = 100_000; bytes memory data = @@ -365,4 +375,13 @@ contract ERC20CustodyTest is Test, IGatewayEVMErrors, IGatewayEVMEvents, IReceiv vm.expectRevert(InsufficientERC20Amount.selector); custody.withdrawAndRevert(address(token), address(receiver), amount, data); } + + function testWithdrawAndRevertThroughCustodyFailsIfReceiverIsZeroAddress() public { + uint256 amount = 1; + bytes memory data = abi.encodePacked("hello"); + + vm.prank(tssAddress); + vm.expectRevert(ZeroAddress.selector); + custody.withdrawAndRevert(address(token), address(0), amount, data); + } } diff --git a/v2/test/GatewayEVM.t.sol b/v2/test/GatewayEVM.t.sol index 112c80fc..4a1a8d00 100644 --- a/v2/test/GatewayEVM.t.sol +++ b/v2/test/GatewayEVM.t.sol @@ -171,6 +171,14 @@ contract GatewayEVMTest is Test, IGatewayEVMErrors, IGatewayEVMEvents, IReceiver gateway.execute(address(receiver), data); } + function testExecuteFailsIfDestinationIsZeroAddress() public { + bytes memory data = abi.encodeWithSignature("receiveNoParams()"); + + vm.prank(tssAddress); + vm.expectRevert(ZeroAddress.selector); + gateway.execute(address(0), data); + } + function testForwardCallToReceiveNoParamsTogglePause() public { vm.prank(tssAddress); vm.expectRevert(abi.encodeWithSelector(AccessControlUnauthorizedAccount.selector, tssAddress, PAUSER_ROLE)); @@ -317,6 +325,12 @@ contract GatewayEVMInboundTest is Test, IGatewayEVMErrors, IGatewayEVMEvents, IR gateway.deposit(destination, amount, address(token)); } + function testFailDepositERC20ToCustodyIfReceiverIsZeroAddress() public { + uint256 amount = 1; + vm.expectRevert("ZeroAddress"); + gateway.deposit(address(0), amount, address(token)); + } + function testDepositEthToTss() public { uint256 amount = 100_000; uint256 tssBalanceBefore = tssAddress.balance; @@ -336,6 +350,13 @@ contract GatewayEVMInboundTest is Test, IGatewayEVMErrors, IGatewayEVMEvents, IR gateway.deposit{ value: amount }(destination); } + function testFailDepositEthToTssIfReceiverIsZeroAddress() public { + uint256 amount = 1; + + vm.expectRevert("ZeroAddress"); + gateway.deposit{ value: amount }(address(0)); + } + function testDepositERC20ToCustodyWithPayload() public { uint256 amount = 100_000; uint256 custodyBalanceBefore = token.balanceOf(address(custody)); @@ -365,6 +386,15 @@ contract GatewayEVMInboundTest is Test, IGatewayEVMErrors, IGatewayEVMEvents, IR gateway.depositAndCall(destination, amount, address(token), payload); } + function testFailDepositERC20ToCustodyWithPayloadIfReceiverIsZeroAddress() public { + uint256 amount = 1; + + bytes memory payload = abi.encodeWithSignature("hello(address)", destination); + + vm.expectRevert("ZeroAddress"); + gateway.depositAndCall(address(0), amount, address(token), payload); + } + function testDepositEthToTssWithPayload() public { uint256 amount = 100_000; uint256 tssBalanceBefore = tssAddress.balance; @@ -386,6 +416,14 @@ contract GatewayEVMInboundTest is Test, IGatewayEVMErrors, IGatewayEVMEvents, IR gateway.depositAndCall{ value: amount }(destination, payload); } + function testFailDepositEthToTssWithPayloadIfReceiverIsZeroAddress() public { + uint256 amount = 1; + bytes memory payload = abi.encodeWithSignature("hello(address)", destination); + + vm.expectRevert("ZeroAddress"); + gateway.depositAndCall{ value: amount }(address(0), payload); + } + function testCallWithPayload() public { bytes memory payload = abi.encodeWithSignature("hello(address)", destination); From 91c5227a81dba4e98543d2d61c8d854160c63fe9 Mon Sep 17 00:00:00 2001 From: skosito Date: Wed, 7 Aug 2024 17:56:34 +0200 Subject: [PATCH 07/21] zero address test --- v2/test/GatewayEVM.t.sol | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/v2/test/GatewayEVM.t.sol b/v2/test/GatewayEVM.t.sol index 4a1a8d00..2413bbbf 100644 --- a/v2/test/GatewayEVM.t.sol +++ b/v2/test/GatewayEVM.t.sol @@ -256,6 +256,15 @@ contract GatewayEVMTest is Test, IGatewayEVMErrors, IGatewayEVMEvents, IReceiver vm.expectRevert(abi.encodeWithSelector(AccessControlUnauthorizedAccount.selector, owner, TSS_ROLE)); gateway.executeRevert{ value: value }(address(receiver), data); } + + function testExecuteRevertFailsIfReceiverIsZeroAddress() public { + uint256 value = 1 ether; + bytes memory data = abi.encodePacked("hello"); + + vm.prank(tssAddress); + vm.expectRevert(ZeroAddress.selector); + gateway.executeRevert{ value: value }(address(0), data); + } } contract GatewayEVMInboundTest is Test, IGatewayEVMErrors, IGatewayEVMEvents, IReceiverEVMEvents { From 40bf55c5ed64813d40f1f4a26a53b13631767740 Mon Sep 17 00:00:00 2001 From: skosito Date: Wed, 7 Aug 2024 18:54:01 +0200 Subject: [PATCH 08/21] add zeta non eth deposit test --- v2/test/GatewayEVM.t.sol | 28 +++++++++++++++++++++++----- 1 file changed, 23 insertions(+), 5 deletions(-) diff --git a/v2/test/GatewayEVM.t.sol b/v2/test/GatewayEVM.t.sol index 2413bbbf..cd8b2443 100644 --- a/v2/test/GatewayEVM.t.sol +++ b/v2/test/GatewayEVM.t.sol @@ -14,6 +14,7 @@ import "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol"; import { Upgrades } from "openzeppelin-foundry-upgrades/Upgrades.sol"; import "./utils/IReceiverEVM.sol"; +import "./utils/Zeta.non-eth.sol"; import "src/evm/ERC20Custody.sol"; import "src/evm/GatewayEVM.sol"; import "src/evm/ZetaConnectorNonNative.sol"; @@ -29,7 +30,7 @@ contract GatewayEVMTest is Test, IGatewayEVMErrors, IGatewayEVMEvents, IReceiver ERC20Custody custody; ZetaConnectorNonNative zetaConnector; TestERC20 token; - TestERC20 zeta; + ZetaNonEth zeta; address owner; address destination; address tssAddress; @@ -49,14 +50,16 @@ contract GatewayEVMTest is Test, IGatewayEVMErrors, IGatewayEVMEvents, IReceiver tssAddress = address(0x5678); token = new TestERC20("test", "TTK"); - zeta = new TestERC20("zeta", "ZETA"); + zeta = new ZetaNonEth(tssAddress, tssAddress); proxy = Upgrades.deployUUPSProxy( "GatewayEVM.sol", abi.encodeCall(GatewayEVM.initialize, (tssAddress, address(zeta), owner)) ); gateway = GatewayEVM(proxy); custody = new ERC20Custody(address(gateway), tssAddress, owner); zetaConnector = new ZetaConnectorNonNative(address(gateway), address(zeta), tssAddress, owner); + vm.prank(tssAddress); + zeta.updateTssAndConnectorAddresses(tssAddress, address(zetaConnector)); receiver = new ReceiverEVM(); vm.deal(tssAddress, 1 ether); @@ -275,7 +278,7 @@ contract GatewayEVMInboundTest is Test, IGatewayEVMErrors, IGatewayEVMEvents, IR ERC20Custody custody; ZetaConnectorNonNative zetaConnector; TestERC20 token; - TestERC20 zeta; + ZetaNonEth zeta; address owner; address destination; address tssAddress; @@ -288,15 +291,16 @@ contract GatewayEVMInboundTest is Test, IGatewayEVMErrors, IGatewayEVMEvents, IR tssAddress = address(0x5678); token = new TestERC20("test", "TTK"); - zeta = new TestERC20("zeta", "ZETA"); + zeta = new ZetaNonEth(tssAddress, tssAddress); proxy = Upgrades.deployUUPSProxy( "GatewayEVM.sol", abi.encodeCall(GatewayEVM.initialize, (tssAddress, address(zeta), owner)) ); gateway = GatewayEVM(proxy); custody = new ERC20Custody(address(gateway), tssAddress, owner); zetaConnector = new ZetaConnectorNonNative(address(gateway), address(zeta), tssAddress, owner); - + vm.prank(tssAddress); + zeta.updateTssAndConnectorAddresses(tssAddress, address(zetaConnector)); vm.deal(tssAddress, 1 ether); vm.startPrank(owner); @@ -305,6 +309,8 @@ contract GatewayEVMInboundTest is Test, IGatewayEVMErrors, IGatewayEVMEvents, IR vm.stopPrank(); token.mint(owner, ownerAmount); + vm.prank(tssAddress); + zetaConnector.withdraw(owner, ownerAmount, ""); } function testDepositERC20ToCustody() public { @@ -325,6 +331,18 @@ contract GatewayEVMInboundTest is Test, IGatewayEVMErrors, IGatewayEVMEvents, IR assertEq(ownerAmount - amount, ownerAmountAfter); } + function testDepositZetaToConnector() public { + uint256 amount = 100_000; + zeta.approve(address(gateway), amount); + + vm.expectEmit(true, true, true, true, address(gateway)); + emit Deposit(owner, destination, amount, address(zeta), ""); + gateway.deposit(destination, amount, address(zeta)); + + uint256 ownerAmountAfter = zeta.balanceOf(owner); + assertEq(ownerAmount - amount, ownerAmountAfter); + } + function testFailDepositERC20ToCustodyIfAmountIs0() public { uint256 amount = 0; From 761ba15a40d0360157873b57668ea6453d304daf Mon Sep 17 00:00:00 2001 From: skosito Date: Wed, 7 Aug 2024 23:56:10 +0200 Subject: [PATCH 09/21] add basic checks and tests for gatewayzevm --- v2/src/zevm/GatewayZEVM.sol | 29 +++- v2/src/zevm/interfaces/IGatewayZEVM.sol | 3 + v2/test/GatewayZEVM.t.sol | 199 ++++++++++++++++++++++++ 3 files changed, 230 insertions(+), 1 deletion(-) diff --git a/v2/src/zevm/GatewayZEVM.sol b/v2/src/zevm/GatewayZEVM.sol index b647ad18..31caab35 100644 --- a/v2/src/zevm/GatewayZEVM.sol +++ b/v2/src/zevm/GatewayZEVM.sol @@ -52,7 +52,7 @@ contract GatewayZEVM is /// @notice Initialize with address of zeta token and admin account set as DEFAULT_ADMIN_ROLE. /// @dev Using admin to authorize upgrades and pause. function initialize(address zetaToken_, address admin_) public initializer { - if (zetaToken_ == address(0)) { + if (zetaToken_ == address(0) || admin_ == address(0)) { revert ZeroAddress(); } __UUPSUpgradeable_init(); @@ -118,6 +118,9 @@ contract GatewayZEVM is /// @param amount The amount of tokens to withdraw. /// @param zrc20 The address of the ZRC20 token. function withdraw(bytes memory receiver, uint256 amount, address zrc20) external nonReentrant whenNotPaused { + if (receiver.length == 0) revert ZeroAddress(); + if (amount == 0) revert InsufficientZRC20Amount(); + uint256 gasFee = _withdrawZRC20(amount, zrc20); emit Withdrawal(msg.sender, 0, receiver, zrc20, amount, gasFee, IZRC20(zrc20).PROTOCOL_FLAT_FEE(), ""); } @@ -137,6 +140,9 @@ contract GatewayZEVM is nonReentrant whenNotPaused { + if (receiver.length == 0) revert ZeroAddress(); + if (amount == 0) revert InsufficientZRC20Amount(); + uint256 gasFee = _withdrawZRC20(amount, zrc20); emit Withdrawal(msg.sender, 0, receiver, zrc20, amount, gasFee, IZRC20(zrc20).PROTOCOL_FLAT_FEE(), message); } @@ -144,6 +150,8 @@ contract GatewayZEVM is /// @notice Withdraw ZETA tokens to an external chain. /// @param amount The amount of tokens to withdraw. function withdraw(uint256 amount, uint256 chainId) external nonReentrant whenNotPaused { + if (amount == 0) revert InsufficientZetaAmount(); + _transferZETA(amount, FUNGIBLE_MODULE_ADDRESS); emit Withdrawal( msg.sender, chainId, abi.encodePacked(FUNGIBLE_MODULE_ADDRESS), address(zetaToken), amount, 0, 0, "" @@ -163,6 +171,8 @@ contract GatewayZEVM is nonReentrant whenNotPaused { + if (amount == 0) revert InsufficientZetaAmount(); + _transferZETA(amount, FUNGIBLE_MODULE_ADDRESS); emit Withdrawal( msg.sender, chainId, abi.encodePacked(FUNGIBLE_MODULE_ADDRESS), address(zetaToken), amount, 0, 0, message @@ -173,6 +183,8 @@ contract GatewayZEVM is /// @param receiver The receiver address on the external chain. /// @param message The calldata to pass to the contract call. function call(bytes memory receiver, uint256 chainId, bytes calldata message) external nonReentrant whenNotPaused { + if (receiver.length == 0) revert ZeroAddress(); + emit Call(msg.sender, chainId, receiver, message); } @@ -181,6 +193,9 @@ contract GatewayZEVM is /// @param amount The amount of tokens to deposit. /// @param target The target address to receive the deposited tokens. function deposit(address zrc20, uint256 amount, address target) external onlyFungible whenNotPaused { + if (zrc20 == address(0) || target == address(0)) revert ZeroAddress(); + if (amount == 0) revert InsufficientZRC20Amount(); + if (target == FUNGIBLE_MODULE_ADDRESS || target == address(this)) revert InvalidTarget(); if (!IZRC20(zrc20).deposit(target, amount)) revert ZRC20DepositFailed(); @@ -203,6 +218,9 @@ contract GatewayZEVM is onlyFungible whenNotPaused { + if (zrc20 == address(0) || target == address(0)) revert ZeroAddress(); + if (amount == 0) revert InsufficientZRC20Amount(); + UniversalContract(target).onCrossChainCall(context, zrc20, amount, message); } @@ -223,6 +241,8 @@ contract GatewayZEVM is onlyFungible whenNotPaused { + if (zrc20 == address(0) || target == address(0)) revert ZeroAddress(); + if (amount == 0) revert InsufficientZRC20Amount(); if (target == FUNGIBLE_MODULE_ADDRESS || target == address(this)) revert InvalidTarget(); if (!IZRC20(zrc20).deposit(target, amount)) revert ZRC20DepositFailed(); @@ -244,6 +264,8 @@ contract GatewayZEVM is onlyFungible whenNotPaused { + if (target == address(0)) revert ZeroAddress(); + if (amount == 0) revert InsufficientZetaAmount(); if (target == FUNGIBLE_MODULE_ADDRESS || target == address(this)) revert InvalidTarget(); _transferZETA(amount, target); @@ -267,6 +289,9 @@ contract GatewayZEVM is onlyFungible whenNotPaused { + if (zrc20 == address(0) || target == address(0)) revert ZeroAddress(); + if (amount == 0) revert InsufficientZRC20Amount(); + UniversalContract(target).onRevert(context, zrc20, amount, message); } @@ -287,6 +312,8 @@ contract GatewayZEVM is onlyFungible whenNotPaused { + if (zrc20 == address(0) || target == address(0)) revert ZeroAddress(); + if (amount == 0) revert InsufficientZRC20Amount(); if (target == FUNGIBLE_MODULE_ADDRESS || target == address(this)) revert InvalidTarget(); if (!IZRC20(zrc20).deposit(target, amount)) revert ZRC20DepositFailed(); diff --git a/v2/src/zevm/interfaces/IGatewayZEVM.sol b/v2/src/zevm/interfaces/IGatewayZEVM.sol index aef95977..c20fe1f4 100644 --- a/v2/src/zevm/interfaces/IGatewayZEVM.sol +++ b/v2/src/zevm/interfaces/IGatewayZEVM.sol @@ -156,6 +156,9 @@ interface IGatewayZEVMErrors { /// @notice Error indicating an insufficient ZRC20 token amount. error InsufficientZRC20Amount(); + /// @notice Error indicating an insufficient zeta amount. + error InsufficientZetaAmount(); + /// @notice Error indicating a failure to burn ZRC20 tokens. error ZRC20BurnFailed(); diff --git a/v2/test/GatewayZEVM.t.sol b/v2/test/GatewayZEVM.t.sol index 13973114..3a6888bb 100644 --- a/v2/test/GatewayZEVM.t.sol +++ b/v2/test/GatewayZEVM.t.sol @@ -26,6 +26,7 @@ contract GatewayZEVMInboundTest is Test, IGatewayZEVMEvents, IGatewayZEVMErrors address owner; address addr1; address fungibleModule; + error ZeroAddress(); function setUp() public { owner = address(this); @@ -73,6 +74,16 @@ contract GatewayZEVMInboundTest is Test, IGatewayZEVMEvents, IGatewayZEVMErrors assertEq(ownerBalanceBefore - amount, ownerBalanceAfter); } + function testWithdrawZRC20FailsIsAmountIs0() public { + vm.expectRevert(InsufficientZRC20Amount.selector); + gateway.withdraw(abi.encodePacked(addr1), 0, address(zrc20)); + } + + function testWithdrawZRC20FailsIfReceiverIsZeroAddress() public { + vm.expectRevert(ZeroAddress.selector); + gateway.withdraw(abi.encodePacked(""), 1, address(zrc20)); + } + function testWithdrawZRC20FailsIfNoAllowance() public { uint256 amount = 1; uint256 ownerBalanceBefore = zrc20.balanceOf(owner); @@ -89,6 +100,18 @@ contract GatewayZEVMInboundTest is Test, IGatewayZEVMEvents, IGatewayZEVMErrors assertEq(ownerBalanceBefore, ownerBalanceAfter); } + function testWithdrawAndCallZRC20FailsIfReceiverIsZeroAddress() public { + bytes memory message = abi.encodeWithSignature("hello(address)", addr1); + vm.expectRevert(ZeroAddress.selector); + gateway.withdrawAndCall(abi.encodePacked(""), 1, address(zrc20), message); + } + + function testWithdrawAndCallZRC20FailsIfAmountIsZero() public { + bytes memory message = abi.encodeWithSignature("hello(address)", addr1); + vm.expectRevert(InsufficientZRC20Amount.selector); + gateway.withdrawAndCall(abi.encodePacked(addr1), 0, address(zrc20), message); + } + function testWithdrawZRC20WithMessageFailsIfNoAllowance() public { uint256 amount = 1; uint256 ownerBalanceBefore = zrc20.balanceOf(owner); @@ -121,6 +144,17 @@ contract GatewayZEVMInboundTest is Test, IGatewayZEVMEvents, IGatewayZEVMErrors assertEq(ownerBalanceBefore - amount, ownerBalanceAfter); } + function testWithdrawZETAFailsIfAmountIsZero() public { + vm.expectRevert(InsufficientZetaAmount.selector); + gateway.withdraw(0, 1); + } + + function testWithdrawAndcallZETAFailsIfAmountIsZero() public { + bytes memory message = abi.encodeWithSignature("hello(address)", addr1); + vm.expectRevert(InsufficientZetaAmount.selector); + gateway.withdrawAndCall(0, 1, message); + } + function testWithdrawZETA() public { uint256 amount = 1; uint256 ownerBalanceBefore = zetaToken.balanceOf(owner); @@ -213,6 +247,12 @@ contract GatewayZEVMInboundTest is Test, IGatewayZEVMEvents, IGatewayZEVMErrors assertEq(fungibleModuleBalanceBefore, fungibleModule.balance); } + function testCallFailsIfReceiverIsZeroAddress() public { + bytes memory message = abi.encodeWithSignature("hello(address)", addr1); + vm.expectRevert(ZeroAddress.selector); + gateway.call(abi.encodePacked(""), 1, message); + } + function testCall() public { bytes memory message = abi.encodeWithSignature("hello(address)", addr1); vm.expectEmit(true, true, true, true, address(gateway)); @@ -237,6 +277,7 @@ contract GatewayZEVMOutboundTest is Test, IGatewayZEVMEvents, IGatewayZEVMErrors event ContextData(bytes origin, address sender, uint256 chainID, address msgSender, string message); event ContextDataRevert(bytes origin, address sender, uint256 chainID, address msgSender, string message); + error ZeroAddress(); error EnforcedPause(); error AccessControlUnauthorizedAccount(address account, bytes32 neededRole); @@ -277,6 +318,24 @@ contract GatewayZEVMOutboundTest is Test, IGatewayZEVMEvents, IGatewayZEVMErrors vm.stopPrank(); } + function testDepositFailsIfZrc20IsZeroAddress() public { + vm.prank(fungibleModule); + vm.expectRevert(ZeroAddress.selector); + gateway.deposit(address(0), 1, addr1); + } + + function testDepositFailsIfTargetIsZeroAddress() public { + vm.prank(fungibleModule); + vm.expectRevert(ZeroAddress.selector); + gateway.deposit(address(zrc20), 1, address(0)); + } + + function testDepositFailsIfAmountIs0() public { + vm.prank(fungibleModule); + vm.expectRevert(InsufficientZRC20Amount.selector); + gateway.deposit(address(zrc20), 0, addr1); + } + function testDeposit() public { uint256 amount = 1; uint256 balanceBefore = zrc20.balanceOf(addr1); @@ -347,6 +406,36 @@ contract GatewayZEVMOutboundTest is Test, IGatewayZEVMEvents, IGatewayZEVMErrors vm.expectRevert(InvalidTarget.selector); gateway.deposit(address(zrc20), amount, fungibleModule); } + + function testExecuteFailsIfZrc20IsZeroAddress() public { + bytes memory message = abi.encode("hello"); + zContext memory context = + zContext({ origin: abi.encodePacked(address(gateway)), sender: fungibleModule, chainID: 1 }); + + vm.prank(fungibleModule); + vm.expectRevert(ZeroAddress.selector); + gateway.execute(context, address(0), 1, address(testZContract), message); + } + + function testExecuteFailsIfTargetIsZeroAddress() public { + bytes memory message = abi.encode("hello"); + zContext memory context = + zContext({ origin: abi.encodePacked(address(gateway)), sender: fungibleModule, chainID: 1 }); + + vm.prank(fungibleModule); + vm.expectRevert(ZeroAddress.selector); + gateway.execute(context, address(zrc20), 1, address(0), message); + } + + function testExecuteFailsIfAmountIsZero() public { + bytes memory message = abi.encode("hello"); + zContext memory context = + zContext({ origin: abi.encodePacked(address(gateway)), sender: fungibleModule, chainID: 1 }); + + vm.prank(fungibleModule); + vm.expectRevert(InsufficientZRC20Amount.selector); + gateway.execute(context, address(zrc20), 0, address(testZContract), message); + } function testExecuteZContract() public { bytes memory message = abi.encode("hello"); @@ -369,6 +458,36 @@ contract GatewayZEVMOutboundTest is Test, IGatewayZEVMEvents, IGatewayZEVMErrors gateway.execute(context, address(zrc20), 1, address(testZContract), message); } + function testExecuteRevertZContractFailsIfZrc20IsZeroAddress() public { + bytes memory message = abi.encode("hello"); + revertContext memory context = + revertContext({ origin: abi.encodePacked(address(gateway)), sender: fungibleModule, chainID: 1 }); + + vm.prank(fungibleModule); + vm.expectRevert(ZeroAddress.selector); + gateway.executeRevert(context, address(0), 1, address(testZContract), message); + } + + function testExecuteRevertZContractFailsIfTargetIsZeroAddress() public { + bytes memory message = abi.encode("hello"); + revertContext memory context = + revertContext({ origin: abi.encodePacked(address(gateway)), sender: fungibleModule, chainID: 1 }); + + vm.prank(fungibleModule); + vm.expectRevert(ZeroAddress.selector); + gateway.executeRevert(context, address(zrc20), 1, address(0), message); + } + + function testExecuteRevertZContractFailsIfAmountIsZero() public { + bytes memory message = abi.encode("hello"); + revertContext memory context = + revertContext({ origin: abi.encodePacked(address(gateway)), sender: fungibleModule, chainID: 1 }); + + vm.prank(fungibleModule); + vm.expectRevert(InsufficientZRC20Amount.selector); + gateway.executeRevert(context, address(zrc20), 0, address(testZContract), message); + } + function testExecuteRevertZContract() public { bytes memory message = abi.encode("hello"); revertContext memory context = @@ -390,6 +509,36 @@ contract GatewayZEVMOutboundTest is Test, IGatewayZEVMEvents, IGatewayZEVMErrors gateway.executeRevert(context, address(zrc20), 1, address(testZContract), message); } + function testDepositZRC20AndCallZContractFailsIfZrc20IsZeroAddress() public { + bytes memory message = abi.encode("hello"); + zContext memory context = + zContext({ origin: abi.encodePacked(address(gateway)), sender: fungibleModule, chainID: 1 }); + + vm.prank(fungibleModule); + vm.expectRevert(ZeroAddress.selector); + gateway.depositAndCall(context, address(0), 1, address(testZContract), message); + } + + function testDepositZRC20AndCallZContractFailsIfTargetIsZeroAddress() public { + bytes memory message = abi.encode("hello"); + zContext memory context = + zContext({ origin: abi.encodePacked(address(gateway)), sender: fungibleModule, chainID: 1 }); + + vm.prank(fungibleModule); + vm.expectRevert(ZeroAddress.selector); + gateway.depositAndCall(context, address(zrc20), 1, address(0), message); + } + + function testDepositZRC20AndCallZContractFailsIfAmountIsZero() public { + bytes memory message = abi.encode("hello"); + zContext memory context = + zContext({ origin: abi.encodePacked(address(gateway)), sender: fungibleModule, chainID: 1 }); + + vm.prank(fungibleModule); + vm.expectRevert(InsufficientZRC20Amount.selector); + gateway.depositAndCall(context, address(zrc20), 0, address(testZContract), message); + } + function testDepositZRC20AndCallZContract() public { uint256 balanceBefore = zrc20.balanceOf(address(testZContract)); assertEq(0, balanceBefore); @@ -437,6 +586,36 @@ contract GatewayZEVMOutboundTest is Test, IGatewayZEVMEvents, IGatewayZEVMErrors gateway.depositAndCall(context, address(zrc20), 1, address(gateway), message); } + function testDepositAndRevertZRC20AndCallZContractFailsIfZrc20IsZeroAddress() public { + bytes memory message = abi.encode("hello"); + revertContext memory context = + revertContext({ origin: abi.encodePacked(address(gateway)), sender: fungibleModule, chainID: 1 }); + + vm.prank(fungibleModule); + vm.expectRevert(ZeroAddress.selector); + gateway.depositAndRevert(context, address(0), 1, address(testZContract), message); + } + + function testDepositAndRevertZRC20AndCallZContractFailsIfTargetIsZeroAddress() public { + bytes memory message = abi.encode("hello"); + revertContext memory context = + revertContext({ origin: abi.encodePacked(address(gateway)), sender: fungibleModule, chainID: 1 }); + + vm.prank(fungibleModule); + vm.expectRevert(ZeroAddress.selector); + gateway.depositAndRevert(context, address(zrc20), 1, address(0), message); + } + + function testDepositAndRevertZRC20AndCallZContractFailsIfAmountIsZero() public { + bytes memory message = abi.encode("hello"); + revertContext memory context = + revertContext({ origin: abi.encodePacked(address(gateway)), sender: fungibleModule, chainID: 1 }); + + vm.prank(fungibleModule); + vm.expectRevert(InsufficientZRC20Amount.selector); + gateway.depositAndRevert(context, address(zrc20), 0, address(testZContract), message); + } + function testDepositAndRevertZRC20AndCallZContract() public { uint256 balanceBefore = zrc20.balanceOf(address(testZContract)); assertEq(0, balanceBefore); @@ -484,6 +663,26 @@ contract GatewayZEVMOutboundTest is Test, IGatewayZEVMEvents, IGatewayZEVMErrors gateway.depositAndRevert(context, address(zrc20), 1, address(gateway), message); } + function testDepositZETAAndCallZContractFailsIfTargetIsZeroAddress() public { + bytes memory message = abi.encode("hello"); + zContext memory context = + zContext({ origin: abi.encodePacked(address(gateway)), sender: fungibleModule, chainID: 1 }); + + vm.prank(fungibleModule); + vm.expectRevert(ZeroAddress.selector); + gateway.depositAndCall(context, 1, address(0), message); + } + + function testDepositZETAAndCallZContractFailsIfTargetIsAmountIsZero() public { + bytes memory message = abi.encode("hello"); + zContext memory context = + zContext({ origin: abi.encodePacked(address(gateway)), sender: fungibleModule, chainID: 1 }); + + vm.prank(fungibleModule); + vm.expectRevert(InsufficientZetaAmount.selector); + gateway.depositAndCall(context, 0, address(zrc20), message); + } + function testDepositZETAAndCallZContract() public { uint256 amount = 1; uint256 fungibleBalanceBefore = zetaToken.balanceOf(fungibleModule); From 6c7355235ebb09c3ecc87c8bd13d5767e8873edd Mon Sep 17 00:00:00 2001 From: skosito Date: Thu, 8 Aug 2024 00:09:22 +0200 Subject: [PATCH 10/21] tests for no balance --- v2/test/GatewayZEVM.t.sol | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) diff --git a/v2/test/GatewayZEVM.t.sol b/v2/test/GatewayZEVM.t.sol index 3a6888bb..f7363707 100644 --- a/v2/test/GatewayZEVM.t.sol +++ b/v2/test/GatewayZEVM.t.sol @@ -27,6 +27,7 @@ contract GatewayZEVMInboundTest is Test, IGatewayZEVMEvents, IGatewayZEVMErrors address addr1; address fungibleModule; error ZeroAddress(); + error LowBalance(); function setUp() public { owner = address(this); @@ -74,6 +75,27 @@ contract GatewayZEVMInboundTest is Test, IGatewayZEVMEvents, IGatewayZEVMErrors assertEq(ownerBalanceBefore - amount, ownerBalanceAfter); } + function testWithdrawZRC20FailsIfNoBalanceForGasFee() public { + uint256 amount = 1; + uint256 ownerBalance = zrc20.balanceOf(owner); + zrc20.transfer(address(0x123), ownerBalance); + + vm.prank(fungibleModule); + zrc20.updateGasLimit(10); + + vm.expectRevert(LowBalance.selector); + gateway.withdraw(abi.encodePacked(addr1), amount, address(zrc20)); + } + + function testWithdrawZRC20FailsIfNoBalanceForTransfer() public { + uint256 amount = 2; + uint256 ownerBalance = zrc20.balanceOf(owner); + zrc20.transfer(address(0x123), ownerBalance - 1); + + vm.expectRevert(LowBalance.selector); + gateway.withdraw(abi.encodePacked(addr1), amount, address(zrc20)); + } + function testWithdrawZRC20FailsIsAmountIs0() public { vm.expectRevert(InsufficientZRC20Amount.selector); gateway.withdraw(abi.encodePacked(addr1), 0, address(zrc20)); @@ -200,6 +222,16 @@ contract GatewayZEVMInboundTest is Test, IGatewayZEVMEvents, IGatewayZEVMErrors assertEq(fungibleModuleBalanceBefore, fungibleModule.balance); } + function testWithdrawZETAFailsIfNoBalance() public { + uint256 amount = 1; + uint256 ownerBalance = zetaToken.balanceOf(owner); + zetaToken.transfer(address(0x123), ownerBalance); + uint256 chainId = 1; + + vm.expectRevert(); + gateway.withdraw(amount, chainId); + } + function testWithdrawZETAWithMessage() public { uint256 amount = 1; uint256 ownerBalanceBefore = zetaToken.balanceOf(owner); From 4f042ccc95eab05e2af49c55f540f70ce6882463 Mon Sep 17 00:00:00 2001 From: skosito Date: Thu, 8 Aug 2024 00:21:20 +0200 Subject: [PATCH 11/21] add missing zrc20 tests --- v2/test/ZRC20.t.sol | 86 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 86 insertions(+) diff --git a/v2/test/ZRC20.t.sol b/v2/test/ZRC20.t.sol index 36ea455a..bd8636de 100644 --- a/v2/test/ZRC20.t.sol +++ b/v2/test/ZRC20.t.sol @@ -63,6 +63,34 @@ contract ZRC20Test is Test, ZRC20Errors { assertEq(100_000, totalSupply); } + function testTransfer() public { + uint256 balanceStart = zrc20.balanceOf(addr1); + assertEq(0, balanceStart); + + uint256 amount = 50_000; + zrc20.transfer(addr1, amount); + + uint256 balanceAfter = zrc20.balanceOf(addr1); + assertEq(amount, balanceAfter); + } + + function testTransferFailsIfNoBalance() public { + uint256 balanceStart = zrc20.balanceOf(addr1); + assertEq(0, balanceStart); + + uint256 amount = 500_000; + zrc20.approve(owner, amount); + vm.expectRevert(LowBalance.selector); + zrc20.transfer(addr1, amount); + } + + function testTransferFailsIfRecipientIsZeroAddress() public { + uint256 amount = 500_000; + zrc20.approve(owner, amount); + vm.expectRevert(ZeroAddress.selector); + zrc20.transfer(address(0), amount); + } + function testTransferFrom() public { uint256 balanceStart = zrc20.balanceOf(addr1); assertEq(0, balanceStart); @@ -79,6 +107,9 @@ contract ZRC20Test is Test, ZRC20Errors { uint256 balanceStart = zrc20.balanceOf(addr1); assertEq(0, balanceStart); + uint256 allowance = zrc20.allowance(owner, owner); + assertEq(0, allowance); + uint256 amount = 50_000; vm.expectRevert(LowAllowance.selector); zrc20.transferFrom(owner, addr1, amount); @@ -124,6 +155,11 @@ contract ZRC20Test is Test, ZRC20Errors { assertEq(50_000, totalSupplyAfter); } + function testApproveFailsIfRecipientIsZeroAddress() public { + vm.expectRevert(ZeroAddress.selector); + zrc20.approve(address(0), 10); + } + function testBurnFailsIfNoBalance() public { vm.expectRevert(LowBalance.selector); zrc20.burn(150_000); @@ -140,6 +176,12 @@ contract ZRC20Test is Test, ZRC20Errors { assertEq(200_000, totalSupplyEnd); } + function testDepositFailsIfRecipientIsZeroAddress() public { + vm.prank(proxy); + vm.expectRevert(ZeroAddress.selector); + zrc20.deposit(address(0), 100_000); + } + function testWithdrawGasFee() public { vm.prank(fungibleModule); uint256 gasLimit = 10; @@ -200,6 +242,38 @@ contract ZRC20Test is Test, ZRC20Errors { assertEq(50_000, totalSupplyAfter); } + function testWithdrawFailsIfNoBalance() public { + uint256 gasLimit = 10; + uint256 protocolFlatFee = 100_000_000; + + vm.prank(fungibleModule); + zrc20.updateGasLimit(gasLimit); + + vm.prank(fungibleModule); + zrc20.updateProtocolFlatFee(protocolFlatFee); + + zrc20.approve(address(zrc20), 200_000_000); + + vm.expectRevert(LowBalance.selector); + zrc20.withdraw(abi.encodePacked(addr1), 100); + } + + function testWithdrawFailsIfNoAllowance() public { + uint256 gasLimit = 10; + uint256 protocolFlatFee = 10; + + vm.prank(fungibleModule); + zrc20.updateGasLimit(gasLimit); + + vm.prank(fungibleModule); + zrc20.updateProtocolFlatFee(protocolFlatFee); + + zrc20.approve(address(zrc20), 0); + + vm.expectRevert(); + zrc20.withdraw(abi.encodePacked(addr1), 1); + } + function testDepositFailsIfSenderIsNotGateway() public { vm.expectRevert(InvalidSender.selector); zrc20.deposit(owner, 100_000); @@ -211,6 +285,12 @@ contract ZRC20Test is Test, ZRC20Errors { assertEq(zrc20.SYSTEM_CONTRACT_ADDRESS(), address(0x3211)); } + function testUpdateSystemContractAddressFailsIfZeroAddress() public { + vm.prank(fungibleModule); + vm.expectRevert(ZeroAddress.selector); + zrc20.updateSystemContractAddress(address(0)); + } + function testUpdateSystemContractAddressFailsIfSenderIsNotFungible() public { vm.expectRevert(CallerIsNotFungibleModule.selector); zrc20.updateSystemContractAddress(address(0x3211)); @@ -222,6 +302,12 @@ contract ZRC20Test is Test, ZRC20Errors { assertEq(zrc20.gatewayAddress(), address(0x3211)); } + function testUpdateGatewayAddressFailsIfZeroAddress() public { + vm.prank(fungibleModule); + vm.expectRevert(ZeroAddress.selector); + zrc20.updateGatewayAddress(address(0)); + } + function testUpdateGatewayAddressFailsIfSenderIsNotFungible() public { vm.expectRevert(CallerIsNotFungibleModule.selector); zrc20.updateGatewayAddress(address(0x3211)); From c69839858c931280a3f0bae126ff8d7d165ac866 Mon Sep 17 00:00:00 2001 From: skosito Date: Thu, 8 Aug 2024 00:25:52 +0200 Subject: [PATCH 12/21] yarn generate --- v2/pkg/erc20custody.sol/erc20custody.go | 2 +- v2/pkg/erc20custody.t.sol/erc20custodytest.go | 6092 +++++++++++++++++ .../erc20custodyechidnatest.go | 2 +- v2/pkg/gatewayevm.sol/gatewayevm.go | 4 +- .../gatewayevm.t.sol/gatewayevminboundtest.go | 109 +- v2/pkg/gatewayevm.t.sol/gatewayevmtest.go | 413 +- .../gatewayevmechidnatest.go | 4 +- .../gatewayevmuupsupgradetest.go | 4 +- .../gatewayevmupgradetest.go | 4 +- .../gatewayevmzevmtest.go | 4 +- v2/pkg/gatewayzevm.sol/gatewayzevm.go | 4 +- .../gatewayzevminboundtest.go | 214 +- .../gatewayzevmoutboundtest.go | 361 +- v2/pkg/igatewayevm.sol/igatewayevmerrors.go | 2 +- v2/pkg/igatewayzevm.sol/igatewayzevmerrors.go | 2 +- v2/pkg/senderzevm.sol/senderzevm.go | 2 +- .../zetaconnectorbase.go | 33 +- .../zetaconnectornative.go | 35 +- .../zetaconnectornativetest.go | 56 +- .../zetaconnectornonnative.go | 35 +- .../zetaconnectornonnativetest.go | 171 +- v2/pkg/zrc20.t.sol/zrc20test.go | 193 +- v2/src/evm/GatewayEVM.sol | 2 +- v2/test/GatewayEVM.t.sol | 8 +- v2/test/GatewayZEVM.t.sol | 3 +- v2/typechain-types/ZetaConnectorBase.ts | 8 + v2/typechain-types/ZetaConnectorNative.ts | 8 + v2/typechain-types/ZetaConnectorNonNative.ts | 8 + .../ERC20CustodyEchidnaTest__factory.ts | 2 +- .../factories/ERC20Custody__factory.ts | 2 +- .../GatewayEVMEchidnaTest__factory.ts | 7 +- .../GatewayEVMUpgradeTest__factory.ts | 7 +- .../factories/GatewayEVM__factory.ts | 7 +- .../factories/GatewayZEVM__factory.ts | 7 +- .../IGatewayEVMErrors__factory.ts | 5 + .../IGatewayZEVMErrors__factory.ts | 5 + .../factories/SenderZEVM__factory.ts | 2 +- .../factories/ZetaConnectorBase__factory.ts | 13 + .../factories/ZetaConnectorNative__factory.ts | 15 +- .../ZetaConnectorNonNative__factory.ts | 15 +- 40 files changed, 7590 insertions(+), 280 deletions(-) create mode 100644 v2/pkg/erc20custody.t.sol/erc20custodytest.go diff --git a/v2/pkg/erc20custody.sol/erc20custody.go b/v2/pkg/erc20custody.sol/erc20custody.go index 7abae95e..171dff42 100644 --- a/v2/pkg/erc20custody.sol/erc20custody.go +++ b/v2/pkg/erc20custody.sol/erc20custody.go @@ -32,7 +32,7 @@ var ( // ERC20CustodyMetaData contains all meta data concerning the ERC20Custody contract. var ERC20CustodyMetaData = &bind.MetaData{ ABI: "[{\"type\":\"constructor\",\"inputs\":[{\"name\":\"gateway_\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"tssAddress_\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"admin_\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"DEFAULT_ADMIN_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"PAUSER_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"WITHDRAWER_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"gateway\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIGatewayEVM\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getRoleAdmin\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"grantRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"hasRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"pause\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"paused\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"renounceRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"callerConfirmation\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"revokeRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"supportsInterface\",\"inputs\":[{\"name\":\"interfaceId\",\"type\":\"bytes4\",\"internalType\":\"bytes4\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"unpause\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"withdraw\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"withdrawAndCall\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"withdrawAndRevert\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"event\",\"name\":\"Paused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleAdminChanged\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"previousAdminRole\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"newAdminRole\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleGranted\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleRevoked\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Unpaused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Withdraw\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"WithdrawAndCall\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"WithdrawAndRevert\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"AccessControlBadConfirmation\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"AccessControlUnauthorizedAccount\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"neededRole\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"type\":\"error\",\"name\":\"AddressEmptyCode\",\"inputs\":[{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"AddressInsufficientBalance\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"EnforcedPause\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ExpectedPause\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"FailedInnerCall\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ReentrancyGuardReentrantCall\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"SafeERC20FailedOperation\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"ZeroAddress\",\"inputs\":[]}]", - Bin: "0x60a060405234801561001057600080fd5b5060405161140b38038061140b83398101604081905261002f916101b3565b60016000556002805460ff191690556001600160a01b038316158061005b57506001600160a01b038216155b8061006d57506001600160a01b038116155b1561008b5760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b0383166080526100a3600082610102565b506100ce7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a82610102565b506100f97f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e483610102565b505050506101f6565b60008281526001602090815260408083206001600160a01b038516845290915281205460ff1661018d5760008381526001602081815260408084206001600160a01b0387168086529252808420805460ff19169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a4506001610191565b5060005b92915050565b80516001600160a01b03811681146101ae57600080fd5b919050565b6000806000606084860312156101c857600080fd5b6101d184610197565b92506101df60208501610197565b91506101ed60408501610197565b90509250925092565b6080516111de61022d60003960008181610132015281816103c5015281816104270152818161065801526106ba01526111de6000f3fe608060405234801561001057600080fd5b50600436106101005760003560e01c80638456cb5911610097578063c8a0236211610066578063c8a0236214610276578063d547741f14610289578063d9caed121461029c578063e63ab1e9146102af57600080fd5b80638456cb59146101f957806385f438c11461020157806391d1485414610228578063a217fddf1461026e57600080fd5b80632f2ff15d116100d35780632f2ff15d146101c057806336568abe146101d35780633f4ba83a146101e65780635c975abb146101ee57600080fd5b806301ffc9a714610105578063116191b61461012d57806321fc65f214610179578063248a9ca31461018e575b600080fd5b610118610113366004610f04565b6102d6565b60405190151581526020015b60405180910390f35b6101547f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610124565b61018c610187366004610f6f565b61036f565b005b6101b261019c36600461100c565b6000908152600160208190526040909120015490565b604051908152602001610124565b61018c6101ce366004611025565b610511565b61018c6101e1366004611025565b61053d565b61018c61059b565b60025460ff16610118565b61018c6105d0565b6101b27f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b610118610236366004611025565b600091825260016020908152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b6101b2600081565b61018c610284366004610f6f565b610602565b61018c610297366004611025565b61078a565b61018c6102aa366004611051565b6107b0565b6101b27f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061036957507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b61037761087d565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e46103a1816108c0565b6103a96108ca565b6103ea73ffffffffffffffffffffffffffffffffffffffff87167f000000000000000000000000000000000000000000000000000000000000000086610909565b6040517f5131ab5900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690635131ab599061046490899089908990899089906004016110d7565b600060405180830381600087803b15801561047e57600080fd5b505af1158015610492573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167f85b5be9cf454e05e0bddf49315178102227c312078eefa3c00294fb4d912ae4e8686866040516104f793929190611134565b60405180910390a35061050a6001600055565b5050505050565b6000828152600160208190526040909120015461052d816108c0565b6105378383610996565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8116331461058c576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6105968282610a61565b505050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a6105c5816108c0565b6105cd610b20565b50565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a6105fa816108c0565b6105cd610b9d565b61060a61087d565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e4610634816108c0565b61063c6108ca565b61067d73ffffffffffffffffffffffffffffffffffffffff87167f000000000000000000000000000000000000000000000000000000000000000086610909565b6040517fb8969bd400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063b8969bd4906106f790899089908990899089906004016110d7565b600060405180830381600087803b15801561071157600080fd5b505af1158015610725573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fb9d4efa96044e5f5e03e696fa9ae2ff66911cc27e8a637c3627c75bc5b2241c88686866040516104f793929190611134565b600082815260016020819052604090912001546107a6816108c0565b6105378383610a61565b6107b861087d565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e46107e2816108c0565b6107ea6108ca565b61080b73ffffffffffffffffffffffffffffffffffffffff85168484610909565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f9b1bfa7fa9ee420a16e124f794c35ac9f90472acc99140eb2f6447c714cad8eb8460405161086a91815260200190565b60405180910390a3506105966001600055565b6002600054036108b9576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b6105cd8133610bf8565b60025460ff1615610907576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6040805173ffffffffffffffffffffffffffffffffffffffff8416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb00000000000000000000000000000000000000000000000000000000179052610596908490610c89565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff16610a5957600083815260016020818152604080842073ffffffffffffffffffffffffffffffffffffffff8716808652925280842080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a4506001610369565b506000610369565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff1615610a5957600083815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8616808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a4506001610369565b610b28610d1f565b600280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b610ba56108ca565b600280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258610b733390565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16610c85576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82166004820152602481018390526044015b60405180910390fd5b5050565b6000610cab73ffffffffffffffffffffffffffffffffffffffff841683610d5b565b90508051600014158015610cd0575080806020019051810190610cce9190611157565b155b15610596576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84166004820152602401610c7c565b60025460ff16610907576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6060610d6983836000610d70565b9392505050565b606081471015610dae576040517fcd786059000000000000000000000000000000000000000000000000000000008152306004820152602401610c7c565b6000808573ffffffffffffffffffffffffffffffffffffffff168486604051610dd79190611179565b60006040518083038185875af1925050503d8060008114610e14576040519150601f19603f3d011682016040523d82523d6000602084013e610e19565b606091505b5091509150610e29868383610e33565b9695505050505050565b606082610e4857610e4382610ec2565b610d69565b8151158015610e6c575073ffffffffffffffffffffffffffffffffffffffff84163b155b15610ebb576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85166004820152602401610c7c565b5080610d69565b805115610ed25780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060208284031215610f1657600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610d6957600080fd5b803573ffffffffffffffffffffffffffffffffffffffff81168114610f6a57600080fd5b919050565b600080600080600060808688031215610f8757600080fd5b610f9086610f46565b9450610f9e60208701610f46565b935060408601359250606086013567ffffffffffffffff811115610fc157600080fd5b8601601f81018813610fd257600080fd5b803567ffffffffffffffff811115610fe957600080fd5b886020828401011115610ffb57600080fd5b959894975092955050506020019190565b60006020828403121561101e57600080fd5b5035919050565b6000806040838503121561103857600080fd5b8235915061104860208401610f46565b90509250929050565b60008060006060848603121561106657600080fd5b61106f84610f46565b925061107d60208501610f46565b929592945050506040919091013590565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff8616815273ffffffffffffffffffffffffffffffffffffffff8516602082015283604082015260806060820152600061112960808301848661108e565b979650505050505050565b83815260406020820152600061114e60408301848661108e565b95945050505050565b60006020828403121561116957600080fd5b81518015158114610d6957600080fd5b6000825160005b8181101561119a5760208186018101518583015201611180565b50600092019182525091905056fea264697066735822122035ca457bdc8b45adde9844ff8416a0abd723c23055fd6933ddc05523b5f5b6de64736f6c634300081a0033", + Bin: "0x60a060405234801561001057600080fd5b5060405161140b38038061140b83398101604081905261002f916101b3565b60016000556002805460ff191690556001600160a01b038316158061005b57506001600160a01b038216155b8061006d57506001600160a01b038116155b1561008b5760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b0383166080526100a3600082610102565b506100ce7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a82610102565b506100f97f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e483610102565b505050506101f6565b60008281526001602090815260408083206001600160a01b038516845290915281205460ff1661018d5760008381526001602081815260408084206001600160a01b0387168086529252808420805460ff19169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a4506001610191565b5060005b92915050565b80516001600160a01b03811681146101ae57600080fd5b919050565b6000806000606084860312156101c857600080fd5b6101d184610197565b92506101df60208501610197565b91506101ed60408501610197565b90509250925092565b6080516111de61022d60003960008181610132015281816103c5015281816104270152818161065801526106ba01526111de6000f3fe608060405234801561001057600080fd5b50600436106101005760003560e01c80638456cb5911610097578063c8a0236211610066578063c8a0236214610276578063d547741f14610289578063d9caed121461029c578063e63ab1e9146102af57600080fd5b80638456cb59146101f957806385f438c11461020157806391d1485414610228578063a217fddf1461026e57600080fd5b80632f2ff15d116100d35780632f2ff15d146101c057806336568abe146101d35780633f4ba83a146101e65780635c975abb146101ee57600080fd5b806301ffc9a714610105578063116191b61461012d57806321fc65f214610179578063248a9ca31461018e575b600080fd5b610118610113366004610f04565b6102d6565b60405190151581526020015b60405180910390f35b6101547f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610124565b61018c610187366004610f6f565b61036f565b005b6101b261019c36600461100c565b6000908152600160208190526040909120015490565b604051908152602001610124565b61018c6101ce366004611025565b610511565b61018c6101e1366004611025565b61053d565b61018c61059b565b60025460ff16610118565b61018c6105d0565b6101b27f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b610118610236366004611025565b600091825260016020908152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b6101b2600081565b61018c610284366004610f6f565b610602565b61018c610297366004611025565b61078a565b61018c6102aa366004611051565b6107b0565b6101b27f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061036957507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b61037761087d565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e46103a1816108c0565b6103a96108ca565b6103ea73ffffffffffffffffffffffffffffffffffffffff87167f000000000000000000000000000000000000000000000000000000000000000086610909565b6040517f5131ab5900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690635131ab599061046490899089908990899089906004016110d7565b600060405180830381600087803b15801561047e57600080fd5b505af1158015610492573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167f85b5be9cf454e05e0bddf49315178102227c312078eefa3c00294fb4d912ae4e8686866040516104f793929190611134565b60405180910390a35061050a6001600055565b5050505050565b6000828152600160208190526040909120015461052d816108c0565b6105378383610996565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8116331461058c576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6105968282610a61565b505050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a6105c5816108c0565b6105cd610b20565b50565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a6105fa816108c0565b6105cd610b9d565b61060a61087d565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e4610634816108c0565b61063c6108ca565b61067d73ffffffffffffffffffffffffffffffffffffffff87167f000000000000000000000000000000000000000000000000000000000000000086610909565b6040517fb8969bd400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063b8969bd4906106f790899089908990899089906004016110d7565b600060405180830381600087803b15801561071157600080fd5b505af1158015610725573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fb9d4efa96044e5f5e03e696fa9ae2ff66911cc27e8a637c3627c75bc5b2241c88686866040516104f793929190611134565b600082815260016020819052604090912001546107a6816108c0565b6105378383610a61565b6107b861087d565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e46107e2816108c0565b6107ea6108ca565b61080b73ffffffffffffffffffffffffffffffffffffffff85168484610909565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f9b1bfa7fa9ee420a16e124f794c35ac9f90472acc99140eb2f6447c714cad8eb8460405161086a91815260200190565b60405180910390a3506105966001600055565b6002600054036108b9576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b6105cd8133610bf8565b60025460ff1615610907576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6040805173ffffffffffffffffffffffffffffffffffffffff8416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb00000000000000000000000000000000000000000000000000000000179052610596908490610c89565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff16610a5957600083815260016020818152604080842073ffffffffffffffffffffffffffffffffffffffff8716808652925280842080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a4506001610369565b506000610369565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff1615610a5957600083815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8616808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a4506001610369565b610b28610d1f565b600280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b610ba56108ca565b600280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258610b733390565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16610c85576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82166004820152602481018390526044015b60405180910390fd5b5050565b6000610cab73ffffffffffffffffffffffffffffffffffffffff841683610d5b565b90508051600014158015610cd0575080806020019051810190610cce9190611157565b155b15610596576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84166004820152602401610c7c565b60025460ff16610907576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6060610d6983836000610d70565b9392505050565b606081471015610dae576040517fcd786059000000000000000000000000000000000000000000000000000000008152306004820152602401610c7c565b6000808573ffffffffffffffffffffffffffffffffffffffff168486604051610dd79190611179565b60006040518083038185875af1925050503d8060008114610e14576040519150601f19603f3d011682016040523d82523d6000602084013e610e19565b606091505b5091509150610e29868383610e33565b9695505050505050565b606082610e4857610e4382610ec2565b610d69565b8151158015610e6c575073ffffffffffffffffffffffffffffffffffffffff84163b155b15610ebb576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85166004820152602401610c7c565b5080610d69565b805115610ed25780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060208284031215610f1657600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610d6957600080fd5b803573ffffffffffffffffffffffffffffffffffffffff81168114610f6a57600080fd5b919050565b600080600080600060808688031215610f8757600080fd5b610f9086610f46565b9450610f9e60208701610f46565b935060408601359250606086013567ffffffffffffffff811115610fc157600080fd5b8601601f81018813610fd257600080fd5b803567ffffffffffffffff811115610fe957600080fd5b886020828401011115610ffb57600080fd5b959894975092955050506020019190565b60006020828403121561101e57600080fd5b5035919050565b6000806040838503121561103857600080fd5b8235915061104860208401610f46565b90509250929050565b60008060006060848603121561106657600080fd5b61106f84610f46565b925061107d60208501610f46565b929592945050506040919091013590565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff8616815273ffffffffffffffffffffffffffffffffffffffff8516602082015283604082015260806060820152600061112960808301848661108e565b979650505050505050565b83815260406020820152600061114e60408301848661108e565b95945050505050565b60006020828403121561116957600080fd5b81518015158114610d6957600080fd5b6000825160005b8181101561119a5760208186018101518583015201611180565b50600092019182525091905056fea264697066735822122069d5c5c3cb2752c876b6a2138d8d9b66bac6bd1b48a1fe98417eea81faf02a3e64736f6c634300081a0033", } // ERC20CustodyABI is the input ABI used to generate the binding from. diff --git a/v2/pkg/erc20custody.t.sol/erc20custodytest.go b/v2/pkg/erc20custody.t.sol/erc20custodytest.go new file mode 100644 index 00000000..38266018 --- /dev/null +++ b/v2/pkg/erc20custody.t.sol/erc20custodytest.go @@ -0,0 +1,6092 @@ +// Code generated - DO NOT EDIT. +// This file is a generated binding and any manual changes will be lost. + +package erc20custody + +import ( + "errors" + "math/big" + "strings" + + ethereum "github.com/ethereum/go-ethereum" + "github.com/ethereum/go-ethereum/accounts/abi" + "github.com/ethereum/go-ethereum/accounts/abi/bind" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/core/types" + "github.com/ethereum/go-ethereum/event" +) + +// Reference imports to suppress errors if they are not otherwise used. +var ( + _ = errors.New + _ = big.NewInt + _ = strings.NewReader + _ = ethereum.NotFound + _ = bind.Bind + _ = common.Big1 + _ = types.BloomLookup + _ = event.NewSubscription + _ = abi.ConvertType +) + +// StdInvariantFuzzArtifactSelector is an auto generated low-level Go binding around an user-defined struct. +type StdInvariantFuzzArtifactSelector struct { + Artifact string + Selectors [][4]byte +} + +// StdInvariantFuzzInterface is an auto generated low-level Go binding around an user-defined struct. +type StdInvariantFuzzInterface struct { + Addr common.Address + Artifacts []string +} + +// StdInvariantFuzzSelector is an auto generated low-level Go binding around an user-defined struct. +type StdInvariantFuzzSelector struct { + Addr common.Address + Selectors [][4]byte +} + +// ERC20CustodyTestMetaData contains all meta data concerning the ERC20CustodyTest contract. +var ERC20CustodyTestMetaData = &bind.MetaData{ + ABI: "[{\"type\":\"function\",\"name\":\"ASSET_HANDLER_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"IS_TEST\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"PAUSER_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"TSS_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"WITHDRAWER_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeArtifacts\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedArtifacts_\",\"type\":\"string[]\",\"internalType\":\"string[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeContracts\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedContracts_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeSelectors\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedSelectors_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzSelector[]\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"selectors\",\"type\":\"bytes4[]\",\"internalType\":\"bytes4[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeSenders\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedSenders_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"failed\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"setUp\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"targetArtifactSelectors\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedArtifactSelectors_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzArtifactSelector[]\",\"components\":[{\"name\":\"artifact\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"selectors\",\"type\":\"bytes4[]\",\"internalType\":\"bytes4[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetArtifacts\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedArtifacts_\",\"type\":\"string[]\",\"internalType\":\"string[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetContracts\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedContracts_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetInterfaces\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedInterfaces_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzInterface[]\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"artifacts\",\"type\":\"string[]\",\"internalType\":\"string[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetSelectors\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedSelectors_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzSelector[]\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"selectors\",\"type\":\"bytes4[]\",\"internalType\":\"bytes4[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetSenders\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedSenders_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"testForwardCallToReceiveERC20PartialThroughCustody\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testForwardCallToReceiveERC20PartialThroughCustodyFailsIfAmountIs0\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testForwardCallToReceiveERC20PartialThroughCustodyFailsIfSenderIsNotWithdrawer\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testForwardCallToReceiveERC20ThroughCustody\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testForwardCallToReceiveERC20ThroughCustodyFailsIfAmountIs0\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testForwardCallToReceiveERC20ThroughCustodyFailsIfReceiverIsZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testForwardCallToReceiveERC20ThroughCustodyFailsIfSenderIsNotWithdrawer\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testForwardCallToReceiveERC20ThroughCustodyTogglePause\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testForwardCallToReceiveNoParamsThroughCustody\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testNewCustodyFailsIfAddressesAreZero\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawAndRevertThroughCustody\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawAndRevertThroughCustodyFailsIfAmountIs0\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawAndRevertThroughCustodyFailsIfReceiverIsZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawAndRevertThroughCustodyFailsIfSenderIsNotWithdrawer\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawThroughCustody\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawThroughCustodyFailsIfSenderIsNotWithdrawer\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"event\",\"name\":\"Call\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"receiver\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Deposit\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"receiver\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"asset\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Executed\",\"inputs\":[{\"name\":\"destination\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ExecutedWithERC20\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedERC20\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"token\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"destination\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedNoParams\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedNonPayable\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"strs\",\"type\":\"string[]\",\"indexed\":false,\"internalType\":\"string[]\"},{\"name\":\"nums\",\"type\":\"uint256[]\",\"indexed\":false,\"internalType\":\"uint256[]\"},{\"name\":\"flag\",\"type\":\"bool\",\"indexed\":false,\"internalType\":\"bool\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedPayable\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"str\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"num\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"flag\",\"type\":\"bool\",\"indexed\":false,\"internalType\":\"bool\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedRevert\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Reverted\",\"inputs\":[{\"name\":\"destination\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RevertedWithERC20\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Withdraw\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"WithdrawAndCall\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"WithdrawAndRevert\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log\",\"inputs\":[{\"name\":\"\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_address\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_array\",\"inputs\":[{\"name\":\"val\",\"type\":\"uint256[]\",\"indexed\":false,\"internalType\":\"uint256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_array\",\"inputs\":[{\"name\":\"val\",\"type\":\"int256[]\",\"indexed\":false,\"internalType\":\"int256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_array\",\"inputs\":[{\"name\":\"val\",\"type\":\"address[]\",\"indexed\":false,\"internalType\":\"address[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_bytes\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_bytes32\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_int\",\"inputs\":[{\"name\":\"\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_address\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_array\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"uint256[]\",\"indexed\":false,\"internalType\":\"uint256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_array\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"int256[]\",\"indexed\":false,\"internalType\":\"int256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_array\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"address[]\",\"indexed\":false,\"internalType\":\"address[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_bytes\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_bytes32\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_decimal_int\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"},{\"name\":\"decimals\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_decimal_uint\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"decimals\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_int\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_string\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_uint\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_string\",\"inputs\":[{\"name\":\"\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_uint\",\"inputs\":[{\"name\":\"\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"logs\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"AccessControlUnauthorizedAccount\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"neededRole\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"type\":\"error\",\"name\":\"ApprovalFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ConnectorInitialized\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"CustodyInitialized\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"DepositFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"EnforcedPause\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ExecutionFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientERC20Amount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientETHAmount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZeroAddress\",\"inputs\":[]}]", + Bin: "0x6080604052600c8054600160ff199182168117909255601f80549091169091179055348015602c57600080fd5b5061ec308061003c6000396000f3fe608060405234801561001057600080fd5b506004361061020b5760003560e01c806385226c811161012a578063ba414fa6116100bd578063e63ab1e91161008c578063fa7626d411610071578063fa7626d4146103e6578063fb176c12146103f3578063fe8e5f1b146103fb57600080fd5b8063e63ab1e9146103b7578063eb1ce7f9146103de57600080fd5b8063ba414fa614610387578063c713f8271461039f578063cbd57e2f146103a7578063e20c9f71146103af57600080fd5b8063a4943deb116100f9578063a4943deb14610348578063a783c78914610350578063b0464fdc14610377578063b5508aa91461037f57600080fd5b806385226c81146102ef57806385f438c114610304578063916a17c61461032b578063a3f9d0e01461034057600080fd5b80633f7286f4116101a257806366d9a9a01161017157806366d9a9a0146102c25780636a621854146102d757806371149c94146102df5780637e91c50f146102e757600080fd5b80633f7286f4146102755780634b5838d21461027d57806351ecdf3c146102855780635d62c8601461028d57600080fd5b80632ade3880116101de5780632ade3880146102485780633e5e3c231461025d5780633e73ecb4146102655780633ee929231461026d57600080fd5b80630a9254e4146102105780630eee72a91461021a5780631779672f146102225780631ed7831c1461022a575b600080fd5b610218610403565b005b610218610cc8565b610218610f6d565b6102326110d7565b60405161023f9190619207565b60405180910390f35b610250611139565b60405161023f91906192a3565b61023261127b565b6102186112db565b61021861186a565b610232611939565b610218611999565b610218611d07565b6102b47f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b981565b60405190815260200161023f565b6102ca611ef3565b60405161023f9190619409565b610218612075565b610218612141565b610218612997565b6102f7612b3a565b60405161023f91906194a7565b6102b47f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b610333612c0a565b60405161023f919061951e565b610218612d05565b61021861333f565b6102b47f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb81565b610333613564565b6102f761365f565b61038f61372f565b604051901515815260200161023f565b610218613803565b6102186144f1565b6102326145b2565b6102b47f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b610218614612565b601f5461038f9060ff1681565b610218614737565b610218614de7565b602680547fffffffffffffffffffffffff00000000000000000000000000000000000000009081163017909155602780548216611234179055602880549091166156781790556040516104559061911a565b60408082526004908201527f746573740000000000000000000000000000000000000000000000000000000060608201526080602082018190526003908201527f54544b000000000000000000000000000000000000000000000000000000000060a082015260c001604051809103906000f0801580156104da573d6000803e3d6000fd5b50602480547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039290921691909117905560405161051f9061911a565b604080825260049082018190527f7a6574610000000000000000000000000000000000000000000000000000000060608301526080602083018190528201527f5a4554410000000000000000000000000000000000000000000000000000000060a082015260c001604051809103906000f0801580156105a3573d6000803e3d6000fd5b50602580547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03928316908117909155604080518082018252600e81527f4761746577617945564d2e736f6c000000000000000000000000000000000000602082015260285460265492519085166024820152604481019390935292166064820152610692919060840160408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fc0c53b8b00000000000000000000000000000000000000000000000000000000179052615009565b601f80547fffffffffffffffffffffff0000000000000000000000000000000000000000ff166101006001600160a01b0393841681029190911791829055602080549190920483167fffffffffffffffffffffffff0000000000000000000000000000000000000000909116811790915560285460265460405192939182169291169061071e90619127565b6001600160a01b03938416815291831660208301529091166040820152606001604051809103906000f08015801561075a573d6000803e3d6000fd5b50602280547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392831617905560205460255460285460265460405193851694928316939183169216906107b590619134565b6001600160a01b039485168152928416602084015290831660408301529091166060820152608001604051809103906000f0801580156107f9573d6000803e3d6000fd5b50602380547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039290921691909117905560405161083e90619141565b604051809103906000f08015801561085a573d6000803e3d6000fd5b50602180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039283161790556028546040517fc88a5e6d00000000000000000000000000000000000000000000000000000000815291166004820152670de0b6b3a76400006024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c88a5e6d90604401600060405180830381600087803b15801561090657600080fd5b505af115801561091a573d6000803e3d6000fd5b50506026546040517f06447d560000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506306447d569150602401600060405180830381600087803b15801561099057600080fd5b505af11580156109a4573d6000803e3d6000fd5b50506020546022546040517fae7a3a6f0000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201529116925063ae7a3a6f9150602401600060405180830381600087803b158015610a0a57600080fd5b505af1158015610a1e573d6000803e3d6000fd5b50506020546023546040517f10188aef0000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152911692506310188aef9150602401600060405180830381600087803b158015610a8457600080fd5b505af1158015610a98573d6000803e3d6000fd5b505050507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b03166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610afa57600080fd5b505af1158015610b0e573d6000803e3d6000fd5b5050602480546026546040517f40c10f190000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620f4240938101939093521692506340c10f199150604401600060405180830381600087803b158015610b7f57600080fd5b505af1158015610b93573d6000803e3d6000fd5b5050602480546022546040517fa9059cbb0000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201526207a1209381019390935216925063a9059cbb91506044016020604051808303816000875af1158015610c09573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c2d91906195b5565b506028546040517fc88a5e6d0000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152670de0b6b3a76400006024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c88a5e6d90604401600060405180830381600087803b158015610cae57600080fd5b505af1158015610cc2573d6000803e3d6000fd5b50505050565b60248054602754604051620186a09381018490526001600160a01b0392831660448201529116606482015260009060840160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fc513169100000000000000000000000000000000000000000000000000000000179052602654905163ca669fa760e01b81526001600160a01b039091166004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa7906024015b600060405180830381600087803b158015610dad57600080fd5b505af1158015610dc1573d6000803e3d6000fd5b5050602654604080516001600160a01b0390921660248301527f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e460448084019190915281518084039091018152606490920181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb39250610eac91906004016195d7565b600060405180830381600087803b158015610ec657600080fd5b505af1158015610eda573d6000803e3d6000fd5b50506022546024546021546040517f21fc65f20000000000000000000000000000000000000000000000000000000081526001600160a01b0393841695506321fc65f29450610f37939283169290911690879087906004016195ea565b600060405180830381600087803b158015610f5157600080fd5b505af1158015610f65573d6000803e3d6000fd5b505050505050565b6024805460275460405160009381018490526001600160a01b03928316604482015291166064820152819060840160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f357fc5a200000000000000000000000000000000000000000000000000000000179052602854905163ca669fa760e01b81526001600160a01b039091166004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa7906024015b600060405180830381600087803b15801561104f57600080fd5b505af1158015611063573d6000803e3d6000fd5b50506040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527f951e19ed000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401610eac565b6060601680548060200260200160405190810160405280929190818152602001828054801561112f57602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311611111575b5050505050905090565b6060601e805480602002602001604051908101604052809291908181526020016000905b8282101561127257600084815260208082206040805180820182526002870290920180546001600160a01b03168352600181018054835181870281018701909452808452939591948681019491929084015b8282101561125b5783829060005260206000200180546111ce90619621565b80601f01602080910402602001604051908101604052809291908181526020018280546111fa90619621565b80156112475780601f1061121c57610100808354040283529160200191611247565b820191906000526020600020905b81548152906001019060200180831161122a57829003601f168201915b5050505050815260200190600101906111af565b50505050815250508152602001906001019061115d565b50505050905090565b6060601880548060200260200160405190810160405280929190818152602001828054801561112f576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311611111575050505050905090565b602480546027546040516370a0823160e01b81526001600160a01b039182166004820152620186a09360009392909216916370a082319101602060405180830381865afa158015611330573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611354919061966e565b9050611361816000615028565b602480546022546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa1580156113b1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113d5919061966e565b6027546040516001600160a01b0390911660248201526044810185905290915060009060640160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb0000000000000000000000000000000000000000000000000000000017905260245490517ff30c7ba3000000000000000000000000000000000000000000000000000000008152919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f30c7ba3916114b8916001600160a01b0391909116906000908690600401619687565b600060405180830381600087803b1580156114d257600080fd5b505af11580156114e6573d6000803e3d6000fd5b50506022546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b15801561157857600080fd5b505af115801561158c573d6000803e3d6000fd5b50506027546024546040518881526001600160a01b039283169450911691507f9b1bfa7fa9ee420a16e124f794c35ac9f90472acc99140eb2f6447c714cad8eb9060200160405180910390a360285460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561163157600080fd5b505af1158015611645573d6000803e3d6000fd5b5050602254602480546027546040517fd9caed120000000000000000000000000000000000000000000000000000000081526001600160a01b0392831660048201529082169281019290925260448201899052909116925063d9caed129150606401600060405180830381600087803b1580156116c157600080fd5b505af11580156116d5573d6000803e3d6000fd5b5050602480546027546040516370a0823160e01b81526001600160a01b03918216600482015260009550911692506370a082319101602060405180830381865afa158015611727573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061174b919061966e565b90506117578186615028565b602480546022546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa1580156117a7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117cb919061966e565b90506117e0816117db88876196de565b615028565b602480546020546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa158015611830573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611854919061966e565b9050611861816000615028565b50505050505050565b60248054602754604051620186a09381018490526001600160a01b0392831660448201529116606482015260009060840160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f357fc5a200000000000000000000000000000000000000000000000000000000179052602654905163ca669fa760e01b81526001600160a01b039091166004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401610d93565b6060601780548060200260200160405190810160405280929190818152602001828054801561112f576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311611111575050505050905090565b6040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b158015611a1e57600080fd5b505af1158015611a32573d6000803e3d6000fd5b5050602854602654604051600094508493506001600160a01b039283169290911690611a5d90619127565b6001600160a01b03938416815291831660208301529091166040820152606001604051809103906000f080158015611a99573d6000803e3d6000fd5b506040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fd92e233d000000000000000000000000000000000000000000000000000000006004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b158015611b2257600080fd5b505af1158015611b36573d6000803e3d6000fd5b50506020546026546040516001600160a01b03928316945060009350911690611b5e90619127565b6001600160a01b03938416815291831660208301529091166040820152606001604051809103906000f080158015611b9a573d6000803e3d6000fd5b506040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fd92e233d000000000000000000000000000000000000000000000000000000006004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b158015611c2357600080fd5b505af1158015611c37573d6000803e3d6000fd5b50506020546028546040516001600160a01b03928316945091169150600090611c5f90619127565b6001600160a01b03938416815291831660208301529091166040820152606001604051809103906000f080158015611c9b573d6000803e3d6000fd5b506020546028546026546040519394506001600160a01b0392831693918316921690611cc690619127565b6001600160a01b03938416815291831660208301529091166040820152606001604051809103906000f080158015611d02573d6000803e3d6000fd5b505050565b6024805460275460405160019381018490526001600160a01b0392831660448201529116606482015260009060840160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f357fc5a200000000000000000000000000000000000000000000000000000000179052602854905163ca669fa760e01b81526001600160a01b039091166004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015611de957600080fd5b505af1158015611dfd573d6000803e3d6000fd5b50506040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b158015611e8657600080fd5b505af1158015611e9a573d6000803e3d6000fd5b50506022546024546040517f21fc65f20000000000000000000000000000000000000000000000000000000081526001600160a01b0392831694506321fc65f29350610f379290911690600090879087906004016195ea565b6060601b805480602002602001604051908101604052809291908181526020016000905b828210156112725783829060005260206000209060020201604051806040016040529081600082018054611f4a90619621565b80601f0160208091040260200160405190810160405280929190818152602001828054611f7690619621565b8015611fc35780601f10611f9857610100808354040283529160200191611fc3565b820191906000526020600020905b815481529060010190602001808311611fa657829003601f168201915b505050505081526020016001820180548060200260200160405190810160405280929190818152602001828054801561205d57602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168152602001906004019060208260030104928301926001038202915080841161200a5790505b50505050508152505081526020019060010190611f17565b6024805460275460405160009381018490526001600160a01b03928316604482015291166064820152819060840160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fc513169100000000000000000000000000000000000000000000000000000000179052602854905163ca669fa760e01b81526001600160a01b039091166004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401611035565b6040517f68656c6c6f0000000000000000000000000000000000000000000000000000006020820152620186a09060009060250160408051808303601f1901815290829052602480546021546370a0823160e01b85526001600160a01b0390811660048601529294506000939216916370a082319101602060405180830381865afa1580156121d4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121f8919061966e565b9050612205816000615028565b602480546022546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa158015612255573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612279919061966e565b6020546040516001600160a01b0390911660248201526044810186905290915060009060640160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb0000000000000000000000000000000000000000000000000000000017905260245490517ff30c7ba3000000000000000000000000000000000000000000000000000000008152919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f30c7ba39161235c916001600160a01b0391909116906000908690600401619687565b600060405180830381600087803b15801561237657600080fd5b505af115801561238a573d6000803e3d6000fd5b50506021546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b15801561241c57600080fd5b505af1158015612430573d6000803e3d6000fd5b50506020546040517f0d3f65f00e631663aa85c96330b5c7a83bb29af3630c0063776f985edc3037aa935061247392506001600160a01b039091169087906196f1565b60405180910390a16020546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b15801561250957600080fd5b505af115801561251d573d6000803e3d6000fd5b50506021546024546040516001600160a01b039283169450911691507f723fc7be2448075379e4fdf1e6bf5fead954d2668d2da05dcb44ccfec4beeda7906125689089908990619713565b60405180910390a36022546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b1580156125fe57600080fd5b505af1158015612612573d6000803e3d6000fd5b50506021546024546040516001600160a01b039283169450911691507fb9d4efa96044e5f5e03e696fa9ae2ff66911cc27e8a637c3627c75bc5b2241c89061265d9089908990619713565b60405180910390a360285460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156126be57600080fd5b505af11580156126d2573d6000803e3d6000fd5b50506022546024546021546040517fc8a023620000000000000000000000000000000000000000000000000000000081526001600160a01b03938416955063c8a02362945061272f9392831692909116908a908a906004016195ea565b600060405180830381600087803b15801561274957600080fd5b505af115801561275d573d6000803e3d6000fd5b5050602480546021546040516370a0823160e01b81526001600160a01b03918216600482015260009550911692506370a0823191015b602060405180830381865afa1580156127b0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127d4919061966e565b90506127e08187615028565b602480546022546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa158015612830573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612854919061966e565b9050612864816117db89876196de565b602480546020546021546040517fdd62ed3e0000000000000000000000000000000000000000000000000000000081526001600160a01b0392831660048201529082169381019390935260009291169063dd62ed3e90604401602060405180830381865afa1580156128da573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128fe919061966e565b905061290b816000615028565b602480546020546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa15801561295b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061297f919061966e565b905061298c816000615028565b505050505050505050565b6040517f68656c6c6f000000000000000000000000000000000000000000000000000000602082015260019060009060250160408051808303601f190181529082905260285463ca669fa760e01b83526001600160a01b031660048301529150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015612a3057600080fd5b505af1158015612a44573d6000803e3d6000fd5b50506040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b158015612acd57600080fd5b505af1158015612ae1573d6000803e3d6000fd5b50506022546024546040517fc8a023620000000000000000000000000000000000000000000000000000000081526001600160a01b03928316945063c8a023629350610f379290911690600090879087906004016195ea565b6060601a805480602002602001604051908101604052809291908181526020016000905b82821015611272578382906000526020600020018054612b7d90619621565b80601f0160208091040260200160405190810160405280929190818152602001828054612ba990619621565b8015612bf65780601f10612bcb57610100808354040283529160200191612bf6565b820191906000526020600020905b815481529060010190602001808311612bd957829003601f168201915b505050505081526020019060010190612b5e565b6060601d805480602002602001604051908101604052809291908181526020016000905b828210156112725760008481526020908190206040805180820182526002860290920180546001600160a01b03168352600181018054835181870281018701909452808452939491938583019392830182828015612ced57602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019060040190602082600301049283019260010382029150808411612c9a5790505b50505050508152505081526020019060010190612c2e565b604080516004808252602480830184526020830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f6ed7016900000000000000000000000000000000000000000000000000000000179052805460275494516370a0823160e01b81526001600160a01b0395861693810193909352620186a0946000939116916370a082319101602060405180830381865afa158015612daf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612dd3919061966e565b9050612de0816000615028565b602480546022546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa158015612e30573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e54919061966e565b6020546040516001600160a01b0390911660248201526044810186905290915060009060640160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb0000000000000000000000000000000000000000000000000000000017905260245490517ff30c7ba3000000000000000000000000000000000000000000000000000000008152919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f30c7ba391612f37916001600160a01b0391909116906000908690600401619687565b600060405180830381600087803b158015612f5157600080fd5b505af1158015612f65573d6000803e3d6000fd5b50506021546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b158015612ff757600080fd5b505af115801561300b573d6000803e3d6000fd5b5050602080546040516001600160a01b0390911681527fbcaadb46b82a48af60b608f58959ae6b8310d1b0a0d094c2e9ec3208ed39f2a0935001905060405180910390a16022546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b1580156130dd57600080fd5b505af11580156130f1573d6000803e3d6000fd5b50506021546024546040516001600160a01b039283169450911691507f85b5be9cf454e05e0bddf49315178102227c312078eefa3c00294fb4d912ae4e9061313c9089908990619713565b60405180910390a360285460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561319d57600080fd5b505af11580156131b1573d6000803e3d6000fd5b50506022546024546021546040517f21fc65f20000000000000000000000000000000000000000000000000000000081526001600160a01b0393841695506321fc65f2945061320e9392831692909116908a908a906004016195ea565b600060405180830381600087803b15801561322857600080fd5b505af115801561323c573d6000803e3d6000fd5b5050602480546027546040516370a0823160e01b81526001600160a01b03918216600482015260009550911692506370a082319101602060405180830381865afa15801561328e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132b2919061966e565b90506132bf816000615028565b602480546022546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa15801561330f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613333919061966e565b90506128648185615028565b6040517f68656c6c6f0000000000000000000000000000000000000000000000000000006020820152620186a09060009060250160408051808303601f190181529082905260265463ca669fa760e01b83526001600160a01b031660048301529150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156133da57600080fd5b505af11580156133ee573d6000803e3d6000fd5b5050602654604080516001600160a01b0390921660248301527f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e460448084019190915281518084039091018152606490920181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb392506134d991906004016195d7565b600060405180830381600087803b1580156134f357600080fd5b505af1158015613507573d6000803e3d6000fd5b50506022546024546021546040517fc8a023620000000000000000000000000000000000000000000000000000000081526001600160a01b03938416955063c8a023629450610f37939283169290911690879087906004016195ea565b6060601c805480602002602001604051908101604052809291908181526020016000905b828210156112725760008481526020908190206040805180820182526002860290920180546001600160a01b0316835260018101805483518187028101870190945280845293949193858301939283018282801561364757602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190600401906020826003010492830192600103820291508084116135f45790505b50505050508152505081526020019060010190613588565b60606019805480602002602001604051908101604052809291908181526020016000905b828210156112725783829060005260206000200180546136a290619621565b80601f01602080910402602001604051908101604052809291908181526020018280546136ce90619621565b801561371b5780601f106136f05761010080835404028352916020019161371b565b820191906000526020600020905b8154815290600101906020018083116136fe57829003601f168201915b505050505081526020019060010190613683565b60085460009060ff1615613747575060085460ff1690565b6040517f667f9d70000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d600482018190527f6661696c65640000000000000000000000000000000000000000000000000000602483015260009163667f9d7090604401602060405180830381865afa1580156137d8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137fc919061966e565b1415905090565b60285460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561385c57600080fd5b505af1158015613870573d6000803e3d6000fd5b5050602854604080516001600160a01b0390921660248301527f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a60448084019190915281518084039091018152606490920181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb3925061395b91906004016195d7565b600060405180830381600087803b15801561397557600080fd5b505af1158015613989573d6000803e3d6000fd5b50505050602260009054906101000a90046001600160a01b03166001600160a01b0316638456cb596040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156139dd57600080fd5b505af11580156139f1573d6000803e3d6000fd5b505060285460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b158015613a4e57600080fd5b505af1158015613a62573d6000803e3d6000fd5b5050602854604080516001600160a01b0390921660248301527f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a60448084019190915281518084039091018152606490920181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb39250613b4d91906004016195d7565b600060405180830381600087803b158015613b6757600080fd5b505af1158015613b7b573d6000803e3d6000fd5b50505050602060009054906101000a90046001600160a01b03166001600160a01b0316633f4ba83a6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015613bcf57600080fd5b505af1158015613be3573d6000803e3d6000fd5b505060265460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b158015613c4057600080fd5b505af1158015613c54573d6000803e3d6000fd5b50505050602260009054906101000a90046001600160a01b03166001600160a01b0316638456cb596040518163ffffffff1660e01b8152600401600060405180830381600087803b158015613ca857600080fd5b505af1158015613cbc573d6000803e3d6000fd5b505060248054602754604051620186a09381018490526001600160a01b039283166044820152911660648201529092506000915060840160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f357fc5a200000000000000000000000000000000000000000000000000000000179052517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fd93c0665000000000000000000000000000000000000000000000000000000006004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b158015613dd157600080fd5b505af1158015613de5573d6000803e3d6000fd5b505060285460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b158015613e4257600080fd5b505af1158015613e56573d6000803e3d6000fd5b50506022546024546021546040517f21fc65f20000000000000000000000000000000000000000000000000000000081526001600160a01b0393841695506321fc65f29450613eb3939283169290911690879087906004016195ea565b600060405180830381600087803b158015613ecd57600080fd5b505af1158015613ee1573d6000803e3d6000fd5b505060265460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b158015613f3e57600080fd5b505af1158015613f52573d6000803e3d6000fd5b50505050602260009054906101000a90046001600160a01b03166001600160a01b0316633f4ba83a6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015613fa657600080fd5b505af1158015613fba573d6000803e3d6000fd5b5050602480546027546040516370a0823160e01b81526001600160a01b03918216600482015260009550911692506370a0823191015b602060405180830381865afa15801561400d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614031919061966e565b905061403e816000615028565b602480546022546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa15801561408e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906140b2919061966e565b6020546040516001600160a01b0390911660248201526044810186905290915060009060640160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb0000000000000000000000000000000000000000000000000000000017905260245490517ff30c7ba3000000000000000000000000000000000000000000000000000000008152919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f30c7ba391614195916001600160a01b0391909116906000908690600401619687565b600060405180830381600087803b1580156141af57600080fd5b505af11580156141c3573d6000803e3d6000fd5b50506021546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b15801561425557600080fd5b505af1158015614269573d6000803e3d6000fd5b505060208054602454602754604080516001600160a01b0394851681529485018c905291831684830152919091166060830152517f2b58128f24a9f59127cc5b5430d70542b22220f2d9adaa86e442b816ab98af609350908190036080019150a16022546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b15801561435857600080fd5b505af115801561436c573d6000803e3d6000fd5b50506021546024546040516001600160a01b039283169450911691507f85b5be9cf454e05e0bddf49315178102227c312078eefa3c00294fb4d912ae4e906143b79089908990619713565b60405180910390a360285460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561441857600080fd5b505af115801561442c573d6000803e3d6000fd5b50506022546024546021546040517f21fc65f20000000000000000000000000000000000000000000000000000000081526001600160a01b0393841695506321fc65f294506144899392831692909116908a908a906004016195ea565b600060405180830381600087803b1580156144a357600080fd5b505af11580156144b7573d6000803e3d6000fd5b5050602480546027546040516370a0823160e01b81526001600160a01b03918216600482015260009550911692506370a082319101612793565b60248054602754604051620186a09381018490526001600160a01b0392831660448201529116606482015260009060840160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f357fc5a2000000000000000000000000000000000000000000000000000000001790526024805460275492516370a0823160e01b81526001600160a01b0393841660048201529394506000939216916370a082319101613ff0565b6060601580548060200260200160405190810160405280929190818152602001828054801561112f576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311611111575050505050905090565b600080604051602001614648907f68656c6c6f000000000000000000000000000000000000000000000000000000815260050190565b60408051808303601f190181529082905260285463ca669fa760e01b83526001600160a01b031660048301529150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156146af57600080fd5b505af11580156146c3573d6000803e3d6000fd5b50506040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527f951e19ed000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e091506024016134d9565b60248054602754604051620186a09381018490526001600160a01b0392831660448201529116606482015260009060840160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fc5131691000000000000000000000000000000000000000000000000000000001790526024805460275492516370a0823160e01b81526001600160a01b0393841660048201529394506000939216916370a082319101602060405180830381865afa158015614810573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614834919061966e565b9050614841816000615028565b602480546022546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa158015614891573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906148b5919061966e565b6020546040516001600160a01b0390911660248201526044810186905290915060009060640160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb0000000000000000000000000000000000000000000000000000000017905260245490517ff30c7ba3000000000000000000000000000000000000000000000000000000008152919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f30c7ba391614998916001600160a01b0391909116906000908690600401619687565b600060405180830381600087803b1580156149b257600080fd5b505af11580156149c6573d6000803e3d6000fd5b50506021546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b158015614a5857600080fd5b505af1158015614a6c573d6000803e3d6000fd5b50506020547f2b58128f24a9f59127cc5b5430d70542b22220f2d9adaa86e442b816ab98af6092506001600160a01b03169050614aaa60028861972c565b602454602754604080516001600160a01b03958616815260208101949094529184168383015292909216606082015290519081900360800190a16022546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b158015614b7257600080fd5b505af1158015614b86573d6000803e3d6000fd5b50506021546024546040516001600160a01b039283169450911691507f85b5be9cf454e05e0bddf49315178102227c312078eefa3c00294fb4d912ae4e90614bd19089908990619713565b60405180910390a360285460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015614c3257600080fd5b505af1158015614c46573d6000803e3d6000fd5b50506022546024546021546040517f21fc65f20000000000000000000000000000000000000000000000000000000081526001600160a01b0393841695506321fc65f29450614ca39392831692909116908a908a906004016195ea565b600060405180830381600087803b158015614cbd57600080fd5b505af1158015614cd1573d6000803e3d6000fd5b5050602480546027546040516370a0823160e01b81526001600160a01b03918216600482015260009550911692506370a082319101602060405180830381865afa158015614d23573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614d47919061966e565b9050614d58816117db60028961972c565b602480546022546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa158015614da8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614dcc919061966e565b905061286481614ddd60028a61972c565b6117db90876196de565b60265460405163ca669fa760e01b81526001600160a01b039091166004820152620186a090737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015614e4557600080fd5b505af1158015614e59573d6000803e3d6000fd5b5050602654604080516001600160a01b0390921660248301527f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e460448084019190915281518084039091018152606490920181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb39250614f4491906004016195d7565b600060405180830381600087803b158015614f5e57600080fd5b505af1158015614f72573d6000803e3d6000fd5b5050602254602480546027546040517fd9caed120000000000000000000000000000000000000000000000000000000081526001600160a01b0392831660048201529082169281019290925260448201869052909116925063d9caed129150606401600060405180830381600087803b158015614fee57600080fd5b505af1158015615002573d6000803e3d6000fd5b5050505050565b600061501361914e565b61501e8484836150a7565b9150505b92915050565b6040517f98296c540000000000000000000000000000000000000000000000000000000081526004810183905260248101829052737109709ecfa91a80626ff3989d68f67f5b1dd12d906398296c549060440160006040518083038186803b15801561509357600080fd5b505afa158015610f65573d6000803e3d6000fd5b6000806150b48584615122565b90506151176040518060400160405280601d81526020017f4552433139363750726f78792e736f6c3a4552433139363750726f787900000081525082866040516020016151029291906196f1565b6040516020818303038152906040528561512e565b9150505b9392505050565b600061511b838361515c565b60c081015151600090156151525761514b84848460c00151615177565b905061511b565b61514b848461531d565b60006151688383615408565b61511b8383602001518461512e565b600080615182615418565b9050600061519086836154eb565b905060006151a78260600151836020015185615991565b905060006151b783838989615ba3565b905060006151c482616a20565b602081015181519192509060030b15615237578982604001516040516020016151ee929190619767565b60408051601f19818403018152908290527f08c379a000000000000000000000000000000000000000000000000000000000825261522e916004016195d7565b60405180910390fd5b600061527a6040518060400160405280601581526020017f4465706c6f79656420746f20616464726573733a200000000000000000000000815250836001616bef565b6040517fc6ce059d000000000000000000000000000000000000000000000000000000008152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c6ce059d906152cd9084906004016195d7565b602060405180830381865afa1580156152ea573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061530e91906197e8565b9b9a5050505050505050505050565b6040517f8d1cc9250000000000000000000000000000000000000000000000000000000081526000908190737109709ecfa91a80626ff3989d68f67f5b1dd12d90638d1cc925906153729087906004016195d7565b600060405180830381865afa15801561538f573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526153b791908101906198f9565b905060006153e582856040516020016153d192919061992e565b604051602081830303815290604052616def565b90506001600160a01b03811661501e5784846040516020016151ee92919061995d565b61541482826000616e02565b5050565b604080518082018252600381527f6f75740000000000000000000000000000000000000000000000000000000000602082015290517fd145736c000000000000000000000000000000000000000000000000000000008152606091737109709ecfa91a80626ff3989d68f67f5b1dd12d91829063d145736c9061549f908490600401619a08565b600060405180830381865afa1580156154bc573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526154e49190810190619a4f565b9250505090565b61551d6040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b6000737109709ecfa91a80626ff3989d68f67f5b1dd12d90506155686040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b61557185616f05565b60208201526000615581866172ea565b90506000836001600160a01b031663d930a0e66040518163ffffffff1660e01b8152600401600060405180830381865afa1580156155c3573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526155eb9190810190619a4f565b868385602001516040516020016156059493929190619a98565b60408051601f19818403018152908290527f60f9bb1100000000000000000000000000000000000000000000000000000000825291506000906001600160a01b038616906360f9bb119061565d9085906004016195d7565b600060405180830381865afa15801561567a573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526156a29190810190619a4f565b6040517fdb4235f60000000000000000000000000000000000000000000000000000000081529091506001600160a01b0386169063db4235f6906156ea908490600401619b9c565b602060405180830381865afa158015615707573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061572b91906195b5565b61574057816040516020016151ee9190619bee565b6040517f49c4fac80000000000000000000000000000000000000000000000000000000081526001600160a01b038616906349c4fac890615785908490600401619c80565b600060405180830381865afa1580156157a2573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526157ca9190810190619a4f565b84526040517fdb4235f60000000000000000000000000000000000000000000000000000000081526001600160a01b0386169063db4235f690615811908490600401619cd2565b602060405180830381865afa15801561582e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061585291906195b5565b156158e7576040517f49c4fac80000000000000000000000000000000000000000000000000000000081526001600160a01b038616906349c4fac89061589c908490600401619cd2565b600060405180830381865afa1580156158b9573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526158e19190810190619a4f565b60408501525b846001600160a01b03166349c4fac882866000015160405160200161590c9190619d24565b6040516020818303038152906040526040518363ffffffff1660e01b8152600401615938929190619d90565b600060405180830381865afa158015615955573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261597d9190810190619a4f565b606085015250608083015250949350505050565b60408051600480825260a0820190925260609160009190816020015b60608152602001906001900390816159ad5790505090506040518060400160405280600481526020017f677265700000000000000000000000000000000000000000000000000000000081525081600081518110615a0d57615a0d619db5565b60200260200101819052506040518060400160405280600381526020017f2d726c000000000000000000000000000000000000000000000000000000000081525081600181518110615a6157615a61619db5565b602002602001018190525084604051602001615a7d9190619de4565b60405160208183030381529060405281600281518110615a9f57615a9f619db5565b602002602001018190525082604051602001615abb9190619e50565b60405160208183030381529060405281600381518110615add57615add619db5565b60200260200101819052506000615af382616a20565b602080820151604080518082018252600581527f2e6a736f6e0000000000000000000000000000000000000000000000000000008185019081528251808401845260008082529086015282518084019093529051825292810192909252919250615b84906040805180820182526000808252602091820152815180830190925284518252808501908201529061756d565b615b9957856040516020016151ee9190619e91565b9695505050505050565b60a0810151604080518082018252600080825260209182015281518083019092528251808352928101910152606090737109709ecfa91a80626ff3989d68f67f5b1dd12d9015615bf3565b511590565b615d6757826020015115615caf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605860248201527f54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f742060448201527f62652075736564207768656e207468652060736b6970566572696679536f757260648201527f6365436f646560206f7074696f6e206973206074727565600000000000000000608482015260a40161522e565b8260c0015115615d67576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605360248201527f54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f742060448201527f62652075736564207768656e207468652060736b69704c6963656e736554797060648201527f6560206f7074696f6e2069732060747275656000000000000000000000000000608482015260a40161522e565b6040805160ff8082526120008201909252600091816020015b6060815260200190600190039081615d8057905050905060006040518060400160405280600381526020017f6e70780000000000000000000000000000000000000000000000000000000000815250828280615ddb90619f22565b935060ff1681518110615df057615df0619db5565b60200260200101819052506040518060400160405280600d81526020017f302e302e312d616c7068612e3700000000000000000000000000000000000000815250604051602001615e419190619f41565b604051602081830303815290604052828280615e5c90619f22565b935060ff1681518110615e7157615e71619db5565b60200260200101819052506040518060400160405280600681526020017f6465706c6f790000000000000000000000000000000000000000000000000000815250828280615ebe90619f22565b935060ff1681518110615ed357615ed3619db5565b60200260200101819052506040518060400160405280600e81526020017f2d2d636f6e74726163744e616d65000000000000000000000000000000000000815250828280615f2090619f22565b935060ff1681518110615f3557615f35619db5565b60200260200101819052508760200151828280615f5190619f22565b935060ff1681518110615f6657615f66619db5565b60200260200101819052506040518060400160405280600e81526020017f2d2d636f6e747261637450617468000000000000000000000000000000000000815250828280615fb390619f22565b935060ff1681518110615fc857615fc8619db5565b602090810291909101015287518282615fe081619f22565b935060ff1681518110615ff557615ff5619db5565b60200260200101819052506040518060400160405280600981526020017f2d2d636861696e4964000000000000000000000000000000000000000000000081525082828061604290619f22565b935060ff168151811061605757616057619db5565b602002602001018190525061606b466175ce565b828261607681619f22565b935060ff168151811061608b5761608b619db5565b60200260200101819052506040518060400160405280600f81526020017f2d2d6275696c64496e666f46696c6500000000000000000000000000000000008152508282806160d890619f22565b935060ff16815181106160ed576160ed619db5565b60200260200101819052508682828061610590619f22565b935060ff168151811061611a5761611a619db5565b60209081029190910101528551156162415760408051808201909152601581527f2d2d636f6e7374727563746f7242797465636f646500000000000000000000006020820152828261616b81619f22565b935060ff168151811061618057616180619db5565b60209081029190910101526040517f71aad10d0000000000000000000000000000000000000000000000000000000081526001600160a01b038416906371aad10d906161d09089906004016195d7565b600060405180830381865afa1580156161ed573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526162159190810190619a4f565b828261622081619f22565b935060ff168151811061623557616235619db5565b60200260200101819052505b8460200151156163115760408051808201909152601281527f2d2d766572696679536f75726365436f646500000000000000000000000000006020820152828261628a81619f22565b935060ff168151811061629f5761629f619db5565b60200260200101819052506040518060400160405280600581526020017f66616c73650000000000000000000000000000000000000000000000000000008152508282806162ec90619f22565b935060ff168151811061630157616301619db5565b60200260200101819052506164d8565b616349615bee8660a0015160408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6163dc5760408051808201909152600d81527f2d2d6c6963656e736554797065000000000000000000000000000000000000006020820152828261638c81619f22565b935060ff16815181106163a1576163a1619db5565b60200260200101819052508460a001516040516020016163c19190619de4565b6040516020818303038152906040528282806162ec90619f22565b8460c0015115801561641f57506040808901518151808301835260008082526020918201528251808401909352815183529081019082015261641d90511590565b155b156164d85760408051808201909152600d81527f2d2d6c6963656e736554797065000000000000000000000000000000000000006020820152828261646381619f22565b935060ff168151811061647857616478619db5565b602002602001018190525061648c8861766e565b60405160200161649c9190619de4565b6040516020818303038152906040528282806164b790619f22565b935060ff16815181106164cc576164cc619db5565b60200260200101819052505b6040808601518151808301835260008082526020918201528251808401909352815183529081019082015261650c90511590565b6165a15760408051808201909152600b81527f2d2d72656c6179657249640000000000000000000000000000000000000000006020820152828261654f81619f22565b935060ff168151811061656457616564619db5565b6020026020010181905250846040015182828061658090619f22565b935060ff168151811061659557616595619db5565b60200260200101819052505b6060850151156166c25760408051808201909152600681527f2d2d73616c740000000000000000000000000000000000000000000000000000602082015282826165ea81619f22565b935060ff16815181106165ff576165ff619db5565b602090810291909101015260608501516040517fb11a19e800000000000000000000000000000000000000000000000000000000815260048101919091526001600160a01b0384169063b11a19e890602401600060405180830381865afa15801561666e573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526166969190810190619a4f565b82826166a181619f22565b935060ff16815181106166b6576166b6619db5565b60200260200101819052505b60e085015151156167695760408051808201909152600a81527f2d2d6761734c696d6974000000000000000000000000000000000000000000006020820152828261670c81619f22565b935060ff168151811061672157616721619db5565b602002602001018190525061673d8560e00151600001516175ce565b828261674881619f22565b935060ff168151811061675d5761675d619db5565b60200260200101819052505b60e085015160200151156168135760408051808201909152600a81527f2d2d676173507269636500000000000000000000000000000000000000000000602082015282826167b681619f22565b935060ff16815181106167cb576167cb619db5565b60200260200101819052506167e78560e00151602001516175ce565b82826167f281619f22565b935060ff168151811061680757616807619db5565b60200260200101819052505b60e085015160400151156168bd5760408051808201909152600e81527f2d2d6d61784665655065724761730000000000000000000000000000000000006020820152828261686081619f22565b935060ff168151811061687557616875619db5565b60200260200101819052506168918560e00151604001516175ce565b828261689c81619f22565b935060ff16815181106168b1576168b1619db5565b60200260200101819052505b60e085015160600151156169675760408051808201909152601681527f2d2d6d61785072696f72697479466565506572476173000000000000000000006020820152828261690a81619f22565b935060ff168151811061691f5761691f619db5565b602002602001018190525061693b8560e00151606001516175ce565b828261694681619f22565b935060ff168151811061695b5761695b619db5565b60200260200101819052505b60008160ff1667ffffffffffffffff81111561698557616985619811565b6040519080825280602002602001820160405280156169b857816020015b60608152602001906001900390816169a35790505b50905060005b8260ff168160ff161015616a1157838160ff16815181106169e1576169e1619db5565b6020026020010151828260ff16815181106169fe576169fe619db5565b60209081029190910101526001016169be565b5093505050505b949350505050565b616a476040518060600160405280600060030b815260200160608152602001606081525090565b60408051808201825260048082527f6261736800000000000000000000000000000000000000000000000000000000602083015291517fd145736c000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d92600091849163d145736c91616acd91869101619fac565b600060405180830381865afa158015616aea573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052616b129190810190619a4f565b90506000616b20868361815d565b90506000846001600160a01b031663f45c1ce7836040518263ffffffff1660e01b8152600401616b5091906194a7565b6000604051808303816000875af1158015616b6f573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052616b979190810190619ff3565b805190915060030b15801590616bb05750602081015151155b8015616bbf5750604081015151155b15615b995781600081518110616bd757616bd7619db5565b60200260200101516040516020016151ee919061a0a9565b60606000616c248560408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600080825260209182015281518083019092528651825280870190820152909150616c5b9082905b906182b2565b15616db8576000616cd882616cd284616ccc616c9e8a60408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6040805180820182526000808252602091820152815180830190925282518252918201519181019190915290565b906182d9565b9061833b565b604080518082018252600181527f0a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152909150616d3c9082906182b2565b15616da657604080518082018252600181527f0a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616da3905b82906183c0565b90505b616daf816183e6565b9250505061511b565b8215616dd15784846040516020016151ee92919061a295565b505060408051602081019091526000815261511b565b509392505050565b6000808251602084016000f09392505050565b8160a0015115616e1157505050565b6000616e1e84848461844f565b90506000616e2b82616a20565b602081015181519192509060030b158015616ec75750604080518082018252600781527f535543434553530000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616ec790604080518082018252600080825260209182015281518083019092528451825280850190820152616c55565b15616ed457505050505050565b60408201515115616ef45781604001516040516020016151ee919061a33c565b806040516020016151ee919061a39a565b60606000616f3a8360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600481527f2e736f6c0000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152909150616f9f905b829061756d565b1561700e57604080518082018252600481527f2e736f6c000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261511b906170099083906189ea565b6183e6565b604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617070905b8290618a74565b60010361713d57604080518082018252600181527f3a00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526170d690616d9c565b50604080518082018252600181527f3a000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261511b90617009905b83906183c0565b604080518082018252600581527f2e6a736f6e0000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261719c90616f98565b156172d357604080518082018252600181527f2f00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820181905284518086019095529251845283015290617204908390618b0e565b90506000816001835161721791906196de565b8151811061722757617227619db5565b602002602001015190506172ca61700961729d6040518060400160405280600581526020017f2e6a736f6e00000000000000000000000000000000000000000000000000000081525060408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600080825260209182015281518083019092528551825280860190820152906189ea565b95945050505050565b826040516020016151ee919061a405565b50919050565b6060600061731f8360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600481527f2e736f6c000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015290915061738190616f98565b1561738f5761511b816183e6565b604080518082018252600181527f3a00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526173ee90617069565b60010361745857604080518082018252600181527f3a000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261511b9061700990617136565b604080518082018252600581527f2e6a736f6e000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526174b790616f98565b156172d357604080518082018252600181527f2f0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082018190528451808601909552925184528301529061751f908390618b0e565b905060018151111561755b57806002825161753a91906196de565b8151811061754a5761754a619db5565b602002602001015192505050919050565b50826040516020016151ee919061a405565b80518251600091111561758257506000615022565b815183516020850151600092916175989161a4e3565b6175a291906196de565b9050826020015181036175b9576001915050615022565b82516020840151819020912014905092915050565b606060006175db83618bb3565b600101905060008167ffffffffffffffff8111156175fb576175fb619811565b6040519080825280601f01601f191660200182016040528015617625576020820181803683370190505b5090508181016020015b600019017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a850494508461762f57509392505050565b604081810151815180830183526000808252602091820181905283518085018552835181529282018383015283518085018552600a81527f554e4c4943454e53454400000000000000000000000000000000000000000000818401908152855180870187528381528401929092528451808601909552518452908301526060916176fa905b8290618c95565b1561773a57505060408051808201909152600481527f4e6f6e65000000000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600981527f556e6c6963656e7365000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617799906176f3565b156177d957505060408051808201909152600981527f556e6c6963656e736500000000000000000000000000000000000000000000006020820152919050565b604080518082018252600381527f4d4954000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617838906176f3565b1561787857505060408051808201909152600381527f4d495400000000000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f47504c2d322e302d6f6e6c790000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526178d7906176f3565b8061793c5750604080518082018252601081527f47504c2d322e302d6f722d6c61746572000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261793c906176f3565b1561797c57505060408051808201909152600981527f474e552047504c763200000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f47504c2d332e302d6f6e6c790000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526179db906176f3565b80617a405750604080518082018252601081527f47504c2d332e302d6f722d6c617465720000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617a40906176f3565b15617a8057505060408051808201909152600981527f474e552047504c763300000000000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4c47504c2d322e312d6f6e6c790000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617adf906176f3565b80617b445750604080518082018252601181527f4c47504c2d322e312d6f722d6c6174657200000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617b44906176f3565b15617b8457505060408051808201909152600c81527f474e55204c47504c76322e3100000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4c47504c2d332e302d6f6e6c790000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617be3906176f3565b80617c485750604080518082018252601181527f4c47504c2d332e302d6f722d6c6174657200000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617c48906176f3565b15617c8857505060408051808201909152600a81527f474e55204c47504c7633000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f4253442d322d436c61757365000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617ce7906176f3565b15617d2757505060408051808201909152600c81527f4253442d322d436c6175736500000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f4253442d332d436c61757365000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617d86906176f3565b15617dc657505060408051808201909152600c81527f4253442d332d436c6175736500000000000000000000000000000000000000006020820152919050565b604080518082018252600781527f4d504c2d322e300000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617e25906176f3565b15617e6557505060408051808201909152600781527f4d504c2d322e30000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600781527f4f534c2d332e300000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617ec4906176f3565b15617f0457505060408051808201909152600781527f4f534c2d332e30000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600a81527f4170616368652d322e300000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617f63906176f3565b15617fa357505060408051808201909152600a81527f4170616368652d322e30000000000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4147504c2d332e302d6f6e6c790000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152618002906176f3565b806180675750604080518082018252601181527f4147504c2d332e302d6f722d6c6174657200000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152618067906176f3565b156180a757505060408051808201909152600a81527f474e55204147504c7633000000000000000000000000000000000000000000006020820152919050565b604080518082018252600881527f4255534c2d312e3100000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152618106906176f3565b1561814657505060408051808201909152600781527f42534c20312e31000000000000000000000000000000000000000000000000006020820152919050565b604080840151845191516151ee929060200161a4f6565b60608060005b84518110156181e8578185828151811061817f5761817f619db5565b602002602001015160405160200161819892919061992e565b6040516020818303038152906040529150600185516181b791906196de565b81146181e057816040516020016181ce919061a65f565b60405160208183030381529060405291505b600101618163565b5060408051600380825260808201909252600091816020015b6060815260200190600190039081618201579050509050838160008151811061822c5761822c619db5565b60200260200101819052506040518060400160405280600281526020017f2d630000000000000000000000000000000000000000000000000000000000008152508160018151811061828057618280619db5565b6020026020010181905250818160028151811061829f5761829f619db5565b6020908102919091010152949350505050565b60208083015183518351928401516000936182d09291849190618ca9565b14159392505050565b6040805180820190915260008082526020820152600061830b8460000151856020015185600001518660200151618dba565b905083602001518161831d91906196de565b8451859061832c9083906196de565b90525060208401525090919050565b6040805180820190915260008082526020820152815183511015618360575081615022565b60208083015190840151600191146183875750815160208481015190840151829020919020145b80156183b85782518451859061839e9083906196de565b90525082516020850180516183b490839061a4e3565b9052505b509192915050565b60408051808201909152600080825260208201526183df838383618eda565b5092915050565b60606000826000015167ffffffffffffffff81111561840757618407619811565b6040519080825280601f01601f191660200182016040528015618431576020820181803683370190505b50905060006020820190506183df8185602001518660000151618f85565b6060600061845b615418565b6040805160ff808252612000820190925291925060009190816020015b606081526020019060019003908161847857905050905060006040518060400160405280600381526020017f6e707800000000000000000000000000000000000000000000000000000000008152508282806184d390619f22565b935060ff16815181106184e8576184e8619db5565b60200260200101819052506040518060400160405280600781526020017f5e312e33322e3300000000000000000000000000000000000000000000000000815250604051602001618539919061a6a0565b60405160208183030381529060405282828061855490619f22565b935060ff168151811061856957618569619db5565b60200260200101819052506040518060400160405280600881526020017f76616c69646174650000000000000000000000000000000000000000000000008152508282806185b690619f22565b935060ff16815181106185cb576185cb619db5565b6020026020010181905250826040516020016185e79190619e50565b60405160208183030381529060405282828061860290619f22565b935060ff168151811061861757618617619db5565b60200260200101819052506040518060400160405280600a81526020017f2d2d636f6e74726163740000000000000000000000000000000000000000000081525082828061866490619f22565b935060ff168151811061867957618679619db5565b602002602001018190525061868e8784618fff565b828261869981619f22565b935060ff16815181106186ae576186ae619db5565b60209081029190910101528551511561875a5760408051808201909152600b81527f2d2d7265666572656e63650000000000000000000000000000000000000000006020820152828261870081619f22565b935060ff168151811061871557618715619db5565b602002602001018190525061872e866000015184618fff565b828261873981619f22565b935060ff168151811061874e5761874e619db5565b60200260200101819052505b8560800151156187c85760408051808201909152601881527f2d2d756e73616665536b697053746f72616765436865636b0000000000000000602082015282826187a381619f22565b935060ff16815181106187b8576187b8619db5565b602002602001018190525061882e565b841561882e5760408051808201909152601281527f2d2d726571756972655265666572656e636500000000000000000000000000006020820152828261880d81619f22565b935060ff168151811061882257618822619db5565b60200260200101819052505b604086015151156188ca5760408051808201909152600d81527f2d2d756e73616665416c6c6f77000000000000000000000000000000000000006020820152828261887881619f22565b935060ff168151811061888d5761888d619db5565b602002602001018190525085604001518282806188a990619f22565b935060ff16815181106188be576188be619db5565b60200260200101819052505b8560600151156189345760408051808201909152601481527f2d2d756e73616665416c6c6f7752656e616d65730000000000000000000000006020820152828261891381619f22565b935060ff168151811061892857618928619db5565b60200260200101819052505b60008160ff1667ffffffffffffffff81111561895257618952619811565b60405190808252806020026020018201604052801561898557816020015b60608152602001906001900390816189705790505b50905060005b8260ff168160ff1610156189de57838160ff16815181106189ae576189ae619db5565b6020026020010151828260ff16815181106189cb576189cb619db5565b602090810291909101015260010161898b565b50979650505050505050565b6040805180820190915260008082526020820152815183511015618a0f575081615022565b81518351602085015160009291618a259161a4e3565b618a2f91906196de565b60208401519091506001908214618a50575082516020840151819020908220145b8015618a6b57835185518690618a679083906196de565b9052505b50929392505050565b6000808260000151618a988560000151866020015186600001518760200151618dba565b618aa2919061a4e3565b90505b83516020850151618ab6919061a4e3565b81116183df5781618ac68161a6e5565b9250508260000151618afd856020015183618ae191906196de565b8651618aed91906196de565b8386600001518760200151618dba565b618b07919061a4e3565b9050618aa5565b60606000618b1c8484618a74565b618b2790600161a4e3565b67ffffffffffffffff811115618b3f57618b3f619811565b604051908082528060200260200182016040528015618b7257816020015b6060815260200190600190039081618b5d5790505b50905060005b8151811015616de757618b8e61700986866183c0565b828281518110618ba057618ba0619db5565b6020908102919091010152600101618b78565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310618bfc577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310618c28576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc100008310618c4657662386f26fc10000830492506010015b6305f5e1008310618c5e576305f5e100830492506008015b6127108310618c7257612710830492506004015b60648310618c84576064830492506002015b600a83106150225760010192915050565b6000618ca1838361903f565b159392505050565b600080858411618db05760208411618d5c5760008415618cf4576001618cd08660206196de565b618cdb90600861a6ff565b618ce690600261a7fd565b618cf091906196de565b1990505b8351811685618d03898961a4e3565b618d0d91906196de565b805190935082165b818114618d4757878411618d2f5787945050505050616a18565b83618d398161a809565b945050828451169050618d15565b618d51878561a4e3565b945050505050616a18565b838320618d6985886196de565b618d73908761a4e3565b91505b858210618dae57848220808203618d9b57618d91868461a4e3565b9350505050616a18565b618da66001846196de565b925050618d76565b505b5092949350505050565b60008381868511618ec55760208511618e745760008515618e06576001618de28760206196de565b618ded90600861a6ff565b618df890600261a7fd565b618e0291906196de565b1990505b84518116600087618e178b8b61a4e3565b618e2191906196de565b855190915083165b828114618e6657818610618e4e57618e418b8b61a4e3565b9650505050505050616a18565b85618e588161a6e5565b965050838651169050618e29565b859650505050505050616a18565b508383206000905b618e8686896196de565b8211618ec357858320808203618ea25783945050505050616a18565b618ead60018561a4e3565b9350508180618ebb9061a6e5565b925050618e7c565b505b618ecf878761a4e3565b979650505050505050565b60408051808201909152600080825260208201526000618f0c8560000151866020015186600001518760200151618dba565b602080870180519186019190915251909150618f2890826196de565b835284516020860151618f3b919061a4e3565b8103618f4a5760008552618f7c565b83518351618f58919061a4e3565b85518690618f679083906196de565b9052508351618f76908261a4e3565b60208601525b50909392505050565b60208110618fbd5781518352618f9c60208461a4e3565b9250618fa960208361a4e3565b9150618fb66020826196de565b9050618f85565b6000198115618fec576001618fd38360206196de565b618fdf9061010061a7fd565b618fe991906196de565b90505b9151835183169219169190911790915250565b6060600061900d84846154eb565b80516020808301516040519394506190279390910161a820565b60405160208183030381529060405291505092915050565b8151815160009190811115619052575081515b6020808501519084015160005b8381101561910b57825182518082146190db5760001960208710156190ba5760018461908c8960206196de565b619096919061a4e3565b6190a190600861a6ff565b6190ac90600261a7fd565b6190b691906196de565b1990505b81811683821681810391146190d85797506150229650505050505050565b50505b6190e660208661a4e3565b94506190f360208561a4e3565b93505050602081619104919061a4e3565b905061905f565b5084518651615b99919061a878565b610c9f8061a89983390190565b61140b8061b53883390190565b61155a8061c94383390190565b610d5e8061de9d83390190565b6040518060e00160405280606081526020016060815260200160608152602001600015158152602001600015158152602001600015158152602001619191619196565b905290565b604051806101000160405280600015158152602001600015158152602001606081526020016000801916815260200160608152602001606081526020016000151581526020016191916040518060800160405280600081526020016000815260200160008152602001600081525090565b602080825282518282018190526000918401906040840190835b818110156192485783516001600160a01b0316835260209384019390920191600101619221565b509095945050505050565b60005b8381101561926e578181015183820152602001619256565b50506000910152565b6000815180845261928f816020860160208601619253565b601f01601f19169290920160200192915050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b8281101561939f577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452815180516001600160a01b03168652602090810151604082880181905281519088018190529101906060600582901b88018101919088019060005b81811015619385577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa08a850301835261936f848651619277565b6020958601959094509290920191600101619335565b5091975050506020948501949290920191506001016192cb565b50929695505050505050565b600081518084526020840193506020830160005b828110156193ff5781517fffffffff00000000000000000000000000000000000000000000000000000000168652602095860195909101906001016193bf565b5093949350505050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b8281101561939f577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc087860301845281518051604087526194756040880182619277565b905060208201519150868103602088015261949081836193ab565b965050506020938401939190910190600101619431565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b8281101561939f577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452619509858351619277565b945060209384019391909101906001016194cf565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b8281101561939f577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc087860301845281516001600160a01b038151168652602081015190506040602087015261959f60408701826193ab565b9550506020938401939190910190600101619546565b6000602082840312156195c757600080fd5b8151801515811461511b57600080fd5b60208152600061511b6020830184619277565b6001600160a01b03851681526001600160a01b0384166020820152826040820152608060608201526000615b996080830184619277565b600181811c9082168061963557607f821691505b6020821081036172e4577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006020828403121561968057600080fd5b5051919050565b6001600160a01b03841681528260208201526060604082015260006172ca6060830184619277565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b81810381811115615022576150226196af565b6001600160a01b0383168152604060208201526000616a186040830184619277565b828152604060208201526000616a186040830184619277565b600082619762577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b7f4661696c656420746f206465706c6f7920636f6e74726163742000000000000081526000835161979f81601a850160208801619253565b7f3a20000000000000000000000000000000000000000000000000000000000000601a9184019182015283516197dc81601c840160208801619253565b01601c01949350505050565b6000602082840312156197fa57600080fd5b81516001600160a01b038116811461511b57600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040516060810167ffffffffffffffff8111828210171561986357619863619811565b60405290565b60008067ffffffffffffffff84111561988457619884619811565b50604051601f19601f85018116603f0116810181811067ffffffffffffffff821117156198b3576198b3619811565b6040528381529050808284018510156198cb57600080fd5b616de7846020830185619253565b600082601f8301126198ea57600080fd5b61511b83835160208501619869565b60006020828403121561990b57600080fd5b815167ffffffffffffffff81111561992257600080fd5b61501e848285016198d9565b60008351619940818460208801619253565b835190830190619954818360208801619253565b01949350505050565b7f4661696c656420746f206465706c6f7920636f6e74726163742000000000000081526000835161999581601a850160208801619253565b7f207573696e6720636f6e7374727563746f722064617461202200000000000000601a9184019182015283516199d2816033840160208801619253565b7f220000000000000000000000000000000000000000000000000000000000000060339290910191820152603401949350505050565b60408152600b60408201527f464f554e4452595f4f5554000000000000000000000000000000000000000000606082015260806020820152600061511b6080830184619277565b600060208284031215619a6157600080fd5b815167ffffffffffffffff811115619a7857600080fd5b8201601f81018413619a8957600080fd5b61501e84825160208401619869565b60008551619aaa818460208a01619253565b7f2f000000000000000000000000000000000000000000000000000000000000009083019081528551619ae4816001840160208a01619253565b7f2f00000000000000000000000000000000000000000000000000000000000000600192909101918201528451619b22816002840160208901619253565b6001818301019150507f2f0000000000000000000000000000000000000000000000000000000000000060018201528351619b64816002840160208801619253565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600292909101918201526007019695505050505050565b604081526000619baf6040830184619277565b8281036020840152600481527f2e6173740000000000000000000000000000000000000000000000000000000060208201526040810191505092915050565b7f436f756c64206e6f742066696e642041535420696e2061727469666163742000815260008251619c2681601f850160208701619253565b7f2e205365742060617374203d20747275656020696e20666f756e6472792e746f601f9390910192830152507f6d6c000000000000000000000000000000000000000000000000000000000000603f820152604101919050565b604081526000619c936040830184619277565b8281036020840152601181527f2e6173742e6162736f6c7574655061746800000000000000000000000000000060208201526040810191505092915050565b604081526000619ce56040830184619277565b8281036020840152600c81527f2e6173742e6c6963656e7365000000000000000000000000000000000000000060208201526040810191505092915050565b7f2e6d657461646174612e736f75726365732e5b27000000000000000000000000815260008251619d5c816014850160208701619253565b7f275d2e6b656363616b32353600000000000000000000000000000000000000006014939091019283015250602001919050565b604081526000619da36040830185619277565b82810360208401526151178185619277565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f2200000000000000000000000000000000000000000000000000000000000000815260008251619e1c816001850160208701619253565b7f22000000000000000000000000000000000000000000000000000000000000006001939091019283015250600201919050565b60008251619e62818460208701619253565b7f2f6275696c642d696e666f000000000000000000000000000000000000000000920191825250600b01919050565b7f436f756c64206e6f742066696e64206275696c642d696e666f2066696c65207781527f697468206d61746368696e6720736f7572636520636f6465206861736820666f60208201527f7220636f6e747261637420000000000000000000000000000000000000000000604082015260008251619f1581604b850160208701619253565b91909101604b0192915050565b600060ff821660ff8103619f3857619f386196af565b60010192915050565b7f406f70656e7a657070656c696e2f646566656e6465722d6465706c6f792d636c81527f69656e742d636c69400000000000000000000000000000000000000000000000602082015260008251619f9f816029850160208701619253565b9190910160290192915050565b60408152601660408201527f4f50454e5a455050454c494e5f424153485f5041544800000000000000000000606082015260806020820152600061511b6080830184619277565b60006020828403121561a00557600080fd5b815167ffffffffffffffff81111561a01c57600080fd5b82016060818503121561a02e57600080fd5b61a036619840565b81518060030b811461a04757600080fd5b8152602082015167ffffffffffffffff81111561a06357600080fd5b61a06f868285016198d9565b602083015250604082015167ffffffffffffffff81111561a08f57600080fd5b61a09b868285016198d9565b604083015250949350505050565b7f4661696c656420746f2072756e206261736820636f6d6d616e6420776974682081527f220000000000000000000000000000000000000000000000000000000000000060208201526000825161a107816021850160208701619253565b7f222e20496620796f7520617265207573696e672057696e646f77732c2073657460219390910192830152507f20746865204f50454e5a455050454c494e5f424153485f5041544820656e766960418201527f726f6e6d656e74207661726961626c6520746f207468652066756c6c7920717560618201527f616c69666965642070617468206f66207468652062617368206578656375746160818201527f626c652e20466f72206578616d706c652c20696620796f75206172652075736960a18201527f6e672047697420666f722057696e646f77732c206164642074686520666f6c6c60c18201527f6f77696e67206c696e6520696e20746865202e656e762066696c65206f66207960e18201527f6f75722070726f6a65637420287573696e6720666f727761726420736c6173686101018201527f6573293a0a4f50454e5a455050454c494e5f424153485f504154483d22433a2f6101218201527f50726f6772616d2046696c65732f4769742f62696e2f6261736822000000000061014182015261015c01919050565b7f4661696c656420746f2066696e64206c696e652077697468207072656669782081527f270000000000000000000000000000000000000000000000000000000000000060208201526000835161a2f3816021850160208801619253565b7f2720696e206f75747075743a2000000000000000000000000000000000000000602191840191820152835161a33081602e840160208801619253565b01602e01949350505050565b7f4661696c656420746f2072756e2075706772616465207361666574792076616c81527f69646174696f6e3a200000000000000000000000000000000000000000000000602082015260008251619f9f816029850160208701619253565b7f55706772616465207361666574792076616c69646174696f6e206661696c656481527f3a0a00000000000000000000000000000000000000000000000000000000000060208201526000825161a3f8816022850160208701619253565b9190910160220192915050565b7f436f6e7472616374206e616d652000000000000000000000000000000000000081526000825161a43d81600e850160208701619253565b7f206d75737420626520696e2074686520666f726d6174204d79436f6e74726163600e9390910192830152507f742e736f6c3a4d79436f6e7472616374206f72204d79436f6e74726163742e73602e8201527f6f6c206f72206f75742f4d79436f6e74726163742e736f6c2f4d79436f6e7472604e8201527f6163742e6a736f6e000000000000000000000000000000000000000000000000606e820152607601919050565b80820180821115615022576150226196af565b7f53504458206c6963656e7365206964656e74696669657220000000000000000081526000835161a52e816018850160208801619253565b7f20696e2000000000000000000000000000000000000000000000000000000000601891840191820152835161a56b81601c840160208801619253565b7f20646f6573206e6f74206c6f6f6b206c696b65206120737570706f7274656420601c92909101918201527f6c6963656e736520666f7220626c6f636b206578706c6f726572207665726966603c8201527f69636174696f6e2e205573652074686520606c6963656e73655479706560206f605c8201527f7074696f6e20746f20737065636966792061206c6963656e736520747970652c607c8201527f206f7220736574207468652060736b69704c6963656e73655479706560206f70609c8201527f74696f6e20746f2060747275656020746f20736b69702e00000000000000000060bc82015260d301949350505050565b6000825161a671818460208701619253565b7f2000000000000000000000000000000000000000000000000000000000000000920191825250600101919050565b7f406f70656e7a657070656c696e2f75706772616465732d636f7265400000000081526000825161a6d881601c850160208701619253565b91909101601c0192915050565b6000600019820361a6f85761a6f86196af565b5060010190565b8082028115828204841417615022576150226196af565b6001815b600184111561a7515780850481111561a7355761a7356196af565b600184161561a74357908102905b60019390931c92800261a71a565b935093915050565b60008261a76857506001615022565b8161a77557506000615022565b816001811461a78b576002811461a7955761a7b1565b6001915050615022565b60ff84111561a7a65761a7a66196af565b50506001821b615022565b5060208310610133831016604e8410600b841016171561a7d4575081810a615022565b61a7e1600019848461a716565b806000190482111561a7f55761a7f56196af565b029392505050565b600061511b838361a759565b60008161a8185761a8186196af565b506000190190565b6000835161a832818460208801619253565b7f3a00000000000000000000000000000000000000000000000000000000000000908301908152835161a86c816001840160208801619253565b01600101949350505050565b81810360008312801583831316838312821617156183df576183df6196af56fe608060405234801561001057600080fd5b50604051610c9f380380610c9f83398101604081905261002f9161010d565b8181600361003d83826101ff565b50600461004a82826101ff565b50505050506102bd565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261007b57600080fd5b81516001600160401b0381111561009457610094610054565b604051601f8201601f19908116603f011681016001600160401b03811182821017156100c2576100c2610054565b6040528181528382016020018510156100da57600080fd5b60005b828110156100f9576020818601810151838301820152016100dd565b506000918101602001919091529392505050565b6000806040838503121561012057600080fd5b82516001600160401b0381111561013657600080fd5b6101428582860161006a565b602085015190935090506001600160401b0381111561016057600080fd5b61016c8582860161006a565b9150509250929050565b600181811c9082168061018a57607f821691505b6020821081036101aa57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156101fa57806000526020600020601f840160051c810160208510156101d75750805b601f840160051c820191505b818110156101f757600081556001016101e3565b50505b505050565b81516001600160401b0381111561021857610218610054565b61022c816102268454610176565b846101b0565b6020601f82116001811461026057600083156102485750848201515b600019600385901b1c1916600184901b1784556101f7565b600084815260208120601f198516915b828110156102905787850151825560209485019460019092019101610270565b50848210156102ae5786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b6109d3806102cc6000396000f3fe608060405234801561001057600080fd5b50600436106100be5760003560e01c806340c10f191161007657806395d89b411161005b57806395d89b4114610183578063a9059cbb1461018b578063dd62ed3e1461019e57600080fd5b806340c10f191461013857806370a082311461014d57600080fd5b806318160ddd116100a757806318160ddd1461010457806323b872dd14610116578063313ce5671461012957600080fd5b806306fdde03146100c3578063095ea7b3146100e1575b600080fd5b6100cb6101e4565b6040516100d891906107bf565b60405180910390f35b6100f46100ef366004610854565b610276565b60405190151581526020016100d8565b6002545b6040519081526020016100d8565b6100f461012436600461087e565b610290565b604051601281526020016100d8565b61014b610146366004610854565b6102b4565b005b61010861015b3660046108bb565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6100cb6102c2565b6100f4610199366004610854565b6102d1565b6101086101ac3660046108dd565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6060600380546101f390610910565b80601f016020809104026020016040519081016040528092919081815260200182805461021f90610910565b801561026c5780601f106102415761010080835404028352916020019161026c565b820191906000526020600020905b81548152906001019060200180831161024f57829003601f168201915b5050505050905090565b6000336102848185856102df565b60019150505b92915050565b60003361029e8582856102f1565b6102a98585856103c5565b506001949350505050565b6102be8282610470565b5050565b6060600480546101f390610910565b6000336102848185856103c5565b6102ec83838360016104cc565b505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146103bf57818110156103b0576040517ffb8f41b200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416600482015260248101829052604481018390526064015b60405180910390fd5b6103bf848484840360006104cc565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8316610415576040517f96c6fd1e000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff8216610465576040517fec442f05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b6102ec838383610614565b73ffffffffffffffffffffffffffffffffffffffff82166104c0576040517fec442f05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b6102be60008383610614565b73ffffffffffffffffffffffffffffffffffffffff841661051c576040517fe602df05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff831661056c576040517f94280d62000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260016020908152604080832093871683529290522082905580156103bf578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161060691815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff831661064c5780600260008282546106419190610963565b909155506106fe9050565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260208190526040902054818110156106d2576040517fe450d38c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8516600482015260248101829052604481018390526064016103a7565b73ffffffffffffffffffffffffffffffffffffffff841660009081526020819052604090209082900390555b73ffffffffffffffffffffffffffffffffffffffff821661072757600280548290039055610753565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090208054820190555b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516107b291815260200190565b60405180910390a3505050565b602081526000825180602084015260005b818110156107ed57602081860181015160408684010152016107d0565b5060006040828501015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011684010191505092915050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461084f57600080fd5b919050565b6000806040838503121561086757600080fd5b6108708361082b565b946020939093013593505050565b60008060006060848603121561089357600080fd5b61089c8461082b565b92506108aa6020850161082b565b929592945050506040919091013590565b6000602082840312156108cd57600080fd5b6108d68261082b565b9392505050565b600080604083850312156108f057600080fd5b6108f98361082b565b91506109076020840161082b565b90509250929050565b600181811c9082168061092457607f821691505b60208210810361095d577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b8082018082111561028a577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea26469706673582212207e804ca539d49155d2b6bc19268ce22f9f857027c75247d69fb0d56a089c93d464736f6c634300081a003360a060405234801561001057600080fd5b5060405161140b38038061140b83398101604081905261002f916101b3565b60016000556002805460ff191690556001600160a01b038316158061005b57506001600160a01b038216155b8061006d57506001600160a01b038116155b1561008b5760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b0383166080526100a3600082610102565b506100ce7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a82610102565b506100f97f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e483610102565b505050506101f6565b60008281526001602090815260408083206001600160a01b038516845290915281205460ff1661018d5760008381526001602081815260408084206001600160a01b0387168086529252808420805460ff19169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a4506001610191565b5060005b92915050565b80516001600160a01b03811681146101ae57600080fd5b919050565b6000806000606084860312156101c857600080fd5b6101d184610197565b92506101df60208501610197565b91506101ed60408501610197565b90509250925092565b6080516111de61022d60003960008181610132015281816103c5015281816104270152818161065801526106ba01526111de6000f3fe608060405234801561001057600080fd5b50600436106101005760003560e01c80638456cb5911610097578063c8a0236211610066578063c8a0236214610276578063d547741f14610289578063d9caed121461029c578063e63ab1e9146102af57600080fd5b80638456cb59146101f957806385f438c11461020157806391d1485414610228578063a217fddf1461026e57600080fd5b80632f2ff15d116100d35780632f2ff15d146101c057806336568abe146101d35780633f4ba83a146101e65780635c975abb146101ee57600080fd5b806301ffc9a714610105578063116191b61461012d57806321fc65f214610179578063248a9ca31461018e575b600080fd5b610118610113366004610f04565b6102d6565b60405190151581526020015b60405180910390f35b6101547f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610124565b61018c610187366004610f6f565b61036f565b005b6101b261019c36600461100c565b6000908152600160208190526040909120015490565b604051908152602001610124565b61018c6101ce366004611025565b610511565b61018c6101e1366004611025565b61053d565b61018c61059b565b60025460ff16610118565b61018c6105d0565b6101b27f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b610118610236366004611025565b600091825260016020908152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b6101b2600081565b61018c610284366004610f6f565b610602565b61018c610297366004611025565b61078a565b61018c6102aa366004611051565b6107b0565b6101b27f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061036957507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b61037761087d565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e46103a1816108c0565b6103a96108ca565b6103ea73ffffffffffffffffffffffffffffffffffffffff87167f000000000000000000000000000000000000000000000000000000000000000086610909565b6040517f5131ab5900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690635131ab599061046490899089908990899089906004016110d7565b600060405180830381600087803b15801561047e57600080fd5b505af1158015610492573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167f85b5be9cf454e05e0bddf49315178102227c312078eefa3c00294fb4d912ae4e8686866040516104f793929190611134565b60405180910390a35061050a6001600055565b5050505050565b6000828152600160208190526040909120015461052d816108c0565b6105378383610996565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8116331461058c576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6105968282610a61565b505050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a6105c5816108c0565b6105cd610b20565b50565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a6105fa816108c0565b6105cd610b9d565b61060a61087d565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e4610634816108c0565b61063c6108ca565b61067d73ffffffffffffffffffffffffffffffffffffffff87167f000000000000000000000000000000000000000000000000000000000000000086610909565b6040517fb8969bd400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063b8969bd4906106f790899089908990899089906004016110d7565b600060405180830381600087803b15801561071157600080fd5b505af1158015610725573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fb9d4efa96044e5f5e03e696fa9ae2ff66911cc27e8a637c3627c75bc5b2241c88686866040516104f793929190611134565b600082815260016020819052604090912001546107a6816108c0565b6105378383610a61565b6107b861087d565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e46107e2816108c0565b6107ea6108ca565b61080b73ffffffffffffffffffffffffffffffffffffffff85168484610909565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f9b1bfa7fa9ee420a16e124f794c35ac9f90472acc99140eb2f6447c714cad8eb8460405161086a91815260200190565b60405180910390a3506105966001600055565b6002600054036108b9576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b6105cd8133610bf8565b60025460ff1615610907576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6040805173ffffffffffffffffffffffffffffffffffffffff8416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb00000000000000000000000000000000000000000000000000000000179052610596908490610c89565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff16610a5957600083815260016020818152604080842073ffffffffffffffffffffffffffffffffffffffff8716808652925280842080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a4506001610369565b506000610369565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff1615610a5957600083815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8616808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a4506001610369565b610b28610d1f565b600280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b610ba56108ca565b600280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258610b733390565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16610c85576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82166004820152602481018390526044015b60405180910390fd5b5050565b6000610cab73ffffffffffffffffffffffffffffffffffffffff841683610d5b565b90508051600014158015610cd0575080806020019051810190610cce9190611157565b155b15610596576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84166004820152602401610c7c565b60025460ff16610907576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6060610d6983836000610d70565b9392505050565b606081471015610dae576040517fcd786059000000000000000000000000000000000000000000000000000000008152306004820152602401610c7c565b6000808573ffffffffffffffffffffffffffffffffffffffff168486604051610dd79190611179565b60006040518083038185875af1925050503d8060008114610e14576040519150601f19603f3d011682016040523d82523d6000602084013e610e19565b606091505b5091509150610e29868383610e33565b9695505050505050565b606082610e4857610e4382610ec2565b610d69565b8151158015610e6c575073ffffffffffffffffffffffffffffffffffffffff84163b155b15610ebb576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85166004820152602401610c7c565b5080610d69565b805115610ed25780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060208284031215610f1657600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610d6957600080fd5b803573ffffffffffffffffffffffffffffffffffffffff81168114610f6a57600080fd5b919050565b600080600080600060808688031215610f8757600080fd5b610f9086610f46565b9450610f9e60208701610f46565b935060408601359250606086013567ffffffffffffffff811115610fc157600080fd5b8601601f81018813610fd257600080fd5b803567ffffffffffffffff811115610fe957600080fd5b886020828401011115610ffb57600080fd5b959894975092955050506020019190565b60006020828403121561101e57600080fd5b5035919050565b6000806040838503121561103857600080fd5b8235915061104860208401610f46565b90509250929050565b60008060006060848603121561106657600080fd5b61106f84610f46565b925061107d60208501610f46565b929592945050506040919091013590565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff8616815273ffffffffffffffffffffffffffffffffffffffff8516602082015283604082015260806060820152600061112960808301848661108e565b979650505050505050565b83815260406020820152600061114e60408301848661108e565b95945050505050565b60006020828403121561116957600080fd5b81518015158114610d6957600080fd5b6000825160005b8181101561119a5760208186018101518583015201611180565b50600092019182525091905056fea264697066735822122069d5c5c3cb2752c876b6a2138d8d9b66bac6bd1b48a1fe98417eea81faf02a3e64736f6c634300081a003360c060405260001960035534801561001657600080fd5b5060405161155a38038061155a83398101604081905261003591610220565b60016000819055805460ff19169055838383836001600160a01b038416158061006557506001600160a01b038316155b8061007757506001600160a01b038216155b8061008957506001600160a01b038116155b156100a75760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b03808516608052831660a0526100c5600082610154565b506100f07f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e483610154565b5061011b7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb83610154565b506101467f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a82610154565b505050505050505050610274565b60008281526002602090815260408083206001600160a01b038516845290915281205460ff166101fa5760008381526002602090815260408083206001600160a01b03861684529091529020805460ff191660011790556101b23390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45060016101fe565b5060005b92915050565b80516001600160a01b038116811461021b57600080fd5b919050565b6000806000806080858703121561023657600080fd5b61023f85610204565b935061024d60208601610204565b925061025b60408601610204565b915061026960608601610204565b905092959194509250565b60805160a0516112826102d86000396000818161021d01528181610531015281816108240152818161097b01528181610ad00152610bf20152600081816101d1015281816104a1015281816105040152818161079401526107f701526112826000f3fe608060405234801561001057600080fd5b50600436106101775760003560e01c80635e3e9fef116100d857806391d148541161008c578063d547741f11610066578063d547741f14610386578063d5abeb0114610399578063e63ab1e9146103a257600080fd5b806391d1485414610311578063a217fddf14610357578063a783c7891461035f57600080fd5b8063743e0c9b116100bd578063743e0c9b146102cf5780638456cb59146102e257806385f438c1146102ea57600080fd5b80635e3e9fef146102a95780636f8b44b0146102bc57600080fd5b8063248a9ca31161012f57806336568abe1161011457806336568abe146102835780633f4ba83a146102965780635c975abb1461029e57600080fd5b8063248a9ca31461023f5780632f2ff15d1461027057600080fd5b8063106e629011610160578063106e6290146101b9578063116191b6146101cc57806321e093b11461021857600080fd5b806301ffc9a71461017c57806302d5c899146101a4575b600080fd5b61018f61018a366004610fb4565b6103c9565b60405190151581526020015b60405180910390f35b6101b76101b2366004611026565b610462565b005b6101b76101c73660046110b8565b6105f7565b6101f37f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161019b565b6101f37f000000000000000000000000000000000000000000000000000000000000000081565b61026261024d3660046110eb565b60009081526002602052604090206001015490565b60405190815260200161019b565b6101b761027e366004611104565b61069c565b6101b7610291366004611104565b6106c7565b6101b7610720565b60015460ff1661018f565b6101b76102b7366004611026565b610755565b6101b76102ca3660046110eb565b6108d0565b6101b76102dd3660046110eb565b61093e565b6101b76109e8565b6102627f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b61018f61031f366004611104565b600091825260026020908152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b610262600081565b6102627f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb81565b6101b7610394366004611104565b610a1a565b61026260035481565b6102627f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061045c57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b61046a610a3f565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461049481610a82565b61049c610a8c565b6104c77f00000000000000000000000000000000000000000000000000000000000000008684610acb565b6040517fb8969bd400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063b8969bd490610561907f0000000000000000000000000000000000000000000000000000000000000000908a908a908a908a90600401611179565b600060405180830381600087803b15801561057b57600080fd5b505af115801561058f573d6000803e3d6000fd5b505050508573ffffffffffffffffffffffffffffffffffffffff167fba96f26bdda53eb8c8ba39045dfb4ff39753fbc7a6edcf250a88e75e78d102fe8686866040516105dd939291906111d6565b60405180910390a2506105f06001600055565b5050505050565b6105ff610a3f565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461062981610a82565b610631610a8c565b61063c848484610acb565b8373ffffffffffffffffffffffffffffffffffffffff167f884edad9ce6fa2440d8a54cc123490eb96d2768479d49ff9c7366125a94243648460405161068491815260200190565b60405180910390a2506106976001600055565b505050565b6000828152600260205260409020600101546106b781610a82565b6106c18383610c53565b50505050565b73ffffffffffffffffffffffffffffffffffffffff81163314610716576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6106978282610d53565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61074a81610a82565b610752610e12565b50565b61075d610a3f565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461078781610a82565b61078f610a8c565b6107ba7f00000000000000000000000000000000000000000000000000000000000000008684610acb565b6040517f5131ab5900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690635131ab5990610854907f0000000000000000000000000000000000000000000000000000000000000000908a908a908a908a90600401611179565b600060405180830381600087803b15801561086e57600080fd5b505af1158015610882573d6000803e3d6000fd5b505050508573ffffffffffffffffffffffffffffffffffffffff167f7772f56296d3a5202974a45c61c9188d844ab4d6eeb18c851e4b8d5384ca6ced8686866040516105dd939291906111d6565b7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb6108fa81610a82565b610902610a8c565b60038290556040518281527f7810bd47de260c3e9ee10061cf438099dd12256c79485f12f94dbccc981e806c9060200160405180910390a15050565b610946610a8c565b6040517f79cc6790000000000000000000000000000000000000000000000000000000008152336004820152602481018290527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16906379cc679090604401600060405180830381600087803b1580156109d457600080fd5b505af11580156105f0573d6000803e3d6000fd5b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610a1281610a82565b610752610e8f565b600082815260026020526040902060010154610a3581610a82565b6106c18383610d53565b600260005403610a7b576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b6107528133610ee8565b60015460ff1615610ac9576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6003547f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b39573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b5d91906111f9565b610b679084611212565b1115610b9f576040517fc30436e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f1e458bee00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff848116600483015260248201849052604482018390527f00000000000000000000000000000000000000000000000000000000000000001690631e458bee90606401600060405180830381600087803b158015610c3657600080fd5b505af1158015610c4a573d6000803e3d6000fd5b50505050505050565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff16610d4b57600083815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff86168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055610ce93390565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a450600161045c565b50600061045c565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff1615610d4b57600083815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8616808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a450600161045c565b610e1a610f78565b600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b610e97610a8c565b600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016811790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25833610e65565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16610f74576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff821660048201526024810183905260440160405180910390fd5b5050565b60015460ff16610ac9576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060208284031215610fc657600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610ff657600080fd5b9392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461102157600080fd5b919050565b60008060008060006080868803121561103e57600080fd5b61104786610ffd565b945060208601359350604086013567ffffffffffffffff81111561106a57600080fd5b8601601f8101881361107b57600080fd5b803567ffffffffffffffff81111561109257600080fd5b8860208284010111156110a457600080fd5b959894975060200195606001359392505050565b6000806000606084860312156110cd57600080fd5b6110d684610ffd565b95602085013595506040909401359392505050565b6000602082840312156110fd57600080fd5b5035919050565b6000806040838503121561111757600080fd5b8235915061112760208401610ffd565b90509250929050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff8616815273ffffffffffffffffffffffffffffffffffffffff851660208201528360408201526080606082015260006111cb608083018486611130565b979650505050505050565b8381526040602082015260006111f0604083018486611130565b95945050505050565b60006020828403121561120b57600080fd5b5051919050565b8082018082111561045c577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea2646970667358221220f784eb6e1655c2988d3f762737188cfee07a61da1d5b8456cc4f4e55cb339cfb64736f6c634300081a00336080604052348015600f57600080fd5b506001600055610d3a806100246000396000f3fe6080604052600436106100635760003560e01c8063c513169111610040578063c5131691146100c1578063e04d4f97146100e1578063f05b6abf146100f457005b8063357fc5a21461006c5780636ed701691461008c5780638fcaa0b5146100a157005b3661006a57005b005b34801561007857600080fd5b5061006a6100873660046106c0565b610114565b34801561009857600080fd5b5061006a6101aa565b3480156100ad57600080fd5b5061006a6100bc3660046106fc565b6101df565b3480156100cd57600080fd5b5061006a6100dc3660046106c0565b61021e565b61006a6100ef366004610895565b6102f9565b34801561010057600080fd5b5061006a61010f366004610981565b61033d565b61011c610372565b61013e73ffffffffffffffffffffffffffffffffffffffff83163383866103b5565b604080513381526020810185905273ffffffffffffffffffffffffffffffffffffffff848116828401528316606082015290517f2b58128f24a9f59127cc5b5430d70542b22220f2d9adaa86e442b816ab98af609181900360800190a16101a56001600055565b505050565b6040513381527fbcaadb46b82a48af60b608f58959ae6b8310d1b0a0d094c2e9ec3208ed39f2a09060200160405180910390a1565b7f0d3f65f00e631663aa85c96330b5c7a83bb29af3630c0063776f985edc3037aa33838360405161021293929190610a6b565b60405180910390a15050565b610226610372565b6000610233600285610ad5565b90508060000361026f576040517f1f2a200500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61029173ffffffffffffffffffffffffffffffffffffffff84163384846103b5565b604080513381526020810183905273ffffffffffffffffffffffffffffffffffffffff858116828401528416606082015290517f2b58128f24a9f59127cc5b5430d70542b22220f2d9adaa86e442b816ab98af609181900360800190a1506101a56001600055565b7f1f1ff1f5fb41346850b2f5c04e6c767e2f1c8a525c5c0c5cdb60cdf3ca5f62fa3334858585604051610330959493929190610b7e565b60405180910390a1505050565b7f74a53cd528a921fca7dbdee62f86819051d3cc98f214951f4238e8843f20b146338484846040516103309493929190610c08565b6002600054036103ae576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b6040805173ffffffffffffffffffffffffffffffffffffffff85811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd0000000000000000000000000000000000000000000000000000000017905261044a908590610450565b50505050565b600061047273ffffffffffffffffffffffffffffffffffffffff8416836104eb565b905080516000141580156104975750808060200190518101906104959190610ccb565b155b156101a5576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff841660048201526024015b60405180910390fd5b60606104f983836000610500565b9392505050565b60608147101561053e576040517fcd7860590000000000000000000000000000000000000000000000000000000081523060048201526024016104e2565b6000808573ffffffffffffffffffffffffffffffffffffffff1684866040516105679190610ce8565b60006040518083038185875af1925050503d80600081146105a4576040519150601f19603f3d011682016040523d82523d6000602084013e6105a9565b606091505b50915091506105b98683836105c3565b9695505050505050565b6060826105d8576105d382610652565b6104f9565b81511580156105fc575073ffffffffffffffffffffffffffffffffffffffff84163b155b1561064b576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff851660048201526024016104e2565b50806104f9565b8051156106625780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50565b803573ffffffffffffffffffffffffffffffffffffffff811681146106bb57600080fd5b919050565b6000806000606084860312156106d557600080fd5b833592506106e560208501610697565b91506106f360408501610697565b90509250925092565b6000806020838503121561070f57600080fd5b823567ffffffffffffffff81111561072657600080fd5b8301601f8101851361073757600080fd5b803567ffffffffffffffff81111561074e57600080fd5b85602082840101111561076057600080fd5b6020919091019590945092505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156107e6576107e6610770565b604052919050565b600082601f8301126107ff57600080fd5b813567ffffffffffffffff81111561081957610819610770565b61084a60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8401160161079f565b81815284602083860101111561085f57600080fd5b816020850160208301376000918101602001919091529392505050565b801515811461069457600080fd5b80356106bb8161087c565b6000806000606084860312156108aa57600080fd5b833567ffffffffffffffff8111156108c157600080fd5b6108cd868287016107ee565b9350506020840135915060408401356108e58161087c565b809150509250925092565b600067ffffffffffffffff82111561090a5761090a610770565b5060051b60200190565b600082601f83011261092557600080fd5b8135610938610933826108f0565b61079f565b8082825260208201915060208360051b86010192508583111561095a57600080fd5b602085015b8381101561097757803583526020928301920161095f565b5095945050505050565b60008060006060848603121561099657600080fd5b833567ffffffffffffffff8111156109ad57600080fd5b8401601f810186136109be57600080fd5b80356109cc610933826108f0565b8082825260208201915060208360051b8501019250888311156109ee57600080fd5b602084015b83811015610a3057803567ffffffffffffffff811115610a1257600080fd5b610a218b6020838901016107ee565b845250602092830192016109f3565b509550505050602084013567ffffffffffffffff811115610a5057600080fd5b610a5c86828701610914565b9250506106f36040850161088a565b73ffffffffffffffffffffffffffffffffffffffff8416815260406020820152816040820152818360608301376000818301606090810191909152601f9092017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016010192915050565b600082610b0b577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60005b83811015610b2b578181015183820152602001610b13565b50506000910152565b60008151808452610b4c816020860160208601610b10565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b73ffffffffffffffffffffffffffffffffffffffff8616815284602082015260a060408201526000610bb360a0830186610b34565b6060830194909452509015156080909101529392505050565b600081518084526020840193506020830160005b82811015610bfe578151865260209586019590910190600101610be0565b5093949350505050565b60006080820173ffffffffffffffffffffffffffffffffffffffff871683526080602084015280865180835260a08501915060a08160051b86010192506020880160005b82811015610c9b577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60878603018452610c86858351610b34565b94506020938401939190910190600101610c4c565b505050508281036040840152610cb18186610bcc565b915050610cc2606083018415159052565b95945050505050565b600060208284031215610cdd57600080fd5b81516104f98161087c565b60008251610cfa818460208701610b10565b919091019291505056fea2646970667358221220556072e1abafc3c4063b8cce832228b4f309b93726aaa6a6dfab20cb880c6d1864736f6c634300081a0033a2646970667358221220712d6692d7d0bd864639b6d045fe35099672151834ec338f22aa3dc10a54ef7864736f6c634300081a0033", +} + +// ERC20CustodyTestABI is the input ABI used to generate the binding from. +// Deprecated: Use ERC20CustodyTestMetaData.ABI instead. +var ERC20CustodyTestABI = ERC20CustodyTestMetaData.ABI + +// ERC20CustodyTestBin is the compiled bytecode used for deploying new contracts. +// Deprecated: Use ERC20CustodyTestMetaData.Bin instead. +var ERC20CustodyTestBin = ERC20CustodyTestMetaData.Bin + +// DeployERC20CustodyTest deploys a new Ethereum contract, binding an instance of ERC20CustodyTest to it. +func DeployERC20CustodyTest(auth *bind.TransactOpts, backend bind.ContractBackend) (common.Address, *types.Transaction, *ERC20CustodyTest, error) { + parsed, err := ERC20CustodyTestMetaData.GetAbi() + if err != nil { + return common.Address{}, nil, nil, err + } + if parsed == nil { + return common.Address{}, nil, nil, errors.New("GetABI returned nil") + } + + address, tx, contract, err := bind.DeployContract(auth, *parsed, common.FromHex(ERC20CustodyTestBin), backend) + if err != nil { + return common.Address{}, nil, nil, err + } + return address, tx, &ERC20CustodyTest{ERC20CustodyTestCaller: ERC20CustodyTestCaller{contract: contract}, ERC20CustodyTestTransactor: ERC20CustodyTestTransactor{contract: contract}, ERC20CustodyTestFilterer: ERC20CustodyTestFilterer{contract: contract}}, nil +} + +// ERC20CustodyTest is an auto generated Go binding around an Ethereum contract. +type ERC20CustodyTest struct { + ERC20CustodyTestCaller // Read-only binding to the contract + ERC20CustodyTestTransactor // Write-only binding to the contract + ERC20CustodyTestFilterer // Log filterer for contract events +} + +// ERC20CustodyTestCaller is an auto generated read-only Go binding around an Ethereum contract. +type ERC20CustodyTestCaller struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// ERC20CustodyTestTransactor is an auto generated write-only Go binding around an Ethereum contract. +type ERC20CustodyTestTransactor struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// ERC20CustodyTestFilterer is an auto generated log filtering Go binding around an Ethereum contract events. +type ERC20CustodyTestFilterer struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// ERC20CustodyTestSession is an auto generated Go binding around an Ethereum contract, +// with pre-set call and transact options. +type ERC20CustodyTestSession struct { + Contract *ERC20CustodyTest // Generic contract binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// ERC20CustodyTestCallerSession is an auto generated read-only Go binding around an Ethereum contract, +// with pre-set call options. +type ERC20CustodyTestCallerSession struct { + Contract *ERC20CustodyTestCaller // Generic contract caller binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session +} + +// ERC20CustodyTestTransactorSession is an auto generated write-only Go binding around an Ethereum contract, +// with pre-set transact options. +type ERC20CustodyTestTransactorSession struct { + Contract *ERC20CustodyTestTransactor // Generic contract transactor binding to set the session for + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// ERC20CustodyTestRaw is an auto generated low-level Go binding around an Ethereum contract. +type ERC20CustodyTestRaw struct { + Contract *ERC20CustodyTest // Generic contract binding to access the raw methods on +} + +// ERC20CustodyTestCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract. +type ERC20CustodyTestCallerRaw struct { + Contract *ERC20CustodyTestCaller // Generic read-only contract binding to access the raw methods on +} + +// ERC20CustodyTestTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract. +type ERC20CustodyTestTransactorRaw struct { + Contract *ERC20CustodyTestTransactor // Generic write-only contract binding to access the raw methods on +} + +// NewERC20CustodyTest creates a new instance of ERC20CustodyTest, bound to a specific deployed contract. +func NewERC20CustodyTest(address common.Address, backend bind.ContractBackend) (*ERC20CustodyTest, error) { + contract, err := bindERC20CustodyTest(address, backend, backend, backend) + if err != nil { + return nil, err + } + return &ERC20CustodyTest{ERC20CustodyTestCaller: ERC20CustodyTestCaller{contract: contract}, ERC20CustodyTestTransactor: ERC20CustodyTestTransactor{contract: contract}, ERC20CustodyTestFilterer: ERC20CustodyTestFilterer{contract: contract}}, nil +} + +// NewERC20CustodyTestCaller creates a new read-only instance of ERC20CustodyTest, bound to a specific deployed contract. +func NewERC20CustodyTestCaller(address common.Address, caller bind.ContractCaller) (*ERC20CustodyTestCaller, error) { + contract, err := bindERC20CustodyTest(address, caller, nil, nil) + if err != nil { + return nil, err + } + return &ERC20CustodyTestCaller{contract: contract}, nil +} + +// NewERC20CustodyTestTransactor creates a new write-only instance of ERC20CustodyTest, bound to a specific deployed contract. +func NewERC20CustodyTestTransactor(address common.Address, transactor bind.ContractTransactor) (*ERC20CustodyTestTransactor, error) { + contract, err := bindERC20CustodyTest(address, nil, transactor, nil) + if err != nil { + return nil, err + } + return &ERC20CustodyTestTransactor{contract: contract}, nil +} + +// NewERC20CustodyTestFilterer creates a new log filterer instance of ERC20CustodyTest, bound to a specific deployed contract. +func NewERC20CustodyTestFilterer(address common.Address, filterer bind.ContractFilterer) (*ERC20CustodyTestFilterer, error) { + contract, err := bindERC20CustodyTest(address, nil, nil, filterer) + if err != nil { + return nil, err + } + return &ERC20CustodyTestFilterer{contract: contract}, nil +} + +// bindERC20CustodyTest binds a generic wrapper to an already deployed contract. +func bindERC20CustodyTest(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { + parsed, err := ERC20CustodyTestMetaData.GetAbi() + if err != nil { + return nil, err + } + return bind.NewBoundContract(address, *parsed, caller, transactor, filterer), nil +} + +// Call invokes the (constant) contract method with params as input values and +// sets the output to result. The result type might be a single field for simple +// returns, a slice of interfaces for anonymous returns and a struct for named +// returns. +func (_ERC20CustodyTest *ERC20CustodyTestRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _ERC20CustodyTest.Contract.ERC20CustodyTestCaller.contract.Call(opts, result, method, params...) +} + +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_ERC20CustodyTest *ERC20CustodyTestRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _ERC20CustodyTest.Contract.ERC20CustodyTestTransactor.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_ERC20CustodyTest *ERC20CustodyTestRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _ERC20CustodyTest.Contract.ERC20CustodyTestTransactor.contract.Transact(opts, method, params...) +} + +// Call invokes the (constant) contract method with params as input values and +// sets the output to result. The result type might be a single field for simple +// returns, a slice of interfaces for anonymous returns and a struct for named +// returns. +func (_ERC20CustodyTest *ERC20CustodyTestCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _ERC20CustodyTest.Contract.contract.Call(opts, result, method, params...) +} + +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_ERC20CustodyTest *ERC20CustodyTestTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _ERC20CustodyTest.Contract.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_ERC20CustodyTest *ERC20CustodyTestTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _ERC20CustodyTest.Contract.contract.Transact(opts, method, params...) +} + +// ASSETHANDLERROLE is a free data retrieval call binding the contract method 0x5d62c860. +// +// Solidity: function ASSET_HANDLER_ROLE() view returns(bytes32) +func (_ERC20CustodyTest *ERC20CustodyTestCaller) ASSETHANDLERROLE(opts *bind.CallOpts) ([32]byte, error) { + var out []interface{} + err := _ERC20CustodyTest.contract.Call(opts, &out, "ASSET_HANDLER_ROLE") + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// ASSETHANDLERROLE is a free data retrieval call binding the contract method 0x5d62c860. +// +// Solidity: function ASSET_HANDLER_ROLE() view returns(bytes32) +func (_ERC20CustodyTest *ERC20CustodyTestSession) ASSETHANDLERROLE() ([32]byte, error) { + return _ERC20CustodyTest.Contract.ASSETHANDLERROLE(&_ERC20CustodyTest.CallOpts) +} + +// ASSETHANDLERROLE is a free data retrieval call binding the contract method 0x5d62c860. +// +// Solidity: function ASSET_HANDLER_ROLE() view returns(bytes32) +func (_ERC20CustodyTest *ERC20CustodyTestCallerSession) ASSETHANDLERROLE() ([32]byte, error) { + return _ERC20CustodyTest.Contract.ASSETHANDLERROLE(&_ERC20CustodyTest.CallOpts) +} + +// ISTEST is a free data retrieval call binding the contract method 0xfa7626d4. +// +// Solidity: function IS_TEST() view returns(bool) +func (_ERC20CustodyTest *ERC20CustodyTestCaller) ISTEST(opts *bind.CallOpts) (bool, error) { + var out []interface{} + err := _ERC20CustodyTest.contract.Call(opts, &out, "IS_TEST") + + if err != nil { + return *new(bool), err + } + + out0 := *abi.ConvertType(out[0], new(bool)).(*bool) + + return out0, err + +} + +// ISTEST is a free data retrieval call binding the contract method 0xfa7626d4. +// +// Solidity: function IS_TEST() view returns(bool) +func (_ERC20CustodyTest *ERC20CustodyTestSession) ISTEST() (bool, error) { + return _ERC20CustodyTest.Contract.ISTEST(&_ERC20CustodyTest.CallOpts) +} + +// ISTEST is a free data retrieval call binding the contract method 0xfa7626d4. +// +// Solidity: function IS_TEST() view returns(bool) +func (_ERC20CustodyTest *ERC20CustodyTestCallerSession) ISTEST() (bool, error) { + return _ERC20CustodyTest.Contract.ISTEST(&_ERC20CustodyTest.CallOpts) +} + +// PAUSERROLE is a free data retrieval call binding the contract method 0xe63ab1e9. +// +// Solidity: function PAUSER_ROLE() view returns(bytes32) +func (_ERC20CustodyTest *ERC20CustodyTestCaller) PAUSERROLE(opts *bind.CallOpts) ([32]byte, error) { + var out []interface{} + err := _ERC20CustodyTest.contract.Call(opts, &out, "PAUSER_ROLE") + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// PAUSERROLE is a free data retrieval call binding the contract method 0xe63ab1e9. +// +// Solidity: function PAUSER_ROLE() view returns(bytes32) +func (_ERC20CustodyTest *ERC20CustodyTestSession) PAUSERROLE() ([32]byte, error) { + return _ERC20CustodyTest.Contract.PAUSERROLE(&_ERC20CustodyTest.CallOpts) +} + +// PAUSERROLE is a free data retrieval call binding the contract method 0xe63ab1e9. +// +// Solidity: function PAUSER_ROLE() view returns(bytes32) +func (_ERC20CustodyTest *ERC20CustodyTestCallerSession) PAUSERROLE() ([32]byte, error) { + return _ERC20CustodyTest.Contract.PAUSERROLE(&_ERC20CustodyTest.CallOpts) +} + +// TSSROLE is a free data retrieval call binding the contract method 0xa783c789. +// +// Solidity: function TSS_ROLE() view returns(bytes32) +func (_ERC20CustodyTest *ERC20CustodyTestCaller) TSSROLE(opts *bind.CallOpts) ([32]byte, error) { + var out []interface{} + err := _ERC20CustodyTest.contract.Call(opts, &out, "TSS_ROLE") + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// TSSROLE is a free data retrieval call binding the contract method 0xa783c789. +// +// Solidity: function TSS_ROLE() view returns(bytes32) +func (_ERC20CustodyTest *ERC20CustodyTestSession) TSSROLE() ([32]byte, error) { + return _ERC20CustodyTest.Contract.TSSROLE(&_ERC20CustodyTest.CallOpts) +} + +// TSSROLE is a free data retrieval call binding the contract method 0xa783c789. +// +// Solidity: function TSS_ROLE() view returns(bytes32) +func (_ERC20CustodyTest *ERC20CustodyTestCallerSession) TSSROLE() ([32]byte, error) { + return _ERC20CustodyTest.Contract.TSSROLE(&_ERC20CustodyTest.CallOpts) +} + +// WITHDRAWERROLE is a free data retrieval call binding the contract method 0x85f438c1. +// +// Solidity: function WITHDRAWER_ROLE() view returns(bytes32) +func (_ERC20CustodyTest *ERC20CustodyTestCaller) WITHDRAWERROLE(opts *bind.CallOpts) ([32]byte, error) { + var out []interface{} + err := _ERC20CustodyTest.contract.Call(opts, &out, "WITHDRAWER_ROLE") + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// WITHDRAWERROLE is a free data retrieval call binding the contract method 0x85f438c1. +// +// Solidity: function WITHDRAWER_ROLE() view returns(bytes32) +func (_ERC20CustodyTest *ERC20CustodyTestSession) WITHDRAWERROLE() ([32]byte, error) { + return _ERC20CustodyTest.Contract.WITHDRAWERROLE(&_ERC20CustodyTest.CallOpts) +} + +// WITHDRAWERROLE is a free data retrieval call binding the contract method 0x85f438c1. +// +// Solidity: function WITHDRAWER_ROLE() view returns(bytes32) +func (_ERC20CustodyTest *ERC20CustodyTestCallerSession) WITHDRAWERROLE() ([32]byte, error) { + return _ERC20CustodyTest.Contract.WITHDRAWERROLE(&_ERC20CustodyTest.CallOpts) +} + +// ExcludeArtifacts is a free data retrieval call binding the contract method 0xb5508aa9. +// +// Solidity: function excludeArtifacts() view returns(string[] excludedArtifacts_) +func (_ERC20CustodyTest *ERC20CustodyTestCaller) ExcludeArtifacts(opts *bind.CallOpts) ([]string, error) { + var out []interface{} + err := _ERC20CustodyTest.contract.Call(opts, &out, "excludeArtifacts") + + if err != nil { + return *new([]string), err + } + + out0 := *abi.ConvertType(out[0], new([]string)).(*[]string) + + return out0, err + +} + +// ExcludeArtifacts is a free data retrieval call binding the contract method 0xb5508aa9. +// +// Solidity: function excludeArtifacts() view returns(string[] excludedArtifacts_) +func (_ERC20CustodyTest *ERC20CustodyTestSession) ExcludeArtifacts() ([]string, error) { + return _ERC20CustodyTest.Contract.ExcludeArtifacts(&_ERC20CustodyTest.CallOpts) +} + +// ExcludeArtifacts is a free data retrieval call binding the contract method 0xb5508aa9. +// +// Solidity: function excludeArtifacts() view returns(string[] excludedArtifacts_) +func (_ERC20CustodyTest *ERC20CustodyTestCallerSession) ExcludeArtifacts() ([]string, error) { + return _ERC20CustodyTest.Contract.ExcludeArtifacts(&_ERC20CustodyTest.CallOpts) +} + +// ExcludeContracts is a free data retrieval call binding the contract method 0xe20c9f71. +// +// Solidity: function excludeContracts() view returns(address[] excludedContracts_) +func (_ERC20CustodyTest *ERC20CustodyTestCaller) ExcludeContracts(opts *bind.CallOpts) ([]common.Address, error) { + var out []interface{} + err := _ERC20CustodyTest.contract.Call(opts, &out, "excludeContracts") + + if err != nil { + return *new([]common.Address), err + } + + out0 := *abi.ConvertType(out[0], new([]common.Address)).(*[]common.Address) + + return out0, err + +} + +// ExcludeContracts is a free data retrieval call binding the contract method 0xe20c9f71. +// +// Solidity: function excludeContracts() view returns(address[] excludedContracts_) +func (_ERC20CustodyTest *ERC20CustodyTestSession) ExcludeContracts() ([]common.Address, error) { + return _ERC20CustodyTest.Contract.ExcludeContracts(&_ERC20CustodyTest.CallOpts) +} + +// ExcludeContracts is a free data retrieval call binding the contract method 0xe20c9f71. +// +// Solidity: function excludeContracts() view returns(address[] excludedContracts_) +func (_ERC20CustodyTest *ERC20CustodyTestCallerSession) ExcludeContracts() ([]common.Address, error) { + return _ERC20CustodyTest.Contract.ExcludeContracts(&_ERC20CustodyTest.CallOpts) +} + +// ExcludeSelectors is a free data retrieval call binding the contract method 0xb0464fdc. +// +// Solidity: function excludeSelectors() view returns((address,bytes4[])[] excludedSelectors_) +func (_ERC20CustodyTest *ERC20CustodyTestCaller) ExcludeSelectors(opts *bind.CallOpts) ([]StdInvariantFuzzSelector, error) { + var out []interface{} + err := _ERC20CustodyTest.contract.Call(opts, &out, "excludeSelectors") + + if err != nil { + return *new([]StdInvariantFuzzSelector), err + } + + out0 := *abi.ConvertType(out[0], new([]StdInvariantFuzzSelector)).(*[]StdInvariantFuzzSelector) + + return out0, err + +} + +// ExcludeSelectors is a free data retrieval call binding the contract method 0xb0464fdc. +// +// Solidity: function excludeSelectors() view returns((address,bytes4[])[] excludedSelectors_) +func (_ERC20CustodyTest *ERC20CustodyTestSession) ExcludeSelectors() ([]StdInvariantFuzzSelector, error) { + return _ERC20CustodyTest.Contract.ExcludeSelectors(&_ERC20CustodyTest.CallOpts) +} + +// ExcludeSelectors is a free data retrieval call binding the contract method 0xb0464fdc. +// +// Solidity: function excludeSelectors() view returns((address,bytes4[])[] excludedSelectors_) +func (_ERC20CustodyTest *ERC20CustodyTestCallerSession) ExcludeSelectors() ([]StdInvariantFuzzSelector, error) { + return _ERC20CustodyTest.Contract.ExcludeSelectors(&_ERC20CustodyTest.CallOpts) +} + +// ExcludeSenders is a free data retrieval call binding the contract method 0x1ed7831c. +// +// Solidity: function excludeSenders() view returns(address[] excludedSenders_) +func (_ERC20CustodyTest *ERC20CustodyTestCaller) ExcludeSenders(opts *bind.CallOpts) ([]common.Address, error) { + var out []interface{} + err := _ERC20CustodyTest.contract.Call(opts, &out, "excludeSenders") + + if err != nil { + return *new([]common.Address), err + } + + out0 := *abi.ConvertType(out[0], new([]common.Address)).(*[]common.Address) + + return out0, err + +} + +// ExcludeSenders is a free data retrieval call binding the contract method 0x1ed7831c. +// +// Solidity: function excludeSenders() view returns(address[] excludedSenders_) +func (_ERC20CustodyTest *ERC20CustodyTestSession) ExcludeSenders() ([]common.Address, error) { + return _ERC20CustodyTest.Contract.ExcludeSenders(&_ERC20CustodyTest.CallOpts) +} + +// ExcludeSenders is a free data retrieval call binding the contract method 0x1ed7831c. +// +// Solidity: function excludeSenders() view returns(address[] excludedSenders_) +func (_ERC20CustodyTest *ERC20CustodyTestCallerSession) ExcludeSenders() ([]common.Address, error) { + return _ERC20CustodyTest.Contract.ExcludeSenders(&_ERC20CustodyTest.CallOpts) +} + +// Failed is a free data retrieval call binding the contract method 0xba414fa6. +// +// Solidity: function failed() view returns(bool) +func (_ERC20CustodyTest *ERC20CustodyTestCaller) Failed(opts *bind.CallOpts) (bool, error) { + var out []interface{} + err := _ERC20CustodyTest.contract.Call(opts, &out, "failed") + + if err != nil { + return *new(bool), err + } + + out0 := *abi.ConvertType(out[0], new(bool)).(*bool) + + return out0, err + +} + +// Failed is a free data retrieval call binding the contract method 0xba414fa6. +// +// Solidity: function failed() view returns(bool) +func (_ERC20CustodyTest *ERC20CustodyTestSession) Failed() (bool, error) { + return _ERC20CustodyTest.Contract.Failed(&_ERC20CustodyTest.CallOpts) +} + +// Failed is a free data retrieval call binding the contract method 0xba414fa6. +// +// Solidity: function failed() view returns(bool) +func (_ERC20CustodyTest *ERC20CustodyTestCallerSession) Failed() (bool, error) { + return _ERC20CustodyTest.Contract.Failed(&_ERC20CustodyTest.CallOpts) +} + +// TargetArtifactSelectors is a free data retrieval call binding the contract method 0x66d9a9a0. +// +// Solidity: function targetArtifactSelectors() view returns((string,bytes4[])[] targetedArtifactSelectors_) +func (_ERC20CustodyTest *ERC20CustodyTestCaller) TargetArtifactSelectors(opts *bind.CallOpts) ([]StdInvariantFuzzArtifactSelector, error) { + var out []interface{} + err := _ERC20CustodyTest.contract.Call(opts, &out, "targetArtifactSelectors") + + if err != nil { + return *new([]StdInvariantFuzzArtifactSelector), err + } + + out0 := *abi.ConvertType(out[0], new([]StdInvariantFuzzArtifactSelector)).(*[]StdInvariantFuzzArtifactSelector) + + return out0, err + +} + +// TargetArtifactSelectors is a free data retrieval call binding the contract method 0x66d9a9a0. +// +// Solidity: function targetArtifactSelectors() view returns((string,bytes4[])[] targetedArtifactSelectors_) +func (_ERC20CustodyTest *ERC20CustodyTestSession) TargetArtifactSelectors() ([]StdInvariantFuzzArtifactSelector, error) { + return _ERC20CustodyTest.Contract.TargetArtifactSelectors(&_ERC20CustodyTest.CallOpts) +} + +// TargetArtifactSelectors is a free data retrieval call binding the contract method 0x66d9a9a0. +// +// Solidity: function targetArtifactSelectors() view returns((string,bytes4[])[] targetedArtifactSelectors_) +func (_ERC20CustodyTest *ERC20CustodyTestCallerSession) TargetArtifactSelectors() ([]StdInvariantFuzzArtifactSelector, error) { + return _ERC20CustodyTest.Contract.TargetArtifactSelectors(&_ERC20CustodyTest.CallOpts) +} + +// TargetArtifacts is a free data retrieval call binding the contract method 0x85226c81. +// +// Solidity: function targetArtifacts() view returns(string[] targetedArtifacts_) +func (_ERC20CustodyTest *ERC20CustodyTestCaller) TargetArtifacts(opts *bind.CallOpts) ([]string, error) { + var out []interface{} + err := _ERC20CustodyTest.contract.Call(opts, &out, "targetArtifacts") + + if err != nil { + return *new([]string), err + } + + out0 := *abi.ConvertType(out[0], new([]string)).(*[]string) + + return out0, err + +} + +// TargetArtifacts is a free data retrieval call binding the contract method 0x85226c81. +// +// Solidity: function targetArtifacts() view returns(string[] targetedArtifacts_) +func (_ERC20CustodyTest *ERC20CustodyTestSession) TargetArtifacts() ([]string, error) { + return _ERC20CustodyTest.Contract.TargetArtifacts(&_ERC20CustodyTest.CallOpts) +} + +// TargetArtifacts is a free data retrieval call binding the contract method 0x85226c81. +// +// Solidity: function targetArtifacts() view returns(string[] targetedArtifacts_) +func (_ERC20CustodyTest *ERC20CustodyTestCallerSession) TargetArtifacts() ([]string, error) { + return _ERC20CustodyTest.Contract.TargetArtifacts(&_ERC20CustodyTest.CallOpts) +} + +// TargetContracts is a free data retrieval call binding the contract method 0x3f7286f4. +// +// Solidity: function targetContracts() view returns(address[] targetedContracts_) +func (_ERC20CustodyTest *ERC20CustodyTestCaller) TargetContracts(opts *bind.CallOpts) ([]common.Address, error) { + var out []interface{} + err := _ERC20CustodyTest.contract.Call(opts, &out, "targetContracts") + + if err != nil { + return *new([]common.Address), err + } + + out0 := *abi.ConvertType(out[0], new([]common.Address)).(*[]common.Address) + + return out0, err + +} + +// TargetContracts is a free data retrieval call binding the contract method 0x3f7286f4. +// +// Solidity: function targetContracts() view returns(address[] targetedContracts_) +func (_ERC20CustodyTest *ERC20CustodyTestSession) TargetContracts() ([]common.Address, error) { + return _ERC20CustodyTest.Contract.TargetContracts(&_ERC20CustodyTest.CallOpts) +} + +// TargetContracts is a free data retrieval call binding the contract method 0x3f7286f4. +// +// Solidity: function targetContracts() view returns(address[] targetedContracts_) +func (_ERC20CustodyTest *ERC20CustodyTestCallerSession) TargetContracts() ([]common.Address, error) { + return _ERC20CustodyTest.Contract.TargetContracts(&_ERC20CustodyTest.CallOpts) +} + +// TargetInterfaces is a free data retrieval call binding the contract method 0x2ade3880. +// +// Solidity: function targetInterfaces() view returns((address,string[])[] targetedInterfaces_) +func (_ERC20CustodyTest *ERC20CustodyTestCaller) TargetInterfaces(opts *bind.CallOpts) ([]StdInvariantFuzzInterface, error) { + var out []interface{} + err := _ERC20CustodyTest.contract.Call(opts, &out, "targetInterfaces") + + if err != nil { + return *new([]StdInvariantFuzzInterface), err + } + + out0 := *abi.ConvertType(out[0], new([]StdInvariantFuzzInterface)).(*[]StdInvariantFuzzInterface) + + return out0, err + +} + +// TargetInterfaces is a free data retrieval call binding the contract method 0x2ade3880. +// +// Solidity: function targetInterfaces() view returns((address,string[])[] targetedInterfaces_) +func (_ERC20CustodyTest *ERC20CustodyTestSession) TargetInterfaces() ([]StdInvariantFuzzInterface, error) { + return _ERC20CustodyTest.Contract.TargetInterfaces(&_ERC20CustodyTest.CallOpts) +} + +// TargetInterfaces is a free data retrieval call binding the contract method 0x2ade3880. +// +// Solidity: function targetInterfaces() view returns((address,string[])[] targetedInterfaces_) +func (_ERC20CustodyTest *ERC20CustodyTestCallerSession) TargetInterfaces() ([]StdInvariantFuzzInterface, error) { + return _ERC20CustodyTest.Contract.TargetInterfaces(&_ERC20CustodyTest.CallOpts) +} + +// TargetSelectors is a free data retrieval call binding the contract method 0x916a17c6. +// +// Solidity: function targetSelectors() view returns((address,bytes4[])[] targetedSelectors_) +func (_ERC20CustodyTest *ERC20CustodyTestCaller) TargetSelectors(opts *bind.CallOpts) ([]StdInvariantFuzzSelector, error) { + var out []interface{} + err := _ERC20CustodyTest.contract.Call(opts, &out, "targetSelectors") + + if err != nil { + return *new([]StdInvariantFuzzSelector), err + } + + out0 := *abi.ConvertType(out[0], new([]StdInvariantFuzzSelector)).(*[]StdInvariantFuzzSelector) + + return out0, err + +} + +// TargetSelectors is a free data retrieval call binding the contract method 0x916a17c6. +// +// Solidity: function targetSelectors() view returns((address,bytes4[])[] targetedSelectors_) +func (_ERC20CustodyTest *ERC20CustodyTestSession) TargetSelectors() ([]StdInvariantFuzzSelector, error) { + return _ERC20CustodyTest.Contract.TargetSelectors(&_ERC20CustodyTest.CallOpts) +} + +// TargetSelectors is a free data retrieval call binding the contract method 0x916a17c6. +// +// Solidity: function targetSelectors() view returns((address,bytes4[])[] targetedSelectors_) +func (_ERC20CustodyTest *ERC20CustodyTestCallerSession) TargetSelectors() ([]StdInvariantFuzzSelector, error) { + return _ERC20CustodyTest.Contract.TargetSelectors(&_ERC20CustodyTest.CallOpts) +} + +// TargetSenders is a free data retrieval call binding the contract method 0x3e5e3c23. +// +// Solidity: function targetSenders() view returns(address[] targetedSenders_) +func (_ERC20CustodyTest *ERC20CustodyTestCaller) TargetSenders(opts *bind.CallOpts) ([]common.Address, error) { + var out []interface{} + err := _ERC20CustodyTest.contract.Call(opts, &out, "targetSenders") + + if err != nil { + return *new([]common.Address), err + } + + out0 := *abi.ConvertType(out[0], new([]common.Address)).(*[]common.Address) + + return out0, err + +} + +// TargetSenders is a free data retrieval call binding the contract method 0x3e5e3c23. +// +// Solidity: function targetSenders() view returns(address[] targetedSenders_) +func (_ERC20CustodyTest *ERC20CustodyTestSession) TargetSenders() ([]common.Address, error) { + return _ERC20CustodyTest.Contract.TargetSenders(&_ERC20CustodyTest.CallOpts) +} + +// TargetSenders is a free data retrieval call binding the contract method 0x3e5e3c23. +// +// Solidity: function targetSenders() view returns(address[] targetedSenders_) +func (_ERC20CustodyTest *ERC20CustodyTestCallerSession) TargetSenders() ([]common.Address, error) { + return _ERC20CustodyTest.Contract.TargetSenders(&_ERC20CustodyTest.CallOpts) +} + +// SetUp is a paid mutator transaction binding the contract method 0x0a9254e4. +// +// Solidity: function setUp() returns() +func (_ERC20CustodyTest *ERC20CustodyTestTransactor) SetUp(opts *bind.TransactOpts) (*types.Transaction, error) { + return _ERC20CustodyTest.contract.Transact(opts, "setUp") +} + +// SetUp is a paid mutator transaction binding the contract method 0x0a9254e4. +// +// Solidity: function setUp() returns() +func (_ERC20CustodyTest *ERC20CustodyTestSession) SetUp() (*types.Transaction, error) { + return _ERC20CustodyTest.Contract.SetUp(&_ERC20CustodyTest.TransactOpts) +} + +// SetUp is a paid mutator transaction binding the contract method 0x0a9254e4. +// +// Solidity: function setUp() returns() +func (_ERC20CustodyTest *ERC20CustodyTestTransactorSession) SetUp() (*types.Transaction, error) { + return _ERC20CustodyTest.Contract.SetUp(&_ERC20CustodyTest.TransactOpts) +} + +// TestForwardCallToReceiveERC20PartialThroughCustody is a paid mutator transaction binding the contract method 0xfb176c12. +// +// Solidity: function testForwardCallToReceiveERC20PartialThroughCustody() returns() +func (_ERC20CustodyTest *ERC20CustodyTestTransactor) TestForwardCallToReceiveERC20PartialThroughCustody(opts *bind.TransactOpts) (*types.Transaction, error) { + return _ERC20CustodyTest.contract.Transact(opts, "testForwardCallToReceiveERC20PartialThroughCustody") +} + +// TestForwardCallToReceiveERC20PartialThroughCustody is a paid mutator transaction binding the contract method 0xfb176c12. +// +// Solidity: function testForwardCallToReceiveERC20PartialThroughCustody() returns() +func (_ERC20CustodyTest *ERC20CustodyTestSession) TestForwardCallToReceiveERC20PartialThroughCustody() (*types.Transaction, error) { + return _ERC20CustodyTest.Contract.TestForwardCallToReceiveERC20PartialThroughCustody(&_ERC20CustodyTest.TransactOpts) +} + +// TestForwardCallToReceiveERC20PartialThroughCustody is a paid mutator transaction binding the contract method 0xfb176c12. +// +// Solidity: function testForwardCallToReceiveERC20PartialThroughCustody() returns() +func (_ERC20CustodyTest *ERC20CustodyTestTransactorSession) TestForwardCallToReceiveERC20PartialThroughCustody() (*types.Transaction, error) { + return _ERC20CustodyTest.Contract.TestForwardCallToReceiveERC20PartialThroughCustody(&_ERC20CustodyTest.TransactOpts) +} + +// TestForwardCallToReceiveERC20PartialThroughCustodyFailsIfAmountIs0 is a paid mutator transaction binding the contract method 0x6a621854. +// +// Solidity: function testForwardCallToReceiveERC20PartialThroughCustodyFailsIfAmountIs0() returns() +func (_ERC20CustodyTest *ERC20CustodyTestTransactor) TestForwardCallToReceiveERC20PartialThroughCustodyFailsIfAmountIs0(opts *bind.TransactOpts) (*types.Transaction, error) { + return _ERC20CustodyTest.contract.Transact(opts, "testForwardCallToReceiveERC20PartialThroughCustodyFailsIfAmountIs0") +} + +// TestForwardCallToReceiveERC20PartialThroughCustodyFailsIfAmountIs0 is a paid mutator transaction binding the contract method 0x6a621854. +// +// Solidity: function testForwardCallToReceiveERC20PartialThroughCustodyFailsIfAmountIs0() returns() +func (_ERC20CustodyTest *ERC20CustodyTestSession) TestForwardCallToReceiveERC20PartialThroughCustodyFailsIfAmountIs0() (*types.Transaction, error) { + return _ERC20CustodyTest.Contract.TestForwardCallToReceiveERC20PartialThroughCustodyFailsIfAmountIs0(&_ERC20CustodyTest.TransactOpts) +} + +// TestForwardCallToReceiveERC20PartialThroughCustodyFailsIfAmountIs0 is a paid mutator transaction binding the contract method 0x6a621854. +// +// Solidity: function testForwardCallToReceiveERC20PartialThroughCustodyFailsIfAmountIs0() returns() +func (_ERC20CustodyTest *ERC20CustodyTestTransactorSession) TestForwardCallToReceiveERC20PartialThroughCustodyFailsIfAmountIs0() (*types.Transaction, error) { + return _ERC20CustodyTest.Contract.TestForwardCallToReceiveERC20PartialThroughCustodyFailsIfAmountIs0(&_ERC20CustodyTest.TransactOpts) +} + +// TestForwardCallToReceiveERC20PartialThroughCustodyFailsIfSenderIsNotWithdrawer is a paid mutator transaction binding the contract method 0x0eee72a9. +// +// Solidity: function testForwardCallToReceiveERC20PartialThroughCustodyFailsIfSenderIsNotWithdrawer() returns() +func (_ERC20CustodyTest *ERC20CustodyTestTransactor) TestForwardCallToReceiveERC20PartialThroughCustodyFailsIfSenderIsNotWithdrawer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _ERC20CustodyTest.contract.Transact(opts, "testForwardCallToReceiveERC20PartialThroughCustodyFailsIfSenderIsNotWithdrawer") +} + +// TestForwardCallToReceiveERC20PartialThroughCustodyFailsIfSenderIsNotWithdrawer is a paid mutator transaction binding the contract method 0x0eee72a9. +// +// Solidity: function testForwardCallToReceiveERC20PartialThroughCustodyFailsIfSenderIsNotWithdrawer() returns() +func (_ERC20CustodyTest *ERC20CustodyTestSession) TestForwardCallToReceiveERC20PartialThroughCustodyFailsIfSenderIsNotWithdrawer() (*types.Transaction, error) { + return _ERC20CustodyTest.Contract.TestForwardCallToReceiveERC20PartialThroughCustodyFailsIfSenderIsNotWithdrawer(&_ERC20CustodyTest.TransactOpts) +} + +// TestForwardCallToReceiveERC20PartialThroughCustodyFailsIfSenderIsNotWithdrawer is a paid mutator transaction binding the contract method 0x0eee72a9. +// +// Solidity: function testForwardCallToReceiveERC20PartialThroughCustodyFailsIfSenderIsNotWithdrawer() returns() +func (_ERC20CustodyTest *ERC20CustodyTestTransactorSession) TestForwardCallToReceiveERC20PartialThroughCustodyFailsIfSenderIsNotWithdrawer() (*types.Transaction, error) { + return _ERC20CustodyTest.Contract.TestForwardCallToReceiveERC20PartialThroughCustodyFailsIfSenderIsNotWithdrawer(&_ERC20CustodyTest.TransactOpts) +} + +// TestForwardCallToReceiveERC20ThroughCustody is a paid mutator transaction binding the contract method 0xcbd57e2f. +// +// Solidity: function testForwardCallToReceiveERC20ThroughCustody() returns() +func (_ERC20CustodyTest *ERC20CustodyTestTransactor) TestForwardCallToReceiveERC20ThroughCustody(opts *bind.TransactOpts) (*types.Transaction, error) { + return _ERC20CustodyTest.contract.Transact(opts, "testForwardCallToReceiveERC20ThroughCustody") +} + +// TestForwardCallToReceiveERC20ThroughCustody is a paid mutator transaction binding the contract method 0xcbd57e2f. +// +// Solidity: function testForwardCallToReceiveERC20ThroughCustody() returns() +func (_ERC20CustodyTest *ERC20CustodyTestSession) TestForwardCallToReceiveERC20ThroughCustody() (*types.Transaction, error) { + return _ERC20CustodyTest.Contract.TestForwardCallToReceiveERC20ThroughCustody(&_ERC20CustodyTest.TransactOpts) +} + +// TestForwardCallToReceiveERC20ThroughCustody is a paid mutator transaction binding the contract method 0xcbd57e2f. +// +// Solidity: function testForwardCallToReceiveERC20ThroughCustody() returns() +func (_ERC20CustodyTest *ERC20CustodyTestTransactorSession) TestForwardCallToReceiveERC20ThroughCustody() (*types.Transaction, error) { + return _ERC20CustodyTest.Contract.TestForwardCallToReceiveERC20ThroughCustody(&_ERC20CustodyTest.TransactOpts) +} + +// TestForwardCallToReceiveERC20ThroughCustodyFailsIfAmountIs0 is a paid mutator transaction binding the contract method 0x1779672f. +// +// Solidity: function testForwardCallToReceiveERC20ThroughCustodyFailsIfAmountIs0() returns() +func (_ERC20CustodyTest *ERC20CustodyTestTransactor) TestForwardCallToReceiveERC20ThroughCustodyFailsIfAmountIs0(opts *bind.TransactOpts) (*types.Transaction, error) { + return _ERC20CustodyTest.contract.Transact(opts, "testForwardCallToReceiveERC20ThroughCustodyFailsIfAmountIs0") +} + +// TestForwardCallToReceiveERC20ThroughCustodyFailsIfAmountIs0 is a paid mutator transaction binding the contract method 0x1779672f. +// +// Solidity: function testForwardCallToReceiveERC20ThroughCustodyFailsIfAmountIs0() returns() +func (_ERC20CustodyTest *ERC20CustodyTestSession) TestForwardCallToReceiveERC20ThroughCustodyFailsIfAmountIs0() (*types.Transaction, error) { + return _ERC20CustodyTest.Contract.TestForwardCallToReceiveERC20ThroughCustodyFailsIfAmountIs0(&_ERC20CustodyTest.TransactOpts) +} + +// TestForwardCallToReceiveERC20ThroughCustodyFailsIfAmountIs0 is a paid mutator transaction binding the contract method 0x1779672f. +// +// Solidity: function testForwardCallToReceiveERC20ThroughCustodyFailsIfAmountIs0() returns() +func (_ERC20CustodyTest *ERC20CustodyTestTransactorSession) TestForwardCallToReceiveERC20ThroughCustodyFailsIfAmountIs0() (*types.Transaction, error) { + return _ERC20CustodyTest.Contract.TestForwardCallToReceiveERC20ThroughCustodyFailsIfAmountIs0(&_ERC20CustodyTest.TransactOpts) +} + +// TestForwardCallToReceiveERC20ThroughCustodyFailsIfReceiverIsZeroAddress is a paid mutator transaction binding the contract method 0x51ecdf3c. +// +// Solidity: function testForwardCallToReceiveERC20ThroughCustodyFailsIfReceiverIsZeroAddress() returns() +func (_ERC20CustodyTest *ERC20CustodyTestTransactor) TestForwardCallToReceiveERC20ThroughCustodyFailsIfReceiverIsZeroAddress(opts *bind.TransactOpts) (*types.Transaction, error) { + return _ERC20CustodyTest.contract.Transact(opts, "testForwardCallToReceiveERC20ThroughCustodyFailsIfReceiverIsZeroAddress") +} + +// TestForwardCallToReceiveERC20ThroughCustodyFailsIfReceiverIsZeroAddress is a paid mutator transaction binding the contract method 0x51ecdf3c. +// +// Solidity: function testForwardCallToReceiveERC20ThroughCustodyFailsIfReceiverIsZeroAddress() returns() +func (_ERC20CustodyTest *ERC20CustodyTestSession) TestForwardCallToReceiveERC20ThroughCustodyFailsIfReceiverIsZeroAddress() (*types.Transaction, error) { + return _ERC20CustodyTest.Contract.TestForwardCallToReceiveERC20ThroughCustodyFailsIfReceiverIsZeroAddress(&_ERC20CustodyTest.TransactOpts) +} + +// TestForwardCallToReceiveERC20ThroughCustodyFailsIfReceiverIsZeroAddress is a paid mutator transaction binding the contract method 0x51ecdf3c. +// +// Solidity: function testForwardCallToReceiveERC20ThroughCustodyFailsIfReceiverIsZeroAddress() returns() +func (_ERC20CustodyTest *ERC20CustodyTestTransactorSession) TestForwardCallToReceiveERC20ThroughCustodyFailsIfReceiverIsZeroAddress() (*types.Transaction, error) { + return _ERC20CustodyTest.Contract.TestForwardCallToReceiveERC20ThroughCustodyFailsIfReceiverIsZeroAddress(&_ERC20CustodyTest.TransactOpts) +} + +// TestForwardCallToReceiveERC20ThroughCustodyFailsIfSenderIsNotWithdrawer is a paid mutator transaction binding the contract method 0x3ee92923. +// +// Solidity: function testForwardCallToReceiveERC20ThroughCustodyFailsIfSenderIsNotWithdrawer() returns() +func (_ERC20CustodyTest *ERC20CustodyTestTransactor) TestForwardCallToReceiveERC20ThroughCustodyFailsIfSenderIsNotWithdrawer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _ERC20CustodyTest.contract.Transact(opts, "testForwardCallToReceiveERC20ThroughCustodyFailsIfSenderIsNotWithdrawer") +} + +// TestForwardCallToReceiveERC20ThroughCustodyFailsIfSenderIsNotWithdrawer is a paid mutator transaction binding the contract method 0x3ee92923. +// +// Solidity: function testForwardCallToReceiveERC20ThroughCustodyFailsIfSenderIsNotWithdrawer() returns() +func (_ERC20CustodyTest *ERC20CustodyTestSession) TestForwardCallToReceiveERC20ThroughCustodyFailsIfSenderIsNotWithdrawer() (*types.Transaction, error) { + return _ERC20CustodyTest.Contract.TestForwardCallToReceiveERC20ThroughCustodyFailsIfSenderIsNotWithdrawer(&_ERC20CustodyTest.TransactOpts) +} + +// TestForwardCallToReceiveERC20ThroughCustodyFailsIfSenderIsNotWithdrawer is a paid mutator transaction binding the contract method 0x3ee92923. +// +// Solidity: function testForwardCallToReceiveERC20ThroughCustodyFailsIfSenderIsNotWithdrawer() returns() +func (_ERC20CustodyTest *ERC20CustodyTestTransactorSession) TestForwardCallToReceiveERC20ThroughCustodyFailsIfSenderIsNotWithdrawer() (*types.Transaction, error) { + return _ERC20CustodyTest.Contract.TestForwardCallToReceiveERC20ThroughCustodyFailsIfSenderIsNotWithdrawer(&_ERC20CustodyTest.TransactOpts) +} + +// TestForwardCallToReceiveERC20ThroughCustodyTogglePause is a paid mutator transaction binding the contract method 0xc713f827. +// +// Solidity: function testForwardCallToReceiveERC20ThroughCustodyTogglePause() returns() +func (_ERC20CustodyTest *ERC20CustodyTestTransactor) TestForwardCallToReceiveERC20ThroughCustodyTogglePause(opts *bind.TransactOpts) (*types.Transaction, error) { + return _ERC20CustodyTest.contract.Transact(opts, "testForwardCallToReceiveERC20ThroughCustodyTogglePause") +} + +// TestForwardCallToReceiveERC20ThroughCustodyTogglePause is a paid mutator transaction binding the contract method 0xc713f827. +// +// Solidity: function testForwardCallToReceiveERC20ThroughCustodyTogglePause() returns() +func (_ERC20CustodyTest *ERC20CustodyTestSession) TestForwardCallToReceiveERC20ThroughCustodyTogglePause() (*types.Transaction, error) { + return _ERC20CustodyTest.Contract.TestForwardCallToReceiveERC20ThroughCustodyTogglePause(&_ERC20CustodyTest.TransactOpts) +} + +// TestForwardCallToReceiveERC20ThroughCustodyTogglePause is a paid mutator transaction binding the contract method 0xc713f827. +// +// Solidity: function testForwardCallToReceiveERC20ThroughCustodyTogglePause() returns() +func (_ERC20CustodyTest *ERC20CustodyTestTransactorSession) TestForwardCallToReceiveERC20ThroughCustodyTogglePause() (*types.Transaction, error) { + return _ERC20CustodyTest.Contract.TestForwardCallToReceiveERC20ThroughCustodyTogglePause(&_ERC20CustodyTest.TransactOpts) +} + +// TestForwardCallToReceiveNoParamsThroughCustody is a paid mutator transaction binding the contract method 0xa3f9d0e0. +// +// Solidity: function testForwardCallToReceiveNoParamsThroughCustody() returns() +func (_ERC20CustodyTest *ERC20CustodyTestTransactor) TestForwardCallToReceiveNoParamsThroughCustody(opts *bind.TransactOpts) (*types.Transaction, error) { + return _ERC20CustodyTest.contract.Transact(opts, "testForwardCallToReceiveNoParamsThroughCustody") +} + +// TestForwardCallToReceiveNoParamsThroughCustody is a paid mutator transaction binding the contract method 0xa3f9d0e0. +// +// Solidity: function testForwardCallToReceiveNoParamsThroughCustody() returns() +func (_ERC20CustodyTest *ERC20CustodyTestSession) TestForwardCallToReceiveNoParamsThroughCustody() (*types.Transaction, error) { + return _ERC20CustodyTest.Contract.TestForwardCallToReceiveNoParamsThroughCustody(&_ERC20CustodyTest.TransactOpts) +} + +// TestForwardCallToReceiveNoParamsThroughCustody is a paid mutator transaction binding the contract method 0xa3f9d0e0. +// +// Solidity: function testForwardCallToReceiveNoParamsThroughCustody() returns() +func (_ERC20CustodyTest *ERC20CustodyTestTransactorSession) TestForwardCallToReceiveNoParamsThroughCustody() (*types.Transaction, error) { + return _ERC20CustodyTest.Contract.TestForwardCallToReceiveNoParamsThroughCustody(&_ERC20CustodyTest.TransactOpts) +} + +// TestNewCustodyFailsIfAddressesAreZero is a paid mutator transaction binding the contract method 0x4b5838d2. +// +// Solidity: function testNewCustodyFailsIfAddressesAreZero() returns() +func (_ERC20CustodyTest *ERC20CustodyTestTransactor) TestNewCustodyFailsIfAddressesAreZero(opts *bind.TransactOpts) (*types.Transaction, error) { + return _ERC20CustodyTest.contract.Transact(opts, "testNewCustodyFailsIfAddressesAreZero") +} + +// TestNewCustodyFailsIfAddressesAreZero is a paid mutator transaction binding the contract method 0x4b5838d2. +// +// Solidity: function testNewCustodyFailsIfAddressesAreZero() returns() +func (_ERC20CustodyTest *ERC20CustodyTestSession) TestNewCustodyFailsIfAddressesAreZero() (*types.Transaction, error) { + return _ERC20CustodyTest.Contract.TestNewCustodyFailsIfAddressesAreZero(&_ERC20CustodyTest.TransactOpts) +} + +// TestNewCustodyFailsIfAddressesAreZero is a paid mutator transaction binding the contract method 0x4b5838d2. +// +// Solidity: function testNewCustodyFailsIfAddressesAreZero() returns() +func (_ERC20CustodyTest *ERC20CustodyTestTransactorSession) TestNewCustodyFailsIfAddressesAreZero() (*types.Transaction, error) { + return _ERC20CustodyTest.Contract.TestNewCustodyFailsIfAddressesAreZero(&_ERC20CustodyTest.TransactOpts) +} + +// TestWithdrawAndRevertThroughCustody is a paid mutator transaction binding the contract method 0x71149c94. +// +// Solidity: function testWithdrawAndRevertThroughCustody() returns() +func (_ERC20CustodyTest *ERC20CustodyTestTransactor) TestWithdrawAndRevertThroughCustody(opts *bind.TransactOpts) (*types.Transaction, error) { + return _ERC20CustodyTest.contract.Transact(opts, "testWithdrawAndRevertThroughCustody") +} + +// TestWithdrawAndRevertThroughCustody is a paid mutator transaction binding the contract method 0x71149c94. +// +// Solidity: function testWithdrawAndRevertThroughCustody() returns() +func (_ERC20CustodyTest *ERC20CustodyTestSession) TestWithdrawAndRevertThroughCustody() (*types.Transaction, error) { + return _ERC20CustodyTest.Contract.TestWithdrawAndRevertThroughCustody(&_ERC20CustodyTest.TransactOpts) +} + +// TestWithdrawAndRevertThroughCustody is a paid mutator transaction binding the contract method 0x71149c94. +// +// Solidity: function testWithdrawAndRevertThroughCustody() returns() +func (_ERC20CustodyTest *ERC20CustodyTestTransactorSession) TestWithdrawAndRevertThroughCustody() (*types.Transaction, error) { + return _ERC20CustodyTest.Contract.TestWithdrawAndRevertThroughCustody(&_ERC20CustodyTest.TransactOpts) +} + +// TestWithdrawAndRevertThroughCustodyFailsIfAmountIs0 is a paid mutator transaction binding the contract method 0xeb1ce7f9. +// +// Solidity: function testWithdrawAndRevertThroughCustodyFailsIfAmountIs0() returns() +func (_ERC20CustodyTest *ERC20CustodyTestTransactor) TestWithdrawAndRevertThroughCustodyFailsIfAmountIs0(opts *bind.TransactOpts) (*types.Transaction, error) { + return _ERC20CustodyTest.contract.Transact(opts, "testWithdrawAndRevertThroughCustodyFailsIfAmountIs0") +} + +// TestWithdrawAndRevertThroughCustodyFailsIfAmountIs0 is a paid mutator transaction binding the contract method 0xeb1ce7f9. +// +// Solidity: function testWithdrawAndRevertThroughCustodyFailsIfAmountIs0() returns() +func (_ERC20CustodyTest *ERC20CustodyTestSession) TestWithdrawAndRevertThroughCustodyFailsIfAmountIs0() (*types.Transaction, error) { + return _ERC20CustodyTest.Contract.TestWithdrawAndRevertThroughCustodyFailsIfAmountIs0(&_ERC20CustodyTest.TransactOpts) +} + +// TestWithdrawAndRevertThroughCustodyFailsIfAmountIs0 is a paid mutator transaction binding the contract method 0xeb1ce7f9. +// +// Solidity: function testWithdrawAndRevertThroughCustodyFailsIfAmountIs0() returns() +func (_ERC20CustodyTest *ERC20CustodyTestTransactorSession) TestWithdrawAndRevertThroughCustodyFailsIfAmountIs0() (*types.Transaction, error) { + return _ERC20CustodyTest.Contract.TestWithdrawAndRevertThroughCustodyFailsIfAmountIs0(&_ERC20CustodyTest.TransactOpts) +} + +// TestWithdrawAndRevertThroughCustodyFailsIfReceiverIsZeroAddress is a paid mutator transaction binding the contract method 0x7e91c50f. +// +// Solidity: function testWithdrawAndRevertThroughCustodyFailsIfReceiverIsZeroAddress() returns() +func (_ERC20CustodyTest *ERC20CustodyTestTransactor) TestWithdrawAndRevertThroughCustodyFailsIfReceiverIsZeroAddress(opts *bind.TransactOpts) (*types.Transaction, error) { + return _ERC20CustodyTest.contract.Transact(opts, "testWithdrawAndRevertThroughCustodyFailsIfReceiverIsZeroAddress") +} + +// TestWithdrawAndRevertThroughCustodyFailsIfReceiverIsZeroAddress is a paid mutator transaction binding the contract method 0x7e91c50f. +// +// Solidity: function testWithdrawAndRevertThroughCustodyFailsIfReceiverIsZeroAddress() returns() +func (_ERC20CustodyTest *ERC20CustodyTestSession) TestWithdrawAndRevertThroughCustodyFailsIfReceiverIsZeroAddress() (*types.Transaction, error) { + return _ERC20CustodyTest.Contract.TestWithdrawAndRevertThroughCustodyFailsIfReceiverIsZeroAddress(&_ERC20CustodyTest.TransactOpts) +} + +// TestWithdrawAndRevertThroughCustodyFailsIfReceiverIsZeroAddress is a paid mutator transaction binding the contract method 0x7e91c50f. +// +// Solidity: function testWithdrawAndRevertThroughCustodyFailsIfReceiverIsZeroAddress() returns() +func (_ERC20CustodyTest *ERC20CustodyTestTransactorSession) TestWithdrawAndRevertThroughCustodyFailsIfReceiverIsZeroAddress() (*types.Transaction, error) { + return _ERC20CustodyTest.Contract.TestWithdrawAndRevertThroughCustodyFailsIfReceiverIsZeroAddress(&_ERC20CustodyTest.TransactOpts) +} + +// TestWithdrawAndRevertThroughCustodyFailsIfSenderIsNotWithdrawer is a paid mutator transaction binding the contract method 0xa4943deb. +// +// Solidity: function testWithdrawAndRevertThroughCustodyFailsIfSenderIsNotWithdrawer() returns() +func (_ERC20CustodyTest *ERC20CustodyTestTransactor) TestWithdrawAndRevertThroughCustodyFailsIfSenderIsNotWithdrawer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _ERC20CustodyTest.contract.Transact(opts, "testWithdrawAndRevertThroughCustodyFailsIfSenderIsNotWithdrawer") +} + +// TestWithdrawAndRevertThroughCustodyFailsIfSenderIsNotWithdrawer is a paid mutator transaction binding the contract method 0xa4943deb. +// +// Solidity: function testWithdrawAndRevertThroughCustodyFailsIfSenderIsNotWithdrawer() returns() +func (_ERC20CustodyTest *ERC20CustodyTestSession) TestWithdrawAndRevertThroughCustodyFailsIfSenderIsNotWithdrawer() (*types.Transaction, error) { + return _ERC20CustodyTest.Contract.TestWithdrawAndRevertThroughCustodyFailsIfSenderIsNotWithdrawer(&_ERC20CustodyTest.TransactOpts) +} + +// TestWithdrawAndRevertThroughCustodyFailsIfSenderIsNotWithdrawer is a paid mutator transaction binding the contract method 0xa4943deb. +// +// Solidity: function testWithdrawAndRevertThroughCustodyFailsIfSenderIsNotWithdrawer() returns() +func (_ERC20CustodyTest *ERC20CustodyTestTransactorSession) TestWithdrawAndRevertThroughCustodyFailsIfSenderIsNotWithdrawer() (*types.Transaction, error) { + return _ERC20CustodyTest.Contract.TestWithdrawAndRevertThroughCustodyFailsIfSenderIsNotWithdrawer(&_ERC20CustodyTest.TransactOpts) +} + +// TestWithdrawThroughCustody is a paid mutator transaction binding the contract method 0x3e73ecb4. +// +// Solidity: function testWithdrawThroughCustody() returns() +func (_ERC20CustodyTest *ERC20CustodyTestTransactor) TestWithdrawThroughCustody(opts *bind.TransactOpts) (*types.Transaction, error) { + return _ERC20CustodyTest.contract.Transact(opts, "testWithdrawThroughCustody") +} + +// TestWithdrawThroughCustody is a paid mutator transaction binding the contract method 0x3e73ecb4. +// +// Solidity: function testWithdrawThroughCustody() returns() +func (_ERC20CustodyTest *ERC20CustodyTestSession) TestWithdrawThroughCustody() (*types.Transaction, error) { + return _ERC20CustodyTest.Contract.TestWithdrawThroughCustody(&_ERC20CustodyTest.TransactOpts) +} + +// TestWithdrawThroughCustody is a paid mutator transaction binding the contract method 0x3e73ecb4. +// +// Solidity: function testWithdrawThroughCustody() returns() +func (_ERC20CustodyTest *ERC20CustodyTestTransactorSession) TestWithdrawThroughCustody() (*types.Transaction, error) { + return _ERC20CustodyTest.Contract.TestWithdrawThroughCustody(&_ERC20CustodyTest.TransactOpts) +} + +// TestWithdrawThroughCustodyFailsIfSenderIsNotWithdrawer is a paid mutator transaction binding the contract method 0xfe8e5f1b. +// +// Solidity: function testWithdrawThroughCustodyFailsIfSenderIsNotWithdrawer() returns() +func (_ERC20CustodyTest *ERC20CustodyTestTransactor) TestWithdrawThroughCustodyFailsIfSenderIsNotWithdrawer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _ERC20CustodyTest.contract.Transact(opts, "testWithdrawThroughCustodyFailsIfSenderIsNotWithdrawer") +} + +// TestWithdrawThroughCustodyFailsIfSenderIsNotWithdrawer is a paid mutator transaction binding the contract method 0xfe8e5f1b. +// +// Solidity: function testWithdrawThroughCustodyFailsIfSenderIsNotWithdrawer() returns() +func (_ERC20CustodyTest *ERC20CustodyTestSession) TestWithdrawThroughCustodyFailsIfSenderIsNotWithdrawer() (*types.Transaction, error) { + return _ERC20CustodyTest.Contract.TestWithdrawThroughCustodyFailsIfSenderIsNotWithdrawer(&_ERC20CustodyTest.TransactOpts) +} + +// TestWithdrawThroughCustodyFailsIfSenderIsNotWithdrawer is a paid mutator transaction binding the contract method 0xfe8e5f1b. +// +// Solidity: function testWithdrawThroughCustodyFailsIfSenderIsNotWithdrawer() returns() +func (_ERC20CustodyTest *ERC20CustodyTestTransactorSession) TestWithdrawThroughCustodyFailsIfSenderIsNotWithdrawer() (*types.Transaction, error) { + return _ERC20CustodyTest.Contract.TestWithdrawThroughCustodyFailsIfSenderIsNotWithdrawer(&_ERC20CustodyTest.TransactOpts) +} + +// ERC20CustodyTestCallIterator is returned from FilterCall and is used to iterate over the raw logs and unpacked data for Call events raised by the ERC20CustodyTest contract. +type ERC20CustodyTestCallIterator struct { + Event *ERC20CustodyTestCall // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *ERC20CustodyTestCallIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(ERC20CustodyTestCall) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(ERC20CustodyTestCall) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *ERC20CustodyTestCallIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *ERC20CustodyTestCallIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// ERC20CustodyTestCall represents a Call event raised by the ERC20CustodyTest contract. +type ERC20CustodyTestCall struct { + Sender common.Address + Receiver common.Address + Payload []byte + Raw types.Log // Blockchain specific contextual infos +} + +// FilterCall is a free log retrieval operation binding the contract event 0x2a21062ee9199c2e205622999eeb7c3da73153674f36a0acd3f74fa6af67bde3. +// +// Solidity: event Call(address indexed sender, address indexed receiver, bytes payload) +func (_ERC20CustodyTest *ERC20CustodyTestFilterer) FilterCall(opts *bind.FilterOpts, sender []common.Address, receiver []common.Address) (*ERC20CustodyTestCallIterator, error) { + + var senderRule []interface{} + for _, senderItem := range sender { + senderRule = append(senderRule, senderItem) + } + var receiverRule []interface{} + for _, receiverItem := range receiver { + receiverRule = append(receiverRule, receiverItem) + } + + logs, sub, err := _ERC20CustodyTest.contract.FilterLogs(opts, "Call", senderRule, receiverRule) + if err != nil { + return nil, err + } + return &ERC20CustodyTestCallIterator{contract: _ERC20CustodyTest.contract, event: "Call", logs: logs, sub: sub}, nil +} + +// WatchCall is a free log subscription operation binding the contract event 0x2a21062ee9199c2e205622999eeb7c3da73153674f36a0acd3f74fa6af67bde3. +// +// Solidity: event Call(address indexed sender, address indexed receiver, bytes payload) +func (_ERC20CustodyTest *ERC20CustodyTestFilterer) WatchCall(opts *bind.WatchOpts, sink chan<- *ERC20CustodyTestCall, sender []common.Address, receiver []common.Address) (event.Subscription, error) { + + var senderRule []interface{} + for _, senderItem := range sender { + senderRule = append(senderRule, senderItem) + } + var receiverRule []interface{} + for _, receiverItem := range receiver { + receiverRule = append(receiverRule, receiverItem) + } + + logs, sub, err := _ERC20CustodyTest.contract.WatchLogs(opts, "Call", senderRule, receiverRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(ERC20CustodyTestCall) + if err := _ERC20CustodyTest.contract.UnpackLog(event, "Call", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseCall is a log parse operation binding the contract event 0x2a21062ee9199c2e205622999eeb7c3da73153674f36a0acd3f74fa6af67bde3. +// +// Solidity: event Call(address indexed sender, address indexed receiver, bytes payload) +func (_ERC20CustodyTest *ERC20CustodyTestFilterer) ParseCall(log types.Log) (*ERC20CustodyTestCall, error) { + event := new(ERC20CustodyTestCall) + if err := _ERC20CustodyTest.contract.UnpackLog(event, "Call", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// ERC20CustodyTestDepositIterator is returned from FilterDeposit and is used to iterate over the raw logs and unpacked data for Deposit events raised by the ERC20CustodyTest contract. +type ERC20CustodyTestDepositIterator struct { + Event *ERC20CustodyTestDeposit // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *ERC20CustodyTestDepositIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(ERC20CustodyTestDeposit) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(ERC20CustodyTestDeposit) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *ERC20CustodyTestDepositIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *ERC20CustodyTestDepositIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// ERC20CustodyTestDeposit represents a Deposit event raised by the ERC20CustodyTest contract. +type ERC20CustodyTestDeposit struct { + Sender common.Address + Receiver common.Address + Amount *big.Int + Asset common.Address + Payload []byte + Raw types.Log // Blockchain specific contextual infos +} + +// FilterDeposit is a free log retrieval operation binding the contract event 0x2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a4. +// +// Solidity: event Deposit(address indexed sender, address indexed receiver, uint256 amount, address asset, bytes payload) +func (_ERC20CustodyTest *ERC20CustodyTestFilterer) FilterDeposit(opts *bind.FilterOpts, sender []common.Address, receiver []common.Address) (*ERC20CustodyTestDepositIterator, error) { + + var senderRule []interface{} + for _, senderItem := range sender { + senderRule = append(senderRule, senderItem) + } + var receiverRule []interface{} + for _, receiverItem := range receiver { + receiverRule = append(receiverRule, receiverItem) + } + + logs, sub, err := _ERC20CustodyTest.contract.FilterLogs(opts, "Deposit", senderRule, receiverRule) + if err != nil { + return nil, err + } + return &ERC20CustodyTestDepositIterator{contract: _ERC20CustodyTest.contract, event: "Deposit", logs: logs, sub: sub}, nil +} + +// WatchDeposit is a free log subscription operation binding the contract event 0x2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a4. +// +// Solidity: event Deposit(address indexed sender, address indexed receiver, uint256 amount, address asset, bytes payload) +func (_ERC20CustodyTest *ERC20CustodyTestFilterer) WatchDeposit(opts *bind.WatchOpts, sink chan<- *ERC20CustodyTestDeposit, sender []common.Address, receiver []common.Address) (event.Subscription, error) { + + var senderRule []interface{} + for _, senderItem := range sender { + senderRule = append(senderRule, senderItem) + } + var receiverRule []interface{} + for _, receiverItem := range receiver { + receiverRule = append(receiverRule, receiverItem) + } + + logs, sub, err := _ERC20CustodyTest.contract.WatchLogs(opts, "Deposit", senderRule, receiverRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(ERC20CustodyTestDeposit) + if err := _ERC20CustodyTest.contract.UnpackLog(event, "Deposit", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseDeposit is a log parse operation binding the contract event 0x2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a4. +// +// Solidity: event Deposit(address indexed sender, address indexed receiver, uint256 amount, address asset, bytes payload) +func (_ERC20CustodyTest *ERC20CustodyTestFilterer) ParseDeposit(log types.Log) (*ERC20CustodyTestDeposit, error) { + event := new(ERC20CustodyTestDeposit) + if err := _ERC20CustodyTest.contract.UnpackLog(event, "Deposit", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// ERC20CustodyTestExecutedIterator is returned from FilterExecuted and is used to iterate over the raw logs and unpacked data for Executed events raised by the ERC20CustodyTest contract. +type ERC20CustodyTestExecutedIterator struct { + Event *ERC20CustodyTestExecuted // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *ERC20CustodyTestExecutedIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(ERC20CustodyTestExecuted) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(ERC20CustodyTestExecuted) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *ERC20CustodyTestExecutedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *ERC20CustodyTestExecutedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// ERC20CustodyTestExecuted represents a Executed event raised by the ERC20CustodyTest contract. +type ERC20CustodyTestExecuted struct { + Destination common.Address + Value *big.Int + Data []byte + Raw types.Log // Blockchain specific contextual infos +} + +// FilterExecuted is a free log retrieval operation binding the contract event 0xcaf938de11c367272220bfd1d2baa99ca46665e7bc4d85f00adb51b90fe1fa9f. +// +// Solidity: event Executed(address indexed destination, uint256 value, bytes data) +func (_ERC20CustodyTest *ERC20CustodyTestFilterer) FilterExecuted(opts *bind.FilterOpts, destination []common.Address) (*ERC20CustodyTestExecutedIterator, error) { + + var destinationRule []interface{} + for _, destinationItem := range destination { + destinationRule = append(destinationRule, destinationItem) + } + + logs, sub, err := _ERC20CustodyTest.contract.FilterLogs(opts, "Executed", destinationRule) + if err != nil { + return nil, err + } + return &ERC20CustodyTestExecutedIterator{contract: _ERC20CustodyTest.contract, event: "Executed", logs: logs, sub: sub}, nil +} + +// WatchExecuted is a free log subscription operation binding the contract event 0xcaf938de11c367272220bfd1d2baa99ca46665e7bc4d85f00adb51b90fe1fa9f. +// +// Solidity: event Executed(address indexed destination, uint256 value, bytes data) +func (_ERC20CustodyTest *ERC20CustodyTestFilterer) WatchExecuted(opts *bind.WatchOpts, sink chan<- *ERC20CustodyTestExecuted, destination []common.Address) (event.Subscription, error) { + + var destinationRule []interface{} + for _, destinationItem := range destination { + destinationRule = append(destinationRule, destinationItem) + } + + logs, sub, err := _ERC20CustodyTest.contract.WatchLogs(opts, "Executed", destinationRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(ERC20CustodyTestExecuted) + if err := _ERC20CustodyTest.contract.UnpackLog(event, "Executed", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseExecuted is a log parse operation binding the contract event 0xcaf938de11c367272220bfd1d2baa99ca46665e7bc4d85f00adb51b90fe1fa9f. +// +// Solidity: event Executed(address indexed destination, uint256 value, bytes data) +func (_ERC20CustodyTest *ERC20CustodyTestFilterer) ParseExecuted(log types.Log) (*ERC20CustodyTestExecuted, error) { + event := new(ERC20CustodyTestExecuted) + if err := _ERC20CustodyTest.contract.UnpackLog(event, "Executed", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// ERC20CustodyTestExecutedWithERC20Iterator is returned from FilterExecutedWithERC20 and is used to iterate over the raw logs and unpacked data for ExecutedWithERC20 events raised by the ERC20CustodyTest contract. +type ERC20CustodyTestExecutedWithERC20Iterator struct { + Event *ERC20CustodyTestExecutedWithERC20 // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *ERC20CustodyTestExecutedWithERC20Iterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(ERC20CustodyTestExecutedWithERC20) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(ERC20CustodyTestExecutedWithERC20) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *ERC20CustodyTestExecutedWithERC20Iterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *ERC20CustodyTestExecutedWithERC20Iterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// ERC20CustodyTestExecutedWithERC20 represents a ExecutedWithERC20 event raised by the ERC20CustodyTest contract. +type ERC20CustodyTestExecutedWithERC20 struct { + Token common.Address + To common.Address + Amount *big.Int + Data []byte + Raw types.Log // Blockchain specific contextual infos +} + +// FilterExecutedWithERC20 is a free log retrieval operation binding the contract event 0x29c40793bffd84cb810179f15d1ceec72bc7f0785514c668ba36645cf99b7382. +// +// Solidity: event ExecutedWithERC20(address indexed token, address indexed to, uint256 amount, bytes data) +func (_ERC20CustodyTest *ERC20CustodyTestFilterer) FilterExecutedWithERC20(opts *bind.FilterOpts, token []common.Address, to []common.Address) (*ERC20CustodyTestExecutedWithERC20Iterator, error) { + + var tokenRule []interface{} + for _, tokenItem := range token { + tokenRule = append(tokenRule, tokenItem) + } + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _ERC20CustodyTest.contract.FilterLogs(opts, "ExecutedWithERC20", tokenRule, toRule) + if err != nil { + return nil, err + } + return &ERC20CustodyTestExecutedWithERC20Iterator{contract: _ERC20CustodyTest.contract, event: "ExecutedWithERC20", logs: logs, sub: sub}, nil +} + +// WatchExecutedWithERC20 is a free log subscription operation binding the contract event 0x29c40793bffd84cb810179f15d1ceec72bc7f0785514c668ba36645cf99b7382. +// +// Solidity: event ExecutedWithERC20(address indexed token, address indexed to, uint256 amount, bytes data) +func (_ERC20CustodyTest *ERC20CustodyTestFilterer) WatchExecutedWithERC20(opts *bind.WatchOpts, sink chan<- *ERC20CustodyTestExecutedWithERC20, token []common.Address, to []common.Address) (event.Subscription, error) { + + var tokenRule []interface{} + for _, tokenItem := range token { + tokenRule = append(tokenRule, tokenItem) + } + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _ERC20CustodyTest.contract.WatchLogs(opts, "ExecutedWithERC20", tokenRule, toRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(ERC20CustodyTestExecutedWithERC20) + if err := _ERC20CustodyTest.contract.UnpackLog(event, "ExecutedWithERC20", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseExecutedWithERC20 is a log parse operation binding the contract event 0x29c40793bffd84cb810179f15d1ceec72bc7f0785514c668ba36645cf99b7382. +// +// Solidity: event ExecutedWithERC20(address indexed token, address indexed to, uint256 amount, bytes data) +func (_ERC20CustodyTest *ERC20CustodyTestFilterer) ParseExecutedWithERC20(log types.Log) (*ERC20CustodyTestExecutedWithERC20, error) { + event := new(ERC20CustodyTestExecutedWithERC20) + if err := _ERC20CustodyTest.contract.UnpackLog(event, "ExecutedWithERC20", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// ERC20CustodyTestReceivedERC20Iterator is returned from FilterReceivedERC20 and is used to iterate over the raw logs and unpacked data for ReceivedERC20 events raised by the ERC20CustodyTest contract. +type ERC20CustodyTestReceivedERC20Iterator struct { + Event *ERC20CustodyTestReceivedERC20 // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *ERC20CustodyTestReceivedERC20Iterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(ERC20CustodyTestReceivedERC20) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(ERC20CustodyTestReceivedERC20) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *ERC20CustodyTestReceivedERC20Iterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *ERC20CustodyTestReceivedERC20Iterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// ERC20CustodyTestReceivedERC20 represents a ReceivedERC20 event raised by the ERC20CustodyTest contract. +type ERC20CustodyTestReceivedERC20 struct { + Sender common.Address + Amount *big.Int + Token common.Address + Destination common.Address + Raw types.Log // Blockchain specific contextual infos +} + +// FilterReceivedERC20 is a free log retrieval operation binding the contract event 0x2b58128f24a9f59127cc5b5430d70542b22220f2d9adaa86e442b816ab98af60. +// +// Solidity: event ReceivedERC20(address sender, uint256 amount, address token, address destination) +func (_ERC20CustodyTest *ERC20CustodyTestFilterer) FilterReceivedERC20(opts *bind.FilterOpts) (*ERC20CustodyTestReceivedERC20Iterator, error) { + + logs, sub, err := _ERC20CustodyTest.contract.FilterLogs(opts, "ReceivedERC20") + if err != nil { + return nil, err + } + return &ERC20CustodyTestReceivedERC20Iterator{contract: _ERC20CustodyTest.contract, event: "ReceivedERC20", logs: logs, sub: sub}, nil +} + +// WatchReceivedERC20 is a free log subscription operation binding the contract event 0x2b58128f24a9f59127cc5b5430d70542b22220f2d9adaa86e442b816ab98af60. +// +// Solidity: event ReceivedERC20(address sender, uint256 amount, address token, address destination) +func (_ERC20CustodyTest *ERC20CustodyTestFilterer) WatchReceivedERC20(opts *bind.WatchOpts, sink chan<- *ERC20CustodyTestReceivedERC20) (event.Subscription, error) { + + logs, sub, err := _ERC20CustodyTest.contract.WatchLogs(opts, "ReceivedERC20") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(ERC20CustodyTestReceivedERC20) + if err := _ERC20CustodyTest.contract.UnpackLog(event, "ReceivedERC20", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseReceivedERC20 is a log parse operation binding the contract event 0x2b58128f24a9f59127cc5b5430d70542b22220f2d9adaa86e442b816ab98af60. +// +// Solidity: event ReceivedERC20(address sender, uint256 amount, address token, address destination) +func (_ERC20CustodyTest *ERC20CustodyTestFilterer) ParseReceivedERC20(log types.Log) (*ERC20CustodyTestReceivedERC20, error) { + event := new(ERC20CustodyTestReceivedERC20) + if err := _ERC20CustodyTest.contract.UnpackLog(event, "ReceivedERC20", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// ERC20CustodyTestReceivedNoParamsIterator is returned from FilterReceivedNoParams and is used to iterate over the raw logs and unpacked data for ReceivedNoParams events raised by the ERC20CustodyTest contract. +type ERC20CustodyTestReceivedNoParamsIterator struct { + Event *ERC20CustodyTestReceivedNoParams // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *ERC20CustodyTestReceivedNoParamsIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(ERC20CustodyTestReceivedNoParams) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(ERC20CustodyTestReceivedNoParams) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *ERC20CustodyTestReceivedNoParamsIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *ERC20CustodyTestReceivedNoParamsIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// ERC20CustodyTestReceivedNoParams represents a ReceivedNoParams event raised by the ERC20CustodyTest contract. +type ERC20CustodyTestReceivedNoParams struct { + Sender common.Address + Raw types.Log // Blockchain specific contextual infos +} + +// FilterReceivedNoParams is a free log retrieval operation binding the contract event 0xbcaadb46b82a48af60b608f58959ae6b8310d1b0a0d094c2e9ec3208ed39f2a0. +// +// Solidity: event ReceivedNoParams(address sender) +func (_ERC20CustodyTest *ERC20CustodyTestFilterer) FilterReceivedNoParams(opts *bind.FilterOpts) (*ERC20CustodyTestReceivedNoParamsIterator, error) { + + logs, sub, err := _ERC20CustodyTest.contract.FilterLogs(opts, "ReceivedNoParams") + if err != nil { + return nil, err + } + return &ERC20CustodyTestReceivedNoParamsIterator{contract: _ERC20CustodyTest.contract, event: "ReceivedNoParams", logs: logs, sub: sub}, nil +} + +// WatchReceivedNoParams is a free log subscription operation binding the contract event 0xbcaadb46b82a48af60b608f58959ae6b8310d1b0a0d094c2e9ec3208ed39f2a0. +// +// Solidity: event ReceivedNoParams(address sender) +func (_ERC20CustodyTest *ERC20CustodyTestFilterer) WatchReceivedNoParams(opts *bind.WatchOpts, sink chan<- *ERC20CustodyTestReceivedNoParams) (event.Subscription, error) { + + logs, sub, err := _ERC20CustodyTest.contract.WatchLogs(opts, "ReceivedNoParams") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(ERC20CustodyTestReceivedNoParams) + if err := _ERC20CustodyTest.contract.UnpackLog(event, "ReceivedNoParams", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseReceivedNoParams is a log parse operation binding the contract event 0xbcaadb46b82a48af60b608f58959ae6b8310d1b0a0d094c2e9ec3208ed39f2a0. +// +// Solidity: event ReceivedNoParams(address sender) +func (_ERC20CustodyTest *ERC20CustodyTestFilterer) ParseReceivedNoParams(log types.Log) (*ERC20CustodyTestReceivedNoParams, error) { + event := new(ERC20CustodyTestReceivedNoParams) + if err := _ERC20CustodyTest.contract.UnpackLog(event, "ReceivedNoParams", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// ERC20CustodyTestReceivedNonPayableIterator is returned from FilterReceivedNonPayable and is used to iterate over the raw logs and unpacked data for ReceivedNonPayable events raised by the ERC20CustodyTest contract. +type ERC20CustodyTestReceivedNonPayableIterator struct { + Event *ERC20CustodyTestReceivedNonPayable // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *ERC20CustodyTestReceivedNonPayableIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(ERC20CustodyTestReceivedNonPayable) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(ERC20CustodyTestReceivedNonPayable) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *ERC20CustodyTestReceivedNonPayableIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *ERC20CustodyTestReceivedNonPayableIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// ERC20CustodyTestReceivedNonPayable represents a ReceivedNonPayable event raised by the ERC20CustodyTest contract. +type ERC20CustodyTestReceivedNonPayable struct { + Sender common.Address + Strs []string + Nums []*big.Int + Flag bool + Raw types.Log // Blockchain specific contextual infos +} + +// FilterReceivedNonPayable is a free log retrieval operation binding the contract event 0x74a53cd528a921fca7dbdee62f86819051d3cc98f214951f4238e8843f20b146. +// +// Solidity: event ReceivedNonPayable(address sender, string[] strs, uint256[] nums, bool flag) +func (_ERC20CustodyTest *ERC20CustodyTestFilterer) FilterReceivedNonPayable(opts *bind.FilterOpts) (*ERC20CustodyTestReceivedNonPayableIterator, error) { + + logs, sub, err := _ERC20CustodyTest.contract.FilterLogs(opts, "ReceivedNonPayable") + if err != nil { + return nil, err + } + return &ERC20CustodyTestReceivedNonPayableIterator{contract: _ERC20CustodyTest.contract, event: "ReceivedNonPayable", logs: logs, sub: sub}, nil +} + +// WatchReceivedNonPayable is a free log subscription operation binding the contract event 0x74a53cd528a921fca7dbdee62f86819051d3cc98f214951f4238e8843f20b146. +// +// Solidity: event ReceivedNonPayable(address sender, string[] strs, uint256[] nums, bool flag) +func (_ERC20CustodyTest *ERC20CustodyTestFilterer) WatchReceivedNonPayable(opts *bind.WatchOpts, sink chan<- *ERC20CustodyTestReceivedNonPayable) (event.Subscription, error) { + + logs, sub, err := _ERC20CustodyTest.contract.WatchLogs(opts, "ReceivedNonPayable") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(ERC20CustodyTestReceivedNonPayable) + if err := _ERC20CustodyTest.contract.UnpackLog(event, "ReceivedNonPayable", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseReceivedNonPayable is a log parse operation binding the contract event 0x74a53cd528a921fca7dbdee62f86819051d3cc98f214951f4238e8843f20b146. +// +// Solidity: event ReceivedNonPayable(address sender, string[] strs, uint256[] nums, bool flag) +func (_ERC20CustodyTest *ERC20CustodyTestFilterer) ParseReceivedNonPayable(log types.Log) (*ERC20CustodyTestReceivedNonPayable, error) { + event := new(ERC20CustodyTestReceivedNonPayable) + if err := _ERC20CustodyTest.contract.UnpackLog(event, "ReceivedNonPayable", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// ERC20CustodyTestReceivedPayableIterator is returned from FilterReceivedPayable and is used to iterate over the raw logs and unpacked data for ReceivedPayable events raised by the ERC20CustodyTest contract. +type ERC20CustodyTestReceivedPayableIterator struct { + Event *ERC20CustodyTestReceivedPayable // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *ERC20CustodyTestReceivedPayableIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(ERC20CustodyTestReceivedPayable) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(ERC20CustodyTestReceivedPayable) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *ERC20CustodyTestReceivedPayableIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *ERC20CustodyTestReceivedPayableIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// ERC20CustodyTestReceivedPayable represents a ReceivedPayable event raised by the ERC20CustodyTest contract. +type ERC20CustodyTestReceivedPayable struct { + Sender common.Address + Value *big.Int + Str string + Num *big.Int + Flag bool + Raw types.Log // Blockchain specific contextual infos +} + +// FilterReceivedPayable is a free log retrieval operation binding the contract event 0x1f1ff1f5fb41346850b2f5c04e6c767e2f1c8a525c5c0c5cdb60cdf3ca5f62fa. +// +// Solidity: event ReceivedPayable(address sender, uint256 value, string str, uint256 num, bool flag) +func (_ERC20CustodyTest *ERC20CustodyTestFilterer) FilterReceivedPayable(opts *bind.FilterOpts) (*ERC20CustodyTestReceivedPayableIterator, error) { + + logs, sub, err := _ERC20CustodyTest.contract.FilterLogs(opts, "ReceivedPayable") + if err != nil { + return nil, err + } + return &ERC20CustodyTestReceivedPayableIterator{contract: _ERC20CustodyTest.contract, event: "ReceivedPayable", logs: logs, sub: sub}, nil +} + +// WatchReceivedPayable is a free log subscription operation binding the contract event 0x1f1ff1f5fb41346850b2f5c04e6c767e2f1c8a525c5c0c5cdb60cdf3ca5f62fa. +// +// Solidity: event ReceivedPayable(address sender, uint256 value, string str, uint256 num, bool flag) +func (_ERC20CustodyTest *ERC20CustodyTestFilterer) WatchReceivedPayable(opts *bind.WatchOpts, sink chan<- *ERC20CustodyTestReceivedPayable) (event.Subscription, error) { + + logs, sub, err := _ERC20CustodyTest.contract.WatchLogs(opts, "ReceivedPayable") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(ERC20CustodyTestReceivedPayable) + if err := _ERC20CustodyTest.contract.UnpackLog(event, "ReceivedPayable", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseReceivedPayable is a log parse operation binding the contract event 0x1f1ff1f5fb41346850b2f5c04e6c767e2f1c8a525c5c0c5cdb60cdf3ca5f62fa. +// +// Solidity: event ReceivedPayable(address sender, uint256 value, string str, uint256 num, bool flag) +func (_ERC20CustodyTest *ERC20CustodyTestFilterer) ParseReceivedPayable(log types.Log) (*ERC20CustodyTestReceivedPayable, error) { + event := new(ERC20CustodyTestReceivedPayable) + if err := _ERC20CustodyTest.contract.UnpackLog(event, "ReceivedPayable", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// ERC20CustodyTestReceivedRevertIterator is returned from FilterReceivedRevert and is used to iterate over the raw logs and unpacked data for ReceivedRevert events raised by the ERC20CustodyTest contract. +type ERC20CustodyTestReceivedRevertIterator struct { + Event *ERC20CustodyTestReceivedRevert // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *ERC20CustodyTestReceivedRevertIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(ERC20CustodyTestReceivedRevert) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(ERC20CustodyTestReceivedRevert) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *ERC20CustodyTestReceivedRevertIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *ERC20CustodyTestReceivedRevertIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// ERC20CustodyTestReceivedRevert represents a ReceivedRevert event raised by the ERC20CustodyTest contract. +type ERC20CustodyTestReceivedRevert struct { + Sender common.Address + Data []byte + Raw types.Log // Blockchain specific contextual infos +} + +// FilterReceivedRevert is a free log retrieval operation binding the contract event 0x0d3f65f00e631663aa85c96330b5c7a83bb29af3630c0063776f985edc3037aa. +// +// Solidity: event ReceivedRevert(address sender, bytes data) +func (_ERC20CustodyTest *ERC20CustodyTestFilterer) FilterReceivedRevert(opts *bind.FilterOpts) (*ERC20CustodyTestReceivedRevertIterator, error) { + + logs, sub, err := _ERC20CustodyTest.contract.FilterLogs(opts, "ReceivedRevert") + if err != nil { + return nil, err + } + return &ERC20CustodyTestReceivedRevertIterator{contract: _ERC20CustodyTest.contract, event: "ReceivedRevert", logs: logs, sub: sub}, nil +} + +// WatchReceivedRevert is a free log subscription operation binding the contract event 0x0d3f65f00e631663aa85c96330b5c7a83bb29af3630c0063776f985edc3037aa. +// +// Solidity: event ReceivedRevert(address sender, bytes data) +func (_ERC20CustodyTest *ERC20CustodyTestFilterer) WatchReceivedRevert(opts *bind.WatchOpts, sink chan<- *ERC20CustodyTestReceivedRevert) (event.Subscription, error) { + + logs, sub, err := _ERC20CustodyTest.contract.WatchLogs(opts, "ReceivedRevert") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(ERC20CustodyTestReceivedRevert) + if err := _ERC20CustodyTest.contract.UnpackLog(event, "ReceivedRevert", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseReceivedRevert is a log parse operation binding the contract event 0x0d3f65f00e631663aa85c96330b5c7a83bb29af3630c0063776f985edc3037aa. +// +// Solidity: event ReceivedRevert(address sender, bytes data) +func (_ERC20CustodyTest *ERC20CustodyTestFilterer) ParseReceivedRevert(log types.Log) (*ERC20CustodyTestReceivedRevert, error) { + event := new(ERC20CustodyTestReceivedRevert) + if err := _ERC20CustodyTest.contract.UnpackLog(event, "ReceivedRevert", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// ERC20CustodyTestRevertedIterator is returned from FilterReverted and is used to iterate over the raw logs and unpacked data for Reverted events raised by the ERC20CustodyTest contract. +type ERC20CustodyTestRevertedIterator struct { + Event *ERC20CustodyTestReverted // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *ERC20CustodyTestRevertedIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(ERC20CustodyTestReverted) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(ERC20CustodyTestReverted) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *ERC20CustodyTestRevertedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *ERC20CustodyTestRevertedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// ERC20CustodyTestReverted represents a Reverted event raised by the ERC20CustodyTest contract. +type ERC20CustodyTestReverted struct { + Destination common.Address + Value *big.Int + Data []byte + Raw types.Log // Blockchain specific contextual infos +} + +// FilterReverted is a free log retrieval operation binding the contract event 0xd5d7616b1678354a0dea9d7e57e6a090bff5babe9f8d6381fdbad16e89ba311c. +// +// Solidity: event Reverted(address indexed destination, uint256 value, bytes data) +func (_ERC20CustodyTest *ERC20CustodyTestFilterer) FilterReverted(opts *bind.FilterOpts, destination []common.Address) (*ERC20CustodyTestRevertedIterator, error) { + + var destinationRule []interface{} + for _, destinationItem := range destination { + destinationRule = append(destinationRule, destinationItem) + } + + logs, sub, err := _ERC20CustodyTest.contract.FilterLogs(opts, "Reverted", destinationRule) + if err != nil { + return nil, err + } + return &ERC20CustodyTestRevertedIterator{contract: _ERC20CustodyTest.contract, event: "Reverted", logs: logs, sub: sub}, nil +} + +// WatchReverted is a free log subscription operation binding the contract event 0xd5d7616b1678354a0dea9d7e57e6a090bff5babe9f8d6381fdbad16e89ba311c. +// +// Solidity: event Reverted(address indexed destination, uint256 value, bytes data) +func (_ERC20CustodyTest *ERC20CustodyTestFilterer) WatchReverted(opts *bind.WatchOpts, sink chan<- *ERC20CustodyTestReverted, destination []common.Address) (event.Subscription, error) { + + var destinationRule []interface{} + for _, destinationItem := range destination { + destinationRule = append(destinationRule, destinationItem) + } + + logs, sub, err := _ERC20CustodyTest.contract.WatchLogs(opts, "Reverted", destinationRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(ERC20CustodyTestReverted) + if err := _ERC20CustodyTest.contract.UnpackLog(event, "Reverted", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseReverted is a log parse operation binding the contract event 0xd5d7616b1678354a0dea9d7e57e6a090bff5babe9f8d6381fdbad16e89ba311c. +// +// Solidity: event Reverted(address indexed destination, uint256 value, bytes data) +func (_ERC20CustodyTest *ERC20CustodyTestFilterer) ParseReverted(log types.Log) (*ERC20CustodyTestReverted, error) { + event := new(ERC20CustodyTestReverted) + if err := _ERC20CustodyTest.contract.UnpackLog(event, "Reverted", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// ERC20CustodyTestRevertedWithERC20Iterator is returned from FilterRevertedWithERC20 and is used to iterate over the raw logs and unpacked data for RevertedWithERC20 events raised by the ERC20CustodyTest contract. +type ERC20CustodyTestRevertedWithERC20Iterator struct { + Event *ERC20CustodyTestRevertedWithERC20 // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *ERC20CustodyTestRevertedWithERC20Iterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(ERC20CustodyTestRevertedWithERC20) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(ERC20CustodyTestRevertedWithERC20) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *ERC20CustodyTestRevertedWithERC20Iterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *ERC20CustodyTestRevertedWithERC20Iterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// ERC20CustodyTestRevertedWithERC20 represents a RevertedWithERC20 event raised by the ERC20CustodyTest contract. +type ERC20CustodyTestRevertedWithERC20 struct { + Token common.Address + To common.Address + Amount *big.Int + Data []byte + Raw types.Log // Blockchain specific contextual infos +} + +// FilterRevertedWithERC20 is a free log retrieval operation binding the contract event 0x723fc7be2448075379e4fdf1e6bf5fead954d2668d2da05dcb44ccfec4beeda7. +// +// Solidity: event RevertedWithERC20(address indexed token, address indexed to, uint256 amount, bytes data) +func (_ERC20CustodyTest *ERC20CustodyTestFilterer) FilterRevertedWithERC20(opts *bind.FilterOpts, token []common.Address, to []common.Address) (*ERC20CustodyTestRevertedWithERC20Iterator, error) { + + var tokenRule []interface{} + for _, tokenItem := range token { + tokenRule = append(tokenRule, tokenItem) + } + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _ERC20CustodyTest.contract.FilterLogs(opts, "RevertedWithERC20", tokenRule, toRule) + if err != nil { + return nil, err + } + return &ERC20CustodyTestRevertedWithERC20Iterator{contract: _ERC20CustodyTest.contract, event: "RevertedWithERC20", logs: logs, sub: sub}, nil +} + +// WatchRevertedWithERC20 is a free log subscription operation binding the contract event 0x723fc7be2448075379e4fdf1e6bf5fead954d2668d2da05dcb44ccfec4beeda7. +// +// Solidity: event RevertedWithERC20(address indexed token, address indexed to, uint256 amount, bytes data) +func (_ERC20CustodyTest *ERC20CustodyTestFilterer) WatchRevertedWithERC20(opts *bind.WatchOpts, sink chan<- *ERC20CustodyTestRevertedWithERC20, token []common.Address, to []common.Address) (event.Subscription, error) { + + var tokenRule []interface{} + for _, tokenItem := range token { + tokenRule = append(tokenRule, tokenItem) + } + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _ERC20CustodyTest.contract.WatchLogs(opts, "RevertedWithERC20", tokenRule, toRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(ERC20CustodyTestRevertedWithERC20) + if err := _ERC20CustodyTest.contract.UnpackLog(event, "RevertedWithERC20", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseRevertedWithERC20 is a log parse operation binding the contract event 0x723fc7be2448075379e4fdf1e6bf5fead954d2668d2da05dcb44ccfec4beeda7. +// +// Solidity: event RevertedWithERC20(address indexed token, address indexed to, uint256 amount, bytes data) +func (_ERC20CustodyTest *ERC20CustodyTestFilterer) ParseRevertedWithERC20(log types.Log) (*ERC20CustodyTestRevertedWithERC20, error) { + event := new(ERC20CustodyTestRevertedWithERC20) + if err := _ERC20CustodyTest.contract.UnpackLog(event, "RevertedWithERC20", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// ERC20CustodyTestWithdrawIterator is returned from FilterWithdraw and is used to iterate over the raw logs and unpacked data for Withdraw events raised by the ERC20CustodyTest contract. +type ERC20CustodyTestWithdrawIterator struct { + Event *ERC20CustodyTestWithdraw // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *ERC20CustodyTestWithdrawIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(ERC20CustodyTestWithdraw) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(ERC20CustodyTestWithdraw) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *ERC20CustodyTestWithdrawIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *ERC20CustodyTestWithdrawIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// ERC20CustodyTestWithdraw represents a Withdraw event raised by the ERC20CustodyTest contract. +type ERC20CustodyTestWithdraw struct { + Token common.Address + To common.Address + Amount *big.Int + Raw types.Log // Blockchain specific contextual infos +} + +// FilterWithdraw is a free log retrieval operation binding the contract event 0x9b1bfa7fa9ee420a16e124f794c35ac9f90472acc99140eb2f6447c714cad8eb. +// +// Solidity: event Withdraw(address indexed token, address indexed to, uint256 amount) +func (_ERC20CustodyTest *ERC20CustodyTestFilterer) FilterWithdraw(opts *bind.FilterOpts, token []common.Address, to []common.Address) (*ERC20CustodyTestWithdrawIterator, error) { + + var tokenRule []interface{} + for _, tokenItem := range token { + tokenRule = append(tokenRule, tokenItem) + } + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _ERC20CustodyTest.contract.FilterLogs(opts, "Withdraw", tokenRule, toRule) + if err != nil { + return nil, err + } + return &ERC20CustodyTestWithdrawIterator{contract: _ERC20CustodyTest.contract, event: "Withdraw", logs: logs, sub: sub}, nil +} + +// WatchWithdraw is a free log subscription operation binding the contract event 0x9b1bfa7fa9ee420a16e124f794c35ac9f90472acc99140eb2f6447c714cad8eb. +// +// Solidity: event Withdraw(address indexed token, address indexed to, uint256 amount) +func (_ERC20CustodyTest *ERC20CustodyTestFilterer) WatchWithdraw(opts *bind.WatchOpts, sink chan<- *ERC20CustodyTestWithdraw, token []common.Address, to []common.Address) (event.Subscription, error) { + + var tokenRule []interface{} + for _, tokenItem := range token { + tokenRule = append(tokenRule, tokenItem) + } + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _ERC20CustodyTest.contract.WatchLogs(opts, "Withdraw", tokenRule, toRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(ERC20CustodyTestWithdraw) + if err := _ERC20CustodyTest.contract.UnpackLog(event, "Withdraw", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseWithdraw is a log parse operation binding the contract event 0x9b1bfa7fa9ee420a16e124f794c35ac9f90472acc99140eb2f6447c714cad8eb. +// +// Solidity: event Withdraw(address indexed token, address indexed to, uint256 amount) +func (_ERC20CustodyTest *ERC20CustodyTestFilterer) ParseWithdraw(log types.Log) (*ERC20CustodyTestWithdraw, error) { + event := new(ERC20CustodyTestWithdraw) + if err := _ERC20CustodyTest.contract.UnpackLog(event, "Withdraw", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// ERC20CustodyTestWithdrawAndCallIterator is returned from FilterWithdrawAndCall and is used to iterate over the raw logs and unpacked data for WithdrawAndCall events raised by the ERC20CustodyTest contract. +type ERC20CustodyTestWithdrawAndCallIterator struct { + Event *ERC20CustodyTestWithdrawAndCall // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *ERC20CustodyTestWithdrawAndCallIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(ERC20CustodyTestWithdrawAndCall) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(ERC20CustodyTestWithdrawAndCall) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *ERC20CustodyTestWithdrawAndCallIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *ERC20CustodyTestWithdrawAndCallIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// ERC20CustodyTestWithdrawAndCall represents a WithdrawAndCall event raised by the ERC20CustodyTest contract. +type ERC20CustodyTestWithdrawAndCall struct { + Token common.Address + To common.Address + Amount *big.Int + Data []byte + Raw types.Log // Blockchain specific contextual infos +} + +// FilterWithdrawAndCall is a free log retrieval operation binding the contract event 0x85b5be9cf454e05e0bddf49315178102227c312078eefa3c00294fb4d912ae4e. +// +// Solidity: event WithdrawAndCall(address indexed token, address indexed to, uint256 amount, bytes data) +func (_ERC20CustodyTest *ERC20CustodyTestFilterer) FilterWithdrawAndCall(opts *bind.FilterOpts, token []common.Address, to []common.Address) (*ERC20CustodyTestWithdrawAndCallIterator, error) { + + var tokenRule []interface{} + for _, tokenItem := range token { + tokenRule = append(tokenRule, tokenItem) + } + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _ERC20CustodyTest.contract.FilterLogs(opts, "WithdrawAndCall", tokenRule, toRule) + if err != nil { + return nil, err + } + return &ERC20CustodyTestWithdrawAndCallIterator{contract: _ERC20CustodyTest.contract, event: "WithdrawAndCall", logs: logs, sub: sub}, nil +} + +// WatchWithdrawAndCall is a free log subscription operation binding the contract event 0x85b5be9cf454e05e0bddf49315178102227c312078eefa3c00294fb4d912ae4e. +// +// Solidity: event WithdrawAndCall(address indexed token, address indexed to, uint256 amount, bytes data) +func (_ERC20CustodyTest *ERC20CustodyTestFilterer) WatchWithdrawAndCall(opts *bind.WatchOpts, sink chan<- *ERC20CustodyTestWithdrawAndCall, token []common.Address, to []common.Address) (event.Subscription, error) { + + var tokenRule []interface{} + for _, tokenItem := range token { + tokenRule = append(tokenRule, tokenItem) + } + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _ERC20CustodyTest.contract.WatchLogs(opts, "WithdrawAndCall", tokenRule, toRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(ERC20CustodyTestWithdrawAndCall) + if err := _ERC20CustodyTest.contract.UnpackLog(event, "WithdrawAndCall", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseWithdrawAndCall is a log parse operation binding the contract event 0x85b5be9cf454e05e0bddf49315178102227c312078eefa3c00294fb4d912ae4e. +// +// Solidity: event WithdrawAndCall(address indexed token, address indexed to, uint256 amount, bytes data) +func (_ERC20CustodyTest *ERC20CustodyTestFilterer) ParseWithdrawAndCall(log types.Log) (*ERC20CustodyTestWithdrawAndCall, error) { + event := new(ERC20CustodyTestWithdrawAndCall) + if err := _ERC20CustodyTest.contract.UnpackLog(event, "WithdrawAndCall", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// ERC20CustodyTestWithdrawAndRevertIterator is returned from FilterWithdrawAndRevert and is used to iterate over the raw logs and unpacked data for WithdrawAndRevert events raised by the ERC20CustodyTest contract. +type ERC20CustodyTestWithdrawAndRevertIterator struct { + Event *ERC20CustodyTestWithdrawAndRevert // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *ERC20CustodyTestWithdrawAndRevertIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(ERC20CustodyTestWithdrawAndRevert) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(ERC20CustodyTestWithdrawAndRevert) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *ERC20CustodyTestWithdrawAndRevertIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *ERC20CustodyTestWithdrawAndRevertIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// ERC20CustodyTestWithdrawAndRevert represents a WithdrawAndRevert event raised by the ERC20CustodyTest contract. +type ERC20CustodyTestWithdrawAndRevert struct { + Token common.Address + To common.Address + Amount *big.Int + Data []byte + Raw types.Log // Blockchain specific contextual infos +} + +// FilterWithdrawAndRevert is a free log retrieval operation binding the contract event 0xb9d4efa96044e5f5e03e696fa9ae2ff66911cc27e8a637c3627c75bc5b2241c8. +// +// Solidity: event WithdrawAndRevert(address indexed token, address indexed to, uint256 amount, bytes data) +func (_ERC20CustodyTest *ERC20CustodyTestFilterer) FilterWithdrawAndRevert(opts *bind.FilterOpts, token []common.Address, to []common.Address) (*ERC20CustodyTestWithdrawAndRevertIterator, error) { + + var tokenRule []interface{} + for _, tokenItem := range token { + tokenRule = append(tokenRule, tokenItem) + } + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _ERC20CustodyTest.contract.FilterLogs(opts, "WithdrawAndRevert", tokenRule, toRule) + if err != nil { + return nil, err + } + return &ERC20CustodyTestWithdrawAndRevertIterator{contract: _ERC20CustodyTest.contract, event: "WithdrawAndRevert", logs: logs, sub: sub}, nil +} + +// WatchWithdrawAndRevert is a free log subscription operation binding the contract event 0xb9d4efa96044e5f5e03e696fa9ae2ff66911cc27e8a637c3627c75bc5b2241c8. +// +// Solidity: event WithdrawAndRevert(address indexed token, address indexed to, uint256 amount, bytes data) +func (_ERC20CustodyTest *ERC20CustodyTestFilterer) WatchWithdrawAndRevert(opts *bind.WatchOpts, sink chan<- *ERC20CustodyTestWithdrawAndRevert, token []common.Address, to []common.Address) (event.Subscription, error) { + + var tokenRule []interface{} + for _, tokenItem := range token { + tokenRule = append(tokenRule, tokenItem) + } + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _ERC20CustodyTest.contract.WatchLogs(opts, "WithdrawAndRevert", tokenRule, toRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(ERC20CustodyTestWithdrawAndRevert) + if err := _ERC20CustodyTest.contract.UnpackLog(event, "WithdrawAndRevert", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseWithdrawAndRevert is a log parse operation binding the contract event 0xb9d4efa96044e5f5e03e696fa9ae2ff66911cc27e8a637c3627c75bc5b2241c8. +// +// Solidity: event WithdrawAndRevert(address indexed token, address indexed to, uint256 amount, bytes data) +func (_ERC20CustodyTest *ERC20CustodyTestFilterer) ParseWithdrawAndRevert(log types.Log) (*ERC20CustodyTestWithdrawAndRevert, error) { + event := new(ERC20CustodyTestWithdrawAndRevert) + if err := _ERC20CustodyTest.contract.UnpackLog(event, "WithdrawAndRevert", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// ERC20CustodyTestLogIterator is returned from FilterLog and is used to iterate over the raw logs and unpacked data for Log events raised by the ERC20CustodyTest contract. +type ERC20CustodyTestLogIterator struct { + Event *ERC20CustodyTestLog // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *ERC20CustodyTestLogIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(ERC20CustodyTestLog) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(ERC20CustodyTestLog) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *ERC20CustodyTestLogIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *ERC20CustodyTestLogIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// ERC20CustodyTestLog represents a Log event raised by the ERC20CustodyTest contract. +type ERC20CustodyTestLog struct { + Arg0 string + Raw types.Log // Blockchain specific contextual infos +} + +// FilterLog is a free log retrieval operation binding the contract event 0x41304facd9323d75b11bcdd609cb38effffdb05710f7caf0e9b16c6d9d709f50. +// +// Solidity: event log(string arg0) +func (_ERC20CustodyTest *ERC20CustodyTestFilterer) FilterLog(opts *bind.FilterOpts) (*ERC20CustodyTestLogIterator, error) { + + logs, sub, err := _ERC20CustodyTest.contract.FilterLogs(opts, "log") + if err != nil { + return nil, err + } + return &ERC20CustodyTestLogIterator{contract: _ERC20CustodyTest.contract, event: "log", logs: logs, sub: sub}, nil +} + +// WatchLog is a free log subscription operation binding the contract event 0x41304facd9323d75b11bcdd609cb38effffdb05710f7caf0e9b16c6d9d709f50. +// +// Solidity: event log(string arg0) +func (_ERC20CustodyTest *ERC20CustodyTestFilterer) WatchLog(opts *bind.WatchOpts, sink chan<- *ERC20CustodyTestLog) (event.Subscription, error) { + + logs, sub, err := _ERC20CustodyTest.contract.WatchLogs(opts, "log") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(ERC20CustodyTestLog) + if err := _ERC20CustodyTest.contract.UnpackLog(event, "log", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseLog is a log parse operation binding the contract event 0x41304facd9323d75b11bcdd609cb38effffdb05710f7caf0e9b16c6d9d709f50. +// +// Solidity: event log(string arg0) +func (_ERC20CustodyTest *ERC20CustodyTestFilterer) ParseLog(log types.Log) (*ERC20CustodyTestLog, error) { + event := new(ERC20CustodyTestLog) + if err := _ERC20CustodyTest.contract.UnpackLog(event, "log", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// ERC20CustodyTestLogAddressIterator is returned from FilterLogAddress and is used to iterate over the raw logs and unpacked data for LogAddress events raised by the ERC20CustodyTest contract. +type ERC20CustodyTestLogAddressIterator struct { + Event *ERC20CustodyTestLogAddress // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *ERC20CustodyTestLogAddressIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(ERC20CustodyTestLogAddress) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(ERC20CustodyTestLogAddress) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *ERC20CustodyTestLogAddressIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *ERC20CustodyTestLogAddressIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// ERC20CustodyTestLogAddress represents a LogAddress event raised by the ERC20CustodyTest contract. +type ERC20CustodyTestLogAddress struct { + Arg0 common.Address + Raw types.Log // Blockchain specific contextual infos +} + +// FilterLogAddress is a free log retrieval operation binding the contract event 0x7ae74c527414ae135fd97047b12921a5ec3911b804197855d67e25c7b75ee6f3. +// +// Solidity: event log_address(address arg0) +func (_ERC20CustodyTest *ERC20CustodyTestFilterer) FilterLogAddress(opts *bind.FilterOpts) (*ERC20CustodyTestLogAddressIterator, error) { + + logs, sub, err := _ERC20CustodyTest.contract.FilterLogs(opts, "log_address") + if err != nil { + return nil, err + } + return &ERC20CustodyTestLogAddressIterator{contract: _ERC20CustodyTest.contract, event: "log_address", logs: logs, sub: sub}, nil +} + +// WatchLogAddress is a free log subscription operation binding the contract event 0x7ae74c527414ae135fd97047b12921a5ec3911b804197855d67e25c7b75ee6f3. +// +// Solidity: event log_address(address arg0) +func (_ERC20CustodyTest *ERC20CustodyTestFilterer) WatchLogAddress(opts *bind.WatchOpts, sink chan<- *ERC20CustodyTestLogAddress) (event.Subscription, error) { + + logs, sub, err := _ERC20CustodyTest.contract.WatchLogs(opts, "log_address") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(ERC20CustodyTestLogAddress) + if err := _ERC20CustodyTest.contract.UnpackLog(event, "log_address", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseLogAddress is a log parse operation binding the contract event 0x7ae74c527414ae135fd97047b12921a5ec3911b804197855d67e25c7b75ee6f3. +// +// Solidity: event log_address(address arg0) +func (_ERC20CustodyTest *ERC20CustodyTestFilterer) ParseLogAddress(log types.Log) (*ERC20CustodyTestLogAddress, error) { + event := new(ERC20CustodyTestLogAddress) + if err := _ERC20CustodyTest.contract.UnpackLog(event, "log_address", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// ERC20CustodyTestLogArrayIterator is returned from FilterLogArray and is used to iterate over the raw logs and unpacked data for LogArray events raised by the ERC20CustodyTest contract. +type ERC20CustodyTestLogArrayIterator struct { + Event *ERC20CustodyTestLogArray // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *ERC20CustodyTestLogArrayIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(ERC20CustodyTestLogArray) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(ERC20CustodyTestLogArray) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *ERC20CustodyTestLogArrayIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *ERC20CustodyTestLogArrayIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// ERC20CustodyTestLogArray represents a LogArray event raised by the ERC20CustodyTest contract. +type ERC20CustodyTestLogArray struct { + Val []*big.Int + Raw types.Log // Blockchain specific contextual infos +} + +// FilterLogArray is a free log retrieval operation binding the contract event 0xfb102865d50addddf69da9b5aa1bced66c80cf869a5c8d0471a467e18ce9cab1. +// +// Solidity: event log_array(uint256[] val) +func (_ERC20CustodyTest *ERC20CustodyTestFilterer) FilterLogArray(opts *bind.FilterOpts) (*ERC20CustodyTestLogArrayIterator, error) { + + logs, sub, err := _ERC20CustodyTest.contract.FilterLogs(opts, "log_array") + if err != nil { + return nil, err + } + return &ERC20CustodyTestLogArrayIterator{contract: _ERC20CustodyTest.contract, event: "log_array", logs: logs, sub: sub}, nil +} + +// WatchLogArray is a free log subscription operation binding the contract event 0xfb102865d50addddf69da9b5aa1bced66c80cf869a5c8d0471a467e18ce9cab1. +// +// Solidity: event log_array(uint256[] val) +func (_ERC20CustodyTest *ERC20CustodyTestFilterer) WatchLogArray(opts *bind.WatchOpts, sink chan<- *ERC20CustodyTestLogArray) (event.Subscription, error) { + + logs, sub, err := _ERC20CustodyTest.contract.WatchLogs(opts, "log_array") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(ERC20CustodyTestLogArray) + if err := _ERC20CustodyTest.contract.UnpackLog(event, "log_array", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseLogArray is a log parse operation binding the contract event 0xfb102865d50addddf69da9b5aa1bced66c80cf869a5c8d0471a467e18ce9cab1. +// +// Solidity: event log_array(uint256[] val) +func (_ERC20CustodyTest *ERC20CustodyTestFilterer) ParseLogArray(log types.Log) (*ERC20CustodyTestLogArray, error) { + event := new(ERC20CustodyTestLogArray) + if err := _ERC20CustodyTest.contract.UnpackLog(event, "log_array", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// ERC20CustodyTestLogArray0Iterator is returned from FilterLogArray0 and is used to iterate over the raw logs and unpacked data for LogArray0 events raised by the ERC20CustodyTest contract. +type ERC20CustodyTestLogArray0Iterator struct { + Event *ERC20CustodyTestLogArray0 // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *ERC20CustodyTestLogArray0Iterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(ERC20CustodyTestLogArray0) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(ERC20CustodyTestLogArray0) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *ERC20CustodyTestLogArray0Iterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *ERC20CustodyTestLogArray0Iterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// ERC20CustodyTestLogArray0 represents a LogArray0 event raised by the ERC20CustodyTest contract. +type ERC20CustodyTestLogArray0 struct { + Val []*big.Int + Raw types.Log // Blockchain specific contextual infos +} + +// FilterLogArray0 is a free log retrieval operation binding the contract event 0x890a82679b470f2bd82816ed9b161f97d8b967f37fa3647c21d5bf39749e2dd5. +// +// Solidity: event log_array(int256[] val) +func (_ERC20CustodyTest *ERC20CustodyTestFilterer) FilterLogArray0(opts *bind.FilterOpts) (*ERC20CustodyTestLogArray0Iterator, error) { + + logs, sub, err := _ERC20CustodyTest.contract.FilterLogs(opts, "log_array0") + if err != nil { + return nil, err + } + return &ERC20CustodyTestLogArray0Iterator{contract: _ERC20CustodyTest.contract, event: "log_array0", logs: logs, sub: sub}, nil +} + +// WatchLogArray0 is a free log subscription operation binding the contract event 0x890a82679b470f2bd82816ed9b161f97d8b967f37fa3647c21d5bf39749e2dd5. +// +// Solidity: event log_array(int256[] val) +func (_ERC20CustodyTest *ERC20CustodyTestFilterer) WatchLogArray0(opts *bind.WatchOpts, sink chan<- *ERC20CustodyTestLogArray0) (event.Subscription, error) { + + logs, sub, err := _ERC20CustodyTest.contract.WatchLogs(opts, "log_array0") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(ERC20CustodyTestLogArray0) + if err := _ERC20CustodyTest.contract.UnpackLog(event, "log_array0", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseLogArray0 is a log parse operation binding the contract event 0x890a82679b470f2bd82816ed9b161f97d8b967f37fa3647c21d5bf39749e2dd5. +// +// Solidity: event log_array(int256[] val) +func (_ERC20CustodyTest *ERC20CustodyTestFilterer) ParseLogArray0(log types.Log) (*ERC20CustodyTestLogArray0, error) { + event := new(ERC20CustodyTestLogArray0) + if err := _ERC20CustodyTest.contract.UnpackLog(event, "log_array0", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// ERC20CustodyTestLogArray1Iterator is returned from FilterLogArray1 and is used to iterate over the raw logs and unpacked data for LogArray1 events raised by the ERC20CustodyTest contract. +type ERC20CustodyTestLogArray1Iterator struct { + Event *ERC20CustodyTestLogArray1 // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *ERC20CustodyTestLogArray1Iterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(ERC20CustodyTestLogArray1) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(ERC20CustodyTestLogArray1) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *ERC20CustodyTestLogArray1Iterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *ERC20CustodyTestLogArray1Iterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// ERC20CustodyTestLogArray1 represents a LogArray1 event raised by the ERC20CustodyTest contract. +type ERC20CustodyTestLogArray1 struct { + Val []common.Address + Raw types.Log // Blockchain specific contextual infos +} + +// FilterLogArray1 is a free log retrieval operation binding the contract event 0x40e1840f5769073d61bd01372d9b75baa9842d5629a0c99ff103be1178a8e9e2. +// +// Solidity: event log_array(address[] val) +func (_ERC20CustodyTest *ERC20CustodyTestFilterer) FilterLogArray1(opts *bind.FilterOpts) (*ERC20CustodyTestLogArray1Iterator, error) { + + logs, sub, err := _ERC20CustodyTest.contract.FilterLogs(opts, "log_array1") + if err != nil { + return nil, err + } + return &ERC20CustodyTestLogArray1Iterator{contract: _ERC20CustodyTest.contract, event: "log_array1", logs: logs, sub: sub}, nil +} + +// WatchLogArray1 is a free log subscription operation binding the contract event 0x40e1840f5769073d61bd01372d9b75baa9842d5629a0c99ff103be1178a8e9e2. +// +// Solidity: event log_array(address[] val) +func (_ERC20CustodyTest *ERC20CustodyTestFilterer) WatchLogArray1(opts *bind.WatchOpts, sink chan<- *ERC20CustodyTestLogArray1) (event.Subscription, error) { + + logs, sub, err := _ERC20CustodyTest.contract.WatchLogs(opts, "log_array1") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(ERC20CustodyTestLogArray1) + if err := _ERC20CustodyTest.contract.UnpackLog(event, "log_array1", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseLogArray1 is a log parse operation binding the contract event 0x40e1840f5769073d61bd01372d9b75baa9842d5629a0c99ff103be1178a8e9e2. +// +// Solidity: event log_array(address[] val) +func (_ERC20CustodyTest *ERC20CustodyTestFilterer) ParseLogArray1(log types.Log) (*ERC20CustodyTestLogArray1, error) { + event := new(ERC20CustodyTestLogArray1) + if err := _ERC20CustodyTest.contract.UnpackLog(event, "log_array1", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// ERC20CustodyTestLogBytesIterator is returned from FilterLogBytes and is used to iterate over the raw logs and unpacked data for LogBytes events raised by the ERC20CustodyTest contract. +type ERC20CustodyTestLogBytesIterator struct { + Event *ERC20CustodyTestLogBytes // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *ERC20CustodyTestLogBytesIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(ERC20CustodyTestLogBytes) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(ERC20CustodyTestLogBytes) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *ERC20CustodyTestLogBytesIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *ERC20CustodyTestLogBytesIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// ERC20CustodyTestLogBytes represents a LogBytes event raised by the ERC20CustodyTest contract. +type ERC20CustodyTestLogBytes struct { + Arg0 []byte + Raw types.Log // Blockchain specific contextual infos +} + +// FilterLogBytes is a free log retrieval operation binding the contract event 0x23b62ad0584d24a75f0bf3560391ef5659ec6db1269c56e11aa241d637f19b20. +// +// Solidity: event log_bytes(bytes arg0) +func (_ERC20CustodyTest *ERC20CustodyTestFilterer) FilterLogBytes(opts *bind.FilterOpts) (*ERC20CustodyTestLogBytesIterator, error) { + + logs, sub, err := _ERC20CustodyTest.contract.FilterLogs(opts, "log_bytes") + if err != nil { + return nil, err + } + return &ERC20CustodyTestLogBytesIterator{contract: _ERC20CustodyTest.contract, event: "log_bytes", logs: logs, sub: sub}, nil +} + +// WatchLogBytes is a free log subscription operation binding the contract event 0x23b62ad0584d24a75f0bf3560391ef5659ec6db1269c56e11aa241d637f19b20. +// +// Solidity: event log_bytes(bytes arg0) +func (_ERC20CustodyTest *ERC20CustodyTestFilterer) WatchLogBytes(opts *bind.WatchOpts, sink chan<- *ERC20CustodyTestLogBytes) (event.Subscription, error) { + + logs, sub, err := _ERC20CustodyTest.contract.WatchLogs(opts, "log_bytes") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(ERC20CustodyTestLogBytes) + if err := _ERC20CustodyTest.contract.UnpackLog(event, "log_bytes", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseLogBytes is a log parse operation binding the contract event 0x23b62ad0584d24a75f0bf3560391ef5659ec6db1269c56e11aa241d637f19b20. +// +// Solidity: event log_bytes(bytes arg0) +func (_ERC20CustodyTest *ERC20CustodyTestFilterer) ParseLogBytes(log types.Log) (*ERC20CustodyTestLogBytes, error) { + event := new(ERC20CustodyTestLogBytes) + if err := _ERC20CustodyTest.contract.UnpackLog(event, "log_bytes", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// ERC20CustodyTestLogBytes32Iterator is returned from FilterLogBytes32 and is used to iterate over the raw logs and unpacked data for LogBytes32 events raised by the ERC20CustodyTest contract. +type ERC20CustodyTestLogBytes32Iterator struct { + Event *ERC20CustodyTestLogBytes32 // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *ERC20CustodyTestLogBytes32Iterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(ERC20CustodyTestLogBytes32) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(ERC20CustodyTestLogBytes32) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *ERC20CustodyTestLogBytes32Iterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *ERC20CustodyTestLogBytes32Iterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// ERC20CustodyTestLogBytes32 represents a LogBytes32 event raised by the ERC20CustodyTest contract. +type ERC20CustodyTestLogBytes32 struct { + Arg0 [32]byte + Raw types.Log // Blockchain specific contextual infos +} + +// FilterLogBytes32 is a free log retrieval operation binding the contract event 0xe81699b85113eea1c73e10588b2b035e55893369632173afd43feb192fac64e3. +// +// Solidity: event log_bytes32(bytes32 arg0) +func (_ERC20CustodyTest *ERC20CustodyTestFilterer) FilterLogBytes32(opts *bind.FilterOpts) (*ERC20CustodyTestLogBytes32Iterator, error) { + + logs, sub, err := _ERC20CustodyTest.contract.FilterLogs(opts, "log_bytes32") + if err != nil { + return nil, err + } + return &ERC20CustodyTestLogBytes32Iterator{contract: _ERC20CustodyTest.contract, event: "log_bytes32", logs: logs, sub: sub}, nil +} + +// WatchLogBytes32 is a free log subscription operation binding the contract event 0xe81699b85113eea1c73e10588b2b035e55893369632173afd43feb192fac64e3. +// +// Solidity: event log_bytes32(bytes32 arg0) +func (_ERC20CustodyTest *ERC20CustodyTestFilterer) WatchLogBytes32(opts *bind.WatchOpts, sink chan<- *ERC20CustodyTestLogBytes32) (event.Subscription, error) { + + logs, sub, err := _ERC20CustodyTest.contract.WatchLogs(opts, "log_bytes32") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(ERC20CustodyTestLogBytes32) + if err := _ERC20CustodyTest.contract.UnpackLog(event, "log_bytes32", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseLogBytes32 is a log parse operation binding the contract event 0xe81699b85113eea1c73e10588b2b035e55893369632173afd43feb192fac64e3. +// +// Solidity: event log_bytes32(bytes32 arg0) +func (_ERC20CustodyTest *ERC20CustodyTestFilterer) ParseLogBytes32(log types.Log) (*ERC20CustodyTestLogBytes32, error) { + event := new(ERC20CustodyTestLogBytes32) + if err := _ERC20CustodyTest.contract.UnpackLog(event, "log_bytes32", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// ERC20CustodyTestLogIntIterator is returned from FilterLogInt and is used to iterate over the raw logs and unpacked data for LogInt events raised by the ERC20CustodyTest contract. +type ERC20CustodyTestLogIntIterator struct { + Event *ERC20CustodyTestLogInt // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *ERC20CustodyTestLogIntIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(ERC20CustodyTestLogInt) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(ERC20CustodyTestLogInt) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *ERC20CustodyTestLogIntIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *ERC20CustodyTestLogIntIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// ERC20CustodyTestLogInt represents a LogInt event raised by the ERC20CustodyTest contract. +type ERC20CustodyTestLogInt struct { + Arg0 *big.Int + Raw types.Log // Blockchain specific contextual infos +} + +// FilterLogInt is a free log retrieval operation binding the contract event 0x0eb5d52624c8d28ada9fc55a8c502ed5aa3fbe2fb6e91b71b5f376882b1d2fb8. +// +// Solidity: event log_int(int256 arg0) +func (_ERC20CustodyTest *ERC20CustodyTestFilterer) FilterLogInt(opts *bind.FilterOpts) (*ERC20CustodyTestLogIntIterator, error) { + + logs, sub, err := _ERC20CustodyTest.contract.FilterLogs(opts, "log_int") + if err != nil { + return nil, err + } + return &ERC20CustodyTestLogIntIterator{contract: _ERC20CustodyTest.contract, event: "log_int", logs: logs, sub: sub}, nil +} + +// WatchLogInt is a free log subscription operation binding the contract event 0x0eb5d52624c8d28ada9fc55a8c502ed5aa3fbe2fb6e91b71b5f376882b1d2fb8. +// +// Solidity: event log_int(int256 arg0) +func (_ERC20CustodyTest *ERC20CustodyTestFilterer) WatchLogInt(opts *bind.WatchOpts, sink chan<- *ERC20CustodyTestLogInt) (event.Subscription, error) { + + logs, sub, err := _ERC20CustodyTest.contract.WatchLogs(opts, "log_int") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(ERC20CustodyTestLogInt) + if err := _ERC20CustodyTest.contract.UnpackLog(event, "log_int", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseLogInt is a log parse operation binding the contract event 0x0eb5d52624c8d28ada9fc55a8c502ed5aa3fbe2fb6e91b71b5f376882b1d2fb8. +// +// Solidity: event log_int(int256 arg0) +func (_ERC20CustodyTest *ERC20CustodyTestFilterer) ParseLogInt(log types.Log) (*ERC20CustodyTestLogInt, error) { + event := new(ERC20CustodyTestLogInt) + if err := _ERC20CustodyTest.contract.UnpackLog(event, "log_int", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// ERC20CustodyTestLogNamedAddressIterator is returned from FilterLogNamedAddress and is used to iterate over the raw logs and unpacked data for LogNamedAddress events raised by the ERC20CustodyTest contract. +type ERC20CustodyTestLogNamedAddressIterator struct { + Event *ERC20CustodyTestLogNamedAddress // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *ERC20CustodyTestLogNamedAddressIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(ERC20CustodyTestLogNamedAddress) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(ERC20CustodyTestLogNamedAddress) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *ERC20CustodyTestLogNamedAddressIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *ERC20CustodyTestLogNamedAddressIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// ERC20CustodyTestLogNamedAddress represents a LogNamedAddress event raised by the ERC20CustodyTest contract. +type ERC20CustodyTestLogNamedAddress struct { + Key string + Val common.Address + Raw types.Log // Blockchain specific contextual infos +} + +// FilterLogNamedAddress is a free log retrieval operation binding the contract event 0x9c4e8541ca8f0dc1c413f9108f66d82d3cecb1bddbce437a61caa3175c4cc96f. +// +// Solidity: event log_named_address(string key, address val) +func (_ERC20CustodyTest *ERC20CustodyTestFilterer) FilterLogNamedAddress(opts *bind.FilterOpts) (*ERC20CustodyTestLogNamedAddressIterator, error) { + + logs, sub, err := _ERC20CustodyTest.contract.FilterLogs(opts, "log_named_address") + if err != nil { + return nil, err + } + return &ERC20CustodyTestLogNamedAddressIterator{contract: _ERC20CustodyTest.contract, event: "log_named_address", logs: logs, sub: sub}, nil +} + +// WatchLogNamedAddress is a free log subscription operation binding the contract event 0x9c4e8541ca8f0dc1c413f9108f66d82d3cecb1bddbce437a61caa3175c4cc96f. +// +// Solidity: event log_named_address(string key, address val) +func (_ERC20CustodyTest *ERC20CustodyTestFilterer) WatchLogNamedAddress(opts *bind.WatchOpts, sink chan<- *ERC20CustodyTestLogNamedAddress) (event.Subscription, error) { + + logs, sub, err := _ERC20CustodyTest.contract.WatchLogs(opts, "log_named_address") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(ERC20CustodyTestLogNamedAddress) + if err := _ERC20CustodyTest.contract.UnpackLog(event, "log_named_address", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseLogNamedAddress is a log parse operation binding the contract event 0x9c4e8541ca8f0dc1c413f9108f66d82d3cecb1bddbce437a61caa3175c4cc96f. +// +// Solidity: event log_named_address(string key, address val) +func (_ERC20CustodyTest *ERC20CustodyTestFilterer) ParseLogNamedAddress(log types.Log) (*ERC20CustodyTestLogNamedAddress, error) { + event := new(ERC20CustodyTestLogNamedAddress) + if err := _ERC20CustodyTest.contract.UnpackLog(event, "log_named_address", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// ERC20CustodyTestLogNamedArrayIterator is returned from FilterLogNamedArray and is used to iterate over the raw logs and unpacked data for LogNamedArray events raised by the ERC20CustodyTest contract. +type ERC20CustodyTestLogNamedArrayIterator struct { + Event *ERC20CustodyTestLogNamedArray // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *ERC20CustodyTestLogNamedArrayIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(ERC20CustodyTestLogNamedArray) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(ERC20CustodyTestLogNamedArray) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *ERC20CustodyTestLogNamedArrayIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *ERC20CustodyTestLogNamedArrayIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// ERC20CustodyTestLogNamedArray represents a LogNamedArray event raised by the ERC20CustodyTest contract. +type ERC20CustodyTestLogNamedArray struct { + Key string + Val []*big.Int + Raw types.Log // Blockchain specific contextual infos +} + +// FilterLogNamedArray is a free log retrieval operation binding the contract event 0x00aaa39c9ffb5f567a4534380c737075702e1f7f14107fc95328e3b56c0325fb. +// +// Solidity: event log_named_array(string key, uint256[] val) +func (_ERC20CustodyTest *ERC20CustodyTestFilterer) FilterLogNamedArray(opts *bind.FilterOpts) (*ERC20CustodyTestLogNamedArrayIterator, error) { + + logs, sub, err := _ERC20CustodyTest.contract.FilterLogs(opts, "log_named_array") + if err != nil { + return nil, err + } + return &ERC20CustodyTestLogNamedArrayIterator{contract: _ERC20CustodyTest.contract, event: "log_named_array", logs: logs, sub: sub}, nil +} + +// WatchLogNamedArray is a free log subscription operation binding the contract event 0x00aaa39c9ffb5f567a4534380c737075702e1f7f14107fc95328e3b56c0325fb. +// +// Solidity: event log_named_array(string key, uint256[] val) +func (_ERC20CustodyTest *ERC20CustodyTestFilterer) WatchLogNamedArray(opts *bind.WatchOpts, sink chan<- *ERC20CustodyTestLogNamedArray) (event.Subscription, error) { + + logs, sub, err := _ERC20CustodyTest.contract.WatchLogs(opts, "log_named_array") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(ERC20CustodyTestLogNamedArray) + if err := _ERC20CustodyTest.contract.UnpackLog(event, "log_named_array", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseLogNamedArray is a log parse operation binding the contract event 0x00aaa39c9ffb5f567a4534380c737075702e1f7f14107fc95328e3b56c0325fb. +// +// Solidity: event log_named_array(string key, uint256[] val) +func (_ERC20CustodyTest *ERC20CustodyTestFilterer) ParseLogNamedArray(log types.Log) (*ERC20CustodyTestLogNamedArray, error) { + event := new(ERC20CustodyTestLogNamedArray) + if err := _ERC20CustodyTest.contract.UnpackLog(event, "log_named_array", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// ERC20CustodyTestLogNamedArray0Iterator is returned from FilterLogNamedArray0 and is used to iterate over the raw logs and unpacked data for LogNamedArray0 events raised by the ERC20CustodyTest contract. +type ERC20CustodyTestLogNamedArray0Iterator struct { + Event *ERC20CustodyTestLogNamedArray0 // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *ERC20CustodyTestLogNamedArray0Iterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(ERC20CustodyTestLogNamedArray0) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(ERC20CustodyTestLogNamedArray0) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *ERC20CustodyTestLogNamedArray0Iterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *ERC20CustodyTestLogNamedArray0Iterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// ERC20CustodyTestLogNamedArray0 represents a LogNamedArray0 event raised by the ERC20CustodyTest contract. +type ERC20CustodyTestLogNamedArray0 struct { + Key string + Val []*big.Int + Raw types.Log // Blockchain specific contextual infos +} + +// FilterLogNamedArray0 is a free log retrieval operation binding the contract event 0xa73eda09662f46dde729be4611385ff34fe6c44fbbc6f7e17b042b59a3445b57. +// +// Solidity: event log_named_array(string key, int256[] val) +func (_ERC20CustodyTest *ERC20CustodyTestFilterer) FilterLogNamedArray0(opts *bind.FilterOpts) (*ERC20CustodyTestLogNamedArray0Iterator, error) { + + logs, sub, err := _ERC20CustodyTest.contract.FilterLogs(opts, "log_named_array0") + if err != nil { + return nil, err + } + return &ERC20CustodyTestLogNamedArray0Iterator{contract: _ERC20CustodyTest.contract, event: "log_named_array0", logs: logs, sub: sub}, nil +} + +// WatchLogNamedArray0 is a free log subscription operation binding the contract event 0xa73eda09662f46dde729be4611385ff34fe6c44fbbc6f7e17b042b59a3445b57. +// +// Solidity: event log_named_array(string key, int256[] val) +func (_ERC20CustodyTest *ERC20CustodyTestFilterer) WatchLogNamedArray0(opts *bind.WatchOpts, sink chan<- *ERC20CustodyTestLogNamedArray0) (event.Subscription, error) { + + logs, sub, err := _ERC20CustodyTest.contract.WatchLogs(opts, "log_named_array0") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(ERC20CustodyTestLogNamedArray0) + if err := _ERC20CustodyTest.contract.UnpackLog(event, "log_named_array0", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseLogNamedArray0 is a log parse operation binding the contract event 0xa73eda09662f46dde729be4611385ff34fe6c44fbbc6f7e17b042b59a3445b57. +// +// Solidity: event log_named_array(string key, int256[] val) +func (_ERC20CustodyTest *ERC20CustodyTestFilterer) ParseLogNamedArray0(log types.Log) (*ERC20CustodyTestLogNamedArray0, error) { + event := new(ERC20CustodyTestLogNamedArray0) + if err := _ERC20CustodyTest.contract.UnpackLog(event, "log_named_array0", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// ERC20CustodyTestLogNamedArray1Iterator is returned from FilterLogNamedArray1 and is used to iterate over the raw logs and unpacked data for LogNamedArray1 events raised by the ERC20CustodyTest contract. +type ERC20CustodyTestLogNamedArray1Iterator struct { + Event *ERC20CustodyTestLogNamedArray1 // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *ERC20CustodyTestLogNamedArray1Iterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(ERC20CustodyTestLogNamedArray1) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(ERC20CustodyTestLogNamedArray1) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *ERC20CustodyTestLogNamedArray1Iterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *ERC20CustodyTestLogNamedArray1Iterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// ERC20CustodyTestLogNamedArray1 represents a LogNamedArray1 event raised by the ERC20CustodyTest contract. +type ERC20CustodyTestLogNamedArray1 struct { + Key string + Val []common.Address + Raw types.Log // Blockchain specific contextual infos +} + +// FilterLogNamedArray1 is a free log retrieval operation binding the contract event 0x3bcfb2ae2e8d132dd1fce7cf278a9a19756a9fceabe470df3bdabb4bc577d1bd. +// +// Solidity: event log_named_array(string key, address[] val) +func (_ERC20CustodyTest *ERC20CustodyTestFilterer) FilterLogNamedArray1(opts *bind.FilterOpts) (*ERC20CustodyTestLogNamedArray1Iterator, error) { + + logs, sub, err := _ERC20CustodyTest.contract.FilterLogs(opts, "log_named_array1") + if err != nil { + return nil, err + } + return &ERC20CustodyTestLogNamedArray1Iterator{contract: _ERC20CustodyTest.contract, event: "log_named_array1", logs: logs, sub: sub}, nil +} + +// WatchLogNamedArray1 is a free log subscription operation binding the contract event 0x3bcfb2ae2e8d132dd1fce7cf278a9a19756a9fceabe470df3bdabb4bc577d1bd. +// +// Solidity: event log_named_array(string key, address[] val) +func (_ERC20CustodyTest *ERC20CustodyTestFilterer) WatchLogNamedArray1(opts *bind.WatchOpts, sink chan<- *ERC20CustodyTestLogNamedArray1) (event.Subscription, error) { + + logs, sub, err := _ERC20CustodyTest.contract.WatchLogs(opts, "log_named_array1") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(ERC20CustodyTestLogNamedArray1) + if err := _ERC20CustodyTest.contract.UnpackLog(event, "log_named_array1", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseLogNamedArray1 is a log parse operation binding the contract event 0x3bcfb2ae2e8d132dd1fce7cf278a9a19756a9fceabe470df3bdabb4bc577d1bd. +// +// Solidity: event log_named_array(string key, address[] val) +func (_ERC20CustodyTest *ERC20CustodyTestFilterer) ParseLogNamedArray1(log types.Log) (*ERC20CustodyTestLogNamedArray1, error) { + event := new(ERC20CustodyTestLogNamedArray1) + if err := _ERC20CustodyTest.contract.UnpackLog(event, "log_named_array1", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// ERC20CustodyTestLogNamedBytesIterator is returned from FilterLogNamedBytes and is used to iterate over the raw logs and unpacked data for LogNamedBytes events raised by the ERC20CustodyTest contract. +type ERC20CustodyTestLogNamedBytesIterator struct { + Event *ERC20CustodyTestLogNamedBytes // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *ERC20CustodyTestLogNamedBytesIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(ERC20CustodyTestLogNamedBytes) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(ERC20CustodyTestLogNamedBytes) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *ERC20CustodyTestLogNamedBytesIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *ERC20CustodyTestLogNamedBytesIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// ERC20CustodyTestLogNamedBytes represents a LogNamedBytes event raised by the ERC20CustodyTest contract. +type ERC20CustodyTestLogNamedBytes struct { + Key string + Val []byte + Raw types.Log // Blockchain specific contextual infos +} + +// FilterLogNamedBytes is a free log retrieval operation binding the contract event 0xd26e16cad4548705e4c9e2d94f98ee91c289085ee425594fd5635fa2964ccf18. +// +// Solidity: event log_named_bytes(string key, bytes val) +func (_ERC20CustodyTest *ERC20CustodyTestFilterer) FilterLogNamedBytes(opts *bind.FilterOpts) (*ERC20CustodyTestLogNamedBytesIterator, error) { + + logs, sub, err := _ERC20CustodyTest.contract.FilterLogs(opts, "log_named_bytes") + if err != nil { + return nil, err + } + return &ERC20CustodyTestLogNamedBytesIterator{contract: _ERC20CustodyTest.contract, event: "log_named_bytes", logs: logs, sub: sub}, nil +} + +// WatchLogNamedBytes is a free log subscription operation binding the contract event 0xd26e16cad4548705e4c9e2d94f98ee91c289085ee425594fd5635fa2964ccf18. +// +// Solidity: event log_named_bytes(string key, bytes val) +func (_ERC20CustodyTest *ERC20CustodyTestFilterer) WatchLogNamedBytes(opts *bind.WatchOpts, sink chan<- *ERC20CustodyTestLogNamedBytes) (event.Subscription, error) { + + logs, sub, err := _ERC20CustodyTest.contract.WatchLogs(opts, "log_named_bytes") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(ERC20CustodyTestLogNamedBytes) + if err := _ERC20CustodyTest.contract.UnpackLog(event, "log_named_bytes", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseLogNamedBytes is a log parse operation binding the contract event 0xd26e16cad4548705e4c9e2d94f98ee91c289085ee425594fd5635fa2964ccf18. +// +// Solidity: event log_named_bytes(string key, bytes val) +func (_ERC20CustodyTest *ERC20CustodyTestFilterer) ParseLogNamedBytes(log types.Log) (*ERC20CustodyTestLogNamedBytes, error) { + event := new(ERC20CustodyTestLogNamedBytes) + if err := _ERC20CustodyTest.contract.UnpackLog(event, "log_named_bytes", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// ERC20CustodyTestLogNamedBytes32Iterator is returned from FilterLogNamedBytes32 and is used to iterate over the raw logs and unpacked data for LogNamedBytes32 events raised by the ERC20CustodyTest contract. +type ERC20CustodyTestLogNamedBytes32Iterator struct { + Event *ERC20CustodyTestLogNamedBytes32 // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *ERC20CustodyTestLogNamedBytes32Iterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(ERC20CustodyTestLogNamedBytes32) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(ERC20CustodyTestLogNamedBytes32) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *ERC20CustodyTestLogNamedBytes32Iterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *ERC20CustodyTestLogNamedBytes32Iterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// ERC20CustodyTestLogNamedBytes32 represents a LogNamedBytes32 event raised by the ERC20CustodyTest contract. +type ERC20CustodyTestLogNamedBytes32 struct { + Key string + Val [32]byte + Raw types.Log // Blockchain specific contextual infos +} + +// FilterLogNamedBytes32 is a free log retrieval operation binding the contract event 0xafb795c9c61e4fe7468c386f925d7a5429ecad9c0495ddb8d38d690614d32f99. +// +// Solidity: event log_named_bytes32(string key, bytes32 val) +func (_ERC20CustodyTest *ERC20CustodyTestFilterer) FilterLogNamedBytes32(opts *bind.FilterOpts) (*ERC20CustodyTestLogNamedBytes32Iterator, error) { + + logs, sub, err := _ERC20CustodyTest.contract.FilterLogs(opts, "log_named_bytes32") + if err != nil { + return nil, err + } + return &ERC20CustodyTestLogNamedBytes32Iterator{contract: _ERC20CustodyTest.contract, event: "log_named_bytes32", logs: logs, sub: sub}, nil +} + +// WatchLogNamedBytes32 is a free log subscription operation binding the contract event 0xafb795c9c61e4fe7468c386f925d7a5429ecad9c0495ddb8d38d690614d32f99. +// +// Solidity: event log_named_bytes32(string key, bytes32 val) +func (_ERC20CustodyTest *ERC20CustodyTestFilterer) WatchLogNamedBytes32(opts *bind.WatchOpts, sink chan<- *ERC20CustodyTestLogNamedBytes32) (event.Subscription, error) { + + logs, sub, err := _ERC20CustodyTest.contract.WatchLogs(opts, "log_named_bytes32") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(ERC20CustodyTestLogNamedBytes32) + if err := _ERC20CustodyTest.contract.UnpackLog(event, "log_named_bytes32", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseLogNamedBytes32 is a log parse operation binding the contract event 0xafb795c9c61e4fe7468c386f925d7a5429ecad9c0495ddb8d38d690614d32f99. +// +// Solidity: event log_named_bytes32(string key, bytes32 val) +func (_ERC20CustodyTest *ERC20CustodyTestFilterer) ParseLogNamedBytes32(log types.Log) (*ERC20CustodyTestLogNamedBytes32, error) { + event := new(ERC20CustodyTestLogNamedBytes32) + if err := _ERC20CustodyTest.contract.UnpackLog(event, "log_named_bytes32", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// ERC20CustodyTestLogNamedDecimalIntIterator is returned from FilterLogNamedDecimalInt and is used to iterate over the raw logs and unpacked data for LogNamedDecimalInt events raised by the ERC20CustodyTest contract. +type ERC20CustodyTestLogNamedDecimalIntIterator struct { + Event *ERC20CustodyTestLogNamedDecimalInt // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *ERC20CustodyTestLogNamedDecimalIntIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(ERC20CustodyTestLogNamedDecimalInt) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(ERC20CustodyTestLogNamedDecimalInt) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *ERC20CustodyTestLogNamedDecimalIntIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *ERC20CustodyTestLogNamedDecimalIntIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// ERC20CustodyTestLogNamedDecimalInt represents a LogNamedDecimalInt event raised by the ERC20CustodyTest contract. +type ERC20CustodyTestLogNamedDecimalInt struct { + Key string + Val *big.Int + Decimals *big.Int + Raw types.Log // Blockchain specific contextual infos +} + +// FilterLogNamedDecimalInt is a free log retrieval operation binding the contract event 0x5da6ce9d51151ba10c09a559ef24d520b9dac5c5b8810ae8434e4d0d86411a95. +// +// Solidity: event log_named_decimal_int(string key, int256 val, uint256 decimals) +func (_ERC20CustodyTest *ERC20CustodyTestFilterer) FilterLogNamedDecimalInt(opts *bind.FilterOpts) (*ERC20CustodyTestLogNamedDecimalIntIterator, error) { + + logs, sub, err := _ERC20CustodyTest.contract.FilterLogs(opts, "log_named_decimal_int") + if err != nil { + return nil, err + } + return &ERC20CustodyTestLogNamedDecimalIntIterator{contract: _ERC20CustodyTest.contract, event: "log_named_decimal_int", logs: logs, sub: sub}, nil +} + +// WatchLogNamedDecimalInt is a free log subscription operation binding the contract event 0x5da6ce9d51151ba10c09a559ef24d520b9dac5c5b8810ae8434e4d0d86411a95. +// +// Solidity: event log_named_decimal_int(string key, int256 val, uint256 decimals) +func (_ERC20CustodyTest *ERC20CustodyTestFilterer) WatchLogNamedDecimalInt(opts *bind.WatchOpts, sink chan<- *ERC20CustodyTestLogNamedDecimalInt) (event.Subscription, error) { + + logs, sub, err := _ERC20CustodyTest.contract.WatchLogs(opts, "log_named_decimal_int") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(ERC20CustodyTestLogNamedDecimalInt) + if err := _ERC20CustodyTest.contract.UnpackLog(event, "log_named_decimal_int", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseLogNamedDecimalInt is a log parse operation binding the contract event 0x5da6ce9d51151ba10c09a559ef24d520b9dac5c5b8810ae8434e4d0d86411a95. +// +// Solidity: event log_named_decimal_int(string key, int256 val, uint256 decimals) +func (_ERC20CustodyTest *ERC20CustodyTestFilterer) ParseLogNamedDecimalInt(log types.Log) (*ERC20CustodyTestLogNamedDecimalInt, error) { + event := new(ERC20CustodyTestLogNamedDecimalInt) + if err := _ERC20CustodyTest.contract.UnpackLog(event, "log_named_decimal_int", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// ERC20CustodyTestLogNamedDecimalUintIterator is returned from FilterLogNamedDecimalUint and is used to iterate over the raw logs and unpacked data for LogNamedDecimalUint events raised by the ERC20CustodyTest contract. +type ERC20CustodyTestLogNamedDecimalUintIterator struct { + Event *ERC20CustodyTestLogNamedDecimalUint // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *ERC20CustodyTestLogNamedDecimalUintIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(ERC20CustodyTestLogNamedDecimalUint) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(ERC20CustodyTestLogNamedDecimalUint) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *ERC20CustodyTestLogNamedDecimalUintIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *ERC20CustodyTestLogNamedDecimalUintIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// ERC20CustodyTestLogNamedDecimalUint represents a LogNamedDecimalUint event raised by the ERC20CustodyTest contract. +type ERC20CustodyTestLogNamedDecimalUint struct { + Key string + Val *big.Int + Decimals *big.Int + Raw types.Log // Blockchain specific contextual infos +} + +// FilterLogNamedDecimalUint is a free log retrieval operation binding the contract event 0xeb8ba43ced7537421946bd43e828b8b2b8428927aa8f801c13d934bf11aca57b. +// +// Solidity: event log_named_decimal_uint(string key, uint256 val, uint256 decimals) +func (_ERC20CustodyTest *ERC20CustodyTestFilterer) FilterLogNamedDecimalUint(opts *bind.FilterOpts) (*ERC20CustodyTestLogNamedDecimalUintIterator, error) { + + logs, sub, err := _ERC20CustodyTest.contract.FilterLogs(opts, "log_named_decimal_uint") + if err != nil { + return nil, err + } + return &ERC20CustodyTestLogNamedDecimalUintIterator{contract: _ERC20CustodyTest.contract, event: "log_named_decimal_uint", logs: logs, sub: sub}, nil +} + +// WatchLogNamedDecimalUint is a free log subscription operation binding the contract event 0xeb8ba43ced7537421946bd43e828b8b2b8428927aa8f801c13d934bf11aca57b. +// +// Solidity: event log_named_decimal_uint(string key, uint256 val, uint256 decimals) +func (_ERC20CustodyTest *ERC20CustodyTestFilterer) WatchLogNamedDecimalUint(opts *bind.WatchOpts, sink chan<- *ERC20CustodyTestLogNamedDecimalUint) (event.Subscription, error) { + + logs, sub, err := _ERC20CustodyTest.contract.WatchLogs(opts, "log_named_decimal_uint") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(ERC20CustodyTestLogNamedDecimalUint) + if err := _ERC20CustodyTest.contract.UnpackLog(event, "log_named_decimal_uint", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseLogNamedDecimalUint is a log parse operation binding the contract event 0xeb8ba43ced7537421946bd43e828b8b2b8428927aa8f801c13d934bf11aca57b. +// +// Solidity: event log_named_decimal_uint(string key, uint256 val, uint256 decimals) +func (_ERC20CustodyTest *ERC20CustodyTestFilterer) ParseLogNamedDecimalUint(log types.Log) (*ERC20CustodyTestLogNamedDecimalUint, error) { + event := new(ERC20CustodyTestLogNamedDecimalUint) + if err := _ERC20CustodyTest.contract.UnpackLog(event, "log_named_decimal_uint", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// ERC20CustodyTestLogNamedIntIterator is returned from FilterLogNamedInt and is used to iterate over the raw logs and unpacked data for LogNamedInt events raised by the ERC20CustodyTest contract. +type ERC20CustodyTestLogNamedIntIterator struct { + Event *ERC20CustodyTestLogNamedInt // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *ERC20CustodyTestLogNamedIntIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(ERC20CustodyTestLogNamedInt) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(ERC20CustodyTestLogNamedInt) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *ERC20CustodyTestLogNamedIntIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *ERC20CustodyTestLogNamedIntIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// ERC20CustodyTestLogNamedInt represents a LogNamedInt event raised by the ERC20CustodyTest contract. +type ERC20CustodyTestLogNamedInt struct { + Key string + Val *big.Int + Raw types.Log // Blockchain specific contextual infos +} + +// FilterLogNamedInt is a free log retrieval operation binding the contract event 0x2fe632779174374378442a8e978bccfbdcc1d6b2b0d81f7e8eb776ab2286f168. +// +// Solidity: event log_named_int(string key, int256 val) +func (_ERC20CustodyTest *ERC20CustodyTestFilterer) FilterLogNamedInt(opts *bind.FilterOpts) (*ERC20CustodyTestLogNamedIntIterator, error) { + + logs, sub, err := _ERC20CustodyTest.contract.FilterLogs(opts, "log_named_int") + if err != nil { + return nil, err + } + return &ERC20CustodyTestLogNamedIntIterator{contract: _ERC20CustodyTest.contract, event: "log_named_int", logs: logs, sub: sub}, nil +} + +// WatchLogNamedInt is a free log subscription operation binding the contract event 0x2fe632779174374378442a8e978bccfbdcc1d6b2b0d81f7e8eb776ab2286f168. +// +// Solidity: event log_named_int(string key, int256 val) +func (_ERC20CustodyTest *ERC20CustodyTestFilterer) WatchLogNamedInt(opts *bind.WatchOpts, sink chan<- *ERC20CustodyTestLogNamedInt) (event.Subscription, error) { + + logs, sub, err := _ERC20CustodyTest.contract.WatchLogs(opts, "log_named_int") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(ERC20CustodyTestLogNamedInt) + if err := _ERC20CustodyTest.contract.UnpackLog(event, "log_named_int", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseLogNamedInt is a log parse operation binding the contract event 0x2fe632779174374378442a8e978bccfbdcc1d6b2b0d81f7e8eb776ab2286f168. +// +// Solidity: event log_named_int(string key, int256 val) +func (_ERC20CustodyTest *ERC20CustodyTestFilterer) ParseLogNamedInt(log types.Log) (*ERC20CustodyTestLogNamedInt, error) { + event := new(ERC20CustodyTestLogNamedInt) + if err := _ERC20CustodyTest.contract.UnpackLog(event, "log_named_int", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// ERC20CustodyTestLogNamedStringIterator is returned from FilterLogNamedString and is used to iterate over the raw logs and unpacked data for LogNamedString events raised by the ERC20CustodyTest contract. +type ERC20CustodyTestLogNamedStringIterator struct { + Event *ERC20CustodyTestLogNamedString // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *ERC20CustodyTestLogNamedStringIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(ERC20CustodyTestLogNamedString) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(ERC20CustodyTestLogNamedString) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *ERC20CustodyTestLogNamedStringIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *ERC20CustodyTestLogNamedStringIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// ERC20CustodyTestLogNamedString represents a LogNamedString event raised by the ERC20CustodyTest contract. +type ERC20CustodyTestLogNamedString struct { + Key string + Val string + Raw types.Log // Blockchain specific contextual infos +} + +// FilterLogNamedString is a free log retrieval operation binding the contract event 0x280f4446b28a1372417dda658d30b95b2992b12ac9c7f378535f29a97acf3583. +// +// Solidity: event log_named_string(string key, string val) +func (_ERC20CustodyTest *ERC20CustodyTestFilterer) FilterLogNamedString(opts *bind.FilterOpts) (*ERC20CustodyTestLogNamedStringIterator, error) { + + logs, sub, err := _ERC20CustodyTest.contract.FilterLogs(opts, "log_named_string") + if err != nil { + return nil, err + } + return &ERC20CustodyTestLogNamedStringIterator{contract: _ERC20CustodyTest.contract, event: "log_named_string", logs: logs, sub: sub}, nil +} + +// WatchLogNamedString is a free log subscription operation binding the contract event 0x280f4446b28a1372417dda658d30b95b2992b12ac9c7f378535f29a97acf3583. +// +// Solidity: event log_named_string(string key, string val) +func (_ERC20CustodyTest *ERC20CustodyTestFilterer) WatchLogNamedString(opts *bind.WatchOpts, sink chan<- *ERC20CustodyTestLogNamedString) (event.Subscription, error) { + + logs, sub, err := _ERC20CustodyTest.contract.WatchLogs(opts, "log_named_string") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(ERC20CustodyTestLogNamedString) + if err := _ERC20CustodyTest.contract.UnpackLog(event, "log_named_string", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseLogNamedString is a log parse operation binding the contract event 0x280f4446b28a1372417dda658d30b95b2992b12ac9c7f378535f29a97acf3583. +// +// Solidity: event log_named_string(string key, string val) +func (_ERC20CustodyTest *ERC20CustodyTestFilterer) ParseLogNamedString(log types.Log) (*ERC20CustodyTestLogNamedString, error) { + event := new(ERC20CustodyTestLogNamedString) + if err := _ERC20CustodyTest.contract.UnpackLog(event, "log_named_string", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// ERC20CustodyTestLogNamedUintIterator is returned from FilterLogNamedUint and is used to iterate over the raw logs and unpacked data for LogNamedUint events raised by the ERC20CustodyTest contract. +type ERC20CustodyTestLogNamedUintIterator struct { + Event *ERC20CustodyTestLogNamedUint // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *ERC20CustodyTestLogNamedUintIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(ERC20CustodyTestLogNamedUint) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(ERC20CustodyTestLogNamedUint) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *ERC20CustodyTestLogNamedUintIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *ERC20CustodyTestLogNamedUintIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// ERC20CustodyTestLogNamedUint represents a LogNamedUint event raised by the ERC20CustodyTest contract. +type ERC20CustodyTestLogNamedUint struct { + Key string + Val *big.Int + Raw types.Log // Blockchain specific contextual infos +} + +// FilterLogNamedUint is a free log retrieval operation binding the contract event 0xb2de2fbe801a0df6c0cbddfd448ba3c41d48a040ca35c56c8196ef0fcae721a8. +// +// Solidity: event log_named_uint(string key, uint256 val) +func (_ERC20CustodyTest *ERC20CustodyTestFilterer) FilterLogNamedUint(opts *bind.FilterOpts) (*ERC20CustodyTestLogNamedUintIterator, error) { + + logs, sub, err := _ERC20CustodyTest.contract.FilterLogs(opts, "log_named_uint") + if err != nil { + return nil, err + } + return &ERC20CustodyTestLogNamedUintIterator{contract: _ERC20CustodyTest.contract, event: "log_named_uint", logs: logs, sub: sub}, nil +} + +// WatchLogNamedUint is a free log subscription operation binding the contract event 0xb2de2fbe801a0df6c0cbddfd448ba3c41d48a040ca35c56c8196ef0fcae721a8. +// +// Solidity: event log_named_uint(string key, uint256 val) +func (_ERC20CustodyTest *ERC20CustodyTestFilterer) WatchLogNamedUint(opts *bind.WatchOpts, sink chan<- *ERC20CustodyTestLogNamedUint) (event.Subscription, error) { + + logs, sub, err := _ERC20CustodyTest.contract.WatchLogs(opts, "log_named_uint") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(ERC20CustodyTestLogNamedUint) + if err := _ERC20CustodyTest.contract.UnpackLog(event, "log_named_uint", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseLogNamedUint is a log parse operation binding the contract event 0xb2de2fbe801a0df6c0cbddfd448ba3c41d48a040ca35c56c8196ef0fcae721a8. +// +// Solidity: event log_named_uint(string key, uint256 val) +func (_ERC20CustodyTest *ERC20CustodyTestFilterer) ParseLogNamedUint(log types.Log) (*ERC20CustodyTestLogNamedUint, error) { + event := new(ERC20CustodyTestLogNamedUint) + if err := _ERC20CustodyTest.contract.UnpackLog(event, "log_named_uint", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// ERC20CustodyTestLogStringIterator is returned from FilterLogString and is used to iterate over the raw logs and unpacked data for LogString events raised by the ERC20CustodyTest contract. +type ERC20CustodyTestLogStringIterator struct { + Event *ERC20CustodyTestLogString // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *ERC20CustodyTestLogStringIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(ERC20CustodyTestLogString) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(ERC20CustodyTestLogString) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *ERC20CustodyTestLogStringIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *ERC20CustodyTestLogStringIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// ERC20CustodyTestLogString represents a LogString event raised by the ERC20CustodyTest contract. +type ERC20CustodyTestLogString struct { + Arg0 string + Raw types.Log // Blockchain specific contextual infos +} + +// FilterLogString is a free log retrieval operation binding the contract event 0x0b2e13ff20ac7b474198655583edf70dedd2c1dc980e329c4fbb2fc0748b796b. +// +// Solidity: event log_string(string arg0) +func (_ERC20CustodyTest *ERC20CustodyTestFilterer) FilterLogString(opts *bind.FilterOpts) (*ERC20CustodyTestLogStringIterator, error) { + + logs, sub, err := _ERC20CustodyTest.contract.FilterLogs(opts, "log_string") + if err != nil { + return nil, err + } + return &ERC20CustodyTestLogStringIterator{contract: _ERC20CustodyTest.contract, event: "log_string", logs: logs, sub: sub}, nil +} + +// WatchLogString is a free log subscription operation binding the contract event 0x0b2e13ff20ac7b474198655583edf70dedd2c1dc980e329c4fbb2fc0748b796b. +// +// Solidity: event log_string(string arg0) +func (_ERC20CustodyTest *ERC20CustodyTestFilterer) WatchLogString(opts *bind.WatchOpts, sink chan<- *ERC20CustodyTestLogString) (event.Subscription, error) { + + logs, sub, err := _ERC20CustodyTest.contract.WatchLogs(opts, "log_string") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(ERC20CustodyTestLogString) + if err := _ERC20CustodyTest.contract.UnpackLog(event, "log_string", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseLogString is a log parse operation binding the contract event 0x0b2e13ff20ac7b474198655583edf70dedd2c1dc980e329c4fbb2fc0748b796b. +// +// Solidity: event log_string(string arg0) +func (_ERC20CustodyTest *ERC20CustodyTestFilterer) ParseLogString(log types.Log) (*ERC20CustodyTestLogString, error) { + event := new(ERC20CustodyTestLogString) + if err := _ERC20CustodyTest.contract.UnpackLog(event, "log_string", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// ERC20CustodyTestLogUintIterator is returned from FilterLogUint and is used to iterate over the raw logs and unpacked data for LogUint events raised by the ERC20CustodyTest contract. +type ERC20CustodyTestLogUintIterator struct { + Event *ERC20CustodyTestLogUint // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *ERC20CustodyTestLogUintIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(ERC20CustodyTestLogUint) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(ERC20CustodyTestLogUint) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *ERC20CustodyTestLogUintIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *ERC20CustodyTestLogUintIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// ERC20CustodyTestLogUint represents a LogUint event raised by the ERC20CustodyTest contract. +type ERC20CustodyTestLogUint struct { + Arg0 *big.Int + Raw types.Log // Blockchain specific contextual infos +} + +// FilterLogUint is a free log retrieval operation binding the contract event 0x2cab9790510fd8bdfbd2115288db33fec66691d476efc5427cfd4c0969301755. +// +// Solidity: event log_uint(uint256 arg0) +func (_ERC20CustodyTest *ERC20CustodyTestFilterer) FilterLogUint(opts *bind.FilterOpts) (*ERC20CustodyTestLogUintIterator, error) { + + logs, sub, err := _ERC20CustodyTest.contract.FilterLogs(opts, "log_uint") + if err != nil { + return nil, err + } + return &ERC20CustodyTestLogUintIterator{contract: _ERC20CustodyTest.contract, event: "log_uint", logs: logs, sub: sub}, nil +} + +// WatchLogUint is a free log subscription operation binding the contract event 0x2cab9790510fd8bdfbd2115288db33fec66691d476efc5427cfd4c0969301755. +// +// Solidity: event log_uint(uint256 arg0) +func (_ERC20CustodyTest *ERC20CustodyTestFilterer) WatchLogUint(opts *bind.WatchOpts, sink chan<- *ERC20CustodyTestLogUint) (event.Subscription, error) { + + logs, sub, err := _ERC20CustodyTest.contract.WatchLogs(opts, "log_uint") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(ERC20CustodyTestLogUint) + if err := _ERC20CustodyTest.contract.UnpackLog(event, "log_uint", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseLogUint is a log parse operation binding the contract event 0x2cab9790510fd8bdfbd2115288db33fec66691d476efc5427cfd4c0969301755. +// +// Solidity: event log_uint(uint256 arg0) +func (_ERC20CustodyTest *ERC20CustodyTestFilterer) ParseLogUint(log types.Log) (*ERC20CustodyTestLogUint, error) { + event := new(ERC20CustodyTestLogUint) + if err := _ERC20CustodyTest.contract.UnpackLog(event, "log_uint", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// ERC20CustodyTestLogsIterator is returned from FilterLogs and is used to iterate over the raw logs and unpacked data for Logs events raised by the ERC20CustodyTest contract. +type ERC20CustodyTestLogsIterator struct { + Event *ERC20CustodyTestLogs // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *ERC20CustodyTestLogsIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(ERC20CustodyTestLogs) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(ERC20CustodyTestLogs) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *ERC20CustodyTestLogsIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *ERC20CustodyTestLogsIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// ERC20CustodyTestLogs represents a Logs event raised by the ERC20CustodyTest contract. +type ERC20CustodyTestLogs struct { + Arg0 []byte + Raw types.Log // Blockchain specific contextual infos +} + +// FilterLogs is a free log retrieval operation binding the contract event 0xe7950ede0394b9f2ce4a5a1bf5a7e1852411f7e6661b4308c913c4bfd11027e4. +// +// Solidity: event logs(bytes arg0) +func (_ERC20CustodyTest *ERC20CustodyTestFilterer) FilterLogs(opts *bind.FilterOpts) (*ERC20CustodyTestLogsIterator, error) { + + logs, sub, err := _ERC20CustodyTest.contract.FilterLogs(opts, "logs") + if err != nil { + return nil, err + } + return &ERC20CustodyTestLogsIterator{contract: _ERC20CustodyTest.contract, event: "logs", logs: logs, sub: sub}, nil +} + +// WatchLogs is a free log subscription operation binding the contract event 0xe7950ede0394b9f2ce4a5a1bf5a7e1852411f7e6661b4308c913c4bfd11027e4. +// +// Solidity: event logs(bytes arg0) +func (_ERC20CustodyTest *ERC20CustodyTestFilterer) WatchLogs(opts *bind.WatchOpts, sink chan<- *ERC20CustodyTestLogs) (event.Subscription, error) { + + logs, sub, err := _ERC20CustodyTest.contract.WatchLogs(opts, "logs") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(ERC20CustodyTestLogs) + if err := _ERC20CustodyTest.contract.UnpackLog(event, "logs", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseLogs is a log parse operation binding the contract event 0xe7950ede0394b9f2ce4a5a1bf5a7e1852411f7e6661b4308c913c4bfd11027e4. +// +// Solidity: event logs(bytes arg0) +func (_ERC20CustodyTest *ERC20CustodyTestFilterer) ParseLogs(log types.Log) (*ERC20CustodyTestLogs, error) { + event := new(ERC20CustodyTestLogs) + if err := _ERC20CustodyTest.contract.UnpackLog(event, "logs", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} diff --git a/v2/pkg/erc20custodyechidnatest.sol/erc20custodyechidnatest.go b/v2/pkg/erc20custodyechidnatest.sol/erc20custodyechidnatest.go index 2d06346e..57a5f35d 100644 --- a/v2/pkg/erc20custodyechidnatest.sol/erc20custodyechidnatest.go +++ b/v2/pkg/erc20custodyechidnatest.sol/erc20custodyechidnatest.go @@ -32,7 +32,7 @@ var ( // ERC20CustodyEchidnaTestMetaData contains all meta data concerning the ERC20CustodyEchidnaTest contract. var ERC20CustodyEchidnaTestMetaData = &bind.MetaData{ ABI: "[{\"type\":\"constructor\",\"inputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"DEFAULT_ADMIN_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"PAUSER_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"WITHDRAWER_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"echidnaCaller\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"gateway\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIGatewayEVM\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getRoleAdmin\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"grantRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"hasRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"pause\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"paused\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"renounceRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"callerConfirmation\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"revokeRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"supportsInterface\",\"inputs\":[{\"name\":\"interfaceId\",\"type\":\"bytes4\",\"internalType\":\"bytes4\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"testERC20\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractTestERC20\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"testWithdrawAndCall\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"unpause\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"withdraw\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"withdrawAndCall\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"withdrawAndRevert\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"event\",\"name\":\"Paused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleAdminChanged\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"previousAdminRole\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"newAdminRole\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleGranted\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleRevoked\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Unpaused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Withdraw\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"WithdrawAndCall\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"WithdrawAndRevert\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"AccessControlBadConfirmation\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"AccessControlUnauthorizedAccount\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"neededRole\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"type\":\"error\",\"name\":\"AddressEmptyCode\",\"inputs\":[{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"AddressInsufficientBalance\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"EnforcedPause\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ExpectedPause\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"FailedInnerCall\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ReentrancyGuardReentrantCall\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"SafeERC20FailedOperation\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"ZeroAddress\",\"inputs\":[]}]", - Bin: "0x600380546001600160a01b03191633908117909155600e60a09081526d11d85d195dd85e5155934b9cdbdb60921b60c0526101049190915261012361012481905261014452606460e090815261016460405261010080516001600160e01b0390811663c0c53b8b60e01b1790915261007992919061026316565b600480546001600160a01b03929092166001600160a01b03199283168117909155600580549092161790553480156100b057600080fd5b5060055460035460016000556002805460ff191690556001600160a01b039182169116808215806100e857506001600160a01b038216155b806100fa57506001600160a01b038116155b156101185760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b038316608052610130600082610282565b5061015b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a82610282565b506101867f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e483610282565b505050506040516101969061380e565b60408082526004908201819052631d195cdd60e21b606083015260806020830181905282015263151154d560e21b60a082015260c001604051809103906000f0801580156101e8573d6000803e3d6000fd5b5060028054610100600160a81b0319166101006001600160a01b039384160217905560055460405163ae7a3a6f60e01b815230600482015291169063ae7a3a6f90602401600060405180830381600087803b15801561024657600080fd5b505af115801561025a573d6000803e3d6000fd5b5050505061488f565b600061026d61381b565b610278848483610315565b9150505b92915050565b60008281526001602090815260408083206001600160a01b038516845290915281205460ff1661030d5760008381526001602081815260408084206001600160a01b0387168086529252808420805460ff19169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a450600161027c565b50600061027c565b6000806103228584610391565b90506103866040518060400160405280601d81526020017f4552433139363750726f78792e736f6c3a4552433139363750726f78790000008152508286604051602001610370929190613924565b60408051601f198184030181529190528561039d565b9150505b9392505050565b600061038a83836103d1565b60c081015151600090156103c7576103c084848460c001516103f260201b60201c565b905061038a565b6103c0848461056b565b60006103dd8383610638565b61038a8383602001518461039d60201b60201c565b6000806103fd610648565b9050600061040b86836106e2565b905060006104288260600151836020015185610b0560201b60201c565b9050600061043883838989610cba565b9050600061044582611936565b602081015181519192509060030b1561049e5789826040015160405160200161046f929190613948565b60408051601f198184030181529082905262461bcd60e51b8252610495916004016139ae565b60405180910390fd5b60006104e76040518060400160405280601581526020017f4465706c6f79656420746f20616464726573733a200000000000000000000000815250836001611acd60201b60201c565b60405163c6ce059d60e01b8152909150600080516020616b378339815191529063c6ce059d9061051b9084906004016139ae565b602060405180830381865afa158015610538573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061055c91906139c1565b9b9a5050505050505050505050565b604051638d1cc92560e01b81526000908190600080516020616b3783398151915290638d1cc925906105a19087906004016139ae565b600060405180830381865afa1580156105be573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526105e69190810190613ab6565b905060006106158285604051602001610600929190613aea565b60408051601f19818403018152919052611c6d565b90506001600160a01b03811661027857848460405160200161046f929190613b19565b61064482826000611c80565b5050565b60408051808201825260038152621bdd5d60ea1b602082015290516334515cdb60e21b8152606091600080516020616b3783398151915291829063d145736c90610696908490600401613ba8565b600060405180830381865afa1580156106b3573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526106db9190810190613bdd565b9250505090565b6107146040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b6000600080516020616b3783398151915290506107596040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b61076285611d5a565b6020820152600061077286611faf565b90506000836001600160a01b031663d930a0e66040518163ffffffff1660e01b8152600401600060405180830381865afa1580156107b4573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526107dc9190810190613bdd565b868385602001516040516020016107f69493929190613c25565b60408051601f19818403018152908290526360f9bb1160e01b825291506000906001600160a01b038616906360f9bb11906108359085906004016139ae565b600060405180830381865afa158015610852573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261087a9190810190613bdd565b604051636da11afb60e11b81529091506001600160a01b0386169063db4235f6906108a9908490600401613cbd565b602060405180830381865afa1580156108c6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108ea9190613cf6565b6108ff578160405160200161046f9190613d18565b6040516309389f5960e31b81526001600160a01b038616906349c4fac89061092b908490600401613d8f565b600060405180830381865afa158015610948573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526109709190810190613bdd565b8452604051636da11afb60e11b81526001600160a01b0386169063db4235f69061099e908490600401613dd5565b602060405180830381865afa1580156109bb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109df9190613cf6565b15610a5b576040516309389f5960e31b81526001600160a01b038616906349c4fac890610a10908490600401613dd5565b600060405180830381865afa158015610a2d573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610a559190810190613bdd565b60408501525b846001600160a01b03166349c4fac8828660000151604051602001610a809190613e16565b6040516020818303038152906040526040518363ffffffff1660e01b8152600401610aac929190613e71565b600060405180830381865afa158015610ac9573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610af19190810190613bdd565b606085015250608083015250949350505050565b60408051600480825260a0820190925260609160009190816020015b6060815260200190600190039081610b21579050509050604051806040016040528060048152602001630677265760e41b81525081600081518110610b6857610b68613e96565b6020026020010181905250604051806040016040528060038152602001620b5c9b60ea1b81525081600181518110610ba257610ba2613e96565b602002602001018190525084604051602001610bbe9190613eac565b60405160208183030381529060405281600281518110610be057610be0613e96565b602002602001018190525082604051602001610bfc9190613ee1565b60405160208183030381529060405281600381518110610c1e57610c1e613e96565b60209081029190910101526000610c3482611936565b9050600081602001519050610c9b610c6e60405180604001604052806005815260200164173539b7b760d91b81525061213260201b60201c565b6040805180820182526000808252602091820152815180830190925284518252808501908201529061215f565b610cb0578560405160200161046f9190613f10565b9695505050505050565b60a0810151604080518082018252600080825260209182015281518083019092528251808352928101910152606090600080516020616b378339815191529015610d04565b511590565b610e2057826020015115610d945760405162461bcd60e51b81526020600482015260586024820152600080516020616b5783398151915260448201527f62652075736564207768656e207468652060736b6970566572696679536f757260648201527f6365436f646560206f7074696f6e206973206074727565600000000000000000608482015260a401610495565b8260c0015115610e205760405162461bcd60e51b81526020600482015260536024820152600080516020616b5783398151915260448201527f62652075736564207768656e207468652060736b69704c6963656e736554797060648201527f6560206f7074696f6e2069732060747275656000000000000000000000000000608482015260a401610495565b6040805160ff8082526120008201909252600091816020015b6060815260200190600190039081610e395790505090506000604051806040016040528060038152602001620dce0f60eb1b815250828280610e7a90613fa5565b935060ff1681518110610e8f57610e8f613e96565b60200260200101819052506040518060400160405280600d81526020016c302e302e312d616c7068612e3760981b815250604051602001610ed09190613fc4565b604051602081830303815290604052828280610eeb90613fa5565b935060ff1681518110610f0057610f00613e96565b6020026020010181905250604051806040016040528060068152602001656465706c6f7960d01b815250828280610f3690613fa5565b935060ff1681518110610f4b57610f4b613e96565b60200260200101819052506040518060400160405280600e81526020016d2d2d636f6e74726163744e616d6560901b815250828280610f8990613fa5565b935060ff1681518110610f9e57610f9e613e96565b60200260200101819052508760200151828280610fba90613fa5565b935060ff1681518110610fcf57610fcf613e96565b60200260200101819052506040518060400160405280600e81526020016d05a5ac6dedce8e4c2c6e8a0c2e8d60931b81525082828061100d90613fa5565b935060ff168151811061102257611022613e96565b60209081029190910101528751828261103a81613fa5565b935060ff168151811061104f5761104f613e96565b6020026020010181905250604051806040016040528060098152602001680b4b58da185a5b925960ba1b81525082828061108890613fa5565b935060ff168151811061109d5761109d613e96565b60209081029190910101526110b1466121c0565b82826110bc81613fa5565b935060ff16815181106110d1576110d1613e96565b60200260200101819052506040518060400160405280600f81526020016e2d2d6275696c64496e666f46696c6560881b81525082828061111090613fa5565b935060ff168151811061112557611125613e96565b60200260200101819052508682828061113d90613fa5565b935060ff168151811061115257611152613e96565b60209081029190910101528551156112605760408051808201909152601581527f2d2d636f6e7374727563746f7242797465636f64650000000000000000000000602082015282826111a381613fa5565b935060ff16815181106111b8576111b8613e96565b60209081029190910101526040516371aad10d60e01b81526001600160a01b038416906371aad10d906111ef9089906004016139ae565b600060405180830381865afa15801561120c573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526112349190810190613bdd565b828261123f81613fa5565b935060ff168151811061125457611254613e96565b60200260200101819052505b84602001511561130d576040805180820190915260128152712d2d766572696679536f75726365436f646560701b6020820152828261129e81613fa5565b935060ff16815181106112b3576112b3613e96565b60200260200101819052506040518060400160405280600581526020016466616c736560d81b8152508282806112e890613fa5565b935060ff16815181106112fd576112fd613e96565b6020026020010181905250611474565b611323610cff8660a0015161213260201b60201c565b6113a65760408051808201909152600d81526c2d2d6c6963656e73655479706560981b6020820152828261135681613fa5565b935060ff168151811061136b5761136b613e96565b60200260200101819052508460a0015160405160200161138b9190613eac565b6040516020818303038152906040528282806112e890613fa5565b8460c001511580156113cb57506113c9610cff896040015161213260201b60201c565b155b156114745760408051808201909152600d81526c2d2d6c6963656e73655479706560981b602082015282826113ff81613fa5565b935060ff168151811061141457611414613e96565b602090810291909101015261142888612252565b6040516020016114389190613eac565b60405160208183030381529060405282828061145390613fa5565b935060ff168151811061146857611468613e96565b60200260200101819052505b61148a610cff866040015161213260201b60201c565b61150d5760408051808201909152600b81526a0b4b5c995b185e595c925960aa1b602082015282826114bb81613fa5565b935060ff16815181106114d0576114d0613e96565b602002602001018190525084604001518282806114ec90613fa5565b935060ff168151811061150157611501613e96565b60200260200101819052505b6060850151156115fe576040805180820190915260068152650b4b5cd85b1d60d21b6020820152828261153f81613fa5565b935060ff168151811061155457611554613e96565b60209081029190910101526060850151604051631623433d60e31b815260048101919091526001600160a01b0384169063b11a19e890602401600060405180830381865afa1580156115aa573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526115d29190810190613bdd565b82826115dd81613fa5565b935060ff16815181106115f2576115f2613e96565b60200260200101819052505b60e085015151156116905760408051808201909152600a8152690b4b59d85cd31a5b5a5d60b21b6020820152828261163581613fa5565b935060ff168151811061164a5761164a613e96565b602090810291909101015260e085015151611664906121c0565b828261166f81613fa5565b935060ff168151811061168457611684613e96565b60200260200101819052505b60e0850151602001511561172d5760408051808201909152600a8152692d2d676173507269636560b01b602082015282826116ca81613fa5565b935060ff16815181106116df576116df613e96565b60200260200101819052506117018560e00151602001516121c060201b60201c565b828261170c81613fa5565b935060ff168151811061172157611721613e96565b60200260200101819052505b60e085015160400151156117ce5760408051808201909152600e81526d2d2d6d617846656550657247617360901b6020820152828261176b81613fa5565b935060ff168151811061178057611780613e96565b60200260200101819052506117a28560e00151604001516121c060201b60201c565b82826117ad81613fa5565b935060ff16815181106117c2576117c2613e96565b60200260200101819052505b60e0850151606001511561187e5760408051808201909152601681527f2d2d6d61785072696f72697479466565506572476173000000000000000000006020820152828261181b81613fa5565b935060ff168151811061183057611830613e96565b60200260200101819052506118528560e00151606001516121c060201b60201c565b828261185d81613fa5565b935060ff168151811061187257611872613e96565b60200260200101819052505b60008160ff166001600160401b0381111561189b5761189b6139ea565b6040519080825280602002602001820160405280156118ce57816020015b60608152602001906001900390816118b95790505b50905060005b8260ff168160ff16101561192757838160ff16815181106118f7576118f7613e96565b6020026020010151828260ff168151811061191457611914613e96565b60209081029190910101526001016118d4565b5093505050505b949350505050565b61195d6040518060600160405280600060030b815260200160608152602001606081525090565b6040805180820182526004808252630c4c2e6d60e31b602083015291516334515cdb60e21b8152600080516020616b3783398151915292600091849163d145736c916119ab9186910161401b565b600060405180830381865afa1580156119c8573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526119f09190810190613bdd565b905060006119fe8683612908565b90506000846001600160a01b031663f45c1ce7836040518263ffffffff1660e01b8152600401611a2e9190614062565b6000604051808303816000875af1158015611a4d573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611a7591908101906140c7565b805190915060030b15801590611a8e5750602081015151155b8015611a9d5750604081015151155b15610cb05781600081518110611ab557611ab5613e96565b602002602001015160405160200161046f919061417a565b60606000611b028560408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600080825260209182015281518083019092528651825280870190820152909150611b399082905b90612a42565b15611c36576000611bb682611bb081611baa611b7c8a60408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6040805180820182526000808252602091820152815180830190925282518252918201519181019190915290565b90612a69565b90612ac6565b9050611bea611be3604051806040016040528060018152602001600560f91b81525061213260201b60201c565b8290612a42565b15611c2457611c21611c1a604051806040016040528060018152602001600560f91b81525061213260201b60201c565b8290612b4b565b90505b611c2d81612b71565b9250505061038a565b8215611c4f57848460405160200161046f92919061434a565b505060408051602081019091526000815261038a565b509392505050565b6000808251602084016000f09392505050565b8160a0015115611c8f57505050565b6000611c9c848484612bd6565b90506000611ca982611936565b602081015181519192509060030b158015611d1c5750611d1c611cf0604051806040016040528060078152602001665355434345535360c81b81525061213260201b60201c565b604080518082018252600080825260209182015281518083019092528451825280850190820152611b33565b15611d2957505050505050565b60408201515115611d4957816040015160405160200161046f91906143c5565b8060405160200161046f919061440f565b60606000611d8f8360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b9050611dc6611dbf604051806040016040528060048152602001630b9cdbdb60e21b81525061213260201b60201c565b829061215f565b15611e085761038a611e03611dfc604051806040016040528060048152602001630b9cdbdb60e21b81525061213260201b60201c565b83906130e9565b612b71565b611e3a611e33604051806040016040528060018152602001601d60f91b81525061213260201b60201c565b8290613173565b600103611ea257611e6c611c1a604051806040016040528060018152602001601d60f91b81525061213260201b60201c565b5061038a611e03611e9b604051806040016040528060018152602001601d60f91b81525061213260201b60201c565b8390612b4b565b611ed1611dbf60405180604001604052806005815260200164173539b7b760d91b81525061213260201b60201c565b15611f9e576000611f0982611f04604051806040016040528060018152602001602f60f81b81525061213260201b60201c565b613208565b905060008160018351611f1c919061445f565b81518110611f2c57611f2c613e96565b60200260200101519050611f95611e03611f6860405180604001604052806005815260200164173539b7b760d91b81525061213260201b60201c565b604080518082018252600080825260209182015281518083019092528551825280860190820152906130e9565b95945050505050565b8260405160200161046f9190614472565b60606000611fe48360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b9050612014611dbf604051806040016040528060048152602001630b9cdbdb60e21b81525061213260201b60201c565b156120225761038a81612b71565b61204d611e33604051806040016040528060018152602001601d60f91b81525061213260201b60201c565b6001036120825761038a611e03611e9b604051806040016040528060018152602001601d60f91b81525061213260201b60201c565b6120b1611dbf60405180604001604052806005815260200164173539b7b760d91b81525061213260201b60201c565b15611f9e5760006120e482611f04604051806040016040528060018152602001602f60f81b81525061213260201b60201c565b90506001815111156121205780600282516120ff919061445f565b8151811061210f5761210f613e96565b602002602001015192505050919050565b508260405160200161046f9190614472565b60408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b8051825160009111156121745750600061027c565b8151835160208501516000929161218a9161452c565b612194919061445f565b9050826020015181036121ab57600191505061027c565b82516020840151819020912014905092915050565b606060006121cd836132ac565b60010190506000816001600160401b038111156121ec576121ec6139ea565b6040519080825280601f01601f191660200182016040528015612216576020820181803683370190505b5090508181016020015b600019016f181899199a1a9b1b9c1cb0b131b232b360811b600a86061a8153600a850494508461222057509392505050565b60606000612269836040015161213260201b60201c565b90506122a661229f6040518060400160405280600a8152602001691553931250d15394d15160b21b81525061213260201b60201c565b829061338e565b156122cd5750506040805180820190915260048152634e6f6e6560e01b6020820152919050565b61230061229f60405180604001604052806009815260200168556e6c6963656e736560b81b81525061213260201b60201c565b1561232c575050604080518082019091526009815268556e6c6963656e736560b81b6020820152919050565b61235961229f6040518060400160405280600381526020016213525560ea1b81525061213260201b60201c565b1561237f57505060408051808201909152600381526213525560ea1b6020820152919050565b6123b561229f6040518060400160405280600c81526020016b47504c2d322e302d6f6e6c7960a01b81525061213260201b60201c565b806123f557506123f561229f6040518060400160405280601081526020016f23a8261699171816b7b916b630ba32b960811b81525061213260201b60201c565b1561242157505060408051808201909152600981526823a72a9023a8263b1960b91b6020820152919050565b61245761229f6040518060400160405280600c81526020016b47504c2d332e302d6f6e6c7960a01b81525061213260201b60201c565b80612497575061249761229f6040518060400160405280601081526020016f23a8261699971816b7b916b630ba32b960811b81525061213260201b60201c565b156124c3575050604080518082019091526009815268474e552047504c763360b81b6020820152919050565b6124fa61229f6040518060400160405280600d81526020016c4c47504c2d322e312d6f6e6c7960981b81525061213260201b60201c565b8061253b575061253b61229f604051806040016040528060118152602001702623a8261699171896b7b916b630ba32b960791b81525061213260201b60201c565b1561256a57505060408051808201909152600c81526b474e55204c47504c76322e3160a01b6020820152919050565b6125a161229f6040518060400160405280600d81526020016c4c47504c2d332e302d6f6e6c7960981b81525061213260201b60201c565b806125e257506125e261229f604051806040016040528060118152602001702623a8261699971816b7b916b630ba32b960791b81525061213260201b60201c565b1561260f57505060408051808201909152600a815269474e55204c47504c763360b01b6020820152919050565b61264561229f6040518060400160405280600c81526020016b4253442d322d436c6175736560a01b81525061213260201b60201c565b1561267457505060408051808201909152600c81526b4253442d322d436c6175736560a01b6020820152919050565b6126aa61229f6040518060400160405280600c81526020016b4253442d332d436c6175736560a01b81525061213260201b60201c565b156126d957505060408051808201909152600c81526b4253442d332d436c6175736560a01b6020820152919050565b61270a61229f6040518060400160405280600781526020016604d504c2d322e360cc1b81525061213260201b60201c565b1561273457505060408051808201909152600781526604d504c2d322e360cc1b6020820152919050565b61276561229f6040518060400160405280600781526020016604f534c2d332e360cc1b81525061213260201b60201c565b1561278f57505060408051808201909152600781526604f534c2d332e360cc1b6020820152919050565b6127c361229f6040518060400160405280600a81526020016904170616368652d322e360b41b81525061213260201b60201c565b156127f057505060408051808201909152600a81526904170616368652d322e360b41b6020820152919050565b61282761229f6040518060400160405280600d81526020016c4147504c2d332e302d6f6e6c7960981b81525061213260201b60201c565b80612868575061286861229f6040518060400160405280601181526020017020a3a8261699971816b7b916b630ba32b960791b81525061213260201b60201c565b1561289557505060408051808201909152600a815269474e55204147504c763360b01b6020820152919050565b6128c761229f604051806040016040528060088152602001674255534c2d312e3160c01b81525061213260201b60201c565b156128f157505060408051808201909152600781526642534c20312e3160c81b6020820152919050565b6040808401518451915161046f929060200161453f565b60608060005b8451811015612993578185828151811061292a5761292a613e96565b6020026020010151604051602001612943929190613aea565b604051602081830303815290604052915060018551612962919061445f565b811461298b5781604051602001612979919061468f565b60405160208183030381529060405291505b60010161290e565b5060408051600380825260808201909252600091816020015b60608152602001906001900390816129ac57905050905083816000815181106129d7576129d7613e96565b6020026020010181905250604051806040016040528060028152602001612d6360f01b81525081600181518110612a1057612a10613e96565b60200260200101819052508181600281518110612a2f57612a2f613e96565b6020908102919091010152949350505050565b6020808301518351835192840151600093612a6092918491906133a2565b14159392505050565b6040805180820190915260008082526020808301829052845185820151855192860151612a9693906134b3565b9050836020015181612aa8919061445f565b84518590612ab790839061445f565b90525060208401525090919050565b6040805180820190915260008082526020820152815183511015612aeb57508161027c565b6020808301519084015160019114612b125750815160208481015190840151829020919020145b8015612b4357825184518590612b2990839061445f565b9052508251602085018051612b3f90839061452c565b9052505b509192915050565b6040805180820190915260008082526020820152612b6a8383836135d3565b5092915050565b6060600082600001516001600160401b03811115612b9157612b916139ea565b6040519080825280601f01601f191660200182016040528015612bbb576020820181803683370190505b50602084810151855192935090830191612b6a918391613679565b60606000612be2610648565b6040805160ff808252612000820190925291925060009190816020015b6060815260200190600190039081612bff5790505090506000604051806040016040528060038152602001620dce0f60eb1b815250828280612c4090613fa5565b935060ff1681518110612c5557612c55613e96565b6020026020010181905250604051806040016040528060078152602001665e312e33322e3360c81b815250604051602001612c9091906146b4565b604051602081830303815290604052828280612cab90613fa5565b935060ff1681518110612cc057612cc0613e96565b60200260200101819052506040518060400160405280600881526020016776616c696461746560c01b815250828280612cf890613fa5565b935060ff1681518110612d0d57612d0d613e96565b602002602001018190525082604051602001612d299190613ee1565b604051602081830303815290604052828280612d4490613fa5565b935060ff1681518110612d5957612d59613e96565b60200260200101819052506040518060400160405280600a8152602001690b4b58dbdb9d1c9858dd60b21b815250828280612d9390613fa5565b935060ff1681518110612da857612da8613e96565b6020908102919091010152612dbd87846136f3565b8282612dc881613fa5565b935060ff1681518110612ddd57612ddd613e96565b602090810291909101015285515115612e755760408051808201909152600b81526a2d2d7265666572656e636560a81b60208201528282612e1d81613fa5565b935060ff1681518110612e3257612e32613e96565b60209081029190910101528551612e4990846136f3565b8282612e5481613fa5565b935060ff1681518110612e6957612e69613e96565b60200260200101819052505b856080015115612ee35760408051808201909152601881527f2d2d756e73616665536b697053746f72616765436865636b000000000000000060208201528282612ebe81613fa5565b935060ff1681518110612ed357612ed3613e96565b6020026020010181905250612f3e565b8415612f3e576040805180820190915260128152712d2d726571756972655265666572656e636560701b60208201528282612f1d81613fa5565b935060ff1681518110612f3257612f32613e96565b60200260200101819052505b60408601515115612fca5760408051808201909152600d81526c2d2d756e73616665416c6c6f7760981b60208201528282612f7881613fa5565b935060ff1681518110612f8d57612f8d613e96565b60200260200101819052508560400151828280612fa990613fa5565b935060ff1681518110612fbe57612fbe613e96565b60200260200101819052505b8560600151156130345760408051808201909152601481527f2d2d756e73616665416c6c6f7752656e616d65730000000000000000000000006020820152828261301381613fa5565b935060ff168151811061302857613028613e96565b60200260200101819052505b60008160ff166001600160401b03811115613051576130516139ea565b60405190808252806020026020018201604052801561308457816020015b606081526020019060019003908161306f5790505b50905060005b8260ff168160ff1610156130dd57838160ff16815181106130ad576130ad613e96565b6020026020010151828260ff16815181106130ca576130ca613e96565b602090810291909101015260010161308a565b50979650505050505050565b604080518082019091526000808252602082015281518351101561310e57508161027c565b815183516020850151600092916131249161452c565b61312e919061445f565b6020840151909150600190821461314f575082516020840151819020908220145b801561316a5783518551869061316690839061445f565b9052505b50929392505050565b8051825160208085015190840151600093849390926131939284906134b3565b61319d919061452c565b90505b835160208501516131b1919061452c565b8111612b6a57816131c1816146f9565b92505082600001516131f78560200151836131dc919061445f565b86516131e8919061445f565b855160208701518591906134b3565b613201919061452c565b90506131a0565b606060006132168484613173565b61322190600161452c565b6001600160401b03811115613238576132386139ea565b60405190808252806020026020018201604052801561326b57816020015b60608152602001906001900390816132565790505b50905060005b8151811015611c6557613287611e038686612b4b565b82828151811061329957613299613e96565b6020908102919091010152600101613271565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f01000000000000000083106132f5577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310613321576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc10000831061333f57662386f26fc10000830492506010015b6305f5e1008310613357576305f5e100830492506008015b612710831061336b57612710830492506004015b6064831061337d576064830492506002015b600a831061027c5760010192915050565b600061339a8383613733565b159392505050565b6000808584116134a9576020841161345557600084156133ed5760016133c986602061445f565b6133d4906008614712565b6133df906002614810565b6133e9919061445f565b1990505b83518116856133fc898961452c565b613406919061445f565b805190935082165b81811461344057878411613428578794505050505061192e565b836134328161481c565b94505082845116905061340e565b61344a878561452c565b94505050505061192e565b838320613462858861445f565b61346c908761452c565b91505b8582106134a7578482208082036134945761348a868461452c565b935050505061192e565b61349f60018461445f565b92505061346f565b505b5092949350505050565b600083818685116135be576020851161356d57600085156134ff5760016134db87602061445f565b6134e6906008614712565b6134f1906002614810565b6134fb919061445f565b1990505b845181166000876135108b8b61452c565b61351a919061445f565b855190915083165b82811461355f578186106135475761353a8b8b61452c565b965050505050505061192e565b85613551816146f9565b965050838651169050613522565b85965050505050505061192e565b508383206000905b61357f868961445f565b82116135bc5785832080820361359b578394505050505061192e565b6135a660018561452c565b93505081806135b4906146f9565b925050613575565b505b6135c8878761452c565b979650505050505050565b604080518082019091526000808252602080830182905285518682015186519287015161360093906134b3565b60208087018051918601919091525190915061361c908261445f565b83528451602086015161362f919061452c565b810361363e5760008552613670565b8351835161364c919061452c565b8551869061365b90839061445f565b905250835161366a908261452c565b60208601525b50909392505050565b602081106136b1578151835261369060208461452c565b925061369d60208361452c565b91506136aa60208261445f565b9050613679565b60001981156136e05760016136c783602061445f565b6136d390610100614810565b6136dd919061445f565b90505b9151835183169219169190911790915250565b6060600061370184846106e2565b805160208083015160405193945061371b93909101614833565b60405160208183030381529060405291505092915050565b8151815160009190811115613746575081515b6020808501519084015160005b838110156137ff57825182518082146137cf5760001960208710156137ae5760018461378089602061445f565b61378a919061452c565b613795906008614712565b6137a0906002614810565b6137aa919061445f565b1990505b81811683821681810391146137cc57975061027c9650505050505050565b50505b6137da60208661452c565b94506137e760208561452c565b935050506020816137f8919061452c565b9050613753565b5084518651610cb0919061486f565b610c9f80615e9883390190565b6040518060e0016040528060608152602001606081526020016060815260200160001515815260200160001515815260200160001515815260200161385e613863565b905290565b6040518061010001604052806000151581526020016000151581526020016060815260200160008019168152602001606081526020016060815260200160001515815260200161385e6040518060800160405280600081526020016000815260200160008152602001600081525090565b60005b838110156138ef5781810151838201526020016138d7565b50506000910152565b600081518084526139108160208601602086016138d4565b601f01601f19169290920160200192915050565b6001600160a01b038316815260406020820181905260009061192e908301846138f8565b7f4661696c656420746f206465706c6f7920636f6e74726163742000000000000081526000835161398081601a8501602088016138d4565b6101d160f51b601a9184019182015283516139a281601c8401602088016138d4565b01601c01949350505050565b60208152600061038a60208301846138f8565b6000602082840312156139d357600080fd5b81516001600160a01b038116811461038a57600080fd5b634e487b7160e01b600052604160045260246000fd5b604051606081016001600160401b0381118282101715613a2257613a226139ea565b60405290565b6000806001600160401b03841115613a4257613a426139ea565b50604051601f19601f85018116603f011681018181106001600160401b0382111715613a7057613a706139ea565b604052838152905080828401851015613a8857600080fd5b611c658460208301856138d4565b600082601f830112613aa757600080fd5b61038a83835160208501613a28565b600060208284031215613ac857600080fd5b81516001600160401b03811115613ade57600080fd5b61027884828501613a96565b60008351613afc8184602088016138d4565b835190830190613b108183602088016138d4565b01949350505050565b7f4661696c656420746f206465706c6f7920636f6e747261637420000000000000815260008351613b5181601a8501602088016138d4565b7f207573696e6720636f6e7374727563746f722064617461202200000000000000601a918401918201528351613b8e8160338401602088016138d4565b601160f91b60339290910191820152603401949350505050565b60408152600b60408201526a1193d55391149657d3d55560aa1b606082015260806020820152600061038a60808301846138f8565b600060208284031215613bef57600080fd5b81516001600160401b03811115613c0557600080fd5b8201601f81018413613c1657600080fd5b61027884825160208401613a28565b60008551613c37818460208a016138d4565b602f60f81b9083019081528551613c55816001840160208a016138d4565b602f60f81b600192909101918201528451613c778160028401602089016138d4565b600181830101915050602f60f81b60018201528351613c9d8160028401602088016138d4565b64173539b7b760d91b600292909101918201526007019695505050505050565b604081526000613cd060408301846138f8565b828103602084015260048152630b985cdd60e21b60208201526040810191505092915050565b600060208284031215613d0857600080fd5b8151801515811461038a57600080fd5b7f436f756c64206e6f742066696e642041535420696e2061727469666163742000815260008251613d5081601f8501602087016138d4565b7f2e205365742060617374203d20747275656020696e20666f756e6472792e746f601f939091019283015250611b5b60f21b603f820152604101919050565b604081526000613da260408301846138f8565b8281036020840152601181527005cc2e6e85cc2c4e6ded8eae8caa0c2e8d607b1b60208201526040810191505092915050565b604081526000613de860408301846138f8565b8281036020840152600c81526b2e6173742e6c6963656e736560a01b60208201526040810191505092915050565b7f2e6d657461646174612e736f75726365732e5b27000000000000000000000000815260008251613e4e8160148501602087016138d4565b6b13ae9735b2b1b1b0b5991a9b60a11b6014939091019283015250602001919050565b604081526000613e8460408301856138f8565b828103602084015261038681856138f8565b634e487b7160e01b600052603260045260246000fd5b601160f91b81528151600090613ec98160018501602087016138d4565b601160f91b6001939091019283015250600201919050565b60008251613ef38184602087016138d4565b6a2f6275696c642d696e666f60a81b920191825250600b01919050565b7f436f756c64206e6f742066696e64206275696c642d696e666f2066696c65207781527f697468206d61746368696e6720736f7572636520636f6465206861736820666f60208201526a0391031b7b73a3930b1ba160ad1b604082015260008251613f8281604b8501602087016138d4565b91909101604b0192915050565b634e487b7160e01b600052601160045260246000fd5b600060ff821660ff8103613fbb57613fbb613f8f565b60010192915050565b7f406f70656e7a657070656c696e2f646566656e6465722d6465706c6f792d636c81526801a595b9d0b58db1a560be1b60208201526000825161400e8160298501602087016138d4565b9190910160290192915050565b60408152601660408201527f4f50454e5a455050454c494e5f424153485f5041544800000000000000000000606082015260806020820152600061038a60808301846138f8565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b828110156140bb57603f198786030184526140a68583516138f8565b9450602093840193919091019060010161408a565b50929695505050505050565b6000602082840312156140d957600080fd5b81516001600160401b038111156140ef57600080fd5b82016060818503121561410157600080fd5b614109613a00565b81518060030b811461411a57600080fd5b815260208201516001600160401b0381111561413557600080fd5b61414186828501613a96565b60208301525060408201516001600160401b0381111561416057600080fd5b61416c86828501613a96565b604083015250949350505050565b7f4661696c656420746f2072756e206261736820636f6d6d616e642077697468208152601160f91b6020820152600082516141bc8160218501602087016138d4565b7f222e20496620796f7520617265207573696e672057696e646f77732c2073657460219390910192830152507f20746865204f50454e5a455050454c494e5f424153485f5041544820656e766960418201527f726f6e6d656e74207661726961626c6520746f207468652066756c6c7920717560618201527f616c69666965642070617468206f66207468652062617368206578656375746160818201527f626c652e20466f72206578616d706c652c20696620796f75206172652075736960a18201527f6e672047697420666f722057696e646f77732c206164642074686520666f6c6c60c18201527f6f77696e67206c696e6520696e20746865202e656e762066696c65206f66207960e18201527f6f75722070726f6a65637420287573696e6720666f727761726420736c6173686101018201527f6573293a0a4f50454e5a455050454c494e5f424153485f504154483d22433a2f6101218201527f50726f6772616d2046696c65732f4769742f62696e2f6261736822000000000061014182015261015c01919050565b7f4661696c656420746f2066696e64206c696e65207769746820707265666978208152602760f81b60208201526000835161438c8160218501602088016138d4565b6c0139034b71037baba383aba1d1609d1b60219184019182015283516143b981602e8401602088016138d4565b01602e01949350505050565b7f4661696c656420746f2072756e2075706772616465207361666574792076616c815268034b230ba34b7b71d160bd1b60208201526000825161400e8160298501602087016138d4565b7f55706772616465207361666574792076616c69646174696f6e206661696c65648152611d0560f11b6020820152600082516144528160228501602087016138d4565b9190910160220192915050565b8181038181111561027c5761027c613f8f565b6d021b7b73a3930b1ba103730b6b2960951b81526000825161449b81600e8501602087016138d4565b7f206d75737420626520696e2074686520666f726d6174204d79436f6e74726163600e9390910192830152507f742e736f6c3a4d79436f6e7472616374206f72204d79436f6e74726163742e73602e8201527f6f6c206f72206f75742f4d79436f6e74726163742e736f6c2f4d79436f6e7472604e8201526730b1ba173539b7b760c11b606e820152607601919050565b8082018082111561027c5761027c613f8f565b7f53504458206c6963656e7365206964656e7469666965722000000000000000008152600083516145778160188501602088016138d4565b6301034b7160e51b601891840191820152835161459b81601c8401602088016138d4565b7f20646f6573206e6f74206c6f6f6b206c696b65206120737570706f7274656420601c92909101918201527f6c6963656e736520666f7220626c6f636b206578706c6f726572207665726966603c8201527f69636174696f6e2e205573652074686520606c6963656e73655479706560206f605c8201527f7074696f6e20746f20737065636966792061206c6963656e736520747970652c607c8201527f206f7220736574207468652060736b69704c6963656e73655479706560206f70609c8201527f74696f6e20746f2060747275656020746f20736b69702e00000000000000000060bc82015260d301949350505050565b600082516146a18184602087016138d4565b600160fd1b920191825250600101919050565b7f406f70656e7a657070656c696e2f75706772616465732d636f726540000000008152600082516146ec81601c8501602087016138d4565b91909101601c0192915050565b60006001820161470b5761470b613f8f565b5060010190565b808202811582820484141761027c5761027c613f8f565b6001815b60018411156147645780850481111561474857614748613f8f565b600184161561475657908102905b60019390931c92800261472d565b935093915050565b60008261477b5750600161027c565b816147885750600061027c565b816001811461479e57600281146147a8576147c4565b600191505061027c565b60ff8411156147b9576147b9613f8f565b50506001821b61027c565b5060208310610133831016604e8410600b84101617156147e7575081810a61027c565b6147f46000198484614729565b806000190482111561480857614808613f8f565b029392505050565b600061038a838361476c565b60008161482b5761482b613f8f565b506000190190565b600083516148458184602088016138d4565b601d60f91b90830190815283516148638160018401602088016138d4565b01600101949350505050565b8181036000831280158383131683831282161715612b6a57612b6a613f8f565b6080516115cb6148cd600039600081816101830152818161046e015281816104d00152818161083f0152818161094e01526109b001526115cb6000f3fe608060405234801561001057600080fd5b50600436106101515760003560e01c80636133b4bb116100cd578063a217fddf11610081578063d547741f11610066578063d547741f14610332578063d9caed1214610345578063e63ab1e91461035857600080fd5b8063a217fddf14610317578063c8a023621461031f57600080fd5b80638456cb59116100b25780638456cb59146102a257806385f438c1146102aa57806391d14854146102d157600080fd5b80636133b4bb1461026f57806381100bf01461028257600080fd5b80632f2ff15d116101245780633c2f05a8116101095780633c2f05a8146102375780633f4ba83a1461025c5780635c975abb1461026457600080fd5b80632f2ff15d1461021157806336568abe1461022457600080fd5b806301ffc9a714610156578063116191b61461017e57806321fc65f2146101ca578063248a9ca3146101df575b600080fd5b6101696101643660046111fa565b61037f565b60405190151581526020015b60405180910390f35b6101a57f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610175565b6101dd6101d83660046112ae565b610418565b005b6102036101ed36600461131d565b6000908152600160208190526040909120015490565b604051908152602001610175565b6101dd61021f366004611336565b6105ba565b6101dd610232366004611336565b6105e6565b6002546101a590610100900473ffffffffffffffffffffffffffffffffffffffff1681565b6101dd610644565b60025460ff16610169565b6101dd61027d366004611362565b610679565b6003546101a59073ffffffffffffffffffffffffffffffffffffffff1681565b6101dd6108c6565b6102037f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b6101696102df366004611336565b600091825260016020908152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b610203600081565b6101dd61032d3660046112ae565b6108f8565b6101dd610340366004611336565b610a80565b6101dd6103533660046113bc565b610aa6565b6102037f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061041257507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b610420610b73565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461044a81610bb6565b610452610bc0565b61049373ffffffffffffffffffffffffffffffffffffffff87167f000000000000000000000000000000000000000000000000000000000000000086610bff565b6040517f5131ab5900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690635131ab599061050d9089908990899089908990600401611442565b600060405180830381600087803b15801561052757600080fd5b505af115801561053b573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167f85b5be9cf454e05e0bddf49315178102227c312078eefa3c00294fb4d912ae4e8686866040516105a09392919061149f565b60405180910390a3506105b36001600055565b5050505050565b600082815260016020819052604090912001546105d681610bb6565b6105e08383610c8c565b50505050565b73ffffffffffffffffffffffffffffffffffffffff81163314610635576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61063f8282610d57565b505050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61066e81610bb6565b610676610e16565b50565b600254610100900473ffffffffffffffffffffffffffffffffffffffff166340c10f19306106a88660056114c2565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815273ffffffffffffffffffffffffffffffffffffffff90921660048301526024820152604401600060405180830381600087803b15801561071357600080fd5b505af1158015610727573d6000803e3d6000fd5b5050600254600580546040517fa9059cbb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff91821660048201526024810192909252610100909204909116925063a9059cbb91506044016020604051808303816000875af11580156107af573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107d391906114fc565b506002546107ff90610100900473ffffffffffffffffffffffffffffffffffffffff1685858585610418565b6002546040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000081166004830152610100909204909116906370a0823190602401602060405180830381865afa158015610895573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108b9919061151e565b156105e0576105e0611537565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a6108f081610bb6565b610676610e93565b610900610b73565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461092a81610bb6565b610932610bc0565b61097373ffffffffffffffffffffffffffffffffffffffff87167f000000000000000000000000000000000000000000000000000000000000000086610bff565b6040517fb8969bd400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063b8969bd4906109ed9089908990899089908990600401611442565b600060405180830381600087803b158015610a0757600080fd5b505af1158015610a1b573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fb9d4efa96044e5f5e03e696fa9ae2ff66911cc27e8a637c3627c75bc5b2241c88686866040516105a09392919061149f565b60008281526001602081905260409091200154610a9c81610bb6565b6105e08383610d57565b610aae610b73565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e4610ad881610bb6565b610ae0610bc0565b610b0173ffffffffffffffffffffffffffffffffffffffff85168484610bff565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f9b1bfa7fa9ee420a16e124f794c35ac9f90472acc99140eb2f6447c714cad8eb84604051610b6091815260200190565b60405180910390a35061063f6001600055565b600260005403610baf576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b6106768133610eee565b60025460ff1615610bfd576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6040805173ffffffffffffffffffffffffffffffffffffffff8416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb0000000000000000000000000000000000000000000000000000000017905261063f908490610f7f565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff16610d4f57600083815260016020818152604080842073ffffffffffffffffffffffffffffffffffffffff8716808652925280842080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a4506001610412565b506000610412565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff1615610d4f57600083815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8616808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a4506001610412565b610e1e611015565b600280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b610e9b610bc0565b600280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258610e693390565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16610f7b576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82166004820152602481018390526044015b60405180910390fd5b5050565b6000610fa173ffffffffffffffffffffffffffffffffffffffff841683611051565b90508051600014158015610fc6575080806020019051810190610fc491906114fc565b155b1561063f576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84166004820152602401610f72565b60025460ff16610bfd576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606061105f83836000611066565b9392505050565b6060814710156110a4576040517fcd786059000000000000000000000000000000000000000000000000000000008152306004820152602401610f72565b6000808573ffffffffffffffffffffffffffffffffffffffff1684866040516110cd9190611566565b60006040518083038185875af1925050503d806000811461110a576040519150601f19603f3d011682016040523d82523d6000602084013e61110f565b606091505b509150915061111f868383611129565b9695505050505050565b60608261113e57611139826111b8565b61105f565b8151158015611162575073ffffffffffffffffffffffffffffffffffffffff84163b155b156111b1576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85166004820152602401610f72565b508061105f565b8051156111c85780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006020828403121561120c57600080fd5b81357fffffffff000000000000000000000000000000000000000000000000000000008116811461105f57600080fd5b803573ffffffffffffffffffffffffffffffffffffffff8116811461126057600080fd5b919050565b60008083601f84011261127757600080fd5b50813567ffffffffffffffff81111561128f57600080fd5b6020830191508360208285010111156112a757600080fd5b9250929050565b6000806000806000608086880312156112c657600080fd5b6112cf8661123c565b94506112dd6020870161123c565b935060408601359250606086013567ffffffffffffffff81111561130057600080fd5b61130c88828901611265565b969995985093965092949392505050565b60006020828403121561132f57600080fd5b5035919050565b6000806040838503121561134957600080fd5b823591506113596020840161123c565b90509250929050565b6000806000806060858703121561137857600080fd5b6113818561123c565b935060208501359250604085013567ffffffffffffffff8111156113a457600080fd5b6113b087828801611265565b95989497509550505050565b6000806000606084860312156113d157600080fd5b6113da8461123c565b92506113e86020850161123c565b929592945050506040919091013590565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff8616815273ffffffffffffffffffffffffffffffffffffffff851660208201528360408201526080606082015260006114946080830184866113f9565b979650505050505050565b8381526040602082015260006114b96040830184866113f9565b95945050505050565b80820180821115610412577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006020828403121561150e57600080fd5b8151801515811461105f57600080fd5b60006020828403121561153057600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b6000825160005b81811015611587576020818601810151858301520161156d565b50600092019182525091905056fea2646970667358221220c22f4256b34c7ceff39a5acf8d5ae318549565a6265a9a23b2d9459a9845ff3f64736f6c634300081a0033608060405234801561001057600080fd5b50604051610c9f380380610c9f83398101604081905261002f9161010d565b8181600361003d83826101ff565b50600461004a82826101ff565b50505050506102bd565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261007b57600080fd5b81516001600160401b0381111561009457610094610054565b604051601f8201601f19908116603f011681016001600160401b03811182821017156100c2576100c2610054565b6040528181528382016020018510156100da57600080fd5b60005b828110156100f9576020818601810151838301820152016100dd565b506000918101602001919091529392505050565b6000806040838503121561012057600080fd5b82516001600160401b0381111561013657600080fd5b6101428582860161006a565b602085015190935090506001600160401b0381111561016057600080fd5b61016c8582860161006a565b9150509250929050565b600181811c9082168061018a57607f821691505b6020821081036101aa57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156101fa57806000526020600020601f840160051c810160208510156101d75750805b601f840160051c820191505b818110156101f757600081556001016101e3565b50505b505050565b81516001600160401b0381111561021857610218610054565b61022c816102268454610176565b846101b0565b6020601f82116001811461026057600083156102485750848201515b600019600385901b1c1916600184901b1784556101f7565b600084815260208120601f198516915b828110156102905787850151825560209485019460019092019101610270565b50848210156102ae5786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b6109d3806102cc6000396000f3fe608060405234801561001057600080fd5b50600436106100be5760003560e01c806340c10f191161007657806395d89b411161005b57806395d89b4114610183578063a9059cbb1461018b578063dd62ed3e1461019e57600080fd5b806340c10f191461013857806370a082311461014d57600080fd5b806318160ddd116100a757806318160ddd1461010457806323b872dd14610116578063313ce5671461012957600080fd5b806306fdde03146100c3578063095ea7b3146100e1575b600080fd5b6100cb6101e4565b6040516100d891906107bf565b60405180910390f35b6100f46100ef366004610854565b610276565b60405190151581526020016100d8565b6002545b6040519081526020016100d8565b6100f461012436600461087e565b610290565b604051601281526020016100d8565b61014b610146366004610854565b6102b4565b005b61010861015b3660046108bb565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6100cb6102c2565b6100f4610199366004610854565b6102d1565b6101086101ac3660046108dd565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6060600380546101f390610910565b80601f016020809104026020016040519081016040528092919081815260200182805461021f90610910565b801561026c5780601f106102415761010080835404028352916020019161026c565b820191906000526020600020905b81548152906001019060200180831161024f57829003601f168201915b5050505050905090565b6000336102848185856102df565b60019150505b92915050565b60003361029e8582856102f1565b6102a98585856103c5565b506001949350505050565b6102be8282610470565b5050565b6060600480546101f390610910565b6000336102848185856103c5565b6102ec83838360016104cc565b505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146103bf57818110156103b0576040517ffb8f41b200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416600482015260248101829052604481018390526064015b60405180910390fd5b6103bf848484840360006104cc565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8316610415576040517f96c6fd1e000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff8216610465576040517fec442f05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b6102ec838383610614565b73ffffffffffffffffffffffffffffffffffffffff82166104c0576040517fec442f05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b6102be60008383610614565b73ffffffffffffffffffffffffffffffffffffffff841661051c576040517fe602df05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff831661056c576040517f94280d62000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260016020908152604080832093871683529290522082905580156103bf578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161060691815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff831661064c5780600260008282546106419190610963565b909155506106fe9050565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260208190526040902054818110156106d2576040517fe450d38c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8516600482015260248101829052604481018390526064016103a7565b73ffffffffffffffffffffffffffffffffffffffff841660009081526020819052604090209082900390555b73ffffffffffffffffffffffffffffffffffffffff821661072757600280548290039055610753565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090208054820190555b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516107b291815260200190565b60405180910390a3505050565b602081526000825180602084015260005b818110156107ed57602081860181015160408684010152016107d0565b5060006040828501015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011684010191505092915050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461084f57600080fd5b919050565b6000806040838503121561086757600080fd5b6108708361082b565b946020939093013593505050565b60008060006060848603121561089357600080fd5b61089c8461082b565b92506108aa6020850161082b565b929592945050506040919091013590565b6000602082840312156108cd57600080fd5b6108d68261082b565b9392505050565b600080604083850312156108f057600080fd5b6108f98361082b565b91506109076020840161082b565b90509250929050565b600181811c9082168061092457607f821691505b60208210810361095d577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b8082018082111561028a577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea26469706673582212207e804ca539d49155d2b6bc19268ce22f9f857027c75247d69fb0d56a089c93d464736f6c634300081a00330000000000000000000000007109709ecfa91a80626ff3989d68f67f5b1dd12d54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f7420", + Bin: "0x600380546001600160a01b03191633908117909155600e60a09081526d11d85d195dd85e5155934b9cdbdb60921b60c0526101049190915261012361012481905261014452606460e090815261016460405261010080516001600160e01b0390811663c0c53b8b60e01b1790915261007992919061026316565b600480546001600160a01b03929092166001600160a01b03199283168117909155600580549092161790553480156100b057600080fd5b5060055460035460016000556002805460ff191690556001600160a01b039182169116808215806100e857506001600160a01b038216155b806100fa57506001600160a01b038116155b156101185760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b038316608052610130600082610282565b5061015b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a82610282565b506101867f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e483610282565b505050506040516101969061380e565b60408082526004908201819052631d195cdd60e21b606083015260806020830181905282015263151154d560e21b60a082015260c001604051809103906000f0801580156101e8573d6000803e3d6000fd5b5060028054610100600160a81b0319166101006001600160a01b039384160217905560055460405163ae7a3a6f60e01b815230600482015291169063ae7a3a6f90602401600060405180830381600087803b15801561024657600080fd5b505af115801561025a573d6000803e3d6000fd5b5050505061488f565b600061026d61381b565b610278848483610315565b9150505b92915050565b60008281526001602090815260408083206001600160a01b038516845290915281205460ff1661030d5760008381526001602081815260408084206001600160a01b0387168086529252808420805460ff19169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a450600161027c565b50600061027c565b6000806103228584610391565b90506103866040518060400160405280601d81526020017f4552433139363750726f78792e736f6c3a4552433139363750726f78790000008152508286604051602001610370929190613924565b60408051601f198184030181529190528561039d565b9150505b9392505050565b600061038a83836103d1565b60c081015151600090156103c7576103c084848460c001516103f260201b60201c565b905061038a565b6103c0848461056b565b60006103dd8383610638565b61038a8383602001518461039d60201b60201c565b6000806103fd610648565b9050600061040b86836106e2565b905060006104288260600151836020015185610b0560201b60201c565b9050600061043883838989610cba565b9050600061044582611936565b602081015181519192509060030b1561049e5789826040015160405160200161046f929190613948565b60408051601f198184030181529082905262461bcd60e51b8252610495916004016139ae565b60405180910390fd5b60006104e76040518060400160405280601581526020017f4465706c6f79656420746f20616464726573733a200000000000000000000000815250836001611acd60201b60201c565b60405163c6ce059d60e01b8152909150600080516020616b378339815191529063c6ce059d9061051b9084906004016139ae565b602060405180830381865afa158015610538573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061055c91906139c1565b9b9a5050505050505050505050565b604051638d1cc92560e01b81526000908190600080516020616b3783398151915290638d1cc925906105a19087906004016139ae565b600060405180830381865afa1580156105be573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526105e69190810190613ab6565b905060006106158285604051602001610600929190613aea565b60408051601f19818403018152919052611c6d565b90506001600160a01b03811661027857848460405160200161046f929190613b19565b61064482826000611c80565b5050565b60408051808201825260038152621bdd5d60ea1b602082015290516334515cdb60e21b8152606091600080516020616b3783398151915291829063d145736c90610696908490600401613ba8565b600060405180830381865afa1580156106b3573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526106db9190810190613bdd565b9250505090565b6107146040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b6000600080516020616b3783398151915290506107596040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b61076285611d5a565b6020820152600061077286611faf565b90506000836001600160a01b031663d930a0e66040518163ffffffff1660e01b8152600401600060405180830381865afa1580156107b4573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526107dc9190810190613bdd565b868385602001516040516020016107f69493929190613c25565b60408051601f19818403018152908290526360f9bb1160e01b825291506000906001600160a01b038616906360f9bb11906108359085906004016139ae565b600060405180830381865afa158015610852573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261087a9190810190613bdd565b604051636da11afb60e11b81529091506001600160a01b0386169063db4235f6906108a9908490600401613cbd565b602060405180830381865afa1580156108c6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108ea9190613cf6565b6108ff578160405160200161046f9190613d18565b6040516309389f5960e31b81526001600160a01b038616906349c4fac89061092b908490600401613d8f565b600060405180830381865afa158015610948573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526109709190810190613bdd565b8452604051636da11afb60e11b81526001600160a01b0386169063db4235f69061099e908490600401613dd5565b602060405180830381865afa1580156109bb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109df9190613cf6565b15610a5b576040516309389f5960e31b81526001600160a01b038616906349c4fac890610a10908490600401613dd5565b600060405180830381865afa158015610a2d573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610a559190810190613bdd565b60408501525b846001600160a01b03166349c4fac8828660000151604051602001610a809190613e16565b6040516020818303038152906040526040518363ffffffff1660e01b8152600401610aac929190613e71565b600060405180830381865afa158015610ac9573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610af19190810190613bdd565b606085015250608083015250949350505050565b60408051600480825260a0820190925260609160009190816020015b6060815260200190600190039081610b21579050509050604051806040016040528060048152602001630677265760e41b81525081600081518110610b6857610b68613e96565b6020026020010181905250604051806040016040528060038152602001620b5c9b60ea1b81525081600181518110610ba257610ba2613e96565b602002602001018190525084604051602001610bbe9190613eac565b60405160208183030381529060405281600281518110610be057610be0613e96565b602002602001018190525082604051602001610bfc9190613ee1565b60405160208183030381529060405281600381518110610c1e57610c1e613e96565b60209081029190910101526000610c3482611936565b9050600081602001519050610c9b610c6e60405180604001604052806005815260200164173539b7b760d91b81525061213260201b60201c565b6040805180820182526000808252602091820152815180830190925284518252808501908201529061215f565b610cb0578560405160200161046f9190613f10565b9695505050505050565b60a0810151604080518082018252600080825260209182015281518083019092528251808352928101910152606090600080516020616b378339815191529015610d04565b511590565b610e2057826020015115610d945760405162461bcd60e51b81526020600482015260586024820152600080516020616b5783398151915260448201527f62652075736564207768656e207468652060736b6970566572696679536f757260648201527f6365436f646560206f7074696f6e206973206074727565600000000000000000608482015260a401610495565b8260c0015115610e205760405162461bcd60e51b81526020600482015260536024820152600080516020616b5783398151915260448201527f62652075736564207768656e207468652060736b69704c6963656e736554797060648201527f6560206f7074696f6e2069732060747275656000000000000000000000000000608482015260a401610495565b6040805160ff8082526120008201909252600091816020015b6060815260200190600190039081610e395790505090506000604051806040016040528060038152602001620dce0f60eb1b815250828280610e7a90613fa5565b935060ff1681518110610e8f57610e8f613e96565b60200260200101819052506040518060400160405280600d81526020016c302e302e312d616c7068612e3760981b815250604051602001610ed09190613fc4565b604051602081830303815290604052828280610eeb90613fa5565b935060ff1681518110610f0057610f00613e96565b6020026020010181905250604051806040016040528060068152602001656465706c6f7960d01b815250828280610f3690613fa5565b935060ff1681518110610f4b57610f4b613e96565b60200260200101819052506040518060400160405280600e81526020016d2d2d636f6e74726163744e616d6560901b815250828280610f8990613fa5565b935060ff1681518110610f9e57610f9e613e96565b60200260200101819052508760200151828280610fba90613fa5565b935060ff1681518110610fcf57610fcf613e96565b60200260200101819052506040518060400160405280600e81526020016d05a5ac6dedce8e4c2c6e8a0c2e8d60931b81525082828061100d90613fa5565b935060ff168151811061102257611022613e96565b60209081029190910101528751828261103a81613fa5565b935060ff168151811061104f5761104f613e96565b6020026020010181905250604051806040016040528060098152602001680b4b58da185a5b925960ba1b81525082828061108890613fa5565b935060ff168151811061109d5761109d613e96565b60209081029190910101526110b1466121c0565b82826110bc81613fa5565b935060ff16815181106110d1576110d1613e96565b60200260200101819052506040518060400160405280600f81526020016e2d2d6275696c64496e666f46696c6560881b81525082828061111090613fa5565b935060ff168151811061112557611125613e96565b60200260200101819052508682828061113d90613fa5565b935060ff168151811061115257611152613e96565b60209081029190910101528551156112605760408051808201909152601581527f2d2d636f6e7374727563746f7242797465636f64650000000000000000000000602082015282826111a381613fa5565b935060ff16815181106111b8576111b8613e96565b60209081029190910101526040516371aad10d60e01b81526001600160a01b038416906371aad10d906111ef9089906004016139ae565b600060405180830381865afa15801561120c573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526112349190810190613bdd565b828261123f81613fa5565b935060ff168151811061125457611254613e96565b60200260200101819052505b84602001511561130d576040805180820190915260128152712d2d766572696679536f75726365436f646560701b6020820152828261129e81613fa5565b935060ff16815181106112b3576112b3613e96565b60200260200101819052506040518060400160405280600581526020016466616c736560d81b8152508282806112e890613fa5565b935060ff16815181106112fd576112fd613e96565b6020026020010181905250611474565b611323610cff8660a0015161213260201b60201c565b6113a65760408051808201909152600d81526c2d2d6c6963656e73655479706560981b6020820152828261135681613fa5565b935060ff168151811061136b5761136b613e96565b60200260200101819052508460a0015160405160200161138b9190613eac565b6040516020818303038152906040528282806112e890613fa5565b8460c001511580156113cb57506113c9610cff896040015161213260201b60201c565b155b156114745760408051808201909152600d81526c2d2d6c6963656e73655479706560981b602082015282826113ff81613fa5565b935060ff168151811061141457611414613e96565b602090810291909101015261142888612252565b6040516020016114389190613eac565b60405160208183030381529060405282828061145390613fa5565b935060ff168151811061146857611468613e96565b60200260200101819052505b61148a610cff866040015161213260201b60201c565b61150d5760408051808201909152600b81526a0b4b5c995b185e595c925960aa1b602082015282826114bb81613fa5565b935060ff16815181106114d0576114d0613e96565b602002602001018190525084604001518282806114ec90613fa5565b935060ff168151811061150157611501613e96565b60200260200101819052505b6060850151156115fe576040805180820190915260068152650b4b5cd85b1d60d21b6020820152828261153f81613fa5565b935060ff168151811061155457611554613e96565b60209081029190910101526060850151604051631623433d60e31b815260048101919091526001600160a01b0384169063b11a19e890602401600060405180830381865afa1580156115aa573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526115d29190810190613bdd565b82826115dd81613fa5565b935060ff16815181106115f2576115f2613e96565b60200260200101819052505b60e085015151156116905760408051808201909152600a8152690b4b59d85cd31a5b5a5d60b21b6020820152828261163581613fa5565b935060ff168151811061164a5761164a613e96565b602090810291909101015260e085015151611664906121c0565b828261166f81613fa5565b935060ff168151811061168457611684613e96565b60200260200101819052505b60e0850151602001511561172d5760408051808201909152600a8152692d2d676173507269636560b01b602082015282826116ca81613fa5565b935060ff16815181106116df576116df613e96565b60200260200101819052506117018560e00151602001516121c060201b60201c565b828261170c81613fa5565b935060ff168151811061172157611721613e96565b60200260200101819052505b60e085015160400151156117ce5760408051808201909152600e81526d2d2d6d617846656550657247617360901b6020820152828261176b81613fa5565b935060ff168151811061178057611780613e96565b60200260200101819052506117a28560e00151604001516121c060201b60201c565b82826117ad81613fa5565b935060ff16815181106117c2576117c2613e96565b60200260200101819052505b60e0850151606001511561187e5760408051808201909152601681527f2d2d6d61785072696f72697479466565506572476173000000000000000000006020820152828261181b81613fa5565b935060ff168151811061183057611830613e96565b60200260200101819052506118528560e00151606001516121c060201b60201c565b828261185d81613fa5565b935060ff168151811061187257611872613e96565b60200260200101819052505b60008160ff166001600160401b0381111561189b5761189b6139ea565b6040519080825280602002602001820160405280156118ce57816020015b60608152602001906001900390816118b95790505b50905060005b8260ff168160ff16101561192757838160ff16815181106118f7576118f7613e96565b6020026020010151828260ff168151811061191457611914613e96565b60209081029190910101526001016118d4565b5093505050505b949350505050565b61195d6040518060600160405280600060030b815260200160608152602001606081525090565b6040805180820182526004808252630c4c2e6d60e31b602083015291516334515cdb60e21b8152600080516020616b3783398151915292600091849163d145736c916119ab9186910161401b565b600060405180830381865afa1580156119c8573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526119f09190810190613bdd565b905060006119fe8683612908565b90506000846001600160a01b031663f45c1ce7836040518263ffffffff1660e01b8152600401611a2e9190614062565b6000604051808303816000875af1158015611a4d573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611a7591908101906140c7565b805190915060030b15801590611a8e5750602081015151155b8015611a9d5750604081015151155b15610cb05781600081518110611ab557611ab5613e96565b602002602001015160405160200161046f919061417a565b60606000611b028560408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600080825260209182015281518083019092528651825280870190820152909150611b399082905b90612a42565b15611c36576000611bb682611bb081611baa611b7c8a60408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6040805180820182526000808252602091820152815180830190925282518252918201519181019190915290565b90612a69565b90612ac6565b9050611bea611be3604051806040016040528060018152602001600560f91b81525061213260201b60201c565b8290612a42565b15611c2457611c21611c1a604051806040016040528060018152602001600560f91b81525061213260201b60201c565b8290612b4b565b90505b611c2d81612b71565b9250505061038a565b8215611c4f57848460405160200161046f92919061434a565b505060408051602081019091526000815261038a565b509392505050565b6000808251602084016000f09392505050565b8160a0015115611c8f57505050565b6000611c9c848484612bd6565b90506000611ca982611936565b602081015181519192509060030b158015611d1c5750611d1c611cf0604051806040016040528060078152602001665355434345535360c81b81525061213260201b60201c565b604080518082018252600080825260209182015281518083019092528451825280850190820152611b33565b15611d2957505050505050565b60408201515115611d4957816040015160405160200161046f91906143c5565b8060405160200161046f919061440f565b60606000611d8f8360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b9050611dc6611dbf604051806040016040528060048152602001630b9cdbdb60e21b81525061213260201b60201c565b829061215f565b15611e085761038a611e03611dfc604051806040016040528060048152602001630b9cdbdb60e21b81525061213260201b60201c565b83906130e9565b612b71565b611e3a611e33604051806040016040528060018152602001601d60f91b81525061213260201b60201c565b8290613173565b600103611ea257611e6c611c1a604051806040016040528060018152602001601d60f91b81525061213260201b60201c565b5061038a611e03611e9b604051806040016040528060018152602001601d60f91b81525061213260201b60201c565b8390612b4b565b611ed1611dbf60405180604001604052806005815260200164173539b7b760d91b81525061213260201b60201c565b15611f9e576000611f0982611f04604051806040016040528060018152602001602f60f81b81525061213260201b60201c565b613208565b905060008160018351611f1c919061445f565b81518110611f2c57611f2c613e96565b60200260200101519050611f95611e03611f6860405180604001604052806005815260200164173539b7b760d91b81525061213260201b60201c565b604080518082018252600080825260209182015281518083019092528551825280860190820152906130e9565b95945050505050565b8260405160200161046f9190614472565b60606000611fe48360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b9050612014611dbf604051806040016040528060048152602001630b9cdbdb60e21b81525061213260201b60201c565b156120225761038a81612b71565b61204d611e33604051806040016040528060018152602001601d60f91b81525061213260201b60201c565b6001036120825761038a611e03611e9b604051806040016040528060018152602001601d60f91b81525061213260201b60201c565b6120b1611dbf60405180604001604052806005815260200164173539b7b760d91b81525061213260201b60201c565b15611f9e5760006120e482611f04604051806040016040528060018152602001602f60f81b81525061213260201b60201c565b90506001815111156121205780600282516120ff919061445f565b8151811061210f5761210f613e96565b602002602001015192505050919050565b508260405160200161046f9190614472565b60408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b8051825160009111156121745750600061027c565b8151835160208501516000929161218a9161452c565b612194919061445f565b9050826020015181036121ab57600191505061027c565b82516020840151819020912014905092915050565b606060006121cd836132ac565b60010190506000816001600160401b038111156121ec576121ec6139ea565b6040519080825280601f01601f191660200182016040528015612216576020820181803683370190505b5090508181016020015b600019016f181899199a1a9b1b9c1cb0b131b232b360811b600a86061a8153600a850494508461222057509392505050565b60606000612269836040015161213260201b60201c565b90506122a661229f6040518060400160405280600a8152602001691553931250d15394d15160b21b81525061213260201b60201c565b829061338e565b156122cd5750506040805180820190915260048152634e6f6e6560e01b6020820152919050565b61230061229f60405180604001604052806009815260200168556e6c6963656e736560b81b81525061213260201b60201c565b1561232c575050604080518082019091526009815268556e6c6963656e736560b81b6020820152919050565b61235961229f6040518060400160405280600381526020016213525560ea1b81525061213260201b60201c565b1561237f57505060408051808201909152600381526213525560ea1b6020820152919050565b6123b561229f6040518060400160405280600c81526020016b47504c2d322e302d6f6e6c7960a01b81525061213260201b60201c565b806123f557506123f561229f6040518060400160405280601081526020016f23a8261699171816b7b916b630ba32b960811b81525061213260201b60201c565b1561242157505060408051808201909152600981526823a72a9023a8263b1960b91b6020820152919050565b61245761229f6040518060400160405280600c81526020016b47504c2d332e302d6f6e6c7960a01b81525061213260201b60201c565b80612497575061249761229f6040518060400160405280601081526020016f23a8261699971816b7b916b630ba32b960811b81525061213260201b60201c565b156124c3575050604080518082019091526009815268474e552047504c763360b81b6020820152919050565b6124fa61229f6040518060400160405280600d81526020016c4c47504c2d322e312d6f6e6c7960981b81525061213260201b60201c565b8061253b575061253b61229f604051806040016040528060118152602001702623a8261699171896b7b916b630ba32b960791b81525061213260201b60201c565b1561256a57505060408051808201909152600c81526b474e55204c47504c76322e3160a01b6020820152919050565b6125a161229f6040518060400160405280600d81526020016c4c47504c2d332e302d6f6e6c7960981b81525061213260201b60201c565b806125e257506125e261229f604051806040016040528060118152602001702623a8261699971816b7b916b630ba32b960791b81525061213260201b60201c565b1561260f57505060408051808201909152600a815269474e55204c47504c763360b01b6020820152919050565b61264561229f6040518060400160405280600c81526020016b4253442d322d436c6175736560a01b81525061213260201b60201c565b1561267457505060408051808201909152600c81526b4253442d322d436c6175736560a01b6020820152919050565b6126aa61229f6040518060400160405280600c81526020016b4253442d332d436c6175736560a01b81525061213260201b60201c565b156126d957505060408051808201909152600c81526b4253442d332d436c6175736560a01b6020820152919050565b61270a61229f6040518060400160405280600781526020016604d504c2d322e360cc1b81525061213260201b60201c565b1561273457505060408051808201909152600781526604d504c2d322e360cc1b6020820152919050565b61276561229f6040518060400160405280600781526020016604f534c2d332e360cc1b81525061213260201b60201c565b1561278f57505060408051808201909152600781526604f534c2d332e360cc1b6020820152919050565b6127c361229f6040518060400160405280600a81526020016904170616368652d322e360b41b81525061213260201b60201c565b156127f057505060408051808201909152600a81526904170616368652d322e360b41b6020820152919050565b61282761229f6040518060400160405280600d81526020016c4147504c2d332e302d6f6e6c7960981b81525061213260201b60201c565b80612868575061286861229f6040518060400160405280601181526020017020a3a8261699971816b7b916b630ba32b960791b81525061213260201b60201c565b1561289557505060408051808201909152600a815269474e55204147504c763360b01b6020820152919050565b6128c761229f604051806040016040528060088152602001674255534c2d312e3160c01b81525061213260201b60201c565b156128f157505060408051808201909152600781526642534c20312e3160c81b6020820152919050565b6040808401518451915161046f929060200161453f565b60608060005b8451811015612993578185828151811061292a5761292a613e96565b6020026020010151604051602001612943929190613aea565b604051602081830303815290604052915060018551612962919061445f565b811461298b5781604051602001612979919061468f565b60405160208183030381529060405291505b60010161290e565b5060408051600380825260808201909252600091816020015b60608152602001906001900390816129ac57905050905083816000815181106129d7576129d7613e96565b6020026020010181905250604051806040016040528060028152602001612d6360f01b81525081600181518110612a1057612a10613e96565b60200260200101819052508181600281518110612a2f57612a2f613e96565b6020908102919091010152949350505050565b6020808301518351835192840151600093612a6092918491906133a2565b14159392505050565b6040805180820190915260008082526020808301829052845185820151855192860151612a9693906134b3565b9050836020015181612aa8919061445f565b84518590612ab790839061445f565b90525060208401525090919050565b6040805180820190915260008082526020820152815183511015612aeb57508161027c565b6020808301519084015160019114612b125750815160208481015190840151829020919020145b8015612b4357825184518590612b2990839061445f565b9052508251602085018051612b3f90839061452c565b9052505b509192915050565b6040805180820190915260008082526020820152612b6a8383836135d3565b5092915050565b6060600082600001516001600160401b03811115612b9157612b916139ea565b6040519080825280601f01601f191660200182016040528015612bbb576020820181803683370190505b50602084810151855192935090830191612b6a918391613679565b60606000612be2610648565b6040805160ff808252612000820190925291925060009190816020015b6060815260200190600190039081612bff5790505090506000604051806040016040528060038152602001620dce0f60eb1b815250828280612c4090613fa5565b935060ff1681518110612c5557612c55613e96565b6020026020010181905250604051806040016040528060078152602001665e312e33322e3360c81b815250604051602001612c9091906146b4565b604051602081830303815290604052828280612cab90613fa5565b935060ff1681518110612cc057612cc0613e96565b60200260200101819052506040518060400160405280600881526020016776616c696461746560c01b815250828280612cf890613fa5565b935060ff1681518110612d0d57612d0d613e96565b602002602001018190525082604051602001612d299190613ee1565b604051602081830303815290604052828280612d4490613fa5565b935060ff1681518110612d5957612d59613e96565b60200260200101819052506040518060400160405280600a8152602001690b4b58dbdb9d1c9858dd60b21b815250828280612d9390613fa5565b935060ff1681518110612da857612da8613e96565b6020908102919091010152612dbd87846136f3565b8282612dc881613fa5565b935060ff1681518110612ddd57612ddd613e96565b602090810291909101015285515115612e755760408051808201909152600b81526a2d2d7265666572656e636560a81b60208201528282612e1d81613fa5565b935060ff1681518110612e3257612e32613e96565b60209081029190910101528551612e4990846136f3565b8282612e5481613fa5565b935060ff1681518110612e6957612e69613e96565b60200260200101819052505b856080015115612ee35760408051808201909152601881527f2d2d756e73616665536b697053746f72616765436865636b000000000000000060208201528282612ebe81613fa5565b935060ff1681518110612ed357612ed3613e96565b6020026020010181905250612f3e565b8415612f3e576040805180820190915260128152712d2d726571756972655265666572656e636560701b60208201528282612f1d81613fa5565b935060ff1681518110612f3257612f32613e96565b60200260200101819052505b60408601515115612fca5760408051808201909152600d81526c2d2d756e73616665416c6c6f7760981b60208201528282612f7881613fa5565b935060ff1681518110612f8d57612f8d613e96565b60200260200101819052508560400151828280612fa990613fa5565b935060ff1681518110612fbe57612fbe613e96565b60200260200101819052505b8560600151156130345760408051808201909152601481527f2d2d756e73616665416c6c6f7752656e616d65730000000000000000000000006020820152828261301381613fa5565b935060ff168151811061302857613028613e96565b60200260200101819052505b60008160ff166001600160401b03811115613051576130516139ea565b60405190808252806020026020018201604052801561308457816020015b606081526020019060019003908161306f5790505b50905060005b8260ff168160ff1610156130dd57838160ff16815181106130ad576130ad613e96565b6020026020010151828260ff16815181106130ca576130ca613e96565b602090810291909101015260010161308a565b50979650505050505050565b604080518082019091526000808252602082015281518351101561310e57508161027c565b815183516020850151600092916131249161452c565b61312e919061445f565b6020840151909150600190821461314f575082516020840151819020908220145b801561316a5783518551869061316690839061445f565b9052505b50929392505050565b8051825160208085015190840151600093849390926131939284906134b3565b61319d919061452c565b90505b835160208501516131b1919061452c565b8111612b6a57816131c1816146f9565b92505082600001516131f78560200151836131dc919061445f565b86516131e8919061445f565b855160208701518591906134b3565b613201919061452c565b90506131a0565b606060006132168484613173565b61322190600161452c565b6001600160401b03811115613238576132386139ea565b60405190808252806020026020018201604052801561326b57816020015b60608152602001906001900390816132565790505b50905060005b8151811015611c6557613287611e038686612b4b565b82828151811061329957613299613e96565b6020908102919091010152600101613271565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f01000000000000000083106132f5577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310613321576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc10000831061333f57662386f26fc10000830492506010015b6305f5e1008310613357576305f5e100830492506008015b612710831061336b57612710830492506004015b6064831061337d576064830492506002015b600a831061027c5760010192915050565b600061339a8383613733565b159392505050565b6000808584116134a9576020841161345557600084156133ed5760016133c986602061445f565b6133d4906008614712565b6133df906002614810565b6133e9919061445f565b1990505b83518116856133fc898961452c565b613406919061445f565b805190935082165b81811461344057878411613428578794505050505061192e565b836134328161481c565b94505082845116905061340e565b61344a878561452c565b94505050505061192e565b838320613462858861445f565b61346c908761452c565b91505b8582106134a7578482208082036134945761348a868461452c565b935050505061192e565b61349f60018461445f565b92505061346f565b505b5092949350505050565b600083818685116135be576020851161356d57600085156134ff5760016134db87602061445f565b6134e6906008614712565b6134f1906002614810565b6134fb919061445f565b1990505b845181166000876135108b8b61452c565b61351a919061445f565b855190915083165b82811461355f578186106135475761353a8b8b61452c565b965050505050505061192e565b85613551816146f9565b965050838651169050613522565b85965050505050505061192e565b508383206000905b61357f868961445f565b82116135bc5785832080820361359b578394505050505061192e565b6135a660018561452c565b93505081806135b4906146f9565b925050613575565b505b6135c8878761452c565b979650505050505050565b604080518082019091526000808252602080830182905285518682015186519287015161360093906134b3565b60208087018051918601919091525190915061361c908261445f565b83528451602086015161362f919061452c565b810361363e5760008552613670565b8351835161364c919061452c565b8551869061365b90839061445f565b905250835161366a908261452c565b60208601525b50909392505050565b602081106136b1578151835261369060208461452c565b925061369d60208361452c565b91506136aa60208261445f565b9050613679565b60001981156136e05760016136c783602061445f565b6136d390610100614810565b6136dd919061445f565b90505b9151835183169219169190911790915250565b6060600061370184846106e2565b805160208083015160405193945061371b93909101614833565b60405160208183030381529060405291505092915050565b8151815160009190811115613746575081515b6020808501519084015160005b838110156137ff57825182518082146137cf5760001960208710156137ae5760018461378089602061445f565b61378a919061452c565b613795906008614712565b6137a0906002614810565b6137aa919061445f565b1990505b81811683821681810391146137cc57975061027c9650505050505050565b50505b6137da60208661452c565b94506137e760208561452c565b935050506020816137f8919061452c565b9050613753565b5084518651610cb0919061486f565b610c9f80615e9883390190565b6040518060e0016040528060608152602001606081526020016060815260200160001515815260200160001515815260200160001515815260200161385e613863565b905290565b6040518061010001604052806000151581526020016000151581526020016060815260200160008019168152602001606081526020016060815260200160001515815260200161385e6040518060800160405280600081526020016000815260200160008152602001600081525090565b60005b838110156138ef5781810151838201526020016138d7565b50506000910152565b600081518084526139108160208601602086016138d4565b601f01601f19169290920160200192915050565b6001600160a01b038316815260406020820181905260009061192e908301846138f8565b7f4661696c656420746f206465706c6f7920636f6e74726163742000000000000081526000835161398081601a8501602088016138d4565b6101d160f51b601a9184019182015283516139a281601c8401602088016138d4565b01601c01949350505050565b60208152600061038a60208301846138f8565b6000602082840312156139d357600080fd5b81516001600160a01b038116811461038a57600080fd5b634e487b7160e01b600052604160045260246000fd5b604051606081016001600160401b0381118282101715613a2257613a226139ea565b60405290565b6000806001600160401b03841115613a4257613a426139ea565b50604051601f19601f85018116603f011681018181106001600160401b0382111715613a7057613a706139ea565b604052838152905080828401851015613a8857600080fd5b611c658460208301856138d4565b600082601f830112613aa757600080fd5b61038a83835160208501613a28565b600060208284031215613ac857600080fd5b81516001600160401b03811115613ade57600080fd5b61027884828501613a96565b60008351613afc8184602088016138d4565b835190830190613b108183602088016138d4565b01949350505050565b7f4661696c656420746f206465706c6f7920636f6e747261637420000000000000815260008351613b5181601a8501602088016138d4565b7f207573696e6720636f6e7374727563746f722064617461202200000000000000601a918401918201528351613b8e8160338401602088016138d4565b601160f91b60339290910191820152603401949350505050565b60408152600b60408201526a1193d55391149657d3d55560aa1b606082015260806020820152600061038a60808301846138f8565b600060208284031215613bef57600080fd5b81516001600160401b03811115613c0557600080fd5b8201601f81018413613c1657600080fd5b61027884825160208401613a28565b60008551613c37818460208a016138d4565b602f60f81b9083019081528551613c55816001840160208a016138d4565b602f60f81b600192909101918201528451613c778160028401602089016138d4565b600181830101915050602f60f81b60018201528351613c9d8160028401602088016138d4565b64173539b7b760d91b600292909101918201526007019695505050505050565b604081526000613cd060408301846138f8565b828103602084015260048152630b985cdd60e21b60208201526040810191505092915050565b600060208284031215613d0857600080fd5b8151801515811461038a57600080fd5b7f436f756c64206e6f742066696e642041535420696e2061727469666163742000815260008251613d5081601f8501602087016138d4565b7f2e205365742060617374203d20747275656020696e20666f756e6472792e746f601f939091019283015250611b5b60f21b603f820152604101919050565b604081526000613da260408301846138f8565b8281036020840152601181527005cc2e6e85cc2c4e6ded8eae8caa0c2e8d607b1b60208201526040810191505092915050565b604081526000613de860408301846138f8565b8281036020840152600c81526b2e6173742e6c6963656e736560a01b60208201526040810191505092915050565b7f2e6d657461646174612e736f75726365732e5b27000000000000000000000000815260008251613e4e8160148501602087016138d4565b6b13ae9735b2b1b1b0b5991a9b60a11b6014939091019283015250602001919050565b604081526000613e8460408301856138f8565b828103602084015261038681856138f8565b634e487b7160e01b600052603260045260246000fd5b601160f91b81528151600090613ec98160018501602087016138d4565b601160f91b6001939091019283015250600201919050565b60008251613ef38184602087016138d4565b6a2f6275696c642d696e666f60a81b920191825250600b01919050565b7f436f756c64206e6f742066696e64206275696c642d696e666f2066696c65207781527f697468206d61746368696e6720736f7572636520636f6465206861736820666f60208201526a0391031b7b73a3930b1ba160ad1b604082015260008251613f8281604b8501602087016138d4565b91909101604b0192915050565b634e487b7160e01b600052601160045260246000fd5b600060ff821660ff8103613fbb57613fbb613f8f565b60010192915050565b7f406f70656e7a657070656c696e2f646566656e6465722d6465706c6f792d636c81526801a595b9d0b58db1a560be1b60208201526000825161400e8160298501602087016138d4565b9190910160290192915050565b60408152601660408201527f4f50454e5a455050454c494e5f424153485f5041544800000000000000000000606082015260806020820152600061038a60808301846138f8565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b828110156140bb57603f198786030184526140a68583516138f8565b9450602093840193919091019060010161408a565b50929695505050505050565b6000602082840312156140d957600080fd5b81516001600160401b038111156140ef57600080fd5b82016060818503121561410157600080fd5b614109613a00565b81518060030b811461411a57600080fd5b815260208201516001600160401b0381111561413557600080fd5b61414186828501613a96565b60208301525060408201516001600160401b0381111561416057600080fd5b61416c86828501613a96565b604083015250949350505050565b7f4661696c656420746f2072756e206261736820636f6d6d616e642077697468208152601160f91b6020820152600082516141bc8160218501602087016138d4565b7f222e20496620796f7520617265207573696e672057696e646f77732c2073657460219390910192830152507f20746865204f50454e5a455050454c494e5f424153485f5041544820656e766960418201527f726f6e6d656e74207661726961626c6520746f207468652066756c6c7920717560618201527f616c69666965642070617468206f66207468652062617368206578656375746160818201527f626c652e20466f72206578616d706c652c20696620796f75206172652075736960a18201527f6e672047697420666f722057696e646f77732c206164642074686520666f6c6c60c18201527f6f77696e67206c696e6520696e20746865202e656e762066696c65206f66207960e18201527f6f75722070726f6a65637420287573696e6720666f727761726420736c6173686101018201527f6573293a0a4f50454e5a455050454c494e5f424153485f504154483d22433a2f6101218201527f50726f6772616d2046696c65732f4769742f62696e2f6261736822000000000061014182015261015c01919050565b7f4661696c656420746f2066696e64206c696e65207769746820707265666978208152602760f81b60208201526000835161438c8160218501602088016138d4565b6c0139034b71037baba383aba1d1609d1b60219184019182015283516143b981602e8401602088016138d4565b01602e01949350505050565b7f4661696c656420746f2072756e2075706772616465207361666574792076616c815268034b230ba34b7b71d160bd1b60208201526000825161400e8160298501602087016138d4565b7f55706772616465207361666574792076616c69646174696f6e206661696c65648152611d0560f11b6020820152600082516144528160228501602087016138d4565b9190910160220192915050565b8181038181111561027c5761027c613f8f565b6d021b7b73a3930b1ba103730b6b2960951b81526000825161449b81600e8501602087016138d4565b7f206d75737420626520696e2074686520666f726d6174204d79436f6e74726163600e9390910192830152507f742e736f6c3a4d79436f6e7472616374206f72204d79436f6e74726163742e73602e8201527f6f6c206f72206f75742f4d79436f6e74726163742e736f6c2f4d79436f6e7472604e8201526730b1ba173539b7b760c11b606e820152607601919050565b8082018082111561027c5761027c613f8f565b7f53504458206c6963656e7365206964656e7469666965722000000000000000008152600083516145778160188501602088016138d4565b6301034b7160e51b601891840191820152835161459b81601c8401602088016138d4565b7f20646f6573206e6f74206c6f6f6b206c696b65206120737570706f7274656420601c92909101918201527f6c6963656e736520666f7220626c6f636b206578706c6f726572207665726966603c8201527f69636174696f6e2e205573652074686520606c6963656e73655479706560206f605c8201527f7074696f6e20746f20737065636966792061206c6963656e736520747970652c607c8201527f206f7220736574207468652060736b69704c6963656e73655479706560206f70609c8201527f74696f6e20746f2060747275656020746f20736b69702e00000000000000000060bc82015260d301949350505050565b600082516146a18184602087016138d4565b600160fd1b920191825250600101919050565b7f406f70656e7a657070656c696e2f75706772616465732d636f726540000000008152600082516146ec81601c8501602087016138d4565b91909101601c0192915050565b60006001820161470b5761470b613f8f565b5060010190565b808202811582820484141761027c5761027c613f8f565b6001815b60018411156147645780850481111561474857614748613f8f565b600184161561475657908102905b60019390931c92800261472d565b935093915050565b60008261477b5750600161027c565b816147885750600061027c565b816001811461479e57600281146147a8576147c4565b600191505061027c565b60ff8411156147b9576147b9613f8f565b50506001821b61027c565b5060208310610133831016604e8410600b84101617156147e7575081810a61027c565b6147f46000198484614729565b806000190482111561480857614808613f8f565b029392505050565b600061038a838361476c565b60008161482b5761482b613f8f565b506000190190565b600083516148458184602088016138d4565b601d60f91b90830190815283516148638160018401602088016138d4565b01600101949350505050565b8181036000831280158383131683831282161715612b6a57612b6a613f8f565b6080516115cb6148cd600039600081816101830152818161046e015281816104d00152818161083f0152818161094e01526109b001526115cb6000f3fe608060405234801561001057600080fd5b50600436106101515760003560e01c80636133b4bb116100cd578063a217fddf11610081578063d547741f11610066578063d547741f14610332578063d9caed1214610345578063e63ab1e91461035857600080fd5b8063a217fddf14610317578063c8a023621461031f57600080fd5b80638456cb59116100b25780638456cb59146102a257806385f438c1146102aa57806391d14854146102d157600080fd5b80636133b4bb1461026f57806381100bf01461028257600080fd5b80632f2ff15d116101245780633c2f05a8116101095780633c2f05a8146102375780633f4ba83a1461025c5780635c975abb1461026457600080fd5b80632f2ff15d1461021157806336568abe1461022457600080fd5b806301ffc9a714610156578063116191b61461017e57806321fc65f2146101ca578063248a9ca3146101df575b600080fd5b6101696101643660046111fa565b61037f565b60405190151581526020015b60405180910390f35b6101a57f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610175565b6101dd6101d83660046112ae565b610418565b005b6102036101ed36600461131d565b6000908152600160208190526040909120015490565b604051908152602001610175565b6101dd61021f366004611336565b6105ba565b6101dd610232366004611336565b6105e6565b6002546101a590610100900473ffffffffffffffffffffffffffffffffffffffff1681565b6101dd610644565b60025460ff16610169565b6101dd61027d366004611362565b610679565b6003546101a59073ffffffffffffffffffffffffffffffffffffffff1681565b6101dd6108c6565b6102037f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b6101696102df366004611336565b600091825260016020908152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b610203600081565b6101dd61032d3660046112ae565b6108f8565b6101dd610340366004611336565b610a80565b6101dd6103533660046113bc565b610aa6565b6102037f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061041257507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b610420610b73565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461044a81610bb6565b610452610bc0565b61049373ffffffffffffffffffffffffffffffffffffffff87167f000000000000000000000000000000000000000000000000000000000000000086610bff565b6040517f5131ab5900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690635131ab599061050d9089908990899089908990600401611442565b600060405180830381600087803b15801561052757600080fd5b505af115801561053b573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167f85b5be9cf454e05e0bddf49315178102227c312078eefa3c00294fb4d912ae4e8686866040516105a09392919061149f565b60405180910390a3506105b36001600055565b5050505050565b600082815260016020819052604090912001546105d681610bb6565b6105e08383610c8c565b50505050565b73ffffffffffffffffffffffffffffffffffffffff81163314610635576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61063f8282610d57565b505050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61066e81610bb6565b610676610e16565b50565b600254610100900473ffffffffffffffffffffffffffffffffffffffff166340c10f19306106a88660056114c2565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815273ffffffffffffffffffffffffffffffffffffffff90921660048301526024820152604401600060405180830381600087803b15801561071357600080fd5b505af1158015610727573d6000803e3d6000fd5b5050600254600580546040517fa9059cbb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff91821660048201526024810192909252610100909204909116925063a9059cbb91506044016020604051808303816000875af11580156107af573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107d391906114fc565b506002546107ff90610100900473ffffffffffffffffffffffffffffffffffffffff1685858585610418565b6002546040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000081166004830152610100909204909116906370a0823190602401602060405180830381865afa158015610895573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108b9919061151e565b156105e0576105e0611537565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a6108f081610bb6565b610676610e93565b610900610b73565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461092a81610bb6565b610932610bc0565b61097373ffffffffffffffffffffffffffffffffffffffff87167f000000000000000000000000000000000000000000000000000000000000000086610bff565b6040517fb8969bd400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063b8969bd4906109ed9089908990899089908990600401611442565b600060405180830381600087803b158015610a0757600080fd5b505af1158015610a1b573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fb9d4efa96044e5f5e03e696fa9ae2ff66911cc27e8a637c3627c75bc5b2241c88686866040516105a09392919061149f565b60008281526001602081905260409091200154610a9c81610bb6565b6105e08383610d57565b610aae610b73565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e4610ad881610bb6565b610ae0610bc0565b610b0173ffffffffffffffffffffffffffffffffffffffff85168484610bff565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f9b1bfa7fa9ee420a16e124f794c35ac9f90472acc99140eb2f6447c714cad8eb84604051610b6091815260200190565b60405180910390a35061063f6001600055565b600260005403610baf576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b6106768133610eee565b60025460ff1615610bfd576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6040805173ffffffffffffffffffffffffffffffffffffffff8416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb0000000000000000000000000000000000000000000000000000000017905261063f908490610f7f565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff16610d4f57600083815260016020818152604080842073ffffffffffffffffffffffffffffffffffffffff8716808652925280842080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a4506001610412565b506000610412565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff1615610d4f57600083815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8616808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a4506001610412565b610e1e611015565b600280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b610e9b610bc0565b600280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258610e693390565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16610f7b576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82166004820152602481018390526044015b60405180910390fd5b5050565b6000610fa173ffffffffffffffffffffffffffffffffffffffff841683611051565b90508051600014158015610fc6575080806020019051810190610fc491906114fc565b155b1561063f576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84166004820152602401610f72565b60025460ff16610bfd576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606061105f83836000611066565b9392505050565b6060814710156110a4576040517fcd786059000000000000000000000000000000000000000000000000000000008152306004820152602401610f72565b6000808573ffffffffffffffffffffffffffffffffffffffff1684866040516110cd9190611566565b60006040518083038185875af1925050503d806000811461110a576040519150601f19603f3d011682016040523d82523d6000602084013e61110f565b606091505b509150915061111f868383611129565b9695505050505050565b60608261113e57611139826111b8565b61105f565b8151158015611162575073ffffffffffffffffffffffffffffffffffffffff84163b155b156111b1576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85166004820152602401610f72565b508061105f565b8051156111c85780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006020828403121561120c57600080fd5b81357fffffffff000000000000000000000000000000000000000000000000000000008116811461105f57600080fd5b803573ffffffffffffffffffffffffffffffffffffffff8116811461126057600080fd5b919050565b60008083601f84011261127757600080fd5b50813567ffffffffffffffff81111561128f57600080fd5b6020830191508360208285010111156112a757600080fd5b9250929050565b6000806000806000608086880312156112c657600080fd5b6112cf8661123c565b94506112dd6020870161123c565b935060408601359250606086013567ffffffffffffffff81111561130057600080fd5b61130c88828901611265565b969995985093965092949392505050565b60006020828403121561132f57600080fd5b5035919050565b6000806040838503121561134957600080fd5b823591506113596020840161123c565b90509250929050565b6000806000806060858703121561137857600080fd5b6113818561123c565b935060208501359250604085013567ffffffffffffffff8111156113a457600080fd5b6113b087828801611265565b95989497509550505050565b6000806000606084860312156113d157600080fd5b6113da8461123c565b92506113e86020850161123c565b929592945050506040919091013590565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff8616815273ffffffffffffffffffffffffffffffffffffffff851660208201528360408201526080606082015260006114946080830184866113f9565b979650505050505050565b8381526040602082015260006114b96040830184866113f9565b95945050505050565b80820180821115610412577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006020828403121561150e57600080fd5b8151801515811461105f57600080fd5b60006020828403121561153057600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b6000825160005b81811015611587576020818601810151858301520161156d565b50600092019182525091905056fea2646970667358221220104b616cf3a4de8de20ce232b02a085284cb46a03acd1d5e4082d88a9d59181064736f6c634300081a0033608060405234801561001057600080fd5b50604051610c9f380380610c9f83398101604081905261002f9161010d565b8181600361003d83826101ff565b50600461004a82826101ff565b50505050506102bd565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261007b57600080fd5b81516001600160401b0381111561009457610094610054565b604051601f8201601f19908116603f011681016001600160401b03811182821017156100c2576100c2610054565b6040528181528382016020018510156100da57600080fd5b60005b828110156100f9576020818601810151838301820152016100dd565b506000918101602001919091529392505050565b6000806040838503121561012057600080fd5b82516001600160401b0381111561013657600080fd5b6101428582860161006a565b602085015190935090506001600160401b0381111561016057600080fd5b61016c8582860161006a565b9150509250929050565b600181811c9082168061018a57607f821691505b6020821081036101aa57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156101fa57806000526020600020601f840160051c810160208510156101d75750805b601f840160051c820191505b818110156101f757600081556001016101e3565b50505b505050565b81516001600160401b0381111561021857610218610054565b61022c816102268454610176565b846101b0565b6020601f82116001811461026057600083156102485750848201515b600019600385901b1c1916600184901b1784556101f7565b600084815260208120601f198516915b828110156102905787850151825560209485019460019092019101610270565b50848210156102ae5786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b6109d3806102cc6000396000f3fe608060405234801561001057600080fd5b50600436106100be5760003560e01c806340c10f191161007657806395d89b411161005b57806395d89b4114610183578063a9059cbb1461018b578063dd62ed3e1461019e57600080fd5b806340c10f191461013857806370a082311461014d57600080fd5b806318160ddd116100a757806318160ddd1461010457806323b872dd14610116578063313ce5671461012957600080fd5b806306fdde03146100c3578063095ea7b3146100e1575b600080fd5b6100cb6101e4565b6040516100d891906107bf565b60405180910390f35b6100f46100ef366004610854565b610276565b60405190151581526020016100d8565b6002545b6040519081526020016100d8565b6100f461012436600461087e565b610290565b604051601281526020016100d8565b61014b610146366004610854565b6102b4565b005b61010861015b3660046108bb565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6100cb6102c2565b6100f4610199366004610854565b6102d1565b6101086101ac3660046108dd565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6060600380546101f390610910565b80601f016020809104026020016040519081016040528092919081815260200182805461021f90610910565b801561026c5780601f106102415761010080835404028352916020019161026c565b820191906000526020600020905b81548152906001019060200180831161024f57829003601f168201915b5050505050905090565b6000336102848185856102df565b60019150505b92915050565b60003361029e8582856102f1565b6102a98585856103c5565b506001949350505050565b6102be8282610470565b5050565b6060600480546101f390610910565b6000336102848185856103c5565b6102ec83838360016104cc565b505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146103bf57818110156103b0576040517ffb8f41b200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416600482015260248101829052604481018390526064015b60405180910390fd5b6103bf848484840360006104cc565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8316610415576040517f96c6fd1e000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff8216610465576040517fec442f05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b6102ec838383610614565b73ffffffffffffffffffffffffffffffffffffffff82166104c0576040517fec442f05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b6102be60008383610614565b73ffffffffffffffffffffffffffffffffffffffff841661051c576040517fe602df05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff831661056c576040517f94280d62000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260016020908152604080832093871683529290522082905580156103bf578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161060691815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff831661064c5780600260008282546106419190610963565b909155506106fe9050565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260208190526040902054818110156106d2576040517fe450d38c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8516600482015260248101829052604481018390526064016103a7565b73ffffffffffffffffffffffffffffffffffffffff841660009081526020819052604090209082900390555b73ffffffffffffffffffffffffffffffffffffffff821661072757600280548290039055610753565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090208054820190555b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516107b291815260200190565b60405180910390a3505050565b602081526000825180602084015260005b818110156107ed57602081860181015160408684010152016107d0565b5060006040828501015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011684010191505092915050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461084f57600080fd5b919050565b6000806040838503121561086757600080fd5b6108708361082b565b946020939093013593505050565b60008060006060848603121561089357600080fd5b61089c8461082b565b92506108aa6020850161082b565b929592945050506040919091013590565b6000602082840312156108cd57600080fd5b6108d68261082b565b9392505050565b600080604083850312156108f057600080fd5b6108f98361082b565b91506109076020840161082b565b90509250929050565b600181811c9082168061092457607f821691505b60208210810361095d577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b8082018082111561028a577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea26469706673582212207e804ca539d49155d2b6bc19268ce22f9f857027c75247d69fb0d56a089c93d464736f6c634300081a00330000000000000000000000007109709ecfa91a80626ff3989d68f67f5b1dd12d54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f7420", } // ERC20CustodyEchidnaTestABI is the input ABI used to generate the binding from. diff --git a/v2/pkg/gatewayevm.sol/gatewayevm.go b/v2/pkg/gatewayevm.sol/gatewayevm.go index 5eb9dcca..09b82291 100644 --- a/v2/pkg/gatewayevm.sol/gatewayevm.go +++ b/v2/pkg/gatewayevm.sol/gatewayevm.go @@ -31,8 +31,8 @@ var ( // GatewayEVMMetaData contains all meta data concerning the GatewayEVM contract. var GatewayEVMMetaData = &bind.MetaData{ - ABI: "[{\"type\":\"constructor\",\"inputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"ASSET_HANDLER_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"DEFAULT_ADMIN_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"PAUSER_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"TSS_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"UPGRADE_INTERFACE_VERSION\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"call\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"custody\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"deposit\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"deposit\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"depositAndCall\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"depositAndCall\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"execute\",\"inputs\":[{\"name\":\"destination\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"executeRevert\",\"inputs\":[{\"name\":\"destination\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"executeWithERC20\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"getRoleAdmin\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"grantRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"hasRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"initialize\",\"inputs\":[{\"name\":\"tssAddress_\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"zetaToken_\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"admin_\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"pause\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"paused\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"proxiableUUID\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"renounceRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"callerConfirmation\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"revertWithERC20\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"revokeRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setConnector\",\"inputs\":[{\"name\":\"zetaConnector_\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setCustody\",\"inputs\":[{\"name\":\"custody_\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"supportsInterface\",\"inputs\":[{\"name\":\"interfaceId\",\"type\":\"bytes4\",\"internalType\":\"bytes4\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"tssAddress\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"unpause\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"upgradeToAndCall\",\"inputs\":[{\"name\":\"newImplementation\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"zetaConnector\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"zetaToken\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"event\",\"name\":\"Call\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"receiver\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Deposit\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"receiver\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"asset\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Executed\",\"inputs\":[{\"name\":\"destination\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ExecutedWithERC20\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Initialized\",\"inputs\":[{\"name\":\"version\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Paused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Reverted\",\"inputs\":[{\"name\":\"destination\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RevertedWithERC20\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleAdminChanged\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"previousAdminRole\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"newAdminRole\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleGranted\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleRevoked\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Unpaused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Upgraded\",\"inputs\":[{\"name\":\"implementation\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"AccessControlBadConfirmation\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"AccessControlUnauthorizedAccount\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"neededRole\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"type\":\"error\",\"name\":\"AddressEmptyCode\",\"inputs\":[{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"AddressInsufficientBalance\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"ApprovalFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"CustodyInitialized\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"DepositFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ERC1967InvalidImplementation\",\"inputs\":[{\"name\":\"implementation\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"ERC1967NonPayable\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"EnforcedPause\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ExecutionFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ExpectedPause\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"FailedInnerCall\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientERC20Amount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientETHAmount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidInitialization\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NotInitializing\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ReentrancyGuardReentrantCall\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"SafeERC20FailedOperation\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"UUPSUnauthorizedCallContext\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"UUPSUnsupportedProxiableUUID\",\"inputs\":[{\"name\":\"slot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"type\":\"error\",\"name\":\"ZeroAddress\",\"inputs\":[]}]", - Bin: "0x60a06040523060805234801561001457600080fd5b5061001d610022565b6100d4565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100725760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146100d15780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b608051612f486100fd60003960008181611d4a01528181611d7301526121420152612f486000f3fe6080604052600436106101e35760003560e01c80635c975abb11610102578063ae7a3a6f11610095578063dda79b7511610064578063dda79b751461062e578063e63ab1e91461064e578063f340fa0114610682578063f45346dc1461069557600080fd5b8063ae7a3a6f146105ae578063b8969bd4146105ce578063c0c53b8b146105ee578063d547741f1461060e57600080fd5b806391d14854116100d157806391d14854146104b7578063a217fddf1461051c578063a783c78914610531578063ad3cb1cc1461056557600080fd5b80635c975abb146104175780635d62c8601461044e5780638456cb59146104825780638c6f037f1461049757600080fd5b806335c018db1161017a5780635131ab59116101495780635131ab59146103a257806352d1902d146103c257806357bec62f146103d75780635b112591146103f757600080fd5b806335c018db1461034757806336568abe1461035a5780633f4ba83a1461037a5780634f1ef2861461038f57600080fd5b806321e093b1116101b657806321e093b11461027f578063248a9ca3146102b757806329c59b5d146103145780632f2ff15d1461032757600080fd5b806301ffc9a7146101e857806310188aef1461021d5780631b8b921d1461023f5780631cff79cd1461025f575b600080fd5b3480156101f457600080fd5b506102086102033660046129bb565b6106b5565b60405190151581526020015b60405180910390f35b34801561022957600080fd5b5061023d610238366004612a19565b61074e565b005b34801561024b57600080fd5b5061023d61025a366004612a7d565b610842565b61027261026d366004612a7d565b6108cd565b6040516102149190612b3e565b34801561028b57600080fd5b5060035461029f906001600160a01b031681565b6040516001600160a01b039091168152602001610214565b3480156102c357600080fd5b506103066102d2366004612b51565b60009081527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052604090206001015490565b604051908152602001610214565b61023d610322366004612a7d565b610990565b34801561033357600080fd5b5061023d610342366004612b6a565b610ae3565b61023d610355366004612a7d565b610b2d565b34801561036657600080fd5b5061023d610375366004612b6a565b610d1c565b34801561038657600080fd5b5061023d610d68565b61023d61039d366004612bc5565b610d9d565b3480156103ae57600080fd5b5061023d6103bd366004612ccc565b610dbc565b3480156103ce57600080fd5b50610306611099565b3480156103e357600080fd5b5060025461029f906001600160a01b031681565b34801561040357600080fd5b5060015461029f906001600160a01b031681565b34801561042357600080fd5b507fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff16610208565b34801561045a57600080fd5b506103067f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b981565b34801561048e57600080fd5b5061023d6110c8565b3480156104a357600080fd5b5061023d6104b2366004612d3b565b6110fa565b3480156104c357600080fd5b506102086104d2366004612b6a565b60009182527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408084206001600160a01b0393909316845291905290205460ff1690565b34801561052857600080fd5b50610306600081565b34801561053d57600080fd5b506103067f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb81565b34801561057157600080fd5b506102726040518060400160405280600581526020017f352e302e3000000000000000000000000000000000000000000000000000000081525081565b3480156105ba57600080fd5b5061023d6105c9366004612a19565b6111d0565b3480156105da57600080fd5b5061023d6105e9366004612ccc565b6112c4565b3480156105fa57600080fd5b5061023d610609366004612d8d565b61143d565b34801561061a57600080fd5b5061023d610629366004612b6a565b6116f2565b34801561063a57600080fd5b5060005461029f906001600160a01b031681565b34801561065a57600080fd5b506103067f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b61023d610690366004612a19565b611736565b3480156106a157600080fd5b5061023d6106b0366004612dd0565b61188b565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061074857507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b600061075981611946565b6002546001600160a01b03161561079c576040517fb337f37800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b0382166107dc576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6108067f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b983611950565b5050600280547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b61084a611a3d565b610852611a9b565b826001600160a01b0316336001600160a01b03167f2a21062ee9199c2e205622999eeb7c3da73153674f36a0acd3f74fa6af67bde38484604051610897929190612e4c565b60405180910390a36108c860017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b505050565b60607f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb6108f981611946565b610901611a3d565b610909611a9b565b6000610916868686611b42565b9050856001600160a01b03167fcaf938de11c367272220bfd1d2baa99ca46665e7bc4d85f00adb51b90fe1fa9f34878760405161095593929190612e68565b60405180910390a2915061098860017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b509392505050565b610998611a3d565b6109a0611a9b565b346000036109da576040517f7671265e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546040516000916001600160a01b03169034908381818185875af1925050503d8060008114610a27576040519150601f19603f3d011682016040523d82523d6000602084013e610a2c565b606091505b5050905080610a67576040517f79cacff100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b836001600160a01b0316336001600160a01b03167f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a43460008787604051610ab19493929190612e82565b60405180910390a3506108c860017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020526040902060010154610b1d81611946565b610b278383611950565b50505050565b7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb610b5781611946565b610b5f611a3d565b610b67611a9b565b6001600160a01b038416610ba7576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000846001600160a01b03163460405160006040518083038185875af1925050503d8060008114610bf4576040519150601f19603f3d011682016040523d82523d6000602084013e610bf9565b606091505b5050905080610c34576040517facfdb44400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f8fcaa0b50000000000000000000000000000000000000000000000000000000081526001600160a01b03861690638fcaa0b590610c7b9087908790600401612e4c565b600060405180830381600087803b158015610c9557600080fd5b505af1158015610ca9573d6000803e3d6000fd5b50505050846001600160a01b03167fd5d7616b1678354a0dea9d7e57e6a090bff5babe9f8d6381fdbad16e89ba311c348686604051610cea93929190612e68565b60405180910390a250610b2760017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b6001600160a01b0381163314610d5e576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6108c88282611beb565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610d9281611946565b610d9a611caf565b50565b610da5611d3f565b610dae82611e0f565b610db88282611e1a565b5050565b7f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b9610de681611946565b610dee611a3d565b610df6611a9b565b83600003610e30576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610e3a8686611f3e565b610e70576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b0386811660048301526024820186905287169063095ea7b3906044016020604051808303816000875af1158015610ed8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610efc9190612eab565b610f32576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610f3f868585611b42565b9050610f4b8787611f3e565b610f81576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201526000906001600160a01b038916906370a0823190602401602060405180830381865afa158015610fe1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110059190612ecd565b90508015611017576110178882611fce565b866001600160a01b0316886001600160a01b03167f29c40793bffd84cb810179f15d1ceec72bc7f0785514c668ba36645cf99b738288888860405161105e93929190612e68565b60405180910390a3505061109160017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b505050505050565b60006110a3612137565b507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc90565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a6110f281611946565b610d9a612199565b611102611a3d565b61110a611a9b565b83600003611144576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61114f338486612212565b846001600160a01b0316336001600160a01b03167f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a4868686866040516111989493929190612e82565b60405180910390a36111c960017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b5050505050565b60006111db81611946565b6000546001600160a01b03161561121e576040517fb337f37800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03821661125e576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6112887f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b983611950565b5050600080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b7f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b96112ee81611946565b6112f6611a3d565b6112fe611a9b565b83600003611338576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61134c6001600160a01b038716868661239b565b6040517f8fcaa0b50000000000000000000000000000000000000000000000000000000081526001600160a01b03861690638fcaa0b5906113939086908690600401612e4c565b600060405180830381600087803b1580156113ad57600080fd5b505af11580156113c1573d6000803e3d6000fd5b50505050846001600160a01b0316866001600160a01b03167f723fc7be2448075379e4fdf1e6bf5fead954d2668d2da05dcb44ccfec4beeda786868660405161140c93929190612e68565b60405180910390a361109160017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156114885750825b905060008267ffffffffffffffff1660011480156114a55750303b155b9050811580156114b3575080155b156114ea576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84547fffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000166001178555831561154b5784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff16680100000000000000001785555b6001600160a01b038816158061156857506001600160a01b038716155b1561159f576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6115a761240f565b6115af612417565b6115b761240f565b6115bf612427565b6115ca600087611950565b506115f57f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a87611950565b50600180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b038a161790556116537f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb89611950565b50600380547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03891617905583156116e85784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b5050505050505050565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052604090206001015461172c81611946565b610b278383611beb565b61173e611a3d565b611746611a9b565b34600003611780576040517f7671265e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546040516000916001600160a01b03169034908381818185875af1925050503d80600081146117cd576040519150601f19603f3d011682016040523d82523d6000602084013e6117d2565b606091505b505090508061180d576040517f79cacff100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60408051348152600060208201819052606082840181905282015290516001600160a01b0384169133917f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a49181900360800190a350610d9a60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b611893611a3d565b61189b611a9b565b816000036118d5576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6118e0338284612212565b826001600160a01b0316336001600160a01b03167f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a484846040516108979291909182526001600160a01b0316602082015260606040820181905260009082015260800190565b610d9a8133612437565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff16611a33576000848152602082815260408083206001600160a01b0387168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790556119e93390565b6001600160a01b0316836001600160a01b0316857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a46001915050610748565b6000915050610748565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff1615611a99576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0080547ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01611b16576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60029055565b60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b6060600080856001600160a01b0316348686604051611b62929190612ee6565b60006040518083038185875af1925050503d8060008114611b9f576040519150601f19603f3d011682016040523d82523d6000602084013e611ba4565b606091505b509150915081611be0576040517facfdb44400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b9150505b9392505050565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff1615611a33576000848152602082815260408083206001600160a01b038716808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339287917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a46001915050610748565b611cb76124c4565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001681557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a150565b306001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161480611dd857507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316611dcc7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b6001600160a01b031614155b15611a99576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610db881611946565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015611e92575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252611e8f91810190612ecd565b60015b611ed8576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b03831660048201526024015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8114611f34576040517faa1d49a400000000000000000000000000000000000000000000000000000000815260048101829052602401611ecf565b6108c8838361251f565b6040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b038281166004830152600060248301819052919084169063095ea7b3906044016020604051808303816000875af1158015611faa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611be49190612eab565b6003546001600160a01b039081169083160361211d576002546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152602481018390529083169063095ea7b3906044016020604051808303816000875af1158015612050573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120749190612eab565b6120aa576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002546040517f743e0c9b000000000000000000000000000000000000000000000000000000008152600481018390526001600160a01b039091169063743e0c9b90602401600060405180830381600087803b15801561210957600080fd5b505af1158015611091573d6000803e3d6000fd5b600054610db8906001600160a01b0384811691168361239b565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614611a99576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6121a1611a3d565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011781557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25833611d21565b6003546001600160a01b039081169083160361237f5761223d6001600160a01b038316843084612575565b6002546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152602481018390529083169063095ea7b3906044016020604051808303816000875af11580156122a9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122cd9190612eab565b612303576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002546040517f743e0c9b000000000000000000000000000000000000000000000000000000008152600481018390526001600160a01b039091169063743e0c9b90602401600060405180830381600087803b15801561236257600080fd5b505af1158015612376573d6000803e3d6000fd5b50505050505050565b6000546108c8906001600160a01b038481169186911684612575565b6040516001600160a01b038381166024830152604482018390526108c891859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506125ae565b611a9961262a565b61241f61262a565b611a99612691565b61242f61262a565b611a99612699565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408083206001600160a01b038516845290915290205460ff16610db8576040517fe2517d3f0000000000000000000000000000000000000000000000000000000081526001600160a01b038216600482015260248101839052604401611ecf565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff16611a99576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612528826126ea565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a280511561256d576108c88282612792565b610db8612808565b6040516001600160a01b038481166024830152838116604483015260648201839052610b279186918216906323b872dd906084016123c8565b60006125c36001600160a01b03841683612840565b905080516000141580156125e85750808060200190518101906125e69190612eab565b155b156108c8576040517f5274afe70000000000000000000000000000000000000000000000000000000081526001600160a01b0384166004820152602401611ecf565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff16611a99576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611b1c61262a565b6126a161262a565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055565b806001600160a01b03163b600003612739576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b0382166004820152602401611ecf565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6060600080846001600160a01b0316846040516127af9190612ef6565b600060405180830381855af49150503d80600081146127ea576040519150601f19603f3d011682016040523d82523d6000602084013e6127ef565b606091505b50915091506127ff85838361284e565b95945050505050565b3415611a99576040517fb398979f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6060611be4838360006128c3565b6060826128635761285e82612979565b611be4565b815115801561287a57506001600160a01b0384163b155b156128bc576040517f9996b3150000000000000000000000000000000000000000000000000000000081526001600160a01b0385166004820152602401611ecf565b5080611be4565b606081471015612901576040517fcd786059000000000000000000000000000000000000000000000000000000008152306004820152602401611ecf565b600080856001600160a01b0316848660405161291d9190612ef6565b60006040518083038185875af1925050503d806000811461295a576040519150601f19603f3d011682016040523d82523d6000602084013e61295f565b606091505b509150915061296f86838361284e565b9695505050505050565b8051156129895780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000602082840312156129cd57600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114611be457600080fd5b80356001600160a01b0381168114612a1457600080fd5b919050565b600060208284031215612a2b57600080fd5b611be4826129fd565b60008083601f840112612a4657600080fd5b50813567ffffffffffffffff811115612a5e57600080fd5b602083019150836020828501011115612a7657600080fd5b9250929050565b600080600060408486031215612a9257600080fd5b612a9b846129fd565b9250602084013567ffffffffffffffff811115612ab757600080fd5b612ac386828701612a34565b9497909650939450505050565b60005b83811015612aeb578181015183820152602001612ad3565b50506000910152565b60008151808452612b0c816020860160208601612ad0565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000611be46020830184612af4565b600060208284031215612b6357600080fd5b5035919050565b60008060408385031215612b7d57600080fd5b82359150612b8d602084016129fd565b90509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60008060408385031215612bd857600080fd5b612be1836129fd565b9150602083013567ffffffffffffffff811115612bfd57600080fd5b8301601f81018513612c0e57600080fd5b803567ffffffffffffffff811115612c2857612c28612b96565b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8501160116810181811067ffffffffffffffff82111715612c9457612c94612b96565b604052818152828201602001871015612cac57600080fd5b816020840160208301376000602083830101528093505050509250929050565b600080600080600060808688031215612ce457600080fd5b612ced866129fd565b9450612cfb602087016129fd565b935060408601359250606086013567ffffffffffffffff811115612d1e57600080fd5b612d2a88828901612a34565b969995985093965092949392505050565b600080600080600060808688031215612d5357600080fd5b612d5c866129fd565b945060208601359350612d71604087016129fd565b9250606086013567ffffffffffffffff811115612d1e57600080fd5b600080600060608486031215612da257600080fd5b612dab846129fd565b9250612db9602085016129fd565b9150612dc7604085016129fd565b90509250925092565b600080600060608486031215612de557600080fd5b612dee846129fd565b925060208401359150612dc7604085016129fd565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b602081526000612e60602083018486612e03565b949350505050565b8381526040602082015260006127ff604083018486612e03565b8481526001600160a01b038416602082015260606040820152600061296f606083018486612e03565b600060208284031215612ebd57600080fd5b81518015158114611be457600080fd5b600060208284031215612edf57600080fd5b5051919050565b8183823760009101908152919050565b60008251612f08818460208701612ad0565b919091019291505056fea26469706673582212208889b449de125bcd9995c2452115e4c4e941948f5ff17d068f0677c925a7730064736f6c634300081a0033", + ABI: "[{\"type\":\"constructor\",\"inputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"ASSET_HANDLER_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"DEFAULT_ADMIN_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"PAUSER_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"TSS_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"UPGRADE_INTERFACE_VERSION\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"call\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"custody\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"deposit\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"deposit\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"depositAndCall\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"depositAndCall\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"execute\",\"inputs\":[{\"name\":\"destination\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"executeRevert\",\"inputs\":[{\"name\":\"destination\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"executeWithERC20\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"getRoleAdmin\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"grantRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"hasRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"initialize\",\"inputs\":[{\"name\":\"tssAddress_\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"zetaToken_\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"admin_\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"pause\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"paused\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"proxiableUUID\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"renounceRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"callerConfirmation\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"revertWithERC20\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"revokeRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setConnector\",\"inputs\":[{\"name\":\"zetaConnector_\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setCustody\",\"inputs\":[{\"name\":\"custody_\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"supportsInterface\",\"inputs\":[{\"name\":\"interfaceId\",\"type\":\"bytes4\",\"internalType\":\"bytes4\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"tssAddress\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"unpause\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"upgradeToAndCall\",\"inputs\":[{\"name\":\"newImplementation\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"zetaConnector\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"zetaToken\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"event\",\"name\":\"Call\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"receiver\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Deposit\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"receiver\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"asset\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Executed\",\"inputs\":[{\"name\":\"destination\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ExecutedWithERC20\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Initialized\",\"inputs\":[{\"name\":\"version\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Paused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Reverted\",\"inputs\":[{\"name\":\"destination\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RevertedWithERC20\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleAdminChanged\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"previousAdminRole\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"newAdminRole\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleGranted\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleRevoked\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Unpaused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Upgraded\",\"inputs\":[{\"name\":\"implementation\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"AccessControlBadConfirmation\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"AccessControlUnauthorizedAccount\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"neededRole\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"type\":\"error\",\"name\":\"AddressEmptyCode\",\"inputs\":[{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"AddressInsufficientBalance\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"ApprovalFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ConnectorInitialized\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"CustodyInitialized\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"DepositFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ERC1967InvalidImplementation\",\"inputs\":[{\"name\":\"implementation\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"ERC1967NonPayable\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"EnforcedPause\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ExecutionFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ExpectedPause\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"FailedInnerCall\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientERC20Amount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientETHAmount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidInitialization\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NotInitializing\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ReentrancyGuardReentrantCall\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"SafeERC20FailedOperation\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"UUPSUnauthorizedCallContext\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"UUPSUnsupportedProxiableUUID\",\"inputs\":[{\"name\":\"slot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"type\":\"error\",\"name\":\"ZeroAddress\",\"inputs\":[]}]", + Bin: "0x60a06040523060805234801561001457600080fd5b5061001d610022565b6100d4565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100725760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146100d15780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b6080516131046100fd60003960008181611f0601528181611f2f01526122fe01526131046000f3fe6080604052600436106101e35760003560e01c80635c975abb11610102578063ae7a3a6f11610095578063dda79b7511610064578063dda79b751461062e578063e63ab1e91461064e578063f340fa0114610682578063f45346dc1461069557600080fd5b8063ae7a3a6f146105ae578063b8969bd4146105ce578063c0c53b8b146105ee578063d547741f1461060e57600080fd5b806391d14854116100d157806391d14854146104b7578063a217fddf1461051c578063a783c78914610531578063ad3cb1cc1461056557600080fd5b80635c975abb146104175780635d62c8601461044e5780638456cb59146104825780638c6f037f1461049757600080fd5b806335c018db1161017a5780635131ab59116101495780635131ab59146103a257806352d1902d146103c257806357bec62f146103d75780635b112591146103f757600080fd5b806335c018db1461034757806336568abe1461035a5780633f4ba83a1461037a5780634f1ef2861461038f57600080fd5b806321e093b1116101b657806321e093b11461027f578063248a9ca3146102b757806329c59b5d146103145780632f2ff15d1461032757600080fd5b806301ffc9a7146101e857806310188aef1461021d5780631b8b921d1461023f5780631cff79cd1461025f575b600080fd5b3480156101f457600080fd5b50610208610203366004612b77565b6106b5565b60405190151581526020015b60405180910390f35b34801561022957600080fd5b5061023d610238366004612bd5565b61074e565b005b34801561024b57600080fd5b5061023d61025a366004612c39565b610842565b61027261026d366004612c39565b6108cd565b6040516102149190612cfa565b34801561028b57600080fd5b5060035461029f906001600160a01b031681565b6040516001600160a01b039091168152602001610214565b3480156102c357600080fd5b506103066102d2366004612d0d565b60009081527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052604090206001015490565b604051908152602001610214565b61023d610322366004612c39565b6109d0565b34801561033357600080fd5b5061023d610342366004612d26565b610b63565b61023d610355366004612c39565b610bad565b34801561036657600080fd5b5061023d610375366004612d26565b610d9c565b34801561038657600080fd5b5061023d610de8565b61023d61039d366004612d81565b610e1d565b3480156103ae57600080fd5b5061023d6103bd366004612e88565b610e3c565b3480156103ce57600080fd5b50610306611155565b3480156103e357600080fd5b5060025461029f906001600160a01b031681565b34801561040357600080fd5b5060015461029f906001600160a01b031681565b34801561042357600080fd5b507fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff16610208565b34801561045a57600080fd5b506103067f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b981565b34801561048e57600080fd5b5061023d611184565b3480156104a357600080fd5b5061023d6104b2366004612ef7565b6111b6565b3480156104c357600080fd5b506102086104d2366004612d26565b60009182527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408084206001600160a01b0393909316845291905290205460ff1690565b34801561052857600080fd5b50610306600081565b34801561053d57600080fd5b506103067f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb81565b34801561057157600080fd5b506102726040518060400160405280600581526020017f352e302e3000000000000000000000000000000000000000000000000000000081525081565b3480156105ba57600080fd5b5061023d6105c9366004612bd5565b6112cc565b3480156105da57600080fd5b5061023d6105e9366004612e88565b6113c0565b3480156105fa57600080fd5b5061023d610609366004612f49565b611579565b34801561061a57600080fd5b5061023d610629366004612d26565b61182e565b34801561063a57600080fd5b5060005461029f906001600160a01b031681565b34801561065a57600080fd5b506103067f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b61023d610690366004612bd5565b611872565b3480156106a157600080fd5b5061023d6106b0366004612f8c565b611a07565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061074857507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b600061075981611b02565b6001600160a01b038216610799576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002546001600160a01b0316156107dc576040517f0c8dc01600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6108067f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b983611b0c565b5050600280547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b61084a611bf9565b610852611c57565b826001600160a01b0316336001600160a01b03167f2a21062ee9199c2e205622999eeb7c3da73153674f36a0acd3f74fa6af67bde38484604051610897929190613008565b60405180910390a36108c860017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b505050565b60607f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb6108f981611b02565b610901611bf9565b610909611c57565b6001600160a01b038516610949576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610956868686611cfe565b9050856001600160a01b03167fcaf938de11c367272220bfd1d2baa99ca46665e7bc4d85f00adb51b90fe1fa9f34878760405161099593929190613024565b60405180910390a291506109c860017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b509392505050565b6109d8611bf9565b6109e0611c57565b34600003610a1a576040517f7671265e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038316610a5a576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546040516000916001600160a01b03169034908381818185875af1925050503d8060008114610aa7576040519150601f19603f3d011682016040523d82523d6000602084013e610aac565b606091505b5050905080610ae7576040517f79cacff100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b836001600160a01b0316336001600160a01b03167f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a43460008787604051610b31949392919061303e565b60405180910390a3506108c860017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020526040902060010154610b9d81611b02565b610ba78383611b0c565b50505050565b7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb610bd781611b02565b610bdf611bf9565b610be7611c57565b6001600160a01b038416610c27576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000846001600160a01b03163460405160006040518083038185875af1925050503d8060008114610c74576040519150601f19603f3d011682016040523d82523d6000602084013e610c79565b606091505b5050905080610cb4576040517facfdb44400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f8fcaa0b50000000000000000000000000000000000000000000000000000000081526001600160a01b03861690638fcaa0b590610cfb9087908790600401613008565b600060405180830381600087803b158015610d1557600080fd5b505af1158015610d29573d6000803e3d6000fd5b50505050846001600160a01b03167fd5d7616b1678354a0dea9d7e57e6a090bff5babe9f8d6381fdbad16e89ba311c348686604051610d6a93929190613024565b60405180910390a250610ba760017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b6001600160a01b0381163314610dde576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6108c88282611da7565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610e1281611b02565b610e1a611e6b565b50565b610e25611efb565b610e2e82611fcb565b610e388282611fd6565b5050565b7f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b9610e6681611b02565b610e6e611bf9565b610e76611c57565b83600003610eb0576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038516610ef0576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610efa86866120fa565b610f30576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b0386811660048301526024820186905287169063095ea7b3906044016020604051808303816000875af1158015610f98573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fbc9190613067565b610ff2576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610ffd858484611cfe565b5061100886866120fa565b61103e576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201526000906001600160a01b038816906370a0823190602401602060405180830381865afa15801561109e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110c29190613089565b905080156110d4576110d4878261218a565b856001600160a01b0316876001600160a01b03167f29c40793bffd84cb810179f15d1ceec72bc7f0785514c668ba36645cf99b738287878760405161111b93929190613024565b60405180910390a35061114d60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b505050505050565b600061115f6122f3565b507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc90565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a6111ae81611b02565b610e1a612355565b6111be611bf9565b6111c6611c57565b83600003611200576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038516611240576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61124b3384866123ce565b846001600160a01b0316336001600160a01b03167f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a486868686604051611294949392919061303e565b60405180910390a36112c560017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b5050505050565b60006112d781611b02565b6001600160a01b038216611317576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000546001600160a01b03161561135a576040517fb337f37800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6113847f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b983611b0c565b5050600080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b7f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b96113ea81611b02565b6113f2611bf9565b6113fa611c57565b83600003611434576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038516611474576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6114886001600160a01b0387168686612557565b6040517f8fcaa0b50000000000000000000000000000000000000000000000000000000081526001600160a01b03861690638fcaa0b5906114cf9086908690600401613008565b600060405180830381600087803b1580156114e957600080fd5b505af11580156114fd573d6000803e3d6000fd5b50505050846001600160a01b0316866001600160a01b03167f723fc7be2448075379e4fdf1e6bf5fead954d2668d2da05dcb44ccfec4beeda786868660405161154893929190613024565b60405180910390a361114d60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156115c45750825b905060008267ffffffffffffffff1660011480156115e15750303b155b9050811580156115ef575080155b15611626576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84547fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000016600117855583156116875784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff16680100000000000000001785555b6001600160a01b03881615806116a457506001600160a01b038716155b156116db576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6116e36125cb565b6116eb6125d3565b6116f36125cb565b6116fb6125e3565b611706600087611b0c565b506117317f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a87611b0c565b50600180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b038a1617905561178f7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb89611b0c565b50600380547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03891617905583156118245784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b5050505050505050565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052604090206001015461186881611b02565b610ba78383611da7565b61187a611bf9565b611882611c57565b346000036118bc576040517f7671265e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b0381166118fc576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546040516000916001600160a01b03169034908381818185875af1925050503d8060008114611949576040519150601f19603f3d011682016040523d82523d6000602084013e61194e565b606091505b5050905080611989576040517f79cacff100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60408051348152600060208201819052606082840181905282015290516001600160a01b0384169133917f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a49181900360800190a350610e1a60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b611a0f611bf9565b611a17611c57565b81600003611a51576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038316611a91576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611a9c3382846123ce565b826001600160a01b0316336001600160a01b03167f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a484846040516108979291909182526001600160a01b0316602082015260606040820181905260009082015260800190565b610e1a81336125f3565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff16611bef576000848152602082815260408083206001600160a01b0387168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055611ba53390565b6001600160a01b0316836001600160a01b0316857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a46001915050610748565b6000915050610748565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff1615611c55576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0080547ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01611cd2576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60029055565b60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b6060600080856001600160a01b0316348686604051611d1e9291906130a2565b60006040518083038185875af1925050503d8060008114611d5b576040519150601f19603f3d011682016040523d82523d6000602084013e611d60565b606091505b509150915081611d9c576040517facfdb44400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b9150505b9392505050565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff1615611bef576000848152602082815260408083206001600160a01b038716808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339287917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a46001915050610748565b611e73612680565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001681557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a150565b306001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161480611f9457507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316611f887f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b6001600160a01b031614155b15611c55576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610e3881611b02565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa92505050801561204e575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820190925261204b91810190613089565b60015b612094576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b03831660048201526024015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc81146120f0576040517faa1d49a40000000000000000000000000000000000000000000000000000000081526004810182905260240161208b565b6108c883836126db565b6040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b038281166004830152600060248301819052919084169063095ea7b3906044016020604051808303816000875af1158015612166573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611da09190613067565b6003546001600160a01b03908116908316036122d9576002546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152602481018390529083169063095ea7b3906044016020604051808303816000875af115801561220c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122309190613067565b612266576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002546040517f743e0c9b000000000000000000000000000000000000000000000000000000008152600481018390526001600160a01b039091169063743e0c9b90602401600060405180830381600087803b1580156122c557600080fd5b505af115801561114d573d6000803e3d6000fd5b600054610e38906001600160a01b03848116911683612557565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614611c55576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61235d611bf9565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011781557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25833611edd565b6003546001600160a01b039081169083160361253b576123f96001600160a01b038316843084612731565b6002546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152602481018390529083169063095ea7b3906044016020604051808303816000875af1158015612465573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124899190613067565b6124bf576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002546040517f743e0c9b000000000000000000000000000000000000000000000000000000008152600481018390526001600160a01b039091169063743e0c9b90602401600060405180830381600087803b15801561251e57600080fd5b505af1158015612532573d6000803e3d6000fd5b50505050505050565b6000546108c8906001600160a01b038481169186911684612731565b6040516001600160a01b038381166024830152604482018390526108c891859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505061276a565b611c556127e6565b6125db6127e6565b611c5561284d565b6125eb6127e6565b611c55612855565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408083206001600160a01b038516845290915290205460ff16610e38576040517fe2517d3f0000000000000000000000000000000000000000000000000000000081526001600160a01b03821660048201526024810183905260440161208b565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff16611c55576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6126e4826128a6565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a2805115612729576108c8828261294e565b610e386129c4565b6040516001600160a01b038481166024830152838116604483015260648201839052610ba79186918216906323b872dd90608401612584565b600061277f6001600160a01b038416836129fc565b905080516000141580156127a45750808060200190518101906127a29190613067565b155b156108c8576040517f5274afe70000000000000000000000000000000000000000000000000000000081526001600160a01b038416600482015260240161208b565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff16611c55576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611cd86127e6565b61285d6127e6565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055565b806001600160a01b03163b6000036128f5576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b038216600482015260240161208b565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6060600080846001600160a01b03168460405161296b91906130b2565b600060405180830381855af49150503d80600081146129a6576040519150601f19603f3d011682016040523d82523d6000602084013e6129ab565b606091505b50915091506129bb858383612a0a565b95945050505050565b3415611c55576040517fb398979f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6060611da083836000612a7f565b606082612a1f57612a1a82612b35565b611da0565b8151158015612a3657506001600160a01b0384163b155b15612a78576040517f9996b3150000000000000000000000000000000000000000000000000000000081526001600160a01b038516600482015260240161208b565b5080611da0565b606081471015612abd576040517fcd78605900000000000000000000000000000000000000000000000000000000815230600482015260240161208b565b600080856001600160a01b03168486604051612ad991906130b2565b60006040518083038185875af1925050503d8060008114612b16576040519150601f19603f3d011682016040523d82523d6000602084013e612b1b565b606091505b5091509150612b2b868383612a0a565b9695505050505050565b805115612b455780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060208284031215612b8957600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114611da057600080fd5b80356001600160a01b0381168114612bd057600080fd5b919050565b600060208284031215612be757600080fd5b611da082612bb9565b60008083601f840112612c0257600080fd5b50813567ffffffffffffffff811115612c1a57600080fd5b602083019150836020828501011115612c3257600080fd5b9250929050565b600080600060408486031215612c4e57600080fd5b612c5784612bb9565b9250602084013567ffffffffffffffff811115612c7357600080fd5b612c7f86828701612bf0565b9497909650939450505050565b60005b83811015612ca7578181015183820152602001612c8f565b50506000910152565b60008151808452612cc8816020860160208601612c8c565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000611da06020830184612cb0565b600060208284031215612d1f57600080fd5b5035919050565b60008060408385031215612d3957600080fd5b82359150612d4960208401612bb9565b90509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60008060408385031215612d9457600080fd5b612d9d83612bb9565b9150602083013567ffffffffffffffff811115612db957600080fd5b8301601f81018513612dca57600080fd5b803567ffffffffffffffff811115612de457612de4612d52565b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8501160116810181811067ffffffffffffffff82111715612e5057612e50612d52565b604052818152828201602001871015612e6857600080fd5b816020840160208301376000602083830101528093505050509250929050565b600080600080600060808688031215612ea057600080fd5b612ea986612bb9565b9450612eb760208701612bb9565b935060408601359250606086013567ffffffffffffffff811115612eda57600080fd5b612ee688828901612bf0565b969995985093965092949392505050565b600080600080600060808688031215612f0f57600080fd5b612f1886612bb9565b945060208601359350612f2d60408701612bb9565b9250606086013567ffffffffffffffff811115612eda57600080fd5b600080600060608486031215612f5e57600080fd5b612f6784612bb9565b9250612f7560208501612bb9565b9150612f8360408501612bb9565b90509250925092565b600080600060608486031215612fa157600080fd5b612faa84612bb9565b925060208401359150612f8360408501612bb9565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b60208152600061301c602083018486612fbf565b949350505050565b8381526040602082015260006129bb604083018486612fbf565b8481526001600160a01b0384166020820152606060408201526000612b2b606083018486612fbf565b60006020828403121561307957600080fd5b81518015158114611da057600080fd5b60006020828403121561309b57600080fd5b5051919050565b8183823760009101908152919050565b600082516130c4818460208701612c8c565b919091019291505056fea26469706673582212200408bf040a3098a9cce7f65bb8ff06c078a2de57e9b22f0fcfc5376aec2d596d64736f6c634300081a0033", } // GatewayEVMABI is the input ABI used to generate the binding from. diff --git a/v2/pkg/gatewayevm.t.sol/gatewayevminboundtest.go b/v2/pkg/gatewayevm.t.sol/gatewayevminboundtest.go index 1a9ebe47..24986cb9 100644 --- a/v2/pkg/gatewayevm.t.sol/gatewayevminboundtest.go +++ b/v2/pkg/gatewayevm.t.sol/gatewayevminboundtest.go @@ -49,8 +49,8 @@ type StdInvariantFuzzSelector struct { // GatewayEVMInboundTestMetaData contains all meta data concerning the GatewayEVMInboundTest contract. var GatewayEVMInboundTestMetaData = &bind.MetaData{ - ABI: "[{\"type\":\"function\",\"name\":\"IS_TEST\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeArtifacts\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedArtifacts_\",\"type\":\"string[]\",\"internalType\":\"string[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeContracts\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedContracts_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeSelectors\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedSelectors_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzSelector[]\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"selectors\",\"type\":\"bytes4[]\",\"internalType\":\"bytes4[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeSenders\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedSenders_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"failed\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"setUp\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"targetArtifactSelectors\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedArtifactSelectors_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzArtifactSelector[]\",\"components\":[{\"name\":\"artifact\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"selectors\",\"type\":\"bytes4[]\",\"internalType\":\"bytes4[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetArtifacts\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedArtifacts_\",\"type\":\"string[]\",\"internalType\":\"string[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetContracts\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedContracts_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetInterfaces\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedInterfaces_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzInterface[]\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"artifacts\",\"type\":\"string[]\",\"internalType\":\"string[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetSelectors\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedSelectors_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzSelector[]\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"selectors\",\"type\":\"bytes4[]\",\"internalType\":\"bytes4[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetSenders\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedSenders_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"testCallWithPayload\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositERC20ToCustody\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositERC20ToCustodyWithPayload\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositEthToTss\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositEthToTssWithPayload\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testFailDepositERC20ToCustodyIfAmountIs0\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testFailDepositERC20ToCustodyWithPayloadIfAmountIs0\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testFailDepositEthToTssIfAmountIs0\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testFailDepositEthToTssWithPayloadIfAmountIs0\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"event\",\"name\":\"Call\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"receiver\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Deposit\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"receiver\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"asset\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Executed\",\"inputs\":[{\"name\":\"destination\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ExecutedWithERC20\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedERC20\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"token\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"destination\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedNoParams\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedNonPayable\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"strs\",\"type\":\"string[]\",\"indexed\":false,\"internalType\":\"string[]\"},{\"name\":\"nums\",\"type\":\"uint256[]\",\"indexed\":false,\"internalType\":\"uint256[]\"},{\"name\":\"flag\",\"type\":\"bool\",\"indexed\":false,\"internalType\":\"bool\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedPayable\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"str\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"num\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"flag\",\"type\":\"bool\",\"indexed\":false,\"internalType\":\"bool\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedRevert\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Reverted\",\"inputs\":[{\"name\":\"destination\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RevertedWithERC20\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log\",\"inputs\":[{\"name\":\"\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_address\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_array\",\"inputs\":[{\"name\":\"val\",\"type\":\"uint256[]\",\"indexed\":false,\"internalType\":\"uint256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_array\",\"inputs\":[{\"name\":\"val\",\"type\":\"int256[]\",\"indexed\":false,\"internalType\":\"int256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_array\",\"inputs\":[{\"name\":\"val\",\"type\":\"address[]\",\"indexed\":false,\"internalType\":\"address[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_bytes\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_bytes32\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_int\",\"inputs\":[{\"name\":\"\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_address\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_array\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"uint256[]\",\"indexed\":false,\"internalType\":\"uint256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_array\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"int256[]\",\"indexed\":false,\"internalType\":\"int256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_array\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"address[]\",\"indexed\":false,\"internalType\":\"address[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_bytes\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_bytes32\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_decimal_int\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"},{\"name\":\"decimals\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_decimal_uint\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"decimals\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_int\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_string\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_uint\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_string\",\"inputs\":[{\"name\":\"\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_uint\",\"inputs\":[{\"name\":\"\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"logs\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"ApprovalFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"CustodyInitialized\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"DepositFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ExecutionFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientERC20Amount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientETHAmount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZeroAddress\",\"inputs\":[]}]", - Bin: "0x6080604052600c8054600160ff199182168117909255601f80549091169091179055620f4240602855348015603357600080fd5b5061b7c0806100436000396000f3fe608060405234801561001057600080fd5b50600436106101825760003560e01c8063916a17c6116100d8578063ba414fa61161008c578063e20c9f7111610066578063e20c9f711461027b578063f96c02df14610283578063fa7626d41461028b57600080fd5b8063ba414fa614610253578063bb93f11e1461026b578063c13d738f1461027357600080fd5b8063aa030c1c116100bd578063aa030c1c1461023b578063b0464fdc14610243578063b5508aa91461024b57600080fd5b8063916a17c61461021e5780639fd1e5971461023357600080fd5b806330f7c04f1161013a5780636459542a116101145780636459542a146101ec57806366d9a9a0146101f457806385226c811461020957600080fd5b806330f7c04f146101d45780633e5e3c23146101dc5780633f7286f4146101e457600080fd5b80630a9254e41161016b5780630a9254e4146101995780631ed7831c146101a15780632ade3880146101bf57600080fd5b806306978ca3146101875780630724d8e314610191575b600080fd5b61018f610298565b005b61018f6103c5565b61018f61057c565b6101a9610cb3565b6040516101b691906168aa565b60405180910390f35b6101c7610d15565b6040516101b69190616946565b61018f610e57565b6101a96112c4565b6101a9611324565b61018f611384565b6101fc611781565b6040516101b69190616aac565b610211611903565b6040516101b69190616b4a565b6102266119d3565b6040516101b69190616bc1565b61018f611ace565b61018f611cea565b610226611ecf565b610211611fca565b61025b61209a565b60405190151581526020016101b6565b61018f61216e565b61018f612308565b6101a96124b7565b61018f612517565b601f5461025b9060ff1681565b6040517ff28dceb300000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f496e73756666696369656e74455448416d6f756e7400000000000000000000006044820152600090737109709ecfa91a80626ff3989d68f67f5b1dd12d9063f28dceb390606401600060405180830381600087803b15801561032e57600080fd5b505af1158015610342573d6000803e3d6000fd5b50506020546026546040517ff340fa010000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201529116925063f340fa01915083906024016000604051808303818588803b1580156103a957600080fd5b505af11580156103bd573d6000803e3d6000fd5b505050505050565b6027546020546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039182166084820152620186a092919091163190737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b15801561046157600080fd5b505af1158015610475573d6000803e3d6000fd5b505060265460255460408051878152600060208201819052606082840181905282015290516001600160a01b0393841695509290911692507f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a4919081900360800190a36020546026546040517ff340fa010000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015291169063f340fa019084906024016000604051808303818588803b15801561053b57600080fd5b505af115801561054f573d6000803e3d6000fd5b50506027546001600160a01b0316319250610577915061057190508484616c87565b826126b9565b505050565b602580547fffffffffffffffffffffffff00000000000000000000000000000000000000009081163017909155602680548216611234179055602780549091166156781790556040516105ce906167ca565b60408082526004908201527f746573740000000000000000000000000000000000000000000000000000000060608201526080602082018190526003908201527f54544b000000000000000000000000000000000000000000000000000000000060a082015260c001604051809103906000f080158015610653573d6000803e3d6000fd5b50602380547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055604051610698906167ca565b604080825260049082018190527f7a6574610000000000000000000000000000000000000000000000000000000060608301526080602083018190528201527f5a4554410000000000000000000000000000000000000000000000000000000060a082015260c001604051809103906000f08015801561071c573d6000803e3d6000fd5b50602480547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039283169081178255604080518082018252600e81527f4761746577617945564d2e736f6c00000000000000000000000000000000000060208201526027546025549251908616948101949094526044840192909252909216606482015261080d919060840160408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fc0c53b8b00000000000000000000000000000000000000000000000000000000179052612738565b601f80547fffffffffffffffffffffff0000000000000000000000000000000000000000ff166101006001600160a01b0393841681029190911791829055602080549190920483167fffffffffffffffffffffffff00000000000000000000000000000000000000009091168117909155602754602554604051929391821692911690610899906167d7565b6001600160a01b03938416815291831660208301529091166040820152606001604051809103906000f0801580156108d5573d6000803e3d6000fd5b50602180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039283161790556020546024546027546025546040519385169492831693918316921690610930906167e4565b6001600160a01b039485168152928416602084015290831660408301529091166060820152608001604051809103906000f080158015610974573d6000803e3d6000fd5b50602280547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039283161790556027546040517fc88a5e6d00000000000000000000000000000000000000000000000000000000815291166004820152670de0b6b3a76400006024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c88a5e6d90604401600060405180830381600087803b158015610a2057600080fd5b505af1158015610a34573d6000803e3d6000fd5b50506025546040517f06447d560000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506306447d569150602401600060405180830381600087803b158015610aaa57600080fd5b505af1158015610abe573d6000803e3d6000fd5b50506020546021546040517fae7a3a6f0000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201529116925063ae7a3a6f9150602401600060405180830381600087803b158015610b2457600080fd5b505af1158015610b38573d6000803e3d6000fd5b50506020546022546040517f10188aef0000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152911692506310188aef9150602401600060405180830381600087803b158015610b9e57600080fd5b505af1158015610bb2573d6000803e3d6000fd5b505050507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b03166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610c1457600080fd5b505af1158015610c28573d6000803e3d6000fd5b50506023546025546028546040517f40c10f190000000000000000000000000000000000000000000000000000000081526001600160a01b0392831660048201526024810191909152911692506340c10f199150604401600060405180830381600087803b158015610c9957600080fd5b505af1158015610cad573d6000803e3d6000fd5b50505050565b60606016805480602002602001604051908101604052809291908181526020018280548015610d0b57602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610ced575b5050505050905090565b6060601e805480602002602001604051908101604052809291908181526020016000905b82821015610e4e57600084815260208082206040805180820182526002870290920180546001600160a01b03168352600181018054835181870281018701909452808452939591948681019491929084015b82821015610e37578382906000526020600020018054610daa90616c9a565b80601f0160208091040260200160405190810160405280929190818152602001828054610dd690616c9a565b8015610e235780601f10610df857610100808354040283529160200191610e23565b820191906000526020600020905b815481529060010190602001808311610e0657829003601f168201915b505050505081526020019060010190610d8b565b505050508152505081526020019060010190610d39565b50505050905090565b6023546021546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620186a09260009216906370a0823190602401602060405180830381865afa158015610ec3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ee79190616ce7565b9050610ef46000826126b9565b6026546040516001600160a01b03909116602482015260009060440160408051601f19818403018152918152602080830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f84fae76000000000000000000000000000000000000000000000000000000000179052602354905491517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b03928316600482015260248101879052929350169063095ea7b3906044016020604051808303816000875af1158015610fd7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ffb9190616d00565b506020546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b15801561108a57600080fd5b505af115801561109e573d6000803e3d6000fd5b50506026546025546023546040516001600160a01b03938416955091831693507f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a4926110f1928992909116908790616d22565b60405180910390a36020546026546023546040517f8c6f037f0000000000000000000000000000000000000000000000000000000081526001600160a01b0393841693638c6f037f9361115293908216928992909116908790600401616d4a565b600060405180830381600087803b15801561116c57600080fd5b505af1158015611180573d6000803e3d6000fd5b50506023546021546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260009450911691506370a0823190602401602060405180830381865afa1580156111ec573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112109190616ce7565b905061121c84826126b9565b6023546025546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260009291909116906370a0823190602401602060405180830381865afa158015611286573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112aa9190616ce7565b90506112bd856028546105719190616d81565b5050505050565b60606018805480602002602001604051908101604052809291908181526020018280548015610d0b576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311610ced575050505050905090565b60606017805480602002602001604051908101604052809291908181526020018280548015610d0b576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311610ced575050505050905090565b6023546021546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620186a09260009216906370a0823190602401602060405180830381865afa1580156113f0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114149190616ce7565b90506114216000826126b9565b6023546020546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201526024810185905291169063095ea7b3906044016020604051808303816000875af115801561148f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114b39190616d00565b506020546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b15801561154257600080fd5b505af1158015611556573d6000803e3d6000fd5b5050602654602554602354604080518881526001600160a01b039283166020820152606081830181905260009082015290519382169550911692507f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a4919081900360800190a36020546026546023546040517ff45346dc0000000000000000000000000000000000000000000000000000000081526001600160a01b03928316600482015260248101869052908216604482015291169063f45346dc90606401600060405180830381600087803b15801561163057600080fd5b505af1158015611644573d6000803e3d6000fd5b50506023546021546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260009450911691506370a0823190602401602060405180830381865afa1580156116b0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116d49190616ce7565b90506116e083826126b9565b6023546025546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260009291909116906370a0823190602401602060405180830381865afa15801561174a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061176e9190616ce7565b9050610cad846028546105719190616d81565b6060601b805480602002602001604051908101604052809291908181526020016000905b82821015610e4e57838290600052602060002090600202016040518060400160405290816000820180546117d890616c9a565b80601f016020809104026020016040519081016040528092919081815260200182805461180490616c9a565b80156118515780601f1061182657610100808354040283529160200191611851565b820191906000526020600020905b81548152906001019060200180831161183457829003601f168201915b50505050508152602001600182018054806020026020016040519081016040528092919081815260200182805480156118eb57602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190600401906020826003010492830192600103820291508084116118985790505b505050505081525050815260200190600101906117a5565b6060601a805480602002602001604051908101604052809291908181526020016000905b82821015610e4e57838290600052602060002001805461194690616c9a565b80601f016020809104026020016040519081016040528092919081815260200182805461197290616c9a565b80156119bf5780601f10611994576101008083540402835291602001916119bf565b820191906000526020600020905b8154815290600101906020018083116119a257829003601f168201915b505050505081526020019060010190611927565b6060601d805480602002602001604051908101604052809291908181526020016000905b82821015610e4e5760008481526020908190206040805180820182526002860290920180546001600160a01b03168352600181018054835181870281018701909452808452939491938583019392830182828015611ab657602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019060040190602082600301049283019260010382029150808411611a635790505b505050505081525050815260200190600101906119f7565b6027546026546040516001600160a01b039182166024820152620186a09291909116319060009060440160408051601f19818403018152918152602080830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f84fae760000000000000000000000000000000000000000000000000000000001790525490517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b158015611bdf57600080fd5b505af1158015611bf3573d6000803e3d6000fd5b50506026546025546040516001600160a01b039283169450911691507f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a490611c419087906000908790616d22565b60405180910390a36020546026546040517f29c59b5d0000000000000000000000000000000000000000000000000000000081526001600160a01b03928316926329c59b5d928792611c9b92909116908690600401616d94565b6000604051808303818588803b158015611cb457600080fd5b505af1158015611cc8573d6000803e3d6000fd5b50506027546001600160a01b0316319250610cad915061057190508585616c87565b6026546040516001600160a01b03909116602482015260009060440160408051601f19818403018152918152602080830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f84fae760000000000000000000000000000000000000000000000000000000001790525490517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b158015611ded57600080fd5b505af1158015611e01573d6000803e3d6000fd5b50506026546025546040516001600160a01b039283169450911691507f2a21062ee9199c2e205622999eeb7c3da73153674f36a0acd3f74fa6af67bde390611e4a908590616db6565b60405180910390a36020546026546040517f1b8b921d0000000000000000000000000000000000000000000000000000000081526001600160a01b0392831692631b8b921d92611ea1929116908590600401616d94565b600060405180830381600087803b158015611ebb57600080fd5b505af11580156112bd573d6000803e3d6000fd5b6060601c805480602002602001604051908101604052809291908181526020016000905b82821015610e4e5760008481526020908190206040805180820182526002860290920180546001600160a01b03168352600181018054835181870281018701909452808452939491938583019392830182828015611fb257602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019060040190602082600301049283019260010382029150808411611f5f5790505b50505050508152505081526020019060010190611ef3565b60606019805480602002602001604051908101604052809291908181526020016000905b82821015610e4e57838290600052602060002001805461200d90616c9a565b80601f016020809104026020016040519081016040528092919081815260200182805461203990616c9a565b80156120865780601f1061205b57610100808354040283529160200191612086565b820191906000526020600020905b81548152906001019060200180831161206957829003601f168201915b505050505081526020019060010190611fee565b60085460009060ff16156120b2575060085460ff1690565b6040517f667f9d70000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d600482018190527f6661696c65640000000000000000000000000000000000000000000000000000602483015260009163667f9d7090604401602060405180830381865afa158015612143573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121679190616ce7565b1415905090565b6026546040516001600160a01b039091166024820152600090819060440160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f84fae76000000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063f28dceb3906122659060040160208082526017908201527f496e73756666696369656e744552433230416d6f756e74000000000000000000604082015260600190565b600060405180830381600087803b15801561227f57600080fd5b505af1158015612293573d6000803e3d6000fd5b50506020546026546023546040517f8c6f037f0000000000000000000000000000000000000000000000000000000081526001600160a01b039384169550638c6f037f94506122ee9392831692889216908790600401616d4a565b600060405180830381600087803b1580156103a957600080fd5b6026546040516001600160a01b039091166024820152600090819060440160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f84fae76000000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063f28dceb3906123ff9060040160208082526015908201527f496e73756666696369656e74455448416d6f756e740000000000000000000000604082015260600190565b600060405180830381600087803b15801561241957600080fd5b505af115801561242d573d6000803e3d6000fd5b50506020546026546040517f29c59b5d0000000000000000000000000000000000000000000000000000000081526001600160a01b0392831694506329c59b5d935086926124819216908690600401616d94565b6000604051808303818588803b15801561249a57600080fd5b505af11580156124ae573d6000803e3d6000fd5b50505050505050565b60606015805480602002602001604051908101604052809291908181526020018280548015610d0b576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311610ced575050505050905090565b6023546020546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260006024820181905292919091169063095ea7b3906044016020604051808303816000875af115801561258a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125ae9190616d00565b506040517ff28dceb300000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f496e73756666696369656e744552433230416d6f756e740000000000000000006044820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063f28dceb390606401600060405180830381600087803b15801561264257600080fd5b505af1158015612656573d6000803e3d6000fd5b50506020546026546023546040517ff45346dc0000000000000000000000000000000000000000000000000000000081526001600160a01b0392831660048201526024810187905290821660448201529116925063f45346dc9150606401611ea1565b6040517f98296c540000000000000000000000000000000000000000000000000000000081526004810183905260248101829052737109709ecfa91a80626ff3989d68f67f5b1dd12d906398296c549060440160006040518083038186803b15801561272457600080fd5b505afa1580156103bd573d6000803e3d6000fd5b60006127426167f1565b61274d848483612757565b9150505b92915050565b60008061276485846127d2565b90506127c76040518060400160405280601d81526020017f4552433139363750726f78792e736f6c3a4552433139363750726f787900000081525082866040516020016127b2929190616d94565b604051602081830303815290604052856127de565b9150505b9392505050565b60006127cb838361280c565b60c08101515160009015612802576127fb84848460c00151612827565b90506127cb565b6127fb84846129cd565b60006128188383612ab8565b6127cb838360200151846127de565b600080612832612ac8565b905060006128408683612b9b565b905060006128578260600151836020015185613041565b9050600061286783838989613253565b90506000612874826140d0565b602081015181519192509060030b156128e75789826040015160405160200161289e929190616dc9565b60408051601f19818403018152908290527f08c379a00000000000000000000000000000000000000000000000000000000082526128de91600401616db6565b60405180910390fd5b600061292a6040518060400160405280601581526020017f4465706c6f79656420746f20616464726573733a20000000000000000000000081525083600161429f565b6040517fc6ce059d000000000000000000000000000000000000000000000000000000008152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c6ce059d9061297d908490600401616db6565b602060405180830381865afa15801561299a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129be9190616e4a565b9b9a5050505050505050505050565b6040517f8d1cc9250000000000000000000000000000000000000000000000000000000081526000908190737109709ecfa91a80626ff3989d68f67f5b1dd12d90638d1cc92590612a22908790600401616db6565b600060405180830381865afa158015612a3f573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052612a679190810190616f5b565b90506000612a958285604051602001612a81929190616f90565b60405160208183030381529060405261449f565b90506001600160a01b03811661274d57848460405160200161289e929190616fbf565b612ac4828260006144b2565b5050565b604080518082018252600381527f6f75740000000000000000000000000000000000000000000000000000000000602082015290517fd145736c000000000000000000000000000000000000000000000000000000008152606091737109709ecfa91a80626ff3989d68f67f5b1dd12d91829063d145736c90612b4f90849060040161706a565b600060405180830381865afa158015612b6c573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052612b9491908101906170b1565b9250505090565b612bcd6040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b6000737109709ecfa91a80626ff3989d68f67f5b1dd12d9050612c186040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b612c21856145b5565b60208201526000612c318661499a565b90506000836001600160a01b031663d930a0e66040518163ffffffff1660e01b8152600401600060405180830381865afa158015612c73573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052612c9b91908101906170b1565b86838560200151604051602001612cb594939291906170fa565b60408051601f19818403018152908290527f60f9bb1100000000000000000000000000000000000000000000000000000000825291506000906001600160a01b038616906360f9bb1190612d0d908590600401616db6565b600060405180830381865afa158015612d2a573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052612d5291908101906170b1565b6040517fdb4235f60000000000000000000000000000000000000000000000000000000081529091506001600160a01b0386169063db4235f690612d9a9084906004016171fe565b602060405180830381865afa158015612db7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ddb9190616d00565b612df0578160405160200161289e9190617250565b6040517f49c4fac80000000000000000000000000000000000000000000000000000000081526001600160a01b038616906349c4fac890612e359084906004016172e2565b600060405180830381865afa158015612e52573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052612e7a91908101906170b1565b84526040517fdb4235f60000000000000000000000000000000000000000000000000000000081526001600160a01b0386169063db4235f690612ec1908490600401617334565b602060405180830381865afa158015612ede573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f029190616d00565b15612f97576040517f49c4fac80000000000000000000000000000000000000000000000000000000081526001600160a01b038616906349c4fac890612f4c908490600401617334565b600060405180830381865afa158015612f69573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052612f9191908101906170b1565b60408501525b846001600160a01b03166349c4fac8828660000151604051602001612fbc9190617386565b6040516020818303038152906040526040518363ffffffff1660e01b8152600401612fe89291906173f2565b600060405180830381865afa158015613005573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261302d91908101906170b1565b606085015250608083015250949350505050565b60408051600480825260a0820190925260609160009190816020015b606081526020019060019003908161305d5790505090506040518060400160405280600481526020017f6772657000000000000000000000000000000000000000000000000000000000815250816000815181106130bd576130bd617417565b60200260200101819052506040518060400160405280600381526020017f2d726c00000000000000000000000000000000000000000000000000000000008152508160018151811061311157613111617417565b60200260200101819052508460405160200161312d9190617446565b6040516020818303038152906040528160028151811061314f5761314f617417565b60200260200101819052508260405160200161316b91906174b2565b6040516020818303038152906040528160038151811061318d5761318d617417565b602002602001018190525060006131a3826140d0565b602080820151604080518082018252600581527f2e6a736f6e00000000000000000000000000000000000000000000000000000081850190815282518084018452600080825290860152825180840190935290518252928101929092529192506132349060408051808201825260008082526020918201528151808301909252845182528085019082015290614c1d565b613249578560405160200161289e91906174f3565b9695505050505050565b60a0810151604080518082018252600080825260209182015281518083019092528251808352928101910152606090737109709ecfa91a80626ff3989d68f67f5b1dd12d90156132a3565b511590565b6134175782602001511561335f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605860248201527f54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f742060448201527f62652075736564207768656e207468652060736b6970566572696679536f757260648201527f6365436f646560206f7074696f6e206973206074727565600000000000000000608482015260a4016128de565b8260c0015115613417576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605360248201527f54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f742060448201527f62652075736564207768656e207468652060736b69704c6963656e736554797060648201527f6560206f7074696f6e2069732060747275656000000000000000000000000000608482015260a4016128de565b6040805160ff8082526120008201909252600091816020015b606081526020019060019003908161343057905050905060006040518060400160405280600381526020017f6e7078000000000000000000000000000000000000000000000000000000000081525082828061348b90617584565b935060ff16815181106134a0576134a0617417565b60200260200101819052506040518060400160405280600d81526020017f302e302e312d616c7068612e37000000000000000000000000000000000000008152506040516020016134f191906175a3565b60405160208183030381529060405282828061350c90617584565b935060ff168151811061352157613521617417565b60200260200101819052506040518060400160405280600681526020017f6465706c6f79000000000000000000000000000000000000000000000000000081525082828061356e90617584565b935060ff168151811061358357613583617417565b60200260200101819052506040518060400160405280600e81526020017f2d2d636f6e74726163744e616d650000000000000000000000000000000000008152508282806135d090617584565b935060ff16815181106135e5576135e5617417565b6020026020010181905250876020015182828061360190617584565b935060ff168151811061361657613616617417565b60200260200101819052506040518060400160405280600e81526020017f2d2d636f6e74726163745061746800000000000000000000000000000000000081525082828061366390617584565b935060ff168151811061367857613678617417565b60209081029190910101528751828261369081617584565b935060ff16815181106136a5576136a5617417565b60200260200101819052506040518060400160405280600981526020017f2d2d636861696e496400000000000000000000000000000000000000000000008152508282806136f290617584565b935060ff168151811061370757613707617417565b602002602001018190525061371b46614c7e565b828261372681617584565b935060ff168151811061373b5761373b617417565b60200260200101819052506040518060400160405280600f81526020017f2d2d6275696c64496e666f46696c65000000000000000000000000000000000081525082828061378890617584565b935060ff168151811061379d5761379d617417565b6020026020010181905250868282806137b590617584565b935060ff16815181106137ca576137ca617417565b60209081029190910101528551156138f15760408051808201909152601581527f2d2d636f6e7374727563746f7242797465636f646500000000000000000000006020820152828261381b81617584565b935060ff168151811061383057613830617417565b60209081029190910101526040517f71aad10d0000000000000000000000000000000000000000000000000000000081526001600160a01b038416906371aad10d90613880908990600401616db6565b600060405180830381865afa15801561389d573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526138c591908101906170b1565b82826138d081617584565b935060ff16815181106138e5576138e5617417565b60200260200101819052505b8460200151156139c15760408051808201909152601281527f2d2d766572696679536f75726365436f646500000000000000000000000000006020820152828261393a81617584565b935060ff168151811061394f5761394f617417565b60200260200101819052506040518060400160405280600581526020017f66616c736500000000000000000000000000000000000000000000000000000081525082828061399c90617584565b935060ff16815181106139b1576139b1617417565b6020026020010181905250613b88565b6139f961329e8660a0015160408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b613a8c5760408051808201909152600d81527f2d2d6c6963656e7365547970650000000000000000000000000000000000000060208201528282613a3c81617584565b935060ff1681518110613a5157613a51617417565b60200260200101819052508460a00151604051602001613a719190617446565b60405160208183030381529060405282828061399c90617584565b8460c00151158015613acf575060408089015181518083018352600080825260209182015282518084019093528151835290810190820152613acd90511590565b155b15613b885760408051808201909152600d81527f2d2d6c6963656e7365547970650000000000000000000000000000000000000060208201528282613b1381617584565b935060ff1681518110613b2857613b28617417565b6020026020010181905250613b3c88614d1e565b604051602001613b4c9190617446565b604051602081830303815290604052828280613b6790617584565b935060ff1681518110613b7c57613b7c617417565b60200260200101819052505b60408086015181518083018352600080825260209182015282518084019093528151835290810190820152613bbc90511590565b613c515760408051808201909152600b81527f2d2d72656c61796572496400000000000000000000000000000000000000000060208201528282613bff81617584565b935060ff1681518110613c1457613c14617417565b60200260200101819052508460400151828280613c3090617584565b935060ff1681518110613c4557613c45617417565b60200260200101819052505b606085015115613d725760408051808201909152600681527f2d2d73616c74000000000000000000000000000000000000000000000000000060208201528282613c9a81617584565b935060ff1681518110613caf57613caf617417565b602090810291909101015260608501516040517fb11a19e800000000000000000000000000000000000000000000000000000000815260048101919091526001600160a01b0384169063b11a19e890602401600060405180830381865afa158015613d1e573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052613d4691908101906170b1565b8282613d5181617584565b935060ff1681518110613d6657613d66617417565b60200260200101819052505b60e08501515115613e195760408051808201909152600a81527f2d2d6761734c696d69740000000000000000000000000000000000000000000060208201528282613dbc81617584565b935060ff1681518110613dd157613dd1617417565b6020026020010181905250613ded8560e0015160000151614c7e565b8282613df881617584565b935060ff1681518110613e0d57613e0d617417565b60200260200101819052505b60e08501516020015115613ec35760408051808201909152600a81527f2d2d67617350726963650000000000000000000000000000000000000000000060208201528282613e6681617584565b935060ff1681518110613e7b57613e7b617417565b6020026020010181905250613e978560e0015160200151614c7e565b8282613ea281617584565b935060ff1681518110613eb757613eb7617417565b60200260200101819052505b60e08501516040015115613f6d5760408051808201909152600e81527f2d2d6d617846656550657247617300000000000000000000000000000000000060208201528282613f1081617584565b935060ff1681518110613f2557613f25617417565b6020026020010181905250613f418560e0015160400151614c7e565b8282613f4c81617584565b935060ff1681518110613f6157613f61617417565b60200260200101819052505b60e085015160600151156140175760408051808201909152601681527f2d2d6d61785072696f726974794665655065724761730000000000000000000060208201528282613fba81617584565b935060ff1681518110613fcf57613fcf617417565b6020026020010181905250613feb8560e0015160600151614c7e565b8282613ff681617584565b935060ff168151811061400b5761400b617417565b60200260200101819052505b60008160ff1667ffffffffffffffff81111561403557614035616e73565b60405190808252806020026020018201604052801561406857816020015b60608152602001906001900390816140535790505b50905060005b8260ff168160ff1610156140c157838160ff168151811061409157614091617417565b6020026020010151828260ff16815181106140ae576140ae617417565b602090810291909101015260010161406e565b5093505050505b949350505050565b6140f76040518060600160405280600060030b815260200160608152602001606081525090565b60408051808201825260048082527f6261736800000000000000000000000000000000000000000000000000000000602083015291517fd145736c000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d92600091849163d145736c9161417d9186910161760e565b600060405180830381865afa15801561419a573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526141c291908101906170b1565b905060006141d0868361580d565b90506000846001600160a01b031663f45c1ce7836040518263ffffffff1660e01b81526004016142009190616b4a565b6000604051808303816000875af115801561421f573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526142479190810190617655565b805190915060030b158015906142605750602081015151155b801561426f5750604081015151155b15613249578160008151811061428757614287617417565b602002602001015160405160200161289e919061770b565b606060006142d48560408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b60408051808201825260008082526020918201528151808301909252865182528087019082015290915061430b9082905b90615962565b15614468576000614388826143828461437c61434e8a60408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6040805180820182526000808252602091820152815180830190925282518252918201519181019190915290565b90615989565b906159eb565b604080518082018252600181527f0a00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201529091506143ec908290615962565b1561445657604080518082018252600181527f0a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152614453905b8290615a70565b90505b61445f81615a96565b925050506127cb565b821561448157848460405160200161289e9291906178f7565b50506040805160208101909152600081526127cb565b509392505050565b6000808251602084016000f09392505050565b8160a00151156144c157505050565b60006144ce848484615aff565b905060006144db826140d0565b602081015181519192509060030b1580156145775750604080518082018252600781527f53554343455353000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261457790604080518082018252600080825260209182015281518083019092528451825280850190820152614305565b1561458457505050505050565b604082015151156145a457816040015160405160200161289e919061799e565b8060405160200161289e91906179fc565b606060006145ea8360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600481527f2e736f6c000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015290915061464f905b8290614c1d565b156146be57604080518082018252600481527f2e736f6c00000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526127cb906146b990839061609a565b615a96565b604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152614720905b8290616124565b6001036147ed57604080518082018252600181527f3a00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526147869061444c565b50604080518082018252600181527f3a00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526127cb906146b9905b8390615a70565b604080518082018252600581527f2e6a736f6e0000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261484c90614648565b1561498357604080518082018252600181527f2f000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201819052845180860190955292518452830152906148b49083906161be565b9050600081600183516148c79190616d81565b815181106148d7576148d7617417565b6020026020010151905061497a6146b961494d6040518060400160405280600581526020017f2e6a736f6e00000000000000000000000000000000000000000000000000000081525060408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6040805180820182526000808252602091820152815180830190925285518252808601908201529061609a565b95945050505050565b8260405160200161289e9190617a67565b50919050565b606060006149cf8360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600481527f2e736f6c0000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152909150614a3190614648565b15614a3f576127cb81615a96565b604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152614a9e90614719565b600103614b0857604080518082018252600181527f3a00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526127cb906146b9906147e6565b604080518082018252600581527f2e6a736f6e00000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152614b6790614648565b1561498357604080518082018252600181527f2f00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820181905284518086019095529251845283015290614bcf9083906161be565b9050600181511115614c0b578060028251614bea9190616d81565b81518110614bfa57614bfa617417565b602002602001015192505050919050565b508260405160200161289e9190617a67565b805182516000911115614c3257506000612751565b81518351602085015160009291614c4891616c87565b614c529190616d81565b905082602001518103614c69576001915050612751565b82516020840151819020912014905092915050565b60606000614c8b83616263565b600101905060008167ffffffffffffffff811115614cab57614cab616e73565b6040519080825280601f01601f191660200182016040528015614cd5576020820181803683370190505b5090508181016020015b600019017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a8504945084614cdf57509392505050565b604081810151815180830183526000808252602091820181905283518085018552835181529282018383015283518085018552600a81527f554e4c4943454e5345440000000000000000000000000000000000000000000081840190815285518087018752838152840192909252845180860190955251845290830152606091614daa905b8290616345565b15614dea57505060408051808201909152600481527f4e6f6e65000000000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600981527f556e6c6963656e7365000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152614e4990614da3565b15614e8957505060408051808201909152600981527f556e6c6963656e736500000000000000000000000000000000000000000000006020820152919050565b604080518082018252600381527f4d4954000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152614ee890614da3565b15614f2857505060408051808201909152600381527f4d495400000000000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f47504c2d322e302d6f6e6c79000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152614f8790614da3565b80614fec5750604080518082018252601081527f47504c2d322e302d6f722d6c617465720000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152614fec90614da3565b1561502c57505060408051808201909152600981527f474e552047504c763200000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f47504c2d332e302d6f6e6c7900000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261508b90614da3565b806150f05750604080518082018252601081527f47504c2d332e302d6f722d6c6174657200000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526150f090614da3565b1561513057505060408051808201909152600981527f474e552047504c763300000000000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4c47504c2d322e312d6f6e6c79000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261518f90614da3565b806151f45750604080518082018252601181527f4c47504c2d322e312d6f722d6c61746572000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526151f490614da3565b1561523457505060408051808201909152600c81527f474e55204c47504c76322e3100000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4c47504c2d332e302d6f6e6c79000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261529390614da3565b806152f85750604080518082018252601181527f4c47504c2d332e302d6f722d6c61746572000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526152f890614da3565b1561533857505060408051808201909152600a81527f474e55204c47504c7633000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f4253442d322d436c6175736500000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261539790614da3565b156153d757505060408051808201909152600c81527f4253442d322d436c6175736500000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f4253442d332d436c6175736500000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261543690614da3565b1561547657505060408051808201909152600c81527f4253442d332d436c6175736500000000000000000000000000000000000000006020820152919050565b604080518082018252600781527f4d504c2d322e3000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526154d590614da3565b1561551557505060408051808201909152600781527f4d504c2d322e30000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600781527f4f534c2d332e30000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261557490614da3565b156155b457505060408051808201909152600781527f4f534c2d332e30000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600a81527f4170616368652d322e30000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261561390614da3565b1561565357505060408051808201909152600a81527f4170616368652d322e30000000000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4147504c2d332e302d6f6e6c7900000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526156b290614da3565b806157175750604080518082018252601181527f4147504c2d332e302d6f722d6c617465720000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261571790614da3565b1561575757505060408051808201909152600a81527f474e55204147504c7633000000000000000000000000000000000000000000006020820152919050565b604080518082018252600881527f4255534c2d312e31000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526157b690614da3565b156157f657505060408051808201909152600781527f42534c20312e31000000000000000000000000000000000000000000000000006020820152919050565b6040808401518451915161289e9290602001617b45565b60608060005b8451811015615898578185828151811061582f5761582f617417565b6020026020010151604051602001615848929190616f90565b6040516020818303038152906040529150600185516158679190616d81565b8114615890578160405160200161587e9190617cae565b60405160208183030381529060405291505b600101615813565b5060408051600380825260808201909252600091816020015b60608152602001906001900390816158b157905050905083816000815181106158dc576158dc617417565b60200260200101819052506040518060400160405280600281526020017f2d630000000000000000000000000000000000000000000000000000000000008152508160018151811061593057615930617417565b6020026020010181905250818160028151811061594f5761594f617417565b6020908102919091010152949350505050565b60208083015183518351928401516000936159809291849190616359565b14159392505050565b604080518082019091526000808252602082015260006159bb846000015185602001518560000151866020015161646a565b90508360200151816159cd9190616d81565b845185906159dc908390616d81565b90525060208401525090919050565b6040805180820190915260008082526020820152815183511015615a10575081612751565b6020808301519084015160019114615a375750815160208481015190840151829020919020145b8015615a6857825184518590615a4e908390616d81565b9052508251602085018051615a64908390616c87565b9052505b509192915050565b6040805180820190915260008082526020820152615a8f83838361658a565b5092915050565b60606000826000015167ffffffffffffffff811115615ab757615ab7616e73565b6040519080825280601f01601f191660200182016040528015615ae1576020820181803683370190505b5090506000602082019050615a8f8185602001518660000151616635565b60606000615b0b612ac8565b6040805160ff808252612000820190925291925060009190816020015b6060815260200190600190039081615b2857905050905060006040518060400160405280600381526020017f6e70780000000000000000000000000000000000000000000000000000000000815250828280615b8390617584565b935060ff1681518110615b9857615b98617417565b60200260200101819052506040518060400160405280600781526020017f5e312e33322e3300000000000000000000000000000000000000000000000000815250604051602001615be99190617cef565b604051602081830303815290604052828280615c0490617584565b935060ff1681518110615c1957615c19617417565b60200260200101819052506040518060400160405280600881526020017f76616c6964617465000000000000000000000000000000000000000000000000815250828280615c6690617584565b935060ff1681518110615c7b57615c7b617417565b602002602001018190525082604051602001615c9791906174b2565b604051602081830303815290604052828280615cb290617584565b935060ff1681518110615cc757615cc7617417565b60200260200101819052506040518060400160405280600a81526020017f2d2d636f6e747261637400000000000000000000000000000000000000000000815250828280615d1490617584565b935060ff1681518110615d2957615d29617417565b6020026020010181905250615d3e87846166af565b8282615d4981617584565b935060ff1681518110615d5e57615d5e617417565b602090810291909101015285515115615e0a5760408051808201909152600b81527f2d2d7265666572656e636500000000000000000000000000000000000000000060208201528282615db081617584565b935060ff1681518110615dc557615dc5617417565b6020026020010181905250615dde8660000151846166af565b8282615de981617584565b935060ff1681518110615dfe57615dfe617417565b60200260200101819052505b856080015115615e785760408051808201909152601881527f2d2d756e73616665536b697053746f72616765436865636b000000000000000060208201528282615e5381617584565b935060ff1681518110615e6857615e68617417565b6020026020010181905250615ede565b8415615ede5760408051808201909152601281527f2d2d726571756972655265666572656e6365000000000000000000000000000060208201528282615ebd81617584565b935060ff1681518110615ed257615ed2617417565b60200260200101819052505b60408601515115615f7a5760408051808201909152600d81527f2d2d756e73616665416c6c6f770000000000000000000000000000000000000060208201528282615f2881617584565b935060ff1681518110615f3d57615f3d617417565b60200260200101819052508560400151828280615f5990617584565b935060ff1681518110615f6e57615f6e617417565b60200260200101819052505b856060015115615fe45760408051808201909152601481527f2d2d756e73616665416c6c6f7752656e616d657300000000000000000000000060208201528282615fc381617584565b935060ff1681518110615fd857615fd8617417565b60200260200101819052505b60008160ff1667ffffffffffffffff81111561600257616002616e73565b60405190808252806020026020018201604052801561603557816020015b60608152602001906001900390816160205790505b50905060005b8260ff168160ff16101561608e57838160ff168151811061605e5761605e617417565b6020026020010151828260ff168151811061607b5761607b617417565b602090810291909101015260010161603b565b50979650505050505050565b60408051808201909152600080825260208201528151835110156160bf575081612751565b815183516020850151600092916160d591616c87565b6160df9190616d81565b60208401519091506001908214616100575082516020840151819020908220145b801561611b57835185518690616117908390616d81565b9052505b50929392505050565b6000808260000151616148856000015186602001518660000151876020015161646a565b6161529190616c87565b90505b835160208501516161669190616c87565b8111615a8f578161617681617d34565b92505082600001516161ad8560200151836161919190616d81565b865161619d9190616d81565b838660000151876020015161646a565b6161b79190616c87565b9050616155565b606060006161cc8484616124565b6161d7906001616c87565b67ffffffffffffffff8111156161ef576161ef616e73565b60405190808252806020026020018201604052801561622257816020015b606081526020019060019003908161620d5790505b50905060005b81518110156144975761623e6146b98686615a70565b82828151811061625057616250617417565b6020908102919091010152600101616228565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f01000000000000000083106162ac577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef810000000083106162d8576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc1000083106162f657662386f26fc10000830492506010015b6305f5e100831061630e576305f5e100830492506008015b612710831061632257612710830492506004015b60648310616334576064830492506002015b600a83106127515760010192915050565b600061635183836166ef565b159392505050565b600080858411616460576020841161640c57600084156163a4576001616380866020616d81565b61638b906008617d4e565b616396906002617e4c565b6163a09190616d81565b1990505b83518116856163b38989616c87565b6163bd9190616d81565b805190935082165b8181146163f7578784116163df57879450505050506140c8565b836163e981617e58565b9450508284511690506163c5565b6164018785616c87565b9450505050506140c8565b8383206164198588616d81565b6164239087616c87565b91505b85821061645e5784822080820361644b576164418684616c87565b93505050506140c8565b616456600184616d81565b925050616426565b505b5092949350505050565b60008381868511616575576020851161652457600085156164b6576001616492876020616d81565b61649d906008617d4e565b6164a8906002617e4c565b6164b29190616d81565b1990505b845181166000876164c78b8b616c87565b6164d19190616d81565b855190915083165b828114616516578186106164fe576164f18b8b616c87565b96505050505050506140c8565b8561650881617d34565b9650508386511690506164d9565b8596505050505050506140c8565b508383206000905b6165368689616d81565b82116165735785832080820361655257839450505050506140c8565b61655d600185616c87565b935050818061656b90617d34565b92505061652c565b505b61657f8787616c87565b979650505050505050565b604080518082019091526000808252602082015260006165bc856000015186602001518660000151876020015161646a565b6020808701805191860191909152519091506165d89082616d81565b8352845160208601516165eb9190616c87565b81036165fa576000855261662c565b835183516166089190616c87565b85518690616617908390616d81565b90525083516166269082616c87565b60208601525b50909392505050565b6020811061666d578151835261664c602084616c87565b9250616659602083616c87565b9150616666602082616d81565b9050616635565b600019811561669c576001616683836020616d81565b61668f90610100617e4c565b6166999190616d81565b90505b9151835183169219169190911790915250565b606060006166bd8484612b9b565b80516020808301516040519394506166d793909101617e6f565b60405160208183030381529060405291505092915050565b8151815160009190811115616702575081515b6020808501519084015160005b838110156167bb578251825180821461678b57600019602087101561676a5760018461673c896020616d81565b6167469190616c87565b616751906008617d4e565b61675c906002617e4c565b6167669190616d81565b1990505b81811683821681810391146167885797506127519650505050505050565b50505b616796602086616c87565b94506167a3602085616c87565b935050506020816167b49190616c87565b905061670f565b50845186516132499190617ec7565b610c9f80617ee883390190565b61140b80618b8783390190565b6117f980619f9283390190565b6040518060e00160405280606081526020016060815260200160608152602001600015158152602001600015158152602001600015158152602001616834616839565b905290565b604051806101000160405280600015158152602001600015158152602001606081526020016000801916815260200160608152602001606081526020016000151581526020016168346040518060800160405280600081526020016000815260200160008152602001600081525090565b602080825282518282018190526000918401906040840190835b818110156168eb5783516001600160a01b03168352602093840193909201916001016168c4565b509095945050505050565b60005b838110156169115781810151838201526020016168f9565b50506000910152565b600081518084526169328160208601602086016168f6565b601f01601f19169290920160200192915050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015616a42577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452815180516001600160a01b03168652602090810151604082880181905281519088018190529101906060600582901b88018101919088019060005b81811015616a28577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa08a8503018352616a1284865161691a565b60209586019590945092909201916001016169d8565b50919750505060209485019492909201915060010161696e565b50929695505050505050565b600081518084526020840193506020830160005b82811015616aa25781517fffffffff0000000000000000000000000000000000000000000000000000000016865260209586019590910190600101616a62565b5093949350505050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015616a42577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08786030184528151805160408752616b18604088018261691a565b9050602082015191508681036020880152616b338183616a4e565b965050506020938401939190910190600101616ad4565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015616a42577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452616bac85835161691a565b94506020938401939190910190600101616b72565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015616a42577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc087860301845281516001600160a01b0381511686526020810151905060406020870152616c426040870182616a4e565b9550506020938401939190910190600101616be9565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8082018082111561275157612751616c58565b600181811c90821680616cae57607f821691505b602082108103614994577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060208284031215616cf957600080fd5b5051919050565b600060208284031215616d1257600080fd5b815180151581146127cb57600080fd5b8381526001600160a01b038316602082015260606040820152600061497a606083018461691a565b6001600160a01b03851681528360208201526001600160a01b0383166040820152608060608201526000613249608083018461691a565b8181038181111561275157612751616c58565b6001600160a01b03831681526040602082015260006140c8604083018461691a565b6020815260006127cb602083018461691a565b7f4661696c656420746f206465706c6f7920636f6e747261637420000000000000815260008351616e0181601a8501602088016168f6565b7f3a20000000000000000000000000000000000000000000000000000000000000601a918401918201528351616e3e81601c8401602088016168f6565b01601c01949350505050565b600060208284031215616e5c57600080fd5b81516001600160a01b03811681146127cb57600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040516060810167ffffffffffffffff81118282101715616ec557616ec5616e73565b60405290565b60008067ffffffffffffffff841115616ee657616ee6616e73565b50604051601f19601f85018116603f0116810181811067ffffffffffffffff82111715616f1557616f15616e73565b604052838152905080828401851015616f2d57600080fd5b6144978460208301856168f6565b600082601f830112616f4c57600080fd5b6127cb83835160208501616ecb565b600060208284031215616f6d57600080fd5b815167ffffffffffffffff811115616f8457600080fd5b61274d84828501616f3b565b60008351616fa28184602088016168f6565b835190830190616fb68183602088016168f6565b01949350505050565b7f4661696c656420746f206465706c6f7920636f6e747261637420000000000000815260008351616ff781601a8501602088016168f6565b7f207573696e6720636f6e7374727563746f722064617461202200000000000000601a9184019182015283516170348160338401602088016168f6565b7f220000000000000000000000000000000000000000000000000000000000000060339290910191820152603401949350505050565b60408152600b60408201527f464f554e4452595f4f555400000000000000000000000000000000000000000060608201526080602082015260006127cb608083018461691a565b6000602082840312156170c357600080fd5b815167ffffffffffffffff8111156170da57600080fd5b8201601f810184136170eb57600080fd5b61274d84825160208401616ecb565b6000855161710c818460208a016168f6565b7f2f000000000000000000000000000000000000000000000000000000000000009083019081528551617146816001840160208a016168f6565b7f2f000000000000000000000000000000000000000000000000000000000000006001929091019182015284516171848160028401602089016168f6565b6001818301019150507f2f00000000000000000000000000000000000000000000000000000000000000600182015283516171c68160028401602088016168f6565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600292909101918201526007019695505050505050565b604081526000617211604083018461691a565b8281036020840152600481527f2e6173740000000000000000000000000000000000000000000000000000000060208201526040810191505092915050565b7f436f756c64206e6f742066696e642041535420696e206172746966616374200081526000825161728881601f8501602087016168f6565b7f2e205365742060617374203d20747275656020696e20666f756e6472792e746f601f9390910192830152507f6d6c000000000000000000000000000000000000000000000000000000000000603f820152604101919050565b6040815260006172f5604083018461691a565b8281036020840152601181527f2e6173742e6162736f6c7574655061746800000000000000000000000000000060208201526040810191505092915050565b604081526000617347604083018461691a565b8281036020840152600c81527f2e6173742e6c6963656e7365000000000000000000000000000000000000000060208201526040810191505092915050565b7f2e6d657461646174612e736f75726365732e5b270000000000000000000000008152600082516173be8160148501602087016168f6565b7f275d2e6b656363616b32353600000000000000000000000000000000000000006014939091019283015250602001919050565b604081526000617405604083018561691a565b82810360208401526127c7818561691a565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f220000000000000000000000000000000000000000000000000000000000000081526000825161747e8160018501602087016168f6565b7f22000000000000000000000000000000000000000000000000000000000000006001939091019283015250600201919050565b600082516174c48184602087016168f6565b7f2f6275696c642d696e666f000000000000000000000000000000000000000000920191825250600b01919050565b7f436f756c64206e6f742066696e64206275696c642d696e666f2066696c65207781527f697468206d61746368696e6720736f7572636520636f6465206861736820666f60208201527f7220636f6e74726163742000000000000000000000000000000000000000000060408201526000825161757781604b8501602087016168f6565b91909101604b0192915050565b600060ff821660ff810361759a5761759a616c58565b60010192915050565b7f406f70656e7a657070656c696e2f646566656e6465722d6465706c6f792d636c81527f69656e742d636c694000000000000000000000000000000000000000000000006020820152600082516176018160298501602087016168f6565b9190910160290192915050565b60408152601660408201527f4f50454e5a455050454c494e5f424153485f504154480000000000000000000060608201526080602082015260006127cb608083018461691a565b60006020828403121561766757600080fd5b815167ffffffffffffffff81111561767e57600080fd5b82016060818503121561769057600080fd5b617698616ea2565b81518060030b81146176a957600080fd5b8152602082015167ffffffffffffffff8111156176c557600080fd5b6176d186828501616f3b565b602083015250604082015167ffffffffffffffff8111156176f157600080fd5b6176fd86828501616f3b565b604083015250949350505050565b7f4661696c656420746f2072756e206261736820636f6d6d616e6420776974682081527f22000000000000000000000000000000000000000000000000000000000000006020820152600082516177698160218501602087016168f6565b7f222e20496620796f7520617265207573696e672057696e646f77732c2073657460219390910192830152507f20746865204f50454e5a455050454c494e5f424153485f5041544820656e766960418201527f726f6e6d656e74207661726961626c6520746f207468652066756c6c7920717560618201527f616c69666965642070617468206f66207468652062617368206578656375746160818201527f626c652e20466f72206578616d706c652c20696620796f75206172652075736960a18201527f6e672047697420666f722057696e646f77732c206164642074686520666f6c6c60c18201527f6f77696e67206c696e6520696e20746865202e656e762066696c65206f66207960e18201527f6f75722070726f6a65637420287573696e6720666f727761726420736c6173686101018201527f6573293a0a4f50454e5a455050454c494e5f424153485f504154483d22433a2f6101218201527f50726f6772616d2046696c65732f4769742f62696e2f6261736822000000000061014182015261015c01919050565b7f4661696c656420746f2066696e64206c696e652077697468207072656669782081527f27000000000000000000000000000000000000000000000000000000000000006020820152600083516179558160218501602088016168f6565b7f2720696e206f75747075743a2000000000000000000000000000000000000000602191840191820152835161799281602e8401602088016168f6565b01602e01949350505050565b7f4661696c656420746f2072756e2075706772616465207361666574792076616c81527f69646174696f6e3a2000000000000000000000000000000000000000000000006020820152600082516176018160298501602087016168f6565b7f55706772616465207361666574792076616c69646174696f6e206661696c656481527f3a0a000000000000000000000000000000000000000000000000000000000000602082015260008251617a5a8160228501602087016168f6565b9190910160220192915050565b7f436f6e7472616374206e616d6520000000000000000000000000000000000000815260008251617a9f81600e8501602087016168f6565b7f206d75737420626520696e2074686520666f726d6174204d79436f6e74726163600e9390910192830152507f742e736f6c3a4d79436f6e7472616374206f72204d79436f6e74726163742e73602e8201527f6f6c206f72206f75742f4d79436f6e74726163742e736f6c2f4d79436f6e7472604e8201527f6163742e6a736f6e000000000000000000000000000000000000000000000000606e820152607601919050565b7f53504458206c6963656e7365206964656e746966696572200000000000000000815260008351617b7d8160188501602088016168f6565b7f20696e20000000000000000000000000000000000000000000000000000000006018918401918201528351617bba81601c8401602088016168f6565b7f20646f6573206e6f74206c6f6f6b206c696b65206120737570706f7274656420601c92909101918201527f6c6963656e736520666f7220626c6f636b206578706c6f726572207665726966603c8201527f69636174696f6e2e205573652074686520606c6963656e73655479706560206f605c8201527f7074696f6e20746f20737065636966792061206c6963656e736520747970652c607c8201527f206f7220736574207468652060736b69704c6963656e73655479706560206f70609c8201527f74696f6e20746f2060747275656020746f20736b69702e00000000000000000060bc82015260d301949350505050565b60008251617cc08184602087016168f6565b7f2000000000000000000000000000000000000000000000000000000000000000920191825250600101919050565b7f406f70656e7a657070656c696e2f75706772616465732d636f72654000000000815260008251617d2781601c8501602087016168f6565b91909101601c0192915050565b60006000198203617d4757617d47616c58565b5060010190565b808202811582820484141761275157612751616c58565b6001815b6001841115617da057808504811115617d8457617d84616c58565b6001841615617d9257908102905b60019390931c928002617d69565b935093915050565b600082617db757506001612751565b81617dc457506000612751565b8160018114617dda5760028114617de457617e00565b6001915050612751565b60ff841115617df557617df5616c58565b50506001821b612751565b5060208310610133831016604e8410600b8410161715617e23575081810a612751565b617e306000198484617d65565b8060001904821115617e4457617e44616c58565b029392505050565b60006127cb8383617da8565b600081617e6757617e67616c58565b506000190190565b60008351617e818184602088016168f6565b7f3a000000000000000000000000000000000000000000000000000000000000009083019081528351617ebb8160018401602088016168f6565b01600101949350505050565b8181036000831280158383131683831282161715615a8f57615a8f616c5856fe608060405234801561001057600080fd5b50604051610c9f380380610c9f83398101604081905261002f9161010d565b8181600361003d83826101ff565b50600461004a82826101ff565b50505050506102bd565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261007b57600080fd5b81516001600160401b0381111561009457610094610054565b604051601f8201601f19908116603f011681016001600160401b03811182821017156100c2576100c2610054565b6040528181528382016020018510156100da57600080fd5b60005b828110156100f9576020818601810151838301820152016100dd565b506000918101602001919091529392505050565b6000806040838503121561012057600080fd5b82516001600160401b0381111561013657600080fd5b6101428582860161006a565b602085015190935090506001600160401b0381111561016057600080fd5b61016c8582860161006a565b9150509250929050565b600181811c9082168061018a57607f821691505b6020821081036101aa57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156101fa57806000526020600020601f840160051c810160208510156101d75750805b601f840160051c820191505b818110156101f757600081556001016101e3565b50505b505050565b81516001600160401b0381111561021857610218610054565b61022c816102268454610176565b846101b0565b6020601f82116001811461026057600083156102485750848201515b600019600385901b1c1916600184901b1784556101f7565b600084815260208120601f198516915b828110156102905787850151825560209485019460019092019101610270565b50848210156102ae5786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b6109d3806102cc6000396000f3fe608060405234801561001057600080fd5b50600436106100be5760003560e01c806340c10f191161007657806395d89b411161005b57806395d89b4114610183578063a9059cbb1461018b578063dd62ed3e1461019e57600080fd5b806340c10f191461013857806370a082311461014d57600080fd5b806318160ddd116100a757806318160ddd1461010457806323b872dd14610116578063313ce5671461012957600080fd5b806306fdde03146100c3578063095ea7b3146100e1575b600080fd5b6100cb6101e4565b6040516100d891906107bf565b60405180910390f35b6100f46100ef366004610854565b610276565b60405190151581526020016100d8565b6002545b6040519081526020016100d8565b6100f461012436600461087e565b610290565b604051601281526020016100d8565b61014b610146366004610854565b6102b4565b005b61010861015b3660046108bb565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6100cb6102c2565b6100f4610199366004610854565b6102d1565b6101086101ac3660046108dd565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6060600380546101f390610910565b80601f016020809104026020016040519081016040528092919081815260200182805461021f90610910565b801561026c5780601f106102415761010080835404028352916020019161026c565b820191906000526020600020905b81548152906001019060200180831161024f57829003601f168201915b5050505050905090565b6000336102848185856102df565b60019150505b92915050565b60003361029e8582856102f1565b6102a98585856103c5565b506001949350505050565b6102be8282610470565b5050565b6060600480546101f390610910565b6000336102848185856103c5565b6102ec83838360016104cc565b505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146103bf57818110156103b0576040517ffb8f41b200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416600482015260248101829052604481018390526064015b60405180910390fd5b6103bf848484840360006104cc565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8316610415576040517f96c6fd1e000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff8216610465576040517fec442f05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b6102ec838383610614565b73ffffffffffffffffffffffffffffffffffffffff82166104c0576040517fec442f05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b6102be60008383610614565b73ffffffffffffffffffffffffffffffffffffffff841661051c576040517fe602df05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff831661056c576040517f94280d62000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260016020908152604080832093871683529290522082905580156103bf578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161060691815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff831661064c5780600260008282546106419190610963565b909155506106fe9050565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260208190526040902054818110156106d2576040517fe450d38c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8516600482015260248101829052604481018390526064016103a7565b73ffffffffffffffffffffffffffffffffffffffff841660009081526020819052604090209082900390555b73ffffffffffffffffffffffffffffffffffffffff821661072757600280548290039055610753565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090208054820190555b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516107b291815260200190565b60405180910390a3505050565b602081526000825180602084015260005b818110156107ed57602081860181015160408684010152016107d0565b5060006040828501015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011684010191505092915050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461084f57600080fd5b919050565b6000806040838503121561086757600080fd5b6108708361082b565b946020939093013593505050565b60008060006060848603121561089357600080fd5b61089c8461082b565b92506108aa6020850161082b565b929592945050506040919091013590565b6000602082840312156108cd57600080fd5b6108d68261082b565b9392505050565b600080604083850312156108f057600080fd5b6108f98361082b565b91506109076020840161082b565b90509250929050565b600181811c9082168061092457607f821691505b60208210810361095d577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b8082018082111561028a577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea26469706673582212207e804ca539d49155d2b6bc19268ce22f9f857027c75247d69fb0d56a089c93d464736f6c634300081a003360a060405234801561001057600080fd5b5060405161140b38038061140b83398101604081905261002f916101b3565b60016000556002805460ff191690556001600160a01b038316158061005b57506001600160a01b038216155b8061006d57506001600160a01b038116155b1561008b5760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b0383166080526100a3600082610102565b506100ce7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a82610102565b506100f97f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e483610102565b505050506101f6565b60008281526001602090815260408083206001600160a01b038516845290915281205460ff1661018d5760008381526001602081815260408084206001600160a01b0387168086529252808420805460ff19169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a4506001610191565b5060005b92915050565b80516001600160a01b03811681146101ae57600080fd5b919050565b6000806000606084860312156101c857600080fd5b6101d184610197565b92506101df60208501610197565b91506101ed60408501610197565b90509250925092565b6080516111de61022d60003960008181610132015281816103c5015281816104270152818161065801526106ba01526111de6000f3fe608060405234801561001057600080fd5b50600436106101005760003560e01c80638456cb5911610097578063c8a0236211610066578063c8a0236214610276578063d547741f14610289578063d9caed121461029c578063e63ab1e9146102af57600080fd5b80638456cb59146101f957806385f438c11461020157806391d1485414610228578063a217fddf1461026e57600080fd5b80632f2ff15d116100d35780632f2ff15d146101c057806336568abe146101d35780633f4ba83a146101e65780635c975abb146101ee57600080fd5b806301ffc9a714610105578063116191b61461012d57806321fc65f214610179578063248a9ca31461018e575b600080fd5b610118610113366004610f04565b6102d6565b60405190151581526020015b60405180910390f35b6101547f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610124565b61018c610187366004610f6f565b61036f565b005b6101b261019c36600461100c565b6000908152600160208190526040909120015490565b604051908152602001610124565b61018c6101ce366004611025565b610511565b61018c6101e1366004611025565b61053d565b61018c61059b565b60025460ff16610118565b61018c6105d0565b6101b27f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b610118610236366004611025565b600091825260016020908152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b6101b2600081565b61018c610284366004610f6f565b610602565b61018c610297366004611025565b61078a565b61018c6102aa366004611051565b6107b0565b6101b27f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061036957507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b61037761087d565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e46103a1816108c0565b6103a96108ca565b6103ea73ffffffffffffffffffffffffffffffffffffffff87167f000000000000000000000000000000000000000000000000000000000000000086610909565b6040517f5131ab5900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690635131ab599061046490899089908990899089906004016110d7565b600060405180830381600087803b15801561047e57600080fd5b505af1158015610492573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167f85b5be9cf454e05e0bddf49315178102227c312078eefa3c00294fb4d912ae4e8686866040516104f793929190611134565b60405180910390a35061050a6001600055565b5050505050565b6000828152600160208190526040909120015461052d816108c0565b6105378383610996565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8116331461058c576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6105968282610a61565b505050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a6105c5816108c0565b6105cd610b20565b50565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a6105fa816108c0565b6105cd610b9d565b61060a61087d565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e4610634816108c0565b61063c6108ca565b61067d73ffffffffffffffffffffffffffffffffffffffff87167f000000000000000000000000000000000000000000000000000000000000000086610909565b6040517fb8969bd400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063b8969bd4906106f790899089908990899089906004016110d7565b600060405180830381600087803b15801561071157600080fd5b505af1158015610725573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fb9d4efa96044e5f5e03e696fa9ae2ff66911cc27e8a637c3627c75bc5b2241c88686866040516104f793929190611134565b600082815260016020819052604090912001546107a6816108c0565b6105378383610a61565b6107b861087d565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e46107e2816108c0565b6107ea6108ca565b61080b73ffffffffffffffffffffffffffffffffffffffff85168484610909565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f9b1bfa7fa9ee420a16e124f794c35ac9f90472acc99140eb2f6447c714cad8eb8460405161086a91815260200190565b60405180910390a3506105966001600055565b6002600054036108b9576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b6105cd8133610bf8565b60025460ff1615610907576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6040805173ffffffffffffffffffffffffffffffffffffffff8416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb00000000000000000000000000000000000000000000000000000000179052610596908490610c89565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff16610a5957600083815260016020818152604080842073ffffffffffffffffffffffffffffffffffffffff8716808652925280842080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a4506001610369565b506000610369565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff1615610a5957600083815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8616808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a4506001610369565b610b28610d1f565b600280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b610ba56108ca565b600280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258610b733390565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16610c85576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82166004820152602481018390526044015b60405180910390fd5b5050565b6000610cab73ffffffffffffffffffffffffffffffffffffffff841683610d5b565b90508051600014158015610cd0575080806020019051810190610cce9190611157565b155b15610596576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84166004820152602401610c7c565b60025460ff16610907576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6060610d6983836000610d70565b9392505050565b606081471015610dae576040517fcd786059000000000000000000000000000000000000000000000000000000008152306004820152602401610c7c565b6000808573ffffffffffffffffffffffffffffffffffffffff168486604051610dd79190611179565b60006040518083038185875af1925050503d8060008114610e14576040519150601f19603f3d011682016040523d82523d6000602084013e610e19565b606091505b5091509150610e29868383610e33565b9695505050505050565b606082610e4857610e4382610ec2565b610d69565b8151158015610e6c575073ffffffffffffffffffffffffffffffffffffffff84163b155b15610ebb576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85166004820152602401610c7c565b5080610d69565b805115610ed25780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060208284031215610f1657600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610d6957600080fd5b803573ffffffffffffffffffffffffffffffffffffffff81168114610f6a57600080fd5b919050565b600080600080600060808688031215610f8757600080fd5b610f9086610f46565b9450610f9e60208701610f46565b935060408601359250606086013567ffffffffffffffff811115610fc157600080fd5b8601601f81018813610fd257600080fd5b803567ffffffffffffffff811115610fe957600080fd5b886020828401011115610ffb57600080fd5b959894975092955050506020019190565b60006020828403121561101e57600080fd5b5035919050565b6000806040838503121561103857600080fd5b8235915061104860208401610f46565b90509250929050565b60008060006060848603121561106657600080fd5b61106f84610f46565b925061107d60208501610f46565b929592945050506040919091013590565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff8616815273ffffffffffffffffffffffffffffffffffffffff8516602082015283604082015260806060820152600061112960808301848661108e565b979650505050505050565b83815260406020820152600061114e60408301848661108e565b95945050505050565b60006020828403121561116957600080fd5b81518015158114610d6957600080fd5b6000825160005b8181101561119a5760208186018101518583015201611180565b50600092019182525091905056fea264697066735822122035ca457bdc8b45adde9844ff8416a0abd723c23055fd6933ddc05523b5f5b6de64736f6c634300081a003360c060405260001960035534801561001657600080fd5b506040516117f93803806117f9833981016040819052610035916101f5565b60016000819055805460ff19169055838383836001600160a01b038416158061006557506001600160a01b038316155b8061007757506001600160a01b038216155b8061008957506001600160a01b038116155b156100a75760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b03808516608052831660a0526100c5600082610129565b506100f07f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e483610129565b5061011b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a82610129565b505050505050505050610249565b60008281526002602090815260408083206001600160a01b038516845290915281205460ff166101cf5760008381526002602090815260408083206001600160a01b03861684529091529020805460ff191660011790556101873390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45060016101d3565b5060005b92915050565b80516001600160a01b03811681146101f057600080fd5b919050565b6000806000806080858703121561020b57600080fd5b610214856101d9565b9350610222602086016101d9565b9250610230604086016101d9565b915061023e606086016101d9565b905092959194509250565b60805160a0516115306102c9600039600081816102120152818161046f015281816105b1015281816106770152818161077c0152818161089e01528181610a5201528181610b9401528181610c5a0152610db10152600081816101c60152818161057b0152818161064801528181610b5e0152610c2b01526115306000f3fe608060405234801561001057600080fd5b506004361061016c5760003560e01c80635e3e9fef116100cd57806391d1485411610081578063d547741f11610066578063d547741f14610354578063d5abeb0114610367578063e63ab1e91461037057600080fd5b806391d1485414610306578063a217fddf1461034c57600080fd5b8063743e0c9b116100b2578063743e0c9b146102c45780638456cb59146102d757806385f438c1146102df57600080fd5b80635e3e9fef1461029e5780636f8b44b0146102b157600080fd5b8063248a9ca31161012457806336568abe1161010957806336568abe146102785780633f4ba83a1461028b5780635c975abb1461029357600080fd5b8063248a9ca3146102345780632f2ff15d1461026557600080fd5b8063106e629011610155578063106e6290146101ae578063116191b6146101c157806321e093b11461020d57600080fd5b806301ffc9a71461017157806302d5c89914610199575b600080fd5b61018461017f366004611262565b610397565b60405190151581526020015b60405180910390f35b6101ac6101a73660046112d4565b610430565b005b6101ac6101bc366004611366565b61073d565b6101e87f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610190565b6101e87f000000000000000000000000000000000000000000000000000000000000000081565b610257610242366004611399565b60009081526002602052604090206001015490565b604051908152602001610190565b6101ac6102733660046113b2565b61095a565b6101ac6102863660046113b2565b610985565b6101ac6109de565b60015460ff16610184565b6101ac6102ac3660046112d4565b610a13565b6101ac6102bf366004611399565b610d06565b6101ac6102d2366004611399565b610d74565b6101ac610e1e565b6102577f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b6101846103143660046113b2565b600091825260026020908152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b610257600081565b6101ac6103623660046113b2565b610e50565b61025760035481565b6102577f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061042a57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b610438610e75565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461046281610eb8565b61046a610ec2565b6003547f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156104d8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104fc91906113de565b61050690876113f7565b111561053e576040517fc30436e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f1e458bee00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116600483015260248201879052604482018490527f00000000000000000000000000000000000000000000000000000000000000001690631e458bee90606401600060405180830381600087803b1580156105f557600080fd5b505af1158015610609573d6000803e3d6000fd5b50506040517fb8969bd400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016925063b8969bd491506106a7907f0000000000000000000000000000000000000000000000000000000000000000908a908a908a908a9060040161147a565b600060405180830381600087803b1580156106c157600080fd5b505af11580156106d5573d6000803e3d6000fd5b505050508573ffffffffffffffffffffffffffffffffffffffff167fba96f26bdda53eb8c8ba39045dfb4ff39753fbc7a6edcf250a88e75e78d102fe868686604051610723939291906114d7565b60405180910390a2506107366001600055565b5050505050565b610745610e75565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461076f81610eb8565b610777610ec2565b6003547f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156107e5573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061080991906113de565b61081390856113f7565b111561084b576040517fc30436e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f1e458bee00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff858116600483015260248201859052604482018490527f00000000000000000000000000000000000000000000000000000000000000001690631e458bee90606401600060405180830381600087803b1580156108e257600080fd5b505af11580156108f6573d6000803e3d6000fd5b505050508373ffffffffffffffffffffffffffffffffffffffff167f884edad9ce6fa2440d8a54cc123490eb96d2768479d49ff9c7366125a94243648460405161094291815260200190565b60405180910390a2506109556001600055565b505050565b60008281526002602052604090206001015461097581610eb8565b61097f8383610f01565b50505050565b73ffffffffffffffffffffffffffffffffffffffff811633146109d4576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6109558282611001565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610a0881610eb8565b610a106110c0565b50565b610a1b610e75565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e4610a4581610eb8565b610a4d610ec2565b6003547f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610abb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610adf91906113de565b610ae990876113f7565b1115610b21576040517fc30436e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f1e458bee00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116600483015260248201879052604482018490527f00000000000000000000000000000000000000000000000000000000000000001690631e458bee90606401600060405180830381600087803b158015610bd857600080fd5b505af1158015610bec573d6000803e3d6000fd5b50506040517f5131ab5900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169250635131ab599150610c8a907f0000000000000000000000000000000000000000000000000000000000000000908a908a908a908a9060040161147a565b600060405180830381600087803b158015610ca457600080fd5b505af1158015610cb8573d6000803e3d6000fd5b505050508573ffffffffffffffffffffffffffffffffffffffff167f7772f56296d3a5202974a45c61c9188d844ab4d6eeb18c851e4b8d5384ca6ced868686604051610723939291906114d7565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e4610d3081610eb8565b610d38610ec2565b60038290556040518281527f7810bd47de260c3e9ee10061cf438099dd12256c79485f12f94dbccc981e806c9060200160405180910390a15050565b610d7c610ec2565b6040517f79cc6790000000000000000000000000000000000000000000000000000000008152336004820152602481018290527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16906379cc679090604401600060405180830381600087803b158015610e0a57600080fd5b505af1158015610736573d6000803e3d6000fd5b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610e4881610eb8565b610a1061113d565b600082815260026020526040902060010154610e6b81610eb8565b61097f8383611001565b600260005403610eb1576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b610a108133611196565b60015460ff1615610eff576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff16610ff957600083815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff86168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055610f973390565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a450600161042a565b50600061042a565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff1615610ff957600083815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8616808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a450600161042a565b6110c8611226565b600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b611145610ec2565b600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016811790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25833611113565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16611222576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff821660048201526024810183905260440160405180910390fd5b5050565b60015460ff16610eff576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006020828403121561127457600080fd5b81357fffffffff00000000000000000000000000000000000000000000000000000000811681146112a457600080fd5b9392505050565b803573ffffffffffffffffffffffffffffffffffffffff811681146112cf57600080fd5b919050565b6000806000806000608086880312156112ec57600080fd5b6112f5866112ab565b945060208601359350604086013567ffffffffffffffff81111561131857600080fd5b8601601f8101881361132957600080fd5b803567ffffffffffffffff81111561134057600080fd5b88602082840101111561135257600080fd5b959894975060200195606001359392505050565b60008060006060848603121561137b57600080fd5b611384846112ab565b95602085013595506040909401359392505050565b6000602082840312156113ab57600080fd5b5035919050565b600080604083850312156113c557600080fd5b823591506113d5602084016112ab565b90509250929050565b6000602082840312156113f057600080fd5b5051919050565b8082018082111561042a577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff8616815273ffffffffffffffffffffffffffffffffffffffff851660208201528360408201526080606082015260006114cc608083018486611431565b979650505050505050565b8381526040602082015260006114f1604083018486611431565b9594505050505056fea264697066735822122083f8ba25d15d0dacb4bf73d1472e680a549b02f1b26b83dcb21bfef553fb6e1d64736f6c634300081a0033a2646970667358221220d241a552b987784414eec7a8a805c4c558fef3be7a48c3b80252cba36be86fd864736f6c634300081a0033", + ABI: "[{\"type\":\"function\",\"name\":\"IS_TEST\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeArtifacts\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedArtifacts_\",\"type\":\"string[]\",\"internalType\":\"string[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeContracts\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedContracts_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeSelectors\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedSelectors_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzSelector[]\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"selectors\",\"type\":\"bytes4[]\",\"internalType\":\"bytes4[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeSenders\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedSenders_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"failed\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"setUp\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"targetArtifactSelectors\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedArtifactSelectors_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzArtifactSelector[]\",\"components\":[{\"name\":\"artifact\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"selectors\",\"type\":\"bytes4[]\",\"internalType\":\"bytes4[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetArtifacts\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedArtifacts_\",\"type\":\"string[]\",\"internalType\":\"string[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetContracts\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedContracts_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetInterfaces\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedInterfaces_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzInterface[]\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"artifacts\",\"type\":\"string[]\",\"internalType\":\"string[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetSelectors\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedSelectors_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzSelector[]\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"selectors\",\"type\":\"bytes4[]\",\"internalType\":\"bytes4[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetSenders\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedSenders_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"testCallWithPayload\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositERC20ToCustody\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositERC20ToCustodyWithPayload\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositEthToTss\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositEthToTssWithPayload\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositZetaToConnector\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testFailDepositERC20ToCustodyIfAmountIs0\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testFailDepositERC20ToCustodyIfReceiverIsZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testFailDepositERC20ToCustodyWithPayloadIfAmountIs0\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testFailDepositERC20ToCustodyWithPayloadIfReceiverIsZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testFailDepositEthToTssIfAmountIs0\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testFailDepositEthToTssIfReceiverIsZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testFailDepositEthToTssWithPayloadIfAmountIs0\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testFailDepositEthToTssWithPayloadIfReceiverIsZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"event\",\"name\":\"Call\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"receiver\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Deposit\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"receiver\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"asset\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Executed\",\"inputs\":[{\"name\":\"destination\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ExecutedWithERC20\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedERC20\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"token\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"destination\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedNoParams\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedNonPayable\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"strs\",\"type\":\"string[]\",\"indexed\":false,\"internalType\":\"string[]\"},{\"name\":\"nums\",\"type\":\"uint256[]\",\"indexed\":false,\"internalType\":\"uint256[]\"},{\"name\":\"flag\",\"type\":\"bool\",\"indexed\":false,\"internalType\":\"bool\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedPayable\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"str\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"num\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"flag\",\"type\":\"bool\",\"indexed\":false,\"internalType\":\"bool\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedRevert\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Reverted\",\"inputs\":[{\"name\":\"destination\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RevertedWithERC20\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log\",\"inputs\":[{\"name\":\"\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_address\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_array\",\"inputs\":[{\"name\":\"val\",\"type\":\"uint256[]\",\"indexed\":false,\"internalType\":\"uint256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_array\",\"inputs\":[{\"name\":\"val\",\"type\":\"int256[]\",\"indexed\":false,\"internalType\":\"int256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_array\",\"inputs\":[{\"name\":\"val\",\"type\":\"address[]\",\"indexed\":false,\"internalType\":\"address[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_bytes\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_bytes32\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_int\",\"inputs\":[{\"name\":\"\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_address\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_array\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"uint256[]\",\"indexed\":false,\"internalType\":\"uint256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_array\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"int256[]\",\"indexed\":false,\"internalType\":\"int256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_array\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"address[]\",\"indexed\":false,\"internalType\":\"address[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_bytes\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_bytes32\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_decimal_int\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"},{\"name\":\"decimals\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_decimal_uint\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"decimals\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_int\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_string\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_uint\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_string\",\"inputs\":[{\"name\":\"\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_uint\",\"inputs\":[{\"name\":\"\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"logs\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"ApprovalFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ConnectorInitialized\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"CustodyInitialized\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"DepositFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ExecutionFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientERC20Amount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientETHAmount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZeroAddress\",\"inputs\":[]}]", + Bin: "0x6080604052600c8054600160ff199182168117909255601f80549091169091179055620f4240602855348015603357600080fd5b5061d1cb806100436000396000f3fe608060405234801561001057600080fd5b50600436106101b95760003560e01c806385226c81116100f9578063bb93f11e11610097578063e20c9f7111610071578063e20c9f71146102d2578063e306a978146102da578063f96c02df146102e2578063fa7626d4146102ea57600080fd5b8063bb93f11e146102ba578063c13d738f146102c2578063d896e261146102ca57600080fd5b8063aa030c1c116100d3578063aa030c1c1461028a578063b0464fdc14610292578063b5508aa91461029a578063ba414fa6146102a257600080fd5b806385226c8114610258578063916a17c61461026d5780639fd1e5971461028257600080fd5b80632ade3880116101665780633f7286f4116101405780633f7286f41461022b5780636459542a1461023357806366d9a9a01461023b5780637478fda01461025057600080fd5b80632ade38801461020657806330f7c04f1461021b5780633e5e3c231461022357600080fd5b80630a9254e4116101975780630a9254e4146101d85780631806a9a5146101e05780631ed7831c146101e857600080fd5b806305a898e2146101be57806306978ca3146101c85780630724d8e3146101d0575b600080fd5b6101c66102f7565b005b6101c66104ab565b6101c66105bd565b6101c6610774565b6101c6611085565b6101f061117f565b6040516101fd91906172ae565b60405180910390f35b61020e6111e1565b6040516101fd919061734a565b6101c6611323565b6101f0611790565b6101f06117f0565b6101c6611850565b610243611c4d565b6040516101fd91906174b0565b6101c6611dcf565b610260611f02565b6040516101fd919061754e565b610275611fd2565b6040516101fd91906175c5565b6101c66120cd565b6101c66122e9565b6102756124a0565b61026061259b565b6102aa61266b565b60405190151581526020016101fd565b6101c661273f565b6101c66128bf565b6101c6612a6e565b6101f0612be6565b6101c6612c46565b6101c6612f12565b601f546102aa9060ff1681565b6026546040516001600160a01b03909116602482015260019060009060440160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f84fae76000000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063f28dceb3906103ef906004016020808252600b908201527f5a65726f41646472657373000000000000000000000000000000000000000000604082015260600190565b600060405180830381600087803b15801561040957600080fd5b505af115801561041d573d6000803e3d6000fd5b50506020546023546040517f8c6f037f0000000000000000000000000000000000000000000000000000000081526001600160a01b039283169450638c6f037f9350610475926000928892911690879060040161765c565b600060405180830381600087803b15801561048f57600080fd5b505af11580156104a3573d6000803e3d6000fd5b505050505050565b6040517ff28dceb300000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f496e73756666696369656e74455448416d6f756e7400000000000000000000006044820152600090737109709ecfa91a80626ff3989d68f67f5b1dd12d9063f28dceb390606401600060405180830381600087803b15801561054157600080fd5b505af1158015610555573d6000803e3d6000fd5b50506020546026546040517ff340fa010000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201529116925063f340fa01915083906024015b6000604051808303818588803b15801561048f57600080fd5b6027546020546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039182166084820152620186a092919091163190737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b15801561065957600080fd5b505af115801561066d573d6000803e3d6000fd5b505060265460255460408051878152600060208201819052606082840181905282015290516001600160a01b0393841695509290911692507f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a4919081900360800190a36020546026546040517ff340fa010000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015291169063f340fa019084906024016000604051808303818588803b15801561073357600080fd5b505af1158015610747573d6000803e3d6000fd5b50506027546001600160a01b031631925061076f9150610769905084846176c2565b826130b4565b505050565b602580547fffffffffffffffffffffffff00000000000000000000000000000000000000009081163017909155602680548216611234179055602780549091166156781790556040516107c6906171c1565b60408082526004908201527f746573740000000000000000000000000000000000000000000000000000000060608201526080602082018190526003908201527f54544b000000000000000000000000000000000000000000000000000000000060a082015260c001604051809103906000f08015801561084b573d6000803e3d6000fd5b50602380547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039283161790556027546040519116908190610894906171ce565b6001600160a01b03928316815291166020820152604001604051809103906000f0801580156108c7573d6000803e3d6000fd5b50602480547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039283169081178255604080518082018252600e81527f4761746577617945564d2e736f6c0000000000000000000000000000000000006020820152602754602554925190861694810194909452604484019290925290921660648201526109b8919060840160408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fc0c53b8b00000000000000000000000000000000000000000000000000000000179052613133565b601f80547fffffffffffffffffffffff0000000000000000000000000000000000000000ff166101006001600160a01b0393841681029190911791829055602080549190920483167fffffffffffffffffffffffff00000000000000000000000000000000000000009091168117909155602754602554604051929391821692911690610a44906171db565b6001600160a01b03938416815291831660208301529091166040820152606001604051809103906000f080158015610a80573d6000803e3d6000fd5b50602180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039283161790556020546024546027546025546040519385169492831693918316921690610adb906171e8565b6001600160a01b039485168152928416602084015290831660408301529091166060820152608001604051809103906000f080158015610b1f573d6000803e3d6000fd5b50602280547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039283161790556027546040517fca669fa700000000000000000000000000000000000000000000000000000000815291166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015610bbd57600080fd5b505af1158015610bd1573d6000803e3d6000fd5b5050602480546027546022546040517f15d57fd40000000000000000000000000000000000000000000000000000000081526001600160a01b039283166004820152908216938101939093521692506315d57fd49150604401600060405180830381600087803b158015610c4457600080fd5b505af1158015610c58573d6000803e3d6000fd5b50506027546040517fc88a5e6d0000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152670de0b6b3a76400006024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c88a5e6d9150604401600060405180830381600087803b158015610cdc57600080fd5b505af1158015610cf0573d6000803e3d6000fd5b50506025546040517f06447d560000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506306447d569150602401600060405180830381600087803b158015610d6657600080fd5b505af1158015610d7a573d6000803e3d6000fd5b50506020546021546040517fae7a3a6f0000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201529116925063ae7a3a6f9150602401600060405180830381600087803b158015610de057600080fd5b505af1158015610df4573d6000803e3d6000fd5b50506020546022546040517f10188aef0000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152911692506310188aef9150602401600060405180830381600087803b158015610e5a57600080fd5b505af1158015610e6e573d6000803e3d6000fd5b505050507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b03166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610ed057600080fd5b505af1158015610ee4573d6000803e3d6000fd5b50506023546025546028546040517f40c10f190000000000000000000000000000000000000000000000000000000081526001600160a01b0392831660048201526024810191909152911692506340c10f199150604401600060405180830381600087803b158015610f5557600080fd5b505af1158015610f69573d6000803e3d6000fd5b50506027546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b158015610fdf57600080fd5b505af1158015610ff3573d6000803e3d6000fd5b50506022546025546028546040517f106e62900000000000000000000000000000000000000000000000000000000081526001600160a01b0392831660048201526024810191909152600060448201529116925063106e62909150606401600060405180830381600087803b15801561106b57600080fd5b505af115801561107f573d6000803e3d6000fd5b50505050565b6040517ff28dceb300000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f5a65726f416464726573730000000000000000000000000000000000000000006044820152600190737109709ecfa91a80626ff3989d68f67f5b1dd12d9063f28dceb390606401600060405180830381600087803b15801561111b57600080fd5b505af115801561112f573d6000803e3d6000fd5b50506020546040517ff340fa01000000000000000000000000000000000000000000000000000000008152600060048201526001600160a01b03909116925063f340fa01915083906024016105a4565b606060168054806020026020016040519081016040528092919081815260200182805480156111d757602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116111b9575b5050505050905090565b6060601e805480602002602001604051908101604052809291908181526020016000905b8282101561131a57600084815260208082206040805180820182526002870290920180546001600160a01b03168352600181018054835181870281018701909452808452939591948681019491929084015b82821015611303578382906000526020600020018054611276906176d5565b80601f01602080910402602001604051908101604052809291908181526020018280546112a2906176d5565b80156112ef5780601f106112c4576101008083540402835291602001916112ef565b820191906000526020600020905b8154815290600101906020018083116112d257829003601f168201915b505050505081526020019060010190611257565b505050508152505081526020019060010190611205565b50505050905090565b6023546021546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620186a09260009216906370a0823190602401602060405180830381865afa15801561138f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113b39190617722565b90506113c06000826130b4565b6026546040516001600160a01b03909116602482015260009060440160408051601f19818403018152918152602080830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f84fae76000000000000000000000000000000000000000000000000000000000179052602354905491517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b03928316600482015260248101879052929350169063095ea7b3906044016020604051808303816000875af11580156114a3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114c7919061773b565b506020546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b15801561155657600080fd5b505af115801561156a573d6000803e3d6000fd5b50506026546025546023546040516001600160a01b03938416955091831693507f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a4926115bd92899290911690879061775d565b60405180910390a36020546026546023546040517f8c6f037f0000000000000000000000000000000000000000000000000000000081526001600160a01b0393841693638c6f037f9361161e9390821692899290911690879060040161765c565b600060405180830381600087803b15801561163857600080fd5b505af115801561164c573d6000803e3d6000fd5b50506023546021546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260009450911691506370a0823190602401602060405180830381865afa1580156116b8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116dc9190617722565b90506116e884826130b4565b6023546025546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260009291909116906370a0823190602401602060405180830381865afa158015611752573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117769190617722565b9050611789856028546107699190617785565b5050505050565b606060188054806020026020016040519081016040528092919081815260200182805480156111d7576020028201919060005260206000209081546001600160a01b031681526001909101906020018083116111b9575050505050905090565b606060178054806020026020016040519081016040528092919081815260200182805480156111d7576020028201919060005260206000209081546001600160a01b031681526001909101906020018083116111b9575050505050905090565b6023546021546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620186a09260009216906370a0823190602401602060405180830381865afa1580156118bc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118e09190617722565b90506118ed6000826130b4565b6023546020546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201526024810185905291169063095ea7b3906044016020604051808303816000875af115801561195b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061197f919061773b565b506020546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b158015611a0e57600080fd5b505af1158015611a22573d6000803e3d6000fd5b5050602654602554602354604080518881526001600160a01b039283166020820152606081830181905260009082015290519382169550911692507f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a4919081900360800190a36020546026546023546040517ff45346dc0000000000000000000000000000000000000000000000000000000081526001600160a01b03928316600482015260248101869052908216604482015291169063f45346dc90606401600060405180830381600087803b158015611afc57600080fd5b505af1158015611b10573d6000803e3d6000fd5b50506023546021546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260009450911691506370a0823190602401602060405180830381865afa158015611b7c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ba09190617722565b9050611bac83826130b4565b6023546025546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260009291909116906370a0823190602401602060405180830381865afa158015611c16573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c3a9190617722565b905061107f846028546107699190617785565b6060601b805480602002602001604051908101604052809291908181526020016000905b8282101561131a5783829060005260206000209060020201604051806040016040529081600082018054611ca4906176d5565b80601f0160208091040260200160405190810160405280929190818152602001828054611cd0906176d5565b8015611d1d5780601f10611cf257610100808354040283529160200191611d1d565b820191906000526020600020905b815481529060010190602001808311611d0057829003601f168201915b5050505050815260200160018201805480602002602001604051908101604052809291908181526020018280548015611db757602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019060040190602082600301049283019260010382029150808411611d645790505b50505050508152505081526020019060010190611c71565b6040517ff28dceb300000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f5a65726f416464726573730000000000000000000000000000000000000000006044820152600190737109709ecfa91a80626ff3989d68f67f5b1dd12d9063f28dceb390606401600060405180830381600087803b158015611e6557600080fd5b505af1158015611e79573d6000803e3d6000fd5b50506020546023546040517ff45346dc00000000000000000000000000000000000000000000000000000000815260006004820152602481018690526001600160a01b0391821660448201529116925063f45346dc91506064015b600060405180830381600087803b158015611eee57600080fd5b505af1158015611789573d6000803e3d6000fd5b6060601a805480602002602001604051908101604052809291908181526020016000905b8282101561131a578382906000526020600020018054611f45906176d5565b80601f0160208091040260200160405190810160405280929190818152602001828054611f71906176d5565b8015611fbe5780601f10611f9357610100808354040283529160200191611fbe565b820191906000526020600020905b815481529060010190602001808311611fa157829003601f168201915b505050505081526020019060010190611f26565b6060601d805480602002602001604051908101604052809291908181526020016000905b8282101561131a5760008481526020908190206040805180820182526002860290920180546001600160a01b031683526001810180548351818702810187019094528084529394919385830193928301828280156120b557602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190600401906020826003010492830192600103820291508084116120625790505b50505050508152505081526020019060010190611ff6565b6027546026546040516001600160a01b039182166024820152620186a09291909116319060009060440160408051601f19818403018152918152602080830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f84fae760000000000000000000000000000000000000000000000000000000001790525490517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b1580156121de57600080fd5b505af11580156121f2573d6000803e3d6000fd5b50506026546025546040516001600160a01b039283169450911691507f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a490612240908790600090879061775d565b60405180910390a36020546026546040517f29c59b5d0000000000000000000000000000000000000000000000000000000081526001600160a01b03928316926329c59b5d92879261229a92909116908690600401617798565b6000604051808303818588803b1580156122b357600080fd5b505af11580156122c7573d6000803e3d6000fd5b50506027546001600160a01b031631925061107f9150610769905085856176c2565b6026546040516001600160a01b03909116602482015260009060440160408051601f19818403018152918152602080830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f84fae760000000000000000000000000000000000000000000000000000000001790525490517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b1580156123ec57600080fd5b505af1158015612400573d6000803e3d6000fd5b50506026546025546040516001600160a01b039283169450911691507f2a21062ee9199c2e205622999eeb7c3da73153674f36a0acd3f74fa6af67bde3906124499085906177ba565b60405180910390a36020546026546040517f1b8b921d0000000000000000000000000000000000000000000000000000000081526001600160a01b0392831692631b8b921d92611ed4929116908590600401617798565b6060601c805480602002602001604051908101604052809291908181526020016000905b8282101561131a5760008481526020908190206040805180820182526002860290920180546001600160a01b0316835260018101805483518187028101870190945280845293949193858301939283018282801561258357602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190600401906020826003010492830192600103820291508084116125305790505b505050505081525050815260200190600101906124c4565b60606019805480602002602001604051908101604052809291908181526020016000905b8282101561131a5783829060005260206000200180546125de906176d5565b80601f016020809104026020016040519081016040528092919081815260200182805461260a906176d5565b80156126575780601f1061262c57610100808354040283529160200191612657565b820191906000526020600020905b81548152906001019060200180831161263a57829003601f168201915b5050505050815260200190600101906125bf565b60085460009060ff1615612683575060085460ff1690565b6040517f667f9d70000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d600482018190527f6661696c65640000000000000000000000000000000000000000000000000000602483015260009163667f9d7090604401602060405180830381865afa158015612714573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127389190617722565b1415905090565b6026546040516001600160a01b039091166024820152600090819060440160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f84fae76000000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063f28dceb3906128369060040160208082526017908201527f496e73756666696369656e744552433230416d6f756e74000000000000000000604082015260600190565b600060405180830381600087803b15801561285057600080fd5b505af1158015612864573d6000803e3d6000fd5b50506020546026546023546040517f8c6f037f0000000000000000000000000000000000000000000000000000000081526001600160a01b039384169550638c6f037f9450610475939283169288921690879060040161765c565b6026546040516001600160a01b039091166024820152600090819060440160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f84fae76000000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063f28dceb3906129b69060040160208082526015908201527f496e73756666696369656e74455448416d6f756e740000000000000000000000604082015260600190565b600060405180830381600087803b1580156129d057600080fd5b505af11580156129e4573d6000803e3d6000fd5b50506020546026546040517f29c59b5d0000000000000000000000000000000000000000000000000000000081526001600160a01b0392831694506329c59b5d93508692612a389216908690600401617798565b6000604051808303818588803b158015612a5157600080fd5b505af1158015612a65573d6000803e3d6000fd5b50505050505050565b6026546040516001600160a01b03909116602482015260019060009060440160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f84fae76000000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063f28dceb390612b66906004016020808252600b908201527f5a65726f41646472657373000000000000000000000000000000000000000000604082015260600190565b600060405180830381600087803b158015612b8057600080fd5b505af1158015612b94573d6000803e3d6000fd5b50506020546040517f29c59b5d0000000000000000000000000000000000000000000000000000000081526001600160a01b0390911692506329c59b5d91508490612a38906000908690600401617798565b606060158054806020026020016040519081016040528092919081815260200182805480156111d7576020028201919060005260206000209081546001600160a01b031681526001909101906020018083116111b9575050505050905090565b602480546020546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620186a093810184905291169063095ea7b3906044016020604051808303816000875af1158015612cb8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612cdc919061773b565b506020546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b158015612d6b57600080fd5b505af1158015612d7f573d6000803e3d6000fd5b5050602654602554602454604080518781526001600160a01b039283166020820152606081830181905260009082015290519382169550911692507f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a4919081900360800190a3602054602654602480546040517ff45346dc0000000000000000000000000000000000000000000000000000000081526001600160a01b0393841660048201529182018590528216604482015291169063f45346dc90606401600060405180830381600087803b158015612e5857600080fd5b505af1158015612e6c573d6000803e3d6000fd5b5050602480546025546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260009550911692506370a082319101602060405180830381865afa158015612ed7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612efb9190617722565b9050612f0e826028546107699190617785565b5050565b6023546020546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260006024820181905292919091169063095ea7b3906044016020604051808303816000875af1158015612f85573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612fa9919061773b565b506040517ff28dceb300000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f496e73756666696369656e744552433230416d6f756e740000000000000000006044820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063f28dceb390606401600060405180830381600087803b15801561303d57600080fd5b505af1158015613051573d6000803e3d6000fd5b50506020546026546023546040517ff45346dc0000000000000000000000000000000000000000000000000000000081526001600160a01b0392831660048201526024810187905290821660448201529116925063f45346dc9150606401611ed4565b6040517f98296c540000000000000000000000000000000000000000000000000000000081526004810183905260248101829052737109709ecfa91a80626ff3989d68f67f5b1dd12d906398296c549060440160006040518083038186803b15801561311f57600080fd5b505afa1580156104a3573d6000803e3d6000fd5b600061313d6171f5565b613148848483613152565b9150505b92915050565b60008061315f85846131cd565b90506131c26040518060400160405280601d81526020017f4552433139363750726f78792e736f6c3a4552433139363750726f787900000081525082866040516020016131ad929190617798565b604051602081830303815290604052856131d9565b9150505b9392505050565b60006131c68383613207565b60c081015151600090156131fd576131f684848460c00151613222565b90506131c6565b6131f684846133c8565b600061321383836134b3565b6131c6838360200151846131d9565b60008061322d6134bf565b9050600061323b8683613592565b905060006132528260600151836020015185613a38565b9050600061326283838989613c4a565b9050600061326f82614ac7565b602081015181519192509060030b156132e2578982604001516040516020016132999291906177cd565b60408051601f19818403018152908290527f08c379a00000000000000000000000000000000000000000000000000000000082526132d9916004016177ba565b60405180910390fd5b60006133256040518060400160405280601581526020017f4465706c6f79656420746f20616464726573733a200000000000000000000000815250836001614c96565b6040517fc6ce059d000000000000000000000000000000000000000000000000000000008152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c6ce059d906133789084906004016177ba565b602060405180830381865afa158015613395573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133b9919061784e565b9b9a5050505050505050505050565b6040517f8d1cc9250000000000000000000000000000000000000000000000000000000081526000908190737109709ecfa91a80626ff3989d68f67f5b1dd12d90638d1cc9259061341d9087906004016177ba565b600060405180830381865afa15801561343a573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052613462919081019061795f565b90506000613490828560405160200161347c929190617994565b604051602081830303815290604052614e96565b90506001600160a01b0381166131485784846040516020016132999291906179c3565b612f0e82826000614ea9565b604080518082018252600381527f6f75740000000000000000000000000000000000000000000000000000000000602082015290517fd145736c000000000000000000000000000000000000000000000000000000008152606091737109709ecfa91a80626ff3989d68f67f5b1dd12d91829063d145736c90613546908490600401617a6e565b600060405180830381865afa158015613563573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261358b9190810190617ab5565b9250505090565b6135c46040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b6000737109709ecfa91a80626ff3989d68f67f5b1dd12d905061360f6040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b61361885614fac565b6020820152600061362886615391565b90506000836001600160a01b031663d930a0e66040518163ffffffff1660e01b8152600401600060405180830381865afa15801561366a573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526136929190810190617ab5565b868385602001516040516020016136ac9493929190617afe565b60408051601f19818403018152908290527f60f9bb1100000000000000000000000000000000000000000000000000000000825291506000906001600160a01b038616906360f9bb11906137049085906004016177ba565b600060405180830381865afa158015613721573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526137499190810190617ab5565b6040517fdb4235f60000000000000000000000000000000000000000000000000000000081529091506001600160a01b0386169063db4235f690613791908490600401617c02565b602060405180830381865afa1580156137ae573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137d2919061773b565b6137e757816040516020016132999190617c54565b6040517f49c4fac80000000000000000000000000000000000000000000000000000000081526001600160a01b038616906349c4fac89061382c908490600401617ce6565b600060405180830381865afa158015613849573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526138719190810190617ab5565b84526040517fdb4235f60000000000000000000000000000000000000000000000000000000081526001600160a01b0386169063db4235f6906138b8908490600401617d38565b602060405180830381865afa1580156138d5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138f9919061773b565b1561398e576040517f49c4fac80000000000000000000000000000000000000000000000000000000081526001600160a01b038616906349c4fac890613943908490600401617d38565b600060405180830381865afa158015613960573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526139889190810190617ab5565b60408501525b846001600160a01b03166349c4fac88286600001516040516020016139b39190617d8a565b6040516020818303038152906040526040518363ffffffff1660e01b81526004016139df929190617df6565b600060405180830381865afa1580156139fc573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052613a249190810190617ab5565b606085015250608083015250949350505050565b60408051600480825260a0820190925260609160009190816020015b6060815260200190600190039081613a545790505090506040518060400160405280600481526020017f677265700000000000000000000000000000000000000000000000000000000081525081600081518110613ab457613ab4617e1b565b60200260200101819052506040518060400160405280600381526020017f2d726c000000000000000000000000000000000000000000000000000000000081525081600181518110613b0857613b08617e1b565b602002602001018190525084604051602001613b249190617e4a565b60405160208183030381529060405281600281518110613b4657613b46617e1b565b602002602001018190525082604051602001613b629190617eb6565b60405160208183030381529060405281600381518110613b8457613b84617e1b565b60200260200101819052506000613b9a82614ac7565b602080820151604080518082018252600581527f2e6a736f6e0000000000000000000000000000000000000000000000000000008185019081528251808401845260008082529086015282518084019093529051825292810192909252919250613c2b9060408051808201825260008082526020918201528151808301909252845182528085019082015290615614565b613c4057856040516020016132999190617ef7565b9695505050505050565b60a0810151604080518082018252600080825260209182015281518083019092528251808352928101910152606090737109709ecfa91a80626ff3989d68f67f5b1dd12d9015613c9a565b511590565b613e0e57826020015115613d56576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605860248201527f54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f742060448201527f62652075736564207768656e207468652060736b6970566572696679536f757260648201527f6365436f646560206f7074696f6e206973206074727565600000000000000000608482015260a4016132d9565b8260c0015115613e0e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605360248201527f54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f742060448201527f62652075736564207768656e207468652060736b69704c6963656e736554797060648201527f6560206f7074696f6e2069732060747275656000000000000000000000000000608482015260a4016132d9565b6040805160ff8082526120008201909252600091816020015b6060815260200190600190039081613e2757905050905060006040518060400160405280600381526020017f6e70780000000000000000000000000000000000000000000000000000000000815250828280613e8290617f88565b935060ff1681518110613e9757613e97617e1b565b60200260200101819052506040518060400160405280600d81526020017f302e302e312d616c7068612e3700000000000000000000000000000000000000815250604051602001613ee89190617fa7565b604051602081830303815290604052828280613f0390617f88565b935060ff1681518110613f1857613f18617e1b565b60200260200101819052506040518060400160405280600681526020017f6465706c6f790000000000000000000000000000000000000000000000000000815250828280613f6590617f88565b935060ff1681518110613f7a57613f7a617e1b565b60200260200101819052506040518060400160405280600e81526020017f2d2d636f6e74726163744e616d65000000000000000000000000000000000000815250828280613fc790617f88565b935060ff1681518110613fdc57613fdc617e1b565b60200260200101819052508760200151828280613ff890617f88565b935060ff168151811061400d5761400d617e1b565b60200260200101819052506040518060400160405280600e81526020017f2d2d636f6e74726163745061746800000000000000000000000000000000000081525082828061405a90617f88565b935060ff168151811061406f5761406f617e1b565b60209081029190910101528751828261408781617f88565b935060ff168151811061409c5761409c617e1b565b60200260200101819052506040518060400160405280600981526020017f2d2d636861696e496400000000000000000000000000000000000000000000008152508282806140e990617f88565b935060ff16815181106140fe576140fe617e1b565b602002602001018190525061411246615675565b828261411d81617f88565b935060ff168151811061413257614132617e1b565b60200260200101819052506040518060400160405280600f81526020017f2d2d6275696c64496e666f46696c65000000000000000000000000000000000081525082828061417f90617f88565b935060ff168151811061419457614194617e1b565b6020026020010181905250868282806141ac90617f88565b935060ff16815181106141c1576141c1617e1b565b60209081029190910101528551156142e85760408051808201909152601581527f2d2d636f6e7374727563746f7242797465636f646500000000000000000000006020820152828261421281617f88565b935060ff168151811061422757614227617e1b565b60209081029190910101526040517f71aad10d0000000000000000000000000000000000000000000000000000000081526001600160a01b038416906371aad10d906142779089906004016177ba565b600060405180830381865afa158015614294573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526142bc9190810190617ab5565b82826142c781617f88565b935060ff16815181106142dc576142dc617e1b565b60200260200101819052505b8460200151156143b85760408051808201909152601281527f2d2d766572696679536f75726365436f646500000000000000000000000000006020820152828261433181617f88565b935060ff168151811061434657614346617e1b565b60200260200101819052506040518060400160405280600581526020017f66616c736500000000000000000000000000000000000000000000000000000081525082828061439390617f88565b935060ff16815181106143a8576143a8617e1b565b602002602001018190525061457f565b6143f0613c958660a0015160408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6144835760408051808201909152600d81527f2d2d6c6963656e736554797065000000000000000000000000000000000000006020820152828261443381617f88565b935060ff168151811061444857614448617e1b565b60200260200101819052508460a001516040516020016144689190617e4a565b60405160208183030381529060405282828061439390617f88565b8460c001511580156144c65750604080890151815180830183526000808252602091820152825180840190935281518352908101908201526144c490511590565b155b1561457f5760408051808201909152600d81527f2d2d6c6963656e736554797065000000000000000000000000000000000000006020820152828261450a81617f88565b935060ff168151811061451f5761451f617e1b565b602002602001018190525061453388615715565b6040516020016145439190617e4a565b60405160208183030381529060405282828061455e90617f88565b935060ff168151811061457357614573617e1b565b60200260200101819052505b604080860151815180830183526000808252602091820152825180840190935281518352908101908201526145b390511590565b6146485760408051808201909152600b81527f2d2d72656c617965724964000000000000000000000000000000000000000000602082015282826145f681617f88565b935060ff168151811061460b5761460b617e1b565b6020026020010181905250846040015182828061462790617f88565b935060ff168151811061463c5761463c617e1b565b60200260200101819052505b6060850151156147695760408051808201909152600681527f2d2d73616c7400000000000000000000000000000000000000000000000000006020820152828261469181617f88565b935060ff16815181106146a6576146a6617e1b565b602090810291909101015260608501516040517fb11a19e800000000000000000000000000000000000000000000000000000000815260048101919091526001600160a01b0384169063b11a19e890602401600060405180830381865afa158015614715573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261473d9190810190617ab5565b828261474881617f88565b935060ff168151811061475d5761475d617e1b565b60200260200101819052505b60e085015151156148105760408051808201909152600a81527f2d2d6761734c696d697400000000000000000000000000000000000000000000602082015282826147b381617f88565b935060ff16815181106147c8576147c8617e1b565b60200260200101819052506147e48560e0015160000151615675565b82826147ef81617f88565b935060ff168151811061480457614804617e1b565b60200260200101819052505b60e085015160200151156148ba5760408051808201909152600a81527f2d2d6761735072696365000000000000000000000000000000000000000000006020820152828261485d81617f88565b935060ff168151811061487257614872617e1b565b602002602001018190525061488e8560e0015160200151615675565b828261489981617f88565b935060ff16815181106148ae576148ae617e1b565b60200260200101819052505b60e085015160400151156149645760408051808201909152600e81527f2d2d6d61784665655065724761730000000000000000000000000000000000006020820152828261490781617f88565b935060ff168151811061491c5761491c617e1b565b60200260200101819052506149388560e0015160400151615675565b828261494381617f88565b935060ff168151811061495857614958617e1b565b60200260200101819052505b60e08501516060015115614a0e5760408051808201909152601681527f2d2d6d61785072696f7269747946656550657247617300000000000000000000602082015282826149b181617f88565b935060ff16815181106149c6576149c6617e1b565b60200260200101819052506149e28560e0015160600151615675565b82826149ed81617f88565b935060ff1681518110614a0257614a02617e1b565b60200260200101819052505b60008160ff1667ffffffffffffffff811115614a2c57614a2c617877565b604051908082528060200260200182016040528015614a5f57816020015b6060815260200190600190039081614a4a5790505b50905060005b8260ff168160ff161015614ab857838160ff1681518110614a8857614a88617e1b565b6020026020010151828260ff1681518110614aa557614aa5617e1b565b6020908102919091010152600101614a65565b5093505050505b949350505050565b614aee6040518060600160405280600060030b815260200160608152602001606081525090565b60408051808201825260048082527f6261736800000000000000000000000000000000000000000000000000000000602083015291517fd145736c000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d92600091849163d145736c91614b7491869101618012565b600060405180830381865afa158015614b91573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052614bb99190810190617ab5565b90506000614bc78683616204565b90506000846001600160a01b031663f45c1ce7836040518263ffffffff1660e01b8152600401614bf7919061754e565b6000604051808303816000875af1158015614c16573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052614c3e9190810190618059565b805190915060030b15801590614c575750602081015151155b8015614c665750604081015151155b15613c405781600081518110614c7e57614c7e617e1b565b6020026020010151604051602001613299919061810f565b60606000614ccb8560408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600080825260209182015281518083019092528651825280870190820152909150614d029082905b90616359565b15614e5f576000614d7f82614d7984614d73614d458a60408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6040805180820182526000808252602091820152815180830190925282518252918201519181019190915290565b90616380565b906163e2565b604080518082018252600181527f0a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152909150614de3908290616359565b15614e4d57604080518082018252600181527f0a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152614e4a905b8290616467565b90505b614e568161648d565b925050506131c6565b8215614e785784846040516020016132999291906182fb565b50506040805160208101909152600081526131c6565b509392505050565b6000808251602084016000f09392505050565b8160a0015115614eb857505050565b6000614ec58484846164f6565b90506000614ed282614ac7565b602081015181519192509060030b158015614f6e5750604080518082018252600781527f535543434553530000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152614f6e90604080518082018252600080825260209182015281518083019092528451825280850190820152614cfc565b15614f7b57505050505050565b60408201515115614f9b57816040015160405160200161329991906183a2565b806040516020016132999190618400565b60606000614fe18360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600481527f2e736f6c0000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152909150615046905b8290615614565b156150b557604080518082018252600481527f2e736f6c00000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526131c6906150b0908390616a91565b61648d565b604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152615117905b8290616b1b565b6001036151e457604080518082018252600181527f3a000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261517d90614e43565b50604080518082018252600181527f3a00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526131c6906150b0905b8390616467565b604080518082018252600581527f2e6a736f6e000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526152439061503f565b1561537a57604080518082018252600181527f2f000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201819052845180860190955292518452830152906152ab908390616bb5565b9050600081600183516152be9190617785565b815181106152ce576152ce617e1b565b602002602001015190506153716150b06153446040518060400160405280600581526020017f2e6a736f6e00000000000000000000000000000000000000000000000000000081525060408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b60408051808201825260008082526020918201528151808301909252855182528086019082015290616a91565b95945050505050565b82604051602001613299919061846b565b50919050565b606060006153c68360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600481527f2e736f6c00000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201529091506154289061503f565b15615436576131c68161648d565b604080518082018252600181527f3a000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261549590615110565b6001036154ff57604080518082018252600181527f3a00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526131c6906150b0906151dd565b604080518082018252600581527f2e6a736f6e0000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261555e9061503f565b1561537a57604080518082018252600181527f2f000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201819052845180860190955292518452830152906155c6908390616bb5565b90506001815111156156025780600282516155e19190617785565b815181106155f1576155f1617e1b565b602002602001015192505050919050565b5082604051602001613299919061846b565b8051825160009111156156295750600061314c565b8151835160208501516000929161563f916176c2565b6156499190617785565b90508260200151810361566057600191505061314c565b82516020840151819020912014905092915050565b6060600061568283616c5a565b600101905060008167ffffffffffffffff8111156156a2576156a2617877565b6040519080825280601f01601f1916602001820160405280156156cc576020820181803683370190505b5090508181016020015b600019017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a85049450846156d657509392505050565b604081810151815180830183526000808252602091820181905283518085018552835181529282018383015283518085018552600a81527f554e4c4943454e53454400000000000000000000000000000000000000000000818401908152855180870187528381528401929092528451808601909552518452908301526060916157a1905b8290616d3c565b156157e157505060408051808201909152600481527f4e6f6e65000000000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600981527f556e6c6963656e73650000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526158409061579a565b1561588057505060408051808201909152600981527f556e6c6963656e736500000000000000000000000000000000000000000000006020820152919050565b604080518082018252600381527f4d49540000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526158df9061579a565b1561591f57505060408051808201909152600381527f4d495400000000000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f47504c2d322e302d6f6e6c7900000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261597e9061579a565b806159e35750604080518082018252601081527f47504c2d322e302d6f722d6c6174657200000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526159e39061579a565b15615a2357505060408051808201909152600981527f474e552047504c763200000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f47504c2d332e302d6f6e6c79000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152615a829061579a565b80615ae75750604080518082018252601081527f47504c2d332e302d6f722d6c617465720000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152615ae79061579a565b15615b2757505060408051808201909152600981527f474e552047504c763300000000000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4c47504c2d322e312d6f6e6c790000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152615b869061579a565b80615beb5750604080518082018252601181527f4c47504c2d322e312d6f722d6c6174657200000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152615beb9061579a565b15615c2b57505060408051808201909152600c81527f474e55204c47504c76322e3100000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4c47504c2d332e302d6f6e6c790000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152615c8a9061579a565b80615cef5750604080518082018252601181527f4c47504c2d332e302d6f722d6c6174657200000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152615cef9061579a565b15615d2f57505060408051808201909152600a81527f474e55204c47504c7633000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f4253442d322d436c61757365000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152615d8e9061579a565b15615dce57505060408051808201909152600c81527f4253442d322d436c6175736500000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f4253442d332d436c61757365000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152615e2d9061579a565b15615e6d57505060408051808201909152600c81527f4253442d332d436c6175736500000000000000000000000000000000000000006020820152919050565b604080518082018252600781527f4d504c2d322e300000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152615ecc9061579a565b15615f0c57505060408051808201909152600781527f4d504c2d322e30000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600781527f4f534c2d332e300000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152615f6b9061579a565b15615fab57505060408051808201909152600781527f4f534c2d332e30000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600a81527f4170616368652d322e30000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261600a9061579a565b1561604a57505060408051808201909152600a81527f4170616368652d322e30000000000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4147504c2d332e302d6f6e6c7900000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526160a99061579a565b8061610e5750604080518082018252601181527f4147504c2d332e302d6f722d6c617465720000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261610e9061579a565b1561614e57505060408051808201909152600a81527f474e55204147504c7633000000000000000000000000000000000000000000006020820152919050565b604080518082018252600881527f4255534c2d312e31000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526161ad9061579a565b156161ed57505060408051808201909152600781527f42534c20312e31000000000000000000000000000000000000000000000000006020820152919050565b604080840151845191516132999290602001618549565b60608060005b845181101561628f578185828151811061622657616226617e1b565b602002602001015160405160200161623f929190617994565b60405160208183030381529060405291506001855161625e9190617785565b8114616287578160405160200161627591906186b2565b60405160208183030381529060405291505b60010161620a565b5060408051600380825260808201909252600091816020015b60608152602001906001900390816162a857905050905083816000815181106162d3576162d3617e1b565b60200260200101819052506040518060400160405280600281526020017f2d630000000000000000000000000000000000000000000000000000000000008152508160018151811061632757616327617e1b565b6020026020010181905250818160028151811061634657616346617e1b565b6020908102919091010152949350505050565b60208083015183518351928401516000936163779291849190616d50565b14159392505050565b604080518082019091526000808252602082015260006163b28460000151856020015185600001518660200151616e61565b90508360200151816163c49190617785565b845185906163d3908390617785565b90525060208401525090919050565b604080518082019091526000808252602082015281518351101561640757508161314c565b602080830151908401516001911461642e5750815160208481015190840151829020919020145b801561645f57825184518590616445908390617785565b905250825160208501805161645b9083906176c2565b9052505b509192915050565b6040805180820190915260008082526020820152616486838383616f81565b5092915050565b60606000826000015167ffffffffffffffff8111156164ae576164ae617877565b6040519080825280601f01601f1916602001820160405280156164d8576020820181803683370190505b5090506000602082019050616486818560200151866000015161702c565b606060006165026134bf565b6040805160ff808252612000820190925291925060009190816020015b606081526020019060019003908161651f57905050905060006040518060400160405280600381526020017f6e7078000000000000000000000000000000000000000000000000000000000081525082828061657a90617f88565b935060ff168151811061658f5761658f617e1b565b60200260200101819052506040518060400160405280600781526020017f5e312e33322e33000000000000000000000000000000000000000000000000008152506040516020016165e091906186f3565b6040516020818303038152906040528282806165fb90617f88565b935060ff168151811061661057616610617e1b565b60200260200101819052506040518060400160405280600881526020017f76616c696461746500000000000000000000000000000000000000000000000081525082828061665d90617f88565b935060ff168151811061667257616672617e1b565b60200260200101819052508260405160200161668e9190617eb6565b6040516020818303038152906040528282806166a990617f88565b935060ff16815181106166be576166be617e1b565b60200260200101819052506040518060400160405280600a81526020017f2d2d636f6e74726163740000000000000000000000000000000000000000000081525082828061670b90617f88565b935060ff168151811061672057616720617e1b565b602002602001018190525061673587846170a6565b828261674081617f88565b935060ff168151811061675557616755617e1b565b6020908102919091010152855151156168015760408051808201909152600b81527f2d2d7265666572656e6365000000000000000000000000000000000000000000602082015282826167a781617f88565b935060ff16815181106167bc576167bc617e1b565b60200260200101819052506167d58660000151846170a6565b82826167e081617f88565b935060ff16815181106167f5576167f5617e1b565b60200260200101819052505b85608001511561686f5760408051808201909152601881527f2d2d756e73616665536b697053746f72616765436865636b00000000000000006020820152828261684a81617f88565b935060ff168151811061685f5761685f617e1b565b60200260200101819052506168d5565b84156168d55760408051808201909152601281527f2d2d726571756972655265666572656e63650000000000000000000000000000602082015282826168b481617f88565b935060ff16815181106168c9576168c9617e1b565b60200260200101819052505b604086015151156169715760408051808201909152600d81527f2d2d756e73616665416c6c6f77000000000000000000000000000000000000006020820152828261691f81617f88565b935060ff168151811061693457616934617e1b565b6020026020010181905250856040015182828061695090617f88565b935060ff168151811061696557616965617e1b565b60200260200101819052505b8560600151156169db5760408051808201909152601481527f2d2d756e73616665416c6c6f7752656e616d6573000000000000000000000000602082015282826169ba81617f88565b935060ff16815181106169cf576169cf617e1b565b60200260200101819052505b60008160ff1667ffffffffffffffff8111156169f9576169f9617877565b604051908082528060200260200182016040528015616a2c57816020015b6060815260200190600190039081616a175790505b50905060005b8260ff168160ff161015616a8557838160ff1681518110616a5557616a55617e1b565b6020026020010151828260ff1681518110616a7257616a72617e1b565b6020908102919091010152600101616a32565b50979650505050505050565b6040805180820190915260008082526020820152815183511015616ab657508161314c565b81518351602085015160009291616acc916176c2565b616ad69190617785565b60208401519091506001908214616af7575082516020840151819020908220145b8015616b1257835185518690616b0e908390617785565b9052505b50929392505050565b6000808260000151616b3f8560000151866020015186600001518760200151616e61565b616b4991906176c2565b90505b83516020850151616b5d91906176c2565b81116164865781616b6d81618738565b9250508260000151616ba4856020015183616b889190617785565b8651616b949190617785565b8386600001518760200151616e61565b616bae91906176c2565b9050616b4c565b60606000616bc38484616b1b565b616bce9060016176c2565b67ffffffffffffffff811115616be657616be6617877565b604051908082528060200260200182016040528015616c1957816020015b6060815260200190600190039081616c045790505b50905060005b8151811015614e8e57616c356150b08686616467565b828281518110616c4757616c47617e1b565b6020908102919091010152600101616c1f565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310616ca3577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310616ccf576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc100008310616ced57662386f26fc10000830492506010015b6305f5e1008310616d05576305f5e100830492506008015b6127108310616d1957612710830492506004015b60648310616d2b576064830492506002015b600a831061314c5760010192915050565b6000616d4883836170e6565b159392505050565b600080858411616e575760208411616e035760008415616d9b576001616d77866020617785565b616d82906008618752565b616d8d906002618850565b616d979190617785565b1990505b8351811685616daa89896176c2565b616db49190617785565b805190935082165b818114616dee57878411616dd65787945050505050614abf565b83616de08161885c565b945050828451169050616dbc565b616df887856176c2565b945050505050614abf565b838320616e108588617785565b616e1a90876176c2565b91505b858210616e5557848220808203616e4257616e3886846176c2565b9350505050614abf565b616e4d600184617785565b925050616e1d565b505b5092949350505050565b60008381868511616f6c5760208511616f1b5760008515616ead576001616e89876020617785565b616e94906008618752565b616e9f906002618850565b616ea99190617785565b1990505b84518116600087616ebe8b8b6176c2565b616ec89190617785565b855190915083165b828114616f0d57818610616ef557616ee88b8b6176c2565b9650505050505050614abf565b85616eff81618738565b965050838651169050616ed0565b859650505050505050614abf565b508383206000905b616f2d8689617785565b8211616f6a57858320808203616f495783945050505050614abf565b616f546001856176c2565b9350508180616f6290618738565b925050616f23565b505b616f7687876176c2565b979650505050505050565b60408051808201909152600080825260208201526000616fb38560000151866020015186600001518760200151616e61565b602080870180519186019190915251909150616fcf9082617785565b835284516020860151616fe291906176c2565b8103616ff15760008552617023565b83518351616fff91906176c2565b8551869061700e908390617785565b905250835161701d90826176c2565b60208601525b50909392505050565b6020811061706457815183526170436020846176c2565b92506170506020836176c2565b915061705d602082617785565b905061702c565b600019811561709357600161707a836020617785565b61708690610100618850565b6170909190617785565b90505b9151835183169219169190911790915250565b606060006170b48484613592565b80516020808301516040519394506170ce93909101618873565b60405160208183030381529060405291505092915050565b81518151600091908111156170f9575081515b6020808501519084015160005b838110156171b2578251825180821461718257600019602087101561716157600184617133896020617785565b61713d91906176c2565b617148906008618752565b617153906002618850565b61715d9190617785565b1990505b818116838216818103911461717f57975061314c9650505050505050565b50505b61718d6020866176c2565b945061719a6020856176c2565b935050506020816171ab91906176c2565b9050617106565b5084518651613c4091906188cb565b610c9f806188ec83390190565b6112a68061958b83390190565b61140b8061a83183390190565b61155a8061bc3c83390190565b6040518060e0016040528060608152602001606081526020016060815260200160001515815260200160001515815260200160001515815260200161723861723d565b905290565b604051806101000160405280600015158152602001600015158152602001606081526020016000801916815260200160608152602001606081526020016000151581526020016172386040518060800160405280600081526020016000815260200160008152602001600081525090565b602080825282518282018190526000918401906040840190835b818110156172ef5783516001600160a01b03168352602093840193909201916001016172c8565b509095945050505050565b60005b838110156173155781810151838201526020016172fd565b50506000910152565b600081518084526173368160208601602086016172fa565b601f01601f19169290920160200192915050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015617446577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452815180516001600160a01b03168652602090810151604082880181905281519088018190529101906060600582901b88018101919088019060005b8181101561742c577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa08a850301835261741684865161731e565b60209586019590945092909201916001016173dc565b509197505050602094850194929092019150600101617372565b50929695505050505050565b600081518084526020840193506020830160005b828110156174a65781517fffffffff0000000000000000000000000000000000000000000000000000000016865260209586019590910190600101617466565b5093949350505050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015617446577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452815180516040875261751c604088018261731e565b90506020820151915086810360208801526175378183617452565b9650505060209384019391909101906001016174d8565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015617446577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08786030184526175b085835161731e565b94506020938401939190910190600101617576565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015617446577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc087860301845281516001600160a01b03815116865260208101519050604060208701526176466040870182617452565b95505060209384019391909101906001016175ed565b6001600160a01b03851681528360208201526001600160a01b0383166040820152608060608201526000613c40608083018461731e565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8082018082111561314c5761314c617693565b600181811c908216806176e957607f821691505b60208210810361538b577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006020828403121561773457600080fd5b5051919050565b60006020828403121561774d57600080fd5b815180151581146131c657600080fd5b8381526001600160a01b0383166020820152606060408201526000615371606083018461731e565b8181038181111561314c5761314c617693565b6001600160a01b0383168152604060208201526000614abf604083018461731e565b6020815260006131c6602083018461731e565b7f4661696c656420746f206465706c6f7920636f6e74726163742000000000000081526000835161780581601a8501602088016172fa565b7f3a20000000000000000000000000000000000000000000000000000000000000601a91840191820152835161784281601c8401602088016172fa565b01601c01949350505050565b60006020828403121561786057600080fd5b81516001600160a01b03811681146131c657600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040516060810167ffffffffffffffff811182821017156178c9576178c9617877565b60405290565b60008067ffffffffffffffff8411156178ea576178ea617877565b50604051601f19601f85018116603f0116810181811067ffffffffffffffff8211171561791957617919617877565b60405283815290508082840185101561793157600080fd5b614e8e8460208301856172fa565b600082601f83011261795057600080fd5b6131c6838351602085016178cf565b60006020828403121561797157600080fd5b815167ffffffffffffffff81111561798857600080fd5b6131488482850161793f565b600083516179a68184602088016172fa565b8351908301906179ba8183602088016172fa565b01949350505050565b7f4661696c656420746f206465706c6f7920636f6e7472616374200000000000008152600083516179fb81601a8501602088016172fa565b7f207573696e6720636f6e7374727563746f722064617461202200000000000000601a918401918201528351617a388160338401602088016172fa565b7f220000000000000000000000000000000000000000000000000000000000000060339290910191820152603401949350505050565b60408152600b60408201527f464f554e4452595f4f555400000000000000000000000000000000000000000060608201526080602082015260006131c6608083018461731e565b600060208284031215617ac757600080fd5b815167ffffffffffffffff811115617ade57600080fd5b8201601f81018413617aef57600080fd5b613148848251602084016178cf565b60008551617b10818460208a016172fa565b7f2f000000000000000000000000000000000000000000000000000000000000009083019081528551617b4a816001840160208a016172fa565b7f2f00000000000000000000000000000000000000000000000000000000000000600192909101918201528451617b888160028401602089016172fa565b6001818301019150507f2f0000000000000000000000000000000000000000000000000000000000000060018201528351617bca8160028401602088016172fa565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600292909101918201526007019695505050505050565b604081526000617c15604083018461731e565b8281036020840152600481527f2e6173740000000000000000000000000000000000000000000000000000000060208201526040810191505092915050565b7f436f756c64206e6f742066696e642041535420696e2061727469666163742000815260008251617c8c81601f8501602087016172fa565b7f2e205365742060617374203d20747275656020696e20666f756e6472792e746f601f9390910192830152507f6d6c000000000000000000000000000000000000000000000000000000000000603f820152604101919050565b604081526000617cf9604083018461731e565b8281036020840152601181527f2e6173742e6162736f6c7574655061746800000000000000000000000000000060208201526040810191505092915050565b604081526000617d4b604083018461731e565b8281036020840152600c81527f2e6173742e6c6963656e7365000000000000000000000000000000000000000060208201526040810191505092915050565b7f2e6d657461646174612e736f75726365732e5b27000000000000000000000000815260008251617dc28160148501602087016172fa565b7f275d2e6b656363616b32353600000000000000000000000000000000000000006014939091019283015250602001919050565b604081526000617e09604083018561731e565b82810360208401526131c2818561731e565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f2200000000000000000000000000000000000000000000000000000000000000815260008251617e828160018501602087016172fa565b7f22000000000000000000000000000000000000000000000000000000000000006001939091019283015250600201919050565b60008251617ec88184602087016172fa565b7f2f6275696c642d696e666f000000000000000000000000000000000000000000920191825250600b01919050565b7f436f756c64206e6f742066696e64206275696c642d696e666f2066696c65207781527f697468206d61746368696e6720736f7572636520636f6465206861736820666f60208201527f7220636f6e747261637420000000000000000000000000000000000000000000604082015260008251617f7b81604b8501602087016172fa565b91909101604b0192915050565b600060ff821660ff8103617f9e57617f9e617693565b60010192915050565b7f406f70656e7a657070656c696e2f646566656e6465722d6465706c6f792d636c81527f69656e742d636c694000000000000000000000000000000000000000000000006020820152600082516180058160298501602087016172fa565b9190910160290192915050565b60408152601660408201527f4f50454e5a455050454c494e5f424153485f504154480000000000000000000060608201526080602082015260006131c6608083018461731e565b60006020828403121561806b57600080fd5b815167ffffffffffffffff81111561808257600080fd5b82016060818503121561809457600080fd5b61809c6178a6565b81518060030b81146180ad57600080fd5b8152602082015167ffffffffffffffff8111156180c957600080fd5b6180d58682850161793f565b602083015250604082015167ffffffffffffffff8111156180f557600080fd5b6181018682850161793f565b604083015250949350505050565b7f4661696c656420746f2072756e206261736820636f6d6d616e6420776974682081527f220000000000000000000000000000000000000000000000000000000000000060208201526000825161816d8160218501602087016172fa565b7f222e20496620796f7520617265207573696e672057696e646f77732c2073657460219390910192830152507f20746865204f50454e5a455050454c494e5f424153485f5041544820656e766960418201527f726f6e6d656e74207661726961626c6520746f207468652066756c6c7920717560618201527f616c69666965642070617468206f66207468652062617368206578656375746160818201527f626c652e20466f72206578616d706c652c20696620796f75206172652075736960a18201527f6e672047697420666f722057696e646f77732c206164642074686520666f6c6c60c18201527f6f77696e67206c696e6520696e20746865202e656e762066696c65206f66207960e18201527f6f75722070726f6a65637420287573696e6720666f727761726420736c6173686101018201527f6573293a0a4f50454e5a455050454c494e5f424153485f504154483d22433a2f6101218201527f50726f6772616d2046696c65732f4769742f62696e2f6261736822000000000061014182015261015c01919050565b7f4661696c656420746f2066696e64206c696e652077697468207072656669782081527f27000000000000000000000000000000000000000000000000000000000000006020820152600083516183598160218501602088016172fa565b7f2720696e206f75747075743a2000000000000000000000000000000000000000602191840191820152835161839681602e8401602088016172fa565b01602e01949350505050565b7f4661696c656420746f2072756e2075706772616465207361666574792076616c81527f69646174696f6e3a2000000000000000000000000000000000000000000000006020820152600082516180058160298501602087016172fa565b7f55706772616465207361666574792076616c69646174696f6e206661696c656481527f3a0a00000000000000000000000000000000000000000000000000000000000060208201526000825161845e8160228501602087016172fa565b9190910160220192915050565b7f436f6e7472616374206e616d65200000000000000000000000000000000000008152600082516184a381600e8501602087016172fa565b7f206d75737420626520696e2074686520666f726d6174204d79436f6e74726163600e9390910192830152507f742e736f6c3a4d79436f6e7472616374206f72204d79436f6e74726163742e73602e8201527f6f6c206f72206f75742f4d79436f6e74726163742e736f6c2f4d79436f6e7472604e8201527f6163742e6a736f6e000000000000000000000000000000000000000000000000606e820152607601919050565b7f53504458206c6963656e7365206964656e7469666965722000000000000000008152600083516185818160188501602088016172fa565b7f20696e200000000000000000000000000000000000000000000000000000000060189184019182015283516185be81601c8401602088016172fa565b7f20646f6573206e6f74206c6f6f6b206c696b65206120737570706f7274656420601c92909101918201527f6c6963656e736520666f7220626c6f636b206578706c6f726572207665726966603c8201527f69636174696f6e2e205573652074686520606c6963656e73655479706560206f605c8201527f7074696f6e20746f20737065636966792061206c6963656e736520747970652c607c8201527f206f7220736574207468652060736b69704c6963656e73655479706560206f70609c8201527f74696f6e20746f2060747275656020746f20736b69702e00000000000000000060bc82015260d301949350505050565b600082516186c48184602087016172fa565b7f2000000000000000000000000000000000000000000000000000000000000000920191825250600101919050565b7f406f70656e7a657070656c696e2f75706772616465732d636f7265400000000081526000825161872b81601c8501602087016172fa565b91909101601c0192915050565b6000600019820361874b5761874b617693565b5060010190565b808202811582820484141761314c5761314c617693565b6001815b60018411156187a45780850481111561878857618788617693565b600184161561879657908102905b60019390931c92800261876d565b935093915050565b6000826187bb5750600161314c565b816187c85750600061314c565b81600181146187de57600281146187e857618804565b600191505061314c565b60ff8411156187f9576187f9617693565b50506001821b61314c565b5060208310610133831016604e8410600b8410161715618827575081810a61314c565b6188346000198484618769565b806000190482111561884857618848617693565b029392505050565b60006131c683836187ac565b60008161886b5761886b617693565b506000190190565b600083516188858184602088016172fa565b7f3a0000000000000000000000000000000000000000000000000000000000000090830190815283516188bf8160018401602088016172fa565b01600101949350505050565b81810360008312801583831316838312821617156164865761648661769356fe608060405234801561001057600080fd5b50604051610c9f380380610c9f83398101604081905261002f9161010d565b8181600361003d83826101ff565b50600461004a82826101ff565b50505050506102bd565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261007b57600080fd5b81516001600160401b0381111561009457610094610054565b604051601f8201601f19908116603f011681016001600160401b03811182821017156100c2576100c2610054565b6040528181528382016020018510156100da57600080fd5b60005b828110156100f9576020818601810151838301820152016100dd565b506000918101602001919091529392505050565b6000806040838503121561012057600080fd5b82516001600160401b0381111561013657600080fd5b6101428582860161006a565b602085015190935090506001600160401b0381111561016057600080fd5b61016c8582860161006a565b9150509250929050565b600181811c9082168061018a57607f821691505b6020821081036101aa57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156101fa57806000526020600020601f840160051c810160208510156101d75750805b601f840160051c820191505b818110156101f757600081556001016101e3565b50505b505050565b81516001600160401b0381111561021857610218610054565b61022c816102268454610176565b846101b0565b6020601f82116001811461026057600083156102485750848201515b600019600385901b1c1916600184901b1784556101f7565b600084815260208120601f198516915b828110156102905787850151825560209485019460019092019101610270565b50848210156102ae5786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b6109d3806102cc6000396000f3fe608060405234801561001057600080fd5b50600436106100be5760003560e01c806340c10f191161007657806395d89b411161005b57806395d89b4114610183578063a9059cbb1461018b578063dd62ed3e1461019e57600080fd5b806340c10f191461013857806370a082311461014d57600080fd5b806318160ddd116100a757806318160ddd1461010457806323b872dd14610116578063313ce5671461012957600080fd5b806306fdde03146100c3578063095ea7b3146100e1575b600080fd5b6100cb6101e4565b6040516100d891906107bf565b60405180910390f35b6100f46100ef366004610854565b610276565b60405190151581526020016100d8565b6002545b6040519081526020016100d8565b6100f461012436600461087e565b610290565b604051601281526020016100d8565b61014b610146366004610854565b6102b4565b005b61010861015b3660046108bb565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6100cb6102c2565b6100f4610199366004610854565b6102d1565b6101086101ac3660046108dd565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6060600380546101f390610910565b80601f016020809104026020016040519081016040528092919081815260200182805461021f90610910565b801561026c5780601f106102415761010080835404028352916020019161026c565b820191906000526020600020905b81548152906001019060200180831161024f57829003601f168201915b5050505050905090565b6000336102848185856102df565b60019150505b92915050565b60003361029e8582856102f1565b6102a98585856103c5565b506001949350505050565b6102be8282610470565b5050565b6060600480546101f390610910565b6000336102848185856103c5565b6102ec83838360016104cc565b505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146103bf57818110156103b0576040517ffb8f41b200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416600482015260248101829052604481018390526064015b60405180910390fd5b6103bf848484840360006104cc565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8316610415576040517f96c6fd1e000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff8216610465576040517fec442f05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b6102ec838383610614565b73ffffffffffffffffffffffffffffffffffffffff82166104c0576040517fec442f05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b6102be60008383610614565b73ffffffffffffffffffffffffffffffffffffffff841661051c576040517fe602df05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff831661056c576040517f94280d62000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260016020908152604080832093871683529290522082905580156103bf578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161060691815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff831661064c5780600260008282546106419190610963565b909155506106fe9050565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260208190526040902054818110156106d2576040517fe450d38c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8516600482015260248101829052604481018390526064016103a7565b73ffffffffffffffffffffffffffffffffffffffff841660009081526020819052604090209082900390555b73ffffffffffffffffffffffffffffffffffffffff821661072757600280548290039055610753565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090208054820190555b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516107b291815260200190565b60405180910390a3505050565b602081526000825180602084015260005b818110156107ed57602081860181015160408684010152016107d0565b5060006040828501015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011684010191505092915050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461084f57600080fd5b919050565b6000806040838503121561086757600080fd5b6108708361082b565b946020939093013593505050565b60008060006060848603121561089357600080fd5b61089c8461082b565b92506108aa6020850161082b565b929592945050506040919091013590565b6000602082840312156108cd57600080fd5b6108d68261082b565b9392505050565b600080604083850312156108f057600080fd5b6108f98361082b565b91506109076020840161082b565b90509250929050565b600181811c9082168061092457607f821691505b60208210810361095d577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b8082018082111561028a577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea26469706673582212207e804ca539d49155d2b6bc19268ce22f9f857027c75247d69fb0d56a089c93d464736f6c634300081a0033608060405234801561001057600080fd5b506040516112a63803806112a683398101604081905261002f91610110565b604051806040016040528060048152602001635a65746160e01b815250604051806040016040528060048152602001635a45544160e01b815250816003908161007891906101e2565b50600461008582826101e2565b5050506001600160a01b03821615806100a557506001600160a01b038116155b156100c35760405163e6c4247b60e01b815260040160405180910390fd5b600680546001600160a01b039384166001600160a01b031991821617909155600780549290931691161790556102a0565b80516001600160a01b038116811461010b57600080fd5b919050565b6000806040838503121561012357600080fd5b61012c836100f4565b915061013a602084016100f4565b90509250929050565b634e487b7160e01b600052604160045260246000fd5b600181811c9082168061016d57607f821691505b60208210810361018d57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156101dd57806000526020600020601f840160051c810160208510156101ba5750805b601f840160051c820191505b818110156101da57600081556001016101c6565b50505b505050565b81516001600160401b038111156101fb576101fb610143565b61020f816102098454610159565b84610193565b6020601f821160018114610243576000831561022b5750848201515b600019600385901b1c1916600184901b1784556101da565b600084815260208120601f198516915b828110156102735787850151825560209485019460019092019101610253565b50848210156102915786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b610ff7806102af6000396000f3fe608060405234801561001057600080fd5b506004361061011b5760003560e01c806342966c68116100b257806379cc679011610081578063a9059cbb11610066578063a9059cbb1461028e578063bff9662a146102a1578063dd62ed3e146102c157600080fd5b806379cc67901461027357806395d89b411461028657600080fd5b806342966c68146102025780635b1125911461021557806370a0823114610235578063779e3b631461026b57600080fd5b80631e458bee116100ee5780631e458bee1461018857806323b872dd1461019b578063313ce567146101ae578063328a01d0146101bd57600080fd5b806306fdde0314610120578063095ea7b31461013e57806315d57fd41461016157806318160ddd14610176575b600080fd5b610128610307565b6040516101359190610d97565b60405180910390f35b61015161014c366004610e2c565b610399565b6040519015158152602001610135565b61017461016f366004610e56565b6103b3565b005b6002545b604051908152602001610135565b610174610196366004610e89565b61057e565b6101516101a9366004610ebc565b610631565b60405160128152602001610135565b6007546101dd9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610135565b610174610210366004610ef9565b610655565b6006546101dd9073ffffffffffffffffffffffffffffffffffffffff1681565b61017a610243366004610f12565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b610174610662565b610174610281366004610e2c565b610786565b610128610837565b61015161029c366004610e2c565b610846565b6005546101dd9073ffffffffffffffffffffffffffffffffffffffff1681565b61017a6102cf366004610e56565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b60606003805461031690610f34565b80601f016020809104026020016040519081016040528092919081815260200182805461034290610f34565b801561038f5780601f106103645761010080835404028352916020019161038f565b820191906000526020600020905b81548152906001019060200180831161037257829003601f168201915b5050505050905090565b6000336103a7818585610854565b60019150505b92915050565b60075473ffffffffffffffffffffffffffffffffffffffff1633148015906103f3575060065473ffffffffffffffffffffffffffffffffffffffff163314155b15610431576040517fcdfcef970000000000000000000000000000000000000000000000000000000081523360048201526024015b60405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff82161580610468575073ffffffffffffffffffffffffffffffffffffffff8116155b1561049f576040517fe6c4247b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6006805473ffffffffffffffffffffffffffffffffffffffff8481167fffffffffffffffffffffffff0000000000000000000000000000000000000000928316811790935560058054918516919092161790556040805133815260208101929092527fe79965b5c67dcfb2cf5fe152715e4a7256cee62a3d5dd8484fd8a8539eb8beff910160405180910390a16040805133815273ffffffffffffffffffffffffffffffffffffffff831660208201527f1b9352454524a57a51f24f67dc66d898f616922cd1f7a12d73570ece12b1975c910160405180910390a15050565b60055473ffffffffffffffffffffffffffffffffffffffff1633146105d1576040517f3fe32fba000000000000000000000000000000000000000000000000000000008152336004820152602401610428565b6105db8383610866565b808373ffffffffffffffffffffffffffffffffffffffff167fc263b302aec62d29105026245f19e16f8e0137066ccd4a8bd941f716bd4096bb8460405161062491815260200190565b60405180910390a3505050565b60003361063f8582856108c6565b61064a858585610995565b506001949350505050565b61065f3382610a40565b50565b60075473ffffffffffffffffffffffffffffffffffffffff1633146106b5576040517fe700765e000000000000000000000000000000000000000000000000000000008152336004820152602401610428565b60065473ffffffffffffffffffffffffffffffffffffffff16610704576040517fe6c4247b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600654600780547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff90921691821790556040805133815260208101929092527f5104c9abdc7d111c2aeb4ce890ac70274a4be2ee83f46a62551be5e6ebc82dd0910160405180910390a1565b60055473ffffffffffffffffffffffffffffffffffffffff1633146107d9576040517f3fe32fba000000000000000000000000000000000000000000000000000000008152336004820152602401610428565b6107e38282610a9c565b8173ffffffffffffffffffffffffffffffffffffffff167f919f7e2092ffcc9d09f599be18d8152860b0c054df788a33bc549cdd9d0f15b18260405161082b91815260200190565b60405180910390a25050565b60606004805461031690610f34565b6000336103a7818585610995565b6108618383836001610ab1565b505050565b73ffffffffffffffffffffffffffffffffffffffff82166108b6576040517fec442f0500000000000000000000000000000000000000000000000000000000815260006004820152602401610428565b6108c260008383610bf9565b5050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811461098f5781811015610980576040517ffb8f41b200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff841660048201526024810182905260448101839052606401610428565b61098f84848484036000610ab1565b50505050565b73ffffffffffffffffffffffffffffffffffffffff83166109e5576040517f96c6fd1e00000000000000000000000000000000000000000000000000000000815260006004820152602401610428565b73ffffffffffffffffffffffffffffffffffffffff8216610a35576040517fec442f0500000000000000000000000000000000000000000000000000000000815260006004820152602401610428565b610861838383610bf9565b73ffffffffffffffffffffffffffffffffffffffff8216610a90576040517f96c6fd1e00000000000000000000000000000000000000000000000000000000815260006004820152602401610428565b6108c282600083610bf9565b610aa78233836108c6565b6108c28282610a40565b73ffffffffffffffffffffffffffffffffffffffff8416610b01576040517fe602df0500000000000000000000000000000000000000000000000000000000815260006004820152602401610428565b73ffffffffffffffffffffffffffffffffffffffff8316610b51576040517f94280d6200000000000000000000000000000000000000000000000000000000815260006004820152602401610428565b73ffffffffffffffffffffffffffffffffffffffff8085166000908152600160209081526040808320938716835292905220829055801561098f578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051610beb91815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff8316610c31578060026000828254610c269190610f87565b90915550610ce39050565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205481811015610cb7576040517fe450d38c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff851660048201526024810182905260448101839052606401610428565b73ffffffffffffffffffffffffffffffffffffffff841660009081526020819052604090209082900390555b73ffffffffffffffffffffffffffffffffffffffff8216610d0c57600280548290039055610d38565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090208054820190555b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161062491815260200190565b602081526000825180602084015260005b81811015610dc55760208186018101516040868401015201610da8565b5060006040828501015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011684010191505092915050565b803573ffffffffffffffffffffffffffffffffffffffff81168114610e2757600080fd5b919050565b60008060408385031215610e3f57600080fd5b610e4883610e03565b946020939093013593505050565b60008060408385031215610e6957600080fd5b610e7283610e03565b9150610e8060208401610e03565b90509250929050565b600080600060608486031215610e9e57600080fd5b610ea784610e03565b95602085013595506040909401359392505050565b600080600060608486031215610ed157600080fd5b610eda84610e03565b9250610ee860208501610e03565b929592945050506040919091013590565b600060208284031215610f0b57600080fd5b5035919050565b600060208284031215610f2457600080fd5b610f2d82610e03565b9392505050565b600181811c90821680610f4857607f821691505b602082108103610f81577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b808201808211156103ad577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea2646970667358221220085f01204b33dc17013c78c74fbca32a3da2c0b384ce7c8878c889551af28c6164736f6c634300081a003360a060405234801561001057600080fd5b5060405161140b38038061140b83398101604081905261002f916101b3565b60016000556002805460ff191690556001600160a01b038316158061005b57506001600160a01b038216155b8061006d57506001600160a01b038116155b1561008b5760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b0383166080526100a3600082610102565b506100ce7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a82610102565b506100f97f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e483610102565b505050506101f6565b60008281526001602090815260408083206001600160a01b038516845290915281205460ff1661018d5760008381526001602081815260408084206001600160a01b0387168086529252808420805460ff19169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a4506001610191565b5060005b92915050565b80516001600160a01b03811681146101ae57600080fd5b919050565b6000806000606084860312156101c857600080fd5b6101d184610197565b92506101df60208501610197565b91506101ed60408501610197565b90509250925092565b6080516111de61022d60003960008181610132015281816103c5015281816104270152818161065801526106ba01526111de6000f3fe608060405234801561001057600080fd5b50600436106101005760003560e01c80638456cb5911610097578063c8a0236211610066578063c8a0236214610276578063d547741f14610289578063d9caed121461029c578063e63ab1e9146102af57600080fd5b80638456cb59146101f957806385f438c11461020157806391d1485414610228578063a217fddf1461026e57600080fd5b80632f2ff15d116100d35780632f2ff15d146101c057806336568abe146101d35780633f4ba83a146101e65780635c975abb146101ee57600080fd5b806301ffc9a714610105578063116191b61461012d57806321fc65f214610179578063248a9ca31461018e575b600080fd5b610118610113366004610f04565b6102d6565b60405190151581526020015b60405180910390f35b6101547f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610124565b61018c610187366004610f6f565b61036f565b005b6101b261019c36600461100c565b6000908152600160208190526040909120015490565b604051908152602001610124565b61018c6101ce366004611025565b610511565b61018c6101e1366004611025565b61053d565b61018c61059b565b60025460ff16610118565b61018c6105d0565b6101b27f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b610118610236366004611025565b600091825260016020908152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b6101b2600081565b61018c610284366004610f6f565b610602565b61018c610297366004611025565b61078a565b61018c6102aa366004611051565b6107b0565b6101b27f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061036957507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b61037761087d565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e46103a1816108c0565b6103a96108ca565b6103ea73ffffffffffffffffffffffffffffffffffffffff87167f000000000000000000000000000000000000000000000000000000000000000086610909565b6040517f5131ab5900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690635131ab599061046490899089908990899089906004016110d7565b600060405180830381600087803b15801561047e57600080fd5b505af1158015610492573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167f85b5be9cf454e05e0bddf49315178102227c312078eefa3c00294fb4d912ae4e8686866040516104f793929190611134565b60405180910390a35061050a6001600055565b5050505050565b6000828152600160208190526040909120015461052d816108c0565b6105378383610996565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8116331461058c576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6105968282610a61565b505050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a6105c5816108c0565b6105cd610b20565b50565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a6105fa816108c0565b6105cd610b9d565b61060a61087d565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e4610634816108c0565b61063c6108ca565b61067d73ffffffffffffffffffffffffffffffffffffffff87167f000000000000000000000000000000000000000000000000000000000000000086610909565b6040517fb8969bd400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063b8969bd4906106f790899089908990899089906004016110d7565b600060405180830381600087803b15801561071157600080fd5b505af1158015610725573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fb9d4efa96044e5f5e03e696fa9ae2ff66911cc27e8a637c3627c75bc5b2241c88686866040516104f793929190611134565b600082815260016020819052604090912001546107a6816108c0565b6105378383610a61565b6107b861087d565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e46107e2816108c0565b6107ea6108ca565b61080b73ffffffffffffffffffffffffffffffffffffffff85168484610909565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f9b1bfa7fa9ee420a16e124f794c35ac9f90472acc99140eb2f6447c714cad8eb8460405161086a91815260200190565b60405180910390a3506105966001600055565b6002600054036108b9576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b6105cd8133610bf8565b60025460ff1615610907576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6040805173ffffffffffffffffffffffffffffffffffffffff8416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb00000000000000000000000000000000000000000000000000000000179052610596908490610c89565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff16610a5957600083815260016020818152604080842073ffffffffffffffffffffffffffffffffffffffff8716808652925280842080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a4506001610369565b506000610369565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff1615610a5957600083815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8616808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a4506001610369565b610b28610d1f565b600280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b610ba56108ca565b600280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258610b733390565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16610c85576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82166004820152602481018390526044015b60405180910390fd5b5050565b6000610cab73ffffffffffffffffffffffffffffffffffffffff841683610d5b565b90508051600014158015610cd0575080806020019051810190610cce9190611157565b155b15610596576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84166004820152602401610c7c565b60025460ff16610907576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6060610d6983836000610d70565b9392505050565b606081471015610dae576040517fcd786059000000000000000000000000000000000000000000000000000000008152306004820152602401610c7c565b6000808573ffffffffffffffffffffffffffffffffffffffff168486604051610dd79190611179565b60006040518083038185875af1925050503d8060008114610e14576040519150601f19603f3d011682016040523d82523d6000602084013e610e19565b606091505b5091509150610e29868383610e33565b9695505050505050565b606082610e4857610e4382610ec2565b610d69565b8151158015610e6c575073ffffffffffffffffffffffffffffffffffffffff84163b155b15610ebb576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85166004820152602401610c7c565b5080610d69565b805115610ed25780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060208284031215610f1657600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610d6957600080fd5b803573ffffffffffffffffffffffffffffffffffffffff81168114610f6a57600080fd5b919050565b600080600080600060808688031215610f8757600080fd5b610f9086610f46565b9450610f9e60208701610f46565b935060408601359250606086013567ffffffffffffffff811115610fc157600080fd5b8601601f81018813610fd257600080fd5b803567ffffffffffffffff811115610fe957600080fd5b886020828401011115610ffb57600080fd5b959894975092955050506020019190565b60006020828403121561101e57600080fd5b5035919050565b6000806040838503121561103857600080fd5b8235915061104860208401610f46565b90509250929050565b60008060006060848603121561106657600080fd5b61106f84610f46565b925061107d60208501610f46565b929592945050506040919091013590565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff8616815273ffffffffffffffffffffffffffffffffffffffff8516602082015283604082015260806060820152600061112960808301848661108e565b979650505050505050565b83815260406020820152600061114e60408301848661108e565b95945050505050565b60006020828403121561116957600080fd5b81518015158114610d6957600080fd5b6000825160005b8181101561119a5760208186018101518583015201611180565b50600092019182525091905056fea264697066735822122069d5c5c3cb2752c876b6a2138d8d9b66bac6bd1b48a1fe98417eea81faf02a3e64736f6c634300081a003360c060405260001960035534801561001657600080fd5b5060405161155a38038061155a83398101604081905261003591610220565b60016000819055805460ff19169055838383836001600160a01b038416158061006557506001600160a01b038316155b8061007757506001600160a01b038216155b8061008957506001600160a01b038116155b156100a75760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b03808516608052831660a0526100c5600082610154565b506100f07f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e483610154565b5061011b7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb83610154565b506101467f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a82610154565b505050505050505050610274565b60008281526002602090815260408083206001600160a01b038516845290915281205460ff166101fa5760008381526002602090815260408083206001600160a01b03861684529091529020805460ff191660011790556101b23390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45060016101fe565b5060005b92915050565b80516001600160a01b038116811461021b57600080fd5b919050565b6000806000806080858703121561023657600080fd5b61023f85610204565b935061024d60208601610204565b925061025b60408601610204565b915061026960608601610204565b905092959194509250565b60805160a0516112826102d86000396000818161021d01528181610531015281816108240152818161097b01528181610ad00152610bf20152600081816101d1015281816104a1015281816105040152818161079401526107f701526112826000f3fe608060405234801561001057600080fd5b50600436106101775760003560e01c80635e3e9fef116100d857806391d148541161008c578063d547741f11610066578063d547741f14610386578063d5abeb0114610399578063e63ab1e9146103a257600080fd5b806391d1485414610311578063a217fddf14610357578063a783c7891461035f57600080fd5b8063743e0c9b116100bd578063743e0c9b146102cf5780638456cb59146102e257806385f438c1146102ea57600080fd5b80635e3e9fef146102a95780636f8b44b0146102bc57600080fd5b8063248a9ca31161012f57806336568abe1161011457806336568abe146102835780633f4ba83a146102965780635c975abb1461029e57600080fd5b8063248a9ca31461023f5780632f2ff15d1461027057600080fd5b8063106e629011610160578063106e6290146101b9578063116191b6146101cc57806321e093b11461021857600080fd5b806301ffc9a71461017c57806302d5c899146101a4575b600080fd5b61018f61018a366004610fb4565b6103c9565b60405190151581526020015b60405180910390f35b6101b76101b2366004611026565b610462565b005b6101b76101c73660046110b8565b6105f7565b6101f37f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161019b565b6101f37f000000000000000000000000000000000000000000000000000000000000000081565b61026261024d3660046110eb565b60009081526002602052604090206001015490565b60405190815260200161019b565b6101b761027e366004611104565b61069c565b6101b7610291366004611104565b6106c7565b6101b7610720565b60015460ff1661018f565b6101b76102b7366004611026565b610755565b6101b76102ca3660046110eb565b6108d0565b6101b76102dd3660046110eb565b61093e565b6101b76109e8565b6102627f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b61018f61031f366004611104565b600091825260026020908152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b610262600081565b6102627f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb81565b6101b7610394366004611104565b610a1a565b61026260035481565b6102627f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061045c57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b61046a610a3f565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461049481610a82565b61049c610a8c565b6104c77f00000000000000000000000000000000000000000000000000000000000000008684610acb565b6040517fb8969bd400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063b8969bd490610561907f0000000000000000000000000000000000000000000000000000000000000000908a908a908a908a90600401611179565b600060405180830381600087803b15801561057b57600080fd5b505af115801561058f573d6000803e3d6000fd5b505050508573ffffffffffffffffffffffffffffffffffffffff167fba96f26bdda53eb8c8ba39045dfb4ff39753fbc7a6edcf250a88e75e78d102fe8686866040516105dd939291906111d6565b60405180910390a2506105f06001600055565b5050505050565b6105ff610a3f565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461062981610a82565b610631610a8c565b61063c848484610acb565b8373ffffffffffffffffffffffffffffffffffffffff167f884edad9ce6fa2440d8a54cc123490eb96d2768479d49ff9c7366125a94243648460405161068491815260200190565b60405180910390a2506106976001600055565b505050565b6000828152600260205260409020600101546106b781610a82565b6106c18383610c53565b50505050565b73ffffffffffffffffffffffffffffffffffffffff81163314610716576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6106978282610d53565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61074a81610a82565b610752610e12565b50565b61075d610a3f565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461078781610a82565b61078f610a8c565b6107ba7f00000000000000000000000000000000000000000000000000000000000000008684610acb565b6040517f5131ab5900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690635131ab5990610854907f0000000000000000000000000000000000000000000000000000000000000000908a908a908a908a90600401611179565b600060405180830381600087803b15801561086e57600080fd5b505af1158015610882573d6000803e3d6000fd5b505050508573ffffffffffffffffffffffffffffffffffffffff167f7772f56296d3a5202974a45c61c9188d844ab4d6eeb18c851e4b8d5384ca6ced8686866040516105dd939291906111d6565b7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb6108fa81610a82565b610902610a8c565b60038290556040518281527f7810bd47de260c3e9ee10061cf438099dd12256c79485f12f94dbccc981e806c9060200160405180910390a15050565b610946610a8c565b6040517f79cc6790000000000000000000000000000000000000000000000000000000008152336004820152602481018290527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16906379cc679090604401600060405180830381600087803b1580156109d457600080fd5b505af11580156105f0573d6000803e3d6000fd5b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610a1281610a82565b610752610e8f565b600082815260026020526040902060010154610a3581610a82565b6106c18383610d53565b600260005403610a7b576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b6107528133610ee8565b60015460ff1615610ac9576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6003547f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b39573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b5d91906111f9565b610b679084611212565b1115610b9f576040517fc30436e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f1e458bee00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff848116600483015260248201849052604482018390527f00000000000000000000000000000000000000000000000000000000000000001690631e458bee90606401600060405180830381600087803b158015610c3657600080fd5b505af1158015610c4a573d6000803e3d6000fd5b50505050505050565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff16610d4b57600083815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff86168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055610ce93390565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a450600161045c565b50600061045c565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff1615610d4b57600083815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8616808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a450600161045c565b610e1a610f78565b600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b610e97610a8c565b600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016811790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25833610e65565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16610f74576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff821660048201526024810183905260440160405180910390fd5b5050565b60015460ff16610ac9576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060208284031215610fc657600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610ff657600080fd5b9392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461102157600080fd5b919050565b60008060008060006080868803121561103e57600080fd5b61104786610ffd565b945060208601359350604086013567ffffffffffffffff81111561106a57600080fd5b8601601f8101881361107b57600080fd5b803567ffffffffffffffff81111561109257600080fd5b8860208284010111156110a457600080fd5b959894975060200195606001359392505050565b6000806000606084860312156110cd57600080fd5b6110d684610ffd565b95602085013595506040909401359392505050565b6000602082840312156110fd57600080fd5b5035919050565b6000806040838503121561111757600080fd5b8235915061112760208401610ffd565b90509250929050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff8616815273ffffffffffffffffffffffffffffffffffffffff851660208201528360408201526080606082015260006111cb608083018486611130565b979650505050505050565b8381526040602082015260006111f0604083018486611130565b95945050505050565b60006020828403121561120b57600080fd5b5051919050565b8082018082111561045c577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea2646970667358221220f784eb6e1655c2988d3f762737188cfee07a61da1d5b8456cc4f4e55cb339cfb64736f6c634300081a0033a26469706673582212207f6795811c41279eb5ab92e452c28741337b2a4d744fb6e0f654b6d362b09b1b64736f6c634300081a0033", } // GatewayEVMInboundTestABI is the input ABI used to generate the binding from. @@ -718,6 +718,27 @@ func (_GatewayEVMInboundTest *GatewayEVMInboundTestTransactorSession) TestDeposi return _GatewayEVMInboundTest.Contract.TestDepositEthToTssWithPayload(&_GatewayEVMInboundTest.TransactOpts) } +// TestDepositZetaToConnector is a paid mutator transaction binding the contract method 0xe306a978. +// +// Solidity: function testDepositZetaToConnector() returns() +func (_GatewayEVMInboundTest *GatewayEVMInboundTestTransactor) TestDepositZetaToConnector(opts *bind.TransactOpts) (*types.Transaction, error) { + return _GatewayEVMInboundTest.contract.Transact(opts, "testDepositZetaToConnector") +} + +// TestDepositZetaToConnector is a paid mutator transaction binding the contract method 0xe306a978. +// +// Solidity: function testDepositZetaToConnector() returns() +func (_GatewayEVMInboundTest *GatewayEVMInboundTestSession) TestDepositZetaToConnector() (*types.Transaction, error) { + return _GatewayEVMInboundTest.Contract.TestDepositZetaToConnector(&_GatewayEVMInboundTest.TransactOpts) +} + +// TestDepositZetaToConnector is a paid mutator transaction binding the contract method 0xe306a978. +// +// Solidity: function testDepositZetaToConnector() returns() +func (_GatewayEVMInboundTest *GatewayEVMInboundTestTransactorSession) TestDepositZetaToConnector() (*types.Transaction, error) { + return _GatewayEVMInboundTest.Contract.TestDepositZetaToConnector(&_GatewayEVMInboundTest.TransactOpts) +} + // TestFailDepositERC20ToCustodyIfAmountIs0 is a paid mutator transaction binding the contract method 0xf96c02df. // // Solidity: function testFailDepositERC20ToCustodyIfAmountIs0() returns() @@ -739,6 +760,27 @@ func (_GatewayEVMInboundTest *GatewayEVMInboundTestTransactorSession) TestFailDe return _GatewayEVMInboundTest.Contract.TestFailDepositERC20ToCustodyIfAmountIs0(&_GatewayEVMInboundTest.TransactOpts) } +// TestFailDepositERC20ToCustodyIfReceiverIsZeroAddress is a paid mutator transaction binding the contract method 0x7478fda0. +// +// Solidity: function testFailDepositERC20ToCustodyIfReceiverIsZeroAddress() returns() +func (_GatewayEVMInboundTest *GatewayEVMInboundTestTransactor) TestFailDepositERC20ToCustodyIfReceiverIsZeroAddress(opts *bind.TransactOpts) (*types.Transaction, error) { + return _GatewayEVMInboundTest.contract.Transact(opts, "testFailDepositERC20ToCustodyIfReceiverIsZeroAddress") +} + +// TestFailDepositERC20ToCustodyIfReceiverIsZeroAddress is a paid mutator transaction binding the contract method 0x7478fda0. +// +// Solidity: function testFailDepositERC20ToCustodyIfReceiverIsZeroAddress() returns() +func (_GatewayEVMInboundTest *GatewayEVMInboundTestSession) TestFailDepositERC20ToCustodyIfReceiverIsZeroAddress() (*types.Transaction, error) { + return _GatewayEVMInboundTest.Contract.TestFailDepositERC20ToCustodyIfReceiverIsZeroAddress(&_GatewayEVMInboundTest.TransactOpts) +} + +// TestFailDepositERC20ToCustodyIfReceiverIsZeroAddress is a paid mutator transaction binding the contract method 0x7478fda0. +// +// Solidity: function testFailDepositERC20ToCustodyIfReceiverIsZeroAddress() returns() +func (_GatewayEVMInboundTest *GatewayEVMInboundTestTransactorSession) TestFailDepositERC20ToCustodyIfReceiverIsZeroAddress() (*types.Transaction, error) { + return _GatewayEVMInboundTest.Contract.TestFailDepositERC20ToCustodyIfReceiverIsZeroAddress(&_GatewayEVMInboundTest.TransactOpts) +} + // TestFailDepositERC20ToCustodyWithPayloadIfAmountIs0 is a paid mutator transaction binding the contract method 0xbb93f11e. // // Solidity: function testFailDepositERC20ToCustodyWithPayloadIfAmountIs0() returns() @@ -760,6 +802,27 @@ func (_GatewayEVMInboundTest *GatewayEVMInboundTestTransactorSession) TestFailDe return _GatewayEVMInboundTest.Contract.TestFailDepositERC20ToCustodyWithPayloadIfAmountIs0(&_GatewayEVMInboundTest.TransactOpts) } +// TestFailDepositERC20ToCustodyWithPayloadIfReceiverIsZeroAddress is a paid mutator transaction binding the contract method 0x05a898e2. +// +// Solidity: function testFailDepositERC20ToCustodyWithPayloadIfReceiverIsZeroAddress() returns() +func (_GatewayEVMInboundTest *GatewayEVMInboundTestTransactor) TestFailDepositERC20ToCustodyWithPayloadIfReceiverIsZeroAddress(opts *bind.TransactOpts) (*types.Transaction, error) { + return _GatewayEVMInboundTest.contract.Transact(opts, "testFailDepositERC20ToCustodyWithPayloadIfReceiverIsZeroAddress") +} + +// TestFailDepositERC20ToCustodyWithPayloadIfReceiverIsZeroAddress is a paid mutator transaction binding the contract method 0x05a898e2. +// +// Solidity: function testFailDepositERC20ToCustodyWithPayloadIfReceiverIsZeroAddress() returns() +func (_GatewayEVMInboundTest *GatewayEVMInboundTestSession) TestFailDepositERC20ToCustodyWithPayloadIfReceiverIsZeroAddress() (*types.Transaction, error) { + return _GatewayEVMInboundTest.Contract.TestFailDepositERC20ToCustodyWithPayloadIfReceiverIsZeroAddress(&_GatewayEVMInboundTest.TransactOpts) +} + +// TestFailDepositERC20ToCustodyWithPayloadIfReceiverIsZeroAddress is a paid mutator transaction binding the contract method 0x05a898e2. +// +// Solidity: function testFailDepositERC20ToCustodyWithPayloadIfReceiverIsZeroAddress() returns() +func (_GatewayEVMInboundTest *GatewayEVMInboundTestTransactorSession) TestFailDepositERC20ToCustodyWithPayloadIfReceiverIsZeroAddress() (*types.Transaction, error) { + return _GatewayEVMInboundTest.Contract.TestFailDepositERC20ToCustodyWithPayloadIfReceiverIsZeroAddress(&_GatewayEVMInboundTest.TransactOpts) +} + // TestFailDepositEthToTssIfAmountIs0 is a paid mutator transaction binding the contract method 0x06978ca3. // // Solidity: function testFailDepositEthToTssIfAmountIs0() returns() @@ -781,6 +844,27 @@ func (_GatewayEVMInboundTest *GatewayEVMInboundTestTransactorSession) TestFailDe return _GatewayEVMInboundTest.Contract.TestFailDepositEthToTssIfAmountIs0(&_GatewayEVMInboundTest.TransactOpts) } +// TestFailDepositEthToTssIfReceiverIsZeroAddress is a paid mutator transaction binding the contract method 0x1806a9a5. +// +// Solidity: function testFailDepositEthToTssIfReceiverIsZeroAddress() returns() +func (_GatewayEVMInboundTest *GatewayEVMInboundTestTransactor) TestFailDepositEthToTssIfReceiverIsZeroAddress(opts *bind.TransactOpts) (*types.Transaction, error) { + return _GatewayEVMInboundTest.contract.Transact(opts, "testFailDepositEthToTssIfReceiverIsZeroAddress") +} + +// TestFailDepositEthToTssIfReceiverIsZeroAddress is a paid mutator transaction binding the contract method 0x1806a9a5. +// +// Solidity: function testFailDepositEthToTssIfReceiverIsZeroAddress() returns() +func (_GatewayEVMInboundTest *GatewayEVMInboundTestSession) TestFailDepositEthToTssIfReceiverIsZeroAddress() (*types.Transaction, error) { + return _GatewayEVMInboundTest.Contract.TestFailDepositEthToTssIfReceiverIsZeroAddress(&_GatewayEVMInboundTest.TransactOpts) +} + +// TestFailDepositEthToTssIfReceiverIsZeroAddress is a paid mutator transaction binding the contract method 0x1806a9a5. +// +// Solidity: function testFailDepositEthToTssIfReceiverIsZeroAddress() returns() +func (_GatewayEVMInboundTest *GatewayEVMInboundTestTransactorSession) TestFailDepositEthToTssIfReceiverIsZeroAddress() (*types.Transaction, error) { + return _GatewayEVMInboundTest.Contract.TestFailDepositEthToTssIfReceiverIsZeroAddress(&_GatewayEVMInboundTest.TransactOpts) +} + // TestFailDepositEthToTssWithPayloadIfAmountIs0 is a paid mutator transaction binding the contract method 0xc13d738f. // // Solidity: function testFailDepositEthToTssWithPayloadIfAmountIs0() returns() @@ -802,6 +886,27 @@ func (_GatewayEVMInboundTest *GatewayEVMInboundTestTransactorSession) TestFailDe return _GatewayEVMInboundTest.Contract.TestFailDepositEthToTssWithPayloadIfAmountIs0(&_GatewayEVMInboundTest.TransactOpts) } +// TestFailDepositEthToTssWithPayloadIfReceiverIsZeroAddress is a paid mutator transaction binding the contract method 0xd896e261. +// +// Solidity: function testFailDepositEthToTssWithPayloadIfReceiverIsZeroAddress() returns() +func (_GatewayEVMInboundTest *GatewayEVMInboundTestTransactor) TestFailDepositEthToTssWithPayloadIfReceiverIsZeroAddress(opts *bind.TransactOpts) (*types.Transaction, error) { + return _GatewayEVMInboundTest.contract.Transact(opts, "testFailDepositEthToTssWithPayloadIfReceiverIsZeroAddress") +} + +// TestFailDepositEthToTssWithPayloadIfReceiverIsZeroAddress is a paid mutator transaction binding the contract method 0xd896e261. +// +// Solidity: function testFailDepositEthToTssWithPayloadIfReceiverIsZeroAddress() returns() +func (_GatewayEVMInboundTest *GatewayEVMInboundTestSession) TestFailDepositEthToTssWithPayloadIfReceiverIsZeroAddress() (*types.Transaction, error) { + return _GatewayEVMInboundTest.Contract.TestFailDepositEthToTssWithPayloadIfReceiverIsZeroAddress(&_GatewayEVMInboundTest.TransactOpts) +} + +// TestFailDepositEthToTssWithPayloadIfReceiverIsZeroAddress is a paid mutator transaction binding the contract method 0xd896e261. +// +// Solidity: function testFailDepositEthToTssWithPayloadIfReceiverIsZeroAddress() returns() +func (_GatewayEVMInboundTest *GatewayEVMInboundTestTransactorSession) TestFailDepositEthToTssWithPayloadIfReceiverIsZeroAddress() (*types.Transaction, error) { + return _GatewayEVMInboundTest.Contract.TestFailDepositEthToTssWithPayloadIfReceiverIsZeroAddress(&_GatewayEVMInboundTest.TransactOpts) +} + // GatewayEVMInboundTestCallIterator is returned from FilterCall and is used to iterate over the raw logs and unpacked data for Call events raised by the GatewayEVMInboundTest contract. type GatewayEVMInboundTestCallIterator struct { Event *GatewayEVMInboundTestCall // Event containing the contract specifics and raw log diff --git a/v2/pkg/gatewayevm.t.sol/gatewayevmtest.go b/v2/pkg/gatewayevm.t.sol/gatewayevmtest.go index 02e781f0..b8d92975 100644 --- a/v2/pkg/gatewayevm.t.sol/gatewayevmtest.go +++ b/v2/pkg/gatewayevm.t.sol/gatewayevmtest.go @@ -49,8 +49,8 @@ type StdInvariantFuzzSelector struct { // GatewayEVMTestMetaData contains all meta data concerning the GatewayEVMTest contract. var GatewayEVMTestMetaData = &bind.MetaData{ - ABI: "[{\"type\":\"function\",\"name\":\"ASSET_HANDLER_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"IS_TEST\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"PAUSER_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"TSS_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"WITHDRAWER_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeArtifacts\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedArtifacts_\",\"type\":\"string[]\",\"internalType\":\"string[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeContracts\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedContracts_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeSelectors\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedSelectors_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzSelector[]\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"selectors\",\"type\":\"bytes4[]\",\"internalType\":\"bytes4[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeSenders\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedSenders_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"failed\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"setUp\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"targetArtifactSelectors\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedArtifactSelectors_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzArtifactSelector[]\",\"components\":[{\"name\":\"artifact\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"selectors\",\"type\":\"bytes4[]\",\"internalType\":\"bytes4[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetArtifacts\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedArtifacts_\",\"type\":\"string[]\",\"internalType\":\"string[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetContracts\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedContracts_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetInterfaces\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedInterfaces_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzInterface[]\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"artifacts\",\"type\":\"string[]\",\"internalType\":\"string[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetSelectors\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedSelectors_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzSelector[]\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"selectors\",\"type\":\"bytes4[]\",\"internalType\":\"bytes4[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetSenders\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedSenders_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"testExecuteRevert\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testExecuteRevertFailsIfSenderIsNotTSS\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testExecuteWithERC20FailsIfNotCustoryOrConnector\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testForwardCallToReceiveERC20PartialThroughCustody\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testForwardCallToReceiveERC20PartialThroughCustodyFailsIfAmountIs0\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testForwardCallToReceiveERC20PartialThroughCustodyFailsIfSenderIsNotWithdrawer\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testForwardCallToReceiveERC20ThroughCustody\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testForwardCallToReceiveERC20ThroughCustodyFailsIfAmountIs0\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testForwardCallToReceiveERC20ThroughCustodyFailsIfSenderIsNotWithdrawer\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testForwardCallToReceiveNoParams\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testForwardCallToReceiveNoParamsThroughCustody\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testForwardCallToReceiveNoParamsTogglePause\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testForwardCallToReceiveNonPayable\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testForwardCallToReceiveNonPayableFailsIfSenderIsNotTSS\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testForwardCallToReceivePayable\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testRevertWithERC20FailsIfNotCustoryOrConnector\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawAndRevertThroughCustody\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawAndRevertThroughCustodyFailsIfAmountIs0\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawAndRevertThroughCustodyFailsIfSenderIsNotWithdrawer\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawThroughCustody\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawThroughCustodyFailsIfSenderIsNotWithdrawer\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"event\",\"name\":\"Call\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"receiver\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Deposit\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"receiver\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"asset\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Executed\",\"inputs\":[{\"name\":\"destination\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ExecutedWithERC20\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedERC20\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"token\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"destination\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedNoParams\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedNonPayable\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"strs\",\"type\":\"string[]\",\"indexed\":false,\"internalType\":\"string[]\"},{\"name\":\"nums\",\"type\":\"uint256[]\",\"indexed\":false,\"internalType\":\"uint256[]\"},{\"name\":\"flag\",\"type\":\"bool\",\"indexed\":false,\"internalType\":\"bool\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedPayable\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"str\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"num\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"flag\",\"type\":\"bool\",\"indexed\":false,\"internalType\":\"bool\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedRevert\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Reverted\",\"inputs\":[{\"name\":\"destination\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RevertedWithERC20\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Withdraw\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"WithdrawAndCall\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"WithdrawAndRevert\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log\",\"inputs\":[{\"name\":\"\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_address\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_array\",\"inputs\":[{\"name\":\"val\",\"type\":\"uint256[]\",\"indexed\":false,\"internalType\":\"uint256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_array\",\"inputs\":[{\"name\":\"val\",\"type\":\"int256[]\",\"indexed\":false,\"internalType\":\"int256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_array\",\"inputs\":[{\"name\":\"val\",\"type\":\"address[]\",\"indexed\":false,\"internalType\":\"address[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_bytes\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_bytes32\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_int\",\"inputs\":[{\"name\":\"\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_address\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_array\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"uint256[]\",\"indexed\":false,\"internalType\":\"uint256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_array\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"int256[]\",\"indexed\":false,\"internalType\":\"int256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_array\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"address[]\",\"indexed\":false,\"internalType\":\"address[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_bytes\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_bytes32\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_decimal_int\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"},{\"name\":\"decimals\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_decimal_uint\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"decimals\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_int\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_string\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_uint\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_string\",\"inputs\":[{\"name\":\"\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_uint\",\"inputs\":[{\"name\":\"\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"logs\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"AccessControlUnauthorizedAccount\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"neededRole\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"type\":\"error\",\"name\":\"ApprovalFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"CustodyInitialized\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"DepositFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"EnforcedPause\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ExecutionFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientERC20Amount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientETHAmount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZeroAddress\",\"inputs\":[]}]", - Bin: "0x6080604052600c8054600160ff199182168117909255601f80549091169091179055348015602c57600080fd5b5061ff458061003c6000396000f3fe608060405234801561001057600080fd5b50600436106102925760003560e01c8063a3f9d0e011610160578063dd51e82f116100d8578063fa18c09b1161008c578063fb176c1211610071578063fb176c121461049a578063fe7bdbb2146104a2578063fe8e5f1b146104aa57600080fd5b8063fa18c09b14610485578063fa7626d41461048d57600080fd5b8063e63ab1e9116100bd578063e63ab1e91461044e578063eb1ce7f914610475578063f68bd1c01461047d57600080fd5b8063dd51e82f1461043e578063e20c9f711461044657600080fd5b8063b5508aa91161012f578063c9350b7f11610114578063c9350b7f14610426578063cbd57e2f1461042e578063cebad2a61461043657600080fd5b8063b5508aa914610406578063ba414fa61461040e57600080fd5b8063a3f9d0e0146103c7578063a4943deb146103cf578063a783c789146103d7578063b0464fdc146103fe57600080fd5b80633f7286f41161020e57806371149c94116101c257806385226c81116101a757806385226c811461037657806385f438c11461038b578063916a17c6146103b257600080fd5b806371149c94146103665780637d7f772a1461036e57600080fd5b80635d62c860116101f35780635d62c8601461031457806366d9a9a0146103495780636a6218541461035e57600080fd5b80633f7286f41461030457806344671b941461030c57600080fd5b80632206eb65116102655780633e5e3c231161024a5780633e5e3c23146102ec5780633e73ecb4146102f45780633ee92923146102fc57600080fd5b80632206eb65146102cf5780632ade3880146102d757600080fd5b80630a9254e4146102975780630eee72a9146102a15780631779672f146102a95780631ed7831c146102b1575b600080fd5b61029f6104b2565b005b61029f610d62565b61029f610fdd565b6102b9611132565b6040516102c6919061a168565b60405180910390f35b61029f611194565b6102df6113d8565b6040516102c6919061a204565b6102b961151a565b61029f61157a565b61029f611adb565b6102b9611b95565b61029f611bf5565b61033b7f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b981565b6040519081526020016102c6565b610351611f78565b6040516102c6919061a36a565b61029f6120e5565b61029f61219c565b61029f612992565b61037e612ccb565b6040516102c6919061a464565b61033b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b6103ba612d9b565b6040516102c6919061a477565b61029f612e81565b61029f61345f565b61033b7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb81565b6103ba61366f565b61037e613755565b610416613825565b60405190151581526020016102c6565b61029f6138f9565b61029f613b3d565b61029f61409e565b61029f6142d7565b6102b9614a8d565b61033b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b61029f614aed565b61029f614c12565b61029f614fc0565b601f546104169060ff1681565b61029f6152e6565b61029f61593a565b61029f615d68565b602680547fffffffffffffffffffffffff00000000000000000000000000000000000000009081163017909155602780548216611234179055602880549091166156781790556040516105049061a07b565b60408082526004908201527f746573740000000000000000000000000000000000000000000000000000000060608201526080602082018190526003908201527f54544b000000000000000000000000000000000000000000000000000000000060a082015260c001604051809103906000f080158015610589573d6000803e3d6000fd5b50602480547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03929092169190911790556040516105ce9061a07b565b604080825260049082018190527f7a6574610000000000000000000000000000000000000000000000000000000060608301526080602083018190528201527f5a4554410000000000000000000000000000000000000000000000000000000060a082015260c001604051809103906000f080158015610652573d6000803e3d6000fd5b50602580547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03928316908117909155604080518082018252600e81527f4761746577617945564d2e736f6c00000000000000000000000000000000000060208201526028546026549251908516602482015260448101939093529216606482015261072c919060840160408051601f198184030181529190526020810180516001600160e01b03167fc0c53b8b00000000000000000000000000000000000000000000000000000000179052615f6e565b601f80547fffffffffffffffffffffff0000000000000000000000000000000000000000ff166101006001600160a01b0393841681029190911791829055602080549190920483167fffffffffffffffffffffffff000000000000000000000000000000000000000090911681179091556028546026546040519293918216929116906107b89061a088565b6001600160a01b03938416815291831660208301529091166040820152606001604051809103906000f0801580156107f4573d6000803e3d6000fd5b50602280547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03928316179055602054602554602854602654604051938516949283169391831692169061084f9061a095565b6001600160a01b039485168152928416602084015290831660408301529091166060820152608001604051809103906000f080158015610893573d6000803e3d6000fd5b50602380547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03929092169190911790556040516108d89061a0a2565b604051809103906000f0801580156108f4573d6000803e3d6000fd5b50602180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039283161790556028546040517fc88a5e6d00000000000000000000000000000000000000000000000000000000815291166004820152670de0b6b3a76400006024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c88a5e6d90604401600060405180830381600087803b1580156109a057600080fd5b505af11580156109b4573d6000803e3d6000fd5b50506026546040517f06447d560000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506306447d569150602401600060405180830381600087803b158015610a2a57600080fd5b505af1158015610a3e573d6000803e3d6000fd5b50506020546022546040517fae7a3a6f0000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201529116925063ae7a3a6f9150602401600060405180830381600087803b158015610aa457600080fd5b505af1158015610ab8573d6000803e3d6000fd5b50506020546023546040517f10188aef0000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152911692506310188aef9150602401600060405180830381600087803b158015610b1e57600080fd5b505af1158015610b32573d6000803e3d6000fd5b505050507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b03166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610b9457600080fd5b505af1158015610ba8573d6000803e3d6000fd5b5050602480546026546040517f40c10f190000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620f4240938101939093521692506340c10f199150604401600060405180830381600087803b158015610c1957600080fd5b505af1158015610c2d573d6000803e3d6000fd5b5050602480546022546040517fa9059cbb0000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201526207a1209381019390935216925063a9059cbb91506044016020604051808303816000875af1158015610ca3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cc7919061a50e565b506028546040517fc88a5e6d0000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152670de0b6b3a76400006024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c88a5e6d90604401600060405180830381600087803b158015610d4857600080fd5b505af1158015610d5c573d6000803e3d6000fd5b50505050565b60248054602754604051620186a09381018490526001600160a01b0392831660448201529116606482015260009060840160408051601f198184030181529181526020820180516001600160e01b03167fc513169100000000000000000000000000000000000000000000000000000000179052602654905163ca669fa760e01b81526001600160a01b039091166004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa7906024015b600060405180830381600087803b158015610e3257600080fd5b505af1158015610e46573d6000803e3d6000fd5b5050602654604080516001600160a01b0390921660248301527f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e460448084019190915281518084039091018152606490920181526020820180516001600160e01b03167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb39250610f1c919060040161a530565b600060405180830381600087803b158015610f3657600080fd5b505af1158015610f4a573d6000803e3d6000fd5b50506022546024546021546040517f21fc65f20000000000000000000000000000000000000000000000000000000081526001600160a01b0393841695506321fc65f29450610fa79392831692909116908790879060040161a543565b600060405180830381600087803b158015610fc157600080fd5b505af1158015610fd5573d6000803e3d6000fd5b505050505050565b6024805460275460405160009381018490526001600160a01b03928316604482015291166064820152819060840160408051601f198184030181529181526020820180516001600160e01b03167f357fc5a200000000000000000000000000000000000000000000000000000000179052602854905163ca669fa760e01b81526001600160a01b039091166004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa7906024015b600060405180830381600087803b1580156110aa57600080fd5b505af11580156110be573d6000803e3d6000fd5b50506040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527f951e19ed000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401610f1c565b6060601680548060200260200160405190810160405280929190818152602001828054801561118a57602002820191906000526020600020905b81546001600160a01b0316815260019091019060200180831161116c575b5050505050905090565b60248054602754604051620186a09381018490526001600160a01b0392831660448201529116606482015260009060840160408051601f198184030181529181526020820180516001600160e01b03167f357fc5a200000000000000000000000000000000000000000000000000000000179052602654905163ca669fa760e01b81526001600160a01b039091166004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561126357600080fd5b505af1158015611277573d6000803e3d6000fd5b5050602654604080516001600160a01b0390921660248301527f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b960448084019190915281518084039091018152606490920181526020820180516001600160e01b03167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb3925061134d919060040161a530565b600060405180830381600087803b15801561136757600080fd5b505af115801561137b573d6000803e3d6000fd5b50506020546024546027546040517fb8969bd40000000000000000000000000000000000000000000000000000000081526001600160a01b03938416955063b8969bd49450610fa79392831692909116908790879060040161a543565b6060601e805480602002602001604051908101604052809291908181526020016000905b8282101561151157600084815260208082206040805180820182526002870290920180546001600160a01b03168352600181018054835181870281018701909452808452939591948681019491929084015b828210156114fa57838290600052602060002001805461146d9061a57a565b80601f01602080910402602001604051908101604052809291908181526020018280546114999061a57a565b80156114e65780601f106114bb576101008083540402835291602001916114e6565b820191906000526020600020905b8154815290600101906020018083116114c957829003601f168201915b50505050508152602001906001019061144e565b5050505081525050815260200190600101906113fc565b50505050905090565b6060601880548060200260200160405190810160405280929190818152602001828054801561118a576020028201919060005260206000209081546001600160a01b0316815260019091019060200180831161116c575050505050905090565b602480546027546040516370a0823160e01b81526001600160a01b039182166004820152620186a09360009392909216916370a082319101602060405180830381865afa1580156115cf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115f3919061a5c7565b9050611600816000615f8d565b602480546022546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa158015611650573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611674919061a5c7565b6027546040516001600160a01b0390911660248201526044810185905290915060009060640160408051601f198184030181529181526020820180516001600160e01b03167fa9059cbb0000000000000000000000000000000000000000000000000000000017905260245490517ff30c7ba3000000000000000000000000000000000000000000000000000000008152919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f30c7ba391611742916001600160a01b039190911690600090869060040161a5e0565b600060405180830381600087803b15801561175c57600080fd5b505af1158015611770573d6000803e3d6000fd5b50506022546040516381bad6f360e01b8152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b1580156117e957600080fd5b505af11580156117fd573d6000803e3d6000fd5b50506027546024546040518881526001600160a01b039283169450911691507f9b1bfa7fa9ee420a16e124f794c35ac9f90472acc99140eb2f6447c714cad8eb9060200160405180910390a360285460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156118a257600080fd5b505af11580156118b6573d6000803e3d6000fd5b5050602254602480546027546040517fd9caed120000000000000000000000000000000000000000000000000000000081526001600160a01b0392831660048201529082169281019290925260448201899052909116925063d9caed129150606401600060405180830381600087803b15801561193257600080fd5b505af1158015611946573d6000803e3d6000fd5b5050602480546027546040516370a0823160e01b81526001600160a01b03918216600482015260009550911692506370a082319101602060405180830381865afa158015611998573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119bc919061a5c7565b90506119c88186615f8d565b602480546022546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa158015611a18573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a3c919061a5c7565b9050611a5181611a4c888761a637565b615f8d565b602480546020546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa158015611aa1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ac5919061a5c7565b9050611ad2816000615f8d565b50505050505050565b60248054602754604051620186a09381018490526001600160a01b0392831660448201529116606482015260009060840160408051601f198184030181529181526020820180516001600160e01b03167f357fc5a200000000000000000000000000000000000000000000000000000000179052602654905163ca669fa760e01b81526001600160a01b039091166004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401610e18565b6060601780548060200260200160405190810160405280929190818152602001828054801561118a576020028201919060005260206000209081546001600160a01b0316815260019091019060200180831161116c575050505050905090565b6040805160048082526024820183526020820180516001600160e01b03167f6ed701690000000000000000000000000000000000000000000000000000000017905260215492517ff30c7ba30000000000000000000000000000000000000000000000000000000081529192737109709ecfa91a80626ff3989d68f67f5b1dd12d9263f30c7ba392611c96926001600160a01b03169160009187910161a5e0565b600060405180830381600087803b158015611cb057600080fd5b505af1158015611cc4573d6000803e3d6000fd5b50506021546040516381bad6f360e01b8152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b158015611d3d57600080fd5b505af1158015611d51573d6000803e3d6000fd5b5050602080546040516001600160a01b0390911681527fbcaadb46b82a48af60b608f58959ae6b8310d1b0a0d094c2e9ec3208ed39f2a0935001905060405180910390a16020546040516381bad6f360e01b8152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b158015611e0a57600080fd5b505af1158015611e1e573d6000803e3d6000fd5b50506021546040516001600160a01b0390911692507fcaf938de11c367272220bfd1d2baa99ca46665e7bc4d85f00adb51b90fe1fa9f9150611e6490600090859061a64a565b60405180910390a260285460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015611ec557600080fd5b505af1158015611ed9573d6000803e3d6000fd5b50506020546021546040517f1cff79cd0000000000000000000000000000000000000000000000000000000081526001600160a01b039283169450631cff79cd9350611f2d9290911690859060040161a663565b6000604051808303816000875af1158015611f4c573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611f74919081019061a76d565b5050565b6060601b805480602002602001604051908101604052809291908181526020016000905b828210156115115783829060005260206000209060020201604051806040016040529081600082018054611fcf9061a57a565b80601f0160208091040260200160405190810160405280929190818152602001828054611ffb9061a57a565b80156120485780601f1061201d57610100808354040283529160200191612048565b820191906000526020600020905b81548152906001019060200180831161202b57829003601f168201915b50505050508152602001600182018054806020026020016040519081016040528092919081815260200182805480156120cd57602002820191906000526020600020906000905b82829054906101000a900460e01b6001600160e01b0319168152602001906004019060208260030104928301926001038202915080841161208f5790505b50505050508152505081526020019060010190611f9c565b6024805460275460405160009381018490526001600160a01b03928316604482015291166064820152819060840160408051601f198184030181529181526020820180516001600160e01b03167fc513169100000000000000000000000000000000000000000000000000000000179052602854905163ca669fa760e01b81526001600160a01b039091166004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401611090565b6040517f68656c6c6f0000000000000000000000000000000000000000000000000000006020820152620186a09060009060250160408051808303601f1901815290829052602480546021546370a0823160e01b85526001600160a01b0390811660048601529294506000939216916370a082319101602060405180830381865afa15801561222f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612253919061a5c7565b9050612260816000615f8d565b602480546022546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa1580156122b0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122d4919061a5c7565b6020546040516001600160a01b0390911660248201526044810186905290915060009060640160408051601f198184030181529181526020820180516001600160e01b03167fa9059cbb0000000000000000000000000000000000000000000000000000000017905260245490517ff30c7ba3000000000000000000000000000000000000000000000000000000008152919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f30c7ba3916123a2916001600160a01b039190911690600090869060040161a5e0565b600060405180830381600087803b1580156123bc57600080fd5b505af11580156123d0573d6000803e3d6000fd5b50506021546040516381bad6f360e01b8152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b15801561244957600080fd5b505af115801561245d573d6000803e3d6000fd5b50506020546040517f0d3f65f00e631663aa85c96330b5c7a83bb29af3630c0063776f985edc3037aa93506124a092506001600160a01b0390911690879061a663565b60405180910390a16020546040516381bad6f360e01b8152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b15801561251d57600080fd5b505af1158015612531573d6000803e3d6000fd5b50506021546024546040516001600160a01b039283169450911691507f723fc7be2448075379e4fdf1e6bf5fead954d2668d2da05dcb44ccfec4beeda79061257c908990899061a64a565b60405180910390a36022546040516381bad6f360e01b8152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b1580156125f957600080fd5b505af115801561260d573d6000803e3d6000fd5b50506021546024546040516001600160a01b039283169450911691507fb9d4efa96044e5f5e03e696fa9ae2ff66911cc27e8a637c3627c75bc5b2241c890612658908990899061a64a565b60405180910390a360285460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156126b957600080fd5b505af11580156126cd573d6000803e3d6000fd5b50506022546024546021546040517fc8a023620000000000000000000000000000000000000000000000000000000081526001600160a01b03938416955063c8a02362945061272a9392831692909116908a908a9060040161a543565b600060405180830381600087803b15801561274457600080fd5b505af1158015612758573d6000803e3d6000fd5b5050602480546021546040516370a0823160e01b81526001600160a01b03918216600482015260009550911692506370a0823191015b602060405180830381865afa1580156127ab573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127cf919061a5c7565b90506127db8187615f8d565b602480546022546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa15801561282b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061284f919061a5c7565b905061285f81611a4c898761a637565b602480546020546021546040517fdd62ed3e0000000000000000000000000000000000000000000000000000000081526001600160a01b0392831660048201529082169381019390935260009291169063dd62ed3e90604401602060405180830381865afa1580156128d5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128f9919061a5c7565b9050612906816000615f8d565b602480546020546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa158015612956573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061297a919061a5c7565b9050612987816000615f8d565b505050505050505050565b604080516001808252818301909252600091816020015b60608152602001906001900390816129a95790505090506040518060400160405280600f81526020017f48656c6c6f2c20466f756e64727921000000000000000000000000000000000081525081600081518110612a0957612a0961a7a2565b6020908102919091010152604080516001808252818301909252600091816020016020820280368337019050509050602a81600081518110612a4d57612a4d61a7a2565b6020908102919091010152604051600190600090612a739085908590859060240161a803565b60408051601f198184030181529181526020820180516001600160e01b03167ff05b6abf00000000000000000000000000000000000000000000000000000000179052602654905163ca669fa760e01b81526001600160a01b039091166004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015612b1157600080fd5b505af1158015612b25573d6000803e3d6000fd5b5050602654604080516001600160a01b0390921660248301527f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb60448084019190915281518084039091018152606490920181526020820180516001600160e01b03167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb39250612bfb919060040161a530565b600060405180830381600087803b158015612c1557600080fd5b505af1158015612c29573d6000803e3d6000fd5b50506020546021546040517f1cff79cd0000000000000000000000000000000000000000000000000000000081526001600160a01b039283169450631cff79cd9350612c7d9290911690859060040161a663565b6000604051808303816000875af1158015612c9c573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052612cc4919081019061a76d565b5050505050565b6060601a805480602002602001604051908101604052809291908181526020016000905b82821015611511578382906000526020600020018054612d0e9061a57a565b80601f0160208091040260200160405190810160405280929190818152602001828054612d3a9061a57a565b8015612d875780601f10612d5c57610100808354040283529160200191612d87565b820191906000526020600020905b815481529060010190602001808311612d6a57829003601f168201915b505050505081526020019060010190612cef565b6060601d805480602002602001604051908101604052809291908181526020016000905b828210156115115760008481526020908190206040805180820182526002860290920180546001600160a01b03168352600181018054835181870281018701909452808452939491938583019392830182828015612e6957602002820191906000526020600020906000905b82829054906101000a900460e01b6001600160e01b03191681526020019060040190602082600301049283019260010382029150808411612e2b5790505b50505050508152505081526020019060010190612dbf565b604080516004808252602480830184526020830180516001600160e01b03167f6ed7016900000000000000000000000000000000000000000000000000000000179052805460275494516370a0823160e01b81526001600160a01b0395861693810193909352620186a0946000939116916370a082319101602060405180830381865afa158015612f16573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f3a919061a5c7565b9050612f47816000615f8d565b602480546022546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa158015612f97573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612fbb919061a5c7565b6020546040516001600160a01b0390911660248201526044810186905290915060009060640160408051601f198184030181529181526020820180516001600160e01b03167fa9059cbb0000000000000000000000000000000000000000000000000000000017905260245490517ff30c7ba3000000000000000000000000000000000000000000000000000000008152919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f30c7ba391613089916001600160a01b039190911690600090869060040161a5e0565b600060405180830381600087803b1580156130a357600080fd5b505af11580156130b7573d6000803e3d6000fd5b50506021546040516381bad6f360e01b8152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b15801561313057600080fd5b505af1158015613144573d6000803e3d6000fd5b5050602080546040516001600160a01b0390911681527fbcaadb46b82a48af60b608f58959ae6b8310d1b0a0d094c2e9ec3208ed39f2a0935001905060405180910390a16022546040516381bad6f360e01b8152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b1580156131fd57600080fd5b505af1158015613211573d6000803e3d6000fd5b50506021546024546040516001600160a01b039283169450911691507f85b5be9cf454e05e0bddf49315178102227c312078eefa3c00294fb4d912ae4e9061325c908990899061a64a565b60405180910390a360285460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156132bd57600080fd5b505af11580156132d1573d6000803e3d6000fd5b50506022546024546021546040517f21fc65f20000000000000000000000000000000000000000000000000000000081526001600160a01b0393841695506321fc65f2945061332e9392831692909116908a908a9060040161a543565b600060405180830381600087803b15801561334857600080fd5b505af115801561335c573d6000803e3d6000fd5b5050602480546027546040516370a0823160e01b81526001600160a01b03918216600482015260009550911692506370a082319101602060405180830381865afa1580156133ae573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133d2919061a5c7565b90506133df816000615f8d565b602480546022546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa15801561342f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613453919061a5c7565b905061285f8185615f8d565b6040517f68656c6c6f0000000000000000000000000000000000000000000000000000006020820152620186a09060009060250160408051808303601f190181529082905260265463ca669fa760e01b83526001600160a01b031660048301529150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156134fa57600080fd5b505af115801561350e573d6000803e3d6000fd5b5050602654604080516001600160a01b0390921660248301527f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e460448084019190915281518084039091018152606490920181526020820180516001600160e01b03167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb392506135e4919060040161a530565b600060405180830381600087803b1580156135fe57600080fd5b505af1158015613612573d6000803e3d6000fd5b50506022546024546021546040517fc8a023620000000000000000000000000000000000000000000000000000000081526001600160a01b03938416955063c8a023629450610fa79392831692909116908790879060040161a543565b6060601c805480602002602001604051908101604052809291908181526020016000905b828210156115115760008481526020908190206040805180820182526002860290920180546001600160a01b0316835260018101805483518187028101870190945280845293949193858301939283018282801561373d57602002820191906000526020600020906000905b82829054906101000a900460e01b6001600160e01b031916815260200190600401906020826003010492830192600103820291508084116136ff5790505b50505050508152505081526020019060010190613693565b60606019805480602002602001604051908101604052809291908181526020016000905b828210156115115783829060005260206000200180546137989061a57a565b80601f01602080910402602001604051908101604052809291908181526020018280546137c49061a57a565b80156138115780601f106137e657610100808354040283529160200191613811565b820191906000526020600020905b8154815290600101906020018083116137f457829003601f168201915b505050505081526020019060010190613779565b60085460009060ff161561383d575060085460ff1690565b6040517f667f9d70000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d600482018190527f6661696c65640000000000000000000000000000000000000000000000000000602483015260009163667f9d7090604401602060405180830381865afa1580156138ce573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138f2919061a5c7565b1415905090565b60248054602754604051620186a09381018490526001600160a01b0392831660448201529116606482015260009060840160408051601f198184030181529181526020820180516001600160e01b03167f357fc5a200000000000000000000000000000000000000000000000000000000179052602654905163ca669fa760e01b81526001600160a01b039091166004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156139c857600080fd5b505af11580156139dc573d6000803e3d6000fd5b5050602654604080516001600160a01b0390921660248301527f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b960448084019190915281518084039091018152606490920181526020820180516001600160e01b03167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb39250613ab2919060040161a530565b600060405180830381600087803b158015613acc57600080fd5b505af1158015613ae0573d6000803e3d6000fd5b50506020546024546027546040517f5131ab590000000000000000000000000000000000000000000000000000000081526001600160a01b039384169550635131ab599450610fa79392831692909116908790879060040161a543565b60248054602754604051620186a09381018490526001600160a01b0392831660448201529116606482015260009060840160408051601f198184030181529181526020820180516001600160e01b03167f357fc5a2000000000000000000000000000000000000000000000000000000001790526024805460275492516370a0823160e01b81526001600160a01b0393841660048201529394506000939216916370a082319101602060405180830381865afa158015613c01573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613c25919061a5c7565b9050613c32816000615f8d565b602480546022546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa158015613c82573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613ca6919061a5c7565b6020546040516001600160a01b0390911660248201526044810186905290915060009060640160408051601f198184030181529181526020820180516001600160e01b03167fa9059cbb0000000000000000000000000000000000000000000000000000000017905260245490517ff30c7ba3000000000000000000000000000000000000000000000000000000008152919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f30c7ba391613d74916001600160a01b039190911690600090869060040161a5e0565b600060405180830381600087803b158015613d8e57600080fd5b505af1158015613da2573d6000803e3d6000fd5b50506021546040516381bad6f360e01b8152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b158015613e1b57600080fd5b505af1158015613e2f573d6000803e3d6000fd5b505060208054602454602754604080516001600160a01b0394851681529485018c905291831684830152919091166060830152517f2b58128f24a9f59127cc5b5430d70542b22220f2d9adaa86e442b816ab98af609350908190036080019150a16022546040516381bad6f360e01b8152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b158015613f0557600080fd5b505af1158015613f19573d6000803e3d6000fd5b50506021546024546040516001600160a01b039283169450911691507f85b5be9cf454e05e0bddf49315178102227c312078eefa3c00294fb4d912ae4e90613f64908990899061a64a565b60405180910390a360285460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015613fc557600080fd5b505af1158015613fd9573d6000803e3d6000fd5b50506022546024546021546040517f21fc65f20000000000000000000000000000000000000000000000000000000081526001600160a01b0393841695506321fc65f294506140369392831692909116908a908a9060040161a543565b600060405180830381600087803b15801561405057600080fd5b505af1158015614064573d6000803e3d6000fd5b5050602480546027546040516370a0823160e01b81526001600160a01b03918216600482015260009550911692506370a08231910161278e565b6040517f68656c6c6f0000000000000000000000000000000000000000000000000000006020820152670de0b6b3a76400009060009060250160408051808303601f190181529082905260265463ca669fa760e01b83526001600160a01b031660048301529150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561413e57600080fd5b505af1158015614152573d6000803e3d6000fd5b5050602654604080516001600160a01b0390921660248301527f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb60448084019190915281518084039091018152606490920181526020820180516001600160e01b03167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb39250614228919060040161a530565b600060405180830381600087803b15801561424257600080fd5b505af1158015614256573d6000803e3d6000fd5b50506020546021546040517f35c018db0000000000000000000000000000000000000000000000000000000081526001600160a01b0392831694506335c018db935086926142aa921690869060040161a663565b6000604051808303818588803b1580156142c357600080fd5b505af1158015611ad2573d6000803e3d6000fd5b60285460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561433057600080fd5b505af1158015614344573d6000803e3d6000fd5b5050602854604080516001600160a01b0390921660248301527f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a60448084019190915281518084039091018152606490920181526020820180516001600160e01b03167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb3925061441a919060040161a530565b600060405180830381600087803b15801561443457600080fd5b505af1158015614448573d6000803e3d6000fd5b50505050602060009054906101000a90046001600160a01b03166001600160a01b0316638456cb596040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561449c57600080fd5b505af11580156144b0573d6000803e3d6000fd5b505060285460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b15801561450d57600080fd5b505af1158015614521573d6000803e3d6000fd5b5050602854604080516001600160a01b0390921660248301527f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a60448084019190915281518084039091018152606490920181526020820180516001600160e01b03167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb392506145f7919060040161a530565b600060405180830381600087803b15801561461157600080fd5b505af1158015614625573d6000803e3d6000fd5b50505050602060009054906101000a90046001600160a01b03166001600160a01b0316633f4ba83a6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561467957600080fd5b505af115801561468d573d6000803e3d6000fd5b505060265460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b1580156146ea57600080fd5b505af11580156146fe573d6000803e3d6000fd5b50505050602060009054906101000a90046001600160a01b03166001600160a01b0316638456cb596040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561475257600080fd5b505af1158015614766573d6000803e3d6000fd5b5050604080516004808252602480830184526020830180516001600160e01b03167f6ed701690000000000000000000000000000000000000000000000000000000017905292517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fd93c06650000000000000000000000000000000000000000000000000000000091810191909152909350737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09101600060405180830381600087803b15801561483357600080fd5b505af1158015614847573d6000803e3d6000fd5b505060285460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b1580156148a457600080fd5b505af11580156148b8573d6000803e3d6000fd5b50506020546021546040517f1cff79cd0000000000000000000000000000000000000000000000000000000081526001600160a01b039283169450631cff79cd935061490c9290911690859060040161a663565b6000604051808303816000875af115801561492b573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052614953919081019061a76d565b5060265460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156149ad57600080fd5b505af11580156149c1573d6000803e3d6000fd5b50505050602060009054906101000a90046001600160a01b03166001600160a01b0316633f4ba83a6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015614a1557600080fd5b505af1158015614a29573d6000803e3d6000fd5b50506021546040517ff30c7ba3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f30c7ba39250611c96916001600160a01b031690600090869060040161a5e0565b6060601580548060200260200160405190810160405280929190818152602001828054801561118a576020028201919060005260206000209081546001600160a01b0316815260019091019060200180831161116c575050505050905090565b600080604051602001614b23907f68656c6c6f000000000000000000000000000000000000000000000000000000815260050190565b60408051808303601f190181529082905260285463ca669fa760e01b83526001600160a01b031660048301529150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015614b8a57600080fd5b505af1158015614b9e573d6000803e3d6000fd5b50506040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527f951e19ed000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e091506024016135e4565b604080516001808252818301909252600091816020015b6060815260200190600190039081614c295790505090506040518060400160405280600f81526020017f48656c6c6f2c20466f756e64727921000000000000000000000000000000000081525081600081518110614c8957614c8961a7a2565b6020908102919091010152604080516001808252818301909252600091816020016020820280368337019050509050602a81600081518110614ccd57614ccd61a7a2565b6020908102919091010152604051600190600090614cf39085908590859060240161a803565b60408051601f198184030181529181526020820180516001600160e01b03167ff05b6abf0000000000000000000000000000000000000000000000000000000017905260215490517ff30c7ba3000000000000000000000000000000000000000000000000000000008152919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f30c7ba391614d9b916001600160a01b039190911690600090869060040161a5e0565b600060405180830381600087803b158015614db557600080fd5b505af1158015614dc9573d6000803e3d6000fd5b50506021546040516381bad6f360e01b8152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b158015614e4257600080fd5b505af1158015614e56573d6000803e3d6000fd5b50506020546040517f74a53cd528a921fca7dbdee62f86819051d3cc98f214951f4238e8843f20b1469350614e9d92506001600160a01b039091169087908790879061a83b565b60405180910390a16020546040516381bad6f360e01b8152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b158015614f1a57600080fd5b505af1158015614f2e573d6000803e3d6000fd5b50506021546040516001600160a01b0390911692507fcaf938de11c367272220bfd1d2baa99ca46665e7bc4d85f00adb51b90fe1fa9f9150614f7490600090859061a64a565b60405180910390a260285460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401612bfb565b604080517f68656c6c6f0000000000000000000000000000000000000000000000000000006020820152815160058183030181526025909101909152602154670de0b6b3a764000091906001600160a01b03163161501f816000615f8d565b6021546040516381bad6f360e01b8152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b15801561509457600080fd5b505af11580156150a8573d6000803e3d6000fd5b50506020546040517f0d3f65f00e631663aa85c96330b5c7a83bb29af3630c0063776f985edc3037aa93506150eb92506001600160a01b0390911690859061a663565b60405180910390a16020546040516381bad6f360e01b8152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b15801561516857600080fd5b505af115801561517c573d6000803e3d6000fd5b50506021546040516001600160a01b0390911692507fd5d7616b1678354a0dea9d7e57e6a090bff5babe9f8d6381fdbad16e89ba311c91506151c990670de0b6b3a764000090869061a64a565b60405180910390a260285460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561522a57600080fd5b505af115801561523e573d6000803e3d6000fd5b50506020546021546040517f35c018db0000000000000000000000000000000000000000000000000000000081526001600160a01b0392831694506335c018db93508792615292921690879060040161a663565b6000604051808303818588803b1580156152ab57600080fd5b505af11580156152bf573d6000803e3d6000fd5b50506021546001600160a01b0316319250610d5c9150829050670de0b6b3a7640000615f8d565b60248054602754604051620186a09381018490526001600160a01b0392831660448201529116606482015260009060840160408051601f198184030181529181526020820180516001600160e01b03167fc5131691000000000000000000000000000000000000000000000000000000001790526024805460275492516370a0823160e01b81526001600160a01b0393841660048201529394506000939216916370a082319101602060405180830381865afa1580156153aa573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906153ce919061a5c7565b90506153db816000615f8d565b602480546022546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa15801561542b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061544f919061a5c7565b6020546040516001600160a01b0390911660248201526044810186905290915060009060640160408051601f198184030181529181526020820180516001600160e01b03167fa9059cbb0000000000000000000000000000000000000000000000000000000017905260245490517ff30c7ba3000000000000000000000000000000000000000000000000000000008152919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f30c7ba39161551d916001600160a01b039190911690600090869060040161a5e0565b600060405180830381600087803b15801561553757600080fd5b505af115801561554b573d6000803e3d6000fd5b50506021546040516381bad6f360e01b8152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b1580156155c457600080fd5b505af11580156155d8573d6000803e3d6000fd5b50506020547f2b58128f24a9f59127cc5b5430d70542b22220f2d9adaa86e442b816ab98af6092506001600160a01b0316905061561660028861a883565b602454602754604080516001600160a01b03958616815260208101949094529184168383015292909216606082015290519081900360800190a16022546040516381bad6f360e01b8152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b1580156156c557600080fd5b505af11580156156d9573d6000803e3d6000fd5b50506021546024546040516001600160a01b039283169450911691507f85b5be9cf454e05e0bddf49315178102227c312078eefa3c00294fb4d912ae4e90615724908990899061a64a565b60405180910390a360285460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561578557600080fd5b505af1158015615799573d6000803e3d6000fd5b50506022546024546021546040517f21fc65f20000000000000000000000000000000000000000000000000000000081526001600160a01b0393841695506321fc65f294506157f69392831692909116908a908a9060040161a543565b600060405180830381600087803b15801561581057600080fd5b505af1158015615824573d6000803e3d6000fd5b5050602480546027546040516370a0823160e01b81526001600160a01b03918216600482015260009550911692506370a082319101602060405180830381865afa158015615876573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061589a919061a5c7565b90506158ab81611a4c60028961a883565b602480546022546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa1580156158fb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061591f919061a5c7565b905061285f8161593060028a61a883565b611a4c908761a637565b60408051808201909152600f81527f48656c6c6f2c20466f756e6472792100000000000000000000000000000000006020820152602154602a90600190670de0b6b3a764000090615997906000906001600160a01b031631615f8d565b60008484846040516024016159ae9392919061a8be565b60408051601f198184030181529181526020820180516001600160e01b03167fe04d4f970000000000000000000000000000000000000000000000000000000017905260215490517ff30c7ba3000000000000000000000000000000000000000000000000000000008152919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f30c7ba391615a5d916001600160a01b039190911690670de0b6b3a764000090869060040161a5e0565b600060405180830381600087803b158015615a7757600080fd5b505af1158015615a8b573d6000803e3d6000fd5b50506021546040516381bad6f360e01b8152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b158015615b0457600080fd5b505af1158015615b18573d6000803e3d6000fd5b50506020546040517f1f1ff1f5fb41346850b2f5c04e6c767e2f1c8a525c5c0c5cdb60cdf3ca5f62fa9350615b6192506001600160a01b0390911690859089908990899061a8e8565b60405180910390a16020546040516381bad6f360e01b8152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b158015615bde57600080fd5b505af1158015615bf2573d6000803e3d6000fd5b50506021546040516001600160a01b0390911692507fcaf938de11c367272220bfd1d2baa99ca46665e7bc4d85f00adb51b90fe1fa9f9150615c3f90670de0b6b3a764000090859061a64a565b60405180910390a260285460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015615ca057600080fd5b505af1158015615cb4573d6000803e3d6000fd5b50506020546021546040517f1cff79cd0000000000000000000000000000000000000000000000000000000081526001600160a01b039283169450631cff79cd93508692615d08921690869060040161a663565b60006040518083038185885af1158015615d26573d6000803e3d6000fd5b50505050506040513d6000823e601f3d908101601f19168201604052615d4f919081019061a76d565b50602154612cc49083906001600160a01b031631615f8d565b60265460405163ca669fa760e01b81526001600160a01b039091166004820152620186a090737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015615dc657600080fd5b505af1158015615dda573d6000803e3d6000fd5b5050602654604080516001600160a01b0390921660248301527f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e460448084019190915281518084039091018152606490920181526020820180516001600160e01b03167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb39250615eb0919060040161a530565b600060405180830381600087803b158015615eca57600080fd5b505af1158015615ede573d6000803e3d6000fd5b5050602254602480546027546040517fd9caed120000000000000000000000000000000000000000000000000000000081526001600160a01b0392831660048201529082169281019290925260448201869052909116925063d9caed129150606401600060405180830381600087803b158015615f5a57600080fd5b505af1158015612cc4573d6000803e3d6000fd5b6000615f7861a0af565b615f8384848361600c565b9150505b92915050565b6040517f98296c540000000000000000000000000000000000000000000000000000000081526004810183905260248101829052737109709ecfa91a80626ff3989d68f67f5b1dd12d906398296c549060440160006040518083038186803b158015615ff857600080fd5b505afa158015610fd5573d6000803e3d6000fd5b6000806160198584616087565b905061607c6040518060400160405280601d81526020017f4552433139363750726f78792e736f6c3a4552433139363750726f7879000000815250828660405160200161606792919061a663565b60405160208183030381529060405285616093565b9150505b9392505050565b600061608083836160c1565b60c081015151600090156160b7576160b084848460c001516160dc565b9050616080565b6160b08484616282565b60006160cd838361636d565b61608083836020015184616093565b6000806160e7616379565b905060006160f5868361644c565b9050600061610c82606001518360200151856168f2565b9050600061611c83838989616b04565b9050600061612982617981565b602081015181519192509060030b1561619c5789826040015160405160200161615392919061a929565b60408051601f19818403018152908290527f08c379a00000000000000000000000000000000000000000000000000000000082526161939160040161a530565b60405180910390fd5b60006161df6040518060400160405280601581526020017f4465706c6f79656420746f20616464726573733a200000000000000000000000815250836001617b50565b6040517fc6ce059d000000000000000000000000000000000000000000000000000000008152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c6ce059d9061623290849060040161a530565b602060405180830381865afa15801561624f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190616273919061a9aa565b9b9a5050505050505050505050565b6040517f8d1cc9250000000000000000000000000000000000000000000000000000000081526000908190737109709ecfa91a80626ff3989d68f67f5b1dd12d90638d1cc925906162d790879060040161a530565b600060405180830381865afa1580156162f4573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261631c919081019061a76d565b9050600061634a828560405160200161633692919061a9d3565b604051602081830303815290604052617d50565b90506001600160a01b038116615f8357848460405160200161615392919061aa02565b611f7482826000617d63565b604080518082018252600381527f6f75740000000000000000000000000000000000000000000000000000000000602082015290517fd145736c000000000000000000000000000000000000000000000000000000008152606091737109709ecfa91a80626ff3989d68f67f5b1dd12d91829063d145736c9061640090849060040161aaad565b600060405180830381865afa15801561641d573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052616445919081019061aaf4565b9250505090565b61647e6040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b6000737109709ecfa91a80626ff3989d68f67f5b1dd12d90506164c96040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b6164d285617e66565b602082015260006164e28661824b565b90506000836001600160a01b031663d930a0e66040518163ffffffff1660e01b8152600401600060405180830381865afa158015616524573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261654c919081019061aaf4565b86838560200151604051602001616566949392919061ab3d565b60408051601f19818403018152908290527f60f9bb1100000000000000000000000000000000000000000000000000000000825291506000906001600160a01b038616906360f9bb11906165be90859060040161a530565b600060405180830381865afa1580156165db573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052616603919081019061aaf4565b6040517fdb4235f60000000000000000000000000000000000000000000000000000000081529091506001600160a01b0386169063db4235f69061664b90849060040161ac41565b602060405180830381865afa158015616668573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061668c919061a50e565b6166a15781604051602001616153919061ac93565b6040517f49c4fac80000000000000000000000000000000000000000000000000000000081526001600160a01b038616906349c4fac8906166e690849060040161ad25565b600060405180830381865afa158015616703573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261672b919081019061aaf4565b84526040517fdb4235f60000000000000000000000000000000000000000000000000000000081526001600160a01b0386169063db4235f69061677290849060040161ad77565b602060405180830381865afa15801561678f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906167b3919061a50e565b15616848576040517f49c4fac80000000000000000000000000000000000000000000000000000000081526001600160a01b038616906349c4fac8906167fd90849060040161ad77565b600060405180830381865afa15801561681a573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052616842919081019061aaf4565b60408501525b846001600160a01b03166349c4fac882866000015160405160200161686d919061adc9565b6040516020818303038152906040526040518363ffffffff1660e01b815260040161689992919061ae35565b600060405180830381865afa1580156168b6573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526168de919081019061aaf4565b606085015250608083015250949350505050565b60408051600480825260a0820190925260609160009190816020015b606081526020019060019003908161690e5790505090506040518060400160405280600481526020017f67726570000000000000000000000000000000000000000000000000000000008152508160008151811061696e5761696e61a7a2565b60200260200101819052506040518060400160405280600381526020017f2d726c0000000000000000000000000000000000000000000000000000000000815250816001815181106169c2576169c261a7a2565b6020026020010181905250846040516020016169de919061ae5a565b60405160208183030381529060405281600281518110616a0057616a0061a7a2565b602002602001018190525082604051602001616a1c919061aec6565b60405160208183030381529060405281600381518110616a3e57616a3e61a7a2565b60200260200101819052506000616a5482617981565b602080820151604080518082018252600581527f2e6a736f6e0000000000000000000000000000000000000000000000000000008185019081528251808401845260008082529086015282518084019093529051825292810192909252919250616ae590604080518082018252600080825260209182015281518083019092528451825280850190820152906184ce565b616afa5785604051602001616153919061af07565b9695505050505050565b60a0810151604080518082018252600080825260209182015281518083019092528251808352928101910152606090737109709ecfa91a80626ff3989d68f67f5b1dd12d9015616b54565b511590565b616cc857826020015115616c10576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605860248201527f54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f742060448201527f62652075736564207768656e207468652060736b6970566572696679536f757260648201527f6365436f646560206f7074696f6e206973206074727565600000000000000000608482015260a401616193565b8260c0015115616cc8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605360248201527f54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f742060448201527f62652075736564207768656e207468652060736b69704c6963656e736554797060648201527f6560206f7074696f6e2069732060747275656000000000000000000000000000608482015260a401616193565b6040805160ff8082526120008201909252600091816020015b6060815260200190600190039081616ce157905050905060006040518060400160405280600381526020017f6e70780000000000000000000000000000000000000000000000000000000000815250828280616d3c9061af98565b935060ff1681518110616d5157616d5161a7a2565b60200260200101819052506040518060400160405280600d81526020017f302e302e312d616c7068612e3700000000000000000000000000000000000000815250604051602001616da2919061afb7565b604051602081830303815290604052828280616dbd9061af98565b935060ff1681518110616dd257616dd261a7a2565b60200260200101819052506040518060400160405280600681526020017f6465706c6f790000000000000000000000000000000000000000000000000000815250828280616e1f9061af98565b935060ff1681518110616e3457616e3461a7a2565b60200260200101819052506040518060400160405280600e81526020017f2d2d636f6e74726163744e616d65000000000000000000000000000000000000815250828280616e819061af98565b935060ff1681518110616e9657616e9661a7a2565b60200260200101819052508760200151828280616eb29061af98565b935060ff1681518110616ec757616ec761a7a2565b60200260200101819052506040518060400160405280600e81526020017f2d2d636f6e747261637450617468000000000000000000000000000000000000815250828280616f149061af98565b935060ff1681518110616f2957616f2961a7a2565b602090810291909101015287518282616f418161af98565b935060ff1681518110616f5657616f5661a7a2565b60200260200101819052506040518060400160405280600981526020017f2d2d636861696e49640000000000000000000000000000000000000000000000815250828280616fa39061af98565b935060ff1681518110616fb857616fb861a7a2565b6020026020010181905250616fcc4661852f565b8282616fd78161af98565b935060ff1681518110616fec57616fec61a7a2565b60200260200101819052506040518060400160405280600f81526020017f2d2d6275696c64496e666f46696c6500000000000000000000000000000000008152508282806170399061af98565b935060ff168151811061704e5761704e61a7a2565b6020026020010181905250868282806170669061af98565b935060ff168151811061707b5761707b61a7a2565b60209081029190910101528551156171a25760408051808201909152601581527f2d2d636f6e7374727563746f7242797465636f64650000000000000000000000602082015282826170cc8161af98565b935060ff16815181106170e1576170e161a7a2565b60209081029190910101526040517f71aad10d0000000000000000000000000000000000000000000000000000000081526001600160a01b038416906371aad10d9061713190899060040161a530565b600060405180830381865afa15801561714e573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052617176919081019061aaf4565b82826171818161af98565b935060ff16815181106171965761719661a7a2565b60200260200101819052505b8460200151156172725760408051808201909152601281527f2d2d766572696679536f75726365436f64650000000000000000000000000000602082015282826171eb8161af98565b935060ff16815181106172005761720061a7a2565b60200260200101819052506040518060400160405280600581526020017f66616c736500000000000000000000000000000000000000000000000000000081525082828061724d9061af98565b935060ff16815181106172625761726261a7a2565b6020026020010181905250617439565b6172aa616b4f8660a0015160408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b61733d5760408051808201909152600d81527f2d2d6c6963656e73655479706500000000000000000000000000000000000000602082015282826172ed8161af98565b935060ff16815181106173025761730261a7a2565b60200260200101819052508460a00151604051602001617322919061ae5a565b60405160208183030381529060405282828061724d9061af98565b8460c0015115801561738057506040808901518151808301835260008082526020918201528251808401909352815183529081019082015261737e90511590565b155b156174395760408051808201909152600d81527f2d2d6c6963656e73655479706500000000000000000000000000000000000000602082015282826173c48161af98565b935060ff16815181106173d9576173d961a7a2565b60200260200101819052506173ed886185cf565b6040516020016173fd919061ae5a565b6040516020818303038152906040528282806174189061af98565b935060ff168151811061742d5761742d61a7a2565b60200260200101819052505b6040808601518151808301835260008082526020918201528251808401909352815183529081019082015261746d90511590565b6175025760408051808201909152600b81527f2d2d72656c617965724964000000000000000000000000000000000000000000602082015282826174b08161af98565b935060ff16815181106174c5576174c561a7a2565b602002602001018190525084604001518282806174e19061af98565b935060ff16815181106174f6576174f661a7a2565b60200260200101819052505b6060850151156176235760408051808201909152600681527f2d2d73616c7400000000000000000000000000000000000000000000000000006020820152828261754b8161af98565b935060ff16815181106175605761756061a7a2565b602090810291909101015260608501516040517fb11a19e800000000000000000000000000000000000000000000000000000000815260048101919091526001600160a01b0384169063b11a19e890602401600060405180830381865afa1580156175cf573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526175f7919081019061aaf4565b82826176028161af98565b935060ff16815181106176175761761761a7a2565b60200260200101819052505b60e085015151156176ca5760408051808201909152600a81527f2d2d6761734c696d6974000000000000000000000000000000000000000000006020820152828261766d8161af98565b935060ff16815181106176825761768261a7a2565b602002602001018190525061769e8560e001516000015161852f565b82826176a98161af98565b935060ff16815181106176be576176be61a7a2565b60200260200101819052505b60e085015160200151156177745760408051808201909152600a81527f2d2d676173507269636500000000000000000000000000000000000000000000602082015282826177178161af98565b935060ff168151811061772c5761772c61a7a2565b60200260200101819052506177488560e001516020015161852f565b82826177538161af98565b935060ff16815181106177685761776861a7a2565b60200260200101819052505b60e0850151604001511561781e5760408051808201909152600e81527f2d2d6d6178466565506572476173000000000000000000000000000000000000602082015282826177c18161af98565b935060ff16815181106177d6576177d661a7a2565b60200260200101819052506177f28560e001516040015161852f565b82826177fd8161af98565b935060ff16815181106178125761781261a7a2565b60200260200101819052505b60e085015160600151156178c85760408051808201909152601681527f2d2d6d61785072696f72697479466565506572476173000000000000000000006020820152828261786b8161af98565b935060ff16815181106178805761788061a7a2565b602002602001018190525061789c8560e001516060015161852f565b82826178a78161af98565b935060ff16815181106178bc576178bc61a7a2565b60200260200101819052505b60008160ff1667ffffffffffffffff8111156178e6576178e661a685565b60405190808252806020026020018201604052801561791957816020015b60608152602001906001900390816179045790505b50905060005b8260ff168160ff16101561797257838160ff16815181106179425761794261a7a2565b6020026020010151828260ff168151811061795f5761795f61a7a2565b602090810291909101015260010161791f565b5093505050505b949350505050565b6179a86040518060600160405280600060030b815260200160608152602001606081525090565b60408051808201825260048082527f6261736800000000000000000000000000000000000000000000000000000000602083015291517fd145736c000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d92600091849163d145736c91617a2e9186910161b022565b600060405180830381865afa158015617a4b573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052617a73919081019061aaf4565b90506000617a8186836190be565b90506000846001600160a01b031663f45c1ce7836040518263ffffffff1660e01b8152600401617ab1919061a464565b6000604051808303816000875af1158015617ad0573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052617af8919081019061b069565b805190915060030b15801590617b115750602081015151155b8015617b205750604081015151155b15616afa5781600081518110617b3857617b3861a7a2565b6020026020010151604051602001616153919061b11f565b60606000617b858560408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600080825260209182015281518083019092528651825280870190820152909150617bbc9082905b90619213565b15617d19576000617c3982617c3384617c2d617bff8a60408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6040805180820182526000808252602091820152815180830190925282518252918201519181019190915290565b9061923a565b9061929c565b604080518082018252600181527f0a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152909150617c9d908290619213565b15617d0757604080518082018252600181527f0a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617d04905b8290619321565b90505b617d1081619347565b92505050616080565b8215617d3257848460405160200161615392919061b30b565b5050604080516020810190915260008152616080565b509392505050565b6000808251602084016000f09392505050565b8160a0015115617d7257505050565b6000617d7f8484846193b0565b90506000617d8c82617981565b602081015181519192509060030b158015617e285750604080518082018252600781527f535543434553530000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617e2890604080518082018252600080825260209182015281518083019092528451825280850190820152617bb6565b15617e3557505050505050565b60408201515115617e55578160400151604051602001616153919061b3b2565b80604051602001616153919061b410565b60606000617e9b8360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600481527f2e736f6c0000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152909150617f00905b82906184ce565b15617f6f57604080518082018252600481527f2e736f6c000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261608090617f6a90839061994b565b619347565b604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617fd1905b82906199d5565b60010361809e57604080518082018252600181527f3a000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261803790617cfd565b50604080518082018252600181527f3a000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261608090617f6a905b8390619321565b604080518082018252600581527f2e6a736f6e000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526180fd90617ef9565b1561823457604080518082018252600181527f2f00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820181905284518086019095529251845283015290618165908390619a6f565b905060008160018351618178919061a637565b815181106181885761818861a7a2565b6020026020010151905061822b617f6a6181fe6040518060400160405280600581526020017f2e6a736f6e00000000000000000000000000000000000000000000000000000081525060408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6040805180820182526000808252602091820152815180830190925285518252808601908201529061994b565b95945050505050565b82604051602001616153919061b47b565b50919050565b606060006182808360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600481527f2e736f6c00000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201529091506182e290617ef9565b156182f05761608081619347565b604080518082018252600181527f3a000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261834f90617fca565b6001036183b957604080518082018252600181527f3a000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261608090617f6a90618097565b604080518082018252600581527f2e6a736f6e0000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261841890617ef9565b1561823457604080518082018252600181527f2f00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820181905284518086019095529251845283015290618480908390619a6f565b90506001815111156184bc57806002825161849b919061a637565b815181106184ab576184ab61a7a2565b602002602001015192505050919050565b5082604051602001616153919061b47b565b8051825160009111156184e357506000615f87565b815183516020850151600092916184f99161b559565b618503919061a637565b90508260200151810361851a576001915050615f87565b82516020840151819020912014905092915050565b6060600061853c83619b14565b600101905060008167ffffffffffffffff81111561855c5761855c61a685565b6040519080825280601f01601f191660200182016040528015618586576020820181803683370190505b5090508181016020015b600019017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a850494508461859057509392505050565b604081810151815180830183526000808252602091820181905283518085018552835181529282018383015283518085018552600a81527f554e4c4943454e534544000000000000000000000000000000000000000000008184019081528551808701875283815284019290925284518086019095525184529083015260609161865b905b8290619bf6565b1561869b57505060408051808201909152600481527f4e6f6e65000000000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600981527f556e6c6963656e73650000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526186fa90618654565b1561873a57505060408051808201909152600981527f556e6c6963656e736500000000000000000000000000000000000000000000006020820152919050565b604080518082018252600381527f4d495400000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261879990618654565b156187d957505060408051808201909152600381527f4d495400000000000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f47504c2d322e302d6f6e6c7900000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261883890618654565b8061889d5750604080518082018252601081527f47504c2d322e302d6f722d6c61746572000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261889d90618654565b156188dd57505060408051808201909152600981527f474e552047504c763200000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f47504c2d332e302d6f6e6c7900000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261893c90618654565b806189a15750604080518082018252601081527f47504c2d332e302d6f722d6c6174657200000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526189a190618654565b156189e157505060408051808201909152600981527f474e552047504c763300000000000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4c47504c2d322e312d6f6e6c790000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152618a4090618654565b80618aa55750604080518082018252601181527f4c47504c2d322e312d6f722d6c6174657200000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152618aa590618654565b15618ae557505060408051808201909152600c81527f474e55204c47504c76322e3100000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4c47504c2d332e302d6f6e6c790000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152618b4490618654565b80618ba95750604080518082018252601181527f4c47504c2d332e302d6f722d6c6174657200000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152618ba990618654565b15618be957505060408051808201909152600a81527f474e55204c47504c7633000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f4253442d322d436c61757365000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152618c4890618654565b15618c8857505060408051808201909152600c81527f4253442d322d436c6175736500000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f4253442d332d436c61757365000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152618ce790618654565b15618d2757505060408051808201909152600c81527f4253442d332d436c6175736500000000000000000000000000000000000000006020820152919050565b604080518082018252600781527f4d504c2d322e300000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152618d8690618654565b15618dc657505060408051808201909152600781527f4d504c2d322e30000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600781527f4f534c2d332e300000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152618e2590618654565b15618e6557505060408051808201909152600781527f4f534c2d332e30000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600a81527f4170616368652d322e300000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152618ec490618654565b15618f0457505060408051808201909152600a81527f4170616368652d322e30000000000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4147504c2d332e302d6f6e6c790000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152618f6390618654565b80618fc85750604080518082018252601181527f4147504c2d332e302d6f722d6c6174657200000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152618fc890618654565b1561900857505060408051808201909152600a81527f474e55204147504c7633000000000000000000000000000000000000000000006020820152919050565b604080518082018252600881527f4255534c2d312e310000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261906790618654565b156190a757505060408051808201909152600781527f42534c20312e31000000000000000000000000000000000000000000000000006020820152919050565b60408084015184519151616153929060200161b56c565b60608060005b845181101561914957818582815181106190e0576190e061a7a2565b60200260200101516040516020016190f992919061a9d3565b604051602081830303815290604052915060018551619118919061a637565b8114619141578160405160200161912f919061b6d5565b60405160208183030381529060405291505b6001016190c4565b5060408051600380825260808201909252600091816020015b6060815260200190600190039081619162579050509050838160008151811061918d5761918d61a7a2565b60200260200101819052506040518060400160405280600281526020017f2d63000000000000000000000000000000000000000000000000000000000000815250816001815181106191e1576191e161a7a2565b602002602001018190525081816002815181106192005761920061a7a2565b6020908102919091010152949350505050565b60208083015183518351928401516000936192319291849190619c0a565b14159392505050565b6040805180820190915260008082526020820152600061926c8460000151856020015185600001518660200151619d1b565b905083602001518161927e919061a637565b8451859061928d90839061a637565b90525060208401525090919050565b60408051808201909152600080825260208201528151835110156192c1575081615f87565b60208083015190840151600191146192e85750815160208481015190840151829020919020145b8015619319578251845185906192ff90839061a637565b905250825160208501805161931590839061b559565b9052505b509192915050565b6040805180820190915260008082526020820152619340838383619e3b565b5092915050565b60606000826000015167ffffffffffffffff8111156193685761936861a685565b6040519080825280601f01601f191660200182016040528015619392576020820181803683370190505b50905060006020820190506193408185602001518660000151619ee6565b606060006193bc616379565b6040805160ff808252612000820190925291925060009190816020015b60608152602001906001900390816193d957905050905060006040518060400160405280600381526020017f6e707800000000000000000000000000000000000000000000000000000000008152508282806194349061af98565b935060ff16815181106194495761944961a7a2565b60200260200101819052506040518060400160405280600781526020017f5e312e33322e330000000000000000000000000000000000000000000000000081525060405160200161949a919061b716565b6040516020818303038152906040528282806194b59061af98565b935060ff16815181106194ca576194ca61a7a2565b60200260200101819052506040518060400160405280600881526020017f76616c69646174650000000000000000000000000000000000000000000000008152508282806195179061af98565b935060ff168151811061952c5761952c61a7a2565b602002602001018190525082604051602001619548919061aec6565b6040516020818303038152906040528282806195639061af98565b935060ff16815181106195785761957861a7a2565b60200260200101819052506040518060400160405280600a81526020017f2d2d636f6e7472616374000000000000000000000000000000000000000000008152508282806195c59061af98565b935060ff16815181106195da576195da61a7a2565b60200260200101819052506195ef8784619f60565b82826195fa8161af98565b935060ff168151811061960f5761960f61a7a2565b6020908102919091010152855151156196bb5760408051808201909152600b81527f2d2d7265666572656e6365000000000000000000000000000000000000000000602082015282826196618161af98565b935060ff16815181106196765761967661a7a2565b602002602001018190525061968f866000015184619f60565b828261969a8161af98565b935060ff16815181106196af576196af61a7a2565b60200260200101819052505b8560800151156197295760408051808201909152601881527f2d2d756e73616665536b697053746f72616765436865636b0000000000000000602082015282826197048161af98565b935060ff16815181106197195761971961a7a2565b602002602001018190525061978f565b841561978f5760408051808201909152601281527f2d2d726571756972655265666572656e636500000000000000000000000000006020820152828261976e8161af98565b935060ff16815181106197835761978361a7a2565b60200260200101819052505b6040860151511561982b5760408051808201909152600d81527f2d2d756e73616665416c6c6f7700000000000000000000000000000000000000602082015282826197d98161af98565b935060ff16815181106197ee576197ee61a7a2565b6020026020010181905250856040015182828061980a9061af98565b935060ff168151811061981f5761981f61a7a2565b60200260200101819052505b8560600151156198955760408051808201909152601481527f2d2d756e73616665416c6c6f7752656e616d6573000000000000000000000000602082015282826198748161af98565b935060ff16815181106198895761988961a7a2565b60200260200101819052505b60008160ff1667ffffffffffffffff8111156198b3576198b361a685565b6040519080825280602002602001820160405280156198e657816020015b60608152602001906001900390816198d15790505b50905060005b8260ff168160ff16101561993f57838160ff168151811061990f5761990f61a7a2565b6020026020010151828260ff168151811061992c5761992c61a7a2565b60209081029190910101526001016198ec565b50979650505050505050565b6040805180820190915260008082526020820152815183511015619970575081615f87565b815183516020850151600092916199869161b559565b619990919061a637565b602084015190915060019082146199b1575082516020840151819020908220145b80156199cc578351855186906199c890839061a637565b9052505b50929392505050565b60008082600001516199f98560000151866020015186600001518760200151619d1b565b619a03919061b559565b90505b83516020850151619a17919061b559565b81116193405781619a278161b75b565b9250508260000151619a5e856020015183619a42919061a637565b8651619a4e919061a637565b8386600001518760200151619d1b565b619a68919061b559565b9050619a06565b60606000619a7d84846199d5565b619a8890600161b559565b67ffffffffffffffff811115619aa057619aa061a685565b604051908082528060200260200182016040528015619ad357816020015b6060815260200190600190039081619abe5790505b50905060005b8151811015617d4857619aef617f6a8686619321565b828281518110619b0157619b0161a7a2565b6020908102919091010152600101619ad9565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310619b5d577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310619b89576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc100008310619ba757662386f26fc10000830492506010015b6305f5e1008310619bbf576305f5e100830492506008015b6127108310619bd357612710830492506004015b60648310619be5576064830492506002015b600a8310615f875760010192915050565b6000619c028383619fa0565b159392505050565b600080858411619d115760208411619cbd5760008415619c55576001619c3186602061a637565b619c3c90600861b775565b619c4790600261b873565b619c51919061a637565b1990505b8351811685619c64898961b559565b619c6e919061a637565b805190935082165b818114619ca857878411619c905787945050505050617979565b83619c9a8161b87f565b945050828451169050619c76565b619cb2878561b559565b945050505050617979565b838320619cca858861a637565b619cd4908761b559565b91505b858210619d0f57848220808203619cfc57619cf2868461b559565b9350505050617979565b619d0760018461a637565b925050619cd7565b505b5092949350505050565b60008381868511619e265760208511619dd55760008515619d67576001619d4387602061a637565b619d4e90600861b775565b619d5990600261b873565b619d63919061a637565b1990505b84518116600087619d788b8b61b559565b619d82919061a637565b855190915083165b828114619dc757818610619daf57619da28b8b61b559565b9650505050505050617979565b85619db98161b75b565b965050838651169050619d8a565b859650505050505050617979565b508383206000905b619de7868961a637565b8211619e2457858320808203619e035783945050505050617979565b619e0e60018561b559565b9350508180619e1c9061b75b565b925050619ddd565b505b619e30878761b559565b979650505050505050565b60408051808201909152600080825260208201526000619e6d8560000151866020015186600001518760200151619d1b565b602080870180519186019190915251909150619e89908261a637565b835284516020860151619e9c919061b559565b8103619eab5760008552619edd565b83518351619eb9919061b559565b85518690619ec890839061a637565b9052508351619ed7908261b559565b60208601525b50909392505050565b60208110619f1e5781518352619efd60208461b559565b9250619f0a60208361b559565b9150619f1760208261a637565b9050619ee6565b6000198115619f4d576001619f3483602061a637565b619f409061010061b873565b619f4a919061a637565b90505b9151835183169219169190911790915250565b60606000619f6e848461644c565b8051602080830151604051939450619f889390910161b896565b60405160208183030381529060405291505092915050565b8151815160009190811115619fb3575081515b6020808501519084015160005b8381101561a06c578251825180821461a03c57600019602087101561a01b57600184619fed89602061a637565b619ff7919061b559565b61a00290600861b775565b61a00d90600261b873565b61a017919061a637565b1990505b818116838216818103911461a039579750615f879650505050505050565b50505b61a04760208661b559565b945061a05460208561b559565b9350505060208161a065919061b559565b9050619fc0565b5084518651616afa919061b8ee565b610c9f8061b90f83390190565b61140b8061c5ae83390190565b6117f98061d9b983390190565b610d5e8061f1b283390190565b6040518060e0016040528060608152602001606081526020016060815260200160001515815260200160001515815260200160001515815260200161a0f261a0f7565b905290565b6040518061010001604052806000151581526020016000151581526020016060815260200160008019168152602001606081526020016060815260200160001515815260200161a0f26040518060800160405280600081526020016000815260200160008152602001600081525090565b602080825282518282018190526000918401906040840190835b8181101561a1a95783516001600160a01b031683526020938401939092019160010161a182565b509095945050505050565b60005b8381101561a1cf57818101518382015260200161a1b7565b50506000910152565b6000815180845261a1f081602086016020860161a1b4565b601f01601f19169290920160200192915050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b8281101561a300577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452815180516001600160a01b03168652602090810151604082880181905281519088018190529101906060600582901b88018101919088019060005b8181101561a2e6577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa08a850301835261a2d084865161a1d8565b602095860195909450929092019160010161a296565b50919750505060209485019492909201915060010161a22c565b50929695505050505050565b600081518084526020840193506020830160005b8281101561a3605781517fffffffff000000000000000000000000000000000000000000000000000000001686526020958601959091019060010161a320565b5093949350505050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b8281101561a300577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452815180516040875261a3d6604088018261a1d8565b905060208201519150868103602088015261a3f1818361a30c565b96505050602093840193919091019060010161a392565b600082825180855260208501945060208160051b8301016020850160005b8381101561a45857601f1985840301885261a44283835161a1d8565b602098890198909350919091019060010161a426565b50909695505050505050565b602081526000616080602083018461a408565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b8281101561a300577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc087860301845281516001600160a01b038151168652602081015190506040602087015261a4f8604087018261a30c565b955050602093840193919091019060010161a49f565b60006020828403121561a52057600080fd5b8151801515811461608057600080fd5b602081526000616080602083018461a1d8565b6001600160a01b03851681526001600160a01b0384166020820152826040820152608060608201526000616afa608083018461a1d8565b600181811c9082168061a58e57607f821691505b602082108103618245577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006020828403121561a5d957600080fd5b5051919050565b6001600160a01b038416815282602082015260606040820152600061822b606083018461a1d8565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b81810381811115615f8757615f8761a608565b828152604060208201526000617979604083018461a1d8565b6001600160a01b0383168152604060208201526000617979604083018461a1d8565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040516060810167ffffffffffffffff8111828210171561a6d75761a6d761a685565b60405290565b60008067ffffffffffffffff84111561a6f85761a6f861a685565b50604051601f19601f85018116603f0116810181811067ffffffffffffffff8211171561a7275761a72761a685565b60405283815290508082840185101561a73f57600080fd5b617d4884602083018561a1b4565b600082601f83011261a75e57600080fd5b6160808383516020850161a6dd565b60006020828403121561a77f57600080fd5b815167ffffffffffffffff81111561a79657600080fd5b615f838482850161a74d565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081518084526020840193506020830160005b8281101561a36057815186526020958601959091019060010161a7e5565b60608152600061a816606083018661a408565b828103602084015261a828818661a7d1565b9150508215156040830152949350505050565b6001600160a01b038516815260806020820152600061a85d608083018661a408565b828103604084015261a86f818661a7d1565b915050821515606083015295945050505050565b60008261a8b9577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60608152600061a8d1606083018661a1d8565b602083019490945250901515604090910152919050565b6001600160a01b038616815284602082015260a06040820152600061a91060a083018661a1d8565b6060830194909452509015156080909101529392505050565b7f4661696c656420746f206465706c6f7920636f6e74726163742000000000000081526000835161a96181601a85016020880161a1b4565b7f3a20000000000000000000000000000000000000000000000000000000000000601a91840191820152835161a99e81601c84016020880161a1b4565b01601c01949350505050565b60006020828403121561a9bc57600080fd5b81516001600160a01b038116811461608057600080fd5b6000835161a9e581846020880161a1b4565b83519083019061a9f981836020880161a1b4565b01949350505050565b7f4661696c656420746f206465706c6f7920636f6e74726163742000000000000081526000835161aa3a81601a85016020880161a1b4565b7f207573696e6720636f6e7374727563746f722064617461202200000000000000601a91840191820152835161aa7781603384016020880161a1b4565b7f220000000000000000000000000000000000000000000000000000000000000060339290910191820152603401949350505050565b60408152600b60408201527f464f554e4452595f4f55540000000000000000000000000000000000000000006060820152608060208201526000616080608083018461a1d8565b60006020828403121561ab0657600080fd5b815167ffffffffffffffff81111561ab1d57600080fd5b8201601f8101841361ab2e57600080fd5b615f838482516020840161a6dd565b6000855161ab4f818460208a0161a1b4565b7f2f00000000000000000000000000000000000000000000000000000000000000908301908152855161ab89816001840160208a0161a1b4565b7f2f0000000000000000000000000000000000000000000000000000000000000060019290910191820152845161abc781600284016020890161a1b4565b6001818301019150507f2f000000000000000000000000000000000000000000000000000000000000006001820152835161ac0981600284016020880161a1b4565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600292909101918201526007019695505050505050565b60408152600061ac54604083018461a1d8565b8281036020840152600481527f2e6173740000000000000000000000000000000000000000000000000000000060208201526040810191505092915050565b7f436f756c64206e6f742066696e642041535420696e206172746966616374200081526000825161accb81601f85016020870161a1b4565b7f2e205365742060617374203d20747275656020696e20666f756e6472792e746f601f9390910192830152507f6d6c000000000000000000000000000000000000000000000000000000000000603f820152604101919050565b60408152600061ad38604083018461a1d8565b8281036020840152601181527f2e6173742e6162736f6c7574655061746800000000000000000000000000000060208201526040810191505092915050565b60408152600061ad8a604083018461a1d8565b8281036020840152600c81527f2e6173742e6c6963656e7365000000000000000000000000000000000000000060208201526040810191505092915050565b7f2e6d657461646174612e736f75726365732e5b2700000000000000000000000081526000825161ae0181601485016020870161a1b4565b7f275d2e6b656363616b32353600000000000000000000000000000000000000006014939091019283015250602001919050565b60408152600061ae48604083018561a1d8565b828103602084015261607c818561a1d8565b7f220000000000000000000000000000000000000000000000000000000000000081526000825161ae9281600185016020870161a1b4565b7f22000000000000000000000000000000000000000000000000000000000000006001939091019283015250600201919050565b6000825161aed881846020870161a1b4565b7f2f6275696c642d696e666f000000000000000000000000000000000000000000920191825250600b01919050565b7f436f756c64206e6f742066696e64206275696c642d696e666f2066696c65207781527f697468206d61746368696e6720736f7572636520636f6465206861736820666f60208201527f7220636f6e74726163742000000000000000000000000000000000000000000060408201526000825161af8b81604b85016020870161a1b4565b91909101604b0192915050565b600060ff821660ff810361afae5761afae61a608565b60010192915050565b7f406f70656e7a657070656c696e2f646566656e6465722d6465706c6f792d636c81527f69656e742d636c6940000000000000000000000000000000000000000000000060208201526000825161b01581602985016020870161a1b4565b9190910160290192915050565b60408152601660408201527f4f50454e5a455050454c494e5f424153485f50415448000000000000000000006060820152608060208201526000616080608083018461a1d8565b60006020828403121561b07b57600080fd5b815167ffffffffffffffff81111561b09257600080fd5b82016060818503121561b0a457600080fd5b61b0ac61a6b4565b81518060030b811461b0bd57600080fd5b8152602082015167ffffffffffffffff81111561b0d957600080fd5b61b0e58682850161a74d565b602083015250604082015167ffffffffffffffff81111561b10557600080fd5b61b1118682850161a74d565b604083015250949350505050565b7f4661696c656420746f2072756e206261736820636f6d6d616e6420776974682081527f220000000000000000000000000000000000000000000000000000000000000060208201526000825161b17d81602185016020870161a1b4565b7f222e20496620796f7520617265207573696e672057696e646f77732c2073657460219390910192830152507f20746865204f50454e5a455050454c494e5f424153485f5041544820656e766960418201527f726f6e6d656e74207661726961626c6520746f207468652066756c6c7920717560618201527f616c69666965642070617468206f66207468652062617368206578656375746160818201527f626c652e20466f72206578616d706c652c20696620796f75206172652075736960a18201527f6e672047697420666f722057696e646f77732c206164642074686520666f6c6c60c18201527f6f77696e67206c696e6520696e20746865202e656e762066696c65206f66207960e18201527f6f75722070726f6a65637420287573696e6720666f727761726420736c6173686101018201527f6573293a0a4f50454e5a455050454c494e5f424153485f504154483d22433a2f6101218201527f50726f6772616d2046696c65732f4769742f62696e2f6261736822000000000061014182015261015c01919050565b7f4661696c656420746f2066696e64206c696e652077697468207072656669782081527f270000000000000000000000000000000000000000000000000000000000000060208201526000835161b36981602185016020880161a1b4565b7f2720696e206f75747075743a2000000000000000000000000000000000000000602191840191820152835161b3a681602e84016020880161a1b4565b01602e01949350505050565b7f4661696c656420746f2072756e2075706772616465207361666574792076616c81527f69646174696f6e3a20000000000000000000000000000000000000000000000060208201526000825161b01581602985016020870161a1b4565b7f55706772616465207361666574792076616c69646174696f6e206661696c656481527f3a0a00000000000000000000000000000000000000000000000000000000000060208201526000825161b46e81602285016020870161a1b4565b9190910160220192915050565b7f436f6e7472616374206e616d652000000000000000000000000000000000000081526000825161b4b381600e85016020870161a1b4565b7f206d75737420626520696e2074686520666f726d6174204d79436f6e74726163600e9390910192830152507f742e736f6c3a4d79436f6e7472616374206f72204d79436f6e74726163742e73602e8201527f6f6c206f72206f75742f4d79436f6e74726163742e736f6c2f4d79436f6e7472604e8201527f6163742e6a736f6e000000000000000000000000000000000000000000000000606e820152607601919050565b80820180821115615f8757615f8761a608565b7f53504458206c6963656e7365206964656e74696669657220000000000000000081526000835161b5a481601885016020880161a1b4565b7f20696e2000000000000000000000000000000000000000000000000000000000601891840191820152835161b5e181601c84016020880161a1b4565b7f20646f6573206e6f74206c6f6f6b206c696b65206120737570706f7274656420601c92909101918201527f6c6963656e736520666f7220626c6f636b206578706c6f726572207665726966603c8201527f69636174696f6e2e205573652074686520606c6963656e73655479706560206f605c8201527f7074696f6e20746f20737065636966792061206c6963656e736520747970652c607c8201527f206f7220736574207468652060736b69704c6963656e73655479706560206f70609c8201527f74696f6e20746f2060747275656020746f20736b69702e00000000000000000060bc82015260d301949350505050565b6000825161b6e781846020870161a1b4565b7f2000000000000000000000000000000000000000000000000000000000000000920191825250600101919050565b7f406f70656e7a657070656c696e2f75706772616465732d636f7265400000000081526000825161b74e81601c85016020870161a1b4565b91909101601c0192915050565b6000600019820361b76e5761b76e61a608565b5060010190565b8082028115828204841417615f8757615f8761a608565b6001815b600184111561b7c75780850481111561b7ab5761b7ab61a608565b600184161561b7b957908102905b60019390931c92800261b790565b935093915050565b60008261b7de57506001615f87565b8161b7eb57506000615f87565b816001811461b801576002811461b80b5761b827565b6001915050615f87565b60ff84111561b81c5761b81c61a608565b50506001821b615f87565b5060208310610133831016604e8410600b841016171561b84a575081810a615f87565b61b857600019848461b78c565b806000190482111561b86b5761b86b61a608565b029392505050565b6000616080838361b7cf565b60008161b88e5761b88e61a608565b506000190190565b6000835161b8a881846020880161a1b4565b7f3a00000000000000000000000000000000000000000000000000000000000000908301908152835161b8e281600184016020880161a1b4565b01600101949350505050565b81810360008312801583831316838312821617156193405761934061a60856fe608060405234801561001057600080fd5b50604051610c9f380380610c9f83398101604081905261002f9161010d565b8181600361003d83826101ff565b50600461004a82826101ff565b50505050506102bd565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261007b57600080fd5b81516001600160401b0381111561009457610094610054565b604051601f8201601f19908116603f011681016001600160401b03811182821017156100c2576100c2610054565b6040528181528382016020018510156100da57600080fd5b60005b828110156100f9576020818601810151838301820152016100dd565b506000918101602001919091529392505050565b6000806040838503121561012057600080fd5b82516001600160401b0381111561013657600080fd5b6101428582860161006a565b602085015190935090506001600160401b0381111561016057600080fd5b61016c8582860161006a565b9150509250929050565b600181811c9082168061018a57607f821691505b6020821081036101aa57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156101fa57806000526020600020601f840160051c810160208510156101d75750805b601f840160051c820191505b818110156101f757600081556001016101e3565b50505b505050565b81516001600160401b0381111561021857610218610054565b61022c816102268454610176565b846101b0565b6020601f82116001811461026057600083156102485750848201515b600019600385901b1c1916600184901b1784556101f7565b600084815260208120601f198516915b828110156102905787850151825560209485019460019092019101610270565b50848210156102ae5786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b6109d3806102cc6000396000f3fe608060405234801561001057600080fd5b50600436106100be5760003560e01c806340c10f191161007657806395d89b411161005b57806395d89b4114610183578063a9059cbb1461018b578063dd62ed3e1461019e57600080fd5b806340c10f191461013857806370a082311461014d57600080fd5b806318160ddd116100a757806318160ddd1461010457806323b872dd14610116578063313ce5671461012957600080fd5b806306fdde03146100c3578063095ea7b3146100e1575b600080fd5b6100cb6101e4565b6040516100d891906107bf565b60405180910390f35b6100f46100ef366004610854565b610276565b60405190151581526020016100d8565b6002545b6040519081526020016100d8565b6100f461012436600461087e565b610290565b604051601281526020016100d8565b61014b610146366004610854565b6102b4565b005b61010861015b3660046108bb565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6100cb6102c2565b6100f4610199366004610854565b6102d1565b6101086101ac3660046108dd565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6060600380546101f390610910565b80601f016020809104026020016040519081016040528092919081815260200182805461021f90610910565b801561026c5780601f106102415761010080835404028352916020019161026c565b820191906000526020600020905b81548152906001019060200180831161024f57829003601f168201915b5050505050905090565b6000336102848185856102df565b60019150505b92915050565b60003361029e8582856102f1565b6102a98585856103c5565b506001949350505050565b6102be8282610470565b5050565b6060600480546101f390610910565b6000336102848185856103c5565b6102ec83838360016104cc565b505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146103bf57818110156103b0576040517ffb8f41b200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416600482015260248101829052604481018390526064015b60405180910390fd5b6103bf848484840360006104cc565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8316610415576040517f96c6fd1e000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff8216610465576040517fec442f05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b6102ec838383610614565b73ffffffffffffffffffffffffffffffffffffffff82166104c0576040517fec442f05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b6102be60008383610614565b73ffffffffffffffffffffffffffffffffffffffff841661051c576040517fe602df05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff831661056c576040517f94280d62000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260016020908152604080832093871683529290522082905580156103bf578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161060691815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff831661064c5780600260008282546106419190610963565b909155506106fe9050565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260208190526040902054818110156106d2576040517fe450d38c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8516600482015260248101829052604481018390526064016103a7565b73ffffffffffffffffffffffffffffffffffffffff841660009081526020819052604090209082900390555b73ffffffffffffffffffffffffffffffffffffffff821661072757600280548290039055610753565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090208054820190555b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516107b291815260200190565b60405180910390a3505050565b602081526000825180602084015260005b818110156107ed57602081860181015160408684010152016107d0565b5060006040828501015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011684010191505092915050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461084f57600080fd5b919050565b6000806040838503121561086757600080fd5b6108708361082b565b946020939093013593505050565b60008060006060848603121561089357600080fd5b61089c8461082b565b92506108aa6020850161082b565b929592945050506040919091013590565b6000602082840312156108cd57600080fd5b6108d68261082b565b9392505050565b600080604083850312156108f057600080fd5b6108f98361082b565b91506109076020840161082b565b90509250929050565b600181811c9082168061092457607f821691505b60208210810361095d577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b8082018082111561028a577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea26469706673582212207e804ca539d49155d2b6bc19268ce22f9f857027c75247d69fb0d56a089c93d464736f6c634300081a003360a060405234801561001057600080fd5b5060405161140b38038061140b83398101604081905261002f916101b3565b60016000556002805460ff191690556001600160a01b038316158061005b57506001600160a01b038216155b8061006d57506001600160a01b038116155b1561008b5760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b0383166080526100a3600082610102565b506100ce7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a82610102565b506100f97f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e483610102565b505050506101f6565b60008281526001602090815260408083206001600160a01b038516845290915281205460ff1661018d5760008381526001602081815260408084206001600160a01b0387168086529252808420805460ff19169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a4506001610191565b5060005b92915050565b80516001600160a01b03811681146101ae57600080fd5b919050565b6000806000606084860312156101c857600080fd5b6101d184610197565b92506101df60208501610197565b91506101ed60408501610197565b90509250925092565b6080516111de61022d60003960008181610132015281816103c5015281816104270152818161065801526106ba01526111de6000f3fe608060405234801561001057600080fd5b50600436106101005760003560e01c80638456cb5911610097578063c8a0236211610066578063c8a0236214610276578063d547741f14610289578063d9caed121461029c578063e63ab1e9146102af57600080fd5b80638456cb59146101f957806385f438c11461020157806391d1485414610228578063a217fddf1461026e57600080fd5b80632f2ff15d116100d35780632f2ff15d146101c057806336568abe146101d35780633f4ba83a146101e65780635c975abb146101ee57600080fd5b806301ffc9a714610105578063116191b61461012d57806321fc65f214610179578063248a9ca31461018e575b600080fd5b610118610113366004610f04565b6102d6565b60405190151581526020015b60405180910390f35b6101547f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610124565b61018c610187366004610f6f565b61036f565b005b6101b261019c36600461100c565b6000908152600160208190526040909120015490565b604051908152602001610124565b61018c6101ce366004611025565b610511565b61018c6101e1366004611025565b61053d565b61018c61059b565b60025460ff16610118565b61018c6105d0565b6101b27f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b610118610236366004611025565b600091825260016020908152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b6101b2600081565b61018c610284366004610f6f565b610602565b61018c610297366004611025565b61078a565b61018c6102aa366004611051565b6107b0565b6101b27f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061036957507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b61037761087d565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e46103a1816108c0565b6103a96108ca565b6103ea73ffffffffffffffffffffffffffffffffffffffff87167f000000000000000000000000000000000000000000000000000000000000000086610909565b6040517f5131ab5900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690635131ab599061046490899089908990899089906004016110d7565b600060405180830381600087803b15801561047e57600080fd5b505af1158015610492573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167f85b5be9cf454e05e0bddf49315178102227c312078eefa3c00294fb4d912ae4e8686866040516104f793929190611134565b60405180910390a35061050a6001600055565b5050505050565b6000828152600160208190526040909120015461052d816108c0565b6105378383610996565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8116331461058c576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6105968282610a61565b505050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a6105c5816108c0565b6105cd610b20565b50565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a6105fa816108c0565b6105cd610b9d565b61060a61087d565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e4610634816108c0565b61063c6108ca565b61067d73ffffffffffffffffffffffffffffffffffffffff87167f000000000000000000000000000000000000000000000000000000000000000086610909565b6040517fb8969bd400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063b8969bd4906106f790899089908990899089906004016110d7565b600060405180830381600087803b15801561071157600080fd5b505af1158015610725573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fb9d4efa96044e5f5e03e696fa9ae2ff66911cc27e8a637c3627c75bc5b2241c88686866040516104f793929190611134565b600082815260016020819052604090912001546107a6816108c0565b6105378383610a61565b6107b861087d565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e46107e2816108c0565b6107ea6108ca565b61080b73ffffffffffffffffffffffffffffffffffffffff85168484610909565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f9b1bfa7fa9ee420a16e124f794c35ac9f90472acc99140eb2f6447c714cad8eb8460405161086a91815260200190565b60405180910390a3506105966001600055565b6002600054036108b9576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b6105cd8133610bf8565b60025460ff1615610907576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6040805173ffffffffffffffffffffffffffffffffffffffff8416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb00000000000000000000000000000000000000000000000000000000179052610596908490610c89565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff16610a5957600083815260016020818152604080842073ffffffffffffffffffffffffffffffffffffffff8716808652925280842080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a4506001610369565b506000610369565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff1615610a5957600083815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8616808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a4506001610369565b610b28610d1f565b600280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b610ba56108ca565b600280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258610b733390565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16610c85576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82166004820152602481018390526044015b60405180910390fd5b5050565b6000610cab73ffffffffffffffffffffffffffffffffffffffff841683610d5b565b90508051600014158015610cd0575080806020019051810190610cce9190611157565b155b15610596576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84166004820152602401610c7c565b60025460ff16610907576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6060610d6983836000610d70565b9392505050565b606081471015610dae576040517fcd786059000000000000000000000000000000000000000000000000000000008152306004820152602401610c7c565b6000808573ffffffffffffffffffffffffffffffffffffffff168486604051610dd79190611179565b60006040518083038185875af1925050503d8060008114610e14576040519150601f19603f3d011682016040523d82523d6000602084013e610e19565b606091505b5091509150610e29868383610e33565b9695505050505050565b606082610e4857610e4382610ec2565b610d69565b8151158015610e6c575073ffffffffffffffffffffffffffffffffffffffff84163b155b15610ebb576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85166004820152602401610c7c565b5080610d69565b805115610ed25780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060208284031215610f1657600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610d6957600080fd5b803573ffffffffffffffffffffffffffffffffffffffff81168114610f6a57600080fd5b919050565b600080600080600060808688031215610f8757600080fd5b610f9086610f46565b9450610f9e60208701610f46565b935060408601359250606086013567ffffffffffffffff811115610fc157600080fd5b8601601f81018813610fd257600080fd5b803567ffffffffffffffff811115610fe957600080fd5b886020828401011115610ffb57600080fd5b959894975092955050506020019190565b60006020828403121561101e57600080fd5b5035919050565b6000806040838503121561103857600080fd5b8235915061104860208401610f46565b90509250929050565b60008060006060848603121561106657600080fd5b61106f84610f46565b925061107d60208501610f46565b929592945050506040919091013590565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff8616815273ffffffffffffffffffffffffffffffffffffffff8516602082015283604082015260806060820152600061112960808301848661108e565b979650505050505050565b83815260406020820152600061114e60408301848661108e565b95945050505050565b60006020828403121561116957600080fd5b81518015158114610d6957600080fd5b6000825160005b8181101561119a5760208186018101518583015201611180565b50600092019182525091905056fea264697066735822122035ca457bdc8b45adde9844ff8416a0abd723c23055fd6933ddc05523b5f5b6de64736f6c634300081a003360c060405260001960035534801561001657600080fd5b506040516117f93803806117f9833981016040819052610035916101f5565b60016000819055805460ff19169055838383836001600160a01b038416158061006557506001600160a01b038316155b8061007757506001600160a01b038216155b8061008957506001600160a01b038116155b156100a75760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b03808516608052831660a0526100c5600082610129565b506100f07f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e483610129565b5061011b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a82610129565b505050505050505050610249565b60008281526002602090815260408083206001600160a01b038516845290915281205460ff166101cf5760008381526002602090815260408083206001600160a01b03861684529091529020805460ff191660011790556101873390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45060016101d3565b5060005b92915050565b80516001600160a01b03811681146101f057600080fd5b919050565b6000806000806080858703121561020b57600080fd5b610214856101d9565b9350610222602086016101d9565b9250610230604086016101d9565b915061023e606086016101d9565b905092959194509250565b60805160a0516115306102c9600039600081816102120152818161046f015281816105b1015281816106770152818161077c0152818161089e01528181610a5201528181610b9401528181610c5a0152610db10152600081816101c60152818161057b0152818161064801528181610b5e0152610c2b01526115306000f3fe608060405234801561001057600080fd5b506004361061016c5760003560e01c80635e3e9fef116100cd57806391d1485411610081578063d547741f11610066578063d547741f14610354578063d5abeb0114610367578063e63ab1e91461037057600080fd5b806391d1485414610306578063a217fddf1461034c57600080fd5b8063743e0c9b116100b2578063743e0c9b146102c45780638456cb59146102d757806385f438c1146102df57600080fd5b80635e3e9fef1461029e5780636f8b44b0146102b157600080fd5b8063248a9ca31161012457806336568abe1161010957806336568abe146102785780633f4ba83a1461028b5780635c975abb1461029357600080fd5b8063248a9ca3146102345780632f2ff15d1461026557600080fd5b8063106e629011610155578063106e6290146101ae578063116191b6146101c157806321e093b11461020d57600080fd5b806301ffc9a71461017157806302d5c89914610199575b600080fd5b61018461017f366004611262565b610397565b60405190151581526020015b60405180910390f35b6101ac6101a73660046112d4565b610430565b005b6101ac6101bc366004611366565b61073d565b6101e87f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610190565b6101e87f000000000000000000000000000000000000000000000000000000000000000081565b610257610242366004611399565b60009081526002602052604090206001015490565b604051908152602001610190565b6101ac6102733660046113b2565b61095a565b6101ac6102863660046113b2565b610985565b6101ac6109de565b60015460ff16610184565b6101ac6102ac3660046112d4565b610a13565b6101ac6102bf366004611399565b610d06565b6101ac6102d2366004611399565b610d74565b6101ac610e1e565b6102577f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b6101846103143660046113b2565b600091825260026020908152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b610257600081565b6101ac6103623660046113b2565b610e50565b61025760035481565b6102577f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061042a57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b610438610e75565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461046281610eb8565b61046a610ec2565b6003547f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156104d8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104fc91906113de565b61050690876113f7565b111561053e576040517fc30436e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f1e458bee00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116600483015260248201879052604482018490527f00000000000000000000000000000000000000000000000000000000000000001690631e458bee90606401600060405180830381600087803b1580156105f557600080fd5b505af1158015610609573d6000803e3d6000fd5b50506040517fb8969bd400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016925063b8969bd491506106a7907f0000000000000000000000000000000000000000000000000000000000000000908a908a908a908a9060040161147a565b600060405180830381600087803b1580156106c157600080fd5b505af11580156106d5573d6000803e3d6000fd5b505050508573ffffffffffffffffffffffffffffffffffffffff167fba96f26bdda53eb8c8ba39045dfb4ff39753fbc7a6edcf250a88e75e78d102fe868686604051610723939291906114d7565b60405180910390a2506107366001600055565b5050505050565b610745610e75565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461076f81610eb8565b610777610ec2565b6003547f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156107e5573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061080991906113de565b61081390856113f7565b111561084b576040517fc30436e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f1e458bee00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff858116600483015260248201859052604482018490527f00000000000000000000000000000000000000000000000000000000000000001690631e458bee90606401600060405180830381600087803b1580156108e257600080fd5b505af11580156108f6573d6000803e3d6000fd5b505050508373ffffffffffffffffffffffffffffffffffffffff167f884edad9ce6fa2440d8a54cc123490eb96d2768479d49ff9c7366125a94243648460405161094291815260200190565b60405180910390a2506109556001600055565b505050565b60008281526002602052604090206001015461097581610eb8565b61097f8383610f01565b50505050565b73ffffffffffffffffffffffffffffffffffffffff811633146109d4576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6109558282611001565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610a0881610eb8565b610a106110c0565b50565b610a1b610e75565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e4610a4581610eb8565b610a4d610ec2565b6003547f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610abb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610adf91906113de565b610ae990876113f7565b1115610b21576040517fc30436e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f1e458bee00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116600483015260248201879052604482018490527f00000000000000000000000000000000000000000000000000000000000000001690631e458bee90606401600060405180830381600087803b158015610bd857600080fd5b505af1158015610bec573d6000803e3d6000fd5b50506040517f5131ab5900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169250635131ab599150610c8a907f0000000000000000000000000000000000000000000000000000000000000000908a908a908a908a9060040161147a565b600060405180830381600087803b158015610ca457600080fd5b505af1158015610cb8573d6000803e3d6000fd5b505050508573ffffffffffffffffffffffffffffffffffffffff167f7772f56296d3a5202974a45c61c9188d844ab4d6eeb18c851e4b8d5384ca6ced868686604051610723939291906114d7565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e4610d3081610eb8565b610d38610ec2565b60038290556040518281527f7810bd47de260c3e9ee10061cf438099dd12256c79485f12f94dbccc981e806c9060200160405180910390a15050565b610d7c610ec2565b6040517f79cc6790000000000000000000000000000000000000000000000000000000008152336004820152602481018290527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16906379cc679090604401600060405180830381600087803b158015610e0a57600080fd5b505af1158015610736573d6000803e3d6000fd5b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610e4881610eb8565b610a1061113d565b600082815260026020526040902060010154610e6b81610eb8565b61097f8383611001565b600260005403610eb1576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b610a108133611196565b60015460ff1615610eff576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff16610ff957600083815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff86168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055610f973390565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a450600161042a565b50600061042a565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff1615610ff957600083815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8616808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a450600161042a565b6110c8611226565b600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b611145610ec2565b600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016811790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25833611113565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16611222576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff821660048201526024810183905260440160405180910390fd5b5050565b60015460ff16610eff576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006020828403121561127457600080fd5b81357fffffffff00000000000000000000000000000000000000000000000000000000811681146112a457600080fd5b9392505050565b803573ffffffffffffffffffffffffffffffffffffffff811681146112cf57600080fd5b919050565b6000806000806000608086880312156112ec57600080fd5b6112f5866112ab565b945060208601359350604086013567ffffffffffffffff81111561131857600080fd5b8601601f8101881361132957600080fd5b803567ffffffffffffffff81111561134057600080fd5b88602082840101111561135257600080fd5b959894975060200195606001359392505050565b60008060006060848603121561137b57600080fd5b611384846112ab565b95602085013595506040909401359392505050565b6000602082840312156113ab57600080fd5b5035919050565b600080604083850312156113c557600080fd5b823591506113d5602084016112ab565b90509250929050565b6000602082840312156113f057600080fd5b5051919050565b8082018082111561042a577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff8616815273ffffffffffffffffffffffffffffffffffffffff851660208201528360408201526080606082015260006114cc608083018486611431565b979650505050505050565b8381526040602082015260006114f1604083018486611431565b9594505050505056fea264697066735822122083f8ba25d15d0dacb4bf73d1472e680a549b02f1b26b83dcb21bfef553fb6e1d64736f6c634300081a00336080604052348015600f57600080fd5b506001600055610d3a806100246000396000f3fe6080604052600436106100635760003560e01c8063c513169111610040578063c5131691146100c1578063e04d4f97146100e1578063f05b6abf146100f457005b8063357fc5a21461006c5780636ed701691461008c5780638fcaa0b5146100a157005b3661006a57005b005b34801561007857600080fd5b5061006a6100873660046106c0565b610114565b34801561009857600080fd5b5061006a6101aa565b3480156100ad57600080fd5b5061006a6100bc3660046106fc565b6101df565b3480156100cd57600080fd5b5061006a6100dc3660046106c0565b61021e565b61006a6100ef366004610895565b6102f9565b34801561010057600080fd5b5061006a61010f366004610981565b61033d565b61011c610372565b61013e73ffffffffffffffffffffffffffffffffffffffff83163383866103b5565b604080513381526020810185905273ffffffffffffffffffffffffffffffffffffffff848116828401528316606082015290517f2b58128f24a9f59127cc5b5430d70542b22220f2d9adaa86e442b816ab98af609181900360800190a16101a56001600055565b505050565b6040513381527fbcaadb46b82a48af60b608f58959ae6b8310d1b0a0d094c2e9ec3208ed39f2a09060200160405180910390a1565b7f0d3f65f00e631663aa85c96330b5c7a83bb29af3630c0063776f985edc3037aa33838360405161021293929190610a6b565b60405180910390a15050565b610226610372565b6000610233600285610ad5565b90508060000361026f576040517f1f2a200500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61029173ffffffffffffffffffffffffffffffffffffffff84163384846103b5565b604080513381526020810183905273ffffffffffffffffffffffffffffffffffffffff858116828401528416606082015290517f2b58128f24a9f59127cc5b5430d70542b22220f2d9adaa86e442b816ab98af609181900360800190a1506101a56001600055565b7f1f1ff1f5fb41346850b2f5c04e6c767e2f1c8a525c5c0c5cdb60cdf3ca5f62fa3334858585604051610330959493929190610b7e565b60405180910390a1505050565b7f74a53cd528a921fca7dbdee62f86819051d3cc98f214951f4238e8843f20b146338484846040516103309493929190610c08565b6002600054036103ae576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b6040805173ffffffffffffffffffffffffffffffffffffffff85811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd0000000000000000000000000000000000000000000000000000000017905261044a908590610450565b50505050565b600061047273ffffffffffffffffffffffffffffffffffffffff8416836104eb565b905080516000141580156104975750808060200190518101906104959190610ccb565b155b156101a5576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff841660048201526024015b60405180910390fd5b60606104f983836000610500565b9392505050565b60608147101561053e576040517fcd7860590000000000000000000000000000000000000000000000000000000081523060048201526024016104e2565b6000808573ffffffffffffffffffffffffffffffffffffffff1684866040516105679190610ce8565b60006040518083038185875af1925050503d80600081146105a4576040519150601f19603f3d011682016040523d82523d6000602084013e6105a9565b606091505b50915091506105b98683836105c3565b9695505050505050565b6060826105d8576105d382610652565b6104f9565b81511580156105fc575073ffffffffffffffffffffffffffffffffffffffff84163b155b1561064b576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff851660048201526024016104e2565b50806104f9565b8051156106625780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50565b803573ffffffffffffffffffffffffffffffffffffffff811681146106bb57600080fd5b919050565b6000806000606084860312156106d557600080fd5b833592506106e560208501610697565b91506106f360408501610697565b90509250925092565b6000806020838503121561070f57600080fd5b823567ffffffffffffffff81111561072657600080fd5b8301601f8101851361073757600080fd5b803567ffffffffffffffff81111561074e57600080fd5b85602082840101111561076057600080fd5b6020919091019590945092505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156107e6576107e6610770565b604052919050565b600082601f8301126107ff57600080fd5b813567ffffffffffffffff81111561081957610819610770565b61084a60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8401160161079f565b81815284602083860101111561085f57600080fd5b816020850160208301376000918101602001919091529392505050565b801515811461069457600080fd5b80356106bb8161087c565b6000806000606084860312156108aa57600080fd5b833567ffffffffffffffff8111156108c157600080fd5b6108cd868287016107ee565b9350506020840135915060408401356108e58161087c565b809150509250925092565b600067ffffffffffffffff82111561090a5761090a610770565b5060051b60200190565b600082601f83011261092557600080fd5b8135610938610933826108f0565b61079f565b8082825260208201915060208360051b86010192508583111561095a57600080fd5b602085015b8381101561097757803583526020928301920161095f565b5095945050505050565b60008060006060848603121561099657600080fd5b833567ffffffffffffffff8111156109ad57600080fd5b8401601f810186136109be57600080fd5b80356109cc610933826108f0565b8082825260208201915060208360051b8501019250888311156109ee57600080fd5b602084015b83811015610a3057803567ffffffffffffffff811115610a1257600080fd5b610a218b6020838901016107ee565b845250602092830192016109f3565b509550505050602084013567ffffffffffffffff811115610a5057600080fd5b610a5c86828701610914565b9250506106f36040850161088a565b73ffffffffffffffffffffffffffffffffffffffff8416815260406020820152816040820152818360608301376000818301606090810191909152601f9092017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016010192915050565b600082610b0b577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60005b83811015610b2b578181015183820152602001610b13565b50506000910152565b60008151808452610b4c816020860160208601610b10565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b73ffffffffffffffffffffffffffffffffffffffff8616815284602082015260a060408201526000610bb360a0830186610b34565b6060830194909452509015156080909101529392505050565b600081518084526020840193506020830160005b82811015610bfe578151865260209586019590910190600101610be0565b5093949350505050565b60006080820173ffffffffffffffffffffffffffffffffffffffff871683526080602084015280865180835260a08501915060a08160051b86010192506020880160005b82811015610c9b577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60878603018452610c86858351610b34565b94506020938401939190910190600101610c4c565b505050508281036040840152610cb18186610bcc565b915050610cc2606083018415159052565b95945050505050565b600060208284031215610cdd57600080fd5b81516104f98161087c565b60008251610cfa818460208701610b10565b919091019291505056fea2646970667358221220556072e1abafc3c4063b8cce832228b4f309b93726aaa6a6dfab20cb880c6d1864736f6c634300081a0033a2646970667358221220d1fcd333f2be8f2308a5789aef68c9f8f0e3fe64e255e30e1b8af263f1c83c6064736f6c634300081a0033", + ABI: "[{\"type\":\"function\",\"name\":\"ASSET_HANDLER_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"DEFAULT_ADMIN_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"IS_TEST\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"PAUSER_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"TSS_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"WITHDRAWER_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeArtifacts\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedArtifacts_\",\"type\":\"string[]\",\"internalType\":\"string[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeContracts\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedContracts_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeSelectors\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedSelectors_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzSelector[]\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"selectors\",\"type\":\"bytes4[]\",\"internalType\":\"bytes4[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeSenders\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedSenders_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"failed\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"setUp\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"targetArtifactSelectors\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedArtifactSelectors_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzArtifactSelector[]\",\"components\":[{\"name\":\"artifact\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"selectors\",\"type\":\"bytes4[]\",\"internalType\":\"bytes4[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetArtifacts\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedArtifacts_\",\"type\":\"string[]\",\"internalType\":\"string[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetContracts\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedContracts_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetInterfaces\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedInterfaces_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzInterface[]\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"artifacts\",\"type\":\"string[]\",\"internalType\":\"string[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetSelectors\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedSelectors_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzSelector[]\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"selectors\",\"type\":\"bytes4[]\",\"internalType\":\"bytes4[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetSenders\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedSenders_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"testExecuteFailsIfDestinationIsZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testExecuteRevert\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testExecuteRevertFailsIfReceiverIsZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testExecuteRevertFailsIfSenderIsNotTSS\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testExecuteWithERC20FailsIfNotCustodyOrConnector\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testForwardCallToReceiveNoParams\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testForwardCallToReceiveNoParamsTogglePause\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testForwardCallToReceiveNonPayable\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testForwardCallToReceiveNonPayableFailsIfSenderIsNotTSS\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testForwardCallToReceivePayable\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testRevertWithERC20FailsIfNotCustodyOrConnector\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testSetConnectorFailsIfSenderIsNotAdmin\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testSetConnectorFailsIfSet\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testSetConnectorFailsIfZero\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testSetCustodyFailsIfSenderIsNotAdmin\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testSetCustodyFailsIfSet\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testSetCustodyFailsIfZero\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"event\",\"name\":\"Call\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"receiver\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Deposit\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"receiver\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"asset\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Executed\",\"inputs\":[{\"name\":\"destination\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ExecutedWithERC20\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedERC20\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"token\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"destination\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedNoParams\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedNonPayable\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"strs\",\"type\":\"string[]\",\"indexed\":false,\"internalType\":\"string[]\"},{\"name\":\"nums\",\"type\":\"uint256[]\",\"indexed\":false,\"internalType\":\"uint256[]\"},{\"name\":\"flag\",\"type\":\"bool\",\"indexed\":false,\"internalType\":\"bool\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedPayable\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"str\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"num\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"flag\",\"type\":\"bool\",\"indexed\":false,\"internalType\":\"bool\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedRevert\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Reverted\",\"inputs\":[{\"name\":\"destination\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RevertedWithERC20\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Withdraw\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"WithdrawAndCall\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"WithdrawAndRevert\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log\",\"inputs\":[{\"name\":\"\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_address\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_array\",\"inputs\":[{\"name\":\"val\",\"type\":\"uint256[]\",\"indexed\":false,\"internalType\":\"uint256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_array\",\"inputs\":[{\"name\":\"val\",\"type\":\"int256[]\",\"indexed\":false,\"internalType\":\"int256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_array\",\"inputs\":[{\"name\":\"val\",\"type\":\"address[]\",\"indexed\":false,\"internalType\":\"address[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_bytes\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_bytes32\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_int\",\"inputs\":[{\"name\":\"\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_address\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_array\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"uint256[]\",\"indexed\":false,\"internalType\":\"uint256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_array\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"int256[]\",\"indexed\":false,\"internalType\":\"int256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_array\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"address[]\",\"indexed\":false,\"internalType\":\"address[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_bytes\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_bytes32\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_decimal_int\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"},{\"name\":\"decimals\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_decimal_uint\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"decimals\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_int\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_string\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_uint\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_string\",\"inputs\":[{\"name\":\"\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_uint\",\"inputs\":[{\"name\":\"\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"logs\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"AccessControlUnauthorizedAccount\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"neededRole\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"type\":\"error\",\"name\":\"ApprovalFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ConnectorInitialized\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"CustodyInitialized\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"DepositFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"EnforcedPause\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ExecutionFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientERC20Amount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientETHAmount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZeroAddress\",\"inputs\":[]}]", + Bin: "0x6080604052600c8054600160ff199182168117909255601f80549091169091179055348015602c57600080fd5b5061f42d8061003c6000396000f3fe608060405234801561001057600080fd5b50600436106102415760003560e01c8063a217fddf11610145578063cebad2a6116100bd578063e6afc7901161008c578063fa18c09b11610071578063fa18c09b1461042c578063fa7626d414610434578063fe7bdbb21461044157600080fd5b8063e6afc7901461041c578063f68bd1c01461042457600080fd5b8063cebad2a6146103dd578063dd51e82f146103e5578063e20c9f71146103ed578063e63ab1e9146103f557600080fd5b8063b124dbf511610114578063ba414fa6116100f9578063ba414fa6146103b5578063ccf20616146103cd578063ce5871e1146103d557600080fd5b8063b124dbf5146103a5578063b5508aa9146103ad57600080fd5b8063a217fddf14610366578063a56f7a4b1461036e578063a783c78914610376578063b0464fdc1461039d57600080fd5b806344671b94116101d85780637d7f772a116101a757806385226c811161018c57806385226c811461031557806385f438c11461032a578063916a17c61461035157600080fd5b80637d7f772a146103055780637ebf744f1461030d57600080fd5b806344671b94146102ab57806351010e49146102b35780635d62c860146102bb57806366d9a9a0146102f057600080fd5b80631ed7831c116102145780631ed7831c146102685780632ade3880146102865780633e5e3c231461029b5780633f7286f4146102a357600080fd5b806304b974f9146102465780630a9254e4146102505780631226c655146102585780631855c33714610260575b600080fd5b61024e610449565b005b61024e610656565b61024e610fb8565b61024e611129565b61027061129e565b60405161027d9190618684565b60405180910390f35b61028e611300565b60405161027d9190618720565b610270611442565b6102706114a2565b61024e611502565b61024e611881565b6102e27f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b981565b60405190815260200161027d565b6102f8611a5a565b60405161027d9190618886565b61024e611bdc565b61024e611f3f565b61031d6120b4565b60405161027d9190618980565b6102e27f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b610359612184565b60405161027d9190618993565b6102e2600081565b61024e61227f565b6102e27f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb81565b6103596123d1565b61024e6124cc565b61031d612770565b6103bd612840565b604051901515815260200161027d565b61024e612914565b61024e612a66565b61024e612bd7565b61024e612df8565b6102706135ed565b6102e27f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b61024e61364d565b61024e6138bb565b61024e613cb0565b601f546103bd9060ff1681565b61024e614008565b6040805160048082526024820183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f6ed7016900000000000000000000000000000000000000000000000000000000179052602854925163ca669fa760e01b81529192737109709ecfa91a80626ff3989d68f67f5b1dd12d9263ca669fa7926104f0926001600160a01b031691016001600160a01b0391909116815260200190565b600060405180830381600087803b15801561050a57600080fd5b505af115801561051e573d6000803e3d6000fd5b50506040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b1580156105a757600080fd5b505af11580156105bb573d6000803e3d6000fd5b50506020546040517f1cff79cd0000000000000000000000000000000000000000000000000000000081526001600160a01b039091169250631cff79cd915061060b906000908590600401618a2a565b6000604051808303816000875af115801561062a573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526106529190810190618b34565b5050565b602680547fffffffffffffffffffffffff00000000000000000000000000000000000000009081163017909155602780548216611234179055602880549091166156781790556040516106a89061858a565b60408082526004908201527f746573740000000000000000000000000000000000000000000000000000000060608201526080602082018190526003908201527f54544b000000000000000000000000000000000000000000000000000000000060a082015260c001604051809103906000f08015801561072d573d6000803e3d6000fd5b50602480547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03928316179055602854604051911690819061077690618597565b6001600160a01b03928316815291166020820152604001604051809103906000f0801580156107a9573d6000803e3d6000fd5b50602580547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03928316908117909155604080518082018252600e81527f4761746577617945564d2e736f6c000000000000000000000000000000000000602082015260285460265492519085166024820152604481019390935292166064820152610898919060840160408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fc0c53b8b0000000000000000000000000000000000000000000000000000000017905261447d565b601f80547fffffffffffffffffffffff0000000000000000000000000000000000000000ff166101006001600160a01b0393841681029190911791829055602080549190920483167fffffffffffffffffffffffff00000000000000000000000000000000000000009091168117909155602854602654604051929391821692911690610924906185a4565b6001600160a01b03938416815291831660208301529091166040820152606001604051809103906000f080158015610960573d6000803e3d6000fd5b50602280547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392831617905560205460255460285460265460405193851694928316939183169216906109bb906185b1565b6001600160a01b039485168152928416602084015290831660408301529091166060820152608001604051809103906000f0801580156109ff573d6000803e3d6000fd5b50602380547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392831617905560285460405163ca669fa760e01b815291166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015610a8457600080fd5b505af1158015610a98573d6000803e3d6000fd5b50506025546028546023546040517f15d57fd40000000000000000000000000000000000000000000000000000000081526001600160a01b0392831660048201529082166024820152911692506315d57fd49150604401600060405180830381600087803b158015610b0957600080fd5b505af1158015610b1d573d6000803e3d6000fd5b50505050604051610b2d906185be565b604051809103906000f080158015610b49573d6000803e3d6000fd5b50602180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039283161790556028546040517fc88a5e6d00000000000000000000000000000000000000000000000000000000815291166004820152670de0b6b3a76400006024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c88a5e6d90604401600060405180830381600087803b158015610bf557600080fd5b505af1158015610c09573d6000803e3d6000fd5b50506026546040517f06447d560000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506306447d569150602401600060405180830381600087803b158015610c7f57600080fd5b505af1158015610c93573d6000803e3d6000fd5b50506020546022546040517fae7a3a6f0000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201529116925063ae7a3a6f9150602401600060405180830381600087803b158015610cf957600080fd5b505af1158015610d0d573d6000803e3d6000fd5b50506020546023546040517f10188aef0000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152911692506310188aef9150602401600060405180830381600087803b158015610d7357600080fd5b505af1158015610d87573d6000803e3d6000fd5b505050507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b03166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610de957600080fd5b505af1158015610dfd573d6000803e3d6000fd5b5050602480546026546040517f40c10f190000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620f4240938101939093521692506340c10f199150604401600060405180830381600087803b158015610e6e57600080fd5b505af1158015610e82573d6000803e3d6000fd5b5050602480546022546040517fa9059cbb0000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201526207a1209381019390935216925063a9059cbb91506044016020604051808303816000875af1158015610ef8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f1c9190618b69565b506028546040517fc88a5e6d0000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152670de0b6b3a76400006024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c88a5e6d906044015b600060405180830381600087803b158015610f9e57600080fd5b505af1158015610fb2573d6000803e3d6000fd5b50505050565b6026546040517f06447d560000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906306447d5690602401600060405180830381600087803b15801561102a57600080fd5b505af115801561103e573d6000803e3d6000fd5b50506040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b1580156110c757600080fd5b505af11580156110db573d6000803e3d6000fd5b50506020546040517fae7a3a6f000000000000000000000000000000000000000000000000000000008152600060048201526001600160a01b03909116925063ae7a3a6f9150602401610f84565b6026546040517f06447d560000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906306447d5690602401600060405180830381600087803b15801561119b57600080fd5b505af11580156111af573d6000803e3d6000fd5b50506040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fb337f378000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e091506024015b600060405180830381600087803b15801561123957600080fd5b505af115801561124d573d6000803e3d6000fd5b50506020546022546040517fae7a3a6f0000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201529116925063ae7a3a6f9150602401610f84565b606060168054806020026020016040519081016040528092919081815260200182805480156112f657602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116112d8575b5050505050905090565b6060601e805480602002602001604051908101604052809291908181526020016000905b8282101561143957600084815260208082206040805180820182526002870290920180546001600160a01b03168352600181018054835181870281018701909452808452939591948681019491929084015b8282101561142257838290600052602060002001805461139590618b8b565b80601f01602080910402602001604051908101604052809291908181526020018280546113c190618b8b565b801561140e5780601f106113e35761010080835404028352916020019161140e565b820191906000526020600020905b8154815290600101906020018083116113f157829003601f168201915b505050505081526020019060010190611376565b505050508152505081526020019060010190611324565b50505050905090565b606060188054806020026020016040519081016040528092919081815260200182805480156112f6576020028201919060005260206000209081546001600160a01b031681526001909101906020018083116112d8575050505050905090565b606060178054806020026020016040519081016040528092919081815260200182805480156112f6576020028201919060005260206000209081546001600160a01b031681526001909101906020018083116112d8575050505050905090565b6040805160048082526024820183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f6ed701690000000000000000000000000000000000000000000000000000000017905260215492517ff30c7ba30000000000000000000000000000000000000000000000000000000081529192737109709ecfa91a80626ff3989d68f67f5b1dd12d9263f30c7ba3926115b8926001600160a01b031691600091879101618bd8565b600060405180830381600087803b1580156115d257600080fd5b505af11580156115e6573d6000803e3d6000fd5b50506021546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b15801561167857600080fd5b505af115801561168c573d6000803e3d6000fd5b5050602080546040516001600160a01b0390911681527fbcaadb46b82a48af60b608f58959ae6b8310d1b0a0d094c2e9ec3208ed39f2a0935001905060405180910390a16020546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b15801561175e57600080fd5b505af1158015611772573d6000803e3d6000fd5b50506021546040516001600160a01b0390911692507fcaf938de11c367272220bfd1d2baa99ca46665e7bc4d85f00adb51b90fe1fa9f91506117b8906000908590618c00565b60405180910390a260285460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561181957600080fd5b505af115801561182d573d6000803e3d6000fd5b50506020546021546040517f1cff79cd0000000000000000000000000000000000000000000000000000000081526001600160a01b039283169450631cff79cd935061060b92909116908590600401618a2a565b6040517f68656c6c6f0000000000000000000000000000000000000000000000000000006020820152670de0b6b3a76400009060009060250160408051808303601f190181529082905260285463ca669fa760e01b83526001600160a01b031660048301529150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561192157600080fd5b505af1158015611935573d6000803e3d6000fd5b50506040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b1580156119be57600080fd5b505af11580156119d2573d6000803e3d6000fd5b50506020546040517f35c018db0000000000000000000000000000000000000000000000000000000081526001600160a01b0390911692506335c018db91508490611a24906000908690600401618a2a565b6000604051808303818588803b158015611a3d57600080fd5b505af1158015611a51573d6000803e3d6000fd5b50505050505050565b6060601b805480602002602001604051908101604052809291908181526020016000905b828210156114395783829060005260206000209060020201604051806040016040529081600082018054611ab190618b8b565b80601f0160208091040260200160405190810160405280929190818152602001828054611add90618b8b565b8015611b2a5780601f10611aff57610100808354040283529160200191611b2a565b820191906000526020600020905b815481529060010190602001808311611b0d57829003601f168201915b5050505050815260200160018201805480602002602001604051908101604052809291908181526020018280548015611bc457602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019060040190602082600301049283019260010382029150808411611b715790505b50505050508152505081526020019060010190611a7e565b604080516001808252818301909252600091816020015b6060815260200190600190039081611bf35790505090506040518060400160405280600f81526020017f48656c6c6f2c20466f756e64727921000000000000000000000000000000000081525081600081518110611c5357611c53618c19565b6020908102919091010152604080516001808252818301909252600091816020016020820280368337019050509050602a81600081518110611c9757611c97618c19565b6020908102919091010152604051600190600090611cbd90859085908590602401618c7a565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167ff05b6abf00000000000000000000000000000000000000000000000000000000179052602654905163ca669fa760e01b81526001600160a01b039091166004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015611d7057600080fd5b505af1158015611d84573d6000803e3d6000fd5b5050602654604080516001600160a01b0390921660248301527f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb60448084019190915281518084039091018152606490920181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb39250611e6f9190600401618cb2565b600060405180830381600087803b158015611e8957600080fd5b505af1158015611e9d573d6000803e3d6000fd5b50506020546021546040517f1cff79cd0000000000000000000000000000000000000000000000000000000081526001600160a01b039283169450631cff79cd9350611ef192909116908590600401618a2a565b6000604051808303816000875af1158015611f10573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611f389190810190618b34565b5050505050565b6026546040517f06447d560000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906306447d5690602401600060405180830381600087803b158015611fb157600080fd5b505af1158015611fc5573d6000803e3d6000fd5b50506040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527f0c8dc016000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e091506024015b600060405180830381600087803b15801561204f57600080fd5b505af1158015612063573d6000803e3d6000fd5b50506020546023546040517f10188aef0000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152911692506310188aef9150602401610f84565b6060601a805480602002602001604051908101604052809291908181526020016000905b828210156114395783829060005260206000200180546120f790618b8b565b80601f016020809104026020016040519081016040528092919081815260200182805461212390618b8b565b80156121705780601f1061214557610100808354040283529160200191612170565b820191906000526020600020905b81548152906001019060200180831161215357829003601f168201915b5050505050815260200190600101906120d8565b6060601d805480602002602001604051908101604052809291908181526020016000905b828210156114395760008481526020908190206040805180820182526002860290920180546001600160a01b0316835260018101805483518187028101870190945280845293949193858301939283018282801561226757602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190600401906020826003010492830192600103820291508084116122145790505b505050505081525050815260200190600101906121a8565b6028546040517f06447d560000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906306447d5690602401600060405180830381600087803b1580156122f157600080fd5b505af1158015612305573d6000803e3d6000fd5b5050602854604080516001600160a01b039092166024830152600060448084019190915281518084039091018152606490920181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb3925061121f9190600401618cb2565b6060601c805480602002602001604051908101604052809291908181526020016000905b828210156114395760008481526020908190206040805180820182526002860290920180546001600160a01b031683526001810180548351818702810187019094528084529394919385830193928301828280156124b457602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190600401906020826003010492830192600103820291508084116124615790505b505050505081525050815260200190600101906123f5565b60248054602754604051620186a09381018490526001600160a01b0392831660448201529116606482015260009060840160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f357fc5a200000000000000000000000000000000000000000000000000000000179052602654905163ca669fa760e01b81526001600160a01b039091166004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156125b057600080fd5b505af11580156125c4573d6000803e3d6000fd5b5050602654604080516001600160a01b0390921660248301527f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b960448084019190915281518084039091018152606490920181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb392506126af9190600401618cb2565b600060405180830381600087803b1580156126c957600080fd5b505af11580156126dd573d6000803e3d6000fd5b50506020546024546027546040517fb8969bd40000000000000000000000000000000000000000000000000000000081526001600160a01b03938416955063b8969bd4945061273a93928316929091169087908790600401618cc5565b600060405180830381600087803b15801561275457600080fd5b505af1158015612768573d6000803e3d6000fd5b505050505050565b60606019805480602002602001604051908101604052809291908181526020016000905b828210156114395783829060005260206000200180546127b390618b8b565b80601f01602080910402602001604051908101604052809291908181526020018280546127df90618b8b565b801561282c5780601f106128015761010080835404028352916020019161282c565b820191906000526020600020905b81548152906001019060200180831161280f57829003601f168201915b505050505081526020019060010190612794565b60085460009060ff1615612858575060085460ff1690565b6040517f667f9d70000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d600482018190527f6661696c65640000000000000000000000000000000000000000000000000000602483015260009163667f9d7090604401602060405180830381865afa1580156128e9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061290d9190618cfc565b1415905090565b6028546040517f06447d560000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906306447d5690602401600060405180830381600087803b15801561298657600080fd5b505af115801561299a573d6000803e3d6000fd5b5050602854604080516001600160a01b039092166024830152600060448084019190915281518084039091018152606490920181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb392506120359190600401618cb2565b6026546040517f06447d560000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906306447d5690602401600060405180830381600087803b158015612ad857600080fd5b505af1158015612aec573d6000803e3d6000fd5b50506040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b158015612b7557600080fd5b505af1158015612b89573d6000803e3d6000fd5b50506020546040517f10188aef000000000000000000000000000000000000000000000000000000008152600060048201526001600160a01b0390911692506310188aef9150602401610f84565b6040517f68656c6c6f0000000000000000000000000000000000000000000000000000006020820152670de0b6b3a76400009060009060250160408051808303601f190181529082905260265463ca669fa760e01b83526001600160a01b031660048301529150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015612c7757600080fd5b505af1158015612c8b573d6000803e3d6000fd5b5050602654604080516001600160a01b0390921660248301527f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb60448084019190915281518084039091018152606490920181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb39250612d769190600401618cb2565b600060405180830381600087803b158015612d9057600080fd5b505af1158015612da4573d6000803e3d6000fd5b50506020546021546040517f35c018db0000000000000000000000000000000000000000000000000000000081526001600160a01b0392831694506335c018db93508692611a249216908690600401618a2a565b60285460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015612e5157600080fd5b505af1158015612e65573d6000803e3d6000fd5b5050602854604080516001600160a01b0390921660248301527f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a60448084019190915281518084039091018152606490920181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb39250612f509190600401618cb2565b600060405180830381600087803b158015612f6a57600080fd5b505af1158015612f7e573d6000803e3d6000fd5b50505050602060009054906101000a90046001600160a01b03166001600160a01b0316638456cb596040518163ffffffff1660e01b8152600401600060405180830381600087803b158015612fd257600080fd5b505af1158015612fe6573d6000803e3d6000fd5b505060285460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b15801561304357600080fd5b505af1158015613057573d6000803e3d6000fd5b5050602854604080516001600160a01b0390921660248301527f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a60448084019190915281518084039091018152606490920181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb392506131429190600401618cb2565b600060405180830381600087803b15801561315c57600080fd5b505af1158015613170573d6000803e3d6000fd5b50505050602060009054906101000a90046001600160a01b03166001600160a01b0316633f4ba83a6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156131c457600080fd5b505af11580156131d8573d6000803e3d6000fd5b505060265460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b15801561323557600080fd5b505af1158015613249573d6000803e3d6000fd5b50505050602060009054906101000a90046001600160a01b03166001600160a01b0316638456cb596040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561329d57600080fd5b505af11580156132b1573d6000803e3d6000fd5b5050604080516004808252602480830184526020830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f6ed701690000000000000000000000000000000000000000000000000000000017905292517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fd93c06650000000000000000000000000000000000000000000000000000000091810191909152909350737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09101600060405180830381600087803b15801561339357600080fd5b505af11580156133a7573d6000803e3d6000fd5b505060285460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b15801561340457600080fd5b505af1158015613418573d6000803e3d6000fd5b50506020546021546040517f1cff79cd0000000000000000000000000000000000000000000000000000000081526001600160a01b039283169450631cff79cd935061346c92909116908590600401618a2a565b6000604051808303816000875af115801561348b573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526134b39190810190618b34565b5060265460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561350d57600080fd5b505af1158015613521573d6000803e3d6000fd5b50505050602060009054906101000a90046001600160a01b03166001600160a01b0316633f4ba83a6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561357557600080fd5b505af1158015613589573d6000803e3d6000fd5b50506021546040517ff30c7ba3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f30c7ba392506115b8916001600160a01b0316906000908690600401618bd8565b606060158054806020026020016040519081016040528092919081815260200182805480156112f6576020028201919060005260206000209081546001600160a01b031681526001909101906020018083116112d8575050505050905090565b60248054602754604051620186a09381018490526001600160a01b0392831660448201529116606482015260009060840160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f357fc5a200000000000000000000000000000000000000000000000000000000179052602654905163ca669fa760e01b81526001600160a01b039091166004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561373157600080fd5b505af1158015613745573d6000803e3d6000fd5b5050602654604080516001600160a01b0390921660248301527f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b960448084019190915281518084039091018152606490920181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb392506138309190600401618cb2565b600060405180830381600087803b15801561384a57600080fd5b505af115801561385e573d6000803e3d6000fd5b50506020546024546027546040517f5131ab590000000000000000000000000000000000000000000000000000000081526001600160a01b039384169550635131ab59945061273a93928316929091169087908790600401618cc5565b604080516001808252818301909252600091816020015b60608152602001906001900390816138d25790505090506040518060400160405280600f81526020017f48656c6c6f2c20466f756e6472792100000000000000000000000000000000008152508160008151811061393257613932618c19565b6020908102919091010152604080516001808252818301909252600091816020016020820280368337019050509050602a8160008151811061397657613976618c19565b602090810291909101015260405160019060009061399c90859085908590602401618c7a565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167ff05b6abf0000000000000000000000000000000000000000000000000000000017905260215490517ff30c7ba3000000000000000000000000000000000000000000000000000000008152919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f30c7ba391613a59916001600160a01b0391909116906000908690600401618bd8565b600060405180830381600087803b158015613a7357600080fd5b505af1158015613a87573d6000803e3d6000fd5b50506021546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b158015613b1957600080fd5b505af1158015613b2d573d6000803e3d6000fd5b50506020546040517f74a53cd528a921fca7dbdee62f86819051d3cc98f214951f4238e8843f20b1469350613b7492506001600160a01b0390911690879087908790618d15565b60405180910390a16020546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b158015613c0a57600080fd5b505af1158015613c1e573d6000803e3d6000fd5b50506021546040516001600160a01b0390911692507fcaf938de11c367272220bfd1d2baa99ca46665e7bc4d85f00adb51b90fe1fa9f9150613c64906000908590618c00565b60405180910390a260285460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401611e6f565b604080517f68656c6c6f0000000000000000000000000000000000000000000000000000006020820152815160058183030181526025909101909152602154670de0b6b3a764000091906001600160a01b031631613d0f81600061449c565b6021546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b158015613d9d57600080fd5b505af1158015613db1573d6000803e3d6000fd5b50506020546040517f0d3f65f00e631663aa85c96330b5c7a83bb29af3630c0063776f985edc3037aa9350613df492506001600160a01b03909116908590618a2a565b60405180910390a16020546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b158015613e8a57600080fd5b505af1158015613e9e573d6000803e3d6000fd5b50506021546040516001600160a01b0390911692507fd5d7616b1678354a0dea9d7e57e6a090bff5babe9f8d6381fdbad16e89ba311c9150613eeb90670de0b6b3a7640000908690618c00565b60405180910390a260285460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015613f4c57600080fd5b505af1158015613f60573d6000803e3d6000fd5b50506020546021546040517f35c018db0000000000000000000000000000000000000000000000000000000081526001600160a01b0392831694506335c018db93508792613fb49216908790600401618a2a565b6000604051808303818588803b158015613fcd57600080fd5b505af1158015613fe1573d6000803e3d6000fd5b50506021546001600160a01b0316319250610fb29150829050670de0b6b3a764000061449c565b60408051808201909152600f81527f48656c6c6f2c20466f756e6472792100000000000000000000000000000000006020820152602154602a90600190670de0b6b3a764000090614065906000906001600160a01b03163161449c565b600084848460405160240161407c93929190618d5d565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe04d4f970000000000000000000000000000000000000000000000000000000017905260215490517ff30c7ba3000000000000000000000000000000000000000000000000000000008152919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f30c7ba391614140916001600160a01b039190911690670de0b6b3a7640000908690600401618bd8565b600060405180830381600087803b15801561415a57600080fd5b505af115801561416e573d6000803e3d6000fd5b50506021546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b15801561420057600080fd5b505af1158015614214573d6000803e3d6000fd5b50506020546040517f1f1ff1f5fb41346850b2f5c04e6c767e2f1c8a525c5c0c5cdb60cdf3ca5f62fa935061425d92506001600160a01b03909116908590899089908990618d87565b60405180910390a16020546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b1580156142f357600080fd5b505af1158015614307573d6000803e3d6000fd5b50506021546040516001600160a01b0390911692507fcaf938de11c367272220bfd1d2baa99ca46665e7bc4d85f00adb51b90fe1fa9f915061435490670de0b6b3a7640000908590618c00565b60405180910390a260285460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156143b557600080fd5b505af11580156143c9573d6000803e3d6000fd5b50506020546021546040517f1cff79cd0000000000000000000000000000000000000000000000000000000081526001600160a01b039283169450631cff79cd9350869261441d9216908690600401618a2a565b60006040518083038185885af115801561443b573d6000803e3d6000fd5b50505050506040513d6000823e601f3d908101601f191682016040526144649190810190618b34565b50602154611f389083906001600160a01b03163161449c565b60006144876185cb565b61449284848361451b565b9150505b92915050565b6040517f98296c540000000000000000000000000000000000000000000000000000000081526004810183905260248101829052737109709ecfa91a80626ff3989d68f67f5b1dd12d906398296c549060440160006040518083038186803b15801561450757600080fd5b505afa158015612768573d6000803e3d6000fd5b6000806145288584614596565b905061458b6040518060400160405280601d81526020017f4552433139363750726f78792e736f6c3a4552433139363750726f78790000008152508286604051602001614576929190618a2a565b604051602081830303815290604052856145a2565b9150505b9392505050565b600061458f83836145d0565b60c081015151600090156145c6576145bf84848460c001516145eb565b905061458f565b6145bf8484614791565b60006145dc838361487c565b61458f838360200151846145a2565b6000806145f6614888565b90506000614604868361495b565b9050600061461b8260600151836020015185614e01565b9050600061462b83838989615013565b9050600061463882615e90565b602081015181519192509060030b156146ab57898260400151604051602001614662929190618dc8565b60408051601f19818403018152908290527f08c379a00000000000000000000000000000000000000000000000000000000082526146a291600401618cb2565b60405180910390fd5b60006146ee6040518060400160405280601581526020017f4465706c6f79656420746f20616464726573733a20000000000000000000000081525083600161605f565b6040517fc6ce059d000000000000000000000000000000000000000000000000000000008152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c6ce059d90614741908490600401618cb2565b602060405180830381865afa15801561475e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906147829190618e49565b9b9a5050505050505050505050565b6040517f8d1cc9250000000000000000000000000000000000000000000000000000000081526000908190737109709ecfa91a80626ff3989d68f67f5b1dd12d90638d1cc925906147e6908790600401618cb2565b600060405180830381865afa158015614803573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261482b9190810190618b34565b905060006148598285604051602001614845929190618e72565b60405160208183030381529060405261625f565b90506001600160a01b038116614492578484604051602001614662929190618ea1565b61065282826000616272565b604080518082018252600381527f6f75740000000000000000000000000000000000000000000000000000000000602082015290517fd145736c000000000000000000000000000000000000000000000000000000008152606091737109709ecfa91a80626ff3989d68f67f5b1dd12d91829063d145736c9061490f908490600401618f4c565b600060405180830381865afa15801561492c573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526149549190810190618f93565b9250505090565b61498d6040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b6000737109709ecfa91a80626ff3989d68f67f5b1dd12d90506149d86040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b6149e185616375565b602082015260006149f18661675a565b90506000836001600160a01b031663d930a0e66040518163ffffffff1660e01b8152600401600060405180830381865afa158015614a33573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052614a5b9190810190618f93565b86838560200151604051602001614a759493929190618fdc565b60408051601f19818403018152908290527f60f9bb1100000000000000000000000000000000000000000000000000000000825291506000906001600160a01b038616906360f9bb1190614acd908590600401618cb2565b600060405180830381865afa158015614aea573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052614b129190810190618f93565b6040517fdb4235f60000000000000000000000000000000000000000000000000000000081529091506001600160a01b0386169063db4235f690614b5a9084906004016190e0565b602060405180830381865afa158015614b77573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614b9b9190618b69565b614bb057816040516020016146629190619132565b6040517f49c4fac80000000000000000000000000000000000000000000000000000000081526001600160a01b038616906349c4fac890614bf59084906004016191c4565b600060405180830381865afa158015614c12573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052614c3a9190810190618f93565b84526040517fdb4235f60000000000000000000000000000000000000000000000000000000081526001600160a01b0386169063db4235f690614c81908490600401619216565b602060405180830381865afa158015614c9e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614cc29190618b69565b15614d57576040517f49c4fac80000000000000000000000000000000000000000000000000000000081526001600160a01b038616906349c4fac890614d0c908490600401619216565b600060405180830381865afa158015614d29573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052614d519190810190618f93565b60408501525b846001600160a01b03166349c4fac8828660000151604051602001614d7c9190619268565b6040516020818303038152906040526040518363ffffffff1660e01b8152600401614da89291906192d4565b600060405180830381865afa158015614dc5573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052614ded9190810190618f93565b606085015250608083015250949350505050565b60408051600480825260a0820190925260609160009190816020015b6060815260200190600190039081614e1d5790505090506040518060400160405280600481526020017f677265700000000000000000000000000000000000000000000000000000000081525081600081518110614e7d57614e7d618c19565b60200260200101819052506040518060400160405280600381526020017f2d726c000000000000000000000000000000000000000000000000000000000081525081600181518110614ed157614ed1618c19565b602002602001018190525084604051602001614eed91906192f9565b60405160208183030381529060405281600281518110614f0f57614f0f618c19565b602002602001018190525082604051602001614f2b9190619365565b60405160208183030381529060405281600381518110614f4d57614f4d618c19565b60200260200101819052506000614f6382615e90565b602080820151604080518082018252600581527f2e6a736f6e0000000000000000000000000000000000000000000000000000008185019081528251808401845260008082529086015282518084019093529051825292810192909252919250614ff490604080518082018252600080825260209182015281518083019092528451825280850190820152906169dd565b615009578560405160200161466291906193a6565b9695505050505050565b60a0810151604080518082018252600080825260209182015281518083019092528251808352928101910152606090737109709ecfa91a80626ff3989d68f67f5b1dd12d9015615063565b511590565b6151d75782602001511561511f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605860248201527f54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f742060448201527f62652075736564207768656e207468652060736b6970566572696679536f757260648201527f6365436f646560206f7074696f6e206973206074727565600000000000000000608482015260a4016146a2565b8260c00151156151d7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605360248201527f54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f742060448201527f62652075736564207768656e207468652060736b69704c6963656e736554797060648201527f6560206f7074696f6e2069732060747275656000000000000000000000000000608482015260a4016146a2565b6040805160ff8082526120008201909252600091816020015b60608152602001906001900390816151f057905050905060006040518060400160405280600381526020017f6e7078000000000000000000000000000000000000000000000000000000000081525082828061524b90619466565b935060ff168151811061526057615260618c19565b60200260200101819052506040518060400160405280600d81526020017f302e302e312d616c7068612e37000000000000000000000000000000000000008152506040516020016152b19190619485565b6040516020818303038152906040528282806152cc90619466565b935060ff16815181106152e1576152e1618c19565b60200260200101819052506040518060400160405280600681526020017f6465706c6f79000000000000000000000000000000000000000000000000000081525082828061532e90619466565b935060ff168151811061534357615343618c19565b60200260200101819052506040518060400160405280600e81526020017f2d2d636f6e74726163744e616d6500000000000000000000000000000000000081525082828061539090619466565b935060ff16815181106153a5576153a5618c19565b602002602001018190525087602001518282806153c190619466565b935060ff16815181106153d6576153d6618c19565b60200260200101819052506040518060400160405280600e81526020017f2d2d636f6e74726163745061746800000000000000000000000000000000000081525082828061542390619466565b935060ff168151811061543857615438618c19565b60209081029190910101528751828261545081619466565b935060ff168151811061546557615465618c19565b60200260200101819052506040518060400160405280600981526020017f2d2d636861696e496400000000000000000000000000000000000000000000008152508282806154b290619466565b935060ff16815181106154c7576154c7618c19565b60200260200101819052506154db46616a3e565b82826154e681619466565b935060ff16815181106154fb576154fb618c19565b60200260200101819052506040518060400160405280600f81526020017f2d2d6275696c64496e666f46696c65000000000000000000000000000000000081525082828061554890619466565b935060ff168151811061555d5761555d618c19565b60200260200101819052508682828061557590619466565b935060ff168151811061558a5761558a618c19565b60209081029190910101528551156156b15760408051808201909152601581527f2d2d636f6e7374727563746f7242797465636f64650000000000000000000000602082015282826155db81619466565b935060ff16815181106155f0576155f0618c19565b60209081029190910101526040517f71aad10d0000000000000000000000000000000000000000000000000000000081526001600160a01b038416906371aad10d90615640908990600401618cb2565b600060405180830381865afa15801561565d573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526156859190810190618f93565b828261569081619466565b935060ff16815181106156a5576156a5618c19565b60200260200101819052505b8460200151156157815760408051808201909152601281527f2d2d766572696679536f75726365436f64650000000000000000000000000000602082015282826156fa81619466565b935060ff168151811061570f5761570f618c19565b60200260200101819052506040518060400160405280600581526020017f66616c736500000000000000000000000000000000000000000000000000000081525082828061575c90619466565b935060ff168151811061577157615771618c19565b6020026020010181905250615948565b6157b961505e8660a0015160408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b61584c5760408051808201909152600d81527f2d2d6c6963656e73655479706500000000000000000000000000000000000000602082015282826157fc81619466565b935060ff168151811061581157615811618c19565b60200260200101819052508460a0015160405160200161583191906192f9565b60405160208183030381529060405282828061575c90619466565b8460c0015115801561588f57506040808901518151808301835260008082526020918201528251808401909352815183529081019082015261588d90511590565b155b156159485760408051808201909152600d81527f2d2d6c6963656e73655479706500000000000000000000000000000000000000602082015282826158d381619466565b935060ff16815181106158e8576158e8618c19565b60200260200101819052506158fc88616ade565b60405160200161590c91906192f9565b60405160208183030381529060405282828061592790619466565b935060ff168151811061593c5761593c618c19565b60200260200101819052505b6040808601518151808301835260008082526020918201528251808401909352815183529081019082015261597c90511590565b615a115760408051808201909152600b81527f2d2d72656c617965724964000000000000000000000000000000000000000000602082015282826159bf81619466565b935060ff16815181106159d4576159d4618c19565b602002602001018190525084604001518282806159f090619466565b935060ff1681518110615a0557615a05618c19565b60200260200101819052505b606085015115615b325760408051808201909152600681527f2d2d73616c74000000000000000000000000000000000000000000000000000060208201528282615a5a81619466565b935060ff1681518110615a6f57615a6f618c19565b602090810291909101015260608501516040517fb11a19e800000000000000000000000000000000000000000000000000000000815260048101919091526001600160a01b0384169063b11a19e890602401600060405180830381865afa158015615ade573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052615b069190810190618f93565b8282615b1181619466565b935060ff1681518110615b2657615b26618c19565b60200260200101819052505b60e08501515115615bd95760408051808201909152600a81527f2d2d6761734c696d69740000000000000000000000000000000000000000000060208201528282615b7c81619466565b935060ff1681518110615b9157615b91618c19565b6020026020010181905250615bad8560e0015160000151616a3e565b8282615bb881619466565b935060ff1681518110615bcd57615bcd618c19565b60200260200101819052505b60e08501516020015115615c835760408051808201909152600a81527f2d2d67617350726963650000000000000000000000000000000000000000000060208201528282615c2681619466565b935060ff1681518110615c3b57615c3b618c19565b6020026020010181905250615c578560e0015160200151616a3e565b8282615c6281619466565b935060ff1681518110615c7757615c77618c19565b60200260200101819052505b60e08501516040015115615d2d5760408051808201909152600e81527f2d2d6d617846656550657247617300000000000000000000000000000000000060208201528282615cd081619466565b935060ff1681518110615ce557615ce5618c19565b6020026020010181905250615d018560e0015160400151616a3e565b8282615d0c81619466565b935060ff1681518110615d2157615d21618c19565b60200260200101819052505b60e08501516060015115615dd75760408051808201909152601681527f2d2d6d61785072696f726974794665655065724761730000000000000000000060208201528282615d7a81619466565b935060ff1681518110615d8f57615d8f618c19565b6020026020010181905250615dab8560e0015160600151616a3e565b8282615db681619466565b935060ff1681518110615dcb57615dcb618c19565b60200260200101819052505b60008160ff1667ffffffffffffffff811115615df557615df5618a4c565b604051908082528060200260200182016040528015615e2857816020015b6060815260200190600190039081615e135790505b50905060005b8260ff168160ff161015615e8157838160ff1681518110615e5157615e51618c19565b6020026020010151828260ff1681518110615e6e57615e6e618c19565b6020908102919091010152600101615e2e565b5093505050505b949350505050565b615eb76040518060600160405280600060030b815260200160608152602001606081525090565b60408051808201825260048082527f6261736800000000000000000000000000000000000000000000000000000000602083015291517fd145736c000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d92600091849163d145736c91615f3d918691016194f0565b600060405180830381865afa158015615f5a573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052615f829190810190618f93565b90506000615f9086836175cd565b90506000846001600160a01b031663f45c1ce7836040518263ffffffff1660e01b8152600401615fc09190618980565b6000604051808303816000875af1158015615fdf573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526160079190810190619537565b805190915060030b158015906160205750602081015151155b801561602f5750604081015151155b15615009578160008151811061604757616047618c19565b602002602001015160405160200161466291906195ed565b606060006160948560408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6040805180820182526000808252602091820152815180830190925286518252808701908201529091506160cb9082905b90617722565b15616228576000616148826161428461613c61610e8a60408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6040805180820182526000808252602091820152815180830190925282518252918201519181019190915290565b90617749565b906177ab565b604080518082018252600181527f0a00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201529091506161ac908290617722565b1561621657604080518082018252600181527f0a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616213905b8290617830565b90505b61621f81617856565b9250505061458f565b82156162415784846040516020016146629291906197d9565b505060408051602081019091526000815261458f565b509392505050565b6000808251602084016000f09392505050565b8160a001511561628157505050565b600061628e8484846178bf565b9050600061629b82615e90565b602081015181519192509060030b1580156163375750604080518082018252600781527f535543434553530000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616337906040805180820182526000808252602091820152815180830190925284518252808501908201526160c5565b1561634457505050505050565b604082015151156163645781604001516040516020016146629190619880565b8060405160200161466291906198de565b606060006163aa8360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600481527f2e736f6c000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015290915061640f905b82906169dd565b1561647e57604080518082018252600481527f2e736f6c000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261458f90616479908390617e5a565b617856565b604080518082018252600181527f3a00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526164e0905b8290617ee4565b6001036165ad57604080518082018252600181527f3a00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526165469061620c565b50604080518082018252600181527f3a000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261458f90616479905b8390617830565b604080518082018252600581527f2e6a736f6e0000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261660c90616408565b1561674357604080518082018252600181527f2f00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820181905284518086019095529251845283015290616674908390617f7e565b9050600081600183516166879190619949565b8151811061669757616697618c19565b6020026020010151905061673a61647961670d6040518060400160405280600581526020017f2e6a736f6e00000000000000000000000000000000000000000000000000000081525060408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b60408051808201825260008082526020918201528151808301909252855182528086019082015290617e5a565b95945050505050565b82604051602001614662919061995c565b50919050565b6060600061678f8360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600481527f2e736f6c00000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201529091506167f190616408565b156167ff5761458f81617856565b604080518082018252600181527f3a000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261685e906164d9565b6001036168c857604080518082018252600181527f3a000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261458f90616479906165a6565b604080518082018252600581527f2e6a736f6e0000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261692790616408565b1561674357604080518082018252600181527f2f0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082018190528451808601909552925184528301529061698f908390617f7e565b90506001815111156169cb5780600282516169aa9190619949565b815181106169ba576169ba618c19565b602002602001015192505050919050565b5082604051602001614662919061995c565b8051825160009111156169f257506000614496565b81518351602085015160009291616a0891619a3a565b616a129190619949565b905082602001518103616a29576001915050614496565b82516020840151819020912014905092915050565b60606000616a4b83618023565b600101905060008167ffffffffffffffff811115616a6b57616a6b618a4c565b6040519080825280601f01601f191660200182016040528015616a95576020820181803683370190505b5090508181016020015b600019017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a8504945084616a9f57509392505050565b604081810151815180830183526000808252602091820181905283518085018552835181529282018383015283518085018552600a81527f554e4c4943454e5345440000000000000000000000000000000000000000000081840190815285518087018752838152840192909252845180860190955251845290830152606091616b6a905b8290618105565b15616baa57505060408051808201909152600481527f4e6f6e65000000000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600981527f556e6c6963656e7365000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616c0990616b63565b15616c4957505060408051808201909152600981527f556e6c6963656e736500000000000000000000000000000000000000000000006020820152919050565b604080518082018252600381527f4d4954000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616ca890616b63565b15616ce857505060408051808201909152600381527f4d495400000000000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f47504c2d322e302d6f6e6c79000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616d4790616b63565b80616dac5750604080518082018252601081527f47504c2d322e302d6f722d6c617465720000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616dac90616b63565b15616dec57505060408051808201909152600981527f474e552047504c763200000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f47504c2d332e302d6f6e6c79000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616e4b90616b63565b80616eb05750604080518082018252601081527f47504c2d332e302d6f722d6c617465720000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616eb090616b63565b15616ef057505060408051808201909152600981527f474e552047504c763300000000000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4c47504c2d322e312d6f6e6c790000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616f4f90616b63565b80616fb45750604080518082018252601181527f4c47504c2d322e312d6f722d6c6174657200000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616fb490616b63565b15616ff457505060408051808201909152600c81527f474e55204c47504c76322e3100000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4c47504c2d332e302d6f6e6c79000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261705390616b63565b806170b85750604080518082018252601181527f4c47504c2d332e302d6f722d6c61746572000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526170b890616b63565b156170f857505060408051808201909152600a81527f474e55204c47504c7633000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f4253442d322d436c6175736500000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261715790616b63565b1561719757505060408051808201909152600c81527f4253442d322d436c6175736500000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f4253442d332d436c617573650000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526171f690616b63565b1561723657505060408051808201909152600c81527f4253442d332d436c6175736500000000000000000000000000000000000000006020820152919050565b604080518082018252600781527f4d504c2d322e30000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261729590616b63565b156172d557505060408051808201909152600781527f4d504c2d322e30000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600781527f4f534c2d332e30000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261733490616b63565b1561737457505060408051808201909152600781527f4f534c2d332e30000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600a81527f4170616368652d322e3000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526173d390616b63565b1561741357505060408051808201909152600a81527f4170616368652d322e30000000000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4147504c2d332e302d6f6e6c79000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261747290616b63565b806174d75750604080518082018252601181527f4147504c2d332e302d6f722d6c61746572000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526174d790616b63565b1561751757505060408051808201909152600a81527f474e55204147504c7633000000000000000000000000000000000000000000006020820152919050565b604080518082018252600881527f4255534c2d312e310000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261757690616b63565b156175b657505060408051808201909152600781527f42534c20312e31000000000000000000000000000000000000000000000000006020820152919050565b604080840151845191516146629290602001619a4d565b60608060005b845181101561765857818582815181106175ef576175ef618c19565b6020026020010151604051602001617608929190618e72565b6040516020818303038152906040529150600185516176279190619949565b8114617650578160405160200161763e9190619bb6565b60405160208183030381529060405291505b6001016175d3565b5060408051600380825260808201909252600091816020015b6060815260200190600190039081617671579050509050838160008151811061769c5761769c618c19565b60200260200101819052506040518060400160405280600281526020017f2d63000000000000000000000000000000000000000000000000000000000000815250816001815181106176f0576176f0618c19565b6020026020010181905250818160028151811061770f5761770f618c19565b6020908102919091010152949350505050565b60208083015183518351928401516000936177409291849190618119565b14159392505050565b6040805180820190915260008082526020820152600061777b846000015185602001518560000151866020015161822a565b905083602001518161778d9190619949565b8451859061779c908390619949565b90525060208401525090919050565b60408051808201909152600080825260208201528151835110156177d0575081614496565b60208083015190840151600191146177f75750815160208481015190840151829020919020145b80156178285782518451859061780e908390619949565b9052508251602085018051617824908390619a3a565b9052505b509192915050565b604080518082019091526000808252602082015261784f83838361834a565b5092915050565b60606000826000015167ffffffffffffffff81111561787757617877618a4c565b6040519080825280601f01601f1916602001820160405280156178a1576020820181803683370190505b509050600060208201905061784f81856020015186600001516183f5565b606060006178cb614888565b6040805160ff808252612000820190925291925060009190816020015b60608152602001906001900390816178e857905050905060006040518060400160405280600381526020017f6e7078000000000000000000000000000000000000000000000000000000000081525082828061794390619466565b935060ff168151811061795857617958618c19565b60200260200101819052506040518060400160405280600781526020017f5e312e33322e33000000000000000000000000000000000000000000000000008152506040516020016179a99190619bf7565b6040516020818303038152906040528282806179c490619466565b935060ff16815181106179d9576179d9618c19565b60200260200101819052506040518060400160405280600881526020017f76616c6964617465000000000000000000000000000000000000000000000000815250828280617a2690619466565b935060ff1681518110617a3b57617a3b618c19565b602002602001018190525082604051602001617a579190619365565b604051602081830303815290604052828280617a7290619466565b935060ff1681518110617a8757617a87618c19565b60200260200101819052506040518060400160405280600a81526020017f2d2d636f6e747261637400000000000000000000000000000000000000000000815250828280617ad490619466565b935060ff1681518110617ae957617ae9618c19565b6020026020010181905250617afe878461846f565b8282617b0981619466565b935060ff1681518110617b1e57617b1e618c19565b602090810291909101015285515115617bca5760408051808201909152600b81527f2d2d7265666572656e636500000000000000000000000000000000000000000060208201528282617b7081619466565b935060ff1681518110617b8557617b85618c19565b6020026020010181905250617b9e86600001518461846f565b8282617ba981619466565b935060ff1681518110617bbe57617bbe618c19565b60200260200101819052505b856080015115617c385760408051808201909152601881527f2d2d756e73616665536b697053746f72616765436865636b000000000000000060208201528282617c1381619466565b935060ff1681518110617c2857617c28618c19565b6020026020010181905250617c9e565b8415617c9e5760408051808201909152601281527f2d2d726571756972655265666572656e6365000000000000000000000000000060208201528282617c7d81619466565b935060ff1681518110617c9257617c92618c19565b60200260200101819052505b60408601515115617d3a5760408051808201909152600d81527f2d2d756e73616665416c6c6f770000000000000000000000000000000000000060208201528282617ce881619466565b935060ff1681518110617cfd57617cfd618c19565b60200260200101819052508560400151828280617d1990619466565b935060ff1681518110617d2e57617d2e618c19565b60200260200101819052505b856060015115617da45760408051808201909152601481527f2d2d756e73616665416c6c6f7752656e616d657300000000000000000000000060208201528282617d8381619466565b935060ff1681518110617d9857617d98618c19565b60200260200101819052505b60008160ff1667ffffffffffffffff811115617dc257617dc2618a4c565b604051908082528060200260200182016040528015617df557816020015b6060815260200190600190039081617de05790505b50905060005b8260ff168160ff161015617e4e57838160ff1681518110617e1e57617e1e618c19565b6020026020010151828260ff1681518110617e3b57617e3b618c19565b6020908102919091010152600101617dfb565b50979650505050505050565b6040805180820190915260008082526020820152815183511015617e7f575081614496565b81518351602085015160009291617e9591619a3a565b617e9f9190619949565b60208401519091506001908214617ec0575082516020840151819020908220145b8015617edb57835185518690617ed7908390619949565b9052505b50929392505050565b6000808260000151617f08856000015186602001518660000151876020015161822a565b617f129190619a3a565b90505b83516020850151617f269190619a3a565b811161784f5781617f3681619c3c565b9250508260000151617f6d856020015183617f519190619949565b8651617f5d9190619949565b838660000151876020015161822a565b617f779190619a3a565b9050617f15565b60606000617f8c8484617ee4565b617f97906001619a3a565b67ffffffffffffffff811115617faf57617faf618a4c565b604051908082528060200260200182016040528015617fe257816020015b6060815260200190600190039081617fcd5790505b50905060005b815181101561625757617ffe6164798686617830565b82828151811061801057618010618c19565b6020908102919091010152600101617fe8565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000831061806c577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310618098576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc1000083106180b657662386f26fc10000830492506010015b6305f5e10083106180ce576305f5e100830492506008015b61271083106180e257612710830492506004015b606483106180f4576064830492506002015b600a83106144965760010192915050565b600061811183836184af565b159392505050565b60008085841161822057602084116181cc5760008415618164576001618140866020619949565b61814b906008619c56565b618156906002619d54565b6181609190619949565b1990505b83518116856181738989619a3a565b61817d9190619949565b805190935082165b8181146181b75787841161819f5787945050505050615e88565b836181a981619d60565b945050828451169050618185565b6181c18785619a3a565b945050505050615e88565b8383206181d98588619949565b6181e39087619a3a565b91505b85821061821e5784822080820361820b576182018684619a3a565b9350505050615e88565b618216600184619949565b9250506181e6565b505b5092949350505050565b6000838186851161833557602085116182e45760008515618276576001618252876020619949565b61825d906008619c56565b618268906002619d54565b6182729190619949565b1990505b845181166000876182878b8b619a3a565b6182919190619949565b855190915083165b8281146182d6578186106182be576182b18b8b619a3a565b9650505050505050615e88565b856182c881619c3c565b965050838651169050618299565b859650505050505050615e88565b508383206000905b6182f68689619949565b8211618333578583208082036183125783945050505050615e88565b61831d600185619a3a565b935050818061832b90619c3c565b9250506182ec565b505b61833f8787619a3a565b979650505050505050565b6040805180820190915260008082526020820152600061837c856000015186602001518660000151876020015161822a565b6020808701805191860191909152519091506183989082619949565b8352845160208601516183ab9190619a3a565b81036183ba57600085526183ec565b835183516183c89190619a3a565b855186906183d7908390619949565b90525083516183e69082619a3a565b60208601525b50909392505050565b6020811061842d578151835261840c602084619a3a565b9250618419602083619a3a565b9150618426602082619949565b90506183f5565b600019811561845c576001618443836020619949565b61844f90610100619d54565b6184599190619949565b90505b9151835183169219169190911790915250565b6060600061847d848461495b565b805160208083015160405193945061849793909101619d77565b60405160208183030381529060405291505092915050565b81518151600091908111156184c2575081515b6020808501519084015160005b8381101561857b578251825180821461854b57600019602087101561852a576001846184fc896020619949565b6185069190619a3a565b618511906008619c56565b61851c906002619d54565b6185269190619949565b1990505b81811683821681810391146185485797506144969650505050505050565b50505b618556602086619a3a565b9450618563602085619a3a565b935050506020816185749190619a3a565b90506184cf565b50845186516150099190619dcf565b610c9f80619df083390190565b6112a68061aa8f83390190565b61140b8061bd3583390190565b61155a8061d14083390190565b610d5e8061e69a83390190565b6040518060e0016040528060608152602001606081526020016060815260200160001515815260200160001515815260200160001515815260200161860e618613565b905290565b6040518061010001604052806000151581526020016000151581526020016060815260200160008019168152602001606081526020016060815260200160001515815260200161860e6040518060800160405280600081526020016000815260200160008152602001600081525090565b602080825282518282018190526000918401906040840190835b818110156186c55783516001600160a01b031683526020938401939092019160010161869e565b509095945050505050565b60005b838110156186eb5781810151838201526020016186d3565b50506000910152565b6000815180845261870c8160208601602086016186d0565b601f01601f19169290920160200192915050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b8281101561881c577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452815180516001600160a01b03168652602090810151604082880181905281519088018190529101906060600582901b88018101919088019060005b81811015618802577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa08a85030183526187ec8486516186f4565b60209586019590945092909201916001016187b2565b509197505050602094850194929092019150600101618748565b50929695505050505050565b600081518084526020840193506020830160005b8281101561887c5781517fffffffff000000000000000000000000000000000000000000000000000000001686526020958601959091019060010161883c565b5093949350505050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b8281101561881c577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc087860301845281518051604087526188f260408801826186f4565b905060208201519150868103602088015261890d8183618828565b9650505060209384019391909101906001016188ae565b600082825180855260208501945060208160051b8301016020850160005b8381101561897457601f1985840301885261895e8383516186f4565b6020988901989093509190910190600101618942565b50909695505050505050565b60208152600061458f6020830184618924565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b8281101561881c577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc087860301845281516001600160a01b0381511686526020810151905060406020870152618a146040870182618828565b95505060209384019391909101906001016189bb565b6001600160a01b0383168152604060208201526000615e8860408301846186f4565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040516060810167ffffffffffffffff81118282101715618a9e57618a9e618a4c565b60405290565b60008067ffffffffffffffff841115618abf57618abf618a4c565b50604051601f19601f85018116603f0116810181811067ffffffffffffffff82111715618aee57618aee618a4c565b604052838152905080828401851015618b0657600080fd5b6162578460208301856186d0565b600082601f830112618b2557600080fd5b61458f83835160208501618aa4565b600060208284031215618b4657600080fd5b815167ffffffffffffffff811115618b5d57600080fd5b61449284828501618b14565b600060208284031215618b7b57600080fd5b8151801515811461458f57600080fd5b600181811c90821680618b9f57607f821691505b602082108103616754577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6001600160a01b038416815282602082015260606040820152600061673a60608301846186f4565b828152604060208201526000615e8860408301846186f4565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081518084526020840193506020830160005b8281101561887c578151865260209586019590910190600101618c5c565b606081526000618c8d6060830186618924565b8281036020840152618c9f8186618c48565b9150508215156040830152949350505050565b60208152600061458f60208301846186f4565b6001600160a01b03851681526001600160a01b038416602082015282604082015260806060820152600061500960808301846186f4565b600060208284031215618d0e57600080fd5b5051919050565b6001600160a01b0385168152608060208201526000618d376080830186618924565b8281036040840152618d498186618c48565b915050821515606083015295945050505050565b606081526000618d7060608301866186f4565b602083019490945250901515604090910152919050565b6001600160a01b038616815284602082015260a060408201526000618daf60a08301866186f4565b6060830194909452509015156080909101529392505050565b7f4661696c656420746f206465706c6f7920636f6e747261637420000000000000815260008351618e0081601a8501602088016186d0565b7f3a20000000000000000000000000000000000000000000000000000000000000601a918401918201528351618e3d81601c8401602088016186d0565b01601c01949350505050565b600060208284031215618e5b57600080fd5b81516001600160a01b038116811461458f57600080fd5b60008351618e848184602088016186d0565b835190830190618e988183602088016186d0565b01949350505050565b7f4661696c656420746f206465706c6f7920636f6e747261637420000000000000815260008351618ed981601a8501602088016186d0565b7f207573696e6720636f6e7374727563746f722064617461202200000000000000601a918401918201528351618f168160338401602088016186d0565b7f220000000000000000000000000000000000000000000000000000000000000060339290910191820152603401949350505050565b60408152600b60408201527f464f554e4452595f4f5554000000000000000000000000000000000000000000606082015260806020820152600061458f60808301846186f4565b600060208284031215618fa557600080fd5b815167ffffffffffffffff811115618fbc57600080fd5b8201601f81018413618fcd57600080fd5b61449284825160208401618aa4565b60008551618fee818460208a016186d0565b7f2f000000000000000000000000000000000000000000000000000000000000009083019081528551619028816001840160208a016186d0565b7f2f000000000000000000000000000000000000000000000000000000000000006001929091019182015284516190668160028401602089016186d0565b6001818301019150507f2f00000000000000000000000000000000000000000000000000000000000000600182015283516190a88160028401602088016186d0565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600292909101918201526007019695505050505050565b6040815260006190f360408301846186f4565b8281036020840152600481527f2e6173740000000000000000000000000000000000000000000000000000000060208201526040810191505092915050565b7f436f756c64206e6f742066696e642041535420696e206172746966616374200081526000825161916a81601f8501602087016186d0565b7f2e205365742060617374203d20747275656020696e20666f756e6472792e746f601f9390910192830152507f6d6c000000000000000000000000000000000000000000000000000000000000603f820152604101919050565b6040815260006191d760408301846186f4565b8281036020840152601181527f2e6173742e6162736f6c7574655061746800000000000000000000000000000060208201526040810191505092915050565b60408152600061922960408301846186f4565b8281036020840152600c81527f2e6173742e6c6963656e7365000000000000000000000000000000000000000060208201526040810191505092915050565b7f2e6d657461646174612e736f75726365732e5b270000000000000000000000008152600082516192a08160148501602087016186d0565b7f275d2e6b656363616b32353600000000000000000000000000000000000000006014939091019283015250602001919050565b6040815260006192e760408301856186f4565b828103602084015261458b81856186f4565b7f22000000000000000000000000000000000000000000000000000000000000008152600082516193318160018501602087016186d0565b7f22000000000000000000000000000000000000000000000000000000000000006001939091019283015250600201919050565b600082516193778184602087016186d0565b7f2f6275696c642d696e666f000000000000000000000000000000000000000000920191825250600b01919050565b7f436f756c64206e6f742066696e64206275696c642d696e666f2066696c65207781527f697468206d61746368696e6720736f7572636520636f6465206861736820666f60208201527f7220636f6e74726163742000000000000000000000000000000000000000000060408201526000825161942a81604b8501602087016186d0565b91909101604b0192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600060ff821660ff810361947c5761947c619437565b60010192915050565b7f406f70656e7a657070656c696e2f646566656e6465722d6465706c6f792d636c81527f69656e742d636c694000000000000000000000000000000000000000000000006020820152600082516194e38160298501602087016186d0565b9190910160290192915050565b60408152601660408201527f4f50454e5a455050454c494e5f424153485f5041544800000000000000000000606082015260806020820152600061458f60808301846186f4565b60006020828403121561954957600080fd5b815167ffffffffffffffff81111561956057600080fd5b82016060818503121561957257600080fd5b61957a618a7b565b81518060030b811461958b57600080fd5b8152602082015167ffffffffffffffff8111156195a757600080fd5b6195b386828501618b14565b602083015250604082015167ffffffffffffffff8111156195d357600080fd5b6195df86828501618b14565b604083015250949350505050565b7f4661696c656420746f2072756e206261736820636f6d6d616e6420776974682081527f220000000000000000000000000000000000000000000000000000000000000060208201526000825161964b8160218501602087016186d0565b7f222e20496620796f7520617265207573696e672057696e646f77732c2073657460219390910192830152507f20746865204f50454e5a455050454c494e5f424153485f5041544820656e766960418201527f726f6e6d656e74207661726961626c6520746f207468652066756c6c7920717560618201527f616c69666965642070617468206f66207468652062617368206578656375746160818201527f626c652e20466f72206578616d706c652c20696620796f75206172652075736960a18201527f6e672047697420666f722057696e646f77732c206164642074686520666f6c6c60c18201527f6f77696e67206c696e6520696e20746865202e656e762066696c65206f66207960e18201527f6f75722070726f6a65637420287573696e6720666f727761726420736c6173686101018201527f6573293a0a4f50454e5a455050454c494e5f424153485f504154483d22433a2f6101218201527f50726f6772616d2046696c65732f4769742f62696e2f6261736822000000000061014182015261015c01919050565b7f4661696c656420746f2066696e64206c696e652077697468207072656669782081527f27000000000000000000000000000000000000000000000000000000000000006020820152600083516198378160218501602088016186d0565b7f2720696e206f75747075743a2000000000000000000000000000000000000000602191840191820152835161987481602e8401602088016186d0565b01602e01949350505050565b7f4661696c656420746f2072756e2075706772616465207361666574792076616c81527f69646174696f6e3a2000000000000000000000000000000000000000000000006020820152600082516194e38160298501602087016186d0565b7f55706772616465207361666574792076616c69646174696f6e206661696c656481527f3a0a00000000000000000000000000000000000000000000000000000000000060208201526000825161993c8160228501602087016186d0565b9190910160220192915050565b8181038181111561449657614496619437565b7f436f6e7472616374206e616d652000000000000000000000000000000000000081526000825161999481600e8501602087016186d0565b7f206d75737420626520696e2074686520666f726d6174204d79436f6e74726163600e9390910192830152507f742e736f6c3a4d79436f6e7472616374206f72204d79436f6e74726163742e73602e8201527f6f6c206f72206f75742f4d79436f6e74726163742e736f6c2f4d79436f6e7472604e8201527f6163742e6a736f6e000000000000000000000000000000000000000000000000606e820152607601919050565b8082018082111561449657614496619437565b7f53504458206c6963656e7365206964656e746966696572200000000000000000815260008351619a858160188501602088016186d0565b7f20696e20000000000000000000000000000000000000000000000000000000006018918401918201528351619ac281601c8401602088016186d0565b7f20646f6573206e6f74206c6f6f6b206c696b65206120737570706f7274656420601c92909101918201527f6c6963656e736520666f7220626c6f636b206578706c6f726572207665726966603c8201527f69636174696f6e2e205573652074686520606c6963656e73655479706560206f605c8201527f7074696f6e20746f20737065636966792061206c6963656e736520747970652c607c8201527f206f7220736574207468652060736b69704c6963656e73655479706560206f70609c8201527f74696f6e20746f2060747275656020746f20736b69702e00000000000000000060bc82015260d301949350505050565b60008251619bc88184602087016186d0565b7f2000000000000000000000000000000000000000000000000000000000000000920191825250600101919050565b7f406f70656e7a657070656c696e2f75706772616465732d636f72654000000000815260008251619c2f81601c8501602087016186d0565b91909101601c0192915050565b60006000198203619c4f57619c4f619437565b5060010190565b808202811582820484141761449657614496619437565b6001815b6001841115619ca857808504811115619c8c57619c8c619437565b6001841615619c9a57908102905b60019390931c928002619c71565b935093915050565b600082619cbf57506001614496565b81619ccc57506000614496565b8160018114619ce25760028114619cec57619d08565b6001915050614496565b60ff841115619cfd57619cfd619437565b50506001821b614496565b5060208310610133831016604e8410600b8410161715619d2b575081810a614496565b619d386000198484619c6d565b8060001904821115619d4c57619d4c619437565b029392505050565b600061458f8383619cb0565b600081619d6f57619d6f619437565b506000190190565b60008351619d898184602088016186d0565b7f3a000000000000000000000000000000000000000000000000000000000000009083019081528351619dc38160018401602088016186d0565b01600101949350505050565b818103600083128015838313168383128216171561784f5761784f61943756fe608060405234801561001057600080fd5b50604051610c9f380380610c9f83398101604081905261002f9161010d565b8181600361003d83826101ff565b50600461004a82826101ff565b50505050506102bd565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261007b57600080fd5b81516001600160401b0381111561009457610094610054565b604051601f8201601f19908116603f011681016001600160401b03811182821017156100c2576100c2610054565b6040528181528382016020018510156100da57600080fd5b60005b828110156100f9576020818601810151838301820152016100dd565b506000918101602001919091529392505050565b6000806040838503121561012057600080fd5b82516001600160401b0381111561013657600080fd5b6101428582860161006a565b602085015190935090506001600160401b0381111561016057600080fd5b61016c8582860161006a565b9150509250929050565b600181811c9082168061018a57607f821691505b6020821081036101aa57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156101fa57806000526020600020601f840160051c810160208510156101d75750805b601f840160051c820191505b818110156101f757600081556001016101e3565b50505b505050565b81516001600160401b0381111561021857610218610054565b61022c816102268454610176565b846101b0565b6020601f82116001811461026057600083156102485750848201515b600019600385901b1c1916600184901b1784556101f7565b600084815260208120601f198516915b828110156102905787850151825560209485019460019092019101610270565b50848210156102ae5786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b6109d3806102cc6000396000f3fe608060405234801561001057600080fd5b50600436106100be5760003560e01c806340c10f191161007657806395d89b411161005b57806395d89b4114610183578063a9059cbb1461018b578063dd62ed3e1461019e57600080fd5b806340c10f191461013857806370a082311461014d57600080fd5b806318160ddd116100a757806318160ddd1461010457806323b872dd14610116578063313ce5671461012957600080fd5b806306fdde03146100c3578063095ea7b3146100e1575b600080fd5b6100cb6101e4565b6040516100d891906107bf565b60405180910390f35b6100f46100ef366004610854565b610276565b60405190151581526020016100d8565b6002545b6040519081526020016100d8565b6100f461012436600461087e565b610290565b604051601281526020016100d8565b61014b610146366004610854565b6102b4565b005b61010861015b3660046108bb565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6100cb6102c2565b6100f4610199366004610854565b6102d1565b6101086101ac3660046108dd565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6060600380546101f390610910565b80601f016020809104026020016040519081016040528092919081815260200182805461021f90610910565b801561026c5780601f106102415761010080835404028352916020019161026c565b820191906000526020600020905b81548152906001019060200180831161024f57829003601f168201915b5050505050905090565b6000336102848185856102df565b60019150505b92915050565b60003361029e8582856102f1565b6102a98585856103c5565b506001949350505050565b6102be8282610470565b5050565b6060600480546101f390610910565b6000336102848185856103c5565b6102ec83838360016104cc565b505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146103bf57818110156103b0576040517ffb8f41b200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416600482015260248101829052604481018390526064015b60405180910390fd5b6103bf848484840360006104cc565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8316610415576040517f96c6fd1e000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff8216610465576040517fec442f05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b6102ec838383610614565b73ffffffffffffffffffffffffffffffffffffffff82166104c0576040517fec442f05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b6102be60008383610614565b73ffffffffffffffffffffffffffffffffffffffff841661051c576040517fe602df05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff831661056c576040517f94280d62000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260016020908152604080832093871683529290522082905580156103bf578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161060691815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff831661064c5780600260008282546106419190610963565b909155506106fe9050565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260208190526040902054818110156106d2576040517fe450d38c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8516600482015260248101829052604481018390526064016103a7565b73ffffffffffffffffffffffffffffffffffffffff841660009081526020819052604090209082900390555b73ffffffffffffffffffffffffffffffffffffffff821661072757600280548290039055610753565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090208054820190555b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516107b291815260200190565b60405180910390a3505050565b602081526000825180602084015260005b818110156107ed57602081860181015160408684010152016107d0565b5060006040828501015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011684010191505092915050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461084f57600080fd5b919050565b6000806040838503121561086757600080fd5b6108708361082b565b946020939093013593505050565b60008060006060848603121561089357600080fd5b61089c8461082b565b92506108aa6020850161082b565b929592945050506040919091013590565b6000602082840312156108cd57600080fd5b6108d68261082b565b9392505050565b600080604083850312156108f057600080fd5b6108f98361082b565b91506109076020840161082b565b90509250929050565b600181811c9082168061092457607f821691505b60208210810361095d577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b8082018082111561028a577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea26469706673582212207e804ca539d49155d2b6bc19268ce22f9f857027c75247d69fb0d56a089c93d464736f6c634300081a0033608060405234801561001057600080fd5b506040516112a63803806112a683398101604081905261002f91610110565b604051806040016040528060048152602001635a65746160e01b815250604051806040016040528060048152602001635a45544160e01b815250816003908161007891906101e2565b50600461008582826101e2565b5050506001600160a01b03821615806100a557506001600160a01b038116155b156100c35760405163e6c4247b60e01b815260040160405180910390fd5b600680546001600160a01b039384166001600160a01b031991821617909155600780549290931691161790556102a0565b80516001600160a01b038116811461010b57600080fd5b919050565b6000806040838503121561012357600080fd5b61012c836100f4565b915061013a602084016100f4565b90509250929050565b634e487b7160e01b600052604160045260246000fd5b600181811c9082168061016d57607f821691505b60208210810361018d57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156101dd57806000526020600020601f840160051c810160208510156101ba5750805b601f840160051c820191505b818110156101da57600081556001016101c6565b50505b505050565b81516001600160401b038111156101fb576101fb610143565b61020f816102098454610159565b84610193565b6020601f821160018114610243576000831561022b5750848201515b600019600385901b1c1916600184901b1784556101da565b600084815260208120601f198516915b828110156102735787850151825560209485019460019092019101610253565b50848210156102915786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b610ff7806102af6000396000f3fe608060405234801561001057600080fd5b506004361061011b5760003560e01c806342966c68116100b257806379cc679011610081578063a9059cbb11610066578063a9059cbb1461028e578063bff9662a146102a1578063dd62ed3e146102c157600080fd5b806379cc67901461027357806395d89b411461028657600080fd5b806342966c68146102025780635b1125911461021557806370a0823114610235578063779e3b631461026b57600080fd5b80631e458bee116100ee5780631e458bee1461018857806323b872dd1461019b578063313ce567146101ae578063328a01d0146101bd57600080fd5b806306fdde0314610120578063095ea7b31461013e57806315d57fd41461016157806318160ddd14610176575b600080fd5b610128610307565b6040516101359190610d97565b60405180910390f35b61015161014c366004610e2c565b610399565b6040519015158152602001610135565b61017461016f366004610e56565b6103b3565b005b6002545b604051908152602001610135565b610174610196366004610e89565b61057e565b6101516101a9366004610ebc565b610631565b60405160128152602001610135565b6007546101dd9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610135565b610174610210366004610ef9565b610655565b6006546101dd9073ffffffffffffffffffffffffffffffffffffffff1681565b61017a610243366004610f12565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b610174610662565b610174610281366004610e2c565b610786565b610128610837565b61015161029c366004610e2c565b610846565b6005546101dd9073ffffffffffffffffffffffffffffffffffffffff1681565b61017a6102cf366004610e56565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b60606003805461031690610f34565b80601f016020809104026020016040519081016040528092919081815260200182805461034290610f34565b801561038f5780601f106103645761010080835404028352916020019161038f565b820191906000526020600020905b81548152906001019060200180831161037257829003601f168201915b5050505050905090565b6000336103a7818585610854565b60019150505b92915050565b60075473ffffffffffffffffffffffffffffffffffffffff1633148015906103f3575060065473ffffffffffffffffffffffffffffffffffffffff163314155b15610431576040517fcdfcef970000000000000000000000000000000000000000000000000000000081523360048201526024015b60405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff82161580610468575073ffffffffffffffffffffffffffffffffffffffff8116155b1561049f576040517fe6c4247b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6006805473ffffffffffffffffffffffffffffffffffffffff8481167fffffffffffffffffffffffff0000000000000000000000000000000000000000928316811790935560058054918516919092161790556040805133815260208101929092527fe79965b5c67dcfb2cf5fe152715e4a7256cee62a3d5dd8484fd8a8539eb8beff910160405180910390a16040805133815273ffffffffffffffffffffffffffffffffffffffff831660208201527f1b9352454524a57a51f24f67dc66d898f616922cd1f7a12d73570ece12b1975c910160405180910390a15050565b60055473ffffffffffffffffffffffffffffffffffffffff1633146105d1576040517f3fe32fba000000000000000000000000000000000000000000000000000000008152336004820152602401610428565b6105db8383610866565b808373ffffffffffffffffffffffffffffffffffffffff167fc263b302aec62d29105026245f19e16f8e0137066ccd4a8bd941f716bd4096bb8460405161062491815260200190565b60405180910390a3505050565b60003361063f8582856108c6565b61064a858585610995565b506001949350505050565b61065f3382610a40565b50565b60075473ffffffffffffffffffffffffffffffffffffffff1633146106b5576040517fe700765e000000000000000000000000000000000000000000000000000000008152336004820152602401610428565b60065473ffffffffffffffffffffffffffffffffffffffff16610704576040517fe6c4247b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600654600780547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff90921691821790556040805133815260208101929092527f5104c9abdc7d111c2aeb4ce890ac70274a4be2ee83f46a62551be5e6ebc82dd0910160405180910390a1565b60055473ffffffffffffffffffffffffffffffffffffffff1633146107d9576040517f3fe32fba000000000000000000000000000000000000000000000000000000008152336004820152602401610428565b6107e38282610a9c565b8173ffffffffffffffffffffffffffffffffffffffff167f919f7e2092ffcc9d09f599be18d8152860b0c054df788a33bc549cdd9d0f15b18260405161082b91815260200190565b60405180910390a25050565b60606004805461031690610f34565b6000336103a7818585610995565b6108618383836001610ab1565b505050565b73ffffffffffffffffffffffffffffffffffffffff82166108b6576040517fec442f0500000000000000000000000000000000000000000000000000000000815260006004820152602401610428565b6108c260008383610bf9565b5050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811461098f5781811015610980576040517ffb8f41b200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff841660048201526024810182905260448101839052606401610428565b61098f84848484036000610ab1565b50505050565b73ffffffffffffffffffffffffffffffffffffffff83166109e5576040517f96c6fd1e00000000000000000000000000000000000000000000000000000000815260006004820152602401610428565b73ffffffffffffffffffffffffffffffffffffffff8216610a35576040517fec442f0500000000000000000000000000000000000000000000000000000000815260006004820152602401610428565b610861838383610bf9565b73ffffffffffffffffffffffffffffffffffffffff8216610a90576040517f96c6fd1e00000000000000000000000000000000000000000000000000000000815260006004820152602401610428565b6108c282600083610bf9565b610aa78233836108c6565b6108c28282610a40565b73ffffffffffffffffffffffffffffffffffffffff8416610b01576040517fe602df0500000000000000000000000000000000000000000000000000000000815260006004820152602401610428565b73ffffffffffffffffffffffffffffffffffffffff8316610b51576040517f94280d6200000000000000000000000000000000000000000000000000000000815260006004820152602401610428565b73ffffffffffffffffffffffffffffffffffffffff8085166000908152600160209081526040808320938716835292905220829055801561098f578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051610beb91815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff8316610c31578060026000828254610c269190610f87565b90915550610ce39050565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205481811015610cb7576040517fe450d38c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff851660048201526024810182905260448101839052606401610428565b73ffffffffffffffffffffffffffffffffffffffff841660009081526020819052604090209082900390555b73ffffffffffffffffffffffffffffffffffffffff8216610d0c57600280548290039055610d38565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090208054820190555b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161062491815260200190565b602081526000825180602084015260005b81811015610dc55760208186018101516040868401015201610da8565b5060006040828501015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011684010191505092915050565b803573ffffffffffffffffffffffffffffffffffffffff81168114610e2757600080fd5b919050565b60008060408385031215610e3f57600080fd5b610e4883610e03565b946020939093013593505050565b60008060408385031215610e6957600080fd5b610e7283610e03565b9150610e8060208401610e03565b90509250929050565b600080600060608486031215610e9e57600080fd5b610ea784610e03565b95602085013595506040909401359392505050565b600080600060608486031215610ed157600080fd5b610eda84610e03565b9250610ee860208501610e03565b929592945050506040919091013590565b600060208284031215610f0b57600080fd5b5035919050565b600060208284031215610f2457600080fd5b610f2d82610e03565b9392505050565b600181811c90821680610f4857607f821691505b602082108103610f81577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b808201808211156103ad577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea2646970667358221220085f01204b33dc17013c78c74fbca32a3da2c0b384ce7c8878c889551af28c6164736f6c634300081a003360a060405234801561001057600080fd5b5060405161140b38038061140b83398101604081905261002f916101b3565b60016000556002805460ff191690556001600160a01b038316158061005b57506001600160a01b038216155b8061006d57506001600160a01b038116155b1561008b5760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b0383166080526100a3600082610102565b506100ce7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a82610102565b506100f97f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e483610102565b505050506101f6565b60008281526001602090815260408083206001600160a01b038516845290915281205460ff1661018d5760008381526001602081815260408084206001600160a01b0387168086529252808420805460ff19169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a4506001610191565b5060005b92915050565b80516001600160a01b03811681146101ae57600080fd5b919050565b6000806000606084860312156101c857600080fd5b6101d184610197565b92506101df60208501610197565b91506101ed60408501610197565b90509250925092565b6080516111de61022d60003960008181610132015281816103c5015281816104270152818161065801526106ba01526111de6000f3fe608060405234801561001057600080fd5b50600436106101005760003560e01c80638456cb5911610097578063c8a0236211610066578063c8a0236214610276578063d547741f14610289578063d9caed121461029c578063e63ab1e9146102af57600080fd5b80638456cb59146101f957806385f438c11461020157806391d1485414610228578063a217fddf1461026e57600080fd5b80632f2ff15d116100d35780632f2ff15d146101c057806336568abe146101d35780633f4ba83a146101e65780635c975abb146101ee57600080fd5b806301ffc9a714610105578063116191b61461012d57806321fc65f214610179578063248a9ca31461018e575b600080fd5b610118610113366004610f04565b6102d6565b60405190151581526020015b60405180910390f35b6101547f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610124565b61018c610187366004610f6f565b61036f565b005b6101b261019c36600461100c565b6000908152600160208190526040909120015490565b604051908152602001610124565b61018c6101ce366004611025565b610511565b61018c6101e1366004611025565b61053d565b61018c61059b565b60025460ff16610118565b61018c6105d0565b6101b27f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b610118610236366004611025565b600091825260016020908152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b6101b2600081565b61018c610284366004610f6f565b610602565b61018c610297366004611025565b61078a565b61018c6102aa366004611051565b6107b0565b6101b27f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061036957507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b61037761087d565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e46103a1816108c0565b6103a96108ca565b6103ea73ffffffffffffffffffffffffffffffffffffffff87167f000000000000000000000000000000000000000000000000000000000000000086610909565b6040517f5131ab5900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690635131ab599061046490899089908990899089906004016110d7565b600060405180830381600087803b15801561047e57600080fd5b505af1158015610492573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167f85b5be9cf454e05e0bddf49315178102227c312078eefa3c00294fb4d912ae4e8686866040516104f793929190611134565b60405180910390a35061050a6001600055565b5050505050565b6000828152600160208190526040909120015461052d816108c0565b6105378383610996565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8116331461058c576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6105968282610a61565b505050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a6105c5816108c0565b6105cd610b20565b50565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a6105fa816108c0565b6105cd610b9d565b61060a61087d565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e4610634816108c0565b61063c6108ca565b61067d73ffffffffffffffffffffffffffffffffffffffff87167f000000000000000000000000000000000000000000000000000000000000000086610909565b6040517fb8969bd400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063b8969bd4906106f790899089908990899089906004016110d7565b600060405180830381600087803b15801561071157600080fd5b505af1158015610725573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fb9d4efa96044e5f5e03e696fa9ae2ff66911cc27e8a637c3627c75bc5b2241c88686866040516104f793929190611134565b600082815260016020819052604090912001546107a6816108c0565b6105378383610a61565b6107b861087d565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e46107e2816108c0565b6107ea6108ca565b61080b73ffffffffffffffffffffffffffffffffffffffff85168484610909565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f9b1bfa7fa9ee420a16e124f794c35ac9f90472acc99140eb2f6447c714cad8eb8460405161086a91815260200190565b60405180910390a3506105966001600055565b6002600054036108b9576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b6105cd8133610bf8565b60025460ff1615610907576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6040805173ffffffffffffffffffffffffffffffffffffffff8416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb00000000000000000000000000000000000000000000000000000000179052610596908490610c89565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff16610a5957600083815260016020818152604080842073ffffffffffffffffffffffffffffffffffffffff8716808652925280842080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a4506001610369565b506000610369565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff1615610a5957600083815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8616808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a4506001610369565b610b28610d1f565b600280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b610ba56108ca565b600280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258610b733390565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16610c85576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82166004820152602481018390526044015b60405180910390fd5b5050565b6000610cab73ffffffffffffffffffffffffffffffffffffffff841683610d5b565b90508051600014158015610cd0575080806020019051810190610cce9190611157565b155b15610596576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84166004820152602401610c7c565b60025460ff16610907576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6060610d6983836000610d70565b9392505050565b606081471015610dae576040517fcd786059000000000000000000000000000000000000000000000000000000008152306004820152602401610c7c565b6000808573ffffffffffffffffffffffffffffffffffffffff168486604051610dd79190611179565b60006040518083038185875af1925050503d8060008114610e14576040519150601f19603f3d011682016040523d82523d6000602084013e610e19565b606091505b5091509150610e29868383610e33565b9695505050505050565b606082610e4857610e4382610ec2565b610d69565b8151158015610e6c575073ffffffffffffffffffffffffffffffffffffffff84163b155b15610ebb576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85166004820152602401610c7c565b5080610d69565b805115610ed25780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060208284031215610f1657600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610d6957600080fd5b803573ffffffffffffffffffffffffffffffffffffffff81168114610f6a57600080fd5b919050565b600080600080600060808688031215610f8757600080fd5b610f9086610f46565b9450610f9e60208701610f46565b935060408601359250606086013567ffffffffffffffff811115610fc157600080fd5b8601601f81018813610fd257600080fd5b803567ffffffffffffffff811115610fe957600080fd5b886020828401011115610ffb57600080fd5b959894975092955050506020019190565b60006020828403121561101e57600080fd5b5035919050565b6000806040838503121561103857600080fd5b8235915061104860208401610f46565b90509250929050565b60008060006060848603121561106657600080fd5b61106f84610f46565b925061107d60208501610f46565b929592945050506040919091013590565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff8616815273ffffffffffffffffffffffffffffffffffffffff8516602082015283604082015260806060820152600061112960808301848661108e565b979650505050505050565b83815260406020820152600061114e60408301848661108e565b95945050505050565b60006020828403121561116957600080fd5b81518015158114610d6957600080fd5b6000825160005b8181101561119a5760208186018101518583015201611180565b50600092019182525091905056fea264697066735822122069d5c5c3cb2752c876b6a2138d8d9b66bac6bd1b48a1fe98417eea81faf02a3e64736f6c634300081a003360c060405260001960035534801561001657600080fd5b5060405161155a38038061155a83398101604081905261003591610220565b60016000819055805460ff19169055838383836001600160a01b038416158061006557506001600160a01b038316155b8061007757506001600160a01b038216155b8061008957506001600160a01b038116155b156100a75760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b03808516608052831660a0526100c5600082610154565b506100f07f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e483610154565b5061011b7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb83610154565b506101467f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a82610154565b505050505050505050610274565b60008281526002602090815260408083206001600160a01b038516845290915281205460ff166101fa5760008381526002602090815260408083206001600160a01b03861684529091529020805460ff191660011790556101b23390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45060016101fe565b5060005b92915050565b80516001600160a01b038116811461021b57600080fd5b919050565b6000806000806080858703121561023657600080fd5b61023f85610204565b935061024d60208601610204565b925061025b60408601610204565b915061026960608601610204565b905092959194509250565b60805160a0516112826102d86000396000818161021d01528181610531015281816108240152818161097b01528181610ad00152610bf20152600081816101d1015281816104a1015281816105040152818161079401526107f701526112826000f3fe608060405234801561001057600080fd5b50600436106101775760003560e01c80635e3e9fef116100d857806391d148541161008c578063d547741f11610066578063d547741f14610386578063d5abeb0114610399578063e63ab1e9146103a257600080fd5b806391d1485414610311578063a217fddf14610357578063a783c7891461035f57600080fd5b8063743e0c9b116100bd578063743e0c9b146102cf5780638456cb59146102e257806385f438c1146102ea57600080fd5b80635e3e9fef146102a95780636f8b44b0146102bc57600080fd5b8063248a9ca31161012f57806336568abe1161011457806336568abe146102835780633f4ba83a146102965780635c975abb1461029e57600080fd5b8063248a9ca31461023f5780632f2ff15d1461027057600080fd5b8063106e629011610160578063106e6290146101b9578063116191b6146101cc57806321e093b11461021857600080fd5b806301ffc9a71461017c57806302d5c899146101a4575b600080fd5b61018f61018a366004610fb4565b6103c9565b60405190151581526020015b60405180910390f35b6101b76101b2366004611026565b610462565b005b6101b76101c73660046110b8565b6105f7565b6101f37f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161019b565b6101f37f000000000000000000000000000000000000000000000000000000000000000081565b61026261024d3660046110eb565b60009081526002602052604090206001015490565b60405190815260200161019b565b6101b761027e366004611104565b61069c565b6101b7610291366004611104565b6106c7565b6101b7610720565b60015460ff1661018f565b6101b76102b7366004611026565b610755565b6101b76102ca3660046110eb565b6108d0565b6101b76102dd3660046110eb565b61093e565b6101b76109e8565b6102627f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b61018f61031f366004611104565b600091825260026020908152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b610262600081565b6102627f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb81565b6101b7610394366004611104565b610a1a565b61026260035481565b6102627f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061045c57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b61046a610a3f565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461049481610a82565b61049c610a8c565b6104c77f00000000000000000000000000000000000000000000000000000000000000008684610acb565b6040517fb8969bd400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063b8969bd490610561907f0000000000000000000000000000000000000000000000000000000000000000908a908a908a908a90600401611179565b600060405180830381600087803b15801561057b57600080fd5b505af115801561058f573d6000803e3d6000fd5b505050508573ffffffffffffffffffffffffffffffffffffffff167fba96f26bdda53eb8c8ba39045dfb4ff39753fbc7a6edcf250a88e75e78d102fe8686866040516105dd939291906111d6565b60405180910390a2506105f06001600055565b5050505050565b6105ff610a3f565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461062981610a82565b610631610a8c565b61063c848484610acb565b8373ffffffffffffffffffffffffffffffffffffffff167f884edad9ce6fa2440d8a54cc123490eb96d2768479d49ff9c7366125a94243648460405161068491815260200190565b60405180910390a2506106976001600055565b505050565b6000828152600260205260409020600101546106b781610a82565b6106c18383610c53565b50505050565b73ffffffffffffffffffffffffffffffffffffffff81163314610716576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6106978282610d53565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61074a81610a82565b610752610e12565b50565b61075d610a3f565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461078781610a82565b61078f610a8c565b6107ba7f00000000000000000000000000000000000000000000000000000000000000008684610acb565b6040517f5131ab5900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690635131ab5990610854907f0000000000000000000000000000000000000000000000000000000000000000908a908a908a908a90600401611179565b600060405180830381600087803b15801561086e57600080fd5b505af1158015610882573d6000803e3d6000fd5b505050508573ffffffffffffffffffffffffffffffffffffffff167f7772f56296d3a5202974a45c61c9188d844ab4d6eeb18c851e4b8d5384ca6ced8686866040516105dd939291906111d6565b7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb6108fa81610a82565b610902610a8c565b60038290556040518281527f7810bd47de260c3e9ee10061cf438099dd12256c79485f12f94dbccc981e806c9060200160405180910390a15050565b610946610a8c565b6040517f79cc6790000000000000000000000000000000000000000000000000000000008152336004820152602481018290527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16906379cc679090604401600060405180830381600087803b1580156109d457600080fd5b505af11580156105f0573d6000803e3d6000fd5b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610a1281610a82565b610752610e8f565b600082815260026020526040902060010154610a3581610a82565b6106c18383610d53565b600260005403610a7b576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b6107528133610ee8565b60015460ff1615610ac9576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6003547f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b39573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b5d91906111f9565b610b679084611212565b1115610b9f576040517fc30436e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f1e458bee00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff848116600483015260248201849052604482018390527f00000000000000000000000000000000000000000000000000000000000000001690631e458bee90606401600060405180830381600087803b158015610c3657600080fd5b505af1158015610c4a573d6000803e3d6000fd5b50505050505050565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff16610d4b57600083815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff86168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055610ce93390565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a450600161045c565b50600061045c565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff1615610d4b57600083815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8616808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a450600161045c565b610e1a610f78565b600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b610e97610a8c565b600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016811790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25833610e65565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16610f74576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff821660048201526024810183905260440160405180910390fd5b5050565b60015460ff16610ac9576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060208284031215610fc657600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610ff657600080fd5b9392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461102157600080fd5b919050565b60008060008060006080868803121561103e57600080fd5b61104786610ffd565b945060208601359350604086013567ffffffffffffffff81111561106a57600080fd5b8601601f8101881361107b57600080fd5b803567ffffffffffffffff81111561109257600080fd5b8860208284010111156110a457600080fd5b959894975060200195606001359392505050565b6000806000606084860312156110cd57600080fd5b6110d684610ffd565b95602085013595506040909401359392505050565b6000602082840312156110fd57600080fd5b5035919050565b6000806040838503121561111757600080fd5b8235915061112760208401610ffd565b90509250929050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff8616815273ffffffffffffffffffffffffffffffffffffffff851660208201528360408201526080606082015260006111cb608083018486611130565b979650505050505050565b8381526040602082015260006111f0604083018486611130565b95945050505050565b60006020828403121561120b57600080fd5b5051919050565b8082018082111561045c577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea2646970667358221220f784eb6e1655c2988d3f762737188cfee07a61da1d5b8456cc4f4e55cb339cfb64736f6c634300081a00336080604052348015600f57600080fd5b506001600055610d3a806100246000396000f3fe6080604052600436106100635760003560e01c8063c513169111610040578063c5131691146100c1578063e04d4f97146100e1578063f05b6abf146100f457005b8063357fc5a21461006c5780636ed701691461008c5780638fcaa0b5146100a157005b3661006a57005b005b34801561007857600080fd5b5061006a6100873660046106c0565b610114565b34801561009857600080fd5b5061006a6101aa565b3480156100ad57600080fd5b5061006a6100bc3660046106fc565b6101df565b3480156100cd57600080fd5b5061006a6100dc3660046106c0565b61021e565b61006a6100ef366004610895565b6102f9565b34801561010057600080fd5b5061006a61010f366004610981565b61033d565b61011c610372565b61013e73ffffffffffffffffffffffffffffffffffffffff83163383866103b5565b604080513381526020810185905273ffffffffffffffffffffffffffffffffffffffff848116828401528316606082015290517f2b58128f24a9f59127cc5b5430d70542b22220f2d9adaa86e442b816ab98af609181900360800190a16101a56001600055565b505050565b6040513381527fbcaadb46b82a48af60b608f58959ae6b8310d1b0a0d094c2e9ec3208ed39f2a09060200160405180910390a1565b7f0d3f65f00e631663aa85c96330b5c7a83bb29af3630c0063776f985edc3037aa33838360405161021293929190610a6b565b60405180910390a15050565b610226610372565b6000610233600285610ad5565b90508060000361026f576040517f1f2a200500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61029173ffffffffffffffffffffffffffffffffffffffff84163384846103b5565b604080513381526020810183905273ffffffffffffffffffffffffffffffffffffffff858116828401528416606082015290517f2b58128f24a9f59127cc5b5430d70542b22220f2d9adaa86e442b816ab98af609181900360800190a1506101a56001600055565b7f1f1ff1f5fb41346850b2f5c04e6c767e2f1c8a525c5c0c5cdb60cdf3ca5f62fa3334858585604051610330959493929190610b7e565b60405180910390a1505050565b7f74a53cd528a921fca7dbdee62f86819051d3cc98f214951f4238e8843f20b146338484846040516103309493929190610c08565b6002600054036103ae576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b6040805173ffffffffffffffffffffffffffffffffffffffff85811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd0000000000000000000000000000000000000000000000000000000017905261044a908590610450565b50505050565b600061047273ffffffffffffffffffffffffffffffffffffffff8416836104eb565b905080516000141580156104975750808060200190518101906104959190610ccb565b155b156101a5576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff841660048201526024015b60405180910390fd5b60606104f983836000610500565b9392505050565b60608147101561053e576040517fcd7860590000000000000000000000000000000000000000000000000000000081523060048201526024016104e2565b6000808573ffffffffffffffffffffffffffffffffffffffff1684866040516105679190610ce8565b60006040518083038185875af1925050503d80600081146105a4576040519150601f19603f3d011682016040523d82523d6000602084013e6105a9565b606091505b50915091506105b98683836105c3565b9695505050505050565b6060826105d8576105d382610652565b6104f9565b81511580156105fc575073ffffffffffffffffffffffffffffffffffffffff84163b155b1561064b576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff851660048201526024016104e2565b50806104f9565b8051156106625780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50565b803573ffffffffffffffffffffffffffffffffffffffff811681146106bb57600080fd5b919050565b6000806000606084860312156106d557600080fd5b833592506106e560208501610697565b91506106f360408501610697565b90509250925092565b6000806020838503121561070f57600080fd5b823567ffffffffffffffff81111561072657600080fd5b8301601f8101851361073757600080fd5b803567ffffffffffffffff81111561074e57600080fd5b85602082840101111561076057600080fd5b6020919091019590945092505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156107e6576107e6610770565b604052919050565b600082601f8301126107ff57600080fd5b813567ffffffffffffffff81111561081957610819610770565b61084a60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8401160161079f565b81815284602083860101111561085f57600080fd5b816020850160208301376000918101602001919091529392505050565b801515811461069457600080fd5b80356106bb8161087c565b6000806000606084860312156108aa57600080fd5b833567ffffffffffffffff8111156108c157600080fd5b6108cd868287016107ee565b9350506020840135915060408401356108e58161087c565b809150509250925092565b600067ffffffffffffffff82111561090a5761090a610770565b5060051b60200190565b600082601f83011261092557600080fd5b8135610938610933826108f0565b61079f565b8082825260208201915060208360051b86010192508583111561095a57600080fd5b602085015b8381101561097757803583526020928301920161095f565b5095945050505050565b60008060006060848603121561099657600080fd5b833567ffffffffffffffff8111156109ad57600080fd5b8401601f810186136109be57600080fd5b80356109cc610933826108f0565b8082825260208201915060208360051b8501019250888311156109ee57600080fd5b602084015b83811015610a3057803567ffffffffffffffff811115610a1257600080fd5b610a218b6020838901016107ee565b845250602092830192016109f3565b509550505050602084013567ffffffffffffffff811115610a5057600080fd5b610a5c86828701610914565b9250506106f36040850161088a565b73ffffffffffffffffffffffffffffffffffffffff8416815260406020820152816040820152818360608301376000818301606090810191909152601f9092017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016010192915050565b600082610b0b577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60005b83811015610b2b578181015183820152602001610b13565b50506000910152565b60008151808452610b4c816020860160208601610b10565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b73ffffffffffffffffffffffffffffffffffffffff8616815284602082015260a060408201526000610bb360a0830186610b34565b6060830194909452509015156080909101529392505050565b600081518084526020840193506020830160005b82811015610bfe578151865260209586019590910190600101610be0565b5093949350505050565b60006080820173ffffffffffffffffffffffffffffffffffffffff871683526080602084015280865180835260a08501915060a08160051b86010192506020880160005b82811015610c9b577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60878603018452610c86858351610b34565b94506020938401939190910190600101610c4c565b505050508281036040840152610cb18186610bcc565b915050610cc2606083018415159052565b95945050505050565b600060208284031215610cdd57600080fd5b81516104f98161087c565b60008251610cfa818460208701610b10565b919091019291505056fea2646970667358221220556072e1abafc3c4063b8cce832228b4f309b93726aaa6a6dfab20cb880c6d1864736f6c634300081a0033a26469706673582212209fe5da56b15e0013a23c70bf5e12f14249c527039ae37dce465a1f47718ed53f64736f6c634300081a0033", } // GatewayEVMTestABI is the input ABI used to generate the binding from. @@ -251,6 +251,37 @@ func (_GatewayEVMTest *GatewayEVMTestCallerSession) ASSETHANDLERROLE() ([32]byte return _GatewayEVMTest.Contract.ASSETHANDLERROLE(&_GatewayEVMTest.CallOpts) } +// DEFAULTADMINROLE is a free data retrieval call binding the contract method 0xa217fddf. +// +// Solidity: function DEFAULT_ADMIN_ROLE() view returns(bytes32) +func (_GatewayEVMTest *GatewayEVMTestCaller) DEFAULTADMINROLE(opts *bind.CallOpts) ([32]byte, error) { + var out []interface{} + err := _GatewayEVMTest.contract.Call(opts, &out, "DEFAULT_ADMIN_ROLE") + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// DEFAULTADMINROLE is a free data retrieval call binding the contract method 0xa217fddf. +// +// Solidity: function DEFAULT_ADMIN_ROLE() view returns(bytes32) +func (_GatewayEVMTest *GatewayEVMTestSession) DEFAULTADMINROLE() ([32]byte, error) { + return _GatewayEVMTest.Contract.DEFAULTADMINROLE(&_GatewayEVMTest.CallOpts) +} + +// DEFAULTADMINROLE is a free data retrieval call binding the contract method 0xa217fddf. +// +// Solidity: function DEFAULT_ADMIN_ROLE() view returns(bytes32) +func (_GatewayEVMTest *GatewayEVMTestCallerSession) DEFAULTADMINROLE() ([32]byte, error) { + return _GatewayEVMTest.Contract.DEFAULTADMINROLE(&_GatewayEVMTest.CallOpts) +} + // ISTEST is a free data retrieval call binding the contract method 0xfa7626d4. // // Solidity: function IS_TEST() view returns(bool) @@ -737,6 +768,27 @@ func (_GatewayEVMTest *GatewayEVMTestTransactorSession) SetUp() (*types.Transact return _GatewayEVMTest.Contract.SetUp(&_GatewayEVMTest.TransactOpts) } +// TestExecuteFailsIfDestinationIsZeroAddress is a paid mutator transaction binding the contract method 0x04b974f9. +// +// Solidity: function testExecuteFailsIfDestinationIsZeroAddress() returns() +func (_GatewayEVMTest *GatewayEVMTestTransactor) TestExecuteFailsIfDestinationIsZeroAddress(opts *bind.TransactOpts) (*types.Transaction, error) { + return _GatewayEVMTest.contract.Transact(opts, "testExecuteFailsIfDestinationIsZeroAddress") +} + +// TestExecuteFailsIfDestinationIsZeroAddress is a paid mutator transaction binding the contract method 0x04b974f9. +// +// Solidity: function testExecuteFailsIfDestinationIsZeroAddress() returns() +func (_GatewayEVMTest *GatewayEVMTestSession) TestExecuteFailsIfDestinationIsZeroAddress() (*types.Transaction, error) { + return _GatewayEVMTest.Contract.TestExecuteFailsIfDestinationIsZeroAddress(&_GatewayEVMTest.TransactOpts) +} + +// TestExecuteFailsIfDestinationIsZeroAddress is a paid mutator transaction binding the contract method 0x04b974f9. +// +// Solidity: function testExecuteFailsIfDestinationIsZeroAddress() returns() +func (_GatewayEVMTest *GatewayEVMTestTransactorSession) TestExecuteFailsIfDestinationIsZeroAddress() (*types.Transaction, error) { + return _GatewayEVMTest.Contract.TestExecuteFailsIfDestinationIsZeroAddress(&_GatewayEVMTest.TransactOpts) +} + // TestExecuteRevert is a paid mutator transaction binding the contract method 0xfa18c09b. // // Solidity: function testExecuteRevert() returns() @@ -758,6 +810,27 @@ func (_GatewayEVMTest *GatewayEVMTestTransactorSession) TestExecuteRevert() (*ty return _GatewayEVMTest.Contract.TestExecuteRevert(&_GatewayEVMTest.TransactOpts) } +// TestExecuteRevertFailsIfReceiverIsZeroAddress is a paid mutator transaction binding the contract method 0x51010e49. +// +// Solidity: function testExecuteRevertFailsIfReceiverIsZeroAddress() returns() +func (_GatewayEVMTest *GatewayEVMTestTransactor) TestExecuteRevertFailsIfReceiverIsZeroAddress(opts *bind.TransactOpts) (*types.Transaction, error) { + return _GatewayEVMTest.contract.Transact(opts, "testExecuteRevertFailsIfReceiverIsZeroAddress") +} + +// TestExecuteRevertFailsIfReceiverIsZeroAddress is a paid mutator transaction binding the contract method 0x51010e49. +// +// Solidity: function testExecuteRevertFailsIfReceiverIsZeroAddress() returns() +func (_GatewayEVMTest *GatewayEVMTestSession) TestExecuteRevertFailsIfReceiverIsZeroAddress() (*types.Transaction, error) { + return _GatewayEVMTest.Contract.TestExecuteRevertFailsIfReceiverIsZeroAddress(&_GatewayEVMTest.TransactOpts) +} + +// TestExecuteRevertFailsIfReceiverIsZeroAddress is a paid mutator transaction binding the contract method 0x51010e49. +// +// Solidity: function testExecuteRevertFailsIfReceiverIsZeroAddress() returns() +func (_GatewayEVMTest *GatewayEVMTestTransactorSession) TestExecuteRevertFailsIfReceiverIsZeroAddress() (*types.Transaction, error) { + return _GatewayEVMTest.Contract.TestExecuteRevertFailsIfReceiverIsZeroAddress(&_GatewayEVMTest.TransactOpts) +} + // TestExecuteRevertFailsIfSenderIsNotTSS is a paid mutator transaction binding the contract method 0xcebad2a6. // // Solidity: function testExecuteRevertFailsIfSenderIsNotTSS() returns() @@ -779,151 +852,25 @@ func (_GatewayEVMTest *GatewayEVMTestTransactorSession) TestExecuteRevertFailsIf return _GatewayEVMTest.Contract.TestExecuteRevertFailsIfSenderIsNotTSS(&_GatewayEVMTest.TransactOpts) } -// TestExecuteWithERC20FailsIfNotCustoryOrConnector is a paid mutator transaction binding the contract method 0xc9350b7f. -// -// Solidity: function testExecuteWithERC20FailsIfNotCustoryOrConnector() returns() -func (_GatewayEVMTest *GatewayEVMTestTransactor) TestExecuteWithERC20FailsIfNotCustoryOrConnector(opts *bind.TransactOpts) (*types.Transaction, error) { - return _GatewayEVMTest.contract.Transact(opts, "testExecuteWithERC20FailsIfNotCustoryOrConnector") -} - -// TestExecuteWithERC20FailsIfNotCustoryOrConnector is a paid mutator transaction binding the contract method 0xc9350b7f. -// -// Solidity: function testExecuteWithERC20FailsIfNotCustoryOrConnector() returns() -func (_GatewayEVMTest *GatewayEVMTestSession) TestExecuteWithERC20FailsIfNotCustoryOrConnector() (*types.Transaction, error) { - return _GatewayEVMTest.Contract.TestExecuteWithERC20FailsIfNotCustoryOrConnector(&_GatewayEVMTest.TransactOpts) -} - -// TestExecuteWithERC20FailsIfNotCustoryOrConnector is a paid mutator transaction binding the contract method 0xc9350b7f. -// -// Solidity: function testExecuteWithERC20FailsIfNotCustoryOrConnector() returns() -func (_GatewayEVMTest *GatewayEVMTestTransactorSession) TestExecuteWithERC20FailsIfNotCustoryOrConnector() (*types.Transaction, error) { - return _GatewayEVMTest.Contract.TestExecuteWithERC20FailsIfNotCustoryOrConnector(&_GatewayEVMTest.TransactOpts) -} - -// TestForwardCallToReceiveERC20PartialThroughCustody is a paid mutator transaction binding the contract method 0xfb176c12. -// -// Solidity: function testForwardCallToReceiveERC20PartialThroughCustody() returns() -func (_GatewayEVMTest *GatewayEVMTestTransactor) TestForwardCallToReceiveERC20PartialThroughCustody(opts *bind.TransactOpts) (*types.Transaction, error) { - return _GatewayEVMTest.contract.Transact(opts, "testForwardCallToReceiveERC20PartialThroughCustody") -} - -// TestForwardCallToReceiveERC20PartialThroughCustody is a paid mutator transaction binding the contract method 0xfb176c12. -// -// Solidity: function testForwardCallToReceiveERC20PartialThroughCustody() returns() -func (_GatewayEVMTest *GatewayEVMTestSession) TestForwardCallToReceiveERC20PartialThroughCustody() (*types.Transaction, error) { - return _GatewayEVMTest.Contract.TestForwardCallToReceiveERC20PartialThroughCustody(&_GatewayEVMTest.TransactOpts) -} - -// TestForwardCallToReceiveERC20PartialThroughCustody is a paid mutator transaction binding the contract method 0xfb176c12. -// -// Solidity: function testForwardCallToReceiveERC20PartialThroughCustody() returns() -func (_GatewayEVMTest *GatewayEVMTestTransactorSession) TestForwardCallToReceiveERC20PartialThroughCustody() (*types.Transaction, error) { - return _GatewayEVMTest.Contract.TestForwardCallToReceiveERC20PartialThroughCustody(&_GatewayEVMTest.TransactOpts) -} - -// TestForwardCallToReceiveERC20PartialThroughCustodyFailsIfAmountIs0 is a paid mutator transaction binding the contract method 0x6a621854. +// TestExecuteWithERC20FailsIfNotCustodyOrConnector is a paid mutator transaction binding the contract method 0xe6afc790. // -// Solidity: function testForwardCallToReceiveERC20PartialThroughCustodyFailsIfAmountIs0() returns() -func (_GatewayEVMTest *GatewayEVMTestTransactor) TestForwardCallToReceiveERC20PartialThroughCustodyFailsIfAmountIs0(opts *bind.TransactOpts) (*types.Transaction, error) { - return _GatewayEVMTest.contract.Transact(opts, "testForwardCallToReceiveERC20PartialThroughCustodyFailsIfAmountIs0") +// Solidity: function testExecuteWithERC20FailsIfNotCustodyOrConnector() returns() +func (_GatewayEVMTest *GatewayEVMTestTransactor) TestExecuteWithERC20FailsIfNotCustodyOrConnector(opts *bind.TransactOpts) (*types.Transaction, error) { + return _GatewayEVMTest.contract.Transact(opts, "testExecuteWithERC20FailsIfNotCustodyOrConnector") } -// TestForwardCallToReceiveERC20PartialThroughCustodyFailsIfAmountIs0 is a paid mutator transaction binding the contract method 0x6a621854. +// TestExecuteWithERC20FailsIfNotCustodyOrConnector is a paid mutator transaction binding the contract method 0xe6afc790. // -// Solidity: function testForwardCallToReceiveERC20PartialThroughCustodyFailsIfAmountIs0() returns() -func (_GatewayEVMTest *GatewayEVMTestSession) TestForwardCallToReceiveERC20PartialThroughCustodyFailsIfAmountIs0() (*types.Transaction, error) { - return _GatewayEVMTest.Contract.TestForwardCallToReceiveERC20PartialThroughCustodyFailsIfAmountIs0(&_GatewayEVMTest.TransactOpts) +// Solidity: function testExecuteWithERC20FailsIfNotCustodyOrConnector() returns() +func (_GatewayEVMTest *GatewayEVMTestSession) TestExecuteWithERC20FailsIfNotCustodyOrConnector() (*types.Transaction, error) { + return _GatewayEVMTest.Contract.TestExecuteWithERC20FailsIfNotCustodyOrConnector(&_GatewayEVMTest.TransactOpts) } -// TestForwardCallToReceiveERC20PartialThroughCustodyFailsIfAmountIs0 is a paid mutator transaction binding the contract method 0x6a621854. +// TestExecuteWithERC20FailsIfNotCustodyOrConnector is a paid mutator transaction binding the contract method 0xe6afc790. // -// Solidity: function testForwardCallToReceiveERC20PartialThroughCustodyFailsIfAmountIs0() returns() -func (_GatewayEVMTest *GatewayEVMTestTransactorSession) TestForwardCallToReceiveERC20PartialThroughCustodyFailsIfAmountIs0() (*types.Transaction, error) { - return _GatewayEVMTest.Contract.TestForwardCallToReceiveERC20PartialThroughCustodyFailsIfAmountIs0(&_GatewayEVMTest.TransactOpts) -} - -// TestForwardCallToReceiveERC20PartialThroughCustodyFailsIfSenderIsNotWithdrawer is a paid mutator transaction binding the contract method 0x0eee72a9. -// -// Solidity: function testForwardCallToReceiveERC20PartialThroughCustodyFailsIfSenderIsNotWithdrawer() returns() -func (_GatewayEVMTest *GatewayEVMTestTransactor) TestForwardCallToReceiveERC20PartialThroughCustodyFailsIfSenderIsNotWithdrawer(opts *bind.TransactOpts) (*types.Transaction, error) { - return _GatewayEVMTest.contract.Transact(opts, "testForwardCallToReceiveERC20PartialThroughCustodyFailsIfSenderIsNotWithdrawer") -} - -// TestForwardCallToReceiveERC20PartialThroughCustodyFailsIfSenderIsNotWithdrawer is a paid mutator transaction binding the contract method 0x0eee72a9. -// -// Solidity: function testForwardCallToReceiveERC20PartialThroughCustodyFailsIfSenderIsNotWithdrawer() returns() -func (_GatewayEVMTest *GatewayEVMTestSession) TestForwardCallToReceiveERC20PartialThroughCustodyFailsIfSenderIsNotWithdrawer() (*types.Transaction, error) { - return _GatewayEVMTest.Contract.TestForwardCallToReceiveERC20PartialThroughCustodyFailsIfSenderIsNotWithdrawer(&_GatewayEVMTest.TransactOpts) -} - -// TestForwardCallToReceiveERC20PartialThroughCustodyFailsIfSenderIsNotWithdrawer is a paid mutator transaction binding the contract method 0x0eee72a9. -// -// Solidity: function testForwardCallToReceiveERC20PartialThroughCustodyFailsIfSenderIsNotWithdrawer() returns() -func (_GatewayEVMTest *GatewayEVMTestTransactorSession) TestForwardCallToReceiveERC20PartialThroughCustodyFailsIfSenderIsNotWithdrawer() (*types.Transaction, error) { - return _GatewayEVMTest.Contract.TestForwardCallToReceiveERC20PartialThroughCustodyFailsIfSenderIsNotWithdrawer(&_GatewayEVMTest.TransactOpts) -} - -// TestForwardCallToReceiveERC20ThroughCustody is a paid mutator transaction binding the contract method 0xcbd57e2f. -// -// Solidity: function testForwardCallToReceiveERC20ThroughCustody() returns() -func (_GatewayEVMTest *GatewayEVMTestTransactor) TestForwardCallToReceiveERC20ThroughCustody(opts *bind.TransactOpts) (*types.Transaction, error) { - return _GatewayEVMTest.contract.Transact(opts, "testForwardCallToReceiveERC20ThroughCustody") -} - -// TestForwardCallToReceiveERC20ThroughCustody is a paid mutator transaction binding the contract method 0xcbd57e2f. -// -// Solidity: function testForwardCallToReceiveERC20ThroughCustody() returns() -func (_GatewayEVMTest *GatewayEVMTestSession) TestForwardCallToReceiveERC20ThroughCustody() (*types.Transaction, error) { - return _GatewayEVMTest.Contract.TestForwardCallToReceiveERC20ThroughCustody(&_GatewayEVMTest.TransactOpts) -} - -// TestForwardCallToReceiveERC20ThroughCustody is a paid mutator transaction binding the contract method 0xcbd57e2f. -// -// Solidity: function testForwardCallToReceiveERC20ThroughCustody() returns() -func (_GatewayEVMTest *GatewayEVMTestTransactorSession) TestForwardCallToReceiveERC20ThroughCustody() (*types.Transaction, error) { - return _GatewayEVMTest.Contract.TestForwardCallToReceiveERC20ThroughCustody(&_GatewayEVMTest.TransactOpts) -} - -// TestForwardCallToReceiveERC20ThroughCustodyFailsIfAmountIs0 is a paid mutator transaction binding the contract method 0x1779672f. -// -// Solidity: function testForwardCallToReceiveERC20ThroughCustodyFailsIfAmountIs0() returns() -func (_GatewayEVMTest *GatewayEVMTestTransactor) TestForwardCallToReceiveERC20ThroughCustodyFailsIfAmountIs0(opts *bind.TransactOpts) (*types.Transaction, error) { - return _GatewayEVMTest.contract.Transact(opts, "testForwardCallToReceiveERC20ThroughCustodyFailsIfAmountIs0") -} - -// TestForwardCallToReceiveERC20ThroughCustodyFailsIfAmountIs0 is a paid mutator transaction binding the contract method 0x1779672f. -// -// Solidity: function testForwardCallToReceiveERC20ThroughCustodyFailsIfAmountIs0() returns() -func (_GatewayEVMTest *GatewayEVMTestSession) TestForwardCallToReceiveERC20ThroughCustodyFailsIfAmountIs0() (*types.Transaction, error) { - return _GatewayEVMTest.Contract.TestForwardCallToReceiveERC20ThroughCustodyFailsIfAmountIs0(&_GatewayEVMTest.TransactOpts) -} - -// TestForwardCallToReceiveERC20ThroughCustodyFailsIfAmountIs0 is a paid mutator transaction binding the contract method 0x1779672f. -// -// Solidity: function testForwardCallToReceiveERC20ThroughCustodyFailsIfAmountIs0() returns() -func (_GatewayEVMTest *GatewayEVMTestTransactorSession) TestForwardCallToReceiveERC20ThroughCustodyFailsIfAmountIs0() (*types.Transaction, error) { - return _GatewayEVMTest.Contract.TestForwardCallToReceiveERC20ThroughCustodyFailsIfAmountIs0(&_GatewayEVMTest.TransactOpts) -} - -// TestForwardCallToReceiveERC20ThroughCustodyFailsIfSenderIsNotWithdrawer is a paid mutator transaction binding the contract method 0x3ee92923. -// -// Solidity: function testForwardCallToReceiveERC20ThroughCustodyFailsIfSenderIsNotWithdrawer() returns() -func (_GatewayEVMTest *GatewayEVMTestTransactor) TestForwardCallToReceiveERC20ThroughCustodyFailsIfSenderIsNotWithdrawer(opts *bind.TransactOpts) (*types.Transaction, error) { - return _GatewayEVMTest.contract.Transact(opts, "testForwardCallToReceiveERC20ThroughCustodyFailsIfSenderIsNotWithdrawer") -} - -// TestForwardCallToReceiveERC20ThroughCustodyFailsIfSenderIsNotWithdrawer is a paid mutator transaction binding the contract method 0x3ee92923. -// -// Solidity: function testForwardCallToReceiveERC20ThroughCustodyFailsIfSenderIsNotWithdrawer() returns() -func (_GatewayEVMTest *GatewayEVMTestSession) TestForwardCallToReceiveERC20ThroughCustodyFailsIfSenderIsNotWithdrawer() (*types.Transaction, error) { - return _GatewayEVMTest.Contract.TestForwardCallToReceiveERC20ThroughCustodyFailsIfSenderIsNotWithdrawer(&_GatewayEVMTest.TransactOpts) -} - -// TestForwardCallToReceiveERC20ThroughCustodyFailsIfSenderIsNotWithdrawer is a paid mutator transaction binding the contract method 0x3ee92923. -// -// Solidity: function testForwardCallToReceiveERC20ThroughCustodyFailsIfSenderIsNotWithdrawer() returns() -func (_GatewayEVMTest *GatewayEVMTestTransactorSession) TestForwardCallToReceiveERC20ThroughCustodyFailsIfSenderIsNotWithdrawer() (*types.Transaction, error) { - return _GatewayEVMTest.Contract.TestForwardCallToReceiveERC20ThroughCustodyFailsIfSenderIsNotWithdrawer(&_GatewayEVMTest.TransactOpts) +// Solidity: function testExecuteWithERC20FailsIfNotCustodyOrConnector() returns() +func (_GatewayEVMTest *GatewayEVMTestTransactorSession) TestExecuteWithERC20FailsIfNotCustodyOrConnector() (*types.Transaction, error) { + return _GatewayEVMTest.Contract.TestExecuteWithERC20FailsIfNotCustodyOrConnector(&_GatewayEVMTest.TransactOpts) } // TestForwardCallToReceiveNoParams is a paid mutator transaction binding the contract method 0x44671b94. @@ -947,27 +894,6 @@ func (_GatewayEVMTest *GatewayEVMTestTransactorSession) TestForwardCallToReceive return _GatewayEVMTest.Contract.TestForwardCallToReceiveNoParams(&_GatewayEVMTest.TransactOpts) } -// TestForwardCallToReceiveNoParamsThroughCustody is a paid mutator transaction binding the contract method 0xa3f9d0e0. -// -// Solidity: function testForwardCallToReceiveNoParamsThroughCustody() returns() -func (_GatewayEVMTest *GatewayEVMTestTransactor) TestForwardCallToReceiveNoParamsThroughCustody(opts *bind.TransactOpts) (*types.Transaction, error) { - return _GatewayEVMTest.contract.Transact(opts, "testForwardCallToReceiveNoParamsThroughCustody") -} - -// TestForwardCallToReceiveNoParamsThroughCustody is a paid mutator transaction binding the contract method 0xa3f9d0e0. -// -// Solidity: function testForwardCallToReceiveNoParamsThroughCustody() returns() -func (_GatewayEVMTest *GatewayEVMTestSession) TestForwardCallToReceiveNoParamsThroughCustody() (*types.Transaction, error) { - return _GatewayEVMTest.Contract.TestForwardCallToReceiveNoParamsThroughCustody(&_GatewayEVMTest.TransactOpts) -} - -// TestForwardCallToReceiveNoParamsThroughCustody is a paid mutator transaction binding the contract method 0xa3f9d0e0. -// -// Solidity: function testForwardCallToReceiveNoParamsThroughCustody() returns() -func (_GatewayEVMTest *GatewayEVMTestTransactorSession) TestForwardCallToReceiveNoParamsThroughCustody() (*types.Transaction, error) { - return _GatewayEVMTest.Contract.TestForwardCallToReceiveNoParamsThroughCustody(&_GatewayEVMTest.TransactOpts) -} - // TestForwardCallToReceiveNoParamsTogglePause is a paid mutator transaction binding the contract method 0xdd51e82f. // // Solidity: function testForwardCallToReceiveNoParamsTogglePause() returns() @@ -1052,130 +978,151 @@ func (_GatewayEVMTest *GatewayEVMTestTransactorSession) TestForwardCallToReceive return _GatewayEVMTest.Contract.TestForwardCallToReceivePayable(&_GatewayEVMTest.TransactOpts) } -// TestRevertWithERC20FailsIfNotCustoryOrConnector is a paid mutator transaction binding the contract method 0x2206eb65. +// TestRevertWithERC20FailsIfNotCustodyOrConnector is a paid mutator transaction binding the contract method 0xb124dbf5. +// +// Solidity: function testRevertWithERC20FailsIfNotCustodyOrConnector() returns() +func (_GatewayEVMTest *GatewayEVMTestTransactor) TestRevertWithERC20FailsIfNotCustodyOrConnector(opts *bind.TransactOpts) (*types.Transaction, error) { + return _GatewayEVMTest.contract.Transact(opts, "testRevertWithERC20FailsIfNotCustodyOrConnector") +} + +// TestRevertWithERC20FailsIfNotCustodyOrConnector is a paid mutator transaction binding the contract method 0xb124dbf5. +// +// Solidity: function testRevertWithERC20FailsIfNotCustodyOrConnector() returns() +func (_GatewayEVMTest *GatewayEVMTestSession) TestRevertWithERC20FailsIfNotCustodyOrConnector() (*types.Transaction, error) { + return _GatewayEVMTest.Contract.TestRevertWithERC20FailsIfNotCustodyOrConnector(&_GatewayEVMTest.TransactOpts) +} + +// TestRevertWithERC20FailsIfNotCustodyOrConnector is a paid mutator transaction binding the contract method 0xb124dbf5. +// +// Solidity: function testRevertWithERC20FailsIfNotCustodyOrConnector() returns() +func (_GatewayEVMTest *GatewayEVMTestTransactorSession) TestRevertWithERC20FailsIfNotCustodyOrConnector() (*types.Transaction, error) { + return _GatewayEVMTest.Contract.TestRevertWithERC20FailsIfNotCustodyOrConnector(&_GatewayEVMTest.TransactOpts) +} + +// TestSetConnectorFailsIfSenderIsNotAdmin is a paid mutator transaction binding the contract method 0xccf20616. // -// Solidity: function testRevertWithERC20FailsIfNotCustoryOrConnector() returns() -func (_GatewayEVMTest *GatewayEVMTestTransactor) TestRevertWithERC20FailsIfNotCustoryOrConnector(opts *bind.TransactOpts) (*types.Transaction, error) { - return _GatewayEVMTest.contract.Transact(opts, "testRevertWithERC20FailsIfNotCustoryOrConnector") +// Solidity: function testSetConnectorFailsIfSenderIsNotAdmin() returns() +func (_GatewayEVMTest *GatewayEVMTestTransactor) TestSetConnectorFailsIfSenderIsNotAdmin(opts *bind.TransactOpts) (*types.Transaction, error) { + return _GatewayEVMTest.contract.Transact(opts, "testSetConnectorFailsIfSenderIsNotAdmin") } -// TestRevertWithERC20FailsIfNotCustoryOrConnector is a paid mutator transaction binding the contract method 0x2206eb65. +// TestSetConnectorFailsIfSenderIsNotAdmin is a paid mutator transaction binding the contract method 0xccf20616. // -// Solidity: function testRevertWithERC20FailsIfNotCustoryOrConnector() returns() -func (_GatewayEVMTest *GatewayEVMTestSession) TestRevertWithERC20FailsIfNotCustoryOrConnector() (*types.Transaction, error) { - return _GatewayEVMTest.Contract.TestRevertWithERC20FailsIfNotCustoryOrConnector(&_GatewayEVMTest.TransactOpts) +// Solidity: function testSetConnectorFailsIfSenderIsNotAdmin() returns() +func (_GatewayEVMTest *GatewayEVMTestSession) TestSetConnectorFailsIfSenderIsNotAdmin() (*types.Transaction, error) { + return _GatewayEVMTest.Contract.TestSetConnectorFailsIfSenderIsNotAdmin(&_GatewayEVMTest.TransactOpts) } -// TestRevertWithERC20FailsIfNotCustoryOrConnector is a paid mutator transaction binding the contract method 0x2206eb65. +// TestSetConnectorFailsIfSenderIsNotAdmin is a paid mutator transaction binding the contract method 0xccf20616. // -// Solidity: function testRevertWithERC20FailsIfNotCustoryOrConnector() returns() -func (_GatewayEVMTest *GatewayEVMTestTransactorSession) TestRevertWithERC20FailsIfNotCustoryOrConnector() (*types.Transaction, error) { - return _GatewayEVMTest.Contract.TestRevertWithERC20FailsIfNotCustoryOrConnector(&_GatewayEVMTest.TransactOpts) +// Solidity: function testSetConnectorFailsIfSenderIsNotAdmin() returns() +func (_GatewayEVMTest *GatewayEVMTestTransactorSession) TestSetConnectorFailsIfSenderIsNotAdmin() (*types.Transaction, error) { + return _GatewayEVMTest.Contract.TestSetConnectorFailsIfSenderIsNotAdmin(&_GatewayEVMTest.TransactOpts) } -// TestWithdrawAndRevertThroughCustody is a paid mutator transaction binding the contract method 0x71149c94. +// TestSetConnectorFailsIfSet is a paid mutator transaction binding the contract method 0x7ebf744f. // -// Solidity: function testWithdrawAndRevertThroughCustody() returns() -func (_GatewayEVMTest *GatewayEVMTestTransactor) TestWithdrawAndRevertThroughCustody(opts *bind.TransactOpts) (*types.Transaction, error) { - return _GatewayEVMTest.contract.Transact(opts, "testWithdrawAndRevertThroughCustody") +// Solidity: function testSetConnectorFailsIfSet() returns() +func (_GatewayEVMTest *GatewayEVMTestTransactor) TestSetConnectorFailsIfSet(opts *bind.TransactOpts) (*types.Transaction, error) { + return _GatewayEVMTest.contract.Transact(opts, "testSetConnectorFailsIfSet") } -// TestWithdrawAndRevertThroughCustody is a paid mutator transaction binding the contract method 0x71149c94. +// TestSetConnectorFailsIfSet is a paid mutator transaction binding the contract method 0x7ebf744f. // -// Solidity: function testWithdrawAndRevertThroughCustody() returns() -func (_GatewayEVMTest *GatewayEVMTestSession) TestWithdrawAndRevertThroughCustody() (*types.Transaction, error) { - return _GatewayEVMTest.Contract.TestWithdrawAndRevertThroughCustody(&_GatewayEVMTest.TransactOpts) +// Solidity: function testSetConnectorFailsIfSet() returns() +func (_GatewayEVMTest *GatewayEVMTestSession) TestSetConnectorFailsIfSet() (*types.Transaction, error) { + return _GatewayEVMTest.Contract.TestSetConnectorFailsIfSet(&_GatewayEVMTest.TransactOpts) } -// TestWithdrawAndRevertThroughCustody is a paid mutator transaction binding the contract method 0x71149c94. +// TestSetConnectorFailsIfSet is a paid mutator transaction binding the contract method 0x7ebf744f. // -// Solidity: function testWithdrawAndRevertThroughCustody() returns() -func (_GatewayEVMTest *GatewayEVMTestTransactorSession) TestWithdrawAndRevertThroughCustody() (*types.Transaction, error) { - return _GatewayEVMTest.Contract.TestWithdrawAndRevertThroughCustody(&_GatewayEVMTest.TransactOpts) +// Solidity: function testSetConnectorFailsIfSet() returns() +func (_GatewayEVMTest *GatewayEVMTestTransactorSession) TestSetConnectorFailsIfSet() (*types.Transaction, error) { + return _GatewayEVMTest.Contract.TestSetConnectorFailsIfSet(&_GatewayEVMTest.TransactOpts) } -// TestWithdrawAndRevertThroughCustodyFailsIfAmountIs0 is a paid mutator transaction binding the contract method 0xeb1ce7f9. +// TestSetConnectorFailsIfZero is a paid mutator transaction binding the contract method 0xce5871e1. // -// Solidity: function testWithdrawAndRevertThroughCustodyFailsIfAmountIs0() returns() -func (_GatewayEVMTest *GatewayEVMTestTransactor) TestWithdrawAndRevertThroughCustodyFailsIfAmountIs0(opts *bind.TransactOpts) (*types.Transaction, error) { - return _GatewayEVMTest.contract.Transact(opts, "testWithdrawAndRevertThroughCustodyFailsIfAmountIs0") +// Solidity: function testSetConnectorFailsIfZero() returns() +func (_GatewayEVMTest *GatewayEVMTestTransactor) TestSetConnectorFailsIfZero(opts *bind.TransactOpts) (*types.Transaction, error) { + return _GatewayEVMTest.contract.Transact(opts, "testSetConnectorFailsIfZero") } -// TestWithdrawAndRevertThroughCustodyFailsIfAmountIs0 is a paid mutator transaction binding the contract method 0xeb1ce7f9. +// TestSetConnectorFailsIfZero is a paid mutator transaction binding the contract method 0xce5871e1. // -// Solidity: function testWithdrawAndRevertThroughCustodyFailsIfAmountIs0() returns() -func (_GatewayEVMTest *GatewayEVMTestSession) TestWithdrawAndRevertThroughCustodyFailsIfAmountIs0() (*types.Transaction, error) { - return _GatewayEVMTest.Contract.TestWithdrawAndRevertThroughCustodyFailsIfAmountIs0(&_GatewayEVMTest.TransactOpts) +// Solidity: function testSetConnectorFailsIfZero() returns() +func (_GatewayEVMTest *GatewayEVMTestSession) TestSetConnectorFailsIfZero() (*types.Transaction, error) { + return _GatewayEVMTest.Contract.TestSetConnectorFailsIfZero(&_GatewayEVMTest.TransactOpts) } -// TestWithdrawAndRevertThroughCustodyFailsIfAmountIs0 is a paid mutator transaction binding the contract method 0xeb1ce7f9. +// TestSetConnectorFailsIfZero is a paid mutator transaction binding the contract method 0xce5871e1. // -// Solidity: function testWithdrawAndRevertThroughCustodyFailsIfAmountIs0() returns() -func (_GatewayEVMTest *GatewayEVMTestTransactorSession) TestWithdrawAndRevertThroughCustodyFailsIfAmountIs0() (*types.Transaction, error) { - return _GatewayEVMTest.Contract.TestWithdrawAndRevertThroughCustodyFailsIfAmountIs0(&_GatewayEVMTest.TransactOpts) +// Solidity: function testSetConnectorFailsIfZero() returns() +func (_GatewayEVMTest *GatewayEVMTestTransactorSession) TestSetConnectorFailsIfZero() (*types.Transaction, error) { + return _GatewayEVMTest.Contract.TestSetConnectorFailsIfZero(&_GatewayEVMTest.TransactOpts) } -// TestWithdrawAndRevertThroughCustodyFailsIfSenderIsNotWithdrawer is a paid mutator transaction binding the contract method 0xa4943deb. +// TestSetCustodyFailsIfSenderIsNotAdmin is a paid mutator transaction binding the contract method 0xa56f7a4b. // -// Solidity: function testWithdrawAndRevertThroughCustodyFailsIfSenderIsNotWithdrawer() returns() -func (_GatewayEVMTest *GatewayEVMTestTransactor) TestWithdrawAndRevertThroughCustodyFailsIfSenderIsNotWithdrawer(opts *bind.TransactOpts) (*types.Transaction, error) { - return _GatewayEVMTest.contract.Transact(opts, "testWithdrawAndRevertThroughCustodyFailsIfSenderIsNotWithdrawer") +// Solidity: function testSetCustodyFailsIfSenderIsNotAdmin() returns() +func (_GatewayEVMTest *GatewayEVMTestTransactor) TestSetCustodyFailsIfSenderIsNotAdmin(opts *bind.TransactOpts) (*types.Transaction, error) { + return _GatewayEVMTest.contract.Transact(opts, "testSetCustodyFailsIfSenderIsNotAdmin") } -// TestWithdrawAndRevertThroughCustodyFailsIfSenderIsNotWithdrawer is a paid mutator transaction binding the contract method 0xa4943deb. +// TestSetCustodyFailsIfSenderIsNotAdmin is a paid mutator transaction binding the contract method 0xa56f7a4b. // -// Solidity: function testWithdrawAndRevertThroughCustodyFailsIfSenderIsNotWithdrawer() returns() -func (_GatewayEVMTest *GatewayEVMTestSession) TestWithdrawAndRevertThroughCustodyFailsIfSenderIsNotWithdrawer() (*types.Transaction, error) { - return _GatewayEVMTest.Contract.TestWithdrawAndRevertThroughCustodyFailsIfSenderIsNotWithdrawer(&_GatewayEVMTest.TransactOpts) +// Solidity: function testSetCustodyFailsIfSenderIsNotAdmin() returns() +func (_GatewayEVMTest *GatewayEVMTestSession) TestSetCustodyFailsIfSenderIsNotAdmin() (*types.Transaction, error) { + return _GatewayEVMTest.Contract.TestSetCustodyFailsIfSenderIsNotAdmin(&_GatewayEVMTest.TransactOpts) } -// TestWithdrawAndRevertThroughCustodyFailsIfSenderIsNotWithdrawer is a paid mutator transaction binding the contract method 0xa4943deb. +// TestSetCustodyFailsIfSenderIsNotAdmin is a paid mutator transaction binding the contract method 0xa56f7a4b. // -// Solidity: function testWithdrawAndRevertThroughCustodyFailsIfSenderIsNotWithdrawer() returns() -func (_GatewayEVMTest *GatewayEVMTestTransactorSession) TestWithdrawAndRevertThroughCustodyFailsIfSenderIsNotWithdrawer() (*types.Transaction, error) { - return _GatewayEVMTest.Contract.TestWithdrawAndRevertThroughCustodyFailsIfSenderIsNotWithdrawer(&_GatewayEVMTest.TransactOpts) +// Solidity: function testSetCustodyFailsIfSenderIsNotAdmin() returns() +func (_GatewayEVMTest *GatewayEVMTestTransactorSession) TestSetCustodyFailsIfSenderIsNotAdmin() (*types.Transaction, error) { + return _GatewayEVMTest.Contract.TestSetCustodyFailsIfSenderIsNotAdmin(&_GatewayEVMTest.TransactOpts) } -// TestWithdrawThroughCustody is a paid mutator transaction binding the contract method 0x3e73ecb4. +// TestSetCustodyFailsIfSet is a paid mutator transaction binding the contract method 0x1855c337. // -// Solidity: function testWithdrawThroughCustody() returns() -func (_GatewayEVMTest *GatewayEVMTestTransactor) TestWithdrawThroughCustody(opts *bind.TransactOpts) (*types.Transaction, error) { - return _GatewayEVMTest.contract.Transact(opts, "testWithdrawThroughCustody") +// Solidity: function testSetCustodyFailsIfSet() returns() +func (_GatewayEVMTest *GatewayEVMTestTransactor) TestSetCustodyFailsIfSet(opts *bind.TransactOpts) (*types.Transaction, error) { + return _GatewayEVMTest.contract.Transact(opts, "testSetCustodyFailsIfSet") } -// TestWithdrawThroughCustody is a paid mutator transaction binding the contract method 0x3e73ecb4. +// TestSetCustodyFailsIfSet is a paid mutator transaction binding the contract method 0x1855c337. // -// Solidity: function testWithdrawThroughCustody() returns() -func (_GatewayEVMTest *GatewayEVMTestSession) TestWithdrawThroughCustody() (*types.Transaction, error) { - return _GatewayEVMTest.Contract.TestWithdrawThroughCustody(&_GatewayEVMTest.TransactOpts) +// Solidity: function testSetCustodyFailsIfSet() returns() +func (_GatewayEVMTest *GatewayEVMTestSession) TestSetCustodyFailsIfSet() (*types.Transaction, error) { + return _GatewayEVMTest.Contract.TestSetCustodyFailsIfSet(&_GatewayEVMTest.TransactOpts) } -// TestWithdrawThroughCustody is a paid mutator transaction binding the contract method 0x3e73ecb4. +// TestSetCustodyFailsIfSet is a paid mutator transaction binding the contract method 0x1855c337. // -// Solidity: function testWithdrawThroughCustody() returns() -func (_GatewayEVMTest *GatewayEVMTestTransactorSession) TestWithdrawThroughCustody() (*types.Transaction, error) { - return _GatewayEVMTest.Contract.TestWithdrawThroughCustody(&_GatewayEVMTest.TransactOpts) +// Solidity: function testSetCustodyFailsIfSet() returns() +func (_GatewayEVMTest *GatewayEVMTestTransactorSession) TestSetCustodyFailsIfSet() (*types.Transaction, error) { + return _GatewayEVMTest.Contract.TestSetCustodyFailsIfSet(&_GatewayEVMTest.TransactOpts) } -// TestWithdrawThroughCustodyFailsIfSenderIsNotWithdrawer is a paid mutator transaction binding the contract method 0xfe8e5f1b. +// TestSetCustodyFailsIfZero is a paid mutator transaction binding the contract method 0x1226c655. // -// Solidity: function testWithdrawThroughCustodyFailsIfSenderIsNotWithdrawer() returns() -func (_GatewayEVMTest *GatewayEVMTestTransactor) TestWithdrawThroughCustodyFailsIfSenderIsNotWithdrawer(opts *bind.TransactOpts) (*types.Transaction, error) { - return _GatewayEVMTest.contract.Transact(opts, "testWithdrawThroughCustodyFailsIfSenderIsNotWithdrawer") +// Solidity: function testSetCustodyFailsIfZero() returns() +func (_GatewayEVMTest *GatewayEVMTestTransactor) TestSetCustodyFailsIfZero(opts *bind.TransactOpts) (*types.Transaction, error) { + return _GatewayEVMTest.contract.Transact(opts, "testSetCustodyFailsIfZero") } -// TestWithdrawThroughCustodyFailsIfSenderIsNotWithdrawer is a paid mutator transaction binding the contract method 0xfe8e5f1b. +// TestSetCustodyFailsIfZero is a paid mutator transaction binding the contract method 0x1226c655. // -// Solidity: function testWithdrawThroughCustodyFailsIfSenderIsNotWithdrawer() returns() -func (_GatewayEVMTest *GatewayEVMTestSession) TestWithdrawThroughCustodyFailsIfSenderIsNotWithdrawer() (*types.Transaction, error) { - return _GatewayEVMTest.Contract.TestWithdrawThroughCustodyFailsIfSenderIsNotWithdrawer(&_GatewayEVMTest.TransactOpts) +// Solidity: function testSetCustodyFailsIfZero() returns() +func (_GatewayEVMTest *GatewayEVMTestSession) TestSetCustodyFailsIfZero() (*types.Transaction, error) { + return _GatewayEVMTest.Contract.TestSetCustodyFailsIfZero(&_GatewayEVMTest.TransactOpts) } -// TestWithdrawThroughCustodyFailsIfSenderIsNotWithdrawer is a paid mutator transaction binding the contract method 0xfe8e5f1b. +// TestSetCustodyFailsIfZero is a paid mutator transaction binding the contract method 0x1226c655. // -// Solidity: function testWithdrawThroughCustodyFailsIfSenderIsNotWithdrawer() returns() -func (_GatewayEVMTest *GatewayEVMTestTransactorSession) TestWithdrawThroughCustodyFailsIfSenderIsNotWithdrawer() (*types.Transaction, error) { - return _GatewayEVMTest.Contract.TestWithdrawThroughCustodyFailsIfSenderIsNotWithdrawer(&_GatewayEVMTest.TransactOpts) +// Solidity: function testSetCustodyFailsIfZero() returns() +func (_GatewayEVMTest *GatewayEVMTestTransactorSession) TestSetCustodyFailsIfZero() (*types.Transaction, error) { + return _GatewayEVMTest.Contract.TestSetCustodyFailsIfZero(&_GatewayEVMTest.TransactOpts) } // GatewayEVMTestCallIterator is returned from FilterCall and is used to iterate over the raw logs and unpacked data for Call events raised by the GatewayEVMTest contract. diff --git a/v2/pkg/gatewayevmechidnatest.sol/gatewayevmechidnatest.go b/v2/pkg/gatewayevmechidnatest.sol/gatewayevmechidnatest.go index c83ec9ca..277caee5 100644 --- a/v2/pkg/gatewayevmechidnatest.sol/gatewayevmechidnatest.go +++ b/v2/pkg/gatewayevmechidnatest.sol/gatewayevmechidnatest.go @@ -31,8 +31,8 @@ var ( // GatewayEVMEchidnaTestMetaData contains all meta data concerning the GatewayEVMEchidnaTest contract. var GatewayEVMEchidnaTestMetaData = &bind.MetaData{ - ABI: "[{\"type\":\"constructor\",\"inputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"ASSET_HANDLER_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"DEFAULT_ADMIN_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"PAUSER_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"TSS_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"UPGRADE_INTERFACE_VERSION\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"call\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"custody\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"deposit\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"deposit\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"depositAndCall\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"depositAndCall\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"echidnaCaller\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"execute\",\"inputs\":[{\"name\":\"destination\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"executeRevert\",\"inputs\":[{\"name\":\"destination\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"executeWithERC20\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"getRoleAdmin\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"grantRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"hasRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"initialize\",\"inputs\":[{\"name\":\"tssAddress_\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"zetaToken_\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"admin_\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"pause\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"paused\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"proxiableUUID\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"renounceRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"callerConfirmation\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"revertWithERC20\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"revokeRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setConnector\",\"inputs\":[{\"name\":\"zetaConnector_\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setCustody\",\"inputs\":[{\"name\":\"custody_\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"supportsInterface\",\"inputs\":[{\"name\":\"interfaceId\",\"type\":\"bytes4\",\"internalType\":\"bytes4\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"testERC20\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractTestERC20\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"testExecuteWithERC20\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"tssAddress\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"unpause\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"upgradeToAndCall\",\"inputs\":[{\"name\":\"newImplementation\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"zetaConnector\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"zetaToken\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"event\",\"name\":\"Call\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"receiver\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Deposit\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"receiver\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"asset\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Executed\",\"inputs\":[{\"name\":\"destination\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ExecutedWithERC20\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Initialized\",\"inputs\":[{\"name\":\"version\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Paused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Reverted\",\"inputs\":[{\"name\":\"destination\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RevertedWithERC20\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleAdminChanged\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"previousAdminRole\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"newAdminRole\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleGranted\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleRevoked\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Unpaused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Upgraded\",\"inputs\":[{\"name\":\"implementation\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"AccessControlBadConfirmation\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"AccessControlUnauthorizedAccount\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"neededRole\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"type\":\"error\",\"name\":\"AddressEmptyCode\",\"inputs\":[{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"AddressInsufficientBalance\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"ApprovalFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"CustodyInitialized\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"DepositFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ERC1967InvalidImplementation\",\"inputs\":[{\"name\":\"implementation\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"ERC1967NonPayable\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"EnforcedPause\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ExecutionFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ExpectedPause\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"FailedInnerCall\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientERC20Amount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientETHAmount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidInitialization\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NotInitializing\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ReentrancyGuardReentrantCall\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"SafeERC20FailedOperation\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"UUPSUnauthorizedCallContext\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"UUPSUnsupportedProxiableUUID\",\"inputs\":[{\"name\":\"slot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"type\":\"error\",\"name\":\"ZeroAddress\",\"inputs\":[]}]", - Bin: "0x60a060405230608052600580546001600160a01b0319163317905534801561002657600080fd5b5061002f610154565b600554600180546001600160a01b039092166001600160a01b031992831617905560028054610123921691909117905560405161006b90610206565b60408082526004908201819052631d195cdd60e21b606083015260806020830181905282015263151154d560e21b60a082015260c001604051809103906000f0801580156100bd573d6000803e3d6000fd5b50600480546001600160a01b0319166001600160a01b039283161790556001546040513092919091169082906100f290610213565b6001600160a01b03938416815291831660208301529091166040820152606001604051809103906000f08015801561012e573d6000803e3d6000fd5b50600080546001600160a01b0319166001600160a01b0392909216919091179055610220565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156101a45760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146102035780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b610c9f806133f683390190565b61140b8061409583390190565b6080516131ad61024960003960008181611f2601528181611f4f015261231e01526131ad6000f3fe6080604052600436106102345760003560e01c80635c975abb11610138578063ad3cb1cc116100b0578063d547741f1161007f578063e63ab1e911610064578063e63ab1e9146106ff578063f340fa0114610733578063f45346dc1461074657600080fd5b8063d547741f146106bf578063dda79b75146106df57600080fd5b8063ad3cb1cc14610616578063ae7a3a6f1461065f578063b8969bd41461067f578063c0c53b8b1461069f57600080fd5b80638456cb591161010757806391d14854116100ec57806391d1485414610568578063a217fddf146105cd578063a783c789146105e257600080fd5b80638456cb59146105335780638c6f037f1461054857600080fd5b80635c975abb146104885780635d62c860146104bf5780636ab90f9b146104f357806381100bf01461051357600080fd5b806335c018db116101cb5780634f1ef2861161019a57806352d1902d1161017f57806352d1902d1461043357806357bec62f146104485780635b1125911461046857600080fd5b80634f1ef286146104005780635131ab591461041357600080fd5b806335c018db1461039857806336568abe146103ab5780633c2f05a8146103cb5780633f4ba83a146103eb57600080fd5b806321e093b11161020757806321e093b1146102d0578063248a9ca31461030857806329c59b5d146103655780632f2ff15d1461037857600080fd5b806301ffc9a71461023957806310188aef1461026e5780631b8b921d146102905780631cff79cd146102b0575b600080fd5b34801561024557600080fd5b50610259610254366004612b97565b610766565b60405190151581526020015b60405180910390f35b34801561027a57600080fd5b5061028e610289366004612bf5565b6107ff565b005b34801561029c57600080fd5b5061028e6102ab366004612c59565b6108f3565b6102c36102be366004612c59565b61097e565b6040516102659190612d1a565b3480156102dc57600080fd5b506003546102f0906001600160a01b031681565b6040516001600160a01b039091168152602001610265565b34801561031457600080fd5b50610357610323366004612d2d565b60009081527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052604090206001015490565b604051908152602001610265565b61028e610373366004612c59565b610a41565b34801561038457600080fd5b5061028e610393366004612d46565b610b94565b61028e6103a6366004612c59565b610bde565b3480156103b757600080fd5b5061028e6103c6366004612d46565b610dcd565b3480156103d757600080fd5b506004546102f0906001600160a01b031681565b3480156103f757600080fd5b5061028e610e19565b61028e61040e366004612da1565b610e4e565b34801561041f57600080fd5b5061028e61042e366004612ea8565b610e6d565b34801561043f57600080fd5b5061035761114a565b34801561045457600080fd5b506002546102f0906001600160a01b031681565b34801561047457600080fd5b506001546102f0906001600160a01b031681565b34801561049457600080fd5b507fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff16610259565b3480156104cb57600080fd5b506103577f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b981565b3480156104ff57600080fd5b5061028e61050e366004612f17565b611179565b34801561051f57600080fd5b506005546102f0906001600160a01b031681565b34801561053f57600080fd5b5061028e6112a4565b34801561055457600080fd5b5061028e610563366004612f71565b6112d6565b34801561057457600080fd5b50610259610583366004612d46565b60009182527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408084206001600160a01b0393909316845291905290205460ff1690565b3480156105d957600080fd5b50610357600081565b3480156105ee57600080fd5b506103577f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb81565b34801561062257600080fd5b506102c36040518060400160405280600581526020017f352e302e3000000000000000000000000000000000000000000000000000000081525081565b34801561066b57600080fd5b5061028e61067a366004612bf5565b6113ac565b34801561068b57600080fd5b5061028e61069a366004612ea8565b6114a0565b3480156106ab57600080fd5b5061028e6106ba366004612fc3565b611619565b3480156106cb57600080fd5b5061028e6106da366004612d46565b6118ce565b3480156106eb57600080fd5b506000546102f0906001600160a01b031681565b34801561070b57600080fd5b506103577f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b61028e610741366004612bf5565b611912565b34801561075257600080fd5b5061028e610761366004613006565b611a67565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b0000000000000000000000000000000000000000000000000000000014806107f957507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b600061080a81611b22565b6002546001600160a01b03161561084d576040517fb337f37800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03821661088d576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6108b77f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b983611b2c565b5050600280547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6108fb611c19565b610903611c77565b826001600160a01b0316336001600160a01b03167f2a21062ee9199c2e205622999eeb7c3da73153674f36a0acd3f74fa6af67bde38484604051610948929190613082565b60405180910390a361097960017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b505050565b60607f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb6109aa81611b22565b6109b2611c19565b6109ba611c77565b60006109c7868686611d1e565b9050856001600160a01b03167fcaf938de11c367272220bfd1d2baa99ca46665e7bc4d85f00adb51b90fe1fa9f348787604051610a069392919061309e565b60405180910390a29150610a3960017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b509392505050565b610a49611c19565b610a51611c77565b34600003610a8b576040517f7671265e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546040516000916001600160a01b03169034908381818185875af1925050503d8060008114610ad8576040519150601f19603f3d011682016040523d82523d6000602084013e610add565b606091505b5050905080610b18576040517f79cacff100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b836001600160a01b0316336001600160a01b03167f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a43460008787604051610b6294939291906130b8565b60405180910390a35061097960017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020526040902060010154610bce81611b22565b610bd88383611b2c565b50505050565b7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb610c0881611b22565b610c10611c19565b610c18611c77565b6001600160a01b038416610c58576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000846001600160a01b03163460405160006040518083038185875af1925050503d8060008114610ca5576040519150601f19603f3d011682016040523d82523d6000602084013e610caa565b606091505b5050905080610ce5576040517facfdb44400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f8fcaa0b50000000000000000000000000000000000000000000000000000000081526001600160a01b03861690638fcaa0b590610d2c9087908790600401613082565b600060405180830381600087803b158015610d4657600080fd5b505af1158015610d5a573d6000803e3d6000fd5b50505050846001600160a01b03167fd5d7616b1678354a0dea9d7e57e6a090bff5babe9f8d6381fdbad16e89ba311c348686604051610d9b9392919061309e565b60405180910390a250610bd860017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b6001600160a01b0381163314610e0f576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6109798282611dc7565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610e4381611b22565b610e4b611e8b565b50565b610e56611f1b565b610e5f82611feb565b610e698282611ff6565b5050565b7f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b9610e9781611b22565b610e9f611c19565b610ea7611c77565b83600003610ee1576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610eeb868661211a565b610f21576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b0386811660048301526024820186905287169063095ea7b3906044016020604051808303816000875af1158015610f89573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fad91906130e1565b610fe3576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610ff0868585611d1e565b9050610ffc878761211a565b611032576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201526000906001600160a01b038916906370a0823190602401602060405180830381865afa158015611092573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110b69190613103565b905080156110c8576110c888826121aa565b866001600160a01b0316886001600160a01b03167f29c40793bffd84cb810179f15d1ceec72bc7f0785514c668ba36645cf99b738288888860405161110f9392919061309e565b60405180910390a3505061114260017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b505050505050565b6000611154612313565b507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc90565b600480546040517f40c10f190000000000000000000000000000000000000000000000000000000081523092810192909252602482018590526001600160a01b0316906340c10f1990604401600060405180830381600087803b1580156111df57600080fd5b505af11580156111f3573d6000803e3d6000fd5b505060045461121192506001600160a01b0316905085858585610e6d565b600480546040517f70a0823100000000000000000000000000000000000000000000000000000000815230928101929092526001600160a01b0316906370a0823190602401602060405180830381865afa158015611273573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112979190613103565b15610bd857610bd861311c565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a6112ce81611b22565b610e4b612375565b6112de611c19565b6112e6611c77565b83600003611320576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61132b3384866123ee565b846001600160a01b0316336001600160a01b03167f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a48686868660405161137494939291906130b8565b60405180910390a36113a560017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b5050505050565b60006113b781611b22565b6000546001600160a01b0316156113fa576040517fb337f37800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03821661143a576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6114647f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b983611b2c565b5050600080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b7f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b96114ca81611b22565b6114d2611c19565b6114da611c77565b83600003611514576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6115286001600160a01b0387168686612577565b6040517f8fcaa0b50000000000000000000000000000000000000000000000000000000081526001600160a01b03861690638fcaa0b59061156f9086908690600401613082565b600060405180830381600087803b15801561158957600080fd5b505af115801561159d573d6000803e3d6000fd5b50505050846001600160a01b0316866001600160a01b03167f723fc7be2448075379e4fdf1e6bf5fead954d2668d2da05dcb44ccfec4beeda78686866040516115e89392919061309e565b60405180910390a361114260017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156116645750825b905060008267ffffffffffffffff1660011480156116815750303b155b90508115801561168f575080155b156116c6576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84547fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000016600117855583156117275784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff16680100000000000000001785555b6001600160a01b038816158061174457506001600160a01b038716155b1561177b576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6117836125eb565b61178b6125f3565b6117936125eb565b61179b612603565b6117a6600087611b2c565b506117d17f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a87611b2c565b50600180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b038a1617905561182f7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb89611b2c565b50600380547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03891617905583156118c45784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b5050505050505050565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052604090206001015461190881611b22565b610bd88383611dc7565b61191a611c19565b611922611c77565b3460000361195c576040517f7671265e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546040516000916001600160a01b03169034908381818185875af1925050503d80600081146119a9576040519150601f19603f3d011682016040523d82523d6000602084013e6119ae565b606091505b50509050806119e9576040517f79cacff100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60408051348152600060208201819052606082840181905282015290516001600160a01b0384169133917f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a49181900360800190a350610e4b60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b611a6f611c19565b611a77611c77565b81600003611ab1576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611abc3382846123ee565b826001600160a01b0316336001600160a01b03167f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a484846040516109489291909182526001600160a01b0316602082015260606040820181905260009082015260800190565b610e4b8133612613565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff16611c0f576000848152602082815260408083206001600160a01b0387168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055611bc53390565b6001600160a01b0316836001600160a01b0316857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a460019150506107f9565b60009150506107f9565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff1615611c75576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0080547ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01611cf2576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60029055565b60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b6060600080856001600160a01b0316348686604051611d3e92919061314b565b60006040518083038185875af1925050503d8060008114611d7b576040519150601f19603f3d011682016040523d82523d6000602084013e611d80565b606091505b509150915081611dbc576040517facfdb44400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b9150505b9392505050565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff1615611c0f576000848152602082815260408083206001600160a01b038716808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339287917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a460019150506107f9565b611e936126a0565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001681557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a150565b306001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161480611fb457507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316611fa87f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b6001600160a01b031614155b15611c75576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610e6981611b22565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa92505050801561206e575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820190925261206b91810190613103565b60015b6120b4576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b03831660048201526024015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8114612110576040517faa1d49a4000000000000000000000000000000000000000000000000000000008152600481018290526024016120ab565b61097983836126fb565b6040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b038281166004830152600060248301819052919084169063095ea7b3906044016020604051808303816000875af1158015612186573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611dc091906130e1565b6003546001600160a01b03908116908316036122f9576002546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152602481018390529083169063095ea7b3906044016020604051808303816000875af115801561222c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061225091906130e1565b612286576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002546040517f743e0c9b000000000000000000000000000000000000000000000000000000008152600481018390526001600160a01b039091169063743e0c9b90602401600060405180830381600087803b1580156122e557600080fd5b505af1158015611142573d6000803e3d6000fd5b600054610e69906001600160a01b03848116911683612577565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614611c75576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61237d611c19565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011781557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25833611efd565b6003546001600160a01b039081169083160361255b576124196001600160a01b038316843084612751565b6002546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152602481018390529083169063095ea7b3906044016020604051808303816000875af1158015612485573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124a991906130e1565b6124df576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002546040517f743e0c9b000000000000000000000000000000000000000000000000000000008152600481018390526001600160a01b039091169063743e0c9b90602401600060405180830381600087803b15801561253e57600080fd5b505af1158015612552573d6000803e3d6000fd5b50505050505050565b600054610979906001600160a01b038481169186911684612751565b6040516001600160a01b0383811660248301526044820183905261097991859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505061278a565b611c75612806565b6125fb612806565b611c7561286d565b61260b612806565b611c75612875565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408083206001600160a01b038516845290915290205460ff16610e69576040517fe2517d3f0000000000000000000000000000000000000000000000000000000081526001600160a01b0382166004820152602481018390526044016120ab565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff16611c75576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612704826128c6565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a280511561274957610979828261296e565b610e696129e4565b6040516001600160a01b038481166024830152838116604483015260648201839052610bd89186918216906323b872dd906084016125a4565b600061279f6001600160a01b03841683612a1c565b905080516000141580156127c45750808060200190518101906127c291906130e1565b155b15610979576040517f5274afe70000000000000000000000000000000000000000000000000000000081526001600160a01b03841660048201526024016120ab565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff16611c75576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611cf8612806565b61287d612806565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055565b806001600160a01b03163b600003612915576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b03821660048201526024016120ab565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6060600080846001600160a01b03168460405161298b919061315b565b600060405180830381855af49150503d80600081146129c6576040519150601f19603f3d011682016040523d82523d6000602084013e6129cb565b606091505b50915091506129db858383612a2a565b95945050505050565b3415611c75576040517fb398979f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6060611dc083836000612a9f565b606082612a3f57612a3a82612b55565b611dc0565b8151158015612a5657506001600160a01b0384163b155b15612a98576040517f9996b3150000000000000000000000000000000000000000000000000000000081526001600160a01b03851660048201526024016120ab565b5080611dc0565b606081471015612add576040517fcd7860590000000000000000000000000000000000000000000000000000000081523060048201526024016120ab565b600080856001600160a01b03168486604051612af9919061315b565b60006040518083038185875af1925050503d8060008114612b36576040519150601f19603f3d011682016040523d82523d6000602084013e612b3b565b606091505b5091509150612b4b868383612a2a565b9695505050505050565b805115612b655780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060208284031215612ba957600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114611dc057600080fd5b80356001600160a01b0381168114612bf057600080fd5b919050565b600060208284031215612c0757600080fd5b611dc082612bd9565b60008083601f840112612c2257600080fd5b50813567ffffffffffffffff811115612c3a57600080fd5b602083019150836020828501011115612c5257600080fd5b9250929050565b600080600060408486031215612c6e57600080fd5b612c7784612bd9565b9250602084013567ffffffffffffffff811115612c9357600080fd5b612c9f86828701612c10565b9497909650939450505050565b60005b83811015612cc7578181015183820152602001612caf565b50506000910152565b60008151808452612ce8816020860160208601612cac565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000611dc06020830184612cd0565b600060208284031215612d3f57600080fd5b5035919050565b60008060408385031215612d5957600080fd5b82359150612d6960208401612bd9565b90509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60008060408385031215612db457600080fd5b612dbd83612bd9565b9150602083013567ffffffffffffffff811115612dd957600080fd5b8301601f81018513612dea57600080fd5b803567ffffffffffffffff811115612e0457612e04612d72565b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8501160116810181811067ffffffffffffffff82111715612e7057612e70612d72565b604052818152828201602001871015612e8857600080fd5b816020840160208301376000602083830101528093505050509250929050565b600080600080600060808688031215612ec057600080fd5b612ec986612bd9565b9450612ed760208701612bd9565b935060408601359250606086013567ffffffffffffffff811115612efa57600080fd5b612f0688828901612c10565b969995985093965092949392505050565b60008060008060608587031215612f2d57600080fd5b612f3685612bd9565b935060208501359250604085013567ffffffffffffffff811115612f5957600080fd5b612f6587828801612c10565b95989497509550505050565b600080600080600060808688031215612f8957600080fd5b612f9286612bd9565b945060208601359350612fa760408701612bd9565b9250606086013567ffffffffffffffff811115612efa57600080fd5b600080600060608486031215612fd857600080fd5b612fe184612bd9565b9250612fef60208501612bd9565b9150612ffd60408501612bd9565b90509250925092565b60008060006060848603121561301b57600080fd5b61302484612bd9565b925060208401359150612ffd60408501612bd9565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b602081526000613096602083018486613039565b949350505050565b8381526040602082015260006129db604083018486613039565b8481526001600160a01b0384166020820152606060408201526000612b4b606083018486613039565b6000602082840312156130f357600080fd5b81518015158114611dc057600080fd5b60006020828403121561311557600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b8183823760009101908152919050565b6000825161316d818460208701612cac565b919091019291505056fea2646970667358221220af74e0039ccd316ad209c39ddb2d59569d0e7332f3cba90d28e03811e710d7ca64736f6c634300081a0033608060405234801561001057600080fd5b50604051610c9f380380610c9f83398101604081905261002f9161010d565b8181600361003d83826101ff565b50600461004a82826101ff565b50505050506102bd565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261007b57600080fd5b81516001600160401b0381111561009457610094610054565b604051601f8201601f19908116603f011681016001600160401b03811182821017156100c2576100c2610054565b6040528181528382016020018510156100da57600080fd5b60005b828110156100f9576020818601810151838301820152016100dd565b506000918101602001919091529392505050565b6000806040838503121561012057600080fd5b82516001600160401b0381111561013657600080fd5b6101428582860161006a565b602085015190935090506001600160401b0381111561016057600080fd5b61016c8582860161006a565b9150509250929050565b600181811c9082168061018a57607f821691505b6020821081036101aa57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156101fa57806000526020600020601f840160051c810160208510156101d75750805b601f840160051c820191505b818110156101f757600081556001016101e3565b50505b505050565b81516001600160401b0381111561021857610218610054565b61022c816102268454610176565b846101b0565b6020601f82116001811461026057600083156102485750848201515b600019600385901b1c1916600184901b1784556101f7565b600084815260208120601f198516915b828110156102905787850151825560209485019460019092019101610270565b50848210156102ae5786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b6109d3806102cc6000396000f3fe608060405234801561001057600080fd5b50600436106100be5760003560e01c806340c10f191161007657806395d89b411161005b57806395d89b4114610183578063a9059cbb1461018b578063dd62ed3e1461019e57600080fd5b806340c10f191461013857806370a082311461014d57600080fd5b806318160ddd116100a757806318160ddd1461010457806323b872dd14610116578063313ce5671461012957600080fd5b806306fdde03146100c3578063095ea7b3146100e1575b600080fd5b6100cb6101e4565b6040516100d891906107bf565b60405180910390f35b6100f46100ef366004610854565b610276565b60405190151581526020016100d8565b6002545b6040519081526020016100d8565b6100f461012436600461087e565b610290565b604051601281526020016100d8565b61014b610146366004610854565b6102b4565b005b61010861015b3660046108bb565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6100cb6102c2565b6100f4610199366004610854565b6102d1565b6101086101ac3660046108dd565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6060600380546101f390610910565b80601f016020809104026020016040519081016040528092919081815260200182805461021f90610910565b801561026c5780601f106102415761010080835404028352916020019161026c565b820191906000526020600020905b81548152906001019060200180831161024f57829003601f168201915b5050505050905090565b6000336102848185856102df565b60019150505b92915050565b60003361029e8582856102f1565b6102a98585856103c5565b506001949350505050565b6102be8282610470565b5050565b6060600480546101f390610910565b6000336102848185856103c5565b6102ec83838360016104cc565b505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146103bf57818110156103b0576040517ffb8f41b200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416600482015260248101829052604481018390526064015b60405180910390fd5b6103bf848484840360006104cc565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8316610415576040517f96c6fd1e000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff8216610465576040517fec442f05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b6102ec838383610614565b73ffffffffffffffffffffffffffffffffffffffff82166104c0576040517fec442f05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b6102be60008383610614565b73ffffffffffffffffffffffffffffffffffffffff841661051c576040517fe602df05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff831661056c576040517f94280d62000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260016020908152604080832093871683529290522082905580156103bf578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161060691815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff831661064c5780600260008282546106419190610963565b909155506106fe9050565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260208190526040902054818110156106d2576040517fe450d38c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8516600482015260248101829052604481018390526064016103a7565b73ffffffffffffffffffffffffffffffffffffffff841660009081526020819052604090209082900390555b73ffffffffffffffffffffffffffffffffffffffff821661072757600280548290039055610753565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090208054820190555b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516107b291815260200190565b60405180910390a3505050565b602081526000825180602084015260005b818110156107ed57602081860181015160408684010152016107d0565b5060006040828501015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011684010191505092915050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461084f57600080fd5b919050565b6000806040838503121561086757600080fd5b6108708361082b565b946020939093013593505050565b60008060006060848603121561089357600080fd5b61089c8461082b565b92506108aa6020850161082b565b929592945050506040919091013590565b6000602082840312156108cd57600080fd5b6108d68261082b565b9392505050565b600080604083850312156108f057600080fd5b6108f98361082b565b91506109076020840161082b565b90509250929050565b600181811c9082168061092457607f821691505b60208210810361095d577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b8082018082111561028a577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea26469706673582212207e804ca539d49155d2b6bc19268ce22f9f857027c75247d69fb0d56a089c93d464736f6c634300081a003360a060405234801561001057600080fd5b5060405161140b38038061140b83398101604081905261002f916101b3565b60016000556002805460ff191690556001600160a01b038316158061005b57506001600160a01b038216155b8061006d57506001600160a01b038116155b1561008b5760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b0383166080526100a3600082610102565b506100ce7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a82610102565b506100f97f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e483610102565b505050506101f6565b60008281526001602090815260408083206001600160a01b038516845290915281205460ff1661018d5760008381526001602081815260408084206001600160a01b0387168086529252808420805460ff19169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a4506001610191565b5060005b92915050565b80516001600160a01b03811681146101ae57600080fd5b919050565b6000806000606084860312156101c857600080fd5b6101d184610197565b92506101df60208501610197565b91506101ed60408501610197565b90509250925092565b6080516111de61022d60003960008181610132015281816103c5015281816104270152818161065801526106ba01526111de6000f3fe608060405234801561001057600080fd5b50600436106101005760003560e01c80638456cb5911610097578063c8a0236211610066578063c8a0236214610276578063d547741f14610289578063d9caed121461029c578063e63ab1e9146102af57600080fd5b80638456cb59146101f957806385f438c11461020157806391d1485414610228578063a217fddf1461026e57600080fd5b80632f2ff15d116100d35780632f2ff15d146101c057806336568abe146101d35780633f4ba83a146101e65780635c975abb146101ee57600080fd5b806301ffc9a714610105578063116191b61461012d57806321fc65f214610179578063248a9ca31461018e575b600080fd5b610118610113366004610f04565b6102d6565b60405190151581526020015b60405180910390f35b6101547f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610124565b61018c610187366004610f6f565b61036f565b005b6101b261019c36600461100c565b6000908152600160208190526040909120015490565b604051908152602001610124565b61018c6101ce366004611025565b610511565b61018c6101e1366004611025565b61053d565b61018c61059b565b60025460ff16610118565b61018c6105d0565b6101b27f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b610118610236366004611025565b600091825260016020908152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b6101b2600081565b61018c610284366004610f6f565b610602565b61018c610297366004611025565b61078a565b61018c6102aa366004611051565b6107b0565b6101b27f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061036957507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b61037761087d565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e46103a1816108c0565b6103a96108ca565b6103ea73ffffffffffffffffffffffffffffffffffffffff87167f000000000000000000000000000000000000000000000000000000000000000086610909565b6040517f5131ab5900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690635131ab599061046490899089908990899089906004016110d7565b600060405180830381600087803b15801561047e57600080fd5b505af1158015610492573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167f85b5be9cf454e05e0bddf49315178102227c312078eefa3c00294fb4d912ae4e8686866040516104f793929190611134565b60405180910390a35061050a6001600055565b5050505050565b6000828152600160208190526040909120015461052d816108c0565b6105378383610996565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8116331461058c576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6105968282610a61565b505050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a6105c5816108c0565b6105cd610b20565b50565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a6105fa816108c0565b6105cd610b9d565b61060a61087d565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e4610634816108c0565b61063c6108ca565b61067d73ffffffffffffffffffffffffffffffffffffffff87167f000000000000000000000000000000000000000000000000000000000000000086610909565b6040517fb8969bd400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063b8969bd4906106f790899089908990899089906004016110d7565b600060405180830381600087803b15801561071157600080fd5b505af1158015610725573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fb9d4efa96044e5f5e03e696fa9ae2ff66911cc27e8a637c3627c75bc5b2241c88686866040516104f793929190611134565b600082815260016020819052604090912001546107a6816108c0565b6105378383610a61565b6107b861087d565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e46107e2816108c0565b6107ea6108ca565b61080b73ffffffffffffffffffffffffffffffffffffffff85168484610909565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f9b1bfa7fa9ee420a16e124f794c35ac9f90472acc99140eb2f6447c714cad8eb8460405161086a91815260200190565b60405180910390a3506105966001600055565b6002600054036108b9576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b6105cd8133610bf8565b60025460ff1615610907576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6040805173ffffffffffffffffffffffffffffffffffffffff8416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb00000000000000000000000000000000000000000000000000000000179052610596908490610c89565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff16610a5957600083815260016020818152604080842073ffffffffffffffffffffffffffffffffffffffff8716808652925280842080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a4506001610369565b506000610369565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff1615610a5957600083815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8616808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a4506001610369565b610b28610d1f565b600280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b610ba56108ca565b600280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258610b733390565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16610c85576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82166004820152602481018390526044015b60405180910390fd5b5050565b6000610cab73ffffffffffffffffffffffffffffffffffffffff841683610d5b565b90508051600014158015610cd0575080806020019051810190610cce9190611157565b155b15610596576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84166004820152602401610c7c565b60025460ff16610907576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6060610d6983836000610d70565b9392505050565b606081471015610dae576040517fcd786059000000000000000000000000000000000000000000000000000000008152306004820152602401610c7c565b6000808573ffffffffffffffffffffffffffffffffffffffff168486604051610dd79190611179565b60006040518083038185875af1925050503d8060008114610e14576040519150601f19603f3d011682016040523d82523d6000602084013e610e19565b606091505b5091509150610e29868383610e33565b9695505050505050565b606082610e4857610e4382610ec2565b610d69565b8151158015610e6c575073ffffffffffffffffffffffffffffffffffffffff84163b155b15610ebb576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85166004820152602401610c7c565b5080610d69565b805115610ed25780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060208284031215610f1657600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610d6957600080fd5b803573ffffffffffffffffffffffffffffffffffffffff81168114610f6a57600080fd5b919050565b600080600080600060808688031215610f8757600080fd5b610f9086610f46565b9450610f9e60208701610f46565b935060408601359250606086013567ffffffffffffffff811115610fc157600080fd5b8601601f81018813610fd257600080fd5b803567ffffffffffffffff811115610fe957600080fd5b886020828401011115610ffb57600080fd5b959894975092955050506020019190565b60006020828403121561101e57600080fd5b5035919050565b6000806040838503121561103857600080fd5b8235915061104860208401610f46565b90509250929050565b60008060006060848603121561106657600080fd5b61106f84610f46565b925061107d60208501610f46565b929592945050506040919091013590565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff8616815273ffffffffffffffffffffffffffffffffffffffff8516602082015283604082015260806060820152600061112960808301848661108e565b979650505050505050565b83815260406020820152600061114e60408301848661108e565b95945050505050565b60006020828403121561116957600080fd5b81518015158114610d6957600080fd5b6000825160005b8181101561119a5760208186018101518583015201611180565b50600092019182525091905056fea264697066735822122035ca457bdc8b45adde9844ff8416a0abd723c23055fd6933ddc05523b5f5b6de64736f6c634300081a0033", + ABI: "[{\"type\":\"constructor\",\"inputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"ASSET_HANDLER_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"DEFAULT_ADMIN_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"PAUSER_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"TSS_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"UPGRADE_INTERFACE_VERSION\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"call\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"custody\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"deposit\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"deposit\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"depositAndCall\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"depositAndCall\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"echidnaCaller\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"execute\",\"inputs\":[{\"name\":\"destination\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"executeRevert\",\"inputs\":[{\"name\":\"destination\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"executeWithERC20\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"getRoleAdmin\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"grantRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"hasRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"initialize\",\"inputs\":[{\"name\":\"tssAddress_\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"zetaToken_\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"admin_\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"pause\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"paused\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"proxiableUUID\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"renounceRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"callerConfirmation\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"revertWithERC20\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"revokeRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setConnector\",\"inputs\":[{\"name\":\"zetaConnector_\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setCustody\",\"inputs\":[{\"name\":\"custody_\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"supportsInterface\",\"inputs\":[{\"name\":\"interfaceId\",\"type\":\"bytes4\",\"internalType\":\"bytes4\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"testERC20\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractTestERC20\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"testExecuteWithERC20\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"tssAddress\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"unpause\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"upgradeToAndCall\",\"inputs\":[{\"name\":\"newImplementation\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"zetaConnector\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"zetaToken\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"event\",\"name\":\"Call\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"receiver\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Deposit\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"receiver\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"asset\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Executed\",\"inputs\":[{\"name\":\"destination\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ExecutedWithERC20\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Initialized\",\"inputs\":[{\"name\":\"version\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Paused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Reverted\",\"inputs\":[{\"name\":\"destination\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RevertedWithERC20\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleAdminChanged\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"previousAdminRole\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"newAdminRole\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleGranted\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleRevoked\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Unpaused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Upgraded\",\"inputs\":[{\"name\":\"implementation\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"AccessControlBadConfirmation\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"AccessControlUnauthorizedAccount\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"neededRole\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"type\":\"error\",\"name\":\"AddressEmptyCode\",\"inputs\":[{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"AddressInsufficientBalance\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"ApprovalFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ConnectorInitialized\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"CustodyInitialized\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"DepositFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ERC1967InvalidImplementation\",\"inputs\":[{\"name\":\"implementation\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"ERC1967NonPayable\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"EnforcedPause\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ExecutionFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ExpectedPause\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"FailedInnerCall\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientERC20Amount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientETHAmount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidInitialization\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NotInitializing\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ReentrancyGuardReentrantCall\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"SafeERC20FailedOperation\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"UUPSUnauthorizedCallContext\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"UUPSUnsupportedProxiableUUID\",\"inputs\":[{\"name\":\"slot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"type\":\"error\",\"name\":\"ZeroAddress\",\"inputs\":[]}]", + Bin: "0x60a060405230608052600580546001600160a01b0319163317905534801561002657600080fd5b5061002f610154565b600554600180546001600160a01b039092166001600160a01b031992831617905560028054610123921691909117905560405161006b90610206565b60408082526004908201819052631d195cdd60e21b606083015260806020830181905282015263151154d560e21b60a082015260c001604051809103906000f0801580156100bd573d6000803e3d6000fd5b50600480546001600160a01b0319166001600160a01b039283161790556001546040513092919091169082906100f290610213565b6001600160a01b03938416815291831660208301529091166040820152606001604051809103906000f08015801561012e573d6000803e3d6000fd5b50600080546001600160a01b0319166001600160a01b0392909216919091179055610220565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156101a45760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146102035780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b610c9f806135b283390190565b61140b8061425183390190565b608051613369610249600039600081816120e20152818161210b01526124da01526133696000f3fe6080604052600436106102345760003560e01c80635c975abb11610138578063ad3cb1cc116100b0578063d547741f1161007f578063e63ab1e911610064578063e63ab1e9146106ff578063f340fa0114610733578063f45346dc1461074657600080fd5b8063d547741f146106bf578063dda79b75146106df57600080fd5b8063ad3cb1cc14610616578063ae7a3a6f1461065f578063b8969bd41461067f578063c0c53b8b1461069f57600080fd5b80638456cb591161010757806391d14854116100ec57806391d1485414610568578063a217fddf146105cd578063a783c789146105e257600080fd5b80638456cb59146105335780638c6f037f1461054857600080fd5b80635c975abb146104885780635d62c860146104bf5780636ab90f9b146104f357806381100bf01461051357600080fd5b806335c018db116101cb5780634f1ef2861161019a57806352d1902d1161017f57806352d1902d1461043357806357bec62f146104485780635b1125911461046857600080fd5b80634f1ef286146104005780635131ab591461041357600080fd5b806335c018db1461039857806336568abe146103ab5780633c2f05a8146103cb5780633f4ba83a146103eb57600080fd5b806321e093b11161020757806321e093b1146102d0578063248a9ca31461030857806329c59b5d146103655780632f2ff15d1461037857600080fd5b806301ffc9a71461023957806310188aef1461026e5780631b8b921d146102905780631cff79cd146102b0575b600080fd5b34801561024557600080fd5b50610259610254366004612d53565b610766565b60405190151581526020015b60405180910390f35b34801561027a57600080fd5b5061028e610289366004612db1565b6107ff565b005b34801561029c57600080fd5b5061028e6102ab366004612e15565b6108f3565b6102c36102be366004612e15565b61097e565b6040516102659190612ed6565b3480156102dc57600080fd5b506003546102f0906001600160a01b031681565b6040516001600160a01b039091168152602001610265565b34801561031457600080fd5b50610357610323366004612ee9565b60009081527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052604090206001015490565b604051908152602001610265565b61028e610373366004612e15565b610a81565b34801561038457600080fd5b5061028e610393366004612f02565b610c14565b61028e6103a6366004612e15565b610c5e565b3480156103b757600080fd5b5061028e6103c6366004612f02565b610e4d565b3480156103d757600080fd5b506004546102f0906001600160a01b031681565b3480156103f757600080fd5b5061028e610e99565b61028e61040e366004612f5d565b610ece565b34801561041f57600080fd5b5061028e61042e366004613064565b610eed565b34801561043f57600080fd5b50610357611206565b34801561045457600080fd5b506002546102f0906001600160a01b031681565b34801561047457600080fd5b506001546102f0906001600160a01b031681565b34801561049457600080fd5b507fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff16610259565b3480156104cb57600080fd5b506103577f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b981565b3480156104ff57600080fd5b5061028e61050e3660046130d3565b611235565b34801561051f57600080fd5b506005546102f0906001600160a01b031681565b34801561053f57600080fd5b5061028e611360565b34801561055457600080fd5b5061028e61056336600461312d565b611392565b34801561057457600080fd5b50610259610583366004612f02565b60009182527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408084206001600160a01b0393909316845291905290205460ff1690565b3480156105d957600080fd5b50610357600081565b3480156105ee57600080fd5b506103577f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb81565b34801561062257600080fd5b506102c36040518060400160405280600581526020017f352e302e3000000000000000000000000000000000000000000000000000000081525081565b34801561066b57600080fd5b5061028e61067a366004612db1565b6114a8565b34801561068b57600080fd5b5061028e61069a366004613064565b61159c565b3480156106ab57600080fd5b5061028e6106ba36600461317f565b611755565b3480156106cb57600080fd5b5061028e6106da366004612f02565b611a0a565b3480156106eb57600080fd5b506000546102f0906001600160a01b031681565b34801561070b57600080fd5b506103577f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b61028e610741366004612db1565b611a4e565b34801561075257600080fd5b5061028e6107613660046131c2565b611be3565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b0000000000000000000000000000000000000000000000000000000014806107f957507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b600061080a81611cde565b6001600160a01b03821661084a576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002546001600160a01b03161561088d576040517f0c8dc01600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6108b77f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b983611ce8565b5050600280547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6108fb611dd5565b610903611e33565b826001600160a01b0316336001600160a01b03167f2a21062ee9199c2e205622999eeb7c3da73153674f36a0acd3f74fa6af67bde3848460405161094892919061323e565b60405180910390a361097960017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b505050565b60607f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb6109aa81611cde565b6109b2611dd5565b6109ba611e33565b6001600160a01b0385166109fa576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610a07868686611eda565b9050856001600160a01b03167fcaf938de11c367272220bfd1d2baa99ca46665e7bc4d85f00adb51b90fe1fa9f348787604051610a469392919061325a565b60405180910390a29150610a7960017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b509392505050565b610a89611dd5565b610a91611e33565b34600003610acb576040517f7671265e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038316610b0b576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546040516000916001600160a01b03169034908381818185875af1925050503d8060008114610b58576040519150601f19603f3d011682016040523d82523d6000602084013e610b5d565b606091505b5050905080610b98576040517f79cacff100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b836001600160a01b0316336001600160a01b03167f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a43460008787604051610be29493929190613274565b60405180910390a35061097960017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020526040902060010154610c4e81611cde565b610c588383611ce8565b50505050565b7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb610c8881611cde565b610c90611dd5565b610c98611e33565b6001600160a01b038416610cd8576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000846001600160a01b03163460405160006040518083038185875af1925050503d8060008114610d25576040519150601f19603f3d011682016040523d82523d6000602084013e610d2a565b606091505b5050905080610d65576040517facfdb44400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f8fcaa0b50000000000000000000000000000000000000000000000000000000081526001600160a01b03861690638fcaa0b590610dac908790879060040161323e565b600060405180830381600087803b158015610dc657600080fd5b505af1158015610dda573d6000803e3d6000fd5b50505050846001600160a01b03167fd5d7616b1678354a0dea9d7e57e6a090bff5babe9f8d6381fdbad16e89ba311c348686604051610e1b9392919061325a565b60405180910390a250610c5860017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b6001600160a01b0381163314610e8f576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6109798282611f83565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610ec381611cde565b610ecb612047565b50565b610ed66120d7565b610edf826121a7565b610ee982826121b2565b5050565b7f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b9610f1781611cde565b610f1f611dd5565b610f27611e33565b83600003610f61576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038516610fa1576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610fab86866122d6565b610fe1576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b0386811660048301526024820186905287169063095ea7b3906044016020604051808303816000875af1158015611049573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061106d919061329d565b6110a3576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6110ae858484611eda565b506110b986866122d6565b6110ef576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201526000906001600160a01b038816906370a0823190602401602060405180830381865afa15801561114f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061117391906132bf565b90508015611185576111858782612366565b856001600160a01b0316876001600160a01b03167f29c40793bffd84cb810179f15d1ceec72bc7f0785514c668ba36645cf99b73828787876040516111cc9392919061325a565b60405180910390a3506111fe60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b505050505050565b60006112106124cf565b507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc90565b600480546040517f40c10f190000000000000000000000000000000000000000000000000000000081523092810192909252602482018590526001600160a01b0316906340c10f1990604401600060405180830381600087803b15801561129b57600080fd5b505af11580156112af573d6000803e3d6000fd5b50506004546112cd92506001600160a01b0316905085858585610eed565b600480546040517f70a0823100000000000000000000000000000000000000000000000000000000815230928101929092526001600160a01b0316906370a0823190602401602060405180830381865afa15801561132f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061135391906132bf565b15610c5857610c586132d8565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61138a81611cde565b610ecb612531565b61139a611dd5565b6113a2611e33565b836000036113dc576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03851661141c576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6114273384866125aa565b846001600160a01b0316336001600160a01b03167f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a4868686866040516114709493929190613274565b60405180910390a36114a160017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b5050505050565b60006114b381611cde565b6001600160a01b0382166114f3576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000546001600160a01b031615611536576040517fb337f37800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6115607f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b983611ce8565b5050600080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b7f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b96115c681611cde565b6115ce611dd5565b6115d6611e33565b83600003611610576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038516611650576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6116646001600160a01b0387168686612733565b6040517f8fcaa0b50000000000000000000000000000000000000000000000000000000081526001600160a01b03861690638fcaa0b5906116ab908690869060040161323e565b600060405180830381600087803b1580156116c557600080fd5b505af11580156116d9573d6000803e3d6000fd5b50505050846001600160a01b0316866001600160a01b03167f723fc7be2448075379e4fdf1e6bf5fead954d2668d2da05dcb44ccfec4beeda78686866040516117249392919061325a565b60405180910390a36111fe60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156117a05750825b905060008267ffffffffffffffff1660011480156117bd5750303b155b9050811580156117cb575080155b15611802576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84547fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000016600117855583156118635784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff16680100000000000000001785555b6001600160a01b038816158061188057506001600160a01b038716155b156118b7576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6118bf6127a7565b6118c76127af565b6118cf6127a7565b6118d76127bf565b6118e2600087611ce8565b5061190d7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a87611ce8565b50600180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b038a1617905561196b7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb89611ce8565b50600380547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0389161790558315611a005784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b5050505050505050565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020526040902060010154611a4481611cde565b610c588383611f83565b611a56611dd5565b611a5e611e33565b34600003611a98576040517f7671265e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038116611ad8576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546040516000916001600160a01b03169034908381818185875af1925050503d8060008114611b25576040519150601f19603f3d011682016040523d82523d6000602084013e611b2a565b606091505b5050905080611b65576040517f79cacff100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60408051348152600060208201819052606082840181905282015290516001600160a01b0384169133917f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a49181900360800190a350610ecb60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b611beb611dd5565b611bf3611e33565b81600003611c2d576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038316611c6d576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611c783382846125aa565b826001600160a01b0316336001600160a01b03167f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a484846040516109489291909182526001600160a01b0316602082015260606040820181905260009082015260800190565b610ecb81336127cf565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff16611dcb576000848152602082815260408083206001600160a01b0387168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055611d813390565b6001600160a01b0316836001600160a01b0316857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a460019150506107f9565b60009150506107f9565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff1615611e31576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0080547ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01611eae576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60029055565b60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b6060600080856001600160a01b0316348686604051611efa929190613307565b60006040518083038185875af1925050503d8060008114611f37576040519150601f19603f3d011682016040523d82523d6000602084013e611f3c565b606091505b509150915081611f78576040517facfdb44400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b9150505b9392505050565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff1615611dcb576000848152602082815260408083206001600160a01b038716808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339287917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a460019150506107f9565b61204f61285c565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001681557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a150565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148061217057507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166121647f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b6001600160a01b031614155b15611e31576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610ee981611cde565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa92505050801561222a575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252612227918101906132bf565b60015b612270576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b03831660048201526024015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc81146122cc576040517faa1d49a400000000000000000000000000000000000000000000000000000000815260048101829052602401612267565b61097983836128b7565b6040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b038281166004830152600060248301819052919084169063095ea7b3906044016020604051808303816000875af1158015612342573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f7c919061329d565b6003546001600160a01b03908116908316036124b5576002546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152602481018390529083169063095ea7b3906044016020604051808303816000875af11580156123e8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061240c919061329d565b612442576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002546040517f743e0c9b000000000000000000000000000000000000000000000000000000008152600481018390526001600160a01b039091169063743e0c9b90602401600060405180830381600087803b1580156124a157600080fd5b505af11580156111fe573d6000803e3d6000fd5b600054610ee9906001600160a01b03848116911683612733565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614611e31576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612539611dd5565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011781557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258336120b9565b6003546001600160a01b0390811690831603612717576125d56001600160a01b03831684308461290d565b6002546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152602481018390529083169063095ea7b3906044016020604051808303816000875af1158015612641573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612665919061329d565b61269b576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002546040517f743e0c9b000000000000000000000000000000000000000000000000000000008152600481018390526001600160a01b039091169063743e0c9b90602401600060405180830381600087803b1580156126fa57600080fd5b505af115801561270e573d6000803e3d6000fd5b50505050505050565b600054610979906001600160a01b03848116918691168461290d565b6040516001600160a01b0383811660248301526044820183905261097991859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050612946565b611e316129c2565b6127b76129c2565b611e31612a29565b6127c76129c2565b611e31612a31565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408083206001600160a01b038516845290915290205460ff16610ee9576040517fe2517d3f0000000000000000000000000000000000000000000000000000000081526001600160a01b038216600482015260248101839052604401612267565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff16611e31576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6128c082612a82565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a2805115612905576109798282612b2a565b610ee9612ba0565b6040516001600160a01b038481166024830152838116604483015260648201839052610c589186918216906323b872dd90608401612760565b600061295b6001600160a01b03841683612bd8565b9050805160001415801561298057508080602001905181019061297e919061329d565b155b15610979576040517f5274afe70000000000000000000000000000000000000000000000000000000081526001600160a01b0384166004820152602401612267565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff16611e31576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611eb46129c2565b612a396129c2565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055565b806001600160a01b03163b600003612ad1576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b0382166004820152602401612267565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6060600080846001600160a01b031684604051612b479190613317565b600060405180830381855af49150503d8060008114612b82576040519150601f19603f3d011682016040523d82523d6000602084013e612b87565b606091505b5091509150612b97858383612be6565b95945050505050565b3415611e31576040517fb398979f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6060611f7c83836000612c5b565b606082612bfb57612bf682612d11565b611f7c565b8151158015612c1257506001600160a01b0384163b155b15612c54576040517f9996b3150000000000000000000000000000000000000000000000000000000081526001600160a01b0385166004820152602401612267565b5080611f7c565b606081471015612c99576040517fcd786059000000000000000000000000000000000000000000000000000000008152306004820152602401612267565b600080856001600160a01b03168486604051612cb59190613317565b60006040518083038185875af1925050503d8060008114612cf2576040519150601f19603f3d011682016040523d82523d6000602084013e612cf7565b606091505b5091509150612d07868383612be6565b9695505050505050565b805115612d215780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060208284031215612d6557600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114611f7c57600080fd5b80356001600160a01b0381168114612dac57600080fd5b919050565b600060208284031215612dc357600080fd5b611f7c82612d95565b60008083601f840112612dde57600080fd5b50813567ffffffffffffffff811115612df657600080fd5b602083019150836020828501011115612e0e57600080fd5b9250929050565b600080600060408486031215612e2a57600080fd5b612e3384612d95565b9250602084013567ffffffffffffffff811115612e4f57600080fd5b612e5b86828701612dcc565b9497909650939450505050565b60005b83811015612e83578181015183820152602001612e6b565b50506000910152565b60008151808452612ea4816020860160208601612e68565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000611f7c6020830184612e8c565b600060208284031215612efb57600080fd5b5035919050565b60008060408385031215612f1557600080fd5b82359150612f2560208401612d95565b90509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60008060408385031215612f7057600080fd5b612f7983612d95565b9150602083013567ffffffffffffffff811115612f9557600080fd5b8301601f81018513612fa657600080fd5b803567ffffffffffffffff811115612fc057612fc0612f2e565b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8501160116810181811067ffffffffffffffff8211171561302c5761302c612f2e565b60405281815282820160200187101561304457600080fd5b816020840160208301376000602083830101528093505050509250929050565b60008060008060006080868803121561307c57600080fd5b61308586612d95565b945061309360208701612d95565b935060408601359250606086013567ffffffffffffffff8111156130b657600080fd5b6130c288828901612dcc565b969995985093965092949392505050565b600080600080606085870312156130e957600080fd5b6130f285612d95565b935060208501359250604085013567ffffffffffffffff81111561311557600080fd5b61312187828801612dcc565b95989497509550505050565b60008060008060006080868803121561314557600080fd5b61314e86612d95565b94506020860135935061316360408701612d95565b9250606086013567ffffffffffffffff8111156130b657600080fd5b60008060006060848603121561319457600080fd5b61319d84612d95565b92506131ab60208501612d95565b91506131b960408501612d95565b90509250925092565b6000806000606084860312156131d757600080fd5b6131e084612d95565b9250602084013591506131b960408501612d95565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b6020815260006132526020830184866131f5565b949350505050565b838152604060208201526000612b976040830184866131f5565b8481526001600160a01b0384166020820152606060408201526000612d076060830184866131f5565b6000602082840312156132af57600080fd5b81518015158114611f7c57600080fd5b6000602082840312156132d157600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b8183823760009101908152919050565b60008251613329818460208701612e68565b919091019291505056fea2646970667358221220d968781c52811c0ad33400d2e6fd7deb96a254471b52dcc00cbee1f639dac0b664736f6c634300081a0033608060405234801561001057600080fd5b50604051610c9f380380610c9f83398101604081905261002f9161010d565b8181600361003d83826101ff565b50600461004a82826101ff565b50505050506102bd565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261007b57600080fd5b81516001600160401b0381111561009457610094610054565b604051601f8201601f19908116603f011681016001600160401b03811182821017156100c2576100c2610054565b6040528181528382016020018510156100da57600080fd5b60005b828110156100f9576020818601810151838301820152016100dd565b506000918101602001919091529392505050565b6000806040838503121561012057600080fd5b82516001600160401b0381111561013657600080fd5b6101428582860161006a565b602085015190935090506001600160401b0381111561016057600080fd5b61016c8582860161006a565b9150509250929050565b600181811c9082168061018a57607f821691505b6020821081036101aa57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156101fa57806000526020600020601f840160051c810160208510156101d75750805b601f840160051c820191505b818110156101f757600081556001016101e3565b50505b505050565b81516001600160401b0381111561021857610218610054565b61022c816102268454610176565b846101b0565b6020601f82116001811461026057600083156102485750848201515b600019600385901b1c1916600184901b1784556101f7565b600084815260208120601f198516915b828110156102905787850151825560209485019460019092019101610270565b50848210156102ae5786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b6109d3806102cc6000396000f3fe608060405234801561001057600080fd5b50600436106100be5760003560e01c806340c10f191161007657806395d89b411161005b57806395d89b4114610183578063a9059cbb1461018b578063dd62ed3e1461019e57600080fd5b806340c10f191461013857806370a082311461014d57600080fd5b806318160ddd116100a757806318160ddd1461010457806323b872dd14610116578063313ce5671461012957600080fd5b806306fdde03146100c3578063095ea7b3146100e1575b600080fd5b6100cb6101e4565b6040516100d891906107bf565b60405180910390f35b6100f46100ef366004610854565b610276565b60405190151581526020016100d8565b6002545b6040519081526020016100d8565b6100f461012436600461087e565b610290565b604051601281526020016100d8565b61014b610146366004610854565b6102b4565b005b61010861015b3660046108bb565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6100cb6102c2565b6100f4610199366004610854565b6102d1565b6101086101ac3660046108dd565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6060600380546101f390610910565b80601f016020809104026020016040519081016040528092919081815260200182805461021f90610910565b801561026c5780601f106102415761010080835404028352916020019161026c565b820191906000526020600020905b81548152906001019060200180831161024f57829003601f168201915b5050505050905090565b6000336102848185856102df565b60019150505b92915050565b60003361029e8582856102f1565b6102a98585856103c5565b506001949350505050565b6102be8282610470565b5050565b6060600480546101f390610910565b6000336102848185856103c5565b6102ec83838360016104cc565b505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146103bf57818110156103b0576040517ffb8f41b200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416600482015260248101829052604481018390526064015b60405180910390fd5b6103bf848484840360006104cc565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8316610415576040517f96c6fd1e000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff8216610465576040517fec442f05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b6102ec838383610614565b73ffffffffffffffffffffffffffffffffffffffff82166104c0576040517fec442f05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b6102be60008383610614565b73ffffffffffffffffffffffffffffffffffffffff841661051c576040517fe602df05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff831661056c576040517f94280d62000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260016020908152604080832093871683529290522082905580156103bf578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161060691815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff831661064c5780600260008282546106419190610963565b909155506106fe9050565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260208190526040902054818110156106d2576040517fe450d38c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8516600482015260248101829052604481018390526064016103a7565b73ffffffffffffffffffffffffffffffffffffffff841660009081526020819052604090209082900390555b73ffffffffffffffffffffffffffffffffffffffff821661072757600280548290039055610753565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090208054820190555b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516107b291815260200190565b60405180910390a3505050565b602081526000825180602084015260005b818110156107ed57602081860181015160408684010152016107d0565b5060006040828501015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011684010191505092915050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461084f57600080fd5b919050565b6000806040838503121561086757600080fd5b6108708361082b565b946020939093013593505050565b60008060006060848603121561089357600080fd5b61089c8461082b565b92506108aa6020850161082b565b929592945050506040919091013590565b6000602082840312156108cd57600080fd5b6108d68261082b565b9392505050565b600080604083850312156108f057600080fd5b6108f98361082b565b91506109076020840161082b565b90509250929050565b600181811c9082168061092457607f821691505b60208210810361095d577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b8082018082111561028a577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea26469706673582212207e804ca539d49155d2b6bc19268ce22f9f857027c75247d69fb0d56a089c93d464736f6c634300081a003360a060405234801561001057600080fd5b5060405161140b38038061140b83398101604081905261002f916101b3565b60016000556002805460ff191690556001600160a01b038316158061005b57506001600160a01b038216155b8061006d57506001600160a01b038116155b1561008b5760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b0383166080526100a3600082610102565b506100ce7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a82610102565b506100f97f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e483610102565b505050506101f6565b60008281526001602090815260408083206001600160a01b038516845290915281205460ff1661018d5760008381526001602081815260408084206001600160a01b0387168086529252808420805460ff19169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a4506001610191565b5060005b92915050565b80516001600160a01b03811681146101ae57600080fd5b919050565b6000806000606084860312156101c857600080fd5b6101d184610197565b92506101df60208501610197565b91506101ed60408501610197565b90509250925092565b6080516111de61022d60003960008181610132015281816103c5015281816104270152818161065801526106ba01526111de6000f3fe608060405234801561001057600080fd5b50600436106101005760003560e01c80638456cb5911610097578063c8a0236211610066578063c8a0236214610276578063d547741f14610289578063d9caed121461029c578063e63ab1e9146102af57600080fd5b80638456cb59146101f957806385f438c11461020157806391d1485414610228578063a217fddf1461026e57600080fd5b80632f2ff15d116100d35780632f2ff15d146101c057806336568abe146101d35780633f4ba83a146101e65780635c975abb146101ee57600080fd5b806301ffc9a714610105578063116191b61461012d57806321fc65f214610179578063248a9ca31461018e575b600080fd5b610118610113366004610f04565b6102d6565b60405190151581526020015b60405180910390f35b6101547f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610124565b61018c610187366004610f6f565b61036f565b005b6101b261019c36600461100c565b6000908152600160208190526040909120015490565b604051908152602001610124565b61018c6101ce366004611025565b610511565b61018c6101e1366004611025565b61053d565b61018c61059b565b60025460ff16610118565b61018c6105d0565b6101b27f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b610118610236366004611025565b600091825260016020908152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b6101b2600081565b61018c610284366004610f6f565b610602565b61018c610297366004611025565b61078a565b61018c6102aa366004611051565b6107b0565b6101b27f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061036957507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b61037761087d565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e46103a1816108c0565b6103a96108ca565b6103ea73ffffffffffffffffffffffffffffffffffffffff87167f000000000000000000000000000000000000000000000000000000000000000086610909565b6040517f5131ab5900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690635131ab599061046490899089908990899089906004016110d7565b600060405180830381600087803b15801561047e57600080fd5b505af1158015610492573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167f85b5be9cf454e05e0bddf49315178102227c312078eefa3c00294fb4d912ae4e8686866040516104f793929190611134565b60405180910390a35061050a6001600055565b5050505050565b6000828152600160208190526040909120015461052d816108c0565b6105378383610996565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8116331461058c576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6105968282610a61565b505050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a6105c5816108c0565b6105cd610b20565b50565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a6105fa816108c0565b6105cd610b9d565b61060a61087d565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e4610634816108c0565b61063c6108ca565b61067d73ffffffffffffffffffffffffffffffffffffffff87167f000000000000000000000000000000000000000000000000000000000000000086610909565b6040517fb8969bd400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063b8969bd4906106f790899089908990899089906004016110d7565b600060405180830381600087803b15801561071157600080fd5b505af1158015610725573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fb9d4efa96044e5f5e03e696fa9ae2ff66911cc27e8a637c3627c75bc5b2241c88686866040516104f793929190611134565b600082815260016020819052604090912001546107a6816108c0565b6105378383610a61565b6107b861087d565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e46107e2816108c0565b6107ea6108ca565b61080b73ffffffffffffffffffffffffffffffffffffffff85168484610909565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f9b1bfa7fa9ee420a16e124f794c35ac9f90472acc99140eb2f6447c714cad8eb8460405161086a91815260200190565b60405180910390a3506105966001600055565b6002600054036108b9576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b6105cd8133610bf8565b60025460ff1615610907576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6040805173ffffffffffffffffffffffffffffffffffffffff8416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb00000000000000000000000000000000000000000000000000000000179052610596908490610c89565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff16610a5957600083815260016020818152604080842073ffffffffffffffffffffffffffffffffffffffff8716808652925280842080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a4506001610369565b506000610369565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff1615610a5957600083815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8616808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a4506001610369565b610b28610d1f565b600280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b610ba56108ca565b600280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258610b733390565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16610c85576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82166004820152602481018390526044015b60405180910390fd5b5050565b6000610cab73ffffffffffffffffffffffffffffffffffffffff841683610d5b565b90508051600014158015610cd0575080806020019051810190610cce9190611157565b155b15610596576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84166004820152602401610c7c565b60025460ff16610907576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6060610d6983836000610d70565b9392505050565b606081471015610dae576040517fcd786059000000000000000000000000000000000000000000000000000000008152306004820152602401610c7c565b6000808573ffffffffffffffffffffffffffffffffffffffff168486604051610dd79190611179565b60006040518083038185875af1925050503d8060008114610e14576040519150601f19603f3d011682016040523d82523d6000602084013e610e19565b606091505b5091509150610e29868383610e33565b9695505050505050565b606082610e4857610e4382610ec2565b610d69565b8151158015610e6c575073ffffffffffffffffffffffffffffffffffffffff84163b155b15610ebb576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85166004820152602401610c7c565b5080610d69565b805115610ed25780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060208284031215610f1657600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610d6957600080fd5b803573ffffffffffffffffffffffffffffffffffffffff81168114610f6a57600080fd5b919050565b600080600080600060808688031215610f8757600080fd5b610f9086610f46565b9450610f9e60208701610f46565b935060408601359250606086013567ffffffffffffffff811115610fc157600080fd5b8601601f81018813610fd257600080fd5b803567ffffffffffffffff811115610fe957600080fd5b886020828401011115610ffb57600080fd5b959894975092955050506020019190565b60006020828403121561101e57600080fd5b5035919050565b6000806040838503121561103857600080fd5b8235915061104860208401610f46565b90509250929050565b60008060006060848603121561106657600080fd5b61106f84610f46565b925061107d60208501610f46565b929592945050506040919091013590565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff8616815273ffffffffffffffffffffffffffffffffffffffff8516602082015283604082015260806060820152600061112960808301848661108e565b979650505050505050565b83815260406020820152600061114e60408301848661108e565b95945050505050565b60006020828403121561116957600080fd5b81518015158114610d6957600080fd5b6000825160005b8181101561119a5760208186018101518583015201611180565b50600092019182525091905056fea264697066735822122069d5c5c3cb2752c876b6a2138d8d9b66bac6bd1b48a1fe98417eea81faf02a3e64736f6c634300081a0033", } // GatewayEVMEchidnaTestABI is the input ABI used to generate the binding from. diff --git a/v2/pkg/gatewayevmupgrade.t.sol/gatewayevmuupsupgradetest.go b/v2/pkg/gatewayevmupgrade.t.sol/gatewayevmuupsupgradetest.go index 1feb1819..3f4319dd 100644 --- a/v2/pkg/gatewayevmupgrade.t.sol/gatewayevmuupsupgradetest.go +++ b/v2/pkg/gatewayevmupgrade.t.sol/gatewayevmuupsupgradetest.go @@ -49,8 +49,8 @@ type StdInvariantFuzzSelector struct { // GatewayEVMUUPSUpgradeTestMetaData contains all meta data concerning the GatewayEVMUUPSUpgradeTest contract. var GatewayEVMUUPSUpgradeTestMetaData = &bind.MetaData{ - ABI: "[{\"type\":\"function\",\"name\":\"IS_TEST\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeArtifacts\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedArtifacts_\",\"type\":\"string[]\",\"internalType\":\"string[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeContracts\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedContracts_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeSelectors\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedSelectors_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzSelector[]\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"selectors\",\"type\":\"bytes4[]\",\"internalType\":\"bytes4[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeSenders\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedSenders_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"failed\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"setUp\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"targetArtifactSelectors\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedArtifactSelectors_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzArtifactSelector[]\",\"components\":[{\"name\":\"artifact\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"selectors\",\"type\":\"bytes4[]\",\"internalType\":\"bytes4[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetArtifacts\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedArtifacts_\",\"type\":\"string[]\",\"internalType\":\"string[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetContracts\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedContracts_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetInterfaces\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedInterfaces_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzInterface[]\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"artifacts\",\"type\":\"string[]\",\"internalType\":\"string[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetSelectors\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedSelectors_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzSelector[]\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"selectors\",\"type\":\"bytes4[]\",\"internalType\":\"bytes4[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetSenders\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedSenders_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"testUpgradeAndForwardCallToReceivePayable\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"event\",\"name\":\"Call\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"receiver\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Deposit\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"receiver\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"asset\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Executed\",\"inputs\":[{\"name\":\"destination\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ExecutedV2\",\"inputs\":[{\"name\":\"destination\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ExecutedWithERC20\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedERC20\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"token\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"destination\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedNoParams\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedNonPayable\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"strs\",\"type\":\"string[]\",\"indexed\":false,\"internalType\":\"string[]\"},{\"name\":\"nums\",\"type\":\"uint256[]\",\"indexed\":false,\"internalType\":\"uint256[]\"},{\"name\":\"flag\",\"type\":\"bool\",\"indexed\":false,\"internalType\":\"bool\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedPayable\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"str\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"num\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"flag\",\"type\":\"bool\",\"indexed\":false,\"internalType\":\"bool\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedRevert\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Reverted\",\"inputs\":[{\"name\":\"destination\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RevertedWithERC20\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log\",\"inputs\":[{\"name\":\"\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_address\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_array\",\"inputs\":[{\"name\":\"val\",\"type\":\"uint256[]\",\"indexed\":false,\"internalType\":\"uint256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_array\",\"inputs\":[{\"name\":\"val\",\"type\":\"int256[]\",\"indexed\":false,\"internalType\":\"int256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_array\",\"inputs\":[{\"name\":\"val\",\"type\":\"address[]\",\"indexed\":false,\"internalType\":\"address[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_bytes\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_bytes32\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_int\",\"inputs\":[{\"name\":\"\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_address\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_array\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"uint256[]\",\"indexed\":false,\"internalType\":\"uint256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_array\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"int256[]\",\"indexed\":false,\"internalType\":\"int256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_array\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"address[]\",\"indexed\":false,\"internalType\":\"address[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_bytes\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_bytes32\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_decimal_int\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"},{\"name\":\"decimals\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_decimal_uint\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"decimals\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_int\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_string\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_uint\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_string\",\"inputs\":[{\"name\":\"\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_uint\",\"inputs\":[{\"name\":\"\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"logs\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"ApprovalFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"CustodyInitialized\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"DepositFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ExecutionFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientERC20Amount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientETHAmount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZeroAddress\",\"inputs\":[]}]", - Bin: "0x6080604052600c8054600160ff199182168117909255601f80549091169091179055348015602c57600080fd5b5061bf198061003c6000396000f3fe608060405234801561001057600080fd5b50600436106100ea5760003560e01c806385226c811161008c578063b5508aa911610066578063b5508aa91461018b578063ba414fa614610193578063e20c9f71146101ab578063fa7626d4146101b357600080fd5b806385226c8114610159578063916a17c61461016e578063b0464fdc1461018357600080fd5b80633e5e3c23116100c85780633e5e3c231461012c5780633f7286f41461013457806366d9a9a01461013c5780637a380ebf1461015157600080fd5b80630a9254e4146100ef5780631ed7831c146100f95780632ade388014610117575b600080fd5b6100f76101c0565b005b610101610a85565b60405161010e919061620b565b60405180910390f35b61011f610ae7565b60405161010e91906162a7565b610101610c29565b610101610c89565b610144610ce9565b60405161010e919061640d565b6100f7610e6b565b61016161152d565b60405161010e91906164ab565b6101766115fd565b60405161010e9190616522565b6101766116f8565b6101616117f3565b61019b6118c3565b604051901515815260200161010e565b610101611997565b601f5461019b9060ff1681565b602680547fffffffffffffffffffffffff00000000000000000000000000000000000000009081163017909155602780548216611234179055602880549091166156781790556040516102129061611e565b60408082526004908201527f746573740000000000000000000000000000000000000000000000000000000060608201526080602082018190526003908201527f54544b000000000000000000000000000000000000000000000000000000000060a082015260c001604051809103906000f080158015610297573d6000803e3d6000fd5b50602480547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03929092169190911790556040516102dc9061611e565b604080825260049082018190527f7a6574610000000000000000000000000000000000000000000000000000000060608301526080602083018190528201527f5a4554410000000000000000000000000000000000000000000000000000000060a082015260c001604051809103906000f080158015610360573d6000803e3d6000fd5b50602580547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03928316908117909155604080518082018252600e81527f4761746577617945564d2e736f6c00000000000000000000000000000000000060208201526028546026549251908516602482015260448101939093529216606482015261044f919060840160408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fc0c53b8b000000000000000000000000000000000000000000000000000000001790526119f7565b601f80547fffffffffffffffffffffff0000000000000000000000000000000000000000ff166101006001600160a01b0393841681029190911791829055602080549190920483167fffffffffffffffffffffffff000000000000000000000000000000000000000090911681179091556028546026546040519293918216929116906104db9061612b565b6001600160a01b03938416815291831660208301529091166040820152606001604051809103906000f080158015610517573d6000803e3d6000fd5b50602280547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03928316179055602054602554602854602654604051938516949283169391831692169061057290616138565b6001600160a01b039485168152928416602084015290831660408301529091166060820152608001604051809103906000f0801580156105b6573d6000803e3d6000fd5b50602380547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03929092169190911790556040516105fb90616145565b604051809103906000f080158015610617573d6000803e3d6000fd5b50602180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039283161790556028546040517fc88a5e6d00000000000000000000000000000000000000000000000000000000815291166004820152670de0b6b3a76400006024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c88a5e6d90604401600060405180830381600087803b1580156106c357600080fd5b505af11580156106d7573d6000803e3d6000fd5b50506026546040517f06447d560000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506306447d569150602401600060405180830381600087803b15801561074d57600080fd5b505af1158015610761573d6000803e3d6000fd5b50506020546022546040517fae7a3a6f0000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201529116925063ae7a3a6f9150602401600060405180830381600087803b1580156107c757600080fd5b505af11580156107db573d6000803e3d6000fd5b50506020546023546040517f10188aef0000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152911692506310188aef9150602401600060405180830381600087803b15801561084157600080fd5b505af1158015610855573d6000803e3d6000fd5b505050507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b03166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156108b757600080fd5b505af11580156108cb573d6000803e3d6000fd5b5050602480546026546040517f40c10f190000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620f4240938101939093521692506340c10f199150604401600060405180830381600087803b15801561093c57600080fd5b505af1158015610950573d6000803e3d6000fd5b5050602480546022546040517fa9059cbb0000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201526207a1209381019390935216925063a9059cbb91506044016020604051808303816000875af11580156109c6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109ea91906165b9565b506028546040517fc88a5e6d0000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152670de0b6b3a76400006024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c88a5e6d90604401600060405180830381600087803b158015610a6b57600080fd5b505af1158015610a7f573d6000803e3d6000fd5b50505050565b60606016805480602002602001604051908101604052809291908181526020018280548015610add57602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610abf575b5050505050905090565b6060601e805480602002602001604051908101604052809291908181526020016000905b82821015610c2057600084815260208082206040805180820182526002870290920180546001600160a01b03168352600181018054835181870281018701909452808452939591948681019491929084015b82821015610c09578382906000526020600020018054610b7c906165db565b80601f0160208091040260200160405190810160405280929190818152602001828054610ba8906165db565b8015610bf55780601f10610bca57610100808354040283529160200191610bf5565b820191906000526020600020905b815481529060010190602001808311610bd857829003601f168201915b505050505081526020019060010190610b5d565b505050508152505081526020019060010190610b0b565b50505050905090565b60606018805480602002602001604051908101604052809291908181526020018280548015610add576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311610abf575050505050905090565b60606017805480602002602001604051908101604052809291908181526020018280548015610add576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311610abf575050505050905090565b6060601b805480602002602001604051908101604052809291908181526020016000905b82821015610c205783829060005260206000209060020201604051806040016040529081600082018054610d40906165db565b80601f0160208091040260200160405190810160405280929190818152602001828054610d6c906165db565b8015610db95780601f10610d8e57610100808354040283529160200191610db9565b820191906000526020600020905b815481529060010190602001808311610d9c57829003601f168201915b5050505050815260200160018201805480602002602001604051908101604052809291908181526020018280548015610e5357602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019060040190602082600301049283019260010382029150808411610e005790505b50505050508152505081526020019060010190610d0d565b60208054604080517fdda79b7500000000000000000000000000000000000000000000000000000000815290516000936001600160a01b039093169263dda79b7592600480820193918290030181865afa158015610ecd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ef19190616628565b60208054604080517f5b11259100000000000000000000000000000000000000000000000000000000815290519394506000936001600160a01b0390921692635b112591926004808401938290030181865afa158015610f55573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f799190616628565b604080518082018252600f81527f48656c6c6f2c20466f756e647279210000000000000000000000000000000000602080830191909152601f5483518085018552601981527f4761746577617945564d55706772616465546573742e736f6c00000000000000818401528451928301909452600082526026549495509193602a93600193670de0b6b3a764000093611023936001600160a01b036101009093048316939216611a16565b600084848460405160240161103a93929190616651565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe04d4f9700000000000000000000000000000000000000000000000000000000179052601f5460215491517ff30c7ba30000000000000000000000000000000000000000000000000000000081529293506001600160a01b03610100909104811692737109709ecfa91a80626ff3989d68f67f5b1dd12d9263f30c7ba392611100929116908790879060040161667b565b600060405180830381600087803b15801561111a57600080fd5b505af115801561112e573d6000803e3d6000fd5b50506021546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b1580156111c057600080fd5b505af11580156111d4573d6000803e3d6000fd5b50506020546040517f1f1ff1f5fb41346850b2f5c04e6c767e2f1c8a525c5c0c5cdb60cdf3ca5f62fa935061121d92506001600160a01b039091169086908a908a908a906166a3565b60405180910390a16020546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b1580156112b357600080fd5b505af11580156112c7573d6000803e3d6000fd5b50506021546040516001600160a01b0390911692507f373df382b9c587826f3de13f16d67f8d99f28ee947fc0924c6ef2d6d2c7e8546915061130c90869086906166e4565b60405180910390a26028546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561138657600080fd5b505af115801561139a573d6000803e3d6000fd5b50506021546040517f1cff79cd0000000000000000000000000000000000000000000000000000000081526001600160a01b038086169450631cff79cd935087926113ec9291169087906004016166fd565b60006040518083038185885af115801561140a573d6000803e3d6000fd5b50505050506040513d6000823e601f3d908101601f191682016040526114339190810190616807565b5060208054604080517fdda79b7500000000000000000000000000000000000000000000000000000000815290516114c0938c936001600160a01b03169263dda79b7592600480830193928290030181865afa158015611497573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114bb9190616628565b611a32565b60208054604080517f5b1125910000000000000000000000000000000000000000000000000000000081529051611523938b936001600160a01b031692635b11259192600480830193928290030181865afa158015611497573d6000803e3d6000fd5b5050505050505050565b6060601a805480602002602001604051908101604052809291908181526020016000905b82821015610c20578382906000526020600020018054611570906165db565b80601f016020809104026020016040519081016040528092919081815260200182805461159c906165db565b80156115e95780601f106115be576101008083540402835291602001916115e9565b820191906000526020600020905b8154815290600101906020018083116115cc57829003601f168201915b505050505081526020019060010190611551565b6060601d805480602002602001604051908101604052809291908181526020016000905b82821015610c205760008481526020908190206040805180820182526002860290920180546001600160a01b031683526001810180548351818702810187019094528084529394919385830193928301828280156116e057602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168152602001906004019060208260030104928301926001038202915080841161168d5790505b50505050508152505081526020019060010190611621565b6060601c805480602002602001604051908101604052809291908181526020016000905b82821015610c205760008481526020908190206040805180820182526002860290920180546001600160a01b031683526001810180548351818702810187019094528084529394919385830193928301828280156117db57602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190600401906020826003010492830192600103820291508084116117885790505b5050505050815250508152602001906001019061171c565b60606019805480602002602001604051908101604052809291908181526020016000905b82821015610c20578382906000526020600020018054611836906165db565b80601f0160208091040260200160405190810160405280929190818152602001828054611862906165db565b80156118af5780601f10611884576101008083540402835291602001916118af565b820191906000526020600020905b81548152906001019060200180831161189257829003601f168201915b505050505081526020019060010190611817565b60085460009060ff16156118db575060085460ff1690565b6040517f667f9d70000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d600482018190527f6661696c65640000000000000000000000000000000000000000000000000000602483015260009163667f9d7090604401602060405180830381865afa15801561196c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611990919061683c565b1415905090565b60606015805480602002602001604051908101604052809291908181526020018280548015610add576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311610abf575050505050905090565b6000611a01616152565b611a0c848483611ac2565b9150505b92915050565b611a1e616152565b611a2b8585858486611b3d565b5050505050565b6040517f515361f60000000000000000000000000000000000000000000000000000000081526001600160a01b03808416600483015282166024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063515361f69060440160006040518083038186803b158015611aa657600080fd5b505afa158015611aba573d6000803e3d6000fd5b505050505050565b600080611acf8584611c3e565b9050611b326040518060400160405280601d81526020017f4552433139363750726f78792e736f6c3a4552433139363750726f78790000008152508286604051602001611b1d9291906166fd565b60405160208183030381529060405285611c4a565b9150505b9392505050565b6040517f06447d560000000000000000000000000000000000000000000000000000000081526001600160a01b03821660048201528190737109709ecfa91a80626ff3989d68f67f5b1dd12d9081906306447d5690602401600060405180830381600087803b158015611baf57600080fd5b505af1925050508015611bc0575060015b611bd557611bd087878787611c78565b611c35565b611be187878787611c78565b806001600160a01b03166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015611c1c57600080fd5b505af1158015611c30573d6000803e3d6000fd5b505050505b50505050505050565b6000611b368383611c91565b60c08101515160009015611c6e57611c6784848460c00151611cac565b9050611b36565b611c678484611e52565b6000611c848483611f3d565b9050611a2b858285611f49565b6000611c9d8383612313565b611b3683836020015184611c4a565b600080611cb7612323565b90506000611cc586836123f6565b90506000611cdc826060015183602001518561289c565b90506000611cec83838989612aae565b90506000611cf98261392b565b602081015181519192509060030b15611d6c57898260400151604051602001611d23929190616855565b60408051601f19818403018152908290527f08c379a0000000000000000000000000000000000000000000000000000000008252611d63916004016168d6565b60405180910390fd5b6000611daf6040518060400160405280601581526020017f4465706c6f79656420746f20616464726573733a200000000000000000000000815250836001613afa565b6040517fc6ce059d000000000000000000000000000000000000000000000000000000008152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c6ce059d90611e029084906004016168d6565b602060405180830381865afa158015611e1f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e439190616628565b9b9a5050505050505050505050565b6040517f8d1cc9250000000000000000000000000000000000000000000000000000000081526000908190737109709ecfa91a80626ff3989d68f67f5b1dd12d90638d1cc92590611ea79087906004016168d6565b600060405180830381865afa158015611ec4573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611eec9190810190616807565b90506000611f1a8285604051602001611f069291906168e9565b604051602081830303815290604052613cfa565b90506001600160a01b038116611a0c578484604051602001611d23929190616918565b6000611c9d8383613d0d565b6040517f667f9d700000000000000000000000000000000000000000000000000000000081526001600160a01b03841660048201527fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61036024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d90600090829063667f9d7090604401602060405180830381865afa158015611fe5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612009919061683c565b9050806121b057600061201b86613d19565b604080518082018252600581527f352e302e30000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201529091506120a6905b60408051808201825260008082526020918201528151808301909252845182528085019082015290613e06565b806120b2575060008451115b15612135576040517f4f1ef2860000000000000000000000000000000000000000000000000000000081526001600160a01b03871690634f1ef286906120fe90889088906004016166fd565b600060405180830381600087803b15801561211857600080fd5b505af115801561212c573d6000803e3d6000fd5b505050506121aa565b6040517f3659cfe60000000000000000000000000000000000000000000000000000000081526001600160a01b038681166004830152871690633659cfe690602401600060405180830381600087803b15801561219157600080fd5b505af11580156121a5573d6000803e3d6000fd5b505050505b50611a2b565b8060006121bc82613d19565b604080518082018252600581527f352e302e300000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015290915061221e90612079565b8061222a575060008551115b156122af576040517f9623609d0000000000000000000000000000000000000000000000000000000081526001600160a01b03831690639623609d90612278908a908a908a906004016169c3565b600060405180830381600087803b15801561229257600080fd5b505af11580156122a6573d6000803e3d6000fd5b50505050611c35565b6040517f99a88ec40000000000000000000000000000000000000000000000000000000081526001600160a01b03888116600483015287811660248301528316906399a88ec490604401600060405180830381600087803b158015611c1c57600080fd5b61231f82826000613e1a565b5050565b604080518082018252600381527f6f75740000000000000000000000000000000000000000000000000000000000602082015290517fd145736c000000000000000000000000000000000000000000000000000000008152606091737109709ecfa91a80626ff3989d68f67f5b1dd12d91829063d145736c906123aa9084906004016169f4565b600060405180830381865afa1580156123c7573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526123ef9190810190616a3b565b9250505090565b6124286040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b6000737109709ecfa91a80626ff3989d68f67f5b1dd12d90506124736040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b61247c85613f1d565b6020820152600061248c86614302565b90506000836001600160a01b031663d930a0e66040518163ffffffff1660e01b8152600401600060405180830381865afa1580156124ce573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526124f69190810190616a3b565b868385602001516040516020016125109493929190616a84565b60408051601f19818403018152908290527f60f9bb1100000000000000000000000000000000000000000000000000000000825291506000906001600160a01b038616906360f9bb11906125689085906004016168d6565b600060405180830381865afa158015612585573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526125ad9190810190616a3b565b6040517fdb4235f60000000000000000000000000000000000000000000000000000000081529091506001600160a01b0386169063db4235f6906125f5908490600401616b88565b602060405180830381865afa158015612612573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061263691906165b9565b61264b5781604051602001611d239190616bda565b6040517f49c4fac80000000000000000000000000000000000000000000000000000000081526001600160a01b038616906349c4fac890612690908490600401616c6c565b600060405180830381865afa1580156126ad573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526126d59190810190616a3b565b84526040517fdb4235f60000000000000000000000000000000000000000000000000000000081526001600160a01b0386169063db4235f69061271c908490600401616cbe565b602060405180830381865afa158015612739573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061275d91906165b9565b156127f2576040517f49c4fac80000000000000000000000000000000000000000000000000000000081526001600160a01b038616906349c4fac8906127a7908490600401616cbe565b600060405180830381865afa1580156127c4573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526127ec9190810190616a3b565b60408501525b846001600160a01b03166349c4fac88286600001516040516020016128179190616d10565b6040516020818303038152906040526040518363ffffffff1660e01b8152600401612843929190616d7c565b600060405180830381865afa158015612860573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526128889190810190616a3b565b606085015250608083015250949350505050565b60408051600480825260a0820190925260609160009190816020015b60608152602001906001900390816128b85790505090506040518060400160405280600481526020017f67726570000000000000000000000000000000000000000000000000000000008152508160008151811061291857612918616da1565b60200260200101819052506040518060400160405280600381526020017f2d726c00000000000000000000000000000000000000000000000000000000008152508160018151811061296c5761296c616da1565b6020026020010181905250846040516020016129889190616dd0565b604051602081830303815290604052816002815181106129aa576129aa616da1565b6020026020010181905250826040516020016129c69190616e3c565b604051602081830303815290604052816003815181106129e8576129e8616da1565b602002602001018190525060006129fe8261392b565b602080820151604080518082018252600581527f2e6a736f6e0000000000000000000000000000000000000000000000000000008185019081528251808401845260008082529086015282518084019093529051825292810192909252919250612a8f9060408051808201825260008082526020918201528151808301909252845182528085019082015290614585565b612aa45785604051602001611d239190616e7d565b9695505050505050565b60a0810151604080518082018252600080825260209182015281518083019092528251808352928101910152606090737109709ecfa91a80626ff3989d68f67f5b1dd12d9015612afe565b511590565b612c7257826020015115612bba576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605860248201527f54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f742060448201527f62652075736564207768656e207468652060736b6970566572696679536f757260648201527f6365436f646560206f7074696f6e206973206074727565600000000000000000608482015260a401611d63565b8260c0015115612c72576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605360248201527f54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f742060448201527f62652075736564207768656e207468652060736b69704c6963656e736554797060648201527f6560206f7074696f6e2069732060747275656000000000000000000000000000608482015260a401611d63565b6040805160ff8082526120008201909252600091816020015b6060815260200190600190039081612c8b57905050905060006040518060400160405280600381526020017f6e70780000000000000000000000000000000000000000000000000000000000815250828280612ce690616f3d565b935060ff1681518110612cfb57612cfb616da1565b60200260200101819052506040518060400160405280600d81526020017f302e302e312d616c7068612e3700000000000000000000000000000000000000815250604051602001612d4c9190616f5c565b604051602081830303815290604052828280612d6790616f3d565b935060ff1681518110612d7c57612d7c616da1565b60200260200101819052506040518060400160405280600681526020017f6465706c6f790000000000000000000000000000000000000000000000000000815250828280612dc990616f3d565b935060ff1681518110612dde57612dde616da1565b60200260200101819052506040518060400160405280600e81526020017f2d2d636f6e74726163744e616d65000000000000000000000000000000000000815250828280612e2b90616f3d565b935060ff1681518110612e4057612e40616da1565b60200260200101819052508760200151828280612e5c90616f3d565b935060ff1681518110612e7157612e71616da1565b60200260200101819052506040518060400160405280600e81526020017f2d2d636f6e747261637450617468000000000000000000000000000000000000815250828280612ebe90616f3d565b935060ff1681518110612ed357612ed3616da1565b602090810291909101015287518282612eeb81616f3d565b935060ff1681518110612f0057612f00616da1565b60200260200101819052506040518060400160405280600981526020017f2d2d636861696e49640000000000000000000000000000000000000000000000815250828280612f4d90616f3d565b935060ff1681518110612f6257612f62616da1565b6020026020010181905250612f76466145e6565b8282612f8181616f3d565b935060ff1681518110612f9657612f96616da1565b60200260200101819052506040518060400160405280600f81526020017f2d2d6275696c64496e666f46696c650000000000000000000000000000000000815250828280612fe390616f3d565b935060ff1681518110612ff857612ff8616da1565b60200260200101819052508682828061301090616f3d565b935060ff168151811061302557613025616da1565b602090810291909101015285511561314c5760408051808201909152601581527f2d2d636f6e7374727563746f7242797465636f646500000000000000000000006020820152828261307681616f3d565b935060ff168151811061308b5761308b616da1565b60209081029190910101526040517f71aad10d0000000000000000000000000000000000000000000000000000000081526001600160a01b038416906371aad10d906130db9089906004016168d6565b600060405180830381865afa1580156130f8573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526131209190810190616a3b565b828261312b81616f3d565b935060ff168151811061314057613140616da1565b60200260200101819052505b84602001511561321c5760408051808201909152601281527f2d2d766572696679536f75726365436f646500000000000000000000000000006020820152828261319581616f3d565b935060ff16815181106131aa576131aa616da1565b60200260200101819052506040518060400160405280600581526020017f66616c73650000000000000000000000000000000000000000000000000000008152508282806131f790616f3d565b935060ff168151811061320c5761320c616da1565b60200260200101819052506133e3565b613254612af98660a0015160408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6132e75760408051808201909152600d81527f2d2d6c6963656e736554797065000000000000000000000000000000000000006020820152828261329781616f3d565b935060ff16815181106132ac576132ac616da1565b60200260200101819052508460a001516040516020016132cc9190616dd0565b6040516020818303038152906040528282806131f790616f3d565b8460c0015115801561332a57506040808901518151808301835260008082526020918201528251808401909352815183529081019082015261332890511590565b155b156133e35760408051808201909152600d81527f2d2d6c6963656e736554797065000000000000000000000000000000000000006020820152828261336e81616f3d565b935060ff168151811061338357613383616da1565b602002602001018190525061339788614686565b6040516020016133a79190616dd0565b6040516020818303038152906040528282806133c290616f3d565b935060ff16815181106133d7576133d7616da1565b60200260200101819052505b6040808601518151808301835260008082526020918201528251808401909352815183529081019082015261341790511590565b6134ac5760408051808201909152600b81527f2d2d72656c6179657249640000000000000000000000000000000000000000006020820152828261345a81616f3d565b935060ff168151811061346f5761346f616da1565b6020026020010181905250846040015182828061348b90616f3d565b935060ff16815181106134a0576134a0616da1565b60200260200101819052505b6060850151156135cd5760408051808201909152600681527f2d2d73616c740000000000000000000000000000000000000000000000000000602082015282826134f581616f3d565b935060ff168151811061350a5761350a616da1565b602090810291909101015260608501516040517fb11a19e800000000000000000000000000000000000000000000000000000000815260048101919091526001600160a01b0384169063b11a19e890602401600060405180830381865afa158015613579573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526135a19190810190616a3b565b82826135ac81616f3d565b935060ff16815181106135c1576135c1616da1565b60200260200101819052505b60e085015151156136745760408051808201909152600a81527f2d2d6761734c696d6974000000000000000000000000000000000000000000006020820152828261361781616f3d565b935060ff168151811061362c5761362c616da1565b60200260200101819052506136488560e00151600001516145e6565b828261365381616f3d565b935060ff168151811061366857613668616da1565b60200260200101819052505b60e0850151602001511561371e5760408051808201909152600a81527f2d2d676173507269636500000000000000000000000000000000000000000000602082015282826136c181616f3d565b935060ff16815181106136d6576136d6616da1565b60200260200101819052506136f28560e00151602001516145e6565b82826136fd81616f3d565b935060ff168151811061371257613712616da1565b60200260200101819052505b60e085015160400151156137c85760408051808201909152600e81527f2d2d6d61784665655065724761730000000000000000000000000000000000006020820152828261376b81616f3d565b935060ff168151811061378057613780616da1565b602002602001018190525061379c8560e00151604001516145e6565b82826137a781616f3d565b935060ff16815181106137bc576137bc616da1565b60200260200101819052505b60e085015160600151156138725760408051808201909152601681527f2d2d6d61785072696f72697479466565506572476173000000000000000000006020820152828261381581616f3d565b935060ff168151811061382a5761382a616da1565b60200260200101819052506138468560e00151606001516145e6565b828261385181616f3d565b935060ff168151811061386657613866616da1565b60200260200101819052505b60008160ff1667ffffffffffffffff8111156138905761389061671f565b6040519080825280602002602001820160405280156138c357816020015b60608152602001906001900390816138ae5790505b50905060005b8260ff168160ff16101561391c57838160ff16815181106138ec576138ec616da1565b6020026020010151828260ff168151811061390957613909616da1565b60209081029190910101526001016138c9565b5093505050505b949350505050565b6139526040518060600160405280600060030b815260200160608152602001606081525090565b60408051808201825260048082527f6261736800000000000000000000000000000000000000000000000000000000602083015291517fd145736c000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d92600091849163d145736c916139d891869101616fc7565b600060405180830381865afa1580156139f5573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052613a1d9190810190616a3b565b90506000613a2b8683615175565b90506000846001600160a01b031663f45c1ce7836040518263ffffffff1660e01b8152600401613a5b91906164ab565b6000604051808303816000875af1158015613a7a573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052613aa2919081019061700e565b805190915060030b15801590613abb5750602081015151155b8015613aca5750604081015151155b15612aa45781600081518110613ae257613ae2616da1565b6020026020010151604051602001611d2391906170c4565b60606000613b2f8560408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600080825260209182015281518083019092528651825280870190820152909150613b669082905b906152ca565b15613cc3576000613be382613bdd84613bd7613ba98a60408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6040805180820182526000808252602091820152815180830190925282518252918201519181019190915290565b906152f1565b90615353565b604080518082018252600181527f0a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152909150613c479082906152ca565b15613cb157604080518082018252600181527f0a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152613cae905b82906153d8565b90505b613cba816153fe565b92505050611b36565b8215613cdc578484604051602001611d239291906172b0565b5050604080516020810190915260008152611b36565b509392505050565b6000808251602084016000f09392505050565b61231f82826001613e1a565b60408051600481526024810182526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fad3cb1cc00000000000000000000000000000000000000000000000000000000179052905160609160009182916001600160a01b03861691613d8e9190617357565b6000604051808303816000865af19150503d8060008114613dcb576040519150601f19603f3d011682016040523d82523d6000602084013e613dd0565b606091505b50915091508115613def57808060200190518101906139239190616a3b565b505060408051602081019091526000815292915050565b6000613e128383615467565b159392505050565b8160a0015115613e2957505050565b6000613e36848484615542565b90506000613e438261392b565b602081015181519192509060030b158015613edf5750604080518082018252600781527f535543434553530000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152613edf90604080518082018252600080825260209182015281518083019092528451825280850190820152613b60565b15613eec57505050505050565b60408201515115613f0c578160400151604051602001611d239190617373565b80604051602001611d2391906173d1565b60606000613f528360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600481527f2e736f6c0000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152909150613fb7905b8290614585565b1561402657604080518082018252600481527f2e736f6c0000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152611b3690614021908390615add565b6153fe565b604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152614088905b8290615b67565b60010361415557604080518082018252600181527f3a00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526140ee90613ca7565b50604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152611b3690614021905b83906153d8565b604080518082018252600581527f2e6a736f6e000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526141b490613fb0565b156142eb57604080518082018252600181527f2f0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082018190528451808601909552925184528301529061421c908390615c01565b90506000816001835161422f919061743c565b8151811061423f5761423f616da1565b602002602001015190506142e26140216142b56040518060400160405280600581526020017f2e6a736f6e00000000000000000000000000000000000000000000000000000081525060408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b60408051808201825260008082526020918201528151808301909252855182528086019082015290615add565b95945050505050565b82604051602001611d23919061744f565b50919050565b606060006143378360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600481527f2e736f6c000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015290915061439990613fb0565b156143a757611b36816153fe565b604080518082018252600181527f3a000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261440690614081565b60010361447057604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152611b36906140219061414e565b604080518082018252600581527f2e6a736f6e000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526144cf90613fb0565b156142eb57604080518082018252600181527f2f00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820181905284518086019095529251845283015290614537908390615c01565b9050600181511115614573578060028251614552919061743c565b8151811061456257614562616da1565b602002602001015192505050919050565b5082604051602001611d23919061744f565b80518251600091111561459a57506000611a10565b815183516020850151600092916145b09161752d565b6145ba919061743c565b9050826020015181036145d1576001915050611a10565b82516020840151819020912014905092915050565b606060006145f383615ca6565b600101905060008167ffffffffffffffff8111156146135761461361671f565b6040519080825280601f01601f19166020018201604052801561463d576020820181803683370190505b5090508181016020015b600019017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a850494508461464757509392505050565b604081810151815180830183526000808252602091820181905283518085018552835181529282018383015283518085018552600a81527f554e4c4943454e5345440000000000000000000000000000000000000000000081840190815285518087018752838152840192909252845180860190955251845290830152606091614712905b8290613e06565b1561475257505060408051808201909152600481527f4e6f6e65000000000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600981527f556e6c6963656e73650000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526147b19061470b565b156147f157505060408051808201909152600981527f556e6c6963656e736500000000000000000000000000000000000000000000006020820152919050565b604080518082018252600381527f4d49540000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526148509061470b565b1561489057505060408051808201909152600381527f4d495400000000000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f47504c2d322e302d6f6e6c790000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526148ef9061470b565b806149545750604080518082018252601081527f47504c2d322e302d6f722d6c6174657200000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526149549061470b565b1561499457505060408051808201909152600981527f474e552047504c763200000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f47504c2d332e302d6f6e6c790000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526149f39061470b565b80614a585750604080518082018252601081527f47504c2d332e302d6f722d6c617465720000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152614a589061470b565b15614a9857505060408051808201909152600981527f474e552047504c763300000000000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4c47504c2d322e312d6f6e6c790000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152614af79061470b565b80614b5c5750604080518082018252601181527f4c47504c2d322e312d6f722d6c6174657200000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152614b5c9061470b565b15614b9c57505060408051808201909152600c81527f474e55204c47504c76322e3100000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4c47504c2d332e302d6f6e6c790000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152614bfb9061470b565b80614c605750604080518082018252601181527f4c47504c2d332e302d6f722d6c6174657200000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152614c609061470b565b15614ca057505060408051808201909152600a81527f474e55204c47504c7633000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f4253442d322d436c61757365000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152614cff9061470b565b15614d3f57505060408051808201909152600c81527f4253442d322d436c6175736500000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f4253442d332d436c61757365000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152614d9e9061470b565b15614dde57505060408051808201909152600c81527f4253442d332d436c6175736500000000000000000000000000000000000000006020820152919050565b604080518082018252600781527f4d504c2d322e300000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152614e3d9061470b565b15614e7d57505060408051808201909152600781527f4d504c2d322e30000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600781527f4f534c2d332e300000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152614edc9061470b565b15614f1c57505060408051808201909152600781527f4f534c2d332e30000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600a81527f4170616368652d322e300000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152614f7b9061470b565b15614fbb57505060408051808201909152600a81527f4170616368652d322e30000000000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4147504c2d332e302d6f6e6c79000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261501a9061470b565b8061507f5750604080518082018252601181527f4147504c2d332e302d6f722d6c617465720000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261507f9061470b565b156150bf57505060408051808201909152600a81527f474e55204147504c7633000000000000000000000000000000000000000000006020820152919050565b604080518082018252600881527f4255534c2d312e310000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261511e9061470b565b1561515e57505060408051808201909152600781527f42534c20312e31000000000000000000000000000000000000000000000000006020820152919050565b60408084015184519151611d239290602001617540565b60608060005b8451811015615200578185828151811061519757615197616da1565b60200260200101516040516020016151b09291906168e9565b6040516020818303038152906040529150600185516151cf919061743c565b81146151f857816040516020016151e691906176a9565b60405160208183030381529060405291505b60010161517b565b5060408051600380825260808201909252600091816020015b6060815260200190600190039081615219579050509050838160008151811061524457615244616da1565b60200260200101819052506040518060400160405280600281526020017f2d630000000000000000000000000000000000000000000000000000000000008152508160018151811061529857615298616da1565b602002602001018190525081816002815181106152b7576152b7616da1565b6020908102919091010152949350505050565b60208083015183518351928401516000936152e89291849190615d88565b14159392505050565b604080518082019091526000808252602082015260006153238460000151856020015185600001518660200151615e99565b9050836020015181615335919061743c565b8451859061534490839061743c565b90525060208401525090919050565b6040805180820190915260008082526020820152815183511015615378575081611a10565b602080830151908401516001911461539f5750815160208481015190840151829020919020145b80156153d0578251845185906153b690839061743c565b90525082516020850180516153cc90839061752d565b9052505b509192915050565b60408051808201909152600080825260208201526153f7838383615fb9565b5092915050565b60606000826000015167ffffffffffffffff81111561541f5761541f61671f565b6040519080825280601f01601f191660200182016040528015615449576020820181803683370190505b50905060006020820190506153f78185602001518660000151616064565b815181516000919081111561547a575081515b6020808501519084015160005b8381101561553357825182518082146155035760001960208710156154e2576001846154b489602061743c565b6154be919061752d565b6154c99060086176ea565b6154d49060026177e8565b6154de919061743c565b1990505b8181168382168181039114615500579750611a109650505050505050565b50505b61550e60208661752d565b945061551b60208561752d565b9350505060208161552c919061752d565b9050615487565b5084518651612aa491906177f4565b6060600061554e612323565b6040805160ff808252612000820190925291925060009190816020015b606081526020019060019003908161556b57905050905060006040518060400160405280600381526020017f6e707800000000000000000000000000000000000000000000000000000000008152508282806155c690616f3d565b935060ff16815181106155db576155db616da1565b60200260200101819052506040518060400160405280600781526020017f5e312e33322e330000000000000000000000000000000000000000000000000081525060405160200161562c9190617814565b60405160208183030381529060405282828061564790616f3d565b935060ff168151811061565c5761565c616da1565b60200260200101819052506040518060400160405280600881526020017f76616c69646174650000000000000000000000000000000000000000000000008152508282806156a990616f3d565b935060ff16815181106156be576156be616da1565b6020026020010181905250826040516020016156da9190616e3c565b6040516020818303038152906040528282806156f590616f3d565b935060ff168151811061570a5761570a616da1565b60200260200101819052506040518060400160405280600a81526020017f2d2d636f6e74726163740000000000000000000000000000000000000000000081525082828061575790616f3d565b935060ff168151811061576c5761576c616da1565b602002602001018190525061578187846160de565b828261578c81616f3d565b935060ff16815181106157a1576157a1616da1565b60209081029190910101528551511561584d5760408051808201909152600b81527f2d2d7265666572656e6365000000000000000000000000000000000000000000602082015282826157f381616f3d565b935060ff168151811061580857615808616da1565b60200260200101819052506158218660000151846160de565b828261582c81616f3d565b935060ff168151811061584157615841616da1565b60200260200101819052505b8560800151156158bb5760408051808201909152601881527f2d2d756e73616665536b697053746f72616765436865636b00000000000000006020820152828261589681616f3d565b935060ff16815181106158ab576158ab616da1565b6020026020010181905250615921565b84156159215760408051808201909152601281527f2d2d726571756972655265666572656e636500000000000000000000000000006020820152828261590081616f3d565b935060ff168151811061591557615915616da1565b60200260200101819052505b604086015151156159bd5760408051808201909152600d81527f2d2d756e73616665416c6c6f77000000000000000000000000000000000000006020820152828261596b81616f3d565b935060ff168151811061598057615980616da1565b6020026020010181905250856040015182828061599c90616f3d565b935060ff16815181106159b1576159b1616da1565b60200260200101819052505b856060015115615a275760408051808201909152601481527f2d2d756e73616665416c6c6f7752656e616d657300000000000000000000000060208201528282615a0681616f3d565b935060ff1681518110615a1b57615a1b616da1565b60200260200101819052505b60008160ff1667ffffffffffffffff811115615a4557615a4561671f565b604051908082528060200260200182016040528015615a7857816020015b6060815260200190600190039081615a635790505b50905060005b8260ff168160ff161015615ad157838160ff1681518110615aa157615aa1616da1565b6020026020010151828260ff1681518110615abe57615abe616da1565b6020908102919091010152600101615a7e565b50979650505050505050565b6040805180820190915260008082526020820152815183511015615b02575081611a10565b81518351602085015160009291615b189161752d565b615b22919061743c565b60208401519091506001908214615b43575082516020840151819020908220145b8015615b5e57835185518690615b5a90839061743c565b9052505b50929392505050565b6000808260000151615b8b8560000151866020015186600001518760200151615e99565b615b95919061752d565b90505b83516020850151615ba9919061752d565b81116153f75781615bb981617859565b9250508260000151615bf0856020015183615bd4919061743c565b8651615be0919061743c565b8386600001518760200151615e99565b615bfa919061752d565b9050615b98565b60606000615c0f8484615b67565b615c1a90600161752d565b67ffffffffffffffff811115615c3257615c3261671f565b604051908082528060200260200182016040528015615c6557816020015b6060815260200190600190039081615c505790505b50905060005b8151811015613cf257615c8161402186866153d8565b828281518110615c9357615c93616da1565b6020908102919091010152600101615c6b565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310615cef577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310615d1b576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc100008310615d3957662386f26fc10000830492506010015b6305f5e1008310615d51576305f5e100830492506008015b6127108310615d6557612710830492506004015b60648310615d77576064830492506002015b600a8310611a105760010192915050565b600080858411615e8f5760208411615e3b5760008415615dd3576001615daf86602061743c565b615dba9060086176ea565b615dc59060026177e8565b615dcf919061743c565b1990505b8351811685615de2898961752d565b615dec919061743c565b805190935082165b818114615e2657878411615e0e5787945050505050613923565b83615e1881617873565b945050828451169050615df4565b615e30878561752d565b945050505050613923565b838320615e48858861743c565b615e52908761752d565b91505b858210615e8d57848220808203615e7a57615e70868461752d565b9350505050613923565b615e8560018461743c565b925050615e55565b505b5092949350505050565b60008381868511615fa45760208511615f535760008515615ee5576001615ec187602061743c565b615ecc9060086176ea565b615ed79060026177e8565b615ee1919061743c565b1990505b84518116600087615ef68b8b61752d565b615f00919061743c565b855190915083165b828114615f4557818610615f2d57615f208b8b61752d565b9650505050505050613923565b85615f3781617859565b965050838651169050615f08565b859650505050505050613923565b508383206000905b615f65868961743c565b8211615fa257858320808203615f815783945050505050613923565b615f8c60018561752d565b9350508180615f9a90617859565b925050615f5b565b505b615fae878761752d565b979650505050505050565b60408051808201909152600080825260208201526000615feb8560000151866020015186600001518760200151615e99565b602080870180519186019190915251909150616007908261743c565b83528451602086015161601a919061752d565b8103616029576000855261605b565b83518351616037919061752d565b8551869061604690839061743c565b9052508351616055908261752d565b60208601525b50909392505050565b6020811061609c578151835261607b60208461752d565b925061608860208361752d565b915061609560208261743c565b9050616064565b60001981156160cb5760016160b283602061743c565b6160be906101006177e8565b6160c8919061743c565b90505b9151835183169219169190911790915250565b606060006160ec84846123f6565b80516020808301516040519394506161069390910161788a565b60405160208183030381529060405291505092915050565b610c9f806178e383390190565b61140b8061858283390190565b6117f98061998d83390190565b610d5e8061b18683390190565b6040518060e0016040528060608152602001606081526020016060815260200160001515815260200160001515815260200160001515815260200161619561619a565b905290565b604051806101000160405280600015158152602001600015158152602001606081526020016000801916815260200160608152602001606081526020016000151581526020016161956040518060800160405280600081526020016000815260200160008152602001600081525090565b602080825282518282018190526000918401906040840190835b8181101561624c5783516001600160a01b0316835260209384019390920191600101616225565b509095945050505050565b60005b8381101561627257818101518382015260200161625a565b50506000910152565b60008151808452616293816020860160208601616257565b601f01601f19169290920160200192915050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b828110156163a3577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452815180516001600160a01b03168652602090810151604082880181905281519088018190529101906060600582901b88018101919088019060005b81811015616389577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa08a850301835261637384865161627b565b6020958601959094509290920191600101616339565b5091975050506020948501949290920191506001016162cf565b50929695505050505050565b600081518084526020840193506020830160005b828110156164035781517fffffffff00000000000000000000000000000000000000000000000000000000168652602095860195909101906001016163c3565b5093949350505050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b828110156163a3577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08786030184528151805160408752616479604088018261627b565b905060208201519150868103602088015261649481836163af565b965050506020938401939190910190600101616435565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b828110156163a3577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc087860301845261650d85835161627b565b945060209384019391909101906001016164d3565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b828110156163a3577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc087860301845281516001600160a01b03815116865260208101519050604060208701526165a360408701826163af565b955050602093840193919091019060010161654a565b6000602082840312156165cb57600080fd5b81518015158114611b3657600080fd5b600181811c908216806165ef57607f821691505b6020821081036142fc577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006020828403121561663a57600080fd5b81516001600160a01b0381168114611b3657600080fd5b606081526000616664606083018661627b565b602083019490945250901515604090910152919050565b6001600160a01b03841681528260208201526060604082015260006142e2606083018461627b565b6001600160a01b038616815284602082015260a0604082015260006166cb60a083018661627b565b6060830194909452509015156080909101529392505050565b828152604060208201526000613923604083018461627b565b6001600160a01b0383168152604060208201526000613923604083018461627b565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040516060810167ffffffffffffffff811182821017156167715761677161671f565b60405290565b60008067ffffffffffffffff8411156167925761679261671f565b50604051601f19601f85018116603f0116810181811067ffffffffffffffff821117156167c1576167c161671f565b6040528381529050808284018510156167d957600080fd5b613cf2846020830185616257565b600082601f8301126167f857600080fd5b611b3683835160208501616777565b60006020828403121561681957600080fd5b815167ffffffffffffffff81111561683057600080fd5b611a0c848285016167e7565b60006020828403121561684e57600080fd5b5051919050565b7f4661696c656420746f206465706c6f7920636f6e74726163742000000000000081526000835161688d81601a850160208801616257565b7f3a20000000000000000000000000000000000000000000000000000000000000601a9184019182015283516168ca81601c840160208801616257565b01601c01949350505050565b602081526000611b36602083018461627b565b600083516168fb818460208801616257565b83519083019061690f818360208801616257565b01949350505050565b7f4661696c656420746f206465706c6f7920636f6e74726163742000000000000081526000835161695081601a850160208801616257565b7f207573696e6720636f6e7374727563746f722064617461202200000000000000601a91840191820152835161698d816033840160208801616257565b7f220000000000000000000000000000000000000000000000000000000000000060339290910191820152603401949350505050565b6001600160a01b03841681526001600160a01b03831660208201526060604082015260006142e2606083018461627b565b60408152600b60408201527f464f554e4452595f4f55540000000000000000000000000000000000000000006060820152608060208201526000611b36608083018461627b565b600060208284031215616a4d57600080fd5b815167ffffffffffffffff811115616a6457600080fd5b8201601f81018413616a7557600080fd5b611a0c84825160208401616777565b60008551616a96818460208a01616257565b7f2f000000000000000000000000000000000000000000000000000000000000009083019081528551616ad0816001840160208a01616257565b7f2f00000000000000000000000000000000000000000000000000000000000000600192909101918201528451616b0e816002840160208901616257565b6001818301019150507f2f0000000000000000000000000000000000000000000000000000000000000060018201528351616b50816002840160208801616257565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600292909101918201526007019695505050505050565b604081526000616b9b604083018461627b565b8281036020840152600481527f2e6173740000000000000000000000000000000000000000000000000000000060208201526040810191505092915050565b7f436f756c64206e6f742066696e642041535420696e2061727469666163742000815260008251616c1281601f850160208701616257565b7f2e205365742060617374203d20747275656020696e20666f756e6472792e746f601f9390910192830152507f6d6c000000000000000000000000000000000000000000000000000000000000603f820152604101919050565b604081526000616c7f604083018461627b565b8281036020840152601181527f2e6173742e6162736f6c7574655061746800000000000000000000000000000060208201526040810191505092915050565b604081526000616cd1604083018461627b565b8281036020840152600c81527f2e6173742e6c6963656e7365000000000000000000000000000000000000000060208201526040810191505092915050565b7f2e6d657461646174612e736f75726365732e5b27000000000000000000000000815260008251616d48816014850160208701616257565b7f275d2e6b656363616b32353600000000000000000000000000000000000000006014939091019283015250602001919050565b604081526000616d8f604083018561627b565b8281036020840152611b32818561627b565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f2200000000000000000000000000000000000000000000000000000000000000815260008251616e08816001850160208701616257565b7f22000000000000000000000000000000000000000000000000000000000000006001939091019283015250600201919050565b60008251616e4e818460208701616257565b7f2f6275696c642d696e666f000000000000000000000000000000000000000000920191825250600b01919050565b7f436f756c64206e6f742066696e64206275696c642d696e666f2066696c65207781527f697468206d61746368696e6720736f7572636520636f6465206861736820666f60208201527f7220636f6e747261637420000000000000000000000000000000000000000000604082015260008251616f0181604b850160208701616257565b91909101604b0192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600060ff821660ff8103616f5357616f53616f0e565b60010192915050565b7f406f70656e7a657070656c696e2f646566656e6465722d6465706c6f792d636c81527f69656e742d636c69400000000000000000000000000000000000000000000000602082015260008251616fba816029850160208701616257565b9190910160290192915050565b60408152601660408201527f4f50454e5a455050454c494e5f424153485f50415448000000000000000000006060820152608060208201526000611b36608083018461627b565b60006020828403121561702057600080fd5b815167ffffffffffffffff81111561703757600080fd5b82016060818503121561704957600080fd5b61705161674e565b81518060030b811461706257600080fd5b8152602082015167ffffffffffffffff81111561707e57600080fd5b61708a868285016167e7565b602083015250604082015167ffffffffffffffff8111156170aa57600080fd5b6170b6868285016167e7565b604083015250949350505050565b7f4661696c656420746f2072756e206261736820636f6d6d616e6420776974682081527f2200000000000000000000000000000000000000000000000000000000000000602082015260008251617122816021850160208701616257565b7f222e20496620796f7520617265207573696e672057696e646f77732c2073657460219390910192830152507f20746865204f50454e5a455050454c494e5f424153485f5041544820656e766960418201527f726f6e6d656e74207661726961626c6520746f207468652066756c6c7920717560618201527f616c69666965642070617468206f66207468652062617368206578656375746160818201527f626c652e20466f72206578616d706c652c20696620796f75206172652075736960a18201527f6e672047697420666f722057696e646f77732c206164642074686520666f6c6c60c18201527f6f77696e67206c696e6520696e20746865202e656e762066696c65206f66207960e18201527f6f75722070726f6a65637420287573696e6720666f727761726420736c6173686101018201527f6573293a0a4f50454e5a455050454c494e5f424153485f504154483d22433a2f6101218201527f50726f6772616d2046696c65732f4769742f62696e2f6261736822000000000061014182015261015c01919050565b7f4661696c656420746f2066696e64206c696e652077697468207072656669782081527f270000000000000000000000000000000000000000000000000000000000000060208201526000835161730e816021850160208801616257565b7f2720696e206f75747075743a2000000000000000000000000000000000000000602191840191820152835161734b81602e840160208801616257565b01602e01949350505050565b60008251617369818460208701616257565b9190910192915050565b7f4661696c656420746f2072756e2075706772616465207361666574792076616c81527f69646174696f6e3a200000000000000000000000000000000000000000000000602082015260008251616fba816029850160208701616257565b7f55706772616465207361666574792076616c69646174696f6e206661696c656481527f3a0a00000000000000000000000000000000000000000000000000000000000060208201526000825161742f816022850160208701616257565b9190910160220192915050565b81810381811115611a1057611a10616f0e565b7f436f6e7472616374206e616d652000000000000000000000000000000000000081526000825161748781600e850160208701616257565b7f206d75737420626520696e2074686520666f726d6174204d79436f6e74726163600e9390910192830152507f742e736f6c3a4d79436f6e7472616374206f72204d79436f6e74726163742e73602e8201527f6f6c206f72206f75742f4d79436f6e74726163742e736f6c2f4d79436f6e7472604e8201527f6163742e6a736f6e000000000000000000000000000000000000000000000000606e820152607601919050565b80820180821115611a1057611a10616f0e565b7f53504458206c6963656e7365206964656e746966696572200000000000000000815260008351617578816018850160208801616257565b7f20696e200000000000000000000000000000000000000000000000000000000060189184019182015283516175b581601c840160208801616257565b7f20646f6573206e6f74206c6f6f6b206c696b65206120737570706f7274656420601c92909101918201527f6c6963656e736520666f7220626c6f636b206578706c6f726572207665726966603c8201527f69636174696f6e2e205573652074686520606c6963656e73655479706560206f605c8201527f7074696f6e20746f20737065636966792061206c6963656e736520747970652c607c8201527f206f7220736574207468652060736b69704c6963656e73655479706560206f70609c8201527f74696f6e20746f2060747275656020746f20736b69702e00000000000000000060bc82015260d301949350505050565b600082516176bb818460208701616257565b7f2000000000000000000000000000000000000000000000000000000000000000920191825250600101919050565b8082028115828204841417611a1057611a10616f0e565b6001815b600184111561773c5780850481111561772057617720616f0e565b600184161561772e57908102905b60019390931c928002617705565b935093915050565b60008261775357506001611a10565b8161776057506000611a10565b816001811461777657600281146177805761779c565b6001915050611a10565b60ff84111561779157617791616f0e565b50506001821b611a10565b5060208310610133831016604e8410600b84101617156177bf575081810a611a10565b6177cc6000198484617701565b80600019048211156177e0576177e0616f0e565b029392505050565b6000611b368383617744565b81810360008312801583831316838312821617156153f7576153f7616f0e565b7f406f70656e7a657070656c696e2f75706772616465732d636f7265400000000081526000825161784c81601c850160208701616257565b91909101601c0192915050565b6000600019820361786c5761786c616f0e565b5060010190565b60008161788257617882616f0e565b506000190190565b6000835161789c818460208801616257565b7f3a0000000000000000000000000000000000000000000000000000000000000090830190815283516178d6816001840160208801616257565b0160010194935050505056fe608060405234801561001057600080fd5b50604051610c9f380380610c9f83398101604081905261002f9161010d565b8181600361003d83826101ff565b50600461004a82826101ff565b50505050506102bd565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261007b57600080fd5b81516001600160401b0381111561009457610094610054565b604051601f8201601f19908116603f011681016001600160401b03811182821017156100c2576100c2610054565b6040528181528382016020018510156100da57600080fd5b60005b828110156100f9576020818601810151838301820152016100dd565b506000918101602001919091529392505050565b6000806040838503121561012057600080fd5b82516001600160401b0381111561013657600080fd5b6101428582860161006a565b602085015190935090506001600160401b0381111561016057600080fd5b61016c8582860161006a565b9150509250929050565b600181811c9082168061018a57607f821691505b6020821081036101aa57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156101fa57806000526020600020601f840160051c810160208510156101d75750805b601f840160051c820191505b818110156101f757600081556001016101e3565b50505b505050565b81516001600160401b0381111561021857610218610054565b61022c816102268454610176565b846101b0565b6020601f82116001811461026057600083156102485750848201515b600019600385901b1c1916600184901b1784556101f7565b600084815260208120601f198516915b828110156102905787850151825560209485019460019092019101610270565b50848210156102ae5786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b6109d3806102cc6000396000f3fe608060405234801561001057600080fd5b50600436106100be5760003560e01c806340c10f191161007657806395d89b411161005b57806395d89b4114610183578063a9059cbb1461018b578063dd62ed3e1461019e57600080fd5b806340c10f191461013857806370a082311461014d57600080fd5b806318160ddd116100a757806318160ddd1461010457806323b872dd14610116578063313ce5671461012957600080fd5b806306fdde03146100c3578063095ea7b3146100e1575b600080fd5b6100cb6101e4565b6040516100d891906107bf565b60405180910390f35b6100f46100ef366004610854565b610276565b60405190151581526020016100d8565b6002545b6040519081526020016100d8565b6100f461012436600461087e565b610290565b604051601281526020016100d8565b61014b610146366004610854565b6102b4565b005b61010861015b3660046108bb565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6100cb6102c2565b6100f4610199366004610854565b6102d1565b6101086101ac3660046108dd565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6060600380546101f390610910565b80601f016020809104026020016040519081016040528092919081815260200182805461021f90610910565b801561026c5780601f106102415761010080835404028352916020019161026c565b820191906000526020600020905b81548152906001019060200180831161024f57829003601f168201915b5050505050905090565b6000336102848185856102df565b60019150505b92915050565b60003361029e8582856102f1565b6102a98585856103c5565b506001949350505050565b6102be8282610470565b5050565b6060600480546101f390610910565b6000336102848185856103c5565b6102ec83838360016104cc565b505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146103bf57818110156103b0576040517ffb8f41b200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416600482015260248101829052604481018390526064015b60405180910390fd5b6103bf848484840360006104cc565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8316610415576040517f96c6fd1e000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff8216610465576040517fec442f05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b6102ec838383610614565b73ffffffffffffffffffffffffffffffffffffffff82166104c0576040517fec442f05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b6102be60008383610614565b73ffffffffffffffffffffffffffffffffffffffff841661051c576040517fe602df05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff831661056c576040517f94280d62000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260016020908152604080832093871683529290522082905580156103bf578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161060691815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff831661064c5780600260008282546106419190610963565b909155506106fe9050565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260208190526040902054818110156106d2576040517fe450d38c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8516600482015260248101829052604481018390526064016103a7565b73ffffffffffffffffffffffffffffffffffffffff841660009081526020819052604090209082900390555b73ffffffffffffffffffffffffffffffffffffffff821661072757600280548290039055610753565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090208054820190555b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516107b291815260200190565b60405180910390a3505050565b602081526000825180602084015260005b818110156107ed57602081860181015160408684010152016107d0565b5060006040828501015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011684010191505092915050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461084f57600080fd5b919050565b6000806040838503121561086757600080fd5b6108708361082b565b946020939093013593505050565b60008060006060848603121561089357600080fd5b61089c8461082b565b92506108aa6020850161082b565b929592945050506040919091013590565b6000602082840312156108cd57600080fd5b6108d68261082b565b9392505050565b600080604083850312156108f057600080fd5b6108f98361082b565b91506109076020840161082b565b90509250929050565b600181811c9082168061092457607f821691505b60208210810361095d577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b8082018082111561028a577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea26469706673582212207e804ca539d49155d2b6bc19268ce22f9f857027c75247d69fb0d56a089c93d464736f6c634300081a003360a060405234801561001057600080fd5b5060405161140b38038061140b83398101604081905261002f916101b3565b60016000556002805460ff191690556001600160a01b038316158061005b57506001600160a01b038216155b8061006d57506001600160a01b038116155b1561008b5760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b0383166080526100a3600082610102565b506100ce7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a82610102565b506100f97f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e483610102565b505050506101f6565b60008281526001602090815260408083206001600160a01b038516845290915281205460ff1661018d5760008381526001602081815260408084206001600160a01b0387168086529252808420805460ff19169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a4506001610191565b5060005b92915050565b80516001600160a01b03811681146101ae57600080fd5b919050565b6000806000606084860312156101c857600080fd5b6101d184610197565b92506101df60208501610197565b91506101ed60408501610197565b90509250925092565b6080516111de61022d60003960008181610132015281816103c5015281816104270152818161065801526106ba01526111de6000f3fe608060405234801561001057600080fd5b50600436106101005760003560e01c80638456cb5911610097578063c8a0236211610066578063c8a0236214610276578063d547741f14610289578063d9caed121461029c578063e63ab1e9146102af57600080fd5b80638456cb59146101f957806385f438c11461020157806391d1485414610228578063a217fddf1461026e57600080fd5b80632f2ff15d116100d35780632f2ff15d146101c057806336568abe146101d35780633f4ba83a146101e65780635c975abb146101ee57600080fd5b806301ffc9a714610105578063116191b61461012d57806321fc65f214610179578063248a9ca31461018e575b600080fd5b610118610113366004610f04565b6102d6565b60405190151581526020015b60405180910390f35b6101547f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610124565b61018c610187366004610f6f565b61036f565b005b6101b261019c36600461100c565b6000908152600160208190526040909120015490565b604051908152602001610124565b61018c6101ce366004611025565b610511565b61018c6101e1366004611025565b61053d565b61018c61059b565b60025460ff16610118565b61018c6105d0565b6101b27f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b610118610236366004611025565b600091825260016020908152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b6101b2600081565b61018c610284366004610f6f565b610602565b61018c610297366004611025565b61078a565b61018c6102aa366004611051565b6107b0565b6101b27f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061036957507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b61037761087d565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e46103a1816108c0565b6103a96108ca565b6103ea73ffffffffffffffffffffffffffffffffffffffff87167f000000000000000000000000000000000000000000000000000000000000000086610909565b6040517f5131ab5900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690635131ab599061046490899089908990899089906004016110d7565b600060405180830381600087803b15801561047e57600080fd5b505af1158015610492573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167f85b5be9cf454e05e0bddf49315178102227c312078eefa3c00294fb4d912ae4e8686866040516104f793929190611134565b60405180910390a35061050a6001600055565b5050505050565b6000828152600160208190526040909120015461052d816108c0565b6105378383610996565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8116331461058c576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6105968282610a61565b505050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a6105c5816108c0565b6105cd610b20565b50565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a6105fa816108c0565b6105cd610b9d565b61060a61087d565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e4610634816108c0565b61063c6108ca565b61067d73ffffffffffffffffffffffffffffffffffffffff87167f000000000000000000000000000000000000000000000000000000000000000086610909565b6040517fb8969bd400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063b8969bd4906106f790899089908990899089906004016110d7565b600060405180830381600087803b15801561071157600080fd5b505af1158015610725573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fb9d4efa96044e5f5e03e696fa9ae2ff66911cc27e8a637c3627c75bc5b2241c88686866040516104f793929190611134565b600082815260016020819052604090912001546107a6816108c0565b6105378383610a61565b6107b861087d565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e46107e2816108c0565b6107ea6108ca565b61080b73ffffffffffffffffffffffffffffffffffffffff85168484610909565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f9b1bfa7fa9ee420a16e124f794c35ac9f90472acc99140eb2f6447c714cad8eb8460405161086a91815260200190565b60405180910390a3506105966001600055565b6002600054036108b9576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b6105cd8133610bf8565b60025460ff1615610907576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6040805173ffffffffffffffffffffffffffffffffffffffff8416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb00000000000000000000000000000000000000000000000000000000179052610596908490610c89565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff16610a5957600083815260016020818152604080842073ffffffffffffffffffffffffffffffffffffffff8716808652925280842080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a4506001610369565b506000610369565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff1615610a5957600083815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8616808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a4506001610369565b610b28610d1f565b600280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b610ba56108ca565b600280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258610b733390565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16610c85576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82166004820152602481018390526044015b60405180910390fd5b5050565b6000610cab73ffffffffffffffffffffffffffffffffffffffff841683610d5b565b90508051600014158015610cd0575080806020019051810190610cce9190611157565b155b15610596576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84166004820152602401610c7c565b60025460ff16610907576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6060610d6983836000610d70565b9392505050565b606081471015610dae576040517fcd786059000000000000000000000000000000000000000000000000000000008152306004820152602401610c7c565b6000808573ffffffffffffffffffffffffffffffffffffffff168486604051610dd79190611179565b60006040518083038185875af1925050503d8060008114610e14576040519150601f19603f3d011682016040523d82523d6000602084013e610e19565b606091505b5091509150610e29868383610e33565b9695505050505050565b606082610e4857610e4382610ec2565b610d69565b8151158015610e6c575073ffffffffffffffffffffffffffffffffffffffff84163b155b15610ebb576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85166004820152602401610c7c565b5080610d69565b805115610ed25780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060208284031215610f1657600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610d6957600080fd5b803573ffffffffffffffffffffffffffffffffffffffff81168114610f6a57600080fd5b919050565b600080600080600060808688031215610f8757600080fd5b610f9086610f46565b9450610f9e60208701610f46565b935060408601359250606086013567ffffffffffffffff811115610fc157600080fd5b8601601f81018813610fd257600080fd5b803567ffffffffffffffff811115610fe957600080fd5b886020828401011115610ffb57600080fd5b959894975092955050506020019190565b60006020828403121561101e57600080fd5b5035919050565b6000806040838503121561103857600080fd5b8235915061104860208401610f46565b90509250929050565b60008060006060848603121561106657600080fd5b61106f84610f46565b925061107d60208501610f46565b929592945050506040919091013590565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff8616815273ffffffffffffffffffffffffffffffffffffffff8516602082015283604082015260806060820152600061112960808301848661108e565b979650505050505050565b83815260406020820152600061114e60408301848661108e565b95945050505050565b60006020828403121561116957600080fd5b81518015158114610d6957600080fd5b6000825160005b8181101561119a5760208186018101518583015201611180565b50600092019182525091905056fea264697066735822122035ca457bdc8b45adde9844ff8416a0abd723c23055fd6933ddc05523b5f5b6de64736f6c634300081a003360c060405260001960035534801561001657600080fd5b506040516117f93803806117f9833981016040819052610035916101f5565b60016000819055805460ff19169055838383836001600160a01b038416158061006557506001600160a01b038316155b8061007757506001600160a01b038216155b8061008957506001600160a01b038116155b156100a75760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b03808516608052831660a0526100c5600082610129565b506100f07f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e483610129565b5061011b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a82610129565b505050505050505050610249565b60008281526002602090815260408083206001600160a01b038516845290915281205460ff166101cf5760008381526002602090815260408083206001600160a01b03861684529091529020805460ff191660011790556101873390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45060016101d3565b5060005b92915050565b80516001600160a01b03811681146101f057600080fd5b919050565b6000806000806080858703121561020b57600080fd5b610214856101d9565b9350610222602086016101d9565b9250610230604086016101d9565b915061023e606086016101d9565b905092959194509250565b60805160a0516115306102c9600039600081816102120152818161046f015281816105b1015281816106770152818161077c0152818161089e01528181610a5201528181610b9401528181610c5a0152610db10152600081816101c60152818161057b0152818161064801528181610b5e0152610c2b01526115306000f3fe608060405234801561001057600080fd5b506004361061016c5760003560e01c80635e3e9fef116100cd57806391d1485411610081578063d547741f11610066578063d547741f14610354578063d5abeb0114610367578063e63ab1e91461037057600080fd5b806391d1485414610306578063a217fddf1461034c57600080fd5b8063743e0c9b116100b2578063743e0c9b146102c45780638456cb59146102d757806385f438c1146102df57600080fd5b80635e3e9fef1461029e5780636f8b44b0146102b157600080fd5b8063248a9ca31161012457806336568abe1161010957806336568abe146102785780633f4ba83a1461028b5780635c975abb1461029357600080fd5b8063248a9ca3146102345780632f2ff15d1461026557600080fd5b8063106e629011610155578063106e6290146101ae578063116191b6146101c157806321e093b11461020d57600080fd5b806301ffc9a71461017157806302d5c89914610199575b600080fd5b61018461017f366004611262565b610397565b60405190151581526020015b60405180910390f35b6101ac6101a73660046112d4565b610430565b005b6101ac6101bc366004611366565b61073d565b6101e87f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610190565b6101e87f000000000000000000000000000000000000000000000000000000000000000081565b610257610242366004611399565b60009081526002602052604090206001015490565b604051908152602001610190565b6101ac6102733660046113b2565b61095a565b6101ac6102863660046113b2565b610985565b6101ac6109de565b60015460ff16610184565b6101ac6102ac3660046112d4565b610a13565b6101ac6102bf366004611399565b610d06565b6101ac6102d2366004611399565b610d74565b6101ac610e1e565b6102577f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b6101846103143660046113b2565b600091825260026020908152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b610257600081565b6101ac6103623660046113b2565b610e50565b61025760035481565b6102577f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061042a57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b610438610e75565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461046281610eb8565b61046a610ec2565b6003547f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156104d8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104fc91906113de565b61050690876113f7565b111561053e576040517fc30436e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f1e458bee00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116600483015260248201879052604482018490527f00000000000000000000000000000000000000000000000000000000000000001690631e458bee90606401600060405180830381600087803b1580156105f557600080fd5b505af1158015610609573d6000803e3d6000fd5b50506040517fb8969bd400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016925063b8969bd491506106a7907f0000000000000000000000000000000000000000000000000000000000000000908a908a908a908a9060040161147a565b600060405180830381600087803b1580156106c157600080fd5b505af11580156106d5573d6000803e3d6000fd5b505050508573ffffffffffffffffffffffffffffffffffffffff167fba96f26bdda53eb8c8ba39045dfb4ff39753fbc7a6edcf250a88e75e78d102fe868686604051610723939291906114d7565b60405180910390a2506107366001600055565b5050505050565b610745610e75565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461076f81610eb8565b610777610ec2565b6003547f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156107e5573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061080991906113de565b61081390856113f7565b111561084b576040517fc30436e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f1e458bee00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff858116600483015260248201859052604482018490527f00000000000000000000000000000000000000000000000000000000000000001690631e458bee90606401600060405180830381600087803b1580156108e257600080fd5b505af11580156108f6573d6000803e3d6000fd5b505050508373ffffffffffffffffffffffffffffffffffffffff167f884edad9ce6fa2440d8a54cc123490eb96d2768479d49ff9c7366125a94243648460405161094291815260200190565b60405180910390a2506109556001600055565b505050565b60008281526002602052604090206001015461097581610eb8565b61097f8383610f01565b50505050565b73ffffffffffffffffffffffffffffffffffffffff811633146109d4576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6109558282611001565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610a0881610eb8565b610a106110c0565b50565b610a1b610e75565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e4610a4581610eb8565b610a4d610ec2565b6003547f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610abb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610adf91906113de565b610ae990876113f7565b1115610b21576040517fc30436e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f1e458bee00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116600483015260248201879052604482018490527f00000000000000000000000000000000000000000000000000000000000000001690631e458bee90606401600060405180830381600087803b158015610bd857600080fd5b505af1158015610bec573d6000803e3d6000fd5b50506040517f5131ab5900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169250635131ab599150610c8a907f0000000000000000000000000000000000000000000000000000000000000000908a908a908a908a9060040161147a565b600060405180830381600087803b158015610ca457600080fd5b505af1158015610cb8573d6000803e3d6000fd5b505050508573ffffffffffffffffffffffffffffffffffffffff167f7772f56296d3a5202974a45c61c9188d844ab4d6eeb18c851e4b8d5384ca6ced868686604051610723939291906114d7565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e4610d3081610eb8565b610d38610ec2565b60038290556040518281527f7810bd47de260c3e9ee10061cf438099dd12256c79485f12f94dbccc981e806c9060200160405180910390a15050565b610d7c610ec2565b6040517f79cc6790000000000000000000000000000000000000000000000000000000008152336004820152602481018290527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16906379cc679090604401600060405180830381600087803b158015610e0a57600080fd5b505af1158015610736573d6000803e3d6000fd5b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610e4881610eb8565b610a1061113d565b600082815260026020526040902060010154610e6b81610eb8565b61097f8383611001565b600260005403610eb1576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b610a108133611196565b60015460ff1615610eff576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff16610ff957600083815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff86168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055610f973390565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a450600161042a565b50600061042a565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff1615610ff957600083815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8616808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a450600161042a565b6110c8611226565b600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b611145610ec2565b600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016811790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25833611113565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16611222576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff821660048201526024810183905260440160405180910390fd5b5050565b60015460ff16610eff576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006020828403121561127457600080fd5b81357fffffffff00000000000000000000000000000000000000000000000000000000811681146112a457600080fd5b9392505050565b803573ffffffffffffffffffffffffffffffffffffffff811681146112cf57600080fd5b919050565b6000806000806000608086880312156112ec57600080fd5b6112f5866112ab565b945060208601359350604086013567ffffffffffffffff81111561131857600080fd5b8601601f8101881361132957600080fd5b803567ffffffffffffffff81111561134057600080fd5b88602082840101111561135257600080fd5b959894975060200195606001359392505050565b60008060006060848603121561137b57600080fd5b611384846112ab565b95602085013595506040909401359392505050565b6000602082840312156113ab57600080fd5b5035919050565b600080604083850312156113c557600080fd5b823591506113d5602084016112ab565b90509250929050565b6000602082840312156113f057600080fd5b5051919050565b8082018082111561042a577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff8616815273ffffffffffffffffffffffffffffffffffffffff851660208201528360408201526080606082015260006114cc608083018486611431565b979650505050505050565b8381526040602082015260006114f1604083018486611431565b9594505050505056fea264697066735822122083f8ba25d15d0dacb4bf73d1472e680a549b02f1b26b83dcb21bfef553fb6e1d64736f6c634300081a00336080604052348015600f57600080fd5b506001600055610d3a806100246000396000f3fe6080604052600436106100635760003560e01c8063c513169111610040578063c5131691146100c1578063e04d4f97146100e1578063f05b6abf146100f457005b8063357fc5a21461006c5780636ed701691461008c5780638fcaa0b5146100a157005b3661006a57005b005b34801561007857600080fd5b5061006a6100873660046106c0565b610114565b34801561009857600080fd5b5061006a6101aa565b3480156100ad57600080fd5b5061006a6100bc3660046106fc565b6101df565b3480156100cd57600080fd5b5061006a6100dc3660046106c0565b61021e565b61006a6100ef366004610895565b6102f9565b34801561010057600080fd5b5061006a61010f366004610981565b61033d565b61011c610372565b61013e73ffffffffffffffffffffffffffffffffffffffff83163383866103b5565b604080513381526020810185905273ffffffffffffffffffffffffffffffffffffffff848116828401528316606082015290517f2b58128f24a9f59127cc5b5430d70542b22220f2d9adaa86e442b816ab98af609181900360800190a16101a56001600055565b505050565b6040513381527fbcaadb46b82a48af60b608f58959ae6b8310d1b0a0d094c2e9ec3208ed39f2a09060200160405180910390a1565b7f0d3f65f00e631663aa85c96330b5c7a83bb29af3630c0063776f985edc3037aa33838360405161021293929190610a6b565b60405180910390a15050565b610226610372565b6000610233600285610ad5565b90508060000361026f576040517f1f2a200500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61029173ffffffffffffffffffffffffffffffffffffffff84163384846103b5565b604080513381526020810183905273ffffffffffffffffffffffffffffffffffffffff858116828401528416606082015290517f2b58128f24a9f59127cc5b5430d70542b22220f2d9adaa86e442b816ab98af609181900360800190a1506101a56001600055565b7f1f1ff1f5fb41346850b2f5c04e6c767e2f1c8a525c5c0c5cdb60cdf3ca5f62fa3334858585604051610330959493929190610b7e565b60405180910390a1505050565b7f74a53cd528a921fca7dbdee62f86819051d3cc98f214951f4238e8843f20b146338484846040516103309493929190610c08565b6002600054036103ae576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b6040805173ffffffffffffffffffffffffffffffffffffffff85811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd0000000000000000000000000000000000000000000000000000000017905261044a908590610450565b50505050565b600061047273ffffffffffffffffffffffffffffffffffffffff8416836104eb565b905080516000141580156104975750808060200190518101906104959190610ccb565b155b156101a5576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff841660048201526024015b60405180910390fd5b60606104f983836000610500565b9392505050565b60608147101561053e576040517fcd7860590000000000000000000000000000000000000000000000000000000081523060048201526024016104e2565b6000808573ffffffffffffffffffffffffffffffffffffffff1684866040516105679190610ce8565b60006040518083038185875af1925050503d80600081146105a4576040519150601f19603f3d011682016040523d82523d6000602084013e6105a9565b606091505b50915091506105b98683836105c3565b9695505050505050565b6060826105d8576105d382610652565b6104f9565b81511580156105fc575073ffffffffffffffffffffffffffffffffffffffff84163b155b1561064b576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff851660048201526024016104e2565b50806104f9565b8051156106625780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50565b803573ffffffffffffffffffffffffffffffffffffffff811681146106bb57600080fd5b919050565b6000806000606084860312156106d557600080fd5b833592506106e560208501610697565b91506106f360408501610697565b90509250925092565b6000806020838503121561070f57600080fd5b823567ffffffffffffffff81111561072657600080fd5b8301601f8101851361073757600080fd5b803567ffffffffffffffff81111561074e57600080fd5b85602082840101111561076057600080fd5b6020919091019590945092505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156107e6576107e6610770565b604052919050565b600082601f8301126107ff57600080fd5b813567ffffffffffffffff81111561081957610819610770565b61084a60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8401160161079f565b81815284602083860101111561085f57600080fd5b816020850160208301376000918101602001919091529392505050565b801515811461069457600080fd5b80356106bb8161087c565b6000806000606084860312156108aa57600080fd5b833567ffffffffffffffff8111156108c157600080fd5b6108cd868287016107ee565b9350506020840135915060408401356108e58161087c565b809150509250925092565b600067ffffffffffffffff82111561090a5761090a610770565b5060051b60200190565b600082601f83011261092557600080fd5b8135610938610933826108f0565b61079f565b8082825260208201915060208360051b86010192508583111561095a57600080fd5b602085015b8381101561097757803583526020928301920161095f565b5095945050505050565b60008060006060848603121561099657600080fd5b833567ffffffffffffffff8111156109ad57600080fd5b8401601f810186136109be57600080fd5b80356109cc610933826108f0565b8082825260208201915060208360051b8501019250888311156109ee57600080fd5b602084015b83811015610a3057803567ffffffffffffffff811115610a1257600080fd5b610a218b6020838901016107ee565b845250602092830192016109f3565b509550505050602084013567ffffffffffffffff811115610a5057600080fd5b610a5c86828701610914565b9250506106f36040850161088a565b73ffffffffffffffffffffffffffffffffffffffff8416815260406020820152816040820152818360608301376000818301606090810191909152601f9092017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016010192915050565b600082610b0b577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60005b83811015610b2b578181015183820152602001610b13565b50506000910152565b60008151808452610b4c816020860160208601610b10565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b73ffffffffffffffffffffffffffffffffffffffff8616815284602082015260a060408201526000610bb360a0830186610b34565b6060830194909452509015156080909101529392505050565b600081518084526020840193506020830160005b82811015610bfe578151865260209586019590910190600101610be0565b5093949350505050565b60006080820173ffffffffffffffffffffffffffffffffffffffff871683526080602084015280865180835260a08501915060a08160051b86010192506020880160005b82811015610c9b577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60878603018452610c86858351610b34565b94506020938401939190910190600101610c4c565b505050508281036040840152610cb18186610bcc565b915050610cc2606083018415159052565b95945050505050565b600060208284031215610cdd57600080fd5b81516104f98161087c565b60008251610cfa818460208701610b10565b919091019291505056fea2646970667358221220556072e1abafc3c4063b8cce832228b4f309b93726aaa6a6dfab20cb880c6d1864736f6c634300081a0033a26469706673582212209a3f0c0681ccbd1753bd8415c2fb870de99ee8ce098f165b4f92f9ac2c9521b964736f6c634300081a0033", + ABI: "[{\"type\":\"function\",\"name\":\"IS_TEST\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeArtifacts\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedArtifacts_\",\"type\":\"string[]\",\"internalType\":\"string[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeContracts\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedContracts_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeSelectors\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedSelectors_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzSelector[]\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"selectors\",\"type\":\"bytes4[]\",\"internalType\":\"bytes4[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeSenders\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedSenders_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"failed\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"setUp\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"targetArtifactSelectors\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedArtifactSelectors_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzArtifactSelector[]\",\"components\":[{\"name\":\"artifact\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"selectors\",\"type\":\"bytes4[]\",\"internalType\":\"bytes4[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetArtifacts\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedArtifacts_\",\"type\":\"string[]\",\"internalType\":\"string[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetContracts\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedContracts_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetInterfaces\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedInterfaces_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzInterface[]\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"artifacts\",\"type\":\"string[]\",\"internalType\":\"string[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetSelectors\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedSelectors_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzSelector[]\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"selectors\",\"type\":\"bytes4[]\",\"internalType\":\"bytes4[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetSenders\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedSenders_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"testUpgradeAndForwardCallToReceivePayable\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"event\",\"name\":\"Call\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"receiver\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Deposit\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"receiver\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"asset\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Executed\",\"inputs\":[{\"name\":\"destination\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ExecutedV2\",\"inputs\":[{\"name\":\"destination\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ExecutedWithERC20\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedERC20\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"token\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"destination\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedNoParams\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedNonPayable\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"strs\",\"type\":\"string[]\",\"indexed\":false,\"internalType\":\"string[]\"},{\"name\":\"nums\",\"type\":\"uint256[]\",\"indexed\":false,\"internalType\":\"uint256[]\"},{\"name\":\"flag\",\"type\":\"bool\",\"indexed\":false,\"internalType\":\"bool\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedPayable\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"str\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"num\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"flag\",\"type\":\"bool\",\"indexed\":false,\"internalType\":\"bool\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedRevert\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Reverted\",\"inputs\":[{\"name\":\"destination\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RevertedWithERC20\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log\",\"inputs\":[{\"name\":\"\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_address\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_array\",\"inputs\":[{\"name\":\"val\",\"type\":\"uint256[]\",\"indexed\":false,\"internalType\":\"uint256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_array\",\"inputs\":[{\"name\":\"val\",\"type\":\"int256[]\",\"indexed\":false,\"internalType\":\"int256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_array\",\"inputs\":[{\"name\":\"val\",\"type\":\"address[]\",\"indexed\":false,\"internalType\":\"address[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_bytes\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_bytes32\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_int\",\"inputs\":[{\"name\":\"\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_address\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_array\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"uint256[]\",\"indexed\":false,\"internalType\":\"uint256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_array\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"int256[]\",\"indexed\":false,\"internalType\":\"int256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_array\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"address[]\",\"indexed\":false,\"internalType\":\"address[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_bytes\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_bytes32\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_decimal_int\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"},{\"name\":\"decimals\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_decimal_uint\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"decimals\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_int\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_string\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_uint\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_string\",\"inputs\":[{\"name\":\"\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_uint\",\"inputs\":[{\"name\":\"\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"logs\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"ApprovalFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ConnectorInitialized\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"CustodyInitialized\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"DepositFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ExecutionFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientERC20Amount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientETHAmount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZeroAddress\",\"inputs\":[]}]", + Bin: "0x6080604052600c8054600160ff199182168117909255601f80549091169091179055348015602c57600080fd5b5061bc7a8061003c6000396000f3fe608060405234801561001057600080fd5b50600436106100ea5760003560e01c806385226c811161008c578063b5508aa911610066578063b5508aa91461018b578063ba414fa614610193578063e20c9f71146101ab578063fa7626d4146101b357600080fd5b806385226c8114610159578063916a17c61461016e578063b0464fdc1461018357600080fd5b80633e5e3c23116100c85780633e5e3c231461012c5780633f7286f41461013457806366d9a9a01461013c5780637a380ebf1461015157600080fd5b80630a9254e4146100ef5780631ed7831c146100f95780632ade388014610117575b600080fd5b6100f76101c0565b005b610101610a85565b60405161010e919061620b565b60405180910390f35b61011f610ae7565b60405161010e91906162a7565b610101610c29565b610101610c89565b610144610ce9565b60405161010e919061640d565b6100f7610e6b565b61016161152d565b60405161010e91906164ab565b6101766115fd565b60405161010e9190616522565b6101766116f8565b6101616117f3565b61019b6118c3565b604051901515815260200161010e565b610101611997565b601f5461019b9060ff1681565b602680547fffffffffffffffffffffffff00000000000000000000000000000000000000009081163017909155602780548216611234179055602880549091166156781790556040516102129061611e565b60408082526004908201527f746573740000000000000000000000000000000000000000000000000000000060608201526080602082018190526003908201527f54544b000000000000000000000000000000000000000000000000000000000060a082015260c001604051809103906000f080158015610297573d6000803e3d6000fd5b50602480547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03929092169190911790556040516102dc9061611e565b604080825260049082018190527f7a6574610000000000000000000000000000000000000000000000000000000060608301526080602083018190528201527f5a4554410000000000000000000000000000000000000000000000000000000060a082015260c001604051809103906000f080158015610360573d6000803e3d6000fd5b50602580547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03928316908117909155604080518082018252600e81527f4761746577617945564d2e736f6c00000000000000000000000000000000000060208201526028546026549251908516602482015260448101939093529216606482015261044f919060840160408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fc0c53b8b000000000000000000000000000000000000000000000000000000001790526119f7565b601f80547fffffffffffffffffffffff0000000000000000000000000000000000000000ff166101006001600160a01b0393841681029190911791829055602080549190920483167fffffffffffffffffffffffff000000000000000000000000000000000000000090911681179091556028546026546040519293918216929116906104db9061612b565b6001600160a01b03938416815291831660208301529091166040820152606001604051809103906000f080158015610517573d6000803e3d6000fd5b50602280547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03928316179055602054602554602854602654604051938516949283169391831692169061057290616138565b6001600160a01b039485168152928416602084015290831660408301529091166060820152608001604051809103906000f0801580156105b6573d6000803e3d6000fd5b50602380547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03929092169190911790556040516105fb90616145565b604051809103906000f080158015610617573d6000803e3d6000fd5b50602180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039283161790556028546040517fc88a5e6d00000000000000000000000000000000000000000000000000000000815291166004820152670de0b6b3a76400006024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c88a5e6d90604401600060405180830381600087803b1580156106c357600080fd5b505af11580156106d7573d6000803e3d6000fd5b50506026546040517f06447d560000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506306447d569150602401600060405180830381600087803b15801561074d57600080fd5b505af1158015610761573d6000803e3d6000fd5b50506020546022546040517fae7a3a6f0000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201529116925063ae7a3a6f9150602401600060405180830381600087803b1580156107c757600080fd5b505af11580156107db573d6000803e3d6000fd5b50506020546023546040517f10188aef0000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152911692506310188aef9150602401600060405180830381600087803b15801561084157600080fd5b505af1158015610855573d6000803e3d6000fd5b505050507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b03166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156108b757600080fd5b505af11580156108cb573d6000803e3d6000fd5b5050602480546026546040517f40c10f190000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620f4240938101939093521692506340c10f199150604401600060405180830381600087803b15801561093c57600080fd5b505af1158015610950573d6000803e3d6000fd5b5050602480546022546040517fa9059cbb0000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201526207a1209381019390935216925063a9059cbb91506044016020604051808303816000875af11580156109c6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109ea91906165b9565b506028546040517fc88a5e6d0000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152670de0b6b3a76400006024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c88a5e6d90604401600060405180830381600087803b158015610a6b57600080fd5b505af1158015610a7f573d6000803e3d6000fd5b50505050565b60606016805480602002602001604051908101604052809291908181526020018280548015610add57602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610abf575b5050505050905090565b6060601e805480602002602001604051908101604052809291908181526020016000905b82821015610c2057600084815260208082206040805180820182526002870290920180546001600160a01b03168352600181018054835181870281018701909452808452939591948681019491929084015b82821015610c09578382906000526020600020018054610b7c906165db565b80601f0160208091040260200160405190810160405280929190818152602001828054610ba8906165db565b8015610bf55780601f10610bca57610100808354040283529160200191610bf5565b820191906000526020600020905b815481529060010190602001808311610bd857829003601f168201915b505050505081526020019060010190610b5d565b505050508152505081526020019060010190610b0b565b50505050905090565b60606018805480602002602001604051908101604052809291908181526020018280548015610add576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311610abf575050505050905090565b60606017805480602002602001604051908101604052809291908181526020018280548015610add576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311610abf575050505050905090565b6060601b805480602002602001604051908101604052809291908181526020016000905b82821015610c205783829060005260206000209060020201604051806040016040529081600082018054610d40906165db565b80601f0160208091040260200160405190810160405280929190818152602001828054610d6c906165db565b8015610db95780601f10610d8e57610100808354040283529160200191610db9565b820191906000526020600020905b815481529060010190602001808311610d9c57829003601f168201915b5050505050815260200160018201805480602002602001604051908101604052809291908181526020018280548015610e5357602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019060040190602082600301049283019260010382029150808411610e005790505b50505050508152505081526020019060010190610d0d565b60208054604080517fdda79b7500000000000000000000000000000000000000000000000000000000815290516000936001600160a01b039093169263dda79b7592600480820193918290030181865afa158015610ecd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ef19190616628565b60208054604080517f5b11259100000000000000000000000000000000000000000000000000000000815290519394506000936001600160a01b0390921692635b112591926004808401938290030181865afa158015610f55573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f799190616628565b604080518082018252600f81527f48656c6c6f2c20466f756e647279210000000000000000000000000000000000602080830191909152601f5483518085018552601981527f4761746577617945564d55706772616465546573742e736f6c00000000000000818401528451928301909452600082526026549495509193602a93600193670de0b6b3a764000093611023936001600160a01b036101009093048316939216611a16565b600084848460405160240161103a93929190616651565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe04d4f9700000000000000000000000000000000000000000000000000000000179052601f5460215491517ff30c7ba30000000000000000000000000000000000000000000000000000000081529293506001600160a01b03610100909104811692737109709ecfa91a80626ff3989d68f67f5b1dd12d9263f30c7ba392611100929116908790879060040161667b565b600060405180830381600087803b15801561111a57600080fd5b505af115801561112e573d6000803e3d6000fd5b50506021546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b1580156111c057600080fd5b505af11580156111d4573d6000803e3d6000fd5b50506020546040517f1f1ff1f5fb41346850b2f5c04e6c767e2f1c8a525c5c0c5cdb60cdf3ca5f62fa935061121d92506001600160a01b039091169086908a908a908a906166a3565b60405180910390a16020546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b1580156112b357600080fd5b505af11580156112c7573d6000803e3d6000fd5b50506021546040516001600160a01b0390911692507f373df382b9c587826f3de13f16d67f8d99f28ee947fc0924c6ef2d6d2c7e8546915061130c90869086906166e4565b60405180910390a26028546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561138657600080fd5b505af115801561139a573d6000803e3d6000fd5b50506021546040517f1cff79cd0000000000000000000000000000000000000000000000000000000081526001600160a01b038086169450631cff79cd935087926113ec9291169087906004016166fd565b60006040518083038185885af115801561140a573d6000803e3d6000fd5b50505050506040513d6000823e601f3d908101601f191682016040526114339190810190616807565b5060208054604080517fdda79b7500000000000000000000000000000000000000000000000000000000815290516114c0938c936001600160a01b03169263dda79b7592600480830193928290030181865afa158015611497573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114bb9190616628565b611a32565b60208054604080517f5b1125910000000000000000000000000000000000000000000000000000000081529051611523938b936001600160a01b031692635b11259192600480830193928290030181865afa158015611497573d6000803e3d6000fd5b5050505050505050565b6060601a805480602002602001604051908101604052809291908181526020016000905b82821015610c20578382906000526020600020018054611570906165db565b80601f016020809104026020016040519081016040528092919081815260200182805461159c906165db565b80156115e95780601f106115be576101008083540402835291602001916115e9565b820191906000526020600020905b8154815290600101906020018083116115cc57829003601f168201915b505050505081526020019060010190611551565b6060601d805480602002602001604051908101604052809291908181526020016000905b82821015610c205760008481526020908190206040805180820182526002860290920180546001600160a01b031683526001810180548351818702810187019094528084529394919385830193928301828280156116e057602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168152602001906004019060208260030104928301926001038202915080841161168d5790505b50505050508152505081526020019060010190611621565b6060601c805480602002602001604051908101604052809291908181526020016000905b82821015610c205760008481526020908190206040805180820182526002860290920180546001600160a01b031683526001810180548351818702810187019094528084529394919385830193928301828280156117db57602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190600401906020826003010492830192600103820291508084116117885790505b5050505050815250508152602001906001019061171c565b60606019805480602002602001604051908101604052809291908181526020016000905b82821015610c20578382906000526020600020018054611836906165db565b80601f0160208091040260200160405190810160405280929190818152602001828054611862906165db565b80156118af5780601f10611884576101008083540402835291602001916118af565b820191906000526020600020905b81548152906001019060200180831161189257829003601f168201915b505050505081526020019060010190611817565b60085460009060ff16156118db575060085460ff1690565b6040517f667f9d70000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d600482018190527f6661696c65640000000000000000000000000000000000000000000000000000602483015260009163667f9d7090604401602060405180830381865afa15801561196c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611990919061683c565b1415905090565b60606015805480602002602001604051908101604052809291908181526020018280548015610add576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311610abf575050505050905090565b6000611a01616152565b611a0c848483611ac2565b9150505b92915050565b611a1e616152565b611a2b8585858486611b3d565b5050505050565b6040517f515361f60000000000000000000000000000000000000000000000000000000081526001600160a01b03808416600483015282166024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063515361f69060440160006040518083038186803b158015611aa657600080fd5b505afa158015611aba573d6000803e3d6000fd5b505050505050565b600080611acf8584611c3e565b9050611b326040518060400160405280601d81526020017f4552433139363750726f78792e736f6c3a4552433139363750726f78790000008152508286604051602001611b1d9291906166fd565b60405160208183030381529060405285611c4a565b9150505b9392505050565b6040517f06447d560000000000000000000000000000000000000000000000000000000081526001600160a01b03821660048201528190737109709ecfa91a80626ff3989d68f67f5b1dd12d9081906306447d5690602401600060405180830381600087803b158015611baf57600080fd5b505af1925050508015611bc0575060015b611bd557611bd087878787611c78565b611c35565b611be187878787611c78565b806001600160a01b03166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015611c1c57600080fd5b505af1158015611c30573d6000803e3d6000fd5b505050505b50505050505050565b6000611b368383611c91565b60c08101515160009015611c6e57611c6784848460c00151611cac565b9050611b36565b611c678484611e52565b6000611c848483611f3d565b9050611a2b858285611f49565b6000611c9d8383612313565b611b3683836020015184611c4a565b600080611cb7612323565b90506000611cc586836123f6565b90506000611cdc826060015183602001518561289c565b90506000611cec83838989612aae565b90506000611cf98261392b565b602081015181519192509060030b15611d6c57898260400151604051602001611d23929190616855565b60408051601f19818403018152908290527f08c379a0000000000000000000000000000000000000000000000000000000008252611d63916004016168d6565b60405180910390fd5b6000611daf6040518060400160405280601581526020017f4465706c6f79656420746f20616464726573733a200000000000000000000000815250836001613afa565b6040517fc6ce059d000000000000000000000000000000000000000000000000000000008152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c6ce059d90611e029084906004016168d6565b602060405180830381865afa158015611e1f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e439190616628565b9b9a5050505050505050505050565b6040517f8d1cc9250000000000000000000000000000000000000000000000000000000081526000908190737109709ecfa91a80626ff3989d68f67f5b1dd12d90638d1cc92590611ea79087906004016168d6565b600060405180830381865afa158015611ec4573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611eec9190810190616807565b90506000611f1a8285604051602001611f069291906168e9565b604051602081830303815290604052613cfa565b90506001600160a01b038116611a0c578484604051602001611d23929190616918565b6000611c9d8383613d0d565b6040517f667f9d700000000000000000000000000000000000000000000000000000000081526001600160a01b03841660048201527fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61036024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d90600090829063667f9d7090604401602060405180830381865afa158015611fe5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612009919061683c565b9050806121b057600061201b86613d19565b604080518082018252600581527f352e302e30000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201529091506120a6905b60408051808201825260008082526020918201528151808301909252845182528085019082015290613e06565b806120b2575060008451115b15612135576040517f4f1ef2860000000000000000000000000000000000000000000000000000000081526001600160a01b03871690634f1ef286906120fe90889088906004016166fd565b600060405180830381600087803b15801561211857600080fd5b505af115801561212c573d6000803e3d6000fd5b505050506121aa565b6040517f3659cfe60000000000000000000000000000000000000000000000000000000081526001600160a01b038681166004830152871690633659cfe690602401600060405180830381600087803b15801561219157600080fd5b505af11580156121a5573d6000803e3d6000fd5b505050505b50611a2b565b8060006121bc82613d19565b604080518082018252600581527f352e302e300000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015290915061221e90612079565b8061222a575060008551115b156122af576040517f9623609d0000000000000000000000000000000000000000000000000000000081526001600160a01b03831690639623609d90612278908a908a908a906004016169c3565b600060405180830381600087803b15801561229257600080fd5b505af11580156122a6573d6000803e3d6000fd5b50505050611c35565b6040517f99a88ec40000000000000000000000000000000000000000000000000000000081526001600160a01b03888116600483015287811660248301528316906399a88ec490604401600060405180830381600087803b158015611c1c57600080fd5b61231f82826000613e1a565b5050565b604080518082018252600381527f6f75740000000000000000000000000000000000000000000000000000000000602082015290517fd145736c000000000000000000000000000000000000000000000000000000008152606091737109709ecfa91a80626ff3989d68f67f5b1dd12d91829063d145736c906123aa9084906004016169f4565b600060405180830381865afa1580156123c7573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526123ef9190810190616a3b565b9250505090565b6124286040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b6000737109709ecfa91a80626ff3989d68f67f5b1dd12d90506124736040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b61247c85613f1d565b6020820152600061248c86614302565b90506000836001600160a01b031663d930a0e66040518163ffffffff1660e01b8152600401600060405180830381865afa1580156124ce573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526124f69190810190616a3b565b868385602001516040516020016125109493929190616a84565b60408051601f19818403018152908290527f60f9bb1100000000000000000000000000000000000000000000000000000000825291506000906001600160a01b038616906360f9bb11906125689085906004016168d6565b600060405180830381865afa158015612585573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526125ad9190810190616a3b565b6040517fdb4235f60000000000000000000000000000000000000000000000000000000081529091506001600160a01b0386169063db4235f6906125f5908490600401616b88565b602060405180830381865afa158015612612573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061263691906165b9565b61264b5781604051602001611d239190616bda565b6040517f49c4fac80000000000000000000000000000000000000000000000000000000081526001600160a01b038616906349c4fac890612690908490600401616c6c565b600060405180830381865afa1580156126ad573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526126d59190810190616a3b565b84526040517fdb4235f60000000000000000000000000000000000000000000000000000000081526001600160a01b0386169063db4235f69061271c908490600401616cbe565b602060405180830381865afa158015612739573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061275d91906165b9565b156127f2576040517f49c4fac80000000000000000000000000000000000000000000000000000000081526001600160a01b038616906349c4fac8906127a7908490600401616cbe565b600060405180830381865afa1580156127c4573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526127ec9190810190616a3b565b60408501525b846001600160a01b03166349c4fac88286600001516040516020016128179190616d10565b6040516020818303038152906040526040518363ffffffff1660e01b8152600401612843929190616d7c565b600060405180830381865afa158015612860573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526128889190810190616a3b565b606085015250608083015250949350505050565b60408051600480825260a0820190925260609160009190816020015b60608152602001906001900390816128b85790505090506040518060400160405280600481526020017f67726570000000000000000000000000000000000000000000000000000000008152508160008151811061291857612918616da1565b60200260200101819052506040518060400160405280600381526020017f2d726c00000000000000000000000000000000000000000000000000000000008152508160018151811061296c5761296c616da1565b6020026020010181905250846040516020016129889190616dd0565b604051602081830303815290604052816002815181106129aa576129aa616da1565b6020026020010181905250826040516020016129c69190616e3c565b604051602081830303815290604052816003815181106129e8576129e8616da1565b602002602001018190525060006129fe8261392b565b602080820151604080518082018252600581527f2e6a736f6e0000000000000000000000000000000000000000000000000000008185019081528251808401845260008082529086015282518084019093529051825292810192909252919250612a8f9060408051808201825260008082526020918201528151808301909252845182528085019082015290614585565b612aa45785604051602001611d239190616e7d565b9695505050505050565b60a0810151604080518082018252600080825260209182015281518083019092528251808352928101910152606090737109709ecfa91a80626ff3989d68f67f5b1dd12d9015612afe565b511590565b612c7257826020015115612bba576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605860248201527f54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f742060448201527f62652075736564207768656e207468652060736b6970566572696679536f757260648201527f6365436f646560206f7074696f6e206973206074727565600000000000000000608482015260a401611d63565b8260c0015115612c72576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605360248201527f54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f742060448201527f62652075736564207768656e207468652060736b69704c6963656e736554797060648201527f6560206f7074696f6e2069732060747275656000000000000000000000000000608482015260a401611d63565b6040805160ff8082526120008201909252600091816020015b6060815260200190600190039081612c8b57905050905060006040518060400160405280600381526020017f6e70780000000000000000000000000000000000000000000000000000000000815250828280612ce690616f3d565b935060ff1681518110612cfb57612cfb616da1565b60200260200101819052506040518060400160405280600d81526020017f302e302e312d616c7068612e3700000000000000000000000000000000000000815250604051602001612d4c9190616f5c565b604051602081830303815290604052828280612d6790616f3d565b935060ff1681518110612d7c57612d7c616da1565b60200260200101819052506040518060400160405280600681526020017f6465706c6f790000000000000000000000000000000000000000000000000000815250828280612dc990616f3d565b935060ff1681518110612dde57612dde616da1565b60200260200101819052506040518060400160405280600e81526020017f2d2d636f6e74726163744e616d65000000000000000000000000000000000000815250828280612e2b90616f3d565b935060ff1681518110612e4057612e40616da1565b60200260200101819052508760200151828280612e5c90616f3d565b935060ff1681518110612e7157612e71616da1565b60200260200101819052506040518060400160405280600e81526020017f2d2d636f6e747261637450617468000000000000000000000000000000000000815250828280612ebe90616f3d565b935060ff1681518110612ed357612ed3616da1565b602090810291909101015287518282612eeb81616f3d565b935060ff1681518110612f0057612f00616da1565b60200260200101819052506040518060400160405280600981526020017f2d2d636861696e49640000000000000000000000000000000000000000000000815250828280612f4d90616f3d565b935060ff1681518110612f6257612f62616da1565b6020026020010181905250612f76466145e6565b8282612f8181616f3d565b935060ff1681518110612f9657612f96616da1565b60200260200101819052506040518060400160405280600f81526020017f2d2d6275696c64496e666f46696c650000000000000000000000000000000000815250828280612fe390616f3d565b935060ff1681518110612ff857612ff8616da1565b60200260200101819052508682828061301090616f3d565b935060ff168151811061302557613025616da1565b602090810291909101015285511561314c5760408051808201909152601581527f2d2d636f6e7374727563746f7242797465636f646500000000000000000000006020820152828261307681616f3d565b935060ff168151811061308b5761308b616da1565b60209081029190910101526040517f71aad10d0000000000000000000000000000000000000000000000000000000081526001600160a01b038416906371aad10d906130db9089906004016168d6565b600060405180830381865afa1580156130f8573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526131209190810190616a3b565b828261312b81616f3d565b935060ff168151811061314057613140616da1565b60200260200101819052505b84602001511561321c5760408051808201909152601281527f2d2d766572696679536f75726365436f646500000000000000000000000000006020820152828261319581616f3d565b935060ff16815181106131aa576131aa616da1565b60200260200101819052506040518060400160405280600581526020017f66616c73650000000000000000000000000000000000000000000000000000008152508282806131f790616f3d565b935060ff168151811061320c5761320c616da1565b60200260200101819052506133e3565b613254612af98660a0015160408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6132e75760408051808201909152600d81527f2d2d6c6963656e736554797065000000000000000000000000000000000000006020820152828261329781616f3d565b935060ff16815181106132ac576132ac616da1565b60200260200101819052508460a001516040516020016132cc9190616dd0565b6040516020818303038152906040528282806131f790616f3d565b8460c0015115801561332a57506040808901518151808301835260008082526020918201528251808401909352815183529081019082015261332890511590565b155b156133e35760408051808201909152600d81527f2d2d6c6963656e736554797065000000000000000000000000000000000000006020820152828261336e81616f3d565b935060ff168151811061338357613383616da1565b602002602001018190525061339788614686565b6040516020016133a79190616dd0565b6040516020818303038152906040528282806133c290616f3d565b935060ff16815181106133d7576133d7616da1565b60200260200101819052505b6040808601518151808301835260008082526020918201528251808401909352815183529081019082015261341790511590565b6134ac5760408051808201909152600b81527f2d2d72656c6179657249640000000000000000000000000000000000000000006020820152828261345a81616f3d565b935060ff168151811061346f5761346f616da1565b6020026020010181905250846040015182828061348b90616f3d565b935060ff16815181106134a0576134a0616da1565b60200260200101819052505b6060850151156135cd5760408051808201909152600681527f2d2d73616c740000000000000000000000000000000000000000000000000000602082015282826134f581616f3d565b935060ff168151811061350a5761350a616da1565b602090810291909101015260608501516040517fb11a19e800000000000000000000000000000000000000000000000000000000815260048101919091526001600160a01b0384169063b11a19e890602401600060405180830381865afa158015613579573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526135a19190810190616a3b565b82826135ac81616f3d565b935060ff16815181106135c1576135c1616da1565b60200260200101819052505b60e085015151156136745760408051808201909152600a81527f2d2d6761734c696d6974000000000000000000000000000000000000000000006020820152828261361781616f3d565b935060ff168151811061362c5761362c616da1565b60200260200101819052506136488560e00151600001516145e6565b828261365381616f3d565b935060ff168151811061366857613668616da1565b60200260200101819052505b60e0850151602001511561371e5760408051808201909152600a81527f2d2d676173507269636500000000000000000000000000000000000000000000602082015282826136c181616f3d565b935060ff16815181106136d6576136d6616da1565b60200260200101819052506136f28560e00151602001516145e6565b82826136fd81616f3d565b935060ff168151811061371257613712616da1565b60200260200101819052505b60e085015160400151156137c85760408051808201909152600e81527f2d2d6d61784665655065724761730000000000000000000000000000000000006020820152828261376b81616f3d565b935060ff168151811061378057613780616da1565b602002602001018190525061379c8560e00151604001516145e6565b82826137a781616f3d565b935060ff16815181106137bc576137bc616da1565b60200260200101819052505b60e085015160600151156138725760408051808201909152601681527f2d2d6d61785072696f72697479466565506572476173000000000000000000006020820152828261381581616f3d565b935060ff168151811061382a5761382a616da1565b60200260200101819052506138468560e00151606001516145e6565b828261385181616f3d565b935060ff168151811061386657613866616da1565b60200260200101819052505b60008160ff1667ffffffffffffffff8111156138905761389061671f565b6040519080825280602002602001820160405280156138c357816020015b60608152602001906001900390816138ae5790505b50905060005b8260ff168160ff16101561391c57838160ff16815181106138ec576138ec616da1565b6020026020010151828260ff168151811061390957613909616da1565b60209081029190910101526001016138c9565b5093505050505b949350505050565b6139526040518060600160405280600060030b815260200160608152602001606081525090565b60408051808201825260048082527f6261736800000000000000000000000000000000000000000000000000000000602083015291517fd145736c000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d92600091849163d145736c916139d891869101616fc7565b600060405180830381865afa1580156139f5573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052613a1d9190810190616a3b565b90506000613a2b8683615175565b90506000846001600160a01b031663f45c1ce7836040518263ffffffff1660e01b8152600401613a5b91906164ab565b6000604051808303816000875af1158015613a7a573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052613aa2919081019061700e565b805190915060030b15801590613abb5750602081015151155b8015613aca5750604081015151155b15612aa45781600081518110613ae257613ae2616da1565b6020026020010151604051602001611d2391906170c4565b60606000613b2f8560408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600080825260209182015281518083019092528651825280870190820152909150613b669082905b906152ca565b15613cc3576000613be382613bdd84613bd7613ba98a60408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6040805180820182526000808252602091820152815180830190925282518252918201519181019190915290565b906152f1565b90615353565b604080518082018252600181527f0a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152909150613c479082906152ca565b15613cb157604080518082018252600181527f0a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152613cae905b82906153d8565b90505b613cba816153fe565b92505050611b36565b8215613cdc578484604051602001611d239291906172b0565b5050604080516020810190915260008152611b36565b509392505050565b6000808251602084016000f09392505050565b61231f82826001613e1a565b60408051600481526024810182526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fad3cb1cc00000000000000000000000000000000000000000000000000000000179052905160609160009182916001600160a01b03861691613d8e9190617357565b6000604051808303816000865af19150503d8060008114613dcb576040519150601f19603f3d011682016040523d82523d6000602084013e613dd0565b606091505b50915091508115613def57808060200190518101906139239190616a3b565b505060408051602081019091526000815292915050565b6000613e128383615467565b159392505050565b8160a0015115613e2957505050565b6000613e36848484615542565b90506000613e438261392b565b602081015181519192509060030b158015613edf5750604080518082018252600781527f535543434553530000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152613edf90604080518082018252600080825260209182015281518083019092528451825280850190820152613b60565b15613eec57505050505050565b60408201515115613f0c578160400151604051602001611d239190617373565b80604051602001611d2391906173d1565b60606000613f528360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600481527f2e736f6c0000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152909150613fb7905b8290614585565b1561402657604080518082018252600481527f2e736f6c0000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152611b3690614021908390615add565b6153fe565b604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152614088905b8290615b67565b60010361415557604080518082018252600181527f3a00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526140ee90613ca7565b50604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152611b3690614021905b83906153d8565b604080518082018252600581527f2e6a736f6e000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526141b490613fb0565b156142eb57604080518082018252600181527f2f0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082018190528451808601909552925184528301529061421c908390615c01565b90506000816001835161422f919061743c565b8151811061423f5761423f616da1565b602002602001015190506142e26140216142b56040518060400160405280600581526020017f2e6a736f6e00000000000000000000000000000000000000000000000000000081525060408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b60408051808201825260008082526020918201528151808301909252855182528086019082015290615add565b95945050505050565b82604051602001611d23919061744f565b50919050565b606060006143378360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600481527f2e736f6c000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015290915061439990613fb0565b156143a757611b36816153fe565b604080518082018252600181527f3a000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261440690614081565b60010361447057604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152611b36906140219061414e565b604080518082018252600581527f2e6a736f6e000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526144cf90613fb0565b156142eb57604080518082018252600181527f2f00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820181905284518086019095529251845283015290614537908390615c01565b9050600181511115614573578060028251614552919061743c565b8151811061456257614562616da1565b602002602001015192505050919050565b5082604051602001611d23919061744f565b80518251600091111561459a57506000611a10565b815183516020850151600092916145b09161752d565b6145ba919061743c565b9050826020015181036145d1576001915050611a10565b82516020840151819020912014905092915050565b606060006145f383615ca6565b600101905060008167ffffffffffffffff8111156146135761461361671f565b6040519080825280601f01601f19166020018201604052801561463d576020820181803683370190505b5090508181016020015b600019017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a850494508461464757509392505050565b604081810151815180830183526000808252602091820181905283518085018552835181529282018383015283518085018552600a81527f554e4c4943454e5345440000000000000000000000000000000000000000000081840190815285518087018752838152840192909252845180860190955251845290830152606091614712905b8290613e06565b1561475257505060408051808201909152600481527f4e6f6e65000000000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600981527f556e6c6963656e73650000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526147b19061470b565b156147f157505060408051808201909152600981527f556e6c6963656e736500000000000000000000000000000000000000000000006020820152919050565b604080518082018252600381527f4d49540000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526148509061470b565b1561489057505060408051808201909152600381527f4d495400000000000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f47504c2d322e302d6f6e6c790000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526148ef9061470b565b806149545750604080518082018252601081527f47504c2d322e302d6f722d6c6174657200000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526149549061470b565b1561499457505060408051808201909152600981527f474e552047504c763200000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f47504c2d332e302d6f6e6c790000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526149f39061470b565b80614a585750604080518082018252601081527f47504c2d332e302d6f722d6c617465720000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152614a589061470b565b15614a9857505060408051808201909152600981527f474e552047504c763300000000000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4c47504c2d322e312d6f6e6c790000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152614af79061470b565b80614b5c5750604080518082018252601181527f4c47504c2d322e312d6f722d6c6174657200000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152614b5c9061470b565b15614b9c57505060408051808201909152600c81527f474e55204c47504c76322e3100000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4c47504c2d332e302d6f6e6c790000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152614bfb9061470b565b80614c605750604080518082018252601181527f4c47504c2d332e302d6f722d6c6174657200000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152614c609061470b565b15614ca057505060408051808201909152600a81527f474e55204c47504c7633000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f4253442d322d436c61757365000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152614cff9061470b565b15614d3f57505060408051808201909152600c81527f4253442d322d436c6175736500000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f4253442d332d436c61757365000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152614d9e9061470b565b15614dde57505060408051808201909152600c81527f4253442d332d436c6175736500000000000000000000000000000000000000006020820152919050565b604080518082018252600781527f4d504c2d322e300000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152614e3d9061470b565b15614e7d57505060408051808201909152600781527f4d504c2d322e30000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600781527f4f534c2d332e300000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152614edc9061470b565b15614f1c57505060408051808201909152600781527f4f534c2d332e30000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600a81527f4170616368652d322e300000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152614f7b9061470b565b15614fbb57505060408051808201909152600a81527f4170616368652d322e30000000000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4147504c2d332e302d6f6e6c79000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261501a9061470b565b8061507f5750604080518082018252601181527f4147504c2d332e302d6f722d6c617465720000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261507f9061470b565b156150bf57505060408051808201909152600a81527f474e55204147504c7633000000000000000000000000000000000000000000006020820152919050565b604080518082018252600881527f4255534c2d312e310000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261511e9061470b565b1561515e57505060408051808201909152600781527f42534c20312e31000000000000000000000000000000000000000000000000006020820152919050565b60408084015184519151611d239290602001617540565b60608060005b8451811015615200578185828151811061519757615197616da1565b60200260200101516040516020016151b09291906168e9565b6040516020818303038152906040529150600185516151cf919061743c565b81146151f857816040516020016151e691906176a9565b60405160208183030381529060405291505b60010161517b565b5060408051600380825260808201909252600091816020015b6060815260200190600190039081615219579050509050838160008151811061524457615244616da1565b60200260200101819052506040518060400160405280600281526020017f2d630000000000000000000000000000000000000000000000000000000000008152508160018151811061529857615298616da1565b602002602001018190525081816002815181106152b7576152b7616da1565b6020908102919091010152949350505050565b60208083015183518351928401516000936152e89291849190615d88565b14159392505050565b604080518082019091526000808252602082015260006153238460000151856020015185600001518660200151615e99565b9050836020015181615335919061743c565b8451859061534490839061743c565b90525060208401525090919050565b6040805180820190915260008082526020820152815183511015615378575081611a10565b602080830151908401516001911461539f5750815160208481015190840151829020919020145b80156153d0578251845185906153b690839061743c565b90525082516020850180516153cc90839061752d565b9052505b509192915050565b60408051808201909152600080825260208201526153f7838383615fb9565b5092915050565b60606000826000015167ffffffffffffffff81111561541f5761541f61671f565b6040519080825280601f01601f191660200182016040528015615449576020820181803683370190505b50905060006020820190506153f78185602001518660000151616064565b815181516000919081111561547a575081515b6020808501519084015160005b8381101561553357825182518082146155035760001960208710156154e2576001846154b489602061743c565b6154be919061752d565b6154c99060086176ea565b6154d49060026177e8565b6154de919061743c565b1990505b8181168382168181039114615500579750611a109650505050505050565b50505b61550e60208661752d565b945061551b60208561752d565b9350505060208161552c919061752d565b9050615487565b5084518651612aa491906177f4565b6060600061554e612323565b6040805160ff808252612000820190925291925060009190816020015b606081526020019060019003908161556b57905050905060006040518060400160405280600381526020017f6e707800000000000000000000000000000000000000000000000000000000008152508282806155c690616f3d565b935060ff16815181106155db576155db616da1565b60200260200101819052506040518060400160405280600781526020017f5e312e33322e330000000000000000000000000000000000000000000000000081525060405160200161562c9190617814565b60405160208183030381529060405282828061564790616f3d565b935060ff168151811061565c5761565c616da1565b60200260200101819052506040518060400160405280600881526020017f76616c69646174650000000000000000000000000000000000000000000000008152508282806156a990616f3d565b935060ff16815181106156be576156be616da1565b6020026020010181905250826040516020016156da9190616e3c565b6040516020818303038152906040528282806156f590616f3d565b935060ff168151811061570a5761570a616da1565b60200260200101819052506040518060400160405280600a81526020017f2d2d636f6e74726163740000000000000000000000000000000000000000000081525082828061575790616f3d565b935060ff168151811061576c5761576c616da1565b602002602001018190525061578187846160de565b828261578c81616f3d565b935060ff16815181106157a1576157a1616da1565b60209081029190910101528551511561584d5760408051808201909152600b81527f2d2d7265666572656e6365000000000000000000000000000000000000000000602082015282826157f381616f3d565b935060ff168151811061580857615808616da1565b60200260200101819052506158218660000151846160de565b828261582c81616f3d565b935060ff168151811061584157615841616da1565b60200260200101819052505b8560800151156158bb5760408051808201909152601881527f2d2d756e73616665536b697053746f72616765436865636b00000000000000006020820152828261589681616f3d565b935060ff16815181106158ab576158ab616da1565b6020026020010181905250615921565b84156159215760408051808201909152601281527f2d2d726571756972655265666572656e636500000000000000000000000000006020820152828261590081616f3d565b935060ff168151811061591557615915616da1565b60200260200101819052505b604086015151156159bd5760408051808201909152600d81527f2d2d756e73616665416c6c6f77000000000000000000000000000000000000006020820152828261596b81616f3d565b935060ff168151811061598057615980616da1565b6020026020010181905250856040015182828061599c90616f3d565b935060ff16815181106159b1576159b1616da1565b60200260200101819052505b856060015115615a275760408051808201909152601481527f2d2d756e73616665416c6c6f7752656e616d657300000000000000000000000060208201528282615a0681616f3d565b935060ff1681518110615a1b57615a1b616da1565b60200260200101819052505b60008160ff1667ffffffffffffffff811115615a4557615a4561671f565b604051908082528060200260200182016040528015615a7857816020015b6060815260200190600190039081615a635790505b50905060005b8260ff168160ff161015615ad157838160ff1681518110615aa157615aa1616da1565b6020026020010151828260ff1681518110615abe57615abe616da1565b6020908102919091010152600101615a7e565b50979650505050505050565b6040805180820190915260008082526020820152815183511015615b02575081611a10565b81518351602085015160009291615b189161752d565b615b22919061743c565b60208401519091506001908214615b43575082516020840151819020908220145b8015615b5e57835185518690615b5a90839061743c565b9052505b50929392505050565b6000808260000151615b8b8560000151866020015186600001518760200151615e99565b615b95919061752d565b90505b83516020850151615ba9919061752d565b81116153f75781615bb981617859565b9250508260000151615bf0856020015183615bd4919061743c565b8651615be0919061743c565b8386600001518760200151615e99565b615bfa919061752d565b9050615b98565b60606000615c0f8484615b67565b615c1a90600161752d565b67ffffffffffffffff811115615c3257615c3261671f565b604051908082528060200260200182016040528015615c6557816020015b6060815260200190600190039081615c505790505b50905060005b8151811015613cf257615c8161402186866153d8565b828281518110615c9357615c93616da1565b6020908102919091010152600101615c6b565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310615cef577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310615d1b576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc100008310615d3957662386f26fc10000830492506010015b6305f5e1008310615d51576305f5e100830492506008015b6127108310615d6557612710830492506004015b60648310615d77576064830492506002015b600a8310611a105760010192915050565b600080858411615e8f5760208411615e3b5760008415615dd3576001615daf86602061743c565b615dba9060086176ea565b615dc59060026177e8565b615dcf919061743c565b1990505b8351811685615de2898961752d565b615dec919061743c565b805190935082165b818114615e2657878411615e0e5787945050505050613923565b83615e1881617873565b945050828451169050615df4565b615e30878561752d565b945050505050613923565b838320615e48858861743c565b615e52908761752d565b91505b858210615e8d57848220808203615e7a57615e70868461752d565b9350505050613923565b615e8560018461743c565b925050615e55565b505b5092949350505050565b60008381868511615fa45760208511615f535760008515615ee5576001615ec187602061743c565b615ecc9060086176ea565b615ed79060026177e8565b615ee1919061743c565b1990505b84518116600087615ef68b8b61752d565b615f00919061743c565b855190915083165b828114615f4557818610615f2d57615f208b8b61752d565b9650505050505050613923565b85615f3781617859565b965050838651169050615f08565b859650505050505050613923565b508383206000905b615f65868961743c565b8211615fa257858320808203615f815783945050505050613923565b615f8c60018561752d565b9350508180615f9a90617859565b925050615f5b565b505b615fae878761752d565b979650505050505050565b60408051808201909152600080825260208201526000615feb8560000151866020015186600001518760200151615e99565b602080870180519186019190915251909150616007908261743c565b83528451602086015161601a919061752d565b8103616029576000855261605b565b83518351616037919061752d565b8551869061604690839061743c565b9052508351616055908261752d565b60208601525b50909392505050565b6020811061609c578151835261607b60208461752d565b925061608860208361752d565b915061609560208261743c565b9050616064565b60001981156160cb5760016160b283602061743c565b6160be906101006177e8565b6160c8919061743c565b90505b9151835183169219169190911790915250565b606060006160ec84846123f6565b80516020808301516040519394506161069390910161788a565b60405160208183030381529060405291505092915050565b610c9f806178e383390190565b61140b8061858283390190565b61155a8061998d83390190565b610d5e8061aee783390190565b6040518060e0016040528060608152602001606081526020016060815260200160001515815260200160001515815260200160001515815260200161619561619a565b905290565b604051806101000160405280600015158152602001600015158152602001606081526020016000801916815260200160608152602001606081526020016000151581526020016161956040518060800160405280600081526020016000815260200160008152602001600081525090565b602080825282518282018190526000918401906040840190835b8181101561624c5783516001600160a01b0316835260209384019390920191600101616225565b509095945050505050565b60005b8381101561627257818101518382015260200161625a565b50506000910152565b60008151808452616293816020860160208601616257565b601f01601f19169290920160200192915050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b828110156163a3577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452815180516001600160a01b03168652602090810151604082880181905281519088018190529101906060600582901b88018101919088019060005b81811015616389577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa08a850301835261637384865161627b565b6020958601959094509290920191600101616339565b5091975050506020948501949290920191506001016162cf565b50929695505050505050565b600081518084526020840193506020830160005b828110156164035781517fffffffff00000000000000000000000000000000000000000000000000000000168652602095860195909101906001016163c3565b5093949350505050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b828110156163a3577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08786030184528151805160408752616479604088018261627b565b905060208201519150868103602088015261649481836163af565b965050506020938401939190910190600101616435565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b828110156163a3577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc087860301845261650d85835161627b565b945060209384019391909101906001016164d3565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b828110156163a3577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc087860301845281516001600160a01b03815116865260208101519050604060208701526165a360408701826163af565b955050602093840193919091019060010161654a565b6000602082840312156165cb57600080fd5b81518015158114611b3657600080fd5b600181811c908216806165ef57607f821691505b6020821081036142fc577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006020828403121561663a57600080fd5b81516001600160a01b0381168114611b3657600080fd5b606081526000616664606083018661627b565b602083019490945250901515604090910152919050565b6001600160a01b03841681528260208201526060604082015260006142e2606083018461627b565b6001600160a01b038616815284602082015260a0604082015260006166cb60a083018661627b565b6060830194909452509015156080909101529392505050565b828152604060208201526000613923604083018461627b565b6001600160a01b0383168152604060208201526000613923604083018461627b565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040516060810167ffffffffffffffff811182821017156167715761677161671f565b60405290565b60008067ffffffffffffffff8411156167925761679261671f565b50604051601f19601f85018116603f0116810181811067ffffffffffffffff821117156167c1576167c161671f565b6040528381529050808284018510156167d957600080fd5b613cf2846020830185616257565b600082601f8301126167f857600080fd5b611b3683835160208501616777565b60006020828403121561681957600080fd5b815167ffffffffffffffff81111561683057600080fd5b611a0c848285016167e7565b60006020828403121561684e57600080fd5b5051919050565b7f4661696c656420746f206465706c6f7920636f6e74726163742000000000000081526000835161688d81601a850160208801616257565b7f3a20000000000000000000000000000000000000000000000000000000000000601a9184019182015283516168ca81601c840160208801616257565b01601c01949350505050565b602081526000611b36602083018461627b565b600083516168fb818460208801616257565b83519083019061690f818360208801616257565b01949350505050565b7f4661696c656420746f206465706c6f7920636f6e74726163742000000000000081526000835161695081601a850160208801616257565b7f207573696e6720636f6e7374727563746f722064617461202200000000000000601a91840191820152835161698d816033840160208801616257565b7f220000000000000000000000000000000000000000000000000000000000000060339290910191820152603401949350505050565b6001600160a01b03841681526001600160a01b03831660208201526060604082015260006142e2606083018461627b565b60408152600b60408201527f464f554e4452595f4f55540000000000000000000000000000000000000000006060820152608060208201526000611b36608083018461627b565b600060208284031215616a4d57600080fd5b815167ffffffffffffffff811115616a6457600080fd5b8201601f81018413616a7557600080fd5b611a0c84825160208401616777565b60008551616a96818460208a01616257565b7f2f000000000000000000000000000000000000000000000000000000000000009083019081528551616ad0816001840160208a01616257565b7f2f00000000000000000000000000000000000000000000000000000000000000600192909101918201528451616b0e816002840160208901616257565b6001818301019150507f2f0000000000000000000000000000000000000000000000000000000000000060018201528351616b50816002840160208801616257565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600292909101918201526007019695505050505050565b604081526000616b9b604083018461627b565b8281036020840152600481527f2e6173740000000000000000000000000000000000000000000000000000000060208201526040810191505092915050565b7f436f756c64206e6f742066696e642041535420696e2061727469666163742000815260008251616c1281601f850160208701616257565b7f2e205365742060617374203d20747275656020696e20666f756e6472792e746f601f9390910192830152507f6d6c000000000000000000000000000000000000000000000000000000000000603f820152604101919050565b604081526000616c7f604083018461627b565b8281036020840152601181527f2e6173742e6162736f6c7574655061746800000000000000000000000000000060208201526040810191505092915050565b604081526000616cd1604083018461627b565b8281036020840152600c81527f2e6173742e6c6963656e7365000000000000000000000000000000000000000060208201526040810191505092915050565b7f2e6d657461646174612e736f75726365732e5b27000000000000000000000000815260008251616d48816014850160208701616257565b7f275d2e6b656363616b32353600000000000000000000000000000000000000006014939091019283015250602001919050565b604081526000616d8f604083018561627b565b8281036020840152611b32818561627b565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f2200000000000000000000000000000000000000000000000000000000000000815260008251616e08816001850160208701616257565b7f22000000000000000000000000000000000000000000000000000000000000006001939091019283015250600201919050565b60008251616e4e818460208701616257565b7f2f6275696c642d696e666f000000000000000000000000000000000000000000920191825250600b01919050565b7f436f756c64206e6f742066696e64206275696c642d696e666f2066696c65207781527f697468206d61746368696e6720736f7572636520636f6465206861736820666f60208201527f7220636f6e747261637420000000000000000000000000000000000000000000604082015260008251616f0181604b850160208701616257565b91909101604b0192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600060ff821660ff8103616f5357616f53616f0e565b60010192915050565b7f406f70656e7a657070656c696e2f646566656e6465722d6465706c6f792d636c81527f69656e742d636c69400000000000000000000000000000000000000000000000602082015260008251616fba816029850160208701616257565b9190910160290192915050565b60408152601660408201527f4f50454e5a455050454c494e5f424153485f50415448000000000000000000006060820152608060208201526000611b36608083018461627b565b60006020828403121561702057600080fd5b815167ffffffffffffffff81111561703757600080fd5b82016060818503121561704957600080fd5b61705161674e565b81518060030b811461706257600080fd5b8152602082015167ffffffffffffffff81111561707e57600080fd5b61708a868285016167e7565b602083015250604082015167ffffffffffffffff8111156170aa57600080fd5b6170b6868285016167e7565b604083015250949350505050565b7f4661696c656420746f2072756e206261736820636f6d6d616e6420776974682081527f2200000000000000000000000000000000000000000000000000000000000000602082015260008251617122816021850160208701616257565b7f222e20496620796f7520617265207573696e672057696e646f77732c2073657460219390910192830152507f20746865204f50454e5a455050454c494e5f424153485f5041544820656e766960418201527f726f6e6d656e74207661726961626c6520746f207468652066756c6c7920717560618201527f616c69666965642070617468206f66207468652062617368206578656375746160818201527f626c652e20466f72206578616d706c652c20696620796f75206172652075736960a18201527f6e672047697420666f722057696e646f77732c206164642074686520666f6c6c60c18201527f6f77696e67206c696e6520696e20746865202e656e762066696c65206f66207960e18201527f6f75722070726f6a65637420287573696e6720666f727761726420736c6173686101018201527f6573293a0a4f50454e5a455050454c494e5f424153485f504154483d22433a2f6101218201527f50726f6772616d2046696c65732f4769742f62696e2f6261736822000000000061014182015261015c01919050565b7f4661696c656420746f2066696e64206c696e652077697468207072656669782081527f270000000000000000000000000000000000000000000000000000000000000060208201526000835161730e816021850160208801616257565b7f2720696e206f75747075743a2000000000000000000000000000000000000000602191840191820152835161734b81602e840160208801616257565b01602e01949350505050565b60008251617369818460208701616257565b9190910192915050565b7f4661696c656420746f2072756e2075706772616465207361666574792076616c81527f69646174696f6e3a200000000000000000000000000000000000000000000000602082015260008251616fba816029850160208701616257565b7f55706772616465207361666574792076616c69646174696f6e206661696c656481527f3a0a00000000000000000000000000000000000000000000000000000000000060208201526000825161742f816022850160208701616257565b9190910160220192915050565b81810381811115611a1057611a10616f0e565b7f436f6e7472616374206e616d652000000000000000000000000000000000000081526000825161748781600e850160208701616257565b7f206d75737420626520696e2074686520666f726d6174204d79436f6e74726163600e9390910192830152507f742e736f6c3a4d79436f6e7472616374206f72204d79436f6e74726163742e73602e8201527f6f6c206f72206f75742f4d79436f6e74726163742e736f6c2f4d79436f6e7472604e8201527f6163742e6a736f6e000000000000000000000000000000000000000000000000606e820152607601919050565b80820180821115611a1057611a10616f0e565b7f53504458206c6963656e7365206964656e746966696572200000000000000000815260008351617578816018850160208801616257565b7f20696e200000000000000000000000000000000000000000000000000000000060189184019182015283516175b581601c840160208801616257565b7f20646f6573206e6f74206c6f6f6b206c696b65206120737570706f7274656420601c92909101918201527f6c6963656e736520666f7220626c6f636b206578706c6f726572207665726966603c8201527f69636174696f6e2e205573652074686520606c6963656e73655479706560206f605c8201527f7074696f6e20746f20737065636966792061206c6963656e736520747970652c607c8201527f206f7220736574207468652060736b69704c6963656e73655479706560206f70609c8201527f74696f6e20746f2060747275656020746f20736b69702e00000000000000000060bc82015260d301949350505050565b600082516176bb818460208701616257565b7f2000000000000000000000000000000000000000000000000000000000000000920191825250600101919050565b8082028115828204841417611a1057611a10616f0e565b6001815b600184111561773c5780850481111561772057617720616f0e565b600184161561772e57908102905b60019390931c928002617705565b935093915050565b60008261775357506001611a10565b8161776057506000611a10565b816001811461777657600281146177805761779c565b6001915050611a10565b60ff84111561779157617791616f0e565b50506001821b611a10565b5060208310610133831016604e8410600b84101617156177bf575081810a611a10565b6177cc6000198484617701565b80600019048211156177e0576177e0616f0e565b029392505050565b6000611b368383617744565b81810360008312801583831316838312821617156153f7576153f7616f0e565b7f406f70656e7a657070656c696e2f75706772616465732d636f7265400000000081526000825161784c81601c850160208701616257565b91909101601c0192915050565b6000600019820361786c5761786c616f0e565b5060010190565b60008161788257617882616f0e565b506000190190565b6000835161789c818460208801616257565b7f3a0000000000000000000000000000000000000000000000000000000000000090830190815283516178d6816001840160208801616257565b0160010194935050505056fe608060405234801561001057600080fd5b50604051610c9f380380610c9f83398101604081905261002f9161010d565b8181600361003d83826101ff565b50600461004a82826101ff565b50505050506102bd565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261007b57600080fd5b81516001600160401b0381111561009457610094610054565b604051601f8201601f19908116603f011681016001600160401b03811182821017156100c2576100c2610054565b6040528181528382016020018510156100da57600080fd5b60005b828110156100f9576020818601810151838301820152016100dd565b506000918101602001919091529392505050565b6000806040838503121561012057600080fd5b82516001600160401b0381111561013657600080fd5b6101428582860161006a565b602085015190935090506001600160401b0381111561016057600080fd5b61016c8582860161006a565b9150509250929050565b600181811c9082168061018a57607f821691505b6020821081036101aa57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156101fa57806000526020600020601f840160051c810160208510156101d75750805b601f840160051c820191505b818110156101f757600081556001016101e3565b50505b505050565b81516001600160401b0381111561021857610218610054565b61022c816102268454610176565b846101b0565b6020601f82116001811461026057600083156102485750848201515b600019600385901b1c1916600184901b1784556101f7565b600084815260208120601f198516915b828110156102905787850151825560209485019460019092019101610270565b50848210156102ae5786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b6109d3806102cc6000396000f3fe608060405234801561001057600080fd5b50600436106100be5760003560e01c806340c10f191161007657806395d89b411161005b57806395d89b4114610183578063a9059cbb1461018b578063dd62ed3e1461019e57600080fd5b806340c10f191461013857806370a082311461014d57600080fd5b806318160ddd116100a757806318160ddd1461010457806323b872dd14610116578063313ce5671461012957600080fd5b806306fdde03146100c3578063095ea7b3146100e1575b600080fd5b6100cb6101e4565b6040516100d891906107bf565b60405180910390f35b6100f46100ef366004610854565b610276565b60405190151581526020016100d8565b6002545b6040519081526020016100d8565b6100f461012436600461087e565b610290565b604051601281526020016100d8565b61014b610146366004610854565b6102b4565b005b61010861015b3660046108bb565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6100cb6102c2565b6100f4610199366004610854565b6102d1565b6101086101ac3660046108dd565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6060600380546101f390610910565b80601f016020809104026020016040519081016040528092919081815260200182805461021f90610910565b801561026c5780601f106102415761010080835404028352916020019161026c565b820191906000526020600020905b81548152906001019060200180831161024f57829003601f168201915b5050505050905090565b6000336102848185856102df565b60019150505b92915050565b60003361029e8582856102f1565b6102a98585856103c5565b506001949350505050565b6102be8282610470565b5050565b6060600480546101f390610910565b6000336102848185856103c5565b6102ec83838360016104cc565b505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146103bf57818110156103b0576040517ffb8f41b200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416600482015260248101829052604481018390526064015b60405180910390fd5b6103bf848484840360006104cc565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8316610415576040517f96c6fd1e000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff8216610465576040517fec442f05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b6102ec838383610614565b73ffffffffffffffffffffffffffffffffffffffff82166104c0576040517fec442f05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b6102be60008383610614565b73ffffffffffffffffffffffffffffffffffffffff841661051c576040517fe602df05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff831661056c576040517f94280d62000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260016020908152604080832093871683529290522082905580156103bf578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161060691815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff831661064c5780600260008282546106419190610963565b909155506106fe9050565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260208190526040902054818110156106d2576040517fe450d38c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8516600482015260248101829052604481018390526064016103a7565b73ffffffffffffffffffffffffffffffffffffffff841660009081526020819052604090209082900390555b73ffffffffffffffffffffffffffffffffffffffff821661072757600280548290039055610753565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090208054820190555b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516107b291815260200190565b60405180910390a3505050565b602081526000825180602084015260005b818110156107ed57602081860181015160408684010152016107d0565b5060006040828501015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011684010191505092915050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461084f57600080fd5b919050565b6000806040838503121561086757600080fd5b6108708361082b565b946020939093013593505050565b60008060006060848603121561089357600080fd5b61089c8461082b565b92506108aa6020850161082b565b929592945050506040919091013590565b6000602082840312156108cd57600080fd5b6108d68261082b565b9392505050565b600080604083850312156108f057600080fd5b6108f98361082b565b91506109076020840161082b565b90509250929050565b600181811c9082168061092457607f821691505b60208210810361095d577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b8082018082111561028a577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea26469706673582212207e804ca539d49155d2b6bc19268ce22f9f857027c75247d69fb0d56a089c93d464736f6c634300081a003360a060405234801561001057600080fd5b5060405161140b38038061140b83398101604081905261002f916101b3565b60016000556002805460ff191690556001600160a01b038316158061005b57506001600160a01b038216155b8061006d57506001600160a01b038116155b1561008b5760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b0383166080526100a3600082610102565b506100ce7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a82610102565b506100f97f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e483610102565b505050506101f6565b60008281526001602090815260408083206001600160a01b038516845290915281205460ff1661018d5760008381526001602081815260408084206001600160a01b0387168086529252808420805460ff19169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a4506001610191565b5060005b92915050565b80516001600160a01b03811681146101ae57600080fd5b919050565b6000806000606084860312156101c857600080fd5b6101d184610197565b92506101df60208501610197565b91506101ed60408501610197565b90509250925092565b6080516111de61022d60003960008181610132015281816103c5015281816104270152818161065801526106ba01526111de6000f3fe608060405234801561001057600080fd5b50600436106101005760003560e01c80638456cb5911610097578063c8a0236211610066578063c8a0236214610276578063d547741f14610289578063d9caed121461029c578063e63ab1e9146102af57600080fd5b80638456cb59146101f957806385f438c11461020157806391d1485414610228578063a217fddf1461026e57600080fd5b80632f2ff15d116100d35780632f2ff15d146101c057806336568abe146101d35780633f4ba83a146101e65780635c975abb146101ee57600080fd5b806301ffc9a714610105578063116191b61461012d57806321fc65f214610179578063248a9ca31461018e575b600080fd5b610118610113366004610f04565b6102d6565b60405190151581526020015b60405180910390f35b6101547f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610124565b61018c610187366004610f6f565b61036f565b005b6101b261019c36600461100c565b6000908152600160208190526040909120015490565b604051908152602001610124565b61018c6101ce366004611025565b610511565b61018c6101e1366004611025565b61053d565b61018c61059b565b60025460ff16610118565b61018c6105d0565b6101b27f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b610118610236366004611025565b600091825260016020908152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b6101b2600081565b61018c610284366004610f6f565b610602565b61018c610297366004611025565b61078a565b61018c6102aa366004611051565b6107b0565b6101b27f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061036957507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b61037761087d565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e46103a1816108c0565b6103a96108ca565b6103ea73ffffffffffffffffffffffffffffffffffffffff87167f000000000000000000000000000000000000000000000000000000000000000086610909565b6040517f5131ab5900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690635131ab599061046490899089908990899089906004016110d7565b600060405180830381600087803b15801561047e57600080fd5b505af1158015610492573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167f85b5be9cf454e05e0bddf49315178102227c312078eefa3c00294fb4d912ae4e8686866040516104f793929190611134565b60405180910390a35061050a6001600055565b5050505050565b6000828152600160208190526040909120015461052d816108c0565b6105378383610996565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8116331461058c576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6105968282610a61565b505050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a6105c5816108c0565b6105cd610b20565b50565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a6105fa816108c0565b6105cd610b9d565b61060a61087d565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e4610634816108c0565b61063c6108ca565b61067d73ffffffffffffffffffffffffffffffffffffffff87167f000000000000000000000000000000000000000000000000000000000000000086610909565b6040517fb8969bd400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063b8969bd4906106f790899089908990899089906004016110d7565b600060405180830381600087803b15801561071157600080fd5b505af1158015610725573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fb9d4efa96044e5f5e03e696fa9ae2ff66911cc27e8a637c3627c75bc5b2241c88686866040516104f793929190611134565b600082815260016020819052604090912001546107a6816108c0565b6105378383610a61565b6107b861087d565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e46107e2816108c0565b6107ea6108ca565b61080b73ffffffffffffffffffffffffffffffffffffffff85168484610909565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f9b1bfa7fa9ee420a16e124f794c35ac9f90472acc99140eb2f6447c714cad8eb8460405161086a91815260200190565b60405180910390a3506105966001600055565b6002600054036108b9576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b6105cd8133610bf8565b60025460ff1615610907576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6040805173ffffffffffffffffffffffffffffffffffffffff8416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb00000000000000000000000000000000000000000000000000000000179052610596908490610c89565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff16610a5957600083815260016020818152604080842073ffffffffffffffffffffffffffffffffffffffff8716808652925280842080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a4506001610369565b506000610369565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff1615610a5957600083815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8616808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a4506001610369565b610b28610d1f565b600280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b610ba56108ca565b600280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258610b733390565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16610c85576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82166004820152602481018390526044015b60405180910390fd5b5050565b6000610cab73ffffffffffffffffffffffffffffffffffffffff841683610d5b565b90508051600014158015610cd0575080806020019051810190610cce9190611157565b155b15610596576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84166004820152602401610c7c565b60025460ff16610907576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6060610d6983836000610d70565b9392505050565b606081471015610dae576040517fcd786059000000000000000000000000000000000000000000000000000000008152306004820152602401610c7c565b6000808573ffffffffffffffffffffffffffffffffffffffff168486604051610dd79190611179565b60006040518083038185875af1925050503d8060008114610e14576040519150601f19603f3d011682016040523d82523d6000602084013e610e19565b606091505b5091509150610e29868383610e33565b9695505050505050565b606082610e4857610e4382610ec2565b610d69565b8151158015610e6c575073ffffffffffffffffffffffffffffffffffffffff84163b155b15610ebb576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85166004820152602401610c7c565b5080610d69565b805115610ed25780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060208284031215610f1657600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610d6957600080fd5b803573ffffffffffffffffffffffffffffffffffffffff81168114610f6a57600080fd5b919050565b600080600080600060808688031215610f8757600080fd5b610f9086610f46565b9450610f9e60208701610f46565b935060408601359250606086013567ffffffffffffffff811115610fc157600080fd5b8601601f81018813610fd257600080fd5b803567ffffffffffffffff811115610fe957600080fd5b886020828401011115610ffb57600080fd5b959894975092955050506020019190565b60006020828403121561101e57600080fd5b5035919050565b6000806040838503121561103857600080fd5b8235915061104860208401610f46565b90509250929050565b60008060006060848603121561106657600080fd5b61106f84610f46565b925061107d60208501610f46565b929592945050506040919091013590565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff8616815273ffffffffffffffffffffffffffffffffffffffff8516602082015283604082015260806060820152600061112960808301848661108e565b979650505050505050565b83815260406020820152600061114e60408301848661108e565b95945050505050565b60006020828403121561116957600080fd5b81518015158114610d6957600080fd5b6000825160005b8181101561119a5760208186018101518583015201611180565b50600092019182525091905056fea264697066735822122069d5c5c3cb2752c876b6a2138d8d9b66bac6bd1b48a1fe98417eea81faf02a3e64736f6c634300081a003360c060405260001960035534801561001657600080fd5b5060405161155a38038061155a83398101604081905261003591610220565b60016000819055805460ff19169055838383836001600160a01b038416158061006557506001600160a01b038316155b8061007757506001600160a01b038216155b8061008957506001600160a01b038116155b156100a75760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b03808516608052831660a0526100c5600082610154565b506100f07f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e483610154565b5061011b7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb83610154565b506101467f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a82610154565b505050505050505050610274565b60008281526002602090815260408083206001600160a01b038516845290915281205460ff166101fa5760008381526002602090815260408083206001600160a01b03861684529091529020805460ff191660011790556101b23390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45060016101fe565b5060005b92915050565b80516001600160a01b038116811461021b57600080fd5b919050565b6000806000806080858703121561023657600080fd5b61023f85610204565b935061024d60208601610204565b925061025b60408601610204565b915061026960608601610204565b905092959194509250565b60805160a0516112826102d86000396000818161021d01528181610531015281816108240152818161097b01528181610ad00152610bf20152600081816101d1015281816104a1015281816105040152818161079401526107f701526112826000f3fe608060405234801561001057600080fd5b50600436106101775760003560e01c80635e3e9fef116100d857806391d148541161008c578063d547741f11610066578063d547741f14610386578063d5abeb0114610399578063e63ab1e9146103a257600080fd5b806391d1485414610311578063a217fddf14610357578063a783c7891461035f57600080fd5b8063743e0c9b116100bd578063743e0c9b146102cf5780638456cb59146102e257806385f438c1146102ea57600080fd5b80635e3e9fef146102a95780636f8b44b0146102bc57600080fd5b8063248a9ca31161012f57806336568abe1161011457806336568abe146102835780633f4ba83a146102965780635c975abb1461029e57600080fd5b8063248a9ca31461023f5780632f2ff15d1461027057600080fd5b8063106e629011610160578063106e6290146101b9578063116191b6146101cc57806321e093b11461021857600080fd5b806301ffc9a71461017c57806302d5c899146101a4575b600080fd5b61018f61018a366004610fb4565b6103c9565b60405190151581526020015b60405180910390f35b6101b76101b2366004611026565b610462565b005b6101b76101c73660046110b8565b6105f7565b6101f37f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161019b565b6101f37f000000000000000000000000000000000000000000000000000000000000000081565b61026261024d3660046110eb565b60009081526002602052604090206001015490565b60405190815260200161019b565b6101b761027e366004611104565b61069c565b6101b7610291366004611104565b6106c7565b6101b7610720565b60015460ff1661018f565b6101b76102b7366004611026565b610755565b6101b76102ca3660046110eb565b6108d0565b6101b76102dd3660046110eb565b61093e565b6101b76109e8565b6102627f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b61018f61031f366004611104565b600091825260026020908152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b610262600081565b6102627f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb81565b6101b7610394366004611104565b610a1a565b61026260035481565b6102627f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061045c57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b61046a610a3f565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461049481610a82565b61049c610a8c565b6104c77f00000000000000000000000000000000000000000000000000000000000000008684610acb565b6040517fb8969bd400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063b8969bd490610561907f0000000000000000000000000000000000000000000000000000000000000000908a908a908a908a90600401611179565b600060405180830381600087803b15801561057b57600080fd5b505af115801561058f573d6000803e3d6000fd5b505050508573ffffffffffffffffffffffffffffffffffffffff167fba96f26bdda53eb8c8ba39045dfb4ff39753fbc7a6edcf250a88e75e78d102fe8686866040516105dd939291906111d6565b60405180910390a2506105f06001600055565b5050505050565b6105ff610a3f565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461062981610a82565b610631610a8c565b61063c848484610acb565b8373ffffffffffffffffffffffffffffffffffffffff167f884edad9ce6fa2440d8a54cc123490eb96d2768479d49ff9c7366125a94243648460405161068491815260200190565b60405180910390a2506106976001600055565b505050565b6000828152600260205260409020600101546106b781610a82565b6106c18383610c53565b50505050565b73ffffffffffffffffffffffffffffffffffffffff81163314610716576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6106978282610d53565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61074a81610a82565b610752610e12565b50565b61075d610a3f565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461078781610a82565b61078f610a8c565b6107ba7f00000000000000000000000000000000000000000000000000000000000000008684610acb565b6040517f5131ab5900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690635131ab5990610854907f0000000000000000000000000000000000000000000000000000000000000000908a908a908a908a90600401611179565b600060405180830381600087803b15801561086e57600080fd5b505af1158015610882573d6000803e3d6000fd5b505050508573ffffffffffffffffffffffffffffffffffffffff167f7772f56296d3a5202974a45c61c9188d844ab4d6eeb18c851e4b8d5384ca6ced8686866040516105dd939291906111d6565b7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb6108fa81610a82565b610902610a8c565b60038290556040518281527f7810bd47de260c3e9ee10061cf438099dd12256c79485f12f94dbccc981e806c9060200160405180910390a15050565b610946610a8c565b6040517f79cc6790000000000000000000000000000000000000000000000000000000008152336004820152602481018290527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16906379cc679090604401600060405180830381600087803b1580156109d457600080fd5b505af11580156105f0573d6000803e3d6000fd5b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610a1281610a82565b610752610e8f565b600082815260026020526040902060010154610a3581610a82565b6106c18383610d53565b600260005403610a7b576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b6107528133610ee8565b60015460ff1615610ac9576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6003547f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b39573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b5d91906111f9565b610b679084611212565b1115610b9f576040517fc30436e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f1e458bee00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff848116600483015260248201849052604482018390527f00000000000000000000000000000000000000000000000000000000000000001690631e458bee90606401600060405180830381600087803b158015610c3657600080fd5b505af1158015610c4a573d6000803e3d6000fd5b50505050505050565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff16610d4b57600083815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff86168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055610ce93390565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a450600161045c565b50600061045c565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff1615610d4b57600083815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8616808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a450600161045c565b610e1a610f78565b600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b610e97610a8c565b600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016811790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25833610e65565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16610f74576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff821660048201526024810183905260440160405180910390fd5b5050565b60015460ff16610ac9576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060208284031215610fc657600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610ff657600080fd5b9392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461102157600080fd5b919050565b60008060008060006080868803121561103e57600080fd5b61104786610ffd565b945060208601359350604086013567ffffffffffffffff81111561106a57600080fd5b8601601f8101881361107b57600080fd5b803567ffffffffffffffff81111561109257600080fd5b8860208284010111156110a457600080fd5b959894975060200195606001359392505050565b6000806000606084860312156110cd57600080fd5b6110d684610ffd565b95602085013595506040909401359392505050565b6000602082840312156110fd57600080fd5b5035919050565b6000806040838503121561111757600080fd5b8235915061112760208401610ffd565b90509250929050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff8616815273ffffffffffffffffffffffffffffffffffffffff851660208201528360408201526080606082015260006111cb608083018486611130565b979650505050505050565b8381526040602082015260006111f0604083018486611130565b95945050505050565b60006020828403121561120b57600080fd5b5051919050565b8082018082111561045c577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea2646970667358221220f784eb6e1655c2988d3f762737188cfee07a61da1d5b8456cc4f4e55cb339cfb64736f6c634300081a00336080604052348015600f57600080fd5b506001600055610d3a806100246000396000f3fe6080604052600436106100635760003560e01c8063c513169111610040578063c5131691146100c1578063e04d4f97146100e1578063f05b6abf146100f457005b8063357fc5a21461006c5780636ed701691461008c5780638fcaa0b5146100a157005b3661006a57005b005b34801561007857600080fd5b5061006a6100873660046106c0565b610114565b34801561009857600080fd5b5061006a6101aa565b3480156100ad57600080fd5b5061006a6100bc3660046106fc565b6101df565b3480156100cd57600080fd5b5061006a6100dc3660046106c0565b61021e565b61006a6100ef366004610895565b6102f9565b34801561010057600080fd5b5061006a61010f366004610981565b61033d565b61011c610372565b61013e73ffffffffffffffffffffffffffffffffffffffff83163383866103b5565b604080513381526020810185905273ffffffffffffffffffffffffffffffffffffffff848116828401528316606082015290517f2b58128f24a9f59127cc5b5430d70542b22220f2d9adaa86e442b816ab98af609181900360800190a16101a56001600055565b505050565b6040513381527fbcaadb46b82a48af60b608f58959ae6b8310d1b0a0d094c2e9ec3208ed39f2a09060200160405180910390a1565b7f0d3f65f00e631663aa85c96330b5c7a83bb29af3630c0063776f985edc3037aa33838360405161021293929190610a6b565b60405180910390a15050565b610226610372565b6000610233600285610ad5565b90508060000361026f576040517f1f2a200500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61029173ffffffffffffffffffffffffffffffffffffffff84163384846103b5565b604080513381526020810183905273ffffffffffffffffffffffffffffffffffffffff858116828401528416606082015290517f2b58128f24a9f59127cc5b5430d70542b22220f2d9adaa86e442b816ab98af609181900360800190a1506101a56001600055565b7f1f1ff1f5fb41346850b2f5c04e6c767e2f1c8a525c5c0c5cdb60cdf3ca5f62fa3334858585604051610330959493929190610b7e565b60405180910390a1505050565b7f74a53cd528a921fca7dbdee62f86819051d3cc98f214951f4238e8843f20b146338484846040516103309493929190610c08565b6002600054036103ae576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b6040805173ffffffffffffffffffffffffffffffffffffffff85811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd0000000000000000000000000000000000000000000000000000000017905261044a908590610450565b50505050565b600061047273ffffffffffffffffffffffffffffffffffffffff8416836104eb565b905080516000141580156104975750808060200190518101906104959190610ccb565b155b156101a5576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff841660048201526024015b60405180910390fd5b60606104f983836000610500565b9392505050565b60608147101561053e576040517fcd7860590000000000000000000000000000000000000000000000000000000081523060048201526024016104e2565b6000808573ffffffffffffffffffffffffffffffffffffffff1684866040516105679190610ce8565b60006040518083038185875af1925050503d80600081146105a4576040519150601f19603f3d011682016040523d82523d6000602084013e6105a9565b606091505b50915091506105b98683836105c3565b9695505050505050565b6060826105d8576105d382610652565b6104f9565b81511580156105fc575073ffffffffffffffffffffffffffffffffffffffff84163b155b1561064b576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff851660048201526024016104e2565b50806104f9565b8051156106625780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50565b803573ffffffffffffffffffffffffffffffffffffffff811681146106bb57600080fd5b919050565b6000806000606084860312156106d557600080fd5b833592506106e560208501610697565b91506106f360408501610697565b90509250925092565b6000806020838503121561070f57600080fd5b823567ffffffffffffffff81111561072657600080fd5b8301601f8101851361073757600080fd5b803567ffffffffffffffff81111561074e57600080fd5b85602082840101111561076057600080fd5b6020919091019590945092505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156107e6576107e6610770565b604052919050565b600082601f8301126107ff57600080fd5b813567ffffffffffffffff81111561081957610819610770565b61084a60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8401160161079f565b81815284602083860101111561085f57600080fd5b816020850160208301376000918101602001919091529392505050565b801515811461069457600080fd5b80356106bb8161087c565b6000806000606084860312156108aa57600080fd5b833567ffffffffffffffff8111156108c157600080fd5b6108cd868287016107ee565b9350506020840135915060408401356108e58161087c565b809150509250925092565b600067ffffffffffffffff82111561090a5761090a610770565b5060051b60200190565b600082601f83011261092557600080fd5b8135610938610933826108f0565b61079f565b8082825260208201915060208360051b86010192508583111561095a57600080fd5b602085015b8381101561097757803583526020928301920161095f565b5095945050505050565b60008060006060848603121561099657600080fd5b833567ffffffffffffffff8111156109ad57600080fd5b8401601f810186136109be57600080fd5b80356109cc610933826108f0565b8082825260208201915060208360051b8501019250888311156109ee57600080fd5b602084015b83811015610a3057803567ffffffffffffffff811115610a1257600080fd5b610a218b6020838901016107ee565b845250602092830192016109f3565b509550505050602084013567ffffffffffffffff811115610a5057600080fd5b610a5c86828701610914565b9250506106f36040850161088a565b73ffffffffffffffffffffffffffffffffffffffff8416815260406020820152816040820152818360608301376000818301606090810191909152601f9092017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016010192915050565b600082610b0b577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60005b83811015610b2b578181015183820152602001610b13565b50506000910152565b60008151808452610b4c816020860160208601610b10565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b73ffffffffffffffffffffffffffffffffffffffff8616815284602082015260a060408201526000610bb360a0830186610b34565b6060830194909452509015156080909101529392505050565b600081518084526020840193506020830160005b82811015610bfe578151865260209586019590910190600101610be0565b5093949350505050565b60006080820173ffffffffffffffffffffffffffffffffffffffff871683526080602084015280865180835260a08501915060a08160051b86010192506020880160005b82811015610c9b577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60878603018452610c86858351610b34565b94506020938401939190910190600101610c4c565b505050508281036040840152610cb18186610bcc565b915050610cc2606083018415159052565b95945050505050565b600060208284031215610cdd57600080fd5b81516104f98161087c565b60008251610cfa818460208701610b10565b919091019291505056fea2646970667358221220556072e1abafc3c4063b8cce832228b4f309b93726aaa6a6dfab20cb880c6d1864736f6c634300081a0033a2646970667358221220062611b442bc9d72e8be8b75abf1da729a9498e1b6fc92c104c14a987cc909d864736f6c634300081a0033", } // GatewayEVMUUPSUpgradeTestABI is the input ABI used to generate the binding from. diff --git a/v2/pkg/gatewayevmupgradetest.sol/gatewayevmupgradetest.go b/v2/pkg/gatewayevmupgradetest.sol/gatewayevmupgradetest.go index 20d8dd6c..d5a77e02 100644 --- a/v2/pkg/gatewayevmupgradetest.sol/gatewayevmupgradetest.go +++ b/v2/pkg/gatewayevmupgradetest.sol/gatewayevmupgradetest.go @@ -31,8 +31,8 @@ var ( // GatewayEVMUpgradeTestMetaData contains all meta data concerning the GatewayEVMUpgradeTest contract. var GatewayEVMUpgradeTestMetaData = &bind.MetaData{ - ABI: "[{\"type\":\"constructor\",\"inputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"ASSET_HANDLER_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"DEFAULT_ADMIN_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"PAUSER_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"TSS_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"UPGRADE_INTERFACE_VERSION\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"call\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"custody\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"deposit\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"deposit\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"depositAndCall\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"depositAndCall\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"execute\",\"inputs\":[{\"name\":\"destination\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"executeRevert\",\"inputs\":[{\"name\":\"destination\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"executeWithERC20\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"getRoleAdmin\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"grantRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"hasRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"initialize\",\"inputs\":[{\"name\":\"_tssAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_zetaToken\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_admin\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"pause\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"paused\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"proxiableUUID\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"renounceRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"callerConfirmation\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"revertWithERC20\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"revokeRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setConnector\",\"inputs\":[{\"name\":\"_zetaConnector\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setCustody\",\"inputs\":[{\"name\":\"_custody\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"supportsInterface\",\"inputs\":[{\"name\":\"interfaceId\",\"type\":\"bytes4\",\"internalType\":\"bytes4\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"tssAddress\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"unpause\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"upgradeToAndCall\",\"inputs\":[{\"name\":\"newImplementation\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"zetaConnector\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"zetaToken\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"event\",\"name\":\"Call\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"receiver\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Deposit\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"receiver\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"asset\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Executed\",\"inputs\":[{\"name\":\"destination\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ExecutedV2\",\"inputs\":[{\"name\":\"destination\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ExecutedWithERC20\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Initialized\",\"inputs\":[{\"name\":\"version\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Paused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Reverted\",\"inputs\":[{\"name\":\"destination\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RevertedWithERC20\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleAdminChanged\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"previousAdminRole\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"newAdminRole\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleGranted\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleRevoked\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Unpaused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Upgraded\",\"inputs\":[{\"name\":\"implementation\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"AccessControlBadConfirmation\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"AccessControlUnauthorizedAccount\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"neededRole\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"type\":\"error\",\"name\":\"AddressEmptyCode\",\"inputs\":[{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"AddressInsufficientBalance\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"ApprovalFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"CustodyInitialized\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"DepositFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ERC1967InvalidImplementation\",\"inputs\":[{\"name\":\"implementation\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"ERC1967NonPayable\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"EnforcedPause\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ExecutionFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ExpectedPause\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"FailedInnerCall\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientERC20Amount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientETHAmount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidInitialization\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NotInitializing\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ReentrancyGuardReentrantCall\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"SafeERC20FailedOperation\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"UUPSUnauthorizedCallContext\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"UUPSUnsupportedProxiableUUID\",\"inputs\":[{\"name\":\"slot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"type\":\"error\",\"name\":\"ZeroAddress\",\"inputs\":[]}]", - Bin: "0x60a06040523060805234801561001457600080fd5b5061001d610022565b6100d4565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100725760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146100d15780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b608051612d526100fd60003960008181611ab101528181611ada0152611f250152612d526000f3fe6080604052600436106101e35760003560e01c80635c975abb11610102578063ae7a3a6f11610095578063dda79b7511610064578063dda79b751461062e578063e63ab1e91461064e578063f340fa0114610682578063f45346dc1461069557600080fd5b8063ae7a3a6f146105ae578063b8969bd4146105ce578063c0c53b8b146105ee578063d547741f1461060e57600080fd5b806391d14854116100d157806391d14854146104b7578063a217fddf1461051c578063a783c78914610531578063ad3cb1cc1461056557600080fd5b80635c975abb146104175780635d62c8601461044e5780638456cb59146104825780638c6f037f1461049757600080fd5b806335c018db1161017a5780635131ab59116101495780635131ab59146103a257806352d1902d146103c257806357bec62f146103d75780635b112591146103f757600080fd5b806335c018db1461034757806336568abe1461035a5780633f4ba83a1461037a5780634f1ef2861461038f57600080fd5b806321e093b1116101b657806321e093b11461027f578063248a9ca3146102b757806329c59b5d146103145780632f2ff15d1461032757600080fd5b806301ffc9a7146101e857806310188aef1461021d5780631b8b921d1461023f5780631cff79cd1461025f575b600080fd5b3480156101f457600080fd5b506102086102033660046127c5565b6106b5565b60405190151581526020015b60405180910390f35b34801561022957600080fd5b5061023d610238366004612823565b61074e565b005b34801561024b57600080fd5b5061023d61025a366004612887565b610842565b61027261026d366004612887565b610894565b6040516102149190612948565b34801561028b57600080fd5b5060035461029f906001600160a01b031681565b6040516001600160a01b039091168152602001610214565b3480156102c357600080fd5b506103066102d236600461295b565b60009081527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052604090206001015490565b604051908152602001610214565b61023d610322366004612887565b61091d565b34801561033357600080fd5b5061023d610342366004612974565b610a42565b61023d610355366004612887565b610a8c565b34801561036657600080fd5b5061023d610375366004612974565b610c0b565b34801561038657600080fd5b5061023d610c5c565b61023d61039d3660046129cf565b610c91565b3480156103ae57600080fd5b5061023d6103bd366004612ad6565b610cb0565b3480156103ce57600080fd5b50610306610f85565b3480156103e357600080fd5b5060025461029f906001600160a01b031681565b34801561040357600080fd5b5060015461029f906001600160a01b031681565b34801561042357600080fd5b507fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff16610208565b34801561045a57600080fd5b506103067f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b981565b34801561048e57600080fd5b5061023d610fb4565b3480156104a357600080fd5b5061023d6104b2366004612b45565b610fe6565b3480156104c357600080fd5b506102086104d2366004612974565b60009182527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408084206001600160a01b0393909316845291905290205460ff1690565b34801561052857600080fd5b50610306600081565b34801561053d57600080fd5b506103067f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb81565b34801561057157600080fd5b506102726040518060400160405280600581526020017f352e302e3000000000000000000000000000000000000000000000000000000081525081565b3480156105ba57600080fd5b5061023d6105c9366004612823565b611083565b3480156105da57600080fd5b5061023d6105e9366004612ad6565b611177565b3480156105fa57600080fd5b5061023d610609366004612b97565b6112e9565b34801561061a57600080fd5b5061023d610629366004612974565b61159e565b34801561063a57600080fd5b5060005461029f906001600160a01b031681565b34801561065a57600080fd5b506103067f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b61023d610690366004612823565b6115e2565b3480156106a157600080fd5b5061023d6106b0366004612bda565b611707565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061074857507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b6000610759816117b2565b6002546001600160a01b03161561079c576040517fb337f37800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b0382166107dc576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6108067f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b9836117bc565b5050600280547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b826001600160a01b0316336001600160a01b03167f2a21062ee9199c2e205622999eeb7c3da73153674f36a0acd3f74fa6af67bde38484604051610887929190612c56565b60405180910390a3505050565b60607f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb6108c0816117b2565b60006108cd8686866118a9565b9050856001600160a01b03167f373df382b9c587826f3de13f16d67f8d99f28ee947fc0924c6ef2d6d2c7e854634878760405161090c93929190612c72565b60405180910390a295945050505050565b34600003610957576040517f7671265e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546040516000916001600160a01b03169034908381818185875af1925050503d80600081146109a4576040519150601f19603f3d011682016040523d82523d6000602084013e6109a9565b606091505b50909150508015156000036109ea576040517f79cacff100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b836001600160a01b0316336001600160a01b03167f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a43460008787604051610a349493929190612c8c565b60405180910390a350505050565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020526040902060010154610a7c816117b2565b610a8683836117bc565b50505050565b7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb610ab6816117b2565b600080856001600160a01b03163460405160006040518083038185875af1925050503d8060008114610b04576040519150601f19603f3d011682016040523d82523d6000602084013e610b09565b606091505b509150915081610b45576040517facfdb44400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f8fcaa0b50000000000000000000000000000000000000000000000000000000081526001600160a01b03871690638fcaa0b590610b8c9088908890600401612c56565b600060405180830381600087803b158015610ba657600080fd5b505af1158015610bba573d6000803e3d6000fd5b50505050856001600160a01b03167fd5d7616b1678354a0dea9d7e57e6a090bff5babe9f8d6381fdbad16e89ba311c348787604051610bfb93929190612c72565b60405180910390a2505050505050565b6001600160a01b0381163314610c4d576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610c578282611952565b505050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610c86816117b2565b610c8e611a16565b50565b610c99611aa6565b610ca282611b78565b610cac8282611b83565b5050565b610cb8611ca7565b7f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b9610ce2816117b2565b83600003610d1c576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610d268686611d28565b610d5c576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b0386811660048301526024820186905287169063095ea7b3906044016020604051808303816000875af1158015610dc4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610de89190612cb5565b610e1e576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610e2b8685856118a9565b9050610e378787611d28565b610e6d576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201526000906001600160a01b038916906370a0823190602401602060405180830381865afa158015610ecd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ef19190612cd7565b90508015610f0357610f038882611db8565b866001600160a01b0316886001600160a01b03167f29c40793bffd84cb810179f15d1ceec72bc7f0785514c668ba36645cf99b7382888888604051610f4a93929190612c72565b60405180910390a3505050610f7e60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b5050505050565b6000610f8f611f1a565b507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc90565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610fde816117b2565b610c8e611f7c565b83600003611020576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61102b338486611ff5565b846001600160a01b0316336001600160a01b03167f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a4868686866040516110749493929190612c8c565b60405180910390a35050505050565b600061108e816117b2565b6000546001600160a01b0316156110d1576040517fb337f37800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038216611111576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61113b7f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b9836117bc565b5050600080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b61117f611ca7565b7f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b96111a9816117b2565b836000036111e3576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6111f76001600160a01b0387168686612149565b6040517f8fcaa0b50000000000000000000000000000000000000000000000000000000081526001600160a01b03861690638fcaa0b59061123e9086908690600401612c56565b600060405180830381600087803b15801561125857600080fd5b505af115801561126c573d6000803e3d6000fd5b50505050846001600160a01b0316866001600160a01b03167f723fc7be2448075379e4fdf1e6bf5fead954d2668d2da05dcb44ccfec4beeda78686866040516112b793929190612c72565b60405180910390a350610f7e60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156113345750825b905060008267ffffffffffffffff1660011480156113515750303b155b90508115801561135f575080155b15611396576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84547fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000016600117855583156113f75784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff16680100000000000000001785555b6001600160a01b038816158061141457506001600160a01b038716155b1561144b576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6114536121bd565b61145b6121c5565b6114636121bd565b61146b6121d5565b6114766000876117bc565b506114a17f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a876117bc565b50600180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b038a161790556114ff7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb896117bc565b50600380547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03891617905583156115945784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b5050505050505050565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b62680060205260409020600101546115d8816117b2565b610a868383611952565b3460000361161c576040517f7671265e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546040516000916001600160a01b03169034908381818185875af1925050503d8060008114611669576040519150601f19603f3d011682016040523d82523d6000602084013e61166e565b606091505b50909150508015156000036116af576040517f79cacff100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60408051348152600060208201819052606082840181905282015290516001600160a01b0384169133917f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a49181900360800190a35050565b81600003611741576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61174c338284611ff5565b826001600160a01b0316336001600160a01b03167f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a484846040516108879291909182526001600160a01b0316602082015260606040820181905260009082015260800190565b610c8e81336121e5565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff1661189f576000848152602082815260408083206001600160a01b0387168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790556118553390565b6001600160a01b0316836001600160a01b0316857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a46001915050610748565b6000915050610748565b6060600080856001600160a01b03163486866040516118c9929190612cf0565b60006040518083038185875af1925050503d8060008114611906576040519150601f19603f3d011682016040523d82523d6000602084013e61190b565b606091505b509150915081611947576040517facfdb44400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b9150505b9392505050565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff161561189f576000848152602082815260408083206001600160a01b038716808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339287917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a46001915050610748565b611a1e612272565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001681557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a150565b306001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161480611b3f57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316611b337f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b6001600160a01b031614155b15611b76576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6000610cac816117b2565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015611bfb575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252611bf891810190612cd7565b60015b611c41576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b03831660048201526024015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8114611c9d576040517faa1d49a400000000000000000000000000000000000000000000000000000000815260048101829052602401611c38565b610c5783836122cd565b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0080547ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01611d22576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60029055565b6040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b038281166004830152600060248301819052919084169063095ea7b3906044016020604051808303816000875af1158015611d94573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061194b9190612cb5565b6003546001600160a01b0390811690831603611eda576002546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152602481018390529083169063095ea7b3906044016020604051808303816000875af1158015611e3a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e5e9190612cb5565b506002546040517f743e0c9b000000000000000000000000000000000000000000000000000000008152600481018390526001600160a01b039091169063743e0c9b90602401600060405180830381600087803b158015611ebe57600080fd5b505af1158015611ed2573d6000803e3d6000fd5b505050505050565b600054610cac906001600160a01b03848116911683612149565b60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614611b76576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611f84612323565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011781557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25833611a88565b6003546001600160a01b039081169083160361212d576120206001600160a01b03831684308461237f565b6002546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152602481018390529083169063095ea7b3906044016020604051808303816000875af115801561208c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120b09190612cb5565b506002546040517f743e0c9b000000000000000000000000000000000000000000000000000000008152600481018390526001600160a01b039091169063743e0c9b90602401600060405180830381600087803b15801561211057600080fd5b505af1158015612124573d6000803e3d6000fd5b50505050505050565b600054610c57906001600160a01b03848116918691168461237f565b6040516001600160a01b03838116602483015260448201839052610c5791859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506123b8565b611b76612434565b6121cd612434565b611b7661249b565b6121dd612434565b611b766124a3565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408083206001600160a01b038516845290915290205460ff16610cac576040517fe2517d3f0000000000000000000000000000000000000000000000000000000081526001600160a01b038216600482015260248101839052604401611c38565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff16611b76576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6122d6826124f4565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a280511561231b57610c57828261259c565b610cac612612565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff1615611b76576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040516001600160a01b038481166024830152838116604483015260648201839052610a869186918216906323b872dd90608401612176565b60006123cd6001600160a01b0384168361264a565b905080516000141580156123f25750808060200190518101906123f09190612cb5565b155b15610c57576040517f5274afe70000000000000000000000000000000000000000000000000000000081526001600160a01b0384166004820152602401611c38565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff16611b76576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611ef4612434565b6124ab612434565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055565b806001600160a01b03163b600003612543576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b0382166004820152602401611c38565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6060600080846001600160a01b0316846040516125b99190612d00565b600060405180830381855af49150503d80600081146125f4576040519150601f19603f3d011682016040523d82523d6000602084013e6125f9565b606091505b5091509150612609858383612658565b95945050505050565b3415611b76576040517fb398979f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606061194b838360006126cd565b60608261266d5761266882612783565b61194b565b815115801561268457506001600160a01b0384163b155b156126c6576040517f9996b3150000000000000000000000000000000000000000000000000000000081526001600160a01b0385166004820152602401611c38565b508061194b565b60608147101561270b576040517fcd786059000000000000000000000000000000000000000000000000000000008152306004820152602401611c38565b600080856001600160a01b031684866040516127279190612d00565b60006040518083038185875af1925050503d8060008114612764576040519150601f19603f3d011682016040523d82523d6000602084013e612769565b606091505b5091509150612779868383612658565b9695505050505050565b8051156127935780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000602082840312156127d757600080fd5b81357fffffffff000000000000000000000000000000000000000000000000000000008116811461194b57600080fd5b80356001600160a01b038116811461281e57600080fd5b919050565b60006020828403121561283557600080fd5b61194b82612807565b60008083601f84011261285057600080fd5b50813567ffffffffffffffff81111561286857600080fd5b60208301915083602082850101111561288057600080fd5b9250929050565b60008060006040848603121561289c57600080fd5b6128a584612807565b9250602084013567ffffffffffffffff8111156128c157600080fd5b6128cd8682870161283e565b9497909650939450505050565b60005b838110156128f55781810151838201526020016128dd565b50506000910152565b600081518084526129168160208601602086016128da565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152600061194b60208301846128fe565b60006020828403121561296d57600080fd5b5035919050565b6000806040838503121561298757600080fd5b8235915061299760208401612807565b90509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080604083850312156129e257600080fd5b6129eb83612807565b9150602083013567ffffffffffffffff811115612a0757600080fd5b8301601f81018513612a1857600080fd5b803567ffffffffffffffff811115612a3257612a326129a0565b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8501160116810181811067ffffffffffffffff82111715612a9e57612a9e6129a0565b604052818152828201602001871015612ab657600080fd5b816020840160208301376000602083830101528093505050509250929050565b600080600080600060808688031215612aee57600080fd5b612af786612807565b9450612b0560208701612807565b935060408601359250606086013567ffffffffffffffff811115612b2857600080fd5b612b348882890161283e565b969995985093965092949392505050565b600080600080600060808688031215612b5d57600080fd5b612b6686612807565b945060208601359350612b7b60408701612807565b9250606086013567ffffffffffffffff811115612b2857600080fd5b600080600060608486031215612bac57600080fd5b612bb584612807565b9250612bc360208501612807565b9150612bd160408501612807565b90509250925092565b600080600060608486031215612bef57600080fd5b612bf884612807565b925060208401359150612bd160408501612807565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b602081526000612c6a602083018486612c0d565b949350505050565b838152604060208201526000612609604083018486612c0d565b8481526001600160a01b0384166020820152606060408201526000612779606083018486612c0d565b600060208284031215612cc757600080fd5b8151801515811461194b57600080fd5b600060208284031215612ce957600080fd5b5051919050565b8183823760009101908152919050565b60008251612d128184602087016128da565b919091019291505056fea2646970667358221220f5f94badcd1bd52ad12da244f7c4f330f2fb5d16305f04303cf08087abeff75664736f6c634300081a0033", + ABI: "[{\"type\":\"constructor\",\"inputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"ASSET_HANDLER_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"DEFAULT_ADMIN_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"PAUSER_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"TSS_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"UPGRADE_INTERFACE_VERSION\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"call\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"custody\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"deposit\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"deposit\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"depositAndCall\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"depositAndCall\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"execute\",\"inputs\":[{\"name\":\"destination\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"executeRevert\",\"inputs\":[{\"name\":\"destination\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"executeWithERC20\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"getRoleAdmin\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"grantRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"hasRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"initialize\",\"inputs\":[{\"name\":\"_tssAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_zetaToken\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_admin\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"pause\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"paused\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"proxiableUUID\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"renounceRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"callerConfirmation\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"revertWithERC20\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"revokeRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setConnector\",\"inputs\":[{\"name\":\"_zetaConnector\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setCustody\",\"inputs\":[{\"name\":\"_custody\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"supportsInterface\",\"inputs\":[{\"name\":\"interfaceId\",\"type\":\"bytes4\",\"internalType\":\"bytes4\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"tssAddress\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"unpause\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"upgradeToAndCall\",\"inputs\":[{\"name\":\"newImplementation\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"zetaConnector\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"zetaToken\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"event\",\"name\":\"Call\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"receiver\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Deposit\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"receiver\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"asset\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Executed\",\"inputs\":[{\"name\":\"destination\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ExecutedV2\",\"inputs\":[{\"name\":\"destination\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ExecutedWithERC20\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Initialized\",\"inputs\":[{\"name\":\"version\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Paused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Reverted\",\"inputs\":[{\"name\":\"destination\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RevertedWithERC20\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleAdminChanged\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"previousAdminRole\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"newAdminRole\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleGranted\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleRevoked\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Unpaused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Upgraded\",\"inputs\":[{\"name\":\"implementation\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"AccessControlBadConfirmation\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"AccessControlUnauthorizedAccount\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"neededRole\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"type\":\"error\",\"name\":\"AddressEmptyCode\",\"inputs\":[{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"AddressInsufficientBalance\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"ApprovalFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ConnectorInitialized\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"CustodyInitialized\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"DepositFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ERC1967InvalidImplementation\",\"inputs\":[{\"name\":\"implementation\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"ERC1967NonPayable\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"EnforcedPause\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ExecutionFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ExpectedPause\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"FailedInnerCall\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientERC20Amount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientETHAmount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidInitialization\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NotInitializing\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ReentrancyGuardReentrantCall\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"SafeERC20FailedOperation\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"UUPSUnauthorizedCallContext\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"UUPSUnsupportedProxiableUUID\",\"inputs\":[{\"name\":\"slot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"type\":\"error\",\"name\":\"ZeroAddress\",\"inputs\":[]}]", + Bin: "0x60a06040523060805234801561001457600080fd5b5061001d610022565b6100d4565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100725760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146100d15780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b608051612d526100fd60003960008181611ab101528181611ada0152611f250152612d526000f3fe6080604052600436106101e35760003560e01c80635c975abb11610102578063ae7a3a6f11610095578063dda79b7511610064578063dda79b751461062e578063e63ab1e91461064e578063f340fa0114610682578063f45346dc1461069557600080fd5b8063ae7a3a6f146105ae578063b8969bd4146105ce578063c0c53b8b146105ee578063d547741f1461060e57600080fd5b806391d14854116100d157806391d14854146104b7578063a217fddf1461051c578063a783c78914610531578063ad3cb1cc1461056557600080fd5b80635c975abb146104175780635d62c8601461044e5780638456cb59146104825780638c6f037f1461049757600080fd5b806335c018db1161017a5780635131ab59116101495780635131ab59146103a257806352d1902d146103c257806357bec62f146103d75780635b112591146103f757600080fd5b806335c018db1461034757806336568abe1461035a5780633f4ba83a1461037a5780634f1ef2861461038f57600080fd5b806321e093b1116101b657806321e093b11461027f578063248a9ca3146102b757806329c59b5d146103145780632f2ff15d1461032757600080fd5b806301ffc9a7146101e857806310188aef1461021d5780631b8b921d1461023f5780631cff79cd1461025f575b600080fd5b3480156101f457600080fd5b506102086102033660046127c5565b6106b5565b60405190151581526020015b60405180910390f35b34801561022957600080fd5b5061023d610238366004612823565b61074e565b005b34801561024b57600080fd5b5061023d61025a366004612887565b610842565b61027261026d366004612887565b610894565b6040516102149190612948565b34801561028b57600080fd5b5060035461029f906001600160a01b031681565b6040516001600160a01b039091168152602001610214565b3480156102c357600080fd5b506103066102d236600461295b565b60009081527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052604090206001015490565b604051908152602001610214565b61023d610322366004612887565b61091d565b34801561033357600080fd5b5061023d610342366004612974565b610a42565b61023d610355366004612887565b610a8c565b34801561036657600080fd5b5061023d610375366004612974565b610c0b565b34801561038657600080fd5b5061023d610c5c565b61023d61039d3660046129cf565b610c91565b3480156103ae57600080fd5b5061023d6103bd366004612ad6565b610cb0565b3480156103ce57600080fd5b50610306610f85565b3480156103e357600080fd5b5060025461029f906001600160a01b031681565b34801561040357600080fd5b5060015461029f906001600160a01b031681565b34801561042357600080fd5b507fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff16610208565b34801561045a57600080fd5b506103067f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b981565b34801561048e57600080fd5b5061023d610fb4565b3480156104a357600080fd5b5061023d6104b2366004612b45565b610fe6565b3480156104c357600080fd5b506102086104d2366004612974565b60009182527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408084206001600160a01b0393909316845291905290205460ff1690565b34801561052857600080fd5b50610306600081565b34801561053d57600080fd5b506103067f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb81565b34801561057157600080fd5b506102726040518060400160405280600581526020017f352e302e3000000000000000000000000000000000000000000000000000000081525081565b3480156105ba57600080fd5b5061023d6105c9366004612823565b611083565b3480156105da57600080fd5b5061023d6105e9366004612ad6565b611177565b3480156105fa57600080fd5b5061023d610609366004612b97565b6112e9565b34801561061a57600080fd5b5061023d610629366004612974565b61159e565b34801561063a57600080fd5b5060005461029f906001600160a01b031681565b34801561065a57600080fd5b506103067f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b61023d610690366004612823565b6115e2565b3480156106a157600080fd5b5061023d6106b0366004612bda565b611707565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061074857507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b6000610759816117b2565b6002546001600160a01b03161561079c576040517fb337f37800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b0382166107dc576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6108067f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b9836117bc565b5050600280547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b826001600160a01b0316336001600160a01b03167f2a21062ee9199c2e205622999eeb7c3da73153674f36a0acd3f74fa6af67bde38484604051610887929190612c56565b60405180910390a3505050565b60607f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb6108c0816117b2565b60006108cd8686866118a9565b9050856001600160a01b03167f373df382b9c587826f3de13f16d67f8d99f28ee947fc0924c6ef2d6d2c7e854634878760405161090c93929190612c72565b60405180910390a295945050505050565b34600003610957576040517f7671265e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546040516000916001600160a01b03169034908381818185875af1925050503d80600081146109a4576040519150601f19603f3d011682016040523d82523d6000602084013e6109a9565b606091505b50909150508015156000036109ea576040517f79cacff100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b836001600160a01b0316336001600160a01b03167f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a43460008787604051610a349493929190612c8c565b60405180910390a350505050565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020526040902060010154610a7c816117b2565b610a8683836117bc565b50505050565b7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb610ab6816117b2565b600080856001600160a01b03163460405160006040518083038185875af1925050503d8060008114610b04576040519150601f19603f3d011682016040523d82523d6000602084013e610b09565b606091505b509150915081610b45576040517facfdb44400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f8fcaa0b50000000000000000000000000000000000000000000000000000000081526001600160a01b03871690638fcaa0b590610b8c9088908890600401612c56565b600060405180830381600087803b158015610ba657600080fd5b505af1158015610bba573d6000803e3d6000fd5b50505050856001600160a01b03167fd5d7616b1678354a0dea9d7e57e6a090bff5babe9f8d6381fdbad16e89ba311c348787604051610bfb93929190612c72565b60405180910390a2505050505050565b6001600160a01b0381163314610c4d576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610c578282611952565b505050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610c86816117b2565b610c8e611a16565b50565b610c99611aa6565b610ca282611b78565b610cac8282611b83565b5050565b610cb8611ca7565b7f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b9610ce2816117b2565b83600003610d1c576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610d268686611d28565b610d5c576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b0386811660048301526024820186905287169063095ea7b3906044016020604051808303816000875af1158015610dc4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610de89190612cb5565b610e1e576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610e2b8685856118a9565b9050610e378787611d28565b610e6d576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201526000906001600160a01b038916906370a0823190602401602060405180830381865afa158015610ecd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ef19190612cd7565b90508015610f0357610f038882611db8565b866001600160a01b0316886001600160a01b03167f29c40793bffd84cb810179f15d1ceec72bc7f0785514c668ba36645cf99b7382888888604051610f4a93929190612c72565b60405180910390a3505050610f7e60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b5050505050565b6000610f8f611f1a565b507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc90565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610fde816117b2565b610c8e611f7c565b83600003611020576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61102b338486611ff5565b846001600160a01b0316336001600160a01b03167f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a4868686866040516110749493929190612c8c565b60405180910390a35050505050565b600061108e816117b2565b6000546001600160a01b0316156110d1576040517fb337f37800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038216611111576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61113b7f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b9836117bc565b5050600080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b61117f611ca7565b7f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b96111a9816117b2565b836000036111e3576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6111f76001600160a01b0387168686612149565b6040517f8fcaa0b50000000000000000000000000000000000000000000000000000000081526001600160a01b03861690638fcaa0b59061123e9086908690600401612c56565b600060405180830381600087803b15801561125857600080fd5b505af115801561126c573d6000803e3d6000fd5b50505050846001600160a01b0316866001600160a01b03167f723fc7be2448075379e4fdf1e6bf5fead954d2668d2da05dcb44ccfec4beeda78686866040516112b793929190612c72565b60405180910390a350610f7e60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156113345750825b905060008267ffffffffffffffff1660011480156113515750303b155b90508115801561135f575080155b15611396576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84547fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000016600117855583156113f75784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff16680100000000000000001785555b6001600160a01b038816158061141457506001600160a01b038716155b1561144b576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6114536121bd565b61145b6121c5565b6114636121bd565b61146b6121d5565b6114766000876117bc565b506114a17f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a876117bc565b50600180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b038a161790556114ff7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb896117bc565b50600380547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03891617905583156115945784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b5050505050505050565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b62680060205260409020600101546115d8816117b2565b610a868383611952565b3460000361161c576040517f7671265e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546040516000916001600160a01b03169034908381818185875af1925050503d8060008114611669576040519150601f19603f3d011682016040523d82523d6000602084013e61166e565b606091505b50909150508015156000036116af576040517f79cacff100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60408051348152600060208201819052606082840181905282015290516001600160a01b0384169133917f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a49181900360800190a35050565b81600003611741576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61174c338284611ff5565b826001600160a01b0316336001600160a01b03167f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a484846040516108879291909182526001600160a01b0316602082015260606040820181905260009082015260800190565b610c8e81336121e5565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff1661189f576000848152602082815260408083206001600160a01b0387168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790556118553390565b6001600160a01b0316836001600160a01b0316857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a46001915050610748565b6000915050610748565b6060600080856001600160a01b03163486866040516118c9929190612cf0565b60006040518083038185875af1925050503d8060008114611906576040519150601f19603f3d011682016040523d82523d6000602084013e61190b565b606091505b509150915081611947576040517facfdb44400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b9150505b9392505050565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff161561189f576000848152602082815260408083206001600160a01b038716808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339287917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a46001915050610748565b611a1e612272565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001681557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a150565b306001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161480611b3f57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316611b337f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b6001600160a01b031614155b15611b76576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6000610cac816117b2565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015611bfb575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252611bf891810190612cd7565b60015b611c41576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b03831660048201526024015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8114611c9d576040517faa1d49a400000000000000000000000000000000000000000000000000000000815260048101829052602401611c38565b610c5783836122cd565b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0080547ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01611d22576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60029055565b6040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b038281166004830152600060248301819052919084169063095ea7b3906044016020604051808303816000875af1158015611d94573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061194b9190612cb5565b6003546001600160a01b0390811690831603611eda576002546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152602481018390529083169063095ea7b3906044016020604051808303816000875af1158015611e3a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e5e9190612cb5565b506002546040517f743e0c9b000000000000000000000000000000000000000000000000000000008152600481018390526001600160a01b039091169063743e0c9b90602401600060405180830381600087803b158015611ebe57600080fd5b505af1158015611ed2573d6000803e3d6000fd5b505050505050565b600054610cac906001600160a01b03848116911683612149565b60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614611b76576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611f84612323565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011781557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25833611a88565b6003546001600160a01b039081169083160361212d576120206001600160a01b03831684308461237f565b6002546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152602481018390529083169063095ea7b3906044016020604051808303816000875af115801561208c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120b09190612cb5565b506002546040517f743e0c9b000000000000000000000000000000000000000000000000000000008152600481018390526001600160a01b039091169063743e0c9b90602401600060405180830381600087803b15801561211057600080fd5b505af1158015612124573d6000803e3d6000fd5b50505050505050565b600054610c57906001600160a01b03848116918691168461237f565b6040516001600160a01b03838116602483015260448201839052610c5791859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506123b8565b611b76612434565b6121cd612434565b611b7661249b565b6121dd612434565b611b766124a3565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408083206001600160a01b038516845290915290205460ff16610cac576040517fe2517d3f0000000000000000000000000000000000000000000000000000000081526001600160a01b038216600482015260248101839052604401611c38565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff16611b76576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6122d6826124f4565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a280511561231b57610c57828261259c565b610cac612612565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff1615611b76576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040516001600160a01b038481166024830152838116604483015260648201839052610a869186918216906323b872dd90608401612176565b60006123cd6001600160a01b0384168361264a565b905080516000141580156123f25750808060200190518101906123f09190612cb5565b155b15610c57576040517f5274afe70000000000000000000000000000000000000000000000000000000081526001600160a01b0384166004820152602401611c38565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff16611b76576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611ef4612434565b6124ab612434565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055565b806001600160a01b03163b600003612543576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b0382166004820152602401611c38565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6060600080846001600160a01b0316846040516125b99190612d00565b600060405180830381855af49150503d80600081146125f4576040519150601f19603f3d011682016040523d82523d6000602084013e6125f9565b606091505b5091509150612609858383612658565b95945050505050565b3415611b76576040517fb398979f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606061194b838360006126cd565b60608261266d5761266882612783565b61194b565b815115801561268457506001600160a01b0384163b155b156126c6576040517f9996b3150000000000000000000000000000000000000000000000000000000081526001600160a01b0385166004820152602401611c38565b508061194b565b60608147101561270b576040517fcd786059000000000000000000000000000000000000000000000000000000008152306004820152602401611c38565b600080856001600160a01b031684866040516127279190612d00565b60006040518083038185875af1925050503d8060008114612764576040519150601f19603f3d011682016040523d82523d6000602084013e612769565b606091505b5091509150612779868383612658565b9695505050505050565b8051156127935780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000602082840312156127d757600080fd5b81357fffffffff000000000000000000000000000000000000000000000000000000008116811461194b57600080fd5b80356001600160a01b038116811461281e57600080fd5b919050565b60006020828403121561283557600080fd5b61194b82612807565b60008083601f84011261285057600080fd5b50813567ffffffffffffffff81111561286857600080fd5b60208301915083602082850101111561288057600080fd5b9250929050565b60008060006040848603121561289c57600080fd5b6128a584612807565b9250602084013567ffffffffffffffff8111156128c157600080fd5b6128cd8682870161283e565b9497909650939450505050565b60005b838110156128f55781810151838201526020016128dd565b50506000910152565b600081518084526129168160208601602086016128da565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152600061194b60208301846128fe565b60006020828403121561296d57600080fd5b5035919050565b6000806040838503121561298757600080fd5b8235915061299760208401612807565b90509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080604083850312156129e257600080fd5b6129eb83612807565b9150602083013567ffffffffffffffff811115612a0757600080fd5b8301601f81018513612a1857600080fd5b803567ffffffffffffffff811115612a3257612a326129a0565b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8501160116810181811067ffffffffffffffff82111715612a9e57612a9e6129a0565b604052818152828201602001871015612ab657600080fd5b816020840160208301376000602083830101528093505050509250929050565b600080600080600060808688031215612aee57600080fd5b612af786612807565b9450612b0560208701612807565b935060408601359250606086013567ffffffffffffffff811115612b2857600080fd5b612b348882890161283e565b969995985093965092949392505050565b600080600080600060808688031215612b5d57600080fd5b612b6686612807565b945060208601359350612b7b60408701612807565b9250606086013567ffffffffffffffff811115612b2857600080fd5b600080600060608486031215612bac57600080fd5b612bb584612807565b9250612bc360208501612807565b9150612bd160408501612807565b90509250925092565b600080600060608486031215612bef57600080fd5b612bf884612807565b925060208401359150612bd160408501612807565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b602081526000612c6a602083018486612c0d565b949350505050565b838152604060208201526000612609604083018486612c0d565b8481526001600160a01b0384166020820152606060408201526000612779606083018486612c0d565b600060208284031215612cc757600080fd5b8151801515811461194b57600080fd5b600060208284031215612ce957600080fd5b5051919050565b8183823760009101908152919050565b60008251612d128184602087016128da565b919091019291505056fea2646970667358221220a2cc45e19abbbfe5e651a45b4ddc5a5ada7e94e7b4482a57a5011f556e05ea7a64736f6c634300081a0033", } // GatewayEVMUpgradeTestABI is the input ABI used to generate the binding from. diff --git a/v2/pkg/gatewayevmzevm.t.sol/gatewayevmzevmtest.go b/v2/pkg/gatewayevmzevm.t.sol/gatewayevmzevmtest.go index 40bbecc7..60a70c6f 100644 --- a/v2/pkg/gatewayevmzevm.t.sol/gatewayevmzevmtest.go +++ b/v2/pkg/gatewayevmzevm.t.sol/gatewayevmzevmtest.go @@ -49,8 +49,8 @@ type StdInvariantFuzzSelector struct { // GatewayEVMZEVMTestMetaData contains all meta data concerning the GatewayEVMZEVMTest contract. var GatewayEVMZEVMTestMetaData = &bind.MetaData{ - ABI: "[{\"type\":\"function\",\"name\":\"IS_TEST\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeArtifacts\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedArtifacts_\",\"type\":\"string[]\",\"internalType\":\"string[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeContracts\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedContracts_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeSelectors\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedSelectors_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzSelector[]\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"selectors\",\"type\":\"bytes4[]\",\"internalType\":\"bytes4[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeSenders\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedSenders_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"failed\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"setUp\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"targetArtifactSelectors\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedArtifactSelectors_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzArtifactSelector[]\",\"components\":[{\"name\":\"artifact\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"selectors\",\"type\":\"bytes4[]\",\"internalType\":\"bytes4[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetArtifacts\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedArtifacts_\",\"type\":\"string[]\",\"internalType\":\"string[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetContracts\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedContracts_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetInterfaces\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedInterfaces_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzInterface[]\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"artifacts\",\"type\":\"string[]\",\"internalType\":\"string[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetSelectors\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedSelectors_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzSelector[]\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"selectors\",\"type\":\"bytes4[]\",\"internalType\":\"bytes4[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetSenders\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedSenders_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"testCallReceiverEVMFromSenderZEVM\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testCallReceiverEVMFromZEVM\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawAndCallReceiverEVMFromSenderZEVM\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawAndCallReceiverEVMFromZEVM\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"event\",\"name\":\"Call\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"receiver\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Call\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"chainId\",\"type\":\"uint256\",\"indexed\":true,\"internalType\":\"uint256\"},{\"name\":\"receiver\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"message\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Deposit\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"receiver\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"asset\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Executed\",\"inputs\":[{\"name\":\"destination\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ExecutedWithERC20\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedERC20\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"token\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"destination\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedNoParams\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedNonPayable\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"strs\",\"type\":\"string[]\",\"indexed\":false,\"internalType\":\"string[]\"},{\"name\":\"nums\",\"type\":\"uint256[]\",\"indexed\":false,\"internalType\":\"uint256[]\"},{\"name\":\"flag\",\"type\":\"bool\",\"indexed\":false,\"internalType\":\"bool\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedPayable\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"str\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"num\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"flag\",\"type\":\"bool\",\"indexed\":false,\"internalType\":\"bool\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedRevert\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Reverted\",\"inputs\":[{\"name\":\"destination\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RevertedWithERC20\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Withdrawal\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"chainId\",\"type\":\"uint256\",\"indexed\":true,\"internalType\":\"uint256\"},{\"name\":\"receiver\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"zrc20\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"gasfee\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"protocolFlatFee\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"message\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log\",\"inputs\":[{\"name\":\"\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_address\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_array\",\"inputs\":[{\"name\":\"val\",\"type\":\"uint256[]\",\"indexed\":false,\"internalType\":\"uint256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_array\",\"inputs\":[{\"name\":\"val\",\"type\":\"int256[]\",\"indexed\":false,\"internalType\":\"int256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_array\",\"inputs\":[{\"name\":\"val\",\"type\":\"address[]\",\"indexed\":false,\"internalType\":\"address[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_bytes\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_bytes32\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_int\",\"inputs\":[{\"name\":\"\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_address\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_array\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"uint256[]\",\"indexed\":false,\"internalType\":\"uint256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_array\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"int256[]\",\"indexed\":false,\"internalType\":\"int256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_array\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"address[]\",\"indexed\":false,\"internalType\":\"address[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_bytes\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_bytes32\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_decimal_int\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"},{\"name\":\"decimals\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_decimal_uint\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"decimals\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_int\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_string\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_uint\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_string\",\"inputs\":[{\"name\":\"\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_uint\",\"inputs\":[{\"name\":\"\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"logs\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"ApprovalFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"CallerIsNotFungibleModule\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"CustodyInitialized\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"DepositFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ExecutionFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"FailedZetaSent\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"GasFeeTransferFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientERC20Amount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientETHAmount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientZRC20Amount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidTarget\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OnlyWZETAOrFungible\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"WithdrawalFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZRC20BurnFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZRC20DepositFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZRC20TransferFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZeroAddress\",\"inputs\":[]}]", - Bin: "0x6080604052600c8054600160ff199182168117909255601f80549091169091179055348015602c57600080fd5b506201078f806200003e6000396000f3fe608060405234801561001057600080fd5b506004361061011b5760003560e01c806385226c81116100b2578063b5508aa911610081578063d7a525fc11610066578063d7a525fc146101ec578063e20c9f71146101f4578063fa7626d4146101fc57600080fd5b8063b5508aa9146101cc578063ba414fa6146101d457600080fd5b806385226c8114610192578063916a17c6146101a75780639683c695146101bc578063b0464fdc146101c457600080fd5b80633f7286f4116100ee5780633f7286f414610165578063524744131461016d57806366d9a9a0146101755780636ff15ccc1461018a57600080fd5b80630a9254e4146101205780631ed7831c1461012a5780632ade3880146101485780633e5e3c231461015d575b600080fd5b610128610209565b005b61013261118d565b60405161013f9190617944565b60405180910390f35b6101506111ef565b60405161013f91906179e0565b610132611331565b610132611391565b6101286113f1565b61017d611c4e565b60405161013f9190617b46565b610128611dd0565b61019a6125e8565b60405161013f9190617be4565b6101af6126b8565b60405161013f9190617c5b565b6101286127b3565b6101af612d2f565b61019a612e2a565b6101dc612efa565b604051901515815260200161013f565b610128612fce565b6101326136b0565b601f546101dc9060ff1681565b602680547fffffffffffffffffffffffff00000000000000000000000000000000000000009081163017909155602780548216611234179055602880548216615678179055602e805490911661432117905560405161026790617829565b60408082526004908201527f746573740000000000000000000000000000000000000000000000000000000060608201526080602082018190526003908201527f54544b000000000000000000000000000000000000000000000000000000000060a082015260c001604051809103906000f0801580156102ec573d6000803e3d6000fd5b50602380547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039290921691909117905560405161033190617829565b604080825260049082018190527f7a6574610000000000000000000000000000000000000000000000000000000060608301526080602083018190528201527f5a4554410000000000000000000000000000000000000000000000000000000060a082015260c001604051809103906000f0801580156103b5573d6000803e3d6000fd5b50602480547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039283169081178255604080518082018252600e81527f4761746577617945564d2e736f6c0000000000000000000000000000000000006020820152602854602654925190861694810194909452604484019290925290921660648201526104a6919060840160408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fc0c53b8b00000000000000000000000000000000000000000000000000000000179052613710565b601f80547fffffffffffffffffffffff0000000000000000000000000000000000000000ff166101006001600160a01b0393841681029190911791829055602080549190920483167fffffffffffffffffffffffff0000000000000000000000000000000000000000909116811790915560285460265460405192939182169291169061053290617837565b6001600160a01b03938416815291831660208301529091166040820152606001604051809103906000f08015801561056e573d6000803e3d6000fd5b50602180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392831617905560205460245460285460265460405193851694928316939183169216906105c990617845565b6001600160a01b039485168152928416602084015290831660408301529091166060820152608001604051809103906000f08015801561060d573d6000803e3d6000fd5b50602280547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039283161790556028546040517fc88a5e6d00000000000000000000000000000000000000000000000000000000815291166004820152670de0b6b3a76400006024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c88a5e6d90604401600060405180830381600087803b1580156106b957600080fd5b505af11580156106cd573d6000803e3d6000fd5b50506026546040517f06447d560000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506306447d569150602401600060405180830381600087803b15801561074357600080fd5b505af1158015610757573d6000803e3d6000fd5b50506020546021546040517fae7a3a6f0000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201529116925063ae7a3a6f9150602401600060405180830381600087803b1580156107bd57600080fd5b505af11580156107d1573d6000803e3d6000fd5b50506020546022546040517f10188aef0000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152911692506310188aef9150602401600060405180830381600087803b15801561083757600080fd5b505af115801561084b573d6000803e3d6000fd5b505050507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b03166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156108ad57600080fd5b505af11580156108c1573d6000803e3d6000fd5b50506023546026546040517f40c10f190000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620f42406024820152911692506340c10f199150604401600060405180830381600087803b15801561093057600080fd5b505af1158015610944573d6000803e3d6000fd5b50506023546021546040517fa9059cbb0000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201526207a12060248201529116925063a9059cbb91506044016020604051808303816000875af11580156109b8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109dc9190617cf2565b506040516109e990617853565b604051809103906000f080158015610a05573d6000803e3d6000fd5b50602580547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03928316179055604080518082018252600f81527f476174657761795a45564d2e736f6c0000000000000000000000000000000000602082015260248054602e54935190851691810191909152919092166044820152610aee919060640160408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f485cc95500000000000000000000000000000000000000000000000000000000179052613710565b602980546001600160a01b03929092167fffffffffffffffffffffffff00000000000000000000000000000000000000009283168117909155602a80549092168117909155604051610b3f90617861565b6001600160a01b039091168152602001604051809103906000f080158015610b6b573d6000803e3d6000fd5b50602b80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03929092169190911790556040517f06447d5600000000000000000000000000000000000000000000000000000000815273735b14bb79463307aacbed86daf3322b1e6226ab6004820181905290737109709ecfa91a80626ff3989d68f67f5b1dd12d906306447d5690602401600060405180830381600087803b158015610c2057600080fd5b505af1158015610c34573d6000803e3d6000fd5b505050506000806000604051610c499061786f565b6001600160a01b03938416815291831660208301529091166040820152606001604051809103906000f080158015610c85573d6000803e3d6000fd5b50602c80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03928316908117909155602a54604051601293600193600093849391921690610cdb9061787d565b610cea96959493929190617d14565b604051809103906000f080158015610d06573d6000803e3d6000fd5b50602d80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03928316908117909155602c546040517fee2815ba0000000000000000000000000000000000000000000000000000000081526001600482015260248101929092529091169063ee2815ba90604401600060405180830381600087803b158015610d9d57600080fd5b505af1158015610db1573d6000803e3d6000fd5b5050602c546040517fa7cb050700000000000000000000000000000000000000000000000000000000815260016004820181905260248201526001600160a01b03909116925063a7cb05079150604401600060405180830381600087803b158015610e1b57600080fd5b505af1158015610e2f573d6000803e3d6000fd5b5050602d54602e546040517f47e7ef240000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620f42406024820152911692506347e7ef2491506044016020604051808303816000875af1158015610ea3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ec79190617cf2565b50602d54602b546040517f47e7ef240000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620f424060248201529116906347e7ef24906044016020604051808303816000875af1158015610f38573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f5c9190617cf2565b507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b03166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610fbb57600080fd5b505af1158015610fcf573d6000803e3d6000fd5b5050602e546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b15801561104557600080fd5b505af1158015611059573d6000803e3d6000fd5b5050602d54602a546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620f424060248201529116925063095ea7b391506044016020604051808303816000875af11580156110cd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110f19190617cf2565b506028546040517fc88a5e6d0000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152670de0b6b3a76400006024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c88a5e6d90604401600060405180830381600087803b15801561117257600080fd5b505af1158015611186573d6000803e3d6000fd5b5050505050565b606060168054806020026020016040519081016040528092919081815260200182805480156111e557602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116111c7575b5050505050905090565b6060601e805480602002602001604051908101604052809291908181526020016000905b8282101561132857600084815260208082206040805180820182526002870290920180546001600160a01b03168352600181018054835181870281018701909452808452939591948681019491929084015b8282101561131157838290600052602060002001805461128490617e09565b80601f01602080910402602001604051908101604052809291908181526020018280546112b090617e09565b80156112fd5780601f106112d2576101008083540402835291602001916112fd565b820191906000526020600020905b8154815290600101906020018083116112e057829003601f168201915b505050505081526020019060010190611265565b505050508152505081526020019060010190611213565b50505050905090565b606060188054806020026020016040519081016040528092919081815260200182805480156111e5576020028201919060005260206000209081546001600160a01b031681526001909101906020018083116111c7575050505050905090565b606060178054806020026020016040519081016040528092919081815260200182805480156111e5576020028201919060005260206000209081546001600160a01b031681526001909101906020018083116111c7575050505050905090565b604080518082018252600681527f48656c6c6f2100000000000000000000000000000000000000000000000000006020820152602d54602b5492517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b0393841660048201529192602a92600192670de0b6b3a7640000926000929116906370a0823190602401602060405180830381865afa15801561149d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114c19190617e56565b6040519091506000907fe04d4f9700000000000000000000000000000000000000000000000000000000906114fe90889088908890602401617e6f565b60408051601f19818403018152918152602080830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909516949094179093526025549051919350600092611597926001600160a01b03909216910160609190911b6bffffffffffffffffffffffff1916815260140190565b60408051601f1981840301815290829052602d546115c892620f4240916001600160a01b0316908690602401617e99565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f7993c1e000000000000000000000000000000000000000000000000000000000179052602a5490517ff30c7ba3000000000000000000000000000000000000000000000000000000008152919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f30c7ba391611685916001600160a01b0391909116906000908690600401617ed8565b600060405180830381600087803b15801561169f57600080fd5b505af11580156116b3573d6000803e3d6000fd5b5050602e546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b15801561172957600080fd5b505af115801561173d573d6000803e3d6000fd5b5050602b5460255460405160609190911b6bffffffffffffffffffffffff191660208201526001600160a01b039091169250630abd8905915060340160408051601f1981840301815290829052602d547fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1683526117d792620f4240916001600160a01b0316908d908d908d90600401617f00565b600060405180830381600087803b1580156117f157600080fd5b505af1158015611805573d6000803e3d6000fd5b50506020546040517fc88a5e6d0000000000000000000000000000000000000000000000000000000081526001600160a01b03909116600482015260248101879052737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c88a5e6d9150604401600060405180830381600087803b15801561188257600080fd5b505af1158015611896573d6000803e3d6000fd5b50506025546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b15801561192857600080fd5b505af115801561193c573d6000803e3d6000fd5b50506020546040517f1f1ff1f5fb41346850b2f5c04e6c767e2f1c8a525c5c0c5cdb60cdf3ca5f62fa935061198592506001600160a01b039091169087908b908b908b90617f55565b60405180910390a16020546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b158015611a1b57600080fd5b505af1158015611a2f573d6000803e3d6000fd5b50506025546040516001600160a01b0390911692507fcaf938de11c367272220bfd1d2baa99ca46665e7bc4d85f00adb51b90fe1fa9f9150611a749087908690617f96565b60405180910390a26028546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015611aee57600080fd5b505af1158015611b02573d6000803e3d6000fd5b50506020546025546040517f1cff79cd0000000000000000000000000000000000000000000000000000000081526001600160a01b039283169450631cff79cd93508892611b569216908790600401617faf565b60006040518083038185885af1158015611b74573d6000803e3d6000fd5b50505050506040513d6000823e601f3d908101601f19168201604052611b9d91908101906180b9565b50602d54602b546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260009291909116906370a0823190602401602060405180830381865afa158015611c08573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c2c9190617e56565b9050611c4481611c3f620f42408761811d565b61372f565b5050505050505050565b6060601b805480602002602001604051908101604052809291908181526020016000905b828210156113285783829060005260206000209060020201604051806040016040529081600082018054611ca590617e09565b80601f0160208091040260200160405190810160405280929190818152602001828054611cd190617e09565b8015611d1e5780601f10611cf357610100808354040283529160200191611d1e565b820191906000526020600020905b815481529060010190602001808311611d0157829003601f168201915b5050505050815260200160018201805480602002602001604051908101604052809291908181526020018280548015611db857602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019060040190602082600301049283019260010382029150808411611d655790505b50505050508152505081526020019060010190611c72565b604080518082018252600681527f48656c6c6f21000000000000000000000000000000000000000000000000000060208201529051602a90600190670de0b6b3a7640000906000907fe04d4f970000000000000000000000000000000000000000000000000000000090611e4c90879087908790602401617e6f565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009490941693909317909252602a5491517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b0390921660848301529150737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b158015611f3b57600080fd5b505af1158015611f4f573d6000803e3d6000fd5b5050602e5460255460405160609190911b6bffffffffffffffffffffffff19166020820152600093506001600160a01b0390911691507fde19dbe881cc0aeeb6e73ce19ac7b5ca695e6be8a076e3eb42292005a7fec1b59060340160408051601f19818403018152828252602d547f4d8943bb000000000000000000000000000000000000000000000000000000008452915190926001600160a01b0390921691620f4240916000918491634d8943bb916004808201926020929091908290030181865afa158015612025573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120499190617e56565b8860405161205c96959493929190618130565b60405180910390a3602e546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156120d657600080fd5b505af11580156120ea573d6000803e3d6000fd5b5050602a5460255460405160609190911b6bffffffffffffffffffffffff191660208201526001600160a01b039091169250637993c1e0915060340160408051601f1981840301815290829052602d547fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16835261218092620f4240916001600160a01b0316908790600401618183565b600060405180830381600087803b15801561219a57600080fd5b505af11580156121ae573d6000803e3d6000fd5b5050602d54602e546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260009450911691506370a0823190602401602060405180830381865afa15801561221a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061223e9190617e56565b905061224b81600061372f565b6020546040517fc88a5e6d0000000000000000000000000000000000000000000000000000000081526001600160a01b03909116600482015260248101849052737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c88a5e6d90604401600060405180830381600087803b1580156122c457600080fd5b505af11580156122d8573d6000803e3d6000fd5b50506025546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b15801561236a57600080fd5b505af115801561237e573d6000803e3d6000fd5b50506020546040517f1f1ff1f5fb41346850b2f5c04e6c767e2f1c8a525c5c0c5cdb60cdf3ca5f62fa93506123c792506001600160a01b039091169086908a908a908a90617f55565b60405180910390a16020546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b15801561245d57600080fd5b505af1158015612471573d6000803e3d6000fd5b50506025546040516001600160a01b0390911692507fcaf938de11c367272220bfd1d2baa99ca46665e7bc4d85f00adb51b90fe1fa9f91506124b69086908690617f96565b60405180910390a26028546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561253057600080fd5b505af1158015612544573d6000803e3d6000fd5b50506020546025546040517f1cff79cd0000000000000000000000000000000000000000000000000000000081526001600160a01b039283169450631cff79cd935087926125989216908790600401617faf565b60006040518083038185885af11580156125b6573d6000803e3d6000fd5b50505050506040513d6000823e601f3d908101601f191682016040526125df91908101906180b9565b50505050505050565b6060601a805480602002602001604051908101604052809291908181526020016000905b8282101561132857838290600052602060002001805461262b90617e09565b80601f016020809104026020016040519081016040528092919081815260200182805461265790617e09565b80156126a45780601f10612679576101008083540402835291602001916126a4565b820191906000526020600020905b81548152906001019060200180831161268757829003601f168201915b50505050508152602001906001019061260c565b6060601d805480602002602001604051908101604052809291908181526020016000905b828210156113285760008481526020908190206040805180820182526002860290920180546001600160a01b0316835260018101805483518187028101870190945280845293949193858301939283018282801561279b57602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190600401906020826003010492830192600103820291508084116127485790505b505050505081525050815260200190600101906126dc565b604080518082018252600681527f48656c6c6f21000000000000000000000000000000000000000000000000000060208201529051602a90600190670de0b6b3a76400009082906000907fe04d4f97000000000000000000000000000000000000000000000000000000009061283190889088908690602401617e6f565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009490941693909317909252602e5491517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b0390921660048301529150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561290457600080fd5b505af1158015612918573d6000803e3d6000fd5b5050602a546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b1580156129aa57600080fd5b505af11580156129be573d6000803e3d6000fd5b5050602e5460255460405160609190911b6bffffffffffffffffffffffff191660208201528593506001600160a01b0390911691507f5322ffbbf9261ff1f8138247942d2b03b28717141ef0a0dd080fc4be9c4e78d39060340160408051601f1981840301815290829052612a349186906181bd565b60405180910390a3602a5460255460405160609190911b6bffffffffffffffffffffffff191660208201526001600160a01b0390911690635d40e1789060340160405160208183030381529060405284846040518463ffffffff1660e01b8152600401612aa3939291906181e2565b600060405180830381600087803b158015612abd57600080fd5b505af1158015612ad1573d6000803e3d6000fd5b50506020546040517fc88a5e6d0000000000000000000000000000000000000000000000000000000081526001600160a01b03909116600482015260248101869052737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c88a5e6d9150604401600060405180830381600087803b158015612b4e57600080fd5b505af1158015612b62573d6000803e3d6000fd5b50506020546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b158015612bf457600080fd5b505af1158015612c08573d6000803e3d6000fd5b50506025546040516001600160a01b0390911692507fcaf938de11c367272220bfd1d2baa99ca46665e7bc4d85f00adb51b90fe1fa9f9150612c4d9086908590617f96565b60405180910390a26028546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015612cc757600080fd5b505af1158015612cdb573d6000803e3d6000fd5b50506020546025546040517f1cff79cd0000000000000000000000000000000000000000000000000000000081526001600160a01b039283169450631cff79cd935087926125989216908690600401617faf565b6060601c805480602002602001604051908101604052809291908181526020016000905b828210156113285760008481526020908190206040805180820182526002860290920180546001600160a01b03168352600181018054835181870281018701909452808452939491938583019392830182828015612e1257602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019060040190602082600301049283019260010382029150808411612dbf5790505b50505050508152505081526020019060010190612d53565b60606019805480602002602001604051908101604052809291908181526020016000905b82821015611328578382906000526020600020018054612e6d90617e09565b80601f0160208091040260200160405190810160405280929190818152602001828054612e9990617e09565b8015612ee65780601f10612ebb57610100808354040283529160200191612ee6565b820191906000526020600020905b815481529060010190602001808311612ec957829003601f168201915b505050505081526020019060010190612e4e565b60085460009060ff1615612f12575060085460ff1690565b6040517f667f9d70000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d600482018190527f6661696c65640000000000000000000000000000000000000000000000000000602483015260009163667f9d7090604401602060405180830381865afa158015612fa3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612fc79190617e56565b1415905090565b604080518082018252600681527f48656c6c6f21000000000000000000000000000000000000000000000000000060208201529051602a90600190670de0b6b3a76400009082906000907fe04d4f97000000000000000000000000000000000000000000000000000000009061304c90889088908690602401617e6f565b60408051601f19818403018152918152602080830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009095169490941790935260255490519193506000926130e5926001600160a01b03909216910160609190911b6bffffffffffffffffffffffff1916815260140190565b60408051601f198184030181529082905261310691859085906024016181e2565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f5d40e17800000000000000000000000000000000000000000000000000000000179052602a5490517ff30c7ba3000000000000000000000000000000000000000000000000000000008152919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f30c7ba3916131c3916001600160a01b0391909116906000908690600401617ed8565b600060405180830381600087803b1580156131dd57600080fd5b505af11580156131f1573d6000803e3d6000fd5b5050602e546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b15801561326757600080fd5b505af115801561327b573d6000803e3d6000fd5b5050602b5460255460405160609190911b6bffffffffffffffffffffffff191660208201526001600160a01b03909116925063865b36f69150603401604051602081830303815290604052858a8a8a6040518663ffffffff1660e01b81526004016132ea95949392919061820d565b600060405180830381600087803b15801561330457600080fd5b505af1158015613318573d6000803e3d6000fd5b50506020546040517fc88a5e6d0000000000000000000000000000000000000000000000000000000081526001600160a01b03909116600482015260248101879052737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c88a5e6d9150604401600060405180830381600087803b15801561339557600080fd5b505af11580156133a9573d6000803e3d6000fd5b50506025546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b15801561343b57600080fd5b505af115801561344f573d6000803e3d6000fd5b50506020546040517f1f1ff1f5fb41346850b2f5c04e6c767e2f1c8a525c5c0c5cdb60cdf3ca5f62fa935061349892506001600160a01b039091169087908b908b908b90617f55565b60405180910390a16020546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b15801561352e57600080fd5b505af1158015613542573d6000803e3d6000fd5b50506025546040516001600160a01b0390911692507fcaf938de11c367272220bfd1d2baa99ca46665e7bc4d85f00adb51b90fe1fa9f91506135879087908690617f96565b60405180910390a26028546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561360157600080fd5b505af1158015613615573d6000803e3d6000fd5b50506020546025546040517f1cff79cd0000000000000000000000000000000000000000000000000000000081526001600160a01b039283169450631cff79cd935088926136699216908790600401617faf565b60006040518083038185885af1158015613687573d6000803e3d6000fd5b50505050506040513d6000823e601f3d908101601f19168201604052611c4491908101906180b9565b606060158054806020026020016040519081016040528092919081815260200182805480156111e5576020028201919060005260206000209081546001600160a01b031681526001909101906020018083116111c7575050505050905090565b600061371a61788b565b6137258484836137b6565b9150505b92915050565b6040517f98296c540000000000000000000000000000000000000000000000000000000081526004810183905260248101829052737109709ecfa91a80626ff3989d68f67f5b1dd12d906398296c549060440160006040518083038186803b15801561379a57600080fd5b505afa1580156137ae573d6000803e3d6000fd5b505050505050565b6000806137c38584613831565b90506138266040518060400160405280601d81526020017f4552433139363750726f78792e736f6c3a4552433139363750726f78790000008152508286604051602001613811929190617faf565b6040516020818303038152906040528561383d565b9150505b9392505050565b600061382a838361386b565b60c081015151600090156138615761385a84848460c00151613886565b905061382a565b61385a8484613a2c565b60006138778383613b17565b61382a8383602001518461383d565b600080613891613b27565b9050600061389f8683613bfa565b905060006138b682606001518360200151856140a0565b905060006138c6838389896142b2565b905060006138d38261512f565b602081015181519192509060030b15613946578982604001516040516020016138fd929190618252565b60408051601f19818403018152908290527f08c379a000000000000000000000000000000000000000000000000000000000825261393d916004016182d3565b60405180910390fd5b60006139896040518060400160405280601581526020017f4465706c6f79656420746f20616464726573733a2000000000000000000000008152508360016152fe565b6040517fc6ce059d000000000000000000000000000000000000000000000000000000008152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c6ce059d906139dc9084906004016182d3565b602060405180830381865afa1580156139f9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a1d91906182e6565b9b9a5050505050505050505050565b6040517f8d1cc9250000000000000000000000000000000000000000000000000000000081526000908190737109709ecfa91a80626ff3989d68f67f5b1dd12d90638d1cc92590613a819087906004016182d3565b600060405180830381865afa158015613a9e573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052613ac691908101906180b9565b90506000613af48285604051602001613ae092919061830f565b6040516020818303038152906040526154fe565b90506001600160a01b0381166137255784846040516020016138fd92919061833e565b613b2382826000615511565b5050565b604080518082018252600381527f6f75740000000000000000000000000000000000000000000000000000000000602082015290517fd145736c000000000000000000000000000000000000000000000000000000008152606091737109709ecfa91a80626ff3989d68f67f5b1dd12d91829063d145736c90613bae9084906004016183e9565b600060405180830381865afa158015613bcb573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052613bf39190810190618430565b9250505090565b613c2c6040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b6000737109709ecfa91a80626ff3989d68f67f5b1dd12d9050613c776040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b613c8085615614565b60208201526000613c90866159f9565b90506000836001600160a01b031663d930a0e66040518163ffffffff1660e01b8152600401600060405180830381865afa158015613cd2573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052613cfa9190810190618430565b86838560200151604051602001613d149493929190618479565b60408051601f19818403018152908290527f60f9bb1100000000000000000000000000000000000000000000000000000000825291506000906001600160a01b038616906360f9bb1190613d6c9085906004016182d3565b600060405180830381865afa158015613d89573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052613db19190810190618430565b6040517fdb4235f60000000000000000000000000000000000000000000000000000000081529091506001600160a01b0386169063db4235f690613df990849060040161857d565b602060405180830381865afa158015613e16573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613e3a9190617cf2565b613e4f57816040516020016138fd91906185cf565b6040517f49c4fac80000000000000000000000000000000000000000000000000000000081526001600160a01b038616906349c4fac890613e94908490600401618661565b600060405180830381865afa158015613eb1573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052613ed99190810190618430565b84526040517fdb4235f60000000000000000000000000000000000000000000000000000000081526001600160a01b0386169063db4235f690613f209084906004016186b3565b602060405180830381865afa158015613f3d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613f619190617cf2565b15613ff6576040517f49c4fac80000000000000000000000000000000000000000000000000000000081526001600160a01b038616906349c4fac890613fab9084906004016186b3565b600060405180830381865afa158015613fc8573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052613ff09190810190618430565b60408501525b846001600160a01b03166349c4fac882866000015160405160200161401b9190618705565b6040516020818303038152906040526040518363ffffffff1660e01b81526004016140479291906181bd565b600060405180830381865afa158015614064573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261408c9190810190618430565b606085015250608083015250949350505050565b60408051600480825260a0820190925260609160009190816020015b60608152602001906001900390816140bc5790505090506040518060400160405280600481526020017f67726570000000000000000000000000000000000000000000000000000000008152508160008151811061411c5761411c618771565b60200260200101819052506040518060400160405280600381526020017f2d726c00000000000000000000000000000000000000000000000000000000008152508160018151811061417057614170618771565b60200260200101819052508460405160200161418c91906187a0565b604051602081830303815290604052816002815181106141ae576141ae618771565b6020026020010181905250826040516020016141ca919061880c565b604051602081830303815290604052816003815181106141ec576141ec618771565b602002602001018190525060006142028261512f565b602080820151604080518082018252600581527f2e6a736f6e00000000000000000000000000000000000000000000000000000081850190815282518084018452600080825290860152825180840190935290518252928101929092529192506142939060408051808201825260008082526020918201528151808301909252845182528085019082015290615c7c565b6142a857856040516020016138fd919061884d565b9695505050505050565b60a0810151604080518082018252600080825260209182015281518083019092528251808352928101910152606090737109709ecfa91a80626ff3989d68f67f5b1dd12d9015614302565b511590565b614476578260200151156143be576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605860248201527f54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f742060448201527f62652075736564207768656e207468652060736b6970566572696679536f757260648201527f6365436f646560206f7074696f6e206973206074727565600000000000000000608482015260a40161393d565b8260c0015115614476576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605360248201527f54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f742060448201527f62652075736564207768656e207468652060736b69704c6963656e736554797060648201527f6560206f7074696f6e2069732060747275656000000000000000000000000000608482015260a40161393d565b6040805160ff8082526120008201909252600091816020015b606081526020019060019003908161448f57905050905060006040518060400160405280600381526020017f6e707800000000000000000000000000000000000000000000000000000000008152508282806144ea906188de565b935060ff16815181106144ff576144ff618771565b60200260200101819052506040518060400160405280600d81526020017f302e302e312d616c7068612e370000000000000000000000000000000000000081525060405160200161455091906188fd565b60405160208183030381529060405282828061456b906188de565b935060ff168151811061458057614580618771565b60200260200101819052506040518060400160405280600681526020017f6465706c6f7900000000000000000000000000000000000000000000000000008152508282806145cd906188de565b935060ff16815181106145e2576145e2618771565b60200260200101819052506040518060400160405280600e81526020017f2d2d636f6e74726163744e616d6500000000000000000000000000000000000081525082828061462f906188de565b935060ff168151811061464457614644618771565b60200260200101819052508760200151828280614660906188de565b935060ff168151811061467557614675618771565b60200260200101819052506040518060400160405280600e81526020017f2d2d636f6e7472616374506174680000000000000000000000000000000000008152508282806146c2906188de565b935060ff16815181106146d7576146d7618771565b6020908102919091010152875182826146ef816188de565b935060ff168151811061470457614704618771565b60200260200101819052506040518060400160405280600981526020017f2d2d636861696e49640000000000000000000000000000000000000000000000815250828280614751906188de565b935060ff168151811061476657614766618771565b602002602001018190525061477a46615cdd565b8282614785816188de565b935060ff168151811061479a5761479a618771565b60200260200101819052506040518060400160405280600f81526020017f2d2d6275696c64496e666f46696c6500000000000000000000000000000000008152508282806147e7906188de565b935060ff16815181106147fc576147fc618771565b602002602001018190525086828280614814906188de565b935060ff168151811061482957614829618771565b60209081029190910101528551156149505760408051808201909152601581527f2d2d636f6e7374727563746f7242797465636f646500000000000000000000006020820152828261487a816188de565b935060ff168151811061488f5761488f618771565b60209081029190910101526040517f71aad10d0000000000000000000000000000000000000000000000000000000081526001600160a01b038416906371aad10d906148df9089906004016182d3565b600060405180830381865afa1580156148fc573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526149249190810190618430565b828261492f816188de565b935060ff168151811061494457614944618771565b60200260200101819052505b846020015115614a205760408051808201909152601281527f2d2d766572696679536f75726365436f6465000000000000000000000000000060208201528282614999816188de565b935060ff16815181106149ae576149ae618771565b60200260200101819052506040518060400160405280600581526020017f66616c73650000000000000000000000000000000000000000000000000000008152508282806149fb906188de565b935060ff1681518110614a1057614a10618771565b6020026020010181905250614be7565b614a586142fd8660a0015160408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b614aeb5760408051808201909152600d81527f2d2d6c6963656e7365547970650000000000000000000000000000000000000060208201528282614a9b816188de565b935060ff1681518110614ab057614ab0618771565b60200260200101819052508460a00151604051602001614ad091906187a0565b6040516020818303038152906040528282806149fb906188de565b8460c00151158015614b2e575060408089015181518083018352600080825260209182015282518084019093528151835290810190820152614b2c90511590565b155b15614be75760408051808201909152600d81527f2d2d6c6963656e7365547970650000000000000000000000000000000000000060208201528282614b72816188de565b935060ff1681518110614b8757614b87618771565b6020026020010181905250614b9b88615d7d565b604051602001614bab91906187a0565b604051602081830303815290604052828280614bc6906188de565b935060ff1681518110614bdb57614bdb618771565b60200260200101819052505b60408086015181518083018352600080825260209182015282518084019093528151835290810190820152614c1b90511590565b614cb05760408051808201909152600b81527f2d2d72656c61796572496400000000000000000000000000000000000000000060208201528282614c5e816188de565b935060ff1681518110614c7357614c73618771565b60200260200101819052508460400151828280614c8f906188de565b935060ff1681518110614ca457614ca4618771565b60200260200101819052505b606085015115614dd15760408051808201909152600681527f2d2d73616c74000000000000000000000000000000000000000000000000000060208201528282614cf9816188de565b935060ff1681518110614d0e57614d0e618771565b602090810291909101015260608501516040517fb11a19e800000000000000000000000000000000000000000000000000000000815260048101919091526001600160a01b0384169063b11a19e890602401600060405180830381865afa158015614d7d573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052614da59190810190618430565b8282614db0816188de565b935060ff1681518110614dc557614dc5618771565b60200260200101819052505b60e08501515115614e785760408051808201909152600a81527f2d2d6761734c696d69740000000000000000000000000000000000000000000060208201528282614e1b816188de565b935060ff1681518110614e3057614e30618771565b6020026020010181905250614e4c8560e0015160000151615cdd565b8282614e57816188de565b935060ff1681518110614e6c57614e6c618771565b60200260200101819052505b60e08501516020015115614f225760408051808201909152600a81527f2d2d67617350726963650000000000000000000000000000000000000000000060208201528282614ec5816188de565b935060ff1681518110614eda57614eda618771565b6020026020010181905250614ef68560e0015160200151615cdd565b8282614f01816188de565b935060ff1681518110614f1657614f16618771565b60200260200101819052505b60e08501516040015115614fcc5760408051808201909152600e81527f2d2d6d617846656550657247617300000000000000000000000000000000000060208201528282614f6f816188de565b935060ff1681518110614f8457614f84618771565b6020026020010181905250614fa08560e0015160400151615cdd565b8282614fab816188de565b935060ff1681518110614fc057614fc0618771565b60200260200101819052505b60e085015160600151156150765760408051808201909152601681527f2d2d6d61785072696f726974794665655065724761730000000000000000000060208201528282615019816188de565b935060ff168151811061502e5761502e618771565b602002602001018190525061504a8560e0015160600151615cdd565b8282615055816188de565b935060ff168151811061506a5761506a618771565b60200260200101819052505b60008160ff1667ffffffffffffffff81111561509457615094617fd1565b6040519080825280602002602001820160405280156150c757816020015b60608152602001906001900390816150b25790505b50905060005b8260ff168160ff16101561512057838160ff16815181106150f0576150f0618771565b6020026020010151828260ff168151811061510d5761510d618771565b60209081029190910101526001016150cd565b5093505050505b949350505050565b6151566040518060600160405280600060030b815260200160608152602001606081525090565b60408051808201825260048082527f6261736800000000000000000000000000000000000000000000000000000000602083015291517fd145736c000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d92600091849163d145736c916151dc91869101618968565b600060405180830381865afa1580156151f9573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526152219190810190618430565b9050600061522f868361686c565b90506000846001600160a01b031663f45c1ce7836040518263ffffffff1660e01b815260040161525f9190617be4565b6000604051808303816000875af115801561527e573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526152a691908101906189af565b805190915060030b158015906152bf5750602081015151155b80156152ce5750604081015151155b156142a857816000815181106152e6576152e6618771565b60200260200101516040516020016138fd9190618a65565b606060006153338560408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b60408051808201825260008082526020918201528151808301909252865182528087019082015290915061536a9082905b906169c1565b156154c75760006153e7826153e1846153db6153ad8a60408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6040805180820182526000808252602091820152815180830190925282518252918201519181019190915290565b906169e8565b90616a4a565b604080518082018252600181527f0a000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015290915061544b9082906169c1565b156154b557604080518082018252600181527f0a00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526154b2905b8290616acf565b90505b6154be81616af5565b9250505061382a565b82156154e05784846040516020016138fd929190618c51565b505060408051602081019091526000815261382a565b509392505050565b6000808251602084016000f09392505050565b8160a001511561552057505050565b600061552d848484616b5e565b9050600061553a8261512f565b602081015181519192509060030b1580156155d65750604080518082018252600781527f5355434345535300000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526155d690604080518082018252600080825260209182015281518083019092528451825280850190820152615364565b156155e357505050505050565b604082015151156156035781604001516040516020016138fd9190618cf8565b806040516020016138fd9190618d56565b606060006156498360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600481527f2e736f6c00000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201529091506156ae905b8290615c7c565b1561571d57604080518082018252600481527f2e736f6c000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261382a906157189083906170f9565b616af5565b604080518082018252600181527f3a000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261577f905b8290617183565b60010361584c57604080518082018252600181527f3a00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526157e5906154ab565b50604080518082018252600181527f3a000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261382a90615718905b8390616acf565b604080518082018252600581527f2e6a736f6e000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526158ab906156a7565b156159e257604080518082018252600181527f2f0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082018190528451808601909552925184528301529061591390839061721d565b905060008160018351615926919061811d565b8151811061593657615936618771565b602002602001015190506159d96157186159ac6040518060400160405280600581526020017f2e6a736f6e00000000000000000000000000000000000000000000000000000081525060408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600080825260209182015281518083019092528551825280860190820152906170f9565b95945050505050565b826040516020016138fd9190618dc1565b50919050565b60606000615a2e8360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600481527f2e736f6c0000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152909150615a90906156a7565b15615a9e5761382a81616af5565b604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152615afd90615778565b600103615b6757604080518082018252600181527f3a000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261382a9061571890615845565b604080518082018252600581527f2e6a736f6e00000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152615bc6906156a7565b156159e257604080518082018252600181527f2f00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820181905284518086019095529251845283015290615c2e90839061721d565b9050600181511115615c6a578060028251615c49919061811d565b81518110615c5957615c59618771565b602002602001015192505050919050565b50826040516020016138fd9190618dc1565b805182516000911115615c9157506000613729565b81518351602085015160009291615ca791618e9f565b615cb1919061811d565b905082602001518103615cc8576001915050613729565b82516020840151819020912014905092915050565b60606000615cea836172c2565b600101905060008167ffffffffffffffff811115615d0a57615d0a617fd1565b6040519080825280601f01601f191660200182016040528015615d34576020820181803683370190505b5090508181016020015b600019017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a8504945084615d3e57509392505050565b604081810151815180830183526000808252602091820181905283518085018552835181529282018383015283518085018552600a81527f554e4c4943454e5345440000000000000000000000000000000000000000000081840190815285518087018752838152840192909252845180860190955251845290830152606091615e09905b82906173a4565b15615e4957505060408051808201909152600481527f4e6f6e65000000000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600981527f556e6c6963656e7365000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152615ea890615e02565b15615ee857505060408051808201909152600981527f556e6c6963656e736500000000000000000000000000000000000000000000006020820152919050565b604080518082018252600381527f4d4954000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152615f4790615e02565b15615f8757505060408051808201909152600381527f4d495400000000000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f47504c2d322e302d6f6e6c79000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152615fe690615e02565b8061604b5750604080518082018252601081527f47504c2d322e302d6f722d6c61746572000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261604b90615e02565b1561608b57505060408051808201909152600981527f474e552047504c763200000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f47504c2d332e302d6f6e6c790000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526160ea90615e02565b8061614f5750604080518082018252601081527f47504c2d332e302d6f722d6c61746572000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261614f90615e02565b1561618f57505060408051808201909152600981527f474e552047504c763300000000000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4c47504c2d322e312d6f6e6c7900000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526161ee90615e02565b806162535750604080518082018252601181527f4c47504c2d322e312d6f722d6c617465720000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261625390615e02565b1561629357505060408051808201909152600c81527f474e55204c47504c76322e3100000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4c47504c2d332e302d6f6e6c7900000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526162f290615e02565b806163575750604080518082018252601181527f4c47504c2d332e302d6f722d6c617465720000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261635790615e02565b1561639757505060408051808201909152600a81527f474e55204c47504c7633000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f4253442d322d436c617573650000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526163f690615e02565b1561643657505060408051808201909152600c81527f4253442d322d436c6175736500000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f4253442d332d436c6175736500000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261649590615e02565b156164d557505060408051808201909152600c81527f4253442d332d436c6175736500000000000000000000000000000000000000006020820152919050565b604080518082018252600781527f4d504c2d322e30000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261653490615e02565b1561657457505060408051808201909152600781527f4d504c2d322e30000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600781527f4f534c2d332e3000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526165d390615e02565b1561661357505060408051808201909152600781527f4f534c2d332e30000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600a81527f4170616368652d322e30000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261667290615e02565b156166b257505060408051808201909152600a81527f4170616368652d322e30000000000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4147504c2d332e302d6f6e6c79000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261671190615e02565b806167765750604080518082018252601181527f4147504c2d332e302d6f722d6c617465720000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261677690615e02565b156167b657505060408051808201909152600a81527f474e55204147504c7633000000000000000000000000000000000000000000006020820152919050565b604080518082018252600881527f4255534c2d312e310000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261681590615e02565b1561685557505060408051808201909152600781527f42534c20312e31000000000000000000000000000000000000000000000000006020820152919050565b604080840151845191516138fd9290602001618eb2565b60608060005b84518110156168f7578185828151811061688e5761688e618771565b60200260200101516040516020016168a792919061830f565b6040516020818303038152906040529150600185516168c6919061811d565b81146168ef57816040516020016168dd919061901b565b60405160208183030381529060405291505b600101616872565b5060408051600380825260808201909252600091816020015b6060815260200190600190039081616910579050509050838160008151811061693b5761693b618771565b60200260200101819052506040518060400160405280600281526020017f2d630000000000000000000000000000000000000000000000000000000000008152508160018151811061698f5761698f618771565b602002602001018190525081816002815181106169ae576169ae618771565b6020908102919091010152949350505050565b60208083015183518351928401516000936169df92918491906173b8565b14159392505050565b60408051808201909152600080825260208201526000616a1a84600001518560200151856000015186602001516174c9565b9050836020015181616a2c919061811d565b84518590616a3b90839061811d565b90525060208401525090919050565b6040805180820190915260008082526020820152815183511015616a6f575081613729565b6020808301519084015160019114616a965750815160208481015190840151829020919020145b8015616ac757825184518590616aad90839061811d565b9052508251602085018051616ac3908390618e9f565b9052505b509192915050565b6040805180820190915260008082526020820152616aee8383836175e9565b5092915050565b60606000826000015167ffffffffffffffff811115616b1657616b16617fd1565b6040519080825280601f01601f191660200182016040528015616b40576020820181803683370190505b5090506000602082019050616aee8185602001518660000151617694565b60606000616b6a613b27565b6040805160ff808252612000820190925291925060009190816020015b6060815260200190600190039081616b8757905050905060006040518060400160405280600381526020017f6e70780000000000000000000000000000000000000000000000000000000000815250828280616be2906188de565b935060ff1681518110616bf757616bf7618771565b60200260200101819052506040518060400160405280600781526020017f5e312e33322e3300000000000000000000000000000000000000000000000000815250604051602001616c48919061905c565b604051602081830303815290604052828280616c63906188de565b935060ff1681518110616c7857616c78618771565b60200260200101819052506040518060400160405280600881526020017f76616c6964617465000000000000000000000000000000000000000000000000815250828280616cc5906188de565b935060ff1681518110616cda57616cda618771565b602002602001018190525082604051602001616cf6919061880c565b604051602081830303815290604052828280616d11906188de565b935060ff1681518110616d2657616d26618771565b60200260200101819052506040518060400160405280600a81526020017f2d2d636f6e747261637400000000000000000000000000000000000000000000815250828280616d73906188de565b935060ff1681518110616d8857616d88618771565b6020026020010181905250616d9d878461770e565b8282616da8816188de565b935060ff1681518110616dbd57616dbd618771565b602090810291909101015285515115616e695760408051808201909152600b81527f2d2d7265666572656e636500000000000000000000000000000000000000000060208201528282616e0f816188de565b935060ff1681518110616e2457616e24618771565b6020026020010181905250616e3d86600001518461770e565b8282616e48816188de565b935060ff1681518110616e5d57616e5d618771565b60200260200101819052505b856080015115616ed75760408051808201909152601881527f2d2d756e73616665536b697053746f72616765436865636b000000000000000060208201528282616eb2816188de565b935060ff1681518110616ec757616ec7618771565b6020026020010181905250616f3d565b8415616f3d5760408051808201909152601281527f2d2d726571756972655265666572656e6365000000000000000000000000000060208201528282616f1c816188de565b935060ff1681518110616f3157616f31618771565b60200260200101819052505b60408601515115616fd95760408051808201909152600d81527f2d2d756e73616665416c6c6f770000000000000000000000000000000000000060208201528282616f87816188de565b935060ff1681518110616f9c57616f9c618771565b60200260200101819052508560400151828280616fb8906188de565b935060ff1681518110616fcd57616fcd618771565b60200260200101819052505b8560600151156170435760408051808201909152601481527f2d2d756e73616665416c6c6f7752656e616d657300000000000000000000000060208201528282617022816188de565b935060ff168151811061703757617037618771565b60200260200101819052505b60008160ff1667ffffffffffffffff81111561706157617061617fd1565b60405190808252806020026020018201604052801561709457816020015b606081526020019060019003908161707f5790505b50905060005b8260ff168160ff1610156170ed57838160ff16815181106170bd576170bd618771565b6020026020010151828260ff16815181106170da576170da618771565b602090810291909101015260010161709a565b50979650505050505050565b604080518082019091526000808252602082015281518351101561711e575081613729565b8151835160208501516000929161713491618e9f565b61713e919061811d565b6020840151909150600190821461715f575082516020840151819020908220145b801561717a5783518551869061717690839061811d565b9052505b50929392505050565b60008082600001516171a785600001518660200151866000015187602001516174c9565b6171b19190618e9f565b90505b835160208501516171c59190618e9f565b8111616aee57816171d5816190a1565b925050826000015161720c8560200151836171f0919061811d565b86516171fc919061811d565b83866000015187602001516174c9565b6172169190618e9f565b90506171b4565b6060600061722b8484617183565b617236906001618e9f565b67ffffffffffffffff81111561724e5761724e617fd1565b60405190808252806020026020018201604052801561728157816020015b606081526020019060019003908161726c5790505b50905060005b81518110156154f65761729d6157188686616acf565b8282815181106172af576172af618771565b6020908102919091010152600101617287565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000831061730b577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310617337576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc10000831061735557662386f26fc10000830492506010015b6305f5e100831061736d576305f5e100830492506008015b612710831061738157612710830492506004015b60648310617393576064830492506002015b600a83106137295760010192915050565b60006173b0838361774e565b159392505050565b6000808584116174bf576020841161746b57600084156174035760016173df86602061811d565b6173ea9060086190bb565b6173f59060026191b9565b6173ff919061811d565b1990505b83518116856174128989618e9f565b61741c919061811d565b805190935082165b8181146174565787841161743e5787945050505050615127565b83617448816191c5565b945050828451169050617424565b6174608785618e9f565b945050505050615127565b838320617478858861811d565b6174829087618e9f565b91505b8582106174bd578482208082036174aa576174a08684618e9f565b9350505050615127565b6174b560018461811d565b925050617485565b505b5092949350505050565b600083818685116175d4576020851161758357600085156175155760016174f187602061811d565b6174fc9060086190bb565b6175079060026191b9565b617511919061811d565b1990505b845181166000876175268b8b618e9f565b617530919061811d565b855190915083165b8281146175755781861061755d576175508b8b618e9f565b9650505050505050615127565b85617567816190a1565b965050838651169050617538565b859650505050505050615127565b508383206000905b617595868961811d565b82116175d2578583208082036175b15783945050505050615127565b6175bc600185618e9f565b93505081806175ca906190a1565b92505061758b565b505b6175de8787618e9f565b979650505050505050565b6040805180820190915260008082526020820152600061761b85600001518660200151866000015187602001516174c9565b602080870180519186019190915251909150617637908261811d565b83528451602086015161764a9190618e9f565b8103617659576000855261768b565b835183516176679190618e9f565b8551869061767690839061811d565b90525083516176859082618e9f565b60208601525b50909392505050565b602081106176cc57815183526176ab602084618e9f565b92506176b8602083618e9f565b91506176c560208261811d565b9050617694565b60001981156176fb5760016176e283602061811d565b6176ee906101006191b9565b6176f8919061811d565b90505b9151835183169219169190911790915250565b6060600061771c8484613bfa565b8051602080830151604051939450617736939091016191dc565b60405160208183030381529060405291505092915050565b8151815160009190811115617761575081515b6020808501519084015160005b8381101561781a57825182518082146177ea5760001960208710156177c95760018461779b89602061811d565b6177a59190618e9f565b6177b09060086190bb565b6177bb9060026191b9565b6177c5919061811d565b1990505b81811683821681810391146177e75797506137299650505050505050565b50505b6177f5602086618e9f565b9450617802602085618e9f565b935050506020816178139190618e9f565b905061776e565b50845186516142a89190619234565b610c9f806200925583390190565b61140b8062009ef483390190565b6117f9806200b2ff83390190565b610d5e806200caf883390190565b61080c806200d85683390190565b610b3f806200e06283390190565b611bb9806200eba183390190565b6040518060e001604052806060815260200160608152602001606081526020016000151581526020016000151581526020016000151581526020016178ce6178d3565b905290565b604051806101000160405280600015158152602001600015158152602001606081526020016000801916815260200160608152602001606081526020016000151581526020016178ce6040518060800160405280600081526020016000815260200160008152602001600081525090565b602080825282518282018190526000918401906040840190835b818110156179855783516001600160a01b031683526020938401939092019160010161795e565b509095945050505050565b60005b838110156179ab578181015183820152602001617993565b50506000910152565b600081518084526179cc816020860160208601617990565b601f01601f19169290920160200192915050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015617adc577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452815180516001600160a01b03168652602090810151604082880181905281519088018190529101906060600582901b88018101919088019060005b81811015617ac2577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa08a8503018352617aac8486516179b4565b6020958601959094509290920191600101617a72565b509197505050602094850194929092019150600101617a08565b50929695505050505050565b600081518084526020840193506020830160005b82811015617b3c5781517fffffffff0000000000000000000000000000000000000000000000000000000016865260209586019590910190600101617afc565b5093949350505050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015617adc577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08786030184528151805160408752617bb260408801826179b4565b9050602082015191508681036020880152617bcd8183617ae8565b965050506020938401939190910190600101617b6e565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015617adc577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452617c468583516179b4565b94506020938401939190910190600101617c0c565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015617adc577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc087860301845281516001600160a01b0381511686526020810151905060406020870152617cdc6040870182617ae8565b9550506020938401939190910190600101617c83565b600060208284031215617d0457600080fd5b8151801515811461382a57600080fd5b610100815260056101008201527f544f4b454e000000000000000000000000000000000000000000000000000000610120820152610140602082015260036101408201527f544b4e000000000000000000000000000000000000000000000000000000000061016082015260006101808201905060ff8816604083015286606083015260038610617dce577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b8560808301528460a0830152617def60c08301856001600160a01b03169052565b6001600160a01b03831660e0830152979650505050505050565b600181811c90821680617e1d57607f821691505b6020821081036159f3577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060208284031215617e6857600080fd5b5051919050565b606081526000617e8260608301866179b4565b602083019490945250901515604090910152919050565b608081526000617eac60808301876179b4565b62ffffff861660208401526001600160a01b038516604084015282810360608401526175de81856179b4565b6001600160a01b03841681528260208201526060604082015260006159d960608301846179b4565b60c081526000617f1360c08301896179b4565b8760208401526001600160a01b03871660408401528281036060840152617f3a81876179b4565b6080840195909552505090151560a090910152949350505050565b6001600160a01b038616815284602082015260a060408201526000617f7d60a08301866179b4565b6060830194909452509015156080909101529392505050565b82815260406020820152600061512760408301846179b4565b6001600160a01b038316815260406020820152600061512760408301846179b4565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040516060810167ffffffffffffffff8111828210171561802357618023617fd1565b60405290565b60008067ffffffffffffffff84111561804457618044617fd1565b50604051601f19601f85018116603f0116810181811067ffffffffffffffff8211171561807357618073617fd1565b60405283815290508082840185101561808b57600080fd5b6154f6846020830185617990565b600082601f8301126180aa57600080fd5b61382a83835160208501618029565b6000602082840312156180cb57600080fd5b815167ffffffffffffffff8111156180e257600080fd5b61372584828501618099565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b81810381811115613729576137296180ee565b60c08152600061814360c08301896179b4565b6001600160a01b038816602084015286604084015285606084015284608084015282810360a084015261817681856179b4565b9998505050505050505050565b60808152600061819660808301876179b4565b8560208401526001600160a01b038516604084015282810360608401526175de81856179b4565b6040815260006181d060408301856179b4565b828103602084015261382681856179b4565b6060815260006181f560608301866179b4565b84602084015282810360408401526142a881856179b4565b60a08152600061822060a08301886179b4565b866020840152828103604084015261823881876179b4565b606084019590955250509015156080909101529392505050565b7f4661696c656420746f206465706c6f7920636f6e74726163742000000000000081526000835161828a81601a850160208801617990565b7f3a20000000000000000000000000000000000000000000000000000000000000601a9184019182015283516182c781601c840160208801617990565b01601c01949350505050565b60208152600061382a60208301846179b4565b6000602082840312156182f857600080fd5b81516001600160a01b038116811461382a57600080fd5b60008351618321818460208801617990565b835190830190618335818360208801617990565b01949350505050565b7f4661696c656420746f206465706c6f7920636f6e74726163742000000000000081526000835161837681601a850160208801617990565b7f207573696e6720636f6e7374727563746f722064617461202200000000000000601a9184019182015283516183b3816033840160208801617990565b7f220000000000000000000000000000000000000000000000000000000000000060339290910191820152603401949350505050565b60408152600b60408201527f464f554e4452595f4f5554000000000000000000000000000000000000000000606082015260806020820152600061382a60808301846179b4565b60006020828403121561844257600080fd5b815167ffffffffffffffff81111561845957600080fd5b8201601f8101841361846a57600080fd5b61372584825160208401618029565b6000855161848b818460208a01617990565b7f2f0000000000000000000000000000000000000000000000000000000000000090830190815285516184c5816001840160208a01617990565b7f2f00000000000000000000000000000000000000000000000000000000000000600192909101918201528451618503816002840160208901617990565b6001818301019150507f2f0000000000000000000000000000000000000000000000000000000000000060018201528351618545816002840160208801617990565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600292909101918201526007019695505050505050565b60408152600061859060408301846179b4565b8281036020840152600481527f2e6173740000000000000000000000000000000000000000000000000000000060208201526040810191505092915050565b7f436f756c64206e6f742066696e642041535420696e206172746966616374200081526000825161860781601f850160208701617990565b7f2e205365742060617374203d20747275656020696e20666f756e6472792e746f601f9390910192830152507f6d6c000000000000000000000000000000000000000000000000000000000000603f820152604101919050565b60408152600061867460408301846179b4565b8281036020840152601181527f2e6173742e6162736f6c7574655061746800000000000000000000000000000060208201526040810191505092915050565b6040815260006186c660408301846179b4565b8281036020840152600c81527f2e6173742e6c6963656e7365000000000000000000000000000000000000000060208201526040810191505092915050565b7f2e6d657461646174612e736f75726365732e5b2700000000000000000000000081526000825161873d816014850160208701617990565b7f275d2e6b656363616b32353600000000000000000000000000000000000000006014939091019283015250602001919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f22000000000000000000000000000000000000000000000000000000000000008152600082516187d8816001850160208701617990565b7f22000000000000000000000000000000000000000000000000000000000000006001939091019283015250600201919050565b6000825161881e818460208701617990565b7f2f6275696c642d696e666f000000000000000000000000000000000000000000920191825250600b01919050565b7f436f756c64206e6f742066696e64206275696c642d696e666f2066696c65207781527f697468206d61746368696e6720736f7572636520636f6465206861736820666f60208201527f7220636f6e7472616374200000000000000000000000000000000000000000006040820152600082516188d181604b850160208701617990565b91909101604b0192915050565b600060ff821660ff81036188f4576188f46180ee565b60010192915050565b7f406f70656e7a657070656c696e2f646566656e6465722d6465706c6f792d636c81527f69656e742d636c6940000000000000000000000000000000000000000000000060208201526000825161895b816029850160208701617990565b9190910160290192915050565b60408152601660408201527f4f50454e5a455050454c494e5f424153485f5041544800000000000000000000606082015260806020820152600061382a60808301846179b4565b6000602082840312156189c157600080fd5b815167ffffffffffffffff8111156189d857600080fd5b8201606081850312156189ea57600080fd5b6189f2618000565b81518060030b8114618a0357600080fd5b8152602082015167ffffffffffffffff811115618a1f57600080fd5b618a2b86828501618099565b602083015250604082015167ffffffffffffffff811115618a4b57600080fd5b618a5786828501618099565b604083015250949350505050565b7f4661696c656420746f2072756e206261736820636f6d6d616e6420776974682081527f2200000000000000000000000000000000000000000000000000000000000000602082015260008251618ac3816021850160208701617990565b7f222e20496620796f7520617265207573696e672057696e646f77732c2073657460219390910192830152507f20746865204f50454e5a455050454c494e5f424153485f5041544820656e766960418201527f726f6e6d656e74207661726961626c6520746f207468652066756c6c7920717560618201527f616c69666965642070617468206f66207468652062617368206578656375746160818201527f626c652e20466f72206578616d706c652c20696620796f75206172652075736960a18201527f6e672047697420666f722057696e646f77732c206164642074686520666f6c6c60c18201527f6f77696e67206c696e6520696e20746865202e656e762066696c65206f66207960e18201527f6f75722070726f6a65637420287573696e6720666f727761726420736c6173686101018201527f6573293a0a4f50454e5a455050454c494e5f424153485f504154483d22433a2f6101218201527f50726f6772616d2046696c65732f4769742f62696e2f6261736822000000000061014182015261015c01919050565b7f4661696c656420746f2066696e64206c696e652077697468207072656669782081527f2700000000000000000000000000000000000000000000000000000000000000602082015260008351618caf816021850160208801617990565b7f2720696e206f75747075743a20000000000000000000000000000000000000006021918401918201528351618cec81602e840160208801617990565b01602e01949350505050565b7f4661696c656420746f2072756e2075706772616465207361666574792076616c81527f69646174696f6e3a20000000000000000000000000000000000000000000000060208201526000825161895b816029850160208701617990565b7f55706772616465207361666574792076616c69646174696f6e206661696c656481527f3a0a000000000000000000000000000000000000000000000000000000000000602082015260008251618db4816022850160208701617990565b9190910160220192915050565b7f436f6e7472616374206e616d6520000000000000000000000000000000000000815260008251618df981600e850160208701617990565b7f206d75737420626520696e2074686520666f726d6174204d79436f6e74726163600e9390910192830152507f742e736f6c3a4d79436f6e7472616374206f72204d79436f6e74726163742e73602e8201527f6f6c206f72206f75742f4d79436f6e74726163742e736f6c2f4d79436f6e7472604e8201527f6163742e6a736f6e000000000000000000000000000000000000000000000000606e820152607601919050565b80820180821115613729576137296180ee565b7f53504458206c6963656e7365206964656e746966696572200000000000000000815260008351618eea816018850160208801617990565b7f20696e20000000000000000000000000000000000000000000000000000000006018918401918201528351618f2781601c840160208801617990565b7f20646f6573206e6f74206c6f6f6b206c696b65206120737570706f7274656420601c92909101918201527f6c6963656e736520666f7220626c6f636b206578706c6f726572207665726966603c8201527f69636174696f6e2e205573652074686520606c6963656e73655479706560206f605c8201527f7074696f6e20746f20737065636966792061206c6963656e736520747970652c607c8201527f206f7220736574207468652060736b69704c6963656e73655479706560206f70609c8201527f74696f6e20746f2060747275656020746f20736b69702e00000000000000000060bc82015260d301949350505050565b6000825161902d818460208701617990565b7f2000000000000000000000000000000000000000000000000000000000000000920191825250600101919050565b7f406f70656e7a657070656c696e2f75706772616465732d636f7265400000000081526000825161909481601c850160208701617990565b91909101601c0192915050565b600060001982036190b4576190b46180ee565b5060010190565b8082028115828204841417613729576137296180ee565b6001815b600184111561910d578085048111156190f1576190f16180ee565b60018416156190ff57908102905b60019390931c9280026190d6565b935093915050565b60008261912457506001613729565b8161913157506000613729565b816001811461914757600281146191515761916d565b6001915050613729565b60ff841115619162576191626180ee565b50506001821b613729565b5060208310610133831016604e8410600b8410161715619190575081810a613729565b61919d60001984846190d2565b80600019048211156191b1576191b16180ee565b029392505050565b600061382a8383619115565b6000816191d4576191d46180ee565b506000190190565b600083516191ee818460208801617990565b7f3a000000000000000000000000000000000000000000000000000000000000009083019081528351619228816001840160208801617990565b01600101949350505050565b8181036000831280158383131683831282161715616aee57616aee6180ee56fe608060405234801561001057600080fd5b50604051610c9f380380610c9f83398101604081905261002f9161010d565b8181600361003d83826101ff565b50600461004a82826101ff565b50505050506102bd565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261007b57600080fd5b81516001600160401b0381111561009457610094610054565b604051601f8201601f19908116603f011681016001600160401b03811182821017156100c2576100c2610054565b6040528181528382016020018510156100da57600080fd5b60005b828110156100f9576020818601810151838301820152016100dd565b506000918101602001919091529392505050565b6000806040838503121561012057600080fd5b82516001600160401b0381111561013657600080fd5b6101428582860161006a565b602085015190935090506001600160401b0381111561016057600080fd5b61016c8582860161006a565b9150509250929050565b600181811c9082168061018a57607f821691505b6020821081036101aa57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156101fa57806000526020600020601f840160051c810160208510156101d75750805b601f840160051c820191505b818110156101f757600081556001016101e3565b50505b505050565b81516001600160401b0381111561021857610218610054565b61022c816102268454610176565b846101b0565b6020601f82116001811461026057600083156102485750848201515b600019600385901b1c1916600184901b1784556101f7565b600084815260208120601f198516915b828110156102905787850151825560209485019460019092019101610270565b50848210156102ae5786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b6109d3806102cc6000396000f3fe608060405234801561001057600080fd5b50600436106100be5760003560e01c806340c10f191161007657806395d89b411161005b57806395d89b4114610183578063a9059cbb1461018b578063dd62ed3e1461019e57600080fd5b806340c10f191461013857806370a082311461014d57600080fd5b806318160ddd116100a757806318160ddd1461010457806323b872dd14610116578063313ce5671461012957600080fd5b806306fdde03146100c3578063095ea7b3146100e1575b600080fd5b6100cb6101e4565b6040516100d891906107bf565b60405180910390f35b6100f46100ef366004610854565b610276565b60405190151581526020016100d8565b6002545b6040519081526020016100d8565b6100f461012436600461087e565b610290565b604051601281526020016100d8565b61014b610146366004610854565b6102b4565b005b61010861015b3660046108bb565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6100cb6102c2565b6100f4610199366004610854565b6102d1565b6101086101ac3660046108dd565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6060600380546101f390610910565b80601f016020809104026020016040519081016040528092919081815260200182805461021f90610910565b801561026c5780601f106102415761010080835404028352916020019161026c565b820191906000526020600020905b81548152906001019060200180831161024f57829003601f168201915b5050505050905090565b6000336102848185856102df565b60019150505b92915050565b60003361029e8582856102f1565b6102a98585856103c5565b506001949350505050565b6102be8282610470565b5050565b6060600480546101f390610910565b6000336102848185856103c5565b6102ec83838360016104cc565b505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146103bf57818110156103b0576040517ffb8f41b200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416600482015260248101829052604481018390526064015b60405180910390fd5b6103bf848484840360006104cc565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8316610415576040517f96c6fd1e000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff8216610465576040517fec442f05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b6102ec838383610614565b73ffffffffffffffffffffffffffffffffffffffff82166104c0576040517fec442f05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b6102be60008383610614565b73ffffffffffffffffffffffffffffffffffffffff841661051c576040517fe602df05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff831661056c576040517f94280d62000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260016020908152604080832093871683529290522082905580156103bf578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161060691815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff831661064c5780600260008282546106419190610963565b909155506106fe9050565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260208190526040902054818110156106d2576040517fe450d38c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8516600482015260248101829052604481018390526064016103a7565b73ffffffffffffffffffffffffffffffffffffffff841660009081526020819052604090209082900390555b73ffffffffffffffffffffffffffffffffffffffff821661072757600280548290039055610753565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090208054820190555b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516107b291815260200190565b60405180910390a3505050565b602081526000825180602084015260005b818110156107ed57602081860181015160408684010152016107d0565b5060006040828501015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011684010191505092915050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461084f57600080fd5b919050565b6000806040838503121561086757600080fd5b6108708361082b565b946020939093013593505050565b60008060006060848603121561089357600080fd5b61089c8461082b565b92506108aa6020850161082b565b929592945050506040919091013590565b6000602082840312156108cd57600080fd5b6108d68261082b565b9392505050565b600080604083850312156108f057600080fd5b6108f98361082b565b91506109076020840161082b565b90509250929050565b600181811c9082168061092457607f821691505b60208210810361095d577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b8082018082111561028a577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea26469706673582212207e804ca539d49155d2b6bc19268ce22f9f857027c75247d69fb0d56a089c93d464736f6c634300081a003360a060405234801561001057600080fd5b5060405161140b38038061140b83398101604081905261002f916101b3565b60016000556002805460ff191690556001600160a01b038316158061005b57506001600160a01b038216155b8061006d57506001600160a01b038116155b1561008b5760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b0383166080526100a3600082610102565b506100ce7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a82610102565b506100f97f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e483610102565b505050506101f6565b60008281526001602090815260408083206001600160a01b038516845290915281205460ff1661018d5760008381526001602081815260408084206001600160a01b0387168086529252808420805460ff19169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a4506001610191565b5060005b92915050565b80516001600160a01b03811681146101ae57600080fd5b919050565b6000806000606084860312156101c857600080fd5b6101d184610197565b92506101df60208501610197565b91506101ed60408501610197565b90509250925092565b6080516111de61022d60003960008181610132015281816103c5015281816104270152818161065801526106ba01526111de6000f3fe608060405234801561001057600080fd5b50600436106101005760003560e01c80638456cb5911610097578063c8a0236211610066578063c8a0236214610276578063d547741f14610289578063d9caed121461029c578063e63ab1e9146102af57600080fd5b80638456cb59146101f957806385f438c11461020157806391d1485414610228578063a217fddf1461026e57600080fd5b80632f2ff15d116100d35780632f2ff15d146101c057806336568abe146101d35780633f4ba83a146101e65780635c975abb146101ee57600080fd5b806301ffc9a714610105578063116191b61461012d57806321fc65f214610179578063248a9ca31461018e575b600080fd5b610118610113366004610f04565b6102d6565b60405190151581526020015b60405180910390f35b6101547f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610124565b61018c610187366004610f6f565b61036f565b005b6101b261019c36600461100c565b6000908152600160208190526040909120015490565b604051908152602001610124565b61018c6101ce366004611025565b610511565b61018c6101e1366004611025565b61053d565b61018c61059b565b60025460ff16610118565b61018c6105d0565b6101b27f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b610118610236366004611025565b600091825260016020908152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b6101b2600081565b61018c610284366004610f6f565b610602565b61018c610297366004611025565b61078a565b61018c6102aa366004611051565b6107b0565b6101b27f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061036957507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b61037761087d565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e46103a1816108c0565b6103a96108ca565b6103ea73ffffffffffffffffffffffffffffffffffffffff87167f000000000000000000000000000000000000000000000000000000000000000086610909565b6040517f5131ab5900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690635131ab599061046490899089908990899089906004016110d7565b600060405180830381600087803b15801561047e57600080fd5b505af1158015610492573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167f85b5be9cf454e05e0bddf49315178102227c312078eefa3c00294fb4d912ae4e8686866040516104f793929190611134565b60405180910390a35061050a6001600055565b5050505050565b6000828152600160208190526040909120015461052d816108c0565b6105378383610996565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8116331461058c576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6105968282610a61565b505050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a6105c5816108c0565b6105cd610b20565b50565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a6105fa816108c0565b6105cd610b9d565b61060a61087d565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e4610634816108c0565b61063c6108ca565b61067d73ffffffffffffffffffffffffffffffffffffffff87167f000000000000000000000000000000000000000000000000000000000000000086610909565b6040517fb8969bd400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063b8969bd4906106f790899089908990899089906004016110d7565b600060405180830381600087803b15801561071157600080fd5b505af1158015610725573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fb9d4efa96044e5f5e03e696fa9ae2ff66911cc27e8a637c3627c75bc5b2241c88686866040516104f793929190611134565b600082815260016020819052604090912001546107a6816108c0565b6105378383610a61565b6107b861087d565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e46107e2816108c0565b6107ea6108ca565b61080b73ffffffffffffffffffffffffffffffffffffffff85168484610909565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f9b1bfa7fa9ee420a16e124f794c35ac9f90472acc99140eb2f6447c714cad8eb8460405161086a91815260200190565b60405180910390a3506105966001600055565b6002600054036108b9576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b6105cd8133610bf8565b60025460ff1615610907576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6040805173ffffffffffffffffffffffffffffffffffffffff8416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb00000000000000000000000000000000000000000000000000000000179052610596908490610c89565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff16610a5957600083815260016020818152604080842073ffffffffffffffffffffffffffffffffffffffff8716808652925280842080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a4506001610369565b506000610369565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff1615610a5957600083815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8616808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a4506001610369565b610b28610d1f565b600280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b610ba56108ca565b600280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258610b733390565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16610c85576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82166004820152602481018390526044015b60405180910390fd5b5050565b6000610cab73ffffffffffffffffffffffffffffffffffffffff841683610d5b565b90508051600014158015610cd0575080806020019051810190610cce9190611157565b155b15610596576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84166004820152602401610c7c565b60025460ff16610907576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6060610d6983836000610d70565b9392505050565b606081471015610dae576040517fcd786059000000000000000000000000000000000000000000000000000000008152306004820152602401610c7c565b6000808573ffffffffffffffffffffffffffffffffffffffff168486604051610dd79190611179565b60006040518083038185875af1925050503d8060008114610e14576040519150601f19603f3d011682016040523d82523d6000602084013e610e19565b606091505b5091509150610e29868383610e33565b9695505050505050565b606082610e4857610e4382610ec2565b610d69565b8151158015610e6c575073ffffffffffffffffffffffffffffffffffffffff84163b155b15610ebb576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85166004820152602401610c7c565b5080610d69565b805115610ed25780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060208284031215610f1657600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610d6957600080fd5b803573ffffffffffffffffffffffffffffffffffffffff81168114610f6a57600080fd5b919050565b600080600080600060808688031215610f8757600080fd5b610f9086610f46565b9450610f9e60208701610f46565b935060408601359250606086013567ffffffffffffffff811115610fc157600080fd5b8601601f81018813610fd257600080fd5b803567ffffffffffffffff811115610fe957600080fd5b886020828401011115610ffb57600080fd5b959894975092955050506020019190565b60006020828403121561101e57600080fd5b5035919050565b6000806040838503121561103857600080fd5b8235915061104860208401610f46565b90509250929050565b60008060006060848603121561106657600080fd5b61106f84610f46565b925061107d60208501610f46565b929592945050506040919091013590565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff8616815273ffffffffffffffffffffffffffffffffffffffff8516602082015283604082015260806060820152600061112960808301848661108e565b979650505050505050565b83815260406020820152600061114e60408301848661108e565b95945050505050565b60006020828403121561116957600080fd5b81518015158114610d6957600080fd5b6000825160005b8181101561119a5760208186018101518583015201611180565b50600092019182525091905056fea264697066735822122035ca457bdc8b45adde9844ff8416a0abd723c23055fd6933ddc05523b5f5b6de64736f6c634300081a003360c060405260001960035534801561001657600080fd5b506040516117f93803806117f9833981016040819052610035916101f5565b60016000819055805460ff19169055838383836001600160a01b038416158061006557506001600160a01b038316155b8061007757506001600160a01b038216155b8061008957506001600160a01b038116155b156100a75760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b03808516608052831660a0526100c5600082610129565b506100f07f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e483610129565b5061011b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a82610129565b505050505050505050610249565b60008281526002602090815260408083206001600160a01b038516845290915281205460ff166101cf5760008381526002602090815260408083206001600160a01b03861684529091529020805460ff191660011790556101873390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45060016101d3565b5060005b92915050565b80516001600160a01b03811681146101f057600080fd5b919050565b6000806000806080858703121561020b57600080fd5b610214856101d9565b9350610222602086016101d9565b9250610230604086016101d9565b915061023e606086016101d9565b905092959194509250565b60805160a0516115306102c9600039600081816102120152818161046f015281816105b1015281816106770152818161077c0152818161089e01528181610a5201528181610b9401528181610c5a0152610db10152600081816101c60152818161057b0152818161064801528181610b5e0152610c2b01526115306000f3fe608060405234801561001057600080fd5b506004361061016c5760003560e01c80635e3e9fef116100cd57806391d1485411610081578063d547741f11610066578063d547741f14610354578063d5abeb0114610367578063e63ab1e91461037057600080fd5b806391d1485414610306578063a217fddf1461034c57600080fd5b8063743e0c9b116100b2578063743e0c9b146102c45780638456cb59146102d757806385f438c1146102df57600080fd5b80635e3e9fef1461029e5780636f8b44b0146102b157600080fd5b8063248a9ca31161012457806336568abe1161010957806336568abe146102785780633f4ba83a1461028b5780635c975abb1461029357600080fd5b8063248a9ca3146102345780632f2ff15d1461026557600080fd5b8063106e629011610155578063106e6290146101ae578063116191b6146101c157806321e093b11461020d57600080fd5b806301ffc9a71461017157806302d5c89914610199575b600080fd5b61018461017f366004611262565b610397565b60405190151581526020015b60405180910390f35b6101ac6101a73660046112d4565b610430565b005b6101ac6101bc366004611366565b61073d565b6101e87f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610190565b6101e87f000000000000000000000000000000000000000000000000000000000000000081565b610257610242366004611399565b60009081526002602052604090206001015490565b604051908152602001610190565b6101ac6102733660046113b2565b61095a565b6101ac6102863660046113b2565b610985565b6101ac6109de565b60015460ff16610184565b6101ac6102ac3660046112d4565b610a13565b6101ac6102bf366004611399565b610d06565b6101ac6102d2366004611399565b610d74565b6101ac610e1e565b6102577f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b6101846103143660046113b2565b600091825260026020908152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b610257600081565b6101ac6103623660046113b2565b610e50565b61025760035481565b6102577f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061042a57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b610438610e75565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461046281610eb8565b61046a610ec2565b6003547f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156104d8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104fc91906113de565b61050690876113f7565b111561053e576040517fc30436e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f1e458bee00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116600483015260248201879052604482018490527f00000000000000000000000000000000000000000000000000000000000000001690631e458bee90606401600060405180830381600087803b1580156105f557600080fd5b505af1158015610609573d6000803e3d6000fd5b50506040517fb8969bd400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016925063b8969bd491506106a7907f0000000000000000000000000000000000000000000000000000000000000000908a908a908a908a9060040161147a565b600060405180830381600087803b1580156106c157600080fd5b505af11580156106d5573d6000803e3d6000fd5b505050508573ffffffffffffffffffffffffffffffffffffffff167fba96f26bdda53eb8c8ba39045dfb4ff39753fbc7a6edcf250a88e75e78d102fe868686604051610723939291906114d7565b60405180910390a2506107366001600055565b5050505050565b610745610e75565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461076f81610eb8565b610777610ec2565b6003547f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156107e5573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061080991906113de565b61081390856113f7565b111561084b576040517fc30436e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f1e458bee00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff858116600483015260248201859052604482018490527f00000000000000000000000000000000000000000000000000000000000000001690631e458bee90606401600060405180830381600087803b1580156108e257600080fd5b505af11580156108f6573d6000803e3d6000fd5b505050508373ffffffffffffffffffffffffffffffffffffffff167f884edad9ce6fa2440d8a54cc123490eb96d2768479d49ff9c7366125a94243648460405161094291815260200190565b60405180910390a2506109556001600055565b505050565b60008281526002602052604090206001015461097581610eb8565b61097f8383610f01565b50505050565b73ffffffffffffffffffffffffffffffffffffffff811633146109d4576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6109558282611001565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610a0881610eb8565b610a106110c0565b50565b610a1b610e75565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e4610a4581610eb8565b610a4d610ec2565b6003547f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610abb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610adf91906113de565b610ae990876113f7565b1115610b21576040517fc30436e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f1e458bee00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116600483015260248201879052604482018490527f00000000000000000000000000000000000000000000000000000000000000001690631e458bee90606401600060405180830381600087803b158015610bd857600080fd5b505af1158015610bec573d6000803e3d6000fd5b50506040517f5131ab5900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169250635131ab599150610c8a907f0000000000000000000000000000000000000000000000000000000000000000908a908a908a908a9060040161147a565b600060405180830381600087803b158015610ca457600080fd5b505af1158015610cb8573d6000803e3d6000fd5b505050508573ffffffffffffffffffffffffffffffffffffffff167f7772f56296d3a5202974a45c61c9188d844ab4d6eeb18c851e4b8d5384ca6ced868686604051610723939291906114d7565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e4610d3081610eb8565b610d38610ec2565b60038290556040518281527f7810bd47de260c3e9ee10061cf438099dd12256c79485f12f94dbccc981e806c9060200160405180910390a15050565b610d7c610ec2565b6040517f79cc6790000000000000000000000000000000000000000000000000000000008152336004820152602481018290527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16906379cc679090604401600060405180830381600087803b158015610e0a57600080fd5b505af1158015610736573d6000803e3d6000fd5b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610e4881610eb8565b610a1061113d565b600082815260026020526040902060010154610e6b81610eb8565b61097f8383611001565b600260005403610eb1576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b610a108133611196565b60015460ff1615610eff576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff16610ff957600083815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff86168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055610f973390565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a450600161042a565b50600061042a565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff1615610ff957600083815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8616808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a450600161042a565b6110c8611226565b600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b611145610ec2565b600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016811790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25833611113565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16611222576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff821660048201526024810183905260440160405180910390fd5b5050565b60015460ff16610eff576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006020828403121561127457600080fd5b81357fffffffff00000000000000000000000000000000000000000000000000000000811681146112a457600080fd5b9392505050565b803573ffffffffffffffffffffffffffffffffffffffff811681146112cf57600080fd5b919050565b6000806000806000608086880312156112ec57600080fd5b6112f5866112ab565b945060208601359350604086013567ffffffffffffffff81111561131857600080fd5b8601601f8101881361132957600080fd5b803567ffffffffffffffff81111561134057600080fd5b88602082840101111561135257600080fd5b959894975060200195606001359392505050565b60008060006060848603121561137b57600080fd5b611384846112ab565b95602085013595506040909401359392505050565b6000602082840312156113ab57600080fd5b5035919050565b600080604083850312156113c557600080fd5b823591506113d5602084016112ab565b90509250929050565b6000602082840312156113f057600080fd5b5051919050565b8082018082111561042a577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff8616815273ffffffffffffffffffffffffffffffffffffffff851660208201528360408201526080606082015260006114cc608083018486611431565b979650505050505050565b8381526040602082015260006114f1604083018486611431565b9594505050505056fea264697066735822122083f8ba25d15d0dacb4bf73d1472e680a549b02f1b26b83dcb21bfef553fb6e1d64736f6c634300081a00336080604052348015600f57600080fd5b506001600055610d3a806100246000396000f3fe6080604052600436106100635760003560e01c8063c513169111610040578063c5131691146100c1578063e04d4f97146100e1578063f05b6abf146100f457005b8063357fc5a21461006c5780636ed701691461008c5780638fcaa0b5146100a157005b3661006a57005b005b34801561007857600080fd5b5061006a6100873660046106c0565b610114565b34801561009857600080fd5b5061006a6101aa565b3480156100ad57600080fd5b5061006a6100bc3660046106fc565b6101df565b3480156100cd57600080fd5b5061006a6100dc3660046106c0565b61021e565b61006a6100ef366004610895565b6102f9565b34801561010057600080fd5b5061006a61010f366004610981565b61033d565b61011c610372565b61013e73ffffffffffffffffffffffffffffffffffffffff83163383866103b5565b604080513381526020810185905273ffffffffffffffffffffffffffffffffffffffff848116828401528316606082015290517f2b58128f24a9f59127cc5b5430d70542b22220f2d9adaa86e442b816ab98af609181900360800190a16101a56001600055565b505050565b6040513381527fbcaadb46b82a48af60b608f58959ae6b8310d1b0a0d094c2e9ec3208ed39f2a09060200160405180910390a1565b7f0d3f65f00e631663aa85c96330b5c7a83bb29af3630c0063776f985edc3037aa33838360405161021293929190610a6b565b60405180910390a15050565b610226610372565b6000610233600285610ad5565b90508060000361026f576040517f1f2a200500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61029173ffffffffffffffffffffffffffffffffffffffff84163384846103b5565b604080513381526020810183905273ffffffffffffffffffffffffffffffffffffffff858116828401528416606082015290517f2b58128f24a9f59127cc5b5430d70542b22220f2d9adaa86e442b816ab98af609181900360800190a1506101a56001600055565b7f1f1ff1f5fb41346850b2f5c04e6c767e2f1c8a525c5c0c5cdb60cdf3ca5f62fa3334858585604051610330959493929190610b7e565b60405180910390a1505050565b7f74a53cd528a921fca7dbdee62f86819051d3cc98f214951f4238e8843f20b146338484846040516103309493929190610c08565b6002600054036103ae576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b6040805173ffffffffffffffffffffffffffffffffffffffff85811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd0000000000000000000000000000000000000000000000000000000017905261044a908590610450565b50505050565b600061047273ffffffffffffffffffffffffffffffffffffffff8416836104eb565b905080516000141580156104975750808060200190518101906104959190610ccb565b155b156101a5576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff841660048201526024015b60405180910390fd5b60606104f983836000610500565b9392505050565b60608147101561053e576040517fcd7860590000000000000000000000000000000000000000000000000000000081523060048201526024016104e2565b6000808573ffffffffffffffffffffffffffffffffffffffff1684866040516105679190610ce8565b60006040518083038185875af1925050503d80600081146105a4576040519150601f19603f3d011682016040523d82523d6000602084013e6105a9565b606091505b50915091506105b98683836105c3565b9695505050505050565b6060826105d8576105d382610652565b6104f9565b81511580156105fc575073ffffffffffffffffffffffffffffffffffffffff84163b155b1561064b576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff851660048201526024016104e2565b50806104f9565b8051156106625780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50565b803573ffffffffffffffffffffffffffffffffffffffff811681146106bb57600080fd5b919050565b6000806000606084860312156106d557600080fd5b833592506106e560208501610697565b91506106f360408501610697565b90509250925092565b6000806020838503121561070f57600080fd5b823567ffffffffffffffff81111561072657600080fd5b8301601f8101851361073757600080fd5b803567ffffffffffffffff81111561074e57600080fd5b85602082840101111561076057600080fd5b6020919091019590945092505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156107e6576107e6610770565b604052919050565b600082601f8301126107ff57600080fd5b813567ffffffffffffffff81111561081957610819610770565b61084a60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8401160161079f565b81815284602083860101111561085f57600080fd5b816020850160208301376000918101602001919091529392505050565b801515811461069457600080fd5b80356106bb8161087c565b6000806000606084860312156108aa57600080fd5b833567ffffffffffffffff8111156108c157600080fd5b6108cd868287016107ee565b9350506020840135915060408401356108e58161087c565b809150509250925092565b600067ffffffffffffffff82111561090a5761090a610770565b5060051b60200190565b600082601f83011261092557600080fd5b8135610938610933826108f0565b61079f565b8082825260208201915060208360051b86010192508583111561095a57600080fd5b602085015b8381101561097757803583526020928301920161095f565b5095945050505050565b60008060006060848603121561099657600080fd5b833567ffffffffffffffff8111156109ad57600080fd5b8401601f810186136109be57600080fd5b80356109cc610933826108f0565b8082825260208201915060208360051b8501019250888311156109ee57600080fd5b602084015b83811015610a3057803567ffffffffffffffff811115610a1257600080fd5b610a218b6020838901016107ee565b845250602092830192016109f3565b509550505050602084013567ffffffffffffffff811115610a5057600080fd5b610a5c86828701610914565b9250506106f36040850161088a565b73ffffffffffffffffffffffffffffffffffffffff8416815260406020820152816040820152818360608301376000818301606090810191909152601f9092017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016010192915050565b600082610b0b577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60005b83811015610b2b578181015183820152602001610b13565b50506000910152565b60008151808452610b4c816020860160208601610b10565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b73ffffffffffffffffffffffffffffffffffffffff8616815284602082015260a060408201526000610bb360a0830186610b34565b6060830194909452509015156080909101529392505050565b600081518084526020840193506020830160005b82811015610bfe578151865260209586019590910190600101610be0565b5093949350505050565b60006080820173ffffffffffffffffffffffffffffffffffffffff871683526080602084015280865180835260a08501915060a08160051b86010192506020880160005b82811015610c9b577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60878603018452610c86858351610b34565b94506020938401939190910190600101610c4c565b505050508281036040840152610cb18186610bcc565b915050610cc2606083018415159052565b95945050505050565b600060208284031215610cdd57600080fd5b81516104f98161087c565b60008251610cfa818460208701610b10565b919091019291505056fea2646970667358221220556072e1abafc3c4063b8cce832228b4f309b93726aaa6a6dfab20cb880c6d1864736f6c634300081a00336080604052348015600f57600080fd5b5060405161080c38038061080c833981016040819052602c916050565b600080546001600160a01b0319166001600160a01b0392909216919091179055607e565b600060208284031215606157600080fd5b81516001600160a01b0381168114607757600080fd5b9392505050565b61077f8061008d6000396000f3fe608060405234801561001057600080fd5b50600436106100415760003560e01c80630abd890514610046578063116191b61461005b578063865b36f6146100a4575b600080fd5b6100596100543660046104c4565b6100b7565b005b60005461007b9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b6100596100b236600461057f565b6102af565b60008383836040516024016100ce93929190610674565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe04d4f970000000000000000000000000000000000000000000000000000000017905260005490517f095ea7b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff91821660048201526024810189905291925086169063095ea7b3906044016020604051808303816000875af11580156101be573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101e2919061069e565b610218576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000546040517f7993c1e000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff90911690637993c1e090610274908a908a908a9087906004016106c2565b600060405180830381600087803b15801561028e57600080fd5b505af11580156102a2573d6000803e3d6000fd5b5050505050505050505050565b60008383836040516024016102c693929190610674565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe04d4f970000000000000000000000000000000000000000000000000000000017905260005490517f5d40e17800000000000000000000000000000000000000000000000000000000815291925073ffffffffffffffffffffffffffffffffffffffff1690635d40e1789061039690899089908690600401610714565b600060405180830381600087803b1580156103b057600080fd5b505af11580156103c4573d6000803e3d6000fd5b50505050505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600082601f83011261041057600080fd5b81356020830160008067ffffffffffffffff841115610431576104316103d0565b506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f85018116603f0116810181811067ffffffffffffffff8211171561047e5761047e6103d0565b60405283815290508082840187101561049657600080fd5b838360208301376000602085830101528094505050505092915050565b80151581146104c157600080fd5b50565b60008060008060008060c087890312156104dd57600080fd5b863567ffffffffffffffff8111156104f457600080fd5b61050089828a016103ff565b96505060208701359450604087013573ffffffffffffffffffffffffffffffffffffffff8116811461053157600080fd5b9350606087013567ffffffffffffffff81111561054d57600080fd5b61055989828a016103ff565b9350506080870135915060a0870135610571816104b3565b809150509295509295509295565b600080600080600060a0868803121561059757600080fd5b853567ffffffffffffffff8111156105ae57600080fd5b6105ba888289016103ff565b95505060208601359350604086013567ffffffffffffffff8111156105de57600080fd5b6105ea888289016103ff565b935050606086013591506080860135610602816104b3565b809150509295509295909350565b6000815180845260005b818110156106365760208185018101518683018201520161061a565b5060006020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b6060815260006106876060830186610610565b602083019490945250901515604090910152919050565b6000602082840312156106b057600080fd5b81516106bb816104b3565b9392505050565b6080815260006106d56080830187610610565b85602084015273ffffffffffffffffffffffffffffffffffffffff8516604084015282810360608401526107098185610610565b979650505050505050565b6060815260006107276060830186610610565b846020840152828103604084015261073f8185610610565b969550505050505056fea26469706673582212200eb2d64f6bd03198b904dea273f648b094222e30263233833cd64525d96f81ba64736f6c634300081a0033608060405234801561001057600080fd5b50604051610b3f380380610b3f83398101604081905261002f916100b9565b600380546001600160a01b038086166001600160a01b0319928316179092556004805485841690831617905560058054928416929091169190911790556040517f80699e81136d69cb8367ad52a994e25c722a86da654b561d0c14b61a777e7ac590600090a15050506100fc565b80516001600160a01b03811681146100b457600080fd5b919050565b6000806000606084860312156100ce57600080fd5b6100d78461009d565b92506100e56020850161009d565b91506100f36040850161009d565b90509250925092565b610a348061010b6000396000f3fe608060405234801561001057600080fd5b50600436106100c95760003560e01c806397770dff11610081578063d7fd7afb1161005b578063d7fd7afb146101f2578063d936a01214610220578063ee2815ba1461024057600080fd5b806397770dff146101b9578063a7cb0507146101cc578063c63585cc146101df57600080fd5b8063513a9c05116100b2578063513a9c0514610143578063569541b914610179578063842da36d1461019957600080fd5b80630be15547146100ce5780633c669d551461012e575b600080fd5b6101046100dc36600461071e565b60016020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b61014161013c366004610760565b610253565b005b61010461015136600461071e565b60026020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b6003546101049073ffffffffffffffffffffffffffffffffffffffff1681565b6005546101049073ffffffffffffffffffffffffffffffffffffffff1681565b6101416101c73660046107fd565b6103a0565b6101416101da36600461081f565b610419565b6101046101ed366004610841565b610467565b61021261020036600461071e565b60006020819052908152604090205481565b604051908152602001610125565b6004546101049073ffffffffffffffffffffffffffffffffffffffff1681565b61014161024e366004610884565b61059c565b604080516080810182526000606082019081528152336020820152468183015290517fa9059cbb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff87811660048301526024820186905286169063a9059cbb906044016020604051808303816000875af11580156102e7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061030b91906108b0565b506040517fde43156e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff87169063de43156e90610366908490899089908990899060040161091b565b600060405180830381600087803b15801561038057600080fd5b505af1158015610394573d6000803e3d6000fd5b50505050505050505050565b600380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527fdba79d534382d1a8ae108e4c8ecb27c6ae42ab8b91d44eedf88bd329f3868d5e9060200160405180910390a150565b6000828152602081815260409182902083905581518481529081018390527f49f492222906ac486c3c1401fa545626df1f0c0e5a77a05597ea2ed66af9850d91015b60405180910390a15050565b60008060006104768585610620565b6040517fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606084811b8216602084015283901b166034820152919350915086906048016040516020818303038152906040528051906020012060405160200161055c9291907fff00000000000000000000000000000000000000000000000000000000000000815260609290921b7fffffffffffffffffffffffffffffffffffffffff00000000000000000000000016600183015260158201527f96e8ac4277198ff8b6f785478aa9a39f403cb768dd02cbee326c3e7da348845f603582015260550190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291905280516020909101209695505050505050565b60008281526001602090815260409182902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff85169081179091558251858152918201527fd1b36d30f6248e97c473b4d1348ca164a4ef6759022f54a58ec200326c39c45d910161045b565b6000808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603610688576040517fcb1e7cfe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16106106c25782846106c5565b83835b909250905073ffffffffffffffffffffffffffffffffffffffff8216610717576040517f78b507da00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b9250929050565b60006020828403121561073057600080fd5b5035919050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461075b57600080fd5b919050565b60008060008060006080868803121561077857600080fd5b61078186610737565b945061078f60208701610737565b935060408601359250606086013567ffffffffffffffff8111156107b257600080fd5b8601601f810188136107c357600080fd5b803567ffffffffffffffff8111156107da57600080fd5b8860208284010111156107ec57600080fd5b959894975092955050506020019190565b60006020828403121561080f57600080fd5b61081882610737565b9392505050565b6000806040838503121561083257600080fd5b50508035926020909101359150565b60008060006060848603121561085657600080fd5b61085f84610737565b925061086d60208501610737565b915061087b60408501610737565b90509250925092565b6000806040838503121561089757600080fd5b823591506108a760208401610737565b90509250929050565b6000602082840312156108c257600080fd5b8151801515811461081857600080fd5b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b60808152600086516060608084015280518060e085015260005b81811015610953576020818401810151610100878401015201610935565b5060008482016101000152602089015173ffffffffffffffffffffffffffffffffffffffff811660a0860152601f9091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168401915050604088015160c084015273ffffffffffffffffffffffffffffffffffffffff871660208401528560408401526101008382030160608401526109f2610100820185876108d2565b9897505050505050505056fea264697066735822122044450a00a3ccd112d5abf008f947389875d330f56afa78b6ab0863159c2d87f664736f6c634300081a003360e060405234801561001057600080fd5b50604051611bb9380380611bb983398101604081905261002f9161020e565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461006357604051632b2add3d60e01b815260040160405180910390fd5b6001600160a01b038216158061008057506001600160a01b038116155b1561009e5760405163d92e233d60e01b815260040160405180910390fd5b60066100aa8982610360565b5060076100b78882610360565b5060ff861660c05260808590528360028111156100d6576100d661041e565b60a08160028111156100ea576100ea61041e565b905250600192909255600080546001600160a01b039283166001600160a01b03199182161790915560088054929093169116179055506104349350505050565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261015157600080fd5b81516001600160401b0381111561016a5761016a61012a565b604051601f8201601f19908116603f011681016001600160401b03811182821017156101985761019861012a565b6040528181528382016020018510156101b057600080fd5b60005b828110156101cf576020818601810151838301820152016101b3565b506000918101602001919091529392505050565b8051600381106101f257600080fd5b919050565b80516001600160a01b03811681146101f257600080fd5b600080600080600080600080610100898b03121561022b57600080fd5b88516001600160401b0381111561024157600080fd5b61024d8b828c01610140565b60208b015190995090506001600160401b0381111561026b57600080fd5b6102778b828c01610140565b975050604089015160ff8116811461028e57600080fd5b60608a015190965094506102a460808a016101e3565b60a08a015190945092506102ba60c08a016101f7565b91506102c860e08a016101f7565b90509295985092959890939650565b600181811c908216806102eb57607f821691505b60208210810361030b57634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111561035b57806000526020600020601f840160051c810160208510156103385750805b601f840160051c820191505b818110156103585760008155600101610344565b50505b505050565b81516001600160401b038111156103795761037961012a565b61038d8161038784546102d7565b84610311565b6020601f8211600181146103c157600083156103a95750848201515b600019600385901b1c1916600184901b178455610358565b600084815260208120601f198516915b828110156103f157878501518255602094850194600190920191016103d1565b508482101561040f5786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b634e487b7160e01b600052602160045260246000fd5b60805160a05160c05161174861047160003960006102170152600061033a0152600081816102eb01528181610ad70152610bdd01526117486000f3fe608060405234801561001057600080fd5b50600436106101985760003560e01c80638b851b95116100e3578063ccc775991161008c578063eddeb12311610066578063eddeb12314610431578063f2441b3214610444578063f687d12a1461046457600080fd5b8063ccc77599146103a4578063d9eeebed146103b7578063dd62ed3e146103eb57600080fd5b8063a9059cbb116100bd578063a9059cbb14610369578063c70126261461037c578063c835d7cc1461038f57600080fd5b80638b851b951461030d57806395d89b411461032d578063a3413d031461033557600080fd5b80633ce4a5bc116101455780634d8943bb1161011f5780634d8943bb146102a757806370a08231146102b057806385e1f4d0146102e657600080fd5b80633ce4a5bc1461024157806342966c681461028157806347e7ef241461029457600080fd5b806318160ddd1161017657806318160ddd146101f557806323b872dd146101fd578063313ce5671461021057600080fd5b806306fdde031461019d578063091d2788146101bb578063095ea7b3146101d2575b600080fd5b6101a5610477565b6040516101b29190611327565b60405180910390f35b6101c460015481565b6040519081526020016101b2565b6101e56101e0366004611366565b610509565b60405190151581526020016101b2565b6005546101c4565b6101e561020b366004611392565b610520565b60405160ff7f00000000000000000000000000000000000000000000000000000000000000001681526020016101b2565b61025c73735b14bb79463307aacbed86daf3322b1e6226ab81565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101b2565b6101e561028f3660046113d3565b6105b7565b6101e56102a2366004611366565b6105cb565b6101c460025481565b6101c46102be3660046113ec565b73ffffffffffffffffffffffffffffffffffffffff1660009081526003602052604090205490565b6101c47f000000000000000000000000000000000000000000000000000000000000000081565b60085461025c9073ffffffffffffffffffffffffffffffffffffffff1681565b6101a561071f565b61035c7f000000000000000000000000000000000000000000000000000000000000000081565b6040516101b29190611409565b6101e5610377366004611366565b61072e565b6101e561038a366004611479565b61073b565b6103a261039d3660046113ec565b61088a565b005b6103a26103b23660046113ec565b61099e565b6103bf610aab565b6040805173ffffffffffffffffffffffffffffffffffffffff90931683526020830191909152016101b2565b6101c46103f9366004611571565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260046020908152604080832093909416825291909152205490565b6103a261043f3660046113d3565b610cc9565b60005461025c9073ffffffffffffffffffffffffffffffffffffffff1681565b6103a26104723660046113d3565b610d4b565b606060068054610486906115aa565b80601f01602080910402602001604051908101604052809291908181526020018280546104b2906115aa565b80156104ff5780601f106104d4576101008083540402835291602001916104ff565b820191906000526020600020905b8154815290600101906020018083116104e257829003601f168201915b5050505050905090565b6000610516338484610dcd565b5060015b92915050565b600061052d848484610ed6565b73ffffffffffffffffffffffffffffffffffffffff8416600090815260046020908152604080832033845290915290205482811015610598576040517f10bad14700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6105ac85336105a7868561162c565b610dcd565b506001949350505050565b60006105c33383611091565b506001919050565b60003373735b14bb79463307aacbed86daf3322b1e6226ab14801590610609575060005473ffffffffffffffffffffffffffffffffffffffff163314155b801561062d575060085473ffffffffffffffffffffffffffffffffffffffff163314155b15610664576040517fddb5de5e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61066e83836111d3565b6040517f735b14bb79463307aacbed86daf3322b1e6226ab000000000000000000000000602082015273ffffffffffffffffffffffffffffffffffffffff8416907f67fc7bdaed5b0ec550d8706b87d60568ab70c6b781263c70101d54cd1564aab390603401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529082905261070e91869061163f565b60405180910390a250600192915050565b606060078054610486906115aa565b6000610516338484610ed6565b6000806000610748610aab565b6040517f23b872dd00000000000000000000000000000000000000000000000000000000815233600482015273735b14bb79463307aacbed86daf3322b1e6226ab602482015260448101829052919350915073ffffffffffffffffffffffffffffffffffffffff8316906323b872dd906064016020604051808303816000875af11580156107da573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107fe9190611661565b610834576040517f0a7cd6d600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61083e3385611091565b60025460405133917f9ffbffc04a397460ee1dbe8c9503e098090567d6b7f4b3c02a8617d800b6d9559161087791899189918791611683565b60405180910390a2506001949350505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab146108d7576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116610924576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527fd55614e962c5fd6ece71614f6348d702468a997a394dd5e5c1677950226d97ae906020015b60405180910390a150565b3373735b14bb79463307aacbed86daf3322b1e6226ab146109eb576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116610a38576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600880547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527f88815d964e380677e86d817e7d65dea59cb7b4c3b5b7a0c8ec7ea4a74f90a38790602001610993565b600080546040517f0be155470000000000000000000000000000000000000000000000000000000081527f000000000000000000000000000000000000000000000000000000000000000060048201528291829173ffffffffffffffffffffffffffffffffffffffff90911690630be1554790602401602060405180830381865afa158015610b3e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b6291906116b2565b905073ffffffffffffffffffffffffffffffffffffffff8116610bb1576040517f78fff39600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080546040517fd7fd7afb0000000000000000000000000000000000000000000000000000000081527f0000000000000000000000000000000000000000000000000000000000000000600482015273ffffffffffffffffffffffffffffffffffffffff9091169063d7fd7afb90602401602060405180830381865afa158015610c40573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c6491906116cf565b905080600003610ca0576040517fe661aed000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060025460015483610cb391906116e8565b610cbd91906116ff565b92959294509192505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610d16576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60028190556040518181527fef13af88e424b5d15f49c77758542c1938b08b8b95b91ed0751f98ba99000d8f90602001610993565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610d98576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018190556040518181527fff5788270f43bfc1ca41c503606d2594aa3023a1a7547de403a3e2f146a4a80a90602001610993565b73ffffffffffffffffffffffffffffffffffffffff8316610e1a576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216610e67576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff83811660008181526004602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8316610f23576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216610f70576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff831660009081526003602052604090205481811015610fd0576040517ffe382aa700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610fda828261162c565b73ffffffffffffffffffffffffffffffffffffffff808616600090815260036020526040808220939093559085168152908120805484929061101d9084906116ff565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161108391815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff82166110de576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff82166000908152600360205260409020548181101561113e576040517ffe382aa700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611148828261162c565b73ffffffffffffffffffffffffffffffffffffffff84166000908152600360205260408120919091556005805484929061118390849061162c565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90602001610ec9565b73ffffffffffffffffffffffffffffffffffffffff8216611220576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b806005600082825461123291906116ff565b909155505073ffffffffffffffffffffffffffffffffffffffff82166000908152600360205260408120805483929061126c9084906116ff565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6000815180845260005b818110156112e9576020818501810151868301820152016112cd565b5060006020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b60208152600061133a60208301846112c3565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff8116811461136357600080fd5b50565b6000806040838503121561137957600080fd5b823561138481611341565b946020939093013593505050565b6000806000606084860312156113a757600080fd5b83356113b281611341565b925060208401356113c281611341565b929592945050506040919091013590565b6000602082840312156113e557600080fd5b5035919050565b6000602082840312156113fe57600080fd5b813561133a81611341565b6020810160038310611444577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000806040838503121561148c57600080fd5b823567ffffffffffffffff8111156114a357600080fd5b8301601f810185136114b457600080fd5b803567ffffffffffffffff8111156114ce576114ce61144a565b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8501160116810181811067ffffffffffffffff8211171561153a5761153a61144a565b60405281815282820160200187101561155257600080fd5b8160208401602083013760006020928201830152969401359450505050565b6000806040838503121561158457600080fd5b823561158f81611341565b9150602083013561159f81611341565b809150509250929050565b600181811c908216806115be57607f821691505b6020821081036115f7577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8181038181111561051a5761051a6115fd565b60408152600061165260408301856112c3565b90508260208301529392505050565b60006020828403121561167357600080fd5b8151801515811461133a57600080fd5b60808152600061169660808301876112c3565b6020830195909552506040810192909252606090910152919050565b6000602082840312156116c457600080fd5b815161133a81611341565b6000602082840312156116e157600080fd5b5051919050565b808202811582820484141761051a5761051a6115fd565b8082018082111561051a5761051a6115fd56fea26469706673582212204013e39523742118b3f2227e145ee7e48176ba6aebead33c596dca2acb59a74c64736f6c634300081a0033a26469706673582212200e76601707f5dce5f4f3b43857b92e778306fdf7c3344ac7c3bc8c98bc3d4cfa64736f6c634300081a0033", + ABI: "[{\"type\":\"function\",\"name\":\"IS_TEST\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeArtifacts\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedArtifacts_\",\"type\":\"string[]\",\"internalType\":\"string[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeContracts\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedContracts_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeSelectors\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedSelectors_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzSelector[]\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"selectors\",\"type\":\"bytes4[]\",\"internalType\":\"bytes4[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeSenders\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedSenders_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"failed\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"setUp\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"targetArtifactSelectors\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedArtifactSelectors_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzArtifactSelector[]\",\"components\":[{\"name\":\"artifact\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"selectors\",\"type\":\"bytes4[]\",\"internalType\":\"bytes4[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetArtifacts\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedArtifacts_\",\"type\":\"string[]\",\"internalType\":\"string[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetContracts\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedContracts_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetInterfaces\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedInterfaces_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzInterface[]\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"artifacts\",\"type\":\"string[]\",\"internalType\":\"string[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetSelectors\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedSelectors_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzSelector[]\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"selectors\",\"type\":\"bytes4[]\",\"internalType\":\"bytes4[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetSenders\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedSenders_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"testCallReceiverEVMFromSenderZEVM\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testCallReceiverEVMFromZEVM\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawAndCallReceiverEVMFromSenderZEVM\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawAndCallReceiverEVMFromZEVM\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"event\",\"name\":\"Call\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"receiver\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Call\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"chainId\",\"type\":\"uint256\",\"indexed\":true,\"internalType\":\"uint256\"},{\"name\":\"receiver\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"message\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Deposit\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"receiver\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"asset\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Executed\",\"inputs\":[{\"name\":\"destination\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ExecutedWithERC20\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedERC20\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"token\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"destination\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedNoParams\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedNonPayable\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"strs\",\"type\":\"string[]\",\"indexed\":false,\"internalType\":\"string[]\"},{\"name\":\"nums\",\"type\":\"uint256[]\",\"indexed\":false,\"internalType\":\"uint256[]\"},{\"name\":\"flag\",\"type\":\"bool\",\"indexed\":false,\"internalType\":\"bool\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedPayable\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"str\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"num\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"flag\",\"type\":\"bool\",\"indexed\":false,\"internalType\":\"bool\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedRevert\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Reverted\",\"inputs\":[{\"name\":\"destination\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RevertedWithERC20\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Withdrawal\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"chainId\",\"type\":\"uint256\",\"indexed\":true,\"internalType\":\"uint256\"},{\"name\":\"receiver\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"zrc20\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"gasfee\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"protocolFlatFee\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"message\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log\",\"inputs\":[{\"name\":\"\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_address\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_array\",\"inputs\":[{\"name\":\"val\",\"type\":\"uint256[]\",\"indexed\":false,\"internalType\":\"uint256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_array\",\"inputs\":[{\"name\":\"val\",\"type\":\"int256[]\",\"indexed\":false,\"internalType\":\"int256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_array\",\"inputs\":[{\"name\":\"val\",\"type\":\"address[]\",\"indexed\":false,\"internalType\":\"address[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_bytes\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_bytes32\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_int\",\"inputs\":[{\"name\":\"\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_address\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_array\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"uint256[]\",\"indexed\":false,\"internalType\":\"uint256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_array\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"int256[]\",\"indexed\":false,\"internalType\":\"int256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_array\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"address[]\",\"indexed\":false,\"internalType\":\"address[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_bytes\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_bytes32\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_decimal_int\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"},{\"name\":\"decimals\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_decimal_uint\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"decimals\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_int\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_string\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_uint\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_string\",\"inputs\":[{\"name\":\"\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_uint\",\"inputs\":[{\"name\":\"\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"logs\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"ApprovalFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"CallerIsNotFungibleModule\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ConnectorInitialized\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"CustodyInitialized\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"DepositFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ExecutionFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"FailedZetaSent\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"GasFeeTransferFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientERC20Amount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientETHAmount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientZRC20Amount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientZetaAmount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidTarget\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OnlyWZETAOrFungible\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"WithdrawalFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZRC20BurnFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZRC20DepositFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZRC20TransferFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZeroAddress\",\"inputs\":[]}]", + Bin: "0x6080604052600c8054600160ff199182168117909255601f80549091169091179055348015602c57600080fd5b50620104f0806200003e6000396000f3fe608060405234801561001057600080fd5b506004361061011b5760003560e01c806385226c81116100b2578063b5508aa911610081578063d7a525fc11610066578063d7a525fc146101ec578063e20c9f71146101f4578063fa7626d4146101fc57600080fd5b8063b5508aa9146101cc578063ba414fa6146101d457600080fd5b806385226c8114610192578063916a17c6146101a75780639683c695146101bc578063b0464fdc146101c457600080fd5b80633f7286f4116100ee5780633f7286f414610165578063524744131461016d57806366d9a9a0146101755780636ff15ccc1461018a57600080fd5b80630a9254e4146101205780631ed7831c1461012a5780632ade3880146101485780633e5e3c231461015d575b600080fd5b610128610209565b005b61013261118d565b60405161013f9190617944565b60405180910390f35b6101506111ef565b60405161013f91906179e0565b610132611331565b610132611391565b6101286113f1565b61017d611c4e565b60405161013f9190617b46565b610128611dd0565b61019a6125e8565b60405161013f9190617be4565b6101af6126b8565b60405161013f9190617c5b565b6101286127b3565b6101af612d2f565b61019a612e2a565b6101dc612efa565b604051901515815260200161013f565b610128612fce565b6101326136b0565b601f546101dc9060ff1681565b602680547fffffffffffffffffffffffff00000000000000000000000000000000000000009081163017909155602780548216611234179055602880548216615678179055602e805490911661432117905560405161026790617829565b60408082526004908201527f746573740000000000000000000000000000000000000000000000000000000060608201526080602082018190526003908201527f54544b000000000000000000000000000000000000000000000000000000000060a082015260c001604051809103906000f0801580156102ec573d6000803e3d6000fd5b50602380547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039290921691909117905560405161033190617829565b604080825260049082018190527f7a6574610000000000000000000000000000000000000000000000000000000060608301526080602083018190528201527f5a4554410000000000000000000000000000000000000000000000000000000060a082015260c001604051809103906000f0801580156103b5573d6000803e3d6000fd5b50602480547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039283169081178255604080518082018252600e81527f4761746577617945564d2e736f6c0000000000000000000000000000000000006020820152602854602654925190861694810194909452604484019290925290921660648201526104a6919060840160408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fc0c53b8b00000000000000000000000000000000000000000000000000000000179052613710565b601f80547fffffffffffffffffffffff0000000000000000000000000000000000000000ff166101006001600160a01b0393841681029190911791829055602080549190920483167fffffffffffffffffffffffff0000000000000000000000000000000000000000909116811790915560285460265460405192939182169291169061053290617837565b6001600160a01b03938416815291831660208301529091166040820152606001604051809103906000f08015801561056e573d6000803e3d6000fd5b50602180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392831617905560205460245460285460265460405193851694928316939183169216906105c990617845565b6001600160a01b039485168152928416602084015290831660408301529091166060820152608001604051809103906000f08015801561060d573d6000803e3d6000fd5b50602280547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039283161790556028546040517fc88a5e6d00000000000000000000000000000000000000000000000000000000815291166004820152670de0b6b3a76400006024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c88a5e6d90604401600060405180830381600087803b1580156106b957600080fd5b505af11580156106cd573d6000803e3d6000fd5b50506026546040517f06447d560000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506306447d569150602401600060405180830381600087803b15801561074357600080fd5b505af1158015610757573d6000803e3d6000fd5b50506020546021546040517fae7a3a6f0000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201529116925063ae7a3a6f9150602401600060405180830381600087803b1580156107bd57600080fd5b505af11580156107d1573d6000803e3d6000fd5b50506020546022546040517f10188aef0000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152911692506310188aef9150602401600060405180830381600087803b15801561083757600080fd5b505af115801561084b573d6000803e3d6000fd5b505050507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b03166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156108ad57600080fd5b505af11580156108c1573d6000803e3d6000fd5b50506023546026546040517f40c10f190000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620f42406024820152911692506340c10f199150604401600060405180830381600087803b15801561093057600080fd5b505af1158015610944573d6000803e3d6000fd5b50506023546021546040517fa9059cbb0000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201526207a12060248201529116925063a9059cbb91506044016020604051808303816000875af11580156109b8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109dc9190617cf2565b506040516109e990617853565b604051809103906000f080158015610a05573d6000803e3d6000fd5b50602580547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03928316179055604080518082018252600f81527f476174657761795a45564d2e736f6c0000000000000000000000000000000000602082015260248054602e54935190851691810191909152919092166044820152610aee919060640160408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f485cc95500000000000000000000000000000000000000000000000000000000179052613710565b602980546001600160a01b03929092167fffffffffffffffffffffffff00000000000000000000000000000000000000009283168117909155602a80549092168117909155604051610b3f90617861565b6001600160a01b039091168152602001604051809103906000f080158015610b6b573d6000803e3d6000fd5b50602b80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03929092169190911790556040517f06447d5600000000000000000000000000000000000000000000000000000000815273735b14bb79463307aacbed86daf3322b1e6226ab6004820181905290737109709ecfa91a80626ff3989d68f67f5b1dd12d906306447d5690602401600060405180830381600087803b158015610c2057600080fd5b505af1158015610c34573d6000803e3d6000fd5b505050506000806000604051610c499061786f565b6001600160a01b03938416815291831660208301529091166040820152606001604051809103906000f080158015610c85573d6000803e3d6000fd5b50602c80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03928316908117909155602a54604051601293600193600093849391921690610cdb9061787d565b610cea96959493929190617d14565b604051809103906000f080158015610d06573d6000803e3d6000fd5b50602d80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03928316908117909155602c546040517fee2815ba0000000000000000000000000000000000000000000000000000000081526001600482015260248101929092529091169063ee2815ba90604401600060405180830381600087803b158015610d9d57600080fd5b505af1158015610db1573d6000803e3d6000fd5b5050602c546040517fa7cb050700000000000000000000000000000000000000000000000000000000815260016004820181905260248201526001600160a01b03909116925063a7cb05079150604401600060405180830381600087803b158015610e1b57600080fd5b505af1158015610e2f573d6000803e3d6000fd5b5050602d54602e546040517f47e7ef240000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620f42406024820152911692506347e7ef2491506044016020604051808303816000875af1158015610ea3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ec79190617cf2565b50602d54602b546040517f47e7ef240000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620f424060248201529116906347e7ef24906044016020604051808303816000875af1158015610f38573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f5c9190617cf2565b507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b03166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610fbb57600080fd5b505af1158015610fcf573d6000803e3d6000fd5b5050602e546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b15801561104557600080fd5b505af1158015611059573d6000803e3d6000fd5b5050602d54602a546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620f424060248201529116925063095ea7b391506044016020604051808303816000875af11580156110cd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110f19190617cf2565b506028546040517fc88a5e6d0000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152670de0b6b3a76400006024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c88a5e6d90604401600060405180830381600087803b15801561117257600080fd5b505af1158015611186573d6000803e3d6000fd5b5050505050565b606060168054806020026020016040519081016040528092919081815260200182805480156111e557602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116111c7575b5050505050905090565b6060601e805480602002602001604051908101604052809291908181526020016000905b8282101561132857600084815260208082206040805180820182526002870290920180546001600160a01b03168352600181018054835181870281018701909452808452939591948681019491929084015b8282101561131157838290600052602060002001805461128490617e09565b80601f01602080910402602001604051908101604052809291908181526020018280546112b090617e09565b80156112fd5780601f106112d2576101008083540402835291602001916112fd565b820191906000526020600020905b8154815290600101906020018083116112e057829003601f168201915b505050505081526020019060010190611265565b505050508152505081526020019060010190611213565b50505050905090565b606060188054806020026020016040519081016040528092919081815260200182805480156111e5576020028201919060005260206000209081546001600160a01b031681526001909101906020018083116111c7575050505050905090565b606060178054806020026020016040519081016040528092919081815260200182805480156111e5576020028201919060005260206000209081546001600160a01b031681526001909101906020018083116111c7575050505050905090565b604080518082018252600681527f48656c6c6f2100000000000000000000000000000000000000000000000000006020820152602d54602b5492517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b0393841660048201529192602a92600192670de0b6b3a7640000926000929116906370a0823190602401602060405180830381865afa15801561149d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114c19190617e56565b6040519091506000907fe04d4f9700000000000000000000000000000000000000000000000000000000906114fe90889088908890602401617e6f565b60408051601f19818403018152918152602080830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909516949094179093526025549051919350600092611597926001600160a01b03909216910160609190911b6bffffffffffffffffffffffff1916815260140190565b60408051601f1981840301815290829052602d546115c892620f4240916001600160a01b0316908690602401617e99565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f7993c1e000000000000000000000000000000000000000000000000000000000179052602a5490517ff30c7ba3000000000000000000000000000000000000000000000000000000008152919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f30c7ba391611685916001600160a01b0391909116906000908690600401617ed8565b600060405180830381600087803b15801561169f57600080fd5b505af11580156116b3573d6000803e3d6000fd5b5050602e546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b15801561172957600080fd5b505af115801561173d573d6000803e3d6000fd5b5050602b5460255460405160609190911b6bffffffffffffffffffffffff191660208201526001600160a01b039091169250630abd8905915060340160408051601f1981840301815290829052602d547fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1683526117d792620f4240916001600160a01b0316908d908d908d90600401617f00565b600060405180830381600087803b1580156117f157600080fd5b505af1158015611805573d6000803e3d6000fd5b50506020546040517fc88a5e6d0000000000000000000000000000000000000000000000000000000081526001600160a01b03909116600482015260248101879052737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c88a5e6d9150604401600060405180830381600087803b15801561188257600080fd5b505af1158015611896573d6000803e3d6000fd5b50506025546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b15801561192857600080fd5b505af115801561193c573d6000803e3d6000fd5b50506020546040517f1f1ff1f5fb41346850b2f5c04e6c767e2f1c8a525c5c0c5cdb60cdf3ca5f62fa935061198592506001600160a01b039091169087908b908b908b90617f55565b60405180910390a16020546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b158015611a1b57600080fd5b505af1158015611a2f573d6000803e3d6000fd5b50506025546040516001600160a01b0390911692507fcaf938de11c367272220bfd1d2baa99ca46665e7bc4d85f00adb51b90fe1fa9f9150611a749087908690617f96565b60405180910390a26028546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015611aee57600080fd5b505af1158015611b02573d6000803e3d6000fd5b50506020546025546040517f1cff79cd0000000000000000000000000000000000000000000000000000000081526001600160a01b039283169450631cff79cd93508892611b569216908790600401617faf565b60006040518083038185885af1158015611b74573d6000803e3d6000fd5b50505050506040513d6000823e601f3d908101601f19168201604052611b9d91908101906180b9565b50602d54602b546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260009291909116906370a0823190602401602060405180830381865afa158015611c08573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c2c9190617e56565b9050611c4481611c3f620f42408761811d565b61372f565b5050505050505050565b6060601b805480602002602001604051908101604052809291908181526020016000905b828210156113285783829060005260206000209060020201604051806040016040529081600082018054611ca590617e09565b80601f0160208091040260200160405190810160405280929190818152602001828054611cd190617e09565b8015611d1e5780601f10611cf357610100808354040283529160200191611d1e565b820191906000526020600020905b815481529060010190602001808311611d0157829003601f168201915b5050505050815260200160018201805480602002602001604051908101604052809291908181526020018280548015611db857602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019060040190602082600301049283019260010382029150808411611d655790505b50505050508152505081526020019060010190611c72565b604080518082018252600681527f48656c6c6f21000000000000000000000000000000000000000000000000000060208201529051602a90600190670de0b6b3a7640000906000907fe04d4f970000000000000000000000000000000000000000000000000000000090611e4c90879087908790602401617e6f565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009490941693909317909252602a5491517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b0390921660848301529150737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b158015611f3b57600080fd5b505af1158015611f4f573d6000803e3d6000fd5b5050602e5460255460405160609190911b6bffffffffffffffffffffffff19166020820152600093506001600160a01b0390911691507fde19dbe881cc0aeeb6e73ce19ac7b5ca695e6be8a076e3eb42292005a7fec1b59060340160408051601f19818403018152828252602d547f4d8943bb000000000000000000000000000000000000000000000000000000008452915190926001600160a01b0390921691620f4240916000918491634d8943bb916004808201926020929091908290030181865afa158015612025573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120499190617e56565b8860405161205c96959493929190618130565b60405180910390a3602e546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156120d657600080fd5b505af11580156120ea573d6000803e3d6000fd5b5050602a5460255460405160609190911b6bffffffffffffffffffffffff191660208201526001600160a01b039091169250637993c1e0915060340160408051601f1981840301815290829052602d547fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16835261218092620f4240916001600160a01b0316908790600401618183565b600060405180830381600087803b15801561219a57600080fd5b505af11580156121ae573d6000803e3d6000fd5b5050602d54602e546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260009450911691506370a0823190602401602060405180830381865afa15801561221a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061223e9190617e56565b905061224b81600061372f565b6020546040517fc88a5e6d0000000000000000000000000000000000000000000000000000000081526001600160a01b03909116600482015260248101849052737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c88a5e6d90604401600060405180830381600087803b1580156122c457600080fd5b505af11580156122d8573d6000803e3d6000fd5b50506025546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b15801561236a57600080fd5b505af115801561237e573d6000803e3d6000fd5b50506020546040517f1f1ff1f5fb41346850b2f5c04e6c767e2f1c8a525c5c0c5cdb60cdf3ca5f62fa93506123c792506001600160a01b039091169086908a908a908a90617f55565b60405180910390a16020546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b15801561245d57600080fd5b505af1158015612471573d6000803e3d6000fd5b50506025546040516001600160a01b0390911692507fcaf938de11c367272220bfd1d2baa99ca46665e7bc4d85f00adb51b90fe1fa9f91506124b69086908690617f96565b60405180910390a26028546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561253057600080fd5b505af1158015612544573d6000803e3d6000fd5b50506020546025546040517f1cff79cd0000000000000000000000000000000000000000000000000000000081526001600160a01b039283169450631cff79cd935087926125989216908790600401617faf565b60006040518083038185885af11580156125b6573d6000803e3d6000fd5b50505050506040513d6000823e601f3d908101601f191682016040526125df91908101906180b9565b50505050505050565b6060601a805480602002602001604051908101604052809291908181526020016000905b8282101561132857838290600052602060002001805461262b90617e09565b80601f016020809104026020016040519081016040528092919081815260200182805461265790617e09565b80156126a45780601f10612679576101008083540402835291602001916126a4565b820191906000526020600020905b81548152906001019060200180831161268757829003601f168201915b50505050508152602001906001019061260c565b6060601d805480602002602001604051908101604052809291908181526020016000905b828210156113285760008481526020908190206040805180820182526002860290920180546001600160a01b0316835260018101805483518187028101870190945280845293949193858301939283018282801561279b57602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190600401906020826003010492830192600103820291508084116127485790505b505050505081525050815260200190600101906126dc565b604080518082018252600681527f48656c6c6f21000000000000000000000000000000000000000000000000000060208201529051602a90600190670de0b6b3a76400009082906000907fe04d4f97000000000000000000000000000000000000000000000000000000009061283190889088908690602401617e6f565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009490941693909317909252602e5491517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b0390921660048301529150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561290457600080fd5b505af1158015612918573d6000803e3d6000fd5b5050602a546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b1580156129aa57600080fd5b505af11580156129be573d6000803e3d6000fd5b5050602e5460255460405160609190911b6bffffffffffffffffffffffff191660208201528593506001600160a01b0390911691507f5322ffbbf9261ff1f8138247942d2b03b28717141ef0a0dd080fc4be9c4e78d39060340160408051601f1981840301815290829052612a349186906181bd565b60405180910390a3602a5460255460405160609190911b6bffffffffffffffffffffffff191660208201526001600160a01b0390911690635d40e1789060340160405160208183030381529060405284846040518463ffffffff1660e01b8152600401612aa3939291906181e2565b600060405180830381600087803b158015612abd57600080fd5b505af1158015612ad1573d6000803e3d6000fd5b50506020546040517fc88a5e6d0000000000000000000000000000000000000000000000000000000081526001600160a01b03909116600482015260248101869052737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c88a5e6d9150604401600060405180830381600087803b158015612b4e57600080fd5b505af1158015612b62573d6000803e3d6000fd5b50506020546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b158015612bf457600080fd5b505af1158015612c08573d6000803e3d6000fd5b50506025546040516001600160a01b0390911692507fcaf938de11c367272220bfd1d2baa99ca46665e7bc4d85f00adb51b90fe1fa9f9150612c4d9086908590617f96565b60405180910390a26028546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015612cc757600080fd5b505af1158015612cdb573d6000803e3d6000fd5b50506020546025546040517f1cff79cd0000000000000000000000000000000000000000000000000000000081526001600160a01b039283169450631cff79cd935087926125989216908690600401617faf565b6060601c805480602002602001604051908101604052809291908181526020016000905b828210156113285760008481526020908190206040805180820182526002860290920180546001600160a01b03168352600181018054835181870281018701909452808452939491938583019392830182828015612e1257602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019060040190602082600301049283019260010382029150808411612dbf5790505b50505050508152505081526020019060010190612d53565b60606019805480602002602001604051908101604052809291908181526020016000905b82821015611328578382906000526020600020018054612e6d90617e09565b80601f0160208091040260200160405190810160405280929190818152602001828054612e9990617e09565b8015612ee65780601f10612ebb57610100808354040283529160200191612ee6565b820191906000526020600020905b815481529060010190602001808311612ec957829003601f168201915b505050505081526020019060010190612e4e565b60085460009060ff1615612f12575060085460ff1690565b6040517f667f9d70000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d600482018190527f6661696c65640000000000000000000000000000000000000000000000000000602483015260009163667f9d7090604401602060405180830381865afa158015612fa3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612fc79190617e56565b1415905090565b604080518082018252600681527f48656c6c6f21000000000000000000000000000000000000000000000000000060208201529051602a90600190670de0b6b3a76400009082906000907fe04d4f97000000000000000000000000000000000000000000000000000000009061304c90889088908690602401617e6f565b60408051601f19818403018152918152602080830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009095169490941790935260255490519193506000926130e5926001600160a01b03909216910160609190911b6bffffffffffffffffffffffff1916815260140190565b60408051601f198184030181529082905261310691859085906024016181e2565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f5d40e17800000000000000000000000000000000000000000000000000000000179052602a5490517ff30c7ba3000000000000000000000000000000000000000000000000000000008152919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f30c7ba3916131c3916001600160a01b0391909116906000908690600401617ed8565b600060405180830381600087803b1580156131dd57600080fd5b505af11580156131f1573d6000803e3d6000fd5b5050602e546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b15801561326757600080fd5b505af115801561327b573d6000803e3d6000fd5b5050602b5460255460405160609190911b6bffffffffffffffffffffffff191660208201526001600160a01b03909116925063865b36f69150603401604051602081830303815290604052858a8a8a6040518663ffffffff1660e01b81526004016132ea95949392919061820d565b600060405180830381600087803b15801561330457600080fd5b505af1158015613318573d6000803e3d6000fd5b50506020546040517fc88a5e6d0000000000000000000000000000000000000000000000000000000081526001600160a01b03909116600482015260248101879052737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c88a5e6d9150604401600060405180830381600087803b15801561339557600080fd5b505af11580156133a9573d6000803e3d6000fd5b50506025546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b15801561343b57600080fd5b505af115801561344f573d6000803e3d6000fd5b50506020546040517f1f1ff1f5fb41346850b2f5c04e6c767e2f1c8a525c5c0c5cdb60cdf3ca5f62fa935061349892506001600160a01b039091169087908b908b908b90617f55565b60405180910390a16020546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b15801561352e57600080fd5b505af1158015613542573d6000803e3d6000fd5b50506025546040516001600160a01b0390911692507fcaf938de11c367272220bfd1d2baa99ca46665e7bc4d85f00adb51b90fe1fa9f91506135879087908690617f96565b60405180910390a26028546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561360157600080fd5b505af1158015613615573d6000803e3d6000fd5b50506020546025546040517f1cff79cd0000000000000000000000000000000000000000000000000000000081526001600160a01b039283169450631cff79cd935088926136699216908790600401617faf565b60006040518083038185885af1158015613687573d6000803e3d6000fd5b50505050506040513d6000823e601f3d908101601f19168201604052611c4491908101906180b9565b606060158054806020026020016040519081016040528092919081815260200182805480156111e5576020028201919060005260206000209081546001600160a01b031681526001909101906020018083116111c7575050505050905090565b600061371a61788b565b6137258484836137b6565b9150505b92915050565b6040517f98296c540000000000000000000000000000000000000000000000000000000081526004810183905260248101829052737109709ecfa91a80626ff3989d68f67f5b1dd12d906398296c549060440160006040518083038186803b15801561379a57600080fd5b505afa1580156137ae573d6000803e3d6000fd5b505050505050565b6000806137c38584613831565b90506138266040518060400160405280601d81526020017f4552433139363750726f78792e736f6c3a4552433139363750726f78790000008152508286604051602001613811929190617faf565b6040516020818303038152906040528561383d565b9150505b9392505050565b600061382a838361386b565b60c081015151600090156138615761385a84848460c00151613886565b905061382a565b61385a8484613a2c565b60006138778383613b17565b61382a8383602001518461383d565b600080613891613b27565b9050600061389f8683613bfa565b905060006138b682606001518360200151856140a0565b905060006138c6838389896142b2565b905060006138d38261512f565b602081015181519192509060030b15613946578982604001516040516020016138fd929190618252565b60408051601f19818403018152908290527f08c379a000000000000000000000000000000000000000000000000000000000825261393d916004016182d3565b60405180910390fd5b60006139896040518060400160405280601581526020017f4465706c6f79656420746f20616464726573733a2000000000000000000000008152508360016152fe565b6040517fc6ce059d000000000000000000000000000000000000000000000000000000008152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c6ce059d906139dc9084906004016182d3565b602060405180830381865afa1580156139f9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a1d91906182e6565b9b9a5050505050505050505050565b6040517f8d1cc9250000000000000000000000000000000000000000000000000000000081526000908190737109709ecfa91a80626ff3989d68f67f5b1dd12d90638d1cc92590613a819087906004016182d3565b600060405180830381865afa158015613a9e573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052613ac691908101906180b9565b90506000613af48285604051602001613ae092919061830f565b6040516020818303038152906040526154fe565b90506001600160a01b0381166137255784846040516020016138fd92919061833e565b613b2382826000615511565b5050565b604080518082018252600381527f6f75740000000000000000000000000000000000000000000000000000000000602082015290517fd145736c000000000000000000000000000000000000000000000000000000008152606091737109709ecfa91a80626ff3989d68f67f5b1dd12d91829063d145736c90613bae9084906004016183e9565b600060405180830381865afa158015613bcb573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052613bf39190810190618430565b9250505090565b613c2c6040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b6000737109709ecfa91a80626ff3989d68f67f5b1dd12d9050613c776040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b613c8085615614565b60208201526000613c90866159f9565b90506000836001600160a01b031663d930a0e66040518163ffffffff1660e01b8152600401600060405180830381865afa158015613cd2573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052613cfa9190810190618430565b86838560200151604051602001613d149493929190618479565b60408051601f19818403018152908290527f60f9bb1100000000000000000000000000000000000000000000000000000000825291506000906001600160a01b038616906360f9bb1190613d6c9085906004016182d3565b600060405180830381865afa158015613d89573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052613db19190810190618430565b6040517fdb4235f60000000000000000000000000000000000000000000000000000000081529091506001600160a01b0386169063db4235f690613df990849060040161857d565b602060405180830381865afa158015613e16573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613e3a9190617cf2565b613e4f57816040516020016138fd91906185cf565b6040517f49c4fac80000000000000000000000000000000000000000000000000000000081526001600160a01b038616906349c4fac890613e94908490600401618661565b600060405180830381865afa158015613eb1573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052613ed99190810190618430565b84526040517fdb4235f60000000000000000000000000000000000000000000000000000000081526001600160a01b0386169063db4235f690613f209084906004016186b3565b602060405180830381865afa158015613f3d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613f619190617cf2565b15613ff6576040517f49c4fac80000000000000000000000000000000000000000000000000000000081526001600160a01b038616906349c4fac890613fab9084906004016186b3565b600060405180830381865afa158015613fc8573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052613ff09190810190618430565b60408501525b846001600160a01b03166349c4fac882866000015160405160200161401b9190618705565b6040516020818303038152906040526040518363ffffffff1660e01b81526004016140479291906181bd565b600060405180830381865afa158015614064573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261408c9190810190618430565b606085015250608083015250949350505050565b60408051600480825260a0820190925260609160009190816020015b60608152602001906001900390816140bc5790505090506040518060400160405280600481526020017f67726570000000000000000000000000000000000000000000000000000000008152508160008151811061411c5761411c618771565b60200260200101819052506040518060400160405280600381526020017f2d726c00000000000000000000000000000000000000000000000000000000008152508160018151811061417057614170618771565b60200260200101819052508460405160200161418c91906187a0565b604051602081830303815290604052816002815181106141ae576141ae618771565b6020026020010181905250826040516020016141ca919061880c565b604051602081830303815290604052816003815181106141ec576141ec618771565b602002602001018190525060006142028261512f565b602080820151604080518082018252600581527f2e6a736f6e00000000000000000000000000000000000000000000000000000081850190815282518084018452600080825290860152825180840190935290518252928101929092529192506142939060408051808201825260008082526020918201528151808301909252845182528085019082015290615c7c565b6142a857856040516020016138fd919061884d565b9695505050505050565b60a0810151604080518082018252600080825260209182015281518083019092528251808352928101910152606090737109709ecfa91a80626ff3989d68f67f5b1dd12d9015614302565b511590565b614476578260200151156143be576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605860248201527f54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f742060448201527f62652075736564207768656e207468652060736b6970566572696679536f757260648201527f6365436f646560206f7074696f6e206973206074727565600000000000000000608482015260a40161393d565b8260c0015115614476576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605360248201527f54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f742060448201527f62652075736564207768656e207468652060736b69704c6963656e736554797060648201527f6560206f7074696f6e2069732060747275656000000000000000000000000000608482015260a40161393d565b6040805160ff8082526120008201909252600091816020015b606081526020019060019003908161448f57905050905060006040518060400160405280600381526020017f6e707800000000000000000000000000000000000000000000000000000000008152508282806144ea906188de565b935060ff16815181106144ff576144ff618771565b60200260200101819052506040518060400160405280600d81526020017f302e302e312d616c7068612e370000000000000000000000000000000000000081525060405160200161455091906188fd565b60405160208183030381529060405282828061456b906188de565b935060ff168151811061458057614580618771565b60200260200101819052506040518060400160405280600681526020017f6465706c6f7900000000000000000000000000000000000000000000000000008152508282806145cd906188de565b935060ff16815181106145e2576145e2618771565b60200260200101819052506040518060400160405280600e81526020017f2d2d636f6e74726163744e616d6500000000000000000000000000000000000081525082828061462f906188de565b935060ff168151811061464457614644618771565b60200260200101819052508760200151828280614660906188de565b935060ff168151811061467557614675618771565b60200260200101819052506040518060400160405280600e81526020017f2d2d636f6e7472616374506174680000000000000000000000000000000000008152508282806146c2906188de565b935060ff16815181106146d7576146d7618771565b6020908102919091010152875182826146ef816188de565b935060ff168151811061470457614704618771565b60200260200101819052506040518060400160405280600981526020017f2d2d636861696e49640000000000000000000000000000000000000000000000815250828280614751906188de565b935060ff168151811061476657614766618771565b602002602001018190525061477a46615cdd565b8282614785816188de565b935060ff168151811061479a5761479a618771565b60200260200101819052506040518060400160405280600f81526020017f2d2d6275696c64496e666f46696c6500000000000000000000000000000000008152508282806147e7906188de565b935060ff16815181106147fc576147fc618771565b602002602001018190525086828280614814906188de565b935060ff168151811061482957614829618771565b60209081029190910101528551156149505760408051808201909152601581527f2d2d636f6e7374727563746f7242797465636f646500000000000000000000006020820152828261487a816188de565b935060ff168151811061488f5761488f618771565b60209081029190910101526040517f71aad10d0000000000000000000000000000000000000000000000000000000081526001600160a01b038416906371aad10d906148df9089906004016182d3565b600060405180830381865afa1580156148fc573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526149249190810190618430565b828261492f816188de565b935060ff168151811061494457614944618771565b60200260200101819052505b846020015115614a205760408051808201909152601281527f2d2d766572696679536f75726365436f6465000000000000000000000000000060208201528282614999816188de565b935060ff16815181106149ae576149ae618771565b60200260200101819052506040518060400160405280600581526020017f66616c73650000000000000000000000000000000000000000000000000000008152508282806149fb906188de565b935060ff1681518110614a1057614a10618771565b6020026020010181905250614be7565b614a586142fd8660a0015160408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b614aeb5760408051808201909152600d81527f2d2d6c6963656e7365547970650000000000000000000000000000000000000060208201528282614a9b816188de565b935060ff1681518110614ab057614ab0618771565b60200260200101819052508460a00151604051602001614ad091906187a0565b6040516020818303038152906040528282806149fb906188de565b8460c00151158015614b2e575060408089015181518083018352600080825260209182015282518084019093528151835290810190820152614b2c90511590565b155b15614be75760408051808201909152600d81527f2d2d6c6963656e7365547970650000000000000000000000000000000000000060208201528282614b72816188de565b935060ff1681518110614b8757614b87618771565b6020026020010181905250614b9b88615d7d565b604051602001614bab91906187a0565b604051602081830303815290604052828280614bc6906188de565b935060ff1681518110614bdb57614bdb618771565b60200260200101819052505b60408086015181518083018352600080825260209182015282518084019093528151835290810190820152614c1b90511590565b614cb05760408051808201909152600b81527f2d2d72656c61796572496400000000000000000000000000000000000000000060208201528282614c5e816188de565b935060ff1681518110614c7357614c73618771565b60200260200101819052508460400151828280614c8f906188de565b935060ff1681518110614ca457614ca4618771565b60200260200101819052505b606085015115614dd15760408051808201909152600681527f2d2d73616c74000000000000000000000000000000000000000000000000000060208201528282614cf9816188de565b935060ff1681518110614d0e57614d0e618771565b602090810291909101015260608501516040517fb11a19e800000000000000000000000000000000000000000000000000000000815260048101919091526001600160a01b0384169063b11a19e890602401600060405180830381865afa158015614d7d573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052614da59190810190618430565b8282614db0816188de565b935060ff1681518110614dc557614dc5618771565b60200260200101819052505b60e08501515115614e785760408051808201909152600a81527f2d2d6761734c696d69740000000000000000000000000000000000000000000060208201528282614e1b816188de565b935060ff1681518110614e3057614e30618771565b6020026020010181905250614e4c8560e0015160000151615cdd565b8282614e57816188de565b935060ff1681518110614e6c57614e6c618771565b60200260200101819052505b60e08501516020015115614f225760408051808201909152600a81527f2d2d67617350726963650000000000000000000000000000000000000000000060208201528282614ec5816188de565b935060ff1681518110614eda57614eda618771565b6020026020010181905250614ef68560e0015160200151615cdd565b8282614f01816188de565b935060ff1681518110614f1657614f16618771565b60200260200101819052505b60e08501516040015115614fcc5760408051808201909152600e81527f2d2d6d617846656550657247617300000000000000000000000000000000000060208201528282614f6f816188de565b935060ff1681518110614f8457614f84618771565b6020026020010181905250614fa08560e0015160400151615cdd565b8282614fab816188de565b935060ff1681518110614fc057614fc0618771565b60200260200101819052505b60e085015160600151156150765760408051808201909152601681527f2d2d6d61785072696f726974794665655065724761730000000000000000000060208201528282615019816188de565b935060ff168151811061502e5761502e618771565b602002602001018190525061504a8560e0015160600151615cdd565b8282615055816188de565b935060ff168151811061506a5761506a618771565b60200260200101819052505b60008160ff1667ffffffffffffffff81111561509457615094617fd1565b6040519080825280602002602001820160405280156150c757816020015b60608152602001906001900390816150b25790505b50905060005b8260ff168160ff16101561512057838160ff16815181106150f0576150f0618771565b6020026020010151828260ff168151811061510d5761510d618771565b60209081029190910101526001016150cd565b5093505050505b949350505050565b6151566040518060600160405280600060030b815260200160608152602001606081525090565b60408051808201825260048082527f6261736800000000000000000000000000000000000000000000000000000000602083015291517fd145736c000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d92600091849163d145736c916151dc91869101618968565b600060405180830381865afa1580156151f9573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526152219190810190618430565b9050600061522f868361686c565b90506000846001600160a01b031663f45c1ce7836040518263ffffffff1660e01b815260040161525f9190617be4565b6000604051808303816000875af115801561527e573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526152a691908101906189af565b805190915060030b158015906152bf5750602081015151155b80156152ce5750604081015151155b156142a857816000815181106152e6576152e6618771565b60200260200101516040516020016138fd9190618a65565b606060006153338560408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b60408051808201825260008082526020918201528151808301909252865182528087019082015290915061536a9082905b906169c1565b156154c75760006153e7826153e1846153db6153ad8a60408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6040805180820182526000808252602091820152815180830190925282518252918201519181019190915290565b906169e8565b90616a4a565b604080518082018252600181527f0a000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015290915061544b9082906169c1565b156154b557604080518082018252600181527f0a00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526154b2905b8290616acf565b90505b6154be81616af5565b9250505061382a565b82156154e05784846040516020016138fd929190618c51565b505060408051602081019091526000815261382a565b509392505050565b6000808251602084016000f09392505050565b8160a001511561552057505050565b600061552d848484616b5e565b9050600061553a8261512f565b602081015181519192509060030b1580156155d65750604080518082018252600781527f5355434345535300000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526155d690604080518082018252600080825260209182015281518083019092528451825280850190820152615364565b156155e357505050505050565b604082015151156156035781604001516040516020016138fd9190618cf8565b806040516020016138fd9190618d56565b606060006156498360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600481527f2e736f6c00000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201529091506156ae905b8290615c7c565b1561571d57604080518082018252600481527f2e736f6c000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261382a906157189083906170f9565b616af5565b604080518082018252600181527f3a000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261577f905b8290617183565b60010361584c57604080518082018252600181527f3a00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526157e5906154ab565b50604080518082018252600181527f3a000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261382a90615718905b8390616acf565b604080518082018252600581527f2e6a736f6e000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526158ab906156a7565b156159e257604080518082018252600181527f2f0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082018190528451808601909552925184528301529061591390839061721d565b905060008160018351615926919061811d565b8151811061593657615936618771565b602002602001015190506159d96157186159ac6040518060400160405280600581526020017f2e6a736f6e00000000000000000000000000000000000000000000000000000081525060408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600080825260209182015281518083019092528551825280860190820152906170f9565b95945050505050565b826040516020016138fd9190618dc1565b50919050565b60606000615a2e8360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600481527f2e736f6c0000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152909150615a90906156a7565b15615a9e5761382a81616af5565b604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152615afd90615778565b600103615b6757604080518082018252600181527f3a000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261382a9061571890615845565b604080518082018252600581527f2e6a736f6e00000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152615bc6906156a7565b156159e257604080518082018252600181527f2f00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820181905284518086019095529251845283015290615c2e90839061721d565b9050600181511115615c6a578060028251615c49919061811d565b81518110615c5957615c59618771565b602002602001015192505050919050565b50826040516020016138fd9190618dc1565b805182516000911115615c9157506000613729565b81518351602085015160009291615ca791618e9f565b615cb1919061811d565b905082602001518103615cc8576001915050613729565b82516020840151819020912014905092915050565b60606000615cea836172c2565b600101905060008167ffffffffffffffff811115615d0a57615d0a617fd1565b6040519080825280601f01601f191660200182016040528015615d34576020820181803683370190505b5090508181016020015b600019017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a8504945084615d3e57509392505050565b604081810151815180830183526000808252602091820181905283518085018552835181529282018383015283518085018552600a81527f554e4c4943454e5345440000000000000000000000000000000000000000000081840190815285518087018752838152840192909252845180860190955251845290830152606091615e09905b82906173a4565b15615e4957505060408051808201909152600481527f4e6f6e65000000000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600981527f556e6c6963656e7365000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152615ea890615e02565b15615ee857505060408051808201909152600981527f556e6c6963656e736500000000000000000000000000000000000000000000006020820152919050565b604080518082018252600381527f4d4954000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152615f4790615e02565b15615f8757505060408051808201909152600381527f4d495400000000000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f47504c2d322e302d6f6e6c79000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152615fe690615e02565b8061604b5750604080518082018252601081527f47504c2d322e302d6f722d6c61746572000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261604b90615e02565b1561608b57505060408051808201909152600981527f474e552047504c763200000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f47504c2d332e302d6f6e6c790000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526160ea90615e02565b8061614f5750604080518082018252601081527f47504c2d332e302d6f722d6c61746572000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261614f90615e02565b1561618f57505060408051808201909152600981527f474e552047504c763300000000000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4c47504c2d322e312d6f6e6c7900000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526161ee90615e02565b806162535750604080518082018252601181527f4c47504c2d322e312d6f722d6c617465720000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261625390615e02565b1561629357505060408051808201909152600c81527f474e55204c47504c76322e3100000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4c47504c2d332e302d6f6e6c7900000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526162f290615e02565b806163575750604080518082018252601181527f4c47504c2d332e302d6f722d6c617465720000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261635790615e02565b1561639757505060408051808201909152600a81527f474e55204c47504c7633000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f4253442d322d436c617573650000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526163f690615e02565b1561643657505060408051808201909152600c81527f4253442d322d436c6175736500000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f4253442d332d436c6175736500000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261649590615e02565b156164d557505060408051808201909152600c81527f4253442d332d436c6175736500000000000000000000000000000000000000006020820152919050565b604080518082018252600781527f4d504c2d322e30000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261653490615e02565b1561657457505060408051808201909152600781527f4d504c2d322e30000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600781527f4f534c2d332e3000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526165d390615e02565b1561661357505060408051808201909152600781527f4f534c2d332e30000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600a81527f4170616368652d322e30000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261667290615e02565b156166b257505060408051808201909152600a81527f4170616368652d322e30000000000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4147504c2d332e302d6f6e6c79000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261671190615e02565b806167765750604080518082018252601181527f4147504c2d332e302d6f722d6c617465720000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261677690615e02565b156167b657505060408051808201909152600a81527f474e55204147504c7633000000000000000000000000000000000000000000006020820152919050565b604080518082018252600881527f4255534c2d312e310000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261681590615e02565b1561685557505060408051808201909152600781527f42534c20312e31000000000000000000000000000000000000000000000000006020820152919050565b604080840151845191516138fd9290602001618eb2565b60608060005b84518110156168f7578185828151811061688e5761688e618771565b60200260200101516040516020016168a792919061830f565b6040516020818303038152906040529150600185516168c6919061811d565b81146168ef57816040516020016168dd919061901b565b60405160208183030381529060405291505b600101616872565b5060408051600380825260808201909252600091816020015b6060815260200190600190039081616910579050509050838160008151811061693b5761693b618771565b60200260200101819052506040518060400160405280600281526020017f2d630000000000000000000000000000000000000000000000000000000000008152508160018151811061698f5761698f618771565b602002602001018190525081816002815181106169ae576169ae618771565b6020908102919091010152949350505050565b60208083015183518351928401516000936169df92918491906173b8565b14159392505050565b60408051808201909152600080825260208201526000616a1a84600001518560200151856000015186602001516174c9565b9050836020015181616a2c919061811d565b84518590616a3b90839061811d565b90525060208401525090919050565b6040805180820190915260008082526020820152815183511015616a6f575081613729565b6020808301519084015160019114616a965750815160208481015190840151829020919020145b8015616ac757825184518590616aad90839061811d565b9052508251602085018051616ac3908390618e9f565b9052505b509192915050565b6040805180820190915260008082526020820152616aee8383836175e9565b5092915050565b60606000826000015167ffffffffffffffff811115616b1657616b16617fd1565b6040519080825280601f01601f191660200182016040528015616b40576020820181803683370190505b5090506000602082019050616aee8185602001518660000151617694565b60606000616b6a613b27565b6040805160ff808252612000820190925291925060009190816020015b6060815260200190600190039081616b8757905050905060006040518060400160405280600381526020017f6e70780000000000000000000000000000000000000000000000000000000000815250828280616be2906188de565b935060ff1681518110616bf757616bf7618771565b60200260200101819052506040518060400160405280600781526020017f5e312e33322e3300000000000000000000000000000000000000000000000000815250604051602001616c48919061905c565b604051602081830303815290604052828280616c63906188de565b935060ff1681518110616c7857616c78618771565b60200260200101819052506040518060400160405280600881526020017f76616c6964617465000000000000000000000000000000000000000000000000815250828280616cc5906188de565b935060ff1681518110616cda57616cda618771565b602002602001018190525082604051602001616cf6919061880c565b604051602081830303815290604052828280616d11906188de565b935060ff1681518110616d2657616d26618771565b60200260200101819052506040518060400160405280600a81526020017f2d2d636f6e747261637400000000000000000000000000000000000000000000815250828280616d73906188de565b935060ff1681518110616d8857616d88618771565b6020026020010181905250616d9d878461770e565b8282616da8816188de565b935060ff1681518110616dbd57616dbd618771565b602090810291909101015285515115616e695760408051808201909152600b81527f2d2d7265666572656e636500000000000000000000000000000000000000000060208201528282616e0f816188de565b935060ff1681518110616e2457616e24618771565b6020026020010181905250616e3d86600001518461770e565b8282616e48816188de565b935060ff1681518110616e5d57616e5d618771565b60200260200101819052505b856080015115616ed75760408051808201909152601881527f2d2d756e73616665536b697053746f72616765436865636b000000000000000060208201528282616eb2816188de565b935060ff1681518110616ec757616ec7618771565b6020026020010181905250616f3d565b8415616f3d5760408051808201909152601281527f2d2d726571756972655265666572656e6365000000000000000000000000000060208201528282616f1c816188de565b935060ff1681518110616f3157616f31618771565b60200260200101819052505b60408601515115616fd95760408051808201909152600d81527f2d2d756e73616665416c6c6f770000000000000000000000000000000000000060208201528282616f87816188de565b935060ff1681518110616f9c57616f9c618771565b60200260200101819052508560400151828280616fb8906188de565b935060ff1681518110616fcd57616fcd618771565b60200260200101819052505b8560600151156170435760408051808201909152601481527f2d2d756e73616665416c6c6f7752656e616d657300000000000000000000000060208201528282617022816188de565b935060ff168151811061703757617037618771565b60200260200101819052505b60008160ff1667ffffffffffffffff81111561706157617061617fd1565b60405190808252806020026020018201604052801561709457816020015b606081526020019060019003908161707f5790505b50905060005b8260ff168160ff1610156170ed57838160ff16815181106170bd576170bd618771565b6020026020010151828260ff16815181106170da576170da618771565b602090810291909101015260010161709a565b50979650505050505050565b604080518082019091526000808252602082015281518351101561711e575081613729565b8151835160208501516000929161713491618e9f565b61713e919061811d565b6020840151909150600190821461715f575082516020840151819020908220145b801561717a5783518551869061717690839061811d565b9052505b50929392505050565b60008082600001516171a785600001518660200151866000015187602001516174c9565b6171b19190618e9f565b90505b835160208501516171c59190618e9f565b8111616aee57816171d5816190a1565b925050826000015161720c8560200151836171f0919061811d565b86516171fc919061811d565b83866000015187602001516174c9565b6172169190618e9f565b90506171b4565b6060600061722b8484617183565b617236906001618e9f565b67ffffffffffffffff81111561724e5761724e617fd1565b60405190808252806020026020018201604052801561728157816020015b606081526020019060019003908161726c5790505b50905060005b81518110156154f65761729d6157188686616acf565b8282815181106172af576172af618771565b6020908102919091010152600101617287565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000831061730b577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310617337576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc10000831061735557662386f26fc10000830492506010015b6305f5e100831061736d576305f5e100830492506008015b612710831061738157612710830492506004015b60648310617393576064830492506002015b600a83106137295760010192915050565b60006173b0838361774e565b159392505050565b6000808584116174bf576020841161746b57600084156174035760016173df86602061811d565b6173ea9060086190bb565b6173f59060026191b9565b6173ff919061811d565b1990505b83518116856174128989618e9f565b61741c919061811d565b805190935082165b8181146174565787841161743e5787945050505050615127565b83617448816191c5565b945050828451169050617424565b6174608785618e9f565b945050505050615127565b838320617478858861811d565b6174829087618e9f565b91505b8582106174bd578482208082036174aa576174a08684618e9f565b9350505050615127565b6174b560018461811d565b925050617485565b505b5092949350505050565b600083818685116175d4576020851161758357600085156175155760016174f187602061811d565b6174fc9060086190bb565b6175079060026191b9565b617511919061811d565b1990505b845181166000876175268b8b618e9f565b617530919061811d565b855190915083165b8281146175755781861061755d576175508b8b618e9f565b9650505050505050615127565b85617567816190a1565b965050838651169050617538565b859650505050505050615127565b508383206000905b617595868961811d565b82116175d2578583208082036175b15783945050505050615127565b6175bc600185618e9f565b93505081806175ca906190a1565b92505061758b565b505b6175de8787618e9f565b979650505050505050565b6040805180820190915260008082526020820152600061761b85600001518660200151866000015187602001516174c9565b602080870180519186019190915251909150617637908261811d565b83528451602086015161764a9190618e9f565b8103617659576000855261768b565b835183516176679190618e9f565b8551869061767690839061811d565b90525083516176859082618e9f565b60208601525b50909392505050565b602081106176cc57815183526176ab602084618e9f565b92506176b8602083618e9f565b91506176c560208261811d565b9050617694565b60001981156176fb5760016176e283602061811d565b6176ee906101006191b9565b6176f8919061811d565b90505b9151835183169219169190911790915250565b6060600061771c8484613bfa565b8051602080830151604051939450617736939091016191dc565b60405160208183030381529060405291505092915050565b8151815160009190811115617761575081515b6020808501519084015160005b8381101561781a57825182518082146177ea5760001960208710156177c95760018461779b89602061811d565b6177a59190618e9f565b6177b09060086190bb565b6177bb9060026191b9565b6177c5919061811d565b1990505b81811683821681810391146177e75797506137299650505050505050565b50505b6177f5602086618e9f565b9450617802602085618e9f565b935050506020816178139190618e9f565b905061776e565b50845186516142a89190619234565b610c9f806200925583390190565b61140b8062009ef483390190565b61155a806200b2ff83390190565b610d5e806200c85983390190565b61080c806200d5b783390190565b610b3f806200ddc383390190565b611bb9806200e90283390190565b6040518060e001604052806060815260200160608152602001606081526020016000151581526020016000151581526020016000151581526020016178ce6178d3565b905290565b604051806101000160405280600015158152602001600015158152602001606081526020016000801916815260200160608152602001606081526020016000151581526020016178ce6040518060800160405280600081526020016000815260200160008152602001600081525090565b602080825282518282018190526000918401906040840190835b818110156179855783516001600160a01b031683526020938401939092019160010161795e565b509095945050505050565b60005b838110156179ab578181015183820152602001617993565b50506000910152565b600081518084526179cc816020860160208601617990565b601f01601f19169290920160200192915050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015617adc577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452815180516001600160a01b03168652602090810151604082880181905281519088018190529101906060600582901b88018101919088019060005b81811015617ac2577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa08a8503018352617aac8486516179b4565b6020958601959094509290920191600101617a72565b509197505050602094850194929092019150600101617a08565b50929695505050505050565b600081518084526020840193506020830160005b82811015617b3c5781517fffffffff0000000000000000000000000000000000000000000000000000000016865260209586019590910190600101617afc565b5093949350505050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015617adc577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08786030184528151805160408752617bb260408801826179b4565b9050602082015191508681036020880152617bcd8183617ae8565b965050506020938401939190910190600101617b6e565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015617adc577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452617c468583516179b4565b94506020938401939190910190600101617c0c565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015617adc577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc087860301845281516001600160a01b0381511686526020810151905060406020870152617cdc6040870182617ae8565b9550506020938401939190910190600101617c83565b600060208284031215617d0457600080fd5b8151801515811461382a57600080fd5b610100815260056101008201527f544f4b454e000000000000000000000000000000000000000000000000000000610120820152610140602082015260036101408201527f544b4e000000000000000000000000000000000000000000000000000000000061016082015260006101808201905060ff8816604083015286606083015260038610617dce577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b8560808301528460a0830152617def60c08301856001600160a01b03169052565b6001600160a01b03831660e0830152979650505050505050565b600181811c90821680617e1d57607f821691505b6020821081036159f3577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060208284031215617e6857600080fd5b5051919050565b606081526000617e8260608301866179b4565b602083019490945250901515604090910152919050565b608081526000617eac60808301876179b4565b62ffffff861660208401526001600160a01b038516604084015282810360608401526175de81856179b4565b6001600160a01b03841681528260208201526060604082015260006159d960608301846179b4565b60c081526000617f1360c08301896179b4565b8760208401526001600160a01b03871660408401528281036060840152617f3a81876179b4565b6080840195909552505090151560a090910152949350505050565b6001600160a01b038616815284602082015260a060408201526000617f7d60a08301866179b4565b6060830194909452509015156080909101529392505050565b82815260406020820152600061512760408301846179b4565b6001600160a01b038316815260406020820152600061512760408301846179b4565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040516060810167ffffffffffffffff8111828210171561802357618023617fd1565b60405290565b60008067ffffffffffffffff84111561804457618044617fd1565b50604051601f19601f85018116603f0116810181811067ffffffffffffffff8211171561807357618073617fd1565b60405283815290508082840185101561808b57600080fd5b6154f6846020830185617990565b600082601f8301126180aa57600080fd5b61382a83835160208501618029565b6000602082840312156180cb57600080fd5b815167ffffffffffffffff8111156180e257600080fd5b61372584828501618099565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b81810381811115613729576137296180ee565b60c08152600061814360c08301896179b4565b6001600160a01b038816602084015286604084015285606084015284608084015282810360a084015261817681856179b4565b9998505050505050505050565b60808152600061819660808301876179b4565b8560208401526001600160a01b038516604084015282810360608401526175de81856179b4565b6040815260006181d060408301856179b4565b828103602084015261382681856179b4565b6060815260006181f560608301866179b4565b84602084015282810360408401526142a881856179b4565b60a08152600061822060a08301886179b4565b866020840152828103604084015261823881876179b4565b606084019590955250509015156080909101529392505050565b7f4661696c656420746f206465706c6f7920636f6e74726163742000000000000081526000835161828a81601a850160208801617990565b7f3a20000000000000000000000000000000000000000000000000000000000000601a9184019182015283516182c781601c840160208801617990565b01601c01949350505050565b60208152600061382a60208301846179b4565b6000602082840312156182f857600080fd5b81516001600160a01b038116811461382a57600080fd5b60008351618321818460208801617990565b835190830190618335818360208801617990565b01949350505050565b7f4661696c656420746f206465706c6f7920636f6e74726163742000000000000081526000835161837681601a850160208801617990565b7f207573696e6720636f6e7374727563746f722064617461202200000000000000601a9184019182015283516183b3816033840160208801617990565b7f220000000000000000000000000000000000000000000000000000000000000060339290910191820152603401949350505050565b60408152600b60408201527f464f554e4452595f4f5554000000000000000000000000000000000000000000606082015260806020820152600061382a60808301846179b4565b60006020828403121561844257600080fd5b815167ffffffffffffffff81111561845957600080fd5b8201601f8101841361846a57600080fd5b61372584825160208401618029565b6000855161848b818460208a01617990565b7f2f0000000000000000000000000000000000000000000000000000000000000090830190815285516184c5816001840160208a01617990565b7f2f00000000000000000000000000000000000000000000000000000000000000600192909101918201528451618503816002840160208901617990565b6001818301019150507f2f0000000000000000000000000000000000000000000000000000000000000060018201528351618545816002840160208801617990565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600292909101918201526007019695505050505050565b60408152600061859060408301846179b4565b8281036020840152600481527f2e6173740000000000000000000000000000000000000000000000000000000060208201526040810191505092915050565b7f436f756c64206e6f742066696e642041535420696e206172746966616374200081526000825161860781601f850160208701617990565b7f2e205365742060617374203d20747275656020696e20666f756e6472792e746f601f9390910192830152507f6d6c000000000000000000000000000000000000000000000000000000000000603f820152604101919050565b60408152600061867460408301846179b4565b8281036020840152601181527f2e6173742e6162736f6c7574655061746800000000000000000000000000000060208201526040810191505092915050565b6040815260006186c660408301846179b4565b8281036020840152600c81527f2e6173742e6c6963656e7365000000000000000000000000000000000000000060208201526040810191505092915050565b7f2e6d657461646174612e736f75726365732e5b2700000000000000000000000081526000825161873d816014850160208701617990565b7f275d2e6b656363616b32353600000000000000000000000000000000000000006014939091019283015250602001919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f22000000000000000000000000000000000000000000000000000000000000008152600082516187d8816001850160208701617990565b7f22000000000000000000000000000000000000000000000000000000000000006001939091019283015250600201919050565b6000825161881e818460208701617990565b7f2f6275696c642d696e666f000000000000000000000000000000000000000000920191825250600b01919050565b7f436f756c64206e6f742066696e64206275696c642d696e666f2066696c65207781527f697468206d61746368696e6720736f7572636520636f6465206861736820666f60208201527f7220636f6e7472616374200000000000000000000000000000000000000000006040820152600082516188d181604b850160208701617990565b91909101604b0192915050565b600060ff821660ff81036188f4576188f46180ee565b60010192915050565b7f406f70656e7a657070656c696e2f646566656e6465722d6465706c6f792d636c81527f69656e742d636c6940000000000000000000000000000000000000000000000060208201526000825161895b816029850160208701617990565b9190910160290192915050565b60408152601660408201527f4f50454e5a455050454c494e5f424153485f5041544800000000000000000000606082015260806020820152600061382a60808301846179b4565b6000602082840312156189c157600080fd5b815167ffffffffffffffff8111156189d857600080fd5b8201606081850312156189ea57600080fd5b6189f2618000565b81518060030b8114618a0357600080fd5b8152602082015167ffffffffffffffff811115618a1f57600080fd5b618a2b86828501618099565b602083015250604082015167ffffffffffffffff811115618a4b57600080fd5b618a5786828501618099565b604083015250949350505050565b7f4661696c656420746f2072756e206261736820636f6d6d616e6420776974682081527f2200000000000000000000000000000000000000000000000000000000000000602082015260008251618ac3816021850160208701617990565b7f222e20496620796f7520617265207573696e672057696e646f77732c2073657460219390910192830152507f20746865204f50454e5a455050454c494e5f424153485f5041544820656e766960418201527f726f6e6d656e74207661726961626c6520746f207468652066756c6c7920717560618201527f616c69666965642070617468206f66207468652062617368206578656375746160818201527f626c652e20466f72206578616d706c652c20696620796f75206172652075736960a18201527f6e672047697420666f722057696e646f77732c206164642074686520666f6c6c60c18201527f6f77696e67206c696e6520696e20746865202e656e762066696c65206f66207960e18201527f6f75722070726f6a65637420287573696e6720666f727761726420736c6173686101018201527f6573293a0a4f50454e5a455050454c494e5f424153485f504154483d22433a2f6101218201527f50726f6772616d2046696c65732f4769742f62696e2f6261736822000000000061014182015261015c01919050565b7f4661696c656420746f2066696e64206c696e652077697468207072656669782081527f2700000000000000000000000000000000000000000000000000000000000000602082015260008351618caf816021850160208801617990565b7f2720696e206f75747075743a20000000000000000000000000000000000000006021918401918201528351618cec81602e840160208801617990565b01602e01949350505050565b7f4661696c656420746f2072756e2075706772616465207361666574792076616c81527f69646174696f6e3a20000000000000000000000000000000000000000000000060208201526000825161895b816029850160208701617990565b7f55706772616465207361666574792076616c69646174696f6e206661696c656481527f3a0a000000000000000000000000000000000000000000000000000000000000602082015260008251618db4816022850160208701617990565b9190910160220192915050565b7f436f6e7472616374206e616d6520000000000000000000000000000000000000815260008251618df981600e850160208701617990565b7f206d75737420626520696e2074686520666f726d6174204d79436f6e74726163600e9390910192830152507f742e736f6c3a4d79436f6e7472616374206f72204d79436f6e74726163742e73602e8201527f6f6c206f72206f75742f4d79436f6e74726163742e736f6c2f4d79436f6e7472604e8201527f6163742e6a736f6e000000000000000000000000000000000000000000000000606e820152607601919050565b80820180821115613729576137296180ee565b7f53504458206c6963656e7365206964656e746966696572200000000000000000815260008351618eea816018850160208801617990565b7f20696e20000000000000000000000000000000000000000000000000000000006018918401918201528351618f2781601c840160208801617990565b7f20646f6573206e6f74206c6f6f6b206c696b65206120737570706f7274656420601c92909101918201527f6c6963656e736520666f7220626c6f636b206578706c6f726572207665726966603c8201527f69636174696f6e2e205573652074686520606c6963656e73655479706560206f605c8201527f7074696f6e20746f20737065636966792061206c6963656e736520747970652c607c8201527f206f7220736574207468652060736b69704c6963656e73655479706560206f70609c8201527f74696f6e20746f2060747275656020746f20736b69702e00000000000000000060bc82015260d301949350505050565b6000825161902d818460208701617990565b7f2000000000000000000000000000000000000000000000000000000000000000920191825250600101919050565b7f406f70656e7a657070656c696e2f75706772616465732d636f7265400000000081526000825161909481601c850160208701617990565b91909101601c0192915050565b600060001982036190b4576190b46180ee565b5060010190565b8082028115828204841417613729576137296180ee565b6001815b600184111561910d578085048111156190f1576190f16180ee565b60018416156190ff57908102905b60019390931c9280026190d6565b935093915050565b60008261912457506001613729565b8161913157506000613729565b816001811461914757600281146191515761916d565b6001915050613729565b60ff841115619162576191626180ee565b50506001821b613729565b5060208310610133831016604e8410600b8410161715619190575081810a613729565b61919d60001984846190d2565b80600019048211156191b1576191b16180ee565b029392505050565b600061382a8383619115565b6000816191d4576191d46180ee565b506000190190565b600083516191ee818460208801617990565b7f3a000000000000000000000000000000000000000000000000000000000000009083019081528351619228816001840160208801617990565b01600101949350505050565b8181036000831280158383131683831282161715616aee57616aee6180ee56fe608060405234801561001057600080fd5b50604051610c9f380380610c9f83398101604081905261002f9161010d565b8181600361003d83826101ff565b50600461004a82826101ff565b50505050506102bd565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261007b57600080fd5b81516001600160401b0381111561009457610094610054565b604051601f8201601f19908116603f011681016001600160401b03811182821017156100c2576100c2610054565b6040528181528382016020018510156100da57600080fd5b60005b828110156100f9576020818601810151838301820152016100dd565b506000918101602001919091529392505050565b6000806040838503121561012057600080fd5b82516001600160401b0381111561013657600080fd5b6101428582860161006a565b602085015190935090506001600160401b0381111561016057600080fd5b61016c8582860161006a565b9150509250929050565b600181811c9082168061018a57607f821691505b6020821081036101aa57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156101fa57806000526020600020601f840160051c810160208510156101d75750805b601f840160051c820191505b818110156101f757600081556001016101e3565b50505b505050565b81516001600160401b0381111561021857610218610054565b61022c816102268454610176565b846101b0565b6020601f82116001811461026057600083156102485750848201515b600019600385901b1c1916600184901b1784556101f7565b600084815260208120601f198516915b828110156102905787850151825560209485019460019092019101610270565b50848210156102ae5786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b6109d3806102cc6000396000f3fe608060405234801561001057600080fd5b50600436106100be5760003560e01c806340c10f191161007657806395d89b411161005b57806395d89b4114610183578063a9059cbb1461018b578063dd62ed3e1461019e57600080fd5b806340c10f191461013857806370a082311461014d57600080fd5b806318160ddd116100a757806318160ddd1461010457806323b872dd14610116578063313ce5671461012957600080fd5b806306fdde03146100c3578063095ea7b3146100e1575b600080fd5b6100cb6101e4565b6040516100d891906107bf565b60405180910390f35b6100f46100ef366004610854565b610276565b60405190151581526020016100d8565b6002545b6040519081526020016100d8565b6100f461012436600461087e565b610290565b604051601281526020016100d8565b61014b610146366004610854565b6102b4565b005b61010861015b3660046108bb565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6100cb6102c2565b6100f4610199366004610854565b6102d1565b6101086101ac3660046108dd565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6060600380546101f390610910565b80601f016020809104026020016040519081016040528092919081815260200182805461021f90610910565b801561026c5780601f106102415761010080835404028352916020019161026c565b820191906000526020600020905b81548152906001019060200180831161024f57829003601f168201915b5050505050905090565b6000336102848185856102df565b60019150505b92915050565b60003361029e8582856102f1565b6102a98585856103c5565b506001949350505050565b6102be8282610470565b5050565b6060600480546101f390610910565b6000336102848185856103c5565b6102ec83838360016104cc565b505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146103bf57818110156103b0576040517ffb8f41b200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416600482015260248101829052604481018390526064015b60405180910390fd5b6103bf848484840360006104cc565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8316610415576040517f96c6fd1e000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff8216610465576040517fec442f05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b6102ec838383610614565b73ffffffffffffffffffffffffffffffffffffffff82166104c0576040517fec442f05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b6102be60008383610614565b73ffffffffffffffffffffffffffffffffffffffff841661051c576040517fe602df05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff831661056c576040517f94280d62000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260016020908152604080832093871683529290522082905580156103bf578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161060691815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff831661064c5780600260008282546106419190610963565b909155506106fe9050565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260208190526040902054818110156106d2576040517fe450d38c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8516600482015260248101829052604481018390526064016103a7565b73ffffffffffffffffffffffffffffffffffffffff841660009081526020819052604090209082900390555b73ffffffffffffffffffffffffffffffffffffffff821661072757600280548290039055610753565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090208054820190555b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516107b291815260200190565b60405180910390a3505050565b602081526000825180602084015260005b818110156107ed57602081860181015160408684010152016107d0565b5060006040828501015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011684010191505092915050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461084f57600080fd5b919050565b6000806040838503121561086757600080fd5b6108708361082b565b946020939093013593505050565b60008060006060848603121561089357600080fd5b61089c8461082b565b92506108aa6020850161082b565b929592945050506040919091013590565b6000602082840312156108cd57600080fd5b6108d68261082b565b9392505050565b600080604083850312156108f057600080fd5b6108f98361082b565b91506109076020840161082b565b90509250929050565b600181811c9082168061092457607f821691505b60208210810361095d577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b8082018082111561028a577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea26469706673582212207e804ca539d49155d2b6bc19268ce22f9f857027c75247d69fb0d56a089c93d464736f6c634300081a003360a060405234801561001057600080fd5b5060405161140b38038061140b83398101604081905261002f916101b3565b60016000556002805460ff191690556001600160a01b038316158061005b57506001600160a01b038216155b8061006d57506001600160a01b038116155b1561008b5760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b0383166080526100a3600082610102565b506100ce7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a82610102565b506100f97f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e483610102565b505050506101f6565b60008281526001602090815260408083206001600160a01b038516845290915281205460ff1661018d5760008381526001602081815260408084206001600160a01b0387168086529252808420805460ff19169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a4506001610191565b5060005b92915050565b80516001600160a01b03811681146101ae57600080fd5b919050565b6000806000606084860312156101c857600080fd5b6101d184610197565b92506101df60208501610197565b91506101ed60408501610197565b90509250925092565b6080516111de61022d60003960008181610132015281816103c5015281816104270152818161065801526106ba01526111de6000f3fe608060405234801561001057600080fd5b50600436106101005760003560e01c80638456cb5911610097578063c8a0236211610066578063c8a0236214610276578063d547741f14610289578063d9caed121461029c578063e63ab1e9146102af57600080fd5b80638456cb59146101f957806385f438c11461020157806391d1485414610228578063a217fddf1461026e57600080fd5b80632f2ff15d116100d35780632f2ff15d146101c057806336568abe146101d35780633f4ba83a146101e65780635c975abb146101ee57600080fd5b806301ffc9a714610105578063116191b61461012d57806321fc65f214610179578063248a9ca31461018e575b600080fd5b610118610113366004610f04565b6102d6565b60405190151581526020015b60405180910390f35b6101547f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610124565b61018c610187366004610f6f565b61036f565b005b6101b261019c36600461100c565b6000908152600160208190526040909120015490565b604051908152602001610124565b61018c6101ce366004611025565b610511565b61018c6101e1366004611025565b61053d565b61018c61059b565b60025460ff16610118565b61018c6105d0565b6101b27f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b610118610236366004611025565b600091825260016020908152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b6101b2600081565b61018c610284366004610f6f565b610602565b61018c610297366004611025565b61078a565b61018c6102aa366004611051565b6107b0565b6101b27f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061036957507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b61037761087d565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e46103a1816108c0565b6103a96108ca565b6103ea73ffffffffffffffffffffffffffffffffffffffff87167f000000000000000000000000000000000000000000000000000000000000000086610909565b6040517f5131ab5900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690635131ab599061046490899089908990899089906004016110d7565b600060405180830381600087803b15801561047e57600080fd5b505af1158015610492573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167f85b5be9cf454e05e0bddf49315178102227c312078eefa3c00294fb4d912ae4e8686866040516104f793929190611134565b60405180910390a35061050a6001600055565b5050505050565b6000828152600160208190526040909120015461052d816108c0565b6105378383610996565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8116331461058c576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6105968282610a61565b505050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a6105c5816108c0565b6105cd610b20565b50565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a6105fa816108c0565b6105cd610b9d565b61060a61087d565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e4610634816108c0565b61063c6108ca565b61067d73ffffffffffffffffffffffffffffffffffffffff87167f000000000000000000000000000000000000000000000000000000000000000086610909565b6040517fb8969bd400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063b8969bd4906106f790899089908990899089906004016110d7565b600060405180830381600087803b15801561071157600080fd5b505af1158015610725573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fb9d4efa96044e5f5e03e696fa9ae2ff66911cc27e8a637c3627c75bc5b2241c88686866040516104f793929190611134565b600082815260016020819052604090912001546107a6816108c0565b6105378383610a61565b6107b861087d565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e46107e2816108c0565b6107ea6108ca565b61080b73ffffffffffffffffffffffffffffffffffffffff85168484610909565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f9b1bfa7fa9ee420a16e124f794c35ac9f90472acc99140eb2f6447c714cad8eb8460405161086a91815260200190565b60405180910390a3506105966001600055565b6002600054036108b9576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b6105cd8133610bf8565b60025460ff1615610907576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6040805173ffffffffffffffffffffffffffffffffffffffff8416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb00000000000000000000000000000000000000000000000000000000179052610596908490610c89565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff16610a5957600083815260016020818152604080842073ffffffffffffffffffffffffffffffffffffffff8716808652925280842080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a4506001610369565b506000610369565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff1615610a5957600083815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8616808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a4506001610369565b610b28610d1f565b600280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b610ba56108ca565b600280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258610b733390565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16610c85576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82166004820152602481018390526044015b60405180910390fd5b5050565b6000610cab73ffffffffffffffffffffffffffffffffffffffff841683610d5b565b90508051600014158015610cd0575080806020019051810190610cce9190611157565b155b15610596576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84166004820152602401610c7c565b60025460ff16610907576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6060610d6983836000610d70565b9392505050565b606081471015610dae576040517fcd786059000000000000000000000000000000000000000000000000000000008152306004820152602401610c7c565b6000808573ffffffffffffffffffffffffffffffffffffffff168486604051610dd79190611179565b60006040518083038185875af1925050503d8060008114610e14576040519150601f19603f3d011682016040523d82523d6000602084013e610e19565b606091505b5091509150610e29868383610e33565b9695505050505050565b606082610e4857610e4382610ec2565b610d69565b8151158015610e6c575073ffffffffffffffffffffffffffffffffffffffff84163b155b15610ebb576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85166004820152602401610c7c565b5080610d69565b805115610ed25780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060208284031215610f1657600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610d6957600080fd5b803573ffffffffffffffffffffffffffffffffffffffff81168114610f6a57600080fd5b919050565b600080600080600060808688031215610f8757600080fd5b610f9086610f46565b9450610f9e60208701610f46565b935060408601359250606086013567ffffffffffffffff811115610fc157600080fd5b8601601f81018813610fd257600080fd5b803567ffffffffffffffff811115610fe957600080fd5b886020828401011115610ffb57600080fd5b959894975092955050506020019190565b60006020828403121561101e57600080fd5b5035919050565b6000806040838503121561103857600080fd5b8235915061104860208401610f46565b90509250929050565b60008060006060848603121561106657600080fd5b61106f84610f46565b925061107d60208501610f46565b929592945050506040919091013590565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff8616815273ffffffffffffffffffffffffffffffffffffffff8516602082015283604082015260806060820152600061112960808301848661108e565b979650505050505050565b83815260406020820152600061114e60408301848661108e565b95945050505050565b60006020828403121561116957600080fd5b81518015158114610d6957600080fd5b6000825160005b8181101561119a5760208186018101518583015201611180565b50600092019182525091905056fea264697066735822122069d5c5c3cb2752c876b6a2138d8d9b66bac6bd1b48a1fe98417eea81faf02a3e64736f6c634300081a003360c060405260001960035534801561001657600080fd5b5060405161155a38038061155a83398101604081905261003591610220565b60016000819055805460ff19169055838383836001600160a01b038416158061006557506001600160a01b038316155b8061007757506001600160a01b038216155b8061008957506001600160a01b038116155b156100a75760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b03808516608052831660a0526100c5600082610154565b506100f07f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e483610154565b5061011b7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb83610154565b506101467f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a82610154565b505050505050505050610274565b60008281526002602090815260408083206001600160a01b038516845290915281205460ff166101fa5760008381526002602090815260408083206001600160a01b03861684529091529020805460ff191660011790556101b23390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45060016101fe565b5060005b92915050565b80516001600160a01b038116811461021b57600080fd5b919050565b6000806000806080858703121561023657600080fd5b61023f85610204565b935061024d60208601610204565b925061025b60408601610204565b915061026960608601610204565b905092959194509250565b60805160a0516112826102d86000396000818161021d01528181610531015281816108240152818161097b01528181610ad00152610bf20152600081816101d1015281816104a1015281816105040152818161079401526107f701526112826000f3fe608060405234801561001057600080fd5b50600436106101775760003560e01c80635e3e9fef116100d857806391d148541161008c578063d547741f11610066578063d547741f14610386578063d5abeb0114610399578063e63ab1e9146103a257600080fd5b806391d1485414610311578063a217fddf14610357578063a783c7891461035f57600080fd5b8063743e0c9b116100bd578063743e0c9b146102cf5780638456cb59146102e257806385f438c1146102ea57600080fd5b80635e3e9fef146102a95780636f8b44b0146102bc57600080fd5b8063248a9ca31161012f57806336568abe1161011457806336568abe146102835780633f4ba83a146102965780635c975abb1461029e57600080fd5b8063248a9ca31461023f5780632f2ff15d1461027057600080fd5b8063106e629011610160578063106e6290146101b9578063116191b6146101cc57806321e093b11461021857600080fd5b806301ffc9a71461017c57806302d5c899146101a4575b600080fd5b61018f61018a366004610fb4565b6103c9565b60405190151581526020015b60405180910390f35b6101b76101b2366004611026565b610462565b005b6101b76101c73660046110b8565b6105f7565b6101f37f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161019b565b6101f37f000000000000000000000000000000000000000000000000000000000000000081565b61026261024d3660046110eb565b60009081526002602052604090206001015490565b60405190815260200161019b565b6101b761027e366004611104565b61069c565b6101b7610291366004611104565b6106c7565b6101b7610720565b60015460ff1661018f565b6101b76102b7366004611026565b610755565b6101b76102ca3660046110eb565b6108d0565b6101b76102dd3660046110eb565b61093e565b6101b76109e8565b6102627f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b61018f61031f366004611104565b600091825260026020908152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b610262600081565b6102627f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb81565b6101b7610394366004611104565b610a1a565b61026260035481565b6102627f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061045c57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b61046a610a3f565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461049481610a82565b61049c610a8c565b6104c77f00000000000000000000000000000000000000000000000000000000000000008684610acb565b6040517fb8969bd400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063b8969bd490610561907f0000000000000000000000000000000000000000000000000000000000000000908a908a908a908a90600401611179565b600060405180830381600087803b15801561057b57600080fd5b505af115801561058f573d6000803e3d6000fd5b505050508573ffffffffffffffffffffffffffffffffffffffff167fba96f26bdda53eb8c8ba39045dfb4ff39753fbc7a6edcf250a88e75e78d102fe8686866040516105dd939291906111d6565b60405180910390a2506105f06001600055565b5050505050565b6105ff610a3f565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461062981610a82565b610631610a8c565b61063c848484610acb565b8373ffffffffffffffffffffffffffffffffffffffff167f884edad9ce6fa2440d8a54cc123490eb96d2768479d49ff9c7366125a94243648460405161068491815260200190565b60405180910390a2506106976001600055565b505050565b6000828152600260205260409020600101546106b781610a82565b6106c18383610c53565b50505050565b73ffffffffffffffffffffffffffffffffffffffff81163314610716576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6106978282610d53565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61074a81610a82565b610752610e12565b50565b61075d610a3f565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461078781610a82565b61078f610a8c565b6107ba7f00000000000000000000000000000000000000000000000000000000000000008684610acb565b6040517f5131ab5900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690635131ab5990610854907f0000000000000000000000000000000000000000000000000000000000000000908a908a908a908a90600401611179565b600060405180830381600087803b15801561086e57600080fd5b505af1158015610882573d6000803e3d6000fd5b505050508573ffffffffffffffffffffffffffffffffffffffff167f7772f56296d3a5202974a45c61c9188d844ab4d6eeb18c851e4b8d5384ca6ced8686866040516105dd939291906111d6565b7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb6108fa81610a82565b610902610a8c565b60038290556040518281527f7810bd47de260c3e9ee10061cf438099dd12256c79485f12f94dbccc981e806c9060200160405180910390a15050565b610946610a8c565b6040517f79cc6790000000000000000000000000000000000000000000000000000000008152336004820152602481018290527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16906379cc679090604401600060405180830381600087803b1580156109d457600080fd5b505af11580156105f0573d6000803e3d6000fd5b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610a1281610a82565b610752610e8f565b600082815260026020526040902060010154610a3581610a82565b6106c18383610d53565b600260005403610a7b576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b6107528133610ee8565b60015460ff1615610ac9576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6003547f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b39573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b5d91906111f9565b610b679084611212565b1115610b9f576040517fc30436e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f1e458bee00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff848116600483015260248201849052604482018390527f00000000000000000000000000000000000000000000000000000000000000001690631e458bee90606401600060405180830381600087803b158015610c3657600080fd5b505af1158015610c4a573d6000803e3d6000fd5b50505050505050565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff16610d4b57600083815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff86168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055610ce93390565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a450600161045c565b50600061045c565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff1615610d4b57600083815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8616808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a450600161045c565b610e1a610f78565b600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b610e97610a8c565b600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016811790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25833610e65565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16610f74576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff821660048201526024810183905260440160405180910390fd5b5050565b60015460ff16610ac9576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060208284031215610fc657600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610ff657600080fd5b9392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461102157600080fd5b919050565b60008060008060006080868803121561103e57600080fd5b61104786610ffd565b945060208601359350604086013567ffffffffffffffff81111561106a57600080fd5b8601601f8101881361107b57600080fd5b803567ffffffffffffffff81111561109257600080fd5b8860208284010111156110a457600080fd5b959894975060200195606001359392505050565b6000806000606084860312156110cd57600080fd5b6110d684610ffd565b95602085013595506040909401359392505050565b6000602082840312156110fd57600080fd5b5035919050565b6000806040838503121561111757600080fd5b8235915061112760208401610ffd565b90509250929050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff8616815273ffffffffffffffffffffffffffffffffffffffff851660208201528360408201526080606082015260006111cb608083018486611130565b979650505050505050565b8381526040602082015260006111f0604083018486611130565b95945050505050565b60006020828403121561120b57600080fd5b5051919050565b8082018082111561045c577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea2646970667358221220f784eb6e1655c2988d3f762737188cfee07a61da1d5b8456cc4f4e55cb339cfb64736f6c634300081a00336080604052348015600f57600080fd5b506001600055610d3a806100246000396000f3fe6080604052600436106100635760003560e01c8063c513169111610040578063c5131691146100c1578063e04d4f97146100e1578063f05b6abf146100f457005b8063357fc5a21461006c5780636ed701691461008c5780638fcaa0b5146100a157005b3661006a57005b005b34801561007857600080fd5b5061006a6100873660046106c0565b610114565b34801561009857600080fd5b5061006a6101aa565b3480156100ad57600080fd5b5061006a6100bc3660046106fc565b6101df565b3480156100cd57600080fd5b5061006a6100dc3660046106c0565b61021e565b61006a6100ef366004610895565b6102f9565b34801561010057600080fd5b5061006a61010f366004610981565b61033d565b61011c610372565b61013e73ffffffffffffffffffffffffffffffffffffffff83163383866103b5565b604080513381526020810185905273ffffffffffffffffffffffffffffffffffffffff848116828401528316606082015290517f2b58128f24a9f59127cc5b5430d70542b22220f2d9adaa86e442b816ab98af609181900360800190a16101a56001600055565b505050565b6040513381527fbcaadb46b82a48af60b608f58959ae6b8310d1b0a0d094c2e9ec3208ed39f2a09060200160405180910390a1565b7f0d3f65f00e631663aa85c96330b5c7a83bb29af3630c0063776f985edc3037aa33838360405161021293929190610a6b565b60405180910390a15050565b610226610372565b6000610233600285610ad5565b90508060000361026f576040517f1f2a200500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61029173ffffffffffffffffffffffffffffffffffffffff84163384846103b5565b604080513381526020810183905273ffffffffffffffffffffffffffffffffffffffff858116828401528416606082015290517f2b58128f24a9f59127cc5b5430d70542b22220f2d9adaa86e442b816ab98af609181900360800190a1506101a56001600055565b7f1f1ff1f5fb41346850b2f5c04e6c767e2f1c8a525c5c0c5cdb60cdf3ca5f62fa3334858585604051610330959493929190610b7e565b60405180910390a1505050565b7f74a53cd528a921fca7dbdee62f86819051d3cc98f214951f4238e8843f20b146338484846040516103309493929190610c08565b6002600054036103ae576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b6040805173ffffffffffffffffffffffffffffffffffffffff85811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd0000000000000000000000000000000000000000000000000000000017905261044a908590610450565b50505050565b600061047273ffffffffffffffffffffffffffffffffffffffff8416836104eb565b905080516000141580156104975750808060200190518101906104959190610ccb565b155b156101a5576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff841660048201526024015b60405180910390fd5b60606104f983836000610500565b9392505050565b60608147101561053e576040517fcd7860590000000000000000000000000000000000000000000000000000000081523060048201526024016104e2565b6000808573ffffffffffffffffffffffffffffffffffffffff1684866040516105679190610ce8565b60006040518083038185875af1925050503d80600081146105a4576040519150601f19603f3d011682016040523d82523d6000602084013e6105a9565b606091505b50915091506105b98683836105c3565b9695505050505050565b6060826105d8576105d382610652565b6104f9565b81511580156105fc575073ffffffffffffffffffffffffffffffffffffffff84163b155b1561064b576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff851660048201526024016104e2565b50806104f9565b8051156106625780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50565b803573ffffffffffffffffffffffffffffffffffffffff811681146106bb57600080fd5b919050565b6000806000606084860312156106d557600080fd5b833592506106e560208501610697565b91506106f360408501610697565b90509250925092565b6000806020838503121561070f57600080fd5b823567ffffffffffffffff81111561072657600080fd5b8301601f8101851361073757600080fd5b803567ffffffffffffffff81111561074e57600080fd5b85602082840101111561076057600080fd5b6020919091019590945092505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156107e6576107e6610770565b604052919050565b600082601f8301126107ff57600080fd5b813567ffffffffffffffff81111561081957610819610770565b61084a60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8401160161079f565b81815284602083860101111561085f57600080fd5b816020850160208301376000918101602001919091529392505050565b801515811461069457600080fd5b80356106bb8161087c565b6000806000606084860312156108aa57600080fd5b833567ffffffffffffffff8111156108c157600080fd5b6108cd868287016107ee565b9350506020840135915060408401356108e58161087c565b809150509250925092565b600067ffffffffffffffff82111561090a5761090a610770565b5060051b60200190565b600082601f83011261092557600080fd5b8135610938610933826108f0565b61079f565b8082825260208201915060208360051b86010192508583111561095a57600080fd5b602085015b8381101561097757803583526020928301920161095f565b5095945050505050565b60008060006060848603121561099657600080fd5b833567ffffffffffffffff8111156109ad57600080fd5b8401601f810186136109be57600080fd5b80356109cc610933826108f0565b8082825260208201915060208360051b8501019250888311156109ee57600080fd5b602084015b83811015610a3057803567ffffffffffffffff811115610a1257600080fd5b610a218b6020838901016107ee565b845250602092830192016109f3565b509550505050602084013567ffffffffffffffff811115610a5057600080fd5b610a5c86828701610914565b9250506106f36040850161088a565b73ffffffffffffffffffffffffffffffffffffffff8416815260406020820152816040820152818360608301376000818301606090810191909152601f9092017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016010192915050565b600082610b0b577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60005b83811015610b2b578181015183820152602001610b13565b50506000910152565b60008151808452610b4c816020860160208601610b10565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b73ffffffffffffffffffffffffffffffffffffffff8616815284602082015260a060408201526000610bb360a0830186610b34565b6060830194909452509015156080909101529392505050565b600081518084526020840193506020830160005b82811015610bfe578151865260209586019590910190600101610be0565b5093949350505050565b60006080820173ffffffffffffffffffffffffffffffffffffffff871683526080602084015280865180835260a08501915060a08160051b86010192506020880160005b82811015610c9b577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60878603018452610c86858351610b34565b94506020938401939190910190600101610c4c565b505050508281036040840152610cb18186610bcc565b915050610cc2606083018415159052565b95945050505050565b600060208284031215610cdd57600080fd5b81516104f98161087c565b60008251610cfa818460208701610b10565b919091019291505056fea2646970667358221220556072e1abafc3c4063b8cce832228b4f309b93726aaa6a6dfab20cb880c6d1864736f6c634300081a00336080604052348015600f57600080fd5b5060405161080c38038061080c833981016040819052602c916050565b600080546001600160a01b0319166001600160a01b0392909216919091179055607e565b600060208284031215606157600080fd5b81516001600160a01b0381168114607757600080fd5b9392505050565b61077f8061008d6000396000f3fe608060405234801561001057600080fd5b50600436106100415760003560e01c80630abd890514610046578063116191b61461005b578063865b36f6146100a4575b600080fd5b6100596100543660046104c4565b6100b7565b005b60005461007b9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b6100596100b236600461057f565b6102af565b60008383836040516024016100ce93929190610674565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe04d4f970000000000000000000000000000000000000000000000000000000017905260005490517f095ea7b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff91821660048201526024810189905291925086169063095ea7b3906044016020604051808303816000875af11580156101be573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101e2919061069e565b610218576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000546040517f7993c1e000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff90911690637993c1e090610274908a908a908a9087906004016106c2565b600060405180830381600087803b15801561028e57600080fd5b505af11580156102a2573d6000803e3d6000fd5b5050505050505050505050565b60008383836040516024016102c693929190610674565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe04d4f970000000000000000000000000000000000000000000000000000000017905260005490517f5d40e17800000000000000000000000000000000000000000000000000000000815291925073ffffffffffffffffffffffffffffffffffffffff1690635d40e1789061039690899089908690600401610714565b600060405180830381600087803b1580156103b057600080fd5b505af11580156103c4573d6000803e3d6000fd5b50505050505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600082601f83011261041057600080fd5b81356020830160008067ffffffffffffffff841115610431576104316103d0565b506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f85018116603f0116810181811067ffffffffffffffff8211171561047e5761047e6103d0565b60405283815290508082840187101561049657600080fd5b838360208301376000602085830101528094505050505092915050565b80151581146104c157600080fd5b50565b60008060008060008060c087890312156104dd57600080fd5b863567ffffffffffffffff8111156104f457600080fd5b61050089828a016103ff565b96505060208701359450604087013573ffffffffffffffffffffffffffffffffffffffff8116811461053157600080fd5b9350606087013567ffffffffffffffff81111561054d57600080fd5b61055989828a016103ff565b9350506080870135915060a0870135610571816104b3565b809150509295509295509295565b600080600080600060a0868803121561059757600080fd5b853567ffffffffffffffff8111156105ae57600080fd5b6105ba888289016103ff565b95505060208601359350604086013567ffffffffffffffff8111156105de57600080fd5b6105ea888289016103ff565b935050606086013591506080860135610602816104b3565b809150509295509295909350565b6000815180845260005b818110156106365760208185018101518683018201520161061a565b5060006020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b6060815260006106876060830186610610565b602083019490945250901515604090910152919050565b6000602082840312156106b057600080fd5b81516106bb816104b3565b9392505050565b6080815260006106d56080830187610610565b85602084015273ffffffffffffffffffffffffffffffffffffffff8516604084015282810360608401526107098185610610565b979650505050505050565b6060815260006107276060830186610610565b846020840152828103604084015261073f8185610610565b969550505050505056fea2646970667358221220d5c8efa106d3ece0f3750900034e01f5ba81ba4b46a57e03310e9ccd21566f2864736f6c634300081a0033608060405234801561001057600080fd5b50604051610b3f380380610b3f83398101604081905261002f916100b9565b600380546001600160a01b038086166001600160a01b0319928316179092556004805485841690831617905560058054928416929091169190911790556040517f80699e81136d69cb8367ad52a994e25c722a86da654b561d0c14b61a777e7ac590600090a15050506100fc565b80516001600160a01b03811681146100b457600080fd5b919050565b6000806000606084860312156100ce57600080fd5b6100d78461009d565b92506100e56020850161009d565b91506100f36040850161009d565b90509250925092565b610a348061010b6000396000f3fe608060405234801561001057600080fd5b50600436106100c95760003560e01c806397770dff11610081578063d7fd7afb1161005b578063d7fd7afb146101f2578063d936a01214610220578063ee2815ba1461024057600080fd5b806397770dff146101b9578063a7cb0507146101cc578063c63585cc146101df57600080fd5b8063513a9c05116100b2578063513a9c0514610143578063569541b914610179578063842da36d1461019957600080fd5b80630be15547146100ce5780633c669d551461012e575b600080fd5b6101046100dc36600461071e565b60016020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b61014161013c366004610760565b610253565b005b61010461015136600461071e565b60026020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b6003546101049073ffffffffffffffffffffffffffffffffffffffff1681565b6005546101049073ffffffffffffffffffffffffffffffffffffffff1681565b6101416101c73660046107fd565b6103a0565b6101416101da36600461081f565b610419565b6101046101ed366004610841565b610467565b61021261020036600461071e565b60006020819052908152604090205481565b604051908152602001610125565b6004546101049073ffffffffffffffffffffffffffffffffffffffff1681565b61014161024e366004610884565b61059c565b604080516080810182526000606082019081528152336020820152468183015290517fa9059cbb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff87811660048301526024820186905286169063a9059cbb906044016020604051808303816000875af11580156102e7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061030b91906108b0565b506040517fde43156e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff87169063de43156e90610366908490899089908990899060040161091b565b600060405180830381600087803b15801561038057600080fd5b505af1158015610394573d6000803e3d6000fd5b50505050505050505050565b600380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527fdba79d534382d1a8ae108e4c8ecb27c6ae42ab8b91d44eedf88bd329f3868d5e9060200160405180910390a150565b6000828152602081815260409182902083905581518481529081018390527f49f492222906ac486c3c1401fa545626df1f0c0e5a77a05597ea2ed66af9850d91015b60405180910390a15050565b60008060006104768585610620565b6040517fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606084811b8216602084015283901b166034820152919350915086906048016040516020818303038152906040528051906020012060405160200161055c9291907fff00000000000000000000000000000000000000000000000000000000000000815260609290921b7fffffffffffffffffffffffffffffffffffffffff00000000000000000000000016600183015260158201527f96e8ac4277198ff8b6f785478aa9a39f403cb768dd02cbee326c3e7da348845f603582015260550190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291905280516020909101209695505050505050565b60008281526001602090815260409182902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff85169081179091558251858152918201527fd1b36d30f6248e97c473b4d1348ca164a4ef6759022f54a58ec200326c39c45d910161045b565b6000808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603610688576040517fcb1e7cfe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16106106c25782846106c5565b83835b909250905073ffffffffffffffffffffffffffffffffffffffff8216610717576040517f78b507da00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b9250929050565b60006020828403121561073057600080fd5b5035919050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461075b57600080fd5b919050565b60008060008060006080868803121561077857600080fd5b61078186610737565b945061078f60208701610737565b935060408601359250606086013567ffffffffffffffff8111156107b257600080fd5b8601601f810188136107c357600080fd5b803567ffffffffffffffff8111156107da57600080fd5b8860208284010111156107ec57600080fd5b959894975092955050506020019190565b60006020828403121561080f57600080fd5b61081882610737565b9392505050565b6000806040838503121561083257600080fd5b50508035926020909101359150565b60008060006060848603121561085657600080fd5b61085f84610737565b925061086d60208501610737565b915061087b60408501610737565b90509250925092565b6000806040838503121561089757600080fd5b823591506108a760208401610737565b90509250929050565b6000602082840312156108c257600080fd5b8151801515811461081857600080fd5b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b60808152600086516060608084015280518060e085015260005b81811015610953576020818401810151610100878401015201610935565b5060008482016101000152602089015173ffffffffffffffffffffffffffffffffffffffff811660a0860152601f9091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168401915050604088015160c084015273ffffffffffffffffffffffffffffffffffffffff871660208401528560408401526101008382030160608401526109f2610100820185876108d2565b9897505050505050505056fea264697066735822122044450a00a3ccd112d5abf008f947389875d330f56afa78b6ab0863159c2d87f664736f6c634300081a003360e060405234801561001057600080fd5b50604051611bb9380380611bb983398101604081905261002f9161020e565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461006357604051632b2add3d60e01b815260040160405180910390fd5b6001600160a01b038216158061008057506001600160a01b038116155b1561009e5760405163d92e233d60e01b815260040160405180910390fd5b60066100aa8982610360565b5060076100b78882610360565b5060ff861660c05260808590528360028111156100d6576100d661041e565b60a08160028111156100ea576100ea61041e565b905250600192909255600080546001600160a01b039283166001600160a01b03199182161790915560088054929093169116179055506104349350505050565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261015157600080fd5b81516001600160401b0381111561016a5761016a61012a565b604051601f8201601f19908116603f011681016001600160401b03811182821017156101985761019861012a565b6040528181528382016020018510156101b057600080fd5b60005b828110156101cf576020818601810151838301820152016101b3565b506000918101602001919091529392505050565b8051600381106101f257600080fd5b919050565b80516001600160a01b03811681146101f257600080fd5b600080600080600080600080610100898b03121561022b57600080fd5b88516001600160401b0381111561024157600080fd5b61024d8b828c01610140565b60208b015190995090506001600160401b0381111561026b57600080fd5b6102778b828c01610140565b975050604089015160ff8116811461028e57600080fd5b60608a015190965094506102a460808a016101e3565b60a08a015190945092506102ba60c08a016101f7565b91506102c860e08a016101f7565b90509295985092959890939650565b600181811c908216806102eb57607f821691505b60208210810361030b57634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111561035b57806000526020600020601f840160051c810160208510156103385750805b601f840160051c820191505b818110156103585760008155600101610344565b50505b505050565b81516001600160401b038111156103795761037961012a565b61038d8161038784546102d7565b84610311565b6020601f8211600181146103c157600083156103a95750848201515b600019600385901b1c1916600184901b178455610358565b600084815260208120601f198516915b828110156103f157878501518255602094850194600190920191016103d1565b508482101561040f5786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b634e487b7160e01b600052602160045260246000fd5b60805160a05160c05161174861047160003960006102170152600061033a0152600081816102eb01528181610ad70152610bdd01526117486000f3fe608060405234801561001057600080fd5b50600436106101985760003560e01c80638b851b95116100e3578063ccc775991161008c578063eddeb12311610066578063eddeb12314610431578063f2441b3214610444578063f687d12a1461046457600080fd5b8063ccc77599146103a4578063d9eeebed146103b7578063dd62ed3e146103eb57600080fd5b8063a9059cbb116100bd578063a9059cbb14610369578063c70126261461037c578063c835d7cc1461038f57600080fd5b80638b851b951461030d57806395d89b411461032d578063a3413d031461033557600080fd5b80633ce4a5bc116101455780634d8943bb1161011f5780634d8943bb146102a757806370a08231146102b057806385e1f4d0146102e657600080fd5b80633ce4a5bc1461024157806342966c681461028157806347e7ef241461029457600080fd5b806318160ddd1161017657806318160ddd146101f557806323b872dd146101fd578063313ce5671461021057600080fd5b806306fdde031461019d578063091d2788146101bb578063095ea7b3146101d2575b600080fd5b6101a5610477565b6040516101b29190611327565b60405180910390f35b6101c460015481565b6040519081526020016101b2565b6101e56101e0366004611366565b610509565b60405190151581526020016101b2565b6005546101c4565b6101e561020b366004611392565b610520565b60405160ff7f00000000000000000000000000000000000000000000000000000000000000001681526020016101b2565b61025c73735b14bb79463307aacbed86daf3322b1e6226ab81565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101b2565b6101e561028f3660046113d3565b6105b7565b6101e56102a2366004611366565b6105cb565b6101c460025481565b6101c46102be3660046113ec565b73ffffffffffffffffffffffffffffffffffffffff1660009081526003602052604090205490565b6101c47f000000000000000000000000000000000000000000000000000000000000000081565b60085461025c9073ffffffffffffffffffffffffffffffffffffffff1681565b6101a561071f565b61035c7f000000000000000000000000000000000000000000000000000000000000000081565b6040516101b29190611409565b6101e5610377366004611366565b61072e565b6101e561038a366004611479565b61073b565b6103a261039d3660046113ec565b61088a565b005b6103a26103b23660046113ec565b61099e565b6103bf610aab565b6040805173ffffffffffffffffffffffffffffffffffffffff90931683526020830191909152016101b2565b6101c46103f9366004611571565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260046020908152604080832093909416825291909152205490565b6103a261043f3660046113d3565b610cc9565b60005461025c9073ffffffffffffffffffffffffffffffffffffffff1681565b6103a26104723660046113d3565b610d4b565b606060068054610486906115aa565b80601f01602080910402602001604051908101604052809291908181526020018280546104b2906115aa565b80156104ff5780601f106104d4576101008083540402835291602001916104ff565b820191906000526020600020905b8154815290600101906020018083116104e257829003601f168201915b5050505050905090565b6000610516338484610dcd565b5060015b92915050565b600061052d848484610ed6565b73ffffffffffffffffffffffffffffffffffffffff8416600090815260046020908152604080832033845290915290205482811015610598576040517f10bad14700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6105ac85336105a7868561162c565b610dcd565b506001949350505050565b60006105c33383611091565b506001919050565b60003373735b14bb79463307aacbed86daf3322b1e6226ab14801590610609575060005473ffffffffffffffffffffffffffffffffffffffff163314155b801561062d575060085473ffffffffffffffffffffffffffffffffffffffff163314155b15610664576040517fddb5de5e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61066e83836111d3565b6040517f735b14bb79463307aacbed86daf3322b1e6226ab000000000000000000000000602082015273ffffffffffffffffffffffffffffffffffffffff8416907f67fc7bdaed5b0ec550d8706b87d60568ab70c6b781263c70101d54cd1564aab390603401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529082905261070e91869061163f565b60405180910390a250600192915050565b606060078054610486906115aa565b6000610516338484610ed6565b6000806000610748610aab565b6040517f23b872dd00000000000000000000000000000000000000000000000000000000815233600482015273735b14bb79463307aacbed86daf3322b1e6226ab602482015260448101829052919350915073ffffffffffffffffffffffffffffffffffffffff8316906323b872dd906064016020604051808303816000875af11580156107da573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107fe9190611661565b610834576040517f0a7cd6d600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61083e3385611091565b60025460405133917f9ffbffc04a397460ee1dbe8c9503e098090567d6b7f4b3c02a8617d800b6d9559161087791899189918791611683565b60405180910390a2506001949350505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab146108d7576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116610924576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527fd55614e962c5fd6ece71614f6348d702468a997a394dd5e5c1677950226d97ae906020015b60405180910390a150565b3373735b14bb79463307aacbed86daf3322b1e6226ab146109eb576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116610a38576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600880547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527f88815d964e380677e86d817e7d65dea59cb7b4c3b5b7a0c8ec7ea4a74f90a38790602001610993565b600080546040517f0be155470000000000000000000000000000000000000000000000000000000081527f000000000000000000000000000000000000000000000000000000000000000060048201528291829173ffffffffffffffffffffffffffffffffffffffff90911690630be1554790602401602060405180830381865afa158015610b3e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b6291906116b2565b905073ffffffffffffffffffffffffffffffffffffffff8116610bb1576040517f78fff39600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080546040517fd7fd7afb0000000000000000000000000000000000000000000000000000000081527f0000000000000000000000000000000000000000000000000000000000000000600482015273ffffffffffffffffffffffffffffffffffffffff9091169063d7fd7afb90602401602060405180830381865afa158015610c40573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c6491906116cf565b905080600003610ca0576040517fe661aed000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060025460015483610cb391906116e8565b610cbd91906116ff565b92959294509192505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610d16576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60028190556040518181527fef13af88e424b5d15f49c77758542c1938b08b8b95b91ed0751f98ba99000d8f90602001610993565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610d98576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018190556040518181527fff5788270f43bfc1ca41c503606d2594aa3023a1a7547de403a3e2f146a4a80a90602001610993565b73ffffffffffffffffffffffffffffffffffffffff8316610e1a576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216610e67576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff83811660008181526004602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8316610f23576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216610f70576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff831660009081526003602052604090205481811015610fd0576040517ffe382aa700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610fda828261162c565b73ffffffffffffffffffffffffffffffffffffffff808616600090815260036020526040808220939093559085168152908120805484929061101d9084906116ff565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161108391815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff82166110de576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff82166000908152600360205260409020548181101561113e576040517ffe382aa700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611148828261162c565b73ffffffffffffffffffffffffffffffffffffffff84166000908152600360205260408120919091556005805484929061118390849061162c565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90602001610ec9565b73ffffffffffffffffffffffffffffffffffffffff8216611220576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b806005600082825461123291906116ff565b909155505073ffffffffffffffffffffffffffffffffffffffff82166000908152600360205260408120805483929061126c9084906116ff565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6000815180845260005b818110156112e9576020818501810151868301820152016112cd565b5060006020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b60208152600061133a60208301846112c3565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff8116811461136357600080fd5b50565b6000806040838503121561137957600080fd5b823561138481611341565b946020939093013593505050565b6000806000606084860312156113a757600080fd5b83356113b281611341565b925060208401356113c281611341565b929592945050506040919091013590565b6000602082840312156113e557600080fd5b5035919050565b6000602082840312156113fe57600080fd5b813561133a81611341565b6020810160038310611444577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000806040838503121561148c57600080fd5b823567ffffffffffffffff8111156114a357600080fd5b8301601f810185136114b457600080fd5b803567ffffffffffffffff8111156114ce576114ce61144a565b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8501160116810181811067ffffffffffffffff8211171561153a5761153a61144a565b60405281815282820160200187101561155257600080fd5b8160208401602083013760006020928201830152969401359450505050565b6000806040838503121561158457600080fd5b823561158f81611341565b9150602083013561159f81611341565b809150509250929050565b600181811c908216806115be57607f821691505b6020821081036115f7577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8181038181111561051a5761051a6115fd565b60408152600061165260408301856112c3565b90508260208301529392505050565b60006020828403121561167357600080fd5b8151801515811461133a57600080fd5b60808152600061169660808301876112c3565b6020830195909552506040810192909252606090910152919050565b6000602082840312156116c457600080fd5b815161133a81611341565b6000602082840312156116e157600080fd5b5051919050565b808202811582820484141761051a5761051a6115fd565b8082018082111561051a5761051a6115fd56fea26469706673582212204013e39523742118b3f2227e145ee7e48176ba6aebead33c596dca2acb59a74c64736f6c634300081a0033a2646970667358221220aa3caac71602bf019e716bcee8fa8b8958e2688fbb70cdd9ff44fff7d54e999164736f6c634300081a0033", } // GatewayEVMZEVMTestABI is the input ABI used to generate the binding from. diff --git a/v2/pkg/gatewayzevm.sol/gatewayzevm.go b/v2/pkg/gatewayzevm.sol/gatewayzevm.go index 54a045a8..08bb6b91 100644 --- a/v2/pkg/gatewayzevm.sol/gatewayzevm.go +++ b/v2/pkg/gatewayzevm.sol/gatewayzevm.go @@ -45,8 +45,8 @@ type ZContext struct { // GatewayZEVMMetaData contains all meta data concerning the GatewayZEVM contract. var GatewayZEVMMetaData = &bind.MetaData{ - ABI: "[{\"type\":\"constructor\",\"inputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"receive\",\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"DEFAULT_ADMIN_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"FUNGIBLE_MODULE_ADDRESS\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"PAUSER_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"UPGRADE_INTERFACE_VERSION\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"call\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"chainId\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"message\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"deposit\",\"inputs\":[{\"name\":\"zrc20\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"depositAndCall\",\"inputs\":[{\"name\":\"context\",\"type\":\"tuple\",\"internalType\":\"structzContext\",\"components\":[{\"name\":\"origin\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"sender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"chainID\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"message\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"depositAndCall\",\"inputs\":[{\"name\":\"context\",\"type\":\"tuple\",\"internalType\":\"structzContext\",\"components\":[{\"name\":\"origin\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"sender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"chainID\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"zrc20\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"message\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"depositAndRevert\",\"inputs\":[{\"name\":\"context\",\"type\":\"tuple\",\"internalType\":\"structrevertContext\",\"components\":[{\"name\":\"origin\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"sender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"chainID\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"zrc20\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"message\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"execute\",\"inputs\":[{\"name\":\"context\",\"type\":\"tuple\",\"internalType\":\"structzContext\",\"components\":[{\"name\":\"origin\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"sender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"chainID\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"zrc20\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"message\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"executeRevert\",\"inputs\":[{\"name\":\"context\",\"type\":\"tuple\",\"internalType\":\"structrevertContext\",\"components\":[{\"name\":\"origin\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"sender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"chainID\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"zrc20\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"message\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"getRoleAdmin\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"grantRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"hasRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"initialize\",\"inputs\":[{\"name\":\"zetaToken_\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"admin_\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"pause\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"paused\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"proxiableUUID\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"renounceRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"callerConfirmation\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"revokeRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"supportsInterface\",\"inputs\":[{\"name\":\"interfaceId\",\"type\":\"bytes4\",\"internalType\":\"bytes4\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"unpause\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"upgradeToAndCall\",\"inputs\":[{\"name\":\"newImplementation\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"withdraw\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"zrc20\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"withdraw\",\"inputs\":[{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"chainId\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"withdrawAndCall\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"zrc20\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"message\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"withdrawAndCall\",\"inputs\":[{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"chainId\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"message\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"zetaToken\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"event\",\"name\":\"Call\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"chainId\",\"type\":\"uint256\",\"indexed\":true,\"internalType\":\"uint256\"},{\"name\":\"receiver\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"message\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Initialized\",\"inputs\":[{\"name\":\"version\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Paused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleAdminChanged\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"previousAdminRole\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"newAdminRole\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleGranted\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleRevoked\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Unpaused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Upgraded\",\"inputs\":[{\"name\":\"implementation\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Withdrawal\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"chainId\",\"type\":\"uint256\",\"indexed\":true,\"internalType\":\"uint256\"},{\"name\":\"receiver\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"zrc20\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"gasfee\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"protocolFlatFee\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"message\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"AccessControlBadConfirmation\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"AccessControlUnauthorizedAccount\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"neededRole\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"type\":\"error\",\"name\":\"AddressEmptyCode\",\"inputs\":[{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"CallerIsNotFungibleModule\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ERC1967InvalidImplementation\",\"inputs\":[{\"name\":\"implementation\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"ERC1967NonPayable\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"EnforcedPause\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ExpectedPause\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"FailedInnerCall\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"FailedZetaSent\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"GasFeeTransferFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientZRC20Amount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidInitialization\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidTarget\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NotInitializing\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OnlyWZETAOrFungible\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ReentrancyGuardReentrantCall\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"UUPSUnauthorizedCallContext\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"UUPSUnsupportedProxiableUUID\",\"inputs\":[{\"name\":\"slot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"type\":\"error\",\"name\":\"WithdrawalFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZRC20BurnFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZRC20DepositFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZRC20TransferFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZeroAddress\",\"inputs\":[]}]", - Bin: "0x60a06040523060805234801561001457600080fd5b5061001d610022565b6100d4565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100725760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146100d15780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b608051612d476100fd60003960008181611e7801528181611ea101526120590152612d476000f3fe6080604052600436106101bb5760003560e01c80635af65967116100ec578063a217fddf1161008a578063c39aca3711610064578063c39aca3714610600578063d547741f14610620578063e63ab1e914610640578063f45346dc1461067457600080fd5b8063a217fddf14610575578063ad3cb1cc1461058a578063bcf7f32b146105e057600080fd5b80637993c1e0116100c65780637993c1e0146104bb57806380bd3d03146104db5780638456cb59146104fb57806391d148541461051057600080fd5b80635af65967146104445780635c975abb146104645780635d40e1781461049b57600080fd5b806336568abe11610159578063441a3e7011610133578063441a3e70146103dc578063485cc955146103fc5780634f1ef2861461041c57806352d1902d1461042f57600080fd5b806336568abe1461037f5780633ce4a5bc1461039f5780633f4ba83a146103c757600080fd5b806321e093b11161019557806321e093b1146102aa578063248a9ca3146102e25780632f2ff15d1461033f578063309f50041461035f57600080fd5b806301ffc9a714610235578063135390f91461026a57806321501a951461028a57600080fd5b36610230576101c8610694565b6000546001600160a01b031633148015906101f757503373735b14bb79463307aacbed86daf3322b1e6226ab14155b1561022e576040517f229930b200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b005b600080fd5b34801561024157600080fd5b50610255610250366004612537565b6106f2565b60405190151581526020015b60405180910390f35b34801561027657600080fd5b5061022e61028536600461264d565b61078b565b34801561029657600080fd5b5061022e6102a5366004612709565b610884565b3480156102b657600080fd5b506000546102ca906001600160a01b031681565b6040516001600160a01b039091168152602001610261565b3480156102ee57600080fd5b506103316102fd366004612795565b60009081527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052604090206001015490565b604051908152602001610261565b34801561034b57600080fd5b5061022e61035a3660046127ae565b6109d7565b34801561036b57600080fd5b5061022e61037a3660046127de565b610a21565b34801561038b57600080fd5b5061022e61039a3660046127ae565b610afd565b3480156103ab57600080fd5b506102ca73735b14bb79463307aacbed86daf3322b1e6226ab81565b3480156103d357600080fd5b5061022e610b49565b3480156103e857600080fd5b5061022e6103f736600461287c565b610b7e565b34801561040857600080fd5b5061022e61041736600461289e565b610c61565b61022e61042a3660046128cc565b610ea3565b34801561043b57600080fd5b50610331610ebe565b34801561045057600080fd5b5061022e61045f3660046127de565b610eed565b34801561047057600080fd5b507fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff16610255565b3480156104a757600080fd5b5061022e6104b636600461291c565b61106e565b3480156104c757600080fd5b5061022e6104d6366004612991565b6110ed565b3480156104e757600080fd5b5061022e6104f63660046129cc565b6111ec565b34801561050757600080fd5b5061022e61129e565b34801561051c57600080fd5b5061025561052b3660046127ae565b60009182527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408084206001600160a01b0393909316845291905290205460ff1690565b34801561058157600080fd5b50610331600081565b34801561059657600080fd5b506105d36040518060400160405280600581526020017f352e302e3000000000000000000000000000000000000000000000000000000081525081565b6040516102619190612a57565b3480156105ec57600080fd5b5061022e6105fb3660046127de565b6112d0565b34801561060c57600080fd5b5061022e61061b3660046127de565b611372565b34801561062c57600080fd5b5061022e61063b3660046127ae565b6114f3565b34801561064c57600080fd5b506103317f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b34801561068057600080fd5b5061022e61068f366004612a6a565b611537565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff16156106f0576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061078557507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b6107936116b8565b61079b610694565b60006107a78383611739565b90506000336001600160a01b03167fde19dbe881cc0aeeb6e73ce19ac7b5ca695e6be8a076e3eb42292005a7fec1b586858786886001600160a01b0316634d8943bb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610818573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061083c9190612aa1565b60405161084d959493929190612aba565b60405180910390a35061087f60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab146108d1576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6108d9610694565b6001600160a01b03831673735b14bb79463307aacbed86daf3322b1e6226ab148061090c57506001600160a01b03831630145b15610943576040517f82d5d76a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61094d8484611a2c565b6000546040517fde43156e0000000000000000000000000000000000000000000000000000000081526001600160a01b038086169263de43156e9261099e928a921690899088908890600401612bd9565b600060405180830381600087803b1580156109b857600080fd5b505af11580156109cc573d6000803e3d6000fd5b505050505050505050565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020526040902060010154610a1181611bfa565b610a1b8383611c04565b50505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610a6e576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610a76610694565b6040517f69582bee0000000000000000000000000000000000000000000000000000000081526001600160a01b038416906369582bee90610ac39089908990899088908890600401612bd9565b600060405180830381600087803b158015610add57600080fd5b505af1158015610af1573d6000803e3d6000fd5b50505050505050505050565b6001600160a01b0381163314610b3f576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61087f8282611cf1565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610b7381611bfa565b610b7b611db5565b50565b610b866116b8565b610b8e610694565b610bac8273735b14bb79463307aacbed86daf3322b1e6226ab611a2c565b6040517f735b14bb79463307aacbed86daf3322b1e6226ab0000000000000000000000006020820152819033907fde19dbe881cc0aeeb6e73ce19ac7b5ca695e6be8a076e3eb42292005a7fec1b59060340160408051601f198184030181529082905260008054610c2c936001600160a01b039091169189918190612aba565b60405180910390a3610c5d60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b5050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff16600081158015610cac5750825b905060008267ffffffffffffffff166001148015610cc95750303b155b905081158015610cd7575080155b15610d0e576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001660011785558315610d6f5784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff16680100000000000000001785555b6001600160a01b038716610daf576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610db7611e45565b610dbf611e45565b610dc7611e4d565b610dcf611e5d565b610dda600087611c04565b50610e057f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a87611c04565b50600080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0389161790558315610e9a5784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50505050505050565b610eab611e6d565b610eb482611f3d565b610c5d8282611f48565b6000610ec861204e565b507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc90565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610f3a576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610f42610694565b6001600160a01b03831673735b14bb79463307aacbed86daf3322b1e6226ab1480610f7557506001600160a01b03831630145b15610fac576040517f82d5d76a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f47e7ef240000000000000000000000000000000000000000000000000000000081526001600160a01b038481166004830152602482018690528616906347e7ef24906044016020604051808303816000875af1158015611014573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110389190612c20565b610a76576040517f47d19fab00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6110766116b8565b61107e610694565b82336001600160a01b03167f5322ffbbf9261ff1f8138247942d2b03b28717141ef0a0dd080fc4be9c4e78d38685856040516110bc93929190612c42565b60405180910390a3610a1b60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b6110f56116b8565b6110fd610694565b60006111098585611739565b90506000336001600160a01b03167fde19dbe881cc0aeeb6e73ce19ac7b5ca695e6be8a076e3eb42292005a7fec1b5888789868a6001600160a01b0316634d8943bb6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561117a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061119e9190612aa1565b8a8a6040516111b39796959493929190612c72565b60405180910390a3506111e560017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b5050505050565b6111f46116b8565b6111fc610694565b61121a8473735b14bb79463307aacbed86daf3322b1e6226ab611a2c565b6040517f735b14bb79463307aacbed86daf3322b1e6226ab0000000000000000000000006020820152839033907fde19dbe881cc0aeeb6e73ce19ac7b5ca695e6be8a076e3eb42292005a7fec1b59060340160408051601f1981840301815290829052600080546110bc936001600160a01b03909116918b9181908b908b90612c72565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a6112c881611bfa565b610b7b6120b0565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461131d576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611325610694565b6040517fde43156e0000000000000000000000000000000000000000000000000000000081526001600160a01b0384169063de43156e90610ac39089908990899088908890600401612bd9565b3373735b14bb79463307aacbed86daf3322b1e6226ab146113bf576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6113c7610694565b6001600160a01b03831673735b14bb79463307aacbed86daf3322b1e6226ab14806113fa57506001600160a01b03831630145b15611431576040517f82d5d76a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f47e7ef240000000000000000000000000000000000000000000000000000000081526001600160a01b038481166004830152602482018690528616906347e7ef24906044016020604051808303816000875af1158015611499573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114bd9190612c20565b611325576040517f47d19fab00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052604090206001015461152d81611bfa565b610a1b8383611cf1565b3373735b14bb79463307aacbed86daf3322b1e6226ab14611584576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61158c610694565b6001600160a01b03811673735b14bb79463307aacbed86daf3322b1e6226ab14806115bf57506001600160a01b03811630145b156115f6576040517f82d5d76a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f47e7ef240000000000000000000000000000000000000000000000000000000081526001600160a01b038281166004830152602482018490528416906347e7ef24906044016020604051808303816000875af115801561165e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116829190612c20565b61087f576040517f47d19fab00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0080547ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01611733576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60029055565b6000806000836001600160a01b031663d9eeebed6040518163ffffffff1660e01b81526004016040805180830381865afa15801561177b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061179f9190612cc7565b6040517f23b872dd00000000000000000000000000000000000000000000000000000000815233600482015273735b14bb79463307aacbed86daf3322b1e6226ab60248201526044810182905291935091506001600160a01b038316906323b872dd906064016020604051808303816000875af1158015611824573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118489190612c20565b61187e576040517f0a7cd6d600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f23b872dd000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018690526001600160a01b038516906323b872dd906064016020604051808303816000875af11580156118ea573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061190e9190612c20565b611944576040517f4dd9ee8d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f42966c68000000000000000000000000000000000000000000000000000000008152600481018690526001600160a01b038516906342966c68906024016020604051808303816000875af11580156119a4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119c89190612c20565b6119fe576040517f2c77e05c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b949350505050565b60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b6000546040517f23b872dd000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018490526001600160a01b03909116906323b872dd906064016020604051808303816000875af1158015611a9c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ac09190612c20565b611af6576040517fc7ffc47b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000546040517f2e1a7d4d000000000000000000000000000000000000000000000000000000008152600481018490526001600160a01b0390911690632e1a7d4d90602401600060405180830381600087803b158015611b5557600080fd5b505af1158015611b69573d6000803e3d6000fd5b505050506000816001600160a01b03168360405160006040518083038185875af1925050503d8060008114611bba576040519150601f19603f3d011682016040523d82523d6000602084013e611bbf565b606091505b505090508061087f576040517fc7ffc47b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610b7b8133612129565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff16611ce7576000848152602082815260408083206001600160a01b0387168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055611c9d3390565b6001600160a01b0316836001600160a01b0316857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a46001915050610785565b6000915050610785565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff1615611ce7576000848152602082815260408083206001600160a01b038716808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339287917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a46001915050610785565b611dbd6121b6565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001681557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a150565b6106f0612211565b611e55612211565b6106f0612278565b611e65612211565b6106f06122c9565b306001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161480611f0657507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316611efa7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b6001600160a01b031614155b156106f0576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610c5d81611bfa565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015611fa2575060408051601f3d908101601f19168201909252611f9f91810190612aa1565b60015b611fe8576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b03831660048201526024015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8114612044576040517faa1d49a400000000000000000000000000000000000000000000000000000000815260048101829052602401611fdf565b61087f83836122d1565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146106f0576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6120b8610694565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011781557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25833611e27565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408083206001600160a01b038516845290915290205460ff16610c5d576040517fe2517d3f0000000000000000000000000000000000000000000000000000000081526001600160a01b038216600482015260248101839052604401611fdf565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff166106f0576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff166106f0576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612280612211565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055565b611a06612211565b6122da82612327565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a280511561231f5761087f82826123cf565b610c5d612445565b806001600160a01b03163b600003612376576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b0382166004820152602401611fdf565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6060600080846001600160a01b0316846040516123ec9190612cf5565b600060405180830381855af49150503d8060008114612427576040519150601f19603f3d011682016040523d82523d6000602084013e61242c565b606091505b509150915061243c85838361247d565b95945050505050565b34156106f0576040517fb398979f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6060826124925761248d826124f5565b6124ee565b81511580156124a957506001600160a01b0384163b155b156124eb576040517f9996b3150000000000000000000000000000000000000000000000000000000081526001600160a01b0385166004820152602401611fdf565b50805b9392505050565b8051156125055780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006020828403121561254957600080fd5b81357fffffffff00000000000000000000000000000000000000000000000000000000811681146124ee57600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600082601f8301126125b957600080fd5b813567ffffffffffffffff8111156125d3576125d3612579565b604051601f19603f601f19601f8501160116810181811067ffffffffffffffff8211171561260357612603612579565b60405281815283820160200185101561261b57600080fd5b816020850160208301376000918101602001919091529392505050565b6001600160a01b0381168114610b7b57600080fd5b60008060006060848603121561266257600080fd5b833567ffffffffffffffff81111561267957600080fd5b612685868287016125a8565b93505060208401359150604084013561269d81612638565b809150509250925092565b6000606082840312156126ba57600080fd5b50919050565b60008083601f8401126126d257600080fd5b50813567ffffffffffffffff8111156126ea57600080fd5b60208301915083602082850101111561270257600080fd5b9250929050565b60008060008060006080868803121561272157600080fd5b853567ffffffffffffffff81111561273857600080fd5b612744888289016126a8565b95505060208601359350604086013561275c81612638565b9250606086013567ffffffffffffffff81111561277857600080fd5b612784888289016126c0565b969995985093965092949392505050565b6000602082840312156127a757600080fd5b5035919050565b600080604083850312156127c157600080fd5b8235915060208301356127d381612638565b809150509250929050565b60008060008060008060a087890312156127f757600080fd5b863567ffffffffffffffff81111561280e57600080fd5b61281a89828a016126a8565b965050602087013561282b81612638565b945060408701359350606087013561284281612638565b9250608087013567ffffffffffffffff81111561285e57600080fd5b61286a89828a016126c0565b979a9699509497509295939492505050565b6000806040838503121561288f57600080fd5b50508035926020909101359150565b600080604083850312156128b157600080fd5b82356128bc81612638565b915060208301356127d381612638565b600080604083850312156128df57600080fd5b82356128ea81612638565b9150602083013567ffffffffffffffff81111561290657600080fd5b612912858286016125a8565b9150509250929050565b6000806000806060858703121561293257600080fd5b843567ffffffffffffffff81111561294957600080fd5b612955878288016125a8565b94505060208501359250604085013567ffffffffffffffff81111561297957600080fd5b612985878288016126c0565b95989497509550505050565b6000806000806000608086880312156129a957600080fd5b853567ffffffffffffffff8111156129c057600080fd5b612744888289016125a8565b600080600080606085870312156129e257600080fd5b8435935060208501359250604085013567ffffffffffffffff81111561297957600080fd5b60005b83811015612a22578181015183820152602001612a0a565b50506000910152565b60008151808452612a43816020860160208601612a07565b601f01601f19169290920160200192915050565b6020815260006124ee6020830184612a2b565b600080600060608486031215612a7f57600080fd5b8335612a8a81612638565b925060208401359150604084013561269d81612638565b600060208284031215612ab357600080fd5b5051919050565b60c081526000612acd60c0830188612a2b565b6001600160a01b038716602084015285604084015284606084015283608084015282810360a084015260008152602081019150509695505050505050565b818352818160208501375060006020828401015260006020601f19601f840116840101905092915050565b600081357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1833603018112612b6a57600080fd5b820160208101903567ffffffffffffffff811115612b8757600080fd5b803603821315612b9657600080fd5b60608552612ba8606086018284612b0b565b9150506020830135612bb981612638565b6001600160a01b0316602085015260409283013592909301919091525090565b608081526000612bec6080830188612b36565b6001600160a01b03871660208401528560408401528281036060840152612c14818587612b0b565b98975050505050505050565b600060208284031215612c3257600080fd5b815180151581146124ee57600080fd5b604081526000612c556040830186612a2b565b8281036020840152612c68818587612b0b565b9695505050505050565b60c081526000612c8560c083018a612a2b565b6001600160a01b038916602084015287604084015286606084015285608084015282810360a0840152612cb9818587612b0b565b9a9950505050505050505050565b60008060408385031215612cda57600080fd5b8251612ce581612638565b6020939093015192949293505050565b60008251612d07818460208701612a07565b919091019291505056fea264697066735822122018f5dd94cb7d7e393ae5b4b1a7aca779c9842febec22a45f0cd7ba66c7aa7f0664736f6c634300081a0033", + ABI: "[{\"type\":\"constructor\",\"inputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"receive\",\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"DEFAULT_ADMIN_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"FUNGIBLE_MODULE_ADDRESS\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"PAUSER_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"UPGRADE_INTERFACE_VERSION\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"call\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"chainId\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"message\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"deposit\",\"inputs\":[{\"name\":\"zrc20\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"depositAndCall\",\"inputs\":[{\"name\":\"context\",\"type\":\"tuple\",\"internalType\":\"structzContext\",\"components\":[{\"name\":\"origin\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"sender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"chainID\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"message\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"depositAndCall\",\"inputs\":[{\"name\":\"context\",\"type\":\"tuple\",\"internalType\":\"structzContext\",\"components\":[{\"name\":\"origin\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"sender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"chainID\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"zrc20\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"message\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"depositAndRevert\",\"inputs\":[{\"name\":\"context\",\"type\":\"tuple\",\"internalType\":\"structrevertContext\",\"components\":[{\"name\":\"origin\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"sender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"chainID\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"zrc20\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"message\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"execute\",\"inputs\":[{\"name\":\"context\",\"type\":\"tuple\",\"internalType\":\"structzContext\",\"components\":[{\"name\":\"origin\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"sender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"chainID\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"zrc20\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"message\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"executeRevert\",\"inputs\":[{\"name\":\"context\",\"type\":\"tuple\",\"internalType\":\"structrevertContext\",\"components\":[{\"name\":\"origin\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"sender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"chainID\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"zrc20\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"message\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"getRoleAdmin\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"grantRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"hasRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"initialize\",\"inputs\":[{\"name\":\"zetaToken_\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"admin_\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"pause\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"paused\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"proxiableUUID\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"renounceRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"callerConfirmation\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"revokeRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"supportsInterface\",\"inputs\":[{\"name\":\"interfaceId\",\"type\":\"bytes4\",\"internalType\":\"bytes4\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"unpause\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"upgradeToAndCall\",\"inputs\":[{\"name\":\"newImplementation\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"withdraw\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"zrc20\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"withdraw\",\"inputs\":[{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"chainId\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"withdrawAndCall\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"zrc20\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"message\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"withdrawAndCall\",\"inputs\":[{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"chainId\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"message\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"zetaToken\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"event\",\"name\":\"Call\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"chainId\",\"type\":\"uint256\",\"indexed\":true,\"internalType\":\"uint256\"},{\"name\":\"receiver\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"message\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Initialized\",\"inputs\":[{\"name\":\"version\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Paused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleAdminChanged\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"previousAdminRole\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"newAdminRole\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleGranted\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleRevoked\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Unpaused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Upgraded\",\"inputs\":[{\"name\":\"implementation\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Withdrawal\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"chainId\",\"type\":\"uint256\",\"indexed\":true,\"internalType\":\"uint256\"},{\"name\":\"receiver\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"zrc20\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"gasfee\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"protocolFlatFee\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"message\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"AccessControlBadConfirmation\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"AccessControlUnauthorizedAccount\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"neededRole\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"type\":\"error\",\"name\":\"AddressEmptyCode\",\"inputs\":[{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"CallerIsNotFungibleModule\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ERC1967InvalidImplementation\",\"inputs\":[{\"name\":\"implementation\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"ERC1967NonPayable\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"EnforcedPause\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ExpectedPause\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"FailedInnerCall\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"FailedZetaSent\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"GasFeeTransferFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientZRC20Amount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientZetaAmount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidInitialization\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidTarget\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NotInitializing\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OnlyWZETAOrFungible\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ReentrancyGuardReentrantCall\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"UUPSUnauthorizedCallContext\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"UUPSUnsupportedProxiableUUID\",\"inputs\":[{\"name\":\"slot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"type\":\"error\",\"name\":\"WithdrawalFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZRC20BurnFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZRC20DepositFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZRC20TransferFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZeroAddress\",\"inputs\":[]}]", + Bin: "0x60a06040523060805234801561001457600080fd5b5061001d610022565b6100d4565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100725760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146100d15780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b6080516132346100fd600039600081816123650152818161238e015261254601526132346000f3fe6080604052600436106101bb5760003560e01c80635af65967116100ec578063a217fddf1161008a578063c39aca3711610064578063c39aca3714610600578063d547741f14610620578063e63ab1e914610640578063f45346dc1461067457600080fd5b8063a217fddf14610575578063ad3cb1cc1461058a578063bcf7f32b146105e057600080fd5b80637993c1e0116100c65780637993c1e0146104bb57806380bd3d03146104db5780638456cb59146104fb57806391d148541461051057600080fd5b80635af65967146104445780635c975abb146104645780635d40e1781461049b57600080fd5b806336568abe11610159578063441a3e7011610133578063441a3e70146103dc578063485cc955146103fc5780634f1ef2861461041c57806352d1902d1461042f57600080fd5b806336568abe1461037f5780633ce4a5bc1461039f5780633f4ba83a146103c757600080fd5b806321e093b11161019557806321e093b1146102aa578063248a9ca3146102e25780632f2ff15d1461033f578063309f50041461035f57600080fd5b806301ffc9a714610235578063135390f91461026a57806321501a951461028a57600080fd5b36610230576101c8610694565b6000546001600160a01b031633148015906101f757503373735b14bb79463307aacbed86daf3322b1e6226ab14155b1561022e576040517f229930b200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b005b600080fd5b34801561024157600080fd5b50610255610250366004612a24565b6106f2565b60405190151581526020015b60405180910390f35b34801561027657600080fd5b5061022e610285366004612b3a565b61078b565b34801561029657600080fd5b5061022e6102a5366004612bf6565b6108f9565b3480156102b657600080fd5b506000546102ca906001600160a01b031681565b6040516001600160a01b039091168152602001610261565b3480156102ee57600080fd5b506103316102fd366004612c82565b60009081527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052604090206001015490565b604051908152602001610261565b34801561034b57600080fd5b5061022e61035a366004612c9b565b610ac6565b34801561036b57600080fd5b5061022e61037a366004612ccb565b610b10565b34801561038b57600080fd5b5061022e61039a366004612c9b565b610c7a565b3480156103ab57600080fd5b506102ca73735b14bb79463307aacbed86daf3322b1e6226ab81565b3480156103d357600080fd5b5061022e610cc6565b3480156103e857600080fd5b5061022e6103f7366004612d69565b610cfb565b34801561040857600080fd5b5061022e610417366004612d8b565b610e18565b61022e61042a366004612db9565b61106e565b34801561043b57600080fd5b50610331611089565b34801561045057600080fd5b5061022e61045f366004612ccb565b6110b8565b34801561047057600080fd5b507fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff16610255565b3480156104a757600080fd5b5061022e6104b6366004612e09565b6112c7565b3480156104c757600080fd5b5061022e6104d6366004612e7e565b611381565b3480156104e757600080fd5b5061022e6104f6366004612eb9565b6114f5565b34801561050757600080fd5b5061022e6115e1565b34801561051c57600080fd5b5061025561052b366004612c9b565b60009182527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408084206001600160a01b0393909316845291905290205460ff1690565b34801561058157600080fd5b50610331600081565b34801561059657600080fd5b506105d36040518060400160405280600581526020017f352e302e3000000000000000000000000000000000000000000000000000000081525081565b6040516102619190612f44565b3480156105ec57600080fd5b5061022e6105fb366004612ccb565b611613565b34801561060c57600080fd5b5061022e61061b366004612ccb565b611743565b34801561062c57600080fd5b5061022e61063b366004612c9b565b611952565b34801561064c57600080fd5b506103317f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b34801561068057600080fd5b5061022e61068f366004612f57565b611996565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff16156106f0576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061078557507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b610793611ba5565b61079b610694565b82516000036107d6576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b81600003610810576040517f5d67094f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061081c8383611c26565b90506000336001600160a01b03167fde19dbe881cc0aeeb6e73ce19ac7b5ca695e6be8a076e3eb42292005a7fec1b586858786886001600160a01b0316634d8943bb6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561088d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108b19190612f8e565b6040516108c2959493929190612fa7565b60405180910390a3506108f460017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610946576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61094e610694565b6001600160a01b03831661098e576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b836000036109c8576040517f19c08f4900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03831673735b14bb79463307aacbed86daf3322b1e6226ab14806109fb57506001600160a01b03831630145b15610a32576040517f82d5d76a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610a3c8484611f19565b6000546040517fde43156e0000000000000000000000000000000000000000000000000000000081526001600160a01b038086169263de43156e92610a8d928a9216908990889088906004016130c6565b600060405180830381600087803b158015610aa757600080fd5b505af1158015610abb573d6000803e3d6000fd5b505050505050505050565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020526040902060010154610b00816120e7565b610b0a83836120f1565b50505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610b5d576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610b65610694565b6001600160a01b0385161580610b8257506001600160a01b038316155b15610bb9576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b83600003610bf3576040517f5d67094f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f69582bee0000000000000000000000000000000000000000000000000000000081526001600160a01b038416906369582bee90610c4090899089908990889088906004016130c6565b600060405180830381600087803b158015610c5a57600080fd5b505af1158015610c6e573d6000803e3d6000fd5b50505050505050505050565b6001600160a01b0381163314610cbc576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6108f482826121de565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610cf0816120e7565b610cf86122a2565b50565b610d03611ba5565b610d0b610694565b81600003610d45576040517f19c08f4900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610d638273735b14bb79463307aacbed86daf3322b1e6226ab611f19565b6040517f735b14bb79463307aacbed86daf3322b1e6226ab0000000000000000000000006020820152819033907fde19dbe881cc0aeeb6e73ce19ac7b5ca695e6be8a076e3eb42292005a7fec1b59060340160408051601f198184030181529082905260008054610de3936001600160a01b039091169189918190612fa7565b60405180910390a3610e1460017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b5050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff16600081158015610e635750825b905060008267ffffffffffffffff166001148015610e805750303b155b905081158015610e8e575080155b15610ec5576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001660011785558315610f265784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff16680100000000000000001785555b6001600160a01b0387161580610f4357506001600160a01b038616155b15610f7a576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610f82612332565b610f8a612332565b610f9261233a565b610f9a61234a565b610fa56000876120f1565b50610fd07f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a876120f1565b50600080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03891617905583156110655784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50505050505050565b61107661235a565b61107f8261242a565b610e148282612435565b600061109361253b565b507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc90565b3373735b14bb79463307aacbed86daf3322b1e6226ab14611105576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61110d610694565b6001600160a01b038516158061112a57506001600160a01b038316155b15611161576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8360000361119b576040517f5d67094f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03831673735b14bb79463307aacbed86daf3322b1e6226ab14806111ce57506001600160a01b03831630145b15611205576040517f82d5d76a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f47e7ef240000000000000000000000000000000000000000000000000000000081526001600160a01b038481166004830152602482018690528616906347e7ef24906044016020604051808303816000875af115801561126d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611291919061310d565b610bf3576040517f47d19fab00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6112cf611ba5565b6112d7610694565b8351600003611312576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b82336001600160a01b03167f5322ffbbf9261ff1f8138247942d2b03b28717141ef0a0dd080fc4be9c4e78d38685856040516113509392919061312f565b60405180910390a3610b0a60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b611389611ba5565b611391610694565b84516000036113cc576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b83600003611406576040517f5d67094f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006114128585611c26565b90506000336001600160a01b03167fde19dbe881cc0aeeb6e73ce19ac7b5ca695e6be8a076e3eb42292005a7fec1b5888789868a6001600160a01b0316634d8943bb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611483573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114a79190612f8e565b8a8a6040516114bc979695949392919061315f565b60405180910390a3506114ee60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b5050505050565b6114fd611ba5565b611505610694565b8360000361153f576040517f19c08f4900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61155d8473735b14bb79463307aacbed86daf3322b1e6226ab611f19565b6040517f735b14bb79463307aacbed86daf3322b1e6226ab0000000000000000000000006020820152839033907fde19dbe881cc0aeeb6e73ce19ac7b5ca695e6be8a076e3eb42292005a7fec1b59060340160408051601f198184030181529082905260008054611350936001600160a01b03909116918b9181908b908b9061315f565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61160b816120e7565b610cf861259d565b3373735b14bb79463307aacbed86daf3322b1e6226ab14611660576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611668610694565b6001600160a01b038516158061168557506001600160a01b038316155b156116bc576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b836000036116f6576040517f5d67094f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517fde43156e0000000000000000000000000000000000000000000000000000000081526001600160a01b0384169063de43156e90610c4090899089908990889088906004016130c6565b3373735b14bb79463307aacbed86daf3322b1e6226ab14611790576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611798610694565b6001600160a01b03851615806117b557506001600160a01b038316155b156117ec576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b83600003611826576040517f5d67094f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03831673735b14bb79463307aacbed86daf3322b1e6226ab148061185957506001600160a01b03831630145b15611890576040517f82d5d76a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f47e7ef240000000000000000000000000000000000000000000000000000000081526001600160a01b038481166004830152602482018690528616906347e7ef24906044016020604051808303816000875af11580156118f8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061191c919061310d565b6116f6576040517f47d19fab00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052604090206001015461198c816120e7565b610b0a83836121de565b3373735b14bb79463307aacbed86daf3322b1e6226ab146119e3576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6119eb610694565b6001600160a01b0383161580611a0857506001600160a01b038116155b15611a3f576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b81600003611a79576040517f5d67094f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03811673735b14bb79463307aacbed86daf3322b1e6226ab1480611aac57506001600160a01b03811630145b15611ae3576040517f82d5d76a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f47e7ef240000000000000000000000000000000000000000000000000000000081526001600160a01b038281166004830152602482018490528416906347e7ef24906044016020604051808303816000875af1158015611b4b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b6f919061310d565b6108f4576040517f47d19fab00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0080547ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01611c20576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60029055565b6000806000836001600160a01b031663d9eeebed6040518163ffffffff1660e01b81526004016040805180830381865afa158015611c68573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c8c91906131b4565b6040517f23b872dd00000000000000000000000000000000000000000000000000000000815233600482015273735b14bb79463307aacbed86daf3322b1e6226ab60248201526044810182905291935091506001600160a01b038316906323b872dd906064016020604051808303816000875af1158015611d11573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d35919061310d565b611d6b576040517f0a7cd6d600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f23b872dd000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018690526001600160a01b038516906323b872dd906064016020604051808303816000875af1158015611dd7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611dfb919061310d565b611e31576040517f4dd9ee8d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f42966c68000000000000000000000000000000000000000000000000000000008152600481018690526001600160a01b038516906342966c68906024016020604051808303816000875af1158015611e91573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611eb5919061310d565b611eeb576040517f2c77e05c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b949350505050565b60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b6000546040517f23b872dd000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018490526001600160a01b03909116906323b872dd906064016020604051808303816000875af1158015611f89573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fad919061310d565b611fe3576040517fc7ffc47b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000546040517f2e1a7d4d000000000000000000000000000000000000000000000000000000008152600481018490526001600160a01b0390911690632e1a7d4d90602401600060405180830381600087803b15801561204257600080fd5b505af1158015612056573d6000803e3d6000fd5b505050506000816001600160a01b03168360405160006040518083038185875af1925050503d80600081146120a7576040519150601f19603f3d011682016040523d82523d6000602084013e6120ac565b606091505b50509050806108f4576040517fc7ffc47b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610cf88133612616565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff166121d4576000848152602082815260408083206001600160a01b0387168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905561218a3390565b6001600160a01b0316836001600160a01b0316857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a46001915050610785565b6000915050610785565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff16156121d4576000848152602082815260408083206001600160a01b038716808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339287917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a46001915050610785565b6122aa6126a3565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001681557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a150565b6106f06126fe565b6123426126fe565b6106f0612765565b6123526126fe565b6106f06127b6565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806123f357507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166123e77f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b6001600160a01b031614155b156106f0576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610e14816120e7565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa92505050801561248f575060408051601f3d908101601f1916820190925261248c91810190612f8e565b60015b6124d5576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b03831660048201526024015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8114612531576040517faa1d49a4000000000000000000000000000000000000000000000000000000008152600481018290526024016124cc565b6108f483836127be565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146106f0576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6125a5610694565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011781557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25833612314565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408083206001600160a01b038516845290915290205460ff16610e14576040517fe2517d3f0000000000000000000000000000000000000000000000000000000081526001600160a01b0382166004820152602481018390526044016124cc565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff166106f0576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff166106f0576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61276d6126fe565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055565b611ef36126fe565b6127c782612814565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a280511561280c576108f482826128bc565b610e14612932565b806001600160a01b03163b600003612863576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b03821660048201526024016124cc565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6060600080846001600160a01b0316846040516128d991906131e2565b600060405180830381855af49150503d8060008114612914576040519150601f19603f3d011682016040523d82523d6000602084013e612919565b606091505b509150915061292985838361296a565b95945050505050565b34156106f0576040517fb398979f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60608261297f5761297a826129e2565b6129db565b815115801561299657506001600160a01b0384163b155b156129d8576040517f9996b3150000000000000000000000000000000000000000000000000000000081526001600160a01b03851660048201526024016124cc565b50805b9392505050565b8051156129f25780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060208284031215612a3657600080fd5b81357fffffffff00000000000000000000000000000000000000000000000000000000811681146129db57600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600082601f830112612aa657600080fd5b813567ffffffffffffffff811115612ac057612ac0612a66565b604051601f19603f601f19601f8501160116810181811067ffffffffffffffff82111715612af057612af0612a66565b604052818152838201602001851015612b0857600080fd5b816020850160208301376000918101602001919091529392505050565b6001600160a01b0381168114610cf857600080fd5b600080600060608486031215612b4f57600080fd5b833567ffffffffffffffff811115612b6657600080fd5b612b7286828701612a95565b935050602084013591506040840135612b8a81612b25565b809150509250925092565b600060608284031215612ba757600080fd5b50919050565b60008083601f840112612bbf57600080fd5b50813567ffffffffffffffff811115612bd757600080fd5b602083019150836020828501011115612bef57600080fd5b9250929050565b600080600080600060808688031215612c0e57600080fd5b853567ffffffffffffffff811115612c2557600080fd5b612c3188828901612b95565b955050602086013593506040860135612c4981612b25565b9250606086013567ffffffffffffffff811115612c6557600080fd5b612c7188828901612bad565b969995985093965092949392505050565b600060208284031215612c9457600080fd5b5035919050565b60008060408385031215612cae57600080fd5b823591506020830135612cc081612b25565b809150509250929050565b60008060008060008060a08789031215612ce457600080fd5b863567ffffffffffffffff811115612cfb57600080fd5b612d0789828a01612b95565b9650506020870135612d1881612b25565b9450604087013593506060870135612d2f81612b25565b9250608087013567ffffffffffffffff811115612d4b57600080fd5b612d5789828a01612bad565b979a9699509497509295939492505050565b60008060408385031215612d7c57600080fd5b50508035926020909101359150565b60008060408385031215612d9e57600080fd5b8235612da981612b25565b91506020830135612cc081612b25565b60008060408385031215612dcc57600080fd5b8235612dd781612b25565b9150602083013567ffffffffffffffff811115612df357600080fd5b612dff85828601612a95565b9150509250929050565b60008060008060608587031215612e1f57600080fd5b843567ffffffffffffffff811115612e3657600080fd5b612e4287828801612a95565b94505060208501359250604085013567ffffffffffffffff811115612e6657600080fd5b612e7287828801612bad565b95989497509550505050565b600080600080600060808688031215612e9657600080fd5b853567ffffffffffffffff811115612ead57600080fd5b612c3188828901612a95565b60008060008060608587031215612ecf57600080fd5b8435935060208501359250604085013567ffffffffffffffff811115612e6657600080fd5b60005b83811015612f0f578181015183820152602001612ef7565b50506000910152565b60008151808452612f30816020860160208601612ef4565b601f01601f19169290920160200192915050565b6020815260006129db6020830184612f18565b600080600060608486031215612f6c57600080fd5b8335612f7781612b25565b9250602084013591506040840135612b8a81612b25565b600060208284031215612fa057600080fd5b5051919050565b60c081526000612fba60c0830188612f18565b6001600160a01b038716602084015285604084015284606084015283608084015282810360a084015260008152602081019150509695505050505050565b818352818160208501375060006020828401015260006020601f19601f840116840101905092915050565b600081357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe183360301811261305757600080fd5b820160208101903567ffffffffffffffff81111561307457600080fd5b80360382131561308357600080fd5b60608552613095606086018284612ff8565b91505060208301356130a681612b25565b6001600160a01b0316602085015260409283013592909301919091525090565b6080815260006130d96080830188613023565b6001600160a01b03871660208401528560408401528281036060840152613101818587612ff8565b98975050505050505050565b60006020828403121561311f57600080fd5b815180151581146129db57600080fd5b6040815260006131426040830186612f18565b8281036020840152613155818587612ff8565b9695505050505050565b60c08152600061317260c083018a612f18565b6001600160a01b038916602084015287604084015286606084015285608084015282810360a08401526131a6818587612ff8565b9a9950505050505050505050565b600080604083850312156131c757600080fd5b82516131d281612b25565b6020939093015192949293505050565b600082516131f4818460208701612ef4565b919091019291505056fea2646970667358221220e552e065fe0e33093f4ee925441290718d332f30e2458c48850361f698017df664736f6c634300081a0033", } // GatewayZEVMABI is the input ABI used to generate the binding from. diff --git a/v2/pkg/gatewayzevm.t.sol/gatewayzevminboundtest.go b/v2/pkg/gatewayzevm.t.sol/gatewayzevminboundtest.go index add0c55f..e5e1d4b4 100644 --- a/v2/pkg/gatewayzevm.t.sol/gatewayzevminboundtest.go +++ b/v2/pkg/gatewayzevm.t.sol/gatewayzevminboundtest.go @@ -49,8 +49,8 @@ type StdInvariantFuzzSelector struct { // GatewayZEVMInboundTestMetaData contains all meta data concerning the GatewayZEVMInboundTest contract. var GatewayZEVMInboundTestMetaData = &bind.MetaData{ - ABI: "[{\"type\":\"function\",\"name\":\"IS_TEST\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeArtifacts\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedArtifacts_\",\"type\":\"string[]\",\"internalType\":\"string[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeContracts\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedContracts_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeSelectors\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedSelectors_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzSelector[]\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"selectors\",\"type\":\"bytes4[]\",\"internalType\":\"bytes4[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeSenders\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedSenders_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"failed\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"setUp\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"targetArtifactSelectors\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedArtifactSelectors_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzArtifactSelector[]\",\"components\":[{\"name\":\"artifact\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"selectors\",\"type\":\"bytes4[]\",\"internalType\":\"bytes4[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetArtifacts\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedArtifacts_\",\"type\":\"string[]\",\"internalType\":\"string[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetContracts\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedContracts_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetInterfaces\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedInterfaces_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzInterface[]\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"artifacts\",\"type\":\"string[]\",\"internalType\":\"string[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetSelectors\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedSelectors_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzSelector[]\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"selectors\",\"type\":\"bytes4[]\",\"internalType\":\"bytes4[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetSenders\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedSenders_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"testCall\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawZETA\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawZETAFailsIfNoAllowance\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawZETAWithMessage\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawZETAWithMessageFailsIfNoAllowance\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawZRC20\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawZRC20FailsIfNoAllowance\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawZRC20WithMessage\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawZRC20WithMessageFailsIfNoAllowance\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"event\",\"name\":\"Call\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"chainId\",\"type\":\"uint256\",\"indexed\":true,\"internalType\":\"uint256\"},{\"name\":\"receiver\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"message\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Withdrawal\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"chainId\",\"type\":\"uint256\",\"indexed\":true,\"internalType\":\"uint256\"},{\"name\":\"receiver\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"zrc20\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"gasfee\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"protocolFlatFee\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"message\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log\",\"inputs\":[{\"name\":\"\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_address\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_array\",\"inputs\":[{\"name\":\"val\",\"type\":\"uint256[]\",\"indexed\":false,\"internalType\":\"uint256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_array\",\"inputs\":[{\"name\":\"val\",\"type\":\"int256[]\",\"indexed\":false,\"internalType\":\"int256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_array\",\"inputs\":[{\"name\":\"val\",\"type\":\"address[]\",\"indexed\":false,\"internalType\":\"address[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_bytes\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_bytes32\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_int\",\"inputs\":[{\"name\":\"\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_address\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_array\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"uint256[]\",\"indexed\":false,\"internalType\":\"uint256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_array\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"int256[]\",\"indexed\":false,\"internalType\":\"int256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_array\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"address[]\",\"indexed\":false,\"internalType\":\"address[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_bytes\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_bytes32\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_decimal_int\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"},{\"name\":\"decimals\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_decimal_uint\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"decimals\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_int\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_string\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_uint\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_string\",\"inputs\":[{\"name\":\"\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_uint\",\"inputs\":[{\"name\":\"\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"logs\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"CallerIsNotFungibleModule\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"FailedZetaSent\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"GasFeeTransferFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientZRC20Amount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidTarget\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OnlyWZETAOrFungible\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"WithdrawalFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZRC20BurnFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZRC20DepositFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZRC20TransferFailed\",\"inputs\":[]}]", - Bin: "0x6080604052600c8054600160ff199182168117909255601f80549091169091179055348015602c57600080fd5b5061ce698061003c6000396000f3fe608060405234801561001057600080fd5b50600436106101825760003560e01c806385226c81116100d8578063ba414fa61161008c578063ea37902f11610066578063ea37902f1461027b578063fa7626d414610283578063fbc611c81461029057600080fd5b8063ba414fa614610253578063dde7e9671461026b578063e20c9f711461027357600080fd5b8063b0464fdc116100bd578063b0464fdc1461023b578063b5508aa914610243578063b7f058361461024b57600080fd5b806385226c8114610211578063916a17c61461022657600080fd5b80632ade38801161013a5780635006fd80116101145780635006fd80146101ec5780635d72228f146101f457806366d9a9a0146101fc57600080fd5b80632ade3880146101c75780633e5e3c23146101dc5780633f7286f4146101e457600080fd5b806318a4cfdc1161016b57806318a4cfdc146101995780631e63d2b9146101a15780631ed7831c146101a957600080fd5b80630a9254e4146101875780631238212c14610191575b600080fd5b61018f610298565b005b61018f610d05565b61018f6110ce565b61018f611523565b6101b161190f565b6040516101be9190617938565b60405180910390f35b6101cf611971565b6040516101be91906179d4565b6101b1611ab3565b6101b1611b13565b61018f611b73565b61018f61200a565b610204612359565b6040516101be9190617b3a565b6102196124db565b6040516101be9190617bd8565b61022e6125ab565b6040516101be9190617c4f565b61022e6126a6565b6102196127a1565b61018f612871565b61025b612aae565b60405190151581526020016101be565b61018f612b82565b6101b1612fab565b61018f61300b565b601f5461025b9060ff1681565b61018f6133c7565b602580547fffffffffffffffffffffffff00000000000000000000000000000000000000009081163017909155602680549091166112341790556040516102de9061784b565b604051809103906000f0801580156102fa573d6000803e3d6000fd5b50602280547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03928316908117909155604080518082018252600f81527f476174657761795a45564d2e736f6c0000000000000000000000000000000000602082015260255491516024810193909352921660448201526103de919060640160408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f485cc9550000000000000000000000000000000000000000000000000000000017905261373a565b601f80547fffffffffffffffffffffff0000000000000000000000000000000000000000ff166101006001600160a01b039384168102919091179182905560208054919092049092167fffffffffffffffffffffffff000000000000000000000000000000000000000090921682178155604080517f3ce4a5bc0000000000000000000000000000000000000000000000000000000081529051633ce4a5bc926004808401939192918290030181865afa1580156104a0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104c49190617ce6565b602780547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039290921691909117905560405161050890617858565b604051809103906000f080158015610524573d6000803e3d6000fd5b50602480547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039283161781556027546040517f06447d5600000000000000000000000000000000000000000000000000000000815292166004830152737109709ecfa91a80626ff3989d68f67f5b1dd12d916306447d569101600060405180830381600087803b1580156105c057600080fd5b505af11580156105d4573d6000803e3d6000fd5b5050505060008060006040516105e990617865565b6001600160a01b03938416815291831660208301529091166040820152606001604051809103906000f080158015610625573d6000803e3d6000fd5b50602380547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392831690811790915560205460405160129360019384936000939192169061067b90617872565b61068a96959493929190617d0f565b604051809103906000f0801580156106a6573d6000803e3d6000fd5b50602180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039283169081179091556023546040517fee2815ba0000000000000000000000000000000000000000000000000000000081526001600482015260248101929092529091169063ee2815ba90604401600060405180830381600087803b15801561073d57600080fd5b505af1158015610751573d6000803e3d6000fd5b50506023546040517fa7cb050700000000000000000000000000000000000000000000000000000000815260016004820181905260248201526001600160a01b03909116925063a7cb05079150604401600060405180830381600087803b1580156107bb57600080fd5b505af11580156107cf573d6000803e3d6000fd5b50506027546040517fc88a5e6d0000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152633b9aca006024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c88a5e6d9150604401600060405180830381600087803b15801561084f57600080fd5b505af1158015610863573d6000803e3d6000fd5b50505050602260009054906101000a90046001600160a01b03166001600160a01b031663d0e30db0600a6040518263ffffffff1660e01b81526004016000604051808303818588803b1580156108b857600080fd5b505af11580156108cc573d6000803e3d6000fd5b50506022546020546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152600a60248201529116935063095ea7b3925060440190506020604051808303816000875af1158015610940573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109649190617e04565b506021546025546040517f47e7ef240000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620186a060248201529116906347e7ef24906044016020604051808303816000875af11580156109d5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109f99190617e04565b507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b03166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610a5857600080fd5b505af1158015610a6c573d6000803e3d6000fd5b50506025546040517f06447d560000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506306447d569150602401600060405180830381600087803b158015610ae257600080fd5b505af1158015610af6573d6000803e3d6000fd5b50506021546020546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620186a060248201529116925063095ea7b391506044016020604051808303816000875af1158015610b6a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b8e9190617e04565b50602260009054906101000a90046001600160a01b03166001600160a01b031663d0e30db0600a6040518263ffffffff1660e01b81526004016000604051808303818588803b158015610be057600080fd5b505af1158015610bf4573d6000803e3d6000fd5b50506022546020546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152600a60248201529116935063095ea7b3925060440190506020604051808303816000875af1158015610c68573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c8c9190617e04565b507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b03166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610ceb57600080fd5b505af1158015610cff573d6000803e3d6000fd5b50505050565b6021546025546040516370a0823160e01b81526001600160a01b03918216600482015260019260009216906370a0823190602401602060405180830381865afa158015610d56573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d7a9190617e26565b6025546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015610def57600080fd5b505af1158015610e03573d6000803e3d6000fd5b50506021546020546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152600060248201529116925063095ea7b391506044016020604051808303816000875af1158015610e75573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e999190617e04565b506026546040516001600160a01b03909116602482015260009060440160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f84fae7600000000000000000000000000000000000000000000000000000000017905280517ff48448140000000000000000000000000000000000000000000000000000000081529051919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f48448149160048082019260009290919082900301818387803b158015610f7557600080fd5b505af1158015610f89573d6000803e3d6000fd5b50506020805460265460405160609190911b6bffffffffffffffffffffffff1916928101929092526001600160a01b03169250637993c1e0915060340160408051601f19818403018152908290526021547fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16835261101d9288916001600160a01b0316908790600401617e3f565b600060405180830381600087803b15801561103757600080fd5b505af115801561104b573d6000803e3d6000fd5b50506021546025546040516370a0823160e01b81526001600160a01b03918216600482015260009450911691506370a0823190602401602060405180830381865afa15801561109e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110c29190617e26565b9050610cff8382613759565b6022546025546040516370a0823160e01b81526001600160a01b03918216600482015260019260009216906370a0823190602401602060405180830381865afa15801561111f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111439190617e26565b6022546020546040516370a0823160e01b81526001600160a01b0391821660048201529293506000929116906370a0823190602401602060405180830381865afa158015611195573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111b99190617e26565b6027546026546040516001600160a01b03918216602482015292935016319060009060440160408051601f19818403018152918152602080830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f84fae760000000000000000000000000000000000000000000000000000000001790525490517f81bad6f30000000000000000000000000000000000000000000000000000000081526001600482018190526024820181905260448201819052606482018190526001600160a01b03909216608482015291925090737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b1580156112c857600080fd5b505af11580156112dc573d6000803e3d6000fd5b505060255460275460405160609190911b6bffffffffffffffffffffffff191660208201528493506001600160a01b0390911691507fde19dbe881cc0aeeb6e73ce19ac7b5ca695e6be8a076e3eb42292005a7fec1b59060340160408051601f1981840301815290829052602254611368926001600160a01b03909116908c9060009081908b90617e79565b60405180910390a36020546040517f80bd3d030000000000000000000000000000000000000000000000000000000081526001600160a01b03909116906380bd3d03906113bd90899085908790600401617ecc565b600060405180830381600087803b1580156113d757600080fd5b505af11580156113eb573d6000803e3d6000fd5b50506022546025546040516370a0823160e01b81526001600160a01b03918216600482015260009450911691506370a0823190602401602060405180830381865afa15801561143e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114629190617e26565b9050611478611472600188617f1a565b82613759565b6022546020546040516370a0823160e01b81526001600160a01b03918216600482015260009291909116906370a0823190602401602060405180830381865afa1580156114c9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114ed9190617e26565b90506114f98682613759565b611519611507866001617f2d565b6027546001600160a01b031631613759565b5050505050505050565b6021546025546040516370a0823160e01b81526001600160a01b03918216600482015260019260009216906370a0823190602401602060405180830381865afa158015611574573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115989190617e26565b6026546040516001600160a01b03909116602482015290915060009060440160408051601f19818403018152918152602080830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f84fae760000000000000000000000000000000000000000000000000000000001790525490517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b15801561169e57600080fd5b505af11580156116b2573d6000803e3d6000fd5b505060255460265460405160609190911b6bffffffffffffffffffffffff19166020820152600093506001600160a01b0390911691507fde19dbe881cc0aeeb6e73ce19ac7b5ca695e6be8a076e3eb42292005a7fec1b59060340160408051601f198184030181528282526021547f4d8943bb000000000000000000000000000000000000000000000000000000008452915190926001600160a01b039092169189916000918491634d8943bb916004808201926020929091908290030181865afa158015611785573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117a99190617e26565b886040516117bc96959493929190617e79565b60405180910390a3602080546026546040516001600160a01b0392831693637993c1e0936118049316910160609190911b6bffffffffffffffffffffffff1916815260140190565b60408051601f19818403018152908290526021547fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16835261185b9288916001600160a01b0316908790600401617e3f565b600060405180830381600087803b15801561187557600080fd5b505af1158015611889573d6000803e3d6000fd5b50506021546025546040516370a0823160e01b81526001600160a01b03918216600482015260009450911691506370a0823190602401602060405180830381865afa1580156118dc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119009190617e26565b9050610cff6114728585617f1a565b6060601680548060200260200160405190810160405280929190818152602001828054801561196757602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311611949575b5050505050905090565b6060601e805480602002602001604051908101604052809291908181526020016000905b82821015611aaa57600084815260208082206040805180820182526002870290920180546001600160a01b03168352600181018054835181870281018701909452808452939591948681019491929084015b82821015611a93578382906000526020600020018054611a0690617f40565b80601f0160208091040260200160405190810160405280929190818152602001828054611a3290617f40565b8015611a7f5780601f10611a5457610100808354040283529160200191611a7f565b820191906000526020600020905b815481529060010190602001808311611a6257829003601f168201915b5050505050815260200190600101906119e7565b505050508152505081526020019060010190611995565b50505050905090565b60606018805480602002602001604051908101604052809291908181526020018280548015611967576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311611949575050505050905090565b60606017805480602002602001604051908101604052809291908181526020018280548015611967576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311611949575050505050905090565b6022546025546040516370a0823160e01b81526001600160a01b03918216600482015260019260009216906370a0823190602401602060405180830381865afa158015611bc4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611be89190617e26565b6022546020546040516370a0823160e01b81526001600160a01b0391821660048201529293506000929116906370a0823190602401602060405180830381865afa158015611c3a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c5e9190617e26565b6027546026546040516001600160a01b03918216602482015292935016319060009060440160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f84fae7600000000000000000000000000000000000000000000000000000000017905260255490517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152909150600190737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015611d5257600080fd5b505af1158015611d66573d6000803e3d6000fd5b50506022546020546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152600060248201529116925063095ea7b391506044016020604051808303816000875af1158015611dd8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611dfc9190617e04565b507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b031663f48448146040518163ffffffff1660e01b8152600401600060405180830381600087803b158015611e5b57600080fd5b505af1158015611e6f573d6000803e3d6000fd5b50506020546040517f80bd3d030000000000000000000000000000000000000000000000000000000081526001600160a01b0390911692506380bd3d039150611ec090899085908790600401617ecc565b600060405180830381600087803b158015611eda57600080fd5b505af1158015611eee573d6000803e3d6000fd5b50506022546025546040516370a0823160e01b81526001600160a01b03918216600482015260009450911691506370a0823190602401602060405180830381865afa158015611f41573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f659190617e26565b9050611f718682613759565b6022546020546040516370a0823160e01b81526001600160a01b03918216600482015260009291909116906370a0823190602401602060405180830381865afa158015611fc2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fe69190617e26565b9050611ff28682613759565b6027546115199086906001600160a01b031631613759565b6021546025546040516370a0823160e01b81526001600160a01b03918216600482015260019260009216906370a0823190602401602060405180830381865afa15801561205b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061207f9190617e26565b6025546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156120f457600080fd5b505af1158015612108573d6000803e3d6000fd5b50506021546020546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152600060248201529116925063095ea7b391506044016020604051808303816000875af115801561217a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061219e9190617e04565b507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b031663f48448146040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156121fd57600080fd5b505af1158015612211573d6000803e3d6000fd5b50506020805460265460405160609190911b6bffffffffffffffffffffffff1916928101929092526001600160a01b0316925063135390f9915060340160408051601f19818403018152908290526021547fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1683526122a39287916001600160a01b031690600401617f8d565b600060405180830381600087803b1580156122bd57600080fd5b505af11580156122d1573d6000803e3d6000fd5b50506021546025546040516370a0823160e01b81526001600160a01b03918216600482015260009450911691506370a0823190602401602060405180830381865afa158015612324573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123489190617e26565b90506123548282613759565b505050565b6060601b805480602002602001604051908101604052809291908181526020016000905b82821015611aaa57838290600052602060002090600202016040518060400160405290816000820180546123b090617f40565b80601f01602080910402602001604051908101604052809291908181526020018280546123dc90617f40565b80156124295780601f106123fe57610100808354040283529160200191612429565b820191906000526020600020905b81548152906001019060200180831161240c57829003601f168201915b50505050508152602001600182018054806020026020016040519081016040528092919081815260200182805480156124c357602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190600401906020826003010492830192600103820291508084116124705790505b5050505050815250508152602001906001019061237d565b6060601a805480602002602001604051908101604052809291908181526020016000905b82821015611aaa57838290600052602060002001805461251e90617f40565b80601f016020809104026020016040519081016040528092919081815260200182805461254a90617f40565b80156125975780601f1061256c57610100808354040283529160200191612597565b820191906000526020600020905b81548152906001019060200180831161257a57829003601f168201915b5050505050815260200190600101906124ff565b6060601d805480602002602001604051908101604052809291908181526020016000905b82821015611aaa5760008481526020908190206040805180820182526002860290920180546001600160a01b0316835260018101805483518187028101870190945280845293949193858301939283018282801561268e57602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168152602001906004019060208260030104928301926001038202915080841161263b5790505b505050505081525050815260200190600101906125cf565b6060601c805480602002602001604051908101604052809291908181526020016000905b82821015611aaa5760008481526020908190206040805180820182526002860290920180546001600160a01b0316835260018101805483518187028101870190945280845293949193858301939283018282801561278957602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190600401906020826003010492830192600103820291508084116127365790505b505050505081525050815260200190600101906126ca565b60606019805480602002602001604051908101604052809291908181526020016000905b82821015611aaa5783829060005260206000200180546127e490617f40565b80601f016020809104026020016040519081016040528092919081815260200182805461281090617f40565b801561285d5780601f106128325761010080835404028352916020019161285d565b820191906000526020600020905b81548152906001019060200180831161284057829003601f168201915b5050505050815260200190600101906127c5565b6026546040516001600160a01b03909116602482015260009060440160408051601f19818403018152918152602080830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f84fae760000000000000000000000000000000000000000000000000000000001790525490517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b15801561297457600080fd5b505af1158015612988573d6000803e3d6000fd5b505060255460265460405160609190911b6bffffffffffffffffffffffff19166020820152600193508392506001600160a01b03909116907f5322ffbbf9261ff1f8138247942d2b03b28717141ef0a0dd080fc4be9c4e78d39060340160408051601f1981840301815290829052612a01918790617fbf565b60405180910390a3602080546026546040516001600160a01b0392831693635d40e17893612a499316910160609190911b6bffffffffffffffffffffffff1916815260140190565b60405160208183030381529060405283856040518463ffffffff1660e01b8152600401612a7893929190617fe4565b600060405180830381600087803b158015612a9257600080fd5b505af1158015612aa6573d6000803e3d6000fd5b505050505050565b60085460009060ff1615612ac6575060085460ff1690565b6040517f667f9d70000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d600482018190527f6661696c65640000000000000000000000000000000000000000000000000000602483015260009163667f9d7090604401602060405180830381865afa158015612b57573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b7b9190617e26565b1415905090565b6022546025546040516370a0823160e01b81526001600160a01b03918216600482015260019260009216906370a0823190602401602060405180830381865afa158015612bd3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612bf79190617e26565b6022546020546040516370a0823160e01b81526001600160a01b0391821660048201529293506000929116906370a0823190602401602060405180830381865afa158015612c49573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c6d9190617e26565b6027546025546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152929350163190600190737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015612ceb57600080fd5b505af1158015612cff573d6000803e3d6000fd5b50506022546020546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152600060248201529116925063095ea7b391506044016020604051808303816000875af1158015612d71573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d959190617e04565b507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b031663f48448146040518163ffffffff1660e01b8152600401600060405180830381600087803b158015612df457600080fd5b505af1158015612e08573d6000803e3d6000fd5b50506020546040517f441a3e7000000000000000000000000000000000000000000000000000000000815260048101899052602481018590526001600160a01b03909116925063441a3e709150604401600060405180830381600087803b158015612e7257600080fd5b505af1158015612e86573d6000803e3d6000fd5b50506022546025546040516370a0823160e01b81526001600160a01b03918216600482015260009450911691506370a0823190602401602060405180830381865afa158015612ed9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612efd9190617e26565b9050612f098582613759565b6022546020546040516370a0823160e01b81526001600160a01b03918216600482015260009291909116906370a0823190602401602060405180830381865afa158015612f5a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f7e9190617e26565b9050612f8a8582613759565b602754612fa29085906001600160a01b031631613759565b50505050505050565b60606015805480602002602001604051908101604052809291908181526020018280548015611967576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311611949575050505050905090565b6022546025546040516370a0823160e01b81526001600160a01b03918216600482015260019260009216906370a0823190602401602060405180830381865afa15801561305c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130809190617e26565b6022546020546040516370a0823160e01b81526001600160a01b0391821660048201529293506000929116906370a0823190602401602060405180830381865afa1580156130d2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130f69190617e26565b6027546020546040517f81bad6f30000000000000000000000000000000000000000000000000000000081526001600482018190526024820181905260448201819052606482018190526001600160a01b0392831660848301529394509116319190737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b15801561319157600080fd5b505af11580156131a5573d6000803e3d6000fd5b505060255460275460405160609190911b6bffffffffffffffffffffffff191660208201528493506001600160a01b0390911691507fde19dbe881cc0aeeb6e73ce19ac7b5ca695e6be8a076e3eb42292005a7fec1b59060340160408051601f198184030181529082905260225461322f926001600160a01b03909116908b90600090819061800f565b60405180910390a36020546040517f441a3e7000000000000000000000000000000000000000000000000000000000815260048101879052602481018390526001600160a01b039091169063441a3e7090604401600060405180830381600087803b15801561329d57600080fd5b505af11580156132b1573d6000803e3d6000fd5b50506022546025546040516370a0823160e01b81526001600160a01b03918216600482015260009450911691506370a0823190602401602060405180830381865afa158015613304573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133289190617e26565b9050613338611472600187617f1a565b6022546020546040516370a0823160e01b81526001600160a01b03918216600482015260009291909116906370a0823190602401602060405180830381865afa158015613389573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133ad9190617e26565b90506133b98582613759565b612fa2611507856001617f2d565b6021546025546040516370a0823160e01b81526001600160a01b03918216600482015260019260009216906370a0823190602401602060405180830381865afa158015613418573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061343c9190617e26565b6020546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b1580156134cd57600080fd5b505af11580156134e1573d6000803e3d6000fd5b505060255460265460405160609190911b6bffffffffffffffffffffffff19166020820152600093506001600160a01b0390911691507fde19dbe881cc0aeeb6e73ce19ac7b5ca695e6be8a076e3eb42292005a7fec1b59060340160408051601f198184030181528282526021547f4d8943bb000000000000000000000000000000000000000000000000000000008452915190926001600160a01b039092169188916000918491634d8943bb916004808201926020929091908290030181865afa1580156135b4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135d89190617e26565b6040516135e995949392919061800f565b60405180910390a3602080546026546040516001600160a01b039283169363135390f9936136319316910160609190911b6bffffffffffffffffffffffff1916815260140190565b60408051601f19818403018152908290526021547fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1683526136869287916001600160a01b031690600401617f8d565b600060405180830381600087803b1580156136a057600080fd5b505af11580156136b4573d6000803e3d6000fd5b50506021546025546040516370a0823160e01b81526001600160a01b03918216600482015260009450911691506370a0823190602401602060405180830381865afa158015613707573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061372b9190617e26565b90506123546114728484617f1a565b600061374461787f565b61374f8484836137d8565b9150505b92915050565b6040517f98296c540000000000000000000000000000000000000000000000000000000081526004810183905260248101829052737109709ecfa91a80626ff3989d68f67f5b1dd12d906398296c549060440160006040518083038186803b1580156137c457600080fd5b505afa158015612aa6573d6000803e3d6000fd5b6000806137e58584613853565b90506138486040518060400160405280601d81526020017f4552433139363750726f78792e736f6c3a4552433139363750726f78790000008152508286604051602001613833929190618060565b6040516020818303038152906040528561385f565b9150505b9392505050565b600061384c838361388d565b60c081015151600090156138835761387c84848460c001516138a8565b905061384c565b61387c8484613a4e565b60006138998383613b39565b61384c8383602001518461385f565b6000806138b3613b49565b905060006138c18683613c1c565b905060006138d882606001518360200151856140c2565b905060006138e8838389896142d4565b905060006138f582615151565b602081015181519192509060030b156139685789826040015160405160200161391f929190618082565b60408051601f19818403018152908290527f08c379a000000000000000000000000000000000000000000000000000000000825261395f91600401618103565b60405180910390fd5b60006139ab6040518060400160405280601581526020017f4465706c6f79656420746f20616464726573733a200000000000000000000000815250836001615320565b6040517fc6ce059d000000000000000000000000000000000000000000000000000000008152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c6ce059d906139fe908490600401618103565b602060405180830381865afa158015613a1b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a3f9190617ce6565b9b9a5050505050505050505050565b6040517f8d1cc9250000000000000000000000000000000000000000000000000000000081526000908190737109709ecfa91a80626ff3989d68f67f5b1dd12d90638d1cc92590613aa3908790600401618103565b600060405180830381865afa158015613ac0573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052613ae891908101906181fe565b90506000613b168285604051602001613b02929190618233565b604051602081830303815290604052615520565b90506001600160a01b03811661374f57848460405160200161391f929190618262565b613b4582826000615533565b5050565b604080518082018252600381527f6f75740000000000000000000000000000000000000000000000000000000000602082015290517fd145736c000000000000000000000000000000000000000000000000000000008152606091737109709ecfa91a80626ff3989d68f67f5b1dd12d91829063d145736c90613bd090849060040161830d565b600060405180830381865afa158015613bed573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052613c159190810190618354565b9250505090565b613c4e6040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b6000737109709ecfa91a80626ff3989d68f67f5b1dd12d9050613c996040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b613ca285615636565b60208201526000613cb286615a1b565b90506000836001600160a01b031663d930a0e66040518163ffffffff1660e01b8152600401600060405180830381865afa158015613cf4573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052613d1c9190810190618354565b86838560200151604051602001613d36949392919061839d565b60408051601f19818403018152908290527f60f9bb1100000000000000000000000000000000000000000000000000000000825291506000906001600160a01b038616906360f9bb1190613d8e908590600401618103565b600060405180830381865afa158015613dab573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052613dd39190810190618354565b6040517fdb4235f60000000000000000000000000000000000000000000000000000000081529091506001600160a01b0386169063db4235f690613e1b9084906004016184a1565b602060405180830381865afa158015613e38573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613e5c9190617e04565b613e71578160405160200161391f91906184f3565b6040517f49c4fac80000000000000000000000000000000000000000000000000000000081526001600160a01b038616906349c4fac890613eb6908490600401618585565b600060405180830381865afa158015613ed3573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052613efb9190810190618354565b84526040517fdb4235f60000000000000000000000000000000000000000000000000000000081526001600160a01b0386169063db4235f690613f429084906004016185d7565b602060405180830381865afa158015613f5f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613f839190617e04565b15614018576040517f49c4fac80000000000000000000000000000000000000000000000000000000081526001600160a01b038616906349c4fac890613fcd9084906004016185d7565b600060405180830381865afa158015613fea573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526140129190810190618354565b60408501525b846001600160a01b03166349c4fac882866000015160405160200161403d9190618629565b6040516020818303038152906040526040518363ffffffff1660e01b8152600401614069929190617fbf565b600060405180830381865afa158015614086573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526140ae9190810190618354565b606085015250608083015250949350505050565b60408051600480825260a0820190925260609160009190816020015b60608152602001906001900390816140de5790505090506040518060400160405280600481526020017f67726570000000000000000000000000000000000000000000000000000000008152508160008151811061413e5761413e618695565b60200260200101819052506040518060400160405280600381526020017f2d726c00000000000000000000000000000000000000000000000000000000008152508160018151811061419257614192618695565b6020026020010181905250846040516020016141ae91906186c4565b604051602081830303815290604052816002815181106141d0576141d0618695565b6020026020010181905250826040516020016141ec9190618730565b6040516020818303038152906040528160038151811061420e5761420e618695565b6020026020010181905250600061422482615151565b602080820151604080518082018252600581527f2e6a736f6e00000000000000000000000000000000000000000000000000000081850190815282518084018452600080825290860152825180840190935290518252928101929092529192506142b59060408051808201825260008082526020918201528151808301909252845182528085019082015290615c9e565b6142ca578560405160200161391f9190618771565b9695505050505050565b60a0810151604080518082018252600080825260209182015281518083019092528251808352928101910152606090737109709ecfa91a80626ff3989d68f67f5b1dd12d9015614324565b511590565b614498578260200151156143e0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605860248201527f54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f742060448201527f62652075736564207768656e207468652060736b6970566572696679536f757260648201527f6365436f646560206f7074696f6e206973206074727565600000000000000000608482015260a40161395f565b8260c0015115614498576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605360248201527f54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f742060448201527f62652075736564207768656e207468652060736b69704c6963656e736554797060648201527f6560206f7074696f6e2069732060747275656000000000000000000000000000608482015260a40161395f565b6040805160ff8082526120008201909252600091816020015b60608152602001906001900390816144b157905050905060006040518060400160405280600381526020017f6e7078000000000000000000000000000000000000000000000000000000000081525082828061450c90618802565b935060ff168151811061452157614521618695565b60200260200101819052506040518060400160405280600d81526020017f302e302e312d616c7068612e37000000000000000000000000000000000000008152506040516020016145729190618821565b60405160208183030381529060405282828061458d90618802565b935060ff16815181106145a2576145a2618695565b60200260200101819052506040518060400160405280600681526020017f6465706c6f7900000000000000000000000000000000000000000000000000008152508282806145ef90618802565b935060ff168151811061460457614604618695565b60200260200101819052506040518060400160405280600e81526020017f2d2d636f6e74726163744e616d6500000000000000000000000000000000000081525082828061465190618802565b935060ff168151811061466657614666618695565b6020026020010181905250876020015182828061468290618802565b935060ff168151811061469757614697618695565b60200260200101819052506040518060400160405280600e81526020017f2d2d636f6e7472616374506174680000000000000000000000000000000000008152508282806146e490618802565b935060ff16815181106146f9576146f9618695565b60209081029190910101528751828261471181618802565b935060ff168151811061472657614726618695565b60200260200101819052506040518060400160405280600981526020017f2d2d636861696e4964000000000000000000000000000000000000000000000081525082828061477390618802565b935060ff168151811061478857614788618695565b602002602001018190525061479c46615cff565b82826147a781618802565b935060ff16815181106147bc576147bc618695565b60200260200101819052506040518060400160405280600f81526020017f2d2d6275696c64496e666f46696c65000000000000000000000000000000000081525082828061480990618802565b935060ff168151811061481e5761481e618695565b60200260200101819052508682828061483690618802565b935060ff168151811061484b5761484b618695565b60209081029190910101528551156149725760408051808201909152601581527f2d2d636f6e7374727563746f7242797465636f646500000000000000000000006020820152828261489c81618802565b935060ff16815181106148b1576148b1618695565b60209081029190910101526040517f71aad10d0000000000000000000000000000000000000000000000000000000081526001600160a01b038416906371aad10d90614901908990600401618103565b600060405180830381865afa15801561491e573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526149469190810190618354565b828261495181618802565b935060ff168151811061496657614966618695565b60200260200101819052505b846020015115614a425760408051808201909152601281527f2d2d766572696679536f75726365436f64650000000000000000000000000000602082015282826149bb81618802565b935060ff16815181106149d0576149d0618695565b60200260200101819052506040518060400160405280600581526020017f66616c7365000000000000000000000000000000000000000000000000000000815250828280614a1d90618802565b935060ff1681518110614a3257614a32618695565b6020026020010181905250614c09565b614a7a61431f8660a0015160408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b614b0d5760408051808201909152600d81527f2d2d6c6963656e7365547970650000000000000000000000000000000000000060208201528282614abd81618802565b935060ff1681518110614ad257614ad2618695565b60200260200101819052508460a00151604051602001614af291906186c4565b604051602081830303815290604052828280614a1d90618802565b8460c00151158015614b50575060408089015181518083018352600080825260209182015282518084019093528151835290810190820152614b4e90511590565b155b15614c095760408051808201909152600d81527f2d2d6c6963656e7365547970650000000000000000000000000000000000000060208201528282614b9481618802565b935060ff1681518110614ba957614ba9618695565b6020026020010181905250614bbd88615d9f565b604051602001614bcd91906186c4565b604051602081830303815290604052828280614be890618802565b935060ff1681518110614bfd57614bfd618695565b60200260200101819052505b60408086015181518083018352600080825260209182015282518084019093528151835290810190820152614c3d90511590565b614cd25760408051808201909152600b81527f2d2d72656c61796572496400000000000000000000000000000000000000000060208201528282614c8081618802565b935060ff1681518110614c9557614c95618695565b60200260200101819052508460400151828280614cb190618802565b935060ff1681518110614cc657614cc6618695565b60200260200101819052505b606085015115614df35760408051808201909152600681527f2d2d73616c74000000000000000000000000000000000000000000000000000060208201528282614d1b81618802565b935060ff1681518110614d3057614d30618695565b602090810291909101015260608501516040517fb11a19e800000000000000000000000000000000000000000000000000000000815260048101919091526001600160a01b0384169063b11a19e890602401600060405180830381865afa158015614d9f573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052614dc79190810190618354565b8282614dd281618802565b935060ff1681518110614de757614de7618695565b60200260200101819052505b60e08501515115614e9a5760408051808201909152600a81527f2d2d6761734c696d69740000000000000000000000000000000000000000000060208201528282614e3d81618802565b935060ff1681518110614e5257614e52618695565b6020026020010181905250614e6e8560e0015160000151615cff565b8282614e7981618802565b935060ff1681518110614e8e57614e8e618695565b60200260200101819052505b60e08501516020015115614f445760408051808201909152600a81527f2d2d67617350726963650000000000000000000000000000000000000000000060208201528282614ee781618802565b935060ff1681518110614efc57614efc618695565b6020026020010181905250614f188560e0015160200151615cff565b8282614f2381618802565b935060ff1681518110614f3857614f38618695565b60200260200101819052505b60e08501516040015115614fee5760408051808201909152600e81527f2d2d6d617846656550657247617300000000000000000000000000000000000060208201528282614f9181618802565b935060ff1681518110614fa657614fa6618695565b6020026020010181905250614fc28560e0015160400151615cff565b8282614fcd81618802565b935060ff1681518110614fe257614fe2618695565b60200260200101819052505b60e085015160600151156150985760408051808201909152601681527f2d2d6d61785072696f72697479466565506572476173000000000000000000006020820152828261503b81618802565b935060ff168151811061505057615050618695565b602002602001018190525061506c8560e0015160600151615cff565b828261507781618802565b935060ff168151811061508c5761508c618695565b60200260200101819052505b60008160ff1667ffffffffffffffff8111156150b6576150b6618116565b6040519080825280602002602001820160405280156150e957816020015b60608152602001906001900390816150d45790505b50905060005b8260ff168160ff16101561514257838160ff168151811061511257615112618695565b6020026020010151828260ff168151811061512f5761512f618695565b60209081029190910101526001016150ef565b5093505050505b949350505050565b6151786040518060600160405280600060030b815260200160608152602001606081525090565b60408051808201825260048082527f6261736800000000000000000000000000000000000000000000000000000000602083015291517fd145736c000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d92600091849163d145736c916151fe9186910161888c565b600060405180830381865afa15801561521b573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526152439190810190618354565b90506000615251868361688e565b90506000846001600160a01b031663f45c1ce7836040518263ffffffff1660e01b81526004016152819190617bd8565b6000604051808303816000875af11580156152a0573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526152c891908101906188d3565b805190915060030b158015906152e15750602081015151155b80156152f05750604081015151155b156142ca578160008151811061530857615308618695565b602002602001015160405160200161391f9190618989565b606060006153558560408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b60408051808201825260008082526020918201528151808301909252865182528087019082015290915061538c9082905b906169e3565b156154e957600061540982615403846153fd6153cf8a60408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6040805180820182526000808252602091820152815180830190925282518252918201519181019190915290565b90616a0a565b90616a6c565b604080518082018252600181527f0a000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015290915061546d9082906169e3565b156154d757604080518082018252600181527f0a00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526154d4905b8290616af1565b90505b6154e081616b17565b9250505061384c565b821561550257848460405160200161391f929190618b75565b505060408051602081019091526000815261384c565b509392505050565b6000808251602084016000f09392505050565b8160a001511561554257505050565b600061554f848484616b80565b9050600061555c82615151565b602081015181519192509060030b1580156155f85750604080518082018252600781527f5355434345535300000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526155f890604080518082018252600080825260209182015281518083019092528451825280850190820152615386565b1561560557505050505050565b6040820151511561562557816040015160405160200161391f9190618c1c565b8060405160200161391f9190618c7a565b6060600061566b8360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600481527f2e736f6c00000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201529091506156d0905b8290615c9e565b1561573f57604080518082018252600481527f2e736f6c000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261384c9061573a90839061711b565b616b17565b604080518082018252600181527f3a00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526157a1905b82906171a5565b60010361586e57604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152615807906154cd565b50604080518082018252600181527f3a000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261384c9061573a905b8390616af1565b604080518082018252600581527f2e6a736f6e000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526158cd906156c9565b15615a0457604080518082018252600181527f2f0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082018190528451808601909552925184528301529061593590839061723f565b9050600081600183516159489190617f1a565b8151811061595857615958618695565b602002602001015190506159fb61573a6159ce6040518060400160405280600581526020017f2e6a736f6e00000000000000000000000000000000000000000000000000000081525060408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6040805180820182526000808252602091820152815180830190925285518252808601908201529061711b565b95945050505050565b8260405160200161391f9190618ce5565b50919050565b60606000615a508360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600481527f2e736f6c0000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152909150615ab2906156c9565b15615ac05761384c81616b17565b604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152615b1f9061579a565b600103615b8957604080518082018252600181527f3a000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261384c9061573a90615867565b604080518082018252600581527f2e6a736f6e00000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152615be8906156c9565b15615a0457604080518082018252600181527f2f00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820181905284518086019095529251845283015290615c5090839061723f565b9050600181511115615c8c578060028251615c6b9190617f1a565b81518110615c7b57615c7b618695565b602002602001015192505050919050565b508260405160200161391f9190618ce5565b805182516000911115615cb357506000613753565b81518351602085015160009291615cc991617f2d565b615cd39190617f1a565b905082602001518103615cea576001915050613753565b82516020840151819020912014905092915050565b60606000615d0c836172e4565b600101905060008167ffffffffffffffff811115615d2c57615d2c618116565b6040519080825280601f01601f191660200182016040528015615d56576020820181803683370190505b5090508181016020015b600019017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a8504945084615d6057509392505050565b604081810151815180830183526000808252602091820181905283518085018552835181529282018383015283518085018552600a81527f554e4c4943454e5345440000000000000000000000000000000000000000000081840190815285518087018752838152840192909252845180860190955251845290830152606091615e2b905b82906173c6565b15615e6b57505060408051808201909152600481527f4e6f6e65000000000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600981527f556e6c6963656e7365000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152615eca90615e24565b15615f0a57505060408051808201909152600981527f556e6c6963656e736500000000000000000000000000000000000000000000006020820152919050565b604080518082018252600381527f4d4954000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152615f6990615e24565b15615fa957505060408051808201909152600381527f4d495400000000000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f47504c2d322e302d6f6e6c7900000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261600890615e24565b8061606d5750604080518082018252601081527f47504c2d322e302d6f722d6c61746572000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261606d90615e24565b156160ad57505060408051808201909152600981527f474e552047504c763200000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f47504c2d332e302d6f6e6c7900000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261610c90615e24565b806161715750604080518082018252601081527f47504c2d332e302d6f722d6c61746572000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261617190615e24565b156161b157505060408051808201909152600981527f474e552047504c763300000000000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4c47504c2d322e312d6f6e6c79000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261621090615e24565b806162755750604080518082018252601181527f4c47504c2d322e312d6f722d6c617465720000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261627590615e24565b156162b557505060408051808201909152600c81527f474e55204c47504c76322e3100000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4c47504c2d332e302d6f6e6c79000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261631490615e24565b806163795750604080518082018252601181527f4c47504c2d332e302d6f722d6c617465720000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261637990615e24565b156163b957505060408051808201909152600a81527f474e55204c47504c7633000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f4253442d322d436c6175736500000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261641890615e24565b1561645857505060408051808201909152600c81527f4253442d322d436c6175736500000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f4253442d332d436c617573650000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526164b790615e24565b156164f757505060408051808201909152600c81527f4253442d332d436c6175736500000000000000000000000000000000000000006020820152919050565b604080518082018252600781527f4d504c2d322e30000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261655690615e24565b1561659657505060408051808201909152600781527f4d504c2d322e30000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600781527f4f534c2d332e3000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526165f590615e24565b1561663557505060408051808201909152600781527f4f534c2d332e30000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600a81527f4170616368652d322e30000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261669490615e24565b156166d457505060408051808201909152600a81527f4170616368652d322e30000000000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4147504c2d332e302d6f6e6c79000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261673390615e24565b806167985750604080518082018252601181527f4147504c2d332e302d6f722d6c617465720000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261679890615e24565b156167d857505060408051808201909152600a81527f474e55204147504c7633000000000000000000000000000000000000000000006020820152919050565b604080518082018252600881527f4255534c2d312e310000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261683790615e24565b1561687757505060408051808201909152600781527f42534c20312e31000000000000000000000000000000000000000000000000006020820152919050565b6040808401518451915161391f9290602001618dc3565b60608060005b845181101561691957818582815181106168b0576168b0618695565b60200260200101516040516020016168c9929190618233565b6040516020818303038152906040529150600185516168e89190617f1a565b811461691157816040516020016168ff9190618f2c565b60405160208183030381529060405291505b600101616894565b5060408051600380825260808201909252600091816020015b6060815260200190600190039081616932579050509050838160008151811061695d5761695d618695565b60200260200101819052506040518060400160405280600281526020017f2d63000000000000000000000000000000000000000000000000000000000000815250816001815181106169b1576169b1618695565b602002602001018190525081816002815181106169d0576169d0618695565b6020908102919091010152949350505050565b6020808301518351835192840151600093616a0192918491906173da565b14159392505050565b60408051808201909152600080825260208201526000616a3c84600001518560200151856000015186602001516174eb565b9050836020015181616a4e9190617f1a565b84518590616a5d908390617f1a565b90525060208401525090919050565b6040805180820190915260008082526020820152815183511015616a91575081613753565b6020808301519084015160019114616ab85750815160208481015190840151829020919020145b8015616ae957825184518590616acf908390617f1a565b9052508251602085018051616ae5908390617f2d565b9052505b509192915050565b6040805180820190915260008082526020820152616b1083838361760b565b5092915050565b60606000826000015167ffffffffffffffff811115616b3857616b38618116565b6040519080825280601f01601f191660200182016040528015616b62576020820181803683370190505b5090506000602082019050616b1081856020015186600001516176b6565b60606000616b8c613b49565b6040805160ff808252612000820190925291925060009190816020015b6060815260200190600190039081616ba957905050905060006040518060400160405280600381526020017f6e70780000000000000000000000000000000000000000000000000000000000815250828280616c0490618802565b935060ff1681518110616c1957616c19618695565b60200260200101819052506040518060400160405280600781526020017f5e312e33322e3300000000000000000000000000000000000000000000000000815250604051602001616c6a9190618f6d565b604051602081830303815290604052828280616c8590618802565b935060ff1681518110616c9a57616c9a618695565b60200260200101819052506040518060400160405280600881526020017f76616c6964617465000000000000000000000000000000000000000000000000815250828280616ce790618802565b935060ff1681518110616cfc57616cfc618695565b602002602001018190525082604051602001616d189190618730565b604051602081830303815290604052828280616d3390618802565b935060ff1681518110616d4857616d48618695565b60200260200101819052506040518060400160405280600a81526020017f2d2d636f6e747261637400000000000000000000000000000000000000000000815250828280616d9590618802565b935060ff1681518110616daa57616daa618695565b6020026020010181905250616dbf8784617730565b8282616dca81618802565b935060ff1681518110616ddf57616ddf618695565b602090810291909101015285515115616e8b5760408051808201909152600b81527f2d2d7265666572656e636500000000000000000000000000000000000000000060208201528282616e3181618802565b935060ff1681518110616e4657616e46618695565b6020026020010181905250616e5f866000015184617730565b8282616e6a81618802565b935060ff1681518110616e7f57616e7f618695565b60200260200101819052505b856080015115616ef95760408051808201909152601881527f2d2d756e73616665536b697053746f72616765436865636b000000000000000060208201528282616ed481618802565b935060ff1681518110616ee957616ee9618695565b6020026020010181905250616f5f565b8415616f5f5760408051808201909152601281527f2d2d726571756972655265666572656e6365000000000000000000000000000060208201528282616f3e81618802565b935060ff1681518110616f5357616f53618695565b60200260200101819052505b60408601515115616ffb5760408051808201909152600d81527f2d2d756e73616665416c6c6f770000000000000000000000000000000000000060208201528282616fa981618802565b935060ff1681518110616fbe57616fbe618695565b60200260200101819052508560400151828280616fda90618802565b935060ff1681518110616fef57616fef618695565b60200260200101819052505b8560600151156170655760408051808201909152601481527f2d2d756e73616665416c6c6f7752656e616d65730000000000000000000000006020820152828261704481618802565b935060ff168151811061705957617059618695565b60200260200101819052505b60008160ff1667ffffffffffffffff81111561708357617083618116565b6040519080825280602002602001820160405280156170b657816020015b60608152602001906001900390816170a15790505b50905060005b8260ff168160ff16101561710f57838160ff16815181106170df576170df618695565b6020026020010151828260ff16815181106170fc576170fc618695565b60209081029190910101526001016170bc565b50979650505050505050565b6040805180820190915260008082526020820152815183511015617140575081613753565b8151835160208501516000929161715691617f2d565b6171609190617f1a565b60208401519091506001908214617181575082516020840151819020908220145b801561719c57835185518690617198908390617f1a565b9052505b50929392505050565b60008082600001516171c985600001518660200151866000015187602001516174eb565b6171d39190617f2d565b90505b835160208501516171e79190617f2d565b8111616b1057816171f781618fb2565b925050826000015161722e8560200151836172129190617f1a565b865161721e9190617f1a565b83866000015187602001516174eb565b6172389190617f2d565b90506171d6565b6060600061724d84846171a5565b617258906001617f2d565b67ffffffffffffffff81111561727057617270618116565b6040519080825280602002602001820160405280156172a357816020015b606081526020019060019003908161728e5790505b50905060005b8151811015615518576172bf61573a8686616af1565b8282815181106172d1576172d1618695565b60209081029190910101526001016172a9565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000831061732d577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310617359576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc10000831061737757662386f26fc10000830492506010015b6305f5e100831061738f576305f5e100830492506008015b61271083106173a357612710830492506004015b606483106173b5576064830492506002015b600a83106137535760010192915050565b60006173d28383617770565b159392505050565b6000808584116174e1576020841161748d5760008415617425576001617401866020617f1a565b61740c906008618fcc565b6174179060026190ca565b6174219190617f1a565b1990505b83518116856174348989617f2d565b61743e9190617f1a565b805190935082165b818114617478578784116174605787945050505050615149565b8361746a816190d6565b945050828451169050617446565b6174828785617f2d565b945050505050615149565b83832061749a8588617f1a565b6174a49087617f2d565b91505b8582106174df578482208082036174cc576174c28684617f2d565b9350505050615149565b6174d7600184617f1a565b9250506174a7565b505b5092949350505050565b600083818685116175f657602085116175a55760008515617537576001617513876020617f1a565b61751e906008618fcc565b6175299060026190ca565b6175339190617f1a565b1990505b845181166000876175488b8b617f2d565b6175529190617f1a565b855190915083165b8281146175975781861061757f576175728b8b617f2d565b9650505050505050615149565b8561758981618fb2565b96505083865116905061755a565b859650505050505050615149565b508383206000905b6175b78689617f1a565b82116175f4578583208082036175d35783945050505050615149565b6175de600185617f2d565b93505081806175ec90618fb2565b9250506175ad565b505b6176008787617f2d565b979650505050505050565b6040805180820190915260008082526020820152600061763d85600001518660200151866000015187602001516174eb565b6020808701805191860191909152519091506176599082617f1a565b83528451602086015161766c9190617f2d565b810361767b57600085526176ad565b835183516176899190617f2d565b85518690617698908390617f1a565b90525083516176a79082617f2d565b60208601525b50909392505050565b602081106176ee57815183526176cd602084617f2d565b92506176da602083617f2d565b91506176e7602082617f1a565b90506176b6565b600019811561771d576001617704836020617f1a565b617710906101006190ca565b61771a9190617f1a565b90505b9151835183169219169190911790915250565b6060600061773e8484613c1c565b8051602080830151604051939450617758939091016190ed565b60405160208183030381529060405291505092915050565b8151815160009190811115617783575081515b6020808501519084015160005b8381101561783c578251825180821461780c5760001960208710156177eb576001846177bd896020617f1a565b6177c79190617f2d565b6177d2906008618fcc565b6177dd9060026190ca565b6177e79190617f1a565b1990505b81811683821681810391146178095797506137539650505050505050565b50505b617817602086617f2d565b9450617824602085617f2d565b935050506020816178359190617f2d565b9050617790565b50845186516142ca9190619145565b610b678061916683390190565b61053f80619ccd83390190565b61106f8061a20c83390190565b611bb98061b27b83390190565b6040518060e001604052806060815260200160608152602001606081526020016000151581526020016000151581526020016000151581526020016178c26178c7565b905290565b604051806101000160405280600015158152602001600015158152602001606081526020016000801916815260200160608152602001606081526020016000151581526020016178c26040518060800160405280600081526020016000815260200160008152602001600081525090565b602080825282518282018190526000918401906040840190835b818110156179795783516001600160a01b0316835260209384019390920191600101617952565b509095945050505050565b60005b8381101561799f578181015183820152602001617987565b50506000910152565b600081518084526179c0816020860160208601617984565b601f01601f19169290920160200192915050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015617ad0577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452815180516001600160a01b03168652602090810151604082880181905281519088018190529101906060600582901b88018101919088019060005b81811015617ab6577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa08a8503018352617aa08486516179a8565b6020958601959094509290920191600101617a66565b5091975050506020948501949290920191506001016179fc565b50929695505050505050565b600081518084526020840193506020830160005b82811015617b305781517fffffffff0000000000000000000000000000000000000000000000000000000016865260209586019590910190600101617af0565b5093949350505050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015617ad0577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08786030184528151805160408752617ba660408801826179a8565b9050602082015191508681036020880152617bc18183617adc565b965050506020938401939190910190600101617b62565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015617ad0577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452617c3a8583516179a8565b94506020938401939190910190600101617c00565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015617ad0577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc087860301845281516001600160a01b0381511686526020810151905060406020870152617cd06040870182617adc565b9550506020938401939190910190600101617c77565b600060208284031215617cf857600080fd5b81516001600160a01b038116811461384c57600080fd5b610100815260056101008201527f544f4b454e000000000000000000000000000000000000000000000000000000610120820152610140602082015260036101408201527f544b4e000000000000000000000000000000000000000000000000000000000061016082015260006101808201905060ff8816604083015286606083015260038610617dc9577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b8560808301528460a0830152617dea60c08301856001600160a01b03169052565b6001600160a01b03831660e0830152979650505050505050565b600060208284031215617e1657600080fd5b8151801515811461384c57600080fd5b600060208284031215617e3857600080fd5b5051919050565b608081526000617e5260808301876179a8565b8560208401526001600160a01b0385166040840152828103606084015261760081856179a8565b60c081526000617e8c60c08301896179a8565b6001600160a01b038816602084015286604084015285606084015284608084015282810360a0840152617ebf81856179a8565b9998505050505050505050565b8381528260208201526060604082015260006159fb60608301846179a8565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8181038181111561375357613753617eeb565b8082018082111561375357613753617eeb565b600181811c90821680617f5457607f821691505b602082108103615a15577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b606081526000617fa060608301866179a8565b90508360208301526001600160a01b0383166040830152949350505050565b604081526000617fd260408301856179a8565b828103602084015261384881856179a8565b606081526000617ff760608301866179a8565b84602084015282810360408401526142ca81856179a8565b60c08152600061802260c08301886179a8565b6001600160a01b038716602084015285604084015284606084015283608084015282810360a084015260008152602081019150509695505050505050565b6001600160a01b038316815260406020820152600061514960408301846179a8565b7f4661696c656420746f206465706c6f7920636f6e7472616374200000000000008152600083516180ba81601a850160208801617984565b7f3a20000000000000000000000000000000000000000000000000000000000000601a9184019182015283516180f781601c840160208801617984565b01601c01949350505050565b60208152600061384c60208301846179a8565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040516060810167ffffffffffffffff8111828210171561816857618168618116565b60405290565b60008067ffffffffffffffff84111561818957618189618116565b50604051601f19601f85018116603f0116810181811067ffffffffffffffff821117156181b8576181b8618116565b6040528381529050808284018510156181d057600080fd5b615518846020830185617984565b600082601f8301126181ef57600080fd5b61384c8383516020850161816e565b60006020828403121561821057600080fd5b815167ffffffffffffffff81111561822757600080fd5b61374f848285016181de565b60008351618245818460208801617984565b835190830190618259818360208801617984565b01949350505050565b7f4661696c656420746f206465706c6f7920636f6e74726163742000000000000081526000835161829a81601a850160208801617984565b7f207573696e6720636f6e7374727563746f722064617461202200000000000000601a9184019182015283516182d7816033840160208801617984565b7f220000000000000000000000000000000000000000000000000000000000000060339290910191820152603401949350505050565b60408152600b60408201527f464f554e4452595f4f5554000000000000000000000000000000000000000000606082015260806020820152600061384c60808301846179a8565b60006020828403121561836657600080fd5b815167ffffffffffffffff81111561837d57600080fd5b8201601f8101841361838e57600080fd5b61374f8482516020840161816e565b600085516183af818460208a01617984565b7f2f0000000000000000000000000000000000000000000000000000000000000090830190815285516183e9816001840160208a01617984565b7f2f00000000000000000000000000000000000000000000000000000000000000600192909101918201528451618427816002840160208901617984565b6001818301019150507f2f0000000000000000000000000000000000000000000000000000000000000060018201528351618469816002840160208801617984565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600292909101918201526007019695505050505050565b6040815260006184b460408301846179a8565b8281036020840152600481527f2e6173740000000000000000000000000000000000000000000000000000000060208201526040810191505092915050565b7f436f756c64206e6f742066696e642041535420696e206172746966616374200081526000825161852b81601f850160208701617984565b7f2e205365742060617374203d20747275656020696e20666f756e6472792e746f601f9390910192830152507f6d6c000000000000000000000000000000000000000000000000000000000000603f820152604101919050565b60408152600061859860408301846179a8565b8281036020840152601181527f2e6173742e6162736f6c7574655061746800000000000000000000000000000060208201526040810191505092915050565b6040815260006185ea60408301846179a8565b8281036020840152600c81527f2e6173742e6c6963656e7365000000000000000000000000000000000000000060208201526040810191505092915050565b7f2e6d657461646174612e736f75726365732e5b27000000000000000000000000815260008251618661816014850160208701617984565b7f275d2e6b656363616b32353600000000000000000000000000000000000000006014939091019283015250602001919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f22000000000000000000000000000000000000000000000000000000000000008152600082516186fc816001850160208701617984565b7f22000000000000000000000000000000000000000000000000000000000000006001939091019283015250600201919050565b60008251618742818460208701617984565b7f2f6275696c642d696e666f000000000000000000000000000000000000000000920191825250600b01919050565b7f436f756c64206e6f742066696e64206275696c642d696e666f2066696c65207781527f697468206d61746368696e6720736f7572636520636f6465206861736820666f60208201527f7220636f6e7472616374200000000000000000000000000000000000000000006040820152600082516187f581604b850160208701617984565b91909101604b0192915050565b600060ff821660ff810361881857618818617eeb565b60010192915050565b7f406f70656e7a657070656c696e2f646566656e6465722d6465706c6f792d636c81527f69656e742d636c6940000000000000000000000000000000000000000000000060208201526000825161887f816029850160208701617984565b9190910160290192915050565b60408152601660408201527f4f50454e5a455050454c494e5f424153485f5041544800000000000000000000606082015260806020820152600061384c60808301846179a8565b6000602082840312156188e557600080fd5b815167ffffffffffffffff8111156188fc57600080fd5b82016060818503121561890e57600080fd5b618916618145565b81518060030b811461892757600080fd5b8152602082015167ffffffffffffffff81111561894357600080fd5b61894f868285016181de565b602083015250604082015167ffffffffffffffff81111561896f57600080fd5b61897b868285016181de565b604083015250949350505050565b7f4661696c656420746f2072756e206261736820636f6d6d616e6420776974682081527f22000000000000000000000000000000000000000000000000000000000000006020820152600082516189e7816021850160208701617984565b7f222e20496620796f7520617265207573696e672057696e646f77732c2073657460219390910192830152507f20746865204f50454e5a455050454c494e5f424153485f5041544820656e766960418201527f726f6e6d656e74207661726961626c6520746f207468652066756c6c7920717560618201527f616c69666965642070617468206f66207468652062617368206578656375746160818201527f626c652e20466f72206578616d706c652c20696620796f75206172652075736960a18201527f6e672047697420666f722057696e646f77732c206164642074686520666f6c6c60c18201527f6f77696e67206c696e6520696e20746865202e656e762066696c65206f66207960e18201527f6f75722070726f6a65637420287573696e6720666f727761726420736c6173686101018201527f6573293a0a4f50454e5a455050454c494e5f424153485f504154483d22433a2f6101218201527f50726f6772616d2046696c65732f4769742f62696e2f6261736822000000000061014182015261015c01919050565b7f4661696c656420746f2066696e64206c696e652077697468207072656669782081527f2700000000000000000000000000000000000000000000000000000000000000602082015260008351618bd3816021850160208801617984565b7f2720696e206f75747075743a20000000000000000000000000000000000000006021918401918201528351618c1081602e840160208801617984565b01602e01949350505050565b7f4661696c656420746f2072756e2075706772616465207361666574792076616c81527f69646174696f6e3a20000000000000000000000000000000000000000000000060208201526000825161887f816029850160208701617984565b7f55706772616465207361666574792076616c69646174696f6e206661696c656481527f3a0a000000000000000000000000000000000000000000000000000000000000602082015260008251618cd8816022850160208701617984565b9190910160220192915050565b7f436f6e7472616374206e616d6520000000000000000000000000000000000000815260008251618d1d81600e850160208701617984565b7f206d75737420626520696e2074686520666f726d6174204d79436f6e74726163600e9390910192830152507f742e736f6c3a4d79436f6e7472616374206f72204d79436f6e74726163742e73602e8201527f6f6c206f72206f75742f4d79436f6e74726163742e736f6c2f4d79436f6e7472604e8201527f6163742e6a736f6e000000000000000000000000000000000000000000000000606e820152607601919050565b7f53504458206c6963656e7365206964656e746966696572200000000000000000815260008351618dfb816018850160208801617984565b7f20696e20000000000000000000000000000000000000000000000000000000006018918401918201528351618e3881601c840160208801617984565b7f20646f6573206e6f74206c6f6f6b206c696b65206120737570706f7274656420601c92909101918201527f6c6963656e736520666f7220626c6f636b206578706c6f726572207665726966603c8201527f69636174696f6e2e205573652074686520606c6963656e73655479706560206f605c8201527f7074696f6e20746f20737065636966792061206c6963656e736520747970652c607c8201527f206f7220736574207468652060736b69704c6963656e73655479706560206f70609c8201527f74696f6e20746f2060747275656020746f20736b69702e00000000000000000060bc82015260d301949350505050565b60008251618f3e818460208701617984565b7f2000000000000000000000000000000000000000000000000000000000000000920191825250600101919050565b7f406f70656e7a657070656c696e2f75706772616465732d636f72654000000000815260008251618fa581601c850160208701617984565b91909101601c0192915050565b60006000198203618fc557618fc5617eeb565b5060010190565b808202811582820484141761375357613753617eeb565b6001815b600184111561901e5780850481111561900257619002617eeb565b600184161561901057908102905b60019390931c928002618fe7565b935093915050565b60008261903557506001613753565b8161904257506000613753565b816001811461905857600281146190625761907e565b6001915050613753565b60ff84111561907357619073617eeb565b50506001821b613753565b5060208310610133831016604e8410600b84101617156190a1575081810a613753565b6190ae6000198484618fe3565b80600019048211156190c2576190c2617eeb565b029392505050565b600061384c8383619026565b6000816190e5576190e5617eeb565b506000190190565b600083516190ff818460208801617984565b7f3a000000000000000000000000000000000000000000000000000000000000009083019081528351619139816001840160208801617984565b01600101949350505050565b8181036000831280158383131683831282161715616b1057616b10617eeb56fe60c0604052600d60809081526c2bb930b83832b21022ba3432b960991b60a05260009061002c9082610114565b506040805180820190915260048152630ae8aa8960e31b60208201526001906100559082610114565b506002805460ff1916601217905534801561006f57600080fd5b506101d2565b634e487b7160e01b600052604160045260246000fd5b600181811c9082168061009f57607f821691505b6020821081036100bf57634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111561010f57806000526020600020601f840160051c810160208510156100ec5750805b601f840160051c820191505b8181101561010c57600081556001016100f8565b50505b505050565b81516001600160401b0381111561012d5761012d610075565b6101418161013b845461008b565b846100c5565b6020601f821160018114610175576000831561015d5750848201515b600019600385901b1c1916600184901b17845561010c565b600084815260208120601f198516915b828110156101a55787850151825560209485019460019092019101610185565b50848210156101c35786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b610986806101e16000396000f3fe6080604052600436106100c05760003560e01c8063313ce56711610074578063a9059cbb1161004e578063a9059cbb146101fa578063d0e30db01461021a578063dd62ed3e1461022257600080fd5b8063313ce5671461018c57806370a08231146101b857806395d89b41146101e557600080fd5b806318160ddd116100a557806318160ddd1461012f57806323b872dd1461014c5780632e1a7d4d1461016c57600080fd5b806306fdde03146100d4578063095ea7b3146100ff57600080fd5b366100cf576100cd61025a565b005b600080fd5b3480156100e057600080fd5b506100e96102b5565b6040516100f69190610745565b60405180910390f35b34801561010b57600080fd5b5061011f61011a3660046107da565b610343565b60405190151581526020016100f6565b34801561013b57600080fd5b50475b6040519081526020016100f6565b34801561015857600080fd5b5061011f610167366004610804565b6103bd565b34801561017857600080fd5b506100cd610187366004610841565b610647565b34801561019857600080fd5b506002546101a69060ff1681565b60405160ff90911681526020016100f6565b3480156101c457600080fd5b5061013e6101d336600461085a565b60036020526000908152604090205481565b3480156101f157600080fd5b506100e9610724565b34801561020657600080fd5b5061011f6102153660046107da565b610731565b6100cd61025a565b34801561022e57600080fd5b5061013e61023d366004610875565b600460209081526000928352604080842090915290825290205481565b33600090815260036020526040812080543492906102799084906108d7565b909155505060405134815233907fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c9060200160405180910390a2565b600080546102c2906108ea565b80601f01602080910402602001604051908101604052809291908181526020018280546102ee906108ea565b801561033b5780601f106103105761010080835404028352916020019161033b565b820191906000526020600020905b81548152906001019060200180831161031e57829003601f168201915b505050505081565b33600081815260046020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925906103ab9086815260200190565b60405180910390a35060015b92915050565b73ffffffffffffffffffffffffffffffffffffffff831660009081526003602052604081205482111561042b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600060248201526044015b60405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff841633148015906104a1575073ffffffffffffffffffffffffffffffffffffffff841660009081526004602090815260408083203384529091529020547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff14155b156105605773ffffffffffffffffffffffffffffffffffffffff8416600090815260046020908152604080832033845290915290205482111561051a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526020600482015260006024820152604401610422565b73ffffffffffffffffffffffffffffffffffffffff841660009081526004602090815260408083203384529091528120805484929061055a90849061093d565b90915550505b73ffffffffffffffffffffffffffffffffffffffff84166000908152600360205260408120805484929061059590849061093d565b909155505073ffffffffffffffffffffffffffffffffffffffff8316600090815260036020526040812080548492906105cf9084906108d7565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161063591815260200190565b60405180910390a35060019392505050565b3360009081526003602052604090205481111561069a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526020600482015260006024820152604401610422565b33600090815260036020526040812080548392906106b990849061093d565b9091555050604051339082156108fc029083906000818181858888f193505050501580156106eb573d6000803e3d6000fd5b5060405181815233907f7fcf532c15f0a6db0bd6d0e038bea71d30d808c7d98cb3bf7268a95bf5081b659060200160405180910390a250565b600180546102c2906108ea565b600061073e3384846103bd565b9392505050565b602081526000825180602084015260005b818110156107735760208186018101516040868401015201610756565b5060006040828501015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011684010191505092915050565b803573ffffffffffffffffffffffffffffffffffffffff811681146107d557600080fd5b919050565b600080604083850312156107ed57600080fd5b6107f6836107b1565b946020939093013593505050565b60008060006060848603121561081957600080fd5b610822846107b1565b9250610830602085016107b1565b929592945050506040919091013590565b60006020828403121561085357600080fd5b5035919050565b60006020828403121561086c57600080fd5b61073e826107b1565b6000806040838503121561088857600080fd5b610891836107b1565b915061089f602084016107b1565b90509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b808201808211156103b7576103b76108a8565b600181811c908216806108fe57607f821691505b602082108103610937577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b818103818111156103b7576103b76108a856fea264697066735822122008d7fc4e09519c5dd9f356b03596f6829a151d0bc7682533f9ceab4e459f5ee264736f6c634300081a00336080604052348015600f57600080fd5b506105208061001f6000396000f3fe60806040526004361061002a5760003560e01c806369582bee14610033578063de43156e1461005357005b3661003157005b005b34801561003f57600080fd5b5061003161004e3660046101ba565b610073565b34801561005f57600080fd5b5061003161006e3660046101ba565b6100ee565b6060811561008a5761008782840184610273565b90505b7ffdc887992b033668833927e252058e468fac0b6bd196d520f09c61b740e999486100b58780610369565b6100c560408a0160208b016103ce565b896040013533866040516100de969594939291906103f0565b60405180910390a1505050505050565b606081156101055761010282840184610273565b90505b7fcdc8ee677dc5ebe680fb18cebda5e26ba5ea1f0ba504a47e2a9a2ecb476dc98e6100b58780610369565b60006060828403121561014257600080fd5b50919050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461016c57600080fd5b919050565b60008083601f84011261018357600080fd5b50813567ffffffffffffffff81111561019b57600080fd5b6020830191508360208285010111156101b357600080fd5b9250929050565b6000806000806000608086880312156101d257600080fd5b853567ffffffffffffffff8111156101e957600080fd5b6101f588828901610130565b95505061020460208701610148565b935060408601359250606086013567ffffffffffffffff81111561022757600080fd5b61023388828901610171565b969995985093965092949392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60006020828403121561028557600080fd5b813567ffffffffffffffff81111561029c57600080fd5b8201601f810184136102ad57600080fd5b803567ffffffffffffffff8111156102c7576102c7610244565b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8501160116810181811067ffffffffffffffff8211171561033357610333610244565b60405281815282820160200186101561034b57600080fd5b81602084016020830137600091810160200191909152949350505050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261039e57600080fd5b83018035915067ffffffffffffffff8211156103b957600080fd5b6020019150368190038213156101b357600080fd5b6000602082840312156103e057600080fd5b6103e982610148565b9392505050565b60a081528560a0820152858760c0830137600060c0878301015260007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f880116820173ffffffffffffffffffffffffffffffffffffffff8716602084015285604084015273ffffffffffffffffffffffffffffffffffffffff8516606084015260c083820301608084015283518060c083015260005b818110156104a557602081870181015184830160e0015201610488565b50600060e0838301810191909152601f9091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016909101019897505050505050505056fea2646970667358221220f4d1ccb9c8450e782e1c77412473fd37637a5c83a2a3272307d8c8bc8e8c7a3364736f6c634300081a003360c060405234801561001057600080fd5b5060405161106f38038061106f83398101604081905261002f916100db565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461006357604051632b2add3d60e01b815260040160405180910390fd5b600380546001600160a01b0319166001600160a01b0385811691909117909155828116608052811660a0526040517f80699e81136d69cb8367ad52a994e25c722a86da654b561d0c14b61a777e7ac590600090a150505061011e565b80516001600160a01b03811681146100d657600080fd5b919050565b6000806000606084860312156100f057600080fd5b6100f9846100bf565b9250610107602085016100bf565b9150610115604085016100bf565b90509250925092565b60805160a051610f2561014a60003960006101e50152600081816102b9015261045b0152610f256000f3fe608060405234801561001057600080fd5b50600436106100f55760003560e01c806397770dff11610097578063c63585cc11610066578063c63585cc14610273578063d7fd7afb14610286578063d936a012146102b4578063ee2815ba146102db57600080fd5b806397770dff1461021a578063a7cb05071461022d578063c39aca3714610240578063c62178ac1461025357600080fd5b8063513a9c05116100d3578063513a9c051461018a578063569541b9146101c0578063842da36d146101e057806391dd645f1461020757600080fd5b80630be15547146100fa5780631f0e251b1461015a5780633ce4a5bc1461016f575b600080fd5b610130610108366004610bd1565b60016020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b61016d610168366004610c13565b6102ee565b005b61013073735b14bb79463307aacbed86daf3322b1e6226ab81565b610130610198366004610bd1565b60026020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b6003546101309073ffffffffffffffffffffffffffffffffffffffff1681565b6101307f000000000000000000000000000000000000000000000000000000000000000081565b61016d610215366004610c35565b610402565b61016d610228366004610c13565b610526565b61016d61023b366004610c61565b610633565b61016d61024e366004610c83565b6106ce565b6004546101309073ffffffffffffffffffffffffffffffffffffffff1681565b610130610281366004610d53565b6108cd565b6102a6610294366004610bd1565b60006020819052908152604090205481565b604051908152602001610151565b6101307f000000000000000000000000000000000000000000000000000000000000000081565b61016d6102e9366004610c35565b610a02565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461033b576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116610388576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600480547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527f3ade88e3922d64780e1bf4460d364c2970b69da813f9c0c07a1c187b5647636c906020015b60405180910390a150565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461044f576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600354600090610497907f00000000000000000000000000000000000000000000000000000000000000009073ffffffffffffffffffffffffffffffffffffffff16846108cd565b60008481526002602090815260409182902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff85169081179091558251878152918201529192507f0ecec485166da6139b13bb7e033e9446e2d35348e80ebf1180d4afe2dba1704e910160405180910390a1505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610573576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff81166105c0576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527fdba79d534382d1a8ae108e4c8ecb27c6ae42ab8b91d44eedf88bd329f3868d5e906020016103f7565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610680576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000828152602081815260409182902083905581518481529081018390527f49f492222906ac486c3c1401fa545626df1f0c0e5a77a05597ea2ed66af9850d91015b60405180910390a15050565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461071b576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff831673735b14bb79463307aacbed86daf3322b1e6226ab1480610768575073ffffffffffffffffffffffffffffffffffffffff831630145b1561079f576040517f82d5d76a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f47e7ef2400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152602482018690528616906347e7ef24906044016020604051808303816000875af1158015610814573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108389190610d96565b506040517fde43156e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84169063de43156e906108939089908990899088908890600401610e01565b600060405180830381600087803b1580156108ad57600080fd5b505af11580156108c1573d6000803e3d6000fd5b50505050505050505050565b60008060006108dc8585610ad3565b6040517fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606084811b8216602084015283901b16603482015291935091508690604801604051602081830303815290604052805190602001206040516020016109c29291907fff00000000000000000000000000000000000000000000000000000000000000815260609290921b7fffffffffffffffffffffffffffffffffffffffff00000000000000000000000016600183015260158201527f96e8ac4277198ff8b6f785478aa9a39f403cb768dd02cbee326c3e7da348845f603582015260550190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291905280516020909101209695505050505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610a4f576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008281526001602090815260409182902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff85169081179091558251858152918201527fd1b36d30f6248e97c473b4d1348ca164a4ef6759022f54a58ec200326c39c45d91016106c2565b6000808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603610b3b576040517fcb1e7cfe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1610610b75578284610b78565b83835b909250905073ffffffffffffffffffffffffffffffffffffffff8216610bca576040517f78b507da00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b9250929050565b600060208284031215610be357600080fd5b5035919050565b803573ffffffffffffffffffffffffffffffffffffffff81168114610c0e57600080fd5b919050565b600060208284031215610c2557600080fd5b610c2e82610bea565b9392505050565b60008060408385031215610c4857600080fd5b82359150610c5860208401610bea565b90509250929050565b60008060408385031215610c7457600080fd5b50508035926020909101359150565b60008060008060008060a08789031215610c9c57600080fd5b863567ffffffffffffffff811115610cb357600080fd5b87016060818a031215610cc557600080fd5b9550610cd360208801610bea565b945060408701359350610ce860608801610bea565b9250608087013567ffffffffffffffff811115610d0457600080fd5b8701601f81018913610d1557600080fd5b803567ffffffffffffffff811115610d2c57600080fd5b896020828401011115610d3e57600080fd5b60208201935080925050509295509295509295565b600080600060608486031215610d6857600080fd5b610d7184610bea565b9250610d7f60208501610bea565b9150610d8d60408501610bea565b90509250925092565b600060208284031215610da857600080fd5b81518015158114610c2e57600080fd5b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b60808152600086357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1883603018112610e3957600080fd5b870160208101903567ffffffffffffffff811115610e5657600080fd5b803603821315610e6557600080fd5b60606080850152610e7a60e085018284610db8565b91505073ffffffffffffffffffffffffffffffffffffffff610e9e60208a01610bea565b1660a0840152604088013560c084015273ffffffffffffffffffffffffffffffffffffffff871660208401528560408401528281036060840152610ee3818587610db8565b9897505050505050505056fea2646970667358221220431a07541a491b54259bdf8fcd05ade6751bfbbf0e72e605f27325b56d7d464f64736f6c634300081a003360e060405234801561001057600080fd5b50604051611bb9380380611bb983398101604081905261002f9161020e565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461006357604051632b2add3d60e01b815260040160405180910390fd5b6001600160a01b038216158061008057506001600160a01b038116155b1561009e5760405163d92e233d60e01b815260040160405180910390fd5b60066100aa8982610360565b5060076100b78882610360565b5060ff861660c05260808590528360028111156100d6576100d661041e565b60a08160028111156100ea576100ea61041e565b905250600192909255600080546001600160a01b039283166001600160a01b03199182161790915560088054929093169116179055506104349350505050565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261015157600080fd5b81516001600160401b0381111561016a5761016a61012a565b604051601f8201601f19908116603f011681016001600160401b03811182821017156101985761019861012a565b6040528181528382016020018510156101b057600080fd5b60005b828110156101cf576020818601810151838301820152016101b3565b506000918101602001919091529392505050565b8051600381106101f257600080fd5b919050565b80516001600160a01b03811681146101f257600080fd5b600080600080600080600080610100898b03121561022b57600080fd5b88516001600160401b0381111561024157600080fd5b61024d8b828c01610140565b60208b015190995090506001600160401b0381111561026b57600080fd5b6102778b828c01610140565b975050604089015160ff8116811461028e57600080fd5b60608a015190965094506102a460808a016101e3565b60a08a015190945092506102ba60c08a016101f7565b91506102c860e08a016101f7565b90509295985092959890939650565b600181811c908216806102eb57607f821691505b60208210810361030b57634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111561035b57806000526020600020601f840160051c810160208510156103385750805b601f840160051c820191505b818110156103585760008155600101610344565b50505b505050565b81516001600160401b038111156103795761037961012a565b61038d8161038784546102d7565b84610311565b6020601f8211600181146103c157600083156103a95750848201515b600019600385901b1c1916600184901b178455610358565b600084815260208120601f198516915b828110156103f157878501518255602094850194600190920191016103d1565b508482101561040f5786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b634e487b7160e01b600052602160045260246000fd5b60805160a05160c05161174861047160003960006102170152600061033a0152600081816102eb01528181610ad70152610bdd01526117486000f3fe608060405234801561001057600080fd5b50600436106101985760003560e01c80638b851b95116100e3578063ccc775991161008c578063eddeb12311610066578063eddeb12314610431578063f2441b3214610444578063f687d12a1461046457600080fd5b8063ccc77599146103a4578063d9eeebed146103b7578063dd62ed3e146103eb57600080fd5b8063a9059cbb116100bd578063a9059cbb14610369578063c70126261461037c578063c835d7cc1461038f57600080fd5b80638b851b951461030d57806395d89b411461032d578063a3413d031461033557600080fd5b80633ce4a5bc116101455780634d8943bb1161011f5780634d8943bb146102a757806370a08231146102b057806385e1f4d0146102e657600080fd5b80633ce4a5bc1461024157806342966c681461028157806347e7ef241461029457600080fd5b806318160ddd1161017657806318160ddd146101f557806323b872dd146101fd578063313ce5671461021057600080fd5b806306fdde031461019d578063091d2788146101bb578063095ea7b3146101d2575b600080fd5b6101a5610477565b6040516101b29190611327565b60405180910390f35b6101c460015481565b6040519081526020016101b2565b6101e56101e0366004611366565b610509565b60405190151581526020016101b2565b6005546101c4565b6101e561020b366004611392565b610520565b60405160ff7f00000000000000000000000000000000000000000000000000000000000000001681526020016101b2565b61025c73735b14bb79463307aacbed86daf3322b1e6226ab81565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101b2565b6101e561028f3660046113d3565b6105b7565b6101e56102a2366004611366565b6105cb565b6101c460025481565b6101c46102be3660046113ec565b73ffffffffffffffffffffffffffffffffffffffff1660009081526003602052604090205490565b6101c47f000000000000000000000000000000000000000000000000000000000000000081565b60085461025c9073ffffffffffffffffffffffffffffffffffffffff1681565b6101a561071f565b61035c7f000000000000000000000000000000000000000000000000000000000000000081565b6040516101b29190611409565b6101e5610377366004611366565b61072e565b6101e561038a366004611479565b61073b565b6103a261039d3660046113ec565b61088a565b005b6103a26103b23660046113ec565b61099e565b6103bf610aab565b6040805173ffffffffffffffffffffffffffffffffffffffff90931683526020830191909152016101b2565b6101c46103f9366004611571565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260046020908152604080832093909416825291909152205490565b6103a261043f3660046113d3565b610cc9565b60005461025c9073ffffffffffffffffffffffffffffffffffffffff1681565b6103a26104723660046113d3565b610d4b565b606060068054610486906115aa565b80601f01602080910402602001604051908101604052809291908181526020018280546104b2906115aa565b80156104ff5780601f106104d4576101008083540402835291602001916104ff565b820191906000526020600020905b8154815290600101906020018083116104e257829003601f168201915b5050505050905090565b6000610516338484610dcd565b5060015b92915050565b600061052d848484610ed6565b73ffffffffffffffffffffffffffffffffffffffff8416600090815260046020908152604080832033845290915290205482811015610598576040517f10bad14700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6105ac85336105a7868561162c565b610dcd565b506001949350505050565b60006105c33383611091565b506001919050565b60003373735b14bb79463307aacbed86daf3322b1e6226ab14801590610609575060005473ffffffffffffffffffffffffffffffffffffffff163314155b801561062d575060085473ffffffffffffffffffffffffffffffffffffffff163314155b15610664576040517fddb5de5e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61066e83836111d3565b6040517f735b14bb79463307aacbed86daf3322b1e6226ab000000000000000000000000602082015273ffffffffffffffffffffffffffffffffffffffff8416907f67fc7bdaed5b0ec550d8706b87d60568ab70c6b781263c70101d54cd1564aab390603401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529082905261070e91869061163f565b60405180910390a250600192915050565b606060078054610486906115aa565b6000610516338484610ed6565b6000806000610748610aab565b6040517f23b872dd00000000000000000000000000000000000000000000000000000000815233600482015273735b14bb79463307aacbed86daf3322b1e6226ab602482015260448101829052919350915073ffffffffffffffffffffffffffffffffffffffff8316906323b872dd906064016020604051808303816000875af11580156107da573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107fe9190611661565b610834576040517f0a7cd6d600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61083e3385611091565b60025460405133917f9ffbffc04a397460ee1dbe8c9503e098090567d6b7f4b3c02a8617d800b6d9559161087791899189918791611683565b60405180910390a2506001949350505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab146108d7576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116610924576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527fd55614e962c5fd6ece71614f6348d702468a997a394dd5e5c1677950226d97ae906020015b60405180910390a150565b3373735b14bb79463307aacbed86daf3322b1e6226ab146109eb576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116610a38576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600880547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527f88815d964e380677e86d817e7d65dea59cb7b4c3b5b7a0c8ec7ea4a74f90a38790602001610993565b600080546040517f0be155470000000000000000000000000000000000000000000000000000000081527f000000000000000000000000000000000000000000000000000000000000000060048201528291829173ffffffffffffffffffffffffffffffffffffffff90911690630be1554790602401602060405180830381865afa158015610b3e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b6291906116b2565b905073ffffffffffffffffffffffffffffffffffffffff8116610bb1576040517f78fff39600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080546040517fd7fd7afb0000000000000000000000000000000000000000000000000000000081527f0000000000000000000000000000000000000000000000000000000000000000600482015273ffffffffffffffffffffffffffffffffffffffff9091169063d7fd7afb90602401602060405180830381865afa158015610c40573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c6491906116cf565b905080600003610ca0576040517fe661aed000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060025460015483610cb391906116e8565b610cbd91906116ff565b92959294509192505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610d16576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60028190556040518181527fef13af88e424b5d15f49c77758542c1938b08b8b95b91ed0751f98ba99000d8f90602001610993565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610d98576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018190556040518181527fff5788270f43bfc1ca41c503606d2594aa3023a1a7547de403a3e2f146a4a80a90602001610993565b73ffffffffffffffffffffffffffffffffffffffff8316610e1a576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216610e67576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff83811660008181526004602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8316610f23576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216610f70576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff831660009081526003602052604090205481811015610fd0576040517ffe382aa700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610fda828261162c565b73ffffffffffffffffffffffffffffffffffffffff808616600090815260036020526040808220939093559085168152908120805484929061101d9084906116ff565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161108391815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff82166110de576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff82166000908152600360205260409020548181101561113e576040517ffe382aa700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611148828261162c565b73ffffffffffffffffffffffffffffffffffffffff84166000908152600360205260408120919091556005805484929061118390849061162c565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90602001610ec9565b73ffffffffffffffffffffffffffffffffffffffff8216611220576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b806005600082825461123291906116ff565b909155505073ffffffffffffffffffffffffffffffffffffffff82166000908152600360205260408120805483929061126c9084906116ff565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6000815180845260005b818110156112e9576020818501810151868301820152016112cd565b5060006020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b60208152600061133a60208301846112c3565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff8116811461136357600080fd5b50565b6000806040838503121561137957600080fd5b823561138481611341565b946020939093013593505050565b6000806000606084860312156113a757600080fd5b83356113b281611341565b925060208401356113c281611341565b929592945050506040919091013590565b6000602082840312156113e557600080fd5b5035919050565b6000602082840312156113fe57600080fd5b813561133a81611341565b6020810160038310611444577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000806040838503121561148c57600080fd5b823567ffffffffffffffff8111156114a357600080fd5b8301601f810185136114b457600080fd5b803567ffffffffffffffff8111156114ce576114ce61144a565b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8501160116810181811067ffffffffffffffff8211171561153a5761153a61144a565b60405281815282820160200187101561155257600080fd5b8160208401602083013760006020928201830152969401359450505050565b6000806040838503121561158457600080fd5b823561158f81611341565b9150602083013561159f81611341565b809150509250929050565b600181811c908216806115be57607f821691505b6020821081036115f7577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8181038181111561051a5761051a6115fd565b60408152600061165260408301856112c3565b90508260208301529392505050565b60006020828403121561167357600080fd5b8151801515811461133a57600080fd5b60808152600061169660808301876112c3565b6020830195909552506040810192909252606090910152919050565b6000602082840312156116c457600080fd5b815161133a81611341565b6000602082840312156116e157600080fd5b5051919050565b808202811582820484141761051a5761051a6115fd565b8082018082111561051a5761051a6115fd56fea26469706673582212204013e39523742118b3f2227e145ee7e48176ba6aebead33c596dca2acb59a74c64736f6c634300081a0033a2646970667358221220a6566454958d31271639e2bf5b458bd6f15dac7238c5c5b948b82e2268aed64264736f6c634300081a0033", + ABI: "[{\"type\":\"function\",\"name\":\"IS_TEST\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeArtifacts\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedArtifacts_\",\"type\":\"string[]\",\"internalType\":\"string[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeContracts\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedContracts_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeSelectors\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedSelectors_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzSelector[]\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"selectors\",\"type\":\"bytes4[]\",\"internalType\":\"bytes4[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeSenders\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedSenders_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"failed\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"setUp\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"targetArtifactSelectors\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedArtifactSelectors_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzArtifactSelector[]\",\"components\":[{\"name\":\"artifact\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"selectors\",\"type\":\"bytes4[]\",\"internalType\":\"bytes4[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetArtifacts\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedArtifacts_\",\"type\":\"string[]\",\"internalType\":\"string[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetContracts\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedContracts_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetInterfaces\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedInterfaces_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzInterface[]\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"artifacts\",\"type\":\"string[]\",\"internalType\":\"string[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetSelectors\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedSelectors_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzSelector[]\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"selectors\",\"type\":\"bytes4[]\",\"internalType\":\"bytes4[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetSenders\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedSenders_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"testCall\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testCallFailsIfReceiverIsZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawAndCallZRC20FailsIfAmountIsZero\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawAndCallZRC20FailsIfReceiverIsZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawAndcallZETAFailsIfAmountIsZero\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawZETA\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawZETAFailsIfAmountIsZero\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawZETAFailsIfNoAllowance\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawZETAFailsIfNoBalance\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawZETAWithMessage\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawZETAWithMessageFailsIfNoAllowance\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawZRC20\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawZRC20FailsIfNoAllowance\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawZRC20FailsIfNoBalanceForGasFee\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawZRC20FailsIfNoBalanceForTransfer\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawZRC20FailsIfReceiverIsZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawZRC20FailsIsAmountIs0\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawZRC20WithMessage\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawZRC20WithMessageFailsIfNoAllowance\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"event\",\"name\":\"Call\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"chainId\",\"type\":\"uint256\",\"indexed\":true,\"internalType\":\"uint256\"},{\"name\":\"receiver\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"message\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Withdrawal\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"chainId\",\"type\":\"uint256\",\"indexed\":true,\"internalType\":\"uint256\"},{\"name\":\"receiver\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"zrc20\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"gasfee\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"protocolFlatFee\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"message\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log\",\"inputs\":[{\"name\":\"\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_address\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_array\",\"inputs\":[{\"name\":\"val\",\"type\":\"uint256[]\",\"indexed\":false,\"internalType\":\"uint256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_array\",\"inputs\":[{\"name\":\"val\",\"type\":\"int256[]\",\"indexed\":false,\"internalType\":\"int256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_array\",\"inputs\":[{\"name\":\"val\",\"type\":\"address[]\",\"indexed\":false,\"internalType\":\"address[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_bytes\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_bytes32\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_int\",\"inputs\":[{\"name\":\"\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_address\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_array\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"uint256[]\",\"indexed\":false,\"internalType\":\"uint256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_array\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"int256[]\",\"indexed\":false,\"internalType\":\"int256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_array\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"address[]\",\"indexed\":false,\"internalType\":\"address[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_bytes\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_bytes32\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_decimal_int\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"},{\"name\":\"decimals\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_decimal_uint\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"decimals\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_int\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_string\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_uint\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_string\",\"inputs\":[{\"name\":\"\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_uint\",\"inputs\":[{\"name\":\"\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"logs\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"CallerIsNotFungibleModule\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"FailedZetaSent\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"GasFeeTransferFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientZRC20Amount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientZetaAmount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidTarget\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"LowBalance\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OnlyWZETAOrFungible\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"WithdrawalFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZRC20BurnFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZRC20DepositFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZRC20TransferFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZeroAddress\",\"inputs\":[]}]", + Bin: "0x6080604052600c8054600160ff199182168117909255601f80549091169091179055348015602c57600080fd5b5061df248061003c6000396000f3fe608060405234801561001057600080fd5b50600436106101f05760003560e01c806385226c811161010f578063bcc52b9a116100a2578063ea37902f11610071578063ea37902f14610331578063fa7626d414610339578063fbc611c814610346578063fdad0ad01461034e57600080fd5b8063bcc52b9a14610311578063ceccfab314610319578063dde7e96714610321578063e20c9f711461032957600080fd5b8063b7f05836116100de578063b7f05836146102e1578063ba414fa6146102e9578063ba800c9114610301578063ba9adeef1461030957600080fd5b806385226c81146102a7578063916a17c6146102bc578063b0464fdc146102d1578063b5508aa9146102d957600080fd5b806339cbb457116101875780635d72228f116101565780635d72228f1461027a5780636221b5091461028257806366d9a9a01461028a57806383ababa91461029f57600080fd5b806339cbb4571461025a5780633e5e3c23146102625780633f7286f41461026a5780635006fd801461027257600080fd5b80631ed7831c116101c35780631ed7831c1461021757806321aeb18c146102355780632ade38801461023d57806336431b3f1461025257600080fd5b80630a9254e4146101f55780631238212c146101ff57806318a4cfdc146102075780631e63d2b91461020f575b600080fd5b6101fd610356565b005b6101fd610dc3565b6101fd61118c565b6101fd6115e1565b61021f6119cd565b60405161022c91906189f3565b60405180910390f35b6101fd611a2f565b610245611b33565b60405161022c9190618a8f565b6101fd611c75565b6101fd611e1b565b61021f611f83565b61021f611fe3565b6101fd612043565b6101fd6124da565b6101fd612829565b610292612a2f565b60405161022c9190618bf5565b6101fd612bb1565b6102af612cac565b60405161022c9190618c93565b6102c4612d7c565b60405161022c9190618d0a565b6102c4612e77565b6102af612f72565b6101fd613042565b6102f161327f565b604051901515815260200161022c565b6101fd613353565b6101fd61347f565b6101fd613622565b6101fd613783565b6101fd613ab7565b61021f613ed7565b6101fd613f37565b601f546102f19060ff1681565b6101fd6142f3565b6101fd614666565b602580547fffffffffffffffffffffffff000000000000000000000000000000000000000090811630179091556026805490911661123417905560405161039c90618906565b604051809103906000f0801580156103b8573d6000803e3d6000fd5b50602280547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03928316908117909155604080518082018252600f81527f476174657761795a45564d2e736f6c00000000000000000000000000000000006020820152602554915160248101939093529216604482015261049c919060640160408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f485cc955000000000000000000000000000000000000000000000000000000001790526147f5565b601f80547fffffffffffffffffffffff0000000000000000000000000000000000000000ff166101006001600160a01b039384168102919091179182905560208054919092049092167fffffffffffffffffffffffff000000000000000000000000000000000000000090921682178155604080517f3ce4a5bc0000000000000000000000000000000000000000000000000000000081529051633ce4a5bc926004808401939192918290030181865afa15801561055e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105829190618da1565b602780547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03929092169190911790556040516105c690618913565b604051809103906000f0801580156105e2573d6000803e3d6000fd5b50602480547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039283161781556027546040517f06447d5600000000000000000000000000000000000000000000000000000000815292166004830152737109709ecfa91a80626ff3989d68f67f5b1dd12d916306447d569101600060405180830381600087803b15801561067e57600080fd5b505af1158015610692573d6000803e3d6000fd5b5050505060008060006040516106a790618920565b6001600160a01b03938416815291831660208301529091166040820152606001604051809103906000f0801580156106e3573d6000803e3d6000fd5b50602380547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039283169081179091556020546040516012936001938493600093919216906107399061892d565b61074896959493929190618dca565b604051809103906000f080158015610764573d6000803e3d6000fd5b50602180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039283169081179091556023546040517fee2815ba0000000000000000000000000000000000000000000000000000000081526001600482015260248101929092529091169063ee2815ba90604401600060405180830381600087803b1580156107fb57600080fd5b505af115801561080f573d6000803e3d6000fd5b50506023546040517fa7cb050700000000000000000000000000000000000000000000000000000000815260016004820181905260248201526001600160a01b03909116925063a7cb05079150604401600060405180830381600087803b15801561087957600080fd5b505af115801561088d573d6000803e3d6000fd5b50506027546040517fc88a5e6d0000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152633b9aca006024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c88a5e6d9150604401600060405180830381600087803b15801561090d57600080fd5b505af1158015610921573d6000803e3d6000fd5b50505050602260009054906101000a90046001600160a01b03166001600160a01b031663d0e30db0600a6040518263ffffffff1660e01b81526004016000604051808303818588803b15801561097657600080fd5b505af115801561098a573d6000803e3d6000fd5b50506022546020546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152600a60248201529116935063095ea7b3925060440190506020604051808303816000875af11580156109fe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a229190618ebf565b506021546025546040517f47e7ef240000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620186a060248201529116906347e7ef24906044016020604051808303816000875af1158015610a93573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ab79190618ebf565b507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b03166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610b1657600080fd5b505af1158015610b2a573d6000803e3d6000fd5b50506025546040517f06447d560000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506306447d569150602401600060405180830381600087803b158015610ba057600080fd5b505af1158015610bb4573d6000803e3d6000fd5b50506021546020546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620186a060248201529116925063095ea7b391506044016020604051808303816000875af1158015610c28573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c4c9190618ebf565b50602260009054906101000a90046001600160a01b03166001600160a01b031663d0e30db0600a6040518263ffffffff1660e01b81526004016000604051808303818588803b158015610c9e57600080fd5b505af1158015610cb2573d6000803e3d6000fd5b50506022546020546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152600a60248201529116935063095ea7b3925060440190506020604051808303816000875af1158015610d26573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d4a9190618ebf565b507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b03166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610da957600080fd5b505af1158015610dbd573d6000803e3d6000fd5b50505050565b6021546025546040516370a0823160e01b81526001600160a01b03918216600482015260019260009216906370a0823190602401602060405180830381865afa158015610e14573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e389190618ee1565b6025546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015610ead57600080fd5b505af1158015610ec1573d6000803e3d6000fd5b50506021546020546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152600060248201529116925063095ea7b391506044016020604051808303816000875af1158015610f33573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f579190618ebf565b506026546040516001600160a01b03909116602482015260009060440160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f84fae7600000000000000000000000000000000000000000000000000000000017905280517ff48448140000000000000000000000000000000000000000000000000000000081529051919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f48448149160048082019260009290919082900301818387803b15801561103357600080fd5b505af1158015611047573d6000803e3d6000fd5b50506020805460265460405160609190911b6bffffffffffffffffffffffff1916928101929092526001600160a01b03169250637993c1e0915060340160408051601f19818403018152908290526021547fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1683526110db9288916001600160a01b0316908790600401618efa565b600060405180830381600087803b1580156110f557600080fd5b505af1158015611109573d6000803e3d6000fd5b50506021546025546040516370a0823160e01b81526001600160a01b03918216600482015260009450911691506370a0823190602401602060405180830381865afa15801561115c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111809190618ee1565b9050610dbd8382614814565b6022546025546040516370a0823160e01b81526001600160a01b03918216600482015260019260009216906370a0823190602401602060405180830381865afa1580156111dd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112019190618ee1565b6022546020546040516370a0823160e01b81526001600160a01b0391821660048201529293506000929116906370a0823190602401602060405180830381865afa158015611253573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112779190618ee1565b6027546026546040516001600160a01b03918216602482015292935016319060009060440160408051601f19818403018152918152602080830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f84fae760000000000000000000000000000000000000000000000000000000001790525490517f81bad6f30000000000000000000000000000000000000000000000000000000081526001600482018190526024820181905260448201819052606482018190526001600160a01b03909216608482015291925090737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b15801561138657600080fd5b505af115801561139a573d6000803e3d6000fd5b505060255460275460405160609190911b6bffffffffffffffffffffffff191660208201528493506001600160a01b0390911691507fde19dbe881cc0aeeb6e73ce19ac7b5ca695e6be8a076e3eb42292005a7fec1b59060340160408051601f1981840301815290829052602254611426926001600160a01b03909116908c9060009081908b90618f34565b60405180910390a36020546040517f80bd3d030000000000000000000000000000000000000000000000000000000081526001600160a01b03909116906380bd3d039061147b90899085908790600401618f87565b600060405180830381600087803b15801561149557600080fd5b505af11580156114a9573d6000803e3d6000fd5b50506022546025546040516370a0823160e01b81526001600160a01b03918216600482015260009450911691506370a0823190602401602060405180830381865afa1580156114fc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115209190618ee1565b9050611536611530600188618fd5565b82614814565b6022546020546040516370a0823160e01b81526001600160a01b03918216600482015260009291909116906370a0823190602401602060405180830381865afa158015611587573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115ab9190618ee1565b90506115b78682614814565b6115d76115c5866001618fe8565b6027546001600160a01b031631614814565b5050505050505050565b6021546025546040516370a0823160e01b81526001600160a01b03918216600482015260019260009216906370a0823190602401602060405180830381865afa158015611632573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116569190618ee1565b6026546040516001600160a01b03909116602482015290915060009060440160408051601f19818403018152918152602080830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f84fae760000000000000000000000000000000000000000000000000000000001790525490517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b15801561175c57600080fd5b505af1158015611770573d6000803e3d6000fd5b505060255460265460405160609190911b6bffffffffffffffffffffffff19166020820152600093506001600160a01b0390911691507fde19dbe881cc0aeeb6e73ce19ac7b5ca695e6be8a076e3eb42292005a7fec1b59060340160408051601f198184030181528282526021547f4d8943bb000000000000000000000000000000000000000000000000000000008452915190926001600160a01b039092169189916000918491634d8943bb916004808201926020929091908290030181865afa158015611843573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118679190618ee1565b8860405161187a96959493929190618f34565b60405180910390a3602080546026546040516001600160a01b0392831693637993c1e0936118c29316910160609190911b6bffffffffffffffffffffffff1916815260140190565b60408051601f19818403018152908290526021547fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1683526119199288916001600160a01b0316908790600401618efa565b600060405180830381600087803b15801561193357600080fd5b505af1158015611947573d6000803e3d6000fd5b50506021546025546040516370a0823160e01b81526001600160a01b03918216600482015260009450911691506370a0823190602401602060405180830381865afa15801561199a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119be9190618ee1565b9050610dbd6115308585618fd5565b60606016805480602002602001604051908101604052809291908181526020018280548015611a2557602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311611a07575b5050505050905090565b6040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527f19c08f49000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b158015611ab457600080fd5b505af1158015611ac8573d6000803e3d6000fd5b50506020546040517f441a3e7000000000000000000000000000000000000000000000000000000000815260006004820152600160248201526001600160a01b03909116925063441a3e7091506044015b600060405180830381600087803b158015610da957600080fd5b6060601e805480602002602001604051908101604052809291908181526020016000905b82821015611c6c57600084815260208082206040805180820182526002870290920180546001600160a01b03168352600181018054835181870281018701909452808452939591948681019491929084015b82821015611c55578382906000526020600020018054611bc890618ffb565b80601f0160208091040260200160405190810160405280929190818152602001828054611bf490618ffb565b8015611c415780601f10611c1657610100808354040283529160200191611c41565b820191906000526020600020905b815481529060010190602001808311611c2457829003601f168201915b505050505081526020019060010190611ba9565b505050508152505081526020019060010190611b57565b50505050905090565b6026546040516001600160a01b03909116602482015260009060440160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f84fae76000000000000000000000000000000000000000000000000000000000179052517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fd92e233d000000000000000000000000000000000000000000000000000000006004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b158015611d6f57600080fd5b505af1158015611d83573d6000803e3d6000fd5b5050602080546040805160008152928301908190526021547f7993c1e0000000000000000000000000000000000000000000000000000000009091526001600160a01b039182169450637993c1e09350611de69291600191168660248401618efa565b600060405180830381600087803b158015611e0057600080fd5b505af1158015611e14573d6000803e3d6000fd5b5050505050565b6026546040516001600160a01b03909116602482015260009060440160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f84fae76000000000000000000000000000000000000000000000000000000000179052517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fd92e233d000000000000000000000000000000000000000000000000000000006004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b158015611f1557600080fd5b505af1158015611f29573d6000803e3d6000fd5b5050602080546040805160008152928301908190527f5d40e1780000000000000000000000000000000000000000000000000000000090526001600160a01b03169250635d40e1789150611de69060018560248301619048565b60606018805480602002602001604051908101604052809291908181526020018280548015611a25576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311611a07575050505050905090565b60606017805480602002602001604051908101604052809291908181526020018280548015611a25576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311611a07575050505050905090565b6022546025546040516370a0823160e01b81526001600160a01b03918216600482015260019260009216906370a0823190602401602060405180830381865afa158015612094573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120b89190618ee1565b6022546020546040516370a0823160e01b81526001600160a01b0391821660048201529293506000929116906370a0823190602401602060405180830381865afa15801561210a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061212e9190618ee1565b6027546026546040516001600160a01b03918216602482015292935016319060009060440160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f84fae7600000000000000000000000000000000000000000000000000000000017905260255490517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152909150600190737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561222257600080fd5b505af1158015612236573d6000803e3d6000fd5b50506022546020546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152600060248201529116925063095ea7b391506044016020604051808303816000875af11580156122a8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122cc9190618ebf565b507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b031663f48448146040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561232b57600080fd5b505af115801561233f573d6000803e3d6000fd5b50506020546040517f80bd3d030000000000000000000000000000000000000000000000000000000081526001600160a01b0390911692506380bd3d03915061239090899085908790600401618f87565b600060405180830381600087803b1580156123aa57600080fd5b505af11580156123be573d6000803e3d6000fd5b50506022546025546040516370a0823160e01b81526001600160a01b03918216600482015260009450911691506370a0823190602401602060405180830381865afa158015612411573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124359190618ee1565b90506124418682614814565b6022546020546040516370a0823160e01b81526001600160a01b03918216600482015260009291909116906370a0823190602401602060405180830381865afa158015612492573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124b69190618ee1565b90506124c28682614814565b6027546115d79086906001600160a01b031631614814565b6021546025546040516370a0823160e01b81526001600160a01b03918216600482015260019260009216906370a0823190602401602060405180830381865afa15801561252b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061254f9190618ee1565b6025546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156125c457600080fd5b505af11580156125d8573d6000803e3d6000fd5b50506021546020546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152600060248201529116925063095ea7b391506044016020604051808303816000875af115801561264a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061266e9190618ebf565b507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b031663f48448146040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156126cd57600080fd5b505af11580156126e1573d6000803e3d6000fd5b50506020805460265460405160609190911b6bffffffffffffffffffffffff1916928101929092526001600160a01b0316925063135390f9915060340160408051601f19818403018152908290526021547fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1683526127739287916001600160a01b031690600401619073565b600060405180830381600087803b15801561278d57600080fd5b505af11580156127a1573d6000803e3d6000fd5b50506021546025546040516370a0823160e01b81526001600160a01b03918216600482015260009450911691506370a0823190602401602060405180830381865afa1580156127f4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128189190618ee1565b90506128248282614814565b505050565b6022546025546040516370a0823160e01b81526001600160a01b03918216600482015260019260009216906370a0823190602401602060405180830381865afa15801561287a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061289e9190618ee1565b6022546040517fa9059cbb0000000000000000000000000000000000000000000000000000000081526101236004820152602481018390529192506001600160a01b03169063a9059cbb906044016020604051808303816000875af115801561290b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061292f9190618ebf565b506000600190507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b031663f48448146040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561299457600080fd5b505af11580156129a8573d6000803e3d6000fd5b50506020546040517f441a3e7000000000000000000000000000000000000000000000000000000000815260048101879052602481018590526001600160a01b03909116925063441a3e709150604401600060405180830381600087803b158015612a1257600080fd5b505af1158015612a26573d6000803e3d6000fd5b50505050505050565b6060601b805480602002602001604051908101604052809291908181526020016000905b82821015611c6c5783829060005260206000209060020201604051806040016040529081600082018054612a8690618ffb565b80601f0160208091040260200160405190810160405280929190818152602001828054612ab290618ffb565b8015612aff5780601f10612ad457610100808354040283529160200191612aff565b820191906000526020600020905b815481529060010190602001808311612ae257829003601f168201915b5050505050815260200160018201805480602002602001604051908101604052809291908181526020018280548015612b9957602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019060040190602082600301049283019260010382029150808411612b465790505b50505050508152505081526020019060010190612a53565b6040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b158015612c3657600080fd5b505af1158015612c4a573d6000803e3d6000fd5b5050602080546040805160008152928301908190526021547f135390f9000000000000000000000000000000000000000000000000000000009091526001600160a01b03918216945063135390f99350611b1992916001911660248301619073565b6060601a805480602002602001604051908101604052809291908181526020016000905b82821015611c6c578382906000526020600020018054612cef90618ffb565b80601f0160208091040260200160405190810160405280929190818152602001828054612d1b90618ffb565b8015612d685780601f10612d3d57610100808354040283529160200191612d68565b820191906000526020600020905b815481529060010190602001808311612d4b57829003601f168201915b505050505081526020019060010190612cd0565b6060601d805480602002602001604051908101604052809291908181526020016000905b82821015611c6c5760008481526020908190206040805180820182526002860290920180546001600160a01b03168352600181018054835181870281018701909452808452939491938583019392830182828015612e5f57602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019060040190602082600301049283019260010382029150808411612e0c5790505b50505050508152505081526020019060010190612da0565b6060601c805480602002602001604051908101604052809291908181526020016000905b82821015611c6c5760008481526020908190206040805180820182526002860290920180546001600160a01b03168352600181018054835181870281018701909452808452939491938583019392830182828015612f5a57602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019060040190602082600301049283019260010382029150808411612f075790505b50505050508152505081526020019060010190612e9b565b60606019805480602002602001604051908101604052809291908181526020016000905b82821015611c6c578382906000526020600020018054612fb590618ffb565b80601f0160208091040260200160405190810160405280929190818152602001828054612fe190618ffb565b801561302e5780601f106130035761010080835404028352916020019161302e565b820191906000526020600020905b81548152906001019060200180831161301157829003601f168201915b505050505081526020019060010190612f96565b6026546040516001600160a01b03909116602482015260009060440160408051601f19818403018152918152602080830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f84fae760000000000000000000000000000000000000000000000000000000001790525490517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b15801561314557600080fd5b505af1158015613159573d6000803e3d6000fd5b505060255460265460405160609190911b6bffffffffffffffffffffffff19166020820152600193508392506001600160a01b03909116907f5322ffbbf9261ff1f8138247942d2b03b28717141ef0a0dd080fc4be9c4e78d39060340160408051601f19818403018152908290526131d29187906190a5565b60405180910390a3602080546026546040516001600160a01b0392831693635d40e1789361321a9316910160609190911b6bffffffffffffffffffffffff1916815260140190565b60405160208183030381529060405283856040518463ffffffff1660e01b815260040161324993929190619048565b600060405180830381600087803b15801561326357600080fd5b505af1158015613277573d6000803e3d6000fd5b505050505050565b60085460009060ff1615613297575060085460ff1690565b6040517f667f9d70000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d600482018190527f6661696c65640000000000000000000000000000000000000000000000000000602483015260009163667f9d7090604401602060405180830381865afa158015613328573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061334c9190618ee1565b1415905090565b6040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527f5d67094f000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b1580156133d857600080fd5b505af11580156133ec573d6000803e3d6000fd5b50506020805460265460405160609190911b6bffffffffffffffffffffffff1916928101929092526001600160a01b0316925063135390f9915060340160408051601f19818403018152908290526021547fffffffff0000000000000000000000000000000000000000000000000000000060e085901b168352611b19926000916001600160a01b031690600401619073565b6026546040516001600160a01b03909116602482015260009060440160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f84fae76000000000000000000000000000000000000000000000000000000000179052517fc31eb0e00000000000000000000000000000000000000000000000000000000081527f5d67094f000000000000000000000000000000000000000000000000000000006004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b15801561357957600080fd5b505af115801561358d573d6000803e3d6000fd5b50506020805460265460405160609190911b6bffffffffffffffffffffffff1916928101929092526001600160a01b03169250637993c1e0915060340160408051601f19818403018152908290526021547fffffffff0000000000000000000000000000000000000000000000000000000060e085901b168352611de6926000916001600160a01b0316908790600401618efa565b6026546040516001600160a01b03909116602482015260009060440160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f84fae76000000000000000000000000000000000000000000000000000000000179052517fc31eb0e00000000000000000000000000000000000000000000000000000000081527f19c08f49000000000000000000000000000000000000000000000000000000006004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b15801561371c57600080fd5b505af1158015613730573d6000803e3d6000fd5b50506020546040517f80bd3d030000000000000000000000000000000000000000000000000000000081526001600160a01b0390911692506380bd3d039150611de6906000906001908690600401618f87565b6021546025546040516370a0823160e01b81526001600160a01b03918216600482015260019260009216906370a0823190602401602060405180830381865afa1580156137d4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137f89190618ee1565b6021546040517fa9059cbb0000000000000000000000000000000000000000000000000000000081526101236004820152602481018390529192506001600160a01b03169063a9059cbb906044016020604051808303816000875af1158015613865573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138899190618ebf565b506027546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156138fc57600080fd5b505af1158015613910573d6000803e3d6000fd5b50506021546040517ff687d12a000000000000000000000000000000000000000000000000000000008152600a60048201526001600160a01b03909116925063f687d12a9150602401600060405180830381600087803b15801561397357600080fd5b505af1158015613987573d6000803e3d6000fd5b50506040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527ffe382aa7000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e091506024015b600060405180830381600087803b158015613a1157600080fd5b505af1158015613a25573d6000803e3d6000fd5b50506020805460265460405160609190911b6bffffffffffffffffffffffff1916928101929092526001600160a01b0316925063135390f9915060340160408051601f19818403018152908290526021547fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1683526132499287916001600160a01b031690600401619073565b6022546025546040516370a0823160e01b81526001600160a01b03918216600482015260019260009216906370a0823190602401602060405180830381865afa158015613b08573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b2c9190618ee1565b6022546020546040516370a0823160e01b81526001600160a01b0391821660048201529293506000929116906370a0823190602401602060405180830381865afa158015613b7e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613ba29190618ee1565b6027546025546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152929350163190600190737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015613c2057600080fd5b505af1158015613c34573d6000803e3d6000fd5b50506022546020546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152600060248201529116925063095ea7b391506044016020604051808303816000875af1158015613ca6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613cca9190618ebf565b507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b031663f48448146040518163ffffffff1660e01b8152600401600060405180830381600087803b158015613d2957600080fd5b505af1158015613d3d573d6000803e3d6000fd5b50506020546040517f441a3e7000000000000000000000000000000000000000000000000000000000815260048101899052602481018590526001600160a01b03909116925063441a3e709150604401600060405180830381600087803b158015613da757600080fd5b505af1158015613dbb573d6000803e3d6000fd5b50506022546025546040516370a0823160e01b81526001600160a01b03918216600482015260009450911691506370a0823190602401602060405180830381865afa158015613e0e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613e329190618ee1565b9050613e3e8582614814565b6022546020546040516370a0823160e01b81526001600160a01b03918216600482015260009291909116906370a0823190602401602060405180830381865afa158015613e8f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613eb39190618ee1565b9050613ebf8582614814565b602754612a269085906001600160a01b031631614814565b60606015805480602002602001604051908101604052809291908181526020018280548015611a25576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311611a07575050505050905090565b6022546025546040516370a0823160e01b81526001600160a01b03918216600482015260019260009216906370a0823190602401602060405180830381865afa158015613f88573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613fac9190618ee1565b6022546020546040516370a0823160e01b81526001600160a01b0391821660048201529293506000929116906370a0823190602401602060405180830381865afa158015613ffe573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906140229190618ee1565b6027546020546040517f81bad6f30000000000000000000000000000000000000000000000000000000081526001600482018190526024820181905260448201819052606482018190526001600160a01b0392831660848301529394509116319190737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b1580156140bd57600080fd5b505af11580156140d1573d6000803e3d6000fd5b505060255460275460405160609190911b6bffffffffffffffffffffffff191660208201528493506001600160a01b0390911691507fde19dbe881cc0aeeb6e73ce19ac7b5ca695e6be8a076e3eb42292005a7fec1b59060340160408051601f198184030181529082905260225461415b926001600160a01b03909116908b9060009081906190ca565b60405180910390a36020546040517f441a3e7000000000000000000000000000000000000000000000000000000000815260048101879052602481018390526001600160a01b039091169063441a3e7090604401600060405180830381600087803b1580156141c957600080fd5b505af11580156141dd573d6000803e3d6000fd5b50506022546025546040516370a0823160e01b81526001600160a01b03918216600482015260009450911691506370a0823190602401602060405180830381865afa158015614230573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906142549190618ee1565b9050614264611530600187618fd5565b6022546020546040516370a0823160e01b81526001600160a01b03918216600482015260009291909116906370a0823190602401602060405180830381865afa1580156142b5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906142d99190618ee1565b90506142e58582614814565b612a266115c5856001618fe8565b6021546025546040516370a0823160e01b81526001600160a01b03918216600482015260019260009216906370a0823190602401602060405180830381865afa158015614344573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906143689190618ee1565b6020546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b1580156143f957600080fd5b505af115801561440d573d6000803e3d6000fd5b505060255460265460405160609190911b6bffffffffffffffffffffffff19166020820152600093506001600160a01b0390911691507fde19dbe881cc0aeeb6e73ce19ac7b5ca695e6be8a076e3eb42292005a7fec1b59060340160408051601f198184030181528282526021547f4d8943bb000000000000000000000000000000000000000000000000000000008452915190926001600160a01b039092169188916000918491634d8943bb916004808201926020929091908290030181865afa1580156144e0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906145049190618ee1565b6040516145159594939291906190ca565b60405180910390a3602080546026546040516001600160a01b039283169363135390f99361455d9316910160609190911b6bffffffffffffffffffffffff1916815260140190565b60408051601f19818403018152908290526021547fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1683526145b29287916001600160a01b031690600401619073565b600060405180830381600087803b1580156145cc57600080fd5b505af11580156145e0573d6000803e3d6000fd5b50506021546025546040516370a0823160e01b81526001600160a01b03918216600482015260009450911691506370a0823190602401602060405180830381865afa158015614633573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906146579190618ee1565b90506128246115308484618fd5565b6021546025546040516370a0823160e01b81526001600160a01b03918216600482015260029260009216906370a0823190602401602060405180830381865afa1580156146b7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906146db9190618ee1565b6021549091506001600160a01b031663a9059cbb6101236146fd600185618fd5565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303816000875af1158015614760573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906147849190618ebf565b506040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527ffe382aa7000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e0906024016139f7565b60006147ff61893a565b61480a848483614893565b9150505b92915050565b6040517f98296c540000000000000000000000000000000000000000000000000000000081526004810183905260248101829052737109709ecfa91a80626ff3989d68f67f5b1dd12d906398296c549060440160006040518083038186803b15801561487f57600080fd5b505afa158015613277573d6000803e3d6000fd5b6000806148a0858461490e565b90506149036040518060400160405280601d81526020017f4552433139363750726f78792e736f6c3a4552433139363750726f787900000081525082866040516020016148ee92919061911b565b6040516020818303038152906040528561491a565b9150505b9392505050565b60006149078383614948565b60c0810151516000901561493e5761493784848460c00151614963565b9050614907565b6149378484614b09565b60006149548383614bf4565b6149078383602001518461491a565b60008061496e614c04565b9050600061497c8683614cd7565b90506000614993826060015183602001518561517d565b905060006149a38383898961538f565b905060006149b08261620c565b602081015181519192509060030b15614a23578982604001516040516020016149da92919061913d565b60408051601f19818403018152908290527f08c379a0000000000000000000000000000000000000000000000000000000008252614a1a916004016191be565b60405180910390fd5b6000614a666040518060400160405280601581526020017f4465706c6f79656420746f20616464726573733a2000000000000000000000008152508360016163db565b6040517fc6ce059d000000000000000000000000000000000000000000000000000000008152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c6ce059d90614ab99084906004016191be565b602060405180830381865afa158015614ad6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614afa9190618da1565b9b9a5050505050505050505050565b6040517f8d1cc9250000000000000000000000000000000000000000000000000000000081526000908190737109709ecfa91a80626ff3989d68f67f5b1dd12d90638d1cc92590614b5e9087906004016191be565b600060405180830381865afa158015614b7b573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052614ba391908101906192b9565b90506000614bd18285604051602001614bbd9291906192ee565b6040516020818303038152906040526165db565b90506001600160a01b03811661480a5784846040516020016149da92919061931d565b614c00828260006165ee565b5050565b604080518082018252600381527f6f75740000000000000000000000000000000000000000000000000000000000602082015290517fd145736c000000000000000000000000000000000000000000000000000000008152606091737109709ecfa91a80626ff3989d68f67f5b1dd12d91829063d145736c90614c8b9084906004016193c8565b600060405180830381865afa158015614ca8573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052614cd0919081019061940f565b9250505090565b614d096040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b6000737109709ecfa91a80626ff3989d68f67f5b1dd12d9050614d546040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b614d5d856166f1565b60208201526000614d6d86616ad6565b90506000836001600160a01b031663d930a0e66040518163ffffffff1660e01b8152600401600060405180830381865afa158015614daf573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052614dd7919081019061940f565b86838560200151604051602001614df19493929190619458565b60408051601f19818403018152908290527f60f9bb1100000000000000000000000000000000000000000000000000000000825291506000906001600160a01b038616906360f9bb1190614e499085906004016191be565b600060405180830381865afa158015614e66573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052614e8e919081019061940f565b6040517fdb4235f60000000000000000000000000000000000000000000000000000000081529091506001600160a01b0386169063db4235f690614ed690849060040161955c565b602060405180830381865afa158015614ef3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614f179190618ebf565b614f2c57816040516020016149da91906195ae565b6040517f49c4fac80000000000000000000000000000000000000000000000000000000081526001600160a01b038616906349c4fac890614f71908490600401619640565b600060405180830381865afa158015614f8e573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052614fb6919081019061940f565b84526040517fdb4235f60000000000000000000000000000000000000000000000000000000081526001600160a01b0386169063db4235f690614ffd908490600401619692565b602060405180830381865afa15801561501a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061503e9190618ebf565b156150d3576040517f49c4fac80000000000000000000000000000000000000000000000000000000081526001600160a01b038616906349c4fac890615088908490600401619692565b600060405180830381865afa1580156150a5573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526150cd919081019061940f565b60408501525b846001600160a01b03166349c4fac88286600001516040516020016150f891906196e4565b6040516020818303038152906040526040518363ffffffff1660e01b81526004016151249291906190a5565b600060405180830381865afa158015615141573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052615169919081019061940f565b606085015250608083015250949350505050565b60408051600480825260a0820190925260609160009190816020015b60608152602001906001900390816151995790505090506040518060400160405280600481526020017f6772657000000000000000000000000000000000000000000000000000000000815250816000815181106151f9576151f9619750565b60200260200101819052506040518060400160405280600381526020017f2d726c00000000000000000000000000000000000000000000000000000000008152508160018151811061524d5761524d619750565b602002602001018190525084604051602001615269919061977f565b6040516020818303038152906040528160028151811061528b5761528b619750565b6020026020010181905250826040516020016152a791906197eb565b604051602081830303815290604052816003815181106152c9576152c9619750565b602002602001018190525060006152df8261620c565b602080820151604080518082018252600581527f2e6a736f6e00000000000000000000000000000000000000000000000000000081850190815282518084018452600080825290860152825180840190935290518252928101929092529192506153709060408051808201825260008082526020918201528151808301909252845182528085019082015290616d59565b61538557856040516020016149da919061982c565b9695505050505050565b60a0810151604080518082018252600080825260209182015281518083019092528251808352928101910152606090737109709ecfa91a80626ff3989d68f67f5b1dd12d90156153df565b511590565b6155535782602001511561549b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605860248201527f54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f742060448201527f62652075736564207768656e207468652060736b6970566572696679536f757260648201527f6365436f646560206f7074696f6e206973206074727565600000000000000000608482015260a401614a1a565b8260c0015115615553576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605360248201527f54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f742060448201527f62652075736564207768656e207468652060736b69704c6963656e736554797060648201527f6560206f7074696f6e2069732060747275656000000000000000000000000000608482015260a401614a1a565b6040805160ff8082526120008201909252600091816020015b606081526020019060019003908161556c57905050905060006040518060400160405280600381526020017f6e707800000000000000000000000000000000000000000000000000000000008152508282806155c7906198bd565b935060ff16815181106155dc576155dc619750565b60200260200101819052506040518060400160405280600d81526020017f302e302e312d616c7068612e370000000000000000000000000000000000000081525060405160200161562d91906198dc565b604051602081830303815290604052828280615648906198bd565b935060ff168151811061565d5761565d619750565b60200260200101819052506040518060400160405280600681526020017f6465706c6f7900000000000000000000000000000000000000000000000000008152508282806156aa906198bd565b935060ff16815181106156bf576156bf619750565b60200260200101819052506040518060400160405280600e81526020017f2d2d636f6e74726163744e616d6500000000000000000000000000000000000081525082828061570c906198bd565b935060ff168151811061572157615721619750565b6020026020010181905250876020015182828061573d906198bd565b935060ff168151811061575257615752619750565b60200260200101819052506040518060400160405280600e81526020017f2d2d636f6e74726163745061746800000000000000000000000000000000000081525082828061579f906198bd565b935060ff16815181106157b4576157b4619750565b6020908102919091010152875182826157cc816198bd565b935060ff16815181106157e1576157e1619750565b60200260200101819052506040518060400160405280600981526020017f2d2d636861696e4964000000000000000000000000000000000000000000000081525082828061582e906198bd565b935060ff168151811061584357615843619750565b602002602001018190525061585746616dba565b8282615862816198bd565b935060ff168151811061587757615877619750565b60200260200101819052506040518060400160405280600f81526020017f2d2d6275696c64496e666f46696c6500000000000000000000000000000000008152508282806158c4906198bd565b935060ff16815181106158d9576158d9619750565b6020026020010181905250868282806158f1906198bd565b935060ff168151811061590657615906619750565b6020908102919091010152855115615a2d5760408051808201909152601581527f2d2d636f6e7374727563746f7242797465636f6465000000000000000000000060208201528282615957816198bd565b935060ff168151811061596c5761596c619750565b60209081029190910101526040517f71aad10d0000000000000000000000000000000000000000000000000000000081526001600160a01b038416906371aad10d906159bc9089906004016191be565b600060405180830381865afa1580156159d9573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052615a01919081019061940f565b8282615a0c816198bd565b935060ff1681518110615a2157615a21619750565b60200260200101819052505b846020015115615afd5760408051808201909152601281527f2d2d766572696679536f75726365436f6465000000000000000000000000000060208201528282615a76816198bd565b935060ff1681518110615a8b57615a8b619750565b60200260200101819052506040518060400160405280600581526020017f66616c7365000000000000000000000000000000000000000000000000000000815250828280615ad8906198bd565b935060ff1681518110615aed57615aed619750565b6020026020010181905250615cc4565b615b356153da8660a0015160408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b615bc85760408051808201909152600d81527f2d2d6c6963656e7365547970650000000000000000000000000000000000000060208201528282615b78816198bd565b935060ff1681518110615b8d57615b8d619750565b60200260200101819052508460a00151604051602001615bad919061977f565b604051602081830303815290604052828280615ad8906198bd565b8460c00151158015615c0b575060408089015181518083018352600080825260209182015282518084019093528151835290810190820152615c0990511590565b155b15615cc45760408051808201909152600d81527f2d2d6c6963656e7365547970650000000000000000000000000000000000000060208201528282615c4f816198bd565b935060ff1681518110615c6457615c64619750565b6020026020010181905250615c7888616e5a565b604051602001615c88919061977f565b604051602081830303815290604052828280615ca3906198bd565b935060ff1681518110615cb857615cb8619750565b60200260200101819052505b60408086015181518083018352600080825260209182015282518084019093528151835290810190820152615cf890511590565b615d8d5760408051808201909152600b81527f2d2d72656c61796572496400000000000000000000000000000000000000000060208201528282615d3b816198bd565b935060ff1681518110615d5057615d50619750565b60200260200101819052508460400151828280615d6c906198bd565b935060ff1681518110615d8157615d81619750565b60200260200101819052505b606085015115615eae5760408051808201909152600681527f2d2d73616c74000000000000000000000000000000000000000000000000000060208201528282615dd6816198bd565b935060ff1681518110615deb57615deb619750565b602090810291909101015260608501516040517fb11a19e800000000000000000000000000000000000000000000000000000000815260048101919091526001600160a01b0384169063b11a19e890602401600060405180830381865afa158015615e5a573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052615e82919081019061940f565b8282615e8d816198bd565b935060ff1681518110615ea257615ea2619750565b60200260200101819052505b60e08501515115615f555760408051808201909152600a81527f2d2d6761734c696d69740000000000000000000000000000000000000000000060208201528282615ef8816198bd565b935060ff1681518110615f0d57615f0d619750565b6020026020010181905250615f298560e0015160000151616dba565b8282615f34816198bd565b935060ff1681518110615f4957615f49619750565b60200260200101819052505b60e08501516020015115615fff5760408051808201909152600a81527f2d2d67617350726963650000000000000000000000000000000000000000000060208201528282615fa2816198bd565b935060ff1681518110615fb757615fb7619750565b6020026020010181905250615fd38560e0015160200151616dba565b8282615fde816198bd565b935060ff1681518110615ff357615ff3619750565b60200260200101819052505b60e085015160400151156160a95760408051808201909152600e81527f2d2d6d61784665655065724761730000000000000000000000000000000000006020820152828261604c816198bd565b935060ff168151811061606157616061619750565b602002602001018190525061607d8560e0015160400151616dba565b8282616088816198bd565b935060ff168151811061609d5761609d619750565b60200260200101819052505b60e085015160600151156161535760408051808201909152601681527f2d2d6d61785072696f7269747946656550657247617300000000000000000000602082015282826160f6816198bd565b935060ff168151811061610b5761610b619750565b60200260200101819052506161278560e0015160600151616dba565b8282616132816198bd565b935060ff168151811061614757616147619750565b60200260200101819052505b60008160ff1667ffffffffffffffff811115616171576161716191d1565b6040519080825280602002602001820160405280156161a457816020015b606081526020019060019003908161618f5790505b50905060005b8260ff168160ff1610156161fd57838160ff16815181106161cd576161cd619750565b6020026020010151828260ff16815181106161ea576161ea619750565b60209081029190910101526001016161aa565b5093505050505b949350505050565b6162336040518060600160405280600060030b815260200160608152602001606081525090565b60408051808201825260048082527f6261736800000000000000000000000000000000000000000000000000000000602083015291517fd145736c000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d92600091849163d145736c916162b991869101619947565b600060405180830381865afa1580156162d6573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526162fe919081019061940f565b9050600061630c8683617949565b90506000846001600160a01b031663f45c1ce7836040518263ffffffff1660e01b815260040161633c9190618c93565b6000604051808303816000875af115801561635b573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052616383919081019061998e565b805190915060030b1580159061639c5750602081015151155b80156163ab5750604081015151155b1561538557816000815181106163c3576163c3619750565b60200260200101516040516020016149da9190619a44565b606060006164108560408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6040805180820182526000808252602091820152815180830190925286518252808701908201529091506164479082905b90617a9e565b156165a45760006164c4826164be846164b861648a8a60408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6040805180820182526000808252602091820152815180830190925282518252918201519181019190915290565b90617ac5565b90617b27565b604080518082018252600181527f0a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152909150616528908290617a9e565b1561659257604080518082018252600181527f0a000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261658f905b8290617bac565b90505b61659b81617bd2565b92505050614907565b82156165bd5784846040516020016149da929190619c30565b5050604080516020810190915260008152614907565b509392505050565b6000808251602084016000f09392505050565b8160a00151156165fd57505050565b600061660a848484617c3b565b905060006166178261620c565b602081015181519192509060030b1580156166b35750604080518082018252600781527f5355434345535300000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526166b390604080518082018252600080825260209182015281518083019092528451825280850190820152616441565b156166c057505050505050565b604082015151156166e05781604001516040516020016149da9190619cd7565b806040516020016149da9190619d35565b606060006167268360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600481527f2e736f6c000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015290915061678b905b8290616d59565b156167fa57604080518082018252600481527f2e736f6c0000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152614907906167f59083906181d6565b617bd2565b604080518082018252600181527f3a000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261685c905b8290618260565b60010361692957604080518082018252600181527f3a00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526168c290616588565b50604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152614907906167f5905b8390617bac565b604080518082018252600581527f2e6a736f6e0000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261698890616784565b15616abf57604080518082018252600181527f2f000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201819052845180860190955292518452830152906169f09083906182fa565b905060008160018351616a039190618fd5565b81518110616a1357616a13619750565b60200260200101519050616ab66167f5616a896040518060400160405280600581526020017f2e6a736f6e00000000000000000000000000000000000000000000000000000081525060408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600080825260209182015281518083019092528551825280860190820152906181d6565b95945050505050565b826040516020016149da9190619da0565b50919050565b60606000616b0b8360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600481527f2e736f6c0000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152909150616b6d90616784565b15616b7b5761490781617bd2565b604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616bda90616855565b600103616c4457604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152614907906167f590616922565b604080518082018252600581527f2e6a736f6e00000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616ca390616784565b15616abf57604080518082018252600181527f2f00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820181905284518086019095529251845283015290616d0b9083906182fa565b9050600181511115616d47578060028251616d269190618fd5565b81518110616d3657616d36619750565b602002602001015192505050919050565b50826040516020016149da9190619da0565b805182516000911115616d6e5750600061480e565b81518351602085015160009291616d8491618fe8565b616d8e9190618fd5565b905082602001518103616da557600191505061480e565b82516020840151819020912014905092915050565b60606000616dc78361839f565b600101905060008167ffffffffffffffff811115616de757616de76191d1565b6040519080825280601f01601f191660200182016040528015616e11576020820181803683370190505b5090508181016020015b600019017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a8504945084616e1b57509392505050565b604081810151815180830183526000808252602091820181905283518085018552835181529282018383015283518085018552600a81527f554e4c4943454e5345440000000000000000000000000000000000000000000081840190815285518087018752838152840192909252845180860190955251845290830152606091616ee6905b8290618481565b15616f2657505060408051808201909152600481527f4e6f6e65000000000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600981527f556e6c6963656e7365000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616f8590616edf565b15616fc557505060408051808201909152600981527f556e6c6963656e736500000000000000000000000000000000000000000000006020820152919050565b604080518082018252600381527f4d495400000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261702490616edf565b1561706457505060408051808201909152600381527f4d495400000000000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f47504c2d322e302d6f6e6c790000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526170c390616edf565b806171285750604080518082018252601081527f47504c2d322e302d6f722d6c61746572000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261712890616edf565b1561716857505060408051808201909152600981527f474e552047504c763200000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f47504c2d332e302d6f6e6c790000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526171c790616edf565b8061722c5750604080518082018252601081527f47504c2d332e302d6f722d6c61746572000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261722c90616edf565b1561726c57505060408051808201909152600981527f474e552047504c763300000000000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4c47504c2d322e312d6f6e6c7900000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526172cb90616edf565b806173305750604080518082018252601181527f4c47504c2d322e312d6f722d6c617465720000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261733090616edf565b1561737057505060408051808201909152600c81527f474e55204c47504c76322e3100000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4c47504c2d332e302d6f6e6c7900000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526173cf90616edf565b806174345750604080518082018252601181527f4c47504c2d332e302d6f722d6c617465720000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261743490616edf565b1561747457505060408051808201909152600a81527f474e55204c47504c7633000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f4253442d322d436c617573650000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526174d390616edf565b1561751357505060408051808201909152600c81527f4253442d322d436c6175736500000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f4253442d332d436c6175736500000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261757290616edf565b156175b257505060408051808201909152600c81527f4253442d332d436c6175736500000000000000000000000000000000000000006020820152919050565b604080518082018252600781527f4d504c2d322e30000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261761190616edf565b1561765157505060408051808201909152600781527f4d504c2d322e30000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600781527f4f534c2d332e3000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526176b090616edf565b156176f057505060408051808201909152600781527f4f534c2d332e30000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600a81527f4170616368652d322e30000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261774f90616edf565b1561778f57505060408051808201909152600a81527f4170616368652d322e30000000000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4147504c2d332e302d6f6e6c7900000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526177ee90616edf565b806178535750604080518082018252601181527f4147504c2d332e302d6f722d6c617465720000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261785390616edf565b1561789357505060408051808201909152600a81527f474e55204147504c7633000000000000000000000000000000000000000000006020820152919050565b604080518082018252600881527f4255534c2d312e31000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526178f290616edf565b1561793257505060408051808201909152600781527f42534c20312e31000000000000000000000000000000000000000000000000006020820152919050565b604080840151845191516149da9290602001619e7e565b60608060005b84518110156179d4578185828151811061796b5761796b619750565b60200260200101516040516020016179849291906192ee565b6040516020818303038152906040529150600185516179a39190618fd5565b81146179cc57816040516020016179ba9190619fe7565b60405160208183030381529060405291505b60010161794f565b5060408051600380825260808201909252600091816020015b60608152602001906001900390816179ed5790505090508381600081518110617a1857617a18619750565b60200260200101819052506040518060400160405280600281526020017f2d6300000000000000000000000000000000000000000000000000000000000081525081600181518110617a6c57617a6c619750565b60200260200101819052508181600281518110617a8b57617a8b619750565b6020908102919091010152949350505050565b6020808301518351835192840151600093617abc9291849190618495565b14159392505050565b60408051808201909152600080825260208201526000617af784600001518560200151856000015186602001516185a6565b9050836020015181617b099190618fd5565b84518590617b18908390618fd5565b90525060208401525090919050565b6040805180820190915260008082526020820152815183511015617b4c57508161480e565b6020808301519084015160019114617b735750815160208481015190840151829020919020145b8015617ba457825184518590617b8a908390618fd5565b9052508251602085018051617ba0908390618fe8565b9052505b509192915050565b6040805180820190915260008082526020820152617bcb8383836186c6565b5092915050565b60606000826000015167ffffffffffffffff811115617bf357617bf36191d1565b6040519080825280601f01601f191660200182016040528015617c1d576020820181803683370190505b5090506000602082019050617bcb8185602001518660000151618771565b60606000617c47614c04565b6040805160ff808252612000820190925291925060009190816020015b6060815260200190600190039081617c6457905050905060006040518060400160405280600381526020017f6e70780000000000000000000000000000000000000000000000000000000000815250828280617cbf906198bd565b935060ff1681518110617cd457617cd4619750565b60200260200101819052506040518060400160405280600781526020017f5e312e33322e3300000000000000000000000000000000000000000000000000815250604051602001617d25919061a028565b604051602081830303815290604052828280617d40906198bd565b935060ff1681518110617d5557617d55619750565b60200260200101819052506040518060400160405280600881526020017f76616c6964617465000000000000000000000000000000000000000000000000815250828280617da2906198bd565b935060ff1681518110617db757617db7619750565b602002602001018190525082604051602001617dd391906197eb565b604051602081830303815290604052828280617dee906198bd565b935060ff1681518110617e0357617e03619750565b60200260200101819052506040518060400160405280600a81526020017f2d2d636f6e747261637400000000000000000000000000000000000000000000815250828280617e50906198bd565b935060ff1681518110617e6557617e65619750565b6020026020010181905250617e7a87846187eb565b8282617e85816198bd565b935060ff1681518110617e9a57617e9a619750565b602090810291909101015285515115617f465760408051808201909152600b81527f2d2d7265666572656e636500000000000000000000000000000000000000000060208201528282617eec816198bd565b935060ff1681518110617f0157617f01619750565b6020026020010181905250617f1a8660000151846187eb565b8282617f25816198bd565b935060ff1681518110617f3a57617f3a619750565b60200260200101819052505b856080015115617fb45760408051808201909152601881527f2d2d756e73616665536b697053746f72616765436865636b000000000000000060208201528282617f8f816198bd565b935060ff1681518110617fa457617fa4619750565b602002602001018190525061801a565b841561801a5760408051808201909152601281527f2d2d726571756972655265666572656e6365000000000000000000000000000060208201528282617ff9816198bd565b935060ff168151811061800e5761800e619750565b60200260200101819052505b604086015151156180b65760408051808201909152600d81527f2d2d756e73616665416c6c6f770000000000000000000000000000000000000060208201528282618064816198bd565b935060ff168151811061807957618079619750565b60200260200101819052508560400151828280618095906198bd565b935060ff16815181106180aa576180aa619750565b60200260200101819052505b8560600151156181205760408051808201909152601481527f2d2d756e73616665416c6c6f7752656e616d6573000000000000000000000000602082015282826180ff816198bd565b935060ff168151811061811457618114619750565b60200260200101819052505b60008160ff1667ffffffffffffffff81111561813e5761813e6191d1565b60405190808252806020026020018201604052801561817157816020015b606081526020019060019003908161815c5790505b50905060005b8260ff168160ff1610156181ca57838160ff168151811061819a5761819a619750565b6020026020010151828260ff16815181106181b7576181b7619750565b6020908102919091010152600101618177565b50979650505050505050565b60408051808201909152600080825260208201528151835110156181fb57508161480e565b8151835160208501516000929161821191618fe8565b61821b9190618fd5565b6020840151909150600190821461823c575082516020840151819020908220145b801561825757835185518690618253908390618fd5565b9052505b50929392505050565b600080826000015161828485600001518660200151866000015187602001516185a6565b61828e9190618fe8565b90505b835160208501516182a29190618fe8565b8111617bcb57816182b28161a06d565b92505082600001516182e98560200151836182cd9190618fd5565b86516182d99190618fd5565b83866000015187602001516185a6565b6182f39190618fe8565b9050618291565b606060006183088484618260565b618313906001618fe8565b67ffffffffffffffff81111561832b5761832b6191d1565b60405190808252806020026020018201604052801561835e57816020015b60608152602001906001900390816183495790505b50905060005b81518110156165d35761837a6167f58686617bac565b82828151811061838c5761838c619750565b6020908102919091010152600101618364565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f01000000000000000083106183e8577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310618414576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc10000831061843257662386f26fc10000830492506010015b6305f5e100831061844a576305f5e100830492506008015b612710831061845e57612710830492506004015b60648310618470576064830492506002015b600a831061480e5760010192915050565b600061848d838361882b565b159392505050565b60008085841161859c576020841161854857600084156184e05760016184bc866020618fd5565b6184c790600861a087565b6184d290600261a185565b6184dc9190618fd5565b1990505b83518116856184ef8989618fe8565b6184f99190618fd5565b805190935082165b8181146185335787841161851b5787945050505050616204565b836185258161a191565b945050828451169050618501565b61853d8785618fe8565b945050505050616204565b8383206185558588618fd5565b61855f9087618fe8565b91505b85821061859a578482208082036185875761857d8684618fe8565b9350505050616204565b618592600184618fd5565b925050618562565b505b5092949350505050565b600083818685116186b1576020851161866057600085156185f25760016185ce876020618fd5565b6185d990600861a087565b6185e490600261a185565b6185ee9190618fd5565b1990505b845181166000876186038b8b618fe8565b61860d9190618fd5565b855190915083165b8281146186525781861061863a5761862d8b8b618fe8565b9650505050505050616204565b856186448161a06d565b965050838651169050618615565b859650505050505050616204565b508383206000905b6186728689618fd5565b82116186af5785832080820361868e5783945050505050616204565b618699600185618fe8565b93505081806186a79061a06d565b925050618668565b505b6186bb8787618fe8565b979650505050505050565b604080518082019091526000808252602082015260006186f885600001518660200151866000015187602001516185a6565b6020808701805191860191909152519091506187149082618fd5565b8352845160208601516187279190618fe8565b81036187365760008552618768565b835183516187449190618fe8565b85518690618753908390618fd5565b90525083516187629082618fe8565b60208601525b50909392505050565b602081106187a95781518352618788602084618fe8565b9250618795602083618fe8565b91506187a2602082618fd5565b9050618771565b60001981156187d85760016187bf836020618fd5565b6187cb9061010061a185565b6187d59190618fd5565b90505b9151835183169219169190911790915250565b606060006187f98484614cd7565b80516020808301516040519394506188139390910161a1a8565b60405160208183030381529060405291505092915050565b815181516000919081111561883e575081515b6020808501519084015160005b838110156188f757825182518082146188c75760001960208710156188a657600184618878896020618fd5565b6188829190618fe8565b61888d90600861a087565b61889890600261a185565b6188a29190618fd5565b1990505b81811683821681810391146188c457975061480e9650505050505050565b50505b6188d2602086618fe8565b94506188df602085618fe8565b935050506020816188f09190618fe8565b905061884b565b5084518651615385919061a200565b610b678061a22183390190565b61053f8061ad8883390190565b61106f8061b2c783390190565b611bb98061c33683390190565b6040518060e0016040528060608152602001606081526020016060815260200160001515815260200160001515815260200160001515815260200161897d618982565b905290565b6040518061010001604052806000151581526020016000151581526020016060815260200160008019168152602001606081526020016060815260200160001515815260200161897d6040518060800160405280600081526020016000815260200160008152602001600081525090565b602080825282518282018190526000918401906040840190835b81811015618a345783516001600160a01b0316835260209384019390920191600101618a0d565b509095945050505050565b60005b83811015618a5a578181015183820152602001618a42565b50506000910152565b60008151808452618a7b816020860160208601618a3f565b601f01601f19169290920160200192915050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015618b8b577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452815180516001600160a01b03168652602090810151604082880181905281519088018190529101906060600582901b88018101919088019060005b81811015618b71577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa08a8503018352618b5b848651618a63565b6020958601959094509290920191600101618b21565b509197505050602094850194929092019150600101618ab7565b50929695505050505050565b600081518084526020840193506020830160005b82811015618beb5781517fffffffff0000000000000000000000000000000000000000000000000000000016865260209586019590910190600101618bab565b5093949350505050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015618b8b577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08786030184528151805160408752618c616040880182618a63565b9050602082015191508681036020880152618c7c8183618b97565b965050506020938401939190910190600101618c1d565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015618b8b577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452618cf5858351618a63565b94506020938401939190910190600101618cbb565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015618b8b577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc087860301845281516001600160a01b0381511686526020810151905060406020870152618d8b6040870182618b97565b9550506020938401939190910190600101618d32565b600060208284031215618db357600080fd5b81516001600160a01b038116811461490757600080fd5b610100815260056101008201527f544f4b454e000000000000000000000000000000000000000000000000000000610120820152610140602082015260036101408201527f544b4e000000000000000000000000000000000000000000000000000000000061016082015260006101808201905060ff8816604083015286606083015260038610618e84577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b8560808301528460a0830152618ea560c08301856001600160a01b03169052565b6001600160a01b03831660e0830152979650505050505050565b600060208284031215618ed157600080fd5b8151801515811461490757600080fd5b600060208284031215618ef357600080fd5b5051919050565b608081526000618f0d6080830187618a63565b8560208401526001600160a01b038516604084015282810360608401526186bb8185618a63565b60c081526000618f4760c0830189618a63565b6001600160a01b038816602084015286604084015285606084015284608084015282810360a0840152618f7a8185618a63565b9998505050505050505050565b838152826020820152606060408201526000616ab66060830184618a63565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8181038181111561480e5761480e618fa6565b8082018082111561480e5761480e618fa6565b600181811c9082168061900f57607f821691505b602082108103616ad0577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60608152600061905b6060830186618a63565b84602084015282810360408401526153858185618a63565b6060815260006190866060830186618a63565b90508360208301526001600160a01b0383166040830152949350505050565b6040815260006190b86040830185618a63565b82810360208401526149038185618a63565b60c0815260006190dd60c0830188618a63565b6001600160a01b038716602084015285604084015284606084015283608084015282810360a084015260008152602081019150509695505050505050565b6001600160a01b03831681526040602082015260006162046040830184618a63565b7f4661696c656420746f206465706c6f7920636f6e74726163742000000000000081526000835161917581601a850160208801618a3f565b7f3a20000000000000000000000000000000000000000000000000000000000000601a9184019182015283516191b281601c840160208801618a3f565b01601c01949350505050565b6020815260006149076020830184618a63565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040516060810167ffffffffffffffff81118282101715619223576192236191d1565b60405290565b60008067ffffffffffffffff841115619244576192446191d1565b50604051601f19601f85018116603f0116810181811067ffffffffffffffff82111715619273576192736191d1565b60405283815290508082840185101561928b57600080fd5b6165d3846020830185618a3f565b600082601f8301126192aa57600080fd5b61490783835160208501619229565b6000602082840312156192cb57600080fd5b815167ffffffffffffffff8111156192e257600080fd5b61480a84828501619299565b60008351619300818460208801618a3f565b835190830190619314818360208801618a3f565b01949350505050565b7f4661696c656420746f206465706c6f7920636f6e74726163742000000000000081526000835161935581601a850160208801618a3f565b7f207573696e6720636f6e7374727563746f722064617461202200000000000000601a918401918201528351619392816033840160208801618a3f565b7f220000000000000000000000000000000000000000000000000000000000000060339290910191820152603401949350505050565b60408152600b60408201527f464f554e4452595f4f555400000000000000000000000000000000000000000060608201526080602082015260006149076080830184618a63565b60006020828403121561942157600080fd5b815167ffffffffffffffff81111561943857600080fd5b8201601f8101841361944957600080fd5b61480a84825160208401619229565b6000855161946a818460208a01618a3f565b7f2f0000000000000000000000000000000000000000000000000000000000000090830190815285516194a4816001840160208a01618a3f565b7f2f000000000000000000000000000000000000000000000000000000000000006001929091019182015284516194e2816002840160208901618a3f565b6001818301019150507f2f0000000000000000000000000000000000000000000000000000000000000060018201528351619524816002840160208801618a3f565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600292909101918201526007019695505050505050565b60408152600061956f6040830184618a63565b8281036020840152600481527f2e6173740000000000000000000000000000000000000000000000000000000060208201526040810191505092915050565b7f436f756c64206e6f742066696e642041535420696e20617274696661637420008152600082516195e681601f850160208701618a3f565b7f2e205365742060617374203d20747275656020696e20666f756e6472792e746f601f9390910192830152507f6d6c000000000000000000000000000000000000000000000000000000000000603f820152604101919050565b6040815260006196536040830184618a63565b8281036020840152601181527f2e6173742e6162736f6c7574655061746800000000000000000000000000000060208201526040810191505092915050565b6040815260006196a56040830184618a63565b8281036020840152600c81527f2e6173742e6c6963656e7365000000000000000000000000000000000000000060208201526040810191505092915050565b7f2e6d657461646174612e736f75726365732e5b2700000000000000000000000081526000825161971c816014850160208701618a3f565b7f275d2e6b656363616b32353600000000000000000000000000000000000000006014939091019283015250602001919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f22000000000000000000000000000000000000000000000000000000000000008152600082516197b7816001850160208701618a3f565b7f22000000000000000000000000000000000000000000000000000000000000006001939091019283015250600201919050565b600082516197fd818460208701618a3f565b7f2f6275696c642d696e666f000000000000000000000000000000000000000000920191825250600b01919050565b7f436f756c64206e6f742066696e64206275696c642d696e666f2066696c65207781527f697468206d61746368696e6720736f7572636520636f6465206861736820666f60208201527f7220636f6e7472616374200000000000000000000000000000000000000000006040820152600082516198b081604b850160208701618a3f565b91909101604b0192915050565b600060ff821660ff81036198d3576198d3618fa6565b60010192915050565b7f406f70656e7a657070656c696e2f646566656e6465722d6465706c6f792d636c81527f69656e742d636c6940000000000000000000000000000000000000000000000060208201526000825161993a816029850160208701618a3f565b9190910160290192915050565b60408152601660408201527f4f50454e5a455050454c494e5f424153485f504154480000000000000000000060608201526080602082015260006149076080830184618a63565b6000602082840312156199a057600080fd5b815167ffffffffffffffff8111156199b757600080fd5b8201606081850312156199c957600080fd5b6199d1619200565b81518060030b81146199e257600080fd5b8152602082015167ffffffffffffffff8111156199fe57600080fd5b619a0a86828501619299565b602083015250604082015167ffffffffffffffff811115619a2a57600080fd5b619a3686828501619299565b604083015250949350505050565b7f4661696c656420746f2072756e206261736820636f6d6d616e6420776974682081527f2200000000000000000000000000000000000000000000000000000000000000602082015260008251619aa2816021850160208701618a3f565b7f222e20496620796f7520617265207573696e672057696e646f77732c2073657460219390910192830152507f20746865204f50454e5a455050454c494e5f424153485f5041544820656e766960418201527f726f6e6d656e74207661726961626c6520746f207468652066756c6c7920717560618201527f616c69666965642070617468206f66207468652062617368206578656375746160818201527f626c652e20466f72206578616d706c652c20696620796f75206172652075736960a18201527f6e672047697420666f722057696e646f77732c206164642074686520666f6c6c60c18201527f6f77696e67206c696e6520696e20746865202e656e762066696c65206f66207960e18201527f6f75722070726f6a65637420287573696e6720666f727761726420736c6173686101018201527f6573293a0a4f50454e5a455050454c494e5f424153485f504154483d22433a2f6101218201527f50726f6772616d2046696c65732f4769742f62696e2f6261736822000000000061014182015261015c01919050565b7f4661696c656420746f2066696e64206c696e652077697468207072656669782081527f2700000000000000000000000000000000000000000000000000000000000000602082015260008351619c8e816021850160208801618a3f565b7f2720696e206f75747075743a20000000000000000000000000000000000000006021918401918201528351619ccb81602e840160208801618a3f565b01602e01949350505050565b7f4661696c656420746f2072756e2075706772616465207361666574792076616c81527f69646174696f6e3a20000000000000000000000000000000000000000000000060208201526000825161993a816029850160208701618a3f565b7f55706772616465207361666574792076616c69646174696f6e206661696c656481527f3a0a000000000000000000000000000000000000000000000000000000000000602082015260008251619d93816022850160208701618a3f565b9190910160220192915050565b7f436f6e7472616374206e616d6520000000000000000000000000000000000000815260008251619dd881600e850160208701618a3f565b7f206d75737420626520696e2074686520666f726d6174204d79436f6e74726163600e9390910192830152507f742e736f6c3a4d79436f6e7472616374206f72204d79436f6e74726163742e73602e8201527f6f6c206f72206f75742f4d79436f6e74726163742e736f6c2f4d79436f6e7472604e8201527f6163742e6a736f6e000000000000000000000000000000000000000000000000606e820152607601919050565b7f53504458206c6963656e7365206964656e746966696572200000000000000000815260008351619eb6816018850160208801618a3f565b7f20696e20000000000000000000000000000000000000000000000000000000006018918401918201528351619ef381601c840160208801618a3f565b7f20646f6573206e6f74206c6f6f6b206c696b65206120737570706f7274656420601c92909101918201527f6c6963656e736520666f7220626c6f636b206578706c6f726572207665726966603c8201527f69636174696f6e2e205573652074686520606c6963656e73655479706560206f605c8201527f7074696f6e20746f20737065636966792061206c6963656e736520747970652c607c8201527f206f7220736574207468652060736b69704c6963656e73655479706560206f70609c8201527f74696f6e20746f2060747275656020746f20736b69702e00000000000000000060bc82015260d301949350505050565b60008251619ff9818460208701618a3f565b7f2000000000000000000000000000000000000000000000000000000000000000920191825250600101919050565b7f406f70656e7a657070656c696e2f75706772616465732d636f7265400000000081526000825161a06081601c850160208701618a3f565b91909101601c0192915050565b6000600019820361a0805761a080618fa6565b5060010190565b808202811582820484141761480e5761480e618fa6565b6001815b600184111561a0d95780850481111561a0bd5761a0bd618fa6565b600184161561a0cb57908102905b60019390931c92800261a0a2565b935093915050565b60008261a0f05750600161480e565b8161a0fd5750600061480e565b816001811461a113576002811461a11d5761a139565b600191505061480e565b60ff84111561a12e5761a12e618fa6565b50506001821b61480e565b5060208310610133831016604e8410600b841016171561a15c575081810a61480e565b61a169600019848461a09e565b806000190482111561a17d5761a17d618fa6565b029392505050565b6000614907838361a0e1565b60008161a1a05761a1a0618fa6565b506000190190565b6000835161a1ba818460208801618a3f565b7f3a00000000000000000000000000000000000000000000000000000000000000908301908152835161a1f4816001840160208801618a3f565b01600101949350505050565b8181036000831280158383131683831282161715617bcb57617bcb618fa656fe60c0604052600d60809081526c2bb930b83832b21022ba3432b960991b60a05260009061002c9082610114565b506040805180820190915260048152630ae8aa8960e31b60208201526001906100559082610114565b506002805460ff1916601217905534801561006f57600080fd5b506101d2565b634e487b7160e01b600052604160045260246000fd5b600181811c9082168061009f57607f821691505b6020821081036100bf57634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111561010f57806000526020600020601f840160051c810160208510156100ec5750805b601f840160051c820191505b8181101561010c57600081556001016100f8565b50505b505050565b81516001600160401b0381111561012d5761012d610075565b6101418161013b845461008b565b846100c5565b6020601f821160018114610175576000831561015d5750848201515b600019600385901b1c1916600184901b17845561010c565b600084815260208120601f198516915b828110156101a55787850151825560209485019460019092019101610185565b50848210156101c35786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b610986806101e16000396000f3fe6080604052600436106100c05760003560e01c8063313ce56711610074578063a9059cbb1161004e578063a9059cbb146101fa578063d0e30db01461021a578063dd62ed3e1461022257600080fd5b8063313ce5671461018c57806370a08231146101b857806395d89b41146101e557600080fd5b806318160ddd116100a557806318160ddd1461012f57806323b872dd1461014c5780632e1a7d4d1461016c57600080fd5b806306fdde03146100d4578063095ea7b3146100ff57600080fd5b366100cf576100cd61025a565b005b600080fd5b3480156100e057600080fd5b506100e96102b5565b6040516100f69190610745565b60405180910390f35b34801561010b57600080fd5b5061011f61011a3660046107da565b610343565b60405190151581526020016100f6565b34801561013b57600080fd5b50475b6040519081526020016100f6565b34801561015857600080fd5b5061011f610167366004610804565b6103bd565b34801561017857600080fd5b506100cd610187366004610841565b610647565b34801561019857600080fd5b506002546101a69060ff1681565b60405160ff90911681526020016100f6565b3480156101c457600080fd5b5061013e6101d336600461085a565b60036020526000908152604090205481565b3480156101f157600080fd5b506100e9610724565b34801561020657600080fd5b5061011f6102153660046107da565b610731565b6100cd61025a565b34801561022e57600080fd5b5061013e61023d366004610875565b600460209081526000928352604080842090915290825290205481565b33600090815260036020526040812080543492906102799084906108d7565b909155505060405134815233907fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c9060200160405180910390a2565b600080546102c2906108ea565b80601f01602080910402602001604051908101604052809291908181526020018280546102ee906108ea565b801561033b5780601f106103105761010080835404028352916020019161033b565b820191906000526020600020905b81548152906001019060200180831161031e57829003601f168201915b505050505081565b33600081815260046020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925906103ab9086815260200190565b60405180910390a35060015b92915050565b73ffffffffffffffffffffffffffffffffffffffff831660009081526003602052604081205482111561042b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600060248201526044015b60405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff841633148015906104a1575073ffffffffffffffffffffffffffffffffffffffff841660009081526004602090815260408083203384529091529020547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff14155b156105605773ffffffffffffffffffffffffffffffffffffffff8416600090815260046020908152604080832033845290915290205482111561051a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526020600482015260006024820152604401610422565b73ffffffffffffffffffffffffffffffffffffffff841660009081526004602090815260408083203384529091528120805484929061055a90849061093d565b90915550505b73ffffffffffffffffffffffffffffffffffffffff84166000908152600360205260408120805484929061059590849061093d565b909155505073ffffffffffffffffffffffffffffffffffffffff8316600090815260036020526040812080548492906105cf9084906108d7565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161063591815260200190565b60405180910390a35060019392505050565b3360009081526003602052604090205481111561069a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526020600482015260006024820152604401610422565b33600090815260036020526040812080548392906106b990849061093d565b9091555050604051339082156108fc029083906000818181858888f193505050501580156106eb573d6000803e3d6000fd5b5060405181815233907f7fcf532c15f0a6db0bd6d0e038bea71d30d808c7d98cb3bf7268a95bf5081b659060200160405180910390a250565b600180546102c2906108ea565b600061073e3384846103bd565b9392505050565b602081526000825180602084015260005b818110156107735760208186018101516040868401015201610756565b5060006040828501015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011684010191505092915050565b803573ffffffffffffffffffffffffffffffffffffffff811681146107d557600080fd5b919050565b600080604083850312156107ed57600080fd5b6107f6836107b1565b946020939093013593505050565b60008060006060848603121561081957600080fd5b610822846107b1565b9250610830602085016107b1565b929592945050506040919091013590565b60006020828403121561085357600080fd5b5035919050565b60006020828403121561086c57600080fd5b61073e826107b1565b6000806040838503121561088857600080fd5b610891836107b1565b915061089f602084016107b1565b90509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b808201808211156103b7576103b76108a8565b600181811c908216806108fe57607f821691505b602082108103610937577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b818103818111156103b7576103b76108a856fea264697066735822122008d7fc4e09519c5dd9f356b03596f6829a151d0bc7682533f9ceab4e459f5ee264736f6c634300081a00336080604052348015600f57600080fd5b506105208061001f6000396000f3fe60806040526004361061002a5760003560e01c806369582bee14610033578063de43156e1461005357005b3661003157005b005b34801561003f57600080fd5b5061003161004e3660046101ba565b610073565b34801561005f57600080fd5b5061003161006e3660046101ba565b6100ee565b6060811561008a5761008782840184610273565b90505b7ffdc887992b033668833927e252058e468fac0b6bd196d520f09c61b740e999486100b58780610369565b6100c560408a0160208b016103ce565b896040013533866040516100de969594939291906103f0565b60405180910390a1505050505050565b606081156101055761010282840184610273565b90505b7fcdc8ee677dc5ebe680fb18cebda5e26ba5ea1f0ba504a47e2a9a2ecb476dc98e6100b58780610369565b60006060828403121561014257600080fd5b50919050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461016c57600080fd5b919050565b60008083601f84011261018357600080fd5b50813567ffffffffffffffff81111561019b57600080fd5b6020830191508360208285010111156101b357600080fd5b9250929050565b6000806000806000608086880312156101d257600080fd5b853567ffffffffffffffff8111156101e957600080fd5b6101f588828901610130565b95505061020460208701610148565b935060408601359250606086013567ffffffffffffffff81111561022757600080fd5b61023388828901610171565b969995985093965092949392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60006020828403121561028557600080fd5b813567ffffffffffffffff81111561029c57600080fd5b8201601f810184136102ad57600080fd5b803567ffffffffffffffff8111156102c7576102c7610244565b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8501160116810181811067ffffffffffffffff8211171561033357610333610244565b60405281815282820160200186101561034b57600080fd5b81602084016020830137600091810160200191909152949350505050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261039e57600080fd5b83018035915067ffffffffffffffff8211156103b957600080fd5b6020019150368190038213156101b357600080fd5b6000602082840312156103e057600080fd5b6103e982610148565b9392505050565b60a081528560a0820152858760c0830137600060c0878301015260007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f880116820173ffffffffffffffffffffffffffffffffffffffff8716602084015285604084015273ffffffffffffffffffffffffffffffffffffffff8516606084015260c083820301608084015283518060c083015260005b818110156104a557602081870181015184830160e0015201610488565b50600060e0838301810191909152601f9091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016909101019897505050505050505056fea2646970667358221220f4d1ccb9c8450e782e1c77412473fd37637a5c83a2a3272307d8c8bc8e8c7a3364736f6c634300081a003360c060405234801561001057600080fd5b5060405161106f38038061106f83398101604081905261002f916100db565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461006357604051632b2add3d60e01b815260040160405180910390fd5b600380546001600160a01b0319166001600160a01b0385811691909117909155828116608052811660a0526040517f80699e81136d69cb8367ad52a994e25c722a86da654b561d0c14b61a777e7ac590600090a150505061011e565b80516001600160a01b03811681146100d657600080fd5b919050565b6000806000606084860312156100f057600080fd5b6100f9846100bf565b9250610107602085016100bf565b9150610115604085016100bf565b90509250925092565b60805160a051610f2561014a60003960006101e50152600081816102b9015261045b0152610f256000f3fe608060405234801561001057600080fd5b50600436106100f55760003560e01c806397770dff11610097578063c63585cc11610066578063c63585cc14610273578063d7fd7afb14610286578063d936a012146102b4578063ee2815ba146102db57600080fd5b806397770dff1461021a578063a7cb05071461022d578063c39aca3714610240578063c62178ac1461025357600080fd5b8063513a9c05116100d3578063513a9c051461018a578063569541b9146101c0578063842da36d146101e057806391dd645f1461020757600080fd5b80630be15547146100fa5780631f0e251b1461015a5780633ce4a5bc1461016f575b600080fd5b610130610108366004610bd1565b60016020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b61016d610168366004610c13565b6102ee565b005b61013073735b14bb79463307aacbed86daf3322b1e6226ab81565b610130610198366004610bd1565b60026020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b6003546101309073ffffffffffffffffffffffffffffffffffffffff1681565b6101307f000000000000000000000000000000000000000000000000000000000000000081565b61016d610215366004610c35565b610402565b61016d610228366004610c13565b610526565b61016d61023b366004610c61565b610633565b61016d61024e366004610c83565b6106ce565b6004546101309073ffffffffffffffffffffffffffffffffffffffff1681565b610130610281366004610d53565b6108cd565b6102a6610294366004610bd1565b60006020819052908152604090205481565b604051908152602001610151565b6101307f000000000000000000000000000000000000000000000000000000000000000081565b61016d6102e9366004610c35565b610a02565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461033b576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116610388576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600480547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527f3ade88e3922d64780e1bf4460d364c2970b69da813f9c0c07a1c187b5647636c906020015b60405180910390a150565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461044f576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600354600090610497907f00000000000000000000000000000000000000000000000000000000000000009073ffffffffffffffffffffffffffffffffffffffff16846108cd565b60008481526002602090815260409182902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff85169081179091558251878152918201529192507f0ecec485166da6139b13bb7e033e9446e2d35348e80ebf1180d4afe2dba1704e910160405180910390a1505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610573576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff81166105c0576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527fdba79d534382d1a8ae108e4c8ecb27c6ae42ab8b91d44eedf88bd329f3868d5e906020016103f7565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610680576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000828152602081815260409182902083905581518481529081018390527f49f492222906ac486c3c1401fa545626df1f0c0e5a77a05597ea2ed66af9850d91015b60405180910390a15050565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461071b576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff831673735b14bb79463307aacbed86daf3322b1e6226ab1480610768575073ffffffffffffffffffffffffffffffffffffffff831630145b1561079f576040517f82d5d76a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f47e7ef2400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152602482018690528616906347e7ef24906044016020604051808303816000875af1158015610814573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108389190610d96565b506040517fde43156e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84169063de43156e906108939089908990899088908890600401610e01565b600060405180830381600087803b1580156108ad57600080fd5b505af11580156108c1573d6000803e3d6000fd5b50505050505050505050565b60008060006108dc8585610ad3565b6040517fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606084811b8216602084015283901b16603482015291935091508690604801604051602081830303815290604052805190602001206040516020016109c29291907fff00000000000000000000000000000000000000000000000000000000000000815260609290921b7fffffffffffffffffffffffffffffffffffffffff00000000000000000000000016600183015260158201527f96e8ac4277198ff8b6f785478aa9a39f403cb768dd02cbee326c3e7da348845f603582015260550190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291905280516020909101209695505050505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610a4f576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008281526001602090815260409182902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff85169081179091558251858152918201527fd1b36d30f6248e97c473b4d1348ca164a4ef6759022f54a58ec200326c39c45d91016106c2565b6000808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603610b3b576040517fcb1e7cfe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1610610b75578284610b78565b83835b909250905073ffffffffffffffffffffffffffffffffffffffff8216610bca576040517f78b507da00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b9250929050565b600060208284031215610be357600080fd5b5035919050565b803573ffffffffffffffffffffffffffffffffffffffff81168114610c0e57600080fd5b919050565b600060208284031215610c2557600080fd5b610c2e82610bea565b9392505050565b60008060408385031215610c4857600080fd5b82359150610c5860208401610bea565b90509250929050565b60008060408385031215610c7457600080fd5b50508035926020909101359150565b60008060008060008060a08789031215610c9c57600080fd5b863567ffffffffffffffff811115610cb357600080fd5b87016060818a031215610cc557600080fd5b9550610cd360208801610bea565b945060408701359350610ce860608801610bea565b9250608087013567ffffffffffffffff811115610d0457600080fd5b8701601f81018913610d1557600080fd5b803567ffffffffffffffff811115610d2c57600080fd5b896020828401011115610d3e57600080fd5b60208201935080925050509295509295509295565b600080600060608486031215610d6857600080fd5b610d7184610bea565b9250610d7f60208501610bea565b9150610d8d60408501610bea565b90509250925092565b600060208284031215610da857600080fd5b81518015158114610c2e57600080fd5b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b60808152600086357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1883603018112610e3957600080fd5b870160208101903567ffffffffffffffff811115610e5657600080fd5b803603821315610e6557600080fd5b60606080850152610e7a60e085018284610db8565b91505073ffffffffffffffffffffffffffffffffffffffff610e9e60208a01610bea565b1660a0840152604088013560c084015273ffffffffffffffffffffffffffffffffffffffff871660208401528560408401528281036060840152610ee3818587610db8565b9897505050505050505056fea2646970667358221220431a07541a491b54259bdf8fcd05ade6751bfbbf0e72e605f27325b56d7d464f64736f6c634300081a003360e060405234801561001057600080fd5b50604051611bb9380380611bb983398101604081905261002f9161020e565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461006357604051632b2add3d60e01b815260040160405180910390fd5b6001600160a01b038216158061008057506001600160a01b038116155b1561009e5760405163d92e233d60e01b815260040160405180910390fd5b60066100aa8982610360565b5060076100b78882610360565b5060ff861660c05260808590528360028111156100d6576100d661041e565b60a08160028111156100ea576100ea61041e565b905250600192909255600080546001600160a01b039283166001600160a01b03199182161790915560088054929093169116179055506104349350505050565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261015157600080fd5b81516001600160401b0381111561016a5761016a61012a565b604051601f8201601f19908116603f011681016001600160401b03811182821017156101985761019861012a565b6040528181528382016020018510156101b057600080fd5b60005b828110156101cf576020818601810151838301820152016101b3565b506000918101602001919091529392505050565b8051600381106101f257600080fd5b919050565b80516001600160a01b03811681146101f257600080fd5b600080600080600080600080610100898b03121561022b57600080fd5b88516001600160401b0381111561024157600080fd5b61024d8b828c01610140565b60208b015190995090506001600160401b0381111561026b57600080fd5b6102778b828c01610140565b975050604089015160ff8116811461028e57600080fd5b60608a015190965094506102a460808a016101e3565b60a08a015190945092506102ba60c08a016101f7565b91506102c860e08a016101f7565b90509295985092959890939650565b600181811c908216806102eb57607f821691505b60208210810361030b57634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111561035b57806000526020600020601f840160051c810160208510156103385750805b601f840160051c820191505b818110156103585760008155600101610344565b50505b505050565b81516001600160401b038111156103795761037961012a565b61038d8161038784546102d7565b84610311565b6020601f8211600181146103c157600083156103a95750848201515b600019600385901b1c1916600184901b178455610358565b600084815260208120601f198516915b828110156103f157878501518255602094850194600190920191016103d1565b508482101561040f5786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b634e487b7160e01b600052602160045260246000fd5b60805160a05160c05161174861047160003960006102170152600061033a0152600081816102eb01528181610ad70152610bdd01526117486000f3fe608060405234801561001057600080fd5b50600436106101985760003560e01c80638b851b95116100e3578063ccc775991161008c578063eddeb12311610066578063eddeb12314610431578063f2441b3214610444578063f687d12a1461046457600080fd5b8063ccc77599146103a4578063d9eeebed146103b7578063dd62ed3e146103eb57600080fd5b8063a9059cbb116100bd578063a9059cbb14610369578063c70126261461037c578063c835d7cc1461038f57600080fd5b80638b851b951461030d57806395d89b411461032d578063a3413d031461033557600080fd5b80633ce4a5bc116101455780634d8943bb1161011f5780634d8943bb146102a757806370a08231146102b057806385e1f4d0146102e657600080fd5b80633ce4a5bc1461024157806342966c681461028157806347e7ef241461029457600080fd5b806318160ddd1161017657806318160ddd146101f557806323b872dd146101fd578063313ce5671461021057600080fd5b806306fdde031461019d578063091d2788146101bb578063095ea7b3146101d2575b600080fd5b6101a5610477565b6040516101b29190611327565b60405180910390f35b6101c460015481565b6040519081526020016101b2565b6101e56101e0366004611366565b610509565b60405190151581526020016101b2565b6005546101c4565b6101e561020b366004611392565b610520565b60405160ff7f00000000000000000000000000000000000000000000000000000000000000001681526020016101b2565b61025c73735b14bb79463307aacbed86daf3322b1e6226ab81565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101b2565b6101e561028f3660046113d3565b6105b7565b6101e56102a2366004611366565b6105cb565b6101c460025481565b6101c46102be3660046113ec565b73ffffffffffffffffffffffffffffffffffffffff1660009081526003602052604090205490565b6101c47f000000000000000000000000000000000000000000000000000000000000000081565b60085461025c9073ffffffffffffffffffffffffffffffffffffffff1681565b6101a561071f565b61035c7f000000000000000000000000000000000000000000000000000000000000000081565b6040516101b29190611409565b6101e5610377366004611366565b61072e565b6101e561038a366004611479565b61073b565b6103a261039d3660046113ec565b61088a565b005b6103a26103b23660046113ec565b61099e565b6103bf610aab565b6040805173ffffffffffffffffffffffffffffffffffffffff90931683526020830191909152016101b2565b6101c46103f9366004611571565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260046020908152604080832093909416825291909152205490565b6103a261043f3660046113d3565b610cc9565b60005461025c9073ffffffffffffffffffffffffffffffffffffffff1681565b6103a26104723660046113d3565b610d4b565b606060068054610486906115aa565b80601f01602080910402602001604051908101604052809291908181526020018280546104b2906115aa565b80156104ff5780601f106104d4576101008083540402835291602001916104ff565b820191906000526020600020905b8154815290600101906020018083116104e257829003601f168201915b5050505050905090565b6000610516338484610dcd565b5060015b92915050565b600061052d848484610ed6565b73ffffffffffffffffffffffffffffffffffffffff8416600090815260046020908152604080832033845290915290205482811015610598576040517f10bad14700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6105ac85336105a7868561162c565b610dcd565b506001949350505050565b60006105c33383611091565b506001919050565b60003373735b14bb79463307aacbed86daf3322b1e6226ab14801590610609575060005473ffffffffffffffffffffffffffffffffffffffff163314155b801561062d575060085473ffffffffffffffffffffffffffffffffffffffff163314155b15610664576040517fddb5de5e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61066e83836111d3565b6040517f735b14bb79463307aacbed86daf3322b1e6226ab000000000000000000000000602082015273ffffffffffffffffffffffffffffffffffffffff8416907f67fc7bdaed5b0ec550d8706b87d60568ab70c6b781263c70101d54cd1564aab390603401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529082905261070e91869061163f565b60405180910390a250600192915050565b606060078054610486906115aa565b6000610516338484610ed6565b6000806000610748610aab565b6040517f23b872dd00000000000000000000000000000000000000000000000000000000815233600482015273735b14bb79463307aacbed86daf3322b1e6226ab602482015260448101829052919350915073ffffffffffffffffffffffffffffffffffffffff8316906323b872dd906064016020604051808303816000875af11580156107da573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107fe9190611661565b610834576040517f0a7cd6d600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61083e3385611091565b60025460405133917f9ffbffc04a397460ee1dbe8c9503e098090567d6b7f4b3c02a8617d800b6d9559161087791899189918791611683565b60405180910390a2506001949350505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab146108d7576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116610924576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527fd55614e962c5fd6ece71614f6348d702468a997a394dd5e5c1677950226d97ae906020015b60405180910390a150565b3373735b14bb79463307aacbed86daf3322b1e6226ab146109eb576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116610a38576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600880547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527f88815d964e380677e86d817e7d65dea59cb7b4c3b5b7a0c8ec7ea4a74f90a38790602001610993565b600080546040517f0be155470000000000000000000000000000000000000000000000000000000081527f000000000000000000000000000000000000000000000000000000000000000060048201528291829173ffffffffffffffffffffffffffffffffffffffff90911690630be1554790602401602060405180830381865afa158015610b3e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b6291906116b2565b905073ffffffffffffffffffffffffffffffffffffffff8116610bb1576040517f78fff39600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080546040517fd7fd7afb0000000000000000000000000000000000000000000000000000000081527f0000000000000000000000000000000000000000000000000000000000000000600482015273ffffffffffffffffffffffffffffffffffffffff9091169063d7fd7afb90602401602060405180830381865afa158015610c40573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c6491906116cf565b905080600003610ca0576040517fe661aed000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060025460015483610cb391906116e8565b610cbd91906116ff565b92959294509192505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610d16576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60028190556040518181527fef13af88e424b5d15f49c77758542c1938b08b8b95b91ed0751f98ba99000d8f90602001610993565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610d98576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018190556040518181527fff5788270f43bfc1ca41c503606d2594aa3023a1a7547de403a3e2f146a4a80a90602001610993565b73ffffffffffffffffffffffffffffffffffffffff8316610e1a576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216610e67576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff83811660008181526004602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8316610f23576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216610f70576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff831660009081526003602052604090205481811015610fd0576040517ffe382aa700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610fda828261162c565b73ffffffffffffffffffffffffffffffffffffffff808616600090815260036020526040808220939093559085168152908120805484929061101d9084906116ff565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161108391815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff82166110de576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff82166000908152600360205260409020548181101561113e576040517ffe382aa700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611148828261162c565b73ffffffffffffffffffffffffffffffffffffffff84166000908152600360205260408120919091556005805484929061118390849061162c565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90602001610ec9565b73ffffffffffffffffffffffffffffffffffffffff8216611220576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b806005600082825461123291906116ff565b909155505073ffffffffffffffffffffffffffffffffffffffff82166000908152600360205260408120805483929061126c9084906116ff565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6000815180845260005b818110156112e9576020818501810151868301820152016112cd565b5060006020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b60208152600061133a60208301846112c3565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff8116811461136357600080fd5b50565b6000806040838503121561137957600080fd5b823561138481611341565b946020939093013593505050565b6000806000606084860312156113a757600080fd5b83356113b281611341565b925060208401356113c281611341565b929592945050506040919091013590565b6000602082840312156113e557600080fd5b5035919050565b6000602082840312156113fe57600080fd5b813561133a81611341565b6020810160038310611444577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000806040838503121561148c57600080fd5b823567ffffffffffffffff8111156114a357600080fd5b8301601f810185136114b457600080fd5b803567ffffffffffffffff8111156114ce576114ce61144a565b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8501160116810181811067ffffffffffffffff8211171561153a5761153a61144a565b60405281815282820160200187101561155257600080fd5b8160208401602083013760006020928201830152969401359450505050565b6000806040838503121561158457600080fd5b823561158f81611341565b9150602083013561159f81611341565b809150509250929050565b600181811c908216806115be57607f821691505b6020821081036115f7577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8181038181111561051a5761051a6115fd565b60408152600061165260408301856112c3565b90508260208301529392505050565b60006020828403121561167357600080fd5b8151801515811461133a57600080fd5b60808152600061169660808301876112c3565b6020830195909552506040810192909252606090910152919050565b6000602082840312156116c457600080fd5b815161133a81611341565b6000602082840312156116e157600080fd5b5051919050565b808202811582820484141761051a5761051a6115fd565b8082018082111561051a5761051a6115fd56fea26469706673582212204013e39523742118b3f2227e145ee7e48176ba6aebead33c596dca2acb59a74c64736f6c634300081a0033a26469706673582212209d37f8d12ab3d393a8cedbe98cf1cd35836d53925e44c933caadf2b0f857d29a64736f6c634300081a0033", } // GatewayZEVMInboundTestABI is the input ABI used to generate the binding from. @@ -634,6 +634,90 @@ func (_GatewayZEVMInboundTest *GatewayZEVMInboundTestTransactorSession) TestCall return _GatewayZEVMInboundTest.Contract.TestCall(&_GatewayZEVMInboundTest.TransactOpts) } +// TestCallFailsIfReceiverIsZeroAddress is a paid mutator transaction binding the contract method 0x39cbb457. +// +// Solidity: function testCallFailsIfReceiverIsZeroAddress() returns() +func (_GatewayZEVMInboundTest *GatewayZEVMInboundTestTransactor) TestCallFailsIfReceiverIsZeroAddress(opts *bind.TransactOpts) (*types.Transaction, error) { + return _GatewayZEVMInboundTest.contract.Transact(opts, "testCallFailsIfReceiverIsZeroAddress") +} + +// TestCallFailsIfReceiverIsZeroAddress is a paid mutator transaction binding the contract method 0x39cbb457. +// +// Solidity: function testCallFailsIfReceiverIsZeroAddress() returns() +func (_GatewayZEVMInboundTest *GatewayZEVMInboundTestSession) TestCallFailsIfReceiverIsZeroAddress() (*types.Transaction, error) { + return _GatewayZEVMInboundTest.Contract.TestCallFailsIfReceiverIsZeroAddress(&_GatewayZEVMInboundTest.TransactOpts) +} + +// TestCallFailsIfReceiverIsZeroAddress is a paid mutator transaction binding the contract method 0x39cbb457. +// +// Solidity: function testCallFailsIfReceiverIsZeroAddress() returns() +func (_GatewayZEVMInboundTest *GatewayZEVMInboundTestTransactorSession) TestCallFailsIfReceiverIsZeroAddress() (*types.Transaction, error) { + return _GatewayZEVMInboundTest.Contract.TestCallFailsIfReceiverIsZeroAddress(&_GatewayZEVMInboundTest.TransactOpts) +} + +// TestWithdrawAndCallZRC20FailsIfAmountIsZero is a paid mutator transaction binding the contract method 0xba9adeef. +// +// Solidity: function testWithdrawAndCallZRC20FailsIfAmountIsZero() returns() +func (_GatewayZEVMInboundTest *GatewayZEVMInboundTestTransactor) TestWithdrawAndCallZRC20FailsIfAmountIsZero(opts *bind.TransactOpts) (*types.Transaction, error) { + return _GatewayZEVMInboundTest.contract.Transact(opts, "testWithdrawAndCallZRC20FailsIfAmountIsZero") +} + +// TestWithdrawAndCallZRC20FailsIfAmountIsZero is a paid mutator transaction binding the contract method 0xba9adeef. +// +// Solidity: function testWithdrawAndCallZRC20FailsIfAmountIsZero() returns() +func (_GatewayZEVMInboundTest *GatewayZEVMInboundTestSession) TestWithdrawAndCallZRC20FailsIfAmountIsZero() (*types.Transaction, error) { + return _GatewayZEVMInboundTest.Contract.TestWithdrawAndCallZRC20FailsIfAmountIsZero(&_GatewayZEVMInboundTest.TransactOpts) +} + +// TestWithdrawAndCallZRC20FailsIfAmountIsZero is a paid mutator transaction binding the contract method 0xba9adeef. +// +// Solidity: function testWithdrawAndCallZRC20FailsIfAmountIsZero() returns() +func (_GatewayZEVMInboundTest *GatewayZEVMInboundTestTransactorSession) TestWithdrawAndCallZRC20FailsIfAmountIsZero() (*types.Transaction, error) { + return _GatewayZEVMInboundTest.Contract.TestWithdrawAndCallZRC20FailsIfAmountIsZero(&_GatewayZEVMInboundTest.TransactOpts) +} + +// TestWithdrawAndCallZRC20FailsIfReceiverIsZeroAddress is a paid mutator transaction binding the contract method 0x36431b3f. +// +// Solidity: function testWithdrawAndCallZRC20FailsIfReceiverIsZeroAddress() returns() +func (_GatewayZEVMInboundTest *GatewayZEVMInboundTestTransactor) TestWithdrawAndCallZRC20FailsIfReceiverIsZeroAddress(opts *bind.TransactOpts) (*types.Transaction, error) { + return _GatewayZEVMInboundTest.contract.Transact(opts, "testWithdrawAndCallZRC20FailsIfReceiverIsZeroAddress") +} + +// TestWithdrawAndCallZRC20FailsIfReceiverIsZeroAddress is a paid mutator transaction binding the contract method 0x36431b3f. +// +// Solidity: function testWithdrawAndCallZRC20FailsIfReceiverIsZeroAddress() returns() +func (_GatewayZEVMInboundTest *GatewayZEVMInboundTestSession) TestWithdrawAndCallZRC20FailsIfReceiverIsZeroAddress() (*types.Transaction, error) { + return _GatewayZEVMInboundTest.Contract.TestWithdrawAndCallZRC20FailsIfReceiverIsZeroAddress(&_GatewayZEVMInboundTest.TransactOpts) +} + +// TestWithdrawAndCallZRC20FailsIfReceiverIsZeroAddress is a paid mutator transaction binding the contract method 0x36431b3f. +// +// Solidity: function testWithdrawAndCallZRC20FailsIfReceiverIsZeroAddress() returns() +func (_GatewayZEVMInboundTest *GatewayZEVMInboundTestTransactorSession) TestWithdrawAndCallZRC20FailsIfReceiverIsZeroAddress() (*types.Transaction, error) { + return _GatewayZEVMInboundTest.Contract.TestWithdrawAndCallZRC20FailsIfReceiverIsZeroAddress(&_GatewayZEVMInboundTest.TransactOpts) +} + +// TestWithdrawAndcallZETAFailsIfAmountIsZero is a paid mutator transaction binding the contract method 0xbcc52b9a. +// +// Solidity: function testWithdrawAndcallZETAFailsIfAmountIsZero() returns() +func (_GatewayZEVMInboundTest *GatewayZEVMInboundTestTransactor) TestWithdrawAndcallZETAFailsIfAmountIsZero(opts *bind.TransactOpts) (*types.Transaction, error) { + return _GatewayZEVMInboundTest.contract.Transact(opts, "testWithdrawAndcallZETAFailsIfAmountIsZero") +} + +// TestWithdrawAndcallZETAFailsIfAmountIsZero is a paid mutator transaction binding the contract method 0xbcc52b9a. +// +// Solidity: function testWithdrawAndcallZETAFailsIfAmountIsZero() returns() +func (_GatewayZEVMInboundTest *GatewayZEVMInboundTestSession) TestWithdrawAndcallZETAFailsIfAmountIsZero() (*types.Transaction, error) { + return _GatewayZEVMInboundTest.Contract.TestWithdrawAndcallZETAFailsIfAmountIsZero(&_GatewayZEVMInboundTest.TransactOpts) +} + +// TestWithdrawAndcallZETAFailsIfAmountIsZero is a paid mutator transaction binding the contract method 0xbcc52b9a. +// +// Solidity: function testWithdrawAndcallZETAFailsIfAmountIsZero() returns() +func (_GatewayZEVMInboundTest *GatewayZEVMInboundTestTransactorSession) TestWithdrawAndcallZETAFailsIfAmountIsZero() (*types.Transaction, error) { + return _GatewayZEVMInboundTest.Contract.TestWithdrawAndcallZETAFailsIfAmountIsZero(&_GatewayZEVMInboundTest.TransactOpts) +} + // TestWithdrawZETA is a paid mutator transaction binding the contract method 0xea37902f. // // Solidity: function testWithdrawZETA() returns() @@ -655,6 +739,27 @@ func (_GatewayZEVMInboundTest *GatewayZEVMInboundTestTransactorSession) TestWith return _GatewayZEVMInboundTest.Contract.TestWithdrawZETA(&_GatewayZEVMInboundTest.TransactOpts) } +// TestWithdrawZETAFailsIfAmountIsZero is a paid mutator transaction binding the contract method 0x21aeb18c. +// +// Solidity: function testWithdrawZETAFailsIfAmountIsZero() returns() +func (_GatewayZEVMInboundTest *GatewayZEVMInboundTestTransactor) TestWithdrawZETAFailsIfAmountIsZero(opts *bind.TransactOpts) (*types.Transaction, error) { + return _GatewayZEVMInboundTest.contract.Transact(opts, "testWithdrawZETAFailsIfAmountIsZero") +} + +// TestWithdrawZETAFailsIfAmountIsZero is a paid mutator transaction binding the contract method 0x21aeb18c. +// +// Solidity: function testWithdrawZETAFailsIfAmountIsZero() returns() +func (_GatewayZEVMInboundTest *GatewayZEVMInboundTestSession) TestWithdrawZETAFailsIfAmountIsZero() (*types.Transaction, error) { + return _GatewayZEVMInboundTest.Contract.TestWithdrawZETAFailsIfAmountIsZero(&_GatewayZEVMInboundTest.TransactOpts) +} + +// TestWithdrawZETAFailsIfAmountIsZero is a paid mutator transaction binding the contract method 0x21aeb18c. +// +// Solidity: function testWithdrawZETAFailsIfAmountIsZero() returns() +func (_GatewayZEVMInboundTest *GatewayZEVMInboundTestTransactorSession) TestWithdrawZETAFailsIfAmountIsZero() (*types.Transaction, error) { + return _GatewayZEVMInboundTest.Contract.TestWithdrawZETAFailsIfAmountIsZero(&_GatewayZEVMInboundTest.TransactOpts) +} + // TestWithdrawZETAFailsIfNoAllowance is a paid mutator transaction binding the contract method 0xdde7e967. // // Solidity: function testWithdrawZETAFailsIfNoAllowance() returns() @@ -676,6 +781,27 @@ func (_GatewayZEVMInboundTest *GatewayZEVMInboundTestTransactorSession) TestWith return _GatewayZEVMInboundTest.Contract.TestWithdrawZETAFailsIfNoAllowance(&_GatewayZEVMInboundTest.TransactOpts) } +// TestWithdrawZETAFailsIfNoBalance is a paid mutator transaction binding the contract method 0x6221b509. +// +// Solidity: function testWithdrawZETAFailsIfNoBalance() returns() +func (_GatewayZEVMInboundTest *GatewayZEVMInboundTestTransactor) TestWithdrawZETAFailsIfNoBalance(opts *bind.TransactOpts) (*types.Transaction, error) { + return _GatewayZEVMInboundTest.contract.Transact(opts, "testWithdrawZETAFailsIfNoBalance") +} + +// TestWithdrawZETAFailsIfNoBalance is a paid mutator transaction binding the contract method 0x6221b509. +// +// Solidity: function testWithdrawZETAFailsIfNoBalance() returns() +func (_GatewayZEVMInboundTest *GatewayZEVMInboundTestSession) TestWithdrawZETAFailsIfNoBalance() (*types.Transaction, error) { + return _GatewayZEVMInboundTest.Contract.TestWithdrawZETAFailsIfNoBalance(&_GatewayZEVMInboundTest.TransactOpts) +} + +// TestWithdrawZETAFailsIfNoBalance is a paid mutator transaction binding the contract method 0x6221b509. +// +// Solidity: function testWithdrawZETAFailsIfNoBalance() returns() +func (_GatewayZEVMInboundTest *GatewayZEVMInboundTestTransactorSession) TestWithdrawZETAFailsIfNoBalance() (*types.Transaction, error) { + return _GatewayZEVMInboundTest.Contract.TestWithdrawZETAFailsIfNoBalance(&_GatewayZEVMInboundTest.TransactOpts) +} + // TestWithdrawZETAWithMessage is a paid mutator transaction binding the contract method 0x18a4cfdc. // // Solidity: function testWithdrawZETAWithMessage() returns() @@ -760,6 +886,90 @@ func (_GatewayZEVMInboundTest *GatewayZEVMInboundTestTransactorSession) TestWith return _GatewayZEVMInboundTest.Contract.TestWithdrawZRC20FailsIfNoAllowance(&_GatewayZEVMInboundTest.TransactOpts) } +// TestWithdrawZRC20FailsIfNoBalanceForGasFee is a paid mutator transaction binding the contract method 0xceccfab3. +// +// Solidity: function testWithdrawZRC20FailsIfNoBalanceForGasFee() returns() +func (_GatewayZEVMInboundTest *GatewayZEVMInboundTestTransactor) TestWithdrawZRC20FailsIfNoBalanceForGasFee(opts *bind.TransactOpts) (*types.Transaction, error) { + return _GatewayZEVMInboundTest.contract.Transact(opts, "testWithdrawZRC20FailsIfNoBalanceForGasFee") +} + +// TestWithdrawZRC20FailsIfNoBalanceForGasFee is a paid mutator transaction binding the contract method 0xceccfab3. +// +// Solidity: function testWithdrawZRC20FailsIfNoBalanceForGasFee() returns() +func (_GatewayZEVMInboundTest *GatewayZEVMInboundTestSession) TestWithdrawZRC20FailsIfNoBalanceForGasFee() (*types.Transaction, error) { + return _GatewayZEVMInboundTest.Contract.TestWithdrawZRC20FailsIfNoBalanceForGasFee(&_GatewayZEVMInboundTest.TransactOpts) +} + +// TestWithdrawZRC20FailsIfNoBalanceForGasFee is a paid mutator transaction binding the contract method 0xceccfab3. +// +// Solidity: function testWithdrawZRC20FailsIfNoBalanceForGasFee() returns() +func (_GatewayZEVMInboundTest *GatewayZEVMInboundTestTransactorSession) TestWithdrawZRC20FailsIfNoBalanceForGasFee() (*types.Transaction, error) { + return _GatewayZEVMInboundTest.Contract.TestWithdrawZRC20FailsIfNoBalanceForGasFee(&_GatewayZEVMInboundTest.TransactOpts) +} + +// TestWithdrawZRC20FailsIfNoBalanceForTransfer is a paid mutator transaction binding the contract method 0xfdad0ad0. +// +// Solidity: function testWithdrawZRC20FailsIfNoBalanceForTransfer() returns() +func (_GatewayZEVMInboundTest *GatewayZEVMInboundTestTransactor) TestWithdrawZRC20FailsIfNoBalanceForTransfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _GatewayZEVMInboundTest.contract.Transact(opts, "testWithdrawZRC20FailsIfNoBalanceForTransfer") +} + +// TestWithdrawZRC20FailsIfNoBalanceForTransfer is a paid mutator transaction binding the contract method 0xfdad0ad0. +// +// Solidity: function testWithdrawZRC20FailsIfNoBalanceForTransfer() returns() +func (_GatewayZEVMInboundTest *GatewayZEVMInboundTestSession) TestWithdrawZRC20FailsIfNoBalanceForTransfer() (*types.Transaction, error) { + return _GatewayZEVMInboundTest.Contract.TestWithdrawZRC20FailsIfNoBalanceForTransfer(&_GatewayZEVMInboundTest.TransactOpts) +} + +// TestWithdrawZRC20FailsIfNoBalanceForTransfer is a paid mutator transaction binding the contract method 0xfdad0ad0. +// +// Solidity: function testWithdrawZRC20FailsIfNoBalanceForTransfer() returns() +func (_GatewayZEVMInboundTest *GatewayZEVMInboundTestTransactorSession) TestWithdrawZRC20FailsIfNoBalanceForTransfer() (*types.Transaction, error) { + return _GatewayZEVMInboundTest.Contract.TestWithdrawZRC20FailsIfNoBalanceForTransfer(&_GatewayZEVMInboundTest.TransactOpts) +} + +// TestWithdrawZRC20FailsIfReceiverIsZeroAddress is a paid mutator transaction binding the contract method 0x83ababa9. +// +// Solidity: function testWithdrawZRC20FailsIfReceiverIsZeroAddress() returns() +func (_GatewayZEVMInboundTest *GatewayZEVMInboundTestTransactor) TestWithdrawZRC20FailsIfReceiverIsZeroAddress(opts *bind.TransactOpts) (*types.Transaction, error) { + return _GatewayZEVMInboundTest.contract.Transact(opts, "testWithdrawZRC20FailsIfReceiverIsZeroAddress") +} + +// TestWithdrawZRC20FailsIfReceiverIsZeroAddress is a paid mutator transaction binding the contract method 0x83ababa9. +// +// Solidity: function testWithdrawZRC20FailsIfReceiverIsZeroAddress() returns() +func (_GatewayZEVMInboundTest *GatewayZEVMInboundTestSession) TestWithdrawZRC20FailsIfReceiverIsZeroAddress() (*types.Transaction, error) { + return _GatewayZEVMInboundTest.Contract.TestWithdrawZRC20FailsIfReceiverIsZeroAddress(&_GatewayZEVMInboundTest.TransactOpts) +} + +// TestWithdrawZRC20FailsIfReceiverIsZeroAddress is a paid mutator transaction binding the contract method 0x83ababa9. +// +// Solidity: function testWithdrawZRC20FailsIfReceiverIsZeroAddress() returns() +func (_GatewayZEVMInboundTest *GatewayZEVMInboundTestTransactorSession) TestWithdrawZRC20FailsIfReceiverIsZeroAddress() (*types.Transaction, error) { + return _GatewayZEVMInboundTest.Contract.TestWithdrawZRC20FailsIfReceiverIsZeroAddress(&_GatewayZEVMInboundTest.TransactOpts) +} + +// TestWithdrawZRC20FailsIsAmountIs0 is a paid mutator transaction binding the contract method 0xba800c91. +// +// Solidity: function testWithdrawZRC20FailsIsAmountIs0() returns() +func (_GatewayZEVMInboundTest *GatewayZEVMInboundTestTransactor) TestWithdrawZRC20FailsIsAmountIs0(opts *bind.TransactOpts) (*types.Transaction, error) { + return _GatewayZEVMInboundTest.contract.Transact(opts, "testWithdrawZRC20FailsIsAmountIs0") +} + +// TestWithdrawZRC20FailsIsAmountIs0 is a paid mutator transaction binding the contract method 0xba800c91. +// +// Solidity: function testWithdrawZRC20FailsIsAmountIs0() returns() +func (_GatewayZEVMInboundTest *GatewayZEVMInboundTestSession) TestWithdrawZRC20FailsIsAmountIs0() (*types.Transaction, error) { + return _GatewayZEVMInboundTest.Contract.TestWithdrawZRC20FailsIsAmountIs0(&_GatewayZEVMInboundTest.TransactOpts) +} + +// TestWithdrawZRC20FailsIsAmountIs0 is a paid mutator transaction binding the contract method 0xba800c91. +// +// Solidity: function testWithdrawZRC20FailsIsAmountIs0() returns() +func (_GatewayZEVMInboundTest *GatewayZEVMInboundTestTransactorSession) TestWithdrawZRC20FailsIsAmountIs0() (*types.Transaction, error) { + return _GatewayZEVMInboundTest.Contract.TestWithdrawZRC20FailsIsAmountIs0(&_GatewayZEVMInboundTest.TransactOpts) +} + // TestWithdrawZRC20WithMessage is a paid mutator transaction binding the contract method 0x1e63d2b9. // // Solidity: function testWithdrawZRC20WithMessage() returns() diff --git a/v2/pkg/gatewayzevm.t.sol/gatewayzevmoutboundtest.go b/v2/pkg/gatewayzevm.t.sol/gatewayzevmoutboundtest.go index ff2fe774..4dcd5094 100644 --- a/v2/pkg/gatewayzevm.t.sol/gatewayzevmoutboundtest.go +++ b/v2/pkg/gatewayzevm.t.sol/gatewayzevmoutboundtest.go @@ -49,8 +49,8 @@ type StdInvariantFuzzSelector struct { // GatewayZEVMOutboundTestMetaData contains all meta data concerning the GatewayZEVMOutboundTest contract. var GatewayZEVMOutboundTestMetaData = &bind.MetaData{ - ABI: "[{\"type\":\"function\",\"name\":\"IS_TEST\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"PAUSER_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeArtifacts\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedArtifacts_\",\"type\":\"string[]\",\"internalType\":\"string[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeContracts\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedContracts_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeSelectors\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedSelectors_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzSelector[]\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"selectors\",\"type\":\"bytes4[]\",\"internalType\":\"bytes4[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeSenders\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedSenders_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"failed\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"setUp\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"targetArtifactSelectors\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedArtifactSelectors_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzArtifactSelector[]\",\"components\":[{\"name\":\"artifact\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"selectors\",\"type\":\"bytes4[]\",\"internalType\":\"bytes4[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetArtifacts\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedArtifacts_\",\"type\":\"string[]\",\"internalType\":\"string[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetContracts\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedContracts_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetInterfaces\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedInterfaces_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzInterface[]\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"artifacts\",\"type\":\"string[]\",\"internalType\":\"string[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetSelectors\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedSelectors_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzSelector[]\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"selectors\",\"type\":\"bytes4[]\",\"internalType\":\"bytes4[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetSenders\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedSenders_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"testDeposit\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositAndRevertZRC20AndCallZContract\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositAndRevertZRC20AndCallZContractFailsITargetIsFungibleModule\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositAndRevertZRC20AndCallZContractFailsITargetIsGateway\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositAndRevertZRC20AndCallZContractFailsIfSenderIsNotFungibleModule\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositFailsIfSenderNotFungibleModule\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositFailsIfTargetIsFungibleModule\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositFailsIfTargetIsGateway\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositTogglePause\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositZETAAndCallZContract\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositZETAAndCallZContractFailsIfSenderIsNotFungibleModule\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositZETAAndCallZContractFailsIfTargetIsFungibleModule\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositZETAAndCallZContractFailsIfTargetIsGateway\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositZRC20AndCallZContract\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositZRC20AndCallZContractFailsIfSenderIsNotFungibleModule\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositZRC20AndCallZContractIfTargetIsFungibleModule\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositZRC20AndCallZContractIfTargetIsGateway\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testExecuteRevertZContract\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testExecuteRevertZContractIfSenderIsNotFungibleModule\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testExecuteZContract\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testExecuteZContractFailsIfSenderIsNotFungibleModule\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"event\",\"name\":\"Call\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"chainId\",\"type\":\"uint256\",\"indexed\":true,\"internalType\":\"uint256\"},{\"name\":\"receiver\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"message\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ContextData\",\"inputs\":[{\"name\":\"origin\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"chainID\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"msgSender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"message\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ContextDataRevert\",\"inputs\":[{\"name\":\"origin\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"chainID\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"msgSender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"message\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Withdrawal\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"chainId\",\"type\":\"uint256\",\"indexed\":true,\"internalType\":\"uint256\"},{\"name\":\"receiver\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"zrc20\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"gasfee\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"protocolFlatFee\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"message\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log\",\"inputs\":[{\"name\":\"\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_address\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_array\",\"inputs\":[{\"name\":\"val\",\"type\":\"uint256[]\",\"indexed\":false,\"internalType\":\"uint256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_array\",\"inputs\":[{\"name\":\"val\",\"type\":\"int256[]\",\"indexed\":false,\"internalType\":\"int256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_array\",\"inputs\":[{\"name\":\"val\",\"type\":\"address[]\",\"indexed\":false,\"internalType\":\"address[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_bytes\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_bytes32\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_int\",\"inputs\":[{\"name\":\"\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_address\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_array\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"uint256[]\",\"indexed\":false,\"internalType\":\"uint256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_array\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"int256[]\",\"indexed\":false,\"internalType\":\"int256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_array\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"address[]\",\"indexed\":false,\"internalType\":\"address[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_bytes\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_bytes32\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_decimal_int\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"},{\"name\":\"decimals\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_decimal_uint\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"decimals\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_int\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_string\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_uint\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_string\",\"inputs\":[{\"name\":\"\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_uint\",\"inputs\":[{\"name\":\"\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"logs\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"AccessControlUnauthorizedAccount\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"neededRole\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"type\":\"error\",\"name\":\"CallerIsNotFungibleModule\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"EnforcedPause\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"FailedZetaSent\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"GasFeeTransferFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientZRC20Amount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidTarget\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OnlyWZETAOrFungible\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"WithdrawalFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZRC20BurnFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZRC20DepositFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZRC20TransferFailed\",\"inputs\":[]}]", - Bin: "0x6080604052600c8054600160ff199182168117909255601f80549091169091179055348015602c57600080fd5b5061e0f48061003c6000396000f3fe608060405234801561001057600080fd5b50600436106102415760003560e01c80637f924c4e11610145578063c3248272116100bd578063e63ab1e91161008c578063f5a3573311610071578063f5a35733146103cf578063fa7626d4146103d7578063fc79171b146103e457600080fd5b8063e63ab1e914610392578063eba3c49c146103c757600080fd5b8063c324827214610372578063cced12c71461037a578063df690b9a14610382578063e20c9f711461038a57600080fd5b8063aed71d9711610114578063b5508aa9116100f9578063b5508aa91461034a578063ba414fa614610352578063c27253181461036a57600080fd5b8063aed71d971461033a578063b0464fdc1461034257600080fd5b80637f924c4e1461030057806385226c8114610308578063916a17c61461031d57806396d9d8761461033257600080fd5b806331d09956116101d857806344b2a40b116101a7578063597cfeb01161018c578063597cfeb0146102db57806366d9a9a0146102e3578063720b9aa9146102f857600080fd5b806344b2a40b146102cb578063461fc5af146102d357600080fd5b806331d09956146102ab5780633a25c460146102b35780633e5e3c23146102bb5780633f7286f4146102c357600080fd5b80631c785a14116102145780631c785a14146102685780631ed7831c146102705780631fe687971461028e5780632ade38801461029657600080fd5b806309f080da146102465780630a9254e414610250578063104b352214610258578063198d5ca414610260575b600080fd5b61024e6103ec565b005b61024e6105e0565b61024e61104d565b61024e61123f565b61024e6114f9565b610278611e42565b6040516102859190618ba0565b60405180910390f35b61024e611ea4565b61029e6123d3565b6040516102859190618c3c565b61024e612515565b61024e6126d4565b61027861288f565b6102786128ef565b61024e61294f565b61024e612ad7565b61024e612c95565b6102eb61306b565b6040516102859190618da2565b61024e6131ed565b61024e613460565b6103106134b2565b6040516102859190618e40565b610325613582565b6040516102859190618eb7565b61024e61367d565b61024e6137d0565b610325613adc565b610310613bd7565b61035a613ca7565b6040519015158152602001610285565b61024e613d7b565b61024e613f34565b61024e6140ed565b61024e6142d8565b610278614496565b6103b97f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b604051908152602001610285565b61024e6144f6565b61024e6146b4565b601f5461035a9060ff1681565b61024e61486b565b60006040516020016103fd90618f4e565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401526001838301528151630618f58760e51b81527f2b2add3d0000000000000000000000000000000000000000000000000000000060048201529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163c31eb0e091602480830192600092919082900301818387803b1580156104c757600080fd5b505af11580156104db573d6000803e3d6000fd5b505060255460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b15801561053857600080fd5b505af115801561054c573d6000803e3d6000fd5b50506020546021546024546040517f5af659670000000000000000000000000000000000000000000000000000000081526001600160a01b039384169550635af6596794506105aa9387938116926001929116908990600401618fc9565b600060405180830381600087803b1580156105c457600080fd5b505af11580156105d8573d6000803e3d6000fd5b505050505050565b602580547fffffffffffffffffffffffff000000000000000000000000000000000000000090811630179091556026805490911661123417905560405161062690618ab3565b604051809103906000f080158015610642573d6000803e3d6000fd5b50602280547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03928316908117909155604080518082018252600f81527f476174657761795a45564d2e736f6c000000000000000000000000000000000060208201526025549151602481019390935292166044820152610726919060640160408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f485cc955000000000000000000000000000000000000000000000000000000001790526149a2565b601f80547fffffffffffffffffffffff0000000000000000000000000000000000000000ff166101006001600160a01b039384168102919091179182905560208054919092049092167fffffffffffffffffffffffff000000000000000000000000000000000000000090921682178155604080517f3ce4a5bc0000000000000000000000000000000000000000000000000000000081529051633ce4a5bc926004808401939192918290030181865afa1580156107e8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061080c919061901e565b602780547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039290921691909117905560405161085090618ac0565b604051809103906000f08015801561086c573d6000803e3d6000fd5b50602480547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039283161781556027546040517f06447d5600000000000000000000000000000000000000000000000000000000815292166004830152737109709ecfa91a80626ff3989d68f67f5b1dd12d916306447d569101600060405180830381600087803b15801561090857600080fd5b505af115801561091c573d6000803e3d6000fd5b50505050600080600060405161093190618acd565b6001600160a01b03938416815291831660208301529091166040820152606001604051809103906000f08015801561096d573d6000803e3d6000fd5b50602380547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039283169081179091556020546040516012936001938493600093919216906109c390618ada565b6109d296959493929190619047565b604051809103906000f0801580156109ee573d6000803e3d6000fd5b50602180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039283169081179091556023546040517fee2815ba0000000000000000000000000000000000000000000000000000000081526001600482015260248101929092529091169063ee2815ba90604401600060405180830381600087803b158015610a8557600080fd5b505af1158015610a99573d6000803e3d6000fd5b50506023546040517fa7cb050700000000000000000000000000000000000000000000000000000000815260016004820181905260248201526001600160a01b03909116925063a7cb05079150604401600060405180830381600087803b158015610b0357600080fd5b505af1158015610b17573d6000803e3d6000fd5b50506027546040517fc88a5e6d0000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152633b9aca006024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c88a5e6d9150604401600060405180830381600087803b158015610b9757600080fd5b505af1158015610bab573d6000803e3d6000fd5b50505050602260009054906101000a90046001600160a01b03166001600160a01b031663d0e30db0600a6040518263ffffffff1660e01b81526004016000604051808303818588803b158015610c0057600080fd5b505af1158015610c14573d6000803e3d6000fd5b50506022546020546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152600a60248201529116935063095ea7b3925060440190506020604051808303816000875af1158015610c88573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cac919061913c565b506021546025546040517f47e7ef240000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620186a060248201529116906347e7ef24906044016020604051808303816000875af1158015610d1d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d41919061913c565b507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b03166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610da057600080fd5b505af1158015610db4573d6000803e3d6000fd5b50506025546040517f06447d560000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506306447d569150602401600060405180830381600087803b158015610e2a57600080fd5b505af1158015610e3e573d6000803e3d6000fd5b50506021546020546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620186a060248201529116925063095ea7b391506044016020604051808303816000875af1158015610eb2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ed6919061913c565b50602260009054906101000a90046001600160a01b03166001600160a01b031663d0e30db0600a6040518263ffffffff1660e01b81526004016000604051808303818588803b158015610f2857600080fd5b505af1158015610f3c573d6000803e3d6000fd5b50506022546020546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152600a60248201529116935063095ea7b3925060440190506020604051808303816000875af1158015610fb0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fd4919061913c565b507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b03166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561103357600080fd5b505af1158015611047573d6000803e3d6000fd5b50505050565b60405160019060009061106290602001618f4e565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401526001838301528151630618f58760e51b81527f82d5d76a0000000000000000000000000000000000000000000000000000000060048201529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163c31eb0e091602480830192600092919082900301818387803b15801561112c57600080fd5b505af1158015611140573d6000803e3d6000fd5b505060275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b15801561119d57600080fd5b505af11580156111b1573d6000803e3d6000fd5b50506020546027546040517f21501a950000000000000000000000000000000000000000000000000000000081526001600160a01b0392831694506321501a9593506112089286928992911690889060040161915e565b600060405180830381600087803b15801561122257600080fd5b505af1158015611236573d6000803e3d6000fd5b50505050505050565b6021546026546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260019260009216906370a0823190602401602060405180830381865afa1580156112a9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112cd9190619198565b90506112da6000826149c1565b60255460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561133357600080fd5b505af1158015611347573d6000803e3d6000fd5b5050604051630618f58760e51b81527f2b2add3d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b1580156113b757600080fd5b505af11580156113cb573d6000803e3d6000fd5b50506020546021546026546040517ff45346dc0000000000000000000000000000000000000000000000000000000081526001600160a01b0392831660048201526024810188905290821660448201529116925063f45346dc9150606401600060405180830381600087803b15801561144357600080fd5b505af1158015611457573d6000803e3d6000fd5b50506021546026546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260009450911691506370a0823190602401602060405180830381865afa1580156114c3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114e79190619198565b90506114f46000826149c1565b505050565b60275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561155257600080fd5b505af1158015611566573d6000803e3d6000fd5b5050602754604080516001600160a01b0390921660248301527f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a60448084019190915281518084039091018152606490920181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb3925061165191906004016191b1565b600060405180830381600087803b15801561166b57600080fd5b505af115801561167f573d6000803e3d6000fd5b50505050602060009054906101000a90046001600160a01b03166001600160a01b0316638456cb596040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156116d357600080fd5b505af11580156116e7573d6000803e3d6000fd5b505060275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b15801561174457600080fd5b505af1158015611758573d6000803e3d6000fd5b5050602754604080516001600160a01b0390921660248301527f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a60448084019190915281518084039091018152606490920181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb3925061184391906004016191b1565b600060405180830381600087803b15801561185d57600080fd5b505af1158015611871573d6000803e3d6000fd5b50505050602060009054906101000a90046001600160a01b03166001600160a01b0316633f4ba83a6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156118c557600080fd5b505af11580156118d9573d6000803e3d6000fd5b505060255460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b15801561193657600080fd5b505af115801561194a573d6000803e3d6000fd5b50505050602060009054906101000a90046001600160a01b03166001600160a01b0316638456cb596040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561199e57600080fd5b505af11580156119b2573d6000803e3d6000fd5b5050604051630618f58760e51b81527fd93c066500000000000000000000000000000000000000000000000000000000600482015260019250737109709ecfa91a80626ff3989d68f67f5b1dd12d915063c31eb0e090602401600060405180830381600087803b158015611a2557600080fd5b505af1158015611a39573d6000803e3d6000fd5b505060275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b158015611a9657600080fd5b505af1158015611aaa573d6000803e3d6000fd5b50506020546021546026546040517ff45346dc0000000000000000000000000000000000000000000000000000000081526001600160a01b0392831660048201526024810187905290821660448201529116925063f45346dc9150606401600060405180830381600087803b158015611b2257600080fd5b505af1158015611b36573d6000803e3d6000fd5b505060255460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b158015611b9357600080fd5b505af1158015611ba7573d6000803e3d6000fd5b50505050602060009054906101000a90046001600160a01b03166001600160a01b0316633f4ba83a6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015611bfb57600080fd5b505af1158015611c0f573d6000803e3d6000fd5b50506021546026546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260009450911691506370a08231906024015b602060405180830381865afa158015611c7c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ca09190619198565b9050611cad6000826149c1565b60275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015611d0657600080fd5b505af1158015611d1a573d6000803e3d6000fd5b50506020546021546026546040517ff45346dc0000000000000000000000000000000000000000000000000000000081526001600160a01b0392831660048201526024810188905290821660448201529116925063f45346dc9150606401600060405180830381600087803b158015611d9257600080fd5b505af1158015611da6573d6000803e3d6000fd5b50506021546026546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260009450911691506370a0823190602401602060405180830381865afa158015611e12573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e369190619198565b90506114f483826149c1565b60606016805480602002602001604051908101604052809291908181526020018280548015611e9a57602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311611e7c575b5050505050905090565b6022546027546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260019260009216906370a0823190602401602060405180830381865afa158015611f0e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f329190619198565b6022546020546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201529293506000929116906370a0823190602401602060405180830381865afa158015611f9d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fc19190619198565b6024546040519192506001600160a01b03163190600090611fe490602001618f4e565b60408051601f19818403018152606080840190925260205490911b6bffffffffffffffffffffffff191660808301529150600090806094810160408051808303601f190181529181529082526027546001600160a01b03908116602084015260019282018390526024805492517f81bad6f300000000000000000000000000000000000000000000000000000000815260048101859052908101849052604481018490526064810193909352166084820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b1580156120d257600080fd5b505af11580156120e6573d6000803e3d6000fd5b5050602080546040517fcdc8ee677dc5ebe680fb18cebda5e26ba5ea1f0ba504a47e2a9a2ecb476dc98e945061214193506001600160a01b03909116910160609190911b6bffffffffffffffffffffffff1916815260140190565b60408051601f1981840301815290829052602754602054612171936001600160a01b03928316928c9216906191c4565b60405180910390a160275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156121d257600080fd5b505af11580156121e6573d6000803e3d6000fd5b50506020546024546040517f21501a950000000000000000000000000000000000000000000000000000000081526001600160a01b0392831694506321501a95935061223d9286928c92911690889060040161915e565b600060405180830381600087803b15801561225757600080fd5b505af115801561226b573d6000803e3d6000fd5b50506022546027546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260009450911691506370a0823190602401602060405180830381865afa1580156122d7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122fb9190619198565b905061231061230a8888619266565b826149c1565b6022546020546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260009291909116906370a0823190602401602060405180830381865afa15801561237a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061239e9190619198565b90506123aa86826149c1565b6123c96123b78987619279565b6024546001600160a01b0316316149c1565b5050505050505050565b6060601e805480602002602001604051908101604052809291908181526020016000905b8282101561250c57600084815260208082206040805180820182526002870290920180546001600160a01b03168352600181018054835181870281018701909452808452939591948681019491929084015b828210156124f55783829060005260206000200180546124689061928c565b80601f01602080910402602001604051908101604052809291908181526020018280546124949061928c565b80156124e15780601f106124b6576101008083540402835291602001916124e1565b820191906000526020600020905b8154815290600101906020018083116124c457829003601f168201915b505050505081526020019060010190612449565b5050505081525050815260200190600101906123f7565b50505050905090565b600060405160200161252690618f4e565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401526001838301528151630618f58760e51b81527f2b2add3d0000000000000000000000000000000000000000000000000000000060048201529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163c31eb0e091602480830192600092919082900301818387803b1580156125f057600080fd5b505af1158015612604573d6000803e3d6000fd5b505060255460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa791506024015b600060405180830381600087803b15801561266257600080fd5b505af1158015612676573d6000803e3d6000fd5b50506020546021546024546040517f309f50040000000000000000000000000000000000000000000000000000000081526001600160a01b03938416955063309f500494506105aa9387938116926001929116908990600401618fc9565b6040516001906000906126e990602001618f4e565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401526001838301528151630618f58760e51b81527f2b2add3d0000000000000000000000000000000000000000000000000000000060048201529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163c31eb0e091602480830192600092919082900301818387803b1580156127b357600080fd5b505af11580156127c7573d6000803e3d6000fd5b505060255460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b15801561282457600080fd5b505af1158015612838573d6000803e3d6000fd5b50506020546024546040517f21501a950000000000000000000000000000000000000000000000000000000081526001600160a01b0392831694506321501a9593506112089286928992911690889060040161915e565b60606018805480602002602001604051908101604052809291908181526020018280548015611e9a576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311611e7c575050505050905090565b60606017805480602002602001604051908101604052809291908181526020018280548015611e9a576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311611e7c575050505050905090565b60275460405163ca669fa760e01b81526001600160a01b039091166004820152600190737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156129ab57600080fd5b505af11580156129bf573d6000803e3d6000fd5b5050604051630618f58760e51b81527f82d5d76a000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b158015612a2f57600080fd5b505af1158015612a43573d6000803e3d6000fd5b50506020546021546027546040517ff45346dc0000000000000000000000000000000000000000000000000000000081526001600160a01b0392831660048201526024810187905290821660448201529116925063f45346dc91506064015b600060405180830381600087803b158015612abc57600080fd5b505af1158015612ad0573d6000803e3d6000fd5b5050505050565b6000604051602001612ae890618f4e565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401526001838301528151630618f58760e51b81527f2b2add3d0000000000000000000000000000000000000000000000000000000060048201529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163c31eb0e091602480830192600092919082900301818387803b158015612bb257600080fd5b505af1158015612bc6573d6000803e3d6000fd5b505060255460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b158015612c2357600080fd5b505af1158015612c37573d6000803e3d6000fd5b50506020546021546024546040517fc39aca370000000000000000000000000000000000000000000000000000000081526001600160a01b03938416955063c39aca3794506105aa9387938116926001929116908990600401618fc9565b602154602480546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260009391909116916370a082319101602060405180830381865afa158015612cfe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d229190619198565b9050612d2f6000826149c1565b6000604051602001612d4090618f4e565b60408051601f19818403018152606080840190925260205490911b6bffffffffffffffffffffffff191660808301529150600090806094810160408051808303601f190181529181529082526027546001600160a01b03908116602084015260019282018390526024805492517f81bad6f300000000000000000000000000000000000000000000000000000000815260048101859052908101849052604481018490526064810193909352166084820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b158015612e2e57600080fd5b505af1158015612e42573d6000803e3d6000fd5b5050602080546040517fcdc8ee677dc5ebe680fb18cebda5e26ba5ea1f0ba504a47e2a9a2ecb476dc98e9450612e9d93506001600160a01b03909116910160609190911b6bffffffffffffffffffffffff1916815260140190565b60408051601f1981840301815290829052602754602054612ece936001600160a01b039283169260019216906191c4565b60405180910390a160275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015612f2f57600080fd5b505af1158015612f43573d6000803e3d6000fd5b50506020546021546024546040517fc39aca370000000000000000000000000000000000000000000000000000000081526001600160a01b03938416955063c39aca379450612fa19387938116926001929116908990600401618fc9565b600060405180830381600087803b158015612fbb57600080fd5b505af1158015612fcf573d6000803e3d6000fd5b5050602154602480546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260009550921692506370a082319101602060405180830381865afa15801561303a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061305e9190619198565b90506110476001826149c1565b6060601b805480602002602001604051908101604052809291908181526020016000905b8282101561250c57838290600052602060002090600202016040518060400160405290816000820180546130c29061928c565b80601f01602080910402602001604051908101604052809291908181526020018280546130ee9061928c565b801561313b5780601f106131105761010080835404028352916020019161313b565b820191906000526020600020905b81548152906001019060200180831161311e57829003601f168201915b50505050508152602001600182018054806020026020016040519081016040528092919081815260200182805480156131d557602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190600401906020826003010492830192600103820291508084116131825790505b5050505050815250508152602001906001019061308f565b60006040516020016131fe90618f4e565b60408051601f19818403018152606080840190925260205490911b6bffffffffffffffffffffffff191660808301529150600090806094810160408051808303601f190181529181529082526027546001600160a01b03908116602084015260019282018390526024805492517f81bad6f300000000000000000000000000000000000000000000000000000000815260048101859052908101849052604481018490526064810193909352166084820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b1580156132ec57600080fd5b505af1158015613300573d6000803e3d6000fd5b5050602080546040517fcdc8ee677dc5ebe680fb18cebda5e26ba5ea1f0ba504a47e2a9a2ecb476dc98e945061335b93506001600160a01b03909116910160609190911b6bffffffffffffffffffffffff1916815260140190565b60408051601f198184030181529082905260275460205461338c936001600160a01b039283169260019216906191c4565b60405180910390a160275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa7906024015b600060405180830381600087803b1580156133ee57600080fd5b505af1158015613402573d6000803e3d6000fd5b50506020546021546024546040517fbcf7f32b0000000000000000000000000000000000000000000000000000000081526001600160a01b03938416955063bcf7f32b94506105aa9387938116926001929116908990600401618fc9565b6021546026546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260019260009216906370a0823190602401611c5f565b6060601a805480602002602001604051908101604052809291908181526020016000905b8282101561250c5783829060005260206000200180546134f59061928c565b80601f01602080910402602001604051908101604052809291908181526020018280546135219061928c565b801561356e5780601f106135435761010080835404028352916020019161356e565b820191906000526020600020905b81548152906001019060200180831161355157829003601f168201915b5050505050815260200190600101906134d6565b6060601d805480602002602001604051908101604052809291908181526020016000905b8282101561250c5760008481526020908190206040805180820182526002860290920180546001600160a01b0316835260018101805483518187028101870190945280845293949193858301939283018282801561366557602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190600401906020826003010492830192600103820291508084116136125790505b505050505081525050815260200190600101906135a6565b60275460405163ca669fa760e01b81526001600160a01b039091166004820152600190737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156136d957600080fd5b505af11580156136ed573d6000803e3d6000fd5b5050604051630618f58760e51b81527f82d5d76a000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b15801561375d57600080fd5b505af1158015613771573d6000803e3d6000fd5b50506020546021546040517ff45346dc0000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260248101869052911660448201819052925063f45346dc9150606401612aa2565b602154602480546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260009391909116916370a082319101602060405180830381865afa158015613839573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061385d9190619198565b905061386a6000826149c1565b600060405160200161387b90618f4e565b60408051601f19818403018152606080840190925260205490911b6bffffffffffffffffffffffff191660808301529150600090806094810160408051808303601f190181529181529082526027546001600160a01b03908116602084015260019282018390526024805492517f81bad6f300000000000000000000000000000000000000000000000000000000815260048101859052908101849052604481018490526064810193909352166084820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b15801561396957600080fd5b505af115801561397d573d6000803e3d6000fd5b5050602080546040517ffdc887992b033668833927e252058e468fac0b6bd196d520f09c61b740e9994894506139d893506001600160a01b03909116910160609190911b6bffffffffffffffffffffffff1916815260140190565b60408051601f1981840301815290829052602754602054613a09936001600160a01b039283169260019216906191c4565b60405180910390a160275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015613a6a57600080fd5b505af1158015613a7e573d6000803e3d6000fd5b50506020546021546024546040517f5af659670000000000000000000000000000000000000000000000000000000081526001600160a01b039384169550635af659679450612fa19387938116926001929116908990600401618fc9565b6060601c805480602002602001604051908101604052809291908181526020016000905b8282101561250c5760008481526020908190206040805180820182526002860290920180546001600160a01b03168352600181018054835181870281018701909452808452939491938583019392830182828015613bbf57602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019060040190602082600301049283019260010382029150808411613b6c5790505b50505050508152505081526020019060010190613b00565b60606019805480602002602001604051908101604052809291908181526020016000905b8282101561250c578382906000526020600020018054613c1a9061928c565b80601f0160208091040260200160405190810160405280929190818152602001828054613c469061928c565b8015613c935780601f10613c6857610100808354040283529160200191613c93565b820191906000526020600020905b815481529060010190602001808311613c7657829003601f168201915b505050505081526020019060010190613bfb565b60085460009060ff1615613cbf575060085460ff1690565b6040517f667f9d70000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d600482018190527f6661696c65640000000000000000000000000000000000000000000000000000602483015260009163667f9d7090604401602060405180830381865afa158015613d50573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613d749190619198565b1415905090565b6000604051602001613d8c90618f4e565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401526001838301528151630618f58760e51b81527f82d5d76a0000000000000000000000000000000000000000000000000000000060048201529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163c31eb0e091602480830192600092919082900301818387803b158015613e5657600080fd5b505af1158015613e6a573d6000803e3d6000fd5b505060275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b158015613ec757600080fd5b505af1158015613edb573d6000803e3d6000fd5b50506020546021546040517fc39aca370000000000000000000000000000000000000000000000000000000081526001600160a01b03928316945063c39aca3793506105aa928692169060019086908990600401618fc9565b6000604051602001613f4590618f4e565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401526001838301528151630618f58760e51b81527f82d5d76a0000000000000000000000000000000000000000000000000000000060048201529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163c31eb0e091602480830192600092919082900301818387803b15801561400f57600080fd5b505af1158015614023573d6000803e3d6000fd5b505060275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b15801561408057600080fd5b505af1158015614094573d6000803e3d6000fd5b50506020546021546040517f5af659670000000000000000000000000000000000000000000000000000000081526001600160a01b039283169450635af6596793506105aa928692169060019086908990600401618fc9565b60006040516020016140fe90618f4e565b60408051601f19818403018152606080840190925260205490911b6bffffffffffffffffffffffff191660808301529150600090806094810160408051808303601f190181529181529082526027546001600160a01b03908116602084015260019282018390526024805492517f81bad6f300000000000000000000000000000000000000000000000000000000815260048101859052908101849052604481018490526064810193909352166084820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b1580156141ec57600080fd5b505af1158015614200573d6000803e3d6000fd5b5050602080546040517ffdc887992b033668833927e252058e468fac0b6bd196d520f09c61b740e99948945061425b93506001600160a01b03909116910160609190911b6bffffffffffffffffffffffff1916815260140190565b60408051601f198184030181529082905260275460205461428c936001600160a01b039283169260019216906191c4565b60405180910390a160275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401612648565b60006040516020016142e990618f4e565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401526001838301528151630618f58760e51b81527f82d5d76a0000000000000000000000000000000000000000000000000000000060048201529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163c31eb0e091602480830192600092919082900301818387803b1580156143b357600080fd5b505af11580156143c7573d6000803e3d6000fd5b505060275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b15801561442457600080fd5b505af1158015614438573d6000803e3d6000fd5b50506020546021546027546040517fc39aca370000000000000000000000000000000000000000000000000000000081526001600160a01b03938416955063c39aca3794506105aa9387938116926001929116908990600401618fc9565b60606015805480602002602001604051908101604052809291908181526020018280548015611e9a576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311611e7c575050505050905090565b600060405160200161450790618f4e565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401526001838301528151630618f58760e51b81527f82d5d76a0000000000000000000000000000000000000000000000000000000060048201529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163c31eb0e091602480830192600092919082900301818387803b1580156145d157600080fd5b505af11580156145e5573d6000803e3d6000fd5b505060275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b15801561464257600080fd5b505af1158015614656573d6000803e3d6000fd5b50506020546021546027546040517f5af659670000000000000000000000000000000000000000000000000000000081526001600160a01b039384169550635af6596794506105aa9387938116926001929116908990600401618fc9565b6040516001906000906146c990602001618f4e565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401526001838301528151630618f58760e51b81527f82d5d76a0000000000000000000000000000000000000000000000000000000060048201529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163c31eb0e091602480830192600092919082900301818387803b15801561479357600080fd5b505af11580156147a7573d6000803e3d6000fd5b505060275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b15801561480457600080fd5b505af1158015614818573d6000803e3d6000fd5b50506020546040517f21501a950000000000000000000000000000000000000000000000000000000081526001600160a01b0390911692506321501a95915061120890849087908590889060040161915e565b600060405160200161487c90618f4e565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401526001838301528151630618f58760e51b81527f2b2add3d0000000000000000000000000000000000000000000000000000000060048201529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163c31eb0e091602480830192600092919082900301818387803b15801561494657600080fd5b505af115801561495a573d6000803e3d6000fd5b505060255460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa791506024016133d4565b60006149ac618ae7565b6149b7848483614a40565b9150505b92915050565b6040517f98296c540000000000000000000000000000000000000000000000000000000081526004810183905260248101829052737109709ecfa91a80626ff3989d68f67f5b1dd12d906398296c549060440160006040518083038186803b158015614a2c57600080fd5b505afa1580156105d8573d6000803e3d6000fd5b600080614a4d8584614abb565b9050614ab06040518060400160405280601d81526020017f4552433139363750726f78792e736f6c3a4552433139363750726f78790000008152508286604051602001614a9b9291906192d9565b60405160208183030381529060405285614ac7565b9150505b9392505050565b6000614ab48383614af5565b60c08101515160009015614aeb57614ae484848460c00151614b10565b9050614ab4565b614ae48484614cb6565b6000614b018383614da1565b614ab483836020015184614ac7565b600080614b1b614db1565b90506000614b298683614e84565b90506000614b40826060015183602001518561532a565b90506000614b508383898961553c565b90506000614b5d826163b9565b602081015181519192509060030b15614bd057898260400151604051602001614b879291906192fb565b60408051601f19818403018152908290527f08c379a0000000000000000000000000000000000000000000000000000000008252614bc7916004016191b1565b60405180910390fd5b6000614c136040518060400160405280601581526020017f4465706c6f79656420746f20616464726573733a200000000000000000000000815250836001616588565b6040517fc6ce059d000000000000000000000000000000000000000000000000000000008152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c6ce059d90614c669084906004016191b1565b602060405180830381865afa158015614c83573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614ca7919061901e565b9b9a5050505050505050505050565b6040517f8d1cc9250000000000000000000000000000000000000000000000000000000081526000908190737109709ecfa91a80626ff3989d68f67f5b1dd12d90638d1cc92590614d0b9087906004016191b1565b600060405180830381865afa158015614d28573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052614d509190810190619464565b90506000614d7e8285604051602001614d6a929190619499565b604051602081830303815290604052616788565b90506001600160a01b0381166149b7578484604051602001614b879291906194c8565b614dad8282600061679b565b5050565b604080518082018252600381527f6f75740000000000000000000000000000000000000000000000000000000000602082015290517fd145736c000000000000000000000000000000000000000000000000000000008152606091737109709ecfa91a80626ff3989d68f67f5b1dd12d91829063d145736c90614e38908490600401619573565b600060405180830381865afa158015614e55573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052614e7d91908101906195ba565b9250505090565b614eb66040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b6000737109709ecfa91a80626ff3989d68f67f5b1dd12d9050614f016040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b614f0a8561689e565b60208201526000614f1a86616c83565b90506000836001600160a01b031663d930a0e66040518163ffffffff1660e01b8152600401600060405180830381865afa158015614f5c573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052614f8491908101906195ba565b86838560200151604051602001614f9e9493929190619603565b60408051601f19818403018152908290527f60f9bb1100000000000000000000000000000000000000000000000000000000825291506000906001600160a01b038616906360f9bb1190614ff69085906004016191b1565b600060405180830381865afa158015615013573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261503b91908101906195ba565b6040517fdb4235f60000000000000000000000000000000000000000000000000000000081529091506001600160a01b0386169063db4235f690615083908490600401619707565b602060405180830381865afa1580156150a0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906150c4919061913c565b6150d95781604051602001614b879190619759565b6040517f49c4fac80000000000000000000000000000000000000000000000000000000081526001600160a01b038616906349c4fac89061511e9084906004016197eb565b600060405180830381865afa15801561513b573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261516391908101906195ba565b84526040517fdb4235f60000000000000000000000000000000000000000000000000000000081526001600160a01b0386169063db4235f6906151aa90849060040161983d565b602060405180830381865afa1580156151c7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906151eb919061913c565b15615280576040517f49c4fac80000000000000000000000000000000000000000000000000000000081526001600160a01b038616906349c4fac89061523590849060040161983d565b600060405180830381865afa158015615252573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261527a91908101906195ba565b60408501525b846001600160a01b03166349c4fac88286600001516040516020016152a5919061988f565b6040516020818303038152906040526040518363ffffffff1660e01b81526004016152d19291906198fb565b600060405180830381865afa1580156152ee573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261531691908101906195ba565b606085015250608083015250949350505050565b60408051600480825260a0820190925260609160009190816020015b60608152602001906001900390816153465790505090506040518060400160405280600481526020017f6772657000000000000000000000000000000000000000000000000000000000815250816000815181106153a6576153a6619920565b60200260200101819052506040518060400160405280600381526020017f2d726c0000000000000000000000000000000000000000000000000000000000815250816001815181106153fa576153fa619920565b602002602001018190525084604051602001615416919061994f565b6040516020818303038152906040528160028151811061543857615438619920565b60200260200101819052508260405160200161545491906199bb565b6040516020818303038152906040528160038151811061547657615476619920565b6020026020010181905250600061548c826163b9565b602080820151604080518082018252600581527f2e6a736f6e000000000000000000000000000000000000000000000000000000818501908152825180840184526000808252908601528251808401909352905182529281019290925291925061551d9060408051808201825260008082526020918201528151808301909252845182528085019082015290616f06565b6155325785604051602001614b8791906199fc565b9695505050505050565b60a0810151604080518082018252600080825260209182015281518083019092528251808352928101910152606090737109709ecfa91a80626ff3989d68f67f5b1dd12d901561558c565b511590565b61570057826020015115615648576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605860248201527f54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f742060448201527f62652075736564207768656e207468652060736b6970566572696679536f757260648201527f6365436f646560206f7074696f6e206973206074727565600000000000000000608482015260a401614bc7565b8260c0015115615700576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605360248201527f54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f742060448201527f62652075736564207768656e207468652060736b69704c6963656e736554797060648201527f6560206f7074696f6e2069732060747275656000000000000000000000000000608482015260a401614bc7565b6040805160ff8082526120008201909252600091816020015b606081526020019060019003908161571957905050905060006040518060400160405280600381526020017f6e7078000000000000000000000000000000000000000000000000000000000081525082828061577490619a8d565b935060ff168151811061578957615789619920565b60200260200101819052506040518060400160405280600d81526020017f302e302e312d616c7068612e37000000000000000000000000000000000000008152506040516020016157da9190619aac565b6040516020818303038152906040528282806157f590619a8d565b935060ff168151811061580a5761580a619920565b60200260200101819052506040518060400160405280600681526020017f6465706c6f79000000000000000000000000000000000000000000000000000081525082828061585790619a8d565b935060ff168151811061586c5761586c619920565b60200260200101819052506040518060400160405280600e81526020017f2d2d636f6e74726163744e616d650000000000000000000000000000000000008152508282806158b990619a8d565b935060ff16815181106158ce576158ce619920565b602002602001018190525087602001518282806158ea90619a8d565b935060ff16815181106158ff576158ff619920565b60200260200101819052506040518060400160405280600e81526020017f2d2d636f6e74726163745061746800000000000000000000000000000000000081525082828061594c90619a8d565b935060ff168151811061596157615961619920565b60209081029190910101528751828261597981619a8d565b935060ff168151811061598e5761598e619920565b60200260200101819052506040518060400160405280600981526020017f2d2d636861696e496400000000000000000000000000000000000000000000008152508282806159db90619a8d565b935060ff16815181106159f0576159f0619920565b6020026020010181905250615a0446616f67565b8282615a0f81619a8d565b935060ff1681518110615a2457615a24619920565b60200260200101819052506040518060400160405280600f81526020017f2d2d6275696c64496e666f46696c650000000000000000000000000000000000815250828280615a7190619a8d565b935060ff1681518110615a8657615a86619920565b602002602001018190525086828280615a9e90619a8d565b935060ff1681518110615ab357615ab3619920565b6020908102919091010152855115615bda5760408051808201909152601581527f2d2d636f6e7374727563746f7242797465636f6465000000000000000000000060208201528282615b0481619a8d565b935060ff1681518110615b1957615b19619920565b60209081029190910101526040517f71aad10d0000000000000000000000000000000000000000000000000000000081526001600160a01b038416906371aad10d90615b699089906004016191b1565b600060405180830381865afa158015615b86573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052615bae91908101906195ba565b8282615bb981619a8d565b935060ff1681518110615bce57615bce619920565b60200260200101819052505b846020015115615caa5760408051808201909152601281527f2d2d766572696679536f75726365436f6465000000000000000000000000000060208201528282615c2381619a8d565b935060ff1681518110615c3857615c38619920565b60200260200101819052506040518060400160405280600581526020017f66616c7365000000000000000000000000000000000000000000000000000000815250828280615c8590619a8d565b935060ff1681518110615c9a57615c9a619920565b6020026020010181905250615e71565b615ce26155878660a0015160408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b615d755760408051808201909152600d81527f2d2d6c6963656e7365547970650000000000000000000000000000000000000060208201528282615d2581619a8d565b935060ff1681518110615d3a57615d3a619920565b60200260200101819052508460a00151604051602001615d5a919061994f565b604051602081830303815290604052828280615c8590619a8d565b8460c00151158015615db8575060408089015181518083018352600080825260209182015282518084019093528151835290810190820152615db690511590565b155b15615e715760408051808201909152600d81527f2d2d6c6963656e7365547970650000000000000000000000000000000000000060208201528282615dfc81619a8d565b935060ff1681518110615e1157615e11619920565b6020026020010181905250615e2588617007565b604051602001615e35919061994f565b604051602081830303815290604052828280615e5090619a8d565b935060ff1681518110615e6557615e65619920565b60200260200101819052505b60408086015181518083018352600080825260209182015282518084019093528151835290810190820152615ea590511590565b615f3a5760408051808201909152600b81527f2d2d72656c61796572496400000000000000000000000000000000000000000060208201528282615ee881619a8d565b935060ff1681518110615efd57615efd619920565b60200260200101819052508460400151828280615f1990619a8d565b935060ff1681518110615f2e57615f2e619920565b60200260200101819052505b60608501511561605b5760408051808201909152600681527f2d2d73616c74000000000000000000000000000000000000000000000000000060208201528282615f8381619a8d565b935060ff1681518110615f9857615f98619920565b602090810291909101015260608501516040517fb11a19e800000000000000000000000000000000000000000000000000000000815260048101919091526001600160a01b0384169063b11a19e890602401600060405180830381865afa158015616007573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261602f91908101906195ba565b828261603a81619a8d565b935060ff168151811061604f5761604f619920565b60200260200101819052505b60e085015151156161025760408051808201909152600a81527f2d2d6761734c696d697400000000000000000000000000000000000000000000602082015282826160a581619a8d565b935060ff16815181106160ba576160ba619920565b60200260200101819052506160d68560e0015160000151616f67565b82826160e181619a8d565b935060ff16815181106160f6576160f6619920565b60200260200101819052505b60e085015160200151156161ac5760408051808201909152600a81527f2d2d6761735072696365000000000000000000000000000000000000000000006020820152828261614f81619a8d565b935060ff168151811061616457616164619920565b60200260200101819052506161808560e0015160200151616f67565b828261618b81619a8d565b935060ff16815181106161a0576161a0619920565b60200260200101819052505b60e085015160400151156162565760408051808201909152600e81527f2d2d6d6178466565506572476173000000000000000000000000000000000000602082015282826161f981619a8d565b935060ff168151811061620e5761620e619920565b602002602001018190525061622a8560e0015160400151616f67565b828261623581619a8d565b935060ff168151811061624a5761624a619920565b60200260200101819052505b60e085015160600151156163005760408051808201909152601681527f2d2d6d61785072696f7269747946656550657247617300000000000000000000602082015282826162a381619a8d565b935060ff16815181106162b8576162b8619920565b60200260200101819052506162d48560e0015160600151616f67565b82826162df81619a8d565b935060ff16815181106162f4576162f4619920565b60200260200101819052505b60008160ff1667ffffffffffffffff81111561631e5761631e61937c565b60405190808252806020026020018201604052801561635157816020015b606081526020019060019003908161633c5790505b50905060005b8260ff168160ff1610156163aa57838160ff168151811061637a5761637a619920565b6020026020010151828260ff168151811061639757616397619920565b6020908102919091010152600101616357565b5093505050505b949350505050565b6163e06040518060600160405280600060030b815260200160608152602001606081525090565b60408051808201825260048082527f6261736800000000000000000000000000000000000000000000000000000000602083015291517fd145736c000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d92600091849163d145736c9161646691869101619b17565b600060405180830381865afa158015616483573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526164ab91908101906195ba565b905060006164b98683617af6565b90506000846001600160a01b031663f45c1ce7836040518263ffffffff1660e01b81526004016164e99190618e40565b6000604051808303816000875af1158015616508573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526165309190810190619b5e565b805190915060030b158015906165495750602081015151155b80156165585750604081015151155b15615532578160008151811061657057616570619920565b6020026020010151604051602001614b879190619c14565b606060006165bd8560408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6040805180820182526000808252602091820152815180830190925286518252808701908201529091506165f49082905b90617c4b565b156167515760006166718261666b846166656166378a60408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6040805180820182526000808252602091820152815180830190925282518252918201519181019190915290565b90617c72565b90617cd4565b604080518082018252600181527f0a00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201529091506166d5908290617c4b565b1561673f57604080518082018252600181527f0a000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261673c905b8290617d59565b90505b61674881617d7f565b92505050614ab4565b821561676a578484604051602001614b87929190619e00565b5050604080516020810190915260008152614ab4565b509392505050565b6000808251602084016000f09392505050565b8160a00151156167aa57505050565b60006167b7848484617de8565b905060006167c4826163b9565b602081015181519192509060030b1580156168605750604080518082018252600781527f535543434553530000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616860906040805180820182526000808252602091820152815180830190925284518252808501908201526165ee565b1561686d57505050505050565b6040820151511561688d578160400151604051602001614b879190619ea7565b80604051602001614b879190619f05565b606060006168d38360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600481527f2e736f6c0000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152909150616938905b8290616f06565b156169a757604080518082018252600481527f2e736f6c0000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152614ab4906169a2908390618383565b617d7f565b604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616a09905b829061840d565b600103616ad657604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616a6f90616735565b50604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152614ab4906169a2905b8390617d59565b604080518082018252600581527f2e6a736f6e00000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616b3590616931565b15616c6c57604080518082018252600181527f2f00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820181905284518086019095529251845283015290616b9d9083906184a7565b905060008160018351616bb09190619266565b81518110616bc057616bc0619920565b60200260200101519050616c636169a2616c366040518060400160405280600581526020017f2e6a736f6e00000000000000000000000000000000000000000000000000000081525060408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b60408051808201825260008082526020918201528151808301909252855182528086019082015290618383565b95945050505050565b82604051602001614b879190619f70565b50919050565b60606000616cb88360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600481527f2e736f6c0000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152909150616d1a90616931565b15616d2857614ab481617d7f565b604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616d8790616a02565b600103616df157604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152614ab4906169a290616acf565b604080518082018252600581527f2e6a736f6e00000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616e5090616931565b15616c6c57604080518082018252600181527f2f00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820181905284518086019095529251845283015290616eb89083906184a7565b9050600181511115616ef4578060028251616ed39190619266565b81518110616ee357616ee3619920565b602002602001015192505050919050565b5082604051602001614b879190619f70565b805182516000911115616f1b575060006149bb565b81518351602085015160009291616f3191619279565b616f3b9190619266565b905082602001518103616f525760019150506149bb565b82516020840151819020912014905092915050565b60606000616f748361854c565b600101905060008167ffffffffffffffff811115616f9457616f9461937c565b6040519080825280601f01601f191660200182016040528015616fbe576020820181803683370190505b5090508181016020015b600019017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a8504945084616fc857509392505050565b604081810151815180830183526000808252602091820181905283518085018552835181529282018383015283518085018552600a81527f554e4c4943454e5345440000000000000000000000000000000000000000000081840190815285518087018752838152840192909252845180860190955251845290830152606091617093905b829061862e565b156170d357505060408051808201909152600481527f4e6f6e65000000000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600981527f556e6c6963656e73650000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526171329061708c565b1561717257505060408051808201909152600981527f556e6c6963656e736500000000000000000000000000000000000000000000006020820152919050565b604080518082018252600381527f4d49540000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526171d19061708c565b1561721157505060408051808201909152600381527f4d495400000000000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f47504c2d322e302d6f6e6c790000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526172709061708c565b806172d55750604080518082018252601081527f47504c2d322e302d6f722d6c6174657200000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526172d59061708c565b1561731557505060408051808201909152600981527f474e552047504c763200000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f47504c2d332e302d6f6e6c790000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526173749061708c565b806173d95750604080518082018252601081527f47504c2d332e302d6f722d6c6174657200000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526173d99061708c565b1561741957505060408051808201909152600981527f474e552047504c763300000000000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4c47504c2d322e312d6f6e6c7900000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526174789061708c565b806174dd5750604080518082018252601181527f4c47504c2d322e312d6f722d6c61746572000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526174dd9061708c565b1561751d57505060408051808201909152600c81527f474e55204c47504c76322e3100000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4c47504c2d332e302d6f6e6c79000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261757c9061708c565b806175e15750604080518082018252601181527f4c47504c2d332e302d6f722d6c61746572000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526175e19061708c565b1561762157505060408051808201909152600a81527f474e55204c47504c7633000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f4253442d322d436c617573650000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526176809061708c565b156176c057505060408051808201909152600c81527f4253442d322d436c6175736500000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f4253442d332d436c6175736500000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261771f9061708c565b1561775f57505060408051808201909152600c81527f4253442d332d436c6175736500000000000000000000000000000000000000006020820152919050565b604080518082018252600781527f4d504c2d322e3000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526177be9061708c565b156177fe57505060408051808201909152600781527f4d504c2d322e30000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600781527f4f534c2d332e30000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261785d9061708c565b1561789d57505060408051808201909152600781527f4f534c2d332e30000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600a81527f4170616368652d322e3000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526178fc9061708c565b1561793c57505060408051808201909152600a81527f4170616368652d322e30000000000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4147504c2d332e302d6f6e6c79000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261799b9061708c565b80617a005750604080518082018252601181527f4147504c2d332e302d6f722d6c6174657200000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617a009061708c565b15617a4057505060408051808201909152600a81527f474e55204147504c7633000000000000000000000000000000000000000000006020820152919050565b604080518082018252600881527f4255534c2d312e3100000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617a9f9061708c565b15617adf57505060408051808201909152600781527f42534c20312e31000000000000000000000000000000000000000000000000006020820152919050565b60408084015184519151614b87929060200161a04e565b60608060005b8451811015617b815781858281518110617b1857617b18619920565b6020026020010151604051602001617b31929190619499565b604051602081830303815290604052915060018551617b509190619266565b8114617b795781604051602001617b67919061a1b7565b60405160208183030381529060405291505b600101617afc565b5060408051600380825260808201909252600091816020015b6060815260200190600190039081617b9a5790505090508381600081518110617bc557617bc5619920565b60200260200101819052506040518060400160405280600281526020017f2d6300000000000000000000000000000000000000000000000000000000000081525081600181518110617c1957617c19619920565b60200260200101819052508181600281518110617c3857617c38619920565b6020908102919091010152949350505050565b6020808301518351835192840151600093617c699291849190618642565b14159392505050565b60408051808201909152600080825260208201526000617ca48460000151856020015185600001518660200151618753565b9050836020015181617cb69190619266565b84518590617cc5908390619266565b90525060208401525090919050565b6040805180820190915260008082526020820152815183511015617cf95750816149bb565b6020808301519084015160019114617d205750815160208481015190840151829020919020145b8015617d5157825184518590617d37908390619266565b9052508251602085018051617d4d908390619279565b9052505b509192915050565b6040805180820190915260008082526020820152617d78838383618873565b5092915050565b60606000826000015167ffffffffffffffff811115617da057617da061937c565b6040519080825280601f01601f191660200182016040528015617dca576020820181803683370190505b5090506000602082019050617d78818560200151866000015161891e565b60606000617df4614db1565b6040805160ff808252612000820190925291925060009190816020015b6060815260200190600190039081617e1157905050905060006040518060400160405280600381526020017f6e70780000000000000000000000000000000000000000000000000000000000815250828280617e6c90619a8d565b935060ff1681518110617e8157617e81619920565b60200260200101819052506040518060400160405280600781526020017f5e312e33322e3300000000000000000000000000000000000000000000000000815250604051602001617ed2919061a1f8565b604051602081830303815290604052828280617eed90619a8d565b935060ff1681518110617f0257617f02619920565b60200260200101819052506040518060400160405280600881526020017f76616c6964617465000000000000000000000000000000000000000000000000815250828280617f4f90619a8d565b935060ff1681518110617f6457617f64619920565b602002602001018190525082604051602001617f8091906199bb565b604051602081830303815290604052828280617f9b90619a8d565b935060ff1681518110617fb057617fb0619920565b60200260200101819052506040518060400160405280600a81526020017f2d2d636f6e747261637400000000000000000000000000000000000000000000815250828280617ffd90619a8d565b935060ff168151811061801257618012619920565b60200260200101819052506180278784618998565b828261803281619a8d565b935060ff168151811061804757618047619920565b6020908102919091010152855151156180f35760408051808201909152600b81527f2d2d7265666572656e63650000000000000000000000000000000000000000006020820152828261809981619a8d565b935060ff16815181106180ae576180ae619920565b60200260200101819052506180c7866000015184618998565b82826180d281619a8d565b935060ff16815181106180e7576180e7619920565b60200260200101819052505b8560800151156181615760408051808201909152601881527f2d2d756e73616665536b697053746f72616765436865636b00000000000000006020820152828261813c81619a8d565b935060ff168151811061815157618151619920565b60200260200101819052506181c7565b84156181c75760408051808201909152601281527f2d2d726571756972655265666572656e63650000000000000000000000000000602082015282826181a681619a8d565b935060ff16815181106181bb576181bb619920565b60200260200101819052505b604086015151156182635760408051808201909152600d81527f2d2d756e73616665416c6c6f77000000000000000000000000000000000000006020820152828261821181619a8d565b935060ff168151811061822657618226619920565b6020026020010181905250856040015182828061824290619a8d565b935060ff168151811061825757618257619920565b60200260200101819052505b8560600151156182cd5760408051808201909152601481527f2d2d756e73616665416c6c6f7752656e616d6573000000000000000000000000602082015282826182ac81619a8d565b935060ff16815181106182c1576182c1619920565b60200260200101819052505b60008160ff1667ffffffffffffffff8111156182eb576182eb61937c565b60405190808252806020026020018201604052801561831e57816020015b60608152602001906001900390816183095790505b50905060005b8260ff168160ff16101561837757838160ff168151811061834757618347619920565b6020026020010151828260ff168151811061836457618364619920565b6020908102919091010152600101618324565b50979650505050505050565b60408051808201909152600080825260208201528151835110156183a85750816149bb565b815183516020850151600092916183be91619279565b6183c89190619266565b602084015190915060019082146183e9575082516020840151819020908220145b801561840457835185518690618400908390619266565b9052505b50929392505050565b60008082600001516184318560000151866020015186600001518760200151618753565b61843b9190619279565b90505b8351602085015161844f9190619279565b8111617d78578161845f8161a23d565b925050826000015161849685602001518361847a9190619266565b86516184869190619266565b8386600001518760200151618753565b6184a09190619279565b905061843e565b606060006184b5848461840d565b6184c0906001619279565b67ffffffffffffffff8111156184d8576184d861937c565b60405190808252806020026020018201604052801561850b57816020015b60608152602001906001900390816184f65790505b50905060005b8151811015616780576185276169a28686617d59565b82828151811061853957618539619920565b6020908102919091010152600101618511565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310618595577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef810000000083106185c1576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc1000083106185df57662386f26fc10000830492506010015b6305f5e10083106185f7576305f5e100830492506008015b612710831061860b57612710830492506004015b6064831061861d576064830492506002015b600a83106149bb5760010192915050565b600061863a83836189d8565b159392505050565b60008085841161874957602084116186f5576000841561868d576001618669866020619266565b61867490600861a257565b61867f90600261a355565b6186899190619266565b1990505b835181168561869c8989619279565b6186a69190619266565b805190935082165b8181146186e0578784116186c857879450505050506163b1565b836186d28161a361565b9450508284511690506186ae565b6186ea8785619279565b9450505050506163b1565b8383206187028588619266565b61870c9087619279565b91505b858210618747578482208082036187345761872a8684619279565b93505050506163b1565b61873f600184619266565b92505061870f565b505b5092949350505050565b6000838186851161885e576020851161880d576000851561879f57600161877b876020619266565b61878690600861a257565b61879190600261a355565b61879b9190619266565b1990505b845181166000876187b08b8b619279565b6187ba9190619266565b855190915083165b8281146187ff578186106187e7576187da8b8b619279565b96505050505050506163b1565b856187f18161a23d565b9650508386511690506187c2565b8596505050505050506163b1565b508383206000905b61881f8689619266565b821161885c5785832080820361883b57839450505050506163b1565b618846600185619279565b93505081806188549061a23d565b925050618815565b505b6188688787619279565b979650505050505050565b604080518082019091526000808252602082015260006188a58560000151866020015186600001518760200151618753565b6020808701805191860191909152519091506188c19082619266565b8352845160208601516188d49190619279565b81036188e35760008552618915565b835183516188f19190619279565b85518690618900908390619266565b905250835161890f9082619279565b60208601525b50909392505050565b602081106189565781518352618935602084619279565b9250618942602083619279565b915061894f602082619266565b905061891e565b600019811561898557600161896c836020619266565b6189789061010061a355565b6189829190619266565b90505b9151835183169219169190911790915250565b606060006189a68484614e84565b80516020808301516040519394506189c09390910161a378565b60405160208183030381529060405291505092915050565b81518151600091908111156189eb575081515b6020808501519084015160005b83811015618aa45782518251808214618a74576000196020871015618a5357600184618a25896020619266565b618a2f9190619279565b618a3a90600861a257565b618a4590600261a355565b618a4f9190619266565b1990505b8181168382168181039114618a715797506149bb9650505050505050565b50505b618a7f602086619279565b9450618a8c602085619279565b93505050602081618a9d9190619279565b90506189f8565b5084518651615532919061a3d0565b610b678061a3f183390190565b61053f8061af5883390190565b61106f8061b49783390190565b611bb98061c50683390190565b6040518060e00160405280606081526020016060815260200160608152602001600015158152602001600015158152602001600015158152602001618b2a618b2f565b905290565b60405180610100016040528060001515815260200160001515815260200160608152602001600080191681526020016060815260200160608152602001600015158152602001618b2a6040518060800160405280600081526020016000815260200160008152602001600081525090565b602080825282518282018190526000918401906040840190835b81811015618be15783516001600160a01b0316835260209384019390920191600101618bba565b509095945050505050565b60005b83811015618c07578181015183820152602001618bef565b50506000910152565b60008151808452618c28816020860160208601618bec565b601f01601f19169290920160200192915050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015618d38577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452815180516001600160a01b03168652602090810151604082880181905281519088018190529101906060600582901b88018101919088019060005b81811015618d1e577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa08a8503018352618d08848651618c10565b6020958601959094509290920191600101618cce565b509197505050602094850194929092019150600101618c64565b50929695505050505050565b600081518084526020840193506020830160005b82811015618d985781517fffffffff0000000000000000000000000000000000000000000000000000000016865260209586019590910190600101618d58565b5093949350505050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015618d38577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08786030184528151805160408752618e0e6040880182618c10565b9050602082015191508681036020880152618e298183618d44565b965050506020938401939190910190600101618dca565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015618d38577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452618ea2858351618c10565b94506020938401939190910190600101618e68565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015618d38577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc087860301845281516001600160a01b0381511686526020810151905060406020870152618f386040870182618d44565b9550506020938401939190910190600101618edf565b6020815260006149bb60208301600581527f68656c6c6f000000000000000000000000000000000000000000000000000000602082015260400190565b6000815160608452618fa06060850182618c10565b90506001600160a01b036020840151166020850152604083015160408501528091505092915050565b60a081526000618fdc60a0830188618f8b565b6001600160a01b03871660208401528560408401526001600160a01b038516606084015282810360808401526190128185618c10565b98975050505050505050565b60006020828403121561903057600080fd5b81516001600160a01b0381168114614ab457600080fd5b610100815260056101008201527f544f4b454e000000000000000000000000000000000000000000000000000000610120820152610140602082015260036101408201527f544b4e000000000000000000000000000000000000000000000000000000000061016082015260006101808201905060ff8816604083015286606083015260038610619101577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b8560808301528460a083015261912260c08301856001600160a01b03169052565b6001600160a01b03831660e0830152979650505050505050565b60006020828403121561914e57600080fd5b81518015158114614ab457600080fd5b6080815260006191716080830187618f8b565b8560208401526001600160a01b038516604084015282810360608401526188688185618c10565b6000602082840312156191aa57600080fd5b5051919050565b602081526000614ab46020830184618c10565b60a0815260006191d760a0830187618c10565b6001600160a01b03861660208401528460408401526001600160a01b0384166060840152828103608084015261886881600581527f68656c6c6f000000000000000000000000000000000000000000000000000000602082015260400190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b818103818111156149bb576149bb619237565b808201808211156149bb576149bb619237565b600181811c908216806192a057607f821691505b602082108103616c7d577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6001600160a01b03831681526040602082015260006163b16040830184618c10565b7f4661696c656420746f206465706c6f7920636f6e74726163742000000000000081526000835161933381601a850160208801618bec565b7f3a20000000000000000000000000000000000000000000000000000000000000601a91840191820152835161937081601c840160208801618bec565b01601c01949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040516060810167ffffffffffffffff811182821017156193ce576193ce61937c565b60405290565b60008067ffffffffffffffff8411156193ef576193ef61937c565b50604051601f19601f85018116603f0116810181811067ffffffffffffffff8211171561941e5761941e61937c565b60405283815290508082840185101561943657600080fd5b616780846020830185618bec565b600082601f83011261945557600080fd5b614ab4838351602085016193d4565b60006020828403121561947657600080fd5b815167ffffffffffffffff81111561948d57600080fd5b6149b784828501619444565b600083516194ab818460208801618bec565b8351908301906194bf818360208801618bec565b01949350505050565b7f4661696c656420746f206465706c6f7920636f6e74726163742000000000000081526000835161950081601a850160208801618bec565b7f207573696e6720636f6e7374727563746f722064617461202200000000000000601a91840191820152835161953d816033840160208801618bec565b7f220000000000000000000000000000000000000000000000000000000000000060339290910191820152603401949350505050565b60408152600b60408201527f464f554e4452595f4f55540000000000000000000000000000000000000000006060820152608060208201526000614ab46080830184618c10565b6000602082840312156195cc57600080fd5b815167ffffffffffffffff8111156195e357600080fd5b8201601f810184136195f457600080fd5b6149b7848251602084016193d4565b60008551619615818460208a01618bec565b7f2f00000000000000000000000000000000000000000000000000000000000000908301908152855161964f816001840160208a01618bec565b7f2f0000000000000000000000000000000000000000000000000000000000000060019290910191820152845161968d816002840160208901618bec565b6001818301019150507f2f00000000000000000000000000000000000000000000000000000000000000600182015283516196cf816002840160208801618bec565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600292909101918201526007019695505050505050565b60408152600061971a6040830184618c10565b8281036020840152600481527f2e6173740000000000000000000000000000000000000000000000000000000060208201526040810191505092915050565b7f436f756c64206e6f742066696e642041535420696e206172746966616374200081526000825161979181601f850160208701618bec565b7f2e205365742060617374203d20747275656020696e20666f756e6472792e746f601f9390910192830152507f6d6c000000000000000000000000000000000000000000000000000000000000603f820152604101919050565b6040815260006197fe6040830184618c10565b8281036020840152601181527f2e6173742e6162736f6c7574655061746800000000000000000000000000000060208201526040810191505092915050565b6040815260006198506040830184618c10565b8281036020840152600c81527f2e6173742e6c6963656e7365000000000000000000000000000000000000000060208201526040810191505092915050565b7f2e6d657461646174612e736f75726365732e5b270000000000000000000000008152600082516198c7816014850160208701618bec565b7f275d2e6b656363616b32353600000000000000000000000000000000000000006014939091019283015250602001919050565b60408152600061990e6040830185618c10565b8281036020840152614ab08185618c10565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f2200000000000000000000000000000000000000000000000000000000000000815260008251619987816001850160208701618bec565b7f22000000000000000000000000000000000000000000000000000000000000006001939091019283015250600201919050565b600082516199cd818460208701618bec565b7f2f6275696c642d696e666f000000000000000000000000000000000000000000920191825250600b01919050565b7f436f756c64206e6f742066696e64206275696c642d696e666f2066696c65207781527f697468206d61746368696e6720736f7572636520636f6465206861736820666f60208201527f7220636f6e747261637420000000000000000000000000000000000000000000604082015260008251619a8081604b850160208701618bec565b91909101604b0192915050565b600060ff821660ff8103619aa357619aa3619237565b60010192915050565b7f406f70656e7a657070656c696e2f646566656e6465722d6465706c6f792d636c81527f69656e742d636c69400000000000000000000000000000000000000000000000602082015260008251619b0a816029850160208701618bec565b9190910160290192915050565b60408152601660408201527f4f50454e5a455050454c494e5f424153485f50415448000000000000000000006060820152608060208201526000614ab46080830184618c10565b600060208284031215619b7057600080fd5b815167ffffffffffffffff811115619b8757600080fd5b820160608185031215619b9957600080fd5b619ba16193ab565b81518060030b8114619bb257600080fd5b8152602082015167ffffffffffffffff811115619bce57600080fd5b619bda86828501619444565b602083015250604082015167ffffffffffffffff811115619bfa57600080fd5b619c0686828501619444565b604083015250949350505050565b7f4661696c656420746f2072756e206261736820636f6d6d616e6420776974682081527f2200000000000000000000000000000000000000000000000000000000000000602082015260008251619c72816021850160208701618bec565b7f222e20496620796f7520617265207573696e672057696e646f77732c2073657460219390910192830152507f20746865204f50454e5a455050454c494e5f424153485f5041544820656e766960418201527f726f6e6d656e74207661726961626c6520746f207468652066756c6c7920717560618201527f616c69666965642070617468206f66207468652062617368206578656375746160818201527f626c652e20466f72206578616d706c652c20696620796f75206172652075736960a18201527f6e672047697420666f722057696e646f77732c206164642074686520666f6c6c60c18201527f6f77696e67206c696e6520696e20746865202e656e762066696c65206f66207960e18201527f6f75722070726f6a65637420287573696e6720666f727761726420736c6173686101018201527f6573293a0a4f50454e5a455050454c494e5f424153485f504154483d22433a2f6101218201527f50726f6772616d2046696c65732f4769742f62696e2f6261736822000000000061014182015261015c01919050565b7f4661696c656420746f2066696e64206c696e652077697468207072656669782081527f2700000000000000000000000000000000000000000000000000000000000000602082015260008351619e5e816021850160208801618bec565b7f2720696e206f75747075743a20000000000000000000000000000000000000006021918401918201528351619e9b81602e840160208801618bec565b01602e01949350505050565b7f4661696c656420746f2072756e2075706772616465207361666574792076616c81527f69646174696f6e3a200000000000000000000000000000000000000000000000602082015260008251619b0a816029850160208701618bec565b7f55706772616465207361666574792076616c69646174696f6e206661696c656481527f3a0a000000000000000000000000000000000000000000000000000000000000602082015260008251619f63816022850160208701618bec565b9190910160220192915050565b7f436f6e7472616374206e616d6520000000000000000000000000000000000000815260008251619fa881600e850160208701618bec565b7f206d75737420626520696e2074686520666f726d6174204d79436f6e74726163600e9390910192830152507f742e736f6c3a4d79436f6e7472616374206f72204d79436f6e74726163742e73602e8201527f6f6c206f72206f75742f4d79436f6e74726163742e736f6c2f4d79436f6e7472604e8201527f6163742e6a736f6e000000000000000000000000000000000000000000000000606e820152607601919050565b7f53504458206c6963656e7365206964656e74696669657220000000000000000081526000835161a086816018850160208801618bec565b7f20696e2000000000000000000000000000000000000000000000000000000000601891840191820152835161a0c381601c840160208801618bec565b7f20646f6573206e6f74206c6f6f6b206c696b65206120737570706f7274656420601c92909101918201527f6c6963656e736520666f7220626c6f636b206578706c6f726572207665726966603c8201527f69636174696f6e2e205573652074686520606c6963656e73655479706560206f605c8201527f7074696f6e20746f20737065636966792061206c6963656e736520747970652c607c8201527f206f7220736574207468652060736b69704c6963656e73655479706560206f70609c8201527f74696f6e20746f2060747275656020746f20736b69702e00000000000000000060bc82015260d301949350505050565b6000825161a1c9818460208701618bec565b7f2000000000000000000000000000000000000000000000000000000000000000920191825250600101919050565b7f406f70656e7a657070656c696e2f75706772616465732d636f7265400000000081526000825161a23081601c850160208701618bec565b91909101601c0192915050565b6000600019820361a2505761a250619237565b5060010190565b80820281158282048414176149bb576149bb619237565b6001815b600184111561a2a95780850481111561a28d5761a28d619237565b600184161561a29b57908102905b60019390931c92800261a272565b935093915050565b60008261a2c0575060016149bb565b8161a2cd575060006149bb565b816001811461a2e3576002811461a2ed5761a309565b60019150506149bb565b60ff84111561a2fe5761a2fe619237565b50506001821b6149bb565b5060208310610133831016604e8410600b841016171561a32c575081810a6149bb565b61a339600019848461a26e565b806000190482111561a34d5761a34d619237565b029392505050565b6000614ab4838361a2b1565b60008161a3705761a370619237565b506000190190565b6000835161a38a818460208801618bec565b7f3a00000000000000000000000000000000000000000000000000000000000000908301908152835161a3c4816001840160208801618bec565b01600101949350505050565b8181036000831280158383131683831282161715617d7857617d7861923756fe60c0604052600d60809081526c2bb930b83832b21022ba3432b960991b60a05260009061002c9082610114565b506040805180820190915260048152630ae8aa8960e31b60208201526001906100559082610114565b506002805460ff1916601217905534801561006f57600080fd5b506101d2565b634e487b7160e01b600052604160045260246000fd5b600181811c9082168061009f57607f821691505b6020821081036100bf57634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111561010f57806000526020600020601f840160051c810160208510156100ec5750805b601f840160051c820191505b8181101561010c57600081556001016100f8565b50505b505050565b81516001600160401b0381111561012d5761012d610075565b6101418161013b845461008b565b846100c5565b6020601f821160018114610175576000831561015d5750848201515b600019600385901b1c1916600184901b17845561010c565b600084815260208120601f198516915b828110156101a55787850151825560209485019460019092019101610185565b50848210156101c35786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b610986806101e16000396000f3fe6080604052600436106100c05760003560e01c8063313ce56711610074578063a9059cbb1161004e578063a9059cbb146101fa578063d0e30db01461021a578063dd62ed3e1461022257600080fd5b8063313ce5671461018c57806370a08231146101b857806395d89b41146101e557600080fd5b806318160ddd116100a557806318160ddd1461012f57806323b872dd1461014c5780632e1a7d4d1461016c57600080fd5b806306fdde03146100d4578063095ea7b3146100ff57600080fd5b366100cf576100cd61025a565b005b600080fd5b3480156100e057600080fd5b506100e96102b5565b6040516100f69190610745565b60405180910390f35b34801561010b57600080fd5b5061011f61011a3660046107da565b610343565b60405190151581526020016100f6565b34801561013b57600080fd5b50475b6040519081526020016100f6565b34801561015857600080fd5b5061011f610167366004610804565b6103bd565b34801561017857600080fd5b506100cd610187366004610841565b610647565b34801561019857600080fd5b506002546101a69060ff1681565b60405160ff90911681526020016100f6565b3480156101c457600080fd5b5061013e6101d336600461085a565b60036020526000908152604090205481565b3480156101f157600080fd5b506100e9610724565b34801561020657600080fd5b5061011f6102153660046107da565b610731565b6100cd61025a565b34801561022e57600080fd5b5061013e61023d366004610875565b600460209081526000928352604080842090915290825290205481565b33600090815260036020526040812080543492906102799084906108d7565b909155505060405134815233907fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c9060200160405180910390a2565b600080546102c2906108ea565b80601f01602080910402602001604051908101604052809291908181526020018280546102ee906108ea565b801561033b5780601f106103105761010080835404028352916020019161033b565b820191906000526020600020905b81548152906001019060200180831161031e57829003601f168201915b505050505081565b33600081815260046020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925906103ab9086815260200190565b60405180910390a35060015b92915050565b73ffffffffffffffffffffffffffffffffffffffff831660009081526003602052604081205482111561042b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600060248201526044015b60405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff841633148015906104a1575073ffffffffffffffffffffffffffffffffffffffff841660009081526004602090815260408083203384529091529020547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff14155b156105605773ffffffffffffffffffffffffffffffffffffffff8416600090815260046020908152604080832033845290915290205482111561051a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526020600482015260006024820152604401610422565b73ffffffffffffffffffffffffffffffffffffffff841660009081526004602090815260408083203384529091528120805484929061055a90849061093d565b90915550505b73ffffffffffffffffffffffffffffffffffffffff84166000908152600360205260408120805484929061059590849061093d565b909155505073ffffffffffffffffffffffffffffffffffffffff8316600090815260036020526040812080548492906105cf9084906108d7565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161063591815260200190565b60405180910390a35060019392505050565b3360009081526003602052604090205481111561069a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526020600482015260006024820152604401610422565b33600090815260036020526040812080548392906106b990849061093d565b9091555050604051339082156108fc029083906000818181858888f193505050501580156106eb573d6000803e3d6000fd5b5060405181815233907f7fcf532c15f0a6db0bd6d0e038bea71d30d808c7d98cb3bf7268a95bf5081b659060200160405180910390a250565b600180546102c2906108ea565b600061073e3384846103bd565b9392505050565b602081526000825180602084015260005b818110156107735760208186018101516040868401015201610756565b5060006040828501015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011684010191505092915050565b803573ffffffffffffffffffffffffffffffffffffffff811681146107d557600080fd5b919050565b600080604083850312156107ed57600080fd5b6107f6836107b1565b946020939093013593505050565b60008060006060848603121561081957600080fd5b610822846107b1565b9250610830602085016107b1565b929592945050506040919091013590565b60006020828403121561085357600080fd5b5035919050565b60006020828403121561086c57600080fd5b61073e826107b1565b6000806040838503121561088857600080fd5b610891836107b1565b915061089f602084016107b1565b90509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b808201808211156103b7576103b76108a8565b600181811c908216806108fe57607f821691505b602082108103610937577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b818103818111156103b7576103b76108a856fea264697066735822122008d7fc4e09519c5dd9f356b03596f6829a151d0bc7682533f9ceab4e459f5ee264736f6c634300081a00336080604052348015600f57600080fd5b506105208061001f6000396000f3fe60806040526004361061002a5760003560e01c806369582bee14610033578063de43156e1461005357005b3661003157005b005b34801561003f57600080fd5b5061003161004e3660046101ba565b610073565b34801561005f57600080fd5b5061003161006e3660046101ba565b6100ee565b6060811561008a5761008782840184610273565b90505b7ffdc887992b033668833927e252058e468fac0b6bd196d520f09c61b740e999486100b58780610369565b6100c560408a0160208b016103ce565b896040013533866040516100de969594939291906103f0565b60405180910390a1505050505050565b606081156101055761010282840184610273565b90505b7fcdc8ee677dc5ebe680fb18cebda5e26ba5ea1f0ba504a47e2a9a2ecb476dc98e6100b58780610369565b60006060828403121561014257600080fd5b50919050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461016c57600080fd5b919050565b60008083601f84011261018357600080fd5b50813567ffffffffffffffff81111561019b57600080fd5b6020830191508360208285010111156101b357600080fd5b9250929050565b6000806000806000608086880312156101d257600080fd5b853567ffffffffffffffff8111156101e957600080fd5b6101f588828901610130565b95505061020460208701610148565b935060408601359250606086013567ffffffffffffffff81111561022757600080fd5b61023388828901610171565b969995985093965092949392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60006020828403121561028557600080fd5b813567ffffffffffffffff81111561029c57600080fd5b8201601f810184136102ad57600080fd5b803567ffffffffffffffff8111156102c7576102c7610244565b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8501160116810181811067ffffffffffffffff8211171561033357610333610244565b60405281815282820160200186101561034b57600080fd5b81602084016020830137600091810160200191909152949350505050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261039e57600080fd5b83018035915067ffffffffffffffff8211156103b957600080fd5b6020019150368190038213156101b357600080fd5b6000602082840312156103e057600080fd5b6103e982610148565b9392505050565b60a081528560a0820152858760c0830137600060c0878301015260007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f880116820173ffffffffffffffffffffffffffffffffffffffff8716602084015285604084015273ffffffffffffffffffffffffffffffffffffffff8516606084015260c083820301608084015283518060c083015260005b818110156104a557602081870181015184830160e0015201610488565b50600060e0838301810191909152601f9091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016909101019897505050505050505056fea2646970667358221220f4d1ccb9c8450e782e1c77412473fd37637a5c83a2a3272307d8c8bc8e8c7a3364736f6c634300081a003360c060405234801561001057600080fd5b5060405161106f38038061106f83398101604081905261002f916100db565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461006357604051632b2add3d60e01b815260040160405180910390fd5b600380546001600160a01b0319166001600160a01b0385811691909117909155828116608052811660a0526040517f80699e81136d69cb8367ad52a994e25c722a86da654b561d0c14b61a777e7ac590600090a150505061011e565b80516001600160a01b03811681146100d657600080fd5b919050565b6000806000606084860312156100f057600080fd5b6100f9846100bf565b9250610107602085016100bf565b9150610115604085016100bf565b90509250925092565b60805160a051610f2561014a60003960006101e50152600081816102b9015261045b0152610f256000f3fe608060405234801561001057600080fd5b50600436106100f55760003560e01c806397770dff11610097578063c63585cc11610066578063c63585cc14610273578063d7fd7afb14610286578063d936a012146102b4578063ee2815ba146102db57600080fd5b806397770dff1461021a578063a7cb05071461022d578063c39aca3714610240578063c62178ac1461025357600080fd5b8063513a9c05116100d3578063513a9c051461018a578063569541b9146101c0578063842da36d146101e057806391dd645f1461020757600080fd5b80630be15547146100fa5780631f0e251b1461015a5780633ce4a5bc1461016f575b600080fd5b610130610108366004610bd1565b60016020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b61016d610168366004610c13565b6102ee565b005b61013073735b14bb79463307aacbed86daf3322b1e6226ab81565b610130610198366004610bd1565b60026020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b6003546101309073ffffffffffffffffffffffffffffffffffffffff1681565b6101307f000000000000000000000000000000000000000000000000000000000000000081565b61016d610215366004610c35565b610402565b61016d610228366004610c13565b610526565b61016d61023b366004610c61565b610633565b61016d61024e366004610c83565b6106ce565b6004546101309073ffffffffffffffffffffffffffffffffffffffff1681565b610130610281366004610d53565b6108cd565b6102a6610294366004610bd1565b60006020819052908152604090205481565b604051908152602001610151565b6101307f000000000000000000000000000000000000000000000000000000000000000081565b61016d6102e9366004610c35565b610a02565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461033b576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116610388576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600480547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527f3ade88e3922d64780e1bf4460d364c2970b69da813f9c0c07a1c187b5647636c906020015b60405180910390a150565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461044f576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600354600090610497907f00000000000000000000000000000000000000000000000000000000000000009073ffffffffffffffffffffffffffffffffffffffff16846108cd565b60008481526002602090815260409182902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff85169081179091558251878152918201529192507f0ecec485166da6139b13bb7e033e9446e2d35348e80ebf1180d4afe2dba1704e910160405180910390a1505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610573576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff81166105c0576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527fdba79d534382d1a8ae108e4c8ecb27c6ae42ab8b91d44eedf88bd329f3868d5e906020016103f7565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610680576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000828152602081815260409182902083905581518481529081018390527f49f492222906ac486c3c1401fa545626df1f0c0e5a77a05597ea2ed66af9850d91015b60405180910390a15050565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461071b576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff831673735b14bb79463307aacbed86daf3322b1e6226ab1480610768575073ffffffffffffffffffffffffffffffffffffffff831630145b1561079f576040517f82d5d76a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f47e7ef2400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152602482018690528616906347e7ef24906044016020604051808303816000875af1158015610814573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108389190610d96565b506040517fde43156e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84169063de43156e906108939089908990899088908890600401610e01565b600060405180830381600087803b1580156108ad57600080fd5b505af11580156108c1573d6000803e3d6000fd5b50505050505050505050565b60008060006108dc8585610ad3565b6040517fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606084811b8216602084015283901b16603482015291935091508690604801604051602081830303815290604052805190602001206040516020016109c29291907fff00000000000000000000000000000000000000000000000000000000000000815260609290921b7fffffffffffffffffffffffffffffffffffffffff00000000000000000000000016600183015260158201527f96e8ac4277198ff8b6f785478aa9a39f403cb768dd02cbee326c3e7da348845f603582015260550190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291905280516020909101209695505050505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610a4f576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008281526001602090815260409182902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff85169081179091558251858152918201527fd1b36d30f6248e97c473b4d1348ca164a4ef6759022f54a58ec200326c39c45d91016106c2565b6000808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603610b3b576040517fcb1e7cfe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1610610b75578284610b78565b83835b909250905073ffffffffffffffffffffffffffffffffffffffff8216610bca576040517f78b507da00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b9250929050565b600060208284031215610be357600080fd5b5035919050565b803573ffffffffffffffffffffffffffffffffffffffff81168114610c0e57600080fd5b919050565b600060208284031215610c2557600080fd5b610c2e82610bea565b9392505050565b60008060408385031215610c4857600080fd5b82359150610c5860208401610bea565b90509250929050565b60008060408385031215610c7457600080fd5b50508035926020909101359150565b60008060008060008060a08789031215610c9c57600080fd5b863567ffffffffffffffff811115610cb357600080fd5b87016060818a031215610cc557600080fd5b9550610cd360208801610bea565b945060408701359350610ce860608801610bea565b9250608087013567ffffffffffffffff811115610d0457600080fd5b8701601f81018913610d1557600080fd5b803567ffffffffffffffff811115610d2c57600080fd5b896020828401011115610d3e57600080fd5b60208201935080925050509295509295509295565b600080600060608486031215610d6857600080fd5b610d7184610bea565b9250610d7f60208501610bea565b9150610d8d60408501610bea565b90509250925092565b600060208284031215610da857600080fd5b81518015158114610c2e57600080fd5b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b60808152600086357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1883603018112610e3957600080fd5b870160208101903567ffffffffffffffff811115610e5657600080fd5b803603821315610e6557600080fd5b60606080850152610e7a60e085018284610db8565b91505073ffffffffffffffffffffffffffffffffffffffff610e9e60208a01610bea565b1660a0840152604088013560c084015273ffffffffffffffffffffffffffffffffffffffff871660208401528560408401528281036060840152610ee3818587610db8565b9897505050505050505056fea2646970667358221220431a07541a491b54259bdf8fcd05ade6751bfbbf0e72e605f27325b56d7d464f64736f6c634300081a003360e060405234801561001057600080fd5b50604051611bb9380380611bb983398101604081905261002f9161020e565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461006357604051632b2add3d60e01b815260040160405180910390fd5b6001600160a01b038216158061008057506001600160a01b038116155b1561009e5760405163d92e233d60e01b815260040160405180910390fd5b60066100aa8982610360565b5060076100b78882610360565b5060ff861660c05260808590528360028111156100d6576100d661041e565b60a08160028111156100ea576100ea61041e565b905250600192909255600080546001600160a01b039283166001600160a01b03199182161790915560088054929093169116179055506104349350505050565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261015157600080fd5b81516001600160401b0381111561016a5761016a61012a565b604051601f8201601f19908116603f011681016001600160401b03811182821017156101985761019861012a565b6040528181528382016020018510156101b057600080fd5b60005b828110156101cf576020818601810151838301820152016101b3565b506000918101602001919091529392505050565b8051600381106101f257600080fd5b919050565b80516001600160a01b03811681146101f257600080fd5b600080600080600080600080610100898b03121561022b57600080fd5b88516001600160401b0381111561024157600080fd5b61024d8b828c01610140565b60208b015190995090506001600160401b0381111561026b57600080fd5b6102778b828c01610140565b975050604089015160ff8116811461028e57600080fd5b60608a015190965094506102a460808a016101e3565b60a08a015190945092506102ba60c08a016101f7565b91506102c860e08a016101f7565b90509295985092959890939650565b600181811c908216806102eb57607f821691505b60208210810361030b57634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111561035b57806000526020600020601f840160051c810160208510156103385750805b601f840160051c820191505b818110156103585760008155600101610344565b50505b505050565b81516001600160401b038111156103795761037961012a565b61038d8161038784546102d7565b84610311565b6020601f8211600181146103c157600083156103a95750848201515b600019600385901b1c1916600184901b178455610358565b600084815260208120601f198516915b828110156103f157878501518255602094850194600190920191016103d1565b508482101561040f5786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b634e487b7160e01b600052602160045260246000fd5b60805160a05160c05161174861047160003960006102170152600061033a0152600081816102eb01528181610ad70152610bdd01526117486000f3fe608060405234801561001057600080fd5b50600436106101985760003560e01c80638b851b95116100e3578063ccc775991161008c578063eddeb12311610066578063eddeb12314610431578063f2441b3214610444578063f687d12a1461046457600080fd5b8063ccc77599146103a4578063d9eeebed146103b7578063dd62ed3e146103eb57600080fd5b8063a9059cbb116100bd578063a9059cbb14610369578063c70126261461037c578063c835d7cc1461038f57600080fd5b80638b851b951461030d57806395d89b411461032d578063a3413d031461033557600080fd5b80633ce4a5bc116101455780634d8943bb1161011f5780634d8943bb146102a757806370a08231146102b057806385e1f4d0146102e657600080fd5b80633ce4a5bc1461024157806342966c681461028157806347e7ef241461029457600080fd5b806318160ddd1161017657806318160ddd146101f557806323b872dd146101fd578063313ce5671461021057600080fd5b806306fdde031461019d578063091d2788146101bb578063095ea7b3146101d2575b600080fd5b6101a5610477565b6040516101b29190611327565b60405180910390f35b6101c460015481565b6040519081526020016101b2565b6101e56101e0366004611366565b610509565b60405190151581526020016101b2565b6005546101c4565b6101e561020b366004611392565b610520565b60405160ff7f00000000000000000000000000000000000000000000000000000000000000001681526020016101b2565b61025c73735b14bb79463307aacbed86daf3322b1e6226ab81565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101b2565b6101e561028f3660046113d3565b6105b7565b6101e56102a2366004611366565b6105cb565b6101c460025481565b6101c46102be3660046113ec565b73ffffffffffffffffffffffffffffffffffffffff1660009081526003602052604090205490565b6101c47f000000000000000000000000000000000000000000000000000000000000000081565b60085461025c9073ffffffffffffffffffffffffffffffffffffffff1681565b6101a561071f565b61035c7f000000000000000000000000000000000000000000000000000000000000000081565b6040516101b29190611409565b6101e5610377366004611366565b61072e565b6101e561038a366004611479565b61073b565b6103a261039d3660046113ec565b61088a565b005b6103a26103b23660046113ec565b61099e565b6103bf610aab565b6040805173ffffffffffffffffffffffffffffffffffffffff90931683526020830191909152016101b2565b6101c46103f9366004611571565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260046020908152604080832093909416825291909152205490565b6103a261043f3660046113d3565b610cc9565b60005461025c9073ffffffffffffffffffffffffffffffffffffffff1681565b6103a26104723660046113d3565b610d4b565b606060068054610486906115aa565b80601f01602080910402602001604051908101604052809291908181526020018280546104b2906115aa565b80156104ff5780601f106104d4576101008083540402835291602001916104ff565b820191906000526020600020905b8154815290600101906020018083116104e257829003601f168201915b5050505050905090565b6000610516338484610dcd565b5060015b92915050565b600061052d848484610ed6565b73ffffffffffffffffffffffffffffffffffffffff8416600090815260046020908152604080832033845290915290205482811015610598576040517f10bad14700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6105ac85336105a7868561162c565b610dcd565b506001949350505050565b60006105c33383611091565b506001919050565b60003373735b14bb79463307aacbed86daf3322b1e6226ab14801590610609575060005473ffffffffffffffffffffffffffffffffffffffff163314155b801561062d575060085473ffffffffffffffffffffffffffffffffffffffff163314155b15610664576040517fddb5de5e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61066e83836111d3565b6040517f735b14bb79463307aacbed86daf3322b1e6226ab000000000000000000000000602082015273ffffffffffffffffffffffffffffffffffffffff8416907f67fc7bdaed5b0ec550d8706b87d60568ab70c6b781263c70101d54cd1564aab390603401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529082905261070e91869061163f565b60405180910390a250600192915050565b606060078054610486906115aa565b6000610516338484610ed6565b6000806000610748610aab565b6040517f23b872dd00000000000000000000000000000000000000000000000000000000815233600482015273735b14bb79463307aacbed86daf3322b1e6226ab602482015260448101829052919350915073ffffffffffffffffffffffffffffffffffffffff8316906323b872dd906064016020604051808303816000875af11580156107da573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107fe9190611661565b610834576040517f0a7cd6d600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61083e3385611091565b60025460405133917f9ffbffc04a397460ee1dbe8c9503e098090567d6b7f4b3c02a8617d800b6d9559161087791899189918791611683565b60405180910390a2506001949350505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab146108d7576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116610924576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527fd55614e962c5fd6ece71614f6348d702468a997a394dd5e5c1677950226d97ae906020015b60405180910390a150565b3373735b14bb79463307aacbed86daf3322b1e6226ab146109eb576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116610a38576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600880547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527f88815d964e380677e86d817e7d65dea59cb7b4c3b5b7a0c8ec7ea4a74f90a38790602001610993565b600080546040517f0be155470000000000000000000000000000000000000000000000000000000081527f000000000000000000000000000000000000000000000000000000000000000060048201528291829173ffffffffffffffffffffffffffffffffffffffff90911690630be1554790602401602060405180830381865afa158015610b3e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b6291906116b2565b905073ffffffffffffffffffffffffffffffffffffffff8116610bb1576040517f78fff39600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080546040517fd7fd7afb0000000000000000000000000000000000000000000000000000000081527f0000000000000000000000000000000000000000000000000000000000000000600482015273ffffffffffffffffffffffffffffffffffffffff9091169063d7fd7afb90602401602060405180830381865afa158015610c40573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c6491906116cf565b905080600003610ca0576040517fe661aed000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060025460015483610cb391906116e8565b610cbd91906116ff565b92959294509192505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610d16576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60028190556040518181527fef13af88e424b5d15f49c77758542c1938b08b8b95b91ed0751f98ba99000d8f90602001610993565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610d98576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018190556040518181527fff5788270f43bfc1ca41c503606d2594aa3023a1a7547de403a3e2f146a4a80a90602001610993565b73ffffffffffffffffffffffffffffffffffffffff8316610e1a576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216610e67576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff83811660008181526004602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8316610f23576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216610f70576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff831660009081526003602052604090205481811015610fd0576040517ffe382aa700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610fda828261162c565b73ffffffffffffffffffffffffffffffffffffffff808616600090815260036020526040808220939093559085168152908120805484929061101d9084906116ff565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161108391815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff82166110de576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff82166000908152600360205260409020548181101561113e576040517ffe382aa700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611148828261162c565b73ffffffffffffffffffffffffffffffffffffffff84166000908152600360205260408120919091556005805484929061118390849061162c565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90602001610ec9565b73ffffffffffffffffffffffffffffffffffffffff8216611220576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b806005600082825461123291906116ff565b909155505073ffffffffffffffffffffffffffffffffffffffff82166000908152600360205260408120805483929061126c9084906116ff565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6000815180845260005b818110156112e9576020818501810151868301820152016112cd565b5060006020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b60208152600061133a60208301846112c3565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff8116811461136357600080fd5b50565b6000806040838503121561137957600080fd5b823561138481611341565b946020939093013593505050565b6000806000606084860312156113a757600080fd5b83356113b281611341565b925060208401356113c281611341565b929592945050506040919091013590565b6000602082840312156113e557600080fd5b5035919050565b6000602082840312156113fe57600080fd5b813561133a81611341565b6020810160038310611444577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000806040838503121561148c57600080fd5b823567ffffffffffffffff8111156114a357600080fd5b8301601f810185136114b457600080fd5b803567ffffffffffffffff8111156114ce576114ce61144a565b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8501160116810181811067ffffffffffffffff8211171561153a5761153a61144a565b60405281815282820160200187101561155257600080fd5b8160208401602083013760006020928201830152969401359450505050565b6000806040838503121561158457600080fd5b823561158f81611341565b9150602083013561159f81611341565b809150509250929050565b600181811c908216806115be57607f821691505b6020821081036115f7577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8181038181111561051a5761051a6115fd565b60408152600061165260408301856112c3565b90508260208301529392505050565b60006020828403121561167357600080fd5b8151801515811461133a57600080fd5b60808152600061169660808301876112c3565b6020830195909552506040810192909252606090910152919050565b6000602082840312156116c457600080fd5b815161133a81611341565b6000602082840312156116e157600080fd5b5051919050565b808202811582820484141761051a5761051a6115fd565b8082018082111561051a5761051a6115fd56fea26469706673582212204013e39523742118b3f2227e145ee7e48176ba6aebead33c596dca2acb59a74c64736f6c634300081a0033a2646970667358221220207224bd1b7fd4d1ce528794ecdbb817f1e05020931fe87e3876d87d1f37b30664736f6c634300081a0033", + ABI: "[{\"type\":\"function\",\"name\":\"IS_TEST\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"PAUSER_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeArtifacts\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedArtifacts_\",\"type\":\"string[]\",\"internalType\":\"string[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeContracts\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedContracts_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeSelectors\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedSelectors_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzSelector[]\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"selectors\",\"type\":\"bytes4[]\",\"internalType\":\"bytes4[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeSenders\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedSenders_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"failed\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"setUp\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"targetArtifactSelectors\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedArtifactSelectors_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzArtifactSelector[]\",\"components\":[{\"name\":\"artifact\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"selectors\",\"type\":\"bytes4[]\",\"internalType\":\"bytes4[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetArtifacts\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedArtifacts_\",\"type\":\"string[]\",\"internalType\":\"string[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetContracts\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedContracts_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetInterfaces\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedInterfaces_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzInterface[]\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"artifacts\",\"type\":\"string[]\",\"internalType\":\"string[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetSelectors\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedSelectors_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzSelector[]\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"selectors\",\"type\":\"bytes4[]\",\"internalType\":\"bytes4[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetSenders\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedSenders_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"testDeposit\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositAndRevertZRC20AndCallZContract\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositAndRevertZRC20AndCallZContractFailsITargetIsFungibleModule\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositAndRevertZRC20AndCallZContractFailsITargetIsGateway\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositAndRevertZRC20AndCallZContractFailsIfAmountIsZero\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositAndRevertZRC20AndCallZContractFailsIfSenderIsNotFungibleModule\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositAndRevertZRC20AndCallZContractFailsIfTargetIsZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositAndRevertZRC20AndCallZContractFailsIfZrc20IsZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositFailsIfAmountIs0\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositFailsIfSenderNotFungibleModule\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositFailsIfTargetIsFungibleModule\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositFailsIfTargetIsGateway\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositFailsIfTargetIsZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositFailsIfZrc20IsZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositTogglePause\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositZETAAndCallZContract\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositZETAAndCallZContractFailsIfSenderIsNotFungibleModule\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositZETAAndCallZContractFailsIfTargetIsAmountIsZero\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositZETAAndCallZContractFailsIfTargetIsFungibleModule\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositZETAAndCallZContractFailsIfTargetIsGateway\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositZETAAndCallZContractFailsIfTargetIsZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositZRC20AndCallZContract\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositZRC20AndCallZContractFailsIfAmountIsZero\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositZRC20AndCallZContractFailsIfSenderIsNotFungibleModule\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositZRC20AndCallZContractFailsIfTargetIsZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositZRC20AndCallZContractFailsIfZrc20IsZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositZRC20AndCallZContractIfTargetIsFungibleModule\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositZRC20AndCallZContractIfTargetIsGateway\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testExecuteFailsIfAmountIsZero\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testExecuteFailsIfTargetIsZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testExecuteFailsIfZrc20IsZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testExecuteRevertZContract\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testExecuteRevertZContractFailsIfAmountIsZero\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testExecuteRevertZContractFailsIfTargetIsZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testExecuteRevertZContractFailsIfZrc20IsZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testExecuteRevertZContractIfSenderIsNotFungibleModule\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testExecuteZContract\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testExecuteZContractFailsIfSenderIsNotFungibleModule\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"event\",\"name\":\"Call\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"chainId\",\"type\":\"uint256\",\"indexed\":true,\"internalType\":\"uint256\"},{\"name\":\"receiver\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"message\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ContextData\",\"inputs\":[{\"name\":\"origin\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"chainID\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"msgSender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"message\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ContextDataRevert\",\"inputs\":[{\"name\":\"origin\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"chainID\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"msgSender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"message\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Withdrawal\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"chainId\",\"type\":\"uint256\",\"indexed\":true,\"internalType\":\"uint256\"},{\"name\":\"receiver\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"zrc20\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"gasfee\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"protocolFlatFee\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"message\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log\",\"inputs\":[{\"name\":\"\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_address\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_array\",\"inputs\":[{\"name\":\"val\",\"type\":\"uint256[]\",\"indexed\":false,\"internalType\":\"uint256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_array\",\"inputs\":[{\"name\":\"val\",\"type\":\"int256[]\",\"indexed\":false,\"internalType\":\"int256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_array\",\"inputs\":[{\"name\":\"val\",\"type\":\"address[]\",\"indexed\":false,\"internalType\":\"address[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_bytes\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_bytes32\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_int\",\"inputs\":[{\"name\":\"\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_address\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_array\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"uint256[]\",\"indexed\":false,\"internalType\":\"uint256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_array\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"int256[]\",\"indexed\":false,\"internalType\":\"int256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_array\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"address[]\",\"indexed\":false,\"internalType\":\"address[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_bytes\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_bytes32\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_decimal_int\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"},{\"name\":\"decimals\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_decimal_uint\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"decimals\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_int\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_string\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_uint\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_string\",\"inputs\":[{\"name\":\"\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_uint\",\"inputs\":[{\"name\":\"\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"logs\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"AccessControlUnauthorizedAccount\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"neededRole\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"type\":\"error\",\"name\":\"CallerIsNotFungibleModule\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"EnforcedPause\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"FailedZetaSent\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"GasFeeTransferFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientZRC20Amount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientZetaAmount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidTarget\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OnlyWZETAOrFungible\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"WithdrawalFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZRC20BurnFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZRC20DepositFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZRC20TransferFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZeroAddress\",\"inputs\":[]}]", + Bin: "0x6080604052600c8054600160ff199182168117909255601f80549091169091179055348015602c57600080fd5b5061fe508061003c6000396000f3fe608060405234801561001057600080fd5b506004361061034c5760003560e01c80637f924c4e116101bd578063c2725318116100f9578063e63ab1e9116100a2578063f5a357331161007c578063f5a357331461055a578063fa7626d414610562578063fc6734eb1461056f578063fc79171b1461057757600080fd5b8063e63ab1e914610515578063eba3c49c1461054a578063f06c08941461055257600080fd5b8063df690b9a116100d3578063df690b9a146104fd578063df881f6c14610505578063e20c9f711461050d57600080fd5b8063c2725318146104e5578063c3248272146104ed578063cced12c7146104f557600080fd5b8063996b767511610166578063aed71d9711610140578063aed71d97146104b5578063b0464fdc146104bd578063b5508aa9146104c5578063ba414fa6146104cd57600080fd5b8063996b76751461049d5780639b3272bf146104a55780639b86d40f146104ad57600080fd5b8063916a17c611610197578063916a17c61461047857806394d78f7b1461048d57806396d9d8761461049557600080fd5b80637f924c4e1461045357806382978ffc1461045b57806385226c811461046357600080fd5b806331d099561161028c578063461fc5af11610235578063612aa5491161020f578063612aa5491461042657806366d9a9a01461042e578063720b9aa9146104435780637243a2fb1461044b57600080fd5b8063461fc5af1461040e57806355ea935114610416578063597cfeb01461041e57600080fd5b80633e5e3c23116102665780633e5e3c23146103f65780633f7286f4146103fe57806344b2a40b1461040657600080fd5b806331d09956146103de5780633a25c460146103e65780633ab5b199146103ee57600080fd5b8063198d5ca4116102f95780631fe68797116102d35780631fe68797146103b1578063254ea181146103b95780632ade3880146103c157806330548465146103d657600080fd5b8063198d5ca4146103835780631c785a141461038b5780631ed7831c1461039357600080fd5b8063104b35221161032a578063104b35221461036b57806314b7a6da14610373578063191c9a9e1461037b57600080fd5b806309f080da1461035157806309f92c1f1461035b5780630a9254e414610363575b600080fd5b61035961057f565b005b610359610773565b610359610926565b610359611393565b610359611585565b6103596116eb565b61035961189c565b610359611b56565b61039b61249f565b6040516103a8919061a8fc565b60405180910390f35b610359612501565b610359612a30565b6103c9612be5565b6040516103a8919061a998565b610359612d27565b610359612edc565b61035961309b565b610359613256565b61039b613407565b61039b613467565b6103596134c7565b61035961364f565b61035961380d565b6103596139c0565b610359613d96565b610436613f49565b6040516103a8919061aafe565b6103596140cb565b61035961433e565b6103596144f1565b610359614543565b61046b614693565b6040516103a8919061ab9c565b610480614763565b6040516103a8919061ac13565b61035961485e565b610359614a0d565b610359614b60565b610359614cb4565b610359614e65565b610359615011565b61048061531d565b61046b615418565b6104d56154e8565b60405190151581526020016103a8565b6103596155bc565b610359615775565b61035961592e565b610359615b19565b610359615cd7565b61039b615e8c565b61053c7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b6040519081526020016103a8565b610359615eec565b6103596160aa565b61035961625f565b601f546104d59060ff1681565b610359616416565b6103596165c7565b60006040516020016105909061acaa565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401526001838301528151630618f58760e51b81527f2b2add3d0000000000000000000000000000000000000000000000000000000060048201529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163c31eb0e091602480830192600092919082900301818387803b15801561065a57600080fd5b505af115801561066e573d6000803e3d6000fd5b505060255460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b1580156106cb57600080fd5b505af11580156106df573d6000803e3d6000fd5b50506020546021546024546040517f5af659670000000000000000000000000000000000000000000000000000000081526001600160a01b039384169550635af65967945061073d938793811692600192911690899060040161ad25565b600060405180830381600087803b15801561075757600080fd5b505af115801561076b573d6000803e3d6000fd5b505050505050565b60006040516020016107849061acaa565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401819052600184840152825163ca669fa760e01b815260048101919091529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163ca669fa791602480830192600092919082900301818387803b15801561083257600080fd5b505af1158015610846573d6000803e3d6000fd5b5050604051630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b1580156108b657600080fd5b505af11580156108ca573d6000803e3d6000fd5b50506020546024546040517fbcf7f32b0000000000000000000000000000000000000000000000000000000081526001600160a01b03928316945063bcf7f32b935061073d92869260009260019290911690899060040161ad25565b602580547fffffffffffffffffffffffff000000000000000000000000000000000000000090811630179091556026805490911661123417905560405161096c9061a80f565b604051809103906000f080158015610988573d6000803e3d6000fd5b50602280547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03928316908117909155604080518082018252600f81527f476174657761795a45564d2e736f6c000000000000000000000000000000000060208201526025549151602481019390935292166044820152610a6c919060640160408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f485cc955000000000000000000000000000000000000000000000000000000001790526166fe565b601f80547fffffffffffffffffffffff0000000000000000000000000000000000000000ff166101006001600160a01b039384168102919091179182905560208054919092049092167fffffffffffffffffffffffff000000000000000000000000000000000000000090921682178155604080517f3ce4a5bc0000000000000000000000000000000000000000000000000000000081529051633ce4a5bc926004808401939192918290030181865afa158015610b2e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b52919061ad7a565b602780547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055604051610b969061a81c565b604051809103906000f080158015610bb2573d6000803e3d6000fd5b50602480547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039283161781556027546040517f06447d5600000000000000000000000000000000000000000000000000000000815292166004830152737109709ecfa91a80626ff3989d68f67f5b1dd12d916306447d569101600060405180830381600087803b158015610c4e57600080fd5b505af1158015610c62573d6000803e3d6000fd5b505050506000806000604051610c779061a829565b6001600160a01b03938416815291831660208301529091166040820152606001604051809103906000f080158015610cb3573d6000803e3d6000fd5b50602380547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03928316908117909155602054604051601293600193849360009391921690610d099061a836565b610d189695949392919061ada3565b604051809103906000f080158015610d34573d6000803e3d6000fd5b50602180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039283169081179091556023546040517fee2815ba0000000000000000000000000000000000000000000000000000000081526001600482015260248101929092529091169063ee2815ba90604401600060405180830381600087803b158015610dcb57600080fd5b505af1158015610ddf573d6000803e3d6000fd5b50506023546040517fa7cb050700000000000000000000000000000000000000000000000000000000815260016004820181905260248201526001600160a01b03909116925063a7cb05079150604401600060405180830381600087803b158015610e4957600080fd5b505af1158015610e5d573d6000803e3d6000fd5b50506027546040517fc88a5e6d0000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152633b9aca006024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c88a5e6d9150604401600060405180830381600087803b158015610edd57600080fd5b505af1158015610ef1573d6000803e3d6000fd5b50505050602260009054906101000a90046001600160a01b03166001600160a01b031663d0e30db0600a6040518263ffffffff1660e01b81526004016000604051808303818588803b158015610f4657600080fd5b505af1158015610f5a573d6000803e3d6000fd5b50506022546020546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152600a60248201529116935063095ea7b3925060440190506020604051808303816000875af1158015610fce573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ff2919061ae98565b506021546025546040517f47e7ef240000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620186a060248201529116906347e7ef24906044016020604051808303816000875af1158015611063573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611087919061ae98565b507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b03166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156110e657600080fd5b505af11580156110fa573d6000803e3d6000fd5b50506025546040517f06447d560000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506306447d569150602401600060405180830381600087803b15801561117057600080fd5b505af1158015611184573d6000803e3d6000fd5b50506021546020546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620186a060248201529116925063095ea7b391506044016020604051808303816000875af11580156111f8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061121c919061ae98565b50602260009054906101000a90046001600160a01b03166001600160a01b031663d0e30db0600a6040518263ffffffff1660e01b81526004016000604051808303818588803b15801561126e57600080fd5b505af1158015611282573d6000803e3d6000fd5b50506022546020546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152600a60248201529116935063095ea7b3925060440190506020604051808303816000875af11580156112f6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061131a919061ae98565b507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b03166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561137957600080fd5b505af115801561138d573d6000803e3d6000fd5b50505050565b6040516001906000906113a89060200161acaa565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401526001838301528151630618f58760e51b81527f82d5d76a0000000000000000000000000000000000000000000000000000000060048201529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163c31eb0e091602480830192600092919082900301818387803b15801561147257600080fd5b505af1158015611486573d6000803e3d6000fd5b505060275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b1580156114e357600080fd5b505af11580156114f7573d6000803e3d6000fd5b50506020546027546040517f21501a950000000000000000000000000000000000000000000000000000000081526001600160a01b0392831694506321501a95935061154e9286928992911690889060040161aeba565b600060405180830381600087803b15801561156857600080fd5b505af115801561157c573d6000803e3d6000fd5b50505050505050565b60275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156115de57600080fd5b505af11580156115f2573d6000803e3d6000fd5b5050604051630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b15801561166257600080fd5b505af1158015611676573d6000803e3d6000fd5b50506020546021546040517ff45346dc0000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260016024820152600060448201529116925063f45346dc91506064015b600060405180830381600087803b15801561137957600080fd5b60006040516020016116fc9061acaa565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401819052600184840152825163ca669fa760e01b815260048101919091529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163ca669fa791602480830192600092919082900301818387803b1580156117aa57600080fd5b505af11580156117be573d6000803e3d6000fd5b5050604051630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b15801561182e57600080fd5b505af1158015611842573d6000803e3d6000fd5b50506020546021546040517f309f50040000000000000000000000000000000000000000000000000000000081526001600160a01b03928316945063309f5004935061073d9286921690600190600090899060040161ad25565b6021546026546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260019260009216906370a0823190602401602060405180830381865afa158015611906573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061192a919061aef4565b905061193760008261671d565b60255460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561199057600080fd5b505af11580156119a4573d6000803e3d6000fd5b5050604051630618f58760e51b81527f2b2add3d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b158015611a1457600080fd5b505af1158015611a28573d6000803e3d6000fd5b50506020546021546026546040517ff45346dc0000000000000000000000000000000000000000000000000000000081526001600160a01b0392831660048201526024810188905290821660448201529116925063f45346dc9150606401600060405180830381600087803b158015611aa057600080fd5b505af1158015611ab4573d6000803e3d6000fd5b50506021546026546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260009450911691506370a0823190602401602060405180830381865afa158015611b20573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b44919061aef4565b9050611b5160008261671d565b505050565b60275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015611baf57600080fd5b505af1158015611bc3573d6000803e3d6000fd5b5050602754604080516001600160a01b0390921660248301527f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a60448084019190915281518084039091018152606490920181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb39250611cae919060040161af0d565b600060405180830381600087803b158015611cc857600080fd5b505af1158015611cdc573d6000803e3d6000fd5b50505050602060009054906101000a90046001600160a01b03166001600160a01b0316638456cb596040518163ffffffff1660e01b8152600401600060405180830381600087803b158015611d3057600080fd5b505af1158015611d44573d6000803e3d6000fd5b505060275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b158015611da157600080fd5b505af1158015611db5573d6000803e3d6000fd5b5050602754604080516001600160a01b0390921660248301527f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a60448084019190915281518084039091018152606490920181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb39250611ea0919060040161af0d565b600060405180830381600087803b158015611eba57600080fd5b505af1158015611ece573d6000803e3d6000fd5b50505050602060009054906101000a90046001600160a01b03166001600160a01b0316633f4ba83a6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015611f2257600080fd5b505af1158015611f36573d6000803e3d6000fd5b505060255460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b158015611f9357600080fd5b505af1158015611fa7573d6000803e3d6000fd5b50505050602060009054906101000a90046001600160a01b03166001600160a01b0316638456cb596040518163ffffffff1660e01b8152600401600060405180830381600087803b158015611ffb57600080fd5b505af115801561200f573d6000803e3d6000fd5b5050604051630618f58760e51b81527fd93c066500000000000000000000000000000000000000000000000000000000600482015260019250737109709ecfa91a80626ff3989d68f67f5b1dd12d915063c31eb0e090602401600060405180830381600087803b15801561208257600080fd5b505af1158015612096573d6000803e3d6000fd5b505060275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b1580156120f357600080fd5b505af1158015612107573d6000803e3d6000fd5b50506020546021546026546040517ff45346dc0000000000000000000000000000000000000000000000000000000081526001600160a01b0392831660048201526024810187905290821660448201529116925063f45346dc9150606401600060405180830381600087803b15801561217f57600080fd5b505af1158015612193573d6000803e3d6000fd5b505060255460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b1580156121f057600080fd5b505af1158015612204573d6000803e3d6000fd5b50505050602060009054906101000a90046001600160a01b03166001600160a01b0316633f4ba83a6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561225857600080fd5b505af115801561226c573d6000803e3d6000fd5b50506021546026546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260009450911691506370a08231906024015b602060405180830381865afa1580156122d9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122fd919061aef4565b905061230a60008261671d565b60275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561236357600080fd5b505af1158015612377573d6000803e3d6000fd5b50506020546021546026546040517ff45346dc0000000000000000000000000000000000000000000000000000000081526001600160a01b0392831660048201526024810188905290821660448201529116925063f45346dc9150606401600060405180830381600087803b1580156123ef57600080fd5b505af1158015612403573d6000803e3d6000fd5b50506021546026546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260009450911691506370a0823190602401602060405180830381865afa15801561246f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612493919061aef4565b9050611b51838261671d565b606060168054806020026020016040519081016040528092919081815260200182805480156124f757602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116124d9575b5050505050905090565b6022546027546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260019260009216906370a0823190602401602060405180830381865afa15801561256b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061258f919061aef4565b6022546020546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201529293506000929116906370a0823190602401602060405180830381865afa1580156125fa573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061261e919061aef4565b6024546040519192506001600160a01b031631906000906126419060200161acaa565b60408051601f19818403018152606080840190925260205490911b6bffffffffffffffffffffffff191660808301529150600090806094810160408051808303601f190181529181529082526027546001600160a01b03908116602084015260019282018390526024805492517f81bad6f300000000000000000000000000000000000000000000000000000000815260048101859052908101849052604481018490526064810193909352166084820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b15801561272f57600080fd5b505af1158015612743573d6000803e3d6000fd5b5050602080546040517fcdc8ee677dc5ebe680fb18cebda5e26ba5ea1f0ba504a47e2a9a2ecb476dc98e945061279e93506001600160a01b03909116910160609190911b6bffffffffffffffffffffffff1916815260140190565b60408051601f19818403018152908290526027546020546127ce936001600160a01b03928316928c92169061af20565b60405180910390a160275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561282f57600080fd5b505af1158015612843573d6000803e3d6000fd5b50506020546024546040517f21501a950000000000000000000000000000000000000000000000000000000081526001600160a01b0392831694506321501a95935061289a9286928c92911690889060040161aeba565b600060405180830381600087803b1580156128b457600080fd5b505af11580156128c8573d6000803e3d6000fd5b50506022546027546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260009450911691506370a0823190602401602060405180830381865afa158015612934573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612958919061aef4565b905061296d612967888861afc2565b8261671d565b6022546020546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260009291909116906370a0823190602401602060405180830381865afa1580156129d7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129fb919061aef4565b9050612a07868261671d565b612a26612a14898761afd5565b6024546001600160a01b03163161671d565b5050505050505050565b6000604051602001612a419061acaa565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401819052600184840152825163ca669fa760e01b815260048101919091529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163ca669fa791602480830192600092919082900301818387803b158015612aef57600080fd5b505af1158015612b03573d6000803e3d6000fd5b5050604051630618f58760e51b81527f5d67094f000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b158015612b7357600080fd5b505af1158015612b87573d6000803e3d6000fd5b50506020546021546024546040517fc39aca370000000000000000000000000000000000000000000000000000000081526001600160a01b03938416955063c39aca37945061073d938793811692600092911690899060040161ad25565b6060601e805480602002602001604051908101604052809291908181526020016000905b82821015612d1e57600084815260208082206040805180820182526002870290920180546001600160a01b03168352600181018054835181870281018701909452808452939591948681019491929084015b82821015612d07578382906000526020600020018054612c7a9061afe8565b80601f0160208091040260200160405190810160405280929190818152602001828054612ca69061afe8565b8015612cf35780601f10612cc857610100808354040283529160200191612cf3565b820191906000526020600020905b815481529060010190602001808311612cd657829003601f168201915b505050505081526020019060010190612c5b565b505050508152505081526020019060010190612c09565b50505050905090565b6000604051602001612d389061acaa565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401819052600184840152825163ca669fa760e01b815260048101919091529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163ca669fa791602480830192600092919082900301818387803b158015612de657600080fd5b505af1158015612dfa573d6000803e3d6000fd5b5050604051630618f58760e51b81527f5d67094f000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b158015612e6a57600080fd5b505af1158015612e7e573d6000803e3d6000fd5b50506020546021546024546040517f309f50040000000000000000000000000000000000000000000000000000000081526001600160a01b03938416955063309f5004945061073d938793811692600092911690899060040161ad25565b6000604051602001612eed9061acaa565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401526001838301528151630618f58760e51b81527f2b2add3d0000000000000000000000000000000000000000000000000000000060048201529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163c31eb0e091602480830192600092919082900301818387803b158015612fb757600080fd5b505af1158015612fcb573d6000803e3d6000fd5b505060255460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa791506024015b600060405180830381600087803b15801561302957600080fd5b505af115801561303d573d6000803e3d6000fd5b50506020546021546024546040517f309f50040000000000000000000000000000000000000000000000000000000081526001600160a01b03938416955063309f5004945061073d938793811692600192911690899060040161ad25565b6040516001906000906130b09060200161acaa565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401526001838301528151630618f58760e51b81527f2b2add3d0000000000000000000000000000000000000000000000000000000060048201529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163c31eb0e091602480830192600092919082900301818387803b15801561317a57600080fd5b505af115801561318e573d6000803e3d6000fd5b505060255460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b1580156131eb57600080fd5b505af11580156131ff573d6000803e3d6000fd5b50506020546024546040517f21501a950000000000000000000000000000000000000000000000000000000081526001600160a01b0392831694506321501a95935061154e9286928992911690889060040161aeba565b60006040516020016132679061acaa565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401819052600184840152825163ca669fa760e01b815260048101919091529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163ca669fa791602480830192600092919082900301818387803b15801561331557600080fd5b505af1158015613329573d6000803e3d6000fd5b5050604051630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b15801561339957600080fd5b505af11580156133ad573d6000803e3d6000fd5b50506020546021546040517fbcf7f32b0000000000000000000000000000000000000000000000000000000081526001600160a01b03928316945063bcf7f32b935061073d9286921690600190600090899060040161ad25565b606060188054806020026020016040519081016040528092919081815260200182805480156124f7576020028201919060005260206000209081546001600160a01b031681526001909101906020018083116124d9575050505050905090565b606060178054806020026020016040519081016040528092919081815260200182805480156124f7576020028201919060005260206000209081546001600160a01b031681526001909101906020018083116124d9575050505050905090565b60275460405163ca669fa760e01b81526001600160a01b039091166004820152600190737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561352357600080fd5b505af1158015613537573d6000803e3d6000fd5b5050604051630618f58760e51b81527f82d5d76a000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b1580156135a757600080fd5b505af11580156135bb573d6000803e3d6000fd5b50506020546021546027546040517ff45346dc0000000000000000000000000000000000000000000000000000000081526001600160a01b0392831660048201526024810187905290821660448201529116925063f45346dc91506064015b600060405180830381600087803b15801561363457600080fd5b505af1158015613648573d6000803e3d6000fd5b5050505050565b60006040516020016136609061acaa565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401526001838301528151630618f58760e51b81527f2b2add3d0000000000000000000000000000000000000000000000000000000060048201529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163c31eb0e091602480830192600092919082900301818387803b15801561372a57600080fd5b505af115801561373e573d6000803e3d6000fd5b505060255460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b15801561379b57600080fd5b505af11580156137af573d6000803e3d6000fd5b50506020546021546024546040517fc39aca370000000000000000000000000000000000000000000000000000000081526001600160a01b03938416955063c39aca37945061073d938793811692600192911690899060040161ad25565b600060405160200161381e9061acaa565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401819052600184840152825163ca669fa760e01b815260048101919091529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163ca669fa791602480830192600092919082900301818387803b1580156138cc57600080fd5b505af11580156138e0573d6000803e3d6000fd5b5050604051630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b15801561395057600080fd5b505af1158015613964573d6000803e3d6000fd5b50506020546024546040517f5af659670000000000000000000000000000000000000000000000000000000081526001600160a01b039283169450635af65967935061073d92869260009260019290911690899060040161ad25565b602154602480546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260009391909116916370a082319101602060405180830381865afa158015613a29573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a4d919061aef4565b9050613a5a60008261671d565b6000604051602001613a6b9061acaa565b60408051601f19818403018152606080840190925260205490911b6bffffffffffffffffffffffff191660808301529150600090806094810160408051808303601f190181529181529082526027546001600160a01b03908116602084015260019282018390526024805492517f81bad6f300000000000000000000000000000000000000000000000000000000815260048101859052908101849052604481018490526064810193909352166084820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b158015613b5957600080fd5b505af1158015613b6d573d6000803e3d6000fd5b5050602080546040517fcdc8ee677dc5ebe680fb18cebda5e26ba5ea1f0ba504a47e2a9a2ecb476dc98e9450613bc893506001600160a01b03909116910160609190911b6bffffffffffffffffffffffff1916815260140190565b60408051601f1981840301815290829052602754602054613bf9936001600160a01b0392831692600192169061af20565b60405180910390a160275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015613c5a57600080fd5b505af1158015613c6e573d6000803e3d6000fd5b50506020546021546024546040517fc39aca370000000000000000000000000000000000000000000000000000000081526001600160a01b03938416955063c39aca379450613ccc938793811692600192911690899060040161ad25565b600060405180830381600087803b158015613ce657600080fd5b505af1158015613cfa573d6000803e3d6000fd5b5050602154602480546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260009550921692506370a082319101602060405180830381865afa158015613d65573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613d89919061aef4565b905061138d60018261671d565b6000604051602001613da79061acaa565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401819052600184840152825163ca669fa760e01b815260048101919091529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163ca669fa791602480830192600092919082900301818387803b158015613e5557600080fd5b505af1158015613e69573d6000803e3d6000fd5b5050604051630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b158015613ed957600080fd5b505af1158015613eed573d6000803e3d6000fd5b50506020546024546040517fc39aca370000000000000000000000000000000000000000000000000000000081526001600160a01b03928316945063c39aca37935061073d92869260009260019290911690899060040161ad25565b6060601b805480602002602001604051908101604052809291908181526020016000905b82821015612d1e5783829060005260206000209060020201604051806040016040529081600082018054613fa09061afe8565b80601f0160208091040260200160405190810160405280929190818152602001828054613fcc9061afe8565b80156140195780601f10613fee57610100808354040283529160200191614019565b820191906000526020600020905b815481529060010190602001808311613ffc57829003601f168201915b50505050508152602001600182018054806020026020016040519081016040528092919081815260200182805480156140b357602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190600401906020826003010492830192600103820291508084116140605790505b50505050508152505081526020019060010190613f6d565b60006040516020016140dc9061acaa565b60408051601f19818403018152606080840190925260205490911b6bffffffffffffffffffffffff191660808301529150600090806094810160408051808303601f190181529181529082526027546001600160a01b03908116602084015260019282018390526024805492517f81bad6f300000000000000000000000000000000000000000000000000000000815260048101859052908101849052604481018490526064810193909352166084820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b1580156141ca57600080fd5b505af11580156141de573d6000803e3d6000fd5b5050602080546040517fcdc8ee677dc5ebe680fb18cebda5e26ba5ea1f0ba504a47e2a9a2ecb476dc98e945061423993506001600160a01b03909116910160609190911b6bffffffffffffffffffffffff1916815260140190565b60408051601f198184030181529082905260275460205461426a936001600160a01b0392831692600192169061af20565b60405180910390a160275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa7906024015b600060405180830381600087803b1580156142cc57600080fd5b505af11580156142e0573d6000803e3d6000fd5b50506020546021546024546040517fbcf7f32b0000000000000000000000000000000000000000000000000000000081526001600160a01b03938416955063bcf7f32b945061073d938793811692600192911690899060040161ad25565b600060405160200161434f9061acaa565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401819052600184840152825163ca669fa760e01b815260048101919091529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163ca669fa791602480830192600092919082900301818387803b1580156143fd57600080fd5b505af1158015614411573d6000803e3d6000fd5b5050604051630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b15801561448157600080fd5b505af1158015614495573d6000803e3d6000fd5b50506020546024546040517f309f50040000000000000000000000000000000000000000000000000000000081526001600160a01b03928316945063309f5004935061073d92869260009260019290911690899060040161ad25565b6021546026546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260019260009216906370a08231906024016122bc565b60275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561459c57600080fd5b505af11580156145b0573d6000803e3d6000fd5b5050604051630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b15801561462057600080fd5b505af1158015614634573d6000803e3d6000fd5b50506020546026546040517ff45346dc00000000000000000000000000000000000000000000000000000000815260006004820152600160248201526001600160a01b0391821660448201529116925063f45346dc91506064016116d1565b6060601a805480602002602001604051908101604052809291908181526020016000905b82821015612d1e5783829060005260206000200180546146d69061afe8565b80601f01602080910402602001604051908101604052809291908181526020018280546147029061afe8565b801561474f5780601f106147245761010080835404028352916020019161474f565b820191906000526020600020905b81548152906001019060200180831161473257829003601f168201915b5050505050815260200190600101906146b7565b6060601d805480602002602001604051908101604052809291908181526020016000905b82821015612d1e5760008481526020908190206040805180820182526002860290920180546001600160a01b0316835260018101805483518187028101870190945280845293949193858301939283018282801561484657602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190600401906020826003010492830192600103820291508084116147f35790505b50505050508152505081526020019060010190614787565b600060405160200161486f9061acaa565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401819052600184840152825163ca669fa760e01b815260048101919091529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163ca669fa791602480830192600092919082900301818387803b15801561491d57600080fd5b505af1158015614931573d6000803e3d6000fd5b5050604051630618f58760e51b81527f19c08f49000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b1580156149a157600080fd5b505af11580156149b5573d6000803e3d6000fd5b50506020546021546040517f21501a950000000000000000000000000000000000000000000000000000000081526001600160a01b0392831694506321501a95935061073d928692600092911690889060040161aeba565b60275460405163ca669fa760e01b81526001600160a01b039091166004820152600190737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015614a6957600080fd5b505af1158015614a7d573d6000803e3d6000fd5b5050604051630618f58760e51b81527f82d5d76a000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b158015614aed57600080fd5b505af1158015614b01573d6000803e3d6000fd5b50506020546021546040517ff45346dc0000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260248101869052911660448201819052925063f45346dc915060640161361a565b60275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015614bb957600080fd5b505af1158015614bcd573d6000803e3d6000fd5b5050604051630618f58760e51b81527f5d67094f000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b158015614c3d57600080fd5b505af1158015614c51573d6000803e3d6000fd5b50506020546021546026546040517ff45346dc0000000000000000000000000000000000000000000000000000000081526001600160a01b0392831660048201526000602482015290821660448201529116925063f45346dc91506064016116d1565b6000604051602001614cc59061acaa565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401819052600184840152825163ca669fa760e01b815260048101919091529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163ca669fa791602480830192600092919082900301818387803b158015614d7357600080fd5b505af1158015614d87573d6000803e3d6000fd5b5050604051630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b158015614df757600080fd5b505af1158015614e0b573d6000803e3d6000fd5b50506020546021546040517fc39aca370000000000000000000000000000000000000000000000000000000081526001600160a01b03928316945063c39aca37935061073d9286921690600190600090899060040161ad25565b6000604051602001614e769061acaa565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401819052600184840152825163ca669fa760e01b815260048101919091529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163ca669fa791602480830192600092919082900301818387803b158015614f2457600080fd5b505af1158015614f38573d6000803e3d6000fd5b5050604051630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b158015614fa857600080fd5b505af1158015614fbc573d6000803e3d6000fd5b50506020546040517f21501a950000000000000000000000000000000000000000000000000000000081526001600160a01b0390911692506321501a95915061073d908490600190600090889060040161aeba565b602154602480546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260009391909116916370a082319101602060405180830381865afa15801561507a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061509e919061aef4565b90506150ab60008261671d565b60006040516020016150bc9061acaa565b60408051601f19818403018152606080840190925260205490911b6bffffffffffffffffffffffff191660808301529150600090806094810160408051808303601f190181529181529082526027546001600160a01b03908116602084015260019282018390526024805492517f81bad6f300000000000000000000000000000000000000000000000000000000815260048101859052908101849052604481018490526064810193909352166084820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b1580156151aa57600080fd5b505af11580156151be573d6000803e3d6000fd5b5050602080546040517ffdc887992b033668833927e252058e468fac0b6bd196d520f09c61b740e99948945061521993506001600160a01b03909116910160609190911b6bffffffffffffffffffffffff1916815260140190565b60408051601f198184030181529082905260275460205461524a936001600160a01b0392831692600192169061af20565b60405180910390a160275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156152ab57600080fd5b505af11580156152bf573d6000803e3d6000fd5b50506020546021546024546040517f5af659670000000000000000000000000000000000000000000000000000000081526001600160a01b039384169550635af659679450613ccc938793811692600192911690899060040161ad25565b6060601c805480602002602001604051908101604052809291908181526020016000905b82821015612d1e5760008481526020908190206040805180820182526002860290920180546001600160a01b0316835260018101805483518187028101870190945280845293949193858301939283018282801561540057602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190600401906020826003010492830192600103820291508084116153ad5790505b50505050508152505081526020019060010190615341565b60606019805480602002602001604051908101604052809291908181526020016000905b82821015612d1e57838290600052602060002001805461545b9061afe8565b80601f01602080910402602001604051908101604052809291908181526020018280546154879061afe8565b80156154d45780601f106154a9576101008083540402835291602001916154d4565b820191906000526020600020905b8154815290600101906020018083116154b757829003601f168201915b50505050508152602001906001019061543c565b60085460009060ff1615615500575060085460ff1690565b6040517f667f9d70000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d600482018190527f6661696c65640000000000000000000000000000000000000000000000000000602483015260009163667f9d7090604401602060405180830381865afa158015615591573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906155b5919061aef4565b1415905090565b60006040516020016155cd9061acaa565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401526001838301528151630618f58760e51b81527f82d5d76a0000000000000000000000000000000000000000000000000000000060048201529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163c31eb0e091602480830192600092919082900301818387803b15801561569757600080fd5b505af11580156156ab573d6000803e3d6000fd5b505060275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b15801561570857600080fd5b505af115801561571c573d6000803e3d6000fd5b50506020546021546040517fc39aca370000000000000000000000000000000000000000000000000000000081526001600160a01b03928316945063c39aca37935061073d92869216906001908690899060040161ad25565b60006040516020016157869061acaa565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401526001838301528151630618f58760e51b81527f82d5d76a0000000000000000000000000000000000000000000000000000000060048201529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163c31eb0e091602480830192600092919082900301818387803b15801561585057600080fd5b505af1158015615864573d6000803e3d6000fd5b505060275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b1580156158c157600080fd5b505af11580156158d5573d6000803e3d6000fd5b50506020546021546040517f5af659670000000000000000000000000000000000000000000000000000000081526001600160a01b039283169450635af65967935061073d92869216906001908690899060040161ad25565b600060405160200161593f9061acaa565b60408051601f19818403018152606080840190925260205490911b6bffffffffffffffffffffffff191660808301529150600090806094810160408051808303601f190181529181529082526027546001600160a01b03908116602084015260019282018390526024805492517f81bad6f300000000000000000000000000000000000000000000000000000000815260048101859052908101849052604481018490526064810193909352166084820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b158015615a2d57600080fd5b505af1158015615a41573d6000803e3d6000fd5b5050602080546040517ffdc887992b033668833927e252058e468fac0b6bd196d520f09c61b740e999489450615a9c93506001600160a01b03909116910160609190911b6bffffffffffffffffffffffff1916815260140190565b60408051601f1981840301815290829052602754602054615acd936001600160a01b0392831692600192169061af20565b60405180910390a160275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa79060240161300f565b6000604051602001615b2a9061acaa565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401526001838301528151630618f58760e51b81527f82d5d76a0000000000000000000000000000000000000000000000000000000060048201529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163c31eb0e091602480830192600092919082900301818387803b158015615bf457600080fd5b505af1158015615c08573d6000803e3d6000fd5b505060275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b158015615c6557600080fd5b505af1158015615c79573d6000803e3d6000fd5b50506020546021546027546040517fc39aca370000000000000000000000000000000000000000000000000000000081526001600160a01b03938416955063c39aca37945061073d938793811692600192911690899060040161ad25565b6000604051602001615ce89061acaa565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401819052600184840152825163ca669fa760e01b815260048101919091529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163ca669fa791602480830192600092919082900301818387803b158015615d9657600080fd5b505af1158015615daa573d6000803e3d6000fd5b5050604051630618f58760e51b81527f5d67094f000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b158015615e1a57600080fd5b505af1158015615e2e573d6000803e3d6000fd5b50506020546021546024546040517fbcf7f32b0000000000000000000000000000000000000000000000000000000081526001600160a01b03938416955063bcf7f32b945061073d938793811692600092911690899060040161ad25565b606060158054806020026020016040519081016040528092919081815260200182805480156124f7576020028201919060005260206000209081546001600160a01b031681526001909101906020018083116124d9575050505050905090565b6000604051602001615efd9061acaa565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401526001838301528151630618f58760e51b81527f82d5d76a0000000000000000000000000000000000000000000000000000000060048201529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163c31eb0e091602480830192600092919082900301818387803b158015615fc757600080fd5b505af1158015615fdb573d6000803e3d6000fd5b505060275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b15801561603857600080fd5b505af115801561604c573d6000803e3d6000fd5b50506020546021546027546040517f5af659670000000000000000000000000000000000000000000000000000000081526001600160a01b039384169550635af65967945061073d938793811692600192911690899060040161ad25565b60006040516020016160bb9061acaa565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401819052600184840152825163ca669fa760e01b815260048101919091529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163ca669fa791602480830192600092919082900301818387803b15801561616957600080fd5b505af115801561617d573d6000803e3d6000fd5b5050604051630618f58760e51b81527f5d67094f000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b1580156161ed57600080fd5b505af1158015616201573d6000803e3d6000fd5b50506020546021546024546040517f5af659670000000000000000000000000000000000000000000000000000000081526001600160a01b039384169550635af65967945061073d938793811692600092911690899060040161ad25565b6040516001906000906162749060200161acaa565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401526001838301528151630618f58760e51b81527f82d5d76a0000000000000000000000000000000000000000000000000000000060048201529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163c31eb0e091602480830192600092919082900301818387803b15801561633e57600080fd5b505af1158015616352573d6000803e3d6000fd5b505060275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b1580156163af57600080fd5b505af11580156163c3573d6000803e3d6000fd5b50506020546040517f21501a950000000000000000000000000000000000000000000000000000000081526001600160a01b0390911692506321501a95915061154e90849087908590889060040161aeba565b60006040516020016164279061acaa565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401819052600184840152825163ca669fa760e01b815260048101919091529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163ca669fa791602480830192600092919082900301818387803b1580156164d557600080fd5b505af11580156164e9573d6000803e3d6000fd5b5050604051630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b15801561655957600080fd5b505af115801561656d573d6000803e3d6000fd5b50506020546021546040517f5af659670000000000000000000000000000000000000000000000000000000081526001600160a01b039283169450635af65967935061073d9286921690600190600090899060040161ad25565b60006040516020016165d89061acaa565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401526001838301528151630618f58760e51b81527f2b2add3d0000000000000000000000000000000000000000000000000000000060048201529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163c31eb0e091602480830192600092919082900301818387803b1580156166a257600080fd5b505af11580156166b6573d6000803e3d6000fd5b505060255460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa791506024016142b2565b600061670861a843565b61671384848361679c565b9150505b92915050565b6040517f98296c540000000000000000000000000000000000000000000000000000000081526004810183905260248101829052737109709ecfa91a80626ff3989d68f67f5b1dd12d906398296c549060440160006040518083038186803b15801561678857600080fd5b505afa15801561076b573d6000803e3d6000fd5b6000806167a98584616817565b905061680c6040518060400160405280601d81526020017f4552433139363750726f78792e736f6c3a4552433139363750726f787900000081525082866040516020016167f792919061b035565b60405160208183030381529060405285616823565b9150505b9392505050565b60006168108383616851565b60c081015151600090156168475761684084848460c0015161686c565b9050616810565b6168408484616a12565b600061685d8383616afd565b61681083836020015184616823565b600080616877616b0d565b905060006168858683616be0565b9050600061689c8260600151836020015185617086565b905060006168ac83838989617298565b905060006168b982618115565b602081015181519192509060030b1561692c578982604001516040516020016168e392919061b057565b60408051601f19818403018152908290527f08c379a00000000000000000000000000000000000000000000000000000000082526169239160040161af0d565b60405180910390fd5b600061696f6040518060400160405280601581526020017f4465706c6f79656420746f20616464726573733a2000000000000000000000008152508360016182e4565b6040517fc6ce059d000000000000000000000000000000000000000000000000000000008152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c6ce059d906169c290849060040161af0d565b602060405180830381865afa1580156169df573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190616a03919061ad7a565b9b9a5050505050505050505050565b6040517f8d1cc9250000000000000000000000000000000000000000000000000000000081526000908190737109709ecfa91a80626ff3989d68f67f5b1dd12d90638d1cc92590616a6790879060040161af0d565b600060405180830381865afa158015616a84573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052616aac919081019061b1c0565b90506000616ada8285604051602001616ac692919061b1f5565b6040516020818303038152906040526184e4565b90506001600160a01b0381166167135784846040516020016168e392919061b224565b616b09828260006184f7565b5050565b604080518082018252600381527f6f75740000000000000000000000000000000000000000000000000000000000602082015290517fd145736c000000000000000000000000000000000000000000000000000000008152606091737109709ecfa91a80626ff3989d68f67f5b1dd12d91829063d145736c90616b9490849060040161b2cf565b600060405180830381865afa158015616bb1573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052616bd9919081019061b316565b9250505090565b616c126040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b6000737109709ecfa91a80626ff3989d68f67f5b1dd12d9050616c5d6040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b616c66856185fa565b60208201526000616c76866189df565b90506000836001600160a01b031663d930a0e66040518163ffffffff1660e01b8152600401600060405180830381865afa158015616cb8573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052616ce0919081019061b316565b86838560200151604051602001616cfa949392919061b35f565b60408051601f19818403018152908290527f60f9bb1100000000000000000000000000000000000000000000000000000000825291506000906001600160a01b038616906360f9bb1190616d5290859060040161af0d565b600060405180830381865afa158015616d6f573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052616d97919081019061b316565b6040517fdb4235f60000000000000000000000000000000000000000000000000000000081529091506001600160a01b0386169063db4235f690616ddf90849060040161b463565b602060405180830381865afa158015616dfc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190616e20919061ae98565b616e3557816040516020016168e3919061b4b5565b6040517f49c4fac80000000000000000000000000000000000000000000000000000000081526001600160a01b038616906349c4fac890616e7a90849060040161b547565b600060405180830381865afa158015616e97573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052616ebf919081019061b316565b84526040517fdb4235f60000000000000000000000000000000000000000000000000000000081526001600160a01b0386169063db4235f690616f0690849060040161b599565b602060405180830381865afa158015616f23573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190616f47919061ae98565b15616fdc576040517f49c4fac80000000000000000000000000000000000000000000000000000000081526001600160a01b038616906349c4fac890616f9190849060040161b599565b600060405180830381865afa158015616fae573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052616fd6919081019061b316565b60408501525b846001600160a01b03166349c4fac8828660000151604051602001617001919061b5eb565b6040516020818303038152906040526040518363ffffffff1660e01b815260040161702d92919061b657565b600060405180830381865afa15801561704a573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052617072919081019061b316565b606085015250608083015250949350505050565b60408051600480825260a0820190925260609160009190816020015b60608152602001906001900390816170a25790505090506040518060400160405280600481526020017f6772657000000000000000000000000000000000000000000000000000000000815250816000815181106171025761710261b67c565b60200260200101819052506040518060400160405280600381526020017f2d726c0000000000000000000000000000000000000000000000000000000000815250816001815181106171565761715661b67c565b602002602001018190525084604051602001617172919061b6ab565b604051602081830303815290604052816002815181106171945761719461b67c565b6020026020010181905250826040516020016171b0919061b717565b604051602081830303815290604052816003815181106171d2576171d261b67c565b602002602001018190525060006171e882618115565b602080820151604080518082018252600581527f2e6a736f6e00000000000000000000000000000000000000000000000000000081850190815282518084018452600080825290860152825180840190935290518252928101929092529192506172799060408051808201825260008082526020918201528151808301909252845182528085019082015290618c62565b61728e57856040516020016168e3919061b758565b9695505050505050565b60a0810151604080518082018252600080825260209182015281518083019092528251808352928101910152606090737109709ecfa91a80626ff3989d68f67f5b1dd12d90156172e8565b511590565b61745c578260200151156173a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605860248201527f54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f742060448201527f62652075736564207768656e207468652060736b6970566572696679536f757260648201527f6365436f646560206f7074696f6e206973206074727565600000000000000000608482015260a401616923565b8260c001511561745c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605360248201527f54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f742060448201527f62652075736564207768656e207468652060736b69704c6963656e736554797060648201527f6560206f7074696f6e2069732060747275656000000000000000000000000000608482015260a401616923565b6040805160ff8082526120008201909252600091816020015b606081526020019060019003908161747557905050905060006040518060400160405280600381526020017f6e707800000000000000000000000000000000000000000000000000000000008152508282806174d09061b7e9565b935060ff16815181106174e5576174e561b67c565b60200260200101819052506040518060400160405280600d81526020017f302e302e312d616c7068612e3700000000000000000000000000000000000000815250604051602001617536919061b808565b6040516020818303038152906040528282806175519061b7e9565b935060ff16815181106175665761756661b67c565b60200260200101819052506040518060400160405280600681526020017f6465706c6f7900000000000000000000000000000000000000000000000000008152508282806175b39061b7e9565b935060ff16815181106175c8576175c861b67c565b60200260200101819052506040518060400160405280600e81526020017f2d2d636f6e74726163744e616d650000000000000000000000000000000000008152508282806176159061b7e9565b935060ff168151811061762a5761762a61b67c565b602002602001018190525087602001518282806176469061b7e9565b935060ff168151811061765b5761765b61b67c565b60200260200101819052506040518060400160405280600e81526020017f2d2d636f6e7472616374506174680000000000000000000000000000000000008152508282806176a89061b7e9565b935060ff16815181106176bd576176bd61b67c565b6020908102919091010152875182826176d58161b7e9565b935060ff16815181106176ea576176ea61b67c565b60200260200101819052506040518060400160405280600981526020017f2d2d636861696e496400000000000000000000000000000000000000000000008152508282806177379061b7e9565b935060ff168151811061774c5761774c61b67c565b602002602001018190525061776046618cc3565b828261776b8161b7e9565b935060ff16815181106177805761778061b67c565b60200260200101819052506040518060400160405280600f81526020017f2d2d6275696c64496e666f46696c6500000000000000000000000000000000008152508282806177cd9061b7e9565b935060ff16815181106177e2576177e261b67c565b6020026020010181905250868282806177fa9061b7e9565b935060ff168151811061780f5761780f61b67c565b60209081029190910101528551156179365760408051808201909152601581527f2d2d636f6e7374727563746f7242797465636f64650000000000000000000000602082015282826178608161b7e9565b935060ff16815181106178755761787561b67c565b60209081029190910101526040517f71aad10d0000000000000000000000000000000000000000000000000000000081526001600160a01b038416906371aad10d906178c590899060040161af0d565b600060405180830381865afa1580156178e2573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261790a919081019061b316565b82826179158161b7e9565b935060ff168151811061792a5761792a61b67c565b60200260200101819052505b846020015115617a065760408051808201909152601281527f2d2d766572696679536f75726365436f646500000000000000000000000000006020820152828261797f8161b7e9565b935060ff16815181106179945761799461b67c565b60200260200101819052506040518060400160405280600581526020017f66616c73650000000000000000000000000000000000000000000000000000008152508282806179e19061b7e9565b935060ff16815181106179f6576179f661b67c565b6020026020010181905250617bcd565b617a3e6172e38660a0015160408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b617ad15760408051808201909152600d81527f2d2d6c6963656e7365547970650000000000000000000000000000000000000060208201528282617a818161b7e9565b935060ff1681518110617a9657617a9661b67c565b60200260200101819052508460a00151604051602001617ab6919061b6ab565b6040516020818303038152906040528282806179e19061b7e9565b8460c00151158015617b14575060408089015181518083018352600080825260209182015282518084019093528151835290810190820152617b1290511590565b155b15617bcd5760408051808201909152600d81527f2d2d6c6963656e7365547970650000000000000000000000000000000000000060208201528282617b588161b7e9565b935060ff1681518110617b6d57617b6d61b67c565b6020026020010181905250617b8188618d63565b604051602001617b91919061b6ab565b604051602081830303815290604052828280617bac9061b7e9565b935060ff1681518110617bc157617bc161b67c565b60200260200101819052505b60408086015181518083018352600080825260209182015282518084019093528151835290810190820152617c0190511590565b617c965760408051808201909152600b81527f2d2d72656c61796572496400000000000000000000000000000000000000000060208201528282617c448161b7e9565b935060ff1681518110617c5957617c5961b67c565b60200260200101819052508460400151828280617c759061b7e9565b935060ff1681518110617c8a57617c8a61b67c565b60200260200101819052505b606085015115617db75760408051808201909152600681527f2d2d73616c74000000000000000000000000000000000000000000000000000060208201528282617cdf8161b7e9565b935060ff1681518110617cf457617cf461b67c565b602090810291909101015260608501516040517fb11a19e800000000000000000000000000000000000000000000000000000000815260048101919091526001600160a01b0384169063b11a19e890602401600060405180830381865afa158015617d63573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052617d8b919081019061b316565b8282617d968161b7e9565b935060ff1681518110617dab57617dab61b67c565b60200260200101819052505b60e08501515115617e5e5760408051808201909152600a81527f2d2d6761734c696d69740000000000000000000000000000000000000000000060208201528282617e018161b7e9565b935060ff1681518110617e1657617e1661b67c565b6020026020010181905250617e328560e0015160000151618cc3565b8282617e3d8161b7e9565b935060ff1681518110617e5257617e5261b67c565b60200260200101819052505b60e08501516020015115617f085760408051808201909152600a81527f2d2d67617350726963650000000000000000000000000000000000000000000060208201528282617eab8161b7e9565b935060ff1681518110617ec057617ec061b67c565b6020026020010181905250617edc8560e0015160200151618cc3565b8282617ee78161b7e9565b935060ff1681518110617efc57617efc61b67c565b60200260200101819052505b60e08501516040015115617fb25760408051808201909152600e81527f2d2d6d617846656550657247617300000000000000000000000000000000000060208201528282617f558161b7e9565b935060ff1681518110617f6a57617f6a61b67c565b6020026020010181905250617f868560e0015160400151618cc3565b8282617f918161b7e9565b935060ff1681518110617fa657617fa661b67c565b60200260200101819052505b60e0850151606001511561805c5760408051808201909152601681527f2d2d6d61785072696f726974794665655065724761730000000000000000000060208201528282617fff8161b7e9565b935060ff16815181106180145761801461b67c565b60200260200101819052506180308560e0015160600151618cc3565b828261803b8161b7e9565b935060ff16815181106180505761805061b67c565b60200260200101819052505b60008160ff1667ffffffffffffffff81111561807a5761807a61b0d8565b6040519080825280602002602001820160405280156180ad57816020015b60608152602001906001900390816180985790505b50905060005b8260ff168160ff16101561810657838160ff16815181106180d6576180d661b67c565b6020026020010151828260ff16815181106180f3576180f361b67c565b60209081029190910101526001016180b3565b5093505050505b949350505050565b61813c6040518060600160405280600060030b815260200160608152602001606081525090565b60408051808201825260048082527f6261736800000000000000000000000000000000000000000000000000000000602083015291517fd145736c000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d92600091849163d145736c916181c29186910161b873565b600060405180830381865afa1580156181df573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052618207919081019061b316565b905060006182158683619852565b90506000846001600160a01b031663f45c1ce7836040518263ffffffff1660e01b8152600401618245919061ab9c565b6000604051808303816000875af1158015618264573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261828c919081019061b8ba565b805190915060030b158015906182a55750602081015151155b80156182b45750604081015151155b1561728e57816000815181106182cc576182cc61b67c565b60200260200101516040516020016168e3919061b970565b606060006183198560408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6040805180820182526000808252602091820152815180830190925286518252808701908201529091506183509082905b906199a7565b156184ad5760006183cd826183c7846183c16183938a60408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6040805180820182526000808252602091820152815180830190925282518252918201519181019190915290565b906199ce565b90619a30565b604080518082018252600181527f0a00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201529091506184319082906199a7565b1561849b57604080518082018252600181527f0a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152618498905b8290619ab5565b90505b6184a481619adb565b92505050616810565b82156184c65784846040516020016168e392919061bb5c565b5050604080516020810190915260008152616810565b509392505050565b6000808251602084016000f09392505050565b8160a001511561850657505050565b6000618513848484619b44565b9050600061852082618115565b602081015181519192509060030b1580156185bc5750604080518082018252600781527f5355434345535300000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526185bc9060408051808201825260008082526020918201528151808301909252845182528085019082015261834a565b156185c957505050505050565b604082015151156185e95781604001516040516020016168e3919061bc03565b806040516020016168e3919061bc61565b6060600061862f8360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600481527f2e736f6c0000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152909150618694905b8290618c62565b1561870357604080518082018252600481527f2e736f6c0000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616810906186fe90839061a0df565b619adb565b604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152618765905b829061a169565b60010361883257604080518082018252600181527f3a00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526187cb90618491565b50604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616810906186fe905b8390619ab5565b604080518082018252600581527f2e6a736f6e000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526188919061868d565b156189c857604080518082018252600181527f2f000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201819052845180860190955292518452830152906188f990839061a203565b90506000816001835161890c919061afc2565b8151811061891c5761891c61b67c565b602002602001015190506189bf6186fe6189926040518060400160405280600581526020017f2e6a736f6e00000000000000000000000000000000000000000000000000000081525060408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6040805180820182526000808252602091820152815180830190925285518252808601908201529061a0df565b95945050505050565b826040516020016168e3919061bccc565b50919050565b60606000618a148360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600481527f2e736f6c0000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152909150618a769061868d565b15618a845761681081619adb565b604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152618ae39061875e565b600103618b4d57604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616810906186fe9061882b565b604080518082018252600581527f2e6a736f6e00000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152618bac9061868d565b156189c857604080518082018252600181527f2f00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820181905284518086019095529251845283015290618c1490839061a203565b9050600181511115618c50578060028251618c2f919061afc2565b81518110618c3f57618c3f61b67c565b602002602001015192505050919050565b50826040516020016168e3919061bccc565b805182516000911115618c7757506000616717565b81518351602085015160009291618c8d9161afd5565b618c97919061afc2565b905082602001518103618cae576001915050616717565b82516020840151819020912014905092915050565b60606000618cd08361a2a8565b600101905060008167ffffffffffffffff811115618cf057618cf061b0d8565b6040519080825280601f01601f191660200182016040528015618d1a576020820181803683370190505b5090508181016020015b600019017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a8504945084618d2457509392505050565b604081810151815180830183526000808252602091820181905283518085018552835181529282018383015283518085018552600a81527f554e4c4943454e5345440000000000000000000000000000000000000000000081840190815285518087018752838152840192909252845180860190955251845290830152606091618def905b829061a38a565b15618e2f57505060408051808201909152600481527f4e6f6e65000000000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600981527f556e6c6963656e7365000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152618e8e90618de8565b15618ece57505060408051808201909152600981527f556e6c6963656e736500000000000000000000000000000000000000000000006020820152919050565b604080518082018252600381527f4d4954000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152618f2d90618de8565b15618f6d57505060408051808201909152600381527f4d495400000000000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f47504c2d322e302d6f6e6c79000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152618fcc90618de8565b806190315750604080518082018252601081527f47504c2d322e302d6f722d6c61746572000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261903190618de8565b1561907157505060408051808201909152600981527f474e552047504c763200000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f47504c2d332e302d6f6e6c790000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526190d090618de8565b806191355750604080518082018252601081527f47504c2d332e302d6f722d6c61746572000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261913590618de8565b1561917557505060408051808201909152600981527f474e552047504c763300000000000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4c47504c2d322e312d6f6e6c7900000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526191d490618de8565b806192395750604080518082018252601181527f4c47504c2d322e312d6f722d6c617465720000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261923990618de8565b1561927957505060408051808201909152600c81527f474e55204c47504c76322e3100000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4c47504c2d332e302d6f6e6c7900000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526192d890618de8565b8061933d5750604080518082018252601181527f4c47504c2d332e302d6f722d6c617465720000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261933d90618de8565b1561937d57505060408051808201909152600a81527f474e55204c47504c7633000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f4253442d322d436c617573650000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526193dc90618de8565b1561941c57505060408051808201909152600c81527f4253442d322d436c6175736500000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f4253442d332d436c6175736500000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261947b90618de8565b156194bb57505060408051808201909152600c81527f4253442d332d436c6175736500000000000000000000000000000000000000006020820152919050565b604080518082018252600781527f4d504c2d322e30000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261951a90618de8565b1561955a57505060408051808201909152600781527f4d504c2d322e30000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600781527f4f534c2d332e3000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526195b990618de8565b156195f957505060408051808201909152600781527f4f534c2d332e30000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600a81527f4170616368652d322e30000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261965890618de8565b1561969857505060408051808201909152600a81527f4170616368652d322e30000000000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4147504c2d332e302d6f6e6c7900000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526196f790618de8565b8061975c5750604080518082018252601181527f4147504c2d332e302d6f722d6c617465720000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261975c90618de8565b1561979c57505060408051808201909152600a81527f474e55204147504c7633000000000000000000000000000000000000000000006020820152919050565b604080518082018252600881527f4255534c2d312e31000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526197fb90618de8565b1561983b57505060408051808201909152600781527f42534c20312e31000000000000000000000000000000000000000000000000006020820152919050565b604080840151845191516168e3929060200161bdaa565b60608060005b84518110156198dd57818582815181106198745761987461b67c565b602002602001015160405160200161988d92919061b1f5565b6040516020818303038152906040529150600185516198ac919061afc2565b81146198d557816040516020016198c3919061bf13565b60405160208183030381529060405291505b600101619858565b5060408051600380825260808201909252600091816020015b60608152602001906001900390816198f657905050905083816000815181106199215761992161b67c565b60200260200101819052506040518060400160405280600281526020017f2d63000000000000000000000000000000000000000000000000000000000000815250816001815181106199755761997561b67c565b602002602001018190525081816002815181106199945761999461b67c565b6020908102919091010152949350505050565b60208083015183518351928401516000936199c5929184919061a39e565b14159392505050565b60408051808201909152600080825260208201526000619a00846000015185602001518560000151866020015161a4af565b9050836020015181619a12919061afc2565b84518590619a2190839061afc2565b90525060208401525090919050565b6040805180820190915260008082526020820152815183511015619a55575081616717565b6020808301519084015160019114619a7c5750815160208481015190840151829020919020145b8015619aad57825184518590619a9390839061afc2565b9052508251602085018051619aa990839061afd5565b9052505b509192915050565b6040805180820190915260008082526020820152619ad483838361a5cf565b5092915050565b60606000826000015167ffffffffffffffff811115619afc57619afc61b0d8565b6040519080825280601f01601f191660200182016040528015619b26576020820181803683370190505b5090506000602082019050619ad4818560200151866000015161a67a565b60606000619b50616b0d565b6040805160ff808252612000820190925291925060009190816020015b6060815260200190600190039081619b6d57905050905060006040518060400160405280600381526020017f6e70780000000000000000000000000000000000000000000000000000000000815250828280619bc89061b7e9565b935060ff1681518110619bdd57619bdd61b67c565b60200260200101819052506040518060400160405280600781526020017f5e312e33322e3300000000000000000000000000000000000000000000000000815250604051602001619c2e919061bf54565b604051602081830303815290604052828280619c499061b7e9565b935060ff1681518110619c5e57619c5e61b67c565b60200260200101819052506040518060400160405280600881526020017f76616c6964617465000000000000000000000000000000000000000000000000815250828280619cab9061b7e9565b935060ff1681518110619cc057619cc061b67c565b602002602001018190525082604051602001619cdc919061b717565b604051602081830303815290604052828280619cf79061b7e9565b935060ff1681518110619d0c57619d0c61b67c565b60200260200101819052506040518060400160405280600a81526020017f2d2d636f6e747261637400000000000000000000000000000000000000000000815250828280619d599061b7e9565b935060ff1681518110619d6e57619d6e61b67c565b6020026020010181905250619d83878461a6f4565b8282619d8e8161b7e9565b935060ff1681518110619da357619da361b67c565b602090810291909101015285515115619e4f5760408051808201909152600b81527f2d2d7265666572656e636500000000000000000000000000000000000000000060208201528282619df58161b7e9565b935060ff1681518110619e0a57619e0a61b67c565b6020026020010181905250619e2386600001518461a6f4565b8282619e2e8161b7e9565b935060ff1681518110619e4357619e4361b67c565b60200260200101819052505b856080015115619ebd5760408051808201909152601881527f2d2d756e73616665536b697053746f72616765436865636b000000000000000060208201528282619e988161b7e9565b935060ff1681518110619ead57619ead61b67c565b6020026020010181905250619f23565b8415619f235760408051808201909152601281527f2d2d726571756972655265666572656e6365000000000000000000000000000060208201528282619f028161b7e9565b935060ff1681518110619f1757619f1761b67c565b60200260200101819052505b60408601515115619fbf5760408051808201909152600d81527f2d2d756e73616665416c6c6f770000000000000000000000000000000000000060208201528282619f6d8161b7e9565b935060ff1681518110619f8257619f8261b67c565b60200260200101819052508560400151828280619f9e9061b7e9565b935060ff1681518110619fb357619fb361b67c565b60200260200101819052505b85606001511561a0295760408051808201909152601481527f2d2d756e73616665416c6c6f7752656e616d65730000000000000000000000006020820152828261a0088161b7e9565b935060ff168151811061a01d5761a01d61b67c565b60200260200101819052505b60008160ff1667ffffffffffffffff81111561a0475761a04761b0d8565b60405190808252806020026020018201604052801561a07a57816020015b606081526020019060019003908161a0655790505b50905060005b8260ff168160ff16101561a0d357838160ff168151811061a0a35761a0a361b67c565b6020026020010151828260ff168151811061a0c05761a0c061b67c565b602090810291909101015260010161a080565b50979650505050505050565b604080518082019091526000808252602082015281518351101561a104575081616717565b8151835160208501516000929161a11a9161afd5565b61a124919061afc2565b6020840151909150600190821461a145575082516020840151819020908220145b801561a1605783518551869061a15c90839061afc2565b9052505b50929392505050565b600080826000015161a18d856000015186602001518660000151876020015161a4af565b61a197919061afd5565b90505b8351602085015161a1ab919061afd5565b8111619ad4578161a1bb8161bf99565b925050826000015161a1f285602001518361a1d6919061afc2565b865161a1e2919061afc2565b838660000151876020015161a4af565b61a1fc919061afd5565b905061a19a565b6060600061a211848461a169565b61a21c90600161afd5565b67ffffffffffffffff81111561a2345761a23461b0d8565b60405190808252806020026020018201604052801561a26757816020015b606081526020019060019003908161a2525790505b50905060005b81518110156184dc5761a2836186fe8686619ab5565b82828151811061a2955761a29561b67c565b602090810291909101015260010161a26d565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000831061a2f1577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef8100000000831061a31d576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc10000831061a33b57662386f26fc10000830492506010015b6305f5e100831061a353576305f5e100830492506008015b612710831061a36757612710830492506004015b6064831061a379576064830492506002015b600a83106167175760010192915050565b600061a396838361a734565b159392505050565b60008085841161a4a5576020841161a451576000841561a3e957600161a3c586602061afc2565b61a3d090600861bfb3565b61a3db90600261c0b1565b61a3e5919061afc2565b1990505b835181168561a3f8898961afd5565b61a402919061afc2565b805190935082165b81811461a43c5787841161a424578794505050505061810d565b8361a42e8161c0bd565b94505082845116905061a40a565b61a446878561afd5565b94505050505061810d565b83832061a45e858861afc2565b61a468908761afd5565b91505b85821061a4a35784822080820361a4905761a486868461afd5565b935050505061810d565b61a49b60018461afc2565b92505061a46b565b505b5092949350505050565b6000838186851161a5ba576020851161a569576000851561a4fb57600161a4d787602061afc2565b61a4e290600861bfb3565b61a4ed90600261c0b1565b61a4f7919061afc2565b1990505b8451811660008761a50c8b8b61afd5565b61a516919061afc2565b855190915083165b82811461a55b5781861061a5435761a5368b8b61afd5565b965050505050505061810d565b8561a54d8161bf99565b96505083865116905061a51e565b85965050505050505061810d565b508383206000905b61a57b868961afc2565b821161a5b85785832080820361a597578394505050505061810d565b61a5a260018561afd5565b935050818061a5b09061bf99565b92505061a571565b505b61a5c4878761afd5565b979650505050505050565b6040805180820190915260008082526020820152600061a601856000015186602001518660000151876020015161a4af565b60208087018051918601919091525190915061a61d908261afc2565b83528451602086015161a630919061afd5565b810361a63f576000855261a671565b8351835161a64d919061afd5565b8551869061a65c90839061afc2565b905250835161a66b908261afd5565b60208601525b50909392505050565b6020811061a6b2578151835261a69160208461afd5565b925061a69e60208361afd5565b915061a6ab60208261afc2565b905061a67a565b600019811561a6e157600161a6c883602061afc2565b61a6d49061010061c0b1565b61a6de919061afc2565b90505b9151835183169219169190911790915250565b6060600061a7028484616be0565b805160208083015160405193945061a71c9390910161c0d4565b60405160208183030381529060405291505092915050565b815181516000919081111561a747575081515b6020808501519084015160005b8381101561a800578251825180821461a7d057600019602087101561a7af5760018461a78189602061afc2565b61a78b919061afd5565b61a79690600861bfb3565b61a7a190600261c0b1565b61a7ab919061afc2565b1990505b818116838216818103911461a7cd5797506167179650505050505050565b50505b61a7db60208661afd5565b945061a7e860208561afd5565b9350505060208161a7f9919061afd5565b905061a754565b508451865161728e919061c12c565b610b678061c14d83390190565b61053f8061ccb483390190565b61106f8061d1f383390190565b611bb98061e26283390190565b6040518060e0016040528060608152602001606081526020016060815260200160001515815260200160001515815260200160001515815260200161a88661a88b565b905290565b6040518061010001604052806000151581526020016000151581526020016060815260200160008019168152602001606081526020016060815260200160001515815260200161a8866040518060800160405280600081526020016000815260200160008152602001600081525090565b602080825282518282018190526000918401906040840190835b8181101561a93d5783516001600160a01b031683526020938401939092019160010161a916565b509095945050505050565b60005b8381101561a96357818101518382015260200161a94b565b50506000910152565b6000815180845261a98481602086016020860161a948565b601f01601f19169290920160200192915050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b8281101561aa94577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452815180516001600160a01b03168652602090810151604082880181905281519088018190529101906060600582901b88018101919088019060005b8181101561aa7a577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa08a850301835261aa6484865161a96c565b602095860195909450929092019160010161aa2a565b50919750505060209485019492909201915060010161a9c0565b50929695505050505050565b600081518084526020840193506020830160005b8281101561aaf45781517fffffffff000000000000000000000000000000000000000000000000000000001686526020958601959091019060010161aab4565b5093949350505050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b8281101561aa94577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452815180516040875261ab6a604088018261a96c565b905060208201519150868103602088015261ab85818361aaa0565b96505050602093840193919091019060010161ab26565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b8281101561aa94577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc087860301845261abfe85835161a96c565b9450602093840193919091019060010161abc4565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b8281101561aa94577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc087860301845281516001600160a01b038151168652602081015190506040602087015261ac94604087018261aaa0565b955050602093840193919091019060010161ac3b565b60208152600061671760208301600581527f68656c6c6f000000000000000000000000000000000000000000000000000000602082015260400190565b600081516060845261acfc606085018261a96c565b90506001600160a01b036020840151166020850152604083015160408501528091505092915050565b60a08152600061ad3860a083018861ace7565b6001600160a01b03871660208401528560408401526001600160a01b0385166060840152828103608084015261ad6e818561a96c565b98975050505050505050565b60006020828403121561ad8c57600080fd5b81516001600160a01b038116811461681057600080fd5b610100815260056101008201527f544f4b454e000000000000000000000000000000000000000000000000000000610120820152610140602082015260036101408201527f544b4e000000000000000000000000000000000000000000000000000000000061016082015260006101808201905060ff881660408301528660608301526003861061ae5d577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b8560808301528460a083015261ae7e60c08301856001600160a01b03169052565b6001600160a01b03831660e0830152979650505050505050565b60006020828403121561aeaa57600080fd5b8151801515811461681057600080fd5b60808152600061aecd608083018761ace7565b8560208401526001600160a01b0385166040840152828103606084015261a5c4818561a96c565b60006020828403121561af0657600080fd5b5051919050565b602081526000616810602083018461a96c565b60a08152600061af3360a083018761a96c565b6001600160a01b03861660208401528460408401526001600160a01b0384166060840152828103608084015261a5c481600581527f68656c6c6f000000000000000000000000000000000000000000000000000000602082015260400190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b818103818111156167175761671761af93565b808201808211156167175761671761af93565b600181811c9082168061affc57607f821691505b6020821081036189d9577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6001600160a01b038316815260406020820152600061810d604083018461a96c565b7f4661696c656420746f206465706c6f7920636f6e74726163742000000000000081526000835161b08f81601a85016020880161a948565b7f3a20000000000000000000000000000000000000000000000000000000000000601a91840191820152835161b0cc81601c84016020880161a948565b01601c01949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040516060810167ffffffffffffffff8111828210171561b12a5761b12a61b0d8565b60405290565b60008067ffffffffffffffff84111561b14b5761b14b61b0d8565b50604051601f19601f85018116603f0116810181811067ffffffffffffffff8211171561b17a5761b17a61b0d8565b60405283815290508082840185101561b19257600080fd5b6184dc84602083018561a948565b600082601f83011261b1b157600080fd5b6168108383516020850161b130565b60006020828403121561b1d257600080fd5b815167ffffffffffffffff81111561b1e957600080fd5b6167138482850161b1a0565b6000835161b20781846020880161a948565b83519083019061b21b81836020880161a948565b01949350505050565b7f4661696c656420746f206465706c6f7920636f6e74726163742000000000000081526000835161b25c81601a85016020880161a948565b7f207573696e6720636f6e7374727563746f722064617461202200000000000000601a91840191820152835161b29981603384016020880161a948565b7f220000000000000000000000000000000000000000000000000000000000000060339290910191820152603401949350505050565b60408152600b60408201527f464f554e4452595f4f55540000000000000000000000000000000000000000006060820152608060208201526000616810608083018461a96c565b60006020828403121561b32857600080fd5b815167ffffffffffffffff81111561b33f57600080fd5b8201601f8101841361b35057600080fd5b6167138482516020840161b130565b6000855161b371818460208a0161a948565b7f2f00000000000000000000000000000000000000000000000000000000000000908301908152855161b3ab816001840160208a0161a948565b7f2f0000000000000000000000000000000000000000000000000000000000000060019290910191820152845161b3e981600284016020890161a948565b6001818301019150507f2f000000000000000000000000000000000000000000000000000000000000006001820152835161b42b81600284016020880161a948565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600292909101918201526007019695505050505050565b60408152600061b476604083018461a96c565b8281036020840152600481527f2e6173740000000000000000000000000000000000000000000000000000000060208201526040810191505092915050565b7f436f756c64206e6f742066696e642041535420696e206172746966616374200081526000825161b4ed81601f85016020870161a948565b7f2e205365742060617374203d20747275656020696e20666f756e6472792e746f601f9390910192830152507f6d6c000000000000000000000000000000000000000000000000000000000000603f820152604101919050565b60408152600061b55a604083018461a96c565b8281036020840152601181527f2e6173742e6162736f6c7574655061746800000000000000000000000000000060208201526040810191505092915050565b60408152600061b5ac604083018461a96c565b8281036020840152600c81527f2e6173742e6c6963656e7365000000000000000000000000000000000000000060208201526040810191505092915050565b7f2e6d657461646174612e736f75726365732e5b2700000000000000000000000081526000825161b62381601485016020870161a948565b7f275d2e6b656363616b32353600000000000000000000000000000000000000006014939091019283015250602001919050565b60408152600061b66a604083018561a96c565b828103602084015261680c818561a96c565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f220000000000000000000000000000000000000000000000000000000000000081526000825161b6e381600185016020870161a948565b7f22000000000000000000000000000000000000000000000000000000000000006001939091019283015250600201919050565b6000825161b72981846020870161a948565b7f2f6275696c642d696e666f000000000000000000000000000000000000000000920191825250600b01919050565b7f436f756c64206e6f742066696e64206275696c642d696e666f2066696c65207781527f697468206d61746368696e6720736f7572636520636f6465206861736820666f60208201527f7220636f6e74726163742000000000000000000000000000000000000000000060408201526000825161b7dc81604b85016020870161a948565b91909101604b0192915050565b600060ff821660ff810361b7ff5761b7ff61af93565b60010192915050565b7f406f70656e7a657070656c696e2f646566656e6465722d6465706c6f792d636c81527f69656e742d636c6940000000000000000000000000000000000000000000000060208201526000825161b86681602985016020870161a948565b9190910160290192915050565b60408152601660408201527f4f50454e5a455050454c494e5f424153485f50415448000000000000000000006060820152608060208201526000616810608083018461a96c565b60006020828403121561b8cc57600080fd5b815167ffffffffffffffff81111561b8e357600080fd5b82016060818503121561b8f557600080fd5b61b8fd61b107565b81518060030b811461b90e57600080fd5b8152602082015167ffffffffffffffff81111561b92a57600080fd5b61b9368682850161b1a0565b602083015250604082015167ffffffffffffffff81111561b95657600080fd5b61b9628682850161b1a0565b604083015250949350505050565b7f4661696c656420746f2072756e206261736820636f6d6d616e6420776974682081527f220000000000000000000000000000000000000000000000000000000000000060208201526000825161b9ce81602185016020870161a948565b7f222e20496620796f7520617265207573696e672057696e646f77732c2073657460219390910192830152507f20746865204f50454e5a455050454c494e5f424153485f5041544820656e766960418201527f726f6e6d656e74207661726961626c6520746f207468652066756c6c7920717560618201527f616c69666965642070617468206f66207468652062617368206578656375746160818201527f626c652e20466f72206578616d706c652c20696620796f75206172652075736960a18201527f6e672047697420666f722057696e646f77732c206164642074686520666f6c6c60c18201527f6f77696e67206c696e6520696e20746865202e656e762066696c65206f66207960e18201527f6f75722070726f6a65637420287573696e6720666f727761726420736c6173686101018201527f6573293a0a4f50454e5a455050454c494e5f424153485f504154483d22433a2f6101218201527f50726f6772616d2046696c65732f4769742f62696e2f6261736822000000000061014182015261015c01919050565b7f4661696c656420746f2066696e64206c696e652077697468207072656669782081527f270000000000000000000000000000000000000000000000000000000000000060208201526000835161bbba81602185016020880161a948565b7f2720696e206f75747075743a2000000000000000000000000000000000000000602191840191820152835161bbf781602e84016020880161a948565b01602e01949350505050565b7f4661696c656420746f2072756e2075706772616465207361666574792076616c81527f69646174696f6e3a20000000000000000000000000000000000000000000000060208201526000825161b86681602985016020870161a948565b7f55706772616465207361666574792076616c69646174696f6e206661696c656481527f3a0a00000000000000000000000000000000000000000000000000000000000060208201526000825161bcbf81602285016020870161a948565b9190910160220192915050565b7f436f6e7472616374206e616d652000000000000000000000000000000000000081526000825161bd0481600e85016020870161a948565b7f206d75737420626520696e2074686520666f726d6174204d79436f6e74726163600e9390910192830152507f742e736f6c3a4d79436f6e7472616374206f72204d79436f6e74726163742e73602e8201527f6f6c206f72206f75742f4d79436f6e74726163742e736f6c2f4d79436f6e7472604e8201527f6163742e6a736f6e000000000000000000000000000000000000000000000000606e820152607601919050565b7f53504458206c6963656e7365206964656e74696669657220000000000000000081526000835161bde281601885016020880161a948565b7f20696e2000000000000000000000000000000000000000000000000000000000601891840191820152835161be1f81601c84016020880161a948565b7f20646f6573206e6f74206c6f6f6b206c696b65206120737570706f7274656420601c92909101918201527f6c6963656e736520666f7220626c6f636b206578706c6f726572207665726966603c8201527f69636174696f6e2e205573652074686520606c6963656e73655479706560206f605c8201527f7074696f6e20746f20737065636966792061206c6963656e736520747970652c607c8201527f206f7220736574207468652060736b69704c6963656e73655479706560206f70609c8201527f74696f6e20746f2060747275656020746f20736b69702e00000000000000000060bc82015260d301949350505050565b6000825161bf2581846020870161a948565b7f2000000000000000000000000000000000000000000000000000000000000000920191825250600101919050565b7f406f70656e7a657070656c696e2f75706772616465732d636f7265400000000081526000825161bf8c81601c85016020870161a948565b91909101601c0192915050565b6000600019820361bfac5761bfac61af93565b5060010190565b80820281158282048414176167175761671761af93565b6001815b600184111561c0055780850481111561bfe95761bfe961af93565b600184161561bff757908102905b60019390931c92800261bfce565b935093915050565b60008261c01c57506001616717565b8161c02957506000616717565b816001811461c03f576002811461c0495761c065565b6001915050616717565b60ff84111561c05a5761c05a61af93565b50506001821b616717565b5060208310610133831016604e8410600b841016171561c088575081810a616717565b61c095600019848461bfca565b806000190482111561c0a95761c0a961af93565b029392505050565b6000616810838361c00d565b60008161c0cc5761c0cc61af93565b506000190190565b6000835161c0e681846020880161a948565b7f3a00000000000000000000000000000000000000000000000000000000000000908301908152835161c12081600184016020880161a948565b01600101949350505050565b8181036000831280158383131683831282161715619ad457619ad461af9356fe60c0604052600d60809081526c2bb930b83832b21022ba3432b960991b60a05260009061002c9082610114565b506040805180820190915260048152630ae8aa8960e31b60208201526001906100559082610114565b506002805460ff1916601217905534801561006f57600080fd5b506101d2565b634e487b7160e01b600052604160045260246000fd5b600181811c9082168061009f57607f821691505b6020821081036100bf57634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111561010f57806000526020600020601f840160051c810160208510156100ec5750805b601f840160051c820191505b8181101561010c57600081556001016100f8565b50505b505050565b81516001600160401b0381111561012d5761012d610075565b6101418161013b845461008b565b846100c5565b6020601f821160018114610175576000831561015d5750848201515b600019600385901b1c1916600184901b17845561010c565b600084815260208120601f198516915b828110156101a55787850151825560209485019460019092019101610185565b50848210156101c35786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b610986806101e16000396000f3fe6080604052600436106100c05760003560e01c8063313ce56711610074578063a9059cbb1161004e578063a9059cbb146101fa578063d0e30db01461021a578063dd62ed3e1461022257600080fd5b8063313ce5671461018c57806370a08231146101b857806395d89b41146101e557600080fd5b806318160ddd116100a557806318160ddd1461012f57806323b872dd1461014c5780632e1a7d4d1461016c57600080fd5b806306fdde03146100d4578063095ea7b3146100ff57600080fd5b366100cf576100cd61025a565b005b600080fd5b3480156100e057600080fd5b506100e96102b5565b6040516100f69190610745565b60405180910390f35b34801561010b57600080fd5b5061011f61011a3660046107da565b610343565b60405190151581526020016100f6565b34801561013b57600080fd5b50475b6040519081526020016100f6565b34801561015857600080fd5b5061011f610167366004610804565b6103bd565b34801561017857600080fd5b506100cd610187366004610841565b610647565b34801561019857600080fd5b506002546101a69060ff1681565b60405160ff90911681526020016100f6565b3480156101c457600080fd5b5061013e6101d336600461085a565b60036020526000908152604090205481565b3480156101f157600080fd5b506100e9610724565b34801561020657600080fd5b5061011f6102153660046107da565b610731565b6100cd61025a565b34801561022e57600080fd5b5061013e61023d366004610875565b600460209081526000928352604080842090915290825290205481565b33600090815260036020526040812080543492906102799084906108d7565b909155505060405134815233907fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c9060200160405180910390a2565b600080546102c2906108ea565b80601f01602080910402602001604051908101604052809291908181526020018280546102ee906108ea565b801561033b5780601f106103105761010080835404028352916020019161033b565b820191906000526020600020905b81548152906001019060200180831161031e57829003601f168201915b505050505081565b33600081815260046020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925906103ab9086815260200190565b60405180910390a35060015b92915050565b73ffffffffffffffffffffffffffffffffffffffff831660009081526003602052604081205482111561042b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600060248201526044015b60405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff841633148015906104a1575073ffffffffffffffffffffffffffffffffffffffff841660009081526004602090815260408083203384529091529020547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff14155b156105605773ffffffffffffffffffffffffffffffffffffffff8416600090815260046020908152604080832033845290915290205482111561051a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526020600482015260006024820152604401610422565b73ffffffffffffffffffffffffffffffffffffffff841660009081526004602090815260408083203384529091528120805484929061055a90849061093d565b90915550505b73ffffffffffffffffffffffffffffffffffffffff84166000908152600360205260408120805484929061059590849061093d565b909155505073ffffffffffffffffffffffffffffffffffffffff8316600090815260036020526040812080548492906105cf9084906108d7565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161063591815260200190565b60405180910390a35060019392505050565b3360009081526003602052604090205481111561069a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526020600482015260006024820152604401610422565b33600090815260036020526040812080548392906106b990849061093d565b9091555050604051339082156108fc029083906000818181858888f193505050501580156106eb573d6000803e3d6000fd5b5060405181815233907f7fcf532c15f0a6db0bd6d0e038bea71d30d808c7d98cb3bf7268a95bf5081b659060200160405180910390a250565b600180546102c2906108ea565b600061073e3384846103bd565b9392505050565b602081526000825180602084015260005b818110156107735760208186018101516040868401015201610756565b5060006040828501015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011684010191505092915050565b803573ffffffffffffffffffffffffffffffffffffffff811681146107d557600080fd5b919050565b600080604083850312156107ed57600080fd5b6107f6836107b1565b946020939093013593505050565b60008060006060848603121561081957600080fd5b610822846107b1565b9250610830602085016107b1565b929592945050506040919091013590565b60006020828403121561085357600080fd5b5035919050565b60006020828403121561086c57600080fd5b61073e826107b1565b6000806040838503121561088857600080fd5b610891836107b1565b915061089f602084016107b1565b90509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b808201808211156103b7576103b76108a8565b600181811c908216806108fe57607f821691505b602082108103610937577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b818103818111156103b7576103b76108a856fea264697066735822122008d7fc4e09519c5dd9f356b03596f6829a151d0bc7682533f9ceab4e459f5ee264736f6c634300081a00336080604052348015600f57600080fd5b506105208061001f6000396000f3fe60806040526004361061002a5760003560e01c806369582bee14610033578063de43156e1461005357005b3661003157005b005b34801561003f57600080fd5b5061003161004e3660046101ba565b610073565b34801561005f57600080fd5b5061003161006e3660046101ba565b6100ee565b6060811561008a5761008782840184610273565b90505b7ffdc887992b033668833927e252058e468fac0b6bd196d520f09c61b740e999486100b58780610369565b6100c560408a0160208b016103ce565b896040013533866040516100de969594939291906103f0565b60405180910390a1505050505050565b606081156101055761010282840184610273565b90505b7fcdc8ee677dc5ebe680fb18cebda5e26ba5ea1f0ba504a47e2a9a2ecb476dc98e6100b58780610369565b60006060828403121561014257600080fd5b50919050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461016c57600080fd5b919050565b60008083601f84011261018357600080fd5b50813567ffffffffffffffff81111561019b57600080fd5b6020830191508360208285010111156101b357600080fd5b9250929050565b6000806000806000608086880312156101d257600080fd5b853567ffffffffffffffff8111156101e957600080fd5b6101f588828901610130565b95505061020460208701610148565b935060408601359250606086013567ffffffffffffffff81111561022757600080fd5b61023388828901610171565b969995985093965092949392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60006020828403121561028557600080fd5b813567ffffffffffffffff81111561029c57600080fd5b8201601f810184136102ad57600080fd5b803567ffffffffffffffff8111156102c7576102c7610244565b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8501160116810181811067ffffffffffffffff8211171561033357610333610244565b60405281815282820160200186101561034b57600080fd5b81602084016020830137600091810160200191909152949350505050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261039e57600080fd5b83018035915067ffffffffffffffff8211156103b957600080fd5b6020019150368190038213156101b357600080fd5b6000602082840312156103e057600080fd5b6103e982610148565b9392505050565b60a081528560a0820152858760c0830137600060c0878301015260007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f880116820173ffffffffffffffffffffffffffffffffffffffff8716602084015285604084015273ffffffffffffffffffffffffffffffffffffffff8516606084015260c083820301608084015283518060c083015260005b818110156104a557602081870181015184830160e0015201610488565b50600060e0838301810191909152601f9091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016909101019897505050505050505056fea2646970667358221220f4d1ccb9c8450e782e1c77412473fd37637a5c83a2a3272307d8c8bc8e8c7a3364736f6c634300081a003360c060405234801561001057600080fd5b5060405161106f38038061106f83398101604081905261002f916100db565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461006357604051632b2add3d60e01b815260040160405180910390fd5b600380546001600160a01b0319166001600160a01b0385811691909117909155828116608052811660a0526040517f80699e81136d69cb8367ad52a994e25c722a86da654b561d0c14b61a777e7ac590600090a150505061011e565b80516001600160a01b03811681146100d657600080fd5b919050565b6000806000606084860312156100f057600080fd5b6100f9846100bf565b9250610107602085016100bf565b9150610115604085016100bf565b90509250925092565b60805160a051610f2561014a60003960006101e50152600081816102b9015261045b0152610f256000f3fe608060405234801561001057600080fd5b50600436106100f55760003560e01c806397770dff11610097578063c63585cc11610066578063c63585cc14610273578063d7fd7afb14610286578063d936a012146102b4578063ee2815ba146102db57600080fd5b806397770dff1461021a578063a7cb05071461022d578063c39aca3714610240578063c62178ac1461025357600080fd5b8063513a9c05116100d3578063513a9c051461018a578063569541b9146101c0578063842da36d146101e057806391dd645f1461020757600080fd5b80630be15547146100fa5780631f0e251b1461015a5780633ce4a5bc1461016f575b600080fd5b610130610108366004610bd1565b60016020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b61016d610168366004610c13565b6102ee565b005b61013073735b14bb79463307aacbed86daf3322b1e6226ab81565b610130610198366004610bd1565b60026020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b6003546101309073ffffffffffffffffffffffffffffffffffffffff1681565b6101307f000000000000000000000000000000000000000000000000000000000000000081565b61016d610215366004610c35565b610402565b61016d610228366004610c13565b610526565b61016d61023b366004610c61565b610633565b61016d61024e366004610c83565b6106ce565b6004546101309073ffffffffffffffffffffffffffffffffffffffff1681565b610130610281366004610d53565b6108cd565b6102a6610294366004610bd1565b60006020819052908152604090205481565b604051908152602001610151565b6101307f000000000000000000000000000000000000000000000000000000000000000081565b61016d6102e9366004610c35565b610a02565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461033b576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116610388576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600480547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527f3ade88e3922d64780e1bf4460d364c2970b69da813f9c0c07a1c187b5647636c906020015b60405180910390a150565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461044f576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600354600090610497907f00000000000000000000000000000000000000000000000000000000000000009073ffffffffffffffffffffffffffffffffffffffff16846108cd565b60008481526002602090815260409182902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff85169081179091558251878152918201529192507f0ecec485166da6139b13bb7e033e9446e2d35348e80ebf1180d4afe2dba1704e910160405180910390a1505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610573576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff81166105c0576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527fdba79d534382d1a8ae108e4c8ecb27c6ae42ab8b91d44eedf88bd329f3868d5e906020016103f7565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610680576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000828152602081815260409182902083905581518481529081018390527f49f492222906ac486c3c1401fa545626df1f0c0e5a77a05597ea2ed66af9850d91015b60405180910390a15050565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461071b576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff831673735b14bb79463307aacbed86daf3322b1e6226ab1480610768575073ffffffffffffffffffffffffffffffffffffffff831630145b1561079f576040517f82d5d76a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f47e7ef2400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152602482018690528616906347e7ef24906044016020604051808303816000875af1158015610814573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108389190610d96565b506040517fde43156e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84169063de43156e906108939089908990899088908890600401610e01565b600060405180830381600087803b1580156108ad57600080fd5b505af11580156108c1573d6000803e3d6000fd5b50505050505050505050565b60008060006108dc8585610ad3565b6040517fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606084811b8216602084015283901b16603482015291935091508690604801604051602081830303815290604052805190602001206040516020016109c29291907fff00000000000000000000000000000000000000000000000000000000000000815260609290921b7fffffffffffffffffffffffffffffffffffffffff00000000000000000000000016600183015260158201527f96e8ac4277198ff8b6f785478aa9a39f403cb768dd02cbee326c3e7da348845f603582015260550190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291905280516020909101209695505050505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610a4f576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008281526001602090815260409182902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff85169081179091558251858152918201527fd1b36d30f6248e97c473b4d1348ca164a4ef6759022f54a58ec200326c39c45d91016106c2565b6000808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603610b3b576040517fcb1e7cfe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1610610b75578284610b78565b83835b909250905073ffffffffffffffffffffffffffffffffffffffff8216610bca576040517f78b507da00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b9250929050565b600060208284031215610be357600080fd5b5035919050565b803573ffffffffffffffffffffffffffffffffffffffff81168114610c0e57600080fd5b919050565b600060208284031215610c2557600080fd5b610c2e82610bea565b9392505050565b60008060408385031215610c4857600080fd5b82359150610c5860208401610bea565b90509250929050565b60008060408385031215610c7457600080fd5b50508035926020909101359150565b60008060008060008060a08789031215610c9c57600080fd5b863567ffffffffffffffff811115610cb357600080fd5b87016060818a031215610cc557600080fd5b9550610cd360208801610bea565b945060408701359350610ce860608801610bea565b9250608087013567ffffffffffffffff811115610d0457600080fd5b8701601f81018913610d1557600080fd5b803567ffffffffffffffff811115610d2c57600080fd5b896020828401011115610d3e57600080fd5b60208201935080925050509295509295509295565b600080600060608486031215610d6857600080fd5b610d7184610bea565b9250610d7f60208501610bea565b9150610d8d60408501610bea565b90509250925092565b600060208284031215610da857600080fd5b81518015158114610c2e57600080fd5b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b60808152600086357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1883603018112610e3957600080fd5b870160208101903567ffffffffffffffff811115610e5657600080fd5b803603821315610e6557600080fd5b60606080850152610e7a60e085018284610db8565b91505073ffffffffffffffffffffffffffffffffffffffff610e9e60208a01610bea565b1660a0840152604088013560c084015273ffffffffffffffffffffffffffffffffffffffff871660208401528560408401528281036060840152610ee3818587610db8565b9897505050505050505056fea2646970667358221220431a07541a491b54259bdf8fcd05ade6751bfbbf0e72e605f27325b56d7d464f64736f6c634300081a003360e060405234801561001057600080fd5b50604051611bb9380380611bb983398101604081905261002f9161020e565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461006357604051632b2add3d60e01b815260040160405180910390fd5b6001600160a01b038216158061008057506001600160a01b038116155b1561009e5760405163d92e233d60e01b815260040160405180910390fd5b60066100aa8982610360565b5060076100b78882610360565b5060ff861660c05260808590528360028111156100d6576100d661041e565b60a08160028111156100ea576100ea61041e565b905250600192909255600080546001600160a01b039283166001600160a01b03199182161790915560088054929093169116179055506104349350505050565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261015157600080fd5b81516001600160401b0381111561016a5761016a61012a565b604051601f8201601f19908116603f011681016001600160401b03811182821017156101985761019861012a565b6040528181528382016020018510156101b057600080fd5b60005b828110156101cf576020818601810151838301820152016101b3565b506000918101602001919091529392505050565b8051600381106101f257600080fd5b919050565b80516001600160a01b03811681146101f257600080fd5b600080600080600080600080610100898b03121561022b57600080fd5b88516001600160401b0381111561024157600080fd5b61024d8b828c01610140565b60208b015190995090506001600160401b0381111561026b57600080fd5b6102778b828c01610140565b975050604089015160ff8116811461028e57600080fd5b60608a015190965094506102a460808a016101e3565b60a08a015190945092506102ba60c08a016101f7565b91506102c860e08a016101f7565b90509295985092959890939650565b600181811c908216806102eb57607f821691505b60208210810361030b57634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111561035b57806000526020600020601f840160051c810160208510156103385750805b601f840160051c820191505b818110156103585760008155600101610344565b50505b505050565b81516001600160401b038111156103795761037961012a565b61038d8161038784546102d7565b84610311565b6020601f8211600181146103c157600083156103a95750848201515b600019600385901b1c1916600184901b178455610358565b600084815260208120601f198516915b828110156103f157878501518255602094850194600190920191016103d1565b508482101561040f5786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b634e487b7160e01b600052602160045260246000fd5b60805160a05160c05161174861047160003960006102170152600061033a0152600081816102eb01528181610ad70152610bdd01526117486000f3fe608060405234801561001057600080fd5b50600436106101985760003560e01c80638b851b95116100e3578063ccc775991161008c578063eddeb12311610066578063eddeb12314610431578063f2441b3214610444578063f687d12a1461046457600080fd5b8063ccc77599146103a4578063d9eeebed146103b7578063dd62ed3e146103eb57600080fd5b8063a9059cbb116100bd578063a9059cbb14610369578063c70126261461037c578063c835d7cc1461038f57600080fd5b80638b851b951461030d57806395d89b411461032d578063a3413d031461033557600080fd5b80633ce4a5bc116101455780634d8943bb1161011f5780634d8943bb146102a757806370a08231146102b057806385e1f4d0146102e657600080fd5b80633ce4a5bc1461024157806342966c681461028157806347e7ef241461029457600080fd5b806318160ddd1161017657806318160ddd146101f557806323b872dd146101fd578063313ce5671461021057600080fd5b806306fdde031461019d578063091d2788146101bb578063095ea7b3146101d2575b600080fd5b6101a5610477565b6040516101b29190611327565b60405180910390f35b6101c460015481565b6040519081526020016101b2565b6101e56101e0366004611366565b610509565b60405190151581526020016101b2565b6005546101c4565b6101e561020b366004611392565b610520565b60405160ff7f00000000000000000000000000000000000000000000000000000000000000001681526020016101b2565b61025c73735b14bb79463307aacbed86daf3322b1e6226ab81565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101b2565b6101e561028f3660046113d3565b6105b7565b6101e56102a2366004611366565b6105cb565b6101c460025481565b6101c46102be3660046113ec565b73ffffffffffffffffffffffffffffffffffffffff1660009081526003602052604090205490565b6101c47f000000000000000000000000000000000000000000000000000000000000000081565b60085461025c9073ffffffffffffffffffffffffffffffffffffffff1681565b6101a561071f565b61035c7f000000000000000000000000000000000000000000000000000000000000000081565b6040516101b29190611409565b6101e5610377366004611366565b61072e565b6101e561038a366004611479565b61073b565b6103a261039d3660046113ec565b61088a565b005b6103a26103b23660046113ec565b61099e565b6103bf610aab565b6040805173ffffffffffffffffffffffffffffffffffffffff90931683526020830191909152016101b2565b6101c46103f9366004611571565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260046020908152604080832093909416825291909152205490565b6103a261043f3660046113d3565b610cc9565b60005461025c9073ffffffffffffffffffffffffffffffffffffffff1681565b6103a26104723660046113d3565b610d4b565b606060068054610486906115aa565b80601f01602080910402602001604051908101604052809291908181526020018280546104b2906115aa565b80156104ff5780601f106104d4576101008083540402835291602001916104ff565b820191906000526020600020905b8154815290600101906020018083116104e257829003601f168201915b5050505050905090565b6000610516338484610dcd565b5060015b92915050565b600061052d848484610ed6565b73ffffffffffffffffffffffffffffffffffffffff8416600090815260046020908152604080832033845290915290205482811015610598576040517f10bad14700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6105ac85336105a7868561162c565b610dcd565b506001949350505050565b60006105c33383611091565b506001919050565b60003373735b14bb79463307aacbed86daf3322b1e6226ab14801590610609575060005473ffffffffffffffffffffffffffffffffffffffff163314155b801561062d575060085473ffffffffffffffffffffffffffffffffffffffff163314155b15610664576040517fddb5de5e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61066e83836111d3565b6040517f735b14bb79463307aacbed86daf3322b1e6226ab000000000000000000000000602082015273ffffffffffffffffffffffffffffffffffffffff8416907f67fc7bdaed5b0ec550d8706b87d60568ab70c6b781263c70101d54cd1564aab390603401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529082905261070e91869061163f565b60405180910390a250600192915050565b606060078054610486906115aa565b6000610516338484610ed6565b6000806000610748610aab565b6040517f23b872dd00000000000000000000000000000000000000000000000000000000815233600482015273735b14bb79463307aacbed86daf3322b1e6226ab602482015260448101829052919350915073ffffffffffffffffffffffffffffffffffffffff8316906323b872dd906064016020604051808303816000875af11580156107da573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107fe9190611661565b610834576040517f0a7cd6d600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61083e3385611091565b60025460405133917f9ffbffc04a397460ee1dbe8c9503e098090567d6b7f4b3c02a8617d800b6d9559161087791899189918791611683565b60405180910390a2506001949350505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab146108d7576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116610924576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527fd55614e962c5fd6ece71614f6348d702468a997a394dd5e5c1677950226d97ae906020015b60405180910390a150565b3373735b14bb79463307aacbed86daf3322b1e6226ab146109eb576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116610a38576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600880547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527f88815d964e380677e86d817e7d65dea59cb7b4c3b5b7a0c8ec7ea4a74f90a38790602001610993565b600080546040517f0be155470000000000000000000000000000000000000000000000000000000081527f000000000000000000000000000000000000000000000000000000000000000060048201528291829173ffffffffffffffffffffffffffffffffffffffff90911690630be1554790602401602060405180830381865afa158015610b3e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b6291906116b2565b905073ffffffffffffffffffffffffffffffffffffffff8116610bb1576040517f78fff39600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080546040517fd7fd7afb0000000000000000000000000000000000000000000000000000000081527f0000000000000000000000000000000000000000000000000000000000000000600482015273ffffffffffffffffffffffffffffffffffffffff9091169063d7fd7afb90602401602060405180830381865afa158015610c40573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c6491906116cf565b905080600003610ca0576040517fe661aed000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060025460015483610cb391906116e8565b610cbd91906116ff565b92959294509192505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610d16576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60028190556040518181527fef13af88e424b5d15f49c77758542c1938b08b8b95b91ed0751f98ba99000d8f90602001610993565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610d98576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018190556040518181527fff5788270f43bfc1ca41c503606d2594aa3023a1a7547de403a3e2f146a4a80a90602001610993565b73ffffffffffffffffffffffffffffffffffffffff8316610e1a576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216610e67576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff83811660008181526004602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8316610f23576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216610f70576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff831660009081526003602052604090205481811015610fd0576040517ffe382aa700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610fda828261162c565b73ffffffffffffffffffffffffffffffffffffffff808616600090815260036020526040808220939093559085168152908120805484929061101d9084906116ff565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161108391815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff82166110de576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff82166000908152600360205260409020548181101561113e576040517ffe382aa700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611148828261162c565b73ffffffffffffffffffffffffffffffffffffffff84166000908152600360205260408120919091556005805484929061118390849061162c565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90602001610ec9565b73ffffffffffffffffffffffffffffffffffffffff8216611220576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b806005600082825461123291906116ff565b909155505073ffffffffffffffffffffffffffffffffffffffff82166000908152600360205260408120805483929061126c9084906116ff565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6000815180845260005b818110156112e9576020818501810151868301820152016112cd565b5060006020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b60208152600061133a60208301846112c3565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff8116811461136357600080fd5b50565b6000806040838503121561137957600080fd5b823561138481611341565b946020939093013593505050565b6000806000606084860312156113a757600080fd5b83356113b281611341565b925060208401356113c281611341565b929592945050506040919091013590565b6000602082840312156113e557600080fd5b5035919050565b6000602082840312156113fe57600080fd5b813561133a81611341565b6020810160038310611444577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000806040838503121561148c57600080fd5b823567ffffffffffffffff8111156114a357600080fd5b8301601f810185136114b457600080fd5b803567ffffffffffffffff8111156114ce576114ce61144a565b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8501160116810181811067ffffffffffffffff8211171561153a5761153a61144a565b60405281815282820160200187101561155257600080fd5b8160208401602083013760006020928201830152969401359450505050565b6000806040838503121561158457600080fd5b823561158f81611341565b9150602083013561159f81611341565b809150509250929050565b600181811c908216806115be57607f821691505b6020821081036115f7577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8181038181111561051a5761051a6115fd565b60408152600061165260408301856112c3565b90508260208301529392505050565b60006020828403121561167357600080fd5b8151801515811461133a57600080fd5b60808152600061169660808301876112c3565b6020830195909552506040810192909252606090910152919050565b6000602082840312156116c457600080fd5b815161133a81611341565b6000602082840312156116e157600080fd5b5051919050565b808202811582820484141761051a5761051a6115fd565b8082018082111561051a5761051a6115fd56fea26469706673582212204013e39523742118b3f2227e145ee7e48176ba6aebead33c596dca2acb59a74c64736f6c634300081a0033a26469706673582212207465760759c1618d571ccbe09a72466b5d791124360fd095e2c90e31e51a331464736f6c634300081a0033", } // GatewayZEVMOutboundTestABI is the input ABI used to generate the binding from. @@ -728,6 +728,27 @@ func (_GatewayZEVMOutboundTest *GatewayZEVMOutboundTestTransactorSession) TestDe return _GatewayZEVMOutboundTest.Contract.TestDepositAndRevertZRC20AndCallZContractFailsITargetIsGateway(&_GatewayZEVMOutboundTest.TransactOpts) } +// TestDepositAndRevertZRC20AndCallZContractFailsIfAmountIsZero is a paid mutator transaction binding the contract method 0xf06c0894. +// +// Solidity: function testDepositAndRevertZRC20AndCallZContractFailsIfAmountIsZero() returns() +func (_GatewayZEVMOutboundTest *GatewayZEVMOutboundTestTransactor) TestDepositAndRevertZRC20AndCallZContractFailsIfAmountIsZero(opts *bind.TransactOpts) (*types.Transaction, error) { + return _GatewayZEVMOutboundTest.contract.Transact(opts, "testDepositAndRevertZRC20AndCallZContractFailsIfAmountIsZero") +} + +// TestDepositAndRevertZRC20AndCallZContractFailsIfAmountIsZero is a paid mutator transaction binding the contract method 0xf06c0894. +// +// Solidity: function testDepositAndRevertZRC20AndCallZContractFailsIfAmountIsZero() returns() +func (_GatewayZEVMOutboundTest *GatewayZEVMOutboundTestSession) TestDepositAndRevertZRC20AndCallZContractFailsIfAmountIsZero() (*types.Transaction, error) { + return _GatewayZEVMOutboundTest.Contract.TestDepositAndRevertZRC20AndCallZContractFailsIfAmountIsZero(&_GatewayZEVMOutboundTest.TransactOpts) +} + +// TestDepositAndRevertZRC20AndCallZContractFailsIfAmountIsZero is a paid mutator transaction binding the contract method 0xf06c0894. +// +// Solidity: function testDepositAndRevertZRC20AndCallZContractFailsIfAmountIsZero() returns() +func (_GatewayZEVMOutboundTest *GatewayZEVMOutboundTestTransactorSession) TestDepositAndRevertZRC20AndCallZContractFailsIfAmountIsZero() (*types.Transaction, error) { + return _GatewayZEVMOutboundTest.Contract.TestDepositAndRevertZRC20AndCallZContractFailsIfAmountIsZero(&_GatewayZEVMOutboundTest.TransactOpts) +} + // TestDepositAndRevertZRC20AndCallZContractFailsIfSenderIsNotFungibleModule is a paid mutator transaction binding the contract method 0x09f080da. // // Solidity: function testDepositAndRevertZRC20AndCallZContractFailsIfSenderIsNotFungibleModule() returns() @@ -749,6 +770,69 @@ func (_GatewayZEVMOutboundTest *GatewayZEVMOutboundTestTransactorSession) TestDe return _GatewayZEVMOutboundTest.Contract.TestDepositAndRevertZRC20AndCallZContractFailsIfSenderIsNotFungibleModule(&_GatewayZEVMOutboundTest.TransactOpts) } +// TestDepositAndRevertZRC20AndCallZContractFailsIfTargetIsZeroAddress is a paid mutator transaction binding the contract method 0xfc6734eb. +// +// Solidity: function testDepositAndRevertZRC20AndCallZContractFailsIfTargetIsZeroAddress() returns() +func (_GatewayZEVMOutboundTest *GatewayZEVMOutboundTestTransactor) TestDepositAndRevertZRC20AndCallZContractFailsIfTargetIsZeroAddress(opts *bind.TransactOpts) (*types.Transaction, error) { + return _GatewayZEVMOutboundTest.contract.Transact(opts, "testDepositAndRevertZRC20AndCallZContractFailsIfTargetIsZeroAddress") +} + +// TestDepositAndRevertZRC20AndCallZContractFailsIfTargetIsZeroAddress is a paid mutator transaction binding the contract method 0xfc6734eb. +// +// Solidity: function testDepositAndRevertZRC20AndCallZContractFailsIfTargetIsZeroAddress() returns() +func (_GatewayZEVMOutboundTest *GatewayZEVMOutboundTestSession) TestDepositAndRevertZRC20AndCallZContractFailsIfTargetIsZeroAddress() (*types.Transaction, error) { + return _GatewayZEVMOutboundTest.Contract.TestDepositAndRevertZRC20AndCallZContractFailsIfTargetIsZeroAddress(&_GatewayZEVMOutboundTest.TransactOpts) +} + +// TestDepositAndRevertZRC20AndCallZContractFailsIfTargetIsZeroAddress is a paid mutator transaction binding the contract method 0xfc6734eb. +// +// Solidity: function testDepositAndRevertZRC20AndCallZContractFailsIfTargetIsZeroAddress() returns() +func (_GatewayZEVMOutboundTest *GatewayZEVMOutboundTestTransactorSession) TestDepositAndRevertZRC20AndCallZContractFailsIfTargetIsZeroAddress() (*types.Transaction, error) { + return _GatewayZEVMOutboundTest.Contract.TestDepositAndRevertZRC20AndCallZContractFailsIfTargetIsZeroAddress(&_GatewayZEVMOutboundTest.TransactOpts) +} + +// TestDepositAndRevertZRC20AndCallZContractFailsIfZrc20IsZeroAddress is a paid mutator transaction binding the contract method 0x55ea9351. +// +// Solidity: function testDepositAndRevertZRC20AndCallZContractFailsIfZrc20IsZeroAddress() returns() +func (_GatewayZEVMOutboundTest *GatewayZEVMOutboundTestTransactor) TestDepositAndRevertZRC20AndCallZContractFailsIfZrc20IsZeroAddress(opts *bind.TransactOpts) (*types.Transaction, error) { + return _GatewayZEVMOutboundTest.contract.Transact(opts, "testDepositAndRevertZRC20AndCallZContractFailsIfZrc20IsZeroAddress") +} + +// TestDepositAndRevertZRC20AndCallZContractFailsIfZrc20IsZeroAddress is a paid mutator transaction binding the contract method 0x55ea9351. +// +// Solidity: function testDepositAndRevertZRC20AndCallZContractFailsIfZrc20IsZeroAddress() returns() +func (_GatewayZEVMOutboundTest *GatewayZEVMOutboundTestSession) TestDepositAndRevertZRC20AndCallZContractFailsIfZrc20IsZeroAddress() (*types.Transaction, error) { + return _GatewayZEVMOutboundTest.Contract.TestDepositAndRevertZRC20AndCallZContractFailsIfZrc20IsZeroAddress(&_GatewayZEVMOutboundTest.TransactOpts) +} + +// TestDepositAndRevertZRC20AndCallZContractFailsIfZrc20IsZeroAddress is a paid mutator transaction binding the contract method 0x55ea9351. +// +// Solidity: function testDepositAndRevertZRC20AndCallZContractFailsIfZrc20IsZeroAddress() returns() +func (_GatewayZEVMOutboundTest *GatewayZEVMOutboundTestTransactorSession) TestDepositAndRevertZRC20AndCallZContractFailsIfZrc20IsZeroAddress() (*types.Transaction, error) { + return _GatewayZEVMOutboundTest.Contract.TestDepositAndRevertZRC20AndCallZContractFailsIfZrc20IsZeroAddress(&_GatewayZEVMOutboundTest.TransactOpts) +} + +// TestDepositFailsIfAmountIs0 is a paid mutator transaction binding the contract method 0x996b7675. +// +// Solidity: function testDepositFailsIfAmountIs0() returns() +func (_GatewayZEVMOutboundTest *GatewayZEVMOutboundTestTransactor) TestDepositFailsIfAmountIs0(opts *bind.TransactOpts) (*types.Transaction, error) { + return _GatewayZEVMOutboundTest.contract.Transact(opts, "testDepositFailsIfAmountIs0") +} + +// TestDepositFailsIfAmountIs0 is a paid mutator transaction binding the contract method 0x996b7675. +// +// Solidity: function testDepositFailsIfAmountIs0() returns() +func (_GatewayZEVMOutboundTest *GatewayZEVMOutboundTestSession) TestDepositFailsIfAmountIs0() (*types.Transaction, error) { + return _GatewayZEVMOutboundTest.Contract.TestDepositFailsIfAmountIs0(&_GatewayZEVMOutboundTest.TransactOpts) +} + +// TestDepositFailsIfAmountIs0 is a paid mutator transaction binding the contract method 0x996b7675. +// +// Solidity: function testDepositFailsIfAmountIs0() returns() +func (_GatewayZEVMOutboundTest *GatewayZEVMOutboundTestTransactorSession) TestDepositFailsIfAmountIs0() (*types.Transaction, error) { + return _GatewayZEVMOutboundTest.Contract.TestDepositFailsIfAmountIs0(&_GatewayZEVMOutboundTest.TransactOpts) +} + // TestDepositFailsIfSenderNotFungibleModule is a paid mutator transaction binding the contract method 0x198d5ca4. // // Solidity: function testDepositFailsIfSenderNotFungibleModule() returns() @@ -812,6 +896,48 @@ func (_GatewayZEVMOutboundTest *GatewayZEVMOutboundTestTransactorSession) TestDe return _GatewayZEVMOutboundTest.Contract.TestDepositFailsIfTargetIsGateway(&_GatewayZEVMOutboundTest.TransactOpts) } +// TestDepositFailsIfTargetIsZeroAddress is a paid mutator transaction binding the contract method 0x14b7a6da. +// +// Solidity: function testDepositFailsIfTargetIsZeroAddress() returns() +func (_GatewayZEVMOutboundTest *GatewayZEVMOutboundTestTransactor) TestDepositFailsIfTargetIsZeroAddress(opts *bind.TransactOpts) (*types.Transaction, error) { + return _GatewayZEVMOutboundTest.contract.Transact(opts, "testDepositFailsIfTargetIsZeroAddress") +} + +// TestDepositFailsIfTargetIsZeroAddress is a paid mutator transaction binding the contract method 0x14b7a6da. +// +// Solidity: function testDepositFailsIfTargetIsZeroAddress() returns() +func (_GatewayZEVMOutboundTest *GatewayZEVMOutboundTestSession) TestDepositFailsIfTargetIsZeroAddress() (*types.Transaction, error) { + return _GatewayZEVMOutboundTest.Contract.TestDepositFailsIfTargetIsZeroAddress(&_GatewayZEVMOutboundTest.TransactOpts) +} + +// TestDepositFailsIfTargetIsZeroAddress is a paid mutator transaction binding the contract method 0x14b7a6da. +// +// Solidity: function testDepositFailsIfTargetIsZeroAddress() returns() +func (_GatewayZEVMOutboundTest *GatewayZEVMOutboundTestTransactorSession) TestDepositFailsIfTargetIsZeroAddress() (*types.Transaction, error) { + return _GatewayZEVMOutboundTest.Contract.TestDepositFailsIfTargetIsZeroAddress(&_GatewayZEVMOutboundTest.TransactOpts) +} + +// TestDepositFailsIfZrc20IsZeroAddress is a paid mutator transaction binding the contract method 0x82978ffc. +// +// Solidity: function testDepositFailsIfZrc20IsZeroAddress() returns() +func (_GatewayZEVMOutboundTest *GatewayZEVMOutboundTestTransactor) TestDepositFailsIfZrc20IsZeroAddress(opts *bind.TransactOpts) (*types.Transaction, error) { + return _GatewayZEVMOutboundTest.contract.Transact(opts, "testDepositFailsIfZrc20IsZeroAddress") +} + +// TestDepositFailsIfZrc20IsZeroAddress is a paid mutator transaction binding the contract method 0x82978ffc. +// +// Solidity: function testDepositFailsIfZrc20IsZeroAddress() returns() +func (_GatewayZEVMOutboundTest *GatewayZEVMOutboundTestSession) TestDepositFailsIfZrc20IsZeroAddress() (*types.Transaction, error) { + return _GatewayZEVMOutboundTest.Contract.TestDepositFailsIfZrc20IsZeroAddress(&_GatewayZEVMOutboundTest.TransactOpts) +} + +// TestDepositFailsIfZrc20IsZeroAddress is a paid mutator transaction binding the contract method 0x82978ffc. +// +// Solidity: function testDepositFailsIfZrc20IsZeroAddress() returns() +func (_GatewayZEVMOutboundTest *GatewayZEVMOutboundTestTransactorSession) TestDepositFailsIfZrc20IsZeroAddress() (*types.Transaction, error) { + return _GatewayZEVMOutboundTest.Contract.TestDepositFailsIfZrc20IsZeroAddress(&_GatewayZEVMOutboundTest.TransactOpts) +} + // TestDepositTogglePause is a paid mutator transaction binding the contract method 0x1c785a14. // // Solidity: function testDepositTogglePause() returns() @@ -875,6 +1001,27 @@ func (_GatewayZEVMOutboundTest *GatewayZEVMOutboundTestTransactorSession) TestDe return _GatewayZEVMOutboundTest.Contract.TestDepositZETAAndCallZContractFailsIfSenderIsNotFungibleModule(&_GatewayZEVMOutboundTest.TransactOpts) } +// TestDepositZETAAndCallZContractFailsIfTargetIsAmountIsZero is a paid mutator transaction binding the contract method 0x94d78f7b. +// +// Solidity: function testDepositZETAAndCallZContractFailsIfTargetIsAmountIsZero() returns() +func (_GatewayZEVMOutboundTest *GatewayZEVMOutboundTestTransactor) TestDepositZETAAndCallZContractFailsIfTargetIsAmountIsZero(opts *bind.TransactOpts) (*types.Transaction, error) { + return _GatewayZEVMOutboundTest.contract.Transact(opts, "testDepositZETAAndCallZContractFailsIfTargetIsAmountIsZero") +} + +// TestDepositZETAAndCallZContractFailsIfTargetIsAmountIsZero is a paid mutator transaction binding the contract method 0x94d78f7b. +// +// Solidity: function testDepositZETAAndCallZContractFailsIfTargetIsAmountIsZero() returns() +func (_GatewayZEVMOutboundTest *GatewayZEVMOutboundTestSession) TestDepositZETAAndCallZContractFailsIfTargetIsAmountIsZero() (*types.Transaction, error) { + return _GatewayZEVMOutboundTest.Contract.TestDepositZETAAndCallZContractFailsIfTargetIsAmountIsZero(&_GatewayZEVMOutboundTest.TransactOpts) +} + +// TestDepositZETAAndCallZContractFailsIfTargetIsAmountIsZero is a paid mutator transaction binding the contract method 0x94d78f7b. +// +// Solidity: function testDepositZETAAndCallZContractFailsIfTargetIsAmountIsZero() returns() +func (_GatewayZEVMOutboundTest *GatewayZEVMOutboundTestTransactorSession) TestDepositZETAAndCallZContractFailsIfTargetIsAmountIsZero() (*types.Transaction, error) { + return _GatewayZEVMOutboundTest.Contract.TestDepositZETAAndCallZContractFailsIfTargetIsAmountIsZero(&_GatewayZEVMOutboundTest.TransactOpts) +} + // TestDepositZETAAndCallZContractFailsIfTargetIsFungibleModule is a paid mutator transaction binding the contract method 0x104b3522. // // Solidity: function testDepositZETAAndCallZContractFailsIfTargetIsFungibleModule() returns() @@ -917,6 +1064,27 @@ func (_GatewayZEVMOutboundTest *GatewayZEVMOutboundTestTransactorSession) TestDe return _GatewayZEVMOutboundTest.Contract.TestDepositZETAAndCallZContractFailsIfTargetIsGateway(&_GatewayZEVMOutboundTest.TransactOpts) } +// TestDepositZETAAndCallZContractFailsIfTargetIsZeroAddress is a paid mutator transaction binding the contract method 0x9b86d40f. +// +// Solidity: function testDepositZETAAndCallZContractFailsIfTargetIsZeroAddress() returns() +func (_GatewayZEVMOutboundTest *GatewayZEVMOutboundTestTransactor) TestDepositZETAAndCallZContractFailsIfTargetIsZeroAddress(opts *bind.TransactOpts) (*types.Transaction, error) { + return _GatewayZEVMOutboundTest.contract.Transact(opts, "testDepositZETAAndCallZContractFailsIfTargetIsZeroAddress") +} + +// TestDepositZETAAndCallZContractFailsIfTargetIsZeroAddress is a paid mutator transaction binding the contract method 0x9b86d40f. +// +// Solidity: function testDepositZETAAndCallZContractFailsIfTargetIsZeroAddress() returns() +func (_GatewayZEVMOutboundTest *GatewayZEVMOutboundTestSession) TestDepositZETAAndCallZContractFailsIfTargetIsZeroAddress() (*types.Transaction, error) { + return _GatewayZEVMOutboundTest.Contract.TestDepositZETAAndCallZContractFailsIfTargetIsZeroAddress(&_GatewayZEVMOutboundTest.TransactOpts) +} + +// TestDepositZETAAndCallZContractFailsIfTargetIsZeroAddress is a paid mutator transaction binding the contract method 0x9b86d40f. +// +// Solidity: function testDepositZETAAndCallZContractFailsIfTargetIsZeroAddress() returns() +func (_GatewayZEVMOutboundTest *GatewayZEVMOutboundTestTransactorSession) TestDepositZETAAndCallZContractFailsIfTargetIsZeroAddress() (*types.Transaction, error) { + return _GatewayZEVMOutboundTest.Contract.TestDepositZETAAndCallZContractFailsIfTargetIsZeroAddress(&_GatewayZEVMOutboundTest.TransactOpts) +} + // TestDepositZRC20AndCallZContract is a paid mutator transaction binding the contract method 0x597cfeb0. // // Solidity: function testDepositZRC20AndCallZContract() returns() @@ -938,6 +1106,27 @@ func (_GatewayZEVMOutboundTest *GatewayZEVMOutboundTestTransactorSession) TestDe return _GatewayZEVMOutboundTest.Contract.TestDepositZRC20AndCallZContract(&_GatewayZEVMOutboundTest.TransactOpts) } +// TestDepositZRC20AndCallZContractFailsIfAmountIsZero is a paid mutator transaction binding the contract method 0x254ea181. +// +// Solidity: function testDepositZRC20AndCallZContractFailsIfAmountIsZero() returns() +func (_GatewayZEVMOutboundTest *GatewayZEVMOutboundTestTransactor) TestDepositZRC20AndCallZContractFailsIfAmountIsZero(opts *bind.TransactOpts) (*types.Transaction, error) { + return _GatewayZEVMOutboundTest.contract.Transact(opts, "testDepositZRC20AndCallZContractFailsIfAmountIsZero") +} + +// TestDepositZRC20AndCallZContractFailsIfAmountIsZero is a paid mutator transaction binding the contract method 0x254ea181. +// +// Solidity: function testDepositZRC20AndCallZContractFailsIfAmountIsZero() returns() +func (_GatewayZEVMOutboundTest *GatewayZEVMOutboundTestSession) TestDepositZRC20AndCallZContractFailsIfAmountIsZero() (*types.Transaction, error) { + return _GatewayZEVMOutboundTest.Contract.TestDepositZRC20AndCallZContractFailsIfAmountIsZero(&_GatewayZEVMOutboundTest.TransactOpts) +} + +// TestDepositZRC20AndCallZContractFailsIfAmountIsZero is a paid mutator transaction binding the contract method 0x254ea181. +// +// Solidity: function testDepositZRC20AndCallZContractFailsIfAmountIsZero() returns() +func (_GatewayZEVMOutboundTest *GatewayZEVMOutboundTestTransactorSession) TestDepositZRC20AndCallZContractFailsIfAmountIsZero() (*types.Transaction, error) { + return _GatewayZEVMOutboundTest.Contract.TestDepositZRC20AndCallZContractFailsIfAmountIsZero(&_GatewayZEVMOutboundTest.TransactOpts) +} + // TestDepositZRC20AndCallZContractFailsIfSenderIsNotFungibleModule is a paid mutator transaction binding the contract method 0x461fc5af. // // Solidity: function testDepositZRC20AndCallZContractFailsIfSenderIsNotFungibleModule() returns() @@ -959,6 +1148,48 @@ func (_GatewayZEVMOutboundTest *GatewayZEVMOutboundTestTransactorSession) TestDe return _GatewayZEVMOutboundTest.Contract.TestDepositZRC20AndCallZContractFailsIfSenderIsNotFungibleModule(&_GatewayZEVMOutboundTest.TransactOpts) } +// TestDepositZRC20AndCallZContractFailsIfTargetIsZeroAddress is a paid mutator transaction binding the contract method 0x9b3272bf. +// +// Solidity: function testDepositZRC20AndCallZContractFailsIfTargetIsZeroAddress() returns() +func (_GatewayZEVMOutboundTest *GatewayZEVMOutboundTestTransactor) TestDepositZRC20AndCallZContractFailsIfTargetIsZeroAddress(opts *bind.TransactOpts) (*types.Transaction, error) { + return _GatewayZEVMOutboundTest.contract.Transact(opts, "testDepositZRC20AndCallZContractFailsIfTargetIsZeroAddress") +} + +// TestDepositZRC20AndCallZContractFailsIfTargetIsZeroAddress is a paid mutator transaction binding the contract method 0x9b3272bf. +// +// Solidity: function testDepositZRC20AndCallZContractFailsIfTargetIsZeroAddress() returns() +func (_GatewayZEVMOutboundTest *GatewayZEVMOutboundTestSession) TestDepositZRC20AndCallZContractFailsIfTargetIsZeroAddress() (*types.Transaction, error) { + return _GatewayZEVMOutboundTest.Contract.TestDepositZRC20AndCallZContractFailsIfTargetIsZeroAddress(&_GatewayZEVMOutboundTest.TransactOpts) +} + +// TestDepositZRC20AndCallZContractFailsIfTargetIsZeroAddress is a paid mutator transaction binding the contract method 0x9b3272bf. +// +// Solidity: function testDepositZRC20AndCallZContractFailsIfTargetIsZeroAddress() returns() +func (_GatewayZEVMOutboundTest *GatewayZEVMOutboundTestTransactorSession) TestDepositZRC20AndCallZContractFailsIfTargetIsZeroAddress() (*types.Transaction, error) { + return _GatewayZEVMOutboundTest.Contract.TestDepositZRC20AndCallZContractFailsIfTargetIsZeroAddress(&_GatewayZEVMOutboundTest.TransactOpts) +} + +// TestDepositZRC20AndCallZContractFailsIfZrc20IsZeroAddress is a paid mutator transaction binding the contract method 0x612aa549. +// +// Solidity: function testDepositZRC20AndCallZContractFailsIfZrc20IsZeroAddress() returns() +func (_GatewayZEVMOutboundTest *GatewayZEVMOutboundTestTransactor) TestDepositZRC20AndCallZContractFailsIfZrc20IsZeroAddress(opts *bind.TransactOpts) (*types.Transaction, error) { + return _GatewayZEVMOutboundTest.contract.Transact(opts, "testDepositZRC20AndCallZContractFailsIfZrc20IsZeroAddress") +} + +// TestDepositZRC20AndCallZContractFailsIfZrc20IsZeroAddress is a paid mutator transaction binding the contract method 0x612aa549. +// +// Solidity: function testDepositZRC20AndCallZContractFailsIfZrc20IsZeroAddress() returns() +func (_GatewayZEVMOutboundTest *GatewayZEVMOutboundTestSession) TestDepositZRC20AndCallZContractFailsIfZrc20IsZeroAddress() (*types.Transaction, error) { + return _GatewayZEVMOutboundTest.Contract.TestDepositZRC20AndCallZContractFailsIfZrc20IsZeroAddress(&_GatewayZEVMOutboundTest.TransactOpts) +} + +// TestDepositZRC20AndCallZContractFailsIfZrc20IsZeroAddress is a paid mutator transaction binding the contract method 0x612aa549. +// +// Solidity: function testDepositZRC20AndCallZContractFailsIfZrc20IsZeroAddress() returns() +func (_GatewayZEVMOutboundTest *GatewayZEVMOutboundTestTransactorSession) TestDepositZRC20AndCallZContractFailsIfZrc20IsZeroAddress() (*types.Transaction, error) { + return _GatewayZEVMOutboundTest.Contract.TestDepositZRC20AndCallZContractFailsIfZrc20IsZeroAddress(&_GatewayZEVMOutboundTest.TransactOpts) +} + // TestDepositZRC20AndCallZContractIfTargetIsFungibleModule is a paid mutator transaction binding the contract method 0xdf690b9a. // // Solidity: function testDepositZRC20AndCallZContractIfTargetIsFungibleModule() returns() @@ -1001,6 +1232,69 @@ func (_GatewayZEVMOutboundTest *GatewayZEVMOutboundTestTransactorSession) TestDe return _GatewayZEVMOutboundTest.Contract.TestDepositZRC20AndCallZContractIfTargetIsGateway(&_GatewayZEVMOutboundTest.TransactOpts) } +// TestExecuteFailsIfAmountIsZero is a paid mutator transaction binding the contract method 0xdf881f6c. +// +// Solidity: function testExecuteFailsIfAmountIsZero() returns() +func (_GatewayZEVMOutboundTest *GatewayZEVMOutboundTestTransactor) TestExecuteFailsIfAmountIsZero(opts *bind.TransactOpts) (*types.Transaction, error) { + return _GatewayZEVMOutboundTest.contract.Transact(opts, "testExecuteFailsIfAmountIsZero") +} + +// TestExecuteFailsIfAmountIsZero is a paid mutator transaction binding the contract method 0xdf881f6c. +// +// Solidity: function testExecuteFailsIfAmountIsZero() returns() +func (_GatewayZEVMOutboundTest *GatewayZEVMOutboundTestSession) TestExecuteFailsIfAmountIsZero() (*types.Transaction, error) { + return _GatewayZEVMOutboundTest.Contract.TestExecuteFailsIfAmountIsZero(&_GatewayZEVMOutboundTest.TransactOpts) +} + +// TestExecuteFailsIfAmountIsZero is a paid mutator transaction binding the contract method 0xdf881f6c. +// +// Solidity: function testExecuteFailsIfAmountIsZero() returns() +func (_GatewayZEVMOutboundTest *GatewayZEVMOutboundTestTransactorSession) TestExecuteFailsIfAmountIsZero() (*types.Transaction, error) { + return _GatewayZEVMOutboundTest.Contract.TestExecuteFailsIfAmountIsZero(&_GatewayZEVMOutboundTest.TransactOpts) +} + +// TestExecuteFailsIfTargetIsZeroAddress is a paid mutator transaction binding the contract method 0x3ab5b199. +// +// Solidity: function testExecuteFailsIfTargetIsZeroAddress() returns() +func (_GatewayZEVMOutboundTest *GatewayZEVMOutboundTestTransactor) TestExecuteFailsIfTargetIsZeroAddress(opts *bind.TransactOpts) (*types.Transaction, error) { + return _GatewayZEVMOutboundTest.contract.Transact(opts, "testExecuteFailsIfTargetIsZeroAddress") +} + +// TestExecuteFailsIfTargetIsZeroAddress is a paid mutator transaction binding the contract method 0x3ab5b199. +// +// Solidity: function testExecuteFailsIfTargetIsZeroAddress() returns() +func (_GatewayZEVMOutboundTest *GatewayZEVMOutboundTestSession) TestExecuteFailsIfTargetIsZeroAddress() (*types.Transaction, error) { + return _GatewayZEVMOutboundTest.Contract.TestExecuteFailsIfTargetIsZeroAddress(&_GatewayZEVMOutboundTest.TransactOpts) +} + +// TestExecuteFailsIfTargetIsZeroAddress is a paid mutator transaction binding the contract method 0x3ab5b199. +// +// Solidity: function testExecuteFailsIfTargetIsZeroAddress() returns() +func (_GatewayZEVMOutboundTest *GatewayZEVMOutboundTestTransactorSession) TestExecuteFailsIfTargetIsZeroAddress() (*types.Transaction, error) { + return _GatewayZEVMOutboundTest.Contract.TestExecuteFailsIfTargetIsZeroAddress(&_GatewayZEVMOutboundTest.TransactOpts) +} + +// TestExecuteFailsIfZrc20IsZeroAddress is a paid mutator transaction binding the contract method 0x09f92c1f. +// +// Solidity: function testExecuteFailsIfZrc20IsZeroAddress() returns() +func (_GatewayZEVMOutboundTest *GatewayZEVMOutboundTestTransactor) TestExecuteFailsIfZrc20IsZeroAddress(opts *bind.TransactOpts) (*types.Transaction, error) { + return _GatewayZEVMOutboundTest.contract.Transact(opts, "testExecuteFailsIfZrc20IsZeroAddress") +} + +// TestExecuteFailsIfZrc20IsZeroAddress is a paid mutator transaction binding the contract method 0x09f92c1f. +// +// Solidity: function testExecuteFailsIfZrc20IsZeroAddress() returns() +func (_GatewayZEVMOutboundTest *GatewayZEVMOutboundTestSession) TestExecuteFailsIfZrc20IsZeroAddress() (*types.Transaction, error) { + return _GatewayZEVMOutboundTest.Contract.TestExecuteFailsIfZrc20IsZeroAddress(&_GatewayZEVMOutboundTest.TransactOpts) +} + +// TestExecuteFailsIfZrc20IsZeroAddress is a paid mutator transaction binding the contract method 0x09f92c1f. +// +// Solidity: function testExecuteFailsIfZrc20IsZeroAddress() returns() +func (_GatewayZEVMOutboundTest *GatewayZEVMOutboundTestTransactorSession) TestExecuteFailsIfZrc20IsZeroAddress() (*types.Transaction, error) { + return _GatewayZEVMOutboundTest.Contract.TestExecuteFailsIfZrc20IsZeroAddress(&_GatewayZEVMOutboundTest.TransactOpts) +} + // TestExecuteRevertZContract is a paid mutator transaction binding the contract method 0xcced12c7. // // Solidity: function testExecuteRevertZContract() returns() @@ -1022,6 +1316,69 @@ func (_GatewayZEVMOutboundTest *GatewayZEVMOutboundTestTransactorSession) TestEx return _GatewayZEVMOutboundTest.Contract.TestExecuteRevertZContract(&_GatewayZEVMOutboundTest.TransactOpts) } +// TestExecuteRevertZContractFailsIfAmountIsZero is a paid mutator transaction binding the contract method 0x30548465. +// +// Solidity: function testExecuteRevertZContractFailsIfAmountIsZero() returns() +func (_GatewayZEVMOutboundTest *GatewayZEVMOutboundTestTransactor) TestExecuteRevertZContractFailsIfAmountIsZero(opts *bind.TransactOpts) (*types.Transaction, error) { + return _GatewayZEVMOutboundTest.contract.Transact(opts, "testExecuteRevertZContractFailsIfAmountIsZero") +} + +// TestExecuteRevertZContractFailsIfAmountIsZero is a paid mutator transaction binding the contract method 0x30548465. +// +// Solidity: function testExecuteRevertZContractFailsIfAmountIsZero() returns() +func (_GatewayZEVMOutboundTest *GatewayZEVMOutboundTestSession) TestExecuteRevertZContractFailsIfAmountIsZero() (*types.Transaction, error) { + return _GatewayZEVMOutboundTest.Contract.TestExecuteRevertZContractFailsIfAmountIsZero(&_GatewayZEVMOutboundTest.TransactOpts) +} + +// TestExecuteRevertZContractFailsIfAmountIsZero is a paid mutator transaction binding the contract method 0x30548465. +// +// Solidity: function testExecuteRevertZContractFailsIfAmountIsZero() returns() +func (_GatewayZEVMOutboundTest *GatewayZEVMOutboundTestTransactorSession) TestExecuteRevertZContractFailsIfAmountIsZero() (*types.Transaction, error) { + return _GatewayZEVMOutboundTest.Contract.TestExecuteRevertZContractFailsIfAmountIsZero(&_GatewayZEVMOutboundTest.TransactOpts) +} + +// TestExecuteRevertZContractFailsIfTargetIsZeroAddress is a paid mutator transaction binding the contract method 0x191c9a9e. +// +// Solidity: function testExecuteRevertZContractFailsIfTargetIsZeroAddress() returns() +func (_GatewayZEVMOutboundTest *GatewayZEVMOutboundTestTransactor) TestExecuteRevertZContractFailsIfTargetIsZeroAddress(opts *bind.TransactOpts) (*types.Transaction, error) { + return _GatewayZEVMOutboundTest.contract.Transact(opts, "testExecuteRevertZContractFailsIfTargetIsZeroAddress") +} + +// TestExecuteRevertZContractFailsIfTargetIsZeroAddress is a paid mutator transaction binding the contract method 0x191c9a9e. +// +// Solidity: function testExecuteRevertZContractFailsIfTargetIsZeroAddress() returns() +func (_GatewayZEVMOutboundTest *GatewayZEVMOutboundTestSession) TestExecuteRevertZContractFailsIfTargetIsZeroAddress() (*types.Transaction, error) { + return _GatewayZEVMOutboundTest.Contract.TestExecuteRevertZContractFailsIfTargetIsZeroAddress(&_GatewayZEVMOutboundTest.TransactOpts) +} + +// TestExecuteRevertZContractFailsIfTargetIsZeroAddress is a paid mutator transaction binding the contract method 0x191c9a9e. +// +// Solidity: function testExecuteRevertZContractFailsIfTargetIsZeroAddress() returns() +func (_GatewayZEVMOutboundTest *GatewayZEVMOutboundTestTransactorSession) TestExecuteRevertZContractFailsIfTargetIsZeroAddress() (*types.Transaction, error) { + return _GatewayZEVMOutboundTest.Contract.TestExecuteRevertZContractFailsIfTargetIsZeroAddress(&_GatewayZEVMOutboundTest.TransactOpts) +} + +// TestExecuteRevertZContractFailsIfZrc20IsZeroAddress is a paid mutator transaction binding the contract method 0x7243a2fb. +// +// Solidity: function testExecuteRevertZContractFailsIfZrc20IsZeroAddress() returns() +func (_GatewayZEVMOutboundTest *GatewayZEVMOutboundTestTransactor) TestExecuteRevertZContractFailsIfZrc20IsZeroAddress(opts *bind.TransactOpts) (*types.Transaction, error) { + return _GatewayZEVMOutboundTest.contract.Transact(opts, "testExecuteRevertZContractFailsIfZrc20IsZeroAddress") +} + +// TestExecuteRevertZContractFailsIfZrc20IsZeroAddress is a paid mutator transaction binding the contract method 0x7243a2fb. +// +// Solidity: function testExecuteRevertZContractFailsIfZrc20IsZeroAddress() returns() +func (_GatewayZEVMOutboundTest *GatewayZEVMOutboundTestSession) TestExecuteRevertZContractFailsIfZrc20IsZeroAddress() (*types.Transaction, error) { + return _GatewayZEVMOutboundTest.Contract.TestExecuteRevertZContractFailsIfZrc20IsZeroAddress(&_GatewayZEVMOutboundTest.TransactOpts) +} + +// TestExecuteRevertZContractFailsIfZrc20IsZeroAddress is a paid mutator transaction binding the contract method 0x7243a2fb. +// +// Solidity: function testExecuteRevertZContractFailsIfZrc20IsZeroAddress() returns() +func (_GatewayZEVMOutboundTest *GatewayZEVMOutboundTestTransactorSession) TestExecuteRevertZContractFailsIfZrc20IsZeroAddress() (*types.Transaction, error) { + return _GatewayZEVMOutboundTest.Contract.TestExecuteRevertZContractFailsIfZrc20IsZeroAddress(&_GatewayZEVMOutboundTest.TransactOpts) +} + // TestExecuteRevertZContractIfSenderIsNotFungibleModule is a paid mutator transaction binding the contract method 0x31d09956. // // Solidity: function testExecuteRevertZContractIfSenderIsNotFungibleModule() returns() diff --git a/v2/pkg/igatewayevm.sol/igatewayevmerrors.go b/v2/pkg/igatewayevm.sol/igatewayevmerrors.go index 0b2dca75..d59c42a6 100644 --- a/v2/pkg/igatewayevm.sol/igatewayevmerrors.go +++ b/v2/pkg/igatewayevm.sol/igatewayevmerrors.go @@ -31,7 +31,7 @@ var ( // IGatewayEVMErrorsMetaData contains all meta data concerning the IGatewayEVMErrors contract. var IGatewayEVMErrorsMetaData = &bind.MetaData{ - ABI: "[{\"type\":\"error\",\"name\":\"ApprovalFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"CustodyInitialized\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"DepositFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ExecutionFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientERC20Amount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientETHAmount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZeroAddress\",\"inputs\":[]}]", + ABI: "[{\"type\":\"error\",\"name\":\"ApprovalFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ConnectorInitialized\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"CustodyInitialized\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"DepositFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ExecutionFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientERC20Amount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientETHAmount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZeroAddress\",\"inputs\":[]}]", } // IGatewayEVMErrorsABI is the input ABI used to generate the binding from. diff --git a/v2/pkg/igatewayzevm.sol/igatewayzevmerrors.go b/v2/pkg/igatewayzevm.sol/igatewayzevmerrors.go index 596e475e..d8fc180a 100644 --- a/v2/pkg/igatewayzevm.sol/igatewayzevmerrors.go +++ b/v2/pkg/igatewayzevm.sol/igatewayzevmerrors.go @@ -31,7 +31,7 @@ var ( // IGatewayZEVMErrorsMetaData contains all meta data concerning the IGatewayZEVMErrors contract. var IGatewayZEVMErrorsMetaData = &bind.MetaData{ - ABI: "[{\"type\":\"error\",\"name\":\"CallerIsNotFungibleModule\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"FailedZetaSent\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"GasFeeTransferFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientZRC20Amount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidTarget\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OnlyWZETAOrFungible\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"WithdrawalFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZRC20BurnFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZRC20DepositFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZRC20TransferFailed\",\"inputs\":[]}]", + ABI: "[{\"type\":\"error\",\"name\":\"CallerIsNotFungibleModule\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"FailedZetaSent\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"GasFeeTransferFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientZRC20Amount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientZetaAmount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidTarget\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OnlyWZETAOrFungible\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"WithdrawalFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZRC20BurnFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZRC20DepositFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZRC20TransferFailed\",\"inputs\":[]}]", } // IGatewayZEVMErrorsABI is the input ABI used to generate the binding from. diff --git a/v2/pkg/senderzevm.sol/senderzevm.go b/v2/pkg/senderzevm.sol/senderzevm.go index 8cd2fe79..080cace9 100644 --- a/v2/pkg/senderzevm.sol/senderzevm.go +++ b/v2/pkg/senderzevm.sol/senderzevm.go @@ -32,7 +32,7 @@ var ( // SenderZEVMMetaData contains all meta data concerning the SenderZEVM contract. var SenderZEVMMetaData = &bind.MetaData{ ABI: "[{\"type\":\"constructor\",\"inputs\":[{\"name\":\"_gateway\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"callReceiver\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"chainId\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"str\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"num\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"flag\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"gateway\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"withdrawAndCallReceiver\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"zrc20\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"str\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"num\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"flag\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"error\",\"name\":\"ApprovalFailed\",\"inputs\":[]}]", - Bin: "0x6080604052348015600f57600080fd5b5060405161080c38038061080c833981016040819052602c916050565b600080546001600160a01b0319166001600160a01b0392909216919091179055607e565b600060208284031215606157600080fd5b81516001600160a01b0381168114607757600080fd5b9392505050565b61077f8061008d6000396000f3fe608060405234801561001057600080fd5b50600436106100415760003560e01c80630abd890514610046578063116191b61461005b578063865b36f6146100a4575b600080fd5b6100596100543660046104c4565b6100b7565b005b60005461007b9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b6100596100b236600461057f565b6102af565b60008383836040516024016100ce93929190610674565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe04d4f970000000000000000000000000000000000000000000000000000000017905260005490517f095ea7b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff91821660048201526024810189905291925086169063095ea7b3906044016020604051808303816000875af11580156101be573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101e2919061069e565b610218576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000546040517f7993c1e000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff90911690637993c1e090610274908a908a908a9087906004016106c2565b600060405180830381600087803b15801561028e57600080fd5b505af11580156102a2573d6000803e3d6000fd5b5050505050505050505050565b60008383836040516024016102c693929190610674565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe04d4f970000000000000000000000000000000000000000000000000000000017905260005490517f5d40e17800000000000000000000000000000000000000000000000000000000815291925073ffffffffffffffffffffffffffffffffffffffff1690635d40e1789061039690899089908690600401610714565b600060405180830381600087803b1580156103b057600080fd5b505af11580156103c4573d6000803e3d6000fd5b50505050505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600082601f83011261041057600080fd5b81356020830160008067ffffffffffffffff841115610431576104316103d0565b506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f85018116603f0116810181811067ffffffffffffffff8211171561047e5761047e6103d0565b60405283815290508082840187101561049657600080fd5b838360208301376000602085830101528094505050505092915050565b80151581146104c157600080fd5b50565b60008060008060008060c087890312156104dd57600080fd5b863567ffffffffffffffff8111156104f457600080fd5b61050089828a016103ff565b96505060208701359450604087013573ffffffffffffffffffffffffffffffffffffffff8116811461053157600080fd5b9350606087013567ffffffffffffffff81111561054d57600080fd5b61055989828a016103ff565b9350506080870135915060a0870135610571816104b3565b809150509295509295509295565b600080600080600060a0868803121561059757600080fd5b853567ffffffffffffffff8111156105ae57600080fd5b6105ba888289016103ff565b95505060208601359350604086013567ffffffffffffffff8111156105de57600080fd5b6105ea888289016103ff565b935050606086013591506080860135610602816104b3565b809150509295509295909350565b6000815180845260005b818110156106365760208185018101518683018201520161061a565b5060006020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b6060815260006106876060830186610610565b602083019490945250901515604090910152919050565b6000602082840312156106b057600080fd5b81516106bb816104b3565b9392505050565b6080815260006106d56080830187610610565b85602084015273ffffffffffffffffffffffffffffffffffffffff8516604084015282810360608401526107098185610610565b979650505050505050565b6060815260006107276060830186610610565b846020840152828103604084015261073f8185610610565b969550505050505056fea26469706673582212200eb2d64f6bd03198b904dea273f648b094222e30263233833cd64525d96f81ba64736f6c634300081a0033", + Bin: "0x6080604052348015600f57600080fd5b5060405161080c38038061080c833981016040819052602c916050565b600080546001600160a01b0319166001600160a01b0392909216919091179055607e565b600060208284031215606157600080fd5b81516001600160a01b0381168114607757600080fd5b9392505050565b61077f8061008d6000396000f3fe608060405234801561001057600080fd5b50600436106100415760003560e01c80630abd890514610046578063116191b61461005b578063865b36f6146100a4575b600080fd5b6100596100543660046104c4565b6100b7565b005b60005461007b9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b6100596100b236600461057f565b6102af565b60008383836040516024016100ce93929190610674565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe04d4f970000000000000000000000000000000000000000000000000000000017905260005490517f095ea7b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff91821660048201526024810189905291925086169063095ea7b3906044016020604051808303816000875af11580156101be573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101e2919061069e565b610218576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000546040517f7993c1e000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff90911690637993c1e090610274908a908a908a9087906004016106c2565b600060405180830381600087803b15801561028e57600080fd5b505af11580156102a2573d6000803e3d6000fd5b5050505050505050505050565b60008383836040516024016102c693929190610674565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe04d4f970000000000000000000000000000000000000000000000000000000017905260005490517f5d40e17800000000000000000000000000000000000000000000000000000000815291925073ffffffffffffffffffffffffffffffffffffffff1690635d40e1789061039690899089908690600401610714565b600060405180830381600087803b1580156103b057600080fd5b505af11580156103c4573d6000803e3d6000fd5b50505050505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600082601f83011261041057600080fd5b81356020830160008067ffffffffffffffff841115610431576104316103d0565b506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f85018116603f0116810181811067ffffffffffffffff8211171561047e5761047e6103d0565b60405283815290508082840187101561049657600080fd5b838360208301376000602085830101528094505050505092915050565b80151581146104c157600080fd5b50565b60008060008060008060c087890312156104dd57600080fd5b863567ffffffffffffffff8111156104f457600080fd5b61050089828a016103ff565b96505060208701359450604087013573ffffffffffffffffffffffffffffffffffffffff8116811461053157600080fd5b9350606087013567ffffffffffffffff81111561054d57600080fd5b61055989828a016103ff565b9350506080870135915060a0870135610571816104b3565b809150509295509295509295565b600080600080600060a0868803121561059757600080fd5b853567ffffffffffffffff8111156105ae57600080fd5b6105ba888289016103ff565b95505060208601359350604086013567ffffffffffffffff8111156105de57600080fd5b6105ea888289016103ff565b935050606086013591506080860135610602816104b3565b809150509295509295909350565b6000815180845260005b818110156106365760208185018101518683018201520161061a565b5060006020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b6060815260006106876060830186610610565b602083019490945250901515604090910152919050565b6000602082840312156106b057600080fd5b81516106bb816104b3565b9392505050565b6080815260006106d56080830187610610565b85602084015273ffffffffffffffffffffffffffffffffffffffff8516604084015282810360608401526107098185610610565b979650505050505050565b6060815260006107276060830186610610565b846020840152828103604084015261073f8185610610565b969550505050505056fea2646970667358221220d5c8efa106d3ece0f3750900034e01f5ba81ba4b46a57e03310e9ccd21566f2864736f6c634300081a0033", } // SenderZEVMABI is the input ABI used to generate the binding from. diff --git a/v2/pkg/zetaconnectorbase.sol/zetaconnectorbase.go b/v2/pkg/zetaconnectorbase.sol/zetaconnectorbase.go index 64615af2..5276641d 100644 --- a/v2/pkg/zetaconnectorbase.sol/zetaconnectorbase.go +++ b/v2/pkg/zetaconnectorbase.sol/zetaconnectorbase.go @@ -31,7 +31,7 @@ var ( // ZetaConnectorBaseMetaData contains all meta data concerning the ZetaConnectorBase contract. var ZetaConnectorBaseMetaData = &bind.MetaData{ - ABI: "[{\"type\":\"function\",\"name\":\"DEFAULT_ADMIN_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"PAUSER_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"WITHDRAWER_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"gateway\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIGatewayEVM\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getRoleAdmin\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"grantRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"hasRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"pause\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"paused\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"receiveTokens\",\"inputs\":[{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"renounceRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"callerConfirmation\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"revokeRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"supportsInterface\",\"inputs\":[{\"name\":\"interfaceId\",\"type\":\"bytes4\",\"internalType\":\"bytes4\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"unpause\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"withdraw\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"internalSendHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"withdrawAndCall\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"internalSendHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"withdrawAndRevert\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"internalSendHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"zetaToken\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"event\",\"name\":\"Paused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleAdminChanged\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"previousAdminRole\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"newAdminRole\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleGranted\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleRevoked\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Unpaused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Withdraw\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"WithdrawAndCall\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"WithdrawAndRevert\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"AccessControlBadConfirmation\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"AccessControlUnauthorizedAccount\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"neededRole\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"type\":\"error\",\"name\":\"EnforcedPause\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ExpectedPause\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ReentrancyGuardReentrantCall\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZeroAddress\",\"inputs\":[]}]", + ABI: "[{\"type\":\"function\",\"name\":\"DEFAULT_ADMIN_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"PAUSER_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"TSS_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"WITHDRAWER_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"gateway\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIGatewayEVM\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getRoleAdmin\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"grantRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"hasRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"pause\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"paused\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"receiveTokens\",\"inputs\":[{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"renounceRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"callerConfirmation\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"revokeRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"supportsInterface\",\"inputs\":[{\"name\":\"interfaceId\",\"type\":\"bytes4\",\"internalType\":\"bytes4\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"unpause\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"withdraw\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"internalSendHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"withdrawAndCall\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"internalSendHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"withdrawAndRevert\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"internalSendHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"zetaToken\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"event\",\"name\":\"Paused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleAdminChanged\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"previousAdminRole\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"newAdminRole\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleGranted\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleRevoked\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Unpaused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Withdraw\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"WithdrawAndCall\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"WithdrawAndRevert\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"AccessControlBadConfirmation\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"AccessControlUnauthorizedAccount\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"neededRole\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"type\":\"error\",\"name\":\"EnforcedPause\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ExpectedPause\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ReentrancyGuardReentrantCall\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZeroAddress\",\"inputs\":[]}]", } // ZetaConnectorBaseABI is the input ABI used to generate the binding from. @@ -242,6 +242,37 @@ func (_ZetaConnectorBase *ZetaConnectorBaseCallerSession) PAUSERROLE() ([32]byte return _ZetaConnectorBase.Contract.PAUSERROLE(&_ZetaConnectorBase.CallOpts) } +// TSSROLE is a free data retrieval call binding the contract method 0xa783c789. +// +// Solidity: function TSS_ROLE() view returns(bytes32) +func (_ZetaConnectorBase *ZetaConnectorBaseCaller) TSSROLE(opts *bind.CallOpts) ([32]byte, error) { + var out []interface{} + err := _ZetaConnectorBase.contract.Call(opts, &out, "TSS_ROLE") + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// TSSROLE is a free data retrieval call binding the contract method 0xa783c789. +// +// Solidity: function TSS_ROLE() view returns(bytes32) +func (_ZetaConnectorBase *ZetaConnectorBaseSession) TSSROLE() ([32]byte, error) { + return _ZetaConnectorBase.Contract.TSSROLE(&_ZetaConnectorBase.CallOpts) +} + +// TSSROLE is a free data retrieval call binding the contract method 0xa783c789. +// +// Solidity: function TSS_ROLE() view returns(bytes32) +func (_ZetaConnectorBase *ZetaConnectorBaseCallerSession) TSSROLE() ([32]byte, error) { + return _ZetaConnectorBase.Contract.TSSROLE(&_ZetaConnectorBase.CallOpts) +} + // WITHDRAWERROLE is a free data retrieval call binding the contract method 0x85f438c1. // // Solidity: function WITHDRAWER_ROLE() view returns(bytes32) diff --git a/v2/pkg/zetaconnectornative.sol/zetaconnectornative.go b/v2/pkg/zetaconnectornative.sol/zetaconnectornative.go index 8d020f62..69812a82 100644 --- a/v2/pkg/zetaconnectornative.sol/zetaconnectornative.go +++ b/v2/pkg/zetaconnectornative.sol/zetaconnectornative.go @@ -31,8 +31,8 @@ var ( // ZetaConnectorNativeMetaData contains all meta data concerning the ZetaConnectorNative contract. var ZetaConnectorNativeMetaData = &bind.MetaData{ - ABI: "[{\"type\":\"constructor\",\"inputs\":[{\"name\":\"gateway_\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"zetaToken_\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"tssAddress_\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"admin_\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"DEFAULT_ADMIN_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"PAUSER_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"WITHDRAWER_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"gateway\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIGatewayEVM\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getRoleAdmin\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"grantRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"hasRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"pause\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"paused\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"receiveTokens\",\"inputs\":[{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"renounceRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"callerConfirmation\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"revokeRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"supportsInterface\",\"inputs\":[{\"name\":\"interfaceId\",\"type\":\"bytes4\",\"internalType\":\"bytes4\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"unpause\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"withdraw\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"internalSendHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"withdrawAndCall\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"internalSendHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"withdrawAndRevert\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"internalSendHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"zetaToken\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"event\",\"name\":\"Paused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleAdminChanged\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"previousAdminRole\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"newAdminRole\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleGranted\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleRevoked\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Unpaused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Withdraw\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"WithdrawAndCall\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"WithdrawAndRevert\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"AccessControlBadConfirmation\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"AccessControlUnauthorizedAccount\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"neededRole\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"type\":\"error\",\"name\":\"AddressEmptyCode\",\"inputs\":[{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"AddressInsufficientBalance\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"EnforcedPause\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ExpectedPause\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"FailedInnerCall\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ReentrancyGuardReentrantCall\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"SafeERC20FailedOperation\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"ZeroAddress\",\"inputs\":[]}]", - Bin: "0x60c060405234801561001057600080fd5b506040516115f63803806115f683398101604081905261002f916101ef565b60016000819055805460ff19169055838383836001600160a01b038416158061005f57506001600160a01b038316155b8061007157506001600160a01b038216155b8061008357506001600160a01b038116155b156100a15760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b03808516608052831660a0526100bf600082610123565b506100ea7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e483610123565b506101157f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a82610123565b505050505050505050610243565b60008281526002602090815260408083206001600160a01b038516845290915281205460ff166101c95760008381526002602090815260408083206001600160a01b03861684529091529020805460ff191660011790556101813390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45060016101cd565b5060005b92915050565b80516001600160a01b03811681146101ea57600080fd5b919050565b6000806000806080858703121561020557600080fd5b61020e856101d3565b935061021c602086016101d3565b925061022a604086016101d3565b9150610238606086016101d3565b905092959194509250565b60805160a0516113486102ae600039600081816101dc01528181610432015281816104e3015281816105fd0152818161079101528181610842015261091001526000818161019001528181610454015281816104b6015281816107b3015261081501526113486000f3fe608060405234801561001057600080fd5b50600436106101365760003560e01c80635c975abb116100b257806385f438c111610081578063a217fddf11610066578063a217fddf14610303578063d547741f1461030b578063e63ab1e91461031e57600080fd5b806385f438c11461029657806391d14854146102bd57600080fd5b80635c975abb1461025d5780635e3e9fef14610268578063743e0c9b1461027b5780638456cb591461028e57600080fd5b806321e093b1116101095780632f2ff15d116100ee5780632f2ff15d1461022f57806336568abe146102425780633f4ba83a1461025557600080fd5b806321e093b1146101d7578063248a9ca3146101fe57600080fd5b806301ffc9a71461013b57806302d5c89914610163578063106e629014610178578063116191b61461018b575b600080fd5b61014e610149366004611083565b610345565b60405190151581526020015b60405180910390f35b6101766101713660046110ee565b6103de565b005b610176610186366004611180565b6105a9565b6101b27f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161015a565b6101b27f000000000000000000000000000000000000000000000000000000000000000081565b61022161020c3660046111b3565b60009081526002602052604090206001015490565b60405190815260200161015a565b61017661023d3660046111cc565b610684565b6101766102503660046111cc565b6106af565b610176610708565b60015460ff1661014e565b6101766102763660046110ee565b61073d565b6101766102893660046111b3565b6108ee565b610176610938565b6102217f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b61014e6102cb3660046111cc565b600091825260026020908152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b610221600081565b6101766103193660046111cc565b61096a565b6102217f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b0000000000000000000000000000000000000000000000000000000014806103d857507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b6103e661098f565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e4610410816109d2565b6104186109dc565b61047973ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000167f000000000000000000000000000000000000000000000000000000000000000087610a1b565b6040517fb8969bd400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063b8969bd490610513907f0000000000000000000000000000000000000000000000000000000000000000908a908a908a908a90600401611241565b600060405180830381600087803b15801561052d57600080fd5b505af1158015610541573d6000803e3d6000fd5b505050508573ffffffffffffffffffffffffffffffffffffffff167fba96f26bdda53eb8c8ba39045dfb4ff39753fbc7a6edcf250a88e75e78d102fe86868660405161058f9392919061129e565b60405180910390a2506105a26001600055565b5050505050565b6105b161098f565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e46105db816109d2565b6105e36109dc565b61062473ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168585610a1b565b8373ffffffffffffffffffffffffffffffffffffffff167f884edad9ce6fa2440d8a54cc123490eb96d2768479d49ff9c7366125a94243648460405161066c91815260200190565b60405180910390a25061067f6001600055565b505050565b60008281526002602052604090206001015461069f816109d2565b6106a98383610a9c565b50505050565b73ffffffffffffffffffffffffffffffffffffffff811633146106fe576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61067f8282610b9c565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610732816109d2565b61073a610c5b565b50565b61074561098f565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461076f816109d2565b6107776109dc565b6107d873ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000167f000000000000000000000000000000000000000000000000000000000000000087610a1b565b6040517f5131ab5900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690635131ab5990610872907f0000000000000000000000000000000000000000000000000000000000000000908a908a908a908a90600401611241565b600060405180830381600087803b15801561088c57600080fd5b505af11580156108a0573d6000803e3d6000fd5b505050508573ffffffffffffffffffffffffffffffffffffffff167f7772f56296d3a5202974a45c61c9188d844ab4d6eeb18c851e4b8d5384ca6ced86868660405161058f9392919061129e565b6108f66109dc565b61073a73ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016333084610cd8565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610962816109d2565b61073a610d1e565b600082815260026020526040902060010154610985816109d2565b6106a98383610b9c565b6002600054036109cb576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b61073a8133610d77565b60015460ff1615610a19576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b60405173ffffffffffffffffffffffffffffffffffffffff83811660248301526044820183905261067f91859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050610e08565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff16610b9457600083815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff86168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055610b323390565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45060016103d8565b5060006103d8565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff1615610b9457600083815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8616808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45060016103d8565b610c63610e9e565b600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b60405173ffffffffffffffffffffffffffffffffffffffff84811660248301528381166044830152606482018390526106a99186918216906323b872dd90608401610a55565b610d266109dc565b600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016811790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25833610cae565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16610e04576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82166004820152602481018390526044015b60405180910390fd5b5050565b6000610e2a73ffffffffffffffffffffffffffffffffffffffff841683610eda565b90508051600014158015610e4f575080806020019051810190610e4d91906112c1565b155b1561067f576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84166004820152602401610dfb565b60015460ff16610a19576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6060610ee883836000610eef565b9392505050565b606081471015610f2d576040517fcd786059000000000000000000000000000000000000000000000000000000008152306004820152602401610dfb565b6000808573ffffffffffffffffffffffffffffffffffffffff168486604051610f5691906112e3565b60006040518083038185875af1925050503d8060008114610f93576040519150601f19603f3d011682016040523d82523d6000602084013e610f98565b606091505b5091509150610fa8868383610fb2565b9695505050505050565b606082610fc757610fc282611041565b610ee8565b8151158015610feb575073ffffffffffffffffffffffffffffffffffffffff84163b155b1561103a576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85166004820152602401610dfb565b5080610ee8565b8051156110515780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006020828403121561109557600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610ee857600080fd5b803573ffffffffffffffffffffffffffffffffffffffff811681146110e957600080fd5b919050565b60008060008060006080868803121561110657600080fd5b61110f866110c5565b945060208601359350604086013567ffffffffffffffff81111561113257600080fd5b8601601f8101881361114357600080fd5b803567ffffffffffffffff81111561115a57600080fd5b88602082840101111561116c57600080fd5b959894975060200195606001359392505050565b60008060006060848603121561119557600080fd5b61119e846110c5565b95602085013595506040909401359392505050565b6000602082840312156111c557600080fd5b5035919050565b600080604083850312156111df57600080fd5b823591506111ef602084016110c5565b90509250929050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff8616815273ffffffffffffffffffffffffffffffffffffffff851660208201528360408201526080606082015260006112936080830184866111f8565b979650505050505050565b8381526040602082015260006112b86040830184866111f8565b95945050505050565b6000602082840312156112d357600080fd5b81518015158114610ee857600080fd5b6000825160005b8181101561130457602081860181015185830152016112ea565b50600092019182525091905056fea2646970667358221220acfa51062c59716e02e413798f47a294f807ab6bfe6bcb7c13ce0530e6e5b1b864736f6c634300081a0033", + ABI: "[{\"type\":\"constructor\",\"inputs\":[{\"name\":\"gateway_\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"zetaToken_\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"tssAddress_\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"admin_\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"DEFAULT_ADMIN_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"PAUSER_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"TSS_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"WITHDRAWER_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"gateway\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIGatewayEVM\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getRoleAdmin\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"grantRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"hasRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"pause\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"paused\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"receiveTokens\",\"inputs\":[{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"renounceRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"callerConfirmation\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"revokeRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"supportsInterface\",\"inputs\":[{\"name\":\"interfaceId\",\"type\":\"bytes4\",\"internalType\":\"bytes4\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"unpause\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"withdraw\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"internalSendHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"withdrawAndCall\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"internalSendHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"withdrawAndRevert\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"internalSendHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"zetaToken\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"event\",\"name\":\"Paused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleAdminChanged\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"previousAdminRole\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"newAdminRole\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleGranted\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleRevoked\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Unpaused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Withdraw\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"WithdrawAndCall\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"WithdrawAndRevert\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"AccessControlBadConfirmation\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"AccessControlUnauthorizedAccount\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"neededRole\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"type\":\"error\",\"name\":\"AddressEmptyCode\",\"inputs\":[{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"AddressInsufficientBalance\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"EnforcedPause\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ExpectedPause\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"FailedInnerCall\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ReentrancyGuardReentrantCall\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"SafeERC20FailedOperation\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"ZeroAddress\",\"inputs\":[]}]", + Bin: "0x60c060405234801561001057600080fd5b5060405161166338038061166383398101604081905261002f9161021a565b60016000819055805460ff19169055838383836001600160a01b038416158061005f57506001600160a01b038316155b8061007157506001600160a01b038216155b8061008357506001600160a01b038116155b156100a15760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b03808516608052831660a0526100bf60008261014e565b506100ea7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e48361014e565b506101157f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb8361014e565b506101407f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a8261014e565b50505050505050505061026e565b60008281526002602090815260408083206001600160a01b038516845290915281205460ff166101f45760008381526002602090815260408083206001600160a01b03861684529091529020805460ff191660011790556101ac3390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45060016101f8565b5060005b92915050565b80516001600160a01b038116811461021557600080fd5b919050565b6000806000806080858703121561023057600080fd5b610239856101fe565b9350610247602086016101fe565b9250610255604086016101fe565b9150610263606086016101fe565b905092959194509250565b60805160a05161138a6102d9600039600081816101f701528181610474015281816105250152818161063f015281816107d30152818161088401526109520152600081816101ab01528181610496015281816104f8015281816107f50152610857015261138a6000f3fe608060405234801561001057600080fd5b50600436106101515760003560e01c80635c975abb116100cd57806391d1485411610081578063a783c78911610066578063a783c78914610326578063d547741f1461034d578063e63ab1e91461036057600080fd5b806391d14854146102d8578063a217fddf1461031e57600080fd5b8063743e0c9b116100b2578063743e0c9b146102965780638456cb59146102a957806385f438c1146102b157600080fd5b80635c975abb146102785780635e3e9fef1461028357600080fd5b806321e093b1116101245780632f2ff15d116101095780632f2ff15d1461024a57806336568abe1461025d5780633f4ba83a1461027057600080fd5b806321e093b1146101f2578063248a9ca31461021957600080fd5b806301ffc9a71461015657806302d5c8991461017e578063106e629014610193578063116191b6146101a6575b600080fd5b6101696101643660046110c5565b610387565b60405190151581526020015b60405180910390f35b61019161018c366004611130565b610420565b005b6101916101a13660046111c2565b6105eb565b6101cd7f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610175565b6101cd7f000000000000000000000000000000000000000000000000000000000000000081565b61023c6102273660046111f5565b60009081526002602052604090206001015490565b604051908152602001610175565b61019161025836600461120e565b6106c6565b61019161026b36600461120e565b6106f1565b61019161074a565b60015460ff16610169565b610191610291366004611130565b61077f565b6101916102a43660046111f5565b610930565b61019161097a565b61023c7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b6101696102e636600461120e565b600091825260026020908152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b61023c600081565b61023c7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb81565b61019161035b36600461120e565b6109ac565b61023c7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061041a57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b6104286109d1565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461045281610a14565b61045a610a1e565b6104bb73ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000167f000000000000000000000000000000000000000000000000000000000000000087610a5d565b6040517fb8969bd400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063b8969bd490610555907f0000000000000000000000000000000000000000000000000000000000000000908a908a908a908a90600401611283565b600060405180830381600087803b15801561056f57600080fd5b505af1158015610583573d6000803e3d6000fd5b505050508573ffffffffffffffffffffffffffffffffffffffff167fba96f26bdda53eb8c8ba39045dfb4ff39753fbc7a6edcf250a88e75e78d102fe8686866040516105d1939291906112e0565b60405180910390a2506105e46001600055565b5050505050565b6105f36109d1565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461061d81610a14565b610625610a1e565b61066673ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168585610a5d565b8373ffffffffffffffffffffffffffffffffffffffff167f884edad9ce6fa2440d8a54cc123490eb96d2768479d49ff9c7366125a9424364846040516106ae91815260200190565b60405180910390a2506106c16001600055565b505050565b6000828152600260205260409020600101546106e181610a14565b6106eb8383610ade565b50505050565b73ffffffffffffffffffffffffffffffffffffffff81163314610740576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6106c18282610bde565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61077481610a14565b61077c610c9d565b50565b6107876109d1565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e46107b181610a14565b6107b9610a1e565b61081a73ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000167f000000000000000000000000000000000000000000000000000000000000000087610a5d565b6040517f5131ab5900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690635131ab59906108b4907f0000000000000000000000000000000000000000000000000000000000000000908a908a908a908a90600401611283565b600060405180830381600087803b1580156108ce57600080fd5b505af11580156108e2573d6000803e3d6000fd5b505050508573ffffffffffffffffffffffffffffffffffffffff167f7772f56296d3a5202974a45c61c9188d844ab4d6eeb18c851e4b8d5384ca6ced8686866040516105d1939291906112e0565b610938610a1e565b61077c73ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016333084610d1a565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a6109a481610a14565b61077c610d60565b6000828152600260205260409020600101546109c781610a14565b6106eb8383610bde565b600260005403610a0d576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b61077c8133610db9565b60015460ff1615610a5b576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b60405173ffffffffffffffffffffffffffffffffffffffff8381166024830152604482018390526106c191859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050610e4a565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff16610bd657600083815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff86168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055610b743390565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a450600161041a565b50600061041a565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff1615610bd657600083815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8616808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a450600161041a565b610ca5610ee0565b600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b60405173ffffffffffffffffffffffffffffffffffffffff84811660248301528381166044830152606482018390526106eb9186918216906323b872dd90608401610a97565b610d68610a1e565b600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016811790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25833610cf0565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16610e46576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82166004820152602481018390526044015b60405180910390fd5b5050565b6000610e6c73ffffffffffffffffffffffffffffffffffffffff841683610f1c565b90508051600014158015610e91575080806020019051810190610e8f9190611303565b155b156106c1576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84166004820152602401610e3d565b60015460ff16610a5b576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6060610f2a83836000610f31565b9392505050565b606081471015610f6f576040517fcd786059000000000000000000000000000000000000000000000000000000008152306004820152602401610e3d565b6000808573ffffffffffffffffffffffffffffffffffffffff168486604051610f989190611325565b60006040518083038185875af1925050503d8060008114610fd5576040519150601f19603f3d011682016040523d82523d6000602084013e610fda565b606091505b5091509150610fea868383610ff4565b9695505050505050565b6060826110095761100482611083565b610f2a565b815115801561102d575073ffffffffffffffffffffffffffffffffffffffff84163b155b1561107c576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85166004820152602401610e3d565b5080610f2a565b8051156110935780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000602082840312156110d757600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610f2a57600080fd5b803573ffffffffffffffffffffffffffffffffffffffff8116811461112b57600080fd5b919050565b60008060008060006080868803121561114857600080fd5b61115186611107565b945060208601359350604086013567ffffffffffffffff81111561117457600080fd5b8601601f8101881361118557600080fd5b803567ffffffffffffffff81111561119c57600080fd5b8860208284010111156111ae57600080fd5b959894975060200195606001359392505050565b6000806000606084860312156111d757600080fd5b6111e084611107565b95602085013595506040909401359392505050565b60006020828403121561120757600080fd5b5035919050565b6000806040838503121561122157600080fd5b8235915061123160208401611107565b90509250929050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff8616815273ffffffffffffffffffffffffffffffffffffffff851660208201528360408201526080606082015260006112d560808301848661123a565b979650505050505050565b8381526040602082015260006112fa60408301848661123a565b95945050505050565b60006020828403121561131557600080fd5b81518015158114610f2a57600080fd5b6000825160005b81811015611346576020818601810151858301520161132c565b50600092019182525091905056fea2646970667358221220b04453dff0090afb8a475e5970db3acd2d95039b4c5a72b1afb3fdac6383a65d64736f6c634300081a0033", } // ZetaConnectorNativeABI is the input ABI used to generate the binding from. @@ -264,6 +264,37 @@ func (_ZetaConnectorNative *ZetaConnectorNativeCallerSession) PAUSERROLE() ([32] return _ZetaConnectorNative.Contract.PAUSERROLE(&_ZetaConnectorNative.CallOpts) } +// TSSROLE is a free data retrieval call binding the contract method 0xa783c789. +// +// Solidity: function TSS_ROLE() view returns(bytes32) +func (_ZetaConnectorNative *ZetaConnectorNativeCaller) TSSROLE(opts *bind.CallOpts) ([32]byte, error) { + var out []interface{} + err := _ZetaConnectorNative.contract.Call(opts, &out, "TSS_ROLE") + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// TSSROLE is a free data retrieval call binding the contract method 0xa783c789. +// +// Solidity: function TSS_ROLE() view returns(bytes32) +func (_ZetaConnectorNative *ZetaConnectorNativeSession) TSSROLE() ([32]byte, error) { + return _ZetaConnectorNative.Contract.TSSROLE(&_ZetaConnectorNative.CallOpts) +} + +// TSSROLE is a free data retrieval call binding the contract method 0xa783c789. +// +// Solidity: function TSS_ROLE() view returns(bytes32) +func (_ZetaConnectorNative *ZetaConnectorNativeCallerSession) TSSROLE() ([32]byte, error) { + return _ZetaConnectorNative.Contract.TSSROLE(&_ZetaConnectorNative.CallOpts) +} + // WITHDRAWERROLE is a free data retrieval call binding the contract method 0x85f438c1. // // Solidity: function WITHDRAWER_ROLE() view returns(bytes32) diff --git a/v2/pkg/zetaconnectornative.t.sol/zetaconnectornativetest.go b/v2/pkg/zetaconnectornative.t.sol/zetaconnectornativetest.go index 50b8693a..245ec5d6 100644 --- a/v2/pkg/zetaconnectornative.t.sol/zetaconnectornativetest.go +++ b/v2/pkg/zetaconnectornative.t.sol/zetaconnectornativetest.go @@ -49,8 +49,8 @@ type StdInvariantFuzzSelector struct { // ZetaConnectorNativeTestMetaData contains all meta data concerning the ZetaConnectorNativeTest contract. var ZetaConnectorNativeTestMetaData = &bind.MetaData{ - ABI: "[{\"type\":\"function\",\"name\":\"IS_TEST\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"WITHDRAWER_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeArtifacts\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedArtifacts_\",\"type\":\"string[]\",\"internalType\":\"string[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeContracts\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedContracts_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeSelectors\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedSelectors_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzSelector[]\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"selectors\",\"type\":\"bytes4[]\",\"internalType\":\"bytes4[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeSenders\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedSenders_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"failed\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"setUp\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"targetArtifactSelectors\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedArtifactSelectors_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzArtifactSelector[]\",\"components\":[{\"name\":\"artifact\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"selectors\",\"type\":\"bytes4[]\",\"internalType\":\"bytes4[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetArtifacts\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedArtifacts_\",\"type\":\"string[]\",\"internalType\":\"string[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetContracts\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedContracts_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetInterfaces\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedInterfaces_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzInterface[]\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"artifacts\",\"type\":\"string[]\",\"internalType\":\"string[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetSelectors\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedSelectors_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzSelector[]\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"selectors\",\"type\":\"bytes4[]\",\"internalType\":\"bytes4[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetSenders\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedSenders_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"testWithdraw\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawAndCallReceiveERC20\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawAndCallReceiveERC20FailsIfSenderIsNotWithdrawer\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawAndCallReceiveERC20Partial\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawAndCallReceiveNoParams\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawAndRevert\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawAndRevertFailsIfSenderIsNotWithdrawer\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawFailsIfSenderIsNotWithdrawer\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"event\",\"name\":\"Call\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"receiver\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Deposit\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"receiver\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"asset\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Executed\",\"inputs\":[{\"name\":\"destination\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ExecutedWithERC20\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedERC20\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"token\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"destination\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedNoParams\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedNonPayable\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"strs\",\"type\":\"string[]\",\"indexed\":false,\"internalType\":\"string[]\"},{\"name\":\"nums\",\"type\":\"uint256[]\",\"indexed\":false,\"internalType\":\"uint256[]\"},{\"name\":\"flag\",\"type\":\"bool\",\"indexed\":false,\"internalType\":\"bool\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedPayable\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"str\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"num\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"flag\",\"type\":\"bool\",\"indexed\":false,\"internalType\":\"bool\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedRevert\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Reverted\",\"inputs\":[{\"name\":\"destination\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RevertedWithERC20\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Withdraw\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"WithdrawAndCall\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"WithdrawAndRevert\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log\",\"inputs\":[{\"name\":\"\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_address\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_array\",\"inputs\":[{\"name\":\"val\",\"type\":\"uint256[]\",\"indexed\":false,\"internalType\":\"uint256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_array\",\"inputs\":[{\"name\":\"val\",\"type\":\"int256[]\",\"indexed\":false,\"internalType\":\"int256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_array\",\"inputs\":[{\"name\":\"val\",\"type\":\"address[]\",\"indexed\":false,\"internalType\":\"address[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_bytes\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_bytes32\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_int\",\"inputs\":[{\"name\":\"\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_address\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_array\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"uint256[]\",\"indexed\":false,\"internalType\":\"uint256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_array\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"int256[]\",\"indexed\":false,\"internalType\":\"int256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_array\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"address[]\",\"indexed\":false,\"internalType\":\"address[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_bytes\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_bytes32\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_decimal_int\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"},{\"name\":\"decimals\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_decimal_uint\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"decimals\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_int\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_string\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_uint\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_string\",\"inputs\":[{\"name\":\"\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_uint\",\"inputs\":[{\"name\":\"\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"logs\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"AccessControlUnauthorizedAccount\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"neededRole\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"type\":\"error\",\"name\":\"ApprovalFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"CustodyInitialized\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"DepositFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ExecutionFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientERC20Amount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientETHAmount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZeroAddress\",\"inputs\":[]}]", - Bin: "0x6080604052600c8054600160ff199182168117909255601f80549091169091179055348015602c57600080fd5b5061d6388061003c6000396000f3fe608060405234801561001057600080fd5b50600436106101825760003560e01c8063916a17c6116100d8578063d509b16c1161008c578063e20c9f7111610066578063e20c9f71146102a8578063fa7626d4146102b0578063fe574f84146102bd57600080fd5b8063d509b16c14610290578063dcf7d03714610298578063de1cb76c146102a057600080fd5b8063b5508aa9116100bd578063b5508aa914610268578063ba414fa614610270578063c19099721461028857600080fd5b8063916a17c61461024b578063b0464fdc1461026057600080fd5b80633f7286f41161013a578063828320141161011457806382832014146101f957806385226c811461020157806385f438c11461021657600080fd5b80633f7286f4146101d457806349346558146101dc57806366d9a9a0146101e457600080fd5b80632ade38801161016b5780632ade3880146101af5780633cba0107146101c45780633e5e3c23146101cc57600080fd5b80630a9254e4146101875780631ed7831c14610191575b600080fd5b61018f6102c5565b005b610199610a2b565b6040516101a69190617b71565b60405180910390f35b6101b7610a8d565b6040516101a69190617c0d565b61018f610bcf565b6101996113a2565b610199611402565b61018f611462565b6101ec611abe565b6040516101a69190617d73565b61018f611c40565b610209611eb2565b6040516101a69190617e11565b61023d7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b6040519081526020016101a6565b610253611f82565b6040516101a69190617e88565b61025361207d565b610209612178565b610278612248565b60405190151581526020016101a6565b61018f61231c565b61018f6125a0565b61018f6129b6565b61018f613076565b6101996136dc565b601f546102789060ff1681565b61018f61373c565b602580547fffffffffffffffffffffffff000000000000000000000000000000000000000090811630179091556026805482166112341790556027805490911661567817905560405161031790617a84565b604080825260049082018190527f7a6574610000000000000000000000000000000000000000000000000000000060608301526080602083018190528201527f5a4554410000000000000000000000000000000000000000000000000000000060a082015260c001604051809103906000f08015801561039b573d6000803e3d6000fd5b50602480547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039283169081178255604080518082018252600e81527f4761746577617945564d2e736f6c00000000000000000000000000000000000060208201526027546025549251908616948101949094526044840192909252909216606482015261048c919060840160408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fc0c53b8b00000000000000000000000000000000000000000000000000000000179052613973565b601f80547fffffffffffffffffffffff0000000000000000000000000000000000000000ff166101006001600160a01b0393841681029190911791829055602080549190920483167fffffffffffffffffffffffff0000000000000000000000000000000000000000909116811790915560275460255460405192939182169291169061051890617a91565b6001600160a01b03938416815291831660208301529091166040820152606001604051809103906000f080158015610554573d6000803e3d6000fd5b50602280547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392831617905560205460245460275460255460405193851694928316939183169216906105af90617a9e565b6001600160a01b039485168152928416602084015290831660408301529091166060820152608001604051809103906000f0801580156105f3573d6000803e3d6000fd5b50602380547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039290921691909117905560405161063890617aab565b604051809103906000f080158015610654573d6000803e3d6000fd5b50602180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039283161790556027546040517fc88a5e6d00000000000000000000000000000000000000000000000000000000815291166004820152670de0b6b3a76400006024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c88a5e6d90604401600060405180830381600087803b15801561070057600080fd5b505af1158015610714573d6000803e3d6000fd5b50506025546040517f06447d560000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506306447d569150602401600060405180830381600087803b15801561078a57600080fd5b505af115801561079e573d6000803e3d6000fd5b50506020546022546040517fae7a3a6f0000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201529116925063ae7a3a6f9150602401600060405180830381600087803b15801561080457600080fd5b505af1158015610818573d6000803e3d6000fd5b50506020546023546040517f10188aef0000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152911692506310188aef9150602401600060405180830381600087803b15801561087e57600080fd5b505af1158015610892573d6000803e3d6000fd5b505050507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b03166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156108f457600080fd5b505af1158015610908573d6000803e3d6000fd5b5050602480546023546040517f40c10f190000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152624c4b40938101939093521692506340c10f199150604401600060405180830381600087803b15801561097957600080fd5b505af115801561098d573d6000803e3d6000fd5b50506027546040517fc88a5e6d0000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152670de0b6b3a76400006024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c88a5e6d9150604401600060405180830381600087803b158015610a1157600080fd5b505af1158015610a25573d6000803e3d6000fd5b50505050565b60606016805480602002602001604051908101604052809291908181526020018280548015610a8357602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610a65575b5050505050905090565b6060601e805480602002602001604051908101604052809291908181526020016000905b82821015610bc657600084815260208082206040805180820182526002870290920180546001600160a01b03168352600181018054835181870281018701909452808452939591948681019491929084015b82821015610baf578382906000526020600020018054610b2290617f1f565b80601f0160208091040260200160405190810160405280929190818152602001828054610b4e90617f1f565b8015610b9b5780601f10610b7057610100808354040283529160200191610b9b565b820191906000526020600020905b815481529060010190602001808311610b7e57829003601f168201915b505050505081526020019060010190610b03565b505050508152505081526020019060010190610ab1565b50505050905090565b60248054602654604051620186a09381018490526001600160a01b03928316604482015291166064820152600090819060840160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f357fc5a2000000000000000000000000000000000000000000000000000000001790526024805460265492516370a0823160e01b81526001600160a01b0393841660048201529394506000939216916370a082319101602060405180830381865afa158015610caa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cce9190617f6c565b9050610cdb816000613992565b602480546023546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa158015610d2b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d4f9190617f6c565b6020546040516001600160a01b0390911660248201526044810187905290915060009060640160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb0000000000000000000000000000000000000000000000000000000017905260245490517ff30c7ba3000000000000000000000000000000000000000000000000000000008152919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f30c7ba391610e32916001600160a01b0391909116906000908690600401617f85565b600060405180830381600087803b158015610e4c57600080fd5b505af1158015610e60573d6000803e3d6000fd5b50506021546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b158015610ef257600080fd5b505af1158015610f06573d6000803e3d6000fd5b505060208054602454602654604080516001600160a01b0394851681529485018d905291831684830152919091166060830152517f2b58128f24a9f59127cc5b5430d70542b22220f2d9adaa86e442b816ab98af609350908190036080019150a16023546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b158015610ff557600080fd5b505af1158015611009573d6000803e3d6000fd5b50506021546040516001600160a01b0390911692507f7772f56296d3a5202974a45c61c9188d844ab4d6eeb18c851e4b8d5384ca6ced915061104e9089908890617fad565b60405180910390a26027546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156110c857600080fd5b505af11580156110dc573d6000803e3d6000fd5b50506023546021546040517f5e3e9fef0000000000000000000000000000000000000000000000000000000081526001600160a01b039283169450635e3e9fef935061113492909116908a9089908b90600401617fc6565b600060405180830381600087803b15801561114e57600080fd5b505af1158015611162573d6000803e3d6000fd5b5050602480546026546040516370a0823160e01b81526001600160a01b03918216600482015260009550911692506370a0823191015b602060405180830381865afa1580156111b5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111d99190617f6c565b90506111e58188613992565b602480546023546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa158015611235573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112599190617f6c565b905061126e816112698a8761802e565b613992565b602480546020546021546040517fdd62ed3e0000000000000000000000000000000000000000000000000000000081526001600160a01b0392831660048201529082169381019390935260009291169063dd62ed3e90604401602060405180830381865afa1580156112e4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113089190617f6c565b9050611315816000613992565b602480546020546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa158015611365573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113899190617f6c565b9050611396816000613992565b50505050505050505050565b60606018805480602002602001604051908101604052809291908181526020018280548015610a83576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311610a65575050505050905090565b60606017805480602002602001604051908101604052809291908181526020018280548015610a83576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311610a65575050505050905090565b604080516004808252602480830184526020830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f6ed70169000000000000000000000000000000000000000000000000000000001790525460265493516370a0823160e01b8152620186a0946000949385936001600160a01b03908116936370a082319361150393921691016001600160a01b0391909116815260200190565b602060405180830381865afa158015611520573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115449190617f6c565b9050611551816000613992565b602480546023546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa1580156115a1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115c59190617f6c565b6020546040516001600160a01b0390911660248201526044810187905290915060009060640160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb0000000000000000000000000000000000000000000000000000000017905260245490517ff30c7ba3000000000000000000000000000000000000000000000000000000008152919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f30c7ba3916116a8916001600160a01b0391909116906000908690600401617f85565b600060405180830381600087803b1580156116c257600080fd5b505af11580156116d6573d6000803e3d6000fd5b50506021546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b15801561176857600080fd5b505af115801561177c573d6000803e3d6000fd5b5050602080546040516001600160a01b0390911681527fbcaadb46b82a48af60b608f58959ae6b8310d1b0a0d094c2e9ec3208ed39f2a0935001905060405180910390a16023546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b15801561184e57600080fd5b505af1158015611862573d6000803e3d6000fd5b50506021546040516001600160a01b0390911692507f7772f56296d3a5202974a45c61c9188d844ab4d6eeb18c851e4b8d5384ca6ced91506118a79089908890617fad565b60405180910390a26027546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561192157600080fd5b505af1158015611935573d6000803e3d6000fd5b50506023546021546040517f5e3e9fef0000000000000000000000000000000000000000000000000000000081526001600160a01b039283169450635e3e9fef935061198d92909116908a9089908b90600401617fc6565b600060405180830381600087803b1580156119a757600080fd5b505af11580156119bb573d6000803e3d6000fd5b5050602480546026546040516370a0823160e01b81526001600160a01b03918216600482015260009550911692506370a082319101602060405180830381865afa158015611a0d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a319190617f6c565b9050611a3e816000613992565b602480546023546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa158015611a8e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ab29190617f6c565b905061126e8185613992565b6060601b805480602002602001604051908101604052809291908181526020016000905b82821015610bc65783829060005260206000209060020201604051806040016040529081600082018054611b1590617f1f565b80601f0160208091040260200160405190810160405280929190818152602001828054611b4190617f1f565b8015611b8e5780601f10611b6357610100808354040283529160200191611b8e565b820191906000526020600020905b815481529060010190602001808311611b7157829003601f168201915b5050505050815260200160018201805480602002602001604051908101604052809291908181526020018280548015611c2857602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019060040190602082600301049283019260010382029150808411611bd55790505b50505050508152505081526020019060010190611ae2565b6040517f68656c6c6f0000000000000000000000000000000000000000000000000000006020820152620186a090600090819060250160408051808303601f19018152908290526025547fca669fa70000000000000000000000000000000000000000000000000000000083526001600160a01b031660048301529150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015611cf657600080fd5b505af1158015611d0a573d6000803e3d6000fd5b5050602554604080516001600160a01b0390921660248301527f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e460448084019190915281518084039091018152606490920181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb39250611df59190600401618041565b600060405180830381600087803b158015611e0f57600080fd5b505af1158015611e23573d6000803e3d6000fd5b50506023546021546040517f02d5c8990000000000000000000000000000000000000000000000000000000081526001600160a01b0392831694506302d5c8999350611e7b9290911690879086908890600401617fc6565b600060405180830381600087803b158015611e9557600080fd5b505af1158015611ea9573d6000803e3d6000fd5b50505050505050565b6060601a805480602002602001604051908101604052809291908181526020016000905b82821015610bc6578382906000526020600020018054611ef590617f1f565b80601f0160208091040260200160405190810160405280929190818152602001828054611f2190617f1f565b8015611f6e5780601f10611f4357610100808354040283529160200191611f6e565b820191906000526020600020905b815481529060010190602001808311611f5157829003601f168201915b505050505081526020019060010190611ed6565b6060601d805480602002602001604051908101604052809291908181526020016000905b82821015610bc65760008481526020908190206040805180820182526002860290920180546001600160a01b0316835260018101805483518187028101870190945280845293949193858301939283018282801561206557602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190600401906020826003010492830192600103820291508084116120125790505b50505050508152505081526020019060010190611fa6565b6060601c805480602002602001604051908101604052809291908181526020016000905b82821015610bc65760008481526020908190206040805180820182526002860290920180546001600160a01b0316835260018101805483518187028101870190945280845293949193858301939283018282801561216057602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168152602001906004019060208260030104928301926001038202915080841161210d5790505b505050505081525050815260200190600101906120a1565b60606019805480602002602001604051908101604052809291908181526020016000905b82821015610bc65783829060005260206000200180546121bb90617f1f565b80601f01602080910402602001604051908101604052809291908181526020018280546121e790617f1f565b80156122345780601f1061220957610100808354040283529160200191612234565b820191906000526020600020905b81548152906001019060200180831161221757829003601f168201915b50505050508152602001906001019061219c565b60085460009060ff1615612260575060085460ff1690565b6040517f667f9d70000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d600482018190527f6661696c65640000000000000000000000000000000000000000000000000000602483015260009163667f9d7090604401602060405180830381865afa1580156122f1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123159190617f6c565b1415905090565b60248054602654604051620186a09381018490526001600160a01b03928316604482015291166064820152600090819060840160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f357fc5a20000000000000000000000000000000000000000000000000000000017905260255490517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561241b57600080fd5b505af115801561242f573d6000803e3d6000fd5b5050602554604080516001600160a01b0390921660248301527f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e460448084019190915281518084039091018152606490920181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb3925061251a9190600401618041565b600060405180830381600087803b15801561253457600080fd5b505af1158015612548573d6000803e3d6000fd5b50506023546021546040517f5e3e9fef0000000000000000000000000000000000000000000000000000000081526001600160a01b039283169450635e3e9fef9350611e7b9290911690879086908890600401617fc6565b602480546026546040516370a0823160e01b81526001600160a01b039182166004820152620186a093600093849316916370a082319101602060405180830381865afa1580156125f4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126189190617f6c565b9050612625816000613992565b6026546040516001600160a01b0390911660248201526044810184905260009060640160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb0000000000000000000000000000000000000000000000000000000017905260245490517ff30c7ba3000000000000000000000000000000000000000000000000000000008152919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f30c7ba391612705916001600160a01b0391909116906000908690600401617f85565b600060405180830381600087803b15801561271f57600080fd5b505af1158015612733573d6000803e3d6000fd5b50506023546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b1580156127c557600080fd5b505af11580156127d9573d6000803e3d6000fd5b50506026546040518781526001600160a01b0390911692507f884edad9ce6fa2440d8a54cc123490eb96d2768479d49ff9c7366125a9424364915060200160405180910390a26027546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561289157600080fd5b505af11580156128a5573d6000803e3d6000fd5b50506023546026546040517f106e62900000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260248101899052604481018890529116925063106e62909150606401600060405180830381600087803b15801561291957600080fd5b505af115801561292d573d6000803e3d6000fd5b5050602480546026546040516370a0823160e01b81526001600160a01b03918216600482015260009550911692506370a082319101602060405180830381865afa15801561297f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129a39190617f6c565b90506129af8186613992565b5050505050565b60248054602654604051620186a09381018490526001600160a01b03928316604482015291166064820152600090819060840160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fc5131691000000000000000000000000000000000000000000000000000000001790526024805460265492516370a0823160e01b81526001600160a01b0393841660048201529394506000939216916370a082319101602060405180830381865afa158015612a91573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ab59190617f6c565b9050612ac2816000613992565b602480546023546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa158015612b12573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b369190617f6c565b6020546040516001600160a01b0390911660248201526044810187905290915060009060640160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb0000000000000000000000000000000000000000000000000000000017905260245490517ff30c7ba3000000000000000000000000000000000000000000000000000000008152919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f30c7ba391612c19916001600160a01b0391909116906000908690600401617f85565b600060405180830381600087803b158015612c3357600080fd5b505af1158015612c47573d6000803e3d6000fd5b50506021546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b158015612cd957600080fd5b505af1158015612ced573d6000803e3d6000fd5b50506020547f2b58128f24a9f59127cc5b5430d70542b22220f2d9adaa86e442b816ab98af6092506001600160a01b03169050612d2b600289618054565b602454602654604080516001600160a01b03958616815260208101949094529184168383015292909216606082015290519081900360800190a16023546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b158015612df357600080fd5b505af1158015612e07573d6000803e3d6000fd5b50506021546040516001600160a01b0390911692507f7772f56296d3a5202974a45c61c9188d844ab4d6eeb18c851e4b8d5384ca6ced9150612e4c9089908890617fad565b60405180910390a26027546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015612ec657600080fd5b505af1158015612eda573d6000803e3d6000fd5b50506023546021546040517f5e3e9fef0000000000000000000000000000000000000000000000000000000081526001600160a01b039283169450635e3e9fef9350612f3292909116908a9089908b90600401617fc6565b600060405180830381600087803b158015612f4c57600080fd5b505af1158015612f60573d6000803e3d6000fd5b5050602480546026546040516370a0823160e01b81526001600160a01b03918216600482015260009550911692506370a082319101602060405180830381865afa158015612fb2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612fd69190617f6c565b9050612fe78161126960028a618054565b602480546023546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa158015613037573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061305b9190617f6c565b905061126e8161306c60028b618054565b611269908761802e565b6040517f68656c6c6f0000000000000000000000000000000000000000000000000000006020820152620186a090600090819060250160408051808303601f1901815290829052602480546021546370a0823160e01b85526001600160a01b0390811660048601529294506000939216916370a082319101602060405180830381865afa15801561310b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061312f9190617f6c565b905061313c816000613992565b602480546023546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa15801561318c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131b09190617f6c565b6020546040516001600160a01b0390911660248201526044810187905290915060009060640160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb0000000000000000000000000000000000000000000000000000000017905260245490517ff30c7ba3000000000000000000000000000000000000000000000000000000008152919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f30c7ba391613293916001600160a01b0391909116906000908690600401617f85565b600060405180830381600087803b1580156132ad57600080fd5b505af11580156132c1573d6000803e3d6000fd5b50506021546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b15801561335357600080fd5b505af1158015613367573d6000803e3d6000fd5b50506020546040517f0d3f65f00e631663aa85c96330b5c7a83bb29af3630c0063776f985edc3037aa93506133aa92506001600160a01b0390911690879061808f565b60405180910390a16020546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b15801561344057600080fd5b505af1158015613454573d6000803e3d6000fd5b50506021546024546040516001600160a01b039283169450911691507f723fc7be2448075379e4fdf1e6bf5fead954d2668d2da05dcb44ccfec4beeda79061349f908a908990617fad565b60405180910390a36023546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b15801561353557600080fd5b505af1158015613549573d6000803e3d6000fd5b50506021546040516001600160a01b0390911692507fba96f26bdda53eb8c8ba39045dfb4ff39753fbc7a6edcf250a88e75e78d102fe915061358e9089908890617fad565b60405180910390a26027546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561360857600080fd5b505af115801561361c573d6000803e3d6000fd5b50506023546021546040517f02d5c8990000000000000000000000000000000000000000000000000000000081526001600160a01b0392831694506302d5c899935061367492909116908a9089908b90600401617fc6565b600060405180830381600087803b15801561368e57600080fd5b505af11580156136a2573d6000803e3d6000fd5b5050602480546021546040516370a0823160e01b81526001600160a01b03918216600482015260009550911692506370a082319101611198565b60606015805480602002602001604051908101604052809291908181526020018280548015610a83576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311610a65575050505050905090565b6025546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152620186a090600090737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156137b657600080fd5b505af11580156137ca573d6000803e3d6000fd5b5050602554604080516001600160a01b0390921660248301527f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e460448084019190915281518084039091018152606490920181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb392506138b59190600401618041565b600060405180830381600087803b1580156138cf57600080fd5b505af11580156138e3573d6000803e3d6000fd5b50506023546026546040517f106e62900000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260248101879052604481018690529116925063106e62909150606401600060405180830381600087803b15801561395757600080fd5b505af115801561396b573d6000803e3d6000fd5b505050505050565b600061397d617ab8565b613988848483613a11565b9150505b92915050565b6040517f98296c540000000000000000000000000000000000000000000000000000000081526004810183905260248101829052737109709ecfa91a80626ff3989d68f67f5b1dd12d906398296c549060440160006040518083038186803b1580156139fd57600080fd5b505afa15801561396b573d6000803e3d6000fd5b600080613a1e8584613a8c565b9050613a816040518060400160405280601d81526020017f4552433139363750726f78792e736f6c3a4552433139363750726f78790000008152508286604051602001613a6c92919061808f565b60405160208183030381529060405285613a98565b9150505b9392505050565b6000613a858383613ac6565b60c08101515160009015613abc57613ab584848460c00151613ae1565b9050613a85565b613ab58484613c87565b6000613ad28383613d72565b613a8583836020015184613a98565b600080613aec613d82565b90506000613afa8683613e55565b90506000613b1182606001518360200151856142fb565b90506000613b218383898961450d565b90506000613b2e8261538a565b602081015181519192509060030b15613ba157898260400151604051602001613b589291906180b1565b60408051601f19818403018152908290527f08c379a0000000000000000000000000000000000000000000000000000000008252613b9891600401618041565b60405180910390fd5b6000613be46040518060400160405280601581526020017f4465706c6f79656420746f20616464726573733a200000000000000000000000815250836001615559565b6040517fc6ce059d000000000000000000000000000000000000000000000000000000008152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c6ce059d90613c37908490600401618041565b602060405180830381865afa158015613c54573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613c789190618132565b9b9a5050505050505050505050565b6040517f8d1cc9250000000000000000000000000000000000000000000000000000000081526000908190737109709ecfa91a80626ff3989d68f67f5b1dd12d90638d1cc92590613cdc908790600401618041565b600060405180830381865afa158015613cf9573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052613d219190810190618243565b90506000613d4f8285604051602001613d3b929190618278565b604051602081830303815290604052615759565b90506001600160a01b038116613988578484604051602001613b589291906182a7565b613d7e8282600061576c565b5050565b604080518082018252600381527f6f75740000000000000000000000000000000000000000000000000000000000602082015290517fd145736c000000000000000000000000000000000000000000000000000000008152606091737109709ecfa91a80626ff3989d68f67f5b1dd12d91829063d145736c90613e09908490600401618352565b600060405180830381865afa158015613e26573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052613e4e9190810190618399565b9250505090565b613e876040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b6000737109709ecfa91a80626ff3989d68f67f5b1dd12d9050613ed26040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b613edb8561586f565b60208201526000613eeb86615c54565b90506000836001600160a01b031663d930a0e66040518163ffffffff1660e01b8152600401600060405180830381865afa158015613f2d573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052613f559190810190618399565b86838560200151604051602001613f6f94939291906183e2565b60408051601f19818403018152908290527f60f9bb1100000000000000000000000000000000000000000000000000000000825291506000906001600160a01b038616906360f9bb1190613fc7908590600401618041565b600060405180830381865afa158015613fe4573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261400c9190810190618399565b6040517fdb4235f60000000000000000000000000000000000000000000000000000000081529091506001600160a01b0386169063db4235f6906140549084906004016184e6565b602060405180830381865afa158015614071573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906140959190618538565b6140aa5781604051602001613b58919061855a565b6040517f49c4fac80000000000000000000000000000000000000000000000000000000081526001600160a01b038616906349c4fac8906140ef9084906004016185ec565b600060405180830381865afa15801561410c573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526141349190810190618399565b84526040517fdb4235f60000000000000000000000000000000000000000000000000000000081526001600160a01b0386169063db4235f69061417b90849060040161863e565b602060405180830381865afa158015614198573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906141bc9190618538565b15614251576040517f49c4fac80000000000000000000000000000000000000000000000000000000081526001600160a01b038616906349c4fac89061420690849060040161863e565b600060405180830381865afa158015614223573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261424b9190810190618399565b60408501525b846001600160a01b03166349c4fac88286600001516040516020016142769190618690565b6040516020818303038152906040526040518363ffffffff1660e01b81526004016142a29291906186fc565b600060405180830381865afa1580156142bf573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526142e79190810190618399565b606085015250608083015250949350505050565b60408051600480825260a0820190925260609160009190816020015b60608152602001906001900390816143175790505090506040518060400160405280600481526020017f67726570000000000000000000000000000000000000000000000000000000008152508160008151811061437757614377618721565b60200260200101819052506040518060400160405280600381526020017f2d726c0000000000000000000000000000000000000000000000000000000000815250816001815181106143cb576143cb618721565b6020026020010181905250846040516020016143e79190618750565b6040516020818303038152906040528160028151811061440957614409618721565b60200260200101819052508260405160200161442591906187bc565b6040516020818303038152906040528160038151811061444757614447618721565b6020026020010181905250600061445d8261538a565b602080820151604080518082018252600581527f2e6a736f6e00000000000000000000000000000000000000000000000000000081850190815282518084018452600080825290860152825180840190935290518252928101929092529192506144ee9060408051808201825260008082526020918201528151808301909252845182528085019082015290615ed7565b6145035785604051602001613b5891906187fd565b9695505050505050565b60a0810151604080518082018252600080825260209182015281518083019092528251808352928101910152606090737109709ecfa91a80626ff3989d68f67f5b1dd12d901561455d565b511590565b6146d157826020015115614619576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605860248201527f54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f742060448201527f62652075736564207768656e207468652060736b6970566572696679536f757260648201527f6365436f646560206f7074696f6e206973206074727565600000000000000000608482015260a401613b98565b8260c00151156146d1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605360248201527f54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f742060448201527f62652075736564207768656e207468652060736b69704c6963656e736554797060648201527f6560206f7074696f6e2069732060747275656000000000000000000000000000608482015260a401613b98565b6040805160ff8082526120008201909252600091816020015b60608152602001906001900390816146ea57905050905060006040518060400160405280600381526020017f6e707800000000000000000000000000000000000000000000000000000000008152508282806147459061888e565b935060ff168151811061475a5761475a618721565b60200260200101819052506040518060400160405280600d81526020017f302e302e312d616c7068612e37000000000000000000000000000000000000008152506040516020016147ab91906188ad565b6040516020818303038152906040528282806147c69061888e565b935060ff16815181106147db576147db618721565b60200260200101819052506040518060400160405280600681526020017f6465706c6f7900000000000000000000000000000000000000000000000000008152508282806148289061888e565b935060ff168151811061483d5761483d618721565b60200260200101819052506040518060400160405280600e81526020017f2d2d636f6e74726163744e616d6500000000000000000000000000000000000081525082828061488a9061888e565b935060ff168151811061489f5761489f618721565b602002602001018190525087602001518282806148bb9061888e565b935060ff16815181106148d0576148d0618721565b60200260200101819052506040518060400160405280600e81526020017f2d2d636f6e74726163745061746800000000000000000000000000000000000081525082828061491d9061888e565b935060ff168151811061493257614932618721565b60209081029190910101528751828261494a8161888e565b935060ff168151811061495f5761495f618721565b60200260200101819052506040518060400160405280600981526020017f2d2d636861696e496400000000000000000000000000000000000000000000008152508282806149ac9061888e565b935060ff16815181106149c1576149c1618721565b60200260200101819052506149d546615f38565b82826149e08161888e565b935060ff16815181106149f5576149f5618721565b60200260200101819052506040518060400160405280600f81526020017f2d2d6275696c64496e666f46696c650000000000000000000000000000000000815250828280614a429061888e565b935060ff1681518110614a5757614a57618721565b602002602001018190525086828280614a6f9061888e565b935060ff1681518110614a8457614a84618721565b6020908102919091010152855115614bab5760408051808201909152601581527f2d2d636f6e7374727563746f7242797465636f6465000000000000000000000060208201528282614ad58161888e565b935060ff1681518110614aea57614aea618721565b60209081029190910101526040517f71aad10d0000000000000000000000000000000000000000000000000000000081526001600160a01b038416906371aad10d90614b3a908990600401618041565b600060405180830381865afa158015614b57573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052614b7f9190810190618399565b8282614b8a8161888e565b935060ff1681518110614b9f57614b9f618721565b60200260200101819052505b846020015115614c7b5760408051808201909152601281527f2d2d766572696679536f75726365436f6465000000000000000000000000000060208201528282614bf48161888e565b935060ff1681518110614c0957614c09618721565b60200260200101819052506040518060400160405280600581526020017f66616c7365000000000000000000000000000000000000000000000000000000815250828280614c569061888e565b935060ff1681518110614c6b57614c6b618721565b6020026020010181905250614e42565b614cb36145588660a0015160408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b614d465760408051808201909152600d81527f2d2d6c6963656e7365547970650000000000000000000000000000000000000060208201528282614cf68161888e565b935060ff1681518110614d0b57614d0b618721565b60200260200101819052508460a00151604051602001614d2b9190618750565b604051602081830303815290604052828280614c569061888e565b8460c00151158015614d89575060408089015181518083018352600080825260209182015282518084019093528151835290810190820152614d8790511590565b155b15614e425760408051808201909152600d81527f2d2d6c6963656e7365547970650000000000000000000000000000000000000060208201528282614dcd8161888e565b935060ff1681518110614de257614de2618721565b6020026020010181905250614df688615fd8565b604051602001614e069190618750565b604051602081830303815290604052828280614e219061888e565b935060ff1681518110614e3657614e36618721565b60200260200101819052505b60408086015181518083018352600080825260209182015282518084019093528151835290810190820152614e7690511590565b614f0b5760408051808201909152600b81527f2d2d72656c61796572496400000000000000000000000000000000000000000060208201528282614eb98161888e565b935060ff1681518110614ece57614ece618721565b60200260200101819052508460400151828280614eea9061888e565b935060ff1681518110614eff57614eff618721565b60200260200101819052505b60608501511561502c5760408051808201909152600681527f2d2d73616c74000000000000000000000000000000000000000000000000000060208201528282614f548161888e565b935060ff1681518110614f6957614f69618721565b602090810291909101015260608501516040517fb11a19e800000000000000000000000000000000000000000000000000000000815260048101919091526001600160a01b0384169063b11a19e890602401600060405180830381865afa158015614fd8573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526150009190810190618399565b828261500b8161888e565b935060ff168151811061502057615020618721565b60200260200101819052505b60e085015151156150d35760408051808201909152600a81527f2d2d6761734c696d697400000000000000000000000000000000000000000000602082015282826150768161888e565b935060ff168151811061508b5761508b618721565b60200260200101819052506150a78560e0015160000151615f38565b82826150b28161888e565b935060ff16815181106150c7576150c7618721565b60200260200101819052505b60e0850151602001511561517d5760408051808201909152600a81527f2d2d676173507269636500000000000000000000000000000000000000000000602082015282826151208161888e565b935060ff168151811061513557615135618721565b60200260200101819052506151518560e0015160200151615f38565b828261515c8161888e565b935060ff168151811061517157615171618721565b60200260200101819052505b60e085015160400151156152275760408051808201909152600e81527f2d2d6d6178466565506572476173000000000000000000000000000000000000602082015282826151ca8161888e565b935060ff16815181106151df576151df618721565b60200260200101819052506151fb8560e0015160400151615f38565b82826152068161888e565b935060ff168151811061521b5761521b618721565b60200260200101819052505b60e085015160600151156152d15760408051808201909152601681527f2d2d6d61785072696f7269747946656550657247617300000000000000000000602082015282826152748161888e565b935060ff168151811061528957615289618721565b60200260200101819052506152a58560e0015160600151615f38565b82826152b08161888e565b935060ff16815181106152c5576152c5618721565b60200260200101819052505b60008160ff1667ffffffffffffffff8111156152ef576152ef61815b565b60405190808252806020026020018201604052801561532257816020015b606081526020019060019003908161530d5790505b50905060005b8260ff168160ff16101561537b57838160ff168151811061534b5761534b618721565b6020026020010151828260ff168151811061536857615368618721565b6020908102919091010152600101615328565b5093505050505b949350505050565b6153b16040518060600160405280600060030b815260200160608152602001606081525090565b60408051808201825260048082527f6261736800000000000000000000000000000000000000000000000000000000602083015291517fd145736c000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d92600091849163d145736c9161543791869101618918565b600060405180830381865afa158015615454573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261547c9190810190618399565b9050600061548a8683616ac7565b90506000846001600160a01b031663f45c1ce7836040518263ffffffff1660e01b81526004016154ba9190617e11565b6000604051808303816000875af11580156154d9573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052615501919081019061895f565b805190915060030b1580159061551a5750602081015151155b80156155295750604081015151155b15614503578160008151811061554157615541618721565b6020026020010151604051602001613b589190618a15565b6060600061558e8560408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6040805180820182526000808252602091820152815180830190925286518252808701908201529091506155c59082905b90616c1c565b156157225760006156428261563c846156366156088a60408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6040805180820182526000808252602091820152815180830190925282518252918201519181019190915290565b90616c43565b90616ca5565b604080518082018252600181527f0a00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201529091506156a6908290616c1c565b1561571057604080518082018252600181527f0a000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261570d905b8290616d2a565b90505b61571981616d50565b92505050613a85565b821561573b578484604051602001613b58929190618c01565b5050604080516020810190915260008152613a85565b509392505050565b6000808251602084016000f09392505050565b8160a001511561577b57505050565b6000615788848484616db9565b905060006157958261538a565b602081015181519192509060030b1580156158315750604080518082018252600781527f535543434553530000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152615831906040805180820182526000808252602091820152815180830190925284518252808501908201526155bf565b1561583e57505050505050565b6040820151511561585e578160400151604051602001613b589190618ca8565b80604051602001613b589190618d06565b606060006158a48360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600481527f2e736f6c0000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152909150615909905b8290615ed7565b1561597857604080518082018252600481527f2e736f6c0000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152613a8590615973908390617354565b616d50565b604080518082018252600181527f3a00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526159da905b82906173de565b600103615aa757604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152615a4090615706565b50604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152613a8590615973905b8390616d2a565b604080518082018252600581527f2e6a736f6e00000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152615b0690615902565b15615c3d57604080518082018252600181527f2f00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820181905284518086019095529251845283015290615b6e908390617478565b905060008160018351615b81919061802e565b81518110615b9157615b91618721565b60200260200101519050615c34615973615c076040518060400160405280600581526020017f2e6a736f6e00000000000000000000000000000000000000000000000000000081525060408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b60408051808201825260008082526020918201528151808301909252855182528086019082015290617354565b95945050505050565b82604051602001613b589190618d71565b50919050565b60606000615c898360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600481527f2e736f6c0000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152909150615ceb90615902565b15615cf957613a8581616d50565b604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152615d58906159d3565b600103615dc257604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152613a859061597390615aa0565b604080518082018252600581527f2e6a736f6e00000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152615e2190615902565b15615c3d57604080518082018252600181527f2f00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820181905284518086019095529251845283015290615e89908390617478565b9050600181511115615ec5578060028251615ea4919061802e565b81518110615eb457615eb4618721565b602002602001015192505050919050565b5082604051602001613b589190618d71565b805182516000911115615eec5750600061398c565b81518351602085015160009291615f0291618e4f565b615f0c919061802e565b905082602001518103615f2357600191505061398c565b82516020840151819020912014905092915050565b60606000615f458361751d565b600101905060008167ffffffffffffffff811115615f6557615f6561815b565b6040519080825280601f01601f191660200182016040528015615f8f576020820181803683370190505b5090508181016020015b600019017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a8504945084615f9957509392505050565b604081810151815180830183526000808252602091820181905283518085018552835181529282018383015283518085018552600a81527f554e4c4943454e5345440000000000000000000000000000000000000000000081840190815285518087018752838152840192909252845180860190955251845290830152606091616064905b82906175ff565b156160a457505060408051808201909152600481527f4e6f6e65000000000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600981527f556e6c6963656e73650000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526161039061605d565b1561614357505060408051808201909152600981527f556e6c6963656e736500000000000000000000000000000000000000000000006020820152919050565b604080518082018252600381527f4d49540000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526161a29061605d565b156161e257505060408051808201909152600381527f4d495400000000000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f47504c2d322e302d6f6e6c790000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526162419061605d565b806162a65750604080518082018252601081527f47504c2d322e302d6f722d6c6174657200000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526162a69061605d565b156162e657505060408051808201909152600981527f474e552047504c763200000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f47504c2d332e302d6f6e6c790000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526163459061605d565b806163aa5750604080518082018252601081527f47504c2d332e302d6f722d6c6174657200000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526163aa9061605d565b156163ea57505060408051808201909152600981527f474e552047504c763300000000000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4c47504c2d322e312d6f6e6c7900000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526164499061605d565b806164ae5750604080518082018252601181527f4c47504c2d322e312d6f722d6c61746572000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526164ae9061605d565b156164ee57505060408051808201909152600c81527f474e55204c47504c76322e3100000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4c47504c2d332e302d6f6e6c79000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261654d9061605d565b806165b25750604080518082018252601181527f4c47504c2d332e302d6f722d6c61746572000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526165b29061605d565b156165f257505060408051808201909152600a81527f474e55204c47504c7633000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f4253442d322d436c617573650000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526166519061605d565b1561669157505060408051808201909152600c81527f4253442d322d436c6175736500000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f4253442d332d436c617573650000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526166f09061605d565b1561673057505060408051808201909152600c81527f4253442d332d436c6175736500000000000000000000000000000000000000006020820152919050565b604080518082018252600781527f4d504c2d322e30000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261678f9061605d565b156167cf57505060408051808201909152600781527f4d504c2d322e30000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600781527f4f534c2d332e30000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261682e9061605d565b1561686e57505060408051808201909152600781527f4f534c2d332e30000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600a81527f4170616368652d322e3000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526168cd9061605d565b1561690d57505060408051808201909152600a81527f4170616368652d322e30000000000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4147504c2d332e302d6f6e6c79000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261696c9061605d565b806169d15750604080518082018252601181527f4147504c2d332e302d6f722d6c61746572000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526169d19061605d565b15616a1157505060408051808201909152600a81527f474e55204147504c7633000000000000000000000000000000000000000000006020820152919050565b604080518082018252600881527f4255534c2d312e3100000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616a709061605d565b15616ab057505060408051808201909152600781527f42534c20312e31000000000000000000000000000000000000000000000000006020820152919050565b60408084015184519151613b589290602001618e62565b60608060005b8451811015616b525781858281518110616ae957616ae9618721565b6020026020010151604051602001616b02929190618278565b604051602081830303815290604052915060018551616b21919061802e565b8114616b4a5781604051602001616b389190618fcb565b60405160208183030381529060405291505b600101616acd565b5060408051600380825260808201909252600091816020015b6060815260200190600190039081616b6b5790505090508381600081518110616b9657616b96618721565b60200260200101819052506040518060400160405280600281526020017f2d6300000000000000000000000000000000000000000000000000000000000081525081600181518110616bea57616bea618721565b60200260200101819052508181600281518110616c0957616c09618721565b6020908102919091010152949350505050565b6020808301518351835192840151600093616c3a9291849190617613565b14159392505050565b60408051808201909152600080825260208201526000616c758460000151856020015185600001518660200151617724565b9050836020015181616c87919061802e565b84518590616c9690839061802e565b90525060208401525090919050565b6040805180820190915260008082526020820152815183511015616cca57508161398c565b6020808301519084015160019114616cf15750815160208481015190840151829020919020145b8015616d2257825184518590616d0890839061802e565b9052508251602085018051616d1e908390618e4f565b9052505b509192915050565b6040805180820190915260008082526020820152616d49838383617844565b5092915050565b60606000826000015167ffffffffffffffff811115616d7157616d7161815b565b6040519080825280601f01601f191660200182016040528015616d9b576020820181803683370190505b5090506000602082019050616d4981856020015186600001516178ef565b60606000616dc5613d82565b6040805160ff808252612000820190925291925060009190816020015b6060815260200190600190039081616de257905050905060006040518060400160405280600381526020017f6e70780000000000000000000000000000000000000000000000000000000000815250828280616e3d9061888e565b935060ff1681518110616e5257616e52618721565b60200260200101819052506040518060400160405280600781526020017f5e312e33322e3300000000000000000000000000000000000000000000000000815250604051602001616ea3919061900c565b604051602081830303815290604052828280616ebe9061888e565b935060ff1681518110616ed357616ed3618721565b60200260200101819052506040518060400160405280600881526020017f76616c6964617465000000000000000000000000000000000000000000000000815250828280616f209061888e565b935060ff1681518110616f3557616f35618721565b602002602001018190525082604051602001616f5191906187bc565b604051602081830303815290604052828280616f6c9061888e565b935060ff1681518110616f8157616f81618721565b60200260200101819052506040518060400160405280600a81526020017f2d2d636f6e747261637400000000000000000000000000000000000000000000815250828280616fce9061888e565b935060ff1681518110616fe357616fe3618721565b6020026020010181905250616ff88784617969565b82826170038161888e565b935060ff168151811061701857617018618721565b6020908102919091010152855151156170c45760408051808201909152600b81527f2d2d7265666572656e63650000000000000000000000000000000000000000006020820152828261706a8161888e565b935060ff168151811061707f5761707f618721565b6020026020010181905250617098866000015184617969565b82826170a38161888e565b935060ff16815181106170b8576170b8618721565b60200260200101819052505b8560800151156171325760408051808201909152601881527f2d2d756e73616665536b697053746f72616765436865636b00000000000000006020820152828261710d8161888e565b935060ff168151811061712257617122618721565b6020026020010181905250617198565b84156171985760408051808201909152601281527f2d2d726571756972655265666572656e63650000000000000000000000000000602082015282826171778161888e565b935060ff168151811061718c5761718c618721565b60200260200101819052505b604086015151156172345760408051808201909152600d81527f2d2d756e73616665416c6c6f7700000000000000000000000000000000000000602082015282826171e28161888e565b935060ff16815181106171f7576171f7618721565b602002602001018190525085604001518282806172139061888e565b935060ff168151811061722857617228618721565b60200260200101819052505b85606001511561729e5760408051808201909152601481527f2d2d756e73616665416c6c6f7752656e616d65730000000000000000000000006020820152828261727d8161888e565b935060ff168151811061729257617292618721565b60200260200101819052505b60008160ff1667ffffffffffffffff8111156172bc576172bc61815b565b6040519080825280602002602001820160405280156172ef57816020015b60608152602001906001900390816172da5790505b50905060005b8260ff168160ff16101561734857838160ff168151811061731857617318618721565b6020026020010151828260ff168151811061733557617335618721565b60209081029190910101526001016172f5565b50979650505050505050565b604080518082019091526000808252602082015281518351101561737957508161398c565b8151835160208501516000929161738f91618e4f565b617399919061802e565b602084015190915060019082146173ba575082516020840151819020908220145b80156173d5578351855186906173d190839061802e565b9052505b50929392505050565b60008082600001516174028560000151866020015186600001518760200151617724565b61740c9190618e4f565b90505b835160208501516174209190618e4f565b8111616d49578161743081619051565b925050826000015161746785602001518361744b919061802e565b8651617457919061802e565b8386600001518760200151617724565b6174719190618e4f565b905061740f565b6060600061748684846173de565b617491906001618e4f565b67ffffffffffffffff8111156174a9576174a961815b565b6040519080825280602002602001820160405280156174dc57816020015b60608152602001906001900390816174c75790505b50905060005b8151811015615751576174f86159738686616d2a565b82828151811061750a5761750a618721565b60209081029190910101526001016174e2565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310617566577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310617592576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc1000083106175b057662386f26fc10000830492506010015b6305f5e10083106175c8576305f5e100830492506008015b61271083106175dc57612710830492506004015b606483106175ee576064830492506002015b600a831061398c5760010192915050565b600061760b83836179a9565b159392505050565b60008085841161771a57602084116176c6576000841561765e57600161763a86602061802e565b61764590600861906b565b617650906002619169565b61765a919061802e565b1990505b835181168561766d8989618e4f565b617677919061802e565b805190935082165b8181146176b1578784116176995787945050505050615382565b836176a381619175565b94505082845116905061767f565b6176bb8785618e4f565b945050505050615382565b8383206176d3858861802e565b6176dd9087618e4f565b91505b85821061771857848220808203617705576176fb8684618e4f565b9350505050615382565b61771060018461802e565b9250506176e0565b505b5092949350505050565b6000838186851161782f57602085116177de576000851561777057600161774c87602061802e565b61775790600861906b565b617762906002619169565b61776c919061802e565b1990505b845181166000876177818b8b618e4f565b61778b919061802e565b855190915083165b8281146177d0578186106177b8576177ab8b8b618e4f565b9650505050505050615382565b856177c281619051565b965050838651169050617793565b859650505050505050615382565b508383206000905b6177f0868961802e565b821161782d5785832080820361780c5783945050505050615382565b617817600185618e4f565b935050818061782590619051565b9250506177e6565b505b6178398787618e4f565b979650505050505050565b604080518082019091526000808252602082015260006178768560000151866020015186600001518760200151617724565b602080870180519186019190915251909150617892908261802e565b8352845160208601516178a59190618e4f565b81036178b457600085526178e6565b835183516178c29190618e4f565b855186906178d190839061802e565b90525083516178e09082618e4f565b60208601525b50909392505050565b602081106179275781518352617906602084618e4f565b9250617913602083618e4f565b915061792060208261802e565b90506178ef565b600019811561795657600161793d83602061802e565b61794990610100619169565b617953919061802e565b90505b9151835183169219169190911790915250565b606060006179778484613e55565b80516020808301516040519394506179919390910161918c565b60405160208183030381529060405291505092915050565b81518151600091908111156179bc575081515b6020808501519084015160005b83811015617a755782518251808214617a45576000196020871015617a24576001846179f689602061802e565b617a009190618e4f565b617a0b90600861906b565b617a16906002619169565b617a20919061802e565b1990505b8181168382168181039114617a4257975061398c9650505050505050565b50505b617a50602086618e4f565b9450617a5d602085618e4f565b93505050602081617a6e9190618e4f565b90506179c9565b508451865161450391906191e4565b610c9f8061920583390190565b61140b80619ea483390190565b6115f68061b2af83390190565b610d5e8061c8a583390190565b6040518060e00160405280606081526020016060815260200160608152602001600015158152602001600015158152602001600015158152602001617afb617b00565b905290565b60405180610100016040528060001515815260200160001515815260200160608152602001600080191681526020016060815260200160608152602001600015158152602001617afb6040518060800160405280600081526020016000815260200160008152602001600081525090565b602080825282518282018190526000918401906040840190835b81811015617bb25783516001600160a01b0316835260209384019390920191600101617b8b565b509095945050505050565b60005b83811015617bd8578181015183820152602001617bc0565b50506000910152565b60008151808452617bf9816020860160208601617bbd565b601f01601f19169290920160200192915050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015617d09577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452815180516001600160a01b03168652602090810151604082880181905281519088018190529101906060600582901b88018101919088019060005b81811015617cef577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa08a8503018352617cd9848651617be1565b6020958601959094509290920191600101617c9f565b509197505050602094850194929092019150600101617c35565b50929695505050505050565b600081518084526020840193506020830160005b82811015617d695781517fffffffff0000000000000000000000000000000000000000000000000000000016865260209586019590910190600101617d29565b5093949350505050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015617d09577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08786030184528151805160408752617ddf6040880182617be1565b9050602082015191508681036020880152617dfa8183617d15565b965050506020938401939190910190600101617d9b565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015617d09577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452617e73858351617be1565b94506020938401939190910190600101617e39565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015617d09577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc087860301845281516001600160a01b0381511686526020810151905060406020870152617f096040870182617d15565b9550506020938401939190910190600101617eb0565b600181811c90821680617f3357607f821691505b602082108103615c4e577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060208284031215617f7e57600080fd5b5051919050565b6001600160a01b0384168152826020820152606060408201526000615c346060830184617be1565b8281526040602082015260006153826040830184617be1565b6001600160a01b0385168152836020820152608060408201526000617fee6080830185617be1565b905082606083015295945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8181038181111561398c5761398c617fff565b602081526000613a856020830184617be1565b60008261808a577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b6001600160a01b03831681526040602082015260006153826040830184617be1565b7f4661696c656420746f206465706c6f7920636f6e7472616374200000000000008152600083516180e981601a850160208801617bbd565b7f3a20000000000000000000000000000000000000000000000000000000000000601a91840191820152835161812681601c840160208801617bbd565b01601c01949350505050565b60006020828403121561814457600080fd5b81516001600160a01b0381168114613a8557600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040516060810167ffffffffffffffff811182821017156181ad576181ad61815b565b60405290565b60008067ffffffffffffffff8411156181ce576181ce61815b565b50604051601f19601f85018116603f0116810181811067ffffffffffffffff821117156181fd576181fd61815b565b60405283815290508082840185101561821557600080fd5b615751846020830185617bbd565b600082601f83011261823457600080fd5b613a85838351602085016181b3565b60006020828403121561825557600080fd5b815167ffffffffffffffff81111561826c57600080fd5b61398884828501618223565b6000835161828a818460208801617bbd565b83519083019061829e818360208801617bbd565b01949350505050565b7f4661696c656420746f206465706c6f7920636f6e7472616374200000000000008152600083516182df81601a850160208801617bbd565b7f207573696e6720636f6e7374727563746f722064617461202200000000000000601a91840191820152835161831c816033840160208801617bbd565b7f220000000000000000000000000000000000000000000000000000000000000060339290910191820152603401949350505050565b60408152600b60408201527f464f554e4452595f4f55540000000000000000000000000000000000000000006060820152608060208201526000613a856080830184617be1565b6000602082840312156183ab57600080fd5b815167ffffffffffffffff8111156183c257600080fd5b8201601f810184136183d357600080fd5b613988848251602084016181b3565b600085516183f4818460208a01617bbd565b7f2f00000000000000000000000000000000000000000000000000000000000000908301908152855161842e816001840160208a01617bbd565b7f2f0000000000000000000000000000000000000000000000000000000000000060019290910191820152845161846c816002840160208901617bbd565b6001818301019150507f2f00000000000000000000000000000000000000000000000000000000000000600182015283516184ae816002840160208801617bbd565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600292909101918201526007019695505050505050565b6040815260006184f96040830184617be1565b8281036020840152600481527f2e6173740000000000000000000000000000000000000000000000000000000060208201526040810191505092915050565b60006020828403121561854a57600080fd5b81518015158114613a8557600080fd5b7f436f756c64206e6f742066696e642041535420696e206172746966616374200081526000825161859281601f850160208701617bbd565b7f2e205365742060617374203d20747275656020696e20666f756e6472792e746f601f9390910192830152507f6d6c000000000000000000000000000000000000000000000000000000000000603f820152604101919050565b6040815260006185ff6040830184617be1565b8281036020840152601181527f2e6173742e6162736f6c7574655061746800000000000000000000000000000060208201526040810191505092915050565b6040815260006186516040830184617be1565b8281036020840152600c81527f2e6173742e6c6963656e7365000000000000000000000000000000000000000060208201526040810191505092915050565b7f2e6d657461646174612e736f75726365732e5b270000000000000000000000008152600082516186c8816014850160208701617bbd565b7f275d2e6b656363616b32353600000000000000000000000000000000000000006014939091019283015250602001919050565b60408152600061870f6040830185617be1565b8281036020840152613a818185617be1565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f2200000000000000000000000000000000000000000000000000000000000000815260008251618788816001850160208701617bbd565b7f22000000000000000000000000000000000000000000000000000000000000006001939091019283015250600201919050565b600082516187ce818460208701617bbd565b7f2f6275696c642d696e666f000000000000000000000000000000000000000000920191825250600b01919050565b7f436f756c64206e6f742066696e64206275696c642d696e666f2066696c65207781527f697468206d61746368696e6720736f7572636520636f6465206861736820666f60208201527f7220636f6e74726163742000000000000000000000000000000000000000000060408201526000825161888181604b850160208701617bbd565b91909101604b0192915050565b600060ff821660ff81036188a4576188a4617fff565b60010192915050565b7f406f70656e7a657070656c696e2f646566656e6465722d6465706c6f792d636c81527f69656e742d636c6940000000000000000000000000000000000000000000000060208201526000825161890b816029850160208701617bbd565b9190910160290192915050565b60408152601660408201527f4f50454e5a455050454c494e5f424153485f50415448000000000000000000006060820152608060208201526000613a856080830184617be1565b60006020828403121561897157600080fd5b815167ffffffffffffffff81111561898857600080fd5b82016060818503121561899a57600080fd5b6189a261818a565b81518060030b81146189b357600080fd5b8152602082015167ffffffffffffffff8111156189cf57600080fd5b6189db86828501618223565b602083015250604082015167ffffffffffffffff8111156189fb57600080fd5b618a0786828501618223565b604083015250949350505050565b7f4661696c656420746f2072756e206261736820636f6d6d616e6420776974682081527f2200000000000000000000000000000000000000000000000000000000000000602082015260008251618a73816021850160208701617bbd565b7f222e20496620796f7520617265207573696e672057696e646f77732c2073657460219390910192830152507f20746865204f50454e5a455050454c494e5f424153485f5041544820656e766960418201527f726f6e6d656e74207661726961626c6520746f207468652066756c6c7920717560618201527f616c69666965642070617468206f66207468652062617368206578656375746160818201527f626c652e20466f72206578616d706c652c20696620796f75206172652075736960a18201527f6e672047697420666f722057696e646f77732c206164642074686520666f6c6c60c18201527f6f77696e67206c696e6520696e20746865202e656e762066696c65206f66207960e18201527f6f75722070726f6a65637420287573696e6720666f727761726420736c6173686101018201527f6573293a0a4f50454e5a455050454c494e5f424153485f504154483d22433a2f6101218201527f50726f6772616d2046696c65732f4769742f62696e2f6261736822000000000061014182015261015c01919050565b7f4661696c656420746f2066696e64206c696e652077697468207072656669782081527f2700000000000000000000000000000000000000000000000000000000000000602082015260008351618c5f816021850160208801617bbd565b7f2720696e206f75747075743a20000000000000000000000000000000000000006021918401918201528351618c9c81602e840160208801617bbd565b01602e01949350505050565b7f4661696c656420746f2072756e2075706772616465207361666574792076616c81527f69646174696f6e3a20000000000000000000000000000000000000000000000060208201526000825161890b816029850160208701617bbd565b7f55706772616465207361666574792076616c69646174696f6e206661696c656481527f3a0a000000000000000000000000000000000000000000000000000000000000602082015260008251618d64816022850160208701617bbd565b9190910160220192915050565b7f436f6e7472616374206e616d6520000000000000000000000000000000000000815260008251618da981600e850160208701617bbd565b7f206d75737420626520696e2074686520666f726d6174204d79436f6e74726163600e9390910192830152507f742e736f6c3a4d79436f6e7472616374206f72204d79436f6e74726163742e73602e8201527f6f6c206f72206f75742f4d79436f6e74726163742e736f6c2f4d79436f6e7472604e8201527f6163742e6a736f6e000000000000000000000000000000000000000000000000606e820152607601919050565b8082018082111561398c5761398c617fff565b7f53504458206c6963656e7365206964656e746966696572200000000000000000815260008351618e9a816018850160208801617bbd565b7f20696e20000000000000000000000000000000000000000000000000000000006018918401918201528351618ed781601c840160208801617bbd565b7f20646f6573206e6f74206c6f6f6b206c696b65206120737570706f7274656420601c92909101918201527f6c6963656e736520666f7220626c6f636b206578706c6f726572207665726966603c8201527f69636174696f6e2e205573652074686520606c6963656e73655479706560206f605c8201527f7074696f6e20746f20737065636966792061206c6963656e736520747970652c607c8201527f206f7220736574207468652060736b69704c6963656e73655479706560206f70609c8201527f74696f6e20746f2060747275656020746f20736b69702e00000000000000000060bc82015260d301949350505050565b60008251618fdd818460208701617bbd565b7f2000000000000000000000000000000000000000000000000000000000000000920191825250600101919050565b7f406f70656e7a657070656c696e2f75706772616465732d636f7265400000000081526000825161904481601c850160208701617bbd565b91909101601c0192915050565b6000600019820361906457619064617fff565b5060010190565b808202811582820484141761398c5761398c617fff565b6001815b60018411156190bd578085048111156190a1576190a1617fff565b60018416156190af57908102905b60019390931c928002619086565b935093915050565b6000826190d45750600161398c565b816190e15750600061398c565b81600181146190f757600281146191015761911d565b600191505061398c565b60ff84111561911257619112617fff565b50506001821b61398c565b5060208310610133831016604e8410600b8410161715619140575081810a61398c565b61914d6000198484619082565b806000190482111561916157619161617fff565b029392505050565b6000613a8583836190c5565b60008161918457619184617fff565b506000190190565b6000835161919e818460208801617bbd565b7f3a0000000000000000000000000000000000000000000000000000000000000090830190815283516191d8816001840160208801617bbd565b01600101949350505050565b8181036000831280158383131683831282161715616d4957616d49617fff56fe608060405234801561001057600080fd5b50604051610c9f380380610c9f83398101604081905261002f9161010d565b8181600361003d83826101ff565b50600461004a82826101ff565b50505050506102bd565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261007b57600080fd5b81516001600160401b0381111561009457610094610054565b604051601f8201601f19908116603f011681016001600160401b03811182821017156100c2576100c2610054565b6040528181528382016020018510156100da57600080fd5b60005b828110156100f9576020818601810151838301820152016100dd565b506000918101602001919091529392505050565b6000806040838503121561012057600080fd5b82516001600160401b0381111561013657600080fd5b6101428582860161006a565b602085015190935090506001600160401b0381111561016057600080fd5b61016c8582860161006a565b9150509250929050565b600181811c9082168061018a57607f821691505b6020821081036101aa57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156101fa57806000526020600020601f840160051c810160208510156101d75750805b601f840160051c820191505b818110156101f757600081556001016101e3565b50505b505050565b81516001600160401b0381111561021857610218610054565b61022c816102268454610176565b846101b0565b6020601f82116001811461026057600083156102485750848201515b600019600385901b1c1916600184901b1784556101f7565b600084815260208120601f198516915b828110156102905787850151825560209485019460019092019101610270565b50848210156102ae5786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b6109d3806102cc6000396000f3fe608060405234801561001057600080fd5b50600436106100be5760003560e01c806340c10f191161007657806395d89b411161005b57806395d89b4114610183578063a9059cbb1461018b578063dd62ed3e1461019e57600080fd5b806340c10f191461013857806370a082311461014d57600080fd5b806318160ddd116100a757806318160ddd1461010457806323b872dd14610116578063313ce5671461012957600080fd5b806306fdde03146100c3578063095ea7b3146100e1575b600080fd5b6100cb6101e4565b6040516100d891906107bf565b60405180910390f35b6100f46100ef366004610854565b610276565b60405190151581526020016100d8565b6002545b6040519081526020016100d8565b6100f461012436600461087e565b610290565b604051601281526020016100d8565b61014b610146366004610854565b6102b4565b005b61010861015b3660046108bb565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6100cb6102c2565b6100f4610199366004610854565b6102d1565b6101086101ac3660046108dd565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6060600380546101f390610910565b80601f016020809104026020016040519081016040528092919081815260200182805461021f90610910565b801561026c5780601f106102415761010080835404028352916020019161026c565b820191906000526020600020905b81548152906001019060200180831161024f57829003601f168201915b5050505050905090565b6000336102848185856102df565b60019150505b92915050565b60003361029e8582856102f1565b6102a98585856103c5565b506001949350505050565b6102be8282610470565b5050565b6060600480546101f390610910565b6000336102848185856103c5565b6102ec83838360016104cc565b505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146103bf57818110156103b0576040517ffb8f41b200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416600482015260248101829052604481018390526064015b60405180910390fd5b6103bf848484840360006104cc565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8316610415576040517f96c6fd1e000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff8216610465576040517fec442f05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b6102ec838383610614565b73ffffffffffffffffffffffffffffffffffffffff82166104c0576040517fec442f05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b6102be60008383610614565b73ffffffffffffffffffffffffffffffffffffffff841661051c576040517fe602df05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff831661056c576040517f94280d62000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260016020908152604080832093871683529290522082905580156103bf578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161060691815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff831661064c5780600260008282546106419190610963565b909155506106fe9050565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260208190526040902054818110156106d2576040517fe450d38c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8516600482015260248101829052604481018390526064016103a7565b73ffffffffffffffffffffffffffffffffffffffff841660009081526020819052604090209082900390555b73ffffffffffffffffffffffffffffffffffffffff821661072757600280548290039055610753565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090208054820190555b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516107b291815260200190565b60405180910390a3505050565b602081526000825180602084015260005b818110156107ed57602081860181015160408684010152016107d0565b5060006040828501015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011684010191505092915050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461084f57600080fd5b919050565b6000806040838503121561086757600080fd5b6108708361082b565b946020939093013593505050565b60008060006060848603121561089357600080fd5b61089c8461082b565b92506108aa6020850161082b565b929592945050506040919091013590565b6000602082840312156108cd57600080fd5b6108d68261082b565b9392505050565b600080604083850312156108f057600080fd5b6108f98361082b565b91506109076020840161082b565b90509250929050565b600181811c9082168061092457607f821691505b60208210810361095d577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b8082018082111561028a577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea26469706673582212207e804ca539d49155d2b6bc19268ce22f9f857027c75247d69fb0d56a089c93d464736f6c634300081a003360a060405234801561001057600080fd5b5060405161140b38038061140b83398101604081905261002f916101b3565b60016000556002805460ff191690556001600160a01b038316158061005b57506001600160a01b038216155b8061006d57506001600160a01b038116155b1561008b5760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b0383166080526100a3600082610102565b506100ce7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a82610102565b506100f97f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e483610102565b505050506101f6565b60008281526001602090815260408083206001600160a01b038516845290915281205460ff1661018d5760008381526001602081815260408084206001600160a01b0387168086529252808420805460ff19169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a4506001610191565b5060005b92915050565b80516001600160a01b03811681146101ae57600080fd5b919050565b6000806000606084860312156101c857600080fd5b6101d184610197565b92506101df60208501610197565b91506101ed60408501610197565b90509250925092565b6080516111de61022d60003960008181610132015281816103c5015281816104270152818161065801526106ba01526111de6000f3fe608060405234801561001057600080fd5b50600436106101005760003560e01c80638456cb5911610097578063c8a0236211610066578063c8a0236214610276578063d547741f14610289578063d9caed121461029c578063e63ab1e9146102af57600080fd5b80638456cb59146101f957806385f438c11461020157806391d1485414610228578063a217fddf1461026e57600080fd5b80632f2ff15d116100d35780632f2ff15d146101c057806336568abe146101d35780633f4ba83a146101e65780635c975abb146101ee57600080fd5b806301ffc9a714610105578063116191b61461012d57806321fc65f214610179578063248a9ca31461018e575b600080fd5b610118610113366004610f04565b6102d6565b60405190151581526020015b60405180910390f35b6101547f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610124565b61018c610187366004610f6f565b61036f565b005b6101b261019c36600461100c565b6000908152600160208190526040909120015490565b604051908152602001610124565b61018c6101ce366004611025565b610511565b61018c6101e1366004611025565b61053d565b61018c61059b565b60025460ff16610118565b61018c6105d0565b6101b27f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b610118610236366004611025565b600091825260016020908152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b6101b2600081565b61018c610284366004610f6f565b610602565b61018c610297366004611025565b61078a565b61018c6102aa366004611051565b6107b0565b6101b27f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061036957507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b61037761087d565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e46103a1816108c0565b6103a96108ca565b6103ea73ffffffffffffffffffffffffffffffffffffffff87167f000000000000000000000000000000000000000000000000000000000000000086610909565b6040517f5131ab5900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690635131ab599061046490899089908990899089906004016110d7565b600060405180830381600087803b15801561047e57600080fd5b505af1158015610492573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167f85b5be9cf454e05e0bddf49315178102227c312078eefa3c00294fb4d912ae4e8686866040516104f793929190611134565b60405180910390a35061050a6001600055565b5050505050565b6000828152600160208190526040909120015461052d816108c0565b6105378383610996565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8116331461058c576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6105968282610a61565b505050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a6105c5816108c0565b6105cd610b20565b50565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a6105fa816108c0565b6105cd610b9d565b61060a61087d565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e4610634816108c0565b61063c6108ca565b61067d73ffffffffffffffffffffffffffffffffffffffff87167f000000000000000000000000000000000000000000000000000000000000000086610909565b6040517fb8969bd400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063b8969bd4906106f790899089908990899089906004016110d7565b600060405180830381600087803b15801561071157600080fd5b505af1158015610725573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fb9d4efa96044e5f5e03e696fa9ae2ff66911cc27e8a637c3627c75bc5b2241c88686866040516104f793929190611134565b600082815260016020819052604090912001546107a6816108c0565b6105378383610a61565b6107b861087d565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e46107e2816108c0565b6107ea6108ca565b61080b73ffffffffffffffffffffffffffffffffffffffff85168484610909565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f9b1bfa7fa9ee420a16e124f794c35ac9f90472acc99140eb2f6447c714cad8eb8460405161086a91815260200190565b60405180910390a3506105966001600055565b6002600054036108b9576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b6105cd8133610bf8565b60025460ff1615610907576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6040805173ffffffffffffffffffffffffffffffffffffffff8416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb00000000000000000000000000000000000000000000000000000000179052610596908490610c89565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff16610a5957600083815260016020818152604080842073ffffffffffffffffffffffffffffffffffffffff8716808652925280842080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a4506001610369565b506000610369565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff1615610a5957600083815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8616808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a4506001610369565b610b28610d1f565b600280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b610ba56108ca565b600280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258610b733390565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16610c85576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82166004820152602481018390526044015b60405180910390fd5b5050565b6000610cab73ffffffffffffffffffffffffffffffffffffffff841683610d5b565b90508051600014158015610cd0575080806020019051810190610cce9190611157565b155b15610596576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84166004820152602401610c7c565b60025460ff16610907576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6060610d6983836000610d70565b9392505050565b606081471015610dae576040517fcd786059000000000000000000000000000000000000000000000000000000008152306004820152602401610c7c565b6000808573ffffffffffffffffffffffffffffffffffffffff168486604051610dd79190611179565b60006040518083038185875af1925050503d8060008114610e14576040519150601f19603f3d011682016040523d82523d6000602084013e610e19565b606091505b5091509150610e29868383610e33565b9695505050505050565b606082610e4857610e4382610ec2565b610d69565b8151158015610e6c575073ffffffffffffffffffffffffffffffffffffffff84163b155b15610ebb576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85166004820152602401610c7c565b5080610d69565b805115610ed25780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060208284031215610f1657600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610d6957600080fd5b803573ffffffffffffffffffffffffffffffffffffffff81168114610f6a57600080fd5b919050565b600080600080600060808688031215610f8757600080fd5b610f9086610f46565b9450610f9e60208701610f46565b935060408601359250606086013567ffffffffffffffff811115610fc157600080fd5b8601601f81018813610fd257600080fd5b803567ffffffffffffffff811115610fe957600080fd5b886020828401011115610ffb57600080fd5b959894975092955050506020019190565b60006020828403121561101e57600080fd5b5035919050565b6000806040838503121561103857600080fd5b8235915061104860208401610f46565b90509250929050565b60008060006060848603121561106657600080fd5b61106f84610f46565b925061107d60208501610f46565b929592945050506040919091013590565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff8616815273ffffffffffffffffffffffffffffffffffffffff8516602082015283604082015260806060820152600061112960808301848661108e565b979650505050505050565b83815260406020820152600061114e60408301848661108e565b95945050505050565b60006020828403121561116957600080fd5b81518015158114610d6957600080fd5b6000825160005b8181101561119a5760208186018101518583015201611180565b50600092019182525091905056fea264697066735822122035ca457bdc8b45adde9844ff8416a0abd723c23055fd6933ddc05523b5f5b6de64736f6c634300081a003360c060405234801561001057600080fd5b506040516115f63803806115f683398101604081905261002f916101ef565b60016000819055805460ff19169055838383836001600160a01b038416158061005f57506001600160a01b038316155b8061007157506001600160a01b038216155b8061008357506001600160a01b038116155b156100a15760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b03808516608052831660a0526100bf600082610123565b506100ea7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e483610123565b506101157f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a82610123565b505050505050505050610243565b60008281526002602090815260408083206001600160a01b038516845290915281205460ff166101c95760008381526002602090815260408083206001600160a01b03861684529091529020805460ff191660011790556101813390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45060016101cd565b5060005b92915050565b80516001600160a01b03811681146101ea57600080fd5b919050565b6000806000806080858703121561020557600080fd5b61020e856101d3565b935061021c602086016101d3565b925061022a604086016101d3565b9150610238606086016101d3565b905092959194509250565b60805160a0516113486102ae600039600081816101dc01528181610432015281816104e3015281816105fd0152818161079101528181610842015261091001526000818161019001528181610454015281816104b6015281816107b3015261081501526113486000f3fe608060405234801561001057600080fd5b50600436106101365760003560e01c80635c975abb116100b257806385f438c111610081578063a217fddf11610066578063a217fddf14610303578063d547741f1461030b578063e63ab1e91461031e57600080fd5b806385f438c11461029657806391d14854146102bd57600080fd5b80635c975abb1461025d5780635e3e9fef14610268578063743e0c9b1461027b5780638456cb591461028e57600080fd5b806321e093b1116101095780632f2ff15d116100ee5780632f2ff15d1461022f57806336568abe146102425780633f4ba83a1461025557600080fd5b806321e093b1146101d7578063248a9ca3146101fe57600080fd5b806301ffc9a71461013b57806302d5c89914610163578063106e629014610178578063116191b61461018b575b600080fd5b61014e610149366004611083565b610345565b60405190151581526020015b60405180910390f35b6101766101713660046110ee565b6103de565b005b610176610186366004611180565b6105a9565b6101b27f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161015a565b6101b27f000000000000000000000000000000000000000000000000000000000000000081565b61022161020c3660046111b3565b60009081526002602052604090206001015490565b60405190815260200161015a565b61017661023d3660046111cc565b610684565b6101766102503660046111cc565b6106af565b610176610708565b60015460ff1661014e565b6101766102763660046110ee565b61073d565b6101766102893660046111b3565b6108ee565b610176610938565b6102217f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b61014e6102cb3660046111cc565b600091825260026020908152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b610221600081565b6101766103193660046111cc565b61096a565b6102217f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b0000000000000000000000000000000000000000000000000000000014806103d857507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b6103e661098f565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e4610410816109d2565b6104186109dc565b61047973ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000167f000000000000000000000000000000000000000000000000000000000000000087610a1b565b6040517fb8969bd400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063b8969bd490610513907f0000000000000000000000000000000000000000000000000000000000000000908a908a908a908a90600401611241565b600060405180830381600087803b15801561052d57600080fd5b505af1158015610541573d6000803e3d6000fd5b505050508573ffffffffffffffffffffffffffffffffffffffff167fba96f26bdda53eb8c8ba39045dfb4ff39753fbc7a6edcf250a88e75e78d102fe86868660405161058f9392919061129e565b60405180910390a2506105a26001600055565b5050505050565b6105b161098f565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e46105db816109d2565b6105e36109dc565b61062473ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168585610a1b565b8373ffffffffffffffffffffffffffffffffffffffff167f884edad9ce6fa2440d8a54cc123490eb96d2768479d49ff9c7366125a94243648460405161066c91815260200190565b60405180910390a25061067f6001600055565b505050565b60008281526002602052604090206001015461069f816109d2565b6106a98383610a9c565b50505050565b73ffffffffffffffffffffffffffffffffffffffff811633146106fe576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61067f8282610b9c565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610732816109d2565b61073a610c5b565b50565b61074561098f565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461076f816109d2565b6107776109dc565b6107d873ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000167f000000000000000000000000000000000000000000000000000000000000000087610a1b565b6040517f5131ab5900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690635131ab5990610872907f0000000000000000000000000000000000000000000000000000000000000000908a908a908a908a90600401611241565b600060405180830381600087803b15801561088c57600080fd5b505af11580156108a0573d6000803e3d6000fd5b505050508573ffffffffffffffffffffffffffffffffffffffff167f7772f56296d3a5202974a45c61c9188d844ab4d6eeb18c851e4b8d5384ca6ced86868660405161058f9392919061129e565b6108f66109dc565b61073a73ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016333084610cd8565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610962816109d2565b61073a610d1e565b600082815260026020526040902060010154610985816109d2565b6106a98383610b9c565b6002600054036109cb576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b61073a8133610d77565b60015460ff1615610a19576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b60405173ffffffffffffffffffffffffffffffffffffffff83811660248301526044820183905261067f91859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050610e08565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff16610b9457600083815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff86168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055610b323390565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45060016103d8565b5060006103d8565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff1615610b9457600083815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8616808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45060016103d8565b610c63610e9e565b600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b60405173ffffffffffffffffffffffffffffffffffffffff84811660248301528381166044830152606482018390526106a99186918216906323b872dd90608401610a55565b610d266109dc565b600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016811790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25833610cae565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16610e04576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82166004820152602481018390526044015b60405180910390fd5b5050565b6000610e2a73ffffffffffffffffffffffffffffffffffffffff841683610eda565b90508051600014158015610e4f575080806020019051810190610e4d91906112c1565b155b1561067f576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84166004820152602401610dfb565b60015460ff16610a19576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6060610ee883836000610eef565b9392505050565b606081471015610f2d576040517fcd786059000000000000000000000000000000000000000000000000000000008152306004820152602401610dfb565b6000808573ffffffffffffffffffffffffffffffffffffffff168486604051610f5691906112e3565b60006040518083038185875af1925050503d8060008114610f93576040519150601f19603f3d011682016040523d82523d6000602084013e610f98565b606091505b5091509150610fa8868383610fb2565b9695505050505050565b606082610fc757610fc282611041565b610ee8565b8151158015610feb575073ffffffffffffffffffffffffffffffffffffffff84163b155b1561103a576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85166004820152602401610dfb565b5080610ee8565b8051156110515780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006020828403121561109557600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610ee857600080fd5b803573ffffffffffffffffffffffffffffffffffffffff811681146110e957600080fd5b919050565b60008060008060006080868803121561110657600080fd5b61110f866110c5565b945060208601359350604086013567ffffffffffffffff81111561113257600080fd5b8601601f8101881361114357600080fd5b803567ffffffffffffffff81111561115a57600080fd5b88602082840101111561116c57600080fd5b959894975060200195606001359392505050565b60008060006060848603121561119557600080fd5b61119e846110c5565b95602085013595506040909401359392505050565b6000602082840312156111c557600080fd5b5035919050565b600080604083850312156111df57600080fd5b823591506111ef602084016110c5565b90509250929050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff8616815273ffffffffffffffffffffffffffffffffffffffff851660208201528360408201526080606082015260006112936080830184866111f8565b979650505050505050565b8381526040602082015260006112b86040830184866111f8565b95945050505050565b6000602082840312156112d357600080fd5b81518015158114610ee857600080fd5b6000825160005b8181101561130457602081860181015185830152016112ea565b50600092019182525091905056fea2646970667358221220acfa51062c59716e02e413798f47a294f807ab6bfe6bcb7c13ce0530e6e5b1b864736f6c634300081a00336080604052348015600f57600080fd5b506001600055610d3a806100246000396000f3fe6080604052600436106100635760003560e01c8063c513169111610040578063c5131691146100c1578063e04d4f97146100e1578063f05b6abf146100f457005b8063357fc5a21461006c5780636ed701691461008c5780638fcaa0b5146100a157005b3661006a57005b005b34801561007857600080fd5b5061006a6100873660046106c0565b610114565b34801561009857600080fd5b5061006a6101aa565b3480156100ad57600080fd5b5061006a6100bc3660046106fc565b6101df565b3480156100cd57600080fd5b5061006a6100dc3660046106c0565b61021e565b61006a6100ef366004610895565b6102f9565b34801561010057600080fd5b5061006a61010f366004610981565b61033d565b61011c610372565b61013e73ffffffffffffffffffffffffffffffffffffffff83163383866103b5565b604080513381526020810185905273ffffffffffffffffffffffffffffffffffffffff848116828401528316606082015290517f2b58128f24a9f59127cc5b5430d70542b22220f2d9adaa86e442b816ab98af609181900360800190a16101a56001600055565b505050565b6040513381527fbcaadb46b82a48af60b608f58959ae6b8310d1b0a0d094c2e9ec3208ed39f2a09060200160405180910390a1565b7f0d3f65f00e631663aa85c96330b5c7a83bb29af3630c0063776f985edc3037aa33838360405161021293929190610a6b565b60405180910390a15050565b610226610372565b6000610233600285610ad5565b90508060000361026f576040517f1f2a200500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61029173ffffffffffffffffffffffffffffffffffffffff84163384846103b5565b604080513381526020810183905273ffffffffffffffffffffffffffffffffffffffff858116828401528416606082015290517f2b58128f24a9f59127cc5b5430d70542b22220f2d9adaa86e442b816ab98af609181900360800190a1506101a56001600055565b7f1f1ff1f5fb41346850b2f5c04e6c767e2f1c8a525c5c0c5cdb60cdf3ca5f62fa3334858585604051610330959493929190610b7e565b60405180910390a1505050565b7f74a53cd528a921fca7dbdee62f86819051d3cc98f214951f4238e8843f20b146338484846040516103309493929190610c08565b6002600054036103ae576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b6040805173ffffffffffffffffffffffffffffffffffffffff85811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd0000000000000000000000000000000000000000000000000000000017905261044a908590610450565b50505050565b600061047273ffffffffffffffffffffffffffffffffffffffff8416836104eb565b905080516000141580156104975750808060200190518101906104959190610ccb565b155b156101a5576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff841660048201526024015b60405180910390fd5b60606104f983836000610500565b9392505050565b60608147101561053e576040517fcd7860590000000000000000000000000000000000000000000000000000000081523060048201526024016104e2565b6000808573ffffffffffffffffffffffffffffffffffffffff1684866040516105679190610ce8565b60006040518083038185875af1925050503d80600081146105a4576040519150601f19603f3d011682016040523d82523d6000602084013e6105a9565b606091505b50915091506105b98683836105c3565b9695505050505050565b6060826105d8576105d382610652565b6104f9565b81511580156105fc575073ffffffffffffffffffffffffffffffffffffffff84163b155b1561064b576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff851660048201526024016104e2565b50806104f9565b8051156106625780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50565b803573ffffffffffffffffffffffffffffffffffffffff811681146106bb57600080fd5b919050565b6000806000606084860312156106d557600080fd5b833592506106e560208501610697565b91506106f360408501610697565b90509250925092565b6000806020838503121561070f57600080fd5b823567ffffffffffffffff81111561072657600080fd5b8301601f8101851361073757600080fd5b803567ffffffffffffffff81111561074e57600080fd5b85602082840101111561076057600080fd5b6020919091019590945092505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156107e6576107e6610770565b604052919050565b600082601f8301126107ff57600080fd5b813567ffffffffffffffff81111561081957610819610770565b61084a60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8401160161079f565b81815284602083860101111561085f57600080fd5b816020850160208301376000918101602001919091529392505050565b801515811461069457600080fd5b80356106bb8161087c565b6000806000606084860312156108aa57600080fd5b833567ffffffffffffffff8111156108c157600080fd5b6108cd868287016107ee565b9350506020840135915060408401356108e58161087c565b809150509250925092565b600067ffffffffffffffff82111561090a5761090a610770565b5060051b60200190565b600082601f83011261092557600080fd5b8135610938610933826108f0565b61079f565b8082825260208201915060208360051b86010192508583111561095a57600080fd5b602085015b8381101561097757803583526020928301920161095f565b5095945050505050565b60008060006060848603121561099657600080fd5b833567ffffffffffffffff8111156109ad57600080fd5b8401601f810186136109be57600080fd5b80356109cc610933826108f0565b8082825260208201915060208360051b8501019250888311156109ee57600080fd5b602084015b83811015610a3057803567ffffffffffffffff811115610a1257600080fd5b610a218b6020838901016107ee565b845250602092830192016109f3565b509550505050602084013567ffffffffffffffff811115610a5057600080fd5b610a5c86828701610914565b9250506106f36040850161088a565b73ffffffffffffffffffffffffffffffffffffffff8416815260406020820152816040820152818360608301376000818301606090810191909152601f9092017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016010192915050565b600082610b0b577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60005b83811015610b2b578181015183820152602001610b13565b50506000910152565b60008151808452610b4c816020860160208601610b10565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b73ffffffffffffffffffffffffffffffffffffffff8616815284602082015260a060408201526000610bb360a0830186610b34565b6060830194909452509015156080909101529392505050565b600081518084526020840193506020830160005b82811015610bfe578151865260209586019590910190600101610be0565b5093949350505050565b60006080820173ffffffffffffffffffffffffffffffffffffffff871683526080602084015280865180835260a08501915060a08160051b86010192506020880160005b82811015610c9b577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60878603018452610c86858351610b34565b94506020938401939190910190600101610c4c565b505050508281036040840152610cb18186610bcc565b915050610cc2606083018415159052565b95945050505050565b600060208284031215610cdd57600080fd5b81516104f98161087c565b60008251610cfa818460208701610b10565b919091019291505056fea2646970667358221220556072e1abafc3c4063b8cce832228b4f309b93726aaa6a6dfab20cb880c6d1864736f6c634300081a0033a2646970667358221220747a3818b31faffeb08f09bfe6ae14783dd67e80a08be60f3ad20e065e59915f64736f6c634300081a0033", + ABI: "[{\"type\":\"function\",\"name\":\"IS_TEST\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"PAUSER_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"WITHDRAWER_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeArtifacts\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedArtifacts_\",\"type\":\"string[]\",\"internalType\":\"string[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeContracts\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedContracts_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeSelectors\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedSelectors_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzSelector[]\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"selectors\",\"type\":\"bytes4[]\",\"internalType\":\"bytes4[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeSenders\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedSenders_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"failed\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"setUp\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"targetArtifactSelectors\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedArtifactSelectors_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzArtifactSelector[]\",\"components\":[{\"name\":\"artifact\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"selectors\",\"type\":\"bytes4[]\",\"internalType\":\"bytes4[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetArtifacts\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedArtifacts_\",\"type\":\"string[]\",\"internalType\":\"string[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetContracts\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedContracts_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetInterfaces\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedInterfaces_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzInterface[]\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"artifacts\",\"type\":\"string[]\",\"internalType\":\"string[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetSelectors\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedSelectors_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzSelector[]\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"selectors\",\"type\":\"bytes4[]\",\"internalType\":\"bytes4[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetSenders\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedSenders_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"testWithdraw\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawAndCallReceiveERC20\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawAndCallReceiveERC20FailsIfSenderIsNotWithdrawer\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawAndCallReceiveERC20Partial\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawAndCallReceiveNoParams\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawAndRevert\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawAndRevertFailsIfSenderIsNotWithdrawer\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawFailsIfSenderIsNotWithdrawer\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawTogglePause\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"event\",\"name\":\"Call\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"receiver\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Deposit\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"receiver\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"asset\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Executed\",\"inputs\":[{\"name\":\"destination\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ExecutedWithERC20\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedERC20\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"token\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"destination\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedNoParams\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedNonPayable\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"strs\",\"type\":\"string[]\",\"indexed\":false,\"internalType\":\"string[]\"},{\"name\":\"nums\",\"type\":\"uint256[]\",\"indexed\":false,\"internalType\":\"uint256[]\"},{\"name\":\"flag\",\"type\":\"bool\",\"indexed\":false,\"internalType\":\"bool\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedPayable\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"str\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"num\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"flag\",\"type\":\"bool\",\"indexed\":false,\"internalType\":\"bool\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedRevert\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Reverted\",\"inputs\":[{\"name\":\"destination\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RevertedWithERC20\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Withdraw\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"WithdrawAndCall\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"WithdrawAndRevert\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log\",\"inputs\":[{\"name\":\"\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_address\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_array\",\"inputs\":[{\"name\":\"val\",\"type\":\"uint256[]\",\"indexed\":false,\"internalType\":\"uint256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_array\",\"inputs\":[{\"name\":\"val\",\"type\":\"int256[]\",\"indexed\":false,\"internalType\":\"int256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_array\",\"inputs\":[{\"name\":\"val\",\"type\":\"address[]\",\"indexed\":false,\"internalType\":\"address[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_bytes\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_bytes32\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_int\",\"inputs\":[{\"name\":\"\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_address\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_array\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"uint256[]\",\"indexed\":false,\"internalType\":\"uint256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_array\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"int256[]\",\"indexed\":false,\"internalType\":\"int256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_array\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"address[]\",\"indexed\":false,\"internalType\":\"address[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_bytes\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_bytes32\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_decimal_int\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"},{\"name\":\"decimals\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_decimal_uint\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"decimals\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_int\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_string\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_uint\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_string\",\"inputs\":[{\"name\":\"\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_uint\",\"inputs\":[{\"name\":\"\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"logs\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"AccessControlUnauthorizedAccount\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"neededRole\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"type\":\"error\",\"name\":\"ApprovalFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ConnectorInitialized\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"CustodyInitialized\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"DepositFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"EnforcedPause\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ExecutionFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientERC20Amount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientETHAmount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZeroAddress\",\"inputs\":[]}]", + Bin: "0x6080604052600c8054600160ff199182168117909255601f80549091169091179055348015602c57600080fd5b5061dd8d8061003c6000396000f3fe608060405234801561001057600080fd5b50600436106101985760003560e01c8063b0464fdc116100e3578063dcf7d0371161008c578063e63ab1e911610066578063e63ab1e9146102ce578063fa7626d4146102f5578063fe574f841461030257600080fd5b8063dcf7d037146102b6578063de1cb76c146102be578063e20c9f71146102c657600080fd5b8063c1909972116100bd578063c19099721461029e578063ccb0e3f2146102a6578063d509b16c146102ae57600080fd5b8063b0464fdc14610276578063b5508aa91461027e578063ba414fa61461028657600080fd5b8063493465581161014557806385226c811161011f57806385226c811461021757806385f438c11461022c578063916a17c61461026157600080fd5b806349346558146101f257806366d9a9a0146101fa578063828320141461020f57600080fd5b80633cba0107116101765780633cba0107146101da5780633e5e3c23146101e25780633f7286f4146101ea57600080fd5b80630a9254e41461019d5780631ed7831c146101a75780632ade3880146101c5575b600080fd5b6101a561030a565b005b6101af610a70565b6040516101bc9190618259565b60405180910390f35b6101cd610ad2565b6040516101bc91906182f5565b6101a5610c14565b6101af6113ce565b6101af61142e565b6101a561148e565b610202611ad1565b6040516101bc919061845b565b6101a5611c53565b61021f611eac565b6040516101bc91906184f9565b6102537f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b6040519081526020016101bc565b610269611f7c565b6040516101bc9190618570565b610269612077565b61021f612172565b61028e612242565b60405190151581526020016101bc565b6101a5612316565b6101a5612581565b6101a56130ad565b6101a56130e9565b6101a5613790565b6101af613ddd565b6102537f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b601f5461028e9060ff1681565b6101a5613e3d565b602580547fffffffffffffffffffffffff000000000000000000000000000000000000000090811630179091556026805482166112341790556027805490911661567817905560405161035c9061816c565b604080825260049082018190527f7a6574610000000000000000000000000000000000000000000000000000000060608301526080602083018190528201527f5a4554410000000000000000000000000000000000000000000000000000000060a082015260c001604051809103906000f0801580156103e0573d6000803e3d6000fd5b50602480547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039283169081178255604080518082018252600e81527f4761746577617945564d2e736f6c0000000000000000000000000000000000006020820152602754602554925190861694810194909452604484019290925290921660648201526104d1919060840160408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fc0c53b8b0000000000000000000000000000000000000000000000000000000017905261405b565b601f80547fffffffffffffffffffffff0000000000000000000000000000000000000000ff166101006001600160a01b0393841681029190911791829055602080549190920483167fffffffffffffffffffffffff0000000000000000000000000000000000000000909116811790915560275460255460405192939182169291169061055d90618179565b6001600160a01b03938416815291831660208301529091166040820152606001604051809103906000f080158015610599573d6000803e3d6000fd5b50602280547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392831617905560205460245460275460255460405193851694928316939183169216906105f490618186565b6001600160a01b039485168152928416602084015290831660408301529091166060820152608001604051809103906000f080158015610638573d6000803e3d6000fd5b50602380547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039290921691909117905560405161067d90618193565b604051809103906000f080158015610699573d6000803e3d6000fd5b50602180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039283161790556027546040517fc88a5e6d00000000000000000000000000000000000000000000000000000000815291166004820152670de0b6b3a76400006024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c88a5e6d90604401600060405180830381600087803b15801561074557600080fd5b505af1158015610759573d6000803e3d6000fd5b50506025546040517f06447d560000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506306447d569150602401600060405180830381600087803b1580156107cf57600080fd5b505af11580156107e3573d6000803e3d6000fd5b50506020546022546040517fae7a3a6f0000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201529116925063ae7a3a6f9150602401600060405180830381600087803b15801561084957600080fd5b505af115801561085d573d6000803e3d6000fd5b50506020546023546040517f10188aef0000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152911692506310188aef9150602401600060405180830381600087803b1580156108c357600080fd5b505af11580156108d7573d6000803e3d6000fd5b505050507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b03166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561093957600080fd5b505af115801561094d573d6000803e3d6000fd5b5050602480546023546040517f40c10f190000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152624c4b40938101939093521692506340c10f199150604401600060405180830381600087803b1580156109be57600080fd5b505af11580156109d2573d6000803e3d6000fd5b50506027546040517fc88a5e6d0000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152670de0b6b3a76400006024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c88a5e6d9150604401600060405180830381600087803b158015610a5657600080fd5b505af1158015610a6a573d6000803e3d6000fd5b50505050565b60606016805480602002602001604051908101604052809291908181526020018280548015610ac857602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610aaa575b5050505050905090565b6060601e805480602002602001604051908101604052809291908181526020016000905b82821015610c0b57600084815260208082206040805180820182526002870290920180546001600160a01b03168352600181018054835181870281018701909452808452939591948681019491929084015b82821015610bf4578382906000526020600020018054610b6790618607565b80601f0160208091040260200160405190810160405280929190818152602001828054610b9390618607565b8015610be05780601f10610bb557610100808354040283529160200191610be0565b820191906000526020600020905b815481529060010190602001808311610bc357829003601f168201915b505050505081526020019060010190610b48565b505050508152505081526020019060010190610af6565b50505050905090565b60248054602654604051620186a09381018490526001600160a01b03928316604482015291166064820152600090819060840160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f357fc5a2000000000000000000000000000000000000000000000000000000001790526024805460265492516370a0823160e01b81526001600160a01b0393841660048201529394506000939216916370a082319101602060405180830381865afa158015610cef573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d139190618654565b9050610d2081600061407a565b602480546023546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa158015610d70573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d949190618654565b6020546040516001600160a01b0390911660248201526044810187905290915060009060640160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb0000000000000000000000000000000000000000000000000000000017905260245490517ff30c7ba3000000000000000000000000000000000000000000000000000000008152919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f30c7ba391610e77916001600160a01b039190911690600090869060040161866d565b600060405180830381600087803b158015610e9157600080fd5b505af1158015610ea5573d6000803e3d6000fd5b50506021546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b158015610f3757600080fd5b505af1158015610f4b573d6000803e3d6000fd5b505060208054602454602654604080516001600160a01b0394851681529485018d905291831684830152919091166060830152517f2b58128f24a9f59127cc5b5430d70542b22220f2d9adaa86e442b816ab98af609350908190036080019150a16023546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b15801561103a57600080fd5b505af115801561104e573d6000803e3d6000fd5b50506021546040516001600160a01b0390911692507f7772f56296d3a5202974a45c61c9188d844ab4d6eeb18c851e4b8d5384ca6ced91506110939089908890618695565b60405180910390a260275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156110f457600080fd5b505af1158015611108573d6000803e3d6000fd5b50506023546021546040517f5e3e9fef0000000000000000000000000000000000000000000000000000000081526001600160a01b039283169450635e3e9fef935061116092909116908a9089908b906004016186ae565b600060405180830381600087803b15801561117a57600080fd5b505af115801561118e573d6000803e3d6000fd5b5050602480546026546040516370a0823160e01b81526001600160a01b03918216600482015260009550911692506370a0823191015b602060405180830381865afa1580156111e1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112059190618654565b9050611211818861407a565b602480546023546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa158015611261573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112859190618654565b905061129a816112958a87618716565b61407a565b602480546020546021546040517fdd62ed3e0000000000000000000000000000000000000000000000000000000081526001600160a01b0392831660048201529082169381019390935260009291169063dd62ed3e90604401602060405180830381865afa158015611310573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113349190618654565b905061134181600061407a565b602480546020546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa158015611391573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113b59190618654565b90506113c281600061407a565b50505050505050505050565b60606018805480602002602001604051908101604052809291908181526020018280548015610ac8576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311610aaa575050505050905090565b60606017805480602002602001604051908101604052809291908181526020018280548015610ac8576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311610aaa575050505050905090565b604080516004808252602480830184526020830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f6ed70169000000000000000000000000000000000000000000000000000000001790525460265493516370a0823160e01b8152620186a0946000949385936001600160a01b03908116936370a082319361152f93921691016001600160a01b0391909116815260200190565b602060405180830381865afa15801561154c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115709190618654565b905061157d81600061407a565b602480546023546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa1580156115cd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115f19190618654565b6020546040516001600160a01b0390911660248201526044810187905290915060009060640160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb0000000000000000000000000000000000000000000000000000000017905260245490517ff30c7ba3000000000000000000000000000000000000000000000000000000008152919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f30c7ba3916116d4916001600160a01b039190911690600090869060040161866d565b600060405180830381600087803b1580156116ee57600080fd5b505af1158015611702573d6000803e3d6000fd5b50506021546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b15801561179457600080fd5b505af11580156117a8573d6000803e3d6000fd5b5050602080546040516001600160a01b0390911681527fbcaadb46b82a48af60b608f58959ae6b8310d1b0a0d094c2e9ec3208ed39f2a0935001905060405180910390a16023546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b15801561187a57600080fd5b505af115801561188e573d6000803e3d6000fd5b50506021546040516001600160a01b0390911692507f7772f56296d3a5202974a45c61c9188d844ab4d6eeb18c851e4b8d5384ca6ced91506118d39089908890618695565b60405180910390a260275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561193457600080fd5b505af1158015611948573d6000803e3d6000fd5b50506023546021546040517f5e3e9fef0000000000000000000000000000000000000000000000000000000081526001600160a01b039283169450635e3e9fef93506119a092909116908a9089908b906004016186ae565b600060405180830381600087803b1580156119ba57600080fd5b505af11580156119ce573d6000803e3d6000fd5b5050602480546026546040516370a0823160e01b81526001600160a01b03918216600482015260009550911692506370a082319101602060405180830381865afa158015611a20573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a449190618654565b9050611a5181600061407a565b602480546023546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa158015611aa1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ac59190618654565b905061129a818561407a565b6060601b805480602002602001604051908101604052809291908181526020016000905b82821015610c0b5783829060005260206000209060020201604051806040016040529081600082018054611b2890618607565b80601f0160208091040260200160405190810160405280929190818152602001828054611b5490618607565b8015611ba15780601f10611b7657610100808354040283529160200191611ba1565b820191906000526020600020905b815481529060010190602001808311611b8457829003601f168201915b5050505050815260200160018201805480602002602001604051908101604052809291908181526020018280548015611c3b57602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019060040190602082600301049283019260010382029150808411611be85790505b50505050508152505081526020019060010190611af5565b6040517f68656c6c6f0000000000000000000000000000000000000000000000000000006020820152620186a090600090819060250160408051808303601f190181529082905260255463ca669fa760e01b83526001600160a01b031660048301529150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015611cf057600080fd5b505af1158015611d04573d6000803e3d6000fd5b5050602554604080516001600160a01b0390921660248301527f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e460448084019190915281518084039091018152606490920181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb39250611def9190600401618729565b600060405180830381600087803b158015611e0957600080fd5b505af1158015611e1d573d6000803e3d6000fd5b50506023546021546040517f02d5c8990000000000000000000000000000000000000000000000000000000081526001600160a01b0392831694506302d5c8999350611e7592909116908790869088906004016186ae565b600060405180830381600087803b158015611e8f57600080fd5b505af1158015611ea3573d6000803e3d6000fd5b50505050505050565b6060601a805480602002602001604051908101604052809291908181526020016000905b82821015610c0b578382906000526020600020018054611eef90618607565b80601f0160208091040260200160405190810160405280929190818152602001828054611f1b90618607565b8015611f685780601f10611f3d57610100808354040283529160200191611f68565b820191906000526020600020905b815481529060010190602001808311611f4b57829003601f168201915b505050505081526020019060010190611ed0565b6060601d805480602002602001604051908101604052809291908181526020016000905b82821015610c0b5760008481526020908190206040805180820182526002860290920180546001600160a01b0316835260018101805483518187028101870190945280845293949193858301939283018282801561205f57602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168152602001906004019060208260030104928301926001038202915080841161200c5790505b50505050508152505081526020019060010190611fa0565b6060601c805480602002602001604051908101604052809291908181526020016000905b82821015610c0b5760008481526020908190206040805180820182526002860290920180546001600160a01b0316835260018101805483518187028101870190945280845293949193858301939283018282801561215a57602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190600401906020826003010492830192600103820291508084116121075790505b5050505050815250508152602001906001019061209b565b60606019805480602002602001604051908101604052809291908181526020016000905b82821015610c0b5783829060005260206000200180546121b590618607565b80601f01602080910402602001604051908101604052809291908181526020018280546121e190618607565b801561222e5780601f106122035761010080835404028352916020019161222e565b820191906000526020600020905b81548152906001019060200180831161221157829003601f168201915b505050505081526020019060010190612196565b60085460009060ff161561225a575060085460ff1690565b6040517f667f9d70000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d600482018190527f6661696c65640000000000000000000000000000000000000000000000000000602483015260009163667f9d7090604401602060405180830381865afa1580156122eb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061230f9190618654565b1415905090565b60248054602654604051620186a09381018490526001600160a01b03928316604482015291166064820152600090819060840160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f357fc5a200000000000000000000000000000000000000000000000000000000179052602554905163ca669fa760e01b81526001600160a01b039091166004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156123fc57600080fd5b505af1158015612410573d6000803e3d6000fd5b5050602554604080516001600160a01b0390921660248301527f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e460448084019190915281518084039091018152606490920181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb392506124fb9190600401618729565b600060405180830381600087803b15801561251557600080fd5b505af1158015612529573d6000803e3d6000fd5b50506023546021546040517f5e3e9fef0000000000000000000000000000000000000000000000000000000081526001600160a01b039283169450635e3e9fef9350611e7592909116908790869088906004016186ae565b60275460405163ca669fa760e01b81526001600160a01b039091166004820152620186a090600090737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156125e257600080fd5b505af11580156125f6573d6000803e3d6000fd5b5050602754604080516001600160a01b0390921660248301527f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a60448084019190915281518084039091018152606490920181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb392506126e19190600401618729565b600060405180830381600087803b1580156126fb57600080fd5b505af115801561270f573d6000803e3d6000fd5b50505050602360009054906101000a90046001600160a01b03166001600160a01b0316638456cb596040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561276357600080fd5b505af1158015612777573d6000803e3d6000fd5b505060275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b1580156127d457600080fd5b505af11580156127e8573d6000803e3d6000fd5b5050602754604080516001600160a01b0390921660248301527f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a60448084019190915281518084039091018152606490920181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb392506128d39190600401618729565b600060405180830381600087803b1580156128ed57600080fd5b505af1158015612901573d6000803e3d6000fd5b50505050602360009054906101000a90046001600160a01b03166001600160a01b0316633f4ba83a6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561295557600080fd5b505af1158015612969573d6000803e3d6000fd5b505060255460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b1580156129c657600080fd5b505af11580156129da573d6000803e3d6000fd5b50505050602360009054906101000a90046001600160a01b03166001600160a01b0316638456cb596040518163ffffffff1660e01b8152600401600060405180830381600087803b158015612a2e57600080fd5b505af1158015612a42573d6000803e3d6000fd5b50506040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fd93c0665000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b158015612acb57600080fd5b505af1158015612adf573d6000803e3d6000fd5b505060275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b158015612b3c57600080fd5b505af1158015612b50573d6000803e3d6000fd5b50506023546026546040517f106e62900000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260248101879052604481018690529116925063106e62909150606401600060405180830381600087803b158015612bc457600080fd5b505af1158015612bd8573d6000803e3d6000fd5b505060255460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b158015612c3557600080fd5b505af1158015612c49573d6000803e3d6000fd5b50505050602360009054906101000a90046001600160a01b03166001600160a01b0316633f4ba83a6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015612c9d57600080fd5b505af1158015612cb1573d6000803e3d6000fd5b5050602480546026546040516370a0823160e01b81526001600160a01b03918216600482015260009550911692506370a0823191015b602060405180830381865afa158015612d04573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d289190618654565b9050612d3581600061407a565b6026546040516001600160a01b0390911660248201526044810184905260009060640160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb0000000000000000000000000000000000000000000000000000000017905260245490517ff30c7ba3000000000000000000000000000000000000000000000000000000008152919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f30c7ba391612e15916001600160a01b039190911690600090869060040161866d565b600060405180830381600087803b158015612e2f57600080fd5b505af1158015612e43573d6000803e3d6000fd5b50506023546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b158015612ed557600080fd5b505af1158015612ee9573d6000803e3d6000fd5b50506026546040518781526001600160a01b0390911692507f884edad9ce6fa2440d8a54cc123490eb96d2768479d49ff9c7366125a9424364915060200160405180910390a260275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015612f8857600080fd5b505af1158015612f9c573d6000803e3d6000fd5b50506023546026546040517f106e62900000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260248101899052604481018890529116925063106e62909150606401600060405180830381600087803b15801561301057600080fd5b505af1158015613024573d6000803e3d6000fd5b5050602480546026546040516370a0823160e01b81526001600160a01b03918216600482015260009550911692506370a082319101602060405180830381865afa158015613076573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061309a9190618654565b90506130a6818661407a565b5050505050565b602480546026546040516370a0823160e01b81526001600160a01b039182166004820152620186a093600093849316916370a082319101612ce7565b60248054602654604051620186a09381018490526001600160a01b03928316604482015291166064820152600090819060840160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fc5131691000000000000000000000000000000000000000000000000000000001790526024805460265492516370a0823160e01b81526001600160a01b0393841660048201529394506000939216916370a082319101602060405180830381865afa1580156131c4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131e89190618654565b90506131f581600061407a565b602480546023546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa158015613245573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132699190618654565b6020546040516001600160a01b0390911660248201526044810187905290915060009060640160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb0000000000000000000000000000000000000000000000000000000017905260245490517ff30c7ba3000000000000000000000000000000000000000000000000000000008152919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f30c7ba39161334c916001600160a01b039190911690600090869060040161866d565b600060405180830381600087803b15801561336657600080fd5b505af115801561337a573d6000803e3d6000fd5b50506021546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b15801561340c57600080fd5b505af1158015613420573d6000803e3d6000fd5b50506020547f2b58128f24a9f59127cc5b5430d70542b22220f2d9adaa86e442b816ab98af6092506001600160a01b0316905061345e60028961873c565b602454602654604080516001600160a01b03958616815260208101949094529184168383015292909216606082015290519081900360800190a16023546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b15801561352657600080fd5b505af115801561353a573d6000803e3d6000fd5b50506021546040516001600160a01b0390911692507f7772f56296d3a5202974a45c61c9188d844ab4d6eeb18c851e4b8d5384ca6ced915061357f9089908890618695565b60405180910390a260275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156135e057600080fd5b505af11580156135f4573d6000803e3d6000fd5b50506023546021546040517f5e3e9fef0000000000000000000000000000000000000000000000000000000081526001600160a01b039283169450635e3e9fef935061364c92909116908a9089908b906004016186ae565b600060405180830381600087803b15801561366657600080fd5b505af115801561367a573d6000803e3d6000fd5b5050602480546026546040516370a0823160e01b81526001600160a01b03918216600482015260009550911692506370a082319101602060405180830381865afa1580156136cc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136f09190618654565b90506137018161129560028a61873c565b602480546023546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa158015613751573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137759190618654565b905061129a8161378660028b61873c565b6112959087618716565b6040517f68656c6c6f0000000000000000000000000000000000000000000000000000006020820152620186a090600090819060250160408051808303601f1901815290829052602480546021546370a0823160e01b85526001600160a01b0390811660048601529294506000939216916370a082319101602060405180830381865afa158015613825573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138499190618654565b905061385681600061407a565b602480546023546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa1580156138a6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138ca9190618654565b6020546040516001600160a01b0390911660248201526044810187905290915060009060640160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb0000000000000000000000000000000000000000000000000000000017905260245490517ff30c7ba3000000000000000000000000000000000000000000000000000000008152919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f30c7ba3916139ad916001600160a01b039190911690600090869060040161866d565b600060405180830381600087803b1580156139c757600080fd5b505af11580156139db573d6000803e3d6000fd5b50506021546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b158015613a6d57600080fd5b505af1158015613a81573d6000803e3d6000fd5b50506020546040517f0d3f65f00e631663aa85c96330b5c7a83bb29af3630c0063776f985edc3037aa9350613ac492506001600160a01b03909116908790618777565b60405180910390a16020546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b158015613b5a57600080fd5b505af1158015613b6e573d6000803e3d6000fd5b50506021546024546040516001600160a01b039283169450911691507f723fc7be2448075379e4fdf1e6bf5fead954d2668d2da05dcb44ccfec4beeda790613bb9908a908990618695565b60405180910390a36023546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b158015613c4f57600080fd5b505af1158015613c63573d6000803e3d6000fd5b50506021546040516001600160a01b0390911692507fba96f26bdda53eb8c8ba39045dfb4ff39753fbc7a6edcf250a88e75e78d102fe9150613ca89089908890618695565b60405180910390a260275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015613d0957600080fd5b505af1158015613d1d573d6000803e3d6000fd5b50506023546021546040517f02d5c8990000000000000000000000000000000000000000000000000000000081526001600160a01b0392831694506302d5c8999350613d7592909116908a9089908b906004016186ae565b600060405180830381600087803b158015613d8f57600080fd5b505af1158015613da3573d6000803e3d6000fd5b5050602480546021546040516370a0823160e01b81526001600160a01b03918216600482015260009550911692506370a0823191016111c4565b60606015805480602002602001604051908101604052809291908181526020018280548015610ac8576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311610aaa575050505050905090565b60255460405163ca669fa760e01b81526001600160a01b039091166004820152620186a090600090737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015613e9e57600080fd5b505af1158015613eb2573d6000803e3d6000fd5b5050602554604080516001600160a01b0390921660248301527f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e460448084019190915281518084039091018152606490920181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb39250613f9d9190600401618729565b600060405180830381600087803b158015613fb757600080fd5b505af1158015613fcb573d6000803e3d6000fd5b50506023546026546040517f106e62900000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260248101879052604481018690529116925063106e62909150606401600060405180830381600087803b15801561403f57600080fd5b505af1158015614053573d6000803e3d6000fd5b505050505050565b60006140656181a0565b6140708484836140f9565b9150505b92915050565b6040517f98296c540000000000000000000000000000000000000000000000000000000081526004810183905260248101829052737109709ecfa91a80626ff3989d68f67f5b1dd12d906398296c549060440160006040518083038186803b1580156140e557600080fd5b505afa158015614053573d6000803e3d6000fd5b6000806141068584614174565b90506141696040518060400160405280601d81526020017f4552433139363750726f78792e736f6c3a4552433139363750726f78790000008152508286604051602001614154929190618777565b60405160208183030381529060405285614180565b9150505b9392505050565b600061416d83836141ae565b60c081015151600090156141a45761419d84848460c001516141c9565b905061416d565b61419d848461436f565b60006141ba838361445a565b61416d83836020015184614180565b6000806141d461446a565b905060006141e2868361453d565b905060006141f982606001518360200151856149e3565b9050600061420983838989614bf5565b9050600061421682615a72565b602081015181519192509060030b1561428957898260400151604051602001614240929190618799565b60408051601f19818403018152908290527f08c379a000000000000000000000000000000000000000000000000000000000825261428091600401618729565b60405180910390fd5b60006142cc6040518060400160405280601581526020017f4465706c6f79656420746f20616464726573733a200000000000000000000000815250836001615c41565b6040517fc6ce059d000000000000000000000000000000000000000000000000000000008152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c6ce059d9061431f908490600401618729565b602060405180830381865afa15801561433c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614360919061881a565b9b9a5050505050505050505050565b6040517f8d1cc9250000000000000000000000000000000000000000000000000000000081526000908190737109709ecfa91a80626ff3989d68f67f5b1dd12d90638d1cc925906143c4908790600401618729565b600060405180830381865afa1580156143e1573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052614409919081019061892b565b905060006144378285604051602001614423929190618960565b604051602081830303815290604052615e41565b90506001600160a01b03811661407057848460405160200161424092919061898f565b61446682826000615e54565b5050565b604080518082018252600381527f6f75740000000000000000000000000000000000000000000000000000000000602082015290517fd145736c000000000000000000000000000000000000000000000000000000008152606091737109709ecfa91a80626ff3989d68f67f5b1dd12d91829063d145736c906144f1908490600401618a3a565b600060405180830381865afa15801561450e573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526145369190810190618a81565b9250505090565b61456f6040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b6000737109709ecfa91a80626ff3989d68f67f5b1dd12d90506145ba6040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b6145c385615f57565b602082015260006145d38661633c565b90506000836001600160a01b031663d930a0e66040518163ffffffff1660e01b8152600401600060405180830381865afa158015614615573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261463d9190810190618a81565b868385602001516040516020016146579493929190618aca565b60408051601f19818403018152908290527f60f9bb1100000000000000000000000000000000000000000000000000000000825291506000906001600160a01b038616906360f9bb11906146af908590600401618729565b600060405180830381865afa1580156146cc573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526146f49190810190618a81565b6040517fdb4235f60000000000000000000000000000000000000000000000000000000081529091506001600160a01b0386169063db4235f69061473c908490600401618bce565b602060405180830381865afa158015614759573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061477d9190618c20565b61479257816040516020016142409190618c42565b6040517f49c4fac80000000000000000000000000000000000000000000000000000000081526001600160a01b038616906349c4fac8906147d7908490600401618cd4565b600060405180830381865afa1580156147f4573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261481c9190810190618a81565b84526040517fdb4235f60000000000000000000000000000000000000000000000000000000081526001600160a01b0386169063db4235f690614863908490600401618d26565b602060405180830381865afa158015614880573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906148a49190618c20565b15614939576040517f49c4fac80000000000000000000000000000000000000000000000000000000081526001600160a01b038616906349c4fac8906148ee908490600401618d26565b600060405180830381865afa15801561490b573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526149339190810190618a81565b60408501525b846001600160a01b03166349c4fac882866000015160405160200161495e9190618d78565b6040516020818303038152906040526040518363ffffffff1660e01b815260040161498a929190618de4565b600060405180830381865afa1580156149a7573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526149cf9190810190618a81565b606085015250608083015250949350505050565b60408051600480825260a0820190925260609160009190816020015b60608152602001906001900390816149ff5790505090506040518060400160405280600481526020017f677265700000000000000000000000000000000000000000000000000000000081525081600081518110614a5f57614a5f618e09565b60200260200101819052506040518060400160405280600381526020017f2d726c000000000000000000000000000000000000000000000000000000000081525081600181518110614ab357614ab3618e09565b602002602001018190525084604051602001614acf9190618e38565b60405160208183030381529060405281600281518110614af157614af1618e09565b602002602001018190525082604051602001614b0d9190618ea4565b60405160208183030381529060405281600381518110614b2f57614b2f618e09565b60200260200101819052506000614b4582615a72565b602080820151604080518082018252600581527f2e6a736f6e0000000000000000000000000000000000000000000000000000008185019081528251808401845260008082529086015282518084019093529051825292810192909252919250614bd690604080518082018252600080825260209182015281518083019092528451825280850190820152906165bf565b614beb57856040516020016142409190618ee5565b9695505050505050565b60a0810151604080518082018252600080825260209182015281518083019092528251808352928101910152606090737109709ecfa91a80626ff3989d68f67f5b1dd12d9015614c45565b511590565b614db957826020015115614d01576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605860248201527f54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f742060448201527f62652075736564207768656e207468652060736b6970566572696679536f757260648201527f6365436f646560206f7074696f6e206973206074727565600000000000000000608482015260a401614280565b8260c0015115614db9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605360248201527f54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f742060448201527f62652075736564207768656e207468652060736b69704c6963656e736554797060648201527f6560206f7074696f6e2069732060747275656000000000000000000000000000608482015260a401614280565b6040805160ff8082526120008201909252600091816020015b6060815260200190600190039081614dd257905050905060006040518060400160405280600381526020017f6e70780000000000000000000000000000000000000000000000000000000000815250828280614e2d90618f76565b935060ff1681518110614e4257614e42618e09565b60200260200101819052506040518060400160405280600d81526020017f302e302e312d616c7068612e3700000000000000000000000000000000000000815250604051602001614e939190618f95565b604051602081830303815290604052828280614eae90618f76565b935060ff1681518110614ec357614ec3618e09565b60200260200101819052506040518060400160405280600681526020017f6465706c6f790000000000000000000000000000000000000000000000000000815250828280614f1090618f76565b935060ff1681518110614f2557614f25618e09565b60200260200101819052506040518060400160405280600e81526020017f2d2d636f6e74726163744e616d65000000000000000000000000000000000000815250828280614f7290618f76565b935060ff1681518110614f8757614f87618e09565b60200260200101819052508760200151828280614fa390618f76565b935060ff1681518110614fb857614fb8618e09565b60200260200101819052506040518060400160405280600e81526020017f2d2d636f6e74726163745061746800000000000000000000000000000000000081525082828061500590618f76565b935060ff168151811061501a5761501a618e09565b60209081029190910101528751828261503281618f76565b935060ff168151811061504757615047618e09565b60200260200101819052506040518060400160405280600981526020017f2d2d636861696e4964000000000000000000000000000000000000000000000081525082828061509490618f76565b935060ff16815181106150a9576150a9618e09565b60200260200101819052506150bd46616620565b82826150c881618f76565b935060ff16815181106150dd576150dd618e09565b60200260200101819052506040518060400160405280600f81526020017f2d2d6275696c64496e666f46696c65000000000000000000000000000000000081525082828061512a90618f76565b935060ff168151811061513f5761513f618e09565b60200260200101819052508682828061515790618f76565b935060ff168151811061516c5761516c618e09565b60209081029190910101528551156152935760408051808201909152601581527f2d2d636f6e7374727563746f7242797465636f64650000000000000000000000602082015282826151bd81618f76565b935060ff16815181106151d2576151d2618e09565b60209081029190910101526040517f71aad10d0000000000000000000000000000000000000000000000000000000081526001600160a01b038416906371aad10d90615222908990600401618729565b600060405180830381865afa15801561523f573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526152679190810190618a81565b828261527281618f76565b935060ff168151811061528757615287618e09565b60200260200101819052505b8460200151156153635760408051808201909152601281527f2d2d766572696679536f75726365436f64650000000000000000000000000000602082015282826152dc81618f76565b935060ff16815181106152f1576152f1618e09565b60200260200101819052506040518060400160405280600581526020017f66616c736500000000000000000000000000000000000000000000000000000081525082828061533e90618f76565b935060ff168151811061535357615353618e09565b602002602001018190525061552a565b61539b614c408660a0015160408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b61542e5760408051808201909152600d81527f2d2d6c6963656e73655479706500000000000000000000000000000000000000602082015282826153de81618f76565b935060ff16815181106153f3576153f3618e09565b60200260200101819052508460a001516040516020016154139190618e38565b60405160208183030381529060405282828061533e90618f76565b8460c0015115801561547157506040808901518151808301835260008082526020918201528251808401909352815183529081019082015261546f90511590565b155b1561552a5760408051808201909152600d81527f2d2d6c6963656e73655479706500000000000000000000000000000000000000602082015282826154b581618f76565b935060ff16815181106154ca576154ca618e09565b60200260200101819052506154de886166c0565b6040516020016154ee9190618e38565b60405160208183030381529060405282828061550990618f76565b935060ff168151811061551e5761551e618e09565b60200260200101819052505b6040808601518151808301835260008082526020918201528251808401909352815183529081019082015261555e90511590565b6155f35760408051808201909152600b81527f2d2d72656c617965724964000000000000000000000000000000000000000000602082015282826155a181618f76565b935060ff16815181106155b6576155b6618e09565b602002602001018190525084604001518282806155d290618f76565b935060ff16815181106155e7576155e7618e09565b60200260200101819052505b6060850151156157145760408051808201909152600681527f2d2d73616c7400000000000000000000000000000000000000000000000000006020820152828261563c81618f76565b935060ff168151811061565157615651618e09565b602090810291909101015260608501516040517fb11a19e800000000000000000000000000000000000000000000000000000000815260048101919091526001600160a01b0384169063b11a19e890602401600060405180830381865afa1580156156c0573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526156e89190810190618a81565b82826156f381618f76565b935060ff168151811061570857615708618e09565b60200260200101819052505b60e085015151156157bb5760408051808201909152600a81527f2d2d6761734c696d6974000000000000000000000000000000000000000000006020820152828261575e81618f76565b935060ff168151811061577357615773618e09565b602002602001018190525061578f8560e0015160000151616620565b828261579a81618f76565b935060ff16815181106157af576157af618e09565b60200260200101819052505b60e085015160200151156158655760408051808201909152600a81527f2d2d6761735072696365000000000000000000000000000000000000000000006020820152828261580881618f76565b935060ff168151811061581d5761581d618e09565b60200260200101819052506158398560e0015160200151616620565b828261584481618f76565b935060ff168151811061585957615859618e09565b60200260200101819052505b60e0850151604001511561590f5760408051808201909152600e81527f2d2d6d6178466565506572476173000000000000000000000000000000000000602082015282826158b281618f76565b935060ff16815181106158c7576158c7618e09565b60200260200101819052506158e38560e0015160400151616620565b82826158ee81618f76565b935060ff168151811061590357615903618e09565b60200260200101819052505b60e085015160600151156159b95760408051808201909152601681527f2d2d6d61785072696f72697479466565506572476173000000000000000000006020820152828261595c81618f76565b935060ff168151811061597157615971618e09565b602002602001018190525061598d8560e0015160600151616620565b828261599881618f76565b935060ff16815181106159ad576159ad618e09565b60200260200101819052505b60008160ff1667ffffffffffffffff8111156159d7576159d7618843565b604051908082528060200260200182016040528015615a0a57816020015b60608152602001906001900390816159f55790505b50905060005b8260ff168160ff161015615a6357838160ff1681518110615a3357615a33618e09565b6020026020010151828260ff1681518110615a5057615a50618e09565b6020908102919091010152600101615a10565b5093505050505b949350505050565b615a996040518060600160405280600060030b815260200160608152602001606081525090565b60408051808201825260048082527f6261736800000000000000000000000000000000000000000000000000000000602083015291517fd145736c000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d92600091849163d145736c91615b1f91869101619000565b600060405180830381865afa158015615b3c573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052615b649190810190618a81565b90506000615b7286836171af565b90506000846001600160a01b031663f45c1ce7836040518263ffffffff1660e01b8152600401615ba291906184f9565b6000604051808303816000875af1158015615bc1573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052615be99190810190619047565b805190915060030b15801590615c025750602081015151155b8015615c115750604081015151155b15614beb5781600081518110615c2957615c29618e09565b602002602001015160405160200161424091906190fd565b60606000615c768560408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600080825260209182015281518083019092528651825280870190820152909150615cad9082905b90617304565b15615e0a576000615d2a82615d2484615d1e615cf08a60408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6040805180820182526000808252602091820152815180830190925282518252918201519181019190915290565b9061732b565b9061738d565b604080518082018252600181527f0a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152909150615d8e908290617304565b15615df857604080518082018252600181527f0a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152615df5905b8290617412565b90505b615e0181617438565b9250505061416d565b8215615e235784846040516020016142409291906192e9565b505060408051602081019091526000815261416d565b509392505050565b6000808251602084016000f09392505050565b8160a0015115615e6357505050565b6000615e708484846174a1565b90506000615e7d82615a72565b602081015181519192509060030b158015615f195750604080518082018252600781527f535543434553530000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152615f1990604080518082018252600080825260209182015281518083019092528451825280850190820152615ca7565b15615f2657505050505050565b60408201515115615f465781604001516040516020016142409190619390565b8060405160200161424091906193ee565b60606000615f8c8360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600481527f2e736f6c0000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152909150615ff1905b82906165bf565b1561606057604080518082018252600481527f2e736f6c000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261416d9061605b908390617a3c565b617438565b604080518082018252600181527f3a00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526160c2905b8290617ac6565b60010361618f57604080518082018252600181527f3a000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261612890615dee565b50604080518082018252600181527f3a000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261416d9061605b905b8390617412565b604080518082018252600581527f2e6a736f6e000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526161ee90615fea565b1561632557604080518082018252600181527f2f00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820181905284518086019095529251845283015290616256908390617b60565b9050600081600183516162699190618716565b8151811061627957616279618e09565b6020026020010151905061631c61605b6162ef6040518060400160405280600581526020017f2e6a736f6e00000000000000000000000000000000000000000000000000000081525060408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b60408051808201825260008082526020918201528151808301909252855182528086019082015290617a3c565b95945050505050565b826040516020016142409190619459565b50919050565b606060006163718360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600481527f2e736f6c00000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201529091506163d390615fea565b156163e15761416d81617438565b604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616440906160bb565b6001036164aa57604080518082018252600181527f3a000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261416d9061605b90616188565b604080518082018252600581527f2e6a736f6e0000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261650990615fea565b1561632557604080518082018252600181527f2f00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820181905284518086019095529251845283015290616571908390617b60565b90506001815111156165ad57806002825161658c9190618716565b8151811061659c5761659c618e09565b602002602001015192505050919050565b50826040516020016142409190619459565b8051825160009111156165d457506000614074565b815183516020850151600092916165ea91619537565b6165f49190618716565b90508260200151810361660b576001915050614074565b82516020840151819020912014905092915050565b6060600061662d83617c05565b600101905060008167ffffffffffffffff81111561664d5761664d618843565b6040519080825280601f01601f191660200182016040528015616677576020820181803683370190505b5090508181016020015b600019017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a850494508461668157509392505050565b604081810151815180830183526000808252602091820181905283518085018552835181529282018383015283518085018552600a81527f554e4c4943454e534544000000000000000000000000000000000000000000008184019081528551808701875283815284019290925284518086019095525184529083015260609161674c905b8290617ce7565b1561678c57505060408051808201909152600481527f4e6f6e65000000000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600981527f556e6c6963656e73650000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526167eb90616745565b1561682b57505060408051808201909152600981527f556e6c6963656e736500000000000000000000000000000000000000000000006020820152919050565b604080518082018252600381527f4d495400000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261688a90616745565b156168ca57505060408051808201909152600381527f4d495400000000000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f47504c2d322e302d6f6e6c7900000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261692990616745565b8061698e5750604080518082018252601081527f47504c2d322e302d6f722d6c61746572000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261698e90616745565b156169ce57505060408051808201909152600981527f474e552047504c763200000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f47504c2d332e302d6f6e6c79000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616a2d90616745565b80616a925750604080518082018252601081527f47504c2d332e302d6f722d6c617465720000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616a9290616745565b15616ad257505060408051808201909152600981527f474e552047504c763300000000000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4c47504c2d322e312d6f6e6c790000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616b3190616745565b80616b965750604080518082018252601181527f4c47504c2d322e312d6f722d6c6174657200000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616b9690616745565b15616bd657505060408051808201909152600c81527f474e55204c47504c76322e3100000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4c47504c2d332e302d6f6e6c790000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616c3590616745565b80616c9a5750604080518082018252601181527f4c47504c2d332e302d6f722d6c6174657200000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616c9a90616745565b15616cda57505060408051808201909152600a81527f474e55204c47504c7633000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f4253442d322d436c61757365000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616d3990616745565b15616d7957505060408051808201909152600c81527f4253442d322d436c6175736500000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f4253442d332d436c61757365000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616dd890616745565b15616e1857505060408051808201909152600c81527f4253442d332d436c6175736500000000000000000000000000000000000000006020820152919050565b604080518082018252600781527f4d504c2d322e300000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616e7790616745565b15616eb757505060408051808201909152600781527f4d504c2d322e30000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600781527f4f534c2d332e300000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616f1690616745565b15616f5657505060408051808201909152600781527f4f534c2d332e30000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600a81527f4170616368652d322e300000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616fb590616745565b15616ff557505060408051808201909152600a81527f4170616368652d322e30000000000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4147504c2d332e302d6f6e6c79000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261705490616745565b806170b95750604080518082018252601181527f4147504c2d332e302d6f722d6c61746572000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526170b990616745565b156170f957505060408051808201909152600a81527f474e55204147504c7633000000000000000000000000000000000000000000006020820152919050565b604080518082018252600881527f4255534c2d312e310000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261715890616745565b1561719857505060408051808201909152600781527f42534c20312e31000000000000000000000000000000000000000000000000006020820152919050565b60408084015184519151614240929060200161954a565b60608060005b845181101561723a57818582815181106171d1576171d1618e09565b60200260200101516040516020016171ea929190618960565b6040516020818303038152906040529150600185516172099190618716565b8114617232578160405160200161722091906196b3565b60405160208183030381529060405291505b6001016171b5565b5060408051600380825260808201909252600091816020015b6060815260200190600190039081617253579050509050838160008151811061727e5761727e618e09565b60200260200101819052506040518060400160405280600281526020017f2d63000000000000000000000000000000000000000000000000000000000000815250816001815181106172d2576172d2618e09565b602002602001018190525081816002815181106172f1576172f1618e09565b6020908102919091010152949350505050565b60208083015183518351928401516000936173229291849190617cfb565b14159392505050565b6040805180820190915260008082526020820152600061735d8460000151856020015185600001518660200151617e0c565b905083602001518161736f9190618716565b8451859061737e908390618716565b90525060208401525090919050565b60408051808201909152600080825260208201528151835110156173b2575081614074565b60208083015190840151600191146173d95750815160208481015190840151829020919020145b801561740a578251845185906173f0908390618716565b9052508251602085018051617406908390619537565b9052505b509192915050565b6040805180820190915260008082526020820152617431838383617f2c565b5092915050565b60606000826000015167ffffffffffffffff81111561745957617459618843565b6040519080825280601f01601f191660200182016040528015617483576020820181803683370190505b50905060006020820190506174318185602001518660000151617fd7565b606060006174ad61446a565b6040805160ff808252612000820190925291925060009190816020015b60608152602001906001900390816174ca57905050905060006040518060400160405280600381526020017f6e7078000000000000000000000000000000000000000000000000000000000081525082828061752590618f76565b935060ff168151811061753a5761753a618e09565b60200260200101819052506040518060400160405280600781526020017f5e312e33322e330000000000000000000000000000000000000000000000000081525060405160200161758b91906196f4565b6040516020818303038152906040528282806175a690618f76565b935060ff16815181106175bb576175bb618e09565b60200260200101819052506040518060400160405280600881526020017f76616c696461746500000000000000000000000000000000000000000000000081525082828061760890618f76565b935060ff168151811061761d5761761d618e09565b6020026020010181905250826040516020016176399190618ea4565b60405160208183030381529060405282828061765490618f76565b935060ff168151811061766957617669618e09565b60200260200101819052506040518060400160405280600a81526020017f2d2d636f6e7472616374000000000000000000000000000000000000000000008152508282806176b690618f76565b935060ff16815181106176cb576176cb618e09565b60200260200101819052506176e08784618051565b82826176eb81618f76565b935060ff168151811061770057617700618e09565b6020908102919091010152855151156177ac5760408051808201909152600b81527f2d2d7265666572656e63650000000000000000000000000000000000000000006020820152828261775281618f76565b935060ff168151811061776757617767618e09565b6020026020010181905250617780866000015184618051565b828261778b81618f76565b935060ff16815181106177a0576177a0618e09565b60200260200101819052505b85608001511561781a5760408051808201909152601881527f2d2d756e73616665536b697053746f72616765436865636b0000000000000000602082015282826177f581618f76565b935060ff168151811061780a5761780a618e09565b6020026020010181905250617880565b84156178805760408051808201909152601281527f2d2d726571756972655265666572656e636500000000000000000000000000006020820152828261785f81618f76565b935060ff168151811061787457617874618e09565b60200260200101819052505b6040860151511561791c5760408051808201909152600d81527f2d2d756e73616665416c6c6f7700000000000000000000000000000000000000602082015282826178ca81618f76565b935060ff16815181106178df576178df618e09565b602002602001018190525085604001518282806178fb90618f76565b935060ff168151811061791057617910618e09565b60200260200101819052505b8560600151156179865760408051808201909152601481527f2d2d756e73616665416c6c6f7752656e616d65730000000000000000000000006020820152828261796581618f76565b935060ff168151811061797a5761797a618e09565b60200260200101819052505b60008160ff1667ffffffffffffffff8111156179a4576179a4618843565b6040519080825280602002602001820160405280156179d757816020015b60608152602001906001900390816179c25790505b50905060005b8260ff168160ff161015617a3057838160ff1681518110617a0057617a00618e09565b6020026020010151828260ff1681518110617a1d57617a1d618e09565b60209081029190910101526001016179dd565b50979650505050505050565b6040805180820190915260008082526020820152815183511015617a61575081614074565b81518351602085015160009291617a7791619537565b617a819190618716565b60208401519091506001908214617aa2575082516020840151819020908220145b8015617abd57835185518690617ab9908390618716565b9052505b50929392505050565b6000808260000151617aea8560000151866020015186600001518760200151617e0c565b617af49190619537565b90505b83516020850151617b089190619537565b81116174315781617b1881619739565b9250508260000151617b4f856020015183617b339190618716565b8651617b3f9190618716565b8386600001518760200151617e0c565b617b599190619537565b9050617af7565b60606000617b6e8484617ac6565b617b79906001619537565b67ffffffffffffffff811115617b9157617b91618843565b604051908082528060200260200182016040528015617bc457816020015b6060815260200190600190039081617baf5790505b50905060005b8151811015615e3957617be061605b8686617412565b828281518110617bf257617bf2618e09565b6020908102919091010152600101617bca565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310617c4e577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310617c7a576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc100008310617c9857662386f26fc10000830492506010015b6305f5e1008310617cb0576305f5e100830492506008015b6127108310617cc457612710830492506004015b60648310617cd6576064830492506002015b600a83106140745760010192915050565b6000617cf38383618091565b159392505050565b600080858411617e025760208411617dae5760008415617d46576001617d22866020618716565b617d2d906008619753565b617d38906002619851565b617d429190618716565b1990505b8351811685617d558989619537565b617d5f9190618716565b805190935082165b818114617d9957878411617d815787945050505050615a6a565b83617d8b8161985d565b945050828451169050617d67565b617da38785619537565b945050505050615a6a565b838320617dbb8588618716565b617dc59087619537565b91505b858210617e0057848220808203617ded57617de38684619537565b9350505050615a6a565b617df8600184618716565b925050617dc8565b505b5092949350505050565b60008381868511617f175760208511617ec65760008515617e58576001617e34876020618716565b617e3f906008619753565b617e4a906002619851565b617e549190618716565b1990505b84518116600087617e698b8b619537565b617e739190618716565b855190915083165b828114617eb857818610617ea057617e938b8b619537565b9650505050505050615a6a565b85617eaa81619739565b965050838651169050617e7b565b859650505050505050615a6a565b508383206000905b617ed88689618716565b8211617f1557858320808203617ef45783945050505050615a6a565b617eff600185619537565b9350508180617f0d90619739565b925050617ece565b505b617f218787619537565b979650505050505050565b60408051808201909152600080825260208201526000617f5e8560000151866020015186600001518760200151617e0c565b602080870180519186019190915251909150617f7a9082618716565b835284516020860151617f8d9190619537565b8103617f9c5760008552617fce565b83518351617faa9190619537565b85518690617fb9908390618716565b9052508351617fc89082619537565b60208601525b50909392505050565b6020811061800f5781518352617fee602084619537565b9250617ffb602083619537565b9150618008602082618716565b9050617fd7565b600019811561803e576001618025836020618716565b61803190610100619851565b61803b9190618716565b90505b9151835183169219169190911790915250565b6060600061805f848461453d565b805160208083015160405193945061807993909101619874565b60405160208183030381529060405291505092915050565b81518151600091908111156180a4575081515b6020808501519084015160005b8381101561815d578251825180821461812d57600019602087101561810c576001846180de896020618716565b6180e89190619537565b6180f3906008619753565b6180fe906002619851565b6181089190618716565b1990505b818116838216818103911461812a5797506140749650505050505050565b50505b618138602086619537565b9450618145602085619537565b935050506020816181569190619537565b90506180b1565b5084518651614beb91906198cc565b610c9f806198ed83390190565b61140b8061a58c83390190565b6116638061b99783390190565b610d5e8061cffa83390190565b6040518060e001604052806060815260200160608152602001606081526020016000151581526020016000151581526020016000151581526020016181e36181e8565b905290565b604051806101000160405280600015158152602001600015158152602001606081526020016000801916815260200160608152602001606081526020016000151581526020016181e36040518060800160405280600081526020016000815260200160008152602001600081525090565b602080825282518282018190526000918401906040840190835b8181101561829a5783516001600160a01b0316835260209384019390920191600101618273565b509095945050505050565b60005b838110156182c05781810151838201526020016182a8565b50506000910152565b600081518084526182e18160208601602086016182a5565b601f01601f19169290920160200192915050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b828110156183f1577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452815180516001600160a01b03168652602090810151604082880181905281519088018190529101906060600582901b88018101919088019060005b818110156183d7577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa08a85030183526183c18486516182c9565b6020958601959094509290920191600101618387565b50919750505060209485019492909201915060010161831d565b50929695505050505050565b600081518084526020840193506020830160005b828110156184515781517fffffffff0000000000000000000000000000000000000000000000000000000016865260209586019590910190600101618411565b5093949350505050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b828110156183f1577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc087860301845281518051604087526184c760408801826182c9565b90506020820151915086810360208801526184e281836183fd565b965050506020938401939190910190600101618483565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b828110156183f1577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc087860301845261855b8583516182c9565b94506020938401939190910190600101618521565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b828110156183f1577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc087860301845281516001600160a01b03815116865260208101519050604060208701526185f160408701826183fd565b9550506020938401939190910190600101618598565b600181811c9082168061861b57607f821691505b602082108103616336577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006020828403121561866657600080fd5b5051919050565b6001600160a01b038416815282602082015260606040820152600061631c60608301846182c9565b828152604060208201526000615a6a60408301846182c9565b6001600160a01b03851681528360208201526080604082015260006186d660808301856182c9565b905082606083015295945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b81810381811115614074576140746186e7565b60208152600061416d60208301846182c9565b600082618772577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b6001600160a01b0383168152604060208201526000615a6a60408301846182c9565b7f4661696c656420746f206465706c6f7920636f6e7472616374200000000000008152600083516187d181601a8501602088016182a5565b7f3a20000000000000000000000000000000000000000000000000000000000000601a91840191820152835161880e81601c8401602088016182a5565b01601c01949350505050565b60006020828403121561882c57600080fd5b81516001600160a01b038116811461416d57600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040516060810167ffffffffffffffff8111828210171561889557618895618843565b60405290565b60008067ffffffffffffffff8411156188b6576188b6618843565b50604051601f19601f85018116603f0116810181811067ffffffffffffffff821117156188e5576188e5618843565b6040528381529050808284018510156188fd57600080fd5b615e398460208301856182a5565b600082601f83011261891c57600080fd5b61416d8383516020850161889b565b60006020828403121561893d57600080fd5b815167ffffffffffffffff81111561895457600080fd5b6140708482850161890b565b600083516189728184602088016182a5565b8351908301906189868183602088016182a5565b01949350505050565b7f4661696c656420746f206465706c6f7920636f6e7472616374200000000000008152600083516189c781601a8501602088016182a5565b7f207573696e6720636f6e7374727563746f722064617461202200000000000000601a918401918201528351618a048160338401602088016182a5565b7f220000000000000000000000000000000000000000000000000000000000000060339290910191820152603401949350505050565b60408152600b60408201527f464f554e4452595f4f5554000000000000000000000000000000000000000000606082015260806020820152600061416d60808301846182c9565b600060208284031215618a9357600080fd5b815167ffffffffffffffff811115618aaa57600080fd5b8201601f81018413618abb57600080fd5b6140708482516020840161889b565b60008551618adc818460208a016182a5565b7f2f000000000000000000000000000000000000000000000000000000000000009083019081528551618b16816001840160208a016182a5565b7f2f00000000000000000000000000000000000000000000000000000000000000600192909101918201528451618b548160028401602089016182a5565b6001818301019150507f2f0000000000000000000000000000000000000000000000000000000000000060018201528351618b968160028401602088016182a5565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600292909101918201526007019695505050505050565b604081526000618be160408301846182c9565b8281036020840152600481527f2e6173740000000000000000000000000000000000000000000000000000000060208201526040810191505092915050565b600060208284031215618c3257600080fd5b8151801515811461416d57600080fd5b7f436f756c64206e6f742066696e642041535420696e2061727469666163742000815260008251618c7a81601f8501602087016182a5565b7f2e205365742060617374203d20747275656020696e20666f756e6472792e746f601f9390910192830152507f6d6c000000000000000000000000000000000000000000000000000000000000603f820152604101919050565b604081526000618ce760408301846182c9565b8281036020840152601181527f2e6173742e6162736f6c7574655061746800000000000000000000000000000060208201526040810191505092915050565b604081526000618d3960408301846182c9565b8281036020840152600c81527f2e6173742e6c6963656e7365000000000000000000000000000000000000000060208201526040810191505092915050565b7f2e6d657461646174612e736f75726365732e5b27000000000000000000000000815260008251618db08160148501602087016182a5565b7f275d2e6b656363616b32353600000000000000000000000000000000000000006014939091019283015250602001919050565b604081526000618df760408301856182c9565b828103602084015261416981856182c9565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f2200000000000000000000000000000000000000000000000000000000000000815260008251618e708160018501602087016182a5565b7f22000000000000000000000000000000000000000000000000000000000000006001939091019283015250600201919050565b60008251618eb68184602087016182a5565b7f2f6275696c642d696e666f000000000000000000000000000000000000000000920191825250600b01919050565b7f436f756c64206e6f742066696e64206275696c642d696e666f2066696c65207781527f697468206d61746368696e6720736f7572636520636f6465206861736820666f60208201527f7220636f6e747261637420000000000000000000000000000000000000000000604082015260008251618f6981604b8501602087016182a5565b91909101604b0192915050565b600060ff821660ff8103618f8c57618f8c6186e7565b60010192915050565b7f406f70656e7a657070656c696e2f646566656e6465722d6465706c6f792d636c81527f69656e742d636c69400000000000000000000000000000000000000000000000602082015260008251618ff38160298501602087016182a5565b9190910160290192915050565b60408152601660408201527f4f50454e5a455050454c494e5f424153485f5041544800000000000000000000606082015260806020820152600061416d60808301846182c9565b60006020828403121561905957600080fd5b815167ffffffffffffffff81111561907057600080fd5b82016060818503121561908257600080fd5b61908a618872565b81518060030b811461909b57600080fd5b8152602082015167ffffffffffffffff8111156190b757600080fd5b6190c38682850161890b565b602083015250604082015167ffffffffffffffff8111156190e357600080fd5b6190ef8682850161890b565b604083015250949350505050565b7f4661696c656420746f2072756e206261736820636f6d6d616e6420776974682081527f220000000000000000000000000000000000000000000000000000000000000060208201526000825161915b8160218501602087016182a5565b7f222e20496620796f7520617265207573696e672057696e646f77732c2073657460219390910192830152507f20746865204f50454e5a455050454c494e5f424153485f5041544820656e766960418201527f726f6e6d656e74207661726961626c6520746f207468652066756c6c7920717560618201527f616c69666965642070617468206f66207468652062617368206578656375746160818201527f626c652e20466f72206578616d706c652c20696620796f75206172652075736960a18201527f6e672047697420666f722057696e646f77732c206164642074686520666f6c6c60c18201527f6f77696e67206c696e6520696e20746865202e656e762066696c65206f66207960e18201527f6f75722070726f6a65637420287573696e6720666f727761726420736c6173686101018201527f6573293a0a4f50454e5a455050454c494e5f424153485f504154483d22433a2f6101218201527f50726f6772616d2046696c65732f4769742f62696e2f6261736822000000000061014182015261015c01919050565b7f4661696c656420746f2066696e64206c696e652077697468207072656669782081527f27000000000000000000000000000000000000000000000000000000000000006020820152600083516193478160218501602088016182a5565b7f2720696e206f75747075743a2000000000000000000000000000000000000000602191840191820152835161938481602e8401602088016182a5565b01602e01949350505050565b7f4661696c656420746f2072756e2075706772616465207361666574792076616c81527f69646174696f6e3a200000000000000000000000000000000000000000000000602082015260008251618ff38160298501602087016182a5565b7f55706772616465207361666574792076616c69646174696f6e206661696c656481527f3a0a00000000000000000000000000000000000000000000000000000000000060208201526000825161944c8160228501602087016182a5565b9190910160220192915050565b7f436f6e7472616374206e616d652000000000000000000000000000000000000081526000825161949181600e8501602087016182a5565b7f206d75737420626520696e2074686520666f726d6174204d79436f6e74726163600e9390910192830152507f742e736f6c3a4d79436f6e7472616374206f72204d79436f6e74726163742e73602e8201527f6f6c206f72206f75742f4d79436f6e74726163742e736f6c2f4d79436f6e7472604e8201527f6163742e6a736f6e000000000000000000000000000000000000000000000000606e820152607601919050565b80820180821115614074576140746186e7565b7f53504458206c6963656e7365206964656e7469666965722000000000000000008152600083516195828160188501602088016182a5565b7f20696e200000000000000000000000000000000000000000000000000000000060189184019182015283516195bf81601c8401602088016182a5565b7f20646f6573206e6f74206c6f6f6b206c696b65206120737570706f7274656420601c92909101918201527f6c6963656e736520666f7220626c6f636b206578706c6f726572207665726966603c8201527f69636174696f6e2e205573652074686520606c6963656e73655479706560206f605c8201527f7074696f6e20746f20737065636966792061206c6963656e736520747970652c607c8201527f206f7220736574207468652060736b69704c6963656e73655479706560206f70609c8201527f74696f6e20746f2060747275656020746f20736b69702e00000000000000000060bc82015260d301949350505050565b600082516196c58184602087016182a5565b7f2000000000000000000000000000000000000000000000000000000000000000920191825250600101919050565b7f406f70656e7a657070656c696e2f75706772616465732d636f7265400000000081526000825161972c81601c8501602087016182a5565b91909101601c0192915050565b6000600019820361974c5761974c6186e7565b5060010190565b8082028115828204841417614074576140746186e7565b6001815b60018411156197a557808504811115619789576197896186e7565b600184161561979757908102905b60019390931c92800261976e565b935093915050565b6000826197bc57506001614074565b816197c957506000614074565b81600181146197df57600281146197e957619805565b6001915050614074565b60ff8411156197fa576197fa6186e7565b50506001821b614074565b5060208310610133831016604e8410600b8410161715619828575081810a614074565b619835600019848461976a565b8060001904821115619849576198496186e7565b029392505050565b600061416d83836197ad565b60008161986c5761986c6186e7565b506000190190565b600083516198868184602088016182a5565b7f3a0000000000000000000000000000000000000000000000000000000000000090830190815283516198c08160018401602088016182a5565b01600101949350505050565b8181036000831280158383131683831282161715617431576174316186e756fe608060405234801561001057600080fd5b50604051610c9f380380610c9f83398101604081905261002f9161010d565b8181600361003d83826101ff565b50600461004a82826101ff565b50505050506102bd565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261007b57600080fd5b81516001600160401b0381111561009457610094610054565b604051601f8201601f19908116603f011681016001600160401b03811182821017156100c2576100c2610054565b6040528181528382016020018510156100da57600080fd5b60005b828110156100f9576020818601810151838301820152016100dd565b506000918101602001919091529392505050565b6000806040838503121561012057600080fd5b82516001600160401b0381111561013657600080fd5b6101428582860161006a565b602085015190935090506001600160401b0381111561016057600080fd5b61016c8582860161006a565b9150509250929050565b600181811c9082168061018a57607f821691505b6020821081036101aa57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156101fa57806000526020600020601f840160051c810160208510156101d75750805b601f840160051c820191505b818110156101f757600081556001016101e3565b50505b505050565b81516001600160401b0381111561021857610218610054565b61022c816102268454610176565b846101b0565b6020601f82116001811461026057600083156102485750848201515b600019600385901b1c1916600184901b1784556101f7565b600084815260208120601f198516915b828110156102905787850151825560209485019460019092019101610270565b50848210156102ae5786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b6109d3806102cc6000396000f3fe608060405234801561001057600080fd5b50600436106100be5760003560e01c806340c10f191161007657806395d89b411161005b57806395d89b4114610183578063a9059cbb1461018b578063dd62ed3e1461019e57600080fd5b806340c10f191461013857806370a082311461014d57600080fd5b806318160ddd116100a757806318160ddd1461010457806323b872dd14610116578063313ce5671461012957600080fd5b806306fdde03146100c3578063095ea7b3146100e1575b600080fd5b6100cb6101e4565b6040516100d891906107bf565b60405180910390f35b6100f46100ef366004610854565b610276565b60405190151581526020016100d8565b6002545b6040519081526020016100d8565b6100f461012436600461087e565b610290565b604051601281526020016100d8565b61014b610146366004610854565b6102b4565b005b61010861015b3660046108bb565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6100cb6102c2565b6100f4610199366004610854565b6102d1565b6101086101ac3660046108dd565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6060600380546101f390610910565b80601f016020809104026020016040519081016040528092919081815260200182805461021f90610910565b801561026c5780601f106102415761010080835404028352916020019161026c565b820191906000526020600020905b81548152906001019060200180831161024f57829003601f168201915b5050505050905090565b6000336102848185856102df565b60019150505b92915050565b60003361029e8582856102f1565b6102a98585856103c5565b506001949350505050565b6102be8282610470565b5050565b6060600480546101f390610910565b6000336102848185856103c5565b6102ec83838360016104cc565b505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146103bf57818110156103b0576040517ffb8f41b200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416600482015260248101829052604481018390526064015b60405180910390fd5b6103bf848484840360006104cc565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8316610415576040517f96c6fd1e000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff8216610465576040517fec442f05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b6102ec838383610614565b73ffffffffffffffffffffffffffffffffffffffff82166104c0576040517fec442f05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b6102be60008383610614565b73ffffffffffffffffffffffffffffffffffffffff841661051c576040517fe602df05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff831661056c576040517f94280d62000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260016020908152604080832093871683529290522082905580156103bf578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161060691815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff831661064c5780600260008282546106419190610963565b909155506106fe9050565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260208190526040902054818110156106d2576040517fe450d38c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8516600482015260248101829052604481018390526064016103a7565b73ffffffffffffffffffffffffffffffffffffffff841660009081526020819052604090209082900390555b73ffffffffffffffffffffffffffffffffffffffff821661072757600280548290039055610753565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090208054820190555b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516107b291815260200190565b60405180910390a3505050565b602081526000825180602084015260005b818110156107ed57602081860181015160408684010152016107d0565b5060006040828501015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011684010191505092915050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461084f57600080fd5b919050565b6000806040838503121561086757600080fd5b6108708361082b565b946020939093013593505050565b60008060006060848603121561089357600080fd5b61089c8461082b565b92506108aa6020850161082b565b929592945050506040919091013590565b6000602082840312156108cd57600080fd5b6108d68261082b565b9392505050565b600080604083850312156108f057600080fd5b6108f98361082b565b91506109076020840161082b565b90509250929050565b600181811c9082168061092457607f821691505b60208210810361095d577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b8082018082111561028a577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea26469706673582212207e804ca539d49155d2b6bc19268ce22f9f857027c75247d69fb0d56a089c93d464736f6c634300081a003360a060405234801561001057600080fd5b5060405161140b38038061140b83398101604081905261002f916101b3565b60016000556002805460ff191690556001600160a01b038316158061005b57506001600160a01b038216155b8061006d57506001600160a01b038116155b1561008b5760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b0383166080526100a3600082610102565b506100ce7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a82610102565b506100f97f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e483610102565b505050506101f6565b60008281526001602090815260408083206001600160a01b038516845290915281205460ff1661018d5760008381526001602081815260408084206001600160a01b0387168086529252808420805460ff19169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a4506001610191565b5060005b92915050565b80516001600160a01b03811681146101ae57600080fd5b919050565b6000806000606084860312156101c857600080fd5b6101d184610197565b92506101df60208501610197565b91506101ed60408501610197565b90509250925092565b6080516111de61022d60003960008181610132015281816103c5015281816104270152818161065801526106ba01526111de6000f3fe608060405234801561001057600080fd5b50600436106101005760003560e01c80638456cb5911610097578063c8a0236211610066578063c8a0236214610276578063d547741f14610289578063d9caed121461029c578063e63ab1e9146102af57600080fd5b80638456cb59146101f957806385f438c11461020157806391d1485414610228578063a217fddf1461026e57600080fd5b80632f2ff15d116100d35780632f2ff15d146101c057806336568abe146101d35780633f4ba83a146101e65780635c975abb146101ee57600080fd5b806301ffc9a714610105578063116191b61461012d57806321fc65f214610179578063248a9ca31461018e575b600080fd5b610118610113366004610f04565b6102d6565b60405190151581526020015b60405180910390f35b6101547f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610124565b61018c610187366004610f6f565b61036f565b005b6101b261019c36600461100c565b6000908152600160208190526040909120015490565b604051908152602001610124565b61018c6101ce366004611025565b610511565b61018c6101e1366004611025565b61053d565b61018c61059b565b60025460ff16610118565b61018c6105d0565b6101b27f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b610118610236366004611025565b600091825260016020908152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b6101b2600081565b61018c610284366004610f6f565b610602565b61018c610297366004611025565b61078a565b61018c6102aa366004611051565b6107b0565b6101b27f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061036957507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b61037761087d565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e46103a1816108c0565b6103a96108ca565b6103ea73ffffffffffffffffffffffffffffffffffffffff87167f000000000000000000000000000000000000000000000000000000000000000086610909565b6040517f5131ab5900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690635131ab599061046490899089908990899089906004016110d7565b600060405180830381600087803b15801561047e57600080fd5b505af1158015610492573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167f85b5be9cf454e05e0bddf49315178102227c312078eefa3c00294fb4d912ae4e8686866040516104f793929190611134565b60405180910390a35061050a6001600055565b5050505050565b6000828152600160208190526040909120015461052d816108c0565b6105378383610996565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8116331461058c576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6105968282610a61565b505050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a6105c5816108c0565b6105cd610b20565b50565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a6105fa816108c0565b6105cd610b9d565b61060a61087d565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e4610634816108c0565b61063c6108ca565b61067d73ffffffffffffffffffffffffffffffffffffffff87167f000000000000000000000000000000000000000000000000000000000000000086610909565b6040517fb8969bd400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063b8969bd4906106f790899089908990899089906004016110d7565b600060405180830381600087803b15801561071157600080fd5b505af1158015610725573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fb9d4efa96044e5f5e03e696fa9ae2ff66911cc27e8a637c3627c75bc5b2241c88686866040516104f793929190611134565b600082815260016020819052604090912001546107a6816108c0565b6105378383610a61565b6107b861087d565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e46107e2816108c0565b6107ea6108ca565b61080b73ffffffffffffffffffffffffffffffffffffffff85168484610909565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f9b1bfa7fa9ee420a16e124f794c35ac9f90472acc99140eb2f6447c714cad8eb8460405161086a91815260200190565b60405180910390a3506105966001600055565b6002600054036108b9576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b6105cd8133610bf8565b60025460ff1615610907576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6040805173ffffffffffffffffffffffffffffffffffffffff8416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb00000000000000000000000000000000000000000000000000000000179052610596908490610c89565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff16610a5957600083815260016020818152604080842073ffffffffffffffffffffffffffffffffffffffff8716808652925280842080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a4506001610369565b506000610369565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff1615610a5957600083815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8616808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a4506001610369565b610b28610d1f565b600280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b610ba56108ca565b600280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258610b733390565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16610c85576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82166004820152602481018390526044015b60405180910390fd5b5050565b6000610cab73ffffffffffffffffffffffffffffffffffffffff841683610d5b565b90508051600014158015610cd0575080806020019051810190610cce9190611157565b155b15610596576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84166004820152602401610c7c565b60025460ff16610907576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6060610d6983836000610d70565b9392505050565b606081471015610dae576040517fcd786059000000000000000000000000000000000000000000000000000000008152306004820152602401610c7c565b6000808573ffffffffffffffffffffffffffffffffffffffff168486604051610dd79190611179565b60006040518083038185875af1925050503d8060008114610e14576040519150601f19603f3d011682016040523d82523d6000602084013e610e19565b606091505b5091509150610e29868383610e33565b9695505050505050565b606082610e4857610e4382610ec2565b610d69565b8151158015610e6c575073ffffffffffffffffffffffffffffffffffffffff84163b155b15610ebb576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85166004820152602401610c7c565b5080610d69565b805115610ed25780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060208284031215610f1657600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610d6957600080fd5b803573ffffffffffffffffffffffffffffffffffffffff81168114610f6a57600080fd5b919050565b600080600080600060808688031215610f8757600080fd5b610f9086610f46565b9450610f9e60208701610f46565b935060408601359250606086013567ffffffffffffffff811115610fc157600080fd5b8601601f81018813610fd257600080fd5b803567ffffffffffffffff811115610fe957600080fd5b886020828401011115610ffb57600080fd5b959894975092955050506020019190565b60006020828403121561101e57600080fd5b5035919050565b6000806040838503121561103857600080fd5b8235915061104860208401610f46565b90509250929050565b60008060006060848603121561106657600080fd5b61106f84610f46565b925061107d60208501610f46565b929592945050506040919091013590565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff8616815273ffffffffffffffffffffffffffffffffffffffff8516602082015283604082015260806060820152600061112960808301848661108e565b979650505050505050565b83815260406020820152600061114e60408301848661108e565b95945050505050565b60006020828403121561116957600080fd5b81518015158114610d6957600080fd5b6000825160005b8181101561119a5760208186018101518583015201611180565b50600092019182525091905056fea264697066735822122069d5c5c3cb2752c876b6a2138d8d9b66bac6bd1b48a1fe98417eea81faf02a3e64736f6c634300081a003360c060405234801561001057600080fd5b5060405161166338038061166383398101604081905261002f9161021a565b60016000819055805460ff19169055838383836001600160a01b038416158061005f57506001600160a01b038316155b8061007157506001600160a01b038216155b8061008357506001600160a01b038116155b156100a15760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b03808516608052831660a0526100bf60008261014e565b506100ea7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e48361014e565b506101157f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb8361014e565b506101407f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a8261014e565b50505050505050505061026e565b60008281526002602090815260408083206001600160a01b038516845290915281205460ff166101f45760008381526002602090815260408083206001600160a01b03861684529091529020805460ff191660011790556101ac3390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45060016101f8565b5060005b92915050565b80516001600160a01b038116811461021557600080fd5b919050565b6000806000806080858703121561023057600080fd5b610239856101fe565b9350610247602086016101fe565b9250610255604086016101fe565b9150610263606086016101fe565b905092959194509250565b60805160a05161138a6102d9600039600081816101f701528181610474015281816105250152818161063f015281816107d30152818161088401526109520152600081816101ab01528181610496015281816104f8015281816107f50152610857015261138a6000f3fe608060405234801561001057600080fd5b50600436106101515760003560e01c80635c975abb116100cd57806391d1485411610081578063a783c78911610066578063a783c78914610326578063d547741f1461034d578063e63ab1e91461036057600080fd5b806391d14854146102d8578063a217fddf1461031e57600080fd5b8063743e0c9b116100b2578063743e0c9b146102965780638456cb59146102a957806385f438c1146102b157600080fd5b80635c975abb146102785780635e3e9fef1461028357600080fd5b806321e093b1116101245780632f2ff15d116101095780632f2ff15d1461024a57806336568abe1461025d5780633f4ba83a1461027057600080fd5b806321e093b1146101f2578063248a9ca31461021957600080fd5b806301ffc9a71461015657806302d5c8991461017e578063106e629014610193578063116191b6146101a6575b600080fd5b6101696101643660046110c5565b610387565b60405190151581526020015b60405180910390f35b61019161018c366004611130565b610420565b005b6101916101a13660046111c2565b6105eb565b6101cd7f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610175565b6101cd7f000000000000000000000000000000000000000000000000000000000000000081565b61023c6102273660046111f5565b60009081526002602052604090206001015490565b604051908152602001610175565b61019161025836600461120e565b6106c6565b61019161026b36600461120e565b6106f1565b61019161074a565b60015460ff16610169565b610191610291366004611130565b61077f565b6101916102a43660046111f5565b610930565b61019161097a565b61023c7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b6101696102e636600461120e565b600091825260026020908152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b61023c600081565b61023c7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb81565b61019161035b36600461120e565b6109ac565b61023c7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061041a57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b6104286109d1565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461045281610a14565b61045a610a1e565b6104bb73ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000167f000000000000000000000000000000000000000000000000000000000000000087610a5d565b6040517fb8969bd400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063b8969bd490610555907f0000000000000000000000000000000000000000000000000000000000000000908a908a908a908a90600401611283565b600060405180830381600087803b15801561056f57600080fd5b505af1158015610583573d6000803e3d6000fd5b505050508573ffffffffffffffffffffffffffffffffffffffff167fba96f26bdda53eb8c8ba39045dfb4ff39753fbc7a6edcf250a88e75e78d102fe8686866040516105d1939291906112e0565b60405180910390a2506105e46001600055565b5050505050565b6105f36109d1565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461061d81610a14565b610625610a1e565b61066673ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168585610a5d565b8373ffffffffffffffffffffffffffffffffffffffff167f884edad9ce6fa2440d8a54cc123490eb96d2768479d49ff9c7366125a9424364846040516106ae91815260200190565b60405180910390a2506106c16001600055565b505050565b6000828152600260205260409020600101546106e181610a14565b6106eb8383610ade565b50505050565b73ffffffffffffffffffffffffffffffffffffffff81163314610740576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6106c18282610bde565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61077481610a14565b61077c610c9d565b50565b6107876109d1565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e46107b181610a14565b6107b9610a1e565b61081a73ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000167f000000000000000000000000000000000000000000000000000000000000000087610a5d565b6040517f5131ab5900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690635131ab59906108b4907f0000000000000000000000000000000000000000000000000000000000000000908a908a908a908a90600401611283565b600060405180830381600087803b1580156108ce57600080fd5b505af11580156108e2573d6000803e3d6000fd5b505050508573ffffffffffffffffffffffffffffffffffffffff167f7772f56296d3a5202974a45c61c9188d844ab4d6eeb18c851e4b8d5384ca6ced8686866040516105d1939291906112e0565b610938610a1e565b61077c73ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016333084610d1a565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a6109a481610a14565b61077c610d60565b6000828152600260205260409020600101546109c781610a14565b6106eb8383610bde565b600260005403610a0d576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b61077c8133610db9565b60015460ff1615610a5b576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b60405173ffffffffffffffffffffffffffffffffffffffff8381166024830152604482018390526106c191859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050610e4a565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff16610bd657600083815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff86168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055610b743390565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a450600161041a565b50600061041a565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff1615610bd657600083815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8616808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a450600161041a565b610ca5610ee0565b600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b60405173ffffffffffffffffffffffffffffffffffffffff84811660248301528381166044830152606482018390526106eb9186918216906323b872dd90608401610a97565b610d68610a1e565b600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016811790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25833610cf0565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16610e46576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82166004820152602481018390526044015b60405180910390fd5b5050565b6000610e6c73ffffffffffffffffffffffffffffffffffffffff841683610f1c565b90508051600014158015610e91575080806020019051810190610e8f9190611303565b155b156106c1576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84166004820152602401610e3d565b60015460ff16610a5b576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6060610f2a83836000610f31565b9392505050565b606081471015610f6f576040517fcd786059000000000000000000000000000000000000000000000000000000008152306004820152602401610e3d565b6000808573ffffffffffffffffffffffffffffffffffffffff168486604051610f989190611325565b60006040518083038185875af1925050503d8060008114610fd5576040519150601f19603f3d011682016040523d82523d6000602084013e610fda565b606091505b5091509150610fea868383610ff4565b9695505050505050565b6060826110095761100482611083565b610f2a565b815115801561102d575073ffffffffffffffffffffffffffffffffffffffff84163b155b1561107c576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85166004820152602401610e3d565b5080610f2a565b8051156110935780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000602082840312156110d757600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610f2a57600080fd5b803573ffffffffffffffffffffffffffffffffffffffff8116811461112b57600080fd5b919050565b60008060008060006080868803121561114857600080fd5b61115186611107565b945060208601359350604086013567ffffffffffffffff81111561117457600080fd5b8601601f8101881361118557600080fd5b803567ffffffffffffffff81111561119c57600080fd5b8860208284010111156111ae57600080fd5b959894975060200195606001359392505050565b6000806000606084860312156111d757600080fd5b6111e084611107565b95602085013595506040909401359392505050565b60006020828403121561120757600080fd5b5035919050565b6000806040838503121561122157600080fd5b8235915061123160208401611107565b90509250929050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff8616815273ffffffffffffffffffffffffffffffffffffffff851660208201528360408201526080606082015260006112d560808301848661123a565b979650505050505050565b8381526040602082015260006112fa60408301848661123a565b95945050505050565b60006020828403121561131557600080fd5b81518015158114610f2a57600080fd5b6000825160005b81811015611346576020818601810151858301520161132c565b50600092019182525091905056fea2646970667358221220b04453dff0090afb8a475e5970db3acd2d95039b4c5a72b1afb3fdac6383a65d64736f6c634300081a00336080604052348015600f57600080fd5b506001600055610d3a806100246000396000f3fe6080604052600436106100635760003560e01c8063c513169111610040578063c5131691146100c1578063e04d4f97146100e1578063f05b6abf146100f457005b8063357fc5a21461006c5780636ed701691461008c5780638fcaa0b5146100a157005b3661006a57005b005b34801561007857600080fd5b5061006a6100873660046106c0565b610114565b34801561009857600080fd5b5061006a6101aa565b3480156100ad57600080fd5b5061006a6100bc3660046106fc565b6101df565b3480156100cd57600080fd5b5061006a6100dc3660046106c0565b61021e565b61006a6100ef366004610895565b6102f9565b34801561010057600080fd5b5061006a61010f366004610981565b61033d565b61011c610372565b61013e73ffffffffffffffffffffffffffffffffffffffff83163383866103b5565b604080513381526020810185905273ffffffffffffffffffffffffffffffffffffffff848116828401528316606082015290517f2b58128f24a9f59127cc5b5430d70542b22220f2d9adaa86e442b816ab98af609181900360800190a16101a56001600055565b505050565b6040513381527fbcaadb46b82a48af60b608f58959ae6b8310d1b0a0d094c2e9ec3208ed39f2a09060200160405180910390a1565b7f0d3f65f00e631663aa85c96330b5c7a83bb29af3630c0063776f985edc3037aa33838360405161021293929190610a6b565b60405180910390a15050565b610226610372565b6000610233600285610ad5565b90508060000361026f576040517f1f2a200500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61029173ffffffffffffffffffffffffffffffffffffffff84163384846103b5565b604080513381526020810183905273ffffffffffffffffffffffffffffffffffffffff858116828401528416606082015290517f2b58128f24a9f59127cc5b5430d70542b22220f2d9adaa86e442b816ab98af609181900360800190a1506101a56001600055565b7f1f1ff1f5fb41346850b2f5c04e6c767e2f1c8a525c5c0c5cdb60cdf3ca5f62fa3334858585604051610330959493929190610b7e565b60405180910390a1505050565b7f74a53cd528a921fca7dbdee62f86819051d3cc98f214951f4238e8843f20b146338484846040516103309493929190610c08565b6002600054036103ae576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b6040805173ffffffffffffffffffffffffffffffffffffffff85811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd0000000000000000000000000000000000000000000000000000000017905261044a908590610450565b50505050565b600061047273ffffffffffffffffffffffffffffffffffffffff8416836104eb565b905080516000141580156104975750808060200190518101906104959190610ccb565b155b156101a5576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff841660048201526024015b60405180910390fd5b60606104f983836000610500565b9392505050565b60608147101561053e576040517fcd7860590000000000000000000000000000000000000000000000000000000081523060048201526024016104e2565b6000808573ffffffffffffffffffffffffffffffffffffffff1684866040516105679190610ce8565b60006040518083038185875af1925050503d80600081146105a4576040519150601f19603f3d011682016040523d82523d6000602084013e6105a9565b606091505b50915091506105b98683836105c3565b9695505050505050565b6060826105d8576105d382610652565b6104f9565b81511580156105fc575073ffffffffffffffffffffffffffffffffffffffff84163b155b1561064b576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff851660048201526024016104e2565b50806104f9565b8051156106625780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50565b803573ffffffffffffffffffffffffffffffffffffffff811681146106bb57600080fd5b919050565b6000806000606084860312156106d557600080fd5b833592506106e560208501610697565b91506106f360408501610697565b90509250925092565b6000806020838503121561070f57600080fd5b823567ffffffffffffffff81111561072657600080fd5b8301601f8101851361073757600080fd5b803567ffffffffffffffff81111561074e57600080fd5b85602082840101111561076057600080fd5b6020919091019590945092505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156107e6576107e6610770565b604052919050565b600082601f8301126107ff57600080fd5b813567ffffffffffffffff81111561081957610819610770565b61084a60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8401160161079f565b81815284602083860101111561085f57600080fd5b816020850160208301376000918101602001919091529392505050565b801515811461069457600080fd5b80356106bb8161087c565b6000806000606084860312156108aa57600080fd5b833567ffffffffffffffff8111156108c157600080fd5b6108cd868287016107ee565b9350506020840135915060408401356108e58161087c565b809150509250925092565b600067ffffffffffffffff82111561090a5761090a610770565b5060051b60200190565b600082601f83011261092557600080fd5b8135610938610933826108f0565b61079f565b8082825260208201915060208360051b86010192508583111561095a57600080fd5b602085015b8381101561097757803583526020928301920161095f565b5095945050505050565b60008060006060848603121561099657600080fd5b833567ffffffffffffffff8111156109ad57600080fd5b8401601f810186136109be57600080fd5b80356109cc610933826108f0565b8082825260208201915060208360051b8501019250888311156109ee57600080fd5b602084015b83811015610a3057803567ffffffffffffffff811115610a1257600080fd5b610a218b6020838901016107ee565b845250602092830192016109f3565b509550505050602084013567ffffffffffffffff811115610a5057600080fd5b610a5c86828701610914565b9250506106f36040850161088a565b73ffffffffffffffffffffffffffffffffffffffff8416815260406020820152816040820152818360608301376000818301606090810191909152601f9092017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016010192915050565b600082610b0b577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60005b83811015610b2b578181015183820152602001610b13565b50506000910152565b60008151808452610b4c816020860160208601610b10565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b73ffffffffffffffffffffffffffffffffffffffff8616815284602082015260a060408201526000610bb360a0830186610b34565b6060830194909452509015156080909101529392505050565b600081518084526020840193506020830160005b82811015610bfe578151865260209586019590910190600101610be0565b5093949350505050565b60006080820173ffffffffffffffffffffffffffffffffffffffff871683526080602084015280865180835260a08501915060a08160051b86010192506020880160005b82811015610c9b577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60878603018452610c86858351610b34565b94506020938401939190910190600101610c4c565b505050508281036040840152610cb18186610bcc565b915050610cc2606083018415159052565b95945050505050565b600060208284031215610cdd57600080fd5b81516104f98161087c565b60008251610cfa818460208701610b10565b919091019291505056fea2646970667358221220556072e1abafc3c4063b8cce832228b4f309b93726aaa6a6dfab20cb880c6d1864736f6c634300081a0033a26469706673582212209da1e8669fe74e0b9657536fdf6fe4266ac5baf1ef22465b84d3efd35f8efd0764736f6c634300081a0033", } // ZetaConnectorNativeTestABI is the input ABI used to generate the binding from. @@ -251,6 +251,37 @@ func (_ZetaConnectorNativeTest *ZetaConnectorNativeTestCallerSession) ISTEST() ( return _ZetaConnectorNativeTest.Contract.ISTEST(&_ZetaConnectorNativeTest.CallOpts) } +// PAUSERROLE is a free data retrieval call binding the contract method 0xe63ab1e9. +// +// Solidity: function PAUSER_ROLE() view returns(bytes32) +func (_ZetaConnectorNativeTest *ZetaConnectorNativeTestCaller) PAUSERROLE(opts *bind.CallOpts) ([32]byte, error) { + var out []interface{} + err := _ZetaConnectorNativeTest.contract.Call(opts, &out, "PAUSER_ROLE") + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// PAUSERROLE is a free data retrieval call binding the contract method 0xe63ab1e9. +// +// Solidity: function PAUSER_ROLE() view returns(bytes32) +func (_ZetaConnectorNativeTest *ZetaConnectorNativeTestSession) PAUSERROLE() ([32]byte, error) { + return _ZetaConnectorNativeTest.Contract.PAUSERROLE(&_ZetaConnectorNativeTest.CallOpts) +} + +// PAUSERROLE is a free data retrieval call binding the contract method 0xe63ab1e9. +// +// Solidity: function PAUSER_ROLE() view returns(bytes32) +func (_ZetaConnectorNativeTest *ZetaConnectorNativeTestCallerSession) PAUSERROLE() ([32]byte, error) { + return _ZetaConnectorNativeTest.Contract.PAUSERROLE(&_ZetaConnectorNativeTest.CallOpts) +} + // WITHDRAWERROLE is a free data retrieval call binding the contract method 0x85f438c1. // // Solidity: function WITHDRAWER_ROLE() view returns(bytes32) @@ -812,6 +843,27 @@ func (_ZetaConnectorNativeTest *ZetaConnectorNativeTestTransactorSession) TestWi return _ZetaConnectorNativeTest.Contract.TestWithdrawFailsIfSenderIsNotWithdrawer(&_ZetaConnectorNativeTest.TransactOpts) } +// TestWithdrawTogglePause is a paid mutator transaction binding the contract method 0xccb0e3f2. +// +// Solidity: function testWithdrawTogglePause() returns() +func (_ZetaConnectorNativeTest *ZetaConnectorNativeTestTransactor) TestWithdrawTogglePause(opts *bind.TransactOpts) (*types.Transaction, error) { + return _ZetaConnectorNativeTest.contract.Transact(opts, "testWithdrawTogglePause") +} + +// TestWithdrawTogglePause is a paid mutator transaction binding the contract method 0xccb0e3f2. +// +// Solidity: function testWithdrawTogglePause() returns() +func (_ZetaConnectorNativeTest *ZetaConnectorNativeTestSession) TestWithdrawTogglePause() (*types.Transaction, error) { + return _ZetaConnectorNativeTest.Contract.TestWithdrawTogglePause(&_ZetaConnectorNativeTest.TransactOpts) +} + +// TestWithdrawTogglePause is a paid mutator transaction binding the contract method 0xccb0e3f2. +// +// Solidity: function testWithdrawTogglePause() returns() +func (_ZetaConnectorNativeTest *ZetaConnectorNativeTestTransactorSession) TestWithdrawTogglePause() (*types.Transaction, error) { + return _ZetaConnectorNativeTest.Contract.TestWithdrawTogglePause(&_ZetaConnectorNativeTest.TransactOpts) +} + // ZetaConnectorNativeTestCallIterator is returned from FilterCall and is used to iterate over the raw logs and unpacked data for Call events raised by the ZetaConnectorNativeTest contract. type ZetaConnectorNativeTestCallIterator struct { Event *ZetaConnectorNativeTestCall // Event containing the contract specifics and raw log diff --git a/v2/pkg/zetaconnectornonnative.sol/zetaconnectornonnative.go b/v2/pkg/zetaconnectornonnative.sol/zetaconnectornonnative.go index 12508b51..c494b8b8 100644 --- a/v2/pkg/zetaconnectornonnative.sol/zetaconnectornonnative.go +++ b/v2/pkg/zetaconnectornonnative.sol/zetaconnectornonnative.go @@ -31,8 +31,8 @@ var ( // ZetaConnectorNonNativeMetaData contains all meta data concerning the ZetaConnectorNonNative contract. var ZetaConnectorNonNativeMetaData = &bind.MetaData{ - ABI: "[{\"type\":\"constructor\",\"inputs\":[{\"name\":\"gateway_\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"zetaToken_\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"tssAddress_\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"admin_\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"DEFAULT_ADMIN_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"PAUSER_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"WITHDRAWER_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"gateway\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIGatewayEVM\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getRoleAdmin\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"grantRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"hasRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"maxSupply\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"pause\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"paused\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"receiveTokens\",\"inputs\":[{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"renounceRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"callerConfirmation\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"revokeRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setMaxSupply\",\"inputs\":[{\"name\":\"maxSupply_\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"supportsInterface\",\"inputs\":[{\"name\":\"interfaceId\",\"type\":\"bytes4\",\"internalType\":\"bytes4\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"unpause\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"withdraw\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"internalSendHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"withdrawAndCall\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"internalSendHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"withdrawAndRevert\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"internalSendHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"zetaToken\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"event\",\"name\":\"MaxSupplyUpdated\",\"inputs\":[{\"name\":\"maxSupply\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Paused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleAdminChanged\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"previousAdminRole\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"newAdminRole\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleGranted\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleRevoked\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Unpaused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Withdraw\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"WithdrawAndCall\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"WithdrawAndRevert\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"AccessControlBadConfirmation\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"AccessControlUnauthorizedAccount\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"neededRole\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"type\":\"error\",\"name\":\"EnforcedPause\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ExceedsMaxSupply\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ExpectedPause\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ReentrancyGuardReentrantCall\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZeroAddress\",\"inputs\":[]}]", - Bin: "0x60c060405260001960035534801561001657600080fd5b506040516117f93803806117f9833981016040819052610035916101f5565b60016000819055805460ff19169055838383836001600160a01b038416158061006557506001600160a01b038316155b8061007757506001600160a01b038216155b8061008957506001600160a01b038116155b156100a75760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b03808516608052831660a0526100c5600082610129565b506100f07f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e483610129565b5061011b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a82610129565b505050505050505050610249565b60008281526002602090815260408083206001600160a01b038516845290915281205460ff166101cf5760008381526002602090815260408083206001600160a01b03861684529091529020805460ff191660011790556101873390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45060016101d3565b5060005b92915050565b80516001600160a01b03811681146101f057600080fd5b919050565b6000806000806080858703121561020b57600080fd5b610214856101d9565b9350610222602086016101d9565b9250610230604086016101d9565b915061023e606086016101d9565b905092959194509250565b60805160a0516115306102c9600039600081816102120152818161046f015281816105b1015281816106770152818161077c0152818161089e01528181610a5201528181610b9401528181610c5a0152610db10152600081816101c60152818161057b0152818161064801528181610b5e0152610c2b01526115306000f3fe608060405234801561001057600080fd5b506004361061016c5760003560e01c80635e3e9fef116100cd57806391d1485411610081578063d547741f11610066578063d547741f14610354578063d5abeb0114610367578063e63ab1e91461037057600080fd5b806391d1485414610306578063a217fddf1461034c57600080fd5b8063743e0c9b116100b2578063743e0c9b146102c45780638456cb59146102d757806385f438c1146102df57600080fd5b80635e3e9fef1461029e5780636f8b44b0146102b157600080fd5b8063248a9ca31161012457806336568abe1161010957806336568abe146102785780633f4ba83a1461028b5780635c975abb1461029357600080fd5b8063248a9ca3146102345780632f2ff15d1461026557600080fd5b8063106e629011610155578063106e6290146101ae578063116191b6146101c157806321e093b11461020d57600080fd5b806301ffc9a71461017157806302d5c89914610199575b600080fd5b61018461017f366004611262565b610397565b60405190151581526020015b60405180910390f35b6101ac6101a73660046112d4565b610430565b005b6101ac6101bc366004611366565b61073d565b6101e87f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610190565b6101e87f000000000000000000000000000000000000000000000000000000000000000081565b610257610242366004611399565b60009081526002602052604090206001015490565b604051908152602001610190565b6101ac6102733660046113b2565b61095a565b6101ac6102863660046113b2565b610985565b6101ac6109de565b60015460ff16610184565b6101ac6102ac3660046112d4565b610a13565b6101ac6102bf366004611399565b610d06565b6101ac6102d2366004611399565b610d74565b6101ac610e1e565b6102577f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b6101846103143660046113b2565b600091825260026020908152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b610257600081565b6101ac6103623660046113b2565b610e50565b61025760035481565b6102577f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061042a57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b610438610e75565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461046281610eb8565b61046a610ec2565b6003547f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156104d8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104fc91906113de565b61050690876113f7565b111561053e576040517fc30436e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f1e458bee00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116600483015260248201879052604482018490527f00000000000000000000000000000000000000000000000000000000000000001690631e458bee90606401600060405180830381600087803b1580156105f557600080fd5b505af1158015610609573d6000803e3d6000fd5b50506040517fb8969bd400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016925063b8969bd491506106a7907f0000000000000000000000000000000000000000000000000000000000000000908a908a908a908a9060040161147a565b600060405180830381600087803b1580156106c157600080fd5b505af11580156106d5573d6000803e3d6000fd5b505050508573ffffffffffffffffffffffffffffffffffffffff167fba96f26bdda53eb8c8ba39045dfb4ff39753fbc7a6edcf250a88e75e78d102fe868686604051610723939291906114d7565b60405180910390a2506107366001600055565b5050505050565b610745610e75565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461076f81610eb8565b610777610ec2565b6003547f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156107e5573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061080991906113de565b61081390856113f7565b111561084b576040517fc30436e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f1e458bee00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff858116600483015260248201859052604482018490527f00000000000000000000000000000000000000000000000000000000000000001690631e458bee90606401600060405180830381600087803b1580156108e257600080fd5b505af11580156108f6573d6000803e3d6000fd5b505050508373ffffffffffffffffffffffffffffffffffffffff167f884edad9ce6fa2440d8a54cc123490eb96d2768479d49ff9c7366125a94243648460405161094291815260200190565b60405180910390a2506109556001600055565b505050565b60008281526002602052604090206001015461097581610eb8565b61097f8383610f01565b50505050565b73ffffffffffffffffffffffffffffffffffffffff811633146109d4576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6109558282611001565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610a0881610eb8565b610a106110c0565b50565b610a1b610e75565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e4610a4581610eb8565b610a4d610ec2565b6003547f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610abb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610adf91906113de565b610ae990876113f7565b1115610b21576040517fc30436e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f1e458bee00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116600483015260248201879052604482018490527f00000000000000000000000000000000000000000000000000000000000000001690631e458bee90606401600060405180830381600087803b158015610bd857600080fd5b505af1158015610bec573d6000803e3d6000fd5b50506040517f5131ab5900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169250635131ab599150610c8a907f0000000000000000000000000000000000000000000000000000000000000000908a908a908a908a9060040161147a565b600060405180830381600087803b158015610ca457600080fd5b505af1158015610cb8573d6000803e3d6000fd5b505050508573ffffffffffffffffffffffffffffffffffffffff167f7772f56296d3a5202974a45c61c9188d844ab4d6eeb18c851e4b8d5384ca6ced868686604051610723939291906114d7565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e4610d3081610eb8565b610d38610ec2565b60038290556040518281527f7810bd47de260c3e9ee10061cf438099dd12256c79485f12f94dbccc981e806c9060200160405180910390a15050565b610d7c610ec2565b6040517f79cc6790000000000000000000000000000000000000000000000000000000008152336004820152602481018290527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16906379cc679090604401600060405180830381600087803b158015610e0a57600080fd5b505af1158015610736573d6000803e3d6000fd5b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610e4881610eb8565b610a1061113d565b600082815260026020526040902060010154610e6b81610eb8565b61097f8383611001565b600260005403610eb1576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b610a108133611196565b60015460ff1615610eff576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff16610ff957600083815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff86168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055610f973390565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a450600161042a565b50600061042a565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff1615610ff957600083815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8616808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a450600161042a565b6110c8611226565b600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b611145610ec2565b600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016811790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25833611113565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16611222576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff821660048201526024810183905260440160405180910390fd5b5050565b60015460ff16610eff576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006020828403121561127457600080fd5b81357fffffffff00000000000000000000000000000000000000000000000000000000811681146112a457600080fd5b9392505050565b803573ffffffffffffffffffffffffffffffffffffffff811681146112cf57600080fd5b919050565b6000806000806000608086880312156112ec57600080fd5b6112f5866112ab565b945060208601359350604086013567ffffffffffffffff81111561131857600080fd5b8601601f8101881361132957600080fd5b803567ffffffffffffffff81111561134057600080fd5b88602082840101111561135257600080fd5b959894975060200195606001359392505050565b60008060006060848603121561137b57600080fd5b611384846112ab565b95602085013595506040909401359392505050565b6000602082840312156113ab57600080fd5b5035919050565b600080604083850312156113c557600080fd5b823591506113d5602084016112ab565b90509250929050565b6000602082840312156113f057600080fd5b5051919050565b8082018082111561042a577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff8616815273ffffffffffffffffffffffffffffffffffffffff851660208201528360408201526080606082015260006114cc608083018486611431565b979650505050505050565b8381526040602082015260006114f1604083018486611431565b9594505050505056fea264697066735822122083f8ba25d15d0dacb4bf73d1472e680a549b02f1b26b83dcb21bfef553fb6e1d64736f6c634300081a0033", + ABI: "[{\"type\":\"constructor\",\"inputs\":[{\"name\":\"gateway_\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"zetaToken_\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"tssAddress_\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"admin_\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"DEFAULT_ADMIN_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"PAUSER_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"TSS_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"WITHDRAWER_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"gateway\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIGatewayEVM\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getRoleAdmin\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"grantRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"hasRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"maxSupply\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"pause\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"paused\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"receiveTokens\",\"inputs\":[{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"renounceRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"callerConfirmation\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"revokeRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setMaxSupply\",\"inputs\":[{\"name\":\"maxSupply_\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"supportsInterface\",\"inputs\":[{\"name\":\"interfaceId\",\"type\":\"bytes4\",\"internalType\":\"bytes4\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"unpause\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"withdraw\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"internalSendHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"withdrawAndCall\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"internalSendHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"withdrawAndRevert\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"internalSendHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"zetaToken\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"event\",\"name\":\"MaxSupplyUpdated\",\"inputs\":[{\"name\":\"maxSupply\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Paused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleAdminChanged\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"previousAdminRole\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"newAdminRole\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleGranted\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleRevoked\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Unpaused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Withdraw\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"WithdrawAndCall\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"WithdrawAndRevert\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"AccessControlBadConfirmation\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"AccessControlUnauthorizedAccount\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"neededRole\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"type\":\"error\",\"name\":\"EnforcedPause\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ExceedsMaxSupply\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ExpectedPause\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ReentrancyGuardReentrantCall\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZeroAddress\",\"inputs\":[]}]", + Bin: "0x60c060405260001960035534801561001657600080fd5b5060405161155a38038061155a83398101604081905261003591610220565b60016000819055805460ff19169055838383836001600160a01b038416158061006557506001600160a01b038316155b8061007757506001600160a01b038216155b8061008957506001600160a01b038116155b156100a75760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b03808516608052831660a0526100c5600082610154565b506100f07f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e483610154565b5061011b7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb83610154565b506101467f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a82610154565b505050505050505050610274565b60008281526002602090815260408083206001600160a01b038516845290915281205460ff166101fa5760008381526002602090815260408083206001600160a01b03861684529091529020805460ff191660011790556101b23390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45060016101fe565b5060005b92915050565b80516001600160a01b038116811461021b57600080fd5b919050565b6000806000806080858703121561023657600080fd5b61023f85610204565b935061024d60208601610204565b925061025b60408601610204565b915061026960608601610204565b905092959194509250565b60805160a0516112826102d86000396000818161021d01528181610531015281816108240152818161097b01528181610ad00152610bf20152600081816101d1015281816104a1015281816105040152818161079401526107f701526112826000f3fe608060405234801561001057600080fd5b50600436106101775760003560e01c80635e3e9fef116100d857806391d148541161008c578063d547741f11610066578063d547741f14610386578063d5abeb0114610399578063e63ab1e9146103a257600080fd5b806391d1485414610311578063a217fddf14610357578063a783c7891461035f57600080fd5b8063743e0c9b116100bd578063743e0c9b146102cf5780638456cb59146102e257806385f438c1146102ea57600080fd5b80635e3e9fef146102a95780636f8b44b0146102bc57600080fd5b8063248a9ca31161012f57806336568abe1161011457806336568abe146102835780633f4ba83a146102965780635c975abb1461029e57600080fd5b8063248a9ca31461023f5780632f2ff15d1461027057600080fd5b8063106e629011610160578063106e6290146101b9578063116191b6146101cc57806321e093b11461021857600080fd5b806301ffc9a71461017c57806302d5c899146101a4575b600080fd5b61018f61018a366004610fb4565b6103c9565b60405190151581526020015b60405180910390f35b6101b76101b2366004611026565b610462565b005b6101b76101c73660046110b8565b6105f7565b6101f37f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161019b565b6101f37f000000000000000000000000000000000000000000000000000000000000000081565b61026261024d3660046110eb565b60009081526002602052604090206001015490565b60405190815260200161019b565b6101b761027e366004611104565b61069c565b6101b7610291366004611104565b6106c7565b6101b7610720565b60015460ff1661018f565b6101b76102b7366004611026565b610755565b6101b76102ca3660046110eb565b6108d0565b6101b76102dd3660046110eb565b61093e565b6101b76109e8565b6102627f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b61018f61031f366004611104565b600091825260026020908152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b610262600081565b6102627f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb81565b6101b7610394366004611104565b610a1a565b61026260035481565b6102627f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061045c57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b61046a610a3f565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461049481610a82565b61049c610a8c565b6104c77f00000000000000000000000000000000000000000000000000000000000000008684610acb565b6040517fb8969bd400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063b8969bd490610561907f0000000000000000000000000000000000000000000000000000000000000000908a908a908a908a90600401611179565b600060405180830381600087803b15801561057b57600080fd5b505af115801561058f573d6000803e3d6000fd5b505050508573ffffffffffffffffffffffffffffffffffffffff167fba96f26bdda53eb8c8ba39045dfb4ff39753fbc7a6edcf250a88e75e78d102fe8686866040516105dd939291906111d6565b60405180910390a2506105f06001600055565b5050505050565b6105ff610a3f565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461062981610a82565b610631610a8c565b61063c848484610acb565b8373ffffffffffffffffffffffffffffffffffffffff167f884edad9ce6fa2440d8a54cc123490eb96d2768479d49ff9c7366125a94243648460405161068491815260200190565b60405180910390a2506106976001600055565b505050565b6000828152600260205260409020600101546106b781610a82565b6106c18383610c53565b50505050565b73ffffffffffffffffffffffffffffffffffffffff81163314610716576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6106978282610d53565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61074a81610a82565b610752610e12565b50565b61075d610a3f565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461078781610a82565b61078f610a8c565b6107ba7f00000000000000000000000000000000000000000000000000000000000000008684610acb565b6040517f5131ab5900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690635131ab5990610854907f0000000000000000000000000000000000000000000000000000000000000000908a908a908a908a90600401611179565b600060405180830381600087803b15801561086e57600080fd5b505af1158015610882573d6000803e3d6000fd5b505050508573ffffffffffffffffffffffffffffffffffffffff167f7772f56296d3a5202974a45c61c9188d844ab4d6eeb18c851e4b8d5384ca6ced8686866040516105dd939291906111d6565b7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb6108fa81610a82565b610902610a8c565b60038290556040518281527f7810bd47de260c3e9ee10061cf438099dd12256c79485f12f94dbccc981e806c9060200160405180910390a15050565b610946610a8c565b6040517f79cc6790000000000000000000000000000000000000000000000000000000008152336004820152602481018290527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16906379cc679090604401600060405180830381600087803b1580156109d457600080fd5b505af11580156105f0573d6000803e3d6000fd5b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610a1281610a82565b610752610e8f565b600082815260026020526040902060010154610a3581610a82565b6106c18383610d53565b600260005403610a7b576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b6107528133610ee8565b60015460ff1615610ac9576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6003547f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b39573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b5d91906111f9565b610b679084611212565b1115610b9f576040517fc30436e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f1e458bee00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff848116600483015260248201849052604482018390527f00000000000000000000000000000000000000000000000000000000000000001690631e458bee90606401600060405180830381600087803b158015610c3657600080fd5b505af1158015610c4a573d6000803e3d6000fd5b50505050505050565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff16610d4b57600083815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff86168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055610ce93390565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a450600161045c565b50600061045c565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff1615610d4b57600083815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8616808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a450600161045c565b610e1a610f78565b600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b610e97610a8c565b600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016811790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25833610e65565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16610f74576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff821660048201526024810183905260440160405180910390fd5b5050565b60015460ff16610ac9576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060208284031215610fc657600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610ff657600080fd5b9392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461102157600080fd5b919050565b60008060008060006080868803121561103e57600080fd5b61104786610ffd565b945060208601359350604086013567ffffffffffffffff81111561106a57600080fd5b8601601f8101881361107b57600080fd5b803567ffffffffffffffff81111561109257600080fd5b8860208284010111156110a457600080fd5b959894975060200195606001359392505050565b6000806000606084860312156110cd57600080fd5b6110d684610ffd565b95602085013595506040909401359392505050565b6000602082840312156110fd57600080fd5b5035919050565b6000806040838503121561111757600080fd5b8235915061112760208401610ffd565b90509250929050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff8616815273ffffffffffffffffffffffffffffffffffffffff851660208201528360408201526080606082015260006111cb608083018486611130565b979650505050505050565b8381526040602082015260006111f0604083018486611130565b95945050505050565b60006020828403121561120b57600080fd5b5051919050565b8082018082111561045c577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea2646970667358221220f784eb6e1655c2988d3f762737188cfee07a61da1d5b8456cc4f4e55cb339cfb64736f6c634300081a0033", } // ZetaConnectorNonNativeABI is the input ABI used to generate the binding from. @@ -264,6 +264,37 @@ func (_ZetaConnectorNonNative *ZetaConnectorNonNativeCallerSession) PAUSERROLE() return _ZetaConnectorNonNative.Contract.PAUSERROLE(&_ZetaConnectorNonNative.CallOpts) } +// TSSROLE is a free data retrieval call binding the contract method 0xa783c789. +// +// Solidity: function TSS_ROLE() view returns(bytes32) +func (_ZetaConnectorNonNative *ZetaConnectorNonNativeCaller) TSSROLE(opts *bind.CallOpts) ([32]byte, error) { + var out []interface{} + err := _ZetaConnectorNonNative.contract.Call(opts, &out, "TSS_ROLE") + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// TSSROLE is a free data retrieval call binding the contract method 0xa783c789. +// +// Solidity: function TSS_ROLE() view returns(bytes32) +func (_ZetaConnectorNonNative *ZetaConnectorNonNativeSession) TSSROLE() ([32]byte, error) { + return _ZetaConnectorNonNative.Contract.TSSROLE(&_ZetaConnectorNonNative.CallOpts) +} + +// TSSROLE is a free data retrieval call binding the contract method 0xa783c789. +// +// Solidity: function TSS_ROLE() view returns(bytes32) +func (_ZetaConnectorNonNative *ZetaConnectorNonNativeCallerSession) TSSROLE() ([32]byte, error) { + return _ZetaConnectorNonNative.Contract.TSSROLE(&_ZetaConnectorNonNative.CallOpts) +} + // WITHDRAWERROLE is a free data retrieval call binding the contract method 0x85f438c1. // // Solidity: function WITHDRAWER_ROLE() view returns(bytes32) diff --git a/v2/pkg/zetaconnectornonnative.t.sol/zetaconnectornonnativetest.go b/v2/pkg/zetaconnectornonnative.t.sol/zetaconnectornonnativetest.go index b2e8b56a..50e5b06e 100644 --- a/v2/pkg/zetaconnectornonnative.t.sol/zetaconnectornonnativetest.go +++ b/v2/pkg/zetaconnectornonnative.t.sol/zetaconnectornonnativetest.go @@ -49,8 +49,8 @@ type StdInvariantFuzzSelector struct { // ZetaConnectorNonNativeTestMetaData contains all meta data concerning the ZetaConnectorNonNativeTest contract. var ZetaConnectorNonNativeTestMetaData = &bind.MetaData{ - ABI: "[{\"type\":\"function\",\"name\":\"IS_TEST\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"WITHDRAWER_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeArtifacts\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedArtifacts_\",\"type\":\"string[]\",\"internalType\":\"string[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeContracts\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedContracts_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeSelectors\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedSelectors_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzSelector[]\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"selectors\",\"type\":\"bytes4[]\",\"internalType\":\"bytes4[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeSenders\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedSenders_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"failed\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"setUp\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"targetArtifactSelectors\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedArtifactSelectors_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzArtifactSelector[]\",\"components\":[{\"name\":\"artifact\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"selectors\",\"type\":\"bytes4[]\",\"internalType\":\"bytes4[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetArtifacts\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedArtifacts_\",\"type\":\"string[]\",\"internalType\":\"string[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetContracts\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedContracts_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetInterfaces\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedInterfaces_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzInterface[]\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"artifacts\",\"type\":\"string[]\",\"internalType\":\"string[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetSelectors\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedSelectors_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzSelector[]\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"selectors\",\"type\":\"bytes4[]\",\"internalType\":\"bytes4[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetSenders\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedSenders_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"testWithdraw\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawAndCallReceiveERC20\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawAndCallReceiveERC20FailsIfSenderIsNotWithdrawer\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawAndCallReceiveERC20Partial\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawAndCallReceiveNoParams\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawAndRevert\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawAndRevertFailsIfSenderIsNotWithdrawer\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawFailsIfSenderIsNotWithdrawer\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"event\",\"name\":\"Call\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"receiver\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Deposit\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"receiver\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"asset\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Executed\",\"inputs\":[{\"name\":\"destination\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ExecutedWithERC20\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedERC20\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"token\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"destination\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedNoParams\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedNonPayable\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"strs\",\"type\":\"string[]\",\"indexed\":false,\"internalType\":\"string[]\"},{\"name\":\"nums\",\"type\":\"uint256[]\",\"indexed\":false,\"internalType\":\"uint256[]\"},{\"name\":\"flag\",\"type\":\"bool\",\"indexed\":false,\"internalType\":\"bool\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedPayable\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"str\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"num\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"flag\",\"type\":\"bool\",\"indexed\":false,\"internalType\":\"bool\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedRevert\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Reverted\",\"inputs\":[{\"name\":\"destination\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RevertedWithERC20\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Withdraw\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"WithdrawAndCall\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"WithdrawAndRevert\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log\",\"inputs\":[{\"name\":\"\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_address\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_array\",\"inputs\":[{\"name\":\"val\",\"type\":\"uint256[]\",\"indexed\":false,\"internalType\":\"uint256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_array\",\"inputs\":[{\"name\":\"val\",\"type\":\"int256[]\",\"indexed\":false,\"internalType\":\"int256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_array\",\"inputs\":[{\"name\":\"val\",\"type\":\"address[]\",\"indexed\":false,\"internalType\":\"address[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_bytes\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_bytes32\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_int\",\"inputs\":[{\"name\":\"\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_address\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_array\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"uint256[]\",\"indexed\":false,\"internalType\":\"uint256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_array\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"int256[]\",\"indexed\":false,\"internalType\":\"int256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_array\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"address[]\",\"indexed\":false,\"internalType\":\"address[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_bytes\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_bytes32\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_decimal_int\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"},{\"name\":\"decimals\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_decimal_uint\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"decimals\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_int\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_string\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_uint\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_string\",\"inputs\":[{\"name\":\"\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_uint\",\"inputs\":[{\"name\":\"\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"logs\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"AccessControlUnauthorizedAccount\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"neededRole\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"type\":\"error\",\"name\":\"ApprovalFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"CustodyInitialized\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"DepositFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ExecutionFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientERC20Amount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientETHAmount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZeroAddress\",\"inputs\":[]}]", - Bin: "0x6080604052600c8054600160ff199182168117909255601f80549091169091179055348015602c57600080fd5b5061ddd48061003c6000396000f3fe608060405234801561001057600080fd5b50600436106101825760003560e01c8063916a17c6116100d8578063d509b16c1161008c578063e20c9f7111610066578063e20c9f71146102a8578063fa7626d4146102b0578063fe574f84146102bd57600080fd5b8063d509b16c14610290578063dcf7d03714610298578063de1cb76c146102a057600080fd5b8063b5508aa9116100bd578063b5508aa914610268578063ba414fa614610270578063c19099721461028857600080fd5b8063916a17c61461024b578063b0464fdc1461026057600080fd5b80633f7286f41161013a578063828320141161011457806382832014146101f957806385226c811461020157806385f438c11461021657600080fd5b80633f7286f4146101d457806349346558146101dc57806366d9a9a0146101e457600080fd5b80632ade38801161016b5780632ade3880146101af5780633cba0107146101c45780633e5e3c23146101cc57600080fd5b80630a9254e4146101875780631ed7831c14610191575b600080fd5b61018f6102c5565b005b6101996109c4565b6040516101a69190617b03565b60405180910390f35b6101b7610a26565b6040516101a69190617b9f565b61018f610b68565b610199611343565b6101996113a3565b61018f611403565b6101ec6119f0565b6040516101a69190617d05565b61018f611b72565b610209611de4565b6040516101a69190617da3565b61023d7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b6040519081526020016101a6565b610253611eb4565b6040516101a69190617e1a565b610253611faf565b6102096120aa565b61027861217a565b60405190151581526020016101a6565b61018f61224e565b61018f6124d2565b61018f6128f2565b61018f612f39565b61019961366e565b601f546102789060ff1681565b61018f6136ce565b60258054307fffffffffffffffffffffffff0000000000000000000000000000000000000000918216179091556026805461123490831617905560278054615678921682179055604051819061031a90617a16565b6001600160a01b03928316815291166020820152604001604051809103906000f08015801561034d573d6000803e3d6000fd5b50602480547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039283169081178255604080518082018252600e81527f4761746577617945564d2e736f6c00000000000000000000000000000000000060208201526027546025549251908616948101949094526044840192909252909216606482015261043e919060840160408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fc0c53b8b00000000000000000000000000000000000000000000000000000000179052613905565b601f80547fffffffffffffffffffffff0000000000000000000000000000000000000000ff166101006001600160a01b0393841681029190911791829055602080549190920483167fffffffffffffffffffffffff000000000000000000000000000000000000000090911681179091556027546025546040519293918216929116906104ca90617a23565b6001600160a01b03938416815291831660208301529091166040820152606001604051809103906000f080158015610506573d6000803e3d6000fd5b50602280547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03928316179055602054602454602754602554604051938516949283169391831692169061056190617a30565b6001600160a01b039485168152928416602084015290831660408301529091166060820152608001604051809103906000f0801580156105a5573d6000803e3d6000fd5b50602380547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039283161790556027546040517fca669fa700000000000000000000000000000000000000000000000000000000815291166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561064357600080fd5b505af1158015610657573d6000803e3d6000fd5b5050602480546027546023546040517f15d57fd40000000000000000000000000000000000000000000000000000000081526001600160a01b039283166004820152908216938101939093521692506315d57fd49150604401600060405180830381600087803b1580156106ca57600080fd5b505af11580156106de573d6000803e3d6000fd5b505050506040516106ee90617a3d565b604051809103906000f08015801561070a573d6000803e3d6000fd5b50602180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039283161790556027546040517fc88a5e6d00000000000000000000000000000000000000000000000000000000815291166004820152670de0b6b3a76400006024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c88a5e6d90604401600060405180830381600087803b1580156107b657600080fd5b505af11580156107ca573d6000803e3d6000fd5b50506025546040517f06447d560000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506306447d569150602401600060405180830381600087803b15801561084057600080fd5b505af1158015610854573d6000803e3d6000fd5b50506020546022546040517fae7a3a6f0000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201529116925063ae7a3a6f9150602401600060405180830381600087803b1580156108ba57600080fd5b505af11580156108ce573d6000803e3d6000fd5b50506020546023546040517f10188aef0000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152911692506310188aef9150602401600060405180830381600087803b15801561093457600080fd5b505af1158015610948573d6000803e3d6000fd5b505050507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b03166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156109aa57600080fd5b505af11580156109be573d6000803e3d6000fd5b50505050565b60606016805480602002602001604051908101604052809291908181526020018280548015610a1c57602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116109fe575b5050505050905090565b6060601e805480602002602001604051908101604052809291908181526020016000905b82821015610b5f57600084815260208082206040805180820182526002870290920180546001600160a01b03168352600181018054835181870281018701909452808452939591948681019491929084015b82821015610b48578382906000526020600020018054610abb90617eb1565b80601f0160208091040260200160405190810160405280929190818152602001828054610ae790617eb1565b8015610b345780601f10610b0957610100808354040283529160200191610b34565b820191906000526020600020905b815481529060010190602001808311610b1757829003601f168201915b505050505081526020019060010190610a9c565b505050508152505081526020019060010190610a4a565b50505050905090565b60248054602654604051620186a09381018490526001600160a01b03928316604482015291166064820152600090819060840160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f357fc5a2000000000000000000000000000000000000000000000000000000001790526024805460265492516370a0823160e01b81526001600160a01b0393841660048201529394506000939216916370a082319101602060405180830381865afa158015610c43573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c679190617efe565b9050610c74816000613924565b602480546023546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa158015610cc4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ce89190617efe565b9050610cf5816000613924565b6020546040516001600160a01b039091166024820152604481018690526064810185905260009060840160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f1e458bee0000000000000000000000000000000000000000000000000000000017905260245490517ff30c7ba3000000000000000000000000000000000000000000000000000000008152919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f30c7ba391610ddc916001600160a01b0391909116906000908690600401617f17565b600060405180830381600087803b158015610df657600080fd5b505af1158015610e0a573d6000803e3d6000fd5b50506021546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b158015610e9c57600080fd5b505af1158015610eb0573d6000803e3d6000fd5b505060208054602454602654604080516001600160a01b0394851681529485018d905291831684830152919091166060830152517f2b58128f24a9f59127cc5b5430d70542b22220f2d9adaa86e442b816ab98af609350908190036080019150a16023546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b158015610f9f57600080fd5b505af1158015610fb3573d6000803e3d6000fd5b50506021546040516001600160a01b0390911692507f7772f56296d3a5202974a45c61c9188d844ab4d6eeb18c851e4b8d5384ca6ced9150610ff89089908890617f3f565b60405180910390a26027546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561107257600080fd5b505af1158015611086573d6000803e3d6000fd5b50506023546021546040517f5e3e9fef0000000000000000000000000000000000000000000000000000000081526001600160a01b039283169450635e3e9fef93506110de92909116908a9089908b90600401617f58565b600060405180830381600087803b1580156110f857600080fd5b505af115801561110c573d6000803e3d6000fd5b5050602480546026546040516370a0823160e01b81526001600160a01b03918216600482015260009550911692506370a082319101602060405180830381865afa15801561115e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111829190617efe565b905061118e8188613924565b602480546023546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa1580156111de573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112029190617efe565b905061120f816000613924565b602480546020546021546040517fdd62ed3e0000000000000000000000000000000000000000000000000000000081526001600160a01b0392831660048201529082169381019390935260009291169063dd62ed3e90604401602060405180830381865afa158015611285573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112a99190617efe565b90506112b6816000613924565b602480546020546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa158015611306573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061132a9190617efe565b9050611337816000613924565b50505050505050505050565b60606018805480602002602001604051908101604052809291908181526020018280548015610a1c576020028201919060005260206000209081546001600160a01b031681526001909101906020018083116109fe575050505050905090565b60606017805480602002602001604051908101604052809291908181526020018280548015610a1c576020028201919060005260206000209081546001600160a01b031681526001909101906020018083116109fe575050505050905090565b604080516004808252602480830184526020830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f6ed70169000000000000000000000000000000000000000000000000000000001790525460265493516370a0823160e01b8152620186a0946000949385936001600160a01b03908116936370a08231936114a493921691016001600160a01b0391909116815260200190565b602060405180830381865afa1580156114c1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114e59190617efe565b90506114f2816000613924565b602480546023546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa158015611542573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115669190617efe565b9050611573816000613924565b6020546040516001600160a01b039091166024820152604481018690526064810185905260009060840160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f1e458bee0000000000000000000000000000000000000000000000000000000017905260245490517ff30c7ba3000000000000000000000000000000000000000000000000000000008152919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f30c7ba39161165a916001600160a01b0391909116906000908690600401617f17565b600060405180830381600087803b15801561167457600080fd5b505af1158015611688573d6000803e3d6000fd5b50506021546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b15801561171a57600080fd5b505af115801561172e573d6000803e3d6000fd5b5050602080546040516001600160a01b0390911681527fbcaadb46b82a48af60b608f58959ae6b8310d1b0a0d094c2e9ec3208ed39f2a0935001905060405180910390a16023546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b15801561180057600080fd5b505af1158015611814573d6000803e3d6000fd5b50506021546040516001600160a01b0390911692507f7772f56296d3a5202974a45c61c9188d844ab4d6eeb18c851e4b8d5384ca6ced91506118599089908890617f3f565b60405180910390a26027546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156118d357600080fd5b505af11580156118e7573d6000803e3d6000fd5b50506023546021546040517f5e3e9fef0000000000000000000000000000000000000000000000000000000081526001600160a01b039283169450635e3e9fef935061193f92909116908a9089908b90600401617f58565b600060405180830381600087803b15801561195957600080fd5b505af115801561196d573d6000803e3d6000fd5b5050602480546026546040516370a0823160e01b81526001600160a01b03918216600482015260009550911692506370a082319101602060405180830381865afa1580156119bf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119e39190617efe565b905061118e816000613924565b6060601b805480602002602001604051908101604052809291908181526020016000905b82821015610b5f5783829060005260206000209060020201604051806040016040529081600082018054611a4790617eb1565b80601f0160208091040260200160405190810160405280929190818152602001828054611a7390617eb1565b8015611ac05780601f10611a9557610100808354040283529160200191611ac0565b820191906000526020600020905b815481529060010190602001808311611aa357829003601f168201915b5050505050815260200160018201805480602002602001604051908101604052809291908181526020018280548015611b5a57602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019060040190602082600301049283019260010382029150808411611b075790505b50505050508152505081526020019060010190611a14565b6040517f68656c6c6f0000000000000000000000000000000000000000000000000000006020820152620186a090600090819060250160408051808303601f19018152908290526025547fca669fa70000000000000000000000000000000000000000000000000000000083526001600160a01b031660048301529150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015611c2857600080fd5b505af1158015611c3c573d6000803e3d6000fd5b5050602554604080516001600160a01b0390921660248301527f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e460448084019190915281518084039091018152606490920181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb39250611d279190600401617f91565b600060405180830381600087803b158015611d4157600080fd5b505af1158015611d55573d6000803e3d6000fd5b50506023546021546040517f02d5c8990000000000000000000000000000000000000000000000000000000081526001600160a01b0392831694506302d5c8999350611dad9290911690879086908890600401617f58565b600060405180830381600087803b158015611dc757600080fd5b505af1158015611ddb573d6000803e3d6000fd5b50505050505050565b6060601a805480602002602001604051908101604052809291908181526020016000905b82821015610b5f578382906000526020600020018054611e2790617eb1565b80601f0160208091040260200160405190810160405280929190818152602001828054611e5390617eb1565b8015611ea05780601f10611e7557610100808354040283529160200191611ea0565b820191906000526020600020905b815481529060010190602001808311611e8357829003601f168201915b505050505081526020019060010190611e08565b6060601d805480602002602001604051908101604052809291908181526020016000905b82821015610b5f5760008481526020908190206040805180820182526002860290920180546001600160a01b03168352600181018054835181870281018701909452808452939491938583019392830182828015611f9757602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019060040190602082600301049283019260010382029150808411611f445790505b50505050508152505081526020019060010190611ed8565b6060601c805480602002602001604051908101604052809291908181526020016000905b82821015610b5f5760008481526020908190206040805180820182526002860290920180546001600160a01b0316835260018101805483518187028101870190945280845293949193858301939283018282801561209257602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168152602001906004019060208260030104928301926001038202915080841161203f5790505b50505050508152505081526020019060010190611fd3565b60606019805480602002602001604051908101604052809291908181526020016000905b82821015610b5f5783829060005260206000200180546120ed90617eb1565b80601f016020809104026020016040519081016040528092919081815260200182805461211990617eb1565b80156121665780601f1061213b57610100808354040283529160200191612166565b820191906000526020600020905b81548152906001019060200180831161214957829003601f168201915b5050505050815260200190600101906120ce565b60085460009060ff1615612192575060085460ff1690565b6040517f667f9d70000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d600482018190527f6661696c65640000000000000000000000000000000000000000000000000000602483015260009163667f9d7090604401602060405180830381865afa158015612223573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122479190617efe565b1415905090565b60248054602654604051620186a09381018490526001600160a01b03928316604482015291166064820152600090819060840160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f357fc5a20000000000000000000000000000000000000000000000000000000017905260255490517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561234d57600080fd5b505af1158015612361573d6000803e3d6000fd5b5050602554604080516001600160a01b0390921660248301527f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e460448084019190915281518084039091018152606490920181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb3925061244c9190600401617f91565b600060405180830381600087803b15801561246657600080fd5b505af115801561247a573d6000803e3d6000fd5b50506023546021546040517f5e3e9fef0000000000000000000000000000000000000000000000000000000081526001600160a01b039283169450635e3e9fef9350611dad9290911690879086908890600401617f58565b602480546026546040516370a0823160e01b81526001600160a01b039182166004820152620186a09360009392909216916370a082319101602060405180830381865afa158015612527573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061254b9190617efe565b9050612558816000613924565b6026546040516001600160a01b0390911660248201526044810183905260006064820181905290819060840160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f1e458bee0000000000000000000000000000000000000000000000000000000017905260245490517ff30c7ba3000000000000000000000000000000000000000000000000000000008152919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f30c7ba391612641916001600160a01b0391909116906000908690600401617f17565b600060405180830381600087803b15801561265b57600080fd5b505af115801561266f573d6000803e3d6000fd5b50506023546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b15801561270157600080fd5b505af1158015612715573d6000803e3d6000fd5b50506026546040518781526001600160a01b0390911692507f884edad9ce6fa2440d8a54cc123490eb96d2768479d49ff9c7366125a9424364915060200160405180910390a26027546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156127cd57600080fd5b505af11580156127e1573d6000803e3d6000fd5b50506023546026546040517f106e62900000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260248101899052604481018790529116925063106e62909150606401600060405180830381600087803b15801561285557600080fd5b505af1158015612869573d6000803e3d6000fd5b5050602480546026546040516370a0823160e01b81526001600160a01b03918216600482015260009550911692506370a082319101602060405180830381865afa1580156128bb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128df9190617efe565b90506128eb8186613924565b5050505050565b60248054602654604051620186a09381018490526001600160a01b03928316604482015291166064820152600090819060840160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fc5131691000000000000000000000000000000000000000000000000000000001790526024805460265492516370a0823160e01b81526001600160a01b0393841660048201529394506000939216916370a082319101602060405180830381865afa1580156129cd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129f19190617efe565b90506129fe816000613924565b602480546023546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa158015612a4e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a729190617efe565b9050612a7f816000613924565b6020546040516001600160a01b039091166024820152604481018690526064810185905260009060840160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f1e458bee0000000000000000000000000000000000000000000000000000000017905260245490517ff30c7ba3000000000000000000000000000000000000000000000000000000008152919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f30c7ba391612b66916001600160a01b0391909116906000908690600401617f17565b600060405180830381600087803b158015612b8057600080fd5b505af1158015612b94573d6000803e3d6000fd5b50506021546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b158015612c2657600080fd5b505af1158015612c3a573d6000803e3d6000fd5b50506020547f2b58128f24a9f59127cc5b5430d70542b22220f2d9adaa86e442b816ab98af6092506001600160a01b03169050612c78600289617fd3565b602454602654604080516001600160a01b03958616815260208101949094529184168383015292909216606082015290519081900360800190a16023546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b158015612d4057600080fd5b505af1158015612d54573d6000803e3d6000fd5b50506021546040516001600160a01b0390911692507f7772f56296d3a5202974a45c61c9188d844ab4d6eeb18c851e4b8d5384ca6ced9150612d999089908890617f3f565b60405180910390a26027546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015612e1357600080fd5b505af1158015612e27573d6000803e3d6000fd5b50506023546021546040517f5e3e9fef0000000000000000000000000000000000000000000000000000000081526001600160a01b039283169450635e3e9fef9350612e7f92909116908a9089908b90600401617f58565b600060405180830381600087803b158015612e9957600080fd5b505af1158015612ead573d6000803e3d6000fd5b5050602480546026546040516370a0823160e01b81526001600160a01b03918216600482015260009550911692506370a082319101602060405180830381865afa158015612eff573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f239190617efe565b905061118e81612f3460028a617fd3565b613924565b6040517f68656c6c6f0000000000000000000000000000000000000000000000000000006020820152620186a090600090819060250160408051808303601f1901815290829052602480546021546370a0823160e01b85526001600160a01b0390811660048601529294506000939216916370a082319101602060405180830381865afa158015612fce573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ff29190617efe565b9050612fff816000613924565b602480546023546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa15801561304f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130739190617efe565b6020546040516001600160a01b039091166024820152604481018790526064810186905290915060009060840160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f1e458bee0000000000000000000000000000000000000000000000000000000017905260245490517ff30c7ba3000000000000000000000000000000000000000000000000000000008152919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f30c7ba39161315d916001600160a01b0391909116906000908690600401617f17565b600060405180830381600087803b15801561317757600080fd5b505af115801561318b573d6000803e3d6000fd5b50506021546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b15801561321d57600080fd5b505af1158015613231573d6000803e3d6000fd5b50506020546040517f0d3f65f00e631663aa85c96330b5c7a83bb29af3630c0063776f985edc3037aa935061327492506001600160a01b0390911690879061800e565b60405180910390a16020546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b15801561330a57600080fd5b505af115801561331e573d6000803e3d6000fd5b50506021546024546040516001600160a01b039283169450911691507f723fc7be2448075379e4fdf1e6bf5fead954d2668d2da05dcb44ccfec4beeda790613369908a908990617f3f565b60405180910390a36023546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b1580156133ff57600080fd5b505af1158015613413573d6000803e3d6000fd5b50506021546040516001600160a01b0390911692507fba96f26bdda53eb8c8ba39045dfb4ff39753fbc7a6edcf250a88e75e78d102fe91506134589089908890617f3f565b60405180910390a26027546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156134d257600080fd5b505af11580156134e6573d6000803e3d6000fd5b50506023546021546040517f02d5c8990000000000000000000000000000000000000000000000000000000081526001600160a01b0392831694506302d5c899935061353e92909116908a9089908b90600401617f58565b600060405180830381600087803b15801561355857600080fd5b505af115801561356c573d6000803e3d6000fd5b5050602480546021546040516370a0823160e01b81526001600160a01b03918216600482015260009550911692506370a082319101602060405180830381865afa1580156135be573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135e29190617efe565b90506135ee8188613924565b602480546023546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa15801561363e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136629190617efe565b905061120f8185613924565b60606015805480602002602001604051908101604052809291908181526020018280548015610a1c576020028201919060005260206000209081546001600160a01b031681526001909101906020018083116109fe575050505050905090565b6025546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152620186a090600090737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561374857600080fd5b505af115801561375c573d6000803e3d6000fd5b5050602554604080516001600160a01b0390921660248301527f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e460448084019190915281518084039091018152606490920181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb392506138479190600401617f91565b600060405180830381600087803b15801561386157600080fd5b505af1158015613875573d6000803e3d6000fd5b50506023546026546040517f106e62900000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260248101879052604481018690529116925063106e62909150606401600060405180830381600087803b1580156138e957600080fd5b505af11580156138fd573d6000803e3d6000fd5b505050505050565b600061390f617a4a565b61391a8484836139a3565b9150505b92915050565b6040517f98296c540000000000000000000000000000000000000000000000000000000081526004810183905260248101829052737109709ecfa91a80626ff3989d68f67f5b1dd12d906398296c549060440160006040518083038186803b15801561398f57600080fd5b505afa1580156138fd573d6000803e3d6000fd5b6000806139b08584613a1e565b9050613a136040518060400160405280601d81526020017f4552433139363750726f78792e736f6c3a4552433139363750726f787900000081525082866040516020016139fe92919061800e565b60405160208183030381529060405285613a2a565b9150505b9392505050565b6000613a178383613a58565b60c08101515160009015613a4e57613a4784848460c00151613a73565b9050613a17565b613a478484613c19565b6000613a648383613d04565b613a1783836020015184613a2a565b600080613a7e613d14565b90506000613a8c8683613de7565b90506000613aa3826060015183602001518561428d565b90506000613ab38383898961449f565b90506000613ac08261531c565b602081015181519192509060030b15613b3357898260400151604051602001613aea929190618030565b60408051601f19818403018152908290527f08c379a0000000000000000000000000000000000000000000000000000000008252613b2a91600401617f91565b60405180910390fd5b6000613b766040518060400160405280601581526020017f4465706c6f79656420746f20616464726573733a2000000000000000000000008152508360016154eb565b6040517fc6ce059d000000000000000000000000000000000000000000000000000000008152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c6ce059d90613bc9908490600401617f91565b602060405180830381865afa158015613be6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613c0a91906180b1565b9b9a5050505050505050505050565b6040517f8d1cc9250000000000000000000000000000000000000000000000000000000081526000908190737109709ecfa91a80626ff3989d68f67f5b1dd12d90638d1cc92590613c6e908790600401617f91565b600060405180830381865afa158015613c8b573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052613cb391908101906181c2565b90506000613ce18285604051602001613ccd9291906181f7565b6040516020818303038152906040526156eb565b90506001600160a01b03811661391a578484604051602001613aea929190618226565b613d10828260006156fe565b5050565b604080518082018252600381527f6f75740000000000000000000000000000000000000000000000000000000000602082015290517fd145736c000000000000000000000000000000000000000000000000000000008152606091737109709ecfa91a80626ff3989d68f67f5b1dd12d91829063d145736c90613d9b9084906004016182d1565b600060405180830381865afa158015613db8573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052613de09190810190618318565b9250505090565b613e196040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b6000737109709ecfa91a80626ff3989d68f67f5b1dd12d9050613e646040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b613e6d85615801565b60208201526000613e7d86615be6565b90506000836001600160a01b031663d930a0e66040518163ffffffff1660e01b8152600401600060405180830381865afa158015613ebf573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052613ee79190810190618318565b86838560200151604051602001613f019493929190618361565b60408051601f19818403018152908290527f60f9bb1100000000000000000000000000000000000000000000000000000000825291506000906001600160a01b038616906360f9bb1190613f59908590600401617f91565b600060405180830381865afa158015613f76573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052613f9e9190810190618318565b6040517fdb4235f60000000000000000000000000000000000000000000000000000000081529091506001600160a01b0386169063db4235f690613fe6908490600401618465565b602060405180830381865afa158015614003573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061402791906184b7565b61403c5781604051602001613aea91906184d9565b6040517f49c4fac80000000000000000000000000000000000000000000000000000000081526001600160a01b038616906349c4fac89061408190849060040161856b565b600060405180830381865afa15801561409e573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526140c69190810190618318565b84526040517fdb4235f60000000000000000000000000000000000000000000000000000000081526001600160a01b0386169063db4235f69061410d9084906004016185bd565b602060405180830381865afa15801561412a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061414e91906184b7565b156141e3576040517f49c4fac80000000000000000000000000000000000000000000000000000000081526001600160a01b038616906349c4fac8906141989084906004016185bd565b600060405180830381865afa1580156141b5573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526141dd9190810190618318565b60408501525b846001600160a01b03166349c4fac8828660000151604051602001614208919061860f565b6040516020818303038152906040526040518363ffffffff1660e01b815260040161423492919061867b565b600060405180830381865afa158015614251573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526142799190810190618318565b606085015250608083015250949350505050565b60408051600480825260a0820190925260609160009190816020015b60608152602001906001900390816142a95790505090506040518060400160405280600481526020017f677265700000000000000000000000000000000000000000000000000000000081525081600081518110614309576143096186a0565b60200260200101819052506040518060400160405280600381526020017f2d726c00000000000000000000000000000000000000000000000000000000008152508160018151811061435d5761435d6186a0565b60200260200101819052508460405160200161437991906186cf565b6040516020818303038152906040528160028151811061439b5761439b6186a0565b6020026020010181905250826040516020016143b7919061873b565b604051602081830303815290604052816003815181106143d9576143d96186a0565b602002602001018190525060006143ef8261531c565b602080820151604080518082018252600581527f2e6a736f6e00000000000000000000000000000000000000000000000000000081850190815282518084018452600080825290860152825180840190935290518252928101929092529192506144809060408051808201825260008082526020918201528151808301909252845182528085019082015290615e69565b6144955785604051602001613aea919061877c565b9695505050505050565b60a0810151604080518082018252600080825260209182015281518083019092528251808352928101910152606090737109709ecfa91a80626ff3989d68f67f5b1dd12d90156144ef565b511590565b614663578260200151156145ab576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605860248201527f54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f742060448201527f62652075736564207768656e207468652060736b6970566572696679536f757260648201527f6365436f646560206f7074696f6e206973206074727565600000000000000000608482015260a401613b2a565b8260c0015115614663576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605360248201527f54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f742060448201527f62652075736564207768656e207468652060736b69704c6963656e736554797060648201527f6560206f7074696f6e2069732060747275656000000000000000000000000000608482015260a401613b2a565b6040805160ff8082526120008201909252600091816020015b606081526020019060019003908161467c57905050905060006040518060400160405280600381526020017f6e707800000000000000000000000000000000000000000000000000000000008152508282806146d79061880d565b935060ff16815181106146ec576146ec6186a0565b60200260200101819052506040518060400160405280600d81526020017f302e302e312d616c7068612e370000000000000000000000000000000000000081525060405160200161473d919061882c565b6040516020818303038152906040528282806147589061880d565b935060ff168151811061476d5761476d6186a0565b60200260200101819052506040518060400160405280600681526020017f6465706c6f7900000000000000000000000000000000000000000000000000008152508282806147ba9061880d565b935060ff16815181106147cf576147cf6186a0565b60200260200101819052506040518060400160405280600e81526020017f2d2d636f6e74726163744e616d6500000000000000000000000000000000000081525082828061481c9061880d565b935060ff1681518110614831576148316186a0565b6020026020010181905250876020015182828061484d9061880d565b935060ff1681518110614862576148626186a0565b60200260200101819052506040518060400160405280600e81526020017f2d2d636f6e7472616374506174680000000000000000000000000000000000008152508282806148af9061880d565b935060ff16815181106148c4576148c46186a0565b6020908102919091010152875182826148dc8161880d565b935060ff16815181106148f1576148f16186a0565b60200260200101819052506040518060400160405280600981526020017f2d2d636861696e4964000000000000000000000000000000000000000000000081525082828061493e9061880d565b935060ff1681518110614953576149536186a0565b602002602001018190525061496746615eca565b82826149728161880d565b935060ff1681518110614987576149876186a0565b60200260200101819052506040518060400160405280600f81526020017f2d2d6275696c64496e666f46696c6500000000000000000000000000000000008152508282806149d49061880d565b935060ff16815181106149e9576149e96186a0565b602002602001018190525086828280614a019061880d565b935060ff1681518110614a1657614a166186a0565b6020908102919091010152855115614b3d5760408051808201909152601581527f2d2d636f6e7374727563746f7242797465636f6465000000000000000000000060208201528282614a678161880d565b935060ff1681518110614a7c57614a7c6186a0565b60209081029190910101526040517f71aad10d0000000000000000000000000000000000000000000000000000000081526001600160a01b038416906371aad10d90614acc908990600401617f91565b600060405180830381865afa158015614ae9573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052614b119190810190618318565b8282614b1c8161880d565b935060ff1681518110614b3157614b316186a0565b60200260200101819052505b846020015115614c0d5760408051808201909152601281527f2d2d766572696679536f75726365436f6465000000000000000000000000000060208201528282614b868161880d565b935060ff1681518110614b9b57614b9b6186a0565b60200260200101819052506040518060400160405280600581526020017f66616c7365000000000000000000000000000000000000000000000000000000815250828280614be89061880d565b935060ff1681518110614bfd57614bfd6186a0565b6020026020010181905250614dd4565b614c456144ea8660a0015160408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b614cd85760408051808201909152600d81527f2d2d6c6963656e7365547970650000000000000000000000000000000000000060208201528282614c888161880d565b935060ff1681518110614c9d57614c9d6186a0565b60200260200101819052508460a00151604051602001614cbd91906186cf565b604051602081830303815290604052828280614be89061880d565b8460c00151158015614d1b575060408089015181518083018352600080825260209182015282518084019093528151835290810190820152614d1990511590565b155b15614dd45760408051808201909152600d81527f2d2d6c6963656e7365547970650000000000000000000000000000000000000060208201528282614d5f8161880d565b935060ff1681518110614d7457614d746186a0565b6020026020010181905250614d8888615f6a565b604051602001614d9891906186cf565b604051602081830303815290604052828280614db39061880d565b935060ff1681518110614dc857614dc86186a0565b60200260200101819052505b60408086015181518083018352600080825260209182015282518084019093528151835290810190820152614e0890511590565b614e9d5760408051808201909152600b81527f2d2d72656c61796572496400000000000000000000000000000000000000000060208201528282614e4b8161880d565b935060ff1681518110614e6057614e606186a0565b60200260200101819052508460400151828280614e7c9061880d565b935060ff1681518110614e9157614e916186a0565b60200260200101819052505b606085015115614fbe5760408051808201909152600681527f2d2d73616c74000000000000000000000000000000000000000000000000000060208201528282614ee68161880d565b935060ff1681518110614efb57614efb6186a0565b602090810291909101015260608501516040517fb11a19e800000000000000000000000000000000000000000000000000000000815260048101919091526001600160a01b0384169063b11a19e890602401600060405180830381865afa158015614f6a573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052614f929190810190618318565b8282614f9d8161880d565b935060ff1681518110614fb257614fb26186a0565b60200260200101819052505b60e085015151156150655760408051808201909152600a81527f2d2d6761734c696d697400000000000000000000000000000000000000000000602082015282826150088161880d565b935060ff168151811061501d5761501d6186a0565b60200260200101819052506150398560e0015160000151615eca565b82826150448161880d565b935060ff1681518110615059576150596186a0565b60200260200101819052505b60e0850151602001511561510f5760408051808201909152600a81527f2d2d676173507269636500000000000000000000000000000000000000000000602082015282826150b28161880d565b935060ff16815181106150c7576150c76186a0565b60200260200101819052506150e38560e0015160200151615eca565b82826150ee8161880d565b935060ff1681518110615103576151036186a0565b60200260200101819052505b60e085015160400151156151b95760408051808201909152600e81527f2d2d6d61784665655065724761730000000000000000000000000000000000006020820152828261515c8161880d565b935060ff1681518110615171576151716186a0565b602002602001018190525061518d8560e0015160400151615eca565b82826151988161880d565b935060ff16815181106151ad576151ad6186a0565b60200260200101819052505b60e085015160600151156152635760408051808201909152601681527f2d2d6d61785072696f7269747946656550657247617300000000000000000000602082015282826152068161880d565b935060ff168151811061521b5761521b6186a0565b60200260200101819052506152378560e0015160600151615eca565b82826152428161880d565b935060ff1681518110615257576152576186a0565b60200260200101819052505b60008160ff1667ffffffffffffffff811115615281576152816180da565b6040519080825280602002602001820160405280156152b457816020015b606081526020019060019003908161529f5790505b50905060005b8260ff168160ff16101561530d57838160ff16815181106152dd576152dd6186a0565b6020026020010151828260ff16815181106152fa576152fa6186a0565b60209081029190910101526001016152ba565b5093505050505b949350505050565b6153436040518060600160405280600060030b815260200160608152602001606081525090565b60408051808201825260048082527f6261736800000000000000000000000000000000000000000000000000000000602083015291517fd145736c000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d92600091849163d145736c916153c991869101618897565b600060405180830381865afa1580156153e6573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261540e9190810190618318565b9050600061541c8683616a59565b90506000846001600160a01b031663f45c1ce7836040518263ffffffff1660e01b815260040161544c9190617da3565b6000604051808303816000875af115801561546b573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261549391908101906188de565b805190915060030b158015906154ac5750602081015151155b80156154bb5750604081015151155b1561449557816000815181106154d3576154d36186a0565b6020026020010151604051602001613aea9190618994565b606060006155208560408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6040805180820182526000808252602091820152815180830190925286518252808701908201529091506155579082905b90616bae565b156156b45760006155d4826155ce846155c861559a8a60408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6040805180820182526000808252602091820152815180830190925282518252918201519181019190915290565b90616bd5565b90616c37565b604080518082018252600181527f0a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152909150615638908290616bae565b156156a257604080518082018252600181527f0a000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261569f905b8290616cbc565b90505b6156ab81616ce2565b92505050613a17565b82156156cd578484604051602001613aea929190618b80565b5050604080516020810190915260008152613a17565b509392505050565b6000808251602084016000f09392505050565b8160a001511561570d57505050565b600061571a848484616d4b565b905060006157278261531c565b602081015181519192509060030b1580156157c35750604080518082018252600781527f5355434345535300000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526157c390604080518082018252600080825260209182015281518083019092528451825280850190820152615551565b156157d057505050505050565b604082015151156157f0578160400151604051602001613aea9190618c27565b80604051602001613aea9190618c85565b606060006158368360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600481527f2e736f6c000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015290915061589b905b8290615e69565b1561590a57604080518082018252600481527f2e736f6c0000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152613a17906159059083906172e6565b616ce2565b604080518082018252600181527f3a000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261596c905b8290617370565b600103615a3957604080518082018252600181527f3a00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526159d290615698565b50604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152613a1790615905905b8390616cbc565b604080518082018252600581527f2e6a736f6e00000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152615a9890615894565b15615bcf57604080518082018252600181527f2f00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820181905284518086019095529251845283015290615b0090839061740a565b905060008160018351615b139190618cf0565b81518110615b2357615b236186a0565b60200260200101519050615bc6615905615b996040518060400160405280600581526020017f2e6a736f6e00000000000000000000000000000000000000000000000000000081525060408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600080825260209182015281518083019092528551825280860190820152906172e6565b95945050505050565b82604051602001613aea9190618d03565b50919050565b60606000615c1b8360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600481527f2e736f6c0000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152909150615c7d90615894565b15615c8b57613a1781616ce2565b604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152615cea90615965565b600103615d5457604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152613a179061590590615a32565b604080518082018252600581527f2e6a736f6e00000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152615db390615894565b15615bcf57604080518082018252600181527f2f00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820181905284518086019095529251845283015290615e1b90839061740a565b9050600181511115615e57578060028251615e369190618cf0565b81518110615e4657615e466186a0565b602002602001015192505050919050565b5082604051602001613aea9190618d03565b805182516000911115615e7e5750600061391e565b81518351602085015160009291615e9491618de1565b615e9e9190618cf0565b905082602001518103615eb557600191505061391e565b82516020840151819020912014905092915050565b60606000615ed7836174af565b600101905060008167ffffffffffffffff811115615ef757615ef76180da565b6040519080825280601f01601f191660200182016040528015615f21576020820181803683370190505b5090508181016020015b600019017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a8504945084615f2b57509392505050565b604081810151815180830183526000808252602091820181905283518085018552835181529282018383015283518085018552600a81527f554e4c4943454e5345440000000000000000000000000000000000000000000081840190815285518087018752838152840192909252845180860190955251845290830152606091615ff6905b8290617591565b1561603657505060408051808201909152600481527f4e6f6e65000000000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600981527f556e6c6963656e736500000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261609590615fef565b156160d557505060408051808201909152600981527f556e6c6963656e736500000000000000000000000000000000000000000000006020820152919050565b604080518082018252600381527f4d495400000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261613490615fef565b1561617457505060408051808201909152600381527f4d495400000000000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f47504c2d322e302d6f6e6c790000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526161d390615fef565b806162385750604080518082018252601081527f47504c2d322e302d6f722d6c61746572000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261623890615fef565b1561627857505060408051808201909152600981527f474e552047504c763200000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f47504c2d332e302d6f6e6c790000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526162d790615fef565b8061633c5750604080518082018252601081527f47504c2d332e302d6f722d6c61746572000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261633c90615fef565b1561637c57505060408051808201909152600981527f474e552047504c763300000000000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4c47504c2d322e312d6f6e6c7900000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526163db90615fef565b806164405750604080518082018252601181527f4c47504c2d322e312d6f722d6c617465720000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261644090615fef565b1561648057505060408051808201909152600c81527f474e55204c47504c76322e3100000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4c47504c2d332e302d6f6e6c7900000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526164df90615fef565b806165445750604080518082018252601181527f4c47504c2d332e302d6f722d6c617465720000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261654490615fef565b1561658457505060408051808201909152600a81527f474e55204c47504c7633000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f4253442d322d436c617573650000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526165e390615fef565b1561662357505060408051808201909152600c81527f4253442d322d436c6175736500000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f4253442d332d436c6175736500000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261668290615fef565b156166c257505060408051808201909152600c81527f4253442d332d436c6175736500000000000000000000000000000000000000006020820152919050565b604080518082018252600781527f4d504c2d322e30000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261672190615fef565b1561676157505060408051808201909152600781527f4d504c2d322e30000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600781527f4f534c2d332e3000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526167c090615fef565b1561680057505060408051808201909152600781527f4f534c2d332e30000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600a81527f4170616368652d322e30000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261685f90615fef565b1561689f57505060408051808201909152600a81527f4170616368652d322e30000000000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4147504c2d332e302d6f6e6c7900000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526168fe90615fef565b806169635750604080518082018252601181527f4147504c2d332e302d6f722d6c617465720000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261696390615fef565b156169a357505060408051808201909152600a81527f474e55204147504c7633000000000000000000000000000000000000000000006020820152919050565b604080518082018252600881527f4255534c2d312e3100000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616a0290615fef565b15616a4257505060408051808201909152600781527f42534c20312e31000000000000000000000000000000000000000000000000006020820152919050565b60408084015184519151613aea9290602001618df4565b60608060005b8451811015616ae45781858281518110616a7b57616a7b6186a0565b6020026020010151604051602001616a949291906181f7565b604051602081830303815290604052915060018551616ab39190618cf0565b8114616adc5781604051602001616aca9190618f5d565b60405160208183030381529060405291505b600101616a5f565b5060408051600380825260808201909252600091816020015b6060815260200190600190039081616afd5790505090508381600081518110616b2857616b286186a0565b60200260200101819052506040518060400160405280600281526020017f2d6300000000000000000000000000000000000000000000000000000000000081525081600181518110616b7c57616b7c6186a0565b60200260200101819052508181600281518110616b9b57616b9b6186a0565b6020908102919091010152949350505050565b6020808301518351835192840151600093616bcc92918491906175a5565b14159392505050565b60408051808201909152600080825260208201526000616c0784600001518560200151856000015186602001516176b6565b9050836020015181616c199190618cf0565b84518590616c28908390618cf0565b90525060208401525090919050565b6040805180820190915260008082526020820152815183511015616c5c57508161391e565b6020808301519084015160019114616c835750815160208481015190840151829020919020145b8015616cb457825184518590616c9a908390618cf0565b9052508251602085018051616cb0908390618de1565b9052505b509192915050565b6040805180820190915260008082526020820152616cdb8383836177d6565b5092915050565b60606000826000015167ffffffffffffffff811115616d0357616d036180da565b6040519080825280601f01601f191660200182016040528015616d2d576020820181803683370190505b5090506000602082019050616cdb8185602001518660000151617881565b60606000616d57613d14565b6040805160ff808252612000820190925291925060009190816020015b6060815260200190600190039081616d7457905050905060006040518060400160405280600381526020017f6e70780000000000000000000000000000000000000000000000000000000000815250828280616dcf9061880d565b935060ff1681518110616de457616de46186a0565b60200260200101819052506040518060400160405280600781526020017f5e312e33322e3300000000000000000000000000000000000000000000000000815250604051602001616e359190618f9e565b604051602081830303815290604052828280616e509061880d565b935060ff1681518110616e6557616e656186a0565b60200260200101819052506040518060400160405280600881526020017f76616c6964617465000000000000000000000000000000000000000000000000815250828280616eb29061880d565b935060ff1681518110616ec757616ec76186a0565b602002602001018190525082604051602001616ee3919061873b565b604051602081830303815290604052828280616efe9061880d565b935060ff1681518110616f1357616f136186a0565b60200260200101819052506040518060400160405280600a81526020017f2d2d636f6e747261637400000000000000000000000000000000000000000000815250828280616f609061880d565b935060ff1681518110616f7557616f756186a0565b6020026020010181905250616f8a87846178fb565b8282616f958161880d565b935060ff1681518110616faa57616faa6186a0565b6020908102919091010152855151156170565760408051808201909152600b81527f2d2d7265666572656e636500000000000000000000000000000000000000000060208201528282616ffc8161880d565b935060ff1681518110617011576170116186a0565b602002602001018190525061702a8660000151846178fb565b82826170358161880d565b935060ff168151811061704a5761704a6186a0565b60200260200101819052505b8560800151156170c45760408051808201909152601881527f2d2d756e73616665536b697053746f72616765436865636b00000000000000006020820152828261709f8161880d565b935060ff16815181106170b4576170b46186a0565b602002602001018190525061712a565b841561712a5760408051808201909152601281527f2d2d726571756972655265666572656e63650000000000000000000000000000602082015282826171098161880d565b935060ff168151811061711e5761711e6186a0565b60200260200101819052505b604086015151156171c65760408051808201909152600d81527f2d2d756e73616665416c6c6f7700000000000000000000000000000000000000602082015282826171748161880d565b935060ff1681518110617189576171896186a0565b602002602001018190525085604001518282806171a59061880d565b935060ff16815181106171ba576171ba6186a0565b60200260200101819052505b8560600151156172305760408051808201909152601481527f2d2d756e73616665416c6c6f7752656e616d65730000000000000000000000006020820152828261720f8161880d565b935060ff1681518110617224576172246186a0565b60200260200101819052505b60008160ff1667ffffffffffffffff81111561724e5761724e6180da565b60405190808252806020026020018201604052801561728157816020015b606081526020019060019003908161726c5790505b50905060005b8260ff168160ff1610156172da57838160ff16815181106172aa576172aa6186a0565b6020026020010151828260ff16815181106172c7576172c76186a0565b6020908102919091010152600101617287565b50979650505050505050565b604080518082019091526000808252602082015281518351101561730b57508161391e565b8151835160208501516000929161732191618de1565b61732b9190618cf0565b6020840151909150600190821461734c575082516020840151819020908220145b801561736757835185518690617363908390618cf0565b9052505b50929392505050565b600080826000015161739485600001518660200151866000015187602001516176b6565b61739e9190618de1565b90505b835160208501516173b29190618de1565b8111616cdb57816173c281618fe3565b92505082600001516173f98560200151836173dd9190618cf0565b86516173e99190618cf0565b83866000015187602001516176b6565b6174039190618de1565b90506173a1565b606060006174188484617370565b617423906001618de1565b67ffffffffffffffff81111561743b5761743b6180da565b60405190808252806020026020018201604052801561746e57816020015b60608152602001906001900390816174595790505b50905060005b81518110156156e35761748a6159058686616cbc565b82828151811061749c5761749c6186a0565b6020908102919091010152600101617474565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f01000000000000000083106174f8577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310617524576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc10000831061754257662386f26fc10000830492506010015b6305f5e100831061755a576305f5e100830492506008015b612710831061756e57612710830492506004015b60648310617580576064830492506002015b600a831061391e5760010192915050565b600061759d838361793b565b159392505050565b6000808584116176ac576020841161765857600084156175f05760016175cc866020618cf0565b6175d7906008618ffd565b6175e29060026190fb565b6175ec9190618cf0565b1990505b83518116856175ff8989618de1565b6176099190618cf0565b805190935082165b8181146176435787841161762b5787945050505050615314565b8361763581619107565b945050828451169050617611565b61764d8785618de1565b945050505050615314565b8383206176658588618cf0565b61766f9087618de1565b91505b8582106176aa578482208082036176975761768d8684618de1565b9350505050615314565b6176a2600184618cf0565b925050617672565b505b5092949350505050565b600083818685116177c1576020851161777057600085156177025760016176de876020618cf0565b6176e9906008618ffd565b6176f49060026190fb565b6176fe9190618cf0565b1990505b845181166000876177138b8b618de1565b61771d9190618cf0565b855190915083165b8281146177625781861061774a5761773d8b8b618de1565b9650505050505050615314565b8561775481618fe3565b965050838651169050617725565b859650505050505050615314565b508383206000905b6177828689618cf0565b82116177bf5785832080820361779e5783945050505050615314565b6177a9600185618de1565b93505081806177b790618fe3565b925050617778565b505b6177cb8787618de1565b979650505050505050565b6040805180820190915260008082526020820152600061780885600001518660200151866000015187602001516176b6565b6020808701805191860191909152519091506178249082618cf0565b8352845160208601516178379190618de1565b81036178465760008552617878565b835183516178549190618de1565b85518690617863908390618cf0565b90525083516178729082618de1565b60208601525b50909392505050565b602081106178b95781518352617898602084618de1565b92506178a5602083618de1565b91506178b2602082618cf0565b9050617881565b60001981156178e85760016178cf836020618cf0565b6178db906101006190fb565b6178e59190618cf0565b90505b9151835183169219169190911790915250565b606060006179098484613de7565b80516020808301516040519394506179239390910161911e565b60405160208183030381529060405291505092915050565b815181516000919081111561794e575081515b6020808501519084015160005b83811015617a0757825182518082146179d75760001960208710156179b657600184617988896020618cf0565b6179929190618de1565b61799d906008618ffd565b6179a89060026190fb565b6179b29190618cf0565b1990505b81811683821681810391146179d457975061391e9650505050505050565b50505b6179e2602086618de1565b94506179ef602085618de1565b93505050602081617a009190618de1565b905061795b565b50845186516144959190619176565b6112a68061919783390190565b61140b8061a43d83390190565b6117f98061b84883390190565b610d5e8061d04183390190565b6040518060e00160405280606081526020016060815260200160608152602001600015158152602001600015158152602001600015158152602001617a8d617a92565b905290565b60405180610100016040528060001515815260200160001515815260200160608152602001600080191681526020016060815260200160608152602001600015158152602001617a8d6040518060800160405280600081526020016000815260200160008152602001600081525090565b602080825282518282018190526000918401906040840190835b81811015617b445783516001600160a01b0316835260209384019390920191600101617b1d565b509095945050505050565b60005b83811015617b6a578181015183820152602001617b52565b50506000910152565b60008151808452617b8b816020860160208601617b4f565b601f01601f19169290920160200192915050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015617c9b577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452815180516001600160a01b03168652602090810151604082880181905281519088018190529101906060600582901b88018101919088019060005b81811015617c81577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa08a8503018352617c6b848651617b73565b6020958601959094509290920191600101617c31565b509197505050602094850194929092019150600101617bc7565b50929695505050505050565b600081518084526020840193506020830160005b82811015617cfb5781517fffffffff0000000000000000000000000000000000000000000000000000000016865260209586019590910190600101617cbb565b5093949350505050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015617c9b577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08786030184528151805160408752617d716040880182617b73565b9050602082015191508681036020880152617d8c8183617ca7565b965050506020938401939190910190600101617d2d565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015617c9b577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452617e05858351617b73565b94506020938401939190910190600101617dcb565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015617c9b577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc087860301845281516001600160a01b0381511686526020810151905060406020870152617e9b6040870182617ca7565b9550506020938401939190910190600101617e42565b600181811c90821680617ec557607f821691505b602082108103615be0577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060208284031215617f1057600080fd5b5051919050565b6001600160a01b0384168152826020820152606060408201526000615bc66060830184617b73565b8281526040602082015260006153146040830184617b73565b6001600160a01b0385168152836020820152608060408201526000617f806080830185617b73565b905082606083015295945050505050565b602081526000613a176020830184617b73565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082618009577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b6001600160a01b03831681526040602082015260006153146040830184617b73565b7f4661696c656420746f206465706c6f7920636f6e74726163742000000000000081526000835161806881601a850160208801617b4f565b7f3a20000000000000000000000000000000000000000000000000000000000000601a9184019182015283516180a581601c840160208801617b4f565b01601c01949350505050565b6000602082840312156180c357600080fd5b81516001600160a01b0381168114613a1757600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040516060810167ffffffffffffffff8111828210171561812c5761812c6180da565b60405290565b60008067ffffffffffffffff84111561814d5761814d6180da565b50604051601f19601f85018116603f0116810181811067ffffffffffffffff8211171561817c5761817c6180da565b60405283815290508082840185101561819457600080fd5b6156e3846020830185617b4f565b600082601f8301126181b357600080fd5b613a1783835160208501618132565b6000602082840312156181d457600080fd5b815167ffffffffffffffff8111156181eb57600080fd5b61391a848285016181a2565b60008351618209818460208801617b4f565b83519083019061821d818360208801617b4f565b01949350505050565b7f4661696c656420746f206465706c6f7920636f6e74726163742000000000000081526000835161825e81601a850160208801617b4f565b7f207573696e6720636f6e7374727563746f722064617461202200000000000000601a91840191820152835161829b816033840160208801617b4f565b7f220000000000000000000000000000000000000000000000000000000000000060339290910191820152603401949350505050565b60408152600b60408201527f464f554e4452595f4f55540000000000000000000000000000000000000000006060820152608060208201526000613a176080830184617b73565b60006020828403121561832a57600080fd5b815167ffffffffffffffff81111561834157600080fd5b8201601f8101841361835257600080fd5b61391a84825160208401618132565b60008551618373818460208a01617b4f565b7f2f0000000000000000000000000000000000000000000000000000000000000090830190815285516183ad816001840160208a01617b4f565b7f2f000000000000000000000000000000000000000000000000000000000000006001929091019182015284516183eb816002840160208901617b4f565b6001818301019150507f2f000000000000000000000000000000000000000000000000000000000000006001820152835161842d816002840160208801617b4f565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600292909101918201526007019695505050505050565b6040815260006184786040830184617b73565b8281036020840152600481527f2e6173740000000000000000000000000000000000000000000000000000000060208201526040810191505092915050565b6000602082840312156184c957600080fd5b81518015158114613a1757600080fd5b7f436f756c64206e6f742066696e642041535420696e206172746966616374200081526000825161851181601f850160208701617b4f565b7f2e205365742060617374203d20747275656020696e20666f756e6472792e746f601f9390910192830152507f6d6c000000000000000000000000000000000000000000000000000000000000603f820152604101919050565b60408152600061857e6040830184617b73565b8281036020840152601181527f2e6173742e6162736f6c7574655061746800000000000000000000000000000060208201526040810191505092915050565b6040815260006185d06040830184617b73565b8281036020840152600c81527f2e6173742e6c6963656e7365000000000000000000000000000000000000000060208201526040810191505092915050565b7f2e6d657461646174612e736f75726365732e5b27000000000000000000000000815260008251618647816014850160208701617b4f565b7f275d2e6b656363616b32353600000000000000000000000000000000000000006014939091019283015250602001919050565b60408152600061868e6040830185617b73565b8281036020840152613a138185617b73565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f2200000000000000000000000000000000000000000000000000000000000000815260008251618707816001850160208701617b4f565b7f22000000000000000000000000000000000000000000000000000000000000006001939091019283015250600201919050565b6000825161874d818460208701617b4f565b7f2f6275696c642d696e666f000000000000000000000000000000000000000000920191825250600b01919050565b7f436f756c64206e6f742066696e64206275696c642d696e666f2066696c65207781527f697468206d61746368696e6720736f7572636520636f6465206861736820666f60208201527f7220636f6e74726163742000000000000000000000000000000000000000000060408201526000825161880081604b850160208701617b4f565b91909101604b0192915050565b600060ff821660ff810361882357618823617fa4565b60010192915050565b7f406f70656e7a657070656c696e2f646566656e6465722d6465706c6f792d636c81527f69656e742d636c6940000000000000000000000000000000000000000000000060208201526000825161888a816029850160208701617b4f565b9190910160290192915050565b60408152601660408201527f4f50454e5a455050454c494e5f424153485f50415448000000000000000000006060820152608060208201526000613a176080830184617b73565b6000602082840312156188f057600080fd5b815167ffffffffffffffff81111561890757600080fd5b82016060818503121561891957600080fd5b618921618109565b81518060030b811461893257600080fd5b8152602082015167ffffffffffffffff81111561894e57600080fd5b61895a868285016181a2565b602083015250604082015167ffffffffffffffff81111561897a57600080fd5b618986868285016181a2565b604083015250949350505050565b7f4661696c656420746f2072756e206261736820636f6d6d616e6420776974682081527f22000000000000000000000000000000000000000000000000000000000000006020820152600082516189f2816021850160208701617b4f565b7f222e20496620796f7520617265207573696e672057696e646f77732c2073657460219390910192830152507f20746865204f50454e5a455050454c494e5f424153485f5041544820656e766960418201527f726f6e6d656e74207661726961626c6520746f207468652066756c6c7920717560618201527f616c69666965642070617468206f66207468652062617368206578656375746160818201527f626c652e20466f72206578616d706c652c20696620796f75206172652075736960a18201527f6e672047697420666f722057696e646f77732c206164642074686520666f6c6c60c18201527f6f77696e67206c696e6520696e20746865202e656e762066696c65206f66207960e18201527f6f75722070726f6a65637420287573696e6720666f727761726420736c6173686101018201527f6573293a0a4f50454e5a455050454c494e5f424153485f504154483d22433a2f6101218201527f50726f6772616d2046696c65732f4769742f62696e2f6261736822000000000061014182015261015c01919050565b7f4661696c656420746f2066696e64206c696e652077697468207072656669782081527f2700000000000000000000000000000000000000000000000000000000000000602082015260008351618bde816021850160208801617b4f565b7f2720696e206f75747075743a20000000000000000000000000000000000000006021918401918201528351618c1b81602e840160208801617b4f565b01602e01949350505050565b7f4661696c656420746f2072756e2075706772616465207361666574792076616c81527f69646174696f6e3a20000000000000000000000000000000000000000000000060208201526000825161888a816029850160208701617b4f565b7f55706772616465207361666574792076616c69646174696f6e206661696c656481527f3a0a000000000000000000000000000000000000000000000000000000000000602082015260008251618ce3816022850160208701617b4f565b9190910160220192915050565b8181038181111561391e5761391e617fa4565b7f436f6e7472616374206e616d6520000000000000000000000000000000000000815260008251618d3b81600e850160208701617b4f565b7f206d75737420626520696e2074686520666f726d6174204d79436f6e74726163600e9390910192830152507f742e736f6c3a4d79436f6e7472616374206f72204d79436f6e74726163742e73602e8201527f6f6c206f72206f75742f4d79436f6e74726163742e736f6c2f4d79436f6e7472604e8201527f6163742e6a736f6e000000000000000000000000000000000000000000000000606e820152607601919050565b8082018082111561391e5761391e617fa4565b7f53504458206c6963656e7365206964656e746966696572200000000000000000815260008351618e2c816018850160208801617b4f565b7f20696e20000000000000000000000000000000000000000000000000000000006018918401918201528351618e6981601c840160208801617b4f565b7f20646f6573206e6f74206c6f6f6b206c696b65206120737570706f7274656420601c92909101918201527f6c6963656e736520666f7220626c6f636b206578706c6f726572207665726966603c8201527f69636174696f6e2e205573652074686520606c6963656e73655479706560206f605c8201527f7074696f6e20746f20737065636966792061206c6963656e736520747970652c607c8201527f206f7220736574207468652060736b69704c6963656e73655479706560206f70609c8201527f74696f6e20746f2060747275656020746f20736b69702e00000000000000000060bc82015260d301949350505050565b60008251618f6f818460208701617b4f565b7f2000000000000000000000000000000000000000000000000000000000000000920191825250600101919050565b7f406f70656e7a657070656c696e2f75706772616465732d636f72654000000000815260008251618fd681601c850160208701617b4f565b91909101601c0192915050565b60006000198203618ff657618ff6617fa4565b5060010190565b808202811582820484141761391e5761391e617fa4565b6001815b600184111561904f5780850481111561903357619033617fa4565b600184161561904157908102905b60019390931c928002619018565b935093915050565b6000826190665750600161391e565b816190735750600061391e565b81600181146190895760028114619093576190af565b600191505061391e565b60ff8411156190a4576190a4617fa4565b50506001821b61391e565b5060208310610133831016604e8410600b84101617156190d2575081810a61391e565b6190df6000198484619014565b80600019048211156190f3576190f3617fa4565b029392505050565b6000613a178383619057565b60008161911657619116617fa4565b506000190190565b60008351619130818460208801617b4f565b7f3a00000000000000000000000000000000000000000000000000000000000000908301908152835161916a816001840160208801617b4f565b01600101949350505050565b8181036000831280158383131683831282161715616cdb57616cdb617fa456fe608060405234801561001057600080fd5b506040516112a63803806112a683398101604081905261002f91610110565b604051806040016040528060048152602001635a65746160e01b815250604051806040016040528060048152602001635a45544160e01b815250816003908161007891906101e2565b50600461008582826101e2565b5050506001600160a01b03821615806100a557506001600160a01b038116155b156100c35760405163e6c4247b60e01b815260040160405180910390fd5b600680546001600160a01b039384166001600160a01b031991821617909155600780549290931691161790556102a0565b80516001600160a01b038116811461010b57600080fd5b919050565b6000806040838503121561012357600080fd5b61012c836100f4565b915061013a602084016100f4565b90509250929050565b634e487b7160e01b600052604160045260246000fd5b600181811c9082168061016d57607f821691505b60208210810361018d57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156101dd57806000526020600020601f840160051c810160208510156101ba5750805b601f840160051c820191505b818110156101da57600081556001016101c6565b50505b505050565b81516001600160401b038111156101fb576101fb610143565b61020f816102098454610159565b84610193565b6020601f821160018114610243576000831561022b5750848201515b600019600385901b1c1916600184901b1784556101da565b600084815260208120601f198516915b828110156102735787850151825560209485019460019092019101610253565b50848210156102915786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b610ff7806102af6000396000f3fe608060405234801561001057600080fd5b506004361061011b5760003560e01c806342966c68116100b257806379cc679011610081578063a9059cbb11610066578063a9059cbb1461028e578063bff9662a146102a1578063dd62ed3e146102c157600080fd5b806379cc67901461027357806395d89b411461028657600080fd5b806342966c68146102025780635b1125911461021557806370a0823114610235578063779e3b631461026b57600080fd5b80631e458bee116100ee5780631e458bee1461018857806323b872dd1461019b578063313ce567146101ae578063328a01d0146101bd57600080fd5b806306fdde0314610120578063095ea7b31461013e57806315d57fd41461016157806318160ddd14610176575b600080fd5b610128610307565b6040516101359190610d97565b60405180910390f35b61015161014c366004610e2c565b610399565b6040519015158152602001610135565b61017461016f366004610e56565b6103b3565b005b6002545b604051908152602001610135565b610174610196366004610e89565b61057e565b6101516101a9366004610ebc565b610631565b60405160128152602001610135565b6007546101dd9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610135565b610174610210366004610ef9565b610655565b6006546101dd9073ffffffffffffffffffffffffffffffffffffffff1681565b61017a610243366004610f12565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b610174610662565b610174610281366004610e2c565b610786565b610128610837565b61015161029c366004610e2c565b610846565b6005546101dd9073ffffffffffffffffffffffffffffffffffffffff1681565b61017a6102cf366004610e56565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b60606003805461031690610f34565b80601f016020809104026020016040519081016040528092919081815260200182805461034290610f34565b801561038f5780601f106103645761010080835404028352916020019161038f565b820191906000526020600020905b81548152906001019060200180831161037257829003601f168201915b5050505050905090565b6000336103a7818585610854565b60019150505b92915050565b60075473ffffffffffffffffffffffffffffffffffffffff1633148015906103f3575060065473ffffffffffffffffffffffffffffffffffffffff163314155b15610431576040517fcdfcef970000000000000000000000000000000000000000000000000000000081523360048201526024015b60405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff82161580610468575073ffffffffffffffffffffffffffffffffffffffff8116155b1561049f576040517fe6c4247b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6006805473ffffffffffffffffffffffffffffffffffffffff8481167fffffffffffffffffffffffff0000000000000000000000000000000000000000928316811790935560058054918516919092161790556040805133815260208101929092527fe79965b5c67dcfb2cf5fe152715e4a7256cee62a3d5dd8484fd8a8539eb8beff910160405180910390a16040805133815273ffffffffffffffffffffffffffffffffffffffff831660208201527f1b9352454524a57a51f24f67dc66d898f616922cd1f7a12d73570ece12b1975c910160405180910390a15050565b60055473ffffffffffffffffffffffffffffffffffffffff1633146105d1576040517f3fe32fba000000000000000000000000000000000000000000000000000000008152336004820152602401610428565b6105db8383610866565b808373ffffffffffffffffffffffffffffffffffffffff167fc263b302aec62d29105026245f19e16f8e0137066ccd4a8bd941f716bd4096bb8460405161062491815260200190565b60405180910390a3505050565b60003361063f8582856108c6565b61064a858585610995565b506001949350505050565b61065f3382610a40565b50565b60075473ffffffffffffffffffffffffffffffffffffffff1633146106b5576040517fe700765e000000000000000000000000000000000000000000000000000000008152336004820152602401610428565b60065473ffffffffffffffffffffffffffffffffffffffff16610704576040517fe6c4247b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600654600780547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff90921691821790556040805133815260208101929092527f5104c9abdc7d111c2aeb4ce890ac70274a4be2ee83f46a62551be5e6ebc82dd0910160405180910390a1565b60055473ffffffffffffffffffffffffffffffffffffffff1633146107d9576040517f3fe32fba000000000000000000000000000000000000000000000000000000008152336004820152602401610428565b6107e38282610a9c565b8173ffffffffffffffffffffffffffffffffffffffff167f919f7e2092ffcc9d09f599be18d8152860b0c054df788a33bc549cdd9d0f15b18260405161082b91815260200190565b60405180910390a25050565b60606004805461031690610f34565b6000336103a7818585610995565b6108618383836001610ab1565b505050565b73ffffffffffffffffffffffffffffffffffffffff82166108b6576040517fec442f0500000000000000000000000000000000000000000000000000000000815260006004820152602401610428565b6108c260008383610bf9565b5050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811461098f5781811015610980576040517ffb8f41b200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff841660048201526024810182905260448101839052606401610428565b61098f84848484036000610ab1565b50505050565b73ffffffffffffffffffffffffffffffffffffffff83166109e5576040517f96c6fd1e00000000000000000000000000000000000000000000000000000000815260006004820152602401610428565b73ffffffffffffffffffffffffffffffffffffffff8216610a35576040517fec442f0500000000000000000000000000000000000000000000000000000000815260006004820152602401610428565b610861838383610bf9565b73ffffffffffffffffffffffffffffffffffffffff8216610a90576040517f96c6fd1e00000000000000000000000000000000000000000000000000000000815260006004820152602401610428565b6108c282600083610bf9565b610aa78233836108c6565b6108c28282610a40565b73ffffffffffffffffffffffffffffffffffffffff8416610b01576040517fe602df0500000000000000000000000000000000000000000000000000000000815260006004820152602401610428565b73ffffffffffffffffffffffffffffffffffffffff8316610b51576040517f94280d6200000000000000000000000000000000000000000000000000000000815260006004820152602401610428565b73ffffffffffffffffffffffffffffffffffffffff8085166000908152600160209081526040808320938716835292905220829055801561098f578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051610beb91815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff8316610c31578060026000828254610c269190610f87565b90915550610ce39050565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205481811015610cb7576040517fe450d38c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff851660048201526024810182905260448101839052606401610428565b73ffffffffffffffffffffffffffffffffffffffff841660009081526020819052604090209082900390555b73ffffffffffffffffffffffffffffffffffffffff8216610d0c57600280548290039055610d38565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090208054820190555b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161062491815260200190565b602081526000825180602084015260005b81811015610dc55760208186018101516040868401015201610da8565b5060006040828501015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011684010191505092915050565b803573ffffffffffffffffffffffffffffffffffffffff81168114610e2757600080fd5b919050565b60008060408385031215610e3f57600080fd5b610e4883610e03565b946020939093013593505050565b60008060408385031215610e6957600080fd5b610e7283610e03565b9150610e8060208401610e03565b90509250929050565b600080600060608486031215610e9e57600080fd5b610ea784610e03565b95602085013595506040909401359392505050565b600080600060608486031215610ed157600080fd5b610eda84610e03565b9250610ee860208501610e03565b929592945050506040919091013590565b600060208284031215610f0b57600080fd5b5035919050565b600060208284031215610f2457600080fd5b610f2d82610e03565b9392505050565b600181811c90821680610f4857607f821691505b602082108103610f81577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b808201808211156103ad577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea2646970667358221220085f01204b33dc17013c78c74fbca32a3da2c0b384ce7c8878c889551af28c6164736f6c634300081a003360a060405234801561001057600080fd5b5060405161140b38038061140b83398101604081905261002f916101b3565b60016000556002805460ff191690556001600160a01b038316158061005b57506001600160a01b038216155b8061006d57506001600160a01b038116155b1561008b5760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b0383166080526100a3600082610102565b506100ce7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a82610102565b506100f97f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e483610102565b505050506101f6565b60008281526001602090815260408083206001600160a01b038516845290915281205460ff1661018d5760008381526001602081815260408084206001600160a01b0387168086529252808420805460ff19169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a4506001610191565b5060005b92915050565b80516001600160a01b03811681146101ae57600080fd5b919050565b6000806000606084860312156101c857600080fd5b6101d184610197565b92506101df60208501610197565b91506101ed60408501610197565b90509250925092565b6080516111de61022d60003960008181610132015281816103c5015281816104270152818161065801526106ba01526111de6000f3fe608060405234801561001057600080fd5b50600436106101005760003560e01c80638456cb5911610097578063c8a0236211610066578063c8a0236214610276578063d547741f14610289578063d9caed121461029c578063e63ab1e9146102af57600080fd5b80638456cb59146101f957806385f438c11461020157806391d1485414610228578063a217fddf1461026e57600080fd5b80632f2ff15d116100d35780632f2ff15d146101c057806336568abe146101d35780633f4ba83a146101e65780635c975abb146101ee57600080fd5b806301ffc9a714610105578063116191b61461012d57806321fc65f214610179578063248a9ca31461018e575b600080fd5b610118610113366004610f04565b6102d6565b60405190151581526020015b60405180910390f35b6101547f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610124565b61018c610187366004610f6f565b61036f565b005b6101b261019c36600461100c565b6000908152600160208190526040909120015490565b604051908152602001610124565b61018c6101ce366004611025565b610511565b61018c6101e1366004611025565b61053d565b61018c61059b565b60025460ff16610118565b61018c6105d0565b6101b27f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b610118610236366004611025565b600091825260016020908152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b6101b2600081565b61018c610284366004610f6f565b610602565b61018c610297366004611025565b61078a565b61018c6102aa366004611051565b6107b0565b6101b27f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061036957507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b61037761087d565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e46103a1816108c0565b6103a96108ca565b6103ea73ffffffffffffffffffffffffffffffffffffffff87167f000000000000000000000000000000000000000000000000000000000000000086610909565b6040517f5131ab5900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690635131ab599061046490899089908990899089906004016110d7565b600060405180830381600087803b15801561047e57600080fd5b505af1158015610492573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167f85b5be9cf454e05e0bddf49315178102227c312078eefa3c00294fb4d912ae4e8686866040516104f793929190611134565b60405180910390a35061050a6001600055565b5050505050565b6000828152600160208190526040909120015461052d816108c0565b6105378383610996565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8116331461058c576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6105968282610a61565b505050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a6105c5816108c0565b6105cd610b20565b50565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a6105fa816108c0565b6105cd610b9d565b61060a61087d565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e4610634816108c0565b61063c6108ca565b61067d73ffffffffffffffffffffffffffffffffffffffff87167f000000000000000000000000000000000000000000000000000000000000000086610909565b6040517fb8969bd400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063b8969bd4906106f790899089908990899089906004016110d7565b600060405180830381600087803b15801561071157600080fd5b505af1158015610725573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fb9d4efa96044e5f5e03e696fa9ae2ff66911cc27e8a637c3627c75bc5b2241c88686866040516104f793929190611134565b600082815260016020819052604090912001546107a6816108c0565b6105378383610a61565b6107b861087d565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e46107e2816108c0565b6107ea6108ca565b61080b73ffffffffffffffffffffffffffffffffffffffff85168484610909565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f9b1bfa7fa9ee420a16e124f794c35ac9f90472acc99140eb2f6447c714cad8eb8460405161086a91815260200190565b60405180910390a3506105966001600055565b6002600054036108b9576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b6105cd8133610bf8565b60025460ff1615610907576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6040805173ffffffffffffffffffffffffffffffffffffffff8416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb00000000000000000000000000000000000000000000000000000000179052610596908490610c89565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff16610a5957600083815260016020818152604080842073ffffffffffffffffffffffffffffffffffffffff8716808652925280842080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a4506001610369565b506000610369565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff1615610a5957600083815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8616808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a4506001610369565b610b28610d1f565b600280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b610ba56108ca565b600280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258610b733390565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16610c85576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82166004820152602481018390526044015b60405180910390fd5b5050565b6000610cab73ffffffffffffffffffffffffffffffffffffffff841683610d5b565b90508051600014158015610cd0575080806020019051810190610cce9190611157565b155b15610596576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84166004820152602401610c7c565b60025460ff16610907576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6060610d6983836000610d70565b9392505050565b606081471015610dae576040517fcd786059000000000000000000000000000000000000000000000000000000008152306004820152602401610c7c565b6000808573ffffffffffffffffffffffffffffffffffffffff168486604051610dd79190611179565b60006040518083038185875af1925050503d8060008114610e14576040519150601f19603f3d011682016040523d82523d6000602084013e610e19565b606091505b5091509150610e29868383610e33565b9695505050505050565b606082610e4857610e4382610ec2565b610d69565b8151158015610e6c575073ffffffffffffffffffffffffffffffffffffffff84163b155b15610ebb576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85166004820152602401610c7c565b5080610d69565b805115610ed25780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060208284031215610f1657600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610d6957600080fd5b803573ffffffffffffffffffffffffffffffffffffffff81168114610f6a57600080fd5b919050565b600080600080600060808688031215610f8757600080fd5b610f9086610f46565b9450610f9e60208701610f46565b935060408601359250606086013567ffffffffffffffff811115610fc157600080fd5b8601601f81018813610fd257600080fd5b803567ffffffffffffffff811115610fe957600080fd5b886020828401011115610ffb57600080fd5b959894975092955050506020019190565b60006020828403121561101e57600080fd5b5035919050565b6000806040838503121561103857600080fd5b8235915061104860208401610f46565b90509250929050565b60008060006060848603121561106657600080fd5b61106f84610f46565b925061107d60208501610f46565b929592945050506040919091013590565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff8616815273ffffffffffffffffffffffffffffffffffffffff8516602082015283604082015260806060820152600061112960808301848661108e565b979650505050505050565b83815260406020820152600061114e60408301848661108e565b95945050505050565b60006020828403121561116957600080fd5b81518015158114610d6957600080fd5b6000825160005b8181101561119a5760208186018101518583015201611180565b50600092019182525091905056fea264697066735822122035ca457bdc8b45adde9844ff8416a0abd723c23055fd6933ddc05523b5f5b6de64736f6c634300081a003360c060405260001960035534801561001657600080fd5b506040516117f93803806117f9833981016040819052610035916101f5565b60016000819055805460ff19169055838383836001600160a01b038416158061006557506001600160a01b038316155b8061007757506001600160a01b038216155b8061008957506001600160a01b038116155b156100a75760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b03808516608052831660a0526100c5600082610129565b506100f07f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e483610129565b5061011b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a82610129565b505050505050505050610249565b60008281526002602090815260408083206001600160a01b038516845290915281205460ff166101cf5760008381526002602090815260408083206001600160a01b03861684529091529020805460ff191660011790556101873390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45060016101d3565b5060005b92915050565b80516001600160a01b03811681146101f057600080fd5b919050565b6000806000806080858703121561020b57600080fd5b610214856101d9565b9350610222602086016101d9565b9250610230604086016101d9565b915061023e606086016101d9565b905092959194509250565b60805160a0516115306102c9600039600081816102120152818161046f015281816105b1015281816106770152818161077c0152818161089e01528181610a5201528181610b9401528181610c5a0152610db10152600081816101c60152818161057b0152818161064801528181610b5e0152610c2b01526115306000f3fe608060405234801561001057600080fd5b506004361061016c5760003560e01c80635e3e9fef116100cd57806391d1485411610081578063d547741f11610066578063d547741f14610354578063d5abeb0114610367578063e63ab1e91461037057600080fd5b806391d1485414610306578063a217fddf1461034c57600080fd5b8063743e0c9b116100b2578063743e0c9b146102c45780638456cb59146102d757806385f438c1146102df57600080fd5b80635e3e9fef1461029e5780636f8b44b0146102b157600080fd5b8063248a9ca31161012457806336568abe1161010957806336568abe146102785780633f4ba83a1461028b5780635c975abb1461029357600080fd5b8063248a9ca3146102345780632f2ff15d1461026557600080fd5b8063106e629011610155578063106e6290146101ae578063116191b6146101c157806321e093b11461020d57600080fd5b806301ffc9a71461017157806302d5c89914610199575b600080fd5b61018461017f366004611262565b610397565b60405190151581526020015b60405180910390f35b6101ac6101a73660046112d4565b610430565b005b6101ac6101bc366004611366565b61073d565b6101e87f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610190565b6101e87f000000000000000000000000000000000000000000000000000000000000000081565b610257610242366004611399565b60009081526002602052604090206001015490565b604051908152602001610190565b6101ac6102733660046113b2565b61095a565b6101ac6102863660046113b2565b610985565b6101ac6109de565b60015460ff16610184565b6101ac6102ac3660046112d4565b610a13565b6101ac6102bf366004611399565b610d06565b6101ac6102d2366004611399565b610d74565b6101ac610e1e565b6102577f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b6101846103143660046113b2565b600091825260026020908152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b610257600081565b6101ac6103623660046113b2565b610e50565b61025760035481565b6102577f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061042a57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b610438610e75565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461046281610eb8565b61046a610ec2565b6003547f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156104d8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104fc91906113de565b61050690876113f7565b111561053e576040517fc30436e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f1e458bee00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116600483015260248201879052604482018490527f00000000000000000000000000000000000000000000000000000000000000001690631e458bee90606401600060405180830381600087803b1580156105f557600080fd5b505af1158015610609573d6000803e3d6000fd5b50506040517fb8969bd400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016925063b8969bd491506106a7907f0000000000000000000000000000000000000000000000000000000000000000908a908a908a908a9060040161147a565b600060405180830381600087803b1580156106c157600080fd5b505af11580156106d5573d6000803e3d6000fd5b505050508573ffffffffffffffffffffffffffffffffffffffff167fba96f26bdda53eb8c8ba39045dfb4ff39753fbc7a6edcf250a88e75e78d102fe868686604051610723939291906114d7565b60405180910390a2506107366001600055565b5050505050565b610745610e75565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461076f81610eb8565b610777610ec2565b6003547f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156107e5573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061080991906113de565b61081390856113f7565b111561084b576040517fc30436e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f1e458bee00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff858116600483015260248201859052604482018490527f00000000000000000000000000000000000000000000000000000000000000001690631e458bee90606401600060405180830381600087803b1580156108e257600080fd5b505af11580156108f6573d6000803e3d6000fd5b505050508373ffffffffffffffffffffffffffffffffffffffff167f884edad9ce6fa2440d8a54cc123490eb96d2768479d49ff9c7366125a94243648460405161094291815260200190565b60405180910390a2506109556001600055565b505050565b60008281526002602052604090206001015461097581610eb8565b61097f8383610f01565b50505050565b73ffffffffffffffffffffffffffffffffffffffff811633146109d4576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6109558282611001565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610a0881610eb8565b610a106110c0565b50565b610a1b610e75565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e4610a4581610eb8565b610a4d610ec2565b6003547f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610abb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610adf91906113de565b610ae990876113f7565b1115610b21576040517fc30436e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f1e458bee00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116600483015260248201879052604482018490527f00000000000000000000000000000000000000000000000000000000000000001690631e458bee90606401600060405180830381600087803b158015610bd857600080fd5b505af1158015610bec573d6000803e3d6000fd5b50506040517f5131ab5900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169250635131ab599150610c8a907f0000000000000000000000000000000000000000000000000000000000000000908a908a908a908a9060040161147a565b600060405180830381600087803b158015610ca457600080fd5b505af1158015610cb8573d6000803e3d6000fd5b505050508573ffffffffffffffffffffffffffffffffffffffff167f7772f56296d3a5202974a45c61c9188d844ab4d6eeb18c851e4b8d5384ca6ced868686604051610723939291906114d7565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e4610d3081610eb8565b610d38610ec2565b60038290556040518281527f7810bd47de260c3e9ee10061cf438099dd12256c79485f12f94dbccc981e806c9060200160405180910390a15050565b610d7c610ec2565b6040517f79cc6790000000000000000000000000000000000000000000000000000000008152336004820152602481018290527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16906379cc679090604401600060405180830381600087803b158015610e0a57600080fd5b505af1158015610736573d6000803e3d6000fd5b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610e4881610eb8565b610a1061113d565b600082815260026020526040902060010154610e6b81610eb8565b61097f8383611001565b600260005403610eb1576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b610a108133611196565b60015460ff1615610eff576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff16610ff957600083815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff86168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055610f973390565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a450600161042a565b50600061042a565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff1615610ff957600083815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8616808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a450600161042a565b6110c8611226565b600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b611145610ec2565b600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016811790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25833611113565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16611222576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff821660048201526024810183905260440160405180910390fd5b5050565b60015460ff16610eff576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006020828403121561127457600080fd5b81357fffffffff00000000000000000000000000000000000000000000000000000000811681146112a457600080fd5b9392505050565b803573ffffffffffffffffffffffffffffffffffffffff811681146112cf57600080fd5b919050565b6000806000806000608086880312156112ec57600080fd5b6112f5866112ab565b945060208601359350604086013567ffffffffffffffff81111561131857600080fd5b8601601f8101881361132957600080fd5b803567ffffffffffffffff81111561134057600080fd5b88602082840101111561135257600080fd5b959894975060200195606001359392505050565b60008060006060848603121561137b57600080fd5b611384846112ab565b95602085013595506040909401359392505050565b6000602082840312156113ab57600080fd5b5035919050565b600080604083850312156113c557600080fd5b823591506113d5602084016112ab565b90509250929050565b6000602082840312156113f057600080fd5b5051919050565b8082018082111561042a577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff8616815273ffffffffffffffffffffffffffffffffffffffff851660208201528360408201526080606082015260006114cc608083018486611431565b979650505050505050565b8381526040602082015260006114f1604083018486611431565b9594505050505056fea264697066735822122083f8ba25d15d0dacb4bf73d1472e680a549b02f1b26b83dcb21bfef553fb6e1d64736f6c634300081a00336080604052348015600f57600080fd5b506001600055610d3a806100246000396000f3fe6080604052600436106100635760003560e01c8063c513169111610040578063c5131691146100c1578063e04d4f97146100e1578063f05b6abf146100f457005b8063357fc5a21461006c5780636ed701691461008c5780638fcaa0b5146100a157005b3661006a57005b005b34801561007857600080fd5b5061006a6100873660046106c0565b610114565b34801561009857600080fd5b5061006a6101aa565b3480156100ad57600080fd5b5061006a6100bc3660046106fc565b6101df565b3480156100cd57600080fd5b5061006a6100dc3660046106c0565b61021e565b61006a6100ef366004610895565b6102f9565b34801561010057600080fd5b5061006a61010f366004610981565b61033d565b61011c610372565b61013e73ffffffffffffffffffffffffffffffffffffffff83163383866103b5565b604080513381526020810185905273ffffffffffffffffffffffffffffffffffffffff848116828401528316606082015290517f2b58128f24a9f59127cc5b5430d70542b22220f2d9adaa86e442b816ab98af609181900360800190a16101a56001600055565b505050565b6040513381527fbcaadb46b82a48af60b608f58959ae6b8310d1b0a0d094c2e9ec3208ed39f2a09060200160405180910390a1565b7f0d3f65f00e631663aa85c96330b5c7a83bb29af3630c0063776f985edc3037aa33838360405161021293929190610a6b565b60405180910390a15050565b610226610372565b6000610233600285610ad5565b90508060000361026f576040517f1f2a200500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61029173ffffffffffffffffffffffffffffffffffffffff84163384846103b5565b604080513381526020810183905273ffffffffffffffffffffffffffffffffffffffff858116828401528416606082015290517f2b58128f24a9f59127cc5b5430d70542b22220f2d9adaa86e442b816ab98af609181900360800190a1506101a56001600055565b7f1f1ff1f5fb41346850b2f5c04e6c767e2f1c8a525c5c0c5cdb60cdf3ca5f62fa3334858585604051610330959493929190610b7e565b60405180910390a1505050565b7f74a53cd528a921fca7dbdee62f86819051d3cc98f214951f4238e8843f20b146338484846040516103309493929190610c08565b6002600054036103ae576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b6040805173ffffffffffffffffffffffffffffffffffffffff85811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd0000000000000000000000000000000000000000000000000000000017905261044a908590610450565b50505050565b600061047273ffffffffffffffffffffffffffffffffffffffff8416836104eb565b905080516000141580156104975750808060200190518101906104959190610ccb565b155b156101a5576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff841660048201526024015b60405180910390fd5b60606104f983836000610500565b9392505050565b60608147101561053e576040517fcd7860590000000000000000000000000000000000000000000000000000000081523060048201526024016104e2565b6000808573ffffffffffffffffffffffffffffffffffffffff1684866040516105679190610ce8565b60006040518083038185875af1925050503d80600081146105a4576040519150601f19603f3d011682016040523d82523d6000602084013e6105a9565b606091505b50915091506105b98683836105c3565b9695505050505050565b6060826105d8576105d382610652565b6104f9565b81511580156105fc575073ffffffffffffffffffffffffffffffffffffffff84163b155b1561064b576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff851660048201526024016104e2565b50806104f9565b8051156106625780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50565b803573ffffffffffffffffffffffffffffffffffffffff811681146106bb57600080fd5b919050565b6000806000606084860312156106d557600080fd5b833592506106e560208501610697565b91506106f360408501610697565b90509250925092565b6000806020838503121561070f57600080fd5b823567ffffffffffffffff81111561072657600080fd5b8301601f8101851361073757600080fd5b803567ffffffffffffffff81111561074e57600080fd5b85602082840101111561076057600080fd5b6020919091019590945092505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156107e6576107e6610770565b604052919050565b600082601f8301126107ff57600080fd5b813567ffffffffffffffff81111561081957610819610770565b61084a60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8401160161079f565b81815284602083860101111561085f57600080fd5b816020850160208301376000918101602001919091529392505050565b801515811461069457600080fd5b80356106bb8161087c565b6000806000606084860312156108aa57600080fd5b833567ffffffffffffffff8111156108c157600080fd5b6108cd868287016107ee565b9350506020840135915060408401356108e58161087c565b809150509250925092565b600067ffffffffffffffff82111561090a5761090a610770565b5060051b60200190565b600082601f83011261092557600080fd5b8135610938610933826108f0565b61079f565b8082825260208201915060208360051b86010192508583111561095a57600080fd5b602085015b8381101561097757803583526020928301920161095f565b5095945050505050565b60008060006060848603121561099657600080fd5b833567ffffffffffffffff8111156109ad57600080fd5b8401601f810186136109be57600080fd5b80356109cc610933826108f0565b8082825260208201915060208360051b8501019250888311156109ee57600080fd5b602084015b83811015610a3057803567ffffffffffffffff811115610a1257600080fd5b610a218b6020838901016107ee565b845250602092830192016109f3565b509550505050602084013567ffffffffffffffff811115610a5057600080fd5b610a5c86828701610914565b9250506106f36040850161088a565b73ffffffffffffffffffffffffffffffffffffffff8416815260406020820152816040820152818360608301376000818301606090810191909152601f9092017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016010192915050565b600082610b0b577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60005b83811015610b2b578181015183820152602001610b13565b50506000910152565b60008151808452610b4c816020860160208601610b10565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b73ffffffffffffffffffffffffffffffffffffffff8616815284602082015260a060408201526000610bb360a0830186610b34565b6060830194909452509015156080909101529392505050565b600081518084526020840193506020830160005b82811015610bfe578151865260209586019590910190600101610be0565b5093949350505050565b60006080820173ffffffffffffffffffffffffffffffffffffffff871683526080602084015280865180835260a08501915060a08160051b86010192506020880160005b82811015610c9b577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60878603018452610c86858351610b34565b94506020938401939190910190600101610c4c565b505050508281036040840152610cb18186610bcc565b915050610cc2606083018415159052565b95945050505050565b600060208284031215610cdd57600080fd5b81516104f98161087c565b60008251610cfa818460208701610b10565b919091019291505056fea2646970667358221220556072e1abafc3c4063b8cce832228b4f309b93726aaa6a6dfab20cb880c6d1864736f6c634300081a0033a2646970667358221220e80db3877e97661ce0a634825011e5fe1a372a9e5b3bab0542217051c161d99964736f6c634300081a0033", + ABI: "[{\"type\":\"function\",\"name\":\"IS_TEST\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"PAUSER_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"TSS_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"WITHDRAWER_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeArtifacts\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedArtifacts_\",\"type\":\"string[]\",\"internalType\":\"string[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeContracts\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedContracts_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeSelectors\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedSelectors_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzSelector[]\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"selectors\",\"type\":\"bytes4[]\",\"internalType\":\"bytes4[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeSenders\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedSenders_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"failed\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"setUp\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"targetArtifactSelectors\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedArtifactSelectors_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzArtifactSelector[]\",\"components\":[{\"name\":\"artifact\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"selectors\",\"type\":\"bytes4[]\",\"internalType\":\"bytes4[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetArtifacts\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedArtifacts_\",\"type\":\"string[]\",\"internalType\":\"string[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetContracts\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedContracts_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetInterfaces\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedInterfaces_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzInterface[]\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"artifacts\",\"type\":\"string[]\",\"internalType\":\"string[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetSelectors\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedSelectors_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzSelector[]\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"selectors\",\"type\":\"bytes4[]\",\"internalType\":\"bytes4[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetSenders\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedSenders_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"testSexMaxSupplyFailsIfSenderIsNotTss\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdraw\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawAndCallFailsIfMaxSupplyIsReached\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawAndCallReceiveERC20\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawAndCallReceiveERC20FailsIfSenderIsNotWithdrawer\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawAndCallReceiveERC20Partial\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawAndCallReceiveNoParams\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawAndFailsIfMaxSupplyIsReached\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawAndRevert\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawAndRevertFailsIfMaxSupplyIsReached\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawAndRevertFailsIfSenderIsNotWithdrawer\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawFailsIfSenderIsNotWithdrawer\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawTogglePause\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"event\",\"name\":\"Call\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"receiver\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Deposit\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"receiver\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"asset\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Executed\",\"inputs\":[{\"name\":\"destination\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ExecutedWithERC20\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedERC20\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"token\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"destination\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedNoParams\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedNonPayable\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"strs\",\"type\":\"string[]\",\"indexed\":false,\"internalType\":\"string[]\"},{\"name\":\"nums\",\"type\":\"uint256[]\",\"indexed\":false,\"internalType\":\"uint256[]\"},{\"name\":\"flag\",\"type\":\"bool\",\"indexed\":false,\"internalType\":\"bool\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedPayable\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"str\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"num\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"flag\",\"type\":\"bool\",\"indexed\":false,\"internalType\":\"bool\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedRevert\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Reverted\",\"inputs\":[{\"name\":\"destination\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RevertedWithERC20\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Withdraw\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"WithdrawAndCall\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"WithdrawAndRevert\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log\",\"inputs\":[{\"name\":\"\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_address\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_array\",\"inputs\":[{\"name\":\"val\",\"type\":\"uint256[]\",\"indexed\":false,\"internalType\":\"uint256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_array\",\"inputs\":[{\"name\":\"val\",\"type\":\"int256[]\",\"indexed\":false,\"internalType\":\"int256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_array\",\"inputs\":[{\"name\":\"val\",\"type\":\"address[]\",\"indexed\":false,\"internalType\":\"address[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_bytes\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_bytes32\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_int\",\"inputs\":[{\"name\":\"\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_address\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_array\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"uint256[]\",\"indexed\":false,\"internalType\":\"uint256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_array\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"int256[]\",\"indexed\":false,\"internalType\":\"int256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_array\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"address[]\",\"indexed\":false,\"internalType\":\"address[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_bytes\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_bytes32\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_decimal_int\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"},{\"name\":\"decimals\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_decimal_uint\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"decimals\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_int\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_string\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_uint\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_string\",\"inputs\":[{\"name\":\"\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_uint\",\"inputs\":[{\"name\":\"\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"logs\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"AccessControlUnauthorizedAccount\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"neededRole\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"type\":\"error\",\"name\":\"ApprovalFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ConnectorInitialized\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"CustodyInitialized\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"DepositFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"EnforcedPause\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ExceedsMaxSupply\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ExecutionFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientERC20Amount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientETHAmount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZeroAddress\",\"inputs\":[]}]", + Bin: "0x6080604052600c8054600160ff199182168117909255601f80549091169091179055348015602c57600080fd5b5061ef2f8061003c6000396000f3fe608060405234801561001057600080fd5b50600436106101cf5760003560e01c8063a783c78911610104578063d509b16c116100a2578063e63ab1e911610071578063e63ab1e914610344578063fa7626d41461036b578063fdca905214610378578063fe574f841461038057600080fd5b8063d509b16c14610324578063dcf7d0371461032c578063de1cb76c14610334578063e20c9f711461033c57600080fd5b8063b5508aa9116100de578063b5508aa9146102f4578063ba414fa6146102fc578063c190997214610314578063ccb0e3f21461031c57600080fd5b8063a783c789146102bd578063aaf74192146102e4578063b0464fdc146102ec57600080fd5b80634934655811610171578063828320141161014b578063828320141461025657806385226c811461025e57806385f438c114610273578063916a17c6146102a857600080fd5b8063493465581461023157806366d9a9a0146102395780637db20efb1461024e57600080fd5b80632ade3880116101ad5780632ade3880146102045780633cba0107146102195780633e5e3c23146102215780633f7286f41461022957600080fd5b80630a9254e4146101d45780631ed7831c146101de5780632506ef03146101fc575b600080fd5b6101dc610388565b005b6101e6610a6e565b6040516101f39190618ec4565b60405180910390f35b6101dc610ad0565b61020c610d81565b6040516101f39190618f60565b6101dc610ec3565b6101e6611685565b6101e66116e5565b6101dc611745565b610241611d19565b6040516101f391906190c6565b6101dc611e9b565b6101dc61213a565b610266612393565b6040516101f39190619164565b61029a7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b6040519081526020016101f3565b6102b0612463565b6040516101f391906191db565b61029a7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb81565b6101dc61255e565b6102b06127ba565b6102666128b5565b610304612985565b60405190151581526020016101f3565b6101dc612a59565b6101dc612cc4565b6101dc6137f0565b6101dc613b45565b6101dc614173565b6101e661488f565b61029a7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b601f546103049060ff1681565b6101dc6148ef565b6101dc614ad9565b60258054307fffffffffffffffffffffffff000000000000000000000000000000000000000091821617909155602680546112349083161790556027805461567892168217905560405181906103dd90618dd7565b6001600160a01b03928316815291166020820152604001604051809103906000f080158015610410573d6000803e3d6000fd5b50602480547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039283169081178255604080518082018252600e81527f4761746577617945564d2e736f6c000000000000000000000000000000000000602082015260275460255492519086169481019490945260448401929092529092166064820152610501919060840160408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fc0c53b8b00000000000000000000000000000000000000000000000000000000179052614cc6565b601f80547fffffffffffffffffffffff0000000000000000000000000000000000000000ff166101006001600160a01b0393841681029190911791829055602080549190920483167fffffffffffffffffffffffff0000000000000000000000000000000000000000909116811790915560275460255460405192939182169291169061058d90618de4565b6001600160a01b03938416815291831660208301529091166040820152606001604051809103906000f0801580156105c9573d6000803e3d6000fd5b50602280547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03928316179055602054602454602754602554604051938516949283169391831692169061062490618df1565b6001600160a01b039485168152928416602084015290831660408301529091166060820152608001604051809103906000f080158015610668573d6000803e3d6000fd5b50602380547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392831617905560275460405163ca669fa760e01b815291166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156106ed57600080fd5b505af1158015610701573d6000803e3d6000fd5b5050602480546027546023546040517f15d57fd40000000000000000000000000000000000000000000000000000000081526001600160a01b039283166004820152908216938101939093521692506315d57fd49150604401600060405180830381600087803b15801561077457600080fd5b505af1158015610788573d6000803e3d6000fd5b5050505060405161079890618dfe565b604051809103906000f0801580156107b4573d6000803e3d6000fd5b50602180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039283161790556027546040517fc88a5e6d00000000000000000000000000000000000000000000000000000000815291166004820152670de0b6b3a76400006024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c88a5e6d90604401600060405180830381600087803b15801561086057600080fd5b505af1158015610874573d6000803e3d6000fd5b50506025546040517f06447d560000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506306447d569150602401600060405180830381600087803b1580156108ea57600080fd5b505af11580156108fe573d6000803e3d6000fd5b50506020546022546040517fae7a3a6f0000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201529116925063ae7a3a6f9150602401600060405180830381600087803b15801561096457600080fd5b505af1158015610978573d6000803e3d6000fd5b50506020546023546040517f10188aef0000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152911692506310188aef9150602401600060405180830381600087803b1580156109de57600080fd5b505af11580156109f2573d6000803e3d6000fd5b505050507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b03166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610a5457600080fd5b505af1158015610a68573d6000803e3d6000fd5b50505050565b60606016805480602002602001604051908101604052809291908181526020018280548015610ac657602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610aa8575b5050505050905090565b6040517f68656c6c6f0000000000000000000000000000000000000000000000000000006020820152620186a09060009060250160408051808303601f190181529082905260275463ca669fa760e01b83526001600160a01b031660048301529150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015610b6b57600080fd5b505af1158015610b7f573d6000803e3d6000fd5b50506023546040517f6f8b44b0000000000000000000000000000000000000000000000000000000008152600481018690526001600160a01b039091169250636f8b44b09150602401600060405180830381600087803b158015610be257600080fd5b505af1158015610bf6573d6000803e3d6000fd5b505060275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b158015610c5357600080fd5b505af1158015610c67573d6000803e3d6000fd5b50506040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fc30436e9000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b158015610cf057600080fd5b505af1158015610d04573d6000803e3d6000fd5b50506023546021546001600160a01b0391821693506302d5c899925016610d2c8560016192a1565b846040518463ffffffff1660e01b8152600401610d4b939291906192b4565b600060405180830381600087803b158015610d6557600080fd5b505af1158015610d79573d6000803e3d6000fd5b505050505050565b6060601e805480602002602001604051908101604052809291908181526020016000905b82821015610eba57600084815260208082206040805180820182526002870290920180546001600160a01b03168352600181018054835181870281018701909452808452939591948681019491929084015b82821015610ea3578382906000526020600020018054610e16906192ed565b80601f0160208091040260200160405190810160405280929190818152602001828054610e42906192ed565b8015610e8f5780601f10610e6457610100808354040283529160200191610e8f565b820191906000526020600020905b815481529060010190602001808311610e7257829003601f168201915b505050505081526020019060010190610df7565b505050508152505081526020019060010190610da5565b50505050905090565b60248054602654604051620186a09381018490526001600160a01b03928316604482015291166064820152600090819060840160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f357fc5a2000000000000000000000000000000000000000000000000000000001790526024805460265492516370a0823160e01b81526001600160a01b0393841660048201529394506000939216916370a082319101602060405180830381865afa158015610f9e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fc2919061933a565b9050610fcf816000614ce5565b602480546023546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa15801561101f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611043919061933a565b9050611050816000614ce5565b6020546040516001600160a01b039091166024820152604481018690526064810185905260009060840160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f1e458bee0000000000000000000000000000000000000000000000000000000017905260245490517ff30c7ba3000000000000000000000000000000000000000000000000000000008152919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f30c7ba391611137916001600160a01b0391909116906000908690600401619353565b600060405180830381600087803b15801561115157600080fd5b505af1158015611165573d6000803e3d6000fd5b50506021546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b1580156111f757600080fd5b505af115801561120b573d6000803e3d6000fd5b505060208054602454602654604080516001600160a01b0394851681529485018d905291831684830152919091166060830152517f2b58128f24a9f59127cc5b5430d70542b22220f2d9adaa86e442b816ab98af609350908190036080019150a16023546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b1580156112fa57600080fd5b505af115801561130e573d6000803e3d6000fd5b50506021546040516001600160a01b0390911692507f7772f56296d3a5202974a45c61c9188d844ab4d6eeb18c851e4b8d5384ca6ced9150611353908990889061937b565b60405180910390a260275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156113b457600080fd5b505af11580156113c8573d6000803e3d6000fd5b50506023546021546040517f5e3e9fef0000000000000000000000000000000000000000000000000000000081526001600160a01b039283169450635e3e9fef935061142092909116908a9089908b90600401619394565b600060405180830381600087803b15801561143a57600080fd5b505af115801561144e573d6000803e3d6000fd5b5050602480546026546040516370a0823160e01b81526001600160a01b03918216600482015260009550911692506370a082319101602060405180830381865afa1580156114a0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114c4919061933a565b90506114d08188614ce5565b602480546023546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa158015611520573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611544919061933a565b9050611551816000614ce5565b602480546020546021546040517fdd62ed3e0000000000000000000000000000000000000000000000000000000081526001600160a01b0392831660048201529082169381019390935260009291169063dd62ed3e90604401602060405180830381865afa1580156115c7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115eb919061933a565b90506115f8816000614ce5565b602480546020546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa158015611648573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061166c919061933a565b9050611679816000614ce5565b50505050505050505050565b60606018805480602002602001604051908101604052809291908181526020018280548015610ac6576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311610aa8575050505050905090565b60606017805480602002602001604051908101604052809291908181526020018280548015610ac6576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311610aa8575050505050905090565b604080516004808252602480830184526020830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f6ed70169000000000000000000000000000000000000000000000000000000001790525460265493516370a0823160e01b8152620186a0946000949385936001600160a01b03908116936370a08231936117e693921691016001600160a01b0391909116815260200190565b602060405180830381865afa158015611803573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611827919061933a565b9050611834816000614ce5565b602480546023546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa158015611884573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118a8919061933a565b90506118b5816000614ce5565b6020546040516001600160a01b039091166024820152604481018690526064810185905260009060840160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f1e458bee0000000000000000000000000000000000000000000000000000000017905260245490517ff30c7ba3000000000000000000000000000000000000000000000000000000008152919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f30c7ba39161199c916001600160a01b0391909116906000908690600401619353565b600060405180830381600087803b1580156119b657600080fd5b505af11580156119ca573d6000803e3d6000fd5b50506021546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b158015611a5c57600080fd5b505af1158015611a70573d6000803e3d6000fd5b5050602080546040516001600160a01b0390911681527fbcaadb46b82a48af60b608f58959ae6b8310d1b0a0d094c2e9ec3208ed39f2a0935001905060405180910390a16023546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b158015611b4257600080fd5b505af1158015611b56573d6000803e3d6000fd5b50506021546040516001600160a01b0390911692507f7772f56296d3a5202974a45c61c9188d844ab4d6eeb18c851e4b8d5384ca6ced9150611b9b908990889061937b565b60405180910390a260275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015611bfc57600080fd5b505af1158015611c10573d6000803e3d6000fd5b50506023546021546040517f5e3e9fef0000000000000000000000000000000000000000000000000000000081526001600160a01b039283169450635e3e9fef9350611c6892909116908a9089908b90600401619394565b600060405180830381600087803b158015611c8257600080fd5b505af1158015611c96573d6000803e3d6000fd5b5050602480546026546040516370a0823160e01b81526001600160a01b03918216600482015260009550911692506370a082319101602060405180830381865afa158015611ce8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d0c919061933a565b90506114d0816000614ce5565b6060601b805480602002602001604051908101604052809291908181526020016000905b82821015610eba5783829060005260206000209060020201604051806040016040529081600082018054611d70906192ed565b80601f0160208091040260200160405190810160405280929190818152602001828054611d9c906192ed565b8015611de95780601f10611dbe57610100808354040283529160200191611de9565b820191906000526020600020905b815481529060010190602001808311611dcc57829003601f168201915b5050505050815260200160018201805480602002602001604051908101604052809291908181526020018280548015611e8357602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019060040190602082600301049283019260010382029150808411611e305790505b50505050508152505081526020019060010190611d3d565b60275460405163ca669fa760e01b81526001600160a01b039091166004820152620186a090737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015611ef957600080fd5b505af1158015611f0d573d6000803e3d6000fd5b50506023546040517f6f8b44b0000000000000000000000000000000000000000000000000000000008152600481018590526001600160a01b039091169250636f8b44b09150602401600060405180830381600087803b158015611f7057600080fd5b505af1158015611f84573d6000803e3d6000fd5b505060275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b158015611fe157600080fd5b505af1158015611ff5573d6000803e3d6000fd5b50506040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fc30436e9000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b15801561207e57600080fd5b505af1158015612092573d6000803e3d6000fd5b50506023546021546001600160a01b03918216935063106e62909250166120ba8460016192a1565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b039092166004830152602482015260006044820152606401600060405180830381600087803b15801561211f57600080fd5b505af1158015612133573d6000803e3d6000fd5b5050505050565b6040517f68656c6c6f0000000000000000000000000000000000000000000000000000006020820152620186a090600090819060250160408051808303601f190181529082905260255463ca669fa760e01b83526001600160a01b031660048301529150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156121d757600080fd5b505af11580156121eb573d6000803e3d6000fd5b5050602554604080516001600160a01b0390921660248301527f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e460448084019190915281518084039091018152606490920181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb392506122d691906004016193cd565b600060405180830381600087803b1580156122f057600080fd5b505af1158015612304573d6000803e3d6000fd5b50506023546021546040517f02d5c8990000000000000000000000000000000000000000000000000000000081526001600160a01b0392831694506302d5c899935061235c9290911690879086908890600401619394565b600060405180830381600087803b15801561237657600080fd5b505af115801561238a573d6000803e3d6000fd5b50505050505050565b6060601a805480602002602001604051908101604052809291908181526020016000905b82821015610eba5783829060005260206000200180546123d6906192ed565b80601f0160208091040260200160405190810160405280929190818152602001828054612402906192ed565b801561244f5780601f106124245761010080835404028352916020019161244f565b820191906000526020600020905b81548152906001019060200180831161243257829003601f168201915b5050505050815260200190600101906123b7565b6060601d805480602002602001604051908101604052809291908181526020016000905b82821015610eba5760008481526020908190206040805180820182526002860290920180546001600160a01b0316835260018101805483518187028101870190945280845293949193858301939283018282801561254657602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190600401906020826003010492830192600103820291508084116124f35790505b50505050508152505081526020019060010190612487565b6040517f68656c6c6f0000000000000000000000000000000000000000000000000000006020820152620186a09060009060250160408051808303601f190181529082905260275463ca669fa760e01b83526001600160a01b031660048301529150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156125f957600080fd5b505af115801561260d573d6000803e3d6000fd5b50506023546040517f6f8b44b0000000000000000000000000000000000000000000000000000000008152600481018690526001600160a01b039091169250636f8b44b09150602401600060405180830381600087803b15801561267057600080fd5b505af1158015612684573d6000803e3d6000fd5b505060275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b1580156126e157600080fd5b505af11580156126f5573d6000803e3d6000fd5b50506040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fc30436e9000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b15801561277e57600080fd5b505af1158015612792573d6000803e3d6000fd5b50506023546021546001600160a01b039182169350635e3e9fef925016610d2c8560016192a1565b6060601c805480602002602001604051908101604052809291908181526020016000905b82821015610eba5760008481526020908190206040805180820182526002860290920180546001600160a01b0316835260018101805483518187028101870190945280845293949193858301939283018282801561289d57602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168152602001906004019060208260030104928301926001038202915080841161284a5790505b505050505081525050815260200190600101906127de565b60606019805480602002602001604051908101604052809291908181526020016000905b82821015610eba5783829060005260206000200180546128f8906192ed565b80601f0160208091040260200160405190810160405280929190818152602001828054612924906192ed565b80156129715780601f1061294657610100808354040283529160200191612971565b820191906000526020600020905b81548152906001019060200180831161295457829003601f168201915b5050505050815260200190600101906128d9565b60085460009060ff161561299d575060085460ff1690565b6040517f667f9d70000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d600482018190527f6661696c65640000000000000000000000000000000000000000000000000000602483015260009163667f9d7090604401602060405180830381865afa158015612a2e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a52919061933a565b1415905090565b60248054602654604051620186a09381018490526001600160a01b03928316604482015291166064820152600090819060840160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f357fc5a200000000000000000000000000000000000000000000000000000000179052602554905163ca669fa760e01b81526001600160a01b039091166004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015612b3f57600080fd5b505af1158015612b53573d6000803e3d6000fd5b5050602554604080516001600160a01b0390921660248301527f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e460448084019190915281518084039091018152606490920181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb39250612c3e91906004016193cd565b600060405180830381600087803b158015612c5857600080fd5b505af1158015612c6c573d6000803e3d6000fd5b50506023546021546040517f5e3e9fef0000000000000000000000000000000000000000000000000000000081526001600160a01b039283169450635e3e9fef935061235c9290911690879086908890600401619394565b60275460405163ca669fa760e01b81526001600160a01b039091166004820152620186a090600090737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015612d2557600080fd5b505af1158015612d39573d6000803e3d6000fd5b5050602754604080516001600160a01b0390921660248301527f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a60448084019190915281518084039091018152606490920181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb39250612e2491906004016193cd565b600060405180830381600087803b158015612e3e57600080fd5b505af1158015612e52573d6000803e3d6000fd5b50505050602360009054906101000a90046001600160a01b03166001600160a01b0316638456cb596040518163ffffffff1660e01b8152600401600060405180830381600087803b158015612ea657600080fd5b505af1158015612eba573d6000803e3d6000fd5b505060275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b158015612f1757600080fd5b505af1158015612f2b573d6000803e3d6000fd5b5050602754604080516001600160a01b0390921660248301527f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a60448084019190915281518084039091018152606490920181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb3925061301691906004016193cd565b600060405180830381600087803b15801561303057600080fd5b505af1158015613044573d6000803e3d6000fd5b50505050602360009054906101000a90046001600160a01b03166001600160a01b0316633f4ba83a6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561309857600080fd5b505af11580156130ac573d6000803e3d6000fd5b505060255460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b15801561310957600080fd5b505af115801561311d573d6000803e3d6000fd5b50505050602360009054906101000a90046001600160a01b03166001600160a01b0316638456cb596040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561317157600080fd5b505af1158015613185573d6000803e3d6000fd5b50506040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fd93c0665000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b15801561320e57600080fd5b505af1158015613222573d6000803e3d6000fd5b505060275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b15801561327f57600080fd5b505af1158015613293573d6000803e3d6000fd5b50506023546026546040517f106e62900000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260248101879052604481018690529116925063106e62909150606401600060405180830381600087803b15801561330757600080fd5b505af115801561331b573d6000803e3d6000fd5b505060255460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b15801561337857600080fd5b505af115801561338c573d6000803e3d6000fd5b50505050602360009054906101000a90046001600160a01b03166001600160a01b0316633f4ba83a6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156133e057600080fd5b505af11580156133f4573d6000803e3d6000fd5b5050602480546026546040516370a0823160e01b81526001600160a01b03918216600482015260009550911692506370a082319101602060405180830381865afa158015613446573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061346a919061933a565b9050613477816000614ce5565b6026546040516001600160a01b039091166024820152604481018490526064810183905260009060840160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f1e458bee0000000000000000000000000000000000000000000000000000000017905260245490517ff30c7ba3000000000000000000000000000000000000000000000000000000008152919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f30c7ba39161355e916001600160a01b0391909116906000908690600401619353565b600060405180830381600087803b15801561357857600080fd5b505af115801561358c573d6000803e3d6000fd5b50506023546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b15801561361e57600080fd5b505af1158015613632573d6000803e3d6000fd5b50506026546040518781526001600160a01b0390911692507f884edad9ce6fa2440d8a54cc123490eb96d2768479d49ff9c7366125a9424364915060200160405180910390a260275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156136d157600080fd5b505af11580156136e5573d6000803e3d6000fd5b50506023546026546040517f106e62900000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260248101899052604481018890529116925063106e629091506064015b600060405180830381600087803b15801561375a57600080fd5b505af115801561376e573d6000803e3d6000fd5b5050602480546026546040516370a0823160e01b81526001600160a01b03918216600482015260009550911692506370a082319101602060405180830381865afa1580156137c0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137e4919061933a565b90506121338186614ce5565b602480546026546040516370a0823160e01b81526001600160a01b039182166004820152620186a09360009392909216916370a082319101602060405180830381865afa158015613845573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613869919061933a565b9050613876816000614ce5565b6026546040516001600160a01b0390911660248201526044810183905260006064820181905290819060840160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f1e458bee0000000000000000000000000000000000000000000000000000000017905260245490517ff30c7ba3000000000000000000000000000000000000000000000000000000008152919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f30c7ba39161395f916001600160a01b0391909116906000908690600401619353565b600060405180830381600087803b15801561397957600080fd5b505af115801561398d573d6000803e3d6000fd5b50506023546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b158015613a1f57600080fd5b505af1158015613a33573d6000803e3d6000fd5b50506026546040518781526001600160a01b0390911692507f884edad9ce6fa2440d8a54cc123490eb96d2768479d49ff9c7366125a9424364915060200160405180910390a260275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015613ad257600080fd5b505af1158015613ae6573d6000803e3d6000fd5b50506023546026546040517f106e62900000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260248101899052604481018790529116925063106e62909150606401613740565b60248054602654604051620186a09381018490526001600160a01b03928316604482015291166064820152600090819060840160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fc5131691000000000000000000000000000000000000000000000000000000001790526024805460265492516370a0823160e01b81526001600160a01b0393841660048201529394506000939216916370a082319101602060405180830381865afa158015613c20573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613c44919061933a565b9050613c51816000614ce5565b602480546023546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa158015613ca1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613cc5919061933a565b9050613cd2816000614ce5565b6020546040516001600160a01b039091166024820152604481018690526064810185905260009060840160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f1e458bee0000000000000000000000000000000000000000000000000000000017905260245490517ff30c7ba3000000000000000000000000000000000000000000000000000000008152919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f30c7ba391613db9916001600160a01b0391909116906000908690600401619353565b600060405180830381600087803b158015613dd357600080fd5b505af1158015613de7573d6000803e3d6000fd5b50506021546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b158015613e7957600080fd5b505af1158015613e8d573d6000803e3d6000fd5b50506020547f2b58128f24a9f59127cc5b5430d70542b22220f2d9adaa86e442b816ab98af6092506001600160a01b03169050613ecb6002896193e0565b602454602654604080516001600160a01b03958616815260208101949094529184168383015292909216606082015290519081900360800190a16023546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b158015613f9357600080fd5b505af1158015613fa7573d6000803e3d6000fd5b50506021546040516001600160a01b0390911692507f7772f56296d3a5202974a45c61c9188d844ab4d6eeb18c851e4b8d5384ca6ced9150613fec908990889061937b565b60405180910390a260275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561404d57600080fd5b505af1158015614061573d6000803e3d6000fd5b50506023546021546040517f5e3e9fef0000000000000000000000000000000000000000000000000000000081526001600160a01b039283169450635e3e9fef93506140b992909116908a9089908b90600401619394565b600060405180830381600087803b1580156140d357600080fd5b505af11580156140e7573d6000803e3d6000fd5b5050602480546026546040516370a0823160e01b81526001600160a01b03918216600482015260009550911692506370a082319101602060405180830381865afa158015614139573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061415d919061933a565b90506114d08161416e60028a6193e0565b614ce5565b6040517f68656c6c6f0000000000000000000000000000000000000000000000000000006020820152620186a090600090819060250160408051808303601f1901815290829052602480546021546370a0823160e01b85526001600160a01b0390811660048601529294506000939216916370a082319101602060405180830381865afa158015614208573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061422c919061933a565b9050614239816000614ce5565b602480546023546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa158015614289573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906142ad919061933a565b6020546040516001600160a01b039091166024820152604481018790526064810186905290915060009060840160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f1e458bee0000000000000000000000000000000000000000000000000000000017905260245490517ff30c7ba3000000000000000000000000000000000000000000000000000000008152919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f30c7ba391614397916001600160a01b0391909116906000908690600401619353565b600060405180830381600087803b1580156143b157600080fd5b505af11580156143c5573d6000803e3d6000fd5b50506021546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b15801561445757600080fd5b505af115801561446b573d6000803e3d6000fd5b50506020546040517f0d3f65f00e631663aa85c96330b5c7a83bb29af3630c0063776f985edc3037aa93506144ae92506001600160a01b0390911690879061941b565b60405180910390a16020546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b15801561454457600080fd5b505af1158015614558573d6000803e3d6000fd5b50506021546024546040516001600160a01b039283169450911691507f723fc7be2448075379e4fdf1e6bf5fead954d2668d2da05dcb44ccfec4beeda7906145a3908a90899061937b565b60405180910390a36023546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b15801561463957600080fd5b505af115801561464d573d6000803e3d6000fd5b50506021546040516001600160a01b0390911692507fba96f26bdda53eb8c8ba39045dfb4ff39753fbc7a6edcf250a88e75e78d102fe9150614692908990889061937b565b60405180910390a260275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156146f357600080fd5b505af1158015614707573d6000803e3d6000fd5b50506023546021546040517f02d5c8990000000000000000000000000000000000000000000000000000000081526001600160a01b0392831694506302d5c899935061475f92909116908a9089908b90600401619394565b600060405180830381600087803b15801561477957600080fd5b505af115801561478d573d6000803e3d6000fd5b5050602480546021546040516370a0823160e01b81526001600160a01b03918216600482015260009550911692506370a082319101602060405180830381865afa1580156147df573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614803919061933a565b905061480f8188614ce5565b602480546023546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa15801561485f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614883919061933a565b90506115518185614ce5565b60606015805480602002602001604051908101604052809291908181526020018280548015610ac6576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311610aa8575050505050905090565b60255460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561494857600080fd5b505af115801561495c573d6000803e3d6000fd5b5050602554604080516001600160a01b0390921660248301527f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb60448084019190915281518084039091018152606490920181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb39250614a4791906004016193cd565b600060405180830381600087803b158015614a6157600080fd5b505af1158015614a75573d6000803e3d6000fd5b50506023546040517f6f8b44b000000000000000000000000000000000000000000000000000000000815261271060048201526001600160a01b039091169250636f8b44b09150602401600060405180830381600087803b158015610a5457600080fd5b60255460405163ca669fa760e01b81526001600160a01b039091166004820152620186a090600090737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015614b3a57600080fd5b505af1158015614b4e573d6000803e3d6000fd5b5050602554604080516001600160a01b0390921660248301527f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e460448084019190915281518084039091018152606490920181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb39250614c3991906004016193cd565b600060405180830381600087803b158015614c5357600080fd5b505af1158015614c67573d6000803e3d6000fd5b50506023546026546040517f106e62900000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260248101879052604481018690529116925063106e62909150606401610d4b565b6000614cd0618e0b565b614cdb848483614d64565b9150505b92915050565b6040517f98296c540000000000000000000000000000000000000000000000000000000081526004810183905260248101829052737109709ecfa91a80626ff3989d68f67f5b1dd12d906398296c549060440160006040518083038186803b158015614d5057600080fd5b505afa158015610d79573d6000803e3d6000fd5b600080614d718584614ddf565b9050614dd46040518060400160405280601d81526020017f4552433139363750726f78792e736f6c3a4552433139363750726f78790000008152508286604051602001614dbf92919061941b565b60405160208183030381529060405285614deb565b9150505b9392505050565b6000614dd88383614e19565b60c08101515160009015614e0f57614e0884848460c00151614e34565b9050614dd8565b614e088484614fda565b6000614e2583836150c5565b614dd883836020015184614deb565b600080614e3f6150d5565b90506000614e4d86836151a8565b90506000614e64826060015183602001518561564e565b90506000614e7483838989615860565b90506000614e81826166dd565b602081015181519192509060030b15614ef457898260400151604051602001614eab92919061943d565b60408051601f19818403018152908290527f08c379a0000000000000000000000000000000000000000000000000000000008252614eeb916004016193cd565b60405180910390fd5b6000614f376040518060400160405280601581526020017f4465706c6f79656420746f20616464726573733a2000000000000000000000008152508360016168ac565b6040517fc6ce059d000000000000000000000000000000000000000000000000000000008152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c6ce059d90614f8a9084906004016193cd565b602060405180830381865afa158015614fa7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614fcb91906194be565b9b9a5050505050505050505050565b6040517f8d1cc9250000000000000000000000000000000000000000000000000000000081526000908190737109709ecfa91a80626ff3989d68f67f5b1dd12d90638d1cc9259061502f9087906004016193cd565b600060405180830381865afa15801561504c573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261507491908101906195cf565b905060006150a2828560405160200161508e929190619604565b604051602081830303815290604052616aac565b90506001600160a01b038116614cdb578484604051602001614eab929190619633565b6150d182826000616abf565b5050565b604080518082018252600381527f6f75740000000000000000000000000000000000000000000000000000000000602082015290517fd145736c000000000000000000000000000000000000000000000000000000008152606091737109709ecfa91a80626ff3989d68f67f5b1dd12d91829063d145736c9061515c9084906004016196de565b600060405180830381865afa158015615179573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526151a19190810190619725565b9250505090565b6151da6040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b6000737109709ecfa91a80626ff3989d68f67f5b1dd12d90506152256040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b61522e85616bc2565b6020820152600061523e86616fa7565b90506000836001600160a01b031663d930a0e66040518163ffffffff1660e01b8152600401600060405180830381865afa158015615280573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526152a89190810190619725565b868385602001516040516020016152c2949392919061976e565b60408051601f19818403018152908290527f60f9bb1100000000000000000000000000000000000000000000000000000000825291506000906001600160a01b038616906360f9bb119061531a9085906004016193cd565b600060405180830381865afa158015615337573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261535f9190810190619725565b6040517fdb4235f60000000000000000000000000000000000000000000000000000000081529091506001600160a01b0386169063db4235f6906153a7908490600401619872565b602060405180830381865afa1580156153c4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906153e891906198c4565b6153fd5781604051602001614eab91906198e6565b6040517f49c4fac80000000000000000000000000000000000000000000000000000000081526001600160a01b038616906349c4fac890615442908490600401619978565b600060405180830381865afa15801561545f573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526154879190810190619725565b84526040517fdb4235f60000000000000000000000000000000000000000000000000000000081526001600160a01b0386169063db4235f6906154ce9084906004016199ca565b602060405180830381865afa1580156154eb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061550f91906198c4565b156155a4576040517f49c4fac80000000000000000000000000000000000000000000000000000000081526001600160a01b038616906349c4fac8906155599084906004016199ca565b600060405180830381865afa158015615576573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261559e9190810190619725565b60408501525b846001600160a01b03166349c4fac88286600001516040516020016155c99190619a1c565b6040516020818303038152906040526040518363ffffffff1660e01b81526004016155f5929190619a88565b600060405180830381865afa158015615612573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261563a9190810190619725565b606085015250608083015250949350505050565b60408051600480825260a0820190925260609160009190816020015b606081526020019060019003908161566a5790505090506040518060400160405280600481526020017f6772657000000000000000000000000000000000000000000000000000000000815250816000815181106156ca576156ca619aad565b60200260200101819052506040518060400160405280600381526020017f2d726c00000000000000000000000000000000000000000000000000000000008152508160018151811061571e5761571e619aad565b60200260200101819052508460405160200161573a9190619adc565b6040516020818303038152906040528160028151811061575c5761575c619aad565b6020026020010181905250826040516020016157789190619b48565b6040516020818303038152906040528160038151811061579a5761579a619aad565b602002602001018190525060006157b0826166dd565b602080820151604080518082018252600581527f2e6a736f6e0000000000000000000000000000000000000000000000000000008185019081528251808401845260008082529086015282518084019093529051825292810192909252919250615841906040805180820182526000808252602091820152815180830190925284518252808501908201529061722a565b6158565785604051602001614eab9190619b89565b9695505050505050565b60a0810151604080518082018252600080825260209182015281518083019092528251808352928101910152606090737109709ecfa91a80626ff3989d68f67f5b1dd12d90156158b0565b511590565b615a245782602001511561596c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605860248201527f54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f742060448201527f62652075736564207768656e207468652060736b6970566572696679536f757260648201527f6365436f646560206f7074696f6e206973206074727565600000000000000000608482015260a401614eeb565b8260c0015115615a24576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605360248201527f54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f742060448201527f62652075736564207768656e207468652060736b69704c6963656e736554797060648201527f6560206f7074696f6e2069732060747275656000000000000000000000000000608482015260a401614eeb565b6040805160ff8082526120008201909252600091816020015b6060815260200190600190039081615a3d57905050905060006040518060400160405280600381526020017f6e70780000000000000000000000000000000000000000000000000000000000815250828280615a9890619c1a565b935060ff1681518110615aad57615aad619aad565b60200260200101819052506040518060400160405280600d81526020017f302e302e312d616c7068612e3700000000000000000000000000000000000000815250604051602001615afe9190619c39565b604051602081830303815290604052828280615b1990619c1a565b935060ff1681518110615b2e57615b2e619aad565b60200260200101819052506040518060400160405280600681526020017f6465706c6f790000000000000000000000000000000000000000000000000000815250828280615b7b90619c1a565b935060ff1681518110615b9057615b90619aad565b60200260200101819052506040518060400160405280600e81526020017f2d2d636f6e74726163744e616d65000000000000000000000000000000000000815250828280615bdd90619c1a565b935060ff1681518110615bf257615bf2619aad565b60200260200101819052508760200151828280615c0e90619c1a565b935060ff1681518110615c2357615c23619aad565b60200260200101819052506040518060400160405280600e81526020017f2d2d636f6e747261637450617468000000000000000000000000000000000000815250828280615c7090619c1a565b935060ff1681518110615c8557615c85619aad565b602090810291909101015287518282615c9d81619c1a565b935060ff1681518110615cb257615cb2619aad565b60200260200101819052506040518060400160405280600981526020017f2d2d636861696e49640000000000000000000000000000000000000000000000815250828280615cff90619c1a565b935060ff1681518110615d1457615d14619aad565b6020026020010181905250615d284661728b565b8282615d3381619c1a565b935060ff1681518110615d4857615d48619aad565b60200260200101819052506040518060400160405280600f81526020017f2d2d6275696c64496e666f46696c650000000000000000000000000000000000815250828280615d9590619c1a565b935060ff1681518110615daa57615daa619aad565b602002602001018190525086828280615dc290619c1a565b935060ff1681518110615dd757615dd7619aad565b6020908102919091010152855115615efe5760408051808201909152601581527f2d2d636f6e7374727563746f7242797465636f6465000000000000000000000060208201528282615e2881619c1a565b935060ff1681518110615e3d57615e3d619aad565b60209081029190910101526040517f71aad10d0000000000000000000000000000000000000000000000000000000081526001600160a01b038416906371aad10d90615e8d9089906004016193cd565b600060405180830381865afa158015615eaa573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052615ed29190810190619725565b8282615edd81619c1a565b935060ff1681518110615ef257615ef2619aad565b60200260200101819052505b846020015115615fce5760408051808201909152601281527f2d2d766572696679536f75726365436f6465000000000000000000000000000060208201528282615f4781619c1a565b935060ff1681518110615f5c57615f5c619aad565b60200260200101819052506040518060400160405280600581526020017f66616c7365000000000000000000000000000000000000000000000000000000815250828280615fa990619c1a565b935060ff1681518110615fbe57615fbe619aad565b6020026020010181905250616195565b6160066158ab8660a0015160408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6160995760408051808201909152600d81527f2d2d6c6963656e736554797065000000000000000000000000000000000000006020820152828261604981619c1a565b935060ff168151811061605e5761605e619aad565b60200260200101819052508460a0015160405160200161607e9190619adc565b604051602081830303815290604052828280615fa990619c1a565b8460c001511580156160dc5750604080890151815180830183526000808252602091820152825180840190935281518352908101908201526160da90511590565b155b156161955760408051808201909152600d81527f2d2d6c6963656e736554797065000000000000000000000000000000000000006020820152828261612081619c1a565b935060ff168151811061613557616135619aad565b60200260200101819052506161498861732b565b6040516020016161599190619adc565b60405160208183030381529060405282828061617490619c1a565b935060ff168151811061618957616189619aad565b60200260200101819052505b604080860151815180830183526000808252602091820152825180840190935281518352908101908201526161c990511590565b61625e5760408051808201909152600b81527f2d2d72656c6179657249640000000000000000000000000000000000000000006020820152828261620c81619c1a565b935060ff168151811061622157616221619aad565b6020026020010181905250846040015182828061623d90619c1a565b935060ff168151811061625257616252619aad565b60200260200101819052505b60608501511561637f5760408051808201909152600681527f2d2d73616c740000000000000000000000000000000000000000000000000000602082015282826162a781619c1a565b935060ff16815181106162bc576162bc619aad565b602090810291909101015260608501516040517fb11a19e800000000000000000000000000000000000000000000000000000000815260048101919091526001600160a01b0384169063b11a19e890602401600060405180830381865afa15801561632b573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526163539190810190619725565b828261635e81619c1a565b935060ff168151811061637357616373619aad565b60200260200101819052505b60e085015151156164265760408051808201909152600a81527f2d2d6761734c696d697400000000000000000000000000000000000000000000602082015282826163c981619c1a565b935060ff16815181106163de576163de619aad565b60200260200101819052506163fa8560e001516000015161728b565b828261640581619c1a565b935060ff168151811061641a5761641a619aad565b60200260200101819052505b60e085015160200151156164d05760408051808201909152600a81527f2d2d6761735072696365000000000000000000000000000000000000000000006020820152828261647381619c1a565b935060ff168151811061648857616488619aad565b60200260200101819052506164a48560e001516020015161728b565b82826164af81619c1a565b935060ff16815181106164c4576164c4619aad565b60200260200101819052505b60e0850151604001511561657a5760408051808201909152600e81527f2d2d6d61784665655065724761730000000000000000000000000000000000006020820152828261651d81619c1a565b935060ff168151811061653257616532619aad565b602002602001018190525061654e8560e001516040015161728b565b828261655981619c1a565b935060ff168151811061656e5761656e619aad565b60200260200101819052505b60e085015160600151156166245760408051808201909152601681527f2d2d6d61785072696f7269747946656550657247617300000000000000000000602082015282826165c781619c1a565b935060ff16815181106165dc576165dc619aad565b60200260200101819052506165f88560e001516060015161728b565b828261660381619c1a565b935060ff168151811061661857616618619aad565b60200260200101819052505b60008160ff1667ffffffffffffffff811115616642576166426194e7565b60405190808252806020026020018201604052801561667557816020015b60608152602001906001900390816166605790505b50905060005b8260ff168160ff1610156166ce57838160ff168151811061669e5761669e619aad565b6020026020010151828260ff16815181106166bb576166bb619aad565b602090810291909101015260010161667b565b5093505050505b949350505050565b6167046040518060600160405280600060030b815260200160608152602001606081525090565b60408051808201825260048082527f6261736800000000000000000000000000000000000000000000000000000000602083015291517fd145736c000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d92600091849163d145736c9161678a91869101619ca4565b600060405180830381865afa1580156167a7573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526167cf9190810190619725565b905060006167dd8683617e1a565b90506000846001600160a01b031663f45c1ce7836040518263ffffffff1660e01b815260040161680d9190619164565b6000604051808303816000875af115801561682c573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526168549190810190619ceb565b805190915060030b1580159061686d5750602081015151155b801561687c5750604081015151155b15615856578160008151811061689457616894619aad565b6020026020010151604051602001614eab9190619da1565b606060006168e18560408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6040805180820182526000808252602091820152815180830190925286518252808701908201529091506169189082905b90617f6f565b15616a755760006169958261698f8461698961695b8a60408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6040805180820182526000808252602091820152815180830190925282518252918201519181019190915290565b90617f96565b90617ff8565b604080518082018252600181527f0a00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201529091506169f9908290617f6f565b15616a6357604080518082018252600181527f0a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616a60905b829061807d565b90505b616a6c816180a3565b92505050614dd8565b8215616a8e578484604051602001614eab929190619f8d565b5050604080516020810190915260008152614dd8565b509392505050565b6000808251602084016000f09392505050565b8160a0015115616ace57505050565b6000616adb84848461810c565b90506000616ae8826166dd565b602081015181519192509060030b158015616b845750604080518082018252600781527f535543434553530000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616b8490604080518082018252600080825260209182015281518083019092528451825280850190820152616912565b15616b9157505050505050565b60408201515115616bb1578160400151604051602001614eab919061a034565b80604051602001614eab919061a092565b60606000616bf78360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600481527f2e736f6c0000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152909150616c5c905b829061722a565b15616ccb57604080518082018252600481527f2e736f6c0000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152614dd890616cc69083906186a7565b6180a3565b604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616d2d905b8290618731565b600103616dfa57604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616d9390616a59565b50604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152614dd890616cc6905b839061807d565b604080518082018252600581527f2e6a736f6e00000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616e5990616c55565b15616f9057604080518082018252600181527f2f00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820181905284518086019095529251845283015290616ec19083906187cb565b905060008160018351616ed4919061a0fd565b81518110616ee457616ee4619aad565b60200260200101519050616f87616cc6616f5a6040518060400160405280600581526020017f2e6a736f6e00000000000000000000000000000000000000000000000000000081525060408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600080825260209182015281518083019092528551825280860190820152906186a7565b95945050505050565b82604051602001614eab919061a110565b50919050565b60606000616fdc8360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600481527f2e736f6c000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015290915061703e90616c55565b1561704c57614dd8816180a3565b604080518082018252600181527f3a00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526170ab90616d26565b60010361711557604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152614dd890616cc690616df3565b604080518082018252600581527f2e6a736f6e0000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261717490616c55565b15616f9057604080518082018252600181527f2f000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201819052845180860190955292518452830152906171dc9083906187cb565b90506001815111156172185780600282516171f7919061a0fd565b8151811061720757617207619aad565b602002602001015192505050919050565b5082604051602001614eab919061a110565b80518251600091111561723f57506000614cdf565b81518351602085015160009291617255916192a1565b61725f919061a0fd565b905082602001518103617276576001915050614cdf565b82516020840151819020912014905092915050565b6060600061729883618870565b600101905060008167ffffffffffffffff8111156172b8576172b86194e7565b6040519080825280601f01601f1916602001820160405280156172e2576020820181803683370190505b5090508181016020015b600019017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a85049450846172ec57509392505050565b604081810151815180830183526000808252602091820181905283518085018552835181529282018383015283518085018552600a81527f554e4c4943454e53454400000000000000000000000000000000000000000000818401908152855180870187528381528401929092528451808601909552518452908301526060916173b7905b8290618952565b156173f757505060408051808201909152600481527f4e6f6e65000000000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600981527f556e6c6963656e7365000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617456906173b0565b1561749657505060408051808201909152600981527f556e6c6963656e736500000000000000000000000000000000000000000000006020820152919050565b604080518082018252600381527f4d49540000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526174f5906173b0565b1561753557505060408051808201909152600381527f4d495400000000000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f47504c2d322e302d6f6e6c79000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617594906173b0565b806175f95750604080518082018252601081527f47504c2d322e302d6f722d6c6174657200000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526175f9906173b0565b1561763957505060408051808201909152600981527f474e552047504c763200000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f47504c2d332e302d6f6e6c79000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617698906173b0565b806176fd5750604080518082018252601081527f47504c2d332e302d6f722d6c6174657200000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526176fd906173b0565b1561773d57505060408051808201909152600981527f474e552047504c763300000000000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4c47504c2d322e312d6f6e6c79000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261779c906173b0565b806178015750604080518082018252601181527f4c47504c2d322e312d6f722d6c6174657200000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617801906173b0565b1561784157505060408051808201909152600c81527f474e55204c47504c76322e3100000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4c47504c2d332e302d6f6e6c7900000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526178a0906173b0565b806179055750604080518082018252601181527f4c47504c2d332e302d6f722d6c6174657200000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617905906173b0565b1561794557505060408051808201909152600a81527f474e55204c47504c7633000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f4253442d322d436c617573650000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526179a4906173b0565b156179e457505060408051808201909152600c81527f4253442d322d436c6175736500000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f4253442d332d436c61757365000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617a43906173b0565b15617a8357505060408051808201909152600c81527f4253442d332d436c6175736500000000000000000000000000000000000000006020820152919050565b604080518082018252600781527f4d504c2d322e300000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617ae2906173b0565b15617b2257505060408051808201909152600781527f4d504c2d322e30000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600781527f4f534c2d332e300000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617b81906173b0565b15617bc157505060408051808201909152600781527f4f534c2d332e30000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600a81527f4170616368652d322e300000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617c20906173b0565b15617c6057505060408051808201909152600a81527f4170616368652d322e30000000000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4147504c2d332e302d6f6e6c790000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617cbf906173b0565b80617d245750604080518082018252601181527f4147504c2d332e302d6f722d6c6174657200000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617d24906173b0565b15617d6457505060408051808201909152600a81527f474e55204147504c7633000000000000000000000000000000000000000000006020820152919050565b604080518082018252600881527f4255534c2d312e3100000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617dc3906173b0565b15617e0357505060408051808201909152600781527f42534c20312e31000000000000000000000000000000000000000000000000006020820152919050565b60408084015184519151614eab929060200161a1ee565b60608060005b8451811015617ea55781858281518110617e3c57617e3c619aad565b6020026020010151604051602001617e55929190619604565b604051602081830303815290604052915060018551617e74919061a0fd565b8114617e9d5781604051602001617e8b919061a357565b60405160208183030381529060405291505b600101617e20565b5060408051600380825260808201909252600091816020015b6060815260200190600190039081617ebe5790505090508381600081518110617ee957617ee9619aad565b60200260200101819052506040518060400160405280600281526020017f2d6300000000000000000000000000000000000000000000000000000000000081525081600181518110617f3d57617f3d619aad565b60200260200101819052508181600281518110617f5c57617f5c619aad565b6020908102919091010152949350505050565b6020808301518351835192840151600093617f8d9291849190618966565b14159392505050565b60408051808201909152600080825260208201526000617fc88460000151856020015185600001518660200151618a77565b9050836020015181617fda919061a0fd565b84518590617fe990839061a0fd565b90525060208401525090919050565b604080518082019091526000808252602082015281518351101561801d575081614cdf565b60208083015190840151600191146180445750815160208481015190840151829020919020145b80156180755782518451859061805b90839061a0fd565b90525082516020850180516180719083906192a1565b9052505b509192915050565b604080518082019091526000808252602082015261809c838383618b97565b5092915050565b60606000826000015167ffffffffffffffff8111156180c4576180c46194e7565b6040519080825280601f01601f1916602001820160405280156180ee576020820181803683370190505b509050600060208201905061809c8185602001518660000151618c42565b606060006181186150d5565b6040805160ff808252612000820190925291925060009190816020015b606081526020019060019003908161813557905050905060006040518060400160405280600381526020017f6e7078000000000000000000000000000000000000000000000000000000000081525082828061819090619c1a565b935060ff16815181106181a5576181a5619aad565b60200260200101819052506040518060400160405280600781526020017f5e312e33322e33000000000000000000000000000000000000000000000000008152506040516020016181f6919061a398565b60405160208183030381529060405282828061821190619c1a565b935060ff168151811061822657618226619aad565b60200260200101819052506040518060400160405280600881526020017f76616c696461746500000000000000000000000000000000000000000000000081525082828061827390619c1a565b935060ff168151811061828857618288619aad565b6020026020010181905250826040516020016182a49190619b48565b6040516020818303038152906040528282806182bf90619c1a565b935060ff16815181106182d4576182d4619aad565b60200260200101819052506040518060400160405280600a81526020017f2d2d636f6e74726163740000000000000000000000000000000000000000000081525082828061832190619c1a565b935060ff168151811061833657618336619aad565b602002602001018190525061834b8784618cbc565b828261835681619c1a565b935060ff168151811061836b5761836b619aad565b6020908102919091010152855151156184175760408051808201909152600b81527f2d2d7265666572656e6365000000000000000000000000000000000000000000602082015282826183bd81619c1a565b935060ff16815181106183d2576183d2619aad565b60200260200101819052506183eb866000015184618cbc565b82826183f681619c1a565b935060ff168151811061840b5761840b619aad565b60200260200101819052505b8560800151156184855760408051808201909152601881527f2d2d756e73616665536b697053746f72616765436865636b00000000000000006020820152828261846081619c1a565b935060ff168151811061847557618475619aad565b60200260200101819052506184eb565b84156184eb5760408051808201909152601281527f2d2d726571756972655265666572656e63650000000000000000000000000000602082015282826184ca81619c1a565b935060ff16815181106184df576184df619aad565b60200260200101819052505b604086015151156185875760408051808201909152600d81527f2d2d756e73616665416c6c6f77000000000000000000000000000000000000006020820152828261853581619c1a565b935060ff168151811061854a5761854a619aad565b6020026020010181905250856040015182828061856690619c1a565b935060ff168151811061857b5761857b619aad565b60200260200101819052505b8560600151156185f15760408051808201909152601481527f2d2d756e73616665416c6c6f7752656e616d6573000000000000000000000000602082015282826185d081619c1a565b935060ff16815181106185e5576185e5619aad565b60200260200101819052505b60008160ff1667ffffffffffffffff81111561860f5761860f6194e7565b60405190808252806020026020018201604052801561864257816020015b606081526020019060019003908161862d5790505b50905060005b8260ff168160ff16101561869b57838160ff168151811061866b5761866b619aad565b6020026020010151828260ff168151811061868857618688619aad565b6020908102919091010152600101618648565b50979650505050505050565b60408051808201909152600080825260208201528151835110156186cc575081614cdf565b815183516020850151600092916186e2916192a1565b6186ec919061a0fd565b6020840151909150600190821461870d575082516020840151819020908220145b80156187285783518551869061872490839061a0fd565b9052505b50929392505050565b60008082600001516187558560000151866020015186600001518760200151618a77565b61875f91906192a1565b90505b8351602085015161877391906192a1565b811161809c57816187838161a3dd565b92505082600001516187ba85602001518361879e919061a0fd565b86516187aa919061a0fd565b8386600001518760200151618a77565b6187c491906192a1565b9050618762565b606060006187d98484618731565b6187e49060016192a1565b67ffffffffffffffff8111156187fc576187fc6194e7565b60405190808252806020026020018201604052801561882f57816020015b606081526020019060019003908161881a5790505b50905060005b8151811015616aa45761884b616cc6868661807d565b82828151811061885d5761885d619aad565b6020908102919091010152600101618835565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f01000000000000000083106188b9577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef810000000083106188e5576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc10000831061890357662386f26fc10000830492506010015b6305f5e100831061891b576305f5e100830492506008015b612710831061892f57612710830492506004015b60648310618941576064830492506002015b600a8310614cdf5760010192915050565b600061895e8383618cfc565b159392505050565b600080858411618a6d5760208411618a1957600084156189b157600161898d86602061a0fd565b61899890600861a3f7565b6189a390600261a4f5565b6189ad919061a0fd565b1990505b83518116856189c089896192a1565b6189ca919061a0fd565b805190935082165b818114618a04578784116189ec57879450505050506166d5565b836189f68161a501565b9450508284511690506189d2565b618a0e87856192a1565b9450505050506166d5565b838320618a26858861a0fd565b618a3090876192a1565b91505b858210618a6b57848220808203618a5857618a4e86846192a1565b93505050506166d5565b618a6360018461a0fd565b925050618a33565b505b5092949350505050565b60008381868511618b825760208511618b315760008515618ac3576001618a9f87602061a0fd565b618aaa90600861a3f7565b618ab590600261a4f5565b618abf919061a0fd565b1990505b84518116600087618ad48b8b6192a1565b618ade919061a0fd565b855190915083165b828114618b2357818610618b0b57618afe8b8b6192a1565b96505050505050506166d5565b85618b158161a3dd565b965050838651169050618ae6565b8596505050505050506166d5565b508383206000905b618b43868961a0fd565b8211618b8057858320808203618b5f57839450505050506166d5565b618b6a6001856192a1565b9350508180618b789061a3dd565b925050618b39565b505b618b8c87876192a1565b979650505050505050565b60408051808201909152600080825260208201526000618bc98560000151866020015186600001518760200151618a77565b602080870180519186019190915251909150618be5908261a0fd565b835284516020860151618bf891906192a1565b8103618c075760008552618c39565b83518351618c1591906192a1565b85518690618c2490839061a0fd565b9052508351618c3390826192a1565b60208601525b50909392505050565b60208110618c7a5781518352618c596020846192a1565b9250618c666020836192a1565b9150618c7360208261a0fd565b9050618c42565b6000198115618ca9576001618c9083602061a0fd565b618c9c9061010061a4f5565b618ca6919061a0fd565b90505b9151835183169219169190911790915250565b60606000618cca84846151a8565b8051602080830151604051939450618ce49390910161a518565b60405160208183030381529060405291505092915050565b8151815160009190811115618d0f575081515b6020808501519084015160005b83811015618dc85782518251808214618d98576000196020871015618d7757600184618d4989602061a0fd565b618d5391906192a1565b618d5e90600861a3f7565b618d6990600261a4f5565b618d73919061a0fd565b1990505b8181168382168181039114618d95579750614cdf9650505050505050565b50505b618da36020866192a1565b9450618db06020856192a1565b93505050602081618dc191906192a1565b9050618d1c565b5084518651615856919061a570565b6112a68061a59183390190565b61140b8061b83783390190565b61155a8061cc4283390190565b610d5e8061e19c83390190565b6040518060e00160405280606081526020016060815260200160608152602001600015158152602001600015158152602001600015158152602001618e4e618e53565b905290565b60405180610100016040528060001515815260200160001515815260200160608152602001600080191681526020016060815260200160608152602001600015158152602001618e4e6040518060800160405280600081526020016000815260200160008152602001600081525090565b602080825282518282018190526000918401906040840190835b81811015618f055783516001600160a01b0316835260209384019390920191600101618ede565b509095945050505050565b60005b83811015618f2b578181015183820152602001618f13565b50506000910152565b60008151808452618f4c816020860160208601618f10565b601f01601f19169290920160200192915050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b8281101561905c577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452815180516001600160a01b03168652602090810151604082880181905281519088018190529101906060600582901b88018101919088019060005b81811015619042577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa08a850301835261902c848651618f34565b6020958601959094509290920191600101618ff2565b509197505050602094850194929092019150600101618f88565b50929695505050505050565b600081518084526020840193506020830160005b828110156190bc5781517fffffffff000000000000000000000000000000000000000000000000000000001686526020958601959091019060010161907c565b5093949350505050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b8281101561905c577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc087860301845281518051604087526191326040880182618f34565b905060208201519150868103602088015261914d8183619068565b9650505060209384019391909101906001016190ee565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b8281101561905c577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08786030184526191c6858351618f34565b9450602093840193919091019060010161918c565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b8281101561905c577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc087860301845281516001600160a01b038151168652602081015190506040602087015261925c6040870182619068565b9550506020938401939190910190600101619203565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b80820180821115614cdf57614cdf619272565b6001600160a01b03841681528260208201526080604082015260006192dc6080830184618f34565b905060006060830152949350505050565b600181811c9082168061930157607f821691505b602082108103616fa1577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006020828403121561934c57600080fd5b5051919050565b6001600160a01b0384168152826020820152606060408201526000616f876060830184618f34565b8281526040602082015260006166d56040830184618f34565b6001600160a01b03851681528360208201526080604082015260006193bc6080830185618f34565b905082606083015295945050505050565b602081526000614dd86020830184618f34565b600082619416577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b6001600160a01b03831681526040602082015260006166d56040830184618f34565b7f4661696c656420746f206465706c6f7920636f6e74726163742000000000000081526000835161947581601a850160208801618f10565b7f3a20000000000000000000000000000000000000000000000000000000000000601a9184019182015283516194b281601c840160208801618f10565b01601c01949350505050565b6000602082840312156194d057600080fd5b81516001600160a01b0381168114614dd857600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040516060810167ffffffffffffffff81118282101715619539576195396194e7565b60405290565b60008067ffffffffffffffff84111561955a5761955a6194e7565b50604051601f19601f85018116603f0116810181811067ffffffffffffffff82111715619589576195896194e7565b6040528381529050808284018510156195a157600080fd5b616aa4846020830185618f10565b600082601f8301126195c057600080fd5b614dd88383516020850161953f565b6000602082840312156195e157600080fd5b815167ffffffffffffffff8111156195f857600080fd5b614cdb848285016195af565b60008351619616818460208801618f10565b83519083019061962a818360208801618f10565b01949350505050565b7f4661696c656420746f206465706c6f7920636f6e74726163742000000000000081526000835161966b81601a850160208801618f10565b7f207573696e6720636f6e7374727563746f722064617461202200000000000000601a9184019182015283516196a8816033840160208801618f10565b7f220000000000000000000000000000000000000000000000000000000000000060339290910191820152603401949350505050565b60408152600b60408201527f464f554e4452595f4f55540000000000000000000000000000000000000000006060820152608060208201526000614dd86080830184618f34565b60006020828403121561973757600080fd5b815167ffffffffffffffff81111561974e57600080fd5b8201601f8101841361975f57600080fd5b614cdb8482516020840161953f565b60008551619780818460208a01618f10565b7f2f0000000000000000000000000000000000000000000000000000000000000090830190815285516197ba816001840160208a01618f10565b7f2f000000000000000000000000000000000000000000000000000000000000006001929091019182015284516197f8816002840160208901618f10565b6001818301019150507f2f000000000000000000000000000000000000000000000000000000000000006001820152835161983a816002840160208801618f10565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600292909101918201526007019695505050505050565b6040815260006198856040830184618f34565b8281036020840152600481527f2e6173740000000000000000000000000000000000000000000000000000000060208201526040810191505092915050565b6000602082840312156198d657600080fd5b81518015158114614dd857600080fd5b7f436f756c64206e6f742066696e642041535420696e206172746966616374200081526000825161991e81601f850160208701618f10565b7f2e205365742060617374203d20747275656020696e20666f756e6472792e746f601f9390910192830152507f6d6c000000000000000000000000000000000000000000000000000000000000603f820152604101919050565b60408152600061998b6040830184618f34565b8281036020840152601181527f2e6173742e6162736f6c7574655061746800000000000000000000000000000060208201526040810191505092915050565b6040815260006199dd6040830184618f34565b8281036020840152600c81527f2e6173742e6c6963656e7365000000000000000000000000000000000000000060208201526040810191505092915050565b7f2e6d657461646174612e736f75726365732e5b27000000000000000000000000815260008251619a54816014850160208701618f10565b7f275d2e6b656363616b32353600000000000000000000000000000000000000006014939091019283015250602001919050565b604081526000619a9b6040830185618f34565b8281036020840152614dd48185618f34565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f2200000000000000000000000000000000000000000000000000000000000000815260008251619b14816001850160208701618f10565b7f22000000000000000000000000000000000000000000000000000000000000006001939091019283015250600201919050565b60008251619b5a818460208701618f10565b7f2f6275696c642d696e666f000000000000000000000000000000000000000000920191825250600b01919050565b7f436f756c64206e6f742066696e64206275696c642d696e666f2066696c65207781527f697468206d61746368696e6720736f7572636520636f6465206861736820666f60208201527f7220636f6e747261637420000000000000000000000000000000000000000000604082015260008251619c0d81604b850160208701618f10565b91909101604b0192915050565b600060ff821660ff8103619c3057619c30619272565b60010192915050565b7f406f70656e7a657070656c696e2f646566656e6465722d6465706c6f792d636c81527f69656e742d636c69400000000000000000000000000000000000000000000000602082015260008251619c97816029850160208701618f10565b9190910160290192915050565b60408152601660408201527f4f50454e5a455050454c494e5f424153485f50415448000000000000000000006060820152608060208201526000614dd86080830184618f34565b600060208284031215619cfd57600080fd5b815167ffffffffffffffff811115619d1457600080fd5b820160608185031215619d2657600080fd5b619d2e619516565b81518060030b8114619d3f57600080fd5b8152602082015167ffffffffffffffff811115619d5b57600080fd5b619d67868285016195af565b602083015250604082015167ffffffffffffffff811115619d8757600080fd5b619d93868285016195af565b604083015250949350505050565b7f4661696c656420746f2072756e206261736820636f6d6d616e6420776974682081527f2200000000000000000000000000000000000000000000000000000000000000602082015260008251619dff816021850160208701618f10565b7f222e20496620796f7520617265207573696e672057696e646f77732c2073657460219390910192830152507f20746865204f50454e5a455050454c494e5f424153485f5041544820656e766960418201527f726f6e6d656e74207661726961626c6520746f207468652066756c6c7920717560618201527f616c69666965642070617468206f66207468652062617368206578656375746160818201527f626c652e20466f72206578616d706c652c20696620796f75206172652075736960a18201527f6e672047697420666f722057696e646f77732c206164642074686520666f6c6c60c18201527f6f77696e67206c696e6520696e20746865202e656e762066696c65206f66207960e18201527f6f75722070726f6a65637420287573696e6720666f727761726420736c6173686101018201527f6573293a0a4f50454e5a455050454c494e5f424153485f504154483d22433a2f6101218201527f50726f6772616d2046696c65732f4769742f62696e2f6261736822000000000061014182015261015c01919050565b7f4661696c656420746f2066696e64206c696e652077697468207072656669782081527f2700000000000000000000000000000000000000000000000000000000000000602082015260008351619feb816021850160208801618f10565b7f2720696e206f75747075743a2000000000000000000000000000000000000000602191840191820152835161a02881602e840160208801618f10565b01602e01949350505050565b7f4661696c656420746f2072756e2075706772616465207361666574792076616c81527f69646174696f6e3a200000000000000000000000000000000000000000000000602082015260008251619c97816029850160208701618f10565b7f55706772616465207361666574792076616c69646174696f6e206661696c656481527f3a0a00000000000000000000000000000000000000000000000000000000000060208201526000825161a0f0816022850160208701618f10565b9190910160220192915050565b81810381811115614cdf57614cdf619272565b7f436f6e7472616374206e616d652000000000000000000000000000000000000081526000825161a14881600e850160208701618f10565b7f206d75737420626520696e2074686520666f726d6174204d79436f6e74726163600e9390910192830152507f742e736f6c3a4d79436f6e7472616374206f72204d79436f6e74726163742e73602e8201527f6f6c206f72206f75742f4d79436f6e74726163742e736f6c2f4d79436f6e7472604e8201527f6163742e6a736f6e000000000000000000000000000000000000000000000000606e820152607601919050565b7f53504458206c6963656e7365206964656e74696669657220000000000000000081526000835161a226816018850160208801618f10565b7f20696e2000000000000000000000000000000000000000000000000000000000601891840191820152835161a26381601c840160208801618f10565b7f20646f6573206e6f74206c6f6f6b206c696b65206120737570706f7274656420601c92909101918201527f6c6963656e736520666f7220626c6f636b206578706c6f726572207665726966603c8201527f69636174696f6e2e205573652074686520606c6963656e73655479706560206f605c8201527f7074696f6e20746f20737065636966792061206c6963656e736520747970652c607c8201527f206f7220736574207468652060736b69704c6963656e73655479706560206f70609c8201527f74696f6e20746f2060747275656020746f20736b69702e00000000000000000060bc82015260d301949350505050565b6000825161a369818460208701618f10565b7f2000000000000000000000000000000000000000000000000000000000000000920191825250600101919050565b7f406f70656e7a657070656c696e2f75706772616465732d636f7265400000000081526000825161a3d081601c850160208701618f10565b91909101601c0192915050565b6000600019820361a3f05761a3f0619272565b5060010190565b8082028115828204841417614cdf57614cdf619272565b6001815b600184111561a4495780850481111561a42d5761a42d619272565b600184161561a43b57908102905b60019390931c92800261a412565b935093915050565b60008261a46057506001614cdf565b8161a46d57506000614cdf565b816001811461a483576002811461a48d5761a4a9565b6001915050614cdf565b60ff84111561a49e5761a49e619272565b50506001821b614cdf565b5060208310610133831016604e8410600b841016171561a4cc575081810a614cdf565b61a4d9600019848461a40e565b806000190482111561a4ed5761a4ed619272565b029392505050565b6000614dd8838361a451565b60008161a5105761a510619272565b506000190190565b6000835161a52a818460208801618f10565b7f3a00000000000000000000000000000000000000000000000000000000000000908301908152835161a564816001840160208801618f10565b01600101949350505050565b818103600083128015838313168383128216171561809c5761809c61927256fe608060405234801561001057600080fd5b506040516112a63803806112a683398101604081905261002f91610110565b604051806040016040528060048152602001635a65746160e01b815250604051806040016040528060048152602001635a45544160e01b815250816003908161007891906101e2565b50600461008582826101e2565b5050506001600160a01b03821615806100a557506001600160a01b038116155b156100c35760405163e6c4247b60e01b815260040160405180910390fd5b600680546001600160a01b039384166001600160a01b031991821617909155600780549290931691161790556102a0565b80516001600160a01b038116811461010b57600080fd5b919050565b6000806040838503121561012357600080fd5b61012c836100f4565b915061013a602084016100f4565b90509250929050565b634e487b7160e01b600052604160045260246000fd5b600181811c9082168061016d57607f821691505b60208210810361018d57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156101dd57806000526020600020601f840160051c810160208510156101ba5750805b601f840160051c820191505b818110156101da57600081556001016101c6565b50505b505050565b81516001600160401b038111156101fb576101fb610143565b61020f816102098454610159565b84610193565b6020601f821160018114610243576000831561022b5750848201515b600019600385901b1c1916600184901b1784556101da565b600084815260208120601f198516915b828110156102735787850151825560209485019460019092019101610253565b50848210156102915786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b610ff7806102af6000396000f3fe608060405234801561001057600080fd5b506004361061011b5760003560e01c806342966c68116100b257806379cc679011610081578063a9059cbb11610066578063a9059cbb1461028e578063bff9662a146102a1578063dd62ed3e146102c157600080fd5b806379cc67901461027357806395d89b411461028657600080fd5b806342966c68146102025780635b1125911461021557806370a0823114610235578063779e3b631461026b57600080fd5b80631e458bee116100ee5780631e458bee1461018857806323b872dd1461019b578063313ce567146101ae578063328a01d0146101bd57600080fd5b806306fdde0314610120578063095ea7b31461013e57806315d57fd41461016157806318160ddd14610176575b600080fd5b610128610307565b6040516101359190610d97565b60405180910390f35b61015161014c366004610e2c565b610399565b6040519015158152602001610135565b61017461016f366004610e56565b6103b3565b005b6002545b604051908152602001610135565b610174610196366004610e89565b61057e565b6101516101a9366004610ebc565b610631565b60405160128152602001610135565b6007546101dd9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610135565b610174610210366004610ef9565b610655565b6006546101dd9073ffffffffffffffffffffffffffffffffffffffff1681565b61017a610243366004610f12565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b610174610662565b610174610281366004610e2c565b610786565b610128610837565b61015161029c366004610e2c565b610846565b6005546101dd9073ffffffffffffffffffffffffffffffffffffffff1681565b61017a6102cf366004610e56565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b60606003805461031690610f34565b80601f016020809104026020016040519081016040528092919081815260200182805461034290610f34565b801561038f5780601f106103645761010080835404028352916020019161038f565b820191906000526020600020905b81548152906001019060200180831161037257829003601f168201915b5050505050905090565b6000336103a7818585610854565b60019150505b92915050565b60075473ffffffffffffffffffffffffffffffffffffffff1633148015906103f3575060065473ffffffffffffffffffffffffffffffffffffffff163314155b15610431576040517fcdfcef970000000000000000000000000000000000000000000000000000000081523360048201526024015b60405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff82161580610468575073ffffffffffffffffffffffffffffffffffffffff8116155b1561049f576040517fe6c4247b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6006805473ffffffffffffffffffffffffffffffffffffffff8481167fffffffffffffffffffffffff0000000000000000000000000000000000000000928316811790935560058054918516919092161790556040805133815260208101929092527fe79965b5c67dcfb2cf5fe152715e4a7256cee62a3d5dd8484fd8a8539eb8beff910160405180910390a16040805133815273ffffffffffffffffffffffffffffffffffffffff831660208201527f1b9352454524a57a51f24f67dc66d898f616922cd1f7a12d73570ece12b1975c910160405180910390a15050565b60055473ffffffffffffffffffffffffffffffffffffffff1633146105d1576040517f3fe32fba000000000000000000000000000000000000000000000000000000008152336004820152602401610428565b6105db8383610866565b808373ffffffffffffffffffffffffffffffffffffffff167fc263b302aec62d29105026245f19e16f8e0137066ccd4a8bd941f716bd4096bb8460405161062491815260200190565b60405180910390a3505050565b60003361063f8582856108c6565b61064a858585610995565b506001949350505050565b61065f3382610a40565b50565b60075473ffffffffffffffffffffffffffffffffffffffff1633146106b5576040517fe700765e000000000000000000000000000000000000000000000000000000008152336004820152602401610428565b60065473ffffffffffffffffffffffffffffffffffffffff16610704576040517fe6c4247b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600654600780547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff90921691821790556040805133815260208101929092527f5104c9abdc7d111c2aeb4ce890ac70274a4be2ee83f46a62551be5e6ebc82dd0910160405180910390a1565b60055473ffffffffffffffffffffffffffffffffffffffff1633146107d9576040517f3fe32fba000000000000000000000000000000000000000000000000000000008152336004820152602401610428565b6107e38282610a9c565b8173ffffffffffffffffffffffffffffffffffffffff167f919f7e2092ffcc9d09f599be18d8152860b0c054df788a33bc549cdd9d0f15b18260405161082b91815260200190565b60405180910390a25050565b60606004805461031690610f34565b6000336103a7818585610995565b6108618383836001610ab1565b505050565b73ffffffffffffffffffffffffffffffffffffffff82166108b6576040517fec442f0500000000000000000000000000000000000000000000000000000000815260006004820152602401610428565b6108c260008383610bf9565b5050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811461098f5781811015610980576040517ffb8f41b200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff841660048201526024810182905260448101839052606401610428565b61098f84848484036000610ab1565b50505050565b73ffffffffffffffffffffffffffffffffffffffff83166109e5576040517f96c6fd1e00000000000000000000000000000000000000000000000000000000815260006004820152602401610428565b73ffffffffffffffffffffffffffffffffffffffff8216610a35576040517fec442f0500000000000000000000000000000000000000000000000000000000815260006004820152602401610428565b610861838383610bf9565b73ffffffffffffffffffffffffffffffffffffffff8216610a90576040517f96c6fd1e00000000000000000000000000000000000000000000000000000000815260006004820152602401610428565b6108c282600083610bf9565b610aa78233836108c6565b6108c28282610a40565b73ffffffffffffffffffffffffffffffffffffffff8416610b01576040517fe602df0500000000000000000000000000000000000000000000000000000000815260006004820152602401610428565b73ffffffffffffffffffffffffffffffffffffffff8316610b51576040517f94280d6200000000000000000000000000000000000000000000000000000000815260006004820152602401610428565b73ffffffffffffffffffffffffffffffffffffffff8085166000908152600160209081526040808320938716835292905220829055801561098f578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051610beb91815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff8316610c31578060026000828254610c269190610f87565b90915550610ce39050565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205481811015610cb7576040517fe450d38c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff851660048201526024810182905260448101839052606401610428565b73ffffffffffffffffffffffffffffffffffffffff841660009081526020819052604090209082900390555b73ffffffffffffffffffffffffffffffffffffffff8216610d0c57600280548290039055610d38565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090208054820190555b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161062491815260200190565b602081526000825180602084015260005b81811015610dc55760208186018101516040868401015201610da8565b5060006040828501015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011684010191505092915050565b803573ffffffffffffffffffffffffffffffffffffffff81168114610e2757600080fd5b919050565b60008060408385031215610e3f57600080fd5b610e4883610e03565b946020939093013593505050565b60008060408385031215610e6957600080fd5b610e7283610e03565b9150610e8060208401610e03565b90509250929050565b600080600060608486031215610e9e57600080fd5b610ea784610e03565b95602085013595506040909401359392505050565b600080600060608486031215610ed157600080fd5b610eda84610e03565b9250610ee860208501610e03565b929592945050506040919091013590565b600060208284031215610f0b57600080fd5b5035919050565b600060208284031215610f2457600080fd5b610f2d82610e03565b9392505050565b600181811c90821680610f4857607f821691505b602082108103610f81577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b808201808211156103ad577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea2646970667358221220085f01204b33dc17013c78c74fbca32a3da2c0b384ce7c8878c889551af28c6164736f6c634300081a003360a060405234801561001057600080fd5b5060405161140b38038061140b83398101604081905261002f916101b3565b60016000556002805460ff191690556001600160a01b038316158061005b57506001600160a01b038216155b8061006d57506001600160a01b038116155b1561008b5760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b0383166080526100a3600082610102565b506100ce7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a82610102565b506100f97f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e483610102565b505050506101f6565b60008281526001602090815260408083206001600160a01b038516845290915281205460ff1661018d5760008381526001602081815260408084206001600160a01b0387168086529252808420805460ff19169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a4506001610191565b5060005b92915050565b80516001600160a01b03811681146101ae57600080fd5b919050565b6000806000606084860312156101c857600080fd5b6101d184610197565b92506101df60208501610197565b91506101ed60408501610197565b90509250925092565b6080516111de61022d60003960008181610132015281816103c5015281816104270152818161065801526106ba01526111de6000f3fe608060405234801561001057600080fd5b50600436106101005760003560e01c80638456cb5911610097578063c8a0236211610066578063c8a0236214610276578063d547741f14610289578063d9caed121461029c578063e63ab1e9146102af57600080fd5b80638456cb59146101f957806385f438c11461020157806391d1485414610228578063a217fddf1461026e57600080fd5b80632f2ff15d116100d35780632f2ff15d146101c057806336568abe146101d35780633f4ba83a146101e65780635c975abb146101ee57600080fd5b806301ffc9a714610105578063116191b61461012d57806321fc65f214610179578063248a9ca31461018e575b600080fd5b610118610113366004610f04565b6102d6565b60405190151581526020015b60405180910390f35b6101547f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610124565b61018c610187366004610f6f565b61036f565b005b6101b261019c36600461100c565b6000908152600160208190526040909120015490565b604051908152602001610124565b61018c6101ce366004611025565b610511565b61018c6101e1366004611025565b61053d565b61018c61059b565b60025460ff16610118565b61018c6105d0565b6101b27f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b610118610236366004611025565b600091825260016020908152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b6101b2600081565b61018c610284366004610f6f565b610602565b61018c610297366004611025565b61078a565b61018c6102aa366004611051565b6107b0565b6101b27f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061036957507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b61037761087d565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e46103a1816108c0565b6103a96108ca565b6103ea73ffffffffffffffffffffffffffffffffffffffff87167f000000000000000000000000000000000000000000000000000000000000000086610909565b6040517f5131ab5900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690635131ab599061046490899089908990899089906004016110d7565b600060405180830381600087803b15801561047e57600080fd5b505af1158015610492573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167f85b5be9cf454e05e0bddf49315178102227c312078eefa3c00294fb4d912ae4e8686866040516104f793929190611134565b60405180910390a35061050a6001600055565b5050505050565b6000828152600160208190526040909120015461052d816108c0565b6105378383610996565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8116331461058c576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6105968282610a61565b505050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a6105c5816108c0565b6105cd610b20565b50565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a6105fa816108c0565b6105cd610b9d565b61060a61087d565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e4610634816108c0565b61063c6108ca565b61067d73ffffffffffffffffffffffffffffffffffffffff87167f000000000000000000000000000000000000000000000000000000000000000086610909565b6040517fb8969bd400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063b8969bd4906106f790899089908990899089906004016110d7565b600060405180830381600087803b15801561071157600080fd5b505af1158015610725573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fb9d4efa96044e5f5e03e696fa9ae2ff66911cc27e8a637c3627c75bc5b2241c88686866040516104f793929190611134565b600082815260016020819052604090912001546107a6816108c0565b6105378383610a61565b6107b861087d565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e46107e2816108c0565b6107ea6108ca565b61080b73ffffffffffffffffffffffffffffffffffffffff85168484610909565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f9b1bfa7fa9ee420a16e124f794c35ac9f90472acc99140eb2f6447c714cad8eb8460405161086a91815260200190565b60405180910390a3506105966001600055565b6002600054036108b9576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b6105cd8133610bf8565b60025460ff1615610907576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6040805173ffffffffffffffffffffffffffffffffffffffff8416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb00000000000000000000000000000000000000000000000000000000179052610596908490610c89565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff16610a5957600083815260016020818152604080842073ffffffffffffffffffffffffffffffffffffffff8716808652925280842080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a4506001610369565b506000610369565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff1615610a5957600083815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8616808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a4506001610369565b610b28610d1f565b600280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b610ba56108ca565b600280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258610b733390565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16610c85576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82166004820152602481018390526044015b60405180910390fd5b5050565b6000610cab73ffffffffffffffffffffffffffffffffffffffff841683610d5b565b90508051600014158015610cd0575080806020019051810190610cce9190611157565b155b15610596576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84166004820152602401610c7c565b60025460ff16610907576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6060610d6983836000610d70565b9392505050565b606081471015610dae576040517fcd786059000000000000000000000000000000000000000000000000000000008152306004820152602401610c7c565b6000808573ffffffffffffffffffffffffffffffffffffffff168486604051610dd79190611179565b60006040518083038185875af1925050503d8060008114610e14576040519150601f19603f3d011682016040523d82523d6000602084013e610e19565b606091505b5091509150610e29868383610e33565b9695505050505050565b606082610e4857610e4382610ec2565b610d69565b8151158015610e6c575073ffffffffffffffffffffffffffffffffffffffff84163b155b15610ebb576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85166004820152602401610c7c565b5080610d69565b805115610ed25780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060208284031215610f1657600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610d6957600080fd5b803573ffffffffffffffffffffffffffffffffffffffff81168114610f6a57600080fd5b919050565b600080600080600060808688031215610f8757600080fd5b610f9086610f46565b9450610f9e60208701610f46565b935060408601359250606086013567ffffffffffffffff811115610fc157600080fd5b8601601f81018813610fd257600080fd5b803567ffffffffffffffff811115610fe957600080fd5b886020828401011115610ffb57600080fd5b959894975092955050506020019190565b60006020828403121561101e57600080fd5b5035919050565b6000806040838503121561103857600080fd5b8235915061104860208401610f46565b90509250929050565b60008060006060848603121561106657600080fd5b61106f84610f46565b925061107d60208501610f46565b929592945050506040919091013590565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff8616815273ffffffffffffffffffffffffffffffffffffffff8516602082015283604082015260806060820152600061112960808301848661108e565b979650505050505050565b83815260406020820152600061114e60408301848661108e565b95945050505050565b60006020828403121561116957600080fd5b81518015158114610d6957600080fd5b6000825160005b8181101561119a5760208186018101518583015201611180565b50600092019182525091905056fea264697066735822122069d5c5c3cb2752c876b6a2138d8d9b66bac6bd1b48a1fe98417eea81faf02a3e64736f6c634300081a003360c060405260001960035534801561001657600080fd5b5060405161155a38038061155a83398101604081905261003591610220565b60016000819055805460ff19169055838383836001600160a01b038416158061006557506001600160a01b038316155b8061007757506001600160a01b038216155b8061008957506001600160a01b038116155b156100a75760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b03808516608052831660a0526100c5600082610154565b506100f07f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e483610154565b5061011b7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb83610154565b506101467f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a82610154565b505050505050505050610274565b60008281526002602090815260408083206001600160a01b038516845290915281205460ff166101fa5760008381526002602090815260408083206001600160a01b03861684529091529020805460ff191660011790556101b23390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45060016101fe565b5060005b92915050565b80516001600160a01b038116811461021b57600080fd5b919050565b6000806000806080858703121561023657600080fd5b61023f85610204565b935061024d60208601610204565b925061025b60408601610204565b915061026960608601610204565b905092959194509250565b60805160a0516112826102d86000396000818161021d01528181610531015281816108240152818161097b01528181610ad00152610bf20152600081816101d1015281816104a1015281816105040152818161079401526107f701526112826000f3fe608060405234801561001057600080fd5b50600436106101775760003560e01c80635e3e9fef116100d857806391d148541161008c578063d547741f11610066578063d547741f14610386578063d5abeb0114610399578063e63ab1e9146103a257600080fd5b806391d1485414610311578063a217fddf14610357578063a783c7891461035f57600080fd5b8063743e0c9b116100bd578063743e0c9b146102cf5780638456cb59146102e257806385f438c1146102ea57600080fd5b80635e3e9fef146102a95780636f8b44b0146102bc57600080fd5b8063248a9ca31161012f57806336568abe1161011457806336568abe146102835780633f4ba83a146102965780635c975abb1461029e57600080fd5b8063248a9ca31461023f5780632f2ff15d1461027057600080fd5b8063106e629011610160578063106e6290146101b9578063116191b6146101cc57806321e093b11461021857600080fd5b806301ffc9a71461017c57806302d5c899146101a4575b600080fd5b61018f61018a366004610fb4565b6103c9565b60405190151581526020015b60405180910390f35b6101b76101b2366004611026565b610462565b005b6101b76101c73660046110b8565b6105f7565b6101f37f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161019b565b6101f37f000000000000000000000000000000000000000000000000000000000000000081565b61026261024d3660046110eb565b60009081526002602052604090206001015490565b60405190815260200161019b565b6101b761027e366004611104565b61069c565b6101b7610291366004611104565b6106c7565b6101b7610720565b60015460ff1661018f565b6101b76102b7366004611026565b610755565b6101b76102ca3660046110eb565b6108d0565b6101b76102dd3660046110eb565b61093e565b6101b76109e8565b6102627f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b61018f61031f366004611104565b600091825260026020908152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b610262600081565b6102627f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb81565b6101b7610394366004611104565b610a1a565b61026260035481565b6102627f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061045c57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b61046a610a3f565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461049481610a82565b61049c610a8c565b6104c77f00000000000000000000000000000000000000000000000000000000000000008684610acb565b6040517fb8969bd400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063b8969bd490610561907f0000000000000000000000000000000000000000000000000000000000000000908a908a908a908a90600401611179565b600060405180830381600087803b15801561057b57600080fd5b505af115801561058f573d6000803e3d6000fd5b505050508573ffffffffffffffffffffffffffffffffffffffff167fba96f26bdda53eb8c8ba39045dfb4ff39753fbc7a6edcf250a88e75e78d102fe8686866040516105dd939291906111d6565b60405180910390a2506105f06001600055565b5050505050565b6105ff610a3f565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461062981610a82565b610631610a8c565b61063c848484610acb565b8373ffffffffffffffffffffffffffffffffffffffff167f884edad9ce6fa2440d8a54cc123490eb96d2768479d49ff9c7366125a94243648460405161068491815260200190565b60405180910390a2506106976001600055565b505050565b6000828152600260205260409020600101546106b781610a82565b6106c18383610c53565b50505050565b73ffffffffffffffffffffffffffffffffffffffff81163314610716576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6106978282610d53565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61074a81610a82565b610752610e12565b50565b61075d610a3f565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461078781610a82565b61078f610a8c565b6107ba7f00000000000000000000000000000000000000000000000000000000000000008684610acb565b6040517f5131ab5900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690635131ab5990610854907f0000000000000000000000000000000000000000000000000000000000000000908a908a908a908a90600401611179565b600060405180830381600087803b15801561086e57600080fd5b505af1158015610882573d6000803e3d6000fd5b505050508573ffffffffffffffffffffffffffffffffffffffff167f7772f56296d3a5202974a45c61c9188d844ab4d6eeb18c851e4b8d5384ca6ced8686866040516105dd939291906111d6565b7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb6108fa81610a82565b610902610a8c565b60038290556040518281527f7810bd47de260c3e9ee10061cf438099dd12256c79485f12f94dbccc981e806c9060200160405180910390a15050565b610946610a8c565b6040517f79cc6790000000000000000000000000000000000000000000000000000000008152336004820152602481018290527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16906379cc679090604401600060405180830381600087803b1580156109d457600080fd5b505af11580156105f0573d6000803e3d6000fd5b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610a1281610a82565b610752610e8f565b600082815260026020526040902060010154610a3581610a82565b6106c18383610d53565b600260005403610a7b576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b6107528133610ee8565b60015460ff1615610ac9576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6003547f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b39573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b5d91906111f9565b610b679084611212565b1115610b9f576040517fc30436e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f1e458bee00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff848116600483015260248201849052604482018390527f00000000000000000000000000000000000000000000000000000000000000001690631e458bee90606401600060405180830381600087803b158015610c3657600080fd5b505af1158015610c4a573d6000803e3d6000fd5b50505050505050565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff16610d4b57600083815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff86168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055610ce93390565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a450600161045c565b50600061045c565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff1615610d4b57600083815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8616808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a450600161045c565b610e1a610f78565b600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b610e97610a8c565b600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016811790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25833610e65565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16610f74576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff821660048201526024810183905260440160405180910390fd5b5050565b60015460ff16610ac9576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060208284031215610fc657600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610ff657600080fd5b9392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461102157600080fd5b919050565b60008060008060006080868803121561103e57600080fd5b61104786610ffd565b945060208601359350604086013567ffffffffffffffff81111561106a57600080fd5b8601601f8101881361107b57600080fd5b803567ffffffffffffffff81111561109257600080fd5b8860208284010111156110a457600080fd5b959894975060200195606001359392505050565b6000806000606084860312156110cd57600080fd5b6110d684610ffd565b95602085013595506040909401359392505050565b6000602082840312156110fd57600080fd5b5035919050565b6000806040838503121561111757600080fd5b8235915061112760208401610ffd565b90509250929050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff8616815273ffffffffffffffffffffffffffffffffffffffff851660208201528360408201526080606082015260006111cb608083018486611130565b979650505050505050565b8381526040602082015260006111f0604083018486611130565b95945050505050565b60006020828403121561120b57600080fd5b5051919050565b8082018082111561045c577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea2646970667358221220f784eb6e1655c2988d3f762737188cfee07a61da1d5b8456cc4f4e55cb339cfb64736f6c634300081a00336080604052348015600f57600080fd5b506001600055610d3a806100246000396000f3fe6080604052600436106100635760003560e01c8063c513169111610040578063c5131691146100c1578063e04d4f97146100e1578063f05b6abf146100f457005b8063357fc5a21461006c5780636ed701691461008c5780638fcaa0b5146100a157005b3661006a57005b005b34801561007857600080fd5b5061006a6100873660046106c0565b610114565b34801561009857600080fd5b5061006a6101aa565b3480156100ad57600080fd5b5061006a6100bc3660046106fc565b6101df565b3480156100cd57600080fd5b5061006a6100dc3660046106c0565b61021e565b61006a6100ef366004610895565b6102f9565b34801561010057600080fd5b5061006a61010f366004610981565b61033d565b61011c610372565b61013e73ffffffffffffffffffffffffffffffffffffffff83163383866103b5565b604080513381526020810185905273ffffffffffffffffffffffffffffffffffffffff848116828401528316606082015290517f2b58128f24a9f59127cc5b5430d70542b22220f2d9adaa86e442b816ab98af609181900360800190a16101a56001600055565b505050565b6040513381527fbcaadb46b82a48af60b608f58959ae6b8310d1b0a0d094c2e9ec3208ed39f2a09060200160405180910390a1565b7f0d3f65f00e631663aa85c96330b5c7a83bb29af3630c0063776f985edc3037aa33838360405161021293929190610a6b565b60405180910390a15050565b610226610372565b6000610233600285610ad5565b90508060000361026f576040517f1f2a200500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61029173ffffffffffffffffffffffffffffffffffffffff84163384846103b5565b604080513381526020810183905273ffffffffffffffffffffffffffffffffffffffff858116828401528416606082015290517f2b58128f24a9f59127cc5b5430d70542b22220f2d9adaa86e442b816ab98af609181900360800190a1506101a56001600055565b7f1f1ff1f5fb41346850b2f5c04e6c767e2f1c8a525c5c0c5cdb60cdf3ca5f62fa3334858585604051610330959493929190610b7e565b60405180910390a1505050565b7f74a53cd528a921fca7dbdee62f86819051d3cc98f214951f4238e8843f20b146338484846040516103309493929190610c08565b6002600054036103ae576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b6040805173ffffffffffffffffffffffffffffffffffffffff85811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd0000000000000000000000000000000000000000000000000000000017905261044a908590610450565b50505050565b600061047273ffffffffffffffffffffffffffffffffffffffff8416836104eb565b905080516000141580156104975750808060200190518101906104959190610ccb565b155b156101a5576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff841660048201526024015b60405180910390fd5b60606104f983836000610500565b9392505050565b60608147101561053e576040517fcd7860590000000000000000000000000000000000000000000000000000000081523060048201526024016104e2565b6000808573ffffffffffffffffffffffffffffffffffffffff1684866040516105679190610ce8565b60006040518083038185875af1925050503d80600081146105a4576040519150601f19603f3d011682016040523d82523d6000602084013e6105a9565b606091505b50915091506105b98683836105c3565b9695505050505050565b6060826105d8576105d382610652565b6104f9565b81511580156105fc575073ffffffffffffffffffffffffffffffffffffffff84163b155b1561064b576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff851660048201526024016104e2565b50806104f9565b8051156106625780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50565b803573ffffffffffffffffffffffffffffffffffffffff811681146106bb57600080fd5b919050565b6000806000606084860312156106d557600080fd5b833592506106e560208501610697565b91506106f360408501610697565b90509250925092565b6000806020838503121561070f57600080fd5b823567ffffffffffffffff81111561072657600080fd5b8301601f8101851361073757600080fd5b803567ffffffffffffffff81111561074e57600080fd5b85602082840101111561076057600080fd5b6020919091019590945092505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156107e6576107e6610770565b604052919050565b600082601f8301126107ff57600080fd5b813567ffffffffffffffff81111561081957610819610770565b61084a60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8401160161079f565b81815284602083860101111561085f57600080fd5b816020850160208301376000918101602001919091529392505050565b801515811461069457600080fd5b80356106bb8161087c565b6000806000606084860312156108aa57600080fd5b833567ffffffffffffffff8111156108c157600080fd5b6108cd868287016107ee565b9350506020840135915060408401356108e58161087c565b809150509250925092565b600067ffffffffffffffff82111561090a5761090a610770565b5060051b60200190565b600082601f83011261092557600080fd5b8135610938610933826108f0565b61079f565b8082825260208201915060208360051b86010192508583111561095a57600080fd5b602085015b8381101561097757803583526020928301920161095f565b5095945050505050565b60008060006060848603121561099657600080fd5b833567ffffffffffffffff8111156109ad57600080fd5b8401601f810186136109be57600080fd5b80356109cc610933826108f0565b8082825260208201915060208360051b8501019250888311156109ee57600080fd5b602084015b83811015610a3057803567ffffffffffffffff811115610a1257600080fd5b610a218b6020838901016107ee565b845250602092830192016109f3565b509550505050602084013567ffffffffffffffff811115610a5057600080fd5b610a5c86828701610914565b9250506106f36040850161088a565b73ffffffffffffffffffffffffffffffffffffffff8416815260406020820152816040820152818360608301376000818301606090810191909152601f9092017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016010192915050565b600082610b0b577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60005b83811015610b2b578181015183820152602001610b13565b50506000910152565b60008151808452610b4c816020860160208601610b10565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b73ffffffffffffffffffffffffffffffffffffffff8616815284602082015260a060408201526000610bb360a0830186610b34565b6060830194909452509015156080909101529392505050565b600081518084526020840193506020830160005b82811015610bfe578151865260209586019590910190600101610be0565b5093949350505050565b60006080820173ffffffffffffffffffffffffffffffffffffffff871683526080602084015280865180835260a08501915060a08160051b86010192506020880160005b82811015610c9b577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60878603018452610c86858351610b34565b94506020938401939190910190600101610c4c565b505050508281036040840152610cb18186610bcc565b915050610cc2606083018415159052565b95945050505050565b600060208284031215610cdd57600080fd5b81516104f98161087c565b60008251610cfa818460208701610b10565b919091019291505056fea2646970667358221220556072e1abafc3c4063b8cce832228b4f309b93726aaa6a6dfab20cb880c6d1864736f6c634300081a0033a26469706673582212208aba4a4973a1007b6c90d268c5bae9be9253f9f823e62d1b12b478049ff40de164736f6c634300081a0033", } // ZetaConnectorNonNativeTestABI is the input ABI used to generate the binding from. @@ -251,6 +251,68 @@ func (_ZetaConnectorNonNativeTest *ZetaConnectorNonNativeTestCallerSession) ISTE return _ZetaConnectorNonNativeTest.Contract.ISTEST(&_ZetaConnectorNonNativeTest.CallOpts) } +// PAUSERROLE is a free data retrieval call binding the contract method 0xe63ab1e9. +// +// Solidity: function PAUSER_ROLE() view returns(bytes32) +func (_ZetaConnectorNonNativeTest *ZetaConnectorNonNativeTestCaller) PAUSERROLE(opts *bind.CallOpts) ([32]byte, error) { + var out []interface{} + err := _ZetaConnectorNonNativeTest.contract.Call(opts, &out, "PAUSER_ROLE") + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// PAUSERROLE is a free data retrieval call binding the contract method 0xe63ab1e9. +// +// Solidity: function PAUSER_ROLE() view returns(bytes32) +func (_ZetaConnectorNonNativeTest *ZetaConnectorNonNativeTestSession) PAUSERROLE() ([32]byte, error) { + return _ZetaConnectorNonNativeTest.Contract.PAUSERROLE(&_ZetaConnectorNonNativeTest.CallOpts) +} + +// PAUSERROLE is a free data retrieval call binding the contract method 0xe63ab1e9. +// +// Solidity: function PAUSER_ROLE() view returns(bytes32) +func (_ZetaConnectorNonNativeTest *ZetaConnectorNonNativeTestCallerSession) PAUSERROLE() ([32]byte, error) { + return _ZetaConnectorNonNativeTest.Contract.PAUSERROLE(&_ZetaConnectorNonNativeTest.CallOpts) +} + +// TSSROLE is a free data retrieval call binding the contract method 0xa783c789. +// +// Solidity: function TSS_ROLE() view returns(bytes32) +func (_ZetaConnectorNonNativeTest *ZetaConnectorNonNativeTestCaller) TSSROLE(opts *bind.CallOpts) ([32]byte, error) { + var out []interface{} + err := _ZetaConnectorNonNativeTest.contract.Call(opts, &out, "TSS_ROLE") + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// TSSROLE is a free data retrieval call binding the contract method 0xa783c789. +// +// Solidity: function TSS_ROLE() view returns(bytes32) +func (_ZetaConnectorNonNativeTest *ZetaConnectorNonNativeTestSession) TSSROLE() ([32]byte, error) { + return _ZetaConnectorNonNativeTest.Contract.TSSROLE(&_ZetaConnectorNonNativeTest.CallOpts) +} + +// TSSROLE is a free data retrieval call binding the contract method 0xa783c789. +// +// Solidity: function TSS_ROLE() view returns(bytes32) +func (_ZetaConnectorNonNativeTest *ZetaConnectorNonNativeTestCallerSession) TSSROLE() ([32]byte, error) { + return _ZetaConnectorNonNativeTest.Contract.TSSROLE(&_ZetaConnectorNonNativeTest.CallOpts) +} + // WITHDRAWERROLE is a free data retrieval call binding the contract method 0x85f438c1. // // Solidity: function WITHDRAWER_ROLE() view returns(bytes32) @@ -644,6 +706,27 @@ func (_ZetaConnectorNonNativeTest *ZetaConnectorNonNativeTestTransactorSession) return _ZetaConnectorNonNativeTest.Contract.SetUp(&_ZetaConnectorNonNativeTest.TransactOpts) } +// TestSexMaxSupplyFailsIfSenderIsNotTss is a paid mutator transaction binding the contract method 0xfdca9052. +// +// Solidity: function testSexMaxSupplyFailsIfSenderIsNotTss() returns() +func (_ZetaConnectorNonNativeTest *ZetaConnectorNonNativeTestTransactor) TestSexMaxSupplyFailsIfSenderIsNotTss(opts *bind.TransactOpts) (*types.Transaction, error) { + return _ZetaConnectorNonNativeTest.contract.Transact(opts, "testSexMaxSupplyFailsIfSenderIsNotTss") +} + +// TestSexMaxSupplyFailsIfSenderIsNotTss is a paid mutator transaction binding the contract method 0xfdca9052. +// +// Solidity: function testSexMaxSupplyFailsIfSenderIsNotTss() returns() +func (_ZetaConnectorNonNativeTest *ZetaConnectorNonNativeTestSession) TestSexMaxSupplyFailsIfSenderIsNotTss() (*types.Transaction, error) { + return _ZetaConnectorNonNativeTest.Contract.TestSexMaxSupplyFailsIfSenderIsNotTss(&_ZetaConnectorNonNativeTest.TransactOpts) +} + +// TestSexMaxSupplyFailsIfSenderIsNotTss is a paid mutator transaction binding the contract method 0xfdca9052. +// +// Solidity: function testSexMaxSupplyFailsIfSenderIsNotTss() returns() +func (_ZetaConnectorNonNativeTest *ZetaConnectorNonNativeTestTransactorSession) TestSexMaxSupplyFailsIfSenderIsNotTss() (*types.Transaction, error) { + return _ZetaConnectorNonNativeTest.Contract.TestSexMaxSupplyFailsIfSenderIsNotTss(&_ZetaConnectorNonNativeTest.TransactOpts) +} + // TestWithdraw is a paid mutator transaction binding the contract method 0xd509b16c. // // Solidity: function testWithdraw() returns() @@ -665,6 +748,27 @@ func (_ZetaConnectorNonNativeTest *ZetaConnectorNonNativeTestTransactorSession) return _ZetaConnectorNonNativeTest.Contract.TestWithdraw(&_ZetaConnectorNonNativeTest.TransactOpts) } +// TestWithdrawAndCallFailsIfMaxSupplyIsReached is a paid mutator transaction binding the contract method 0xaaf74192. +// +// Solidity: function testWithdrawAndCallFailsIfMaxSupplyIsReached() returns() +func (_ZetaConnectorNonNativeTest *ZetaConnectorNonNativeTestTransactor) TestWithdrawAndCallFailsIfMaxSupplyIsReached(opts *bind.TransactOpts) (*types.Transaction, error) { + return _ZetaConnectorNonNativeTest.contract.Transact(opts, "testWithdrawAndCallFailsIfMaxSupplyIsReached") +} + +// TestWithdrawAndCallFailsIfMaxSupplyIsReached is a paid mutator transaction binding the contract method 0xaaf74192. +// +// Solidity: function testWithdrawAndCallFailsIfMaxSupplyIsReached() returns() +func (_ZetaConnectorNonNativeTest *ZetaConnectorNonNativeTestSession) TestWithdrawAndCallFailsIfMaxSupplyIsReached() (*types.Transaction, error) { + return _ZetaConnectorNonNativeTest.Contract.TestWithdrawAndCallFailsIfMaxSupplyIsReached(&_ZetaConnectorNonNativeTest.TransactOpts) +} + +// TestWithdrawAndCallFailsIfMaxSupplyIsReached is a paid mutator transaction binding the contract method 0xaaf74192. +// +// Solidity: function testWithdrawAndCallFailsIfMaxSupplyIsReached() returns() +func (_ZetaConnectorNonNativeTest *ZetaConnectorNonNativeTestTransactorSession) TestWithdrawAndCallFailsIfMaxSupplyIsReached() (*types.Transaction, error) { + return _ZetaConnectorNonNativeTest.Contract.TestWithdrawAndCallFailsIfMaxSupplyIsReached(&_ZetaConnectorNonNativeTest.TransactOpts) +} + // TestWithdrawAndCallReceiveERC20 is a paid mutator transaction binding the contract method 0x3cba0107. // // Solidity: function testWithdrawAndCallReceiveERC20() returns() @@ -749,6 +853,27 @@ func (_ZetaConnectorNonNativeTest *ZetaConnectorNonNativeTestTransactorSession) return _ZetaConnectorNonNativeTest.Contract.TestWithdrawAndCallReceiveNoParams(&_ZetaConnectorNonNativeTest.TransactOpts) } +// TestWithdrawAndFailsIfMaxSupplyIsReached is a paid mutator transaction binding the contract method 0x7db20efb. +// +// Solidity: function testWithdrawAndFailsIfMaxSupplyIsReached() returns() +func (_ZetaConnectorNonNativeTest *ZetaConnectorNonNativeTestTransactor) TestWithdrawAndFailsIfMaxSupplyIsReached(opts *bind.TransactOpts) (*types.Transaction, error) { + return _ZetaConnectorNonNativeTest.contract.Transact(opts, "testWithdrawAndFailsIfMaxSupplyIsReached") +} + +// TestWithdrawAndFailsIfMaxSupplyIsReached is a paid mutator transaction binding the contract method 0x7db20efb. +// +// Solidity: function testWithdrawAndFailsIfMaxSupplyIsReached() returns() +func (_ZetaConnectorNonNativeTest *ZetaConnectorNonNativeTestSession) TestWithdrawAndFailsIfMaxSupplyIsReached() (*types.Transaction, error) { + return _ZetaConnectorNonNativeTest.Contract.TestWithdrawAndFailsIfMaxSupplyIsReached(&_ZetaConnectorNonNativeTest.TransactOpts) +} + +// TestWithdrawAndFailsIfMaxSupplyIsReached is a paid mutator transaction binding the contract method 0x7db20efb. +// +// Solidity: function testWithdrawAndFailsIfMaxSupplyIsReached() returns() +func (_ZetaConnectorNonNativeTest *ZetaConnectorNonNativeTestTransactorSession) TestWithdrawAndFailsIfMaxSupplyIsReached() (*types.Transaction, error) { + return _ZetaConnectorNonNativeTest.Contract.TestWithdrawAndFailsIfMaxSupplyIsReached(&_ZetaConnectorNonNativeTest.TransactOpts) +} + // TestWithdrawAndRevert is a paid mutator transaction binding the contract method 0xde1cb76c. // // Solidity: function testWithdrawAndRevert() returns() @@ -770,6 +895,27 @@ func (_ZetaConnectorNonNativeTest *ZetaConnectorNonNativeTestTransactorSession) return _ZetaConnectorNonNativeTest.Contract.TestWithdrawAndRevert(&_ZetaConnectorNonNativeTest.TransactOpts) } +// TestWithdrawAndRevertFailsIfMaxSupplyIsReached is a paid mutator transaction binding the contract method 0x2506ef03. +// +// Solidity: function testWithdrawAndRevertFailsIfMaxSupplyIsReached() returns() +func (_ZetaConnectorNonNativeTest *ZetaConnectorNonNativeTestTransactor) TestWithdrawAndRevertFailsIfMaxSupplyIsReached(opts *bind.TransactOpts) (*types.Transaction, error) { + return _ZetaConnectorNonNativeTest.contract.Transact(opts, "testWithdrawAndRevertFailsIfMaxSupplyIsReached") +} + +// TestWithdrawAndRevertFailsIfMaxSupplyIsReached is a paid mutator transaction binding the contract method 0x2506ef03. +// +// Solidity: function testWithdrawAndRevertFailsIfMaxSupplyIsReached() returns() +func (_ZetaConnectorNonNativeTest *ZetaConnectorNonNativeTestSession) TestWithdrawAndRevertFailsIfMaxSupplyIsReached() (*types.Transaction, error) { + return _ZetaConnectorNonNativeTest.Contract.TestWithdrawAndRevertFailsIfMaxSupplyIsReached(&_ZetaConnectorNonNativeTest.TransactOpts) +} + +// TestWithdrawAndRevertFailsIfMaxSupplyIsReached is a paid mutator transaction binding the contract method 0x2506ef03. +// +// Solidity: function testWithdrawAndRevertFailsIfMaxSupplyIsReached() returns() +func (_ZetaConnectorNonNativeTest *ZetaConnectorNonNativeTestTransactorSession) TestWithdrawAndRevertFailsIfMaxSupplyIsReached() (*types.Transaction, error) { + return _ZetaConnectorNonNativeTest.Contract.TestWithdrawAndRevertFailsIfMaxSupplyIsReached(&_ZetaConnectorNonNativeTest.TransactOpts) +} + // TestWithdrawAndRevertFailsIfSenderIsNotWithdrawer is a paid mutator transaction binding the contract method 0x82832014. // // Solidity: function testWithdrawAndRevertFailsIfSenderIsNotWithdrawer() returns() @@ -812,6 +958,27 @@ func (_ZetaConnectorNonNativeTest *ZetaConnectorNonNativeTestTransactorSession) return _ZetaConnectorNonNativeTest.Contract.TestWithdrawFailsIfSenderIsNotWithdrawer(&_ZetaConnectorNonNativeTest.TransactOpts) } +// TestWithdrawTogglePause is a paid mutator transaction binding the contract method 0xccb0e3f2. +// +// Solidity: function testWithdrawTogglePause() returns() +func (_ZetaConnectorNonNativeTest *ZetaConnectorNonNativeTestTransactor) TestWithdrawTogglePause(opts *bind.TransactOpts) (*types.Transaction, error) { + return _ZetaConnectorNonNativeTest.contract.Transact(opts, "testWithdrawTogglePause") +} + +// TestWithdrawTogglePause is a paid mutator transaction binding the contract method 0xccb0e3f2. +// +// Solidity: function testWithdrawTogglePause() returns() +func (_ZetaConnectorNonNativeTest *ZetaConnectorNonNativeTestSession) TestWithdrawTogglePause() (*types.Transaction, error) { + return _ZetaConnectorNonNativeTest.Contract.TestWithdrawTogglePause(&_ZetaConnectorNonNativeTest.TransactOpts) +} + +// TestWithdrawTogglePause is a paid mutator transaction binding the contract method 0xccb0e3f2. +// +// Solidity: function testWithdrawTogglePause() returns() +func (_ZetaConnectorNonNativeTest *ZetaConnectorNonNativeTestTransactorSession) TestWithdrawTogglePause() (*types.Transaction, error) { + return _ZetaConnectorNonNativeTest.Contract.TestWithdrawTogglePause(&_ZetaConnectorNonNativeTest.TransactOpts) +} + // ZetaConnectorNonNativeTestCallIterator is returned from FilterCall and is used to iterate over the raw logs and unpacked data for Call events raised by the ZetaConnectorNonNativeTest contract. type ZetaConnectorNonNativeTestCallIterator struct { Event *ZetaConnectorNonNativeTestCall // Event containing the contract specifics and raw log diff --git a/v2/pkg/zrc20.t.sol/zrc20test.go b/v2/pkg/zrc20.t.sol/zrc20test.go index 78b4484a..e8447bb4 100644 --- a/v2/pkg/zrc20.t.sol/zrc20test.go +++ b/v2/pkg/zrc20.t.sol/zrc20test.go @@ -49,8 +49,8 @@ type StdInvariantFuzzSelector struct { // ZRC20TestMetaData contains all meta data concerning the ZRC20Test contract. var ZRC20TestMetaData = &bind.MetaData{ - ABI: "[{\"type\":\"function\",\"name\":\"IS_TEST\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeArtifacts\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedArtifacts_\",\"type\":\"string[]\",\"internalType\":\"string[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeContracts\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedContracts_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeSelectors\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedSelectors_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzSelector[]\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"selectors\",\"type\":\"bytes4[]\",\"internalType\":\"bytes4[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeSenders\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedSenders_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"failed\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"setUp\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"targetArtifactSelectors\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedArtifactSelectors_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzArtifactSelector[]\",\"components\":[{\"name\":\"artifact\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"selectors\",\"type\":\"bytes4[]\",\"internalType\":\"bytes4[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetArtifacts\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedArtifacts_\",\"type\":\"string[]\",\"internalType\":\"string[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetContracts\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedContracts_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetInterfaces\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedInterfaces_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzInterface[]\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"artifacts\",\"type\":\"string[]\",\"internalType\":\"string[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetSelectors\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedSelectors_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzSelector[]\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"selectors\",\"type\":\"bytes4[]\",\"internalType\":\"bytes4[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetSenders\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedSenders_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"testBurn\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testBurnFailsIfNoBalance\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDeposit\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositFailsIfSenderIsNotGateway\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testTransferFrom\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testTransferFromFailsIfNoAllowance\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testTransferFromFailsIfNoBalance\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testTransferFromFailsIfRecipientIsZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testTransferFromFailsIfSenderIsZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testUpdateGasLimit\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testUpdateGasLimitFailsIfSenderIsNotFungible\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testUpdateGatewayAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testUpdateGatewayAddressFailsIfSenderIsNotFungible\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testUpdateProtocolFlatFee\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testUpdateProtocolFlatFeeFailsIfSenderIsNotFungible\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testUpdateSystemContractAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testUpdateSystemContractAddressFailsIfSenderIsNotFungible\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdraw\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawGasFee\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawGasFeeFailsIfGasCoinNotSetForChainId\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawGasFeeFailsIfGasPriceNotSetForChainId\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testZRC20BasicInfo\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"event\",\"name\":\"log\",\"inputs\":[{\"name\":\"\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_address\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_array\",\"inputs\":[{\"name\":\"val\",\"type\":\"uint256[]\",\"indexed\":false,\"internalType\":\"uint256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_array\",\"inputs\":[{\"name\":\"val\",\"type\":\"int256[]\",\"indexed\":false,\"internalType\":\"int256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_array\",\"inputs\":[{\"name\":\"val\",\"type\":\"address[]\",\"indexed\":false,\"internalType\":\"address[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_bytes\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_bytes32\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_int\",\"inputs\":[{\"name\":\"\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_address\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_array\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"uint256[]\",\"indexed\":false,\"internalType\":\"uint256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_array\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"int256[]\",\"indexed\":false,\"internalType\":\"int256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_array\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"address[]\",\"indexed\":false,\"internalType\":\"address[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_bytes\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_bytes32\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_decimal_int\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"},{\"name\":\"decimals\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_decimal_uint\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"decimals\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_int\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_string\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_uint\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_string\",\"inputs\":[{\"name\":\"\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_uint\",\"inputs\":[{\"name\":\"\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"logs\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"CallerIsNotFungibleModule\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"GasFeeTransferFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidSender\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"LowAllowance\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"LowBalance\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZeroAddress\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZeroGasCoin\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZeroGasPrice\",\"inputs\":[]}]", - Bin: "0x6080604052600c8054600160ff199182168117909255601f80549091169091179055348015602c57600080fd5b5061d0318061003c6000396000f3fe608060405234801561001057600080fd5b50600436106102415760003560e01c80638032668011610145578063d509b16c116100bd578063e13aba481161008c578063f1f87f4011610071578063f1f87f40146103a2578063f2413096146103aa578063fa7626d4146103b257600080fd5b8063e13aba4814610392578063e20c9f711461039a57600080fd5b8063d509b16c14610372578063d97136a21461037a578063dcba486a14610382578063dfbdf6001461038a57600080fd5b8063b0464fdc11610114578063b5508aa9116100f9578063b5508aa91461034a578063ba414fa614610352578063d04cda981461036a57600080fd5b8063b0464fdc1461033a578063b549984c1461034257600080fd5b8063803266801461030057806385226c8114610308578063916a17c61461031d578063ae9687dc1461033257600080fd5b80633e5e3c23116101d85780635f01db7e116101a75780636ff458501161018c5780636ff45850146102e857806370557298146102f05780637f924c4e146102f857600080fd5b80635f01db7e146102cb57806366d9a9a0146102d357600080fd5b80633e5e3c23146102ab5780633f7286f4146102b35780634b629509146102bb57806358fdbbe0146102c357600080fd5b80632843882611610214578063284388261461027e5780632ade3880146102865780632f6254fc1461029b5780633be9ec80146102a357600080fd5b80630393998b146102465780630a9254e4146102505780631142744e146102585780631ed7831c14610260575b600080fd5b61024e6103bf565b005b61024e6104da565b61024e610bbc565b610268610cfb565b604051610275919061811a565b60405180910390f35b61024e610d5d565b61028e610fda565b60405161027591906181b6565b61024e61111c565b61024e6112a6565b6102686114c5565b610268611525565b61024e611585565b61024e611671565b61024e61175d565b6102db6118e3565b604051610275919061831c565b61024e611a65565b61024e611ca8565b61024e611f29565b61024e612166565b610310612253565b60405161027591906183ba565b610325612323565b6040516102759190618431565b61024e61241e565b6103256126ab565b61024e6127a6565b610310612891565b61035a612961565b6040519015158152602001610275565b61024e612a35565b61024e612b92565b61024e6132bc565b61024e613499565b61024e61374e565b61024e6138aa565b610268613b86565b61024e613be6565b61024e613d5e565b601f5461035a9060ff1681565b6040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527f2b2add3d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b15801561044457600080fd5b505af1158015610458573d6000803e3d6000fd5b5050601f546040517feddeb123000000000000000000000000000000000000000000000000000000008152600a60048201526101009091046001600160a01b0316925063eddeb12391506024015b600060405180830381600087803b1580156104c057600080fd5b505af11580156104d4573d6000803e3d6000fd5b50505050565b602480547fffffffffffffffffffffffff00000000000000000000000000000000000000009081163017909155602580549091166112341790556040516105209061803a565b604051809103906000f08015801561053c573d6000803e3d6000fd5b50602380547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03928316908117909155604080518082018252600f81527f476174657761795a45564d2e736f6c000000000000000000000000000000000060208201526024805492519081019390935292166044820152610620919060640160408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f485cc95500000000000000000000000000000000000000000000000000000000179052613e71565b602280546001600160a01b03929092167fffffffffffffffffffffffff00000000000000000000000000000000000000009283168117909155602180549092168117909155604080517f3ce4a5bc0000000000000000000000000000000000000000000000000000000081529051633ce4a5bc916004808201926020929091908290030181865afa1580156106b9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106dd91906184e4565b602680547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039290921691821790556040517f06447d560000000000000000000000000000000000000000000000000000000081526004810191909152737109709ecfa91a80626ff3989d68f67f5b1dd12d906306447d5690602401600060405180830381600087803b15801561077b57600080fd5b505af115801561078f573d6000803e3d6000fd5b5050505060008060006040516107a490618047565b6001600160a01b03938416815291831660208301529091166040820152606001604051809103906000f0801580156107e0573d6000803e3d6000fd5b50602080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392831690811790915560215460405160129360019384936000939192169061083690618054565b610845969594939291906184ff565b604051809103906000f080158015610861573d6000803e3d6000fd5b50601f80547fffffffffffffffffffffff0000000000000000000000000000000000000000ff166101006001600160a01b03938416810291909117918290556020546040517fee2815ba00000000000000000000000000000000000000000000000000000000815260016004820152919092048316602482015291169063ee2815ba90604401600060405180830381600087803b15801561090157600080fd5b505af1158015610915573d6000803e3d6000fd5b50506020546040517fa7cb050700000000000000000000000000000000000000000000000000000000815260016004820181905260248201526001600160a01b03909116925063a7cb05079150604401600060405180830381600087803b15801561097f57600080fd5b505af1158015610993573d6000803e3d6000fd5b50506026546040517fc88a5e6d0000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152633b9aca006024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c88a5e6d9150604401600060405180830381600087803b158015610a1357600080fd5b505af1158015610a27573d6000803e3d6000fd5b50506022546040517fc88a5e6d0000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152633b9aca006024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c88a5e6d9150604401600060405180830381600087803b158015610aa757600080fd5b505af1158015610abb573d6000803e3d6000fd5b5050601f54602480546040517f47e7ef240000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620186a09281019290925261010090920490911692506347e7ef2491506044016020604051808303816000875af1158015610b39573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b5d91906185f4565b507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b03166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156104c057600080fd5b6040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fddb5de5e000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b158015610c4157600080fd5b505af1158015610c55573d6000803e3d6000fd5b5050601f54602480546040517f47e7ef240000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620186a09281019290925261010090920490911692506347e7ef2491506044015b6020604051808303816000875af1158015610cd4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cf891906185f4565b50565b60606016805480602002602001604051908101604052809291908181526020018280548015610d5357602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610d35575b5050505050905090565b601f546025546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201526000926101009004909116906370a0823190602401602060405180830381865afa158015610dcb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610def9190618616565b9050610dfc600082613e90565b601f54602480546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201526207a12092810183905291926101009004169063095ea7b3906044016020604051808303816000875af1158015610e74573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e9891906185f4565b506040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b158015610f1e57600080fd5b505af1158015610f32573d6000803e3d6000fd5b5050601f546025546040517f23b872dd000000000000000000000000000000000000000000000000000000008152600060048201526001600160a01b039182166024820152604481018690526101009092041692506323b872dd91506064015b6020604051808303816000875af1158015610fb1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fd591906185f4565b505050565b6060601e805480602002602001604051908101604052809291908181526020016000905b8282101561111357600084815260208082206040805180820182526002870290920180546001600160a01b03168352600181018054835181870281018701909452808452939591948681019491929084015b828210156110fc57838290600052602060002001805461106f9061862f565b80601f016020809104026020016040519081016040528092919081815260200182805461109b9061862f565b80156110e85780601f106110bd576101008083540402835291602001916110e8565b820191906000526020600020905b8154815290600101906020018083116110cb57829003601f168201915b505050505081526020019060010190611050565b505050508152505081526020019060010190610ffe565b50505050905090565b6026546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561118e57600080fd5b505af11580156111a2573d6000803e3d6000fd5b5050601f546040517fc835d7cc00000000000000000000000000000000000000000000000000000000815261321160048201526101009091046001600160a01b0316925063c835d7cc9150602401600060405180830381600087803b15801561120a57600080fd5b505af115801561121e573d6000803e3d6000fd5b505050506112a4601f60019054906101000a90046001600160a01b03166001600160a01b031663f2441b326040518163ffffffff1660e01b8152600401602060405180830381865afa158015611278573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061129c91906184e4565b613211613f18565b565b6026546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561131857600080fd5b505af115801561132c573d6000803e3d6000fd5b50506020546040517fa7cb050700000000000000000000000000000000000000000000000000000000815260016004820152600060248201526001600160a01b03909116925063a7cb05079150604401600060405180830381600087803b15801561139657600080fd5b505af11580156113aa573d6000803e3d6000fd5b50506040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fe661aed0000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e091506024015b600060405180830381600087803b15801561143457600080fd5b505af1158015611448573d6000803e3d6000fd5b50505050600080601f60019054906101000a90046001600160a01b03166001600160a01b031663d9eeebed6040518163ffffffff1660e01b81526004016040805180830381865afa1580156114a1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104d4919061867c565b60606018805480602002602001604051908101604052809291908181526020018280548015610d53576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311610d35575050505050905090565b60606017805480602002602001604051908101604052809291908181526020018280548015610d53576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311610d35575050505050905090565b6040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527f2b2add3d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b15801561160a57600080fd5b505af115801561161e573d6000803e3d6000fd5b5050601f546040517fccc7759900000000000000000000000000000000000000000000000000000000815261321160048201526101009091046001600160a01b0316925063ccc7759991506024016104a6565b6040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527f2b2add3d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b1580156116f657600080fd5b505af115801561170a573d6000803e3d6000fd5b5050601f546040517fc835d7cc00000000000000000000000000000000000000000000000000000000815261321160048201526101009091046001600160a01b0316925063c835d7cc91506024016104a6565b6026546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156117cf57600080fd5b505af11580156117e3573d6000803e3d6000fd5b5050601f546040517ff687d12a000000000000000000000000000000000000000000000000000000008152600a60048201526101009091046001600160a01b0316925063f687d12a9150602401600060405180830381600087803b15801561184a57600080fd5b505af115801561185e573d6000803e3d6000fd5b505050506112a4600a601f60019054906101000a90046001600160a01b03166001600160a01b031663091d27886040518163ffffffff1660e01b8152600401602060405180830381865afa1580156118ba573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118de9190618616565b613e90565b6060601b805480602002602001604051908101604052809291908181526020016000905b82821015611113578382906000526020600020906002020160405180604001604052908160008201805461193a9061862f565b80601f01602080910402602001604051908101604052809291908181526020018280546119669061862f565b80156119b35780601f10611988576101008083540402835291602001916119b3565b820191906000526020600020905b81548152906001019060200180831161199657829003601f168201915b5050505050815260200160018201805480602002602001604051908101604052809291908181526020018280548015611a4d57602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190600401906020826003010492830192600103820291508084116119fa5790505b50505050508152505081526020019060010190611907565b601f546025546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201526000926101009004909116906370a0823190602401602060405180830381865afa158015611ad3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611af79190618616565b9050611b04600082613e90565b601f54602480546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201526207a12092810183905291926101009004169063095ea7b3906044016020604051808303816000875af1158015611b7c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ba091906185f4565b506040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527ffe382aa7000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e0906024015b600060405180830381600087803b158015611c2757600080fd5b505af1158015611c3b573d6000803e3d6000fd5b5050601f54602480546025546040517f23b872dd0000000000000000000000000000000000000000000000000000000081526001600160a01b039283166004820152908216928101929092526044820186905261010090920490911692506323b872dd9150606401610f92565b601f546025546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201526000926101009004909116906370a0823190602401602060405180830381865afa158015611d16573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d3a9190618616565b9050611d47600082613e90565b601f54602480546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015261c35092810183905291926101009004169063095ea7b3906044016020604051808303816000875af1158015611dbe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611de291906185f4565b50601f54602480546025546040517f23b872dd0000000000000000000000000000000000000000000000000000000081526001600160a01b0392831660048201529082169281019290925260448201849052610100909204909116906323b872dd906064016020604051808303816000875af1158015611e66573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e8a91906185f4565b50601f546025546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201526000926101009004909116906370a0823190602401602060405180830381865afa158015611ef9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f1d9190618616565b9050610fd58282613e90565b6000601f60019054906101000a90046001600160a01b03166001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611f7e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fa29190618616565b9050611fb1620186a082613e90565b6022546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561202357600080fd5b505af1158015612037573d6000803e3d6000fd5b5050601f54602480546040517f47e7ef240000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620186a09281019290925261010090920490911692506347e7ef2491506044016020604051808303816000875af11580156120b5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120d991906185f4565b506000601f60019054906101000a90046001600160a01b03166001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561212f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121539190618616565b905061216262030d4082613e90565b5050565b6040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527ffe382aa7000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b1580156121eb57600080fd5b505af11580156121ff573d6000803e3d6000fd5b5050601f546040517f42966c68000000000000000000000000000000000000000000000000000000008152620249f060048201526101009091046001600160a01b031692506342966c689150602401610cb5565b6060601a805480602002602001604051908101604052809291908181526020016000905b828210156111135783829060005260206000200180546122969061862f565b80601f01602080910402602001604051908101604052809291908181526020018280546122c29061862f565b801561230f5780601f106122e45761010080835404028352916020019161230f565b820191906000526020600020905b8154815290600101906020018083116122f257829003601f168201915b505050505081526020019060010190612277565b6060601d805480602002602001604051908101604052809291908181526020016000905b828210156111135760008481526020908190206040805180820182526002860290920180546001600160a01b0316835260018101805483518187028101870190945280845293949193858301939283018282801561240657602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190600401906020826003010492830192600103820291508084116123b35790505b50505050508152505081526020019060010190612347565b6000601f60019054906101000a90046001600160a01b03166001600160a01b03166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa158015612473573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261249b9190810190618770565b90506124dc6040518060400160405280600581526020017f544f4b454e00000000000000000000000000000000000000000000000000000081525082613f79565b6000601f60019054906101000a90046001600160a01b03166001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa158015612531573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526125599190810190618770565b905061259a6040518060400160405280600381526020017f544b4e000000000000000000000000000000000000000000000000000000000081525082613f79565b6000601f60019054906101000a90046001600160a01b03166001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa1580156125ef573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061261391906187b9565b905061262360128260ff16613e90565b6000601f60019054906101000a90046001600160a01b03166001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612678573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061269c9190618616565b90506104d4620186a082613e90565b6060601c805480602002602001604051908101604052809291908181526020016000905b828210156111135760008481526020908190206040805180820182526002860290920180546001600160a01b0316835260018101805483518187028101870190945280845293949193858301939283018282801561278e57602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168152602001906004019060208260030104928301926001038202915080841161273b5790505b505050505081525050815260200190600101906126cf565b6040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527f2b2add3d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b15801561282b57600080fd5b505af115801561283f573d6000803e3d6000fd5b5050601f546040517ff687d12a000000000000000000000000000000000000000000000000000000008152600a60048201526101009091046001600160a01b0316925063f687d12a91506024016104a6565b60606019805480602002602001604051908101604052809291908181526020016000905b828210156111135783829060005260206000200180546128d49061862f565b80601f01602080910402602001604051908101604052809291908181526020018280546129009061862f565b801561294d5780601f106129225761010080835404028352916020019161294d565b820191906000526020600020905b81548152906001019060200180831161293057829003601f168201915b5050505050815260200190600101906128b5565b60085460009060ff1615612979575060085460ff1690565b6040517f667f9d70000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d600482018190527f6661696c65640000000000000000000000000000000000000000000000000000602483015260009163667f9d7090604401602060405180830381865afa158015612a0a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a2e9190618616565b1415905090565b6026546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015612aa757600080fd5b505af1158015612abb573d6000803e3d6000fd5b5050601f546040517feddeb123000000000000000000000000000000000000000000000000000000008152600a60048201526101009091046001600160a01b0316925063eddeb1239150602401600060405180830381600087803b158015612b2257600080fd5b505af1158015612b36573d6000803e3d6000fd5b505050506112a4600a601f60019054906101000a90046001600160a01b03166001600160a01b0316634d8943bb6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156118ba573d6000803e3d6000fd5b6026546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152600a908190737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015612c0957600080fd5b505af1158015612c1d573d6000803e3d6000fd5b5050601f546040517ff687d12a000000000000000000000000000000000000000000000000000000008152600481018690526101009091046001600160a01b0316925063f687d12a9150602401600060405180830381600087803b158015612c8457600080fd5b505af1158015612c98573d6000803e3d6000fd5b50506026546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b158015612d0e57600080fd5b505af1158015612d22573d6000803e3d6000fd5b5050601f546040517feddeb123000000000000000000000000000000000000000000000000000000008152600481018590526101009091046001600160a01b0316925063eddeb1239150602401600060405180830381600087803b158015612d8957600080fd5b505af1158015612d9d573d6000803e3d6000fd5b5050601f54602480546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152600095506101009093041692506370a082319101602060405180830381865afa158015612e0d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e319190618616565b9050612e40620186a082613e90565b6000601f60019054906101000a90046001600160a01b03166001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612e95573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612eb99190618616565b9050612ec8620186a082613e90565b601f546026546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201526000926101009004909116906370a0823190602401602060405180830381865afa158015612f36573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f5a9190618616565b601f546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526101009091046001600160a01b03166004820181905261c350602483015291925063095ea7b3906044016020604051808303816000875af1158015612fcc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ff091906185f4565b50601f546025546040805160609290921b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000001660208301528051601481840301815260348301918290527fc7012626000000000000000000000000000000000000000000000000000000009091526001600160a01b03610100909304929092169163c701262691613088919061c350906038016187dc565b6020604051808303816000875af11580156130a7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130cb91906185f4565b50601f546026546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201526000926101009004909116906370a0823190602401602060405180830381865afa15801561313a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061315e9190618616565b905061317e8561316e888561882d565b613178919061882d565b82613e90565b601f54602480546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201526000936101009004909116916370a082319101602060405180830381865afa1580156131eb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061320f9190618616565b905061322b866132218961c350618840565b6131789190618840565b6000601f60019054906101000a90046001600160a01b03166001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613280573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132a49190618616565b90506132b261c35082613e90565b5050505050505050565b601f54602480546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201526207a12092810183905291926101009004169063095ea7b3906044016020604051808303816000875af1158015613334573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061335891906185f4565b506040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b1580156133de57600080fd5b505af11580156133f2573d6000803e3d6000fd5b5050601f54602480546040517f23b872dd0000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201526000928101929092526044820186905261010090920490911692506323b872dd91506064016020604051808303816000875af1158015613475573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061216291906185f4565b6026546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561350b57600080fd5b505af115801561351f573d6000803e3d6000fd5b5050601f546040517ff687d12a000000000000000000000000000000000000000000000000000000008152600a6004820181905293508392506101009091046001600160a01b03169063f687d12a90602401600060405180830381600087803b15801561358b57600080fd5b505af115801561359f573d6000803e3d6000fd5b50506026546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b15801561361557600080fd5b505af1158015613629573d6000803e3d6000fd5b5050601f546040517feddeb123000000000000000000000000000000000000000000000000000000008152600a60048201526101009091046001600160a01b0316925063eddeb1239150602401600060405180830381600087803b15801561369057600080fd5b505af11580156136a4573d6000803e3d6000fd5b50505050600080601f60019054906101000a90046001600160a01b03166001600160a01b031663d9eeebed6040518163ffffffff1660e01b81526004016040805180830381865afa1580156136fd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613721919061867c565b601f5491935091506137419061010090046001600160a01b031683613f18565b6104d4613178848661882d565b6026546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156137c057600080fd5b505af11580156137d4573d6000803e3d6000fd5b5050601f546040517fccc7759900000000000000000000000000000000000000000000000000000000815261321160048201526101009091046001600160a01b0316925063ccc775999150602401600060405180830381600087803b15801561383c57600080fd5b505af1158015613850573d6000803e3d6000fd5b505050506112a4601f60019054906101000a90046001600160a01b03166001600160a01b0316638b851b956040518163ffffffff1660e01b8152600401602060405180830381865afa158015611278573d6000803e3d6000fd5b601f54602480546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201526000936101009004909116916370a082319101602060405180830381865afa158015613917573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061393b9190618616565b905061394a620186a082613e90565b6000601f60019054906101000a90046001600160a01b03166001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561399f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906139c39190618616565b90506139d2620186a082613e90565b601f546040517f42966c6800000000000000000000000000000000000000000000000000000000815261c35060048201526101009091046001600160a01b0316906342966c68906024016020604051808303816000875af1158015613a3b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a5f91906185f4565b50601f54602480546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201526000936101009004909116916370a082319101602060405180830381865afa158015613acd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613af19190618616565b9050613aff61c35082613e90565b6000601f60019054906101000a90046001600160a01b03166001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613b54573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b789190618616565b90506104d461c35082613e90565b60606015805480602002602001604051908101604052809291908181526020018280548015610d53576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311610d35575050505050905090565b6026546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015613c5857600080fd5b505af1158015613c6c573d6000803e3d6000fd5b50506020546040517fee2815ba00000000000000000000000000000000000000000000000000000000815260016004820152600060248201526001600160a01b03909116925063ee2815ba9150604401600060405180830381600087803b158015613cd657600080fd5b505af1158015613cea573d6000803e3d6000fd5b50506040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527f78fff396000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e0915060240161141a565b601f546025546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201526000926101009004909116906370a0823190602401602060405180830381865afa158015613dcc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613df09190618616565b9050613dfd600082613e90565b6040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527f10bad14700000000000000000000000000000000000000000000000000000000600482015261c35090737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401611c0d565b6000613e7b618061565b613e86848483613fcb565b9150505b92915050565b6040517f98296c540000000000000000000000000000000000000000000000000000000081526004810183905260248101829052737109709ecfa91a80626ff3989d68f67f5b1dd12d906398296c54906044015b60006040518083038186803b158015613efc57600080fd5b505afa158015613f10573d6000803e3d6000fd5b505050505050565b6040517f515361f60000000000000000000000000000000000000000000000000000000081526001600160a01b03808416600483015282166024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063515361f690604401613ee4565b6040517ff320d963000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063f320d96390613ee49085908590600401618853565b600080613fd88584614046565b905061403b6040518060400160405280601d81526020017f4552433139363750726f78792e736f6c3a4552433139363750726f78790000008152508286604051602001614026929190618878565b60405160208183030381529060405285614052565b9150505b9392505050565b600061403f8383614080565b60c081015151600090156140765761406f84848460c0015161409b565b905061403f565b61406f8484614241565b600061408c838361432c565b61403f83836020015184614052565b6000806140a6614338565b905060006140b4868361440b565b905060006140cb82606001518360200151856148b1565b905060006140db83838989614ac3565b905060006140e882615940565b602081015181519192509060030b1561415b5789826040015160405160200161411292919061889a565b60408051601f19818403018152908290527f08c379a00000000000000000000000000000000000000000000000000000000082526141529160040161891b565b60405180910390fd5b600061419e6040518060400160405280601581526020017f4465706c6f79656420746f20616464726573733a200000000000000000000000815250836001615b0f565b6040517fc6ce059d000000000000000000000000000000000000000000000000000000008152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c6ce059d906141f190849060040161891b565b602060405180830381865afa15801561420e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061423291906184e4565b9b9a5050505050505050505050565b6040517f8d1cc9250000000000000000000000000000000000000000000000000000000081526000908190737109709ecfa91a80626ff3989d68f67f5b1dd12d90638d1cc9259061429690879060040161891b565b600060405180830381865afa1580156142b3573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526142db919081019061894e565b9050600061430982856040516020016142f5929190618983565b604051602081830303815290604052615d0f565b90506001600160a01b038116613e865784846040516020016141129291906189b2565b61216282826000615d22565b604080518082018252600381527f6f75740000000000000000000000000000000000000000000000000000000000602082015290517fd145736c000000000000000000000000000000000000000000000000000000008152606091737109709ecfa91a80626ff3989d68f67f5b1dd12d91829063d145736c906143bf908490600401618a5d565b600060405180830381865afa1580156143dc573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526144049190810190618770565b9250505090565b61443d6040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b6000737109709ecfa91a80626ff3989d68f67f5b1dd12d90506144886040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b61449185615e25565b602082015260006144a18661620a565b90506000836001600160a01b031663d930a0e66040518163ffffffff1660e01b8152600401600060405180830381865afa1580156144e3573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261450b9190810190618770565b868385602001516040516020016145259493929190618aa4565b60408051601f19818403018152908290527f60f9bb1100000000000000000000000000000000000000000000000000000000825291506000906001600160a01b038616906360f9bb119061457d90859060040161891b565b600060405180830381865afa15801561459a573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526145c29190810190618770565b6040517fdb4235f60000000000000000000000000000000000000000000000000000000081529091506001600160a01b0386169063db4235f69061460a908490600401618ba8565b602060405180830381865afa158015614627573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061464b91906185f4565b61466057816040516020016141129190618bfa565b6040517f49c4fac80000000000000000000000000000000000000000000000000000000081526001600160a01b038616906349c4fac8906146a5908490600401618c8c565b600060405180830381865afa1580156146c2573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526146ea9190810190618770565b84526040517fdb4235f60000000000000000000000000000000000000000000000000000000081526001600160a01b0386169063db4235f690614731908490600401618cde565b602060405180830381865afa15801561474e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061477291906185f4565b15614807576040517f49c4fac80000000000000000000000000000000000000000000000000000000081526001600160a01b038616906349c4fac8906147bc908490600401618cde565b600060405180830381865afa1580156147d9573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526148019190810190618770565b60408501525b846001600160a01b03166349c4fac882866000015160405160200161482c9190618d30565b6040516020818303038152906040526040518363ffffffff1660e01b8152600401614858929190618853565b600060405180830381865afa158015614875573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261489d9190810190618770565b606085015250608083015250949350505050565b60408051600480825260a0820190925260609160009190816020015b60608152602001906001900390816148cd5790505090506040518060400160405280600481526020017f67726570000000000000000000000000000000000000000000000000000000008152508160008151811061492d5761492d618d9c565b60200260200101819052506040518060400160405280600381526020017f2d726c00000000000000000000000000000000000000000000000000000000008152508160018151811061498157614981618d9c565b60200260200101819052508460405160200161499d9190618dcb565b604051602081830303815290604052816002815181106149bf576149bf618d9c565b6020026020010181905250826040516020016149db9190618e37565b604051602081830303815290604052816003815181106149fd576149fd618d9c565b60200260200101819052506000614a1382615940565b602080820151604080518082018252600581527f2e6a736f6e0000000000000000000000000000000000000000000000000000008185019081528251808401845260008082529086015282518084019093529051825292810192909252919250614aa4906040805180820182526000808252602091820152815180830190925284518252808501908201529061648d565b614ab957856040516020016141129190618e78565b9695505050505050565b60a0810151604080518082018252600080825260209182015281518083019092528251808352928101910152606090737109709ecfa91a80626ff3989d68f67f5b1dd12d9015614b13565b511590565b614c8757826020015115614bcf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605860248201527f54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f742060448201527f62652075736564207768656e207468652060736b6970566572696679536f757260648201527f6365436f646560206f7074696f6e206973206074727565600000000000000000608482015260a401614152565b8260c0015115614c87576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605360248201527f54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f742060448201527f62652075736564207768656e207468652060736b69704c6963656e736554797060648201527f6560206f7074696f6e2069732060747275656000000000000000000000000000608482015260a401614152565b6040805160ff8082526120008201909252600091816020015b6060815260200190600190039081614ca057905050905060006040518060400160405280600381526020017f6e70780000000000000000000000000000000000000000000000000000000000815250828280614cfb90618f09565b935060ff1681518110614d1057614d10618d9c565b60200260200101819052506040518060400160405280600d81526020017f302e302e312d616c7068612e3700000000000000000000000000000000000000815250604051602001614d619190618f28565b604051602081830303815290604052828280614d7c90618f09565b935060ff1681518110614d9157614d91618d9c565b60200260200101819052506040518060400160405280600681526020017f6465706c6f790000000000000000000000000000000000000000000000000000815250828280614dde90618f09565b935060ff1681518110614df357614df3618d9c565b60200260200101819052506040518060400160405280600e81526020017f2d2d636f6e74726163744e616d65000000000000000000000000000000000000815250828280614e4090618f09565b935060ff1681518110614e5557614e55618d9c565b60200260200101819052508760200151828280614e7190618f09565b935060ff1681518110614e8657614e86618d9c565b60200260200101819052506040518060400160405280600e81526020017f2d2d636f6e747261637450617468000000000000000000000000000000000000815250828280614ed390618f09565b935060ff1681518110614ee857614ee8618d9c565b602090810291909101015287518282614f0081618f09565b935060ff1681518110614f1557614f15618d9c565b60200260200101819052506040518060400160405280600981526020017f2d2d636861696e49640000000000000000000000000000000000000000000000815250828280614f6290618f09565b935060ff1681518110614f7757614f77618d9c565b6020026020010181905250614f8b466164ee565b8282614f9681618f09565b935060ff1681518110614fab57614fab618d9c565b60200260200101819052506040518060400160405280600f81526020017f2d2d6275696c64496e666f46696c650000000000000000000000000000000000815250828280614ff890618f09565b935060ff168151811061500d5761500d618d9c565b60200260200101819052508682828061502590618f09565b935060ff168151811061503a5761503a618d9c565b60209081029190910101528551156151615760408051808201909152601581527f2d2d636f6e7374727563746f7242797465636f646500000000000000000000006020820152828261508b81618f09565b935060ff16815181106150a0576150a0618d9c565b60209081029190910101526040517f71aad10d0000000000000000000000000000000000000000000000000000000081526001600160a01b038416906371aad10d906150f090899060040161891b565b600060405180830381865afa15801561510d573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526151359190810190618770565b828261514081618f09565b935060ff168151811061515557615155618d9c565b60200260200101819052505b8460200151156152315760408051808201909152601281527f2d2d766572696679536f75726365436f64650000000000000000000000000000602082015282826151aa81618f09565b935060ff16815181106151bf576151bf618d9c565b60200260200101819052506040518060400160405280600581526020017f66616c736500000000000000000000000000000000000000000000000000000081525082828061520c90618f09565b935060ff168151811061522157615221618d9c565b60200260200101819052506153f8565b615269614b0e8660a0015160408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6152fc5760408051808201909152600d81527f2d2d6c6963656e73655479706500000000000000000000000000000000000000602082015282826152ac81618f09565b935060ff16815181106152c1576152c1618d9c565b60200260200101819052508460a001516040516020016152e19190618dcb565b60405160208183030381529060405282828061520c90618f09565b8460c0015115801561533f57506040808901518151808301835260008082526020918201528251808401909352815183529081019082015261533d90511590565b155b156153f85760408051808201909152600d81527f2d2d6c6963656e736554797065000000000000000000000000000000000000006020820152828261538381618f09565b935060ff168151811061539857615398618d9c565b60200260200101819052506153ac8861658e565b6040516020016153bc9190618dcb565b6040516020818303038152906040528282806153d790618f09565b935060ff16815181106153ec576153ec618d9c565b60200260200101819052505b6040808601518151808301835260008082526020918201528251808401909352815183529081019082015261542c90511590565b6154c15760408051808201909152600b81527f2d2d72656c6179657249640000000000000000000000000000000000000000006020820152828261546f81618f09565b935060ff168151811061548457615484618d9c565b602002602001018190525084604001518282806154a090618f09565b935060ff16815181106154b5576154b5618d9c565b60200260200101819052505b6060850151156155e25760408051808201909152600681527f2d2d73616c7400000000000000000000000000000000000000000000000000006020820152828261550a81618f09565b935060ff168151811061551f5761551f618d9c565b602090810291909101015260608501516040517fb11a19e800000000000000000000000000000000000000000000000000000000815260048101919091526001600160a01b0384169063b11a19e890602401600060405180830381865afa15801561558e573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526155b69190810190618770565b82826155c181618f09565b935060ff16815181106155d6576155d6618d9c565b60200260200101819052505b60e085015151156156895760408051808201909152600a81527f2d2d6761734c696d6974000000000000000000000000000000000000000000006020820152828261562c81618f09565b935060ff168151811061564157615641618d9c565b602002602001018190525061565d8560e00151600001516164ee565b828261566881618f09565b935060ff168151811061567d5761567d618d9c565b60200260200101819052505b60e085015160200151156157335760408051808201909152600a81527f2d2d676173507269636500000000000000000000000000000000000000000000602082015282826156d681618f09565b935060ff16815181106156eb576156eb618d9c565b60200260200101819052506157078560e00151602001516164ee565b828261571281618f09565b935060ff168151811061572757615727618d9c565b60200260200101819052505b60e085015160400151156157dd5760408051808201909152600e81527f2d2d6d61784665655065724761730000000000000000000000000000000000006020820152828261578081618f09565b935060ff168151811061579557615795618d9c565b60200260200101819052506157b18560e00151604001516164ee565b82826157bc81618f09565b935060ff16815181106157d1576157d1618d9c565b60200260200101819052505b60e085015160600151156158875760408051808201909152601681527f2d2d6d61785072696f72697479466565506572476173000000000000000000006020820152828261582a81618f09565b935060ff168151811061583f5761583f618d9c565b602002602001018190525061585b8560e00151606001516164ee565b828261586681618f09565b935060ff168151811061587b5761587b618d9c565b60200260200101819052505b60008160ff1667ffffffffffffffff8111156158a5576158a56186a8565b6040519080825280602002602001820160405280156158d857816020015b60608152602001906001900390816158c35790505b50905060005b8260ff168160ff16101561593157838160ff168151811061590157615901618d9c565b6020026020010151828260ff168151811061591e5761591e618d9c565b60209081029190910101526001016158de565b5093505050505b949350505050565b6159676040518060600160405280600060030b815260200160608152602001606081525090565b60408051808201825260048082527f6261736800000000000000000000000000000000000000000000000000000000602083015291517fd145736c000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d92600091849163d145736c916159ed91869101618f93565b600060405180830381865afa158015615a0a573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052615a329190810190618770565b90506000615a40868361707d565b90506000846001600160a01b031663f45c1ce7836040518263ffffffff1660e01b8152600401615a7091906183ba565b6000604051808303816000875af1158015615a8f573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052615ab79190810190618fda565b805190915060030b15801590615ad05750602081015151155b8015615adf5750604081015151155b15614ab95781600081518110615af757615af7618d9c565b60200260200101516040516020016141129190619090565b60606000615b448560408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600080825260209182015281518083019092528651825280870190820152909150615b7b9082905b906171d2565b15615cd8576000615bf882615bf284615bec615bbe8a60408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6040805180820182526000808252602091820152815180830190925282518252918201519181019190915290565b906171f9565b9061725b565b604080518082018252600181527f0a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152909150615c5c9082906171d2565b15615cc657604080518082018252600181527f0a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152615cc3905b82906172e0565b90505b615ccf81617306565b9250505061403f565b8215615cf157848460405160200161411292919061927c565b505060408051602081019091526000815261403f565b509392505050565b6000808251602084016000f09392505050565b8160a0015115615d3157505050565b6000615d3e84848461736f565b90506000615d4b82615940565b602081015181519192509060030b158015615de75750604080518082018252600781527f535543434553530000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152615de790604080518082018252600080825260209182015281518083019092528451825280850190820152615b75565b15615df457505050505050565b60408201515115615e145781604001516040516020016141129190619323565b806040516020016141129190619381565b60606000615e5a8360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600481527f2e736f6c0000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152909150615ebf905b829061648d565b15615f2e57604080518082018252600481527f2e736f6c000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261403f90615f2990839061790a565b617306565b604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152615f90905b8290617994565b60010361605d57604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152615ff690615cbc565b50604080518082018252600181527f3a000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261403f90615f29905b83906172e0565b604080518082018252600581527f2e6a736f6e000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526160bc90615eb8565b156161f357604080518082018252600181527f2f00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820181905284518086019095529251845283015290616124908390617a2e565b9050600081600183516161379190618840565b8151811061614757616147618d9c565b602002602001015190506161ea615f296161bd6040518060400160405280600581526020017f2e6a736f6e00000000000000000000000000000000000000000000000000000081525060408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6040805180820182526000808252602091820152815180830190925285518252808601908201529061790a565b95945050505050565b8260405160200161411291906193ec565b50919050565b6060600061623f8360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600481527f2e736f6c00000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201529091506162a190615eb8565b156162af5761403f81617306565b604080518082018252600181527f3a000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261630e90615f89565b60010361637857604080518082018252600181527f3a000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261403f90615f2990616056565b604080518082018252600581527f2e6a736f6e000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526163d790615eb8565b156161f357604080518082018252600181527f2f0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082018190528451808601909552925184528301529061643f908390617a2e565b905060018151111561647b57806002825161645a9190618840565b8151811061646a5761646a618d9c565b602002602001015192505050919050565b508260405160200161411291906193ec565b8051825160009111156164a257506000613e8a565b815183516020850151600092916164b89161882d565b6164c29190618840565b9050826020015181036164d9576001915050613e8a565b82516020840151819020912014905092915050565b606060006164fb83617ad3565b600101905060008167ffffffffffffffff81111561651b5761651b6186a8565b6040519080825280601f01601f191660200182016040528015616545576020820181803683370190505b5090508181016020015b600019017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a850494508461654f57509392505050565b604081810151815180830183526000808252602091820181905283518085018552835181529282018383015283518085018552600a81527f554e4c4943454e534544000000000000000000000000000000000000000000008184019081528551808701875283815284019290925284518086019095525184529083015260609161661a905b8290617bb5565b1561665a57505060408051808201909152600481527f4e6f6e65000000000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600981527f556e6c6963656e73650000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526166b990616613565b156166f957505060408051808201909152600981527f556e6c6963656e736500000000000000000000000000000000000000000000006020820152919050565b604080518082018252600381527f4d495400000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261675890616613565b1561679857505060408051808201909152600381527f4d495400000000000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f47504c2d322e302d6f6e6c790000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526167f790616613565b8061685c5750604080518082018252601081527f47504c2d322e302d6f722d6c61746572000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261685c90616613565b1561689c57505060408051808201909152600981527f474e552047504c763200000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f47504c2d332e302d6f6e6c790000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526168fb90616613565b806169605750604080518082018252601081527f47504c2d332e302d6f722d6c61746572000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261696090616613565b156169a057505060408051808201909152600981527f474e552047504c763300000000000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4c47504c2d322e312d6f6e6c7900000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526169ff90616613565b80616a645750604080518082018252601181527f4c47504c2d322e312d6f722d6c6174657200000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616a6490616613565b15616aa457505060408051808201909152600c81527f474e55204c47504c76322e3100000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4c47504c2d332e302d6f6e6c790000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616b0390616613565b80616b685750604080518082018252601181527f4c47504c2d332e302d6f722d6c6174657200000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616b6890616613565b15616ba857505060408051808201909152600a81527f474e55204c47504c7633000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f4253442d322d436c61757365000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616c0790616613565b15616c4757505060408051808201909152600c81527f4253442d322d436c6175736500000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f4253442d332d436c61757365000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616ca690616613565b15616ce657505060408051808201909152600c81527f4253442d332d436c6175736500000000000000000000000000000000000000006020820152919050565b604080518082018252600781527f4d504c2d322e300000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616d4590616613565b15616d8557505060408051808201909152600781527f4d504c2d322e30000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600781527f4f534c2d332e300000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616de490616613565b15616e2457505060408051808201909152600781527f4f534c2d332e30000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600a81527f4170616368652d322e300000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616e8390616613565b15616ec357505060408051808201909152600a81527f4170616368652d322e30000000000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4147504c2d332e302d6f6e6c790000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616f2290616613565b80616f875750604080518082018252601181527f4147504c2d332e302d6f722d6c6174657200000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616f8790616613565b15616fc757505060408051808201909152600a81527f474e55204147504c7633000000000000000000000000000000000000000000006020820152919050565b604080518082018252600881527f4255534c2d312e310000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261702690616613565b1561706657505060408051808201909152600781527f42534c20312e31000000000000000000000000000000000000000000000000006020820152919050565b6040808401518451915161411292906020016194ca565b60608060005b8451811015617108578185828151811061709f5761709f618d9c565b60200260200101516040516020016170b8929190618983565b6040516020818303038152906040529150600185516170d79190618840565b811461710057816040516020016170ee9190619633565b60405160208183030381529060405291505b600101617083565b5060408051600380825260808201909252600091816020015b6060815260200190600190039081617121579050509050838160008151811061714c5761714c618d9c565b60200260200101819052506040518060400160405280600281526020017f2d63000000000000000000000000000000000000000000000000000000000000815250816001815181106171a0576171a0618d9c565b602002602001018190525081816002815181106171bf576171bf618d9c565b6020908102919091010152949350505050565b60208083015183518351928401516000936171f09291849190617bc9565b14159392505050565b6040805180820190915260008082526020820152600061722b8460000151856020015185600001518660200151617cda565b905083602001518161723d9190618840565b8451859061724c908390618840565b90525060208401525090919050565b6040805180820190915260008082526020820152815183511015617280575081613e8a565b60208083015190840151600191146172a75750815160208481015190840151829020919020145b80156172d8578251845185906172be908390618840565b90525082516020850180516172d490839061882d565b9052505b509192915050565b60408051808201909152600080825260208201526172ff838383617dfa565b5092915050565b60606000826000015167ffffffffffffffff811115617327576173276186a8565b6040519080825280601f01601f191660200182016040528015617351576020820181803683370190505b50905060006020820190506172ff8185602001518660000151617ea5565b6060600061737b614338565b6040805160ff808252612000820190925291925060009190816020015b606081526020019060019003908161739857905050905060006040518060400160405280600381526020017f6e707800000000000000000000000000000000000000000000000000000000008152508282806173f390618f09565b935060ff168151811061740857617408618d9c565b60200260200101819052506040518060400160405280600781526020017f5e312e33322e33000000000000000000000000000000000000000000000000008152506040516020016174599190619674565b60405160208183030381529060405282828061747490618f09565b935060ff168151811061748957617489618d9c565b60200260200101819052506040518060400160405280600881526020017f76616c69646174650000000000000000000000000000000000000000000000008152508282806174d690618f09565b935060ff16815181106174eb576174eb618d9c565b6020026020010181905250826040516020016175079190618e37565b60405160208183030381529060405282828061752290618f09565b935060ff168151811061753757617537618d9c565b60200260200101819052506040518060400160405280600a81526020017f2d2d636f6e74726163740000000000000000000000000000000000000000000081525082828061758490618f09565b935060ff168151811061759957617599618d9c565b60200260200101819052506175ae8784617f1f565b82826175b981618f09565b935060ff16815181106175ce576175ce618d9c565b60209081029190910101528551511561767a5760408051808201909152600b81527f2d2d7265666572656e63650000000000000000000000000000000000000000006020820152828261762081618f09565b935060ff168151811061763557617635618d9c565b602002602001018190525061764e866000015184617f1f565b828261765981618f09565b935060ff168151811061766e5761766e618d9c565b60200260200101819052505b8560800151156176e85760408051808201909152601881527f2d2d756e73616665536b697053746f72616765436865636b0000000000000000602082015282826176c381618f09565b935060ff16815181106176d8576176d8618d9c565b602002602001018190525061774e565b841561774e5760408051808201909152601281527f2d2d726571756972655265666572656e636500000000000000000000000000006020820152828261772d81618f09565b935060ff168151811061774257617742618d9c565b60200260200101819052505b604086015151156177ea5760408051808201909152600d81527f2d2d756e73616665416c6c6f77000000000000000000000000000000000000006020820152828261779881618f09565b935060ff16815181106177ad576177ad618d9c565b602002602001018190525085604001518282806177c990618f09565b935060ff16815181106177de576177de618d9c565b60200260200101819052505b8560600151156178545760408051808201909152601481527f2d2d756e73616665416c6c6f7752656e616d65730000000000000000000000006020820152828261783381618f09565b935060ff168151811061784857617848618d9c565b60200260200101819052505b60008160ff1667ffffffffffffffff811115617872576178726186a8565b6040519080825280602002602001820160405280156178a557816020015b60608152602001906001900390816178905790505b50905060005b8260ff168160ff1610156178fe57838160ff16815181106178ce576178ce618d9c565b6020026020010151828260ff16815181106178eb576178eb618d9c565b60209081029190910101526001016178ab565b50979650505050505050565b604080518082019091526000808252602082015281518351101561792f575081613e8a565b815183516020850151600092916179459161882d565b61794f9190618840565b60208401519091506001908214617970575082516020840151819020908220145b801561798b57835185518690617987908390618840565b9052505b50929392505050565b60008082600001516179b88560000151866020015186600001518760200151617cda565b6179c2919061882d565b90505b835160208501516179d6919061882d565b81116172ff57816179e6816196b9565b9250508260000151617a1d856020015183617a019190618840565b8651617a0d9190618840565b8386600001518760200151617cda565b617a27919061882d565b90506179c5565b60606000617a3c8484617994565b617a4790600161882d565b67ffffffffffffffff811115617a5f57617a5f6186a8565b604051908082528060200260200182016040528015617a9257816020015b6060815260200190600190039081617a7d5790505b50905060005b8151811015615d0757617aae615f2986866172e0565b828281518110617ac057617ac0618d9c565b6020908102919091010152600101617a98565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310617b1c577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310617b48576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc100008310617b6657662386f26fc10000830492506010015b6305f5e1008310617b7e576305f5e100830492506008015b6127108310617b9257612710830492506004015b60648310617ba4576064830492506002015b600a8310613e8a5760010192915050565b6000617bc18383617f5f565b159392505050565b600080858411617cd05760208411617c7c5760008415617c14576001617bf0866020618840565b617bfb9060086196d3565b617c069060026197d1565b617c109190618840565b1990505b8351811685617c23898961882d565b617c2d9190618840565b805190935082165b818114617c6757878411617c4f5787945050505050615938565b83617c59816197dd565b945050828451169050617c35565b617c71878561882d565b945050505050615938565b838320617c898588618840565b617c93908761882d565b91505b858210617cce57848220808203617cbb57617cb1868461882d565b9350505050615938565b617cc6600184618840565b925050617c96565b505b5092949350505050565b60008381868511617de55760208511617d945760008515617d26576001617d02876020618840565b617d0d9060086196d3565b617d189060026197d1565b617d229190618840565b1990505b84518116600087617d378b8b61882d565b617d419190618840565b855190915083165b828114617d8657818610617d6e57617d618b8b61882d565b9650505050505050615938565b85617d78816196b9565b965050838651169050617d49565b859650505050505050615938565b508383206000905b617da68689618840565b8211617de357858320808203617dc25783945050505050615938565b617dcd60018561882d565b9350508180617ddb906196b9565b925050617d9c565b505b617def878761882d565b979650505050505050565b60408051808201909152600080825260208201526000617e2c8560000151866020015186600001518760200151617cda565b602080870180519186019190915251909150617e489082618840565b835284516020860151617e5b919061882d565b8103617e6a5760008552617e9c565b83518351617e78919061882d565b85518690617e87908390618840565b9052508351617e96908261882d565b60208601525b50909392505050565b60208110617edd5781518352617ebc60208461882d565b9250617ec960208361882d565b9150617ed6602082618840565b9050617ea5565b6000198115617f0c576001617ef3836020618840565b617eff906101006197d1565b617f099190618840565b90505b9151835183169219169190911790915250565b60606000617f2d848461440b565b8051602080830151604051939450617f47939091016197f4565b60405160208183030381529060405291505092915050565b8151815160009190811115617f72575081515b6020808501519084015160005b8381101561802b5782518251808214617ffb576000196020871015617fda57600184617fac896020618840565b617fb6919061882d565b617fc19060086196d3565b617fcc9060026197d1565b617fd69190618840565b1990505b8181168382168181039114617ff8579750613e8a9650505050505050565b50505b61800660208661882d565b945061801360208561882d565b93505050602081618024919061882d565b9050617f7f565b5084518651614ab9919061984c565b610b678061986d83390190565b61106f8061a3d483390190565b611bb98061b44383390190565b6040518060e001604052806060815260200160608152602001606081526020016000151581526020016000151581526020016000151581526020016180a46180a9565b905290565b604051806101000160405280600015158152602001600015158152602001606081526020016000801916815260200160608152602001606081526020016000151581526020016180a46040518060800160405280600081526020016000815260200160008152602001600081525090565b602080825282518282018190526000918401906040840190835b8181101561815b5783516001600160a01b0316835260209384019390920191600101618134565b509095945050505050565b60005b83811015618181578181015183820152602001618169565b50506000910152565b600081518084526181a2816020860160208601618166565b601f01601f19169290920160200192915050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b828110156182b2577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452815180516001600160a01b03168652602090810151604082880181905281519088018190529101906060600582901b88018101919088019060005b81811015618298577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa08a850301835261828284865161818a565b6020958601959094509290920191600101618248565b5091975050506020948501949290920191506001016181de565b50929695505050505050565b600081518084526020840193506020830160005b828110156183125781517fffffffff00000000000000000000000000000000000000000000000000000000168652602095860195909101906001016182d2565b5093949350505050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b828110156182b2577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08786030184528151805160408752618388604088018261818a565b90506020820151915086810360208801526183a381836182be565b965050506020938401939190910190600101618344565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b828110156182b2577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc087860301845261841c85835161818a565b945060209384019391909101906001016183e2565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b828110156182b2577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc087860301845281516001600160a01b03815116865260208101519050604060208701526184b260408701826182be565b9550506020938401939190910190600101618459565b80516001600160a01b03811681146184df57600080fd5b919050565b6000602082840312156184f657600080fd5b61403f826184c8565b610100815260056101008201527f544f4b454e000000000000000000000000000000000000000000000000000000610120820152610140602082015260036101408201527f544b4e000000000000000000000000000000000000000000000000000000000061016082015260006101808201905060ff88166040830152866060830152600386106185b9577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b8560808301528460a08301526185da60c08301856001600160a01b03169052565b6001600160a01b03831660e0830152979650505050505050565b60006020828403121561860657600080fd5b8151801515811461403f57600080fd5b60006020828403121561862857600080fd5b5051919050565b600181811c9082168061864357607f821691505b602082108103616204577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000806040838503121561868f57600080fd5b618698836184c8565b6020939093015192949293505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040516060810167ffffffffffffffff811182821017156186fa576186fa6186a8565b60405290565b60008067ffffffffffffffff84111561871b5761871b6186a8565b50604051601f19601f85018116603f0116810181811067ffffffffffffffff8211171561874a5761874a6186a8565b60405283815290508082840185101561876257600080fd5b615d07846020830185618166565b60006020828403121561878257600080fd5b815167ffffffffffffffff81111561879957600080fd5b8201601f810184136187aa57600080fd5b613e8684825160208401618700565b6000602082840312156187cb57600080fd5b815160ff8116811461403f57600080fd5b6040815260006187ef604083018561818a565b90508260208301529392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b80820180821115613e8a57613e8a6187fe565b81810381811115613e8a57613e8a6187fe565b604081526000618866604083018561818a565b828103602084015261403b818561818a565b6001600160a01b0383168152604060208201526000615938604083018461818a565b7f4661696c656420746f206465706c6f7920636f6e7472616374200000000000008152600083516188d281601a850160208801618166565b7f3a20000000000000000000000000000000000000000000000000000000000000601a91840191820152835161890f81601c840160208801618166565b01601c01949350505050565b60208152600061403f602083018461818a565b600082601f83011261893f57600080fd5b61403f83835160208501618700565b60006020828403121561896057600080fd5b815167ffffffffffffffff81111561897757600080fd5b613e868482850161892e565b60008351618995818460208801618166565b8351908301906189a9818360208801618166565b01949350505050565b7f4661696c656420746f206465706c6f7920636f6e7472616374200000000000008152600083516189ea81601a850160208801618166565b7f207573696e6720636f6e7374727563746f722064617461202200000000000000601a918401918201528351618a27816033840160208801618166565b7f220000000000000000000000000000000000000000000000000000000000000060339290910191820152603401949350505050565b60408152600b60408201527f464f554e4452595f4f5554000000000000000000000000000000000000000000606082015260806020820152600061403f608083018461818a565b60008551618ab6818460208a01618166565b7f2f000000000000000000000000000000000000000000000000000000000000009083019081528551618af0816001840160208a01618166565b7f2f00000000000000000000000000000000000000000000000000000000000000600192909101918201528451618b2e816002840160208901618166565b6001818301019150507f2f0000000000000000000000000000000000000000000000000000000000000060018201528351618b70816002840160208801618166565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600292909101918201526007019695505050505050565b604081526000618bbb604083018461818a565b8281036020840152600481527f2e6173740000000000000000000000000000000000000000000000000000000060208201526040810191505092915050565b7f436f756c64206e6f742066696e642041535420696e2061727469666163742000815260008251618c3281601f850160208701618166565b7f2e205365742060617374203d20747275656020696e20666f756e6472792e746f601f9390910192830152507f6d6c000000000000000000000000000000000000000000000000000000000000603f820152604101919050565b604081526000618c9f604083018461818a565b8281036020840152601181527f2e6173742e6162736f6c7574655061746800000000000000000000000000000060208201526040810191505092915050565b604081526000618cf1604083018461818a565b8281036020840152600c81527f2e6173742e6c6963656e7365000000000000000000000000000000000000000060208201526040810191505092915050565b7f2e6d657461646174612e736f75726365732e5b27000000000000000000000000815260008251618d68816014850160208701618166565b7f275d2e6b656363616b32353600000000000000000000000000000000000000006014939091019283015250602001919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f2200000000000000000000000000000000000000000000000000000000000000815260008251618e03816001850160208701618166565b7f22000000000000000000000000000000000000000000000000000000000000006001939091019283015250600201919050565b60008251618e49818460208701618166565b7f2f6275696c642d696e666f000000000000000000000000000000000000000000920191825250600b01919050565b7f436f756c64206e6f742066696e64206275696c642d696e666f2066696c65207781527f697468206d61746368696e6720736f7572636520636f6465206861736820666f60208201527f7220636f6e747261637420000000000000000000000000000000000000000000604082015260008251618efc81604b850160208701618166565b91909101604b0192915050565b600060ff821660ff8103618f1f57618f1f6187fe565b60010192915050565b7f406f70656e7a657070656c696e2f646566656e6465722d6465706c6f792d636c81527f69656e742d636c69400000000000000000000000000000000000000000000000602082015260008251618f86816029850160208701618166565b9190910160290192915050565b60408152601660408201527f4f50454e5a455050454c494e5f424153485f5041544800000000000000000000606082015260806020820152600061403f608083018461818a565b600060208284031215618fec57600080fd5b815167ffffffffffffffff81111561900357600080fd5b82016060818503121561901557600080fd5b61901d6186d7565b81518060030b811461902e57600080fd5b8152602082015167ffffffffffffffff81111561904a57600080fd5b6190568682850161892e565b602083015250604082015167ffffffffffffffff81111561907657600080fd5b6190828682850161892e565b604083015250949350505050565b7f4661696c656420746f2072756e206261736820636f6d6d616e6420776974682081527f22000000000000000000000000000000000000000000000000000000000000006020820152600082516190ee816021850160208701618166565b7f222e20496620796f7520617265207573696e672057696e646f77732c2073657460219390910192830152507f20746865204f50454e5a455050454c494e5f424153485f5041544820656e766960418201527f726f6e6d656e74207661726961626c6520746f207468652066756c6c7920717560618201527f616c69666965642070617468206f66207468652062617368206578656375746160818201527f626c652e20466f72206578616d706c652c20696620796f75206172652075736960a18201527f6e672047697420666f722057696e646f77732c206164642074686520666f6c6c60c18201527f6f77696e67206c696e6520696e20746865202e656e762066696c65206f66207960e18201527f6f75722070726f6a65637420287573696e6720666f727761726420736c6173686101018201527f6573293a0a4f50454e5a455050454c494e5f424153485f504154483d22433a2f6101218201527f50726f6772616d2046696c65732f4769742f62696e2f6261736822000000000061014182015261015c01919050565b7f4661696c656420746f2066696e64206c696e652077697468207072656669782081527f27000000000000000000000000000000000000000000000000000000000000006020820152600083516192da816021850160208801618166565b7f2720696e206f75747075743a2000000000000000000000000000000000000000602191840191820152835161931781602e840160208801618166565b01602e01949350505050565b7f4661696c656420746f2072756e2075706772616465207361666574792076616c81527f69646174696f6e3a200000000000000000000000000000000000000000000000602082015260008251618f86816029850160208701618166565b7f55706772616465207361666574792076616c69646174696f6e206661696c656481527f3a0a0000000000000000000000000000000000000000000000000000000000006020820152600082516193df816022850160208701618166565b9190910160220192915050565b7f436f6e7472616374206e616d652000000000000000000000000000000000000081526000825161942481600e850160208701618166565b7f206d75737420626520696e2074686520666f726d6174204d79436f6e74726163600e9390910192830152507f742e736f6c3a4d79436f6e7472616374206f72204d79436f6e74726163742e73602e8201527f6f6c206f72206f75742f4d79436f6e74726163742e736f6c2f4d79436f6e7472604e8201527f6163742e6a736f6e000000000000000000000000000000000000000000000000606e820152607601919050565b7f53504458206c6963656e7365206964656e746966696572200000000000000000815260008351619502816018850160208801618166565b7f20696e2000000000000000000000000000000000000000000000000000000000601891840191820152835161953f81601c840160208801618166565b7f20646f6573206e6f74206c6f6f6b206c696b65206120737570706f7274656420601c92909101918201527f6c6963656e736520666f7220626c6f636b206578706c6f726572207665726966603c8201527f69636174696f6e2e205573652074686520606c6963656e73655479706560206f605c8201527f7074696f6e20746f20737065636966792061206c6963656e736520747970652c607c8201527f206f7220736574207468652060736b69704c6963656e73655479706560206f70609c8201527f74696f6e20746f2060747275656020746f20736b69702e00000000000000000060bc82015260d301949350505050565b60008251619645818460208701618166565b7f2000000000000000000000000000000000000000000000000000000000000000920191825250600101919050565b7f406f70656e7a657070656c696e2f75706772616465732d636f726540000000008152600082516196ac81601c850160208701618166565b91909101601c0192915050565b600060001982036196cc576196cc6187fe565b5060010190565b8082028115828204841417613e8a57613e8a6187fe565b6001815b600184111561972557808504811115619709576197096187fe565b600184161561971757908102905b60019390931c9280026196ee565b935093915050565b60008261973c57506001613e8a565b8161974957506000613e8a565b816001811461975f576002811461976957619785565b6001915050613e8a565b60ff84111561977a5761977a6187fe565b50506001821b613e8a565b5060208310610133831016604e8410600b84101617156197a8575081810a613e8a565b6197b560001984846196ea565b80600019048211156197c9576197c96187fe565b029392505050565b600061403f838361972d565b6000816197ec576197ec6187fe565b506000190190565b60008351619806818460208801618166565b7f3a000000000000000000000000000000000000000000000000000000000000009083019081528351619840816001840160208801618166565b01600101949350505050565b81810360008312801583831316838312821617156172ff576172ff6187fe56fe60c0604052600d60809081526c2bb930b83832b21022ba3432b960991b60a05260009061002c9082610114565b506040805180820190915260048152630ae8aa8960e31b60208201526001906100559082610114565b506002805460ff1916601217905534801561006f57600080fd5b506101d2565b634e487b7160e01b600052604160045260246000fd5b600181811c9082168061009f57607f821691505b6020821081036100bf57634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111561010f57806000526020600020601f840160051c810160208510156100ec5750805b601f840160051c820191505b8181101561010c57600081556001016100f8565b50505b505050565b81516001600160401b0381111561012d5761012d610075565b6101418161013b845461008b565b846100c5565b6020601f821160018114610175576000831561015d5750848201515b600019600385901b1c1916600184901b17845561010c565b600084815260208120601f198516915b828110156101a55787850151825560209485019460019092019101610185565b50848210156101c35786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b610986806101e16000396000f3fe6080604052600436106100c05760003560e01c8063313ce56711610074578063a9059cbb1161004e578063a9059cbb146101fa578063d0e30db01461021a578063dd62ed3e1461022257600080fd5b8063313ce5671461018c57806370a08231146101b857806395d89b41146101e557600080fd5b806318160ddd116100a557806318160ddd1461012f57806323b872dd1461014c5780632e1a7d4d1461016c57600080fd5b806306fdde03146100d4578063095ea7b3146100ff57600080fd5b366100cf576100cd61025a565b005b600080fd5b3480156100e057600080fd5b506100e96102b5565b6040516100f69190610745565b60405180910390f35b34801561010b57600080fd5b5061011f61011a3660046107da565b610343565b60405190151581526020016100f6565b34801561013b57600080fd5b50475b6040519081526020016100f6565b34801561015857600080fd5b5061011f610167366004610804565b6103bd565b34801561017857600080fd5b506100cd610187366004610841565b610647565b34801561019857600080fd5b506002546101a69060ff1681565b60405160ff90911681526020016100f6565b3480156101c457600080fd5b5061013e6101d336600461085a565b60036020526000908152604090205481565b3480156101f157600080fd5b506100e9610724565b34801561020657600080fd5b5061011f6102153660046107da565b610731565b6100cd61025a565b34801561022e57600080fd5b5061013e61023d366004610875565b600460209081526000928352604080842090915290825290205481565b33600090815260036020526040812080543492906102799084906108d7565b909155505060405134815233907fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c9060200160405180910390a2565b600080546102c2906108ea565b80601f01602080910402602001604051908101604052809291908181526020018280546102ee906108ea565b801561033b5780601f106103105761010080835404028352916020019161033b565b820191906000526020600020905b81548152906001019060200180831161031e57829003601f168201915b505050505081565b33600081815260046020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925906103ab9086815260200190565b60405180910390a35060015b92915050565b73ffffffffffffffffffffffffffffffffffffffff831660009081526003602052604081205482111561042b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600060248201526044015b60405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff841633148015906104a1575073ffffffffffffffffffffffffffffffffffffffff841660009081526004602090815260408083203384529091529020547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff14155b156105605773ffffffffffffffffffffffffffffffffffffffff8416600090815260046020908152604080832033845290915290205482111561051a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526020600482015260006024820152604401610422565b73ffffffffffffffffffffffffffffffffffffffff841660009081526004602090815260408083203384529091528120805484929061055a90849061093d565b90915550505b73ffffffffffffffffffffffffffffffffffffffff84166000908152600360205260408120805484929061059590849061093d565b909155505073ffffffffffffffffffffffffffffffffffffffff8316600090815260036020526040812080548492906105cf9084906108d7565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161063591815260200190565b60405180910390a35060019392505050565b3360009081526003602052604090205481111561069a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526020600482015260006024820152604401610422565b33600090815260036020526040812080548392906106b990849061093d565b9091555050604051339082156108fc029083906000818181858888f193505050501580156106eb573d6000803e3d6000fd5b5060405181815233907f7fcf532c15f0a6db0bd6d0e038bea71d30d808c7d98cb3bf7268a95bf5081b659060200160405180910390a250565b600180546102c2906108ea565b600061073e3384846103bd565b9392505050565b602081526000825180602084015260005b818110156107735760208186018101516040868401015201610756565b5060006040828501015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011684010191505092915050565b803573ffffffffffffffffffffffffffffffffffffffff811681146107d557600080fd5b919050565b600080604083850312156107ed57600080fd5b6107f6836107b1565b946020939093013593505050565b60008060006060848603121561081957600080fd5b610822846107b1565b9250610830602085016107b1565b929592945050506040919091013590565b60006020828403121561085357600080fd5b5035919050565b60006020828403121561086c57600080fd5b61073e826107b1565b6000806040838503121561088857600080fd5b610891836107b1565b915061089f602084016107b1565b90509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b808201808211156103b7576103b76108a8565b600181811c908216806108fe57607f821691505b602082108103610937577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b818103818111156103b7576103b76108a856fea264697066735822122008d7fc4e09519c5dd9f356b03596f6829a151d0bc7682533f9ceab4e459f5ee264736f6c634300081a003360c060405234801561001057600080fd5b5060405161106f38038061106f83398101604081905261002f916100db565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461006357604051632b2add3d60e01b815260040160405180910390fd5b600380546001600160a01b0319166001600160a01b0385811691909117909155828116608052811660a0526040517f80699e81136d69cb8367ad52a994e25c722a86da654b561d0c14b61a777e7ac590600090a150505061011e565b80516001600160a01b03811681146100d657600080fd5b919050565b6000806000606084860312156100f057600080fd5b6100f9846100bf565b9250610107602085016100bf565b9150610115604085016100bf565b90509250925092565b60805160a051610f2561014a60003960006101e50152600081816102b9015261045b0152610f256000f3fe608060405234801561001057600080fd5b50600436106100f55760003560e01c806397770dff11610097578063c63585cc11610066578063c63585cc14610273578063d7fd7afb14610286578063d936a012146102b4578063ee2815ba146102db57600080fd5b806397770dff1461021a578063a7cb05071461022d578063c39aca3714610240578063c62178ac1461025357600080fd5b8063513a9c05116100d3578063513a9c051461018a578063569541b9146101c0578063842da36d146101e057806391dd645f1461020757600080fd5b80630be15547146100fa5780631f0e251b1461015a5780633ce4a5bc1461016f575b600080fd5b610130610108366004610bd1565b60016020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b61016d610168366004610c13565b6102ee565b005b61013073735b14bb79463307aacbed86daf3322b1e6226ab81565b610130610198366004610bd1565b60026020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b6003546101309073ffffffffffffffffffffffffffffffffffffffff1681565b6101307f000000000000000000000000000000000000000000000000000000000000000081565b61016d610215366004610c35565b610402565b61016d610228366004610c13565b610526565b61016d61023b366004610c61565b610633565b61016d61024e366004610c83565b6106ce565b6004546101309073ffffffffffffffffffffffffffffffffffffffff1681565b610130610281366004610d53565b6108cd565b6102a6610294366004610bd1565b60006020819052908152604090205481565b604051908152602001610151565b6101307f000000000000000000000000000000000000000000000000000000000000000081565b61016d6102e9366004610c35565b610a02565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461033b576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116610388576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600480547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527f3ade88e3922d64780e1bf4460d364c2970b69da813f9c0c07a1c187b5647636c906020015b60405180910390a150565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461044f576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600354600090610497907f00000000000000000000000000000000000000000000000000000000000000009073ffffffffffffffffffffffffffffffffffffffff16846108cd565b60008481526002602090815260409182902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff85169081179091558251878152918201529192507f0ecec485166da6139b13bb7e033e9446e2d35348e80ebf1180d4afe2dba1704e910160405180910390a1505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610573576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff81166105c0576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527fdba79d534382d1a8ae108e4c8ecb27c6ae42ab8b91d44eedf88bd329f3868d5e906020016103f7565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610680576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000828152602081815260409182902083905581518481529081018390527f49f492222906ac486c3c1401fa545626df1f0c0e5a77a05597ea2ed66af9850d91015b60405180910390a15050565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461071b576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff831673735b14bb79463307aacbed86daf3322b1e6226ab1480610768575073ffffffffffffffffffffffffffffffffffffffff831630145b1561079f576040517f82d5d76a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f47e7ef2400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152602482018690528616906347e7ef24906044016020604051808303816000875af1158015610814573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108389190610d96565b506040517fde43156e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84169063de43156e906108939089908990899088908890600401610e01565b600060405180830381600087803b1580156108ad57600080fd5b505af11580156108c1573d6000803e3d6000fd5b50505050505050505050565b60008060006108dc8585610ad3565b6040517fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606084811b8216602084015283901b16603482015291935091508690604801604051602081830303815290604052805190602001206040516020016109c29291907fff00000000000000000000000000000000000000000000000000000000000000815260609290921b7fffffffffffffffffffffffffffffffffffffffff00000000000000000000000016600183015260158201527f96e8ac4277198ff8b6f785478aa9a39f403cb768dd02cbee326c3e7da348845f603582015260550190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291905280516020909101209695505050505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610a4f576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008281526001602090815260409182902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff85169081179091558251858152918201527fd1b36d30f6248e97c473b4d1348ca164a4ef6759022f54a58ec200326c39c45d91016106c2565b6000808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603610b3b576040517fcb1e7cfe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1610610b75578284610b78565b83835b909250905073ffffffffffffffffffffffffffffffffffffffff8216610bca576040517f78b507da00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b9250929050565b600060208284031215610be357600080fd5b5035919050565b803573ffffffffffffffffffffffffffffffffffffffff81168114610c0e57600080fd5b919050565b600060208284031215610c2557600080fd5b610c2e82610bea565b9392505050565b60008060408385031215610c4857600080fd5b82359150610c5860208401610bea565b90509250929050565b60008060408385031215610c7457600080fd5b50508035926020909101359150565b60008060008060008060a08789031215610c9c57600080fd5b863567ffffffffffffffff811115610cb357600080fd5b87016060818a031215610cc557600080fd5b9550610cd360208801610bea565b945060408701359350610ce860608801610bea565b9250608087013567ffffffffffffffff811115610d0457600080fd5b8701601f81018913610d1557600080fd5b803567ffffffffffffffff811115610d2c57600080fd5b896020828401011115610d3e57600080fd5b60208201935080925050509295509295509295565b600080600060608486031215610d6857600080fd5b610d7184610bea565b9250610d7f60208501610bea565b9150610d8d60408501610bea565b90509250925092565b600060208284031215610da857600080fd5b81518015158114610c2e57600080fd5b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b60808152600086357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1883603018112610e3957600080fd5b870160208101903567ffffffffffffffff811115610e5657600080fd5b803603821315610e6557600080fd5b60606080850152610e7a60e085018284610db8565b91505073ffffffffffffffffffffffffffffffffffffffff610e9e60208a01610bea565b1660a0840152604088013560c084015273ffffffffffffffffffffffffffffffffffffffff871660208401528560408401528281036060840152610ee3818587610db8565b9897505050505050505056fea2646970667358221220431a07541a491b54259bdf8fcd05ade6751bfbbf0e72e605f27325b56d7d464f64736f6c634300081a003360e060405234801561001057600080fd5b50604051611bb9380380611bb983398101604081905261002f9161020e565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461006357604051632b2add3d60e01b815260040160405180910390fd5b6001600160a01b038216158061008057506001600160a01b038116155b1561009e5760405163d92e233d60e01b815260040160405180910390fd5b60066100aa8982610360565b5060076100b78882610360565b5060ff861660c05260808590528360028111156100d6576100d661041e565b60a08160028111156100ea576100ea61041e565b905250600192909255600080546001600160a01b039283166001600160a01b03199182161790915560088054929093169116179055506104349350505050565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261015157600080fd5b81516001600160401b0381111561016a5761016a61012a565b604051601f8201601f19908116603f011681016001600160401b03811182821017156101985761019861012a565b6040528181528382016020018510156101b057600080fd5b60005b828110156101cf576020818601810151838301820152016101b3565b506000918101602001919091529392505050565b8051600381106101f257600080fd5b919050565b80516001600160a01b03811681146101f257600080fd5b600080600080600080600080610100898b03121561022b57600080fd5b88516001600160401b0381111561024157600080fd5b61024d8b828c01610140565b60208b015190995090506001600160401b0381111561026b57600080fd5b6102778b828c01610140565b975050604089015160ff8116811461028e57600080fd5b60608a015190965094506102a460808a016101e3565b60a08a015190945092506102ba60c08a016101f7565b91506102c860e08a016101f7565b90509295985092959890939650565b600181811c908216806102eb57607f821691505b60208210810361030b57634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111561035b57806000526020600020601f840160051c810160208510156103385750805b601f840160051c820191505b818110156103585760008155600101610344565b50505b505050565b81516001600160401b038111156103795761037961012a565b61038d8161038784546102d7565b84610311565b6020601f8211600181146103c157600083156103a95750848201515b600019600385901b1c1916600184901b178455610358565b600084815260208120601f198516915b828110156103f157878501518255602094850194600190920191016103d1565b508482101561040f5786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b634e487b7160e01b600052602160045260246000fd5b60805160a05160c05161174861047160003960006102170152600061033a0152600081816102eb01528181610ad70152610bdd01526117486000f3fe608060405234801561001057600080fd5b50600436106101985760003560e01c80638b851b95116100e3578063ccc775991161008c578063eddeb12311610066578063eddeb12314610431578063f2441b3214610444578063f687d12a1461046457600080fd5b8063ccc77599146103a4578063d9eeebed146103b7578063dd62ed3e146103eb57600080fd5b8063a9059cbb116100bd578063a9059cbb14610369578063c70126261461037c578063c835d7cc1461038f57600080fd5b80638b851b951461030d57806395d89b411461032d578063a3413d031461033557600080fd5b80633ce4a5bc116101455780634d8943bb1161011f5780634d8943bb146102a757806370a08231146102b057806385e1f4d0146102e657600080fd5b80633ce4a5bc1461024157806342966c681461028157806347e7ef241461029457600080fd5b806318160ddd1161017657806318160ddd146101f557806323b872dd146101fd578063313ce5671461021057600080fd5b806306fdde031461019d578063091d2788146101bb578063095ea7b3146101d2575b600080fd5b6101a5610477565b6040516101b29190611327565b60405180910390f35b6101c460015481565b6040519081526020016101b2565b6101e56101e0366004611366565b610509565b60405190151581526020016101b2565b6005546101c4565b6101e561020b366004611392565b610520565b60405160ff7f00000000000000000000000000000000000000000000000000000000000000001681526020016101b2565b61025c73735b14bb79463307aacbed86daf3322b1e6226ab81565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101b2565b6101e561028f3660046113d3565b6105b7565b6101e56102a2366004611366565b6105cb565b6101c460025481565b6101c46102be3660046113ec565b73ffffffffffffffffffffffffffffffffffffffff1660009081526003602052604090205490565b6101c47f000000000000000000000000000000000000000000000000000000000000000081565b60085461025c9073ffffffffffffffffffffffffffffffffffffffff1681565b6101a561071f565b61035c7f000000000000000000000000000000000000000000000000000000000000000081565b6040516101b29190611409565b6101e5610377366004611366565b61072e565b6101e561038a366004611479565b61073b565b6103a261039d3660046113ec565b61088a565b005b6103a26103b23660046113ec565b61099e565b6103bf610aab565b6040805173ffffffffffffffffffffffffffffffffffffffff90931683526020830191909152016101b2565b6101c46103f9366004611571565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260046020908152604080832093909416825291909152205490565b6103a261043f3660046113d3565b610cc9565b60005461025c9073ffffffffffffffffffffffffffffffffffffffff1681565b6103a26104723660046113d3565b610d4b565b606060068054610486906115aa565b80601f01602080910402602001604051908101604052809291908181526020018280546104b2906115aa565b80156104ff5780601f106104d4576101008083540402835291602001916104ff565b820191906000526020600020905b8154815290600101906020018083116104e257829003601f168201915b5050505050905090565b6000610516338484610dcd565b5060015b92915050565b600061052d848484610ed6565b73ffffffffffffffffffffffffffffffffffffffff8416600090815260046020908152604080832033845290915290205482811015610598576040517f10bad14700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6105ac85336105a7868561162c565b610dcd565b506001949350505050565b60006105c33383611091565b506001919050565b60003373735b14bb79463307aacbed86daf3322b1e6226ab14801590610609575060005473ffffffffffffffffffffffffffffffffffffffff163314155b801561062d575060085473ffffffffffffffffffffffffffffffffffffffff163314155b15610664576040517fddb5de5e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61066e83836111d3565b6040517f735b14bb79463307aacbed86daf3322b1e6226ab000000000000000000000000602082015273ffffffffffffffffffffffffffffffffffffffff8416907f67fc7bdaed5b0ec550d8706b87d60568ab70c6b781263c70101d54cd1564aab390603401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529082905261070e91869061163f565b60405180910390a250600192915050565b606060078054610486906115aa565b6000610516338484610ed6565b6000806000610748610aab565b6040517f23b872dd00000000000000000000000000000000000000000000000000000000815233600482015273735b14bb79463307aacbed86daf3322b1e6226ab602482015260448101829052919350915073ffffffffffffffffffffffffffffffffffffffff8316906323b872dd906064016020604051808303816000875af11580156107da573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107fe9190611661565b610834576040517f0a7cd6d600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61083e3385611091565b60025460405133917f9ffbffc04a397460ee1dbe8c9503e098090567d6b7f4b3c02a8617d800b6d9559161087791899189918791611683565b60405180910390a2506001949350505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab146108d7576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116610924576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527fd55614e962c5fd6ece71614f6348d702468a997a394dd5e5c1677950226d97ae906020015b60405180910390a150565b3373735b14bb79463307aacbed86daf3322b1e6226ab146109eb576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116610a38576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600880547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527f88815d964e380677e86d817e7d65dea59cb7b4c3b5b7a0c8ec7ea4a74f90a38790602001610993565b600080546040517f0be155470000000000000000000000000000000000000000000000000000000081527f000000000000000000000000000000000000000000000000000000000000000060048201528291829173ffffffffffffffffffffffffffffffffffffffff90911690630be1554790602401602060405180830381865afa158015610b3e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b6291906116b2565b905073ffffffffffffffffffffffffffffffffffffffff8116610bb1576040517f78fff39600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080546040517fd7fd7afb0000000000000000000000000000000000000000000000000000000081527f0000000000000000000000000000000000000000000000000000000000000000600482015273ffffffffffffffffffffffffffffffffffffffff9091169063d7fd7afb90602401602060405180830381865afa158015610c40573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c6491906116cf565b905080600003610ca0576040517fe661aed000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060025460015483610cb391906116e8565b610cbd91906116ff565b92959294509192505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610d16576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60028190556040518181527fef13af88e424b5d15f49c77758542c1938b08b8b95b91ed0751f98ba99000d8f90602001610993565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610d98576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018190556040518181527fff5788270f43bfc1ca41c503606d2594aa3023a1a7547de403a3e2f146a4a80a90602001610993565b73ffffffffffffffffffffffffffffffffffffffff8316610e1a576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216610e67576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff83811660008181526004602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8316610f23576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216610f70576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff831660009081526003602052604090205481811015610fd0576040517ffe382aa700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610fda828261162c565b73ffffffffffffffffffffffffffffffffffffffff808616600090815260036020526040808220939093559085168152908120805484929061101d9084906116ff565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161108391815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff82166110de576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff82166000908152600360205260409020548181101561113e576040517ffe382aa700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611148828261162c565b73ffffffffffffffffffffffffffffffffffffffff84166000908152600360205260408120919091556005805484929061118390849061162c565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90602001610ec9565b73ffffffffffffffffffffffffffffffffffffffff8216611220576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b806005600082825461123291906116ff565b909155505073ffffffffffffffffffffffffffffffffffffffff82166000908152600360205260408120805483929061126c9084906116ff565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6000815180845260005b818110156112e9576020818501810151868301820152016112cd565b5060006020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b60208152600061133a60208301846112c3565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff8116811461136357600080fd5b50565b6000806040838503121561137957600080fd5b823561138481611341565b946020939093013593505050565b6000806000606084860312156113a757600080fd5b83356113b281611341565b925060208401356113c281611341565b929592945050506040919091013590565b6000602082840312156113e557600080fd5b5035919050565b6000602082840312156113fe57600080fd5b813561133a81611341565b6020810160038310611444577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000806040838503121561148c57600080fd5b823567ffffffffffffffff8111156114a357600080fd5b8301601f810185136114b457600080fd5b803567ffffffffffffffff8111156114ce576114ce61144a565b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8501160116810181811067ffffffffffffffff8211171561153a5761153a61144a565b60405281815282820160200187101561155257600080fd5b8160208401602083013760006020928201830152969401359450505050565b6000806040838503121561158457600080fd5b823561158f81611341565b9150602083013561159f81611341565b809150509250929050565b600181811c908216806115be57607f821691505b6020821081036115f7577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8181038181111561051a5761051a6115fd565b60408152600061165260408301856112c3565b90508260208301529392505050565b60006020828403121561167357600080fd5b8151801515811461133a57600080fd5b60808152600061169660808301876112c3565b6020830195909552506040810192909252606090910152919050565b6000602082840312156116c457600080fd5b815161133a81611341565b6000602082840312156116e157600080fd5b5051919050565b808202811582820484141761051a5761051a6115fd565b8082018082111561051a5761051a6115fd56fea26469706673582212204013e39523742118b3f2227e145ee7e48176ba6aebead33c596dca2acb59a74c64736f6c634300081a0033a264697066735822122056131a2ae912b91a690b74aec19d11ad9b1d6ac86d0f45834162d9597f92369164736f6c634300081a0033", + ABI: "[{\"type\":\"function\",\"name\":\"IS_TEST\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeArtifacts\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedArtifacts_\",\"type\":\"string[]\",\"internalType\":\"string[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeContracts\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedContracts_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeSelectors\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedSelectors_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzSelector[]\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"selectors\",\"type\":\"bytes4[]\",\"internalType\":\"bytes4[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeSenders\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedSenders_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"failed\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"setUp\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"targetArtifactSelectors\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedArtifactSelectors_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzArtifactSelector[]\",\"components\":[{\"name\":\"artifact\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"selectors\",\"type\":\"bytes4[]\",\"internalType\":\"bytes4[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetArtifacts\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedArtifacts_\",\"type\":\"string[]\",\"internalType\":\"string[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetContracts\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedContracts_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetInterfaces\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedInterfaces_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzInterface[]\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"artifacts\",\"type\":\"string[]\",\"internalType\":\"string[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetSelectors\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedSelectors_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzSelector[]\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"selectors\",\"type\":\"bytes4[]\",\"internalType\":\"bytes4[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetSenders\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedSenders_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"testApproveFailsIfRecipientIsZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testBurn\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testBurnFailsIfNoBalance\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDeposit\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositFailsIfRecipientIsZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositFailsIfSenderIsNotGateway\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testTransfer\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testTransferFailsIfNoBalance\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testTransferFailsIfRecipientIsZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testTransferFrom\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testTransferFromFailsIfNoAllowance\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testTransferFromFailsIfNoBalance\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testTransferFromFailsIfRecipientIsZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testTransferFromFailsIfSenderIsZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testUpdateGasLimit\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testUpdateGasLimitFailsIfSenderIsNotFungible\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testUpdateGatewayAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testUpdateGatewayAddressFailsIfSenderIsNotFungible\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testUpdateGatewayAddressFailsIfZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testUpdateProtocolFlatFee\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testUpdateProtocolFlatFeeFailsIfSenderIsNotFungible\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testUpdateSystemContractAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testUpdateSystemContractAddressFailsIfSenderIsNotFungible\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testUpdateSystemContractAddressFailsIfZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdraw\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawFailsIfNoAllowance\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawFailsIfNoBalance\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawGasFee\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawGasFeeFailsIfGasCoinNotSetForChainId\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawGasFeeFailsIfGasPriceNotSetForChainId\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testZRC20BasicInfo\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"event\",\"name\":\"log\",\"inputs\":[{\"name\":\"\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_address\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_array\",\"inputs\":[{\"name\":\"val\",\"type\":\"uint256[]\",\"indexed\":false,\"internalType\":\"uint256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_array\",\"inputs\":[{\"name\":\"val\",\"type\":\"int256[]\",\"indexed\":false,\"internalType\":\"int256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_array\",\"inputs\":[{\"name\":\"val\",\"type\":\"address[]\",\"indexed\":false,\"internalType\":\"address[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_bytes\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_bytes32\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_int\",\"inputs\":[{\"name\":\"\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_address\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_array\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"uint256[]\",\"indexed\":false,\"internalType\":\"uint256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_array\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"int256[]\",\"indexed\":false,\"internalType\":\"int256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_array\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"address[]\",\"indexed\":false,\"internalType\":\"address[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_bytes\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_bytes32\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_decimal_int\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"},{\"name\":\"decimals\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_decimal_uint\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"decimals\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_int\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_string\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_uint\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_string\",\"inputs\":[{\"name\":\"\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_uint\",\"inputs\":[{\"name\":\"\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"logs\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"CallerIsNotFungibleModule\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"GasFeeTransferFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidSender\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"LowAllowance\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"LowBalance\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZeroAddress\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZeroGasCoin\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZeroGasPrice\",\"inputs\":[]}]", + Bin: "0x6080604052600c8054600160ff199182168117909255601f80549091169091179055348015602c57600080fd5b5061df6a8061003c6000396000f3fe608060405234801561001057600080fd5b50600436106102f45760003560e01c80638ce7ef0511610191578063d27b0427116100e3578063dfbdf60011610097578063f1f87f4011610071578063f1f87f401461049d578063f2413096146104a5578063fa7626d4146104ad57600080fd5b8063dfbdf60014610485578063e13aba481461048d578063e20c9f711461049557600080fd5b8063d591221f116100c8578063d591221f1461046d578063d97136a214610475578063dcba486a1461047d57600080fd5b8063d27b04271461045d578063d509b16c1461046557600080fd5b8063b549984c11610145578063ba414fa61161011f578063ba414fa614610435578063d04cda981461044d578063d1fd32911461045557600080fd5b8063b549984c1461041d578063b5508aa914610425578063b79cad091461042d57600080fd5b8063a4aa6c7c11610176578063a4aa6c7c14610405578063ae9687dc1461040d578063b0464fdc1461041557600080fd5b80638ce7ef05146103e8578063916a17c6146103f057600080fd5b80634b6295091161024a57806366d9a9a0116101fe5780637f924c4e116101d85780637f924c4e146103c357806380326680146103cb57806385226c81146103d357600080fd5b806366d9a9a01461039e5780636ff45850146103b357806370557298146103bb57600080fd5b8063513999621161022f578063513999621461038657806358fdbbe01461038e5780635f01db7e1461039657600080fd5b80634b629509146103765780634cfc0aaa1461037e57600080fd5b806328438826116102ac5780633be9ec80116102865780633be9ec801461035e5780633e5e3c23146103665780633f7286f41461036e57600080fd5b806328438826146103395780632ade3880146103415780632f6254fc1461035657600080fd5b80630a9254e4116102dd5780630a9254e41461030b5780631142744e146103135780631ed7831c1461031b57600080fd5b80630393998b146102f95780630809dfef14610303575b600080fd5b6103016104ba565b005b6103016105bc565b61030161074a565b610301610e2c565b610323610f10565b6040516103309190619053565b60405180910390f35b610301610f72565b6103496111bd565b60405161033091906190ef565b6103016112ff565b610301611470565b61032361165d565b6103236116bd565b61030161171d565b6103016117f0565b6103016118c9565b610301611c46565b610301611d19565b6103a6611e86565b6040516103309190619255565b610301612008565b610301612218565b610301612468565b61030161268c565b6103db612760565b60405161033091906192f3565b610301612830565b6103f8612a30565b604051610330919061936a565b610301612b2b565b610301612ce0565b6103f8612f6d565b610301613068565b6103db61313a565b61030161320a565b61043d61359c565b6040519015158152602001610330565b610301613670565b6103016137b4565b6103016138f7565b610301613a3a565b6103016140ce565b6103016141b2565b610301614338565b6103016145bb565b6103016146fe565b6103236149a8565b610301614a08565b610301614b4e565b601f5461043d9060ff1681565b604051630618f58760e51b81527f2b2add3d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b15801561052657600080fd5b505af115801561053a573d6000803e3d6000fd5b5050601f546040517feddeb123000000000000000000000000000000000000000000000000000000008152600a60048201526101009091046001600160a01b0316925063eddeb12391506024015b600060405180830381600087803b1580156105a257600080fd5b505af11580156105b6573d6000803e3d6000fd5b50505050565b60225460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561061557600080fd5b505af1158015610629573d6000803e3d6000fd5b5050604051630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b15801561069957600080fd5b505af11580156106ad573d6000803e3d6000fd5b5050601f546040517f47e7ef2400000000000000000000000000000000000000000000000000000000815260006004820152620186a060248201526101009091046001600160a01b031692506347e7ef2491506044015b6020604051808303816000875af1158015610723573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107479190619401565b50565b602480547fffffffffffffffffffffffff000000000000000000000000000000000000000090811630179091556025805490911661123417905560405161079090618f73565b604051809103906000f0801580156107ac573d6000803e3d6000fd5b50602380547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03928316908117909155604080518082018252600f81527f476174657761795a45564d2e736f6c000000000000000000000000000000000060208201526024805492519081019390935292166044820152610890919060640160408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f485cc95500000000000000000000000000000000000000000000000000000000179052614daa565b602280546001600160a01b03929092167fffffffffffffffffffffffff00000000000000000000000000000000000000009283168117909155602180549092168117909155604080517f3ce4a5bc0000000000000000000000000000000000000000000000000000000081529051633ce4a5bc916004808201926020929091908290030181865afa158015610929573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061094d919061943f565b602680547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039290921691821790556040517f06447d560000000000000000000000000000000000000000000000000000000081526004810191909152737109709ecfa91a80626ff3989d68f67f5b1dd12d906306447d5690602401600060405180830381600087803b1580156109eb57600080fd5b505af11580156109ff573d6000803e3d6000fd5b505050506000806000604051610a1490618f80565b6001600160a01b03938416815291831660208301529091166040820152606001604051809103906000f080158015610a50573d6000803e3d6000fd5b50602080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03928316908117909155602154604051601293600193849360009391921690610aa690618f8d565b610ab59695949392919061945a565b604051809103906000f080158015610ad1573d6000803e3d6000fd5b50601f80547fffffffffffffffffffffff0000000000000000000000000000000000000000ff166101006001600160a01b03938416810291909117918290556020546040517fee2815ba00000000000000000000000000000000000000000000000000000000815260016004820152919092048316602482015291169063ee2815ba90604401600060405180830381600087803b158015610b7157600080fd5b505af1158015610b85573d6000803e3d6000fd5b50506020546040517fa7cb050700000000000000000000000000000000000000000000000000000000815260016004820181905260248201526001600160a01b03909116925063a7cb05079150604401600060405180830381600087803b158015610bef57600080fd5b505af1158015610c03573d6000803e3d6000fd5b50506026546040517fc88a5e6d0000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152633b9aca006024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c88a5e6d9150604401600060405180830381600087803b158015610c8357600080fd5b505af1158015610c97573d6000803e3d6000fd5b50506022546040517fc88a5e6d0000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152633b9aca006024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c88a5e6d9150604401600060405180830381600087803b158015610d1757600080fd5b505af1158015610d2b573d6000803e3d6000fd5b5050601f54602480546040517f47e7ef240000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620186a09281019290925261010090920490911692506347e7ef2491506044016020604051808303816000875af1158015610da9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dcd9190619401565b507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b03166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156105a257600080fd5b604051630618f58760e51b81527fddb5de5e000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b158015610e9857600080fd5b505af1158015610eac573d6000803e3d6000fd5b5050601f54602480546040517f47e7ef240000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620186a09281019290925261010090920490911692506347e7ef249150604401610704565b60606016805480602002602001604051908101604052809291908181526020018280548015610f6857602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610f4a575b5050505050905090565b601f546025546040516370a0823160e01b81526001600160a01b0391821660048201526000926101009004909116906370a0823190602401602060405180830381865afa158015610fc7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610feb919061954f565b9050610ff8600082614dc9565b601f54602480546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201526207a12092810183905291926101009004169063095ea7b3906044016020604051808303816000875af1158015611070573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110949190619401565b50604051630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b15801561110157600080fd5b505af1158015611115573d6000803e3d6000fd5b5050601f546025546040517f23b872dd000000000000000000000000000000000000000000000000000000008152600060048201526001600160a01b039182166024820152604481018690526101009092041692506323b872dd91506064015b6020604051808303816000875af1158015611194573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111b89190619401565b505050565b6060601e805480602002602001604051908101604052809291908181526020016000905b828210156112f657600084815260208082206040805180820182526002870290920180546001600160a01b03168352600181018054835181870281018701909452808452939591948681019491929084015b828210156112df57838290600052602060002001805461125290619568565b80601f016020809104026020016040519081016040528092919081815260200182805461127e90619568565b80156112cb5780601f106112a0576101008083540402835291602001916112cb565b820191906000526020600020905b8154815290600101906020018083116112ae57829003601f168201915b505050505081526020019060010190611233565b5050505081525050815260200190600101906111e1565b50505050905090565b60265460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561135857600080fd5b505af115801561136c573d6000803e3d6000fd5b5050601f546040517fc835d7cc00000000000000000000000000000000000000000000000000000000815261321160048201526101009091046001600160a01b0316925063c835d7cc9150602401600060405180830381600087803b1580156113d457600080fd5b505af11580156113e8573d6000803e3d6000fd5b5050505061146e601f60019054906101000a90046001600160a01b03166001600160a01b031663f2441b326040518163ffffffff1660e01b8152600401602060405180830381865afa158015611442573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611466919061943f565b613211614e51565b565b60265460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156114c957600080fd5b505af11580156114dd573d6000803e3d6000fd5b50506020546040517fa7cb050700000000000000000000000000000000000000000000000000000000815260016004820152600060248201526001600160a01b03909116925063a7cb05079150604401600060405180830381600087803b15801561154757600080fd5b505af115801561155b573d6000803e3d6000fd5b5050604051630618f58760e51b81527fe661aed0000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e091506024015b600060405180830381600087803b1580156115cc57600080fd5b505af11580156115e0573d6000803e3d6000fd5b50505050600080601f60019054906101000a90046001600160a01b03166001600160a01b031663d9eeebed6040518163ffffffff1660e01b81526004016040805180830381865afa158015611639573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105b691906195b5565b60606018805480602002602001604051908101604052809291908181526020018280548015610f68576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311610f4a575050505050905090565b60606017805480602002602001604051908101604052809291908181526020018280548015610f68576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311610f4a575050505050905090565b604051630618f58760e51b81527f2b2add3d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b15801561178957600080fd5b505af115801561179d573d6000803e3d6000fd5b5050601f546040517fccc7759900000000000000000000000000000000000000000000000000000000815261321160048201526101009091046001600160a01b0316925063ccc775999150602401610588565b604051630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b15801561185c57600080fd5b505af1158015611870573d6000803e3d6000fd5b5050601f546040517f095ea7b300000000000000000000000000000000000000000000000000000000815260006004820152600a60248201526101009091046001600160a01b0316925063095ea7b39150604401610704565b60265460405163ca669fa760e01b81526001600160a01b039091166004820152600a908190737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561192757600080fd5b505af115801561193b573d6000803e3d6000fd5b5050601f546040517ff687d12a000000000000000000000000000000000000000000000000000000008152600481018690526101009091046001600160a01b0316925063f687d12a9150602401600060405180830381600087803b1580156119a257600080fd5b505af11580156119b6573d6000803e3d6000fd5b505060265460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b158015611a1357600080fd5b505af1158015611a27573d6000803e3d6000fd5b5050601f546040517feddeb123000000000000000000000000000000000000000000000000000000008152600481018590526101009091046001600160a01b0316925063eddeb1239150602401600060405180830381600087803b158015611a8e57600080fd5b505af1158015611aa2573d6000803e3d6000fd5b5050601f546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526101009091046001600160a01b03166004820181905260006024830152925063095ea7b391506044016020604051808303816000875af1158015611b15573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b399190619401565b507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b031663f48448146040518163ffffffff1660e01b8152600401600060405180830381600087803b158015611b9857600080fd5b505af1158015611bac573d6000803e3d6000fd5b5050601f546025546040805160609290921b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000001660208301528051601481840301815260348301918290527fc7012626000000000000000000000000000000000000000000000000000000009091526001600160a01b0361010090930492909216935063c7012626925061117591906001906038016195e1565b604051630618f58760e51b81527f2b2add3d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b158015611cb257600080fd5b505af1158015611cc6573d6000803e3d6000fd5b5050601f546040517fc835d7cc00000000000000000000000000000000000000000000000000000000815261321160048201526101009091046001600160a01b0316925063c835d7cc9150602401610588565b60265460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015611d7257600080fd5b505af1158015611d86573d6000803e3d6000fd5b5050601f546040517ff687d12a000000000000000000000000000000000000000000000000000000008152600a60048201526101009091046001600160a01b0316925063f687d12a9150602401600060405180830381600087803b158015611ded57600080fd5b505af1158015611e01573d6000803e3d6000fd5b5050505061146e600a601f60019054906101000a90046001600160a01b03166001600160a01b031663091d27886040518163ffffffff1660e01b8152600401602060405180830381865afa158015611e5d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e81919061954f565b614dc9565b6060601b805480602002602001604051908101604052809291908181526020016000905b828210156112f65783829060005260206000209060020201604051806040016040529081600082018054611edd90619568565b80601f0160208091040260200160405190810160405280929190818152602001828054611f0990619568565b8015611f565780601f10611f2b57610100808354040283529160200191611f56565b820191906000526020600020905b815481529060010190602001808311611f3957829003601f168201915b5050505050815260200160018201805480602002602001604051908101604052809291908181526020018280548015611ff057602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019060040190602082600301049283019260010382029150808411611f9d5790505b50505050508152505081526020019060010190611eaa565b601f546025546040516370a0823160e01b81526001600160a01b0391821660048201526000926101009004909116906370a0823190602401602060405180830381865afa15801561205d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612081919061954f565b905061208e600082614dc9565b601f54602480546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201526207a12092810183905291926101009004169063095ea7b3906044016020604051808303816000875af1158015612106573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061212a9190619401565b50604051630618f58760e51b81527ffe382aa7000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b15801561219757600080fd5b505af11580156121ab573d6000803e3d6000fd5b5050601f54602480546025546040517f23b872dd0000000000000000000000000000000000000000000000000000000081526001600160a01b039283166004820152908216928101929092526044820186905261010090920490911692506323b872dd9150606401611175565b601f546025546040516370a0823160e01b81526001600160a01b0391821660048201526000926101009004909116906370a0823190602401602060405180830381865afa15801561226d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612291919061954f565b905061229e600082614dc9565b601f54602480546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015261c35092810183905291926101009004169063095ea7b3906044016020604051808303816000875af1158015612315573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123399190619401565b50601f54602480546025546040517f23b872dd0000000000000000000000000000000000000000000000000000000081526001600160a01b0392831660048201529082169281019290925260448201849052610100909204909116906323b872dd906064015b6020604051808303816000875af11580156123be573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123e29190619401565b50601f546025546040516370a0823160e01b81526001600160a01b0391821660048201526000926101009004909116906370a0823190602401602060405180830381865afa158015612438573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061245c919061954f565b90506111b88282614dc9565b6000601f60019054906101000a90046001600160a01b03166001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156124bd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124e1919061954f565b90506124f0620186a082614dc9565b60225460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561254957600080fd5b505af115801561255d573d6000803e3d6000fd5b5050601f54602480546040517f47e7ef240000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620186a09281019290925261010090920490911692506347e7ef2491506044016020604051808303816000875af11580156125db573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125ff9190619401565b506000601f60019054906101000a90046001600160a01b03166001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612655573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612679919061954f565b905061268862030d4082614dc9565b5050565b604051630618f58760e51b81527ffe382aa7000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b1580156126f857600080fd5b505af115801561270c573d6000803e3d6000fd5b5050601f546040517f42966c68000000000000000000000000000000000000000000000000000000008152620249f060048201526101009091046001600160a01b031692506342966c689150602401610704565b6060601a805480602002602001604051908101604052809291908181526020016000905b828210156112f65783829060005260206000200180546127a390619568565b80601f01602080910402602001604051908101604052809291908181526020018280546127cf90619568565b801561281c5780601f106127f15761010080835404028352916020019161281c565b820191906000526020600020905b8154815290600101906020018083116127ff57829003601f168201915b505050505081526020019060010190612784565b601f546025546040516370a0823160e01b81526001600160a01b0391821660048201526000926101009004909116906370a0823190602401602060405180830381865afa158015612885573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128a9919061954f565b90506128b6600082614dc9565b601f54602480546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201526207a12092810183905291926101009004169063095ea7b3906044016020604051808303816000875af115801561292e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129529190619401565b50604051630618f58760e51b81527ffe382aa7000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b1580156129bf57600080fd5b505af11580156129d3573d6000803e3d6000fd5b5050601f546025546040517fa9059cbb0000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201526024810186905261010090920416925063a9059cbb9150604401611175565b6060601d805480602002602001604051908101604052809291908181526020016000905b828210156112f65760008481526020908190206040805180820182526002860290920180546001600160a01b03168352600181018054835181870281018701909452808452939491938583019392830182828015612b1357602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019060040190602082600301049283019260010382029150808411612ac05790505b50505050508152505081526020019060010190612a54565b601f54602480546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201526207a12092810183905291926101009004169063095ea7b3906044016020604051808303816000875af1158015612ba3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612bc79190619401565b50604051630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b158015612c3457600080fd5b505af1158015612c48573d6000803e3d6000fd5b5050601f546040517fa9059cbb00000000000000000000000000000000000000000000000000000000815260006004820152602481018590526101009091046001600160a01b0316925063a9059cbb91506044015b6020604051808303816000875af1158015612cbc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126889190619401565b6000601f60019054906101000a90046001600160a01b03166001600160a01b03166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa158015612d35573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052612d5d91908101906196cb565b9050612d9e6040518060400160405280600581526020017f544f4b454e00000000000000000000000000000000000000000000000000000081525082614eb2565b6000601f60019054906101000a90046001600160a01b03166001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa158015612df3573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052612e1b91908101906196cb565b9050612e5c6040518060400160405280600381526020017f544b4e000000000000000000000000000000000000000000000000000000000081525082614eb2565b6000601f60019054906101000a90046001600160a01b03166001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015612eb1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ed59190619714565b9050612ee560128260ff16614dc9565b6000601f60019054906101000a90046001600160a01b03166001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612f3a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f5e919061954f565b90506105b6620186a082614dc9565b6060601c805480602002602001604051908101604052809291908181526020016000905b828210156112f65760008481526020908190206040805180820182526002860290920180546001600160a01b0316835260018101805483518187028101870190945280845293949193858301939283018282801561305057602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019060040190602082600301049283019260010382029150808411612ffd5790505b50505050508152505081526020019060010190612f91565b604051630618f58760e51b81527f2b2add3d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b1580156130d457600080fd5b505af11580156130e8573d6000803e3d6000fd5b5050601f546040517ff687d12a000000000000000000000000000000000000000000000000000000008152600a60048201526101009091046001600160a01b0316925063f687d12a9150602401610588565b60606019805480602002602001604051908101604052809291908181526020016000905b828210156112f657838290600052602060002001805461317d90619568565b80601f01602080910402602001604051908101604052809291908181526020018280546131a990619568565b80156131f65780601f106131cb576101008083540402835291602001916131f6565b820191906000526020600020905b8154815290600101906020018083116131d957829003601f168201915b50505050508152602001906001019061315e565b60265460405163ca669fa760e01b81526001600160a01b039091166004820152600a906305f5e10090737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561326c57600080fd5b505af1158015613280573d6000803e3d6000fd5b5050601f546040517ff687d12a000000000000000000000000000000000000000000000000000000008152600481018690526101009091046001600160a01b0316925063f687d12a9150602401600060405180830381600087803b1580156132e757600080fd5b505af11580156132fb573d6000803e3d6000fd5b505060265460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b15801561335857600080fd5b505af115801561336c573d6000803e3d6000fd5b5050601f546040517feddeb123000000000000000000000000000000000000000000000000000000008152600481018590526101009091046001600160a01b0316925063eddeb1239150602401600060405180830381600087803b1580156133d357600080fd5b505af11580156133e7573d6000803e3d6000fd5b5050601f546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526101009091046001600160a01b031660048201819052630bebc2006024830152925063095ea7b391506044016020604051808303816000875af115801561345d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134819190619401565b50604051630618f58760e51b81527ffe382aa7000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b1580156134ee57600080fd5b505af1158015613502573d6000803e3d6000fd5b5050601f546025546040805160609290921b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000001660208301528051601481840301815260348301918290527fc7012626000000000000000000000000000000000000000000000000000000009091526001600160a01b0361010090930492909216935063c7012626925061117591906064906038016195e1565b60085460009060ff16156135b4575060085460ff1690565b6040517f667f9d70000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d600482018190527f6661696c65640000000000000000000000000000000000000000000000000000602483015260009163667f9d7090604401602060405180830381865afa158015613645573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613669919061954f565b1415905090565b60265460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156136c957600080fd5b505af11580156136dd573d6000803e3d6000fd5b5050601f546040517feddeb123000000000000000000000000000000000000000000000000000000008152600a60048201526101009091046001600160a01b0316925063eddeb1239150602401600060405180830381600087803b15801561374457600080fd5b505af1158015613758573d6000803e3d6000fd5b5050505061146e600a601f60019054906101000a90046001600160a01b03166001600160a01b0316634d8943bb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611e5d573d6000803e3d6000fd5b60265460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561380d57600080fd5b505af1158015613821573d6000803e3d6000fd5b5050604051630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b15801561389157600080fd5b505af11580156138a5573d6000803e3d6000fd5b5050601f546040517fccc77599000000000000000000000000000000000000000000000000000000008152600060048201526101009091046001600160a01b0316925063ccc775999150602401610588565b60265460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561395057600080fd5b505af1158015613964573d6000803e3d6000fd5b5050604051630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b1580156139d457600080fd5b505af11580156139e8573d6000803e3d6000fd5b5050601f546040517fc835d7cc000000000000000000000000000000000000000000000000000000008152600060048201526101009091046001600160a01b0316925063c835d7cc9150602401610588565b60265460405163ca669fa760e01b81526001600160a01b039091166004820152600a908190737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015613a9857600080fd5b505af1158015613aac573d6000803e3d6000fd5b5050601f546040517ff687d12a000000000000000000000000000000000000000000000000000000008152600481018690526101009091046001600160a01b0316925063f687d12a9150602401600060405180830381600087803b158015613b1357600080fd5b505af1158015613b27573d6000803e3d6000fd5b505060265460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b158015613b8457600080fd5b505af1158015613b98573d6000803e3d6000fd5b5050601f546040517feddeb123000000000000000000000000000000000000000000000000000000008152600481018590526101009091046001600160a01b0316925063eddeb1239150602401600060405180830381600087803b158015613bff57600080fd5b505af1158015613c13573d6000803e3d6000fd5b5050601f54602480546040516370a0823160e01b81526001600160a01b039182166004820152600095506101009093041692506370a082319101602060405180830381865afa158015613c6a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613c8e919061954f565b9050613c9d620186a082614dc9565b6000601f60019054906101000a90046001600160a01b03166001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613cf2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613d16919061954f565b9050613d25620186a082614dc9565b601f546026546040516370a0823160e01b81526001600160a01b0391821660048201526000926101009004909116906370a0823190602401602060405180830381865afa158015613d7a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613d9e919061954f565b601f546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526101009091046001600160a01b03166004820181905261c350602483015291925063095ea7b3906044016020604051808303816000875af1158015613e10573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613e349190619401565b50601f546025546040805160609290921b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000001660208301528051601481840301815260348301918290527fc7012626000000000000000000000000000000000000000000000000000000009091526001600160a01b03610100909304929092169163c701262691613ecc919061c350906038016195e1565b6020604051808303816000875af1158015613eeb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613f0f9190619401565b50601f546026546040516370a0823160e01b81526001600160a01b0391821660048201526000926101009004909116906370a0823190602401602060405180830381865afa158015613f65573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613f89919061954f565b9050613fa985613f998885619766565b613fa39190619766565b82614dc9565b601f54602480546040516370a0823160e01b81526001600160a01b0391821660048201526000936101009004909116916370a082319101602060405180830381865afa158015613ffd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614021919061954f565b905061403d866140338961c350619779565b613fa39190619779565b6000601f60019054906101000a90046001600160a01b03166001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015614092573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906140b6919061954f565b90506140c461c35082614dc9565b5050505050505050565b601f546025546040516370a0823160e01b81526001600160a01b0391821660048201526000926101009004909116906370a0823190602401602060405180830381865afa158015614123573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614147919061954f565b9050614154600082614dc9565b601f546025546040517fa9059cbb0000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015261c350602482018190529261010090049091169063a9059cbb9060440161239f565b601f54602480546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201526207a12092810183905291926101009004169063095ea7b3906044016020604051808303816000875af115801561422a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061424e9190619401565b50604051630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b1580156142bb57600080fd5b505af11580156142cf573d6000803e3d6000fd5b5050601f54602480546040517f23b872dd0000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201526000928101929092526044820186905261010090920490911692506323b872dd9150606401612c9d565b60265460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561439157600080fd5b505af11580156143a5573d6000803e3d6000fd5b5050601f546040517ff687d12a000000000000000000000000000000000000000000000000000000008152600a6004820181905293508392506101009091046001600160a01b03169063f687d12a90602401600060405180830381600087803b15801561441157600080fd5b505af1158015614425573d6000803e3d6000fd5b505060265460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b15801561448257600080fd5b505af1158015614496573d6000803e3d6000fd5b5050601f546040517feddeb123000000000000000000000000000000000000000000000000000000008152600a60048201526101009091046001600160a01b0316925063eddeb1239150602401600060405180830381600087803b1580156144fd57600080fd5b505af1158015614511573d6000803e3d6000fd5b50505050600080601f60019054906101000a90046001600160a01b03166001600160a01b031663d9eeebed6040518163ffffffff1660e01b81526004016040805180830381865afa15801561456a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061458e91906195b5565b601f5491935091506145ae9061010090046001600160a01b031683614e51565b6105b6613fa38486619766565b60265460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561461457600080fd5b505af1158015614628573d6000803e3d6000fd5b5050601f546040517fccc7759900000000000000000000000000000000000000000000000000000000815261321160048201526101009091046001600160a01b0316925063ccc775999150602401600060405180830381600087803b15801561469057600080fd5b505af11580156146a4573d6000803e3d6000fd5b5050505061146e601f60019054906101000a90046001600160a01b03166001600160a01b0316638b851b956040518163ffffffff1660e01b8152600401602060405180830381865afa158015611442573d6000803e3d6000fd5b601f54602480546040516370a0823160e01b81526001600160a01b0391821660048201526000936101009004909116916370a082319101602060405180830381865afa158015614752573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614776919061954f565b9050614785620186a082614dc9565b6000601f60019054906101000a90046001600160a01b03166001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156147da573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906147fe919061954f565b905061480d620186a082614dc9565b601f546040517f42966c6800000000000000000000000000000000000000000000000000000000815261c35060048201526101009091046001600160a01b0316906342966c68906024016020604051808303816000875af1158015614876573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061489a9190619401565b50601f54602480546040516370a0823160e01b81526001600160a01b0391821660048201526000936101009004909116916370a082319101602060405180830381865afa1580156148ef573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614913919061954f565b905061492161c35082614dc9565b6000601f60019054906101000a90046001600160a01b03166001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015614976573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061499a919061954f565b90506105b661c35082614dc9565b60606015805480602002602001604051908101604052809291908181526020018280548015610f68576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311610f4a575050505050905090565b60265460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015614a6157600080fd5b505af1158015614a75573d6000803e3d6000fd5b50506020546040517fee2815ba00000000000000000000000000000000000000000000000000000000815260016004820152600060248201526001600160a01b03909116925063ee2815ba9150604401600060405180830381600087803b158015614adf57600080fd5b505af1158015614af3573d6000803e3d6000fd5b5050604051630618f58760e51b81527f78fff396000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e091506024016115b2565b601f546025546040516370a0823160e01b81526001600160a01b0391821660048201526000926101009004909116906370a0823190602401602060405180830381865afa158015614ba3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614bc7919061954f565b9050614bd4600082614dc9565b601f54602480546040517fdd62ed3e0000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201819052928101929092526000926101009004169063dd62ed3e90604401602060405180830381865afa158015614c4a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614c6e919061954f565b9050614c7b600082614dc9565b604051630618f58760e51b81527f10bad14700000000000000000000000000000000000000000000000000000000600482015261c35090737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b158015614ceb57600080fd5b505af1158015614cff573d6000803e3d6000fd5b5050601f54602480546025546040517f23b872dd0000000000000000000000000000000000000000000000000000000081526001600160a01b039283166004820152908216928101929092526044820186905261010090920490911692506323b872dd91506064016020604051808303816000875af1158015614d86573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105b69190619401565b6000614db4618f9a565b614dbf848483614f04565b9150505b92915050565b6040517f98296c540000000000000000000000000000000000000000000000000000000081526004810183905260248101829052737109709ecfa91a80626ff3989d68f67f5b1dd12d906398296c54906044015b60006040518083038186803b158015614e3557600080fd5b505afa158015614e49573d6000803e3d6000fd5b505050505050565b6040517f515361f60000000000000000000000000000000000000000000000000000000081526001600160a01b03808416600483015282166024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063515361f690604401614e1d565b6040517ff320d963000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063f320d96390614e1d908590859060040161978c565b600080614f118584614f7f565b9050614f746040518060400160405280601d81526020017f4552433139363750726f78792e736f6c3a4552433139363750726f78790000008152508286604051602001614f5f9291906197b1565b60405160208183030381529060405285614f8b565b9150505b9392505050565b6000614f788383614fb9565b60c08101515160009015614faf57614fa884848460c00151614fd4565b9050614f78565b614fa8848461517a565b6000614fc58383615265565b614f7883836020015184614f8b565b600080614fdf615271565b90506000614fed8683615344565b9050600061500482606001518360200151856157ea565b90506000615014838389896159fc565b9050600061502182616879565b602081015181519192509060030b156150945789826040015160405160200161504b9291906197d3565b60408051601f19818403018152908290527f08c379a000000000000000000000000000000000000000000000000000000000825261508b91600401619854565b60405180910390fd5b60006150d76040518060400160405280601581526020017f4465706c6f79656420746f20616464726573733a200000000000000000000000815250836001616a48565b6040517fc6ce059d000000000000000000000000000000000000000000000000000000008152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c6ce059d9061512a908490600401619854565b602060405180830381865afa158015615147573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061516b919061943f565b9b9a5050505050505050505050565b6040517f8d1cc9250000000000000000000000000000000000000000000000000000000081526000908190737109709ecfa91a80626ff3989d68f67f5b1dd12d90638d1cc925906151cf908790600401619854565b600060405180830381865afa1580156151ec573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526152149190810190619887565b90506000615242828560405160200161522e9291906198bc565b604051602081830303815290604052616c48565b90506001600160a01b038116614dbf57848460405160200161504b9291906198eb565b61268882826000616c5b565b604080518082018252600381527f6f75740000000000000000000000000000000000000000000000000000000000602082015290517fd145736c000000000000000000000000000000000000000000000000000000008152606091737109709ecfa91a80626ff3989d68f67f5b1dd12d91829063d145736c906152f8908490600401619996565b600060405180830381865afa158015615315573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261533d91908101906196cb565b9250505090565b6153766040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b6000737109709ecfa91a80626ff3989d68f67f5b1dd12d90506153c16040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b6153ca85616d5e565b602082015260006153da86617143565b90506000836001600160a01b031663d930a0e66040518163ffffffff1660e01b8152600401600060405180830381865afa15801561541c573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261544491908101906196cb565b8683856020015160405160200161545e94939291906199dd565b60408051601f19818403018152908290527f60f9bb1100000000000000000000000000000000000000000000000000000000825291506000906001600160a01b038616906360f9bb11906154b6908590600401619854565b600060405180830381865afa1580156154d3573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526154fb91908101906196cb565b6040517fdb4235f60000000000000000000000000000000000000000000000000000000081529091506001600160a01b0386169063db4235f690615543908490600401619ae1565b602060405180830381865afa158015615560573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906155849190619401565b615599578160405160200161504b9190619b33565b6040517f49c4fac80000000000000000000000000000000000000000000000000000000081526001600160a01b038616906349c4fac8906155de908490600401619bc5565b600060405180830381865afa1580156155fb573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261562391908101906196cb565b84526040517fdb4235f60000000000000000000000000000000000000000000000000000000081526001600160a01b0386169063db4235f69061566a908490600401619c17565b602060405180830381865afa158015615687573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906156ab9190619401565b15615740576040517f49c4fac80000000000000000000000000000000000000000000000000000000081526001600160a01b038616906349c4fac8906156f5908490600401619c17565b600060405180830381865afa158015615712573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261573a91908101906196cb565b60408501525b846001600160a01b03166349c4fac88286600001516040516020016157659190619c69565b6040516020818303038152906040526040518363ffffffff1660e01b815260040161579192919061978c565b600060405180830381865afa1580156157ae573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526157d691908101906196cb565b606085015250608083015250949350505050565b60408051600480825260a0820190925260609160009190816020015b60608152602001906001900390816158065790505090506040518060400160405280600481526020017f67726570000000000000000000000000000000000000000000000000000000008152508160008151811061586657615866619cd5565b60200260200101819052506040518060400160405280600381526020017f2d726c0000000000000000000000000000000000000000000000000000000000815250816001815181106158ba576158ba619cd5565b6020026020010181905250846040516020016158d69190619d04565b604051602081830303815290604052816002815181106158f8576158f8619cd5565b6020026020010181905250826040516020016159149190619d70565b6040516020818303038152906040528160038151811061593657615936619cd5565b6020026020010181905250600061594c82616879565b602080820151604080518082018252600581527f2e6a736f6e00000000000000000000000000000000000000000000000000000081850190815282518084018452600080825290860152825180840190935290518252928101929092529192506159dd90604080518082018252600080825260209182015281518083019092528451825280850190820152906173c6565b6159f2578560405160200161504b9190619db1565b9695505050505050565b60a0810151604080518082018252600080825260209182015281518083019092528251808352928101910152606090737109709ecfa91a80626ff3989d68f67f5b1dd12d9015615a4c565b511590565b615bc057826020015115615b08576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605860248201527f54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f742060448201527f62652075736564207768656e207468652060736b6970566572696679536f757260648201527f6365436f646560206f7074696f6e206973206074727565600000000000000000608482015260a40161508b565b8260c0015115615bc0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605360248201527f54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f742060448201527f62652075736564207768656e207468652060736b69704c6963656e736554797060648201527f6560206f7074696f6e2069732060747275656000000000000000000000000000608482015260a40161508b565b6040805160ff8082526120008201909252600091816020015b6060815260200190600190039081615bd957905050905060006040518060400160405280600381526020017f6e70780000000000000000000000000000000000000000000000000000000000815250828280615c3490619e42565b935060ff1681518110615c4957615c49619cd5565b60200260200101819052506040518060400160405280600d81526020017f302e302e312d616c7068612e3700000000000000000000000000000000000000815250604051602001615c9a9190619e61565b604051602081830303815290604052828280615cb590619e42565b935060ff1681518110615cca57615cca619cd5565b60200260200101819052506040518060400160405280600681526020017f6465706c6f790000000000000000000000000000000000000000000000000000815250828280615d1790619e42565b935060ff1681518110615d2c57615d2c619cd5565b60200260200101819052506040518060400160405280600e81526020017f2d2d636f6e74726163744e616d65000000000000000000000000000000000000815250828280615d7990619e42565b935060ff1681518110615d8e57615d8e619cd5565b60200260200101819052508760200151828280615daa90619e42565b935060ff1681518110615dbf57615dbf619cd5565b60200260200101819052506040518060400160405280600e81526020017f2d2d636f6e747261637450617468000000000000000000000000000000000000815250828280615e0c90619e42565b935060ff1681518110615e2157615e21619cd5565b602090810291909101015287518282615e3981619e42565b935060ff1681518110615e4e57615e4e619cd5565b60200260200101819052506040518060400160405280600981526020017f2d2d636861696e49640000000000000000000000000000000000000000000000815250828280615e9b90619e42565b935060ff1681518110615eb057615eb0619cd5565b6020026020010181905250615ec446617427565b8282615ecf81619e42565b935060ff1681518110615ee457615ee4619cd5565b60200260200101819052506040518060400160405280600f81526020017f2d2d6275696c64496e666f46696c650000000000000000000000000000000000815250828280615f3190619e42565b935060ff1681518110615f4657615f46619cd5565b602002602001018190525086828280615f5e90619e42565b935060ff1681518110615f7357615f73619cd5565b602090810291909101015285511561609a5760408051808201909152601581527f2d2d636f6e7374727563746f7242797465636f6465000000000000000000000060208201528282615fc481619e42565b935060ff1681518110615fd957615fd9619cd5565b60209081029190910101526040517f71aad10d0000000000000000000000000000000000000000000000000000000081526001600160a01b038416906371aad10d90616029908990600401619854565b600060405180830381865afa158015616046573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261606e91908101906196cb565b828261607981619e42565b935060ff168151811061608e5761608e619cd5565b60200260200101819052505b84602001511561616a5760408051808201909152601281527f2d2d766572696679536f75726365436f64650000000000000000000000000000602082015282826160e381619e42565b935060ff16815181106160f8576160f8619cd5565b60200260200101819052506040518060400160405280600581526020017f66616c736500000000000000000000000000000000000000000000000000000081525082828061614590619e42565b935060ff168151811061615a5761615a619cd5565b6020026020010181905250616331565b6161a2615a478660a0015160408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6162355760408051808201909152600d81527f2d2d6c6963656e73655479706500000000000000000000000000000000000000602082015282826161e581619e42565b935060ff16815181106161fa576161fa619cd5565b60200260200101819052508460a0015160405160200161621a9190619d04565b60405160208183030381529060405282828061614590619e42565b8460c0015115801561627857506040808901518151808301835260008082526020918201528251808401909352815183529081019082015261627690511590565b155b156163315760408051808201909152600d81527f2d2d6c6963656e73655479706500000000000000000000000000000000000000602082015282826162bc81619e42565b935060ff16815181106162d1576162d1619cd5565b60200260200101819052506162e5886174c7565b6040516020016162f59190619d04565b60405160208183030381529060405282828061631090619e42565b935060ff168151811061632557616325619cd5565b60200260200101819052505b6040808601518151808301835260008082526020918201528251808401909352815183529081019082015261636590511590565b6163fa5760408051808201909152600b81527f2d2d72656c617965724964000000000000000000000000000000000000000000602082015282826163a881619e42565b935060ff16815181106163bd576163bd619cd5565b602002602001018190525084604001518282806163d990619e42565b935060ff16815181106163ee576163ee619cd5565b60200260200101819052505b60608501511561651b5760408051808201909152600681527f2d2d73616c7400000000000000000000000000000000000000000000000000006020820152828261644381619e42565b935060ff168151811061645857616458619cd5565b602090810291909101015260608501516040517fb11a19e800000000000000000000000000000000000000000000000000000000815260048101919091526001600160a01b0384169063b11a19e890602401600060405180830381865afa1580156164c7573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526164ef91908101906196cb565b82826164fa81619e42565b935060ff168151811061650f5761650f619cd5565b60200260200101819052505b60e085015151156165c25760408051808201909152600a81527f2d2d6761734c696d6974000000000000000000000000000000000000000000006020820152828261656581619e42565b935060ff168151811061657a5761657a619cd5565b60200260200101819052506165968560e0015160000151617427565b82826165a181619e42565b935060ff16815181106165b6576165b6619cd5565b60200260200101819052505b60e0850151602001511561666c5760408051808201909152600a81527f2d2d6761735072696365000000000000000000000000000000000000000000006020820152828261660f81619e42565b935060ff168151811061662457616624619cd5565b60200260200101819052506166408560e0015160200151617427565b828261664b81619e42565b935060ff168151811061666057616660619cd5565b60200260200101819052505b60e085015160400151156167165760408051808201909152600e81527f2d2d6d6178466565506572476173000000000000000000000000000000000000602082015282826166b981619e42565b935060ff16815181106166ce576166ce619cd5565b60200260200101819052506166ea8560e0015160400151617427565b82826166f581619e42565b935060ff168151811061670a5761670a619cd5565b60200260200101819052505b60e085015160600151156167c05760408051808201909152601681527f2d2d6d61785072696f72697479466565506572476173000000000000000000006020820152828261676381619e42565b935060ff168151811061677857616778619cd5565b60200260200101819052506167948560e0015160600151617427565b828261679f81619e42565b935060ff16815181106167b4576167b4619cd5565b60200260200101819052505b60008160ff1667ffffffffffffffff8111156167de576167de619603565b60405190808252806020026020018201604052801561681157816020015b60608152602001906001900390816167fc5790505b50905060005b8260ff168160ff16101561686a57838160ff168151811061683a5761683a619cd5565b6020026020010151828260ff168151811061685757616857619cd5565b6020908102919091010152600101616817565b5093505050505b949350505050565b6168a06040518060600160405280600060030b815260200160608152602001606081525090565b60408051808201825260048082527f6261736800000000000000000000000000000000000000000000000000000000602083015291517fd145736c000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d92600091849163d145736c9161692691869101619ecc565b600060405180830381865afa158015616943573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261696b91908101906196cb565b905060006169798683617fb6565b90506000846001600160a01b031663f45c1ce7836040518263ffffffff1660e01b81526004016169a991906192f3565b6000604051808303816000875af11580156169c8573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526169f09190810190619f13565b805190915060030b15801590616a095750602081015151155b8015616a185750604081015151155b156159f25781600081518110616a3057616a30619cd5565b602002602001015160405160200161504b9190619fc9565b60606000616a7d8560408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600080825260209182015281518083019092528651825280870190820152909150616ab49082905b9061810b565b15616c11576000616b3182616b2b84616b25616af78a60408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6040805180820182526000808252602091820152815180830190925282518252918201519181019190915290565b90618132565b90618194565b604080518082018252600181527f0a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152909150616b9590829061810b565b15616bff57604080518082018252600181527f0a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616bfc905b8290618219565b90505b616c088161823f565b92505050614f78565b8215616c2a57848460405160200161504b92919061a1b5565b5050604080516020810190915260008152614f78565b509392505050565b6000808251602084016000f09392505050565b8160a0015115616c6a57505050565b6000616c778484846182a8565b90506000616c8482616879565b602081015181519192509060030b158015616d205750604080518082018252600781527f535543434553530000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616d2090604080518082018252600080825260209182015281518083019092528451825280850190820152616aae565b15616d2d57505050505050565b60408201515115616d4d57816040015160405160200161504b919061a25c565b8060405160200161504b919061a2ba565b60606000616d938360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600481527f2e736f6c0000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152909150616df8905b82906173c6565b15616e6757604080518082018252600481527f2e736f6c0000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152614f7890616e62908390618843565b61823f565b604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616ec9905b82906188cd565b600103616f9657604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616f2f90616bf5565b50604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152614f7890616e62905b8390618219565b604080518082018252600581527f2e6a736f6e00000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616ff590616df1565b1561712c57604080518082018252600181527f2f0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082018190528451808601909552925184528301529061705d908390618967565b9050600081600183516170709190619779565b8151811061708057617080619cd5565b60200260200101519050617123616e626170f66040518060400160405280600581526020017f2e6a736f6e00000000000000000000000000000000000000000000000000000081525060408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b60408051808201825260008082526020918201528151808301909252855182528086019082015290618843565b95945050505050565b8260405160200161504b919061a325565b50919050565b606060006171788360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600481527f2e736f6c00000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201529091506171da90616df1565b156171e857614f788161823f565b604080518082018252600181527f3a000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261724790616ec2565b6001036172b157604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152614f7890616e6290616f8f565b604080518082018252600581527f2e6a736f6e0000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261731090616df1565b1561712c57604080518082018252600181527f2f00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820181905284518086019095529251845283015290617378908390618967565b90506001815111156173b45780600282516173939190619779565b815181106173a3576173a3619cd5565b602002602001015192505050919050565b508260405160200161504b919061a325565b8051825160009111156173db57506000614dc3565b815183516020850151600092916173f191619766565b6173fb9190619779565b905082602001518103617412576001915050614dc3565b82516020840151819020912014905092915050565b6060600061743483618a0c565b600101905060008167ffffffffffffffff81111561745457617454619603565b6040519080825280601f01601f19166020018201604052801561747e576020820181803683370190505b5090508181016020015b600019017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a850494508461748857509392505050565b604081810151815180830183526000808252602091820181905283518085018552835181529282018383015283518085018552600a81527f554e4c4943454e5345440000000000000000000000000000000000000000000081840190815285518087018752838152840192909252845180860190955251845290830152606091617553905b8290618aee565b1561759357505060408051808201909152600481527f4e6f6e65000000000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600981527f556e6c6963656e73650000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526175f29061754c565b1561763257505060408051808201909152600981527f556e6c6963656e736500000000000000000000000000000000000000000000006020820152919050565b604080518082018252600381527f4d49540000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526176919061754c565b156176d157505060408051808201909152600381527f4d495400000000000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f47504c2d322e302d6f6e6c790000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526177309061754c565b806177955750604080518082018252601081527f47504c2d322e302d6f722d6c6174657200000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526177959061754c565b156177d557505060408051808201909152600981527f474e552047504c763200000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f47504c2d332e302d6f6e6c790000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526178349061754c565b806178995750604080518082018252601081527f47504c2d332e302d6f722d6c6174657200000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526178999061754c565b156178d957505060408051808201909152600981527f474e552047504c763300000000000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4c47504c2d322e312d6f6e6c7900000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526179389061754c565b8061799d5750604080518082018252601181527f4c47504c2d322e312d6f722d6c617465720000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261799d9061754c565b156179dd57505060408051808201909152600c81527f474e55204c47504c76322e3100000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4c47504c2d332e302d6f6e6c790000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617a3c9061754c565b80617aa15750604080518082018252601181527f4c47504c2d332e302d6f722d6c6174657200000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617aa19061754c565b15617ae157505060408051808201909152600a81527f474e55204c47504c7633000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f4253442d322d436c61757365000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617b409061754c565b15617b8057505060408051808201909152600c81527f4253442d322d436c6175736500000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f4253442d332d436c61757365000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617bdf9061754c565b15617c1f57505060408051808201909152600c81527f4253442d332d436c6175736500000000000000000000000000000000000000006020820152919050565b604080518082018252600781527f4d504c2d322e300000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617c7e9061754c565b15617cbe57505060408051808201909152600781527f4d504c2d322e30000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600781527f4f534c2d332e300000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617d1d9061754c565b15617d5d57505060408051808201909152600781527f4f534c2d332e30000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600a81527f4170616368652d322e300000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617dbc9061754c565b15617dfc57505060408051808201909152600a81527f4170616368652d322e30000000000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4147504c2d332e302d6f6e6c790000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617e5b9061754c565b80617ec05750604080518082018252601181527f4147504c2d332e302d6f722d6c6174657200000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617ec09061754c565b15617f0057505060408051808201909152600a81527f474e55204147504c7633000000000000000000000000000000000000000000006020820152919050565b604080518082018252600881527f4255534c2d312e3100000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617f5f9061754c565b15617f9f57505060408051808201909152600781527f42534c20312e31000000000000000000000000000000000000000000000000006020820152919050565b6040808401518451915161504b929060200161a403565b60608060005b84518110156180415781858281518110617fd857617fd8619cd5565b6020026020010151604051602001617ff19291906198bc565b6040516020818303038152906040529150600185516180109190619779565b81146180395781604051602001618027919061a56c565b60405160208183030381529060405291505b600101617fbc565b5060408051600380825260808201909252600091816020015b606081526020019060019003908161805a579050509050838160008151811061808557618085619cd5565b60200260200101819052506040518060400160405280600281526020017f2d63000000000000000000000000000000000000000000000000000000000000815250816001815181106180d9576180d9619cd5565b602002602001018190525081816002815181106180f8576180f8619cd5565b6020908102919091010152949350505050565b60208083015183518351928401516000936181299291849190618b02565b14159392505050565b604080518082019091526000808252602082015260006181648460000151856020015185600001518660200151618c13565b90508360200151816181769190619779565b84518590618185908390619779565b90525060208401525090919050565b60408051808201909152600080825260208201528151835110156181b9575081614dc3565b60208083015190840151600191146181e05750815160208481015190840151829020919020145b8015618211578251845185906181f7908390619779565b905250825160208501805161820d908390619766565b9052505b509192915050565b6040805180820190915260008082526020820152618238838383618d33565b5092915050565b60606000826000015167ffffffffffffffff81111561826057618260619603565b6040519080825280601f01601f19166020018201604052801561828a576020820181803683370190505b50905060006020820190506182388185602001518660000151618dde565b606060006182b4615271565b6040805160ff808252612000820190925291925060009190816020015b60608152602001906001900390816182d157905050905060006040518060400160405280600381526020017f6e7078000000000000000000000000000000000000000000000000000000000081525082828061832c90619e42565b935060ff168151811061834157618341619cd5565b60200260200101819052506040518060400160405280600781526020017f5e312e33322e3300000000000000000000000000000000000000000000000000815250604051602001618392919061a5ad565b6040516020818303038152906040528282806183ad90619e42565b935060ff16815181106183c2576183c2619cd5565b60200260200101819052506040518060400160405280600881526020017f76616c696461746500000000000000000000000000000000000000000000000081525082828061840f90619e42565b935060ff168151811061842457618424619cd5565b6020026020010181905250826040516020016184409190619d70565b60405160208183030381529060405282828061845b90619e42565b935060ff168151811061847057618470619cd5565b60200260200101819052506040518060400160405280600a81526020017f2d2d636f6e7472616374000000000000000000000000000000000000000000008152508282806184bd90619e42565b935060ff16815181106184d2576184d2619cd5565b60200260200101819052506184e78784618e58565b82826184f281619e42565b935060ff168151811061850757618507619cd5565b6020908102919091010152855151156185b35760408051808201909152600b81527f2d2d7265666572656e63650000000000000000000000000000000000000000006020820152828261855981619e42565b935060ff168151811061856e5761856e619cd5565b6020026020010181905250618587866000015184618e58565b828261859281619e42565b935060ff16815181106185a7576185a7619cd5565b60200260200101819052505b8560800151156186215760408051808201909152601881527f2d2d756e73616665536b697053746f72616765436865636b0000000000000000602082015282826185fc81619e42565b935060ff168151811061861157618611619cd5565b6020026020010181905250618687565b84156186875760408051808201909152601281527f2d2d726571756972655265666572656e636500000000000000000000000000006020820152828261866681619e42565b935060ff168151811061867b5761867b619cd5565b60200260200101819052505b604086015151156187235760408051808201909152600d81527f2d2d756e73616665416c6c6f7700000000000000000000000000000000000000602082015282826186d181619e42565b935060ff16815181106186e6576186e6619cd5565b6020026020010181905250856040015182828061870290619e42565b935060ff168151811061871757618717619cd5565b60200260200101819052505b85606001511561878d5760408051808201909152601481527f2d2d756e73616665416c6c6f7752656e616d65730000000000000000000000006020820152828261876c81619e42565b935060ff168151811061878157618781619cd5565b60200260200101819052505b60008160ff1667ffffffffffffffff8111156187ab576187ab619603565b6040519080825280602002602001820160405280156187de57816020015b60608152602001906001900390816187c95790505b50905060005b8260ff168160ff16101561883757838160ff168151811061880757618807619cd5565b6020026020010151828260ff168151811061882457618824619cd5565b60209081029190910101526001016187e4565b50979650505050505050565b6040805180820190915260008082526020820152815183511015618868575081614dc3565b8151835160208501516000929161887e91619766565b6188889190619779565b602084015190915060019082146188a9575082516020840151819020908220145b80156188c4578351855186906188c0908390619779565b9052505b50929392505050565b60008082600001516188f18560000151866020015186600001518760200151618c13565b6188fb9190619766565b90505b8351602085015161890f9190619766565b8111618238578161891f8161a5f2565b925050826000015161895685602001518361893a9190619779565b86516189469190619779565b8386600001518760200151618c13565b6189609190619766565b90506188fe565b6060600061897584846188cd565b618980906001619766565b67ffffffffffffffff81111561899857618998619603565b6040519080825280602002602001820160405280156189cb57816020015b60608152602001906001900390816189b65790505b50905060005b8151811015616c40576189e7616e628686618219565b8282815181106189f9576189f9619cd5565b60209081029190910101526001016189d1565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310618a55577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310618a81576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc100008310618a9f57662386f26fc10000830492506010015b6305f5e1008310618ab7576305f5e100830492506008015b6127108310618acb57612710830492506004015b60648310618add576064830492506002015b600a8310614dc35760010192915050565b6000618afa8383618e98565b159392505050565b600080858411618c095760208411618bb55760008415618b4d576001618b29866020619779565b618b3490600861a60c565b618b3f90600261a70a565b618b499190619779565b1990505b8351811685618b5c8989619766565b618b669190619779565b805190935082165b818114618ba057878411618b885787945050505050616871565b83618b928161a716565b945050828451169050618b6e565b618baa8785619766565b945050505050616871565b838320618bc28588619779565b618bcc9087619766565b91505b858210618c0757848220808203618bf457618bea8684619766565b9350505050616871565b618bff600184619779565b925050618bcf565b505b5092949350505050565b60008381868511618d1e5760208511618ccd5760008515618c5f576001618c3b876020619779565b618c4690600861a60c565b618c5190600261a70a565b618c5b9190619779565b1990505b84518116600087618c708b8b619766565b618c7a9190619779565b855190915083165b828114618cbf57818610618ca757618c9a8b8b619766565b9650505050505050616871565b85618cb18161a5f2565b965050838651169050618c82565b859650505050505050616871565b508383206000905b618cdf8689619779565b8211618d1c57858320808203618cfb5783945050505050616871565b618d06600185619766565b9350508180618d149061a5f2565b925050618cd5565b505b618d288787619766565b979650505050505050565b60408051808201909152600080825260208201526000618d658560000151866020015186600001518760200151618c13565b602080870180519186019190915251909150618d819082619779565b835284516020860151618d949190619766565b8103618da35760008552618dd5565b83518351618db19190619766565b85518690618dc0908390619779565b9052508351618dcf9082619766565b60208601525b50909392505050565b60208110618e165781518352618df5602084619766565b9250618e02602083619766565b9150618e0f602082619779565b9050618dde565b6000198115618e45576001618e2c836020619779565b618e389061010061a70a565b618e429190619779565b90505b9151835183169219169190911790915250565b60606000618e668484615344565b8051602080830151604051939450618e809390910161a72d565b60405160208183030381529060405291505092915050565b8151815160009190811115618eab575081515b6020808501519084015160005b83811015618f645782518251808214618f34576000196020871015618f1357600184618ee5896020619779565b618eef9190619766565b618efa90600861a60c565b618f0590600261a70a565b618f0f9190619779565b1990505b8181168382168181039114618f31579750614dc39650505050505050565b50505b618f3f602086619766565b9450618f4c602085619766565b93505050602081618f5d9190619766565b9050618eb8565b50845186516159f2919061a785565b610b678061a7a683390190565b61106f8061b30d83390190565b611bb98061c37c83390190565b6040518060e00160405280606081526020016060815260200160608152602001600015158152602001600015158152602001600015158152602001618fdd618fe2565b905290565b60405180610100016040528060001515815260200160001515815260200160608152602001600080191681526020016060815260200160608152602001600015158152602001618fdd6040518060800160405280600081526020016000815260200160008152602001600081525090565b602080825282518282018190526000918401906040840190835b818110156190945783516001600160a01b031683526020938401939092019160010161906d565b509095945050505050565b60005b838110156190ba5781810151838201526020016190a2565b50506000910152565b600081518084526190db81602086016020860161909f565b601f01601f19169290920160200192915050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b828110156191eb577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452815180516001600160a01b03168652602090810151604082880181905281519088018190529101906060600582901b88018101919088019060005b818110156191d1577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa08a85030183526191bb8486516190c3565b6020958601959094509290920191600101619181565b509197505050602094850194929092019150600101619117565b50929695505050505050565b600081518084526020840193506020830160005b8281101561924b5781517fffffffff000000000000000000000000000000000000000000000000000000001686526020958601959091019060010161920b565b5093949350505050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b828110156191eb577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc087860301845281518051604087526192c160408801826190c3565b90506020820151915086810360208801526192dc81836191f7565b96505050602093840193919091019060010161927d565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b828110156191eb577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08786030184526193558583516190c3565b9450602093840193919091019060010161931b565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b828110156191eb577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc087860301845281516001600160a01b03815116865260208101519050604060208701526193eb60408701826191f7565b9550506020938401939190910190600101619392565b60006020828403121561941357600080fd5b81518015158114614f7857600080fd5b80516001600160a01b038116811461943a57600080fd5b919050565b60006020828403121561945157600080fd5b614f7882619423565b610100815260056101008201527f544f4b454e000000000000000000000000000000000000000000000000000000610120820152610140602082015260036101408201527f544b4e000000000000000000000000000000000000000000000000000000000061016082015260006101808201905060ff8816604083015286606083015260038610619514577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b8560808301528460a083015261953560c08301856001600160a01b03169052565b6001600160a01b03831660e0830152979650505050505050565b60006020828403121561956157600080fd5b5051919050565b600181811c9082168061957c57607f821691505b60208210810361713d577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600080604083850312156195c857600080fd5b6195d183619423565b6020939093015192949293505050565b6040815260006195f460408301856190c3565b90508260208301529392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040516060810167ffffffffffffffff8111828210171561965557619655619603565b60405290565b60008067ffffffffffffffff84111561967657619676619603565b50604051601f19601f85018116603f0116810181811067ffffffffffffffff821117156196a5576196a5619603565b6040528381529050808284018510156196bd57600080fd5b616c4084602083018561909f565b6000602082840312156196dd57600080fd5b815167ffffffffffffffff8111156196f457600080fd5b8201601f8101841361970557600080fd5b614dbf8482516020840161965b565b60006020828403121561972657600080fd5b815160ff81168114614f7857600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b80820180821115614dc357614dc3619737565b81810381811115614dc357614dc3619737565b60408152600061979f60408301856190c3565b8281036020840152614f7481856190c3565b6001600160a01b038316815260406020820152600061687160408301846190c3565b7f4661696c656420746f206465706c6f7920636f6e74726163742000000000000081526000835161980b81601a85016020880161909f565b7f3a20000000000000000000000000000000000000000000000000000000000000601a91840191820152835161984881601c84016020880161909f565b01601c01949350505050565b602081526000614f7860208301846190c3565b600082601f83011261987857600080fd5b614f788383516020850161965b565b60006020828403121561989957600080fd5b815167ffffffffffffffff8111156198b057600080fd5b614dbf84828501619867565b600083516198ce81846020880161909f565b8351908301906198e281836020880161909f565b01949350505050565b7f4661696c656420746f206465706c6f7920636f6e74726163742000000000000081526000835161992381601a85016020880161909f565b7f207573696e6720636f6e7374727563746f722064617461202200000000000000601a91840191820152835161996081603384016020880161909f565b7f220000000000000000000000000000000000000000000000000000000000000060339290910191820152603401949350505050565b60408152600b60408201527f464f554e4452595f4f55540000000000000000000000000000000000000000006060820152608060208201526000614f7860808301846190c3565b600085516199ef818460208a0161909f565b7f2f000000000000000000000000000000000000000000000000000000000000009083019081528551619a29816001840160208a0161909f565b7f2f00000000000000000000000000000000000000000000000000000000000000600192909101918201528451619a6781600284016020890161909f565b6001818301019150507f2f0000000000000000000000000000000000000000000000000000000000000060018201528351619aa981600284016020880161909f565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600292909101918201526007019695505050505050565b604081526000619af460408301846190c3565b8281036020840152600481527f2e6173740000000000000000000000000000000000000000000000000000000060208201526040810191505092915050565b7f436f756c64206e6f742066696e642041535420696e2061727469666163742000815260008251619b6b81601f85016020870161909f565b7f2e205365742060617374203d20747275656020696e20666f756e6472792e746f601f9390910192830152507f6d6c000000000000000000000000000000000000000000000000000000000000603f820152604101919050565b604081526000619bd860408301846190c3565b8281036020840152601181527f2e6173742e6162736f6c7574655061746800000000000000000000000000000060208201526040810191505092915050565b604081526000619c2a60408301846190c3565b8281036020840152600c81527f2e6173742e6c6963656e7365000000000000000000000000000000000000000060208201526040810191505092915050565b7f2e6d657461646174612e736f75726365732e5b27000000000000000000000000815260008251619ca181601485016020870161909f565b7f275d2e6b656363616b32353600000000000000000000000000000000000000006014939091019283015250602001919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f2200000000000000000000000000000000000000000000000000000000000000815260008251619d3c81600185016020870161909f565b7f22000000000000000000000000000000000000000000000000000000000000006001939091019283015250600201919050565b60008251619d8281846020870161909f565b7f2f6275696c642d696e666f000000000000000000000000000000000000000000920191825250600b01919050565b7f436f756c64206e6f742066696e64206275696c642d696e666f2066696c65207781527f697468206d61746368696e6720736f7572636520636f6465206861736820666f60208201527f7220636f6e747261637420000000000000000000000000000000000000000000604082015260008251619e3581604b85016020870161909f565b91909101604b0192915050565b600060ff821660ff8103619e5857619e58619737565b60010192915050565b7f406f70656e7a657070656c696e2f646566656e6465722d6465706c6f792d636c81527f69656e742d636c69400000000000000000000000000000000000000000000000602082015260008251619ebf81602985016020870161909f565b9190910160290192915050565b60408152601660408201527f4f50454e5a455050454c494e5f424153485f50415448000000000000000000006060820152608060208201526000614f7860808301846190c3565b600060208284031215619f2557600080fd5b815167ffffffffffffffff811115619f3c57600080fd5b820160608185031215619f4e57600080fd5b619f56619632565b81518060030b8114619f6757600080fd5b8152602082015167ffffffffffffffff811115619f8357600080fd5b619f8f86828501619867565b602083015250604082015167ffffffffffffffff811115619faf57600080fd5b619fbb86828501619867565b604083015250949350505050565b7f4661696c656420746f2072756e206261736820636f6d6d616e6420776974682081527f220000000000000000000000000000000000000000000000000000000000000060208201526000825161a02781602185016020870161909f565b7f222e20496620796f7520617265207573696e672057696e646f77732c2073657460219390910192830152507f20746865204f50454e5a455050454c494e5f424153485f5041544820656e766960418201527f726f6e6d656e74207661726961626c6520746f207468652066756c6c7920717560618201527f616c69666965642070617468206f66207468652062617368206578656375746160818201527f626c652e20466f72206578616d706c652c20696620796f75206172652075736960a18201527f6e672047697420666f722057696e646f77732c206164642074686520666f6c6c60c18201527f6f77696e67206c696e6520696e20746865202e656e762066696c65206f66207960e18201527f6f75722070726f6a65637420287573696e6720666f727761726420736c6173686101018201527f6573293a0a4f50454e5a455050454c494e5f424153485f504154483d22433a2f6101218201527f50726f6772616d2046696c65732f4769742f62696e2f6261736822000000000061014182015261015c01919050565b7f4661696c656420746f2066696e64206c696e652077697468207072656669782081527f270000000000000000000000000000000000000000000000000000000000000060208201526000835161a21381602185016020880161909f565b7f2720696e206f75747075743a2000000000000000000000000000000000000000602191840191820152835161a25081602e84016020880161909f565b01602e01949350505050565b7f4661696c656420746f2072756e2075706772616465207361666574792076616c81527f69646174696f6e3a200000000000000000000000000000000000000000000000602082015260008251619ebf81602985016020870161909f565b7f55706772616465207361666574792076616c69646174696f6e206661696c656481527f3a0a00000000000000000000000000000000000000000000000000000000000060208201526000825161a31881602285016020870161909f565b9190910160220192915050565b7f436f6e7472616374206e616d652000000000000000000000000000000000000081526000825161a35d81600e85016020870161909f565b7f206d75737420626520696e2074686520666f726d6174204d79436f6e74726163600e9390910192830152507f742e736f6c3a4d79436f6e7472616374206f72204d79436f6e74726163742e73602e8201527f6f6c206f72206f75742f4d79436f6e74726163742e736f6c2f4d79436f6e7472604e8201527f6163742e6a736f6e000000000000000000000000000000000000000000000000606e820152607601919050565b7f53504458206c6963656e7365206964656e74696669657220000000000000000081526000835161a43b81601885016020880161909f565b7f20696e2000000000000000000000000000000000000000000000000000000000601891840191820152835161a47881601c84016020880161909f565b7f20646f6573206e6f74206c6f6f6b206c696b65206120737570706f7274656420601c92909101918201527f6c6963656e736520666f7220626c6f636b206578706c6f726572207665726966603c8201527f69636174696f6e2e205573652074686520606c6963656e73655479706560206f605c8201527f7074696f6e20746f20737065636966792061206c6963656e736520747970652c607c8201527f206f7220736574207468652060736b69704c6963656e73655479706560206f70609c8201527f74696f6e20746f2060747275656020746f20736b69702e00000000000000000060bc82015260d301949350505050565b6000825161a57e81846020870161909f565b7f2000000000000000000000000000000000000000000000000000000000000000920191825250600101919050565b7f406f70656e7a657070656c696e2f75706772616465732d636f7265400000000081526000825161a5e581601c85016020870161909f565b91909101601c0192915050565b6000600019820361a6055761a605619737565b5060010190565b8082028115828204841417614dc357614dc3619737565b6001815b600184111561a65e5780850481111561a6425761a642619737565b600184161561a65057908102905b60019390931c92800261a627565b935093915050565b60008261a67557506001614dc3565b8161a68257506000614dc3565b816001811461a698576002811461a6a25761a6be565b6001915050614dc3565b60ff84111561a6b35761a6b3619737565b50506001821b614dc3565b5060208310610133831016604e8410600b841016171561a6e1575081810a614dc3565b61a6ee600019848461a623565b806000190482111561a7025761a702619737565b029392505050565b6000614f78838361a666565b60008161a7255761a725619737565b506000190190565b6000835161a73f81846020880161909f565b7f3a00000000000000000000000000000000000000000000000000000000000000908301908152835161a77981600184016020880161909f565b01600101949350505050565b81810360008312801583831316838312821617156182385761823861973756fe60c0604052600d60809081526c2bb930b83832b21022ba3432b960991b60a05260009061002c9082610114565b506040805180820190915260048152630ae8aa8960e31b60208201526001906100559082610114565b506002805460ff1916601217905534801561006f57600080fd5b506101d2565b634e487b7160e01b600052604160045260246000fd5b600181811c9082168061009f57607f821691505b6020821081036100bf57634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111561010f57806000526020600020601f840160051c810160208510156100ec5750805b601f840160051c820191505b8181101561010c57600081556001016100f8565b50505b505050565b81516001600160401b0381111561012d5761012d610075565b6101418161013b845461008b565b846100c5565b6020601f821160018114610175576000831561015d5750848201515b600019600385901b1c1916600184901b17845561010c565b600084815260208120601f198516915b828110156101a55787850151825560209485019460019092019101610185565b50848210156101c35786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b610986806101e16000396000f3fe6080604052600436106100c05760003560e01c8063313ce56711610074578063a9059cbb1161004e578063a9059cbb146101fa578063d0e30db01461021a578063dd62ed3e1461022257600080fd5b8063313ce5671461018c57806370a08231146101b857806395d89b41146101e557600080fd5b806318160ddd116100a557806318160ddd1461012f57806323b872dd1461014c5780632e1a7d4d1461016c57600080fd5b806306fdde03146100d4578063095ea7b3146100ff57600080fd5b366100cf576100cd61025a565b005b600080fd5b3480156100e057600080fd5b506100e96102b5565b6040516100f69190610745565b60405180910390f35b34801561010b57600080fd5b5061011f61011a3660046107da565b610343565b60405190151581526020016100f6565b34801561013b57600080fd5b50475b6040519081526020016100f6565b34801561015857600080fd5b5061011f610167366004610804565b6103bd565b34801561017857600080fd5b506100cd610187366004610841565b610647565b34801561019857600080fd5b506002546101a69060ff1681565b60405160ff90911681526020016100f6565b3480156101c457600080fd5b5061013e6101d336600461085a565b60036020526000908152604090205481565b3480156101f157600080fd5b506100e9610724565b34801561020657600080fd5b5061011f6102153660046107da565b610731565b6100cd61025a565b34801561022e57600080fd5b5061013e61023d366004610875565b600460209081526000928352604080842090915290825290205481565b33600090815260036020526040812080543492906102799084906108d7565b909155505060405134815233907fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c9060200160405180910390a2565b600080546102c2906108ea565b80601f01602080910402602001604051908101604052809291908181526020018280546102ee906108ea565b801561033b5780601f106103105761010080835404028352916020019161033b565b820191906000526020600020905b81548152906001019060200180831161031e57829003601f168201915b505050505081565b33600081815260046020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925906103ab9086815260200190565b60405180910390a35060015b92915050565b73ffffffffffffffffffffffffffffffffffffffff831660009081526003602052604081205482111561042b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600060248201526044015b60405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff841633148015906104a1575073ffffffffffffffffffffffffffffffffffffffff841660009081526004602090815260408083203384529091529020547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff14155b156105605773ffffffffffffffffffffffffffffffffffffffff8416600090815260046020908152604080832033845290915290205482111561051a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526020600482015260006024820152604401610422565b73ffffffffffffffffffffffffffffffffffffffff841660009081526004602090815260408083203384529091528120805484929061055a90849061093d565b90915550505b73ffffffffffffffffffffffffffffffffffffffff84166000908152600360205260408120805484929061059590849061093d565b909155505073ffffffffffffffffffffffffffffffffffffffff8316600090815260036020526040812080548492906105cf9084906108d7565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161063591815260200190565b60405180910390a35060019392505050565b3360009081526003602052604090205481111561069a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526020600482015260006024820152604401610422565b33600090815260036020526040812080548392906106b990849061093d565b9091555050604051339082156108fc029083906000818181858888f193505050501580156106eb573d6000803e3d6000fd5b5060405181815233907f7fcf532c15f0a6db0bd6d0e038bea71d30d808c7d98cb3bf7268a95bf5081b659060200160405180910390a250565b600180546102c2906108ea565b600061073e3384846103bd565b9392505050565b602081526000825180602084015260005b818110156107735760208186018101516040868401015201610756565b5060006040828501015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011684010191505092915050565b803573ffffffffffffffffffffffffffffffffffffffff811681146107d557600080fd5b919050565b600080604083850312156107ed57600080fd5b6107f6836107b1565b946020939093013593505050565b60008060006060848603121561081957600080fd5b610822846107b1565b9250610830602085016107b1565b929592945050506040919091013590565b60006020828403121561085357600080fd5b5035919050565b60006020828403121561086c57600080fd5b61073e826107b1565b6000806040838503121561088857600080fd5b610891836107b1565b915061089f602084016107b1565b90509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b808201808211156103b7576103b76108a8565b600181811c908216806108fe57607f821691505b602082108103610937577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b818103818111156103b7576103b76108a856fea264697066735822122008d7fc4e09519c5dd9f356b03596f6829a151d0bc7682533f9ceab4e459f5ee264736f6c634300081a003360c060405234801561001057600080fd5b5060405161106f38038061106f83398101604081905261002f916100db565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461006357604051632b2add3d60e01b815260040160405180910390fd5b600380546001600160a01b0319166001600160a01b0385811691909117909155828116608052811660a0526040517f80699e81136d69cb8367ad52a994e25c722a86da654b561d0c14b61a777e7ac590600090a150505061011e565b80516001600160a01b03811681146100d657600080fd5b919050565b6000806000606084860312156100f057600080fd5b6100f9846100bf565b9250610107602085016100bf565b9150610115604085016100bf565b90509250925092565b60805160a051610f2561014a60003960006101e50152600081816102b9015261045b0152610f256000f3fe608060405234801561001057600080fd5b50600436106100f55760003560e01c806397770dff11610097578063c63585cc11610066578063c63585cc14610273578063d7fd7afb14610286578063d936a012146102b4578063ee2815ba146102db57600080fd5b806397770dff1461021a578063a7cb05071461022d578063c39aca3714610240578063c62178ac1461025357600080fd5b8063513a9c05116100d3578063513a9c051461018a578063569541b9146101c0578063842da36d146101e057806391dd645f1461020757600080fd5b80630be15547146100fa5780631f0e251b1461015a5780633ce4a5bc1461016f575b600080fd5b610130610108366004610bd1565b60016020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b61016d610168366004610c13565b6102ee565b005b61013073735b14bb79463307aacbed86daf3322b1e6226ab81565b610130610198366004610bd1565b60026020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b6003546101309073ffffffffffffffffffffffffffffffffffffffff1681565b6101307f000000000000000000000000000000000000000000000000000000000000000081565b61016d610215366004610c35565b610402565b61016d610228366004610c13565b610526565b61016d61023b366004610c61565b610633565b61016d61024e366004610c83565b6106ce565b6004546101309073ffffffffffffffffffffffffffffffffffffffff1681565b610130610281366004610d53565b6108cd565b6102a6610294366004610bd1565b60006020819052908152604090205481565b604051908152602001610151565b6101307f000000000000000000000000000000000000000000000000000000000000000081565b61016d6102e9366004610c35565b610a02565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461033b576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116610388576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600480547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527f3ade88e3922d64780e1bf4460d364c2970b69da813f9c0c07a1c187b5647636c906020015b60405180910390a150565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461044f576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600354600090610497907f00000000000000000000000000000000000000000000000000000000000000009073ffffffffffffffffffffffffffffffffffffffff16846108cd565b60008481526002602090815260409182902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff85169081179091558251878152918201529192507f0ecec485166da6139b13bb7e033e9446e2d35348e80ebf1180d4afe2dba1704e910160405180910390a1505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610573576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff81166105c0576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527fdba79d534382d1a8ae108e4c8ecb27c6ae42ab8b91d44eedf88bd329f3868d5e906020016103f7565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610680576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000828152602081815260409182902083905581518481529081018390527f49f492222906ac486c3c1401fa545626df1f0c0e5a77a05597ea2ed66af9850d91015b60405180910390a15050565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461071b576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff831673735b14bb79463307aacbed86daf3322b1e6226ab1480610768575073ffffffffffffffffffffffffffffffffffffffff831630145b1561079f576040517f82d5d76a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f47e7ef2400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152602482018690528616906347e7ef24906044016020604051808303816000875af1158015610814573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108389190610d96565b506040517fde43156e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84169063de43156e906108939089908990899088908890600401610e01565b600060405180830381600087803b1580156108ad57600080fd5b505af11580156108c1573d6000803e3d6000fd5b50505050505050505050565b60008060006108dc8585610ad3565b6040517fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606084811b8216602084015283901b16603482015291935091508690604801604051602081830303815290604052805190602001206040516020016109c29291907fff00000000000000000000000000000000000000000000000000000000000000815260609290921b7fffffffffffffffffffffffffffffffffffffffff00000000000000000000000016600183015260158201527f96e8ac4277198ff8b6f785478aa9a39f403cb768dd02cbee326c3e7da348845f603582015260550190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291905280516020909101209695505050505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610a4f576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008281526001602090815260409182902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff85169081179091558251858152918201527fd1b36d30f6248e97c473b4d1348ca164a4ef6759022f54a58ec200326c39c45d91016106c2565b6000808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603610b3b576040517fcb1e7cfe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1610610b75578284610b78565b83835b909250905073ffffffffffffffffffffffffffffffffffffffff8216610bca576040517f78b507da00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b9250929050565b600060208284031215610be357600080fd5b5035919050565b803573ffffffffffffffffffffffffffffffffffffffff81168114610c0e57600080fd5b919050565b600060208284031215610c2557600080fd5b610c2e82610bea565b9392505050565b60008060408385031215610c4857600080fd5b82359150610c5860208401610bea565b90509250929050565b60008060408385031215610c7457600080fd5b50508035926020909101359150565b60008060008060008060a08789031215610c9c57600080fd5b863567ffffffffffffffff811115610cb357600080fd5b87016060818a031215610cc557600080fd5b9550610cd360208801610bea565b945060408701359350610ce860608801610bea565b9250608087013567ffffffffffffffff811115610d0457600080fd5b8701601f81018913610d1557600080fd5b803567ffffffffffffffff811115610d2c57600080fd5b896020828401011115610d3e57600080fd5b60208201935080925050509295509295509295565b600080600060608486031215610d6857600080fd5b610d7184610bea565b9250610d7f60208501610bea565b9150610d8d60408501610bea565b90509250925092565b600060208284031215610da857600080fd5b81518015158114610c2e57600080fd5b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b60808152600086357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1883603018112610e3957600080fd5b870160208101903567ffffffffffffffff811115610e5657600080fd5b803603821315610e6557600080fd5b60606080850152610e7a60e085018284610db8565b91505073ffffffffffffffffffffffffffffffffffffffff610e9e60208a01610bea565b1660a0840152604088013560c084015273ffffffffffffffffffffffffffffffffffffffff871660208401528560408401528281036060840152610ee3818587610db8565b9897505050505050505056fea2646970667358221220431a07541a491b54259bdf8fcd05ade6751bfbbf0e72e605f27325b56d7d464f64736f6c634300081a003360e060405234801561001057600080fd5b50604051611bb9380380611bb983398101604081905261002f9161020e565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461006357604051632b2add3d60e01b815260040160405180910390fd5b6001600160a01b038216158061008057506001600160a01b038116155b1561009e5760405163d92e233d60e01b815260040160405180910390fd5b60066100aa8982610360565b5060076100b78882610360565b5060ff861660c05260808590528360028111156100d6576100d661041e565b60a08160028111156100ea576100ea61041e565b905250600192909255600080546001600160a01b039283166001600160a01b03199182161790915560088054929093169116179055506104349350505050565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261015157600080fd5b81516001600160401b0381111561016a5761016a61012a565b604051601f8201601f19908116603f011681016001600160401b03811182821017156101985761019861012a565b6040528181528382016020018510156101b057600080fd5b60005b828110156101cf576020818601810151838301820152016101b3565b506000918101602001919091529392505050565b8051600381106101f257600080fd5b919050565b80516001600160a01b03811681146101f257600080fd5b600080600080600080600080610100898b03121561022b57600080fd5b88516001600160401b0381111561024157600080fd5b61024d8b828c01610140565b60208b015190995090506001600160401b0381111561026b57600080fd5b6102778b828c01610140565b975050604089015160ff8116811461028e57600080fd5b60608a015190965094506102a460808a016101e3565b60a08a015190945092506102ba60c08a016101f7565b91506102c860e08a016101f7565b90509295985092959890939650565b600181811c908216806102eb57607f821691505b60208210810361030b57634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111561035b57806000526020600020601f840160051c810160208510156103385750805b601f840160051c820191505b818110156103585760008155600101610344565b50505b505050565b81516001600160401b038111156103795761037961012a565b61038d8161038784546102d7565b84610311565b6020601f8211600181146103c157600083156103a95750848201515b600019600385901b1c1916600184901b178455610358565b600084815260208120601f198516915b828110156103f157878501518255602094850194600190920191016103d1565b508482101561040f5786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b634e487b7160e01b600052602160045260246000fd5b60805160a05160c05161174861047160003960006102170152600061033a0152600081816102eb01528181610ad70152610bdd01526117486000f3fe608060405234801561001057600080fd5b50600436106101985760003560e01c80638b851b95116100e3578063ccc775991161008c578063eddeb12311610066578063eddeb12314610431578063f2441b3214610444578063f687d12a1461046457600080fd5b8063ccc77599146103a4578063d9eeebed146103b7578063dd62ed3e146103eb57600080fd5b8063a9059cbb116100bd578063a9059cbb14610369578063c70126261461037c578063c835d7cc1461038f57600080fd5b80638b851b951461030d57806395d89b411461032d578063a3413d031461033557600080fd5b80633ce4a5bc116101455780634d8943bb1161011f5780634d8943bb146102a757806370a08231146102b057806385e1f4d0146102e657600080fd5b80633ce4a5bc1461024157806342966c681461028157806347e7ef241461029457600080fd5b806318160ddd1161017657806318160ddd146101f557806323b872dd146101fd578063313ce5671461021057600080fd5b806306fdde031461019d578063091d2788146101bb578063095ea7b3146101d2575b600080fd5b6101a5610477565b6040516101b29190611327565b60405180910390f35b6101c460015481565b6040519081526020016101b2565b6101e56101e0366004611366565b610509565b60405190151581526020016101b2565b6005546101c4565b6101e561020b366004611392565b610520565b60405160ff7f00000000000000000000000000000000000000000000000000000000000000001681526020016101b2565b61025c73735b14bb79463307aacbed86daf3322b1e6226ab81565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101b2565b6101e561028f3660046113d3565b6105b7565b6101e56102a2366004611366565b6105cb565b6101c460025481565b6101c46102be3660046113ec565b73ffffffffffffffffffffffffffffffffffffffff1660009081526003602052604090205490565b6101c47f000000000000000000000000000000000000000000000000000000000000000081565b60085461025c9073ffffffffffffffffffffffffffffffffffffffff1681565b6101a561071f565b61035c7f000000000000000000000000000000000000000000000000000000000000000081565b6040516101b29190611409565b6101e5610377366004611366565b61072e565b6101e561038a366004611479565b61073b565b6103a261039d3660046113ec565b61088a565b005b6103a26103b23660046113ec565b61099e565b6103bf610aab565b6040805173ffffffffffffffffffffffffffffffffffffffff90931683526020830191909152016101b2565b6101c46103f9366004611571565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260046020908152604080832093909416825291909152205490565b6103a261043f3660046113d3565b610cc9565b60005461025c9073ffffffffffffffffffffffffffffffffffffffff1681565b6103a26104723660046113d3565b610d4b565b606060068054610486906115aa565b80601f01602080910402602001604051908101604052809291908181526020018280546104b2906115aa565b80156104ff5780601f106104d4576101008083540402835291602001916104ff565b820191906000526020600020905b8154815290600101906020018083116104e257829003601f168201915b5050505050905090565b6000610516338484610dcd565b5060015b92915050565b600061052d848484610ed6565b73ffffffffffffffffffffffffffffffffffffffff8416600090815260046020908152604080832033845290915290205482811015610598576040517f10bad14700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6105ac85336105a7868561162c565b610dcd565b506001949350505050565b60006105c33383611091565b506001919050565b60003373735b14bb79463307aacbed86daf3322b1e6226ab14801590610609575060005473ffffffffffffffffffffffffffffffffffffffff163314155b801561062d575060085473ffffffffffffffffffffffffffffffffffffffff163314155b15610664576040517fddb5de5e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61066e83836111d3565b6040517f735b14bb79463307aacbed86daf3322b1e6226ab000000000000000000000000602082015273ffffffffffffffffffffffffffffffffffffffff8416907f67fc7bdaed5b0ec550d8706b87d60568ab70c6b781263c70101d54cd1564aab390603401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529082905261070e91869061163f565b60405180910390a250600192915050565b606060078054610486906115aa565b6000610516338484610ed6565b6000806000610748610aab565b6040517f23b872dd00000000000000000000000000000000000000000000000000000000815233600482015273735b14bb79463307aacbed86daf3322b1e6226ab602482015260448101829052919350915073ffffffffffffffffffffffffffffffffffffffff8316906323b872dd906064016020604051808303816000875af11580156107da573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107fe9190611661565b610834576040517f0a7cd6d600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61083e3385611091565b60025460405133917f9ffbffc04a397460ee1dbe8c9503e098090567d6b7f4b3c02a8617d800b6d9559161087791899189918791611683565b60405180910390a2506001949350505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab146108d7576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116610924576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527fd55614e962c5fd6ece71614f6348d702468a997a394dd5e5c1677950226d97ae906020015b60405180910390a150565b3373735b14bb79463307aacbed86daf3322b1e6226ab146109eb576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116610a38576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600880547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527f88815d964e380677e86d817e7d65dea59cb7b4c3b5b7a0c8ec7ea4a74f90a38790602001610993565b600080546040517f0be155470000000000000000000000000000000000000000000000000000000081527f000000000000000000000000000000000000000000000000000000000000000060048201528291829173ffffffffffffffffffffffffffffffffffffffff90911690630be1554790602401602060405180830381865afa158015610b3e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b6291906116b2565b905073ffffffffffffffffffffffffffffffffffffffff8116610bb1576040517f78fff39600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080546040517fd7fd7afb0000000000000000000000000000000000000000000000000000000081527f0000000000000000000000000000000000000000000000000000000000000000600482015273ffffffffffffffffffffffffffffffffffffffff9091169063d7fd7afb90602401602060405180830381865afa158015610c40573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c6491906116cf565b905080600003610ca0576040517fe661aed000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060025460015483610cb391906116e8565b610cbd91906116ff565b92959294509192505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610d16576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60028190556040518181527fef13af88e424b5d15f49c77758542c1938b08b8b95b91ed0751f98ba99000d8f90602001610993565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610d98576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018190556040518181527fff5788270f43bfc1ca41c503606d2594aa3023a1a7547de403a3e2f146a4a80a90602001610993565b73ffffffffffffffffffffffffffffffffffffffff8316610e1a576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216610e67576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff83811660008181526004602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8316610f23576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216610f70576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff831660009081526003602052604090205481811015610fd0576040517ffe382aa700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610fda828261162c565b73ffffffffffffffffffffffffffffffffffffffff808616600090815260036020526040808220939093559085168152908120805484929061101d9084906116ff565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161108391815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff82166110de576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff82166000908152600360205260409020548181101561113e576040517ffe382aa700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611148828261162c565b73ffffffffffffffffffffffffffffffffffffffff84166000908152600360205260408120919091556005805484929061118390849061162c565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90602001610ec9565b73ffffffffffffffffffffffffffffffffffffffff8216611220576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b806005600082825461123291906116ff565b909155505073ffffffffffffffffffffffffffffffffffffffff82166000908152600360205260408120805483929061126c9084906116ff565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6000815180845260005b818110156112e9576020818501810151868301820152016112cd565b5060006020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b60208152600061133a60208301846112c3565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff8116811461136357600080fd5b50565b6000806040838503121561137957600080fd5b823561138481611341565b946020939093013593505050565b6000806000606084860312156113a757600080fd5b83356113b281611341565b925060208401356113c281611341565b929592945050506040919091013590565b6000602082840312156113e557600080fd5b5035919050565b6000602082840312156113fe57600080fd5b813561133a81611341565b6020810160038310611444577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000806040838503121561148c57600080fd5b823567ffffffffffffffff8111156114a357600080fd5b8301601f810185136114b457600080fd5b803567ffffffffffffffff8111156114ce576114ce61144a565b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8501160116810181811067ffffffffffffffff8211171561153a5761153a61144a565b60405281815282820160200187101561155257600080fd5b8160208401602083013760006020928201830152969401359450505050565b6000806040838503121561158457600080fd5b823561158f81611341565b9150602083013561159f81611341565b809150509250929050565b600181811c908216806115be57607f821691505b6020821081036115f7577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8181038181111561051a5761051a6115fd565b60408152600061165260408301856112c3565b90508260208301529392505050565b60006020828403121561167357600080fd5b8151801515811461133a57600080fd5b60808152600061169660808301876112c3565b6020830195909552506040810192909252606090910152919050565b6000602082840312156116c457600080fd5b815161133a81611341565b6000602082840312156116e157600080fd5b5051919050565b808202811582820484141761051a5761051a6115fd565b8082018082111561051a5761051a6115fd56fea26469706673582212204013e39523742118b3f2227e145ee7e48176ba6aebead33c596dca2acb59a74c64736f6c634300081a0033a2646970667358221220573f1cc6799103b470ec41dd299a89dd6b87e46cbfed0317f99a81a6e0a5904a64736f6c634300081a0033", } // ZRC20TestABI is the input ABI used to generate the binding from. @@ -613,6 +613,27 @@ func (_ZRC20Test *ZRC20TestTransactorSession) SetUp() (*types.Transaction, error return _ZRC20Test.Contract.SetUp(&_ZRC20Test.TransactOpts) } +// TestApproveFailsIfRecipientIsZeroAddress is a paid mutator transaction binding the contract method 0x4cfc0aaa. +// +// Solidity: function testApproveFailsIfRecipientIsZeroAddress() returns() +func (_ZRC20Test *ZRC20TestTransactor) TestApproveFailsIfRecipientIsZeroAddress(opts *bind.TransactOpts) (*types.Transaction, error) { + return _ZRC20Test.contract.Transact(opts, "testApproveFailsIfRecipientIsZeroAddress") +} + +// TestApproveFailsIfRecipientIsZeroAddress is a paid mutator transaction binding the contract method 0x4cfc0aaa. +// +// Solidity: function testApproveFailsIfRecipientIsZeroAddress() returns() +func (_ZRC20Test *ZRC20TestSession) TestApproveFailsIfRecipientIsZeroAddress() (*types.Transaction, error) { + return _ZRC20Test.Contract.TestApproveFailsIfRecipientIsZeroAddress(&_ZRC20Test.TransactOpts) +} + +// TestApproveFailsIfRecipientIsZeroAddress is a paid mutator transaction binding the contract method 0x4cfc0aaa. +// +// Solidity: function testApproveFailsIfRecipientIsZeroAddress() returns() +func (_ZRC20Test *ZRC20TestTransactorSession) TestApproveFailsIfRecipientIsZeroAddress() (*types.Transaction, error) { + return _ZRC20Test.Contract.TestApproveFailsIfRecipientIsZeroAddress(&_ZRC20Test.TransactOpts) +} + // TestBurn is a paid mutator transaction binding the contract method 0xe13aba48. // // Solidity: function testBurn() returns() @@ -676,6 +697,27 @@ func (_ZRC20Test *ZRC20TestTransactorSession) TestDeposit() (*types.Transaction, return _ZRC20Test.Contract.TestDeposit(&_ZRC20Test.TransactOpts) } +// TestDepositFailsIfRecipientIsZeroAddress is a paid mutator transaction binding the contract method 0x0809dfef. +// +// Solidity: function testDepositFailsIfRecipientIsZeroAddress() returns() +func (_ZRC20Test *ZRC20TestTransactor) TestDepositFailsIfRecipientIsZeroAddress(opts *bind.TransactOpts) (*types.Transaction, error) { + return _ZRC20Test.contract.Transact(opts, "testDepositFailsIfRecipientIsZeroAddress") +} + +// TestDepositFailsIfRecipientIsZeroAddress is a paid mutator transaction binding the contract method 0x0809dfef. +// +// Solidity: function testDepositFailsIfRecipientIsZeroAddress() returns() +func (_ZRC20Test *ZRC20TestSession) TestDepositFailsIfRecipientIsZeroAddress() (*types.Transaction, error) { + return _ZRC20Test.Contract.TestDepositFailsIfRecipientIsZeroAddress(&_ZRC20Test.TransactOpts) +} + +// TestDepositFailsIfRecipientIsZeroAddress is a paid mutator transaction binding the contract method 0x0809dfef. +// +// Solidity: function testDepositFailsIfRecipientIsZeroAddress() returns() +func (_ZRC20Test *ZRC20TestTransactorSession) TestDepositFailsIfRecipientIsZeroAddress() (*types.Transaction, error) { + return _ZRC20Test.Contract.TestDepositFailsIfRecipientIsZeroAddress(&_ZRC20Test.TransactOpts) +} + // TestDepositFailsIfSenderIsNotGateway is a paid mutator transaction binding the contract method 0x1142744e. // // Solidity: function testDepositFailsIfSenderIsNotGateway() returns() @@ -697,6 +739,69 @@ func (_ZRC20Test *ZRC20TestTransactorSession) TestDepositFailsIfSenderIsNotGatew return _ZRC20Test.Contract.TestDepositFailsIfSenderIsNotGateway(&_ZRC20Test.TransactOpts) } +// TestTransfer is a paid mutator transaction binding the contract method 0xd591221f. +// +// Solidity: function testTransfer() returns() +func (_ZRC20Test *ZRC20TestTransactor) TestTransfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _ZRC20Test.contract.Transact(opts, "testTransfer") +} + +// TestTransfer is a paid mutator transaction binding the contract method 0xd591221f. +// +// Solidity: function testTransfer() returns() +func (_ZRC20Test *ZRC20TestSession) TestTransfer() (*types.Transaction, error) { + return _ZRC20Test.Contract.TestTransfer(&_ZRC20Test.TransactOpts) +} + +// TestTransfer is a paid mutator transaction binding the contract method 0xd591221f. +// +// Solidity: function testTransfer() returns() +func (_ZRC20Test *ZRC20TestTransactorSession) TestTransfer() (*types.Transaction, error) { + return _ZRC20Test.Contract.TestTransfer(&_ZRC20Test.TransactOpts) +} + +// TestTransferFailsIfNoBalance is a paid mutator transaction binding the contract method 0x8ce7ef05. +// +// Solidity: function testTransferFailsIfNoBalance() returns() +func (_ZRC20Test *ZRC20TestTransactor) TestTransferFailsIfNoBalance(opts *bind.TransactOpts) (*types.Transaction, error) { + return _ZRC20Test.contract.Transact(opts, "testTransferFailsIfNoBalance") +} + +// TestTransferFailsIfNoBalance is a paid mutator transaction binding the contract method 0x8ce7ef05. +// +// Solidity: function testTransferFailsIfNoBalance() returns() +func (_ZRC20Test *ZRC20TestSession) TestTransferFailsIfNoBalance() (*types.Transaction, error) { + return _ZRC20Test.Contract.TestTransferFailsIfNoBalance(&_ZRC20Test.TransactOpts) +} + +// TestTransferFailsIfNoBalance is a paid mutator transaction binding the contract method 0x8ce7ef05. +// +// Solidity: function testTransferFailsIfNoBalance() returns() +func (_ZRC20Test *ZRC20TestTransactorSession) TestTransferFailsIfNoBalance() (*types.Transaction, error) { + return _ZRC20Test.Contract.TestTransferFailsIfNoBalance(&_ZRC20Test.TransactOpts) +} + +// TestTransferFailsIfRecipientIsZeroAddress is a paid mutator transaction binding the contract method 0xa4aa6c7c. +// +// Solidity: function testTransferFailsIfRecipientIsZeroAddress() returns() +func (_ZRC20Test *ZRC20TestTransactor) TestTransferFailsIfRecipientIsZeroAddress(opts *bind.TransactOpts) (*types.Transaction, error) { + return _ZRC20Test.contract.Transact(opts, "testTransferFailsIfRecipientIsZeroAddress") +} + +// TestTransferFailsIfRecipientIsZeroAddress is a paid mutator transaction binding the contract method 0xa4aa6c7c. +// +// Solidity: function testTransferFailsIfRecipientIsZeroAddress() returns() +func (_ZRC20Test *ZRC20TestSession) TestTransferFailsIfRecipientIsZeroAddress() (*types.Transaction, error) { + return _ZRC20Test.Contract.TestTransferFailsIfRecipientIsZeroAddress(&_ZRC20Test.TransactOpts) +} + +// TestTransferFailsIfRecipientIsZeroAddress is a paid mutator transaction binding the contract method 0xa4aa6c7c. +// +// Solidity: function testTransferFailsIfRecipientIsZeroAddress() returns() +func (_ZRC20Test *ZRC20TestTransactorSession) TestTransferFailsIfRecipientIsZeroAddress() (*types.Transaction, error) { + return _ZRC20Test.Contract.TestTransferFailsIfRecipientIsZeroAddress(&_ZRC20Test.TransactOpts) +} + // TestTransferFrom is a paid mutator transaction binding the contract method 0x70557298. // // Solidity: function testTransferFrom() returns() @@ -886,6 +991,27 @@ func (_ZRC20Test *ZRC20TestTransactorSession) TestUpdateGatewayAddressFailsIfSen return _ZRC20Test.Contract.TestUpdateGatewayAddressFailsIfSenderIsNotFungible(&_ZRC20Test.TransactOpts) } +// TestUpdateGatewayAddressFailsIfZeroAddress is a paid mutator transaction binding the contract method 0xd1fd3291. +// +// Solidity: function testUpdateGatewayAddressFailsIfZeroAddress() returns() +func (_ZRC20Test *ZRC20TestTransactor) TestUpdateGatewayAddressFailsIfZeroAddress(opts *bind.TransactOpts) (*types.Transaction, error) { + return _ZRC20Test.contract.Transact(opts, "testUpdateGatewayAddressFailsIfZeroAddress") +} + +// TestUpdateGatewayAddressFailsIfZeroAddress is a paid mutator transaction binding the contract method 0xd1fd3291. +// +// Solidity: function testUpdateGatewayAddressFailsIfZeroAddress() returns() +func (_ZRC20Test *ZRC20TestSession) TestUpdateGatewayAddressFailsIfZeroAddress() (*types.Transaction, error) { + return _ZRC20Test.Contract.TestUpdateGatewayAddressFailsIfZeroAddress(&_ZRC20Test.TransactOpts) +} + +// TestUpdateGatewayAddressFailsIfZeroAddress is a paid mutator transaction binding the contract method 0xd1fd3291. +// +// Solidity: function testUpdateGatewayAddressFailsIfZeroAddress() returns() +func (_ZRC20Test *ZRC20TestTransactorSession) TestUpdateGatewayAddressFailsIfZeroAddress() (*types.Transaction, error) { + return _ZRC20Test.Contract.TestUpdateGatewayAddressFailsIfZeroAddress(&_ZRC20Test.TransactOpts) +} + // TestUpdateProtocolFlatFee is a paid mutator transaction binding the contract method 0xd04cda98. // // Solidity: function testUpdateProtocolFlatFee() returns() @@ -970,6 +1096,27 @@ func (_ZRC20Test *ZRC20TestTransactorSession) TestUpdateSystemContractAddressFai return _ZRC20Test.Contract.TestUpdateSystemContractAddressFailsIfSenderIsNotFungible(&_ZRC20Test.TransactOpts) } +// TestUpdateSystemContractAddressFailsIfZeroAddress is a paid mutator transaction binding the contract method 0xd27b0427. +// +// Solidity: function testUpdateSystemContractAddressFailsIfZeroAddress() returns() +func (_ZRC20Test *ZRC20TestTransactor) TestUpdateSystemContractAddressFailsIfZeroAddress(opts *bind.TransactOpts) (*types.Transaction, error) { + return _ZRC20Test.contract.Transact(opts, "testUpdateSystemContractAddressFailsIfZeroAddress") +} + +// TestUpdateSystemContractAddressFailsIfZeroAddress is a paid mutator transaction binding the contract method 0xd27b0427. +// +// Solidity: function testUpdateSystemContractAddressFailsIfZeroAddress() returns() +func (_ZRC20Test *ZRC20TestSession) TestUpdateSystemContractAddressFailsIfZeroAddress() (*types.Transaction, error) { + return _ZRC20Test.Contract.TestUpdateSystemContractAddressFailsIfZeroAddress(&_ZRC20Test.TransactOpts) +} + +// TestUpdateSystemContractAddressFailsIfZeroAddress is a paid mutator transaction binding the contract method 0xd27b0427. +// +// Solidity: function testUpdateSystemContractAddressFailsIfZeroAddress() returns() +func (_ZRC20Test *ZRC20TestTransactorSession) TestUpdateSystemContractAddressFailsIfZeroAddress() (*types.Transaction, error) { + return _ZRC20Test.Contract.TestUpdateSystemContractAddressFailsIfZeroAddress(&_ZRC20Test.TransactOpts) +} + // TestWithdraw is a paid mutator transaction binding the contract method 0xd509b16c. // // Solidity: function testWithdraw() returns() @@ -991,6 +1138,48 @@ func (_ZRC20Test *ZRC20TestTransactorSession) TestWithdraw() (*types.Transaction return _ZRC20Test.Contract.TestWithdraw(&_ZRC20Test.TransactOpts) } +// TestWithdrawFailsIfNoAllowance is a paid mutator transaction binding the contract method 0x51399962. +// +// Solidity: function testWithdrawFailsIfNoAllowance() returns() +func (_ZRC20Test *ZRC20TestTransactor) TestWithdrawFailsIfNoAllowance(opts *bind.TransactOpts) (*types.Transaction, error) { + return _ZRC20Test.contract.Transact(opts, "testWithdrawFailsIfNoAllowance") +} + +// TestWithdrawFailsIfNoAllowance is a paid mutator transaction binding the contract method 0x51399962. +// +// Solidity: function testWithdrawFailsIfNoAllowance() returns() +func (_ZRC20Test *ZRC20TestSession) TestWithdrawFailsIfNoAllowance() (*types.Transaction, error) { + return _ZRC20Test.Contract.TestWithdrawFailsIfNoAllowance(&_ZRC20Test.TransactOpts) +} + +// TestWithdrawFailsIfNoAllowance is a paid mutator transaction binding the contract method 0x51399962. +// +// Solidity: function testWithdrawFailsIfNoAllowance() returns() +func (_ZRC20Test *ZRC20TestTransactorSession) TestWithdrawFailsIfNoAllowance() (*types.Transaction, error) { + return _ZRC20Test.Contract.TestWithdrawFailsIfNoAllowance(&_ZRC20Test.TransactOpts) +} + +// TestWithdrawFailsIfNoBalance is a paid mutator transaction binding the contract method 0xb79cad09. +// +// Solidity: function testWithdrawFailsIfNoBalance() returns() +func (_ZRC20Test *ZRC20TestTransactor) TestWithdrawFailsIfNoBalance(opts *bind.TransactOpts) (*types.Transaction, error) { + return _ZRC20Test.contract.Transact(opts, "testWithdrawFailsIfNoBalance") +} + +// TestWithdrawFailsIfNoBalance is a paid mutator transaction binding the contract method 0xb79cad09. +// +// Solidity: function testWithdrawFailsIfNoBalance() returns() +func (_ZRC20Test *ZRC20TestSession) TestWithdrawFailsIfNoBalance() (*types.Transaction, error) { + return _ZRC20Test.Contract.TestWithdrawFailsIfNoBalance(&_ZRC20Test.TransactOpts) +} + +// TestWithdrawFailsIfNoBalance is a paid mutator transaction binding the contract method 0xb79cad09. +// +// Solidity: function testWithdrawFailsIfNoBalance() returns() +func (_ZRC20Test *ZRC20TestTransactorSession) TestWithdrawFailsIfNoBalance() (*types.Transaction, error) { + return _ZRC20Test.Contract.TestWithdrawFailsIfNoBalance(&_ZRC20Test.TransactOpts) +} + // TestWithdrawGasFee is a paid mutator transaction binding the contract method 0xdcba486a. // // Solidity: function testWithdrawGasFee() returns() diff --git a/v2/src/evm/GatewayEVM.sol b/v2/src/evm/GatewayEVM.sol index 9c793f13..1edf85d5 100644 --- a/v2/src/evm/GatewayEVM.sol +++ b/v2/src/evm/GatewayEVM.sol @@ -207,7 +207,7 @@ contract GatewayEVM is function deposit(address receiver) external payable whenNotPaused nonReentrant { if (msg.value == 0) revert InsufficientETHAmount(); if (receiver == address(0)) revert ZeroAddress(); - + (bool deposited,) = tssAddress.call{ value: msg.value }(""); if (!deposited) revert DepositFailed(); diff --git a/v2/test/GatewayEVM.t.sol b/v2/test/GatewayEVM.t.sol index cd8b2443..bf7fb903 100644 --- a/v2/test/GatewayEVM.t.sol +++ b/v2/test/GatewayEVM.t.sol @@ -77,7 +77,9 @@ contract GatewayEVMTest is Test, IGatewayEVMErrors, IGatewayEVMEvents, IReceiver function testSetCustodyFailsIfSenderIsNotAdmin() public { vm.startPrank(tssAddress); - vm.expectRevert(abi.encodeWithSelector(AccessControlUnauthorizedAccount.selector, tssAddress, DEFAULT_ADMIN_ROLE)); + vm.expectRevert( + abi.encodeWithSelector(AccessControlUnauthorizedAccount.selector, tssAddress, DEFAULT_ADMIN_ROLE) + ); gateway.setCustody(address(custody)); } @@ -95,7 +97,9 @@ contract GatewayEVMTest is Test, IGatewayEVMErrors, IGatewayEVMEvents, IReceiver function testSetConnectorFailsIfSenderIsNotAdmin() public { vm.startPrank(tssAddress); - vm.expectRevert(abi.encodeWithSelector(AccessControlUnauthorizedAccount.selector, tssAddress, DEFAULT_ADMIN_ROLE)); + vm.expectRevert( + abi.encodeWithSelector(AccessControlUnauthorizedAccount.selector, tssAddress, DEFAULT_ADMIN_ROLE) + ); gateway.setConnector(address(zetaConnector)); } diff --git a/v2/test/GatewayZEVM.t.sol b/v2/test/GatewayZEVM.t.sol index f7363707..82467d09 100644 --- a/v2/test/GatewayZEVM.t.sol +++ b/v2/test/GatewayZEVM.t.sol @@ -26,6 +26,7 @@ contract GatewayZEVMInboundTest is Test, IGatewayZEVMEvents, IGatewayZEVMErrors address owner; address addr1; address fungibleModule; + error ZeroAddress(); error LowBalance(); @@ -438,7 +439,7 @@ contract GatewayZEVMOutboundTest is Test, IGatewayZEVMEvents, IGatewayZEVMErrors vm.expectRevert(InvalidTarget.selector); gateway.deposit(address(zrc20), amount, fungibleModule); } - + function testExecuteFailsIfZrc20IsZeroAddress() public { bytes memory message = abi.encode("hello"); zContext memory context = diff --git a/v2/typechain-types/ZetaConnectorBase.ts b/v2/typechain-types/ZetaConnectorBase.ts index bd16e57e..a09deac7 100644 --- a/v2/typechain-types/ZetaConnectorBase.ts +++ b/v2/typechain-types/ZetaConnectorBase.ts @@ -28,6 +28,7 @@ export interface ZetaConnectorBaseInterface extends Interface { nameOrSignature: | "DEFAULT_ADMIN_ROLE" | "PAUSER_ROLE" + | "TSS_ROLE" | "WITHDRAWER_ROLE" | "gateway" | "getRoleAdmin" @@ -66,6 +67,7 @@ export interface ZetaConnectorBaseInterface extends Interface { functionFragment: "PAUSER_ROLE", values?: undefined ): string; + encodeFunctionData(functionFragment: "TSS_ROLE", values?: undefined): string; encodeFunctionData( functionFragment: "WITHDRAWER_ROLE", values?: undefined @@ -124,6 +126,7 @@ export interface ZetaConnectorBaseInterface extends Interface { functionFragment: "PAUSER_ROLE", data: BytesLike ): Result; + decodeFunctionResult(functionFragment: "TSS_ROLE", data: BytesLike): Result; decodeFunctionResult( functionFragment: "WITHDRAWER_ROLE", data: BytesLike @@ -341,6 +344,8 @@ export interface ZetaConnectorBase extends BaseContract { PAUSER_ROLE: TypedContractMethod<[], [string], "view">; + TSS_ROLE: TypedContractMethod<[], [string], "view">; + WITHDRAWER_ROLE: TypedContractMethod<[], [string], "view">; gateway: TypedContractMethod<[], [string], "view">; @@ -429,6 +434,9 @@ export interface ZetaConnectorBase extends BaseContract { getFunction( nameOrSignature: "PAUSER_ROLE" ): TypedContractMethod<[], [string], "view">; + getFunction( + nameOrSignature: "TSS_ROLE" + ): TypedContractMethod<[], [string], "view">; getFunction( nameOrSignature: "WITHDRAWER_ROLE" ): TypedContractMethod<[], [string], "view">; diff --git a/v2/typechain-types/ZetaConnectorNative.ts b/v2/typechain-types/ZetaConnectorNative.ts index 870778e9..c639fed7 100644 --- a/v2/typechain-types/ZetaConnectorNative.ts +++ b/v2/typechain-types/ZetaConnectorNative.ts @@ -28,6 +28,7 @@ export interface ZetaConnectorNativeInterface extends Interface { nameOrSignature: | "DEFAULT_ADMIN_ROLE" | "PAUSER_ROLE" + | "TSS_ROLE" | "WITHDRAWER_ROLE" | "gateway" | "getRoleAdmin" @@ -66,6 +67,7 @@ export interface ZetaConnectorNativeInterface extends Interface { functionFragment: "PAUSER_ROLE", values?: undefined ): string; + encodeFunctionData(functionFragment: "TSS_ROLE", values?: undefined): string; encodeFunctionData( functionFragment: "WITHDRAWER_ROLE", values?: undefined @@ -124,6 +126,7 @@ export interface ZetaConnectorNativeInterface extends Interface { functionFragment: "PAUSER_ROLE", data: BytesLike ): Result; + decodeFunctionResult(functionFragment: "TSS_ROLE", data: BytesLike): Result; decodeFunctionResult( functionFragment: "WITHDRAWER_ROLE", data: BytesLike @@ -341,6 +344,8 @@ export interface ZetaConnectorNative extends BaseContract { PAUSER_ROLE: TypedContractMethod<[], [string], "view">; + TSS_ROLE: TypedContractMethod<[], [string], "view">; + WITHDRAWER_ROLE: TypedContractMethod<[], [string], "view">; gateway: TypedContractMethod<[], [string], "view">; @@ -429,6 +434,9 @@ export interface ZetaConnectorNative extends BaseContract { getFunction( nameOrSignature: "PAUSER_ROLE" ): TypedContractMethod<[], [string], "view">; + getFunction( + nameOrSignature: "TSS_ROLE" + ): TypedContractMethod<[], [string], "view">; getFunction( nameOrSignature: "WITHDRAWER_ROLE" ): TypedContractMethod<[], [string], "view">; diff --git a/v2/typechain-types/ZetaConnectorNonNative.ts b/v2/typechain-types/ZetaConnectorNonNative.ts index c24d39ac..82f5121d 100644 --- a/v2/typechain-types/ZetaConnectorNonNative.ts +++ b/v2/typechain-types/ZetaConnectorNonNative.ts @@ -28,6 +28,7 @@ export interface ZetaConnectorNonNativeInterface extends Interface { nameOrSignature: | "DEFAULT_ADMIN_ROLE" | "PAUSER_ROLE" + | "TSS_ROLE" | "WITHDRAWER_ROLE" | "gateway" | "getRoleAdmin" @@ -69,6 +70,7 @@ export interface ZetaConnectorNonNativeInterface extends Interface { functionFragment: "PAUSER_ROLE", values?: undefined ): string; + encodeFunctionData(functionFragment: "TSS_ROLE", values?: undefined): string; encodeFunctionData( functionFragment: "WITHDRAWER_ROLE", values?: undefined @@ -132,6 +134,7 @@ export interface ZetaConnectorNonNativeInterface extends Interface { functionFragment: "PAUSER_ROLE", data: BytesLike ): Result; + decodeFunctionResult(functionFragment: "TSS_ROLE", data: BytesLike): Result; decodeFunctionResult( functionFragment: "WITHDRAWER_ROLE", data: BytesLike @@ -366,6 +369,8 @@ export interface ZetaConnectorNonNative extends BaseContract { PAUSER_ROLE: TypedContractMethod<[], [string], "view">; + TSS_ROLE: TypedContractMethod<[], [string], "view">; + WITHDRAWER_ROLE: TypedContractMethod<[], [string], "view">; gateway: TypedContractMethod<[], [string], "view">; @@ -462,6 +467,9 @@ export interface ZetaConnectorNonNative extends BaseContract { getFunction( nameOrSignature: "PAUSER_ROLE" ): TypedContractMethod<[], [string], "view">; + getFunction( + nameOrSignature: "TSS_ROLE" + ): TypedContractMethod<[], [string], "view">; getFunction( nameOrSignature: "WITHDRAWER_ROLE" ): TypedContractMethod<[], [string], "view">; diff --git a/v2/typechain-types/factories/ERC20CustodyEchidnaTest__factory.ts b/v2/typechain-types/factories/ERC20CustodyEchidnaTest__factory.ts index 55594799..951818f5 100644 --- a/v2/typechain-types/factories/ERC20CustodyEchidnaTest__factory.ts +++ b/v2/typechain-types/factories/ERC20CustodyEchidnaTest__factory.ts @@ -613,7 +613,7 @@ const _abi = [ ] as const; const _bytecode = - "0x600380546001600160a01b03191633908117909155600e60a09081526d11d85d195dd85e5155934b9cdbdb60921b60c0526101049190915261012361012481905261014452606460e090815261016460405261010080516001600160e01b0390811663c0c53b8b60e01b1790915261007992919061026316565b600480546001600160a01b03929092166001600160a01b03199283168117909155600580549092161790553480156100b057600080fd5b5060055460035460016000556002805460ff191690556001600160a01b039182169116808215806100e857506001600160a01b038216155b806100fa57506001600160a01b038116155b156101185760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b038316608052610130600082610282565b5061015b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a82610282565b506101867f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e483610282565b505050506040516101969061380e565b60408082526004908201819052631d195cdd60e21b606083015260806020830181905282015263151154d560e21b60a082015260c001604051809103906000f0801580156101e8573d6000803e3d6000fd5b5060028054610100600160a81b0319166101006001600160a01b039384160217905560055460405163ae7a3a6f60e01b815230600482015291169063ae7a3a6f90602401600060405180830381600087803b15801561024657600080fd5b505af115801561025a573d6000803e3d6000fd5b5050505061488f565b600061026d61381b565b610278848483610315565b9150505b92915050565b60008281526001602090815260408083206001600160a01b038516845290915281205460ff1661030d5760008381526001602081815260408084206001600160a01b0387168086529252808420805460ff19169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a450600161027c565b50600061027c565b6000806103228584610391565b90506103866040518060400160405280601d81526020017f4552433139363750726f78792e736f6c3a4552433139363750726f78790000008152508286604051602001610370929190613924565b60408051601f198184030181529190528561039d565b9150505b9392505050565b600061038a83836103d1565b60c081015151600090156103c7576103c084848460c001516103f260201b60201c565b905061038a565b6103c0848461056b565b60006103dd8383610638565b61038a8383602001518461039d60201b60201c565b6000806103fd610648565b9050600061040b86836106e2565b905060006104288260600151836020015185610b0560201b60201c565b9050600061043883838989610cba565b9050600061044582611936565b602081015181519192509060030b1561049e5789826040015160405160200161046f929190613948565b60408051601f198184030181529082905262461bcd60e51b8252610495916004016139ae565b60405180910390fd5b60006104e76040518060400160405280601581526020017f4465706c6f79656420746f20616464726573733a200000000000000000000000815250836001611acd60201b60201c565b60405163c6ce059d60e01b8152909150600080516020616b378339815191529063c6ce059d9061051b9084906004016139ae565b602060405180830381865afa158015610538573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061055c91906139c1565b9b9a5050505050505050505050565b604051638d1cc92560e01b81526000908190600080516020616b3783398151915290638d1cc925906105a19087906004016139ae565b600060405180830381865afa1580156105be573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526105e69190810190613ab6565b905060006106158285604051602001610600929190613aea565b60408051601f19818403018152919052611c6d565b90506001600160a01b03811661027857848460405160200161046f929190613b19565b61064482826000611c80565b5050565b60408051808201825260038152621bdd5d60ea1b602082015290516334515cdb60e21b8152606091600080516020616b3783398151915291829063d145736c90610696908490600401613ba8565b600060405180830381865afa1580156106b3573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526106db9190810190613bdd565b9250505090565b6107146040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b6000600080516020616b3783398151915290506107596040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b61076285611d5a565b6020820152600061077286611faf565b90506000836001600160a01b031663d930a0e66040518163ffffffff1660e01b8152600401600060405180830381865afa1580156107b4573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526107dc9190810190613bdd565b868385602001516040516020016107f69493929190613c25565b60408051601f19818403018152908290526360f9bb1160e01b825291506000906001600160a01b038616906360f9bb11906108359085906004016139ae565b600060405180830381865afa158015610852573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261087a9190810190613bdd565b604051636da11afb60e11b81529091506001600160a01b0386169063db4235f6906108a9908490600401613cbd565b602060405180830381865afa1580156108c6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108ea9190613cf6565b6108ff578160405160200161046f9190613d18565b6040516309389f5960e31b81526001600160a01b038616906349c4fac89061092b908490600401613d8f565b600060405180830381865afa158015610948573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526109709190810190613bdd565b8452604051636da11afb60e11b81526001600160a01b0386169063db4235f69061099e908490600401613dd5565b602060405180830381865afa1580156109bb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109df9190613cf6565b15610a5b576040516309389f5960e31b81526001600160a01b038616906349c4fac890610a10908490600401613dd5565b600060405180830381865afa158015610a2d573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610a559190810190613bdd565b60408501525b846001600160a01b03166349c4fac8828660000151604051602001610a809190613e16565b6040516020818303038152906040526040518363ffffffff1660e01b8152600401610aac929190613e71565b600060405180830381865afa158015610ac9573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610af19190810190613bdd565b606085015250608083015250949350505050565b60408051600480825260a0820190925260609160009190816020015b6060815260200190600190039081610b21579050509050604051806040016040528060048152602001630677265760e41b81525081600081518110610b6857610b68613e96565b6020026020010181905250604051806040016040528060038152602001620b5c9b60ea1b81525081600181518110610ba257610ba2613e96565b602002602001018190525084604051602001610bbe9190613eac565b60405160208183030381529060405281600281518110610be057610be0613e96565b602002602001018190525082604051602001610bfc9190613ee1565b60405160208183030381529060405281600381518110610c1e57610c1e613e96565b60209081029190910101526000610c3482611936565b9050600081602001519050610c9b610c6e60405180604001604052806005815260200164173539b7b760d91b81525061213260201b60201c565b6040805180820182526000808252602091820152815180830190925284518252808501908201529061215f565b610cb0578560405160200161046f9190613f10565b9695505050505050565b60a0810151604080518082018252600080825260209182015281518083019092528251808352928101910152606090600080516020616b378339815191529015610d04565b511590565b610e2057826020015115610d945760405162461bcd60e51b81526020600482015260586024820152600080516020616b5783398151915260448201527f62652075736564207768656e207468652060736b6970566572696679536f757260648201527f6365436f646560206f7074696f6e206973206074727565600000000000000000608482015260a401610495565b8260c0015115610e205760405162461bcd60e51b81526020600482015260536024820152600080516020616b5783398151915260448201527f62652075736564207768656e207468652060736b69704c6963656e736554797060648201527f6560206f7074696f6e2069732060747275656000000000000000000000000000608482015260a401610495565b6040805160ff8082526120008201909252600091816020015b6060815260200190600190039081610e395790505090506000604051806040016040528060038152602001620dce0f60eb1b815250828280610e7a90613fa5565b935060ff1681518110610e8f57610e8f613e96565b60200260200101819052506040518060400160405280600d81526020016c302e302e312d616c7068612e3760981b815250604051602001610ed09190613fc4565b604051602081830303815290604052828280610eeb90613fa5565b935060ff1681518110610f0057610f00613e96565b6020026020010181905250604051806040016040528060068152602001656465706c6f7960d01b815250828280610f3690613fa5565b935060ff1681518110610f4b57610f4b613e96565b60200260200101819052506040518060400160405280600e81526020016d2d2d636f6e74726163744e616d6560901b815250828280610f8990613fa5565b935060ff1681518110610f9e57610f9e613e96565b60200260200101819052508760200151828280610fba90613fa5565b935060ff1681518110610fcf57610fcf613e96565b60200260200101819052506040518060400160405280600e81526020016d05a5ac6dedce8e4c2c6e8a0c2e8d60931b81525082828061100d90613fa5565b935060ff168151811061102257611022613e96565b60209081029190910101528751828261103a81613fa5565b935060ff168151811061104f5761104f613e96565b6020026020010181905250604051806040016040528060098152602001680b4b58da185a5b925960ba1b81525082828061108890613fa5565b935060ff168151811061109d5761109d613e96565b60209081029190910101526110b1466121c0565b82826110bc81613fa5565b935060ff16815181106110d1576110d1613e96565b60200260200101819052506040518060400160405280600f81526020016e2d2d6275696c64496e666f46696c6560881b81525082828061111090613fa5565b935060ff168151811061112557611125613e96565b60200260200101819052508682828061113d90613fa5565b935060ff168151811061115257611152613e96565b60209081029190910101528551156112605760408051808201909152601581527f2d2d636f6e7374727563746f7242797465636f64650000000000000000000000602082015282826111a381613fa5565b935060ff16815181106111b8576111b8613e96565b60209081029190910101526040516371aad10d60e01b81526001600160a01b038416906371aad10d906111ef9089906004016139ae565b600060405180830381865afa15801561120c573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526112349190810190613bdd565b828261123f81613fa5565b935060ff168151811061125457611254613e96565b60200260200101819052505b84602001511561130d576040805180820190915260128152712d2d766572696679536f75726365436f646560701b6020820152828261129e81613fa5565b935060ff16815181106112b3576112b3613e96565b60200260200101819052506040518060400160405280600581526020016466616c736560d81b8152508282806112e890613fa5565b935060ff16815181106112fd576112fd613e96565b6020026020010181905250611474565b611323610cff8660a0015161213260201b60201c565b6113a65760408051808201909152600d81526c2d2d6c6963656e73655479706560981b6020820152828261135681613fa5565b935060ff168151811061136b5761136b613e96565b60200260200101819052508460a0015160405160200161138b9190613eac565b6040516020818303038152906040528282806112e890613fa5565b8460c001511580156113cb57506113c9610cff896040015161213260201b60201c565b155b156114745760408051808201909152600d81526c2d2d6c6963656e73655479706560981b602082015282826113ff81613fa5565b935060ff168151811061141457611414613e96565b602090810291909101015261142888612252565b6040516020016114389190613eac565b60405160208183030381529060405282828061145390613fa5565b935060ff168151811061146857611468613e96565b60200260200101819052505b61148a610cff866040015161213260201b60201c565b61150d5760408051808201909152600b81526a0b4b5c995b185e595c925960aa1b602082015282826114bb81613fa5565b935060ff16815181106114d0576114d0613e96565b602002602001018190525084604001518282806114ec90613fa5565b935060ff168151811061150157611501613e96565b60200260200101819052505b6060850151156115fe576040805180820190915260068152650b4b5cd85b1d60d21b6020820152828261153f81613fa5565b935060ff168151811061155457611554613e96565b60209081029190910101526060850151604051631623433d60e31b815260048101919091526001600160a01b0384169063b11a19e890602401600060405180830381865afa1580156115aa573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526115d29190810190613bdd565b82826115dd81613fa5565b935060ff16815181106115f2576115f2613e96565b60200260200101819052505b60e085015151156116905760408051808201909152600a8152690b4b59d85cd31a5b5a5d60b21b6020820152828261163581613fa5565b935060ff168151811061164a5761164a613e96565b602090810291909101015260e085015151611664906121c0565b828261166f81613fa5565b935060ff168151811061168457611684613e96565b60200260200101819052505b60e0850151602001511561172d5760408051808201909152600a8152692d2d676173507269636560b01b602082015282826116ca81613fa5565b935060ff16815181106116df576116df613e96565b60200260200101819052506117018560e00151602001516121c060201b60201c565b828261170c81613fa5565b935060ff168151811061172157611721613e96565b60200260200101819052505b60e085015160400151156117ce5760408051808201909152600e81526d2d2d6d617846656550657247617360901b6020820152828261176b81613fa5565b935060ff168151811061178057611780613e96565b60200260200101819052506117a28560e00151604001516121c060201b60201c565b82826117ad81613fa5565b935060ff16815181106117c2576117c2613e96565b60200260200101819052505b60e0850151606001511561187e5760408051808201909152601681527f2d2d6d61785072696f72697479466565506572476173000000000000000000006020820152828261181b81613fa5565b935060ff168151811061183057611830613e96565b60200260200101819052506118528560e00151606001516121c060201b60201c565b828261185d81613fa5565b935060ff168151811061187257611872613e96565b60200260200101819052505b60008160ff166001600160401b0381111561189b5761189b6139ea565b6040519080825280602002602001820160405280156118ce57816020015b60608152602001906001900390816118b95790505b50905060005b8260ff168160ff16101561192757838160ff16815181106118f7576118f7613e96565b6020026020010151828260ff168151811061191457611914613e96565b60209081029190910101526001016118d4565b5093505050505b949350505050565b61195d6040518060600160405280600060030b815260200160608152602001606081525090565b6040805180820182526004808252630c4c2e6d60e31b602083015291516334515cdb60e21b8152600080516020616b3783398151915292600091849163d145736c916119ab9186910161401b565b600060405180830381865afa1580156119c8573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526119f09190810190613bdd565b905060006119fe8683612908565b90506000846001600160a01b031663f45c1ce7836040518263ffffffff1660e01b8152600401611a2e9190614062565b6000604051808303816000875af1158015611a4d573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611a7591908101906140c7565b805190915060030b15801590611a8e5750602081015151155b8015611a9d5750604081015151155b15610cb05781600081518110611ab557611ab5613e96565b602002602001015160405160200161046f919061417a565b60606000611b028560408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600080825260209182015281518083019092528651825280870190820152909150611b399082905b90612a42565b15611c36576000611bb682611bb081611baa611b7c8a60408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6040805180820182526000808252602091820152815180830190925282518252918201519181019190915290565b90612a69565b90612ac6565b9050611bea611be3604051806040016040528060018152602001600560f91b81525061213260201b60201c565b8290612a42565b15611c2457611c21611c1a604051806040016040528060018152602001600560f91b81525061213260201b60201c565b8290612b4b565b90505b611c2d81612b71565b9250505061038a565b8215611c4f57848460405160200161046f92919061434a565b505060408051602081019091526000815261038a565b509392505050565b6000808251602084016000f09392505050565b8160a0015115611c8f57505050565b6000611c9c848484612bd6565b90506000611ca982611936565b602081015181519192509060030b158015611d1c5750611d1c611cf0604051806040016040528060078152602001665355434345535360c81b81525061213260201b60201c565b604080518082018252600080825260209182015281518083019092528451825280850190820152611b33565b15611d2957505050505050565b60408201515115611d4957816040015160405160200161046f91906143c5565b8060405160200161046f919061440f565b60606000611d8f8360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b9050611dc6611dbf604051806040016040528060048152602001630b9cdbdb60e21b81525061213260201b60201c565b829061215f565b15611e085761038a611e03611dfc604051806040016040528060048152602001630b9cdbdb60e21b81525061213260201b60201c565b83906130e9565b612b71565b611e3a611e33604051806040016040528060018152602001601d60f91b81525061213260201b60201c565b8290613173565b600103611ea257611e6c611c1a604051806040016040528060018152602001601d60f91b81525061213260201b60201c565b5061038a611e03611e9b604051806040016040528060018152602001601d60f91b81525061213260201b60201c565b8390612b4b565b611ed1611dbf60405180604001604052806005815260200164173539b7b760d91b81525061213260201b60201c565b15611f9e576000611f0982611f04604051806040016040528060018152602001602f60f81b81525061213260201b60201c565b613208565b905060008160018351611f1c919061445f565b81518110611f2c57611f2c613e96565b60200260200101519050611f95611e03611f6860405180604001604052806005815260200164173539b7b760d91b81525061213260201b60201c565b604080518082018252600080825260209182015281518083019092528551825280860190820152906130e9565b95945050505050565b8260405160200161046f9190614472565b60606000611fe48360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b9050612014611dbf604051806040016040528060048152602001630b9cdbdb60e21b81525061213260201b60201c565b156120225761038a81612b71565b61204d611e33604051806040016040528060018152602001601d60f91b81525061213260201b60201c565b6001036120825761038a611e03611e9b604051806040016040528060018152602001601d60f91b81525061213260201b60201c565b6120b1611dbf60405180604001604052806005815260200164173539b7b760d91b81525061213260201b60201c565b15611f9e5760006120e482611f04604051806040016040528060018152602001602f60f81b81525061213260201b60201c565b90506001815111156121205780600282516120ff919061445f565b8151811061210f5761210f613e96565b602002602001015192505050919050565b508260405160200161046f9190614472565b60408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b8051825160009111156121745750600061027c565b8151835160208501516000929161218a9161452c565b612194919061445f565b9050826020015181036121ab57600191505061027c565b82516020840151819020912014905092915050565b606060006121cd836132ac565b60010190506000816001600160401b038111156121ec576121ec6139ea565b6040519080825280601f01601f191660200182016040528015612216576020820181803683370190505b5090508181016020015b600019016f181899199a1a9b1b9c1cb0b131b232b360811b600a86061a8153600a850494508461222057509392505050565b60606000612269836040015161213260201b60201c565b90506122a661229f6040518060400160405280600a8152602001691553931250d15394d15160b21b81525061213260201b60201c565b829061338e565b156122cd5750506040805180820190915260048152634e6f6e6560e01b6020820152919050565b61230061229f60405180604001604052806009815260200168556e6c6963656e736560b81b81525061213260201b60201c565b1561232c575050604080518082019091526009815268556e6c6963656e736560b81b6020820152919050565b61235961229f6040518060400160405280600381526020016213525560ea1b81525061213260201b60201c565b1561237f57505060408051808201909152600381526213525560ea1b6020820152919050565b6123b561229f6040518060400160405280600c81526020016b47504c2d322e302d6f6e6c7960a01b81525061213260201b60201c565b806123f557506123f561229f6040518060400160405280601081526020016f23a8261699171816b7b916b630ba32b960811b81525061213260201b60201c565b1561242157505060408051808201909152600981526823a72a9023a8263b1960b91b6020820152919050565b61245761229f6040518060400160405280600c81526020016b47504c2d332e302d6f6e6c7960a01b81525061213260201b60201c565b80612497575061249761229f6040518060400160405280601081526020016f23a8261699971816b7b916b630ba32b960811b81525061213260201b60201c565b156124c3575050604080518082019091526009815268474e552047504c763360b81b6020820152919050565b6124fa61229f6040518060400160405280600d81526020016c4c47504c2d322e312d6f6e6c7960981b81525061213260201b60201c565b8061253b575061253b61229f604051806040016040528060118152602001702623a8261699171896b7b916b630ba32b960791b81525061213260201b60201c565b1561256a57505060408051808201909152600c81526b474e55204c47504c76322e3160a01b6020820152919050565b6125a161229f6040518060400160405280600d81526020016c4c47504c2d332e302d6f6e6c7960981b81525061213260201b60201c565b806125e257506125e261229f604051806040016040528060118152602001702623a8261699971816b7b916b630ba32b960791b81525061213260201b60201c565b1561260f57505060408051808201909152600a815269474e55204c47504c763360b01b6020820152919050565b61264561229f6040518060400160405280600c81526020016b4253442d322d436c6175736560a01b81525061213260201b60201c565b1561267457505060408051808201909152600c81526b4253442d322d436c6175736560a01b6020820152919050565b6126aa61229f6040518060400160405280600c81526020016b4253442d332d436c6175736560a01b81525061213260201b60201c565b156126d957505060408051808201909152600c81526b4253442d332d436c6175736560a01b6020820152919050565b61270a61229f6040518060400160405280600781526020016604d504c2d322e360cc1b81525061213260201b60201c565b1561273457505060408051808201909152600781526604d504c2d322e360cc1b6020820152919050565b61276561229f6040518060400160405280600781526020016604f534c2d332e360cc1b81525061213260201b60201c565b1561278f57505060408051808201909152600781526604f534c2d332e360cc1b6020820152919050565b6127c361229f6040518060400160405280600a81526020016904170616368652d322e360b41b81525061213260201b60201c565b156127f057505060408051808201909152600a81526904170616368652d322e360b41b6020820152919050565b61282761229f6040518060400160405280600d81526020016c4147504c2d332e302d6f6e6c7960981b81525061213260201b60201c565b80612868575061286861229f6040518060400160405280601181526020017020a3a8261699971816b7b916b630ba32b960791b81525061213260201b60201c565b1561289557505060408051808201909152600a815269474e55204147504c763360b01b6020820152919050565b6128c761229f604051806040016040528060088152602001674255534c2d312e3160c01b81525061213260201b60201c565b156128f157505060408051808201909152600781526642534c20312e3160c81b6020820152919050565b6040808401518451915161046f929060200161453f565b60608060005b8451811015612993578185828151811061292a5761292a613e96565b6020026020010151604051602001612943929190613aea565b604051602081830303815290604052915060018551612962919061445f565b811461298b5781604051602001612979919061468f565b60405160208183030381529060405291505b60010161290e565b5060408051600380825260808201909252600091816020015b60608152602001906001900390816129ac57905050905083816000815181106129d7576129d7613e96565b6020026020010181905250604051806040016040528060028152602001612d6360f01b81525081600181518110612a1057612a10613e96565b60200260200101819052508181600281518110612a2f57612a2f613e96565b6020908102919091010152949350505050565b6020808301518351835192840151600093612a6092918491906133a2565b14159392505050565b6040805180820190915260008082526020808301829052845185820151855192860151612a9693906134b3565b9050836020015181612aa8919061445f565b84518590612ab790839061445f565b90525060208401525090919050565b6040805180820190915260008082526020820152815183511015612aeb57508161027c565b6020808301519084015160019114612b125750815160208481015190840151829020919020145b8015612b4357825184518590612b2990839061445f565b9052508251602085018051612b3f90839061452c565b9052505b509192915050565b6040805180820190915260008082526020820152612b6a8383836135d3565b5092915050565b6060600082600001516001600160401b03811115612b9157612b916139ea565b6040519080825280601f01601f191660200182016040528015612bbb576020820181803683370190505b50602084810151855192935090830191612b6a918391613679565b60606000612be2610648565b6040805160ff808252612000820190925291925060009190816020015b6060815260200190600190039081612bff5790505090506000604051806040016040528060038152602001620dce0f60eb1b815250828280612c4090613fa5565b935060ff1681518110612c5557612c55613e96565b6020026020010181905250604051806040016040528060078152602001665e312e33322e3360c81b815250604051602001612c9091906146b4565b604051602081830303815290604052828280612cab90613fa5565b935060ff1681518110612cc057612cc0613e96565b60200260200101819052506040518060400160405280600881526020016776616c696461746560c01b815250828280612cf890613fa5565b935060ff1681518110612d0d57612d0d613e96565b602002602001018190525082604051602001612d299190613ee1565b604051602081830303815290604052828280612d4490613fa5565b935060ff1681518110612d5957612d59613e96565b60200260200101819052506040518060400160405280600a8152602001690b4b58dbdb9d1c9858dd60b21b815250828280612d9390613fa5565b935060ff1681518110612da857612da8613e96565b6020908102919091010152612dbd87846136f3565b8282612dc881613fa5565b935060ff1681518110612ddd57612ddd613e96565b602090810291909101015285515115612e755760408051808201909152600b81526a2d2d7265666572656e636560a81b60208201528282612e1d81613fa5565b935060ff1681518110612e3257612e32613e96565b60209081029190910101528551612e4990846136f3565b8282612e5481613fa5565b935060ff1681518110612e6957612e69613e96565b60200260200101819052505b856080015115612ee35760408051808201909152601881527f2d2d756e73616665536b697053746f72616765436865636b000000000000000060208201528282612ebe81613fa5565b935060ff1681518110612ed357612ed3613e96565b6020026020010181905250612f3e565b8415612f3e576040805180820190915260128152712d2d726571756972655265666572656e636560701b60208201528282612f1d81613fa5565b935060ff1681518110612f3257612f32613e96565b60200260200101819052505b60408601515115612fca5760408051808201909152600d81526c2d2d756e73616665416c6c6f7760981b60208201528282612f7881613fa5565b935060ff1681518110612f8d57612f8d613e96565b60200260200101819052508560400151828280612fa990613fa5565b935060ff1681518110612fbe57612fbe613e96565b60200260200101819052505b8560600151156130345760408051808201909152601481527f2d2d756e73616665416c6c6f7752656e616d65730000000000000000000000006020820152828261301381613fa5565b935060ff168151811061302857613028613e96565b60200260200101819052505b60008160ff166001600160401b03811115613051576130516139ea565b60405190808252806020026020018201604052801561308457816020015b606081526020019060019003908161306f5790505b50905060005b8260ff168160ff1610156130dd57838160ff16815181106130ad576130ad613e96565b6020026020010151828260ff16815181106130ca576130ca613e96565b602090810291909101015260010161308a565b50979650505050505050565b604080518082019091526000808252602082015281518351101561310e57508161027c565b815183516020850151600092916131249161452c565b61312e919061445f565b6020840151909150600190821461314f575082516020840151819020908220145b801561316a5783518551869061316690839061445f565b9052505b50929392505050565b8051825160208085015190840151600093849390926131939284906134b3565b61319d919061452c565b90505b835160208501516131b1919061452c565b8111612b6a57816131c1816146f9565b92505082600001516131f78560200151836131dc919061445f565b86516131e8919061445f565b855160208701518591906134b3565b613201919061452c565b90506131a0565b606060006132168484613173565b61322190600161452c565b6001600160401b03811115613238576132386139ea565b60405190808252806020026020018201604052801561326b57816020015b60608152602001906001900390816132565790505b50905060005b8151811015611c6557613287611e038686612b4b565b82828151811061329957613299613e96565b6020908102919091010152600101613271565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f01000000000000000083106132f5577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310613321576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc10000831061333f57662386f26fc10000830492506010015b6305f5e1008310613357576305f5e100830492506008015b612710831061336b57612710830492506004015b6064831061337d576064830492506002015b600a831061027c5760010192915050565b600061339a8383613733565b159392505050565b6000808584116134a9576020841161345557600084156133ed5760016133c986602061445f565b6133d4906008614712565b6133df906002614810565b6133e9919061445f565b1990505b83518116856133fc898961452c565b613406919061445f565b805190935082165b81811461344057878411613428578794505050505061192e565b836134328161481c565b94505082845116905061340e565b61344a878561452c565b94505050505061192e565b838320613462858861445f565b61346c908761452c565b91505b8582106134a7578482208082036134945761348a868461452c565b935050505061192e565b61349f60018461445f565b92505061346f565b505b5092949350505050565b600083818685116135be576020851161356d57600085156134ff5760016134db87602061445f565b6134e6906008614712565b6134f1906002614810565b6134fb919061445f565b1990505b845181166000876135108b8b61452c565b61351a919061445f565b855190915083165b82811461355f578186106135475761353a8b8b61452c565b965050505050505061192e565b85613551816146f9565b965050838651169050613522565b85965050505050505061192e565b508383206000905b61357f868961445f565b82116135bc5785832080820361359b578394505050505061192e565b6135a660018561452c565b93505081806135b4906146f9565b925050613575565b505b6135c8878761452c565b979650505050505050565b604080518082019091526000808252602080830182905285518682015186519287015161360093906134b3565b60208087018051918601919091525190915061361c908261445f565b83528451602086015161362f919061452c565b810361363e5760008552613670565b8351835161364c919061452c565b8551869061365b90839061445f565b905250835161366a908261452c565b60208601525b50909392505050565b602081106136b1578151835261369060208461452c565b925061369d60208361452c565b91506136aa60208261445f565b9050613679565b60001981156136e05760016136c783602061445f565b6136d390610100614810565b6136dd919061445f565b90505b9151835183169219169190911790915250565b6060600061370184846106e2565b805160208083015160405193945061371b93909101614833565b60405160208183030381529060405291505092915050565b8151815160009190811115613746575081515b6020808501519084015160005b838110156137ff57825182518082146137cf5760001960208710156137ae5760018461378089602061445f565b61378a919061452c565b613795906008614712565b6137a0906002614810565b6137aa919061445f565b1990505b81811683821681810391146137cc57975061027c9650505050505050565b50505b6137da60208661452c565b94506137e760208561452c565b935050506020816137f8919061452c565b9050613753565b5084518651610cb0919061486f565b610c9f80615e9883390190565b6040518060e0016040528060608152602001606081526020016060815260200160001515815260200160001515815260200160001515815260200161385e613863565b905290565b6040518061010001604052806000151581526020016000151581526020016060815260200160008019168152602001606081526020016060815260200160001515815260200161385e6040518060800160405280600081526020016000815260200160008152602001600081525090565b60005b838110156138ef5781810151838201526020016138d7565b50506000910152565b600081518084526139108160208601602086016138d4565b601f01601f19169290920160200192915050565b6001600160a01b038316815260406020820181905260009061192e908301846138f8565b7f4661696c656420746f206465706c6f7920636f6e74726163742000000000000081526000835161398081601a8501602088016138d4565b6101d160f51b601a9184019182015283516139a281601c8401602088016138d4565b01601c01949350505050565b60208152600061038a60208301846138f8565b6000602082840312156139d357600080fd5b81516001600160a01b038116811461038a57600080fd5b634e487b7160e01b600052604160045260246000fd5b604051606081016001600160401b0381118282101715613a2257613a226139ea565b60405290565b6000806001600160401b03841115613a4257613a426139ea565b50604051601f19601f85018116603f011681018181106001600160401b0382111715613a7057613a706139ea565b604052838152905080828401851015613a8857600080fd5b611c658460208301856138d4565b600082601f830112613aa757600080fd5b61038a83835160208501613a28565b600060208284031215613ac857600080fd5b81516001600160401b03811115613ade57600080fd5b61027884828501613a96565b60008351613afc8184602088016138d4565b835190830190613b108183602088016138d4565b01949350505050565b7f4661696c656420746f206465706c6f7920636f6e747261637420000000000000815260008351613b5181601a8501602088016138d4565b7f207573696e6720636f6e7374727563746f722064617461202200000000000000601a918401918201528351613b8e8160338401602088016138d4565b601160f91b60339290910191820152603401949350505050565b60408152600b60408201526a1193d55391149657d3d55560aa1b606082015260806020820152600061038a60808301846138f8565b600060208284031215613bef57600080fd5b81516001600160401b03811115613c0557600080fd5b8201601f81018413613c1657600080fd5b61027884825160208401613a28565b60008551613c37818460208a016138d4565b602f60f81b9083019081528551613c55816001840160208a016138d4565b602f60f81b600192909101918201528451613c778160028401602089016138d4565b600181830101915050602f60f81b60018201528351613c9d8160028401602088016138d4565b64173539b7b760d91b600292909101918201526007019695505050505050565b604081526000613cd060408301846138f8565b828103602084015260048152630b985cdd60e21b60208201526040810191505092915050565b600060208284031215613d0857600080fd5b8151801515811461038a57600080fd5b7f436f756c64206e6f742066696e642041535420696e2061727469666163742000815260008251613d5081601f8501602087016138d4565b7f2e205365742060617374203d20747275656020696e20666f756e6472792e746f601f939091019283015250611b5b60f21b603f820152604101919050565b604081526000613da260408301846138f8565b8281036020840152601181527005cc2e6e85cc2c4e6ded8eae8caa0c2e8d607b1b60208201526040810191505092915050565b604081526000613de860408301846138f8565b8281036020840152600c81526b2e6173742e6c6963656e736560a01b60208201526040810191505092915050565b7f2e6d657461646174612e736f75726365732e5b27000000000000000000000000815260008251613e4e8160148501602087016138d4565b6b13ae9735b2b1b1b0b5991a9b60a11b6014939091019283015250602001919050565b604081526000613e8460408301856138f8565b828103602084015261038681856138f8565b634e487b7160e01b600052603260045260246000fd5b601160f91b81528151600090613ec98160018501602087016138d4565b601160f91b6001939091019283015250600201919050565b60008251613ef38184602087016138d4565b6a2f6275696c642d696e666f60a81b920191825250600b01919050565b7f436f756c64206e6f742066696e64206275696c642d696e666f2066696c65207781527f697468206d61746368696e6720736f7572636520636f6465206861736820666f60208201526a0391031b7b73a3930b1ba160ad1b604082015260008251613f8281604b8501602087016138d4565b91909101604b0192915050565b634e487b7160e01b600052601160045260246000fd5b600060ff821660ff8103613fbb57613fbb613f8f565b60010192915050565b7f406f70656e7a657070656c696e2f646566656e6465722d6465706c6f792d636c81526801a595b9d0b58db1a560be1b60208201526000825161400e8160298501602087016138d4565b9190910160290192915050565b60408152601660408201527f4f50454e5a455050454c494e5f424153485f5041544800000000000000000000606082015260806020820152600061038a60808301846138f8565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b828110156140bb57603f198786030184526140a68583516138f8565b9450602093840193919091019060010161408a565b50929695505050505050565b6000602082840312156140d957600080fd5b81516001600160401b038111156140ef57600080fd5b82016060818503121561410157600080fd5b614109613a00565b81518060030b811461411a57600080fd5b815260208201516001600160401b0381111561413557600080fd5b61414186828501613a96565b60208301525060408201516001600160401b0381111561416057600080fd5b61416c86828501613a96565b604083015250949350505050565b7f4661696c656420746f2072756e206261736820636f6d6d616e642077697468208152601160f91b6020820152600082516141bc8160218501602087016138d4565b7f222e20496620796f7520617265207573696e672057696e646f77732c2073657460219390910192830152507f20746865204f50454e5a455050454c494e5f424153485f5041544820656e766960418201527f726f6e6d656e74207661726961626c6520746f207468652066756c6c7920717560618201527f616c69666965642070617468206f66207468652062617368206578656375746160818201527f626c652e20466f72206578616d706c652c20696620796f75206172652075736960a18201527f6e672047697420666f722057696e646f77732c206164642074686520666f6c6c60c18201527f6f77696e67206c696e6520696e20746865202e656e762066696c65206f66207960e18201527f6f75722070726f6a65637420287573696e6720666f727761726420736c6173686101018201527f6573293a0a4f50454e5a455050454c494e5f424153485f504154483d22433a2f6101218201527f50726f6772616d2046696c65732f4769742f62696e2f6261736822000000000061014182015261015c01919050565b7f4661696c656420746f2066696e64206c696e65207769746820707265666978208152602760f81b60208201526000835161438c8160218501602088016138d4565b6c0139034b71037baba383aba1d1609d1b60219184019182015283516143b981602e8401602088016138d4565b01602e01949350505050565b7f4661696c656420746f2072756e2075706772616465207361666574792076616c815268034b230ba34b7b71d160bd1b60208201526000825161400e8160298501602087016138d4565b7f55706772616465207361666574792076616c69646174696f6e206661696c65648152611d0560f11b6020820152600082516144528160228501602087016138d4565b9190910160220192915050565b8181038181111561027c5761027c613f8f565b6d021b7b73a3930b1ba103730b6b2960951b81526000825161449b81600e8501602087016138d4565b7f206d75737420626520696e2074686520666f726d6174204d79436f6e74726163600e9390910192830152507f742e736f6c3a4d79436f6e7472616374206f72204d79436f6e74726163742e73602e8201527f6f6c206f72206f75742f4d79436f6e74726163742e736f6c2f4d79436f6e7472604e8201526730b1ba173539b7b760c11b606e820152607601919050565b8082018082111561027c5761027c613f8f565b7f53504458206c6963656e7365206964656e7469666965722000000000000000008152600083516145778160188501602088016138d4565b6301034b7160e51b601891840191820152835161459b81601c8401602088016138d4565b7f20646f6573206e6f74206c6f6f6b206c696b65206120737570706f7274656420601c92909101918201527f6c6963656e736520666f7220626c6f636b206578706c6f726572207665726966603c8201527f69636174696f6e2e205573652074686520606c6963656e73655479706560206f605c8201527f7074696f6e20746f20737065636966792061206c6963656e736520747970652c607c8201527f206f7220736574207468652060736b69704c6963656e73655479706560206f70609c8201527f74696f6e20746f2060747275656020746f20736b69702e00000000000000000060bc82015260d301949350505050565b600082516146a18184602087016138d4565b600160fd1b920191825250600101919050565b7f406f70656e7a657070656c696e2f75706772616465732d636f726540000000008152600082516146ec81601c8501602087016138d4565b91909101601c0192915050565b60006001820161470b5761470b613f8f565b5060010190565b808202811582820484141761027c5761027c613f8f565b6001815b60018411156147645780850481111561474857614748613f8f565b600184161561475657908102905b60019390931c92800261472d565b935093915050565b60008261477b5750600161027c565b816147885750600061027c565b816001811461479e57600281146147a8576147c4565b600191505061027c565b60ff8411156147b9576147b9613f8f565b50506001821b61027c565b5060208310610133831016604e8410600b84101617156147e7575081810a61027c565b6147f46000198484614729565b806000190482111561480857614808613f8f565b029392505050565b600061038a838361476c565b60008161482b5761482b613f8f565b506000190190565b600083516148458184602088016138d4565b601d60f91b90830190815283516148638160018401602088016138d4565b01600101949350505050565b8181036000831280158383131683831282161715612b6a57612b6a613f8f565b6080516115cb6148cd600039600081816101830152818161046e015281816104d00152818161083f0152818161094e01526109b001526115cb6000f3fe608060405234801561001057600080fd5b50600436106101515760003560e01c80636133b4bb116100cd578063a217fddf11610081578063d547741f11610066578063d547741f14610332578063d9caed1214610345578063e63ab1e91461035857600080fd5b8063a217fddf14610317578063c8a023621461031f57600080fd5b80638456cb59116100b25780638456cb59146102a257806385f438c1146102aa57806391d14854146102d157600080fd5b80636133b4bb1461026f57806381100bf01461028257600080fd5b80632f2ff15d116101245780633c2f05a8116101095780633c2f05a8146102375780633f4ba83a1461025c5780635c975abb1461026457600080fd5b80632f2ff15d1461021157806336568abe1461022457600080fd5b806301ffc9a714610156578063116191b61461017e57806321fc65f2146101ca578063248a9ca3146101df575b600080fd5b6101696101643660046111fa565b61037f565b60405190151581526020015b60405180910390f35b6101a57f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610175565b6101dd6101d83660046112ae565b610418565b005b6102036101ed36600461131d565b6000908152600160208190526040909120015490565b604051908152602001610175565b6101dd61021f366004611336565b6105ba565b6101dd610232366004611336565b6105e6565b6002546101a590610100900473ffffffffffffffffffffffffffffffffffffffff1681565b6101dd610644565b60025460ff16610169565b6101dd61027d366004611362565b610679565b6003546101a59073ffffffffffffffffffffffffffffffffffffffff1681565b6101dd6108c6565b6102037f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b6101696102df366004611336565b600091825260016020908152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b610203600081565b6101dd61032d3660046112ae565b6108f8565b6101dd610340366004611336565b610a80565b6101dd6103533660046113bc565b610aa6565b6102037f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061041257507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b610420610b73565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461044a81610bb6565b610452610bc0565b61049373ffffffffffffffffffffffffffffffffffffffff87167f000000000000000000000000000000000000000000000000000000000000000086610bff565b6040517f5131ab5900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690635131ab599061050d9089908990899089908990600401611442565b600060405180830381600087803b15801561052757600080fd5b505af115801561053b573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167f85b5be9cf454e05e0bddf49315178102227c312078eefa3c00294fb4d912ae4e8686866040516105a09392919061149f565b60405180910390a3506105b36001600055565b5050505050565b600082815260016020819052604090912001546105d681610bb6565b6105e08383610c8c565b50505050565b73ffffffffffffffffffffffffffffffffffffffff81163314610635576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61063f8282610d57565b505050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61066e81610bb6565b610676610e16565b50565b600254610100900473ffffffffffffffffffffffffffffffffffffffff166340c10f19306106a88660056114c2565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815273ffffffffffffffffffffffffffffffffffffffff90921660048301526024820152604401600060405180830381600087803b15801561071357600080fd5b505af1158015610727573d6000803e3d6000fd5b5050600254600580546040517fa9059cbb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff91821660048201526024810192909252610100909204909116925063a9059cbb91506044016020604051808303816000875af11580156107af573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107d391906114fc565b506002546107ff90610100900473ffffffffffffffffffffffffffffffffffffffff1685858585610418565b6002546040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000081166004830152610100909204909116906370a0823190602401602060405180830381865afa158015610895573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108b9919061151e565b156105e0576105e0611537565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a6108f081610bb6565b610676610e93565b610900610b73565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461092a81610bb6565b610932610bc0565b61097373ffffffffffffffffffffffffffffffffffffffff87167f000000000000000000000000000000000000000000000000000000000000000086610bff565b6040517fb8969bd400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063b8969bd4906109ed9089908990899089908990600401611442565b600060405180830381600087803b158015610a0757600080fd5b505af1158015610a1b573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fb9d4efa96044e5f5e03e696fa9ae2ff66911cc27e8a637c3627c75bc5b2241c88686866040516105a09392919061149f565b60008281526001602081905260409091200154610a9c81610bb6565b6105e08383610d57565b610aae610b73565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e4610ad881610bb6565b610ae0610bc0565b610b0173ffffffffffffffffffffffffffffffffffffffff85168484610bff565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f9b1bfa7fa9ee420a16e124f794c35ac9f90472acc99140eb2f6447c714cad8eb84604051610b6091815260200190565b60405180910390a35061063f6001600055565b600260005403610baf576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b6106768133610eee565b60025460ff1615610bfd576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6040805173ffffffffffffffffffffffffffffffffffffffff8416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb0000000000000000000000000000000000000000000000000000000017905261063f908490610f7f565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff16610d4f57600083815260016020818152604080842073ffffffffffffffffffffffffffffffffffffffff8716808652925280842080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a4506001610412565b506000610412565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff1615610d4f57600083815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8616808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a4506001610412565b610e1e611015565b600280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b610e9b610bc0565b600280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258610e693390565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16610f7b576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82166004820152602481018390526044015b60405180910390fd5b5050565b6000610fa173ffffffffffffffffffffffffffffffffffffffff841683611051565b90508051600014158015610fc6575080806020019051810190610fc491906114fc565b155b1561063f576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84166004820152602401610f72565b60025460ff16610bfd576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606061105f83836000611066565b9392505050565b6060814710156110a4576040517fcd786059000000000000000000000000000000000000000000000000000000008152306004820152602401610f72565b6000808573ffffffffffffffffffffffffffffffffffffffff1684866040516110cd9190611566565b60006040518083038185875af1925050503d806000811461110a576040519150601f19603f3d011682016040523d82523d6000602084013e61110f565b606091505b509150915061111f868383611129565b9695505050505050565b60608261113e57611139826111b8565b61105f565b8151158015611162575073ffffffffffffffffffffffffffffffffffffffff84163b155b156111b1576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85166004820152602401610f72565b508061105f565b8051156111c85780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006020828403121561120c57600080fd5b81357fffffffff000000000000000000000000000000000000000000000000000000008116811461105f57600080fd5b803573ffffffffffffffffffffffffffffffffffffffff8116811461126057600080fd5b919050565b60008083601f84011261127757600080fd5b50813567ffffffffffffffff81111561128f57600080fd5b6020830191508360208285010111156112a757600080fd5b9250929050565b6000806000806000608086880312156112c657600080fd5b6112cf8661123c565b94506112dd6020870161123c565b935060408601359250606086013567ffffffffffffffff81111561130057600080fd5b61130c88828901611265565b969995985093965092949392505050565b60006020828403121561132f57600080fd5b5035919050565b6000806040838503121561134957600080fd5b823591506113596020840161123c565b90509250929050565b6000806000806060858703121561137857600080fd5b6113818561123c565b935060208501359250604085013567ffffffffffffffff8111156113a457600080fd5b6113b087828801611265565b95989497509550505050565b6000806000606084860312156113d157600080fd5b6113da8461123c565b92506113e86020850161123c565b929592945050506040919091013590565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff8616815273ffffffffffffffffffffffffffffffffffffffff851660208201528360408201526080606082015260006114946080830184866113f9565b979650505050505050565b8381526040602082015260006114b96040830184866113f9565b95945050505050565b80820180821115610412577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006020828403121561150e57600080fd5b8151801515811461105f57600080fd5b60006020828403121561153057600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b6000825160005b81811015611587576020818601810151858301520161156d565b50600092019182525091905056fea2646970667358221220c22f4256b34c7ceff39a5acf8d5ae318549565a6265a9a23b2d9459a9845ff3f64736f6c634300081a0033608060405234801561001057600080fd5b50604051610c9f380380610c9f83398101604081905261002f9161010d565b8181600361003d83826101ff565b50600461004a82826101ff565b50505050506102bd565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261007b57600080fd5b81516001600160401b0381111561009457610094610054565b604051601f8201601f19908116603f011681016001600160401b03811182821017156100c2576100c2610054565b6040528181528382016020018510156100da57600080fd5b60005b828110156100f9576020818601810151838301820152016100dd565b506000918101602001919091529392505050565b6000806040838503121561012057600080fd5b82516001600160401b0381111561013657600080fd5b6101428582860161006a565b602085015190935090506001600160401b0381111561016057600080fd5b61016c8582860161006a565b9150509250929050565b600181811c9082168061018a57607f821691505b6020821081036101aa57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156101fa57806000526020600020601f840160051c810160208510156101d75750805b601f840160051c820191505b818110156101f757600081556001016101e3565b50505b505050565b81516001600160401b0381111561021857610218610054565b61022c816102268454610176565b846101b0565b6020601f82116001811461026057600083156102485750848201515b600019600385901b1c1916600184901b1784556101f7565b600084815260208120601f198516915b828110156102905787850151825560209485019460019092019101610270565b50848210156102ae5786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b6109d3806102cc6000396000f3fe608060405234801561001057600080fd5b50600436106100be5760003560e01c806340c10f191161007657806395d89b411161005b57806395d89b4114610183578063a9059cbb1461018b578063dd62ed3e1461019e57600080fd5b806340c10f191461013857806370a082311461014d57600080fd5b806318160ddd116100a757806318160ddd1461010457806323b872dd14610116578063313ce5671461012957600080fd5b806306fdde03146100c3578063095ea7b3146100e1575b600080fd5b6100cb6101e4565b6040516100d891906107bf565b60405180910390f35b6100f46100ef366004610854565b610276565b60405190151581526020016100d8565b6002545b6040519081526020016100d8565b6100f461012436600461087e565b610290565b604051601281526020016100d8565b61014b610146366004610854565b6102b4565b005b61010861015b3660046108bb565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6100cb6102c2565b6100f4610199366004610854565b6102d1565b6101086101ac3660046108dd565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6060600380546101f390610910565b80601f016020809104026020016040519081016040528092919081815260200182805461021f90610910565b801561026c5780601f106102415761010080835404028352916020019161026c565b820191906000526020600020905b81548152906001019060200180831161024f57829003601f168201915b5050505050905090565b6000336102848185856102df565b60019150505b92915050565b60003361029e8582856102f1565b6102a98585856103c5565b506001949350505050565b6102be8282610470565b5050565b6060600480546101f390610910565b6000336102848185856103c5565b6102ec83838360016104cc565b505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146103bf57818110156103b0576040517ffb8f41b200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416600482015260248101829052604481018390526064015b60405180910390fd5b6103bf848484840360006104cc565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8316610415576040517f96c6fd1e000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff8216610465576040517fec442f05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b6102ec838383610614565b73ffffffffffffffffffffffffffffffffffffffff82166104c0576040517fec442f05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b6102be60008383610614565b73ffffffffffffffffffffffffffffffffffffffff841661051c576040517fe602df05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff831661056c576040517f94280d62000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260016020908152604080832093871683529290522082905580156103bf578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161060691815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff831661064c5780600260008282546106419190610963565b909155506106fe9050565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260208190526040902054818110156106d2576040517fe450d38c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8516600482015260248101829052604481018390526064016103a7565b73ffffffffffffffffffffffffffffffffffffffff841660009081526020819052604090209082900390555b73ffffffffffffffffffffffffffffffffffffffff821661072757600280548290039055610753565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090208054820190555b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516107b291815260200190565b60405180910390a3505050565b602081526000825180602084015260005b818110156107ed57602081860181015160408684010152016107d0565b5060006040828501015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011684010191505092915050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461084f57600080fd5b919050565b6000806040838503121561086757600080fd5b6108708361082b565b946020939093013593505050565b60008060006060848603121561089357600080fd5b61089c8461082b565b92506108aa6020850161082b565b929592945050506040919091013590565b6000602082840312156108cd57600080fd5b6108d68261082b565b9392505050565b600080604083850312156108f057600080fd5b6108f98361082b565b91506109076020840161082b565b90509250929050565b600181811c9082168061092457607f821691505b60208210810361095d577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b8082018082111561028a577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea26469706673582212207e804ca539d49155d2b6bc19268ce22f9f857027c75247d69fb0d56a089c93d464736f6c634300081a00330000000000000000000000007109709ecfa91a80626ff3989d68f67f5b1dd12d54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f7420"; + "0x600380546001600160a01b03191633908117909155600e60a09081526d11d85d195dd85e5155934b9cdbdb60921b60c0526101049190915261012361012481905261014452606460e090815261016460405261010080516001600160e01b0390811663c0c53b8b60e01b1790915261007992919061026316565b600480546001600160a01b03929092166001600160a01b03199283168117909155600580549092161790553480156100b057600080fd5b5060055460035460016000556002805460ff191690556001600160a01b039182169116808215806100e857506001600160a01b038216155b806100fa57506001600160a01b038116155b156101185760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b038316608052610130600082610282565b5061015b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a82610282565b506101867f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e483610282565b505050506040516101969061380e565b60408082526004908201819052631d195cdd60e21b606083015260806020830181905282015263151154d560e21b60a082015260c001604051809103906000f0801580156101e8573d6000803e3d6000fd5b5060028054610100600160a81b0319166101006001600160a01b039384160217905560055460405163ae7a3a6f60e01b815230600482015291169063ae7a3a6f90602401600060405180830381600087803b15801561024657600080fd5b505af115801561025a573d6000803e3d6000fd5b5050505061488f565b600061026d61381b565b610278848483610315565b9150505b92915050565b60008281526001602090815260408083206001600160a01b038516845290915281205460ff1661030d5760008381526001602081815260408084206001600160a01b0387168086529252808420805460ff19169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a450600161027c565b50600061027c565b6000806103228584610391565b90506103866040518060400160405280601d81526020017f4552433139363750726f78792e736f6c3a4552433139363750726f78790000008152508286604051602001610370929190613924565b60408051601f198184030181529190528561039d565b9150505b9392505050565b600061038a83836103d1565b60c081015151600090156103c7576103c084848460c001516103f260201b60201c565b905061038a565b6103c0848461056b565b60006103dd8383610638565b61038a8383602001518461039d60201b60201c565b6000806103fd610648565b9050600061040b86836106e2565b905060006104288260600151836020015185610b0560201b60201c565b9050600061043883838989610cba565b9050600061044582611936565b602081015181519192509060030b1561049e5789826040015160405160200161046f929190613948565b60408051601f198184030181529082905262461bcd60e51b8252610495916004016139ae565b60405180910390fd5b60006104e76040518060400160405280601581526020017f4465706c6f79656420746f20616464726573733a200000000000000000000000815250836001611acd60201b60201c565b60405163c6ce059d60e01b8152909150600080516020616b378339815191529063c6ce059d9061051b9084906004016139ae565b602060405180830381865afa158015610538573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061055c91906139c1565b9b9a5050505050505050505050565b604051638d1cc92560e01b81526000908190600080516020616b3783398151915290638d1cc925906105a19087906004016139ae565b600060405180830381865afa1580156105be573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526105e69190810190613ab6565b905060006106158285604051602001610600929190613aea565b60408051601f19818403018152919052611c6d565b90506001600160a01b03811661027857848460405160200161046f929190613b19565b61064482826000611c80565b5050565b60408051808201825260038152621bdd5d60ea1b602082015290516334515cdb60e21b8152606091600080516020616b3783398151915291829063d145736c90610696908490600401613ba8565b600060405180830381865afa1580156106b3573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526106db9190810190613bdd565b9250505090565b6107146040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b6000600080516020616b3783398151915290506107596040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b61076285611d5a565b6020820152600061077286611faf565b90506000836001600160a01b031663d930a0e66040518163ffffffff1660e01b8152600401600060405180830381865afa1580156107b4573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526107dc9190810190613bdd565b868385602001516040516020016107f69493929190613c25565b60408051601f19818403018152908290526360f9bb1160e01b825291506000906001600160a01b038616906360f9bb11906108359085906004016139ae565b600060405180830381865afa158015610852573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261087a9190810190613bdd565b604051636da11afb60e11b81529091506001600160a01b0386169063db4235f6906108a9908490600401613cbd565b602060405180830381865afa1580156108c6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108ea9190613cf6565b6108ff578160405160200161046f9190613d18565b6040516309389f5960e31b81526001600160a01b038616906349c4fac89061092b908490600401613d8f565b600060405180830381865afa158015610948573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526109709190810190613bdd565b8452604051636da11afb60e11b81526001600160a01b0386169063db4235f69061099e908490600401613dd5565b602060405180830381865afa1580156109bb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109df9190613cf6565b15610a5b576040516309389f5960e31b81526001600160a01b038616906349c4fac890610a10908490600401613dd5565b600060405180830381865afa158015610a2d573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610a559190810190613bdd565b60408501525b846001600160a01b03166349c4fac8828660000151604051602001610a809190613e16565b6040516020818303038152906040526040518363ffffffff1660e01b8152600401610aac929190613e71565b600060405180830381865afa158015610ac9573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610af19190810190613bdd565b606085015250608083015250949350505050565b60408051600480825260a0820190925260609160009190816020015b6060815260200190600190039081610b21579050509050604051806040016040528060048152602001630677265760e41b81525081600081518110610b6857610b68613e96565b6020026020010181905250604051806040016040528060038152602001620b5c9b60ea1b81525081600181518110610ba257610ba2613e96565b602002602001018190525084604051602001610bbe9190613eac565b60405160208183030381529060405281600281518110610be057610be0613e96565b602002602001018190525082604051602001610bfc9190613ee1565b60405160208183030381529060405281600381518110610c1e57610c1e613e96565b60209081029190910101526000610c3482611936565b9050600081602001519050610c9b610c6e60405180604001604052806005815260200164173539b7b760d91b81525061213260201b60201c565b6040805180820182526000808252602091820152815180830190925284518252808501908201529061215f565b610cb0578560405160200161046f9190613f10565b9695505050505050565b60a0810151604080518082018252600080825260209182015281518083019092528251808352928101910152606090600080516020616b378339815191529015610d04565b511590565b610e2057826020015115610d945760405162461bcd60e51b81526020600482015260586024820152600080516020616b5783398151915260448201527f62652075736564207768656e207468652060736b6970566572696679536f757260648201527f6365436f646560206f7074696f6e206973206074727565600000000000000000608482015260a401610495565b8260c0015115610e205760405162461bcd60e51b81526020600482015260536024820152600080516020616b5783398151915260448201527f62652075736564207768656e207468652060736b69704c6963656e736554797060648201527f6560206f7074696f6e2069732060747275656000000000000000000000000000608482015260a401610495565b6040805160ff8082526120008201909252600091816020015b6060815260200190600190039081610e395790505090506000604051806040016040528060038152602001620dce0f60eb1b815250828280610e7a90613fa5565b935060ff1681518110610e8f57610e8f613e96565b60200260200101819052506040518060400160405280600d81526020016c302e302e312d616c7068612e3760981b815250604051602001610ed09190613fc4565b604051602081830303815290604052828280610eeb90613fa5565b935060ff1681518110610f0057610f00613e96565b6020026020010181905250604051806040016040528060068152602001656465706c6f7960d01b815250828280610f3690613fa5565b935060ff1681518110610f4b57610f4b613e96565b60200260200101819052506040518060400160405280600e81526020016d2d2d636f6e74726163744e616d6560901b815250828280610f8990613fa5565b935060ff1681518110610f9e57610f9e613e96565b60200260200101819052508760200151828280610fba90613fa5565b935060ff1681518110610fcf57610fcf613e96565b60200260200101819052506040518060400160405280600e81526020016d05a5ac6dedce8e4c2c6e8a0c2e8d60931b81525082828061100d90613fa5565b935060ff168151811061102257611022613e96565b60209081029190910101528751828261103a81613fa5565b935060ff168151811061104f5761104f613e96565b6020026020010181905250604051806040016040528060098152602001680b4b58da185a5b925960ba1b81525082828061108890613fa5565b935060ff168151811061109d5761109d613e96565b60209081029190910101526110b1466121c0565b82826110bc81613fa5565b935060ff16815181106110d1576110d1613e96565b60200260200101819052506040518060400160405280600f81526020016e2d2d6275696c64496e666f46696c6560881b81525082828061111090613fa5565b935060ff168151811061112557611125613e96565b60200260200101819052508682828061113d90613fa5565b935060ff168151811061115257611152613e96565b60209081029190910101528551156112605760408051808201909152601581527f2d2d636f6e7374727563746f7242797465636f64650000000000000000000000602082015282826111a381613fa5565b935060ff16815181106111b8576111b8613e96565b60209081029190910101526040516371aad10d60e01b81526001600160a01b038416906371aad10d906111ef9089906004016139ae565b600060405180830381865afa15801561120c573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526112349190810190613bdd565b828261123f81613fa5565b935060ff168151811061125457611254613e96565b60200260200101819052505b84602001511561130d576040805180820190915260128152712d2d766572696679536f75726365436f646560701b6020820152828261129e81613fa5565b935060ff16815181106112b3576112b3613e96565b60200260200101819052506040518060400160405280600581526020016466616c736560d81b8152508282806112e890613fa5565b935060ff16815181106112fd576112fd613e96565b6020026020010181905250611474565b611323610cff8660a0015161213260201b60201c565b6113a65760408051808201909152600d81526c2d2d6c6963656e73655479706560981b6020820152828261135681613fa5565b935060ff168151811061136b5761136b613e96565b60200260200101819052508460a0015160405160200161138b9190613eac565b6040516020818303038152906040528282806112e890613fa5565b8460c001511580156113cb57506113c9610cff896040015161213260201b60201c565b155b156114745760408051808201909152600d81526c2d2d6c6963656e73655479706560981b602082015282826113ff81613fa5565b935060ff168151811061141457611414613e96565b602090810291909101015261142888612252565b6040516020016114389190613eac565b60405160208183030381529060405282828061145390613fa5565b935060ff168151811061146857611468613e96565b60200260200101819052505b61148a610cff866040015161213260201b60201c565b61150d5760408051808201909152600b81526a0b4b5c995b185e595c925960aa1b602082015282826114bb81613fa5565b935060ff16815181106114d0576114d0613e96565b602002602001018190525084604001518282806114ec90613fa5565b935060ff168151811061150157611501613e96565b60200260200101819052505b6060850151156115fe576040805180820190915260068152650b4b5cd85b1d60d21b6020820152828261153f81613fa5565b935060ff168151811061155457611554613e96565b60209081029190910101526060850151604051631623433d60e31b815260048101919091526001600160a01b0384169063b11a19e890602401600060405180830381865afa1580156115aa573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526115d29190810190613bdd565b82826115dd81613fa5565b935060ff16815181106115f2576115f2613e96565b60200260200101819052505b60e085015151156116905760408051808201909152600a8152690b4b59d85cd31a5b5a5d60b21b6020820152828261163581613fa5565b935060ff168151811061164a5761164a613e96565b602090810291909101015260e085015151611664906121c0565b828261166f81613fa5565b935060ff168151811061168457611684613e96565b60200260200101819052505b60e0850151602001511561172d5760408051808201909152600a8152692d2d676173507269636560b01b602082015282826116ca81613fa5565b935060ff16815181106116df576116df613e96565b60200260200101819052506117018560e00151602001516121c060201b60201c565b828261170c81613fa5565b935060ff168151811061172157611721613e96565b60200260200101819052505b60e085015160400151156117ce5760408051808201909152600e81526d2d2d6d617846656550657247617360901b6020820152828261176b81613fa5565b935060ff168151811061178057611780613e96565b60200260200101819052506117a28560e00151604001516121c060201b60201c565b82826117ad81613fa5565b935060ff16815181106117c2576117c2613e96565b60200260200101819052505b60e0850151606001511561187e5760408051808201909152601681527f2d2d6d61785072696f72697479466565506572476173000000000000000000006020820152828261181b81613fa5565b935060ff168151811061183057611830613e96565b60200260200101819052506118528560e00151606001516121c060201b60201c565b828261185d81613fa5565b935060ff168151811061187257611872613e96565b60200260200101819052505b60008160ff166001600160401b0381111561189b5761189b6139ea565b6040519080825280602002602001820160405280156118ce57816020015b60608152602001906001900390816118b95790505b50905060005b8260ff168160ff16101561192757838160ff16815181106118f7576118f7613e96565b6020026020010151828260ff168151811061191457611914613e96565b60209081029190910101526001016118d4565b5093505050505b949350505050565b61195d6040518060600160405280600060030b815260200160608152602001606081525090565b6040805180820182526004808252630c4c2e6d60e31b602083015291516334515cdb60e21b8152600080516020616b3783398151915292600091849163d145736c916119ab9186910161401b565b600060405180830381865afa1580156119c8573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526119f09190810190613bdd565b905060006119fe8683612908565b90506000846001600160a01b031663f45c1ce7836040518263ffffffff1660e01b8152600401611a2e9190614062565b6000604051808303816000875af1158015611a4d573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611a7591908101906140c7565b805190915060030b15801590611a8e5750602081015151155b8015611a9d5750604081015151155b15610cb05781600081518110611ab557611ab5613e96565b602002602001015160405160200161046f919061417a565b60606000611b028560408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600080825260209182015281518083019092528651825280870190820152909150611b399082905b90612a42565b15611c36576000611bb682611bb081611baa611b7c8a60408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6040805180820182526000808252602091820152815180830190925282518252918201519181019190915290565b90612a69565b90612ac6565b9050611bea611be3604051806040016040528060018152602001600560f91b81525061213260201b60201c565b8290612a42565b15611c2457611c21611c1a604051806040016040528060018152602001600560f91b81525061213260201b60201c565b8290612b4b565b90505b611c2d81612b71565b9250505061038a565b8215611c4f57848460405160200161046f92919061434a565b505060408051602081019091526000815261038a565b509392505050565b6000808251602084016000f09392505050565b8160a0015115611c8f57505050565b6000611c9c848484612bd6565b90506000611ca982611936565b602081015181519192509060030b158015611d1c5750611d1c611cf0604051806040016040528060078152602001665355434345535360c81b81525061213260201b60201c565b604080518082018252600080825260209182015281518083019092528451825280850190820152611b33565b15611d2957505050505050565b60408201515115611d4957816040015160405160200161046f91906143c5565b8060405160200161046f919061440f565b60606000611d8f8360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b9050611dc6611dbf604051806040016040528060048152602001630b9cdbdb60e21b81525061213260201b60201c565b829061215f565b15611e085761038a611e03611dfc604051806040016040528060048152602001630b9cdbdb60e21b81525061213260201b60201c565b83906130e9565b612b71565b611e3a611e33604051806040016040528060018152602001601d60f91b81525061213260201b60201c565b8290613173565b600103611ea257611e6c611c1a604051806040016040528060018152602001601d60f91b81525061213260201b60201c565b5061038a611e03611e9b604051806040016040528060018152602001601d60f91b81525061213260201b60201c565b8390612b4b565b611ed1611dbf60405180604001604052806005815260200164173539b7b760d91b81525061213260201b60201c565b15611f9e576000611f0982611f04604051806040016040528060018152602001602f60f81b81525061213260201b60201c565b613208565b905060008160018351611f1c919061445f565b81518110611f2c57611f2c613e96565b60200260200101519050611f95611e03611f6860405180604001604052806005815260200164173539b7b760d91b81525061213260201b60201c565b604080518082018252600080825260209182015281518083019092528551825280860190820152906130e9565b95945050505050565b8260405160200161046f9190614472565b60606000611fe48360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b9050612014611dbf604051806040016040528060048152602001630b9cdbdb60e21b81525061213260201b60201c565b156120225761038a81612b71565b61204d611e33604051806040016040528060018152602001601d60f91b81525061213260201b60201c565b6001036120825761038a611e03611e9b604051806040016040528060018152602001601d60f91b81525061213260201b60201c565b6120b1611dbf60405180604001604052806005815260200164173539b7b760d91b81525061213260201b60201c565b15611f9e5760006120e482611f04604051806040016040528060018152602001602f60f81b81525061213260201b60201c565b90506001815111156121205780600282516120ff919061445f565b8151811061210f5761210f613e96565b602002602001015192505050919050565b508260405160200161046f9190614472565b60408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b8051825160009111156121745750600061027c565b8151835160208501516000929161218a9161452c565b612194919061445f565b9050826020015181036121ab57600191505061027c565b82516020840151819020912014905092915050565b606060006121cd836132ac565b60010190506000816001600160401b038111156121ec576121ec6139ea565b6040519080825280601f01601f191660200182016040528015612216576020820181803683370190505b5090508181016020015b600019016f181899199a1a9b1b9c1cb0b131b232b360811b600a86061a8153600a850494508461222057509392505050565b60606000612269836040015161213260201b60201c565b90506122a661229f6040518060400160405280600a8152602001691553931250d15394d15160b21b81525061213260201b60201c565b829061338e565b156122cd5750506040805180820190915260048152634e6f6e6560e01b6020820152919050565b61230061229f60405180604001604052806009815260200168556e6c6963656e736560b81b81525061213260201b60201c565b1561232c575050604080518082019091526009815268556e6c6963656e736560b81b6020820152919050565b61235961229f6040518060400160405280600381526020016213525560ea1b81525061213260201b60201c565b1561237f57505060408051808201909152600381526213525560ea1b6020820152919050565b6123b561229f6040518060400160405280600c81526020016b47504c2d322e302d6f6e6c7960a01b81525061213260201b60201c565b806123f557506123f561229f6040518060400160405280601081526020016f23a8261699171816b7b916b630ba32b960811b81525061213260201b60201c565b1561242157505060408051808201909152600981526823a72a9023a8263b1960b91b6020820152919050565b61245761229f6040518060400160405280600c81526020016b47504c2d332e302d6f6e6c7960a01b81525061213260201b60201c565b80612497575061249761229f6040518060400160405280601081526020016f23a8261699971816b7b916b630ba32b960811b81525061213260201b60201c565b156124c3575050604080518082019091526009815268474e552047504c763360b81b6020820152919050565b6124fa61229f6040518060400160405280600d81526020016c4c47504c2d322e312d6f6e6c7960981b81525061213260201b60201c565b8061253b575061253b61229f604051806040016040528060118152602001702623a8261699171896b7b916b630ba32b960791b81525061213260201b60201c565b1561256a57505060408051808201909152600c81526b474e55204c47504c76322e3160a01b6020820152919050565b6125a161229f6040518060400160405280600d81526020016c4c47504c2d332e302d6f6e6c7960981b81525061213260201b60201c565b806125e257506125e261229f604051806040016040528060118152602001702623a8261699971816b7b916b630ba32b960791b81525061213260201b60201c565b1561260f57505060408051808201909152600a815269474e55204c47504c763360b01b6020820152919050565b61264561229f6040518060400160405280600c81526020016b4253442d322d436c6175736560a01b81525061213260201b60201c565b1561267457505060408051808201909152600c81526b4253442d322d436c6175736560a01b6020820152919050565b6126aa61229f6040518060400160405280600c81526020016b4253442d332d436c6175736560a01b81525061213260201b60201c565b156126d957505060408051808201909152600c81526b4253442d332d436c6175736560a01b6020820152919050565b61270a61229f6040518060400160405280600781526020016604d504c2d322e360cc1b81525061213260201b60201c565b1561273457505060408051808201909152600781526604d504c2d322e360cc1b6020820152919050565b61276561229f6040518060400160405280600781526020016604f534c2d332e360cc1b81525061213260201b60201c565b1561278f57505060408051808201909152600781526604f534c2d332e360cc1b6020820152919050565b6127c361229f6040518060400160405280600a81526020016904170616368652d322e360b41b81525061213260201b60201c565b156127f057505060408051808201909152600a81526904170616368652d322e360b41b6020820152919050565b61282761229f6040518060400160405280600d81526020016c4147504c2d332e302d6f6e6c7960981b81525061213260201b60201c565b80612868575061286861229f6040518060400160405280601181526020017020a3a8261699971816b7b916b630ba32b960791b81525061213260201b60201c565b1561289557505060408051808201909152600a815269474e55204147504c763360b01b6020820152919050565b6128c761229f604051806040016040528060088152602001674255534c2d312e3160c01b81525061213260201b60201c565b156128f157505060408051808201909152600781526642534c20312e3160c81b6020820152919050565b6040808401518451915161046f929060200161453f565b60608060005b8451811015612993578185828151811061292a5761292a613e96565b6020026020010151604051602001612943929190613aea565b604051602081830303815290604052915060018551612962919061445f565b811461298b5781604051602001612979919061468f565b60405160208183030381529060405291505b60010161290e565b5060408051600380825260808201909252600091816020015b60608152602001906001900390816129ac57905050905083816000815181106129d7576129d7613e96565b6020026020010181905250604051806040016040528060028152602001612d6360f01b81525081600181518110612a1057612a10613e96565b60200260200101819052508181600281518110612a2f57612a2f613e96565b6020908102919091010152949350505050565b6020808301518351835192840151600093612a6092918491906133a2565b14159392505050565b6040805180820190915260008082526020808301829052845185820151855192860151612a9693906134b3565b9050836020015181612aa8919061445f565b84518590612ab790839061445f565b90525060208401525090919050565b6040805180820190915260008082526020820152815183511015612aeb57508161027c565b6020808301519084015160019114612b125750815160208481015190840151829020919020145b8015612b4357825184518590612b2990839061445f565b9052508251602085018051612b3f90839061452c565b9052505b509192915050565b6040805180820190915260008082526020820152612b6a8383836135d3565b5092915050565b6060600082600001516001600160401b03811115612b9157612b916139ea565b6040519080825280601f01601f191660200182016040528015612bbb576020820181803683370190505b50602084810151855192935090830191612b6a918391613679565b60606000612be2610648565b6040805160ff808252612000820190925291925060009190816020015b6060815260200190600190039081612bff5790505090506000604051806040016040528060038152602001620dce0f60eb1b815250828280612c4090613fa5565b935060ff1681518110612c5557612c55613e96565b6020026020010181905250604051806040016040528060078152602001665e312e33322e3360c81b815250604051602001612c9091906146b4565b604051602081830303815290604052828280612cab90613fa5565b935060ff1681518110612cc057612cc0613e96565b60200260200101819052506040518060400160405280600881526020016776616c696461746560c01b815250828280612cf890613fa5565b935060ff1681518110612d0d57612d0d613e96565b602002602001018190525082604051602001612d299190613ee1565b604051602081830303815290604052828280612d4490613fa5565b935060ff1681518110612d5957612d59613e96565b60200260200101819052506040518060400160405280600a8152602001690b4b58dbdb9d1c9858dd60b21b815250828280612d9390613fa5565b935060ff1681518110612da857612da8613e96565b6020908102919091010152612dbd87846136f3565b8282612dc881613fa5565b935060ff1681518110612ddd57612ddd613e96565b602090810291909101015285515115612e755760408051808201909152600b81526a2d2d7265666572656e636560a81b60208201528282612e1d81613fa5565b935060ff1681518110612e3257612e32613e96565b60209081029190910101528551612e4990846136f3565b8282612e5481613fa5565b935060ff1681518110612e6957612e69613e96565b60200260200101819052505b856080015115612ee35760408051808201909152601881527f2d2d756e73616665536b697053746f72616765436865636b000000000000000060208201528282612ebe81613fa5565b935060ff1681518110612ed357612ed3613e96565b6020026020010181905250612f3e565b8415612f3e576040805180820190915260128152712d2d726571756972655265666572656e636560701b60208201528282612f1d81613fa5565b935060ff1681518110612f3257612f32613e96565b60200260200101819052505b60408601515115612fca5760408051808201909152600d81526c2d2d756e73616665416c6c6f7760981b60208201528282612f7881613fa5565b935060ff1681518110612f8d57612f8d613e96565b60200260200101819052508560400151828280612fa990613fa5565b935060ff1681518110612fbe57612fbe613e96565b60200260200101819052505b8560600151156130345760408051808201909152601481527f2d2d756e73616665416c6c6f7752656e616d65730000000000000000000000006020820152828261301381613fa5565b935060ff168151811061302857613028613e96565b60200260200101819052505b60008160ff166001600160401b03811115613051576130516139ea565b60405190808252806020026020018201604052801561308457816020015b606081526020019060019003908161306f5790505b50905060005b8260ff168160ff1610156130dd57838160ff16815181106130ad576130ad613e96565b6020026020010151828260ff16815181106130ca576130ca613e96565b602090810291909101015260010161308a565b50979650505050505050565b604080518082019091526000808252602082015281518351101561310e57508161027c565b815183516020850151600092916131249161452c565b61312e919061445f565b6020840151909150600190821461314f575082516020840151819020908220145b801561316a5783518551869061316690839061445f565b9052505b50929392505050565b8051825160208085015190840151600093849390926131939284906134b3565b61319d919061452c565b90505b835160208501516131b1919061452c565b8111612b6a57816131c1816146f9565b92505082600001516131f78560200151836131dc919061445f565b86516131e8919061445f565b855160208701518591906134b3565b613201919061452c565b90506131a0565b606060006132168484613173565b61322190600161452c565b6001600160401b03811115613238576132386139ea565b60405190808252806020026020018201604052801561326b57816020015b60608152602001906001900390816132565790505b50905060005b8151811015611c6557613287611e038686612b4b565b82828151811061329957613299613e96565b6020908102919091010152600101613271565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f01000000000000000083106132f5577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310613321576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc10000831061333f57662386f26fc10000830492506010015b6305f5e1008310613357576305f5e100830492506008015b612710831061336b57612710830492506004015b6064831061337d576064830492506002015b600a831061027c5760010192915050565b600061339a8383613733565b159392505050565b6000808584116134a9576020841161345557600084156133ed5760016133c986602061445f565b6133d4906008614712565b6133df906002614810565b6133e9919061445f565b1990505b83518116856133fc898961452c565b613406919061445f565b805190935082165b81811461344057878411613428578794505050505061192e565b836134328161481c565b94505082845116905061340e565b61344a878561452c565b94505050505061192e565b838320613462858861445f565b61346c908761452c565b91505b8582106134a7578482208082036134945761348a868461452c565b935050505061192e565b61349f60018461445f565b92505061346f565b505b5092949350505050565b600083818685116135be576020851161356d57600085156134ff5760016134db87602061445f565b6134e6906008614712565b6134f1906002614810565b6134fb919061445f565b1990505b845181166000876135108b8b61452c565b61351a919061445f565b855190915083165b82811461355f578186106135475761353a8b8b61452c565b965050505050505061192e565b85613551816146f9565b965050838651169050613522565b85965050505050505061192e565b508383206000905b61357f868961445f565b82116135bc5785832080820361359b578394505050505061192e565b6135a660018561452c565b93505081806135b4906146f9565b925050613575565b505b6135c8878761452c565b979650505050505050565b604080518082019091526000808252602080830182905285518682015186519287015161360093906134b3565b60208087018051918601919091525190915061361c908261445f565b83528451602086015161362f919061452c565b810361363e5760008552613670565b8351835161364c919061452c565b8551869061365b90839061445f565b905250835161366a908261452c565b60208601525b50909392505050565b602081106136b1578151835261369060208461452c565b925061369d60208361452c565b91506136aa60208261445f565b9050613679565b60001981156136e05760016136c783602061445f565b6136d390610100614810565b6136dd919061445f565b90505b9151835183169219169190911790915250565b6060600061370184846106e2565b805160208083015160405193945061371b93909101614833565b60405160208183030381529060405291505092915050565b8151815160009190811115613746575081515b6020808501519084015160005b838110156137ff57825182518082146137cf5760001960208710156137ae5760018461378089602061445f565b61378a919061452c565b613795906008614712565b6137a0906002614810565b6137aa919061445f565b1990505b81811683821681810391146137cc57975061027c9650505050505050565b50505b6137da60208661452c565b94506137e760208561452c565b935050506020816137f8919061452c565b9050613753565b5084518651610cb0919061486f565b610c9f80615e9883390190565b6040518060e0016040528060608152602001606081526020016060815260200160001515815260200160001515815260200160001515815260200161385e613863565b905290565b6040518061010001604052806000151581526020016000151581526020016060815260200160008019168152602001606081526020016060815260200160001515815260200161385e6040518060800160405280600081526020016000815260200160008152602001600081525090565b60005b838110156138ef5781810151838201526020016138d7565b50506000910152565b600081518084526139108160208601602086016138d4565b601f01601f19169290920160200192915050565b6001600160a01b038316815260406020820181905260009061192e908301846138f8565b7f4661696c656420746f206465706c6f7920636f6e74726163742000000000000081526000835161398081601a8501602088016138d4565b6101d160f51b601a9184019182015283516139a281601c8401602088016138d4565b01601c01949350505050565b60208152600061038a60208301846138f8565b6000602082840312156139d357600080fd5b81516001600160a01b038116811461038a57600080fd5b634e487b7160e01b600052604160045260246000fd5b604051606081016001600160401b0381118282101715613a2257613a226139ea565b60405290565b6000806001600160401b03841115613a4257613a426139ea565b50604051601f19601f85018116603f011681018181106001600160401b0382111715613a7057613a706139ea565b604052838152905080828401851015613a8857600080fd5b611c658460208301856138d4565b600082601f830112613aa757600080fd5b61038a83835160208501613a28565b600060208284031215613ac857600080fd5b81516001600160401b03811115613ade57600080fd5b61027884828501613a96565b60008351613afc8184602088016138d4565b835190830190613b108183602088016138d4565b01949350505050565b7f4661696c656420746f206465706c6f7920636f6e747261637420000000000000815260008351613b5181601a8501602088016138d4565b7f207573696e6720636f6e7374727563746f722064617461202200000000000000601a918401918201528351613b8e8160338401602088016138d4565b601160f91b60339290910191820152603401949350505050565b60408152600b60408201526a1193d55391149657d3d55560aa1b606082015260806020820152600061038a60808301846138f8565b600060208284031215613bef57600080fd5b81516001600160401b03811115613c0557600080fd5b8201601f81018413613c1657600080fd5b61027884825160208401613a28565b60008551613c37818460208a016138d4565b602f60f81b9083019081528551613c55816001840160208a016138d4565b602f60f81b600192909101918201528451613c778160028401602089016138d4565b600181830101915050602f60f81b60018201528351613c9d8160028401602088016138d4565b64173539b7b760d91b600292909101918201526007019695505050505050565b604081526000613cd060408301846138f8565b828103602084015260048152630b985cdd60e21b60208201526040810191505092915050565b600060208284031215613d0857600080fd5b8151801515811461038a57600080fd5b7f436f756c64206e6f742066696e642041535420696e2061727469666163742000815260008251613d5081601f8501602087016138d4565b7f2e205365742060617374203d20747275656020696e20666f756e6472792e746f601f939091019283015250611b5b60f21b603f820152604101919050565b604081526000613da260408301846138f8565b8281036020840152601181527005cc2e6e85cc2c4e6ded8eae8caa0c2e8d607b1b60208201526040810191505092915050565b604081526000613de860408301846138f8565b8281036020840152600c81526b2e6173742e6c6963656e736560a01b60208201526040810191505092915050565b7f2e6d657461646174612e736f75726365732e5b27000000000000000000000000815260008251613e4e8160148501602087016138d4565b6b13ae9735b2b1b1b0b5991a9b60a11b6014939091019283015250602001919050565b604081526000613e8460408301856138f8565b828103602084015261038681856138f8565b634e487b7160e01b600052603260045260246000fd5b601160f91b81528151600090613ec98160018501602087016138d4565b601160f91b6001939091019283015250600201919050565b60008251613ef38184602087016138d4565b6a2f6275696c642d696e666f60a81b920191825250600b01919050565b7f436f756c64206e6f742066696e64206275696c642d696e666f2066696c65207781527f697468206d61746368696e6720736f7572636520636f6465206861736820666f60208201526a0391031b7b73a3930b1ba160ad1b604082015260008251613f8281604b8501602087016138d4565b91909101604b0192915050565b634e487b7160e01b600052601160045260246000fd5b600060ff821660ff8103613fbb57613fbb613f8f565b60010192915050565b7f406f70656e7a657070656c696e2f646566656e6465722d6465706c6f792d636c81526801a595b9d0b58db1a560be1b60208201526000825161400e8160298501602087016138d4565b9190910160290192915050565b60408152601660408201527f4f50454e5a455050454c494e5f424153485f5041544800000000000000000000606082015260806020820152600061038a60808301846138f8565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b828110156140bb57603f198786030184526140a68583516138f8565b9450602093840193919091019060010161408a565b50929695505050505050565b6000602082840312156140d957600080fd5b81516001600160401b038111156140ef57600080fd5b82016060818503121561410157600080fd5b614109613a00565b81518060030b811461411a57600080fd5b815260208201516001600160401b0381111561413557600080fd5b61414186828501613a96565b60208301525060408201516001600160401b0381111561416057600080fd5b61416c86828501613a96565b604083015250949350505050565b7f4661696c656420746f2072756e206261736820636f6d6d616e642077697468208152601160f91b6020820152600082516141bc8160218501602087016138d4565b7f222e20496620796f7520617265207573696e672057696e646f77732c2073657460219390910192830152507f20746865204f50454e5a455050454c494e5f424153485f5041544820656e766960418201527f726f6e6d656e74207661726961626c6520746f207468652066756c6c7920717560618201527f616c69666965642070617468206f66207468652062617368206578656375746160818201527f626c652e20466f72206578616d706c652c20696620796f75206172652075736960a18201527f6e672047697420666f722057696e646f77732c206164642074686520666f6c6c60c18201527f6f77696e67206c696e6520696e20746865202e656e762066696c65206f66207960e18201527f6f75722070726f6a65637420287573696e6720666f727761726420736c6173686101018201527f6573293a0a4f50454e5a455050454c494e5f424153485f504154483d22433a2f6101218201527f50726f6772616d2046696c65732f4769742f62696e2f6261736822000000000061014182015261015c01919050565b7f4661696c656420746f2066696e64206c696e65207769746820707265666978208152602760f81b60208201526000835161438c8160218501602088016138d4565b6c0139034b71037baba383aba1d1609d1b60219184019182015283516143b981602e8401602088016138d4565b01602e01949350505050565b7f4661696c656420746f2072756e2075706772616465207361666574792076616c815268034b230ba34b7b71d160bd1b60208201526000825161400e8160298501602087016138d4565b7f55706772616465207361666574792076616c69646174696f6e206661696c65648152611d0560f11b6020820152600082516144528160228501602087016138d4565b9190910160220192915050565b8181038181111561027c5761027c613f8f565b6d021b7b73a3930b1ba103730b6b2960951b81526000825161449b81600e8501602087016138d4565b7f206d75737420626520696e2074686520666f726d6174204d79436f6e74726163600e9390910192830152507f742e736f6c3a4d79436f6e7472616374206f72204d79436f6e74726163742e73602e8201527f6f6c206f72206f75742f4d79436f6e74726163742e736f6c2f4d79436f6e7472604e8201526730b1ba173539b7b760c11b606e820152607601919050565b8082018082111561027c5761027c613f8f565b7f53504458206c6963656e7365206964656e7469666965722000000000000000008152600083516145778160188501602088016138d4565b6301034b7160e51b601891840191820152835161459b81601c8401602088016138d4565b7f20646f6573206e6f74206c6f6f6b206c696b65206120737570706f7274656420601c92909101918201527f6c6963656e736520666f7220626c6f636b206578706c6f726572207665726966603c8201527f69636174696f6e2e205573652074686520606c6963656e73655479706560206f605c8201527f7074696f6e20746f20737065636966792061206c6963656e736520747970652c607c8201527f206f7220736574207468652060736b69704c6963656e73655479706560206f70609c8201527f74696f6e20746f2060747275656020746f20736b69702e00000000000000000060bc82015260d301949350505050565b600082516146a18184602087016138d4565b600160fd1b920191825250600101919050565b7f406f70656e7a657070656c696e2f75706772616465732d636f726540000000008152600082516146ec81601c8501602087016138d4565b91909101601c0192915050565b60006001820161470b5761470b613f8f565b5060010190565b808202811582820484141761027c5761027c613f8f565b6001815b60018411156147645780850481111561474857614748613f8f565b600184161561475657908102905b60019390931c92800261472d565b935093915050565b60008261477b5750600161027c565b816147885750600061027c565b816001811461479e57600281146147a8576147c4565b600191505061027c565b60ff8411156147b9576147b9613f8f565b50506001821b61027c565b5060208310610133831016604e8410600b84101617156147e7575081810a61027c565b6147f46000198484614729565b806000190482111561480857614808613f8f565b029392505050565b600061038a838361476c565b60008161482b5761482b613f8f565b506000190190565b600083516148458184602088016138d4565b601d60f91b90830190815283516148638160018401602088016138d4565b01600101949350505050565b8181036000831280158383131683831282161715612b6a57612b6a613f8f565b6080516115cb6148cd600039600081816101830152818161046e015281816104d00152818161083f0152818161094e01526109b001526115cb6000f3fe608060405234801561001057600080fd5b50600436106101515760003560e01c80636133b4bb116100cd578063a217fddf11610081578063d547741f11610066578063d547741f14610332578063d9caed1214610345578063e63ab1e91461035857600080fd5b8063a217fddf14610317578063c8a023621461031f57600080fd5b80638456cb59116100b25780638456cb59146102a257806385f438c1146102aa57806391d14854146102d157600080fd5b80636133b4bb1461026f57806381100bf01461028257600080fd5b80632f2ff15d116101245780633c2f05a8116101095780633c2f05a8146102375780633f4ba83a1461025c5780635c975abb1461026457600080fd5b80632f2ff15d1461021157806336568abe1461022457600080fd5b806301ffc9a714610156578063116191b61461017e57806321fc65f2146101ca578063248a9ca3146101df575b600080fd5b6101696101643660046111fa565b61037f565b60405190151581526020015b60405180910390f35b6101a57f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610175565b6101dd6101d83660046112ae565b610418565b005b6102036101ed36600461131d565b6000908152600160208190526040909120015490565b604051908152602001610175565b6101dd61021f366004611336565b6105ba565b6101dd610232366004611336565b6105e6565b6002546101a590610100900473ffffffffffffffffffffffffffffffffffffffff1681565b6101dd610644565b60025460ff16610169565b6101dd61027d366004611362565b610679565b6003546101a59073ffffffffffffffffffffffffffffffffffffffff1681565b6101dd6108c6565b6102037f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b6101696102df366004611336565b600091825260016020908152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b610203600081565b6101dd61032d3660046112ae565b6108f8565b6101dd610340366004611336565b610a80565b6101dd6103533660046113bc565b610aa6565b6102037f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061041257507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b610420610b73565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461044a81610bb6565b610452610bc0565b61049373ffffffffffffffffffffffffffffffffffffffff87167f000000000000000000000000000000000000000000000000000000000000000086610bff565b6040517f5131ab5900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690635131ab599061050d9089908990899089908990600401611442565b600060405180830381600087803b15801561052757600080fd5b505af115801561053b573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167f85b5be9cf454e05e0bddf49315178102227c312078eefa3c00294fb4d912ae4e8686866040516105a09392919061149f565b60405180910390a3506105b36001600055565b5050505050565b600082815260016020819052604090912001546105d681610bb6565b6105e08383610c8c565b50505050565b73ffffffffffffffffffffffffffffffffffffffff81163314610635576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61063f8282610d57565b505050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61066e81610bb6565b610676610e16565b50565b600254610100900473ffffffffffffffffffffffffffffffffffffffff166340c10f19306106a88660056114c2565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815273ffffffffffffffffffffffffffffffffffffffff90921660048301526024820152604401600060405180830381600087803b15801561071357600080fd5b505af1158015610727573d6000803e3d6000fd5b5050600254600580546040517fa9059cbb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff91821660048201526024810192909252610100909204909116925063a9059cbb91506044016020604051808303816000875af11580156107af573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107d391906114fc565b506002546107ff90610100900473ffffffffffffffffffffffffffffffffffffffff1685858585610418565b6002546040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000081166004830152610100909204909116906370a0823190602401602060405180830381865afa158015610895573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108b9919061151e565b156105e0576105e0611537565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a6108f081610bb6565b610676610e93565b610900610b73565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461092a81610bb6565b610932610bc0565b61097373ffffffffffffffffffffffffffffffffffffffff87167f000000000000000000000000000000000000000000000000000000000000000086610bff565b6040517fb8969bd400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063b8969bd4906109ed9089908990899089908990600401611442565b600060405180830381600087803b158015610a0757600080fd5b505af1158015610a1b573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fb9d4efa96044e5f5e03e696fa9ae2ff66911cc27e8a637c3627c75bc5b2241c88686866040516105a09392919061149f565b60008281526001602081905260409091200154610a9c81610bb6565b6105e08383610d57565b610aae610b73565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e4610ad881610bb6565b610ae0610bc0565b610b0173ffffffffffffffffffffffffffffffffffffffff85168484610bff565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f9b1bfa7fa9ee420a16e124f794c35ac9f90472acc99140eb2f6447c714cad8eb84604051610b6091815260200190565b60405180910390a35061063f6001600055565b600260005403610baf576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b6106768133610eee565b60025460ff1615610bfd576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6040805173ffffffffffffffffffffffffffffffffffffffff8416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb0000000000000000000000000000000000000000000000000000000017905261063f908490610f7f565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff16610d4f57600083815260016020818152604080842073ffffffffffffffffffffffffffffffffffffffff8716808652925280842080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a4506001610412565b506000610412565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff1615610d4f57600083815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8616808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a4506001610412565b610e1e611015565b600280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b610e9b610bc0565b600280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258610e693390565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16610f7b576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82166004820152602481018390526044015b60405180910390fd5b5050565b6000610fa173ffffffffffffffffffffffffffffffffffffffff841683611051565b90508051600014158015610fc6575080806020019051810190610fc491906114fc565b155b1561063f576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84166004820152602401610f72565b60025460ff16610bfd576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606061105f83836000611066565b9392505050565b6060814710156110a4576040517fcd786059000000000000000000000000000000000000000000000000000000008152306004820152602401610f72565b6000808573ffffffffffffffffffffffffffffffffffffffff1684866040516110cd9190611566565b60006040518083038185875af1925050503d806000811461110a576040519150601f19603f3d011682016040523d82523d6000602084013e61110f565b606091505b509150915061111f868383611129565b9695505050505050565b60608261113e57611139826111b8565b61105f565b8151158015611162575073ffffffffffffffffffffffffffffffffffffffff84163b155b156111b1576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85166004820152602401610f72565b508061105f565b8051156111c85780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006020828403121561120c57600080fd5b81357fffffffff000000000000000000000000000000000000000000000000000000008116811461105f57600080fd5b803573ffffffffffffffffffffffffffffffffffffffff8116811461126057600080fd5b919050565b60008083601f84011261127757600080fd5b50813567ffffffffffffffff81111561128f57600080fd5b6020830191508360208285010111156112a757600080fd5b9250929050565b6000806000806000608086880312156112c657600080fd5b6112cf8661123c565b94506112dd6020870161123c565b935060408601359250606086013567ffffffffffffffff81111561130057600080fd5b61130c88828901611265565b969995985093965092949392505050565b60006020828403121561132f57600080fd5b5035919050565b6000806040838503121561134957600080fd5b823591506113596020840161123c565b90509250929050565b6000806000806060858703121561137857600080fd5b6113818561123c565b935060208501359250604085013567ffffffffffffffff8111156113a457600080fd5b6113b087828801611265565b95989497509550505050565b6000806000606084860312156113d157600080fd5b6113da8461123c565b92506113e86020850161123c565b929592945050506040919091013590565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff8616815273ffffffffffffffffffffffffffffffffffffffff851660208201528360408201526080606082015260006114946080830184866113f9565b979650505050505050565b8381526040602082015260006114b96040830184866113f9565b95945050505050565b80820180821115610412577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006020828403121561150e57600080fd5b8151801515811461105f57600080fd5b60006020828403121561153057600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b6000825160005b81811015611587576020818601810151858301520161156d565b50600092019182525091905056fea2646970667358221220104b616cf3a4de8de20ce232b02a085284cb46a03acd1d5e4082d88a9d59181064736f6c634300081a0033608060405234801561001057600080fd5b50604051610c9f380380610c9f83398101604081905261002f9161010d565b8181600361003d83826101ff565b50600461004a82826101ff565b50505050506102bd565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261007b57600080fd5b81516001600160401b0381111561009457610094610054565b604051601f8201601f19908116603f011681016001600160401b03811182821017156100c2576100c2610054565b6040528181528382016020018510156100da57600080fd5b60005b828110156100f9576020818601810151838301820152016100dd565b506000918101602001919091529392505050565b6000806040838503121561012057600080fd5b82516001600160401b0381111561013657600080fd5b6101428582860161006a565b602085015190935090506001600160401b0381111561016057600080fd5b61016c8582860161006a565b9150509250929050565b600181811c9082168061018a57607f821691505b6020821081036101aa57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156101fa57806000526020600020601f840160051c810160208510156101d75750805b601f840160051c820191505b818110156101f757600081556001016101e3565b50505b505050565b81516001600160401b0381111561021857610218610054565b61022c816102268454610176565b846101b0565b6020601f82116001811461026057600083156102485750848201515b600019600385901b1c1916600184901b1784556101f7565b600084815260208120601f198516915b828110156102905787850151825560209485019460019092019101610270565b50848210156102ae5786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b6109d3806102cc6000396000f3fe608060405234801561001057600080fd5b50600436106100be5760003560e01c806340c10f191161007657806395d89b411161005b57806395d89b4114610183578063a9059cbb1461018b578063dd62ed3e1461019e57600080fd5b806340c10f191461013857806370a082311461014d57600080fd5b806318160ddd116100a757806318160ddd1461010457806323b872dd14610116578063313ce5671461012957600080fd5b806306fdde03146100c3578063095ea7b3146100e1575b600080fd5b6100cb6101e4565b6040516100d891906107bf565b60405180910390f35b6100f46100ef366004610854565b610276565b60405190151581526020016100d8565b6002545b6040519081526020016100d8565b6100f461012436600461087e565b610290565b604051601281526020016100d8565b61014b610146366004610854565b6102b4565b005b61010861015b3660046108bb565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6100cb6102c2565b6100f4610199366004610854565b6102d1565b6101086101ac3660046108dd565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6060600380546101f390610910565b80601f016020809104026020016040519081016040528092919081815260200182805461021f90610910565b801561026c5780601f106102415761010080835404028352916020019161026c565b820191906000526020600020905b81548152906001019060200180831161024f57829003601f168201915b5050505050905090565b6000336102848185856102df565b60019150505b92915050565b60003361029e8582856102f1565b6102a98585856103c5565b506001949350505050565b6102be8282610470565b5050565b6060600480546101f390610910565b6000336102848185856103c5565b6102ec83838360016104cc565b505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146103bf57818110156103b0576040517ffb8f41b200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416600482015260248101829052604481018390526064015b60405180910390fd5b6103bf848484840360006104cc565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8316610415576040517f96c6fd1e000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff8216610465576040517fec442f05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b6102ec838383610614565b73ffffffffffffffffffffffffffffffffffffffff82166104c0576040517fec442f05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b6102be60008383610614565b73ffffffffffffffffffffffffffffffffffffffff841661051c576040517fe602df05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff831661056c576040517f94280d62000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260016020908152604080832093871683529290522082905580156103bf578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161060691815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff831661064c5780600260008282546106419190610963565b909155506106fe9050565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260208190526040902054818110156106d2576040517fe450d38c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8516600482015260248101829052604481018390526064016103a7565b73ffffffffffffffffffffffffffffffffffffffff841660009081526020819052604090209082900390555b73ffffffffffffffffffffffffffffffffffffffff821661072757600280548290039055610753565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090208054820190555b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516107b291815260200190565b60405180910390a3505050565b602081526000825180602084015260005b818110156107ed57602081860181015160408684010152016107d0565b5060006040828501015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011684010191505092915050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461084f57600080fd5b919050565b6000806040838503121561086757600080fd5b6108708361082b565b946020939093013593505050565b60008060006060848603121561089357600080fd5b61089c8461082b565b92506108aa6020850161082b565b929592945050506040919091013590565b6000602082840312156108cd57600080fd5b6108d68261082b565b9392505050565b600080604083850312156108f057600080fd5b6108f98361082b565b91506109076020840161082b565b90509250929050565b600181811c9082168061092457607f821691505b60208210810361095d577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b8082018082111561028a577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea26469706673582212207e804ca539d49155d2b6bc19268ce22f9f857027c75247d69fb0d56a089c93d464736f6c634300081a00330000000000000000000000007109709ecfa91a80626ff3989d68f67f5b1dd12d54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f7420"; type ERC20CustodyEchidnaTestConstructorParams = | [signer?: Signer] diff --git a/v2/typechain-types/factories/ERC20Custody__factory.ts b/v2/typechain-types/factories/ERC20Custody__factory.ts index 2d25c497..3f50e9bf 100644 --- a/v2/typechain-types/factories/ERC20Custody__factory.ts +++ b/v2/typechain-types/factories/ERC20Custody__factory.ts @@ -582,7 +582,7 @@ const _abi = [ ] as const; const _bytecode = - "0x60a060405234801561001057600080fd5b5060405161140b38038061140b83398101604081905261002f916101b3565b60016000556002805460ff191690556001600160a01b038316158061005b57506001600160a01b038216155b8061006d57506001600160a01b038116155b1561008b5760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b0383166080526100a3600082610102565b506100ce7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a82610102565b506100f97f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e483610102565b505050506101f6565b60008281526001602090815260408083206001600160a01b038516845290915281205460ff1661018d5760008381526001602081815260408084206001600160a01b0387168086529252808420805460ff19169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a4506001610191565b5060005b92915050565b80516001600160a01b03811681146101ae57600080fd5b919050565b6000806000606084860312156101c857600080fd5b6101d184610197565b92506101df60208501610197565b91506101ed60408501610197565b90509250925092565b6080516111de61022d60003960008181610132015281816103c5015281816104270152818161065801526106ba01526111de6000f3fe608060405234801561001057600080fd5b50600436106101005760003560e01c80638456cb5911610097578063c8a0236211610066578063c8a0236214610276578063d547741f14610289578063d9caed121461029c578063e63ab1e9146102af57600080fd5b80638456cb59146101f957806385f438c11461020157806391d1485414610228578063a217fddf1461026e57600080fd5b80632f2ff15d116100d35780632f2ff15d146101c057806336568abe146101d35780633f4ba83a146101e65780635c975abb146101ee57600080fd5b806301ffc9a714610105578063116191b61461012d57806321fc65f214610179578063248a9ca31461018e575b600080fd5b610118610113366004610f04565b6102d6565b60405190151581526020015b60405180910390f35b6101547f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610124565b61018c610187366004610f6f565b61036f565b005b6101b261019c36600461100c565b6000908152600160208190526040909120015490565b604051908152602001610124565b61018c6101ce366004611025565b610511565b61018c6101e1366004611025565b61053d565b61018c61059b565b60025460ff16610118565b61018c6105d0565b6101b27f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b610118610236366004611025565b600091825260016020908152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b6101b2600081565b61018c610284366004610f6f565b610602565b61018c610297366004611025565b61078a565b61018c6102aa366004611051565b6107b0565b6101b27f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061036957507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b61037761087d565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e46103a1816108c0565b6103a96108ca565b6103ea73ffffffffffffffffffffffffffffffffffffffff87167f000000000000000000000000000000000000000000000000000000000000000086610909565b6040517f5131ab5900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690635131ab599061046490899089908990899089906004016110d7565b600060405180830381600087803b15801561047e57600080fd5b505af1158015610492573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167f85b5be9cf454e05e0bddf49315178102227c312078eefa3c00294fb4d912ae4e8686866040516104f793929190611134565b60405180910390a35061050a6001600055565b5050505050565b6000828152600160208190526040909120015461052d816108c0565b6105378383610996565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8116331461058c576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6105968282610a61565b505050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a6105c5816108c0565b6105cd610b20565b50565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a6105fa816108c0565b6105cd610b9d565b61060a61087d565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e4610634816108c0565b61063c6108ca565b61067d73ffffffffffffffffffffffffffffffffffffffff87167f000000000000000000000000000000000000000000000000000000000000000086610909565b6040517fb8969bd400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063b8969bd4906106f790899089908990899089906004016110d7565b600060405180830381600087803b15801561071157600080fd5b505af1158015610725573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fb9d4efa96044e5f5e03e696fa9ae2ff66911cc27e8a637c3627c75bc5b2241c88686866040516104f793929190611134565b600082815260016020819052604090912001546107a6816108c0565b6105378383610a61565b6107b861087d565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e46107e2816108c0565b6107ea6108ca565b61080b73ffffffffffffffffffffffffffffffffffffffff85168484610909565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f9b1bfa7fa9ee420a16e124f794c35ac9f90472acc99140eb2f6447c714cad8eb8460405161086a91815260200190565b60405180910390a3506105966001600055565b6002600054036108b9576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b6105cd8133610bf8565b60025460ff1615610907576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6040805173ffffffffffffffffffffffffffffffffffffffff8416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb00000000000000000000000000000000000000000000000000000000179052610596908490610c89565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff16610a5957600083815260016020818152604080842073ffffffffffffffffffffffffffffffffffffffff8716808652925280842080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a4506001610369565b506000610369565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff1615610a5957600083815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8616808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a4506001610369565b610b28610d1f565b600280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b610ba56108ca565b600280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258610b733390565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16610c85576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82166004820152602481018390526044015b60405180910390fd5b5050565b6000610cab73ffffffffffffffffffffffffffffffffffffffff841683610d5b565b90508051600014158015610cd0575080806020019051810190610cce9190611157565b155b15610596576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84166004820152602401610c7c565b60025460ff16610907576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6060610d6983836000610d70565b9392505050565b606081471015610dae576040517fcd786059000000000000000000000000000000000000000000000000000000008152306004820152602401610c7c565b6000808573ffffffffffffffffffffffffffffffffffffffff168486604051610dd79190611179565b60006040518083038185875af1925050503d8060008114610e14576040519150601f19603f3d011682016040523d82523d6000602084013e610e19565b606091505b5091509150610e29868383610e33565b9695505050505050565b606082610e4857610e4382610ec2565b610d69565b8151158015610e6c575073ffffffffffffffffffffffffffffffffffffffff84163b155b15610ebb576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85166004820152602401610c7c565b5080610d69565b805115610ed25780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060208284031215610f1657600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610d6957600080fd5b803573ffffffffffffffffffffffffffffffffffffffff81168114610f6a57600080fd5b919050565b600080600080600060808688031215610f8757600080fd5b610f9086610f46565b9450610f9e60208701610f46565b935060408601359250606086013567ffffffffffffffff811115610fc157600080fd5b8601601f81018813610fd257600080fd5b803567ffffffffffffffff811115610fe957600080fd5b886020828401011115610ffb57600080fd5b959894975092955050506020019190565b60006020828403121561101e57600080fd5b5035919050565b6000806040838503121561103857600080fd5b8235915061104860208401610f46565b90509250929050565b60008060006060848603121561106657600080fd5b61106f84610f46565b925061107d60208501610f46565b929592945050506040919091013590565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff8616815273ffffffffffffffffffffffffffffffffffffffff8516602082015283604082015260806060820152600061112960808301848661108e565b979650505050505050565b83815260406020820152600061114e60408301848661108e565b95945050505050565b60006020828403121561116957600080fd5b81518015158114610d6957600080fd5b6000825160005b8181101561119a5760208186018101518583015201611180565b50600092019182525091905056fea264697066735822122035ca457bdc8b45adde9844ff8416a0abd723c23055fd6933ddc05523b5f5b6de64736f6c634300081a0033"; + "0x60a060405234801561001057600080fd5b5060405161140b38038061140b83398101604081905261002f916101b3565b60016000556002805460ff191690556001600160a01b038316158061005b57506001600160a01b038216155b8061006d57506001600160a01b038116155b1561008b5760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b0383166080526100a3600082610102565b506100ce7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a82610102565b506100f97f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e483610102565b505050506101f6565b60008281526001602090815260408083206001600160a01b038516845290915281205460ff1661018d5760008381526001602081815260408084206001600160a01b0387168086529252808420805460ff19169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a4506001610191565b5060005b92915050565b80516001600160a01b03811681146101ae57600080fd5b919050565b6000806000606084860312156101c857600080fd5b6101d184610197565b92506101df60208501610197565b91506101ed60408501610197565b90509250925092565b6080516111de61022d60003960008181610132015281816103c5015281816104270152818161065801526106ba01526111de6000f3fe608060405234801561001057600080fd5b50600436106101005760003560e01c80638456cb5911610097578063c8a0236211610066578063c8a0236214610276578063d547741f14610289578063d9caed121461029c578063e63ab1e9146102af57600080fd5b80638456cb59146101f957806385f438c11461020157806391d1485414610228578063a217fddf1461026e57600080fd5b80632f2ff15d116100d35780632f2ff15d146101c057806336568abe146101d35780633f4ba83a146101e65780635c975abb146101ee57600080fd5b806301ffc9a714610105578063116191b61461012d57806321fc65f214610179578063248a9ca31461018e575b600080fd5b610118610113366004610f04565b6102d6565b60405190151581526020015b60405180910390f35b6101547f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610124565b61018c610187366004610f6f565b61036f565b005b6101b261019c36600461100c565b6000908152600160208190526040909120015490565b604051908152602001610124565b61018c6101ce366004611025565b610511565b61018c6101e1366004611025565b61053d565b61018c61059b565b60025460ff16610118565b61018c6105d0565b6101b27f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b610118610236366004611025565b600091825260016020908152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b6101b2600081565b61018c610284366004610f6f565b610602565b61018c610297366004611025565b61078a565b61018c6102aa366004611051565b6107b0565b6101b27f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061036957507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b61037761087d565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e46103a1816108c0565b6103a96108ca565b6103ea73ffffffffffffffffffffffffffffffffffffffff87167f000000000000000000000000000000000000000000000000000000000000000086610909565b6040517f5131ab5900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690635131ab599061046490899089908990899089906004016110d7565b600060405180830381600087803b15801561047e57600080fd5b505af1158015610492573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167f85b5be9cf454e05e0bddf49315178102227c312078eefa3c00294fb4d912ae4e8686866040516104f793929190611134565b60405180910390a35061050a6001600055565b5050505050565b6000828152600160208190526040909120015461052d816108c0565b6105378383610996565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8116331461058c576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6105968282610a61565b505050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a6105c5816108c0565b6105cd610b20565b50565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a6105fa816108c0565b6105cd610b9d565b61060a61087d565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e4610634816108c0565b61063c6108ca565b61067d73ffffffffffffffffffffffffffffffffffffffff87167f000000000000000000000000000000000000000000000000000000000000000086610909565b6040517fb8969bd400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063b8969bd4906106f790899089908990899089906004016110d7565b600060405180830381600087803b15801561071157600080fd5b505af1158015610725573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fb9d4efa96044e5f5e03e696fa9ae2ff66911cc27e8a637c3627c75bc5b2241c88686866040516104f793929190611134565b600082815260016020819052604090912001546107a6816108c0565b6105378383610a61565b6107b861087d565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e46107e2816108c0565b6107ea6108ca565b61080b73ffffffffffffffffffffffffffffffffffffffff85168484610909565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f9b1bfa7fa9ee420a16e124f794c35ac9f90472acc99140eb2f6447c714cad8eb8460405161086a91815260200190565b60405180910390a3506105966001600055565b6002600054036108b9576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b6105cd8133610bf8565b60025460ff1615610907576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6040805173ffffffffffffffffffffffffffffffffffffffff8416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb00000000000000000000000000000000000000000000000000000000179052610596908490610c89565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff16610a5957600083815260016020818152604080842073ffffffffffffffffffffffffffffffffffffffff8716808652925280842080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a4506001610369565b506000610369565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff1615610a5957600083815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8616808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a4506001610369565b610b28610d1f565b600280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b610ba56108ca565b600280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258610b733390565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16610c85576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82166004820152602481018390526044015b60405180910390fd5b5050565b6000610cab73ffffffffffffffffffffffffffffffffffffffff841683610d5b565b90508051600014158015610cd0575080806020019051810190610cce9190611157565b155b15610596576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84166004820152602401610c7c565b60025460ff16610907576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6060610d6983836000610d70565b9392505050565b606081471015610dae576040517fcd786059000000000000000000000000000000000000000000000000000000008152306004820152602401610c7c565b6000808573ffffffffffffffffffffffffffffffffffffffff168486604051610dd79190611179565b60006040518083038185875af1925050503d8060008114610e14576040519150601f19603f3d011682016040523d82523d6000602084013e610e19565b606091505b5091509150610e29868383610e33565b9695505050505050565b606082610e4857610e4382610ec2565b610d69565b8151158015610e6c575073ffffffffffffffffffffffffffffffffffffffff84163b155b15610ebb576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85166004820152602401610c7c565b5080610d69565b805115610ed25780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060208284031215610f1657600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610d6957600080fd5b803573ffffffffffffffffffffffffffffffffffffffff81168114610f6a57600080fd5b919050565b600080600080600060808688031215610f8757600080fd5b610f9086610f46565b9450610f9e60208701610f46565b935060408601359250606086013567ffffffffffffffff811115610fc157600080fd5b8601601f81018813610fd257600080fd5b803567ffffffffffffffff811115610fe957600080fd5b886020828401011115610ffb57600080fd5b959894975092955050506020019190565b60006020828403121561101e57600080fd5b5035919050565b6000806040838503121561103857600080fd5b8235915061104860208401610f46565b90509250929050565b60008060006060848603121561106657600080fd5b61106f84610f46565b925061107d60208501610f46565b929592945050506040919091013590565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff8616815273ffffffffffffffffffffffffffffffffffffffff8516602082015283604082015260806060820152600061112960808301848661108e565b979650505050505050565b83815260406020820152600061114e60408301848661108e565b95945050505050565b60006020828403121561116957600080fd5b81518015158114610d6957600080fd5b6000825160005b8181101561119a5760208186018101518583015201611180565b50600092019182525091905056fea264697066735822122069d5c5c3cb2752c876b6a2138d8d9b66bac6bd1b48a1fe98417eea81faf02a3e64736f6c634300081a0033"; type ERC20CustodyConstructorParams = | [signer?: Signer] diff --git a/v2/typechain-types/factories/GatewayEVMEchidnaTest__factory.ts b/v2/typechain-types/factories/GatewayEVMEchidnaTest__factory.ts index b0cc5263..9a623c5d 100644 --- a/v2/typechain-types/factories/GatewayEVMEchidnaTest__factory.ts +++ b/v2/typechain-types/factories/GatewayEVMEchidnaTest__factory.ts @@ -956,6 +956,11 @@ const _abi = [ name: "ApprovalFailed", inputs: [], }, + { + type: "error", + name: "ConnectorInitialized", + inputs: [], + }, { type: "error", name: "CustodyInitialized", @@ -1062,7 +1067,7 @@ const _abi = [ ] as const; const _bytecode = - "0x60a060405230608052600580546001600160a01b0319163317905534801561002657600080fd5b5061002f610154565b600554600180546001600160a01b039092166001600160a01b031992831617905560028054610123921691909117905560405161006b90610206565b60408082526004908201819052631d195cdd60e21b606083015260806020830181905282015263151154d560e21b60a082015260c001604051809103906000f0801580156100bd573d6000803e3d6000fd5b50600480546001600160a01b0319166001600160a01b039283161790556001546040513092919091169082906100f290610213565b6001600160a01b03938416815291831660208301529091166040820152606001604051809103906000f08015801561012e573d6000803e3d6000fd5b50600080546001600160a01b0319166001600160a01b0392909216919091179055610220565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156101a45760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146102035780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b610c9f806133f683390190565b61140b8061409583390190565b6080516131ad61024960003960008181611f2601528181611f4f015261231e01526131ad6000f3fe6080604052600436106102345760003560e01c80635c975abb11610138578063ad3cb1cc116100b0578063d547741f1161007f578063e63ab1e911610064578063e63ab1e9146106ff578063f340fa0114610733578063f45346dc1461074657600080fd5b8063d547741f146106bf578063dda79b75146106df57600080fd5b8063ad3cb1cc14610616578063ae7a3a6f1461065f578063b8969bd41461067f578063c0c53b8b1461069f57600080fd5b80638456cb591161010757806391d14854116100ec57806391d1485414610568578063a217fddf146105cd578063a783c789146105e257600080fd5b80638456cb59146105335780638c6f037f1461054857600080fd5b80635c975abb146104885780635d62c860146104bf5780636ab90f9b146104f357806381100bf01461051357600080fd5b806335c018db116101cb5780634f1ef2861161019a57806352d1902d1161017f57806352d1902d1461043357806357bec62f146104485780635b1125911461046857600080fd5b80634f1ef286146104005780635131ab591461041357600080fd5b806335c018db1461039857806336568abe146103ab5780633c2f05a8146103cb5780633f4ba83a146103eb57600080fd5b806321e093b11161020757806321e093b1146102d0578063248a9ca31461030857806329c59b5d146103655780632f2ff15d1461037857600080fd5b806301ffc9a71461023957806310188aef1461026e5780631b8b921d146102905780631cff79cd146102b0575b600080fd5b34801561024557600080fd5b50610259610254366004612b97565b610766565b60405190151581526020015b60405180910390f35b34801561027a57600080fd5b5061028e610289366004612bf5565b6107ff565b005b34801561029c57600080fd5b5061028e6102ab366004612c59565b6108f3565b6102c36102be366004612c59565b61097e565b6040516102659190612d1a565b3480156102dc57600080fd5b506003546102f0906001600160a01b031681565b6040516001600160a01b039091168152602001610265565b34801561031457600080fd5b50610357610323366004612d2d565b60009081527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052604090206001015490565b604051908152602001610265565b61028e610373366004612c59565b610a41565b34801561038457600080fd5b5061028e610393366004612d46565b610b94565b61028e6103a6366004612c59565b610bde565b3480156103b757600080fd5b5061028e6103c6366004612d46565b610dcd565b3480156103d757600080fd5b506004546102f0906001600160a01b031681565b3480156103f757600080fd5b5061028e610e19565b61028e61040e366004612da1565b610e4e565b34801561041f57600080fd5b5061028e61042e366004612ea8565b610e6d565b34801561043f57600080fd5b5061035761114a565b34801561045457600080fd5b506002546102f0906001600160a01b031681565b34801561047457600080fd5b506001546102f0906001600160a01b031681565b34801561049457600080fd5b507fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff16610259565b3480156104cb57600080fd5b506103577f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b981565b3480156104ff57600080fd5b5061028e61050e366004612f17565b611179565b34801561051f57600080fd5b506005546102f0906001600160a01b031681565b34801561053f57600080fd5b5061028e6112a4565b34801561055457600080fd5b5061028e610563366004612f71565b6112d6565b34801561057457600080fd5b50610259610583366004612d46565b60009182527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408084206001600160a01b0393909316845291905290205460ff1690565b3480156105d957600080fd5b50610357600081565b3480156105ee57600080fd5b506103577f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb81565b34801561062257600080fd5b506102c36040518060400160405280600581526020017f352e302e3000000000000000000000000000000000000000000000000000000081525081565b34801561066b57600080fd5b5061028e61067a366004612bf5565b6113ac565b34801561068b57600080fd5b5061028e61069a366004612ea8565b6114a0565b3480156106ab57600080fd5b5061028e6106ba366004612fc3565b611619565b3480156106cb57600080fd5b5061028e6106da366004612d46565b6118ce565b3480156106eb57600080fd5b506000546102f0906001600160a01b031681565b34801561070b57600080fd5b506103577f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b61028e610741366004612bf5565b611912565b34801561075257600080fd5b5061028e610761366004613006565b611a67565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b0000000000000000000000000000000000000000000000000000000014806107f957507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b600061080a81611b22565b6002546001600160a01b03161561084d576040517fb337f37800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03821661088d576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6108b77f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b983611b2c565b5050600280547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6108fb611c19565b610903611c77565b826001600160a01b0316336001600160a01b03167f2a21062ee9199c2e205622999eeb7c3da73153674f36a0acd3f74fa6af67bde38484604051610948929190613082565b60405180910390a361097960017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b505050565b60607f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb6109aa81611b22565b6109b2611c19565b6109ba611c77565b60006109c7868686611d1e565b9050856001600160a01b03167fcaf938de11c367272220bfd1d2baa99ca46665e7bc4d85f00adb51b90fe1fa9f348787604051610a069392919061309e565b60405180910390a29150610a3960017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b509392505050565b610a49611c19565b610a51611c77565b34600003610a8b576040517f7671265e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546040516000916001600160a01b03169034908381818185875af1925050503d8060008114610ad8576040519150601f19603f3d011682016040523d82523d6000602084013e610add565b606091505b5050905080610b18576040517f79cacff100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b836001600160a01b0316336001600160a01b03167f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a43460008787604051610b6294939291906130b8565b60405180910390a35061097960017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020526040902060010154610bce81611b22565b610bd88383611b2c565b50505050565b7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb610c0881611b22565b610c10611c19565b610c18611c77565b6001600160a01b038416610c58576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000846001600160a01b03163460405160006040518083038185875af1925050503d8060008114610ca5576040519150601f19603f3d011682016040523d82523d6000602084013e610caa565b606091505b5050905080610ce5576040517facfdb44400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f8fcaa0b50000000000000000000000000000000000000000000000000000000081526001600160a01b03861690638fcaa0b590610d2c9087908790600401613082565b600060405180830381600087803b158015610d4657600080fd5b505af1158015610d5a573d6000803e3d6000fd5b50505050846001600160a01b03167fd5d7616b1678354a0dea9d7e57e6a090bff5babe9f8d6381fdbad16e89ba311c348686604051610d9b9392919061309e565b60405180910390a250610bd860017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b6001600160a01b0381163314610e0f576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6109798282611dc7565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610e4381611b22565b610e4b611e8b565b50565b610e56611f1b565b610e5f82611feb565b610e698282611ff6565b5050565b7f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b9610e9781611b22565b610e9f611c19565b610ea7611c77565b83600003610ee1576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610eeb868661211a565b610f21576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b0386811660048301526024820186905287169063095ea7b3906044016020604051808303816000875af1158015610f89573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fad91906130e1565b610fe3576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610ff0868585611d1e565b9050610ffc878761211a565b611032576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201526000906001600160a01b038916906370a0823190602401602060405180830381865afa158015611092573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110b69190613103565b905080156110c8576110c888826121aa565b866001600160a01b0316886001600160a01b03167f29c40793bffd84cb810179f15d1ceec72bc7f0785514c668ba36645cf99b738288888860405161110f9392919061309e565b60405180910390a3505061114260017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b505050505050565b6000611154612313565b507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc90565b600480546040517f40c10f190000000000000000000000000000000000000000000000000000000081523092810192909252602482018590526001600160a01b0316906340c10f1990604401600060405180830381600087803b1580156111df57600080fd5b505af11580156111f3573d6000803e3d6000fd5b505060045461121192506001600160a01b0316905085858585610e6d565b600480546040517f70a0823100000000000000000000000000000000000000000000000000000000815230928101929092526001600160a01b0316906370a0823190602401602060405180830381865afa158015611273573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112979190613103565b15610bd857610bd861311c565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a6112ce81611b22565b610e4b612375565b6112de611c19565b6112e6611c77565b83600003611320576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61132b3384866123ee565b846001600160a01b0316336001600160a01b03167f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a48686868660405161137494939291906130b8565b60405180910390a36113a560017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b5050505050565b60006113b781611b22565b6000546001600160a01b0316156113fa576040517fb337f37800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03821661143a576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6114647f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b983611b2c565b5050600080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b7f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b96114ca81611b22565b6114d2611c19565b6114da611c77565b83600003611514576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6115286001600160a01b0387168686612577565b6040517f8fcaa0b50000000000000000000000000000000000000000000000000000000081526001600160a01b03861690638fcaa0b59061156f9086908690600401613082565b600060405180830381600087803b15801561158957600080fd5b505af115801561159d573d6000803e3d6000fd5b50505050846001600160a01b0316866001600160a01b03167f723fc7be2448075379e4fdf1e6bf5fead954d2668d2da05dcb44ccfec4beeda78686866040516115e89392919061309e565b60405180910390a361114260017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156116645750825b905060008267ffffffffffffffff1660011480156116815750303b155b90508115801561168f575080155b156116c6576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84547fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000016600117855583156117275784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff16680100000000000000001785555b6001600160a01b038816158061174457506001600160a01b038716155b1561177b576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6117836125eb565b61178b6125f3565b6117936125eb565b61179b612603565b6117a6600087611b2c565b506117d17f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a87611b2c565b50600180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b038a1617905561182f7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb89611b2c565b50600380547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03891617905583156118c45784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b5050505050505050565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052604090206001015461190881611b22565b610bd88383611dc7565b61191a611c19565b611922611c77565b3460000361195c576040517f7671265e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546040516000916001600160a01b03169034908381818185875af1925050503d80600081146119a9576040519150601f19603f3d011682016040523d82523d6000602084013e6119ae565b606091505b50509050806119e9576040517f79cacff100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60408051348152600060208201819052606082840181905282015290516001600160a01b0384169133917f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a49181900360800190a350610e4b60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b611a6f611c19565b611a77611c77565b81600003611ab1576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611abc3382846123ee565b826001600160a01b0316336001600160a01b03167f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a484846040516109489291909182526001600160a01b0316602082015260606040820181905260009082015260800190565b610e4b8133612613565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff16611c0f576000848152602082815260408083206001600160a01b0387168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055611bc53390565b6001600160a01b0316836001600160a01b0316857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a460019150506107f9565b60009150506107f9565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff1615611c75576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0080547ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01611cf2576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60029055565b60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b6060600080856001600160a01b0316348686604051611d3e92919061314b565b60006040518083038185875af1925050503d8060008114611d7b576040519150601f19603f3d011682016040523d82523d6000602084013e611d80565b606091505b509150915081611dbc576040517facfdb44400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b9150505b9392505050565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff1615611c0f576000848152602082815260408083206001600160a01b038716808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339287917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a460019150506107f9565b611e936126a0565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001681557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a150565b306001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161480611fb457507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316611fa87f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b6001600160a01b031614155b15611c75576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610e6981611b22565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa92505050801561206e575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820190925261206b91810190613103565b60015b6120b4576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b03831660048201526024015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8114612110576040517faa1d49a4000000000000000000000000000000000000000000000000000000008152600481018290526024016120ab565b61097983836126fb565b6040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b038281166004830152600060248301819052919084169063095ea7b3906044016020604051808303816000875af1158015612186573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611dc091906130e1565b6003546001600160a01b03908116908316036122f9576002546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152602481018390529083169063095ea7b3906044016020604051808303816000875af115801561222c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061225091906130e1565b612286576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002546040517f743e0c9b000000000000000000000000000000000000000000000000000000008152600481018390526001600160a01b039091169063743e0c9b90602401600060405180830381600087803b1580156122e557600080fd5b505af1158015611142573d6000803e3d6000fd5b600054610e69906001600160a01b03848116911683612577565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614611c75576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61237d611c19565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011781557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25833611efd565b6003546001600160a01b039081169083160361255b576124196001600160a01b038316843084612751565b6002546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152602481018390529083169063095ea7b3906044016020604051808303816000875af1158015612485573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124a991906130e1565b6124df576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002546040517f743e0c9b000000000000000000000000000000000000000000000000000000008152600481018390526001600160a01b039091169063743e0c9b90602401600060405180830381600087803b15801561253e57600080fd5b505af1158015612552573d6000803e3d6000fd5b50505050505050565b600054610979906001600160a01b038481169186911684612751565b6040516001600160a01b0383811660248301526044820183905261097991859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505061278a565b611c75612806565b6125fb612806565b611c7561286d565b61260b612806565b611c75612875565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408083206001600160a01b038516845290915290205460ff16610e69576040517fe2517d3f0000000000000000000000000000000000000000000000000000000081526001600160a01b0382166004820152602481018390526044016120ab565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff16611c75576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612704826128c6565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a280511561274957610979828261296e565b610e696129e4565b6040516001600160a01b038481166024830152838116604483015260648201839052610bd89186918216906323b872dd906084016125a4565b600061279f6001600160a01b03841683612a1c565b905080516000141580156127c45750808060200190518101906127c291906130e1565b155b15610979576040517f5274afe70000000000000000000000000000000000000000000000000000000081526001600160a01b03841660048201526024016120ab565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff16611c75576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611cf8612806565b61287d612806565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055565b806001600160a01b03163b600003612915576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b03821660048201526024016120ab565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6060600080846001600160a01b03168460405161298b919061315b565b600060405180830381855af49150503d80600081146129c6576040519150601f19603f3d011682016040523d82523d6000602084013e6129cb565b606091505b50915091506129db858383612a2a565b95945050505050565b3415611c75576040517fb398979f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6060611dc083836000612a9f565b606082612a3f57612a3a82612b55565b611dc0565b8151158015612a5657506001600160a01b0384163b155b15612a98576040517f9996b3150000000000000000000000000000000000000000000000000000000081526001600160a01b03851660048201526024016120ab565b5080611dc0565b606081471015612add576040517fcd7860590000000000000000000000000000000000000000000000000000000081523060048201526024016120ab565b600080856001600160a01b03168486604051612af9919061315b565b60006040518083038185875af1925050503d8060008114612b36576040519150601f19603f3d011682016040523d82523d6000602084013e612b3b565b606091505b5091509150612b4b868383612a2a565b9695505050505050565b805115612b655780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060208284031215612ba957600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114611dc057600080fd5b80356001600160a01b0381168114612bf057600080fd5b919050565b600060208284031215612c0757600080fd5b611dc082612bd9565b60008083601f840112612c2257600080fd5b50813567ffffffffffffffff811115612c3a57600080fd5b602083019150836020828501011115612c5257600080fd5b9250929050565b600080600060408486031215612c6e57600080fd5b612c7784612bd9565b9250602084013567ffffffffffffffff811115612c9357600080fd5b612c9f86828701612c10565b9497909650939450505050565b60005b83811015612cc7578181015183820152602001612caf565b50506000910152565b60008151808452612ce8816020860160208601612cac565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000611dc06020830184612cd0565b600060208284031215612d3f57600080fd5b5035919050565b60008060408385031215612d5957600080fd5b82359150612d6960208401612bd9565b90509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60008060408385031215612db457600080fd5b612dbd83612bd9565b9150602083013567ffffffffffffffff811115612dd957600080fd5b8301601f81018513612dea57600080fd5b803567ffffffffffffffff811115612e0457612e04612d72565b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8501160116810181811067ffffffffffffffff82111715612e7057612e70612d72565b604052818152828201602001871015612e8857600080fd5b816020840160208301376000602083830101528093505050509250929050565b600080600080600060808688031215612ec057600080fd5b612ec986612bd9565b9450612ed760208701612bd9565b935060408601359250606086013567ffffffffffffffff811115612efa57600080fd5b612f0688828901612c10565b969995985093965092949392505050565b60008060008060608587031215612f2d57600080fd5b612f3685612bd9565b935060208501359250604085013567ffffffffffffffff811115612f5957600080fd5b612f6587828801612c10565b95989497509550505050565b600080600080600060808688031215612f8957600080fd5b612f9286612bd9565b945060208601359350612fa760408701612bd9565b9250606086013567ffffffffffffffff811115612efa57600080fd5b600080600060608486031215612fd857600080fd5b612fe184612bd9565b9250612fef60208501612bd9565b9150612ffd60408501612bd9565b90509250925092565b60008060006060848603121561301b57600080fd5b61302484612bd9565b925060208401359150612ffd60408501612bd9565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b602081526000613096602083018486613039565b949350505050565b8381526040602082015260006129db604083018486613039565b8481526001600160a01b0384166020820152606060408201526000612b4b606083018486613039565b6000602082840312156130f357600080fd5b81518015158114611dc057600080fd5b60006020828403121561311557600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b8183823760009101908152919050565b6000825161316d818460208701612cac565b919091019291505056fea2646970667358221220af74e0039ccd316ad209c39ddb2d59569d0e7332f3cba90d28e03811e710d7ca64736f6c634300081a0033608060405234801561001057600080fd5b50604051610c9f380380610c9f83398101604081905261002f9161010d565b8181600361003d83826101ff565b50600461004a82826101ff565b50505050506102bd565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261007b57600080fd5b81516001600160401b0381111561009457610094610054565b604051601f8201601f19908116603f011681016001600160401b03811182821017156100c2576100c2610054565b6040528181528382016020018510156100da57600080fd5b60005b828110156100f9576020818601810151838301820152016100dd565b506000918101602001919091529392505050565b6000806040838503121561012057600080fd5b82516001600160401b0381111561013657600080fd5b6101428582860161006a565b602085015190935090506001600160401b0381111561016057600080fd5b61016c8582860161006a565b9150509250929050565b600181811c9082168061018a57607f821691505b6020821081036101aa57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156101fa57806000526020600020601f840160051c810160208510156101d75750805b601f840160051c820191505b818110156101f757600081556001016101e3565b50505b505050565b81516001600160401b0381111561021857610218610054565b61022c816102268454610176565b846101b0565b6020601f82116001811461026057600083156102485750848201515b600019600385901b1c1916600184901b1784556101f7565b600084815260208120601f198516915b828110156102905787850151825560209485019460019092019101610270565b50848210156102ae5786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b6109d3806102cc6000396000f3fe608060405234801561001057600080fd5b50600436106100be5760003560e01c806340c10f191161007657806395d89b411161005b57806395d89b4114610183578063a9059cbb1461018b578063dd62ed3e1461019e57600080fd5b806340c10f191461013857806370a082311461014d57600080fd5b806318160ddd116100a757806318160ddd1461010457806323b872dd14610116578063313ce5671461012957600080fd5b806306fdde03146100c3578063095ea7b3146100e1575b600080fd5b6100cb6101e4565b6040516100d891906107bf565b60405180910390f35b6100f46100ef366004610854565b610276565b60405190151581526020016100d8565b6002545b6040519081526020016100d8565b6100f461012436600461087e565b610290565b604051601281526020016100d8565b61014b610146366004610854565b6102b4565b005b61010861015b3660046108bb565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6100cb6102c2565b6100f4610199366004610854565b6102d1565b6101086101ac3660046108dd565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6060600380546101f390610910565b80601f016020809104026020016040519081016040528092919081815260200182805461021f90610910565b801561026c5780601f106102415761010080835404028352916020019161026c565b820191906000526020600020905b81548152906001019060200180831161024f57829003601f168201915b5050505050905090565b6000336102848185856102df565b60019150505b92915050565b60003361029e8582856102f1565b6102a98585856103c5565b506001949350505050565b6102be8282610470565b5050565b6060600480546101f390610910565b6000336102848185856103c5565b6102ec83838360016104cc565b505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146103bf57818110156103b0576040517ffb8f41b200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416600482015260248101829052604481018390526064015b60405180910390fd5b6103bf848484840360006104cc565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8316610415576040517f96c6fd1e000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff8216610465576040517fec442f05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b6102ec838383610614565b73ffffffffffffffffffffffffffffffffffffffff82166104c0576040517fec442f05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b6102be60008383610614565b73ffffffffffffffffffffffffffffffffffffffff841661051c576040517fe602df05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff831661056c576040517f94280d62000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260016020908152604080832093871683529290522082905580156103bf578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161060691815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff831661064c5780600260008282546106419190610963565b909155506106fe9050565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260208190526040902054818110156106d2576040517fe450d38c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8516600482015260248101829052604481018390526064016103a7565b73ffffffffffffffffffffffffffffffffffffffff841660009081526020819052604090209082900390555b73ffffffffffffffffffffffffffffffffffffffff821661072757600280548290039055610753565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090208054820190555b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516107b291815260200190565b60405180910390a3505050565b602081526000825180602084015260005b818110156107ed57602081860181015160408684010152016107d0565b5060006040828501015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011684010191505092915050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461084f57600080fd5b919050565b6000806040838503121561086757600080fd5b6108708361082b565b946020939093013593505050565b60008060006060848603121561089357600080fd5b61089c8461082b565b92506108aa6020850161082b565b929592945050506040919091013590565b6000602082840312156108cd57600080fd5b6108d68261082b565b9392505050565b600080604083850312156108f057600080fd5b6108f98361082b565b91506109076020840161082b565b90509250929050565b600181811c9082168061092457607f821691505b60208210810361095d577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b8082018082111561028a577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea26469706673582212207e804ca539d49155d2b6bc19268ce22f9f857027c75247d69fb0d56a089c93d464736f6c634300081a003360a060405234801561001057600080fd5b5060405161140b38038061140b83398101604081905261002f916101b3565b60016000556002805460ff191690556001600160a01b038316158061005b57506001600160a01b038216155b8061006d57506001600160a01b038116155b1561008b5760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b0383166080526100a3600082610102565b506100ce7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a82610102565b506100f97f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e483610102565b505050506101f6565b60008281526001602090815260408083206001600160a01b038516845290915281205460ff1661018d5760008381526001602081815260408084206001600160a01b0387168086529252808420805460ff19169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a4506001610191565b5060005b92915050565b80516001600160a01b03811681146101ae57600080fd5b919050565b6000806000606084860312156101c857600080fd5b6101d184610197565b92506101df60208501610197565b91506101ed60408501610197565b90509250925092565b6080516111de61022d60003960008181610132015281816103c5015281816104270152818161065801526106ba01526111de6000f3fe608060405234801561001057600080fd5b50600436106101005760003560e01c80638456cb5911610097578063c8a0236211610066578063c8a0236214610276578063d547741f14610289578063d9caed121461029c578063e63ab1e9146102af57600080fd5b80638456cb59146101f957806385f438c11461020157806391d1485414610228578063a217fddf1461026e57600080fd5b80632f2ff15d116100d35780632f2ff15d146101c057806336568abe146101d35780633f4ba83a146101e65780635c975abb146101ee57600080fd5b806301ffc9a714610105578063116191b61461012d57806321fc65f214610179578063248a9ca31461018e575b600080fd5b610118610113366004610f04565b6102d6565b60405190151581526020015b60405180910390f35b6101547f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610124565b61018c610187366004610f6f565b61036f565b005b6101b261019c36600461100c565b6000908152600160208190526040909120015490565b604051908152602001610124565b61018c6101ce366004611025565b610511565b61018c6101e1366004611025565b61053d565b61018c61059b565b60025460ff16610118565b61018c6105d0565b6101b27f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b610118610236366004611025565b600091825260016020908152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b6101b2600081565b61018c610284366004610f6f565b610602565b61018c610297366004611025565b61078a565b61018c6102aa366004611051565b6107b0565b6101b27f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061036957507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b61037761087d565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e46103a1816108c0565b6103a96108ca565b6103ea73ffffffffffffffffffffffffffffffffffffffff87167f000000000000000000000000000000000000000000000000000000000000000086610909565b6040517f5131ab5900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690635131ab599061046490899089908990899089906004016110d7565b600060405180830381600087803b15801561047e57600080fd5b505af1158015610492573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167f85b5be9cf454e05e0bddf49315178102227c312078eefa3c00294fb4d912ae4e8686866040516104f793929190611134565b60405180910390a35061050a6001600055565b5050505050565b6000828152600160208190526040909120015461052d816108c0565b6105378383610996565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8116331461058c576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6105968282610a61565b505050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a6105c5816108c0565b6105cd610b20565b50565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a6105fa816108c0565b6105cd610b9d565b61060a61087d565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e4610634816108c0565b61063c6108ca565b61067d73ffffffffffffffffffffffffffffffffffffffff87167f000000000000000000000000000000000000000000000000000000000000000086610909565b6040517fb8969bd400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063b8969bd4906106f790899089908990899089906004016110d7565b600060405180830381600087803b15801561071157600080fd5b505af1158015610725573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fb9d4efa96044e5f5e03e696fa9ae2ff66911cc27e8a637c3627c75bc5b2241c88686866040516104f793929190611134565b600082815260016020819052604090912001546107a6816108c0565b6105378383610a61565b6107b861087d565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e46107e2816108c0565b6107ea6108ca565b61080b73ffffffffffffffffffffffffffffffffffffffff85168484610909565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f9b1bfa7fa9ee420a16e124f794c35ac9f90472acc99140eb2f6447c714cad8eb8460405161086a91815260200190565b60405180910390a3506105966001600055565b6002600054036108b9576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b6105cd8133610bf8565b60025460ff1615610907576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6040805173ffffffffffffffffffffffffffffffffffffffff8416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb00000000000000000000000000000000000000000000000000000000179052610596908490610c89565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff16610a5957600083815260016020818152604080842073ffffffffffffffffffffffffffffffffffffffff8716808652925280842080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a4506001610369565b506000610369565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff1615610a5957600083815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8616808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a4506001610369565b610b28610d1f565b600280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b610ba56108ca565b600280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258610b733390565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16610c85576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82166004820152602481018390526044015b60405180910390fd5b5050565b6000610cab73ffffffffffffffffffffffffffffffffffffffff841683610d5b565b90508051600014158015610cd0575080806020019051810190610cce9190611157565b155b15610596576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84166004820152602401610c7c565b60025460ff16610907576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6060610d6983836000610d70565b9392505050565b606081471015610dae576040517fcd786059000000000000000000000000000000000000000000000000000000008152306004820152602401610c7c565b6000808573ffffffffffffffffffffffffffffffffffffffff168486604051610dd79190611179565b60006040518083038185875af1925050503d8060008114610e14576040519150601f19603f3d011682016040523d82523d6000602084013e610e19565b606091505b5091509150610e29868383610e33565b9695505050505050565b606082610e4857610e4382610ec2565b610d69565b8151158015610e6c575073ffffffffffffffffffffffffffffffffffffffff84163b155b15610ebb576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85166004820152602401610c7c565b5080610d69565b805115610ed25780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060208284031215610f1657600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610d6957600080fd5b803573ffffffffffffffffffffffffffffffffffffffff81168114610f6a57600080fd5b919050565b600080600080600060808688031215610f8757600080fd5b610f9086610f46565b9450610f9e60208701610f46565b935060408601359250606086013567ffffffffffffffff811115610fc157600080fd5b8601601f81018813610fd257600080fd5b803567ffffffffffffffff811115610fe957600080fd5b886020828401011115610ffb57600080fd5b959894975092955050506020019190565b60006020828403121561101e57600080fd5b5035919050565b6000806040838503121561103857600080fd5b8235915061104860208401610f46565b90509250929050565b60008060006060848603121561106657600080fd5b61106f84610f46565b925061107d60208501610f46565b929592945050506040919091013590565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff8616815273ffffffffffffffffffffffffffffffffffffffff8516602082015283604082015260806060820152600061112960808301848661108e565b979650505050505050565b83815260406020820152600061114e60408301848661108e565b95945050505050565b60006020828403121561116957600080fd5b81518015158114610d6957600080fd5b6000825160005b8181101561119a5760208186018101518583015201611180565b50600092019182525091905056fea264697066735822122035ca457bdc8b45adde9844ff8416a0abd723c23055fd6933ddc05523b5f5b6de64736f6c634300081a0033"; + "0x60a060405230608052600580546001600160a01b0319163317905534801561002657600080fd5b5061002f610154565b600554600180546001600160a01b039092166001600160a01b031992831617905560028054610123921691909117905560405161006b90610206565b60408082526004908201819052631d195cdd60e21b606083015260806020830181905282015263151154d560e21b60a082015260c001604051809103906000f0801580156100bd573d6000803e3d6000fd5b50600480546001600160a01b0319166001600160a01b039283161790556001546040513092919091169082906100f290610213565b6001600160a01b03938416815291831660208301529091166040820152606001604051809103906000f08015801561012e573d6000803e3d6000fd5b50600080546001600160a01b0319166001600160a01b0392909216919091179055610220565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156101a45760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146102035780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b610c9f806135b283390190565b61140b8061425183390190565b608051613369610249600039600081816120e20152818161210b01526124da01526133696000f3fe6080604052600436106102345760003560e01c80635c975abb11610138578063ad3cb1cc116100b0578063d547741f1161007f578063e63ab1e911610064578063e63ab1e9146106ff578063f340fa0114610733578063f45346dc1461074657600080fd5b8063d547741f146106bf578063dda79b75146106df57600080fd5b8063ad3cb1cc14610616578063ae7a3a6f1461065f578063b8969bd41461067f578063c0c53b8b1461069f57600080fd5b80638456cb591161010757806391d14854116100ec57806391d1485414610568578063a217fddf146105cd578063a783c789146105e257600080fd5b80638456cb59146105335780638c6f037f1461054857600080fd5b80635c975abb146104885780635d62c860146104bf5780636ab90f9b146104f357806381100bf01461051357600080fd5b806335c018db116101cb5780634f1ef2861161019a57806352d1902d1161017f57806352d1902d1461043357806357bec62f146104485780635b1125911461046857600080fd5b80634f1ef286146104005780635131ab591461041357600080fd5b806335c018db1461039857806336568abe146103ab5780633c2f05a8146103cb5780633f4ba83a146103eb57600080fd5b806321e093b11161020757806321e093b1146102d0578063248a9ca31461030857806329c59b5d146103655780632f2ff15d1461037857600080fd5b806301ffc9a71461023957806310188aef1461026e5780631b8b921d146102905780631cff79cd146102b0575b600080fd5b34801561024557600080fd5b50610259610254366004612d53565b610766565b60405190151581526020015b60405180910390f35b34801561027a57600080fd5b5061028e610289366004612db1565b6107ff565b005b34801561029c57600080fd5b5061028e6102ab366004612e15565b6108f3565b6102c36102be366004612e15565b61097e565b6040516102659190612ed6565b3480156102dc57600080fd5b506003546102f0906001600160a01b031681565b6040516001600160a01b039091168152602001610265565b34801561031457600080fd5b50610357610323366004612ee9565b60009081527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052604090206001015490565b604051908152602001610265565b61028e610373366004612e15565b610a81565b34801561038457600080fd5b5061028e610393366004612f02565b610c14565b61028e6103a6366004612e15565b610c5e565b3480156103b757600080fd5b5061028e6103c6366004612f02565b610e4d565b3480156103d757600080fd5b506004546102f0906001600160a01b031681565b3480156103f757600080fd5b5061028e610e99565b61028e61040e366004612f5d565b610ece565b34801561041f57600080fd5b5061028e61042e366004613064565b610eed565b34801561043f57600080fd5b50610357611206565b34801561045457600080fd5b506002546102f0906001600160a01b031681565b34801561047457600080fd5b506001546102f0906001600160a01b031681565b34801561049457600080fd5b507fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff16610259565b3480156104cb57600080fd5b506103577f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b981565b3480156104ff57600080fd5b5061028e61050e3660046130d3565b611235565b34801561051f57600080fd5b506005546102f0906001600160a01b031681565b34801561053f57600080fd5b5061028e611360565b34801561055457600080fd5b5061028e61056336600461312d565b611392565b34801561057457600080fd5b50610259610583366004612f02565b60009182527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408084206001600160a01b0393909316845291905290205460ff1690565b3480156105d957600080fd5b50610357600081565b3480156105ee57600080fd5b506103577f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb81565b34801561062257600080fd5b506102c36040518060400160405280600581526020017f352e302e3000000000000000000000000000000000000000000000000000000081525081565b34801561066b57600080fd5b5061028e61067a366004612db1565b6114a8565b34801561068b57600080fd5b5061028e61069a366004613064565b61159c565b3480156106ab57600080fd5b5061028e6106ba36600461317f565b611755565b3480156106cb57600080fd5b5061028e6106da366004612f02565b611a0a565b3480156106eb57600080fd5b506000546102f0906001600160a01b031681565b34801561070b57600080fd5b506103577f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b61028e610741366004612db1565b611a4e565b34801561075257600080fd5b5061028e6107613660046131c2565b611be3565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b0000000000000000000000000000000000000000000000000000000014806107f957507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b600061080a81611cde565b6001600160a01b03821661084a576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002546001600160a01b03161561088d576040517f0c8dc01600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6108b77f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b983611ce8565b5050600280547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6108fb611dd5565b610903611e33565b826001600160a01b0316336001600160a01b03167f2a21062ee9199c2e205622999eeb7c3da73153674f36a0acd3f74fa6af67bde3848460405161094892919061323e565b60405180910390a361097960017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b505050565b60607f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb6109aa81611cde565b6109b2611dd5565b6109ba611e33565b6001600160a01b0385166109fa576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610a07868686611eda565b9050856001600160a01b03167fcaf938de11c367272220bfd1d2baa99ca46665e7bc4d85f00adb51b90fe1fa9f348787604051610a469392919061325a565b60405180910390a29150610a7960017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b509392505050565b610a89611dd5565b610a91611e33565b34600003610acb576040517f7671265e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038316610b0b576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546040516000916001600160a01b03169034908381818185875af1925050503d8060008114610b58576040519150601f19603f3d011682016040523d82523d6000602084013e610b5d565b606091505b5050905080610b98576040517f79cacff100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b836001600160a01b0316336001600160a01b03167f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a43460008787604051610be29493929190613274565b60405180910390a35061097960017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020526040902060010154610c4e81611cde565b610c588383611ce8565b50505050565b7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb610c8881611cde565b610c90611dd5565b610c98611e33565b6001600160a01b038416610cd8576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000846001600160a01b03163460405160006040518083038185875af1925050503d8060008114610d25576040519150601f19603f3d011682016040523d82523d6000602084013e610d2a565b606091505b5050905080610d65576040517facfdb44400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f8fcaa0b50000000000000000000000000000000000000000000000000000000081526001600160a01b03861690638fcaa0b590610dac908790879060040161323e565b600060405180830381600087803b158015610dc657600080fd5b505af1158015610dda573d6000803e3d6000fd5b50505050846001600160a01b03167fd5d7616b1678354a0dea9d7e57e6a090bff5babe9f8d6381fdbad16e89ba311c348686604051610e1b9392919061325a565b60405180910390a250610c5860017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b6001600160a01b0381163314610e8f576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6109798282611f83565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610ec381611cde565b610ecb612047565b50565b610ed66120d7565b610edf826121a7565b610ee982826121b2565b5050565b7f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b9610f1781611cde565b610f1f611dd5565b610f27611e33565b83600003610f61576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038516610fa1576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610fab86866122d6565b610fe1576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b0386811660048301526024820186905287169063095ea7b3906044016020604051808303816000875af1158015611049573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061106d919061329d565b6110a3576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6110ae858484611eda565b506110b986866122d6565b6110ef576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201526000906001600160a01b038816906370a0823190602401602060405180830381865afa15801561114f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061117391906132bf565b90508015611185576111858782612366565b856001600160a01b0316876001600160a01b03167f29c40793bffd84cb810179f15d1ceec72bc7f0785514c668ba36645cf99b73828787876040516111cc9392919061325a565b60405180910390a3506111fe60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b505050505050565b60006112106124cf565b507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc90565b600480546040517f40c10f190000000000000000000000000000000000000000000000000000000081523092810192909252602482018590526001600160a01b0316906340c10f1990604401600060405180830381600087803b15801561129b57600080fd5b505af11580156112af573d6000803e3d6000fd5b50506004546112cd92506001600160a01b0316905085858585610eed565b600480546040517f70a0823100000000000000000000000000000000000000000000000000000000815230928101929092526001600160a01b0316906370a0823190602401602060405180830381865afa15801561132f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061135391906132bf565b15610c5857610c586132d8565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61138a81611cde565b610ecb612531565b61139a611dd5565b6113a2611e33565b836000036113dc576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03851661141c576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6114273384866125aa565b846001600160a01b0316336001600160a01b03167f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a4868686866040516114709493929190613274565b60405180910390a36114a160017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b5050505050565b60006114b381611cde565b6001600160a01b0382166114f3576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000546001600160a01b031615611536576040517fb337f37800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6115607f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b983611ce8565b5050600080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b7f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b96115c681611cde565b6115ce611dd5565b6115d6611e33565b83600003611610576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038516611650576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6116646001600160a01b0387168686612733565b6040517f8fcaa0b50000000000000000000000000000000000000000000000000000000081526001600160a01b03861690638fcaa0b5906116ab908690869060040161323e565b600060405180830381600087803b1580156116c557600080fd5b505af11580156116d9573d6000803e3d6000fd5b50505050846001600160a01b0316866001600160a01b03167f723fc7be2448075379e4fdf1e6bf5fead954d2668d2da05dcb44ccfec4beeda78686866040516117249392919061325a565b60405180910390a36111fe60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156117a05750825b905060008267ffffffffffffffff1660011480156117bd5750303b155b9050811580156117cb575080155b15611802576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84547fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000016600117855583156118635784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff16680100000000000000001785555b6001600160a01b038816158061188057506001600160a01b038716155b156118b7576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6118bf6127a7565b6118c76127af565b6118cf6127a7565b6118d76127bf565b6118e2600087611ce8565b5061190d7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a87611ce8565b50600180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b038a1617905561196b7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb89611ce8565b50600380547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0389161790558315611a005784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b5050505050505050565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020526040902060010154611a4481611cde565b610c588383611f83565b611a56611dd5565b611a5e611e33565b34600003611a98576040517f7671265e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038116611ad8576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546040516000916001600160a01b03169034908381818185875af1925050503d8060008114611b25576040519150601f19603f3d011682016040523d82523d6000602084013e611b2a565b606091505b5050905080611b65576040517f79cacff100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60408051348152600060208201819052606082840181905282015290516001600160a01b0384169133917f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a49181900360800190a350610ecb60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b611beb611dd5565b611bf3611e33565b81600003611c2d576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038316611c6d576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611c783382846125aa565b826001600160a01b0316336001600160a01b03167f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a484846040516109489291909182526001600160a01b0316602082015260606040820181905260009082015260800190565b610ecb81336127cf565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff16611dcb576000848152602082815260408083206001600160a01b0387168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055611d813390565b6001600160a01b0316836001600160a01b0316857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a460019150506107f9565b60009150506107f9565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff1615611e31576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0080547ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01611eae576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60029055565b60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b6060600080856001600160a01b0316348686604051611efa929190613307565b60006040518083038185875af1925050503d8060008114611f37576040519150601f19603f3d011682016040523d82523d6000602084013e611f3c565b606091505b509150915081611f78576040517facfdb44400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b9150505b9392505050565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff1615611dcb576000848152602082815260408083206001600160a01b038716808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339287917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a460019150506107f9565b61204f61285c565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001681557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a150565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148061217057507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166121647f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b6001600160a01b031614155b15611e31576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610ee981611cde565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa92505050801561222a575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252612227918101906132bf565b60015b612270576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b03831660048201526024015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc81146122cc576040517faa1d49a400000000000000000000000000000000000000000000000000000000815260048101829052602401612267565b61097983836128b7565b6040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b038281166004830152600060248301819052919084169063095ea7b3906044016020604051808303816000875af1158015612342573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f7c919061329d565b6003546001600160a01b03908116908316036124b5576002546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152602481018390529083169063095ea7b3906044016020604051808303816000875af11580156123e8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061240c919061329d565b612442576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002546040517f743e0c9b000000000000000000000000000000000000000000000000000000008152600481018390526001600160a01b039091169063743e0c9b90602401600060405180830381600087803b1580156124a157600080fd5b505af11580156111fe573d6000803e3d6000fd5b600054610ee9906001600160a01b03848116911683612733565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614611e31576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612539611dd5565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011781557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258336120b9565b6003546001600160a01b0390811690831603612717576125d56001600160a01b03831684308461290d565b6002546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152602481018390529083169063095ea7b3906044016020604051808303816000875af1158015612641573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612665919061329d565b61269b576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002546040517f743e0c9b000000000000000000000000000000000000000000000000000000008152600481018390526001600160a01b039091169063743e0c9b90602401600060405180830381600087803b1580156126fa57600080fd5b505af115801561270e573d6000803e3d6000fd5b50505050505050565b600054610979906001600160a01b03848116918691168461290d565b6040516001600160a01b0383811660248301526044820183905261097991859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050612946565b611e316129c2565b6127b76129c2565b611e31612a29565b6127c76129c2565b611e31612a31565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408083206001600160a01b038516845290915290205460ff16610ee9576040517fe2517d3f0000000000000000000000000000000000000000000000000000000081526001600160a01b038216600482015260248101839052604401612267565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff16611e31576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6128c082612a82565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a2805115612905576109798282612b2a565b610ee9612ba0565b6040516001600160a01b038481166024830152838116604483015260648201839052610c589186918216906323b872dd90608401612760565b600061295b6001600160a01b03841683612bd8565b9050805160001415801561298057508080602001905181019061297e919061329d565b155b15610979576040517f5274afe70000000000000000000000000000000000000000000000000000000081526001600160a01b0384166004820152602401612267565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff16611e31576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611eb46129c2565b612a396129c2565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055565b806001600160a01b03163b600003612ad1576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b0382166004820152602401612267565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6060600080846001600160a01b031684604051612b479190613317565b600060405180830381855af49150503d8060008114612b82576040519150601f19603f3d011682016040523d82523d6000602084013e612b87565b606091505b5091509150612b97858383612be6565b95945050505050565b3415611e31576040517fb398979f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6060611f7c83836000612c5b565b606082612bfb57612bf682612d11565b611f7c565b8151158015612c1257506001600160a01b0384163b155b15612c54576040517f9996b3150000000000000000000000000000000000000000000000000000000081526001600160a01b0385166004820152602401612267565b5080611f7c565b606081471015612c99576040517fcd786059000000000000000000000000000000000000000000000000000000008152306004820152602401612267565b600080856001600160a01b03168486604051612cb59190613317565b60006040518083038185875af1925050503d8060008114612cf2576040519150601f19603f3d011682016040523d82523d6000602084013e612cf7565b606091505b5091509150612d07868383612be6565b9695505050505050565b805115612d215780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060208284031215612d6557600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114611f7c57600080fd5b80356001600160a01b0381168114612dac57600080fd5b919050565b600060208284031215612dc357600080fd5b611f7c82612d95565b60008083601f840112612dde57600080fd5b50813567ffffffffffffffff811115612df657600080fd5b602083019150836020828501011115612e0e57600080fd5b9250929050565b600080600060408486031215612e2a57600080fd5b612e3384612d95565b9250602084013567ffffffffffffffff811115612e4f57600080fd5b612e5b86828701612dcc565b9497909650939450505050565b60005b83811015612e83578181015183820152602001612e6b565b50506000910152565b60008151808452612ea4816020860160208601612e68565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000611f7c6020830184612e8c565b600060208284031215612efb57600080fd5b5035919050565b60008060408385031215612f1557600080fd5b82359150612f2560208401612d95565b90509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60008060408385031215612f7057600080fd5b612f7983612d95565b9150602083013567ffffffffffffffff811115612f9557600080fd5b8301601f81018513612fa657600080fd5b803567ffffffffffffffff811115612fc057612fc0612f2e565b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8501160116810181811067ffffffffffffffff8211171561302c5761302c612f2e565b60405281815282820160200187101561304457600080fd5b816020840160208301376000602083830101528093505050509250929050565b60008060008060006080868803121561307c57600080fd5b61308586612d95565b945061309360208701612d95565b935060408601359250606086013567ffffffffffffffff8111156130b657600080fd5b6130c288828901612dcc565b969995985093965092949392505050565b600080600080606085870312156130e957600080fd5b6130f285612d95565b935060208501359250604085013567ffffffffffffffff81111561311557600080fd5b61312187828801612dcc565b95989497509550505050565b60008060008060006080868803121561314557600080fd5b61314e86612d95565b94506020860135935061316360408701612d95565b9250606086013567ffffffffffffffff8111156130b657600080fd5b60008060006060848603121561319457600080fd5b61319d84612d95565b92506131ab60208501612d95565b91506131b960408501612d95565b90509250925092565b6000806000606084860312156131d757600080fd5b6131e084612d95565b9250602084013591506131b960408501612d95565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b6020815260006132526020830184866131f5565b949350505050565b838152604060208201526000612b976040830184866131f5565b8481526001600160a01b0384166020820152606060408201526000612d076060830184866131f5565b6000602082840312156132af57600080fd5b81518015158114611f7c57600080fd5b6000602082840312156132d157600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b8183823760009101908152919050565b60008251613329818460208701612e68565b919091019291505056fea2646970667358221220d968781c52811c0ad33400d2e6fd7deb96a254471b52dcc00cbee1f639dac0b664736f6c634300081a0033608060405234801561001057600080fd5b50604051610c9f380380610c9f83398101604081905261002f9161010d565b8181600361003d83826101ff565b50600461004a82826101ff565b50505050506102bd565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261007b57600080fd5b81516001600160401b0381111561009457610094610054565b604051601f8201601f19908116603f011681016001600160401b03811182821017156100c2576100c2610054565b6040528181528382016020018510156100da57600080fd5b60005b828110156100f9576020818601810151838301820152016100dd565b506000918101602001919091529392505050565b6000806040838503121561012057600080fd5b82516001600160401b0381111561013657600080fd5b6101428582860161006a565b602085015190935090506001600160401b0381111561016057600080fd5b61016c8582860161006a565b9150509250929050565b600181811c9082168061018a57607f821691505b6020821081036101aa57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156101fa57806000526020600020601f840160051c810160208510156101d75750805b601f840160051c820191505b818110156101f757600081556001016101e3565b50505b505050565b81516001600160401b0381111561021857610218610054565b61022c816102268454610176565b846101b0565b6020601f82116001811461026057600083156102485750848201515b600019600385901b1c1916600184901b1784556101f7565b600084815260208120601f198516915b828110156102905787850151825560209485019460019092019101610270565b50848210156102ae5786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b6109d3806102cc6000396000f3fe608060405234801561001057600080fd5b50600436106100be5760003560e01c806340c10f191161007657806395d89b411161005b57806395d89b4114610183578063a9059cbb1461018b578063dd62ed3e1461019e57600080fd5b806340c10f191461013857806370a082311461014d57600080fd5b806318160ddd116100a757806318160ddd1461010457806323b872dd14610116578063313ce5671461012957600080fd5b806306fdde03146100c3578063095ea7b3146100e1575b600080fd5b6100cb6101e4565b6040516100d891906107bf565b60405180910390f35b6100f46100ef366004610854565b610276565b60405190151581526020016100d8565b6002545b6040519081526020016100d8565b6100f461012436600461087e565b610290565b604051601281526020016100d8565b61014b610146366004610854565b6102b4565b005b61010861015b3660046108bb565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6100cb6102c2565b6100f4610199366004610854565b6102d1565b6101086101ac3660046108dd565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6060600380546101f390610910565b80601f016020809104026020016040519081016040528092919081815260200182805461021f90610910565b801561026c5780601f106102415761010080835404028352916020019161026c565b820191906000526020600020905b81548152906001019060200180831161024f57829003601f168201915b5050505050905090565b6000336102848185856102df565b60019150505b92915050565b60003361029e8582856102f1565b6102a98585856103c5565b506001949350505050565b6102be8282610470565b5050565b6060600480546101f390610910565b6000336102848185856103c5565b6102ec83838360016104cc565b505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146103bf57818110156103b0576040517ffb8f41b200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416600482015260248101829052604481018390526064015b60405180910390fd5b6103bf848484840360006104cc565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8316610415576040517f96c6fd1e000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff8216610465576040517fec442f05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b6102ec838383610614565b73ffffffffffffffffffffffffffffffffffffffff82166104c0576040517fec442f05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b6102be60008383610614565b73ffffffffffffffffffffffffffffffffffffffff841661051c576040517fe602df05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff831661056c576040517f94280d62000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260016020908152604080832093871683529290522082905580156103bf578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161060691815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff831661064c5780600260008282546106419190610963565b909155506106fe9050565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260208190526040902054818110156106d2576040517fe450d38c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8516600482015260248101829052604481018390526064016103a7565b73ffffffffffffffffffffffffffffffffffffffff841660009081526020819052604090209082900390555b73ffffffffffffffffffffffffffffffffffffffff821661072757600280548290039055610753565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090208054820190555b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516107b291815260200190565b60405180910390a3505050565b602081526000825180602084015260005b818110156107ed57602081860181015160408684010152016107d0565b5060006040828501015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011684010191505092915050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461084f57600080fd5b919050565b6000806040838503121561086757600080fd5b6108708361082b565b946020939093013593505050565b60008060006060848603121561089357600080fd5b61089c8461082b565b92506108aa6020850161082b565b929592945050506040919091013590565b6000602082840312156108cd57600080fd5b6108d68261082b565b9392505050565b600080604083850312156108f057600080fd5b6108f98361082b565b91506109076020840161082b565b90509250929050565b600181811c9082168061092457607f821691505b60208210810361095d577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b8082018082111561028a577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea26469706673582212207e804ca539d49155d2b6bc19268ce22f9f857027c75247d69fb0d56a089c93d464736f6c634300081a003360a060405234801561001057600080fd5b5060405161140b38038061140b83398101604081905261002f916101b3565b60016000556002805460ff191690556001600160a01b038316158061005b57506001600160a01b038216155b8061006d57506001600160a01b038116155b1561008b5760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b0383166080526100a3600082610102565b506100ce7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a82610102565b506100f97f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e483610102565b505050506101f6565b60008281526001602090815260408083206001600160a01b038516845290915281205460ff1661018d5760008381526001602081815260408084206001600160a01b0387168086529252808420805460ff19169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a4506001610191565b5060005b92915050565b80516001600160a01b03811681146101ae57600080fd5b919050565b6000806000606084860312156101c857600080fd5b6101d184610197565b92506101df60208501610197565b91506101ed60408501610197565b90509250925092565b6080516111de61022d60003960008181610132015281816103c5015281816104270152818161065801526106ba01526111de6000f3fe608060405234801561001057600080fd5b50600436106101005760003560e01c80638456cb5911610097578063c8a0236211610066578063c8a0236214610276578063d547741f14610289578063d9caed121461029c578063e63ab1e9146102af57600080fd5b80638456cb59146101f957806385f438c11461020157806391d1485414610228578063a217fddf1461026e57600080fd5b80632f2ff15d116100d35780632f2ff15d146101c057806336568abe146101d35780633f4ba83a146101e65780635c975abb146101ee57600080fd5b806301ffc9a714610105578063116191b61461012d57806321fc65f214610179578063248a9ca31461018e575b600080fd5b610118610113366004610f04565b6102d6565b60405190151581526020015b60405180910390f35b6101547f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610124565b61018c610187366004610f6f565b61036f565b005b6101b261019c36600461100c565b6000908152600160208190526040909120015490565b604051908152602001610124565b61018c6101ce366004611025565b610511565b61018c6101e1366004611025565b61053d565b61018c61059b565b60025460ff16610118565b61018c6105d0565b6101b27f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b610118610236366004611025565b600091825260016020908152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b6101b2600081565b61018c610284366004610f6f565b610602565b61018c610297366004611025565b61078a565b61018c6102aa366004611051565b6107b0565b6101b27f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061036957507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b61037761087d565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e46103a1816108c0565b6103a96108ca565b6103ea73ffffffffffffffffffffffffffffffffffffffff87167f000000000000000000000000000000000000000000000000000000000000000086610909565b6040517f5131ab5900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690635131ab599061046490899089908990899089906004016110d7565b600060405180830381600087803b15801561047e57600080fd5b505af1158015610492573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167f85b5be9cf454e05e0bddf49315178102227c312078eefa3c00294fb4d912ae4e8686866040516104f793929190611134565b60405180910390a35061050a6001600055565b5050505050565b6000828152600160208190526040909120015461052d816108c0565b6105378383610996565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8116331461058c576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6105968282610a61565b505050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a6105c5816108c0565b6105cd610b20565b50565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a6105fa816108c0565b6105cd610b9d565b61060a61087d565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e4610634816108c0565b61063c6108ca565b61067d73ffffffffffffffffffffffffffffffffffffffff87167f000000000000000000000000000000000000000000000000000000000000000086610909565b6040517fb8969bd400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063b8969bd4906106f790899089908990899089906004016110d7565b600060405180830381600087803b15801561071157600080fd5b505af1158015610725573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fb9d4efa96044e5f5e03e696fa9ae2ff66911cc27e8a637c3627c75bc5b2241c88686866040516104f793929190611134565b600082815260016020819052604090912001546107a6816108c0565b6105378383610a61565b6107b861087d565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e46107e2816108c0565b6107ea6108ca565b61080b73ffffffffffffffffffffffffffffffffffffffff85168484610909565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f9b1bfa7fa9ee420a16e124f794c35ac9f90472acc99140eb2f6447c714cad8eb8460405161086a91815260200190565b60405180910390a3506105966001600055565b6002600054036108b9576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b6105cd8133610bf8565b60025460ff1615610907576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6040805173ffffffffffffffffffffffffffffffffffffffff8416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb00000000000000000000000000000000000000000000000000000000179052610596908490610c89565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff16610a5957600083815260016020818152604080842073ffffffffffffffffffffffffffffffffffffffff8716808652925280842080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a4506001610369565b506000610369565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff1615610a5957600083815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8616808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a4506001610369565b610b28610d1f565b600280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b610ba56108ca565b600280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258610b733390565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16610c85576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82166004820152602481018390526044015b60405180910390fd5b5050565b6000610cab73ffffffffffffffffffffffffffffffffffffffff841683610d5b565b90508051600014158015610cd0575080806020019051810190610cce9190611157565b155b15610596576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84166004820152602401610c7c565b60025460ff16610907576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6060610d6983836000610d70565b9392505050565b606081471015610dae576040517fcd786059000000000000000000000000000000000000000000000000000000008152306004820152602401610c7c565b6000808573ffffffffffffffffffffffffffffffffffffffff168486604051610dd79190611179565b60006040518083038185875af1925050503d8060008114610e14576040519150601f19603f3d011682016040523d82523d6000602084013e610e19565b606091505b5091509150610e29868383610e33565b9695505050505050565b606082610e4857610e4382610ec2565b610d69565b8151158015610e6c575073ffffffffffffffffffffffffffffffffffffffff84163b155b15610ebb576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85166004820152602401610c7c565b5080610d69565b805115610ed25780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060208284031215610f1657600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610d6957600080fd5b803573ffffffffffffffffffffffffffffffffffffffff81168114610f6a57600080fd5b919050565b600080600080600060808688031215610f8757600080fd5b610f9086610f46565b9450610f9e60208701610f46565b935060408601359250606086013567ffffffffffffffff811115610fc157600080fd5b8601601f81018813610fd257600080fd5b803567ffffffffffffffff811115610fe957600080fd5b886020828401011115610ffb57600080fd5b959894975092955050506020019190565b60006020828403121561101e57600080fd5b5035919050565b6000806040838503121561103857600080fd5b8235915061104860208401610f46565b90509250929050565b60008060006060848603121561106657600080fd5b61106f84610f46565b925061107d60208501610f46565b929592945050506040919091013590565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff8616815273ffffffffffffffffffffffffffffffffffffffff8516602082015283604082015260806060820152600061112960808301848661108e565b979650505050505050565b83815260406020820152600061114e60408301848661108e565b95945050505050565b60006020828403121561116957600080fd5b81518015158114610d6957600080fd5b6000825160005b8181101561119a5760208186018101518583015201611180565b50600092019182525091905056fea264697066735822122069d5c5c3cb2752c876b6a2138d8d9b66bac6bd1b48a1fe98417eea81faf02a3e64736f6c634300081a0033"; type GatewayEVMEchidnaTestConstructorParams = | [signer?: Signer] diff --git a/v2/typechain-types/factories/GatewayEVMUpgradeTest__factory.ts b/v2/typechain-types/factories/GatewayEVMUpgradeTest__factory.ts index 9dde90ab..db7100bb 100644 --- a/v2/typechain-types/factories/GatewayEVMUpgradeTest__factory.ts +++ b/v2/typechain-types/factories/GatewayEVMUpgradeTest__factory.ts @@ -932,6 +932,11 @@ const _abi = [ name: "ApprovalFailed", inputs: [], }, + { + type: "error", + name: "ConnectorInitialized", + inputs: [], + }, { type: "error", name: "CustodyInitialized", @@ -1038,7 +1043,7 @@ const _abi = [ ] as const; const _bytecode = - "0x60a06040523060805234801561001457600080fd5b5061001d610022565b6100d4565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100725760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146100d15780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b608051612d526100fd60003960008181611ab101528181611ada0152611f250152612d526000f3fe6080604052600436106101e35760003560e01c80635c975abb11610102578063ae7a3a6f11610095578063dda79b7511610064578063dda79b751461062e578063e63ab1e91461064e578063f340fa0114610682578063f45346dc1461069557600080fd5b8063ae7a3a6f146105ae578063b8969bd4146105ce578063c0c53b8b146105ee578063d547741f1461060e57600080fd5b806391d14854116100d157806391d14854146104b7578063a217fddf1461051c578063a783c78914610531578063ad3cb1cc1461056557600080fd5b80635c975abb146104175780635d62c8601461044e5780638456cb59146104825780638c6f037f1461049757600080fd5b806335c018db1161017a5780635131ab59116101495780635131ab59146103a257806352d1902d146103c257806357bec62f146103d75780635b112591146103f757600080fd5b806335c018db1461034757806336568abe1461035a5780633f4ba83a1461037a5780634f1ef2861461038f57600080fd5b806321e093b1116101b657806321e093b11461027f578063248a9ca3146102b757806329c59b5d146103145780632f2ff15d1461032757600080fd5b806301ffc9a7146101e857806310188aef1461021d5780631b8b921d1461023f5780631cff79cd1461025f575b600080fd5b3480156101f457600080fd5b506102086102033660046127c5565b6106b5565b60405190151581526020015b60405180910390f35b34801561022957600080fd5b5061023d610238366004612823565b61074e565b005b34801561024b57600080fd5b5061023d61025a366004612887565b610842565b61027261026d366004612887565b610894565b6040516102149190612948565b34801561028b57600080fd5b5060035461029f906001600160a01b031681565b6040516001600160a01b039091168152602001610214565b3480156102c357600080fd5b506103066102d236600461295b565b60009081527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052604090206001015490565b604051908152602001610214565b61023d610322366004612887565b61091d565b34801561033357600080fd5b5061023d610342366004612974565b610a42565b61023d610355366004612887565b610a8c565b34801561036657600080fd5b5061023d610375366004612974565b610c0b565b34801561038657600080fd5b5061023d610c5c565b61023d61039d3660046129cf565b610c91565b3480156103ae57600080fd5b5061023d6103bd366004612ad6565b610cb0565b3480156103ce57600080fd5b50610306610f85565b3480156103e357600080fd5b5060025461029f906001600160a01b031681565b34801561040357600080fd5b5060015461029f906001600160a01b031681565b34801561042357600080fd5b507fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff16610208565b34801561045a57600080fd5b506103067f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b981565b34801561048e57600080fd5b5061023d610fb4565b3480156104a357600080fd5b5061023d6104b2366004612b45565b610fe6565b3480156104c357600080fd5b506102086104d2366004612974565b60009182527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408084206001600160a01b0393909316845291905290205460ff1690565b34801561052857600080fd5b50610306600081565b34801561053d57600080fd5b506103067f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb81565b34801561057157600080fd5b506102726040518060400160405280600581526020017f352e302e3000000000000000000000000000000000000000000000000000000081525081565b3480156105ba57600080fd5b5061023d6105c9366004612823565b611083565b3480156105da57600080fd5b5061023d6105e9366004612ad6565b611177565b3480156105fa57600080fd5b5061023d610609366004612b97565b6112e9565b34801561061a57600080fd5b5061023d610629366004612974565b61159e565b34801561063a57600080fd5b5060005461029f906001600160a01b031681565b34801561065a57600080fd5b506103067f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b61023d610690366004612823565b6115e2565b3480156106a157600080fd5b5061023d6106b0366004612bda565b611707565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061074857507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b6000610759816117b2565b6002546001600160a01b03161561079c576040517fb337f37800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b0382166107dc576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6108067f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b9836117bc565b5050600280547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b826001600160a01b0316336001600160a01b03167f2a21062ee9199c2e205622999eeb7c3da73153674f36a0acd3f74fa6af67bde38484604051610887929190612c56565b60405180910390a3505050565b60607f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb6108c0816117b2565b60006108cd8686866118a9565b9050856001600160a01b03167f373df382b9c587826f3de13f16d67f8d99f28ee947fc0924c6ef2d6d2c7e854634878760405161090c93929190612c72565b60405180910390a295945050505050565b34600003610957576040517f7671265e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546040516000916001600160a01b03169034908381818185875af1925050503d80600081146109a4576040519150601f19603f3d011682016040523d82523d6000602084013e6109a9565b606091505b50909150508015156000036109ea576040517f79cacff100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b836001600160a01b0316336001600160a01b03167f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a43460008787604051610a349493929190612c8c565b60405180910390a350505050565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020526040902060010154610a7c816117b2565b610a8683836117bc565b50505050565b7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb610ab6816117b2565b600080856001600160a01b03163460405160006040518083038185875af1925050503d8060008114610b04576040519150601f19603f3d011682016040523d82523d6000602084013e610b09565b606091505b509150915081610b45576040517facfdb44400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f8fcaa0b50000000000000000000000000000000000000000000000000000000081526001600160a01b03871690638fcaa0b590610b8c9088908890600401612c56565b600060405180830381600087803b158015610ba657600080fd5b505af1158015610bba573d6000803e3d6000fd5b50505050856001600160a01b03167fd5d7616b1678354a0dea9d7e57e6a090bff5babe9f8d6381fdbad16e89ba311c348787604051610bfb93929190612c72565b60405180910390a2505050505050565b6001600160a01b0381163314610c4d576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610c578282611952565b505050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610c86816117b2565b610c8e611a16565b50565b610c99611aa6565b610ca282611b78565b610cac8282611b83565b5050565b610cb8611ca7565b7f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b9610ce2816117b2565b83600003610d1c576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610d268686611d28565b610d5c576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b0386811660048301526024820186905287169063095ea7b3906044016020604051808303816000875af1158015610dc4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610de89190612cb5565b610e1e576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610e2b8685856118a9565b9050610e378787611d28565b610e6d576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201526000906001600160a01b038916906370a0823190602401602060405180830381865afa158015610ecd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ef19190612cd7565b90508015610f0357610f038882611db8565b866001600160a01b0316886001600160a01b03167f29c40793bffd84cb810179f15d1ceec72bc7f0785514c668ba36645cf99b7382888888604051610f4a93929190612c72565b60405180910390a3505050610f7e60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b5050505050565b6000610f8f611f1a565b507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc90565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610fde816117b2565b610c8e611f7c565b83600003611020576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61102b338486611ff5565b846001600160a01b0316336001600160a01b03167f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a4868686866040516110749493929190612c8c565b60405180910390a35050505050565b600061108e816117b2565b6000546001600160a01b0316156110d1576040517fb337f37800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038216611111576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61113b7f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b9836117bc565b5050600080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b61117f611ca7565b7f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b96111a9816117b2565b836000036111e3576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6111f76001600160a01b0387168686612149565b6040517f8fcaa0b50000000000000000000000000000000000000000000000000000000081526001600160a01b03861690638fcaa0b59061123e9086908690600401612c56565b600060405180830381600087803b15801561125857600080fd5b505af115801561126c573d6000803e3d6000fd5b50505050846001600160a01b0316866001600160a01b03167f723fc7be2448075379e4fdf1e6bf5fead954d2668d2da05dcb44ccfec4beeda78686866040516112b793929190612c72565b60405180910390a350610f7e60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156113345750825b905060008267ffffffffffffffff1660011480156113515750303b155b90508115801561135f575080155b15611396576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84547fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000016600117855583156113f75784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff16680100000000000000001785555b6001600160a01b038816158061141457506001600160a01b038716155b1561144b576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6114536121bd565b61145b6121c5565b6114636121bd565b61146b6121d5565b6114766000876117bc565b506114a17f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a876117bc565b50600180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b038a161790556114ff7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb896117bc565b50600380547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03891617905583156115945784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b5050505050505050565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b62680060205260409020600101546115d8816117b2565b610a868383611952565b3460000361161c576040517f7671265e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546040516000916001600160a01b03169034908381818185875af1925050503d8060008114611669576040519150601f19603f3d011682016040523d82523d6000602084013e61166e565b606091505b50909150508015156000036116af576040517f79cacff100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60408051348152600060208201819052606082840181905282015290516001600160a01b0384169133917f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a49181900360800190a35050565b81600003611741576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61174c338284611ff5565b826001600160a01b0316336001600160a01b03167f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a484846040516108879291909182526001600160a01b0316602082015260606040820181905260009082015260800190565b610c8e81336121e5565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff1661189f576000848152602082815260408083206001600160a01b0387168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790556118553390565b6001600160a01b0316836001600160a01b0316857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a46001915050610748565b6000915050610748565b6060600080856001600160a01b03163486866040516118c9929190612cf0565b60006040518083038185875af1925050503d8060008114611906576040519150601f19603f3d011682016040523d82523d6000602084013e61190b565b606091505b509150915081611947576040517facfdb44400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b9150505b9392505050565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff161561189f576000848152602082815260408083206001600160a01b038716808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339287917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a46001915050610748565b611a1e612272565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001681557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a150565b306001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161480611b3f57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316611b337f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b6001600160a01b031614155b15611b76576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6000610cac816117b2565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015611bfb575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252611bf891810190612cd7565b60015b611c41576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b03831660048201526024015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8114611c9d576040517faa1d49a400000000000000000000000000000000000000000000000000000000815260048101829052602401611c38565b610c5783836122cd565b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0080547ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01611d22576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60029055565b6040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b038281166004830152600060248301819052919084169063095ea7b3906044016020604051808303816000875af1158015611d94573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061194b9190612cb5565b6003546001600160a01b0390811690831603611eda576002546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152602481018390529083169063095ea7b3906044016020604051808303816000875af1158015611e3a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e5e9190612cb5565b506002546040517f743e0c9b000000000000000000000000000000000000000000000000000000008152600481018390526001600160a01b039091169063743e0c9b90602401600060405180830381600087803b158015611ebe57600080fd5b505af1158015611ed2573d6000803e3d6000fd5b505050505050565b600054610cac906001600160a01b03848116911683612149565b60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614611b76576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611f84612323565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011781557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25833611a88565b6003546001600160a01b039081169083160361212d576120206001600160a01b03831684308461237f565b6002546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152602481018390529083169063095ea7b3906044016020604051808303816000875af115801561208c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120b09190612cb5565b506002546040517f743e0c9b000000000000000000000000000000000000000000000000000000008152600481018390526001600160a01b039091169063743e0c9b90602401600060405180830381600087803b15801561211057600080fd5b505af1158015612124573d6000803e3d6000fd5b50505050505050565b600054610c57906001600160a01b03848116918691168461237f565b6040516001600160a01b03838116602483015260448201839052610c5791859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506123b8565b611b76612434565b6121cd612434565b611b7661249b565b6121dd612434565b611b766124a3565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408083206001600160a01b038516845290915290205460ff16610cac576040517fe2517d3f0000000000000000000000000000000000000000000000000000000081526001600160a01b038216600482015260248101839052604401611c38565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff16611b76576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6122d6826124f4565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a280511561231b57610c57828261259c565b610cac612612565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff1615611b76576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040516001600160a01b038481166024830152838116604483015260648201839052610a869186918216906323b872dd90608401612176565b60006123cd6001600160a01b0384168361264a565b905080516000141580156123f25750808060200190518101906123f09190612cb5565b155b15610c57576040517f5274afe70000000000000000000000000000000000000000000000000000000081526001600160a01b0384166004820152602401611c38565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff16611b76576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611ef4612434565b6124ab612434565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055565b806001600160a01b03163b600003612543576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b0382166004820152602401611c38565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6060600080846001600160a01b0316846040516125b99190612d00565b600060405180830381855af49150503d80600081146125f4576040519150601f19603f3d011682016040523d82523d6000602084013e6125f9565b606091505b5091509150612609858383612658565b95945050505050565b3415611b76576040517fb398979f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606061194b838360006126cd565b60608261266d5761266882612783565b61194b565b815115801561268457506001600160a01b0384163b155b156126c6576040517f9996b3150000000000000000000000000000000000000000000000000000000081526001600160a01b0385166004820152602401611c38565b508061194b565b60608147101561270b576040517fcd786059000000000000000000000000000000000000000000000000000000008152306004820152602401611c38565b600080856001600160a01b031684866040516127279190612d00565b60006040518083038185875af1925050503d8060008114612764576040519150601f19603f3d011682016040523d82523d6000602084013e612769565b606091505b5091509150612779868383612658565b9695505050505050565b8051156127935780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000602082840312156127d757600080fd5b81357fffffffff000000000000000000000000000000000000000000000000000000008116811461194b57600080fd5b80356001600160a01b038116811461281e57600080fd5b919050565b60006020828403121561283557600080fd5b61194b82612807565b60008083601f84011261285057600080fd5b50813567ffffffffffffffff81111561286857600080fd5b60208301915083602082850101111561288057600080fd5b9250929050565b60008060006040848603121561289c57600080fd5b6128a584612807565b9250602084013567ffffffffffffffff8111156128c157600080fd5b6128cd8682870161283e565b9497909650939450505050565b60005b838110156128f55781810151838201526020016128dd565b50506000910152565b600081518084526129168160208601602086016128da565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152600061194b60208301846128fe565b60006020828403121561296d57600080fd5b5035919050565b6000806040838503121561298757600080fd5b8235915061299760208401612807565b90509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080604083850312156129e257600080fd5b6129eb83612807565b9150602083013567ffffffffffffffff811115612a0757600080fd5b8301601f81018513612a1857600080fd5b803567ffffffffffffffff811115612a3257612a326129a0565b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8501160116810181811067ffffffffffffffff82111715612a9e57612a9e6129a0565b604052818152828201602001871015612ab657600080fd5b816020840160208301376000602083830101528093505050509250929050565b600080600080600060808688031215612aee57600080fd5b612af786612807565b9450612b0560208701612807565b935060408601359250606086013567ffffffffffffffff811115612b2857600080fd5b612b348882890161283e565b969995985093965092949392505050565b600080600080600060808688031215612b5d57600080fd5b612b6686612807565b945060208601359350612b7b60408701612807565b9250606086013567ffffffffffffffff811115612b2857600080fd5b600080600060608486031215612bac57600080fd5b612bb584612807565b9250612bc360208501612807565b9150612bd160408501612807565b90509250925092565b600080600060608486031215612bef57600080fd5b612bf884612807565b925060208401359150612bd160408501612807565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b602081526000612c6a602083018486612c0d565b949350505050565b838152604060208201526000612609604083018486612c0d565b8481526001600160a01b0384166020820152606060408201526000612779606083018486612c0d565b600060208284031215612cc757600080fd5b8151801515811461194b57600080fd5b600060208284031215612ce957600080fd5b5051919050565b8183823760009101908152919050565b60008251612d128184602087016128da565b919091019291505056fea2646970667358221220f5f94badcd1bd52ad12da244f7c4f330f2fb5d16305f04303cf08087abeff75664736f6c634300081a0033"; + "0x60a06040523060805234801561001457600080fd5b5061001d610022565b6100d4565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100725760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146100d15780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b608051612d526100fd60003960008181611ab101528181611ada0152611f250152612d526000f3fe6080604052600436106101e35760003560e01c80635c975abb11610102578063ae7a3a6f11610095578063dda79b7511610064578063dda79b751461062e578063e63ab1e91461064e578063f340fa0114610682578063f45346dc1461069557600080fd5b8063ae7a3a6f146105ae578063b8969bd4146105ce578063c0c53b8b146105ee578063d547741f1461060e57600080fd5b806391d14854116100d157806391d14854146104b7578063a217fddf1461051c578063a783c78914610531578063ad3cb1cc1461056557600080fd5b80635c975abb146104175780635d62c8601461044e5780638456cb59146104825780638c6f037f1461049757600080fd5b806335c018db1161017a5780635131ab59116101495780635131ab59146103a257806352d1902d146103c257806357bec62f146103d75780635b112591146103f757600080fd5b806335c018db1461034757806336568abe1461035a5780633f4ba83a1461037a5780634f1ef2861461038f57600080fd5b806321e093b1116101b657806321e093b11461027f578063248a9ca3146102b757806329c59b5d146103145780632f2ff15d1461032757600080fd5b806301ffc9a7146101e857806310188aef1461021d5780631b8b921d1461023f5780631cff79cd1461025f575b600080fd5b3480156101f457600080fd5b506102086102033660046127c5565b6106b5565b60405190151581526020015b60405180910390f35b34801561022957600080fd5b5061023d610238366004612823565b61074e565b005b34801561024b57600080fd5b5061023d61025a366004612887565b610842565b61027261026d366004612887565b610894565b6040516102149190612948565b34801561028b57600080fd5b5060035461029f906001600160a01b031681565b6040516001600160a01b039091168152602001610214565b3480156102c357600080fd5b506103066102d236600461295b565b60009081527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052604090206001015490565b604051908152602001610214565b61023d610322366004612887565b61091d565b34801561033357600080fd5b5061023d610342366004612974565b610a42565b61023d610355366004612887565b610a8c565b34801561036657600080fd5b5061023d610375366004612974565b610c0b565b34801561038657600080fd5b5061023d610c5c565b61023d61039d3660046129cf565b610c91565b3480156103ae57600080fd5b5061023d6103bd366004612ad6565b610cb0565b3480156103ce57600080fd5b50610306610f85565b3480156103e357600080fd5b5060025461029f906001600160a01b031681565b34801561040357600080fd5b5060015461029f906001600160a01b031681565b34801561042357600080fd5b507fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff16610208565b34801561045a57600080fd5b506103067f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b981565b34801561048e57600080fd5b5061023d610fb4565b3480156104a357600080fd5b5061023d6104b2366004612b45565b610fe6565b3480156104c357600080fd5b506102086104d2366004612974565b60009182527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408084206001600160a01b0393909316845291905290205460ff1690565b34801561052857600080fd5b50610306600081565b34801561053d57600080fd5b506103067f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb81565b34801561057157600080fd5b506102726040518060400160405280600581526020017f352e302e3000000000000000000000000000000000000000000000000000000081525081565b3480156105ba57600080fd5b5061023d6105c9366004612823565b611083565b3480156105da57600080fd5b5061023d6105e9366004612ad6565b611177565b3480156105fa57600080fd5b5061023d610609366004612b97565b6112e9565b34801561061a57600080fd5b5061023d610629366004612974565b61159e565b34801561063a57600080fd5b5060005461029f906001600160a01b031681565b34801561065a57600080fd5b506103067f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b61023d610690366004612823565b6115e2565b3480156106a157600080fd5b5061023d6106b0366004612bda565b611707565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061074857507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b6000610759816117b2565b6002546001600160a01b03161561079c576040517fb337f37800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b0382166107dc576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6108067f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b9836117bc565b5050600280547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b826001600160a01b0316336001600160a01b03167f2a21062ee9199c2e205622999eeb7c3da73153674f36a0acd3f74fa6af67bde38484604051610887929190612c56565b60405180910390a3505050565b60607f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb6108c0816117b2565b60006108cd8686866118a9565b9050856001600160a01b03167f373df382b9c587826f3de13f16d67f8d99f28ee947fc0924c6ef2d6d2c7e854634878760405161090c93929190612c72565b60405180910390a295945050505050565b34600003610957576040517f7671265e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546040516000916001600160a01b03169034908381818185875af1925050503d80600081146109a4576040519150601f19603f3d011682016040523d82523d6000602084013e6109a9565b606091505b50909150508015156000036109ea576040517f79cacff100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b836001600160a01b0316336001600160a01b03167f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a43460008787604051610a349493929190612c8c565b60405180910390a350505050565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020526040902060010154610a7c816117b2565b610a8683836117bc565b50505050565b7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb610ab6816117b2565b600080856001600160a01b03163460405160006040518083038185875af1925050503d8060008114610b04576040519150601f19603f3d011682016040523d82523d6000602084013e610b09565b606091505b509150915081610b45576040517facfdb44400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f8fcaa0b50000000000000000000000000000000000000000000000000000000081526001600160a01b03871690638fcaa0b590610b8c9088908890600401612c56565b600060405180830381600087803b158015610ba657600080fd5b505af1158015610bba573d6000803e3d6000fd5b50505050856001600160a01b03167fd5d7616b1678354a0dea9d7e57e6a090bff5babe9f8d6381fdbad16e89ba311c348787604051610bfb93929190612c72565b60405180910390a2505050505050565b6001600160a01b0381163314610c4d576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610c578282611952565b505050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610c86816117b2565b610c8e611a16565b50565b610c99611aa6565b610ca282611b78565b610cac8282611b83565b5050565b610cb8611ca7565b7f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b9610ce2816117b2565b83600003610d1c576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610d268686611d28565b610d5c576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b0386811660048301526024820186905287169063095ea7b3906044016020604051808303816000875af1158015610dc4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610de89190612cb5565b610e1e576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610e2b8685856118a9565b9050610e378787611d28565b610e6d576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201526000906001600160a01b038916906370a0823190602401602060405180830381865afa158015610ecd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ef19190612cd7565b90508015610f0357610f038882611db8565b866001600160a01b0316886001600160a01b03167f29c40793bffd84cb810179f15d1ceec72bc7f0785514c668ba36645cf99b7382888888604051610f4a93929190612c72565b60405180910390a3505050610f7e60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b5050505050565b6000610f8f611f1a565b507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc90565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610fde816117b2565b610c8e611f7c565b83600003611020576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61102b338486611ff5565b846001600160a01b0316336001600160a01b03167f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a4868686866040516110749493929190612c8c565b60405180910390a35050505050565b600061108e816117b2565b6000546001600160a01b0316156110d1576040517fb337f37800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038216611111576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61113b7f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b9836117bc565b5050600080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b61117f611ca7565b7f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b96111a9816117b2565b836000036111e3576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6111f76001600160a01b0387168686612149565b6040517f8fcaa0b50000000000000000000000000000000000000000000000000000000081526001600160a01b03861690638fcaa0b59061123e9086908690600401612c56565b600060405180830381600087803b15801561125857600080fd5b505af115801561126c573d6000803e3d6000fd5b50505050846001600160a01b0316866001600160a01b03167f723fc7be2448075379e4fdf1e6bf5fead954d2668d2da05dcb44ccfec4beeda78686866040516112b793929190612c72565b60405180910390a350610f7e60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156113345750825b905060008267ffffffffffffffff1660011480156113515750303b155b90508115801561135f575080155b15611396576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84547fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000016600117855583156113f75784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff16680100000000000000001785555b6001600160a01b038816158061141457506001600160a01b038716155b1561144b576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6114536121bd565b61145b6121c5565b6114636121bd565b61146b6121d5565b6114766000876117bc565b506114a17f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a876117bc565b50600180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b038a161790556114ff7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb896117bc565b50600380547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03891617905583156115945784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b5050505050505050565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b62680060205260409020600101546115d8816117b2565b610a868383611952565b3460000361161c576040517f7671265e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546040516000916001600160a01b03169034908381818185875af1925050503d8060008114611669576040519150601f19603f3d011682016040523d82523d6000602084013e61166e565b606091505b50909150508015156000036116af576040517f79cacff100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60408051348152600060208201819052606082840181905282015290516001600160a01b0384169133917f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a49181900360800190a35050565b81600003611741576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61174c338284611ff5565b826001600160a01b0316336001600160a01b03167f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a484846040516108879291909182526001600160a01b0316602082015260606040820181905260009082015260800190565b610c8e81336121e5565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff1661189f576000848152602082815260408083206001600160a01b0387168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790556118553390565b6001600160a01b0316836001600160a01b0316857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a46001915050610748565b6000915050610748565b6060600080856001600160a01b03163486866040516118c9929190612cf0565b60006040518083038185875af1925050503d8060008114611906576040519150601f19603f3d011682016040523d82523d6000602084013e61190b565b606091505b509150915081611947576040517facfdb44400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b9150505b9392505050565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff161561189f576000848152602082815260408083206001600160a01b038716808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339287917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a46001915050610748565b611a1e612272565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001681557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a150565b306001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161480611b3f57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316611b337f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b6001600160a01b031614155b15611b76576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6000610cac816117b2565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015611bfb575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252611bf891810190612cd7565b60015b611c41576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b03831660048201526024015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8114611c9d576040517faa1d49a400000000000000000000000000000000000000000000000000000000815260048101829052602401611c38565b610c5783836122cd565b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0080547ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01611d22576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60029055565b6040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b038281166004830152600060248301819052919084169063095ea7b3906044016020604051808303816000875af1158015611d94573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061194b9190612cb5565b6003546001600160a01b0390811690831603611eda576002546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152602481018390529083169063095ea7b3906044016020604051808303816000875af1158015611e3a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e5e9190612cb5565b506002546040517f743e0c9b000000000000000000000000000000000000000000000000000000008152600481018390526001600160a01b039091169063743e0c9b90602401600060405180830381600087803b158015611ebe57600080fd5b505af1158015611ed2573d6000803e3d6000fd5b505050505050565b600054610cac906001600160a01b03848116911683612149565b60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614611b76576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611f84612323565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011781557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25833611a88565b6003546001600160a01b039081169083160361212d576120206001600160a01b03831684308461237f565b6002546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152602481018390529083169063095ea7b3906044016020604051808303816000875af115801561208c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120b09190612cb5565b506002546040517f743e0c9b000000000000000000000000000000000000000000000000000000008152600481018390526001600160a01b039091169063743e0c9b90602401600060405180830381600087803b15801561211057600080fd5b505af1158015612124573d6000803e3d6000fd5b50505050505050565b600054610c57906001600160a01b03848116918691168461237f565b6040516001600160a01b03838116602483015260448201839052610c5791859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506123b8565b611b76612434565b6121cd612434565b611b7661249b565b6121dd612434565b611b766124a3565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408083206001600160a01b038516845290915290205460ff16610cac576040517fe2517d3f0000000000000000000000000000000000000000000000000000000081526001600160a01b038216600482015260248101839052604401611c38565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff16611b76576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6122d6826124f4565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a280511561231b57610c57828261259c565b610cac612612565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff1615611b76576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040516001600160a01b038481166024830152838116604483015260648201839052610a869186918216906323b872dd90608401612176565b60006123cd6001600160a01b0384168361264a565b905080516000141580156123f25750808060200190518101906123f09190612cb5565b155b15610c57576040517f5274afe70000000000000000000000000000000000000000000000000000000081526001600160a01b0384166004820152602401611c38565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff16611b76576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611ef4612434565b6124ab612434565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055565b806001600160a01b03163b600003612543576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b0382166004820152602401611c38565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6060600080846001600160a01b0316846040516125b99190612d00565b600060405180830381855af49150503d80600081146125f4576040519150601f19603f3d011682016040523d82523d6000602084013e6125f9565b606091505b5091509150612609858383612658565b95945050505050565b3415611b76576040517fb398979f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606061194b838360006126cd565b60608261266d5761266882612783565b61194b565b815115801561268457506001600160a01b0384163b155b156126c6576040517f9996b3150000000000000000000000000000000000000000000000000000000081526001600160a01b0385166004820152602401611c38565b508061194b565b60608147101561270b576040517fcd786059000000000000000000000000000000000000000000000000000000008152306004820152602401611c38565b600080856001600160a01b031684866040516127279190612d00565b60006040518083038185875af1925050503d8060008114612764576040519150601f19603f3d011682016040523d82523d6000602084013e612769565b606091505b5091509150612779868383612658565b9695505050505050565b8051156127935780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000602082840312156127d757600080fd5b81357fffffffff000000000000000000000000000000000000000000000000000000008116811461194b57600080fd5b80356001600160a01b038116811461281e57600080fd5b919050565b60006020828403121561283557600080fd5b61194b82612807565b60008083601f84011261285057600080fd5b50813567ffffffffffffffff81111561286857600080fd5b60208301915083602082850101111561288057600080fd5b9250929050565b60008060006040848603121561289c57600080fd5b6128a584612807565b9250602084013567ffffffffffffffff8111156128c157600080fd5b6128cd8682870161283e565b9497909650939450505050565b60005b838110156128f55781810151838201526020016128dd565b50506000910152565b600081518084526129168160208601602086016128da565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152600061194b60208301846128fe565b60006020828403121561296d57600080fd5b5035919050565b6000806040838503121561298757600080fd5b8235915061299760208401612807565b90509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080604083850312156129e257600080fd5b6129eb83612807565b9150602083013567ffffffffffffffff811115612a0757600080fd5b8301601f81018513612a1857600080fd5b803567ffffffffffffffff811115612a3257612a326129a0565b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8501160116810181811067ffffffffffffffff82111715612a9e57612a9e6129a0565b604052818152828201602001871015612ab657600080fd5b816020840160208301376000602083830101528093505050509250929050565b600080600080600060808688031215612aee57600080fd5b612af786612807565b9450612b0560208701612807565b935060408601359250606086013567ffffffffffffffff811115612b2857600080fd5b612b348882890161283e565b969995985093965092949392505050565b600080600080600060808688031215612b5d57600080fd5b612b6686612807565b945060208601359350612b7b60408701612807565b9250606086013567ffffffffffffffff811115612b2857600080fd5b600080600060608486031215612bac57600080fd5b612bb584612807565b9250612bc360208501612807565b9150612bd160408501612807565b90509250925092565b600080600060608486031215612bef57600080fd5b612bf884612807565b925060208401359150612bd160408501612807565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b602081526000612c6a602083018486612c0d565b949350505050565b838152604060208201526000612609604083018486612c0d565b8481526001600160a01b0384166020820152606060408201526000612779606083018486612c0d565b600060208284031215612cc757600080fd5b8151801515811461194b57600080fd5b600060208284031215612ce957600080fd5b5051919050565b8183823760009101908152919050565b60008251612d128184602087016128da565b919091019291505056fea2646970667358221220a2cc45e19abbbfe5e651a45b4ddc5a5ada7e94e7b4482a57a5011f556e05ea7a64736f6c634300081a0033"; type GatewayEVMUpgradeTestConstructorParams = | [signer?: Signer] diff --git a/v2/typechain-types/factories/GatewayEVM__factory.ts b/v2/typechain-types/factories/GatewayEVM__factory.ts index 126f8c5e..6d5d7702 100644 --- a/v2/typechain-types/factories/GatewayEVM__factory.ts +++ b/v2/typechain-types/factories/GatewayEVM__factory.ts @@ -904,6 +904,11 @@ const _abi = [ name: "ApprovalFailed", inputs: [], }, + { + type: "error", + name: "ConnectorInitialized", + inputs: [], + }, { type: "error", name: "CustodyInitialized", @@ -1010,7 +1015,7 @@ const _abi = [ ] as const; const _bytecode = - "0x60a06040523060805234801561001457600080fd5b5061001d610022565b6100d4565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100725760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146100d15780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b608051612f486100fd60003960008181611d4a01528181611d7301526121420152612f486000f3fe6080604052600436106101e35760003560e01c80635c975abb11610102578063ae7a3a6f11610095578063dda79b7511610064578063dda79b751461062e578063e63ab1e91461064e578063f340fa0114610682578063f45346dc1461069557600080fd5b8063ae7a3a6f146105ae578063b8969bd4146105ce578063c0c53b8b146105ee578063d547741f1461060e57600080fd5b806391d14854116100d157806391d14854146104b7578063a217fddf1461051c578063a783c78914610531578063ad3cb1cc1461056557600080fd5b80635c975abb146104175780635d62c8601461044e5780638456cb59146104825780638c6f037f1461049757600080fd5b806335c018db1161017a5780635131ab59116101495780635131ab59146103a257806352d1902d146103c257806357bec62f146103d75780635b112591146103f757600080fd5b806335c018db1461034757806336568abe1461035a5780633f4ba83a1461037a5780634f1ef2861461038f57600080fd5b806321e093b1116101b657806321e093b11461027f578063248a9ca3146102b757806329c59b5d146103145780632f2ff15d1461032757600080fd5b806301ffc9a7146101e857806310188aef1461021d5780631b8b921d1461023f5780631cff79cd1461025f575b600080fd5b3480156101f457600080fd5b506102086102033660046129bb565b6106b5565b60405190151581526020015b60405180910390f35b34801561022957600080fd5b5061023d610238366004612a19565b61074e565b005b34801561024b57600080fd5b5061023d61025a366004612a7d565b610842565b61027261026d366004612a7d565b6108cd565b6040516102149190612b3e565b34801561028b57600080fd5b5060035461029f906001600160a01b031681565b6040516001600160a01b039091168152602001610214565b3480156102c357600080fd5b506103066102d2366004612b51565b60009081527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052604090206001015490565b604051908152602001610214565b61023d610322366004612a7d565b610990565b34801561033357600080fd5b5061023d610342366004612b6a565b610ae3565b61023d610355366004612a7d565b610b2d565b34801561036657600080fd5b5061023d610375366004612b6a565b610d1c565b34801561038657600080fd5b5061023d610d68565b61023d61039d366004612bc5565b610d9d565b3480156103ae57600080fd5b5061023d6103bd366004612ccc565b610dbc565b3480156103ce57600080fd5b50610306611099565b3480156103e357600080fd5b5060025461029f906001600160a01b031681565b34801561040357600080fd5b5060015461029f906001600160a01b031681565b34801561042357600080fd5b507fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff16610208565b34801561045a57600080fd5b506103067f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b981565b34801561048e57600080fd5b5061023d6110c8565b3480156104a357600080fd5b5061023d6104b2366004612d3b565b6110fa565b3480156104c357600080fd5b506102086104d2366004612b6a565b60009182527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408084206001600160a01b0393909316845291905290205460ff1690565b34801561052857600080fd5b50610306600081565b34801561053d57600080fd5b506103067f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb81565b34801561057157600080fd5b506102726040518060400160405280600581526020017f352e302e3000000000000000000000000000000000000000000000000000000081525081565b3480156105ba57600080fd5b5061023d6105c9366004612a19565b6111d0565b3480156105da57600080fd5b5061023d6105e9366004612ccc565b6112c4565b3480156105fa57600080fd5b5061023d610609366004612d8d565b61143d565b34801561061a57600080fd5b5061023d610629366004612b6a565b6116f2565b34801561063a57600080fd5b5060005461029f906001600160a01b031681565b34801561065a57600080fd5b506103067f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b61023d610690366004612a19565b611736565b3480156106a157600080fd5b5061023d6106b0366004612dd0565b61188b565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061074857507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b600061075981611946565b6002546001600160a01b03161561079c576040517fb337f37800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b0382166107dc576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6108067f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b983611950565b5050600280547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b61084a611a3d565b610852611a9b565b826001600160a01b0316336001600160a01b03167f2a21062ee9199c2e205622999eeb7c3da73153674f36a0acd3f74fa6af67bde38484604051610897929190612e4c565b60405180910390a36108c860017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b505050565b60607f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb6108f981611946565b610901611a3d565b610909611a9b565b6000610916868686611b42565b9050856001600160a01b03167fcaf938de11c367272220bfd1d2baa99ca46665e7bc4d85f00adb51b90fe1fa9f34878760405161095593929190612e68565b60405180910390a2915061098860017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b509392505050565b610998611a3d565b6109a0611a9b565b346000036109da576040517f7671265e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546040516000916001600160a01b03169034908381818185875af1925050503d8060008114610a27576040519150601f19603f3d011682016040523d82523d6000602084013e610a2c565b606091505b5050905080610a67576040517f79cacff100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b836001600160a01b0316336001600160a01b03167f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a43460008787604051610ab19493929190612e82565b60405180910390a3506108c860017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020526040902060010154610b1d81611946565b610b278383611950565b50505050565b7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb610b5781611946565b610b5f611a3d565b610b67611a9b565b6001600160a01b038416610ba7576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000846001600160a01b03163460405160006040518083038185875af1925050503d8060008114610bf4576040519150601f19603f3d011682016040523d82523d6000602084013e610bf9565b606091505b5050905080610c34576040517facfdb44400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f8fcaa0b50000000000000000000000000000000000000000000000000000000081526001600160a01b03861690638fcaa0b590610c7b9087908790600401612e4c565b600060405180830381600087803b158015610c9557600080fd5b505af1158015610ca9573d6000803e3d6000fd5b50505050846001600160a01b03167fd5d7616b1678354a0dea9d7e57e6a090bff5babe9f8d6381fdbad16e89ba311c348686604051610cea93929190612e68565b60405180910390a250610b2760017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b6001600160a01b0381163314610d5e576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6108c88282611beb565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610d9281611946565b610d9a611caf565b50565b610da5611d3f565b610dae82611e0f565b610db88282611e1a565b5050565b7f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b9610de681611946565b610dee611a3d565b610df6611a9b565b83600003610e30576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610e3a8686611f3e565b610e70576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b0386811660048301526024820186905287169063095ea7b3906044016020604051808303816000875af1158015610ed8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610efc9190612eab565b610f32576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610f3f868585611b42565b9050610f4b8787611f3e565b610f81576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201526000906001600160a01b038916906370a0823190602401602060405180830381865afa158015610fe1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110059190612ecd565b90508015611017576110178882611fce565b866001600160a01b0316886001600160a01b03167f29c40793bffd84cb810179f15d1ceec72bc7f0785514c668ba36645cf99b738288888860405161105e93929190612e68565b60405180910390a3505061109160017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b505050505050565b60006110a3612137565b507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc90565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a6110f281611946565b610d9a612199565b611102611a3d565b61110a611a9b565b83600003611144576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61114f338486612212565b846001600160a01b0316336001600160a01b03167f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a4868686866040516111989493929190612e82565b60405180910390a36111c960017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b5050505050565b60006111db81611946565b6000546001600160a01b03161561121e576040517fb337f37800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03821661125e576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6112887f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b983611950565b5050600080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b7f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b96112ee81611946565b6112f6611a3d565b6112fe611a9b565b83600003611338576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61134c6001600160a01b038716868661239b565b6040517f8fcaa0b50000000000000000000000000000000000000000000000000000000081526001600160a01b03861690638fcaa0b5906113939086908690600401612e4c565b600060405180830381600087803b1580156113ad57600080fd5b505af11580156113c1573d6000803e3d6000fd5b50505050846001600160a01b0316866001600160a01b03167f723fc7be2448075379e4fdf1e6bf5fead954d2668d2da05dcb44ccfec4beeda786868660405161140c93929190612e68565b60405180910390a361109160017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156114885750825b905060008267ffffffffffffffff1660011480156114a55750303b155b9050811580156114b3575080155b156114ea576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84547fffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000166001178555831561154b5784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff16680100000000000000001785555b6001600160a01b038816158061156857506001600160a01b038716155b1561159f576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6115a761240f565b6115af612417565b6115b761240f565b6115bf612427565b6115ca600087611950565b506115f57f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a87611950565b50600180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b038a161790556116537f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb89611950565b50600380547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03891617905583156116e85784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b5050505050505050565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052604090206001015461172c81611946565b610b278383611beb565b61173e611a3d565b611746611a9b565b34600003611780576040517f7671265e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546040516000916001600160a01b03169034908381818185875af1925050503d80600081146117cd576040519150601f19603f3d011682016040523d82523d6000602084013e6117d2565b606091505b505090508061180d576040517f79cacff100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60408051348152600060208201819052606082840181905282015290516001600160a01b0384169133917f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a49181900360800190a350610d9a60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b611893611a3d565b61189b611a9b565b816000036118d5576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6118e0338284612212565b826001600160a01b0316336001600160a01b03167f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a484846040516108979291909182526001600160a01b0316602082015260606040820181905260009082015260800190565b610d9a8133612437565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff16611a33576000848152602082815260408083206001600160a01b0387168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790556119e93390565b6001600160a01b0316836001600160a01b0316857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a46001915050610748565b6000915050610748565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff1615611a99576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0080547ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01611b16576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60029055565b60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b6060600080856001600160a01b0316348686604051611b62929190612ee6565b60006040518083038185875af1925050503d8060008114611b9f576040519150601f19603f3d011682016040523d82523d6000602084013e611ba4565b606091505b509150915081611be0576040517facfdb44400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b9150505b9392505050565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff1615611a33576000848152602082815260408083206001600160a01b038716808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339287917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a46001915050610748565b611cb76124c4565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001681557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a150565b306001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161480611dd857507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316611dcc7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b6001600160a01b031614155b15611a99576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610db881611946565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015611e92575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252611e8f91810190612ecd565b60015b611ed8576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b03831660048201526024015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8114611f34576040517faa1d49a400000000000000000000000000000000000000000000000000000000815260048101829052602401611ecf565b6108c8838361251f565b6040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b038281166004830152600060248301819052919084169063095ea7b3906044016020604051808303816000875af1158015611faa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611be49190612eab565b6003546001600160a01b039081169083160361211d576002546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152602481018390529083169063095ea7b3906044016020604051808303816000875af1158015612050573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120749190612eab565b6120aa576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002546040517f743e0c9b000000000000000000000000000000000000000000000000000000008152600481018390526001600160a01b039091169063743e0c9b90602401600060405180830381600087803b15801561210957600080fd5b505af1158015611091573d6000803e3d6000fd5b600054610db8906001600160a01b0384811691168361239b565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614611a99576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6121a1611a3d565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011781557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25833611d21565b6003546001600160a01b039081169083160361237f5761223d6001600160a01b038316843084612575565b6002546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152602481018390529083169063095ea7b3906044016020604051808303816000875af11580156122a9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122cd9190612eab565b612303576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002546040517f743e0c9b000000000000000000000000000000000000000000000000000000008152600481018390526001600160a01b039091169063743e0c9b90602401600060405180830381600087803b15801561236257600080fd5b505af1158015612376573d6000803e3d6000fd5b50505050505050565b6000546108c8906001600160a01b038481169186911684612575565b6040516001600160a01b038381166024830152604482018390526108c891859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506125ae565b611a9961262a565b61241f61262a565b611a99612691565b61242f61262a565b611a99612699565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408083206001600160a01b038516845290915290205460ff16610db8576040517fe2517d3f0000000000000000000000000000000000000000000000000000000081526001600160a01b038216600482015260248101839052604401611ecf565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff16611a99576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612528826126ea565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a280511561256d576108c88282612792565b610db8612808565b6040516001600160a01b038481166024830152838116604483015260648201839052610b279186918216906323b872dd906084016123c8565b60006125c36001600160a01b03841683612840565b905080516000141580156125e85750808060200190518101906125e69190612eab565b155b156108c8576040517f5274afe70000000000000000000000000000000000000000000000000000000081526001600160a01b0384166004820152602401611ecf565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff16611a99576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611b1c61262a565b6126a161262a565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055565b806001600160a01b03163b600003612739576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b0382166004820152602401611ecf565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6060600080846001600160a01b0316846040516127af9190612ef6565b600060405180830381855af49150503d80600081146127ea576040519150601f19603f3d011682016040523d82523d6000602084013e6127ef565b606091505b50915091506127ff85838361284e565b95945050505050565b3415611a99576040517fb398979f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6060611be4838360006128c3565b6060826128635761285e82612979565b611be4565b815115801561287a57506001600160a01b0384163b155b156128bc576040517f9996b3150000000000000000000000000000000000000000000000000000000081526001600160a01b0385166004820152602401611ecf565b5080611be4565b606081471015612901576040517fcd786059000000000000000000000000000000000000000000000000000000008152306004820152602401611ecf565b600080856001600160a01b0316848660405161291d9190612ef6565b60006040518083038185875af1925050503d806000811461295a576040519150601f19603f3d011682016040523d82523d6000602084013e61295f565b606091505b509150915061296f86838361284e565b9695505050505050565b8051156129895780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000602082840312156129cd57600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114611be457600080fd5b80356001600160a01b0381168114612a1457600080fd5b919050565b600060208284031215612a2b57600080fd5b611be4826129fd565b60008083601f840112612a4657600080fd5b50813567ffffffffffffffff811115612a5e57600080fd5b602083019150836020828501011115612a7657600080fd5b9250929050565b600080600060408486031215612a9257600080fd5b612a9b846129fd565b9250602084013567ffffffffffffffff811115612ab757600080fd5b612ac386828701612a34565b9497909650939450505050565b60005b83811015612aeb578181015183820152602001612ad3565b50506000910152565b60008151808452612b0c816020860160208601612ad0565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000611be46020830184612af4565b600060208284031215612b6357600080fd5b5035919050565b60008060408385031215612b7d57600080fd5b82359150612b8d602084016129fd565b90509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60008060408385031215612bd857600080fd5b612be1836129fd565b9150602083013567ffffffffffffffff811115612bfd57600080fd5b8301601f81018513612c0e57600080fd5b803567ffffffffffffffff811115612c2857612c28612b96565b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8501160116810181811067ffffffffffffffff82111715612c9457612c94612b96565b604052818152828201602001871015612cac57600080fd5b816020840160208301376000602083830101528093505050509250929050565b600080600080600060808688031215612ce457600080fd5b612ced866129fd565b9450612cfb602087016129fd565b935060408601359250606086013567ffffffffffffffff811115612d1e57600080fd5b612d2a88828901612a34565b969995985093965092949392505050565b600080600080600060808688031215612d5357600080fd5b612d5c866129fd565b945060208601359350612d71604087016129fd565b9250606086013567ffffffffffffffff811115612d1e57600080fd5b600080600060608486031215612da257600080fd5b612dab846129fd565b9250612db9602085016129fd565b9150612dc7604085016129fd565b90509250925092565b600080600060608486031215612de557600080fd5b612dee846129fd565b925060208401359150612dc7604085016129fd565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b602081526000612e60602083018486612e03565b949350505050565b8381526040602082015260006127ff604083018486612e03565b8481526001600160a01b038416602082015260606040820152600061296f606083018486612e03565b600060208284031215612ebd57600080fd5b81518015158114611be457600080fd5b600060208284031215612edf57600080fd5b5051919050565b8183823760009101908152919050565b60008251612f08818460208701612ad0565b919091019291505056fea26469706673582212208889b449de125bcd9995c2452115e4c4e941948f5ff17d068f0677c925a7730064736f6c634300081a0033"; + "0x60a06040523060805234801561001457600080fd5b5061001d610022565b6100d4565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100725760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146100d15780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b6080516131046100fd60003960008181611f0601528181611f2f01526122fe01526131046000f3fe6080604052600436106101e35760003560e01c80635c975abb11610102578063ae7a3a6f11610095578063dda79b7511610064578063dda79b751461062e578063e63ab1e91461064e578063f340fa0114610682578063f45346dc1461069557600080fd5b8063ae7a3a6f146105ae578063b8969bd4146105ce578063c0c53b8b146105ee578063d547741f1461060e57600080fd5b806391d14854116100d157806391d14854146104b7578063a217fddf1461051c578063a783c78914610531578063ad3cb1cc1461056557600080fd5b80635c975abb146104175780635d62c8601461044e5780638456cb59146104825780638c6f037f1461049757600080fd5b806335c018db1161017a5780635131ab59116101495780635131ab59146103a257806352d1902d146103c257806357bec62f146103d75780635b112591146103f757600080fd5b806335c018db1461034757806336568abe1461035a5780633f4ba83a1461037a5780634f1ef2861461038f57600080fd5b806321e093b1116101b657806321e093b11461027f578063248a9ca3146102b757806329c59b5d146103145780632f2ff15d1461032757600080fd5b806301ffc9a7146101e857806310188aef1461021d5780631b8b921d1461023f5780631cff79cd1461025f575b600080fd5b3480156101f457600080fd5b50610208610203366004612b77565b6106b5565b60405190151581526020015b60405180910390f35b34801561022957600080fd5b5061023d610238366004612bd5565b61074e565b005b34801561024b57600080fd5b5061023d61025a366004612c39565b610842565b61027261026d366004612c39565b6108cd565b6040516102149190612cfa565b34801561028b57600080fd5b5060035461029f906001600160a01b031681565b6040516001600160a01b039091168152602001610214565b3480156102c357600080fd5b506103066102d2366004612d0d565b60009081527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052604090206001015490565b604051908152602001610214565b61023d610322366004612c39565b6109d0565b34801561033357600080fd5b5061023d610342366004612d26565b610b63565b61023d610355366004612c39565b610bad565b34801561036657600080fd5b5061023d610375366004612d26565b610d9c565b34801561038657600080fd5b5061023d610de8565b61023d61039d366004612d81565b610e1d565b3480156103ae57600080fd5b5061023d6103bd366004612e88565b610e3c565b3480156103ce57600080fd5b50610306611155565b3480156103e357600080fd5b5060025461029f906001600160a01b031681565b34801561040357600080fd5b5060015461029f906001600160a01b031681565b34801561042357600080fd5b507fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff16610208565b34801561045a57600080fd5b506103067f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b981565b34801561048e57600080fd5b5061023d611184565b3480156104a357600080fd5b5061023d6104b2366004612ef7565b6111b6565b3480156104c357600080fd5b506102086104d2366004612d26565b60009182527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408084206001600160a01b0393909316845291905290205460ff1690565b34801561052857600080fd5b50610306600081565b34801561053d57600080fd5b506103067f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb81565b34801561057157600080fd5b506102726040518060400160405280600581526020017f352e302e3000000000000000000000000000000000000000000000000000000081525081565b3480156105ba57600080fd5b5061023d6105c9366004612bd5565b6112cc565b3480156105da57600080fd5b5061023d6105e9366004612e88565b6113c0565b3480156105fa57600080fd5b5061023d610609366004612f49565b611579565b34801561061a57600080fd5b5061023d610629366004612d26565b61182e565b34801561063a57600080fd5b5060005461029f906001600160a01b031681565b34801561065a57600080fd5b506103067f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b61023d610690366004612bd5565b611872565b3480156106a157600080fd5b5061023d6106b0366004612f8c565b611a07565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061074857507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b600061075981611b02565b6001600160a01b038216610799576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002546001600160a01b0316156107dc576040517f0c8dc01600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6108067f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b983611b0c565b5050600280547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b61084a611bf9565b610852611c57565b826001600160a01b0316336001600160a01b03167f2a21062ee9199c2e205622999eeb7c3da73153674f36a0acd3f74fa6af67bde38484604051610897929190613008565b60405180910390a36108c860017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b505050565b60607f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb6108f981611b02565b610901611bf9565b610909611c57565b6001600160a01b038516610949576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610956868686611cfe565b9050856001600160a01b03167fcaf938de11c367272220bfd1d2baa99ca46665e7bc4d85f00adb51b90fe1fa9f34878760405161099593929190613024565b60405180910390a291506109c860017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b509392505050565b6109d8611bf9565b6109e0611c57565b34600003610a1a576040517f7671265e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038316610a5a576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546040516000916001600160a01b03169034908381818185875af1925050503d8060008114610aa7576040519150601f19603f3d011682016040523d82523d6000602084013e610aac565b606091505b5050905080610ae7576040517f79cacff100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b836001600160a01b0316336001600160a01b03167f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a43460008787604051610b31949392919061303e565b60405180910390a3506108c860017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020526040902060010154610b9d81611b02565b610ba78383611b0c565b50505050565b7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb610bd781611b02565b610bdf611bf9565b610be7611c57565b6001600160a01b038416610c27576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000846001600160a01b03163460405160006040518083038185875af1925050503d8060008114610c74576040519150601f19603f3d011682016040523d82523d6000602084013e610c79565b606091505b5050905080610cb4576040517facfdb44400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f8fcaa0b50000000000000000000000000000000000000000000000000000000081526001600160a01b03861690638fcaa0b590610cfb9087908790600401613008565b600060405180830381600087803b158015610d1557600080fd5b505af1158015610d29573d6000803e3d6000fd5b50505050846001600160a01b03167fd5d7616b1678354a0dea9d7e57e6a090bff5babe9f8d6381fdbad16e89ba311c348686604051610d6a93929190613024565b60405180910390a250610ba760017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b6001600160a01b0381163314610dde576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6108c88282611da7565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610e1281611b02565b610e1a611e6b565b50565b610e25611efb565b610e2e82611fcb565b610e388282611fd6565b5050565b7f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b9610e6681611b02565b610e6e611bf9565b610e76611c57565b83600003610eb0576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038516610ef0576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610efa86866120fa565b610f30576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b0386811660048301526024820186905287169063095ea7b3906044016020604051808303816000875af1158015610f98573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fbc9190613067565b610ff2576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610ffd858484611cfe565b5061100886866120fa565b61103e576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201526000906001600160a01b038816906370a0823190602401602060405180830381865afa15801561109e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110c29190613089565b905080156110d4576110d4878261218a565b856001600160a01b0316876001600160a01b03167f29c40793bffd84cb810179f15d1ceec72bc7f0785514c668ba36645cf99b738287878760405161111b93929190613024565b60405180910390a35061114d60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b505050505050565b600061115f6122f3565b507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc90565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a6111ae81611b02565b610e1a612355565b6111be611bf9565b6111c6611c57565b83600003611200576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038516611240576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61124b3384866123ce565b846001600160a01b0316336001600160a01b03167f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a486868686604051611294949392919061303e565b60405180910390a36112c560017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b5050505050565b60006112d781611b02565b6001600160a01b038216611317576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000546001600160a01b03161561135a576040517fb337f37800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6113847f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b983611b0c565b5050600080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b7f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b96113ea81611b02565b6113f2611bf9565b6113fa611c57565b83600003611434576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038516611474576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6114886001600160a01b0387168686612557565b6040517f8fcaa0b50000000000000000000000000000000000000000000000000000000081526001600160a01b03861690638fcaa0b5906114cf9086908690600401613008565b600060405180830381600087803b1580156114e957600080fd5b505af11580156114fd573d6000803e3d6000fd5b50505050846001600160a01b0316866001600160a01b03167f723fc7be2448075379e4fdf1e6bf5fead954d2668d2da05dcb44ccfec4beeda786868660405161154893929190613024565b60405180910390a361114d60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156115c45750825b905060008267ffffffffffffffff1660011480156115e15750303b155b9050811580156115ef575080155b15611626576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84547fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000016600117855583156116875784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff16680100000000000000001785555b6001600160a01b03881615806116a457506001600160a01b038716155b156116db576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6116e36125cb565b6116eb6125d3565b6116f36125cb565b6116fb6125e3565b611706600087611b0c565b506117317f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a87611b0c565b50600180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b038a1617905561178f7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb89611b0c565b50600380547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03891617905583156118245784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b5050505050505050565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052604090206001015461186881611b02565b610ba78383611da7565b61187a611bf9565b611882611c57565b346000036118bc576040517f7671265e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b0381166118fc576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546040516000916001600160a01b03169034908381818185875af1925050503d8060008114611949576040519150601f19603f3d011682016040523d82523d6000602084013e61194e565b606091505b5050905080611989576040517f79cacff100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60408051348152600060208201819052606082840181905282015290516001600160a01b0384169133917f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a49181900360800190a350610e1a60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b611a0f611bf9565b611a17611c57565b81600003611a51576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038316611a91576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611a9c3382846123ce565b826001600160a01b0316336001600160a01b03167f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a484846040516108979291909182526001600160a01b0316602082015260606040820181905260009082015260800190565b610e1a81336125f3565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff16611bef576000848152602082815260408083206001600160a01b0387168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055611ba53390565b6001600160a01b0316836001600160a01b0316857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a46001915050610748565b6000915050610748565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff1615611c55576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0080547ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01611cd2576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60029055565b60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b6060600080856001600160a01b0316348686604051611d1e9291906130a2565b60006040518083038185875af1925050503d8060008114611d5b576040519150601f19603f3d011682016040523d82523d6000602084013e611d60565b606091505b509150915081611d9c576040517facfdb44400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b9150505b9392505050565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff1615611bef576000848152602082815260408083206001600160a01b038716808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339287917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a46001915050610748565b611e73612680565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001681557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a150565b306001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161480611f9457507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316611f887f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b6001600160a01b031614155b15611c55576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610e3881611b02565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa92505050801561204e575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820190925261204b91810190613089565b60015b612094576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b03831660048201526024015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc81146120f0576040517faa1d49a40000000000000000000000000000000000000000000000000000000081526004810182905260240161208b565b6108c883836126db565b6040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b038281166004830152600060248301819052919084169063095ea7b3906044016020604051808303816000875af1158015612166573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611da09190613067565b6003546001600160a01b03908116908316036122d9576002546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152602481018390529083169063095ea7b3906044016020604051808303816000875af115801561220c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122309190613067565b612266576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002546040517f743e0c9b000000000000000000000000000000000000000000000000000000008152600481018390526001600160a01b039091169063743e0c9b90602401600060405180830381600087803b1580156122c557600080fd5b505af115801561114d573d6000803e3d6000fd5b600054610e38906001600160a01b03848116911683612557565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614611c55576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61235d611bf9565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011781557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25833611edd565b6003546001600160a01b039081169083160361253b576123f96001600160a01b038316843084612731565b6002546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152602481018390529083169063095ea7b3906044016020604051808303816000875af1158015612465573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124899190613067565b6124bf576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002546040517f743e0c9b000000000000000000000000000000000000000000000000000000008152600481018390526001600160a01b039091169063743e0c9b90602401600060405180830381600087803b15801561251e57600080fd5b505af1158015612532573d6000803e3d6000fd5b50505050505050565b6000546108c8906001600160a01b038481169186911684612731565b6040516001600160a01b038381166024830152604482018390526108c891859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505061276a565b611c556127e6565b6125db6127e6565b611c5561284d565b6125eb6127e6565b611c55612855565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408083206001600160a01b038516845290915290205460ff16610e38576040517fe2517d3f0000000000000000000000000000000000000000000000000000000081526001600160a01b03821660048201526024810183905260440161208b565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff16611c55576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6126e4826128a6565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a2805115612729576108c8828261294e565b610e386129c4565b6040516001600160a01b038481166024830152838116604483015260648201839052610ba79186918216906323b872dd90608401612584565b600061277f6001600160a01b038416836129fc565b905080516000141580156127a45750808060200190518101906127a29190613067565b155b156108c8576040517f5274afe70000000000000000000000000000000000000000000000000000000081526001600160a01b038416600482015260240161208b565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff16611c55576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611cd86127e6565b61285d6127e6565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055565b806001600160a01b03163b6000036128f5576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b038216600482015260240161208b565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6060600080846001600160a01b03168460405161296b91906130b2565b600060405180830381855af49150503d80600081146129a6576040519150601f19603f3d011682016040523d82523d6000602084013e6129ab565b606091505b50915091506129bb858383612a0a565b95945050505050565b3415611c55576040517fb398979f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6060611da083836000612a7f565b606082612a1f57612a1a82612b35565b611da0565b8151158015612a3657506001600160a01b0384163b155b15612a78576040517f9996b3150000000000000000000000000000000000000000000000000000000081526001600160a01b038516600482015260240161208b565b5080611da0565b606081471015612abd576040517fcd78605900000000000000000000000000000000000000000000000000000000815230600482015260240161208b565b600080856001600160a01b03168486604051612ad991906130b2565b60006040518083038185875af1925050503d8060008114612b16576040519150601f19603f3d011682016040523d82523d6000602084013e612b1b565b606091505b5091509150612b2b868383612a0a565b9695505050505050565b805115612b455780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060208284031215612b8957600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114611da057600080fd5b80356001600160a01b0381168114612bd057600080fd5b919050565b600060208284031215612be757600080fd5b611da082612bb9565b60008083601f840112612c0257600080fd5b50813567ffffffffffffffff811115612c1a57600080fd5b602083019150836020828501011115612c3257600080fd5b9250929050565b600080600060408486031215612c4e57600080fd5b612c5784612bb9565b9250602084013567ffffffffffffffff811115612c7357600080fd5b612c7f86828701612bf0565b9497909650939450505050565b60005b83811015612ca7578181015183820152602001612c8f565b50506000910152565b60008151808452612cc8816020860160208601612c8c565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000611da06020830184612cb0565b600060208284031215612d1f57600080fd5b5035919050565b60008060408385031215612d3957600080fd5b82359150612d4960208401612bb9565b90509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60008060408385031215612d9457600080fd5b612d9d83612bb9565b9150602083013567ffffffffffffffff811115612db957600080fd5b8301601f81018513612dca57600080fd5b803567ffffffffffffffff811115612de457612de4612d52565b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8501160116810181811067ffffffffffffffff82111715612e5057612e50612d52565b604052818152828201602001871015612e6857600080fd5b816020840160208301376000602083830101528093505050509250929050565b600080600080600060808688031215612ea057600080fd5b612ea986612bb9565b9450612eb760208701612bb9565b935060408601359250606086013567ffffffffffffffff811115612eda57600080fd5b612ee688828901612bf0565b969995985093965092949392505050565b600080600080600060808688031215612f0f57600080fd5b612f1886612bb9565b945060208601359350612f2d60408701612bb9565b9250606086013567ffffffffffffffff811115612eda57600080fd5b600080600060608486031215612f5e57600080fd5b612f6784612bb9565b9250612f7560208501612bb9565b9150612f8360408501612bb9565b90509250925092565b600080600060608486031215612fa157600080fd5b612faa84612bb9565b925060208401359150612f8360408501612bb9565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b60208152600061301c602083018486612fbf565b949350505050565b8381526040602082015260006129bb604083018486612fbf565b8481526001600160a01b0384166020820152606060408201526000612b2b606083018486612fbf565b60006020828403121561307957600080fd5b81518015158114611da057600080fd5b60006020828403121561309b57600080fd5b5051919050565b8183823760009101908152919050565b600082516130c4818460208701612c8c565b919091019291505056fea26469706673582212200408bf040a3098a9cce7f65bb8ff06c078a2de57e9b22f0fcfc5376aec2d596d64736f6c634300081a0033"; type GatewayEVMConstructorParams = | [signer?: Signer] diff --git a/v2/typechain-types/factories/GatewayZEVM__factory.ts b/v2/typechain-types/factories/GatewayZEVM__factory.ts index 9c6a4352..7347cda0 100644 --- a/v2/typechain-types/factories/GatewayZEVM__factory.ts +++ b/v2/typechain-types/factories/GatewayZEVM__factory.ts @@ -957,6 +957,11 @@ const _abi = [ name: "InsufficientZRC20Amount", inputs: [], }, + { + type: "error", + name: "InsufficientZetaAmount", + inputs: [], + }, { type: "error", name: "InvalidInitialization", @@ -1026,7 +1031,7 @@ const _abi = [ ] as const; const _bytecode = - "0x60a06040523060805234801561001457600080fd5b5061001d610022565b6100d4565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100725760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146100d15780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b608051612d476100fd60003960008181611e7801528181611ea101526120590152612d476000f3fe6080604052600436106101bb5760003560e01c80635af65967116100ec578063a217fddf1161008a578063c39aca3711610064578063c39aca3714610600578063d547741f14610620578063e63ab1e914610640578063f45346dc1461067457600080fd5b8063a217fddf14610575578063ad3cb1cc1461058a578063bcf7f32b146105e057600080fd5b80637993c1e0116100c65780637993c1e0146104bb57806380bd3d03146104db5780638456cb59146104fb57806391d148541461051057600080fd5b80635af65967146104445780635c975abb146104645780635d40e1781461049b57600080fd5b806336568abe11610159578063441a3e7011610133578063441a3e70146103dc578063485cc955146103fc5780634f1ef2861461041c57806352d1902d1461042f57600080fd5b806336568abe1461037f5780633ce4a5bc1461039f5780633f4ba83a146103c757600080fd5b806321e093b11161019557806321e093b1146102aa578063248a9ca3146102e25780632f2ff15d1461033f578063309f50041461035f57600080fd5b806301ffc9a714610235578063135390f91461026a57806321501a951461028a57600080fd5b36610230576101c8610694565b6000546001600160a01b031633148015906101f757503373735b14bb79463307aacbed86daf3322b1e6226ab14155b1561022e576040517f229930b200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b005b600080fd5b34801561024157600080fd5b50610255610250366004612537565b6106f2565b60405190151581526020015b60405180910390f35b34801561027657600080fd5b5061022e61028536600461264d565b61078b565b34801561029657600080fd5b5061022e6102a5366004612709565b610884565b3480156102b657600080fd5b506000546102ca906001600160a01b031681565b6040516001600160a01b039091168152602001610261565b3480156102ee57600080fd5b506103316102fd366004612795565b60009081527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052604090206001015490565b604051908152602001610261565b34801561034b57600080fd5b5061022e61035a3660046127ae565b6109d7565b34801561036b57600080fd5b5061022e61037a3660046127de565b610a21565b34801561038b57600080fd5b5061022e61039a3660046127ae565b610afd565b3480156103ab57600080fd5b506102ca73735b14bb79463307aacbed86daf3322b1e6226ab81565b3480156103d357600080fd5b5061022e610b49565b3480156103e857600080fd5b5061022e6103f736600461287c565b610b7e565b34801561040857600080fd5b5061022e61041736600461289e565b610c61565b61022e61042a3660046128cc565b610ea3565b34801561043b57600080fd5b50610331610ebe565b34801561045057600080fd5b5061022e61045f3660046127de565b610eed565b34801561047057600080fd5b507fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff16610255565b3480156104a757600080fd5b5061022e6104b636600461291c565b61106e565b3480156104c757600080fd5b5061022e6104d6366004612991565b6110ed565b3480156104e757600080fd5b5061022e6104f63660046129cc565b6111ec565b34801561050757600080fd5b5061022e61129e565b34801561051c57600080fd5b5061025561052b3660046127ae565b60009182527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408084206001600160a01b0393909316845291905290205460ff1690565b34801561058157600080fd5b50610331600081565b34801561059657600080fd5b506105d36040518060400160405280600581526020017f352e302e3000000000000000000000000000000000000000000000000000000081525081565b6040516102619190612a57565b3480156105ec57600080fd5b5061022e6105fb3660046127de565b6112d0565b34801561060c57600080fd5b5061022e61061b3660046127de565b611372565b34801561062c57600080fd5b5061022e61063b3660046127ae565b6114f3565b34801561064c57600080fd5b506103317f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b34801561068057600080fd5b5061022e61068f366004612a6a565b611537565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff16156106f0576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061078557507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b6107936116b8565b61079b610694565b60006107a78383611739565b90506000336001600160a01b03167fde19dbe881cc0aeeb6e73ce19ac7b5ca695e6be8a076e3eb42292005a7fec1b586858786886001600160a01b0316634d8943bb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610818573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061083c9190612aa1565b60405161084d959493929190612aba565b60405180910390a35061087f60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab146108d1576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6108d9610694565b6001600160a01b03831673735b14bb79463307aacbed86daf3322b1e6226ab148061090c57506001600160a01b03831630145b15610943576040517f82d5d76a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61094d8484611a2c565b6000546040517fde43156e0000000000000000000000000000000000000000000000000000000081526001600160a01b038086169263de43156e9261099e928a921690899088908890600401612bd9565b600060405180830381600087803b1580156109b857600080fd5b505af11580156109cc573d6000803e3d6000fd5b505050505050505050565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020526040902060010154610a1181611bfa565b610a1b8383611c04565b50505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610a6e576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610a76610694565b6040517f69582bee0000000000000000000000000000000000000000000000000000000081526001600160a01b038416906369582bee90610ac39089908990899088908890600401612bd9565b600060405180830381600087803b158015610add57600080fd5b505af1158015610af1573d6000803e3d6000fd5b50505050505050505050565b6001600160a01b0381163314610b3f576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61087f8282611cf1565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610b7381611bfa565b610b7b611db5565b50565b610b866116b8565b610b8e610694565b610bac8273735b14bb79463307aacbed86daf3322b1e6226ab611a2c565b6040517f735b14bb79463307aacbed86daf3322b1e6226ab0000000000000000000000006020820152819033907fde19dbe881cc0aeeb6e73ce19ac7b5ca695e6be8a076e3eb42292005a7fec1b59060340160408051601f198184030181529082905260008054610c2c936001600160a01b039091169189918190612aba565b60405180910390a3610c5d60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b5050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff16600081158015610cac5750825b905060008267ffffffffffffffff166001148015610cc95750303b155b905081158015610cd7575080155b15610d0e576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001660011785558315610d6f5784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff16680100000000000000001785555b6001600160a01b038716610daf576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610db7611e45565b610dbf611e45565b610dc7611e4d565b610dcf611e5d565b610dda600087611c04565b50610e057f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a87611c04565b50600080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0389161790558315610e9a5784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50505050505050565b610eab611e6d565b610eb482611f3d565b610c5d8282611f48565b6000610ec861204e565b507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc90565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610f3a576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610f42610694565b6001600160a01b03831673735b14bb79463307aacbed86daf3322b1e6226ab1480610f7557506001600160a01b03831630145b15610fac576040517f82d5d76a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f47e7ef240000000000000000000000000000000000000000000000000000000081526001600160a01b038481166004830152602482018690528616906347e7ef24906044016020604051808303816000875af1158015611014573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110389190612c20565b610a76576040517f47d19fab00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6110766116b8565b61107e610694565b82336001600160a01b03167f5322ffbbf9261ff1f8138247942d2b03b28717141ef0a0dd080fc4be9c4e78d38685856040516110bc93929190612c42565b60405180910390a3610a1b60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b6110f56116b8565b6110fd610694565b60006111098585611739565b90506000336001600160a01b03167fde19dbe881cc0aeeb6e73ce19ac7b5ca695e6be8a076e3eb42292005a7fec1b5888789868a6001600160a01b0316634d8943bb6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561117a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061119e9190612aa1565b8a8a6040516111b39796959493929190612c72565b60405180910390a3506111e560017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b5050505050565b6111f46116b8565b6111fc610694565b61121a8473735b14bb79463307aacbed86daf3322b1e6226ab611a2c565b6040517f735b14bb79463307aacbed86daf3322b1e6226ab0000000000000000000000006020820152839033907fde19dbe881cc0aeeb6e73ce19ac7b5ca695e6be8a076e3eb42292005a7fec1b59060340160408051601f1981840301815290829052600080546110bc936001600160a01b03909116918b9181908b908b90612c72565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a6112c881611bfa565b610b7b6120b0565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461131d576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611325610694565b6040517fde43156e0000000000000000000000000000000000000000000000000000000081526001600160a01b0384169063de43156e90610ac39089908990899088908890600401612bd9565b3373735b14bb79463307aacbed86daf3322b1e6226ab146113bf576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6113c7610694565b6001600160a01b03831673735b14bb79463307aacbed86daf3322b1e6226ab14806113fa57506001600160a01b03831630145b15611431576040517f82d5d76a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f47e7ef240000000000000000000000000000000000000000000000000000000081526001600160a01b038481166004830152602482018690528616906347e7ef24906044016020604051808303816000875af1158015611499573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114bd9190612c20565b611325576040517f47d19fab00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052604090206001015461152d81611bfa565b610a1b8383611cf1565b3373735b14bb79463307aacbed86daf3322b1e6226ab14611584576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61158c610694565b6001600160a01b03811673735b14bb79463307aacbed86daf3322b1e6226ab14806115bf57506001600160a01b03811630145b156115f6576040517f82d5d76a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f47e7ef240000000000000000000000000000000000000000000000000000000081526001600160a01b038281166004830152602482018490528416906347e7ef24906044016020604051808303816000875af115801561165e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116829190612c20565b61087f576040517f47d19fab00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0080547ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01611733576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60029055565b6000806000836001600160a01b031663d9eeebed6040518163ffffffff1660e01b81526004016040805180830381865afa15801561177b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061179f9190612cc7565b6040517f23b872dd00000000000000000000000000000000000000000000000000000000815233600482015273735b14bb79463307aacbed86daf3322b1e6226ab60248201526044810182905291935091506001600160a01b038316906323b872dd906064016020604051808303816000875af1158015611824573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118489190612c20565b61187e576040517f0a7cd6d600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f23b872dd000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018690526001600160a01b038516906323b872dd906064016020604051808303816000875af11580156118ea573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061190e9190612c20565b611944576040517f4dd9ee8d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f42966c68000000000000000000000000000000000000000000000000000000008152600481018690526001600160a01b038516906342966c68906024016020604051808303816000875af11580156119a4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119c89190612c20565b6119fe576040517f2c77e05c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b949350505050565b60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b6000546040517f23b872dd000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018490526001600160a01b03909116906323b872dd906064016020604051808303816000875af1158015611a9c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ac09190612c20565b611af6576040517fc7ffc47b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000546040517f2e1a7d4d000000000000000000000000000000000000000000000000000000008152600481018490526001600160a01b0390911690632e1a7d4d90602401600060405180830381600087803b158015611b5557600080fd5b505af1158015611b69573d6000803e3d6000fd5b505050506000816001600160a01b03168360405160006040518083038185875af1925050503d8060008114611bba576040519150601f19603f3d011682016040523d82523d6000602084013e611bbf565b606091505b505090508061087f576040517fc7ffc47b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610b7b8133612129565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff16611ce7576000848152602082815260408083206001600160a01b0387168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055611c9d3390565b6001600160a01b0316836001600160a01b0316857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a46001915050610785565b6000915050610785565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff1615611ce7576000848152602082815260408083206001600160a01b038716808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339287917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a46001915050610785565b611dbd6121b6565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001681557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a150565b6106f0612211565b611e55612211565b6106f0612278565b611e65612211565b6106f06122c9565b306001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161480611f0657507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316611efa7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b6001600160a01b031614155b156106f0576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610c5d81611bfa565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015611fa2575060408051601f3d908101601f19168201909252611f9f91810190612aa1565b60015b611fe8576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b03831660048201526024015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8114612044576040517faa1d49a400000000000000000000000000000000000000000000000000000000815260048101829052602401611fdf565b61087f83836122d1565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146106f0576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6120b8610694565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011781557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25833611e27565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408083206001600160a01b038516845290915290205460ff16610c5d576040517fe2517d3f0000000000000000000000000000000000000000000000000000000081526001600160a01b038216600482015260248101839052604401611fdf565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff166106f0576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff166106f0576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612280612211565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055565b611a06612211565b6122da82612327565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a280511561231f5761087f82826123cf565b610c5d612445565b806001600160a01b03163b600003612376576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b0382166004820152602401611fdf565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6060600080846001600160a01b0316846040516123ec9190612cf5565b600060405180830381855af49150503d8060008114612427576040519150601f19603f3d011682016040523d82523d6000602084013e61242c565b606091505b509150915061243c85838361247d565b95945050505050565b34156106f0576040517fb398979f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6060826124925761248d826124f5565b6124ee565b81511580156124a957506001600160a01b0384163b155b156124eb576040517f9996b3150000000000000000000000000000000000000000000000000000000081526001600160a01b0385166004820152602401611fdf565b50805b9392505050565b8051156125055780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006020828403121561254957600080fd5b81357fffffffff00000000000000000000000000000000000000000000000000000000811681146124ee57600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600082601f8301126125b957600080fd5b813567ffffffffffffffff8111156125d3576125d3612579565b604051601f19603f601f19601f8501160116810181811067ffffffffffffffff8211171561260357612603612579565b60405281815283820160200185101561261b57600080fd5b816020850160208301376000918101602001919091529392505050565b6001600160a01b0381168114610b7b57600080fd5b60008060006060848603121561266257600080fd5b833567ffffffffffffffff81111561267957600080fd5b612685868287016125a8565b93505060208401359150604084013561269d81612638565b809150509250925092565b6000606082840312156126ba57600080fd5b50919050565b60008083601f8401126126d257600080fd5b50813567ffffffffffffffff8111156126ea57600080fd5b60208301915083602082850101111561270257600080fd5b9250929050565b60008060008060006080868803121561272157600080fd5b853567ffffffffffffffff81111561273857600080fd5b612744888289016126a8565b95505060208601359350604086013561275c81612638565b9250606086013567ffffffffffffffff81111561277857600080fd5b612784888289016126c0565b969995985093965092949392505050565b6000602082840312156127a757600080fd5b5035919050565b600080604083850312156127c157600080fd5b8235915060208301356127d381612638565b809150509250929050565b60008060008060008060a087890312156127f757600080fd5b863567ffffffffffffffff81111561280e57600080fd5b61281a89828a016126a8565b965050602087013561282b81612638565b945060408701359350606087013561284281612638565b9250608087013567ffffffffffffffff81111561285e57600080fd5b61286a89828a016126c0565b979a9699509497509295939492505050565b6000806040838503121561288f57600080fd5b50508035926020909101359150565b600080604083850312156128b157600080fd5b82356128bc81612638565b915060208301356127d381612638565b600080604083850312156128df57600080fd5b82356128ea81612638565b9150602083013567ffffffffffffffff81111561290657600080fd5b612912858286016125a8565b9150509250929050565b6000806000806060858703121561293257600080fd5b843567ffffffffffffffff81111561294957600080fd5b612955878288016125a8565b94505060208501359250604085013567ffffffffffffffff81111561297957600080fd5b612985878288016126c0565b95989497509550505050565b6000806000806000608086880312156129a957600080fd5b853567ffffffffffffffff8111156129c057600080fd5b612744888289016125a8565b600080600080606085870312156129e257600080fd5b8435935060208501359250604085013567ffffffffffffffff81111561297957600080fd5b60005b83811015612a22578181015183820152602001612a0a565b50506000910152565b60008151808452612a43816020860160208601612a07565b601f01601f19169290920160200192915050565b6020815260006124ee6020830184612a2b565b600080600060608486031215612a7f57600080fd5b8335612a8a81612638565b925060208401359150604084013561269d81612638565b600060208284031215612ab357600080fd5b5051919050565b60c081526000612acd60c0830188612a2b565b6001600160a01b038716602084015285604084015284606084015283608084015282810360a084015260008152602081019150509695505050505050565b818352818160208501375060006020828401015260006020601f19601f840116840101905092915050565b600081357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1833603018112612b6a57600080fd5b820160208101903567ffffffffffffffff811115612b8757600080fd5b803603821315612b9657600080fd5b60608552612ba8606086018284612b0b565b9150506020830135612bb981612638565b6001600160a01b0316602085015260409283013592909301919091525090565b608081526000612bec6080830188612b36565b6001600160a01b03871660208401528560408401528281036060840152612c14818587612b0b565b98975050505050505050565b600060208284031215612c3257600080fd5b815180151581146124ee57600080fd5b604081526000612c556040830186612a2b565b8281036020840152612c68818587612b0b565b9695505050505050565b60c081526000612c8560c083018a612a2b565b6001600160a01b038916602084015287604084015286606084015285608084015282810360a0840152612cb9818587612b0b565b9a9950505050505050505050565b60008060408385031215612cda57600080fd5b8251612ce581612638565b6020939093015192949293505050565b60008251612d07818460208701612a07565b919091019291505056fea264697066735822122018f5dd94cb7d7e393ae5b4b1a7aca779c9842febec22a45f0cd7ba66c7aa7f0664736f6c634300081a0033"; + "0x60a06040523060805234801561001457600080fd5b5061001d610022565b6100d4565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100725760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146100d15780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b6080516132346100fd600039600081816123650152818161238e015261254601526132346000f3fe6080604052600436106101bb5760003560e01c80635af65967116100ec578063a217fddf1161008a578063c39aca3711610064578063c39aca3714610600578063d547741f14610620578063e63ab1e914610640578063f45346dc1461067457600080fd5b8063a217fddf14610575578063ad3cb1cc1461058a578063bcf7f32b146105e057600080fd5b80637993c1e0116100c65780637993c1e0146104bb57806380bd3d03146104db5780638456cb59146104fb57806391d148541461051057600080fd5b80635af65967146104445780635c975abb146104645780635d40e1781461049b57600080fd5b806336568abe11610159578063441a3e7011610133578063441a3e70146103dc578063485cc955146103fc5780634f1ef2861461041c57806352d1902d1461042f57600080fd5b806336568abe1461037f5780633ce4a5bc1461039f5780633f4ba83a146103c757600080fd5b806321e093b11161019557806321e093b1146102aa578063248a9ca3146102e25780632f2ff15d1461033f578063309f50041461035f57600080fd5b806301ffc9a714610235578063135390f91461026a57806321501a951461028a57600080fd5b36610230576101c8610694565b6000546001600160a01b031633148015906101f757503373735b14bb79463307aacbed86daf3322b1e6226ab14155b1561022e576040517f229930b200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b005b600080fd5b34801561024157600080fd5b50610255610250366004612a24565b6106f2565b60405190151581526020015b60405180910390f35b34801561027657600080fd5b5061022e610285366004612b3a565b61078b565b34801561029657600080fd5b5061022e6102a5366004612bf6565b6108f9565b3480156102b657600080fd5b506000546102ca906001600160a01b031681565b6040516001600160a01b039091168152602001610261565b3480156102ee57600080fd5b506103316102fd366004612c82565b60009081527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052604090206001015490565b604051908152602001610261565b34801561034b57600080fd5b5061022e61035a366004612c9b565b610ac6565b34801561036b57600080fd5b5061022e61037a366004612ccb565b610b10565b34801561038b57600080fd5b5061022e61039a366004612c9b565b610c7a565b3480156103ab57600080fd5b506102ca73735b14bb79463307aacbed86daf3322b1e6226ab81565b3480156103d357600080fd5b5061022e610cc6565b3480156103e857600080fd5b5061022e6103f7366004612d69565b610cfb565b34801561040857600080fd5b5061022e610417366004612d8b565b610e18565b61022e61042a366004612db9565b61106e565b34801561043b57600080fd5b50610331611089565b34801561045057600080fd5b5061022e61045f366004612ccb565b6110b8565b34801561047057600080fd5b507fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff16610255565b3480156104a757600080fd5b5061022e6104b6366004612e09565b6112c7565b3480156104c757600080fd5b5061022e6104d6366004612e7e565b611381565b3480156104e757600080fd5b5061022e6104f6366004612eb9565b6114f5565b34801561050757600080fd5b5061022e6115e1565b34801561051c57600080fd5b5061025561052b366004612c9b565b60009182527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408084206001600160a01b0393909316845291905290205460ff1690565b34801561058157600080fd5b50610331600081565b34801561059657600080fd5b506105d36040518060400160405280600581526020017f352e302e3000000000000000000000000000000000000000000000000000000081525081565b6040516102619190612f44565b3480156105ec57600080fd5b5061022e6105fb366004612ccb565b611613565b34801561060c57600080fd5b5061022e61061b366004612ccb565b611743565b34801561062c57600080fd5b5061022e61063b366004612c9b565b611952565b34801561064c57600080fd5b506103317f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b34801561068057600080fd5b5061022e61068f366004612f57565b611996565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff16156106f0576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061078557507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b610793611ba5565b61079b610694565b82516000036107d6576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b81600003610810576040517f5d67094f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061081c8383611c26565b90506000336001600160a01b03167fde19dbe881cc0aeeb6e73ce19ac7b5ca695e6be8a076e3eb42292005a7fec1b586858786886001600160a01b0316634d8943bb6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561088d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108b19190612f8e565b6040516108c2959493929190612fa7565b60405180910390a3506108f460017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610946576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61094e610694565b6001600160a01b03831661098e576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b836000036109c8576040517f19c08f4900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03831673735b14bb79463307aacbed86daf3322b1e6226ab14806109fb57506001600160a01b03831630145b15610a32576040517f82d5d76a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610a3c8484611f19565b6000546040517fde43156e0000000000000000000000000000000000000000000000000000000081526001600160a01b038086169263de43156e92610a8d928a9216908990889088906004016130c6565b600060405180830381600087803b158015610aa757600080fd5b505af1158015610abb573d6000803e3d6000fd5b505050505050505050565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020526040902060010154610b00816120e7565b610b0a83836120f1565b50505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610b5d576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610b65610694565b6001600160a01b0385161580610b8257506001600160a01b038316155b15610bb9576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b83600003610bf3576040517f5d67094f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f69582bee0000000000000000000000000000000000000000000000000000000081526001600160a01b038416906369582bee90610c4090899089908990889088906004016130c6565b600060405180830381600087803b158015610c5a57600080fd5b505af1158015610c6e573d6000803e3d6000fd5b50505050505050505050565b6001600160a01b0381163314610cbc576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6108f482826121de565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610cf0816120e7565b610cf86122a2565b50565b610d03611ba5565b610d0b610694565b81600003610d45576040517f19c08f4900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610d638273735b14bb79463307aacbed86daf3322b1e6226ab611f19565b6040517f735b14bb79463307aacbed86daf3322b1e6226ab0000000000000000000000006020820152819033907fde19dbe881cc0aeeb6e73ce19ac7b5ca695e6be8a076e3eb42292005a7fec1b59060340160408051601f198184030181529082905260008054610de3936001600160a01b039091169189918190612fa7565b60405180910390a3610e1460017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b5050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff16600081158015610e635750825b905060008267ffffffffffffffff166001148015610e805750303b155b905081158015610e8e575080155b15610ec5576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001660011785558315610f265784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff16680100000000000000001785555b6001600160a01b0387161580610f4357506001600160a01b038616155b15610f7a576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610f82612332565b610f8a612332565b610f9261233a565b610f9a61234a565b610fa56000876120f1565b50610fd07f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a876120f1565b50600080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03891617905583156110655784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50505050505050565b61107661235a565b61107f8261242a565b610e148282612435565b600061109361253b565b507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc90565b3373735b14bb79463307aacbed86daf3322b1e6226ab14611105576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61110d610694565b6001600160a01b038516158061112a57506001600160a01b038316155b15611161576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8360000361119b576040517f5d67094f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03831673735b14bb79463307aacbed86daf3322b1e6226ab14806111ce57506001600160a01b03831630145b15611205576040517f82d5d76a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f47e7ef240000000000000000000000000000000000000000000000000000000081526001600160a01b038481166004830152602482018690528616906347e7ef24906044016020604051808303816000875af115801561126d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611291919061310d565b610bf3576040517f47d19fab00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6112cf611ba5565b6112d7610694565b8351600003611312576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b82336001600160a01b03167f5322ffbbf9261ff1f8138247942d2b03b28717141ef0a0dd080fc4be9c4e78d38685856040516113509392919061312f565b60405180910390a3610b0a60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b611389611ba5565b611391610694565b84516000036113cc576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b83600003611406576040517f5d67094f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006114128585611c26565b90506000336001600160a01b03167fde19dbe881cc0aeeb6e73ce19ac7b5ca695e6be8a076e3eb42292005a7fec1b5888789868a6001600160a01b0316634d8943bb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611483573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114a79190612f8e565b8a8a6040516114bc979695949392919061315f565b60405180910390a3506114ee60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b5050505050565b6114fd611ba5565b611505610694565b8360000361153f576040517f19c08f4900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61155d8473735b14bb79463307aacbed86daf3322b1e6226ab611f19565b6040517f735b14bb79463307aacbed86daf3322b1e6226ab0000000000000000000000006020820152839033907fde19dbe881cc0aeeb6e73ce19ac7b5ca695e6be8a076e3eb42292005a7fec1b59060340160408051601f198184030181529082905260008054611350936001600160a01b03909116918b9181908b908b9061315f565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61160b816120e7565b610cf861259d565b3373735b14bb79463307aacbed86daf3322b1e6226ab14611660576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611668610694565b6001600160a01b038516158061168557506001600160a01b038316155b156116bc576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b836000036116f6576040517f5d67094f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517fde43156e0000000000000000000000000000000000000000000000000000000081526001600160a01b0384169063de43156e90610c4090899089908990889088906004016130c6565b3373735b14bb79463307aacbed86daf3322b1e6226ab14611790576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611798610694565b6001600160a01b03851615806117b557506001600160a01b038316155b156117ec576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b83600003611826576040517f5d67094f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03831673735b14bb79463307aacbed86daf3322b1e6226ab148061185957506001600160a01b03831630145b15611890576040517f82d5d76a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f47e7ef240000000000000000000000000000000000000000000000000000000081526001600160a01b038481166004830152602482018690528616906347e7ef24906044016020604051808303816000875af11580156118f8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061191c919061310d565b6116f6576040517f47d19fab00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052604090206001015461198c816120e7565b610b0a83836121de565b3373735b14bb79463307aacbed86daf3322b1e6226ab146119e3576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6119eb610694565b6001600160a01b0383161580611a0857506001600160a01b038116155b15611a3f576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b81600003611a79576040517f5d67094f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03811673735b14bb79463307aacbed86daf3322b1e6226ab1480611aac57506001600160a01b03811630145b15611ae3576040517f82d5d76a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f47e7ef240000000000000000000000000000000000000000000000000000000081526001600160a01b038281166004830152602482018490528416906347e7ef24906044016020604051808303816000875af1158015611b4b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b6f919061310d565b6108f4576040517f47d19fab00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0080547ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01611c20576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60029055565b6000806000836001600160a01b031663d9eeebed6040518163ffffffff1660e01b81526004016040805180830381865afa158015611c68573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c8c91906131b4565b6040517f23b872dd00000000000000000000000000000000000000000000000000000000815233600482015273735b14bb79463307aacbed86daf3322b1e6226ab60248201526044810182905291935091506001600160a01b038316906323b872dd906064016020604051808303816000875af1158015611d11573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d35919061310d565b611d6b576040517f0a7cd6d600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f23b872dd000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018690526001600160a01b038516906323b872dd906064016020604051808303816000875af1158015611dd7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611dfb919061310d565b611e31576040517f4dd9ee8d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f42966c68000000000000000000000000000000000000000000000000000000008152600481018690526001600160a01b038516906342966c68906024016020604051808303816000875af1158015611e91573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611eb5919061310d565b611eeb576040517f2c77e05c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b949350505050565b60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b6000546040517f23b872dd000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018490526001600160a01b03909116906323b872dd906064016020604051808303816000875af1158015611f89573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fad919061310d565b611fe3576040517fc7ffc47b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000546040517f2e1a7d4d000000000000000000000000000000000000000000000000000000008152600481018490526001600160a01b0390911690632e1a7d4d90602401600060405180830381600087803b15801561204257600080fd5b505af1158015612056573d6000803e3d6000fd5b505050506000816001600160a01b03168360405160006040518083038185875af1925050503d80600081146120a7576040519150601f19603f3d011682016040523d82523d6000602084013e6120ac565b606091505b50509050806108f4576040517fc7ffc47b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610cf88133612616565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff166121d4576000848152602082815260408083206001600160a01b0387168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905561218a3390565b6001600160a01b0316836001600160a01b0316857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a46001915050610785565b6000915050610785565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff16156121d4576000848152602082815260408083206001600160a01b038716808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339287917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a46001915050610785565b6122aa6126a3565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001681557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a150565b6106f06126fe565b6123426126fe565b6106f0612765565b6123526126fe565b6106f06127b6565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806123f357507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166123e77f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b6001600160a01b031614155b156106f0576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610e14816120e7565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa92505050801561248f575060408051601f3d908101601f1916820190925261248c91810190612f8e565b60015b6124d5576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b03831660048201526024015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8114612531576040517faa1d49a4000000000000000000000000000000000000000000000000000000008152600481018290526024016124cc565b6108f483836127be565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146106f0576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6125a5610694565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011781557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25833612314565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408083206001600160a01b038516845290915290205460ff16610e14576040517fe2517d3f0000000000000000000000000000000000000000000000000000000081526001600160a01b0382166004820152602481018390526044016124cc565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff166106f0576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff166106f0576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61276d6126fe565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055565b611ef36126fe565b6127c782612814565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a280511561280c576108f482826128bc565b610e14612932565b806001600160a01b03163b600003612863576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b03821660048201526024016124cc565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6060600080846001600160a01b0316846040516128d991906131e2565b600060405180830381855af49150503d8060008114612914576040519150601f19603f3d011682016040523d82523d6000602084013e612919565b606091505b509150915061292985838361296a565b95945050505050565b34156106f0576040517fb398979f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60608261297f5761297a826129e2565b6129db565b815115801561299657506001600160a01b0384163b155b156129d8576040517f9996b3150000000000000000000000000000000000000000000000000000000081526001600160a01b03851660048201526024016124cc565b50805b9392505050565b8051156129f25780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060208284031215612a3657600080fd5b81357fffffffff00000000000000000000000000000000000000000000000000000000811681146129db57600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600082601f830112612aa657600080fd5b813567ffffffffffffffff811115612ac057612ac0612a66565b604051601f19603f601f19601f8501160116810181811067ffffffffffffffff82111715612af057612af0612a66565b604052818152838201602001851015612b0857600080fd5b816020850160208301376000918101602001919091529392505050565b6001600160a01b0381168114610cf857600080fd5b600080600060608486031215612b4f57600080fd5b833567ffffffffffffffff811115612b6657600080fd5b612b7286828701612a95565b935050602084013591506040840135612b8a81612b25565b809150509250925092565b600060608284031215612ba757600080fd5b50919050565b60008083601f840112612bbf57600080fd5b50813567ffffffffffffffff811115612bd757600080fd5b602083019150836020828501011115612bef57600080fd5b9250929050565b600080600080600060808688031215612c0e57600080fd5b853567ffffffffffffffff811115612c2557600080fd5b612c3188828901612b95565b955050602086013593506040860135612c4981612b25565b9250606086013567ffffffffffffffff811115612c6557600080fd5b612c7188828901612bad565b969995985093965092949392505050565b600060208284031215612c9457600080fd5b5035919050565b60008060408385031215612cae57600080fd5b823591506020830135612cc081612b25565b809150509250929050565b60008060008060008060a08789031215612ce457600080fd5b863567ffffffffffffffff811115612cfb57600080fd5b612d0789828a01612b95565b9650506020870135612d1881612b25565b9450604087013593506060870135612d2f81612b25565b9250608087013567ffffffffffffffff811115612d4b57600080fd5b612d5789828a01612bad565b979a9699509497509295939492505050565b60008060408385031215612d7c57600080fd5b50508035926020909101359150565b60008060408385031215612d9e57600080fd5b8235612da981612b25565b91506020830135612cc081612b25565b60008060408385031215612dcc57600080fd5b8235612dd781612b25565b9150602083013567ffffffffffffffff811115612df357600080fd5b612dff85828601612a95565b9150509250929050565b60008060008060608587031215612e1f57600080fd5b843567ffffffffffffffff811115612e3657600080fd5b612e4287828801612a95565b94505060208501359250604085013567ffffffffffffffff811115612e6657600080fd5b612e7287828801612bad565b95989497509550505050565b600080600080600060808688031215612e9657600080fd5b853567ffffffffffffffff811115612ead57600080fd5b612c3188828901612a95565b60008060008060608587031215612ecf57600080fd5b8435935060208501359250604085013567ffffffffffffffff811115612e6657600080fd5b60005b83811015612f0f578181015183820152602001612ef7565b50506000910152565b60008151808452612f30816020860160208601612ef4565b601f01601f19169290920160200192915050565b6020815260006129db6020830184612f18565b600080600060608486031215612f6c57600080fd5b8335612f7781612b25565b9250602084013591506040840135612b8a81612b25565b600060208284031215612fa057600080fd5b5051919050565b60c081526000612fba60c0830188612f18565b6001600160a01b038716602084015285604084015284606084015283608084015282810360a084015260008152602081019150509695505050505050565b818352818160208501375060006020828401015260006020601f19601f840116840101905092915050565b600081357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe183360301811261305757600080fd5b820160208101903567ffffffffffffffff81111561307457600080fd5b80360382131561308357600080fd5b60608552613095606086018284612ff8565b91505060208301356130a681612b25565b6001600160a01b0316602085015260409283013592909301919091525090565b6080815260006130d96080830188613023565b6001600160a01b03871660208401528560408401528281036060840152613101818587612ff8565b98975050505050505050565b60006020828403121561311f57600080fd5b815180151581146129db57600080fd5b6040815260006131426040830186612f18565b8281036020840152613155818587612ff8565b9695505050505050565b60c08152600061317260c083018a612f18565b6001600160a01b038916602084015287604084015286606084015285608084015282810360a08401526131a6818587612ff8565b9a9950505050505050505050565b600080604083850312156131c757600080fd5b82516131d281612b25565b6020939093015192949293505050565b600082516131f4818460208701612ef4565b919091019291505056fea2646970667358221220e552e065fe0e33093f4ee925441290718d332f30e2458c48850361f698017df664736f6c634300081a0033"; type GatewayZEVMConstructorParams = | [signer?: Signer] diff --git a/v2/typechain-types/factories/IGatewayEVM.sol/IGatewayEVMErrors__factory.ts b/v2/typechain-types/factories/IGatewayEVM.sol/IGatewayEVMErrors__factory.ts index 39b14449..34cc3a3e 100644 --- a/v2/typechain-types/factories/IGatewayEVM.sol/IGatewayEVMErrors__factory.ts +++ b/v2/typechain-types/factories/IGatewayEVM.sol/IGatewayEVMErrors__factory.ts @@ -14,6 +14,11 @@ const _abi = [ name: "ApprovalFailed", inputs: [], }, + { + type: "error", + name: "ConnectorInitialized", + inputs: [], + }, { type: "error", name: "CustodyInitialized", diff --git a/v2/typechain-types/factories/IGatewayZEVM.sol/IGatewayZEVMErrors__factory.ts b/v2/typechain-types/factories/IGatewayZEVM.sol/IGatewayZEVMErrors__factory.ts index 9411fb85..ad0b9033 100644 --- a/v2/typechain-types/factories/IGatewayZEVM.sol/IGatewayZEVMErrors__factory.ts +++ b/v2/typechain-types/factories/IGatewayZEVM.sol/IGatewayZEVMErrors__factory.ts @@ -29,6 +29,11 @@ const _abi = [ name: "InsufficientZRC20Amount", inputs: [], }, + { + type: "error", + name: "InsufficientZetaAmount", + inputs: [], + }, { type: "error", name: "InvalidTarget", diff --git a/v2/typechain-types/factories/SenderZEVM__factory.ts b/v2/typechain-types/factories/SenderZEVM__factory.ts index 4905b6be..1899e4f6 100644 --- a/v2/typechain-types/factories/SenderZEVM__factory.ts +++ b/v2/typechain-types/factories/SenderZEVM__factory.ts @@ -120,7 +120,7 @@ const _abi = [ ] as const; const _bytecode = - "0x6080604052348015600f57600080fd5b5060405161080c38038061080c833981016040819052602c916050565b600080546001600160a01b0319166001600160a01b0392909216919091179055607e565b600060208284031215606157600080fd5b81516001600160a01b0381168114607757600080fd5b9392505050565b61077f8061008d6000396000f3fe608060405234801561001057600080fd5b50600436106100415760003560e01c80630abd890514610046578063116191b61461005b578063865b36f6146100a4575b600080fd5b6100596100543660046104c4565b6100b7565b005b60005461007b9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b6100596100b236600461057f565b6102af565b60008383836040516024016100ce93929190610674565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe04d4f970000000000000000000000000000000000000000000000000000000017905260005490517f095ea7b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff91821660048201526024810189905291925086169063095ea7b3906044016020604051808303816000875af11580156101be573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101e2919061069e565b610218576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000546040517f7993c1e000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff90911690637993c1e090610274908a908a908a9087906004016106c2565b600060405180830381600087803b15801561028e57600080fd5b505af11580156102a2573d6000803e3d6000fd5b5050505050505050505050565b60008383836040516024016102c693929190610674565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe04d4f970000000000000000000000000000000000000000000000000000000017905260005490517f5d40e17800000000000000000000000000000000000000000000000000000000815291925073ffffffffffffffffffffffffffffffffffffffff1690635d40e1789061039690899089908690600401610714565b600060405180830381600087803b1580156103b057600080fd5b505af11580156103c4573d6000803e3d6000fd5b50505050505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600082601f83011261041057600080fd5b81356020830160008067ffffffffffffffff841115610431576104316103d0565b506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f85018116603f0116810181811067ffffffffffffffff8211171561047e5761047e6103d0565b60405283815290508082840187101561049657600080fd5b838360208301376000602085830101528094505050505092915050565b80151581146104c157600080fd5b50565b60008060008060008060c087890312156104dd57600080fd5b863567ffffffffffffffff8111156104f457600080fd5b61050089828a016103ff565b96505060208701359450604087013573ffffffffffffffffffffffffffffffffffffffff8116811461053157600080fd5b9350606087013567ffffffffffffffff81111561054d57600080fd5b61055989828a016103ff565b9350506080870135915060a0870135610571816104b3565b809150509295509295509295565b600080600080600060a0868803121561059757600080fd5b853567ffffffffffffffff8111156105ae57600080fd5b6105ba888289016103ff565b95505060208601359350604086013567ffffffffffffffff8111156105de57600080fd5b6105ea888289016103ff565b935050606086013591506080860135610602816104b3565b809150509295509295909350565b6000815180845260005b818110156106365760208185018101518683018201520161061a565b5060006020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b6060815260006106876060830186610610565b602083019490945250901515604090910152919050565b6000602082840312156106b057600080fd5b81516106bb816104b3565b9392505050565b6080815260006106d56080830187610610565b85602084015273ffffffffffffffffffffffffffffffffffffffff8516604084015282810360608401526107098185610610565b979650505050505050565b6060815260006107276060830186610610565b846020840152828103604084015261073f8185610610565b969550505050505056fea26469706673582212200eb2d64f6bd03198b904dea273f648b094222e30263233833cd64525d96f81ba64736f6c634300081a0033"; + "0x6080604052348015600f57600080fd5b5060405161080c38038061080c833981016040819052602c916050565b600080546001600160a01b0319166001600160a01b0392909216919091179055607e565b600060208284031215606157600080fd5b81516001600160a01b0381168114607757600080fd5b9392505050565b61077f8061008d6000396000f3fe608060405234801561001057600080fd5b50600436106100415760003560e01c80630abd890514610046578063116191b61461005b578063865b36f6146100a4575b600080fd5b6100596100543660046104c4565b6100b7565b005b60005461007b9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b6100596100b236600461057f565b6102af565b60008383836040516024016100ce93929190610674565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe04d4f970000000000000000000000000000000000000000000000000000000017905260005490517f095ea7b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff91821660048201526024810189905291925086169063095ea7b3906044016020604051808303816000875af11580156101be573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101e2919061069e565b610218576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000546040517f7993c1e000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff90911690637993c1e090610274908a908a908a9087906004016106c2565b600060405180830381600087803b15801561028e57600080fd5b505af11580156102a2573d6000803e3d6000fd5b5050505050505050505050565b60008383836040516024016102c693929190610674565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe04d4f970000000000000000000000000000000000000000000000000000000017905260005490517f5d40e17800000000000000000000000000000000000000000000000000000000815291925073ffffffffffffffffffffffffffffffffffffffff1690635d40e1789061039690899089908690600401610714565b600060405180830381600087803b1580156103b057600080fd5b505af11580156103c4573d6000803e3d6000fd5b50505050505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600082601f83011261041057600080fd5b81356020830160008067ffffffffffffffff841115610431576104316103d0565b506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f85018116603f0116810181811067ffffffffffffffff8211171561047e5761047e6103d0565b60405283815290508082840187101561049657600080fd5b838360208301376000602085830101528094505050505092915050565b80151581146104c157600080fd5b50565b60008060008060008060c087890312156104dd57600080fd5b863567ffffffffffffffff8111156104f457600080fd5b61050089828a016103ff565b96505060208701359450604087013573ffffffffffffffffffffffffffffffffffffffff8116811461053157600080fd5b9350606087013567ffffffffffffffff81111561054d57600080fd5b61055989828a016103ff565b9350506080870135915060a0870135610571816104b3565b809150509295509295509295565b600080600080600060a0868803121561059757600080fd5b853567ffffffffffffffff8111156105ae57600080fd5b6105ba888289016103ff565b95505060208601359350604086013567ffffffffffffffff8111156105de57600080fd5b6105ea888289016103ff565b935050606086013591506080860135610602816104b3565b809150509295509295909350565b6000815180845260005b818110156106365760208185018101518683018201520161061a565b5060006020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b6060815260006106876060830186610610565b602083019490945250901515604090910152919050565b6000602082840312156106b057600080fd5b81516106bb816104b3565b9392505050565b6080815260006106d56080830187610610565b85602084015273ffffffffffffffffffffffffffffffffffffffff8516604084015282810360608401526107098185610610565b979650505050505050565b6060815260006107276060830186610610565b846020840152828103604084015261073f8185610610565b969550505050505056fea2646970667358221220d5c8efa106d3ece0f3750900034e01f5ba81ba4b46a57e03310e9ccd21566f2864736f6c634300081a0033"; type SenderZEVMConstructorParams = | [signer?: Signer] diff --git a/v2/typechain-types/factories/ZetaConnectorBase__factory.ts b/v2/typechain-types/factories/ZetaConnectorBase__factory.ts index c79b6ca4..4f24de23 100644 --- a/v2/typechain-types/factories/ZetaConnectorBase__factory.ts +++ b/v2/typechain-types/factories/ZetaConnectorBase__factory.ts @@ -35,6 +35,19 @@ const _abi = [ ], stateMutability: "view", }, + { + type: "function", + name: "TSS_ROLE", + inputs: [], + outputs: [ + { + name: "", + type: "bytes32", + internalType: "bytes32", + }, + ], + stateMutability: "view", + }, { type: "function", name: "WITHDRAWER_ROLE", diff --git a/v2/typechain-types/factories/ZetaConnectorNative__factory.ts b/v2/typechain-types/factories/ZetaConnectorNative__factory.ts index 8c297454..fcea5323 100644 --- a/v2/typechain-types/factories/ZetaConnectorNative__factory.ts +++ b/v2/typechain-types/factories/ZetaConnectorNative__factory.ts @@ -72,6 +72,19 @@ const _abi = [ ], stateMutability: "view", }, + { + type: "function", + name: "TSS_ROLE", + inputs: [], + outputs: [ + { + name: "", + type: "bytes32", + internalType: "bytes32", + }, + ], + stateMutability: "view", + }, { type: "function", name: "WITHDRAWER_ROLE", @@ -598,7 +611,7 @@ const _abi = [ ] as const; const _bytecode = - "0x60c060405234801561001057600080fd5b506040516115f63803806115f683398101604081905261002f916101ef565b60016000819055805460ff19169055838383836001600160a01b038416158061005f57506001600160a01b038316155b8061007157506001600160a01b038216155b8061008357506001600160a01b038116155b156100a15760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b03808516608052831660a0526100bf600082610123565b506100ea7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e483610123565b506101157f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a82610123565b505050505050505050610243565b60008281526002602090815260408083206001600160a01b038516845290915281205460ff166101c95760008381526002602090815260408083206001600160a01b03861684529091529020805460ff191660011790556101813390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45060016101cd565b5060005b92915050565b80516001600160a01b03811681146101ea57600080fd5b919050565b6000806000806080858703121561020557600080fd5b61020e856101d3565b935061021c602086016101d3565b925061022a604086016101d3565b9150610238606086016101d3565b905092959194509250565b60805160a0516113486102ae600039600081816101dc01528181610432015281816104e3015281816105fd0152818161079101528181610842015261091001526000818161019001528181610454015281816104b6015281816107b3015261081501526113486000f3fe608060405234801561001057600080fd5b50600436106101365760003560e01c80635c975abb116100b257806385f438c111610081578063a217fddf11610066578063a217fddf14610303578063d547741f1461030b578063e63ab1e91461031e57600080fd5b806385f438c11461029657806391d14854146102bd57600080fd5b80635c975abb1461025d5780635e3e9fef14610268578063743e0c9b1461027b5780638456cb591461028e57600080fd5b806321e093b1116101095780632f2ff15d116100ee5780632f2ff15d1461022f57806336568abe146102425780633f4ba83a1461025557600080fd5b806321e093b1146101d7578063248a9ca3146101fe57600080fd5b806301ffc9a71461013b57806302d5c89914610163578063106e629014610178578063116191b61461018b575b600080fd5b61014e610149366004611083565b610345565b60405190151581526020015b60405180910390f35b6101766101713660046110ee565b6103de565b005b610176610186366004611180565b6105a9565b6101b27f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161015a565b6101b27f000000000000000000000000000000000000000000000000000000000000000081565b61022161020c3660046111b3565b60009081526002602052604090206001015490565b60405190815260200161015a565b61017661023d3660046111cc565b610684565b6101766102503660046111cc565b6106af565b610176610708565b60015460ff1661014e565b6101766102763660046110ee565b61073d565b6101766102893660046111b3565b6108ee565b610176610938565b6102217f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b61014e6102cb3660046111cc565b600091825260026020908152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b610221600081565b6101766103193660046111cc565b61096a565b6102217f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b0000000000000000000000000000000000000000000000000000000014806103d857507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b6103e661098f565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e4610410816109d2565b6104186109dc565b61047973ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000167f000000000000000000000000000000000000000000000000000000000000000087610a1b565b6040517fb8969bd400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063b8969bd490610513907f0000000000000000000000000000000000000000000000000000000000000000908a908a908a908a90600401611241565b600060405180830381600087803b15801561052d57600080fd5b505af1158015610541573d6000803e3d6000fd5b505050508573ffffffffffffffffffffffffffffffffffffffff167fba96f26bdda53eb8c8ba39045dfb4ff39753fbc7a6edcf250a88e75e78d102fe86868660405161058f9392919061129e565b60405180910390a2506105a26001600055565b5050505050565b6105b161098f565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e46105db816109d2565b6105e36109dc565b61062473ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168585610a1b565b8373ffffffffffffffffffffffffffffffffffffffff167f884edad9ce6fa2440d8a54cc123490eb96d2768479d49ff9c7366125a94243648460405161066c91815260200190565b60405180910390a25061067f6001600055565b505050565b60008281526002602052604090206001015461069f816109d2565b6106a98383610a9c565b50505050565b73ffffffffffffffffffffffffffffffffffffffff811633146106fe576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61067f8282610b9c565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610732816109d2565b61073a610c5b565b50565b61074561098f565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461076f816109d2565b6107776109dc565b6107d873ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000167f000000000000000000000000000000000000000000000000000000000000000087610a1b565b6040517f5131ab5900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690635131ab5990610872907f0000000000000000000000000000000000000000000000000000000000000000908a908a908a908a90600401611241565b600060405180830381600087803b15801561088c57600080fd5b505af11580156108a0573d6000803e3d6000fd5b505050508573ffffffffffffffffffffffffffffffffffffffff167f7772f56296d3a5202974a45c61c9188d844ab4d6eeb18c851e4b8d5384ca6ced86868660405161058f9392919061129e565b6108f66109dc565b61073a73ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016333084610cd8565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610962816109d2565b61073a610d1e565b600082815260026020526040902060010154610985816109d2565b6106a98383610b9c565b6002600054036109cb576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b61073a8133610d77565b60015460ff1615610a19576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b60405173ffffffffffffffffffffffffffffffffffffffff83811660248301526044820183905261067f91859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050610e08565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff16610b9457600083815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff86168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055610b323390565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45060016103d8565b5060006103d8565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff1615610b9457600083815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8616808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45060016103d8565b610c63610e9e565b600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b60405173ffffffffffffffffffffffffffffffffffffffff84811660248301528381166044830152606482018390526106a99186918216906323b872dd90608401610a55565b610d266109dc565b600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016811790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25833610cae565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16610e04576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82166004820152602481018390526044015b60405180910390fd5b5050565b6000610e2a73ffffffffffffffffffffffffffffffffffffffff841683610eda565b90508051600014158015610e4f575080806020019051810190610e4d91906112c1565b155b1561067f576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84166004820152602401610dfb565b60015460ff16610a19576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6060610ee883836000610eef565b9392505050565b606081471015610f2d576040517fcd786059000000000000000000000000000000000000000000000000000000008152306004820152602401610dfb565b6000808573ffffffffffffffffffffffffffffffffffffffff168486604051610f5691906112e3565b60006040518083038185875af1925050503d8060008114610f93576040519150601f19603f3d011682016040523d82523d6000602084013e610f98565b606091505b5091509150610fa8868383610fb2565b9695505050505050565b606082610fc757610fc282611041565b610ee8565b8151158015610feb575073ffffffffffffffffffffffffffffffffffffffff84163b155b1561103a576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85166004820152602401610dfb565b5080610ee8565b8051156110515780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006020828403121561109557600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610ee857600080fd5b803573ffffffffffffffffffffffffffffffffffffffff811681146110e957600080fd5b919050565b60008060008060006080868803121561110657600080fd5b61110f866110c5565b945060208601359350604086013567ffffffffffffffff81111561113257600080fd5b8601601f8101881361114357600080fd5b803567ffffffffffffffff81111561115a57600080fd5b88602082840101111561116c57600080fd5b959894975060200195606001359392505050565b60008060006060848603121561119557600080fd5b61119e846110c5565b95602085013595506040909401359392505050565b6000602082840312156111c557600080fd5b5035919050565b600080604083850312156111df57600080fd5b823591506111ef602084016110c5565b90509250929050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff8616815273ffffffffffffffffffffffffffffffffffffffff851660208201528360408201526080606082015260006112936080830184866111f8565b979650505050505050565b8381526040602082015260006112b86040830184866111f8565b95945050505050565b6000602082840312156112d357600080fd5b81518015158114610ee857600080fd5b6000825160005b8181101561130457602081860181015185830152016112ea565b50600092019182525091905056fea2646970667358221220acfa51062c59716e02e413798f47a294f807ab6bfe6bcb7c13ce0530e6e5b1b864736f6c634300081a0033"; + "0x60c060405234801561001057600080fd5b5060405161166338038061166383398101604081905261002f9161021a565b60016000819055805460ff19169055838383836001600160a01b038416158061005f57506001600160a01b038316155b8061007157506001600160a01b038216155b8061008357506001600160a01b038116155b156100a15760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b03808516608052831660a0526100bf60008261014e565b506100ea7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e48361014e565b506101157f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb8361014e565b506101407f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a8261014e565b50505050505050505061026e565b60008281526002602090815260408083206001600160a01b038516845290915281205460ff166101f45760008381526002602090815260408083206001600160a01b03861684529091529020805460ff191660011790556101ac3390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45060016101f8565b5060005b92915050565b80516001600160a01b038116811461021557600080fd5b919050565b6000806000806080858703121561023057600080fd5b610239856101fe565b9350610247602086016101fe565b9250610255604086016101fe565b9150610263606086016101fe565b905092959194509250565b60805160a05161138a6102d9600039600081816101f701528181610474015281816105250152818161063f015281816107d30152818161088401526109520152600081816101ab01528181610496015281816104f8015281816107f50152610857015261138a6000f3fe608060405234801561001057600080fd5b50600436106101515760003560e01c80635c975abb116100cd57806391d1485411610081578063a783c78911610066578063a783c78914610326578063d547741f1461034d578063e63ab1e91461036057600080fd5b806391d14854146102d8578063a217fddf1461031e57600080fd5b8063743e0c9b116100b2578063743e0c9b146102965780638456cb59146102a957806385f438c1146102b157600080fd5b80635c975abb146102785780635e3e9fef1461028357600080fd5b806321e093b1116101245780632f2ff15d116101095780632f2ff15d1461024a57806336568abe1461025d5780633f4ba83a1461027057600080fd5b806321e093b1146101f2578063248a9ca31461021957600080fd5b806301ffc9a71461015657806302d5c8991461017e578063106e629014610193578063116191b6146101a6575b600080fd5b6101696101643660046110c5565b610387565b60405190151581526020015b60405180910390f35b61019161018c366004611130565b610420565b005b6101916101a13660046111c2565b6105eb565b6101cd7f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610175565b6101cd7f000000000000000000000000000000000000000000000000000000000000000081565b61023c6102273660046111f5565b60009081526002602052604090206001015490565b604051908152602001610175565b61019161025836600461120e565b6106c6565b61019161026b36600461120e565b6106f1565b61019161074a565b60015460ff16610169565b610191610291366004611130565b61077f565b6101916102a43660046111f5565b610930565b61019161097a565b61023c7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b6101696102e636600461120e565b600091825260026020908152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b61023c600081565b61023c7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb81565b61019161035b36600461120e565b6109ac565b61023c7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061041a57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b6104286109d1565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461045281610a14565b61045a610a1e565b6104bb73ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000167f000000000000000000000000000000000000000000000000000000000000000087610a5d565b6040517fb8969bd400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063b8969bd490610555907f0000000000000000000000000000000000000000000000000000000000000000908a908a908a908a90600401611283565b600060405180830381600087803b15801561056f57600080fd5b505af1158015610583573d6000803e3d6000fd5b505050508573ffffffffffffffffffffffffffffffffffffffff167fba96f26bdda53eb8c8ba39045dfb4ff39753fbc7a6edcf250a88e75e78d102fe8686866040516105d1939291906112e0565b60405180910390a2506105e46001600055565b5050505050565b6105f36109d1565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461061d81610a14565b610625610a1e565b61066673ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168585610a5d565b8373ffffffffffffffffffffffffffffffffffffffff167f884edad9ce6fa2440d8a54cc123490eb96d2768479d49ff9c7366125a9424364846040516106ae91815260200190565b60405180910390a2506106c16001600055565b505050565b6000828152600260205260409020600101546106e181610a14565b6106eb8383610ade565b50505050565b73ffffffffffffffffffffffffffffffffffffffff81163314610740576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6106c18282610bde565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61077481610a14565b61077c610c9d565b50565b6107876109d1565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e46107b181610a14565b6107b9610a1e565b61081a73ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000167f000000000000000000000000000000000000000000000000000000000000000087610a5d565b6040517f5131ab5900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690635131ab59906108b4907f0000000000000000000000000000000000000000000000000000000000000000908a908a908a908a90600401611283565b600060405180830381600087803b1580156108ce57600080fd5b505af11580156108e2573d6000803e3d6000fd5b505050508573ffffffffffffffffffffffffffffffffffffffff167f7772f56296d3a5202974a45c61c9188d844ab4d6eeb18c851e4b8d5384ca6ced8686866040516105d1939291906112e0565b610938610a1e565b61077c73ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016333084610d1a565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a6109a481610a14565b61077c610d60565b6000828152600260205260409020600101546109c781610a14565b6106eb8383610bde565b600260005403610a0d576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b61077c8133610db9565b60015460ff1615610a5b576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b60405173ffffffffffffffffffffffffffffffffffffffff8381166024830152604482018390526106c191859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050610e4a565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff16610bd657600083815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff86168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055610b743390565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a450600161041a565b50600061041a565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff1615610bd657600083815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8616808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a450600161041a565b610ca5610ee0565b600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b60405173ffffffffffffffffffffffffffffffffffffffff84811660248301528381166044830152606482018390526106eb9186918216906323b872dd90608401610a97565b610d68610a1e565b600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016811790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25833610cf0565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16610e46576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82166004820152602481018390526044015b60405180910390fd5b5050565b6000610e6c73ffffffffffffffffffffffffffffffffffffffff841683610f1c565b90508051600014158015610e91575080806020019051810190610e8f9190611303565b155b156106c1576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84166004820152602401610e3d565b60015460ff16610a5b576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6060610f2a83836000610f31565b9392505050565b606081471015610f6f576040517fcd786059000000000000000000000000000000000000000000000000000000008152306004820152602401610e3d565b6000808573ffffffffffffffffffffffffffffffffffffffff168486604051610f989190611325565b60006040518083038185875af1925050503d8060008114610fd5576040519150601f19603f3d011682016040523d82523d6000602084013e610fda565b606091505b5091509150610fea868383610ff4565b9695505050505050565b6060826110095761100482611083565b610f2a565b815115801561102d575073ffffffffffffffffffffffffffffffffffffffff84163b155b1561107c576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85166004820152602401610e3d565b5080610f2a565b8051156110935780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000602082840312156110d757600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610f2a57600080fd5b803573ffffffffffffffffffffffffffffffffffffffff8116811461112b57600080fd5b919050565b60008060008060006080868803121561114857600080fd5b61115186611107565b945060208601359350604086013567ffffffffffffffff81111561117457600080fd5b8601601f8101881361118557600080fd5b803567ffffffffffffffff81111561119c57600080fd5b8860208284010111156111ae57600080fd5b959894975060200195606001359392505050565b6000806000606084860312156111d757600080fd5b6111e084611107565b95602085013595506040909401359392505050565b60006020828403121561120757600080fd5b5035919050565b6000806040838503121561122157600080fd5b8235915061123160208401611107565b90509250929050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff8616815273ffffffffffffffffffffffffffffffffffffffff851660208201528360408201526080606082015260006112d560808301848661123a565b979650505050505050565b8381526040602082015260006112fa60408301848661123a565b95945050505050565b60006020828403121561131557600080fd5b81518015158114610f2a57600080fd5b6000825160005b81811015611346576020818601810151858301520161132c565b50600092019182525091905056fea2646970667358221220b04453dff0090afb8a475e5970db3acd2d95039b4c5a72b1afb3fdac6383a65d64736f6c634300081a0033"; type ZetaConnectorNativeConstructorParams = | [signer?: Signer] diff --git a/v2/typechain-types/factories/ZetaConnectorNonNative__factory.ts b/v2/typechain-types/factories/ZetaConnectorNonNative__factory.ts index 242eb24a..88928539 100644 --- a/v2/typechain-types/factories/ZetaConnectorNonNative__factory.ts +++ b/v2/typechain-types/factories/ZetaConnectorNonNative__factory.ts @@ -72,6 +72,19 @@ const _abi = [ ], stateMutability: "view", }, + { + type: "function", + name: "TSS_ROLE", + inputs: [], + outputs: [ + { + name: "", + type: "bytes32", + internalType: "bytes32", + }, + ], + stateMutability: "view", + }, { type: "function", name: "WITHDRAWER_ROLE", @@ -604,7 +617,7 @@ const _abi = [ ] as const; const _bytecode = - "0x60c060405260001960035534801561001657600080fd5b506040516117f93803806117f9833981016040819052610035916101f5565b60016000819055805460ff19169055838383836001600160a01b038416158061006557506001600160a01b038316155b8061007757506001600160a01b038216155b8061008957506001600160a01b038116155b156100a75760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b03808516608052831660a0526100c5600082610129565b506100f07f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e483610129565b5061011b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a82610129565b505050505050505050610249565b60008281526002602090815260408083206001600160a01b038516845290915281205460ff166101cf5760008381526002602090815260408083206001600160a01b03861684529091529020805460ff191660011790556101873390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45060016101d3565b5060005b92915050565b80516001600160a01b03811681146101f057600080fd5b919050565b6000806000806080858703121561020b57600080fd5b610214856101d9565b9350610222602086016101d9565b9250610230604086016101d9565b915061023e606086016101d9565b905092959194509250565b60805160a0516115306102c9600039600081816102120152818161046f015281816105b1015281816106770152818161077c0152818161089e01528181610a5201528181610b9401528181610c5a0152610db10152600081816101c60152818161057b0152818161064801528181610b5e0152610c2b01526115306000f3fe608060405234801561001057600080fd5b506004361061016c5760003560e01c80635e3e9fef116100cd57806391d1485411610081578063d547741f11610066578063d547741f14610354578063d5abeb0114610367578063e63ab1e91461037057600080fd5b806391d1485414610306578063a217fddf1461034c57600080fd5b8063743e0c9b116100b2578063743e0c9b146102c45780638456cb59146102d757806385f438c1146102df57600080fd5b80635e3e9fef1461029e5780636f8b44b0146102b157600080fd5b8063248a9ca31161012457806336568abe1161010957806336568abe146102785780633f4ba83a1461028b5780635c975abb1461029357600080fd5b8063248a9ca3146102345780632f2ff15d1461026557600080fd5b8063106e629011610155578063106e6290146101ae578063116191b6146101c157806321e093b11461020d57600080fd5b806301ffc9a71461017157806302d5c89914610199575b600080fd5b61018461017f366004611262565b610397565b60405190151581526020015b60405180910390f35b6101ac6101a73660046112d4565b610430565b005b6101ac6101bc366004611366565b61073d565b6101e87f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610190565b6101e87f000000000000000000000000000000000000000000000000000000000000000081565b610257610242366004611399565b60009081526002602052604090206001015490565b604051908152602001610190565b6101ac6102733660046113b2565b61095a565b6101ac6102863660046113b2565b610985565b6101ac6109de565b60015460ff16610184565b6101ac6102ac3660046112d4565b610a13565b6101ac6102bf366004611399565b610d06565b6101ac6102d2366004611399565b610d74565b6101ac610e1e565b6102577f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b6101846103143660046113b2565b600091825260026020908152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b610257600081565b6101ac6103623660046113b2565b610e50565b61025760035481565b6102577f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061042a57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b610438610e75565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461046281610eb8565b61046a610ec2565b6003547f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156104d8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104fc91906113de565b61050690876113f7565b111561053e576040517fc30436e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f1e458bee00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116600483015260248201879052604482018490527f00000000000000000000000000000000000000000000000000000000000000001690631e458bee90606401600060405180830381600087803b1580156105f557600080fd5b505af1158015610609573d6000803e3d6000fd5b50506040517fb8969bd400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016925063b8969bd491506106a7907f0000000000000000000000000000000000000000000000000000000000000000908a908a908a908a9060040161147a565b600060405180830381600087803b1580156106c157600080fd5b505af11580156106d5573d6000803e3d6000fd5b505050508573ffffffffffffffffffffffffffffffffffffffff167fba96f26bdda53eb8c8ba39045dfb4ff39753fbc7a6edcf250a88e75e78d102fe868686604051610723939291906114d7565b60405180910390a2506107366001600055565b5050505050565b610745610e75565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461076f81610eb8565b610777610ec2565b6003547f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156107e5573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061080991906113de565b61081390856113f7565b111561084b576040517fc30436e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f1e458bee00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff858116600483015260248201859052604482018490527f00000000000000000000000000000000000000000000000000000000000000001690631e458bee90606401600060405180830381600087803b1580156108e257600080fd5b505af11580156108f6573d6000803e3d6000fd5b505050508373ffffffffffffffffffffffffffffffffffffffff167f884edad9ce6fa2440d8a54cc123490eb96d2768479d49ff9c7366125a94243648460405161094291815260200190565b60405180910390a2506109556001600055565b505050565b60008281526002602052604090206001015461097581610eb8565b61097f8383610f01565b50505050565b73ffffffffffffffffffffffffffffffffffffffff811633146109d4576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6109558282611001565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610a0881610eb8565b610a106110c0565b50565b610a1b610e75565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e4610a4581610eb8565b610a4d610ec2565b6003547f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610abb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610adf91906113de565b610ae990876113f7565b1115610b21576040517fc30436e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f1e458bee00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116600483015260248201879052604482018490527f00000000000000000000000000000000000000000000000000000000000000001690631e458bee90606401600060405180830381600087803b158015610bd857600080fd5b505af1158015610bec573d6000803e3d6000fd5b50506040517f5131ab5900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169250635131ab599150610c8a907f0000000000000000000000000000000000000000000000000000000000000000908a908a908a908a9060040161147a565b600060405180830381600087803b158015610ca457600080fd5b505af1158015610cb8573d6000803e3d6000fd5b505050508573ffffffffffffffffffffffffffffffffffffffff167f7772f56296d3a5202974a45c61c9188d844ab4d6eeb18c851e4b8d5384ca6ced868686604051610723939291906114d7565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e4610d3081610eb8565b610d38610ec2565b60038290556040518281527f7810bd47de260c3e9ee10061cf438099dd12256c79485f12f94dbccc981e806c9060200160405180910390a15050565b610d7c610ec2565b6040517f79cc6790000000000000000000000000000000000000000000000000000000008152336004820152602481018290527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16906379cc679090604401600060405180830381600087803b158015610e0a57600080fd5b505af1158015610736573d6000803e3d6000fd5b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610e4881610eb8565b610a1061113d565b600082815260026020526040902060010154610e6b81610eb8565b61097f8383611001565b600260005403610eb1576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b610a108133611196565b60015460ff1615610eff576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff16610ff957600083815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff86168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055610f973390565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a450600161042a565b50600061042a565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff1615610ff957600083815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8616808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a450600161042a565b6110c8611226565b600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b611145610ec2565b600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016811790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25833611113565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16611222576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff821660048201526024810183905260440160405180910390fd5b5050565b60015460ff16610eff576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006020828403121561127457600080fd5b81357fffffffff00000000000000000000000000000000000000000000000000000000811681146112a457600080fd5b9392505050565b803573ffffffffffffffffffffffffffffffffffffffff811681146112cf57600080fd5b919050565b6000806000806000608086880312156112ec57600080fd5b6112f5866112ab565b945060208601359350604086013567ffffffffffffffff81111561131857600080fd5b8601601f8101881361132957600080fd5b803567ffffffffffffffff81111561134057600080fd5b88602082840101111561135257600080fd5b959894975060200195606001359392505050565b60008060006060848603121561137b57600080fd5b611384846112ab565b95602085013595506040909401359392505050565b6000602082840312156113ab57600080fd5b5035919050565b600080604083850312156113c557600080fd5b823591506113d5602084016112ab565b90509250929050565b6000602082840312156113f057600080fd5b5051919050565b8082018082111561042a577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff8616815273ffffffffffffffffffffffffffffffffffffffff851660208201528360408201526080606082015260006114cc608083018486611431565b979650505050505050565b8381526040602082015260006114f1604083018486611431565b9594505050505056fea264697066735822122083f8ba25d15d0dacb4bf73d1472e680a549b02f1b26b83dcb21bfef553fb6e1d64736f6c634300081a0033"; + "0x60c060405260001960035534801561001657600080fd5b5060405161155a38038061155a83398101604081905261003591610220565b60016000819055805460ff19169055838383836001600160a01b038416158061006557506001600160a01b038316155b8061007757506001600160a01b038216155b8061008957506001600160a01b038116155b156100a75760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b03808516608052831660a0526100c5600082610154565b506100f07f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e483610154565b5061011b7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb83610154565b506101467f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a82610154565b505050505050505050610274565b60008281526002602090815260408083206001600160a01b038516845290915281205460ff166101fa5760008381526002602090815260408083206001600160a01b03861684529091529020805460ff191660011790556101b23390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45060016101fe565b5060005b92915050565b80516001600160a01b038116811461021b57600080fd5b919050565b6000806000806080858703121561023657600080fd5b61023f85610204565b935061024d60208601610204565b925061025b60408601610204565b915061026960608601610204565b905092959194509250565b60805160a0516112826102d86000396000818161021d01528181610531015281816108240152818161097b01528181610ad00152610bf20152600081816101d1015281816104a1015281816105040152818161079401526107f701526112826000f3fe608060405234801561001057600080fd5b50600436106101775760003560e01c80635e3e9fef116100d857806391d148541161008c578063d547741f11610066578063d547741f14610386578063d5abeb0114610399578063e63ab1e9146103a257600080fd5b806391d1485414610311578063a217fddf14610357578063a783c7891461035f57600080fd5b8063743e0c9b116100bd578063743e0c9b146102cf5780638456cb59146102e257806385f438c1146102ea57600080fd5b80635e3e9fef146102a95780636f8b44b0146102bc57600080fd5b8063248a9ca31161012f57806336568abe1161011457806336568abe146102835780633f4ba83a146102965780635c975abb1461029e57600080fd5b8063248a9ca31461023f5780632f2ff15d1461027057600080fd5b8063106e629011610160578063106e6290146101b9578063116191b6146101cc57806321e093b11461021857600080fd5b806301ffc9a71461017c57806302d5c899146101a4575b600080fd5b61018f61018a366004610fb4565b6103c9565b60405190151581526020015b60405180910390f35b6101b76101b2366004611026565b610462565b005b6101b76101c73660046110b8565b6105f7565b6101f37f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161019b565b6101f37f000000000000000000000000000000000000000000000000000000000000000081565b61026261024d3660046110eb565b60009081526002602052604090206001015490565b60405190815260200161019b565b6101b761027e366004611104565b61069c565b6101b7610291366004611104565b6106c7565b6101b7610720565b60015460ff1661018f565b6101b76102b7366004611026565b610755565b6101b76102ca3660046110eb565b6108d0565b6101b76102dd3660046110eb565b61093e565b6101b76109e8565b6102627f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b61018f61031f366004611104565b600091825260026020908152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b610262600081565b6102627f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb81565b6101b7610394366004611104565b610a1a565b61026260035481565b6102627f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061045c57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b61046a610a3f565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461049481610a82565b61049c610a8c565b6104c77f00000000000000000000000000000000000000000000000000000000000000008684610acb565b6040517fb8969bd400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063b8969bd490610561907f0000000000000000000000000000000000000000000000000000000000000000908a908a908a908a90600401611179565b600060405180830381600087803b15801561057b57600080fd5b505af115801561058f573d6000803e3d6000fd5b505050508573ffffffffffffffffffffffffffffffffffffffff167fba96f26bdda53eb8c8ba39045dfb4ff39753fbc7a6edcf250a88e75e78d102fe8686866040516105dd939291906111d6565b60405180910390a2506105f06001600055565b5050505050565b6105ff610a3f565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461062981610a82565b610631610a8c565b61063c848484610acb565b8373ffffffffffffffffffffffffffffffffffffffff167f884edad9ce6fa2440d8a54cc123490eb96d2768479d49ff9c7366125a94243648460405161068491815260200190565b60405180910390a2506106976001600055565b505050565b6000828152600260205260409020600101546106b781610a82565b6106c18383610c53565b50505050565b73ffffffffffffffffffffffffffffffffffffffff81163314610716576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6106978282610d53565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61074a81610a82565b610752610e12565b50565b61075d610a3f565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461078781610a82565b61078f610a8c565b6107ba7f00000000000000000000000000000000000000000000000000000000000000008684610acb565b6040517f5131ab5900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690635131ab5990610854907f0000000000000000000000000000000000000000000000000000000000000000908a908a908a908a90600401611179565b600060405180830381600087803b15801561086e57600080fd5b505af1158015610882573d6000803e3d6000fd5b505050508573ffffffffffffffffffffffffffffffffffffffff167f7772f56296d3a5202974a45c61c9188d844ab4d6eeb18c851e4b8d5384ca6ced8686866040516105dd939291906111d6565b7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb6108fa81610a82565b610902610a8c565b60038290556040518281527f7810bd47de260c3e9ee10061cf438099dd12256c79485f12f94dbccc981e806c9060200160405180910390a15050565b610946610a8c565b6040517f79cc6790000000000000000000000000000000000000000000000000000000008152336004820152602481018290527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16906379cc679090604401600060405180830381600087803b1580156109d457600080fd5b505af11580156105f0573d6000803e3d6000fd5b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610a1281610a82565b610752610e8f565b600082815260026020526040902060010154610a3581610a82565b6106c18383610d53565b600260005403610a7b576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b6107528133610ee8565b60015460ff1615610ac9576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6003547f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b39573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b5d91906111f9565b610b679084611212565b1115610b9f576040517fc30436e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f1e458bee00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff848116600483015260248201849052604482018390527f00000000000000000000000000000000000000000000000000000000000000001690631e458bee90606401600060405180830381600087803b158015610c3657600080fd5b505af1158015610c4a573d6000803e3d6000fd5b50505050505050565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff16610d4b57600083815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff86168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055610ce93390565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a450600161045c565b50600061045c565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff1615610d4b57600083815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8616808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a450600161045c565b610e1a610f78565b600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b610e97610a8c565b600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016811790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25833610e65565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16610f74576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff821660048201526024810183905260440160405180910390fd5b5050565b60015460ff16610ac9576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060208284031215610fc657600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610ff657600080fd5b9392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461102157600080fd5b919050565b60008060008060006080868803121561103e57600080fd5b61104786610ffd565b945060208601359350604086013567ffffffffffffffff81111561106a57600080fd5b8601601f8101881361107b57600080fd5b803567ffffffffffffffff81111561109257600080fd5b8860208284010111156110a457600080fd5b959894975060200195606001359392505050565b6000806000606084860312156110cd57600080fd5b6110d684610ffd565b95602085013595506040909401359392505050565b6000602082840312156110fd57600080fd5b5035919050565b6000806040838503121561111757600080fd5b8235915061112760208401610ffd565b90509250929050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff8616815273ffffffffffffffffffffffffffffffffffffffff851660208201528360408201526080606082015260006111cb608083018486611130565b979650505050505050565b8381526040602082015260006111f0604083018486611130565b95945050505050565b60006020828403121561120b57600080fd5b5051919050565b8082018082111561045c577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea2646970667358221220f784eb6e1655c2988d3f762737188cfee07a61da1d5b8456cc4f4e55cb339cfb64736f6c634300081a0033"; type ZetaConnectorNonNativeConstructorParams = | [signer?: Signer] From c3e2dca15ef6038b2c8b8f939af35e2580169037 Mon Sep 17 00:00:00 2001 From: skosito Date: Thu, 8 Aug 2024 00:54:53 +0200 Subject: [PATCH 13/21] add whitelist to erc20 custody --- v2/src/evm/ERC20Custody.sol | 26 +++++++++ v2/src/evm/interfaces/IERC20Custody.sol | 10 ++++ v2/test/ERC20Custody.t.sol | 70 +++++++++++++++++++++++++ 3 files changed, 106 insertions(+) diff --git a/v2/src/evm/ERC20Custody.sol b/v2/src/evm/ERC20Custody.sol index c33df59a..d09e1656 100644 --- a/v2/src/evm/ERC20Custody.sol +++ b/v2/src/evm/ERC20Custody.sol @@ -18,10 +18,14 @@ contract ERC20Custody is IERC20CustodyEvents, IERC20CustodyErrors, ReentrancyGua /// @notice Gateway contract. IGatewayEVM public immutable gateway; + /// @notice Mapping of whitelisted tokens => true/false. + mapping(address => bool) public whitelisted; /// @notice New role identifier for pauser role. bytes32 public constant PAUSER_ROLE = keccak256("PAUSER_ROLE"); /// @notice New role identifier for withdrawer role. bytes32 public constant WITHDRAWER_ROLE = keccak256("WITHDRAWER_ROLE"); + /// @notice New role identifier for whitelister role. + bytes32 public constant WHITELISTER_ROLE = keccak256("WHITELISTER_ROLE"); /// @notice Constructor for ERC20Custody. /// @dev Set admin as default admin and pauser, and tssAddress as tss role. @@ -33,6 +37,8 @@ contract ERC20Custody is IERC20CustodyEvents, IERC20CustodyErrors, ReentrancyGua _grantRole(DEFAULT_ADMIN_ROLE, admin_); _grantRole(PAUSER_ROLE, admin_); _grantRole(WITHDRAWER_ROLE, tssAddress_); + _grantRole(WHITELISTER_ROLE, admin_); + _grantRole(WHITELISTER_ROLE, tssAddress_); } /// @notice Pause contract. @@ -45,6 +51,20 @@ contract ERC20Custody is IERC20CustodyEvents, IERC20CustodyErrors, ReentrancyGua _unpause(); } + /// @notice Whitelist ERC20 token. + /// @param token address of ERC20 token + function whitelist(address token) external onlyRole(WHITELISTER_ROLE) { + whitelisted[token] = true; + emit Whitelisted(token); + } + + /// @notice Unwhitelist ERC20 token. + /// @param token address of ERC20 token + function unwhitelist(address token) external onlyRole(WHITELISTER_ROLE) { + whitelisted[token] = false; + emit Unwhitelisted(token); + } + /// @notice Withdraw directly transfers the tokens to the destination address without contract call. /// @dev This function can only be called by the TSS address. /// @param token Address of the ERC20 token. @@ -60,6 +80,8 @@ contract ERC20Custody is IERC20CustodyEvents, IERC20CustodyErrors, ReentrancyGua onlyRole(WITHDRAWER_ROLE) whenNotPaused { + if (!whitelisted[token]) revert NotWhitelisted(); + IERC20(token).safeTransfer(to, amount); emit Withdraw(token, to, amount); @@ -82,6 +104,8 @@ contract ERC20Custody is IERC20CustodyEvents, IERC20CustodyErrors, ReentrancyGua onlyRole(WITHDRAWER_ROLE) whenNotPaused { + if (!whitelisted[token]) revert NotWhitelisted(); + // Transfer the tokens to the Gateway contract IERC20(token).safeTransfer(address(gateway), amount); @@ -109,6 +133,8 @@ contract ERC20Custody is IERC20CustodyEvents, IERC20CustodyErrors, ReentrancyGua onlyRole(WITHDRAWER_ROLE) whenNotPaused { + if (!whitelisted[token]) revert NotWhitelisted(); + // Transfer the tokens to the Gateway contract IERC20(token).safeTransfer(address(gateway), amount); diff --git a/v2/src/evm/interfaces/IERC20Custody.sol b/v2/src/evm/interfaces/IERC20Custody.sol index 9ef282e2..4338d2fa 100644 --- a/v2/src/evm/interfaces/IERC20Custody.sol +++ b/v2/src/evm/interfaces/IERC20Custody.sol @@ -23,6 +23,14 @@ interface IERC20CustodyEvents { /// @param amount The amount of tokens withdrawn. /// @param data The calldata passed to the contract call. event WithdrawAndRevert(address indexed token, address indexed to, uint256 amount, bytes data); + + /// @notice Emitted when ERC20 token is whitelisted + /// @param token address of ERC20 token. + event Whitelisted(address indexed token); + + /// @notice Emitted when ERC20 token is unwhitelisted + /// @param token address of ERC20 token. + event Unwhitelisted(address indexed token); } /// @title IERC20CustodyErrors @@ -30,4 +38,6 @@ interface IERC20CustodyEvents { interface IERC20CustodyErrors { /// @notice Error for zero address input. error ZeroAddress(); + /// @notice Error for not whitelisted ERC20 token + error NotWhitelisted(); } diff --git a/v2/test/ERC20Custody.t.sol b/v2/test/ERC20Custody.t.sol index 36c92080..306354f1 100644 --- a/v2/test/ERC20Custody.t.sol +++ b/v2/test/ERC20Custody.t.sol @@ -35,12 +35,14 @@ contract ERC20CustodyTest is Test, IGatewayEVMErrors, IGatewayEVMEvents, IReceiv address tssAddress; error EnforcedPause(); + error NotWhitelisted(); error AccessControlUnauthorizedAccount(address account, bytes32 neededRole); bytes32 public constant TSS_ROLE = keccak256("TSS_ROLE"); bytes32 public constant WITHDRAWER_ROLE = keccak256("WITHDRAWER_ROLE"); bytes32 public constant ASSET_HANDLER_ROLE = keccak256("ASSET_HANDLER_ROLE"); bytes32 public constant PAUSER_ROLE = keccak256("PAUSER_ROLE"); + bytes32 public constant WHITELISTER_ROLE = keccak256("WHITELISTER_ROLE"); function setUp() public { owner = address(this); @@ -63,6 +65,8 @@ contract ERC20CustodyTest is Test, IGatewayEVMErrors, IGatewayEVMEvents, IReceiv vm.startPrank(owner); gateway.setCustody(address(custody)); gateway.setConnector(address(zetaConnector)); + + custody.whitelist(address(token)); vm.stopPrank(); token.mint(owner, 1_000_000); @@ -71,6 +75,44 @@ contract ERC20CustodyTest is Test, IGatewayEVMErrors, IGatewayEVMEvents, IReceiv vm.deal(tssAddress, 1 ether); } + function testWhitelistFailsIfSenderIsNotWhitelister() public { + vm.prank(address(0x123)); + vm.expectRevert(abi.encodeWithSelector(AccessControlUnauthorizedAccount.selector, address(0x123), WHITELISTER_ROLE)); + custody.whitelist(address(zeta)); + } + + function testUnwhitelistFailsIfSenderIsNotWhitelister() public { + vm.prank(address(0x123)); + vm.expectRevert(abi.encodeWithSelector(AccessControlUnauthorizedAccount.selector, address(0x123), WHITELISTER_ROLE)); + custody.unwhitelist(address(zeta)); + } + + function testWhitelist() public { + bool whitelisted = custody.whitelisted(address(zeta)); + assertEq(false, whitelisted); + + vm.expectEmit(true, true, true, true, address(custody)); + emit Whitelisted(address(zeta)); + vm.prank(owner); + custody.whitelist(address(zeta)); + + whitelisted = custody.whitelisted(address(zeta)); + assertEq(true, whitelisted); + } + + function testUnwhitelist() public { + bool whitelisted = custody.whitelisted(address(token)); + assertEq(true, whitelisted); + + vm.expectEmit(true, true, true, true, address(custody)); + emit Unwhitelisted(address(token)); + vm.prank(owner); + custody.unwhitelist(address(token)); + + whitelisted = custody.whitelisted(address(token)); + assertEq(false, whitelisted); + } + function testNewCustodyFailsIfAddressesAreZero() public { vm.expectRevert(ZeroAddress.selector); ERC20Custody newCustody = new ERC20Custody(address(0), tssAddress, owner); @@ -288,6 +330,34 @@ contract ERC20CustodyTest is Test, IGatewayEVMErrors, IGatewayEVMEvents, IReceiv assertEq(balanceGateway, 0); } + function testWithdrawFailsIfTokenIsNotWhitelisted() public { + vm.startPrank(tssAddress); + custody.unwhitelist(address(token)); + vm.expectRevert(NotWhitelisted.selector); + custody.withdraw(address(token), destination, 1); + vm.stopPrank(); + } + + function testWithdrawAndCallFailsIfTokenIsNotWhitelisted() public { + bytes memory data = + abi.encodeWithSignature("receiveERC20(uint256,address,address)", 1, address(token), destination); + vm.startPrank(tssAddress); + custody.unwhitelist(address(token)); + vm.expectRevert(NotWhitelisted.selector); + custody.withdrawAndCall(address(token), address(receiver), 1, data); + vm.stopPrank(); + } + + function testWithdrawAndRevertFailsIfTokenIsNotWhitelisted() public { + bytes memory data = + abi.encodeWithSignature("receiveERC20(uint256,address,address)", 1, address(token), destination); + vm.startPrank(tssAddress); + custody.unwhitelist(address(token)); + vm.expectRevert(NotWhitelisted.selector); + custody.withdrawAndRevert(address(token), address(receiver), 1, data); + vm.stopPrank(); + } + function testWithdrawThroughCustody() public { uint256 amount = 100_000; uint256 balanceBefore = token.balanceOf(destination); From 577754364477a2293e200ea400dfaee973b9af3c Mon Sep 17 00:00:00 2001 From: skosito Date: Thu, 8 Aug 2024 01:03:13 +0200 Subject: [PATCH 14/21] add erc20custody interface and cleanup interfaces --- v2/src/evm/ERC20Custody.sol | 2 +- v2/src/evm/GatewayEVM.sol | 3 +- v2/src/evm/interfaces/IERC20Custody.sol | 43 ++++++++ v2/src/evm/interfaces/IGatewayEVM.sol | 5 +- v2/src/zevm/GatewayZEVM.sol | 2 - v2/src/zevm/interfaces/IGatewayZEVM.sol | 140 ++++++++++++------------ 6 files changed, 119 insertions(+), 76 deletions(-) diff --git a/v2/src/evm/ERC20Custody.sol b/v2/src/evm/ERC20Custody.sol index d09e1656..a389b1c5 100644 --- a/v2/src/evm/ERC20Custody.sol +++ b/v2/src/evm/ERC20Custody.sol @@ -13,7 +13,7 @@ import "@openzeppelin/contracts/utils/ReentrancyGuard.sol"; /// @title ERC20Custody /// @notice Holds the ERC20 tokens deposited on ZetaChain and includes functionality to call a contract. /// @dev This contract does not call smart contracts directly, it passes through the Gateway contract. -contract ERC20Custody is IERC20CustodyEvents, IERC20CustodyErrors, ReentrancyGuard, AccessControl, Pausable { +contract ERC20Custody is IERC20Custody, ReentrancyGuard, AccessControl, Pausable { using SafeERC20 for IERC20; /// @notice Gateway contract. diff --git a/v2/src/evm/GatewayEVM.sol b/v2/src/evm/GatewayEVM.sol index 1edf85d5..12970b4d 100644 --- a/v2/src/evm/GatewayEVM.sol +++ b/v2/src/evm/GatewayEVM.sol @@ -3,6 +3,7 @@ pragma solidity 0.8.26; import "./ZetaConnectorBase.sol"; import "./interfaces/IGatewayEVM.sol"; +import "./interfaces/IERC20Custody.sol"; import "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol"; import "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol"; @@ -20,8 +21,6 @@ contract GatewayEVM is AccessControlUpgradeable, UUPSUpgradeable, IGatewayEVM, - IGatewayEVMErrors, - IGatewayEVMEvents, ReentrancyGuardUpgradeable, PausableUpgradeable { diff --git a/v2/src/evm/interfaces/IERC20Custody.sol b/v2/src/evm/interfaces/IERC20Custody.sol index 4338d2fa..840132e5 100644 --- a/v2/src/evm/interfaces/IERC20Custody.sol +++ b/v2/src/evm/interfaces/IERC20Custody.sol @@ -41,3 +41,46 @@ interface IERC20CustodyErrors { /// @notice Error for not whitelisted ERC20 token error NotWhitelisted(); } + +interface IERC20Custody is IERC20CustodyEvents, IERC20CustodyErrors { + /// @notice Mapping of whitelisted tokens => true/false. + function whitelisted(address token) external view returns (bool); + + /// @notice Withdraw directly transfers the tokens to the destination address without contract call. + /// @dev This function can only be called by the TSS address. + /// @param token Address of the ERC20 token. + /// @param to Destination address for the tokens. + /// @param amount Amount of tokens to withdraw. + function withdraw( + address token, + address to, + uint256 amount + ) external; + + /// @notice WithdrawAndCall transfers tokens to Gateway and call a contract through the Gateway. + /// @dev This function can only be called by the TSS address. + /// @param token Address of the ERC20 token. + /// @param to Address of the contract to call. + /// @param amount Amount of tokens to withdraw. + /// @param data Calldata to pass to the contract call. + function withdrawAndCall( + address token, + address to, + uint256 amount, + bytes calldata data + ) external; + + /// @notice WithdrawAndRevert transfers tokens to Gateway and call a contract with a revert functionality through + /// the Gateway. + /// @dev This function can only be called by the TSS address. + /// @param token Address of the ERC20 token. + /// @param to Address of the contract to call. + /// @param amount Amount of tokens to withdraw. + /// @param data Calldata to pass to the contract call. + function withdrawAndRevert( + address token, + address to, + uint256 amount, + bytes calldata data + ) external; +} \ No newline at end of file diff --git a/v2/src/evm/interfaces/IGatewayEVM.sol b/v2/src/evm/interfaces/IGatewayEVM.sol index a76cd62e..b397f81b 100644 --- a/v2/src/evm/interfaces/IGatewayEVM.sol +++ b/v2/src/evm/interfaces/IGatewayEVM.sol @@ -71,11 +71,14 @@ interface IGatewayEVMErrors { /// @notice Error for already initialized connector. error ConnectorInitialized(); + + /// @notice Error when trying to transfer not whitelisted token to custody. + error NotWhitelistedInCustody(); } /// @title IGatewayEVM /// @notice Interface for the GatewayEVM contract. -interface IGatewayEVM { +interface IGatewayEVM is IGatewayEVMErrors, IGatewayEVMEvents { /// @notice Executes a call to a contract using ERC20 tokens. /// @param token The address of the ERC20 token. /// @param to The address of the contract to call. diff --git a/v2/src/zevm/GatewayZEVM.sol b/v2/src/zevm/GatewayZEVM.sol index 31caab35..e3ac6fe9 100644 --- a/v2/src/zevm/GatewayZEVM.sol +++ b/v2/src/zevm/GatewayZEVM.sol @@ -17,8 +17,6 @@ import "@openzeppelin/contracts-upgradeable/utils/ReentrancyGuardUpgradeable.sol /// @dev The contract doesn't hold any funds and should never have active allowances. contract GatewayZEVM is IGatewayZEVM, - IGatewayZEVMEvents, - IGatewayZEVMErrors, Initializable, AccessControlUpgradeable, UUPSUpgradeable, diff --git a/v2/src/zevm/interfaces/IGatewayZEVM.sol b/v2/src/zevm/interfaces/IGatewayZEVM.sol index c20fe1f4..3798e7af 100644 --- a/v2/src/zevm/interfaces/IGatewayZEVM.sol +++ b/v2/src/zevm/interfaces/IGatewayZEVM.sol @@ -3,10 +3,78 @@ pragma solidity 0.8.26; import "./zContract.sol"; +/// @title IGatewayZEVMEvents +/// @notice Interface for the events emitted by the GatewayZEVM contract. +interface IGatewayZEVMEvents { + /// @notice Emitted when a cross-chain call is made. + /// @param sender The address of the sender. + /// @param chainId Chain id of external chain. + /// @param receiver The receiver address on the external chain. + /// @param message The calldata passed to the contract call. + event Call(address indexed sender, uint256 indexed chainId, bytes receiver, bytes message); + + /// @notice Emitted when a withdrawal is made. + /// @param sender The address from which the tokens are withdrawn. + /// @param chainId Chain id of external chain. + /// @param receiver The receiver address on the external chain. + /// @param zrc20 The address of the ZRC20 token. + /// @param value The amount of tokens withdrawn. + /// @param gasfee The gas fee for the withdrawal. + /// @param protocolFlatFee The protocol flat fee for the withdrawal. + /// @param message The calldata passed to the contract call. + event Withdrawal( + address indexed sender, + uint256 indexed chainId, + bytes receiver, + address zrc20, + uint256 value, + uint256 gasfee, + uint256 protocolFlatFee, + bytes message + ); +} + +/// @title IGatewayZEVMErrors +/// @notice Interface for the errors used in the GatewayZEVM contract. +interface IGatewayZEVMErrors { + /// @notice Error indicating a withdrawal failure. + error WithdrawalFailed(); + + /// @notice Error indicating an insufficient ZRC20 token amount. + error InsufficientZRC20Amount(); + + /// @notice Error indicating an insufficient zeta amount. + error InsufficientZetaAmount(); + + /// @notice Error indicating a failure to burn ZRC20 tokens. + error ZRC20BurnFailed(); + + /// @notice Error indicating a failure to transfer ZRC20 tokens. + error ZRC20TransferFailed(); + + /// @notice Error indicating a failure to deposit ZRC20 tokens. + error ZRC20DepositFailed(); + + /// @notice Error indicating a failure to transfer gas fee. + error GasFeeTransferFailed(); + + /// @notice Error indicating that the caller is not the Fungible module. + error CallerIsNotFungibleModule(); + + /// @notice Error indicating an invalid target address. + error InvalidTarget(); + + /// @notice Error indicating a failure to send ZETA tokens. + error FailedZetaSent(); + + /// @notice Error indicating that only WZETA or the Fungible module can call the function. + error OnlyWZETAOrFungible(); +} + /// @title IGatewayZEVM /// @notice Interface for the GatewayZEVM contract. /// @dev Defines functions for cross-chain interactions and token handling. -interface IGatewayZEVM { +interface IGatewayZEVM is IGatewayZEVMErrors, IGatewayZEVMEvents { /// @notice Withdraw ZRC20 tokens to an external chain. /// @param receiver The receiver address on the external chain. /// @param amount The amount of tokens to withdraw. @@ -114,72 +182,4 @@ interface IGatewayZEVM { bytes calldata message ) external; -} - -/// @title IGatewayZEVMEvents -/// @notice Interface for the events emitted by the GatewayZEVM contract. -interface IGatewayZEVMEvents { - /// @notice Emitted when a cross-chain call is made. - /// @param sender The address of the sender. - /// @param chainId Chain id of external chain. - /// @param receiver The receiver address on the external chain. - /// @param message The calldata passed to the contract call. - event Call(address indexed sender, uint256 indexed chainId, bytes receiver, bytes message); - - /// @notice Emitted when a withdrawal is made. - /// @param sender The address from which the tokens are withdrawn. - /// @param chainId Chain id of external chain. - /// @param receiver The receiver address on the external chain. - /// @param zrc20 The address of the ZRC20 token. - /// @param value The amount of tokens withdrawn. - /// @param gasfee The gas fee for the withdrawal. - /// @param protocolFlatFee The protocol flat fee for the withdrawal. - /// @param message The calldata passed to the contract call. - event Withdrawal( - address indexed sender, - uint256 indexed chainId, - bytes receiver, - address zrc20, - uint256 value, - uint256 gasfee, - uint256 protocolFlatFee, - bytes message - ); -} - -/// @title IGatewayZEVMErrors -/// @notice Interface for the errors used in the GatewayZEVM contract. -interface IGatewayZEVMErrors { - /// @notice Error indicating a withdrawal failure. - error WithdrawalFailed(); - - /// @notice Error indicating an insufficient ZRC20 token amount. - error InsufficientZRC20Amount(); - - /// @notice Error indicating an insufficient zeta amount. - error InsufficientZetaAmount(); - - /// @notice Error indicating a failure to burn ZRC20 tokens. - error ZRC20BurnFailed(); - - /// @notice Error indicating a failure to transfer ZRC20 tokens. - error ZRC20TransferFailed(); - - /// @notice Error indicating a failure to deposit ZRC20 tokens. - error ZRC20DepositFailed(); - - /// @notice Error indicating a failure to transfer gas fee. - error GasFeeTransferFailed(); - - /// @notice Error indicating that the caller is not the Fungible module. - error CallerIsNotFungibleModule(); - - /// @notice Error indicating an invalid target address. - error InvalidTarget(); - - /// @notice Error indicating a failure to send ZETA tokens. - error FailedZetaSent(); - - /// @notice Error indicating that only WZETA or the Fungible module can call the function. - error OnlyWZETAOrFungible(); -} +} \ No newline at end of file From 7ac1ef941913bb4e93e0bb23ce560ecf1bd54624 Mon Sep 17 00:00:00 2001 From: skosito Date: Thu, 8 Aug 2024 01:08:15 +0200 Subject: [PATCH 15/21] add whitelist checks when sending from gateway to custody --- v2/src/evm/GatewayEVM.sol | 2 ++ v2/test/GatewayEVM.t.sol | 26 ++++++++++++++++++++++++++ 2 files changed, 28 insertions(+) diff --git a/v2/src/evm/GatewayEVM.sol b/v2/src/evm/GatewayEVM.sol index 12970b4d..39fbb801 100644 --- a/v2/src/evm/GatewayEVM.sol +++ b/v2/src/evm/GatewayEVM.sol @@ -317,6 +317,7 @@ contract GatewayEVM is ZetaConnectorBase(zetaConnector).receiveTokens(amount); } else { // transfer to custody + if (!IERC20Custody(custody).whitelisted(token)) revert NotWhitelistedInCustody(); IERC20(token).safeTransferFrom(from, custody, amount); } } @@ -335,6 +336,7 @@ contract GatewayEVM is ZetaConnectorBase(zetaConnector).receiveTokens(amount); } else { // transfer to custody + if (!IERC20Custody(custody).whitelisted(token)) revert NotWhitelistedInCustody(); IERC20(token).safeTransfer(custody, amount); } } diff --git a/v2/test/GatewayEVM.t.sol b/v2/test/GatewayEVM.t.sol index bf7fb903..ed0514f3 100644 --- a/v2/test/GatewayEVM.t.sol +++ b/v2/test/GatewayEVM.t.sol @@ -310,6 +310,8 @@ contract GatewayEVMInboundTest is Test, IGatewayEVMErrors, IGatewayEVMEvents, IR vm.startPrank(owner); gateway.setCustody(address(custody)); gateway.setConnector(address(zetaConnector)); + + custody.whitelist(address(token)); vm.stopPrank(); token.mint(owner, ownerAmount); @@ -335,6 +337,17 @@ contract GatewayEVMInboundTest is Test, IGatewayEVMErrors, IGatewayEVMEvents, IR assertEq(ownerAmount - amount, ownerAmountAfter); } + function testDepositERC20ToCustodyFailsIfTokenIsNotWhitelisted() public { + uint256 amount = 100_000; + token.approve(address(gateway), amount); + + vm.prank(owner); + custody.unwhitelist(address(token)); + + vm.expectRevert(NotWhitelistedInCustody.selector); + gateway.deposit(destination, amount, address(token)); + } + function testDepositZetaToConnector() public { uint256 amount = 100_000; zeta.approve(address(gateway), amount); @@ -388,6 +401,19 @@ contract GatewayEVMInboundTest is Test, IGatewayEVMErrors, IGatewayEVMEvents, IR gateway.deposit{ value: amount }(address(0)); } + function testDepositERC20ToCustodyWithPayloadFailsIfTokenIsNotWhitelisted() public { + uint256 amount = 100_000; + bytes memory payload = abi.encodeWithSignature("hello(address)", destination); + + token.approve(address(gateway), amount); + + vm.prank(owner); + custody.unwhitelist(address(token)); + + vm.expectRevert(NotWhitelistedInCustody.selector); + gateway.depositAndCall(destination, amount, address(token), payload); + } + function testDepositERC20ToCustodyWithPayload() public { uint256 amount = 100_000; uint256 custodyBalanceBefore = token.balanceOf(address(custody)); From c45cd1fbc2d1322b8782186eb00ca84b94cfece7 Mon Sep 17 00:00:00 2001 From: skosito Date: Thu, 8 Aug 2024 01:09:08 +0200 Subject: [PATCH 16/21] generate --- v2/pkg/erc20custody.sol/erc20custody.go | 396 ++++++- v2/pkg/erc20custody.t.sol/erc20custodytest.go | 470 +++++++- .../erc20custodyechidnatest.go | 396 ++++++- v2/pkg/gatewayevm.sol/gatewayevm.go | 4 +- .../gatewayevm.t.sol/gatewayevminboundtest.go | 46 +- v2/pkg/gatewayevm.t.sol/gatewayevmtest.go | 292 ++++- .../gatewayevmechidnatest.go | 4 +- .../gatewayevmuupsupgradetest.go | 4 +- .../gatewayevmupgradetest.go | 4 +- .../gatewayevmzevmtest.go | 4 +- v2/pkg/gatewayzevm.sol/gatewayzevm.go | 2 +- .../gatewayzevminboundtest.go | 2 +- .../gatewayzevmoutboundtest.go | 2 +- v2/pkg/ierc20custody.sol/ierc20custody.go | 1027 +++++++++++++++++ .../ierc20custody.sol/ierc20custodyerrors.go | 2 +- .../ierc20custody.sol/ierc20custodyevents.go | 290 ++++- v2/pkg/igatewayevm.sol/igatewayevm.go | 914 ++++++++++++++- v2/pkg/igatewayevm.sol/igatewayevmerrors.go | 2 +- v2/pkg/igatewayzevm.sol/igatewayzevm.go | 316 ++++- v2/pkg/senderzevm.sol/senderzevm.go | 2 +- .../zetaconnectornative.go | 2 +- .../zetaconnectornativetest.go | 4 +- .../zetaconnectornonnative.go | 2 +- .../zetaconnectornonnativetest.go | 4 +- v2/pkg/zrc20.t.sol/zrc20test.go | 2 +- v2/src/evm/GatewayEVM.sol | 3 +- v2/src/evm/interfaces/IERC20Custody.sol | 22 +- v2/src/zevm/interfaces/IGatewayZEVM.sol | 2 +- v2/test/ERC20Custody.t.sol | 10 +- v2/typechain-types/ERC20Custody.ts | 115 ++ v2/typechain-types/ERC20CustodyEchidnaTest.ts | 115 ++ .../IERC20Custody.sol/IERC20Custody.ts | 372 ++++++ .../IERC20Custody.sol/IERC20CustodyEvents.ts | 67 +- v2/typechain-types/IERC20Custody.sol/index.ts | 1 + .../IGatewayEVM.sol/IGatewayEVM.ts | 255 +++- .../IGatewayZEVM.sol/IGatewayZEVM.ts | 105 +- .../ERC20CustodyEchidnaTest__factory.ts | 91 +- .../factories/ERC20Custody__factory.ts | 91 +- .../GatewayEVMEchidnaTest__factory.ts | 7 +- .../GatewayEVMUpgradeTest__factory.ts | 7 +- .../factories/GatewayEVM__factory.ts | 7 +- .../factories/GatewayZEVM__factory.ts | 2 +- .../IERC20CustodyErrors__factory.ts | 5 + .../IERC20CustodyEvents__factory.ts | 26 + .../IERC20Custody__factory.ts | 246 ++++ .../factories/IERC20Custody.sol/index.ts | 1 + .../IGatewayEVMErrors__factory.ts | 5 + .../IGatewayEVM.sol/IGatewayEVM__factory.ts | 219 ++++ .../IGatewayZEVM.sol/IGatewayZEVM__factory.ts | 141 +++ .../factories/SenderZEVM__factory.ts | 2 +- .../factories/ZetaConnectorNative__factory.ts | 2 +- .../ZetaConnectorNonNative__factory.ts | 2 +- v2/typechain-types/index.ts | 2 + 53 files changed, 6045 insertions(+), 71 deletions(-) create mode 100644 v2/pkg/ierc20custody.sol/ierc20custody.go create mode 100644 v2/typechain-types/IERC20Custody.sol/IERC20Custody.ts create mode 100644 v2/typechain-types/factories/IERC20Custody.sol/IERC20Custody__factory.ts diff --git a/v2/pkg/erc20custody.sol/erc20custody.go b/v2/pkg/erc20custody.sol/erc20custody.go index 171dff42..4438f45f 100644 --- a/v2/pkg/erc20custody.sol/erc20custody.go +++ b/v2/pkg/erc20custody.sol/erc20custody.go @@ -31,8 +31,8 @@ var ( // ERC20CustodyMetaData contains all meta data concerning the ERC20Custody contract. var ERC20CustodyMetaData = &bind.MetaData{ - ABI: "[{\"type\":\"constructor\",\"inputs\":[{\"name\":\"gateway_\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"tssAddress_\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"admin_\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"DEFAULT_ADMIN_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"PAUSER_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"WITHDRAWER_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"gateway\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIGatewayEVM\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getRoleAdmin\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"grantRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"hasRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"pause\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"paused\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"renounceRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"callerConfirmation\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"revokeRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"supportsInterface\",\"inputs\":[{\"name\":\"interfaceId\",\"type\":\"bytes4\",\"internalType\":\"bytes4\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"unpause\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"withdraw\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"withdrawAndCall\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"withdrawAndRevert\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"event\",\"name\":\"Paused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleAdminChanged\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"previousAdminRole\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"newAdminRole\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleGranted\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleRevoked\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Unpaused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Withdraw\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"WithdrawAndCall\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"WithdrawAndRevert\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"AccessControlBadConfirmation\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"AccessControlUnauthorizedAccount\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"neededRole\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"type\":\"error\",\"name\":\"AddressEmptyCode\",\"inputs\":[{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"AddressInsufficientBalance\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"EnforcedPause\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ExpectedPause\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"FailedInnerCall\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ReentrancyGuardReentrantCall\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"SafeERC20FailedOperation\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"ZeroAddress\",\"inputs\":[]}]", - Bin: "0x60a060405234801561001057600080fd5b5060405161140b38038061140b83398101604081905261002f916101b3565b60016000556002805460ff191690556001600160a01b038316158061005b57506001600160a01b038216155b8061006d57506001600160a01b038116155b1561008b5760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b0383166080526100a3600082610102565b506100ce7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a82610102565b506100f97f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e483610102565b505050506101f6565b60008281526001602090815260408083206001600160a01b038516845290915281205460ff1661018d5760008381526001602081815260408084206001600160a01b0387168086529252808420805460ff19169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a4506001610191565b5060005b92915050565b80516001600160a01b03811681146101ae57600080fd5b919050565b6000806000606084860312156101c857600080fd5b6101d184610197565b92506101df60208501610197565b91506101ed60408501610197565b90509250925092565b6080516111de61022d60003960008181610132015281816103c5015281816104270152818161065801526106ba01526111de6000f3fe608060405234801561001057600080fd5b50600436106101005760003560e01c80638456cb5911610097578063c8a0236211610066578063c8a0236214610276578063d547741f14610289578063d9caed121461029c578063e63ab1e9146102af57600080fd5b80638456cb59146101f957806385f438c11461020157806391d1485414610228578063a217fddf1461026e57600080fd5b80632f2ff15d116100d35780632f2ff15d146101c057806336568abe146101d35780633f4ba83a146101e65780635c975abb146101ee57600080fd5b806301ffc9a714610105578063116191b61461012d57806321fc65f214610179578063248a9ca31461018e575b600080fd5b610118610113366004610f04565b6102d6565b60405190151581526020015b60405180910390f35b6101547f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610124565b61018c610187366004610f6f565b61036f565b005b6101b261019c36600461100c565b6000908152600160208190526040909120015490565b604051908152602001610124565b61018c6101ce366004611025565b610511565b61018c6101e1366004611025565b61053d565b61018c61059b565b60025460ff16610118565b61018c6105d0565b6101b27f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b610118610236366004611025565b600091825260016020908152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b6101b2600081565b61018c610284366004610f6f565b610602565b61018c610297366004611025565b61078a565b61018c6102aa366004611051565b6107b0565b6101b27f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061036957507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b61037761087d565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e46103a1816108c0565b6103a96108ca565b6103ea73ffffffffffffffffffffffffffffffffffffffff87167f000000000000000000000000000000000000000000000000000000000000000086610909565b6040517f5131ab5900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690635131ab599061046490899089908990899089906004016110d7565b600060405180830381600087803b15801561047e57600080fd5b505af1158015610492573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167f85b5be9cf454e05e0bddf49315178102227c312078eefa3c00294fb4d912ae4e8686866040516104f793929190611134565b60405180910390a35061050a6001600055565b5050505050565b6000828152600160208190526040909120015461052d816108c0565b6105378383610996565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8116331461058c576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6105968282610a61565b505050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a6105c5816108c0565b6105cd610b20565b50565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a6105fa816108c0565b6105cd610b9d565b61060a61087d565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e4610634816108c0565b61063c6108ca565b61067d73ffffffffffffffffffffffffffffffffffffffff87167f000000000000000000000000000000000000000000000000000000000000000086610909565b6040517fb8969bd400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063b8969bd4906106f790899089908990899089906004016110d7565b600060405180830381600087803b15801561071157600080fd5b505af1158015610725573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fb9d4efa96044e5f5e03e696fa9ae2ff66911cc27e8a637c3627c75bc5b2241c88686866040516104f793929190611134565b600082815260016020819052604090912001546107a6816108c0565b6105378383610a61565b6107b861087d565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e46107e2816108c0565b6107ea6108ca565b61080b73ffffffffffffffffffffffffffffffffffffffff85168484610909565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f9b1bfa7fa9ee420a16e124f794c35ac9f90472acc99140eb2f6447c714cad8eb8460405161086a91815260200190565b60405180910390a3506105966001600055565b6002600054036108b9576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b6105cd8133610bf8565b60025460ff1615610907576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6040805173ffffffffffffffffffffffffffffffffffffffff8416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb00000000000000000000000000000000000000000000000000000000179052610596908490610c89565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff16610a5957600083815260016020818152604080842073ffffffffffffffffffffffffffffffffffffffff8716808652925280842080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a4506001610369565b506000610369565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff1615610a5957600083815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8616808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a4506001610369565b610b28610d1f565b600280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b610ba56108ca565b600280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258610b733390565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16610c85576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82166004820152602481018390526044015b60405180910390fd5b5050565b6000610cab73ffffffffffffffffffffffffffffffffffffffff841683610d5b565b90508051600014158015610cd0575080806020019051810190610cce9190611157565b155b15610596576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84166004820152602401610c7c565b60025460ff16610907576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6060610d6983836000610d70565b9392505050565b606081471015610dae576040517fcd786059000000000000000000000000000000000000000000000000000000008152306004820152602401610c7c565b6000808573ffffffffffffffffffffffffffffffffffffffff168486604051610dd79190611179565b60006040518083038185875af1925050503d8060008114610e14576040519150601f19603f3d011682016040523d82523d6000602084013e610e19565b606091505b5091509150610e29868383610e33565b9695505050505050565b606082610e4857610e4382610ec2565b610d69565b8151158015610e6c575073ffffffffffffffffffffffffffffffffffffffff84163b155b15610ebb576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85166004820152602401610c7c565b5080610d69565b805115610ed25780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060208284031215610f1657600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610d6957600080fd5b803573ffffffffffffffffffffffffffffffffffffffff81168114610f6a57600080fd5b919050565b600080600080600060808688031215610f8757600080fd5b610f9086610f46565b9450610f9e60208701610f46565b935060408601359250606086013567ffffffffffffffff811115610fc157600080fd5b8601601f81018813610fd257600080fd5b803567ffffffffffffffff811115610fe957600080fd5b886020828401011115610ffb57600080fd5b959894975092955050506020019190565b60006020828403121561101e57600080fd5b5035919050565b6000806040838503121561103857600080fd5b8235915061104860208401610f46565b90509250929050565b60008060006060848603121561106657600080fd5b61106f84610f46565b925061107d60208501610f46565b929592945050506040919091013590565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff8616815273ffffffffffffffffffffffffffffffffffffffff8516602082015283604082015260806060820152600061112960808301848661108e565b979650505050505050565b83815260406020820152600061114e60408301848661108e565b95945050505050565b60006020828403121561116957600080fd5b81518015158114610d6957600080fd5b6000825160005b8181101561119a5760208186018101518583015201611180565b50600092019182525091905056fea264697066735822122069d5c5c3cb2752c876b6a2138d8d9b66bac6bd1b48a1fe98417eea81faf02a3e64736f6c634300081a0033", + ABI: "[{\"type\":\"constructor\",\"inputs\":[{\"name\":\"gateway_\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"tssAddress_\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"admin_\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"DEFAULT_ADMIN_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"PAUSER_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"WHITELISTER_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"WITHDRAWER_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"gateway\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIGatewayEVM\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getRoleAdmin\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"grantRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"hasRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"pause\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"paused\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"renounceRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"callerConfirmation\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"revokeRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"supportsInterface\",\"inputs\":[{\"name\":\"interfaceId\",\"type\":\"bytes4\",\"internalType\":\"bytes4\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"unpause\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"unwhitelist\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"whitelist\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"whitelisted\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"withdraw\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"withdrawAndCall\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"withdrawAndRevert\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"event\",\"name\":\"Paused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleAdminChanged\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"previousAdminRole\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"newAdminRole\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleGranted\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleRevoked\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Unpaused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Unwhitelisted\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Whitelisted\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Withdraw\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"WithdrawAndCall\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"WithdrawAndRevert\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"AccessControlBadConfirmation\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"AccessControlUnauthorizedAccount\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"neededRole\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"type\":\"error\",\"name\":\"AddressEmptyCode\",\"inputs\":[{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"AddressInsufficientBalance\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"EnforcedPause\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ExpectedPause\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"FailedInnerCall\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NotWhitelisted\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ReentrancyGuardReentrantCall\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"SafeERC20FailedOperation\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"ZeroAddress\",\"inputs\":[]}]", + Bin: "0x60a060405234801561001057600080fd5b506040516116fe3803806116fe83398101604081905261002f916101e5565b60016000556002805460ff191690556001600160a01b038316158061005b57506001600160a01b038216155b8061006d57506001600160a01b038116155b1561008b5760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b0383166080526100a3600082610134565b506100ce7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a82610134565b506100f97f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e483610134565b506101126000805160206116de83398151915282610134565b5061012b6000805160206116de83398151915283610134565b50505050610228565b60008281526001602090815260408083206001600160a01b038516845290915281205460ff166101bf5760008381526001602081815260408084206001600160a01b0387168086529252808420805460ff19169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45060016101c3565b5060005b92915050565b80516001600160a01b03811681146101e057600080fd5b919050565b6000806000606084860312156101fa57600080fd5b610203846101c9565b9250610211602085016101c9565b915061021f604085016101c9565b90509250925092565b60805161147f61025f6000396000818161019e0152818161050001528181610562015281816108f70152610959015261147f6000f3fe608060405234801561001057600080fd5b506004361061016c5760003560e01c806385f438c1116100cd578063c8a0236211610081578063d936547e11610066578063d936547e14610355578063d9caed1214610378578063e63ab1e91461038b57600080fd5b8063c8a023621461032f578063d547741f1461034257600080fd5b80639a590427116100b25780639a590427146103015780639b19251a14610314578063a217fddf1461032757600080fd5b806385f438c11461029457806391d14854146102bb57600080fd5b806336568abe11610124578063570618e111610109578063570618e11461025a5780635c975abb146102815780638456cb591461028c57600080fd5b806336568abe1461023f5780633f4ba83a1461025257600080fd5b806321fc65f21161015557806321fc65f2146101e5578063248a9ca3146101fa5780632f2ff15d1461022c57600080fd5b806301ffc9a714610171578063116191b614610199575b600080fd5b61018461017f36600461118a565b6103b2565b60405190151581526020015b60405180910390f35b6101c07f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610190565b6101f86101f33660046111f5565b61044b565b005b61021e610208366004611292565b6000908152600160208190526040909120015490565b604051908152602001610190565b6101f861023a3660046112ab565b61064c565b6101f861024d3660046112ab565b610678565b6101f86106d6565b61021e7f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a81565b60025460ff16610184565b6101f861070b565b61021e7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b6101846102c93660046112ab565b600091825260016020908152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b6101f861030f3660046112d7565b61073d565b6101f86103223660046112d7565b6107be565b61021e600081565b6101f861033d3660046111f5565b610842565b6101f86103503660046112ab565b610a29565b6101846103633660046112d7565b60036020526000908152604090205460ff1681565b6101f86103863660046112f2565b610a4f565b61021e7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061044557507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b610453610b7b565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461047d81610bbe565b610485610bc8565b73ffffffffffffffffffffffffffffffffffffffff861660009081526003602052604090205460ff166104e4576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61052573ffffffffffffffffffffffffffffffffffffffff87167f000000000000000000000000000000000000000000000000000000000000000086610c07565b6040517f5131ab5900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690635131ab599061059f9089908990899089908990600401611378565b600060405180830381600087803b1580156105b957600080fd5b505af11580156105cd573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167f85b5be9cf454e05e0bddf49315178102227c312078eefa3c00294fb4d912ae4e868686604051610632939291906113d5565b60405180910390a3506106456001600055565b5050505050565b6000828152600160208190526040909120015461066881610bbe565b6106728383610c94565b50505050565b73ffffffffffffffffffffffffffffffffffffffff811633146106c7576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6106d18282610d41565b505050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61070081610bbe565b610708610de2565b50565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61073581610bbe565b610708610e41565b7f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a61076781610bbe565b73ffffffffffffffffffffffffffffffffffffffff8216600081815260036020526040808220805460ff19169055517f51085ddf9ebdded84b76e829eb58c4078e4b5bdf97d9a94723f336039da467919190a25050565b7f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a6107e881610bbe565b73ffffffffffffffffffffffffffffffffffffffff8216600081815260036020526040808220805460ff19166001179055517faab7954e9d246b167ef88aeddad35209ca2489d95a8aeb59e288d9b19fae5a549190a25050565b61084a610b7b565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461087481610bbe565b61087c610bc8565b73ffffffffffffffffffffffffffffffffffffffff861660009081526003602052604090205460ff166108db576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61091c73ffffffffffffffffffffffffffffffffffffffff87167f000000000000000000000000000000000000000000000000000000000000000086610c07565b6040517fb8969bd400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063b8969bd4906109969089908990899089908990600401611378565b600060405180830381600087803b1580156109b057600080fd5b505af11580156109c4573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fb9d4efa96044e5f5e03e696fa9ae2ff66911cc27e8a637c3627c75bc5b2241c8868686604051610632939291906113d5565b60008281526001602081905260409091200154610a4581610bbe565b6106728383610d41565b610a57610b7b565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e4610a8181610bbe565b610a89610bc8565b73ffffffffffffffffffffffffffffffffffffffff841660009081526003602052604090205460ff16610ae8576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610b0973ffffffffffffffffffffffffffffffffffffffff85168484610c07565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f9b1bfa7fa9ee420a16e124f794c35ac9f90472acc99140eb2f6447c714cad8eb84604051610b6891815260200190565b60405180910390a3506106d16001600055565b600260005403610bb7576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b6107088133610e7e565b60025460ff1615610c05576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6040805173ffffffffffffffffffffffffffffffffffffffff8416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb000000000000000000000000000000000000000000000000000000001790526106d1908490610f0f565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff16610d3957600083815260016020818152604080842073ffffffffffffffffffffffffffffffffffffffff87168086529252808420805460ff19169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a4506001610445565b506000610445565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff1615610d3957600083815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff86168085529252808320805460ff1916905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a4506001610445565b610dea610fa5565b6002805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b610e49610bc8565b6002805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258610e173390565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16610f0b576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82166004820152602481018390526044015b60405180910390fd5b5050565b6000610f3173ffffffffffffffffffffffffffffffffffffffff841683610fe1565b90508051600014158015610f56575080806020019051810190610f5491906113f8565b155b156106d1576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84166004820152602401610f02565b60025460ff16610c05576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6060610fef83836000610ff6565b9392505050565b606081471015611034576040517fcd786059000000000000000000000000000000000000000000000000000000008152306004820152602401610f02565b6000808573ffffffffffffffffffffffffffffffffffffffff16848660405161105d919061141a565b60006040518083038185875af1925050503d806000811461109a576040519150601f19603f3d011682016040523d82523d6000602084013e61109f565b606091505b50915091506110af8683836110b9565b9695505050505050565b6060826110ce576110c982611148565b610fef565b81511580156110f2575073ffffffffffffffffffffffffffffffffffffffff84163b155b15611141576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85166004820152602401610f02565b5080610fef565b8051156111585780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006020828403121561119c57600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610fef57600080fd5b803573ffffffffffffffffffffffffffffffffffffffff811681146111f057600080fd5b919050565b60008060008060006080868803121561120d57600080fd5b611216866111cc565b9450611224602087016111cc565b935060408601359250606086013567ffffffffffffffff81111561124757600080fd5b8601601f8101881361125857600080fd5b803567ffffffffffffffff81111561126f57600080fd5b88602082840101111561128157600080fd5b959894975092955050506020019190565b6000602082840312156112a457600080fd5b5035919050565b600080604083850312156112be57600080fd5b823591506112ce602084016111cc565b90509250929050565b6000602082840312156112e957600080fd5b610fef826111cc565b60008060006060848603121561130757600080fd5b611310846111cc565b925061131e602085016111cc565b929592945050506040919091013590565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff8616815273ffffffffffffffffffffffffffffffffffffffff851660208201528360408201526080606082015260006113ca60808301848661132f565b979650505050505050565b8381526040602082015260006113ef60408301848661132f565b95945050505050565b60006020828403121561140a57600080fd5b81518015158114610fef57600080fd5b6000825160005b8181101561143b5760208186018101518583015201611421565b50600092019182525091905056fea2646970667358221220dc54ce548a1f0bf8ba5e86cc53c6d822e55eee543451395733c659359bac8dd164736f6c634300081a00338619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a", } // ERC20CustodyABI is the input ABI used to generate the binding from. @@ -264,6 +264,37 @@ func (_ERC20Custody *ERC20CustodyCallerSession) PAUSERROLE() ([32]byte, error) { return _ERC20Custody.Contract.PAUSERROLE(&_ERC20Custody.CallOpts) } +// WHITELISTERROLE is a free data retrieval call binding the contract method 0x570618e1. +// +// Solidity: function WHITELISTER_ROLE() view returns(bytes32) +func (_ERC20Custody *ERC20CustodyCaller) WHITELISTERROLE(opts *bind.CallOpts) ([32]byte, error) { + var out []interface{} + err := _ERC20Custody.contract.Call(opts, &out, "WHITELISTER_ROLE") + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// WHITELISTERROLE is a free data retrieval call binding the contract method 0x570618e1. +// +// Solidity: function WHITELISTER_ROLE() view returns(bytes32) +func (_ERC20Custody *ERC20CustodySession) WHITELISTERROLE() ([32]byte, error) { + return _ERC20Custody.Contract.WHITELISTERROLE(&_ERC20Custody.CallOpts) +} + +// WHITELISTERROLE is a free data retrieval call binding the contract method 0x570618e1. +// +// Solidity: function WHITELISTER_ROLE() view returns(bytes32) +func (_ERC20Custody *ERC20CustodyCallerSession) WHITELISTERROLE() ([32]byte, error) { + return _ERC20Custody.Contract.WHITELISTERROLE(&_ERC20Custody.CallOpts) +} + // WITHDRAWERROLE is a free data retrieval call binding the contract method 0x85f438c1. // // Solidity: function WITHDRAWER_ROLE() view returns(bytes32) @@ -450,6 +481,37 @@ func (_ERC20Custody *ERC20CustodyCallerSession) SupportsInterface(interfaceId [4 return _ERC20Custody.Contract.SupportsInterface(&_ERC20Custody.CallOpts, interfaceId) } +// Whitelisted is a free data retrieval call binding the contract method 0xd936547e. +// +// Solidity: function whitelisted(address ) view returns(bool) +func (_ERC20Custody *ERC20CustodyCaller) Whitelisted(opts *bind.CallOpts, arg0 common.Address) (bool, error) { + var out []interface{} + err := _ERC20Custody.contract.Call(opts, &out, "whitelisted", arg0) + + if err != nil { + return *new(bool), err + } + + out0 := *abi.ConvertType(out[0], new(bool)).(*bool) + + return out0, err + +} + +// Whitelisted is a free data retrieval call binding the contract method 0xd936547e. +// +// Solidity: function whitelisted(address ) view returns(bool) +func (_ERC20Custody *ERC20CustodySession) Whitelisted(arg0 common.Address) (bool, error) { + return _ERC20Custody.Contract.Whitelisted(&_ERC20Custody.CallOpts, arg0) +} + +// Whitelisted is a free data retrieval call binding the contract method 0xd936547e. +// +// Solidity: function whitelisted(address ) view returns(bool) +func (_ERC20Custody *ERC20CustodyCallerSession) Whitelisted(arg0 common.Address) (bool, error) { + return _ERC20Custody.Contract.Whitelisted(&_ERC20Custody.CallOpts, arg0) +} + // GrantRole is a paid mutator transaction binding the contract method 0x2f2ff15d. // // Solidity: function grantRole(bytes32 role, address account) returns() @@ -555,6 +617,48 @@ func (_ERC20Custody *ERC20CustodyTransactorSession) Unpause() (*types.Transactio return _ERC20Custody.Contract.Unpause(&_ERC20Custody.TransactOpts) } +// Unwhitelist is a paid mutator transaction binding the contract method 0x9a590427. +// +// Solidity: function unwhitelist(address token) returns() +func (_ERC20Custody *ERC20CustodyTransactor) Unwhitelist(opts *bind.TransactOpts, token common.Address) (*types.Transaction, error) { + return _ERC20Custody.contract.Transact(opts, "unwhitelist", token) +} + +// Unwhitelist is a paid mutator transaction binding the contract method 0x9a590427. +// +// Solidity: function unwhitelist(address token) returns() +func (_ERC20Custody *ERC20CustodySession) Unwhitelist(token common.Address) (*types.Transaction, error) { + return _ERC20Custody.Contract.Unwhitelist(&_ERC20Custody.TransactOpts, token) +} + +// Unwhitelist is a paid mutator transaction binding the contract method 0x9a590427. +// +// Solidity: function unwhitelist(address token) returns() +func (_ERC20Custody *ERC20CustodyTransactorSession) Unwhitelist(token common.Address) (*types.Transaction, error) { + return _ERC20Custody.Contract.Unwhitelist(&_ERC20Custody.TransactOpts, token) +} + +// Whitelist is a paid mutator transaction binding the contract method 0x9b19251a. +// +// Solidity: function whitelist(address token) returns() +func (_ERC20Custody *ERC20CustodyTransactor) Whitelist(opts *bind.TransactOpts, token common.Address) (*types.Transaction, error) { + return _ERC20Custody.contract.Transact(opts, "whitelist", token) +} + +// Whitelist is a paid mutator transaction binding the contract method 0x9b19251a. +// +// Solidity: function whitelist(address token) returns() +func (_ERC20Custody *ERC20CustodySession) Whitelist(token common.Address) (*types.Transaction, error) { + return _ERC20Custody.Contract.Whitelist(&_ERC20Custody.TransactOpts, token) +} + +// Whitelist is a paid mutator transaction binding the contract method 0x9b19251a. +// +// Solidity: function whitelist(address token) returns() +func (_ERC20Custody *ERC20CustodyTransactorSession) Whitelist(token common.Address) (*types.Transaction, error) { + return _ERC20Custody.Contract.Whitelist(&_ERC20Custody.TransactOpts, token) +} + // Withdraw is a paid mutator transaction binding the contract method 0xd9caed12. // // Solidity: function withdraw(address token, address to, uint256 amount) returns() @@ -1372,6 +1476,294 @@ func (_ERC20Custody *ERC20CustodyFilterer) ParseUnpaused(log types.Log) (*ERC20C return event, nil } +// ERC20CustodyUnwhitelistedIterator is returned from FilterUnwhitelisted and is used to iterate over the raw logs and unpacked data for Unwhitelisted events raised by the ERC20Custody contract. +type ERC20CustodyUnwhitelistedIterator struct { + Event *ERC20CustodyUnwhitelisted // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *ERC20CustodyUnwhitelistedIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(ERC20CustodyUnwhitelisted) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(ERC20CustodyUnwhitelisted) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *ERC20CustodyUnwhitelistedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *ERC20CustodyUnwhitelistedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// ERC20CustodyUnwhitelisted represents a Unwhitelisted event raised by the ERC20Custody contract. +type ERC20CustodyUnwhitelisted struct { + Token common.Address + Raw types.Log // Blockchain specific contextual infos +} + +// FilterUnwhitelisted is a free log retrieval operation binding the contract event 0x51085ddf9ebdded84b76e829eb58c4078e4b5bdf97d9a94723f336039da46791. +// +// Solidity: event Unwhitelisted(address indexed token) +func (_ERC20Custody *ERC20CustodyFilterer) FilterUnwhitelisted(opts *bind.FilterOpts, token []common.Address) (*ERC20CustodyUnwhitelistedIterator, error) { + + var tokenRule []interface{} + for _, tokenItem := range token { + tokenRule = append(tokenRule, tokenItem) + } + + logs, sub, err := _ERC20Custody.contract.FilterLogs(opts, "Unwhitelisted", tokenRule) + if err != nil { + return nil, err + } + return &ERC20CustodyUnwhitelistedIterator{contract: _ERC20Custody.contract, event: "Unwhitelisted", logs: logs, sub: sub}, nil +} + +// WatchUnwhitelisted is a free log subscription operation binding the contract event 0x51085ddf9ebdded84b76e829eb58c4078e4b5bdf97d9a94723f336039da46791. +// +// Solidity: event Unwhitelisted(address indexed token) +func (_ERC20Custody *ERC20CustodyFilterer) WatchUnwhitelisted(opts *bind.WatchOpts, sink chan<- *ERC20CustodyUnwhitelisted, token []common.Address) (event.Subscription, error) { + + var tokenRule []interface{} + for _, tokenItem := range token { + tokenRule = append(tokenRule, tokenItem) + } + + logs, sub, err := _ERC20Custody.contract.WatchLogs(opts, "Unwhitelisted", tokenRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(ERC20CustodyUnwhitelisted) + if err := _ERC20Custody.contract.UnpackLog(event, "Unwhitelisted", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseUnwhitelisted is a log parse operation binding the contract event 0x51085ddf9ebdded84b76e829eb58c4078e4b5bdf97d9a94723f336039da46791. +// +// Solidity: event Unwhitelisted(address indexed token) +func (_ERC20Custody *ERC20CustodyFilterer) ParseUnwhitelisted(log types.Log) (*ERC20CustodyUnwhitelisted, error) { + event := new(ERC20CustodyUnwhitelisted) + if err := _ERC20Custody.contract.UnpackLog(event, "Unwhitelisted", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// ERC20CustodyWhitelistedIterator is returned from FilterWhitelisted and is used to iterate over the raw logs and unpacked data for Whitelisted events raised by the ERC20Custody contract. +type ERC20CustodyWhitelistedIterator struct { + Event *ERC20CustodyWhitelisted // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *ERC20CustodyWhitelistedIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(ERC20CustodyWhitelisted) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(ERC20CustodyWhitelisted) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *ERC20CustodyWhitelistedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *ERC20CustodyWhitelistedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// ERC20CustodyWhitelisted represents a Whitelisted event raised by the ERC20Custody contract. +type ERC20CustodyWhitelisted struct { + Token common.Address + Raw types.Log // Blockchain specific contextual infos +} + +// FilterWhitelisted is a free log retrieval operation binding the contract event 0xaab7954e9d246b167ef88aeddad35209ca2489d95a8aeb59e288d9b19fae5a54. +// +// Solidity: event Whitelisted(address indexed token) +func (_ERC20Custody *ERC20CustodyFilterer) FilterWhitelisted(opts *bind.FilterOpts, token []common.Address) (*ERC20CustodyWhitelistedIterator, error) { + + var tokenRule []interface{} + for _, tokenItem := range token { + tokenRule = append(tokenRule, tokenItem) + } + + logs, sub, err := _ERC20Custody.contract.FilterLogs(opts, "Whitelisted", tokenRule) + if err != nil { + return nil, err + } + return &ERC20CustodyWhitelistedIterator{contract: _ERC20Custody.contract, event: "Whitelisted", logs: logs, sub: sub}, nil +} + +// WatchWhitelisted is a free log subscription operation binding the contract event 0xaab7954e9d246b167ef88aeddad35209ca2489d95a8aeb59e288d9b19fae5a54. +// +// Solidity: event Whitelisted(address indexed token) +func (_ERC20Custody *ERC20CustodyFilterer) WatchWhitelisted(opts *bind.WatchOpts, sink chan<- *ERC20CustodyWhitelisted, token []common.Address) (event.Subscription, error) { + + var tokenRule []interface{} + for _, tokenItem := range token { + tokenRule = append(tokenRule, tokenItem) + } + + logs, sub, err := _ERC20Custody.contract.WatchLogs(opts, "Whitelisted", tokenRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(ERC20CustodyWhitelisted) + if err := _ERC20Custody.contract.UnpackLog(event, "Whitelisted", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseWhitelisted is a log parse operation binding the contract event 0xaab7954e9d246b167ef88aeddad35209ca2489d95a8aeb59e288d9b19fae5a54. +// +// Solidity: event Whitelisted(address indexed token) +func (_ERC20Custody *ERC20CustodyFilterer) ParseWhitelisted(log types.Log) (*ERC20CustodyWhitelisted, error) { + event := new(ERC20CustodyWhitelisted) + if err := _ERC20Custody.contract.UnpackLog(event, "Whitelisted", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + // ERC20CustodyWithdrawIterator is returned from FilterWithdraw and is used to iterate over the raw logs and unpacked data for Withdraw events raised by the ERC20Custody contract. type ERC20CustodyWithdrawIterator struct { Event *ERC20CustodyWithdraw // Event containing the contract specifics and raw log diff --git a/v2/pkg/erc20custody.t.sol/erc20custodytest.go b/v2/pkg/erc20custody.t.sol/erc20custodytest.go index 38266018..1ed1aed2 100644 --- a/v2/pkg/erc20custody.t.sol/erc20custodytest.go +++ b/v2/pkg/erc20custody.t.sol/erc20custodytest.go @@ -49,8 +49,8 @@ type StdInvariantFuzzSelector struct { // ERC20CustodyTestMetaData contains all meta data concerning the ERC20CustodyTest contract. var ERC20CustodyTestMetaData = &bind.MetaData{ - ABI: "[{\"type\":\"function\",\"name\":\"ASSET_HANDLER_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"IS_TEST\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"PAUSER_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"TSS_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"WITHDRAWER_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeArtifacts\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedArtifacts_\",\"type\":\"string[]\",\"internalType\":\"string[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeContracts\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedContracts_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeSelectors\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedSelectors_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzSelector[]\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"selectors\",\"type\":\"bytes4[]\",\"internalType\":\"bytes4[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeSenders\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedSenders_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"failed\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"setUp\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"targetArtifactSelectors\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedArtifactSelectors_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzArtifactSelector[]\",\"components\":[{\"name\":\"artifact\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"selectors\",\"type\":\"bytes4[]\",\"internalType\":\"bytes4[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetArtifacts\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedArtifacts_\",\"type\":\"string[]\",\"internalType\":\"string[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetContracts\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedContracts_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetInterfaces\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedInterfaces_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzInterface[]\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"artifacts\",\"type\":\"string[]\",\"internalType\":\"string[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetSelectors\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedSelectors_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzSelector[]\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"selectors\",\"type\":\"bytes4[]\",\"internalType\":\"bytes4[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetSenders\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedSenders_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"testForwardCallToReceiveERC20PartialThroughCustody\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testForwardCallToReceiveERC20PartialThroughCustodyFailsIfAmountIs0\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testForwardCallToReceiveERC20PartialThroughCustodyFailsIfSenderIsNotWithdrawer\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testForwardCallToReceiveERC20ThroughCustody\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testForwardCallToReceiveERC20ThroughCustodyFailsIfAmountIs0\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testForwardCallToReceiveERC20ThroughCustodyFailsIfReceiverIsZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testForwardCallToReceiveERC20ThroughCustodyFailsIfSenderIsNotWithdrawer\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testForwardCallToReceiveERC20ThroughCustodyTogglePause\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testForwardCallToReceiveNoParamsThroughCustody\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testNewCustodyFailsIfAddressesAreZero\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawAndRevertThroughCustody\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawAndRevertThroughCustodyFailsIfAmountIs0\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawAndRevertThroughCustodyFailsIfReceiverIsZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawAndRevertThroughCustodyFailsIfSenderIsNotWithdrawer\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawThroughCustody\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawThroughCustodyFailsIfSenderIsNotWithdrawer\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"event\",\"name\":\"Call\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"receiver\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Deposit\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"receiver\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"asset\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Executed\",\"inputs\":[{\"name\":\"destination\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ExecutedWithERC20\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedERC20\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"token\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"destination\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedNoParams\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedNonPayable\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"strs\",\"type\":\"string[]\",\"indexed\":false,\"internalType\":\"string[]\"},{\"name\":\"nums\",\"type\":\"uint256[]\",\"indexed\":false,\"internalType\":\"uint256[]\"},{\"name\":\"flag\",\"type\":\"bool\",\"indexed\":false,\"internalType\":\"bool\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedPayable\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"str\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"num\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"flag\",\"type\":\"bool\",\"indexed\":false,\"internalType\":\"bool\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedRevert\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Reverted\",\"inputs\":[{\"name\":\"destination\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RevertedWithERC20\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Withdraw\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"WithdrawAndCall\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"WithdrawAndRevert\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log\",\"inputs\":[{\"name\":\"\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_address\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_array\",\"inputs\":[{\"name\":\"val\",\"type\":\"uint256[]\",\"indexed\":false,\"internalType\":\"uint256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_array\",\"inputs\":[{\"name\":\"val\",\"type\":\"int256[]\",\"indexed\":false,\"internalType\":\"int256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_array\",\"inputs\":[{\"name\":\"val\",\"type\":\"address[]\",\"indexed\":false,\"internalType\":\"address[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_bytes\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_bytes32\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_int\",\"inputs\":[{\"name\":\"\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_address\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_array\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"uint256[]\",\"indexed\":false,\"internalType\":\"uint256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_array\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"int256[]\",\"indexed\":false,\"internalType\":\"int256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_array\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"address[]\",\"indexed\":false,\"internalType\":\"address[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_bytes\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_bytes32\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_decimal_int\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"},{\"name\":\"decimals\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_decimal_uint\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"decimals\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_int\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_string\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_uint\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_string\",\"inputs\":[{\"name\":\"\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_uint\",\"inputs\":[{\"name\":\"\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"logs\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"AccessControlUnauthorizedAccount\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"neededRole\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"type\":\"error\",\"name\":\"ApprovalFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ConnectorInitialized\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"CustodyInitialized\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"DepositFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"EnforcedPause\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ExecutionFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientERC20Amount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientETHAmount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZeroAddress\",\"inputs\":[]}]", - Bin: "0x6080604052600c8054600160ff199182168117909255601f80549091169091179055348015602c57600080fd5b5061ec308061003c6000396000f3fe608060405234801561001057600080fd5b506004361061020b5760003560e01c806385226c811161012a578063ba414fa6116100bd578063e63ab1e91161008c578063fa7626d411610071578063fa7626d4146103e6578063fb176c12146103f3578063fe8e5f1b146103fb57600080fd5b8063e63ab1e9146103b7578063eb1ce7f9146103de57600080fd5b8063ba414fa614610387578063c713f8271461039f578063cbd57e2f146103a7578063e20c9f71146103af57600080fd5b8063a4943deb116100f9578063a4943deb14610348578063a783c78914610350578063b0464fdc14610377578063b5508aa91461037f57600080fd5b806385226c81146102ef57806385f438c114610304578063916a17c61461032b578063a3f9d0e01461034057600080fd5b80633f7286f4116101a257806366d9a9a01161017157806366d9a9a0146102c25780636a621854146102d757806371149c94146102df5780637e91c50f146102e757600080fd5b80633f7286f4146102755780634b5838d21461027d57806351ecdf3c146102855780635d62c8601461028d57600080fd5b80632ade3880116101de5780632ade3880146102485780633e5e3c231461025d5780633e73ecb4146102655780633ee929231461026d57600080fd5b80630a9254e4146102105780630eee72a91461021a5780631779672f146102225780631ed7831c1461022a575b600080fd5b610218610403565b005b610218610cc8565b610218610f6d565b6102326110d7565b60405161023f9190619207565b60405180910390f35b610250611139565b60405161023f91906192a3565b61023261127b565b6102186112db565b61021861186a565b610232611939565b610218611999565b610218611d07565b6102b47f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b981565b60405190815260200161023f565b6102ca611ef3565b60405161023f9190619409565b610218612075565b610218612141565b610218612997565b6102f7612b3a565b60405161023f91906194a7565b6102b47f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b610333612c0a565b60405161023f919061951e565b610218612d05565b61021861333f565b6102b47f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb81565b610333613564565b6102f761365f565b61038f61372f565b604051901515815260200161023f565b610218613803565b6102186144f1565b6102326145b2565b6102b47f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b610218614612565b601f5461038f9060ff1681565b610218614737565b610218614de7565b602680547fffffffffffffffffffffffff00000000000000000000000000000000000000009081163017909155602780548216611234179055602880549091166156781790556040516104559061911a565b60408082526004908201527f746573740000000000000000000000000000000000000000000000000000000060608201526080602082018190526003908201527f54544b000000000000000000000000000000000000000000000000000000000060a082015260c001604051809103906000f0801580156104da573d6000803e3d6000fd5b50602480547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039290921691909117905560405161051f9061911a565b604080825260049082018190527f7a6574610000000000000000000000000000000000000000000000000000000060608301526080602083018190528201527f5a4554410000000000000000000000000000000000000000000000000000000060a082015260c001604051809103906000f0801580156105a3573d6000803e3d6000fd5b50602580547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03928316908117909155604080518082018252600e81527f4761746577617945564d2e736f6c000000000000000000000000000000000000602082015260285460265492519085166024820152604481019390935292166064820152610692919060840160408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fc0c53b8b00000000000000000000000000000000000000000000000000000000179052615009565b601f80547fffffffffffffffffffffff0000000000000000000000000000000000000000ff166101006001600160a01b0393841681029190911791829055602080549190920483167fffffffffffffffffffffffff0000000000000000000000000000000000000000909116811790915560285460265460405192939182169291169061071e90619127565b6001600160a01b03938416815291831660208301529091166040820152606001604051809103906000f08015801561075a573d6000803e3d6000fd5b50602280547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392831617905560205460255460285460265460405193851694928316939183169216906107b590619134565b6001600160a01b039485168152928416602084015290831660408301529091166060820152608001604051809103906000f0801580156107f9573d6000803e3d6000fd5b50602380547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039290921691909117905560405161083e90619141565b604051809103906000f08015801561085a573d6000803e3d6000fd5b50602180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039283161790556028546040517fc88a5e6d00000000000000000000000000000000000000000000000000000000815291166004820152670de0b6b3a76400006024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c88a5e6d90604401600060405180830381600087803b15801561090657600080fd5b505af115801561091a573d6000803e3d6000fd5b50506026546040517f06447d560000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506306447d569150602401600060405180830381600087803b15801561099057600080fd5b505af11580156109a4573d6000803e3d6000fd5b50506020546022546040517fae7a3a6f0000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201529116925063ae7a3a6f9150602401600060405180830381600087803b158015610a0a57600080fd5b505af1158015610a1e573d6000803e3d6000fd5b50506020546023546040517f10188aef0000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152911692506310188aef9150602401600060405180830381600087803b158015610a8457600080fd5b505af1158015610a98573d6000803e3d6000fd5b505050507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b03166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610afa57600080fd5b505af1158015610b0e573d6000803e3d6000fd5b5050602480546026546040517f40c10f190000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620f4240938101939093521692506340c10f199150604401600060405180830381600087803b158015610b7f57600080fd5b505af1158015610b93573d6000803e3d6000fd5b5050602480546022546040517fa9059cbb0000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201526207a1209381019390935216925063a9059cbb91506044016020604051808303816000875af1158015610c09573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c2d91906195b5565b506028546040517fc88a5e6d0000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152670de0b6b3a76400006024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c88a5e6d90604401600060405180830381600087803b158015610cae57600080fd5b505af1158015610cc2573d6000803e3d6000fd5b50505050565b60248054602754604051620186a09381018490526001600160a01b0392831660448201529116606482015260009060840160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fc513169100000000000000000000000000000000000000000000000000000000179052602654905163ca669fa760e01b81526001600160a01b039091166004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa7906024015b600060405180830381600087803b158015610dad57600080fd5b505af1158015610dc1573d6000803e3d6000fd5b5050602654604080516001600160a01b0390921660248301527f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e460448084019190915281518084039091018152606490920181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb39250610eac91906004016195d7565b600060405180830381600087803b158015610ec657600080fd5b505af1158015610eda573d6000803e3d6000fd5b50506022546024546021546040517f21fc65f20000000000000000000000000000000000000000000000000000000081526001600160a01b0393841695506321fc65f29450610f37939283169290911690879087906004016195ea565b600060405180830381600087803b158015610f5157600080fd5b505af1158015610f65573d6000803e3d6000fd5b505050505050565b6024805460275460405160009381018490526001600160a01b03928316604482015291166064820152819060840160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f357fc5a200000000000000000000000000000000000000000000000000000000179052602854905163ca669fa760e01b81526001600160a01b039091166004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa7906024015b600060405180830381600087803b15801561104f57600080fd5b505af1158015611063573d6000803e3d6000fd5b50506040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527f951e19ed000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401610eac565b6060601680548060200260200160405190810160405280929190818152602001828054801561112f57602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311611111575b5050505050905090565b6060601e805480602002602001604051908101604052809291908181526020016000905b8282101561127257600084815260208082206040805180820182526002870290920180546001600160a01b03168352600181018054835181870281018701909452808452939591948681019491929084015b8282101561125b5783829060005260206000200180546111ce90619621565b80601f01602080910402602001604051908101604052809291908181526020018280546111fa90619621565b80156112475780601f1061121c57610100808354040283529160200191611247565b820191906000526020600020905b81548152906001019060200180831161122a57829003601f168201915b5050505050815260200190600101906111af565b50505050815250508152602001906001019061115d565b50505050905090565b6060601880548060200260200160405190810160405280929190818152602001828054801561112f576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311611111575050505050905090565b602480546027546040516370a0823160e01b81526001600160a01b039182166004820152620186a09360009392909216916370a082319101602060405180830381865afa158015611330573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611354919061966e565b9050611361816000615028565b602480546022546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa1580156113b1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113d5919061966e565b6027546040516001600160a01b0390911660248201526044810185905290915060009060640160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb0000000000000000000000000000000000000000000000000000000017905260245490517ff30c7ba3000000000000000000000000000000000000000000000000000000008152919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f30c7ba3916114b8916001600160a01b0391909116906000908690600401619687565b600060405180830381600087803b1580156114d257600080fd5b505af11580156114e6573d6000803e3d6000fd5b50506022546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b15801561157857600080fd5b505af115801561158c573d6000803e3d6000fd5b50506027546024546040518881526001600160a01b039283169450911691507f9b1bfa7fa9ee420a16e124f794c35ac9f90472acc99140eb2f6447c714cad8eb9060200160405180910390a360285460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561163157600080fd5b505af1158015611645573d6000803e3d6000fd5b5050602254602480546027546040517fd9caed120000000000000000000000000000000000000000000000000000000081526001600160a01b0392831660048201529082169281019290925260448201899052909116925063d9caed129150606401600060405180830381600087803b1580156116c157600080fd5b505af11580156116d5573d6000803e3d6000fd5b5050602480546027546040516370a0823160e01b81526001600160a01b03918216600482015260009550911692506370a082319101602060405180830381865afa158015611727573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061174b919061966e565b90506117578186615028565b602480546022546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa1580156117a7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117cb919061966e565b90506117e0816117db88876196de565b615028565b602480546020546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa158015611830573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611854919061966e565b9050611861816000615028565b50505050505050565b60248054602754604051620186a09381018490526001600160a01b0392831660448201529116606482015260009060840160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f357fc5a200000000000000000000000000000000000000000000000000000000179052602654905163ca669fa760e01b81526001600160a01b039091166004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401610d93565b6060601780548060200260200160405190810160405280929190818152602001828054801561112f576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311611111575050505050905090565b6040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b158015611a1e57600080fd5b505af1158015611a32573d6000803e3d6000fd5b5050602854602654604051600094508493506001600160a01b039283169290911690611a5d90619127565b6001600160a01b03938416815291831660208301529091166040820152606001604051809103906000f080158015611a99573d6000803e3d6000fd5b506040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fd92e233d000000000000000000000000000000000000000000000000000000006004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b158015611b2257600080fd5b505af1158015611b36573d6000803e3d6000fd5b50506020546026546040516001600160a01b03928316945060009350911690611b5e90619127565b6001600160a01b03938416815291831660208301529091166040820152606001604051809103906000f080158015611b9a573d6000803e3d6000fd5b506040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fd92e233d000000000000000000000000000000000000000000000000000000006004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b158015611c2357600080fd5b505af1158015611c37573d6000803e3d6000fd5b50506020546028546040516001600160a01b03928316945091169150600090611c5f90619127565b6001600160a01b03938416815291831660208301529091166040820152606001604051809103906000f080158015611c9b573d6000803e3d6000fd5b506020546028546026546040519394506001600160a01b0392831693918316921690611cc690619127565b6001600160a01b03938416815291831660208301529091166040820152606001604051809103906000f080158015611d02573d6000803e3d6000fd5b505050565b6024805460275460405160019381018490526001600160a01b0392831660448201529116606482015260009060840160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f357fc5a200000000000000000000000000000000000000000000000000000000179052602854905163ca669fa760e01b81526001600160a01b039091166004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015611de957600080fd5b505af1158015611dfd573d6000803e3d6000fd5b50506040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b158015611e8657600080fd5b505af1158015611e9a573d6000803e3d6000fd5b50506022546024546040517f21fc65f20000000000000000000000000000000000000000000000000000000081526001600160a01b0392831694506321fc65f29350610f379290911690600090879087906004016195ea565b6060601b805480602002602001604051908101604052809291908181526020016000905b828210156112725783829060005260206000209060020201604051806040016040529081600082018054611f4a90619621565b80601f0160208091040260200160405190810160405280929190818152602001828054611f7690619621565b8015611fc35780601f10611f9857610100808354040283529160200191611fc3565b820191906000526020600020905b815481529060010190602001808311611fa657829003601f168201915b505050505081526020016001820180548060200260200160405190810160405280929190818152602001828054801561205d57602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168152602001906004019060208260030104928301926001038202915080841161200a5790505b50505050508152505081526020019060010190611f17565b6024805460275460405160009381018490526001600160a01b03928316604482015291166064820152819060840160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fc513169100000000000000000000000000000000000000000000000000000000179052602854905163ca669fa760e01b81526001600160a01b039091166004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401611035565b6040517f68656c6c6f0000000000000000000000000000000000000000000000000000006020820152620186a09060009060250160408051808303601f1901815290829052602480546021546370a0823160e01b85526001600160a01b0390811660048601529294506000939216916370a082319101602060405180830381865afa1580156121d4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121f8919061966e565b9050612205816000615028565b602480546022546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa158015612255573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612279919061966e565b6020546040516001600160a01b0390911660248201526044810186905290915060009060640160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb0000000000000000000000000000000000000000000000000000000017905260245490517ff30c7ba3000000000000000000000000000000000000000000000000000000008152919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f30c7ba39161235c916001600160a01b0391909116906000908690600401619687565b600060405180830381600087803b15801561237657600080fd5b505af115801561238a573d6000803e3d6000fd5b50506021546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b15801561241c57600080fd5b505af1158015612430573d6000803e3d6000fd5b50506020546040517f0d3f65f00e631663aa85c96330b5c7a83bb29af3630c0063776f985edc3037aa935061247392506001600160a01b039091169087906196f1565b60405180910390a16020546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b15801561250957600080fd5b505af115801561251d573d6000803e3d6000fd5b50506021546024546040516001600160a01b039283169450911691507f723fc7be2448075379e4fdf1e6bf5fead954d2668d2da05dcb44ccfec4beeda7906125689089908990619713565b60405180910390a36022546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b1580156125fe57600080fd5b505af1158015612612573d6000803e3d6000fd5b50506021546024546040516001600160a01b039283169450911691507fb9d4efa96044e5f5e03e696fa9ae2ff66911cc27e8a637c3627c75bc5b2241c89061265d9089908990619713565b60405180910390a360285460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156126be57600080fd5b505af11580156126d2573d6000803e3d6000fd5b50506022546024546021546040517fc8a023620000000000000000000000000000000000000000000000000000000081526001600160a01b03938416955063c8a02362945061272f9392831692909116908a908a906004016195ea565b600060405180830381600087803b15801561274957600080fd5b505af115801561275d573d6000803e3d6000fd5b5050602480546021546040516370a0823160e01b81526001600160a01b03918216600482015260009550911692506370a0823191015b602060405180830381865afa1580156127b0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127d4919061966e565b90506127e08187615028565b602480546022546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa158015612830573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612854919061966e565b9050612864816117db89876196de565b602480546020546021546040517fdd62ed3e0000000000000000000000000000000000000000000000000000000081526001600160a01b0392831660048201529082169381019390935260009291169063dd62ed3e90604401602060405180830381865afa1580156128da573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128fe919061966e565b905061290b816000615028565b602480546020546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa15801561295b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061297f919061966e565b905061298c816000615028565b505050505050505050565b6040517f68656c6c6f000000000000000000000000000000000000000000000000000000602082015260019060009060250160408051808303601f190181529082905260285463ca669fa760e01b83526001600160a01b031660048301529150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015612a3057600080fd5b505af1158015612a44573d6000803e3d6000fd5b50506040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b158015612acd57600080fd5b505af1158015612ae1573d6000803e3d6000fd5b50506022546024546040517fc8a023620000000000000000000000000000000000000000000000000000000081526001600160a01b03928316945063c8a023629350610f379290911690600090879087906004016195ea565b6060601a805480602002602001604051908101604052809291908181526020016000905b82821015611272578382906000526020600020018054612b7d90619621565b80601f0160208091040260200160405190810160405280929190818152602001828054612ba990619621565b8015612bf65780601f10612bcb57610100808354040283529160200191612bf6565b820191906000526020600020905b815481529060010190602001808311612bd957829003601f168201915b505050505081526020019060010190612b5e565b6060601d805480602002602001604051908101604052809291908181526020016000905b828210156112725760008481526020908190206040805180820182526002860290920180546001600160a01b03168352600181018054835181870281018701909452808452939491938583019392830182828015612ced57602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019060040190602082600301049283019260010382029150808411612c9a5790505b50505050508152505081526020019060010190612c2e565b604080516004808252602480830184526020830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f6ed7016900000000000000000000000000000000000000000000000000000000179052805460275494516370a0823160e01b81526001600160a01b0395861693810193909352620186a0946000939116916370a082319101602060405180830381865afa158015612daf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612dd3919061966e565b9050612de0816000615028565b602480546022546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa158015612e30573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e54919061966e565b6020546040516001600160a01b0390911660248201526044810186905290915060009060640160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb0000000000000000000000000000000000000000000000000000000017905260245490517ff30c7ba3000000000000000000000000000000000000000000000000000000008152919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f30c7ba391612f37916001600160a01b0391909116906000908690600401619687565b600060405180830381600087803b158015612f5157600080fd5b505af1158015612f65573d6000803e3d6000fd5b50506021546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b158015612ff757600080fd5b505af115801561300b573d6000803e3d6000fd5b5050602080546040516001600160a01b0390911681527fbcaadb46b82a48af60b608f58959ae6b8310d1b0a0d094c2e9ec3208ed39f2a0935001905060405180910390a16022546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b1580156130dd57600080fd5b505af11580156130f1573d6000803e3d6000fd5b50506021546024546040516001600160a01b039283169450911691507f85b5be9cf454e05e0bddf49315178102227c312078eefa3c00294fb4d912ae4e9061313c9089908990619713565b60405180910390a360285460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561319d57600080fd5b505af11580156131b1573d6000803e3d6000fd5b50506022546024546021546040517f21fc65f20000000000000000000000000000000000000000000000000000000081526001600160a01b0393841695506321fc65f2945061320e9392831692909116908a908a906004016195ea565b600060405180830381600087803b15801561322857600080fd5b505af115801561323c573d6000803e3d6000fd5b5050602480546027546040516370a0823160e01b81526001600160a01b03918216600482015260009550911692506370a082319101602060405180830381865afa15801561328e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132b2919061966e565b90506132bf816000615028565b602480546022546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa15801561330f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613333919061966e565b90506128648185615028565b6040517f68656c6c6f0000000000000000000000000000000000000000000000000000006020820152620186a09060009060250160408051808303601f190181529082905260265463ca669fa760e01b83526001600160a01b031660048301529150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156133da57600080fd5b505af11580156133ee573d6000803e3d6000fd5b5050602654604080516001600160a01b0390921660248301527f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e460448084019190915281518084039091018152606490920181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb392506134d991906004016195d7565b600060405180830381600087803b1580156134f357600080fd5b505af1158015613507573d6000803e3d6000fd5b50506022546024546021546040517fc8a023620000000000000000000000000000000000000000000000000000000081526001600160a01b03938416955063c8a023629450610f37939283169290911690879087906004016195ea565b6060601c805480602002602001604051908101604052809291908181526020016000905b828210156112725760008481526020908190206040805180820182526002860290920180546001600160a01b0316835260018101805483518187028101870190945280845293949193858301939283018282801561364757602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190600401906020826003010492830192600103820291508084116135f45790505b50505050508152505081526020019060010190613588565b60606019805480602002602001604051908101604052809291908181526020016000905b828210156112725783829060005260206000200180546136a290619621565b80601f01602080910402602001604051908101604052809291908181526020018280546136ce90619621565b801561371b5780601f106136f05761010080835404028352916020019161371b565b820191906000526020600020905b8154815290600101906020018083116136fe57829003601f168201915b505050505081526020019060010190613683565b60085460009060ff1615613747575060085460ff1690565b6040517f667f9d70000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d600482018190527f6661696c65640000000000000000000000000000000000000000000000000000602483015260009163667f9d7090604401602060405180830381865afa1580156137d8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137fc919061966e565b1415905090565b60285460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561385c57600080fd5b505af1158015613870573d6000803e3d6000fd5b5050602854604080516001600160a01b0390921660248301527f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a60448084019190915281518084039091018152606490920181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb3925061395b91906004016195d7565b600060405180830381600087803b15801561397557600080fd5b505af1158015613989573d6000803e3d6000fd5b50505050602260009054906101000a90046001600160a01b03166001600160a01b0316638456cb596040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156139dd57600080fd5b505af11580156139f1573d6000803e3d6000fd5b505060285460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b158015613a4e57600080fd5b505af1158015613a62573d6000803e3d6000fd5b5050602854604080516001600160a01b0390921660248301527f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a60448084019190915281518084039091018152606490920181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb39250613b4d91906004016195d7565b600060405180830381600087803b158015613b6757600080fd5b505af1158015613b7b573d6000803e3d6000fd5b50505050602060009054906101000a90046001600160a01b03166001600160a01b0316633f4ba83a6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015613bcf57600080fd5b505af1158015613be3573d6000803e3d6000fd5b505060265460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b158015613c4057600080fd5b505af1158015613c54573d6000803e3d6000fd5b50505050602260009054906101000a90046001600160a01b03166001600160a01b0316638456cb596040518163ffffffff1660e01b8152600401600060405180830381600087803b158015613ca857600080fd5b505af1158015613cbc573d6000803e3d6000fd5b505060248054602754604051620186a09381018490526001600160a01b039283166044820152911660648201529092506000915060840160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f357fc5a200000000000000000000000000000000000000000000000000000000179052517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fd93c0665000000000000000000000000000000000000000000000000000000006004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b158015613dd157600080fd5b505af1158015613de5573d6000803e3d6000fd5b505060285460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b158015613e4257600080fd5b505af1158015613e56573d6000803e3d6000fd5b50506022546024546021546040517f21fc65f20000000000000000000000000000000000000000000000000000000081526001600160a01b0393841695506321fc65f29450613eb3939283169290911690879087906004016195ea565b600060405180830381600087803b158015613ecd57600080fd5b505af1158015613ee1573d6000803e3d6000fd5b505060265460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b158015613f3e57600080fd5b505af1158015613f52573d6000803e3d6000fd5b50505050602260009054906101000a90046001600160a01b03166001600160a01b0316633f4ba83a6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015613fa657600080fd5b505af1158015613fba573d6000803e3d6000fd5b5050602480546027546040516370a0823160e01b81526001600160a01b03918216600482015260009550911692506370a0823191015b602060405180830381865afa15801561400d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614031919061966e565b905061403e816000615028565b602480546022546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa15801561408e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906140b2919061966e565b6020546040516001600160a01b0390911660248201526044810186905290915060009060640160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb0000000000000000000000000000000000000000000000000000000017905260245490517ff30c7ba3000000000000000000000000000000000000000000000000000000008152919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f30c7ba391614195916001600160a01b0391909116906000908690600401619687565b600060405180830381600087803b1580156141af57600080fd5b505af11580156141c3573d6000803e3d6000fd5b50506021546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b15801561425557600080fd5b505af1158015614269573d6000803e3d6000fd5b505060208054602454602754604080516001600160a01b0394851681529485018c905291831684830152919091166060830152517f2b58128f24a9f59127cc5b5430d70542b22220f2d9adaa86e442b816ab98af609350908190036080019150a16022546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b15801561435857600080fd5b505af115801561436c573d6000803e3d6000fd5b50506021546024546040516001600160a01b039283169450911691507f85b5be9cf454e05e0bddf49315178102227c312078eefa3c00294fb4d912ae4e906143b79089908990619713565b60405180910390a360285460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561441857600080fd5b505af115801561442c573d6000803e3d6000fd5b50506022546024546021546040517f21fc65f20000000000000000000000000000000000000000000000000000000081526001600160a01b0393841695506321fc65f294506144899392831692909116908a908a906004016195ea565b600060405180830381600087803b1580156144a357600080fd5b505af11580156144b7573d6000803e3d6000fd5b5050602480546027546040516370a0823160e01b81526001600160a01b03918216600482015260009550911692506370a082319101612793565b60248054602754604051620186a09381018490526001600160a01b0392831660448201529116606482015260009060840160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f357fc5a2000000000000000000000000000000000000000000000000000000001790526024805460275492516370a0823160e01b81526001600160a01b0393841660048201529394506000939216916370a082319101613ff0565b6060601580548060200260200160405190810160405280929190818152602001828054801561112f576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311611111575050505050905090565b600080604051602001614648907f68656c6c6f000000000000000000000000000000000000000000000000000000815260050190565b60408051808303601f190181529082905260285463ca669fa760e01b83526001600160a01b031660048301529150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156146af57600080fd5b505af11580156146c3573d6000803e3d6000fd5b50506040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527f951e19ed000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e091506024016134d9565b60248054602754604051620186a09381018490526001600160a01b0392831660448201529116606482015260009060840160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fc5131691000000000000000000000000000000000000000000000000000000001790526024805460275492516370a0823160e01b81526001600160a01b0393841660048201529394506000939216916370a082319101602060405180830381865afa158015614810573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614834919061966e565b9050614841816000615028565b602480546022546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa158015614891573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906148b5919061966e565b6020546040516001600160a01b0390911660248201526044810186905290915060009060640160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb0000000000000000000000000000000000000000000000000000000017905260245490517ff30c7ba3000000000000000000000000000000000000000000000000000000008152919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f30c7ba391614998916001600160a01b0391909116906000908690600401619687565b600060405180830381600087803b1580156149b257600080fd5b505af11580156149c6573d6000803e3d6000fd5b50506021546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b158015614a5857600080fd5b505af1158015614a6c573d6000803e3d6000fd5b50506020547f2b58128f24a9f59127cc5b5430d70542b22220f2d9adaa86e442b816ab98af6092506001600160a01b03169050614aaa60028861972c565b602454602754604080516001600160a01b03958616815260208101949094529184168383015292909216606082015290519081900360800190a16022546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b158015614b7257600080fd5b505af1158015614b86573d6000803e3d6000fd5b50506021546024546040516001600160a01b039283169450911691507f85b5be9cf454e05e0bddf49315178102227c312078eefa3c00294fb4d912ae4e90614bd19089908990619713565b60405180910390a360285460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015614c3257600080fd5b505af1158015614c46573d6000803e3d6000fd5b50506022546024546021546040517f21fc65f20000000000000000000000000000000000000000000000000000000081526001600160a01b0393841695506321fc65f29450614ca39392831692909116908a908a906004016195ea565b600060405180830381600087803b158015614cbd57600080fd5b505af1158015614cd1573d6000803e3d6000fd5b5050602480546027546040516370a0823160e01b81526001600160a01b03918216600482015260009550911692506370a082319101602060405180830381865afa158015614d23573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614d47919061966e565b9050614d58816117db60028961972c565b602480546022546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa158015614da8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614dcc919061966e565b905061286481614ddd60028a61972c565b6117db90876196de565b60265460405163ca669fa760e01b81526001600160a01b039091166004820152620186a090737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015614e4557600080fd5b505af1158015614e59573d6000803e3d6000fd5b5050602654604080516001600160a01b0390921660248301527f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e460448084019190915281518084039091018152606490920181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb39250614f4491906004016195d7565b600060405180830381600087803b158015614f5e57600080fd5b505af1158015614f72573d6000803e3d6000fd5b5050602254602480546027546040517fd9caed120000000000000000000000000000000000000000000000000000000081526001600160a01b0392831660048201529082169281019290925260448201869052909116925063d9caed129150606401600060405180830381600087803b158015614fee57600080fd5b505af1158015615002573d6000803e3d6000fd5b5050505050565b600061501361914e565b61501e8484836150a7565b9150505b92915050565b6040517f98296c540000000000000000000000000000000000000000000000000000000081526004810183905260248101829052737109709ecfa91a80626ff3989d68f67f5b1dd12d906398296c549060440160006040518083038186803b15801561509357600080fd5b505afa158015610f65573d6000803e3d6000fd5b6000806150b48584615122565b90506151176040518060400160405280601d81526020017f4552433139363750726f78792e736f6c3a4552433139363750726f787900000081525082866040516020016151029291906196f1565b6040516020818303038152906040528561512e565b9150505b9392505050565b600061511b838361515c565b60c081015151600090156151525761514b84848460c00151615177565b905061511b565b61514b848461531d565b60006151688383615408565b61511b8383602001518461512e565b600080615182615418565b9050600061519086836154eb565b905060006151a78260600151836020015185615991565b905060006151b783838989615ba3565b905060006151c482616a20565b602081015181519192509060030b15615237578982604001516040516020016151ee929190619767565b60408051601f19818403018152908290527f08c379a000000000000000000000000000000000000000000000000000000000825261522e916004016195d7565b60405180910390fd5b600061527a6040518060400160405280601581526020017f4465706c6f79656420746f20616464726573733a200000000000000000000000815250836001616bef565b6040517fc6ce059d000000000000000000000000000000000000000000000000000000008152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c6ce059d906152cd9084906004016195d7565b602060405180830381865afa1580156152ea573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061530e91906197e8565b9b9a5050505050505050505050565b6040517f8d1cc9250000000000000000000000000000000000000000000000000000000081526000908190737109709ecfa91a80626ff3989d68f67f5b1dd12d90638d1cc925906153729087906004016195d7565b600060405180830381865afa15801561538f573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526153b791908101906198f9565b905060006153e582856040516020016153d192919061992e565b604051602081830303815290604052616def565b90506001600160a01b03811661501e5784846040516020016151ee92919061995d565b61541482826000616e02565b5050565b604080518082018252600381527f6f75740000000000000000000000000000000000000000000000000000000000602082015290517fd145736c000000000000000000000000000000000000000000000000000000008152606091737109709ecfa91a80626ff3989d68f67f5b1dd12d91829063d145736c9061549f908490600401619a08565b600060405180830381865afa1580156154bc573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526154e49190810190619a4f565b9250505090565b61551d6040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b6000737109709ecfa91a80626ff3989d68f67f5b1dd12d90506155686040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b61557185616f05565b60208201526000615581866172ea565b90506000836001600160a01b031663d930a0e66040518163ffffffff1660e01b8152600401600060405180830381865afa1580156155c3573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526155eb9190810190619a4f565b868385602001516040516020016156059493929190619a98565b60408051601f19818403018152908290527f60f9bb1100000000000000000000000000000000000000000000000000000000825291506000906001600160a01b038616906360f9bb119061565d9085906004016195d7565b600060405180830381865afa15801561567a573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526156a29190810190619a4f565b6040517fdb4235f60000000000000000000000000000000000000000000000000000000081529091506001600160a01b0386169063db4235f6906156ea908490600401619b9c565b602060405180830381865afa158015615707573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061572b91906195b5565b61574057816040516020016151ee9190619bee565b6040517f49c4fac80000000000000000000000000000000000000000000000000000000081526001600160a01b038616906349c4fac890615785908490600401619c80565b600060405180830381865afa1580156157a2573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526157ca9190810190619a4f565b84526040517fdb4235f60000000000000000000000000000000000000000000000000000000081526001600160a01b0386169063db4235f690615811908490600401619cd2565b602060405180830381865afa15801561582e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061585291906195b5565b156158e7576040517f49c4fac80000000000000000000000000000000000000000000000000000000081526001600160a01b038616906349c4fac89061589c908490600401619cd2565b600060405180830381865afa1580156158b9573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526158e19190810190619a4f565b60408501525b846001600160a01b03166349c4fac882866000015160405160200161590c9190619d24565b6040516020818303038152906040526040518363ffffffff1660e01b8152600401615938929190619d90565b600060405180830381865afa158015615955573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261597d9190810190619a4f565b606085015250608083015250949350505050565b60408051600480825260a0820190925260609160009190816020015b60608152602001906001900390816159ad5790505090506040518060400160405280600481526020017f677265700000000000000000000000000000000000000000000000000000000081525081600081518110615a0d57615a0d619db5565b60200260200101819052506040518060400160405280600381526020017f2d726c000000000000000000000000000000000000000000000000000000000081525081600181518110615a6157615a61619db5565b602002602001018190525084604051602001615a7d9190619de4565b60405160208183030381529060405281600281518110615a9f57615a9f619db5565b602002602001018190525082604051602001615abb9190619e50565b60405160208183030381529060405281600381518110615add57615add619db5565b60200260200101819052506000615af382616a20565b602080820151604080518082018252600581527f2e6a736f6e0000000000000000000000000000000000000000000000000000008185019081528251808401845260008082529086015282518084019093529051825292810192909252919250615b84906040805180820182526000808252602091820152815180830190925284518252808501908201529061756d565b615b9957856040516020016151ee9190619e91565b9695505050505050565b60a0810151604080518082018252600080825260209182015281518083019092528251808352928101910152606090737109709ecfa91a80626ff3989d68f67f5b1dd12d9015615bf3565b511590565b615d6757826020015115615caf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605860248201527f54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f742060448201527f62652075736564207768656e207468652060736b6970566572696679536f757260648201527f6365436f646560206f7074696f6e206973206074727565600000000000000000608482015260a40161522e565b8260c0015115615d67576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605360248201527f54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f742060448201527f62652075736564207768656e207468652060736b69704c6963656e736554797060648201527f6560206f7074696f6e2069732060747275656000000000000000000000000000608482015260a40161522e565b6040805160ff8082526120008201909252600091816020015b6060815260200190600190039081615d8057905050905060006040518060400160405280600381526020017f6e70780000000000000000000000000000000000000000000000000000000000815250828280615ddb90619f22565b935060ff1681518110615df057615df0619db5565b60200260200101819052506040518060400160405280600d81526020017f302e302e312d616c7068612e3700000000000000000000000000000000000000815250604051602001615e419190619f41565b604051602081830303815290604052828280615e5c90619f22565b935060ff1681518110615e7157615e71619db5565b60200260200101819052506040518060400160405280600681526020017f6465706c6f790000000000000000000000000000000000000000000000000000815250828280615ebe90619f22565b935060ff1681518110615ed357615ed3619db5565b60200260200101819052506040518060400160405280600e81526020017f2d2d636f6e74726163744e616d65000000000000000000000000000000000000815250828280615f2090619f22565b935060ff1681518110615f3557615f35619db5565b60200260200101819052508760200151828280615f5190619f22565b935060ff1681518110615f6657615f66619db5565b60200260200101819052506040518060400160405280600e81526020017f2d2d636f6e747261637450617468000000000000000000000000000000000000815250828280615fb390619f22565b935060ff1681518110615fc857615fc8619db5565b602090810291909101015287518282615fe081619f22565b935060ff1681518110615ff557615ff5619db5565b60200260200101819052506040518060400160405280600981526020017f2d2d636861696e4964000000000000000000000000000000000000000000000081525082828061604290619f22565b935060ff168151811061605757616057619db5565b602002602001018190525061606b466175ce565b828261607681619f22565b935060ff168151811061608b5761608b619db5565b60200260200101819052506040518060400160405280600f81526020017f2d2d6275696c64496e666f46696c6500000000000000000000000000000000008152508282806160d890619f22565b935060ff16815181106160ed576160ed619db5565b60200260200101819052508682828061610590619f22565b935060ff168151811061611a5761611a619db5565b60209081029190910101528551156162415760408051808201909152601581527f2d2d636f6e7374727563746f7242797465636f646500000000000000000000006020820152828261616b81619f22565b935060ff168151811061618057616180619db5565b60209081029190910101526040517f71aad10d0000000000000000000000000000000000000000000000000000000081526001600160a01b038416906371aad10d906161d09089906004016195d7565b600060405180830381865afa1580156161ed573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526162159190810190619a4f565b828261622081619f22565b935060ff168151811061623557616235619db5565b60200260200101819052505b8460200151156163115760408051808201909152601281527f2d2d766572696679536f75726365436f646500000000000000000000000000006020820152828261628a81619f22565b935060ff168151811061629f5761629f619db5565b60200260200101819052506040518060400160405280600581526020017f66616c73650000000000000000000000000000000000000000000000000000008152508282806162ec90619f22565b935060ff168151811061630157616301619db5565b60200260200101819052506164d8565b616349615bee8660a0015160408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6163dc5760408051808201909152600d81527f2d2d6c6963656e736554797065000000000000000000000000000000000000006020820152828261638c81619f22565b935060ff16815181106163a1576163a1619db5565b60200260200101819052508460a001516040516020016163c19190619de4565b6040516020818303038152906040528282806162ec90619f22565b8460c0015115801561641f57506040808901518151808301835260008082526020918201528251808401909352815183529081019082015261641d90511590565b155b156164d85760408051808201909152600d81527f2d2d6c6963656e736554797065000000000000000000000000000000000000006020820152828261646381619f22565b935060ff168151811061647857616478619db5565b602002602001018190525061648c8861766e565b60405160200161649c9190619de4565b6040516020818303038152906040528282806164b790619f22565b935060ff16815181106164cc576164cc619db5565b60200260200101819052505b6040808601518151808301835260008082526020918201528251808401909352815183529081019082015261650c90511590565b6165a15760408051808201909152600b81527f2d2d72656c6179657249640000000000000000000000000000000000000000006020820152828261654f81619f22565b935060ff168151811061656457616564619db5565b6020026020010181905250846040015182828061658090619f22565b935060ff168151811061659557616595619db5565b60200260200101819052505b6060850151156166c25760408051808201909152600681527f2d2d73616c740000000000000000000000000000000000000000000000000000602082015282826165ea81619f22565b935060ff16815181106165ff576165ff619db5565b602090810291909101015260608501516040517fb11a19e800000000000000000000000000000000000000000000000000000000815260048101919091526001600160a01b0384169063b11a19e890602401600060405180830381865afa15801561666e573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526166969190810190619a4f565b82826166a181619f22565b935060ff16815181106166b6576166b6619db5565b60200260200101819052505b60e085015151156167695760408051808201909152600a81527f2d2d6761734c696d6974000000000000000000000000000000000000000000006020820152828261670c81619f22565b935060ff168151811061672157616721619db5565b602002602001018190525061673d8560e00151600001516175ce565b828261674881619f22565b935060ff168151811061675d5761675d619db5565b60200260200101819052505b60e085015160200151156168135760408051808201909152600a81527f2d2d676173507269636500000000000000000000000000000000000000000000602082015282826167b681619f22565b935060ff16815181106167cb576167cb619db5565b60200260200101819052506167e78560e00151602001516175ce565b82826167f281619f22565b935060ff168151811061680757616807619db5565b60200260200101819052505b60e085015160400151156168bd5760408051808201909152600e81527f2d2d6d61784665655065724761730000000000000000000000000000000000006020820152828261686081619f22565b935060ff168151811061687557616875619db5565b60200260200101819052506168918560e00151604001516175ce565b828261689c81619f22565b935060ff16815181106168b1576168b1619db5565b60200260200101819052505b60e085015160600151156169675760408051808201909152601681527f2d2d6d61785072696f72697479466565506572476173000000000000000000006020820152828261690a81619f22565b935060ff168151811061691f5761691f619db5565b602002602001018190525061693b8560e00151606001516175ce565b828261694681619f22565b935060ff168151811061695b5761695b619db5565b60200260200101819052505b60008160ff1667ffffffffffffffff81111561698557616985619811565b6040519080825280602002602001820160405280156169b857816020015b60608152602001906001900390816169a35790505b50905060005b8260ff168160ff161015616a1157838160ff16815181106169e1576169e1619db5565b6020026020010151828260ff16815181106169fe576169fe619db5565b60209081029190910101526001016169be565b5093505050505b949350505050565b616a476040518060600160405280600060030b815260200160608152602001606081525090565b60408051808201825260048082527f6261736800000000000000000000000000000000000000000000000000000000602083015291517fd145736c000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d92600091849163d145736c91616acd91869101619fac565b600060405180830381865afa158015616aea573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052616b129190810190619a4f565b90506000616b20868361815d565b90506000846001600160a01b031663f45c1ce7836040518263ffffffff1660e01b8152600401616b5091906194a7565b6000604051808303816000875af1158015616b6f573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052616b979190810190619ff3565b805190915060030b15801590616bb05750602081015151155b8015616bbf5750604081015151155b15615b995781600081518110616bd757616bd7619db5565b60200260200101516040516020016151ee919061a0a9565b60606000616c248560408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600080825260209182015281518083019092528651825280870190820152909150616c5b9082905b906182b2565b15616db8576000616cd882616cd284616ccc616c9e8a60408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6040805180820182526000808252602091820152815180830190925282518252918201519181019190915290565b906182d9565b9061833b565b604080518082018252600181527f0a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152909150616d3c9082906182b2565b15616da657604080518082018252600181527f0a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616da3905b82906183c0565b90505b616daf816183e6565b9250505061511b565b8215616dd15784846040516020016151ee92919061a295565b505060408051602081019091526000815261511b565b509392505050565b6000808251602084016000f09392505050565b8160a0015115616e1157505050565b6000616e1e84848461844f565b90506000616e2b82616a20565b602081015181519192509060030b158015616ec75750604080518082018252600781527f535543434553530000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616ec790604080518082018252600080825260209182015281518083019092528451825280850190820152616c55565b15616ed457505050505050565b60408201515115616ef45781604001516040516020016151ee919061a33c565b806040516020016151ee919061a39a565b60606000616f3a8360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600481527f2e736f6c0000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152909150616f9f905b829061756d565b1561700e57604080518082018252600481527f2e736f6c000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261511b906170099083906189ea565b6183e6565b604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617070905b8290618a74565b60010361713d57604080518082018252600181527f3a00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526170d690616d9c565b50604080518082018252600181527f3a000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261511b90617009905b83906183c0565b604080518082018252600581527f2e6a736f6e0000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261719c90616f98565b156172d357604080518082018252600181527f2f00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820181905284518086019095529251845283015290617204908390618b0e565b90506000816001835161721791906196de565b8151811061722757617227619db5565b602002602001015190506172ca61700961729d6040518060400160405280600581526020017f2e6a736f6e00000000000000000000000000000000000000000000000000000081525060408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600080825260209182015281518083019092528551825280860190820152906189ea565b95945050505050565b826040516020016151ee919061a405565b50919050565b6060600061731f8360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600481527f2e736f6c000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015290915061738190616f98565b1561738f5761511b816183e6565b604080518082018252600181527f3a00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526173ee90617069565b60010361745857604080518082018252600181527f3a000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261511b9061700990617136565b604080518082018252600581527f2e6a736f6e000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526174b790616f98565b156172d357604080518082018252600181527f2f0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082018190528451808601909552925184528301529061751f908390618b0e565b905060018151111561755b57806002825161753a91906196de565b8151811061754a5761754a619db5565b602002602001015192505050919050565b50826040516020016151ee919061a405565b80518251600091111561758257506000615022565b815183516020850151600092916175989161a4e3565b6175a291906196de565b9050826020015181036175b9576001915050615022565b82516020840151819020912014905092915050565b606060006175db83618bb3565b600101905060008167ffffffffffffffff8111156175fb576175fb619811565b6040519080825280601f01601f191660200182016040528015617625576020820181803683370190505b5090508181016020015b600019017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a850494508461762f57509392505050565b604081810151815180830183526000808252602091820181905283518085018552835181529282018383015283518085018552600a81527f554e4c4943454e53454400000000000000000000000000000000000000000000818401908152855180870187528381528401929092528451808601909552518452908301526060916176fa905b8290618c95565b1561773a57505060408051808201909152600481527f4e6f6e65000000000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600981527f556e6c6963656e7365000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617799906176f3565b156177d957505060408051808201909152600981527f556e6c6963656e736500000000000000000000000000000000000000000000006020820152919050565b604080518082018252600381527f4d4954000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617838906176f3565b1561787857505060408051808201909152600381527f4d495400000000000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f47504c2d322e302d6f6e6c790000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526178d7906176f3565b8061793c5750604080518082018252601081527f47504c2d322e302d6f722d6c61746572000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261793c906176f3565b1561797c57505060408051808201909152600981527f474e552047504c763200000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f47504c2d332e302d6f6e6c790000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526179db906176f3565b80617a405750604080518082018252601081527f47504c2d332e302d6f722d6c617465720000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617a40906176f3565b15617a8057505060408051808201909152600981527f474e552047504c763300000000000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4c47504c2d322e312d6f6e6c790000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617adf906176f3565b80617b445750604080518082018252601181527f4c47504c2d322e312d6f722d6c6174657200000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617b44906176f3565b15617b8457505060408051808201909152600c81527f474e55204c47504c76322e3100000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4c47504c2d332e302d6f6e6c790000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617be3906176f3565b80617c485750604080518082018252601181527f4c47504c2d332e302d6f722d6c6174657200000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617c48906176f3565b15617c8857505060408051808201909152600a81527f474e55204c47504c7633000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f4253442d322d436c61757365000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617ce7906176f3565b15617d2757505060408051808201909152600c81527f4253442d322d436c6175736500000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f4253442d332d436c61757365000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617d86906176f3565b15617dc657505060408051808201909152600c81527f4253442d332d436c6175736500000000000000000000000000000000000000006020820152919050565b604080518082018252600781527f4d504c2d322e300000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617e25906176f3565b15617e6557505060408051808201909152600781527f4d504c2d322e30000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600781527f4f534c2d332e300000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617ec4906176f3565b15617f0457505060408051808201909152600781527f4f534c2d332e30000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600a81527f4170616368652d322e300000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617f63906176f3565b15617fa357505060408051808201909152600a81527f4170616368652d322e30000000000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4147504c2d332e302d6f6e6c790000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152618002906176f3565b806180675750604080518082018252601181527f4147504c2d332e302d6f722d6c6174657200000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152618067906176f3565b156180a757505060408051808201909152600a81527f474e55204147504c7633000000000000000000000000000000000000000000006020820152919050565b604080518082018252600881527f4255534c2d312e3100000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152618106906176f3565b1561814657505060408051808201909152600781527f42534c20312e31000000000000000000000000000000000000000000000000006020820152919050565b604080840151845191516151ee929060200161a4f6565b60608060005b84518110156181e8578185828151811061817f5761817f619db5565b602002602001015160405160200161819892919061992e565b6040516020818303038152906040529150600185516181b791906196de565b81146181e057816040516020016181ce919061a65f565b60405160208183030381529060405291505b600101618163565b5060408051600380825260808201909252600091816020015b6060815260200190600190039081618201579050509050838160008151811061822c5761822c619db5565b60200260200101819052506040518060400160405280600281526020017f2d630000000000000000000000000000000000000000000000000000000000008152508160018151811061828057618280619db5565b6020026020010181905250818160028151811061829f5761829f619db5565b6020908102919091010152949350505050565b60208083015183518351928401516000936182d09291849190618ca9565b14159392505050565b6040805180820190915260008082526020820152600061830b8460000151856020015185600001518660200151618dba565b905083602001518161831d91906196de565b8451859061832c9083906196de565b90525060208401525090919050565b6040805180820190915260008082526020820152815183511015618360575081615022565b60208083015190840151600191146183875750815160208481015190840151829020919020145b80156183b85782518451859061839e9083906196de565b90525082516020850180516183b490839061a4e3565b9052505b509192915050565b60408051808201909152600080825260208201526183df838383618eda565b5092915050565b60606000826000015167ffffffffffffffff81111561840757618407619811565b6040519080825280601f01601f191660200182016040528015618431576020820181803683370190505b50905060006020820190506183df8185602001518660000151618f85565b6060600061845b615418565b6040805160ff808252612000820190925291925060009190816020015b606081526020019060019003908161847857905050905060006040518060400160405280600381526020017f6e707800000000000000000000000000000000000000000000000000000000008152508282806184d390619f22565b935060ff16815181106184e8576184e8619db5565b60200260200101819052506040518060400160405280600781526020017f5e312e33322e3300000000000000000000000000000000000000000000000000815250604051602001618539919061a6a0565b60405160208183030381529060405282828061855490619f22565b935060ff168151811061856957618569619db5565b60200260200101819052506040518060400160405280600881526020017f76616c69646174650000000000000000000000000000000000000000000000008152508282806185b690619f22565b935060ff16815181106185cb576185cb619db5565b6020026020010181905250826040516020016185e79190619e50565b60405160208183030381529060405282828061860290619f22565b935060ff168151811061861757618617619db5565b60200260200101819052506040518060400160405280600a81526020017f2d2d636f6e74726163740000000000000000000000000000000000000000000081525082828061866490619f22565b935060ff168151811061867957618679619db5565b602002602001018190525061868e8784618fff565b828261869981619f22565b935060ff16815181106186ae576186ae619db5565b60209081029190910101528551511561875a5760408051808201909152600b81527f2d2d7265666572656e63650000000000000000000000000000000000000000006020820152828261870081619f22565b935060ff168151811061871557618715619db5565b602002602001018190525061872e866000015184618fff565b828261873981619f22565b935060ff168151811061874e5761874e619db5565b60200260200101819052505b8560800151156187c85760408051808201909152601881527f2d2d756e73616665536b697053746f72616765436865636b0000000000000000602082015282826187a381619f22565b935060ff16815181106187b8576187b8619db5565b602002602001018190525061882e565b841561882e5760408051808201909152601281527f2d2d726571756972655265666572656e636500000000000000000000000000006020820152828261880d81619f22565b935060ff168151811061882257618822619db5565b60200260200101819052505b604086015151156188ca5760408051808201909152600d81527f2d2d756e73616665416c6c6f77000000000000000000000000000000000000006020820152828261887881619f22565b935060ff168151811061888d5761888d619db5565b602002602001018190525085604001518282806188a990619f22565b935060ff16815181106188be576188be619db5565b60200260200101819052505b8560600151156189345760408051808201909152601481527f2d2d756e73616665416c6c6f7752656e616d65730000000000000000000000006020820152828261891381619f22565b935060ff168151811061892857618928619db5565b60200260200101819052505b60008160ff1667ffffffffffffffff81111561895257618952619811565b60405190808252806020026020018201604052801561898557816020015b60608152602001906001900390816189705790505b50905060005b8260ff168160ff1610156189de57838160ff16815181106189ae576189ae619db5565b6020026020010151828260ff16815181106189cb576189cb619db5565b602090810291909101015260010161898b565b50979650505050505050565b6040805180820190915260008082526020820152815183511015618a0f575081615022565b81518351602085015160009291618a259161a4e3565b618a2f91906196de565b60208401519091506001908214618a50575082516020840151819020908220145b8015618a6b57835185518690618a679083906196de565b9052505b50929392505050565b6000808260000151618a988560000151866020015186600001518760200151618dba565b618aa2919061a4e3565b90505b83516020850151618ab6919061a4e3565b81116183df5781618ac68161a6e5565b9250508260000151618afd856020015183618ae191906196de565b8651618aed91906196de565b8386600001518760200151618dba565b618b07919061a4e3565b9050618aa5565b60606000618b1c8484618a74565b618b2790600161a4e3565b67ffffffffffffffff811115618b3f57618b3f619811565b604051908082528060200260200182016040528015618b7257816020015b6060815260200190600190039081618b5d5790505b50905060005b8151811015616de757618b8e61700986866183c0565b828281518110618ba057618ba0619db5565b6020908102919091010152600101618b78565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310618bfc577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310618c28576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc100008310618c4657662386f26fc10000830492506010015b6305f5e1008310618c5e576305f5e100830492506008015b6127108310618c7257612710830492506004015b60648310618c84576064830492506002015b600a83106150225760010192915050565b6000618ca1838361903f565b159392505050565b600080858411618db05760208411618d5c5760008415618cf4576001618cd08660206196de565b618cdb90600861a6ff565b618ce690600261a7fd565b618cf091906196de565b1990505b8351811685618d03898961a4e3565b618d0d91906196de565b805190935082165b818114618d4757878411618d2f5787945050505050616a18565b83618d398161a809565b945050828451169050618d15565b618d51878561a4e3565b945050505050616a18565b838320618d6985886196de565b618d73908761a4e3565b91505b858210618dae57848220808203618d9b57618d91868461a4e3565b9350505050616a18565b618da66001846196de565b925050618d76565b505b5092949350505050565b60008381868511618ec55760208511618e745760008515618e06576001618de28760206196de565b618ded90600861a6ff565b618df890600261a7fd565b618e0291906196de565b1990505b84518116600087618e178b8b61a4e3565b618e2191906196de565b855190915083165b828114618e6657818610618e4e57618e418b8b61a4e3565b9650505050505050616a18565b85618e588161a6e5565b965050838651169050618e29565b859650505050505050616a18565b508383206000905b618e8686896196de565b8211618ec357858320808203618ea25783945050505050616a18565b618ead60018561a4e3565b9350508180618ebb9061a6e5565b925050618e7c565b505b618ecf878761a4e3565b979650505050505050565b60408051808201909152600080825260208201526000618f0c8560000151866020015186600001518760200151618dba565b602080870180519186019190915251909150618f2890826196de565b835284516020860151618f3b919061a4e3565b8103618f4a5760008552618f7c565b83518351618f58919061a4e3565b85518690618f679083906196de565b9052508351618f76908261a4e3565b60208601525b50909392505050565b60208110618fbd5781518352618f9c60208461a4e3565b9250618fa960208361a4e3565b9150618fb66020826196de565b9050618f85565b6000198115618fec576001618fd38360206196de565b618fdf9061010061a7fd565b618fe991906196de565b90505b9151835183169219169190911790915250565b6060600061900d84846154eb565b80516020808301516040519394506190279390910161a820565b60405160208183030381529060405291505092915050565b8151815160009190811115619052575081515b6020808501519084015160005b8381101561910b57825182518082146190db5760001960208710156190ba5760018461908c8960206196de565b619096919061a4e3565b6190a190600861a6ff565b6190ac90600261a7fd565b6190b691906196de565b1990505b81811683821681810391146190d85797506150229650505050505050565b50505b6190e660208661a4e3565b94506190f360208561a4e3565b93505050602081619104919061a4e3565b905061905f565b5084518651615b99919061a878565b610c9f8061a89983390190565b61140b8061b53883390190565b61155a8061c94383390190565b610d5e8061de9d83390190565b6040518060e00160405280606081526020016060815260200160608152602001600015158152602001600015158152602001600015158152602001619191619196565b905290565b604051806101000160405280600015158152602001600015158152602001606081526020016000801916815260200160608152602001606081526020016000151581526020016191916040518060800160405280600081526020016000815260200160008152602001600081525090565b602080825282518282018190526000918401906040840190835b818110156192485783516001600160a01b0316835260209384019390920191600101619221565b509095945050505050565b60005b8381101561926e578181015183820152602001619256565b50506000910152565b6000815180845261928f816020860160208601619253565b601f01601f19169290920160200192915050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b8281101561939f577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452815180516001600160a01b03168652602090810151604082880181905281519088018190529101906060600582901b88018101919088019060005b81811015619385577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa08a850301835261936f848651619277565b6020958601959094509290920191600101619335565b5091975050506020948501949290920191506001016192cb565b50929695505050505050565b600081518084526020840193506020830160005b828110156193ff5781517fffffffff00000000000000000000000000000000000000000000000000000000168652602095860195909101906001016193bf565b5093949350505050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b8281101561939f577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc087860301845281518051604087526194756040880182619277565b905060208201519150868103602088015261949081836193ab565b965050506020938401939190910190600101619431565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b8281101561939f577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452619509858351619277565b945060209384019391909101906001016194cf565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b8281101561939f577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc087860301845281516001600160a01b038151168652602081015190506040602087015261959f60408701826193ab565b9550506020938401939190910190600101619546565b6000602082840312156195c757600080fd5b8151801515811461511b57600080fd5b60208152600061511b6020830184619277565b6001600160a01b03851681526001600160a01b0384166020820152826040820152608060608201526000615b996080830184619277565b600181811c9082168061963557607f821691505b6020821081036172e4577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006020828403121561968057600080fd5b5051919050565b6001600160a01b03841681528260208201526060604082015260006172ca6060830184619277565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b81810381811115615022576150226196af565b6001600160a01b0383168152604060208201526000616a186040830184619277565b828152604060208201526000616a186040830184619277565b600082619762577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b7f4661696c656420746f206465706c6f7920636f6e74726163742000000000000081526000835161979f81601a850160208801619253565b7f3a20000000000000000000000000000000000000000000000000000000000000601a9184019182015283516197dc81601c840160208801619253565b01601c01949350505050565b6000602082840312156197fa57600080fd5b81516001600160a01b038116811461511b57600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040516060810167ffffffffffffffff8111828210171561986357619863619811565b60405290565b60008067ffffffffffffffff84111561988457619884619811565b50604051601f19601f85018116603f0116810181811067ffffffffffffffff821117156198b3576198b3619811565b6040528381529050808284018510156198cb57600080fd5b616de7846020830185619253565b600082601f8301126198ea57600080fd5b61511b83835160208501619869565b60006020828403121561990b57600080fd5b815167ffffffffffffffff81111561992257600080fd5b61501e848285016198d9565b60008351619940818460208801619253565b835190830190619954818360208801619253565b01949350505050565b7f4661696c656420746f206465706c6f7920636f6e74726163742000000000000081526000835161999581601a850160208801619253565b7f207573696e6720636f6e7374727563746f722064617461202200000000000000601a9184019182015283516199d2816033840160208801619253565b7f220000000000000000000000000000000000000000000000000000000000000060339290910191820152603401949350505050565b60408152600b60408201527f464f554e4452595f4f5554000000000000000000000000000000000000000000606082015260806020820152600061511b6080830184619277565b600060208284031215619a6157600080fd5b815167ffffffffffffffff811115619a7857600080fd5b8201601f81018413619a8957600080fd5b61501e84825160208401619869565b60008551619aaa818460208a01619253565b7f2f000000000000000000000000000000000000000000000000000000000000009083019081528551619ae4816001840160208a01619253565b7f2f00000000000000000000000000000000000000000000000000000000000000600192909101918201528451619b22816002840160208901619253565b6001818301019150507f2f0000000000000000000000000000000000000000000000000000000000000060018201528351619b64816002840160208801619253565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600292909101918201526007019695505050505050565b604081526000619baf6040830184619277565b8281036020840152600481527f2e6173740000000000000000000000000000000000000000000000000000000060208201526040810191505092915050565b7f436f756c64206e6f742066696e642041535420696e2061727469666163742000815260008251619c2681601f850160208701619253565b7f2e205365742060617374203d20747275656020696e20666f756e6472792e746f601f9390910192830152507f6d6c000000000000000000000000000000000000000000000000000000000000603f820152604101919050565b604081526000619c936040830184619277565b8281036020840152601181527f2e6173742e6162736f6c7574655061746800000000000000000000000000000060208201526040810191505092915050565b604081526000619ce56040830184619277565b8281036020840152600c81527f2e6173742e6c6963656e7365000000000000000000000000000000000000000060208201526040810191505092915050565b7f2e6d657461646174612e736f75726365732e5b27000000000000000000000000815260008251619d5c816014850160208701619253565b7f275d2e6b656363616b32353600000000000000000000000000000000000000006014939091019283015250602001919050565b604081526000619da36040830185619277565b82810360208401526151178185619277565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f2200000000000000000000000000000000000000000000000000000000000000815260008251619e1c816001850160208701619253565b7f22000000000000000000000000000000000000000000000000000000000000006001939091019283015250600201919050565b60008251619e62818460208701619253565b7f2f6275696c642d696e666f000000000000000000000000000000000000000000920191825250600b01919050565b7f436f756c64206e6f742066696e64206275696c642d696e666f2066696c65207781527f697468206d61746368696e6720736f7572636520636f6465206861736820666f60208201527f7220636f6e747261637420000000000000000000000000000000000000000000604082015260008251619f1581604b850160208701619253565b91909101604b0192915050565b600060ff821660ff8103619f3857619f386196af565b60010192915050565b7f406f70656e7a657070656c696e2f646566656e6465722d6465706c6f792d636c81527f69656e742d636c69400000000000000000000000000000000000000000000000602082015260008251619f9f816029850160208701619253565b9190910160290192915050565b60408152601660408201527f4f50454e5a455050454c494e5f424153485f5041544800000000000000000000606082015260806020820152600061511b6080830184619277565b60006020828403121561a00557600080fd5b815167ffffffffffffffff81111561a01c57600080fd5b82016060818503121561a02e57600080fd5b61a036619840565b81518060030b811461a04757600080fd5b8152602082015167ffffffffffffffff81111561a06357600080fd5b61a06f868285016198d9565b602083015250604082015167ffffffffffffffff81111561a08f57600080fd5b61a09b868285016198d9565b604083015250949350505050565b7f4661696c656420746f2072756e206261736820636f6d6d616e6420776974682081527f220000000000000000000000000000000000000000000000000000000000000060208201526000825161a107816021850160208701619253565b7f222e20496620796f7520617265207573696e672057696e646f77732c2073657460219390910192830152507f20746865204f50454e5a455050454c494e5f424153485f5041544820656e766960418201527f726f6e6d656e74207661726961626c6520746f207468652066756c6c7920717560618201527f616c69666965642070617468206f66207468652062617368206578656375746160818201527f626c652e20466f72206578616d706c652c20696620796f75206172652075736960a18201527f6e672047697420666f722057696e646f77732c206164642074686520666f6c6c60c18201527f6f77696e67206c696e6520696e20746865202e656e762066696c65206f66207960e18201527f6f75722070726f6a65637420287573696e6720666f727761726420736c6173686101018201527f6573293a0a4f50454e5a455050454c494e5f424153485f504154483d22433a2f6101218201527f50726f6772616d2046696c65732f4769742f62696e2f6261736822000000000061014182015261015c01919050565b7f4661696c656420746f2066696e64206c696e652077697468207072656669782081527f270000000000000000000000000000000000000000000000000000000000000060208201526000835161a2f3816021850160208801619253565b7f2720696e206f75747075743a2000000000000000000000000000000000000000602191840191820152835161a33081602e840160208801619253565b01602e01949350505050565b7f4661696c656420746f2072756e2075706772616465207361666574792076616c81527f69646174696f6e3a200000000000000000000000000000000000000000000000602082015260008251619f9f816029850160208701619253565b7f55706772616465207361666574792076616c69646174696f6e206661696c656481527f3a0a00000000000000000000000000000000000000000000000000000000000060208201526000825161a3f8816022850160208701619253565b9190910160220192915050565b7f436f6e7472616374206e616d652000000000000000000000000000000000000081526000825161a43d81600e850160208701619253565b7f206d75737420626520696e2074686520666f726d6174204d79436f6e74726163600e9390910192830152507f742e736f6c3a4d79436f6e7472616374206f72204d79436f6e74726163742e73602e8201527f6f6c206f72206f75742f4d79436f6e74726163742e736f6c2f4d79436f6e7472604e8201527f6163742e6a736f6e000000000000000000000000000000000000000000000000606e820152607601919050565b80820180821115615022576150226196af565b7f53504458206c6963656e7365206964656e74696669657220000000000000000081526000835161a52e816018850160208801619253565b7f20696e2000000000000000000000000000000000000000000000000000000000601891840191820152835161a56b81601c840160208801619253565b7f20646f6573206e6f74206c6f6f6b206c696b65206120737570706f7274656420601c92909101918201527f6c6963656e736520666f7220626c6f636b206578706c6f726572207665726966603c8201527f69636174696f6e2e205573652074686520606c6963656e73655479706560206f605c8201527f7074696f6e20746f20737065636966792061206c6963656e736520747970652c607c8201527f206f7220736574207468652060736b69704c6963656e73655479706560206f70609c8201527f74696f6e20746f2060747275656020746f20736b69702e00000000000000000060bc82015260d301949350505050565b6000825161a671818460208701619253565b7f2000000000000000000000000000000000000000000000000000000000000000920191825250600101919050565b7f406f70656e7a657070656c696e2f75706772616465732d636f7265400000000081526000825161a6d881601c850160208701619253565b91909101601c0192915050565b6000600019820361a6f85761a6f86196af565b5060010190565b8082028115828204841417615022576150226196af565b6001815b600184111561a7515780850481111561a7355761a7356196af565b600184161561a74357908102905b60019390931c92800261a71a565b935093915050565b60008261a76857506001615022565b8161a77557506000615022565b816001811461a78b576002811461a7955761a7b1565b6001915050615022565b60ff84111561a7a65761a7a66196af565b50506001821b615022565b5060208310610133831016604e8410600b841016171561a7d4575081810a615022565b61a7e1600019848461a716565b806000190482111561a7f55761a7f56196af565b029392505050565b600061511b838361a759565b60008161a8185761a8186196af565b506000190190565b6000835161a832818460208801619253565b7f3a00000000000000000000000000000000000000000000000000000000000000908301908152835161a86c816001840160208801619253565b01600101949350505050565b81810360008312801583831316838312821617156183df576183df6196af56fe608060405234801561001057600080fd5b50604051610c9f380380610c9f83398101604081905261002f9161010d565b8181600361003d83826101ff565b50600461004a82826101ff565b50505050506102bd565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261007b57600080fd5b81516001600160401b0381111561009457610094610054565b604051601f8201601f19908116603f011681016001600160401b03811182821017156100c2576100c2610054565b6040528181528382016020018510156100da57600080fd5b60005b828110156100f9576020818601810151838301820152016100dd565b506000918101602001919091529392505050565b6000806040838503121561012057600080fd5b82516001600160401b0381111561013657600080fd5b6101428582860161006a565b602085015190935090506001600160401b0381111561016057600080fd5b61016c8582860161006a565b9150509250929050565b600181811c9082168061018a57607f821691505b6020821081036101aa57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156101fa57806000526020600020601f840160051c810160208510156101d75750805b601f840160051c820191505b818110156101f757600081556001016101e3565b50505b505050565b81516001600160401b0381111561021857610218610054565b61022c816102268454610176565b846101b0565b6020601f82116001811461026057600083156102485750848201515b600019600385901b1c1916600184901b1784556101f7565b600084815260208120601f198516915b828110156102905787850151825560209485019460019092019101610270565b50848210156102ae5786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b6109d3806102cc6000396000f3fe608060405234801561001057600080fd5b50600436106100be5760003560e01c806340c10f191161007657806395d89b411161005b57806395d89b4114610183578063a9059cbb1461018b578063dd62ed3e1461019e57600080fd5b806340c10f191461013857806370a082311461014d57600080fd5b806318160ddd116100a757806318160ddd1461010457806323b872dd14610116578063313ce5671461012957600080fd5b806306fdde03146100c3578063095ea7b3146100e1575b600080fd5b6100cb6101e4565b6040516100d891906107bf565b60405180910390f35b6100f46100ef366004610854565b610276565b60405190151581526020016100d8565b6002545b6040519081526020016100d8565b6100f461012436600461087e565b610290565b604051601281526020016100d8565b61014b610146366004610854565b6102b4565b005b61010861015b3660046108bb565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6100cb6102c2565b6100f4610199366004610854565b6102d1565b6101086101ac3660046108dd565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6060600380546101f390610910565b80601f016020809104026020016040519081016040528092919081815260200182805461021f90610910565b801561026c5780601f106102415761010080835404028352916020019161026c565b820191906000526020600020905b81548152906001019060200180831161024f57829003601f168201915b5050505050905090565b6000336102848185856102df565b60019150505b92915050565b60003361029e8582856102f1565b6102a98585856103c5565b506001949350505050565b6102be8282610470565b5050565b6060600480546101f390610910565b6000336102848185856103c5565b6102ec83838360016104cc565b505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146103bf57818110156103b0576040517ffb8f41b200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416600482015260248101829052604481018390526064015b60405180910390fd5b6103bf848484840360006104cc565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8316610415576040517f96c6fd1e000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff8216610465576040517fec442f05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b6102ec838383610614565b73ffffffffffffffffffffffffffffffffffffffff82166104c0576040517fec442f05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b6102be60008383610614565b73ffffffffffffffffffffffffffffffffffffffff841661051c576040517fe602df05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff831661056c576040517f94280d62000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260016020908152604080832093871683529290522082905580156103bf578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161060691815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff831661064c5780600260008282546106419190610963565b909155506106fe9050565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260208190526040902054818110156106d2576040517fe450d38c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8516600482015260248101829052604481018390526064016103a7565b73ffffffffffffffffffffffffffffffffffffffff841660009081526020819052604090209082900390555b73ffffffffffffffffffffffffffffffffffffffff821661072757600280548290039055610753565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090208054820190555b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516107b291815260200190565b60405180910390a3505050565b602081526000825180602084015260005b818110156107ed57602081860181015160408684010152016107d0565b5060006040828501015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011684010191505092915050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461084f57600080fd5b919050565b6000806040838503121561086757600080fd5b6108708361082b565b946020939093013593505050565b60008060006060848603121561089357600080fd5b61089c8461082b565b92506108aa6020850161082b565b929592945050506040919091013590565b6000602082840312156108cd57600080fd5b6108d68261082b565b9392505050565b600080604083850312156108f057600080fd5b6108f98361082b565b91506109076020840161082b565b90509250929050565b600181811c9082168061092457607f821691505b60208210810361095d577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b8082018082111561028a577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea26469706673582212207e804ca539d49155d2b6bc19268ce22f9f857027c75247d69fb0d56a089c93d464736f6c634300081a003360a060405234801561001057600080fd5b5060405161140b38038061140b83398101604081905261002f916101b3565b60016000556002805460ff191690556001600160a01b038316158061005b57506001600160a01b038216155b8061006d57506001600160a01b038116155b1561008b5760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b0383166080526100a3600082610102565b506100ce7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a82610102565b506100f97f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e483610102565b505050506101f6565b60008281526001602090815260408083206001600160a01b038516845290915281205460ff1661018d5760008381526001602081815260408084206001600160a01b0387168086529252808420805460ff19169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a4506001610191565b5060005b92915050565b80516001600160a01b03811681146101ae57600080fd5b919050565b6000806000606084860312156101c857600080fd5b6101d184610197565b92506101df60208501610197565b91506101ed60408501610197565b90509250925092565b6080516111de61022d60003960008181610132015281816103c5015281816104270152818161065801526106ba01526111de6000f3fe608060405234801561001057600080fd5b50600436106101005760003560e01c80638456cb5911610097578063c8a0236211610066578063c8a0236214610276578063d547741f14610289578063d9caed121461029c578063e63ab1e9146102af57600080fd5b80638456cb59146101f957806385f438c11461020157806391d1485414610228578063a217fddf1461026e57600080fd5b80632f2ff15d116100d35780632f2ff15d146101c057806336568abe146101d35780633f4ba83a146101e65780635c975abb146101ee57600080fd5b806301ffc9a714610105578063116191b61461012d57806321fc65f214610179578063248a9ca31461018e575b600080fd5b610118610113366004610f04565b6102d6565b60405190151581526020015b60405180910390f35b6101547f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610124565b61018c610187366004610f6f565b61036f565b005b6101b261019c36600461100c565b6000908152600160208190526040909120015490565b604051908152602001610124565b61018c6101ce366004611025565b610511565b61018c6101e1366004611025565b61053d565b61018c61059b565b60025460ff16610118565b61018c6105d0565b6101b27f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b610118610236366004611025565b600091825260016020908152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b6101b2600081565b61018c610284366004610f6f565b610602565b61018c610297366004611025565b61078a565b61018c6102aa366004611051565b6107b0565b6101b27f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061036957507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b61037761087d565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e46103a1816108c0565b6103a96108ca565b6103ea73ffffffffffffffffffffffffffffffffffffffff87167f000000000000000000000000000000000000000000000000000000000000000086610909565b6040517f5131ab5900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690635131ab599061046490899089908990899089906004016110d7565b600060405180830381600087803b15801561047e57600080fd5b505af1158015610492573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167f85b5be9cf454e05e0bddf49315178102227c312078eefa3c00294fb4d912ae4e8686866040516104f793929190611134565b60405180910390a35061050a6001600055565b5050505050565b6000828152600160208190526040909120015461052d816108c0565b6105378383610996565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8116331461058c576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6105968282610a61565b505050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a6105c5816108c0565b6105cd610b20565b50565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a6105fa816108c0565b6105cd610b9d565b61060a61087d565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e4610634816108c0565b61063c6108ca565b61067d73ffffffffffffffffffffffffffffffffffffffff87167f000000000000000000000000000000000000000000000000000000000000000086610909565b6040517fb8969bd400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063b8969bd4906106f790899089908990899089906004016110d7565b600060405180830381600087803b15801561071157600080fd5b505af1158015610725573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fb9d4efa96044e5f5e03e696fa9ae2ff66911cc27e8a637c3627c75bc5b2241c88686866040516104f793929190611134565b600082815260016020819052604090912001546107a6816108c0565b6105378383610a61565b6107b861087d565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e46107e2816108c0565b6107ea6108ca565b61080b73ffffffffffffffffffffffffffffffffffffffff85168484610909565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f9b1bfa7fa9ee420a16e124f794c35ac9f90472acc99140eb2f6447c714cad8eb8460405161086a91815260200190565b60405180910390a3506105966001600055565b6002600054036108b9576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b6105cd8133610bf8565b60025460ff1615610907576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6040805173ffffffffffffffffffffffffffffffffffffffff8416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb00000000000000000000000000000000000000000000000000000000179052610596908490610c89565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff16610a5957600083815260016020818152604080842073ffffffffffffffffffffffffffffffffffffffff8716808652925280842080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a4506001610369565b506000610369565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff1615610a5957600083815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8616808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a4506001610369565b610b28610d1f565b600280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b610ba56108ca565b600280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258610b733390565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16610c85576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82166004820152602481018390526044015b60405180910390fd5b5050565b6000610cab73ffffffffffffffffffffffffffffffffffffffff841683610d5b565b90508051600014158015610cd0575080806020019051810190610cce9190611157565b155b15610596576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84166004820152602401610c7c565b60025460ff16610907576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6060610d6983836000610d70565b9392505050565b606081471015610dae576040517fcd786059000000000000000000000000000000000000000000000000000000008152306004820152602401610c7c565b6000808573ffffffffffffffffffffffffffffffffffffffff168486604051610dd79190611179565b60006040518083038185875af1925050503d8060008114610e14576040519150601f19603f3d011682016040523d82523d6000602084013e610e19565b606091505b5091509150610e29868383610e33565b9695505050505050565b606082610e4857610e4382610ec2565b610d69565b8151158015610e6c575073ffffffffffffffffffffffffffffffffffffffff84163b155b15610ebb576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85166004820152602401610c7c565b5080610d69565b805115610ed25780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060208284031215610f1657600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610d6957600080fd5b803573ffffffffffffffffffffffffffffffffffffffff81168114610f6a57600080fd5b919050565b600080600080600060808688031215610f8757600080fd5b610f9086610f46565b9450610f9e60208701610f46565b935060408601359250606086013567ffffffffffffffff811115610fc157600080fd5b8601601f81018813610fd257600080fd5b803567ffffffffffffffff811115610fe957600080fd5b886020828401011115610ffb57600080fd5b959894975092955050506020019190565b60006020828403121561101e57600080fd5b5035919050565b6000806040838503121561103857600080fd5b8235915061104860208401610f46565b90509250929050565b60008060006060848603121561106657600080fd5b61106f84610f46565b925061107d60208501610f46565b929592945050506040919091013590565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff8616815273ffffffffffffffffffffffffffffffffffffffff8516602082015283604082015260806060820152600061112960808301848661108e565b979650505050505050565b83815260406020820152600061114e60408301848661108e565b95945050505050565b60006020828403121561116957600080fd5b81518015158114610d6957600080fd5b6000825160005b8181101561119a5760208186018101518583015201611180565b50600092019182525091905056fea264697066735822122069d5c5c3cb2752c876b6a2138d8d9b66bac6bd1b48a1fe98417eea81faf02a3e64736f6c634300081a003360c060405260001960035534801561001657600080fd5b5060405161155a38038061155a83398101604081905261003591610220565b60016000819055805460ff19169055838383836001600160a01b038416158061006557506001600160a01b038316155b8061007757506001600160a01b038216155b8061008957506001600160a01b038116155b156100a75760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b03808516608052831660a0526100c5600082610154565b506100f07f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e483610154565b5061011b7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb83610154565b506101467f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a82610154565b505050505050505050610274565b60008281526002602090815260408083206001600160a01b038516845290915281205460ff166101fa5760008381526002602090815260408083206001600160a01b03861684529091529020805460ff191660011790556101b23390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45060016101fe565b5060005b92915050565b80516001600160a01b038116811461021b57600080fd5b919050565b6000806000806080858703121561023657600080fd5b61023f85610204565b935061024d60208601610204565b925061025b60408601610204565b915061026960608601610204565b905092959194509250565b60805160a0516112826102d86000396000818161021d01528181610531015281816108240152818161097b01528181610ad00152610bf20152600081816101d1015281816104a1015281816105040152818161079401526107f701526112826000f3fe608060405234801561001057600080fd5b50600436106101775760003560e01c80635e3e9fef116100d857806391d148541161008c578063d547741f11610066578063d547741f14610386578063d5abeb0114610399578063e63ab1e9146103a257600080fd5b806391d1485414610311578063a217fddf14610357578063a783c7891461035f57600080fd5b8063743e0c9b116100bd578063743e0c9b146102cf5780638456cb59146102e257806385f438c1146102ea57600080fd5b80635e3e9fef146102a95780636f8b44b0146102bc57600080fd5b8063248a9ca31161012f57806336568abe1161011457806336568abe146102835780633f4ba83a146102965780635c975abb1461029e57600080fd5b8063248a9ca31461023f5780632f2ff15d1461027057600080fd5b8063106e629011610160578063106e6290146101b9578063116191b6146101cc57806321e093b11461021857600080fd5b806301ffc9a71461017c57806302d5c899146101a4575b600080fd5b61018f61018a366004610fb4565b6103c9565b60405190151581526020015b60405180910390f35b6101b76101b2366004611026565b610462565b005b6101b76101c73660046110b8565b6105f7565b6101f37f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161019b565b6101f37f000000000000000000000000000000000000000000000000000000000000000081565b61026261024d3660046110eb565b60009081526002602052604090206001015490565b60405190815260200161019b565b6101b761027e366004611104565b61069c565b6101b7610291366004611104565b6106c7565b6101b7610720565b60015460ff1661018f565b6101b76102b7366004611026565b610755565b6101b76102ca3660046110eb565b6108d0565b6101b76102dd3660046110eb565b61093e565b6101b76109e8565b6102627f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b61018f61031f366004611104565b600091825260026020908152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b610262600081565b6102627f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb81565b6101b7610394366004611104565b610a1a565b61026260035481565b6102627f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061045c57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b61046a610a3f565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461049481610a82565b61049c610a8c565b6104c77f00000000000000000000000000000000000000000000000000000000000000008684610acb565b6040517fb8969bd400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063b8969bd490610561907f0000000000000000000000000000000000000000000000000000000000000000908a908a908a908a90600401611179565b600060405180830381600087803b15801561057b57600080fd5b505af115801561058f573d6000803e3d6000fd5b505050508573ffffffffffffffffffffffffffffffffffffffff167fba96f26bdda53eb8c8ba39045dfb4ff39753fbc7a6edcf250a88e75e78d102fe8686866040516105dd939291906111d6565b60405180910390a2506105f06001600055565b5050505050565b6105ff610a3f565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461062981610a82565b610631610a8c565b61063c848484610acb565b8373ffffffffffffffffffffffffffffffffffffffff167f884edad9ce6fa2440d8a54cc123490eb96d2768479d49ff9c7366125a94243648460405161068491815260200190565b60405180910390a2506106976001600055565b505050565b6000828152600260205260409020600101546106b781610a82565b6106c18383610c53565b50505050565b73ffffffffffffffffffffffffffffffffffffffff81163314610716576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6106978282610d53565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61074a81610a82565b610752610e12565b50565b61075d610a3f565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461078781610a82565b61078f610a8c565b6107ba7f00000000000000000000000000000000000000000000000000000000000000008684610acb565b6040517f5131ab5900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690635131ab5990610854907f0000000000000000000000000000000000000000000000000000000000000000908a908a908a908a90600401611179565b600060405180830381600087803b15801561086e57600080fd5b505af1158015610882573d6000803e3d6000fd5b505050508573ffffffffffffffffffffffffffffffffffffffff167f7772f56296d3a5202974a45c61c9188d844ab4d6eeb18c851e4b8d5384ca6ced8686866040516105dd939291906111d6565b7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb6108fa81610a82565b610902610a8c565b60038290556040518281527f7810bd47de260c3e9ee10061cf438099dd12256c79485f12f94dbccc981e806c9060200160405180910390a15050565b610946610a8c565b6040517f79cc6790000000000000000000000000000000000000000000000000000000008152336004820152602481018290527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16906379cc679090604401600060405180830381600087803b1580156109d457600080fd5b505af11580156105f0573d6000803e3d6000fd5b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610a1281610a82565b610752610e8f565b600082815260026020526040902060010154610a3581610a82565b6106c18383610d53565b600260005403610a7b576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b6107528133610ee8565b60015460ff1615610ac9576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6003547f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b39573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b5d91906111f9565b610b679084611212565b1115610b9f576040517fc30436e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f1e458bee00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff848116600483015260248201849052604482018390527f00000000000000000000000000000000000000000000000000000000000000001690631e458bee90606401600060405180830381600087803b158015610c3657600080fd5b505af1158015610c4a573d6000803e3d6000fd5b50505050505050565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff16610d4b57600083815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff86168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055610ce93390565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a450600161045c565b50600061045c565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff1615610d4b57600083815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8616808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a450600161045c565b610e1a610f78565b600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b610e97610a8c565b600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016811790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25833610e65565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16610f74576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff821660048201526024810183905260440160405180910390fd5b5050565b60015460ff16610ac9576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060208284031215610fc657600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610ff657600080fd5b9392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461102157600080fd5b919050565b60008060008060006080868803121561103e57600080fd5b61104786610ffd565b945060208601359350604086013567ffffffffffffffff81111561106a57600080fd5b8601601f8101881361107b57600080fd5b803567ffffffffffffffff81111561109257600080fd5b8860208284010111156110a457600080fd5b959894975060200195606001359392505050565b6000806000606084860312156110cd57600080fd5b6110d684610ffd565b95602085013595506040909401359392505050565b6000602082840312156110fd57600080fd5b5035919050565b6000806040838503121561111757600080fd5b8235915061112760208401610ffd565b90509250929050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff8616815273ffffffffffffffffffffffffffffffffffffffff851660208201528360408201526080606082015260006111cb608083018486611130565b979650505050505050565b8381526040602082015260006111f0604083018486611130565b95945050505050565b60006020828403121561120b57600080fd5b5051919050565b8082018082111561045c577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea2646970667358221220f784eb6e1655c2988d3f762737188cfee07a61da1d5b8456cc4f4e55cb339cfb64736f6c634300081a00336080604052348015600f57600080fd5b506001600055610d3a806100246000396000f3fe6080604052600436106100635760003560e01c8063c513169111610040578063c5131691146100c1578063e04d4f97146100e1578063f05b6abf146100f457005b8063357fc5a21461006c5780636ed701691461008c5780638fcaa0b5146100a157005b3661006a57005b005b34801561007857600080fd5b5061006a6100873660046106c0565b610114565b34801561009857600080fd5b5061006a6101aa565b3480156100ad57600080fd5b5061006a6100bc3660046106fc565b6101df565b3480156100cd57600080fd5b5061006a6100dc3660046106c0565b61021e565b61006a6100ef366004610895565b6102f9565b34801561010057600080fd5b5061006a61010f366004610981565b61033d565b61011c610372565b61013e73ffffffffffffffffffffffffffffffffffffffff83163383866103b5565b604080513381526020810185905273ffffffffffffffffffffffffffffffffffffffff848116828401528316606082015290517f2b58128f24a9f59127cc5b5430d70542b22220f2d9adaa86e442b816ab98af609181900360800190a16101a56001600055565b505050565b6040513381527fbcaadb46b82a48af60b608f58959ae6b8310d1b0a0d094c2e9ec3208ed39f2a09060200160405180910390a1565b7f0d3f65f00e631663aa85c96330b5c7a83bb29af3630c0063776f985edc3037aa33838360405161021293929190610a6b565b60405180910390a15050565b610226610372565b6000610233600285610ad5565b90508060000361026f576040517f1f2a200500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61029173ffffffffffffffffffffffffffffffffffffffff84163384846103b5565b604080513381526020810183905273ffffffffffffffffffffffffffffffffffffffff858116828401528416606082015290517f2b58128f24a9f59127cc5b5430d70542b22220f2d9adaa86e442b816ab98af609181900360800190a1506101a56001600055565b7f1f1ff1f5fb41346850b2f5c04e6c767e2f1c8a525c5c0c5cdb60cdf3ca5f62fa3334858585604051610330959493929190610b7e565b60405180910390a1505050565b7f74a53cd528a921fca7dbdee62f86819051d3cc98f214951f4238e8843f20b146338484846040516103309493929190610c08565b6002600054036103ae576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b6040805173ffffffffffffffffffffffffffffffffffffffff85811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd0000000000000000000000000000000000000000000000000000000017905261044a908590610450565b50505050565b600061047273ffffffffffffffffffffffffffffffffffffffff8416836104eb565b905080516000141580156104975750808060200190518101906104959190610ccb565b155b156101a5576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff841660048201526024015b60405180910390fd5b60606104f983836000610500565b9392505050565b60608147101561053e576040517fcd7860590000000000000000000000000000000000000000000000000000000081523060048201526024016104e2565b6000808573ffffffffffffffffffffffffffffffffffffffff1684866040516105679190610ce8565b60006040518083038185875af1925050503d80600081146105a4576040519150601f19603f3d011682016040523d82523d6000602084013e6105a9565b606091505b50915091506105b98683836105c3565b9695505050505050565b6060826105d8576105d382610652565b6104f9565b81511580156105fc575073ffffffffffffffffffffffffffffffffffffffff84163b155b1561064b576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff851660048201526024016104e2565b50806104f9565b8051156106625780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50565b803573ffffffffffffffffffffffffffffffffffffffff811681146106bb57600080fd5b919050565b6000806000606084860312156106d557600080fd5b833592506106e560208501610697565b91506106f360408501610697565b90509250925092565b6000806020838503121561070f57600080fd5b823567ffffffffffffffff81111561072657600080fd5b8301601f8101851361073757600080fd5b803567ffffffffffffffff81111561074e57600080fd5b85602082840101111561076057600080fd5b6020919091019590945092505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156107e6576107e6610770565b604052919050565b600082601f8301126107ff57600080fd5b813567ffffffffffffffff81111561081957610819610770565b61084a60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8401160161079f565b81815284602083860101111561085f57600080fd5b816020850160208301376000918101602001919091529392505050565b801515811461069457600080fd5b80356106bb8161087c565b6000806000606084860312156108aa57600080fd5b833567ffffffffffffffff8111156108c157600080fd5b6108cd868287016107ee565b9350506020840135915060408401356108e58161087c565b809150509250925092565b600067ffffffffffffffff82111561090a5761090a610770565b5060051b60200190565b600082601f83011261092557600080fd5b8135610938610933826108f0565b61079f565b8082825260208201915060208360051b86010192508583111561095a57600080fd5b602085015b8381101561097757803583526020928301920161095f565b5095945050505050565b60008060006060848603121561099657600080fd5b833567ffffffffffffffff8111156109ad57600080fd5b8401601f810186136109be57600080fd5b80356109cc610933826108f0565b8082825260208201915060208360051b8501019250888311156109ee57600080fd5b602084015b83811015610a3057803567ffffffffffffffff811115610a1257600080fd5b610a218b6020838901016107ee565b845250602092830192016109f3565b509550505050602084013567ffffffffffffffff811115610a5057600080fd5b610a5c86828701610914565b9250506106f36040850161088a565b73ffffffffffffffffffffffffffffffffffffffff8416815260406020820152816040820152818360608301376000818301606090810191909152601f9092017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016010192915050565b600082610b0b577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60005b83811015610b2b578181015183820152602001610b13565b50506000910152565b60008151808452610b4c816020860160208601610b10565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b73ffffffffffffffffffffffffffffffffffffffff8616815284602082015260a060408201526000610bb360a0830186610b34565b6060830194909452509015156080909101529392505050565b600081518084526020840193506020830160005b82811015610bfe578151865260209586019590910190600101610be0565b5093949350505050565b60006080820173ffffffffffffffffffffffffffffffffffffffff871683526080602084015280865180835260a08501915060a08160051b86010192506020880160005b82811015610c9b577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60878603018452610c86858351610b34565b94506020938401939190910190600101610c4c565b505050508281036040840152610cb18186610bcc565b915050610cc2606083018415159052565b95945050505050565b600060208284031215610cdd57600080fd5b81516104f98161087c565b60008251610cfa818460208701610b10565b919091019291505056fea2646970667358221220556072e1abafc3c4063b8cce832228b4f309b93726aaa6a6dfab20cb880c6d1864736f6c634300081a0033a2646970667358221220712d6692d7d0bd864639b6d045fe35099672151834ec338f22aa3dc10a54ef7864736f6c634300081a0033", + ABI: "[{\"type\":\"function\",\"name\":\"ASSET_HANDLER_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"IS_TEST\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"PAUSER_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"TSS_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"WHITELISTER_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"WITHDRAWER_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeArtifacts\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedArtifacts_\",\"type\":\"string[]\",\"internalType\":\"string[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeContracts\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedContracts_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeSelectors\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedSelectors_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzSelector[]\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"selectors\",\"type\":\"bytes4[]\",\"internalType\":\"bytes4[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeSenders\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedSenders_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"failed\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"setUp\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"targetArtifactSelectors\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedArtifactSelectors_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzArtifactSelector[]\",\"components\":[{\"name\":\"artifact\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"selectors\",\"type\":\"bytes4[]\",\"internalType\":\"bytes4[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetArtifacts\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedArtifacts_\",\"type\":\"string[]\",\"internalType\":\"string[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetContracts\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedContracts_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetInterfaces\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedInterfaces_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzInterface[]\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"artifacts\",\"type\":\"string[]\",\"internalType\":\"string[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetSelectors\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedSelectors_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzSelector[]\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"selectors\",\"type\":\"bytes4[]\",\"internalType\":\"bytes4[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetSenders\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedSenders_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"testForwardCallToReceiveERC20PartialThroughCustody\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testForwardCallToReceiveERC20PartialThroughCustodyFailsIfAmountIs0\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testForwardCallToReceiveERC20PartialThroughCustodyFailsIfSenderIsNotWithdrawer\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testForwardCallToReceiveERC20ThroughCustody\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testForwardCallToReceiveERC20ThroughCustodyFailsIfAmountIs0\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testForwardCallToReceiveERC20ThroughCustodyFailsIfReceiverIsZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testForwardCallToReceiveERC20ThroughCustodyFailsIfSenderIsNotWithdrawer\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testForwardCallToReceiveERC20ThroughCustodyTogglePause\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testForwardCallToReceiveNoParamsThroughCustody\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testNewCustodyFailsIfAddressesAreZero\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testUnwhitelist\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testUnwhitelistFailsIfSenderIsNotWhitelister\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWhitelist\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWhitelistFailsIfSenderIsNotWhitelister\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawAndCallFailsIfTokenIsNotWhitelisted\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawAndRevertFailsIfTokenIsNotWhitelisted\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawAndRevertThroughCustody\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawAndRevertThroughCustodyFailsIfAmountIs0\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawAndRevertThroughCustodyFailsIfReceiverIsZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawAndRevertThroughCustodyFailsIfSenderIsNotWithdrawer\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawFailsIfTokenIsNotWhitelisted\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawThroughCustody\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawThroughCustodyFailsIfSenderIsNotWithdrawer\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"event\",\"name\":\"Call\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"receiver\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Deposit\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"receiver\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"asset\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Executed\",\"inputs\":[{\"name\":\"destination\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ExecutedWithERC20\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedERC20\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"token\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"destination\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedNoParams\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedNonPayable\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"strs\",\"type\":\"string[]\",\"indexed\":false,\"internalType\":\"string[]\"},{\"name\":\"nums\",\"type\":\"uint256[]\",\"indexed\":false,\"internalType\":\"uint256[]\"},{\"name\":\"flag\",\"type\":\"bool\",\"indexed\":false,\"internalType\":\"bool\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedPayable\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"str\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"num\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"flag\",\"type\":\"bool\",\"indexed\":false,\"internalType\":\"bool\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedRevert\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Reverted\",\"inputs\":[{\"name\":\"destination\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RevertedWithERC20\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Unwhitelisted\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Whitelisted\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Withdraw\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"WithdrawAndCall\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"WithdrawAndRevert\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log\",\"inputs\":[{\"name\":\"\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_address\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_array\",\"inputs\":[{\"name\":\"val\",\"type\":\"uint256[]\",\"indexed\":false,\"internalType\":\"uint256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_array\",\"inputs\":[{\"name\":\"val\",\"type\":\"int256[]\",\"indexed\":false,\"internalType\":\"int256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_array\",\"inputs\":[{\"name\":\"val\",\"type\":\"address[]\",\"indexed\":false,\"internalType\":\"address[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_bytes\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_bytes32\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_int\",\"inputs\":[{\"name\":\"\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_address\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_array\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"uint256[]\",\"indexed\":false,\"internalType\":\"uint256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_array\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"int256[]\",\"indexed\":false,\"internalType\":\"int256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_array\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"address[]\",\"indexed\":false,\"internalType\":\"address[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_bytes\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_bytes32\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_decimal_int\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"},{\"name\":\"decimals\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_decimal_uint\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"decimals\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_int\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_string\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_uint\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_string\",\"inputs\":[{\"name\":\"\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_uint\",\"inputs\":[{\"name\":\"\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"logs\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"AccessControlUnauthorizedAccount\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"neededRole\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"type\":\"error\",\"name\":\"ApprovalFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ConnectorInitialized\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"CustodyInitialized\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"DepositFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"EnforcedPause\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ExecutionFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientERC20Amount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientETHAmount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NotWhitelisted\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NotWhitelistedInCustody\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZeroAddress\",\"inputs\":[]}]", + Bin: "0x6080604052600c8054600160ff199182168117909255601f80549091169091179055348015602c57600080fd5b50620102bf806200003e6000396000f3fe608060405234801561001057600080fd5b50600436106102d35760003560e01c806385226c8111610186578063c713f827116100e3578063f0c8e7e011610097578063fa7626d411610071578063fa7626d41461050d578063fb176c121461051a578063fe8e5f1b1461052257600080fd5b8063f0c8e7e0146104f5578063f4221f08146104fd578063fa2a70741461050557600080fd5b8063e20c9f71116100c8578063e20c9f71146104be578063e63ab1e9146104c6578063eb1ce7f9146104ed57600080fd5b8063c713f827146104ae578063cbd57e2f146104b657600080fd5b8063a4943deb1161013a578063b0464fdc1161011f578063b0464fdc14610486578063b5508aa91461048e578063ba414fa61461049657600080fd5b8063a4943deb14610457578063a783c7891461045f57600080fd5b8063916a17c61161016b578063916a17c6146104325780639918c1c214610447578063a3f9d0e01461044f57600080fd5b806385226c81146103f657806385f438c11461040b57600080fd5b80633f7286f41161023457806366d9a9a0116101e857806371149c94116101cd57806371149c94146103de5780637e91c50f146103e657806382c52992146103ee57600080fd5b806366d9a9a0146103c15780636a621854146103d657600080fd5b806351ecdf3c1161021957806351ecdf3c1461035d578063570618e1146103655780635d62c8601461039a57600080fd5b80633f7286f41461034d5780634b5838d21461035557600080fd5b80632ade38801161028b5780633e5e3c23116102705780633e5e3c23146103355780633e73ecb41461033d5780633ee929231461034557600080fd5b80632ade3880146103185780632be6a1621461032d57600080fd5b80631779672f116102bc5780631779672f146102ea5780631ed7831c146102f2578063284cb9291461031057600080fd5b80630a9254e4146102d85780630eee72a9146102e2575b600080fd5b6102e061052a565b005b6102e0610e69565b6102e061110e565b6102fa611278565b604051610307919061a5a3565b60405180910390f35b6102e06112da565b6103206115d7565b604051610307919061a63f565b6102e0611719565b6102fa6118db565b6102e061193b565b6102e0611eca565b6102fa611f99565b6102e0611ff9565b6102e0612367565b61038c7f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a81565b604051908152602001610307565b61038c7f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b981565b6103c9612553565b604051610307919061a7a5565b6102e06126d5565b6102e06127a1565b6102e0612ff7565b6102e061319a565b6103fe613428565b604051610307919061a843565b61038c7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b61043a6134f8565b604051610307919061a8ba565b6102e06135f3565b6102e0613921565b6102e0613f5b565b61038c7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb81565b61043a614180565b6103fe61427b565b61049e61434b565b6040519015158152602001610307565b6102e061441f565b6102e061510d565b6102fa6151ce565b61038c7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b6102e061522e565b6102e0615353565b6102e0615515565b6102e0615798565b601f5461049e9060ff1681565b6102e0615a8f565b6102e061613f565b602680547fffffffffffffffffffffffff000000000000000000000000000000000000000090811630179091556027805482166112341790556028805490911661567817905560405161057c9061a4b2565b60408082526004908201527f746573740000000000000000000000000000000000000000000000000000000060608201526080602082018190526003908201527f54544b000000000000000000000000000000000000000000000000000000000060a082015260c001604051809103906000f080158015610601573d6000803e3d6000fd5b50602480547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03929092169190911790556040516106469061a4b2565b604080825260049082018190527f7a6574610000000000000000000000000000000000000000000000000000000060608301526080602083018190528201527f5a4554410000000000000000000000000000000000000000000000000000000060a082015260c001604051809103906000f0801580156106ca573d6000803e3d6000fd5b50602580547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03928316908117909155604080518082018252600e81527f4761746577617945564d2e736f6c0000000000000000000000000000000000006020820152602854602654925190851660248201526044810193909352921660648201526107b9919060840160408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fc0c53b8b00000000000000000000000000000000000000000000000000000000179052616346565b601f80547fffffffffffffffffffffff0000000000000000000000000000000000000000ff166101006001600160a01b0393841681029190911791829055602080549190920483167fffffffffffffffffffffffff000000000000000000000000000000000000000090911681179091556028546026546040519293918216929116906108459061a4c0565b6001600160a01b03938416815291831660208301529091166040820152606001604051809103906000f080158015610881573d6000803e3d6000fd5b50602280547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392831617905560205460255460285460265460405193851694928316939183169216906108dc9061a4ce565b6001600160a01b039485168152928416602084015290831660408301529091166060820152608001604051809103906000f080158015610920573d6000803e3d6000fd5b50602380547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03929092169190911790556040516109659061a4dc565b604051809103906000f080158015610981573d6000803e3d6000fd5b50602180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039283161790556028546040517fc88a5e6d00000000000000000000000000000000000000000000000000000000815291166004820152670de0b6b3a76400006024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c88a5e6d90604401600060405180830381600087803b158015610a2d57600080fd5b505af1158015610a41573d6000803e3d6000fd5b50506026546040517f06447d560000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506306447d569150602401600060405180830381600087803b158015610ab757600080fd5b505af1158015610acb573d6000803e3d6000fd5b50506020546022546040517fae7a3a6f0000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201529116925063ae7a3a6f9150602401600060405180830381600087803b158015610b3157600080fd5b505af1158015610b45573d6000803e3d6000fd5b50506020546023546040517f10188aef0000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152911692506310188aef9150602401600060405180830381600087803b158015610bab57600080fd5b505af1158015610bbf573d6000803e3d6000fd5b5050602254602480546040517f9b19251a0000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015292169350639b19251a925001600060405180830381600087803b158015610c2457600080fd5b505af1158015610c38573d6000803e3d6000fd5b505050507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b03166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610c9a57600080fd5b505af1158015610cae573d6000803e3d6000fd5b5050602480546026546040517f40c10f190000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620f4240938101939093521692506340c10f199150604401600060405180830381600087803b158015610d1f57600080fd5b505af1158015610d33573d6000803e3d6000fd5b5050602480546022546040517fa9059cbb0000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201526207a1209381019390935216925063a9059cbb91506044016020604051808303816000875af1158015610da9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dcd919061a951565b506028546040517fc88a5e6d0000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152670de0b6b3a76400006024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c88a5e6d906044015b600060405180830381600087803b158015610e4f57600080fd5b505af1158015610e63573d6000803e3d6000fd5b50505050565b60248054602754604051620186a09381018490526001600160a01b0392831660448201529116606482015260009060840160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fc513169100000000000000000000000000000000000000000000000000000000179052602654905163ca669fa760e01b81526001600160a01b039091166004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa7906024015b600060405180830381600087803b158015610f4e57600080fd5b505af1158015610f62573d6000803e3d6000fd5b5050602654604080516001600160a01b0390921660248301527f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e460448084019190915281518084039091018152606490920181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb3925061104d919060040161a973565b600060405180830381600087803b15801561106757600080fd5b505af115801561107b573d6000803e3d6000fd5b50506022546024546021546040517f21fc65f20000000000000000000000000000000000000000000000000000000081526001600160a01b0393841695506321fc65f294506110d89392831692909116908790879060040161a986565b600060405180830381600087803b1580156110f257600080fd5b505af1158015611106573d6000803e3d6000fd5b505050505050565b6024805460275460405160009381018490526001600160a01b03928316604482015291166064820152819060840160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f357fc5a200000000000000000000000000000000000000000000000000000000179052602854905163ca669fa760e01b81526001600160a01b039091166004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa7906024015b600060405180830381600087803b1580156111f057600080fd5b505af1158015611204573d6000803e3d6000fd5b50506040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527f951e19ed000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e0915060240161104d565b606060168054806020026020016040519081016040528092919081815260200182805480156112d057602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116112b2575b5050505050905090565b6022546025546040517fd936547e0000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152600092919091169063d936547e90602401602060405180830381865afa158015611344573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611368919061a951565b9050611375600082616365565b6022546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b15801561140357600080fd5b505af1158015611417573d6000803e3d6000fd5b50506025546040516001600160a01b0390911692507faab7954e9d246b167ef88aeddad35209ca2489d95a8aeb59e288d9b19fae5a549150600090a260265460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156114ac57600080fd5b505af11580156114c0573d6000803e3d6000fd5b50506022546025546040517f9b19251a0000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015291169250639b19251a9150602401600060405180830381600087803b15801561152657600080fd5b505af115801561153a573d6000803e3d6000fd5b50506022546025546040517fd936547e0000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201529116925063d936547e9150602401602060405180830381865afa1580156115a3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115c7919061a951565b90506115d4600182616365565b50565b6060601e805480602002602001604051908101604052809291908181526020016000905b8282101561171057600084815260208082206040805180820182526002870290920180546001600160a01b03168352600181018054835181870281018701909452808452939591948681019491929084015b828210156116f957838290600052602060002001805461166c9061a9bd565b80601f01602080910402602001604051908101604052809291908181526020018280546116989061a9bd565b80156116e55780601f106116ba576101008083540402835291602001916116e5565b820191906000526020600020905b8154815290600101906020018083116116c857829003601f168201915b50505050508152602001906001019061164d565b5050505081525050815260200190600101906115fb565b50505050905090565b60405163ca669fa760e01b81526101236004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561176757600080fd5b505af115801561177b573d6000803e3d6000fd5b50506040805161012360248201527f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a60448083019190915282518083039091018152606490910182526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f0000000000000000000000000000000000000000000000000000000017905290517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb3925061185c919060040161a973565b600060405180830381600087803b15801561187657600080fd5b505af115801561188a573d6000803e3d6000fd5b50506022546025546040517f9b19251a0000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015291169250639b19251a9150602401610e35565b606060188054806020026020016040519081016040528092919081815260200182805480156112d0576020028201919060005260206000209081546001600160a01b031681526001909101906020018083116112b2575050505050905090565b602480546027546040516370a0823160e01b81526001600160a01b039182166004820152620186a09360009392909216916370a082319101602060405180830381865afa158015611990573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119b4919061aa0a565b90506119c18160006163e7565b602480546022546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa158015611a11573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a35919061aa0a565b6027546040516001600160a01b0390911660248201526044810185905290915060009060640160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb0000000000000000000000000000000000000000000000000000000017905260245490517ff30c7ba3000000000000000000000000000000000000000000000000000000008152919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f30c7ba391611b18916001600160a01b039190911690600090869060040161aa23565b600060405180830381600087803b158015611b3257600080fd5b505af1158015611b46573d6000803e3d6000fd5b50506022546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b158015611bd857600080fd5b505af1158015611bec573d6000803e3d6000fd5b50506027546024546040518881526001600160a01b039283169450911691507f9b1bfa7fa9ee420a16e124f794c35ac9f90472acc99140eb2f6447c714cad8eb9060200160405180910390a360285460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015611c9157600080fd5b505af1158015611ca5573d6000803e3d6000fd5b5050602254602480546027546040517fd9caed120000000000000000000000000000000000000000000000000000000081526001600160a01b0392831660048201529082169281019290925260448201899052909116925063d9caed129150606401600060405180830381600087803b158015611d2157600080fd5b505af1158015611d35573d6000803e3d6000fd5b5050602480546027546040516370a0823160e01b81526001600160a01b03918216600482015260009550911692506370a082319101602060405180830381865afa158015611d87573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611dab919061aa0a565b9050611db781866163e7565b602480546022546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa158015611e07573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e2b919061aa0a565b9050611e4081611e3b888761aa7a565b6163e7565b602480546020546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa158015611e90573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611eb4919061aa0a565b9050611ec18160006163e7565b50505050505050565b60248054602754604051620186a09381018490526001600160a01b0392831660448201529116606482015260009060840160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f357fc5a200000000000000000000000000000000000000000000000000000000179052602654905163ca669fa760e01b81526001600160a01b039091166004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401610f34565b606060178054806020026020016040519081016040528092919081815260200182805480156112d0576020028201919060005260206000209081546001600160a01b031681526001909101906020018083116112b2575050505050905090565b6040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b15801561207e57600080fd5b505af1158015612092573d6000803e3d6000fd5b5050602854602654604051600094508493506001600160a01b0392831692909116906120bd9061a4c0565b6001600160a01b03938416815291831660208301529091166040820152606001604051809103906000f0801580156120f9573d6000803e3d6000fd5b506040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fd92e233d000000000000000000000000000000000000000000000000000000006004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b15801561218257600080fd5b505af1158015612196573d6000803e3d6000fd5b50506020546026546040516001600160a01b039283169450600093509116906121be9061a4c0565b6001600160a01b03938416815291831660208301529091166040820152606001604051809103906000f0801580156121fa573d6000803e3d6000fd5b506040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fd92e233d000000000000000000000000000000000000000000000000000000006004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b15801561228357600080fd5b505af1158015612297573d6000803e3d6000fd5b50506020546028546040516001600160a01b039283169450911691506000906122bf9061a4c0565b6001600160a01b03938416815291831660208301529091166040820152606001604051809103906000f0801580156122fb573d6000803e3d6000fd5b506020546028546026546040519394506001600160a01b03928316939183169216906123269061a4c0565b6001600160a01b03938416815291831660208301529091166040820152606001604051809103906000f080158015612362573d6000803e3d6000fd5b505050565b6024805460275460405160019381018490526001600160a01b0392831660448201529116606482015260009060840160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f357fc5a200000000000000000000000000000000000000000000000000000000179052602854905163ca669fa760e01b81526001600160a01b039091166004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561244957600080fd5b505af115801561245d573d6000803e3d6000fd5b50506040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b1580156124e657600080fd5b505af11580156124fa573d6000803e3d6000fd5b50506022546024546040517f21fc65f20000000000000000000000000000000000000000000000000000000081526001600160a01b0392831694506321fc65f293506110d892909116906000908790879060040161a986565b6060601b805480602002602001604051908101604052809291908181526020016000905b8282101561171057838290600052602060002090600202016040518060400160405290816000820180546125aa9061a9bd565b80601f01602080910402602001604051908101604052809291908181526020018280546125d69061a9bd565b80156126235780601f106125f857610100808354040283529160200191612623565b820191906000526020600020905b81548152906001019060200180831161260657829003601f168201915b50505050508152602001600182018054806020026020016040519081016040528092919081815260200182805480156126bd57602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168152602001906004019060208260030104928301926001038202915080841161266a5790505b50505050508152505081526020019060010190612577565b6024805460275460405160009381018490526001600160a01b03928316604482015291166064820152819060840160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fc513169100000000000000000000000000000000000000000000000000000000179052602854905163ca669fa760e01b81526001600160a01b039091166004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa7906024016111d6565b6040517f68656c6c6f0000000000000000000000000000000000000000000000000000006020820152620186a09060009060250160408051808303601f1901815290829052602480546021546370a0823160e01b85526001600160a01b0390811660048601529294506000939216916370a082319101602060405180830381865afa158015612834573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612858919061aa0a565b90506128658160006163e7565b602480546022546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa1580156128b5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128d9919061aa0a565b6020546040516001600160a01b0390911660248201526044810186905290915060009060640160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb0000000000000000000000000000000000000000000000000000000017905260245490517ff30c7ba3000000000000000000000000000000000000000000000000000000008152919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f30c7ba3916129bc916001600160a01b039190911690600090869060040161aa23565b600060405180830381600087803b1580156129d657600080fd5b505af11580156129ea573d6000803e3d6000fd5b50506021546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b158015612a7c57600080fd5b505af1158015612a90573d6000803e3d6000fd5b50506020546040517f0d3f65f00e631663aa85c96330b5c7a83bb29af3630c0063776f985edc3037aa9350612ad392506001600160a01b0390911690879061aa8d565b60405180910390a16020546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b158015612b6957600080fd5b505af1158015612b7d573d6000803e3d6000fd5b50506021546024546040516001600160a01b039283169450911691507f723fc7be2448075379e4fdf1e6bf5fead954d2668d2da05dcb44ccfec4beeda790612bc8908990899061aaaf565b60405180910390a36022546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b158015612c5e57600080fd5b505af1158015612c72573d6000803e3d6000fd5b50506021546024546040516001600160a01b039283169450911691507fb9d4efa96044e5f5e03e696fa9ae2ff66911cc27e8a637c3627c75bc5b2241c890612cbd908990899061aaaf565b60405180910390a360285460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015612d1e57600080fd5b505af1158015612d32573d6000803e3d6000fd5b50506022546024546021546040517fc8a023620000000000000000000000000000000000000000000000000000000081526001600160a01b03938416955063c8a023629450612d8f9392831692909116908a908a9060040161a986565b600060405180830381600087803b158015612da957600080fd5b505af1158015612dbd573d6000803e3d6000fd5b5050602480546021546040516370a0823160e01b81526001600160a01b03918216600482015260009550911692506370a0823191015b602060405180830381865afa158015612e10573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e34919061aa0a565b9050612e4081876163e7565b602480546022546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa158015612e90573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612eb4919061aa0a565b9050612ec481611e3b898761aa7a565b602480546020546021546040517fdd62ed3e0000000000000000000000000000000000000000000000000000000081526001600160a01b0392831660048201529082169381019390935260009291169063dd62ed3e90604401602060405180830381865afa158015612f3a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f5e919061aa0a565b9050612f6b8160006163e7565b602480546020546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa158015612fbb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612fdf919061aa0a565b9050612fec8160006163e7565b505050505050505050565b6040517f68656c6c6f000000000000000000000000000000000000000000000000000000602082015260019060009060250160408051808303601f190181529082905260285463ca669fa760e01b83526001600160a01b031660048301529150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561309057600080fd5b505af11580156130a4573d6000803e3d6000fd5b50506040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b15801561312d57600080fd5b505af1158015613141573d6000803e3d6000fd5b50506022546024546040517fc8a023620000000000000000000000000000000000000000000000000000000081526001600160a01b03928316945063c8a0236293506110d892909116906000908790879060040161a986565b6028546040517f06447d560000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906306447d5690602401600060405180830381600087803b15801561320c57600080fd5b505af1158015613220573d6000803e3d6000fd5b5050602254602480546040517f9a5904270000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015292169350639a590427925001600060405180830381600087803b15801561328557600080fd5b505af1158015613299573d6000803e3d6000fd5b50506040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527f584a7938000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b15801561332257600080fd5b505af1158015613336573d6000803e3d6000fd5b5050602254602480546027546040517fd9caed120000000000000000000000000000000000000000000000000000000081526001600160a01b0392831660048201529082169281019290925260016044830152909116925063d9caed129150606401600060405180830381600087803b1580156133b257600080fd5b505af11580156133c6573d6000803e3d6000fd5b505050507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b03166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610e4f57600080fd5b6060601a805480602002602001604051908101604052809291908181526020016000905b8282101561171057838290600052602060002001805461346b9061a9bd565b80601f01602080910402602001604051908101604052809291908181526020018280546134979061a9bd565b80156134e45780601f106134b9576101008083540402835291602001916134e4565b820191906000526020600020905b8154815290600101906020018083116134c757829003601f168201915b50505050508152602001906001019061344c565b6060601d805480602002602001604051908101604052809291908181526020016000905b828210156117105760008481526020908190206040805180820182526002860290920180546001600160a01b031683526001810180548351818702810187019094528084529394919385830193928301828280156135db57602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190600401906020826003010492830192600103820291508084116135885790505b5050505050815250508152602001906001019061351c565b602480546027546040516001938101939093526001600160a01b03918216604484015216606482015260009060840160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f357fc5a20000000000000000000000000000000000000000000000000000000017905260285490517f06447d560000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d906306447d5690602401600060405180830381600087803b1580156136ee57600080fd5b505af1158015613702573d6000803e3d6000fd5b5050602254602480546040517f9a5904270000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015292169350639a590427925001600060405180830381600087803b15801561376757600080fd5b505af115801561377b573d6000803e3d6000fd5b50506040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527f584a7938000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b15801561380457600080fd5b505af1158015613818573d6000803e3d6000fd5b50506022546024546021546040517f21fc65f20000000000000000000000000000000000000000000000000000000081526001600160a01b0393841695506321fc65f29450613876939283169290911690600190879060040161a986565b600060405180830381600087803b15801561389057600080fd5b505af11580156138a4573d6000803e3d6000fd5b505050507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b03166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561390657600080fd5b505af115801561391a573d6000803e3d6000fd5b5050505050565b604080516004808252602480830184526020830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f6ed7016900000000000000000000000000000000000000000000000000000000179052805460275494516370a0823160e01b81526001600160a01b0395861693810193909352620186a0946000939116916370a082319101602060405180830381865afa1580156139cb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906139ef919061aa0a565b90506139fc8160006163e7565b602480546022546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa158015613a4c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a70919061aa0a565b6020546040516001600160a01b0390911660248201526044810186905290915060009060640160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb0000000000000000000000000000000000000000000000000000000017905260245490517ff30c7ba3000000000000000000000000000000000000000000000000000000008152919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f30c7ba391613b53916001600160a01b039190911690600090869060040161aa23565b600060405180830381600087803b158015613b6d57600080fd5b505af1158015613b81573d6000803e3d6000fd5b50506021546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b158015613c1357600080fd5b505af1158015613c27573d6000803e3d6000fd5b5050602080546040516001600160a01b0390911681527fbcaadb46b82a48af60b608f58959ae6b8310d1b0a0d094c2e9ec3208ed39f2a0935001905060405180910390a16022546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b158015613cf957600080fd5b505af1158015613d0d573d6000803e3d6000fd5b50506021546024546040516001600160a01b039283169450911691507f85b5be9cf454e05e0bddf49315178102227c312078eefa3c00294fb4d912ae4e90613d58908990899061aaaf565b60405180910390a360285460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015613db957600080fd5b505af1158015613dcd573d6000803e3d6000fd5b50506022546024546021546040517f21fc65f20000000000000000000000000000000000000000000000000000000081526001600160a01b0393841695506321fc65f29450613e2a9392831692909116908a908a9060040161a986565b600060405180830381600087803b158015613e4457600080fd5b505af1158015613e58573d6000803e3d6000fd5b5050602480546027546040516370a0823160e01b81526001600160a01b03918216600482015260009550911692506370a082319101602060405180830381865afa158015613eaa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613ece919061aa0a565b9050613edb8160006163e7565b602480546022546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa158015613f2b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613f4f919061aa0a565b9050612ec481856163e7565b6040517f68656c6c6f0000000000000000000000000000000000000000000000000000006020820152620186a09060009060250160408051808303601f190181529082905260265463ca669fa760e01b83526001600160a01b031660048301529150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015613ff657600080fd5b505af115801561400a573d6000803e3d6000fd5b5050602654604080516001600160a01b0390921660248301527f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e460448084019190915281518084039091018152606490920181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb392506140f5919060040161a973565b600060405180830381600087803b15801561410f57600080fd5b505af1158015614123573d6000803e3d6000fd5b50506022546024546021546040517fc8a023620000000000000000000000000000000000000000000000000000000081526001600160a01b03938416955063c8a0236294506110d89392831692909116908790879060040161a986565b6060601c805480602002602001604051908101604052809291908181526020016000905b828210156117105760008481526020908190206040805180820182526002860290920180546001600160a01b0316835260018101805483518187028101870190945280845293949193858301939283018282801561426357602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190600401906020826003010492830192600103820291508084116142105790505b505050505081525050815260200190600101906141a4565b60606019805480602002602001604051908101604052809291908181526020016000905b828210156117105783829060005260206000200180546142be9061a9bd565b80601f01602080910402602001604051908101604052809291908181526020018280546142ea9061a9bd565b80156143375780601f1061430c57610100808354040283529160200191614337565b820191906000526020600020905b81548152906001019060200180831161431a57829003601f168201915b50505050508152602001906001019061429f565b60085460009060ff1615614363575060085460ff1690565b6040517f667f9d70000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d600482018190527f6661696c65640000000000000000000000000000000000000000000000000000602483015260009163667f9d7090604401602060405180830381865afa1580156143f4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614418919061aa0a565b1415905090565b60285460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561447857600080fd5b505af115801561448c573d6000803e3d6000fd5b5050602854604080516001600160a01b0390921660248301527f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a60448084019190915281518084039091018152606490920181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb39250614577919060040161a973565b600060405180830381600087803b15801561459157600080fd5b505af11580156145a5573d6000803e3d6000fd5b50505050602260009054906101000a90046001600160a01b03166001600160a01b0316638456cb596040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156145f957600080fd5b505af115801561460d573d6000803e3d6000fd5b505060285460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b15801561466a57600080fd5b505af115801561467e573d6000803e3d6000fd5b5050602854604080516001600160a01b0390921660248301527f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a60448084019190915281518084039091018152606490920181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb39250614769919060040161a973565b600060405180830381600087803b15801561478357600080fd5b505af1158015614797573d6000803e3d6000fd5b50505050602060009054906101000a90046001600160a01b03166001600160a01b0316633f4ba83a6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156147eb57600080fd5b505af11580156147ff573d6000803e3d6000fd5b505060265460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b15801561485c57600080fd5b505af1158015614870573d6000803e3d6000fd5b50505050602260009054906101000a90046001600160a01b03166001600160a01b0316638456cb596040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156148c457600080fd5b505af11580156148d8573d6000803e3d6000fd5b505060248054602754604051620186a09381018490526001600160a01b039283166044820152911660648201529092506000915060840160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f357fc5a200000000000000000000000000000000000000000000000000000000179052517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fd93c0665000000000000000000000000000000000000000000000000000000006004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b1580156149ed57600080fd5b505af1158015614a01573d6000803e3d6000fd5b505060285460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b158015614a5e57600080fd5b505af1158015614a72573d6000803e3d6000fd5b50506022546024546021546040517f21fc65f20000000000000000000000000000000000000000000000000000000081526001600160a01b0393841695506321fc65f29450614acf9392831692909116908790879060040161a986565b600060405180830381600087803b158015614ae957600080fd5b505af1158015614afd573d6000803e3d6000fd5b505060265460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b158015614b5a57600080fd5b505af1158015614b6e573d6000803e3d6000fd5b50505050602260009054906101000a90046001600160a01b03166001600160a01b0316633f4ba83a6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015614bc257600080fd5b505af1158015614bd6573d6000803e3d6000fd5b5050602480546027546040516370a0823160e01b81526001600160a01b03918216600482015260009550911692506370a0823191015b602060405180830381865afa158015614c29573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614c4d919061aa0a565b9050614c5a8160006163e7565b602480546022546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa158015614caa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614cce919061aa0a565b6020546040516001600160a01b0390911660248201526044810186905290915060009060640160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb0000000000000000000000000000000000000000000000000000000017905260245490517ff30c7ba3000000000000000000000000000000000000000000000000000000008152919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f30c7ba391614db1916001600160a01b039190911690600090869060040161aa23565b600060405180830381600087803b158015614dcb57600080fd5b505af1158015614ddf573d6000803e3d6000fd5b50506021546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b158015614e7157600080fd5b505af1158015614e85573d6000803e3d6000fd5b505060208054602454602754604080516001600160a01b0394851681529485018c905291831684830152919091166060830152517f2b58128f24a9f59127cc5b5430d70542b22220f2d9adaa86e442b816ab98af609350908190036080019150a16022546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b158015614f7457600080fd5b505af1158015614f88573d6000803e3d6000fd5b50506021546024546040516001600160a01b039283169450911691507f85b5be9cf454e05e0bddf49315178102227c312078eefa3c00294fb4d912ae4e90614fd3908990899061aaaf565b60405180910390a360285460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561503457600080fd5b505af1158015615048573d6000803e3d6000fd5b50506022546024546021546040517f21fc65f20000000000000000000000000000000000000000000000000000000081526001600160a01b0393841695506321fc65f294506150a59392831692909116908a908a9060040161a986565b600060405180830381600087803b1580156150bf57600080fd5b505af11580156150d3573d6000803e3d6000fd5b5050602480546027546040516370a0823160e01b81526001600160a01b03918216600482015260009550911692506370a082319101612df3565b60248054602754604051620186a09381018490526001600160a01b0392831660448201529116606482015260009060840160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f357fc5a2000000000000000000000000000000000000000000000000000000001790526024805460275492516370a0823160e01b81526001600160a01b0393841660048201529394506000939216916370a082319101614c0c565b606060158054806020026020016040519081016040528092919081815260200182805480156112d0576020028201919060005260206000209081546001600160a01b031681526001909101906020018083116112b2575050505050905090565b600080604051602001615264907f68656c6c6f000000000000000000000000000000000000000000000000000000815260050190565b60408051808303601f190181529082905260285463ca669fa760e01b83526001600160a01b031660048301529150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156152cb57600080fd5b505af11580156152df573d6000803e3d6000fd5b50506040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527f951e19ed000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e091506024016140f5565b60405163ca669fa760e01b81526101236004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156153a157600080fd5b505af11580156153b5573d6000803e3d6000fd5b50506040805161012360248201527f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a60448083019190915282518083039091018152606490910182526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f0000000000000000000000000000000000000000000000000000000017905290517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb39250615496919060040161a973565b600060405180830381600087803b1580156154b057600080fd5b505af11580156154c4573d6000803e3d6000fd5b50506022546025546040517f9a5904270000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015291169250639a5904279150602401610e35565b602480546027546040516001938101939093526001600160a01b03918216604484015216606482015260009060840160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f357fc5a20000000000000000000000000000000000000000000000000000000017905260285490517f06447d560000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d906306447d5690602401600060405180830381600087803b15801561561057600080fd5b505af1158015615624573d6000803e3d6000fd5b5050602254602480546040517f9a5904270000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015292169350639a590427925001600060405180830381600087803b15801561568957600080fd5b505af115801561569d573d6000803e3d6000fd5b50506040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527f584a7938000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b15801561572657600080fd5b505af115801561573a573d6000803e3d6000fd5b50506022546024546021546040517fc8a023620000000000000000000000000000000000000000000000000000000081526001600160a01b03938416955063c8a023629450613876939283169290911690600190879060040161a986565b602254602480546040517fd936547e0000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152600093919091169163d936547e9101602060405180830381865afa158015615801573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190615825919061a951565b9050615832600182616365565b6022546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b1580156158c057600080fd5b505af11580156158d4573d6000803e3d6000fd5b50506024546040516001600160a01b0390911692507f51085ddf9ebdded84b76e829eb58c4078e4b5bdf97d9a94723f336039da467919150600090a260265460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561596957600080fd5b505af115801561597d573d6000803e3d6000fd5b5050602254602480546040517f9a5904270000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015292169350639a590427925001600060405180830381600087803b1580156159e257600080fd5b505af11580156159f6573d6000803e3d6000fd5b5050602254602480546040517fd936547e0000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201529216935063d936547e925001602060405180830381865afa158015615a5e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190615a82919061a951565b90506115d4600082616365565b60248054602754604051620186a09381018490526001600160a01b0392831660448201529116606482015260009060840160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fc5131691000000000000000000000000000000000000000000000000000000001790526024805460275492516370a0823160e01b81526001600160a01b0393841660048201529394506000939216916370a082319101602060405180830381865afa158015615b68573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190615b8c919061aa0a565b9050615b998160006163e7565b602480546022546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa158015615be9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190615c0d919061aa0a565b6020546040516001600160a01b0390911660248201526044810186905290915060009060640160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb0000000000000000000000000000000000000000000000000000000017905260245490517ff30c7ba3000000000000000000000000000000000000000000000000000000008152919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f30c7ba391615cf0916001600160a01b039190911690600090869060040161aa23565b600060405180830381600087803b158015615d0a57600080fd5b505af1158015615d1e573d6000803e3d6000fd5b50506021546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b158015615db057600080fd5b505af1158015615dc4573d6000803e3d6000fd5b50506020547f2b58128f24a9f59127cc5b5430d70542b22220f2d9adaa86e442b816ab98af6092506001600160a01b03169050615e0260028861aac8565b602454602754604080516001600160a01b03958616815260208101949094529184168383015292909216606082015290519081900360800190a16022546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b158015615eca57600080fd5b505af1158015615ede573d6000803e3d6000fd5b50506021546024546040516001600160a01b039283169450911691507f85b5be9cf454e05e0bddf49315178102227c312078eefa3c00294fb4d912ae4e90615f29908990899061aaaf565b60405180910390a360285460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015615f8a57600080fd5b505af1158015615f9e573d6000803e3d6000fd5b50506022546024546021546040517f21fc65f20000000000000000000000000000000000000000000000000000000081526001600160a01b0393841695506321fc65f29450615ffb9392831692909116908a908a9060040161a986565b600060405180830381600087803b15801561601557600080fd5b505af1158015616029573d6000803e3d6000fd5b5050602480546027546040516370a0823160e01b81526001600160a01b03918216600482015260009550911692506370a082319101602060405180830381865afa15801561607b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061609f919061aa0a565b90506160b081611e3b60028961aac8565b602480546022546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa158015616100573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190616124919061aa0a565b9050612ec48161613560028a61aac8565b611e3b908761aa7a565b60265460405163ca669fa760e01b81526001600160a01b039091166004820152620186a090737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561619d57600080fd5b505af11580156161b1573d6000803e3d6000fd5b5050602654604080516001600160a01b0390921660248301527f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e460448084019190915281518084039091018152606490920181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb3925061629c919060040161a973565b600060405180830381600087803b1580156162b657600080fd5b505af11580156162ca573d6000803e3d6000fd5b5050602254602480546027546040517fd9caed120000000000000000000000000000000000000000000000000000000081526001600160a01b0392831660048201529082169281019290925260448201869052909116925063d9caed129150606401600060405180830381600087803b15801561390657600080fd5b600061635061a4ea565b61635b84848361643f565b9150505b92915050565b6040517ff7fe347700000000000000000000000000000000000000000000000000000000815282151560048201528115156024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063f7fe3477906044015b60006040518083038186803b1580156163d357600080fd5b505afa158015611106573d6000803e3d6000fd5b6040517f98296c540000000000000000000000000000000000000000000000000000000081526004810183905260248101829052737109709ecfa91a80626ff3989d68f67f5b1dd12d906398296c54906044016163bb565b60008061644c85846164ba565b90506164af6040518060400160405280601d81526020017f4552433139363750726f78792e736f6c3a4552433139363750726f7879000000815250828660405160200161649a92919061aa8d565b604051602081830303815290604052856164c6565b9150505b9392505050565b60006164b383836164f4565b60c081015151600090156164ea576164e384848460c0015161650f565b90506164b3565b6164e384846166b5565b600061650083836167a0565b6164b3838360200151846164c6565b60008061651a6167b0565b905060006165288683616883565b9050600061653f8260600151836020015185616d29565b9050600061654f83838989616f3b565b9050600061655c82617db8565b602081015181519192509060030b156165cf5789826040015160405160200161658692919061ab03565b60408051601f19818403018152908290527f08c379a00000000000000000000000000000000000000000000000000000000082526165c69160040161a973565b60405180910390fd5b60006166126040518060400160405280601581526020017f4465706c6f79656420746f20616464726573733a200000000000000000000000815250836001617f87565b6040517fc6ce059d000000000000000000000000000000000000000000000000000000008152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c6ce059d9061666590849060040161a973565b602060405180830381865afa158015616682573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906166a6919061ab84565b9b9a5050505050505050505050565b6040517f8d1cc9250000000000000000000000000000000000000000000000000000000081526000908190737109709ecfa91a80626ff3989d68f67f5b1dd12d90638d1cc9259061670a90879060040161a973565b600060405180830381865afa158015616727573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261674f919081019061ac95565b9050600061677d828560405160200161676992919061acca565b604051602081830303815290604052618187565b90506001600160a01b03811661635b57848460405160200161658692919061acf9565b6167ac8282600061819a565b5050565b604080518082018252600381527f6f75740000000000000000000000000000000000000000000000000000000000602082015290517fd145736c000000000000000000000000000000000000000000000000000000008152606091737109709ecfa91a80626ff3989d68f67f5b1dd12d91829063d145736c9061683790849060040161ada4565b600060405180830381865afa158015616854573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261687c919081019061adeb565b9250505090565b6168b56040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b6000737109709ecfa91a80626ff3989d68f67f5b1dd12d90506169006040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b6169098561829d565b6020820152600061691986618682565b90506000836001600160a01b031663d930a0e66040518163ffffffff1660e01b8152600401600060405180830381865afa15801561695b573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052616983919081019061adeb565b8683856020015160405160200161699d949392919061ae34565b60408051601f19818403018152908290527f60f9bb1100000000000000000000000000000000000000000000000000000000825291506000906001600160a01b038616906360f9bb11906169f590859060040161a973565b600060405180830381865afa158015616a12573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052616a3a919081019061adeb565b6040517fdb4235f60000000000000000000000000000000000000000000000000000000081529091506001600160a01b0386169063db4235f690616a8290849060040161af38565b602060405180830381865afa158015616a9f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190616ac3919061a951565b616ad85781604051602001616586919061af8a565b6040517f49c4fac80000000000000000000000000000000000000000000000000000000081526001600160a01b038616906349c4fac890616b1d90849060040161b01c565b600060405180830381865afa158015616b3a573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052616b62919081019061adeb565b84526040517fdb4235f60000000000000000000000000000000000000000000000000000000081526001600160a01b0386169063db4235f690616ba990849060040161b06e565b602060405180830381865afa158015616bc6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190616bea919061a951565b15616c7f576040517f49c4fac80000000000000000000000000000000000000000000000000000000081526001600160a01b038616906349c4fac890616c3490849060040161b06e565b600060405180830381865afa158015616c51573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052616c79919081019061adeb565b60408501525b846001600160a01b03166349c4fac8828660000151604051602001616ca4919061b0c0565b6040516020818303038152906040526040518363ffffffff1660e01b8152600401616cd092919061b12c565b600060405180830381865afa158015616ced573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052616d15919081019061adeb565b606085015250608083015250949350505050565b60408051600480825260a0820190925260609160009190816020015b6060815260200190600190039081616d455790505090506040518060400160405280600481526020017f677265700000000000000000000000000000000000000000000000000000000081525081600081518110616da557616da561b151565b60200260200101819052506040518060400160405280600381526020017f2d726c000000000000000000000000000000000000000000000000000000000081525081600181518110616df957616df961b151565b602002602001018190525084604051602001616e15919061b180565b60405160208183030381529060405281600281518110616e3757616e3761b151565b602002602001018190525082604051602001616e53919061b1ec565b60405160208183030381529060405281600381518110616e7557616e7561b151565b60200260200101819052506000616e8b82617db8565b602080820151604080518082018252600581527f2e6a736f6e0000000000000000000000000000000000000000000000000000008185019081528251808401845260008082529086015282518084019093529051825292810192909252919250616f1c9060408051808201825260008082526020918201528151808301909252845182528085019082015290618905565b616f315785604051602001616586919061b22d565b9695505050505050565b60a0810151604080518082018252600080825260209182015281518083019092528251808352928101910152606090737109709ecfa91a80626ff3989d68f67f5b1dd12d9015616f8b565b511590565b6170ff57826020015115617047576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605860248201527f54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f742060448201527f62652075736564207768656e207468652060736b6970566572696679536f757260648201527f6365436f646560206f7074696f6e206973206074727565600000000000000000608482015260a4016165c6565b8260c00151156170ff576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605360248201527f54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f742060448201527f62652075736564207768656e207468652060736b69704c6963656e736554797060648201527f6560206f7074696f6e2069732060747275656000000000000000000000000000608482015260a4016165c6565b6040805160ff8082526120008201909252600091816020015b606081526020019060019003908161711857905050905060006040518060400160405280600381526020017f6e707800000000000000000000000000000000000000000000000000000000008152508282806171739061b2be565b935060ff16815181106171885761718861b151565b60200260200101819052506040518060400160405280600d81526020017f302e302e312d616c7068612e37000000000000000000000000000000000000008152506040516020016171d9919061b2dd565b6040516020818303038152906040528282806171f49061b2be565b935060ff16815181106172095761720961b151565b60200260200101819052506040518060400160405280600681526020017f6465706c6f7900000000000000000000000000000000000000000000000000008152508282806172569061b2be565b935060ff168151811061726b5761726b61b151565b60200260200101819052506040518060400160405280600e81526020017f2d2d636f6e74726163744e616d650000000000000000000000000000000000008152508282806172b89061b2be565b935060ff16815181106172cd576172cd61b151565b602002602001018190525087602001518282806172e99061b2be565b935060ff16815181106172fe576172fe61b151565b60200260200101819052506040518060400160405280600e81526020017f2d2d636f6e74726163745061746800000000000000000000000000000000000081525082828061734b9061b2be565b935060ff16815181106173605761736061b151565b6020908102919091010152875182826173788161b2be565b935060ff168151811061738d5761738d61b151565b60200260200101819052506040518060400160405280600981526020017f2d2d636861696e496400000000000000000000000000000000000000000000008152508282806173da9061b2be565b935060ff16815181106173ef576173ef61b151565b602002602001018190525061740346618966565b828261740e8161b2be565b935060ff16815181106174235761742361b151565b60200260200101819052506040518060400160405280600f81526020017f2d2d6275696c64496e666f46696c6500000000000000000000000000000000008152508282806174709061b2be565b935060ff16815181106174855761748561b151565b60200260200101819052508682828061749d9061b2be565b935060ff16815181106174b2576174b261b151565b60209081029190910101528551156175d95760408051808201909152601581527f2d2d636f6e7374727563746f7242797465636f64650000000000000000000000602082015282826175038161b2be565b935060ff16815181106175185761751861b151565b60209081029190910101526040517f71aad10d0000000000000000000000000000000000000000000000000000000081526001600160a01b038416906371aad10d9061756890899060040161a973565b600060405180830381865afa158015617585573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526175ad919081019061adeb565b82826175b88161b2be565b935060ff16815181106175cd576175cd61b151565b60200260200101819052505b8460200151156176a95760408051808201909152601281527f2d2d766572696679536f75726365436f64650000000000000000000000000000602082015282826176228161b2be565b935060ff16815181106176375761763761b151565b60200260200101819052506040518060400160405280600581526020017f66616c73650000000000000000000000000000000000000000000000000000008152508282806176849061b2be565b935060ff16815181106176995761769961b151565b6020026020010181905250617870565b6176e1616f868660a0015160408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6177745760408051808201909152600d81527f2d2d6c6963656e73655479706500000000000000000000000000000000000000602082015282826177248161b2be565b935060ff16815181106177395761773961b151565b60200260200101819052508460a00151604051602001617759919061b180565b6040516020818303038152906040528282806176849061b2be565b8460c001511580156177b75750604080890151815180830183526000808252602091820152825180840190935281518352908101908201526177b590511590565b155b156178705760408051808201909152600d81527f2d2d6c6963656e73655479706500000000000000000000000000000000000000602082015282826177fb8161b2be565b935060ff16815181106178105761781061b151565b602002602001018190525061782488618a06565b604051602001617834919061b180565b60405160208183030381529060405282828061784f9061b2be565b935060ff16815181106178645761786461b151565b60200260200101819052505b604080860151815180830183526000808252602091820152825180840190935281518352908101908201526178a490511590565b6179395760408051808201909152600b81527f2d2d72656c617965724964000000000000000000000000000000000000000000602082015282826178e78161b2be565b935060ff16815181106178fc576178fc61b151565b602002602001018190525084604001518282806179189061b2be565b935060ff168151811061792d5761792d61b151565b60200260200101819052505b606085015115617a5a5760408051808201909152600681527f2d2d73616c740000000000000000000000000000000000000000000000000000602082015282826179828161b2be565b935060ff16815181106179975761799761b151565b602090810291909101015260608501516040517fb11a19e800000000000000000000000000000000000000000000000000000000815260048101919091526001600160a01b0384169063b11a19e890602401600060405180830381865afa158015617a06573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052617a2e919081019061adeb565b8282617a398161b2be565b935060ff1681518110617a4e57617a4e61b151565b60200260200101819052505b60e08501515115617b015760408051808201909152600a81527f2d2d6761734c696d69740000000000000000000000000000000000000000000060208201528282617aa48161b2be565b935060ff1681518110617ab957617ab961b151565b6020026020010181905250617ad58560e0015160000151618966565b8282617ae08161b2be565b935060ff1681518110617af557617af561b151565b60200260200101819052505b60e08501516020015115617bab5760408051808201909152600a81527f2d2d67617350726963650000000000000000000000000000000000000000000060208201528282617b4e8161b2be565b935060ff1681518110617b6357617b6361b151565b6020026020010181905250617b7f8560e0015160200151618966565b8282617b8a8161b2be565b935060ff1681518110617b9f57617b9f61b151565b60200260200101819052505b60e08501516040015115617c555760408051808201909152600e81527f2d2d6d617846656550657247617300000000000000000000000000000000000060208201528282617bf88161b2be565b935060ff1681518110617c0d57617c0d61b151565b6020026020010181905250617c298560e0015160400151618966565b8282617c348161b2be565b935060ff1681518110617c4957617c4961b151565b60200260200101819052505b60e08501516060015115617cff5760408051808201909152601681527f2d2d6d61785072696f726974794665655065724761730000000000000000000060208201528282617ca28161b2be565b935060ff1681518110617cb757617cb761b151565b6020026020010181905250617cd38560e0015160600151618966565b8282617cde8161b2be565b935060ff1681518110617cf357617cf361b151565b60200260200101819052505b60008160ff1667ffffffffffffffff811115617d1d57617d1d61abad565b604051908082528060200260200182016040528015617d5057816020015b6060815260200190600190039081617d3b5790505b50905060005b8260ff168160ff161015617da957838160ff1681518110617d7957617d7961b151565b6020026020010151828260ff1681518110617d9657617d9661b151565b6020908102919091010152600101617d56565b5093505050505b949350505050565b617ddf6040518060600160405280600060030b815260200160608152602001606081525090565b60408051808201825260048082527f6261736800000000000000000000000000000000000000000000000000000000602083015291517fd145736c000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d92600091849163d145736c91617e659186910161b348565b600060405180830381865afa158015617e82573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052617eaa919081019061adeb565b90506000617eb886836194f5565b90506000846001600160a01b031663f45c1ce7836040518263ffffffff1660e01b8152600401617ee8919061a843565b6000604051808303816000875af1158015617f07573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052617f2f919081019061b38f565b805190915060030b15801590617f485750602081015151155b8015617f575750604081015151155b15616f315781600081518110617f6f57617f6f61b151565b6020026020010151604051602001616586919061b445565b60606000617fbc8560408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600080825260209182015281518083019092528651825280870190820152909150617ff39082905b9061964a565b156181505760006180708261806a846180646180368a60408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6040805180820182526000808252602091820152815180830190925282518252918201519181019190915290565b90619671565b906196d3565b604080518082018252600181527f0a00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201529091506180d490829061964a565b1561813e57604080518082018252600181527f0a000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261813b905b8290619758565b90505b6181478161977e565b925050506164b3565b821561816957848460405160200161658692919061b631565b50506040805160208101909152600081526164b3565b509392505050565b6000808251602084016000f09392505050565b8160a00151156181a957505050565b60006181b68484846197e7565b905060006181c382617db8565b602081015181519192509060030b15801561825f5750604080518082018252600781527f53554343455353000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261825f90604080518082018252600080825260209182015281518083019092528451825280850190820152617fed565b1561826c57505050505050565b6040820151511561828c578160400151604051602001616586919061b6d8565b80604051602001616586919061b736565b606060006182d28360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600481527f2e736f6c0000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152909150618337905b8290618905565b156183a657604080518082018252600481527f2e736f6c00000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526164b3906183a1908390619d82565b61977e565b604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152618408905b8290619e0c565b6001036184d557604080518082018252600181527f3a000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261846e90618134565b50604080518082018252600181527f3a00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526164b3906183a1905b8390619758565b604080518082018252600581527f2e6a736f6e0000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261853490618330565b1561866b57604080518082018252600181527f2f0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082018190528451808601909552925184528301529061859c908390619ea6565b9050600081600183516185af919061aa7a565b815181106185bf576185bf61b151565b602002602001015190506186626183a16186356040518060400160405280600581526020017f2e6a736f6e00000000000000000000000000000000000000000000000000000081525060408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b60408051808201825260008082526020918201528151808301909252855182528086019082015290619d82565b95945050505050565b82604051602001616586919061b7a1565b50919050565b606060006186b78360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600481527f2e736f6c000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015290915061871990618330565b15618727576164b38161977e565b604080518082018252600181527f3a000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261878690618401565b6001036187f057604080518082018252600181527f3a00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526164b3906183a1906184ce565b604080518082018252600581527f2e6a736f6e0000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261884f90618330565b1561866b57604080518082018252600181527f2f000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201819052845180860190955292518452830152906188b7908390619ea6565b90506001815111156188f35780600282516188d2919061aa7a565b815181106188e2576188e261b151565b602002602001015192505050919050565b5082604051602001616586919061b7a1565b80518251600091111561891a5750600061635f565b815183516020850151600092916189309161b87f565b61893a919061aa7a565b90508260200151810361895157600191505061635f565b82516020840151819020912014905092915050565b6060600061897383619f4b565b600101905060008167ffffffffffffffff8111156189935761899361abad565b6040519080825280601f01601f1916602001820160405280156189bd576020820181803683370190505b5090508181016020015b600019017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a85049450846189c757509392505050565b604081810151815180830183526000808252602091820181905283518085018552835181529282018383015283518085018552600a81527f554e4c4943454e5345440000000000000000000000000000000000000000000081840190815285518087018752838152840192909252845180860190955251845290830152606091618a92905b829061a02d565b15618ad257505060408051808201909152600481527f4e6f6e65000000000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600981527f556e6c6963656e7365000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152618b3190618a8b565b15618b7157505060408051808201909152600981527f556e6c6963656e736500000000000000000000000000000000000000000000006020820152919050565b604080518082018252600381527f4d4954000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152618bd090618a8b565b15618c1057505060408051808201909152600381527f4d495400000000000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f47504c2d322e302d6f6e6c79000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152618c6f90618a8b565b80618cd45750604080518082018252601081527f47504c2d322e302d6f722d6c617465720000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152618cd490618a8b565b15618d1457505060408051808201909152600981527f474e552047504c763200000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f47504c2d332e302d6f6e6c79000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152618d7390618a8b565b80618dd85750604080518082018252601081527f47504c2d332e302d6f722d6c617465720000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152618dd890618a8b565b15618e1857505060408051808201909152600981527f474e552047504c763300000000000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4c47504c2d322e312d6f6e6c790000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152618e7790618a8b565b80618edc5750604080518082018252601181527f4c47504c2d322e312d6f722d6c6174657200000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152618edc90618a8b565b15618f1c57505060408051808201909152600c81527f474e55204c47504c76322e3100000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4c47504c2d332e302d6f6e6c790000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152618f7b90618a8b565b80618fe05750604080518082018252601181527f4c47504c2d332e302d6f722d6c6174657200000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152618fe090618a8b565b1561902057505060408051808201909152600a81527f474e55204c47504c7633000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f4253442d322d436c6175736500000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261907f90618a8b565b156190bf57505060408051808201909152600c81527f4253442d322d436c6175736500000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f4253442d332d436c6175736500000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261911e90618a8b565b1561915e57505060408051808201909152600c81527f4253442d332d436c6175736500000000000000000000000000000000000000006020820152919050565b604080518082018252600781527f4d504c2d322e3000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526191bd90618a8b565b156191fd57505060408051808201909152600781527f4d504c2d322e30000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600781527f4f534c2d332e30000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261925c90618a8b565b1561929c57505060408051808201909152600781527f4f534c2d332e30000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600a81527f4170616368652d322e3000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526192fb90618a8b565b1561933b57505060408051808201909152600a81527f4170616368652d322e30000000000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4147504c2d332e302d6f6e6c79000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261939a90618a8b565b806193ff5750604080518082018252601181527f4147504c2d332e302d6f722d6c61746572000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526193ff90618a8b565b1561943f57505060408051808201909152600a81527f474e55204147504c7633000000000000000000000000000000000000000000006020820152919050565b604080518082018252600881527f4255534c2d312e310000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261949e90618a8b565b156194de57505060408051808201909152600781527f42534c20312e31000000000000000000000000000000000000000000000000006020820152919050565b60408084015184519151616586929060200161b892565b60608060005b845181101561958057818582815181106195175761951761b151565b602002602001015160405160200161953092919061acca565b60405160208183030381529060405291506001855161954f919061aa7a565b81146195785781604051602001619566919061b9fb565b60405160208183030381529060405291505b6001016194fb565b5060408051600380825260808201909252600091816020015b606081526020019060019003908161959957905050905083816000815181106195c4576195c461b151565b60200260200101819052506040518060400160405280600281526020017f2d63000000000000000000000000000000000000000000000000000000000000815250816001815181106196185761961861b151565b602002602001018190525081816002815181106196375761963761b151565b6020908102919091010152949350505050565b6020808301518351835192840151600093619668929184919061a041565b14159392505050565b604080518082019091526000808252602082015260006196a3846000015185602001518560000151866020015161a152565b90508360200151816196b5919061aa7a565b845185906196c490839061aa7a565b90525060208401525090919050565b60408051808201909152600080825260208201528151835110156196f857508161635f565b602080830151908401516001911461971f5750815160208481015190840151829020919020145b80156197505782518451859061973690839061aa7a565b905250825160208501805161974c90839061b87f565b9052505b509192915050565b604080518082019091526000808252602082015261977783838361a272565b5092915050565b60606000826000015167ffffffffffffffff81111561979f5761979f61abad565b6040519080825280601f01601f1916602001820160405280156197c9576020820181803683370190505b5090506000602082019050619777818560200151866000015161a31d565b606060006197f36167b0565b6040805160ff808252612000820190925291925060009190816020015b606081526020019060019003908161981057905050905060006040518060400160405280600381526020017f6e7078000000000000000000000000000000000000000000000000000000000081525082828061986b9061b2be565b935060ff16815181106198805761988061b151565b60200260200101819052506040518060400160405280600781526020017f5e312e33322e33000000000000000000000000000000000000000000000000008152506040516020016198d1919061ba3c565b6040516020818303038152906040528282806198ec9061b2be565b935060ff16815181106199015761990161b151565b60200260200101819052506040518060400160405280600881526020017f76616c696461746500000000000000000000000000000000000000000000000081525082828061994e9061b2be565b935060ff16815181106199635761996361b151565b60200260200101819052508260405160200161997f919061b1ec565b60405160208183030381529060405282828061999a9061b2be565b935060ff16815181106199af576199af61b151565b60200260200101819052506040518060400160405280600a81526020017f2d2d636f6e7472616374000000000000000000000000000000000000000000008152508282806199fc9061b2be565b935060ff1681518110619a1157619a1161b151565b6020026020010181905250619a26878461a397565b8282619a318161b2be565b935060ff1681518110619a4657619a4661b151565b602090810291909101015285515115619af25760408051808201909152600b81527f2d2d7265666572656e636500000000000000000000000000000000000000000060208201528282619a988161b2be565b935060ff1681518110619aad57619aad61b151565b6020026020010181905250619ac686600001518461a397565b8282619ad18161b2be565b935060ff1681518110619ae657619ae661b151565b60200260200101819052505b856080015115619b605760408051808201909152601881527f2d2d756e73616665536b697053746f72616765436865636b000000000000000060208201528282619b3b8161b2be565b935060ff1681518110619b5057619b5061b151565b6020026020010181905250619bc6565b8415619bc65760408051808201909152601281527f2d2d726571756972655265666572656e6365000000000000000000000000000060208201528282619ba58161b2be565b935060ff1681518110619bba57619bba61b151565b60200260200101819052505b60408601515115619c625760408051808201909152600d81527f2d2d756e73616665416c6c6f770000000000000000000000000000000000000060208201528282619c108161b2be565b935060ff1681518110619c2557619c2561b151565b60200260200101819052508560400151828280619c419061b2be565b935060ff1681518110619c5657619c5661b151565b60200260200101819052505b856060015115619ccc5760408051808201909152601481527f2d2d756e73616665416c6c6f7752656e616d657300000000000000000000000060208201528282619cab8161b2be565b935060ff1681518110619cc057619cc061b151565b60200260200101819052505b60008160ff1667ffffffffffffffff811115619cea57619cea61abad565b604051908082528060200260200182016040528015619d1d57816020015b6060815260200190600190039081619d085790505b50905060005b8260ff168160ff161015619d7657838160ff1681518110619d4657619d4661b151565b6020026020010151828260ff1681518110619d6357619d6361b151565b6020908102919091010152600101619d23565b50979650505050505050565b6040805180820190915260008082526020820152815183511015619da757508161635f565b81518351602085015160009291619dbd9161b87f565b619dc7919061aa7a565b60208401519091506001908214619de8575082516020840151819020908220145b8015619e0357835185518690619dff90839061aa7a565b9052505b50929392505050565b6000808260000151619e30856000015186602001518660000151876020015161a152565b619e3a919061b87f565b90505b83516020850151619e4e919061b87f565b81116197775781619e5e8161ba81565b9250508260000151619e95856020015183619e79919061aa7a565b8651619e85919061aa7a565b838660000151876020015161a152565b619e9f919061b87f565b9050619e3d565b60606000619eb48484619e0c565b619ebf90600161b87f565b67ffffffffffffffff811115619ed757619ed761abad565b604051908082528060200260200182016040528015619f0a57816020015b6060815260200190600190039081619ef55790505b50905060005b815181101561817f57619f266183a18686619758565b828281518110619f3857619f3861b151565b6020908102919091010152600101619f10565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310619f94577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310619fc0576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc100008310619fde57662386f26fc10000830492506010015b6305f5e1008310619ff6576305f5e100830492506008015b612710831061a00a57612710830492506004015b6064831061a01c576064830492506002015b600a831061635f5760010192915050565b600061a039838361a3d7565b159392505050565b60008085841161a148576020841161a0f4576000841561a08c57600161a06886602061aa7a565b61a07390600861ba9b565b61a07e90600261bb99565b61a088919061aa7a565b1990505b835181168561a09b898961b87f565b61a0a5919061aa7a565b805190935082165b81811461a0df5787841161a0c75787945050505050617db0565b8361a0d18161bba5565b94505082845116905061a0ad565b61a0e9878561b87f565b945050505050617db0565b83832061a101858861aa7a565b61a10b908761b87f565b91505b85821061a1465784822080820361a1335761a129868461b87f565b9350505050617db0565b61a13e60018461aa7a565b92505061a10e565b505b5092949350505050565b6000838186851161a25d576020851161a20c576000851561a19e57600161a17a87602061aa7a565b61a18590600861ba9b565b61a19090600261bb99565b61a19a919061aa7a565b1990505b8451811660008761a1af8b8b61b87f565b61a1b9919061aa7a565b855190915083165b82811461a1fe5781861061a1e65761a1d98b8b61b87f565b9650505050505050617db0565b8561a1f08161ba81565b96505083865116905061a1c1565b859650505050505050617db0565b508383206000905b61a21e868961aa7a565b821161a25b5785832080820361a23a5783945050505050617db0565b61a24560018561b87f565b935050818061a2539061ba81565b92505061a214565b505b61a267878761b87f565b979650505050505050565b6040805180820190915260008082526020820152600061a2a4856000015186602001518660000151876020015161a152565b60208087018051918601919091525190915061a2c0908261aa7a565b83528451602086015161a2d3919061b87f565b810361a2e2576000855261a314565b8351835161a2f0919061b87f565b8551869061a2ff90839061aa7a565b905250835161a30e908261b87f565b60208601525b50909392505050565b6020811061a355578151835261a33460208461b87f565b925061a34160208361b87f565b915061a34e60208261aa7a565b905061a31d565b600019811561a38457600161a36b83602061aa7a565b61a3779061010061bb99565b61a381919061aa7a565b90505b9151835183169219169190911790915250565b6060600061a3a58484616883565b805160208083015160405193945061a3bf9390910161bbbc565b60405160208183030381529060405291505092915050565b815181516000919081111561a3ea575081515b6020808501519084015160005b8381101561a4a3578251825180821461a47357600019602087101561a4525760018461a42489602061aa7a565b61a42e919061b87f565b61a43990600861ba9b565b61a44490600261bb99565b61a44e919061aa7a565b1990505b818116838216818103911461a47057975061635f9650505050505050565b50505b61a47e60208661b87f565b945061a48b60208561b87f565b9350505060208161a49c919061b87f565b905061a3f7565b5084518651616f31919061bc14565b610c9f806200bc3583390190565b6116fe806200c8d483390190565b61155a806200dfd283390190565b610d5e806200f52c83390190565b6040518060e0016040528060608152602001606081526020016060815260200160001515815260200160001515815260200160001515815260200161a52d61a532565b905290565b6040518061010001604052806000151581526020016000151581526020016060815260200160008019168152602001606081526020016060815260200160001515815260200161a52d6040518060800160405280600081526020016000815260200160008152602001600081525090565b602080825282518282018190526000918401906040840190835b8181101561a5e45783516001600160a01b031683526020938401939092019160010161a5bd565b509095945050505050565b60005b8381101561a60a57818101518382015260200161a5f2565b50506000910152565b6000815180845261a62b81602086016020860161a5ef565b601f01601f19169290920160200192915050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b8281101561a73b577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452815180516001600160a01b03168652602090810151604082880181905281519088018190529101906060600582901b88018101919088019060005b8181101561a721577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa08a850301835261a70b84865161a613565b602095860195909450929092019160010161a6d1565b50919750505060209485019492909201915060010161a667565b50929695505050505050565b600081518084526020840193506020830160005b8281101561a79b5781517fffffffff000000000000000000000000000000000000000000000000000000001686526020958601959091019060010161a75b565b5093949350505050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b8281101561a73b577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452815180516040875261a811604088018261a613565b905060208201519150868103602088015261a82c818361a747565b96505050602093840193919091019060010161a7cd565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b8281101561a73b577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc087860301845261a8a585835161a613565b9450602093840193919091019060010161a86b565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b8281101561a73b577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc087860301845281516001600160a01b038151168652602081015190506040602087015261a93b604087018261a747565b955050602093840193919091019060010161a8e2565b60006020828403121561a96357600080fd5b815180151581146164b357600080fd5b6020815260006164b3602083018461a613565b6001600160a01b03851681526001600160a01b0384166020820152826040820152608060608201526000616f31608083018461a613565b600181811c9082168061a9d157607f821691505b60208210810361867c577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006020828403121561aa1c57600080fd5b5051919050565b6001600160a01b0384168152826020820152606060408201526000618662606083018461a613565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8181038181111561635f5761635f61aa4b565b6001600160a01b0383168152604060208201526000617db0604083018461a613565b828152604060208201526000617db0604083018461a613565b60008261aafe577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b7f4661696c656420746f206465706c6f7920636f6e74726163742000000000000081526000835161ab3b81601a85016020880161a5ef565b7f3a20000000000000000000000000000000000000000000000000000000000000601a91840191820152835161ab7881601c84016020880161a5ef565b01601c01949350505050565b60006020828403121561ab9657600080fd5b81516001600160a01b03811681146164b357600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040516060810167ffffffffffffffff8111828210171561abff5761abff61abad565b60405290565b60008067ffffffffffffffff84111561ac205761ac2061abad565b50604051601f19601f85018116603f0116810181811067ffffffffffffffff8211171561ac4f5761ac4f61abad565b60405283815290508082840185101561ac6757600080fd5b61817f84602083018561a5ef565b600082601f83011261ac8657600080fd5b6164b38383516020850161ac05565b60006020828403121561aca757600080fd5b815167ffffffffffffffff81111561acbe57600080fd5b61635b8482850161ac75565b6000835161acdc81846020880161a5ef565b83519083019061acf081836020880161a5ef565b01949350505050565b7f4661696c656420746f206465706c6f7920636f6e74726163742000000000000081526000835161ad3181601a85016020880161a5ef565b7f207573696e6720636f6e7374727563746f722064617461202200000000000000601a91840191820152835161ad6e81603384016020880161a5ef565b7f220000000000000000000000000000000000000000000000000000000000000060339290910191820152603401949350505050565b60408152600b60408201527f464f554e4452595f4f555400000000000000000000000000000000000000000060608201526080602082015260006164b3608083018461a613565b60006020828403121561adfd57600080fd5b815167ffffffffffffffff81111561ae1457600080fd5b8201601f8101841361ae2557600080fd5b61635b8482516020840161ac05565b6000855161ae46818460208a0161a5ef565b7f2f00000000000000000000000000000000000000000000000000000000000000908301908152855161ae80816001840160208a0161a5ef565b7f2f0000000000000000000000000000000000000000000000000000000000000060019290910191820152845161aebe81600284016020890161a5ef565b6001818301019150507f2f000000000000000000000000000000000000000000000000000000000000006001820152835161af0081600284016020880161a5ef565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600292909101918201526007019695505050505050565b60408152600061af4b604083018461a613565b8281036020840152600481527f2e6173740000000000000000000000000000000000000000000000000000000060208201526040810191505092915050565b7f436f756c64206e6f742066696e642041535420696e206172746966616374200081526000825161afc281601f85016020870161a5ef565b7f2e205365742060617374203d20747275656020696e20666f756e6472792e746f601f9390910192830152507f6d6c000000000000000000000000000000000000000000000000000000000000603f820152604101919050565b60408152600061b02f604083018461a613565b8281036020840152601181527f2e6173742e6162736f6c7574655061746800000000000000000000000000000060208201526040810191505092915050565b60408152600061b081604083018461a613565b8281036020840152600c81527f2e6173742e6c6963656e7365000000000000000000000000000000000000000060208201526040810191505092915050565b7f2e6d657461646174612e736f75726365732e5b2700000000000000000000000081526000825161b0f881601485016020870161a5ef565b7f275d2e6b656363616b32353600000000000000000000000000000000000000006014939091019283015250602001919050565b60408152600061b13f604083018561a613565b82810360208401526164af818561a613565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f220000000000000000000000000000000000000000000000000000000000000081526000825161b1b881600185016020870161a5ef565b7f22000000000000000000000000000000000000000000000000000000000000006001939091019283015250600201919050565b6000825161b1fe81846020870161a5ef565b7f2f6275696c642d696e666f000000000000000000000000000000000000000000920191825250600b01919050565b7f436f756c64206e6f742066696e64206275696c642d696e666f2066696c65207781527f697468206d61746368696e6720736f7572636520636f6465206861736820666f60208201527f7220636f6e74726163742000000000000000000000000000000000000000000060408201526000825161b2b181604b85016020870161a5ef565b91909101604b0192915050565b600060ff821660ff810361b2d45761b2d461aa4b565b60010192915050565b7f406f70656e7a657070656c696e2f646566656e6465722d6465706c6f792d636c81527f69656e742d636c6940000000000000000000000000000000000000000000000060208201526000825161b33b81602985016020870161a5ef565b9190910160290192915050565b60408152601660408201527f4f50454e5a455050454c494e5f424153485f504154480000000000000000000060608201526080602082015260006164b3608083018461a613565b60006020828403121561b3a157600080fd5b815167ffffffffffffffff81111561b3b857600080fd5b82016060818503121561b3ca57600080fd5b61b3d261abdc565b81518060030b811461b3e357600080fd5b8152602082015167ffffffffffffffff81111561b3ff57600080fd5b61b40b8682850161ac75565b602083015250604082015167ffffffffffffffff81111561b42b57600080fd5b61b4378682850161ac75565b604083015250949350505050565b7f4661696c656420746f2072756e206261736820636f6d6d616e6420776974682081527f220000000000000000000000000000000000000000000000000000000000000060208201526000825161b4a381602185016020870161a5ef565b7f222e20496620796f7520617265207573696e672057696e646f77732c2073657460219390910192830152507f20746865204f50454e5a455050454c494e5f424153485f5041544820656e766960418201527f726f6e6d656e74207661726961626c6520746f207468652066756c6c7920717560618201527f616c69666965642070617468206f66207468652062617368206578656375746160818201527f626c652e20466f72206578616d706c652c20696620796f75206172652075736960a18201527f6e672047697420666f722057696e646f77732c206164642074686520666f6c6c60c18201527f6f77696e67206c696e6520696e20746865202e656e762066696c65206f66207960e18201527f6f75722070726f6a65637420287573696e6720666f727761726420736c6173686101018201527f6573293a0a4f50454e5a455050454c494e5f424153485f504154483d22433a2f6101218201527f50726f6772616d2046696c65732f4769742f62696e2f6261736822000000000061014182015261015c01919050565b7f4661696c656420746f2066696e64206c696e652077697468207072656669782081527f270000000000000000000000000000000000000000000000000000000000000060208201526000835161b68f81602185016020880161a5ef565b7f2720696e206f75747075743a2000000000000000000000000000000000000000602191840191820152835161b6cc81602e84016020880161a5ef565b01602e01949350505050565b7f4661696c656420746f2072756e2075706772616465207361666574792076616c81527f69646174696f6e3a20000000000000000000000000000000000000000000000060208201526000825161b33b81602985016020870161a5ef565b7f55706772616465207361666574792076616c69646174696f6e206661696c656481527f3a0a00000000000000000000000000000000000000000000000000000000000060208201526000825161b79481602285016020870161a5ef565b9190910160220192915050565b7f436f6e7472616374206e616d652000000000000000000000000000000000000081526000825161b7d981600e85016020870161a5ef565b7f206d75737420626520696e2074686520666f726d6174204d79436f6e74726163600e9390910192830152507f742e736f6c3a4d79436f6e7472616374206f72204d79436f6e74726163742e73602e8201527f6f6c206f72206f75742f4d79436f6e74726163742e736f6c2f4d79436f6e7472604e8201527f6163742e6a736f6e000000000000000000000000000000000000000000000000606e820152607601919050565b8082018082111561635f5761635f61aa4b565b7f53504458206c6963656e7365206964656e74696669657220000000000000000081526000835161b8ca81601885016020880161a5ef565b7f20696e2000000000000000000000000000000000000000000000000000000000601891840191820152835161b90781601c84016020880161a5ef565b7f20646f6573206e6f74206c6f6f6b206c696b65206120737570706f7274656420601c92909101918201527f6c6963656e736520666f7220626c6f636b206578706c6f726572207665726966603c8201527f69636174696f6e2e205573652074686520606c6963656e73655479706560206f605c8201527f7074696f6e20746f20737065636966792061206c6963656e736520747970652c607c8201527f206f7220736574207468652060736b69704c6963656e73655479706560206f70609c8201527f74696f6e20746f2060747275656020746f20736b69702e00000000000000000060bc82015260d301949350505050565b6000825161ba0d81846020870161a5ef565b7f2000000000000000000000000000000000000000000000000000000000000000920191825250600101919050565b7f406f70656e7a657070656c696e2f75706772616465732d636f7265400000000081526000825161ba7481601c85016020870161a5ef565b91909101601c0192915050565b6000600019820361ba945761ba9461aa4b565b5060010190565b808202811582820484141761635f5761635f61aa4b565b6001815b600184111561baed5780850481111561bad15761bad161aa4b565b600184161561badf57908102905b60019390931c92800261bab6565b935093915050565b60008261bb045750600161635f565b8161bb115750600061635f565b816001811461bb27576002811461bb315761bb4d565b600191505061635f565b60ff84111561bb425761bb4261aa4b565b50506001821b61635f565b5060208310610133831016604e8410600b841016171561bb70575081810a61635f565b61bb7d600019848461bab2565b806000190482111561bb915761bb9161aa4b565b029392505050565b60006164b3838361baf5565b60008161bbb45761bbb461aa4b565b506000190190565b6000835161bbce81846020880161a5ef565b7f3a00000000000000000000000000000000000000000000000000000000000000908301908152835161bc0881600184016020880161a5ef565b01600101949350505050565b81810360008312801583831316838312821617156197775761977761aa4b56fe608060405234801561001057600080fd5b50604051610c9f380380610c9f83398101604081905261002f9161010d565b8181600361003d83826101ff565b50600461004a82826101ff565b50505050506102bd565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261007b57600080fd5b81516001600160401b0381111561009457610094610054565b604051601f8201601f19908116603f011681016001600160401b03811182821017156100c2576100c2610054565b6040528181528382016020018510156100da57600080fd5b60005b828110156100f9576020818601810151838301820152016100dd565b506000918101602001919091529392505050565b6000806040838503121561012057600080fd5b82516001600160401b0381111561013657600080fd5b6101428582860161006a565b602085015190935090506001600160401b0381111561016057600080fd5b61016c8582860161006a565b9150509250929050565b600181811c9082168061018a57607f821691505b6020821081036101aa57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156101fa57806000526020600020601f840160051c810160208510156101d75750805b601f840160051c820191505b818110156101f757600081556001016101e3565b50505b505050565b81516001600160401b0381111561021857610218610054565b61022c816102268454610176565b846101b0565b6020601f82116001811461026057600083156102485750848201515b600019600385901b1c1916600184901b1784556101f7565b600084815260208120601f198516915b828110156102905787850151825560209485019460019092019101610270565b50848210156102ae5786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b6109d3806102cc6000396000f3fe608060405234801561001057600080fd5b50600436106100be5760003560e01c806340c10f191161007657806395d89b411161005b57806395d89b4114610183578063a9059cbb1461018b578063dd62ed3e1461019e57600080fd5b806340c10f191461013857806370a082311461014d57600080fd5b806318160ddd116100a757806318160ddd1461010457806323b872dd14610116578063313ce5671461012957600080fd5b806306fdde03146100c3578063095ea7b3146100e1575b600080fd5b6100cb6101e4565b6040516100d891906107bf565b60405180910390f35b6100f46100ef366004610854565b610276565b60405190151581526020016100d8565b6002545b6040519081526020016100d8565b6100f461012436600461087e565b610290565b604051601281526020016100d8565b61014b610146366004610854565b6102b4565b005b61010861015b3660046108bb565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6100cb6102c2565b6100f4610199366004610854565b6102d1565b6101086101ac3660046108dd565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6060600380546101f390610910565b80601f016020809104026020016040519081016040528092919081815260200182805461021f90610910565b801561026c5780601f106102415761010080835404028352916020019161026c565b820191906000526020600020905b81548152906001019060200180831161024f57829003601f168201915b5050505050905090565b6000336102848185856102df565b60019150505b92915050565b60003361029e8582856102f1565b6102a98585856103c5565b506001949350505050565b6102be8282610470565b5050565b6060600480546101f390610910565b6000336102848185856103c5565b6102ec83838360016104cc565b505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146103bf57818110156103b0576040517ffb8f41b200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416600482015260248101829052604481018390526064015b60405180910390fd5b6103bf848484840360006104cc565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8316610415576040517f96c6fd1e000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff8216610465576040517fec442f05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b6102ec838383610614565b73ffffffffffffffffffffffffffffffffffffffff82166104c0576040517fec442f05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b6102be60008383610614565b73ffffffffffffffffffffffffffffffffffffffff841661051c576040517fe602df05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff831661056c576040517f94280d62000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260016020908152604080832093871683529290522082905580156103bf578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161060691815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff831661064c5780600260008282546106419190610963565b909155506106fe9050565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260208190526040902054818110156106d2576040517fe450d38c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8516600482015260248101829052604481018390526064016103a7565b73ffffffffffffffffffffffffffffffffffffffff841660009081526020819052604090209082900390555b73ffffffffffffffffffffffffffffffffffffffff821661072757600280548290039055610753565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090208054820190555b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516107b291815260200190565b60405180910390a3505050565b602081526000825180602084015260005b818110156107ed57602081860181015160408684010152016107d0565b5060006040828501015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011684010191505092915050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461084f57600080fd5b919050565b6000806040838503121561086757600080fd5b6108708361082b565b946020939093013593505050565b60008060006060848603121561089357600080fd5b61089c8461082b565b92506108aa6020850161082b565b929592945050506040919091013590565b6000602082840312156108cd57600080fd5b6108d68261082b565b9392505050565b600080604083850312156108f057600080fd5b6108f98361082b565b91506109076020840161082b565b90509250929050565b600181811c9082168061092457607f821691505b60208210810361095d577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b8082018082111561028a577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea26469706673582212207e804ca539d49155d2b6bc19268ce22f9f857027c75247d69fb0d56a089c93d464736f6c634300081a003360a060405234801561001057600080fd5b506040516116fe3803806116fe83398101604081905261002f916101e5565b60016000556002805460ff191690556001600160a01b038316158061005b57506001600160a01b038216155b8061006d57506001600160a01b038116155b1561008b5760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b0383166080526100a3600082610134565b506100ce7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a82610134565b506100f97f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e483610134565b506101126000805160206116de83398151915282610134565b5061012b6000805160206116de83398151915283610134565b50505050610228565b60008281526001602090815260408083206001600160a01b038516845290915281205460ff166101bf5760008381526001602081815260408084206001600160a01b0387168086529252808420805460ff19169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45060016101c3565b5060005b92915050565b80516001600160a01b03811681146101e057600080fd5b919050565b6000806000606084860312156101fa57600080fd5b610203846101c9565b9250610211602085016101c9565b915061021f604085016101c9565b90509250925092565b60805161147f61025f6000396000818161019e0152818161050001528181610562015281816108f70152610959015261147f6000f3fe608060405234801561001057600080fd5b506004361061016c5760003560e01c806385f438c1116100cd578063c8a0236211610081578063d936547e11610066578063d936547e14610355578063d9caed1214610378578063e63ab1e91461038b57600080fd5b8063c8a023621461032f578063d547741f1461034257600080fd5b80639a590427116100b25780639a590427146103015780639b19251a14610314578063a217fddf1461032757600080fd5b806385f438c11461029457806391d14854146102bb57600080fd5b806336568abe11610124578063570618e111610109578063570618e11461025a5780635c975abb146102815780638456cb591461028c57600080fd5b806336568abe1461023f5780633f4ba83a1461025257600080fd5b806321fc65f21161015557806321fc65f2146101e5578063248a9ca3146101fa5780632f2ff15d1461022c57600080fd5b806301ffc9a714610171578063116191b614610199575b600080fd5b61018461017f36600461118a565b6103b2565b60405190151581526020015b60405180910390f35b6101c07f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610190565b6101f86101f33660046111f5565b61044b565b005b61021e610208366004611292565b6000908152600160208190526040909120015490565b604051908152602001610190565b6101f861023a3660046112ab565b61064c565b6101f861024d3660046112ab565b610678565b6101f86106d6565b61021e7f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a81565b60025460ff16610184565b6101f861070b565b61021e7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b6101846102c93660046112ab565b600091825260016020908152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b6101f861030f3660046112d7565b61073d565b6101f86103223660046112d7565b6107be565b61021e600081565b6101f861033d3660046111f5565b610842565b6101f86103503660046112ab565b610a29565b6101846103633660046112d7565b60036020526000908152604090205460ff1681565b6101f86103863660046112f2565b610a4f565b61021e7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061044557507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b610453610b7b565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461047d81610bbe565b610485610bc8565b73ffffffffffffffffffffffffffffffffffffffff861660009081526003602052604090205460ff166104e4576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61052573ffffffffffffffffffffffffffffffffffffffff87167f000000000000000000000000000000000000000000000000000000000000000086610c07565b6040517f5131ab5900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690635131ab599061059f9089908990899089908990600401611378565b600060405180830381600087803b1580156105b957600080fd5b505af11580156105cd573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167f85b5be9cf454e05e0bddf49315178102227c312078eefa3c00294fb4d912ae4e868686604051610632939291906113d5565b60405180910390a3506106456001600055565b5050505050565b6000828152600160208190526040909120015461066881610bbe565b6106728383610c94565b50505050565b73ffffffffffffffffffffffffffffffffffffffff811633146106c7576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6106d18282610d41565b505050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61070081610bbe565b610708610de2565b50565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61073581610bbe565b610708610e41565b7f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a61076781610bbe565b73ffffffffffffffffffffffffffffffffffffffff8216600081815260036020526040808220805460ff19169055517f51085ddf9ebdded84b76e829eb58c4078e4b5bdf97d9a94723f336039da467919190a25050565b7f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a6107e881610bbe565b73ffffffffffffffffffffffffffffffffffffffff8216600081815260036020526040808220805460ff19166001179055517faab7954e9d246b167ef88aeddad35209ca2489d95a8aeb59e288d9b19fae5a549190a25050565b61084a610b7b565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461087481610bbe565b61087c610bc8565b73ffffffffffffffffffffffffffffffffffffffff861660009081526003602052604090205460ff166108db576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61091c73ffffffffffffffffffffffffffffffffffffffff87167f000000000000000000000000000000000000000000000000000000000000000086610c07565b6040517fb8969bd400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063b8969bd4906109969089908990899089908990600401611378565b600060405180830381600087803b1580156109b057600080fd5b505af11580156109c4573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fb9d4efa96044e5f5e03e696fa9ae2ff66911cc27e8a637c3627c75bc5b2241c8868686604051610632939291906113d5565b60008281526001602081905260409091200154610a4581610bbe565b6106728383610d41565b610a57610b7b565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e4610a8181610bbe565b610a89610bc8565b73ffffffffffffffffffffffffffffffffffffffff841660009081526003602052604090205460ff16610ae8576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610b0973ffffffffffffffffffffffffffffffffffffffff85168484610c07565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f9b1bfa7fa9ee420a16e124f794c35ac9f90472acc99140eb2f6447c714cad8eb84604051610b6891815260200190565b60405180910390a3506106d16001600055565b600260005403610bb7576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b6107088133610e7e565b60025460ff1615610c05576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6040805173ffffffffffffffffffffffffffffffffffffffff8416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb000000000000000000000000000000000000000000000000000000001790526106d1908490610f0f565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff16610d3957600083815260016020818152604080842073ffffffffffffffffffffffffffffffffffffffff87168086529252808420805460ff19169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a4506001610445565b506000610445565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff1615610d3957600083815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff86168085529252808320805460ff1916905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a4506001610445565b610dea610fa5565b6002805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b610e49610bc8565b6002805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258610e173390565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16610f0b576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82166004820152602481018390526044015b60405180910390fd5b5050565b6000610f3173ffffffffffffffffffffffffffffffffffffffff841683610fe1565b90508051600014158015610f56575080806020019051810190610f5491906113f8565b155b156106d1576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84166004820152602401610f02565b60025460ff16610c05576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6060610fef83836000610ff6565b9392505050565b606081471015611034576040517fcd786059000000000000000000000000000000000000000000000000000000008152306004820152602401610f02565b6000808573ffffffffffffffffffffffffffffffffffffffff16848660405161105d919061141a565b60006040518083038185875af1925050503d806000811461109a576040519150601f19603f3d011682016040523d82523d6000602084013e61109f565b606091505b50915091506110af8683836110b9565b9695505050505050565b6060826110ce576110c982611148565b610fef565b81511580156110f2575073ffffffffffffffffffffffffffffffffffffffff84163b155b15611141576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85166004820152602401610f02565b5080610fef565b8051156111585780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006020828403121561119c57600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610fef57600080fd5b803573ffffffffffffffffffffffffffffffffffffffff811681146111f057600080fd5b919050565b60008060008060006080868803121561120d57600080fd5b611216866111cc565b9450611224602087016111cc565b935060408601359250606086013567ffffffffffffffff81111561124757600080fd5b8601601f8101881361125857600080fd5b803567ffffffffffffffff81111561126f57600080fd5b88602082840101111561128157600080fd5b959894975092955050506020019190565b6000602082840312156112a457600080fd5b5035919050565b600080604083850312156112be57600080fd5b823591506112ce602084016111cc565b90509250929050565b6000602082840312156112e957600080fd5b610fef826111cc565b60008060006060848603121561130757600080fd5b611310846111cc565b925061131e602085016111cc565b929592945050506040919091013590565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff8616815273ffffffffffffffffffffffffffffffffffffffff851660208201528360408201526080606082015260006113ca60808301848661132f565b979650505050505050565b8381526040602082015260006113ef60408301848661132f565b95945050505050565b60006020828403121561140a57600080fd5b81518015158114610fef57600080fd5b6000825160005b8181101561143b5760208186018101518583015201611421565b50600092019182525091905056fea2646970667358221220dc54ce548a1f0bf8ba5e86cc53c6d822e55eee543451395733c659359bac8dd164736f6c634300081a00338619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a60c060405260001960035534801561001657600080fd5b5060405161155a38038061155a83398101604081905261003591610220565b60016000819055805460ff19169055838383836001600160a01b038416158061006557506001600160a01b038316155b8061007757506001600160a01b038216155b8061008957506001600160a01b038116155b156100a75760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b03808516608052831660a0526100c5600082610154565b506100f07f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e483610154565b5061011b7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb83610154565b506101467f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a82610154565b505050505050505050610274565b60008281526002602090815260408083206001600160a01b038516845290915281205460ff166101fa5760008381526002602090815260408083206001600160a01b03861684529091529020805460ff191660011790556101b23390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45060016101fe565b5060005b92915050565b80516001600160a01b038116811461021b57600080fd5b919050565b6000806000806080858703121561023657600080fd5b61023f85610204565b935061024d60208601610204565b925061025b60408601610204565b915061026960608601610204565b905092959194509250565b60805160a0516112826102d86000396000818161021d01528181610531015281816108240152818161097b01528181610ad00152610bf20152600081816101d1015281816104a1015281816105040152818161079401526107f701526112826000f3fe608060405234801561001057600080fd5b50600436106101775760003560e01c80635e3e9fef116100d857806391d148541161008c578063d547741f11610066578063d547741f14610386578063d5abeb0114610399578063e63ab1e9146103a257600080fd5b806391d1485414610311578063a217fddf14610357578063a783c7891461035f57600080fd5b8063743e0c9b116100bd578063743e0c9b146102cf5780638456cb59146102e257806385f438c1146102ea57600080fd5b80635e3e9fef146102a95780636f8b44b0146102bc57600080fd5b8063248a9ca31161012f57806336568abe1161011457806336568abe146102835780633f4ba83a146102965780635c975abb1461029e57600080fd5b8063248a9ca31461023f5780632f2ff15d1461027057600080fd5b8063106e629011610160578063106e6290146101b9578063116191b6146101cc57806321e093b11461021857600080fd5b806301ffc9a71461017c57806302d5c899146101a4575b600080fd5b61018f61018a366004610fb4565b6103c9565b60405190151581526020015b60405180910390f35b6101b76101b2366004611026565b610462565b005b6101b76101c73660046110b8565b6105f7565b6101f37f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161019b565b6101f37f000000000000000000000000000000000000000000000000000000000000000081565b61026261024d3660046110eb565b60009081526002602052604090206001015490565b60405190815260200161019b565b6101b761027e366004611104565b61069c565b6101b7610291366004611104565b6106c7565b6101b7610720565b60015460ff1661018f565b6101b76102b7366004611026565b610755565b6101b76102ca3660046110eb565b6108d0565b6101b76102dd3660046110eb565b61093e565b6101b76109e8565b6102627f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b61018f61031f366004611104565b600091825260026020908152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b610262600081565b6102627f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb81565b6101b7610394366004611104565b610a1a565b61026260035481565b6102627f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061045c57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b61046a610a3f565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461049481610a82565b61049c610a8c565b6104c77f00000000000000000000000000000000000000000000000000000000000000008684610acb565b6040517fb8969bd400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063b8969bd490610561907f0000000000000000000000000000000000000000000000000000000000000000908a908a908a908a90600401611179565b600060405180830381600087803b15801561057b57600080fd5b505af115801561058f573d6000803e3d6000fd5b505050508573ffffffffffffffffffffffffffffffffffffffff167fba96f26bdda53eb8c8ba39045dfb4ff39753fbc7a6edcf250a88e75e78d102fe8686866040516105dd939291906111d6565b60405180910390a2506105f06001600055565b5050505050565b6105ff610a3f565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461062981610a82565b610631610a8c565b61063c848484610acb565b8373ffffffffffffffffffffffffffffffffffffffff167f884edad9ce6fa2440d8a54cc123490eb96d2768479d49ff9c7366125a94243648460405161068491815260200190565b60405180910390a2506106976001600055565b505050565b6000828152600260205260409020600101546106b781610a82565b6106c18383610c53565b50505050565b73ffffffffffffffffffffffffffffffffffffffff81163314610716576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6106978282610d53565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61074a81610a82565b610752610e12565b50565b61075d610a3f565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461078781610a82565b61078f610a8c565b6107ba7f00000000000000000000000000000000000000000000000000000000000000008684610acb565b6040517f5131ab5900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690635131ab5990610854907f0000000000000000000000000000000000000000000000000000000000000000908a908a908a908a90600401611179565b600060405180830381600087803b15801561086e57600080fd5b505af1158015610882573d6000803e3d6000fd5b505050508573ffffffffffffffffffffffffffffffffffffffff167f7772f56296d3a5202974a45c61c9188d844ab4d6eeb18c851e4b8d5384ca6ced8686866040516105dd939291906111d6565b7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb6108fa81610a82565b610902610a8c565b60038290556040518281527f7810bd47de260c3e9ee10061cf438099dd12256c79485f12f94dbccc981e806c9060200160405180910390a15050565b610946610a8c565b6040517f79cc6790000000000000000000000000000000000000000000000000000000008152336004820152602481018290527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16906379cc679090604401600060405180830381600087803b1580156109d457600080fd5b505af11580156105f0573d6000803e3d6000fd5b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610a1281610a82565b610752610e8f565b600082815260026020526040902060010154610a3581610a82565b6106c18383610d53565b600260005403610a7b576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b6107528133610ee8565b60015460ff1615610ac9576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6003547f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b39573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b5d91906111f9565b610b679084611212565b1115610b9f576040517fc30436e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f1e458bee00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff848116600483015260248201849052604482018390527f00000000000000000000000000000000000000000000000000000000000000001690631e458bee90606401600060405180830381600087803b158015610c3657600080fd5b505af1158015610c4a573d6000803e3d6000fd5b50505050505050565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff16610d4b57600083815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff86168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055610ce93390565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a450600161045c565b50600061045c565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff1615610d4b57600083815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8616808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a450600161045c565b610e1a610f78565b600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b610e97610a8c565b600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016811790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25833610e65565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16610f74576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff821660048201526024810183905260440160405180910390fd5b5050565b60015460ff16610ac9576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060208284031215610fc657600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610ff657600080fd5b9392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461102157600080fd5b919050565b60008060008060006080868803121561103e57600080fd5b61104786610ffd565b945060208601359350604086013567ffffffffffffffff81111561106a57600080fd5b8601601f8101881361107b57600080fd5b803567ffffffffffffffff81111561109257600080fd5b8860208284010111156110a457600080fd5b959894975060200195606001359392505050565b6000806000606084860312156110cd57600080fd5b6110d684610ffd565b95602085013595506040909401359392505050565b6000602082840312156110fd57600080fd5b5035919050565b6000806040838503121561111757600080fd5b8235915061112760208401610ffd565b90509250929050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff8616815273ffffffffffffffffffffffffffffffffffffffff851660208201528360408201526080606082015260006111cb608083018486611130565b979650505050505050565b8381526040602082015260006111f0604083018486611130565b95945050505050565b60006020828403121561120b57600080fd5b5051919050565b8082018082111561045c577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea2646970667358221220de5fa55e0ca79ea2f08903481d01ea00bbbf346b9cfba44e12a2dd6f3a6f2e8a64736f6c634300081a00336080604052348015600f57600080fd5b506001600055610d3a806100246000396000f3fe6080604052600436106100635760003560e01c8063c513169111610040578063c5131691146100c1578063e04d4f97146100e1578063f05b6abf146100f457005b8063357fc5a21461006c5780636ed701691461008c5780638fcaa0b5146100a157005b3661006a57005b005b34801561007857600080fd5b5061006a6100873660046106c0565b610114565b34801561009857600080fd5b5061006a6101aa565b3480156100ad57600080fd5b5061006a6100bc3660046106fc565b6101df565b3480156100cd57600080fd5b5061006a6100dc3660046106c0565b61021e565b61006a6100ef366004610895565b6102f9565b34801561010057600080fd5b5061006a61010f366004610981565b61033d565b61011c610372565b61013e73ffffffffffffffffffffffffffffffffffffffff83163383866103b5565b604080513381526020810185905273ffffffffffffffffffffffffffffffffffffffff848116828401528316606082015290517f2b58128f24a9f59127cc5b5430d70542b22220f2d9adaa86e442b816ab98af609181900360800190a16101a56001600055565b505050565b6040513381527fbcaadb46b82a48af60b608f58959ae6b8310d1b0a0d094c2e9ec3208ed39f2a09060200160405180910390a1565b7f0d3f65f00e631663aa85c96330b5c7a83bb29af3630c0063776f985edc3037aa33838360405161021293929190610a6b565b60405180910390a15050565b610226610372565b6000610233600285610ad5565b90508060000361026f576040517f1f2a200500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61029173ffffffffffffffffffffffffffffffffffffffff84163384846103b5565b604080513381526020810183905273ffffffffffffffffffffffffffffffffffffffff858116828401528416606082015290517f2b58128f24a9f59127cc5b5430d70542b22220f2d9adaa86e442b816ab98af609181900360800190a1506101a56001600055565b7f1f1ff1f5fb41346850b2f5c04e6c767e2f1c8a525c5c0c5cdb60cdf3ca5f62fa3334858585604051610330959493929190610b7e565b60405180910390a1505050565b7f74a53cd528a921fca7dbdee62f86819051d3cc98f214951f4238e8843f20b146338484846040516103309493929190610c08565b6002600054036103ae576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b6040805173ffffffffffffffffffffffffffffffffffffffff85811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd0000000000000000000000000000000000000000000000000000000017905261044a908590610450565b50505050565b600061047273ffffffffffffffffffffffffffffffffffffffff8416836104eb565b905080516000141580156104975750808060200190518101906104959190610ccb565b155b156101a5576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff841660048201526024015b60405180910390fd5b60606104f983836000610500565b9392505050565b60608147101561053e576040517fcd7860590000000000000000000000000000000000000000000000000000000081523060048201526024016104e2565b6000808573ffffffffffffffffffffffffffffffffffffffff1684866040516105679190610ce8565b60006040518083038185875af1925050503d80600081146105a4576040519150601f19603f3d011682016040523d82523d6000602084013e6105a9565b606091505b50915091506105b98683836105c3565b9695505050505050565b6060826105d8576105d382610652565b6104f9565b81511580156105fc575073ffffffffffffffffffffffffffffffffffffffff84163b155b1561064b576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff851660048201526024016104e2565b50806104f9565b8051156106625780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50565b803573ffffffffffffffffffffffffffffffffffffffff811681146106bb57600080fd5b919050565b6000806000606084860312156106d557600080fd5b833592506106e560208501610697565b91506106f360408501610697565b90509250925092565b6000806020838503121561070f57600080fd5b823567ffffffffffffffff81111561072657600080fd5b8301601f8101851361073757600080fd5b803567ffffffffffffffff81111561074e57600080fd5b85602082840101111561076057600080fd5b6020919091019590945092505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156107e6576107e6610770565b604052919050565b600082601f8301126107ff57600080fd5b813567ffffffffffffffff81111561081957610819610770565b61084a60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8401160161079f565b81815284602083860101111561085f57600080fd5b816020850160208301376000918101602001919091529392505050565b801515811461069457600080fd5b80356106bb8161087c565b6000806000606084860312156108aa57600080fd5b833567ffffffffffffffff8111156108c157600080fd5b6108cd868287016107ee565b9350506020840135915060408401356108e58161087c565b809150509250925092565b600067ffffffffffffffff82111561090a5761090a610770565b5060051b60200190565b600082601f83011261092557600080fd5b8135610938610933826108f0565b61079f565b8082825260208201915060208360051b86010192508583111561095a57600080fd5b602085015b8381101561097757803583526020928301920161095f565b5095945050505050565b60008060006060848603121561099657600080fd5b833567ffffffffffffffff8111156109ad57600080fd5b8401601f810186136109be57600080fd5b80356109cc610933826108f0565b8082825260208201915060208360051b8501019250888311156109ee57600080fd5b602084015b83811015610a3057803567ffffffffffffffff811115610a1257600080fd5b610a218b6020838901016107ee565b845250602092830192016109f3565b509550505050602084013567ffffffffffffffff811115610a5057600080fd5b610a5c86828701610914565b9250506106f36040850161088a565b73ffffffffffffffffffffffffffffffffffffffff8416815260406020820152816040820152818360608301376000818301606090810191909152601f9092017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016010192915050565b600082610b0b577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60005b83811015610b2b578181015183820152602001610b13565b50506000910152565b60008151808452610b4c816020860160208601610b10565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b73ffffffffffffffffffffffffffffffffffffffff8616815284602082015260a060408201526000610bb360a0830186610b34565b6060830194909452509015156080909101529392505050565b600081518084526020840193506020830160005b82811015610bfe578151865260209586019590910190600101610be0565b5093949350505050565b60006080820173ffffffffffffffffffffffffffffffffffffffff871683526080602084015280865180835260a08501915060a08160051b86010192506020880160005b82811015610c9b577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60878603018452610c86858351610b34565b94506020938401939190910190600101610c4c565b505050508281036040840152610cb18186610bcc565b915050610cc2606083018415159052565b95945050505050565b600060208284031215610cdd57600080fd5b81516104f98161087c565b60008251610cfa818460208701610b10565b919091019291505056fea2646970667358221220556072e1abafc3c4063b8cce832228b4f309b93726aaa6a6dfab20cb880c6d1864736f6c634300081a0033a26469706673582212201e67211881e86ae19a2444e1df334f77ca6edbd7114015548e5beb0878b2e45664736f6c634300081a0033", } // ERC20CustodyTestABI is the input ABI used to generate the binding from. @@ -344,6 +344,37 @@ func (_ERC20CustodyTest *ERC20CustodyTestCallerSession) TSSROLE() ([32]byte, err return _ERC20CustodyTest.Contract.TSSROLE(&_ERC20CustodyTest.CallOpts) } +// WHITELISTERROLE is a free data retrieval call binding the contract method 0x570618e1. +// +// Solidity: function WHITELISTER_ROLE() view returns(bytes32) +func (_ERC20CustodyTest *ERC20CustodyTestCaller) WHITELISTERROLE(opts *bind.CallOpts) ([32]byte, error) { + var out []interface{} + err := _ERC20CustodyTest.contract.Call(opts, &out, "WHITELISTER_ROLE") + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// WHITELISTERROLE is a free data retrieval call binding the contract method 0x570618e1. +// +// Solidity: function WHITELISTER_ROLE() view returns(bytes32) +func (_ERC20CustodyTest *ERC20CustodyTestSession) WHITELISTERROLE() ([32]byte, error) { + return _ERC20CustodyTest.Contract.WHITELISTERROLE(&_ERC20CustodyTest.CallOpts) +} + +// WHITELISTERROLE is a free data retrieval call binding the contract method 0x570618e1. +// +// Solidity: function WHITELISTER_ROLE() view returns(bytes32) +func (_ERC20CustodyTest *ERC20CustodyTestCallerSession) WHITELISTERROLE() ([32]byte, error) { + return _ERC20CustodyTest.Contract.WHITELISTERROLE(&_ERC20CustodyTest.CallOpts) +} + // WITHDRAWERROLE is a free data retrieval call binding the contract method 0x85f438c1. // // Solidity: function WITHDRAWER_ROLE() view returns(bytes32) @@ -947,6 +978,132 @@ func (_ERC20CustodyTest *ERC20CustodyTestTransactorSession) TestNewCustodyFailsI return _ERC20CustodyTest.Contract.TestNewCustodyFailsIfAddressesAreZero(&_ERC20CustodyTest.TransactOpts) } +// TestUnwhitelist is a paid mutator transaction binding the contract method 0xfa2a7074. +// +// Solidity: function testUnwhitelist() returns() +func (_ERC20CustodyTest *ERC20CustodyTestTransactor) TestUnwhitelist(opts *bind.TransactOpts) (*types.Transaction, error) { + return _ERC20CustodyTest.contract.Transact(opts, "testUnwhitelist") +} + +// TestUnwhitelist is a paid mutator transaction binding the contract method 0xfa2a7074. +// +// Solidity: function testUnwhitelist() returns() +func (_ERC20CustodyTest *ERC20CustodyTestSession) TestUnwhitelist() (*types.Transaction, error) { + return _ERC20CustodyTest.Contract.TestUnwhitelist(&_ERC20CustodyTest.TransactOpts) +} + +// TestUnwhitelist is a paid mutator transaction binding the contract method 0xfa2a7074. +// +// Solidity: function testUnwhitelist() returns() +func (_ERC20CustodyTest *ERC20CustodyTestTransactorSession) TestUnwhitelist() (*types.Transaction, error) { + return _ERC20CustodyTest.Contract.TestUnwhitelist(&_ERC20CustodyTest.TransactOpts) +} + +// TestUnwhitelistFailsIfSenderIsNotWhitelister is a paid mutator transaction binding the contract method 0xf0c8e7e0. +// +// Solidity: function testUnwhitelistFailsIfSenderIsNotWhitelister() returns() +func (_ERC20CustodyTest *ERC20CustodyTestTransactor) TestUnwhitelistFailsIfSenderIsNotWhitelister(opts *bind.TransactOpts) (*types.Transaction, error) { + return _ERC20CustodyTest.contract.Transact(opts, "testUnwhitelistFailsIfSenderIsNotWhitelister") +} + +// TestUnwhitelistFailsIfSenderIsNotWhitelister is a paid mutator transaction binding the contract method 0xf0c8e7e0. +// +// Solidity: function testUnwhitelistFailsIfSenderIsNotWhitelister() returns() +func (_ERC20CustodyTest *ERC20CustodyTestSession) TestUnwhitelistFailsIfSenderIsNotWhitelister() (*types.Transaction, error) { + return _ERC20CustodyTest.Contract.TestUnwhitelistFailsIfSenderIsNotWhitelister(&_ERC20CustodyTest.TransactOpts) +} + +// TestUnwhitelistFailsIfSenderIsNotWhitelister is a paid mutator transaction binding the contract method 0xf0c8e7e0. +// +// Solidity: function testUnwhitelistFailsIfSenderIsNotWhitelister() returns() +func (_ERC20CustodyTest *ERC20CustodyTestTransactorSession) TestUnwhitelistFailsIfSenderIsNotWhitelister() (*types.Transaction, error) { + return _ERC20CustodyTest.Contract.TestUnwhitelistFailsIfSenderIsNotWhitelister(&_ERC20CustodyTest.TransactOpts) +} + +// TestWhitelist is a paid mutator transaction binding the contract method 0x284cb929. +// +// Solidity: function testWhitelist() returns() +func (_ERC20CustodyTest *ERC20CustodyTestTransactor) TestWhitelist(opts *bind.TransactOpts) (*types.Transaction, error) { + return _ERC20CustodyTest.contract.Transact(opts, "testWhitelist") +} + +// TestWhitelist is a paid mutator transaction binding the contract method 0x284cb929. +// +// Solidity: function testWhitelist() returns() +func (_ERC20CustodyTest *ERC20CustodyTestSession) TestWhitelist() (*types.Transaction, error) { + return _ERC20CustodyTest.Contract.TestWhitelist(&_ERC20CustodyTest.TransactOpts) +} + +// TestWhitelist is a paid mutator transaction binding the contract method 0x284cb929. +// +// Solidity: function testWhitelist() returns() +func (_ERC20CustodyTest *ERC20CustodyTestTransactorSession) TestWhitelist() (*types.Transaction, error) { + return _ERC20CustodyTest.Contract.TestWhitelist(&_ERC20CustodyTest.TransactOpts) +} + +// TestWhitelistFailsIfSenderIsNotWhitelister is a paid mutator transaction binding the contract method 0x2be6a162. +// +// Solidity: function testWhitelistFailsIfSenderIsNotWhitelister() returns() +func (_ERC20CustodyTest *ERC20CustodyTestTransactor) TestWhitelistFailsIfSenderIsNotWhitelister(opts *bind.TransactOpts) (*types.Transaction, error) { + return _ERC20CustodyTest.contract.Transact(opts, "testWhitelistFailsIfSenderIsNotWhitelister") +} + +// TestWhitelistFailsIfSenderIsNotWhitelister is a paid mutator transaction binding the contract method 0x2be6a162. +// +// Solidity: function testWhitelistFailsIfSenderIsNotWhitelister() returns() +func (_ERC20CustodyTest *ERC20CustodyTestSession) TestWhitelistFailsIfSenderIsNotWhitelister() (*types.Transaction, error) { + return _ERC20CustodyTest.Contract.TestWhitelistFailsIfSenderIsNotWhitelister(&_ERC20CustodyTest.TransactOpts) +} + +// TestWhitelistFailsIfSenderIsNotWhitelister is a paid mutator transaction binding the contract method 0x2be6a162. +// +// Solidity: function testWhitelistFailsIfSenderIsNotWhitelister() returns() +func (_ERC20CustodyTest *ERC20CustodyTestTransactorSession) TestWhitelistFailsIfSenderIsNotWhitelister() (*types.Transaction, error) { + return _ERC20CustodyTest.Contract.TestWhitelistFailsIfSenderIsNotWhitelister(&_ERC20CustodyTest.TransactOpts) +} + +// TestWithdrawAndCallFailsIfTokenIsNotWhitelisted is a paid mutator transaction binding the contract method 0x9918c1c2. +// +// Solidity: function testWithdrawAndCallFailsIfTokenIsNotWhitelisted() returns() +func (_ERC20CustodyTest *ERC20CustodyTestTransactor) TestWithdrawAndCallFailsIfTokenIsNotWhitelisted(opts *bind.TransactOpts) (*types.Transaction, error) { + return _ERC20CustodyTest.contract.Transact(opts, "testWithdrawAndCallFailsIfTokenIsNotWhitelisted") +} + +// TestWithdrawAndCallFailsIfTokenIsNotWhitelisted is a paid mutator transaction binding the contract method 0x9918c1c2. +// +// Solidity: function testWithdrawAndCallFailsIfTokenIsNotWhitelisted() returns() +func (_ERC20CustodyTest *ERC20CustodyTestSession) TestWithdrawAndCallFailsIfTokenIsNotWhitelisted() (*types.Transaction, error) { + return _ERC20CustodyTest.Contract.TestWithdrawAndCallFailsIfTokenIsNotWhitelisted(&_ERC20CustodyTest.TransactOpts) +} + +// TestWithdrawAndCallFailsIfTokenIsNotWhitelisted is a paid mutator transaction binding the contract method 0x9918c1c2. +// +// Solidity: function testWithdrawAndCallFailsIfTokenIsNotWhitelisted() returns() +func (_ERC20CustodyTest *ERC20CustodyTestTransactorSession) TestWithdrawAndCallFailsIfTokenIsNotWhitelisted() (*types.Transaction, error) { + return _ERC20CustodyTest.Contract.TestWithdrawAndCallFailsIfTokenIsNotWhitelisted(&_ERC20CustodyTest.TransactOpts) +} + +// TestWithdrawAndRevertFailsIfTokenIsNotWhitelisted is a paid mutator transaction binding the contract method 0xf4221f08. +// +// Solidity: function testWithdrawAndRevertFailsIfTokenIsNotWhitelisted() returns() +func (_ERC20CustodyTest *ERC20CustodyTestTransactor) TestWithdrawAndRevertFailsIfTokenIsNotWhitelisted(opts *bind.TransactOpts) (*types.Transaction, error) { + return _ERC20CustodyTest.contract.Transact(opts, "testWithdrawAndRevertFailsIfTokenIsNotWhitelisted") +} + +// TestWithdrawAndRevertFailsIfTokenIsNotWhitelisted is a paid mutator transaction binding the contract method 0xf4221f08. +// +// Solidity: function testWithdrawAndRevertFailsIfTokenIsNotWhitelisted() returns() +func (_ERC20CustodyTest *ERC20CustodyTestSession) TestWithdrawAndRevertFailsIfTokenIsNotWhitelisted() (*types.Transaction, error) { + return _ERC20CustodyTest.Contract.TestWithdrawAndRevertFailsIfTokenIsNotWhitelisted(&_ERC20CustodyTest.TransactOpts) +} + +// TestWithdrawAndRevertFailsIfTokenIsNotWhitelisted is a paid mutator transaction binding the contract method 0xf4221f08. +// +// Solidity: function testWithdrawAndRevertFailsIfTokenIsNotWhitelisted() returns() +func (_ERC20CustodyTest *ERC20CustodyTestTransactorSession) TestWithdrawAndRevertFailsIfTokenIsNotWhitelisted() (*types.Transaction, error) { + return _ERC20CustodyTest.Contract.TestWithdrawAndRevertFailsIfTokenIsNotWhitelisted(&_ERC20CustodyTest.TransactOpts) +} + // TestWithdrawAndRevertThroughCustody is a paid mutator transaction binding the contract method 0x71149c94. // // Solidity: function testWithdrawAndRevertThroughCustody() returns() @@ -1031,6 +1188,27 @@ func (_ERC20CustodyTest *ERC20CustodyTestTransactorSession) TestWithdrawAndRever return _ERC20CustodyTest.Contract.TestWithdrawAndRevertThroughCustodyFailsIfSenderIsNotWithdrawer(&_ERC20CustodyTest.TransactOpts) } +// TestWithdrawFailsIfTokenIsNotWhitelisted is a paid mutator transaction binding the contract method 0x82c52992. +// +// Solidity: function testWithdrawFailsIfTokenIsNotWhitelisted() returns() +func (_ERC20CustodyTest *ERC20CustodyTestTransactor) TestWithdrawFailsIfTokenIsNotWhitelisted(opts *bind.TransactOpts) (*types.Transaction, error) { + return _ERC20CustodyTest.contract.Transact(opts, "testWithdrawFailsIfTokenIsNotWhitelisted") +} + +// TestWithdrawFailsIfTokenIsNotWhitelisted is a paid mutator transaction binding the contract method 0x82c52992. +// +// Solidity: function testWithdrawFailsIfTokenIsNotWhitelisted() returns() +func (_ERC20CustodyTest *ERC20CustodyTestSession) TestWithdrawFailsIfTokenIsNotWhitelisted() (*types.Transaction, error) { + return _ERC20CustodyTest.Contract.TestWithdrawFailsIfTokenIsNotWhitelisted(&_ERC20CustodyTest.TransactOpts) +} + +// TestWithdrawFailsIfTokenIsNotWhitelisted is a paid mutator transaction binding the contract method 0x82c52992. +// +// Solidity: function testWithdrawFailsIfTokenIsNotWhitelisted() returns() +func (_ERC20CustodyTest *ERC20CustodyTestTransactorSession) TestWithdrawFailsIfTokenIsNotWhitelisted() (*types.Transaction, error) { + return _ERC20CustodyTest.Contract.TestWithdrawFailsIfTokenIsNotWhitelisted(&_ERC20CustodyTest.TransactOpts) +} + // TestWithdrawThroughCustody is a paid mutator transaction binding the contract method 0x3e73ecb4. // // Solidity: function testWithdrawThroughCustody() returns() @@ -2666,6 +2844,294 @@ func (_ERC20CustodyTest *ERC20CustodyTestFilterer) ParseRevertedWithERC20(log ty return event, nil } +// ERC20CustodyTestUnwhitelistedIterator is returned from FilterUnwhitelisted and is used to iterate over the raw logs and unpacked data for Unwhitelisted events raised by the ERC20CustodyTest contract. +type ERC20CustodyTestUnwhitelistedIterator struct { + Event *ERC20CustodyTestUnwhitelisted // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *ERC20CustodyTestUnwhitelistedIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(ERC20CustodyTestUnwhitelisted) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(ERC20CustodyTestUnwhitelisted) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *ERC20CustodyTestUnwhitelistedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *ERC20CustodyTestUnwhitelistedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// ERC20CustodyTestUnwhitelisted represents a Unwhitelisted event raised by the ERC20CustodyTest contract. +type ERC20CustodyTestUnwhitelisted struct { + Token common.Address + Raw types.Log // Blockchain specific contextual infos +} + +// FilterUnwhitelisted is a free log retrieval operation binding the contract event 0x51085ddf9ebdded84b76e829eb58c4078e4b5bdf97d9a94723f336039da46791. +// +// Solidity: event Unwhitelisted(address indexed token) +func (_ERC20CustodyTest *ERC20CustodyTestFilterer) FilterUnwhitelisted(opts *bind.FilterOpts, token []common.Address) (*ERC20CustodyTestUnwhitelistedIterator, error) { + + var tokenRule []interface{} + for _, tokenItem := range token { + tokenRule = append(tokenRule, tokenItem) + } + + logs, sub, err := _ERC20CustodyTest.contract.FilterLogs(opts, "Unwhitelisted", tokenRule) + if err != nil { + return nil, err + } + return &ERC20CustodyTestUnwhitelistedIterator{contract: _ERC20CustodyTest.contract, event: "Unwhitelisted", logs: logs, sub: sub}, nil +} + +// WatchUnwhitelisted is a free log subscription operation binding the contract event 0x51085ddf9ebdded84b76e829eb58c4078e4b5bdf97d9a94723f336039da46791. +// +// Solidity: event Unwhitelisted(address indexed token) +func (_ERC20CustodyTest *ERC20CustodyTestFilterer) WatchUnwhitelisted(opts *bind.WatchOpts, sink chan<- *ERC20CustodyTestUnwhitelisted, token []common.Address) (event.Subscription, error) { + + var tokenRule []interface{} + for _, tokenItem := range token { + tokenRule = append(tokenRule, tokenItem) + } + + logs, sub, err := _ERC20CustodyTest.contract.WatchLogs(opts, "Unwhitelisted", tokenRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(ERC20CustodyTestUnwhitelisted) + if err := _ERC20CustodyTest.contract.UnpackLog(event, "Unwhitelisted", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseUnwhitelisted is a log parse operation binding the contract event 0x51085ddf9ebdded84b76e829eb58c4078e4b5bdf97d9a94723f336039da46791. +// +// Solidity: event Unwhitelisted(address indexed token) +func (_ERC20CustodyTest *ERC20CustodyTestFilterer) ParseUnwhitelisted(log types.Log) (*ERC20CustodyTestUnwhitelisted, error) { + event := new(ERC20CustodyTestUnwhitelisted) + if err := _ERC20CustodyTest.contract.UnpackLog(event, "Unwhitelisted", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// ERC20CustodyTestWhitelistedIterator is returned from FilterWhitelisted and is used to iterate over the raw logs and unpacked data for Whitelisted events raised by the ERC20CustodyTest contract. +type ERC20CustodyTestWhitelistedIterator struct { + Event *ERC20CustodyTestWhitelisted // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *ERC20CustodyTestWhitelistedIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(ERC20CustodyTestWhitelisted) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(ERC20CustodyTestWhitelisted) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *ERC20CustodyTestWhitelistedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *ERC20CustodyTestWhitelistedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// ERC20CustodyTestWhitelisted represents a Whitelisted event raised by the ERC20CustodyTest contract. +type ERC20CustodyTestWhitelisted struct { + Token common.Address + Raw types.Log // Blockchain specific contextual infos +} + +// FilterWhitelisted is a free log retrieval operation binding the contract event 0xaab7954e9d246b167ef88aeddad35209ca2489d95a8aeb59e288d9b19fae5a54. +// +// Solidity: event Whitelisted(address indexed token) +func (_ERC20CustodyTest *ERC20CustodyTestFilterer) FilterWhitelisted(opts *bind.FilterOpts, token []common.Address) (*ERC20CustodyTestWhitelistedIterator, error) { + + var tokenRule []interface{} + for _, tokenItem := range token { + tokenRule = append(tokenRule, tokenItem) + } + + logs, sub, err := _ERC20CustodyTest.contract.FilterLogs(opts, "Whitelisted", tokenRule) + if err != nil { + return nil, err + } + return &ERC20CustodyTestWhitelistedIterator{contract: _ERC20CustodyTest.contract, event: "Whitelisted", logs: logs, sub: sub}, nil +} + +// WatchWhitelisted is a free log subscription operation binding the contract event 0xaab7954e9d246b167ef88aeddad35209ca2489d95a8aeb59e288d9b19fae5a54. +// +// Solidity: event Whitelisted(address indexed token) +func (_ERC20CustodyTest *ERC20CustodyTestFilterer) WatchWhitelisted(opts *bind.WatchOpts, sink chan<- *ERC20CustodyTestWhitelisted, token []common.Address) (event.Subscription, error) { + + var tokenRule []interface{} + for _, tokenItem := range token { + tokenRule = append(tokenRule, tokenItem) + } + + logs, sub, err := _ERC20CustodyTest.contract.WatchLogs(opts, "Whitelisted", tokenRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(ERC20CustodyTestWhitelisted) + if err := _ERC20CustodyTest.contract.UnpackLog(event, "Whitelisted", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseWhitelisted is a log parse operation binding the contract event 0xaab7954e9d246b167ef88aeddad35209ca2489d95a8aeb59e288d9b19fae5a54. +// +// Solidity: event Whitelisted(address indexed token) +func (_ERC20CustodyTest *ERC20CustodyTestFilterer) ParseWhitelisted(log types.Log) (*ERC20CustodyTestWhitelisted, error) { + event := new(ERC20CustodyTestWhitelisted) + if err := _ERC20CustodyTest.contract.UnpackLog(event, "Whitelisted", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + // ERC20CustodyTestWithdrawIterator is returned from FilterWithdraw and is used to iterate over the raw logs and unpacked data for Withdraw events raised by the ERC20CustodyTest contract. type ERC20CustodyTestWithdrawIterator struct { Event *ERC20CustodyTestWithdraw // Event containing the contract specifics and raw log diff --git a/v2/pkg/erc20custodyechidnatest.sol/erc20custodyechidnatest.go b/v2/pkg/erc20custodyechidnatest.sol/erc20custodyechidnatest.go index 57a5f35d..aa8e82e2 100644 --- a/v2/pkg/erc20custodyechidnatest.sol/erc20custodyechidnatest.go +++ b/v2/pkg/erc20custodyechidnatest.sol/erc20custodyechidnatest.go @@ -31,8 +31,8 @@ var ( // ERC20CustodyEchidnaTestMetaData contains all meta data concerning the ERC20CustodyEchidnaTest contract. var ERC20CustodyEchidnaTestMetaData = &bind.MetaData{ - ABI: "[{\"type\":\"constructor\",\"inputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"DEFAULT_ADMIN_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"PAUSER_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"WITHDRAWER_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"echidnaCaller\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"gateway\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIGatewayEVM\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getRoleAdmin\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"grantRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"hasRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"pause\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"paused\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"renounceRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"callerConfirmation\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"revokeRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"supportsInterface\",\"inputs\":[{\"name\":\"interfaceId\",\"type\":\"bytes4\",\"internalType\":\"bytes4\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"testERC20\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractTestERC20\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"testWithdrawAndCall\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"unpause\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"withdraw\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"withdrawAndCall\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"withdrawAndRevert\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"event\",\"name\":\"Paused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleAdminChanged\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"previousAdminRole\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"newAdminRole\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleGranted\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleRevoked\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Unpaused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Withdraw\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"WithdrawAndCall\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"WithdrawAndRevert\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"AccessControlBadConfirmation\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"AccessControlUnauthorizedAccount\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"neededRole\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"type\":\"error\",\"name\":\"AddressEmptyCode\",\"inputs\":[{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"AddressInsufficientBalance\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"EnforcedPause\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ExpectedPause\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"FailedInnerCall\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ReentrancyGuardReentrantCall\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"SafeERC20FailedOperation\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"ZeroAddress\",\"inputs\":[]}]", - Bin: "0x600380546001600160a01b03191633908117909155600e60a09081526d11d85d195dd85e5155934b9cdbdb60921b60c0526101049190915261012361012481905261014452606460e090815261016460405261010080516001600160e01b0390811663c0c53b8b60e01b1790915261007992919061026316565b600480546001600160a01b03929092166001600160a01b03199283168117909155600580549092161790553480156100b057600080fd5b5060055460035460016000556002805460ff191690556001600160a01b039182169116808215806100e857506001600160a01b038216155b806100fa57506001600160a01b038116155b156101185760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b038316608052610130600082610282565b5061015b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a82610282565b506101867f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e483610282565b505050506040516101969061380e565b60408082526004908201819052631d195cdd60e21b606083015260806020830181905282015263151154d560e21b60a082015260c001604051809103906000f0801580156101e8573d6000803e3d6000fd5b5060028054610100600160a81b0319166101006001600160a01b039384160217905560055460405163ae7a3a6f60e01b815230600482015291169063ae7a3a6f90602401600060405180830381600087803b15801561024657600080fd5b505af115801561025a573d6000803e3d6000fd5b5050505061488f565b600061026d61381b565b610278848483610315565b9150505b92915050565b60008281526001602090815260408083206001600160a01b038516845290915281205460ff1661030d5760008381526001602081815260408084206001600160a01b0387168086529252808420805460ff19169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a450600161027c565b50600061027c565b6000806103228584610391565b90506103866040518060400160405280601d81526020017f4552433139363750726f78792e736f6c3a4552433139363750726f78790000008152508286604051602001610370929190613924565b60408051601f198184030181529190528561039d565b9150505b9392505050565b600061038a83836103d1565b60c081015151600090156103c7576103c084848460c001516103f260201b60201c565b905061038a565b6103c0848461056b565b60006103dd8383610638565b61038a8383602001518461039d60201b60201c565b6000806103fd610648565b9050600061040b86836106e2565b905060006104288260600151836020015185610b0560201b60201c565b9050600061043883838989610cba565b9050600061044582611936565b602081015181519192509060030b1561049e5789826040015160405160200161046f929190613948565b60408051601f198184030181529082905262461bcd60e51b8252610495916004016139ae565b60405180910390fd5b60006104e76040518060400160405280601581526020017f4465706c6f79656420746f20616464726573733a200000000000000000000000815250836001611acd60201b60201c565b60405163c6ce059d60e01b8152909150600080516020616b378339815191529063c6ce059d9061051b9084906004016139ae565b602060405180830381865afa158015610538573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061055c91906139c1565b9b9a5050505050505050505050565b604051638d1cc92560e01b81526000908190600080516020616b3783398151915290638d1cc925906105a19087906004016139ae565b600060405180830381865afa1580156105be573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526105e69190810190613ab6565b905060006106158285604051602001610600929190613aea565b60408051601f19818403018152919052611c6d565b90506001600160a01b03811661027857848460405160200161046f929190613b19565b61064482826000611c80565b5050565b60408051808201825260038152621bdd5d60ea1b602082015290516334515cdb60e21b8152606091600080516020616b3783398151915291829063d145736c90610696908490600401613ba8565b600060405180830381865afa1580156106b3573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526106db9190810190613bdd565b9250505090565b6107146040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b6000600080516020616b3783398151915290506107596040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b61076285611d5a565b6020820152600061077286611faf565b90506000836001600160a01b031663d930a0e66040518163ffffffff1660e01b8152600401600060405180830381865afa1580156107b4573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526107dc9190810190613bdd565b868385602001516040516020016107f69493929190613c25565b60408051601f19818403018152908290526360f9bb1160e01b825291506000906001600160a01b038616906360f9bb11906108359085906004016139ae565b600060405180830381865afa158015610852573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261087a9190810190613bdd565b604051636da11afb60e11b81529091506001600160a01b0386169063db4235f6906108a9908490600401613cbd565b602060405180830381865afa1580156108c6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108ea9190613cf6565b6108ff578160405160200161046f9190613d18565b6040516309389f5960e31b81526001600160a01b038616906349c4fac89061092b908490600401613d8f565b600060405180830381865afa158015610948573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526109709190810190613bdd565b8452604051636da11afb60e11b81526001600160a01b0386169063db4235f69061099e908490600401613dd5565b602060405180830381865afa1580156109bb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109df9190613cf6565b15610a5b576040516309389f5960e31b81526001600160a01b038616906349c4fac890610a10908490600401613dd5565b600060405180830381865afa158015610a2d573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610a559190810190613bdd565b60408501525b846001600160a01b03166349c4fac8828660000151604051602001610a809190613e16565b6040516020818303038152906040526040518363ffffffff1660e01b8152600401610aac929190613e71565b600060405180830381865afa158015610ac9573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610af19190810190613bdd565b606085015250608083015250949350505050565b60408051600480825260a0820190925260609160009190816020015b6060815260200190600190039081610b21579050509050604051806040016040528060048152602001630677265760e41b81525081600081518110610b6857610b68613e96565b6020026020010181905250604051806040016040528060038152602001620b5c9b60ea1b81525081600181518110610ba257610ba2613e96565b602002602001018190525084604051602001610bbe9190613eac565b60405160208183030381529060405281600281518110610be057610be0613e96565b602002602001018190525082604051602001610bfc9190613ee1565b60405160208183030381529060405281600381518110610c1e57610c1e613e96565b60209081029190910101526000610c3482611936565b9050600081602001519050610c9b610c6e60405180604001604052806005815260200164173539b7b760d91b81525061213260201b60201c565b6040805180820182526000808252602091820152815180830190925284518252808501908201529061215f565b610cb0578560405160200161046f9190613f10565b9695505050505050565b60a0810151604080518082018252600080825260209182015281518083019092528251808352928101910152606090600080516020616b378339815191529015610d04565b511590565b610e2057826020015115610d945760405162461bcd60e51b81526020600482015260586024820152600080516020616b5783398151915260448201527f62652075736564207768656e207468652060736b6970566572696679536f757260648201527f6365436f646560206f7074696f6e206973206074727565600000000000000000608482015260a401610495565b8260c0015115610e205760405162461bcd60e51b81526020600482015260536024820152600080516020616b5783398151915260448201527f62652075736564207768656e207468652060736b69704c6963656e736554797060648201527f6560206f7074696f6e2069732060747275656000000000000000000000000000608482015260a401610495565b6040805160ff8082526120008201909252600091816020015b6060815260200190600190039081610e395790505090506000604051806040016040528060038152602001620dce0f60eb1b815250828280610e7a90613fa5565b935060ff1681518110610e8f57610e8f613e96565b60200260200101819052506040518060400160405280600d81526020016c302e302e312d616c7068612e3760981b815250604051602001610ed09190613fc4565b604051602081830303815290604052828280610eeb90613fa5565b935060ff1681518110610f0057610f00613e96565b6020026020010181905250604051806040016040528060068152602001656465706c6f7960d01b815250828280610f3690613fa5565b935060ff1681518110610f4b57610f4b613e96565b60200260200101819052506040518060400160405280600e81526020016d2d2d636f6e74726163744e616d6560901b815250828280610f8990613fa5565b935060ff1681518110610f9e57610f9e613e96565b60200260200101819052508760200151828280610fba90613fa5565b935060ff1681518110610fcf57610fcf613e96565b60200260200101819052506040518060400160405280600e81526020016d05a5ac6dedce8e4c2c6e8a0c2e8d60931b81525082828061100d90613fa5565b935060ff168151811061102257611022613e96565b60209081029190910101528751828261103a81613fa5565b935060ff168151811061104f5761104f613e96565b6020026020010181905250604051806040016040528060098152602001680b4b58da185a5b925960ba1b81525082828061108890613fa5565b935060ff168151811061109d5761109d613e96565b60209081029190910101526110b1466121c0565b82826110bc81613fa5565b935060ff16815181106110d1576110d1613e96565b60200260200101819052506040518060400160405280600f81526020016e2d2d6275696c64496e666f46696c6560881b81525082828061111090613fa5565b935060ff168151811061112557611125613e96565b60200260200101819052508682828061113d90613fa5565b935060ff168151811061115257611152613e96565b60209081029190910101528551156112605760408051808201909152601581527f2d2d636f6e7374727563746f7242797465636f64650000000000000000000000602082015282826111a381613fa5565b935060ff16815181106111b8576111b8613e96565b60209081029190910101526040516371aad10d60e01b81526001600160a01b038416906371aad10d906111ef9089906004016139ae565b600060405180830381865afa15801561120c573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526112349190810190613bdd565b828261123f81613fa5565b935060ff168151811061125457611254613e96565b60200260200101819052505b84602001511561130d576040805180820190915260128152712d2d766572696679536f75726365436f646560701b6020820152828261129e81613fa5565b935060ff16815181106112b3576112b3613e96565b60200260200101819052506040518060400160405280600581526020016466616c736560d81b8152508282806112e890613fa5565b935060ff16815181106112fd576112fd613e96565b6020026020010181905250611474565b611323610cff8660a0015161213260201b60201c565b6113a65760408051808201909152600d81526c2d2d6c6963656e73655479706560981b6020820152828261135681613fa5565b935060ff168151811061136b5761136b613e96565b60200260200101819052508460a0015160405160200161138b9190613eac565b6040516020818303038152906040528282806112e890613fa5565b8460c001511580156113cb57506113c9610cff896040015161213260201b60201c565b155b156114745760408051808201909152600d81526c2d2d6c6963656e73655479706560981b602082015282826113ff81613fa5565b935060ff168151811061141457611414613e96565b602090810291909101015261142888612252565b6040516020016114389190613eac565b60405160208183030381529060405282828061145390613fa5565b935060ff168151811061146857611468613e96565b60200260200101819052505b61148a610cff866040015161213260201b60201c565b61150d5760408051808201909152600b81526a0b4b5c995b185e595c925960aa1b602082015282826114bb81613fa5565b935060ff16815181106114d0576114d0613e96565b602002602001018190525084604001518282806114ec90613fa5565b935060ff168151811061150157611501613e96565b60200260200101819052505b6060850151156115fe576040805180820190915260068152650b4b5cd85b1d60d21b6020820152828261153f81613fa5565b935060ff168151811061155457611554613e96565b60209081029190910101526060850151604051631623433d60e31b815260048101919091526001600160a01b0384169063b11a19e890602401600060405180830381865afa1580156115aa573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526115d29190810190613bdd565b82826115dd81613fa5565b935060ff16815181106115f2576115f2613e96565b60200260200101819052505b60e085015151156116905760408051808201909152600a8152690b4b59d85cd31a5b5a5d60b21b6020820152828261163581613fa5565b935060ff168151811061164a5761164a613e96565b602090810291909101015260e085015151611664906121c0565b828261166f81613fa5565b935060ff168151811061168457611684613e96565b60200260200101819052505b60e0850151602001511561172d5760408051808201909152600a8152692d2d676173507269636560b01b602082015282826116ca81613fa5565b935060ff16815181106116df576116df613e96565b60200260200101819052506117018560e00151602001516121c060201b60201c565b828261170c81613fa5565b935060ff168151811061172157611721613e96565b60200260200101819052505b60e085015160400151156117ce5760408051808201909152600e81526d2d2d6d617846656550657247617360901b6020820152828261176b81613fa5565b935060ff168151811061178057611780613e96565b60200260200101819052506117a28560e00151604001516121c060201b60201c565b82826117ad81613fa5565b935060ff16815181106117c2576117c2613e96565b60200260200101819052505b60e0850151606001511561187e5760408051808201909152601681527f2d2d6d61785072696f72697479466565506572476173000000000000000000006020820152828261181b81613fa5565b935060ff168151811061183057611830613e96565b60200260200101819052506118528560e00151606001516121c060201b60201c565b828261185d81613fa5565b935060ff168151811061187257611872613e96565b60200260200101819052505b60008160ff166001600160401b0381111561189b5761189b6139ea565b6040519080825280602002602001820160405280156118ce57816020015b60608152602001906001900390816118b95790505b50905060005b8260ff168160ff16101561192757838160ff16815181106118f7576118f7613e96565b6020026020010151828260ff168151811061191457611914613e96565b60209081029190910101526001016118d4565b5093505050505b949350505050565b61195d6040518060600160405280600060030b815260200160608152602001606081525090565b6040805180820182526004808252630c4c2e6d60e31b602083015291516334515cdb60e21b8152600080516020616b3783398151915292600091849163d145736c916119ab9186910161401b565b600060405180830381865afa1580156119c8573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526119f09190810190613bdd565b905060006119fe8683612908565b90506000846001600160a01b031663f45c1ce7836040518263ffffffff1660e01b8152600401611a2e9190614062565b6000604051808303816000875af1158015611a4d573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611a7591908101906140c7565b805190915060030b15801590611a8e5750602081015151155b8015611a9d5750604081015151155b15610cb05781600081518110611ab557611ab5613e96565b602002602001015160405160200161046f919061417a565b60606000611b028560408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600080825260209182015281518083019092528651825280870190820152909150611b399082905b90612a42565b15611c36576000611bb682611bb081611baa611b7c8a60408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6040805180820182526000808252602091820152815180830190925282518252918201519181019190915290565b90612a69565b90612ac6565b9050611bea611be3604051806040016040528060018152602001600560f91b81525061213260201b60201c565b8290612a42565b15611c2457611c21611c1a604051806040016040528060018152602001600560f91b81525061213260201b60201c565b8290612b4b565b90505b611c2d81612b71565b9250505061038a565b8215611c4f57848460405160200161046f92919061434a565b505060408051602081019091526000815261038a565b509392505050565b6000808251602084016000f09392505050565b8160a0015115611c8f57505050565b6000611c9c848484612bd6565b90506000611ca982611936565b602081015181519192509060030b158015611d1c5750611d1c611cf0604051806040016040528060078152602001665355434345535360c81b81525061213260201b60201c565b604080518082018252600080825260209182015281518083019092528451825280850190820152611b33565b15611d2957505050505050565b60408201515115611d4957816040015160405160200161046f91906143c5565b8060405160200161046f919061440f565b60606000611d8f8360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b9050611dc6611dbf604051806040016040528060048152602001630b9cdbdb60e21b81525061213260201b60201c565b829061215f565b15611e085761038a611e03611dfc604051806040016040528060048152602001630b9cdbdb60e21b81525061213260201b60201c565b83906130e9565b612b71565b611e3a611e33604051806040016040528060018152602001601d60f91b81525061213260201b60201c565b8290613173565b600103611ea257611e6c611c1a604051806040016040528060018152602001601d60f91b81525061213260201b60201c565b5061038a611e03611e9b604051806040016040528060018152602001601d60f91b81525061213260201b60201c565b8390612b4b565b611ed1611dbf60405180604001604052806005815260200164173539b7b760d91b81525061213260201b60201c565b15611f9e576000611f0982611f04604051806040016040528060018152602001602f60f81b81525061213260201b60201c565b613208565b905060008160018351611f1c919061445f565b81518110611f2c57611f2c613e96565b60200260200101519050611f95611e03611f6860405180604001604052806005815260200164173539b7b760d91b81525061213260201b60201c565b604080518082018252600080825260209182015281518083019092528551825280860190820152906130e9565b95945050505050565b8260405160200161046f9190614472565b60606000611fe48360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b9050612014611dbf604051806040016040528060048152602001630b9cdbdb60e21b81525061213260201b60201c565b156120225761038a81612b71565b61204d611e33604051806040016040528060018152602001601d60f91b81525061213260201b60201c565b6001036120825761038a611e03611e9b604051806040016040528060018152602001601d60f91b81525061213260201b60201c565b6120b1611dbf60405180604001604052806005815260200164173539b7b760d91b81525061213260201b60201c565b15611f9e5760006120e482611f04604051806040016040528060018152602001602f60f81b81525061213260201b60201c565b90506001815111156121205780600282516120ff919061445f565b8151811061210f5761210f613e96565b602002602001015192505050919050565b508260405160200161046f9190614472565b60408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b8051825160009111156121745750600061027c565b8151835160208501516000929161218a9161452c565b612194919061445f565b9050826020015181036121ab57600191505061027c565b82516020840151819020912014905092915050565b606060006121cd836132ac565b60010190506000816001600160401b038111156121ec576121ec6139ea565b6040519080825280601f01601f191660200182016040528015612216576020820181803683370190505b5090508181016020015b600019016f181899199a1a9b1b9c1cb0b131b232b360811b600a86061a8153600a850494508461222057509392505050565b60606000612269836040015161213260201b60201c565b90506122a661229f6040518060400160405280600a8152602001691553931250d15394d15160b21b81525061213260201b60201c565b829061338e565b156122cd5750506040805180820190915260048152634e6f6e6560e01b6020820152919050565b61230061229f60405180604001604052806009815260200168556e6c6963656e736560b81b81525061213260201b60201c565b1561232c575050604080518082019091526009815268556e6c6963656e736560b81b6020820152919050565b61235961229f6040518060400160405280600381526020016213525560ea1b81525061213260201b60201c565b1561237f57505060408051808201909152600381526213525560ea1b6020820152919050565b6123b561229f6040518060400160405280600c81526020016b47504c2d322e302d6f6e6c7960a01b81525061213260201b60201c565b806123f557506123f561229f6040518060400160405280601081526020016f23a8261699171816b7b916b630ba32b960811b81525061213260201b60201c565b1561242157505060408051808201909152600981526823a72a9023a8263b1960b91b6020820152919050565b61245761229f6040518060400160405280600c81526020016b47504c2d332e302d6f6e6c7960a01b81525061213260201b60201c565b80612497575061249761229f6040518060400160405280601081526020016f23a8261699971816b7b916b630ba32b960811b81525061213260201b60201c565b156124c3575050604080518082019091526009815268474e552047504c763360b81b6020820152919050565b6124fa61229f6040518060400160405280600d81526020016c4c47504c2d322e312d6f6e6c7960981b81525061213260201b60201c565b8061253b575061253b61229f604051806040016040528060118152602001702623a8261699171896b7b916b630ba32b960791b81525061213260201b60201c565b1561256a57505060408051808201909152600c81526b474e55204c47504c76322e3160a01b6020820152919050565b6125a161229f6040518060400160405280600d81526020016c4c47504c2d332e302d6f6e6c7960981b81525061213260201b60201c565b806125e257506125e261229f604051806040016040528060118152602001702623a8261699971816b7b916b630ba32b960791b81525061213260201b60201c565b1561260f57505060408051808201909152600a815269474e55204c47504c763360b01b6020820152919050565b61264561229f6040518060400160405280600c81526020016b4253442d322d436c6175736560a01b81525061213260201b60201c565b1561267457505060408051808201909152600c81526b4253442d322d436c6175736560a01b6020820152919050565b6126aa61229f6040518060400160405280600c81526020016b4253442d332d436c6175736560a01b81525061213260201b60201c565b156126d957505060408051808201909152600c81526b4253442d332d436c6175736560a01b6020820152919050565b61270a61229f6040518060400160405280600781526020016604d504c2d322e360cc1b81525061213260201b60201c565b1561273457505060408051808201909152600781526604d504c2d322e360cc1b6020820152919050565b61276561229f6040518060400160405280600781526020016604f534c2d332e360cc1b81525061213260201b60201c565b1561278f57505060408051808201909152600781526604f534c2d332e360cc1b6020820152919050565b6127c361229f6040518060400160405280600a81526020016904170616368652d322e360b41b81525061213260201b60201c565b156127f057505060408051808201909152600a81526904170616368652d322e360b41b6020820152919050565b61282761229f6040518060400160405280600d81526020016c4147504c2d332e302d6f6e6c7960981b81525061213260201b60201c565b80612868575061286861229f6040518060400160405280601181526020017020a3a8261699971816b7b916b630ba32b960791b81525061213260201b60201c565b1561289557505060408051808201909152600a815269474e55204147504c763360b01b6020820152919050565b6128c761229f604051806040016040528060088152602001674255534c2d312e3160c01b81525061213260201b60201c565b156128f157505060408051808201909152600781526642534c20312e3160c81b6020820152919050565b6040808401518451915161046f929060200161453f565b60608060005b8451811015612993578185828151811061292a5761292a613e96565b6020026020010151604051602001612943929190613aea565b604051602081830303815290604052915060018551612962919061445f565b811461298b5781604051602001612979919061468f565b60405160208183030381529060405291505b60010161290e565b5060408051600380825260808201909252600091816020015b60608152602001906001900390816129ac57905050905083816000815181106129d7576129d7613e96565b6020026020010181905250604051806040016040528060028152602001612d6360f01b81525081600181518110612a1057612a10613e96565b60200260200101819052508181600281518110612a2f57612a2f613e96565b6020908102919091010152949350505050565b6020808301518351835192840151600093612a6092918491906133a2565b14159392505050565b6040805180820190915260008082526020808301829052845185820151855192860151612a9693906134b3565b9050836020015181612aa8919061445f565b84518590612ab790839061445f565b90525060208401525090919050565b6040805180820190915260008082526020820152815183511015612aeb57508161027c565b6020808301519084015160019114612b125750815160208481015190840151829020919020145b8015612b4357825184518590612b2990839061445f565b9052508251602085018051612b3f90839061452c565b9052505b509192915050565b6040805180820190915260008082526020820152612b6a8383836135d3565b5092915050565b6060600082600001516001600160401b03811115612b9157612b916139ea565b6040519080825280601f01601f191660200182016040528015612bbb576020820181803683370190505b50602084810151855192935090830191612b6a918391613679565b60606000612be2610648565b6040805160ff808252612000820190925291925060009190816020015b6060815260200190600190039081612bff5790505090506000604051806040016040528060038152602001620dce0f60eb1b815250828280612c4090613fa5565b935060ff1681518110612c5557612c55613e96565b6020026020010181905250604051806040016040528060078152602001665e312e33322e3360c81b815250604051602001612c9091906146b4565b604051602081830303815290604052828280612cab90613fa5565b935060ff1681518110612cc057612cc0613e96565b60200260200101819052506040518060400160405280600881526020016776616c696461746560c01b815250828280612cf890613fa5565b935060ff1681518110612d0d57612d0d613e96565b602002602001018190525082604051602001612d299190613ee1565b604051602081830303815290604052828280612d4490613fa5565b935060ff1681518110612d5957612d59613e96565b60200260200101819052506040518060400160405280600a8152602001690b4b58dbdb9d1c9858dd60b21b815250828280612d9390613fa5565b935060ff1681518110612da857612da8613e96565b6020908102919091010152612dbd87846136f3565b8282612dc881613fa5565b935060ff1681518110612ddd57612ddd613e96565b602090810291909101015285515115612e755760408051808201909152600b81526a2d2d7265666572656e636560a81b60208201528282612e1d81613fa5565b935060ff1681518110612e3257612e32613e96565b60209081029190910101528551612e4990846136f3565b8282612e5481613fa5565b935060ff1681518110612e6957612e69613e96565b60200260200101819052505b856080015115612ee35760408051808201909152601881527f2d2d756e73616665536b697053746f72616765436865636b000000000000000060208201528282612ebe81613fa5565b935060ff1681518110612ed357612ed3613e96565b6020026020010181905250612f3e565b8415612f3e576040805180820190915260128152712d2d726571756972655265666572656e636560701b60208201528282612f1d81613fa5565b935060ff1681518110612f3257612f32613e96565b60200260200101819052505b60408601515115612fca5760408051808201909152600d81526c2d2d756e73616665416c6c6f7760981b60208201528282612f7881613fa5565b935060ff1681518110612f8d57612f8d613e96565b60200260200101819052508560400151828280612fa990613fa5565b935060ff1681518110612fbe57612fbe613e96565b60200260200101819052505b8560600151156130345760408051808201909152601481527f2d2d756e73616665416c6c6f7752656e616d65730000000000000000000000006020820152828261301381613fa5565b935060ff168151811061302857613028613e96565b60200260200101819052505b60008160ff166001600160401b03811115613051576130516139ea565b60405190808252806020026020018201604052801561308457816020015b606081526020019060019003908161306f5790505b50905060005b8260ff168160ff1610156130dd57838160ff16815181106130ad576130ad613e96565b6020026020010151828260ff16815181106130ca576130ca613e96565b602090810291909101015260010161308a565b50979650505050505050565b604080518082019091526000808252602082015281518351101561310e57508161027c565b815183516020850151600092916131249161452c565b61312e919061445f565b6020840151909150600190821461314f575082516020840151819020908220145b801561316a5783518551869061316690839061445f565b9052505b50929392505050565b8051825160208085015190840151600093849390926131939284906134b3565b61319d919061452c565b90505b835160208501516131b1919061452c565b8111612b6a57816131c1816146f9565b92505082600001516131f78560200151836131dc919061445f565b86516131e8919061445f565b855160208701518591906134b3565b613201919061452c565b90506131a0565b606060006132168484613173565b61322190600161452c565b6001600160401b03811115613238576132386139ea565b60405190808252806020026020018201604052801561326b57816020015b60608152602001906001900390816132565790505b50905060005b8151811015611c6557613287611e038686612b4b565b82828151811061329957613299613e96565b6020908102919091010152600101613271565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f01000000000000000083106132f5577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310613321576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc10000831061333f57662386f26fc10000830492506010015b6305f5e1008310613357576305f5e100830492506008015b612710831061336b57612710830492506004015b6064831061337d576064830492506002015b600a831061027c5760010192915050565b600061339a8383613733565b159392505050565b6000808584116134a9576020841161345557600084156133ed5760016133c986602061445f565b6133d4906008614712565b6133df906002614810565b6133e9919061445f565b1990505b83518116856133fc898961452c565b613406919061445f565b805190935082165b81811461344057878411613428578794505050505061192e565b836134328161481c565b94505082845116905061340e565b61344a878561452c565b94505050505061192e565b838320613462858861445f565b61346c908761452c565b91505b8582106134a7578482208082036134945761348a868461452c565b935050505061192e565b61349f60018461445f565b92505061346f565b505b5092949350505050565b600083818685116135be576020851161356d57600085156134ff5760016134db87602061445f565b6134e6906008614712565b6134f1906002614810565b6134fb919061445f565b1990505b845181166000876135108b8b61452c565b61351a919061445f565b855190915083165b82811461355f578186106135475761353a8b8b61452c565b965050505050505061192e565b85613551816146f9565b965050838651169050613522565b85965050505050505061192e565b508383206000905b61357f868961445f565b82116135bc5785832080820361359b578394505050505061192e565b6135a660018561452c565b93505081806135b4906146f9565b925050613575565b505b6135c8878761452c565b979650505050505050565b604080518082019091526000808252602080830182905285518682015186519287015161360093906134b3565b60208087018051918601919091525190915061361c908261445f565b83528451602086015161362f919061452c565b810361363e5760008552613670565b8351835161364c919061452c565b8551869061365b90839061445f565b905250835161366a908261452c565b60208601525b50909392505050565b602081106136b1578151835261369060208461452c565b925061369d60208361452c565b91506136aa60208261445f565b9050613679565b60001981156136e05760016136c783602061445f565b6136d390610100614810565b6136dd919061445f565b90505b9151835183169219169190911790915250565b6060600061370184846106e2565b805160208083015160405193945061371b93909101614833565b60405160208183030381529060405291505092915050565b8151815160009190811115613746575081515b6020808501519084015160005b838110156137ff57825182518082146137cf5760001960208710156137ae5760018461378089602061445f565b61378a919061452c565b613795906008614712565b6137a0906002614810565b6137aa919061445f565b1990505b81811683821681810391146137cc57975061027c9650505050505050565b50505b6137da60208661452c565b94506137e760208561452c565b935050506020816137f8919061452c565b9050613753565b5084518651610cb0919061486f565b610c9f80615e9883390190565b6040518060e0016040528060608152602001606081526020016060815260200160001515815260200160001515815260200160001515815260200161385e613863565b905290565b6040518061010001604052806000151581526020016000151581526020016060815260200160008019168152602001606081526020016060815260200160001515815260200161385e6040518060800160405280600081526020016000815260200160008152602001600081525090565b60005b838110156138ef5781810151838201526020016138d7565b50506000910152565b600081518084526139108160208601602086016138d4565b601f01601f19169290920160200192915050565b6001600160a01b038316815260406020820181905260009061192e908301846138f8565b7f4661696c656420746f206465706c6f7920636f6e74726163742000000000000081526000835161398081601a8501602088016138d4565b6101d160f51b601a9184019182015283516139a281601c8401602088016138d4565b01601c01949350505050565b60208152600061038a60208301846138f8565b6000602082840312156139d357600080fd5b81516001600160a01b038116811461038a57600080fd5b634e487b7160e01b600052604160045260246000fd5b604051606081016001600160401b0381118282101715613a2257613a226139ea565b60405290565b6000806001600160401b03841115613a4257613a426139ea565b50604051601f19601f85018116603f011681018181106001600160401b0382111715613a7057613a706139ea565b604052838152905080828401851015613a8857600080fd5b611c658460208301856138d4565b600082601f830112613aa757600080fd5b61038a83835160208501613a28565b600060208284031215613ac857600080fd5b81516001600160401b03811115613ade57600080fd5b61027884828501613a96565b60008351613afc8184602088016138d4565b835190830190613b108183602088016138d4565b01949350505050565b7f4661696c656420746f206465706c6f7920636f6e747261637420000000000000815260008351613b5181601a8501602088016138d4565b7f207573696e6720636f6e7374727563746f722064617461202200000000000000601a918401918201528351613b8e8160338401602088016138d4565b601160f91b60339290910191820152603401949350505050565b60408152600b60408201526a1193d55391149657d3d55560aa1b606082015260806020820152600061038a60808301846138f8565b600060208284031215613bef57600080fd5b81516001600160401b03811115613c0557600080fd5b8201601f81018413613c1657600080fd5b61027884825160208401613a28565b60008551613c37818460208a016138d4565b602f60f81b9083019081528551613c55816001840160208a016138d4565b602f60f81b600192909101918201528451613c778160028401602089016138d4565b600181830101915050602f60f81b60018201528351613c9d8160028401602088016138d4565b64173539b7b760d91b600292909101918201526007019695505050505050565b604081526000613cd060408301846138f8565b828103602084015260048152630b985cdd60e21b60208201526040810191505092915050565b600060208284031215613d0857600080fd5b8151801515811461038a57600080fd5b7f436f756c64206e6f742066696e642041535420696e2061727469666163742000815260008251613d5081601f8501602087016138d4565b7f2e205365742060617374203d20747275656020696e20666f756e6472792e746f601f939091019283015250611b5b60f21b603f820152604101919050565b604081526000613da260408301846138f8565b8281036020840152601181527005cc2e6e85cc2c4e6ded8eae8caa0c2e8d607b1b60208201526040810191505092915050565b604081526000613de860408301846138f8565b8281036020840152600c81526b2e6173742e6c6963656e736560a01b60208201526040810191505092915050565b7f2e6d657461646174612e736f75726365732e5b27000000000000000000000000815260008251613e4e8160148501602087016138d4565b6b13ae9735b2b1b1b0b5991a9b60a11b6014939091019283015250602001919050565b604081526000613e8460408301856138f8565b828103602084015261038681856138f8565b634e487b7160e01b600052603260045260246000fd5b601160f91b81528151600090613ec98160018501602087016138d4565b601160f91b6001939091019283015250600201919050565b60008251613ef38184602087016138d4565b6a2f6275696c642d696e666f60a81b920191825250600b01919050565b7f436f756c64206e6f742066696e64206275696c642d696e666f2066696c65207781527f697468206d61746368696e6720736f7572636520636f6465206861736820666f60208201526a0391031b7b73a3930b1ba160ad1b604082015260008251613f8281604b8501602087016138d4565b91909101604b0192915050565b634e487b7160e01b600052601160045260246000fd5b600060ff821660ff8103613fbb57613fbb613f8f565b60010192915050565b7f406f70656e7a657070656c696e2f646566656e6465722d6465706c6f792d636c81526801a595b9d0b58db1a560be1b60208201526000825161400e8160298501602087016138d4565b9190910160290192915050565b60408152601660408201527f4f50454e5a455050454c494e5f424153485f5041544800000000000000000000606082015260806020820152600061038a60808301846138f8565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b828110156140bb57603f198786030184526140a68583516138f8565b9450602093840193919091019060010161408a565b50929695505050505050565b6000602082840312156140d957600080fd5b81516001600160401b038111156140ef57600080fd5b82016060818503121561410157600080fd5b614109613a00565b81518060030b811461411a57600080fd5b815260208201516001600160401b0381111561413557600080fd5b61414186828501613a96565b60208301525060408201516001600160401b0381111561416057600080fd5b61416c86828501613a96565b604083015250949350505050565b7f4661696c656420746f2072756e206261736820636f6d6d616e642077697468208152601160f91b6020820152600082516141bc8160218501602087016138d4565b7f222e20496620796f7520617265207573696e672057696e646f77732c2073657460219390910192830152507f20746865204f50454e5a455050454c494e5f424153485f5041544820656e766960418201527f726f6e6d656e74207661726961626c6520746f207468652066756c6c7920717560618201527f616c69666965642070617468206f66207468652062617368206578656375746160818201527f626c652e20466f72206578616d706c652c20696620796f75206172652075736960a18201527f6e672047697420666f722057696e646f77732c206164642074686520666f6c6c60c18201527f6f77696e67206c696e6520696e20746865202e656e762066696c65206f66207960e18201527f6f75722070726f6a65637420287573696e6720666f727761726420736c6173686101018201527f6573293a0a4f50454e5a455050454c494e5f424153485f504154483d22433a2f6101218201527f50726f6772616d2046696c65732f4769742f62696e2f6261736822000000000061014182015261015c01919050565b7f4661696c656420746f2066696e64206c696e65207769746820707265666978208152602760f81b60208201526000835161438c8160218501602088016138d4565b6c0139034b71037baba383aba1d1609d1b60219184019182015283516143b981602e8401602088016138d4565b01602e01949350505050565b7f4661696c656420746f2072756e2075706772616465207361666574792076616c815268034b230ba34b7b71d160bd1b60208201526000825161400e8160298501602087016138d4565b7f55706772616465207361666574792076616c69646174696f6e206661696c65648152611d0560f11b6020820152600082516144528160228501602087016138d4565b9190910160220192915050565b8181038181111561027c5761027c613f8f565b6d021b7b73a3930b1ba103730b6b2960951b81526000825161449b81600e8501602087016138d4565b7f206d75737420626520696e2074686520666f726d6174204d79436f6e74726163600e9390910192830152507f742e736f6c3a4d79436f6e7472616374206f72204d79436f6e74726163742e73602e8201527f6f6c206f72206f75742f4d79436f6e74726163742e736f6c2f4d79436f6e7472604e8201526730b1ba173539b7b760c11b606e820152607601919050565b8082018082111561027c5761027c613f8f565b7f53504458206c6963656e7365206964656e7469666965722000000000000000008152600083516145778160188501602088016138d4565b6301034b7160e51b601891840191820152835161459b81601c8401602088016138d4565b7f20646f6573206e6f74206c6f6f6b206c696b65206120737570706f7274656420601c92909101918201527f6c6963656e736520666f7220626c6f636b206578706c6f726572207665726966603c8201527f69636174696f6e2e205573652074686520606c6963656e73655479706560206f605c8201527f7074696f6e20746f20737065636966792061206c6963656e736520747970652c607c8201527f206f7220736574207468652060736b69704c6963656e73655479706560206f70609c8201527f74696f6e20746f2060747275656020746f20736b69702e00000000000000000060bc82015260d301949350505050565b600082516146a18184602087016138d4565b600160fd1b920191825250600101919050565b7f406f70656e7a657070656c696e2f75706772616465732d636f726540000000008152600082516146ec81601c8501602087016138d4565b91909101601c0192915050565b60006001820161470b5761470b613f8f565b5060010190565b808202811582820484141761027c5761027c613f8f565b6001815b60018411156147645780850481111561474857614748613f8f565b600184161561475657908102905b60019390931c92800261472d565b935093915050565b60008261477b5750600161027c565b816147885750600061027c565b816001811461479e57600281146147a8576147c4565b600191505061027c565b60ff8411156147b9576147b9613f8f565b50506001821b61027c565b5060208310610133831016604e8410600b84101617156147e7575081810a61027c565b6147f46000198484614729565b806000190482111561480857614808613f8f565b029392505050565b600061038a838361476c565b60008161482b5761482b613f8f565b506000190190565b600083516148458184602088016138d4565b601d60f91b90830190815283516148638160018401602088016138d4565b01600101949350505050565b8181036000831280158383131683831282161715612b6a57612b6a613f8f565b6080516115cb6148cd600039600081816101830152818161046e015281816104d00152818161083f0152818161094e01526109b001526115cb6000f3fe608060405234801561001057600080fd5b50600436106101515760003560e01c80636133b4bb116100cd578063a217fddf11610081578063d547741f11610066578063d547741f14610332578063d9caed1214610345578063e63ab1e91461035857600080fd5b8063a217fddf14610317578063c8a023621461031f57600080fd5b80638456cb59116100b25780638456cb59146102a257806385f438c1146102aa57806391d14854146102d157600080fd5b80636133b4bb1461026f57806381100bf01461028257600080fd5b80632f2ff15d116101245780633c2f05a8116101095780633c2f05a8146102375780633f4ba83a1461025c5780635c975abb1461026457600080fd5b80632f2ff15d1461021157806336568abe1461022457600080fd5b806301ffc9a714610156578063116191b61461017e57806321fc65f2146101ca578063248a9ca3146101df575b600080fd5b6101696101643660046111fa565b61037f565b60405190151581526020015b60405180910390f35b6101a57f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610175565b6101dd6101d83660046112ae565b610418565b005b6102036101ed36600461131d565b6000908152600160208190526040909120015490565b604051908152602001610175565b6101dd61021f366004611336565b6105ba565b6101dd610232366004611336565b6105e6565b6002546101a590610100900473ffffffffffffffffffffffffffffffffffffffff1681565b6101dd610644565b60025460ff16610169565b6101dd61027d366004611362565b610679565b6003546101a59073ffffffffffffffffffffffffffffffffffffffff1681565b6101dd6108c6565b6102037f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b6101696102df366004611336565b600091825260016020908152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b610203600081565b6101dd61032d3660046112ae565b6108f8565b6101dd610340366004611336565b610a80565b6101dd6103533660046113bc565b610aa6565b6102037f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061041257507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b610420610b73565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461044a81610bb6565b610452610bc0565b61049373ffffffffffffffffffffffffffffffffffffffff87167f000000000000000000000000000000000000000000000000000000000000000086610bff565b6040517f5131ab5900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690635131ab599061050d9089908990899089908990600401611442565b600060405180830381600087803b15801561052757600080fd5b505af115801561053b573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167f85b5be9cf454e05e0bddf49315178102227c312078eefa3c00294fb4d912ae4e8686866040516105a09392919061149f565b60405180910390a3506105b36001600055565b5050505050565b600082815260016020819052604090912001546105d681610bb6565b6105e08383610c8c565b50505050565b73ffffffffffffffffffffffffffffffffffffffff81163314610635576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61063f8282610d57565b505050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61066e81610bb6565b610676610e16565b50565b600254610100900473ffffffffffffffffffffffffffffffffffffffff166340c10f19306106a88660056114c2565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815273ffffffffffffffffffffffffffffffffffffffff90921660048301526024820152604401600060405180830381600087803b15801561071357600080fd5b505af1158015610727573d6000803e3d6000fd5b5050600254600580546040517fa9059cbb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff91821660048201526024810192909252610100909204909116925063a9059cbb91506044016020604051808303816000875af11580156107af573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107d391906114fc565b506002546107ff90610100900473ffffffffffffffffffffffffffffffffffffffff1685858585610418565b6002546040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000081166004830152610100909204909116906370a0823190602401602060405180830381865afa158015610895573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108b9919061151e565b156105e0576105e0611537565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a6108f081610bb6565b610676610e93565b610900610b73565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461092a81610bb6565b610932610bc0565b61097373ffffffffffffffffffffffffffffffffffffffff87167f000000000000000000000000000000000000000000000000000000000000000086610bff565b6040517fb8969bd400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063b8969bd4906109ed9089908990899089908990600401611442565b600060405180830381600087803b158015610a0757600080fd5b505af1158015610a1b573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fb9d4efa96044e5f5e03e696fa9ae2ff66911cc27e8a637c3627c75bc5b2241c88686866040516105a09392919061149f565b60008281526001602081905260409091200154610a9c81610bb6565b6105e08383610d57565b610aae610b73565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e4610ad881610bb6565b610ae0610bc0565b610b0173ffffffffffffffffffffffffffffffffffffffff85168484610bff565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f9b1bfa7fa9ee420a16e124f794c35ac9f90472acc99140eb2f6447c714cad8eb84604051610b6091815260200190565b60405180910390a35061063f6001600055565b600260005403610baf576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b6106768133610eee565b60025460ff1615610bfd576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6040805173ffffffffffffffffffffffffffffffffffffffff8416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb0000000000000000000000000000000000000000000000000000000017905261063f908490610f7f565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff16610d4f57600083815260016020818152604080842073ffffffffffffffffffffffffffffffffffffffff8716808652925280842080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a4506001610412565b506000610412565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff1615610d4f57600083815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8616808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a4506001610412565b610e1e611015565b600280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b610e9b610bc0565b600280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258610e693390565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16610f7b576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82166004820152602481018390526044015b60405180910390fd5b5050565b6000610fa173ffffffffffffffffffffffffffffffffffffffff841683611051565b90508051600014158015610fc6575080806020019051810190610fc491906114fc565b155b1561063f576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84166004820152602401610f72565b60025460ff16610bfd576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606061105f83836000611066565b9392505050565b6060814710156110a4576040517fcd786059000000000000000000000000000000000000000000000000000000008152306004820152602401610f72565b6000808573ffffffffffffffffffffffffffffffffffffffff1684866040516110cd9190611566565b60006040518083038185875af1925050503d806000811461110a576040519150601f19603f3d011682016040523d82523d6000602084013e61110f565b606091505b509150915061111f868383611129565b9695505050505050565b60608261113e57611139826111b8565b61105f565b8151158015611162575073ffffffffffffffffffffffffffffffffffffffff84163b155b156111b1576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85166004820152602401610f72565b508061105f565b8051156111c85780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006020828403121561120c57600080fd5b81357fffffffff000000000000000000000000000000000000000000000000000000008116811461105f57600080fd5b803573ffffffffffffffffffffffffffffffffffffffff8116811461126057600080fd5b919050565b60008083601f84011261127757600080fd5b50813567ffffffffffffffff81111561128f57600080fd5b6020830191508360208285010111156112a757600080fd5b9250929050565b6000806000806000608086880312156112c657600080fd5b6112cf8661123c565b94506112dd6020870161123c565b935060408601359250606086013567ffffffffffffffff81111561130057600080fd5b61130c88828901611265565b969995985093965092949392505050565b60006020828403121561132f57600080fd5b5035919050565b6000806040838503121561134957600080fd5b823591506113596020840161123c565b90509250929050565b6000806000806060858703121561137857600080fd5b6113818561123c565b935060208501359250604085013567ffffffffffffffff8111156113a457600080fd5b6113b087828801611265565b95989497509550505050565b6000806000606084860312156113d157600080fd5b6113da8461123c565b92506113e86020850161123c565b929592945050506040919091013590565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff8616815273ffffffffffffffffffffffffffffffffffffffff851660208201528360408201526080606082015260006114946080830184866113f9565b979650505050505050565b8381526040602082015260006114b96040830184866113f9565b95945050505050565b80820180821115610412577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006020828403121561150e57600080fd5b8151801515811461105f57600080fd5b60006020828403121561153057600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b6000825160005b81811015611587576020818601810151858301520161156d565b50600092019182525091905056fea2646970667358221220104b616cf3a4de8de20ce232b02a085284cb46a03acd1d5e4082d88a9d59181064736f6c634300081a0033608060405234801561001057600080fd5b50604051610c9f380380610c9f83398101604081905261002f9161010d565b8181600361003d83826101ff565b50600461004a82826101ff565b50505050506102bd565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261007b57600080fd5b81516001600160401b0381111561009457610094610054565b604051601f8201601f19908116603f011681016001600160401b03811182821017156100c2576100c2610054565b6040528181528382016020018510156100da57600080fd5b60005b828110156100f9576020818601810151838301820152016100dd565b506000918101602001919091529392505050565b6000806040838503121561012057600080fd5b82516001600160401b0381111561013657600080fd5b6101428582860161006a565b602085015190935090506001600160401b0381111561016057600080fd5b61016c8582860161006a565b9150509250929050565b600181811c9082168061018a57607f821691505b6020821081036101aa57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156101fa57806000526020600020601f840160051c810160208510156101d75750805b601f840160051c820191505b818110156101f757600081556001016101e3565b50505b505050565b81516001600160401b0381111561021857610218610054565b61022c816102268454610176565b846101b0565b6020601f82116001811461026057600083156102485750848201515b600019600385901b1c1916600184901b1784556101f7565b600084815260208120601f198516915b828110156102905787850151825560209485019460019092019101610270565b50848210156102ae5786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b6109d3806102cc6000396000f3fe608060405234801561001057600080fd5b50600436106100be5760003560e01c806340c10f191161007657806395d89b411161005b57806395d89b4114610183578063a9059cbb1461018b578063dd62ed3e1461019e57600080fd5b806340c10f191461013857806370a082311461014d57600080fd5b806318160ddd116100a757806318160ddd1461010457806323b872dd14610116578063313ce5671461012957600080fd5b806306fdde03146100c3578063095ea7b3146100e1575b600080fd5b6100cb6101e4565b6040516100d891906107bf565b60405180910390f35b6100f46100ef366004610854565b610276565b60405190151581526020016100d8565b6002545b6040519081526020016100d8565b6100f461012436600461087e565b610290565b604051601281526020016100d8565b61014b610146366004610854565b6102b4565b005b61010861015b3660046108bb565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6100cb6102c2565b6100f4610199366004610854565b6102d1565b6101086101ac3660046108dd565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6060600380546101f390610910565b80601f016020809104026020016040519081016040528092919081815260200182805461021f90610910565b801561026c5780601f106102415761010080835404028352916020019161026c565b820191906000526020600020905b81548152906001019060200180831161024f57829003601f168201915b5050505050905090565b6000336102848185856102df565b60019150505b92915050565b60003361029e8582856102f1565b6102a98585856103c5565b506001949350505050565b6102be8282610470565b5050565b6060600480546101f390610910565b6000336102848185856103c5565b6102ec83838360016104cc565b505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146103bf57818110156103b0576040517ffb8f41b200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416600482015260248101829052604481018390526064015b60405180910390fd5b6103bf848484840360006104cc565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8316610415576040517f96c6fd1e000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff8216610465576040517fec442f05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b6102ec838383610614565b73ffffffffffffffffffffffffffffffffffffffff82166104c0576040517fec442f05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b6102be60008383610614565b73ffffffffffffffffffffffffffffffffffffffff841661051c576040517fe602df05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff831661056c576040517f94280d62000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260016020908152604080832093871683529290522082905580156103bf578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161060691815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff831661064c5780600260008282546106419190610963565b909155506106fe9050565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260208190526040902054818110156106d2576040517fe450d38c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8516600482015260248101829052604481018390526064016103a7565b73ffffffffffffffffffffffffffffffffffffffff841660009081526020819052604090209082900390555b73ffffffffffffffffffffffffffffffffffffffff821661072757600280548290039055610753565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090208054820190555b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516107b291815260200190565b60405180910390a3505050565b602081526000825180602084015260005b818110156107ed57602081860181015160408684010152016107d0565b5060006040828501015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011684010191505092915050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461084f57600080fd5b919050565b6000806040838503121561086757600080fd5b6108708361082b565b946020939093013593505050565b60008060006060848603121561089357600080fd5b61089c8461082b565b92506108aa6020850161082b565b929592945050506040919091013590565b6000602082840312156108cd57600080fd5b6108d68261082b565b9392505050565b600080604083850312156108f057600080fd5b6108f98361082b565b91506109076020840161082b565b90509250929050565b600181811c9082168061092457607f821691505b60208210810361095d577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b8082018082111561028a577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea26469706673582212207e804ca539d49155d2b6bc19268ce22f9f857027c75247d69fb0d56a089c93d464736f6c634300081a00330000000000000000000000007109709ecfa91a80626ff3989d68f67f5b1dd12d54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f7420", + ABI: "[{\"type\":\"constructor\",\"inputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"DEFAULT_ADMIN_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"PAUSER_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"WHITELISTER_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"WITHDRAWER_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"echidnaCaller\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"gateway\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIGatewayEVM\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getRoleAdmin\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"grantRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"hasRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"pause\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"paused\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"renounceRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"callerConfirmation\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"revokeRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"supportsInterface\",\"inputs\":[{\"name\":\"interfaceId\",\"type\":\"bytes4\",\"internalType\":\"bytes4\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"testERC20\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractTestERC20\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"testWithdrawAndCall\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"unpause\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"unwhitelist\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"whitelist\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"whitelisted\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"withdraw\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"withdrawAndCall\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"withdrawAndRevert\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"event\",\"name\":\"Paused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleAdminChanged\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"previousAdminRole\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"newAdminRole\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleGranted\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleRevoked\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Unpaused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Unwhitelisted\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Whitelisted\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Withdraw\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"WithdrawAndCall\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"WithdrawAndRevert\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"AccessControlBadConfirmation\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"AccessControlUnauthorizedAccount\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"neededRole\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"type\":\"error\",\"name\":\"AddressEmptyCode\",\"inputs\":[{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"AddressInsufficientBalance\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"EnforcedPause\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ExpectedPause\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"FailedInnerCall\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NotWhitelisted\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ReentrancyGuardReentrantCall\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"SafeERC20FailedOperation\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"ZeroAddress\",\"inputs\":[]}]", + Bin: "0x600580546001600160a01b03191633908117909155600e60a09081526d11d85d195dd85e5155934b9cdbdb60921b60c0526101049190915261012361012481905261014452606460e090815261016460405261010080516001600160e01b0390811663c0c53b8b60e01b1790915261007992919061029316565b600680546001600160a01b03929092166001600160a01b03199283168117909155600780549092161790553480156100b057600080fd5b5060075460055460016000556002805460ff191690556001600160a01b039182169116808215806100e857506001600160a01b038216155b806100fa57506001600160a01b038116155b156101185760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b0383166080526101306000826102b2565b5061015b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a826102b2565b506101867f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e4836102b2565b5061019f600080516020616dde833981519152826102b2565b506101b8600080516020616dde833981519152836102b2565b505050506040516101c89061383e565b60408082526004908201819052631d195cdd60e21b606083015260806020830181905282015263151154d560e21b60a082015260c001604051809103906000f08015801561021a573d6000803e3d6000fd5b50600480546001600160a01b0319166001600160a01b0392831617815560075460405163ae7a3a6f60e01b815230928101929092529091169063ae7a3a6f90602401600060405180830381600087803b15801561027657600080fd5b505af115801561028a573d6000803e3d6000fd5b505050506148bf565b600061029d61384b565b6102a8848483610345565b9150505b92915050565b60008281526001602090815260408083206001600160a01b038516845290915281205460ff1661033d5760008381526001602081815260408084206001600160a01b0387168086529252808420805460ff19169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45060016102ac565b5060006102ac565b60008061035285846103c1565b90506103b66040518060400160405280601d81526020017f4552433139363750726f78792e736f6c3a4552433139363750726f787900000081525082866040516020016103a0929190613954565b60408051601f19818403018152919052856103cd565b9150505b9392505050565b60006103ba8383610401565b60c081015151600090156103f7576103f084848460c0015161042260201b60201c565b90506103ba565b6103f0848461059b565b600061040d8383610668565b6103ba838360200151846103cd60201b60201c565b60008061042d610678565b9050600061043b8683610712565b905060006104588260600151836020015185610b3560201b60201c565b9050600061046883838989610cea565b9050600061047582611966565b602081015181519192509060030b156104ce5789826040015160405160200161049f929190613978565b60408051601f198184030181529082905262461bcd60e51b82526104c5916004016139de565b60405180910390fd5b60006105176040518060400160405280601581526020017f4465706c6f79656420746f20616464726573733a200000000000000000000000815250836001611afd60201b60201c565b60405163c6ce059d60e01b8152909150600080516020616dbe8339815191529063c6ce059d9061054b9084906004016139de565b602060405180830381865afa158015610568573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061058c91906139f1565b9b9a5050505050505050505050565b604051638d1cc92560e01b81526000908190600080516020616dbe83398151915290638d1cc925906105d19087906004016139de565b600060405180830381865afa1580156105ee573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526106169190810190613ae6565b905060006106458285604051602001610630929190613b1a565b60408051601f19818403018152919052611c9d565b90506001600160a01b0381166102a857848460405160200161049f929190613b49565b61067482826000611cb0565b5050565b60408051808201825260038152621bdd5d60ea1b602082015290516334515cdb60e21b8152606091600080516020616dbe83398151915291829063d145736c906106c6908490600401613bd8565b600060405180830381865afa1580156106e3573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261070b9190810190613c0d565b9250505090565b6107446040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b6000600080516020616dbe83398151915290506107896040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b61079285611d8a565b602082015260006107a286611fdf565b90506000836001600160a01b031663d930a0e66040518163ffffffff1660e01b8152600401600060405180830381865afa1580156107e4573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261080c9190810190613c0d565b868385602001516040516020016108269493929190613c55565b60408051601f19818403018152908290526360f9bb1160e01b825291506000906001600160a01b038616906360f9bb11906108659085906004016139de565b600060405180830381865afa158015610882573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526108aa9190810190613c0d565b604051636da11afb60e11b81529091506001600160a01b0386169063db4235f6906108d9908490600401613ced565b602060405180830381865afa1580156108f6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061091a9190613d26565b61092f578160405160200161049f9190613d48565b6040516309389f5960e31b81526001600160a01b038616906349c4fac89061095b908490600401613dbf565b600060405180830381865afa158015610978573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526109a09190810190613c0d565b8452604051636da11afb60e11b81526001600160a01b0386169063db4235f6906109ce908490600401613e05565b602060405180830381865afa1580156109eb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a0f9190613d26565b15610a8b576040516309389f5960e31b81526001600160a01b038616906349c4fac890610a40908490600401613e05565b600060405180830381865afa158015610a5d573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610a859190810190613c0d565b60408501525b846001600160a01b03166349c4fac8828660000151604051602001610ab09190613e46565b6040516020818303038152906040526040518363ffffffff1660e01b8152600401610adc929190613ea1565b600060405180830381865afa158015610af9573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610b219190810190613c0d565b606085015250608083015250949350505050565b60408051600480825260a0820190925260609160009190816020015b6060815260200190600190039081610b51579050509050604051806040016040528060048152602001630677265760e41b81525081600081518110610b9857610b98613ec6565b6020026020010181905250604051806040016040528060038152602001620b5c9b60ea1b81525081600181518110610bd257610bd2613ec6565b602002602001018190525084604051602001610bee9190613edc565b60405160208183030381529060405281600281518110610c1057610c10613ec6565b602002602001018190525082604051602001610c2c9190613f11565b60405160208183030381529060405281600381518110610c4e57610c4e613ec6565b60209081029190910101526000610c6482611966565b9050600081602001519050610ccb610c9e60405180604001604052806005815260200164173539b7b760d91b81525061216260201b60201c565b6040805180820182526000808252602091820152815180830190925284518252808501908201529061218f565b610ce0578560405160200161049f9190613f40565b9695505050505050565b60a0810151604080518082018252600080825260209182015281518083019092528251808352928101910152606090600080516020616dbe8339815191529015610d34565b511590565b610e5057826020015115610dc45760405162461bcd60e51b81526020600482015260586024820152600080516020616dfe83398151915260448201527f62652075736564207768656e207468652060736b6970566572696679536f757260648201527f6365436f646560206f7074696f6e206973206074727565600000000000000000608482015260a4016104c5565b8260c0015115610e505760405162461bcd60e51b81526020600482015260536024820152600080516020616dfe83398151915260448201527f62652075736564207768656e207468652060736b69704c6963656e736554797060648201527f6560206f7074696f6e2069732060747275656000000000000000000000000000608482015260a4016104c5565b6040805160ff8082526120008201909252600091816020015b6060815260200190600190039081610e695790505090506000604051806040016040528060038152602001620dce0f60eb1b815250828280610eaa90613fd5565b935060ff1681518110610ebf57610ebf613ec6565b60200260200101819052506040518060400160405280600d81526020016c302e302e312d616c7068612e3760981b815250604051602001610f009190613ff4565b604051602081830303815290604052828280610f1b90613fd5565b935060ff1681518110610f3057610f30613ec6565b6020026020010181905250604051806040016040528060068152602001656465706c6f7960d01b815250828280610f6690613fd5565b935060ff1681518110610f7b57610f7b613ec6565b60200260200101819052506040518060400160405280600e81526020016d2d2d636f6e74726163744e616d6560901b815250828280610fb990613fd5565b935060ff1681518110610fce57610fce613ec6565b60200260200101819052508760200151828280610fea90613fd5565b935060ff1681518110610fff57610fff613ec6565b60200260200101819052506040518060400160405280600e81526020016d05a5ac6dedce8e4c2c6e8a0c2e8d60931b81525082828061103d90613fd5565b935060ff168151811061105257611052613ec6565b60209081029190910101528751828261106a81613fd5565b935060ff168151811061107f5761107f613ec6565b6020026020010181905250604051806040016040528060098152602001680b4b58da185a5b925960ba1b8152508282806110b890613fd5565b935060ff16815181106110cd576110cd613ec6565b60209081029190910101526110e1466121f0565b82826110ec81613fd5565b935060ff168151811061110157611101613ec6565b60200260200101819052506040518060400160405280600f81526020016e2d2d6275696c64496e666f46696c6560881b81525082828061114090613fd5565b935060ff168151811061115557611155613ec6565b60200260200101819052508682828061116d90613fd5565b935060ff168151811061118257611182613ec6565b60209081029190910101528551156112905760408051808201909152601581527f2d2d636f6e7374727563746f7242797465636f64650000000000000000000000602082015282826111d381613fd5565b935060ff16815181106111e8576111e8613ec6565b60209081029190910101526040516371aad10d60e01b81526001600160a01b038416906371aad10d9061121f9089906004016139de565b600060405180830381865afa15801561123c573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526112649190810190613c0d565b828261126f81613fd5565b935060ff168151811061128457611284613ec6565b60200260200101819052505b84602001511561133d576040805180820190915260128152712d2d766572696679536f75726365436f646560701b602082015282826112ce81613fd5565b935060ff16815181106112e3576112e3613ec6565b60200260200101819052506040518060400160405280600581526020016466616c736560d81b81525082828061131890613fd5565b935060ff168151811061132d5761132d613ec6565b60200260200101819052506114a4565b611353610d2f8660a0015161216260201b60201c565b6113d65760408051808201909152600d81526c2d2d6c6963656e73655479706560981b6020820152828261138681613fd5565b935060ff168151811061139b5761139b613ec6565b60200260200101819052508460a001516040516020016113bb9190613edc565b60405160208183030381529060405282828061131890613fd5565b8460c001511580156113fb57506113f9610d2f896040015161216260201b60201c565b155b156114a45760408051808201909152600d81526c2d2d6c6963656e73655479706560981b6020820152828261142f81613fd5565b935060ff168151811061144457611444613ec6565b602090810291909101015261145888612282565b6040516020016114689190613edc565b60405160208183030381529060405282828061148390613fd5565b935060ff168151811061149857611498613ec6565b60200260200101819052505b6114ba610d2f866040015161216260201b60201c565b61153d5760408051808201909152600b81526a0b4b5c995b185e595c925960aa1b602082015282826114eb81613fd5565b935060ff168151811061150057611500613ec6565b6020026020010181905250846040015182828061151c90613fd5565b935060ff168151811061153157611531613ec6565b60200260200101819052505b60608501511561162e576040805180820190915260068152650b4b5cd85b1d60d21b6020820152828261156f81613fd5565b935060ff168151811061158457611584613ec6565b60209081029190910101526060850151604051631623433d60e31b815260048101919091526001600160a01b0384169063b11a19e890602401600060405180830381865afa1580156115da573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526116029190810190613c0d565b828261160d81613fd5565b935060ff168151811061162257611622613ec6565b60200260200101819052505b60e085015151156116c05760408051808201909152600a8152690b4b59d85cd31a5b5a5d60b21b6020820152828261166581613fd5565b935060ff168151811061167a5761167a613ec6565b602090810291909101015260e085015151611694906121f0565b828261169f81613fd5565b935060ff16815181106116b4576116b4613ec6565b60200260200101819052505b60e0850151602001511561175d5760408051808201909152600a8152692d2d676173507269636560b01b602082015282826116fa81613fd5565b935060ff168151811061170f5761170f613ec6565b60200260200101819052506117318560e00151602001516121f060201b60201c565b828261173c81613fd5565b935060ff168151811061175157611751613ec6565b60200260200101819052505b60e085015160400151156117fe5760408051808201909152600e81526d2d2d6d617846656550657247617360901b6020820152828261179b81613fd5565b935060ff16815181106117b0576117b0613ec6565b60200260200101819052506117d28560e00151604001516121f060201b60201c565b82826117dd81613fd5565b935060ff16815181106117f2576117f2613ec6565b60200260200101819052505b60e085015160600151156118ae5760408051808201909152601681527f2d2d6d61785072696f72697479466565506572476173000000000000000000006020820152828261184b81613fd5565b935060ff168151811061186057611860613ec6565b60200260200101819052506118828560e00151606001516121f060201b60201c565b828261188d81613fd5565b935060ff16815181106118a2576118a2613ec6565b60200260200101819052505b60008160ff166001600160401b038111156118cb576118cb613a1a565b6040519080825280602002602001820160405280156118fe57816020015b60608152602001906001900390816118e95790505b50905060005b8260ff168160ff16101561195757838160ff168151811061192757611927613ec6565b6020026020010151828260ff168151811061194457611944613ec6565b6020908102919091010152600101611904565b5093505050505b949350505050565b61198d6040518060600160405280600060030b815260200160608152602001606081525090565b6040805180820182526004808252630c4c2e6d60e31b602083015291516334515cdb60e21b8152600080516020616dbe83398151915292600091849163d145736c916119db9186910161404b565b600060405180830381865afa1580156119f8573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611a209190810190613c0d565b90506000611a2e8683612938565b90506000846001600160a01b031663f45c1ce7836040518263ffffffff1660e01b8152600401611a5e9190614092565b6000604051808303816000875af1158015611a7d573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611aa591908101906140f7565b805190915060030b15801590611abe5750602081015151155b8015611acd5750604081015151155b15610ce05781600081518110611ae557611ae5613ec6565b602002602001015160405160200161049f91906141aa565b60606000611b328560408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600080825260209182015281518083019092528651825280870190820152909150611b699082905b90612a72565b15611c66576000611be682611be081611bda611bac8a60408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6040805180820182526000808252602091820152815180830190925282518252918201519181019190915290565b90612a99565b90612af6565b9050611c1a611c13604051806040016040528060018152602001600560f91b81525061216260201b60201c565b8290612a72565b15611c5457611c51611c4a604051806040016040528060018152602001600560f91b81525061216260201b60201c565b8290612b7b565b90505b611c5d81612ba1565b925050506103ba565b8215611c7f57848460405160200161049f92919061437a565b50506040805160208101909152600081526103ba565b509392505050565b6000808251602084016000f09392505050565b8160a0015115611cbf57505050565b6000611ccc848484612c06565b90506000611cd982611966565b602081015181519192509060030b158015611d4c5750611d4c611d20604051806040016040528060078152602001665355434345535360c81b81525061216260201b60201c565b604080518082018252600080825260209182015281518083019092528451825280850190820152611b63565b15611d5957505050505050565b60408201515115611d7957816040015160405160200161049f91906143f5565b8060405160200161049f919061443f565b60606000611dbf8360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b9050611df6611def604051806040016040528060048152602001630b9cdbdb60e21b81525061216260201b60201c565b829061218f565b15611e38576103ba611e33611e2c604051806040016040528060048152602001630b9cdbdb60e21b81525061216260201b60201c565b8390613119565b612ba1565b611e6a611e63604051806040016040528060018152602001601d60f91b81525061216260201b60201c565b82906131a3565b600103611ed257611e9c611c4a604051806040016040528060018152602001601d60f91b81525061216260201b60201c565b506103ba611e33611ecb604051806040016040528060018152602001601d60f91b81525061216260201b60201c565b8390612b7b565b611f01611def60405180604001604052806005815260200164173539b7b760d91b81525061216260201b60201c565b15611fce576000611f3982611f34604051806040016040528060018152602001602f60f81b81525061216260201b60201c565b613238565b905060008160018351611f4c919061448f565b81518110611f5c57611f5c613ec6565b60200260200101519050611fc5611e33611f9860405180604001604052806005815260200164173539b7b760d91b81525061216260201b60201c565b60408051808201825260008082526020918201528151808301909252855182528086019082015290613119565b95945050505050565b8260405160200161049f91906144a2565b606060006120148360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b9050612044611def604051806040016040528060048152602001630b9cdbdb60e21b81525061216260201b60201c565b15612052576103ba81612ba1565b61207d611e63604051806040016040528060018152602001601d60f91b81525061216260201b60201c565b6001036120b2576103ba611e33611ecb604051806040016040528060018152602001601d60f91b81525061216260201b60201c565b6120e1611def60405180604001604052806005815260200164173539b7b760d91b81525061216260201b60201c565b15611fce57600061211482611f34604051806040016040528060018152602001602f60f81b81525061216260201b60201c565b905060018151111561215057806002825161212f919061448f565b8151811061213f5761213f613ec6565b602002602001015192505050919050565b508260405160200161049f91906144a2565b60408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b8051825160009111156121a4575060006102ac565b815183516020850151600092916121ba9161455c565b6121c4919061448f565b9050826020015181036121db5760019150506102ac565b82516020840151819020912014905092915050565b606060006121fd836132dc565b60010190506000816001600160401b0381111561221c5761221c613a1a565b6040519080825280601f01601f191660200182016040528015612246576020820181803683370190505b5090508181016020015b600019016f181899199a1a9b1b9c1cb0b131b232b360811b600a86061a8153600a850494508461225057509392505050565b60606000612299836040015161216260201b60201c565b90506122d66122cf6040518060400160405280600a8152602001691553931250d15394d15160b21b81525061216260201b60201c565b82906133be565b156122fd5750506040805180820190915260048152634e6f6e6560e01b6020820152919050565b6123306122cf60405180604001604052806009815260200168556e6c6963656e736560b81b81525061216260201b60201c565b1561235c575050604080518082019091526009815268556e6c6963656e736560b81b6020820152919050565b6123896122cf6040518060400160405280600381526020016213525560ea1b81525061216260201b60201c565b156123af57505060408051808201909152600381526213525560ea1b6020820152919050565b6123e56122cf6040518060400160405280600c81526020016b47504c2d322e302d6f6e6c7960a01b81525061216260201b60201c565b8061242557506124256122cf6040518060400160405280601081526020016f23a8261699171816b7b916b630ba32b960811b81525061216260201b60201c565b1561245157505060408051808201909152600981526823a72a9023a8263b1960b91b6020820152919050565b6124876122cf6040518060400160405280600c81526020016b47504c2d332e302d6f6e6c7960a01b81525061216260201b60201c565b806124c757506124c76122cf6040518060400160405280601081526020016f23a8261699971816b7b916b630ba32b960811b81525061216260201b60201c565b156124f3575050604080518082019091526009815268474e552047504c763360b81b6020820152919050565b61252a6122cf6040518060400160405280600d81526020016c4c47504c2d322e312d6f6e6c7960981b81525061216260201b60201c565b8061256b575061256b6122cf604051806040016040528060118152602001702623a8261699171896b7b916b630ba32b960791b81525061216260201b60201c565b1561259a57505060408051808201909152600c81526b474e55204c47504c76322e3160a01b6020820152919050565b6125d16122cf6040518060400160405280600d81526020016c4c47504c2d332e302d6f6e6c7960981b81525061216260201b60201c565b8061261257506126126122cf604051806040016040528060118152602001702623a8261699971816b7b916b630ba32b960791b81525061216260201b60201c565b1561263f57505060408051808201909152600a815269474e55204c47504c763360b01b6020820152919050565b6126756122cf6040518060400160405280600c81526020016b4253442d322d436c6175736560a01b81525061216260201b60201c565b156126a457505060408051808201909152600c81526b4253442d322d436c6175736560a01b6020820152919050565b6126da6122cf6040518060400160405280600c81526020016b4253442d332d436c6175736560a01b81525061216260201b60201c565b1561270957505060408051808201909152600c81526b4253442d332d436c6175736560a01b6020820152919050565b61273a6122cf6040518060400160405280600781526020016604d504c2d322e360cc1b81525061216260201b60201c565b1561276457505060408051808201909152600781526604d504c2d322e360cc1b6020820152919050565b6127956122cf6040518060400160405280600781526020016604f534c2d332e360cc1b81525061216260201b60201c565b156127bf57505060408051808201909152600781526604f534c2d332e360cc1b6020820152919050565b6127f36122cf6040518060400160405280600a81526020016904170616368652d322e360b41b81525061216260201b60201c565b1561282057505060408051808201909152600a81526904170616368652d322e360b41b6020820152919050565b6128576122cf6040518060400160405280600d81526020016c4147504c2d332e302d6f6e6c7960981b81525061216260201b60201c565b8061289857506128986122cf6040518060400160405280601181526020017020a3a8261699971816b7b916b630ba32b960791b81525061216260201b60201c565b156128c557505060408051808201909152600a815269474e55204147504c763360b01b6020820152919050565b6128f76122cf604051806040016040528060088152602001674255534c2d312e3160c01b81525061216260201b60201c565b1561292157505060408051808201909152600781526642534c20312e3160c81b6020820152919050565b6040808401518451915161049f929060200161456f565b60608060005b84518110156129c3578185828151811061295a5761295a613ec6565b6020026020010151604051602001612973929190613b1a565b604051602081830303815290604052915060018551612992919061448f565b81146129bb57816040516020016129a991906146bf565b60405160208183030381529060405291505b60010161293e565b5060408051600380825260808201909252600091816020015b60608152602001906001900390816129dc5790505090508381600081518110612a0757612a07613ec6565b6020026020010181905250604051806040016040528060028152602001612d6360f01b81525081600181518110612a4057612a40613ec6565b60200260200101819052508181600281518110612a5f57612a5f613ec6565b6020908102919091010152949350505050565b6020808301518351835192840151600093612a9092918491906133d2565b14159392505050565b6040805180820190915260008082526020808301829052845185820151855192860151612ac693906134e3565b9050836020015181612ad8919061448f565b84518590612ae790839061448f565b90525060208401525090919050565b6040805180820190915260008082526020820152815183511015612b1b5750816102ac565b6020808301519084015160019114612b425750815160208481015190840151829020919020145b8015612b7357825184518590612b5990839061448f565b9052508251602085018051612b6f90839061455c565b9052505b509192915050565b6040805180820190915260008082526020820152612b9a838383613603565b5092915050565b6060600082600001516001600160401b03811115612bc157612bc1613a1a565b6040519080825280601f01601f191660200182016040528015612beb576020820181803683370190505b50602084810151855192935090830191612b9a9183916136a9565b60606000612c12610678565b6040805160ff808252612000820190925291925060009190816020015b6060815260200190600190039081612c2f5790505090506000604051806040016040528060038152602001620dce0f60eb1b815250828280612c7090613fd5565b935060ff1681518110612c8557612c85613ec6565b6020026020010181905250604051806040016040528060078152602001665e312e33322e3360c81b815250604051602001612cc091906146e4565b604051602081830303815290604052828280612cdb90613fd5565b935060ff1681518110612cf057612cf0613ec6565b60200260200101819052506040518060400160405280600881526020016776616c696461746560c01b815250828280612d2890613fd5565b935060ff1681518110612d3d57612d3d613ec6565b602002602001018190525082604051602001612d599190613f11565b604051602081830303815290604052828280612d7490613fd5565b935060ff1681518110612d8957612d89613ec6565b60200260200101819052506040518060400160405280600a8152602001690b4b58dbdb9d1c9858dd60b21b815250828280612dc390613fd5565b935060ff1681518110612dd857612dd8613ec6565b6020908102919091010152612ded8784613723565b8282612df881613fd5565b935060ff1681518110612e0d57612e0d613ec6565b602090810291909101015285515115612ea55760408051808201909152600b81526a2d2d7265666572656e636560a81b60208201528282612e4d81613fd5565b935060ff1681518110612e6257612e62613ec6565b60209081029190910101528551612e799084613723565b8282612e8481613fd5565b935060ff1681518110612e9957612e99613ec6565b60200260200101819052505b856080015115612f135760408051808201909152601881527f2d2d756e73616665536b697053746f72616765436865636b000000000000000060208201528282612eee81613fd5565b935060ff1681518110612f0357612f03613ec6565b6020026020010181905250612f6e565b8415612f6e576040805180820190915260128152712d2d726571756972655265666572656e636560701b60208201528282612f4d81613fd5565b935060ff1681518110612f6257612f62613ec6565b60200260200101819052505b60408601515115612ffa5760408051808201909152600d81526c2d2d756e73616665416c6c6f7760981b60208201528282612fa881613fd5565b935060ff1681518110612fbd57612fbd613ec6565b60200260200101819052508560400151828280612fd990613fd5565b935060ff1681518110612fee57612fee613ec6565b60200260200101819052505b8560600151156130645760408051808201909152601481527f2d2d756e73616665416c6c6f7752656e616d65730000000000000000000000006020820152828261304381613fd5565b935060ff168151811061305857613058613ec6565b60200260200101819052505b60008160ff166001600160401b0381111561308157613081613a1a565b6040519080825280602002602001820160405280156130b457816020015b606081526020019060019003908161309f5790505b50905060005b8260ff168160ff16101561310d57838160ff16815181106130dd576130dd613ec6565b6020026020010151828260ff16815181106130fa576130fa613ec6565b60209081029190910101526001016130ba565b50979650505050505050565b604080518082019091526000808252602082015281518351101561313e5750816102ac565b815183516020850151600092916131549161455c565b61315e919061448f565b6020840151909150600190821461317f575082516020840151819020908220145b801561319a5783518551869061319690839061448f565b9052505b50929392505050565b8051825160208085015190840151600093849390926131c39284906134e3565b6131cd919061455c565b90505b835160208501516131e1919061455c565b8111612b9a57816131f181614729565b925050826000015161322785602001518361320c919061448f565b8651613218919061448f565b855160208701518591906134e3565b613231919061455c565b90506131d0565b6060600061324684846131a3565b61325190600161455c565b6001600160401b0381111561326857613268613a1a565b60405190808252806020026020018201604052801561329b57816020015b60608152602001906001900390816132865790505b50905060005b8151811015611c95576132b7611e338686612b7b565b8282815181106132c9576132c9613ec6565b60209081029190910101526001016132a1565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310613325577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310613351576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc10000831061336f57662386f26fc10000830492506010015b6305f5e1008310613387576305f5e100830492506008015b612710831061339b57612710830492506004015b606483106133ad576064830492506002015b600a83106102ac5760010192915050565b60006133ca8383613763565b159392505050565b6000808584116134d95760208411613485576000841561341d5760016133f986602061448f565b613404906008614742565b61340f906002614840565b613419919061448f565b1990505b835181168561342c898961455c565b613436919061448f565b805190935082165b81811461347057878411613458578794505050505061195e565b836134628161484c565b94505082845116905061343e565b61347a878561455c565b94505050505061195e565b838320613492858861448f565b61349c908761455c565b91505b8582106134d7578482208082036134c4576134ba868461455c565b935050505061195e565b6134cf60018461448f565b92505061349f565b505b5092949350505050565b600083818685116135ee576020851161359d576000851561352f57600161350b87602061448f565b613516906008614742565b613521906002614840565b61352b919061448f565b1990505b845181166000876135408b8b61455c565b61354a919061448f565b855190915083165b82811461358f578186106135775761356a8b8b61455c565b965050505050505061195e565b8561358181614729565b965050838651169050613552565b85965050505050505061195e565b508383206000905b6135af868961448f565b82116135ec578583208082036135cb578394505050505061195e565b6135d660018561455c565b93505081806135e490614729565b9250506135a5565b505b6135f8878761455c565b979650505050505050565b604080518082019091526000808252602080830182905285518682015186519287015161363093906134e3565b60208087018051918601919091525190915061364c908261448f565b83528451602086015161365f919061455c565b810361366e57600085526136a0565b8351835161367c919061455c565b8551869061368b90839061448f565b905250835161369a908261455c565b60208601525b50909392505050565b602081106136e157815183526136c060208461455c565b92506136cd60208361455c565b91506136da60208261448f565b90506136a9565b60001981156137105760016136f783602061448f565b61370390610100614840565b61370d919061448f565b90505b9151835183169219169190911790915250565b606060006137318484610712565b805160208083015160405193945061374b93909101614863565b60405160208183030381529060405291505092915050565b8151815160009190811115613776575081515b6020808501519084015160005b8381101561382f57825182518082146137ff5760001960208710156137de576001846137b089602061448f565b6137ba919061455c565b6137c5906008614742565b6137d0906002614840565b6137da919061448f565b1990505b81811683821681810391146137fc5797506102ac9650505050505050565b50505b61380a60208661455c565b945061381760208561455c565b93505050602081613828919061455c565b9050613783565b5084518651610ce0919061489f565b610c9f8061611f83390190565b6040518060e0016040528060608152602001606081526020016060815260200160001515815260200160001515815260200160001515815260200161388e613893565b905290565b6040518061010001604052806000151581526020016000151581526020016060815260200160008019168152602001606081526020016060815260200160001515815260200161388e6040518060800160405280600081526020016000815260200160008152602001600081525090565b60005b8381101561391f578181015183820152602001613907565b50506000910152565b60008151808452613940816020860160208601613904565b601f01601f19169290920160200192915050565b6001600160a01b038316815260406020820181905260009061195e90830184613928565b7f4661696c656420746f206465706c6f7920636f6e7472616374200000000000008152600083516139b081601a850160208801613904565b6101d160f51b601a9184019182015283516139d281601c840160208801613904565b01601c01949350505050565b6020815260006103ba6020830184613928565b600060208284031215613a0357600080fd5b81516001600160a01b03811681146103ba57600080fd5b634e487b7160e01b600052604160045260246000fd5b604051606081016001600160401b0381118282101715613a5257613a52613a1a565b60405290565b6000806001600160401b03841115613a7257613a72613a1a565b50604051601f19601f85018116603f011681018181106001600160401b0382111715613aa057613aa0613a1a565b604052838152905080828401851015613ab857600080fd5b611c95846020830185613904565b600082601f830112613ad757600080fd5b6103ba83835160208501613a58565b600060208284031215613af857600080fd5b81516001600160401b03811115613b0e57600080fd5b6102a884828501613ac6565b60008351613b2c818460208801613904565b835190830190613b40818360208801613904565b01949350505050565b7f4661696c656420746f206465706c6f7920636f6e747261637420000000000000815260008351613b8181601a850160208801613904565b7f207573696e6720636f6e7374727563746f722064617461202200000000000000601a918401918201528351613bbe816033840160208801613904565b601160f91b60339290910191820152603401949350505050565b60408152600b60408201526a1193d55391149657d3d55560aa1b60608201526080602082015260006103ba6080830184613928565b600060208284031215613c1f57600080fd5b81516001600160401b03811115613c3557600080fd5b8201601f81018413613c4657600080fd5b6102a884825160208401613a58565b60008551613c67818460208a01613904565b602f60f81b9083019081528551613c85816001840160208a01613904565b602f60f81b600192909101918201528451613ca7816002840160208901613904565b600181830101915050602f60f81b60018201528351613ccd816002840160208801613904565b64173539b7b760d91b600292909101918201526007019695505050505050565b604081526000613d006040830184613928565b828103602084015260048152630b985cdd60e21b60208201526040810191505092915050565b600060208284031215613d3857600080fd5b815180151581146103ba57600080fd5b7f436f756c64206e6f742066696e642041535420696e2061727469666163742000815260008251613d8081601f850160208701613904565b7f2e205365742060617374203d20747275656020696e20666f756e6472792e746f601f939091019283015250611b5b60f21b603f820152604101919050565b604081526000613dd26040830184613928565b8281036020840152601181527005cc2e6e85cc2c4e6ded8eae8caa0c2e8d607b1b60208201526040810191505092915050565b604081526000613e186040830184613928565b8281036020840152600c81526b2e6173742e6c6963656e736560a01b60208201526040810191505092915050565b7f2e6d657461646174612e736f75726365732e5b27000000000000000000000000815260008251613e7e816014850160208701613904565b6b13ae9735b2b1b1b0b5991a9b60a11b6014939091019283015250602001919050565b604081526000613eb46040830185613928565b82810360208401526103b68185613928565b634e487b7160e01b600052603260045260246000fd5b601160f91b81528151600090613ef9816001850160208701613904565b601160f91b6001939091019283015250600201919050565b60008251613f23818460208701613904565b6a2f6275696c642d696e666f60a81b920191825250600b01919050565b7f436f756c64206e6f742066696e64206275696c642d696e666f2066696c65207781527f697468206d61746368696e6720736f7572636520636f6465206861736820666f60208201526a0391031b7b73a3930b1ba160ad1b604082015260008251613fb281604b850160208701613904565b91909101604b0192915050565b634e487b7160e01b600052601160045260246000fd5b600060ff821660ff8103613feb57613feb613fbf565b60010192915050565b7f406f70656e7a657070656c696e2f646566656e6465722d6465706c6f792d636c81526801a595b9d0b58db1a560be1b60208201526000825161403e816029850160208701613904565b9190910160290192915050565b60408152601660408201527f4f50454e5a455050454c494e5f424153485f504154480000000000000000000060608201526080602082015260006103ba6080830184613928565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b828110156140eb57603f198786030184526140d6858351613928565b945060209384019391909101906001016140ba565b50929695505050505050565b60006020828403121561410957600080fd5b81516001600160401b0381111561411f57600080fd5b82016060818503121561413157600080fd5b614139613a30565b81518060030b811461414a57600080fd5b815260208201516001600160401b0381111561416557600080fd5b61417186828501613ac6565b60208301525060408201516001600160401b0381111561419057600080fd5b61419c86828501613ac6565b604083015250949350505050565b7f4661696c656420746f2072756e206261736820636f6d6d616e642077697468208152601160f91b6020820152600082516141ec816021850160208701613904565b7f222e20496620796f7520617265207573696e672057696e646f77732c2073657460219390910192830152507f20746865204f50454e5a455050454c494e5f424153485f5041544820656e766960418201527f726f6e6d656e74207661726961626c6520746f207468652066756c6c7920717560618201527f616c69666965642070617468206f66207468652062617368206578656375746160818201527f626c652e20466f72206578616d706c652c20696620796f75206172652075736960a18201527f6e672047697420666f722057696e646f77732c206164642074686520666f6c6c60c18201527f6f77696e67206c696e6520696e20746865202e656e762066696c65206f66207960e18201527f6f75722070726f6a65637420287573696e6720666f727761726420736c6173686101018201527f6573293a0a4f50454e5a455050454c494e5f424153485f504154483d22433a2f6101218201527f50726f6772616d2046696c65732f4769742f62696e2f6261736822000000000061014182015261015c01919050565b7f4661696c656420746f2066696e64206c696e65207769746820707265666978208152602760f81b6020820152600083516143bc816021850160208801613904565b6c0139034b71037baba383aba1d1609d1b60219184019182015283516143e981602e840160208801613904565b01602e01949350505050565b7f4661696c656420746f2072756e2075706772616465207361666574792076616c815268034b230ba34b7b71d160bd1b60208201526000825161403e816029850160208701613904565b7f55706772616465207361666574792076616c69646174696f6e206661696c65648152611d0560f11b602082015260008251614482816022850160208701613904565b9190910160220192915050565b818103818111156102ac576102ac613fbf565b6d021b7b73a3930b1ba103730b6b2960951b8152600082516144cb81600e850160208701613904565b7f206d75737420626520696e2074686520666f726d6174204d79436f6e74726163600e9390910192830152507f742e736f6c3a4d79436f6e7472616374206f72204d79436f6e74726163742e73602e8201527f6f6c206f72206f75742f4d79436f6e74726163742e736f6c2f4d79436f6e7472604e8201526730b1ba173539b7b760c11b606e820152607601919050565b808201808211156102ac576102ac613fbf565b7f53504458206c6963656e7365206964656e7469666965722000000000000000008152600083516145a7816018850160208801613904565b6301034b7160e51b60189184019182015283516145cb81601c840160208801613904565b7f20646f6573206e6f74206c6f6f6b206c696b65206120737570706f7274656420601c92909101918201527f6c6963656e736520666f7220626c6f636b206578706c6f726572207665726966603c8201527f69636174696f6e2e205573652074686520606c6963656e73655479706560206f605c8201527f7074696f6e20746f20737065636966792061206c6963656e736520747970652c607c8201527f206f7220736574207468652060736b69704c6963656e73655479706560206f70609c8201527f74696f6e20746f2060747275656020746f20736b69702e00000000000000000060bc82015260d301949350505050565b600082516146d1818460208701613904565b600160fd1b920191825250600101919050565b7f406f70656e7a657070656c696e2f75706772616465732d636f7265400000000081526000825161471c81601c850160208701613904565b91909101601c0192915050565b60006001820161473b5761473b613fbf565b5060010190565b80820281158282048414176102ac576102ac613fbf565b6001815b60018411156147945780850481111561477857614778613fbf565b600184161561478657908102905b60019390931c92800261475d565b935093915050565b6000826147ab575060016102ac565b816147b8575060006102ac565b81600181146147ce57600281146147d8576147f4565b60019150506102ac565b60ff8411156147e9576147e9613fbf565b50506001821b6102ac565b5060208310610133831016604e8410600b8410161715614817575081810a6102ac565b6148246000198484614759565b806000190482111561483857614838613fbf565b029392505050565b60006103ba838361479c565b60008161485b5761485b613fbf565b506000190190565b60008351614875818460208801613904565b601d60f91b9083019081528351614893816001840160208801613904565b01600101949350505050565b8181036000831280158383131683831282161715612b9a57612b9a613fbf565b6080516118226148fd600039600081816101bf01528181610574015281816105d60152818161093501528181610ba30152610c0501526118226000f3fe608060405234801561001057600080fd5b506004361061018d5760003560e01c806381100bf0116100e3578063a217fddf1161008c578063d936547e11610066578063d936547e146103c9578063d9caed12146103ec578063e63ab1e9146103ff57600080fd5b8063a217fddf1461039b578063c8a02362146103a3578063d547741f146103b657600080fd5b806391d14854116100bd57806391d148541461032f5780639a590427146103755780639b19251a1461038857600080fd5b806381100bf0146102e05780638456cb591461030057806385f438c11461030857600080fd5b806336568abe11610145578063570618e11161011f578063570618e11461029b5780635c975abb146102c25780636133b4bb146102cd57600080fd5b806336568abe146102605780633c2f05a8146102735780633f4ba83a1461029357600080fd5b806321fc65f21161017657806321fc65f214610206578063248a9ca31461021b5780632f2ff15d1461024d57600080fd5b806301ffc9a714610192578063116191b6146101ba575b600080fd5b6101a56101a0366004611436565b610426565b60405190151581526020015b60405180910390f35b6101e17f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101b1565b6102196102143660046114ea565b6104bf565b005b61023f610229366004611559565b6000908152600160208190526040909120015490565b6040519081526020016101b1565b61021961025b366004611572565b6106c0565b61021961026e366004611572565b6106ec565b6004546101e19073ffffffffffffffffffffffffffffffffffffffff1681565b61021961074a565b61023f7f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a81565b60025460ff166101a5565b6102196102db36600461159e565b61077f565b6005546101e19073ffffffffffffffffffffffffffffffffffffffff1681565b6102196109b7565b61023f7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b6101a561033d366004611572565b600091825260016020908152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b6102196103833660046115f8565b6109e9565b6102196103963660046115f8565b610a6a565b61023f600081565b6102196103b13660046114ea565b610aee565b6102196103c4366004611572565b610cd5565b6101a56103d73660046115f8565b60036020526000908152604090205460ff1681565b6102196103fa366004611613565b610cfb565b61023f7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b0000000000000000000000000000000000000000000000000000000014806104b957507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b6104c7610e27565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e46104f181610e6a565b6104f9610e74565b73ffffffffffffffffffffffffffffffffffffffff861660009081526003602052604090205460ff16610558576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61059973ffffffffffffffffffffffffffffffffffffffff87167f000000000000000000000000000000000000000000000000000000000000000086610eb3565b6040517f5131ab5900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690635131ab59906106139089908990899089908990600401611699565b600060405180830381600087803b15801561062d57600080fd5b505af1158015610641573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167f85b5be9cf454e05e0bddf49315178102227c312078eefa3c00294fb4d912ae4e8686866040516106a6939291906116f6565b60405180910390a3506106b96001600055565b5050505050565b600082815260016020819052604090912001546106dc81610e6a565b6106e68383610f40565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8116331461073b576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6107458282610fed565b505050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61077481610e6a565b61077c61108e565b50565b60045473ffffffffffffffffffffffffffffffffffffffff166340c10f19306107a9866005611719565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815273ffffffffffffffffffffffffffffffffffffffff90921660048301526024820152604401600060405180830381600087803b15801561081457600080fd5b505af1158015610828573d6000803e3d6000fd5b5050600480546007546040517fa9059cbb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff918216938101939093526005602484015216925063a9059cbb91506044016020604051808303816000875af11580156108a9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108cd9190611753565b506004546108f49073ffffffffffffffffffffffffffffffffffffffff16858585856104bf565b600480546040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116938201939093529116906370a0823190602401602060405180830381865afa158015610986573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109aa9190611775565b156106e6576106e661178e565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a6109e181610e6a565b61077c6110ed565b7f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a610a1381610e6a565b73ffffffffffffffffffffffffffffffffffffffff8216600081815260036020526040808220805460ff19169055517f51085ddf9ebdded84b76e829eb58c4078e4b5bdf97d9a94723f336039da467919190a25050565b7f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a610a9481610e6a565b73ffffffffffffffffffffffffffffffffffffffff8216600081815260036020526040808220805460ff19166001179055517faab7954e9d246b167ef88aeddad35209ca2489d95a8aeb59e288d9b19fae5a549190a25050565b610af6610e27565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e4610b2081610e6a565b610b28610e74565b73ffffffffffffffffffffffffffffffffffffffff861660009081526003602052604090205460ff16610b87576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610bc873ffffffffffffffffffffffffffffffffffffffff87167f000000000000000000000000000000000000000000000000000000000000000086610eb3565b6040517fb8969bd400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063b8969bd490610c429089908990899089908990600401611699565b600060405180830381600087803b158015610c5c57600080fd5b505af1158015610c70573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fb9d4efa96044e5f5e03e696fa9ae2ff66911cc27e8a637c3627c75bc5b2241c88686866040516106a6939291906116f6565b60008281526001602081905260409091200154610cf181610e6a565b6106e68383610fed565b610d03610e27565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e4610d2d81610e6a565b610d35610e74565b73ffffffffffffffffffffffffffffffffffffffff841660009081526003602052604090205460ff16610d94576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610db573ffffffffffffffffffffffffffffffffffffffff85168484610eb3565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f9b1bfa7fa9ee420a16e124f794c35ac9f90472acc99140eb2f6447c714cad8eb84604051610e1491815260200190565b60405180910390a3506107456001600055565b600260005403610e63576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b61077c813361112a565b60025460ff1615610eb1576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6040805173ffffffffffffffffffffffffffffffffffffffff8416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb000000000000000000000000000000000000000000000000000000001790526107459084906111bb565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff16610fe557600083815260016020818152604080842073ffffffffffffffffffffffffffffffffffffffff87168086529252808420805460ff19169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45060016104b9565b5060006104b9565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff1615610fe557600083815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff86168085529252808320805460ff1916905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45060016104b9565b611096611251565b6002805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b6110f5610e74565b6002805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586110c33390565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff166111b7576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82166004820152602481018390526044015b60405180910390fd5b5050565b60006111dd73ffffffffffffffffffffffffffffffffffffffff84168361128d565b905080516000141580156112025750808060200190518101906112009190611753565b155b15610745576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff841660048201526024016111ae565b60025460ff16610eb1576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606061129b838360006112a2565b9392505050565b6060814710156112e0576040517fcd7860590000000000000000000000000000000000000000000000000000000081523060048201526024016111ae565b6000808573ffffffffffffffffffffffffffffffffffffffff16848660405161130991906117bd565b60006040518083038185875af1925050503d8060008114611346576040519150601f19603f3d011682016040523d82523d6000602084013e61134b565b606091505b509150915061135b868383611365565b9695505050505050565b60608261137a57611375826113f4565b61129b565b815115801561139e575073ffffffffffffffffffffffffffffffffffffffff84163b155b156113ed576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff851660048201526024016111ae565b508061129b565b8051156114045780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006020828403121561144857600080fd5b81357fffffffff000000000000000000000000000000000000000000000000000000008116811461129b57600080fd5b803573ffffffffffffffffffffffffffffffffffffffff8116811461149c57600080fd5b919050565b60008083601f8401126114b357600080fd5b50813567ffffffffffffffff8111156114cb57600080fd5b6020830191508360208285010111156114e357600080fd5b9250929050565b60008060008060006080868803121561150257600080fd5b61150b86611478565b945061151960208701611478565b935060408601359250606086013567ffffffffffffffff81111561153c57600080fd5b611548888289016114a1565b969995985093965092949392505050565b60006020828403121561156b57600080fd5b5035919050565b6000806040838503121561158557600080fd5b8235915061159560208401611478565b90509250929050565b600080600080606085870312156115b457600080fd5b6115bd85611478565b935060208501359250604085013567ffffffffffffffff8111156115e057600080fd5b6115ec878288016114a1565b95989497509550505050565b60006020828403121561160a57600080fd5b61129b82611478565b60008060006060848603121561162857600080fd5b61163184611478565b925061163f60208501611478565b929592945050506040919091013590565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff8616815273ffffffffffffffffffffffffffffffffffffffff851660208201528360408201526080606082015260006116eb608083018486611650565b979650505050505050565b838152604060208201526000611710604083018486611650565b95945050505050565b808201808211156104b9577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006020828403121561176557600080fd5b8151801515811461129b57600080fd5b60006020828403121561178757600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b6000825160005b818110156117de57602081860181015185830152016117c4565b50600092019182525091905056fea264697066735822122077f2d215a4760682a6f757e5b5c49fde9ea29a3b2ef55d3e1c39d0779fbdec1164736f6c634300081a0033608060405234801561001057600080fd5b50604051610c9f380380610c9f83398101604081905261002f9161010d565b8181600361003d83826101ff565b50600461004a82826101ff565b50505050506102bd565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261007b57600080fd5b81516001600160401b0381111561009457610094610054565b604051601f8201601f19908116603f011681016001600160401b03811182821017156100c2576100c2610054565b6040528181528382016020018510156100da57600080fd5b60005b828110156100f9576020818601810151838301820152016100dd565b506000918101602001919091529392505050565b6000806040838503121561012057600080fd5b82516001600160401b0381111561013657600080fd5b6101428582860161006a565b602085015190935090506001600160401b0381111561016057600080fd5b61016c8582860161006a565b9150509250929050565b600181811c9082168061018a57607f821691505b6020821081036101aa57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156101fa57806000526020600020601f840160051c810160208510156101d75750805b601f840160051c820191505b818110156101f757600081556001016101e3565b50505b505050565b81516001600160401b0381111561021857610218610054565b61022c816102268454610176565b846101b0565b6020601f82116001811461026057600083156102485750848201515b600019600385901b1c1916600184901b1784556101f7565b600084815260208120601f198516915b828110156102905787850151825560209485019460019092019101610270565b50848210156102ae5786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b6109d3806102cc6000396000f3fe608060405234801561001057600080fd5b50600436106100be5760003560e01c806340c10f191161007657806395d89b411161005b57806395d89b4114610183578063a9059cbb1461018b578063dd62ed3e1461019e57600080fd5b806340c10f191461013857806370a082311461014d57600080fd5b806318160ddd116100a757806318160ddd1461010457806323b872dd14610116578063313ce5671461012957600080fd5b806306fdde03146100c3578063095ea7b3146100e1575b600080fd5b6100cb6101e4565b6040516100d891906107bf565b60405180910390f35b6100f46100ef366004610854565b610276565b60405190151581526020016100d8565b6002545b6040519081526020016100d8565b6100f461012436600461087e565b610290565b604051601281526020016100d8565b61014b610146366004610854565b6102b4565b005b61010861015b3660046108bb565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6100cb6102c2565b6100f4610199366004610854565b6102d1565b6101086101ac3660046108dd565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6060600380546101f390610910565b80601f016020809104026020016040519081016040528092919081815260200182805461021f90610910565b801561026c5780601f106102415761010080835404028352916020019161026c565b820191906000526020600020905b81548152906001019060200180831161024f57829003601f168201915b5050505050905090565b6000336102848185856102df565b60019150505b92915050565b60003361029e8582856102f1565b6102a98585856103c5565b506001949350505050565b6102be8282610470565b5050565b6060600480546101f390610910565b6000336102848185856103c5565b6102ec83838360016104cc565b505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146103bf57818110156103b0576040517ffb8f41b200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416600482015260248101829052604481018390526064015b60405180910390fd5b6103bf848484840360006104cc565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8316610415576040517f96c6fd1e000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff8216610465576040517fec442f05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b6102ec838383610614565b73ffffffffffffffffffffffffffffffffffffffff82166104c0576040517fec442f05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b6102be60008383610614565b73ffffffffffffffffffffffffffffffffffffffff841661051c576040517fe602df05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff831661056c576040517f94280d62000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260016020908152604080832093871683529290522082905580156103bf578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161060691815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff831661064c5780600260008282546106419190610963565b909155506106fe9050565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260208190526040902054818110156106d2576040517fe450d38c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8516600482015260248101829052604481018390526064016103a7565b73ffffffffffffffffffffffffffffffffffffffff841660009081526020819052604090209082900390555b73ffffffffffffffffffffffffffffffffffffffff821661072757600280548290039055610753565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090208054820190555b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516107b291815260200190565b60405180910390a3505050565b602081526000825180602084015260005b818110156107ed57602081860181015160408684010152016107d0565b5060006040828501015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011684010191505092915050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461084f57600080fd5b919050565b6000806040838503121561086757600080fd5b6108708361082b565b946020939093013593505050565b60008060006060848603121561089357600080fd5b61089c8461082b565b92506108aa6020850161082b565b929592945050506040919091013590565b6000602082840312156108cd57600080fd5b6108d68261082b565b9392505050565b600080604083850312156108f057600080fd5b6108f98361082b565b91506109076020840161082b565b90509250929050565b600181811c9082168061092457607f821691505b60208210810361095d577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b8082018082111561028a577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea26469706673582212207e804ca539d49155d2b6bc19268ce22f9f857027c75247d69fb0d56a089c93d464736f6c634300081a00330000000000000000000000007109709ecfa91a80626ff3989d68f67f5b1dd12d8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f7420", } // ERC20CustodyEchidnaTestABI is the input ABI used to generate the binding from. @@ -264,6 +264,37 @@ func (_ERC20CustodyEchidnaTest *ERC20CustodyEchidnaTestCallerSession) PAUSERROLE return _ERC20CustodyEchidnaTest.Contract.PAUSERROLE(&_ERC20CustodyEchidnaTest.CallOpts) } +// WHITELISTERROLE is a free data retrieval call binding the contract method 0x570618e1. +// +// Solidity: function WHITELISTER_ROLE() view returns(bytes32) +func (_ERC20CustodyEchidnaTest *ERC20CustodyEchidnaTestCaller) WHITELISTERROLE(opts *bind.CallOpts) ([32]byte, error) { + var out []interface{} + err := _ERC20CustodyEchidnaTest.contract.Call(opts, &out, "WHITELISTER_ROLE") + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// WHITELISTERROLE is a free data retrieval call binding the contract method 0x570618e1. +// +// Solidity: function WHITELISTER_ROLE() view returns(bytes32) +func (_ERC20CustodyEchidnaTest *ERC20CustodyEchidnaTestSession) WHITELISTERROLE() ([32]byte, error) { + return _ERC20CustodyEchidnaTest.Contract.WHITELISTERROLE(&_ERC20CustodyEchidnaTest.CallOpts) +} + +// WHITELISTERROLE is a free data retrieval call binding the contract method 0x570618e1. +// +// Solidity: function WHITELISTER_ROLE() view returns(bytes32) +func (_ERC20CustodyEchidnaTest *ERC20CustodyEchidnaTestCallerSession) WHITELISTERROLE() ([32]byte, error) { + return _ERC20CustodyEchidnaTest.Contract.WHITELISTERROLE(&_ERC20CustodyEchidnaTest.CallOpts) +} + // WITHDRAWERROLE is a free data retrieval call binding the contract method 0x85f438c1. // // Solidity: function WITHDRAWER_ROLE() view returns(bytes32) @@ -512,6 +543,37 @@ func (_ERC20CustodyEchidnaTest *ERC20CustodyEchidnaTestCallerSession) TestERC20( return _ERC20CustodyEchidnaTest.Contract.TestERC20(&_ERC20CustodyEchidnaTest.CallOpts) } +// Whitelisted is a free data retrieval call binding the contract method 0xd936547e. +// +// Solidity: function whitelisted(address ) view returns(bool) +func (_ERC20CustodyEchidnaTest *ERC20CustodyEchidnaTestCaller) Whitelisted(opts *bind.CallOpts, arg0 common.Address) (bool, error) { + var out []interface{} + err := _ERC20CustodyEchidnaTest.contract.Call(opts, &out, "whitelisted", arg0) + + if err != nil { + return *new(bool), err + } + + out0 := *abi.ConvertType(out[0], new(bool)).(*bool) + + return out0, err + +} + +// Whitelisted is a free data retrieval call binding the contract method 0xd936547e. +// +// Solidity: function whitelisted(address ) view returns(bool) +func (_ERC20CustodyEchidnaTest *ERC20CustodyEchidnaTestSession) Whitelisted(arg0 common.Address) (bool, error) { + return _ERC20CustodyEchidnaTest.Contract.Whitelisted(&_ERC20CustodyEchidnaTest.CallOpts, arg0) +} + +// Whitelisted is a free data retrieval call binding the contract method 0xd936547e. +// +// Solidity: function whitelisted(address ) view returns(bool) +func (_ERC20CustodyEchidnaTest *ERC20CustodyEchidnaTestCallerSession) Whitelisted(arg0 common.Address) (bool, error) { + return _ERC20CustodyEchidnaTest.Contract.Whitelisted(&_ERC20CustodyEchidnaTest.CallOpts, arg0) +} + // GrantRole is a paid mutator transaction binding the contract method 0x2f2ff15d. // // Solidity: function grantRole(bytes32 role, address account) returns() @@ -638,6 +700,48 @@ func (_ERC20CustodyEchidnaTest *ERC20CustodyEchidnaTestTransactorSession) Unpaus return _ERC20CustodyEchidnaTest.Contract.Unpause(&_ERC20CustodyEchidnaTest.TransactOpts) } +// Unwhitelist is a paid mutator transaction binding the contract method 0x9a590427. +// +// Solidity: function unwhitelist(address token) returns() +func (_ERC20CustodyEchidnaTest *ERC20CustodyEchidnaTestTransactor) Unwhitelist(opts *bind.TransactOpts, token common.Address) (*types.Transaction, error) { + return _ERC20CustodyEchidnaTest.contract.Transact(opts, "unwhitelist", token) +} + +// Unwhitelist is a paid mutator transaction binding the contract method 0x9a590427. +// +// Solidity: function unwhitelist(address token) returns() +func (_ERC20CustodyEchidnaTest *ERC20CustodyEchidnaTestSession) Unwhitelist(token common.Address) (*types.Transaction, error) { + return _ERC20CustodyEchidnaTest.Contract.Unwhitelist(&_ERC20CustodyEchidnaTest.TransactOpts, token) +} + +// Unwhitelist is a paid mutator transaction binding the contract method 0x9a590427. +// +// Solidity: function unwhitelist(address token) returns() +func (_ERC20CustodyEchidnaTest *ERC20CustodyEchidnaTestTransactorSession) Unwhitelist(token common.Address) (*types.Transaction, error) { + return _ERC20CustodyEchidnaTest.Contract.Unwhitelist(&_ERC20CustodyEchidnaTest.TransactOpts, token) +} + +// Whitelist is a paid mutator transaction binding the contract method 0x9b19251a. +// +// Solidity: function whitelist(address token) returns() +func (_ERC20CustodyEchidnaTest *ERC20CustodyEchidnaTestTransactor) Whitelist(opts *bind.TransactOpts, token common.Address) (*types.Transaction, error) { + return _ERC20CustodyEchidnaTest.contract.Transact(opts, "whitelist", token) +} + +// Whitelist is a paid mutator transaction binding the contract method 0x9b19251a. +// +// Solidity: function whitelist(address token) returns() +func (_ERC20CustodyEchidnaTest *ERC20CustodyEchidnaTestSession) Whitelist(token common.Address) (*types.Transaction, error) { + return _ERC20CustodyEchidnaTest.Contract.Whitelist(&_ERC20CustodyEchidnaTest.TransactOpts, token) +} + +// Whitelist is a paid mutator transaction binding the contract method 0x9b19251a. +// +// Solidity: function whitelist(address token) returns() +func (_ERC20CustodyEchidnaTest *ERC20CustodyEchidnaTestTransactorSession) Whitelist(token common.Address) (*types.Transaction, error) { + return _ERC20CustodyEchidnaTest.Contract.Whitelist(&_ERC20CustodyEchidnaTest.TransactOpts, token) +} + // Withdraw is a paid mutator transaction binding the contract method 0xd9caed12. // // Solidity: function withdraw(address token, address to, uint256 amount) returns() @@ -1455,6 +1559,294 @@ func (_ERC20CustodyEchidnaTest *ERC20CustodyEchidnaTestFilterer) ParseUnpaused(l return event, nil } +// ERC20CustodyEchidnaTestUnwhitelistedIterator is returned from FilterUnwhitelisted and is used to iterate over the raw logs and unpacked data for Unwhitelisted events raised by the ERC20CustodyEchidnaTest contract. +type ERC20CustodyEchidnaTestUnwhitelistedIterator struct { + Event *ERC20CustodyEchidnaTestUnwhitelisted // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *ERC20CustodyEchidnaTestUnwhitelistedIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(ERC20CustodyEchidnaTestUnwhitelisted) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(ERC20CustodyEchidnaTestUnwhitelisted) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *ERC20CustodyEchidnaTestUnwhitelistedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *ERC20CustodyEchidnaTestUnwhitelistedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// ERC20CustodyEchidnaTestUnwhitelisted represents a Unwhitelisted event raised by the ERC20CustodyEchidnaTest contract. +type ERC20CustodyEchidnaTestUnwhitelisted struct { + Token common.Address + Raw types.Log // Blockchain specific contextual infos +} + +// FilterUnwhitelisted is a free log retrieval operation binding the contract event 0x51085ddf9ebdded84b76e829eb58c4078e4b5bdf97d9a94723f336039da46791. +// +// Solidity: event Unwhitelisted(address indexed token) +func (_ERC20CustodyEchidnaTest *ERC20CustodyEchidnaTestFilterer) FilterUnwhitelisted(opts *bind.FilterOpts, token []common.Address) (*ERC20CustodyEchidnaTestUnwhitelistedIterator, error) { + + var tokenRule []interface{} + for _, tokenItem := range token { + tokenRule = append(tokenRule, tokenItem) + } + + logs, sub, err := _ERC20CustodyEchidnaTest.contract.FilterLogs(opts, "Unwhitelisted", tokenRule) + if err != nil { + return nil, err + } + return &ERC20CustodyEchidnaTestUnwhitelistedIterator{contract: _ERC20CustodyEchidnaTest.contract, event: "Unwhitelisted", logs: logs, sub: sub}, nil +} + +// WatchUnwhitelisted is a free log subscription operation binding the contract event 0x51085ddf9ebdded84b76e829eb58c4078e4b5bdf97d9a94723f336039da46791. +// +// Solidity: event Unwhitelisted(address indexed token) +func (_ERC20CustodyEchidnaTest *ERC20CustodyEchidnaTestFilterer) WatchUnwhitelisted(opts *bind.WatchOpts, sink chan<- *ERC20CustodyEchidnaTestUnwhitelisted, token []common.Address) (event.Subscription, error) { + + var tokenRule []interface{} + for _, tokenItem := range token { + tokenRule = append(tokenRule, tokenItem) + } + + logs, sub, err := _ERC20CustodyEchidnaTest.contract.WatchLogs(opts, "Unwhitelisted", tokenRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(ERC20CustodyEchidnaTestUnwhitelisted) + if err := _ERC20CustodyEchidnaTest.contract.UnpackLog(event, "Unwhitelisted", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseUnwhitelisted is a log parse operation binding the contract event 0x51085ddf9ebdded84b76e829eb58c4078e4b5bdf97d9a94723f336039da46791. +// +// Solidity: event Unwhitelisted(address indexed token) +func (_ERC20CustodyEchidnaTest *ERC20CustodyEchidnaTestFilterer) ParseUnwhitelisted(log types.Log) (*ERC20CustodyEchidnaTestUnwhitelisted, error) { + event := new(ERC20CustodyEchidnaTestUnwhitelisted) + if err := _ERC20CustodyEchidnaTest.contract.UnpackLog(event, "Unwhitelisted", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// ERC20CustodyEchidnaTestWhitelistedIterator is returned from FilterWhitelisted and is used to iterate over the raw logs and unpacked data for Whitelisted events raised by the ERC20CustodyEchidnaTest contract. +type ERC20CustodyEchidnaTestWhitelistedIterator struct { + Event *ERC20CustodyEchidnaTestWhitelisted // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *ERC20CustodyEchidnaTestWhitelistedIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(ERC20CustodyEchidnaTestWhitelisted) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(ERC20CustodyEchidnaTestWhitelisted) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *ERC20CustodyEchidnaTestWhitelistedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *ERC20CustodyEchidnaTestWhitelistedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// ERC20CustodyEchidnaTestWhitelisted represents a Whitelisted event raised by the ERC20CustodyEchidnaTest contract. +type ERC20CustodyEchidnaTestWhitelisted struct { + Token common.Address + Raw types.Log // Blockchain specific contextual infos +} + +// FilterWhitelisted is a free log retrieval operation binding the contract event 0xaab7954e9d246b167ef88aeddad35209ca2489d95a8aeb59e288d9b19fae5a54. +// +// Solidity: event Whitelisted(address indexed token) +func (_ERC20CustodyEchidnaTest *ERC20CustodyEchidnaTestFilterer) FilterWhitelisted(opts *bind.FilterOpts, token []common.Address) (*ERC20CustodyEchidnaTestWhitelistedIterator, error) { + + var tokenRule []interface{} + for _, tokenItem := range token { + tokenRule = append(tokenRule, tokenItem) + } + + logs, sub, err := _ERC20CustodyEchidnaTest.contract.FilterLogs(opts, "Whitelisted", tokenRule) + if err != nil { + return nil, err + } + return &ERC20CustodyEchidnaTestWhitelistedIterator{contract: _ERC20CustodyEchidnaTest.contract, event: "Whitelisted", logs: logs, sub: sub}, nil +} + +// WatchWhitelisted is a free log subscription operation binding the contract event 0xaab7954e9d246b167ef88aeddad35209ca2489d95a8aeb59e288d9b19fae5a54. +// +// Solidity: event Whitelisted(address indexed token) +func (_ERC20CustodyEchidnaTest *ERC20CustodyEchidnaTestFilterer) WatchWhitelisted(opts *bind.WatchOpts, sink chan<- *ERC20CustodyEchidnaTestWhitelisted, token []common.Address) (event.Subscription, error) { + + var tokenRule []interface{} + for _, tokenItem := range token { + tokenRule = append(tokenRule, tokenItem) + } + + logs, sub, err := _ERC20CustodyEchidnaTest.contract.WatchLogs(opts, "Whitelisted", tokenRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(ERC20CustodyEchidnaTestWhitelisted) + if err := _ERC20CustodyEchidnaTest.contract.UnpackLog(event, "Whitelisted", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseWhitelisted is a log parse operation binding the contract event 0xaab7954e9d246b167ef88aeddad35209ca2489d95a8aeb59e288d9b19fae5a54. +// +// Solidity: event Whitelisted(address indexed token) +func (_ERC20CustodyEchidnaTest *ERC20CustodyEchidnaTestFilterer) ParseWhitelisted(log types.Log) (*ERC20CustodyEchidnaTestWhitelisted, error) { + event := new(ERC20CustodyEchidnaTestWhitelisted) + if err := _ERC20CustodyEchidnaTest.contract.UnpackLog(event, "Whitelisted", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + // ERC20CustodyEchidnaTestWithdrawIterator is returned from FilterWithdraw and is used to iterate over the raw logs and unpacked data for Withdraw events raised by the ERC20CustodyEchidnaTest contract. type ERC20CustodyEchidnaTestWithdrawIterator struct { Event *ERC20CustodyEchidnaTestWithdraw // Event containing the contract specifics and raw log diff --git a/v2/pkg/gatewayevm.sol/gatewayevm.go b/v2/pkg/gatewayevm.sol/gatewayevm.go index 09b82291..fa2ef3f1 100644 --- a/v2/pkg/gatewayevm.sol/gatewayevm.go +++ b/v2/pkg/gatewayevm.sol/gatewayevm.go @@ -31,8 +31,8 @@ var ( // GatewayEVMMetaData contains all meta data concerning the GatewayEVM contract. var GatewayEVMMetaData = &bind.MetaData{ - ABI: "[{\"type\":\"constructor\",\"inputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"ASSET_HANDLER_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"DEFAULT_ADMIN_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"PAUSER_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"TSS_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"UPGRADE_INTERFACE_VERSION\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"call\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"custody\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"deposit\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"deposit\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"depositAndCall\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"depositAndCall\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"execute\",\"inputs\":[{\"name\":\"destination\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"executeRevert\",\"inputs\":[{\"name\":\"destination\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"executeWithERC20\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"getRoleAdmin\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"grantRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"hasRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"initialize\",\"inputs\":[{\"name\":\"tssAddress_\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"zetaToken_\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"admin_\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"pause\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"paused\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"proxiableUUID\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"renounceRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"callerConfirmation\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"revertWithERC20\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"revokeRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setConnector\",\"inputs\":[{\"name\":\"zetaConnector_\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setCustody\",\"inputs\":[{\"name\":\"custody_\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"supportsInterface\",\"inputs\":[{\"name\":\"interfaceId\",\"type\":\"bytes4\",\"internalType\":\"bytes4\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"tssAddress\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"unpause\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"upgradeToAndCall\",\"inputs\":[{\"name\":\"newImplementation\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"zetaConnector\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"zetaToken\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"event\",\"name\":\"Call\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"receiver\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Deposit\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"receiver\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"asset\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Executed\",\"inputs\":[{\"name\":\"destination\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ExecutedWithERC20\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Initialized\",\"inputs\":[{\"name\":\"version\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Paused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Reverted\",\"inputs\":[{\"name\":\"destination\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RevertedWithERC20\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleAdminChanged\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"previousAdminRole\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"newAdminRole\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleGranted\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleRevoked\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Unpaused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Upgraded\",\"inputs\":[{\"name\":\"implementation\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"AccessControlBadConfirmation\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"AccessControlUnauthorizedAccount\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"neededRole\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"type\":\"error\",\"name\":\"AddressEmptyCode\",\"inputs\":[{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"AddressInsufficientBalance\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"ApprovalFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ConnectorInitialized\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"CustodyInitialized\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"DepositFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ERC1967InvalidImplementation\",\"inputs\":[{\"name\":\"implementation\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"ERC1967NonPayable\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"EnforcedPause\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ExecutionFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ExpectedPause\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"FailedInnerCall\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientERC20Amount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientETHAmount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidInitialization\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NotInitializing\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ReentrancyGuardReentrantCall\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"SafeERC20FailedOperation\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"UUPSUnauthorizedCallContext\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"UUPSUnsupportedProxiableUUID\",\"inputs\":[{\"name\":\"slot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"type\":\"error\",\"name\":\"ZeroAddress\",\"inputs\":[]}]", - Bin: "0x60a06040523060805234801561001457600080fd5b5061001d610022565b6100d4565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100725760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146100d15780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b6080516131046100fd60003960008181611f0601528181611f2f01526122fe01526131046000f3fe6080604052600436106101e35760003560e01c80635c975abb11610102578063ae7a3a6f11610095578063dda79b7511610064578063dda79b751461062e578063e63ab1e91461064e578063f340fa0114610682578063f45346dc1461069557600080fd5b8063ae7a3a6f146105ae578063b8969bd4146105ce578063c0c53b8b146105ee578063d547741f1461060e57600080fd5b806391d14854116100d157806391d14854146104b7578063a217fddf1461051c578063a783c78914610531578063ad3cb1cc1461056557600080fd5b80635c975abb146104175780635d62c8601461044e5780638456cb59146104825780638c6f037f1461049757600080fd5b806335c018db1161017a5780635131ab59116101495780635131ab59146103a257806352d1902d146103c257806357bec62f146103d75780635b112591146103f757600080fd5b806335c018db1461034757806336568abe1461035a5780633f4ba83a1461037a5780634f1ef2861461038f57600080fd5b806321e093b1116101b657806321e093b11461027f578063248a9ca3146102b757806329c59b5d146103145780632f2ff15d1461032757600080fd5b806301ffc9a7146101e857806310188aef1461021d5780631b8b921d1461023f5780631cff79cd1461025f575b600080fd5b3480156101f457600080fd5b50610208610203366004612b77565b6106b5565b60405190151581526020015b60405180910390f35b34801561022957600080fd5b5061023d610238366004612bd5565b61074e565b005b34801561024b57600080fd5b5061023d61025a366004612c39565b610842565b61027261026d366004612c39565b6108cd565b6040516102149190612cfa565b34801561028b57600080fd5b5060035461029f906001600160a01b031681565b6040516001600160a01b039091168152602001610214565b3480156102c357600080fd5b506103066102d2366004612d0d565b60009081527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052604090206001015490565b604051908152602001610214565b61023d610322366004612c39565b6109d0565b34801561033357600080fd5b5061023d610342366004612d26565b610b63565b61023d610355366004612c39565b610bad565b34801561036657600080fd5b5061023d610375366004612d26565b610d9c565b34801561038657600080fd5b5061023d610de8565b61023d61039d366004612d81565b610e1d565b3480156103ae57600080fd5b5061023d6103bd366004612e88565b610e3c565b3480156103ce57600080fd5b50610306611155565b3480156103e357600080fd5b5060025461029f906001600160a01b031681565b34801561040357600080fd5b5060015461029f906001600160a01b031681565b34801561042357600080fd5b507fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff16610208565b34801561045a57600080fd5b506103067f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b981565b34801561048e57600080fd5b5061023d611184565b3480156104a357600080fd5b5061023d6104b2366004612ef7565b6111b6565b3480156104c357600080fd5b506102086104d2366004612d26565b60009182527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408084206001600160a01b0393909316845291905290205460ff1690565b34801561052857600080fd5b50610306600081565b34801561053d57600080fd5b506103067f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb81565b34801561057157600080fd5b506102726040518060400160405280600581526020017f352e302e3000000000000000000000000000000000000000000000000000000081525081565b3480156105ba57600080fd5b5061023d6105c9366004612bd5565b6112cc565b3480156105da57600080fd5b5061023d6105e9366004612e88565b6113c0565b3480156105fa57600080fd5b5061023d610609366004612f49565b611579565b34801561061a57600080fd5b5061023d610629366004612d26565b61182e565b34801561063a57600080fd5b5060005461029f906001600160a01b031681565b34801561065a57600080fd5b506103067f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b61023d610690366004612bd5565b611872565b3480156106a157600080fd5b5061023d6106b0366004612f8c565b611a07565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061074857507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b600061075981611b02565b6001600160a01b038216610799576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002546001600160a01b0316156107dc576040517f0c8dc01600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6108067f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b983611b0c565b5050600280547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b61084a611bf9565b610852611c57565b826001600160a01b0316336001600160a01b03167f2a21062ee9199c2e205622999eeb7c3da73153674f36a0acd3f74fa6af67bde38484604051610897929190613008565b60405180910390a36108c860017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b505050565b60607f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb6108f981611b02565b610901611bf9565b610909611c57565b6001600160a01b038516610949576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610956868686611cfe565b9050856001600160a01b03167fcaf938de11c367272220bfd1d2baa99ca46665e7bc4d85f00adb51b90fe1fa9f34878760405161099593929190613024565b60405180910390a291506109c860017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b509392505050565b6109d8611bf9565b6109e0611c57565b34600003610a1a576040517f7671265e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038316610a5a576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546040516000916001600160a01b03169034908381818185875af1925050503d8060008114610aa7576040519150601f19603f3d011682016040523d82523d6000602084013e610aac565b606091505b5050905080610ae7576040517f79cacff100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b836001600160a01b0316336001600160a01b03167f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a43460008787604051610b31949392919061303e565b60405180910390a3506108c860017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020526040902060010154610b9d81611b02565b610ba78383611b0c565b50505050565b7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb610bd781611b02565b610bdf611bf9565b610be7611c57565b6001600160a01b038416610c27576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000846001600160a01b03163460405160006040518083038185875af1925050503d8060008114610c74576040519150601f19603f3d011682016040523d82523d6000602084013e610c79565b606091505b5050905080610cb4576040517facfdb44400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f8fcaa0b50000000000000000000000000000000000000000000000000000000081526001600160a01b03861690638fcaa0b590610cfb9087908790600401613008565b600060405180830381600087803b158015610d1557600080fd5b505af1158015610d29573d6000803e3d6000fd5b50505050846001600160a01b03167fd5d7616b1678354a0dea9d7e57e6a090bff5babe9f8d6381fdbad16e89ba311c348686604051610d6a93929190613024565b60405180910390a250610ba760017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b6001600160a01b0381163314610dde576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6108c88282611da7565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610e1281611b02565b610e1a611e6b565b50565b610e25611efb565b610e2e82611fcb565b610e388282611fd6565b5050565b7f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b9610e6681611b02565b610e6e611bf9565b610e76611c57565b83600003610eb0576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038516610ef0576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610efa86866120fa565b610f30576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b0386811660048301526024820186905287169063095ea7b3906044016020604051808303816000875af1158015610f98573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fbc9190613067565b610ff2576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610ffd858484611cfe565b5061100886866120fa565b61103e576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201526000906001600160a01b038816906370a0823190602401602060405180830381865afa15801561109e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110c29190613089565b905080156110d4576110d4878261218a565b856001600160a01b0316876001600160a01b03167f29c40793bffd84cb810179f15d1ceec72bc7f0785514c668ba36645cf99b738287878760405161111b93929190613024565b60405180910390a35061114d60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b505050505050565b600061115f6122f3565b507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc90565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a6111ae81611b02565b610e1a612355565b6111be611bf9565b6111c6611c57565b83600003611200576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038516611240576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61124b3384866123ce565b846001600160a01b0316336001600160a01b03167f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a486868686604051611294949392919061303e565b60405180910390a36112c560017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b5050505050565b60006112d781611b02565b6001600160a01b038216611317576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000546001600160a01b03161561135a576040517fb337f37800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6113847f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b983611b0c565b5050600080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b7f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b96113ea81611b02565b6113f2611bf9565b6113fa611c57565b83600003611434576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038516611474576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6114886001600160a01b0387168686612557565b6040517f8fcaa0b50000000000000000000000000000000000000000000000000000000081526001600160a01b03861690638fcaa0b5906114cf9086908690600401613008565b600060405180830381600087803b1580156114e957600080fd5b505af11580156114fd573d6000803e3d6000fd5b50505050846001600160a01b0316866001600160a01b03167f723fc7be2448075379e4fdf1e6bf5fead954d2668d2da05dcb44ccfec4beeda786868660405161154893929190613024565b60405180910390a361114d60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156115c45750825b905060008267ffffffffffffffff1660011480156115e15750303b155b9050811580156115ef575080155b15611626576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84547fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000016600117855583156116875784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff16680100000000000000001785555b6001600160a01b03881615806116a457506001600160a01b038716155b156116db576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6116e36125cb565b6116eb6125d3565b6116f36125cb565b6116fb6125e3565b611706600087611b0c565b506117317f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a87611b0c565b50600180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b038a1617905561178f7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb89611b0c565b50600380547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03891617905583156118245784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b5050505050505050565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052604090206001015461186881611b02565b610ba78383611da7565b61187a611bf9565b611882611c57565b346000036118bc576040517f7671265e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b0381166118fc576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546040516000916001600160a01b03169034908381818185875af1925050503d8060008114611949576040519150601f19603f3d011682016040523d82523d6000602084013e61194e565b606091505b5050905080611989576040517f79cacff100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60408051348152600060208201819052606082840181905282015290516001600160a01b0384169133917f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a49181900360800190a350610e1a60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b611a0f611bf9565b611a17611c57565b81600003611a51576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038316611a91576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611a9c3382846123ce565b826001600160a01b0316336001600160a01b03167f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a484846040516108979291909182526001600160a01b0316602082015260606040820181905260009082015260800190565b610e1a81336125f3565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff16611bef576000848152602082815260408083206001600160a01b0387168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055611ba53390565b6001600160a01b0316836001600160a01b0316857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a46001915050610748565b6000915050610748565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff1615611c55576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0080547ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01611cd2576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60029055565b60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b6060600080856001600160a01b0316348686604051611d1e9291906130a2565b60006040518083038185875af1925050503d8060008114611d5b576040519150601f19603f3d011682016040523d82523d6000602084013e611d60565b606091505b509150915081611d9c576040517facfdb44400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b9150505b9392505050565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff1615611bef576000848152602082815260408083206001600160a01b038716808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339287917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a46001915050610748565b611e73612680565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001681557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a150565b306001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161480611f9457507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316611f887f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b6001600160a01b031614155b15611c55576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610e3881611b02565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa92505050801561204e575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820190925261204b91810190613089565b60015b612094576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b03831660048201526024015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc81146120f0576040517faa1d49a40000000000000000000000000000000000000000000000000000000081526004810182905260240161208b565b6108c883836126db565b6040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b038281166004830152600060248301819052919084169063095ea7b3906044016020604051808303816000875af1158015612166573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611da09190613067565b6003546001600160a01b03908116908316036122d9576002546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152602481018390529083169063095ea7b3906044016020604051808303816000875af115801561220c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122309190613067565b612266576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002546040517f743e0c9b000000000000000000000000000000000000000000000000000000008152600481018390526001600160a01b039091169063743e0c9b90602401600060405180830381600087803b1580156122c557600080fd5b505af115801561114d573d6000803e3d6000fd5b600054610e38906001600160a01b03848116911683612557565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614611c55576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61235d611bf9565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011781557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25833611edd565b6003546001600160a01b039081169083160361253b576123f96001600160a01b038316843084612731565b6002546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152602481018390529083169063095ea7b3906044016020604051808303816000875af1158015612465573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124899190613067565b6124bf576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002546040517f743e0c9b000000000000000000000000000000000000000000000000000000008152600481018390526001600160a01b039091169063743e0c9b90602401600060405180830381600087803b15801561251e57600080fd5b505af1158015612532573d6000803e3d6000fd5b50505050505050565b6000546108c8906001600160a01b038481169186911684612731565b6040516001600160a01b038381166024830152604482018390526108c891859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505061276a565b611c556127e6565b6125db6127e6565b611c5561284d565b6125eb6127e6565b611c55612855565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408083206001600160a01b038516845290915290205460ff16610e38576040517fe2517d3f0000000000000000000000000000000000000000000000000000000081526001600160a01b03821660048201526024810183905260440161208b565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff16611c55576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6126e4826128a6565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a2805115612729576108c8828261294e565b610e386129c4565b6040516001600160a01b038481166024830152838116604483015260648201839052610ba79186918216906323b872dd90608401612584565b600061277f6001600160a01b038416836129fc565b905080516000141580156127a45750808060200190518101906127a29190613067565b155b156108c8576040517f5274afe70000000000000000000000000000000000000000000000000000000081526001600160a01b038416600482015260240161208b565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff16611c55576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611cd86127e6565b61285d6127e6565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055565b806001600160a01b03163b6000036128f5576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b038216600482015260240161208b565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6060600080846001600160a01b03168460405161296b91906130b2565b600060405180830381855af49150503d80600081146129a6576040519150601f19603f3d011682016040523d82523d6000602084013e6129ab565b606091505b50915091506129bb858383612a0a565b95945050505050565b3415611c55576040517fb398979f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6060611da083836000612a7f565b606082612a1f57612a1a82612b35565b611da0565b8151158015612a3657506001600160a01b0384163b155b15612a78576040517f9996b3150000000000000000000000000000000000000000000000000000000081526001600160a01b038516600482015260240161208b565b5080611da0565b606081471015612abd576040517fcd78605900000000000000000000000000000000000000000000000000000000815230600482015260240161208b565b600080856001600160a01b03168486604051612ad991906130b2565b60006040518083038185875af1925050503d8060008114612b16576040519150601f19603f3d011682016040523d82523d6000602084013e612b1b565b606091505b5091509150612b2b868383612a0a565b9695505050505050565b805115612b455780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060208284031215612b8957600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114611da057600080fd5b80356001600160a01b0381168114612bd057600080fd5b919050565b600060208284031215612be757600080fd5b611da082612bb9565b60008083601f840112612c0257600080fd5b50813567ffffffffffffffff811115612c1a57600080fd5b602083019150836020828501011115612c3257600080fd5b9250929050565b600080600060408486031215612c4e57600080fd5b612c5784612bb9565b9250602084013567ffffffffffffffff811115612c7357600080fd5b612c7f86828701612bf0565b9497909650939450505050565b60005b83811015612ca7578181015183820152602001612c8f565b50506000910152565b60008151808452612cc8816020860160208601612c8c565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000611da06020830184612cb0565b600060208284031215612d1f57600080fd5b5035919050565b60008060408385031215612d3957600080fd5b82359150612d4960208401612bb9565b90509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60008060408385031215612d9457600080fd5b612d9d83612bb9565b9150602083013567ffffffffffffffff811115612db957600080fd5b8301601f81018513612dca57600080fd5b803567ffffffffffffffff811115612de457612de4612d52565b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8501160116810181811067ffffffffffffffff82111715612e5057612e50612d52565b604052818152828201602001871015612e6857600080fd5b816020840160208301376000602083830101528093505050509250929050565b600080600080600060808688031215612ea057600080fd5b612ea986612bb9565b9450612eb760208701612bb9565b935060408601359250606086013567ffffffffffffffff811115612eda57600080fd5b612ee688828901612bf0565b969995985093965092949392505050565b600080600080600060808688031215612f0f57600080fd5b612f1886612bb9565b945060208601359350612f2d60408701612bb9565b9250606086013567ffffffffffffffff811115612eda57600080fd5b600080600060608486031215612f5e57600080fd5b612f6784612bb9565b9250612f7560208501612bb9565b9150612f8360408501612bb9565b90509250925092565b600080600060608486031215612fa157600080fd5b612faa84612bb9565b925060208401359150612f8360408501612bb9565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b60208152600061301c602083018486612fbf565b949350505050565b8381526040602082015260006129bb604083018486612fbf565b8481526001600160a01b0384166020820152606060408201526000612b2b606083018486612fbf565b60006020828403121561307957600080fd5b81518015158114611da057600080fd5b60006020828403121561309b57600080fd5b5051919050565b8183823760009101908152919050565b600082516130c4818460208701612c8c565b919091019291505056fea26469706673582212200408bf040a3098a9cce7f65bb8ff06c078a2de57e9b22f0fcfc5376aec2d596d64736f6c634300081a0033", + ABI: "[{\"type\":\"constructor\",\"inputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"ASSET_HANDLER_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"DEFAULT_ADMIN_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"PAUSER_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"TSS_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"UPGRADE_INTERFACE_VERSION\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"call\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"custody\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"deposit\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"deposit\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"depositAndCall\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"depositAndCall\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"execute\",\"inputs\":[{\"name\":\"destination\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"executeRevert\",\"inputs\":[{\"name\":\"destination\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"executeWithERC20\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"getRoleAdmin\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"grantRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"hasRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"initialize\",\"inputs\":[{\"name\":\"tssAddress_\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"zetaToken_\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"admin_\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"pause\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"paused\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"proxiableUUID\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"renounceRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"callerConfirmation\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"revertWithERC20\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"revokeRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setConnector\",\"inputs\":[{\"name\":\"zetaConnector_\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setCustody\",\"inputs\":[{\"name\":\"custody_\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"supportsInterface\",\"inputs\":[{\"name\":\"interfaceId\",\"type\":\"bytes4\",\"internalType\":\"bytes4\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"tssAddress\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"unpause\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"upgradeToAndCall\",\"inputs\":[{\"name\":\"newImplementation\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"zetaConnector\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"zetaToken\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"event\",\"name\":\"Call\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"receiver\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Deposit\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"receiver\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"asset\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Executed\",\"inputs\":[{\"name\":\"destination\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ExecutedWithERC20\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Initialized\",\"inputs\":[{\"name\":\"version\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Paused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Reverted\",\"inputs\":[{\"name\":\"destination\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RevertedWithERC20\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleAdminChanged\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"previousAdminRole\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"newAdminRole\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleGranted\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleRevoked\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Unpaused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Upgraded\",\"inputs\":[{\"name\":\"implementation\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"AccessControlBadConfirmation\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"AccessControlUnauthorizedAccount\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"neededRole\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"type\":\"error\",\"name\":\"AddressEmptyCode\",\"inputs\":[{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"AddressInsufficientBalance\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"ApprovalFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ConnectorInitialized\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"CustodyInitialized\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"DepositFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ERC1967InvalidImplementation\",\"inputs\":[{\"name\":\"implementation\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"ERC1967NonPayable\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"EnforcedPause\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ExecutionFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ExpectedPause\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"FailedInnerCall\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientERC20Amount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientETHAmount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidInitialization\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NotInitializing\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NotWhitelistedInCustody\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ReentrancyGuardReentrantCall\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"SafeERC20FailedOperation\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"UUPSUnauthorizedCallContext\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"UUPSUnsupportedProxiableUUID\",\"inputs\":[{\"name\":\"slot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"type\":\"error\",\"name\":\"ZeroAddress\",\"inputs\":[]}]", + Bin: "0x60a06040523060805234801561001457600080fd5b5061001d610022565b6100d4565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100725760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146100d15780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b60805161327e6100fd60003960008181611f0601528181611f2f01526123bb015261327e6000f3fe6080604052600436106101e35760003560e01c80635c975abb11610102578063ae7a3a6f11610095578063dda79b7511610064578063dda79b751461062e578063e63ab1e91461064e578063f340fa0114610682578063f45346dc1461069557600080fd5b8063ae7a3a6f146105ae578063b8969bd4146105ce578063c0c53b8b146105ee578063d547741f1461060e57600080fd5b806391d14854116100d157806391d14854146104b7578063a217fddf1461051c578063a783c78914610531578063ad3cb1cc1461056557600080fd5b80635c975abb146104175780635d62c8601461044e5780638456cb59146104825780638c6f037f1461049757600080fd5b806335c018db1161017a5780635131ab59116101495780635131ab59146103a257806352d1902d146103c257806357bec62f146103d75780635b112591146103f757600080fd5b806335c018db1461034757806336568abe1461035a5780633f4ba83a1461037a5780634f1ef2861461038f57600080fd5b806321e093b1116101b657806321e093b11461027f578063248a9ca3146102b757806329c59b5d146103145780632f2ff15d1461032757600080fd5b806301ffc9a7146101e857806310188aef1461021d5780631b8b921d1461023f5780631cff79cd1461025f575b600080fd5b3480156101f457600080fd5b50610208610203366004612cf1565b6106b5565b60405190151581526020015b60405180910390f35b34801561022957600080fd5b5061023d610238366004612d4f565b61074e565b005b34801561024b57600080fd5b5061023d61025a366004612db3565b610842565b61027261026d366004612db3565b6108cd565b6040516102149190612e74565b34801561028b57600080fd5b5060035461029f906001600160a01b031681565b6040516001600160a01b039091168152602001610214565b3480156102c357600080fd5b506103066102d2366004612e87565b60009081527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052604090206001015490565b604051908152602001610214565b61023d610322366004612db3565b6109d0565b34801561033357600080fd5b5061023d610342366004612ea0565b610b63565b61023d610355366004612db3565b610bad565b34801561036657600080fd5b5061023d610375366004612ea0565b610d9c565b34801561038657600080fd5b5061023d610de8565b61023d61039d366004612efb565b610e1d565b3480156103ae57600080fd5b5061023d6103bd366004613002565b610e3c565b3480156103ce57600080fd5b50610306611155565b3480156103e357600080fd5b5060025461029f906001600160a01b031681565b34801561040357600080fd5b5060015461029f906001600160a01b031681565b34801561042357600080fd5b507fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff16610208565b34801561045a57600080fd5b506103067f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b981565b34801561048e57600080fd5b5061023d611184565b3480156104a357600080fd5b5061023d6104b2366004613071565b6111b6565b3480156104c357600080fd5b506102086104d2366004612ea0565b60009182527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408084206001600160a01b0393909316845291905290205460ff1690565b34801561052857600080fd5b50610306600081565b34801561053d57600080fd5b506103067f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb81565b34801561057157600080fd5b506102726040518060400160405280600581526020017f352e302e3000000000000000000000000000000000000000000000000000000081525081565b3480156105ba57600080fd5b5061023d6105c9366004612d4f565b6112cc565b3480156105da57600080fd5b5061023d6105e9366004613002565b6113c0565b3480156105fa57600080fd5b5061023d6106093660046130c3565b611579565b34801561061a57600080fd5b5061023d610629366004612ea0565b61182e565b34801561063a57600080fd5b5060005461029f906001600160a01b031681565b34801561065a57600080fd5b506103067f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b61023d610690366004612d4f565b611872565b3480156106a157600080fd5b5061023d6106b0366004613106565b611a07565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061074857507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b600061075981611b02565b6001600160a01b038216610799576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002546001600160a01b0316156107dc576040517f0c8dc01600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6108067f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b983611b0c565b5050600280547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b61084a611bf9565b610852611c57565b826001600160a01b0316336001600160a01b03167f2a21062ee9199c2e205622999eeb7c3da73153674f36a0acd3f74fa6af67bde38484604051610897929190613182565b60405180910390a36108c860017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b505050565b60607f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb6108f981611b02565b610901611bf9565b610909611c57565b6001600160a01b038516610949576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610956868686611cfe565b9050856001600160a01b03167fcaf938de11c367272220bfd1d2baa99ca46665e7bc4d85f00adb51b90fe1fa9f3487876040516109959392919061319e565b60405180910390a291506109c860017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b509392505050565b6109d8611bf9565b6109e0611c57565b34600003610a1a576040517f7671265e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038316610a5a576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546040516000916001600160a01b03169034908381818185875af1925050503d8060008114610aa7576040519150601f19603f3d011682016040523d82523d6000602084013e610aac565b606091505b5050905080610ae7576040517f79cacff100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b836001600160a01b0316336001600160a01b03167f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a43460008787604051610b3194939291906131b8565b60405180910390a3506108c860017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020526040902060010154610b9d81611b02565b610ba78383611b0c565b50505050565b7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb610bd781611b02565b610bdf611bf9565b610be7611c57565b6001600160a01b038416610c27576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000846001600160a01b03163460405160006040518083038185875af1925050503d8060008114610c74576040519150601f19603f3d011682016040523d82523d6000602084013e610c79565b606091505b5050905080610cb4576040517facfdb44400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f8fcaa0b50000000000000000000000000000000000000000000000000000000081526001600160a01b03861690638fcaa0b590610cfb9087908790600401613182565b600060405180830381600087803b158015610d1557600080fd5b505af1158015610d29573d6000803e3d6000fd5b50505050846001600160a01b03167fd5d7616b1678354a0dea9d7e57e6a090bff5babe9f8d6381fdbad16e89ba311c348686604051610d6a9392919061319e565b60405180910390a250610ba760017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b6001600160a01b0381163314610dde576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6108c88282611da7565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610e1281611b02565b610e1a611e6b565b50565b610e25611efb565b610e2e82611fcb565b610e388282611fd6565b5050565b7f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b9610e6681611b02565b610e6e611bf9565b610e76611c57565b83600003610eb0576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038516610ef0576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610efa86866120fa565b610f30576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b0386811660048301526024820186905287169063095ea7b3906044016020604051808303816000875af1158015610f98573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fbc91906131e1565b610ff2576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610ffd858484611cfe565b5061100886866120fa565b61103e576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201526000906001600160a01b038816906370a0823190602401602060405180830381865afa15801561109e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110c29190613203565b905080156110d4576110d4878261218a565b856001600160a01b0316876001600160a01b03167f29c40793bffd84cb810179f15d1ceec72bc7f0785514c668ba36645cf99b738287878760405161111b9392919061319e565b60405180910390a35061114d60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b505050505050565b600061115f6123b0565b507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc90565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a6111ae81611b02565b610e1a612412565b6111be611bf9565b6111c6611c57565b83600003611200576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038516611240576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61124b33848661248b565b846001600160a01b0316336001600160a01b03167f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a48686868660405161129494939291906131b8565b60405180910390a36112c560017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b5050505050565b60006112d781611b02565b6001600160a01b038216611317576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000546001600160a01b03161561135a576040517fb337f37800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6113847f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b983611b0c565b5050600080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b7f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b96113ea81611b02565b6113f2611bf9565b6113fa611c57565b83600003611434576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038516611474576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6114886001600160a01b03871686866126d1565b6040517f8fcaa0b50000000000000000000000000000000000000000000000000000000081526001600160a01b03861690638fcaa0b5906114cf9086908690600401613182565b600060405180830381600087803b1580156114e957600080fd5b505af11580156114fd573d6000803e3d6000fd5b50505050846001600160a01b0316866001600160a01b03167f723fc7be2448075379e4fdf1e6bf5fead954d2668d2da05dcb44ccfec4beeda78686866040516115489392919061319e565b60405180910390a361114d60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156115c45750825b905060008267ffffffffffffffff1660011480156115e15750303b155b9050811580156115ef575080155b15611626576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84547fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000016600117855583156116875784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff16680100000000000000001785555b6001600160a01b03881615806116a457506001600160a01b038716155b156116db576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6116e3612745565b6116eb61274d565b6116f3612745565b6116fb61275d565b611706600087611b0c565b506117317f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a87611b0c565b50600180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b038a1617905561178f7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb89611b0c565b50600380547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03891617905583156118245784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b5050505050505050565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052604090206001015461186881611b02565b610ba78383611da7565b61187a611bf9565b611882611c57565b346000036118bc576040517f7671265e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b0381166118fc576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546040516000916001600160a01b03169034908381818185875af1925050503d8060008114611949576040519150601f19603f3d011682016040523d82523d6000602084013e61194e565b606091505b5050905080611989576040517f79cacff100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60408051348152600060208201819052606082840181905282015290516001600160a01b0384169133917f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a49181900360800190a350610e1a60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b611a0f611bf9565b611a17611c57565b81600003611a51576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038316611a91576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611a9c33828461248b565b826001600160a01b0316336001600160a01b03167f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a484846040516108979291909182526001600160a01b0316602082015260606040820181905260009082015260800190565b610e1a813361276d565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff16611bef576000848152602082815260408083206001600160a01b0387168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055611ba53390565b6001600160a01b0316836001600160a01b0316857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a46001915050610748565b6000915050610748565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff1615611c55576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0080547ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01611cd2576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60029055565b60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b6060600080856001600160a01b0316348686604051611d1e92919061321c565b60006040518083038185875af1925050503d8060008114611d5b576040519150601f19603f3d011682016040523d82523d6000602084013e611d60565b606091505b509150915081611d9c576040517facfdb44400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b9150505b9392505050565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff1615611bef576000848152602082815260408083206001600160a01b038716808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339287917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a46001915050610748565b611e736127fa565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001681557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a150565b306001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161480611f9457507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316611f887f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b6001600160a01b031614155b15611c55576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610e3881611b02565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa92505050801561204e575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820190925261204b91810190613203565b60015b612094576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b03831660048201526024015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc81146120f0576040517faa1d49a40000000000000000000000000000000000000000000000000000000081526004810182905260240161208b565b6108c88383612855565b6040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b038281166004830152600060248301819052919084169063095ea7b3906044016020604051808303816000875af1158015612166573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611da091906131e1565b6003546001600160a01b03908116908316036122d9576002546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152602481018390529083169063095ea7b3906044016020604051808303816000875af115801561220c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061223091906131e1565b612266576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002546040517f743e0c9b000000000000000000000000000000000000000000000000000000008152600481018390526001600160a01b039091169063743e0c9b90602401600060405180830381600087803b1580156122c557600080fd5b505af115801561114d573d6000803e3d6000fd5b6000546040517fd936547e0000000000000000000000000000000000000000000000000000000081526001600160a01b0384811660048301529091169063d936547e90602401602060405180830381865afa15801561233c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061236091906131e1565b612396576040517fac2175f100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600054610e38906001600160a01b038481169116836126d1565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614611c55576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61241a611bf9565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011781557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25833611edd565b6003546001600160a01b03908116908316036125f8576124b66001600160a01b0383168430846128ab565b6002546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152602481018390529083169063095ea7b3906044016020604051808303816000875af1158015612522573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061254691906131e1565b61257c576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002546040517f743e0c9b000000000000000000000000000000000000000000000000000000008152600481018390526001600160a01b039091169063743e0c9b90602401600060405180830381600087803b1580156125db57600080fd5b505af11580156125ef573d6000803e3d6000fd5b50505050505050565b6000546040517fd936547e0000000000000000000000000000000000000000000000000000000081526001600160a01b0384811660048301529091169063d936547e90602401602060405180830381865afa15801561265b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061267f91906131e1565b6126b5576040517fac2175f100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000546108c8906001600160a01b0384811691869116846128ab565b6040516001600160a01b038381166024830152604482018390526108c891859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506128e4565b611c55612960565b612755612960565b611c556129c7565b612765612960565b611c556129cf565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408083206001600160a01b038516845290915290205460ff16610e38576040517fe2517d3f0000000000000000000000000000000000000000000000000000000081526001600160a01b03821660048201526024810183905260440161208b565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff16611c55576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61285e82612a20565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a28051156128a3576108c88282612ac8565b610e38612b3e565b6040516001600160a01b038481166024830152838116604483015260648201839052610ba79186918216906323b872dd906084016126fe565b60006128f96001600160a01b03841683612b76565b9050805160001415801561291e57508080602001905181019061291c91906131e1565b155b156108c8576040517f5274afe70000000000000000000000000000000000000000000000000000000081526001600160a01b038416600482015260240161208b565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff16611c55576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611cd8612960565b6129d7612960565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055565b806001600160a01b03163b600003612a6f576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b038216600482015260240161208b565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6060600080846001600160a01b031684604051612ae5919061322c565b600060405180830381855af49150503d8060008114612b20576040519150601f19603f3d011682016040523d82523d6000602084013e612b25565b606091505b5091509150612b35858383612b84565b95945050505050565b3415611c55576040517fb398979f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6060611da083836000612bf9565b606082612b9957612b9482612caf565b611da0565b8151158015612bb057506001600160a01b0384163b155b15612bf2576040517f9996b3150000000000000000000000000000000000000000000000000000000081526001600160a01b038516600482015260240161208b565b5080611da0565b606081471015612c37576040517fcd78605900000000000000000000000000000000000000000000000000000000815230600482015260240161208b565b600080856001600160a01b03168486604051612c53919061322c565b60006040518083038185875af1925050503d8060008114612c90576040519150601f19603f3d011682016040523d82523d6000602084013e612c95565b606091505b5091509150612ca5868383612b84565b9695505050505050565b805115612cbf5780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060208284031215612d0357600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114611da057600080fd5b80356001600160a01b0381168114612d4a57600080fd5b919050565b600060208284031215612d6157600080fd5b611da082612d33565b60008083601f840112612d7c57600080fd5b50813567ffffffffffffffff811115612d9457600080fd5b602083019150836020828501011115612dac57600080fd5b9250929050565b600080600060408486031215612dc857600080fd5b612dd184612d33565b9250602084013567ffffffffffffffff811115612ded57600080fd5b612df986828701612d6a565b9497909650939450505050565b60005b83811015612e21578181015183820152602001612e09565b50506000910152565b60008151808452612e42816020860160208601612e06565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000611da06020830184612e2a565b600060208284031215612e9957600080fd5b5035919050565b60008060408385031215612eb357600080fd5b82359150612ec360208401612d33565b90509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60008060408385031215612f0e57600080fd5b612f1783612d33565b9150602083013567ffffffffffffffff811115612f3357600080fd5b8301601f81018513612f4457600080fd5b803567ffffffffffffffff811115612f5e57612f5e612ecc565b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8501160116810181811067ffffffffffffffff82111715612fca57612fca612ecc565b604052818152828201602001871015612fe257600080fd5b816020840160208301376000602083830101528093505050509250929050565b60008060008060006080868803121561301a57600080fd5b61302386612d33565b945061303160208701612d33565b935060408601359250606086013567ffffffffffffffff81111561305457600080fd5b61306088828901612d6a565b969995985093965092949392505050565b60008060008060006080868803121561308957600080fd5b61309286612d33565b9450602086013593506130a760408701612d33565b9250606086013567ffffffffffffffff81111561305457600080fd5b6000806000606084860312156130d857600080fd5b6130e184612d33565b92506130ef60208501612d33565b91506130fd60408501612d33565b90509250925092565b60008060006060848603121561311b57600080fd5b61312484612d33565b9250602084013591506130fd60408501612d33565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b602081526000613196602083018486613139565b949350505050565b838152604060208201526000612b35604083018486613139565b8481526001600160a01b0384166020820152606060408201526000612ca5606083018486613139565b6000602082840312156131f357600080fd5b81518015158114611da057600080fd5b60006020828403121561321557600080fd5b5051919050565b8183823760009101908152919050565b6000825161323e818460208701612e06565b919091019291505056fea26469706673582212200a52884ba895ee02e7bedb4efa2b0b5651b56a4a1ec71f83b2704f710c1e97c664736f6c634300081a0033", } // GatewayEVMABI is the input ABI used to generate the binding from. diff --git a/v2/pkg/gatewayevm.t.sol/gatewayevminboundtest.go b/v2/pkg/gatewayevm.t.sol/gatewayevminboundtest.go index 24986cb9..5362c614 100644 --- a/v2/pkg/gatewayevm.t.sol/gatewayevminboundtest.go +++ b/v2/pkg/gatewayevm.t.sol/gatewayevminboundtest.go @@ -49,8 +49,8 @@ type StdInvariantFuzzSelector struct { // GatewayEVMInboundTestMetaData contains all meta data concerning the GatewayEVMInboundTest contract. var GatewayEVMInboundTestMetaData = &bind.MetaData{ - ABI: "[{\"type\":\"function\",\"name\":\"IS_TEST\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeArtifacts\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedArtifacts_\",\"type\":\"string[]\",\"internalType\":\"string[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeContracts\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedContracts_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeSelectors\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedSelectors_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzSelector[]\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"selectors\",\"type\":\"bytes4[]\",\"internalType\":\"bytes4[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeSenders\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedSenders_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"failed\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"setUp\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"targetArtifactSelectors\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedArtifactSelectors_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzArtifactSelector[]\",\"components\":[{\"name\":\"artifact\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"selectors\",\"type\":\"bytes4[]\",\"internalType\":\"bytes4[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetArtifacts\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedArtifacts_\",\"type\":\"string[]\",\"internalType\":\"string[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetContracts\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedContracts_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetInterfaces\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedInterfaces_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzInterface[]\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"artifacts\",\"type\":\"string[]\",\"internalType\":\"string[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetSelectors\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedSelectors_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzSelector[]\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"selectors\",\"type\":\"bytes4[]\",\"internalType\":\"bytes4[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetSenders\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedSenders_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"testCallWithPayload\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositERC20ToCustody\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositERC20ToCustodyWithPayload\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositEthToTss\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositEthToTssWithPayload\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositZetaToConnector\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testFailDepositERC20ToCustodyIfAmountIs0\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testFailDepositERC20ToCustodyIfReceiverIsZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testFailDepositERC20ToCustodyWithPayloadIfAmountIs0\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testFailDepositERC20ToCustodyWithPayloadIfReceiverIsZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testFailDepositEthToTssIfAmountIs0\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testFailDepositEthToTssIfReceiverIsZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testFailDepositEthToTssWithPayloadIfAmountIs0\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testFailDepositEthToTssWithPayloadIfReceiverIsZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"event\",\"name\":\"Call\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"receiver\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Deposit\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"receiver\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"asset\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Executed\",\"inputs\":[{\"name\":\"destination\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ExecutedWithERC20\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedERC20\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"token\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"destination\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedNoParams\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedNonPayable\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"strs\",\"type\":\"string[]\",\"indexed\":false,\"internalType\":\"string[]\"},{\"name\":\"nums\",\"type\":\"uint256[]\",\"indexed\":false,\"internalType\":\"uint256[]\"},{\"name\":\"flag\",\"type\":\"bool\",\"indexed\":false,\"internalType\":\"bool\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedPayable\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"str\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"num\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"flag\",\"type\":\"bool\",\"indexed\":false,\"internalType\":\"bool\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedRevert\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Reverted\",\"inputs\":[{\"name\":\"destination\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RevertedWithERC20\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log\",\"inputs\":[{\"name\":\"\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_address\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_array\",\"inputs\":[{\"name\":\"val\",\"type\":\"uint256[]\",\"indexed\":false,\"internalType\":\"uint256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_array\",\"inputs\":[{\"name\":\"val\",\"type\":\"int256[]\",\"indexed\":false,\"internalType\":\"int256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_array\",\"inputs\":[{\"name\":\"val\",\"type\":\"address[]\",\"indexed\":false,\"internalType\":\"address[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_bytes\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_bytes32\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_int\",\"inputs\":[{\"name\":\"\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_address\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_array\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"uint256[]\",\"indexed\":false,\"internalType\":\"uint256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_array\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"int256[]\",\"indexed\":false,\"internalType\":\"int256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_array\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"address[]\",\"indexed\":false,\"internalType\":\"address[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_bytes\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_bytes32\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_decimal_int\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"},{\"name\":\"decimals\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_decimal_uint\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"decimals\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_int\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_string\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_uint\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_string\",\"inputs\":[{\"name\":\"\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_uint\",\"inputs\":[{\"name\":\"\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"logs\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"ApprovalFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ConnectorInitialized\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"CustodyInitialized\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"DepositFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ExecutionFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientERC20Amount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientETHAmount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZeroAddress\",\"inputs\":[]}]", - Bin: "0x6080604052600c8054600160ff199182168117909255601f80549091169091179055620f4240602855348015603357600080fd5b5061d1cb806100436000396000f3fe608060405234801561001057600080fd5b50600436106101b95760003560e01c806385226c81116100f9578063bb93f11e11610097578063e20c9f7111610071578063e20c9f71146102d2578063e306a978146102da578063f96c02df146102e2578063fa7626d4146102ea57600080fd5b8063bb93f11e146102ba578063c13d738f146102c2578063d896e261146102ca57600080fd5b8063aa030c1c116100d3578063aa030c1c1461028a578063b0464fdc14610292578063b5508aa91461029a578063ba414fa6146102a257600080fd5b806385226c8114610258578063916a17c61461026d5780639fd1e5971461028257600080fd5b80632ade3880116101665780633f7286f4116101405780633f7286f41461022b5780636459542a1461023357806366d9a9a01461023b5780637478fda01461025057600080fd5b80632ade38801461020657806330f7c04f1461021b5780633e5e3c231461022357600080fd5b80630a9254e4116101975780630a9254e4146101d85780631806a9a5146101e05780631ed7831c146101e857600080fd5b806305a898e2146101be57806306978ca3146101c85780630724d8e3146101d0575b600080fd5b6101c66102f7565b005b6101c66104ab565b6101c66105bd565b6101c6610774565b6101c6611085565b6101f061117f565b6040516101fd91906172ae565b60405180910390f35b61020e6111e1565b6040516101fd919061734a565b6101c6611323565b6101f0611790565b6101f06117f0565b6101c6611850565b610243611c4d565b6040516101fd91906174b0565b6101c6611dcf565b610260611f02565b6040516101fd919061754e565b610275611fd2565b6040516101fd91906175c5565b6101c66120cd565b6101c66122e9565b6102756124a0565b61026061259b565b6102aa61266b565b60405190151581526020016101fd565b6101c661273f565b6101c66128bf565b6101c6612a6e565b6101f0612be6565b6101c6612c46565b6101c6612f12565b601f546102aa9060ff1681565b6026546040516001600160a01b03909116602482015260019060009060440160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f84fae76000000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063f28dceb3906103ef906004016020808252600b908201527f5a65726f41646472657373000000000000000000000000000000000000000000604082015260600190565b600060405180830381600087803b15801561040957600080fd5b505af115801561041d573d6000803e3d6000fd5b50506020546023546040517f8c6f037f0000000000000000000000000000000000000000000000000000000081526001600160a01b039283169450638c6f037f9350610475926000928892911690879060040161765c565b600060405180830381600087803b15801561048f57600080fd5b505af11580156104a3573d6000803e3d6000fd5b505050505050565b6040517ff28dceb300000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f496e73756666696369656e74455448416d6f756e7400000000000000000000006044820152600090737109709ecfa91a80626ff3989d68f67f5b1dd12d9063f28dceb390606401600060405180830381600087803b15801561054157600080fd5b505af1158015610555573d6000803e3d6000fd5b50506020546026546040517ff340fa010000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201529116925063f340fa01915083906024015b6000604051808303818588803b15801561048f57600080fd5b6027546020546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039182166084820152620186a092919091163190737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b15801561065957600080fd5b505af115801561066d573d6000803e3d6000fd5b505060265460255460408051878152600060208201819052606082840181905282015290516001600160a01b0393841695509290911692507f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a4919081900360800190a36020546026546040517ff340fa010000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015291169063f340fa019084906024016000604051808303818588803b15801561073357600080fd5b505af1158015610747573d6000803e3d6000fd5b50506027546001600160a01b031631925061076f9150610769905084846176c2565b826130b4565b505050565b602580547fffffffffffffffffffffffff00000000000000000000000000000000000000009081163017909155602680548216611234179055602780549091166156781790556040516107c6906171c1565b60408082526004908201527f746573740000000000000000000000000000000000000000000000000000000060608201526080602082018190526003908201527f54544b000000000000000000000000000000000000000000000000000000000060a082015260c001604051809103906000f08015801561084b573d6000803e3d6000fd5b50602380547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039283161790556027546040519116908190610894906171ce565b6001600160a01b03928316815291166020820152604001604051809103906000f0801580156108c7573d6000803e3d6000fd5b50602480547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039283169081178255604080518082018252600e81527f4761746577617945564d2e736f6c0000000000000000000000000000000000006020820152602754602554925190861694810194909452604484019290925290921660648201526109b8919060840160408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fc0c53b8b00000000000000000000000000000000000000000000000000000000179052613133565b601f80547fffffffffffffffffffffff0000000000000000000000000000000000000000ff166101006001600160a01b0393841681029190911791829055602080549190920483167fffffffffffffffffffffffff00000000000000000000000000000000000000009091168117909155602754602554604051929391821692911690610a44906171db565b6001600160a01b03938416815291831660208301529091166040820152606001604051809103906000f080158015610a80573d6000803e3d6000fd5b50602180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039283161790556020546024546027546025546040519385169492831693918316921690610adb906171e8565b6001600160a01b039485168152928416602084015290831660408301529091166060820152608001604051809103906000f080158015610b1f573d6000803e3d6000fd5b50602280547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039283161790556027546040517fca669fa700000000000000000000000000000000000000000000000000000000815291166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015610bbd57600080fd5b505af1158015610bd1573d6000803e3d6000fd5b5050602480546027546022546040517f15d57fd40000000000000000000000000000000000000000000000000000000081526001600160a01b039283166004820152908216938101939093521692506315d57fd49150604401600060405180830381600087803b158015610c4457600080fd5b505af1158015610c58573d6000803e3d6000fd5b50506027546040517fc88a5e6d0000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152670de0b6b3a76400006024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c88a5e6d9150604401600060405180830381600087803b158015610cdc57600080fd5b505af1158015610cf0573d6000803e3d6000fd5b50506025546040517f06447d560000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506306447d569150602401600060405180830381600087803b158015610d6657600080fd5b505af1158015610d7a573d6000803e3d6000fd5b50506020546021546040517fae7a3a6f0000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201529116925063ae7a3a6f9150602401600060405180830381600087803b158015610de057600080fd5b505af1158015610df4573d6000803e3d6000fd5b50506020546022546040517f10188aef0000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152911692506310188aef9150602401600060405180830381600087803b158015610e5a57600080fd5b505af1158015610e6e573d6000803e3d6000fd5b505050507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b03166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610ed057600080fd5b505af1158015610ee4573d6000803e3d6000fd5b50506023546025546028546040517f40c10f190000000000000000000000000000000000000000000000000000000081526001600160a01b0392831660048201526024810191909152911692506340c10f199150604401600060405180830381600087803b158015610f5557600080fd5b505af1158015610f69573d6000803e3d6000fd5b50506027546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b158015610fdf57600080fd5b505af1158015610ff3573d6000803e3d6000fd5b50506022546025546028546040517f106e62900000000000000000000000000000000000000000000000000000000081526001600160a01b0392831660048201526024810191909152600060448201529116925063106e62909150606401600060405180830381600087803b15801561106b57600080fd5b505af115801561107f573d6000803e3d6000fd5b50505050565b6040517ff28dceb300000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f5a65726f416464726573730000000000000000000000000000000000000000006044820152600190737109709ecfa91a80626ff3989d68f67f5b1dd12d9063f28dceb390606401600060405180830381600087803b15801561111b57600080fd5b505af115801561112f573d6000803e3d6000fd5b50506020546040517ff340fa01000000000000000000000000000000000000000000000000000000008152600060048201526001600160a01b03909116925063f340fa01915083906024016105a4565b606060168054806020026020016040519081016040528092919081815260200182805480156111d757602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116111b9575b5050505050905090565b6060601e805480602002602001604051908101604052809291908181526020016000905b8282101561131a57600084815260208082206040805180820182526002870290920180546001600160a01b03168352600181018054835181870281018701909452808452939591948681019491929084015b82821015611303578382906000526020600020018054611276906176d5565b80601f01602080910402602001604051908101604052809291908181526020018280546112a2906176d5565b80156112ef5780601f106112c4576101008083540402835291602001916112ef565b820191906000526020600020905b8154815290600101906020018083116112d257829003601f168201915b505050505081526020019060010190611257565b505050508152505081526020019060010190611205565b50505050905090565b6023546021546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620186a09260009216906370a0823190602401602060405180830381865afa15801561138f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113b39190617722565b90506113c06000826130b4565b6026546040516001600160a01b03909116602482015260009060440160408051601f19818403018152918152602080830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f84fae76000000000000000000000000000000000000000000000000000000000179052602354905491517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b03928316600482015260248101879052929350169063095ea7b3906044016020604051808303816000875af11580156114a3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114c7919061773b565b506020546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b15801561155657600080fd5b505af115801561156a573d6000803e3d6000fd5b50506026546025546023546040516001600160a01b03938416955091831693507f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a4926115bd92899290911690879061775d565b60405180910390a36020546026546023546040517f8c6f037f0000000000000000000000000000000000000000000000000000000081526001600160a01b0393841693638c6f037f9361161e9390821692899290911690879060040161765c565b600060405180830381600087803b15801561163857600080fd5b505af115801561164c573d6000803e3d6000fd5b50506023546021546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260009450911691506370a0823190602401602060405180830381865afa1580156116b8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116dc9190617722565b90506116e884826130b4565b6023546025546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260009291909116906370a0823190602401602060405180830381865afa158015611752573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117769190617722565b9050611789856028546107699190617785565b5050505050565b606060188054806020026020016040519081016040528092919081815260200182805480156111d7576020028201919060005260206000209081546001600160a01b031681526001909101906020018083116111b9575050505050905090565b606060178054806020026020016040519081016040528092919081815260200182805480156111d7576020028201919060005260206000209081546001600160a01b031681526001909101906020018083116111b9575050505050905090565b6023546021546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620186a09260009216906370a0823190602401602060405180830381865afa1580156118bc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118e09190617722565b90506118ed6000826130b4565b6023546020546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201526024810185905291169063095ea7b3906044016020604051808303816000875af115801561195b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061197f919061773b565b506020546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b158015611a0e57600080fd5b505af1158015611a22573d6000803e3d6000fd5b5050602654602554602354604080518881526001600160a01b039283166020820152606081830181905260009082015290519382169550911692507f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a4919081900360800190a36020546026546023546040517ff45346dc0000000000000000000000000000000000000000000000000000000081526001600160a01b03928316600482015260248101869052908216604482015291169063f45346dc90606401600060405180830381600087803b158015611afc57600080fd5b505af1158015611b10573d6000803e3d6000fd5b50506023546021546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260009450911691506370a0823190602401602060405180830381865afa158015611b7c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ba09190617722565b9050611bac83826130b4565b6023546025546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260009291909116906370a0823190602401602060405180830381865afa158015611c16573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c3a9190617722565b905061107f846028546107699190617785565b6060601b805480602002602001604051908101604052809291908181526020016000905b8282101561131a5783829060005260206000209060020201604051806040016040529081600082018054611ca4906176d5565b80601f0160208091040260200160405190810160405280929190818152602001828054611cd0906176d5565b8015611d1d5780601f10611cf257610100808354040283529160200191611d1d565b820191906000526020600020905b815481529060010190602001808311611d0057829003601f168201915b5050505050815260200160018201805480602002602001604051908101604052809291908181526020018280548015611db757602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019060040190602082600301049283019260010382029150808411611d645790505b50505050508152505081526020019060010190611c71565b6040517ff28dceb300000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f5a65726f416464726573730000000000000000000000000000000000000000006044820152600190737109709ecfa91a80626ff3989d68f67f5b1dd12d9063f28dceb390606401600060405180830381600087803b158015611e6557600080fd5b505af1158015611e79573d6000803e3d6000fd5b50506020546023546040517ff45346dc00000000000000000000000000000000000000000000000000000000815260006004820152602481018690526001600160a01b0391821660448201529116925063f45346dc91506064015b600060405180830381600087803b158015611eee57600080fd5b505af1158015611789573d6000803e3d6000fd5b6060601a805480602002602001604051908101604052809291908181526020016000905b8282101561131a578382906000526020600020018054611f45906176d5565b80601f0160208091040260200160405190810160405280929190818152602001828054611f71906176d5565b8015611fbe5780601f10611f9357610100808354040283529160200191611fbe565b820191906000526020600020905b815481529060010190602001808311611fa157829003601f168201915b505050505081526020019060010190611f26565b6060601d805480602002602001604051908101604052809291908181526020016000905b8282101561131a5760008481526020908190206040805180820182526002860290920180546001600160a01b031683526001810180548351818702810187019094528084529394919385830193928301828280156120b557602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190600401906020826003010492830192600103820291508084116120625790505b50505050508152505081526020019060010190611ff6565b6027546026546040516001600160a01b039182166024820152620186a09291909116319060009060440160408051601f19818403018152918152602080830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f84fae760000000000000000000000000000000000000000000000000000000001790525490517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b1580156121de57600080fd5b505af11580156121f2573d6000803e3d6000fd5b50506026546025546040516001600160a01b039283169450911691507f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a490612240908790600090879061775d565b60405180910390a36020546026546040517f29c59b5d0000000000000000000000000000000000000000000000000000000081526001600160a01b03928316926329c59b5d92879261229a92909116908690600401617798565b6000604051808303818588803b1580156122b357600080fd5b505af11580156122c7573d6000803e3d6000fd5b50506027546001600160a01b031631925061107f9150610769905085856176c2565b6026546040516001600160a01b03909116602482015260009060440160408051601f19818403018152918152602080830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f84fae760000000000000000000000000000000000000000000000000000000001790525490517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b1580156123ec57600080fd5b505af1158015612400573d6000803e3d6000fd5b50506026546025546040516001600160a01b039283169450911691507f2a21062ee9199c2e205622999eeb7c3da73153674f36a0acd3f74fa6af67bde3906124499085906177ba565b60405180910390a36020546026546040517f1b8b921d0000000000000000000000000000000000000000000000000000000081526001600160a01b0392831692631b8b921d92611ed4929116908590600401617798565b6060601c805480602002602001604051908101604052809291908181526020016000905b8282101561131a5760008481526020908190206040805180820182526002860290920180546001600160a01b0316835260018101805483518187028101870190945280845293949193858301939283018282801561258357602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190600401906020826003010492830192600103820291508084116125305790505b505050505081525050815260200190600101906124c4565b60606019805480602002602001604051908101604052809291908181526020016000905b8282101561131a5783829060005260206000200180546125de906176d5565b80601f016020809104026020016040519081016040528092919081815260200182805461260a906176d5565b80156126575780601f1061262c57610100808354040283529160200191612657565b820191906000526020600020905b81548152906001019060200180831161263a57829003601f168201915b5050505050815260200190600101906125bf565b60085460009060ff1615612683575060085460ff1690565b6040517f667f9d70000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d600482018190527f6661696c65640000000000000000000000000000000000000000000000000000602483015260009163667f9d7090604401602060405180830381865afa158015612714573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127389190617722565b1415905090565b6026546040516001600160a01b039091166024820152600090819060440160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f84fae76000000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063f28dceb3906128369060040160208082526017908201527f496e73756666696369656e744552433230416d6f756e74000000000000000000604082015260600190565b600060405180830381600087803b15801561285057600080fd5b505af1158015612864573d6000803e3d6000fd5b50506020546026546023546040517f8c6f037f0000000000000000000000000000000000000000000000000000000081526001600160a01b039384169550638c6f037f9450610475939283169288921690879060040161765c565b6026546040516001600160a01b039091166024820152600090819060440160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f84fae76000000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063f28dceb3906129b69060040160208082526015908201527f496e73756666696369656e74455448416d6f756e740000000000000000000000604082015260600190565b600060405180830381600087803b1580156129d057600080fd5b505af11580156129e4573d6000803e3d6000fd5b50506020546026546040517f29c59b5d0000000000000000000000000000000000000000000000000000000081526001600160a01b0392831694506329c59b5d93508692612a389216908690600401617798565b6000604051808303818588803b158015612a5157600080fd5b505af1158015612a65573d6000803e3d6000fd5b50505050505050565b6026546040516001600160a01b03909116602482015260019060009060440160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f84fae76000000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063f28dceb390612b66906004016020808252600b908201527f5a65726f41646472657373000000000000000000000000000000000000000000604082015260600190565b600060405180830381600087803b158015612b8057600080fd5b505af1158015612b94573d6000803e3d6000fd5b50506020546040517f29c59b5d0000000000000000000000000000000000000000000000000000000081526001600160a01b0390911692506329c59b5d91508490612a38906000908690600401617798565b606060158054806020026020016040519081016040528092919081815260200182805480156111d7576020028201919060005260206000209081546001600160a01b031681526001909101906020018083116111b9575050505050905090565b602480546020546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620186a093810184905291169063095ea7b3906044016020604051808303816000875af1158015612cb8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612cdc919061773b565b506020546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b158015612d6b57600080fd5b505af1158015612d7f573d6000803e3d6000fd5b5050602654602554602454604080518781526001600160a01b039283166020820152606081830181905260009082015290519382169550911692507f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a4919081900360800190a3602054602654602480546040517ff45346dc0000000000000000000000000000000000000000000000000000000081526001600160a01b0393841660048201529182018590528216604482015291169063f45346dc90606401600060405180830381600087803b158015612e5857600080fd5b505af1158015612e6c573d6000803e3d6000fd5b5050602480546025546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260009550911692506370a082319101602060405180830381865afa158015612ed7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612efb9190617722565b9050612f0e826028546107699190617785565b5050565b6023546020546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260006024820181905292919091169063095ea7b3906044016020604051808303816000875af1158015612f85573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612fa9919061773b565b506040517ff28dceb300000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f496e73756666696369656e744552433230416d6f756e740000000000000000006044820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063f28dceb390606401600060405180830381600087803b15801561303d57600080fd5b505af1158015613051573d6000803e3d6000fd5b50506020546026546023546040517ff45346dc0000000000000000000000000000000000000000000000000000000081526001600160a01b0392831660048201526024810187905290821660448201529116925063f45346dc9150606401611ed4565b6040517f98296c540000000000000000000000000000000000000000000000000000000081526004810183905260248101829052737109709ecfa91a80626ff3989d68f67f5b1dd12d906398296c549060440160006040518083038186803b15801561311f57600080fd5b505afa1580156104a3573d6000803e3d6000fd5b600061313d6171f5565b613148848483613152565b9150505b92915050565b60008061315f85846131cd565b90506131c26040518060400160405280601d81526020017f4552433139363750726f78792e736f6c3a4552433139363750726f787900000081525082866040516020016131ad929190617798565b604051602081830303815290604052856131d9565b9150505b9392505050565b60006131c68383613207565b60c081015151600090156131fd576131f684848460c00151613222565b90506131c6565b6131f684846133c8565b600061321383836134b3565b6131c6838360200151846131d9565b60008061322d6134bf565b9050600061323b8683613592565b905060006132528260600151836020015185613a38565b9050600061326283838989613c4a565b9050600061326f82614ac7565b602081015181519192509060030b156132e2578982604001516040516020016132999291906177cd565b60408051601f19818403018152908290527f08c379a00000000000000000000000000000000000000000000000000000000082526132d9916004016177ba565b60405180910390fd5b60006133256040518060400160405280601581526020017f4465706c6f79656420746f20616464726573733a200000000000000000000000815250836001614c96565b6040517fc6ce059d000000000000000000000000000000000000000000000000000000008152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c6ce059d906133789084906004016177ba565b602060405180830381865afa158015613395573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133b9919061784e565b9b9a5050505050505050505050565b6040517f8d1cc9250000000000000000000000000000000000000000000000000000000081526000908190737109709ecfa91a80626ff3989d68f67f5b1dd12d90638d1cc9259061341d9087906004016177ba565b600060405180830381865afa15801561343a573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052613462919081019061795f565b90506000613490828560405160200161347c929190617994565b604051602081830303815290604052614e96565b90506001600160a01b0381166131485784846040516020016132999291906179c3565b612f0e82826000614ea9565b604080518082018252600381527f6f75740000000000000000000000000000000000000000000000000000000000602082015290517fd145736c000000000000000000000000000000000000000000000000000000008152606091737109709ecfa91a80626ff3989d68f67f5b1dd12d91829063d145736c90613546908490600401617a6e565b600060405180830381865afa158015613563573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261358b9190810190617ab5565b9250505090565b6135c46040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b6000737109709ecfa91a80626ff3989d68f67f5b1dd12d905061360f6040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b61361885614fac565b6020820152600061362886615391565b90506000836001600160a01b031663d930a0e66040518163ffffffff1660e01b8152600401600060405180830381865afa15801561366a573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526136929190810190617ab5565b868385602001516040516020016136ac9493929190617afe565b60408051601f19818403018152908290527f60f9bb1100000000000000000000000000000000000000000000000000000000825291506000906001600160a01b038616906360f9bb11906137049085906004016177ba565b600060405180830381865afa158015613721573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526137499190810190617ab5565b6040517fdb4235f60000000000000000000000000000000000000000000000000000000081529091506001600160a01b0386169063db4235f690613791908490600401617c02565b602060405180830381865afa1580156137ae573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137d2919061773b565b6137e757816040516020016132999190617c54565b6040517f49c4fac80000000000000000000000000000000000000000000000000000000081526001600160a01b038616906349c4fac89061382c908490600401617ce6565b600060405180830381865afa158015613849573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526138719190810190617ab5565b84526040517fdb4235f60000000000000000000000000000000000000000000000000000000081526001600160a01b0386169063db4235f6906138b8908490600401617d38565b602060405180830381865afa1580156138d5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138f9919061773b565b1561398e576040517f49c4fac80000000000000000000000000000000000000000000000000000000081526001600160a01b038616906349c4fac890613943908490600401617d38565b600060405180830381865afa158015613960573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526139889190810190617ab5565b60408501525b846001600160a01b03166349c4fac88286600001516040516020016139b39190617d8a565b6040516020818303038152906040526040518363ffffffff1660e01b81526004016139df929190617df6565b600060405180830381865afa1580156139fc573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052613a249190810190617ab5565b606085015250608083015250949350505050565b60408051600480825260a0820190925260609160009190816020015b6060815260200190600190039081613a545790505090506040518060400160405280600481526020017f677265700000000000000000000000000000000000000000000000000000000081525081600081518110613ab457613ab4617e1b565b60200260200101819052506040518060400160405280600381526020017f2d726c000000000000000000000000000000000000000000000000000000000081525081600181518110613b0857613b08617e1b565b602002602001018190525084604051602001613b249190617e4a565b60405160208183030381529060405281600281518110613b4657613b46617e1b565b602002602001018190525082604051602001613b629190617eb6565b60405160208183030381529060405281600381518110613b8457613b84617e1b565b60200260200101819052506000613b9a82614ac7565b602080820151604080518082018252600581527f2e6a736f6e0000000000000000000000000000000000000000000000000000008185019081528251808401845260008082529086015282518084019093529051825292810192909252919250613c2b9060408051808201825260008082526020918201528151808301909252845182528085019082015290615614565b613c4057856040516020016132999190617ef7565b9695505050505050565b60a0810151604080518082018252600080825260209182015281518083019092528251808352928101910152606090737109709ecfa91a80626ff3989d68f67f5b1dd12d9015613c9a565b511590565b613e0e57826020015115613d56576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605860248201527f54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f742060448201527f62652075736564207768656e207468652060736b6970566572696679536f757260648201527f6365436f646560206f7074696f6e206973206074727565600000000000000000608482015260a4016132d9565b8260c0015115613e0e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605360248201527f54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f742060448201527f62652075736564207768656e207468652060736b69704c6963656e736554797060648201527f6560206f7074696f6e2069732060747275656000000000000000000000000000608482015260a4016132d9565b6040805160ff8082526120008201909252600091816020015b6060815260200190600190039081613e2757905050905060006040518060400160405280600381526020017f6e70780000000000000000000000000000000000000000000000000000000000815250828280613e8290617f88565b935060ff1681518110613e9757613e97617e1b565b60200260200101819052506040518060400160405280600d81526020017f302e302e312d616c7068612e3700000000000000000000000000000000000000815250604051602001613ee89190617fa7565b604051602081830303815290604052828280613f0390617f88565b935060ff1681518110613f1857613f18617e1b565b60200260200101819052506040518060400160405280600681526020017f6465706c6f790000000000000000000000000000000000000000000000000000815250828280613f6590617f88565b935060ff1681518110613f7a57613f7a617e1b565b60200260200101819052506040518060400160405280600e81526020017f2d2d636f6e74726163744e616d65000000000000000000000000000000000000815250828280613fc790617f88565b935060ff1681518110613fdc57613fdc617e1b565b60200260200101819052508760200151828280613ff890617f88565b935060ff168151811061400d5761400d617e1b565b60200260200101819052506040518060400160405280600e81526020017f2d2d636f6e74726163745061746800000000000000000000000000000000000081525082828061405a90617f88565b935060ff168151811061406f5761406f617e1b565b60209081029190910101528751828261408781617f88565b935060ff168151811061409c5761409c617e1b565b60200260200101819052506040518060400160405280600981526020017f2d2d636861696e496400000000000000000000000000000000000000000000008152508282806140e990617f88565b935060ff16815181106140fe576140fe617e1b565b602002602001018190525061411246615675565b828261411d81617f88565b935060ff168151811061413257614132617e1b565b60200260200101819052506040518060400160405280600f81526020017f2d2d6275696c64496e666f46696c65000000000000000000000000000000000081525082828061417f90617f88565b935060ff168151811061419457614194617e1b565b6020026020010181905250868282806141ac90617f88565b935060ff16815181106141c1576141c1617e1b565b60209081029190910101528551156142e85760408051808201909152601581527f2d2d636f6e7374727563746f7242797465636f646500000000000000000000006020820152828261421281617f88565b935060ff168151811061422757614227617e1b565b60209081029190910101526040517f71aad10d0000000000000000000000000000000000000000000000000000000081526001600160a01b038416906371aad10d906142779089906004016177ba565b600060405180830381865afa158015614294573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526142bc9190810190617ab5565b82826142c781617f88565b935060ff16815181106142dc576142dc617e1b565b60200260200101819052505b8460200151156143b85760408051808201909152601281527f2d2d766572696679536f75726365436f646500000000000000000000000000006020820152828261433181617f88565b935060ff168151811061434657614346617e1b565b60200260200101819052506040518060400160405280600581526020017f66616c736500000000000000000000000000000000000000000000000000000081525082828061439390617f88565b935060ff16815181106143a8576143a8617e1b565b602002602001018190525061457f565b6143f0613c958660a0015160408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6144835760408051808201909152600d81527f2d2d6c6963656e736554797065000000000000000000000000000000000000006020820152828261443381617f88565b935060ff168151811061444857614448617e1b565b60200260200101819052508460a001516040516020016144689190617e4a565b60405160208183030381529060405282828061439390617f88565b8460c001511580156144c65750604080890151815180830183526000808252602091820152825180840190935281518352908101908201526144c490511590565b155b1561457f5760408051808201909152600d81527f2d2d6c6963656e736554797065000000000000000000000000000000000000006020820152828261450a81617f88565b935060ff168151811061451f5761451f617e1b565b602002602001018190525061453388615715565b6040516020016145439190617e4a565b60405160208183030381529060405282828061455e90617f88565b935060ff168151811061457357614573617e1b565b60200260200101819052505b604080860151815180830183526000808252602091820152825180840190935281518352908101908201526145b390511590565b6146485760408051808201909152600b81527f2d2d72656c617965724964000000000000000000000000000000000000000000602082015282826145f681617f88565b935060ff168151811061460b5761460b617e1b565b6020026020010181905250846040015182828061462790617f88565b935060ff168151811061463c5761463c617e1b565b60200260200101819052505b6060850151156147695760408051808201909152600681527f2d2d73616c7400000000000000000000000000000000000000000000000000006020820152828261469181617f88565b935060ff16815181106146a6576146a6617e1b565b602090810291909101015260608501516040517fb11a19e800000000000000000000000000000000000000000000000000000000815260048101919091526001600160a01b0384169063b11a19e890602401600060405180830381865afa158015614715573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261473d9190810190617ab5565b828261474881617f88565b935060ff168151811061475d5761475d617e1b565b60200260200101819052505b60e085015151156148105760408051808201909152600a81527f2d2d6761734c696d697400000000000000000000000000000000000000000000602082015282826147b381617f88565b935060ff16815181106147c8576147c8617e1b565b60200260200101819052506147e48560e0015160000151615675565b82826147ef81617f88565b935060ff168151811061480457614804617e1b565b60200260200101819052505b60e085015160200151156148ba5760408051808201909152600a81527f2d2d6761735072696365000000000000000000000000000000000000000000006020820152828261485d81617f88565b935060ff168151811061487257614872617e1b565b602002602001018190525061488e8560e0015160200151615675565b828261489981617f88565b935060ff16815181106148ae576148ae617e1b565b60200260200101819052505b60e085015160400151156149645760408051808201909152600e81527f2d2d6d61784665655065724761730000000000000000000000000000000000006020820152828261490781617f88565b935060ff168151811061491c5761491c617e1b565b60200260200101819052506149388560e0015160400151615675565b828261494381617f88565b935060ff168151811061495857614958617e1b565b60200260200101819052505b60e08501516060015115614a0e5760408051808201909152601681527f2d2d6d61785072696f7269747946656550657247617300000000000000000000602082015282826149b181617f88565b935060ff16815181106149c6576149c6617e1b565b60200260200101819052506149e28560e0015160600151615675565b82826149ed81617f88565b935060ff1681518110614a0257614a02617e1b565b60200260200101819052505b60008160ff1667ffffffffffffffff811115614a2c57614a2c617877565b604051908082528060200260200182016040528015614a5f57816020015b6060815260200190600190039081614a4a5790505b50905060005b8260ff168160ff161015614ab857838160ff1681518110614a8857614a88617e1b565b6020026020010151828260ff1681518110614aa557614aa5617e1b565b6020908102919091010152600101614a65565b5093505050505b949350505050565b614aee6040518060600160405280600060030b815260200160608152602001606081525090565b60408051808201825260048082527f6261736800000000000000000000000000000000000000000000000000000000602083015291517fd145736c000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d92600091849163d145736c91614b7491869101618012565b600060405180830381865afa158015614b91573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052614bb99190810190617ab5565b90506000614bc78683616204565b90506000846001600160a01b031663f45c1ce7836040518263ffffffff1660e01b8152600401614bf7919061754e565b6000604051808303816000875af1158015614c16573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052614c3e9190810190618059565b805190915060030b15801590614c575750602081015151155b8015614c665750604081015151155b15613c405781600081518110614c7e57614c7e617e1b565b6020026020010151604051602001613299919061810f565b60606000614ccb8560408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600080825260209182015281518083019092528651825280870190820152909150614d029082905b90616359565b15614e5f576000614d7f82614d7984614d73614d458a60408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6040805180820182526000808252602091820152815180830190925282518252918201519181019190915290565b90616380565b906163e2565b604080518082018252600181527f0a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152909150614de3908290616359565b15614e4d57604080518082018252600181527f0a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152614e4a905b8290616467565b90505b614e568161648d565b925050506131c6565b8215614e785784846040516020016132999291906182fb565b50506040805160208101909152600081526131c6565b509392505050565b6000808251602084016000f09392505050565b8160a0015115614eb857505050565b6000614ec58484846164f6565b90506000614ed282614ac7565b602081015181519192509060030b158015614f6e5750604080518082018252600781527f535543434553530000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152614f6e90604080518082018252600080825260209182015281518083019092528451825280850190820152614cfc565b15614f7b57505050505050565b60408201515115614f9b57816040015160405160200161329991906183a2565b806040516020016132999190618400565b60606000614fe18360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600481527f2e736f6c0000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152909150615046905b8290615614565b156150b557604080518082018252600481527f2e736f6c00000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526131c6906150b0908390616a91565b61648d565b604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152615117905b8290616b1b565b6001036151e457604080518082018252600181527f3a000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261517d90614e43565b50604080518082018252600181527f3a00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526131c6906150b0905b8390616467565b604080518082018252600581527f2e6a736f6e000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526152439061503f565b1561537a57604080518082018252600181527f2f000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201819052845180860190955292518452830152906152ab908390616bb5565b9050600081600183516152be9190617785565b815181106152ce576152ce617e1b565b602002602001015190506153716150b06153446040518060400160405280600581526020017f2e6a736f6e00000000000000000000000000000000000000000000000000000081525060408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b60408051808201825260008082526020918201528151808301909252855182528086019082015290616a91565b95945050505050565b82604051602001613299919061846b565b50919050565b606060006153c68360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600481527f2e736f6c00000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201529091506154289061503f565b15615436576131c68161648d565b604080518082018252600181527f3a000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261549590615110565b6001036154ff57604080518082018252600181527f3a00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526131c6906150b0906151dd565b604080518082018252600581527f2e6a736f6e0000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261555e9061503f565b1561537a57604080518082018252600181527f2f000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201819052845180860190955292518452830152906155c6908390616bb5565b90506001815111156156025780600282516155e19190617785565b815181106155f1576155f1617e1b565b602002602001015192505050919050565b5082604051602001613299919061846b565b8051825160009111156156295750600061314c565b8151835160208501516000929161563f916176c2565b6156499190617785565b90508260200151810361566057600191505061314c565b82516020840151819020912014905092915050565b6060600061568283616c5a565b600101905060008167ffffffffffffffff8111156156a2576156a2617877565b6040519080825280601f01601f1916602001820160405280156156cc576020820181803683370190505b5090508181016020015b600019017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a85049450846156d657509392505050565b604081810151815180830183526000808252602091820181905283518085018552835181529282018383015283518085018552600a81527f554e4c4943454e53454400000000000000000000000000000000000000000000818401908152855180870187528381528401929092528451808601909552518452908301526060916157a1905b8290616d3c565b156157e157505060408051808201909152600481527f4e6f6e65000000000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600981527f556e6c6963656e73650000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526158409061579a565b1561588057505060408051808201909152600981527f556e6c6963656e736500000000000000000000000000000000000000000000006020820152919050565b604080518082018252600381527f4d49540000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526158df9061579a565b1561591f57505060408051808201909152600381527f4d495400000000000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f47504c2d322e302d6f6e6c7900000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261597e9061579a565b806159e35750604080518082018252601081527f47504c2d322e302d6f722d6c6174657200000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526159e39061579a565b15615a2357505060408051808201909152600981527f474e552047504c763200000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f47504c2d332e302d6f6e6c79000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152615a829061579a565b80615ae75750604080518082018252601081527f47504c2d332e302d6f722d6c617465720000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152615ae79061579a565b15615b2757505060408051808201909152600981527f474e552047504c763300000000000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4c47504c2d322e312d6f6e6c790000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152615b869061579a565b80615beb5750604080518082018252601181527f4c47504c2d322e312d6f722d6c6174657200000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152615beb9061579a565b15615c2b57505060408051808201909152600c81527f474e55204c47504c76322e3100000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4c47504c2d332e302d6f6e6c790000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152615c8a9061579a565b80615cef5750604080518082018252601181527f4c47504c2d332e302d6f722d6c6174657200000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152615cef9061579a565b15615d2f57505060408051808201909152600a81527f474e55204c47504c7633000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f4253442d322d436c61757365000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152615d8e9061579a565b15615dce57505060408051808201909152600c81527f4253442d322d436c6175736500000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f4253442d332d436c61757365000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152615e2d9061579a565b15615e6d57505060408051808201909152600c81527f4253442d332d436c6175736500000000000000000000000000000000000000006020820152919050565b604080518082018252600781527f4d504c2d322e300000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152615ecc9061579a565b15615f0c57505060408051808201909152600781527f4d504c2d322e30000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600781527f4f534c2d332e300000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152615f6b9061579a565b15615fab57505060408051808201909152600781527f4f534c2d332e30000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600a81527f4170616368652d322e30000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261600a9061579a565b1561604a57505060408051808201909152600a81527f4170616368652d322e30000000000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4147504c2d332e302d6f6e6c7900000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526160a99061579a565b8061610e5750604080518082018252601181527f4147504c2d332e302d6f722d6c617465720000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261610e9061579a565b1561614e57505060408051808201909152600a81527f474e55204147504c7633000000000000000000000000000000000000000000006020820152919050565b604080518082018252600881527f4255534c2d312e31000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526161ad9061579a565b156161ed57505060408051808201909152600781527f42534c20312e31000000000000000000000000000000000000000000000000006020820152919050565b604080840151845191516132999290602001618549565b60608060005b845181101561628f578185828151811061622657616226617e1b565b602002602001015160405160200161623f929190617994565b60405160208183030381529060405291506001855161625e9190617785565b8114616287578160405160200161627591906186b2565b60405160208183030381529060405291505b60010161620a565b5060408051600380825260808201909252600091816020015b60608152602001906001900390816162a857905050905083816000815181106162d3576162d3617e1b565b60200260200101819052506040518060400160405280600281526020017f2d630000000000000000000000000000000000000000000000000000000000008152508160018151811061632757616327617e1b565b6020026020010181905250818160028151811061634657616346617e1b565b6020908102919091010152949350505050565b60208083015183518351928401516000936163779291849190616d50565b14159392505050565b604080518082019091526000808252602082015260006163b28460000151856020015185600001518660200151616e61565b90508360200151816163c49190617785565b845185906163d3908390617785565b90525060208401525090919050565b604080518082019091526000808252602082015281518351101561640757508161314c565b602080830151908401516001911461642e5750815160208481015190840151829020919020145b801561645f57825184518590616445908390617785565b905250825160208501805161645b9083906176c2565b9052505b509192915050565b6040805180820190915260008082526020820152616486838383616f81565b5092915050565b60606000826000015167ffffffffffffffff8111156164ae576164ae617877565b6040519080825280601f01601f1916602001820160405280156164d8576020820181803683370190505b5090506000602082019050616486818560200151866000015161702c565b606060006165026134bf565b6040805160ff808252612000820190925291925060009190816020015b606081526020019060019003908161651f57905050905060006040518060400160405280600381526020017f6e7078000000000000000000000000000000000000000000000000000000000081525082828061657a90617f88565b935060ff168151811061658f5761658f617e1b565b60200260200101819052506040518060400160405280600781526020017f5e312e33322e33000000000000000000000000000000000000000000000000008152506040516020016165e091906186f3565b6040516020818303038152906040528282806165fb90617f88565b935060ff168151811061661057616610617e1b565b60200260200101819052506040518060400160405280600881526020017f76616c696461746500000000000000000000000000000000000000000000000081525082828061665d90617f88565b935060ff168151811061667257616672617e1b565b60200260200101819052508260405160200161668e9190617eb6565b6040516020818303038152906040528282806166a990617f88565b935060ff16815181106166be576166be617e1b565b60200260200101819052506040518060400160405280600a81526020017f2d2d636f6e74726163740000000000000000000000000000000000000000000081525082828061670b90617f88565b935060ff168151811061672057616720617e1b565b602002602001018190525061673587846170a6565b828261674081617f88565b935060ff168151811061675557616755617e1b565b6020908102919091010152855151156168015760408051808201909152600b81527f2d2d7265666572656e6365000000000000000000000000000000000000000000602082015282826167a781617f88565b935060ff16815181106167bc576167bc617e1b565b60200260200101819052506167d58660000151846170a6565b82826167e081617f88565b935060ff16815181106167f5576167f5617e1b565b60200260200101819052505b85608001511561686f5760408051808201909152601881527f2d2d756e73616665536b697053746f72616765436865636b00000000000000006020820152828261684a81617f88565b935060ff168151811061685f5761685f617e1b565b60200260200101819052506168d5565b84156168d55760408051808201909152601281527f2d2d726571756972655265666572656e63650000000000000000000000000000602082015282826168b481617f88565b935060ff16815181106168c9576168c9617e1b565b60200260200101819052505b604086015151156169715760408051808201909152600d81527f2d2d756e73616665416c6c6f77000000000000000000000000000000000000006020820152828261691f81617f88565b935060ff168151811061693457616934617e1b565b6020026020010181905250856040015182828061695090617f88565b935060ff168151811061696557616965617e1b565b60200260200101819052505b8560600151156169db5760408051808201909152601481527f2d2d756e73616665416c6c6f7752656e616d6573000000000000000000000000602082015282826169ba81617f88565b935060ff16815181106169cf576169cf617e1b565b60200260200101819052505b60008160ff1667ffffffffffffffff8111156169f9576169f9617877565b604051908082528060200260200182016040528015616a2c57816020015b6060815260200190600190039081616a175790505b50905060005b8260ff168160ff161015616a8557838160ff1681518110616a5557616a55617e1b565b6020026020010151828260ff1681518110616a7257616a72617e1b565b6020908102919091010152600101616a32565b50979650505050505050565b6040805180820190915260008082526020820152815183511015616ab657508161314c565b81518351602085015160009291616acc916176c2565b616ad69190617785565b60208401519091506001908214616af7575082516020840151819020908220145b8015616b1257835185518690616b0e908390617785565b9052505b50929392505050565b6000808260000151616b3f8560000151866020015186600001518760200151616e61565b616b4991906176c2565b90505b83516020850151616b5d91906176c2565b81116164865781616b6d81618738565b9250508260000151616ba4856020015183616b889190617785565b8651616b949190617785565b8386600001518760200151616e61565b616bae91906176c2565b9050616b4c565b60606000616bc38484616b1b565b616bce9060016176c2565b67ffffffffffffffff811115616be657616be6617877565b604051908082528060200260200182016040528015616c1957816020015b6060815260200190600190039081616c045790505b50905060005b8151811015614e8e57616c356150b08686616467565b828281518110616c4757616c47617e1b565b6020908102919091010152600101616c1f565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310616ca3577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310616ccf576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc100008310616ced57662386f26fc10000830492506010015b6305f5e1008310616d05576305f5e100830492506008015b6127108310616d1957612710830492506004015b60648310616d2b576064830492506002015b600a831061314c5760010192915050565b6000616d4883836170e6565b159392505050565b600080858411616e575760208411616e035760008415616d9b576001616d77866020617785565b616d82906008618752565b616d8d906002618850565b616d979190617785565b1990505b8351811685616daa89896176c2565b616db49190617785565b805190935082165b818114616dee57878411616dd65787945050505050614abf565b83616de08161885c565b945050828451169050616dbc565b616df887856176c2565b945050505050614abf565b838320616e108588617785565b616e1a90876176c2565b91505b858210616e5557848220808203616e4257616e3886846176c2565b9350505050614abf565b616e4d600184617785565b925050616e1d565b505b5092949350505050565b60008381868511616f6c5760208511616f1b5760008515616ead576001616e89876020617785565b616e94906008618752565b616e9f906002618850565b616ea99190617785565b1990505b84518116600087616ebe8b8b6176c2565b616ec89190617785565b855190915083165b828114616f0d57818610616ef557616ee88b8b6176c2565b9650505050505050614abf565b85616eff81618738565b965050838651169050616ed0565b859650505050505050614abf565b508383206000905b616f2d8689617785565b8211616f6a57858320808203616f495783945050505050614abf565b616f546001856176c2565b9350508180616f6290618738565b925050616f23565b505b616f7687876176c2565b979650505050505050565b60408051808201909152600080825260208201526000616fb38560000151866020015186600001518760200151616e61565b602080870180519186019190915251909150616fcf9082617785565b835284516020860151616fe291906176c2565b8103616ff15760008552617023565b83518351616fff91906176c2565b8551869061700e908390617785565b905250835161701d90826176c2565b60208601525b50909392505050565b6020811061706457815183526170436020846176c2565b92506170506020836176c2565b915061705d602082617785565b905061702c565b600019811561709357600161707a836020617785565b61708690610100618850565b6170909190617785565b90505b9151835183169219169190911790915250565b606060006170b48484613592565b80516020808301516040519394506170ce93909101618873565b60405160208183030381529060405291505092915050565b81518151600091908111156170f9575081515b6020808501519084015160005b838110156171b2578251825180821461718257600019602087101561716157600184617133896020617785565b61713d91906176c2565b617148906008618752565b617153906002618850565b61715d9190617785565b1990505b818116838216818103911461717f57975061314c9650505050505050565b50505b61718d6020866176c2565b945061719a6020856176c2565b935050506020816171ab91906176c2565b9050617106565b5084518651613c4091906188cb565b610c9f806188ec83390190565b6112a68061958b83390190565b61140b8061a83183390190565b61155a8061bc3c83390190565b6040518060e0016040528060608152602001606081526020016060815260200160001515815260200160001515815260200160001515815260200161723861723d565b905290565b604051806101000160405280600015158152602001600015158152602001606081526020016000801916815260200160608152602001606081526020016000151581526020016172386040518060800160405280600081526020016000815260200160008152602001600081525090565b602080825282518282018190526000918401906040840190835b818110156172ef5783516001600160a01b03168352602093840193909201916001016172c8565b509095945050505050565b60005b838110156173155781810151838201526020016172fd565b50506000910152565b600081518084526173368160208601602086016172fa565b601f01601f19169290920160200192915050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015617446577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452815180516001600160a01b03168652602090810151604082880181905281519088018190529101906060600582901b88018101919088019060005b8181101561742c577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa08a850301835261741684865161731e565b60209586019590945092909201916001016173dc565b509197505050602094850194929092019150600101617372565b50929695505050505050565b600081518084526020840193506020830160005b828110156174a65781517fffffffff0000000000000000000000000000000000000000000000000000000016865260209586019590910190600101617466565b5093949350505050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015617446577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452815180516040875261751c604088018261731e565b90506020820151915086810360208801526175378183617452565b9650505060209384019391909101906001016174d8565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015617446577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08786030184526175b085835161731e565b94506020938401939190910190600101617576565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015617446577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc087860301845281516001600160a01b03815116865260208101519050604060208701526176466040870182617452565b95505060209384019391909101906001016175ed565b6001600160a01b03851681528360208201526001600160a01b0383166040820152608060608201526000613c40608083018461731e565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8082018082111561314c5761314c617693565b600181811c908216806176e957607f821691505b60208210810361538b577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006020828403121561773457600080fd5b5051919050565b60006020828403121561774d57600080fd5b815180151581146131c657600080fd5b8381526001600160a01b0383166020820152606060408201526000615371606083018461731e565b8181038181111561314c5761314c617693565b6001600160a01b0383168152604060208201526000614abf604083018461731e565b6020815260006131c6602083018461731e565b7f4661696c656420746f206465706c6f7920636f6e74726163742000000000000081526000835161780581601a8501602088016172fa565b7f3a20000000000000000000000000000000000000000000000000000000000000601a91840191820152835161784281601c8401602088016172fa565b01601c01949350505050565b60006020828403121561786057600080fd5b81516001600160a01b03811681146131c657600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040516060810167ffffffffffffffff811182821017156178c9576178c9617877565b60405290565b60008067ffffffffffffffff8411156178ea576178ea617877565b50604051601f19601f85018116603f0116810181811067ffffffffffffffff8211171561791957617919617877565b60405283815290508082840185101561793157600080fd5b614e8e8460208301856172fa565b600082601f83011261795057600080fd5b6131c6838351602085016178cf565b60006020828403121561797157600080fd5b815167ffffffffffffffff81111561798857600080fd5b6131488482850161793f565b600083516179a68184602088016172fa565b8351908301906179ba8183602088016172fa565b01949350505050565b7f4661696c656420746f206465706c6f7920636f6e7472616374200000000000008152600083516179fb81601a8501602088016172fa565b7f207573696e6720636f6e7374727563746f722064617461202200000000000000601a918401918201528351617a388160338401602088016172fa565b7f220000000000000000000000000000000000000000000000000000000000000060339290910191820152603401949350505050565b60408152600b60408201527f464f554e4452595f4f555400000000000000000000000000000000000000000060608201526080602082015260006131c6608083018461731e565b600060208284031215617ac757600080fd5b815167ffffffffffffffff811115617ade57600080fd5b8201601f81018413617aef57600080fd5b613148848251602084016178cf565b60008551617b10818460208a016172fa565b7f2f000000000000000000000000000000000000000000000000000000000000009083019081528551617b4a816001840160208a016172fa565b7f2f00000000000000000000000000000000000000000000000000000000000000600192909101918201528451617b888160028401602089016172fa565b6001818301019150507f2f0000000000000000000000000000000000000000000000000000000000000060018201528351617bca8160028401602088016172fa565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600292909101918201526007019695505050505050565b604081526000617c15604083018461731e565b8281036020840152600481527f2e6173740000000000000000000000000000000000000000000000000000000060208201526040810191505092915050565b7f436f756c64206e6f742066696e642041535420696e2061727469666163742000815260008251617c8c81601f8501602087016172fa565b7f2e205365742060617374203d20747275656020696e20666f756e6472792e746f601f9390910192830152507f6d6c000000000000000000000000000000000000000000000000000000000000603f820152604101919050565b604081526000617cf9604083018461731e565b8281036020840152601181527f2e6173742e6162736f6c7574655061746800000000000000000000000000000060208201526040810191505092915050565b604081526000617d4b604083018461731e565b8281036020840152600c81527f2e6173742e6c6963656e7365000000000000000000000000000000000000000060208201526040810191505092915050565b7f2e6d657461646174612e736f75726365732e5b27000000000000000000000000815260008251617dc28160148501602087016172fa565b7f275d2e6b656363616b32353600000000000000000000000000000000000000006014939091019283015250602001919050565b604081526000617e09604083018561731e565b82810360208401526131c2818561731e565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f2200000000000000000000000000000000000000000000000000000000000000815260008251617e828160018501602087016172fa565b7f22000000000000000000000000000000000000000000000000000000000000006001939091019283015250600201919050565b60008251617ec88184602087016172fa565b7f2f6275696c642d696e666f000000000000000000000000000000000000000000920191825250600b01919050565b7f436f756c64206e6f742066696e64206275696c642d696e666f2066696c65207781527f697468206d61746368696e6720736f7572636520636f6465206861736820666f60208201527f7220636f6e747261637420000000000000000000000000000000000000000000604082015260008251617f7b81604b8501602087016172fa565b91909101604b0192915050565b600060ff821660ff8103617f9e57617f9e617693565b60010192915050565b7f406f70656e7a657070656c696e2f646566656e6465722d6465706c6f792d636c81527f69656e742d636c694000000000000000000000000000000000000000000000006020820152600082516180058160298501602087016172fa565b9190910160290192915050565b60408152601660408201527f4f50454e5a455050454c494e5f424153485f504154480000000000000000000060608201526080602082015260006131c6608083018461731e565b60006020828403121561806b57600080fd5b815167ffffffffffffffff81111561808257600080fd5b82016060818503121561809457600080fd5b61809c6178a6565b81518060030b81146180ad57600080fd5b8152602082015167ffffffffffffffff8111156180c957600080fd5b6180d58682850161793f565b602083015250604082015167ffffffffffffffff8111156180f557600080fd5b6181018682850161793f565b604083015250949350505050565b7f4661696c656420746f2072756e206261736820636f6d6d616e6420776974682081527f220000000000000000000000000000000000000000000000000000000000000060208201526000825161816d8160218501602087016172fa565b7f222e20496620796f7520617265207573696e672057696e646f77732c2073657460219390910192830152507f20746865204f50454e5a455050454c494e5f424153485f5041544820656e766960418201527f726f6e6d656e74207661726961626c6520746f207468652066756c6c7920717560618201527f616c69666965642070617468206f66207468652062617368206578656375746160818201527f626c652e20466f72206578616d706c652c20696620796f75206172652075736960a18201527f6e672047697420666f722057696e646f77732c206164642074686520666f6c6c60c18201527f6f77696e67206c696e6520696e20746865202e656e762066696c65206f66207960e18201527f6f75722070726f6a65637420287573696e6720666f727761726420736c6173686101018201527f6573293a0a4f50454e5a455050454c494e5f424153485f504154483d22433a2f6101218201527f50726f6772616d2046696c65732f4769742f62696e2f6261736822000000000061014182015261015c01919050565b7f4661696c656420746f2066696e64206c696e652077697468207072656669782081527f27000000000000000000000000000000000000000000000000000000000000006020820152600083516183598160218501602088016172fa565b7f2720696e206f75747075743a2000000000000000000000000000000000000000602191840191820152835161839681602e8401602088016172fa565b01602e01949350505050565b7f4661696c656420746f2072756e2075706772616465207361666574792076616c81527f69646174696f6e3a2000000000000000000000000000000000000000000000006020820152600082516180058160298501602087016172fa565b7f55706772616465207361666574792076616c69646174696f6e206661696c656481527f3a0a00000000000000000000000000000000000000000000000000000000000060208201526000825161845e8160228501602087016172fa565b9190910160220192915050565b7f436f6e7472616374206e616d65200000000000000000000000000000000000008152600082516184a381600e8501602087016172fa565b7f206d75737420626520696e2074686520666f726d6174204d79436f6e74726163600e9390910192830152507f742e736f6c3a4d79436f6e7472616374206f72204d79436f6e74726163742e73602e8201527f6f6c206f72206f75742f4d79436f6e74726163742e736f6c2f4d79436f6e7472604e8201527f6163742e6a736f6e000000000000000000000000000000000000000000000000606e820152607601919050565b7f53504458206c6963656e7365206964656e7469666965722000000000000000008152600083516185818160188501602088016172fa565b7f20696e200000000000000000000000000000000000000000000000000000000060189184019182015283516185be81601c8401602088016172fa565b7f20646f6573206e6f74206c6f6f6b206c696b65206120737570706f7274656420601c92909101918201527f6c6963656e736520666f7220626c6f636b206578706c6f726572207665726966603c8201527f69636174696f6e2e205573652074686520606c6963656e73655479706560206f605c8201527f7074696f6e20746f20737065636966792061206c6963656e736520747970652c607c8201527f206f7220736574207468652060736b69704c6963656e73655479706560206f70609c8201527f74696f6e20746f2060747275656020746f20736b69702e00000000000000000060bc82015260d301949350505050565b600082516186c48184602087016172fa565b7f2000000000000000000000000000000000000000000000000000000000000000920191825250600101919050565b7f406f70656e7a657070656c696e2f75706772616465732d636f7265400000000081526000825161872b81601c8501602087016172fa565b91909101601c0192915050565b6000600019820361874b5761874b617693565b5060010190565b808202811582820484141761314c5761314c617693565b6001815b60018411156187a45780850481111561878857618788617693565b600184161561879657908102905b60019390931c92800261876d565b935093915050565b6000826187bb5750600161314c565b816187c85750600061314c565b81600181146187de57600281146187e857618804565b600191505061314c565b60ff8411156187f9576187f9617693565b50506001821b61314c565b5060208310610133831016604e8410600b8410161715618827575081810a61314c565b6188346000198484618769565b806000190482111561884857618848617693565b029392505050565b60006131c683836187ac565b60008161886b5761886b617693565b506000190190565b600083516188858184602088016172fa565b7f3a0000000000000000000000000000000000000000000000000000000000000090830190815283516188bf8160018401602088016172fa565b01600101949350505050565b81810360008312801583831316838312821617156164865761648661769356fe608060405234801561001057600080fd5b50604051610c9f380380610c9f83398101604081905261002f9161010d565b8181600361003d83826101ff565b50600461004a82826101ff565b50505050506102bd565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261007b57600080fd5b81516001600160401b0381111561009457610094610054565b604051601f8201601f19908116603f011681016001600160401b03811182821017156100c2576100c2610054565b6040528181528382016020018510156100da57600080fd5b60005b828110156100f9576020818601810151838301820152016100dd565b506000918101602001919091529392505050565b6000806040838503121561012057600080fd5b82516001600160401b0381111561013657600080fd5b6101428582860161006a565b602085015190935090506001600160401b0381111561016057600080fd5b61016c8582860161006a565b9150509250929050565b600181811c9082168061018a57607f821691505b6020821081036101aa57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156101fa57806000526020600020601f840160051c810160208510156101d75750805b601f840160051c820191505b818110156101f757600081556001016101e3565b50505b505050565b81516001600160401b0381111561021857610218610054565b61022c816102268454610176565b846101b0565b6020601f82116001811461026057600083156102485750848201515b600019600385901b1c1916600184901b1784556101f7565b600084815260208120601f198516915b828110156102905787850151825560209485019460019092019101610270565b50848210156102ae5786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b6109d3806102cc6000396000f3fe608060405234801561001057600080fd5b50600436106100be5760003560e01c806340c10f191161007657806395d89b411161005b57806395d89b4114610183578063a9059cbb1461018b578063dd62ed3e1461019e57600080fd5b806340c10f191461013857806370a082311461014d57600080fd5b806318160ddd116100a757806318160ddd1461010457806323b872dd14610116578063313ce5671461012957600080fd5b806306fdde03146100c3578063095ea7b3146100e1575b600080fd5b6100cb6101e4565b6040516100d891906107bf565b60405180910390f35b6100f46100ef366004610854565b610276565b60405190151581526020016100d8565b6002545b6040519081526020016100d8565b6100f461012436600461087e565b610290565b604051601281526020016100d8565b61014b610146366004610854565b6102b4565b005b61010861015b3660046108bb565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6100cb6102c2565b6100f4610199366004610854565b6102d1565b6101086101ac3660046108dd565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6060600380546101f390610910565b80601f016020809104026020016040519081016040528092919081815260200182805461021f90610910565b801561026c5780601f106102415761010080835404028352916020019161026c565b820191906000526020600020905b81548152906001019060200180831161024f57829003601f168201915b5050505050905090565b6000336102848185856102df565b60019150505b92915050565b60003361029e8582856102f1565b6102a98585856103c5565b506001949350505050565b6102be8282610470565b5050565b6060600480546101f390610910565b6000336102848185856103c5565b6102ec83838360016104cc565b505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146103bf57818110156103b0576040517ffb8f41b200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416600482015260248101829052604481018390526064015b60405180910390fd5b6103bf848484840360006104cc565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8316610415576040517f96c6fd1e000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff8216610465576040517fec442f05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b6102ec838383610614565b73ffffffffffffffffffffffffffffffffffffffff82166104c0576040517fec442f05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b6102be60008383610614565b73ffffffffffffffffffffffffffffffffffffffff841661051c576040517fe602df05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff831661056c576040517f94280d62000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260016020908152604080832093871683529290522082905580156103bf578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161060691815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff831661064c5780600260008282546106419190610963565b909155506106fe9050565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260208190526040902054818110156106d2576040517fe450d38c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8516600482015260248101829052604481018390526064016103a7565b73ffffffffffffffffffffffffffffffffffffffff841660009081526020819052604090209082900390555b73ffffffffffffffffffffffffffffffffffffffff821661072757600280548290039055610753565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090208054820190555b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516107b291815260200190565b60405180910390a3505050565b602081526000825180602084015260005b818110156107ed57602081860181015160408684010152016107d0565b5060006040828501015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011684010191505092915050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461084f57600080fd5b919050565b6000806040838503121561086757600080fd5b6108708361082b565b946020939093013593505050565b60008060006060848603121561089357600080fd5b61089c8461082b565b92506108aa6020850161082b565b929592945050506040919091013590565b6000602082840312156108cd57600080fd5b6108d68261082b565b9392505050565b600080604083850312156108f057600080fd5b6108f98361082b565b91506109076020840161082b565b90509250929050565b600181811c9082168061092457607f821691505b60208210810361095d577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b8082018082111561028a577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea26469706673582212207e804ca539d49155d2b6bc19268ce22f9f857027c75247d69fb0d56a089c93d464736f6c634300081a0033608060405234801561001057600080fd5b506040516112a63803806112a683398101604081905261002f91610110565b604051806040016040528060048152602001635a65746160e01b815250604051806040016040528060048152602001635a45544160e01b815250816003908161007891906101e2565b50600461008582826101e2565b5050506001600160a01b03821615806100a557506001600160a01b038116155b156100c35760405163e6c4247b60e01b815260040160405180910390fd5b600680546001600160a01b039384166001600160a01b031991821617909155600780549290931691161790556102a0565b80516001600160a01b038116811461010b57600080fd5b919050565b6000806040838503121561012357600080fd5b61012c836100f4565b915061013a602084016100f4565b90509250929050565b634e487b7160e01b600052604160045260246000fd5b600181811c9082168061016d57607f821691505b60208210810361018d57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156101dd57806000526020600020601f840160051c810160208510156101ba5750805b601f840160051c820191505b818110156101da57600081556001016101c6565b50505b505050565b81516001600160401b038111156101fb576101fb610143565b61020f816102098454610159565b84610193565b6020601f821160018114610243576000831561022b5750848201515b600019600385901b1c1916600184901b1784556101da565b600084815260208120601f198516915b828110156102735787850151825560209485019460019092019101610253565b50848210156102915786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b610ff7806102af6000396000f3fe608060405234801561001057600080fd5b506004361061011b5760003560e01c806342966c68116100b257806379cc679011610081578063a9059cbb11610066578063a9059cbb1461028e578063bff9662a146102a1578063dd62ed3e146102c157600080fd5b806379cc67901461027357806395d89b411461028657600080fd5b806342966c68146102025780635b1125911461021557806370a0823114610235578063779e3b631461026b57600080fd5b80631e458bee116100ee5780631e458bee1461018857806323b872dd1461019b578063313ce567146101ae578063328a01d0146101bd57600080fd5b806306fdde0314610120578063095ea7b31461013e57806315d57fd41461016157806318160ddd14610176575b600080fd5b610128610307565b6040516101359190610d97565b60405180910390f35b61015161014c366004610e2c565b610399565b6040519015158152602001610135565b61017461016f366004610e56565b6103b3565b005b6002545b604051908152602001610135565b610174610196366004610e89565b61057e565b6101516101a9366004610ebc565b610631565b60405160128152602001610135565b6007546101dd9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610135565b610174610210366004610ef9565b610655565b6006546101dd9073ffffffffffffffffffffffffffffffffffffffff1681565b61017a610243366004610f12565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b610174610662565b610174610281366004610e2c565b610786565b610128610837565b61015161029c366004610e2c565b610846565b6005546101dd9073ffffffffffffffffffffffffffffffffffffffff1681565b61017a6102cf366004610e56565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b60606003805461031690610f34565b80601f016020809104026020016040519081016040528092919081815260200182805461034290610f34565b801561038f5780601f106103645761010080835404028352916020019161038f565b820191906000526020600020905b81548152906001019060200180831161037257829003601f168201915b5050505050905090565b6000336103a7818585610854565b60019150505b92915050565b60075473ffffffffffffffffffffffffffffffffffffffff1633148015906103f3575060065473ffffffffffffffffffffffffffffffffffffffff163314155b15610431576040517fcdfcef970000000000000000000000000000000000000000000000000000000081523360048201526024015b60405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff82161580610468575073ffffffffffffffffffffffffffffffffffffffff8116155b1561049f576040517fe6c4247b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6006805473ffffffffffffffffffffffffffffffffffffffff8481167fffffffffffffffffffffffff0000000000000000000000000000000000000000928316811790935560058054918516919092161790556040805133815260208101929092527fe79965b5c67dcfb2cf5fe152715e4a7256cee62a3d5dd8484fd8a8539eb8beff910160405180910390a16040805133815273ffffffffffffffffffffffffffffffffffffffff831660208201527f1b9352454524a57a51f24f67dc66d898f616922cd1f7a12d73570ece12b1975c910160405180910390a15050565b60055473ffffffffffffffffffffffffffffffffffffffff1633146105d1576040517f3fe32fba000000000000000000000000000000000000000000000000000000008152336004820152602401610428565b6105db8383610866565b808373ffffffffffffffffffffffffffffffffffffffff167fc263b302aec62d29105026245f19e16f8e0137066ccd4a8bd941f716bd4096bb8460405161062491815260200190565b60405180910390a3505050565b60003361063f8582856108c6565b61064a858585610995565b506001949350505050565b61065f3382610a40565b50565b60075473ffffffffffffffffffffffffffffffffffffffff1633146106b5576040517fe700765e000000000000000000000000000000000000000000000000000000008152336004820152602401610428565b60065473ffffffffffffffffffffffffffffffffffffffff16610704576040517fe6c4247b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600654600780547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff90921691821790556040805133815260208101929092527f5104c9abdc7d111c2aeb4ce890ac70274a4be2ee83f46a62551be5e6ebc82dd0910160405180910390a1565b60055473ffffffffffffffffffffffffffffffffffffffff1633146107d9576040517f3fe32fba000000000000000000000000000000000000000000000000000000008152336004820152602401610428565b6107e38282610a9c565b8173ffffffffffffffffffffffffffffffffffffffff167f919f7e2092ffcc9d09f599be18d8152860b0c054df788a33bc549cdd9d0f15b18260405161082b91815260200190565b60405180910390a25050565b60606004805461031690610f34565b6000336103a7818585610995565b6108618383836001610ab1565b505050565b73ffffffffffffffffffffffffffffffffffffffff82166108b6576040517fec442f0500000000000000000000000000000000000000000000000000000000815260006004820152602401610428565b6108c260008383610bf9565b5050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811461098f5781811015610980576040517ffb8f41b200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff841660048201526024810182905260448101839052606401610428565b61098f84848484036000610ab1565b50505050565b73ffffffffffffffffffffffffffffffffffffffff83166109e5576040517f96c6fd1e00000000000000000000000000000000000000000000000000000000815260006004820152602401610428565b73ffffffffffffffffffffffffffffffffffffffff8216610a35576040517fec442f0500000000000000000000000000000000000000000000000000000000815260006004820152602401610428565b610861838383610bf9565b73ffffffffffffffffffffffffffffffffffffffff8216610a90576040517f96c6fd1e00000000000000000000000000000000000000000000000000000000815260006004820152602401610428565b6108c282600083610bf9565b610aa78233836108c6565b6108c28282610a40565b73ffffffffffffffffffffffffffffffffffffffff8416610b01576040517fe602df0500000000000000000000000000000000000000000000000000000000815260006004820152602401610428565b73ffffffffffffffffffffffffffffffffffffffff8316610b51576040517f94280d6200000000000000000000000000000000000000000000000000000000815260006004820152602401610428565b73ffffffffffffffffffffffffffffffffffffffff8085166000908152600160209081526040808320938716835292905220829055801561098f578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051610beb91815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff8316610c31578060026000828254610c269190610f87565b90915550610ce39050565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205481811015610cb7576040517fe450d38c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff851660048201526024810182905260448101839052606401610428565b73ffffffffffffffffffffffffffffffffffffffff841660009081526020819052604090209082900390555b73ffffffffffffffffffffffffffffffffffffffff8216610d0c57600280548290039055610d38565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090208054820190555b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161062491815260200190565b602081526000825180602084015260005b81811015610dc55760208186018101516040868401015201610da8565b5060006040828501015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011684010191505092915050565b803573ffffffffffffffffffffffffffffffffffffffff81168114610e2757600080fd5b919050565b60008060408385031215610e3f57600080fd5b610e4883610e03565b946020939093013593505050565b60008060408385031215610e6957600080fd5b610e7283610e03565b9150610e8060208401610e03565b90509250929050565b600080600060608486031215610e9e57600080fd5b610ea784610e03565b95602085013595506040909401359392505050565b600080600060608486031215610ed157600080fd5b610eda84610e03565b9250610ee860208501610e03565b929592945050506040919091013590565b600060208284031215610f0b57600080fd5b5035919050565b600060208284031215610f2457600080fd5b610f2d82610e03565b9392505050565b600181811c90821680610f4857607f821691505b602082108103610f81577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b808201808211156103ad577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea2646970667358221220085f01204b33dc17013c78c74fbca32a3da2c0b384ce7c8878c889551af28c6164736f6c634300081a003360a060405234801561001057600080fd5b5060405161140b38038061140b83398101604081905261002f916101b3565b60016000556002805460ff191690556001600160a01b038316158061005b57506001600160a01b038216155b8061006d57506001600160a01b038116155b1561008b5760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b0383166080526100a3600082610102565b506100ce7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a82610102565b506100f97f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e483610102565b505050506101f6565b60008281526001602090815260408083206001600160a01b038516845290915281205460ff1661018d5760008381526001602081815260408084206001600160a01b0387168086529252808420805460ff19169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a4506001610191565b5060005b92915050565b80516001600160a01b03811681146101ae57600080fd5b919050565b6000806000606084860312156101c857600080fd5b6101d184610197565b92506101df60208501610197565b91506101ed60408501610197565b90509250925092565b6080516111de61022d60003960008181610132015281816103c5015281816104270152818161065801526106ba01526111de6000f3fe608060405234801561001057600080fd5b50600436106101005760003560e01c80638456cb5911610097578063c8a0236211610066578063c8a0236214610276578063d547741f14610289578063d9caed121461029c578063e63ab1e9146102af57600080fd5b80638456cb59146101f957806385f438c11461020157806391d1485414610228578063a217fddf1461026e57600080fd5b80632f2ff15d116100d35780632f2ff15d146101c057806336568abe146101d35780633f4ba83a146101e65780635c975abb146101ee57600080fd5b806301ffc9a714610105578063116191b61461012d57806321fc65f214610179578063248a9ca31461018e575b600080fd5b610118610113366004610f04565b6102d6565b60405190151581526020015b60405180910390f35b6101547f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610124565b61018c610187366004610f6f565b61036f565b005b6101b261019c36600461100c565b6000908152600160208190526040909120015490565b604051908152602001610124565b61018c6101ce366004611025565b610511565b61018c6101e1366004611025565b61053d565b61018c61059b565b60025460ff16610118565b61018c6105d0565b6101b27f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b610118610236366004611025565b600091825260016020908152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b6101b2600081565b61018c610284366004610f6f565b610602565b61018c610297366004611025565b61078a565b61018c6102aa366004611051565b6107b0565b6101b27f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061036957507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b61037761087d565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e46103a1816108c0565b6103a96108ca565b6103ea73ffffffffffffffffffffffffffffffffffffffff87167f000000000000000000000000000000000000000000000000000000000000000086610909565b6040517f5131ab5900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690635131ab599061046490899089908990899089906004016110d7565b600060405180830381600087803b15801561047e57600080fd5b505af1158015610492573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167f85b5be9cf454e05e0bddf49315178102227c312078eefa3c00294fb4d912ae4e8686866040516104f793929190611134565b60405180910390a35061050a6001600055565b5050505050565b6000828152600160208190526040909120015461052d816108c0565b6105378383610996565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8116331461058c576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6105968282610a61565b505050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a6105c5816108c0565b6105cd610b20565b50565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a6105fa816108c0565b6105cd610b9d565b61060a61087d565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e4610634816108c0565b61063c6108ca565b61067d73ffffffffffffffffffffffffffffffffffffffff87167f000000000000000000000000000000000000000000000000000000000000000086610909565b6040517fb8969bd400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063b8969bd4906106f790899089908990899089906004016110d7565b600060405180830381600087803b15801561071157600080fd5b505af1158015610725573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fb9d4efa96044e5f5e03e696fa9ae2ff66911cc27e8a637c3627c75bc5b2241c88686866040516104f793929190611134565b600082815260016020819052604090912001546107a6816108c0565b6105378383610a61565b6107b861087d565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e46107e2816108c0565b6107ea6108ca565b61080b73ffffffffffffffffffffffffffffffffffffffff85168484610909565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f9b1bfa7fa9ee420a16e124f794c35ac9f90472acc99140eb2f6447c714cad8eb8460405161086a91815260200190565b60405180910390a3506105966001600055565b6002600054036108b9576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b6105cd8133610bf8565b60025460ff1615610907576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6040805173ffffffffffffffffffffffffffffffffffffffff8416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb00000000000000000000000000000000000000000000000000000000179052610596908490610c89565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff16610a5957600083815260016020818152604080842073ffffffffffffffffffffffffffffffffffffffff8716808652925280842080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a4506001610369565b506000610369565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff1615610a5957600083815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8616808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a4506001610369565b610b28610d1f565b600280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b610ba56108ca565b600280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258610b733390565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16610c85576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82166004820152602481018390526044015b60405180910390fd5b5050565b6000610cab73ffffffffffffffffffffffffffffffffffffffff841683610d5b565b90508051600014158015610cd0575080806020019051810190610cce9190611157565b155b15610596576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84166004820152602401610c7c565b60025460ff16610907576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6060610d6983836000610d70565b9392505050565b606081471015610dae576040517fcd786059000000000000000000000000000000000000000000000000000000008152306004820152602401610c7c565b6000808573ffffffffffffffffffffffffffffffffffffffff168486604051610dd79190611179565b60006040518083038185875af1925050503d8060008114610e14576040519150601f19603f3d011682016040523d82523d6000602084013e610e19565b606091505b5091509150610e29868383610e33565b9695505050505050565b606082610e4857610e4382610ec2565b610d69565b8151158015610e6c575073ffffffffffffffffffffffffffffffffffffffff84163b155b15610ebb576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85166004820152602401610c7c565b5080610d69565b805115610ed25780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060208284031215610f1657600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610d6957600080fd5b803573ffffffffffffffffffffffffffffffffffffffff81168114610f6a57600080fd5b919050565b600080600080600060808688031215610f8757600080fd5b610f9086610f46565b9450610f9e60208701610f46565b935060408601359250606086013567ffffffffffffffff811115610fc157600080fd5b8601601f81018813610fd257600080fd5b803567ffffffffffffffff811115610fe957600080fd5b886020828401011115610ffb57600080fd5b959894975092955050506020019190565b60006020828403121561101e57600080fd5b5035919050565b6000806040838503121561103857600080fd5b8235915061104860208401610f46565b90509250929050565b60008060006060848603121561106657600080fd5b61106f84610f46565b925061107d60208501610f46565b929592945050506040919091013590565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff8616815273ffffffffffffffffffffffffffffffffffffffff8516602082015283604082015260806060820152600061112960808301848661108e565b979650505050505050565b83815260406020820152600061114e60408301848661108e565b95945050505050565b60006020828403121561116957600080fd5b81518015158114610d6957600080fd5b6000825160005b8181101561119a5760208186018101518583015201611180565b50600092019182525091905056fea264697066735822122069d5c5c3cb2752c876b6a2138d8d9b66bac6bd1b48a1fe98417eea81faf02a3e64736f6c634300081a003360c060405260001960035534801561001657600080fd5b5060405161155a38038061155a83398101604081905261003591610220565b60016000819055805460ff19169055838383836001600160a01b038416158061006557506001600160a01b038316155b8061007757506001600160a01b038216155b8061008957506001600160a01b038116155b156100a75760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b03808516608052831660a0526100c5600082610154565b506100f07f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e483610154565b5061011b7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb83610154565b506101467f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a82610154565b505050505050505050610274565b60008281526002602090815260408083206001600160a01b038516845290915281205460ff166101fa5760008381526002602090815260408083206001600160a01b03861684529091529020805460ff191660011790556101b23390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45060016101fe565b5060005b92915050565b80516001600160a01b038116811461021b57600080fd5b919050565b6000806000806080858703121561023657600080fd5b61023f85610204565b935061024d60208601610204565b925061025b60408601610204565b915061026960608601610204565b905092959194509250565b60805160a0516112826102d86000396000818161021d01528181610531015281816108240152818161097b01528181610ad00152610bf20152600081816101d1015281816104a1015281816105040152818161079401526107f701526112826000f3fe608060405234801561001057600080fd5b50600436106101775760003560e01c80635e3e9fef116100d857806391d148541161008c578063d547741f11610066578063d547741f14610386578063d5abeb0114610399578063e63ab1e9146103a257600080fd5b806391d1485414610311578063a217fddf14610357578063a783c7891461035f57600080fd5b8063743e0c9b116100bd578063743e0c9b146102cf5780638456cb59146102e257806385f438c1146102ea57600080fd5b80635e3e9fef146102a95780636f8b44b0146102bc57600080fd5b8063248a9ca31161012f57806336568abe1161011457806336568abe146102835780633f4ba83a146102965780635c975abb1461029e57600080fd5b8063248a9ca31461023f5780632f2ff15d1461027057600080fd5b8063106e629011610160578063106e6290146101b9578063116191b6146101cc57806321e093b11461021857600080fd5b806301ffc9a71461017c57806302d5c899146101a4575b600080fd5b61018f61018a366004610fb4565b6103c9565b60405190151581526020015b60405180910390f35b6101b76101b2366004611026565b610462565b005b6101b76101c73660046110b8565b6105f7565b6101f37f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161019b565b6101f37f000000000000000000000000000000000000000000000000000000000000000081565b61026261024d3660046110eb565b60009081526002602052604090206001015490565b60405190815260200161019b565b6101b761027e366004611104565b61069c565b6101b7610291366004611104565b6106c7565b6101b7610720565b60015460ff1661018f565b6101b76102b7366004611026565b610755565b6101b76102ca3660046110eb565b6108d0565b6101b76102dd3660046110eb565b61093e565b6101b76109e8565b6102627f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b61018f61031f366004611104565b600091825260026020908152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b610262600081565b6102627f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb81565b6101b7610394366004611104565b610a1a565b61026260035481565b6102627f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061045c57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b61046a610a3f565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461049481610a82565b61049c610a8c565b6104c77f00000000000000000000000000000000000000000000000000000000000000008684610acb565b6040517fb8969bd400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063b8969bd490610561907f0000000000000000000000000000000000000000000000000000000000000000908a908a908a908a90600401611179565b600060405180830381600087803b15801561057b57600080fd5b505af115801561058f573d6000803e3d6000fd5b505050508573ffffffffffffffffffffffffffffffffffffffff167fba96f26bdda53eb8c8ba39045dfb4ff39753fbc7a6edcf250a88e75e78d102fe8686866040516105dd939291906111d6565b60405180910390a2506105f06001600055565b5050505050565b6105ff610a3f565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461062981610a82565b610631610a8c565b61063c848484610acb565b8373ffffffffffffffffffffffffffffffffffffffff167f884edad9ce6fa2440d8a54cc123490eb96d2768479d49ff9c7366125a94243648460405161068491815260200190565b60405180910390a2506106976001600055565b505050565b6000828152600260205260409020600101546106b781610a82565b6106c18383610c53565b50505050565b73ffffffffffffffffffffffffffffffffffffffff81163314610716576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6106978282610d53565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61074a81610a82565b610752610e12565b50565b61075d610a3f565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461078781610a82565b61078f610a8c565b6107ba7f00000000000000000000000000000000000000000000000000000000000000008684610acb565b6040517f5131ab5900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690635131ab5990610854907f0000000000000000000000000000000000000000000000000000000000000000908a908a908a908a90600401611179565b600060405180830381600087803b15801561086e57600080fd5b505af1158015610882573d6000803e3d6000fd5b505050508573ffffffffffffffffffffffffffffffffffffffff167f7772f56296d3a5202974a45c61c9188d844ab4d6eeb18c851e4b8d5384ca6ced8686866040516105dd939291906111d6565b7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb6108fa81610a82565b610902610a8c565b60038290556040518281527f7810bd47de260c3e9ee10061cf438099dd12256c79485f12f94dbccc981e806c9060200160405180910390a15050565b610946610a8c565b6040517f79cc6790000000000000000000000000000000000000000000000000000000008152336004820152602481018290527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16906379cc679090604401600060405180830381600087803b1580156109d457600080fd5b505af11580156105f0573d6000803e3d6000fd5b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610a1281610a82565b610752610e8f565b600082815260026020526040902060010154610a3581610a82565b6106c18383610d53565b600260005403610a7b576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b6107528133610ee8565b60015460ff1615610ac9576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6003547f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b39573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b5d91906111f9565b610b679084611212565b1115610b9f576040517fc30436e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f1e458bee00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff848116600483015260248201849052604482018390527f00000000000000000000000000000000000000000000000000000000000000001690631e458bee90606401600060405180830381600087803b158015610c3657600080fd5b505af1158015610c4a573d6000803e3d6000fd5b50505050505050565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff16610d4b57600083815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff86168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055610ce93390565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a450600161045c565b50600061045c565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff1615610d4b57600083815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8616808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a450600161045c565b610e1a610f78565b600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b610e97610a8c565b600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016811790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25833610e65565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16610f74576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff821660048201526024810183905260440160405180910390fd5b5050565b60015460ff16610ac9576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060208284031215610fc657600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610ff657600080fd5b9392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461102157600080fd5b919050565b60008060008060006080868803121561103e57600080fd5b61104786610ffd565b945060208601359350604086013567ffffffffffffffff81111561106a57600080fd5b8601601f8101881361107b57600080fd5b803567ffffffffffffffff81111561109257600080fd5b8860208284010111156110a457600080fd5b959894975060200195606001359392505050565b6000806000606084860312156110cd57600080fd5b6110d684610ffd565b95602085013595506040909401359392505050565b6000602082840312156110fd57600080fd5b5035919050565b6000806040838503121561111757600080fd5b8235915061112760208401610ffd565b90509250929050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff8616815273ffffffffffffffffffffffffffffffffffffffff851660208201528360408201526080606082015260006111cb608083018486611130565b979650505050505050565b8381526040602082015260006111f0604083018486611130565b95945050505050565b60006020828403121561120b57600080fd5b5051919050565b8082018082111561045c577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea2646970667358221220f784eb6e1655c2988d3f762737188cfee07a61da1d5b8456cc4f4e55cb339cfb64736f6c634300081a0033a26469706673582212207f6795811c41279eb5ab92e452c28741337b2a4d744fb6e0f654b6d362b09b1b64736f6c634300081a0033", + ABI: "[{\"type\":\"function\",\"name\":\"IS_TEST\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeArtifacts\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedArtifacts_\",\"type\":\"string[]\",\"internalType\":\"string[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeContracts\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedContracts_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeSelectors\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedSelectors_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzSelector[]\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"selectors\",\"type\":\"bytes4[]\",\"internalType\":\"bytes4[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeSenders\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedSenders_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"failed\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"setUp\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"targetArtifactSelectors\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedArtifactSelectors_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzArtifactSelector[]\",\"components\":[{\"name\":\"artifact\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"selectors\",\"type\":\"bytes4[]\",\"internalType\":\"bytes4[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetArtifacts\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedArtifacts_\",\"type\":\"string[]\",\"internalType\":\"string[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetContracts\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedContracts_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetInterfaces\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedInterfaces_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzInterface[]\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"artifacts\",\"type\":\"string[]\",\"internalType\":\"string[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetSelectors\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedSelectors_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzSelector[]\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"selectors\",\"type\":\"bytes4[]\",\"internalType\":\"bytes4[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetSenders\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedSenders_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"testCallWithPayload\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositERC20ToCustody\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositERC20ToCustodyFailsIfTokenIsNotWhitelisted\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositERC20ToCustodyWithPayload\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositERC20ToCustodyWithPayloadFailsIfTokenIsNotWhitelisted\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositEthToTss\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositEthToTssWithPayload\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositZetaToConnector\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testFailDepositERC20ToCustodyIfAmountIs0\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testFailDepositERC20ToCustodyIfReceiverIsZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testFailDepositERC20ToCustodyWithPayloadIfAmountIs0\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testFailDepositERC20ToCustodyWithPayloadIfReceiverIsZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testFailDepositEthToTssIfAmountIs0\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testFailDepositEthToTssIfReceiverIsZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testFailDepositEthToTssWithPayloadIfAmountIs0\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testFailDepositEthToTssWithPayloadIfReceiverIsZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"event\",\"name\":\"Call\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"receiver\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Deposit\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"receiver\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"asset\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Executed\",\"inputs\":[{\"name\":\"destination\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ExecutedWithERC20\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedERC20\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"token\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"destination\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedNoParams\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedNonPayable\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"strs\",\"type\":\"string[]\",\"indexed\":false,\"internalType\":\"string[]\"},{\"name\":\"nums\",\"type\":\"uint256[]\",\"indexed\":false,\"internalType\":\"uint256[]\"},{\"name\":\"flag\",\"type\":\"bool\",\"indexed\":false,\"internalType\":\"bool\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedPayable\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"str\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"num\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"flag\",\"type\":\"bool\",\"indexed\":false,\"internalType\":\"bool\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedRevert\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Reverted\",\"inputs\":[{\"name\":\"destination\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RevertedWithERC20\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log\",\"inputs\":[{\"name\":\"\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_address\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_array\",\"inputs\":[{\"name\":\"val\",\"type\":\"uint256[]\",\"indexed\":false,\"internalType\":\"uint256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_array\",\"inputs\":[{\"name\":\"val\",\"type\":\"int256[]\",\"indexed\":false,\"internalType\":\"int256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_array\",\"inputs\":[{\"name\":\"val\",\"type\":\"address[]\",\"indexed\":false,\"internalType\":\"address[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_bytes\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_bytes32\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_int\",\"inputs\":[{\"name\":\"\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_address\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_array\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"uint256[]\",\"indexed\":false,\"internalType\":\"uint256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_array\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"int256[]\",\"indexed\":false,\"internalType\":\"int256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_array\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"address[]\",\"indexed\":false,\"internalType\":\"address[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_bytes\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_bytes32\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_decimal_int\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"},{\"name\":\"decimals\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_decimal_uint\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"decimals\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_int\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_string\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_uint\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_string\",\"inputs\":[{\"name\":\"\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_uint\",\"inputs\":[{\"name\":\"\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"logs\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"ApprovalFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ConnectorInitialized\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"CustodyInitialized\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"DepositFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ExecutionFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientERC20Amount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientETHAmount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NotWhitelistedInCustody\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZeroAddress\",\"inputs\":[]}]", + Bin: "0x6080604052600c8054600160ff199182168117909255601f80549091169091179055620f4240602855348015603357600080fd5b5061d9ee806100436000396000f3fe608060405234801561001057600080fd5b50600436106101cf5760003560e01c8063916a17c611610104578063bb93f11e116100a2578063e306a97811610071578063e306a978146102f8578063e85c5a0714610300578063f96c02df14610308578063fa7626d41461031057600080fd5b8063bb93f11e146102d8578063c13d738f146102e0578063d896e261146102e8578063e20c9f71146102f057600080fd5b8063b0464fdc116100de578063b0464fdc146102a8578063b2849063146102b0578063b5508aa9146102b8578063ba414fa6146102c057600080fd5b8063916a17c6146102835780639fd1e59714610298578063aa030c1c146102a057600080fd5b806330f7c04f116101715780636459542a1161014b5780636459542a1461024957806366d9a9a0146102515780637478fda01461026657806385226c811461026e57600080fd5b806330f7c04f146102315780633e5e3c23146102395780633f7286f41461024157600080fd5b80630a9254e4116101ad5780630a9254e4146101ee5780631806a9a5146101f65780631ed7831c146101fe5780632ade38801461021c57600080fd5b806305a898e2146101d457806306978ca3146101de5780630724d8e3146101e6575b600080fd5b6101dc61031d565b005b6101dc6104d1565b6101dc6105e3565b6101dc61079a565b6101dc611125565b61020661121f565b60405161021391906177de565b60405180910390f35b610224611281565b604051610213919061787a565b6101dc6113c3565b610206611830565b610206611890565b6101dc6118f0565b610259611ced565b60405161021391906179e0565b6101dc611e6f565b610276611fa2565b6040516102139190617a7e565b61028b612072565b6040516102139190617af5565b6101dc61216d565b6101dc612389565b61028b612540565b6101dc61263b565b6102766128d6565b6102c86129a6565b6040519015158152602001610213565b6101dc612a7a565b6101dc612bfa565b6101dc612da9565b610206612f21565b6101dc612f81565b6101dc61324d565b6101dc6134ce565b601f546102c89060ff1681565b6026546040516001600160a01b03909116602482015260019060009060440160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f84fae76000000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063f28dceb390610415906004016020808252600b908201527f5a65726f41646472657373000000000000000000000000000000000000000000604082015260600190565b600060405180830381600087803b15801561042f57600080fd5b505af1158015610443573d6000803e3d6000fd5b50506020546023546040517f8c6f037f0000000000000000000000000000000000000000000000000000000081526001600160a01b039283169450638c6f037f935061049b9260009288929116908790600401617b8c565b600060405180830381600087803b1580156104b557600080fd5b505af11580156104c9573d6000803e3d6000fd5b505050505050565b6040517ff28dceb300000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f496e73756666696369656e74455448416d6f756e7400000000000000000000006044820152600090737109709ecfa91a80626ff3989d68f67f5b1dd12d9063f28dceb390606401600060405180830381600087803b15801561056757600080fd5b505af115801561057b573d6000803e3d6000fd5b50506020546026546040517ff340fa010000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201529116925063f340fa01915083906024015b6000604051808303818588803b1580156104b557600080fd5b6027546020546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039182166084820152620186a092919091163190737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b15801561067f57600080fd5b505af1158015610693573d6000803e3d6000fd5b505060265460255460408051878152600060208201819052606082840181905282015290516001600160a01b0393841695509290911692507f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a4919081900360800190a36020546026546040517ff340fa010000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015291169063f340fa019084906024016000604051808303818588803b15801561075957600080fd5b505af115801561076d573d6000803e3d6000fd5b50506027546001600160a01b0316319250610795915061078f90508484617bf2565b826135e4565b505050565b602580547fffffffffffffffffffffffff00000000000000000000000000000000000000009081163017909155602680548216611234179055602780549091166156781790556040516107ec906176f1565b60408082526004908201527f746573740000000000000000000000000000000000000000000000000000000060608201526080602082018190526003908201527f54544b000000000000000000000000000000000000000000000000000000000060a082015260c001604051809103906000f080158015610871573d6000803e3d6000fd5b50602380547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392831617905560275460405191169081906108ba906176fe565b6001600160a01b03928316815291166020820152604001604051809103906000f0801580156108ed573d6000803e3d6000fd5b50602480547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039283169081178255604080518082018252600e81527f4761746577617945564d2e736f6c0000000000000000000000000000000000006020820152602754602554925190861694810194909452604484019290925290921660648201526109de919060840160408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fc0c53b8b00000000000000000000000000000000000000000000000000000000179052613663565b601f80547fffffffffffffffffffffff0000000000000000000000000000000000000000ff166101006001600160a01b0393841681029190911791829055602080549190920483167fffffffffffffffffffffffff00000000000000000000000000000000000000009091168117909155602754602554604051929391821692911690610a6a9061770b565b6001600160a01b03938416815291831660208301529091166040820152606001604051809103906000f080158015610aa6573d6000803e3d6000fd5b50602180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039283161790556020546024546027546025546040519385169492831693918316921690610b0190617718565b6001600160a01b039485168152928416602084015290831660408301529091166060820152608001604051809103906000f080158015610b45573d6000803e3d6000fd5b50602280547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039283161790556027546040517fca669fa700000000000000000000000000000000000000000000000000000000815291166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015610be357600080fd5b505af1158015610bf7573d6000803e3d6000fd5b5050602480546027546022546040517f15d57fd40000000000000000000000000000000000000000000000000000000081526001600160a01b039283166004820152908216938101939093521692506315d57fd49150604401600060405180830381600087803b158015610c6a57600080fd5b505af1158015610c7e573d6000803e3d6000fd5b50506027546040517fc88a5e6d0000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152670de0b6b3a76400006024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c88a5e6d9150604401600060405180830381600087803b158015610d0257600080fd5b505af1158015610d16573d6000803e3d6000fd5b50506025546040517f06447d560000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506306447d569150602401600060405180830381600087803b158015610d8c57600080fd5b505af1158015610da0573d6000803e3d6000fd5b50506020546021546040517fae7a3a6f0000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201529116925063ae7a3a6f9150602401600060405180830381600087803b158015610e0657600080fd5b505af1158015610e1a573d6000803e3d6000fd5b50506020546022546040517f10188aef0000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152911692506310188aef9150602401600060405180830381600087803b158015610e8057600080fd5b505af1158015610e94573d6000803e3d6000fd5b50506021546023546040517f9b19251a0000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015291169250639b19251a9150602401600060405180830381600087803b158015610efa57600080fd5b505af1158015610f0e573d6000803e3d6000fd5b505050507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b03166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610f7057600080fd5b505af1158015610f84573d6000803e3d6000fd5b50506023546025546028546040517f40c10f190000000000000000000000000000000000000000000000000000000081526001600160a01b0392831660048201526024810191909152911692506340c10f199150604401600060405180830381600087803b158015610ff557600080fd5b505af1158015611009573d6000803e3d6000fd5b50506027546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b15801561107f57600080fd5b505af1158015611093573d6000803e3d6000fd5b50506022546025546028546040517f106e62900000000000000000000000000000000000000000000000000000000081526001600160a01b0392831660048201526024810191909152600060448201529116925063106e62909150606401600060405180830381600087803b15801561110b57600080fd5b505af115801561111f573d6000803e3d6000fd5b50505050565b6040517ff28dceb300000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f5a65726f416464726573730000000000000000000000000000000000000000006044820152600190737109709ecfa91a80626ff3989d68f67f5b1dd12d9063f28dceb390606401600060405180830381600087803b1580156111bb57600080fd5b505af11580156111cf573d6000803e3d6000fd5b50506020546040517ff340fa01000000000000000000000000000000000000000000000000000000008152600060048201526001600160a01b03909116925063f340fa01915083906024016105ca565b6060601680548060200260200160405190810160405280929190818152602001828054801561127757602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311611259575b5050505050905090565b6060601e805480602002602001604051908101604052809291908181526020016000905b828210156113ba57600084815260208082206040805180820182526002870290920180546001600160a01b03168352600181018054835181870281018701909452808452939591948681019491929084015b828210156113a357838290600052602060002001805461131690617c05565b80601f016020809104026020016040519081016040528092919081815260200182805461134290617c05565b801561138f5780601f106113645761010080835404028352916020019161138f565b820191906000526020600020905b81548152906001019060200180831161137257829003601f168201915b5050505050815260200190600101906112f7565b5050505081525050815260200190600101906112a5565b50505050905090565b6023546021546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620186a09260009216906370a0823190602401602060405180830381865afa15801561142f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114539190617c52565b90506114606000826135e4565b6026546040516001600160a01b03909116602482015260009060440160408051601f19818403018152918152602080830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f84fae76000000000000000000000000000000000000000000000000000000000179052602354905491517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b03928316600482015260248101879052929350169063095ea7b3906044016020604051808303816000875af1158015611543573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115679190617c6b565b506020546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b1580156115f657600080fd5b505af115801561160a573d6000803e3d6000fd5b50506026546025546023546040516001600160a01b03938416955091831693507f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a49261165d928992909116908790617c8d565b60405180910390a36020546026546023546040517f8c6f037f0000000000000000000000000000000000000000000000000000000081526001600160a01b0393841693638c6f037f936116be93908216928992909116908790600401617b8c565b600060405180830381600087803b1580156116d857600080fd5b505af11580156116ec573d6000803e3d6000fd5b50506023546021546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260009450911691506370a0823190602401602060405180830381865afa158015611758573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061177c9190617c52565b905061178884826135e4565b6023546025546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260009291909116906370a0823190602401602060405180830381865afa1580156117f2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118169190617c52565b90506118298560285461078f9190617cb5565b5050505050565b60606018805480602002602001604051908101604052809291908181526020018280548015611277576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311611259575050505050905090565b60606017805480602002602001604051908101604052809291908181526020018280548015611277576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311611259575050505050905090565b6023546021546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620186a09260009216906370a0823190602401602060405180830381865afa15801561195c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119809190617c52565b905061198d6000826135e4565b6023546020546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201526024810185905291169063095ea7b3906044016020604051808303816000875af11580156119fb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a1f9190617c6b565b506020546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b158015611aae57600080fd5b505af1158015611ac2573d6000803e3d6000fd5b5050602654602554602354604080518881526001600160a01b039283166020820152606081830181905260009082015290519382169550911692507f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a4919081900360800190a36020546026546023546040517ff45346dc0000000000000000000000000000000000000000000000000000000081526001600160a01b03928316600482015260248101869052908216604482015291169063f45346dc90606401600060405180830381600087803b158015611b9c57600080fd5b505af1158015611bb0573d6000803e3d6000fd5b50506023546021546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260009450911691506370a0823190602401602060405180830381865afa158015611c1c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c409190617c52565b9050611c4c83826135e4565b6023546025546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260009291909116906370a0823190602401602060405180830381865afa158015611cb6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cda9190617c52565b905061111f8460285461078f9190617cb5565b6060601b805480602002602001604051908101604052809291908181526020016000905b828210156113ba5783829060005260206000209060020201604051806040016040529081600082018054611d4490617c05565b80601f0160208091040260200160405190810160405280929190818152602001828054611d7090617c05565b8015611dbd5780601f10611d9257610100808354040283529160200191611dbd565b820191906000526020600020905b815481529060010190602001808311611da057829003601f168201915b5050505050815260200160018201805480602002602001604051908101604052809291908181526020018280548015611e5757602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019060040190602082600301049283019260010382029150808411611e045790505b50505050508152505081526020019060010190611d11565b6040517ff28dceb300000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f5a65726f416464726573730000000000000000000000000000000000000000006044820152600190737109709ecfa91a80626ff3989d68f67f5b1dd12d9063f28dceb390606401600060405180830381600087803b158015611f0557600080fd5b505af1158015611f19573d6000803e3d6000fd5b50506020546023546040517ff45346dc00000000000000000000000000000000000000000000000000000000815260006004820152602481018690526001600160a01b0391821660448201529116925063f45346dc91506064015b600060405180830381600087803b158015611f8e57600080fd5b505af1158015611829573d6000803e3d6000fd5b6060601a805480602002602001604051908101604052809291908181526020016000905b828210156113ba578382906000526020600020018054611fe590617c05565b80601f016020809104026020016040519081016040528092919081815260200182805461201190617c05565b801561205e5780601f106120335761010080835404028352916020019161205e565b820191906000526020600020905b81548152906001019060200180831161204157829003601f168201915b505050505081526020019060010190611fc6565b6060601d805480602002602001604051908101604052809291908181526020016000905b828210156113ba5760008481526020908190206040805180820182526002860290920180546001600160a01b0316835260018101805483518187028101870190945280845293949193858301939283018282801561215557602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190600401906020826003010492830192600103820291508084116121025790505b50505050508152505081526020019060010190612096565b6027546026546040516001600160a01b039182166024820152620186a09291909116319060009060440160408051601f19818403018152918152602080830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f84fae760000000000000000000000000000000000000000000000000000000001790525490517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b15801561227e57600080fd5b505af1158015612292573d6000803e3d6000fd5b50506026546025546040516001600160a01b039283169450911691507f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a4906122e09087906000908790617c8d565b60405180910390a36020546026546040517f29c59b5d0000000000000000000000000000000000000000000000000000000081526001600160a01b03928316926329c59b5d92879261233a92909116908690600401617cc8565b6000604051808303818588803b15801561235357600080fd5b505af1158015612367573d6000803e3d6000fd5b50506027546001600160a01b031631925061111f915061078f90508585617bf2565b6026546040516001600160a01b03909116602482015260009060440160408051601f19818403018152918152602080830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f84fae760000000000000000000000000000000000000000000000000000000001790525490517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b15801561248c57600080fd5b505af11580156124a0573d6000803e3d6000fd5b50506026546025546040516001600160a01b039283169450911691507f2a21062ee9199c2e205622999eeb7c3da73153674f36a0acd3f74fa6af67bde3906124e9908590617cea565b60405180910390a36020546026546040517f1b8b921d0000000000000000000000000000000000000000000000000000000081526001600160a01b0392831692631b8b921d92611f74929116908590600401617cc8565b6060601c805480602002602001604051908101604052809291908181526020016000905b828210156113ba5760008481526020908190206040805180820182526002860290920180546001600160a01b0316835260018101805483518187028101870190945280845293949193858301939283018282801561262357602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190600401906020826003010492830192600103820291508084116125d05790505b50505050508152505081526020019060010190612564565b6023546020546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620186a06024820181905292919091169063095ea7b3906044016020604051808303816000875af11580156126b0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126d49190617c6b565b506025546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561274757600080fd5b505af115801561275b573d6000803e3d6000fd5b50506021546023546040517f9a5904270000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015291169250639a5904279150602401600060405180830381600087803b1580156127c157600080fd5b505af11580156127d5573d6000803e3d6000fd5b50506040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fac2175f1000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e091506024015b600060405180830381600087803b15801561285f57600080fd5b505af1158015612873573d6000803e3d6000fd5b50506020546026546023546040517ff45346dc0000000000000000000000000000000000000000000000000000000081526001600160a01b0392831660048201526024810187905290821660448201529116925063f45346dc9150606401611f74565b60606019805480602002602001604051908101604052809291908181526020016000905b828210156113ba57838290600052602060002001805461291990617c05565b80601f016020809104026020016040519081016040528092919081815260200182805461294590617c05565b80156129925780601f1061296757610100808354040283529160200191612992565b820191906000526020600020905b81548152906001019060200180831161297557829003601f168201915b5050505050815260200190600101906128fa565b60085460009060ff16156129be575060085460ff1690565b6040517f667f9d70000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d600482018190527f6661696c65640000000000000000000000000000000000000000000000000000602483015260009163667f9d7090604401602060405180830381865afa158015612a4f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a739190617c52565b1415905090565b6026546040516001600160a01b039091166024820152600090819060440160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f84fae76000000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063f28dceb390612b719060040160208082526017908201527f496e73756666696369656e744552433230416d6f756e74000000000000000000604082015260600190565b600060405180830381600087803b158015612b8b57600080fd5b505af1158015612b9f573d6000803e3d6000fd5b50506020546026546023546040517f8c6f037f0000000000000000000000000000000000000000000000000000000081526001600160a01b039384169550638c6f037f945061049b9392831692889216908790600401617b8c565b6026546040516001600160a01b039091166024820152600090819060440160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f84fae76000000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063f28dceb390612cf19060040160208082526015908201527f496e73756666696369656e74455448416d6f756e740000000000000000000000604082015260600190565b600060405180830381600087803b158015612d0b57600080fd5b505af1158015612d1f573d6000803e3d6000fd5b50506020546026546040517f29c59b5d0000000000000000000000000000000000000000000000000000000081526001600160a01b0392831694506329c59b5d93508692612d739216908690600401617cc8565b6000604051808303818588803b158015612d8c57600080fd5b505af1158015612da0573d6000803e3d6000fd5b50505050505050565b6026546040516001600160a01b03909116602482015260019060009060440160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f84fae76000000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063f28dceb390612ea1906004016020808252600b908201527f5a65726f41646472657373000000000000000000000000000000000000000000604082015260600190565b600060405180830381600087803b158015612ebb57600080fd5b505af1158015612ecf573d6000803e3d6000fd5b50506020546040517f29c59b5d0000000000000000000000000000000000000000000000000000000081526001600160a01b0390911692506329c59b5d91508490612d73906000908690600401617cc8565b60606015805480602002602001604051908101604052809291908181526020018280548015611277576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311611259575050505050905090565b602480546020546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620186a093810184905291169063095ea7b3906044016020604051808303816000875af1158015612ff3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130179190617c6b565b506020546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b1580156130a657600080fd5b505af11580156130ba573d6000803e3d6000fd5b5050602654602554602454604080518781526001600160a01b039283166020820152606081830181905260009082015290519382169550911692507f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a4919081900360800190a3602054602654602480546040517ff45346dc0000000000000000000000000000000000000000000000000000000081526001600160a01b0393841660048201529182018590528216604482015291169063f45346dc90606401600060405180830381600087803b15801561319357600080fd5b505af11580156131a7573d6000803e3d6000fd5b5050602480546025546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260009550911692506370a082319101602060405180830381865afa158015613212573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132369190617c52565b90506132498260285461078f9190617cb5565b5050565b6026546040516001600160a01b039091166024820152620186a09060009060440160408051601f19818403018152918152602080830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f84fae76000000000000000000000000000000000000000000000000000000000179052602354905491517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b03928316600482015260248101869052929350169063095ea7b3906044016020604051808303816000875af1158015613335573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133599190617c6b565b506025546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156133cc57600080fd5b505af11580156133e0573d6000803e3d6000fd5b50506021546023546040517f9a5904270000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015291169250639a5904279150602401600060405180830381600087803b15801561344657600080fd5b505af115801561345a573d6000803e3d6000fd5b50506040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fac2175f1000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401612b71565b6023546020546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260006024820181905292919091169063095ea7b3906044016020604051808303816000875af1158015613541573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135659190617c6b565b506040517ff28dceb300000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f496e73756666696369656e744552433230416d6f756e740000000000000000006044820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063f28dceb390606401612845565b6040517f98296c540000000000000000000000000000000000000000000000000000000081526004810183905260248101829052737109709ecfa91a80626ff3989d68f67f5b1dd12d906398296c549060440160006040518083038186803b15801561364f57600080fd5b505afa1580156104c9573d6000803e3d6000fd5b600061366d617725565b613678848483613682565b9150505b92915050565b60008061368f85846136fd565b90506136f26040518060400160405280601d81526020017f4552433139363750726f78792e736f6c3a4552433139363750726f787900000081525082866040516020016136dd929190617cc8565b60405160208183030381529060405285613709565b9150505b9392505050565b60006136f68383613737565b60c0810151516000901561372d5761372684848460c00151613752565b90506136f6565b61372684846138f8565b600061374383836139e3565b6136f683836020015184613709565b60008061375d6139ef565b9050600061376b8683613ac2565b905060006137828260600151836020015185613f68565b905060006137928383898961417a565b9050600061379f82614ff7565b602081015181519192509060030b15613812578982604001516040516020016137c9929190617cfd565b60408051601f19818403018152908290527f08c379a000000000000000000000000000000000000000000000000000000000825261380991600401617cea565b60405180910390fd5b60006138556040518060400160405280601581526020017f4465706c6f79656420746f20616464726573733a2000000000000000000000008152508360016151c6565b6040517fc6ce059d000000000000000000000000000000000000000000000000000000008152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c6ce059d906138a8908490600401617cea565b602060405180830381865afa1580156138c5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138e99190617d7e565b9b9a5050505050505050505050565b6040517f8d1cc9250000000000000000000000000000000000000000000000000000000081526000908190737109709ecfa91a80626ff3989d68f67f5b1dd12d90638d1cc9259061394d908790600401617cea565b600060405180830381865afa15801561396a573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526139929190810190617e8f565b905060006139c082856040516020016139ac929190617ec4565b6040516020818303038152906040526153c6565b90506001600160a01b0381166136785784846040516020016137c9929190617ef3565b613249828260006153d9565b604080518082018252600381527f6f75740000000000000000000000000000000000000000000000000000000000602082015290517fd145736c000000000000000000000000000000000000000000000000000000008152606091737109709ecfa91a80626ff3989d68f67f5b1dd12d91829063d145736c90613a76908490600401617f9e565b600060405180830381865afa158015613a93573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052613abb9190810190617fe5565b9250505090565b613af46040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b6000737109709ecfa91a80626ff3989d68f67f5b1dd12d9050613b3f6040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b613b48856154dc565b60208201526000613b58866158c1565b90506000836001600160a01b031663d930a0e66040518163ffffffff1660e01b8152600401600060405180830381865afa158015613b9a573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052613bc29190810190617fe5565b86838560200151604051602001613bdc949392919061802e565b60408051601f19818403018152908290527f60f9bb1100000000000000000000000000000000000000000000000000000000825291506000906001600160a01b038616906360f9bb1190613c34908590600401617cea565b600060405180830381865afa158015613c51573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052613c799190810190617fe5565b6040517fdb4235f60000000000000000000000000000000000000000000000000000000081529091506001600160a01b0386169063db4235f690613cc1908490600401618132565b602060405180830381865afa158015613cde573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613d029190617c6b565b613d1757816040516020016137c99190618184565b6040517f49c4fac80000000000000000000000000000000000000000000000000000000081526001600160a01b038616906349c4fac890613d5c908490600401618216565b600060405180830381865afa158015613d79573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052613da19190810190617fe5565b84526040517fdb4235f60000000000000000000000000000000000000000000000000000000081526001600160a01b0386169063db4235f690613de8908490600401618268565b602060405180830381865afa158015613e05573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613e299190617c6b565b15613ebe576040517f49c4fac80000000000000000000000000000000000000000000000000000000081526001600160a01b038616906349c4fac890613e73908490600401618268565b600060405180830381865afa158015613e90573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052613eb89190810190617fe5565b60408501525b846001600160a01b03166349c4fac8828660000151604051602001613ee391906182ba565b6040516020818303038152906040526040518363ffffffff1660e01b8152600401613f0f929190618326565b600060405180830381865afa158015613f2c573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052613f549190810190617fe5565b606085015250608083015250949350505050565b60408051600480825260a0820190925260609160009190816020015b6060815260200190600190039081613f845790505090506040518060400160405280600481526020017f677265700000000000000000000000000000000000000000000000000000000081525081600081518110613fe457613fe461834b565b60200260200101819052506040518060400160405280600381526020017f2d726c0000000000000000000000000000000000000000000000000000000000815250816001815181106140385761403861834b565b602002602001018190525084604051602001614054919061837a565b604051602081830303815290604052816002815181106140765761407661834b565b60200260200101819052508260405160200161409291906183e6565b604051602081830303815290604052816003815181106140b4576140b461834b565b602002602001018190525060006140ca82614ff7565b602080820151604080518082018252600581527f2e6a736f6e000000000000000000000000000000000000000000000000000000818501908152825180840184526000808252908601528251808401909352905182529281019290925291925061415b9060408051808201825260008082526020918201528151808301909252845182528085019082015290615b44565b61417057856040516020016137c99190618427565b9695505050505050565b60a0810151604080518082018252600080825260209182015281518083019092528251808352928101910152606090737109709ecfa91a80626ff3989d68f67f5b1dd12d90156141ca565b511590565b61433e57826020015115614286576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605860248201527f54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f742060448201527f62652075736564207768656e207468652060736b6970566572696679536f757260648201527f6365436f646560206f7074696f6e206973206074727565600000000000000000608482015260a401613809565b8260c001511561433e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605360248201527f54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f742060448201527f62652075736564207768656e207468652060736b69704c6963656e736554797060648201527f6560206f7074696f6e2069732060747275656000000000000000000000000000608482015260a401613809565b6040805160ff8082526120008201909252600091816020015b606081526020019060019003908161435757905050905060006040518060400160405280600381526020017f6e707800000000000000000000000000000000000000000000000000000000008152508282806143b2906184b8565b935060ff16815181106143c7576143c761834b565b60200260200101819052506040518060400160405280600d81526020017f302e302e312d616c7068612e370000000000000000000000000000000000000081525060405160200161441891906184d7565b604051602081830303815290604052828280614433906184b8565b935060ff16815181106144485761444861834b565b60200260200101819052506040518060400160405280600681526020017f6465706c6f790000000000000000000000000000000000000000000000000000815250828280614495906184b8565b935060ff16815181106144aa576144aa61834b565b60200260200101819052506040518060400160405280600e81526020017f2d2d636f6e74726163744e616d650000000000000000000000000000000000008152508282806144f7906184b8565b935060ff168151811061450c5761450c61834b565b60200260200101819052508760200151828280614528906184b8565b935060ff168151811061453d5761453d61834b565b60200260200101819052506040518060400160405280600e81526020017f2d2d636f6e74726163745061746800000000000000000000000000000000000081525082828061458a906184b8565b935060ff168151811061459f5761459f61834b565b6020908102919091010152875182826145b7816184b8565b935060ff16815181106145cc576145cc61834b565b60200260200101819052506040518060400160405280600981526020017f2d2d636861696e49640000000000000000000000000000000000000000000000815250828280614619906184b8565b935060ff168151811061462e5761462e61834b565b602002602001018190525061464246615ba5565b828261464d816184b8565b935060ff16815181106146625761466261834b565b60200260200101819052506040518060400160405280600f81526020017f2d2d6275696c64496e666f46696c6500000000000000000000000000000000008152508282806146af906184b8565b935060ff16815181106146c4576146c461834b565b6020026020010181905250868282806146dc906184b8565b935060ff16815181106146f1576146f161834b565b60209081029190910101528551156148185760408051808201909152601581527f2d2d636f6e7374727563746f7242797465636f6465000000000000000000000060208201528282614742816184b8565b935060ff16815181106147575761475761834b565b60209081029190910101526040517f71aad10d0000000000000000000000000000000000000000000000000000000081526001600160a01b038416906371aad10d906147a7908990600401617cea565b600060405180830381865afa1580156147c4573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526147ec9190810190617fe5565b82826147f7816184b8565b935060ff168151811061480c5761480c61834b565b60200260200101819052505b8460200151156148e85760408051808201909152601281527f2d2d766572696679536f75726365436f6465000000000000000000000000000060208201528282614861816184b8565b935060ff16815181106148765761487661834b565b60200260200101819052506040518060400160405280600581526020017f66616c73650000000000000000000000000000000000000000000000000000008152508282806148c3906184b8565b935060ff16815181106148d8576148d861834b565b6020026020010181905250614aaf565b6149206141c58660a0015160408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6149b35760408051808201909152600d81527f2d2d6c6963656e7365547970650000000000000000000000000000000000000060208201528282614963816184b8565b935060ff16815181106149785761497861834b565b60200260200101819052508460a00151604051602001614998919061837a565b6040516020818303038152906040528282806148c3906184b8565b8460c001511580156149f65750604080890151815180830183526000808252602091820152825180840190935281518352908101908201526149f490511590565b155b15614aaf5760408051808201909152600d81527f2d2d6c6963656e7365547970650000000000000000000000000000000000000060208201528282614a3a816184b8565b935060ff1681518110614a4f57614a4f61834b565b6020026020010181905250614a6388615c45565b604051602001614a73919061837a565b604051602081830303815290604052828280614a8e906184b8565b935060ff1681518110614aa357614aa361834b565b60200260200101819052505b60408086015181518083018352600080825260209182015282518084019093528151835290810190820152614ae390511590565b614b785760408051808201909152600b81527f2d2d72656c61796572496400000000000000000000000000000000000000000060208201528282614b26816184b8565b935060ff1681518110614b3b57614b3b61834b565b60200260200101819052508460400151828280614b57906184b8565b935060ff1681518110614b6c57614b6c61834b565b60200260200101819052505b606085015115614c995760408051808201909152600681527f2d2d73616c74000000000000000000000000000000000000000000000000000060208201528282614bc1816184b8565b935060ff1681518110614bd657614bd661834b565b602090810291909101015260608501516040517fb11a19e800000000000000000000000000000000000000000000000000000000815260048101919091526001600160a01b0384169063b11a19e890602401600060405180830381865afa158015614c45573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052614c6d9190810190617fe5565b8282614c78816184b8565b935060ff1681518110614c8d57614c8d61834b565b60200260200101819052505b60e08501515115614d405760408051808201909152600a81527f2d2d6761734c696d69740000000000000000000000000000000000000000000060208201528282614ce3816184b8565b935060ff1681518110614cf857614cf861834b565b6020026020010181905250614d148560e0015160000151615ba5565b8282614d1f816184b8565b935060ff1681518110614d3457614d3461834b565b60200260200101819052505b60e08501516020015115614dea5760408051808201909152600a81527f2d2d67617350726963650000000000000000000000000000000000000000000060208201528282614d8d816184b8565b935060ff1681518110614da257614da261834b565b6020026020010181905250614dbe8560e0015160200151615ba5565b8282614dc9816184b8565b935060ff1681518110614dde57614dde61834b565b60200260200101819052505b60e08501516040015115614e945760408051808201909152600e81527f2d2d6d617846656550657247617300000000000000000000000000000000000060208201528282614e37816184b8565b935060ff1681518110614e4c57614e4c61834b565b6020026020010181905250614e688560e0015160400151615ba5565b8282614e73816184b8565b935060ff1681518110614e8857614e8861834b565b60200260200101819052505b60e08501516060015115614f3e5760408051808201909152601681527f2d2d6d61785072696f726974794665655065724761730000000000000000000060208201528282614ee1816184b8565b935060ff1681518110614ef657614ef661834b565b6020026020010181905250614f128560e0015160600151615ba5565b8282614f1d816184b8565b935060ff1681518110614f3257614f3261834b565b60200260200101819052505b60008160ff1667ffffffffffffffff811115614f5c57614f5c617da7565b604051908082528060200260200182016040528015614f8f57816020015b6060815260200190600190039081614f7a5790505b50905060005b8260ff168160ff161015614fe857838160ff1681518110614fb857614fb861834b565b6020026020010151828260ff1681518110614fd557614fd561834b565b6020908102919091010152600101614f95565b5093505050505b949350505050565b61501e6040518060600160405280600060030b815260200160608152602001606081525090565b60408051808201825260048082527f6261736800000000000000000000000000000000000000000000000000000000602083015291517fd145736c000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d92600091849163d145736c916150a491869101618542565b600060405180830381865afa1580156150c1573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526150e99190810190617fe5565b905060006150f78683616734565b90506000846001600160a01b031663f45c1ce7836040518263ffffffff1660e01b81526004016151279190617a7e565b6000604051808303816000875af1158015615146573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261516e9190810190618589565b805190915060030b158015906151875750602081015151155b80156151965750604081015151155b1561417057816000815181106151ae576151ae61834b565b60200260200101516040516020016137c9919061863f565b606060006151fb8560408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6040805180820182526000808252602091820152815180830190925286518252808701908201529091506152329082905b90616889565b1561538f5760006152af826152a9846152a36152758a60408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6040805180820182526000808252602091820152815180830190925282518252918201519181019190915290565b906168b0565b90616912565b604080518082018252600181527f0a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152909150615313908290616889565b1561537d57604080518082018252600181527f0a000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261537a905b8290616997565b90505b615386816169bd565b925050506136f6565b82156153a85784846040516020016137c992919061882b565b50506040805160208101909152600081526136f6565b509392505050565b6000808251602084016000f09392505050565b8160a00151156153e857505050565b60006153f5848484616a26565b9050600061540282614ff7565b602081015181519192509060030b15801561549e5750604080518082018252600781527f53554343455353000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261549e9060408051808201825260008082526020918201528151808301909252845182528085019082015261522c565b156154ab57505050505050565b604082015151156154cb5781604001516040516020016137c991906188d2565b806040516020016137c99190618930565b606060006155118360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600481527f2e736f6c0000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152909150615576905b8290615b44565b156155e557604080518082018252600481527f2e736f6c00000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526136f6906155e0908390616fc1565b6169bd565b604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152615647905b829061704b565b60010361571457604080518082018252600181527f3a00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526156ad90615373565b50604080518082018252600181527f3a00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526136f6906155e0905b8390616997565b604080518082018252600581527f2e6a736f6e000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526157739061556f565b156158aa57604080518082018252600181527f2f000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201819052845180860190955292518452830152906157db9083906170e5565b9050600081600183516157ee9190617cb5565b815181106157fe576157fe61834b565b602002602001015190506158a16155e06158746040518060400160405280600581526020017f2e6a736f6e00000000000000000000000000000000000000000000000000000081525060408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b60408051808201825260008082526020918201528151808301909252855182528086019082015290616fc1565b95945050505050565b826040516020016137c9919061899b565b50919050565b606060006158f68360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600481527f2e736f6c00000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201529091506159589061556f565b15615966576136f6816169bd565b604080518082018252600181527f3a00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526159c590615640565b600103615a2f57604080518082018252600181527f3a00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526136f6906155e09061570d565b604080518082018252600581527f2e6a736f6e00000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152615a8e9061556f565b156158aa57604080518082018252600181527f2f00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820181905284518086019095529251845283015290615af69083906170e5565b9050600181511115615b32578060028251615b119190617cb5565b81518110615b2157615b2161834b565b602002602001015192505050919050565b50826040516020016137c9919061899b565b805182516000911115615b595750600061367c565b81518351602085015160009291615b6f91617bf2565b615b799190617cb5565b905082602001518103615b9057600191505061367c565b82516020840151819020912014905092915050565b60606000615bb28361718a565b600101905060008167ffffffffffffffff811115615bd257615bd2617da7565b6040519080825280601f01601f191660200182016040528015615bfc576020820181803683370190505b5090508181016020015b600019017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a8504945084615c0657509392505050565b604081810151815180830183526000808252602091820181905283518085018552835181529282018383015283518085018552600a81527f554e4c4943454e5345440000000000000000000000000000000000000000000081840190815285518087018752838152840192909252845180860190955251845290830152606091615cd1905b829061726c565b15615d1157505060408051808201909152600481527f4e6f6e65000000000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600981527f556e6c6963656e7365000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152615d7090615cca565b15615db057505060408051808201909152600981527f556e6c6963656e736500000000000000000000000000000000000000000000006020820152919050565b604080518082018252600381527f4d4954000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152615e0f90615cca565b15615e4f57505060408051808201909152600381527f4d495400000000000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f47504c2d322e302d6f6e6c79000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152615eae90615cca565b80615f135750604080518082018252601081527f47504c2d322e302d6f722d6c617465720000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152615f1390615cca565b15615f5357505060408051808201909152600981527f474e552047504c763200000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f47504c2d332e302d6f6e6c79000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152615fb290615cca565b806160175750604080518082018252601081527f47504c2d332e302d6f722d6c61746572000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261601790615cca565b1561605757505060408051808201909152600981527f474e552047504c763300000000000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4c47504c2d322e312d6f6e6c7900000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526160b690615cca565b8061611b5750604080518082018252601181527f4c47504c2d322e312d6f722d6c617465720000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261611b90615cca565b1561615b57505060408051808201909152600c81527f474e55204c47504c76322e3100000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4c47504c2d332e302d6f6e6c7900000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526161ba90615cca565b8061621f5750604080518082018252601181527f4c47504c2d332e302d6f722d6c617465720000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261621f90615cca565b1561625f57505060408051808201909152600a81527f474e55204c47504c7633000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f4253442d322d436c617573650000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526162be90615cca565b156162fe57505060408051808201909152600c81527f4253442d322d436c6175736500000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f4253442d332d436c6175736500000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261635d90615cca565b1561639d57505060408051808201909152600c81527f4253442d332d436c6175736500000000000000000000000000000000000000006020820152919050565b604080518082018252600781527f4d504c2d322e3000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526163fc90615cca565b1561643c57505060408051808201909152600781527f4d504c2d322e30000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600781527f4f534c2d332e30000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261649b90615cca565b156164db57505060408051808201909152600781527f4f534c2d332e30000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600a81527f4170616368652d322e30000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261653a90615cca565b1561657a57505060408051808201909152600a81527f4170616368652d322e30000000000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4147504c2d332e302d6f6e6c7900000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526165d990615cca565b8061663e5750604080518082018252601181527f4147504c2d332e302d6f722d6c617465720000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261663e90615cca565b1561667e57505060408051808201909152600a81527f474e55204147504c7633000000000000000000000000000000000000000000006020820152919050565b604080518082018252600881527f4255534c2d312e31000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526166dd90615cca565b1561671d57505060408051808201909152600781527f42534c20312e31000000000000000000000000000000000000000000000000006020820152919050565b604080840151845191516137c99290602001618a79565b60608060005b84518110156167bf57818582815181106167565761675661834b565b602002602001015160405160200161676f929190617ec4565b60405160208183030381529060405291506001855161678e9190617cb5565b81146167b757816040516020016167a59190618be2565b60405160208183030381529060405291505b60010161673a565b5060408051600380825260808201909252600091816020015b60608152602001906001900390816167d857905050905083816000815181106168035761680361834b565b60200260200101819052506040518060400160405280600281526020017f2d63000000000000000000000000000000000000000000000000000000000000815250816001815181106168575761685761834b565b602002602001018190525081816002815181106168765761687661834b565b6020908102919091010152949350505050565b60208083015183518351928401516000936168a79291849190617280565b14159392505050565b604080518082019091526000808252602082015260006168e28460000151856020015185600001518660200151617391565b90508360200151816168f49190617cb5565b84518590616903908390617cb5565b90525060208401525090919050565b604080518082019091526000808252602082015281518351101561693757508161367c565b602080830151908401516001911461695e5750815160208481015190840151829020919020145b801561698f57825184518590616975908390617cb5565b905250825160208501805161698b908390617bf2565b9052505b509192915050565b60408051808201909152600080825260208201526169b68383836174b1565b5092915050565b60606000826000015167ffffffffffffffff8111156169de576169de617da7565b6040519080825280601f01601f191660200182016040528015616a08576020820181803683370190505b50905060006020820190506169b6818560200151866000015161755c565b60606000616a326139ef565b6040805160ff808252612000820190925291925060009190816020015b6060815260200190600190039081616a4f57905050905060006040518060400160405280600381526020017f6e70780000000000000000000000000000000000000000000000000000000000815250828280616aaa906184b8565b935060ff1681518110616abf57616abf61834b565b60200260200101819052506040518060400160405280600781526020017f5e312e33322e3300000000000000000000000000000000000000000000000000815250604051602001616b109190618c23565b604051602081830303815290604052828280616b2b906184b8565b935060ff1681518110616b4057616b4061834b565b60200260200101819052506040518060400160405280600881526020017f76616c6964617465000000000000000000000000000000000000000000000000815250828280616b8d906184b8565b935060ff1681518110616ba257616ba261834b565b602002602001018190525082604051602001616bbe91906183e6565b604051602081830303815290604052828280616bd9906184b8565b935060ff1681518110616bee57616bee61834b565b60200260200101819052506040518060400160405280600a81526020017f2d2d636f6e747261637400000000000000000000000000000000000000000000815250828280616c3b906184b8565b935060ff1681518110616c5057616c5061834b565b6020026020010181905250616c6587846175d6565b8282616c70816184b8565b935060ff1681518110616c8557616c8561834b565b602090810291909101015285515115616d315760408051808201909152600b81527f2d2d7265666572656e636500000000000000000000000000000000000000000060208201528282616cd7816184b8565b935060ff1681518110616cec57616cec61834b565b6020026020010181905250616d058660000151846175d6565b8282616d10816184b8565b935060ff1681518110616d2557616d2561834b565b60200260200101819052505b856080015115616d9f5760408051808201909152601881527f2d2d756e73616665536b697053746f72616765436865636b000000000000000060208201528282616d7a816184b8565b935060ff1681518110616d8f57616d8f61834b565b6020026020010181905250616e05565b8415616e055760408051808201909152601281527f2d2d726571756972655265666572656e6365000000000000000000000000000060208201528282616de4816184b8565b935060ff1681518110616df957616df961834b565b60200260200101819052505b60408601515115616ea15760408051808201909152600d81527f2d2d756e73616665416c6c6f770000000000000000000000000000000000000060208201528282616e4f816184b8565b935060ff1681518110616e6457616e6461834b565b60200260200101819052508560400151828280616e80906184b8565b935060ff1681518110616e9557616e9561834b565b60200260200101819052505b856060015115616f0b5760408051808201909152601481527f2d2d756e73616665416c6c6f7752656e616d657300000000000000000000000060208201528282616eea816184b8565b935060ff1681518110616eff57616eff61834b565b60200260200101819052505b60008160ff1667ffffffffffffffff811115616f2957616f29617da7565b604051908082528060200260200182016040528015616f5c57816020015b6060815260200190600190039081616f475790505b50905060005b8260ff168160ff161015616fb557838160ff1681518110616f8557616f8561834b565b6020026020010151828260ff1681518110616fa257616fa261834b565b6020908102919091010152600101616f62565b50979650505050505050565b6040805180820190915260008082526020820152815183511015616fe657508161367c565b81518351602085015160009291616ffc91617bf2565b6170069190617cb5565b60208401519091506001908214617027575082516020840151819020908220145b80156170425783518551869061703e908390617cb5565b9052505b50929392505050565b600080826000015161706f8560000151866020015186600001518760200151617391565b6170799190617bf2565b90505b8351602085015161708d9190617bf2565b81116169b6578161709d81618c68565b92505082600001516170d48560200151836170b89190617cb5565b86516170c49190617cb5565b8386600001518760200151617391565b6170de9190617bf2565b905061707c565b606060006170f3848461704b565b6170fe906001617bf2565b67ffffffffffffffff81111561711657617116617da7565b60405190808252806020026020018201604052801561714957816020015b60608152602001906001900390816171345790505b50905060005b81518110156153be576171656155e08686616997565b8282815181106171775761717761834b565b602090810291909101015260010161714f565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f01000000000000000083106171d3577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef810000000083106171ff576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc10000831061721d57662386f26fc10000830492506010015b6305f5e1008310617235576305f5e100830492506008015b612710831061724957612710830492506004015b6064831061725b576064830492506002015b600a831061367c5760010192915050565b60006172788383617616565b159392505050565b600080858411617387576020841161733357600084156172cb5760016172a7866020617cb5565b6172b2906008618c82565b6172bd906002618d80565b6172c79190617cb5565b1990505b83518116856172da8989617bf2565b6172e49190617cb5565b805190935082165b81811461731e578784116173065787945050505050614fef565b8361731081618d8c565b9450508284511690506172ec565b6173288785617bf2565b945050505050614fef565b8383206173408588617cb5565b61734a9087617bf2565b91505b85821061738557848220808203617372576173688684617bf2565b9350505050614fef565b61737d600184617cb5565b92505061734d565b505b5092949350505050565b6000838186851161749c576020851161744b57600085156173dd5760016173b9876020617cb5565b6173c4906008618c82565b6173cf906002618d80565b6173d99190617cb5565b1990505b845181166000876173ee8b8b617bf2565b6173f89190617cb5565b855190915083165b82811461743d57818610617425576174188b8b617bf2565b9650505050505050614fef565b8561742f81618c68565b965050838651169050617400565b859650505050505050614fef565b508383206000905b61745d8689617cb5565b821161749a578583208082036174795783945050505050614fef565b617484600185617bf2565b935050818061749290618c68565b925050617453565b505b6174a68787617bf2565b979650505050505050565b604080518082019091526000808252602082015260006174e38560000151866020015186600001518760200151617391565b6020808701805191860191909152519091506174ff9082617cb5565b8352845160208601516175129190617bf2565b81036175215760008552617553565b8351835161752f9190617bf2565b8551869061753e908390617cb5565b905250835161754d9082617bf2565b60208601525b50909392505050565b602081106175945781518352617573602084617bf2565b9250617580602083617bf2565b915061758d602082617cb5565b905061755c565b60001981156175c35760016175aa836020617cb5565b6175b690610100618d80565b6175c09190617cb5565b90505b9151835183169219169190911790915250565b606060006175e48484613ac2565b80516020808301516040519394506175fe93909101618da3565b60405160208183030381529060405291505092915050565b8151815160009190811115617629575081515b6020808501519084015160005b838110156176e257825182518082146176b257600019602087101561769157600184617663896020617cb5565b61766d9190617bf2565b617678906008618c82565b617683906002618d80565b61768d9190617cb5565b1990505b81811683821681810391146176af57975061367c9650505050505050565b50505b6176bd602086617bf2565b94506176ca602085617bf2565b935050506020816176db9190617bf2565b9050617636565b50845186516141709190618dfb565b610c9f80618e1c83390190565b6112a680619abb83390190565b6116fe8061ad6183390190565b61155a8061c45f83390190565b6040518060e0016040528060608152602001606081526020016060815260200160001515815260200160001515815260200160001515815260200161776861776d565b905290565b604051806101000160405280600015158152602001600015158152602001606081526020016000801916815260200160608152602001606081526020016000151581526020016177686040518060800160405280600081526020016000815260200160008152602001600081525090565b602080825282518282018190526000918401906040840190835b8181101561781f5783516001600160a01b03168352602093840193909201916001016177f8565b509095945050505050565b60005b8381101561784557818101518382015260200161782d565b50506000910152565b6000815180845261786681602086016020860161782a565b601f01601f19169290920160200192915050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015617976577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452815180516001600160a01b03168652602090810151604082880181905281519088018190529101906060600582901b88018101919088019060005b8181101561795c577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa08a850301835261794684865161784e565b602095860195909450929092019160010161790c565b5091975050506020948501949290920191506001016178a2565b50929695505050505050565b600081518084526020840193506020830160005b828110156179d65781517fffffffff0000000000000000000000000000000000000000000000000000000016865260209586019590910190600101617996565b5093949350505050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015617976577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08786030184528151805160408752617a4c604088018261784e565b9050602082015191508681036020880152617a678183617982565b965050506020938401939190910190600101617a08565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015617976577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452617ae085835161784e565b94506020938401939190910190600101617aa6565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015617976577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc087860301845281516001600160a01b0381511686526020810151905060406020870152617b766040870182617982565b9550506020938401939190910190600101617b1d565b6001600160a01b03851681528360208201526001600160a01b0383166040820152608060608201526000614170608083018461784e565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8082018082111561367c5761367c617bc3565b600181811c90821680617c1957607f821691505b6020821081036158bb577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060208284031215617c6457600080fd5b5051919050565b600060208284031215617c7d57600080fd5b815180151581146136f657600080fd5b8381526001600160a01b03831660208201526060604082015260006158a1606083018461784e565b8181038181111561367c5761367c617bc3565b6001600160a01b0383168152604060208201526000614fef604083018461784e565b6020815260006136f6602083018461784e565b7f4661696c656420746f206465706c6f7920636f6e747261637420000000000000815260008351617d3581601a85016020880161782a565b7f3a20000000000000000000000000000000000000000000000000000000000000601a918401918201528351617d7281601c84016020880161782a565b01601c01949350505050565b600060208284031215617d9057600080fd5b81516001600160a01b03811681146136f657600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040516060810167ffffffffffffffff81118282101715617df957617df9617da7565b60405290565b60008067ffffffffffffffff841115617e1a57617e1a617da7565b50604051601f19601f85018116603f0116810181811067ffffffffffffffff82111715617e4957617e49617da7565b604052838152905080828401851015617e6157600080fd5b6153be84602083018561782a565b600082601f830112617e8057600080fd5b6136f683835160208501617dff565b600060208284031215617ea157600080fd5b815167ffffffffffffffff811115617eb857600080fd5b61367884828501617e6f565b60008351617ed681846020880161782a565b835190830190617eea81836020880161782a565b01949350505050565b7f4661696c656420746f206465706c6f7920636f6e747261637420000000000000815260008351617f2b81601a85016020880161782a565b7f207573696e6720636f6e7374727563746f722064617461202200000000000000601a918401918201528351617f6881603384016020880161782a565b7f220000000000000000000000000000000000000000000000000000000000000060339290910191820152603401949350505050565b60408152600b60408201527f464f554e4452595f4f555400000000000000000000000000000000000000000060608201526080602082015260006136f6608083018461784e565b600060208284031215617ff757600080fd5b815167ffffffffffffffff81111561800e57600080fd5b8201601f8101841361801f57600080fd5b61367884825160208401617dff565b60008551618040818460208a0161782a565b7f2f00000000000000000000000000000000000000000000000000000000000000908301908152855161807a816001840160208a0161782a565b7f2f000000000000000000000000000000000000000000000000000000000000006001929091019182015284516180b881600284016020890161782a565b6001818301019150507f2f00000000000000000000000000000000000000000000000000000000000000600182015283516180fa81600284016020880161782a565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600292909101918201526007019695505050505050565b604081526000618145604083018461784e565b8281036020840152600481527f2e6173740000000000000000000000000000000000000000000000000000000060208201526040810191505092915050565b7f436f756c64206e6f742066696e642041535420696e20617274696661637420008152600082516181bc81601f85016020870161782a565b7f2e205365742060617374203d20747275656020696e20666f756e6472792e746f601f9390910192830152507f6d6c000000000000000000000000000000000000000000000000000000000000603f820152604101919050565b604081526000618229604083018461784e565b8281036020840152601181527f2e6173742e6162736f6c7574655061746800000000000000000000000000000060208201526040810191505092915050565b60408152600061827b604083018461784e565b8281036020840152600c81527f2e6173742e6c6963656e7365000000000000000000000000000000000000000060208201526040810191505092915050565b7f2e6d657461646174612e736f75726365732e5b270000000000000000000000008152600082516182f281601485016020870161782a565b7f275d2e6b656363616b32353600000000000000000000000000000000000000006014939091019283015250602001919050565b604081526000618339604083018561784e565b82810360208401526136f2818561784e565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f22000000000000000000000000000000000000000000000000000000000000008152600082516183b281600185016020870161782a565b7f22000000000000000000000000000000000000000000000000000000000000006001939091019283015250600201919050565b600082516183f881846020870161782a565b7f2f6275696c642d696e666f000000000000000000000000000000000000000000920191825250600b01919050565b7f436f756c64206e6f742066696e64206275696c642d696e666f2066696c65207781527f697468206d61746368696e6720736f7572636520636f6465206861736820666f60208201527f7220636f6e7472616374200000000000000000000000000000000000000000006040820152600082516184ab81604b85016020870161782a565b91909101604b0192915050565b600060ff821660ff81036184ce576184ce617bc3565b60010192915050565b7f406f70656e7a657070656c696e2f646566656e6465722d6465706c6f792d636c81527f69656e742d636c6940000000000000000000000000000000000000000000000060208201526000825161853581602985016020870161782a565b9190910160290192915050565b60408152601660408201527f4f50454e5a455050454c494e5f424153485f504154480000000000000000000060608201526080602082015260006136f6608083018461784e565b60006020828403121561859b57600080fd5b815167ffffffffffffffff8111156185b257600080fd5b8201606081850312156185c457600080fd5b6185cc617dd6565b81518060030b81146185dd57600080fd5b8152602082015167ffffffffffffffff8111156185f957600080fd5b61860586828501617e6f565b602083015250604082015167ffffffffffffffff81111561862557600080fd5b61863186828501617e6f565b604083015250949350505050565b7f4661696c656420746f2072756e206261736820636f6d6d616e6420776974682081527f220000000000000000000000000000000000000000000000000000000000000060208201526000825161869d81602185016020870161782a565b7f222e20496620796f7520617265207573696e672057696e646f77732c2073657460219390910192830152507f20746865204f50454e5a455050454c494e5f424153485f5041544820656e766960418201527f726f6e6d656e74207661726961626c6520746f207468652066756c6c7920717560618201527f616c69666965642070617468206f66207468652062617368206578656375746160818201527f626c652e20466f72206578616d706c652c20696620796f75206172652075736960a18201527f6e672047697420666f722057696e646f77732c206164642074686520666f6c6c60c18201527f6f77696e67206c696e6520696e20746865202e656e762066696c65206f66207960e18201527f6f75722070726f6a65637420287573696e6720666f727761726420736c6173686101018201527f6573293a0a4f50454e5a455050454c494e5f424153485f504154483d22433a2f6101218201527f50726f6772616d2046696c65732f4769742f62696e2f6261736822000000000061014182015261015c01919050565b7f4661696c656420746f2066696e64206c696e652077697468207072656669782081527f270000000000000000000000000000000000000000000000000000000000000060208201526000835161888981602185016020880161782a565b7f2720696e206f75747075743a200000000000000000000000000000000000000060219184019182015283516188c681602e84016020880161782a565b01602e01949350505050565b7f4661696c656420746f2072756e2075706772616465207361666574792076616c81527f69646174696f6e3a20000000000000000000000000000000000000000000000060208201526000825161853581602985016020870161782a565b7f55706772616465207361666574792076616c69646174696f6e206661696c656481527f3a0a00000000000000000000000000000000000000000000000000000000000060208201526000825161898e81602285016020870161782a565b9190910160220192915050565b7f436f6e7472616374206e616d65200000000000000000000000000000000000008152600082516189d381600e85016020870161782a565b7f206d75737420626520696e2074686520666f726d6174204d79436f6e74726163600e9390910192830152507f742e736f6c3a4d79436f6e7472616374206f72204d79436f6e74726163742e73602e8201527f6f6c206f72206f75742f4d79436f6e74726163742e736f6c2f4d79436f6e7472604e8201527f6163742e6a736f6e000000000000000000000000000000000000000000000000606e820152607601919050565b7f53504458206c6963656e7365206964656e746966696572200000000000000000815260008351618ab181601885016020880161782a565b7f20696e20000000000000000000000000000000000000000000000000000000006018918401918201528351618aee81601c84016020880161782a565b7f20646f6573206e6f74206c6f6f6b206c696b65206120737570706f7274656420601c92909101918201527f6c6963656e736520666f7220626c6f636b206578706c6f726572207665726966603c8201527f69636174696f6e2e205573652074686520606c6963656e73655479706560206f605c8201527f7074696f6e20746f20737065636966792061206c6963656e736520747970652c607c8201527f206f7220736574207468652060736b69704c6963656e73655479706560206f70609c8201527f74696f6e20746f2060747275656020746f20736b69702e00000000000000000060bc82015260d301949350505050565b60008251618bf481846020870161782a565b7f2000000000000000000000000000000000000000000000000000000000000000920191825250600101919050565b7f406f70656e7a657070656c696e2f75706772616465732d636f72654000000000815260008251618c5b81601c85016020870161782a565b91909101601c0192915050565b60006000198203618c7b57618c7b617bc3565b5060010190565b808202811582820484141761367c5761367c617bc3565b6001815b6001841115618cd457808504811115618cb857618cb8617bc3565b6001841615618cc657908102905b60019390931c928002618c9d565b935093915050565b600082618ceb5750600161367c565b81618cf85750600061367c565b8160018114618d0e5760028114618d1857618d34565b600191505061367c565b60ff841115618d2957618d29617bc3565b50506001821b61367c565b5060208310610133831016604e8410600b8410161715618d57575081810a61367c565b618d646000198484618c99565b8060001904821115618d7857618d78617bc3565b029392505050565b60006136f68383618cdc565b600081618d9b57618d9b617bc3565b506000190190565b60008351618db581846020880161782a565b7f3a000000000000000000000000000000000000000000000000000000000000009083019081528351618def81600184016020880161782a565b01600101949350505050565b81810360008312801583831316838312821617156169b6576169b6617bc356fe608060405234801561001057600080fd5b50604051610c9f380380610c9f83398101604081905261002f9161010d565b8181600361003d83826101ff565b50600461004a82826101ff565b50505050506102bd565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261007b57600080fd5b81516001600160401b0381111561009457610094610054565b604051601f8201601f19908116603f011681016001600160401b03811182821017156100c2576100c2610054565b6040528181528382016020018510156100da57600080fd5b60005b828110156100f9576020818601810151838301820152016100dd565b506000918101602001919091529392505050565b6000806040838503121561012057600080fd5b82516001600160401b0381111561013657600080fd5b6101428582860161006a565b602085015190935090506001600160401b0381111561016057600080fd5b61016c8582860161006a565b9150509250929050565b600181811c9082168061018a57607f821691505b6020821081036101aa57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156101fa57806000526020600020601f840160051c810160208510156101d75750805b601f840160051c820191505b818110156101f757600081556001016101e3565b50505b505050565b81516001600160401b0381111561021857610218610054565b61022c816102268454610176565b846101b0565b6020601f82116001811461026057600083156102485750848201515b600019600385901b1c1916600184901b1784556101f7565b600084815260208120601f198516915b828110156102905787850151825560209485019460019092019101610270565b50848210156102ae5786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b6109d3806102cc6000396000f3fe608060405234801561001057600080fd5b50600436106100be5760003560e01c806340c10f191161007657806395d89b411161005b57806395d89b4114610183578063a9059cbb1461018b578063dd62ed3e1461019e57600080fd5b806340c10f191461013857806370a082311461014d57600080fd5b806318160ddd116100a757806318160ddd1461010457806323b872dd14610116578063313ce5671461012957600080fd5b806306fdde03146100c3578063095ea7b3146100e1575b600080fd5b6100cb6101e4565b6040516100d891906107bf565b60405180910390f35b6100f46100ef366004610854565b610276565b60405190151581526020016100d8565b6002545b6040519081526020016100d8565b6100f461012436600461087e565b610290565b604051601281526020016100d8565b61014b610146366004610854565b6102b4565b005b61010861015b3660046108bb565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6100cb6102c2565b6100f4610199366004610854565b6102d1565b6101086101ac3660046108dd565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6060600380546101f390610910565b80601f016020809104026020016040519081016040528092919081815260200182805461021f90610910565b801561026c5780601f106102415761010080835404028352916020019161026c565b820191906000526020600020905b81548152906001019060200180831161024f57829003601f168201915b5050505050905090565b6000336102848185856102df565b60019150505b92915050565b60003361029e8582856102f1565b6102a98585856103c5565b506001949350505050565b6102be8282610470565b5050565b6060600480546101f390610910565b6000336102848185856103c5565b6102ec83838360016104cc565b505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146103bf57818110156103b0576040517ffb8f41b200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416600482015260248101829052604481018390526064015b60405180910390fd5b6103bf848484840360006104cc565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8316610415576040517f96c6fd1e000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff8216610465576040517fec442f05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b6102ec838383610614565b73ffffffffffffffffffffffffffffffffffffffff82166104c0576040517fec442f05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b6102be60008383610614565b73ffffffffffffffffffffffffffffffffffffffff841661051c576040517fe602df05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff831661056c576040517f94280d62000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260016020908152604080832093871683529290522082905580156103bf578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161060691815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff831661064c5780600260008282546106419190610963565b909155506106fe9050565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260208190526040902054818110156106d2576040517fe450d38c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8516600482015260248101829052604481018390526064016103a7565b73ffffffffffffffffffffffffffffffffffffffff841660009081526020819052604090209082900390555b73ffffffffffffffffffffffffffffffffffffffff821661072757600280548290039055610753565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090208054820190555b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516107b291815260200190565b60405180910390a3505050565b602081526000825180602084015260005b818110156107ed57602081860181015160408684010152016107d0565b5060006040828501015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011684010191505092915050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461084f57600080fd5b919050565b6000806040838503121561086757600080fd5b6108708361082b565b946020939093013593505050565b60008060006060848603121561089357600080fd5b61089c8461082b565b92506108aa6020850161082b565b929592945050506040919091013590565b6000602082840312156108cd57600080fd5b6108d68261082b565b9392505050565b600080604083850312156108f057600080fd5b6108f98361082b565b91506109076020840161082b565b90509250929050565b600181811c9082168061092457607f821691505b60208210810361095d577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b8082018082111561028a577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea26469706673582212207e804ca539d49155d2b6bc19268ce22f9f857027c75247d69fb0d56a089c93d464736f6c634300081a0033608060405234801561001057600080fd5b506040516112a63803806112a683398101604081905261002f91610110565b604051806040016040528060048152602001635a65746160e01b815250604051806040016040528060048152602001635a45544160e01b815250816003908161007891906101e2565b50600461008582826101e2565b5050506001600160a01b03821615806100a557506001600160a01b038116155b156100c35760405163e6c4247b60e01b815260040160405180910390fd5b600680546001600160a01b039384166001600160a01b031991821617909155600780549290931691161790556102a0565b80516001600160a01b038116811461010b57600080fd5b919050565b6000806040838503121561012357600080fd5b61012c836100f4565b915061013a602084016100f4565b90509250929050565b634e487b7160e01b600052604160045260246000fd5b600181811c9082168061016d57607f821691505b60208210810361018d57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156101dd57806000526020600020601f840160051c810160208510156101ba5750805b601f840160051c820191505b818110156101da57600081556001016101c6565b50505b505050565b81516001600160401b038111156101fb576101fb610143565b61020f816102098454610159565b84610193565b6020601f821160018114610243576000831561022b5750848201515b600019600385901b1c1916600184901b1784556101da565b600084815260208120601f198516915b828110156102735787850151825560209485019460019092019101610253565b50848210156102915786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b610ff7806102af6000396000f3fe608060405234801561001057600080fd5b506004361061011b5760003560e01c806342966c68116100b257806379cc679011610081578063a9059cbb11610066578063a9059cbb1461028e578063bff9662a146102a1578063dd62ed3e146102c157600080fd5b806379cc67901461027357806395d89b411461028657600080fd5b806342966c68146102025780635b1125911461021557806370a0823114610235578063779e3b631461026b57600080fd5b80631e458bee116100ee5780631e458bee1461018857806323b872dd1461019b578063313ce567146101ae578063328a01d0146101bd57600080fd5b806306fdde0314610120578063095ea7b31461013e57806315d57fd41461016157806318160ddd14610176575b600080fd5b610128610307565b6040516101359190610d97565b60405180910390f35b61015161014c366004610e2c565b610399565b6040519015158152602001610135565b61017461016f366004610e56565b6103b3565b005b6002545b604051908152602001610135565b610174610196366004610e89565b61057e565b6101516101a9366004610ebc565b610631565b60405160128152602001610135565b6007546101dd9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610135565b610174610210366004610ef9565b610655565b6006546101dd9073ffffffffffffffffffffffffffffffffffffffff1681565b61017a610243366004610f12565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b610174610662565b610174610281366004610e2c565b610786565b610128610837565b61015161029c366004610e2c565b610846565b6005546101dd9073ffffffffffffffffffffffffffffffffffffffff1681565b61017a6102cf366004610e56565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b60606003805461031690610f34565b80601f016020809104026020016040519081016040528092919081815260200182805461034290610f34565b801561038f5780601f106103645761010080835404028352916020019161038f565b820191906000526020600020905b81548152906001019060200180831161037257829003601f168201915b5050505050905090565b6000336103a7818585610854565b60019150505b92915050565b60075473ffffffffffffffffffffffffffffffffffffffff1633148015906103f3575060065473ffffffffffffffffffffffffffffffffffffffff163314155b15610431576040517fcdfcef970000000000000000000000000000000000000000000000000000000081523360048201526024015b60405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff82161580610468575073ffffffffffffffffffffffffffffffffffffffff8116155b1561049f576040517fe6c4247b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6006805473ffffffffffffffffffffffffffffffffffffffff8481167fffffffffffffffffffffffff0000000000000000000000000000000000000000928316811790935560058054918516919092161790556040805133815260208101929092527fe79965b5c67dcfb2cf5fe152715e4a7256cee62a3d5dd8484fd8a8539eb8beff910160405180910390a16040805133815273ffffffffffffffffffffffffffffffffffffffff831660208201527f1b9352454524a57a51f24f67dc66d898f616922cd1f7a12d73570ece12b1975c910160405180910390a15050565b60055473ffffffffffffffffffffffffffffffffffffffff1633146105d1576040517f3fe32fba000000000000000000000000000000000000000000000000000000008152336004820152602401610428565b6105db8383610866565b808373ffffffffffffffffffffffffffffffffffffffff167fc263b302aec62d29105026245f19e16f8e0137066ccd4a8bd941f716bd4096bb8460405161062491815260200190565b60405180910390a3505050565b60003361063f8582856108c6565b61064a858585610995565b506001949350505050565b61065f3382610a40565b50565b60075473ffffffffffffffffffffffffffffffffffffffff1633146106b5576040517fe700765e000000000000000000000000000000000000000000000000000000008152336004820152602401610428565b60065473ffffffffffffffffffffffffffffffffffffffff16610704576040517fe6c4247b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600654600780547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff90921691821790556040805133815260208101929092527f5104c9abdc7d111c2aeb4ce890ac70274a4be2ee83f46a62551be5e6ebc82dd0910160405180910390a1565b60055473ffffffffffffffffffffffffffffffffffffffff1633146107d9576040517f3fe32fba000000000000000000000000000000000000000000000000000000008152336004820152602401610428565b6107e38282610a9c565b8173ffffffffffffffffffffffffffffffffffffffff167f919f7e2092ffcc9d09f599be18d8152860b0c054df788a33bc549cdd9d0f15b18260405161082b91815260200190565b60405180910390a25050565b60606004805461031690610f34565b6000336103a7818585610995565b6108618383836001610ab1565b505050565b73ffffffffffffffffffffffffffffffffffffffff82166108b6576040517fec442f0500000000000000000000000000000000000000000000000000000000815260006004820152602401610428565b6108c260008383610bf9565b5050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811461098f5781811015610980576040517ffb8f41b200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff841660048201526024810182905260448101839052606401610428565b61098f84848484036000610ab1565b50505050565b73ffffffffffffffffffffffffffffffffffffffff83166109e5576040517f96c6fd1e00000000000000000000000000000000000000000000000000000000815260006004820152602401610428565b73ffffffffffffffffffffffffffffffffffffffff8216610a35576040517fec442f0500000000000000000000000000000000000000000000000000000000815260006004820152602401610428565b610861838383610bf9565b73ffffffffffffffffffffffffffffffffffffffff8216610a90576040517f96c6fd1e00000000000000000000000000000000000000000000000000000000815260006004820152602401610428565b6108c282600083610bf9565b610aa78233836108c6565b6108c28282610a40565b73ffffffffffffffffffffffffffffffffffffffff8416610b01576040517fe602df0500000000000000000000000000000000000000000000000000000000815260006004820152602401610428565b73ffffffffffffffffffffffffffffffffffffffff8316610b51576040517f94280d6200000000000000000000000000000000000000000000000000000000815260006004820152602401610428565b73ffffffffffffffffffffffffffffffffffffffff8085166000908152600160209081526040808320938716835292905220829055801561098f578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051610beb91815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff8316610c31578060026000828254610c269190610f87565b90915550610ce39050565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205481811015610cb7576040517fe450d38c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff851660048201526024810182905260448101839052606401610428565b73ffffffffffffffffffffffffffffffffffffffff841660009081526020819052604090209082900390555b73ffffffffffffffffffffffffffffffffffffffff8216610d0c57600280548290039055610d38565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090208054820190555b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161062491815260200190565b602081526000825180602084015260005b81811015610dc55760208186018101516040868401015201610da8565b5060006040828501015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011684010191505092915050565b803573ffffffffffffffffffffffffffffffffffffffff81168114610e2757600080fd5b919050565b60008060408385031215610e3f57600080fd5b610e4883610e03565b946020939093013593505050565b60008060408385031215610e6957600080fd5b610e7283610e03565b9150610e8060208401610e03565b90509250929050565b600080600060608486031215610e9e57600080fd5b610ea784610e03565b95602085013595506040909401359392505050565b600080600060608486031215610ed157600080fd5b610eda84610e03565b9250610ee860208501610e03565b929592945050506040919091013590565b600060208284031215610f0b57600080fd5b5035919050565b600060208284031215610f2457600080fd5b610f2d82610e03565b9392505050565b600181811c90821680610f4857607f821691505b602082108103610f81577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b808201808211156103ad577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea2646970667358221220085f01204b33dc17013c78c74fbca32a3da2c0b384ce7c8878c889551af28c6164736f6c634300081a003360a060405234801561001057600080fd5b506040516116fe3803806116fe83398101604081905261002f916101e5565b60016000556002805460ff191690556001600160a01b038316158061005b57506001600160a01b038216155b8061006d57506001600160a01b038116155b1561008b5760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b0383166080526100a3600082610134565b506100ce7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a82610134565b506100f97f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e483610134565b506101126000805160206116de83398151915282610134565b5061012b6000805160206116de83398151915283610134565b50505050610228565b60008281526001602090815260408083206001600160a01b038516845290915281205460ff166101bf5760008381526001602081815260408084206001600160a01b0387168086529252808420805460ff19169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45060016101c3565b5060005b92915050565b80516001600160a01b03811681146101e057600080fd5b919050565b6000806000606084860312156101fa57600080fd5b610203846101c9565b9250610211602085016101c9565b915061021f604085016101c9565b90509250925092565b60805161147f61025f6000396000818161019e0152818161050001528181610562015281816108f70152610959015261147f6000f3fe608060405234801561001057600080fd5b506004361061016c5760003560e01c806385f438c1116100cd578063c8a0236211610081578063d936547e11610066578063d936547e14610355578063d9caed1214610378578063e63ab1e91461038b57600080fd5b8063c8a023621461032f578063d547741f1461034257600080fd5b80639a590427116100b25780639a590427146103015780639b19251a14610314578063a217fddf1461032757600080fd5b806385f438c11461029457806391d14854146102bb57600080fd5b806336568abe11610124578063570618e111610109578063570618e11461025a5780635c975abb146102815780638456cb591461028c57600080fd5b806336568abe1461023f5780633f4ba83a1461025257600080fd5b806321fc65f21161015557806321fc65f2146101e5578063248a9ca3146101fa5780632f2ff15d1461022c57600080fd5b806301ffc9a714610171578063116191b614610199575b600080fd5b61018461017f36600461118a565b6103b2565b60405190151581526020015b60405180910390f35b6101c07f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610190565b6101f86101f33660046111f5565b61044b565b005b61021e610208366004611292565b6000908152600160208190526040909120015490565b604051908152602001610190565b6101f861023a3660046112ab565b61064c565b6101f861024d3660046112ab565b610678565b6101f86106d6565b61021e7f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a81565b60025460ff16610184565b6101f861070b565b61021e7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b6101846102c93660046112ab565b600091825260016020908152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b6101f861030f3660046112d7565b61073d565b6101f86103223660046112d7565b6107be565b61021e600081565b6101f861033d3660046111f5565b610842565b6101f86103503660046112ab565b610a29565b6101846103633660046112d7565b60036020526000908152604090205460ff1681565b6101f86103863660046112f2565b610a4f565b61021e7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061044557507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b610453610b7b565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461047d81610bbe565b610485610bc8565b73ffffffffffffffffffffffffffffffffffffffff861660009081526003602052604090205460ff166104e4576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61052573ffffffffffffffffffffffffffffffffffffffff87167f000000000000000000000000000000000000000000000000000000000000000086610c07565b6040517f5131ab5900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690635131ab599061059f9089908990899089908990600401611378565b600060405180830381600087803b1580156105b957600080fd5b505af11580156105cd573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167f85b5be9cf454e05e0bddf49315178102227c312078eefa3c00294fb4d912ae4e868686604051610632939291906113d5565b60405180910390a3506106456001600055565b5050505050565b6000828152600160208190526040909120015461066881610bbe565b6106728383610c94565b50505050565b73ffffffffffffffffffffffffffffffffffffffff811633146106c7576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6106d18282610d41565b505050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61070081610bbe565b610708610de2565b50565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61073581610bbe565b610708610e41565b7f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a61076781610bbe565b73ffffffffffffffffffffffffffffffffffffffff8216600081815260036020526040808220805460ff19169055517f51085ddf9ebdded84b76e829eb58c4078e4b5bdf97d9a94723f336039da467919190a25050565b7f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a6107e881610bbe565b73ffffffffffffffffffffffffffffffffffffffff8216600081815260036020526040808220805460ff19166001179055517faab7954e9d246b167ef88aeddad35209ca2489d95a8aeb59e288d9b19fae5a549190a25050565b61084a610b7b565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461087481610bbe565b61087c610bc8565b73ffffffffffffffffffffffffffffffffffffffff861660009081526003602052604090205460ff166108db576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61091c73ffffffffffffffffffffffffffffffffffffffff87167f000000000000000000000000000000000000000000000000000000000000000086610c07565b6040517fb8969bd400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063b8969bd4906109969089908990899089908990600401611378565b600060405180830381600087803b1580156109b057600080fd5b505af11580156109c4573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fb9d4efa96044e5f5e03e696fa9ae2ff66911cc27e8a637c3627c75bc5b2241c8868686604051610632939291906113d5565b60008281526001602081905260409091200154610a4581610bbe565b6106728383610d41565b610a57610b7b565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e4610a8181610bbe565b610a89610bc8565b73ffffffffffffffffffffffffffffffffffffffff841660009081526003602052604090205460ff16610ae8576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610b0973ffffffffffffffffffffffffffffffffffffffff85168484610c07565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f9b1bfa7fa9ee420a16e124f794c35ac9f90472acc99140eb2f6447c714cad8eb84604051610b6891815260200190565b60405180910390a3506106d16001600055565b600260005403610bb7576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b6107088133610e7e565b60025460ff1615610c05576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6040805173ffffffffffffffffffffffffffffffffffffffff8416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb000000000000000000000000000000000000000000000000000000001790526106d1908490610f0f565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff16610d3957600083815260016020818152604080842073ffffffffffffffffffffffffffffffffffffffff87168086529252808420805460ff19169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a4506001610445565b506000610445565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff1615610d3957600083815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff86168085529252808320805460ff1916905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a4506001610445565b610dea610fa5565b6002805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b610e49610bc8565b6002805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258610e173390565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16610f0b576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82166004820152602481018390526044015b60405180910390fd5b5050565b6000610f3173ffffffffffffffffffffffffffffffffffffffff841683610fe1565b90508051600014158015610f56575080806020019051810190610f5491906113f8565b155b156106d1576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84166004820152602401610f02565b60025460ff16610c05576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6060610fef83836000610ff6565b9392505050565b606081471015611034576040517fcd786059000000000000000000000000000000000000000000000000000000008152306004820152602401610f02565b6000808573ffffffffffffffffffffffffffffffffffffffff16848660405161105d919061141a565b60006040518083038185875af1925050503d806000811461109a576040519150601f19603f3d011682016040523d82523d6000602084013e61109f565b606091505b50915091506110af8683836110b9565b9695505050505050565b6060826110ce576110c982611148565b610fef565b81511580156110f2575073ffffffffffffffffffffffffffffffffffffffff84163b155b15611141576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85166004820152602401610f02565b5080610fef565b8051156111585780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006020828403121561119c57600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610fef57600080fd5b803573ffffffffffffffffffffffffffffffffffffffff811681146111f057600080fd5b919050565b60008060008060006080868803121561120d57600080fd5b611216866111cc565b9450611224602087016111cc565b935060408601359250606086013567ffffffffffffffff81111561124757600080fd5b8601601f8101881361125857600080fd5b803567ffffffffffffffff81111561126f57600080fd5b88602082840101111561128157600080fd5b959894975092955050506020019190565b6000602082840312156112a457600080fd5b5035919050565b600080604083850312156112be57600080fd5b823591506112ce602084016111cc565b90509250929050565b6000602082840312156112e957600080fd5b610fef826111cc565b60008060006060848603121561130757600080fd5b611310846111cc565b925061131e602085016111cc565b929592945050506040919091013590565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff8616815273ffffffffffffffffffffffffffffffffffffffff851660208201528360408201526080606082015260006113ca60808301848661132f565b979650505050505050565b8381526040602082015260006113ef60408301848661132f565b95945050505050565b60006020828403121561140a57600080fd5b81518015158114610fef57600080fd5b6000825160005b8181101561143b5760208186018101518583015201611421565b50600092019182525091905056fea2646970667358221220dc54ce548a1f0bf8ba5e86cc53c6d822e55eee543451395733c659359bac8dd164736f6c634300081a00338619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a60c060405260001960035534801561001657600080fd5b5060405161155a38038061155a83398101604081905261003591610220565b60016000819055805460ff19169055838383836001600160a01b038416158061006557506001600160a01b038316155b8061007757506001600160a01b038216155b8061008957506001600160a01b038116155b156100a75760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b03808516608052831660a0526100c5600082610154565b506100f07f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e483610154565b5061011b7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb83610154565b506101467f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a82610154565b505050505050505050610274565b60008281526002602090815260408083206001600160a01b038516845290915281205460ff166101fa5760008381526002602090815260408083206001600160a01b03861684529091529020805460ff191660011790556101b23390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45060016101fe565b5060005b92915050565b80516001600160a01b038116811461021b57600080fd5b919050565b6000806000806080858703121561023657600080fd5b61023f85610204565b935061024d60208601610204565b925061025b60408601610204565b915061026960608601610204565b905092959194509250565b60805160a0516112826102d86000396000818161021d01528181610531015281816108240152818161097b01528181610ad00152610bf20152600081816101d1015281816104a1015281816105040152818161079401526107f701526112826000f3fe608060405234801561001057600080fd5b50600436106101775760003560e01c80635e3e9fef116100d857806391d148541161008c578063d547741f11610066578063d547741f14610386578063d5abeb0114610399578063e63ab1e9146103a257600080fd5b806391d1485414610311578063a217fddf14610357578063a783c7891461035f57600080fd5b8063743e0c9b116100bd578063743e0c9b146102cf5780638456cb59146102e257806385f438c1146102ea57600080fd5b80635e3e9fef146102a95780636f8b44b0146102bc57600080fd5b8063248a9ca31161012f57806336568abe1161011457806336568abe146102835780633f4ba83a146102965780635c975abb1461029e57600080fd5b8063248a9ca31461023f5780632f2ff15d1461027057600080fd5b8063106e629011610160578063106e6290146101b9578063116191b6146101cc57806321e093b11461021857600080fd5b806301ffc9a71461017c57806302d5c899146101a4575b600080fd5b61018f61018a366004610fb4565b6103c9565b60405190151581526020015b60405180910390f35b6101b76101b2366004611026565b610462565b005b6101b76101c73660046110b8565b6105f7565b6101f37f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161019b565b6101f37f000000000000000000000000000000000000000000000000000000000000000081565b61026261024d3660046110eb565b60009081526002602052604090206001015490565b60405190815260200161019b565b6101b761027e366004611104565b61069c565b6101b7610291366004611104565b6106c7565b6101b7610720565b60015460ff1661018f565b6101b76102b7366004611026565b610755565b6101b76102ca3660046110eb565b6108d0565b6101b76102dd3660046110eb565b61093e565b6101b76109e8565b6102627f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b61018f61031f366004611104565b600091825260026020908152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b610262600081565b6102627f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb81565b6101b7610394366004611104565b610a1a565b61026260035481565b6102627f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061045c57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b61046a610a3f565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461049481610a82565b61049c610a8c565b6104c77f00000000000000000000000000000000000000000000000000000000000000008684610acb565b6040517fb8969bd400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063b8969bd490610561907f0000000000000000000000000000000000000000000000000000000000000000908a908a908a908a90600401611179565b600060405180830381600087803b15801561057b57600080fd5b505af115801561058f573d6000803e3d6000fd5b505050508573ffffffffffffffffffffffffffffffffffffffff167fba96f26bdda53eb8c8ba39045dfb4ff39753fbc7a6edcf250a88e75e78d102fe8686866040516105dd939291906111d6565b60405180910390a2506105f06001600055565b5050505050565b6105ff610a3f565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461062981610a82565b610631610a8c565b61063c848484610acb565b8373ffffffffffffffffffffffffffffffffffffffff167f884edad9ce6fa2440d8a54cc123490eb96d2768479d49ff9c7366125a94243648460405161068491815260200190565b60405180910390a2506106976001600055565b505050565b6000828152600260205260409020600101546106b781610a82565b6106c18383610c53565b50505050565b73ffffffffffffffffffffffffffffffffffffffff81163314610716576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6106978282610d53565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61074a81610a82565b610752610e12565b50565b61075d610a3f565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461078781610a82565b61078f610a8c565b6107ba7f00000000000000000000000000000000000000000000000000000000000000008684610acb565b6040517f5131ab5900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690635131ab5990610854907f0000000000000000000000000000000000000000000000000000000000000000908a908a908a908a90600401611179565b600060405180830381600087803b15801561086e57600080fd5b505af1158015610882573d6000803e3d6000fd5b505050508573ffffffffffffffffffffffffffffffffffffffff167f7772f56296d3a5202974a45c61c9188d844ab4d6eeb18c851e4b8d5384ca6ced8686866040516105dd939291906111d6565b7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb6108fa81610a82565b610902610a8c565b60038290556040518281527f7810bd47de260c3e9ee10061cf438099dd12256c79485f12f94dbccc981e806c9060200160405180910390a15050565b610946610a8c565b6040517f79cc6790000000000000000000000000000000000000000000000000000000008152336004820152602481018290527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16906379cc679090604401600060405180830381600087803b1580156109d457600080fd5b505af11580156105f0573d6000803e3d6000fd5b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610a1281610a82565b610752610e8f565b600082815260026020526040902060010154610a3581610a82565b6106c18383610d53565b600260005403610a7b576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b6107528133610ee8565b60015460ff1615610ac9576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6003547f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b39573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b5d91906111f9565b610b679084611212565b1115610b9f576040517fc30436e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f1e458bee00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff848116600483015260248201849052604482018390527f00000000000000000000000000000000000000000000000000000000000000001690631e458bee90606401600060405180830381600087803b158015610c3657600080fd5b505af1158015610c4a573d6000803e3d6000fd5b50505050505050565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff16610d4b57600083815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff86168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055610ce93390565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a450600161045c565b50600061045c565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff1615610d4b57600083815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8616808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a450600161045c565b610e1a610f78565b600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b610e97610a8c565b600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016811790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25833610e65565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16610f74576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff821660048201526024810183905260440160405180910390fd5b5050565b60015460ff16610ac9576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060208284031215610fc657600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610ff657600080fd5b9392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461102157600080fd5b919050565b60008060008060006080868803121561103e57600080fd5b61104786610ffd565b945060208601359350604086013567ffffffffffffffff81111561106a57600080fd5b8601601f8101881361107b57600080fd5b803567ffffffffffffffff81111561109257600080fd5b8860208284010111156110a457600080fd5b959894975060200195606001359392505050565b6000806000606084860312156110cd57600080fd5b6110d684610ffd565b95602085013595506040909401359392505050565b6000602082840312156110fd57600080fd5b5035919050565b6000806040838503121561111757600080fd5b8235915061112760208401610ffd565b90509250929050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff8616815273ffffffffffffffffffffffffffffffffffffffff851660208201528360408201526080606082015260006111cb608083018486611130565b979650505050505050565b8381526040602082015260006111f0604083018486611130565b95945050505050565b60006020828403121561120b57600080fd5b5051919050565b8082018082111561045c577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea2646970667358221220de5fa55e0ca79ea2f08903481d01ea00bbbf346b9cfba44e12a2dd6f3a6f2e8a64736f6c634300081a0033a2646970667358221220a2621da9f998b0ed06762d65434142881a98c2f15b1a0217f6171c8297d85f6d64736f6c634300081a0033", } // GatewayEVMInboundTestABI is the input ABI used to generate the binding from. @@ -655,6 +655,27 @@ func (_GatewayEVMInboundTest *GatewayEVMInboundTestTransactorSession) TestDeposi return _GatewayEVMInboundTest.Contract.TestDepositERC20ToCustody(&_GatewayEVMInboundTest.TransactOpts) } +// TestDepositERC20ToCustodyFailsIfTokenIsNotWhitelisted is a paid mutator transaction binding the contract method 0xb2849063. +// +// Solidity: function testDepositERC20ToCustodyFailsIfTokenIsNotWhitelisted() returns() +func (_GatewayEVMInboundTest *GatewayEVMInboundTestTransactor) TestDepositERC20ToCustodyFailsIfTokenIsNotWhitelisted(opts *bind.TransactOpts) (*types.Transaction, error) { + return _GatewayEVMInboundTest.contract.Transact(opts, "testDepositERC20ToCustodyFailsIfTokenIsNotWhitelisted") +} + +// TestDepositERC20ToCustodyFailsIfTokenIsNotWhitelisted is a paid mutator transaction binding the contract method 0xb2849063. +// +// Solidity: function testDepositERC20ToCustodyFailsIfTokenIsNotWhitelisted() returns() +func (_GatewayEVMInboundTest *GatewayEVMInboundTestSession) TestDepositERC20ToCustodyFailsIfTokenIsNotWhitelisted() (*types.Transaction, error) { + return _GatewayEVMInboundTest.Contract.TestDepositERC20ToCustodyFailsIfTokenIsNotWhitelisted(&_GatewayEVMInboundTest.TransactOpts) +} + +// TestDepositERC20ToCustodyFailsIfTokenIsNotWhitelisted is a paid mutator transaction binding the contract method 0xb2849063. +// +// Solidity: function testDepositERC20ToCustodyFailsIfTokenIsNotWhitelisted() returns() +func (_GatewayEVMInboundTest *GatewayEVMInboundTestTransactorSession) TestDepositERC20ToCustodyFailsIfTokenIsNotWhitelisted() (*types.Transaction, error) { + return _GatewayEVMInboundTest.Contract.TestDepositERC20ToCustodyFailsIfTokenIsNotWhitelisted(&_GatewayEVMInboundTest.TransactOpts) +} + // TestDepositERC20ToCustodyWithPayload is a paid mutator transaction binding the contract method 0x30f7c04f. // // Solidity: function testDepositERC20ToCustodyWithPayload() returns() @@ -676,6 +697,27 @@ func (_GatewayEVMInboundTest *GatewayEVMInboundTestTransactorSession) TestDeposi return _GatewayEVMInboundTest.Contract.TestDepositERC20ToCustodyWithPayload(&_GatewayEVMInboundTest.TransactOpts) } +// TestDepositERC20ToCustodyWithPayloadFailsIfTokenIsNotWhitelisted is a paid mutator transaction binding the contract method 0xe85c5a07. +// +// Solidity: function testDepositERC20ToCustodyWithPayloadFailsIfTokenIsNotWhitelisted() returns() +func (_GatewayEVMInboundTest *GatewayEVMInboundTestTransactor) TestDepositERC20ToCustodyWithPayloadFailsIfTokenIsNotWhitelisted(opts *bind.TransactOpts) (*types.Transaction, error) { + return _GatewayEVMInboundTest.contract.Transact(opts, "testDepositERC20ToCustodyWithPayloadFailsIfTokenIsNotWhitelisted") +} + +// TestDepositERC20ToCustodyWithPayloadFailsIfTokenIsNotWhitelisted is a paid mutator transaction binding the contract method 0xe85c5a07. +// +// Solidity: function testDepositERC20ToCustodyWithPayloadFailsIfTokenIsNotWhitelisted() returns() +func (_GatewayEVMInboundTest *GatewayEVMInboundTestSession) TestDepositERC20ToCustodyWithPayloadFailsIfTokenIsNotWhitelisted() (*types.Transaction, error) { + return _GatewayEVMInboundTest.Contract.TestDepositERC20ToCustodyWithPayloadFailsIfTokenIsNotWhitelisted(&_GatewayEVMInboundTest.TransactOpts) +} + +// TestDepositERC20ToCustodyWithPayloadFailsIfTokenIsNotWhitelisted is a paid mutator transaction binding the contract method 0xe85c5a07. +// +// Solidity: function testDepositERC20ToCustodyWithPayloadFailsIfTokenIsNotWhitelisted() returns() +func (_GatewayEVMInboundTest *GatewayEVMInboundTestTransactorSession) TestDepositERC20ToCustodyWithPayloadFailsIfTokenIsNotWhitelisted() (*types.Transaction, error) { + return _GatewayEVMInboundTest.Contract.TestDepositERC20ToCustodyWithPayloadFailsIfTokenIsNotWhitelisted(&_GatewayEVMInboundTest.TransactOpts) +} + // TestDepositEthToTss is a paid mutator transaction binding the contract method 0x0724d8e3. // // Solidity: function testDepositEthToTss() returns() diff --git a/v2/pkg/gatewayevm.t.sol/gatewayevmtest.go b/v2/pkg/gatewayevm.t.sol/gatewayevmtest.go index b8d92975..93e8a2f0 100644 --- a/v2/pkg/gatewayevm.t.sol/gatewayevmtest.go +++ b/v2/pkg/gatewayevm.t.sol/gatewayevmtest.go @@ -49,8 +49,8 @@ type StdInvariantFuzzSelector struct { // GatewayEVMTestMetaData contains all meta data concerning the GatewayEVMTest contract. var GatewayEVMTestMetaData = &bind.MetaData{ - ABI: "[{\"type\":\"function\",\"name\":\"ASSET_HANDLER_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"DEFAULT_ADMIN_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"IS_TEST\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"PAUSER_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"TSS_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"WITHDRAWER_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeArtifacts\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedArtifacts_\",\"type\":\"string[]\",\"internalType\":\"string[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeContracts\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedContracts_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeSelectors\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedSelectors_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzSelector[]\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"selectors\",\"type\":\"bytes4[]\",\"internalType\":\"bytes4[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeSenders\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedSenders_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"failed\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"setUp\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"targetArtifactSelectors\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedArtifactSelectors_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzArtifactSelector[]\",\"components\":[{\"name\":\"artifact\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"selectors\",\"type\":\"bytes4[]\",\"internalType\":\"bytes4[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetArtifacts\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedArtifacts_\",\"type\":\"string[]\",\"internalType\":\"string[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetContracts\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedContracts_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetInterfaces\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedInterfaces_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzInterface[]\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"artifacts\",\"type\":\"string[]\",\"internalType\":\"string[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetSelectors\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedSelectors_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzSelector[]\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"selectors\",\"type\":\"bytes4[]\",\"internalType\":\"bytes4[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetSenders\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedSenders_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"testExecuteFailsIfDestinationIsZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testExecuteRevert\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testExecuteRevertFailsIfReceiverIsZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testExecuteRevertFailsIfSenderIsNotTSS\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testExecuteWithERC20FailsIfNotCustodyOrConnector\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testForwardCallToReceiveNoParams\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testForwardCallToReceiveNoParamsTogglePause\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testForwardCallToReceiveNonPayable\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testForwardCallToReceiveNonPayableFailsIfSenderIsNotTSS\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testForwardCallToReceivePayable\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testRevertWithERC20FailsIfNotCustodyOrConnector\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testSetConnectorFailsIfSenderIsNotAdmin\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testSetConnectorFailsIfSet\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testSetConnectorFailsIfZero\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testSetCustodyFailsIfSenderIsNotAdmin\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testSetCustodyFailsIfSet\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testSetCustodyFailsIfZero\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"event\",\"name\":\"Call\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"receiver\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Deposit\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"receiver\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"asset\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Executed\",\"inputs\":[{\"name\":\"destination\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ExecutedWithERC20\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedERC20\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"token\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"destination\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedNoParams\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedNonPayable\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"strs\",\"type\":\"string[]\",\"indexed\":false,\"internalType\":\"string[]\"},{\"name\":\"nums\",\"type\":\"uint256[]\",\"indexed\":false,\"internalType\":\"uint256[]\"},{\"name\":\"flag\",\"type\":\"bool\",\"indexed\":false,\"internalType\":\"bool\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedPayable\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"str\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"num\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"flag\",\"type\":\"bool\",\"indexed\":false,\"internalType\":\"bool\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedRevert\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Reverted\",\"inputs\":[{\"name\":\"destination\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RevertedWithERC20\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Withdraw\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"WithdrawAndCall\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"WithdrawAndRevert\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log\",\"inputs\":[{\"name\":\"\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_address\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_array\",\"inputs\":[{\"name\":\"val\",\"type\":\"uint256[]\",\"indexed\":false,\"internalType\":\"uint256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_array\",\"inputs\":[{\"name\":\"val\",\"type\":\"int256[]\",\"indexed\":false,\"internalType\":\"int256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_array\",\"inputs\":[{\"name\":\"val\",\"type\":\"address[]\",\"indexed\":false,\"internalType\":\"address[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_bytes\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_bytes32\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_int\",\"inputs\":[{\"name\":\"\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_address\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_array\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"uint256[]\",\"indexed\":false,\"internalType\":\"uint256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_array\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"int256[]\",\"indexed\":false,\"internalType\":\"int256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_array\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"address[]\",\"indexed\":false,\"internalType\":\"address[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_bytes\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_bytes32\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_decimal_int\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"},{\"name\":\"decimals\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_decimal_uint\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"decimals\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_int\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_string\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_uint\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_string\",\"inputs\":[{\"name\":\"\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_uint\",\"inputs\":[{\"name\":\"\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"logs\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"AccessControlUnauthorizedAccount\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"neededRole\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"type\":\"error\",\"name\":\"ApprovalFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ConnectorInitialized\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"CustodyInitialized\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"DepositFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"EnforcedPause\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ExecutionFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientERC20Amount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientETHAmount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZeroAddress\",\"inputs\":[]}]", - Bin: "0x6080604052600c8054600160ff199182168117909255601f80549091169091179055348015602c57600080fd5b5061f42d8061003c6000396000f3fe608060405234801561001057600080fd5b50600436106102415760003560e01c8063a217fddf11610145578063cebad2a6116100bd578063e6afc7901161008c578063fa18c09b11610071578063fa18c09b1461042c578063fa7626d414610434578063fe7bdbb21461044157600080fd5b8063e6afc7901461041c578063f68bd1c01461042457600080fd5b8063cebad2a6146103dd578063dd51e82f146103e5578063e20c9f71146103ed578063e63ab1e9146103f557600080fd5b8063b124dbf511610114578063ba414fa6116100f9578063ba414fa6146103b5578063ccf20616146103cd578063ce5871e1146103d557600080fd5b8063b124dbf5146103a5578063b5508aa9146103ad57600080fd5b8063a217fddf14610366578063a56f7a4b1461036e578063a783c78914610376578063b0464fdc1461039d57600080fd5b806344671b94116101d85780637d7f772a116101a757806385226c811161018c57806385226c811461031557806385f438c11461032a578063916a17c61461035157600080fd5b80637d7f772a146103055780637ebf744f1461030d57600080fd5b806344671b94146102ab57806351010e49146102b35780635d62c860146102bb57806366d9a9a0146102f057600080fd5b80631ed7831c116102145780631ed7831c146102685780632ade3880146102865780633e5e3c231461029b5780633f7286f4146102a357600080fd5b806304b974f9146102465780630a9254e4146102505780631226c655146102585780631855c33714610260575b600080fd5b61024e610449565b005b61024e610656565b61024e610fb8565b61024e611129565b61027061129e565b60405161027d9190618684565b60405180910390f35b61028e611300565b60405161027d9190618720565b610270611442565b6102706114a2565b61024e611502565b61024e611881565b6102e27f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b981565b60405190815260200161027d565b6102f8611a5a565b60405161027d9190618886565b61024e611bdc565b61024e611f3f565b61031d6120b4565b60405161027d9190618980565b6102e27f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b610359612184565b60405161027d9190618993565b6102e2600081565b61024e61227f565b6102e27f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb81565b6103596123d1565b61024e6124cc565b61031d612770565b6103bd612840565b604051901515815260200161027d565b61024e612914565b61024e612a66565b61024e612bd7565b61024e612df8565b6102706135ed565b6102e27f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b61024e61364d565b61024e6138bb565b61024e613cb0565b601f546103bd9060ff1681565b61024e614008565b6040805160048082526024820183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f6ed7016900000000000000000000000000000000000000000000000000000000179052602854925163ca669fa760e01b81529192737109709ecfa91a80626ff3989d68f67f5b1dd12d9263ca669fa7926104f0926001600160a01b031691016001600160a01b0391909116815260200190565b600060405180830381600087803b15801561050a57600080fd5b505af115801561051e573d6000803e3d6000fd5b50506040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b1580156105a757600080fd5b505af11580156105bb573d6000803e3d6000fd5b50506020546040517f1cff79cd0000000000000000000000000000000000000000000000000000000081526001600160a01b039091169250631cff79cd915061060b906000908590600401618a2a565b6000604051808303816000875af115801561062a573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526106529190810190618b34565b5050565b602680547fffffffffffffffffffffffff00000000000000000000000000000000000000009081163017909155602780548216611234179055602880549091166156781790556040516106a89061858a565b60408082526004908201527f746573740000000000000000000000000000000000000000000000000000000060608201526080602082018190526003908201527f54544b000000000000000000000000000000000000000000000000000000000060a082015260c001604051809103906000f08015801561072d573d6000803e3d6000fd5b50602480547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03928316179055602854604051911690819061077690618597565b6001600160a01b03928316815291166020820152604001604051809103906000f0801580156107a9573d6000803e3d6000fd5b50602580547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03928316908117909155604080518082018252600e81527f4761746577617945564d2e736f6c000000000000000000000000000000000000602082015260285460265492519085166024820152604481019390935292166064820152610898919060840160408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fc0c53b8b0000000000000000000000000000000000000000000000000000000017905261447d565b601f80547fffffffffffffffffffffff0000000000000000000000000000000000000000ff166101006001600160a01b0393841681029190911791829055602080549190920483167fffffffffffffffffffffffff00000000000000000000000000000000000000009091168117909155602854602654604051929391821692911690610924906185a4565b6001600160a01b03938416815291831660208301529091166040820152606001604051809103906000f080158015610960573d6000803e3d6000fd5b50602280547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392831617905560205460255460285460265460405193851694928316939183169216906109bb906185b1565b6001600160a01b039485168152928416602084015290831660408301529091166060820152608001604051809103906000f0801580156109ff573d6000803e3d6000fd5b50602380547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392831617905560285460405163ca669fa760e01b815291166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015610a8457600080fd5b505af1158015610a98573d6000803e3d6000fd5b50506025546028546023546040517f15d57fd40000000000000000000000000000000000000000000000000000000081526001600160a01b0392831660048201529082166024820152911692506315d57fd49150604401600060405180830381600087803b158015610b0957600080fd5b505af1158015610b1d573d6000803e3d6000fd5b50505050604051610b2d906185be565b604051809103906000f080158015610b49573d6000803e3d6000fd5b50602180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039283161790556028546040517fc88a5e6d00000000000000000000000000000000000000000000000000000000815291166004820152670de0b6b3a76400006024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c88a5e6d90604401600060405180830381600087803b158015610bf557600080fd5b505af1158015610c09573d6000803e3d6000fd5b50506026546040517f06447d560000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506306447d569150602401600060405180830381600087803b158015610c7f57600080fd5b505af1158015610c93573d6000803e3d6000fd5b50506020546022546040517fae7a3a6f0000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201529116925063ae7a3a6f9150602401600060405180830381600087803b158015610cf957600080fd5b505af1158015610d0d573d6000803e3d6000fd5b50506020546023546040517f10188aef0000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152911692506310188aef9150602401600060405180830381600087803b158015610d7357600080fd5b505af1158015610d87573d6000803e3d6000fd5b505050507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b03166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610de957600080fd5b505af1158015610dfd573d6000803e3d6000fd5b5050602480546026546040517f40c10f190000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620f4240938101939093521692506340c10f199150604401600060405180830381600087803b158015610e6e57600080fd5b505af1158015610e82573d6000803e3d6000fd5b5050602480546022546040517fa9059cbb0000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201526207a1209381019390935216925063a9059cbb91506044016020604051808303816000875af1158015610ef8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f1c9190618b69565b506028546040517fc88a5e6d0000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152670de0b6b3a76400006024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c88a5e6d906044015b600060405180830381600087803b158015610f9e57600080fd5b505af1158015610fb2573d6000803e3d6000fd5b50505050565b6026546040517f06447d560000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906306447d5690602401600060405180830381600087803b15801561102a57600080fd5b505af115801561103e573d6000803e3d6000fd5b50506040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b1580156110c757600080fd5b505af11580156110db573d6000803e3d6000fd5b50506020546040517fae7a3a6f000000000000000000000000000000000000000000000000000000008152600060048201526001600160a01b03909116925063ae7a3a6f9150602401610f84565b6026546040517f06447d560000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906306447d5690602401600060405180830381600087803b15801561119b57600080fd5b505af11580156111af573d6000803e3d6000fd5b50506040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fb337f378000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e091506024015b600060405180830381600087803b15801561123957600080fd5b505af115801561124d573d6000803e3d6000fd5b50506020546022546040517fae7a3a6f0000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201529116925063ae7a3a6f9150602401610f84565b606060168054806020026020016040519081016040528092919081815260200182805480156112f657602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116112d8575b5050505050905090565b6060601e805480602002602001604051908101604052809291908181526020016000905b8282101561143957600084815260208082206040805180820182526002870290920180546001600160a01b03168352600181018054835181870281018701909452808452939591948681019491929084015b8282101561142257838290600052602060002001805461139590618b8b565b80601f01602080910402602001604051908101604052809291908181526020018280546113c190618b8b565b801561140e5780601f106113e35761010080835404028352916020019161140e565b820191906000526020600020905b8154815290600101906020018083116113f157829003601f168201915b505050505081526020019060010190611376565b505050508152505081526020019060010190611324565b50505050905090565b606060188054806020026020016040519081016040528092919081815260200182805480156112f6576020028201919060005260206000209081546001600160a01b031681526001909101906020018083116112d8575050505050905090565b606060178054806020026020016040519081016040528092919081815260200182805480156112f6576020028201919060005260206000209081546001600160a01b031681526001909101906020018083116112d8575050505050905090565b6040805160048082526024820183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f6ed701690000000000000000000000000000000000000000000000000000000017905260215492517ff30c7ba30000000000000000000000000000000000000000000000000000000081529192737109709ecfa91a80626ff3989d68f67f5b1dd12d9263f30c7ba3926115b8926001600160a01b031691600091879101618bd8565b600060405180830381600087803b1580156115d257600080fd5b505af11580156115e6573d6000803e3d6000fd5b50506021546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b15801561167857600080fd5b505af115801561168c573d6000803e3d6000fd5b5050602080546040516001600160a01b0390911681527fbcaadb46b82a48af60b608f58959ae6b8310d1b0a0d094c2e9ec3208ed39f2a0935001905060405180910390a16020546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b15801561175e57600080fd5b505af1158015611772573d6000803e3d6000fd5b50506021546040516001600160a01b0390911692507fcaf938de11c367272220bfd1d2baa99ca46665e7bc4d85f00adb51b90fe1fa9f91506117b8906000908590618c00565b60405180910390a260285460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561181957600080fd5b505af115801561182d573d6000803e3d6000fd5b50506020546021546040517f1cff79cd0000000000000000000000000000000000000000000000000000000081526001600160a01b039283169450631cff79cd935061060b92909116908590600401618a2a565b6040517f68656c6c6f0000000000000000000000000000000000000000000000000000006020820152670de0b6b3a76400009060009060250160408051808303601f190181529082905260285463ca669fa760e01b83526001600160a01b031660048301529150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561192157600080fd5b505af1158015611935573d6000803e3d6000fd5b50506040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b1580156119be57600080fd5b505af11580156119d2573d6000803e3d6000fd5b50506020546040517f35c018db0000000000000000000000000000000000000000000000000000000081526001600160a01b0390911692506335c018db91508490611a24906000908690600401618a2a565b6000604051808303818588803b158015611a3d57600080fd5b505af1158015611a51573d6000803e3d6000fd5b50505050505050565b6060601b805480602002602001604051908101604052809291908181526020016000905b828210156114395783829060005260206000209060020201604051806040016040529081600082018054611ab190618b8b565b80601f0160208091040260200160405190810160405280929190818152602001828054611add90618b8b565b8015611b2a5780601f10611aff57610100808354040283529160200191611b2a565b820191906000526020600020905b815481529060010190602001808311611b0d57829003601f168201915b5050505050815260200160018201805480602002602001604051908101604052809291908181526020018280548015611bc457602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019060040190602082600301049283019260010382029150808411611b715790505b50505050508152505081526020019060010190611a7e565b604080516001808252818301909252600091816020015b6060815260200190600190039081611bf35790505090506040518060400160405280600f81526020017f48656c6c6f2c20466f756e64727921000000000000000000000000000000000081525081600081518110611c5357611c53618c19565b6020908102919091010152604080516001808252818301909252600091816020016020820280368337019050509050602a81600081518110611c9757611c97618c19565b6020908102919091010152604051600190600090611cbd90859085908590602401618c7a565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167ff05b6abf00000000000000000000000000000000000000000000000000000000179052602654905163ca669fa760e01b81526001600160a01b039091166004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015611d7057600080fd5b505af1158015611d84573d6000803e3d6000fd5b5050602654604080516001600160a01b0390921660248301527f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb60448084019190915281518084039091018152606490920181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb39250611e6f9190600401618cb2565b600060405180830381600087803b158015611e8957600080fd5b505af1158015611e9d573d6000803e3d6000fd5b50506020546021546040517f1cff79cd0000000000000000000000000000000000000000000000000000000081526001600160a01b039283169450631cff79cd9350611ef192909116908590600401618a2a565b6000604051808303816000875af1158015611f10573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611f389190810190618b34565b5050505050565b6026546040517f06447d560000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906306447d5690602401600060405180830381600087803b158015611fb157600080fd5b505af1158015611fc5573d6000803e3d6000fd5b50506040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527f0c8dc016000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e091506024015b600060405180830381600087803b15801561204f57600080fd5b505af1158015612063573d6000803e3d6000fd5b50506020546023546040517f10188aef0000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152911692506310188aef9150602401610f84565b6060601a805480602002602001604051908101604052809291908181526020016000905b828210156114395783829060005260206000200180546120f790618b8b565b80601f016020809104026020016040519081016040528092919081815260200182805461212390618b8b565b80156121705780601f1061214557610100808354040283529160200191612170565b820191906000526020600020905b81548152906001019060200180831161215357829003601f168201915b5050505050815260200190600101906120d8565b6060601d805480602002602001604051908101604052809291908181526020016000905b828210156114395760008481526020908190206040805180820182526002860290920180546001600160a01b0316835260018101805483518187028101870190945280845293949193858301939283018282801561226757602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190600401906020826003010492830192600103820291508084116122145790505b505050505081525050815260200190600101906121a8565b6028546040517f06447d560000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906306447d5690602401600060405180830381600087803b1580156122f157600080fd5b505af1158015612305573d6000803e3d6000fd5b5050602854604080516001600160a01b039092166024830152600060448084019190915281518084039091018152606490920181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb3925061121f9190600401618cb2565b6060601c805480602002602001604051908101604052809291908181526020016000905b828210156114395760008481526020908190206040805180820182526002860290920180546001600160a01b031683526001810180548351818702810187019094528084529394919385830193928301828280156124b457602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190600401906020826003010492830192600103820291508084116124615790505b505050505081525050815260200190600101906123f5565b60248054602754604051620186a09381018490526001600160a01b0392831660448201529116606482015260009060840160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f357fc5a200000000000000000000000000000000000000000000000000000000179052602654905163ca669fa760e01b81526001600160a01b039091166004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156125b057600080fd5b505af11580156125c4573d6000803e3d6000fd5b5050602654604080516001600160a01b0390921660248301527f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b960448084019190915281518084039091018152606490920181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb392506126af9190600401618cb2565b600060405180830381600087803b1580156126c957600080fd5b505af11580156126dd573d6000803e3d6000fd5b50506020546024546027546040517fb8969bd40000000000000000000000000000000000000000000000000000000081526001600160a01b03938416955063b8969bd4945061273a93928316929091169087908790600401618cc5565b600060405180830381600087803b15801561275457600080fd5b505af1158015612768573d6000803e3d6000fd5b505050505050565b60606019805480602002602001604051908101604052809291908181526020016000905b828210156114395783829060005260206000200180546127b390618b8b565b80601f01602080910402602001604051908101604052809291908181526020018280546127df90618b8b565b801561282c5780601f106128015761010080835404028352916020019161282c565b820191906000526020600020905b81548152906001019060200180831161280f57829003601f168201915b505050505081526020019060010190612794565b60085460009060ff1615612858575060085460ff1690565b6040517f667f9d70000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d600482018190527f6661696c65640000000000000000000000000000000000000000000000000000602483015260009163667f9d7090604401602060405180830381865afa1580156128e9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061290d9190618cfc565b1415905090565b6028546040517f06447d560000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906306447d5690602401600060405180830381600087803b15801561298657600080fd5b505af115801561299a573d6000803e3d6000fd5b5050602854604080516001600160a01b039092166024830152600060448084019190915281518084039091018152606490920181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb392506120359190600401618cb2565b6026546040517f06447d560000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906306447d5690602401600060405180830381600087803b158015612ad857600080fd5b505af1158015612aec573d6000803e3d6000fd5b50506040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b158015612b7557600080fd5b505af1158015612b89573d6000803e3d6000fd5b50506020546040517f10188aef000000000000000000000000000000000000000000000000000000008152600060048201526001600160a01b0390911692506310188aef9150602401610f84565b6040517f68656c6c6f0000000000000000000000000000000000000000000000000000006020820152670de0b6b3a76400009060009060250160408051808303601f190181529082905260265463ca669fa760e01b83526001600160a01b031660048301529150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015612c7757600080fd5b505af1158015612c8b573d6000803e3d6000fd5b5050602654604080516001600160a01b0390921660248301527f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb60448084019190915281518084039091018152606490920181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb39250612d769190600401618cb2565b600060405180830381600087803b158015612d9057600080fd5b505af1158015612da4573d6000803e3d6000fd5b50506020546021546040517f35c018db0000000000000000000000000000000000000000000000000000000081526001600160a01b0392831694506335c018db93508692611a249216908690600401618a2a565b60285460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015612e5157600080fd5b505af1158015612e65573d6000803e3d6000fd5b5050602854604080516001600160a01b0390921660248301527f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a60448084019190915281518084039091018152606490920181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb39250612f509190600401618cb2565b600060405180830381600087803b158015612f6a57600080fd5b505af1158015612f7e573d6000803e3d6000fd5b50505050602060009054906101000a90046001600160a01b03166001600160a01b0316638456cb596040518163ffffffff1660e01b8152600401600060405180830381600087803b158015612fd257600080fd5b505af1158015612fe6573d6000803e3d6000fd5b505060285460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b15801561304357600080fd5b505af1158015613057573d6000803e3d6000fd5b5050602854604080516001600160a01b0390921660248301527f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a60448084019190915281518084039091018152606490920181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb392506131429190600401618cb2565b600060405180830381600087803b15801561315c57600080fd5b505af1158015613170573d6000803e3d6000fd5b50505050602060009054906101000a90046001600160a01b03166001600160a01b0316633f4ba83a6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156131c457600080fd5b505af11580156131d8573d6000803e3d6000fd5b505060265460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b15801561323557600080fd5b505af1158015613249573d6000803e3d6000fd5b50505050602060009054906101000a90046001600160a01b03166001600160a01b0316638456cb596040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561329d57600080fd5b505af11580156132b1573d6000803e3d6000fd5b5050604080516004808252602480830184526020830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f6ed701690000000000000000000000000000000000000000000000000000000017905292517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fd93c06650000000000000000000000000000000000000000000000000000000091810191909152909350737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09101600060405180830381600087803b15801561339357600080fd5b505af11580156133a7573d6000803e3d6000fd5b505060285460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b15801561340457600080fd5b505af1158015613418573d6000803e3d6000fd5b50506020546021546040517f1cff79cd0000000000000000000000000000000000000000000000000000000081526001600160a01b039283169450631cff79cd935061346c92909116908590600401618a2a565b6000604051808303816000875af115801561348b573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526134b39190810190618b34565b5060265460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561350d57600080fd5b505af1158015613521573d6000803e3d6000fd5b50505050602060009054906101000a90046001600160a01b03166001600160a01b0316633f4ba83a6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561357557600080fd5b505af1158015613589573d6000803e3d6000fd5b50506021546040517ff30c7ba3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f30c7ba392506115b8916001600160a01b0316906000908690600401618bd8565b606060158054806020026020016040519081016040528092919081815260200182805480156112f6576020028201919060005260206000209081546001600160a01b031681526001909101906020018083116112d8575050505050905090565b60248054602754604051620186a09381018490526001600160a01b0392831660448201529116606482015260009060840160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f357fc5a200000000000000000000000000000000000000000000000000000000179052602654905163ca669fa760e01b81526001600160a01b039091166004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561373157600080fd5b505af1158015613745573d6000803e3d6000fd5b5050602654604080516001600160a01b0390921660248301527f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b960448084019190915281518084039091018152606490920181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb392506138309190600401618cb2565b600060405180830381600087803b15801561384a57600080fd5b505af115801561385e573d6000803e3d6000fd5b50506020546024546027546040517f5131ab590000000000000000000000000000000000000000000000000000000081526001600160a01b039384169550635131ab59945061273a93928316929091169087908790600401618cc5565b604080516001808252818301909252600091816020015b60608152602001906001900390816138d25790505090506040518060400160405280600f81526020017f48656c6c6f2c20466f756e6472792100000000000000000000000000000000008152508160008151811061393257613932618c19565b6020908102919091010152604080516001808252818301909252600091816020016020820280368337019050509050602a8160008151811061397657613976618c19565b602090810291909101015260405160019060009061399c90859085908590602401618c7a565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167ff05b6abf0000000000000000000000000000000000000000000000000000000017905260215490517ff30c7ba3000000000000000000000000000000000000000000000000000000008152919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f30c7ba391613a59916001600160a01b0391909116906000908690600401618bd8565b600060405180830381600087803b158015613a7357600080fd5b505af1158015613a87573d6000803e3d6000fd5b50506021546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b158015613b1957600080fd5b505af1158015613b2d573d6000803e3d6000fd5b50506020546040517f74a53cd528a921fca7dbdee62f86819051d3cc98f214951f4238e8843f20b1469350613b7492506001600160a01b0390911690879087908790618d15565b60405180910390a16020546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b158015613c0a57600080fd5b505af1158015613c1e573d6000803e3d6000fd5b50506021546040516001600160a01b0390911692507fcaf938de11c367272220bfd1d2baa99ca46665e7bc4d85f00adb51b90fe1fa9f9150613c64906000908590618c00565b60405180910390a260285460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401611e6f565b604080517f68656c6c6f0000000000000000000000000000000000000000000000000000006020820152815160058183030181526025909101909152602154670de0b6b3a764000091906001600160a01b031631613d0f81600061449c565b6021546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b158015613d9d57600080fd5b505af1158015613db1573d6000803e3d6000fd5b50506020546040517f0d3f65f00e631663aa85c96330b5c7a83bb29af3630c0063776f985edc3037aa9350613df492506001600160a01b03909116908590618a2a565b60405180910390a16020546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b158015613e8a57600080fd5b505af1158015613e9e573d6000803e3d6000fd5b50506021546040516001600160a01b0390911692507fd5d7616b1678354a0dea9d7e57e6a090bff5babe9f8d6381fdbad16e89ba311c9150613eeb90670de0b6b3a7640000908690618c00565b60405180910390a260285460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015613f4c57600080fd5b505af1158015613f60573d6000803e3d6000fd5b50506020546021546040517f35c018db0000000000000000000000000000000000000000000000000000000081526001600160a01b0392831694506335c018db93508792613fb49216908790600401618a2a565b6000604051808303818588803b158015613fcd57600080fd5b505af1158015613fe1573d6000803e3d6000fd5b50506021546001600160a01b0316319250610fb29150829050670de0b6b3a764000061449c565b60408051808201909152600f81527f48656c6c6f2c20466f756e6472792100000000000000000000000000000000006020820152602154602a90600190670de0b6b3a764000090614065906000906001600160a01b03163161449c565b600084848460405160240161407c93929190618d5d565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe04d4f970000000000000000000000000000000000000000000000000000000017905260215490517ff30c7ba3000000000000000000000000000000000000000000000000000000008152919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f30c7ba391614140916001600160a01b039190911690670de0b6b3a7640000908690600401618bd8565b600060405180830381600087803b15801561415a57600080fd5b505af115801561416e573d6000803e3d6000fd5b50506021546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b15801561420057600080fd5b505af1158015614214573d6000803e3d6000fd5b50506020546040517f1f1ff1f5fb41346850b2f5c04e6c767e2f1c8a525c5c0c5cdb60cdf3ca5f62fa935061425d92506001600160a01b03909116908590899089908990618d87565b60405180910390a16020546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b1580156142f357600080fd5b505af1158015614307573d6000803e3d6000fd5b50506021546040516001600160a01b0390911692507fcaf938de11c367272220bfd1d2baa99ca46665e7bc4d85f00adb51b90fe1fa9f915061435490670de0b6b3a7640000908590618c00565b60405180910390a260285460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156143b557600080fd5b505af11580156143c9573d6000803e3d6000fd5b50506020546021546040517f1cff79cd0000000000000000000000000000000000000000000000000000000081526001600160a01b039283169450631cff79cd9350869261441d9216908690600401618a2a565b60006040518083038185885af115801561443b573d6000803e3d6000fd5b50505050506040513d6000823e601f3d908101601f191682016040526144649190810190618b34565b50602154611f389083906001600160a01b03163161449c565b60006144876185cb565b61449284848361451b565b9150505b92915050565b6040517f98296c540000000000000000000000000000000000000000000000000000000081526004810183905260248101829052737109709ecfa91a80626ff3989d68f67f5b1dd12d906398296c549060440160006040518083038186803b15801561450757600080fd5b505afa158015612768573d6000803e3d6000fd5b6000806145288584614596565b905061458b6040518060400160405280601d81526020017f4552433139363750726f78792e736f6c3a4552433139363750726f78790000008152508286604051602001614576929190618a2a565b604051602081830303815290604052856145a2565b9150505b9392505050565b600061458f83836145d0565b60c081015151600090156145c6576145bf84848460c001516145eb565b905061458f565b6145bf8484614791565b60006145dc838361487c565b61458f838360200151846145a2565b6000806145f6614888565b90506000614604868361495b565b9050600061461b8260600151836020015185614e01565b9050600061462b83838989615013565b9050600061463882615e90565b602081015181519192509060030b156146ab57898260400151604051602001614662929190618dc8565b60408051601f19818403018152908290527f08c379a00000000000000000000000000000000000000000000000000000000082526146a291600401618cb2565b60405180910390fd5b60006146ee6040518060400160405280601581526020017f4465706c6f79656420746f20616464726573733a20000000000000000000000081525083600161605f565b6040517fc6ce059d000000000000000000000000000000000000000000000000000000008152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c6ce059d90614741908490600401618cb2565b602060405180830381865afa15801561475e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906147829190618e49565b9b9a5050505050505050505050565b6040517f8d1cc9250000000000000000000000000000000000000000000000000000000081526000908190737109709ecfa91a80626ff3989d68f67f5b1dd12d90638d1cc925906147e6908790600401618cb2565b600060405180830381865afa158015614803573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261482b9190810190618b34565b905060006148598285604051602001614845929190618e72565b60405160208183030381529060405261625f565b90506001600160a01b038116614492578484604051602001614662929190618ea1565b61065282826000616272565b604080518082018252600381527f6f75740000000000000000000000000000000000000000000000000000000000602082015290517fd145736c000000000000000000000000000000000000000000000000000000008152606091737109709ecfa91a80626ff3989d68f67f5b1dd12d91829063d145736c9061490f908490600401618f4c565b600060405180830381865afa15801561492c573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526149549190810190618f93565b9250505090565b61498d6040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b6000737109709ecfa91a80626ff3989d68f67f5b1dd12d90506149d86040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b6149e185616375565b602082015260006149f18661675a565b90506000836001600160a01b031663d930a0e66040518163ffffffff1660e01b8152600401600060405180830381865afa158015614a33573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052614a5b9190810190618f93565b86838560200151604051602001614a759493929190618fdc565b60408051601f19818403018152908290527f60f9bb1100000000000000000000000000000000000000000000000000000000825291506000906001600160a01b038616906360f9bb1190614acd908590600401618cb2565b600060405180830381865afa158015614aea573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052614b129190810190618f93565b6040517fdb4235f60000000000000000000000000000000000000000000000000000000081529091506001600160a01b0386169063db4235f690614b5a9084906004016190e0565b602060405180830381865afa158015614b77573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614b9b9190618b69565b614bb057816040516020016146629190619132565b6040517f49c4fac80000000000000000000000000000000000000000000000000000000081526001600160a01b038616906349c4fac890614bf59084906004016191c4565b600060405180830381865afa158015614c12573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052614c3a9190810190618f93565b84526040517fdb4235f60000000000000000000000000000000000000000000000000000000081526001600160a01b0386169063db4235f690614c81908490600401619216565b602060405180830381865afa158015614c9e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614cc29190618b69565b15614d57576040517f49c4fac80000000000000000000000000000000000000000000000000000000081526001600160a01b038616906349c4fac890614d0c908490600401619216565b600060405180830381865afa158015614d29573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052614d519190810190618f93565b60408501525b846001600160a01b03166349c4fac8828660000151604051602001614d7c9190619268565b6040516020818303038152906040526040518363ffffffff1660e01b8152600401614da89291906192d4565b600060405180830381865afa158015614dc5573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052614ded9190810190618f93565b606085015250608083015250949350505050565b60408051600480825260a0820190925260609160009190816020015b6060815260200190600190039081614e1d5790505090506040518060400160405280600481526020017f677265700000000000000000000000000000000000000000000000000000000081525081600081518110614e7d57614e7d618c19565b60200260200101819052506040518060400160405280600381526020017f2d726c000000000000000000000000000000000000000000000000000000000081525081600181518110614ed157614ed1618c19565b602002602001018190525084604051602001614eed91906192f9565b60405160208183030381529060405281600281518110614f0f57614f0f618c19565b602002602001018190525082604051602001614f2b9190619365565b60405160208183030381529060405281600381518110614f4d57614f4d618c19565b60200260200101819052506000614f6382615e90565b602080820151604080518082018252600581527f2e6a736f6e0000000000000000000000000000000000000000000000000000008185019081528251808401845260008082529086015282518084019093529051825292810192909252919250614ff490604080518082018252600080825260209182015281518083019092528451825280850190820152906169dd565b615009578560405160200161466291906193a6565b9695505050505050565b60a0810151604080518082018252600080825260209182015281518083019092528251808352928101910152606090737109709ecfa91a80626ff3989d68f67f5b1dd12d9015615063565b511590565b6151d75782602001511561511f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605860248201527f54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f742060448201527f62652075736564207768656e207468652060736b6970566572696679536f757260648201527f6365436f646560206f7074696f6e206973206074727565600000000000000000608482015260a4016146a2565b8260c00151156151d7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605360248201527f54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f742060448201527f62652075736564207768656e207468652060736b69704c6963656e736554797060648201527f6560206f7074696f6e2069732060747275656000000000000000000000000000608482015260a4016146a2565b6040805160ff8082526120008201909252600091816020015b60608152602001906001900390816151f057905050905060006040518060400160405280600381526020017f6e7078000000000000000000000000000000000000000000000000000000000081525082828061524b90619466565b935060ff168151811061526057615260618c19565b60200260200101819052506040518060400160405280600d81526020017f302e302e312d616c7068612e37000000000000000000000000000000000000008152506040516020016152b19190619485565b6040516020818303038152906040528282806152cc90619466565b935060ff16815181106152e1576152e1618c19565b60200260200101819052506040518060400160405280600681526020017f6465706c6f79000000000000000000000000000000000000000000000000000081525082828061532e90619466565b935060ff168151811061534357615343618c19565b60200260200101819052506040518060400160405280600e81526020017f2d2d636f6e74726163744e616d6500000000000000000000000000000000000081525082828061539090619466565b935060ff16815181106153a5576153a5618c19565b602002602001018190525087602001518282806153c190619466565b935060ff16815181106153d6576153d6618c19565b60200260200101819052506040518060400160405280600e81526020017f2d2d636f6e74726163745061746800000000000000000000000000000000000081525082828061542390619466565b935060ff168151811061543857615438618c19565b60209081029190910101528751828261545081619466565b935060ff168151811061546557615465618c19565b60200260200101819052506040518060400160405280600981526020017f2d2d636861696e496400000000000000000000000000000000000000000000008152508282806154b290619466565b935060ff16815181106154c7576154c7618c19565b60200260200101819052506154db46616a3e565b82826154e681619466565b935060ff16815181106154fb576154fb618c19565b60200260200101819052506040518060400160405280600f81526020017f2d2d6275696c64496e666f46696c65000000000000000000000000000000000081525082828061554890619466565b935060ff168151811061555d5761555d618c19565b60200260200101819052508682828061557590619466565b935060ff168151811061558a5761558a618c19565b60209081029190910101528551156156b15760408051808201909152601581527f2d2d636f6e7374727563746f7242797465636f64650000000000000000000000602082015282826155db81619466565b935060ff16815181106155f0576155f0618c19565b60209081029190910101526040517f71aad10d0000000000000000000000000000000000000000000000000000000081526001600160a01b038416906371aad10d90615640908990600401618cb2565b600060405180830381865afa15801561565d573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526156859190810190618f93565b828261569081619466565b935060ff16815181106156a5576156a5618c19565b60200260200101819052505b8460200151156157815760408051808201909152601281527f2d2d766572696679536f75726365436f64650000000000000000000000000000602082015282826156fa81619466565b935060ff168151811061570f5761570f618c19565b60200260200101819052506040518060400160405280600581526020017f66616c736500000000000000000000000000000000000000000000000000000081525082828061575c90619466565b935060ff168151811061577157615771618c19565b6020026020010181905250615948565b6157b961505e8660a0015160408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b61584c5760408051808201909152600d81527f2d2d6c6963656e73655479706500000000000000000000000000000000000000602082015282826157fc81619466565b935060ff168151811061581157615811618c19565b60200260200101819052508460a0015160405160200161583191906192f9565b60405160208183030381529060405282828061575c90619466565b8460c0015115801561588f57506040808901518151808301835260008082526020918201528251808401909352815183529081019082015261588d90511590565b155b156159485760408051808201909152600d81527f2d2d6c6963656e73655479706500000000000000000000000000000000000000602082015282826158d381619466565b935060ff16815181106158e8576158e8618c19565b60200260200101819052506158fc88616ade565b60405160200161590c91906192f9565b60405160208183030381529060405282828061592790619466565b935060ff168151811061593c5761593c618c19565b60200260200101819052505b6040808601518151808301835260008082526020918201528251808401909352815183529081019082015261597c90511590565b615a115760408051808201909152600b81527f2d2d72656c617965724964000000000000000000000000000000000000000000602082015282826159bf81619466565b935060ff16815181106159d4576159d4618c19565b602002602001018190525084604001518282806159f090619466565b935060ff1681518110615a0557615a05618c19565b60200260200101819052505b606085015115615b325760408051808201909152600681527f2d2d73616c74000000000000000000000000000000000000000000000000000060208201528282615a5a81619466565b935060ff1681518110615a6f57615a6f618c19565b602090810291909101015260608501516040517fb11a19e800000000000000000000000000000000000000000000000000000000815260048101919091526001600160a01b0384169063b11a19e890602401600060405180830381865afa158015615ade573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052615b069190810190618f93565b8282615b1181619466565b935060ff1681518110615b2657615b26618c19565b60200260200101819052505b60e08501515115615bd95760408051808201909152600a81527f2d2d6761734c696d69740000000000000000000000000000000000000000000060208201528282615b7c81619466565b935060ff1681518110615b9157615b91618c19565b6020026020010181905250615bad8560e0015160000151616a3e565b8282615bb881619466565b935060ff1681518110615bcd57615bcd618c19565b60200260200101819052505b60e08501516020015115615c835760408051808201909152600a81527f2d2d67617350726963650000000000000000000000000000000000000000000060208201528282615c2681619466565b935060ff1681518110615c3b57615c3b618c19565b6020026020010181905250615c578560e0015160200151616a3e565b8282615c6281619466565b935060ff1681518110615c7757615c77618c19565b60200260200101819052505b60e08501516040015115615d2d5760408051808201909152600e81527f2d2d6d617846656550657247617300000000000000000000000000000000000060208201528282615cd081619466565b935060ff1681518110615ce557615ce5618c19565b6020026020010181905250615d018560e0015160400151616a3e565b8282615d0c81619466565b935060ff1681518110615d2157615d21618c19565b60200260200101819052505b60e08501516060015115615dd75760408051808201909152601681527f2d2d6d61785072696f726974794665655065724761730000000000000000000060208201528282615d7a81619466565b935060ff1681518110615d8f57615d8f618c19565b6020026020010181905250615dab8560e0015160600151616a3e565b8282615db681619466565b935060ff1681518110615dcb57615dcb618c19565b60200260200101819052505b60008160ff1667ffffffffffffffff811115615df557615df5618a4c565b604051908082528060200260200182016040528015615e2857816020015b6060815260200190600190039081615e135790505b50905060005b8260ff168160ff161015615e8157838160ff1681518110615e5157615e51618c19565b6020026020010151828260ff1681518110615e6e57615e6e618c19565b6020908102919091010152600101615e2e565b5093505050505b949350505050565b615eb76040518060600160405280600060030b815260200160608152602001606081525090565b60408051808201825260048082527f6261736800000000000000000000000000000000000000000000000000000000602083015291517fd145736c000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d92600091849163d145736c91615f3d918691016194f0565b600060405180830381865afa158015615f5a573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052615f829190810190618f93565b90506000615f9086836175cd565b90506000846001600160a01b031663f45c1ce7836040518263ffffffff1660e01b8152600401615fc09190618980565b6000604051808303816000875af1158015615fdf573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526160079190810190619537565b805190915060030b158015906160205750602081015151155b801561602f5750604081015151155b15615009578160008151811061604757616047618c19565b602002602001015160405160200161466291906195ed565b606060006160948560408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6040805180820182526000808252602091820152815180830190925286518252808701908201529091506160cb9082905b90617722565b15616228576000616148826161428461613c61610e8a60408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6040805180820182526000808252602091820152815180830190925282518252918201519181019190915290565b90617749565b906177ab565b604080518082018252600181527f0a00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201529091506161ac908290617722565b1561621657604080518082018252600181527f0a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616213905b8290617830565b90505b61621f81617856565b9250505061458f565b82156162415784846040516020016146629291906197d9565b505060408051602081019091526000815261458f565b509392505050565b6000808251602084016000f09392505050565b8160a001511561628157505050565b600061628e8484846178bf565b9050600061629b82615e90565b602081015181519192509060030b1580156163375750604080518082018252600781527f535543434553530000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616337906040805180820182526000808252602091820152815180830190925284518252808501908201526160c5565b1561634457505050505050565b604082015151156163645781604001516040516020016146629190619880565b8060405160200161466291906198de565b606060006163aa8360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600481527f2e736f6c000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015290915061640f905b82906169dd565b1561647e57604080518082018252600481527f2e736f6c000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261458f90616479908390617e5a565b617856565b604080518082018252600181527f3a00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526164e0905b8290617ee4565b6001036165ad57604080518082018252600181527f3a00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526165469061620c565b50604080518082018252600181527f3a000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261458f90616479905b8390617830565b604080518082018252600581527f2e6a736f6e0000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261660c90616408565b1561674357604080518082018252600181527f2f00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820181905284518086019095529251845283015290616674908390617f7e565b9050600081600183516166879190619949565b8151811061669757616697618c19565b6020026020010151905061673a61647961670d6040518060400160405280600581526020017f2e6a736f6e00000000000000000000000000000000000000000000000000000081525060408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b60408051808201825260008082526020918201528151808301909252855182528086019082015290617e5a565b95945050505050565b82604051602001614662919061995c565b50919050565b6060600061678f8360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600481527f2e736f6c00000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201529091506167f190616408565b156167ff5761458f81617856565b604080518082018252600181527f3a000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261685e906164d9565b6001036168c857604080518082018252600181527f3a000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261458f90616479906165a6565b604080518082018252600581527f2e6a736f6e0000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261692790616408565b1561674357604080518082018252600181527f2f0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082018190528451808601909552925184528301529061698f908390617f7e565b90506001815111156169cb5780600282516169aa9190619949565b815181106169ba576169ba618c19565b602002602001015192505050919050565b5082604051602001614662919061995c565b8051825160009111156169f257506000614496565b81518351602085015160009291616a0891619a3a565b616a129190619949565b905082602001518103616a29576001915050614496565b82516020840151819020912014905092915050565b60606000616a4b83618023565b600101905060008167ffffffffffffffff811115616a6b57616a6b618a4c565b6040519080825280601f01601f191660200182016040528015616a95576020820181803683370190505b5090508181016020015b600019017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a8504945084616a9f57509392505050565b604081810151815180830183526000808252602091820181905283518085018552835181529282018383015283518085018552600a81527f554e4c4943454e5345440000000000000000000000000000000000000000000081840190815285518087018752838152840192909252845180860190955251845290830152606091616b6a905b8290618105565b15616baa57505060408051808201909152600481527f4e6f6e65000000000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600981527f556e6c6963656e7365000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616c0990616b63565b15616c4957505060408051808201909152600981527f556e6c6963656e736500000000000000000000000000000000000000000000006020820152919050565b604080518082018252600381527f4d4954000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616ca890616b63565b15616ce857505060408051808201909152600381527f4d495400000000000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f47504c2d322e302d6f6e6c79000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616d4790616b63565b80616dac5750604080518082018252601081527f47504c2d322e302d6f722d6c617465720000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616dac90616b63565b15616dec57505060408051808201909152600981527f474e552047504c763200000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f47504c2d332e302d6f6e6c79000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616e4b90616b63565b80616eb05750604080518082018252601081527f47504c2d332e302d6f722d6c617465720000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616eb090616b63565b15616ef057505060408051808201909152600981527f474e552047504c763300000000000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4c47504c2d322e312d6f6e6c790000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616f4f90616b63565b80616fb45750604080518082018252601181527f4c47504c2d322e312d6f722d6c6174657200000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616fb490616b63565b15616ff457505060408051808201909152600c81527f474e55204c47504c76322e3100000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4c47504c2d332e302d6f6e6c79000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261705390616b63565b806170b85750604080518082018252601181527f4c47504c2d332e302d6f722d6c61746572000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526170b890616b63565b156170f857505060408051808201909152600a81527f474e55204c47504c7633000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f4253442d322d436c6175736500000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261715790616b63565b1561719757505060408051808201909152600c81527f4253442d322d436c6175736500000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f4253442d332d436c617573650000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526171f690616b63565b1561723657505060408051808201909152600c81527f4253442d332d436c6175736500000000000000000000000000000000000000006020820152919050565b604080518082018252600781527f4d504c2d322e30000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261729590616b63565b156172d557505060408051808201909152600781527f4d504c2d322e30000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600781527f4f534c2d332e30000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261733490616b63565b1561737457505060408051808201909152600781527f4f534c2d332e30000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600a81527f4170616368652d322e3000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526173d390616b63565b1561741357505060408051808201909152600a81527f4170616368652d322e30000000000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4147504c2d332e302d6f6e6c79000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261747290616b63565b806174d75750604080518082018252601181527f4147504c2d332e302d6f722d6c61746572000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526174d790616b63565b1561751757505060408051808201909152600a81527f474e55204147504c7633000000000000000000000000000000000000000000006020820152919050565b604080518082018252600881527f4255534c2d312e310000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261757690616b63565b156175b657505060408051808201909152600781527f42534c20312e31000000000000000000000000000000000000000000000000006020820152919050565b604080840151845191516146629290602001619a4d565b60608060005b845181101561765857818582815181106175ef576175ef618c19565b6020026020010151604051602001617608929190618e72565b6040516020818303038152906040529150600185516176279190619949565b8114617650578160405160200161763e9190619bb6565b60405160208183030381529060405291505b6001016175d3565b5060408051600380825260808201909252600091816020015b6060815260200190600190039081617671579050509050838160008151811061769c5761769c618c19565b60200260200101819052506040518060400160405280600281526020017f2d63000000000000000000000000000000000000000000000000000000000000815250816001815181106176f0576176f0618c19565b6020026020010181905250818160028151811061770f5761770f618c19565b6020908102919091010152949350505050565b60208083015183518351928401516000936177409291849190618119565b14159392505050565b6040805180820190915260008082526020820152600061777b846000015185602001518560000151866020015161822a565b905083602001518161778d9190619949565b8451859061779c908390619949565b90525060208401525090919050565b60408051808201909152600080825260208201528151835110156177d0575081614496565b60208083015190840151600191146177f75750815160208481015190840151829020919020145b80156178285782518451859061780e908390619949565b9052508251602085018051617824908390619a3a565b9052505b509192915050565b604080518082019091526000808252602082015261784f83838361834a565b5092915050565b60606000826000015167ffffffffffffffff81111561787757617877618a4c565b6040519080825280601f01601f1916602001820160405280156178a1576020820181803683370190505b509050600060208201905061784f81856020015186600001516183f5565b606060006178cb614888565b6040805160ff808252612000820190925291925060009190816020015b60608152602001906001900390816178e857905050905060006040518060400160405280600381526020017f6e7078000000000000000000000000000000000000000000000000000000000081525082828061794390619466565b935060ff168151811061795857617958618c19565b60200260200101819052506040518060400160405280600781526020017f5e312e33322e33000000000000000000000000000000000000000000000000008152506040516020016179a99190619bf7565b6040516020818303038152906040528282806179c490619466565b935060ff16815181106179d9576179d9618c19565b60200260200101819052506040518060400160405280600881526020017f76616c6964617465000000000000000000000000000000000000000000000000815250828280617a2690619466565b935060ff1681518110617a3b57617a3b618c19565b602002602001018190525082604051602001617a579190619365565b604051602081830303815290604052828280617a7290619466565b935060ff1681518110617a8757617a87618c19565b60200260200101819052506040518060400160405280600a81526020017f2d2d636f6e747261637400000000000000000000000000000000000000000000815250828280617ad490619466565b935060ff1681518110617ae957617ae9618c19565b6020026020010181905250617afe878461846f565b8282617b0981619466565b935060ff1681518110617b1e57617b1e618c19565b602090810291909101015285515115617bca5760408051808201909152600b81527f2d2d7265666572656e636500000000000000000000000000000000000000000060208201528282617b7081619466565b935060ff1681518110617b8557617b85618c19565b6020026020010181905250617b9e86600001518461846f565b8282617ba981619466565b935060ff1681518110617bbe57617bbe618c19565b60200260200101819052505b856080015115617c385760408051808201909152601881527f2d2d756e73616665536b697053746f72616765436865636b000000000000000060208201528282617c1381619466565b935060ff1681518110617c2857617c28618c19565b6020026020010181905250617c9e565b8415617c9e5760408051808201909152601281527f2d2d726571756972655265666572656e6365000000000000000000000000000060208201528282617c7d81619466565b935060ff1681518110617c9257617c92618c19565b60200260200101819052505b60408601515115617d3a5760408051808201909152600d81527f2d2d756e73616665416c6c6f770000000000000000000000000000000000000060208201528282617ce881619466565b935060ff1681518110617cfd57617cfd618c19565b60200260200101819052508560400151828280617d1990619466565b935060ff1681518110617d2e57617d2e618c19565b60200260200101819052505b856060015115617da45760408051808201909152601481527f2d2d756e73616665416c6c6f7752656e616d657300000000000000000000000060208201528282617d8381619466565b935060ff1681518110617d9857617d98618c19565b60200260200101819052505b60008160ff1667ffffffffffffffff811115617dc257617dc2618a4c565b604051908082528060200260200182016040528015617df557816020015b6060815260200190600190039081617de05790505b50905060005b8260ff168160ff161015617e4e57838160ff1681518110617e1e57617e1e618c19565b6020026020010151828260ff1681518110617e3b57617e3b618c19565b6020908102919091010152600101617dfb565b50979650505050505050565b6040805180820190915260008082526020820152815183511015617e7f575081614496565b81518351602085015160009291617e9591619a3a565b617e9f9190619949565b60208401519091506001908214617ec0575082516020840151819020908220145b8015617edb57835185518690617ed7908390619949565b9052505b50929392505050565b6000808260000151617f08856000015186602001518660000151876020015161822a565b617f129190619a3a565b90505b83516020850151617f269190619a3a565b811161784f5781617f3681619c3c565b9250508260000151617f6d856020015183617f519190619949565b8651617f5d9190619949565b838660000151876020015161822a565b617f779190619a3a565b9050617f15565b60606000617f8c8484617ee4565b617f97906001619a3a565b67ffffffffffffffff811115617faf57617faf618a4c565b604051908082528060200260200182016040528015617fe257816020015b6060815260200190600190039081617fcd5790505b50905060005b815181101561625757617ffe6164798686617830565b82828151811061801057618010618c19565b6020908102919091010152600101617fe8565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000831061806c577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310618098576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc1000083106180b657662386f26fc10000830492506010015b6305f5e10083106180ce576305f5e100830492506008015b61271083106180e257612710830492506004015b606483106180f4576064830492506002015b600a83106144965760010192915050565b600061811183836184af565b159392505050565b60008085841161822057602084116181cc5760008415618164576001618140866020619949565b61814b906008619c56565b618156906002619d54565b6181609190619949565b1990505b83518116856181738989619a3a565b61817d9190619949565b805190935082165b8181146181b75787841161819f5787945050505050615e88565b836181a981619d60565b945050828451169050618185565b6181c18785619a3a565b945050505050615e88565b8383206181d98588619949565b6181e39087619a3a565b91505b85821061821e5784822080820361820b576182018684619a3a565b9350505050615e88565b618216600184619949565b9250506181e6565b505b5092949350505050565b6000838186851161833557602085116182e45760008515618276576001618252876020619949565b61825d906008619c56565b618268906002619d54565b6182729190619949565b1990505b845181166000876182878b8b619a3a565b6182919190619949565b855190915083165b8281146182d6578186106182be576182b18b8b619a3a565b9650505050505050615e88565b856182c881619c3c565b965050838651169050618299565b859650505050505050615e88565b508383206000905b6182f68689619949565b8211618333578583208082036183125783945050505050615e88565b61831d600185619a3a565b935050818061832b90619c3c565b9250506182ec565b505b61833f8787619a3a565b979650505050505050565b6040805180820190915260008082526020820152600061837c856000015186602001518660000151876020015161822a565b6020808701805191860191909152519091506183989082619949565b8352845160208601516183ab9190619a3a565b81036183ba57600085526183ec565b835183516183c89190619a3a565b855186906183d7908390619949565b90525083516183e69082619a3a565b60208601525b50909392505050565b6020811061842d578151835261840c602084619a3a565b9250618419602083619a3a565b9150618426602082619949565b90506183f5565b600019811561845c576001618443836020619949565b61844f90610100619d54565b6184599190619949565b90505b9151835183169219169190911790915250565b6060600061847d848461495b565b805160208083015160405193945061849793909101619d77565b60405160208183030381529060405291505092915050565b81518151600091908111156184c2575081515b6020808501519084015160005b8381101561857b578251825180821461854b57600019602087101561852a576001846184fc896020619949565b6185069190619a3a565b618511906008619c56565b61851c906002619d54565b6185269190619949565b1990505b81811683821681810391146185485797506144969650505050505050565b50505b618556602086619a3a565b9450618563602085619a3a565b935050506020816185749190619a3a565b90506184cf565b50845186516150099190619dcf565b610c9f80619df083390190565b6112a68061aa8f83390190565b61140b8061bd3583390190565b61155a8061d14083390190565b610d5e8061e69a83390190565b6040518060e0016040528060608152602001606081526020016060815260200160001515815260200160001515815260200160001515815260200161860e618613565b905290565b6040518061010001604052806000151581526020016000151581526020016060815260200160008019168152602001606081526020016060815260200160001515815260200161860e6040518060800160405280600081526020016000815260200160008152602001600081525090565b602080825282518282018190526000918401906040840190835b818110156186c55783516001600160a01b031683526020938401939092019160010161869e565b509095945050505050565b60005b838110156186eb5781810151838201526020016186d3565b50506000910152565b6000815180845261870c8160208601602086016186d0565b601f01601f19169290920160200192915050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b8281101561881c577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452815180516001600160a01b03168652602090810151604082880181905281519088018190529101906060600582901b88018101919088019060005b81811015618802577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa08a85030183526187ec8486516186f4565b60209586019590945092909201916001016187b2565b509197505050602094850194929092019150600101618748565b50929695505050505050565b600081518084526020840193506020830160005b8281101561887c5781517fffffffff000000000000000000000000000000000000000000000000000000001686526020958601959091019060010161883c565b5093949350505050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b8281101561881c577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc087860301845281518051604087526188f260408801826186f4565b905060208201519150868103602088015261890d8183618828565b9650505060209384019391909101906001016188ae565b600082825180855260208501945060208160051b8301016020850160005b8381101561897457601f1985840301885261895e8383516186f4565b6020988901989093509190910190600101618942565b50909695505050505050565b60208152600061458f6020830184618924565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b8281101561881c577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc087860301845281516001600160a01b0381511686526020810151905060406020870152618a146040870182618828565b95505060209384019391909101906001016189bb565b6001600160a01b0383168152604060208201526000615e8860408301846186f4565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040516060810167ffffffffffffffff81118282101715618a9e57618a9e618a4c565b60405290565b60008067ffffffffffffffff841115618abf57618abf618a4c565b50604051601f19601f85018116603f0116810181811067ffffffffffffffff82111715618aee57618aee618a4c565b604052838152905080828401851015618b0657600080fd5b6162578460208301856186d0565b600082601f830112618b2557600080fd5b61458f83835160208501618aa4565b600060208284031215618b4657600080fd5b815167ffffffffffffffff811115618b5d57600080fd5b61449284828501618b14565b600060208284031215618b7b57600080fd5b8151801515811461458f57600080fd5b600181811c90821680618b9f57607f821691505b602082108103616754577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6001600160a01b038416815282602082015260606040820152600061673a60608301846186f4565b828152604060208201526000615e8860408301846186f4565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081518084526020840193506020830160005b8281101561887c578151865260209586019590910190600101618c5c565b606081526000618c8d6060830186618924565b8281036020840152618c9f8186618c48565b9150508215156040830152949350505050565b60208152600061458f60208301846186f4565b6001600160a01b03851681526001600160a01b038416602082015282604082015260806060820152600061500960808301846186f4565b600060208284031215618d0e57600080fd5b5051919050565b6001600160a01b0385168152608060208201526000618d376080830186618924565b8281036040840152618d498186618c48565b915050821515606083015295945050505050565b606081526000618d7060608301866186f4565b602083019490945250901515604090910152919050565b6001600160a01b038616815284602082015260a060408201526000618daf60a08301866186f4565b6060830194909452509015156080909101529392505050565b7f4661696c656420746f206465706c6f7920636f6e747261637420000000000000815260008351618e0081601a8501602088016186d0565b7f3a20000000000000000000000000000000000000000000000000000000000000601a918401918201528351618e3d81601c8401602088016186d0565b01601c01949350505050565b600060208284031215618e5b57600080fd5b81516001600160a01b038116811461458f57600080fd5b60008351618e848184602088016186d0565b835190830190618e988183602088016186d0565b01949350505050565b7f4661696c656420746f206465706c6f7920636f6e747261637420000000000000815260008351618ed981601a8501602088016186d0565b7f207573696e6720636f6e7374727563746f722064617461202200000000000000601a918401918201528351618f168160338401602088016186d0565b7f220000000000000000000000000000000000000000000000000000000000000060339290910191820152603401949350505050565b60408152600b60408201527f464f554e4452595f4f5554000000000000000000000000000000000000000000606082015260806020820152600061458f60808301846186f4565b600060208284031215618fa557600080fd5b815167ffffffffffffffff811115618fbc57600080fd5b8201601f81018413618fcd57600080fd5b61449284825160208401618aa4565b60008551618fee818460208a016186d0565b7f2f000000000000000000000000000000000000000000000000000000000000009083019081528551619028816001840160208a016186d0565b7f2f000000000000000000000000000000000000000000000000000000000000006001929091019182015284516190668160028401602089016186d0565b6001818301019150507f2f00000000000000000000000000000000000000000000000000000000000000600182015283516190a88160028401602088016186d0565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600292909101918201526007019695505050505050565b6040815260006190f360408301846186f4565b8281036020840152600481527f2e6173740000000000000000000000000000000000000000000000000000000060208201526040810191505092915050565b7f436f756c64206e6f742066696e642041535420696e206172746966616374200081526000825161916a81601f8501602087016186d0565b7f2e205365742060617374203d20747275656020696e20666f756e6472792e746f601f9390910192830152507f6d6c000000000000000000000000000000000000000000000000000000000000603f820152604101919050565b6040815260006191d760408301846186f4565b8281036020840152601181527f2e6173742e6162736f6c7574655061746800000000000000000000000000000060208201526040810191505092915050565b60408152600061922960408301846186f4565b8281036020840152600c81527f2e6173742e6c6963656e7365000000000000000000000000000000000000000060208201526040810191505092915050565b7f2e6d657461646174612e736f75726365732e5b270000000000000000000000008152600082516192a08160148501602087016186d0565b7f275d2e6b656363616b32353600000000000000000000000000000000000000006014939091019283015250602001919050565b6040815260006192e760408301856186f4565b828103602084015261458b81856186f4565b7f22000000000000000000000000000000000000000000000000000000000000008152600082516193318160018501602087016186d0565b7f22000000000000000000000000000000000000000000000000000000000000006001939091019283015250600201919050565b600082516193778184602087016186d0565b7f2f6275696c642d696e666f000000000000000000000000000000000000000000920191825250600b01919050565b7f436f756c64206e6f742066696e64206275696c642d696e666f2066696c65207781527f697468206d61746368696e6720736f7572636520636f6465206861736820666f60208201527f7220636f6e74726163742000000000000000000000000000000000000000000060408201526000825161942a81604b8501602087016186d0565b91909101604b0192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600060ff821660ff810361947c5761947c619437565b60010192915050565b7f406f70656e7a657070656c696e2f646566656e6465722d6465706c6f792d636c81527f69656e742d636c694000000000000000000000000000000000000000000000006020820152600082516194e38160298501602087016186d0565b9190910160290192915050565b60408152601660408201527f4f50454e5a455050454c494e5f424153485f5041544800000000000000000000606082015260806020820152600061458f60808301846186f4565b60006020828403121561954957600080fd5b815167ffffffffffffffff81111561956057600080fd5b82016060818503121561957257600080fd5b61957a618a7b565b81518060030b811461958b57600080fd5b8152602082015167ffffffffffffffff8111156195a757600080fd5b6195b386828501618b14565b602083015250604082015167ffffffffffffffff8111156195d357600080fd5b6195df86828501618b14565b604083015250949350505050565b7f4661696c656420746f2072756e206261736820636f6d6d616e6420776974682081527f220000000000000000000000000000000000000000000000000000000000000060208201526000825161964b8160218501602087016186d0565b7f222e20496620796f7520617265207573696e672057696e646f77732c2073657460219390910192830152507f20746865204f50454e5a455050454c494e5f424153485f5041544820656e766960418201527f726f6e6d656e74207661726961626c6520746f207468652066756c6c7920717560618201527f616c69666965642070617468206f66207468652062617368206578656375746160818201527f626c652e20466f72206578616d706c652c20696620796f75206172652075736960a18201527f6e672047697420666f722057696e646f77732c206164642074686520666f6c6c60c18201527f6f77696e67206c696e6520696e20746865202e656e762066696c65206f66207960e18201527f6f75722070726f6a65637420287573696e6720666f727761726420736c6173686101018201527f6573293a0a4f50454e5a455050454c494e5f424153485f504154483d22433a2f6101218201527f50726f6772616d2046696c65732f4769742f62696e2f6261736822000000000061014182015261015c01919050565b7f4661696c656420746f2066696e64206c696e652077697468207072656669782081527f27000000000000000000000000000000000000000000000000000000000000006020820152600083516198378160218501602088016186d0565b7f2720696e206f75747075743a2000000000000000000000000000000000000000602191840191820152835161987481602e8401602088016186d0565b01602e01949350505050565b7f4661696c656420746f2072756e2075706772616465207361666574792076616c81527f69646174696f6e3a2000000000000000000000000000000000000000000000006020820152600082516194e38160298501602087016186d0565b7f55706772616465207361666574792076616c69646174696f6e206661696c656481527f3a0a00000000000000000000000000000000000000000000000000000000000060208201526000825161993c8160228501602087016186d0565b9190910160220192915050565b8181038181111561449657614496619437565b7f436f6e7472616374206e616d652000000000000000000000000000000000000081526000825161999481600e8501602087016186d0565b7f206d75737420626520696e2074686520666f726d6174204d79436f6e74726163600e9390910192830152507f742e736f6c3a4d79436f6e7472616374206f72204d79436f6e74726163742e73602e8201527f6f6c206f72206f75742f4d79436f6e74726163742e736f6c2f4d79436f6e7472604e8201527f6163742e6a736f6e000000000000000000000000000000000000000000000000606e820152607601919050565b8082018082111561449657614496619437565b7f53504458206c6963656e7365206964656e746966696572200000000000000000815260008351619a858160188501602088016186d0565b7f20696e20000000000000000000000000000000000000000000000000000000006018918401918201528351619ac281601c8401602088016186d0565b7f20646f6573206e6f74206c6f6f6b206c696b65206120737570706f7274656420601c92909101918201527f6c6963656e736520666f7220626c6f636b206578706c6f726572207665726966603c8201527f69636174696f6e2e205573652074686520606c6963656e73655479706560206f605c8201527f7074696f6e20746f20737065636966792061206c6963656e736520747970652c607c8201527f206f7220736574207468652060736b69704c6963656e73655479706560206f70609c8201527f74696f6e20746f2060747275656020746f20736b69702e00000000000000000060bc82015260d301949350505050565b60008251619bc88184602087016186d0565b7f2000000000000000000000000000000000000000000000000000000000000000920191825250600101919050565b7f406f70656e7a657070656c696e2f75706772616465732d636f72654000000000815260008251619c2f81601c8501602087016186d0565b91909101601c0192915050565b60006000198203619c4f57619c4f619437565b5060010190565b808202811582820484141761449657614496619437565b6001815b6001841115619ca857808504811115619c8c57619c8c619437565b6001841615619c9a57908102905b60019390931c928002619c71565b935093915050565b600082619cbf57506001614496565b81619ccc57506000614496565b8160018114619ce25760028114619cec57619d08565b6001915050614496565b60ff841115619cfd57619cfd619437565b50506001821b614496565b5060208310610133831016604e8410600b8410161715619d2b575081810a614496565b619d386000198484619c6d565b8060001904821115619d4c57619d4c619437565b029392505050565b600061458f8383619cb0565b600081619d6f57619d6f619437565b506000190190565b60008351619d898184602088016186d0565b7f3a000000000000000000000000000000000000000000000000000000000000009083019081528351619dc38160018401602088016186d0565b01600101949350505050565b818103600083128015838313168383128216171561784f5761784f61943756fe608060405234801561001057600080fd5b50604051610c9f380380610c9f83398101604081905261002f9161010d565b8181600361003d83826101ff565b50600461004a82826101ff565b50505050506102bd565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261007b57600080fd5b81516001600160401b0381111561009457610094610054565b604051601f8201601f19908116603f011681016001600160401b03811182821017156100c2576100c2610054565b6040528181528382016020018510156100da57600080fd5b60005b828110156100f9576020818601810151838301820152016100dd565b506000918101602001919091529392505050565b6000806040838503121561012057600080fd5b82516001600160401b0381111561013657600080fd5b6101428582860161006a565b602085015190935090506001600160401b0381111561016057600080fd5b61016c8582860161006a565b9150509250929050565b600181811c9082168061018a57607f821691505b6020821081036101aa57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156101fa57806000526020600020601f840160051c810160208510156101d75750805b601f840160051c820191505b818110156101f757600081556001016101e3565b50505b505050565b81516001600160401b0381111561021857610218610054565b61022c816102268454610176565b846101b0565b6020601f82116001811461026057600083156102485750848201515b600019600385901b1c1916600184901b1784556101f7565b600084815260208120601f198516915b828110156102905787850151825560209485019460019092019101610270565b50848210156102ae5786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b6109d3806102cc6000396000f3fe608060405234801561001057600080fd5b50600436106100be5760003560e01c806340c10f191161007657806395d89b411161005b57806395d89b4114610183578063a9059cbb1461018b578063dd62ed3e1461019e57600080fd5b806340c10f191461013857806370a082311461014d57600080fd5b806318160ddd116100a757806318160ddd1461010457806323b872dd14610116578063313ce5671461012957600080fd5b806306fdde03146100c3578063095ea7b3146100e1575b600080fd5b6100cb6101e4565b6040516100d891906107bf565b60405180910390f35b6100f46100ef366004610854565b610276565b60405190151581526020016100d8565b6002545b6040519081526020016100d8565b6100f461012436600461087e565b610290565b604051601281526020016100d8565b61014b610146366004610854565b6102b4565b005b61010861015b3660046108bb565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6100cb6102c2565b6100f4610199366004610854565b6102d1565b6101086101ac3660046108dd565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6060600380546101f390610910565b80601f016020809104026020016040519081016040528092919081815260200182805461021f90610910565b801561026c5780601f106102415761010080835404028352916020019161026c565b820191906000526020600020905b81548152906001019060200180831161024f57829003601f168201915b5050505050905090565b6000336102848185856102df565b60019150505b92915050565b60003361029e8582856102f1565b6102a98585856103c5565b506001949350505050565b6102be8282610470565b5050565b6060600480546101f390610910565b6000336102848185856103c5565b6102ec83838360016104cc565b505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146103bf57818110156103b0576040517ffb8f41b200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416600482015260248101829052604481018390526064015b60405180910390fd5b6103bf848484840360006104cc565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8316610415576040517f96c6fd1e000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff8216610465576040517fec442f05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b6102ec838383610614565b73ffffffffffffffffffffffffffffffffffffffff82166104c0576040517fec442f05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b6102be60008383610614565b73ffffffffffffffffffffffffffffffffffffffff841661051c576040517fe602df05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff831661056c576040517f94280d62000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260016020908152604080832093871683529290522082905580156103bf578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161060691815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff831661064c5780600260008282546106419190610963565b909155506106fe9050565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260208190526040902054818110156106d2576040517fe450d38c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8516600482015260248101829052604481018390526064016103a7565b73ffffffffffffffffffffffffffffffffffffffff841660009081526020819052604090209082900390555b73ffffffffffffffffffffffffffffffffffffffff821661072757600280548290039055610753565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090208054820190555b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516107b291815260200190565b60405180910390a3505050565b602081526000825180602084015260005b818110156107ed57602081860181015160408684010152016107d0565b5060006040828501015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011684010191505092915050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461084f57600080fd5b919050565b6000806040838503121561086757600080fd5b6108708361082b565b946020939093013593505050565b60008060006060848603121561089357600080fd5b61089c8461082b565b92506108aa6020850161082b565b929592945050506040919091013590565b6000602082840312156108cd57600080fd5b6108d68261082b565b9392505050565b600080604083850312156108f057600080fd5b6108f98361082b565b91506109076020840161082b565b90509250929050565b600181811c9082168061092457607f821691505b60208210810361095d577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b8082018082111561028a577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea26469706673582212207e804ca539d49155d2b6bc19268ce22f9f857027c75247d69fb0d56a089c93d464736f6c634300081a0033608060405234801561001057600080fd5b506040516112a63803806112a683398101604081905261002f91610110565b604051806040016040528060048152602001635a65746160e01b815250604051806040016040528060048152602001635a45544160e01b815250816003908161007891906101e2565b50600461008582826101e2565b5050506001600160a01b03821615806100a557506001600160a01b038116155b156100c35760405163e6c4247b60e01b815260040160405180910390fd5b600680546001600160a01b039384166001600160a01b031991821617909155600780549290931691161790556102a0565b80516001600160a01b038116811461010b57600080fd5b919050565b6000806040838503121561012357600080fd5b61012c836100f4565b915061013a602084016100f4565b90509250929050565b634e487b7160e01b600052604160045260246000fd5b600181811c9082168061016d57607f821691505b60208210810361018d57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156101dd57806000526020600020601f840160051c810160208510156101ba5750805b601f840160051c820191505b818110156101da57600081556001016101c6565b50505b505050565b81516001600160401b038111156101fb576101fb610143565b61020f816102098454610159565b84610193565b6020601f821160018114610243576000831561022b5750848201515b600019600385901b1c1916600184901b1784556101da565b600084815260208120601f198516915b828110156102735787850151825560209485019460019092019101610253565b50848210156102915786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b610ff7806102af6000396000f3fe608060405234801561001057600080fd5b506004361061011b5760003560e01c806342966c68116100b257806379cc679011610081578063a9059cbb11610066578063a9059cbb1461028e578063bff9662a146102a1578063dd62ed3e146102c157600080fd5b806379cc67901461027357806395d89b411461028657600080fd5b806342966c68146102025780635b1125911461021557806370a0823114610235578063779e3b631461026b57600080fd5b80631e458bee116100ee5780631e458bee1461018857806323b872dd1461019b578063313ce567146101ae578063328a01d0146101bd57600080fd5b806306fdde0314610120578063095ea7b31461013e57806315d57fd41461016157806318160ddd14610176575b600080fd5b610128610307565b6040516101359190610d97565b60405180910390f35b61015161014c366004610e2c565b610399565b6040519015158152602001610135565b61017461016f366004610e56565b6103b3565b005b6002545b604051908152602001610135565b610174610196366004610e89565b61057e565b6101516101a9366004610ebc565b610631565b60405160128152602001610135565b6007546101dd9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610135565b610174610210366004610ef9565b610655565b6006546101dd9073ffffffffffffffffffffffffffffffffffffffff1681565b61017a610243366004610f12565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b610174610662565b610174610281366004610e2c565b610786565b610128610837565b61015161029c366004610e2c565b610846565b6005546101dd9073ffffffffffffffffffffffffffffffffffffffff1681565b61017a6102cf366004610e56565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b60606003805461031690610f34565b80601f016020809104026020016040519081016040528092919081815260200182805461034290610f34565b801561038f5780601f106103645761010080835404028352916020019161038f565b820191906000526020600020905b81548152906001019060200180831161037257829003601f168201915b5050505050905090565b6000336103a7818585610854565b60019150505b92915050565b60075473ffffffffffffffffffffffffffffffffffffffff1633148015906103f3575060065473ffffffffffffffffffffffffffffffffffffffff163314155b15610431576040517fcdfcef970000000000000000000000000000000000000000000000000000000081523360048201526024015b60405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff82161580610468575073ffffffffffffffffffffffffffffffffffffffff8116155b1561049f576040517fe6c4247b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6006805473ffffffffffffffffffffffffffffffffffffffff8481167fffffffffffffffffffffffff0000000000000000000000000000000000000000928316811790935560058054918516919092161790556040805133815260208101929092527fe79965b5c67dcfb2cf5fe152715e4a7256cee62a3d5dd8484fd8a8539eb8beff910160405180910390a16040805133815273ffffffffffffffffffffffffffffffffffffffff831660208201527f1b9352454524a57a51f24f67dc66d898f616922cd1f7a12d73570ece12b1975c910160405180910390a15050565b60055473ffffffffffffffffffffffffffffffffffffffff1633146105d1576040517f3fe32fba000000000000000000000000000000000000000000000000000000008152336004820152602401610428565b6105db8383610866565b808373ffffffffffffffffffffffffffffffffffffffff167fc263b302aec62d29105026245f19e16f8e0137066ccd4a8bd941f716bd4096bb8460405161062491815260200190565b60405180910390a3505050565b60003361063f8582856108c6565b61064a858585610995565b506001949350505050565b61065f3382610a40565b50565b60075473ffffffffffffffffffffffffffffffffffffffff1633146106b5576040517fe700765e000000000000000000000000000000000000000000000000000000008152336004820152602401610428565b60065473ffffffffffffffffffffffffffffffffffffffff16610704576040517fe6c4247b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600654600780547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff90921691821790556040805133815260208101929092527f5104c9abdc7d111c2aeb4ce890ac70274a4be2ee83f46a62551be5e6ebc82dd0910160405180910390a1565b60055473ffffffffffffffffffffffffffffffffffffffff1633146107d9576040517f3fe32fba000000000000000000000000000000000000000000000000000000008152336004820152602401610428565b6107e38282610a9c565b8173ffffffffffffffffffffffffffffffffffffffff167f919f7e2092ffcc9d09f599be18d8152860b0c054df788a33bc549cdd9d0f15b18260405161082b91815260200190565b60405180910390a25050565b60606004805461031690610f34565b6000336103a7818585610995565b6108618383836001610ab1565b505050565b73ffffffffffffffffffffffffffffffffffffffff82166108b6576040517fec442f0500000000000000000000000000000000000000000000000000000000815260006004820152602401610428565b6108c260008383610bf9565b5050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811461098f5781811015610980576040517ffb8f41b200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff841660048201526024810182905260448101839052606401610428565b61098f84848484036000610ab1565b50505050565b73ffffffffffffffffffffffffffffffffffffffff83166109e5576040517f96c6fd1e00000000000000000000000000000000000000000000000000000000815260006004820152602401610428565b73ffffffffffffffffffffffffffffffffffffffff8216610a35576040517fec442f0500000000000000000000000000000000000000000000000000000000815260006004820152602401610428565b610861838383610bf9565b73ffffffffffffffffffffffffffffffffffffffff8216610a90576040517f96c6fd1e00000000000000000000000000000000000000000000000000000000815260006004820152602401610428565b6108c282600083610bf9565b610aa78233836108c6565b6108c28282610a40565b73ffffffffffffffffffffffffffffffffffffffff8416610b01576040517fe602df0500000000000000000000000000000000000000000000000000000000815260006004820152602401610428565b73ffffffffffffffffffffffffffffffffffffffff8316610b51576040517f94280d6200000000000000000000000000000000000000000000000000000000815260006004820152602401610428565b73ffffffffffffffffffffffffffffffffffffffff8085166000908152600160209081526040808320938716835292905220829055801561098f578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051610beb91815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff8316610c31578060026000828254610c269190610f87565b90915550610ce39050565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205481811015610cb7576040517fe450d38c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff851660048201526024810182905260448101839052606401610428565b73ffffffffffffffffffffffffffffffffffffffff841660009081526020819052604090209082900390555b73ffffffffffffffffffffffffffffffffffffffff8216610d0c57600280548290039055610d38565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090208054820190555b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161062491815260200190565b602081526000825180602084015260005b81811015610dc55760208186018101516040868401015201610da8565b5060006040828501015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011684010191505092915050565b803573ffffffffffffffffffffffffffffffffffffffff81168114610e2757600080fd5b919050565b60008060408385031215610e3f57600080fd5b610e4883610e03565b946020939093013593505050565b60008060408385031215610e6957600080fd5b610e7283610e03565b9150610e8060208401610e03565b90509250929050565b600080600060608486031215610e9e57600080fd5b610ea784610e03565b95602085013595506040909401359392505050565b600080600060608486031215610ed157600080fd5b610eda84610e03565b9250610ee860208501610e03565b929592945050506040919091013590565b600060208284031215610f0b57600080fd5b5035919050565b600060208284031215610f2457600080fd5b610f2d82610e03565b9392505050565b600181811c90821680610f4857607f821691505b602082108103610f81577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b808201808211156103ad577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea2646970667358221220085f01204b33dc17013c78c74fbca32a3da2c0b384ce7c8878c889551af28c6164736f6c634300081a003360a060405234801561001057600080fd5b5060405161140b38038061140b83398101604081905261002f916101b3565b60016000556002805460ff191690556001600160a01b038316158061005b57506001600160a01b038216155b8061006d57506001600160a01b038116155b1561008b5760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b0383166080526100a3600082610102565b506100ce7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a82610102565b506100f97f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e483610102565b505050506101f6565b60008281526001602090815260408083206001600160a01b038516845290915281205460ff1661018d5760008381526001602081815260408084206001600160a01b0387168086529252808420805460ff19169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a4506001610191565b5060005b92915050565b80516001600160a01b03811681146101ae57600080fd5b919050565b6000806000606084860312156101c857600080fd5b6101d184610197565b92506101df60208501610197565b91506101ed60408501610197565b90509250925092565b6080516111de61022d60003960008181610132015281816103c5015281816104270152818161065801526106ba01526111de6000f3fe608060405234801561001057600080fd5b50600436106101005760003560e01c80638456cb5911610097578063c8a0236211610066578063c8a0236214610276578063d547741f14610289578063d9caed121461029c578063e63ab1e9146102af57600080fd5b80638456cb59146101f957806385f438c11461020157806391d1485414610228578063a217fddf1461026e57600080fd5b80632f2ff15d116100d35780632f2ff15d146101c057806336568abe146101d35780633f4ba83a146101e65780635c975abb146101ee57600080fd5b806301ffc9a714610105578063116191b61461012d57806321fc65f214610179578063248a9ca31461018e575b600080fd5b610118610113366004610f04565b6102d6565b60405190151581526020015b60405180910390f35b6101547f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610124565b61018c610187366004610f6f565b61036f565b005b6101b261019c36600461100c565b6000908152600160208190526040909120015490565b604051908152602001610124565b61018c6101ce366004611025565b610511565b61018c6101e1366004611025565b61053d565b61018c61059b565b60025460ff16610118565b61018c6105d0565b6101b27f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b610118610236366004611025565b600091825260016020908152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b6101b2600081565b61018c610284366004610f6f565b610602565b61018c610297366004611025565b61078a565b61018c6102aa366004611051565b6107b0565b6101b27f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061036957507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b61037761087d565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e46103a1816108c0565b6103a96108ca565b6103ea73ffffffffffffffffffffffffffffffffffffffff87167f000000000000000000000000000000000000000000000000000000000000000086610909565b6040517f5131ab5900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690635131ab599061046490899089908990899089906004016110d7565b600060405180830381600087803b15801561047e57600080fd5b505af1158015610492573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167f85b5be9cf454e05e0bddf49315178102227c312078eefa3c00294fb4d912ae4e8686866040516104f793929190611134565b60405180910390a35061050a6001600055565b5050505050565b6000828152600160208190526040909120015461052d816108c0565b6105378383610996565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8116331461058c576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6105968282610a61565b505050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a6105c5816108c0565b6105cd610b20565b50565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a6105fa816108c0565b6105cd610b9d565b61060a61087d565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e4610634816108c0565b61063c6108ca565b61067d73ffffffffffffffffffffffffffffffffffffffff87167f000000000000000000000000000000000000000000000000000000000000000086610909565b6040517fb8969bd400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063b8969bd4906106f790899089908990899089906004016110d7565b600060405180830381600087803b15801561071157600080fd5b505af1158015610725573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fb9d4efa96044e5f5e03e696fa9ae2ff66911cc27e8a637c3627c75bc5b2241c88686866040516104f793929190611134565b600082815260016020819052604090912001546107a6816108c0565b6105378383610a61565b6107b861087d565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e46107e2816108c0565b6107ea6108ca565b61080b73ffffffffffffffffffffffffffffffffffffffff85168484610909565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f9b1bfa7fa9ee420a16e124f794c35ac9f90472acc99140eb2f6447c714cad8eb8460405161086a91815260200190565b60405180910390a3506105966001600055565b6002600054036108b9576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b6105cd8133610bf8565b60025460ff1615610907576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6040805173ffffffffffffffffffffffffffffffffffffffff8416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb00000000000000000000000000000000000000000000000000000000179052610596908490610c89565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff16610a5957600083815260016020818152604080842073ffffffffffffffffffffffffffffffffffffffff8716808652925280842080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a4506001610369565b506000610369565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff1615610a5957600083815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8616808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a4506001610369565b610b28610d1f565b600280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b610ba56108ca565b600280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258610b733390565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16610c85576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82166004820152602481018390526044015b60405180910390fd5b5050565b6000610cab73ffffffffffffffffffffffffffffffffffffffff841683610d5b565b90508051600014158015610cd0575080806020019051810190610cce9190611157565b155b15610596576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84166004820152602401610c7c565b60025460ff16610907576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6060610d6983836000610d70565b9392505050565b606081471015610dae576040517fcd786059000000000000000000000000000000000000000000000000000000008152306004820152602401610c7c565b6000808573ffffffffffffffffffffffffffffffffffffffff168486604051610dd79190611179565b60006040518083038185875af1925050503d8060008114610e14576040519150601f19603f3d011682016040523d82523d6000602084013e610e19565b606091505b5091509150610e29868383610e33565b9695505050505050565b606082610e4857610e4382610ec2565b610d69565b8151158015610e6c575073ffffffffffffffffffffffffffffffffffffffff84163b155b15610ebb576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85166004820152602401610c7c565b5080610d69565b805115610ed25780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060208284031215610f1657600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610d6957600080fd5b803573ffffffffffffffffffffffffffffffffffffffff81168114610f6a57600080fd5b919050565b600080600080600060808688031215610f8757600080fd5b610f9086610f46565b9450610f9e60208701610f46565b935060408601359250606086013567ffffffffffffffff811115610fc157600080fd5b8601601f81018813610fd257600080fd5b803567ffffffffffffffff811115610fe957600080fd5b886020828401011115610ffb57600080fd5b959894975092955050506020019190565b60006020828403121561101e57600080fd5b5035919050565b6000806040838503121561103857600080fd5b8235915061104860208401610f46565b90509250929050565b60008060006060848603121561106657600080fd5b61106f84610f46565b925061107d60208501610f46565b929592945050506040919091013590565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff8616815273ffffffffffffffffffffffffffffffffffffffff8516602082015283604082015260806060820152600061112960808301848661108e565b979650505050505050565b83815260406020820152600061114e60408301848661108e565b95945050505050565b60006020828403121561116957600080fd5b81518015158114610d6957600080fd5b6000825160005b8181101561119a5760208186018101518583015201611180565b50600092019182525091905056fea264697066735822122069d5c5c3cb2752c876b6a2138d8d9b66bac6bd1b48a1fe98417eea81faf02a3e64736f6c634300081a003360c060405260001960035534801561001657600080fd5b5060405161155a38038061155a83398101604081905261003591610220565b60016000819055805460ff19169055838383836001600160a01b038416158061006557506001600160a01b038316155b8061007757506001600160a01b038216155b8061008957506001600160a01b038116155b156100a75760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b03808516608052831660a0526100c5600082610154565b506100f07f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e483610154565b5061011b7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb83610154565b506101467f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a82610154565b505050505050505050610274565b60008281526002602090815260408083206001600160a01b038516845290915281205460ff166101fa5760008381526002602090815260408083206001600160a01b03861684529091529020805460ff191660011790556101b23390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45060016101fe565b5060005b92915050565b80516001600160a01b038116811461021b57600080fd5b919050565b6000806000806080858703121561023657600080fd5b61023f85610204565b935061024d60208601610204565b925061025b60408601610204565b915061026960608601610204565b905092959194509250565b60805160a0516112826102d86000396000818161021d01528181610531015281816108240152818161097b01528181610ad00152610bf20152600081816101d1015281816104a1015281816105040152818161079401526107f701526112826000f3fe608060405234801561001057600080fd5b50600436106101775760003560e01c80635e3e9fef116100d857806391d148541161008c578063d547741f11610066578063d547741f14610386578063d5abeb0114610399578063e63ab1e9146103a257600080fd5b806391d1485414610311578063a217fddf14610357578063a783c7891461035f57600080fd5b8063743e0c9b116100bd578063743e0c9b146102cf5780638456cb59146102e257806385f438c1146102ea57600080fd5b80635e3e9fef146102a95780636f8b44b0146102bc57600080fd5b8063248a9ca31161012f57806336568abe1161011457806336568abe146102835780633f4ba83a146102965780635c975abb1461029e57600080fd5b8063248a9ca31461023f5780632f2ff15d1461027057600080fd5b8063106e629011610160578063106e6290146101b9578063116191b6146101cc57806321e093b11461021857600080fd5b806301ffc9a71461017c57806302d5c899146101a4575b600080fd5b61018f61018a366004610fb4565b6103c9565b60405190151581526020015b60405180910390f35b6101b76101b2366004611026565b610462565b005b6101b76101c73660046110b8565b6105f7565b6101f37f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161019b565b6101f37f000000000000000000000000000000000000000000000000000000000000000081565b61026261024d3660046110eb565b60009081526002602052604090206001015490565b60405190815260200161019b565b6101b761027e366004611104565b61069c565b6101b7610291366004611104565b6106c7565b6101b7610720565b60015460ff1661018f565b6101b76102b7366004611026565b610755565b6101b76102ca3660046110eb565b6108d0565b6101b76102dd3660046110eb565b61093e565b6101b76109e8565b6102627f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b61018f61031f366004611104565b600091825260026020908152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b610262600081565b6102627f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb81565b6101b7610394366004611104565b610a1a565b61026260035481565b6102627f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061045c57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b61046a610a3f565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461049481610a82565b61049c610a8c565b6104c77f00000000000000000000000000000000000000000000000000000000000000008684610acb565b6040517fb8969bd400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063b8969bd490610561907f0000000000000000000000000000000000000000000000000000000000000000908a908a908a908a90600401611179565b600060405180830381600087803b15801561057b57600080fd5b505af115801561058f573d6000803e3d6000fd5b505050508573ffffffffffffffffffffffffffffffffffffffff167fba96f26bdda53eb8c8ba39045dfb4ff39753fbc7a6edcf250a88e75e78d102fe8686866040516105dd939291906111d6565b60405180910390a2506105f06001600055565b5050505050565b6105ff610a3f565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461062981610a82565b610631610a8c565b61063c848484610acb565b8373ffffffffffffffffffffffffffffffffffffffff167f884edad9ce6fa2440d8a54cc123490eb96d2768479d49ff9c7366125a94243648460405161068491815260200190565b60405180910390a2506106976001600055565b505050565b6000828152600260205260409020600101546106b781610a82565b6106c18383610c53565b50505050565b73ffffffffffffffffffffffffffffffffffffffff81163314610716576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6106978282610d53565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61074a81610a82565b610752610e12565b50565b61075d610a3f565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461078781610a82565b61078f610a8c565b6107ba7f00000000000000000000000000000000000000000000000000000000000000008684610acb565b6040517f5131ab5900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690635131ab5990610854907f0000000000000000000000000000000000000000000000000000000000000000908a908a908a908a90600401611179565b600060405180830381600087803b15801561086e57600080fd5b505af1158015610882573d6000803e3d6000fd5b505050508573ffffffffffffffffffffffffffffffffffffffff167f7772f56296d3a5202974a45c61c9188d844ab4d6eeb18c851e4b8d5384ca6ced8686866040516105dd939291906111d6565b7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb6108fa81610a82565b610902610a8c565b60038290556040518281527f7810bd47de260c3e9ee10061cf438099dd12256c79485f12f94dbccc981e806c9060200160405180910390a15050565b610946610a8c565b6040517f79cc6790000000000000000000000000000000000000000000000000000000008152336004820152602481018290527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16906379cc679090604401600060405180830381600087803b1580156109d457600080fd5b505af11580156105f0573d6000803e3d6000fd5b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610a1281610a82565b610752610e8f565b600082815260026020526040902060010154610a3581610a82565b6106c18383610d53565b600260005403610a7b576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b6107528133610ee8565b60015460ff1615610ac9576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6003547f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b39573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b5d91906111f9565b610b679084611212565b1115610b9f576040517fc30436e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f1e458bee00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff848116600483015260248201849052604482018390527f00000000000000000000000000000000000000000000000000000000000000001690631e458bee90606401600060405180830381600087803b158015610c3657600080fd5b505af1158015610c4a573d6000803e3d6000fd5b50505050505050565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff16610d4b57600083815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff86168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055610ce93390565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a450600161045c565b50600061045c565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff1615610d4b57600083815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8616808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a450600161045c565b610e1a610f78565b600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b610e97610a8c565b600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016811790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25833610e65565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16610f74576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff821660048201526024810183905260440160405180910390fd5b5050565b60015460ff16610ac9576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060208284031215610fc657600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610ff657600080fd5b9392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461102157600080fd5b919050565b60008060008060006080868803121561103e57600080fd5b61104786610ffd565b945060208601359350604086013567ffffffffffffffff81111561106a57600080fd5b8601601f8101881361107b57600080fd5b803567ffffffffffffffff81111561109257600080fd5b8860208284010111156110a457600080fd5b959894975060200195606001359392505050565b6000806000606084860312156110cd57600080fd5b6110d684610ffd565b95602085013595506040909401359392505050565b6000602082840312156110fd57600080fd5b5035919050565b6000806040838503121561111757600080fd5b8235915061112760208401610ffd565b90509250929050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff8616815273ffffffffffffffffffffffffffffffffffffffff851660208201528360408201526080606082015260006111cb608083018486611130565b979650505050505050565b8381526040602082015260006111f0604083018486611130565b95945050505050565b60006020828403121561120b57600080fd5b5051919050565b8082018082111561045c577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea2646970667358221220f784eb6e1655c2988d3f762737188cfee07a61da1d5b8456cc4f4e55cb339cfb64736f6c634300081a00336080604052348015600f57600080fd5b506001600055610d3a806100246000396000f3fe6080604052600436106100635760003560e01c8063c513169111610040578063c5131691146100c1578063e04d4f97146100e1578063f05b6abf146100f457005b8063357fc5a21461006c5780636ed701691461008c5780638fcaa0b5146100a157005b3661006a57005b005b34801561007857600080fd5b5061006a6100873660046106c0565b610114565b34801561009857600080fd5b5061006a6101aa565b3480156100ad57600080fd5b5061006a6100bc3660046106fc565b6101df565b3480156100cd57600080fd5b5061006a6100dc3660046106c0565b61021e565b61006a6100ef366004610895565b6102f9565b34801561010057600080fd5b5061006a61010f366004610981565b61033d565b61011c610372565b61013e73ffffffffffffffffffffffffffffffffffffffff83163383866103b5565b604080513381526020810185905273ffffffffffffffffffffffffffffffffffffffff848116828401528316606082015290517f2b58128f24a9f59127cc5b5430d70542b22220f2d9adaa86e442b816ab98af609181900360800190a16101a56001600055565b505050565b6040513381527fbcaadb46b82a48af60b608f58959ae6b8310d1b0a0d094c2e9ec3208ed39f2a09060200160405180910390a1565b7f0d3f65f00e631663aa85c96330b5c7a83bb29af3630c0063776f985edc3037aa33838360405161021293929190610a6b565b60405180910390a15050565b610226610372565b6000610233600285610ad5565b90508060000361026f576040517f1f2a200500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61029173ffffffffffffffffffffffffffffffffffffffff84163384846103b5565b604080513381526020810183905273ffffffffffffffffffffffffffffffffffffffff858116828401528416606082015290517f2b58128f24a9f59127cc5b5430d70542b22220f2d9adaa86e442b816ab98af609181900360800190a1506101a56001600055565b7f1f1ff1f5fb41346850b2f5c04e6c767e2f1c8a525c5c0c5cdb60cdf3ca5f62fa3334858585604051610330959493929190610b7e565b60405180910390a1505050565b7f74a53cd528a921fca7dbdee62f86819051d3cc98f214951f4238e8843f20b146338484846040516103309493929190610c08565b6002600054036103ae576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b6040805173ffffffffffffffffffffffffffffffffffffffff85811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd0000000000000000000000000000000000000000000000000000000017905261044a908590610450565b50505050565b600061047273ffffffffffffffffffffffffffffffffffffffff8416836104eb565b905080516000141580156104975750808060200190518101906104959190610ccb565b155b156101a5576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff841660048201526024015b60405180910390fd5b60606104f983836000610500565b9392505050565b60608147101561053e576040517fcd7860590000000000000000000000000000000000000000000000000000000081523060048201526024016104e2565b6000808573ffffffffffffffffffffffffffffffffffffffff1684866040516105679190610ce8565b60006040518083038185875af1925050503d80600081146105a4576040519150601f19603f3d011682016040523d82523d6000602084013e6105a9565b606091505b50915091506105b98683836105c3565b9695505050505050565b6060826105d8576105d382610652565b6104f9565b81511580156105fc575073ffffffffffffffffffffffffffffffffffffffff84163b155b1561064b576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff851660048201526024016104e2565b50806104f9565b8051156106625780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50565b803573ffffffffffffffffffffffffffffffffffffffff811681146106bb57600080fd5b919050565b6000806000606084860312156106d557600080fd5b833592506106e560208501610697565b91506106f360408501610697565b90509250925092565b6000806020838503121561070f57600080fd5b823567ffffffffffffffff81111561072657600080fd5b8301601f8101851361073757600080fd5b803567ffffffffffffffff81111561074e57600080fd5b85602082840101111561076057600080fd5b6020919091019590945092505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156107e6576107e6610770565b604052919050565b600082601f8301126107ff57600080fd5b813567ffffffffffffffff81111561081957610819610770565b61084a60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8401160161079f565b81815284602083860101111561085f57600080fd5b816020850160208301376000918101602001919091529392505050565b801515811461069457600080fd5b80356106bb8161087c565b6000806000606084860312156108aa57600080fd5b833567ffffffffffffffff8111156108c157600080fd5b6108cd868287016107ee565b9350506020840135915060408401356108e58161087c565b809150509250925092565b600067ffffffffffffffff82111561090a5761090a610770565b5060051b60200190565b600082601f83011261092557600080fd5b8135610938610933826108f0565b61079f565b8082825260208201915060208360051b86010192508583111561095a57600080fd5b602085015b8381101561097757803583526020928301920161095f565b5095945050505050565b60008060006060848603121561099657600080fd5b833567ffffffffffffffff8111156109ad57600080fd5b8401601f810186136109be57600080fd5b80356109cc610933826108f0565b8082825260208201915060208360051b8501019250888311156109ee57600080fd5b602084015b83811015610a3057803567ffffffffffffffff811115610a1257600080fd5b610a218b6020838901016107ee565b845250602092830192016109f3565b509550505050602084013567ffffffffffffffff811115610a5057600080fd5b610a5c86828701610914565b9250506106f36040850161088a565b73ffffffffffffffffffffffffffffffffffffffff8416815260406020820152816040820152818360608301376000818301606090810191909152601f9092017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016010192915050565b600082610b0b577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60005b83811015610b2b578181015183820152602001610b13565b50506000910152565b60008151808452610b4c816020860160208601610b10565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b73ffffffffffffffffffffffffffffffffffffffff8616815284602082015260a060408201526000610bb360a0830186610b34565b6060830194909452509015156080909101529392505050565b600081518084526020840193506020830160005b82811015610bfe578151865260209586019590910190600101610be0565b5093949350505050565b60006080820173ffffffffffffffffffffffffffffffffffffffff871683526080602084015280865180835260a08501915060a08160051b86010192506020880160005b82811015610c9b577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60878603018452610c86858351610b34565b94506020938401939190910190600101610c4c565b505050508281036040840152610cb18186610bcc565b915050610cc2606083018415159052565b95945050505050565b600060208284031215610cdd57600080fd5b81516104f98161087c565b60008251610cfa818460208701610b10565b919091019291505056fea2646970667358221220556072e1abafc3c4063b8cce832228b4f309b93726aaa6a6dfab20cb880c6d1864736f6c634300081a0033a26469706673582212209fe5da56b15e0013a23c70bf5e12f14249c527039ae37dce465a1f47718ed53f64736f6c634300081a0033", + ABI: "[{\"type\":\"function\",\"name\":\"ASSET_HANDLER_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"DEFAULT_ADMIN_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"IS_TEST\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"PAUSER_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"TSS_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"WITHDRAWER_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeArtifacts\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedArtifacts_\",\"type\":\"string[]\",\"internalType\":\"string[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeContracts\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedContracts_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeSelectors\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedSelectors_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzSelector[]\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"selectors\",\"type\":\"bytes4[]\",\"internalType\":\"bytes4[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeSenders\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedSenders_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"failed\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"setUp\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"targetArtifactSelectors\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedArtifactSelectors_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzArtifactSelector[]\",\"components\":[{\"name\":\"artifact\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"selectors\",\"type\":\"bytes4[]\",\"internalType\":\"bytes4[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetArtifacts\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedArtifacts_\",\"type\":\"string[]\",\"internalType\":\"string[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetContracts\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedContracts_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetInterfaces\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedInterfaces_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzInterface[]\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"artifacts\",\"type\":\"string[]\",\"internalType\":\"string[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetSelectors\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedSelectors_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzSelector[]\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"selectors\",\"type\":\"bytes4[]\",\"internalType\":\"bytes4[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetSenders\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedSenders_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"testExecuteFailsIfDestinationIsZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testExecuteRevert\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testExecuteRevertFailsIfReceiverIsZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testExecuteRevertFailsIfSenderIsNotTSS\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testExecuteWithERC20FailsIfNotCustodyOrConnector\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testForwardCallToReceiveNoParams\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testForwardCallToReceiveNoParamsTogglePause\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testForwardCallToReceiveNonPayable\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testForwardCallToReceiveNonPayableFailsIfSenderIsNotTSS\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testForwardCallToReceivePayable\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testRevertWithERC20FailsIfNotCustodyOrConnector\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testSetConnectorFailsIfSenderIsNotAdmin\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testSetConnectorFailsIfSet\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testSetConnectorFailsIfZero\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testSetCustodyFailsIfSenderIsNotAdmin\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testSetCustodyFailsIfSet\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testSetCustodyFailsIfZero\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"event\",\"name\":\"Call\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"receiver\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Deposit\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"receiver\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"asset\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Executed\",\"inputs\":[{\"name\":\"destination\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ExecutedWithERC20\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedERC20\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"token\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"destination\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedNoParams\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedNonPayable\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"strs\",\"type\":\"string[]\",\"indexed\":false,\"internalType\":\"string[]\"},{\"name\":\"nums\",\"type\":\"uint256[]\",\"indexed\":false,\"internalType\":\"uint256[]\"},{\"name\":\"flag\",\"type\":\"bool\",\"indexed\":false,\"internalType\":\"bool\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedPayable\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"str\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"num\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"flag\",\"type\":\"bool\",\"indexed\":false,\"internalType\":\"bool\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedRevert\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Reverted\",\"inputs\":[{\"name\":\"destination\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RevertedWithERC20\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Unwhitelisted\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Whitelisted\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Withdraw\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"WithdrawAndCall\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"WithdrawAndRevert\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log\",\"inputs\":[{\"name\":\"\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_address\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_array\",\"inputs\":[{\"name\":\"val\",\"type\":\"uint256[]\",\"indexed\":false,\"internalType\":\"uint256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_array\",\"inputs\":[{\"name\":\"val\",\"type\":\"int256[]\",\"indexed\":false,\"internalType\":\"int256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_array\",\"inputs\":[{\"name\":\"val\",\"type\":\"address[]\",\"indexed\":false,\"internalType\":\"address[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_bytes\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_bytes32\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_int\",\"inputs\":[{\"name\":\"\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_address\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_array\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"uint256[]\",\"indexed\":false,\"internalType\":\"uint256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_array\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"int256[]\",\"indexed\":false,\"internalType\":\"int256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_array\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"address[]\",\"indexed\":false,\"internalType\":\"address[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_bytes\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_bytes32\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_decimal_int\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"},{\"name\":\"decimals\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_decimal_uint\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"decimals\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_int\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_string\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_uint\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_string\",\"inputs\":[{\"name\":\"\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_uint\",\"inputs\":[{\"name\":\"\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"logs\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"AccessControlUnauthorizedAccount\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"neededRole\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"type\":\"error\",\"name\":\"ApprovalFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ConnectorInitialized\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"CustodyInitialized\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"DepositFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"EnforcedPause\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ExecutionFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientERC20Amount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientETHAmount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NotWhitelistedInCustody\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZeroAddress\",\"inputs\":[]}]", + Bin: "0x6080604052600c8054600160ff199182168117909255601f80549091169091179055348015602c57600080fd5b5061f7208061003c6000396000f3fe608060405234801561001057600080fd5b50600436106102415760003560e01c8063a217fddf11610145578063cebad2a6116100bd578063e6afc7901161008c578063fa18c09b11610071578063fa18c09b1461042c578063fa7626d414610434578063fe7bdbb21461044157600080fd5b8063e6afc7901461041c578063f68bd1c01461042457600080fd5b8063cebad2a6146103dd578063dd51e82f146103e5578063e20c9f71146103ed578063e63ab1e9146103f557600080fd5b8063b124dbf511610114578063ba414fa6116100f9578063ba414fa6146103b5578063ccf20616146103cd578063ce5871e1146103d557600080fd5b8063b124dbf5146103a5578063b5508aa9146103ad57600080fd5b8063a217fddf14610366578063a56f7a4b1461036e578063a783c78914610376578063b0464fdc1461039d57600080fd5b806344671b94116101d85780637d7f772a116101a757806385226c811161018c57806385226c811461031557806385f438c11461032a578063916a17c61461035157600080fd5b80637d7f772a146103055780637ebf744f1461030d57600080fd5b806344671b94146102ab57806351010e49146102b35780635d62c860146102bb57806366d9a9a0146102f057600080fd5b80631ed7831c116102145780631ed7831c146102685780632ade3880146102865780633e5e3c231461029b5780633f7286f4146102a357600080fd5b806304b974f9146102465780630a9254e4146102505780631226c655146102585780631855c33714610260575b600080fd5b61024e610449565b005b61024e610656565b61024e610fb8565b61024e611129565b61027061129e565b60405161027d9190618684565b60405180910390f35b61028e611300565b60405161027d9190618720565b610270611442565b6102706114a2565b61024e611502565b61024e611881565b6102e27f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b981565b60405190815260200161027d565b6102f8611a5a565b60405161027d9190618886565b61024e611bdc565b61024e611f3f565b61031d6120b4565b60405161027d9190618980565b6102e27f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b610359612184565b60405161027d9190618993565b6102e2600081565b61024e61227f565b6102e27f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb81565b6103596123d1565b61024e6124cc565b61031d612770565b6103bd612840565b604051901515815260200161027d565b61024e612914565b61024e612a66565b61024e612bd7565b61024e612df8565b6102706135ed565b6102e27f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b61024e61364d565b61024e6138bb565b61024e613cb0565b601f546103bd9060ff1681565b61024e614008565b6040805160048082526024820183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f6ed7016900000000000000000000000000000000000000000000000000000000179052602854925163ca669fa760e01b81529192737109709ecfa91a80626ff3989d68f67f5b1dd12d9263ca669fa7926104f0926001600160a01b031691016001600160a01b0391909116815260200190565b600060405180830381600087803b15801561050a57600080fd5b505af115801561051e573d6000803e3d6000fd5b50506040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b1580156105a757600080fd5b505af11580156105bb573d6000803e3d6000fd5b50506020546040517f1cff79cd0000000000000000000000000000000000000000000000000000000081526001600160a01b039091169250631cff79cd915061060b906000908590600401618a2a565b6000604051808303816000875af115801561062a573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526106529190810190618b34565b5050565b602680547fffffffffffffffffffffffff00000000000000000000000000000000000000009081163017909155602780548216611234179055602880549091166156781790556040516106a89061858a565b60408082526004908201527f746573740000000000000000000000000000000000000000000000000000000060608201526080602082018190526003908201527f54544b000000000000000000000000000000000000000000000000000000000060a082015260c001604051809103906000f08015801561072d573d6000803e3d6000fd5b50602480547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03928316179055602854604051911690819061077690618597565b6001600160a01b03928316815291166020820152604001604051809103906000f0801580156107a9573d6000803e3d6000fd5b50602580547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03928316908117909155604080518082018252600e81527f4761746577617945564d2e736f6c000000000000000000000000000000000000602082015260285460265492519085166024820152604481019390935292166064820152610898919060840160408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fc0c53b8b0000000000000000000000000000000000000000000000000000000017905261447d565b601f80547fffffffffffffffffffffff0000000000000000000000000000000000000000ff166101006001600160a01b0393841681029190911791829055602080549190920483167fffffffffffffffffffffffff00000000000000000000000000000000000000009091168117909155602854602654604051929391821692911690610924906185a4565b6001600160a01b03938416815291831660208301529091166040820152606001604051809103906000f080158015610960573d6000803e3d6000fd5b50602280547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392831617905560205460255460285460265460405193851694928316939183169216906109bb906185b1565b6001600160a01b039485168152928416602084015290831660408301529091166060820152608001604051809103906000f0801580156109ff573d6000803e3d6000fd5b50602380547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392831617905560285460405163ca669fa760e01b815291166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015610a8457600080fd5b505af1158015610a98573d6000803e3d6000fd5b50506025546028546023546040517f15d57fd40000000000000000000000000000000000000000000000000000000081526001600160a01b0392831660048201529082166024820152911692506315d57fd49150604401600060405180830381600087803b158015610b0957600080fd5b505af1158015610b1d573d6000803e3d6000fd5b50505050604051610b2d906185be565b604051809103906000f080158015610b49573d6000803e3d6000fd5b50602180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039283161790556028546040517fc88a5e6d00000000000000000000000000000000000000000000000000000000815291166004820152670de0b6b3a76400006024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c88a5e6d90604401600060405180830381600087803b158015610bf557600080fd5b505af1158015610c09573d6000803e3d6000fd5b50506026546040517f06447d560000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506306447d569150602401600060405180830381600087803b158015610c7f57600080fd5b505af1158015610c93573d6000803e3d6000fd5b50506020546022546040517fae7a3a6f0000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201529116925063ae7a3a6f9150602401600060405180830381600087803b158015610cf957600080fd5b505af1158015610d0d573d6000803e3d6000fd5b50506020546023546040517f10188aef0000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152911692506310188aef9150602401600060405180830381600087803b158015610d7357600080fd5b505af1158015610d87573d6000803e3d6000fd5b505050507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b03166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610de957600080fd5b505af1158015610dfd573d6000803e3d6000fd5b5050602480546026546040517f40c10f190000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620f4240938101939093521692506340c10f199150604401600060405180830381600087803b158015610e6e57600080fd5b505af1158015610e82573d6000803e3d6000fd5b5050602480546022546040517fa9059cbb0000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201526207a1209381019390935216925063a9059cbb91506044016020604051808303816000875af1158015610ef8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f1c9190618b69565b506028546040517fc88a5e6d0000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152670de0b6b3a76400006024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c88a5e6d906044015b600060405180830381600087803b158015610f9e57600080fd5b505af1158015610fb2573d6000803e3d6000fd5b50505050565b6026546040517f06447d560000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906306447d5690602401600060405180830381600087803b15801561102a57600080fd5b505af115801561103e573d6000803e3d6000fd5b50506040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b1580156110c757600080fd5b505af11580156110db573d6000803e3d6000fd5b50506020546040517fae7a3a6f000000000000000000000000000000000000000000000000000000008152600060048201526001600160a01b03909116925063ae7a3a6f9150602401610f84565b6026546040517f06447d560000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906306447d5690602401600060405180830381600087803b15801561119b57600080fd5b505af11580156111af573d6000803e3d6000fd5b50506040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fb337f378000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e091506024015b600060405180830381600087803b15801561123957600080fd5b505af115801561124d573d6000803e3d6000fd5b50506020546022546040517fae7a3a6f0000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201529116925063ae7a3a6f9150602401610f84565b606060168054806020026020016040519081016040528092919081815260200182805480156112f657602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116112d8575b5050505050905090565b6060601e805480602002602001604051908101604052809291908181526020016000905b8282101561143957600084815260208082206040805180820182526002870290920180546001600160a01b03168352600181018054835181870281018701909452808452939591948681019491929084015b8282101561142257838290600052602060002001805461139590618b8b565b80601f01602080910402602001604051908101604052809291908181526020018280546113c190618b8b565b801561140e5780601f106113e35761010080835404028352916020019161140e565b820191906000526020600020905b8154815290600101906020018083116113f157829003601f168201915b505050505081526020019060010190611376565b505050508152505081526020019060010190611324565b50505050905090565b606060188054806020026020016040519081016040528092919081815260200182805480156112f6576020028201919060005260206000209081546001600160a01b031681526001909101906020018083116112d8575050505050905090565b606060178054806020026020016040519081016040528092919081815260200182805480156112f6576020028201919060005260206000209081546001600160a01b031681526001909101906020018083116112d8575050505050905090565b6040805160048082526024820183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f6ed701690000000000000000000000000000000000000000000000000000000017905260215492517ff30c7ba30000000000000000000000000000000000000000000000000000000081529192737109709ecfa91a80626ff3989d68f67f5b1dd12d9263f30c7ba3926115b8926001600160a01b031691600091879101618bd8565b600060405180830381600087803b1580156115d257600080fd5b505af11580156115e6573d6000803e3d6000fd5b50506021546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b15801561167857600080fd5b505af115801561168c573d6000803e3d6000fd5b5050602080546040516001600160a01b0390911681527fbcaadb46b82a48af60b608f58959ae6b8310d1b0a0d094c2e9ec3208ed39f2a0935001905060405180910390a16020546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b15801561175e57600080fd5b505af1158015611772573d6000803e3d6000fd5b50506021546040516001600160a01b0390911692507fcaf938de11c367272220bfd1d2baa99ca46665e7bc4d85f00adb51b90fe1fa9f91506117b8906000908590618c00565b60405180910390a260285460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561181957600080fd5b505af115801561182d573d6000803e3d6000fd5b50506020546021546040517f1cff79cd0000000000000000000000000000000000000000000000000000000081526001600160a01b039283169450631cff79cd935061060b92909116908590600401618a2a565b6040517f68656c6c6f0000000000000000000000000000000000000000000000000000006020820152670de0b6b3a76400009060009060250160408051808303601f190181529082905260285463ca669fa760e01b83526001600160a01b031660048301529150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561192157600080fd5b505af1158015611935573d6000803e3d6000fd5b50506040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b1580156119be57600080fd5b505af11580156119d2573d6000803e3d6000fd5b50506020546040517f35c018db0000000000000000000000000000000000000000000000000000000081526001600160a01b0390911692506335c018db91508490611a24906000908690600401618a2a565b6000604051808303818588803b158015611a3d57600080fd5b505af1158015611a51573d6000803e3d6000fd5b50505050505050565b6060601b805480602002602001604051908101604052809291908181526020016000905b828210156114395783829060005260206000209060020201604051806040016040529081600082018054611ab190618b8b565b80601f0160208091040260200160405190810160405280929190818152602001828054611add90618b8b565b8015611b2a5780601f10611aff57610100808354040283529160200191611b2a565b820191906000526020600020905b815481529060010190602001808311611b0d57829003601f168201915b5050505050815260200160018201805480602002602001604051908101604052809291908181526020018280548015611bc457602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019060040190602082600301049283019260010382029150808411611b715790505b50505050508152505081526020019060010190611a7e565b604080516001808252818301909252600091816020015b6060815260200190600190039081611bf35790505090506040518060400160405280600f81526020017f48656c6c6f2c20466f756e64727921000000000000000000000000000000000081525081600081518110611c5357611c53618c19565b6020908102919091010152604080516001808252818301909252600091816020016020820280368337019050509050602a81600081518110611c9757611c97618c19565b6020908102919091010152604051600190600090611cbd90859085908590602401618c7a565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167ff05b6abf00000000000000000000000000000000000000000000000000000000179052602654905163ca669fa760e01b81526001600160a01b039091166004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015611d7057600080fd5b505af1158015611d84573d6000803e3d6000fd5b5050602654604080516001600160a01b0390921660248301527f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb60448084019190915281518084039091018152606490920181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb39250611e6f9190600401618cb2565b600060405180830381600087803b158015611e8957600080fd5b505af1158015611e9d573d6000803e3d6000fd5b50506020546021546040517f1cff79cd0000000000000000000000000000000000000000000000000000000081526001600160a01b039283169450631cff79cd9350611ef192909116908590600401618a2a565b6000604051808303816000875af1158015611f10573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611f389190810190618b34565b5050505050565b6026546040517f06447d560000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906306447d5690602401600060405180830381600087803b158015611fb157600080fd5b505af1158015611fc5573d6000803e3d6000fd5b50506040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527f0c8dc016000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e091506024015b600060405180830381600087803b15801561204f57600080fd5b505af1158015612063573d6000803e3d6000fd5b50506020546023546040517f10188aef0000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152911692506310188aef9150602401610f84565b6060601a805480602002602001604051908101604052809291908181526020016000905b828210156114395783829060005260206000200180546120f790618b8b565b80601f016020809104026020016040519081016040528092919081815260200182805461212390618b8b565b80156121705780601f1061214557610100808354040283529160200191612170565b820191906000526020600020905b81548152906001019060200180831161215357829003601f168201915b5050505050815260200190600101906120d8565b6060601d805480602002602001604051908101604052809291908181526020016000905b828210156114395760008481526020908190206040805180820182526002860290920180546001600160a01b0316835260018101805483518187028101870190945280845293949193858301939283018282801561226757602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190600401906020826003010492830192600103820291508084116122145790505b505050505081525050815260200190600101906121a8565b6028546040517f06447d560000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906306447d5690602401600060405180830381600087803b1580156122f157600080fd5b505af1158015612305573d6000803e3d6000fd5b5050602854604080516001600160a01b039092166024830152600060448084019190915281518084039091018152606490920181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb3925061121f9190600401618cb2565b6060601c805480602002602001604051908101604052809291908181526020016000905b828210156114395760008481526020908190206040805180820182526002860290920180546001600160a01b031683526001810180548351818702810187019094528084529394919385830193928301828280156124b457602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190600401906020826003010492830192600103820291508084116124615790505b505050505081525050815260200190600101906123f5565b60248054602754604051620186a09381018490526001600160a01b0392831660448201529116606482015260009060840160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f357fc5a200000000000000000000000000000000000000000000000000000000179052602654905163ca669fa760e01b81526001600160a01b039091166004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156125b057600080fd5b505af11580156125c4573d6000803e3d6000fd5b5050602654604080516001600160a01b0390921660248301527f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b960448084019190915281518084039091018152606490920181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb392506126af9190600401618cb2565b600060405180830381600087803b1580156126c957600080fd5b505af11580156126dd573d6000803e3d6000fd5b50506020546024546027546040517fb8969bd40000000000000000000000000000000000000000000000000000000081526001600160a01b03938416955063b8969bd4945061273a93928316929091169087908790600401618cc5565b600060405180830381600087803b15801561275457600080fd5b505af1158015612768573d6000803e3d6000fd5b505050505050565b60606019805480602002602001604051908101604052809291908181526020016000905b828210156114395783829060005260206000200180546127b390618b8b565b80601f01602080910402602001604051908101604052809291908181526020018280546127df90618b8b565b801561282c5780601f106128015761010080835404028352916020019161282c565b820191906000526020600020905b81548152906001019060200180831161280f57829003601f168201915b505050505081526020019060010190612794565b60085460009060ff1615612858575060085460ff1690565b6040517f667f9d70000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d600482018190527f6661696c65640000000000000000000000000000000000000000000000000000602483015260009163667f9d7090604401602060405180830381865afa1580156128e9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061290d9190618cfc565b1415905090565b6028546040517f06447d560000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906306447d5690602401600060405180830381600087803b15801561298657600080fd5b505af115801561299a573d6000803e3d6000fd5b5050602854604080516001600160a01b039092166024830152600060448084019190915281518084039091018152606490920181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb392506120359190600401618cb2565b6026546040517f06447d560000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906306447d5690602401600060405180830381600087803b158015612ad857600080fd5b505af1158015612aec573d6000803e3d6000fd5b50506040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b158015612b7557600080fd5b505af1158015612b89573d6000803e3d6000fd5b50506020546040517f10188aef000000000000000000000000000000000000000000000000000000008152600060048201526001600160a01b0390911692506310188aef9150602401610f84565b6040517f68656c6c6f0000000000000000000000000000000000000000000000000000006020820152670de0b6b3a76400009060009060250160408051808303601f190181529082905260265463ca669fa760e01b83526001600160a01b031660048301529150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015612c7757600080fd5b505af1158015612c8b573d6000803e3d6000fd5b5050602654604080516001600160a01b0390921660248301527f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb60448084019190915281518084039091018152606490920181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb39250612d769190600401618cb2565b600060405180830381600087803b158015612d9057600080fd5b505af1158015612da4573d6000803e3d6000fd5b50506020546021546040517f35c018db0000000000000000000000000000000000000000000000000000000081526001600160a01b0392831694506335c018db93508692611a249216908690600401618a2a565b60285460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015612e5157600080fd5b505af1158015612e65573d6000803e3d6000fd5b5050602854604080516001600160a01b0390921660248301527f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a60448084019190915281518084039091018152606490920181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb39250612f509190600401618cb2565b600060405180830381600087803b158015612f6a57600080fd5b505af1158015612f7e573d6000803e3d6000fd5b50505050602060009054906101000a90046001600160a01b03166001600160a01b0316638456cb596040518163ffffffff1660e01b8152600401600060405180830381600087803b158015612fd257600080fd5b505af1158015612fe6573d6000803e3d6000fd5b505060285460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b15801561304357600080fd5b505af1158015613057573d6000803e3d6000fd5b5050602854604080516001600160a01b0390921660248301527f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a60448084019190915281518084039091018152606490920181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb392506131429190600401618cb2565b600060405180830381600087803b15801561315c57600080fd5b505af1158015613170573d6000803e3d6000fd5b50505050602060009054906101000a90046001600160a01b03166001600160a01b0316633f4ba83a6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156131c457600080fd5b505af11580156131d8573d6000803e3d6000fd5b505060265460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b15801561323557600080fd5b505af1158015613249573d6000803e3d6000fd5b50505050602060009054906101000a90046001600160a01b03166001600160a01b0316638456cb596040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561329d57600080fd5b505af11580156132b1573d6000803e3d6000fd5b5050604080516004808252602480830184526020830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f6ed701690000000000000000000000000000000000000000000000000000000017905292517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fd93c06650000000000000000000000000000000000000000000000000000000091810191909152909350737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09101600060405180830381600087803b15801561339357600080fd5b505af11580156133a7573d6000803e3d6000fd5b505060285460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b15801561340457600080fd5b505af1158015613418573d6000803e3d6000fd5b50506020546021546040517f1cff79cd0000000000000000000000000000000000000000000000000000000081526001600160a01b039283169450631cff79cd935061346c92909116908590600401618a2a565b6000604051808303816000875af115801561348b573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526134b39190810190618b34565b5060265460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561350d57600080fd5b505af1158015613521573d6000803e3d6000fd5b50505050602060009054906101000a90046001600160a01b03166001600160a01b0316633f4ba83a6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561357557600080fd5b505af1158015613589573d6000803e3d6000fd5b50506021546040517ff30c7ba3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f30c7ba392506115b8916001600160a01b0316906000908690600401618bd8565b606060158054806020026020016040519081016040528092919081815260200182805480156112f6576020028201919060005260206000209081546001600160a01b031681526001909101906020018083116112d8575050505050905090565b60248054602754604051620186a09381018490526001600160a01b0392831660448201529116606482015260009060840160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f357fc5a200000000000000000000000000000000000000000000000000000000179052602654905163ca669fa760e01b81526001600160a01b039091166004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561373157600080fd5b505af1158015613745573d6000803e3d6000fd5b5050602654604080516001600160a01b0390921660248301527f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b960448084019190915281518084039091018152606490920181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb392506138309190600401618cb2565b600060405180830381600087803b15801561384a57600080fd5b505af115801561385e573d6000803e3d6000fd5b50506020546024546027546040517f5131ab590000000000000000000000000000000000000000000000000000000081526001600160a01b039384169550635131ab59945061273a93928316929091169087908790600401618cc5565b604080516001808252818301909252600091816020015b60608152602001906001900390816138d25790505090506040518060400160405280600f81526020017f48656c6c6f2c20466f756e6472792100000000000000000000000000000000008152508160008151811061393257613932618c19565b6020908102919091010152604080516001808252818301909252600091816020016020820280368337019050509050602a8160008151811061397657613976618c19565b602090810291909101015260405160019060009061399c90859085908590602401618c7a565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167ff05b6abf0000000000000000000000000000000000000000000000000000000017905260215490517ff30c7ba3000000000000000000000000000000000000000000000000000000008152919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f30c7ba391613a59916001600160a01b0391909116906000908690600401618bd8565b600060405180830381600087803b158015613a7357600080fd5b505af1158015613a87573d6000803e3d6000fd5b50506021546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b158015613b1957600080fd5b505af1158015613b2d573d6000803e3d6000fd5b50506020546040517f74a53cd528a921fca7dbdee62f86819051d3cc98f214951f4238e8843f20b1469350613b7492506001600160a01b0390911690879087908790618d15565b60405180910390a16020546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b158015613c0a57600080fd5b505af1158015613c1e573d6000803e3d6000fd5b50506021546040516001600160a01b0390911692507fcaf938de11c367272220bfd1d2baa99ca46665e7bc4d85f00adb51b90fe1fa9f9150613c64906000908590618c00565b60405180910390a260285460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401611e6f565b604080517f68656c6c6f0000000000000000000000000000000000000000000000000000006020820152815160058183030181526025909101909152602154670de0b6b3a764000091906001600160a01b031631613d0f81600061449c565b6021546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b158015613d9d57600080fd5b505af1158015613db1573d6000803e3d6000fd5b50506020546040517f0d3f65f00e631663aa85c96330b5c7a83bb29af3630c0063776f985edc3037aa9350613df492506001600160a01b03909116908590618a2a565b60405180910390a16020546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b158015613e8a57600080fd5b505af1158015613e9e573d6000803e3d6000fd5b50506021546040516001600160a01b0390911692507fd5d7616b1678354a0dea9d7e57e6a090bff5babe9f8d6381fdbad16e89ba311c9150613eeb90670de0b6b3a7640000908690618c00565b60405180910390a260285460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015613f4c57600080fd5b505af1158015613f60573d6000803e3d6000fd5b50506020546021546040517f35c018db0000000000000000000000000000000000000000000000000000000081526001600160a01b0392831694506335c018db93508792613fb49216908790600401618a2a565b6000604051808303818588803b158015613fcd57600080fd5b505af1158015613fe1573d6000803e3d6000fd5b50506021546001600160a01b0316319250610fb29150829050670de0b6b3a764000061449c565b60408051808201909152600f81527f48656c6c6f2c20466f756e6472792100000000000000000000000000000000006020820152602154602a90600190670de0b6b3a764000090614065906000906001600160a01b03163161449c565b600084848460405160240161407c93929190618d5d565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe04d4f970000000000000000000000000000000000000000000000000000000017905260215490517ff30c7ba3000000000000000000000000000000000000000000000000000000008152919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f30c7ba391614140916001600160a01b039190911690670de0b6b3a7640000908690600401618bd8565b600060405180830381600087803b15801561415a57600080fd5b505af115801561416e573d6000803e3d6000fd5b50506021546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b15801561420057600080fd5b505af1158015614214573d6000803e3d6000fd5b50506020546040517f1f1ff1f5fb41346850b2f5c04e6c767e2f1c8a525c5c0c5cdb60cdf3ca5f62fa935061425d92506001600160a01b03909116908590899089908990618d87565b60405180910390a16020546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b1580156142f357600080fd5b505af1158015614307573d6000803e3d6000fd5b50506021546040516001600160a01b0390911692507fcaf938de11c367272220bfd1d2baa99ca46665e7bc4d85f00adb51b90fe1fa9f915061435490670de0b6b3a7640000908590618c00565b60405180910390a260285460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156143b557600080fd5b505af11580156143c9573d6000803e3d6000fd5b50506020546021546040517f1cff79cd0000000000000000000000000000000000000000000000000000000081526001600160a01b039283169450631cff79cd9350869261441d9216908690600401618a2a565b60006040518083038185885af115801561443b573d6000803e3d6000fd5b50505050506040513d6000823e601f3d908101601f191682016040526144649190810190618b34565b50602154611f389083906001600160a01b03163161449c565b60006144876185cb565b61449284848361451b565b9150505b92915050565b6040517f98296c540000000000000000000000000000000000000000000000000000000081526004810183905260248101829052737109709ecfa91a80626ff3989d68f67f5b1dd12d906398296c549060440160006040518083038186803b15801561450757600080fd5b505afa158015612768573d6000803e3d6000fd5b6000806145288584614596565b905061458b6040518060400160405280601d81526020017f4552433139363750726f78792e736f6c3a4552433139363750726f78790000008152508286604051602001614576929190618a2a565b604051602081830303815290604052856145a2565b9150505b9392505050565b600061458f83836145d0565b60c081015151600090156145c6576145bf84848460c001516145eb565b905061458f565b6145bf8484614791565b60006145dc838361487c565b61458f838360200151846145a2565b6000806145f6614888565b90506000614604868361495b565b9050600061461b8260600151836020015185614e01565b9050600061462b83838989615013565b9050600061463882615e90565b602081015181519192509060030b156146ab57898260400151604051602001614662929190618dc8565b60408051601f19818403018152908290527f08c379a00000000000000000000000000000000000000000000000000000000082526146a291600401618cb2565b60405180910390fd5b60006146ee6040518060400160405280601581526020017f4465706c6f79656420746f20616464726573733a20000000000000000000000081525083600161605f565b6040517fc6ce059d000000000000000000000000000000000000000000000000000000008152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c6ce059d90614741908490600401618cb2565b602060405180830381865afa15801561475e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906147829190618e49565b9b9a5050505050505050505050565b6040517f8d1cc9250000000000000000000000000000000000000000000000000000000081526000908190737109709ecfa91a80626ff3989d68f67f5b1dd12d90638d1cc925906147e6908790600401618cb2565b600060405180830381865afa158015614803573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261482b9190810190618b34565b905060006148598285604051602001614845929190618e72565b60405160208183030381529060405261625f565b90506001600160a01b038116614492578484604051602001614662929190618ea1565b61065282826000616272565b604080518082018252600381527f6f75740000000000000000000000000000000000000000000000000000000000602082015290517fd145736c000000000000000000000000000000000000000000000000000000008152606091737109709ecfa91a80626ff3989d68f67f5b1dd12d91829063d145736c9061490f908490600401618f4c565b600060405180830381865afa15801561492c573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526149549190810190618f93565b9250505090565b61498d6040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b6000737109709ecfa91a80626ff3989d68f67f5b1dd12d90506149d86040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b6149e185616375565b602082015260006149f18661675a565b90506000836001600160a01b031663d930a0e66040518163ffffffff1660e01b8152600401600060405180830381865afa158015614a33573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052614a5b9190810190618f93565b86838560200151604051602001614a759493929190618fdc565b60408051601f19818403018152908290527f60f9bb1100000000000000000000000000000000000000000000000000000000825291506000906001600160a01b038616906360f9bb1190614acd908590600401618cb2565b600060405180830381865afa158015614aea573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052614b129190810190618f93565b6040517fdb4235f60000000000000000000000000000000000000000000000000000000081529091506001600160a01b0386169063db4235f690614b5a9084906004016190e0565b602060405180830381865afa158015614b77573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614b9b9190618b69565b614bb057816040516020016146629190619132565b6040517f49c4fac80000000000000000000000000000000000000000000000000000000081526001600160a01b038616906349c4fac890614bf59084906004016191c4565b600060405180830381865afa158015614c12573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052614c3a9190810190618f93565b84526040517fdb4235f60000000000000000000000000000000000000000000000000000000081526001600160a01b0386169063db4235f690614c81908490600401619216565b602060405180830381865afa158015614c9e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614cc29190618b69565b15614d57576040517f49c4fac80000000000000000000000000000000000000000000000000000000081526001600160a01b038616906349c4fac890614d0c908490600401619216565b600060405180830381865afa158015614d29573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052614d519190810190618f93565b60408501525b846001600160a01b03166349c4fac8828660000151604051602001614d7c9190619268565b6040516020818303038152906040526040518363ffffffff1660e01b8152600401614da89291906192d4565b600060405180830381865afa158015614dc5573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052614ded9190810190618f93565b606085015250608083015250949350505050565b60408051600480825260a0820190925260609160009190816020015b6060815260200190600190039081614e1d5790505090506040518060400160405280600481526020017f677265700000000000000000000000000000000000000000000000000000000081525081600081518110614e7d57614e7d618c19565b60200260200101819052506040518060400160405280600381526020017f2d726c000000000000000000000000000000000000000000000000000000000081525081600181518110614ed157614ed1618c19565b602002602001018190525084604051602001614eed91906192f9565b60405160208183030381529060405281600281518110614f0f57614f0f618c19565b602002602001018190525082604051602001614f2b9190619365565b60405160208183030381529060405281600381518110614f4d57614f4d618c19565b60200260200101819052506000614f6382615e90565b602080820151604080518082018252600581527f2e6a736f6e0000000000000000000000000000000000000000000000000000008185019081528251808401845260008082529086015282518084019093529051825292810192909252919250614ff490604080518082018252600080825260209182015281518083019092528451825280850190820152906169dd565b615009578560405160200161466291906193a6565b9695505050505050565b60a0810151604080518082018252600080825260209182015281518083019092528251808352928101910152606090737109709ecfa91a80626ff3989d68f67f5b1dd12d9015615063565b511590565b6151d75782602001511561511f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605860248201527f54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f742060448201527f62652075736564207768656e207468652060736b6970566572696679536f757260648201527f6365436f646560206f7074696f6e206973206074727565600000000000000000608482015260a4016146a2565b8260c00151156151d7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605360248201527f54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f742060448201527f62652075736564207768656e207468652060736b69704c6963656e736554797060648201527f6560206f7074696f6e2069732060747275656000000000000000000000000000608482015260a4016146a2565b6040805160ff8082526120008201909252600091816020015b60608152602001906001900390816151f057905050905060006040518060400160405280600381526020017f6e7078000000000000000000000000000000000000000000000000000000000081525082828061524b90619466565b935060ff168151811061526057615260618c19565b60200260200101819052506040518060400160405280600d81526020017f302e302e312d616c7068612e37000000000000000000000000000000000000008152506040516020016152b19190619485565b6040516020818303038152906040528282806152cc90619466565b935060ff16815181106152e1576152e1618c19565b60200260200101819052506040518060400160405280600681526020017f6465706c6f79000000000000000000000000000000000000000000000000000081525082828061532e90619466565b935060ff168151811061534357615343618c19565b60200260200101819052506040518060400160405280600e81526020017f2d2d636f6e74726163744e616d6500000000000000000000000000000000000081525082828061539090619466565b935060ff16815181106153a5576153a5618c19565b602002602001018190525087602001518282806153c190619466565b935060ff16815181106153d6576153d6618c19565b60200260200101819052506040518060400160405280600e81526020017f2d2d636f6e74726163745061746800000000000000000000000000000000000081525082828061542390619466565b935060ff168151811061543857615438618c19565b60209081029190910101528751828261545081619466565b935060ff168151811061546557615465618c19565b60200260200101819052506040518060400160405280600981526020017f2d2d636861696e496400000000000000000000000000000000000000000000008152508282806154b290619466565b935060ff16815181106154c7576154c7618c19565b60200260200101819052506154db46616a3e565b82826154e681619466565b935060ff16815181106154fb576154fb618c19565b60200260200101819052506040518060400160405280600f81526020017f2d2d6275696c64496e666f46696c65000000000000000000000000000000000081525082828061554890619466565b935060ff168151811061555d5761555d618c19565b60200260200101819052508682828061557590619466565b935060ff168151811061558a5761558a618c19565b60209081029190910101528551156156b15760408051808201909152601581527f2d2d636f6e7374727563746f7242797465636f64650000000000000000000000602082015282826155db81619466565b935060ff16815181106155f0576155f0618c19565b60209081029190910101526040517f71aad10d0000000000000000000000000000000000000000000000000000000081526001600160a01b038416906371aad10d90615640908990600401618cb2565b600060405180830381865afa15801561565d573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526156859190810190618f93565b828261569081619466565b935060ff16815181106156a5576156a5618c19565b60200260200101819052505b8460200151156157815760408051808201909152601281527f2d2d766572696679536f75726365436f64650000000000000000000000000000602082015282826156fa81619466565b935060ff168151811061570f5761570f618c19565b60200260200101819052506040518060400160405280600581526020017f66616c736500000000000000000000000000000000000000000000000000000081525082828061575c90619466565b935060ff168151811061577157615771618c19565b6020026020010181905250615948565b6157b961505e8660a0015160408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b61584c5760408051808201909152600d81527f2d2d6c6963656e73655479706500000000000000000000000000000000000000602082015282826157fc81619466565b935060ff168151811061581157615811618c19565b60200260200101819052508460a0015160405160200161583191906192f9565b60405160208183030381529060405282828061575c90619466565b8460c0015115801561588f57506040808901518151808301835260008082526020918201528251808401909352815183529081019082015261588d90511590565b155b156159485760408051808201909152600d81527f2d2d6c6963656e73655479706500000000000000000000000000000000000000602082015282826158d381619466565b935060ff16815181106158e8576158e8618c19565b60200260200101819052506158fc88616ade565b60405160200161590c91906192f9565b60405160208183030381529060405282828061592790619466565b935060ff168151811061593c5761593c618c19565b60200260200101819052505b6040808601518151808301835260008082526020918201528251808401909352815183529081019082015261597c90511590565b615a115760408051808201909152600b81527f2d2d72656c617965724964000000000000000000000000000000000000000000602082015282826159bf81619466565b935060ff16815181106159d4576159d4618c19565b602002602001018190525084604001518282806159f090619466565b935060ff1681518110615a0557615a05618c19565b60200260200101819052505b606085015115615b325760408051808201909152600681527f2d2d73616c74000000000000000000000000000000000000000000000000000060208201528282615a5a81619466565b935060ff1681518110615a6f57615a6f618c19565b602090810291909101015260608501516040517fb11a19e800000000000000000000000000000000000000000000000000000000815260048101919091526001600160a01b0384169063b11a19e890602401600060405180830381865afa158015615ade573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052615b069190810190618f93565b8282615b1181619466565b935060ff1681518110615b2657615b26618c19565b60200260200101819052505b60e08501515115615bd95760408051808201909152600a81527f2d2d6761734c696d69740000000000000000000000000000000000000000000060208201528282615b7c81619466565b935060ff1681518110615b9157615b91618c19565b6020026020010181905250615bad8560e0015160000151616a3e565b8282615bb881619466565b935060ff1681518110615bcd57615bcd618c19565b60200260200101819052505b60e08501516020015115615c835760408051808201909152600a81527f2d2d67617350726963650000000000000000000000000000000000000000000060208201528282615c2681619466565b935060ff1681518110615c3b57615c3b618c19565b6020026020010181905250615c578560e0015160200151616a3e565b8282615c6281619466565b935060ff1681518110615c7757615c77618c19565b60200260200101819052505b60e08501516040015115615d2d5760408051808201909152600e81527f2d2d6d617846656550657247617300000000000000000000000000000000000060208201528282615cd081619466565b935060ff1681518110615ce557615ce5618c19565b6020026020010181905250615d018560e0015160400151616a3e565b8282615d0c81619466565b935060ff1681518110615d2157615d21618c19565b60200260200101819052505b60e08501516060015115615dd75760408051808201909152601681527f2d2d6d61785072696f726974794665655065724761730000000000000000000060208201528282615d7a81619466565b935060ff1681518110615d8f57615d8f618c19565b6020026020010181905250615dab8560e0015160600151616a3e565b8282615db681619466565b935060ff1681518110615dcb57615dcb618c19565b60200260200101819052505b60008160ff1667ffffffffffffffff811115615df557615df5618a4c565b604051908082528060200260200182016040528015615e2857816020015b6060815260200190600190039081615e135790505b50905060005b8260ff168160ff161015615e8157838160ff1681518110615e5157615e51618c19565b6020026020010151828260ff1681518110615e6e57615e6e618c19565b6020908102919091010152600101615e2e565b5093505050505b949350505050565b615eb76040518060600160405280600060030b815260200160608152602001606081525090565b60408051808201825260048082527f6261736800000000000000000000000000000000000000000000000000000000602083015291517fd145736c000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d92600091849163d145736c91615f3d918691016194f0565b600060405180830381865afa158015615f5a573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052615f829190810190618f93565b90506000615f9086836175cd565b90506000846001600160a01b031663f45c1ce7836040518263ffffffff1660e01b8152600401615fc09190618980565b6000604051808303816000875af1158015615fdf573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526160079190810190619537565b805190915060030b158015906160205750602081015151155b801561602f5750604081015151155b15615009578160008151811061604757616047618c19565b602002602001015160405160200161466291906195ed565b606060006160948560408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6040805180820182526000808252602091820152815180830190925286518252808701908201529091506160cb9082905b90617722565b15616228576000616148826161428461613c61610e8a60408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6040805180820182526000808252602091820152815180830190925282518252918201519181019190915290565b90617749565b906177ab565b604080518082018252600181527f0a00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201529091506161ac908290617722565b1561621657604080518082018252600181527f0a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616213905b8290617830565b90505b61621f81617856565b9250505061458f565b82156162415784846040516020016146629291906197d9565b505060408051602081019091526000815261458f565b509392505050565b6000808251602084016000f09392505050565b8160a001511561628157505050565b600061628e8484846178bf565b9050600061629b82615e90565b602081015181519192509060030b1580156163375750604080518082018252600781527f535543434553530000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616337906040805180820182526000808252602091820152815180830190925284518252808501908201526160c5565b1561634457505050505050565b604082015151156163645781604001516040516020016146629190619880565b8060405160200161466291906198de565b606060006163aa8360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600481527f2e736f6c000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015290915061640f905b82906169dd565b1561647e57604080518082018252600481527f2e736f6c000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261458f90616479908390617e5a565b617856565b604080518082018252600181527f3a00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526164e0905b8290617ee4565b6001036165ad57604080518082018252600181527f3a00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526165469061620c565b50604080518082018252600181527f3a000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261458f90616479905b8390617830565b604080518082018252600581527f2e6a736f6e0000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261660c90616408565b1561674357604080518082018252600181527f2f00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820181905284518086019095529251845283015290616674908390617f7e565b9050600081600183516166879190619949565b8151811061669757616697618c19565b6020026020010151905061673a61647961670d6040518060400160405280600581526020017f2e6a736f6e00000000000000000000000000000000000000000000000000000081525060408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b60408051808201825260008082526020918201528151808301909252855182528086019082015290617e5a565b95945050505050565b82604051602001614662919061995c565b50919050565b6060600061678f8360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600481527f2e736f6c00000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201529091506167f190616408565b156167ff5761458f81617856565b604080518082018252600181527f3a000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261685e906164d9565b6001036168c857604080518082018252600181527f3a000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261458f90616479906165a6565b604080518082018252600581527f2e6a736f6e0000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261692790616408565b1561674357604080518082018252600181527f2f0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082018190528451808601909552925184528301529061698f908390617f7e565b90506001815111156169cb5780600282516169aa9190619949565b815181106169ba576169ba618c19565b602002602001015192505050919050565b5082604051602001614662919061995c565b8051825160009111156169f257506000614496565b81518351602085015160009291616a0891619a3a565b616a129190619949565b905082602001518103616a29576001915050614496565b82516020840151819020912014905092915050565b60606000616a4b83618023565b600101905060008167ffffffffffffffff811115616a6b57616a6b618a4c565b6040519080825280601f01601f191660200182016040528015616a95576020820181803683370190505b5090508181016020015b600019017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a8504945084616a9f57509392505050565b604081810151815180830183526000808252602091820181905283518085018552835181529282018383015283518085018552600a81527f554e4c4943454e5345440000000000000000000000000000000000000000000081840190815285518087018752838152840192909252845180860190955251845290830152606091616b6a905b8290618105565b15616baa57505060408051808201909152600481527f4e6f6e65000000000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600981527f556e6c6963656e7365000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616c0990616b63565b15616c4957505060408051808201909152600981527f556e6c6963656e736500000000000000000000000000000000000000000000006020820152919050565b604080518082018252600381527f4d4954000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616ca890616b63565b15616ce857505060408051808201909152600381527f4d495400000000000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f47504c2d322e302d6f6e6c79000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616d4790616b63565b80616dac5750604080518082018252601081527f47504c2d322e302d6f722d6c617465720000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616dac90616b63565b15616dec57505060408051808201909152600981527f474e552047504c763200000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f47504c2d332e302d6f6e6c79000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616e4b90616b63565b80616eb05750604080518082018252601081527f47504c2d332e302d6f722d6c617465720000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616eb090616b63565b15616ef057505060408051808201909152600981527f474e552047504c763300000000000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4c47504c2d322e312d6f6e6c790000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616f4f90616b63565b80616fb45750604080518082018252601181527f4c47504c2d322e312d6f722d6c6174657200000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616fb490616b63565b15616ff457505060408051808201909152600c81527f474e55204c47504c76322e3100000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4c47504c2d332e302d6f6e6c79000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261705390616b63565b806170b85750604080518082018252601181527f4c47504c2d332e302d6f722d6c61746572000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526170b890616b63565b156170f857505060408051808201909152600a81527f474e55204c47504c7633000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f4253442d322d436c6175736500000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261715790616b63565b1561719757505060408051808201909152600c81527f4253442d322d436c6175736500000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f4253442d332d436c617573650000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526171f690616b63565b1561723657505060408051808201909152600c81527f4253442d332d436c6175736500000000000000000000000000000000000000006020820152919050565b604080518082018252600781527f4d504c2d322e30000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261729590616b63565b156172d557505060408051808201909152600781527f4d504c2d322e30000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600781527f4f534c2d332e30000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261733490616b63565b1561737457505060408051808201909152600781527f4f534c2d332e30000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600a81527f4170616368652d322e3000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526173d390616b63565b1561741357505060408051808201909152600a81527f4170616368652d322e30000000000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4147504c2d332e302d6f6e6c79000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261747290616b63565b806174d75750604080518082018252601181527f4147504c2d332e302d6f722d6c61746572000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526174d790616b63565b1561751757505060408051808201909152600a81527f474e55204147504c7633000000000000000000000000000000000000000000006020820152919050565b604080518082018252600881527f4255534c2d312e310000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261757690616b63565b156175b657505060408051808201909152600781527f42534c20312e31000000000000000000000000000000000000000000000000006020820152919050565b604080840151845191516146629290602001619a4d565b60608060005b845181101561765857818582815181106175ef576175ef618c19565b6020026020010151604051602001617608929190618e72565b6040516020818303038152906040529150600185516176279190619949565b8114617650578160405160200161763e9190619bb6565b60405160208183030381529060405291505b6001016175d3565b5060408051600380825260808201909252600091816020015b6060815260200190600190039081617671579050509050838160008151811061769c5761769c618c19565b60200260200101819052506040518060400160405280600281526020017f2d63000000000000000000000000000000000000000000000000000000000000815250816001815181106176f0576176f0618c19565b6020026020010181905250818160028151811061770f5761770f618c19565b6020908102919091010152949350505050565b60208083015183518351928401516000936177409291849190618119565b14159392505050565b6040805180820190915260008082526020820152600061777b846000015185602001518560000151866020015161822a565b905083602001518161778d9190619949565b8451859061779c908390619949565b90525060208401525090919050565b60408051808201909152600080825260208201528151835110156177d0575081614496565b60208083015190840151600191146177f75750815160208481015190840151829020919020145b80156178285782518451859061780e908390619949565b9052508251602085018051617824908390619a3a565b9052505b509192915050565b604080518082019091526000808252602082015261784f83838361834a565b5092915050565b60606000826000015167ffffffffffffffff81111561787757617877618a4c565b6040519080825280601f01601f1916602001820160405280156178a1576020820181803683370190505b509050600060208201905061784f81856020015186600001516183f5565b606060006178cb614888565b6040805160ff808252612000820190925291925060009190816020015b60608152602001906001900390816178e857905050905060006040518060400160405280600381526020017f6e7078000000000000000000000000000000000000000000000000000000000081525082828061794390619466565b935060ff168151811061795857617958618c19565b60200260200101819052506040518060400160405280600781526020017f5e312e33322e33000000000000000000000000000000000000000000000000008152506040516020016179a99190619bf7565b6040516020818303038152906040528282806179c490619466565b935060ff16815181106179d9576179d9618c19565b60200260200101819052506040518060400160405280600881526020017f76616c6964617465000000000000000000000000000000000000000000000000815250828280617a2690619466565b935060ff1681518110617a3b57617a3b618c19565b602002602001018190525082604051602001617a579190619365565b604051602081830303815290604052828280617a7290619466565b935060ff1681518110617a8757617a87618c19565b60200260200101819052506040518060400160405280600a81526020017f2d2d636f6e747261637400000000000000000000000000000000000000000000815250828280617ad490619466565b935060ff1681518110617ae957617ae9618c19565b6020026020010181905250617afe878461846f565b8282617b0981619466565b935060ff1681518110617b1e57617b1e618c19565b602090810291909101015285515115617bca5760408051808201909152600b81527f2d2d7265666572656e636500000000000000000000000000000000000000000060208201528282617b7081619466565b935060ff1681518110617b8557617b85618c19565b6020026020010181905250617b9e86600001518461846f565b8282617ba981619466565b935060ff1681518110617bbe57617bbe618c19565b60200260200101819052505b856080015115617c385760408051808201909152601881527f2d2d756e73616665536b697053746f72616765436865636b000000000000000060208201528282617c1381619466565b935060ff1681518110617c2857617c28618c19565b6020026020010181905250617c9e565b8415617c9e5760408051808201909152601281527f2d2d726571756972655265666572656e6365000000000000000000000000000060208201528282617c7d81619466565b935060ff1681518110617c9257617c92618c19565b60200260200101819052505b60408601515115617d3a5760408051808201909152600d81527f2d2d756e73616665416c6c6f770000000000000000000000000000000000000060208201528282617ce881619466565b935060ff1681518110617cfd57617cfd618c19565b60200260200101819052508560400151828280617d1990619466565b935060ff1681518110617d2e57617d2e618c19565b60200260200101819052505b856060015115617da45760408051808201909152601481527f2d2d756e73616665416c6c6f7752656e616d657300000000000000000000000060208201528282617d8381619466565b935060ff1681518110617d9857617d98618c19565b60200260200101819052505b60008160ff1667ffffffffffffffff811115617dc257617dc2618a4c565b604051908082528060200260200182016040528015617df557816020015b6060815260200190600190039081617de05790505b50905060005b8260ff168160ff161015617e4e57838160ff1681518110617e1e57617e1e618c19565b6020026020010151828260ff1681518110617e3b57617e3b618c19565b6020908102919091010152600101617dfb565b50979650505050505050565b6040805180820190915260008082526020820152815183511015617e7f575081614496565b81518351602085015160009291617e9591619a3a565b617e9f9190619949565b60208401519091506001908214617ec0575082516020840151819020908220145b8015617edb57835185518690617ed7908390619949565b9052505b50929392505050565b6000808260000151617f08856000015186602001518660000151876020015161822a565b617f129190619a3a565b90505b83516020850151617f269190619a3a565b811161784f5781617f3681619c3c565b9250508260000151617f6d856020015183617f519190619949565b8651617f5d9190619949565b838660000151876020015161822a565b617f779190619a3a565b9050617f15565b60606000617f8c8484617ee4565b617f97906001619a3a565b67ffffffffffffffff811115617faf57617faf618a4c565b604051908082528060200260200182016040528015617fe257816020015b6060815260200190600190039081617fcd5790505b50905060005b815181101561625757617ffe6164798686617830565b82828151811061801057618010618c19565b6020908102919091010152600101617fe8565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000831061806c577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310618098576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc1000083106180b657662386f26fc10000830492506010015b6305f5e10083106180ce576305f5e100830492506008015b61271083106180e257612710830492506004015b606483106180f4576064830492506002015b600a83106144965760010192915050565b600061811183836184af565b159392505050565b60008085841161822057602084116181cc5760008415618164576001618140866020619949565b61814b906008619c56565b618156906002619d54565b6181609190619949565b1990505b83518116856181738989619a3a565b61817d9190619949565b805190935082165b8181146181b75787841161819f5787945050505050615e88565b836181a981619d60565b945050828451169050618185565b6181c18785619a3a565b945050505050615e88565b8383206181d98588619949565b6181e39087619a3a565b91505b85821061821e5784822080820361820b576182018684619a3a565b9350505050615e88565b618216600184619949565b9250506181e6565b505b5092949350505050565b6000838186851161833557602085116182e45760008515618276576001618252876020619949565b61825d906008619c56565b618268906002619d54565b6182729190619949565b1990505b845181166000876182878b8b619a3a565b6182919190619949565b855190915083165b8281146182d6578186106182be576182b18b8b619a3a565b9650505050505050615e88565b856182c881619c3c565b965050838651169050618299565b859650505050505050615e88565b508383206000905b6182f68689619949565b8211618333578583208082036183125783945050505050615e88565b61831d600185619a3a565b935050818061832b90619c3c565b9250506182ec565b505b61833f8787619a3a565b979650505050505050565b6040805180820190915260008082526020820152600061837c856000015186602001518660000151876020015161822a565b6020808701805191860191909152519091506183989082619949565b8352845160208601516183ab9190619a3a565b81036183ba57600085526183ec565b835183516183c89190619a3a565b855186906183d7908390619949565b90525083516183e69082619a3a565b60208601525b50909392505050565b6020811061842d578151835261840c602084619a3a565b9250618419602083619a3a565b9150618426602082619949565b90506183f5565b600019811561845c576001618443836020619949565b61844f90610100619d54565b6184599190619949565b90505b9151835183169219169190911790915250565b6060600061847d848461495b565b805160208083015160405193945061849793909101619d77565b60405160208183030381529060405291505092915050565b81518151600091908111156184c2575081515b6020808501519084015160005b8381101561857b578251825180821461854b57600019602087101561852a576001846184fc896020619949565b6185069190619a3a565b618511906008619c56565b61851c906002619d54565b6185269190619949565b1990505b81811683821681810391146185485797506144969650505050505050565b50505b618556602086619a3a565b9450618563602085619a3a565b935050506020816185749190619a3a565b90506184cf565b50845186516150099190619dcf565b610c9f80619df083390190565b6112a68061aa8f83390190565b6116fe8061bd3583390190565b61155a8061d43383390190565b610d5e8061e98d83390190565b6040518060e0016040528060608152602001606081526020016060815260200160001515815260200160001515815260200160001515815260200161860e618613565b905290565b6040518061010001604052806000151581526020016000151581526020016060815260200160008019168152602001606081526020016060815260200160001515815260200161860e6040518060800160405280600081526020016000815260200160008152602001600081525090565b602080825282518282018190526000918401906040840190835b818110156186c55783516001600160a01b031683526020938401939092019160010161869e565b509095945050505050565b60005b838110156186eb5781810151838201526020016186d3565b50506000910152565b6000815180845261870c8160208601602086016186d0565b601f01601f19169290920160200192915050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b8281101561881c577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452815180516001600160a01b03168652602090810151604082880181905281519088018190529101906060600582901b88018101919088019060005b81811015618802577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa08a85030183526187ec8486516186f4565b60209586019590945092909201916001016187b2565b509197505050602094850194929092019150600101618748565b50929695505050505050565b600081518084526020840193506020830160005b8281101561887c5781517fffffffff000000000000000000000000000000000000000000000000000000001686526020958601959091019060010161883c565b5093949350505050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b8281101561881c577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc087860301845281518051604087526188f260408801826186f4565b905060208201519150868103602088015261890d8183618828565b9650505060209384019391909101906001016188ae565b600082825180855260208501945060208160051b8301016020850160005b8381101561897457601f1985840301885261895e8383516186f4565b6020988901989093509190910190600101618942565b50909695505050505050565b60208152600061458f6020830184618924565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b8281101561881c577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc087860301845281516001600160a01b0381511686526020810151905060406020870152618a146040870182618828565b95505060209384019391909101906001016189bb565b6001600160a01b0383168152604060208201526000615e8860408301846186f4565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040516060810167ffffffffffffffff81118282101715618a9e57618a9e618a4c565b60405290565b60008067ffffffffffffffff841115618abf57618abf618a4c565b50604051601f19601f85018116603f0116810181811067ffffffffffffffff82111715618aee57618aee618a4c565b604052838152905080828401851015618b0657600080fd5b6162578460208301856186d0565b600082601f830112618b2557600080fd5b61458f83835160208501618aa4565b600060208284031215618b4657600080fd5b815167ffffffffffffffff811115618b5d57600080fd5b61449284828501618b14565b600060208284031215618b7b57600080fd5b8151801515811461458f57600080fd5b600181811c90821680618b9f57607f821691505b602082108103616754577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6001600160a01b038416815282602082015260606040820152600061673a60608301846186f4565b828152604060208201526000615e8860408301846186f4565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081518084526020840193506020830160005b8281101561887c578151865260209586019590910190600101618c5c565b606081526000618c8d6060830186618924565b8281036020840152618c9f8186618c48565b9150508215156040830152949350505050565b60208152600061458f60208301846186f4565b6001600160a01b03851681526001600160a01b038416602082015282604082015260806060820152600061500960808301846186f4565b600060208284031215618d0e57600080fd5b5051919050565b6001600160a01b0385168152608060208201526000618d376080830186618924565b8281036040840152618d498186618c48565b915050821515606083015295945050505050565b606081526000618d7060608301866186f4565b602083019490945250901515604090910152919050565b6001600160a01b038616815284602082015260a060408201526000618daf60a08301866186f4565b6060830194909452509015156080909101529392505050565b7f4661696c656420746f206465706c6f7920636f6e747261637420000000000000815260008351618e0081601a8501602088016186d0565b7f3a20000000000000000000000000000000000000000000000000000000000000601a918401918201528351618e3d81601c8401602088016186d0565b01601c01949350505050565b600060208284031215618e5b57600080fd5b81516001600160a01b038116811461458f57600080fd5b60008351618e848184602088016186d0565b835190830190618e988183602088016186d0565b01949350505050565b7f4661696c656420746f206465706c6f7920636f6e747261637420000000000000815260008351618ed981601a8501602088016186d0565b7f207573696e6720636f6e7374727563746f722064617461202200000000000000601a918401918201528351618f168160338401602088016186d0565b7f220000000000000000000000000000000000000000000000000000000000000060339290910191820152603401949350505050565b60408152600b60408201527f464f554e4452595f4f5554000000000000000000000000000000000000000000606082015260806020820152600061458f60808301846186f4565b600060208284031215618fa557600080fd5b815167ffffffffffffffff811115618fbc57600080fd5b8201601f81018413618fcd57600080fd5b61449284825160208401618aa4565b60008551618fee818460208a016186d0565b7f2f000000000000000000000000000000000000000000000000000000000000009083019081528551619028816001840160208a016186d0565b7f2f000000000000000000000000000000000000000000000000000000000000006001929091019182015284516190668160028401602089016186d0565b6001818301019150507f2f00000000000000000000000000000000000000000000000000000000000000600182015283516190a88160028401602088016186d0565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600292909101918201526007019695505050505050565b6040815260006190f360408301846186f4565b8281036020840152600481527f2e6173740000000000000000000000000000000000000000000000000000000060208201526040810191505092915050565b7f436f756c64206e6f742066696e642041535420696e206172746966616374200081526000825161916a81601f8501602087016186d0565b7f2e205365742060617374203d20747275656020696e20666f756e6472792e746f601f9390910192830152507f6d6c000000000000000000000000000000000000000000000000000000000000603f820152604101919050565b6040815260006191d760408301846186f4565b8281036020840152601181527f2e6173742e6162736f6c7574655061746800000000000000000000000000000060208201526040810191505092915050565b60408152600061922960408301846186f4565b8281036020840152600c81527f2e6173742e6c6963656e7365000000000000000000000000000000000000000060208201526040810191505092915050565b7f2e6d657461646174612e736f75726365732e5b270000000000000000000000008152600082516192a08160148501602087016186d0565b7f275d2e6b656363616b32353600000000000000000000000000000000000000006014939091019283015250602001919050565b6040815260006192e760408301856186f4565b828103602084015261458b81856186f4565b7f22000000000000000000000000000000000000000000000000000000000000008152600082516193318160018501602087016186d0565b7f22000000000000000000000000000000000000000000000000000000000000006001939091019283015250600201919050565b600082516193778184602087016186d0565b7f2f6275696c642d696e666f000000000000000000000000000000000000000000920191825250600b01919050565b7f436f756c64206e6f742066696e64206275696c642d696e666f2066696c65207781527f697468206d61746368696e6720736f7572636520636f6465206861736820666f60208201527f7220636f6e74726163742000000000000000000000000000000000000000000060408201526000825161942a81604b8501602087016186d0565b91909101604b0192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600060ff821660ff810361947c5761947c619437565b60010192915050565b7f406f70656e7a657070656c696e2f646566656e6465722d6465706c6f792d636c81527f69656e742d636c694000000000000000000000000000000000000000000000006020820152600082516194e38160298501602087016186d0565b9190910160290192915050565b60408152601660408201527f4f50454e5a455050454c494e5f424153485f5041544800000000000000000000606082015260806020820152600061458f60808301846186f4565b60006020828403121561954957600080fd5b815167ffffffffffffffff81111561956057600080fd5b82016060818503121561957257600080fd5b61957a618a7b565b81518060030b811461958b57600080fd5b8152602082015167ffffffffffffffff8111156195a757600080fd5b6195b386828501618b14565b602083015250604082015167ffffffffffffffff8111156195d357600080fd5b6195df86828501618b14565b604083015250949350505050565b7f4661696c656420746f2072756e206261736820636f6d6d616e6420776974682081527f220000000000000000000000000000000000000000000000000000000000000060208201526000825161964b8160218501602087016186d0565b7f222e20496620796f7520617265207573696e672057696e646f77732c2073657460219390910192830152507f20746865204f50454e5a455050454c494e5f424153485f5041544820656e766960418201527f726f6e6d656e74207661726961626c6520746f207468652066756c6c7920717560618201527f616c69666965642070617468206f66207468652062617368206578656375746160818201527f626c652e20466f72206578616d706c652c20696620796f75206172652075736960a18201527f6e672047697420666f722057696e646f77732c206164642074686520666f6c6c60c18201527f6f77696e67206c696e6520696e20746865202e656e762066696c65206f66207960e18201527f6f75722070726f6a65637420287573696e6720666f727761726420736c6173686101018201527f6573293a0a4f50454e5a455050454c494e5f424153485f504154483d22433a2f6101218201527f50726f6772616d2046696c65732f4769742f62696e2f6261736822000000000061014182015261015c01919050565b7f4661696c656420746f2066696e64206c696e652077697468207072656669782081527f27000000000000000000000000000000000000000000000000000000000000006020820152600083516198378160218501602088016186d0565b7f2720696e206f75747075743a2000000000000000000000000000000000000000602191840191820152835161987481602e8401602088016186d0565b01602e01949350505050565b7f4661696c656420746f2072756e2075706772616465207361666574792076616c81527f69646174696f6e3a2000000000000000000000000000000000000000000000006020820152600082516194e38160298501602087016186d0565b7f55706772616465207361666574792076616c69646174696f6e206661696c656481527f3a0a00000000000000000000000000000000000000000000000000000000000060208201526000825161993c8160228501602087016186d0565b9190910160220192915050565b8181038181111561449657614496619437565b7f436f6e7472616374206e616d652000000000000000000000000000000000000081526000825161999481600e8501602087016186d0565b7f206d75737420626520696e2074686520666f726d6174204d79436f6e74726163600e9390910192830152507f742e736f6c3a4d79436f6e7472616374206f72204d79436f6e74726163742e73602e8201527f6f6c206f72206f75742f4d79436f6e74726163742e736f6c2f4d79436f6e7472604e8201527f6163742e6a736f6e000000000000000000000000000000000000000000000000606e820152607601919050565b8082018082111561449657614496619437565b7f53504458206c6963656e7365206964656e746966696572200000000000000000815260008351619a858160188501602088016186d0565b7f20696e20000000000000000000000000000000000000000000000000000000006018918401918201528351619ac281601c8401602088016186d0565b7f20646f6573206e6f74206c6f6f6b206c696b65206120737570706f7274656420601c92909101918201527f6c6963656e736520666f7220626c6f636b206578706c6f726572207665726966603c8201527f69636174696f6e2e205573652074686520606c6963656e73655479706560206f605c8201527f7074696f6e20746f20737065636966792061206c6963656e736520747970652c607c8201527f206f7220736574207468652060736b69704c6963656e73655479706560206f70609c8201527f74696f6e20746f2060747275656020746f20736b69702e00000000000000000060bc82015260d301949350505050565b60008251619bc88184602087016186d0565b7f2000000000000000000000000000000000000000000000000000000000000000920191825250600101919050565b7f406f70656e7a657070656c696e2f75706772616465732d636f72654000000000815260008251619c2f81601c8501602087016186d0565b91909101601c0192915050565b60006000198203619c4f57619c4f619437565b5060010190565b808202811582820484141761449657614496619437565b6001815b6001841115619ca857808504811115619c8c57619c8c619437565b6001841615619c9a57908102905b60019390931c928002619c71565b935093915050565b600082619cbf57506001614496565b81619ccc57506000614496565b8160018114619ce25760028114619cec57619d08565b6001915050614496565b60ff841115619cfd57619cfd619437565b50506001821b614496565b5060208310610133831016604e8410600b8410161715619d2b575081810a614496565b619d386000198484619c6d565b8060001904821115619d4c57619d4c619437565b029392505050565b600061458f8383619cb0565b600081619d6f57619d6f619437565b506000190190565b60008351619d898184602088016186d0565b7f3a000000000000000000000000000000000000000000000000000000000000009083019081528351619dc38160018401602088016186d0565b01600101949350505050565b818103600083128015838313168383128216171561784f5761784f61943756fe608060405234801561001057600080fd5b50604051610c9f380380610c9f83398101604081905261002f9161010d565b8181600361003d83826101ff565b50600461004a82826101ff565b50505050506102bd565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261007b57600080fd5b81516001600160401b0381111561009457610094610054565b604051601f8201601f19908116603f011681016001600160401b03811182821017156100c2576100c2610054565b6040528181528382016020018510156100da57600080fd5b60005b828110156100f9576020818601810151838301820152016100dd565b506000918101602001919091529392505050565b6000806040838503121561012057600080fd5b82516001600160401b0381111561013657600080fd5b6101428582860161006a565b602085015190935090506001600160401b0381111561016057600080fd5b61016c8582860161006a565b9150509250929050565b600181811c9082168061018a57607f821691505b6020821081036101aa57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156101fa57806000526020600020601f840160051c810160208510156101d75750805b601f840160051c820191505b818110156101f757600081556001016101e3565b50505b505050565b81516001600160401b0381111561021857610218610054565b61022c816102268454610176565b846101b0565b6020601f82116001811461026057600083156102485750848201515b600019600385901b1c1916600184901b1784556101f7565b600084815260208120601f198516915b828110156102905787850151825560209485019460019092019101610270565b50848210156102ae5786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b6109d3806102cc6000396000f3fe608060405234801561001057600080fd5b50600436106100be5760003560e01c806340c10f191161007657806395d89b411161005b57806395d89b4114610183578063a9059cbb1461018b578063dd62ed3e1461019e57600080fd5b806340c10f191461013857806370a082311461014d57600080fd5b806318160ddd116100a757806318160ddd1461010457806323b872dd14610116578063313ce5671461012957600080fd5b806306fdde03146100c3578063095ea7b3146100e1575b600080fd5b6100cb6101e4565b6040516100d891906107bf565b60405180910390f35b6100f46100ef366004610854565b610276565b60405190151581526020016100d8565b6002545b6040519081526020016100d8565b6100f461012436600461087e565b610290565b604051601281526020016100d8565b61014b610146366004610854565b6102b4565b005b61010861015b3660046108bb565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6100cb6102c2565b6100f4610199366004610854565b6102d1565b6101086101ac3660046108dd565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6060600380546101f390610910565b80601f016020809104026020016040519081016040528092919081815260200182805461021f90610910565b801561026c5780601f106102415761010080835404028352916020019161026c565b820191906000526020600020905b81548152906001019060200180831161024f57829003601f168201915b5050505050905090565b6000336102848185856102df565b60019150505b92915050565b60003361029e8582856102f1565b6102a98585856103c5565b506001949350505050565b6102be8282610470565b5050565b6060600480546101f390610910565b6000336102848185856103c5565b6102ec83838360016104cc565b505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146103bf57818110156103b0576040517ffb8f41b200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416600482015260248101829052604481018390526064015b60405180910390fd5b6103bf848484840360006104cc565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8316610415576040517f96c6fd1e000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff8216610465576040517fec442f05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b6102ec838383610614565b73ffffffffffffffffffffffffffffffffffffffff82166104c0576040517fec442f05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b6102be60008383610614565b73ffffffffffffffffffffffffffffffffffffffff841661051c576040517fe602df05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff831661056c576040517f94280d62000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260016020908152604080832093871683529290522082905580156103bf578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161060691815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff831661064c5780600260008282546106419190610963565b909155506106fe9050565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260208190526040902054818110156106d2576040517fe450d38c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8516600482015260248101829052604481018390526064016103a7565b73ffffffffffffffffffffffffffffffffffffffff841660009081526020819052604090209082900390555b73ffffffffffffffffffffffffffffffffffffffff821661072757600280548290039055610753565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090208054820190555b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516107b291815260200190565b60405180910390a3505050565b602081526000825180602084015260005b818110156107ed57602081860181015160408684010152016107d0565b5060006040828501015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011684010191505092915050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461084f57600080fd5b919050565b6000806040838503121561086757600080fd5b6108708361082b565b946020939093013593505050565b60008060006060848603121561089357600080fd5b61089c8461082b565b92506108aa6020850161082b565b929592945050506040919091013590565b6000602082840312156108cd57600080fd5b6108d68261082b565b9392505050565b600080604083850312156108f057600080fd5b6108f98361082b565b91506109076020840161082b565b90509250929050565b600181811c9082168061092457607f821691505b60208210810361095d577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b8082018082111561028a577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea26469706673582212207e804ca539d49155d2b6bc19268ce22f9f857027c75247d69fb0d56a089c93d464736f6c634300081a0033608060405234801561001057600080fd5b506040516112a63803806112a683398101604081905261002f91610110565b604051806040016040528060048152602001635a65746160e01b815250604051806040016040528060048152602001635a45544160e01b815250816003908161007891906101e2565b50600461008582826101e2565b5050506001600160a01b03821615806100a557506001600160a01b038116155b156100c35760405163e6c4247b60e01b815260040160405180910390fd5b600680546001600160a01b039384166001600160a01b031991821617909155600780549290931691161790556102a0565b80516001600160a01b038116811461010b57600080fd5b919050565b6000806040838503121561012357600080fd5b61012c836100f4565b915061013a602084016100f4565b90509250929050565b634e487b7160e01b600052604160045260246000fd5b600181811c9082168061016d57607f821691505b60208210810361018d57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156101dd57806000526020600020601f840160051c810160208510156101ba5750805b601f840160051c820191505b818110156101da57600081556001016101c6565b50505b505050565b81516001600160401b038111156101fb576101fb610143565b61020f816102098454610159565b84610193565b6020601f821160018114610243576000831561022b5750848201515b600019600385901b1c1916600184901b1784556101da565b600084815260208120601f198516915b828110156102735787850151825560209485019460019092019101610253565b50848210156102915786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b610ff7806102af6000396000f3fe608060405234801561001057600080fd5b506004361061011b5760003560e01c806342966c68116100b257806379cc679011610081578063a9059cbb11610066578063a9059cbb1461028e578063bff9662a146102a1578063dd62ed3e146102c157600080fd5b806379cc67901461027357806395d89b411461028657600080fd5b806342966c68146102025780635b1125911461021557806370a0823114610235578063779e3b631461026b57600080fd5b80631e458bee116100ee5780631e458bee1461018857806323b872dd1461019b578063313ce567146101ae578063328a01d0146101bd57600080fd5b806306fdde0314610120578063095ea7b31461013e57806315d57fd41461016157806318160ddd14610176575b600080fd5b610128610307565b6040516101359190610d97565b60405180910390f35b61015161014c366004610e2c565b610399565b6040519015158152602001610135565b61017461016f366004610e56565b6103b3565b005b6002545b604051908152602001610135565b610174610196366004610e89565b61057e565b6101516101a9366004610ebc565b610631565b60405160128152602001610135565b6007546101dd9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610135565b610174610210366004610ef9565b610655565b6006546101dd9073ffffffffffffffffffffffffffffffffffffffff1681565b61017a610243366004610f12565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b610174610662565b610174610281366004610e2c565b610786565b610128610837565b61015161029c366004610e2c565b610846565b6005546101dd9073ffffffffffffffffffffffffffffffffffffffff1681565b61017a6102cf366004610e56565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b60606003805461031690610f34565b80601f016020809104026020016040519081016040528092919081815260200182805461034290610f34565b801561038f5780601f106103645761010080835404028352916020019161038f565b820191906000526020600020905b81548152906001019060200180831161037257829003601f168201915b5050505050905090565b6000336103a7818585610854565b60019150505b92915050565b60075473ffffffffffffffffffffffffffffffffffffffff1633148015906103f3575060065473ffffffffffffffffffffffffffffffffffffffff163314155b15610431576040517fcdfcef970000000000000000000000000000000000000000000000000000000081523360048201526024015b60405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff82161580610468575073ffffffffffffffffffffffffffffffffffffffff8116155b1561049f576040517fe6c4247b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6006805473ffffffffffffffffffffffffffffffffffffffff8481167fffffffffffffffffffffffff0000000000000000000000000000000000000000928316811790935560058054918516919092161790556040805133815260208101929092527fe79965b5c67dcfb2cf5fe152715e4a7256cee62a3d5dd8484fd8a8539eb8beff910160405180910390a16040805133815273ffffffffffffffffffffffffffffffffffffffff831660208201527f1b9352454524a57a51f24f67dc66d898f616922cd1f7a12d73570ece12b1975c910160405180910390a15050565b60055473ffffffffffffffffffffffffffffffffffffffff1633146105d1576040517f3fe32fba000000000000000000000000000000000000000000000000000000008152336004820152602401610428565b6105db8383610866565b808373ffffffffffffffffffffffffffffffffffffffff167fc263b302aec62d29105026245f19e16f8e0137066ccd4a8bd941f716bd4096bb8460405161062491815260200190565b60405180910390a3505050565b60003361063f8582856108c6565b61064a858585610995565b506001949350505050565b61065f3382610a40565b50565b60075473ffffffffffffffffffffffffffffffffffffffff1633146106b5576040517fe700765e000000000000000000000000000000000000000000000000000000008152336004820152602401610428565b60065473ffffffffffffffffffffffffffffffffffffffff16610704576040517fe6c4247b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600654600780547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff90921691821790556040805133815260208101929092527f5104c9abdc7d111c2aeb4ce890ac70274a4be2ee83f46a62551be5e6ebc82dd0910160405180910390a1565b60055473ffffffffffffffffffffffffffffffffffffffff1633146107d9576040517f3fe32fba000000000000000000000000000000000000000000000000000000008152336004820152602401610428565b6107e38282610a9c565b8173ffffffffffffffffffffffffffffffffffffffff167f919f7e2092ffcc9d09f599be18d8152860b0c054df788a33bc549cdd9d0f15b18260405161082b91815260200190565b60405180910390a25050565b60606004805461031690610f34565b6000336103a7818585610995565b6108618383836001610ab1565b505050565b73ffffffffffffffffffffffffffffffffffffffff82166108b6576040517fec442f0500000000000000000000000000000000000000000000000000000000815260006004820152602401610428565b6108c260008383610bf9565b5050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811461098f5781811015610980576040517ffb8f41b200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff841660048201526024810182905260448101839052606401610428565b61098f84848484036000610ab1565b50505050565b73ffffffffffffffffffffffffffffffffffffffff83166109e5576040517f96c6fd1e00000000000000000000000000000000000000000000000000000000815260006004820152602401610428565b73ffffffffffffffffffffffffffffffffffffffff8216610a35576040517fec442f0500000000000000000000000000000000000000000000000000000000815260006004820152602401610428565b610861838383610bf9565b73ffffffffffffffffffffffffffffffffffffffff8216610a90576040517f96c6fd1e00000000000000000000000000000000000000000000000000000000815260006004820152602401610428565b6108c282600083610bf9565b610aa78233836108c6565b6108c28282610a40565b73ffffffffffffffffffffffffffffffffffffffff8416610b01576040517fe602df0500000000000000000000000000000000000000000000000000000000815260006004820152602401610428565b73ffffffffffffffffffffffffffffffffffffffff8316610b51576040517f94280d6200000000000000000000000000000000000000000000000000000000815260006004820152602401610428565b73ffffffffffffffffffffffffffffffffffffffff8085166000908152600160209081526040808320938716835292905220829055801561098f578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051610beb91815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff8316610c31578060026000828254610c269190610f87565b90915550610ce39050565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205481811015610cb7576040517fe450d38c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff851660048201526024810182905260448101839052606401610428565b73ffffffffffffffffffffffffffffffffffffffff841660009081526020819052604090209082900390555b73ffffffffffffffffffffffffffffffffffffffff8216610d0c57600280548290039055610d38565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090208054820190555b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161062491815260200190565b602081526000825180602084015260005b81811015610dc55760208186018101516040868401015201610da8565b5060006040828501015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011684010191505092915050565b803573ffffffffffffffffffffffffffffffffffffffff81168114610e2757600080fd5b919050565b60008060408385031215610e3f57600080fd5b610e4883610e03565b946020939093013593505050565b60008060408385031215610e6957600080fd5b610e7283610e03565b9150610e8060208401610e03565b90509250929050565b600080600060608486031215610e9e57600080fd5b610ea784610e03565b95602085013595506040909401359392505050565b600080600060608486031215610ed157600080fd5b610eda84610e03565b9250610ee860208501610e03565b929592945050506040919091013590565b600060208284031215610f0b57600080fd5b5035919050565b600060208284031215610f2457600080fd5b610f2d82610e03565b9392505050565b600181811c90821680610f4857607f821691505b602082108103610f81577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b808201808211156103ad577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea2646970667358221220085f01204b33dc17013c78c74fbca32a3da2c0b384ce7c8878c889551af28c6164736f6c634300081a003360a060405234801561001057600080fd5b506040516116fe3803806116fe83398101604081905261002f916101e5565b60016000556002805460ff191690556001600160a01b038316158061005b57506001600160a01b038216155b8061006d57506001600160a01b038116155b1561008b5760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b0383166080526100a3600082610134565b506100ce7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a82610134565b506100f97f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e483610134565b506101126000805160206116de83398151915282610134565b5061012b6000805160206116de83398151915283610134565b50505050610228565b60008281526001602090815260408083206001600160a01b038516845290915281205460ff166101bf5760008381526001602081815260408084206001600160a01b0387168086529252808420805460ff19169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45060016101c3565b5060005b92915050565b80516001600160a01b03811681146101e057600080fd5b919050565b6000806000606084860312156101fa57600080fd5b610203846101c9565b9250610211602085016101c9565b915061021f604085016101c9565b90509250925092565b60805161147f61025f6000396000818161019e0152818161050001528181610562015281816108f70152610959015261147f6000f3fe608060405234801561001057600080fd5b506004361061016c5760003560e01c806385f438c1116100cd578063c8a0236211610081578063d936547e11610066578063d936547e14610355578063d9caed1214610378578063e63ab1e91461038b57600080fd5b8063c8a023621461032f578063d547741f1461034257600080fd5b80639a590427116100b25780639a590427146103015780639b19251a14610314578063a217fddf1461032757600080fd5b806385f438c11461029457806391d14854146102bb57600080fd5b806336568abe11610124578063570618e111610109578063570618e11461025a5780635c975abb146102815780638456cb591461028c57600080fd5b806336568abe1461023f5780633f4ba83a1461025257600080fd5b806321fc65f21161015557806321fc65f2146101e5578063248a9ca3146101fa5780632f2ff15d1461022c57600080fd5b806301ffc9a714610171578063116191b614610199575b600080fd5b61018461017f36600461118a565b6103b2565b60405190151581526020015b60405180910390f35b6101c07f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610190565b6101f86101f33660046111f5565b61044b565b005b61021e610208366004611292565b6000908152600160208190526040909120015490565b604051908152602001610190565b6101f861023a3660046112ab565b61064c565b6101f861024d3660046112ab565b610678565b6101f86106d6565b61021e7f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a81565b60025460ff16610184565b6101f861070b565b61021e7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b6101846102c93660046112ab565b600091825260016020908152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b6101f861030f3660046112d7565b61073d565b6101f86103223660046112d7565b6107be565b61021e600081565b6101f861033d3660046111f5565b610842565b6101f86103503660046112ab565b610a29565b6101846103633660046112d7565b60036020526000908152604090205460ff1681565b6101f86103863660046112f2565b610a4f565b61021e7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061044557507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b610453610b7b565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461047d81610bbe565b610485610bc8565b73ffffffffffffffffffffffffffffffffffffffff861660009081526003602052604090205460ff166104e4576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61052573ffffffffffffffffffffffffffffffffffffffff87167f000000000000000000000000000000000000000000000000000000000000000086610c07565b6040517f5131ab5900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690635131ab599061059f9089908990899089908990600401611378565b600060405180830381600087803b1580156105b957600080fd5b505af11580156105cd573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167f85b5be9cf454e05e0bddf49315178102227c312078eefa3c00294fb4d912ae4e868686604051610632939291906113d5565b60405180910390a3506106456001600055565b5050505050565b6000828152600160208190526040909120015461066881610bbe565b6106728383610c94565b50505050565b73ffffffffffffffffffffffffffffffffffffffff811633146106c7576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6106d18282610d41565b505050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61070081610bbe565b610708610de2565b50565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61073581610bbe565b610708610e41565b7f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a61076781610bbe565b73ffffffffffffffffffffffffffffffffffffffff8216600081815260036020526040808220805460ff19169055517f51085ddf9ebdded84b76e829eb58c4078e4b5bdf97d9a94723f336039da467919190a25050565b7f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a6107e881610bbe565b73ffffffffffffffffffffffffffffffffffffffff8216600081815260036020526040808220805460ff19166001179055517faab7954e9d246b167ef88aeddad35209ca2489d95a8aeb59e288d9b19fae5a549190a25050565b61084a610b7b565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461087481610bbe565b61087c610bc8565b73ffffffffffffffffffffffffffffffffffffffff861660009081526003602052604090205460ff166108db576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61091c73ffffffffffffffffffffffffffffffffffffffff87167f000000000000000000000000000000000000000000000000000000000000000086610c07565b6040517fb8969bd400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063b8969bd4906109969089908990899089908990600401611378565b600060405180830381600087803b1580156109b057600080fd5b505af11580156109c4573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fb9d4efa96044e5f5e03e696fa9ae2ff66911cc27e8a637c3627c75bc5b2241c8868686604051610632939291906113d5565b60008281526001602081905260409091200154610a4581610bbe565b6106728383610d41565b610a57610b7b565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e4610a8181610bbe565b610a89610bc8565b73ffffffffffffffffffffffffffffffffffffffff841660009081526003602052604090205460ff16610ae8576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610b0973ffffffffffffffffffffffffffffffffffffffff85168484610c07565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f9b1bfa7fa9ee420a16e124f794c35ac9f90472acc99140eb2f6447c714cad8eb84604051610b6891815260200190565b60405180910390a3506106d16001600055565b600260005403610bb7576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b6107088133610e7e565b60025460ff1615610c05576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6040805173ffffffffffffffffffffffffffffffffffffffff8416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb000000000000000000000000000000000000000000000000000000001790526106d1908490610f0f565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff16610d3957600083815260016020818152604080842073ffffffffffffffffffffffffffffffffffffffff87168086529252808420805460ff19169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a4506001610445565b506000610445565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff1615610d3957600083815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff86168085529252808320805460ff1916905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a4506001610445565b610dea610fa5565b6002805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b610e49610bc8565b6002805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258610e173390565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16610f0b576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82166004820152602481018390526044015b60405180910390fd5b5050565b6000610f3173ffffffffffffffffffffffffffffffffffffffff841683610fe1565b90508051600014158015610f56575080806020019051810190610f5491906113f8565b155b156106d1576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84166004820152602401610f02565b60025460ff16610c05576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6060610fef83836000610ff6565b9392505050565b606081471015611034576040517fcd786059000000000000000000000000000000000000000000000000000000008152306004820152602401610f02565b6000808573ffffffffffffffffffffffffffffffffffffffff16848660405161105d919061141a565b60006040518083038185875af1925050503d806000811461109a576040519150601f19603f3d011682016040523d82523d6000602084013e61109f565b606091505b50915091506110af8683836110b9565b9695505050505050565b6060826110ce576110c982611148565b610fef565b81511580156110f2575073ffffffffffffffffffffffffffffffffffffffff84163b155b15611141576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85166004820152602401610f02565b5080610fef565b8051156111585780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006020828403121561119c57600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610fef57600080fd5b803573ffffffffffffffffffffffffffffffffffffffff811681146111f057600080fd5b919050565b60008060008060006080868803121561120d57600080fd5b611216866111cc565b9450611224602087016111cc565b935060408601359250606086013567ffffffffffffffff81111561124757600080fd5b8601601f8101881361125857600080fd5b803567ffffffffffffffff81111561126f57600080fd5b88602082840101111561128157600080fd5b959894975092955050506020019190565b6000602082840312156112a457600080fd5b5035919050565b600080604083850312156112be57600080fd5b823591506112ce602084016111cc565b90509250929050565b6000602082840312156112e957600080fd5b610fef826111cc565b60008060006060848603121561130757600080fd5b611310846111cc565b925061131e602085016111cc565b929592945050506040919091013590565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff8616815273ffffffffffffffffffffffffffffffffffffffff851660208201528360408201526080606082015260006113ca60808301848661132f565b979650505050505050565b8381526040602082015260006113ef60408301848661132f565b95945050505050565b60006020828403121561140a57600080fd5b81518015158114610fef57600080fd5b6000825160005b8181101561143b5760208186018101518583015201611421565b50600092019182525091905056fea2646970667358221220dc54ce548a1f0bf8ba5e86cc53c6d822e55eee543451395733c659359bac8dd164736f6c634300081a00338619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a60c060405260001960035534801561001657600080fd5b5060405161155a38038061155a83398101604081905261003591610220565b60016000819055805460ff19169055838383836001600160a01b038416158061006557506001600160a01b038316155b8061007757506001600160a01b038216155b8061008957506001600160a01b038116155b156100a75760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b03808516608052831660a0526100c5600082610154565b506100f07f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e483610154565b5061011b7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb83610154565b506101467f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a82610154565b505050505050505050610274565b60008281526002602090815260408083206001600160a01b038516845290915281205460ff166101fa5760008381526002602090815260408083206001600160a01b03861684529091529020805460ff191660011790556101b23390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45060016101fe565b5060005b92915050565b80516001600160a01b038116811461021b57600080fd5b919050565b6000806000806080858703121561023657600080fd5b61023f85610204565b935061024d60208601610204565b925061025b60408601610204565b915061026960608601610204565b905092959194509250565b60805160a0516112826102d86000396000818161021d01528181610531015281816108240152818161097b01528181610ad00152610bf20152600081816101d1015281816104a1015281816105040152818161079401526107f701526112826000f3fe608060405234801561001057600080fd5b50600436106101775760003560e01c80635e3e9fef116100d857806391d148541161008c578063d547741f11610066578063d547741f14610386578063d5abeb0114610399578063e63ab1e9146103a257600080fd5b806391d1485414610311578063a217fddf14610357578063a783c7891461035f57600080fd5b8063743e0c9b116100bd578063743e0c9b146102cf5780638456cb59146102e257806385f438c1146102ea57600080fd5b80635e3e9fef146102a95780636f8b44b0146102bc57600080fd5b8063248a9ca31161012f57806336568abe1161011457806336568abe146102835780633f4ba83a146102965780635c975abb1461029e57600080fd5b8063248a9ca31461023f5780632f2ff15d1461027057600080fd5b8063106e629011610160578063106e6290146101b9578063116191b6146101cc57806321e093b11461021857600080fd5b806301ffc9a71461017c57806302d5c899146101a4575b600080fd5b61018f61018a366004610fb4565b6103c9565b60405190151581526020015b60405180910390f35b6101b76101b2366004611026565b610462565b005b6101b76101c73660046110b8565b6105f7565b6101f37f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161019b565b6101f37f000000000000000000000000000000000000000000000000000000000000000081565b61026261024d3660046110eb565b60009081526002602052604090206001015490565b60405190815260200161019b565b6101b761027e366004611104565b61069c565b6101b7610291366004611104565b6106c7565b6101b7610720565b60015460ff1661018f565b6101b76102b7366004611026565b610755565b6101b76102ca3660046110eb565b6108d0565b6101b76102dd3660046110eb565b61093e565b6101b76109e8565b6102627f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b61018f61031f366004611104565b600091825260026020908152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b610262600081565b6102627f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb81565b6101b7610394366004611104565b610a1a565b61026260035481565b6102627f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061045c57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b61046a610a3f565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461049481610a82565b61049c610a8c565b6104c77f00000000000000000000000000000000000000000000000000000000000000008684610acb565b6040517fb8969bd400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063b8969bd490610561907f0000000000000000000000000000000000000000000000000000000000000000908a908a908a908a90600401611179565b600060405180830381600087803b15801561057b57600080fd5b505af115801561058f573d6000803e3d6000fd5b505050508573ffffffffffffffffffffffffffffffffffffffff167fba96f26bdda53eb8c8ba39045dfb4ff39753fbc7a6edcf250a88e75e78d102fe8686866040516105dd939291906111d6565b60405180910390a2506105f06001600055565b5050505050565b6105ff610a3f565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461062981610a82565b610631610a8c565b61063c848484610acb565b8373ffffffffffffffffffffffffffffffffffffffff167f884edad9ce6fa2440d8a54cc123490eb96d2768479d49ff9c7366125a94243648460405161068491815260200190565b60405180910390a2506106976001600055565b505050565b6000828152600260205260409020600101546106b781610a82565b6106c18383610c53565b50505050565b73ffffffffffffffffffffffffffffffffffffffff81163314610716576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6106978282610d53565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61074a81610a82565b610752610e12565b50565b61075d610a3f565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461078781610a82565b61078f610a8c565b6107ba7f00000000000000000000000000000000000000000000000000000000000000008684610acb565b6040517f5131ab5900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690635131ab5990610854907f0000000000000000000000000000000000000000000000000000000000000000908a908a908a908a90600401611179565b600060405180830381600087803b15801561086e57600080fd5b505af1158015610882573d6000803e3d6000fd5b505050508573ffffffffffffffffffffffffffffffffffffffff167f7772f56296d3a5202974a45c61c9188d844ab4d6eeb18c851e4b8d5384ca6ced8686866040516105dd939291906111d6565b7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb6108fa81610a82565b610902610a8c565b60038290556040518281527f7810bd47de260c3e9ee10061cf438099dd12256c79485f12f94dbccc981e806c9060200160405180910390a15050565b610946610a8c565b6040517f79cc6790000000000000000000000000000000000000000000000000000000008152336004820152602481018290527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16906379cc679090604401600060405180830381600087803b1580156109d457600080fd5b505af11580156105f0573d6000803e3d6000fd5b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610a1281610a82565b610752610e8f565b600082815260026020526040902060010154610a3581610a82565b6106c18383610d53565b600260005403610a7b576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b6107528133610ee8565b60015460ff1615610ac9576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6003547f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b39573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b5d91906111f9565b610b679084611212565b1115610b9f576040517fc30436e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f1e458bee00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff848116600483015260248201849052604482018390527f00000000000000000000000000000000000000000000000000000000000000001690631e458bee90606401600060405180830381600087803b158015610c3657600080fd5b505af1158015610c4a573d6000803e3d6000fd5b50505050505050565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff16610d4b57600083815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff86168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055610ce93390565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a450600161045c565b50600061045c565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff1615610d4b57600083815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8616808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a450600161045c565b610e1a610f78565b600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b610e97610a8c565b600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016811790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25833610e65565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16610f74576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff821660048201526024810183905260440160405180910390fd5b5050565b60015460ff16610ac9576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060208284031215610fc657600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610ff657600080fd5b9392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461102157600080fd5b919050565b60008060008060006080868803121561103e57600080fd5b61104786610ffd565b945060208601359350604086013567ffffffffffffffff81111561106a57600080fd5b8601601f8101881361107b57600080fd5b803567ffffffffffffffff81111561109257600080fd5b8860208284010111156110a457600080fd5b959894975060200195606001359392505050565b6000806000606084860312156110cd57600080fd5b6110d684610ffd565b95602085013595506040909401359392505050565b6000602082840312156110fd57600080fd5b5035919050565b6000806040838503121561111757600080fd5b8235915061112760208401610ffd565b90509250929050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff8616815273ffffffffffffffffffffffffffffffffffffffff851660208201528360408201526080606082015260006111cb608083018486611130565b979650505050505050565b8381526040602082015260006111f0604083018486611130565b95945050505050565b60006020828403121561120b57600080fd5b5051919050565b8082018082111561045c577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea2646970667358221220de5fa55e0ca79ea2f08903481d01ea00bbbf346b9cfba44e12a2dd6f3a6f2e8a64736f6c634300081a00336080604052348015600f57600080fd5b506001600055610d3a806100246000396000f3fe6080604052600436106100635760003560e01c8063c513169111610040578063c5131691146100c1578063e04d4f97146100e1578063f05b6abf146100f457005b8063357fc5a21461006c5780636ed701691461008c5780638fcaa0b5146100a157005b3661006a57005b005b34801561007857600080fd5b5061006a6100873660046106c0565b610114565b34801561009857600080fd5b5061006a6101aa565b3480156100ad57600080fd5b5061006a6100bc3660046106fc565b6101df565b3480156100cd57600080fd5b5061006a6100dc3660046106c0565b61021e565b61006a6100ef366004610895565b6102f9565b34801561010057600080fd5b5061006a61010f366004610981565b61033d565b61011c610372565b61013e73ffffffffffffffffffffffffffffffffffffffff83163383866103b5565b604080513381526020810185905273ffffffffffffffffffffffffffffffffffffffff848116828401528316606082015290517f2b58128f24a9f59127cc5b5430d70542b22220f2d9adaa86e442b816ab98af609181900360800190a16101a56001600055565b505050565b6040513381527fbcaadb46b82a48af60b608f58959ae6b8310d1b0a0d094c2e9ec3208ed39f2a09060200160405180910390a1565b7f0d3f65f00e631663aa85c96330b5c7a83bb29af3630c0063776f985edc3037aa33838360405161021293929190610a6b565b60405180910390a15050565b610226610372565b6000610233600285610ad5565b90508060000361026f576040517f1f2a200500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61029173ffffffffffffffffffffffffffffffffffffffff84163384846103b5565b604080513381526020810183905273ffffffffffffffffffffffffffffffffffffffff858116828401528416606082015290517f2b58128f24a9f59127cc5b5430d70542b22220f2d9adaa86e442b816ab98af609181900360800190a1506101a56001600055565b7f1f1ff1f5fb41346850b2f5c04e6c767e2f1c8a525c5c0c5cdb60cdf3ca5f62fa3334858585604051610330959493929190610b7e565b60405180910390a1505050565b7f74a53cd528a921fca7dbdee62f86819051d3cc98f214951f4238e8843f20b146338484846040516103309493929190610c08565b6002600054036103ae576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b6040805173ffffffffffffffffffffffffffffffffffffffff85811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd0000000000000000000000000000000000000000000000000000000017905261044a908590610450565b50505050565b600061047273ffffffffffffffffffffffffffffffffffffffff8416836104eb565b905080516000141580156104975750808060200190518101906104959190610ccb565b155b156101a5576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff841660048201526024015b60405180910390fd5b60606104f983836000610500565b9392505050565b60608147101561053e576040517fcd7860590000000000000000000000000000000000000000000000000000000081523060048201526024016104e2565b6000808573ffffffffffffffffffffffffffffffffffffffff1684866040516105679190610ce8565b60006040518083038185875af1925050503d80600081146105a4576040519150601f19603f3d011682016040523d82523d6000602084013e6105a9565b606091505b50915091506105b98683836105c3565b9695505050505050565b6060826105d8576105d382610652565b6104f9565b81511580156105fc575073ffffffffffffffffffffffffffffffffffffffff84163b155b1561064b576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff851660048201526024016104e2565b50806104f9565b8051156106625780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50565b803573ffffffffffffffffffffffffffffffffffffffff811681146106bb57600080fd5b919050565b6000806000606084860312156106d557600080fd5b833592506106e560208501610697565b91506106f360408501610697565b90509250925092565b6000806020838503121561070f57600080fd5b823567ffffffffffffffff81111561072657600080fd5b8301601f8101851361073757600080fd5b803567ffffffffffffffff81111561074e57600080fd5b85602082840101111561076057600080fd5b6020919091019590945092505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156107e6576107e6610770565b604052919050565b600082601f8301126107ff57600080fd5b813567ffffffffffffffff81111561081957610819610770565b61084a60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8401160161079f565b81815284602083860101111561085f57600080fd5b816020850160208301376000918101602001919091529392505050565b801515811461069457600080fd5b80356106bb8161087c565b6000806000606084860312156108aa57600080fd5b833567ffffffffffffffff8111156108c157600080fd5b6108cd868287016107ee565b9350506020840135915060408401356108e58161087c565b809150509250925092565b600067ffffffffffffffff82111561090a5761090a610770565b5060051b60200190565b600082601f83011261092557600080fd5b8135610938610933826108f0565b61079f565b8082825260208201915060208360051b86010192508583111561095a57600080fd5b602085015b8381101561097757803583526020928301920161095f565b5095945050505050565b60008060006060848603121561099657600080fd5b833567ffffffffffffffff8111156109ad57600080fd5b8401601f810186136109be57600080fd5b80356109cc610933826108f0565b8082825260208201915060208360051b8501019250888311156109ee57600080fd5b602084015b83811015610a3057803567ffffffffffffffff811115610a1257600080fd5b610a218b6020838901016107ee565b845250602092830192016109f3565b509550505050602084013567ffffffffffffffff811115610a5057600080fd5b610a5c86828701610914565b9250506106f36040850161088a565b73ffffffffffffffffffffffffffffffffffffffff8416815260406020820152816040820152818360608301376000818301606090810191909152601f9092017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016010192915050565b600082610b0b577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60005b83811015610b2b578181015183820152602001610b13565b50506000910152565b60008151808452610b4c816020860160208601610b10565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b73ffffffffffffffffffffffffffffffffffffffff8616815284602082015260a060408201526000610bb360a0830186610b34565b6060830194909452509015156080909101529392505050565b600081518084526020840193506020830160005b82811015610bfe578151865260209586019590910190600101610be0565b5093949350505050565b60006080820173ffffffffffffffffffffffffffffffffffffffff871683526080602084015280865180835260a08501915060a08160051b86010192506020880160005b82811015610c9b577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60878603018452610c86858351610b34565b94506020938401939190910190600101610c4c565b505050508281036040840152610cb18186610bcc565b915050610cc2606083018415159052565b95945050505050565b600060208284031215610cdd57600080fd5b81516104f98161087c565b60008251610cfa818460208701610b10565b919091019291505056fea2646970667358221220556072e1abafc3c4063b8cce832228b4f309b93726aaa6a6dfab20cb880c6d1864736f6c634300081a0033a264697066735822122046e98cccbaf070131f4e0ae9a68d5fcaf4a60e0dd7665edb0dd60abca499705764736f6c634300081a0033", } // GatewayEVMTestABI is the input ABI used to generate the binding from. @@ -2718,6 +2718,294 @@ func (_GatewayEVMTest *GatewayEVMTestFilterer) ParseRevertedWithERC20(log types. return event, nil } +// GatewayEVMTestUnwhitelistedIterator is returned from FilterUnwhitelisted and is used to iterate over the raw logs and unpacked data for Unwhitelisted events raised by the GatewayEVMTest contract. +type GatewayEVMTestUnwhitelistedIterator struct { + Event *GatewayEVMTestUnwhitelisted // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *GatewayEVMTestUnwhitelistedIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(GatewayEVMTestUnwhitelisted) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(GatewayEVMTestUnwhitelisted) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *GatewayEVMTestUnwhitelistedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *GatewayEVMTestUnwhitelistedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// GatewayEVMTestUnwhitelisted represents a Unwhitelisted event raised by the GatewayEVMTest contract. +type GatewayEVMTestUnwhitelisted struct { + Token common.Address + Raw types.Log // Blockchain specific contextual infos +} + +// FilterUnwhitelisted is a free log retrieval operation binding the contract event 0x51085ddf9ebdded84b76e829eb58c4078e4b5bdf97d9a94723f336039da46791. +// +// Solidity: event Unwhitelisted(address indexed token) +func (_GatewayEVMTest *GatewayEVMTestFilterer) FilterUnwhitelisted(opts *bind.FilterOpts, token []common.Address) (*GatewayEVMTestUnwhitelistedIterator, error) { + + var tokenRule []interface{} + for _, tokenItem := range token { + tokenRule = append(tokenRule, tokenItem) + } + + logs, sub, err := _GatewayEVMTest.contract.FilterLogs(opts, "Unwhitelisted", tokenRule) + if err != nil { + return nil, err + } + return &GatewayEVMTestUnwhitelistedIterator{contract: _GatewayEVMTest.contract, event: "Unwhitelisted", logs: logs, sub: sub}, nil +} + +// WatchUnwhitelisted is a free log subscription operation binding the contract event 0x51085ddf9ebdded84b76e829eb58c4078e4b5bdf97d9a94723f336039da46791. +// +// Solidity: event Unwhitelisted(address indexed token) +func (_GatewayEVMTest *GatewayEVMTestFilterer) WatchUnwhitelisted(opts *bind.WatchOpts, sink chan<- *GatewayEVMTestUnwhitelisted, token []common.Address) (event.Subscription, error) { + + var tokenRule []interface{} + for _, tokenItem := range token { + tokenRule = append(tokenRule, tokenItem) + } + + logs, sub, err := _GatewayEVMTest.contract.WatchLogs(opts, "Unwhitelisted", tokenRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(GatewayEVMTestUnwhitelisted) + if err := _GatewayEVMTest.contract.UnpackLog(event, "Unwhitelisted", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseUnwhitelisted is a log parse operation binding the contract event 0x51085ddf9ebdded84b76e829eb58c4078e4b5bdf97d9a94723f336039da46791. +// +// Solidity: event Unwhitelisted(address indexed token) +func (_GatewayEVMTest *GatewayEVMTestFilterer) ParseUnwhitelisted(log types.Log) (*GatewayEVMTestUnwhitelisted, error) { + event := new(GatewayEVMTestUnwhitelisted) + if err := _GatewayEVMTest.contract.UnpackLog(event, "Unwhitelisted", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// GatewayEVMTestWhitelistedIterator is returned from FilterWhitelisted and is used to iterate over the raw logs and unpacked data for Whitelisted events raised by the GatewayEVMTest contract. +type GatewayEVMTestWhitelistedIterator struct { + Event *GatewayEVMTestWhitelisted // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *GatewayEVMTestWhitelistedIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(GatewayEVMTestWhitelisted) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(GatewayEVMTestWhitelisted) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *GatewayEVMTestWhitelistedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *GatewayEVMTestWhitelistedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// GatewayEVMTestWhitelisted represents a Whitelisted event raised by the GatewayEVMTest contract. +type GatewayEVMTestWhitelisted struct { + Token common.Address + Raw types.Log // Blockchain specific contextual infos +} + +// FilterWhitelisted is a free log retrieval operation binding the contract event 0xaab7954e9d246b167ef88aeddad35209ca2489d95a8aeb59e288d9b19fae5a54. +// +// Solidity: event Whitelisted(address indexed token) +func (_GatewayEVMTest *GatewayEVMTestFilterer) FilterWhitelisted(opts *bind.FilterOpts, token []common.Address) (*GatewayEVMTestWhitelistedIterator, error) { + + var tokenRule []interface{} + for _, tokenItem := range token { + tokenRule = append(tokenRule, tokenItem) + } + + logs, sub, err := _GatewayEVMTest.contract.FilterLogs(opts, "Whitelisted", tokenRule) + if err != nil { + return nil, err + } + return &GatewayEVMTestWhitelistedIterator{contract: _GatewayEVMTest.contract, event: "Whitelisted", logs: logs, sub: sub}, nil +} + +// WatchWhitelisted is a free log subscription operation binding the contract event 0xaab7954e9d246b167ef88aeddad35209ca2489d95a8aeb59e288d9b19fae5a54. +// +// Solidity: event Whitelisted(address indexed token) +func (_GatewayEVMTest *GatewayEVMTestFilterer) WatchWhitelisted(opts *bind.WatchOpts, sink chan<- *GatewayEVMTestWhitelisted, token []common.Address) (event.Subscription, error) { + + var tokenRule []interface{} + for _, tokenItem := range token { + tokenRule = append(tokenRule, tokenItem) + } + + logs, sub, err := _GatewayEVMTest.contract.WatchLogs(opts, "Whitelisted", tokenRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(GatewayEVMTestWhitelisted) + if err := _GatewayEVMTest.contract.UnpackLog(event, "Whitelisted", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseWhitelisted is a log parse operation binding the contract event 0xaab7954e9d246b167ef88aeddad35209ca2489d95a8aeb59e288d9b19fae5a54. +// +// Solidity: event Whitelisted(address indexed token) +func (_GatewayEVMTest *GatewayEVMTestFilterer) ParseWhitelisted(log types.Log) (*GatewayEVMTestWhitelisted, error) { + event := new(GatewayEVMTestWhitelisted) + if err := _GatewayEVMTest.contract.UnpackLog(event, "Whitelisted", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + // GatewayEVMTestWithdrawIterator is returned from FilterWithdraw and is used to iterate over the raw logs and unpacked data for Withdraw events raised by the GatewayEVMTest contract. type GatewayEVMTestWithdrawIterator struct { Event *GatewayEVMTestWithdraw // Event containing the contract specifics and raw log diff --git a/v2/pkg/gatewayevmechidnatest.sol/gatewayevmechidnatest.go b/v2/pkg/gatewayevmechidnatest.sol/gatewayevmechidnatest.go index 277caee5..be0a0638 100644 --- a/v2/pkg/gatewayevmechidnatest.sol/gatewayevmechidnatest.go +++ b/v2/pkg/gatewayevmechidnatest.sol/gatewayevmechidnatest.go @@ -31,8 +31,8 @@ var ( // GatewayEVMEchidnaTestMetaData contains all meta data concerning the GatewayEVMEchidnaTest contract. var GatewayEVMEchidnaTestMetaData = &bind.MetaData{ - ABI: "[{\"type\":\"constructor\",\"inputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"ASSET_HANDLER_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"DEFAULT_ADMIN_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"PAUSER_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"TSS_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"UPGRADE_INTERFACE_VERSION\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"call\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"custody\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"deposit\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"deposit\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"depositAndCall\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"depositAndCall\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"echidnaCaller\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"execute\",\"inputs\":[{\"name\":\"destination\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"executeRevert\",\"inputs\":[{\"name\":\"destination\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"executeWithERC20\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"getRoleAdmin\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"grantRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"hasRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"initialize\",\"inputs\":[{\"name\":\"tssAddress_\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"zetaToken_\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"admin_\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"pause\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"paused\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"proxiableUUID\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"renounceRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"callerConfirmation\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"revertWithERC20\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"revokeRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setConnector\",\"inputs\":[{\"name\":\"zetaConnector_\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setCustody\",\"inputs\":[{\"name\":\"custody_\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"supportsInterface\",\"inputs\":[{\"name\":\"interfaceId\",\"type\":\"bytes4\",\"internalType\":\"bytes4\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"testERC20\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractTestERC20\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"testExecuteWithERC20\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"tssAddress\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"unpause\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"upgradeToAndCall\",\"inputs\":[{\"name\":\"newImplementation\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"zetaConnector\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"zetaToken\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"event\",\"name\":\"Call\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"receiver\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Deposit\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"receiver\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"asset\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Executed\",\"inputs\":[{\"name\":\"destination\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ExecutedWithERC20\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Initialized\",\"inputs\":[{\"name\":\"version\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Paused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Reverted\",\"inputs\":[{\"name\":\"destination\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RevertedWithERC20\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleAdminChanged\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"previousAdminRole\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"newAdminRole\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleGranted\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleRevoked\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Unpaused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Upgraded\",\"inputs\":[{\"name\":\"implementation\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"AccessControlBadConfirmation\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"AccessControlUnauthorizedAccount\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"neededRole\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"type\":\"error\",\"name\":\"AddressEmptyCode\",\"inputs\":[{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"AddressInsufficientBalance\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"ApprovalFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ConnectorInitialized\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"CustodyInitialized\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"DepositFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ERC1967InvalidImplementation\",\"inputs\":[{\"name\":\"implementation\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"ERC1967NonPayable\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"EnforcedPause\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ExecutionFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ExpectedPause\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"FailedInnerCall\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientERC20Amount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientETHAmount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidInitialization\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NotInitializing\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ReentrancyGuardReentrantCall\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"SafeERC20FailedOperation\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"UUPSUnauthorizedCallContext\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"UUPSUnsupportedProxiableUUID\",\"inputs\":[{\"name\":\"slot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"type\":\"error\",\"name\":\"ZeroAddress\",\"inputs\":[]}]", - Bin: "0x60a060405230608052600580546001600160a01b0319163317905534801561002657600080fd5b5061002f610154565b600554600180546001600160a01b039092166001600160a01b031992831617905560028054610123921691909117905560405161006b90610206565b60408082526004908201819052631d195cdd60e21b606083015260806020830181905282015263151154d560e21b60a082015260c001604051809103906000f0801580156100bd573d6000803e3d6000fd5b50600480546001600160a01b0319166001600160a01b039283161790556001546040513092919091169082906100f290610213565b6001600160a01b03938416815291831660208301529091166040820152606001604051809103906000f08015801561012e573d6000803e3d6000fd5b50600080546001600160a01b0319166001600160a01b0392909216919091179055610220565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156101a45760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146102035780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b610c9f806135b283390190565b61140b8061425183390190565b608051613369610249600039600081816120e20152818161210b01526124da01526133696000f3fe6080604052600436106102345760003560e01c80635c975abb11610138578063ad3cb1cc116100b0578063d547741f1161007f578063e63ab1e911610064578063e63ab1e9146106ff578063f340fa0114610733578063f45346dc1461074657600080fd5b8063d547741f146106bf578063dda79b75146106df57600080fd5b8063ad3cb1cc14610616578063ae7a3a6f1461065f578063b8969bd41461067f578063c0c53b8b1461069f57600080fd5b80638456cb591161010757806391d14854116100ec57806391d1485414610568578063a217fddf146105cd578063a783c789146105e257600080fd5b80638456cb59146105335780638c6f037f1461054857600080fd5b80635c975abb146104885780635d62c860146104bf5780636ab90f9b146104f357806381100bf01461051357600080fd5b806335c018db116101cb5780634f1ef2861161019a57806352d1902d1161017f57806352d1902d1461043357806357bec62f146104485780635b1125911461046857600080fd5b80634f1ef286146104005780635131ab591461041357600080fd5b806335c018db1461039857806336568abe146103ab5780633c2f05a8146103cb5780633f4ba83a146103eb57600080fd5b806321e093b11161020757806321e093b1146102d0578063248a9ca31461030857806329c59b5d146103655780632f2ff15d1461037857600080fd5b806301ffc9a71461023957806310188aef1461026e5780631b8b921d146102905780631cff79cd146102b0575b600080fd5b34801561024557600080fd5b50610259610254366004612d53565b610766565b60405190151581526020015b60405180910390f35b34801561027a57600080fd5b5061028e610289366004612db1565b6107ff565b005b34801561029c57600080fd5b5061028e6102ab366004612e15565b6108f3565b6102c36102be366004612e15565b61097e565b6040516102659190612ed6565b3480156102dc57600080fd5b506003546102f0906001600160a01b031681565b6040516001600160a01b039091168152602001610265565b34801561031457600080fd5b50610357610323366004612ee9565b60009081527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052604090206001015490565b604051908152602001610265565b61028e610373366004612e15565b610a81565b34801561038457600080fd5b5061028e610393366004612f02565b610c14565b61028e6103a6366004612e15565b610c5e565b3480156103b757600080fd5b5061028e6103c6366004612f02565b610e4d565b3480156103d757600080fd5b506004546102f0906001600160a01b031681565b3480156103f757600080fd5b5061028e610e99565b61028e61040e366004612f5d565b610ece565b34801561041f57600080fd5b5061028e61042e366004613064565b610eed565b34801561043f57600080fd5b50610357611206565b34801561045457600080fd5b506002546102f0906001600160a01b031681565b34801561047457600080fd5b506001546102f0906001600160a01b031681565b34801561049457600080fd5b507fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff16610259565b3480156104cb57600080fd5b506103577f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b981565b3480156104ff57600080fd5b5061028e61050e3660046130d3565b611235565b34801561051f57600080fd5b506005546102f0906001600160a01b031681565b34801561053f57600080fd5b5061028e611360565b34801561055457600080fd5b5061028e61056336600461312d565b611392565b34801561057457600080fd5b50610259610583366004612f02565b60009182527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408084206001600160a01b0393909316845291905290205460ff1690565b3480156105d957600080fd5b50610357600081565b3480156105ee57600080fd5b506103577f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb81565b34801561062257600080fd5b506102c36040518060400160405280600581526020017f352e302e3000000000000000000000000000000000000000000000000000000081525081565b34801561066b57600080fd5b5061028e61067a366004612db1565b6114a8565b34801561068b57600080fd5b5061028e61069a366004613064565b61159c565b3480156106ab57600080fd5b5061028e6106ba36600461317f565b611755565b3480156106cb57600080fd5b5061028e6106da366004612f02565b611a0a565b3480156106eb57600080fd5b506000546102f0906001600160a01b031681565b34801561070b57600080fd5b506103577f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b61028e610741366004612db1565b611a4e565b34801561075257600080fd5b5061028e6107613660046131c2565b611be3565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b0000000000000000000000000000000000000000000000000000000014806107f957507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b600061080a81611cde565b6001600160a01b03821661084a576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002546001600160a01b03161561088d576040517f0c8dc01600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6108b77f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b983611ce8565b5050600280547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6108fb611dd5565b610903611e33565b826001600160a01b0316336001600160a01b03167f2a21062ee9199c2e205622999eeb7c3da73153674f36a0acd3f74fa6af67bde3848460405161094892919061323e565b60405180910390a361097960017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b505050565b60607f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb6109aa81611cde565b6109b2611dd5565b6109ba611e33565b6001600160a01b0385166109fa576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610a07868686611eda565b9050856001600160a01b03167fcaf938de11c367272220bfd1d2baa99ca46665e7bc4d85f00adb51b90fe1fa9f348787604051610a469392919061325a565b60405180910390a29150610a7960017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b509392505050565b610a89611dd5565b610a91611e33565b34600003610acb576040517f7671265e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038316610b0b576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546040516000916001600160a01b03169034908381818185875af1925050503d8060008114610b58576040519150601f19603f3d011682016040523d82523d6000602084013e610b5d565b606091505b5050905080610b98576040517f79cacff100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b836001600160a01b0316336001600160a01b03167f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a43460008787604051610be29493929190613274565b60405180910390a35061097960017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020526040902060010154610c4e81611cde565b610c588383611ce8565b50505050565b7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb610c8881611cde565b610c90611dd5565b610c98611e33565b6001600160a01b038416610cd8576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000846001600160a01b03163460405160006040518083038185875af1925050503d8060008114610d25576040519150601f19603f3d011682016040523d82523d6000602084013e610d2a565b606091505b5050905080610d65576040517facfdb44400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f8fcaa0b50000000000000000000000000000000000000000000000000000000081526001600160a01b03861690638fcaa0b590610dac908790879060040161323e565b600060405180830381600087803b158015610dc657600080fd5b505af1158015610dda573d6000803e3d6000fd5b50505050846001600160a01b03167fd5d7616b1678354a0dea9d7e57e6a090bff5babe9f8d6381fdbad16e89ba311c348686604051610e1b9392919061325a565b60405180910390a250610c5860017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b6001600160a01b0381163314610e8f576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6109798282611f83565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610ec381611cde565b610ecb612047565b50565b610ed66120d7565b610edf826121a7565b610ee982826121b2565b5050565b7f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b9610f1781611cde565b610f1f611dd5565b610f27611e33565b83600003610f61576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038516610fa1576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610fab86866122d6565b610fe1576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b0386811660048301526024820186905287169063095ea7b3906044016020604051808303816000875af1158015611049573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061106d919061329d565b6110a3576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6110ae858484611eda565b506110b986866122d6565b6110ef576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201526000906001600160a01b038816906370a0823190602401602060405180830381865afa15801561114f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061117391906132bf565b90508015611185576111858782612366565b856001600160a01b0316876001600160a01b03167f29c40793bffd84cb810179f15d1ceec72bc7f0785514c668ba36645cf99b73828787876040516111cc9392919061325a565b60405180910390a3506111fe60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b505050505050565b60006112106124cf565b507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc90565b600480546040517f40c10f190000000000000000000000000000000000000000000000000000000081523092810192909252602482018590526001600160a01b0316906340c10f1990604401600060405180830381600087803b15801561129b57600080fd5b505af11580156112af573d6000803e3d6000fd5b50506004546112cd92506001600160a01b0316905085858585610eed565b600480546040517f70a0823100000000000000000000000000000000000000000000000000000000815230928101929092526001600160a01b0316906370a0823190602401602060405180830381865afa15801561132f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061135391906132bf565b15610c5857610c586132d8565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61138a81611cde565b610ecb612531565b61139a611dd5565b6113a2611e33565b836000036113dc576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03851661141c576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6114273384866125aa565b846001600160a01b0316336001600160a01b03167f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a4868686866040516114709493929190613274565b60405180910390a36114a160017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b5050505050565b60006114b381611cde565b6001600160a01b0382166114f3576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000546001600160a01b031615611536576040517fb337f37800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6115607f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b983611ce8565b5050600080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b7f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b96115c681611cde565b6115ce611dd5565b6115d6611e33565b83600003611610576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038516611650576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6116646001600160a01b0387168686612733565b6040517f8fcaa0b50000000000000000000000000000000000000000000000000000000081526001600160a01b03861690638fcaa0b5906116ab908690869060040161323e565b600060405180830381600087803b1580156116c557600080fd5b505af11580156116d9573d6000803e3d6000fd5b50505050846001600160a01b0316866001600160a01b03167f723fc7be2448075379e4fdf1e6bf5fead954d2668d2da05dcb44ccfec4beeda78686866040516117249392919061325a565b60405180910390a36111fe60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156117a05750825b905060008267ffffffffffffffff1660011480156117bd5750303b155b9050811580156117cb575080155b15611802576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84547fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000016600117855583156118635784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff16680100000000000000001785555b6001600160a01b038816158061188057506001600160a01b038716155b156118b7576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6118bf6127a7565b6118c76127af565b6118cf6127a7565b6118d76127bf565b6118e2600087611ce8565b5061190d7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a87611ce8565b50600180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b038a1617905561196b7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb89611ce8565b50600380547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0389161790558315611a005784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b5050505050505050565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020526040902060010154611a4481611cde565b610c588383611f83565b611a56611dd5565b611a5e611e33565b34600003611a98576040517f7671265e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038116611ad8576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546040516000916001600160a01b03169034908381818185875af1925050503d8060008114611b25576040519150601f19603f3d011682016040523d82523d6000602084013e611b2a565b606091505b5050905080611b65576040517f79cacff100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60408051348152600060208201819052606082840181905282015290516001600160a01b0384169133917f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a49181900360800190a350610ecb60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b611beb611dd5565b611bf3611e33565b81600003611c2d576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038316611c6d576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611c783382846125aa565b826001600160a01b0316336001600160a01b03167f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a484846040516109489291909182526001600160a01b0316602082015260606040820181905260009082015260800190565b610ecb81336127cf565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff16611dcb576000848152602082815260408083206001600160a01b0387168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055611d813390565b6001600160a01b0316836001600160a01b0316857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a460019150506107f9565b60009150506107f9565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff1615611e31576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0080547ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01611eae576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60029055565b60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b6060600080856001600160a01b0316348686604051611efa929190613307565b60006040518083038185875af1925050503d8060008114611f37576040519150601f19603f3d011682016040523d82523d6000602084013e611f3c565b606091505b509150915081611f78576040517facfdb44400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b9150505b9392505050565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff1615611dcb576000848152602082815260408083206001600160a01b038716808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339287917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a460019150506107f9565b61204f61285c565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001681557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a150565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148061217057507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166121647f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b6001600160a01b031614155b15611e31576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610ee981611cde565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa92505050801561222a575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252612227918101906132bf565b60015b612270576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b03831660048201526024015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc81146122cc576040517faa1d49a400000000000000000000000000000000000000000000000000000000815260048101829052602401612267565b61097983836128b7565b6040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b038281166004830152600060248301819052919084169063095ea7b3906044016020604051808303816000875af1158015612342573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f7c919061329d565b6003546001600160a01b03908116908316036124b5576002546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152602481018390529083169063095ea7b3906044016020604051808303816000875af11580156123e8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061240c919061329d565b612442576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002546040517f743e0c9b000000000000000000000000000000000000000000000000000000008152600481018390526001600160a01b039091169063743e0c9b90602401600060405180830381600087803b1580156124a157600080fd5b505af11580156111fe573d6000803e3d6000fd5b600054610ee9906001600160a01b03848116911683612733565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614611e31576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612539611dd5565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011781557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258336120b9565b6003546001600160a01b0390811690831603612717576125d56001600160a01b03831684308461290d565b6002546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152602481018390529083169063095ea7b3906044016020604051808303816000875af1158015612641573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612665919061329d565b61269b576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002546040517f743e0c9b000000000000000000000000000000000000000000000000000000008152600481018390526001600160a01b039091169063743e0c9b90602401600060405180830381600087803b1580156126fa57600080fd5b505af115801561270e573d6000803e3d6000fd5b50505050505050565b600054610979906001600160a01b03848116918691168461290d565b6040516001600160a01b0383811660248301526044820183905261097991859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050612946565b611e316129c2565b6127b76129c2565b611e31612a29565b6127c76129c2565b611e31612a31565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408083206001600160a01b038516845290915290205460ff16610ee9576040517fe2517d3f0000000000000000000000000000000000000000000000000000000081526001600160a01b038216600482015260248101839052604401612267565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff16611e31576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6128c082612a82565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a2805115612905576109798282612b2a565b610ee9612ba0565b6040516001600160a01b038481166024830152838116604483015260648201839052610c589186918216906323b872dd90608401612760565b600061295b6001600160a01b03841683612bd8565b9050805160001415801561298057508080602001905181019061297e919061329d565b155b15610979576040517f5274afe70000000000000000000000000000000000000000000000000000000081526001600160a01b0384166004820152602401612267565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff16611e31576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611eb46129c2565b612a396129c2565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055565b806001600160a01b03163b600003612ad1576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b0382166004820152602401612267565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6060600080846001600160a01b031684604051612b479190613317565b600060405180830381855af49150503d8060008114612b82576040519150601f19603f3d011682016040523d82523d6000602084013e612b87565b606091505b5091509150612b97858383612be6565b95945050505050565b3415611e31576040517fb398979f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6060611f7c83836000612c5b565b606082612bfb57612bf682612d11565b611f7c565b8151158015612c1257506001600160a01b0384163b155b15612c54576040517f9996b3150000000000000000000000000000000000000000000000000000000081526001600160a01b0385166004820152602401612267565b5080611f7c565b606081471015612c99576040517fcd786059000000000000000000000000000000000000000000000000000000008152306004820152602401612267565b600080856001600160a01b03168486604051612cb59190613317565b60006040518083038185875af1925050503d8060008114612cf2576040519150601f19603f3d011682016040523d82523d6000602084013e612cf7565b606091505b5091509150612d07868383612be6565b9695505050505050565b805115612d215780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060208284031215612d6557600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114611f7c57600080fd5b80356001600160a01b0381168114612dac57600080fd5b919050565b600060208284031215612dc357600080fd5b611f7c82612d95565b60008083601f840112612dde57600080fd5b50813567ffffffffffffffff811115612df657600080fd5b602083019150836020828501011115612e0e57600080fd5b9250929050565b600080600060408486031215612e2a57600080fd5b612e3384612d95565b9250602084013567ffffffffffffffff811115612e4f57600080fd5b612e5b86828701612dcc565b9497909650939450505050565b60005b83811015612e83578181015183820152602001612e6b565b50506000910152565b60008151808452612ea4816020860160208601612e68565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000611f7c6020830184612e8c565b600060208284031215612efb57600080fd5b5035919050565b60008060408385031215612f1557600080fd5b82359150612f2560208401612d95565b90509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60008060408385031215612f7057600080fd5b612f7983612d95565b9150602083013567ffffffffffffffff811115612f9557600080fd5b8301601f81018513612fa657600080fd5b803567ffffffffffffffff811115612fc057612fc0612f2e565b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8501160116810181811067ffffffffffffffff8211171561302c5761302c612f2e565b60405281815282820160200187101561304457600080fd5b816020840160208301376000602083830101528093505050509250929050565b60008060008060006080868803121561307c57600080fd5b61308586612d95565b945061309360208701612d95565b935060408601359250606086013567ffffffffffffffff8111156130b657600080fd5b6130c288828901612dcc565b969995985093965092949392505050565b600080600080606085870312156130e957600080fd5b6130f285612d95565b935060208501359250604085013567ffffffffffffffff81111561311557600080fd5b61312187828801612dcc565b95989497509550505050565b60008060008060006080868803121561314557600080fd5b61314e86612d95565b94506020860135935061316360408701612d95565b9250606086013567ffffffffffffffff8111156130b657600080fd5b60008060006060848603121561319457600080fd5b61319d84612d95565b92506131ab60208501612d95565b91506131b960408501612d95565b90509250925092565b6000806000606084860312156131d757600080fd5b6131e084612d95565b9250602084013591506131b960408501612d95565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b6020815260006132526020830184866131f5565b949350505050565b838152604060208201526000612b976040830184866131f5565b8481526001600160a01b0384166020820152606060408201526000612d076060830184866131f5565b6000602082840312156132af57600080fd5b81518015158114611f7c57600080fd5b6000602082840312156132d157600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b8183823760009101908152919050565b60008251613329818460208701612e68565b919091019291505056fea2646970667358221220d968781c52811c0ad33400d2e6fd7deb96a254471b52dcc00cbee1f639dac0b664736f6c634300081a0033608060405234801561001057600080fd5b50604051610c9f380380610c9f83398101604081905261002f9161010d565b8181600361003d83826101ff565b50600461004a82826101ff565b50505050506102bd565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261007b57600080fd5b81516001600160401b0381111561009457610094610054565b604051601f8201601f19908116603f011681016001600160401b03811182821017156100c2576100c2610054565b6040528181528382016020018510156100da57600080fd5b60005b828110156100f9576020818601810151838301820152016100dd565b506000918101602001919091529392505050565b6000806040838503121561012057600080fd5b82516001600160401b0381111561013657600080fd5b6101428582860161006a565b602085015190935090506001600160401b0381111561016057600080fd5b61016c8582860161006a565b9150509250929050565b600181811c9082168061018a57607f821691505b6020821081036101aa57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156101fa57806000526020600020601f840160051c810160208510156101d75750805b601f840160051c820191505b818110156101f757600081556001016101e3565b50505b505050565b81516001600160401b0381111561021857610218610054565b61022c816102268454610176565b846101b0565b6020601f82116001811461026057600083156102485750848201515b600019600385901b1c1916600184901b1784556101f7565b600084815260208120601f198516915b828110156102905787850151825560209485019460019092019101610270565b50848210156102ae5786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b6109d3806102cc6000396000f3fe608060405234801561001057600080fd5b50600436106100be5760003560e01c806340c10f191161007657806395d89b411161005b57806395d89b4114610183578063a9059cbb1461018b578063dd62ed3e1461019e57600080fd5b806340c10f191461013857806370a082311461014d57600080fd5b806318160ddd116100a757806318160ddd1461010457806323b872dd14610116578063313ce5671461012957600080fd5b806306fdde03146100c3578063095ea7b3146100e1575b600080fd5b6100cb6101e4565b6040516100d891906107bf565b60405180910390f35b6100f46100ef366004610854565b610276565b60405190151581526020016100d8565b6002545b6040519081526020016100d8565b6100f461012436600461087e565b610290565b604051601281526020016100d8565b61014b610146366004610854565b6102b4565b005b61010861015b3660046108bb565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6100cb6102c2565b6100f4610199366004610854565b6102d1565b6101086101ac3660046108dd565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6060600380546101f390610910565b80601f016020809104026020016040519081016040528092919081815260200182805461021f90610910565b801561026c5780601f106102415761010080835404028352916020019161026c565b820191906000526020600020905b81548152906001019060200180831161024f57829003601f168201915b5050505050905090565b6000336102848185856102df565b60019150505b92915050565b60003361029e8582856102f1565b6102a98585856103c5565b506001949350505050565b6102be8282610470565b5050565b6060600480546101f390610910565b6000336102848185856103c5565b6102ec83838360016104cc565b505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146103bf57818110156103b0576040517ffb8f41b200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416600482015260248101829052604481018390526064015b60405180910390fd5b6103bf848484840360006104cc565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8316610415576040517f96c6fd1e000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff8216610465576040517fec442f05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b6102ec838383610614565b73ffffffffffffffffffffffffffffffffffffffff82166104c0576040517fec442f05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b6102be60008383610614565b73ffffffffffffffffffffffffffffffffffffffff841661051c576040517fe602df05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff831661056c576040517f94280d62000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260016020908152604080832093871683529290522082905580156103bf578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161060691815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff831661064c5780600260008282546106419190610963565b909155506106fe9050565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260208190526040902054818110156106d2576040517fe450d38c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8516600482015260248101829052604481018390526064016103a7565b73ffffffffffffffffffffffffffffffffffffffff841660009081526020819052604090209082900390555b73ffffffffffffffffffffffffffffffffffffffff821661072757600280548290039055610753565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090208054820190555b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516107b291815260200190565b60405180910390a3505050565b602081526000825180602084015260005b818110156107ed57602081860181015160408684010152016107d0565b5060006040828501015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011684010191505092915050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461084f57600080fd5b919050565b6000806040838503121561086757600080fd5b6108708361082b565b946020939093013593505050565b60008060006060848603121561089357600080fd5b61089c8461082b565b92506108aa6020850161082b565b929592945050506040919091013590565b6000602082840312156108cd57600080fd5b6108d68261082b565b9392505050565b600080604083850312156108f057600080fd5b6108f98361082b565b91506109076020840161082b565b90509250929050565b600181811c9082168061092457607f821691505b60208210810361095d577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b8082018082111561028a577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea26469706673582212207e804ca539d49155d2b6bc19268ce22f9f857027c75247d69fb0d56a089c93d464736f6c634300081a003360a060405234801561001057600080fd5b5060405161140b38038061140b83398101604081905261002f916101b3565b60016000556002805460ff191690556001600160a01b038316158061005b57506001600160a01b038216155b8061006d57506001600160a01b038116155b1561008b5760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b0383166080526100a3600082610102565b506100ce7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a82610102565b506100f97f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e483610102565b505050506101f6565b60008281526001602090815260408083206001600160a01b038516845290915281205460ff1661018d5760008381526001602081815260408084206001600160a01b0387168086529252808420805460ff19169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a4506001610191565b5060005b92915050565b80516001600160a01b03811681146101ae57600080fd5b919050565b6000806000606084860312156101c857600080fd5b6101d184610197565b92506101df60208501610197565b91506101ed60408501610197565b90509250925092565b6080516111de61022d60003960008181610132015281816103c5015281816104270152818161065801526106ba01526111de6000f3fe608060405234801561001057600080fd5b50600436106101005760003560e01c80638456cb5911610097578063c8a0236211610066578063c8a0236214610276578063d547741f14610289578063d9caed121461029c578063e63ab1e9146102af57600080fd5b80638456cb59146101f957806385f438c11461020157806391d1485414610228578063a217fddf1461026e57600080fd5b80632f2ff15d116100d35780632f2ff15d146101c057806336568abe146101d35780633f4ba83a146101e65780635c975abb146101ee57600080fd5b806301ffc9a714610105578063116191b61461012d57806321fc65f214610179578063248a9ca31461018e575b600080fd5b610118610113366004610f04565b6102d6565b60405190151581526020015b60405180910390f35b6101547f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610124565b61018c610187366004610f6f565b61036f565b005b6101b261019c36600461100c565b6000908152600160208190526040909120015490565b604051908152602001610124565b61018c6101ce366004611025565b610511565b61018c6101e1366004611025565b61053d565b61018c61059b565b60025460ff16610118565b61018c6105d0565b6101b27f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b610118610236366004611025565b600091825260016020908152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b6101b2600081565b61018c610284366004610f6f565b610602565b61018c610297366004611025565b61078a565b61018c6102aa366004611051565b6107b0565b6101b27f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061036957507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b61037761087d565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e46103a1816108c0565b6103a96108ca565b6103ea73ffffffffffffffffffffffffffffffffffffffff87167f000000000000000000000000000000000000000000000000000000000000000086610909565b6040517f5131ab5900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690635131ab599061046490899089908990899089906004016110d7565b600060405180830381600087803b15801561047e57600080fd5b505af1158015610492573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167f85b5be9cf454e05e0bddf49315178102227c312078eefa3c00294fb4d912ae4e8686866040516104f793929190611134565b60405180910390a35061050a6001600055565b5050505050565b6000828152600160208190526040909120015461052d816108c0565b6105378383610996565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8116331461058c576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6105968282610a61565b505050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a6105c5816108c0565b6105cd610b20565b50565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a6105fa816108c0565b6105cd610b9d565b61060a61087d565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e4610634816108c0565b61063c6108ca565b61067d73ffffffffffffffffffffffffffffffffffffffff87167f000000000000000000000000000000000000000000000000000000000000000086610909565b6040517fb8969bd400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063b8969bd4906106f790899089908990899089906004016110d7565b600060405180830381600087803b15801561071157600080fd5b505af1158015610725573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fb9d4efa96044e5f5e03e696fa9ae2ff66911cc27e8a637c3627c75bc5b2241c88686866040516104f793929190611134565b600082815260016020819052604090912001546107a6816108c0565b6105378383610a61565b6107b861087d565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e46107e2816108c0565b6107ea6108ca565b61080b73ffffffffffffffffffffffffffffffffffffffff85168484610909565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f9b1bfa7fa9ee420a16e124f794c35ac9f90472acc99140eb2f6447c714cad8eb8460405161086a91815260200190565b60405180910390a3506105966001600055565b6002600054036108b9576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b6105cd8133610bf8565b60025460ff1615610907576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6040805173ffffffffffffffffffffffffffffffffffffffff8416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb00000000000000000000000000000000000000000000000000000000179052610596908490610c89565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff16610a5957600083815260016020818152604080842073ffffffffffffffffffffffffffffffffffffffff8716808652925280842080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a4506001610369565b506000610369565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff1615610a5957600083815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8616808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a4506001610369565b610b28610d1f565b600280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b610ba56108ca565b600280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258610b733390565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16610c85576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82166004820152602481018390526044015b60405180910390fd5b5050565b6000610cab73ffffffffffffffffffffffffffffffffffffffff841683610d5b565b90508051600014158015610cd0575080806020019051810190610cce9190611157565b155b15610596576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84166004820152602401610c7c565b60025460ff16610907576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6060610d6983836000610d70565b9392505050565b606081471015610dae576040517fcd786059000000000000000000000000000000000000000000000000000000008152306004820152602401610c7c565b6000808573ffffffffffffffffffffffffffffffffffffffff168486604051610dd79190611179565b60006040518083038185875af1925050503d8060008114610e14576040519150601f19603f3d011682016040523d82523d6000602084013e610e19565b606091505b5091509150610e29868383610e33565b9695505050505050565b606082610e4857610e4382610ec2565b610d69565b8151158015610e6c575073ffffffffffffffffffffffffffffffffffffffff84163b155b15610ebb576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85166004820152602401610c7c565b5080610d69565b805115610ed25780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060208284031215610f1657600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610d6957600080fd5b803573ffffffffffffffffffffffffffffffffffffffff81168114610f6a57600080fd5b919050565b600080600080600060808688031215610f8757600080fd5b610f9086610f46565b9450610f9e60208701610f46565b935060408601359250606086013567ffffffffffffffff811115610fc157600080fd5b8601601f81018813610fd257600080fd5b803567ffffffffffffffff811115610fe957600080fd5b886020828401011115610ffb57600080fd5b959894975092955050506020019190565b60006020828403121561101e57600080fd5b5035919050565b6000806040838503121561103857600080fd5b8235915061104860208401610f46565b90509250929050565b60008060006060848603121561106657600080fd5b61106f84610f46565b925061107d60208501610f46565b929592945050506040919091013590565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff8616815273ffffffffffffffffffffffffffffffffffffffff8516602082015283604082015260806060820152600061112960808301848661108e565b979650505050505050565b83815260406020820152600061114e60408301848661108e565b95945050505050565b60006020828403121561116957600080fd5b81518015158114610d6957600080fd5b6000825160005b8181101561119a5760208186018101518583015201611180565b50600092019182525091905056fea264697066735822122069d5c5c3cb2752c876b6a2138d8d9b66bac6bd1b48a1fe98417eea81faf02a3e64736f6c634300081a0033", + ABI: "[{\"type\":\"constructor\",\"inputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"ASSET_HANDLER_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"DEFAULT_ADMIN_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"PAUSER_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"TSS_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"UPGRADE_INTERFACE_VERSION\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"call\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"custody\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"deposit\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"deposit\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"depositAndCall\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"depositAndCall\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"echidnaCaller\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"execute\",\"inputs\":[{\"name\":\"destination\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"executeRevert\",\"inputs\":[{\"name\":\"destination\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"executeWithERC20\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"getRoleAdmin\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"grantRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"hasRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"initialize\",\"inputs\":[{\"name\":\"tssAddress_\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"zetaToken_\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"admin_\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"pause\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"paused\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"proxiableUUID\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"renounceRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"callerConfirmation\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"revertWithERC20\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"revokeRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setConnector\",\"inputs\":[{\"name\":\"zetaConnector_\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setCustody\",\"inputs\":[{\"name\":\"custody_\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"supportsInterface\",\"inputs\":[{\"name\":\"interfaceId\",\"type\":\"bytes4\",\"internalType\":\"bytes4\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"testERC20\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractTestERC20\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"testExecuteWithERC20\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"tssAddress\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"unpause\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"upgradeToAndCall\",\"inputs\":[{\"name\":\"newImplementation\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"zetaConnector\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"zetaToken\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"event\",\"name\":\"Call\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"receiver\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Deposit\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"receiver\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"asset\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Executed\",\"inputs\":[{\"name\":\"destination\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ExecutedWithERC20\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Initialized\",\"inputs\":[{\"name\":\"version\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Paused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Reverted\",\"inputs\":[{\"name\":\"destination\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RevertedWithERC20\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleAdminChanged\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"previousAdminRole\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"newAdminRole\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleGranted\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleRevoked\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Unpaused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Upgraded\",\"inputs\":[{\"name\":\"implementation\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"AccessControlBadConfirmation\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"AccessControlUnauthorizedAccount\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"neededRole\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"type\":\"error\",\"name\":\"AddressEmptyCode\",\"inputs\":[{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"AddressInsufficientBalance\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"ApprovalFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ConnectorInitialized\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"CustodyInitialized\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"DepositFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ERC1967InvalidImplementation\",\"inputs\":[{\"name\":\"implementation\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"ERC1967NonPayable\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"EnforcedPause\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ExecutionFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ExpectedPause\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"FailedInnerCall\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientERC20Amount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientETHAmount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidInitialization\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NotInitializing\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NotWhitelistedInCustody\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ReentrancyGuardReentrantCall\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"SafeERC20FailedOperation\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"UUPSUnauthorizedCallContext\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"UUPSUnsupportedProxiableUUID\",\"inputs\":[{\"name\":\"slot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"type\":\"error\",\"name\":\"ZeroAddress\",\"inputs\":[]}]", + Bin: "0x60a060405230608052600580546001600160a01b0319163317905534801561002657600080fd5b5061002f610154565b600554600180546001600160a01b039092166001600160a01b031992831617905560028054610123921691909117905560405161006b90610206565b60408082526004908201819052631d195cdd60e21b606083015260806020830181905282015263151154d560e21b60a082015260c001604051809103906000f0801580156100bd573d6000803e3d6000fd5b50600480546001600160a01b0319166001600160a01b039283161790556001546040513092919091169082906100f290610213565b6001600160a01b03938416815291831660208301529091166040820152606001604051809103906000f08015801561012e573d6000803e3d6000fd5b50600080546001600160a01b0319166001600160a01b0392909216919091179055610220565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156101a45760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146102035780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b610c9f8061372c83390190565b6116fe806143cb83390190565b6080516134e3610249600039600081816120e20152818161210b015261259701526134e36000f3fe6080604052600436106102345760003560e01c80635c975abb11610138578063ad3cb1cc116100b0578063d547741f1161007f578063e63ab1e911610064578063e63ab1e9146106ff578063f340fa0114610733578063f45346dc1461074657600080fd5b8063d547741f146106bf578063dda79b75146106df57600080fd5b8063ad3cb1cc14610616578063ae7a3a6f1461065f578063b8969bd41461067f578063c0c53b8b1461069f57600080fd5b80638456cb591161010757806391d14854116100ec57806391d1485414610568578063a217fddf146105cd578063a783c789146105e257600080fd5b80638456cb59146105335780638c6f037f1461054857600080fd5b80635c975abb146104885780635d62c860146104bf5780636ab90f9b146104f357806381100bf01461051357600080fd5b806335c018db116101cb5780634f1ef2861161019a57806352d1902d1161017f57806352d1902d1461043357806357bec62f146104485780635b1125911461046857600080fd5b80634f1ef286146104005780635131ab591461041357600080fd5b806335c018db1461039857806336568abe146103ab5780633c2f05a8146103cb5780633f4ba83a146103eb57600080fd5b806321e093b11161020757806321e093b1146102d0578063248a9ca31461030857806329c59b5d146103655780632f2ff15d1461037857600080fd5b806301ffc9a71461023957806310188aef1461026e5780631b8b921d146102905780631cff79cd146102b0575b600080fd5b34801561024557600080fd5b50610259610254366004612ecd565b610766565b60405190151581526020015b60405180910390f35b34801561027a57600080fd5b5061028e610289366004612f2b565b6107ff565b005b34801561029c57600080fd5b5061028e6102ab366004612f8f565b6108f3565b6102c36102be366004612f8f565b61097e565b6040516102659190613050565b3480156102dc57600080fd5b506003546102f0906001600160a01b031681565b6040516001600160a01b039091168152602001610265565b34801561031457600080fd5b50610357610323366004613063565b60009081527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052604090206001015490565b604051908152602001610265565b61028e610373366004612f8f565b610a81565b34801561038457600080fd5b5061028e61039336600461307c565b610c14565b61028e6103a6366004612f8f565b610c5e565b3480156103b757600080fd5b5061028e6103c636600461307c565b610e4d565b3480156103d757600080fd5b506004546102f0906001600160a01b031681565b3480156103f757600080fd5b5061028e610e99565b61028e61040e3660046130d7565b610ece565b34801561041f57600080fd5b5061028e61042e3660046131de565b610eed565b34801561043f57600080fd5b50610357611206565b34801561045457600080fd5b506002546102f0906001600160a01b031681565b34801561047457600080fd5b506001546102f0906001600160a01b031681565b34801561049457600080fd5b507fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff16610259565b3480156104cb57600080fd5b506103577f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b981565b3480156104ff57600080fd5b5061028e61050e36600461324d565b611235565b34801561051f57600080fd5b506005546102f0906001600160a01b031681565b34801561053f57600080fd5b5061028e611360565b34801561055457600080fd5b5061028e6105633660046132a7565b611392565b34801561057457600080fd5b5061025961058336600461307c565b60009182527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408084206001600160a01b0393909316845291905290205460ff1690565b3480156105d957600080fd5b50610357600081565b3480156105ee57600080fd5b506103577f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb81565b34801561062257600080fd5b506102c36040518060400160405280600581526020017f352e302e3000000000000000000000000000000000000000000000000000000081525081565b34801561066b57600080fd5b5061028e61067a366004612f2b565b6114a8565b34801561068b57600080fd5b5061028e61069a3660046131de565b61159c565b3480156106ab57600080fd5b5061028e6106ba3660046132f9565b611755565b3480156106cb57600080fd5b5061028e6106da36600461307c565b611a0a565b3480156106eb57600080fd5b506000546102f0906001600160a01b031681565b34801561070b57600080fd5b506103577f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b61028e610741366004612f2b565b611a4e565b34801561075257600080fd5b5061028e61076136600461333c565b611be3565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b0000000000000000000000000000000000000000000000000000000014806107f957507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b600061080a81611cde565b6001600160a01b03821661084a576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002546001600160a01b03161561088d576040517f0c8dc01600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6108b77f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b983611ce8565b5050600280547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6108fb611dd5565b610903611e33565b826001600160a01b0316336001600160a01b03167f2a21062ee9199c2e205622999eeb7c3da73153674f36a0acd3f74fa6af67bde384846040516109489291906133b8565b60405180910390a361097960017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b505050565b60607f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb6109aa81611cde565b6109b2611dd5565b6109ba611e33565b6001600160a01b0385166109fa576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610a07868686611eda565b9050856001600160a01b03167fcaf938de11c367272220bfd1d2baa99ca46665e7bc4d85f00adb51b90fe1fa9f348787604051610a46939291906133d4565b60405180910390a29150610a7960017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b509392505050565b610a89611dd5565b610a91611e33565b34600003610acb576040517f7671265e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038316610b0b576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546040516000916001600160a01b03169034908381818185875af1925050503d8060008114610b58576040519150601f19603f3d011682016040523d82523d6000602084013e610b5d565b606091505b5050905080610b98576040517f79cacff100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b836001600160a01b0316336001600160a01b03167f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a43460008787604051610be294939291906133ee565b60405180910390a35061097960017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020526040902060010154610c4e81611cde565b610c588383611ce8565b50505050565b7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb610c8881611cde565b610c90611dd5565b610c98611e33565b6001600160a01b038416610cd8576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000846001600160a01b03163460405160006040518083038185875af1925050503d8060008114610d25576040519150601f19603f3d011682016040523d82523d6000602084013e610d2a565b606091505b5050905080610d65576040517facfdb44400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f8fcaa0b50000000000000000000000000000000000000000000000000000000081526001600160a01b03861690638fcaa0b590610dac90879087906004016133b8565b600060405180830381600087803b158015610dc657600080fd5b505af1158015610dda573d6000803e3d6000fd5b50505050846001600160a01b03167fd5d7616b1678354a0dea9d7e57e6a090bff5babe9f8d6381fdbad16e89ba311c348686604051610e1b939291906133d4565b60405180910390a250610c5860017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b6001600160a01b0381163314610e8f576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6109798282611f83565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610ec381611cde565b610ecb612047565b50565b610ed66120d7565b610edf826121a7565b610ee982826121b2565b5050565b7f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b9610f1781611cde565b610f1f611dd5565b610f27611e33565b83600003610f61576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038516610fa1576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610fab86866122d6565b610fe1576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b0386811660048301526024820186905287169063095ea7b3906044016020604051808303816000875af1158015611049573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061106d9190613417565b6110a3576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6110ae858484611eda565b506110b986866122d6565b6110ef576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201526000906001600160a01b038816906370a0823190602401602060405180830381865afa15801561114f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111739190613439565b90508015611185576111858782612366565b856001600160a01b0316876001600160a01b03167f29c40793bffd84cb810179f15d1ceec72bc7f0785514c668ba36645cf99b73828787876040516111cc939291906133d4565b60405180910390a3506111fe60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b505050505050565b600061121061258c565b507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc90565b600480546040517f40c10f190000000000000000000000000000000000000000000000000000000081523092810192909252602482018590526001600160a01b0316906340c10f1990604401600060405180830381600087803b15801561129b57600080fd5b505af11580156112af573d6000803e3d6000fd5b50506004546112cd92506001600160a01b0316905085858585610eed565b600480546040517f70a0823100000000000000000000000000000000000000000000000000000000815230928101929092526001600160a01b0316906370a0823190602401602060405180830381865afa15801561132f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113539190613439565b15610c5857610c58613452565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61138a81611cde565b610ecb6125ee565b61139a611dd5565b6113a2611e33565b836000036113dc576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03851661141c576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611427338486612667565b846001600160a01b0316336001600160a01b03167f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a48686868660405161147094939291906133ee565b60405180910390a36114a160017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b5050505050565b60006114b381611cde565b6001600160a01b0382166114f3576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000546001600160a01b031615611536576040517fb337f37800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6115607f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b983611ce8565b5050600080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b7f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b96115c681611cde565b6115ce611dd5565b6115d6611e33565b83600003611610576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038516611650576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6116646001600160a01b03871686866128ad565b6040517f8fcaa0b50000000000000000000000000000000000000000000000000000000081526001600160a01b03861690638fcaa0b5906116ab90869086906004016133b8565b600060405180830381600087803b1580156116c557600080fd5b505af11580156116d9573d6000803e3d6000fd5b50505050846001600160a01b0316866001600160a01b03167f723fc7be2448075379e4fdf1e6bf5fead954d2668d2da05dcb44ccfec4beeda7868686604051611724939291906133d4565b60405180910390a36111fe60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156117a05750825b905060008267ffffffffffffffff1660011480156117bd5750303b155b9050811580156117cb575080155b15611802576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84547fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000016600117855583156118635784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff16680100000000000000001785555b6001600160a01b038816158061188057506001600160a01b038716155b156118b7576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6118bf612921565b6118c7612929565b6118cf612921565b6118d7612939565b6118e2600087611ce8565b5061190d7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a87611ce8565b50600180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b038a1617905561196b7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb89611ce8565b50600380547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0389161790558315611a005784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b5050505050505050565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020526040902060010154611a4481611cde565b610c588383611f83565b611a56611dd5565b611a5e611e33565b34600003611a98576040517f7671265e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038116611ad8576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546040516000916001600160a01b03169034908381818185875af1925050503d8060008114611b25576040519150601f19603f3d011682016040523d82523d6000602084013e611b2a565b606091505b5050905080611b65576040517f79cacff100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60408051348152600060208201819052606082840181905282015290516001600160a01b0384169133917f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a49181900360800190a350610ecb60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b611beb611dd5565b611bf3611e33565b81600003611c2d576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038316611c6d576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611c78338284612667565b826001600160a01b0316336001600160a01b03167f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a484846040516109489291909182526001600160a01b0316602082015260606040820181905260009082015260800190565b610ecb8133612949565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff16611dcb576000848152602082815260408083206001600160a01b0387168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055611d813390565b6001600160a01b0316836001600160a01b0316857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a460019150506107f9565b60009150506107f9565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff1615611e31576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0080547ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01611eae576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60029055565b60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b6060600080856001600160a01b0316348686604051611efa929190613481565b60006040518083038185875af1925050503d8060008114611f37576040519150601f19603f3d011682016040523d82523d6000602084013e611f3c565b606091505b509150915081611f78576040517facfdb44400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b9150505b9392505050565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff1615611dcb576000848152602082815260408083206001600160a01b038716808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339287917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a460019150506107f9565b61204f6129d6565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001681557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a150565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148061217057507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166121647f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b6001600160a01b031614155b15611e31576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610ee981611cde565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa92505050801561222a575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820190925261222791810190613439565b60015b612270576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b03831660048201526024015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc81146122cc576040517faa1d49a400000000000000000000000000000000000000000000000000000000815260048101829052602401612267565b6109798383612a31565b6040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b038281166004830152600060248301819052919084169063095ea7b3906044016020604051808303816000875af1158015612342573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f7c9190613417565b6003546001600160a01b03908116908316036124b5576002546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152602481018390529083169063095ea7b3906044016020604051808303816000875af11580156123e8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061240c9190613417565b612442576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002546040517f743e0c9b000000000000000000000000000000000000000000000000000000008152600481018390526001600160a01b039091169063743e0c9b90602401600060405180830381600087803b1580156124a157600080fd5b505af11580156111fe573d6000803e3d6000fd5b6000546040517fd936547e0000000000000000000000000000000000000000000000000000000081526001600160a01b0384811660048301529091169063d936547e90602401602060405180830381865afa158015612518573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061253c9190613417565b612572576040517fac2175f100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600054610ee9906001600160a01b038481169116836128ad565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614611e31576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6125f6611dd5565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011781557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258336120b9565b6003546001600160a01b03908116908316036127d4576126926001600160a01b038316843084612a87565b6002546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152602481018390529083169063095ea7b3906044016020604051808303816000875af11580156126fe573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127229190613417565b612758576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002546040517f743e0c9b000000000000000000000000000000000000000000000000000000008152600481018390526001600160a01b039091169063743e0c9b90602401600060405180830381600087803b1580156127b757600080fd5b505af11580156127cb573d6000803e3d6000fd5b50505050505050565b6000546040517fd936547e0000000000000000000000000000000000000000000000000000000081526001600160a01b0384811660048301529091169063d936547e90602401602060405180830381865afa158015612837573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061285b9190613417565b612891576040517fac2175f100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600054610979906001600160a01b038481169186911684612a87565b6040516001600160a01b0383811660248301526044820183905261097991859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050612ac0565b611e31612b3c565b612931612b3c565b611e31612ba3565b612941612b3c565b611e31612bab565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408083206001600160a01b038516845290915290205460ff16610ee9576040517fe2517d3f0000000000000000000000000000000000000000000000000000000081526001600160a01b038216600482015260248101839052604401612267565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff16611e31576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612a3a82612bfc565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a2805115612a7f576109798282612ca4565b610ee9612d1a565b6040516001600160a01b038481166024830152838116604483015260648201839052610c589186918216906323b872dd906084016128da565b6000612ad56001600160a01b03841683612d52565b90508051600014158015612afa575080806020019051810190612af89190613417565b155b15610979576040517f5274afe70000000000000000000000000000000000000000000000000000000081526001600160a01b0384166004820152602401612267565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff16611e31576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611eb4612b3c565b612bb3612b3c565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055565b806001600160a01b03163b600003612c4b576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b0382166004820152602401612267565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6060600080846001600160a01b031684604051612cc19190613491565b600060405180830381855af49150503d8060008114612cfc576040519150601f19603f3d011682016040523d82523d6000602084013e612d01565b606091505b5091509150612d11858383612d60565b95945050505050565b3415611e31576040517fb398979f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6060611f7c83836000612dd5565b606082612d7557612d7082612e8b565b611f7c565b8151158015612d8c57506001600160a01b0384163b155b15612dce576040517f9996b3150000000000000000000000000000000000000000000000000000000081526001600160a01b0385166004820152602401612267565b5080611f7c565b606081471015612e13576040517fcd786059000000000000000000000000000000000000000000000000000000008152306004820152602401612267565b600080856001600160a01b03168486604051612e2f9190613491565b60006040518083038185875af1925050503d8060008114612e6c576040519150601f19603f3d011682016040523d82523d6000602084013e612e71565b606091505b5091509150612e81868383612d60565b9695505050505050565b805115612e9b5780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060208284031215612edf57600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114611f7c57600080fd5b80356001600160a01b0381168114612f2657600080fd5b919050565b600060208284031215612f3d57600080fd5b611f7c82612f0f565b60008083601f840112612f5857600080fd5b50813567ffffffffffffffff811115612f7057600080fd5b602083019150836020828501011115612f8857600080fd5b9250929050565b600080600060408486031215612fa457600080fd5b612fad84612f0f565b9250602084013567ffffffffffffffff811115612fc957600080fd5b612fd586828701612f46565b9497909650939450505050565b60005b83811015612ffd578181015183820152602001612fe5565b50506000910152565b6000815180845261301e816020860160208601612fe2565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000611f7c6020830184613006565b60006020828403121561307557600080fd5b5035919050565b6000806040838503121561308f57600080fd5b8235915061309f60208401612f0f565b90509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080604083850312156130ea57600080fd5b6130f383612f0f565b9150602083013567ffffffffffffffff81111561310f57600080fd5b8301601f8101851361312057600080fd5b803567ffffffffffffffff81111561313a5761313a6130a8565b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8501160116810181811067ffffffffffffffff821117156131a6576131a66130a8565b6040528181528282016020018710156131be57600080fd5b816020840160208301376000602083830101528093505050509250929050565b6000806000806000608086880312156131f657600080fd5b6131ff86612f0f565b945061320d60208701612f0f565b935060408601359250606086013567ffffffffffffffff81111561323057600080fd5b61323c88828901612f46565b969995985093965092949392505050565b6000806000806060858703121561326357600080fd5b61326c85612f0f565b935060208501359250604085013567ffffffffffffffff81111561328f57600080fd5b61329b87828801612f46565b95989497509550505050565b6000806000806000608086880312156132bf57600080fd5b6132c886612f0f565b9450602086013593506132dd60408701612f0f565b9250606086013567ffffffffffffffff81111561323057600080fd5b60008060006060848603121561330e57600080fd5b61331784612f0f565b925061332560208501612f0f565b915061333360408501612f0f565b90509250925092565b60008060006060848603121561335157600080fd5b61335a84612f0f565b92506020840135915061333360408501612f0f565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b6020815260006133cc60208301848661336f565b949350505050565b838152604060208201526000612d1160408301848661336f565b8481526001600160a01b0384166020820152606060408201526000612e8160608301848661336f565b60006020828403121561342957600080fd5b81518015158114611f7c57600080fd5b60006020828403121561344b57600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b8183823760009101908152919050565b600082516134a3818460208701612fe2565b919091019291505056fea2646970667358221220749992fc5d6c5f5fcb8a3202d9894526b754415bef831ad88ca3d85be39dad4a64736f6c634300081a0033608060405234801561001057600080fd5b50604051610c9f380380610c9f83398101604081905261002f9161010d565b8181600361003d83826101ff565b50600461004a82826101ff565b50505050506102bd565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261007b57600080fd5b81516001600160401b0381111561009457610094610054565b604051601f8201601f19908116603f011681016001600160401b03811182821017156100c2576100c2610054565b6040528181528382016020018510156100da57600080fd5b60005b828110156100f9576020818601810151838301820152016100dd565b506000918101602001919091529392505050565b6000806040838503121561012057600080fd5b82516001600160401b0381111561013657600080fd5b6101428582860161006a565b602085015190935090506001600160401b0381111561016057600080fd5b61016c8582860161006a565b9150509250929050565b600181811c9082168061018a57607f821691505b6020821081036101aa57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156101fa57806000526020600020601f840160051c810160208510156101d75750805b601f840160051c820191505b818110156101f757600081556001016101e3565b50505b505050565b81516001600160401b0381111561021857610218610054565b61022c816102268454610176565b846101b0565b6020601f82116001811461026057600083156102485750848201515b600019600385901b1c1916600184901b1784556101f7565b600084815260208120601f198516915b828110156102905787850151825560209485019460019092019101610270565b50848210156102ae5786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b6109d3806102cc6000396000f3fe608060405234801561001057600080fd5b50600436106100be5760003560e01c806340c10f191161007657806395d89b411161005b57806395d89b4114610183578063a9059cbb1461018b578063dd62ed3e1461019e57600080fd5b806340c10f191461013857806370a082311461014d57600080fd5b806318160ddd116100a757806318160ddd1461010457806323b872dd14610116578063313ce5671461012957600080fd5b806306fdde03146100c3578063095ea7b3146100e1575b600080fd5b6100cb6101e4565b6040516100d891906107bf565b60405180910390f35b6100f46100ef366004610854565b610276565b60405190151581526020016100d8565b6002545b6040519081526020016100d8565b6100f461012436600461087e565b610290565b604051601281526020016100d8565b61014b610146366004610854565b6102b4565b005b61010861015b3660046108bb565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6100cb6102c2565b6100f4610199366004610854565b6102d1565b6101086101ac3660046108dd565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6060600380546101f390610910565b80601f016020809104026020016040519081016040528092919081815260200182805461021f90610910565b801561026c5780601f106102415761010080835404028352916020019161026c565b820191906000526020600020905b81548152906001019060200180831161024f57829003601f168201915b5050505050905090565b6000336102848185856102df565b60019150505b92915050565b60003361029e8582856102f1565b6102a98585856103c5565b506001949350505050565b6102be8282610470565b5050565b6060600480546101f390610910565b6000336102848185856103c5565b6102ec83838360016104cc565b505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146103bf57818110156103b0576040517ffb8f41b200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416600482015260248101829052604481018390526064015b60405180910390fd5b6103bf848484840360006104cc565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8316610415576040517f96c6fd1e000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff8216610465576040517fec442f05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b6102ec838383610614565b73ffffffffffffffffffffffffffffffffffffffff82166104c0576040517fec442f05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b6102be60008383610614565b73ffffffffffffffffffffffffffffffffffffffff841661051c576040517fe602df05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff831661056c576040517f94280d62000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260016020908152604080832093871683529290522082905580156103bf578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161060691815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff831661064c5780600260008282546106419190610963565b909155506106fe9050565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260208190526040902054818110156106d2576040517fe450d38c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8516600482015260248101829052604481018390526064016103a7565b73ffffffffffffffffffffffffffffffffffffffff841660009081526020819052604090209082900390555b73ffffffffffffffffffffffffffffffffffffffff821661072757600280548290039055610753565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090208054820190555b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516107b291815260200190565b60405180910390a3505050565b602081526000825180602084015260005b818110156107ed57602081860181015160408684010152016107d0565b5060006040828501015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011684010191505092915050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461084f57600080fd5b919050565b6000806040838503121561086757600080fd5b6108708361082b565b946020939093013593505050565b60008060006060848603121561089357600080fd5b61089c8461082b565b92506108aa6020850161082b565b929592945050506040919091013590565b6000602082840312156108cd57600080fd5b6108d68261082b565b9392505050565b600080604083850312156108f057600080fd5b6108f98361082b565b91506109076020840161082b565b90509250929050565b600181811c9082168061092457607f821691505b60208210810361095d577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b8082018082111561028a577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea26469706673582212207e804ca539d49155d2b6bc19268ce22f9f857027c75247d69fb0d56a089c93d464736f6c634300081a003360a060405234801561001057600080fd5b506040516116fe3803806116fe83398101604081905261002f916101e5565b60016000556002805460ff191690556001600160a01b038316158061005b57506001600160a01b038216155b8061006d57506001600160a01b038116155b1561008b5760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b0383166080526100a3600082610134565b506100ce7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a82610134565b506100f97f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e483610134565b506101126000805160206116de83398151915282610134565b5061012b6000805160206116de83398151915283610134565b50505050610228565b60008281526001602090815260408083206001600160a01b038516845290915281205460ff166101bf5760008381526001602081815260408084206001600160a01b0387168086529252808420805460ff19169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45060016101c3565b5060005b92915050565b80516001600160a01b03811681146101e057600080fd5b919050565b6000806000606084860312156101fa57600080fd5b610203846101c9565b9250610211602085016101c9565b915061021f604085016101c9565b90509250925092565b60805161147f61025f6000396000818161019e0152818161050001528181610562015281816108f70152610959015261147f6000f3fe608060405234801561001057600080fd5b506004361061016c5760003560e01c806385f438c1116100cd578063c8a0236211610081578063d936547e11610066578063d936547e14610355578063d9caed1214610378578063e63ab1e91461038b57600080fd5b8063c8a023621461032f578063d547741f1461034257600080fd5b80639a590427116100b25780639a590427146103015780639b19251a14610314578063a217fddf1461032757600080fd5b806385f438c11461029457806391d14854146102bb57600080fd5b806336568abe11610124578063570618e111610109578063570618e11461025a5780635c975abb146102815780638456cb591461028c57600080fd5b806336568abe1461023f5780633f4ba83a1461025257600080fd5b806321fc65f21161015557806321fc65f2146101e5578063248a9ca3146101fa5780632f2ff15d1461022c57600080fd5b806301ffc9a714610171578063116191b614610199575b600080fd5b61018461017f36600461118a565b6103b2565b60405190151581526020015b60405180910390f35b6101c07f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610190565b6101f86101f33660046111f5565b61044b565b005b61021e610208366004611292565b6000908152600160208190526040909120015490565b604051908152602001610190565b6101f861023a3660046112ab565b61064c565b6101f861024d3660046112ab565b610678565b6101f86106d6565b61021e7f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a81565b60025460ff16610184565b6101f861070b565b61021e7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b6101846102c93660046112ab565b600091825260016020908152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b6101f861030f3660046112d7565b61073d565b6101f86103223660046112d7565b6107be565b61021e600081565b6101f861033d3660046111f5565b610842565b6101f86103503660046112ab565b610a29565b6101846103633660046112d7565b60036020526000908152604090205460ff1681565b6101f86103863660046112f2565b610a4f565b61021e7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061044557507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b610453610b7b565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461047d81610bbe565b610485610bc8565b73ffffffffffffffffffffffffffffffffffffffff861660009081526003602052604090205460ff166104e4576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61052573ffffffffffffffffffffffffffffffffffffffff87167f000000000000000000000000000000000000000000000000000000000000000086610c07565b6040517f5131ab5900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690635131ab599061059f9089908990899089908990600401611378565b600060405180830381600087803b1580156105b957600080fd5b505af11580156105cd573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167f85b5be9cf454e05e0bddf49315178102227c312078eefa3c00294fb4d912ae4e868686604051610632939291906113d5565b60405180910390a3506106456001600055565b5050505050565b6000828152600160208190526040909120015461066881610bbe565b6106728383610c94565b50505050565b73ffffffffffffffffffffffffffffffffffffffff811633146106c7576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6106d18282610d41565b505050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61070081610bbe565b610708610de2565b50565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61073581610bbe565b610708610e41565b7f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a61076781610bbe565b73ffffffffffffffffffffffffffffffffffffffff8216600081815260036020526040808220805460ff19169055517f51085ddf9ebdded84b76e829eb58c4078e4b5bdf97d9a94723f336039da467919190a25050565b7f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a6107e881610bbe565b73ffffffffffffffffffffffffffffffffffffffff8216600081815260036020526040808220805460ff19166001179055517faab7954e9d246b167ef88aeddad35209ca2489d95a8aeb59e288d9b19fae5a549190a25050565b61084a610b7b565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461087481610bbe565b61087c610bc8565b73ffffffffffffffffffffffffffffffffffffffff861660009081526003602052604090205460ff166108db576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61091c73ffffffffffffffffffffffffffffffffffffffff87167f000000000000000000000000000000000000000000000000000000000000000086610c07565b6040517fb8969bd400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063b8969bd4906109969089908990899089908990600401611378565b600060405180830381600087803b1580156109b057600080fd5b505af11580156109c4573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fb9d4efa96044e5f5e03e696fa9ae2ff66911cc27e8a637c3627c75bc5b2241c8868686604051610632939291906113d5565b60008281526001602081905260409091200154610a4581610bbe565b6106728383610d41565b610a57610b7b565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e4610a8181610bbe565b610a89610bc8565b73ffffffffffffffffffffffffffffffffffffffff841660009081526003602052604090205460ff16610ae8576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610b0973ffffffffffffffffffffffffffffffffffffffff85168484610c07565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f9b1bfa7fa9ee420a16e124f794c35ac9f90472acc99140eb2f6447c714cad8eb84604051610b6891815260200190565b60405180910390a3506106d16001600055565b600260005403610bb7576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b6107088133610e7e565b60025460ff1615610c05576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6040805173ffffffffffffffffffffffffffffffffffffffff8416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb000000000000000000000000000000000000000000000000000000001790526106d1908490610f0f565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff16610d3957600083815260016020818152604080842073ffffffffffffffffffffffffffffffffffffffff87168086529252808420805460ff19169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a4506001610445565b506000610445565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff1615610d3957600083815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff86168085529252808320805460ff1916905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a4506001610445565b610dea610fa5565b6002805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b610e49610bc8565b6002805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258610e173390565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16610f0b576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82166004820152602481018390526044015b60405180910390fd5b5050565b6000610f3173ffffffffffffffffffffffffffffffffffffffff841683610fe1565b90508051600014158015610f56575080806020019051810190610f5491906113f8565b155b156106d1576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84166004820152602401610f02565b60025460ff16610c05576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6060610fef83836000610ff6565b9392505050565b606081471015611034576040517fcd786059000000000000000000000000000000000000000000000000000000008152306004820152602401610f02565b6000808573ffffffffffffffffffffffffffffffffffffffff16848660405161105d919061141a565b60006040518083038185875af1925050503d806000811461109a576040519150601f19603f3d011682016040523d82523d6000602084013e61109f565b606091505b50915091506110af8683836110b9565b9695505050505050565b6060826110ce576110c982611148565b610fef565b81511580156110f2575073ffffffffffffffffffffffffffffffffffffffff84163b155b15611141576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85166004820152602401610f02565b5080610fef565b8051156111585780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006020828403121561119c57600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610fef57600080fd5b803573ffffffffffffffffffffffffffffffffffffffff811681146111f057600080fd5b919050565b60008060008060006080868803121561120d57600080fd5b611216866111cc565b9450611224602087016111cc565b935060408601359250606086013567ffffffffffffffff81111561124757600080fd5b8601601f8101881361125857600080fd5b803567ffffffffffffffff81111561126f57600080fd5b88602082840101111561128157600080fd5b959894975092955050506020019190565b6000602082840312156112a457600080fd5b5035919050565b600080604083850312156112be57600080fd5b823591506112ce602084016111cc565b90509250929050565b6000602082840312156112e957600080fd5b610fef826111cc565b60008060006060848603121561130757600080fd5b611310846111cc565b925061131e602085016111cc565b929592945050506040919091013590565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff8616815273ffffffffffffffffffffffffffffffffffffffff851660208201528360408201526080606082015260006113ca60808301848661132f565b979650505050505050565b8381526040602082015260006113ef60408301848661132f565b95945050505050565b60006020828403121561140a57600080fd5b81518015158114610fef57600080fd5b6000825160005b8181101561143b5760208186018101518583015201611421565b50600092019182525091905056fea2646970667358221220dc54ce548a1f0bf8ba5e86cc53c6d822e55eee543451395733c659359bac8dd164736f6c634300081a00338619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a", } // GatewayEVMEchidnaTestABI is the input ABI used to generate the binding from. diff --git a/v2/pkg/gatewayevmupgrade.t.sol/gatewayevmuupsupgradetest.go b/v2/pkg/gatewayevmupgrade.t.sol/gatewayevmuupsupgradetest.go index 3f4319dd..57e0a1df 100644 --- a/v2/pkg/gatewayevmupgrade.t.sol/gatewayevmuupsupgradetest.go +++ b/v2/pkg/gatewayevmupgrade.t.sol/gatewayevmuupsupgradetest.go @@ -49,8 +49,8 @@ type StdInvariantFuzzSelector struct { // GatewayEVMUUPSUpgradeTestMetaData contains all meta data concerning the GatewayEVMUUPSUpgradeTest contract. var GatewayEVMUUPSUpgradeTestMetaData = &bind.MetaData{ - ABI: "[{\"type\":\"function\",\"name\":\"IS_TEST\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeArtifacts\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedArtifacts_\",\"type\":\"string[]\",\"internalType\":\"string[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeContracts\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedContracts_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeSelectors\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedSelectors_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzSelector[]\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"selectors\",\"type\":\"bytes4[]\",\"internalType\":\"bytes4[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeSenders\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedSenders_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"failed\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"setUp\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"targetArtifactSelectors\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedArtifactSelectors_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzArtifactSelector[]\",\"components\":[{\"name\":\"artifact\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"selectors\",\"type\":\"bytes4[]\",\"internalType\":\"bytes4[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetArtifacts\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedArtifacts_\",\"type\":\"string[]\",\"internalType\":\"string[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetContracts\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedContracts_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetInterfaces\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedInterfaces_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzInterface[]\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"artifacts\",\"type\":\"string[]\",\"internalType\":\"string[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetSelectors\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedSelectors_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzSelector[]\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"selectors\",\"type\":\"bytes4[]\",\"internalType\":\"bytes4[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetSenders\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedSenders_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"testUpgradeAndForwardCallToReceivePayable\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"event\",\"name\":\"Call\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"receiver\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Deposit\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"receiver\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"asset\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Executed\",\"inputs\":[{\"name\":\"destination\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ExecutedV2\",\"inputs\":[{\"name\":\"destination\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ExecutedWithERC20\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedERC20\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"token\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"destination\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedNoParams\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedNonPayable\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"strs\",\"type\":\"string[]\",\"indexed\":false,\"internalType\":\"string[]\"},{\"name\":\"nums\",\"type\":\"uint256[]\",\"indexed\":false,\"internalType\":\"uint256[]\"},{\"name\":\"flag\",\"type\":\"bool\",\"indexed\":false,\"internalType\":\"bool\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedPayable\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"str\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"num\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"flag\",\"type\":\"bool\",\"indexed\":false,\"internalType\":\"bool\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedRevert\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Reverted\",\"inputs\":[{\"name\":\"destination\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RevertedWithERC20\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log\",\"inputs\":[{\"name\":\"\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_address\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_array\",\"inputs\":[{\"name\":\"val\",\"type\":\"uint256[]\",\"indexed\":false,\"internalType\":\"uint256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_array\",\"inputs\":[{\"name\":\"val\",\"type\":\"int256[]\",\"indexed\":false,\"internalType\":\"int256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_array\",\"inputs\":[{\"name\":\"val\",\"type\":\"address[]\",\"indexed\":false,\"internalType\":\"address[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_bytes\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_bytes32\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_int\",\"inputs\":[{\"name\":\"\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_address\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_array\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"uint256[]\",\"indexed\":false,\"internalType\":\"uint256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_array\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"int256[]\",\"indexed\":false,\"internalType\":\"int256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_array\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"address[]\",\"indexed\":false,\"internalType\":\"address[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_bytes\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_bytes32\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_decimal_int\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"},{\"name\":\"decimals\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_decimal_uint\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"decimals\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_int\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_string\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_uint\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_string\",\"inputs\":[{\"name\":\"\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_uint\",\"inputs\":[{\"name\":\"\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"logs\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"ApprovalFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ConnectorInitialized\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"CustodyInitialized\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"DepositFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ExecutionFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientERC20Amount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientETHAmount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZeroAddress\",\"inputs\":[]}]", - Bin: "0x6080604052600c8054600160ff199182168117909255601f80549091169091179055348015602c57600080fd5b5061bc7a8061003c6000396000f3fe608060405234801561001057600080fd5b50600436106100ea5760003560e01c806385226c811161008c578063b5508aa911610066578063b5508aa91461018b578063ba414fa614610193578063e20c9f71146101ab578063fa7626d4146101b357600080fd5b806385226c8114610159578063916a17c61461016e578063b0464fdc1461018357600080fd5b80633e5e3c23116100c85780633e5e3c231461012c5780633f7286f41461013457806366d9a9a01461013c5780637a380ebf1461015157600080fd5b80630a9254e4146100ef5780631ed7831c146100f95780632ade388014610117575b600080fd5b6100f76101c0565b005b610101610a85565b60405161010e919061620b565b60405180910390f35b61011f610ae7565b60405161010e91906162a7565b610101610c29565b610101610c89565b610144610ce9565b60405161010e919061640d565b6100f7610e6b565b61016161152d565b60405161010e91906164ab565b6101766115fd565b60405161010e9190616522565b6101766116f8565b6101616117f3565b61019b6118c3565b604051901515815260200161010e565b610101611997565b601f5461019b9060ff1681565b602680547fffffffffffffffffffffffff00000000000000000000000000000000000000009081163017909155602780548216611234179055602880549091166156781790556040516102129061611e565b60408082526004908201527f746573740000000000000000000000000000000000000000000000000000000060608201526080602082018190526003908201527f54544b000000000000000000000000000000000000000000000000000000000060a082015260c001604051809103906000f080158015610297573d6000803e3d6000fd5b50602480547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03929092169190911790556040516102dc9061611e565b604080825260049082018190527f7a6574610000000000000000000000000000000000000000000000000000000060608301526080602083018190528201527f5a4554410000000000000000000000000000000000000000000000000000000060a082015260c001604051809103906000f080158015610360573d6000803e3d6000fd5b50602580547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03928316908117909155604080518082018252600e81527f4761746577617945564d2e736f6c00000000000000000000000000000000000060208201526028546026549251908516602482015260448101939093529216606482015261044f919060840160408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fc0c53b8b000000000000000000000000000000000000000000000000000000001790526119f7565b601f80547fffffffffffffffffffffff0000000000000000000000000000000000000000ff166101006001600160a01b0393841681029190911791829055602080549190920483167fffffffffffffffffffffffff000000000000000000000000000000000000000090911681179091556028546026546040519293918216929116906104db9061612b565b6001600160a01b03938416815291831660208301529091166040820152606001604051809103906000f080158015610517573d6000803e3d6000fd5b50602280547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03928316179055602054602554602854602654604051938516949283169391831692169061057290616138565b6001600160a01b039485168152928416602084015290831660408301529091166060820152608001604051809103906000f0801580156105b6573d6000803e3d6000fd5b50602380547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03929092169190911790556040516105fb90616145565b604051809103906000f080158015610617573d6000803e3d6000fd5b50602180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039283161790556028546040517fc88a5e6d00000000000000000000000000000000000000000000000000000000815291166004820152670de0b6b3a76400006024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c88a5e6d90604401600060405180830381600087803b1580156106c357600080fd5b505af11580156106d7573d6000803e3d6000fd5b50506026546040517f06447d560000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506306447d569150602401600060405180830381600087803b15801561074d57600080fd5b505af1158015610761573d6000803e3d6000fd5b50506020546022546040517fae7a3a6f0000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201529116925063ae7a3a6f9150602401600060405180830381600087803b1580156107c757600080fd5b505af11580156107db573d6000803e3d6000fd5b50506020546023546040517f10188aef0000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152911692506310188aef9150602401600060405180830381600087803b15801561084157600080fd5b505af1158015610855573d6000803e3d6000fd5b505050507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b03166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156108b757600080fd5b505af11580156108cb573d6000803e3d6000fd5b5050602480546026546040517f40c10f190000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620f4240938101939093521692506340c10f199150604401600060405180830381600087803b15801561093c57600080fd5b505af1158015610950573d6000803e3d6000fd5b5050602480546022546040517fa9059cbb0000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201526207a1209381019390935216925063a9059cbb91506044016020604051808303816000875af11580156109c6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109ea91906165b9565b506028546040517fc88a5e6d0000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152670de0b6b3a76400006024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c88a5e6d90604401600060405180830381600087803b158015610a6b57600080fd5b505af1158015610a7f573d6000803e3d6000fd5b50505050565b60606016805480602002602001604051908101604052809291908181526020018280548015610add57602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610abf575b5050505050905090565b6060601e805480602002602001604051908101604052809291908181526020016000905b82821015610c2057600084815260208082206040805180820182526002870290920180546001600160a01b03168352600181018054835181870281018701909452808452939591948681019491929084015b82821015610c09578382906000526020600020018054610b7c906165db565b80601f0160208091040260200160405190810160405280929190818152602001828054610ba8906165db565b8015610bf55780601f10610bca57610100808354040283529160200191610bf5565b820191906000526020600020905b815481529060010190602001808311610bd857829003601f168201915b505050505081526020019060010190610b5d565b505050508152505081526020019060010190610b0b565b50505050905090565b60606018805480602002602001604051908101604052809291908181526020018280548015610add576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311610abf575050505050905090565b60606017805480602002602001604051908101604052809291908181526020018280548015610add576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311610abf575050505050905090565b6060601b805480602002602001604051908101604052809291908181526020016000905b82821015610c205783829060005260206000209060020201604051806040016040529081600082018054610d40906165db565b80601f0160208091040260200160405190810160405280929190818152602001828054610d6c906165db565b8015610db95780601f10610d8e57610100808354040283529160200191610db9565b820191906000526020600020905b815481529060010190602001808311610d9c57829003601f168201915b5050505050815260200160018201805480602002602001604051908101604052809291908181526020018280548015610e5357602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019060040190602082600301049283019260010382029150808411610e005790505b50505050508152505081526020019060010190610d0d565b60208054604080517fdda79b7500000000000000000000000000000000000000000000000000000000815290516000936001600160a01b039093169263dda79b7592600480820193918290030181865afa158015610ecd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ef19190616628565b60208054604080517f5b11259100000000000000000000000000000000000000000000000000000000815290519394506000936001600160a01b0390921692635b112591926004808401938290030181865afa158015610f55573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f799190616628565b604080518082018252600f81527f48656c6c6f2c20466f756e647279210000000000000000000000000000000000602080830191909152601f5483518085018552601981527f4761746577617945564d55706772616465546573742e736f6c00000000000000818401528451928301909452600082526026549495509193602a93600193670de0b6b3a764000093611023936001600160a01b036101009093048316939216611a16565b600084848460405160240161103a93929190616651565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe04d4f9700000000000000000000000000000000000000000000000000000000179052601f5460215491517ff30c7ba30000000000000000000000000000000000000000000000000000000081529293506001600160a01b03610100909104811692737109709ecfa91a80626ff3989d68f67f5b1dd12d9263f30c7ba392611100929116908790879060040161667b565b600060405180830381600087803b15801561111a57600080fd5b505af115801561112e573d6000803e3d6000fd5b50506021546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b1580156111c057600080fd5b505af11580156111d4573d6000803e3d6000fd5b50506020546040517f1f1ff1f5fb41346850b2f5c04e6c767e2f1c8a525c5c0c5cdb60cdf3ca5f62fa935061121d92506001600160a01b039091169086908a908a908a906166a3565b60405180910390a16020546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b1580156112b357600080fd5b505af11580156112c7573d6000803e3d6000fd5b50506021546040516001600160a01b0390911692507f373df382b9c587826f3de13f16d67f8d99f28ee947fc0924c6ef2d6d2c7e8546915061130c90869086906166e4565b60405180910390a26028546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561138657600080fd5b505af115801561139a573d6000803e3d6000fd5b50506021546040517f1cff79cd0000000000000000000000000000000000000000000000000000000081526001600160a01b038086169450631cff79cd935087926113ec9291169087906004016166fd565b60006040518083038185885af115801561140a573d6000803e3d6000fd5b50505050506040513d6000823e601f3d908101601f191682016040526114339190810190616807565b5060208054604080517fdda79b7500000000000000000000000000000000000000000000000000000000815290516114c0938c936001600160a01b03169263dda79b7592600480830193928290030181865afa158015611497573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114bb9190616628565b611a32565b60208054604080517f5b1125910000000000000000000000000000000000000000000000000000000081529051611523938b936001600160a01b031692635b11259192600480830193928290030181865afa158015611497573d6000803e3d6000fd5b5050505050505050565b6060601a805480602002602001604051908101604052809291908181526020016000905b82821015610c20578382906000526020600020018054611570906165db565b80601f016020809104026020016040519081016040528092919081815260200182805461159c906165db565b80156115e95780601f106115be576101008083540402835291602001916115e9565b820191906000526020600020905b8154815290600101906020018083116115cc57829003601f168201915b505050505081526020019060010190611551565b6060601d805480602002602001604051908101604052809291908181526020016000905b82821015610c205760008481526020908190206040805180820182526002860290920180546001600160a01b031683526001810180548351818702810187019094528084529394919385830193928301828280156116e057602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168152602001906004019060208260030104928301926001038202915080841161168d5790505b50505050508152505081526020019060010190611621565b6060601c805480602002602001604051908101604052809291908181526020016000905b82821015610c205760008481526020908190206040805180820182526002860290920180546001600160a01b031683526001810180548351818702810187019094528084529394919385830193928301828280156117db57602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190600401906020826003010492830192600103820291508084116117885790505b5050505050815250508152602001906001019061171c565b60606019805480602002602001604051908101604052809291908181526020016000905b82821015610c20578382906000526020600020018054611836906165db565b80601f0160208091040260200160405190810160405280929190818152602001828054611862906165db565b80156118af5780601f10611884576101008083540402835291602001916118af565b820191906000526020600020905b81548152906001019060200180831161189257829003601f168201915b505050505081526020019060010190611817565b60085460009060ff16156118db575060085460ff1690565b6040517f667f9d70000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d600482018190527f6661696c65640000000000000000000000000000000000000000000000000000602483015260009163667f9d7090604401602060405180830381865afa15801561196c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611990919061683c565b1415905090565b60606015805480602002602001604051908101604052809291908181526020018280548015610add576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311610abf575050505050905090565b6000611a01616152565b611a0c848483611ac2565b9150505b92915050565b611a1e616152565b611a2b8585858486611b3d565b5050505050565b6040517f515361f60000000000000000000000000000000000000000000000000000000081526001600160a01b03808416600483015282166024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063515361f69060440160006040518083038186803b158015611aa657600080fd5b505afa158015611aba573d6000803e3d6000fd5b505050505050565b600080611acf8584611c3e565b9050611b326040518060400160405280601d81526020017f4552433139363750726f78792e736f6c3a4552433139363750726f78790000008152508286604051602001611b1d9291906166fd565b60405160208183030381529060405285611c4a565b9150505b9392505050565b6040517f06447d560000000000000000000000000000000000000000000000000000000081526001600160a01b03821660048201528190737109709ecfa91a80626ff3989d68f67f5b1dd12d9081906306447d5690602401600060405180830381600087803b158015611baf57600080fd5b505af1925050508015611bc0575060015b611bd557611bd087878787611c78565b611c35565b611be187878787611c78565b806001600160a01b03166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015611c1c57600080fd5b505af1158015611c30573d6000803e3d6000fd5b505050505b50505050505050565b6000611b368383611c91565b60c08101515160009015611c6e57611c6784848460c00151611cac565b9050611b36565b611c678484611e52565b6000611c848483611f3d565b9050611a2b858285611f49565b6000611c9d8383612313565b611b3683836020015184611c4a565b600080611cb7612323565b90506000611cc586836123f6565b90506000611cdc826060015183602001518561289c565b90506000611cec83838989612aae565b90506000611cf98261392b565b602081015181519192509060030b15611d6c57898260400151604051602001611d23929190616855565b60408051601f19818403018152908290527f08c379a0000000000000000000000000000000000000000000000000000000008252611d63916004016168d6565b60405180910390fd5b6000611daf6040518060400160405280601581526020017f4465706c6f79656420746f20616464726573733a200000000000000000000000815250836001613afa565b6040517fc6ce059d000000000000000000000000000000000000000000000000000000008152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c6ce059d90611e029084906004016168d6565b602060405180830381865afa158015611e1f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e439190616628565b9b9a5050505050505050505050565b6040517f8d1cc9250000000000000000000000000000000000000000000000000000000081526000908190737109709ecfa91a80626ff3989d68f67f5b1dd12d90638d1cc92590611ea79087906004016168d6565b600060405180830381865afa158015611ec4573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611eec9190810190616807565b90506000611f1a8285604051602001611f069291906168e9565b604051602081830303815290604052613cfa565b90506001600160a01b038116611a0c578484604051602001611d23929190616918565b6000611c9d8383613d0d565b6040517f667f9d700000000000000000000000000000000000000000000000000000000081526001600160a01b03841660048201527fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61036024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d90600090829063667f9d7090604401602060405180830381865afa158015611fe5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612009919061683c565b9050806121b057600061201b86613d19565b604080518082018252600581527f352e302e30000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201529091506120a6905b60408051808201825260008082526020918201528151808301909252845182528085019082015290613e06565b806120b2575060008451115b15612135576040517f4f1ef2860000000000000000000000000000000000000000000000000000000081526001600160a01b03871690634f1ef286906120fe90889088906004016166fd565b600060405180830381600087803b15801561211857600080fd5b505af115801561212c573d6000803e3d6000fd5b505050506121aa565b6040517f3659cfe60000000000000000000000000000000000000000000000000000000081526001600160a01b038681166004830152871690633659cfe690602401600060405180830381600087803b15801561219157600080fd5b505af11580156121a5573d6000803e3d6000fd5b505050505b50611a2b565b8060006121bc82613d19565b604080518082018252600581527f352e302e300000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015290915061221e90612079565b8061222a575060008551115b156122af576040517f9623609d0000000000000000000000000000000000000000000000000000000081526001600160a01b03831690639623609d90612278908a908a908a906004016169c3565b600060405180830381600087803b15801561229257600080fd5b505af11580156122a6573d6000803e3d6000fd5b50505050611c35565b6040517f99a88ec40000000000000000000000000000000000000000000000000000000081526001600160a01b03888116600483015287811660248301528316906399a88ec490604401600060405180830381600087803b158015611c1c57600080fd5b61231f82826000613e1a565b5050565b604080518082018252600381527f6f75740000000000000000000000000000000000000000000000000000000000602082015290517fd145736c000000000000000000000000000000000000000000000000000000008152606091737109709ecfa91a80626ff3989d68f67f5b1dd12d91829063d145736c906123aa9084906004016169f4565b600060405180830381865afa1580156123c7573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526123ef9190810190616a3b565b9250505090565b6124286040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b6000737109709ecfa91a80626ff3989d68f67f5b1dd12d90506124736040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b61247c85613f1d565b6020820152600061248c86614302565b90506000836001600160a01b031663d930a0e66040518163ffffffff1660e01b8152600401600060405180830381865afa1580156124ce573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526124f69190810190616a3b565b868385602001516040516020016125109493929190616a84565b60408051601f19818403018152908290527f60f9bb1100000000000000000000000000000000000000000000000000000000825291506000906001600160a01b038616906360f9bb11906125689085906004016168d6565b600060405180830381865afa158015612585573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526125ad9190810190616a3b565b6040517fdb4235f60000000000000000000000000000000000000000000000000000000081529091506001600160a01b0386169063db4235f6906125f5908490600401616b88565b602060405180830381865afa158015612612573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061263691906165b9565b61264b5781604051602001611d239190616bda565b6040517f49c4fac80000000000000000000000000000000000000000000000000000000081526001600160a01b038616906349c4fac890612690908490600401616c6c565b600060405180830381865afa1580156126ad573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526126d59190810190616a3b565b84526040517fdb4235f60000000000000000000000000000000000000000000000000000000081526001600160a01b0386169063db4235f69061271c908490600401616cbe565b602060405180830381865afa158015612739573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061275d91906165b9565b156127f2576040517f49c4fac80000000000000000000000000000000000000000000000000000000081526001600160a01b038616906349c4fac8906127a7908490600401616cbe565b600060405180830381865afa1580156127c4573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526127ec9190810190616a3b565b60408501525b846001600160a01b03166349c4fac88286600001516040516020016128179190616d10565b6040516020818303038152906040526040518363ffffffff1660e01b8152600401612843929190616d7c565b600060405180830381865afa158015612860573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526128889190810190616a3b565b606085015250608083015250949350505050565b60408051600480825260a0820190925260609160009190816020015b60608152602001906001900390816128b85790505090506040518060400160405280600481526020017f67726570000000000000000000000000000000000000000000000000000000008152508160008151811061291857612918616da1565b60200260200101819052506040518060400160405280600381526020017f2d726c00000000000000000000000000000000000000000000000000000000008152508160018151811061296c5761296c616da1565b6020026020010181905250846040516020016129889190616dd0565b604051602081830303815290604052816002815181106129aa576129aa616da1565b6020026020010181905250826040516020016129c69190616e3c565b604051602081830303815290604052816003815181106129e8576129e8616da1565b602002602001018190525060006129fe8261392b565b602080820151604080518082018252600581527f2e6a736f6e0000000000000000000000000000000000000000000000000000008185019081528251808401845260008082529086015282518084019093529051825292810192909252919250612a8f9060408051808201825260008082526020918201528151808301909252845182528085019082015290614585565b612aa45785604051602001611d239190616e7d565b9695505050505050565b60a0810151604080518082018252600080825260209182015281518083019092528251808352928101910152606090737109709ecfa91a80626ff3989d68f67f5b1dd12d9015612afe565b511590565b612c7257826020015115612bba576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605860248201527f54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f742060448201527f62652075736564207768656e207468652060736b6970566572696679536f757260648201527f6365436f646560206f7074696f6e206973206074727565600000000000000000608482015260a401611d63565b8260c0015115612c72576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605360248201527f54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f742060448201527f62652075736564207768656e207468652060736b69704c6963656e736554797060648201527f6560206f7074696f6e2069732060747275656000000000000000000000000000608482015260a401611d63565b6040805160ff8082526120008201909252600091816020015b6060815260200190600190039081612c8b57905050905060006040518060400160405280600381526020017f6e70780000000000000000000000000000000000000000000000000000000000815250828280612ce690616f3d565b935060ff1681518110612cfb57612cfb616da1565b60200260200101819052506040518060400160405280600d81526020017f302e302e312d616c7068612e3700000000000000000000000000000000000000815250604051602001612d4c9190616f5c565b604051602081830303815290604052828280612d6790616f3d565b935060ff1681518110612d7c57612d7c616da1565b60200260200101819052506040518060400160405280600681526020017f6465706c6f790000000000000000000000000000000000000000000000000000815250828280612dc990616f3d565b935060ff1681518110612dde57612dde616da1565b60200260200101819052506040518060400160405280600e81526020017f2d2d636f6e74726163744e616d65000000000000000000000000000000000000815250828280612e2b90616f3d565b935060ff1681518110612e4057612e40616da1565b60200260200101819052508760200151828280612e5c90616f3d565b935060ff1681518110612e7157612e71616da1565b60200260200101819052506040518060400160405280600e81526020017f2d2d636f6e747261637450617468000000000000000000000000000000000000815250828280612ebe90616f3d565b935060ff1681518110612ed357612ed3616da1565b602090810291909101015287518282612eeb81616f3d565b935060ff1681518110612f0057612f00616da1565b60200260200101819052506040518060400160405280600981526020017f2d2d636861696e49640000000000000000000000000000000000000000000000815250828280612f4d90616f3d565b935060ff1681518110612f6257612f62616da1565b6020026020010181905250612f76466145e6565b8282612f8181616f3d565b935060ff1681518110612f9657612f96616da1565b60200260200101819052506040518060400160405280600f81526020017f2d2d6275696c64496e666f46696c650000000000000000000000000000000000815250828280612fe390616f3d565b935060ff1681518110612ff857612ff8616da1565b60200260200101819052508682828061301090616f3d565b935060ff168151811061302557613025616da1565b602090810291909101015285511561314c5760408051808201909152601581527f2d2d636f6e7374727563746f7242797465636f646500000000000000000000006020820152828261307681616f3d565b935060ff168151811061308b5761308b616da1565b60209081029190910101526040517f71aad10d0000000000000000000000000000000000000000000000000000000081526001600160a01b038416906371aad10d906130db9089906004016168d6565b600060405180830381865afa1580156130f8573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526131209190810190616a3b565b828261312b81616f3d565b935060ff168151811061314057613140616da1565b60200260200101819052505b84602001511561321c5760408051808201909152601281527f2d2d766572696679536f75726365436f646500000000000000000000000000006020820152828261319581616f3d565b935060ff16815181106131aa576131aa616da1565b60200260200101819052506040518060400160405280600581526020017f66616c73650000000000000000000000000000000000000000000000000000008152508282806131f790616f3d565b935060ff168151811061320c5761320c616da1565b60200260200101819052506133e3565b613254612af98660a0015160408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6132e75760408051808201909152600d81527f2d2d6c6963656e736554797065000000000000000000000000000000000000006020820152828261329781616f3d565b935060ff16815181106132ac576132ac616da1565b60200260200101819052508460a001516040516020016132cc9190616dd0565b6040516020818303038152906040528282806131f790616f3d565b8460c0015115801561332a57506040808901518151808301835260008082526020918201528251808401909352815183529081019082015261332890511590565b155b156133e35760408051808201909152600d81527f2d2d6c6963656e736554797065000000000000000000000000000000000000006020820152828261336e81616f3d565b935060ff168151811061338357613383616da1565b602002602001018190525061339788614686565b6040516020016133a79190616dd0565b6040516020818303038152906040528282806133c290616f3d565b935060ff16815181106133d7576133d7616da1565b60200260200101819052505b6040808601518151808301835260008082526020918201528251808401909352815183529081019082015261341790511590565b6134ac5760408051808201909152600b81527f2d2d72656c6179657249640000000000000000000000000000000000000000006020820152828261345a81616f3d565b935060ff168151811061346f5761346f616da1565b6020026020010181905250846040015182828061348b90616f3d565b935060ff16815181106134a0576134a0616da1565b60200260200101819052505b6060850151156135cd5760408051808201909152600681527f2d2d73616c740000000000000000000000000000000000000000000000000000602082015282826134f581616f3d565b935060ff168151811061350a5761350a616da1565b602090810291909101015260608501516040517fb11a19e800000000000000000000000000000000000000000000000000000000815260048101919091526001600160a01b0384169063b11a19e890602401600060405180830381865afa158015613579573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526135a19190810190616a3b565b82826135ac81616f3d565b935060ff16815181106135c1576135c1616da1565b60200260200101819052505b60e085015151156136745760408051808201909152600a81527f2d2d6761734c696d6974000000000000000000000000000000000000000000006020820152828261361781616f3d565b935060ff168151811061362c5761362c616da1565b60200260200101819052506136488560e00151600001516145e6565b828261365381616f3d565b935060ff168151811061366857613668616da1565b60200260200101819052505b60e0850151602001511561371e5760408051808201909152600a81527f2d2d676173507269636500000000000000000000000000000000000000000000602082015282826136c181616f3d565b935060ff16815181106136d6576136d6616da1565b60200260200101819052506136f28560e00151602001516145e6565b82826136fd81616f3d565b935060ff168151811061371257613712616da1565b60200260200101819052505b60e085015160400151156137c85760408051808201909152600e81527f2d2d6d61784665655065724761730000000000000000000000000000000000006020820152828261376b81616f3d565b935060ff168151811061378057613780616da1565b602002602001018190525061379c8560e00151604001516145e6565b82826137a781616f3d565b935060ff16815181106137bc576137bc616da1565b60200260200101819052505b60e085015160600151156138725760408051808201909152601681527f2d2d6d61785072696f72697479466565506572476173000000000000000000006020820152828261381581616f3d565b935060ff168151811061382a5761382a616da1565b60200260200101819052506138468560e00151606001516145e6565b828261385181616f3d565b935060ff168151811061386657613866616da1565b60200260200101819052505b60008160ff1667ffffffffffffffff8111156138905761389061671f565b6040519080825280602002602001820160405280156138c357816020015b60608152602001906001900390816138ae5790505b50905060005b8260ff168160ff16101561391c57838160ff16815181106138ec576138ec616da1565b6020026020010151828260ff168151811061390957613909616da1565b60209081029190910101526001016138c9565b5093505050505b949350505050565b6139526040518060600160405280600060030b815260200160608152602001606081525090565b60408051808201825260048082527f6261736800000000000000000000000000000000000000000000000000000000602083015291517fd145736c000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d92600091849163d145736c916139d891869101616fc7565b600060405180830381865afa1580156139f5573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052613a1d9190810190616a3b565b90506000613a2b8683615175565b90506000846001600160a01b031663f45c1ce7836040518263ffffffff1660e01b8152600401613a5b91906164ab565b6000604051808303816000875af1158015613a7a573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052613aa2919081019061700e565b805190915060030b15801590613abb5750602081015151155b8015613aca5750604081015151155b15612aa45781600081518110613ae257613ae2616da1565b6020026020010151604051602001611d2391906170c4565b60606000613b2f8560408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600080825260209182015281518083019092528651825280870190820152909150613b669082905b906152ca565b15613cc3576000613be382613bdd84613bd7613ba98a60408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6040805180820182526000808252602091820152815180830190925282518252918201519181019190915290565b906152f1565b90615353565b604080518082018252600181527f0a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152909150613c479082906152ca565b15613cb157604080518082018252600181527f0a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152613cae905b82906153d8565b90505b613cba816153fe565b92505050611b36565b8215613cdc578484604051602001611d239291906172b0565b5050604080516020810190915260008152611b36565b509392505050565b6000808251602084016000f09392505050565b61231f82826001613e1a565b60408051600481526024810182526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fad3cb1cc00000000000000000000000000000000000000000000000000000000179052905160609160009182916001600160a01b03861691613d8e9190617357565b6000604051808303816000865af19150503d8060008114613dcb576040519150601f19603f3d011682016040523d82523d6000602084013e613dd0565b606091505b50915091508115613def57808060200190518101906139239190616a3b565b505060408051602081019091526000815292915050565b6000613e128383615467565b159392505050565b8160a0015115613e2957505050565b6000613e36848484615542565b90506000613e438261392b565b602081015181519192509060030b158015613edf5750604080518082018252600781527f535543434553530000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152613edf90604080518082018252600080825260209182015281518083019092528451825280850190820152613b60565b15613eec57505050505050565b60408201515115613f0c578160400151604051602001611d239190617373565b80604051602001611d2391906173d1565b60606000613f528360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600481527f2e736f6c0000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152909150613fb7905b8290614585565b1561402657604080518082018252600481527f2e736f6c0000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152611b3690614021908390615add565b6153fe565b604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152614088905b8290615b67565b60010361415557604080518082018252600181527f3a00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526140ee90613ca7565b50604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152611b3690614021905b83906153d8565b604080518082018252600581527f2e6a736f6e000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526141b490613fb0565b156142eb57604080518082018252600181527f2f0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082018190528451808601909552925184528301529061421c908390615c01565b90506000816001835161422f919061743c565b8151811061423f5761423f616da1565b602002602001015190506142e26140216142b56040518060400160405280600581526020017f2e6a736f6e00000000000000000000000000000000000000000000000000000081525060408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b60408051808201825260008082526020918201528151808301909252855182528086019082015290615add565b95945050505050565b82604051602001611d23919061744f565b50919050565b606060006143378360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600481527f2e736f6c000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015290915061439990613fb0565b156143a757611b36816153fe565b604080518082018252600181527f3a000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261440690614081565b60010361447057604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152611b36906140219061414e565b604080518082018252600581527f2e6a736f6e000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526144cf90613fb0565b156142eb57604080518082018252600181527f2f00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820181905284518086019095529251845283015290614537908390615c01565b9050600181511115614573578060028251614552919061743c565b8151811061456257614562616da1565b602002602001015192505050919050565b5082604051602001611d23919061744f565b80518251600091111561459a57506000611a10565b815183516020850151600092916145b09161752d565b6145ba919061743c565b9050826020015181036145d1576001915050611a10565b82516020840151819020912014905092915050565b606060006145f383615ca6565b600101905060008167ffffffffffffffff8111156146135761461361671f565b6040519080825280601f01601f19166020018201604052801561463d576020820181803683370190505b5090508181016020015b600019017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a850494508461464757509392505050565b604081810151815180830183526000808252602091820181905283518085018552835181529282018383015283518085018552600a81527f554e4c4943454e5345440000000000000000000000000000000000000000000081840190815285518087018752838152840192909252845180860190955251845290830152606091614712905b8290613e06565b1561475257505060408051808201909152600481527f4e6f6e65000000000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600981527f556e6c6963656e73650000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526147b19061470b565b156147f157505060408051808201909152600981527f556e6c6963656e736500000000000000000000000000000000000000000000006020820152919050565b604080518082018252600381527f4d49540000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526148509061470b565b1561489057505060408051808201909152600381527f4d495400000000000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f47504c2d322e302d6f6e6c790000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526148ef9061470b565b806149545750604080518082018252601081527f47504c2d322e302d6f722d6c6174657200000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526149549061470b565b1561499457505060408051808201909152600981527f474e552047504c763200000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f47504c2d332e302d6f6e6c790000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526149f39061470b565b80614a585750604080518082018252601081527f47504c2d332e302d6f722d6c617465720000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152614a589061470b565b15614a9857505060408051808201909152600981527f474e552047504c763300000000000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4c47504c2d322e312d6f6e6c790000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152614af79061470b565b80614b5c5750604080518082018252601181527f4c47504c2d322e312d6f722d6c6174657200000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152614b5c9061470b565b15614b9c57505060408051808201909152600c81527f474e55204c47504c76322e3100000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4c47504c2d332e302d6f6e6c790000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152614bfb9061470b565b80614c605750604080518082018252601181527f4c47504c2d332e302d6f722d6c6174657200000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152614c609061470b565b15614ca057505060408051808201909152600a81527f474e55204c47504c7633000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f4253442d322d436c61757365000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152614cff9061470b565b15614d3f57505060408051808201909152600c81527f4253442d322d436c6175736500000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f4253442d332d436c61757365000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152614d9e9061470b565b15614dde57505060408051808201909152600c81527f4253442d332d436c6175736500000000000000000000000000000000000000006020820152919050565b604080518082018252600781527f4d504c2d322e300000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152614e3d9061470b565b15614e7d57505060408051808201909152600781527f4d504c2d322e30000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600781527f4f534c2d332e300000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152614edc9061470b565b15614f1c57505060408051808201909152600781527f4f534c2d332e30000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600a81527f4170616368652d322e300000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152614f7b9061470b565b15614fbb57505060408051808201909152600a81527f4170616368652d322e30000000000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4147504c2d332e302d6f6e6c79000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261501a9061470b565b8061507f5750604080518082018252601181527f4147504c2d332e302d6f722d6c617465720000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261507f9061470b565b156150bf57505060408051808201909152600a81527f474e55204147504c7633000000000000000000000000000000000000000000006020820152919050565b604080518082018252600881527f4255534c2d312e310000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261511e9061470b565b1561515e57505060408051808201909152600781527f42534c20312e31000000000000000000000000000000000000000000000000006020820152919050565b60408084015184519151611d239290602001617540565b60608060005b8451811015615200578185828151811061519757615197616da1565b60200260200101516040516020016151b09291906168e9565b6040516020818303038152906040529150600185516151cf919061743c565b81146151f857816040516020016151e691906176a9565b60405160208183030381529060405291505b60010161517b565b5060408051600380825260808201909252600091816020015b6060815260200190600190039081615219579050509050838160008151811061524457615244616da1565b60200260200101819052506040518060400160405280600281526020017f2d630000000000000000000000000000000000000000000000000000000000008152508160018151811061529857615298616da1565b602002602001018190525081816002815181106152b7576152b7616da1565b6020908102919091010152949350505050565b60208083015183518351928401516000936152e89291849190615d88565b14159392505050565b604080518082019091526000808252602082015260006153238460000151856020015185600001518660200151615e99565b9050836020015181615335919061743c565b8451859061534490839061743c565b90525060208401525090919050565b6040805180820190915260008082526020820152815183511015615378575081611a10565b602080830151908401516001911461539f5750815160208481015190840151829020919020145b80156153d0578251845185906153b690839061743c565b90525082516020850180516153cc90839061752d565b9052505b509192915050565b60408051808201909152600080825260208201526153f7838383615fb9565b5092915050565b60606000826000015167ffffffffffffffff81111561541f5761541f61671f565b6040519080825280601f01601f191660200182016040528015615449576020820181803683370190505b50905060006020820190506153f78185602001518660000151616064565b815181516000919081111561547a575081515b6020808501519084015160005b8381101561553357825182518082146155035760001960208710156154e2576001846154b489602061743c565b6154be919061752d565b6154c99060086176ea565b6154d49060026177e8565b6154de919061743c565b1990505b8181168382168181039114615500579750611a109650505050505050565b50505b61550e60208661752d565b945061551b60208561752d565b9350505060208161552c919061752d565b9050615487565b5084518651612aa491906177f4565b6060600061554e612323565b6040805160ff808252612000820190925291925060009190816020015b606081526020019060019003908161556b57905050905060006040518060400160405280600381526020017f6e707800000000000000000000000000000000000000000000000000000000008152508282806155c690616f3d565b935060ff16815181106155db576155db616da1565b60200260200101819052506040518060400160405280600781526020017f5e312e33322e330000000000000000000000000000000000000000000000000081525060405160200161562c9190617814565b60405160208183030381529060405282828061564790616f3d565b935060ff168151811061565c5761565c616da1565b60200260200101819052506040518060400160405280600881526020017f76616c69646174650000000000000000000000000000000000000000000000008152508282806156a990616f3d565b935060ff16815181106156be576156be616da1565b6020026020010181905250826040516020016156da9190616e3c565b6040516020818303038152906040528282806156f590616f3d565b935060ff168151811061570a5761570a616da1565b60200260200101819052506040518060400160405280600a81526020017f2d2d636f6e74726163740000000000000000000000000000000000000000000081525082828061575790616f3d565b935060ff168151811061576c5761576c616da1565b602002602001018190525061578187846160de565b828261578c81616f3d565b935060ff16815181106157a1576157a1616da1565b60209081029190910101528551511561584d5760408051808201909152600b81527f2d2d7265666572656e6365000000000000000000000000000000000000000000602082015282826157f381616f3d565b935060ff168151811061580857615808616da1565b60200260200101819052506158218660000151846160de565b828261582c81616f3d565b935060ff168151811061584157615841616da1565b60200260200101819052505b8560800151156158bb5760408051808201909152601881527f2d2d756e73616665536b697053746f72616765436865636b00000000000000006020820152828261589681616f3d565b935060ff16815181106158ab576158ab616da1565b6020026020010181905250615921565b84156159215760408051808201909152601281527f2d2d726571756972655265666572656e636500000000000000000000000000006020820152828261590081616f3d565b935060ff168151811061591557615915616da1565b60200260200101819052505b604086015151156159bd5760408051808201909152600d81527f2d2d756e73616665416c6c6f77000000000000000000000000000000000000006020820152828261596b81616f3d565b935060ff168151811061598057615980616da1565b6020026020010181905250856040015182828061599c90616f3d565b935060ff16815181106159b1576159b1616da1565b60200260200101819052505b856060015115615a275760408051808201909152601481527f2d2d756e73616665416c6c6f7752656e616d657300000000000000000000000060208201528282615a0681616f3d565b935060ff1681518110615a1b57615a1b616da1565b60200260200101819052505b60008160ff1667ffffffffffffffff811115615a4557615a4561671f565b604051908082528060200260200182016040528015615a7857816020015b6060815260200190600190039081615a635790505b50905060005b8260ff168160ff161015615ad157838160ff1681518110615aa157615aa1616da1565b6020026020010151828260ff1681518110615abe57615abe616da1565b6020908102919091010152600101615a7e565b50979650505050505050565b6040805180820190915260008082526020820152815183511015615b02575081611a10565b81518351602085015160009291615b189161752d565b615b22919061743c565b60208401519091506001908214615b43575082516020840151819020908220145b8015615b5e57835185518690615b5a90839061743c565b9052505b50929392505050565b6000808260000151615b8b8560000151866020015186600001518760200151615e99565b615b95919061752d565b90505b83516020850151615ba9919061752d565b81116153f75781615bb981617859565b9250508260000151615bf0856020015183615bd4919061743c565b8651615be0919061743c565b8386600001518760200151615e99565b615bfa919061752d565b9050615b98565b60606000615c0f8484615b67565b615c1a90600161752d565b67ffffffffffffffff811115615c3257615c3261671f565b604051908082528060200260200182016040528015615c6557816020015b6060815260200190600190039081615c505790505b50905060005b8151811015613cf257615c8161402186866153d8565b828281518110615c9357615c93616da1565b6020908102919091010152600101615c6b565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310615cef577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310615d1b576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc100008310615d3957662386f26fc10000830492506010015b6305f5e1008310615d51576305f5e100830492506008015b6127108310615d6557612710830492506004015b60648310615d77576064830492506002015b600a8310611a105760010192915050565b600080858411615e8f5760208411615e3b5760008415615dd3576001615daf86602061743c565b615dba9060086176ea565b615dc59060026177e8565b615dcf919061743c565b1990505b8351811685615de2898961752d565b615dec919061743c565b805190935082165b818114615e2657878411615e0e5787945050505050613923565b83615e1881617873565b945050828451169050615df4565b615e30878561752d565b945050505050613923565b838320615e48858861743c565b615e52908761752d565b91505b858210615e8d57848220808203615e7a57615e70868461752d565b9350505050613923565b615e8560018461743c565b925050615e55565b505b5092949350505050565b60008381868511615fa45760208511615f535760008515615ee5576001615ec187602061743c565b615ecc9060086176ea565b615ed79060026177e8565b615ee1919061743c565b1990505b84518116600087615ef68b8b61752d565b615f00919061743c565b855190915083165b828114615f4557818610615f2d57615f208b8b61752d565b9650505050505050613923565b85615f3781617859565b965050838651169050615f08565b859650505050505050613923565b508383206000905b615f65868961743c565b8211615fa257858320808203615f815783945050505050613923565b615f8c60018561752d565b9350508180615f9a90617859565b925050615f5b565b505b615fae878761752d565b979650505050505050565b60408051808201909152600080825260208201526000615feb8560000151866020015186600001518760200151615e99565b602080870180519186019190915251909150616007908261743c565b83528451602086015161601a919061752d565b8103616029576000855261605b565b83518351616037919061752d565b8551869061604690839061743c565b9052508351616055908261752d565b60208601525b50909392505050565b6020811061609c578151835261607b60208461752d565b925061608860208361752d565b915061609560208261743c565b9050616064565b60001981156160cb5760016160b283602061743c565b6160be906101006177e8565b6160c8919061743c565b90505b9151835183169219169190911790915250565b606060006160ec84846123f6565b80516020808301516040519394506161069390910161788a565b60405160208183030381529060405291505092915050565b610c9f806178e383390190565b61140b8061858283390190565b61155a8061998d83390190565b610d5e8061aee783390190565b6040518060e0016040528060608152602001606081526020016060815260200160001515815260200160001515815260200160001515815260200161619561619a565b905290565b604051806101000160405280600015158152602001600015158152602001606081526020016000801916815260200160608152602001606081526020016000151581526020016161956040518060800160405280600081526020016000815260200160008152602001600081525090565b602080825282518282018190526000918401906040840190835b8181101561624c5783516001600160a01b0316835260209384019390920191600101616225565b509095945050505050565b60005b8381101561627257818101518382015260200161625a565b50506000910152565b60008151808452616293816020860160208601616257565b601f01601f19169290920160200192915050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b828110156163a3577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452815180516001600160a01b03168652602090810151604082880181905281519088018190529101906060600582901b88018101919088019060005b81811015616389577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa08a850301835261637384865161627b565b6020958601959094509290920191600101616339565b5091975050506020948501949290920191506001016162cf565b50929695505050505050565b600081518084526020840193506020830160005b828110156164035781517fffffffff00000000000000000000000000000000000000000000000000000000168652602095860195909101906001016163c3565b5093949350505050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b828110156163a3577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08786030184528151805160408752616479604088018261627b565b905060208201519150868103602088015261649481836163af565b965050506020938401939190910190600101616435565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b828110156163a3577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc087860301845261650d85835161627b565b945060209384019391909101906001016164d3565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b828110156163a3577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc087860301845281516001600160a01b03815116865260208101519050604060208701526165a360408701826163af565b955050602093840193919091019060010161654a565b6000602082840312156165cb57600080fd5b81518015158114611b3657600080fd5b600181811c908216806165ef57607f821691505b6020821081036142fc577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006020828403121561663a57600080fd5b81516001600160a01b0381168114611b3657600080fd5b606081526000616664606083018661627b565b602083019490945250901515604090910152919050565b6001600160a01b03841681528260208201526060604082015260006142e2606083018461627b565b6001600160a01b038616815284602082015260a0604082015260006166cb60a083018661627b565b6060830194909452509015156080909101529392505050565b828152604060208201526000613923604083018461627b565b6001600160a01b0383168152604060208201526000613923604083018461627b565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040516060810167ffffffffffffffff811182821017156167715761677161671f565b60405290565b60008067ffffffffffffffff8411156167925761679261671f565b50604051601f19601f85018116603f0116810181811067ffffffffffffffff821117156167c1576167c161671f565b6040528381529050808284018510156167d957600080fd5b613cf2846020830185616257565b600082601f8301126167f857600080fd5b611b3683835160208501616777565b60006020828403121561681957600080fd5b815167ffffffffffffffff81111561683057600080fd5b611a0c848285016167e7565b60006020828403121561684e57600080fd5b5051919050565b7f4661696c656420746f206465706c6f7920636f6e74726163742000000000000081526000835161688d81601a850160208801616257565b7f3a20000000000000000000000000000000000000000000000000000000000000601a9184019182015283516168ca81601c840160208801616257565b01601c01949350505050565b602081526000611b36602083018461627b565b600083516168fb818460208801616257565b83519083019061690f818360208801616257565b01949350505050565b7f4661696c656420746f206465706c6f7920636f6e74726163742000000000000081526000835161695081601a850160208801616257565b7f207573696e6720636f6e7374727563746f722064617461202200000000000000601a91840191820152835161698d816033840160208801616257565b7f220000000000000000000000000000000000000000000000000000000000000060339290910191820152603401949350505050565b6001600160a01b03841681526001600160a01b03831660208201526060604082015260006142e2606083018461627b565b60408152600b60408201527f464f554e4452595f4f55540000000000000000000000000000000000000000006060820152608060208201526000611b36608083018461627b565b600060208284031215616a4d57600080fd5b815167ffffffffffffffff811115616a6457600080fd5b8201601f81018413616a7557600080fd5b611a0c84825160208401616777565b60008551616a96818460208a01616257565b7f2f000000000000000000000000000000000000000000000000000000000000009083019081528551616ad0816001840160208a01616257565b7f2f00000000000000000000000000000000000000000000000000000000000000600192909101918201528451616b0e816002840160208901616257565b6001818301019150507f2f0000000000000000000000000000000000000000000000000000000000000060018201528351616b50816002840160208801616257565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600292909101918201526007019695505050505050565b604081526000616b9b604083018461627b565b8281036020840152600481527f2e6173740000000000000000000000000000000000000000000000000000000060208201526040810191505092915050565b7f436f756c64206e6f742066696e642041535420696e2061727469666163742000815260008251616c1281601f850160208701616257565b7f2e205365742060617374203d20747275656020696e20666f756e6472792e746f601f9390910192830152507f6d6c000000000000000000000000000000000000000000000000000000000000603f820152604101919050565b604081526000616c7f604083018461627b565b8281036020840152601181527f2e6173742e6162736f6c7574655061746800000000000000000000000000000060208201526040810191505092915050565b604081526000616cd1604083018461627b565b8281036020840152600c81527f2e6173742e6c6963656e7365000000000000000000000000000000000000000060208201526040810191505092915050565b7f2e6d657461646174612e736f75726365732e5b27000000000000000000000000815260008251616d48816014850160208701616257565b7f275d2e6b656363616b32353600000000000000000000000000000000000000006014939091019283015250602001919050565b604081526000616d8f604083018561627b565b8281036020840152611b32818561627b565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f2200000000000000000000000000000000000000000000000000000000000000815260008251616e08816001850160208701616257565b7f22000000000000000000000000000000000000000000000000000000000000006001939091019283015250600201919050565b60008251616e4e818460208701616257565b7f2f6275696c642d696e666f000000000000000000000000000000000000000000920191825250600b01919050565b7f436f756c64206e6f742066696e64206275696c642d696e666f2066696c65207781527f697468206d61746368696e6720736f7572636520636f6465206861736820666f60208201527f7220636f6e747261637420000000000000000000000000000000000000000000604082015260008251616f0181604b850160208701616257565b91909101604b0192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600060ff821660ff8103616f5357616f53616f0e565b60010192915050565b7f406f70656e7a657070656c696e2f646566656e6465722d6465706c6f792d636c81527f69656e742d636c69400000000000000000000000000000000000000000000000602082015260008251616fba816029850160208701616257565b9190910160290192915050565b60408152601660408201527f4f50454e5a455050454c494e5f424153485f50415448000000000000000000006060820152608060208201526000611b36608083018461627b565b60006020828403121561702057600080fd5b815167ffffffffffffffff81111561703757600080fd5b82016060818503121561704957600080fd5b61705161674e565b81518060030b811461706257600080fd5b8152602082015167ffffffffffffffff81111561707e57600080fd5b61708a868285016167e7565b602083015250604082015167ffffffffffffffff8111156170aa57600080fd5b6170b6868285016167e7565b604083015250949350505050565b7f4661696c656420746f2072756e206261736820636f6d6d616e6420776974682081527f2200000000000000000000000000000000000000000000000000000000000000602082015260008251617122816021850160208701616257565b7f222e20496620796f7520617265207573696e672057696e646f77732c2073657460219390910192830152507f20746865204f50454e5a455050454c494e5f424153485f5041544820656e766960418201527f726f6e6d656e74207661726961626c6520746f207468652066756c6c7920717560618201527f616c69666965642070617468206f66207468652062617368206578656375746160818201527f626c652e20466f72206578616d706c652c20696620796f75206172652075736960a18201527f6e672047697420666f722057696e646f77732c206164642074686520666f6c6c60c18201527f6f77696e67206c696e6520696e20746865202e656e762066696c65206f66207960e18201527f6f75722070726f6a65637420287573696e6720666f727761726420736c6173686101018201527f6573293a0a4f50454e5a455050454c494e5f424153485f504154483d22433a2f6101218201527f50726f6772616d2046696c65732f4769742f62696e2f6261736822000000000061014182015261015c01919050565b7f4661696c656420746f2066696e64206c696e652077697468207072656669782081527f270000000000000000000000000000000000000000000000000000000000000060208201526000835161730e816021850160208801616257565b7f2720696e206f75747075743a2000000000000000000000000000000000000000602191840191820152835161734b81602e840160208801616257565b01602e01949350505050565b60008251617369818460208701616257565b9190910192915050565b7f4661696c656420746f2072756e2075706772616465207361666574792076616c81527f69646174696f6e3a200000000000000000000000000000000000000000000000602082015260008251616fba816029850160208701616257565b7f55706772616465207361666574792076616c69646174696f6e206661696c656481527f3a0a00000000000000000000000000000000000000000000000000000000000060208201526000825161742f816022850160208701616257565b9190910160220192915050565b81810381811115611a1057611a10616f0e565b7f436f6e7472616374206e616d652000000000000000000000000000000000000081526000825161748781600e850160208701616257565b7f206d75737420626520696e2074686520666f726d6174204d79436f6e74726163600e9390910192830152507f742e736f6c3a4d79436f6e7472616374206f72204d79436f6e74726163742e73602e8201527f6f6c206f72206f75742f4d79436f6e74726163742e736f6c2f4d79436f6e7472604e8201527f6163742e6a736f6e000000000000000000000000000000000000000000000000606e820152607601919050565b80820180821115611a1057611a10616f0e565b7f53504458206c6963656e7365206964656e746966696572200000000000000000815260008351617578816018850160208801616257565b7f20696e200000000000000000000000000000000000000000000000000000000060189184019182015283516175b581601c840160208801616257565b7f20646f6573206e6f74206c6f6f6b206c696b65206120737570706f7274656420601c92909101918201527f6c6963656e736520666f7220626c6f636b206578706c6f726572207665726966603c8201527f69636174696f6e2e205573652074686520606c6963656e73655479706560206f605c8201527f7074696f6e20746f20737065636966792061206c6963656e736520747970652c607c8201527f206f7220736574207468652060736b69704c6963656e73655479706560206f70609c8201527f74696f6e20746f2060747275656020746f20736b69702e00000000000000000060bc82015260d301949350505050565b600082516176bb818460208701616257565b7f2000000000000000000000000000000000000000000000000000000000000000920191825250600101919050565b8082028115828204841417611a1057611a10616f0e565b6001815b600184111561773c5780850481111561772057617720616f0e565b600184161561772e57908102905b60019390931c928002617705565b935093915050565b60008261775357506001611a10565b8161776057506000611a10565b816001811461777657600281146177805761779c565b6001915050611a10565b60ff84111561779157617791616f0e565b50506001821b611a10565b5060208310610133831016604e8410600b84101617156177bf575081810a611a10565b6177cc6000198484617701565b80600019048211156177e0576177e0616f0e565b029392505050565b6000611b368383617744565b81810360008312801583831316838312821617156153f7576153f7616f0e565b7f406f70656e7a657070656c696e2f75706772616465732d636f7265400000000081526000825161784c81601c850160208701616257565b91909101601c0192915050565b6000600019820361786c5761786c616f0e565b5060010190565b60008161788257617882616f0e565b506000190190565b6000835161789c818460208801616257565b7f3a0000000000000000000000000000000000000000000000000000000000000090830190815283516178d6816001840160208801616257565b0160010194935050505056fe608060405234801561001057600080fd5b50604051610c9f380380610c9f83398101604081905261002f9161010d565b8181600361003d83826101ff565b50600461004a82826101ff565b50505050506102bd565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261007b57600080fd5b81516001600160401b0381111561009457610094610054565b604051601f8201601f19908116603f011681016001600160401b03811182821017156100c2576100c2610054565b6040528181528382016020018510156100da57600080fd5b60005b828110156100f9576020818601810151838301820152016100dd565b506000918101602001919091529392505050565b6000806040838503121561012057600080fd5b82516001600160401b0381111561013657600080fd5b6101428582860161006a565b602085015190935090506001600160401b0381111561016057600080fd5b61016c8582860161006a565b9150509250929050565b600181811c9082168061018a57607f821691505b6020821081036101aa57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156101fa57806000526020600020601f840160051c810160208510156101d75750805b601f840160051c820191505b818110156101f757600081556001016101e3565b50505b505050565b81516001600160401b0381111561021857610218610054565b61022c816102268454610176565b846101b0565b6020601f82116001811461026057600083156102485750848201515b600019600385901b1c1916600184901b1784556101f7565b600084815260208120601f198516915b828110156102905787850151825560209485019460019092019101610270565b50848210156102ae5786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b6109d3806102cc6000396000f3fe608060405234801561001057600080fd5b50600436106100be5760003560e01c806340c10f191161007657806395d89b411161005b57806395d89b4114610183578063a9059cbb1461018b578063dd62ed3e1461019e57600080fd5b806340c10f191461013857806370a082311461014d57600080fd5b806318160ddd116100a757806318160ddd1461010457806323b872dd14610116578063313ce5671461012957600080fd5b806306fdde03146100c3578063095ea7b3146100e1575b600080fd5b6100cb6101e4565b6040516100d891906107bf565b60405180910390f35b6100f46100ef366004610854565b610276565b60405190151581526020016100d8565b6002545b6040519081526020016100d8565b6100f461012436600461087e565b610290565b604051601281526020016100d8565b61014b610146366004610854565b6102b4565b005b61010861015b3660046108bb565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6100cb6102c2565b6100f4610199366004610854565b6102d1565b6101086101ac3660046108dd565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6060600380546101f390610910565b80601f016020809104026020016040519081016040528092919081815260200182805461021f90610910565b801561026c5780601f106102415761010080835404028352916020019161026c565b820191906000526020600020905b81548152906001019060200180831161024f57829003601f168201915b5050505050905090565b6000336102848185856102df565b60019150505b92915050565b60003361029e8582856102f1565b6102a98585856103c5565b506001949350505050565b6102be8282610470565b5050565b6060600480546101f390610910565b6000336102848185856103c5565b6102ec83838360016104cc565b505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146103bf57818110156103b0576040517ffb8f41b200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416600482015260248101829052604481018390526064015b60405180910390fd5b6103bf848484840360006104cc565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8316610415576040517f96c6fd1e000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff8216610465576040517fec442f05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b6102ec838383610614565b73ffffffffffffffffffffffffffffffffffffffff82166104c0576040517fec442f05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b6102be60008383610614565b73ffffffffffffffffffffffffffffffffffffffff841661051c576040517fe602df05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff831661056c576040517f94280d62000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260016020908152604080832093871683529290522082905580156103bf578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161060691815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff831661064c5780600260008282546106419190610963565b909155506106fe9050565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260208190526040902054818110156106d2576040517fe450d38c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8516600482015260248101829052604481018390526064016103a7565b73ffffffffffffffffffffffffffffffffffffffff841660009081526020819052604090209082900390555b73ffffffffffffffffffffffffffffffffffffffff821661072757600280548290039055610753565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090208054820190555b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516107b291815260200190565b60405180910390a3505050565b602081526000825180602084015260005b818110156107ed57602081860181015160408684010152016107d0565b5060006040828501015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011684010191505092915050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461084f57600080fd5b919050565b6000806040838503121561086757600080fd5b6108708361082b565b946020939093013593505050565b60008060006060848603121561089357600080fd5b61089c8461082b565b92506108aa6020850161082b565b929592945050506040919091013590565b6000602082840312156108cd57600080fd5b6108d68261082b565b9392505050565b600080604083850312156108f057600080fd5b6108f98361082b565b91506109076020840161082b565b90509250929050565b600181811c9082168061092457607f821691505b60208210810361095d577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b8082018082111561028a577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea26469706673582212207e804ca539d49155d2b6bc19268ce22f9f857027c75247d69fb0d56a089c93d464736f6c634300081a003360a060405234801561001057600080fd5b5060405161140b38038061140b83398101604081905261002f916101b3565b60016000556002805460ff191690556001600160a01b038316158061005b57506001600160a01b038216155b8061006d57506001600160a01b038116155b1561008b5760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b0383166080526100a3600082610102565b506100ce7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a82610102565b506100f97f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e483610102565b505050506101f6565b60008281526001602090815260408083206001600160a01b038516845290915281205460ff1661018d5760008381526001602081815260408084206001600160a01b0387168086529252808420805460ff19169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a4506001610191565b5060005b92915050565b80516001600160a01b03811681146101ae57600080fd5b919050565b6000806000606084860312156101c857600080fd5b6101d184610197565b92506101df60208501610197565b91506101ed60408501610197565b90509250925092565b6080516111de61022d60003960008181610132015281816103c5015281816104270152818161065801526106ba01526111de6000f3fe608060405234801561001057600080fd5b50600436106101005760003560e01c80638456cb5911610097578063c8a0236211610066578063c8a0236214610276578063d547741f14610289578063d9caed121461029c578063e63ab1e9146102af57600080fd5b80638456cb59146101f957806385f438c11461020157806391d1485414610228578063a217fddf1461026e57600080fd5b80632f2ff15d116100d35780632f2ff15d146101c057806336568abe146101d35780633f4ba83a146101e65780635c975abb146101ee57600080fd5b806301ffc9a714610105578063116191b61461012d57806321fc65f214610179578063248a9ca31461018e575b600080fd5b610118610113366004610f04565b6102d6565b60405190151581526020015b60405180910390f35b6101547f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610124565b61018c610187366004610f6f565b61036f565b005b6101b261019c36600461100c565b6000908152600160208190526040909120015490565b604051908152602001610124565b61018c6101ce366004611025565b610511565b61018c6101e1366004611025565b61053d565b61018c61059b565b60025460ff16610118565b61018c6105d0565b6101b27f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b610118610236366004611025565b600091825260016020908152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b6101b2600081565b61018c610284366004610f6f565b610602565b61018c610297366004611025565b61078a565b61018c6102aa366004611051565b6107b0565b6101b27f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061036957507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b61037761087d565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e46103a1816108c0565b6103a96108ca565b6103ea73ffffffffffffffffffffffffffffffffffffffff87167f000000000000000000000000000000000000000000000000000000000000000086610909565b6040517f5131ab5900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690635131ab599061046490899089908990899089906004016110d7565b600060405180830381600087803b15801561047e57600080fd5b505af1158015610492573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167f85b5be9cf454e05e0bddf49315178102227c312078eefa3c00294fb4d912ae4e8686866040516104f793929190611134565b60405180910390a35061050a6001600055565b5050505050565b6000828152600160208190526040909120015461052d816108c0565b6105378383610996565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8116331461058c576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6105968282610a61565b505050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a6105c5816108c0565b6105cd610b20565b50565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a6105fa816108c0565b6105cd610b9d565b61060a61087d565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e4610634816108c0565b61063c6108ca565b61067d73ffffffffffffffffffffffffffffffffffffffff87167f000000000000000000000000000000000000000000000000000000000000000086610909565b6040517fb8969bd400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063b8969bd4906106f790899089908990899089906004016110d7565b600060405180830381600087803b15801561071157600080fd5b505af1158015610725573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fb9d4efa96044e5f5e03e696fa9ae2ff66911cc27e8a637c3627c75bc5b2241c88686866040516104f793929190611134565b600082815260016020819052604090912001546107a6816108c0565b6105378383610a61565b6107b861087d565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e46107e2816108c0565b6107ea6108ca565b61080b73ffffffffffffffffffffffffffffffffffffffff85168484610909565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f9b1bfa7fa9ee420a16e124f794c35ac9f90472acc99140eb2f6447c714cad8eb8460405161086a91815260200190565b60405180910390a3506105966001600055565b6002600054036108b9576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b6105cd8133610bf8565b60025460ff1615610907576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6040805173ffffffffffffffffffffffffffffffffffffffff8416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb00000000000000000000000000000000000000000000000000000000179052610596908490610c89565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff16610a5957600083815260016020818152604080842073ffffffffffffffffffffffffffffffffffffffff8716808652925280842080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a4506001610369565b506000610369565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff1615610a5957600083815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8616808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a4506001610369565b610b28610d1f565b600280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b610ba56108ca565b600280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258610b733390565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16610c85576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82166004820152602481018390526044015b60405180910390fd5b5050565b6000610cab73ffffffffffffffffffffffffffffffffffffffff841683610d5b565b90508051600014158015610cd0575080806020019051810190610cce9190611157565b155b15610596576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84166004820152602401610c7c565b60025460ff16610907576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6060610d6983836000610d70565b9392505050565b606081471015610dae576040517fcd786059000000000000000000000000000000000000000000000000000000008152306004820152602401610c7c565b6000808573ffffffffffffffffffffffffffffffffffffffff168486604051610dd79190611179565b60006040518083038185875af1925050503d8060008114610e14576040519150601f19603f3d011682016040523d82523d6000602084013e610e19565b606091505b5091509150610e29868383610e33565b9695505050505050565b606082610e4857610e4382610ec2565b610d69565b8151158015610e6c575073ffffffffffffffffffffffffffffffffffffffff84163b155b15610ebb576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85166004820152602401610c7c565b5080610d69565b805115610ed25780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060208284031215610f1657600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610d6957600080fd5b803573ffffffffffffffffffffffffffffffffffffffff81168114610f6a57600080fd5b919050565b600080600080600060808688031215610f8757600080fd5b610f9086610f46565b9450610f9e60208701610f46565b935060408601359250606086013567ffffffffffffffff811115610fc157600080fd5b8601601f81018813610fd257600080fd5b803567ffffffffffffffff811115610fe957600080fd5b886020828401011115610ffb57600080fd5b959894975092955050506020019190565b60006020828403121561101e57600080fd5b5035919050565b6000806040838503121561103857600080fd5b8235915061104860208401610f46565b90509250929050565b60008060006060848603121561106657600080fd5b61106f84610f46565b925061107d60208501610f46565b929592945050506040919091013590565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff8616815273ffffffffffffffffffffffffffffffffffffffff8516602082015283604082015260806060820152600061112960808301848661108e565b979650505050505050565b83815260406020820152600061114e60408301848661108e565b95945050505050565b60006020828403121561116957600080fd5b81518015158114610d6957600080fd5b6000825160005b8181101561119a5760208186018101518583015201611180565b50600092019182525091905056fea264697066735822122069d5c5c3cb2752c876b6a2138d8d9b66bac6bd1b48a1fe98417eea81faf02a3e64736f6c634300081a003360c060405260001960035534801561001657600080fd5b5060405161155a38038061155a83398101604081905261003591610220565b60016000819055805460ff19169055838383836001600160a01b038416158061006557506001600160a01b038316155b8061007757506001600160a01b038216155b8061008957506001600160a01b038116155b156100a75760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b03808516608052831660a0526100c5600082610154565b506100f07f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e483610154565b5061011b7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb83610154565b506101467f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a82610154565b505050505050505050610274565b60008281526002602090815260408083206001600160a01b038516845290915281205460ff166101fa5760008381526002602090815260408083206001600160a01b03861684529091529020805460ff191660011790556101b23390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45060016101fe565b5060005b92915050565b80516001600160a01b038116811461021b57600080fd5b919050565b6000806000806080858703121561023657600080fd5b61023f85610204565b935061024d60208601610204565b925061025b60408601610204565b915061026960608601610204565b905092959194509250565b60805160a0516112826102d86000396000818161021d01528181610531015281816108240152818161097b01528181610ad00152610bf20152600081816101d1015281816104a1015281816105040152818161079401526107f701526112826000f3fe608060405234801561001057600080fd5b50600436106101775760003560e01c80635e3e9fef116100d857806391d148541161008c578063d547741f11610066578063d547741f14610386578063d5abeb0114610399578063e63ab1e9146103a257600080fd5b806391d1485414610311578063a217fddf14610357578063a783c7891461035f57600080fd5b8063743e0c9b116100bd578063743e0c9b146102cf5780638456cb59146102e257806385f438c1146102ea57600080fd5b80635e3e9fef146102a95780636f8b44b0146102bc57600080fd5b8063248a9ca31161012f57806336568abe1161011457806336568abe146102835780633f4ba83a146102965780635c975abb1461029e57600080fd5b8063248a9ca31461023f5780632f2ff15d1461027057600080fd5b8063106e629011610160578063106e6290146101b9578063116191b6146101cc57806321e093b11461021857600080fd5b806301ffc9a71461017c57806302d5c899146101a4575b600080fd5b61018f61018a366004610fb4565b6103c9565b60405190151581526020015b60405180910390f35b6101b76101b2366004611026565b610462565b005b6101b76101c73660046110b8565b6105f7565b6101f37f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161019b565b6101f37f000000000000000000000000000000000000000000000000000000000000000081565b61026261024d3660046110eb565b60009081526002602052604090206001015490565b60405190815260200161019b565b6101b761027e366004611104565b61069c565b6101b7610291366004611104565b6106c7565b6101b7610720565b60015460ff1661018f565b6101b76102b7366004611026565b610755565b6101b76102ca3660046110eb565b6108d0565b6101b76102dd3660046110eb565b61093e565b6101b76109e8565b6102627f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b61018f61031f366004611104565b600091825260026020908152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b610262600081565b6102627f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb81565b6101b7610394366004611104565b610a1a565b61026260035481565b6102627f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061045c57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b61046a610a3f565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461049481610a82565b61049c610a8c565b6104c77f00000000000000000000000000000000000000000000000000000000000000008684610acb565b6040517fb8969bd400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063b8969bd490610561907f0000000000000000000000000000000000000000000000000000000000000000908a908a908a908a90600401611179565b600060405180830381600087803b15801561057b57600080fd5b505af115801561058f573d6000803e3d6000fd5b505050508573ffffffffffffffffffffffffffffffffffffffff167fba96f26bdda53eb8c8ba39045dfb4ff39753fbc7a6edcf250a88e75e78d102fe8686866040516105dd939291906111d6565b60405180910390a2506105f06001600055565b5050505050565b6105ff610a3f565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461062981610a82565b610631610a8c565b61063c848484610acb565b8373ffffffffffffffffffffffffffffffffffffffff167f884edad9ce6fa2440d8a54cc123490eb96d2768479d49ff9c7366125a94243648460405161068491815260200190565b60405180910390a2506106976001600055565b505050565b6000828152600260205260409020600101546106b781610a82565b6106c18383610c53565b50505050565b73ffffffffffffffffffffffffffffffffffffffff81163314610716576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6106978282610d53565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61074a81610a82565b610752610e12565b50565b61075d610a3f565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461078781610a82565b61078f610a8c565b6107ba7f00000000000000000000000000000000000000000000000000000000000000008684610acb565b6040517f5131ab5900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690635131ab5990610854907f0000000000000000000000000000000000000000000000000000000000000000908a908a908a908a90600401611179565b600060405180830381600087803b15801561086e57600080fd5b505af1158015610882573d6000803e3d6000fd5b505050508573ffffffffffffffffffffffffffffffffffffffff167f7772f56296d3a5202974a45c61c9188d844ab4d6eeb18c851e4b8d5384ca6ced8686866040516105dd939291906111d6565b7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb6108fa81610a82565b610902610a8c565b60038290556040518281527f7810bd47de260c3e9ee10061cf438099dd12256c79485f12f94dbccc981e806c9060200160405180910390a15050565b610946610a8c565b6040517f79cc6790000000000000000000000000000000000000000000000000000000008152336004820152602481018290527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16906379cc679090604401600060405180830381600087803b1580156109d457600080fd5b505af11580156105f0573d6000803e3d6000fd5b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610a1281610a82565b610752610e8f565b600082815260026020526040902060010154610a3581610a82565b6106c18383610d53565b600260005403610a7b576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b6107528133610ee8565b60015460ff1615610ac9576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6003547f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b39573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b5d91906111f9565b610b679084611212565b1115610b9f576040517fc30436e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f1e458bee00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff848116600483015260248201849052604482018390527f00000000000000000000000000000000000000000000000000000000000000001690631e458bee90606401600060405180830381600087803b158015610c3657600080fd5b505af1158015610c4a573d6000803e3d6000fd5b50505050505050565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff16610d4b57600083815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff86168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055610ce93390565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a450600161045c565b50600061045c565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff1615610d4b57600083815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8616808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a450600161045c565b610e1a610f78565b600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b610e97610a8c565b600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016811790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25833610e65565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16610f74576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff821660048201526024810183905260440160405180910390fd5b5050565b60015460ff16610ac9576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060208284031215610fc657600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610ff657600080fd5b9392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461102157600080fd5b919050565b60008060008060006080868803121561103e57600080fd5b61104786610ffd565b945060208601359350604086013567ffffffffffffffff81111561106a57600080fd5b8601601f8101881361107b57600080fd5b803567ffffffffffffffff81111561109257600080fd5b8860208284010111156110a457600080fd5b959894975060200195606001359392505050565b6000806000606084860312156110cd57600080fd5b6110d684610ffd565b95602085013595506040909401359392505050565b6000602082840312156110fd57600080fd5b5035919050565b6000806040838503121561111757600080fd5b8235915061112760208401610ffd565b90509250929050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff8616815273ffffffffffffffffffffffffffffffffffffffff851660208201528360408201526080606082015260006111cb608083018486611130565b979650505050505050565b8381526040602082015260006111f0604083018486611130565b95945050505050565b60006020828403121561120b57600080fd5b5051919050565b8082018082111561045c577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea2646970667358221220f784eb6e1655c2988d3f762737188cfee07a61da1d5b8456cc4f4e55cb339cfb64736f6c634300081a00336080604052348015600f57600080fd5b506001600055610d3a806100246000396000f3fe6080604052600436106100635760003560e01c8063c513169111610040578063c5131691146100c1578063e04d4f97146100e1578063f05b6abf146100f457005b8063357fc5a21461006c5780636ed701691461008c5780638fcaa0b5146100a157005b3661006a57005b005b34801561007857600080fd5b5061006a6100873660046106c0565b610114565b34801561009857600080fd5b5061006a6101aa565b3480156100ad57600080fd5b5061006a6100bc3660046106fc565b6101df565b3480156100cd57600080fd5b5061006a6100dc3660046106c0565b61021e565b61006a6100ef366004610895565b6102f9565b34801561010057600080fd5b5061006a61010f366004610981565b61033d565b61011c610372565b61013e73ffffffffffffffffffffffffffffffffffffffff83163383866103b5565b604080513381526020810185905273ffffffffffffffffffffffffffffffffffffffff848116828401528316606082015290517f2b58128f24a9f59127cc5b5430d70542b22220f2d9adaa86e442b816ab98af609181900360800190a16101a56001600055565b505050565b6040513381527fbcaadb46b82a48af60b608f58959ae6b8310d1b0a0d094c2e9ec3208ed39f2a09060200160405180910390a1565b7f0d3f65f00e631663aa85c96330b5c7a83bb29af3630c0063776f985edc3037aa33838360405161021293929190610a6b565b60405180910390a15050565b610226610372565b6000610233600285610ad5565b90508060000361026f576040517f1f2a200500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61029173ffffffffffffffffffffffffffffffffffffffff84163384846103b5565b604080513381526020810183905273ffffffffffffffffffffffffffffffffffffffff858116828401528416606082015290517f2b58128f24a9f59127cc5b5430d70542b22220f2d9adaa86e442b816ab98af609181900360800190a1506101a56001600055565b7f1f1ff1f5fb41346850b2f5c04e6c767e2f1c8a525c5c0c5cdb60cdf3ca5f62fa3334858585604051610330959493929190610b7e565b60405180910390a1505050565b7f74a53cd528a921fca7dbdee62f86819051d3cc98f214951f4238e8843f20b146338484846040516103309493929190610c08565b6002600054036103ae576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b6040805173ffffffffffffffffffffffffffffffffffffffff85811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd0000000000000000000000000000000000000000000000000000000017905261044a908590610450565b50505050565b600061047273ffffffffffffffffffffffffffffffffffffffff8416836104eb565b905080516000141580156104975750808060200190518101906104959190610ccb565b155b156101a5576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff841660048201526024015b60405180910390fd5b60606104f983836000610500565b9392505050565b60608147101561053e576040517fcd7860590000000000000000000000000000000000000000000000000000000081523060048201526024016104e2565b6000808573ffffffffffffffffffffffffffffffffffffffff1684866040516105679190610ce8565b60006040518083038185875af1925050503d80600081146105a4576040519150601f19603f3d011682016040523d82523d6000602084013e6105a9565b606091505b50915091506105b98683836105c3565b9695505050505050565b6060826105d8576105d382610652565b6104f9565b81511580156105fc575073ffffffffffffffffffffffffffffffffffffffff84163b155b1561064b576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff851660048201526024016104e2565b50806104f9565b8051156106625780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50565b803573ffffffffffffffffffffffffffffffffffffffff811681146106bb57600080fd5b919050565b6000806000606084860312156106d557600080fd5b833592506106e560208501610697565b91506106f360408501610697565b90509250925092565b6000806020838503121561070f57600080fd5b823567ffffffffffffffff81111561072657600080fd5b8301601f8101851361073757600080fd5b803567ffffffffffffffff81111561074e57600080fd5b85602082840101111561076057600080fd5b6020919091019590945092505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156107e6576107e6610770565b604052919050565b600082601f8301126107ff57600080fd5b813567ffffffffffffffff81111561081957610819610770565b61084a60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8401160161079f565b81815284602083860101111561085f57600080fd5b816020850160208301376000918101602001919091529392505050565b801515811461069457600080fd5b80356106bb8161087c565b6000806000606084860312156108aa57600080fd5b833567ffffffffffffffff8111156108c157600080fd5b6108cd868287016107ee565b9350506020840135915060408401356108e58161087c565b809150509250925092565b600067ffffffffffffffff82111561090a5761090a610770565b5060051b60200190565b600082601f83011261092557600080fd5b8135610938610933826108f0565b61079f565b8082825260208201915060208360051b86010192508583111561095a57600080fd5b602085015b8381101561097757803583526020928301920161095f565b5095945050505050565b60008060006060848603121561099657600080fd5b833567ffffffffffffffff8111156109ad57600080fd5b8401601f810186136109be57600080fd5b80356109cc610933826108f0565b8082825260208201915060208360051b8501019250888311156109ee57600080fd5b602084015b83811015610a3057803567ffffffffffffffff811115610a1257600080fd5b610a218b6020838901016107ee565b845250602092830192016109f3565b509550505050602084013567ffffffffffffffff811115610a5057600080fd5b610a5c86828701610914565b9250506106f36040850161088a565b73ffffffffffffffffffffffffffffffffffffffff8416815260406020820152816040820152818360608301376000818301606090810191909152601f9092017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016010192915050565b600082610b0b577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60005b83811015610b2b578181015183820152602001610b13565b50506000910152565b60008151808452610b4c816020860160208601610b10565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b73ffffffffffffffffffffffffffffffffffffffff8616815284602082015260a060408201526000610bb360a0830186610b34565b6060830194909452509015156080909101529392505050565b600081518084526020840193506020830160005b82811015610bfe578151865260209586019590910190600101610be0565b5093949350505050565b60006080820173ffffffffffffffffffffffffffffffffffffffff871683526080602084015280865180835260a08501915060a08160051b86010192506020880160005b82811015610c9b577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60878603018452610c86858351610b34565b94506020938401939190910190600101610c4c565b505050508281036040840152610cb18186610bcc565b915050610cc2606083018415159052565b95945050505050565b600060208284031215610cdd57600080fd5b81516104f98161087c565b60008251610cfa818460208701610b10565b919091019291505056fea2646970667358221220556072e1abafc3c4063b8cce832228b4f309b93726aaa6a6dfab20cb880c6d1864736f6c634300081a0033a2646970667358221220062611b442bc9d72e8be8b75abf1da729a9498e1b6fc92c104c14a987cc909d864736f6c634300081a0033", + ABI: "[{\"type\":\"function\",\"name\":\"IS_TEST\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeArtifacts\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedArtifacts_\",\"type\":\"string[]\",\"internalType\":\"string[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeContracts\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedContracts_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeSelectors\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedSelectors_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzSelector[]\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"selectors\",\"type\":\"bytes4[]\",\"internalType\":\"bytes4[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeSenders\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedSenders_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"failed\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"setUp\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"targetArtifactSelectors\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedArtifactSelectors_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzArtifactSelector[]\",\"components\":[{\"name\":\"artifact\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"selectors\",\"type\":\"bytes4[]\",\"internalType\":\"bytes4[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetArtifacts\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedArtifacts_\",\"type\":\"string[]\",\"internalType\":\"string[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetContracts\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedContracts_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetInterfaces\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedInterfaces_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzInterface[]\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"artifacts\",\"type\":\"string[]\",\"internalType\":\"string[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetSelectors\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedSelectors_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzSelector[]\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"selectors\",\"type\":\"bytes4[]\",\"internalType\":\"bytes4[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetSenders\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedSenders_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"testUpgradeAndForwardCallToReceivePayable\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"event\",\"name\":\"Call\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"receiver\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Deposit\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"receiver\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"asset\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Executed\",\"inputs\":[{\"name\":\"destination\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ExecutedV2\",\"inputs\":[{\"name\":\"destination\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ExecutedWithERC20\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedERC20\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"token\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"destination\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedNoParams\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedNonPayable\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"strs\",\"type\":\"string[]\",\"indexed\":false,\"internalType\":\"string[]\"},{\"name\":\"nums\",\"type\":\"uint256[]\",\"indexed\":false,\"internalType\":\"uint256[]\"},{\"name\":\"flag\",\"type\":\"bool\",\"indexed\":false,\"internalType\":\"bool\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedPayable\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"str\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"num\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"flag\",\"type\":\"bool\",\"indexed\":false,\"internalType\":\"bool\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedRevert\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Reverted\",\"inputs\":[{\"name\":\"destination\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RevertedWithERC20\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log\",\"inputs\":[{\"name\":\"\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_address\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_array\",\"inputs\":[{\"name\":\"val\",\"type\":\"uint256[]\",\"indexed\":false,\"internalType\":\"uint256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_array\",\"inputs\":[{\"name\":\"val\",\"type\":\"int256[]\",\"indexed\":false,\"internalType\":\"int256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_array\",\"inputs\":[{\"name\":\"val\",\"type\":\"address[]\",\"indexed\":false,\"internalType\":\"address[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_bytes\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_bytes32\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_int\",\"inputs\":[{\"name\":\"\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_address\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_array\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"uint256[]\",\"indexed\":false,\"internalType\":\"uint256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_array\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"int256[]\",\"indexed\":false,\"internalType\":\"int256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_array\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"address[]\",\"indexed\":false,\"internalType\":\"address[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_bytes\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_bytes32\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_decimal_int\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"},{\"name\":\"decimals\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_decimal_uint\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"decimals\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_int\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_string\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_uint\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_string\",\"inputs\":[{\"name\":\"\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_uint\",\"inputs\":[{\"name\":\"\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"logs\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"ApprovalFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ConnectorInitialized\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"CustodyInitialized\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"DepositFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ExecutionFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientERC20Amount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientETHAmount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NotWhitelistedInCustody\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZeroAddress\",\"inputs\":[]}]", + Bin: "0x6080604052600c8054600160ff199182168117909255601f80549091169091179055348015602c57600080fd5b5061bf6d8061003c6000396000f3fe608060405234801561001057600080fd5b50600436106100ea5760003560e01c806385226c811161008c578063b5508aa911610066578063b5508aa91461018b578063ba414fa614610193578063e20c9f71146101ab578063fa7626d4146101b357600080fd5b806385226c8114610159578063916a17c61461016e578063b0464fdc1461018357600080fd5b80633e5e3c23116100c85780633e5e3c231461012c5780633f7286f41461013457806366d9a9a01461013c5780637a380ebf1461015157600080fd5b80630a9254e4146100ef5780631ed7831c146100f95780632ade388014610117575b600080fd5b6100f76101c0565b005b610101610a85565b60405161010e919061620b565b60405180910390f35b61011f610ae7565b60405161010e91906162a7565b610101610c29565b610101610c89565b610144610ce9565b60405161010e919061640d565b6100f7610e6b565b61016161152d565b60405161010e91906164ab565b6101766115fd565b60405161010e9190616522565b6101766116f8565b6101616117f3565b61019b6118c3565b604051901515815260200161010e565b610101611997565b601f5461019b9060ff1681565b602680547fffffffffffffffffffffffff00000000000000000000000000000000000000009081163017909155602780548216611234179055602880549091166156781790556040516102129061611e565b60408082526004908201527f746573740000000000000000000000000000000000000000000000000000000060608201526080602082018190526003908201527f54544b000000000000000000000000000000000000000000000000000000000060a082015260c001604051809103906000f080158015610297573d6000803e3d6000fd5b50602480547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03929092169190911790556040516102dc9061611e565b604080825260049082018190527f7a6574610000000000000000000000000000000000000000000000000000000060608301526080602083018190528201527f5a4554410000000000000000000000000000000000000000000000000000000060a082015260c001604051809103906000f080158015610360573d6000803e3d6000fd5b50602580547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03928316908117909155604080518082018252600e81527f4761746577617945564d2e736f6c00000000000000000000000000000000000060208201526028546026549251908516602482015260448101939093529216606482015261044f919060840160408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fc0c53b8b000000000000000000000000000000000000000000000000000000001790526119f7565b601f80547fffffffffffffffffffffff0000000000000000000000000000000000000000ff166101006001600160a01b0393841681029190911791829055602080549190920483167fffffffffffffffffffffffff000000000000000000000000000000000000000090911681179091556028546026546040519293918216929116906104db9061612b565b6001600160a01b03938416815291831660208301529091166040820152606001604051809103906000f080158015610517573d6000803e3d6000fd5b50602280547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03928316179055602054602554602854602654604051938516949283169391831692169061057290616138565b6001600160a01b039485168152928416602084015290831660408301529091166060820152608001604051809103906000f0801580156105b6573d6000803e3d6000fd5b50602380547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03929092169190911790556040516105fb90616145565b604051809103906000f080158015610617573d6000803e3d6000fd5b50602180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039283161790556028546040517fc88a5e6d00000000000000000000000000000000000000000000000000000000815291166004820152670de0b6b3a76400006024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c88a5e6d90604401600060405180830381600087803b1580156106c357600080fd5b505af11580156106d7573d6000803e3d6000fd5b50506026546040517f06447d560000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506306447d569150602401600060405180830381600087803b15801561074d57600080fd5b505af1158015610761573d6000803e3d6000fd5b50506020546022546040517fae7a3a6f0000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201529116925063ae7a3a6f9150602401600060405180830381600087803b1580156107c757600080fd5b505af11580156107db573d6000803e3d6000fd5b50506020546023546040517f10188aef0000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152911692506310188aef9150602401600060405180830381600087803b15801561084157600080fd5b505af1158015610855573d6000803e3d6000fd5b505050507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b03166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156108b757600080fd5b505af11580156108cb573d6000803e3d6000fd5b5050602480546026546040517f40c10f190000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620f4240938101939093521692506340c10f199150604401600060405180830381600087803b15801561093c57600080fd5b505af1158015610950573d6000803e3d6000fd5b5050602480546022546040517fa9059cbb0000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201526207a1209381019390935216925063a9059cbb91506044016020604051808303816000875af11580156109c6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109ea91906165b9565b506028546040517fc88a5e6d0000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152670de0b6b3a76400006024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c88a5e6d90604401600060405180830381600087803b158015610a6b57600080fd5b505af1158015610a7f573d6000803e3d6000fd5b50505050565b60606016805480602002602001604051908101604052809291908181526020018280548015610add57602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610abf575b5050505050905090565b6060601e805480602002602001604051908101604052809291908181526020016000905b82821015610c2057600084815260208082206040805180820182526002870290920180546001600160a01b03168352600181018054835181870281018701909452808452939591948681019491929084015b82821015610c09578382906000526020600020018054610b7c906165db565b80601f0160208091040260200160405190810160405280929190818152602001828054610ba8906165db565b8015610bf55780601f10610bca57610100808354040283529160200191610bf5565b820191906000526020600020905b815481529060010190602001808311610bd857829003601f168201915b505050505081526020019060010190610b5d565b505050508152505081526020019060010190610b0b565b50505050905090565b60606018805480602002602001604051908101604052809291908181526020018280548015610add576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311610abf575050505050905090565b60606017805480602002602001604051908101604052809291908181526020018280548015610add576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311610abf575050505050905090565b6060601b805480602002602001604051908101604052809291908181526020016000905b82821015610c205783829060005260206000209060020201604051806040016040529081600082018054610d40906165db565b80601f0160208091040260200160405190810160405280929190818152602001828054610d6c906165db565b8015610db95780601f10610d8e57610100808354040283529160200191610db9565b820191906000526020600020905b815481529060010190602001808311610d9c57829003601f168201915b5050505050815260200160018201805480602002602001604051908101604052809291908181526020018280548015610e5357602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019060040190602082600301049283019260010382029150808411610e005790505b50505050508152505081526020019060010190610d0d565b60208054604080517fdda79b7500000000000000000000000000000000000000000000000000000000815290516000936001600160a01b039093169263dda79b7592600480820193918290030181865afa158015610ecd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ef19190616628565b60208054604080517f5b11259100000000000000000000000000000000000000000000000000000000815290519394506000936001600160a01b0390921692635b112591926004808401938290030181865afa158015610f55573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f799190616628565b604080518082018252600f81527f48656c6c6f2c20466f756e647279210000000000000000000000000000000000602080830191909152601f5483518085018552601981527f4761746577617945564d55706772616465546573742e736f6c00000000000000818401528451928301909452600082526026549495509193602a93600193670de0b6b3a764000093611023936001600160a01b036101009093048316939216611a16565b600084848460405160240161103a93929190616651565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe04d4f9700000000000000000000000000000000000000000000000000000000179052601f5460215491517ff30c7ba30000000000000000000000000000000000000000000000000000000081529293506001600160a01b03610100909104811692737109709ecfa91a80626ff3989d68f67f5b1dd12d9263f30c7ba392611100929116908790879060040161667b565b600060405180830381600087803b15801561111a57600080fd5b505af115801561112e573d6000803e3d6000fd5b50506021546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b1580156111c057600080fd5b505af11580156111d4573d6000803e3d6000fd5b50506020546040517f1f1ff1f5fb41346850b2f5c04e6c767e2f1c8a525c5c0c5cdb60cdf3ca5f62fa935061121d92506001600160a01b039091169086908a908a908a906166a3565b60405180910390a16020546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b1580156112b357600080fd5b505af11580156112c7573d6000803e3d6000fd5b50506021546040516001600160a01b0390911692507f373df382b9c587826f3de13f16d67f8d99f28ee947fc0924c6ef2d6d2c7e8546915061130c90869086906166e4565b60405180910390a26028546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561138657600080fd5b505af115801561139a573d6000803e3d6000fd5b50506021546040517f1cff79cd0000000000000000000000000000000000000000000000000000000081526001600160a01b038086169450631cff79cd935087926113ec9291169087906004016166fd565b60006040518083038185885af115801561140a573d6000803e3d6000fd5b50505050506040513d6000823e601f3d908101601f191682016040526114339190810190616807565b5060208054604080517fdda79b7500000000000000000000000000000000000000000000000000000000815290516114c0938c936001600160a01b03169263dda79b7592600480830193928290030181865afa158015611497573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114bb9190616628565b611a32565b60208054604080517f5b1125910000000000000000000000000000000000000000000000000000000081529051611523938b936001600160a01b031692635b11259192600480830193928290030181865afa158015611497573d6000803e3d6000fd5b5050505050505050565b6060601a805480602002602001604051908101604052809291908181526020016000905b82821015610c20578382906000526020600020018054611570906165db565b80601f016020809104026020016040519081016040528092919081815260200182805461159c906165db565b80156115e95780601f106115be576101008083540402835291602001916115e9565b820191906000526020600020905b8154815290600101906020018083116115cc57829003601f168201915b505050505081526020019060010190611551565b6060601d805480602002602001604051908101604052809291908181526020016000905b82821015610c205760008481526020908190206040805180820182526002860290920180546001600160a01b031683526001810180548351818702810187019094528084529394919385830193928301828280156116e057602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168152602001906004019060208260030104928301926001038202915080841161168d5790505b50505050508152505081526020019060010190611621565b6060601c805480602002602001604051908101604052809291908181526020016000905b82821015610c205760008481526020908190206040805180820182526002860290920180546001600160a01b031683526001810180548351818702810187019094528084529394919385830193928301828280156117db57602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190600401906020826003010492830192600103820291508084116117885790505b5050505050815250508152602001906001019061171c565b60606019805480602002602001604051908101604052809291908181526020016000905b82821015610c20578382906000526020600020018054611836906165db565b80601f0160208091040260200160405190810160405280929190818152602001828054611862906165db565b80156118af5780601f10611884576101008083540402835291602001916118af565b820191906000526020600020905b81548152906001019060200180831161189257829003601f168201915b505050505081526020019060010190611817565b60085460009060ff16156118db575060085460ff1690565b6040517f667f9d70000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d600482018190527f6661696c65640000000000000000000000000000000000000000000000000000602483015260009163667f9d7090604401602060405180830381865afa15801561196c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611990919061683c565b1415905090565b60606015805480602002602001604051908101604052809291908181526020018280548015610add576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311610abf575050505050905090565b6000611a01616152565b611a0c848483611ac2565b9150505b92915050565b611a1e616152565b611a2b8585858486611b3d565b5050505050565b6040517f515361f60000000000000000000000000000000000000000000000000000000081526001600160a01b03808416600483015282166024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063515361f69060440160006040518083038186803b158015611aa657600080fd5b505afa158015611aba573d6000803e3d6000fd5b505050505050565b600080611acf8584611c3e565b9050611b326040518060400160405280601d81526020017f4552433139363750726f78792e736f6c3a4552433139363750726f78790000008152508286604051602001611b1d9291906166fd565b60405160208183030381529060405285611c4a565b9150505b9392505050565b6040517f06447d560000000000000000000000000000000000000000000000000000000081526001600160a01b03821660048201528190737109709ecfa91a80626ff3989d68f67f5b1dd12d9081906306447d5690602401600060405180830381600087803b158015611baf57600080fd5b505af1925050508015611bc0575060015b611bd557611bd087878787611c78565b611c35565b611be187878787611c78565b806001600160a01b03166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015611c1c57600080fd5b505af1158015611c30573d6000803e3d6000fd5b505050505b50505050505050565b6000611b368383611c91565b60c08101515160009015611c6e57611c6784848460c00151611cac565b9050611b36565b611c678484611e52565b6000611c848483611f3d565b9050611a2b858285611f49565b6000611c9d8383612313565b611b3683836020015184611c4a565b600080611cb7612323565b90506000611cc586836123f6565b90506000611cdc826060015183602001518561289c565b90506000611cec83838989612aae565b90506000611cf98261392b565b602081015181519192509060030b15611d6c57898260400151604051602001611d23929190616855565b60408051601f19818403018152908290527f08c379a0000000000000000000000000000000000000000000000000000000008252611d63916004016168d6565b60405180910390fd5b6000611daf6040518060400160405280601581526020017f4465706c6f79656420746f20616464726573733a200000000000000000000000815250836001613afa565b6040517fc6ce059d000000000000000000000000000000000000000000000000000000008152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c6ce059d90611e029084906004016168d6565b602060405180830381865afa158015611e1f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e439190616628565b9b9a5050505050505050505050565b6040517f8d1cc9250000000000000000000000000000000000000000000000000000000081526000908190737109709ecfa91a80626ff3989d68f67f5b1dd12d90638d1cc92590611ea79087906004016168d6565b600060405180830381865afa158015611ec4573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611eec9190810190616807565b90506000611f1a8285604051602001611f069291906168e9565b604051602081830303815290604052613cfa565b90506001600160a01b038116611a0c578484604051602001611d23929190616918565b6000611c9d8383613d0d565b6040517f667f9d700000000000000000000000000000000000000000000000000000000081526001600160a01b03841660048201527fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61036024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d90600090829063667f9d7090604401602060405180830381865afa158015611fe5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612009919061683c565b9050806121b057600061201b86613d19565b604080518082018252600581527f352e302e30000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201529091506120a6905b60408051808201825260008082526020918201528151808301909252845182528085019082015290613e06565b806120b2575060008451115b15612135576040517f4f1ef2860000000000000000000000000000000000000000000000000000000081526001600160a01b03871690634f1ef286906120fe90889088906004016166fd565b600060405180830381600087803b15801561211857600080fd5b505af115801561212c573d6000803e3d6000fd5b505050506121aa565b6040517f3659cfe60000000000000000000000000000000000000000000000000000000081526001600160a01b038681166004830152871690633659cfe690602401600060405180830381600087803b15801561219157600080fd5b505af11580156121a5573d6000803e3d6000fd5b505050505b50611a2b565b8060006121bc82613d19565b604080518082018252600581527f352e302e300000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015290915061221e90612079565b8061222a575060008551115b156122af576040517f9623609d0000000000000000000000000000000000000000000000000000000081526001600160a01b03831690639623609d90612278908a908a908a906004016169c3565b600060405180830381600087803b15801561229257600080fd5b505af11580156122a6573d6000803e3d6000fd5b50505050611c35565b6040517f99a88ec40000000000000000000000000000000000000000000000000000000081526001600160a01b03888116600483015287811660248301528316906399a88ec490604401600060405180830381600087803b158015611c1c57600080fd5b61231f82826000613e1a565b5050565b604080518082018252600381527f6f75740000000000000000000000000000000000000000000000000000000000602082015290517fd145736c000000000000000000000000000000000000000000000000000000008152606091737109709ecfa91a80626ff3989d68f67f5b1dd12d91829063d145736c906123aa9084906004016169f4565b600060405180830381865afa1580156123c7573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526123ef9190810190616a3b565b9250505090565b6124286040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b6000737109709ecfa91a80626ff3989d68f67f5b1dd12d90506124736040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b61247c85613f1d565b6020820152600061248c86614302565b90506000836001600160a01b031663d930a0e66040518163ffffffff1660e01b8152600401600060405180830381865afa1580156124ce573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526124f69190810190616a3b565b868385602001516040516020016125109493929190616a84565b60408051601f19818403018152908290527f60f9bb1100000000000000000000000000000000000000000000000000000000825291506000906001600160a01b038616906360f9bb11906125689085906004016168d6565b600060405180830381865afa158015612585573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526125ad9190810190616a3b565b6040517fdb4235f60000000000000000000000000000000000000000000000000000000081529091506001600160a01b0386169063db4235f6906125f5908490600401616b88565b602060405180830381865afa158015612612573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061263691906165b9565b61264b5781604051602001611d239190616bda565b6040517f49c4fac80000000000000000000000000000000000000000000000000000000081526001600160a01b038616906349c4fac890612690908490600401616c6c565b600060405180830381865afa1580156126ad573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526126d59190810190616a3b565b84526040517fdb4235f60000000000000000000000000000000000000000000000000000000081526001600160a01b0386169063db4235f69061271c908490600401616cbe565b602060405180830381865afa158015612739573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061275d91906165b9565b156127f2576040517f49c4fac80000000000000000000000000000000000000000000000000000000081526001600160a01b038616906349c4fac8906127a7908490600401616cbe565b600060405180830381865afa1580156127c4573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526127ec9190810190616a3b565b60408501525b846001600160a01b03166349c4fac88286600001516040516020016128179190616d10565b6040516020818303038152906040526040518363ffffffff1660e01b8152600401612843929190616d7c565b600060405180830381865afa158015612860573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526128889190810190616a3b565b606085015250608083015250949350505050565b60408051600480825260a0820190925260609160009190816020015b60608152602001906001900390816128b85790505090506040518060400160405280600481526020017f67726570000000000000000000000000000000000000000000000000000000008152508160008151811061291857612918616da1565b60200260200101819052506040518060400160405280600381526020017f2d726c00000000000000000000000000000000000000000000000000000000008152508160018151811061296c5761296c616da1565b6020026020010181905250846040516020016129889190616dd0565b604051602081830303815290604052816002815181106129aa576129aa616da1565b6020026020010181905250826040516020016129c69190616e3c565b604051602081830303815290604052816003815181106129e8576129e8616da1565b602002602001018190525060006129fe8261392b565b602080820151604080518082018252600581527f2e6a736f6e0000000000000000000000000000000000000000000000000000008185019081528251808401845260008082529086015282518084019093529051825292810192909252919250612a8f9060408051808201825260008082526020918201528151808301909252845182528085019082015290614585565b612aa45785604051602001611d239190616e7d565b9695505050505050565b60a0810151604080518082018252600080825260209182015281518083019092528251808352928101910152606090737109709ecfa91a80626ff3989d68f67f5b1dd12d9015612afe565b511590565b612c7257826020015115612bba576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605860248201527f54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f742060448201527f62652075736564207768656e207468652060736b6970566572696679536f757260648201527f6365436f646560206f7074696f6e206973206074727565600000000000000000608482015260a401611d63565b8260c0015115612c72576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605360248201527f54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f742060448201527f62652075736564207768656e207468652060736b69704c6963656e736554797060648201527f6560206f7074696f6e2069732060747275656000000000000000000000000000608482015260a401611d63565b6040805160ff8082526120008201909252600091816020015b6060815260200190600190039081612c8b57905050905060006040518060400160405280600381526020017f6e70780000000000000000000000000000000000000000000000000000000000815250828280612ce690616f3d565b935060ff1681518110612cfb57612cfb616da1565b60200260200101819052506040518060400160405280600d81526020017f302e302e312d616c7068612e3700000000000000000000000000000000000000815250604051602001612d4c9190616f5c565b604051602081830303815290604052828280612d6790616f3d565b935060ff1681518110612d7c57612d7c616da1565b60200260200101819052506040518060400160405280600681526020017f6465706c6f790000000000000000000000000000000000000000000000000000815250828280612dc990616f3d565b935060ff1681518110612dde57612dde616da1565b60200260200101819052506040518060400160405280600e81526020017f2d2d636f6e74726163744e616d65000000000000000000000000000000000000815250828280612e2b90616f3d565b935060ff1681518110612e4057612e40616da1565b60200260200101819052508760200151828280612e5c90616f3d565b935060ff1681518110612e7157612e71616da1565b60200260200101819052506040518060400160405280600e81526020017f2d2d636f6e747261637450617468000000000000000000000000000000000000815250828280612ebe90616f3d565b935060ff1681518110612ed357612ed3616da1565b602090810291909101015287518282612eeb81616f3d565b935060ff1681518110612f0057612f00616da1565b60200260200101819052506040518060400160405280600981526020017f2d2d636861696e49640000000000000000000000000000000000000000000000815250828280612f4d90616f3d565b935060ff1681518110612f6257612f62616da1565b6020026020010181905250612f76466145e6565b8282612f8181616f3d565b935060ff1681518110612f9657612f96616da1565b60200260200101819052506040518060400160405280600f81526020017f2d2d6275696c64496e666f46696c650000000000000000000000000000000000815250828280612fe390616f3d565b935060ff1681518110612ff857612ff8616da1565b60200260200101819052508682828061301090616f3d565b935060ff168151811061302557613025616da1565b602090810291909101015285511561314c5760408051808201909152601581527f2d2d636f6e7374727563746f7242797465636f646500000000000000000000006020820152828261307681616f3d565b935060ff168151811061308b5761308b616da1565b60209081029190910101526040517f71aad10d0000000000000000000000000000000000000000000000000000000081526001600160a01b038416906371aad10d906130db9089906004016168d6565b600060405180830381865afa1580156130f8573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526131209190810190616a3b565b828261312b81616f3d565b935060ff168151811061314057613140616da1565b60200260200101819052505b84602001511561321c5760408051808201909152601281527f2d2d766572696679536f75726365436f646500000000000000000000000000006020820152828261319581616f3d565b935060ff16815181106131aa576131aa616da1565b60200260200101819052506040518060400160405280600581526020017f66616c73650000000000000000000000000000000000000000000000000000008152508282806131f790616f3d565b935060ff168151811061320c5761320c616da1565b60200260200101819052506133e3565b613254612af98660a0015160408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6132e75760408051808201909152600d81527f2d2d6c6963656e736554797065000000000000000000000000000000000000006020820152828261329781616f3d565b935060ff16815181106132ac576132ac616da1565b60200260200101819052508460a001516040516020016132cc9190616dd0565b6040516020818303038152906040528282806131f790616f3d565b8460c0015115801561332a57506040808901518151808301835260008082526020918201528251808401909352815183529081019082015261332890511590565b155b156133e35760408051808201909152600d81527f2d2d6c6963656e736554797065000000000000000000000000000000000000006020820152828261336e81616f3d565b935060ff168151811061338357613383616da1565b602002602001018190525061339788614686565b6040516020016133a79190616dd0565b6040516020818303038152906040528282806133c290616f3d565b935060ff16815181106133d7576133d7616da1565b60200260200101819052505b6040808601518151808301835260008082526020918201528251808401909352815183529081019082015261341790511590565b6134ac5760408051808201909152600b81527f2d2d72656c6179657249640000000000000000000000000000000000000000006020820152828261345a81616f3d565b935060ff168151811061346f5761346f616da1565b6020026020010181905250846040015182828061348b90616f3d565b935060ff16815181106134a0576134a0616da1565b60200260200101819052505b6060850151156135cd5760408051808201909152600681527f2d2d73616c740000000000000000000000000000000000000000000000000000602082015282826134f581616f3d565b935060ff168151811061350a5761350a616da1565b602090810291909101015260608501516040517fb11a19e800000000000000000000000000000000000000000000000000000000815260048101919091526001600160a01b0384169063b11a19e890602401600060405180830381865afa158015613579573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526135a19190810190616a3b565b82826135ac81616f3d565b935060ff16815181106135c1576135c1616da1565b60200260200101819052505b60e085015151156136745760408051808201909152600a81527f2d2d6761734c696d6974000000000000000000000000000000000000000000006020820152828261361781616f3d565b935060ff168151811061362c5761362c616da1565b60200260200101819052506136488560e00151600001516145e6565b828261365381616f3d565b935060ff168151811061366857613668616da1565b60200260200101819052505b60e0850151602001511561371e5760408051808201909152600a81527f2d2d676173507269636500000000000000000000000000000000000000000000602082015282826136c181616f3d565b935060ff16815181106136d6576136d6616da1565b60200260200101819052506136f28560e00151602001516145e6565b82826136fd81616f3d565b935060ff168151811061371257613712616da1565b60200260200101819052505b60e085015160400151156137c85760408051808201909152600e81527f2d2d6d61784665655065724761730000000000000000000000000000000000006020820152828261376b81616f3d565b935060ff168151811061378057613780616da1565b602002602001018190525061379c8560e00151604001516145e6565b82826137a781616f3d565b935060ff16815181106137bc576137bc616da1565b60200260200101819052505b60e085015160600151156138725760408051808201909152601681527f2d2d6d61785072696f72697479466565506572476173000000000000000000006020820152828261381581616f3d565b935060ff168151811061382a5761382a616da1565b60200260200101819052506138468560e00151606001516145e6565b828261385181616f3d565b935060ff168151811061386657613866616da1565b60200260200101819052505b60008160ff1667ffffffffffffffff8111156138905761389061671f565b6040519080825280602002602001820160405280156138c357816020015b60608152602001906001900390816138ae5790505b50905060005b8260ff168160ff16101561391c57838160ff16815181106138ec576138ec616da1565b6020026020010151828260ff168151811061390957613909616da1565b60209081029190910101526001016138c9565b5093505050505b949350505050565b6139526040518060600160405280600060030b815260200160608152602001606081525090565b60408051808201825260048082527f6261736800000000000000000000000000000000000000000000000000000000602083015291517fd145736c000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d92600091849163d145736c916139d891869101616fc7565b600060405180830381865afa1580156139f5573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052613a1d9190810190616a3b565b90506000613a2b8683615175565b90506000846001600160a01b031663f45c1ce7836040518263ffffffff1660e01b8152600401613a5b91906164ab565b6000604051808303816000875af1158015613a7a573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052613aa2919081019061700e565b805190915060030b15801590613abb5750602081015151155b8015613aca5750604081015151155b15612aa45781600081518110613ae257613ae2616da1565b6020026020010151604051602001611d2391906170c4565b60606000613b2f8560408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600080825260209182015281518083019092528651825280870190820152909150613b669082905b906152ca565b15613cc3576000613be382613bdd84613bd7613ba98a60408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6040805180820182526000808252602091820152815180830190925282518252918201519181019190915290565b906152f1565b90615353565b604080518082018252600181527f0a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152909150613c479082906152ca565b15613cb157604080518082018252600181527f0a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152613cae905b82906153d8565b90505b613cba816153fe565b92505050611b36565b8215613cdc578484604051602001611d239291906172b0565b5050604080516020810190915260008152611b36565b509392505050565b6000808251602084016000f09392505050565b61231f82826001613e1a565b60408051600481526024810182526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fad3cb1cc00000000000000000000000000000000000000000000000000000000179052905160609160009182916001600160a01b03861691613d8e9190617357565b6000604051808303816000865af19150503d8060008114613dcb576040519150601f19603f3d011682016040523d82523d6000602084013e613dd0565b606091505b50915091508115613def57808060200190518101906139239190616a3b565b505060408051602081019091526000815292915050565b6000613e128383615467565b159392505050565b8160a0015115613e2957505050565b6000613e36848484615542565b90506000613e438261392b565b602081015181519192509060030b158015613edf5750604080518082018252600781527f535543434553530000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152613edf90604080518082018252600080825260209182015281518083019092528451825280850190820152613b60565b15613eec57505050505050565b60408201515115613f0c578160400151604051602001611d239190617373565b80604051602001611d2391906173d1565b60606000613f528360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600481527f2e736f6c0000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152909150613fb7905b8290614585565b1561402657604080518082018252600481527f2e736f6c0000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152611b3690614021908390615add565b6153fe565b604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152614088905b8290615b67565b60010361415557604080518082018252600181527f3a00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526140ee90613ca7565b50604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152611b3690614021905b83906153d8565b604080518082018252600581527f2e6a736f6e000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526141b490613fb0565b156142eb57604080518082018252600181527f2f0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082018190528451808601909552925184528301529061421c908390615c01565b90506000816001835161422f919061743c565b8151811061423f5761423f616da1565b602002602001015190506142e26140216142b56040518060400160405280600581526020017f2e6a736f6e00000000000000000000000000000000000000000000000000000081525060408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b60408051808201825260008082526020918201528151808301909252855182528086019082015290615add565b95945050505050565b82604051602001611d23919061744f565b50919050565b606060006143378360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600481527f2e736f6c000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015290915061439990613fb0565b156143a757611b36816153fe565b604080518082018252600181527f3a000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261440690614081565b60010361447057604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152611b36906140219061414e565b604080518082018252600581527f2e6a736f6e000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526144cf90613fb0565b156142eb57604080518082018252600181527f2f00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820181905284518086019095529251845283015290614537908390615c01565b9050600181511115614573578060028251614552919061743c565b8151811061456257614562616da1565b602002602001015192505050919050565b5082604051602001611d23919061744f565b80518251600091111561459a57506000611a10565b815183516020850151600092916145b09161752d565b6145ba919061743c565b9050826020015181036145d1576001915050611a10565b82516020840151819020912014905092915050565b606060006145f383615ca6565b600101905060008167ffffffffffffffff8111156146135761461361671f565b6040519080825280601f01601f19166020018201604052801561463d576020820181803683370190505b5090508181016020015b600019017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a850494508461464757509392505050565b604081810151815180830183526000808252602091820181905283518085018552835181529282018383015283518085018552600a81527f554e4c4943454e5345440000000000000000000000000000000000000000000081840190815285518087018752838152840192909252845180860190955251845290830152606091614712905b8290613e06565b1561475257505060408051808201909152600481527f4e6f6e65000000000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600981527f556e6c6963656e73650000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526147b19061470b565b156147f157505060408051808201909152600981527f556e6c6963656e736500000000000000000000000000000000000000000000006020820152919050565b604080518082018252600381527f4d49540000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526148509061470b565b1561489057505060408051808201909152600381527f4d495400000000000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f47504c2d322e302d6f6e6c790000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526148ef9061470b565b806149545750604080518082018252601081527f47504c2d322e302d6f722d6c6174657200000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526149549061470b565b1561499457505060408051808201909152600981527f474e552047504c763200000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f47504c2d332e302d6f6e6c790000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526149f39061470b565b80614a585750604080518082018252601081527f47504c2d332e302d6f722d6c617465720000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152614a589061470b565b15614a9857505060408051808201909152600981527f474e552047504c763300000000000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4c47504c2d322e312d6f6e6c790000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152614af79061470b565b80614b5c5750604080518082018252601181527f4c47504c2d322e312d6f722d6c6174657200000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152614b5c9061470b565b15614b9c57505060408051808201909152600c81527f474e55204c47504c76322e3100000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4c47504c2d332e302d6f6e6c790000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152614bfb9061470b565b80614c605750604080518082018252601181527f4c47504c2d332e302d6f722d6c6174657200000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152614c609061470b565b15614ca057505060408051808201909152600a81527f474e55204c47504c7633000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f4253442d322d436c61757365000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152614cff9061470b565b15614d3f57505060408051808201909152600c81527f4253442d322d436c6175736500000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f4253442d332d436c61757365000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152614d9e9061470b565b15614dde57505060408051808201909152600c81527f4253442d332d436c6175736500000000000000000000000000000000000000006020820152919050565b604080518082018252600781527f4d504c2d322e300000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152614e3d9061470b565b15614e7d57505060408051808201909152600781527f4d504c2d322e30000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600781527f4f534c2d332e300000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152614edc9061470b565b15614f1c57505060408051808201909152600781527f4f534c2d332e30000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600a81527f4170616368652d322e300000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152614f7b9061470b565b15614fbb57505060408051808201909152600a81527f4170616368652d322e30000000000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4147504c2d332e302d6f6e6c79000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261501a9061470b565b8061507f5750604080518082018252601181527f4147504c2d332e302d6f722d6c617465720000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261507f9061470b565b156150bf57505060408051808201909152600a81527f474e55204147504c7633000000000000000000000000000000000000000000006020820152919050565b604080518082018252600881527f4255534c2d312e310000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261511e9061470b565b1561515e57505060408051808201909152600781527f42534c20312e31000000000000000000000000000000000000000000000000006020820152919050565b60408084015184519151611d239290602001617540565b60608060005b8451811015615200578185828151811061519757615197616da1565b60200260200101516040516020016151b09291906168e9565b6040516020818303038152906040529150600185516151cf919061743c565b81146151f857816040516020016151e691906176a9565b60405160208183030381529060405291505b60010161517b565b5060408051600380825260808201909252600091816020015b6060815260200190600190039081615219579050509050838160008151811061524457615244616da1565b60200260200101819052506040518060400160405280600281526020017f2d630000000000000000000000000000000000000000000000000000000000008152508160018151811061529857615298616da1565b602002602001018190525081816002815181106152b7576152b7616da1565b6020908102919091010152949350505050565b60208083015183518351928401516000936152e89291849190615d88565b14159392505050565b604080518082019091526000808252602082015260006153238460000151856020015185600001518660200151615e99565b9050836020015181615335919061743c565b8451859061534490839061743c565b90525060208401525090919050565b6040805180820190915260008082526020820152815183511015615378575081611a10565b602080830151908401516001911461539f5750815160208481015190840151829020919020145b80156153d0578251845185906153b690839061743c565b90525082516020850180516153cc90839061752d565b9052505b509192915050565b60408051808201909152600080825260208201526153f7838383615fb9565b5092915050565b60606000826000015167ffffffffffffffff81111561541f5761541f61671f565b6040519080825280601f01601f191660200182016040528015615449576020820181803683370190505b50905060006020820190506153f78185602001518660000151616064565b815181516000919081111561547a575081515b6020808501519084015160005b8381101561553357825182518082146155035760001960208710156154e2576001846154b489602061743c565b6154be919061752d565b6154c99060086176ea565b6154d49060026177e8565b6154de919061743c565b1990505b8181168382168181039114615500579750611a109650505050505050565b50505b61550e60208661752d565b945061551b60208561752d565b9350505060208161552c919061752d565b9050615487565b5084518651612aa491906177f4565b6060600061554e612323565b6040805160ff808252612000820190925291925060009190816020015b606081526020019060019003908161556b57905050905060006040518060400160405280600381526020017f6e707800000000000000000000000000000000000000000000000000000000008152508282806155c690616f3d565b935060ff16815181106155db576155db616da1565b60200260200101819052506040518060400160405280600781526020017f5e312e33322e330000000000000000000000000000000000000000000000000081525060405160200161562c9190617814565b60405160208183030381529060405282828061564790616f3d565b935060ff168151811061565c5761565c616da1565b60200260200101819052506040518060400160405280600881526020017f76616c69646174650000000000000000000000000000000000000000000000008152508282806156a990616f3d565b935060ff16815181106156be576156be616da1565b6020026020010181905250826040516020016156da9190616e3c565b6040516020818303038152906040528282806156f590616f3d565b935060ff168151811061570a5761570a616da1565b60200260200101819052506040518060400160405280600a81526020017f2d2d636f6e74726163740000000000000000000000000000000000000000000081525082828061575790616f3d565b935060ff168151811061576c5761576c616da1565b602002602001018190525061578187846160de565b828261578c81616f3d565b935060ff16815181106157a1576157a1616da1565b60209081029190910101528551511561584d5760408051808201909152600b81527f2d2d7265666572656e6365000000000000000000000000000000000000000000602082015282826157f381616f3d565b935060ff168151811061580857615808616da1565b60200260200101819052506158218660000151846160de565b828261582c81616f3d565b935060ff168151811061584157615841616da1565b60200260200101819052505b8560800151156158bb5760408051808201909152601881527f2d2d756e73616665536b697053746f72616765436865636b00000000000000006020820152828261589681616f3d565b935060ff16815181106158ab576158ab616da1565b6020026020010181905250615921565b84156159215760408051808201909152601281527f2d2d726571756972655265666572656e636500000000000000000000000000006020820152828261590081616f3d565b935060ff168151811061591557615915616da1565b60200260200101819052505b604086015151156159bd5760408051808201909152600d81527f2d2d756e73616665416c6c6f77000000000000000000000000000000000000006020820152828261596b81616f3d565b935060ff168151811061598057615980616da1565b6020026020010181905250856040015182828061599c90616f3d565b935060ff16815181106159b1576159b1616da1565b60200260200101819052505b856060015115615a275760408051808201909152601481527f2d2d756e73616665416c6c6f7752656e616d657300000000000000000000000060208201528282615a0681616f3d565b935060ff1681518110615a1b57615a1b616da1565b60200260200101819052505b60008160ff1667ffffffffffffffff811115615a4557615a4561671f565b604051908082528060200260200182016040528015615a7857816020015b6060815260200190600190039081615a635790505b50905060005b8260ff168160ff161015615ad157838160ff1681518110615aa157615aa1616da1565b6020026020010151828260ff1681518110615abe57615abe616da1565b6020908102919091010152600101615a7e565b50979650505050505050565b6040805180820190915260008082526020820152815183511015615b02575081611a10565b81518351602085015160009291615b189161752d565b615b22919061743c565b60208401519091506001908214615b43575082516020840151819020908220145b8015615b5e57835185518690615b5a90839061743c565b9052505b50929392505050565b6000808260000151615b8b8560000151866020015186600001518760200151615e99565b615b95919061752d565b90505b83516020850151615ba9919061752d565b81116153f75781615bb981617859565b9250508260000151615bf0856020015183615bd4919061743c565b8651615be0919061743c565b8386600001518760200151615e99565b615bfa919061752d565b9050615b98565b60606000615c0f8484615b67565b615c1a90600161752d565b67ffffffffffffffff811115615c3257615c3261671f565b604051908082528060200260200182016040528015615c6557816020015b6060815260200190600190039081615c505790505b50905060005b8151811015613cf257615c8161402186866153d8565b828281518110615c9357615c93616da1565b6020908102919091010152600101615c6b565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310615cef577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310615d1b576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc100008310615d3957662386f26fc10000830492506010015b6305f5e1008310615d51576305f5e100830492506008015b6127108310615d6557612710830492506004015b60648310615d77576064830492506002015b600a8310611a105760010192915050565b600080858411615e8f5760208411615e3b5760008415615dd3576001615daf86602061743c565b615dba9060086176ea565b615dc59060026177e8565b615dcf919061743c565b1990505b8351811685615de2898961752d565b615dec919061743c565b805190935082165b818114615e2657878411615e0e5787945050505050613923565b83615e1881617873565b945050828451169050615df4565b615e30878561752d565b945050505050613923565b838320615e48858861743c565b615e52908761752d565b91505b858210615e8d57848220808203615e7a57615e70868461752d565b9350505050613923565b615e8560018461743c565b925050615e55565b505b5092949350505050565b60008381868511615fa45760208511615f535760008515615ee5576001615ec187602061743c565b615ecc9060086176ea565b615ed79060026177e8565b615ee1919061743c565b1990505b84518116600087615ef68b8b61752d565b615f00919061743c565b855190915083165b828114615f4557818610615f2d57615f208b8b61752d565b9650505050505050613923565b85615f3781617859565b965050838651169050615f08565b859650505050505050613923565b508383206000905b615f65868961743c565b8211615fa257858320808203615f815783945050505050613923565b615f8c60018561752d565b9350508180615f9a90617859565b925050615f5b565b505b615fae878761752d565b979650505050505050565b60408051808201909152600080825260208201526000615feb8560000151866020015186600001518760200151615e99565b602080870180519186019190915251909150616007908261743c565b83528451602086015161601a919061752d565b8103616029576000855261605b565b83518351616037919061752d565b8551869061604690839061743c565b9052508351616055908261752d565b60208601525b50909392505050565b6020811061609c578151835261607b60208461752d565b925061608860208361752d565b915061609560208261743c565b9050616064565b60001981156160cb5760016160b283602061743c565b6160be906101006177e8565b6160c8919061743c565b90505b9151835183169219169190911790915250565b606060006160ec84846123f6565b80516020808301516040519394506161069390910161788a565b60405160208183030381529060405291505092915050565b610c9f806178e383390190565b6116fe8061858283390190565b61155a80619c8083390190565b610d5e8061b1da83390190565b6040518060e0016040528060608152602001606081526020016060815260200160001515815260200160001515815260200160001515815260200161619561619a565b905290565b604051806101000160405280600015158152602001600015158152602001606081526020016000801916815260200160608152602001606081526020016000151581526020016161956040518060800160405280600081526020016000815260200160008152602001600081525090565b602080825282518282018190526000918401906040840190835b8181101561624c5783516001600160a01b0316835260209384019390920191600101616225565b509095945050505050565b60005b8381101561627257818101518382015260200161625a565b50506000910152565b60008151808452616293816020860160208601616257565b601f01601f19169290920160200192915050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b828110156163a3577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452815180516001600160a01b03168652602090810151604082880181905281519088018190529101906060600582901b88018101919088019060005b81811015616389577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa08a850301835261637384865161627b565b6020958601959094509290920191600101616339565b5091975050506020948501949290920191506001016162cf565b50929695505050505050565b600081518084526020840193506020830160005b828110156164035781517fffffffff00000000000000000000000000000000000000000000000000000000168652602095860195909101906001016163c3565b5093949350505050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b828110156163a3577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08786030184528151805160408752616479604088018261627b565b905060208201519150868103602088015261649481836163af565b965050506020938401939190910190600101616435565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b828110156163a3577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc087860301845261650d85835161627b565b945060209384019391909101906001016164d3565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b828110156163a3577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc087860301845281516001600160a01b03815116865260208101519050604060208701526165a360408701826163af565b955050602093840193919091019060010161654a565b6000602082840312156165cb57600080fd5b81518015158114611b3657600080fd5b600181811c908216806165ef57607f821691505b6020821081036142fc577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006020828403121561663a57600080fd5b81516001600160a01b0381168114611b3657600080fd5b606081526000616664606083018661627b565b602083019490945250901515604090910152919050565b6001600160a01b03841681528260208201526060604082015260006142e2606083018461627b565b6001600160a01b038616815284602082015260a0604082015260006166cb60a083018661627b565b6060830194909452509015156080909101529392505050565b828152604060208201526000613923604083018461627b565b6001600160a01b0383168152604060208201526000613923604083018461627b565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040516060810167ffffffffffffffff811182821017156167715761677161671f565b60405290565b60008067ffffffffffffffff8411156167925761679261671f565b50604051601f19601f85018116603f0116810181811067ffffffffffffffff821117156167c1576167c161671f565b6040528381529050808284018510156167d957600080fd5b613cf2846020830185616257565b600082601f8301126167f857600080fd5b611b3683835160208501616777565b60006020828403121561681957600080fd5b815167ffffffffffffffff81111561683057600080fd5b611a0c848285016167e7565b60006020828403121561684e57600080fd5b5051919050565b7f4661696c656420746f206465706c6f7920636f6e74726163742000000000000081526000835161688d81601a850160208801616257565b7f3a20000000000000000000000000000000000000000000000000000000000000601a9184019182015283516168ca81601c840160208801616257565b01601c01949350505050565b602081526000611b36602083018461627b565b600083516168fb818460208801616257565b83519083019061690f818360208801616257565b01949350505050565b7f4661696c656420746f206465706c6f7920636f6e74726163742000000000000081526000835161695081601a850160208801616257565b7f207573696e6720636f6e7374727563746f722064617461202200000000000000601a91840191820152835161698d816033840160208801616257565b7f220000000000000000000000000000000000000000000000000000000000000060339290910191820152603401949350505050565b6001600160a01b03841681526001600160a01b03831660208201526060604082015260006142e2606083018461627b565b60408152600b60408201527f464f554e4452595f4f55540000000000000000000000000000000000000000006060820152608060208201526000611b36608083018461627b565b600060208284031215616a4d57600080fd5b815167ffffffffffffffff811115616a6457600080fd5b8201601f81018413616a7557600080fd5b611a0c84825160208401616777565b60008551616a96818460208a01616257565b7f2f000000000000000000000000000000000000000000000000000000000000009083019081528551616ad0816001840160208a01616257565b7f2f00000000000000000000000000000000000000000000000000000000000000600192909101918201528451616b0e816002840160208901616257565b6001818301019150507f2f0000000000000000000000000000000000000000000000000000000000000060018201528351616b50816002840160208801616257565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600292909101918201526007019695505050505050565b604081526000616b9b604083018461627b565b8281036020840152600481527f2e6173740000000000000000000000000000000000000000000000000000000060208201526040810191505092915050565b7f436f756c64206e6f742066696e642041535420696e2061727469666163742000815260008251616c1281601f850160208701616257565b7f2e205365742060617374203d20747275656020696e20666f756e6472792e746f601f9390910192830152507f6d6c000000000000000000000000000000000000000000000000000000000000603f820152604101919050565b604081526000616c7f604083018461627b565b8281036020840152601181527f2e6173742e6162736f6c7574655061746800000000000000000000000000000060208201526040810191505092915050565b604081526000616cd1604083018461627b565b8281036020840152600c81527f2e6173742e6c6963656e7365000000000000000000000000000000000000000060208201526040810191505092915050565b7f2e6d657461646174612e736f75726365732e5b27000000000000000000000000815260008251616d48816014850160208701616257565b7f275d2e6b656363616b32353600000000000000000000000000000000000000006014939091019283015250602001919050565b604081526000616d8f604083018561627b565b8281036020840152611b32818561627b565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f2200000000000000000000000000000000000000000000000000000000000000815260008251616e08816001850160208701616257565b7f22000000000000000000000000000000000000000000000000000000000000006001939091019283015250600201919050565b60008251616e4e818460208701616257565b7f2f6275696c642d696e666f000000000000000000000000000000000000000000920191825250600b01919050565b7f436f756c64206e6f742066696e64206275696c642d696e666f2066696c65207781527f697468206d61746368696e6720736f7572636520636f6465206861736820666f60208201527f7220636f6e747261637420000000000000000000000000000000000000000000604082015260008251616f0181604b850160208701616257565b91909101604b0192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600060ff821660ff8103616f5357616f53616f0e565b60010192915050565b7f406f70656e7a657070656c696e2f646566656e6465722d6465706c6f792d636c81527f69656e742d636c69400000000000000000000000000000000000000000000000602082015260008251616fba816029850160208701616257565b9190910160290192915050565b60408152601660408201527f4f50454e5a455050454c494e5f424153485f50415448000000000000000000006060820152608060208201526000611b36608083018461627b565b60006020828403121561702057600080fd5b815167ffffffffffffffff81111561703757600080fd5b82016060818503121561704957600080fd5b61705161674e565b81518060030b811461706257600080fd5b8152602082015167ffffffffffffffff81111561707e57600080fd5b61708a868285016167e7565b602083015250604082015167ffffffffffffffff8111156170aa57600080fd5b6170b6868285016167e7565b604083015250949350505050565b7f4661696c656420746f2072756e206261736820636f6d6d616e6420776974682081527f2200000000000000000000000000000000000000000000000000000000000000602082015260008251617122816021850160208701616257565b7f222e20496620796f7520617265207573696e672057696e646f77732c2073657460219390910192830152507f20746865204f50454e5a455050454c494e5f424153485f5041544820656e766960418201527f726f6e6d656e74207661726961626c6520746f207468652066756c6c7920717560618201527f616c69666965642070617468206f66207468652062617368206578656375746160818201527f626c652e20466f72206578616d706c652c20696620796f75206172652075736960a18201527f6e672047697420666f722057696e646f77732c206164642074686520666f6c6c60c18201527f6f77696e67206c696e6520696e20746865202e656e762066696c65206f66207960e18201527f6f75722070726f6a65637420287573696e6720666f727761726420736c6173686101018201527f6573293a0a4f50454e5a455050454c494e5f424153485f504154483d22433a2f6101218201527f50726f6772616d2046696c65732f4769742f62696e2f6261736822000000000061014182015261015c01919050565b7f4661696c656420746f2066696e64206c696e652077697468207072656669782081527f270000000000000000000000000000000000000000000000000000000000000060208201526000835161730e816021850160208801616257565b7f2720696e206f75747075743a2000000000000000000000000000000000000000602191840191820152835161734b81602e840160208801616257565b01602e01949350505050565b60008251617369818460208701616257565b9190910192915050565b7f4661696c656420746f2072756e2075706772616465207361666574792076616c81527f69646174696f6e3a200000000000000000000000000000000000000000000000602082015260008251616fba816029850160208701616257565b7f55706772616465207361666574792076616c69646174696f6e206661696c656481527f3a0a00000000000000000000000000000000000000000000000000000000000060208201526000825161742f816022850160208701616257565b9190910160220192915050565b81810381811115611a1057611a10616f0e565b7f436f6e7472616374206e616d652000000000000000000000000000000000000081526000825161748781600e850160208701616257565b7f206d75737420626520696e2074686520666f726d6174204d79436f6e74726163600e9390910192830152507f742e736f6c3a4d79436f6e7472616374206f72204d79436f6e74726163742e73602e8201527f6f6c206f72206f75742f4d79436f6e74726163742e736f6c2f4d79436f6e7472604e8201527f6163742e6a736f6e000000000000000000000000000000000000000000000000606e820152607601919050565b80820180821115611a1057611a10616f0e565b7f53504458206c6963656e7365206964656e746966696572200000000000000000815260008351617578816018850160208801616257565b7f20696e200000000000000000000000000000000000000000000000000000000060189184019182015283516175b581601c840160208801616257565b7f20646f6573206e6f74206c6f6f6b206c696b65206120737570706f7274656420601c92909101918201527f6c6963656e736520666f7220626c6f636b206578706c6f726572207665726966603c8201527f69636174696f6e2e205573652074686520606c6963656e73655479706560206f605c8201527f7074696f6e20746f20737065636966792061206c6963656e736520747970652c607c8201527f206f7220736574207468652060736b69704c6963656e73655479706560206f70609c8201527f74696f6e20746f2060747275656020746f20736b69702e00000000000000000060bc82015260d301949350505050565b600082516176bb818460208701616257565b7f2000000000000000000000000000000000000000000000000000000000000000920191825250600101919050565b8082028115828204841417611a1057611a10616f0e565b6001815b600184111561773c5780850481111561772057617720616f0e565b600184161561772e57908102905b60019390931c928002617705565b935093915050565b60008261775357506001611a10565b8161776057506000611a10565b816001811461777657600281146177805761779c565b6001915050611a10565b60ff84111561779157617791616f0e565b50506001821b611a10565b5060208310610133831016604e8410600b84101617156177bf575081810a611a10565b6177cc6000198484617701565b80600019048211156177e0576177e0616f0e565b029392505050565b6000611b368383617744565b81810360008312801583831316838312821617156153f7576153f7616f0e565b7f406f70656e7a657070656c696e2f75706772616465732d636f7265400000000081526000825161784c81601c850160208701616257565b91909101601c0192915050565b6000600019820361786c5761786c616f0e565b5060010190565b60008161788257617882616f0e565b506000190190565b6000835161789c818460208801616257565b7f3a0000000000000000000000000000000000000000000000000000000000000090830190815283516178d6816001840160208801616257565b0160010194935050505056fe608060405234801561001057600080fd5b50604051610c9f380380610c9f83398101604081905261002f9161010d565b8181600361003d83826101ff565b50600461004a82826101ff565b50505050506102bd565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261007b57600080fd5b81516001600160401b0381111561009457610094610054565b604051601f8201601f19908116603f011681016001600160401b03811182821017156100c2576100c2610054565b6040528181528382016020018510156100da57600080fd5b60005b828110156100f9576020818601810151838301820152016100dd565b506000918101602001919091529392505050565b6000806040838503121561012057600080fd5b82516001600160401b0381111561013657600080fd5b6101428582860161006a565b602085015190935090506001600160401b0381111561016057600080fd5b61016c8582860161006a565b9150509250929050565b600181811c9082168061018a57607f821691505b6020821081036101aa57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156101fa57806000526020600020601f840160051c810160208510156101d75750805b601f840160051c820191505b818110156101f757600081556001016101e3565b50505b505050565b81516001600160401b0381111561021857610218610054565b61022c816102268454610176565b846101b0565b6020601f82116001811461026057600083156102485750848201515b600019600385901b1c1916600184901b1784556101f7565b600084815260208120601f198516915b828110156102905787850151825560209485019460019092019101610270565b50848210156102ae5786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b6109d3806102cc6000396000f3fe608060405234801561001057600080fd5b50600436106100be5760003560e01c806340c10f191161007657806395d89b411161005b57806395d89b4114610183578063a9059cbb1461018b578063dd62ed3e1461019e57600080fd5b806340c10f191461013857806370a082311461014d57600080fd5b806318160ddd116100a757806318160ddd1461010457806323b872dd14610116578063313ce5671461012957600080fd5b806306fdde03146100c3578063095ea7b3146100e1575b600080fd5b6100cb6101e4565b6040516100d891906107bf565b60405180910390f35b6100f46100ef366004610854565b610276565b60405190151581526020016100d8565b6002545b6040519081526020016100d8565b6100f461012436600461087e565b610290565b604051601281526020016100d8565b61014b610146366004610854565b6102b4565b005b61010861015b3660046108bb565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6100cb6102c2565b6100f4610199366004610854565b6102d1565b6101086101ac3660046108dd565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6060600380546101f390610910565b80601f016020809104026020016040519081016040528092919081815260200182805461021f90610910565b801561026c5780601f106102415761010080835404028352916020019161026c565b820191906000526020600020905b81548152906001019060200180831161024f57829003601f168201915b5050505050905090565b6000336102848185856102df565b60019150505b92915050565b60003361029e8582856102f1565b6102a98585856103c5565b506001949350505050565b6102be8282610470565b5050565b6060600480546101f390610910565b6000336102848185856103c5565b6102ec83838360016104cc565b505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146103bf57818110156103b0576040517ffb8f41b200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416600482015260248101829052604481018390526064015b60405180910390fd5b6103bf848484840360006104cc565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8316610415576040517f96c6fd1e000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff8216610465576040517fec442f05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b6102ec838383610614565b73ffffffffffffffffffffffffffffffffffffffff82166104c0576040517fec442f05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b6102be60008383610614565b73ffffffffffffffffffffffffffffffffffffffff841661051c576040517fe602df05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff831661056c576040517f94280d62000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260016020908152604080832093871683529290522082905580156103bf578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161060691815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff831661064c5780600260008282546106419190610963565b909155506106fe9050565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260208190526040902054818110156106d2576040517fe450d38c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8516600482015260248101829052604481018390526064016103a7565b73ffffffffffffffffffffffffffffffffffffffff841660009081526020819052604090209082900390555b73ffffffffffffffffffffffffffffffffffffffff821661072757600280548290039055610753565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090208054820190555b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516107b291815260200190565b60405180910390a3505050565b602081526000825180602084015260005b818110156107ed57602081860181015160408684010152016107d0565b5060006040828501015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011684010191505092915050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461084f57600080fd5b919050565b6000806040838503121561086757600080fd5b6108708361082b565b946020939093013593505050565b60008060006060848603121561089357600080fd5b61089c8461082b565b92506108aa6020850161082b565b929592945050506040919091013590565b6000602082840312156108cd57600080fd5b6108d68261082b565b9392505050565b600080604083850312156108f057600080fd5b6108f98361082b565b91506109076020840161082b565b90509250929050565b600181811c9082168061092457607f821691505b60208210810361095d577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b8082018082111561028a577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea26469706673582212207e804ca539d49155d2b6bc19268ce22f9f857027c75247d69fb0d56a089c93d464736f6c634300081a003360a060405234801561001057600080fd5b506040516116fe3803806116fe83398101604081905261002f916101e5565b60016000556002805460ff191690556001600160a01b038316158061005b57506001600160a01b038216155b8061006d57506001600160a01b038116155b1561008b5760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b0383166080526100a3600082610134565b506100ce7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a82610134565b506100f97f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e483610134565b506101126000805160206116de83398151915282610134565b5061012b6000805160206116de83398151915283610134565b50505050610228565b60008281526001602090815260408083206001600160a01b038516845290915281205460ff166101bf5760008381526001602081815260408084206001600160a01b0387168086529252808420805460ff19169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45060016101c3565b5060005b92915050565b80516001600160a01b03811681146101e057600080fd5b919050565b6000806000606084860312156101fa57600080fd5b610203846101c9565b9250610211602085016101c9565b915061021f604085016101c9565b90509250925092565b60805161147f61025f6000396000818161019e0152818161050001528181610562015281816108f70152610959015261147f6000f3fe608060405234801561001057600080fd5b506004361061016c5760003560e01c806385f438c1116100cd578063c8a0236211610081578063d936547e11610066578063d936547e14610355578063d9caed1214610378578063e63ab1e91461038b57600080fd5b8063c8a023621461032f578063d547741f1461034257600080fd5b80639a590427116100b25780639a590427146103015780639b19251a14610314578063a217fddf1461032757600080fd5b806385f438c11461029457806391d14854146102bb57600080fd5b806336568abe11610124578063570618e111610109578063570618e11461025a5780635c975abb146102815780638456cb591461028c57600080fd5b806336568abe1461023f5780633f4ba83a1461025257600080fd5b806321fc65f21161015557806321fc65f2146101e5578063248a9ca3146101fa5780632f2ff15d1461022c57600080fd5b806301ffc9a714610171578063116191b614610199575b600080fd5b61018461017f36600461118a565b6103b2565b60405190151581526020015b60405180910390f35b6101c07f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610190565b6101f86101f33660046111f5565b61044b565b005b61021e610208366004611292565b6000908152600160208190526040909120015490565b604051908152602001610190565b6101f861023a3660046112ab565b61064c565b6101f861024d3660046112ab565b610678565b6101f86106d6565b61021e7f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a81565b60025460ff16610184565b6101f861070b565b61021e7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b6101846102c93660046112ab565b600091825260016020908152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b6101f861030f3660046112d7565b61073d565b6101f86103223660046112d7565b6107be565b61021e600081565b6101f861033d3660046111f5565b610842565b6101f86103503660046112ab565b610a29565b6101846103633660046112d7565b60036020526000908152604090205460ff1681565b6101f86103863660046112f2565b610a4f565b61021e7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061044557507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b610453610b7b565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461047d81610bbe565b610485610bc8565b73ffffffffffffffffffffffffffffffffffffffff861660009081526003602052604090205460ff166104e4576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61052573ffffffffffffffffffffffffffffffffffffffff87167f000000000000000000000000000000000000000000000000000000000000000086610c07565b6040517f5131ab5900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690635131ab599061059f9089908990899089908990600401611378565b600060405180830381600087803b1580156105b957600080fd5b505af11580156105cd573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167f85b5be9cf454e05e0bddf49315178102227c312078eefa3c00294fb4d912ae4e868686604051610632939291906113d5565b60405180910390a3506106456001600055565b5050505050565b6000828152600160208190526040909120015461066881610bbe565b6106728383610c94565b50505050565b73ffffffffffffffffffffffffffffffffffffffff811633146106c7576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6106d18282610d41565b505050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61070081610bbe565b610708610de2565b50565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61073581610bbe565b610708610e41565b7f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a61076781610bbe565b73ffffffffffffffffffffffffffffffffffffffff8216600081815260036020526040808220805460ff19169055517f51085ddf9ebdded84b76e829eb58c4078e4b5bdf97d9a94723f336039da467919190a25050565b7f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a6107e881610bbe565b73ffffffffffffffffffffffffffffffffffffffff8216600081815260036020526040808220805460ff19166001179055517faab7954e9d246b167ef88aeddad35209ca2489d95a8aeb59e288d9b19fae5a549190a25050565b61084a610b7b565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461087481610bbe565b61087c610bc8565b73ffffffffffffffffffffffffffffffffffffffff861660009081526003602052604090205460ff166108db576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61091c73ffffffffffffffffffffffffffffffffffffffff87167f000000000000000000000000000000000000000000000000000000000000000086610c07565b6040517fb8969bd400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063b8969bd4906109969089908990899089908990600401611378565b600060405180830381600087803b1580156109b057600080fd5b505af11580156109c4573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fb9d4efa96044e5f5e03e696fa9ae2ff66911cc27e8a637c3627c75bc5b2241c8868686604051610632939291906113d5565b60008281526001602081905260409091200154610a4581610bbe565b6106728383610d41565b610a57610b7b565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e4610a8181610bbe565b610a89610bc8565b73ffffffffffffffffffffffffffffffffffffffff841660009081526003602052604090205460ff16610ae8576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610b0973ffffffffffffffffffffffffffffffffffffffff85168484610c07565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f9b1bfa7fa9ee420a16e124f794c35ac9f90472acc99140eb2f6447c714cad8eb84604051610b6891815260200190565b60405180910390a3506106d16001600055565b600260005403610bb7576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b6107088133610e7e565b60025460ff1615610c05576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6040805173ffffffffffffffffffffffffffffffffffffffff8416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb000000000000000000000000000000000000000000000000000000001790526106d1908490610f0f565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff16610d3957600083815260016020818152604080842073ffffffffffffffffffffffffffffffffffffffff87168086529252808420805460ff19169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a4506001610445565b506000610445565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff1615610d3957600083815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff86168085529252808320805460ff1916905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a4506001610445565b610dea610fa5565b6002805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b610e49610bc8565b6002805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258610e173390565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16610f0b576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82166004820152602481018390526044015b60405180910390fd5b5050565b6000610f3173ffffffffffffffffffffffffffffffffffffffff841683610fe1565b90508051600014158015610f56575080806020019051810190610f5491906113f8565b155b156106d1576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84166004820152602401610f02565b60025460ff16610c05576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6060610fef83836000610ff6565b9392505050565b606081471015611034576040517fcd786059000000000000000000000000000000000000000000000000000000008152306004820152602401610f02565b6000808573ffffffffffffffffffffffffffffffffffffffff16848660405161105d919061141a565b60006040518083038185875af1925050503d806000811461109a576040519150601f19603f3d011682016040523d82523d6000602084013e61109f565b606091505b50915091506110af8683836110b9565b9695505050505050565b6060826110ce576110c982611148565b610fef565b81511580156110f2575073ffffffffffffffffffffffffffffffffffffffff84163b155b15611141576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85166004820152602401610f02565b5080610fef565b8051156111585780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006020828403121561119c57600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610fef57600080fd5b803573ffffffffffffffffffffffffffffffffffffffff811681146111f057600080fd5b919050565b60008060008060006080868803121561120d57600080fd5b611216866111cc565b9450611224602087016111cc565b935060408601359250606086013567ffffffffffffffff81111561124757600080fd5b8601601f8101881361125857600080fd5b803567ffffffffffffffff81111561126f57600080fd5b88602082840101111561128157600080fd5b959894975092955050506020019190565b6000602082840312156112a457600080fd5b5035919050565b600080604083850312156112be57600080fd5b823591506112ce602084016111cc565b90509250929050565b6000602082840312156112e957600080fd5b610fef826111cc565b60008060006060848603121561130757600080fd5b611310846111cc565b925061131e602085016111cc565b929592945050506040919091013590565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff8616815273ffffffffffffffffffffffffffffffffffffffff851660208201528360408201526080606082015260006113ca60808301848661132f565b979650505050505050565b8381526040602082015260006113ef60408301848661132f565b95945050505050565b60006020828403121561140a57600080fd5b81518015158114610fef57600080fd5b6000825160005b8181101561143b5760208186018101518583015201611421565b50600092019182525091905056fea2646970667358221220dc54ce548a1f0bf8ba5e86cc53c6d822e55eee543451395733c659359bac8dd164736f6c634300081a00338619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a60c060405260001960035534801561001657600080fd5b5060405161155a38038061155a83398101604081905261003591610220565b60016000819055805460ff19169055838383836001600160a01b038416158061006557506001600160a01b038316155b8061007757506001600160a01b038216155b8061008957506001600160a01b038116155b156100a75760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b03808516608052831660a0526100c5600082610154565b506100f07f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e483610154565b5061011b7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb83610154565b506101467f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a82610154565b505050505050505050610274565b60008281526002602090815260408083206001600160a01b038516845290915281205460ff166101fa5760008381526002602090815260408083206001600160a01b03861684529091529020805460ff191660011790556101b23390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45060016101fe565b5060005b92915050565b80516001600160a01b038116811461021b57600080fd5b919050565b6000806000806080858703121561023657600080fd5b61023f85610204565b935061024d60208601610204565b925061025b60408601610204565b915061026960608601610204565b905092959194509250565b60805160a0516112826102d86000396000818161021d01528181610531015281816108240152818161097b01528181610ad00152610bf20152600081816101d1015281816104a1015281816105040152818161079401526107f701526112826000f3fe608060405234801561001057600080fd5b50600436106101775760003560e01c80635e3e9fef116100d857806391d148541161008c578063d547741f11610066578063d547741f14610386578063d5abeb0114610399578063e63ab1e9146103a257600080fd5b806391d1485414610311578063a217fddf14610357578063a783c7891461035f57600080fd5b8063743e0c9b116100bd578063743e0c9b146102cf5780638456cb59146102e257806385f438c1146102ea57600080fd5b80635e3e9fef146102a95780636f8b44b0146102bc57600080fd5b8063248a9ca31161012f57806336568abe1161011457806336568abe146102835780633f4ba83a146102965780635c975abb1461029e57600080fd5b8063248a9ca31461023f5780632f2ff15d1461027057600080fd5b8063106e629011610160578063106e6290146101b9578063116191b6146101cc57806321e093b11461021857600080fd5b806301ffc9a71461017c57806302d5c899146101a4575b600080fd5b61018f61018a366004610fb4565b6103c9565b60405190151581526020015b60405180910390f35b6101b76101b2366004611026565b610462565b005b6101b76101c73660046110b8565b6105f7565b6101f37f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161019b565b6101f37f000000000000000000000000000000000000000000000000000000000000000081565b61026261024d3660046110eb565b60009081526002602052604090206001015490565b60405190815260200161019b565b6101b761027e366004611104565b61069c565b6101b7610291366004611104565b6106c7565b6101b7610720565b60015460ff1661018f565b6101b76102b7366004611026565b610755565b6101b76102ca3660046110eb565b6108d0565b6101b76102dd3660046110eb565b61093e565b6101b76109e8565b6102627f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b61018f61031f366004611104565b600091825260026020908152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b610262600081565b6102627f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb81565b6101b7610394366004611104565b610a1a565b61026260035481565b6102627f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061045c57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b61046a610a3f565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461049481610a82565b61049c610a8c565b6104c77f00000000000000000000000000000000000000000000000000000000000000008684610acb565b6040517fb8969bd400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063b8969bd490610561907f0000000000000000000000000000000000000000000000000000000000000000908a908a908a908a90600401611179565b600060405180830381600087803b15801561057b57600080fd5b505af115801561058f573d6000803e3d6000fd5b505050508573ffffffffffffffffffffffffffffffffffffffff167fba96f26bdda53eb8c8ba39045dfb4ff39753fbc7a6edcf250a88e75e78d102fe8686866040516105dd939291906111d6565b60405180910390a2506105f06001600055565b5050505050565b6105ff610a3f565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461062981610a82565b610631610a8c565b61063c848484610acb565b8373ffffffffffffffffffffffffffffffffffffffff167f884edad9ce6fa2440d8a54cc123490eb96d2768479d49ff9c7366125a94243648460405161068491815260200190565b60405180910390a2506106976001600055565b505050565b6000828152600260205260409020600101546106b781610a82565b6106c18383610c53565b50505050565b73ffffffffffffffffffffffffffffffffffffffff81163314610716576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6106978282610d53565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61074a81610a82565b610752610e12565b50565b61075d610a3f565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461078781610a82565b61078f610a8c565b6107ba7f00000000000000000000000000000000000000000000000000000000000000008684610acb565b6040517f5131ab5900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690635131ab5990610854907f0000000000000000000000000000000000000000000000000000000000000000908a908a908a908a90600401611179565b600060405180830381600087803b15801561086e57600080fd5b505af1158015610882573d6000803e3d6000fd5b505050508573ffffffffffffffffffffffffffffffffffffffff167f7772f56296d3a5202974a45c61c9188d844ab4d6eeb18c851e4b8d5384ca6ced8686866040516105dd939291906111d6565b7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb6108fa81610a82565b610902610a8c565b60038290556040518281527f7810bd47de260c3e9ee10061cf438099dd12256c79485f12f94dbccc981e806c9060200160405180910390a15050565b610946610a8c565b6040517f79cc6790000000000000000000000000000000000000000000000000000000008152336004820152602481018290527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16906379cc679090604401600060405180830381600087803b1580156109d457600080fd5b505af11580156105f0573d6000803e3d6000fd5b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610a1281610a82565b610752610e8f565b600082815260026020526040902060010154610a3581610a82565b6106c18383610d53565b600260005403610a7b576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b6107528133610ee8565b60015460ff1615610ac9576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6003547f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b39573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b5d91906111f9565b610b679084611212565b1115610b9f576040517fc30436e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f1e458bee00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff848116600483015260248201849052604482018390527f00000000000000000000000000000000000000000000000000000000000000001690631e458bee90606401600060405180830381600087803b158015610c3657600080fd5b505af1158015610c4a573d6000803e3d6000fd5b50505050505050565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff16610d4b57600083815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff86168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055610ce93390565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a450600161045c565b50600061045c565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff1615610d4b57600083815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8616808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a450600161045c565b610e1a610f78565b600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b610e97610a8c565b600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016811790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25833610e65565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16610f74576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff821660048201526024810183905260440160405180910390fd5b5050565b60015460ff16610ac9576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060208284031215610fc657600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610ff657600080fd5b9392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461102157600080fd5b919050565b60008060008060006080868803121561103e57600080fd5b61104786610ffd565b945060208601359350604086013567ffffffffffffffff81111561106a57600080fd5b8601601f8101881361107b57600080fd5b803567ffffffffffffffff81111561109257600080fd5b8860208284010111156110a457600080fd5b959894975060200195606001359392505050565b6000806000606084860312156110cd57600080fd5b6110d684610ffd565b95602085013595506040909401359392505050565b6000602082840312156110fd57600080fd5b5035919050565b6000806040838503121561111757600080fd5b8235915061112760208401610ffd565b90509250929050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff8616815273ffffffffffffffffffffffffffffffffffffffff851660208201528360408201526080606082015260006111cb608083018486611130565b979650505050505050565b8381526040602082015260006111f0604083018486611130565b95945050505050565b60006020828403121561120b57600080fd5b5051919050565b8082018082111561045c577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea2646970667358221220de5fa55e0ca79ea2f08903481d01ea00bbbf346b9cfba44e12a2dd6f3a6f2e8a64736f6c634300081a00336080604052348015600f57600080fd5b506001600055610d3a806100246000396000f3fe6080604052600436106100635760003560e01c8063c513169111610040578063c5131691146100c1578063e04d4f97146100e1578063f05b6abf146100f457005b8063357fc5a21461006c5780636ed701691461008c5780638fcaa0b5146100a157005b3661006a57005b005b34801561007857600080fd5b5061006a6100873660046106c0565b610114565b34801561009857600080fd5b5061006a6101aa565b3480156100ad57600080fd5b5061006a6100bc3660046106fc565b6101df565b3480156100cd57600080fd5b5061006a6100dc3660046106c0565b61021e565b61006a6100ef366004610895565b6102f9565b34801561010057600080fd5b5061006a61010f366004610981565b61033d565b61011c610372565b61013e73ffffffffffffffffffffffffffffffffffffffff83163383866103b5565b604080513381526020810185905273ffffffffffffffffffffffffffffffffffffffff848116828401528316606082015290517f2b58128f24a9f59127cc5b5430d70542b22220f2d9adaa86e442b816ab98af609181900360800190a16101a56001600055565b505050565b6040513381527fbcaadb46b82a48af60b608f58959ae6b8310d1b0a0d094c2e9ec3208ed39f2a09060200160405180910390a1565b7f0d3f65f00e631663aa85c96330b5c7a83bb29af3630c0063776f985edc3037aa33838360405161021293929190610a6b565b60405180910390a15050565b610226610372565b6000610233600285610ad5565b90508060000361026f576040517f1f2a200500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61029173ffffffffffffffffffffffffffffffffffffffff84163384846103b5565b604080513381526020810183905273ffffffffffffffffffffffffffffffffffffffff858116828401528416606082015290517f2b58128f24a9f59127cc5b5430d70542b22220f2d9adaa86e442b816ab98af609181900360800190a1506101a56001600055565b7f1f1ff1f5fb41346850b2f5c04e6c767e2f1c8a525c5c0c5cdb60cdf3ca5f62fa3334858585604051610330959493929190610b7e565b60405180910390a1505050565b7f74a53cd528a921fca7dbdee62f86819051d3cc98f214951f4238e8843f20b146338484846040516103309493929190610c08565b6002600054036103ae576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b6040805173ffffffffffffffffffffffffffffffffffffffff85811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd0000000000000000000000000000000000000000000000000000000017905261044a908590610450565b50505050565b600061047273ffffffffffffffffffffffffffffffffffffffff8416836104eb565b905080516000141580156104975750808060200190518101906104959190610ccb565b155b156101a5576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff841660048201526024015b60405180910390fd5b60606104f983836000610500565b9392505050565b60608147101561053e576040517fcd7860590000000000000000000000000000000000000000000000000000000081523060048201526024016104e2565b6000808573ffffffffffffffffffffffffffffffffffffffff1684866040516105679190610ce8565b60006040518083038185875af1925050503d80600081146105a4576040519150601f19603f3d011682016040523d82523d6000602084013e6105a9565b606091505b50915091506105b98683836105c3565b9695505050505050565b6060826105d8576105d382610652565b6104f9565b81511580156105fc575073ffffffffffffffffffffffffffffffffffffffff84163b155b1561064b576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff851660048201526024016104e2565b50806104f9565b8051156106625780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50565b803573ffffffffffffffffffffffffffffffffffffffff811681146106bb57600080fd5b919050565b6000806000606084860312156106d557600080fd5b833592506106e560208501610697565b91506106f360408501610697565b90509250925092565b6000806020838503121561070f57600080fd5b823567ffffffffffffffff81111561072657600080fd5b8301601f8101851361073757600080fd5b803567ffffffffffffffff81111561074e57600080fd5b85602082840101111561076057600080fd5b6020919091019590945092505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156107e6576107e6610770565b604052919050565b600082601f8301126107ff57600080fd5b813567ffffffffffffffff81111561081957610819610770565b61084a60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8401160161079f565b81815284602083860101111561085f57600080fd5b816020850160208301376000918101602001919091529392505050565b801515811461069457600080fd5b80356106bb8161087c565b6000806000606084860312156108aa57600080fd5b833567ffffffffffffffff8111156108c157600080fd5b6108cd868287016107ee565b9350506020840135915060408401356108e58161087c565b809150509250925092565b600067ffffffffffffffff82111561090a5761090a610770565b5060051b60200190565b600082601f83011261092557600080fd5b8135610938610933826108f0565b61079f565b8082825260208201915060208360051b86010192508583111561095a57600080fd5b602085015b8381101561097757803583526020928301920161095f565b5095945050505050565b60008060006060848603121561099657600080fd5b833567ffffffffffffffff8111156109ad57600080fd5b8401601f810186136109be57600080fd5b80356109cc610933826108f0565b8082825260208201915060208360051b8501019250888311156109ee57600080fd5b602084015b83811015610a3057803567ffffffffffffffff811115610a1257600080fd5b610a218b6020838901016107ee565b845250602092830192016109f3565b509550505050602084013567ffffffffffffffff811115610a5057600080fd5b610a5c86828701610914565b9250506106f36040850161088a565b73ffffffffffffffffffffffffffffffffffffffff8416815260406020820152816040820152818360608301376000818301606090810191909152601f9092017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016010192915050565b600082610b0b577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60005b83811015610b2b578181015183820152602001610b13565b50506000910152565b60008151808452610b4c816020860160208601610b10565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b73ffffffffffffffffffffffffffffffffffffffff8616815284602082015260a060408201526000610bb360a0830186610b34565b6060830194909452509015156080909101529392505050565b600081518084526020840193506020830160005b82811015610bfe578151865260209586019590910190600101610be0565b5093949350505050565b60006080820173ffffffffffffffffffffffffffffffffffffffff871683526080602084015280865180835260a08501915060a08160051b86010192506020880160005b82811015610c9b577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60878603018452610c86858351610b34565b94506020938401939190910190600101610c4c565b505050508281036040840152610cb18186610bcc565b915050610cc2606083018415159052565b95945050505050565b600060208284031215610cdd57600080fd5b81516104f98161087c565b60008251610cfa818460208701610b10565b919091019291505056fea2646970667358221220556072e1abafc3c4063b8cce832228b4f309b93726aaa6a6dfab20cb880c6d1864736f6c634300081a0033a264697066735822122082a62ac186a112136baadcc082d5c077c1bedadf0fffeec23479f5a44e23243164736f6c634300081a0033", } // GatewayEVMUUPSUpgradeTestABI is the input ABI used to generate the binding from. diff --git a/v2/pkg/gatewayevmupgradetest.sol/gatewayevmupgradetest.go b/v2/pkg/gatewayevmupgradetest.sol/gatewayevmupgradetest.go index d5a77e02..de876a48 100644 --- a/v2/pkg/gatewayevmupgradetest.sol/gatewayevmupgradetest.go +++ b/v2/pkg/gatewayevmupgradetest.sol/gatewayevmupgradetest.go @@ -31,8 +31,8 @@ var ( // GatewayEVMUpgradeTestMetaData contains all meta data concerning the GatewayEVMUpgradeTest contract. var GatewayEVMUpgradeTestMetaData = &bind.MetaData{ - ABI: "[{\"type\":\"constructor\",\"inputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"ASSET_HANDLER_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"DEFAULT_ADMIN_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"PAUSER_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"TSS_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"UPGRADE_INTERFACE_VERSION\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"call\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"custody\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"deposit\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"deposit\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"depositAndCall\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"depositAndCall\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"execute\",\"inputs\":[{\"name\":\"destination\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"executeRevert\",\"inputs\":[{\"name\":\"destination\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"executeWithERC20\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"getRoleAdmin\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"grantRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"hasRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"initialize\",\"inputs\":[{\"name\":\"_tssAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_zetaToken\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_admin\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"pause\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"paused\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"proxiableUUID\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"renounceRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"callerConfirmation\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"revertWithERC20\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"revokeRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setConnector\",\"inputs\":[{\"name\":\"_zetaConnector\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setCustody\",\"inputs\":[{\"name\":\"_custody\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"supportsInterface\",\"inputs\":[{\"name\":\"interfaceId\",\"type\":\"bytes4\",\"internalType\":\"bytes4\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"tssAddress\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"unpause\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"upgradeToAndCall\",\"inputs\":[{\"name\":\"newImplementation\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"zetaConnector\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"zetaToken\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"event\",\"name\":\"Call\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"receiver\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Deposit\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"receiver\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"asset\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Executed\",\"inputs\":[{\"name\":\"destination\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ExecutedV2\",\"inputs\":[{\"name\":\"destination\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ExecutedWithERC20\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Initialized\",\"inputs\":[{\"name\":\"version\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Paused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Reverted\",\"inputs\":[{\"name\":\"destination\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RevertedWithERC20\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleAdminChanged\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"previousAdminRole\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"newAdminRole\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleGranted\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleRevoked\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Unpaused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Upgraded\",\"inputs\":[{\"name\":\"implementation\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"AccessControlBadConfirmation\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"AccessControlUnauthorizedAccount\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"neededRole\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"type\":\"error\",\"name\":\"AddressEmptyCode\",\"inputs\":[{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"AddressInsufficientBalance\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"ApprovalFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ConnectorInitialized\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"CustodyInitialized\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"DepositFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ERC1967InvalidImplementation\",\"inputs\":[{\"name\":\"implementation\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"ERC1967NonPayable\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"EnforcedPause\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ExecutionFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ExpectedPause\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"FailedInnerCall\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientERC20Amount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientETHAmount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidInitialization\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NotInitializing\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ReentrancyGuardReentrantCall\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"SafeERC20FailedOperation\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"UUPSUnauthorizedCallContext\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"UUPSUnsupportedProxiableUUID\",\"inputs\":[{\"name\":\"slot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"type\":\"error\",\"name\":\"ZeroAddress\",\"inputs\":[]}]", - Bin: "0x60a06040523060805234801561001457600080fd5b5061001d610022565b6100d4565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100725760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146100d15780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b608051612d526100fd60003960008181611ab101528181611ada0152611f250152612d526000f3fe6080604052600436106101e35760003560e01c80635c975abb11610102578063ae7a3a6f11610095578063dda79b7511610064578063dda79b751461062e578063e63ab1e91461064e578063f340fa0114610682578063f45346dc1461069557600080fd5b8063ae7a3a6f146105ae578063b8969bd4146105ce578063c0c53b8b146105ee578063d547741f1461060e57600080fd5b806391d14854116100d157806391d14854146104b7578063a217fddf1461051c578063a783c78914610531578063ad3cb1cc1461056557600080fd5b80635c975abb146104175780635d62c8601461044e5780638456cb59146104825780638c6f037f1461049757600080fd5b806335c018db1161017a5780635131ab59116101495780635131ab59146103a257806352d1902d146103c257806357bec62f146103d75780635b112591146103f757600080fd5b806335c018db1461034757806336568abe1461035a5780633f4ba83a1461037a5780634f1ef2861461038f57600080fd5b806321e093b1116101b657806321e093b11461027f578063248a9ca3146102b757806329c59b5d146103145780632f2ff15d1461032757600080fd5b806301ffc9a7146101e857806310188aef1461021d5780631b8b921d1461023f5780631cff79cd1461025f575b600080fd5b3480156101f457600080fd5b506102086102033660046127c5565b6106b5565b60405190151581526020015b60405180910390f35b34801561022957600080fd5b5061023d610238366004612823565b61074e565b005b34801561024b57600080fd5b5061023d61025a366004612887565b610842565b61027261026d366004612887565b610894565b6040516102149190612948565b34801561028b57600080fd5b5060035461029f906001600160a01b031681565b6040516001600160a01b039091168152602001610214565b3480156102c357600080fd5b506103066102d236600461295b565b60009081527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052604090206001015490565b604051908152602001610214565b61023d610322366004612887565b61091d565b34801561033357600080fd5b5061023d610342366004612974565b610a42565b61023d610355366004612887565b610a8c565b34801561036657600080fd5b5061023d610375366004612974565b610c0b565b34801561038657600080fd5b5061023d610c5c565b61023d61039d3660046129cf565b610c91565b3480156103ae57600080fd5b5061023d6103bd366004612ad6565b610cb0565b3480156103ce57600080fd5b50610306610f85565b3480156103e357600080fd5b5060025461029f906001600160a01b031681565b34801561040357600080fd5b5060015461029f906001600160a01b031681565b34801561042357600080fd5b507fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff16610208565b34801561045a57600080fd5b506103067f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b981565b34801561048e57600080fd5b5061023d610fb4565b3480156104a357600080fd5b5061023d6104b2366004612b45565b610fe6565b3480156104c357600080fd5b506102086104d2366004612974565b60009182527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408084206001600160a01b0393909316845291905290205460ff1690565b34801561052857600080fd5b50610306600081565b34801561053d57600080fd5b506103067f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb81565b34801561057157600080fd5b506102726040518060400160405280600581526020017f352e302e3000000000000000000000000000000000000000000000000000000081525081565b3480156105ba57600080fd5b5061023d6105c9366004612823565b611083565b3480156105da57600080fd5b5061023d6105e9366004612ad6565b611177565b3480156105fa57600080fd5b5061023d610609366004612b97565b6112e9565b34801561061a57600080fd5b5061023d610629366004612974565b61159e565b34801561063a57600080fd5b5060005461029f906001600160a01b031681565b34801561065a57600080fd5b506103067f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b61023d610690366004612823565b6115e2565b3480156106a157600080fd5b5061023d6106b0366004612bda565b611707565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061074857507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b6000610759816117b2565b6002546001600160a01b03161561079c576040517fb337f37800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b0382166107dc576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6108067f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b9836117bc565b5050600280547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b826001600160a01b0316336001600160a01b03167f2a21062ee9199c2e205622999eeb7c3da73153674f36a0acd3f74fa6af67bde38484604051610887929190612c56565b60405180910390a3505050565b60607f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb6108c0816117b2565b60006108cd8686866118a9565b9050856001600160a01b03167f373df382b9c587826f3de13f16d67f8d99f28ee947fc0924c6ef2d6d2c7e854634878760405161090c93929190612c72565b60405180910390a295945050505050565b34600003610957576040517f7671265e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546040516000916001600160a01b03169034908381818185875af1925050503d80600081146109a4576040519150601f19603f3d011682016040523d82523d6000602084013e6109a9565b606091505b50909150508015156000036109ea576040517f79cacff100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b836001600160a01b0316336001600160a01b03167f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a43460008787604051610a349493929190612c8c565b60405180910390a350505050565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020526040902060010154610a7c816117b2565b610a8683836117bc565b50505050565b7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb610ab6816117b2565b600080856001600160a01b03163460405160006040518083038185875af1925050503d8060008114610b04576040519150601f19603f3d011682016040523d82523d6000602084013e610b09565b606091505b509150915081610b45576040517facfdb44400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f8fcaa0b50000000000000000000000000000000000000000000000000000000081526001600160a01b03871690638fcaa0b590610b8c9088908890600401612c56565b600060405180830381600087803b158015610ba657600080fd5b505af1158015610bba573d6000803e3d6000fd5b50505050856001600160a01b03167fd5d7616b1678354a0dea9d7e57e6a090bff5babe9f8d6381fdbad16e89ba311c348787604051610bfb93929190612c72565b60405180910390a2505050505050565b6001600160a01b0381163314610c4d576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610c578282611952565b505050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610c86816117b2565b610c8e611a16565b50565b610c99611aa6565b610ca282611b78565b610cac8282611b83565b5050565b610cb8611ca7565b7f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b9610ce2816117b2565b83600003610d1c576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610d268686611d28565b610d5c576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b0386811660048301526024820186905287169063095ea7b3906044016020604051808303816000875af1158015610dc4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610de89190612cb5565b610e1e576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610e2b8685856118a9565b9050610e378787611d28565b610e6d576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201526000906001600160a01b038916906370a0823190602401602060405180830381865afa158015610ecd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ef19190612cd7565b90508015610f0357610f038882611db8565b866001600160a01b0316886001600160a01b03167f29c40793bffd84cb810179f15d1ceec72bc7f0785514c668ba36645cf99b7382888888604051610f4a93929190612c72565b60405180910390a3505050610f7e60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b5050505050565b6000610f8f611f1a565b507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc90565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610fde816117b2565b610c8e611f7c565b83600003611020576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61102b338486611ff5565b846001600160a01b0316336001600160a01b03167f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a4868686866040516110749493929190612c8c565b60405180910390a35050505050565b600061108e816117b2565b6000546001600160a01b0316156110d1576040517fb337f37800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038216611111576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61113b7f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b9836117bc565b5050600080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b61117f611ca7565b7f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b96111a9816117b2565b836000036111e3576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6111f76001600160a01b0387168686612149565b6040517f8fcaa0b50000000000000000000000000000000000000000000000000000000081526001600160a01b03861690638fcaa0b59061123e9086908690600401612c56565b600060405180830381600087803b15801561125857600080fd5b505af115801561126c573d6000803e3d6000fd5b50505050846001600160a01b0316866001600160a01b03167f723fc7be2448075379e4fdf1e6bf5fead954d2668d2da05dcb44ccfec4beeda78686866040516112b793929190612c72565b60405180910390a350610f7e60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156113345750825b905060008267ffffffffffffffff1660011480156113515750303b155b90508115801561135f575080155b15611396576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84547fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000016600117855583156113f75784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff16680100000000000000001785555b6001600160a01b038816158061141457506001600160a01b038716155b1561144b576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6114536121bd565b61145b6121c5565b6114636121bd565b61146b6121d5565b6114766000876117bc565b506114a17f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a876117bc565b50600180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b038a161790556114ff7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb896117bc565b50600380547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03891617905583156115945784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b5050505050505050565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b62680060205260409020600101546115d8816117b2565b610a868383611952565b3460000361161c576040517f7671265e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546040516000916001600160a01b03169034908381818185875af1925050503d8060008114611669576040519150601f19603f3d011682016040523d82523d6000602084013e61166e565b606091505b50909150508015156000036116af576040517f79cacff100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60408051348152600060208201819052606082840181905282015290516001600160a01b0384169133917f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a49181900360800190a35050565b81600003611741576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61174c338284611ff5565b826001600160a01b0316336001600160a01b03167f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a484846040516108879291909182526001600160a01b0316602082015260606040820181905260009082015260800190565b610c8e81336121e5565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff1661189f576000848152602082815260408083206001600160a01b0387168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790556118553390565b6001600160a01b0316836001600160a01b0316857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a46001915050610748565b6000915050610748565b6060600080856001600160a01b03163486866040516118c9929190612cf0565b60006040518083038185875af1925050503d8060008114611906576040519150601f19603f3d011682016040523d82523d6000602084013e61190b565b606091505b509150915081611947576040517facfdb44400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b9150505b9392505050565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff161561189f576000848152602082815260408083206001600160a01b038716808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339287917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a46001915050610748565b611a1e612272565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001681557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a150565b306001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161480611b3f57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316611b337f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b6001600160a01b031614155b15611b76576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6000610cac816117b2565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015611bfb575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252611bf891810190612cd7565b60015b611c41576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b03831660048201526024015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8114611c9d576040517faa1d49a400000000000000000000000000000000000000000000000000000000815260048101829052602401611c38565b610c5783836122cd565b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0080547ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01611d22576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60029055565b6040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b038281166004830152600060248301819052919084169063095ea7b3906044016020604051808303816000875af1158015611d94573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061194b9190612cb5565b6003546001600160a01b0390811690831603611eda576002546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152602481018390529083169063095ea7b3906044016020604051808303816000875af1158015611e3a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e5e9190612cb5565b506002546040517f743e0c9b000000000000000000000000000000000000000000000000000000008152600481018390526001600160a01b039091169063743e0c9b90602401600060405180830381600087803b158015611ebe57600080fd5b505af1158015611ed2573d6000803e3d6000fd5b505050505050565b600054610cac906001600160a01b03848116911683612149565b60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614611b76576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611f84612323565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011781557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25833611a88565b6003546001600160a01b039081169083160361212d576120206001600160a01b03831684308461237f565b6002546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152602481018390529083169063095ea7b3906044016020604051808303816000875af115801561208c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120b09190612cb5565b506002546040517f743e0c9b000000000000000000000000000000000000000000000000000000008152600481018390526001600160a01b039091169063743e0c9b90602401600060405180830381600087803b15801561211057600080fd5b505af1158015612124573d6000803e3d6000fd5b50505050505050565b600054610c57906001600160a01b03848116918691168461237f565b6040516001600160a01b03838116602483015260448201839052610c5791859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506123b8565b611b76612434565b6121cd612434565b611b7661249b565b6121dd612434565b611b766124a3565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408083206001600160a01b038516845290915290205460ff16610cac576040517fe2517d3f0000000000000000000000000000000000000000000000000000000081526001600160a01b038216600482015260248101839052604401611c38565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff16611b76576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6122d6826124f4565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a280511561231b57610c57828261259c565b610cac612612565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff1615611b76576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040516001600160a01b038481166024830152838116604483015260648201839052610a869186918216906323b872dd90608401612176565b60006123cd6001600160a01b0384168361264a565b905080516000141580156123f25750808060200190518101906123f09190612cb5565b155b15610c57576040517f5274afe70000000000000000000000000000000000000000000000000000000081526001600160a01b0384166004820152602401611c38565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff16611b76576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611ef4612434565b6124ab612434565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055565b806001600160a01b03163b600003612543576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b0382166004820152602401611c38565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6060600080846001600160a01b0316846040516125b99190612d00565b600060405180830381855af49150503d80600081146125f4576040519150601f19603f3d011682016040523d82523d6000602084013e6125f9565b606091505b5091509150612609858383612658565b95945050505050565b3415611b76576040517fb398979f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606061194b838360006126cd565b60608261266d5761266882612783565b61194b565b815115801561268457506001600160a01b0384163b155b156126c6576040517f9996b3150000000000000000000000000000000000000000000000000000000081526001600160a01b0385166004820152602401611c38565b508061194b565b60608147101561270b576040517fcd786059000000000000000000000000000000000000000000000000000000008152306004820152602401611c38565b600080856001600160a01b031684866040516127279190612d00565b60006040518083038185875af1925050503d8060008114612764576040519150601f19603f3d011682016040523d82523d6000602084013e612769565b606091505b5091509150612779868383612658565b9695505050505050565b8051156127935780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000602082840312156127d757600080fd5b81357fffffffff000000000000000000000000000000000000000000000000000000008116811461194b57600080fd5b80356001600160a01b038116811461281e57600080fd5b919050565b60006020828403121561283557600080fd5b61194b82612807565b60008083601f84011261285057600080fd5b50813567ffffffffffffffff81111561286857600080fd5b60208301915083602082850101111561288057600080fd5b9250929050565b60008060006040848603121561289c57600080fd5b6128a584612807565b9250602084013567ffffffffffffffff8111156128c157600080fd5b6128cd8682870161283e565b9497909650939450505050565b60005b838110156128f55781810151838201526020016128dd565b50506000910152565b600081518084526129168160208601602086016128da565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152600061194b60208301846128fe565b60006020828403121561296d57600080fd5b5035919050565b6000806040838503121561298757600080fd5b8235915061299760208401612807565b90509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080604083850312156129e257600080fd5b6129eb83612807565b9150602083013567ffffffffffffffff811115612a0757600080fd5b8301601f81018513612a1857600080fd5b803567ffffffffffffffff811115612a3257612a326129a0565b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8501160116810181811067ffffffffffffffff82111715612a9e57612a9e6129a0565b604052818152828201602001871015612ab657600080fd5b816020840160208301376000602083830101528093505050509250929050565b600080600080600060808688031215612aee57600080fd5b612af786612807565b9450612b0560208701612807565b935060408601359250606086013567ffffffffffffffff811115612b2857600080fd5b612b348882890161283e565b969995985093965092949392505050565b600080600080600060808688031215612b5d57600080fd5b612b6686612807565b945060208601359350612b7b60408701612807565b9250606086013567ffffffffffffffff811115612b2857600080fd5b600080600060608486031215612bac57600080fd5b612bb584612807565b9250612bc360208501612807565b9150612bd160408501612807565b90509250925092565b600080600060608486031215612bef57600080fd5b612bf884612807565b925060208401359150612bd160408501612807565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b602081526000612c6a602083018486612c0d565b949350505050565b838152604060208201526000612609604083018486612c0d565b8481526001600160a01b0384166020820152606060408201526000612779606083018486612c0d565b600060208284031215612cc757600080fd5b8151801515811461194b57600080fd5b600060208284031215612ce957600080fd5b5051919050565b8183823760009101908152919050565b60008251612d128184602087016128da565b919091019291505056fea2646970667358221220a2cc45e19abbbfe5e651a45b4ddc5a5ada7e94e7b4482a57a5011f556e05ea7a64736f6c634300081a0033", + ABI: "[{\"type\":\"constructor\",\"inputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"ASSET_HANDLER_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"DEFAULT_ADMIN_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"PAUSER_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"TSS_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"UPGRADE_INTERFACE_VERSION\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"call\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"custody\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"deposit\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"deposit\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"depositAndCall\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"depositAndCall\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"execute\",\"inputs\":[{\"name\":\"destination\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"executeRevert\",\"inputs\":[{\"name\":\"destination\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"executeWithERC20\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"getRoleAdmin\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"grantRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"hasRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"initialize\",\"inputs\":[{\"name\":\"_tssAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_zetaToken\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_admin\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"pause\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"paused\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"proxiableUUID\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"renounceRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"callerConfirmation\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"revertWithERC20\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"revokeRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setConnector\",\"inputs\":[{\"name\":\"_zetaConnector\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setCustody\",\"inputs\":[{\"name\":\"_custody\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"supportsInterface\",\"inputs\":[{\"name\":\"interfaceId\",\"type\":\"bytes4\",\"internalType\":\"bytes4\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"tssAddress\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"unpause\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"upgradeToAndCall\",\"inputs\":[{\"name\":\"newImplementation\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"zetaConnector\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"zetaToken\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"event\",\"name\":\"Call\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"receiver\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Deposit\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"receiver\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"asset\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Executed\",\"inputs\":[{\"name\":\"destination\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ExecutedV2\",\"inputs\":[{\"name\":\"destination\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ExecutedWithERC20\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Initialized\",\"inputs\":[{\"name\":\"version\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Paused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Reverted\",\"inputs\":[{\"name\":\"destination\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RevertedWithERC20\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleAdminChanged\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"previousAdminRole\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"newAdminRole\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleGranted\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleRevoked\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Unpaused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Upgraded\",\"inputs\":[{\"name\":\"implementation\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"AccessControlBadConfirmation\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"AccessControlUnauthorizedAccount\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"neededRole\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"type\":\"error\",\"name\":\"AddressEmptyCode\",\"inputs\":[{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"AddressInsufficientBalance\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"ApprovalFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ConnectorInitialized\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"CustodyInitialized\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"DepositFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ERC1967InvalidImplementation\",\"inputs\":[{\"name\":\"implementation\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"ERC1967NonPayable\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"EnforcedPause\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ExecutionFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ExpectedPause\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"FailedInnerCall\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientERC20Amount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientETHAmount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidInitialization\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NotInitializing\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NotWhitelistedInCustody\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ReentrancyGuardReentrantCall\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"SafeERC20FailedOperation\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"UUPSUnauthorizedCallContext\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"UUPSUnsupportedProxiableUUID\",\"inputs\":[{\"name\":\"slot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"type\":\"error\",\"name\":\"ZeroAddress\",\"inputs\":[]}]", + Bin: "0x60a06040523060805234801561001457600080fd5b5061001d610022565b6100d4565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100725760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146100d15780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b608051612d526100fd60003960008181611ab101528181611ada0152611f250152612d526000f3fe6080604052600436106101e35760003560e01c80635c975abb11610102578063ae7a3a6f11610095578063dda79b7511610064578063dda79b751461062e578063e63ab1e91461064e578063f340fa0114610682578063f45346dc1461069557600080fd5b8063ae7a3a6f146105ae578063b8969bd4146105ce578063c0c53b8b146105ee578063d547741f1461060e57600080fd5b806391d14854116100d157806391d14854146104b7578063a217fddf1461051c578063a783c78914610531578063ad3cb1cc1461056557600080fd5b80635c975abb146104175780635d62c8601461044e5780638456cb59146104825780638c6f037f1461049757600080fd5b806335c018db1161017a5780635131ab59116101495780635131ab59146103a257806352d1902d146103c257806357bec62f146103d75780635b112591146103f757600080fd5b806335c018db1461034757806336568abe1461035a5780633f4ba83a1461037a5780634f1ef2861461038f57600080fd5b806321e093b1116101b657806321e093b11461027f578063248a9ca3146102b757806329c59b5d146103145780632f2ff15d1461032757600080fd5b806301ffc9a7146101e857806310188aef1461021d5780631b8b921d1461023f5780631cff79cd1461025f575b600080fd5b3480156101f457600080fd5b506102086102033660046127c5565b6106b5565b60405190151581526020015b60405180910390f35b34801561022957600080fd5b5061023d610238366004612823565b61074e565b005b34801561024b57600080fd5b5061023d61025a366004612887565b610842565b61027261026d366004612887565b610894565b6040516102149190612948565b34801561028b57600080fd5b5060035461029f906001600160a01b031681565b6040516001600160a01b039091168152602001610214565b3480156102c357600080fd5b506103066102d236600461295b565b60009081527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052604090206001015490565b604051908152602001610214565b61023d610322366004612887565b61091d565b34801561033357600080fd5b5061023d610342366004612974565b610a42565b61023d610355366004612887565b610a8c565b34801561036657600080fd5b5061023d610375366004612974565b610c0b565b34801561038657600080fd5b5061023d610c5c565b61023d61039d3660046129cf565b610c91565b3480156103ae57600080fd5b5061023d6103bd366004612ad6565b610cb0565b3480156103ce57600080fd5b50610306610f85565b3480156103e357600080fd5b5060025461029f906001600160a01b031681565b34801561040357600080fd5b5060015461029f906001600160a01b031681565b34801561042357600080fd5b507fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff16610208565b34801561045a57600080fd5b506103067f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b981565b34801561048e57600080fd5b5061023d610fb4565b3480156104a357600080fd5b5061023d6104b2366004612b45565b610fe6565b3480156104c357600080fd5b506102086104d2366004612974565b60009182527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408084206001600160a01b0393909316845291905290205460ff1690565b34801561052857600080fd5b50610306600081565b34801561053d57600080fd5b506103067f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb81565b34801561057157600080fd5b506102726040518060400160405280600581526020017f352e302e3000000000000000000000000000000000000000000000000000000081525081565b3480156105ba57600080fd5b5061023d6105c9366004612823565b611083565b3480156105da57600080fd5b5061023d6105e9366004612ad6565b611177565b3480156105fa57600080fd5b5061023d610609366004612b97565b6112e9565b34801561061a57600080fd5b5061023d610629366004612974565b61159e565b34801561063a57600080fd5b5060005461029f906001600160a01b031681565b34801561065a57600080fd5b506103067f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b61023d610690366004612823565b6115e2565b3480156106a157600080fd5b5061023d6106b0366004612bda565b611707565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061074857507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b6000610759816117b2565b6002546001600160a01b03161561079c576040517fb337f37800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b0382166107dc576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6108067f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b9836117bc565b5050600280547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b826001600160a01b0316336001600160a01b03167f2a21062ee9199c2e205622999eeb7c3da73153674f36a0acd3f74fa6af67bde38484604051610887929190612c56565b60405180910390a3505050565b60607f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb6108c0816117b2565b60006108cd8686866118a9565b9050856001600160a01b03167f373df382b9c587826f3de13f16d67f8d99f28ee947fc0924c6ef2d6d2c7e854634878760405161090c93929190612c72565b60405180910390a295945050505050565b34600003610957576040517f7671265e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546040516000916001600160a01b03169034908381818185875af1925050503d80600081146109a4576040519150601f19603f3d011682016040523d82523d6000602084013e6109a9565b606091505b50909150508015156000036109ea576040517f79cacff100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b836001600160a01b0316336001600160a01b03167f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a43460008787604051610a349493929190612c8c565b60405180910390a350505050565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020526040902060010154610a7c816117b2565b610a8683836117bc565b50505050565b7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb610ab6816117b2565b600080856001600160a01b03163460405160006040518083038185875af1925050503d8060008114610b04576040519150601f19603f3d011682016040523d82523d6000602084013e610b09565b606091505b509150915081610b45576040517facfdb44400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f8fcaa0b50000000000000000000000000000000000000000000000000000000081526001600160a01b03871690638fcaa0b590610b8c9088908890600401612c56565b600060405180830381600087803b158015610ba657600080fd5b505af1158015610bba573d6000803e3d6000fd5b50505050856001600160a01b03167fd5d7616b1678354a0dea9d7e57e6a090bff5babe9f8d6381fdbad16e89ba311c348787604051610bfb93929190612c72565b60405180910390a2505050505050565b6001600160a01b0381163314610c4d576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610c578282611952565b505050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610c86816117b2565b610c8e611a16565b50565b610c99611aa6565b610ca282611b78565b610cac8282611b83565b5050565b610cb8611ca7565b7f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b9610ce2816117b2565b83600003610d1c576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610d268686611d28565b610d5c576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b0386811660048301526024820186905287169063095ea7b3906044016020604051808303816000875af1158015610dc4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610de89190612cb5565b610e1e576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610e2b8685856118a9565b9050610e378787611d28565b610e6d576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201526000906001600160a01b038916906370a0823190602401602060405180830381865afa158015610ecd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ef19190612cd7565b90508015610f0357610f038882611db8565b866001600160a01b0316886001600160a01b03167f29c40793bffd84cb810179f15d1ceec72bc7f0785514c668ba36645cf99b7382888888604051610f4a93929190612c72565b60405180910390a3505050610f7e60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b5050505050565b6000610f8f611f1a565b507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc90565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610fde816117b2565b610c8e611f7c565b83600003611020576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61102b338486611ff5565b846001600160a01b0316336001600160a01b03167f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a4868686866040516110749493929190612c8c565b60405180910390a35050505050565b600061108e816117b2565b6000546001600160a01b0316156110d1576040517fb337f37800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038216611111576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61113b7f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b9836117bc565b5050600080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b61117f611ca7565b7f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b96111a9816117b2565b836000036111e3576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6111f76001600160a01b0387168686612149565b6040517f8fcaa0b50000000000000000000000000000000000000000000000000000000081526001600160a01b03861690638fcaa0b59061123e9086908690600401612c56565b600060405180830381600087803b15801561125857600080fd5b505af115801561126c573d6000803e3d6000fd5b50505050846001600160a01b0316866001600160a01b03167f723fc7be2448075379e4fdf1e6bf5fead954d2668d2da05dcb44ccfec4beeda78686866040516112b793929190612c72565b60405180910390a350610f7e60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156113345750825b905060008267ffffffffffffffff1660011480156113515750303b155b90508115801561135f575080155b15611396576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84547fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000016600117855583156113f75784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff16680100000000000000001785555b6001600160a01b038816158061141457506001600160a01b038716155b1561144b576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6114536121bd565b61145b6121c5565b6114636121bd565b61146b6121d5565b6114766000876117bc565b506114a17f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a876117bc565b50600180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b038a161790556114ff7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb896117bc565b50600380547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03891617905583156115945784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b5050505050505050565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b62680060205260409020600101546115d8816117b2565b610a868383611952565b3460000361161c576040517f7671265e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546040516000916001600160a01b03169034908381818185875af1925050503d8060008114611669576040519150601f19603f3d011682016040523d82523d6000602084013e61166e565b606091505b50909150508015156000036116af576040517f79cacff100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60408051348152600060208201819052606082840181905282015290516001600160a01b0384169133917f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a49181900360800190a35050565b81600003611741576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61174c338284611ff5565b826001600160a01b0316336001600160a01b03167f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a484846040516108879291909182526001600160a01b0316602082015260606040820181905260009082015260800190565b610c8e81336121e5565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff1661189f576000848152602082815260408083206001600160a01b0387168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790556118553390565b6001600160a01b0316836001600160a01b0316857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a46001915050610748565b6000915050610748565b6060600080856001600160a01b03163486866040516118c9929190612cf0565b60006040518083038185875af1925050503d8060008114611906576040519150601f19603f3d011682016040523d82523d6000602084013e61190b565b606091505b509150915081611947576040517facfdb44400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b9150505b9392505050565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff161561189f576000848152602082815260408083206001600160a01b038716808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339287917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a46001915050610748565b611a1e612272565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001681557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a150565b306001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161480611b3f57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316611b337f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b6001600160a01b031614155b15611b76576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6000610cac816117b2565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015611bfb575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252611bf891810190612cd7565b60015b611c41576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b03831660048201526024015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8114611c9d576040517faa1d49a400000000000000000000000000000000000000000000000000000000815260048101829052602401611c38565b610c5783836122cd565b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0080547ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01611d22576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60029055565b6040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b038281166004830152600060248301819052919084169063095ea7b3906044016020604051808303816000875af1158015611d94573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061194b9190612cb5565b6003546001600160a01b0390811690831603611eda576002546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152602481018390529083169063095ea7b3906044016020604051808303816000875af1158015611e3a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e5e9190612cb5565b506002546040517f743e0c9b000000000000000000000000000000000000000000000000000000008152600481018390526001600160a01b039091169063743e0c9b90602401600060405180830381600087803b158015611ebe57600080fd5b505af1158015611ed2573d6000803e3d6000fd5b505050505050565b600054610cac906001600160a01b03848116911683612149565b60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614611b76576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611f84612323565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011781557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25833611a88565b6003546001600160a01b039081169083160361212d576120206001600160a01b03831684308461237f565b6002546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152602481018390529083169063095ea7b3906044016020604051808303816000875af115801561208c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120b09190612cb5565b506002546040517f743e0c9b000000000000000000000000000000000000000000000000000000008152600481018390526001600160a01b039091169063743e0c9b90602401600060405180830381600087803b15801561211057600080fd5b505af1158015612124573d6000803e3d6000fd5b50505050505050565b600054610c57906001600160a01b03848116918691168461237f565b6040516001600160a01b03838116602483015260448201839052610c5791859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506123b8565b611b76612434565b6121cd612434565b611b7661249b565b6121dd612434565b611b766124a3565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408083206001600160a01b038516845290915290205460ff16610cac576040517fe2517d3f0000000000000000000000000000000000000000000000000000000081526001600160a01b038216600482015260248101839052604401611c38565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff16611b76576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6122d6826124f4565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a280511561231b57610c57828261259c565b610cac612612565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff1615611b76576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040516001600160a01b038481166024830152838116604483015260648201839052610a869186918216906323b872dd90608401612176565b60006123cd6001600160a01b0384168361264a565b905080516000141580156123f25750808060200190518101906123f09190612cb5565b155b15610c57576040517f5274afe70000000000000000000000000000000000000000000000000000000081526001600160a01b0384166004820152602401611c38565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff16611b76576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611ef4612434565b6124ab612434565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055565b806001600160a01b03163b600003612543576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b0382166004820152602401611c38565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6060600080846001600160a01b0316846040516125b99190612d00565b600060405180830381855af49150503d80600081146125f4576040519150601f19603f3d011682016040523d82523d6000602084013e6125f9565b606091505b5091509150612609858383612658565b95945050505050565b3415611b76576040517fb398979f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606061194b838360006126cd565b60608261266d5761266882612783565b61194b565b815115801561268457506001600160a01b0384163b155b156126c6576040517f9996b3150000000000000000000000000000000000000000000000000000000081526001600160a01b0385166004820152602401611c38565b508061194b565b60608147101561270b576040517fcd786059000000000000000000000000000000000000000000000000000000008152306004820152602401611c38565b600080856001600160a01b031684866040516127279190612d00565b60006040518083038185875af1925050503d8060008114612764576040519150601f19603f3d011682016040523d82523d6000602084013e612769565b606091505b5091509150612779868383612658565b9695505050505050565b8051156127935780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000602082840312156127d757600080fd5b81357fffffffff000000000000000000000000000000000000000000000000000000008116811461194b57600080fd5b80356001600160a01b038116811461281e57600080fd5b919050565b60006020828403121561283557600080fd5b61194b82612807565b60008083601f84011261285057600080fd5b50813567ffffffffffffffff81111561286857600080fd5b60208301915083602082850101111561288057600080fd5b9250929050565b60008060006040848603121561289c57600080fd5b6128a584612807565b9250602084013567ffffffffffffffff8111156128c157600080fd5b6128cd8682870161283e565b9497909650939450505050565b60005b838110156128f55781810151838201526020016128dd565b50506000910152565b600081518084526129168160208601602086016128da565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152600061194b60208301846128fe565b60006020828403121561296d57600080fd5b5035919050565b6000806040838503121561298757600080fd5b8235915061299760208401612807565b90509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080604083850312156129e257600080fd5b6129eb83612807565b9150602083013567ffffffffffffffff811115612a0757600080fd5b8301601f81018513612a1857600080fd5b803567ffffffffffffffff811115612a3257612a326129a0565b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8501160116810181811067ffffffffffffffff82111715612a9e57612a9e6129a0565b604052818152828201602001871015612ab657600080fd5b816020840160208301376000602083830101528093505050509250929050565b600080600080600060808688031215612aee57600080fd5b612af786612807565b9450612b0560208701612807565b935060408601359250606086013567ffffffffffffffff811115612b2857600080fd5b612b348882890161283e565b969995985093965092949392505050565b600080600080600060808688031215612b5d57600080fd5b612b6686612807565b945060208601359350612b7b60408701612807565b9250606086013567ffffffffffffffff811115612b2857600080fd5b600080600060608486031215612bac57600080fd5b612bb584612807565b9250612bc360208501612807565b9150612bd160408501612807565b90509250925092565b600080600060608486031215612bef57600080fd5b612bf884612807565b925060208401359150612bd160408501612807565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b602081526000612c6a602083018486612c0d565b949350505050565b838152604060208201526000612609604083018486612c0d565b8481526001600160a01b0384166020820152606060408201526000612779606083018486612c0d565b600060208284031215612cc757600080fd5b8151801515811461194b57600080fd5b600060208284031215612ce957600080fd5b5051919050565b8183823760009101908152919050565b60008251612d128184602087016128da565b919091019291505056fea2646970667358221220e8ffc6341fffbc216a05dd7d399fd25443efd956129cf4964951b693540aaeef64736f6c634300081a0033", } // GatewayEVMUpgradeTestABI is the input ABI used to generate the binding from. diff --git a/v2/pkg/gatewayevmzevm.t.sol/gatewayevmzevmtest.go b/v2/pkg/gatewayevmzevm.t.sol/gatewayevmzevmtest.go index 60a70c6f..96fadda5 100644 --- a/v2/pkg/gatewayevmzevm.t.sol/gatewayevmzevmtest.go +++ b/v2/pkg/gatewayevmzevm.t.sol/gatewayevmzevmtest.go @@ -49,8 +49,8 @@ type StdInvariantFuzzSelector struct { // GatewayEVMZEVMTestMetaData contains all meta data concerning the GatewayEVMZEVMTest contract. var GatewayEVMZEVMTestMetaData = &bind.MetaData{ - ABI: "[{\"type\":\"function\",\"name\":\"IS_TEST\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeArtifacts\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedArtifacts_\",\"type\":\"string[]\",\"internalType\":\"string[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeContracts\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedContracts_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeSelectors\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedSelectors_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzSelector[]\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"selectors\",\"type\":\"bytes4[]\",\"internalType\":\"bytes4[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeSenders\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedSenders_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"failed\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"setUp\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"targetArtifactSelectors\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedArtifactSelectors_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzArtifactSelector[]\",\"components\":[{\"name\":\"artifact\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"selectors\",\"type\":\"bytes4[]\",\"internalType\":\"bytes4[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetArtifacts\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedArtifacts_\",\"type\":\"string[]\",\"internalType\":\"string[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetContracts\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedContracts_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetInterfaces\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedInterfaces_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzInterface[]\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"artifacts\",\"type\":\"string[]\",\"internalType\":\"string[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetSelectors\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedSelectors_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzSelector[]\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"selectors\",\"type\":\"bytes4[]\",\"internalType\":\"bytes4[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetSenders\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedSenders_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"testCallReceiverEVMFromSenderZEVM\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testCallReceiverEVMFromZEVM\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawAndCallReceiverEVMFromSenderZEVM\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawAndCallReceiverEVMFromZEVM\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"event\",\"name\":\"Call\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"receiver\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Call\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"chainId\",\"type\":\"uint256\",\"indexed\":true,\"internalType\":\"uint256\"},{\"name\":\"receiver\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"message\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Deposit\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"receiver\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"asset\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Executed\",\"inputs\":[{\"name\":\"destination\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ExecutedWithERC20\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedERC20\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"token\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"destination\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedNoParams\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedNonPayable\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"strs\",\"type\":\"string[]\",\"indexed\":false,\"internalType\":\"string[]\"},{\"name\":\"nums\",\"type\":\"uint256[]\",\"indexed\":false,\"internalType\":\"uint256[]\"},{\"name\":\"flag\",\"type\":\"bool\",\"indexed\":false,\"internalType\":\"bool\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedPayable\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"str\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"num\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"flag\",\"type\":\"bool\",\"indexed\":false,\"internalType\":\"bool\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedRevert\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Reverted\",\"inputs\":[{\"name\":\"destination\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RevertedWithERC20\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Withdrawal\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"chainId\",\"type\":\"uint256\",\"indexed\":true,\"internalType\":\"uint256\"},{\"name\":\"receiver\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"zrc20\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"gasfee\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"protocolFlatFee\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"message\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log\",\"inputs\":[{\"name\":\"\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_address\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_array\",\"inputs\":[{\"name\":\"val\",\"type\":\"uint256[]\",\"indexed\":false,\"internalType\":\"uint256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_array\",\"inputs\":[{\"name\":\"val\",\"type\":\"int256[]\",\"indexed\":false,\"internalType\":\"int256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_array\",\"inputs\":[{\"name\":\"val\",\"type\":\"address[]\",\"indexed\":false,\"internalType\":\"address[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_bytes\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_bytes32\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_int\",\"inputs\":[{\"name\":\"\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_address\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_array\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"uint256[]\",\"indexed\":false,\"internalType\":\"uint256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_array\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"int256[]\",\"indexed\":false,\"internalType\":\"int256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_array\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"address[]\",\"indexed\":false,\"internalType\":\"address[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_bytes\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_bytes32\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_decimal_int\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"},{\"name\":\"decimals\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_decimal_uint\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"decimals\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_int\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_string\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_uint\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_string\",\"inputs\":[{\"name\":\"\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_uint\",\"inputs\":[{\"name\":\"\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"logs\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"ApprovalFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"CallerIsNotFungibleModule\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ConnectorInitialized\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"CustodyInitialized\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"DepositFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ExecutionFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"FailedZetaSent\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"GasFeeTransferFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientERC20Amount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientETHAmount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientZRC20Amount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientZetaAmount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidTarget\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OnlyWZETAOrFungible\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"WithdrawalFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZRC20BurnFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZRC20DepositFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZRC20TransferFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZeroAddress\",\"inputs\":[]}]", - Bin: "0x6080604052600c8054600160ff199182168117909255601f80549091169091179055348015602c57600080fd5b50620104f0806200003e6000396000f3fe608060405234801561001057600080fd5b506004361061011b5760003560e01c806385226c81116100b2578063b5508aa911610081578063d7a525fc11610066578063d7a525fc146101ec578063e20c9f71146101f4578063fa7626d4146101fc57600080fd5b8063b5508aa9146101cc578063ba414fa6146101d457600080fd5b806385226c8114610192578063916a17c6146101a75780639683c695146101bc578063b0464fdc146101c457600080fd5b80633f7286f4116100ee5780633f7286f414610165578063524744131461016d57806366d9a9a0146101755780636ff15ccc1461018a57600080fd5b80630a9254e4146101205780631ed7831c1461012a5780632ade3880146101485780633e5e3c231461015d575b600080fd5b610128610209565b005b61013261118d565b60405161013f9190617944565b60405180910390f35b6101506111ef565b60405161013f91906179e0565b610132611331565b610132611391565b6101286113f1565b61017d611c4e565b60405161013f9190617b46565b610128611dd0565b61019a6125e8565b60405161013f9190617be4565b6101af6126b8565b60405161013f9190617c5b565b6101286127b3565b6101af612d2f565b61019a612e2a565b6101dc612efa565b604051901515815260200161013f565b610128612fce565b6101326136b0565b601f546101dc9060ff1681565b602680547fffffffffffffffffffffffff00000000000000000000000000000000000000009081163017909155602780548216611234179055602880548216615678179055602e805490911661432117905560405161026790617829565b60408082526004908201527f746573740000000000000000000000000000000000000000000000000000000060608201526080602082018190526003908201527f54544b000000000000000000000000000000000000000000000000000000000060a082015260c001604051809103906000f0801580156102ec573d6000803e3d6000fd5b50602380547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039290921691909117905560405161033190617829565b604080825260049082018190527f7a6574610000000000000000000000000000000000000000000000000000000060608301526080602083018190528201527f5a4554410000000000000000000000000000000000000000000000000000000060a082015260c001604051809103906000f0801580156103b5573d6000803e3d6000fd5b50602480547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039283169081178255604080518082018252600e81527f4761746577617945564d2e736f6c0000000000000000000000000000000000006020820152602854602654925190861694810194909452604484019290925290921660648201526104a6919060840160408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fc0c53b8b00000000000000000000000000000000000000000000000000000000179052613710565b601f80547fffffffffffffffffffffff0000000000000000000000000000000000000000ff166101006001600160a01b0393841681029190911791829055602080549190920483167fffffffffffffffffffffffff0000000000000000000000000000000000000000909116811790915560285460265460405192939182169291169061053290617837565b6001600160a01b03938416815291831660208301529091166040820152606001604051809103906000f08015801561056e573d6000803e3d6000fd5b50602180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392831617905560205460245460285460265460405193851694928316939183169216906105c990617845565b6001600160a01b039485168152928416602084015290831660408301529091166060820152608001604051809103906000f08015801561060d573d6000803e3d6000fd5b50602280547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039283161790556028546040517fc88a5e6d00000000000000000000000000000000000000000000000000000000815291166004820152670de0b6b3a76400006024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c88a5e6d90604401600060405180830381600087803b1580156106b957600080fd5b505af11580156106cd573d6000803e3d6000fd5b50506026546040517f06447d560000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506306447d569150602401600060405180830381600087803b15801561074357600080fd5b505af1158015610757573d6000803e3d6000fd5b50506020546021546040517fae7a3a6f0000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201529116925063ae7a3a6f9150602401600060405180830381600087803b1580156107bd57600080fd5b505af11580156107d1573d6000803e3d6000fd5b50506020546022546040517f10188aef0000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152911692506310188aef9150602401600060405180830381600087803b15801561083757600080fd5b505af115801561084b573d6000803e3d6000fd5b505050507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b03166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156108ad57600080fd5b505af11580156108c1573d6000803e3d6000fd5b50506023546026546040517f40c10f190000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620f42406024820152911692506340c10f199150604401600060405180830381600087803b15801561093057600080fd5b505af1158015610944573d6000803e3d6000fd5b50506023546021546040517fa9059cbb0000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201526207a12060248201529116925063a9059cbb91506044016020604051808303816000875af11580156109b8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109dc9190617cf2565b506040516109e990617853565b604051809103906000f080158015610a05573d6000803e3d6000fd5b50602580547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03928316179055604080518082018252600f81527f476174657761795a45564d2e736f6c0000000000000000000000000000000000602082015260248054602e54935190851691810191909152919092166044820152610aee919060640160408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f485cc95500000000000000000000000000000000000000000000000000000000179052613710565b602980546001600160a01b03929092167fffffffffffffffffffffffff00000000000000000000000000000000000000009283168117909155602a80549092168117909155604051610b3f90617861565b6001600160a01b039091168152602001604051809103906000f080158015610b6b573d6000803e3d6000fd5b50602b80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03929092169190911790556040517f06447d5600000000000000000000000000000000000000000000000000000000815273735b14bb79463307aacbed86daf3322b1e6226ab6004820181905290737109709ecfa91a80626ff3989d68f67f5b1dd12d906306447d5690602401600060405180830381600087803b158015610c2057600080fd5b505af1158015610c34573d6000803e3d6000fd5b505050506000806000604051610c499061786f565b6001600160a01b03938416815291831660208301529091166040820152606001604051809103906000f080158015610c85573d6000803e3d6000fd5b50602c80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03928316908117909155602a54604051601293600193600093849391921690610cdb9061787d565b610cea96959493929190617d14565b604051809103906000f080158015610d06573d6000803e3d6000fd5b50602d80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03928316908117909155602c546040517fee2815ba0000000000000000000000000000000000000000000000000000000081526001600482015260248101929092529091169063ee2815ba90604401600060405180830381600087803b158015610d9d57600080fd5b505af1158015610db1573d6000803e3d6000fd5b5050602c546040517fa7cb050700000000000000000000000000000000000000000000000000000000815260016004820181905260248201526001600160a01b03909116925063a7cb05079150604401600060405180830381600087803b158015610e1b57600080fd5b505af1158015610e2f573d6000803e3d6000fd5b5050602d54602e546040517f47e7ef240000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620f42406024820152911692506347e7ef2491506044016020604051808303816000875af1158015610ea3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ec79190617cf2565b50602d54602b546040517f47e7ef240000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620f424060248201529116906347e7ef24906044016020604051808303816000875af1158015610f38573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f5c9190617cf2565b507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b03166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610fbb57600080fd5b505af1158015610fcf573d6000803e3d6000fd5b5050602e546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b15801561104557600080fd5b505af1158015611059573d6000803e3d6000fd5b5050602d54602a546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620f424060248201529116925063095ea7b391506044016020604051808303816000875af11580156110cd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110f19190617cf2565b506028546040517fc88a5e6d0000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152670de0b6b3a76400006024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c88a5e6d90604401600060405180830381600087803b15801561117257600080fd5b505af1158015611186573d6000803e3d6000fd5b5050505050565b606060168054806020026020016040519081016040528092919081815260200182805480156111e557602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116111c7575b5050505050905090565b6060601e805480602002602001604051908101604052809291908181526020016000905b8282101561132857600084815260208082206040805180820182526002870290920180546001600160a01b03168352600181018054835181870281018701909452808452939591948681019491929084015b8282101561131157838290600052602060002001805461128490617e09565b80601f01602080910402602001604051908101604052809291908181526020018280546112b090617e09565b80156112fd5780601f106112d2576101008083540402835291602001916112fd565b820191906000526020600020905b8154815290600101906020018083116112e057829003601f168201915b505050505081526020019060010190611265565b505050508152505081526020019060010190611213565b50505050905090565b606060188054806020026020016040519081016040528092919081815260200182805480156111e5576020028201919060005260206000209081546001600160a01b031681526001909101906020018083116111c7575050505050905090565b606060178054806020026020016040519081016040528092919081815260200182805480156111e5576020028201919060005260206000209081546001600160a01b031681526001909101906020018083116111c7575050505050905090565b604080518082018252600681527f48656c6c6f2100000000000000000000000000000000000000000000000000006020820152602d54602b5492517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b0393841660048201529192602a92600192670de0b6b3a7640000926000929116906370a0823190602401602060405180830381865afa15801561149d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114c19190617e56565b6040519091506000907fe04d4f9700000000000000000000000000000000000000000000000000000000906114fe90889088908890602401617e6f565b60408051601f19818403018152918152602080830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909516949094179093526025549051919350600092611597926001600160a01b03909216910160609190911b6bffffffffffffffffffffffff1916815260140190565b60408051601f1981840301815290829052602d546115c892620f4240916001600160a01b0316908690602401617e99565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f7993c1e000000000000000000000000000000000000000000000000000000000179052602a5490517ff30c7ba3000000000000000000000000000000000000000000000000000000008152919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f30c7ba391611685916001600160a01b0391909116906000908690600401617ed8565b600060405180830381600087803b15801561169f57600080fd5b505af11580156116b3573d6000803e3d6000fd5b5050602e546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b15801561172957600080fd5b505af115801561173d573d6000803e3d6000fd5b5050602b5460255460405160609190911b6bffffffffffffffffffffffff191660208201526001600160a01b039091169250630abd8905915060340160408051601f1981840301815290829052602d547fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1683526117d792620f4240916001600160a01b0316908d908d908d90600401617f00565b600060405180830381600087803b1580156117f157600080fd5b505af1158015611805573d6000803e3d6000fd5b50506020546040517fc88a5e6d0000000000000000000000000000000000000000000000000000000081526001600160a01b03909116600482015260248101879052737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c88a5e6d9150604401600060405180830381600087803b15801561188257600080fd5b505af1158015611896573d6000803e3d6000fd5b50506025546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b15801561192857600080fd5b505af115801561193c573d6000803e3d6000fd5b50506020546040517f1f1ff1f5fb41346850b2f5c04e6c767e2f1c8a525c5c0c5cdb60cdf3ca5f62fa935061198592506001600160a01b039091169087908b908b908b90617f55565b60405180910390a16020546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b158015611a1b57600080fd5b505af1158015611a2f573d6000803e3d6000fd5b50506025546040516001600160a01b0390911692507fcaf938de11c367272220bfd1d2baa99ca46665e7bc4d85f00adb51b90fe1fa9f9150611a749087908690617f96565b60405180910390a26028546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015611aee57600080fd5b505af1158015611b02573d6000803e3d6000fd5b50506020546025546040517f1cff79cd0000000000000000000000000000000000000000000000000000000081526001600160a01b039283169450631cff79cd93508892611b569216908790600401617faf565b60006040518083038185885af1158015611b74573d6000803e3d6000fd5b50505050506040513d6000823e601f3d908101601f19168201604052611b9d91908101906180b9565b50602d54602b546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260009291909116906370a0823190602401602060405180830381865afa158015611c08573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c2c9190617e56565b9050611c4481611c3f620f42408761811d565b61372f565b5050505050505050565b6060601b805480602002602001604051908101604052809291908181526020016000905b828210156113285783829060005260206000209060020201604051806040016040529081600082018054611ca590617e09565b80601f0160208091040260200160405190810160405280929190818152602001828054611cd190617e09565b8015611d1e5780601f10611cf357610100808354040283529160200191611d1e565b820191906000526020600020905b815481529060010190602001808311611d0157829003601f168201915b5050505050815260200160018201805480602002602001604051908101604052809291908181526020018280548015611db857602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019060040190602082600301049283019260010382029150808411611d655790505b50505050508152505081526020019060010190611c72565b604080518082018252600681527f48656c6c6f21000000000000000000000000000000000000000000000000000060208201529051602a90600190670de0b6b3a7640000906000907fe04d4f970000000000000000000000000000000000000000000000000000000090611e4c90879087908790602401617e6f565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009490941693909317909252602a5491517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b0390921660848301529150737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b158015611f3b57600080fd5b505af1158015611f4f573d6000803e3d6000fd5b5050602e5460255460405160609190911b6bffffffffffffffffffffffff19166020820152600093506001600160a01b0390911691507fde19dbe881cc0aeeb6e73ce19ac7b5ca695e6be8a076e3eb42292005a7fec1b59060340160408051601f19818403018152828252602d547f4d8943bb000000000000000000000000000000000000000000000000000000008452915190926001600160a01b0390921691620f4240916000918491634d8943bb916004808201926020929091908290030181865afa158015612025573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120499190617e56565b8860405161205c96959493929190618130565b60405180910390a3602e546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156120d657600080fd5b505af11580156120ea573d6000803e3d6000fd5b5050602a5460255460405160609190911b6bffffffffffffffffffffffff191660208201526001600160a01b039091169250637993c1e0915060340160408051601f1981840301815290829052602d547fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16835261218092620f4240916001600160a01b0316908790600401618183565b600060405180830381600087803b15801561219a57600080fd5b505af11580156121ae573d6000803e3d6000fd5b5050602d54602e546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260009450911691506370a0823190602401602060405180830381865afa15801561221a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061223e9190617e56565b905061224b81600061372f565b6020546040517fc88a5e6d0000000000000000000000000000000000000000000000000000000081526001600160a01b03909116600482015260248101849052737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c88a5e6d90604401600060405180830381600087803b1580156122c457600080fd5b505af11580156122d8573d6000803e3d6000fd5b50506025546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b15801561236a57600080fd5b505af115801561237e573d6000803e3d6000fd5b50506020546040517f1f1ff1f5fb41346850b2f5c04e6c767e2f1c8a525c5c0c5cdb60cdf3ca5f62fa93506123c792506001600160a01b039091169086908a908a908a90617f55565b60405180910390a16020546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b15801561245d57600080fd5b505af1158015612471573d6000803e3d6000fd5b50506025546040516001600160a01b0390911692507fcaf938de11c367272220bfd1d2baa99ca46665e7bc4d85f00adb51b90fe1fa9f91506124b69086908690617f96565b60405180910390a26028546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561253057600080fd5b505af1158015612544573d6000803e3d6000fd5b50506020546025546040517f1cff79cd0000000000000000000000000000000000000000000000000000000081526001600160a01b039283169450631cff79cd935087926125989216908790600401617faf565b60006040518083038185885af11580156125b6573d6000803e3d6000fd5b50505050506040513d6000823e601f3d908101601f191682016040526125df91908101906180b9565b50505050505050565b6060601a805480602002602001604051908101604052809291908181526020016000905b8282101561132857838290600052602060002001805461262b90617e09565b80601f016020809104026020016040519081016040528092919081815260200182805461265790617e09565b80156126a45780601f10612679576101008083540402835291602001916126a4565b820191906000526020600020905b81548152906001019060200180831161268757829003601f168201915b50505050508152602001906001019061260c565b6060601d805480602002602001604051908101604052809291908181526020016000905b828210156113285760008481526020908190206040805180820182526002860290920180546001600160a01b0316835260018101805483518187028101870190945280845293949193858301939283018282801561279b57602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190600401906020826003010492830192600103820291508084116127485790505b505050505081525050815260200190600101906126dc565b604080518082018252600681527f48656c6c6f21000000000000000000000000000000000000000000000000000060208201529051602a90600190670de0b6b3a76400009082906000907fe04d4f97000000000000000000000000000000000000000000000000000000009061283190889088908690602401617e6f565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009490941693909317909252602e5491517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b0390921660048301529150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561290457600080fd5b505af1158015612918573d6000803e3d6000fd5b5050602a546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b1580156129aa57600080fd5b505af11580156129be573d6000803e3d6000fd5b5050602e5460255460405160609190911b6bffffffffffffffffffffffff191660208201528593506001600160a01b0390911691507f5322ffbbf9261ff1f8138247942d2b03b28717141ef0a0dd080fc4be9c4e78d39060340160408051601f1981840301815290829052612a349186906181bd565b60405180910390a3602a5460255460405160609190911b6bffffffffffffffffffffffff191660208201526001600160a01b0390911690635d40e1789060340160405160208183030381529060405284846040518463ffffffff1660e01b8152600401612aa3939291906181e2565b600060405180830381600087803b158015612abd57600080fd5b505af1158015612ad1573d6000803e3d6000fd5b50506020546040517fc88a5e6d0000000000000000000000000000000000000000000000000000000081526001600160a01b03909116600482015260248101869052737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c88a5e6d9150604401600060405180830381600087803b158015612b4e57600080fd5b505af1158015612b62573d6000803e3d6000fd5b50506020546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b158015612bf457600080fd5b505af1158015612c08573d6000803e3d6000fd5b50506025546040516001600160a01b0390911692507fcaf938de11c367272220bfd1d2baa99ca46665e7bc4d85f00adb51b90fe1fa9f9150612c4d9086908590617f96565b60405180910390a26028546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015612cc757600080fd5b505af1158015612cdb573d6000803e3d6000fd5b50506020546025546040517f1cff79cd0000000000000000000000000000000000000000000000000000000081526001600160a01b039283169450631cff79cd935087926125989216908690600401617faf565b6060601c805480602002602001604051908101604052809291908181526020016000905b828210156113285760008481526020908190206040805180820182526002860290920180546001600160a01b03168352600181018054835181870281018701909452808452939491938583019392830182828015612e1257602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019060040190602082600301049283019260010382029150808411612dbf5790505b50505050508152505081526020019060010190612d53565b60606019805480602002602001604051908101604052809291908181526020016000905b82821015611328578382906000526020600020018054612e6d90617e09565b80601f0160208091040260200160405190810160405280929190818152602001828054612e9990617e09565b8015612ee65780601f10612ebb57610100808354040283529160200191612ee6565b820191906000526020600020905b815481529060010190602001808311612ec957829003601f168201915b505050505081526020019060010190612e4e565b60085460009060ff1615612f12575060085460ff1690565b6040517f667f9d70000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d600482018190527f6661696c65640000000000000000000000000000000000000000000000000000602483015260009163667f9d7090604401602060405180830381865afa158015612fa3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612fc79190617e56565b1415905090565b604080518082018252600681527f48656c6c6f21000000000000000000000000000000000000000000000000000060208201529051602a90600190670de0b6b3a76400009082906000907fe04d4f97000000000000000000000000000000000000000000000000000000009061304c90889088908690602401617e6f565b60408051601f19818403018152918152602080830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009095169490941790935260255490519193506000926130e5926001600160a01b03909216910160609190911b6bffffffffffffffffffffffff1916815260140190565b60408051601f198184030181529082905261310691859085906024016181e2565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f5d40e17800000000000000000000000000000000000000000000000000000000179052602a5490517ff30c7ba3000000000000000000000000000000000000000000000000000000008152919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f30c7ba3916131c3916001600160a01b0391909116906000908690600401617ed8565b600060405180830381600087803b1580156131dd57600080fd5b505af11580156131f1573d6000803e3d6000fd5b5050602e546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b15801561326757600080fd5b505af115801561327b573d6000803e3d6000fd5b5050602b5460255460405160609190911b6bffffffffffffffffffffffff191660208201526001600160a01b03909116925063865b36f69150603401604051602081830303815290604052858a8a8a6040518663ffffffff1660e01b81526004016132ea95949392919061820d565b600060405180830381600087803b15801561330457600080fd5b505af1158015613318573d6000803e3d6000fd5b50506020546040517fc88a5e6d0000000000000000000000000000000000000000000000000000000081526001600160a01b03909116600482015260248101879052737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c88a5e6d9150604401600060405180830381600087803b15801561339557600080fd5b505af11580156133a9573d6000803e3d6000fd5b50506025546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b15801561343b57600080fd5b505af115801561344f573d6000803e3d6000fd5b50506020546040517f1f1ff1f5fb41346850b2f5c04e6c767e2f1c8a525c5c0c5cdb60cdf3ca5f62fa935061349892506001600160a01b039091169087908b908b908b90617f55565b60405180910390a16020546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b15801561352e57600080fd5b505af1158015613542573d6000803e3d6000fd5b50506025546040516001600160a01b0390911692507fcaf938de11c367272220bfd1d2baa99ca46665e7bc4d85f00adb51b90fe1fa9f91506135879087908690617f96565b60405180910390a26028546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561360157600080fd5b505af1158015613615573d6000803e3d6000fd5b50506020546025546040517f1cff79cd0000000000000000000000000000000000000000000000000000000081526001600160a01b039283169450631cff79cd935088926136699216908790600401617faf565b60006040518083038185885af1158015613687573d6000803e3d6000fd5b50505050506040513d6000823e601f3d908101601f19168201604052611c4491908101906180b9565b606060158054806020026020016040519081016040528092919081815260200182805480156111e5576020028201919060005260206000209081546001600160a01b031681526001909101906020018083116111c7575050505050905090565b600061371a61788b565b6137258484836137b6565b9150505b92915050565b6040517f98296c540000000000000000000000000000000000000000000000000000000081526004810183905260248101829052737109709ecfa91a80626ff3989d68f67f5b1dd12d906398296c549060440160006040518083038186803b15801561379a57600080fd5b505afa1580156137ae573d6000803e3d6000fd5b505050505050565b6000806137c38584613831565b90506138266040518060400160405280601d81526020017f4552433139363750726f78792e736f6c3a4552433139363750726f78790000008152508286604051602001613811929190617faf565b6040516020818303038152906040528561383d565b9150505b9392505050565b600061382a838361386b565b60c081015151600090156138615761385a84848460c00151613886565b905061382a565b61385a8484613a2c565b60006138778383613b17565b61382a8383602001518461383d565b600080613891613b27565b9050600061389f8683613bfa565b905060006138b682606001518360200151856140a0565b905060006138c6838389896142b2565b905060006138d38261512f565b602081015181519192509060030b15613946578982604001516040516020016138fd929190618252565b60408051601f19818403018152908290527f08c379a000000000000000000000000000000000000000000000000000000000825261393d916004016182d3565b60405180910390fd5b60006139896040518060400160405280601581526020017f4465706c6f79656420746f20616464726573733a2000000000000000000000008152508360016152fe565b6040517fc6ce059d000000000000000000000000000000000000000000000000000000008152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c6ce059d906139dc9084906004016182d3565b602060405180830381865afa1580156139f9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a1d91906182e6565b9b9a5050505050505050505050565b6040517f8d1cc9250000000000000000000000000000000000000000000000000000000081526000908190737109709ecfa91a80626ff3989d68f67f5b1dd12d90638d1cc92590613a819087906004016182d3565b600060405180830381865afa158015613a9e573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052613ac691908101906180b9565b90506000613af48285604051602001613ae092919061830f565b6040516020818303038152906040526154fe565b90506001600160a01b0381166137255784846040516020016138fd92919061833e565b613b2382826000615511565b5050565b604080518082018252600381527f6f75740000000000000000000000000000000000000000000000000000000000602082015290517fd145736c000000000000000000000000000000000000000000000000000000008152606091737109709ecfa91a80626ff3989d68f67f5b1dd12d91829063d145736c90613bae9084906004016183e9565b600060405180830381865afa158015613bcb573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052613bf39190810190618430565b9250505090565b613c2c6040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b6000737109709ecfa91a80626ff3989d68f67f5b1dd12d9050613c776040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b613c8085615614565b60208201526000613c90866159f9565b90506000836001600160a01b031663d930a0e66040518163ffffffff1660e01b8152600401600060405180830381865afa158015613cd2573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052613cfa9190810190618430565b86838560200151604051602001613d149493929190618479565b60408051601f19818403018152908290527f60f9bb1100000000000000000000000000000000000000000000000000000000825291506000906001600160a01b038616906360f9bb1190613d6c9085906004016182d3565b600060405180830381865afa158015613d89573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052613db19190810190618430565b6040517fdb4235f60000000000000000000000000000000000000000000000000000000081529091506001600160a01b0386169063db4235f690613df990849060040161857d565b602060405180830381865afa158015613e16573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613e3a9190617cf2565b613e4f57816040516020016138fd91906185cf565b6040517f49c4fac80000000000000000000000000000000000000000000000000000000081526001600160a01b038616906349c4fac890613e94908490600401618661565b600060405180830381865afa158015613eb1573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052613ed99190810190618430565b84526040517fdb4235f60000000000000000000000000000000000000000000000000000000081526001600160a01b0386169063db4235f690613f209084906004016186b3565b602060405180830381865afa158015613f3d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613f619190617cf2565b15613ff6576040517f49c4fac80000000000000000000000000000000000000000000000000000000081526001600160a01b038616906349c4fac890613fab9084906004016186b3565b600060405180830381865afa158015613fc8573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052613ff09190810190618430565b60408501525b846001600160a01b03166349c4fac882866000015160405160200161401b9190618705565b6040516020818303038152906040526040518363ffffffff1660e01b81526004016140479291906181bd565b600060405180830381865afa158015614064573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261408c9190810190618430565b606085015250608083015250949350505050565b60408051600480825260a0820190925260609160009190816020015b60608152602001906001900390816140bc5790505090506040518060400160405280600481526020017f67726570000000000000000000000000000000000000000000000000000000008152508160008151811061411c5761411c618771565b60200260200101819052506040518060400160405280600381526020017f2d726c00000000000000000000000000000000000000000000000000000000008152508160018151811061417057614170618771565b60200260200101819052508460405160200161418c91906187a0565b604051602081830303815290604052816002815181106141ae576141ae618771565b6020026020010181905250826040516020016141ca919061880c565b604051602081830303815290604052816003815181106141ec576141ec618771565b602002602001018190525060006142028261512f565b602080820151604080518082018252600581527f2e6a736f6e00000000000000000000000000000000000000000000000000000081850190815282518084018452600080825290860152825180840190935290518252928101929092529192506142939060408051808201825260008082526020918201528151808301909252845182528085019082015290615c7c565b6142a857856040516020016138fd919061884d565b9695505050505050565b60a0810151604080518082018252600080825260209182015281518083019092528251808352928101910152606090737109709ecfa91a80626ff3989d68f67f5b1dd12d9015614302565b511590565b614476578260200151156143be576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605860248201527f54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f742060448201527f62652075736564207768656e207468652060736b6970566572696679536f757260648201527f6365436f646560206f7074696f6e206973206074727565600000000000000000608482015260a40161393d565b8260c0015115614476576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605360248201527f54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f742060448201527f62652075736564207768656e207468652060736b69704c6963656e736554797060648201527f6560206f7074696f6e2069732060747275656000000000000000000000000000608482015260a40161393d565b6040805160ff8082526120008201909252600091816020015b606081526020019060019003908161448f57905050905060006040518060400160405280600381526020017f6e707800000000000000000000000000000000000000000000000000000000008152508282806144ea906188de565b935060ff16815181106144ff576144ff618771565b60200260200101819052506040518060400160405280600d81526020017f302e302e312d616c7068612e370000000000000000000000000000000000000081525060405160200161455091906188fd565b60405160208183030381529060405282828061456b906188de565b935060ff168151811061458057614580618771565b60200260200101819052506040518060400160405280600681526020017f6465706c6f7900000000000000000000000000000000000000000000000000008152508282806145cd906188de565b935060ff16815181106145e2576145e2618771565b60200260200101819052506040518060400160405280600e81526020017f2d2d636f6e74726163744e616d6500000000000000000000000000000000000081525082828061462f906188de565b935060ff168151811061464457614644618771565b60200260200101819052508760200151828280614660906188de565b935060ff168151811061467557614675618771565b60200260200101819052506040518060400160405280600e81526020017f2d2d636f6e7472616374506174680000000000000000000000000000000000008152508282806146c2906188de565b935060ff16815181106146d7576146d7618771565b6020908102919091010152875182826146ef816188de565b935060ff168151811061470457614704618771565b60200260200101819052506040518060400160405280600981526020017f2d2d636861696e49640000000000000000000000000000000000000000000000815250828280614751906188de565b935060ff168151811061476657614766618771565b602002602001018190525061477a46615cdd565b8282614785816188de565b935060ff168151811061479a5761479a618771565b60200260200101819052506040518060400160405280600f81526020017f2d2d6275696c64496e666f46696c6500000000000000000000000000000000008152508282806147e7906188de565b935060ff16815181106147fc576147fc618771565b602002602001018190525086828280614814906188de565b935060ff168151811061482957614829618771565b60209081029190910101528551156149505760408051808201909152601581527f2d2d636f6e7374727563746f7242797465636f646500000000000000000000006020820152828261487a816188de565b935060ff168151811061488f5761488f618771565b60209081029190910101526040517f71aad10d0000000000000000000000000000000000000000000000000000000081526001600160a01b038416906371aad10d906148df9089906004016182d3565b600060405180830381865afa1580156148fc573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526149249190810190618430565b828261492f816188de565b935060ff168151811061494457614944618771565b60200260200101819052505b846020015115614a205760408051808201909152601281527f2d2d766572696679536f75726365436f6465000000000000000000000000000060208201528282614999816188de565b935060ff16815181106149ae576149ae618771565b60200260200101819052506040518060400160405280600581526020017f66616c73650000000000000000000000000000000000000000000000000000008152508282806149fb906188de565b935060ff1681518110614a1057614a10618771565b6020026020010181905250614be7565b614a586142fd8660a0015160408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b614aeb5760408051808201909152600d81527f2d2d6c6963656e7365547970650000000000000000000000000000000000000060208201528282614a9b816188de565b935060ff1681518110614ab057614ab0618771565b60200260200101819052508460a00151604051602001614ad091906187a0565b6040516020818303038152906040528282806149fb906188de565b8460c00151158015614b2e575060408089015181518083018352600080825260209182015282518084019093528151835290810190820152614b2c90511590565b155b15614be75760408051808201909152600d81527f2d2d6c6963656e7365547970650000000000000000000000000000000000000060208201528282614b72816188de565b935060ff1681518110614b8757614b87618771565b6020026020010181905250614b9b88615d7d565b604051602001614bab91906187a0565b604051602081830303815290604052828280614bc6906188de565b935060ff1681518110614bdb57614bdb618771565b60200260200101819052505b60408086015181518083018352600080825260209182015282518084019093528151835290810190820152614c1b90511590565b614cb05760408051808201909152600b81527f2d2d72656c61796572496400000000000000000000000000000000000000000060208201528282614c5e816188de565b935060ff1681518110614c7357614c73618771565b60200260200101819052508460400151828280614c8f906188de565b935060ff1681518110614ca457614ca4618771565b60200260200101819052505b606085015115614dd15760408051808201909152600681527f2d2d73616c74000000000000000000000000000000000000000000000000000060208201528282614cf9816188de565b935060ff1681518110614d0e57614d0e618771565b602090810291909101015260608501516040517fb11a19e800000000000000000000000000000000000000000000000000000000815260048101919091526001600160a01b0384169063b11a19e890602401600060405180830381865afa158015614d7d573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052614da59190810190618430565b8282614db0816188de565b935060ff1681518110614dc557614dc5618771565b60200260200101819052505b60e08501515115614e785760408051808201909152600a81527f2d2d6761734c696d69740000000000000000000000000000000000000000000060208201528282614e1b816188de565b935060ff1681518110614e3057614e30618771565b6020026020010181905250614e4c8560e0015160000151615cdd565b8282614e57816188de565b935060ff1681518110614e6c57614e6c618771565b60200260200101819052505b60e08501516020015115614f225760408051808201909152600a81527f2d2d67617350726963650000000000000000000000000000000000000000000060208201528282614ec5816188de565b935060ff1681518110614eda57614eda618771565b6020026020010181905250614ef68560e0015160200151615cdd565b8282614f01816188de565b935060ff1681518110614f1657614f16618771565b60200260200101819052505b60e08501516040015115614fcc5760408051808201909152600e81527f2d2d6d617846656550657247617300000000000000000000000000000000000060208201528282614f6f816188de565b935060ff1681518110614f8457614f84618771565b6020026020010181905250614fa08560e0015160400151615cdd565b8282614fab816188de565b935060ff1681518110614fc057614fc0618771565b60200260200101819052505b60e085015160600151156150765760408051808201909152601681527f2d2d6d61785072696f726974794665655065724761730000000000000000000060208201528282615019816188de565b935060ff168151811061502e5761502e618771565b602002602001018190525061504a8560e0015160600151615cdd565b8282615055816188de565b935060ff168151811061506a5761506a618771565b60200260200101819052505b60008160ff1667ffffffffffffffff81111561509457615094617fd1565b6040519080825280602002602001820160405280156150c757816020015b60608152602001906001900390816150b25790505b50905060005b8260ff168160ff16101561512057838160ff16815181106150f0576150f0618771565b6020026020010151828260ff168151811061510d5761510d618771565b60209081029190910101526001016150cd565b5093505050505b949350505050565b6151566040518060600160405280600060030b815260200160608152602001606081525090565b60408051808201825260048082527f6261736800000000000000000000000000000000000000000000000000000000602083015291517fd145736c000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d92600091849163d145736c916151dc91869101618968565b600060405180830381865afa1580156151f9573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526152219190810190618430565b9050600061522f868361686c565b90506000846001600160a01b031663f45c1ce7836040518263ffffffff1660e01b815260040161525f9190617be4565b6000604051808303816000875af115801561527e573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526152a691908101906189af565b805190915060030b158015906152bf5750602081015151155b80156152ce5750604081015151155b156142a857816000815181106152e6576152e6618771565b60200260200101516040516020016138fd9190618a65565b606060006153338560408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b60408051808201825260008082526020918201528151808301909252865182528087019082015290915061536a9082905b906169c1565b156154c75760006153e7826153e1846153db6153ad8a60408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6040805180820182526000808252602091820152815180830190925282518252918201519181019190915290565b906169e8565b90616a4a565b604080518082018252600181527f0a000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015290915061544b9082906169c1565b156154b557604080518082018252600181527f0a00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526154b2905b8290616acf565b90505b6154be81616af5565b9250505061382a565b82156154e05784846040516020016138fd929190618c51565b505060408051602081019091526000815261382a565b509392505050565b6000808251602084016000f09392505050565b8160a001511561552057505050565b600061552d848484616b5e565b9050600061553a8261512f565b602081015181519192509060030b1580156155d65750604080518082018252600781527f5355434345535300000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526155d690604080518082018252600080825260209182015281518083019092528451825280850190820152615364565b156155e357505050505050565b604082015151156156035781604001516040516020016138fd9190618cf8565b806040516020016138fd9190618d56565b606060006156498360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600481527f2e736f6c00000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201529091506156ae905b8290615c7c565b1561571d57604080518082018252600481527f2e736f6c000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261382a906157189083906170f9565b616af5565b604080518082018252600181527f3a000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261577f905b8290617183565b60010361584c57604080518082018252600181527f3a00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526157e5906154ab565b50604080518082018252600181527f3a000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261382a90615718905b8390616acf565b604080518082018252600581527f2e6a736f6e000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526158ab906156a7565b156159e257604080518082018252600181527f2f0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082018190528451808601909552925184528301529061591390839061721d565b905060008160018351615926919061811d565b8151811061593657615936618771565b602002602001015190506159d96157186159ac6040518060400160405280600581526020017f2e6a736f6e00000000000000000000000000000000000000000000000000000081525060408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600080825260209182015281518083019092528551825280860190820152906170f9565b95945050505050565b826040516020016138fd9190618dc1565b50919050565b60606000615a2e8360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600481527f2e736f6c0000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152909150615a90906156a7565b15615a9e5761382a81616af5565b604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152615afd90615778565b600103615b6757604080518082018252600181527f3a000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261382a9061571890615845565b604080518082018252600581527f2e6a736f6e00000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152615bc6906156a7565b156159e257604080518082018252600181527f2f00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820181905284518086019095529251845283015290615c2e90839061721d565b9050600181511115615c6a578060028251615c49919061811d565b81518110615c5957615c59618771565b602002602001015192505050919050565b50826040516020016138fd9190618dc1565b805182516000911115615c9157506000613729565b81518351602085015160009291615ca791618e9f565b615cb1919061811d565b905082602001518103615cc8576001915050613729565b82516020840151819020912014905092915050565b60606000615cea836172c2565b600101905060008167ffffffffffffffff811115615d0a57615d0a617fd1565b6040519080825280601f01601f191660200182016040528015615d34576020820181803683370190505b5090508181016020015b600019017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a8504945084615d3e57509392505050565b604081810151815180830183526000808252602091820181905283518085018552835181529282018383015283518085018552600a81527f554e4c4943454e5345440000000000000000000000000000000000000000000081840190815285518087018752838152840192909252845180860190955251845290830152606091615e09905b82906173a4565b15615e4957505060408051808201909152600481527f4e6f6e65000000000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600981527f556e6c6963656e7365000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152615ea890615e02565b15615ee857505060408051808201909152600981527f556e6c6963656e736500000000000000000000000000000000000000000000006020820152919050565b604080518082018252600381527f4d4954000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152615f4790615e02565b15615f8757505060408051808201909152600381527f4d495400000000000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f47504c2d322e302d6f6e6c79000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152615fe690615e02565b8061604b5750604080518082018252601081527f47504c2d322e302d6f722d6c61746572000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261604b90615e02565b1561608b57505060408051808201909152600981527f474e552047504c763200000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f47504c2d332e302d6f6e6c790000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526160ea90615e02565b8061614f5750604080518082018252601081527f47504c2d332e302d6f722d6c61746572000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261614f90615e02565b1561618f57505060408051808201909152600981527f474e552047504c763300000000000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4c47504c2d322e312d6f6e6c7900000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526161ee90615e02565b806162535750604080518082018252601181527f4c47504c2d322e312d6f722d6c617465720000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261625390615e02565b1561629357505060408051808201909152600c81527f474e55204c47504c76322e3100000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4c47504c2d332e302d6f6e6c7900000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526162f290615e02565b806163575750604080518082018252601181527f4c47504c2d332e302d6f722d6c617465720000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261635790615e02565b1561639757505060408051808201909152600a81527f474e55204c47504c7633000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f4253442d322d436c617573650000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526163f690615e02565b1561643657505060408051808201909152600c81527f4253442d322d436c6175736500000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f4253442d332d436c6175736500000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261649590615e02565b156164d557505060408051808201909152600c81527f4253442d332d436c6175736500000000000000000000000000000000000000006020820152919050565b604080518082018252600781527f4d504c2d322e30000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261653490615e02565b1561657457505060408051808201909152600781527f4d504c2d322e30000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600781527f4f534c2d332e3000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526165d390615e02565b1561661357505060408051808201909152600781527f4f534c2d332e30000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600a81527f4170616368652d322e30000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261667290615e02565b156166b257505060408051808201909152600a81527f4170616368652d322e30000000000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4147504c2d332e302d6f6e6c79000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261671190615e02565b806167765750604080518082018252601181527f4147504c2d332e302d6f722d6c617465720000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261677690615e02565b156167b657505060408051808201909152600a81527f474e55204147504c7633000000000000000000000000000000000000000000006020820152919050565b604080518082018252600881527f4255534c2d312e310000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261681590615e02565b1561685557505060408051808201909152600781527f42534c20312e31000000000000000000000000000000000000000000000000006020820152919050565b604080840151845191516138fd9290602001618eb2565b60608060005b84518110156168f7578185828151811061688e5761688e618771565b60200260200101516040516020016168a792919061830f565b6040516020818303038152906040529150600185516168c6919061811d565b81146168ef57816040516020016168dd919061901b565b60405160208183030381529060405291505b600101616872565b5060408051600380825260808201909252600091816020015b6060815260200190600190039081616910579050509050838160008151811061693b5761693b618771565b60200260200101819052506040518060400160405280600281526020017f2d630000000000000000000000000000000000000000000000000000000000008152508160018151811061698f5761698f618771565b602002602001018190525081816002815181106169ae576169ae618771565b6020908102919091010152949350505050565b60208083015183518351928401516000936169df92918491906173b8565b14159392505050565b60408051808201909152600080825260208201526000616a1a84600001518560200151856000015186602001516174c9565b9050836020015181616a2c919061811d565b84518590616a3b90839061811d565b90525060208401525090919050565b6040805180820190915260008082526020820152815183511015616a6f575081613729565b6020808301519084015160019114616a965750815160208481015190840151829020919020145b8015616ac757825184518590616aad90839061811d565b9052508251602085018051616ac3908390618e9f565b9052505b509192915050565b6040805180820190915260008082526020820152616aee8383836175e9565b5092915050565b60606000826000015167ffffffffffffffff811115616b1657616b16617fd1565b6040519080825280601f01601f191660200182016040528015616b40576020820181803683370190505b5090506000602082019050616aee8185602001518660000151617694565b60606000616b6a613b27565b6040805160ff808252612000820190925291925060009190816020015b6060815260200190600190039081616b8757905050905060006040518060400160405280600381526020017f6e70780000000000000000000000000000000000000000000000000000000000815250828280616be2906188de565b935060ff1681518110616bf757616bf7618771565b60200260200101819052506040518060400160405280600781526020017f5e312e33322e3300000000000000000000000000000000000000000000000000815250604051602001616c48919061905c565b604051602081830303815290604052828280616c63906188de565b935060ff1681518110616c7857616c78618771565b60200260200101819052506040518060400160405280600881526020017f76616c6964617465000000000000000000000000000000000000000000000000815250828280616cc5906188de565b935060ff1681518110616cda57616cda618771565b602002602001018190525082604051602001616cf6919061880c565b604051602081830303815290604052828280616d11906188de565b935060ff1681518110616d2657616d26618771565b60200260200101819052506040518060400160405280600a81526020017f2d2d636f6e747261637400000000000000000000000000000000000000000000815250828280616d73906188de565b935060ff1681518110616d8857616d88618771565b6020026020010181905250616d9d878461770e565b8282616da8816188de565b935060ff1681518110616dbd57616dbd618771565b602090810291909101015285515115616e695760408051808201909152600b81527f2d2d7265666572656e636500000000000000000000000000000000000000000060208201528282616e0f816188de565b935060ff1681518110616e2457616e24618771565b6020026020010181905250616e3d86600001518461770e565b8282616e48816188de565b935060ff1681518110616e5d57616e5d618771565b60200260200101819052505b856080015115616ed75760408051808201909152601881527f2d2d756e73616665536b697053746f72616765436865636b000000000000000060208201528282616eb2816188de565b935060ff1681518110616ec757616ec7618771565b6020026020010181905250616f3d565b8415616f3d5760408051808201909152601281527f2d2d726571756972655265666572656e6365000000000000000000000000000060208201528282616f1c816188de565b935060ff1681518110616f3157616f31618771565b60200260200101819052505b60408601515115616fd95760408051808201909152600d81527f2d2d756e73616665416c6c6f770000000000000000000000000000000000000060208201528282616f87816188de565b935060ff1681518110616f9c57616f9c618771565b60200260200101819052508560400151828280616fb8906188de565b935060ff1681518110616fcd57616fcd618771565b60200260200101819052505b8560600151156170435760408051808201909152601481527f2d2d756e73616665416c6c6f7752656e616d657300000000000000000000000060208201528282617022816188de565b935060ff168151811061703757617037618771565b60200260200101819052505b60008160ff1667ffffffffffffffff81111561706157617061617fd1565b60405190808252806020026020018201604052801561709457816020015b606081526020019060019003908161707f5790505b50905060005b8260ff168160ff1610156170ed57838160ff16815181106170bd576170bd618771565b6020026020010151828260ff16815181106170da576170da618771565b602090810291909101015260010161709a565b50979650505050505050565b604080518082019091526000808252602082015281518351101561711e575081613729565b8151835160208501516000929161713491618e9f565b61713e919061811d565b6020840151909150600190821461715f575082516020840151819020908220145b801561717a5783518551869061717690839061811d565b9052505b50929392505050565b60008082600001516171a785600001518660200151866000015187602001516174c9565b6171b19190618e9f565b90505b835160208501516171c59190618e9f565b8111616aee57816171d5816190a1565b925050826000015161720c8560200151836171f0919061811d565b86516171fc919061811d565b83866000015187602001516174c9565b6172169190618e9f565b90506171b4565b6060600061722b8484617183565b617236906001618e9f565b67ffffffffffffffff81111561724e5761724e617fd1565b60405190808252806020026020018201604052801561728157816020015b606081526020019060019003908161726c5790505b50905060005b81518110156154f65761729d6157188686616acf565b8282815181106172af576172af618771565b6020908102919091010152600101617287565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000831061730b577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310617337576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc10000831061735557662386f26fc10000830492506010015b6305f5e100831061736d576305f5e100830492506008015b612710831061738157612710830492506004015b60648310617393576064830492506002015b600a83106137295760010192915050565b60006173b0838361774e565b159392505050565b6000808584116174bf576020841161746b57600084156174035760016173df86602061811d565b6173ea9060086190bb565b6173f59060026191b9565b6173ff919061811d565b1990505b83518116856174128989618e9f565b61741c919061811d565b805190935082165b8181146174565787841161743e5787945050505050615127565b83617448816191c5565b945050828451169050617424565b6174608785618e9f565b945050505050615127565b838320617478858861811d565b6174829087618e9f565b91505b8582106174bd578482208082036174aa576174a08684618e9f565b9350505050615127565b6174b560018461811d565b925050617485565b505b5092949350505050565b600083818685116175d4576020851161758357600085156175155760016174f187602061811d565b6174fc9060086190bb565b6175079060026191b9565b617511919061811d565b1990505b845181166000876175268b8b618e9f565b617530919061811d565b855190915083165b8281146175755781861061755d576175508b8b618e9f565b9650505050505050615127565b85617567816190a1565b965050838651169050617538565b859650505050505050615127565b508383206000905b617595868961811d565b82116175d2578583208082036175b15783945050505050615127565b6175bc600185618e9f565b93505081806175ca906190a1565b92505061758b565b505b6175de8787618e9f565b979650505050505050565b6040805180820190915260008082526020820152600061761b85600001518660200151866000015187602001516174c9565b602080870180519186019190915251909150617637908261811d565b83528451602086015161764a9190618e9f565b8103617659576000855261768b565b835183516176679190618e9f565b8551869061767690839061811d565b90525083516176859082618e9f565b60208601525b50909392505050565b602081106176cc57815183526176ab602084618e9f565b92506176b8602083618e9f565b91506176c560208261811d565b9050617694565b60001981156176fb5760016176e283602061811d565b6176ee906101006191b9565b6176f8919061811d565b90505b9151835183169219169190911790915250565b6060600061771c8484613bfa565b8051602080830151604051939450617736939091016191dc565b60405160208183030381529060405291505092915050565b8151815160009190811115617761575081515b6020808501519084015160005b8381101561781a57825182518082146177ea5760001960208710156177c95760018461779b89602061811d565b6177a59190618e9f565b6177b09060086190bb565b6177bb9060026191b9565b6177c5919061811d565b1990505b81811683821681810391146177e75797506137299650505050505050565b50505b6177f5602086618e9f565b9450617802602085618e9f565b935050506020816178139190618e9f565b905061776e565b50845186516142a89190619234565b610c9f806200925583390190565b61140b8062009ef483390190565b61155a806200b2ff83390190565b610d5e806200c85983390190565b61080c806200d5b783390190565b610b3f806200ddc383390190565b611bb9806200e90283390190565b6040518060e001604052806060815260200160608152602001606081526020016000151581526020016000151581526020016000151581526020016178ce6178d3565b905290565b604051806101000160405280600015158152602001600015158152602001606081526020016000801916815260200160608152602001606081526020016000151581526020016178ce6040518060800160405280600081526020016000815260200160008152602001600081525090565b602080825282518282018190526000918401906040840190835b818110156179855783516001600160a01b031683526020938401939092019160010161795e565b509095945050505050565b60005b838110156179ab578181015183820152602001617993565b50506000910152565b600081518084526179cc816020860160208601617990565b601f01601f19169290920160200192915050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015617adc577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452815180516001600160a01b03168652602090810151604082880181905281519088018190529101906060600582901b88018101919088019060005b81811015617ac2577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa08a8503018352617aac8486516179b4565b6020958601959094509290920191600101617a72565b509197505050602094850194929092019150600101617a08565b50929695505050505050565b600081518084526020840193506020830160005b82811015617b3c5781517fffffffff0000000000000000000000000000000000000000000000000000000016865260209586019590910190600101617afc565b5093949350505050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015617adc577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08786030184528151805160408752617bb260408801826179b4565b9050602082015191508681036020880152617bcd8183617ae8565b965050506020938401939190910190600101617b6e565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015617adc577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452617c468583516179b4565b94506020938401939190910190600101617c0c565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015617adc577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc087860301845281516001600160a01b0381511686526020810151905060406020870152617cdc6040870182617ae8565b9550506020938401939190910190600101617c83565b600060208284031215617d0457600080fd5b8151801515811461382a57600080fd5b610100815260056101008201527f544f4b454e000000000000000000000000000000000000000000000000000000610120820152610140602082015260036101408201527f544b4e000000000000000000000000000000000000000000000000000000000061016082015260006101808201905060ff8816604083015286606083015260038610617dce577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b8560808301528460a0830152617def60c08301856001600160a01b03169052565b6001600160a01b03831660e0830152979650505050505050565b600181811c90821680617e1d57607f821691505b6020821081036159f3577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060208284031215617e6857600080fd5b5051919050565b606081526000617e8260608301866179b4565b602083019490945250901515604090910152919050565b608081526000617eac60808301876179b4565b62ffffff861660208401526001600160a01b038516604084015282810360608401526175de81856179b4565b6001600160a01b03841681528260208201526060604082015260006159d960608301846179b4565b60c081526000617f1360c08301896179b4565b8760208401526001600160a01b03871660408401528281036060840152617f3a81876179b4565b6080840195909552505090151560a090910152949350505050565b6001600160a01b038616815284602082015260a060408201526000617f7d60a08301866179b4565b6060830194909452509015156080909101529392505050565b82815260406020820152600061512760408301846179b4565b6001600160a01b038316815260406020820152600061512760408301846179b4565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040516060810167ffffffffffffffff8111828210171561802357618023617fd1565b60405290565b60008067ffffffffffffffff84111561804457618044617fd1565b50604051601f19601f85018116603f0116810181811067ffffffffffffffff8211171561807357618073617fd1565b60405283815290508082840185101561808b57600080fd5b6154f6846020830185617990565b600082601f8301126180aa57600080fd5b61382a83835160208501618029565b6000602082840312156180cb57600080fd5b815167ffffffffffffffff8111156180e257600080fd5b61372584828501618099565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b81810381811115613729576137296180ee565b60c08152600061814360c08301896179b4565b6001600160a01b038816602084015286604084015285606084015284608084015282810360a084015261817681856179b4565b9998505050505050505050565b60808152600061819660808301876179b4565b8560208401526001600160a01b038516604084015282810360608401526175de81856179b4565b6040815260006181d060408301856179b4565b828103602084015261382681856179b4565b6060815260006181f560608301866179b4565b84602084015282810360408401526142a881856179b4565b60a08152600061822060a08301886179b4565b866020840152828103604084015261823881876179b4565b606084019590955250509015156080909101529392505050565b7f4661696c656420746f206465706c6f7920636f6e74726163742000000000000081526000835161828a81601a850160208801617990565b7f3a20000000000000000000000000000000000000000000000000000000000000601a9184019182015283516182c781601c840160208801617990565b01601c01949350505050565b60208152600061382a60208301846179b4565b6000602082840312156182f857600080fd5b81516001600160a01b038116811461382a57600080fd5b60008351618321818460208801617990565b835190830190618335818360208801617990565b01949350505050565b7f4661696c656420746f206465706c6f7920636f6e74726163742000000000000081526000835161837681601a850160208801617990565b7f207573696e6720636f6e7374727563746f722064617461202200000000000000601a9184019182015283516183b3816033840160208801617990565b7f220000000000000000000000000000000000000000000000000000000000000060339290910191820152603401949350505050565b60408152600b60408201527f464f554e4452595f4f5554000000000000000000000000000000000000000000606082015260806020820152600061382a60808301846179b4565b60006020828403121561844257600080fd5b815167ffffffffffffffff81111561845957600080fd5b8201601f8101841361846a57600080fd5b61372584825160208401618029565b6000855161848b818460208a01617990565b7f2f0000000000000000000000000000000000000000000000000000000000000090830190815285516184c5816001840160208a01617990565b7f2f00000000000000000000000000000000000000000000000000000000000000600192909101918201528451618503816002840160208901617990565b6001818301019150507f2f0000000000000000000000000000000000000000000000000000000000000060018201528351618545816002840160208801617990565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600292909101918201526007019695505050505050565b60408152600061859060408301846179b4565b8281036020840152600481527f2e6173740000000000000000000000000000000000000000000000000000000060208201526040810191505092915050565b7f436f756c64206e6f742066696e642041535420696e206172746966616374200081526000825161860781601f850160208701617990565b7f2e205365742060617374203d20747275656020696e20666f756e6472792e746f601f9390910192830152507f6d6c000000000000000000000000000000000000000000000000000000000000603f820152604101919050565b60408152600061867460408301846179b4565b8281036020840152601181527f2e6173742e6162736f6c7574655061746800000000000000000000000000000060208201526040810191505092915050565b6040815260006186c660408301846179b4565b8281036020840152600c81527f2e6173742e6c6963656e7365000000000000000000000000000000000000000060208201526040810191505092915050565b7f2e6d657461646174612e736f75726365732e5b2700000000000000000000000081526000825161873d816014850160208701617990565b7f275d2e6b656363616b32353600000000000000000000000000000000000000006014939091019283015250602001919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f22000000000000000000000000000000000000000000000000000000000000008152600082516187d8816001850160208701617990565b7f22000000000000000000000000000000000000000000000000000000000000006001939091019283015250600201919050565b6000825161881e818460208701617990565b7f2f6275696c642d696e666f000000000000000000000000000000000000000000920191825250600b01919050565b7f436f756c64206e6f742066696e64206275696c642d696e666f2066696c65207781527f697468206d61746368696e6720736f7572636520636f6465206861736820666f60208201527f7220636f6e7472616374200000000000000000000000000000000000000000006040820152600082516188d181604b850160208701617990565b91909101604b0192915050565b600060ff821660ff81036188f4576188f46180ee565b60010192915050565b7f406f70656e7a657070656c696e2f646566656e6465722d6465706c6f792d636c81527f69656e742d636c6940000000000000000000000000000000000000000000000060208201526000825161895b816029850160208701617990565b9190910160290192915050565b60408152601660408201527f4f50454e5a455050454c494e5f424153485f5041544800000000000000000000606082015260806020820152600061382a60808301846179b4565b6000602082840312156189c157600080fd5b815167ffffffffffffffff8111156189d857600080fd5b8201606081850312156189ea57600080fd5b6189f2618000565b81518060030b8114618a0357600080fd5b8152602082015167ffffffffffffffff811115618a1f57600080fd5b618a2b86828501618099565b602083015250604082015167ffffffffffffffff811115618a4b57600080fd5b618a5786828501618099565b604083015250949350505050565b7f4661696c656420746f2072756e206261736820636f6d6d616e6420776974682081527f2200000000000000000000000000000000000000000000000000000000000000602082015260008251618ac3816021850160208701617990565b7f222e20496620796f7520617265207573696e672057696e646f77732c2073657460219390910192830152507f20746865204f50454e5a455050454c494e5f424153485f5041544820656e766960418201527f726f6e6d656e74207661726961626c6520746f207468652066756c6c7920717560618201527f616c69666965642070617468206f66207468652062617368206578656375746160818201527f626c652e20466f72206578616d706c652c20696620796f75206172652075736960a18201527f6e672047697420666f722057696e646f77732c206164642074686520666f6c6c60c18201527f6f77696e67206c696e6520696e20746865202e656e762066696c65206f66207960e18201527f6f75722070726f6a65637420287573696e6720666f727761726420736c6173686101018201527f6573293a0a4f50454e5a455050454c494e5f424153485f504154483d22433a2f6101218201527f50726f6772616d2046696c65732f4769742f62696e2f6261736822000000000061014182015261015c01919050565b7f4661696c656420746f2066696e64206c696e652077697468207072656669782081527f2700000000000000000000000000000000000000000000000000000000000000602082015260008351618caf816021850160208801617990565b7f2720696e206f75747075743a20000000000000000000000000000000000000006021918401918201528351618cec81602e840160208801617990565b01602e01949350505050565b7f4661696c656420746f2072756e2075706772616465207361666574792076616c81527f69646174696f6e3a20000000000000000000000000000000000000000000000060208201526000825161895b816029850160208701617990565b7f55706772616465207361666574792076616c69646174696f6e206661696c656481527f3a0a000000000000000000000000000000000000000000000000000000000000602082015260008251618db4816022850160208701617990565b9190910160220192915050565b7f436f6e7472616374206e616d6520000000000000000000000000000000000000815260008251618df981600e850160208701617990565b7f206d75737420626520696e2074686520666f726d6174204d79436f6e74726163600e9390910192830152507f742e736f6c3a4d79436f6e7472616374206f72204d79436f6e74726163742e73602e8201527f6f6c206f72206f75742f4d79436f6e74726163742e736f6c2f4d79436f6e7472604e8201527f6163742e6a736f6e000000000000000000000000000000000000000000000000606e820152607601919050565b80820180821115613729576137296180ee565b7f53504458206c6963656e7365206964656e746966696572200000000000000000815260008351618eea816018850160208801617990565b7f20696e20000000000000000000000000000000000000000000000000000000006018918401918201528351618f2781601c840160208801617990565b7f20646f6573206e6f74206c6f6f6b206c696b65206120737570706f7274656420601c92909101918201527f6c6963656e736520666f7220626c6f636b206578706c6f726572207665726966603c8201527f69636174696f6e2e205573652074686520606c6963656e73655479706560206f605c8201527f7074696f6e20746f20737065636966792061206c6963656e736520747970652c607c8201527f206f7220736574207468652060736b69704c6963656e73655479706560206f70609c8201527f74696f6e20746f2060747275656020746f20736b69702e00000000000000000060bc82015260d301949350505050565b6000825161902d818460208701617990565b7f2000000000000000000000000000000000000000000000000000000000000000920191825250600101919050565b7f406f70656e7a657070656c696e2f75706772616465732d636f7265400000000081526000825161909481601c850160208701617990565b91909101601c0192915050565b600060001982036190b4576190b46180ee565b5060010190565b8082028115828204841417613729576137296180ee565b6001815b600184111561910d578085048111156190f1576190f16180ee565b60018416156190ff57908102905b60019390931c9280026190d6565b935093915050565b60008261912457506001613729565b8161913157506000613729565b816001811461914757600281146191515761916d565b6001915050613729565b60ff841115619162576191626180ee565b50506001821b613729565b5060208310610133831016604e8410600b8410161715619190575081810a613729565b61919d60001984846190d2565b80600019048211156191b1576191b16180ee565b029392505050565b600061382a8383619115565b6000816191d4576191d46180ee565b506000190190565b600083516191ee818460208801617990565b7f3a000000000000000000000000000000000000000000000000000000000000009083019081528351619228816001840160208801617990565b01600101949350505050565b8181036000831280158383131683831282161715616aee57616aee6180ee56fe608060405234801561001057600080fd5b50604051610c9f380380610c9f83398101604081905261002f9161010d565b8181600361003d83826101ff565b50600461004a82826101ff565b50505050506102bd565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261007b57600080fd5b81516001600160401b0381111561009457610094610054565b604051601f8201601f19908116603f011681016001600160401b03811182821017156100c2576100c2610054565b6040528181528382016020018510156100da57600080fd5b60005b828110156100f9576020818601810151838301820152016100dd565b506000918101602001919091529392505050565b6000806040838503121561012057600080fd5b82516001600160401b0381111561013657600080fd5b6101428582860161006a565b602085015190935090506001600160401b0381111561016057600080fd5b61016c8582860161006a565b9150509250929050565b600181811c9082168061018a57607f821691505b6020821081036101aa57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156101fa57806000526020600020601f840160051c810160208510156101d75750805b601f840160051c820191505b818110156101f757600081556001016101e3565b50505b505050565b81516001600160401b0381111561021857610218610054565b61022c816102268454610176565b846101b0565b6020601f82116001811461026057600083156102485750848201515b600019600385901b1c1916600184901b1784556101f7565b600084815260208120601f198516915b828110156102905787850151825560209485019460019092019101610270565b50848210156102ae5786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b6109d3806102cc6000396000f3fe608060405234801561001057600080fd5b50600436106100be5760003560e01c806340c10f191161007657806395d89b411161005b57806395d89b4114610183578063a9059cbb1461018b578063dd62ed3e1461019e57600080fd5b806340c10f191461013857806370a082311461014d57600080fd5b806318160ddd116100a757806318160ddd1461010457806323b872dd14610116578063313ce5671461012957600080fd5b806306fdde03146100c3578063095ea7b3146100e1575b600080fd5b6100cb6101e4565b6040516100d891906107bf565b60405180910390f35b6100f46100ef366004610854565b610276565b60405190151581526020016100d8565b6002545b6040519081526020016100d8565b6100f461012436600461087e565b610290565b604051601281526020016100d8565b61014b610146366004610854565b6102b4565b005b61010861015b3660046108bb565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6100cb6102c2565b6100f4610199366004610854565b6102d1565b6101086101ac3660046108dd565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6060600380546101f390610910565b80601f016020809104026020016040519081016040528092919081815260200182805461021f90610910565b801561026c5780601f106102415761010080835404028352916020019161026c565b820191906000526020600020905b81548152906001019060200180831161024f57829003601f168201915b5050505050905090565b6000336102848185856102df565b60019150505b92915050565b60003361029e8582856102f1565b6102a98585856103c5565b506001949350505050565b6102be8282610470565b5050565b6060600480546101f390610910565b6000336102848185856103c5565b6102ec83838360016104cc565b505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146103bf57818110156103b0576040517ffb8f41b200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416600482015260248101829052604481018390526064015b60405180910390fd5b6103bf848484840360006104cc565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8316610415576040517f96c6fd1e000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff8216610465576040517fec442f05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b6102ec838383610614565b73ffffffffffffffffffffffffffffffffffffffff82166104c0576040517fec442f05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b6102be60008383610614565b73ffffffffffffffffffffffffffffffffffffffff841661051c576040517fe602df05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff831661056c576040517f94280d62000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260016020908152604080832093871683529290522082905580156103bf578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161060691815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff831661064c5780600260008282546106419190610963565b909155506106fe9050565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260208190526040902054818110156106d2576040517fe450d38c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8516600482015260248101829052604481018390526064016103a7565b73ffffffffffffffffffffffffffffffffffffffff841660009081526020819052604090209082900390555b73ffffffffffffffffffffffffffffffffffffffff821661072757600280548290039055610753565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090208054820190555b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516107b291815260200190565b60405180910390a3505050565b602081526000825180602084015260005b818110156107ed57602081860181015160408684010152016107d0565b5060006040828501015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011684010191505092915050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461084f57600080fd5b919050565b6000806040838503121561086757600080fd5b6108708361082b565b946020939093013593505050565b60008060006060848603121561089357600080fd5b61089c8461082b565b92506108aa6020850161082b565b929592945050506040919091013590565b6000602082840312156108cd57600080fd5b6108d68261082b565b9392505050565b600080604083850312156108f057600080fd5b6108f98361082b565b91506109076020840161082b565b90509250929050565b600181811c9082168061092457607f821691505b60208210810361095d577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b8082018082111561028a577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea26469706673582212207e804ca539d49155d2b6bc19268ce22f9f857027c75247d69fb0d56a089c93d464736f6c634300081a003360a060405234801561001057600080fd5b5060405161140b38038061140b83398101604081905261002f916101b3565b60016000556002805460ff191690556001600160a01b038316158061005b57506001600160a01b038216155b8061006d57506001600160a01b038116155b1561008b5760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b0383166080526100a3600082610102565b506100ce7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a82610102565b506100f97f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e483610102565b505050506101f6565b60008281526001602090815260408083206001600160a01b038516845290915281205460ff1661018d5760008381526001602081815260408084206001600160a01b0387168086529252808420805460ff19169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a4506001610191565b5060005b92915050565b80516001600160a01b03811681146101ae57600080fd5b919050565b6000806000606084860312156101c857600080fd5b6101d184610197565b92506101df60208501610197565b91506101ed60408501610197565b90509250925092565b6080516111de61022d60003960008181610132015281816103c5015281816104270152818161065801526106ba01526111de6000f3fe608060405234801561001057600080fd5b50600436106101005760003560e01c80638456cb5911610097578063c8a0236211610066578063c8a0236214610276578063d547741f14610289578063d9caed121461029c578063e63ab1e9146102af57600080fd5b80638456cb59146101f957806385f438c11461020157806391d1485414610228578063a217fddf1461026e57600080fd5b80632f2ff15d116100d35780632f2ff15d146101c057806336568abe146101d35780633f4ba83a146101e65780635c975abb146101ee57600080fd5b806301ffc9a714610105578063116191b61461012d57806321fc65f214610179578063248a9ca31461018e575b600080fd5b610118610113366004610f04565b6102d6565b60405190151581526020015b60405180910390f35b6101547f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610124565b61018c610187366004610f6f565b61036f565b005b6101b261019c36600461100c565b6000908152600160208190526040909120015490565b604051908152602001610124565b61018c6101ce366004611025565b610511565b61018c6101e1366004611025565b61053d565b61018c61059b565b60025460ff16610118565b61018c6105d0565b6101b27f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b610118610236366004611025565b600091825260016020908152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b6101b2600081565b61018c610284366004610f6f565b610602565b61018c610297366004611025565b61078a565b61018c6102aa366004611051565b6107b0565b6101b27f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061036957507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b61037761087d565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e46103a1816108c0565b6103a96108ca565b6103ea73ffffffffffffffffffffffffffffffffffffffff87167f000000000000000000000000000000000000000000000000000000000000000086610909565b6040517f5131ab5900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690635131ab599061046490899089908990899089906004016110d7565b600060405180830381600087803b15801561047e57600080fd5b505af1158015610492573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167f85b5be9cf454e05e0bddf49315178102227c312078eefa3c00294fb4d912ae4e8686866040516104f793929190611134565b60405180910390a35061050a6001600055565b5050505050565b6000828152600160208190526040909120015461052d816108c0565b6105378383610996565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8116331461058c576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6105968282610a61565b505050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a6105c5816108c0565b6105cd610b20565b50565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a6105fa816108c0565b6105cd610b9d565b61060a61087d565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e4610634816108c0565b61063c6108ca565b61067d73ffffffffffffffffffffffffffffffffffffffff87167f000000000000000000000000000000000000000000000000000000000000000086610909565b6040517fb8969bd400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063b8969bd4906106f790899089908990899089906004016110d7565b600060405180830381600087803b15801561071157600080fd5b505af1158015610725573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fb9d4efa96044e5f5e03e696fa9ae2ff66911cc27e8a637c3627c75bc5b2241c88686866040516104f793929190611134565b600082815260016020819052604090912001546107a6816108c0565b6105378383610a61565b6107b861087d565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e46107e2816108c0565b6107ea6108ca565b61080b73ffffffffffffffffffffffffffffffffffffffff85168484610909565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f9b1bfa7fa9ee420a16e124f794c35ac9f90472acc99140eb2f6447c714cad8eb8460405161086a91815260200190565b60405180910390a3506105966001600055565b6002600054036108b9576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b6105cd8133610bf8565b60025460ff1615610907576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6040805173ffffffffffffffffffffffffffffffffffffffff8416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb00000000000000000000000000000000000000000000000000000000179052610596908490610c89565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff16610a5957600083815260016020818152604080842073ffffffffffffffffffffffffffffffffffffffff8716808652925280842080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a4506001610369565b506000610369565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff1615610a5957600083815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8616808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a4506001610369565b610b28610d1f565b600280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b610ba56108ca565b600280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258610b733390565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16610c85576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82166004820152602481018390526044015b60405180910390fd5b5050565b6000610cab73ffffffffffffffffffffffffffffffffffffffff841683610d5b565b90508051600014158015610cd0575080806020019051810190610cce9190611157565b155b15610596576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84166004820152602401610c7c565b60025460ff16610907576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6060610d6983836000610d70565b9392505050565b606081471015610dae576040517fcd786059000000000000000000000000000000000000000000000000000000008152306004820152602401610c7c565b6000808573ffffffffffffffffffffffffffffffffffffffff168486604051610dd79190611179565b60006040518083038185875af1925050503d8060008114610e14576040519150601f19603f3d011682016040523d82523d6000602084013e610e19565b606091505b5091509150610e29868383610e33565b9695505050505050565b606082610e4857610e4382610ec2565b610d69565b8151158015610e6c575073ffffffffffffffffffffffffffffffffffffffff84163b155b15610ebb576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85166004820152602401610c7c565b5080610d69565b805115610ed25780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060208284031215610f1657600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610d6957600080fd5b803573ffffffffffffffffffffffffffffffffffffffff81168114610f6a57600080fd5b919050565b600080600080600060808688031215610f8757600080fd5b610f9086610f46565b9450610f9e60208701610f46565b935060408601359250606086013567ffffffffffffffff811115610fc157600080fd5b8601601f81018813610fd257600080fd5b803567ffffffffffffffff811115610fe957600080fd5b886020828401011115610ffb57600080fd5b959894975092955050506020019190565b60006020828403121561101e57600080fd5b5035919050565b6000806040838503121561103857600080fd5b8235915061104860208401610f46565b90509250929050565b60008060006060848603121561106657600080fd5b61106f84610f46565b925061107d60208501610f46565b929592945050506040919091013590565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff8616815273ffffffffffffffffffffffffffffffffffffffff8516602082015283604082015260806060820152600061112960808301848661108e565b979650505050505050565b83815260406020820152600061114e60408301848661108e565b95945050505050565b60006020828403121561116957600080fd5b81518015158114610d6957600080fd5b6000825160005b8181101561119a5760208186018101518583015201611180565b50600092019182525091905056fea264697066735822122069d5c5c3cb2752c876b6a2138d8d9b66bac6bd1b48a1fe98417eea81faf02a3e64736f6c634300081a003360c060405260001960035534801561001657600080fd5b5060405161155a38038061155a83398101604081905261003591610220565b60016000819055805460ff19169055838383836001600160a01b038416158061006557506001600160a01b038316155b8061007757506001600160a01b038216155b8061008957506001600160a01b038116155b156100a75760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b03808516608052831660a0526100c5600082610154565b506100f07f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e483610154565b5061011b7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb83610154565b506101467f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a82610154565b505050505050505050610274565b60008281526002602090815260408083206001600160a01b038516845290915281205460ff166101fa5760008381526002602090815260408083206001600160a01b03861684529091529020805460ff191660011790556101b23390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45060016101fe565b5060005b92915050565b80516001600160a01b038116811461021b57600080fd5b919050565b6000806000806080858703121561023657600080fd5b61023f85610204565b935061024d60208601610204565b925061025b60408601610204565b915061026960608601610204565b905092959194509250565b60805160a0516112826102d86000396000818161021d01528181610531015281816108240152818161097b01528181610ad00152610bf20152600081816101d1015281816104a1015281816105040152818161079401526107f701526112826000f3fe608060405234801561001057600080fd5b50600436106101775760003560e01c80635e3e9fef116100d857806391d148541161008c578063d547741f11610066578063d547741f14610386578063d5abeb0114610399578063e63ab1e9146103a257600080fd5b806391d1485414610311578063a217fddf14610357578063a783c7891461035f57600080fd5b8063743e0c9b116100bd578063743e0c9b146102cf5780638456cb59146102e257806385f438c1146102ea57600080fd5b80635e3e9fef146102a95780636f8b44b0146102bc57600080fd5b8063248a9ca31161012f57806336568abe1161011457806336568abe146102835780633f4ba83a146102965780635c975abb1461029e57600080fd5b8063248a9ca31461023f5780632f2ff15d1461027057600080fd5b8063106e629011610160578063106e6290146101b9578063116191b6146101cc57806321e093b11461021857600080fd5b806301ffc9a71461017c57806302d5c899146101a4575b600080fd5b61018f61018a366004610fb4565b6103c9565b60405190151581526020015b60405180910390f35b6101b76101b2366004611026565b610462565b005b6101b76101c73660046110b8565b6105f7565b6101f37f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161019b565b6101f37f000000000000000000000000000000000000000000000000000000000000000081565b61026261024d3660046110eb565b60009081526002602052604090206001015490565b60405190815260200161019b565b6101b761027e366004611104565b61069c565b6101b7610291366004611104565b6106c7565b6101b7610720565b60015460ff1661018f565b6101b76102b7366004611026565b610755565b6101b76102ca3660046110eb565b6108d0565b6101b76102dd3660046110eb565b61093e565b6101b76109e8565b6102627f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b61018f61031f366004611104565b600091825260026020908152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b610262600081565b6102627f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb81565b6101b7610394366004611104565b610a1a565b61026260035481565b6102627f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061045c57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b61046a610a3f565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461049481610a82565b61049c610a8c565b6104c77f00000000000000000000000000000000000000000000000000000000000000008684610acb565b6040517fb8969bd400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063b8969bd490610561907f0000000000000000000000000000000000000000000000000000000000000000908a908a908a908a90600401611179565b600060405180830381600087803b15801561057b57600080fd5b505af115801561058f573d6000803e3d6000fd5b505050508573ffffffffffffffffffffffffffffffffffffffff167fba96f26bdda53eb8c8ba39045dfb4ff39753fbc7a6edcf250a88e75e78d102fe8686866040516105dd939291906111d6565b60405180910390a2506105f06001600055565b5050505050565b6105ff610a3f565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461062981610a82565b610631610a8c565b61063c848484610acb565b8373ffffffffffffffffffffffffffffffffffffffff167f884edad9ce6fa2440d8a54cc123490eb96d2768479d49ff9c7366125a94243648460405161068491815260200190565b60405180910390a2506106976001600055565b505050565b6000828152600260205260409020600101546106b781610a82565b6106c18383610c53565b50505050565b73ffffffffffffffffffffffffffffffffffffffff81163314610716576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6106978282610d53565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61074a81610a82565b610752610e12565b50565b61075d610a3f565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461078781610a82565b61078f610a8c565b6107ba7f00000000000000000000000000000000000000000000000000000000000000008684610acb565b6040517f5131ab5900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690635131ab5990610854907f0000000000000000000000000000000000000000000000000000000000000000908a908a908a908a90600401611179565b600060405180830381600087803b15801561086e57600080fd5b505af1158015610882573d6000803e3d6000fd5b505050508573ffffffffffffffffffffffffffffffffffffffff167f7772f56296d3a5202974a45c61c9188d844ab4d6eeb18c851e4b8d5384ca6ced8686866040516105dd939291906111d6565b7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb6108fa81610a82565b610902610a8c565b60038290556040518281527f7810bd47de260c3e9ee10061cf438099dd12256c79485f12f94dbccc981e806c9060200160405180910390a15050565b610946610a8c565b6040517f79cc6790000000000000000000000000000000000000000000000000000000008152336004820152602481018290527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16906379cc679090604401600060405180830381600087803b1580156109d457600080fd5b505af11580156105f0573d6000803e3d6000fd5b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610a1281610a82565b610752610e8f565b600082815260026020526040902060010154610a3581610a82565b6106c18383610d53565b600260005403610a7b576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b6107528133610ee8565b60015460ff1615610ac9576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6003547f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b39573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b5d91906111f9565b610b679084611212565b1115610b9f576040517fc30436e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f1e458bee00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff848116600483015260248201849052604482018390527f00000000000000000000000000000000000000000000000000000000000000001690631e458bee90606401600060405180830381600087803b158015610c3657600080fd5b505af1158015610c4a573d6000803e3d6000fd5b50505050505050565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff16610d4b57600083815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff86168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055610ce93390565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a450600161045c565b50600061045c565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff1615610d4b57600083815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8616808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a450600161045c565b610e1a610f78565b600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b610e97610a8c565b600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016811790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25833610e65565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16610f74576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff821660048201526024810183905260440160405180910390fd5b5050565b60015460ff16610ac9576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060208284031215610fc657600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610ff657600080fd5b9392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461102157600080fd5b919050565b60008060008060006080868803121561103e57600080fd5b61104786610ffd565b945060208601359350604086013567ffffffffffffffff81111561106a57600080fd5b8601601f8101881361107b57600080fd5b803567ffffffffffffffff81111561109257600080fd5b8860208284010111156110a457600080fd5b959894975060200195606001359392505050565b6000806000606084860312156110cd57600080fd5b6110d684610ffd565b95602085013595506040909401359392505050565b6000602082840312156110fd57600080fd5b5035919050565b6000806040838503121561111757600080fd5b8235915061112760208401610ffd565b90509250929050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff8616815273ffffffffffffffffffffffffffffffffffffffff851660208201528360408201526080606082015260006111cb608083018486611130565b979650505050505050565b8381526040602082015260006111f0604083018486611130565b95945050505050565b60006020828403121561120b57600080fd5b5051919050565b8082018082111561045c577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea2646970667358221220f784eb6e1655c2988d3f762737188cfee07a61da1d5b8456cc4f4e55cb339cfb64736f6c634300081a00336080604052348015600f57600080fd5b506001600055610d3a806100246000396000f3fe6080604052600436106100635760003560e01c8063c513169111610040578063c5131691146100c1578063e04d4f97146100e1578063f05b6abf146100f457005b8063357fc5a21461006c5780636ed701691461008c5780638fcaa0b5146100a157005b3661006a57005b005b34801561007857600080fd5b5061006a6100873660046106c0565b610114565b34801561009857600080fd5b5061006a6101aa565b3480156100ad57600080fd5b5061006a6100bc3660046106fc565b6101df565b3480156100cd57600080fd5b5061006a6100dc3660046106c0565b61021e565b61006a6100ef366004610895565b6102f9565b34801561010057600080fd5b5061006a61010f366004610981565b61033d565b61011c610372565b61013e73ffffffffffffffffffffffffffffffffffffffff83163383866103b5565b604080513381526020810185905273ffffffffffffffffffffffffffffffffffffffff848116828401528316606082015290517f2b58128f24a9f59127cc5b5430d70542b22220f2d9adaa86e442b816ab98af609181900360800190a16101a56001600055565b505050565b6040513381527fbcaadb46b82a48af60b608f58959ae6b8310d1b0a0d094c2e9ec3208ed39f2a09060200160405180910390a1565b7f0d3f65f00e631663aa85c96330b5c7a83bb29af3630c0063776f985edc3037aa33838360405161021293929190610a6b565b60405180910390a15050565b610226610372565b6000610233600285610ad5565b90508060000361026f576040517f1f2a200500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61029173ffffffffffffffffffffffffffffffffffffffff84163384846103b5565b604080513381526020810183905273ffffffffffffffffffffffffffffffffffffffff858116828401528416606082015290517f2b58128f24a9f59127cc5b5430d70542b22220f2d9adaa86e442b816ab98af609181900360800190a1506101a56001600055565b7f1f1ff1f5fb41346850b2f5c04e6c767e2f1c8a525c5c0c5cdb60cdf3ca5f62fa3334858585604051610330959493929190610b7e565b60405180910390a1505050565b7f74a53cd528a921fca7dbdee62f86819051d3cc98f214951f4238e8843f20b146338484846040516103309493929190610c08565b6002600054036103ae576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b6040805173ffffffffffffffffffffffffffffffffffffffff85811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd0000000000000000000000000000000000000000000000000000000017905261044a908590610450565b50505050565b600061047273ffffffffffffffffffffffffffffffffffffffff8416836104eb565b905080516000141580156104975750808060200190518101906104959190610ccb565b155b156101a5576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff841660048201526024015b60405180910390fd5b60606104f983836000610500565b9392505050565b60608147101561053e576040517fcd7860590000000000000000000000000000000000000000000000000000000081523060048201526024016104e2565b6000808573ffffffffffffffffffffffffffffffffffffffff1684866040516105679190610ce8565b60006040518083038185875af1925050503d80600081146105a4576040519150601f19603f3d011682016040523d82523d6000602084013e6105a9565b606091505b50915091506105b98683836105c3565b9695505050505050565b6060826105d8576105d382610652565b6104f9565b81511580156105fc575073ffffffffffffffffffffffffffffffffffffffff84163b155b1561064b576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff851660048201526024016104e2565b50806104f9565b8051156106625780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50565b803573ffffffffffffffffffffffffffffffffffffffff811681146106bb57600080fd5b919050565b6000806000606084860312156106d557600080fd5b833592506106e560208501610697565b91506106f360408501610697565b90509250925092565b6000806020838503121561070f57600080fd5b823567ffffffffffffffff81111561072657600080fd5b8301601f8101851361073757600080fd5b803567ffffffffffffffff81111561074e57600080fd5b85602082840101111561076057600080fd5b6020919091019590945092505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156107e6576107e6610770565b604052919050565b600082601f8301126107ff57600080fd5b813567ffffffffffffffff81111561081957610819610770565b61084a60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8401160161079f565b81815284602083860101111561085f57600080fd5b816020850160208301376000918101602001919091529392505050565b801515811461069457600080fd5b80356106bb8161087c565b6000806000606084860312156108aa57600080fd5b833567ffffffffffffffff8111156108c157600080fd5b6108cd868287016107ee565b9350506020840135915060408401356108e58161087c565b809150509250925092565b600067ffffffffffffffff82111561090a5761090a610770565b5060051b60200190565b600082601f83011261092557600080fd5b8135610938610933826108f0565b61079f565b8082825260208201915060208360051b86010192508583111561095a57600080fd5b602085015b8381101561097757803583526020928301920161095f565b5095945050505050565b60008060006060848603121561099657600080fd5b833567ffffffffffffffff8111156109ad57600080fd5b8401601f810186136109be57600080fd5b80356109cc610933826108f0565b8082825260208201915060208360051b8501019250888311156109ee57600080fd5b602084015b83811015610a3057803567ffffffffffffffff811115610a1257600080fd5b610a218b6020838901016107ee565b845250602092830192016109f3565b509550505050602084013567ffffffffffffffff811115610a5057600080fd5b610a5c86828701610914565b9250506106f36040850161088a565b73ffffffffffffffffffffffffffffffffffffffff8416815260406020820152816040820152818360608301376000818301606090810191909152601f9092017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016010192915050565b600082610b0b577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60005b83811015610b2b578181015183820152602001610b13565b50506000910152565b60008151808452610b4c816020860160208601610b10565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b73ffffffffffffffffffffffffffffffffffffffff8616815284602082015260a060408201526000610bb360a0830186610b34565b6060830194909452509015156080909101529392505050565b600081518084526020840193506020830160005b82811015610bfe578151865260209586019590910190600101610be0565b5093949350505050565b60006080820173ffffffffffffffffffffffffffffffffffffffff871683526080602084015280865180835260a08501915060a08160051b86010192506020880160005b82811015610c9b577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60878603018452610c86858351610b34565b94506020938401939190910190600101610c4c565b505050508281036040840152610cb18186610bcc565b915050610cc2606083018415159052565b95945050505050565b600060208284031215610cdd57600080fd5b81516104f98161087c565b60008251610cfa818460208701610b10565b919091019291505056fea2646970667358221220556072e1abafc3c4063b8cce832228b4f309b93726aaa6a6dfab20cb880c6d1864736f6c634300081a00336080604052348015600f57600080fd5b5060405161080c38038061080c833981016040819052602c916050565b600080546001600160a01b0319166001600160a01b0392909216919091179055607e565b600060208284031215606157600080fd5b81516001600160a01b0381168114607757600080fd5b9392505050565b61077f8061008d6000396000f3fe608060405234801561001057600080fd5b50600436106100415760003560e01c80630abd890514610046578063116191b61461005b578063865b36f6146100a4575b600080fd5b6100596100543660046104c4565b6100b7565b005b60005461007b9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b6100596100b236600461057f565b6102af565b60008383836040516024016100ce93929190610674565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe04d4f970000000000000000000000000000000000000000000000000000000017905260005490517f095ea7b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff91821660048201526024810189905291925086169063095ea7b3906044016020604051808303816000875af11580156101be573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101e2919061069e565b610218576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000546040517f7993c1e000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff90911690637993c1e090610274908a908a908a9087906004016106c2565b600060405180830381600087803b15801561028e57600080fd5b505af11580156102a2573d6000803e3d6000fd5b5050505050505050505050565b60008383836040516024016102c693929190610674565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe04d4f970000000000000000000000000000000000000000000000000000000017905260005490517f5d40e17800000000000000000000000000000000000000000000000000000000815291925073ffffffffffffffffffffffffffffffffffffffff1690635d40e1789061039690899089908690600401610714565b600060405180830381600087803b1580156103b057600080fd5b505af11580156103c4573d6000803e3d6000fd5b50505050505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600082601f83011261041057600080fd5b81356020830160008067ffffffffffffffff841115610431576104316103d0565b506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f85018116603f0116810181811067ffffffffffffffff8211171561047e5761047e6103d0565b60405283815290508082840187101561049657600080fd5b838360208301376000602085830101528094505050505092915050565b80151581146104c157600080fd5b50565b60008060008060008060c087890312156104dd57600080fd5b863567ffffffffffffffff8111156104f457600080fd5b61050089828a016103ff565b96505060208701359450604087013573ffffffffffffffffffffffffffffffffffffffff8116811461053157600080fd5b9350606087013567ffffffffffffffff81111561054d57600080fd5b61055989828a016103ff565b9350506080870135915060a0870135610571816104b3565b809150509295509295509295565b600080600080600060a0868803121561059757600080fd5b853567ffffffffffffffff8111156105ae57600080fd5b6105ba888289016103ff565b95505060208601359350604086013567ffffffffffffffff8111156105de57600080fd5b6105ea888289016103ff565b935050606086013591506080860135610602816104b3565b809150509295509295909350565b6000815180845260005b818110156106365760208185018101518683018201520161061a565b5060006020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b6060815260006106876060830186610610565b602083019490945250901515604090910152919050565b6000602082840312156106b057600080fd5b81516106bb816104b3565b9392505050565b6080815260006106d56080830187610610565b85602084015273ffffffffffffffffffffffffffffffffffffffff8516604084015282810360608401526107098185610610565b979650505050505050565b6060815260006107276060830186610610565b846020840152828103604084015261073f8185610610565b969550505050505056fea2646970667358221220d5c8efa106d3ece0f3750900034e01f5ba81ba4b46a57e03310e9ccd21566f2864736f6c634300081a0033608060405234801561001057600080fd5b50604051610b3f380380610b3f83398101604081905261002f916100b9565b600380546001600160a01b038086166001600160a01b0319928316179092556004805485841690831617905560058054928416929091169190911790556040517f80699e81136d69cb8367ad52a994e25c722a86da654b561d0c14b61a777e7ac590600090a15050506100fc565b80516001600160a01b03811681146100b457600080fd5b919050565b6000806000606084860312156100ce57600080fd5b6100d78461009d565b92506100e56020850161009d565b91506100f36040850161009d565b90509250925092565b610a348061010b6000396000f3fe608060405234801561001057600080fd5b50600436106100c95760003560e01c806397770dff11610081578063d7fd7afb1161005b578063d7fd7afb146101f2578063d936a01214610220578063ee2815ba1461024057600080fd5b806397770dff146101b9578063a7cb0507146101cc578063c63585cc146101df57600080fd5b8063513a9c05116100b2578063513a9c0514610143578063569541b914610179578063842da36d1461019957600080fd5b80630be15547146100ce5780633c669d551461012e575b600080fd5b6101046100dc36600461071e565b60016020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b61014161013c366004610760565b610253565b005b61010461015136600461071e565b60026020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b6003546101049073ffffffffffffffffffffffffffffffffffffffff1681565b6005546101049073ffffffffffffffffffffffffffffffffffffffff1681565b6101416101c73660046107fd565b6103a0565b6101416101da36600461081f565b610419565b6101046101ed366004610841565b610467565b61021261020036600461071e565b60006020819052908152604090205481565b604051908152602001610125565b6004546101049073ffffffffffffffffffffffffffffffffffffffff1681565b61014161024e366004610884565b61059c565b604080516080810182526000606082019081528152336020820152468183015290517fa9059cbb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff87811660048301526024820186905286169063a9059cbb906044016020604051808303816000875af11580156102e7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061030b91906108b0565b506040517fde43156e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff87169063de43156e90610366908490899089908990899060040161091b565b600060405180830381600087803b15801561038057600080fd5b505af1158015610394573d6000803e3d6000fd5b50505050505050505050565b600380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527fdba79d534382d1a8ae108e4c8ecb27c6ae42ab8b91d44eedf88bd329f3868d5e9060200160405180910390a150565b6000828152602081815260409182902083905581518481529081018390527f49f492222906ac486c3c1401fa545626df1f0c0e5a77a05597ea2ed66af9850d91015b60405180910390a15050565b60008060006104768585610620565b6040517fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606084811b8216602084015283901b166034820152919350915086906048016040516020818303038152906040528051906020012060405160200161055c9291907fff00000000000000000000000000000000000000000000000000000000000000815260609290921b7fffffffffffffffffffffffffffffffffffffffff00000000000000000000000016600183015260158201527f96e8ac4277198ff8b6f785478aa9a39f403cb768dd02cbee326c3e7da348845f603582015260550190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291905280516020909101209695505050505050565b60008281526001602090815260409182902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff85169081179091558251858152918201527fd1b36d30f6248e97c473b4d1348ca164a4ef6759022f54a58ec200326c39c45d910161045b565b6000808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603610688576040517fcb1e7cfe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16106106c25782846106c5565b83835b909250905073ffffffffffffffffffffffffffffffffffffffff8216610717576040517f78b507da00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b9250929050565b60006020828403121561073057600080fd5b5035919050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461075b57600080fd5b919050565b60008060008060006080868803121561077857600080fd5b61078186610737565b945061078f60208701610737565b935060408601359250606086013567ffffffffffffffff8111156107b257600080fd5b8601601f810188136107c357600080fd5b803567ffffffffffffffff8111156107da57600080fd5b8860208284010111156107ec57600080fd5b959894975092955050506020019190565b60006020828403121561080f57600080fd5b61081882610737565b9392505050565b6000806040838503121561083257600080fd5b50508035926020909101359150565b60008060006060848603121561085657600080fd5b61085f84610737565b925061086d60208501610737565b915061087b60408501610737565b90509250925092565b6000806040838503121561089757600080fd5b823591506108a760208401610737565b90509250929050565b6000602082840312156108c257600080fd5b8151801515811461081857600080fd5b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b60808152600086516060608084015280518060e085015260005b81811015610953576020818401810151610100878401015201610935565b5060008482016101000152602089015173ffffffffffffffffffffffffffffffffffffffff811660a0860152601f9091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168401915050604088015160c084015273ffffffffffffffffffffffffffffffffffffffff871660208401528560408401526101008382030160608401526109f2610100820185876108d2565b9897505050505050505056fea264697066735822122044450a00a3ccd112d5abf008f947389875d330f56afa78b6ab0863159c2d87f664736f6c634300081a003360e060405234801561001057600080fd5b50604051611bb9380380611bb983398101604081905261002f9161020e565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461006357604051632b2add3d60e01b815260040160405180910390fd5b6001600160a01b038216158061008057506001600160a01b038116155b1561009e5760405163d92e233d60e01b815260040160405180910390fd5b60066100aa8982610360565b5060076100b78882610360565b5060ff861660c05260808590528360028111156100d6576100d661041e565b60a08160028111156100ea576100ea61041e565b905250600192909255600080546001600160a01b039283166001600160a01b03199182161790915560088054929093169116179055506104349350505050565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261015157600080fd5b81516001600160401b0381111561016a5761016a61012a565b604051601f8201601f19908116603f011681016001600160401b03811182821017156101985761019861012a565b6040528181528382016020018510156101b057600080fd5b60005b828110156101cf576020818601810151838301820152016101b3565b506000918101602001919091529392505050565b8051600381106101f257600080fd5b919050565b80516001600160a01b03811681146101f257600080fd5b600080600080600080600080610100898b03121561022b57600080fd5b88516001600160401b0381111561024157600080fd5b61024d8b828c01610140565b60208b015190995090506001600160401b0381111561026b57600080fd5b6102778b828c01610140565b975050604089015160ff8116811461028e57600080fd5b60608a015190965094506102a460808a016101e3565b60a08a015190945092506102ba60c08a016101f7565b91506102c860e08a016101f7565b90509295985092959890939650565b600181811c908216806102eb57607f821691505b60208210810361030b57634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111561035b57806000526020600020601f840160051c810160208510156103385750805b601f840160051c820191505b818110156103585760008155600101610344565b50505b505050565b81516001600160401b038111156103795761037961012a565b61038d8161038784546102d7565b84610311565b6020601f8211600181146103c157600083156103a95750848201515b600019600385901b1c1916600184901b178455610358565b600084815260208120601f198516915b828110156103f157878501518255602094850194600190920191016103d1565b508482101561040f5786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b634e487b7160e01b600052602160045260246000fd5b60805160a05160c05161174861047160003960006102170152600061033a0152600081816102eb01528181610ad70152610bdd01526117486000f3fe608060405234801561001057600080fd5b50600436106101985760003560e01c80638b851b95116100e3578063ccc775991161008c578063eddeb12311610066578063eddeb12314610431578063f2441b3214610444578063f687d12a1461046457600080fd5b8063ccc77599146103a4578063d9eeebed146103b7578063dd62ed3e146103eb57600080fd5b8063a9059cbb116100bd578063a9059cbb14610369578063c70126261461037c578063c835d7cc1461038f57600080fd5b80638b851b951461030d57806395d89b411461032d578063a3413d031461033557600080fd5b80633ce4a5bc116101455780634d8943bb1161011f5780634d8943bb146102a757806370a08231146102b057806385e1f4d0146102e657600080fd5b80633ce4a5bc1461024157806342966c681461028157806347e7ef241461029457600080fd5b806318160ddd1161017657806318160ddd146101f557806323b872dd146101fd578063313ce5671461021057600080fd5b806306fdde031461019d578063091d2788146101bb578063095ea7b3146101d2575b600080fd5b6101a5610477565b6040516101b29190611327565b60405180910390f35b6101c460015481565b6040519081526020016101b2565b6101e56101e0366004611366565b610509565b60405190151581526020016101b2565b6005546101c4565b6101e561020b366004611392565b610520565b60405160ff7f00000000000000000000000000000000000000000000000000000000000000001681526020016101b2565b61025c73735b14bb79463307aacbed86daf3322b1e6226ab81565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101b2565b6101e561028f3660046113d3565b6105b7565b6101e56102a2366004611366565b6105cb565b6101c460025481565b6101c46102be3660046113ec565b73ffffffffffffffffffffffffffffffffffffffff1660009081526003602052604090205490565b6101c47f000000000000000000000000000000000000000000000000000000000000000081565b60085461025c9073ffffffffffffffffffffffffffffffffffffffff1681565b6101a561071f565b61035c7f000000000000000000000000000000000000000000000000000000000000000081565b6040516101b29190611409565b6101e5610377366004611366565b61072e565b6101e561038a366004611479565b61073b565b6103a261039d3660046113ec565b61088a565b005b6103a26103b23660046113ec565b61099e565b6103bf610aab565b6040805173ffffffffffffffffffffffffffffffffffffffff90931683526020830191909152016101b2565b6101c46103f9366004611571565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260046020908152604080832093909416825291909152205490565b6103a261043f3660046113d3565b610cc9565b60005461025c9073ffffffffffffffffffffffffffffffffffffffff1681565b6103a26104723660046113d3565b610d4b565b606060068054610486906115aa565b80601f01602080910402602001604051908101604052809291908181526020018280546104b2906115aa565b80156104ff5780601f106104d4576101008083540402835291602001916104ff565b820191906000526020600020905b8154815290600101906020018083116104e257829003601f168201915b5050505050905090565b6000610516338484610dcd565b5060015b92915050565b600061052d848484610ed6565b73ffffffffffffffffffffffffffffffffffffffff8416600090815260046020908152604080832033845290915290205482811015610598576040517f10bad14700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6105ac85336105a7868561162c565b610dcd565b506001949350505050565b60006105c33383611091565b506001919050565b60003373735b14bb79463307aacbed86daf3322b1e6226ab14801590610609575060005473ffffffffffffffffffffffffffffffffffffffff163314155b801561062d575060085473ffffffffffffffffffffffffffffffffffffffff163314155b15610664576040517fddb5de5e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61066e83836111d3565b6040517f735b14bb79463307aacbed86daf3322b1e6226ab000000000000000000000000602082015273ffffffffffffffffffffffffffffffffffffffff8416907f67fc7bdaed5b0ec550d8706b87d60568ab70c6b781263c70101d54cd1564aab390603401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529082905261070e91869061163f565b60405180910390a250600192915050565b606060078054610486906115aa565b6000610516338484610ed6565b6000806000610748610aab565b6040517f23b872dd00000000000000000000000000000000000000000000000000000000815233600482015273735b14bb79463307aacbed86daf3322b1e6226ab602482015260448101829052919350915073ffffffffffffffffffffffffffffffffffffffff8316906323b872dd906064016020604051808303816000875af11580156107da573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107fe9190611661565b610834576040517f0a7cd6d600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61083e3385611091565b60025460405133917f9ffbffc04a397460ee1dbe8c9503e098090567d6b7f4b3c02a8617d800b6d9559161087791899189918791611683565b60405180910390a2506001949350505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab146108d7576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116610924576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527fd55614e962c5fd6ece71614f6348d702468a997a394dd5e5c1677950226d97ae906020015b60405180910390a150565b3373735b14bb79463307aacbed86daf3322b1e6226ab146109eb576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116610a38576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600880547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527f88815d964e380677e86d817e7d65dea59cb7b4c3b5b7a0c8ec7ea4a74f90a38790602001610993565b600080546040517f0be155470000000000000000000000000000000000000000000000000000000081527f000000000000000000000000000000000000000000000000000000000000000060048201528291829173ffffffffffffffffffffffffffffffffffffffff90911690630be1554790602401602060405180830381865afa158015610b3e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b6291906116b2565b905073ffffffffffffffffffffffffffffffffffffffff8116610bb1576040517f78fff39600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080546040517fd7fd7afb0000000000000000000000000000000000000000000000000000000081527f0000000000000000000000000000000000000000000000000000000000000000600482015273ffffffffffffffffffffffffffffffffffffffff9091169063d7fd7afb90602401602060405180830381865afa158015610c40573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c6491906116cf565b905080600003610ca0576040517fe661aed000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060025460015483610cb391906116e8565b610cbd91906116ff565b92959294509192505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610d16576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60028190556040518181527fef13af88e424b5d15f49c77758542c1938b08b8b95b91ed0751f98ba99000d8f90602001610993565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610d98576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018190556040518181527fff5788270f43bfc1ca41c503606d2594aa3023a1a7547de403a3e2f146a4a80a90602001610993565b73ffffffffffffffffffffffffffffffffffffffff8316610e1a576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216610e67576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff83811660008181526004602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8316610f23576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216610f70576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff831660009081526003602052604090205481811015610fd0576040517ffe382aa700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610fda828261162c565b73ffffffffffffffffffffffffffffffffffffffff808616600090815260036020526040808220939093559085168152908120805484929061101d9084906116ff565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161108391815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff82166110de576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff82166000908152600360205260409020548181101561113e576040517ffe382aa700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611148828261162c565b73ffffffffffffffffffffffffffffffffffffffff84166000908152600360205260408120919091556005805484929061118390849061162c565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90602001610ec9565b73ffffffffffffffffffffffffffffffffffffffff8216611220576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b806005600082825461123291906116ff565b909155505073ffffffffffffffffffffffffffffffffffffffff82166000908152600360205260408120805483929061126c9084906116ff565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6000815180845260005b818110156112e9576020818501810151868301820152016112cd565b5060006020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b60208152600061133a60208301846112c3565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff8116811461136357600080fd5b50565b6000806040838503121561137957600080fd5b823561138481611341565b946020939093013593505050565b6000806000606084860312156113a757600080fd5b83356113b281611341565b925060208401356113c281611341565b929592945050506040919091013590565b6000602082840312156113e557600080fd5b5035919050565b6000602082840312156113fe57600080fd5b813561133a81611341565b6020810160038310611444577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000806040838503121561148c57600080fd5b823567ffffffffffffffff8111156114a357600080fd5b8301601f810185136114b457600080fd5b803567ffffffffffffffff8111156114ce576114ce61144a565b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8501160116810181811067ffffffffffffffff8211171561153a5761153a61144a565b60405281815282820160200187101561155257600080fd5b8160208401602083013760006020928201830152969401359450505050565b6000806040838503121561158457600080fd5b823561158f81611341565b9150602083013561159f81611341565b809150509250929050565b600181811c908216806115be57607f821691505b6020821081036115f7577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8181038181111561051a5761051a6115fd565b60408152600061165260408301856112c3565b90508260208301529392505050565b60006020828403121561167357600080fd5b8151801515811461133a57600080fd5b60808152600061169660808301876112c3565b6020830195909552506040810192909252606090910152919050565b6000602082840312156116c457600080fd5b815161133a81611341565b6000602082840312156116e157600080fd5b5051919050565b808202811582820484141761051a5761051a6115fd565b8082018082111561051a5761051a6115fd56fea26469706673582212204013e39523742118b3f2227e145ee7e48176ba6aebead33c596dca2acb59a74c64736f6c634300081a0033a2646970667358221220aa3caac71602bf019e716bcee8fa8b8958e2688fbb70cdd9ff44fff7d54e999164736f6c634300081a0033", + ABI: "[{\"type\":\"function\",\"name\":\"IS_TEST\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeArtifacts\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedArtifacts_\",\"type\":\"string[]\",\"internalType\":\"string[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeContracts\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedContracts_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeSelectors\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedSelectors_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzSelector[]\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"selectors\",\"type\":\"bytes4[]\",\"internalType\":\"bytes4[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeSenders\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedSenders_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"failed\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"setUp\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"targetArtifactSelectors\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedArtifactSelectors_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzArtifactSelector[]\",\"components\":[{\"name\":\"artifact\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"selectors\",\"type\":\"bytes4[]\",\"internalType\":\"bytes4[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetArtifacts\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedArtifacts_\",\"type\":\"string[]\",\"internalType\":\"string[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetContracts\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedContracts_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetInterfaces\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedInterfaces_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzInterface[]\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"artifacts\",\"type\":\"string[]\",\"internalType\":\"string[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetSelectors\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedSelectors_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzSelector[]\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"selectors\",\"type\":\"bytes4[]\",\"internalType\":\"bytes4[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetSenders\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedSenders_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"testCallReceiverEVMFromSenderZEVM\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testCallReceiverEVMFromZEVM\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawAndCallReceiverEVMFromSenderZEVM\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawAndCallReceiverEVMFromZEVM\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"event\",\"name\":\"Call\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"receiver\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Call\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"chainId\",\"type\":\"uint256\",\"indexed\":true,\"internalType\":\"uint256\"},{\"name\":\"receiver\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"message\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Deposit\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"receiver\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"asset\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Executed\",\"inputs\":[{\"name\":\"destination\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ExecutedWithERC20\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedERC20\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"token\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"destination\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedNoParams\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedNonPayable\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"strs\",\"type\":\"string[]\",\"indexed\":false,\"internalType\":\"string[]\"},{\"name\":\"nums\",\"type\":\"uint256[]\",\"indexed\":false,\"internalType\":\"uint256[]\"},{\"name\":\"flag\",\"type\":\"bool\",\"indexed\":false,\"internalType\":\"bool\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedPayable\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"str\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"num\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"flag\",\"type\":\"bool\",\"indexed\":false,\"internalType\":\"bool\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedRevert\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Reverted\",\"inputs\":[{\"name\":\"destination\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RevertedWithERC20\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Withdrawal\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"chainId\",\"type\":\"uint256\",\"indexed\":true,\"internalType\":\"uint256\"},{\"name\":\"receiver\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"zrc20\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"gasfee\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"protocolFlatFee\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"message\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log\",\"inputs\":[{\"name\":\"\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_address\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_array\",\"inputs\":[{\"name\":\"val\",\"type\":\"uint256[]\",\"indexed\":false,\"internalType\":\"uint256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_array\",\"inputs\":[{\"name\":\"val\",\"type\":\"int256[]\",\"indexed\":false,\"internalType\":\"int256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_array\",\"inputs\":[{\"name\":\"val\",\"type\":\"address[]\",\"indexed\":false,\"internalType\":\"address[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_bytes\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_bytes32\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_int\",\"inputs\":[{\"name\":\"\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_address\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_array\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"uint256[]\",\"indexed\":false,\"internalType\":\"uint256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_array\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"int256[]\",\"indexed\":false,\"internalType\":\"int256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_array\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"address[]\",\"indexed\":false,\"internalType\":\"address[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_bytes\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_bytes32\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_decimal_int\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"},{\"name\":\"decimals\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_decimal_uint\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"decimals\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_int\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_string\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_uint\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_string\",\"inputs\":[{\"name\":\"\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_uint\",\"inputs\":[{\"name\":\"\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"logs\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"ApprovalFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"CallerIsNotFungibleModule\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ConnectorInitialized\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"CustodyInitialized\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"DepositFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ExecutionFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"FailedZetaSent\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"GasFeeTransferFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientERC20Amount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientETHAmount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientZRC20Amount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientZetaAmount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidTarget\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NotWhitelistedInCustody\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OnlyWZETAOrFungible\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"WithdrawalFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZRC20BurnFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZRC20DepositFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZRC20TransferFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZeroAddress\",\"inputs\":[]}]", + Bin: "0x6080604052600c8054600160ff199182168117909255601f80549091169091179055348015602c57600080fd5b50620107e3806200003e6000396000f3fe608060405234801561001057600080fd5b506004361061011b5760003560e01c806385226c81116100b2578063b5508aa911610081578063d7a525fc11610066578063d7a525fc146101ec578063e20c9f71146101f4578063fa7626d4146101fc57600080fd5b8063b5508aa9146101cc578063ba414fa6146101d457600080fd5b806385226c8114610192578063916a17c6146101a75780639683c695146101bc578063b0464fdc146101c457600080fd5b80633f7286f4116100ee5780633f7286f414610165578063524744131461016d57806366d9a9a0146101755780636ff15ccc1461018a57600080fd5b80630a9254e4146101205780631ed7831c1461012a5780632ade3880146101485780633e5e3c231461015d575b600080fd5b610128610209565b005b61013261118d565b60405161013f9190617944565b60405180910390f35b6101506111ef565b60405161013f91906179e0565b610132611331565b610132611391565b6101286113f1565b61017d611c4e565b60405161013f9190617b46565b610128611dd0565b61019a6125e8565b60405161013f9190617be4565b6101af6126b8565b60405161013f9190617c5b565b6101286127b3565b6101af612d2f565b61019a612e2a565b6101dc612efa565b604051901515815260200161013f565b610128612fce565b6101326136b0565b601f546101dc9060ff1681565b602680547fffffffffffffffffffffffff00000000000000000000000000000000000000009081163017909155602780548216611234179055602880548216615678179055602e805490911661432117905560405161026790617829565b60408082526004908201527f746573740000000000000000000000000000000000000000000000000000000060608201526080602082018190526003908201527f54544b000000000000000000000000000000000000000000000000000000000060a082015260c001604051809103906000f0801580156102ec573d6000803e3d6000fd5b50602380547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039290921691909117905560405161033190617829565b604080825260049082018190527f7a6574610000000000000000000000000000000000000000000000000000000060608301526080602083018190528201527f5a4554410000000000000000000000000000000000000000000000000000000060a082015260c001604051809103906000f0801580156103b5573d6000803e3d6000fd5b50602480547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039283169081178255604080518082018252600e81527f4761746577617945564d2e736f6c0000000000000000000000000000000000006020820152602854602654925190861694810194909452604484019290925290921660648201526104a6919060840160408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fc0c53b8b00000000000000000000000000000000000000000000000000000000179052613710565b601f80547fffffffffffffffffffffff0000000000000000000000000000000000000000ff166101006001600160a01b0393841681029190911791829055602080549190920483167fffffffffffffffffffffffff0000000000000000000000000000000000000000909116811790915560285460265460405192939182169291169061053290617837565b6001600160a01b03938416815291831660208301529091166040820152606001604051809103906000f08015801561056e573d6000803e3d6000fd5b50602180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392831617905560205460245460285460265460405193851694928316939183169216906105c990617845565b6001600160a01b039485168152928416602084015290831660408301529091166060820152608001604051809103906000f08015801561060d573d6000803e3d6000fd5b50602280547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039283161790556028546040517fc88a5e6d00000000000000000000000000000000000000000000000000000000815291166004820152670de0b6b3a76400006024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c88a5e6d90604401600060405180830381600087803b1580156106b957600080fd5b505af11580156106cd573d6000803e3d6000fd5b50506026546040517f06447d560000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506306447d569150602401600060405180830381600087803b15801561074357600080fd5b505af1158015610757573d6000803e3d6000fd5b50506020546021546040517fae7a3a6f0000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201529116925063ae7a3a6f9150602401600060405180830381600087803b1580156107bd57600080fd5b505af11580156107d1573d6000803e3d6000fd5b50506020546022546040517f10188aef0000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152911692506310188aef9150602401600060405180830381600087803b15801561083757600080fd5b505af115801561084b573d6000803e3d6000fd5b505050507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b03166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156108ad57600080fd5b505af11580156108c1573d6000803e3d6000fd5b50506023546026546040517f40c10f190000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620f42406024820152911692506340c10f199150604401600060405180830381600087803b15801561093057600080fd5b505af1158015610944573d6000803e3d6000fd5b50506023546021546040517fa9059cbb0000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201526207a12060248201529116925063a9059cbb91506044016020604051808303816000875af11580156109b8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109dc9190617cf2565b506040516109e990617853565b604051809103906000f080158015610a05573d6000803e3d6000fd5b50602580547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03928316179055604080518082018252600f81527f476174657761795a45564d2e736f6c0000000000000000000000000000000000602082015260248054602e54935190851691810191909152919092166044820152610aee919060640160408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f485cc95500000000000000000000000000000000000000000000000000000000179052613710565b602980546001600160a01b03929092167fffffffffffffffffffffffff00000000000000000000000000000000000000009283168117909155602a80549092168117909155604051610b3f90617861565b6001600160a01b039091168152602001604051809103906000f080158015610b6b573d6000803e3d6000fd5b50602b80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03929092169190911790556040517f06447d5600000000000000000000000000000000000000000000000000000000815273735b14bb79463307aacbed86daf3322b1e6226ab6004820181905290737109709ecfa91a80626ff3989d68f67f5b1dd12d906306447d5690602401600060405180830381600087803b158015610c2057600080fd5b505af1158015610c34573d6000803e3d6000fd5b505050506000806000604051610c499061786f565b6001600160a01b03938416815291831660208301529091166040820152606001604051809103906000f080158015610c85573d6000803e3d6000fd5b50602c80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03928316908117909155602a54604051601293600193600093849391921690610cdb9061787d565b610cea96959493929190617d14565b604051809103906000f080158015610d06573d6000803e3d6000fd5b50602d80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03928316908117909155602c546040517fee2815ba0000000000000000000000000000000000000000000000000000000081526001600482015260248101929092529091169063ee2815ba90604401600060405180830381600087803b158015610d9d57600080fd5b505af1158015610db1573d6000803e3d6000fd5b5050602c546040517fa7cb050700000000000000000000000000000000000000000000000000000000815260016004820181905260248201526001600160a01b03909116925063a7cb05079150604401600060405180830381600087803b158015610e1b57600080fd5b505af1158015610e2f573d6000803e3d6000fd5b5050602d54602e546040517f47e7ef240000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620f42406024820152911692506347e7ef2491506044016020604051808303816000875af1158015610ea3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ec79190617cf2565b50602d54602b546040517f47e7ef240000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620f424060248201529116906347e7ef24906044016020604051808303816000875af1158015610f38573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f5c9190617cf2565b507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b03166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610fbb57600080fd5b505af1158015610fcf573d6000803e3d6000fd5b5050602e546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b15801561104557600080fd5b505af1158015611059573d6000803e3d6000fd5b5050602d54602a546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620f424060248201529116925063095ea7b391506044016020604051808303816000875af11580156110cd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110f19190617cf2565b506028546040517fc88a5e6d0000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152670de0b6b3a76400006024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c88a5e6d90604401600060405180830381600087803b15801561117257600080fd5b505af1158015611186573d6000803e3d6000fd5b5050505050565b606060168054806020026020016040519081016040528092919081815260200182805480156111e557602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116111c7575b5050505050905090565b6060601e805480602002602001604051908101604052809291908181526020016000905b8282101561132857600084815260208082206040805180820182526002870290920180546001600160a01b03168352600181018054835181870281018701909452808452939591948681019491929084015b8282101561131157838290600052602060002001805461128490617e09565b80601f01602080910402602001604051908101604052809291908181526020018280546112b090617e09565b80156112fd5780601f106112d2576101008083540402835291602001916112fd565b820191906000526020600020905b8154815290600101906020018083116112e057829003601f168201915b505050505081526020019060010190611265565b505050508152505081526020019060010190611213565b50505050905090565b606060188054806020026020016040519081016040528092919081815260200182805480156111e5576020028201919060005260206000209081546001600160a01b031681526001909101906020018083116111c7575050505050905090565b606060178054806020026020016040519081016040528092919081815260200182805480156111e5576020028201919060005260206000209081546001600160a01b031681526001909101906020018083116111c7575050505050905090565b604080518082018252600681527f48656c6c6f2100000000000000000000000000000000000000000000000000006020820152602d54602b5492517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b0393841660048201529192602a92600192670de0b6b3a7640000926000929116906370a0823190602401602060405180830381865afa15801561149d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114c19190617e56565b6040519091506000907fe04d4f9700000000000000000000000000000000000000000000000000000000906114fe90889088908890602401617e6f565b60408051601f19818403018152918152602080830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909516949094179093526025549051919350600092611597926001600160a01b03909216910160609190911b6bffffffffffffffffffffffff1916815260140190565b60408051601f1981840301815290829052602d546115c892620f4240916001600160a01b0316908690602401617e99565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f7993c1e000000000000000000000000000000000000000000000000000000000179052602a5490517ff30c7ba3000000000000000000000000000000000000000000000000000000008152919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f30c7ba391611685916001600160a01b0391909116906000908690600401617ed8565b600060405180830381600087803b15801561169f57600080fd5b505af11580156116b3573d6000803e3d6000fd5b5050602e546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b15801561172957600080fd5b505af115801561173d573d6000803e3d6000fd5b5050602b5460255460405160609190911b6bffffffffffffffffffffffff191660208201526001600160a01b039091169250630abd8905915060340160408051601f1981840301815290829052602d547fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1683526117d792620f4240916001600160a01b0316908d908d908d90600401617f00565b600060405180830381600087803b1580156117f157600080fd5b505af1158015611805573d6000803e3d6000fd5b50506020546040517fc88a5e6d0000000000000000000000000000000000000000000000000000000081526001600160a01b03909116600482015260248101879052737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c88a5e6d9150604401600060405180830381600087803b15801561188257600080fd5b505af1158015611896573d6000803e3d6000fd5b50506025546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b15801561192857600080fd5b505af115801561193c573d6000803e3d6000fd5b50506020546040517f1f1ff1f5fb41346850b2f5c04e6c767e2f1c8a525c5c0c5cdb60cdf3ca5f62fa935061198592506001600160a01b039091169087908b908b908b90617f55565b60405180910390a16020546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b158015611a1b57600080fd5b505af1158015611a2f573d6000803e3d6000fd5b50506025546040516001600160a01b0390911692507fcaf938de11c367272220bfd1d2baa99ca46665e7bc4d85f00adb51b90fe1fa9f9150611a749087908690617f96565b60405180910390a26028546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015611aee57600080fd5b505af1158015611b02573d6000803e3d6000fd5b50506020546025546040517f1cff79cd0000000000000000000000000000000000000000000000000000000081526001600160a01b039283169450631cff79cd93508892611b569216908790600401617faf565b60006040518083038185885af1158015611b74573d6000803e3d6000fd5b50505050506040513d6000823e601f3d908101601f19168201604052611b9d91908101906180b9565b50602d54602b546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260009291909116906370a0823190602401602060405180830381865afa158015611c08573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c2c9190617e56565b9050611c4481611c3f620f42408761811d565b61372f565b5050505050505050565b6060601b805480602002602001604051908101604052809291908181526020016000905b828210156113285783829060005260206000209060020201604051806040016040529081600082018054611ca590617e09565b80601f0160208091040260200160405190810160405280929190818152602001828054611cd190617e09565b8015611d1e5780601f10611cf357610100808354040283529160200191611d1e565b820191906000526020600020905b815481529060010190602001808311611d0157829003601f168201915b5050505050815260200160018201805480602002602001604051908101604052809291908181526020018280548015611db857602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019060040190602082600301049283019260010382029150808411611d655790505b50505050508152505081526020019060010190611c72565b604080518082018252600681527f48656c6c6f21000000000000000000000000000000000000000000000000000060208201529051602a90600190670de0b6b3a7640000906000907fe04d4f970000000000000000000000000000000000000000000000000000000090611e4c90879087908790602401617e6f565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009490941693909317909252602a5491517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b0390921660848301529150737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b158015611f3b57600080fd5b505af1158015611f4f573d6000803e3d6000fd5b5050602e5460255460405160609190911b6bffffffffffffffffffffffff19166020820152600093506001600160a01b0390911691507fde19dbe881cc0aeeb6e73ce19ac7b5ca695e6be8a076e3eb42292005a7fec1b59060340160408051601f19818403018152828252602d547f4d8943bb000000000000000000000000000000000000000000000000000000008452915190926001600160a01b0390921691620f4240916000918491634d8943bb916004808201926020929091908290030181865afa158015612025573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120499190617e56565b8860405161205c96959493929190618130565b60405180910390a3602e546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156120d657600080fd5b505af11580156120ea573d6000803e3d6000fd5b5050602a5460255460405160609190911b6bffffffffffffffffffffffff191660208201526001600160a01b039091169250637993c1e0915060340160408051601f1981840301815290829052602d547fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16835261218092620f4240916001600160a01b0316908790600401618183565b600060405180830381600087803b15801561219a57600080fd5b505af11580156121ae573d6000803e3d6000fd5b5050602d54602e546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260009450911691506370a0823190602401602060405180830381865afa15801561221a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061223e9190617e56565b905061224b81600061372f565b6020546040517fc88a5e6d0000000000000000000000000000000000000000000000000000000081526001600160a01b03909116600482015260248101849052737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c88a5e6d90604401600060405180830381600087803b1580156122c457600080fd5b505af11580156122d8573d6000803e3d6000fd5b50506025546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b15801561236a57600080fd5b505af115801561237e573d6000803e3d6000fd5b50506020546040517f1f1ff1f5fb41346850b2f5c04e6c767e2f1c8a525c5c0c5cdb60cdf3ca5f62fa93506123c792506001600160a01b039091169086908a908a908a90617f55565b60405180910390a16020546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b15801561245d57600080fd5b505af1158015612471573d6000803e3d6000fd5b50506025546040516001600160a01b0390911692507fcaf938de11c367272220bfd1d2baa99ca46665e7bc4d85f00adb51b90fe1fa9f91506124b69086908690617f96565b60405180910390a26028546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561253057600080fd5b505af1158015612544573d6000803e3d6000fd5b50506020546025546040517f1cff79cd0000000000000000000000000000000000000000000000000000000081526001600160a01b039283169450631cff79cd935087926125989216908790600401617faf565b60006040518083038185885af11580156125b6573d6000803e3d6000fd5b50505050506040513d6000823e601f3d908101601f191682016040526125df91908101906180b9565b50505050505050565b6060601a805480602002602001604051908101604052809291908181526020016000905b8282101561132857838290600052602060002001805461262b90617e09565b80601f016020809104026020016040519081016040528092919081815260200182805461265790617e09565b80156126a45780601f10612679576101008083540402835291602001916126a4565b820191906000526020600020905b81548152906001019060200180831161268757829003601f168201915b50505050508152602001906001019061260c565b6060601d805480602002602001604051908101604052809291908181526020016000905b828210156113285760008481526020908190206040805180820182526002860290920180546001600160a01b0316835260018101805483518187028101870190945280845293949193858301939283018282801561279b57602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190600401906020826003010492830192600103820291508084116127485790505b505050505081525050815260200190600101906126dc565b604080518082018252600681527f48656c6c6f21000000000000000000000000000000000000000000000000000060208201529051602a90600190670de0b6b3a76400009082906000907fe04d4f97000000000000000000000000000000000000000000000000000000009061283190889088908690602401617e6f565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009490941693909317909252602e5491517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b0390921660048301529150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561290457600080fd5b505af1158015612918573d6000803e3d6000fd5b5050602a546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b1580156129aa57600080fd5b505af11580156129be573d6000803e3d6000fd5b5050602e5460255460405160609190911b6bffffffffffffffffffffffff191660208201528593506001600160a01b0390911691507f5322ffbbf9261ff1f8138247942d2b03b28717141ef0a0dd080fc4be9c4e78d39060340160408051601f1981840301815290829052612a349186906181bd565b60405180910390a3602a5460255460405160609190911b6bffffffffffffffffffffffff191660208201526001600160a01b0390911690635d40e1789060340160405160208183030381529060405284846040518463ffffffff1660e01b8152600401612aa3939291906181e2565b600060405180830381600087803b158015612abd57600080fd5b505af1158015612ad1573d6000803e3d6000fd5b50506020546040517fc88a5e6d0000000000000000000000000000000000000000000000000000000081526001600160a01b03909116600482015260248101869052737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c88a5e6d9150604401600060405180830381600087803b158015612b4e57600080fd5b505af1158015612b62573d6000803e3d6000fd5b50506020546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b158015612bf457600080fd5b505af1158015612c08573d6000803e3d6000fd5b50506025546040516001600160a01b0390911692507fcaf938de11c367272220bfd1d2baa99ca46665e7bc4d85f00adb51b90fe1fa9f9150612c4d9086908590617f96565b60405180910390a26028546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015612cc757600080fd5b505af1158015612cdb573d6000803e3d6000fd5b50506020546025546040517f1cff79cd0000000000000000000000000000000000000000000000000000000081526001600160a01b039283169450631cff79cd935087926125989216908690600401617faf565b6060601c805480602002602001604051908101604052809291908181526020016000905b828210156113285760008481526020908190206040805180820182526002860290920180546001600160a01b03168352600181018054835181870281018701909452808452939491938583019392830182828015612e1257602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019060040190602082600301049283019260010382029150808411612dbf5790505b50505050508152505081526020019060010190612d53565b60606019805480602002602001604051908101604052809291908181526020016000905b82821015611328578382906000526020600020018054612e6d90617e09565b80601f0160208091040260200160405190810160405280929190818152602001828054612e9990617e09565b8015612ee65780601f10612ebb57610100808354040283529160200191612ee6565b820191906000526020600020905b815481529060010190602001808311612ec957829003601f168201915b505050505081526020019060010190612e4e565b60085460009060ff1615612f12575060085460ff1690565b6040517f667f9d70000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d600482018190527f6661696c65640000000000000000000000000000000000000000000000000000602483015260009163667f9d7090604401602060405180830381865afa158015612fa3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612fc79190617e56565b1415905090565b604080518082018252600681527f48656c6c6f21000000000000000000000000000000000000000000000000000060208201529051602a90600190670de0b6b3a76400009082906000907fe04d4f97000000000000000000000000000000000000000000000000000000009061304c90889088908690602401617e6f565b60408051601f19818403018152918152602080830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009095169490941790935260255490519193506000926130e5926001600160a01b03909216910160609190911b6bffffffffffffffffffffffff1916815260140190565b60408051601f198184030181529082905261310691859085906024016181e2565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f5d40e17800000000000000000000000000000000000000000000000000000000179052602a5490517ff30c7ba3000000000000000000000000000000000000000000000000000000008152919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f30c7ba3916131c3916001600160a01b0391909116906000908690600401617ed8565b600060405180830381600087803b1580156131dd57600080fd5b505af11580156131f1573d6000803e3d6000fd5b5050602e546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b15801561326757600080fd5b505af115801561327b573d6000803e3d6000fd5b5050602b5460255460405160609190911b6bffffffffffffffffffffffff191660208201526001600160a01b03909116925063865b36f69150603401604051602081830303815290604052858a8a8a6040518663ffffffff1660e01b81526004016132ea95949392919061820d565b600060405180830381600087803b15801561330457600080fd5b505af1158015613318573d6000803e3d6000fd5b50506020546040517fc88a5e6d0000000000000000000000000000000000000000000000000000000081526001600160a01b03909116600482015260248101879052737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c88a5e6d9150604401600060405180830381600087803b15801561339557600080fd5b505af11580156133a9573d6000803e3d6000fd5b50506025546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b15801561343b57600080fd5b505af115801561344f573d6000803e3d6000fd5b50506020546040517f1f1ff1f5fb41346850b2f5c04e6c767e2f1c8a525c5c0c5cdb60cdf3ca5f62fa935061349892506001600160a01b039091169087908b908b908b90617f55565b60405180910390a16020546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b15801561352e57600080fd5b505af1158015613542573d6000803e3d6000fd5b50506025546040516001600160a01b0390911692507fcaf938de11c367272220bfd1d2baa99ca46665e7bc4d85f00adb51b90fe1fa9f91506135879087908690617f96565b60405180910390a26028546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561360157600080fd5b505af1158015613615573d6000803e3d6000fd5b50506020546025546040517f1cff79cd0000000000000000000000000000000000000000000000000000000081526001600160a01b039283169450631cff79cd935088926136699216908790600401617faf565b60006040518083038185885af1158015613687573d6000803e3d6000fd5b50505050506040513d6000823e601f3d908101601f19168201604052611c4491908101906180b9565b606060158054806020026020016040519081016040528092919081815260200182805480156111e5576020028201919060005260206000209081546001600160a01b031681526001909101906020018083116111c7575050505050905090565b600061371a61788b565b6137258484836137b6565b9150505b92915050565b6040517f98296c540000000000000000000000000000000000000000000000000000000081526004810183905260248101829052737109709ecfa91a80626ff3989d68f67f5b1dd12d906398296c549060440160006040518083038186803b15801561379a57600080fd5b505afa1580156137ae573d6000803e3d6000fd5b505050505050565b6000806137c38584613831565b90506138266040518060400160405280601d81526020017f4552433139363750726f78792e736f6c3a4552433139363750726f78790000008152508286604051602001613811929190617faf565b6040516020818303038152906040528561383d565b9150505b9392505050565b600061382a838361386b565b60c081015151600090156138615761385a84848460c00151613886565b905061382a565b61385a8484613a2c565b60006138778383613b17565b61382a8383602001518461383d565b600080613891613b27565b9050600061389f8683613bfa565b905060006138b682606001518360200151856140a0565b905060006138c6838389896142b2565b905060006138d38261512f565b602081015181519192509060030b15613946578982604001516040516020016138fd929190618252565b60408051601f19818403018152908290527f08c379a000000000000000000000000000000000000000000000000000000000825261393d916004016182d3565b60405180910390fd5b60006139896040518060400160405280601581526020017f4465706c6f79656420746f20616464726573733a2000000000000000000000008152508360016152fe565b6040517fc6ce059d000000000000000000000000000000000000000000000000000000008152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c6ce059d906139dc9084906004016182d3565b602060405180830381865afa1580156139f9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a1d91906182e6565b9b9a5050505050505050505050565b6040517f8d1cc9250000000000000000000000000000000000000000000000000000000081526000908190737109709ecfa91a80626ff3989d68f67f5b1dd12d90638d1cc92590613a819087906004016182d3565b600060405180830381865afa158015613a9e573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052613ac691908101906180b9565b90506000613af48285604051602001613ae092919061830f565b6040516020818303038152906040526154fe565b90506001600160a01b0381166137255784846040516020016138fd92919061833e565b613b2382826000615511565b5050565b604080518082018252600381527f6f75740000000000000000000000000000000000000000000000000000000000602082015290517fd145736c000000000000000000000000000000000000000000000000000000008152606091737109709ecfa91a80626ff3989d68f67f5b1dd12d91829063d145736c90613bae9084906004016183e9565b600060405180830381865afa158015613bcb573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052613bf39190810190618430565b9250505090565b613c2c6040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b6000737109709ecfa91a80626ff3989d68f67f5b1dd12d9050613c776040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b613c8085615614565b60208201526000613c90866159f9565b90506000836001600160a01b031663d930a0e66040518163ffffffff1660e01b8152600401600060405180830381865afa158015613cd2573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052613cfa9190810190618430565b86838560200151604051602001613d149493929190618479565b60408051601f19818403018152908290527f60f9bb1100000000000000000000000000000000000000000000000000000000825291506000906001600160a01b038616906360f9bb1190613d6c9085906004016182d3565b600060405180830381865afa158015613d89573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052613db19190810190618430565b6040517fdb4235f60000000000000000000000000000000000000000000000000000000081529091506001600160a01b0386169063db4235f690613df990849060040161857d565b602060405180830381865afa158015613e16573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613e3a9190617cf2565b613e4f57816040516020016138fd91906185cf565b6040517f49c4fac80000000000000000000000000000000000000000000000000000000081526001600160a01b038616906349c4fac890613e94908490600401618661565b600060405180830381865afa158015613eb1573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052613ed99190810190618430565b84526040517fdb4235f60000000000000000000000000000000000000000000000000000000081526001600160a01b0386169063db4235f690613f209084906004016186b3565b602060405180830381865afa158015613f3d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613f619190617cf2565b15613ff6576040517f49c4fac80000000000000000000000000000000000000000000000000000000081526001600160a01b038616906349c4fac890613fab9084906004016186b3565b600060405180830381865afa158015613fc8573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052613ff09190810190618430565b60408501525b846001600160a01b03166349c4fac882866000015160405160200161401b9190618705565b6040516020818303038152906040526040518363ffffffff1660e01b81526004016140479291906181bd565b600060405180830381865afa158015614064573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261408c9190810190618430565b606085015250608083015250949350505050565b60408051600480825260a0820190925260609160009190816020015b60608152602001906001900390816140bc5790505090506040518060400160405280600481526020017f67726570000000000000000000000000000000000000000000000000000000008152508160008151811061411c5761411c618771565b60200260200101819052506040518060400160405280600381526020017f2d726c00000000000000000000000000000000000000000000000000000000008152508160018151811061417057614170618771565b60200260200101819052508460405160200161418c91906187a0565b604051602081830303815290604052816002815181106141ae576141ae618771565b6020026020010181905250826040516020016141ca919061880c565b604051602081830303815290604052816003815181106141ec576141ec618771565b602002602001018190525060006142028261512f565b602080820151604080518082018252600581527f2e6a736f6e00000000000000000000000000000000000000000000000000000081850190815282518084018452600080825290860152825180840190935290518252928101929092529192506142939060408051808201825260008082526020918201528151808301909252845182528085019082015290615c7c565b6142a857856040516020016138fd919061884d565b9695505050505050565b60a0810151604080518082018252600080825260209182015281518083019092528251808352928101910152606090737109709ecfa91a80626ff3989d68f67f5b1dd12d9015614302565b511590565b614476578260200151156143be576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605860248201527f54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f742060448201527f62652075736564207768656e207468652060736b6970566572696679536f757260648201527f6365436f646560206f7074696f6e206973206074727565600000000000000000608482015260a40161393d565b8260c0015115614476576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605360248201527f54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f742060448201527f62652075736564207768656e207468652060736b69704c6963656e736554797060648201527f6560206f7074696f6e2069732060747275656000000000000000000000000000608482015260a40161393d565b6040805160ff8082526120008201909252600091816020015b606081526020019060019003908161448f57905050905060006040518060400160405280600381526020017f6e707800000000000000000000000000000000000000000000000000000000008152508282806144ea906188de565b935060ff16815181106144ff576144ff618771565b60200260200101819052506040518060400160405280600d81526020017f302e302e312d616c7068612e370000000000000000000000000000000000000081525060405160200161455091906188fd565b60405160208183030381529060405282828061456b906188de565b935060ff168151811061458057614580618771565b60200260200101819052506040518060400160405280600681526020017f6465706c6f7900000000000000000000000000000000000000000000000000008152508282806145cd906188de565b935060ff16815181106145e2576145e2618771565b60200260200101819052506040518060400160405280600e81526020017f2d2d636f6e74726163744e616d6500000000000000000000000000000000000081525082828061462f906188de565b935060ff168151811061464457614644618771565b60200260200101819052508760200151828280614660906188de565b935060ff168151811061467557614675618771565b60200260200101819052506040518060400160405280600e81526020017f2d2d636f6e7472616374506174680000000000000000000000000000000000008152508282806146c2906188de565b935060ff16815181106146d7576146d7618771565b6020908102919091010152875182826146ef816188de565b935060ff168151811061470457614704618771565b60200260200101819052506040518060400160405280600981526020017f2d2d636861696e49640000000000000000000000000000000000000000000000815250828280614751906188de565b935060ff168151811061476657614766618771565b602002602001018190525061477a46615cdd565b8282614785816188de565b935060ff168151811061479a5761479a618771565b60200260200101819052506040518060400160405280600f81526020017f2d2d6275696c64496e666f46696c6500000000000000000000000000000000008152508282806147e7906188de565b935060ff16815181106147fc576147fc618771565b602002602001018190525086828280614814906188de565b935060ff168151811061482957614829618771565b60209081029190910101528551156149505760408051808201909152601581527f2d2d636f6e7374727563746f7242797465636f646500000000000000000000006020820152828261487a816188de565b935060ff168151811061488f5761488f618771565b60209081029190910101526040517f71aad10d0000000000000000000000000000000000000000000000000000000081526001600160a01b038416906371aad10d906148df9089906004016182d3565b600060405180830381865afa1580156148fc573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526149249190810190618430565b828261492f816188de565b935060ff168151811061494457614944618771565b60200260200101819052505b846020015115614a205760408051808201909152601281527f2d2d766572696679536f75726365436f6465000000000000000000000000000060208201528282614999816188de565b935060ff16815181106149ae576149ae618771565b60200260200101819052506040518060400160405280600581526020017f66616c73650000000000000000000000000000000000000000000000000000008152508282806149fb906188de565b935060ff1681518110614a1057614a10618771565b6020026020010181905250614be7565b614a586142fd8660a0015160408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b614aeb5760408051808201909152600d81527f2d2d6c6963656e7365547970650000000000000000000000000000000000000060208201528282614a9b816188de565b935060ff1681518110614ab057614ab0618771565b60200260200101819052508460a00151604051602001614ad091906187a0565b6040516020818303038152906040528282806149fb906188de565b8460c00151158015614b2e575060408089015181518083018352600080825260209182015282518084019093528151835290810190820152614b2c90511590565b155b15614be75760408051808201909152600d81527f2d2d6c6963656e7365547970650000000000000000000000000000000000000060208201528282614b72816188de565b935060ff1681518110614b8757614b87618771565b6020026020010181905250614b9b88615d7d565b604051602001614bab91906187a0565b604051602081830303815290604052828280614bc6906188de565b935060ff1681518110614bdb57614bdb618771565b60200260200101819052505b60408086015181518083018352600080825260209182015282518084019093528151835290810190820152614c1b90511590565b614cb05760408051808201909152600b81527f2d2d72656c61796572496400000000000000000000000000000000000000000060208201528282614c5e816188de565b935060ff1681518110614c7357614c73618771565b60200260200101819052508460400151828280614c8f906188de565b935060ff1681518110614ca457614ca4618771565b60200260200101819052505b606085015115614dd15760408051808201909152600681527f2d2d73616c74000000000000000000000000000000000000000000000000000060208201528282614cf9816188de565b935060ff1681518110614d0e57614d0e618771565b602090810291909101015260608501516040517fb11a19e800000000000000000000000000000000000000000000000000000000815260048101919091526001600160a01b0384169063b11a19e890602401600060405180830381865afa158015614d7d573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052614da59190810190618430565b8282614db0816188de565b935060ff1681518110614dc557614dc5618771565b60200260200101819052505b60e08501515115614e785760408051808201909152600a81527f2d2d6761734c696d69740000000000000000000000000000000000000000000060208201528282614e1b816188de565b935060ff1681518110614e3057614e30618771565b6020026020010181905250614e4c8560e0015160000151615cdd565b8282614e57816188de565b935060ff1681518110614e6c57614e6c618771565b60200260200101819052505b60e08501516020015115614f225760408051808201909152600a81527f2d2d67617350726963650000000000000000000000000000000000000000000060208201528282614ec5816188de565b935060ff1681518110614eda57614eda618771565b6020026020010181905250614ef68560e0015160200151615cdd565b8282614f01816188de565b935060ff1681518110614f1657614f16618771565b60200260200101819052505b60e08501516040015115614fcc5760408051808201909152600e81527f2d2d6d617846656550657247617300000000000000000000000000000000000060208201528282614f6f816188de565b935060ff1681518110614f8457614f84618771565b6020026020010181905250614fa08560e0015160400151615cdd565b8282614fab816188de565b935060ff1681518110614fc057614fc0618771565b60200260200101819052505b60e085015160600151156150765760408051808201909152601681527f2d2d6d61785072696f726974794665655065724761730000000000000000000060208201528282615019816188de565b935060ff168151811061502e5761502e618771565b602002602001018190525061504a8560e0015160600151615cdd565b8282615055816188de565b935060ff168151811061506a5761506a618771565b60200260200101819052505b60008160ff1667ffffffffffffffff81111561509457615094617fd1565b6040519080825280602002602001820160405280156150c757816020015b60608152602001906001900390816150b25790505b50905060005b8260ff168160ff16101561512057838160ff16815181106150f0576150f0618771565b6020026020010151828260ff168151811061510d5761510d618771565b60209081029190910101526001016150cd565b5093505050505b949350505050565b6151566040518060600160405280600060030b815260200160608152602001606081525090565b60408051808201825260048082527f6261736800000000000000000000000000000000000000000000000000000000602083015291517fd145736c000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d92600091849163d145736c916151dc91869101618968565b600060405180830381865afa1580156151f9573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526152219190810190618430565b9050600061522f868361686c565b90506000846001600160a01b031663f45c1ce7836040518263ffffffff1660e01b815260040161525f9190617be4565b6000604051808303816000875af115801561527e573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526152a691908101906189af565b805190915060030b158015906152bf5750602081015151155b80156152ce5750604081015151155b156142a857816000815181106152e6576152e6618771565b60200260200101516040516020016138fd9190618a65565b606060006153338560408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b60408051808201825260008082526020918201528151808301909252865182528087019082015290915061536a9082905b906169c1565b156154c75760006153e7826153e1846153db6153ad8a60408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6040805180820182526000808252602091820152815180830190925282518252918201519181019190915290565b906169e8565b90616a4a565b604080518082018252600181527f0a000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015290915061544b9082906169c1565b156154b557604080518082018252600181527f0a00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526154b2905b8290616acf565b90505b6154be81616af5565b9250505061382a565b82156154e05784846040516020016138fd929190618c51565b505060408051602081019091526000815261382a565b509392505050565b6000808251602084016000f09392505050565b8160a001511561552057505050565b600061552d848484616b5e565b9050600061553a8261512f565b602081015181519192509060030b1580156155d65750604080518082018252600781527f5355434345535300000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526155d690604080518082018252600080825260209182015281518083019092528451825280850190820152615364565b156155e357505050505050565b604082015151156156035781604001516040516020016138fd9190618cf8565b806040516020016138fd9190618d56565b606060006156498360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600481527f2e736f6c00000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201529091506156ae905b8290615c7c565b1561571d57604080518082018252600481527f2e736f6c000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261382a906157189083906170f9565b616af5565b604080518082018252600181527f3a000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261577f905b8290617183565b60010361584c57604080518082018252600181527f3a00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526157e5906154ab565b50604080518082018252600181527f3a000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261382a90615718905b8390616acf565b604080518082018252600581527f2e6a736f6e000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526158ab906156a7565b156159e257604080518082018252600181527f2f0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082018190528451808601909552925184528301529061591390839061721d565b905060008160018351615926919061811d565b8151811061593657615936618771565b602002602001015190506159d96157186159ac6040518060400160405280600581526020017f2e6a736f6e00000000000000000000000000000000000000000000000000000081525060408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600080825260209182015281518083019092528551825280860190820152906170f9565b95945050505050565b826040516020016138fd9190618dc1565b50919050565b60606000615a2e8360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600481527f2e736f6c0000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152909150615a90906156a7565b15615a9e5761382a81616af5565b604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152615afd90615778565b600103615b6757604080518082018252600181527f3a000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261382a9061571890615845565b604080518082018252600581527f2e6a736f6e00000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152615bc6906156a7565b156159e257604080518082018252600181527f2f00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820181905284518086019095529251845283015290615c2e90839061721d565b9050600181511115615c6a578060028251615c49919061811d565b81518110615c5957615c59618771565b602002602001015192505050919050565b50826040516020016138fd9190618dc1565b805182516000911115615c9157506000613729565b81518351602085015160009291615ca791618e9f565b615cb1919061811d565b905082602001518103615cc8576001915050613729565b82516020840151819020912014905092915050565b60606000615cea836172c2565b600101905060008167ffffffffffffffff811115615d0a57615d0a617fd1565b6040519080825280601f01601f191660200182016040528015615d34576020820181803683370190505b5090508181016020015b600019017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a8504945084615d3e57509392505050565b604081810151815180830183526000808252602091820181905283518085018552835181529282018383015283518085018552600a81527f554e4c4943454e5345440000000000000000000000000000000000000000000081840190815285518087018752838152840192909252845180860190955251845290830152606091615e09905b82906173a4565b15615e4957505060408051808201909152600481527f4e6f6e65000000000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600981527f556e6c6963656e7365000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152615ea890615e02565b15615ee857505060408051808201909152600981527f556e6c6963656e736500000000000000000000000000000000000000000000006020820152919050565b604080518082018252600381527f4d4954000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152615f4790615e02565b15615f8757505060408051808201909152600381527f4d495400000000000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f47504c2d322e302d6f6e6c79000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152615fe690615e02565b8061604b5750604080518082018252601081527f47504c2d322e302d6f722d6c61746572000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261604b90615e02565b1561608b57505060408051808201909152600981527f474e552047504c763200000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f47504c2d332e302d6f6e6c790000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526160ea90615e02565b8061614f5750604080518082018252601081527f47504c2d332e302d6f722d6c61746572000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261614f90615e02565b1561618f57505060408051808201909152600981527f474e552047504c763300000000000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4c47504c2d322e312d6f6e6c7900000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526161ee90615e02565b806162535750604080518082018252601181527f4c47504c2d322e312d6f722d6c617465720000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261625390615e02565b1561629357505060408051808201909152600c81527f474e55204c47504c76322e3100000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4c47504c2d332e302d6f6e6c7900000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526162f290615e02565b806163575750604080518082018252601181527f4c47504c2d332e302d6f722d6c617465720000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261635790615e02565b1561639757505060408051808201909152600a81527f474e55204c47504c7633000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f4253442d322d436c617573650000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526163f690615e02565b1561643657505060408051808201909152600c81527f4253442d322d436c6175736500000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f4253442d332d436c6175736500000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261649590615e02565b156164d557505060408051808201909152600c81527f4253442d332d436c6175736500000000000000000000000000000000000000006020820152919050565b604080518082018252600781527f4d504c2d322e30000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261653490615e02565b1561657457505060408051808201909152600781527f4d504c2d322e30000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600781527f4f534c2d332e3000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526165d390615e02565b1561661357505060408051808201909152600781527f4f534c2d332e30000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600a81527f4170616368652d322e30000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261667290615e02565b156166b257505060408051808201909152600a81527f4170616368652d322e30000000000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4147504c2d332e302d6f6e6c79000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261671190615e02565b806167765750604080518082018252601181527f4147504c2d332e302d6f722d6c617465720000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261677690615e02565b156167b657505060408051808201909152600a81527f474e55204147504c7633000000000000000000000000000000000000000000006020820152919050565b604080518082018252600881527f4255534c2d312e310000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261681590615e02565b1561685557505060408051808201909152600781527f42534c20312e31000000000000000000000000000000000000000000000000006020820152919050565b604080840151845191516138fd9290602001618eb2565b60608060005b84518110156168f7578185828151811061688e5761688e618771565b60200260200101516040516020016168a792919061830f565b6040516020818303038152906040529150600185516168c6919061811d565b81146168ef57816040516020016168dd919061901b565b60405160208183030381529060405291505b600101616872565b5060408051600380825260808201909252600091816020015b6060815260200190600190039081616910579050509050838160008151811061693b5761693b618771565b60200260200101819052506040518060400160405280600281526020017f2d630000000000000000000000000000000000000000000000000000000000008152508160018151811061698f5761698f618771565b602002602001018190525081816002815181106169ae576169ae618771565b6020908102919091010152949350505050565b60208083015183518351928401516000936169df92918491906173b8565b14159392505050565b60408051808201909152600080825260208201526000616a1a84600001518560200151856000015186602001516174c9565b9050836020015181616a2c919061811d565b84518590616a3b90839061811d565b90525060208401525090919050565b6040805180820190915260008082526020820152815183511015616a6f575081613729565b6020808301519084015160019114616a965750815160208481015190840151829020919020145b8015616ac757825184518590616aad90839061811d565b9052508251602085018051616ac3908390618e9f565b9052505b509192915050565b6040805180820190915260008082526020820152616aee8383836175e9565b5092915050565b60606000826000015167ffffffffffffffff811115616b1657616b16617fd1565b6040519080825280601f01601f191660200182016040528015616b40576020820181803683370190505b5090506000602082019050616aee8185602001518660000151617694565b60606000616b6a613b27565b6040805160ff808252612000820190925291925060009190816020015b6060815260200190600190039081616b8757905050905060006040518060400160405280600381526020017f6e70780000000000000000000000000000000000000000000000000000000000815250828280616be2906188de565b935060ff1681518110616bf757616bf7618771565b60200260200101819052506040518060400160405280600781526020017f5e312e33322e3300000000000000000000000000000000000000000000000000815250604051602001616c48919061905c565b604051602081830303815290604052828280616c63906188de565b935060ff1681518110616c7857616c78618771565b60200260200101819052506040518060400160405280600881526020017f76616c6964617465000000000000000000000000000000000000000000000000815250828280616cc5906188de565b935060ff1681518110616cda57616cda618771565b602002602001018190525082604051602001616cf6919061880c565b604051602081830303815290604052828280616d11906188de565b935060ff1681518110616d2657616d26618771565b60200260200101819052506040518060400160405280600a81526020017f2d2d636f6e747261637400000000000000000000000000000000000000000000815250828280616d73906188de565b935060ff1681518110616d8857616d88618771565b6020026020010181905250616d9d878461770e565b8282616da8816188de565b935060ff1681518110616dbd57616dbd618771565b602090810291909101015285515115616e695760408051808201909152600b81527f2d2d7265666572656e636500000000000000000000000000000000000000000060208201528282616e0f816188de565b935060ff1681518110616e2457616e24618771565b6020026020010181905250616e3d86600001518461770e565b8282616e48816188de565b935060ff1681518110616e5d57616e5d618771565b60200260200101819052505b856080015115616ed75760408051808201909152601881527f2d2d756e73616665536b697053746f72616765436865636b000000000000000060208201528282616eb2816188de565b935060ff1681518110616ec757616ec7618771565b6020026020010181905250616f3d565b8415616f3d5760408051808201909152601281527f2d2d726571756972655265666572656e6365000000000000000000000000000060208201528282616f1c816188de565b935060ff1681518110616f3157616f31618771565b60200260200101819052505b60408601515115616fd95760408051808201909152600d81527f2d2d756e73616665416c6c6f770000000000000000000000000000000000000060208201528282616f87816188de565b935060ff1681518110616f9c57616f9c618771565b60200260200101819052508560400151828280616fb8906188de565b935060ff1681518110616fcd57616fcd618771565b60200260200101819052505b8560600151156170435760408051808201909152601481527f2d2d756e73616665416c6c6f7752656e616d657300000000000000000000000060208201528282617022816188de565b935060ff168151811061703757617037618771565b60200260200101819052505b60008160ff1667ffffffffffffffff81111561706157617061617fd1565b60405190808252806020026020018201604052801561709457816020015b606081526020019060019003908161707f5790505b50905060005b8260ff168160ff1610156170ed57838160ff16815181106170bd576170bd618771565b6020026020010151828260ff16815181106170da576170da618771565b602090810291909101015260010161709a565b50979650505050505050565b604080518082019091526000808252602082015281518351101561711e575081613729565b8151835160208501516000929161713491618e9f565b61713e919061811d565b6020840151909150600190821461715f575082516020840151819020908220145b801561717a5783518551869061717690839061811d565b9052505b50929392505050565b60008082600001516171a785600001518660200151866000015187602001516174c9565b6171b19190618e9f565b90505b835160208501516171c59190618e9f565b8111616aee57816171d5816190a1565b925050826000015161720c8560200151836171f0919061811d565b86516171fc919061811d565b83866000015187602001516174c9565b6172169190618e9f565b90506171b4565b6060600061722b8484617183565b617236906001618e9f565b67ffffffffffffffff81111561724e5761724e617fd1565b60405190808252806020026020018201604052801561728157816020015b606081526020019060019003908161726c5790505b50905060005b81518110156154f65761729d6157188686616acf565b8282815181106172af576172af618771565b6020908102919091010152600101617287565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000831061730b577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310617337576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc10000831061735557662386f26fc10000830492506010015b6305f5e100831061736d576305f5e100830492506008015b612710831061738157612710830492506004015b60648310617393576064830492506002015b600a83106137295760010192915050565b60006173b0838361774e565b159392505050565b6000808584116174bf576020841161746b57600084156174035760016173df86602061811d565b6173ea9060086190bb565b6173f59060026191b9565b6173ff919061811d565b1990505b83518116856174128989618e9f565b61741c919061811d565b805190935082165b8181146174565787841161743e5787945050505050615127565b83617448816191c5565b945050828451169050617424565b6174608785618e9f565b945050505050615127565b838320617478858861811d565b6174829087618e9f565b91505b8582106174bd578482208082036174aa576174a08684618e9f565b9350505050615127565b6174b560018461811d565b925050617485565b505b5092949350505050565b600083818685116175d4576020851161758357600085156175155760016174f187602061811d565b6174fc9060086190bb565b6175079060026191b9565b617511919061811d565b1990505b845181166000876175268b8b618e9f565b617530919061811d565b855190915083165b8281146175755781861061755d576175508b8b618e9f565b9650505050505050615127565b85617567816190a1565b965050838651169050617538565b859650505050505050615127565b508383206000905b617595868961811d565b82116175d2578583208082036175b15783945050505050615127565b6175bc600185618e9f565b93505081806175ca906190a1565b92505061758b565b505b6175de8787618e9f565b979650505050505050565b6040805180820190915260008082526020820152600061761b85600001518660200151866000015187602001516174c9565b602080870180519186019190915251909150617637908261811d565b83528451602086015161764a9190618e9f565b8103617659576000855261768b565b835183516176679190618e9f565b8551869061767690839061811d565b90525083516176859082618e9f565b60208601525b50909392505050565b602081106176cc57815183526176ab602084618e9f565b92506176b8602083618e9f565b91506176c560208261811d565b9050617694565b60001981156176fb5760016176e283602061811d565b6176ee906101006191b9565b6176f8919061811d565b90505b9151835183169219169190911790915250565b6060600061771c8484613bfa565b8051602080830151604051939450617736939091016191dc565b60405160208183030381529060405291505092915050565b8151815160009190811115617761575081515b6020808501519084015160005b8381101561781a57825182518082146177ea5760001960208710156177c95760018461779b89602061811d565b6177a59190618e9f565b6177b09060086190bb565b6177bb9060026191b9565b6177c5919061811d565b1990505b81811683821681810391146177e75797506137299650505050505050565b50505b6177f5602086618e9f565b9450617802602085618e9f565b935050506020816178139190618e9f565b905061776e565b50845186516142a89190619234565b610c9f806200925583390190565b6116fe8062009ef483390190565b61155a806200b5f283390190565b610d5e806200cb4c83390190565b61080c806200d8aa83390190565b610b3f806200e0b683390190565b611bb9806200ebf583390190565b6040518060e001604052806060815260200160608152602001606081526020016000151581526020016000151581526020016000151581526020016178ce6178d3565b905290565b604051806101000160405280600015158152602001600015158152602001606081526020016000801916815260200160608152602001606081526020016000151581526020016178ce6040518060800160405280600081526020016000815260200160008152602001600081525090565b602080825282518282018190526000918401906040840190835b818110156179855783516001600160a01b031683526020938401939092019160010161795e565b509095945050505050565b60005b838110156179ab578181015183820152602001617993565b50506000910152565b600081518084526179cc816020860160208601617990565b601f01601f19169290920160200192915050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015617adc577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452815180516001600160a01b03168652602090810151604082880181905281519088018190529101906060600582901b88018101919088019060005b81811015617ac2577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa08a8503018352617aac8486516179b4565b6020958601959094509290920191600101617a72565b509197505050602094850194929092019150600101617a08565b50929695505050505050565b600081518084526020840193506020830160005b82811015617b3c5781517fffffffff0000000000000000000000000000000000000000000000000000000016865260209586019590910190600101617afc565b5093949350505050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015617adc577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08786030184528151805160408752617bb260408801826179b4565b9050602082015191508681036020880152617bcd8183617ae8565b965050506020938401939190910190600101617b6e565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015617adc577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452617c468583516179b4565b94506020938401939190910190600101617c0c565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015617adc577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc087860301845281516001600160a01b0381511686526020810151905060406020870152617cdc6040870182617ae8565b9550506020938401939190910190600101617c83565b600060208284031215617d0457600080fd5b8151801515811461382a57600080fd5b610100815260056101008201527f544f4b454e000000000000000000000000000000000000000000000000000000610120820152610140602082015260036101408201527f544b4e000000000000000000000000000000000000000000000000000000000061016082015260006101808201905060ff8816604083015286606083015260038610617dce577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b8560808301528460a0830152617def60c08301856001600160a01b03169052565b6001600160a01b03831660e0830152979650505050505050565b600181811c90821680617e1d57607f821691505b6020821081036159f3577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060208284031215617e6857600080fd5b5051919050565b606081526000617e8260608301866179b4565b602083019490945250901515604090910152919050565b608081526000617eac60808301876179b4565b62ffffff861660208401526001600160a01b038516604084015282810360608401526175de81856179b4565b6001600160a01b03841681528260208201526060604082015260006159d960608301846179b4565b60c081526000617f1360c08301896179b4565b8760208401526001600160a01b03871660408401528281036060840152617f3a81876179b4565b6080840195909552505090151560a090910152949350505050565b6001600160a01b038616815284602082015260a060408201526000617f7d60a08301866179b4565b6060830194909452509015156080909101529392505050565b82815260406020820152600061512760408301846179b4565b6001600160a01b038316815260406020820152600061512760408301846179b4565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040516060810167ffffffffffffffff8111828210171561802357618023617fd1565b60405290565b60008067ffffffffffffffff84111561804457618044617fd1565b50604051601f19601f85018116603f0116810181811067ffffffffffffffff8211171561807357618073617fd1565b60405283815290508082840185101561808b57600080fd5b6154f6846020830185617990565b600082601f8301126180aa57600080fd5b61382a83835160208501618029565b6000602082840312156180cb57600080fd5b815167ffffffffffffffff8111156180e257600080fd5b61372584828501618099565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b81810381811115613729576137296180ee565b60c08152600061814360c08301896179b4565b6001600160a01b038816602084015286604084015285606084015284608084015282810360a084015261817681856179b4565b9998505050505050505050565b60808152600061819660808301876179b4565b8560208401526001600160a01b038516604084015282810360608401526175de81856179b4565b6040815260006181d060408301856179b4565b828103602084015261382681856179b4565b6060815260006181f560608301866179b4565b84602084015282810360408401526142a881856179b4565b60a08152600061822060a08301886179b4565b866020840152828103604084015261823881876179b4565b606084019590955250509015156080909101529392505050565b7f4661696c656420746f206465706c6f7920636f6e74726163742000000000000081526000835161828a81601a850160208801617990565b7f3a20000000000000000000000000000000000000000000000000000000000000601a9184019182015283516182c781601c840160208801617990565b01601c01949350505050565b60208152600061382a60208301846179b4565b6000602082840312156182f857600080fd5b81516001600160a01b038116811461382a57600080fd5b60008351618321818460208801617990565b835190830190618335818360208801617990565b01949350505050565b7f4661696c656420746f206465706c6f7920636f6e74726163742000000000000081526000835161837681601a850160208801617990565b7f207573696e6720636f6e7374727563746f722064617461202200000000000000601a9184019182015283516183b3816033840160208801617990565b7f220000000000000000000000000000000000000000000000000000000000000060339290910191820152603401949350505050565b60408152600b60408201527f464f554e4452595f4f5554000000000000000000000000000000000000000000606082015260806020820152600061382a60808301846179b4565b60006020828403121561844257600080fd5b815167ffffffffffffffff81111561845957600080fd5b8201601f8101841361846a57600080fd5b61372584825160208401618029565b6000855161848b818460208a01617990565b7f2f0000000000000000000000000000000000000000000000000000000000000090830190815285516184c5816001840160208a01617990565b7f2f00000000000000000000000000000000000000000000000000000000000000600192909101918201528451618503816002840160208901617990565b6001818301019150507f2f0000000000000000000000000000000000000000000000000000000000000060018201528351618545816002840160208801617990565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600292909101918201526007019695505050505050565b60408152600061859060408301846179b4565b8281036020840152600481527f2e6173740000000000000000000000000000000000000000000000000000000060208201526040810191505092915050565b7f436f756c64206e6f742066696e642041535420696e206172746966616374200081526000825161860781601f850160208701617990565b7f2e205365742060617374203d20747275656020696e20666f756e6472792e746f601f9390910192830152507f6d6c000000000000000000000000000000000000000000000000000000000000603f820152604101919050565b60408152600061867460408301846179b4565b8281036020840152601181527f2e6173742e6162736f6c7574655061746800000000000000000000000000000060208201526040810191505092915050565b6040815260006186c660408301846179b4565b8281036020840152600c81527f2e6173742e6c6963656e7365000000000000000000000000000000000000000060208201526040810191505092915050565b7f2e6d657461646174612e736f75726365732e5b2700000000000000000000000081526000825161873d816014850160208701617990565b7f275d2e6b656363616b32353600000000000000000000000000000000000000006014939091019283015250602001919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f22000000000000000000000000000000000000000000000000000000000000008152600082516187d8816001850160208701617990565b7f22000000000000000000000000000000000000000000000000000000000000006001939091019283015250600201919050565b6000825161881e818460208701617990565b7f2f6275696c642d696e666f000000000000000000000000000000000000000000920191825250600b01919050565b7f436f756c64206e6f742066696e64206275696c642d696e666f2066696c65207781527f697468206d61746368696e6720736f7572636520636f6465206861736820666f60208201527f7220636f6e7472616374200000000000000000000000000000000000000000006040820152600082516188d181604b850160208701617990565b91909101604b0192915050565b600060ff821660ff81036188f4576188f46180ee565b60010192915050565b7f406f70656e7a657070656c696e2f646566656e6465722d6465706c6f792d636c81527f69656e742d636c6940000000000000000000000000000000000000000000000060208201526000825161895b816029850160208701617990565b9190910160290192915050565b60408152601660408201527f4f50454e5a455050454c494e5f424153485f5041544800000000000000000000606082015260806020820152600061382a60808301846179b4565b6000602082840312156189c157600080fd5b815167ffffffffffffffff8111156189d857600080fd5b8201606081850312156189ea57600080fd5b6189f2618000565b81518060030b8114618a0357600080fd5b8152602082015167ffffffffffffffff811115618a1f57600080fd5b618a2b86828501618099565b602083015250604082015167ffffffffffffffff811115618a4b57600080fd5b618a5786828501618099565b604083015250949350505050565b7f4661696c656420746f2072756e206261736820636f6d6d616e6420776974682081527f2200000000000000000000000000000000000000000000000000000000000000602082015260008251618ac3816021850160208701617990565b7f222e20496620796f7520617265207573696e672057696e646f77732c2073657460219390910192830152507f20746865204f50454e5a455050454c494e5f424153485f5041544820656e766960418201527f726f6e6d656e74207661726961626c6520746f207468652066756c6c7920717560618201527f616c69666965642070617468206f66207468652062617368206578656375746160818201527f626c652e20466f72206578616d706c652c20696620796f75206172652075736960a18201527f6e672047697420666f722057696e646f77732c206164642074686520666f6c6c60c18201527f6f77696e67206c696e6520696e20746865202e656e762066696c65206f66207960e18201527f6f75722070726f6a65637420287573696e6720666f727761726420736c6173686101018201527f6573293a0a4f50454e5a455050454c494e5f424153485f504154483d22433a2f6101218201527f50726f6772616d2046696c65732f4769742f62696e2f6261736822000000000061014182015261015c01919050565b7f4661696c656420746f2066696e64206c696e652077697468207072656669782081527f2700000000000000000000000000000000000000000000000000000000000000602082015260008351618caf816021850160208801617990565b7f2720696e206f75747075743a20000000000000000000000000000000000000006021918401918201528351618cec81602e840160208801617990565b01602e01949350505050565b7f4661696c656420746f2072756e2075706772616465207361666574792076616c81527f69646174696f6e3a20000000000000000000000000000000000000000000000060208201526000825161895b816029850160208701617990565b7f55706772616465207361666574792076616c69646174696f6e206661696c656481527f3a0a000000000000000000000000000000000000000000000000000000000000602082015260008251618db4816022850160208701617990565b9190910160220192915050565b7f436f6e7472616374206e616d6520000000000000000000000000000000000000815260008251618df981600e850160208701617990565b7f206d75737420626520696e2074686520666f726d6174204d79436f6e74726163600e9390910192830152507f742e736f6c3a4d79436f6e7472616374206f72204d79436f6e74726163742e73602e8201527f6f6c206f72206f75742f4d79436f6e74726163742e736f6c2f4d79436f6e7472604e8201527f6163742e6a736f6e000000000000000000000000000000000000000000000000606e820152607601919050565b80820180821115613729576137296180ee565b7f53504458206c6963656e7365206964656e746966696572200000000000000000815260008351618eea816018850160208801617990565b7f20696e20000000000000000000000000000000000000000000000000000000006018918401918201528351618f2781601c840160208801617990565b7f20646f6573206e6f74206c6f6f6b206c696b65206120737570706f7274656420601c92909101918201527f6c6963656e736520666f7220626c6f636b206578706c6f726572207665726966603c8201527f69636174696f6e2e205573652074686520606c6963656e73655479706560206f605c8201527f7074696f6e20746f20737065636966792061206c6963656e736520747970652c607c8201527f206f7220736574207468652060736b69704c6963656e73655479706560206f70609c8201527f74696f6e20746f2060747275656020746f20736b69702e00000000000000000060bc82015260d301949350505050565b6000825161902d818460208701617990565b7f2000000000000000000000000000000000000000000000000000000000000000920191825250600101919050565b7f406f70656e7a657070656c696e2f75706772616465732d636f7265400000000081526000825161909481601c850160208701617990565b91909101601c0192915050565b600060001982036190b4576190b46180ee565b5060010190565b8082028115828204841417613729576137296180ee565b6001815b600184111561910d578085048111156190f1576190f16180ee565b60018416156190ff57908102905b60019390931c9280026190d6565b935093915050565b60008261912457506001613729565b8161913157506000613729565b816001811461914757600281146191515761916d565b6001915050613729565b60ff841115619162576191626180ee565b50506001821b613729565b5060208310610133831016604e8410600b8410161715619190575081810a613729565b61919d60001984846190d2565b80600019048211156191b1576191b16180ee565b029392505050565b600061382a8383619115565b6000816191d4576191d46180ee565b506000190190565b600083516191ee818460208801617990565b7f3a000000000000000000000000000000000000000000000000000000000000009083019081528351619228816001840160208801617990565b01600101949350505050565b8181036000831280158383131683831282161715616aee57616aee6180ee56fe608060405234801561001057600080fd5b50604051610c9f380380610c9f83398101604081905261002f9161010d565b8181600361003d83826101ff565b50600461004a82826101ff565b50505050506102bd565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261007b57600080fd5b81516001600160401b0381111561009457610094610054565b604051601f8201601f19908116603f011681016001600160401b03811182821017156100c2576100c2610054565b6040528181528382016020018510156100da57600080fd5b60005b828110156100f9576020818601810151838301820152016100dd565b506000918101602001919091529392505050565b6000806040838503121561012057600080fd5b82516001600160401b0381111561013657600080fd5b6101428582860161006a565b602085015190935090506001600160401b0381111561016057600080fd5b61016c8582860161006a565b9150509250929050565b600181811c9082168061018a57607f821691505b6020821081036101aa57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156101fa57806000526020600020601f840160051c810160208510156101d75750805b601f840160051c820191505b818110156101f757600081556001016101e3565b50505b505050565b81516001600160401b0381111561021857610218610054565b61022c816102268454610176565b846101b0565b6020601f82116001811461026057600083156102485750848201515b600019600385901b1c1916600184901b1784556101f7565b600084815260208120601f198516915b828110156102905787850151825560209485019460019092019101610270565b50848210156102ae5786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b6109d3806102cc6000396000f3fe608060405234801561001057600080fd5b50600436106100be5760003560e01c806340c10f191161007657806395d89b411161005b57806395d89b4114610183578063a9059cbb1461018b578063dd62ed3e1461019e57600080fd5b806340c10f191461013857806370a082311461014d57600080fd5b806318160ddd116100a757806318160ddd1461010457806323b872dd14610116578063313ce5671461012957600080fd5b806306fdde03146100c3578063095ea7b3146100e1575b600080fd5b6100cb6101e4565b6040516100d891906107bf565b60405180910390f35b6100f46100ef366004610854565b610276565b60405190151581526020016100d8565b6002545b6040519081526020016100d8565b6100f461012436600461087e565b610290565b604051601281526020016100d8565b61014b610146366004610854565b6102b4565b005b61010861015b3660046108bb565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6100cb6102c2565b6100f4610199366004610854565b6102d1565b6101086101ac3660046108dd565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6060600380546101f390610910565b80601f016020809104026020016040519081016040528092919081815260200182805461021f90610910565b801561026c5780601f106102415761010080835404028352916020019161026c565b820191906000526020600020905b81548152906001019060200180831161024f57829003601f168201915b5050505050905090565b6000336102848185856102df565b60019150505b92915050565b60003361029e8582856102f1565b6102a98585856103c5565b506001949350505050565b6102be8282610470565b5050565b6060600480546101f390610910565b6000336102848185856103c5565b6102ec83838360016104cc565b505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146103bf57818110156103b0576040517ffb8f41b200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416600482015260248101829052604481018390526064015b60405180910390fd5b6103bf848484840360006104cc565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8316610415576040517f96c6fd1e000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff8216610465576040517fec442f05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b6102ec838383610614565b73ffffffffffffffffffffffffffffffffffffffff82166104c0576040517fec442f05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b6102be60008383610614565b73ffffffffffffffffffffffffffffffffffffffff841661051c576040517fe602df05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff831661056c576040517f94280d62000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260016020908152604080832093871683529290522082905580156103bf578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161060691815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff831661064c5780600260008282546106419190610963565b909155506106fe9050565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260208190526040902054818110156106d2576040517fe450d38c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8516600482015260248101829052604481018390526064016103a7565b73ffffffffffffffffffffffffffffffffffffffff841660009081526020819052604090209082900390555b73ffffffffffffffffffffffffffffffffffffffff821661072757600280548290039055610753565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090208054820190555b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516107b291815260200190565b60405180910390a3505050565b602081526000825180602084015260005b818110156107ed57602081860181015160408684010152016107d0565b5060006040828501015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011684010191505092915050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461084f57600080fd5b919050565b6000806040838503121561086757600080fd5b6108708361082b565b946020939093013593505050565b60008060006060848603121561089357600080fd5b61089c8461082b565b92506108aa6020850161082b565b929592945050506040919091013590565b6000602082840312156108cd57600080fd5b6108d68261082b565b9392505050565b600080604083850312156108f057600080fd5b6108f98361082b565b91506109076020840161082b565b90509250929050565b600181811c9082168061092457607f821691505b60208210810361095d577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b8082018082111561028a577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea26469706673582212207e804ca539d49155d2b6bc19268ce22f9f857027c75247d69fb0d56a089c93d464736f6c634300081a003360a060405234801561001057600080fd5b506040516116fe3803806116fe83398101604081905261002f916101e5565b60016000556002805460ff191690556001600160a01b038316158061005b57506001600160a01b038216155b8061006d57506001600160a01b038116155b1561008b5760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b0383166080526100a3600082610134565b506100ce7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a82610134565b506100f97f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e483610134565b506101126000805160206116de83398151915282610134565b5061012b6000805160206116de83398151915283610134565b50505050610228565b60008281526001602090815260408083206001600160a01b038516845290915281205460ff166101bf5760008381526001602081815260408084206001600160a01b0387168086529252808420805460ff19169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45060016101c3565b5060005b92915050565b80516001600160a01b03811681146101e057600080fd5b919050565b6000806000606084860312156101fa57600080fd5b610203846101c9565b9250610211602085016101c9565b915061021f604085016101c9565b90509250925092565b60805161147f61025f6000396000818161019e0152818161050001528181610562015281816108f70152610959015261147f6000f3fe608060405234801561001057600080fd5b506004361061016c5760003560e01c806385f438c1116100cd578063c8a0236211610081578063d936547e11610066578063d936547e14610355578063d9caed1214610378578063e63ab1e91461038b57600080fd5b8063c8a023621461032f578063d547741f1461034257600080fd5b80639a590427116100b25780639a590427146103015780639b19251a14610314578063a217fddf1461032757600080fd5b806385f438c11461029457806391d14854146102bb57600080fd5b806336568abe11610124578063570618e111610109578063570618e11461025a5780635c975abb146102815780638456cb591461028c57600080fd5b806336568abe1461023f5780633f4ba83a1461025257600080fd5b806321fc65f21161015557806321fc65f2146101e5578063248a9ca3146101fa5780632f2ff15d1461022c57600080fd5b806301ffc9a714610171578063116191b614610199575b600080fd5b61018461017f36600461118a565b6103b2565b60405190151581526020015b60405180910390f35b6101c07f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610190565b6101f86101f33660046111f5565b61044b565b005b61021e610208366004611292565b6000908152600160208190526040909120015490565b604051908152602001610190565b6101f861023a3660046112ab565b61064c565b6101f861024d3660046112ab565b610678565b6101f86106d6565b61021e7f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a81565b60025460ff16610184565b6101f861070b565b61021e7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b6101846102c93660046112ab565b600091825260016020908152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b6101f861030f3660046112d7565b61073d565b6101f86103223660046112d7565b6107be565b61021e600081565b6101f861033d3660046111f5565b610842565b6101f86103503660046112ab565b610a29565b6101846103633660046112d7565b60036020526000908152604090205460ff1681565b6101f86103863660046112f2565b610a4f565b61021e7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061044557507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b610453610b7b565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461047d81610bbe565b610485610bc8565b73ffffffffffffffffffffffffffffffffffffffff861660009081526003602052604090205460ff166104e4576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61052573ffffffffffffffffffffffffffffffffffffffff87167f000000000000000000000000000000000000000000000000000000000000000086610c07565b6040517f5131ab5900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690635131ab599061059f9089908990899089908990600401611378565b600060405180830381600087803b1580156105b957600080fd5b505af11580156105cd573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167f85b5be9cf454e05e0bddf49315178102227c312078eefa3c00294fb4d912ae4e868686604051610632939291906113d5565b60405180910390a3506106456001600055565b5050505050565b6000828152600160208190526040909120015461066881610bbe565b6106728383610c94565b50505050565b73ffffffffffffffffffffffffffffffffffffffff811633146106c7576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6106d18282610d41565b505050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61070081610bbe565b610708610de2565b50565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61073581610bbe565b610708610e41565b7f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a61076781610bbe565b73ffffffffffffffffffffffffffffffffffffffff8216600081815260036020526040808220805460ff19169055517f51085ddf9ebdded84b76e829eb58c4078e4b5bdf97d9a94723f336039da467919190a25050565b7f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a6107e881610bbe565b73ffffffffffffffffffffffffffffffffffffffff8216600081815260036020526040808220805460ff19166001179055517faab7954e9d246b167ef88aeddad35209ca2489d95a8aeb59e288d9b19fae5a549190a25050565b61084a610b7b565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461087481610bbe565b61087c610bc8565b73ffffffffffffffffffffffffffffffffffffffff861660009081526003602052604090205460ff166108db576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61091c73ffffffffffffffffffffffffffffffffffffffff87167f000000000000000000000000000000000000000000000000000000000000000086610c07565b6040517fb8969bd400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063b8969bd4906109969089908990899089908990600401611378565b600060405180830381600087803b1580156109b057600080fd5b505af11580156109c4573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fb9d4efa96044e5f5e03e696fa9ae2ff66911cc27e8a637c3627c75bc5b2241c8868686604051610632939291906113d5565b60008281526001602081905260409091200154610a4581610bbe565b6106728383610d41565b610a57610b7b565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e4610a8181610bbe565b610a89610bc8565b73ffffffffffffffffffffffffffffffffffffffff841660009081526003602052604090205460ff16610ae8576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610b0973ffffffffffffffffffffffffffffffffffffffff85168484610c07565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f9b1bfa7fa9ee420a16e124f794c35ac9f90472acc99140eb2f6447c714cad8eb84604051610b6891815260200190565b60405180910390a3506106d16001600055565b600260005403610bb7576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b6107088133610e7e565b60025460ff1615610c05576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6040805173ffffffffffffffffffffffffffffffffffffffff8416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb000000000000000000000000000000000000000000000000000000001790526106d1908490610f0f565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff16610d3957600083815260016020818152604080842073ffffffffffffffffffffffffffffffffffffffff87168086529252808420805460ff19169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a4506001610445565b506000610445565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff1615610d3957600083815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff86168085529252808320805460ff1916905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a4506001610445565b610dea610fa5565b6002805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b610e49610bc8565b6002805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258610e173390565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16610f0b576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82166004820152602481018390526044015b60405180910390fd5b5050565b6000610f3173ffffffffffffffffffffffffffffffffffffffff841683610fe1565b90508051600014158015610f56575080806020019051810190610f5491906113f8565b155b156106d1576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84166004820152602401610f02565b60025460ff16610c05576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6060610fef83836000610ff6565b9392505050565b606081471015611034576040517fcd786059000000000000000000000000000000000000000000000000000000008152306004820152602401610f02565b6000808573ffffffffffffffffffffffffffffffffffffffff16848660405161105d919061141a565b60006040518083038185875af1925050503d806000811461109a576040519150601f19603f3d011682016040523d82523d6000602084013e61109f565b606091505b50915091506110af8683836110b9565b9695505050505050565b6060826110ce576110c982611148565b610fef565b81511580156110f2575073ffffffffffffffffffffffffffffffffffffffff84163b155b15611141576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85166004820152602401610f02565b5080610fef565b8051156111585780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006020828403121561119c57600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610fef57600080fd5b803573ffffffffffffffffffffffffffffffffffffffff811681146111f057600080fd5b919050565b60008060008060006080868803121561120d57600080fd5b611216866111cc565b9450611224602087016111cc565b935060408601359250606086013567ffffffffffffffff81111561124757600080fd5b8601601f8101881361125857600080fd5b803567ffffffffffffffff81111561126f57600080fd5b88602082840101111561128157600080fd5b959894975092955050506020019190565b6000602082840312156112a457600080fd5b5035919050565b600080604083850312156112be57600080fd5b823591506112ce602084016111cc565b90509250929050565b6000602082840312156112e957600080fd5b610fef826111cc565b60008060006060848603121561130757600080fd5b611310846111cc565b925061131e602085016111cc565b929592945050506040919091013590565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff8616815273ffffffffffffffffffffffffffffffffffffffff851660208201528360408201526080606082015260006113ca60808301848661132f565b979650505050505050565b8381526040602082015260006113ef60408301848661132f565b95945050505050565b60006020828403121561140a57600080fd5b81518015158114610fef57600080fd5b6000825160005b8181101561143b5760208186018101518583015201611421565b50600092019182525091905056fea2646970667358221220dc54ce548a1f0bf8ba5e86cc53c6d822e55eee543451395733c659359bac8dd164736f6c634300081a00338619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a60c060405260001960035534801561001657600080fd5b5060405161155a38038061155a83398101604081905261003591610220565b60016000819055805460ff19169055838383836001600160a01b038416158061006557506001600160a01b038316155b8061007757506001600160a01b038216155b8061008957506001600160a01b038116155b156100a75760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b03808516608052831660a0526100c5600082610154565b506100f07f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e483610154565b5061011b7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb83610154565b506101467f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a82610154565b505050505050505050610274565b60008281526002602090815260408083206001600160a01b038516845290915281205460ff166101fa5760008381526002602090815260408083206001600160a01b03861684529091529020805460ff191660011790556101b23390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45060016101fe565b5060005b92915050565b80516001600160a01b038116811461021b57600080fd5b919050565b6000806000806080858703121561023657600080fd5b61023f85610204565b935061024d60208601610204565b925061025b60408601610204565b915061026960608601610204565b905092959194509250565b60805160a0516112826102d86000396000818161021d01528181610531015281816108240152818161097b01528181610ad00152610bf20152600081816101d1015281816104a1015281816105040152818161079401526107f701526112826000f3fe608060405234801561001057600080fd5b50600436106101775760003560e01c80635e3e9fef116100d857806391d148541161008c578063d547741f11610066578063d547741f14610386578063d5abeb0114610399578063e63ab1e9146103a257600080fd5b806391d1485414610311578063a217fddf14610357578063a783c7891461035f57600080fd5b8063743e0c9b116100bd578063743e0c9b146102cf5780638456cb59146102e257806385f438c1146102ea57600080fd5b80635e3e9fef146102a95780636f8b44b0146102bc57600080fd5b8063248a9ca31161012f57806336568abe1161011457806336568abe146102835780633f4ba83a146102965780635c975abb1461029e57600080fd5b8063248a9ca31461023f5780632f2ff15d1461027057600080fd5b8063106e629011610160578063106e6290146101b9578063116191b6146101cc57806321e093b11461021857600080fd5b806301ffc9a71461017c57806302d5c899146101a4575b600080fd5b61018f61018a366004610fb4565b6103c9565b60405190151581526020015b60405180910390f35b6101b76101b2366004611026565b610462565b005b6101b76101c73660046110b8565b6105f7565b6101f37f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161019b565b6101f37f000000000000000000000000000000000000000000000000000000000000000081565b61026261024d3660046110eb565b60009081526002602052604090206001015490565b60405190815260200161019b565b6101b761027e366004611104565b61069c565b6101b7610291366004611104565b6106c7565b6101b7610720565b60015460ff1661018f565b6101b76102b7366004611026565b610755565b6101b76102ca3660046110eb565b6108d0565b6101b76102dd3660046110eb565b61093e565b6101b76109e8565b6102627f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b61018f61031f366004611104565b600091825260026020908152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b610262600081565b6102627f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb81565b6101b7610394366004611104565b610a1a565b61026260035481565b6102627f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061045c57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b61046a610a3f565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461049481610a82565b61049c610a8c565b6104c77f00000000000000000000000000000000000000000000000000000000000000008684610acb565b6040517fb8969bd400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063b8969bd490610561907f0000000000000000000000000000000000000000000000000000000000000000908a908a908a908a90600401611179565b600060405180830381600087803b15801561057b57600080fd5b505af115801561058f573d6000803e3d6000fd5b505050508573ffffffffffffffffffffffffffffffffffffffff167fba96f26bdda53eb8c8ba39045dfb4ff39753fbc7a6edcf250a88e75e78d102fe8686866040516105dd939291906111d6565b60405180910390a2506105f06001600055565b5050505050565b6105ff610a3f565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461062981610a82565b610631610a8c565b61063c848484610acb565b8373ffffffffffffffffffffffffffffffffffffffff167f884edad9ce6fa2440d8a54cc123490eb96d2768479d49ff9c7366125a94243648460405161068491815260200190565b60405180910390a2506106976001600055565b505050565b6000828152600260205260409020600101546106b781610a82565b6106c18383610c53565b50505050565b73ffffffffffffffffffffffffffffffffffffffff81163314610716576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6106978282610d53565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61074a81610a82565b610752610e12565b50565b61075d610a3f565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461078781610a82565b61078f610a8c565b6107ba7f00000000000000000000000000000000000000000000000000000000000000008684610acb565b6040517f5131ab5900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690635131ab5990610854907f0000000000000000000000000000000000000000000000000000000000000000908a908a908a908a90600401611179565b600060405180830381600087803b15801561086e57600080fd5b505af1158015610882573d6000803e3d6000fd5b505050508573ffffffffffffffffffffffffffffffffffffffff167f7772f56296d3a5202974a45c61c9188d844ab4d6eeb18c851e4b8d5384ca6ced8686866040516105dd939291906111d6565b7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb6108fa81610a82565b610902610a8c565b60038290556040518281527f7810bd47de260c3e9ee10061cf438099dd12256c79485f12f94dbccc981e806c9060200160405180910390a15050565b610946610a8c565b6040517f79cc6790000000000000000000000000000000000000000000000000000000008152336004820152602481018290527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16906379cc679090604401600060405180830381600087803b1580156109d457600080fd5b505af11580156105f0573d6000803e3d6000fd5b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610a1281610a82565b610752610e8f565b600082815260026020526040902060010154610a3581610a82565b6106c18383610d53565b600260005403610a7b576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b6107528133610ee8565b60015460ff1615610ac9576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6003547f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b39573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b5d91906111f9565b610b679084611212565b1115610b9f576040517fc30436e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f1e458bee00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff848116600483015260248201849052604482018390527f00000000000000000000000000000000000000000000000000000000000000001690631e458bee90606401600060405180830381600087803b158015610c3657600080fd5b505af1158015610c4a573d6000803e3d6000fd5b50505050505050565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff16610d4b57600083815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff86168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055610ce93390565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a450600161045c565b50600061045c565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff1615610d4b57600083815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8616808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a450600161045c565b610e1a610f78565b600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b610e97610a8c565b600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016811790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25833610e65565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16610f74576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff821660048201526024810183905260440160405180910390fd5b5050565b60015460ff16610ac9576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060208284031215610fc657600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610ff657600080fd5b9392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461102157600080fd5b919050565b60008060008060006080868803121561103e57600080fd5b61104786610ffd565b945060208601359350604086013567ffffffffffffffff81111561106a57600080fd5b8601601f8101881361107b57600080fd5b803567ffffffffffffffff81111561109257600080fd5b8860208284010111156110a457600080fd5b959894975060200195606001359392505050565b6000806000606084860312156110cd57600080fd5b6110d684610ffd565b95602085013595506040909401359392505050565b6000602082840312156110fd57600080fd5b5035919050565b6000806040838503121561111757600080fd5b8235915061112760208401610ffd565b90509250929050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff8616815273ffffffffffffffffffffffffffffffffffffffff851660208201528360408201526080606082015260006111cb608083018486611130565b979650505050505050565b8381526040602082015260006111f0604083018486611130565b95945050505050565b60006020828403121561120b57600080fd5b5051919050565b8082018082111561045c577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea2646970667358221220de5fa55e0ca79ea2f08903481d01ea00bbbf346b9cfba44e12a2dd6f3a6f2e8a64736f6c634300081a00336080604052348015600f57600080fd5b506001600055610d3a806100246000396000f3fe6080604052600436106100635760003560e01c8063c513169111610040578063c5131691146100c1578063e04d4f97146100e1578063f05b6abf146100f457005b8063357fc5a21461006c5780636ed701691461008c5780638fcaa0b5146100a157005b3661006a57005b005b34801561007857600080fd5b5061006a6100873660046106c0565b610114565b34801561009857600080fd5b5061006a6101aa565b3480156100ad57600080fd5b5061006a6100bc3660046106fc565b6101df565b3480156100cd57600080fd5b5061006a6100dc3660046106c0565b61021e565b61006a6100ef366004610895565b6102f9565b34801561010057600080fd5b5061006a61010f366004610981565b61033d565b61011c610372565b61013e73ffffffffffffffffffffffffffffffffffffffff83163383866103b5565b604080513381526020810185905273ffffffffffffffffffffffffffffffffffffffff848116828401528316606082015290517f2b58128f24a9f59127cc5b5430d70542b22220f2d9adaa86e442b816ab98af609181900360800190a16101a56001600055565b505050565b6040513381527fbcaadb46b82a48af60b608f58959ae6b8310d1b0a0d094c2e9ec3208ed39f2a09060200160405180910390a1565b7f0d3f65f00e631663aa85c96330b5c7a83bb29af3630c0063776f985edc3037aa33838360405161021293929190610a6b565b60405180910390a15050565b610226610372565b6000610233600285610ad5565b90508060000361026f576040517f1f2a200500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61029173ffffffffffffffffffffffffffffffffffffffff84163384846103b5565b604080513381526020810183905273ffffffffffffffffffffffffffffffffffffffff858116828401528416606082015290517f2b58128f24a9f59127cc5b5430d70542b22220f2d9adaa86e442b816ab98af609181900360800190a1506101a56001600055565b7f1f1ff1f5fb41346850b2f5c04e6c767e2f1c8a525c5c0c5cdb60cdf3ca5f62fa3334858585604051610330959493929190610b7e565b60405180910390a1505050565b7f74a53cd528a921fca7dbdee62f86819051d3cc98f214951f4238e8843f20b146338484846040516103309493929190610c08565b6002600054036103ae576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b6040805173ffffffffffffffffffffffffffffffffffffffff85811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd0000000000000000000000000000000000000000000000000000000017905261044a908590610450565b50505050565b600061047273ffffffffffffffffffffffffffffffffffffffff8416836104eb565b905080516000141580156104975750808060200190518101906104959190610ccb565b155b156101a5576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff841660048201526024015b60405180910390fd5b60606104f983836000610500565b9392505050565b60608147101561053e576040517fcd7860590000000000000000000000000000000000000000000000000000000081523060048201526024016104e2565b6000808573ffffffffffffffffffffffffffffffffffffffff1684866040516105679190610ce8565b60006040518083038185875af1925050503d80600081146105a4576040519150601f19603f3d011682016040523d82523d6000602084013e6105a9565b606091505b50915091506105b98683836105c3565b9695505050505050565b6060826105d8576105d382610652565b6104f9565b81511580156105fc575073ffffffffffffffffffffffffffffffffffffffff84163b155b1561064b576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff851660048201526024016104e2565b50806104f9565b8051156106625780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50565b803573ffffffffffffffffffffffffffffffffffffffff811681146106bb57600080fd5b919050565b6000806000606084860312156106d557600080fd5b833592506106e560208501610697565b91506106f360408501610697565b90509250925092565b6000806020838503121561070f57600080fd5b823567ffffffffffffffff81111561072657600080fd5b8301601f8101851361073757600080fd5b803567ffffffffffffffff81111561074e57600080fd5b85602082840101111561076057600080fd5b6020919091019590945092505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156107e6576107e6610770565b604052919050565b600082601f8301126107ff57600080fd5b813567ffffffffffffffff81111561081957610819610770565b61084a60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8401160161079f565b81815284602083860101111561085f57600080fd5b816020850160208301376000918101602001919091529392505050565b801515811461069457600080fd5b80356106bb8161087c565b6000806000606084860312156108aa57600080fd5b833567ffffffffffffffff8111156108c157600080fd5b6108cd868287016107ee565b9350506020840135915060408401356108e58161087c565b809150509250925092565b600067ffffffffffffffff82111561090a5761090a610770565b5060051b60200190565b600082601f83011261092557600080fd5b8135610938610933826108f0565b61079f565b8082825260208201915060208360051b86010192508583111561095a57600080fd5b602085015b8381101561097757803583526020928301920161095f565b5095945050505050565b60008060006060848603121561099657600080fd5b833567ffffffffffffffff8111156109ad57600080fd5b8401601f810186136109be57600080fd5b80356109cc610933826108f0565b8082825260208201915060208360051b8501019250888311156109ee57600080fd5b602084015b83811015610a3057803567ffffffffffffffff811115610a1257600080fd5b610a218b6020838901016107ee565b845250602092830192016109f3565b509550505050602084013567ffffffffffffffff811115610a5057600080fd5b610a5c86828701610914565b9250506106f36040850161088a565b73ffffffffffffffffffffffffffffffffffffffff8416815260406020820152816040820152818360608301376000818301606090810191909152601f9092017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016010192915050565b600082610b0b577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60005b83811015610b2b578181015183820152602001610b13565b50506000910152565b60008151808452610b4c816020860160208601610b10565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b73ffffffffffffffffffffffffffffffffffffffff8616815284602082015260a060408201526000610bb360a0830186610b34565b6060830194909452509015156080909101529392505050565b600081518084526020840193506020830160005b82811015610bfe578151865260209586019590910190600101610be0565b5093949350505050565b60006080820173ffffffffffffffffffffffffffffffffffffffff871683526080602084015280865180835260a08501915060a08160051b86010192506020880160005b82811015610c9b577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60878603018452610c86858351610b34565b94506020938401939190910190600101610c4c565b505050508281036040840152610cb18186610bcc565b915050610cc2606083018415159052565b95945050505050565b600060208284031215610cdd57600080fd5b81516104f98161087c565b60008251610cfa818460208701610b10565b919091019291505056fea2646970667358221220556072e1abafc3c4063b8cce832228b4f309b93726aaa6a6dfab20cb880c6d1864736f6c634300081a00336080604052348015600f57600080fd5b5060405161080c38038061080c833981016040819052602c916050565b600080546001600160a01b0319166001600160a01b0392909216919091179055607e565b600060208284031215606157600080fd5b81516001600160a01b0381168114607757600080fd5b9392505050565b61077f8061008d6000396000f3fe608060405234801561001057600080fd5b50600436106100415760003560e01c80630abd890514610046578063116191b61461005b578063865b36f6146100a4575b600080fd5b6100596100543660046104c4565b6100b7565b005b60005461007b9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b6100596100b236600461057f565b6102af565b60008383836040516024016100ce93929190610674565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe04d4f970000000000000000000000000000000000000000000000000000000017905260005490517f095ea7b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff91821660048201526024810189905291925086169063095ea7b3906044016020604051808303816000875af11580156101be573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101e2919061069e565b610218576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000546040517f7993c1e000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff90911690637993c1e090610274908a908a908a9087906004016106c2565b600060405180830381600087803b15801561028e57600080fd5b505af11580156102a2573d6000803e3d6000fd5b5050505050505050505050565b60008383836040516024016102c693929190610674565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe04d4f970000000000000000000000000000000000000000000000000000000017905260005490517f5d40e17800000000000000000000000000000000000000000000000000000000815291925073ffffffffffffffffffffffffffffffffffffffff1690635d40e1789061039690899089908690600401610714565b600060405180830381600087803b1580156103b057600080fd5b505af11580156103c4573d6000803e3d6000fd5b50505050505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600082601f83011261041057600080fd5b81356020830160008067ffffffffffffffff841115610431576104316103d0565b506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f85018116603f0116810181811067ffffffffffffffff8211171561047e5761047e6103d0565b60405283815290508082840187101561049657600080fd5b838360208301376000602085830101528094505050505092915050565b80151581146104c157600080fd5b50565b60008060008060008060c087890312156104dd57600080fd5b863567ffffffffffffffff8111156104f457600080fd5b61050089828a016103ff565b96505060208701359450604087013573ffffffffffffffffffffffffffffffffffffffff8116811461053157600080fd5b9350606087013567ffffffffffffffff81111561054d57600080fd5b61055989828a016103ff565b9350506080870135915060a0870135610571816104b3565b809150509295509295509295565b600080600080600060a0868803121561059757600080fd5b853567ffffffffffffffff8111156105ae57600080fd5b6105ba888289016103ff565b95505060208601359350604086013567ffffffffffffffff8111156105de57600080fd5b6105ea888289016103ff565b935050606086013591506080860135610602816104b3565b809150509295509295909350565b6000815180845260005b818110156106365760208185018101518683018201520161061a565b5060006020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b6060815260006106876060830186610610565b602083019490945250901515604090910152919050565b6000602082840312156106b057600080fd5b81516106bb816104b3565b9392505050565b6080815260006106d56080830187610610565b85602084015273ffffffffffffffffffffffffffffffffffffffff8516604084015282810360608401526107098185610610565b979650505050505050565b6060815260006107276060830186610610565b846020840152828103604084015261073f8185610610565b969550505050505056fea26469706673582212202d9e7d32ef6522050432c1694ddb8cfdc9122adb07ccb90fba239639e4abfd7c64736f6c634300081a0033608060405234801561001057600080fd5b50604051610b3f380380610b3f83398101604081905261002f916100b9565b600380546001600160a01b038086166001600160a01b0319928316179092556004805485841690831617905560058054928416929091169190911790556040517f80699e81136d69cb8367ad52a994e25c722a86da654b561d0c14b61a777e7ac590600090a15050506100fc565b80516001600160a01b03811681146100b457600080fd5b919050565b6000806000606084860312156100ce57600080fd5b6100d78461009d565b92506100e56020850161009d565b91506100f36040850161009d565b90509250925092565b610a348061010b6000396000f3fe608060405234801561001057600080fd5b50600436106100c95760003560e01c806397770dff11610081578063d7fd7afb1161005b578063d7fd7afb146101f2578063d936a01214610220578063ee2815ba1461024057600080fd5b806397770dff146101b9578063a7cb0507146101cc578063c63585cc146101df57600080fd5b8063513a9c05116100b2578063513a9c0514610143578063569541b914610179578063842da36d1461019957600080fd5b80630be15547146100ce5780633c669d551461012e575b600080fd5b6101046100dc36600461071e565b60016020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b61014161013c366004610760565b610253565b005b61010461015136600461071e565b60026020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b6003546101049073ffffffffffffffffffffffffffffffffffffffff1681565b6005546101049073ffffffffffffffffffffffffffffffffffffffff1681565b6101416101c73660046107fd565b6103a0565b6101416101da36600461081f565b610419565b6101046101ed366004610841565b610467565b61021261020036600461071e565b60006020819052908152604090205481565b604051908152602001610125565b6004546101049073ffffffffffffffffffffffffffffffffffffffff1681565b61014161024e366004610884565b61059c565b604080516080810182526000606082019081528152336020820152468183015290517fa9059cbb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff87811660048301526024820186905286169063a9059cbb906044016020604051808303816000875af11580156102e7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061030b91906108b0565b506040517fde43156e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff87169063de43156e90610366908490899089908990899060040161091b565b600060405180830381600087803b15801561038057600080fd5b505af1158015610394573d6000803e3d6000fd5b50505050505050505050565b600380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527fdba79d534382d1a8ae108e4c8ecb27c6ae42ab8b91d44eedf88bd329f3868d5e9060200160405180910390a150565b6000828152602081815260409182902083905581518481529081018390527f49f492222906ac486c3c1401fa545626df1f0c0e5a77a05597ea2ed66af9850d91015b60405180910390a15050565b60008060006104768585610620565b6040517fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606084811b8216602084015283901b166034820152919350915086906048016040516020818303038152906040528051906020012060405160200161055c9291907fff00000000000000000000000000000000000000000000000000000000000000815260609290921b7fffffffffffffffffffffffffffffffffffffffff00000000000000000000000016600183015260158201527f96e8ac4277198ff8b6f785478aa9a39f403cb768dd02cbee326c3e7da348845f603582015260550190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291905280516020909101209695505050505050565b60008281526001602090815260409182902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff85169081179091558251858152918201527fd1b36d30f6248e97c473b4d1348ca164a4ef6759022f54a58ec200326c39c45d910161045b565b6000808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603610688576040517fcb1e7cfe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16106106c25782846106c5565b83835b909250905073ffffffffffffffffffffffffffffffffffffffff8216610717576040517f78b507da00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b9250929050565b60006020828403121561073057600080fd5b5035919050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461075b57600080fd5b919050565b60008060008060006080868803121561077857600080fd5b61078186610737565b945061078f60208701610737565b935060408601359250606086013567ffffffffffffffff8111156107b257600080fd5b8601601f810188136107c357600080fd5b803567ffffffffffffffff8111156107da57600080fd5b8860208284010111156107ec57600080fd5b959894975092955050506020019190565b60006020828403121561080f57600080fd5b61081882610737565b9392505050565b6000806040838503121561083257600080fd5b50508035926020909101359150565b60008060006060848603121561085657600080fd5b61085f84610737565b925061086d60208501610737565b915061087b60408501610737565b90509250925092565b6000806040838503121561089757600080fd5b823591506108a760208401610737565b90509250929050565b6000602082840312156108c257600080fd5b8151801515811461081857600080fd5b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b60808152600086516060608084015280518060e085015260005b81811015610953576020818401810151610100878401015201610935565b5060008482016101000152602089015173ffffffffffffffffffffffffffffffffffffffff811660a0860152601f9091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168401915050604088015160c084015273ffffffffffffffffffffffffffffffffffffffff871660208401528560408401526101008382030160608401526109f2610100820185876108d2565b9897505050505050505056fea264697066735822122044450a00a3ccd112d5abf008f947389875d330f56afa78b6ab0863159c2d87f664736f6c634300081a003360e060405234801561001057600080fd5b50604051611bb9380380611bb983398101604081905261002f9161020e565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461006357604051632b2add3d60e01b815260040160405180910390fd5b6001600160a01b038216158061008057506001600160a01b038116155b1561009e5760405163d92e233d60e01b815260040160405180910390fd5b60066100aa8982610360565b5060076100b78882610360565b5060ff861660c05260808590528360028111156100d6576100d661041e565b60a08160028111156100ea576100ea61041e565b905250600192909255600080546001600160a01b039283166001600160a01b03199182161790915560088054929093169116179055506104349350505050565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261015157600080fd5b81516001600160401b0381111561016a5761016a61012a565b604051601f8201601f19908116603f011681016001600160401b03811182821017156101985761019861012a565b6040528181528382016020018510156101b057600080fd5b60005b828110156101cf576020818601810151838301820152016101b3565b506000918101602001919091529392505050565b8051600381106101f257600080fd5b919050565b80516001600160a01b03811681146101f257600080fd5b600080600080600080600080610100898b03121561022b57600080fd5b88516001600160401b0381111561024157600080fd5b61024d8b828c01610140565b60208b015190995090506001600160401b0381111561026b57600080fd5b6102778b828c01610140565b975050604089015160ff8116811461028e57600080fd5b60608a015190965094506102a460808a016101e3565b60a08a015190945092506102ba60c08a016101f7565b91506102c860e08a016101f7565b90509295985092959890939650565b600181811c908216806102eb57607f821691505b60208210810361030b57634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111561035b57806000526020600020601f840160051c810160208510156103385750805b601f840160051c820191505b818110156103585760008155600101610344565b50505b505050565b81516001600160401b038111156103795761037961012a565b61038d8161038784546102d7565b84610311565b6020601f8211600181146103c157600083156103a95750848201515b600019600385901b1c1916600184901b178455610358565b600084815260208120601f198516915b828110156103f157878501518255602094850194600190920191016103d1565b508482101561040f5786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b634e487b7160e01b600052602160045260246000fd5b60805160a05160c05161174861047160003960006102170152600061033a0152600081816102eb01528181610ad70152610bdd01526117486000f3fe608060405234801561001057600080fd5b50600436106101985760003560e01c80638b851b95116100e3578063ccc775991161008c578063eddeb12311610066578063eddeb12314610431578063f2441b3214610444578063f687d12a1461046457600080fd5b8063ccc77599146103a4578063d9eeebed146103b7578063dd62ed3e146103eb57600080fd5b8063a9059cbb116100bd578063a9059cbb14610369578063c70126261461037c578063c835d7cc1461038f57600080fd5b80638b851b951461030d57806395d89b411461032d578063a3413d031461033557600080fd5b80633ce4a5bc116101455780634d8943bb1161011f5780634d8943bb146102a757806370a08231146102b057806385e1f4d0146102e657600080fd5b80633ce4a5bc1461024157806342966c681461028157806347e7ef241461029457600080fd5b806318160ddd1161017657806318160ddd146101f557806323b872dd146101fd578063313ce5671461021057600080fd5b806306fdde031461019d578063091d2788146101bb578063095ea7b3146101d2575b600080fd5b6101a5610477565b6040516101b29190611327565b60405180910390f35b6101c460015481565b6040519081526020016101b2565b6101e56101e0366004611366565b610509565b60405190151581526020016101b2565b6005546101c4565b6101e561020b366004611392565b610520565b60405160ff7f00000000000000000000000000000000000000000000000000000000000000001681526020016101b2565b61025c73735b14bb79463307aacbed86daf3322b1e6226ab81565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101b2565b6101e561028f3660046113d3565b6105b7565b6101e56102a2366004611366565b6105cb565b6101c460025481565b6101c46102be3660046113ec565b73ffffffffffffffffffffffffffffffffffffffff1660009081526003602052604090205490565b6101c47f000000000000000000000000000000000000000000000000000000000000000081565b60085461025c9073ffffffffffffffffffffffffffffffffffffffff1681565b6101a561071f565b61035c7f000000000000000000000000000000000000000000000000000000000000000081565b6040516101b29190611409565b6101e5610377366004611366565b61072e565b6101e561038a366004611479565b61073b565b6103a261039d3660046113ec565b61088a565b005b6103a26103b23660046113ec565b61099e565b6103bf610aab565b6040805173ffffffffffffffffffffffffffffffffffffffff90931683526020830191909152016101b2565b6101c46103f9366004611571565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260046020908152604080832093909416825291909152205490565b6103a261043f3660046113d3565b610cc9565b60005461025c9073ffffffffffffffffffffffffffffffffffffffff1681565b6103a26104723660046113d3565b610d4b565b606060068054610486906115aa565b80601f01602080910402602001604051908101604052809291908181526020018280546104b2906115aa565b80156104ff5780601f106104d4576101008083540402835291602001916104ff565b820191906000526020600020905b8154815290600101906020018083116104e257829003601f168201915b5050505050905090565b6000610516338484610dcd565b5060015b92915050565b600061052d848484610ed6565b73ffffffffffffffffffffffffffffffffffffffff8416600090815260046020908152604080832033845290915290205482811015610598576040517f10bad14700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6105ac85336105a7868561162c565b610dcd565b506001949350505050565b60006105c33383611091565b506001919050565b60003373735b14bb79463307aacbed86daf3322b1e6226ab14801590610609575060005473ffffffffffffffffffffffffffffffffffffffff163314155b801561062d575060085473ffffffffffffffffffffffffffffffffffffffff163314155b15610664576040517fddb5de5e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61066e83836111d3565b6040517f735b14bb79463307aacbed86daf3322b1e6226ab000000000000000000000000602082015273ffffffffffffffffffffffffffffffffffffffff8416907f67fc7bdaed5b0ec550d8706b87d60568ab70c6b781263c70101d54cd1564aab390603401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529082905261070e91869061163f565b60405180910390a250600192915050565b606060078054610486906115aa565b6000610516338484610ed6565b6000806000610748610aab565b6040517f23b872dd00000000000000000000000000000000000000000000000000000000815233600482015273735b14bb79463307aacbed86daf3322b1e6226ab602482015260448101829052919350915073ffffffffffffffffffffffffffffffffffffffff8316906323b872dd906064016020604051808303816000875af11580156107da573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107fe9190611661565b610834576040517f0a7cd6d600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61083e3385611091565b60025460405133917f9ffbffc04a397460ee1dbe8c9503e098090567d6b7f4b3c02a8617d800b6d9559161087791899189918791611683565b60405180910390a2506001949350505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab146108d7576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116610924576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527fd55614e962c5fd6ece71614f6348d702468a997a394dd5e5c1677950226d97ae906020015b60405180910390a150565b3373735b14bb79463307aacbed86daf3322b1e6226ab146109eb576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116610a38576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600880547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527f88815d964e380677e86d817e7d65dea59cb7b4c3b5b7a0c8ec7ea4a74f90a38790602001610993565b600080546040517f0be155470000000000000000000000000000000000000000000000000000000081527f000000000000000000000000000000000000000000000000000000000000000060048201528291829173ffffffffffffffffffffffffffffffffffffffff90911690630be1554790602401602060405180830381865afa158015610b3e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b6291906116b2565b905073ffffffffffffffffffffffffffffffffffffffff8116610bb1576040517f78fff39600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080546040517fd7fd7afb0000000000000000000000000000000000000000000000000000000081527f0000000000000000000000000000000000000000000000000000000000000000600482015273ffffffffffffffffffffffffffffffffffffffff9091169063d7fd7afb90602401602060405180830381865afa158015610c40573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c6491906116cf565b905080600003610ca0576040517fe661aed000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060025460015483610cb391906116e8565b610cbd91906116ff565b92959294509192505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610d16576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60028190556040518181527fef13af88e424b5d15f49c77758542c1938b08b8b95b91ed0751f98ba99000d8f90602001610993565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610d98576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018190556040518181527fff5788270f43bfc1ca41c503606d2594aa3023a1a7547de403a3e2f146a4a80a90602001610993565b73ffffffffffffffffffffffffffffffffffffffff8316610e1a576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216610e67576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff83811660008181526004602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8316610f23576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216610f70576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff831660009081526003602052604090205481811015610fd0576040517ffe382aa700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610fda828261162c565b73ffffffffffffffffffffffffffffffffffffffff808616600090815260036020526040808220939093559085168152908120805484929061101d9084906116ff565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161108391815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff82166110de576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff82166000908152600360205260409020548181101561113e576040517ffe382aa700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611148828261162c565b73ffffffffffffffffffffffffffffffffffffffff84166000908152600360205260408120919091556005805484929061118390849061162c565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90602001610ec9565b73ffffffffffffffffffffffffffffffffffffffff8216611220576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b806005600082825461123291906116ff565b909155505073ffffffffffffffffffffffffffffffffffffffff82166000908152600360205260408120805483929061126c9084906116ff565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6000815180845260005b818110156112e9576020818501810151868301820152016112cd565b5060006020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b60208152600061133a60208301846112c3565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff8116811461136357600080fd5b50565b6000806040838503121561137957600080fd5b823561138481611341565b946020939093013593505050565b6000806000606084860312156113a757600080fd5b83356113b281611341565b925060208401356113c281611341565b929592945050506040919091013590565b6000602082840312156113e557600080fd5b5035919050565b6000602082840312156113fe57600080fd5b813561133a81611341565b6020810160038310611444577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000806040838503121561148c57600080fd5b823567ffffffffffffffff8111156114a357600080fd5b8301601f810185136114b457600080fd5b803567ffffffffffffffff8111156114ce576114ce61144a565b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8501160116810181811067ffffffffffffffff8211171561153a5761153a61144a565b60405281815282820160200187101561155257600080fd5b8160208401602083013760006020928201830152969401359450505050565b6000806040838503121561158457600080fd5b823561158f81611341565b9150602083013561159f81611341565b809150509250929050565b600181811c908216806115be57607f821691505b6020821081036115f7577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8181038181111561051a5761051a6115fd565b60408152600061165260408301856112c3565b90508260208301529392505050565b60006020828403121561167357600080fd5b8151801515811461133a57600080fd5b60808152600061169660808301876112c3565b6020830195909552506040810192909252606090910152919050565b6000602082840312156116c457600080fd5b815161133a81611341565b6000602082840312156116e157600080fd5b5051919050565b808202811582820484141761051a5761051a6115fd565b8082018082111561051a5761051a6115fd56fea26469706673582212204013e39523742118b3f2227e145ee7e48176ba6aebead33c596dca2acb59a74c64736f6c634300081a0033a2646970667358221220c33784e2634913f051879de657c0fb3cb6ade526391b130eb043a348f788b0c564736f6c634300081a0033", } // GatewayEVMZEVMTestABI is the input ABI used to generate the binding from. diff --git a/v2/pkg/gatewayzevm.sol/gatewayzevm.go b/v2/pkg/gatewayzevm.sol/gatewayzevm.go index 08bb6b91..1881db71 100644 --- a/v2/pkg/gatewayzevm.sol/gatewayzevm.go +++ b/v2/pkg/gatewayzevm.sol/gatewayzevm.go @@ -46,7 +46,7 @@ type ZContext struct { // GatewayZEVMMetaData contains all meta data concerning the GatewayZEVM contract. var GatewayZEVMMetaData = &bind.MetaData{ ABI: "[{\"type\":\"constructor\",\"inputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"receive\",\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"DEFAULT_ADMIN_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"FUNGIBLE_MODULE_ADDRESS\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"PAUSER_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"UPGRADE_INTERFACE_VERSION\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"call\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"chainId\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"message\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"deposit\",\"inputs\":[{\"name\":\"zrc20\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"depositAndCall\",\"inputs\":[{\"name\":\"context\",\"type\":\"tuple\",\"internalType\":\"structzContext\",\"components\":[{\"name\":\"origin\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"sender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"chainID\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"message\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"depositAndCall\",\"inputs\":[{\"name\":\"context\",\"type\":\"tuple\",\"internalType\":\"structzContext\",\"components\":[{\"name\":\"origin\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"sender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"chainID\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"zrc20\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"message\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"depositAndRevert\",\"inputs\":[{\"name\":\"context\",\"type\":\"tuple\",\"internalType\":\"structrevertContext\",\"components\":[{\"name\":\"origin\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"sender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"chainID\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"zrc20\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"message\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"execute\",\"inputs\":[{\"name\":\"context\",\"type\":\"tuple\",\"internalType\":\"structzContext\",\"components\":[{\"name\":\"origin\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"sender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"chainID\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"zrc20\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"message\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"executeRevert\",\"inputs\":[{\"name\":\"context\",\"type\":\"tuple\",\"internalType\":\"structrevertContext\",\"components\":[{\"name\":\"origin\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"sender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"chainID\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"zrc20\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"message\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"getRoleAdmin\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"grantRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"hasRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"initialize\",\"inputs\":[{\"name\":\"zetaToken_\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"admin_\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"pause\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"paused\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"proxiableUUID\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"renounceRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"callerConfirmation\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"revokeRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"supportsInterface\",\"inputs\":[{\"name\":\"interfaceId\",\"type\":\"bytes4\",\"internalType\":\"bytes4\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"unpause\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"upgradeToAndCall\",\"inputs\":[{\"name\":\"newImplementation\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"withdraw\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"zrc20\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"withdraw\",\"inputs\":[{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"chainId\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"withdrawAndCall\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"zrc20\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"message\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"withdrawAndCall\",\"inputs\":[{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"chainId\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"message\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"zetaToken\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"event\",\"name\":\"Call\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"chainId\",\"type\":\"uint256\",\"indexed\":true,\"internalType\":\"uint256\"},{\"name\":\"receiver\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"message\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Initialized\",\"inputs\":[{\"name\":\"version\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Paused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleAdminChanged\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"previousAdminRole\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"newAdminRole\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleGranted\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleRevoked\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Unpaused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Upgraded\",\"inputs\":[{\"name\":\"implementation\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Withdrawal\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"chainId\",\"type\":\"uint256\",\"indexed\":true,\"internalType\":\"uint256\"},{\"name\":\"receiver\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"zrc20\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"gasfee\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"protocolFlatFee\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"message\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"AccessControlBadConfirmation\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"AccessControlUnauthorizedAccount\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"neededRole\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"type\":\"error\",\"name\":\"AddressEmptyCode\",\"inputs\":[{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"CallerIsNotFungibleModule\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ERC1967InvalidImplementation\",\"inputs\":[{\"name\":\"implementation\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"ERC1967NonPayable\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"EnforcedPause\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ExpectedPause\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"FailedInnerCall\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"FailedZetaSent\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"GasFeeTransferFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientZRC20Amount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientZetaAmount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidInitialization\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidTarget\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NotInitializing\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OnlyWZETAOrFungible\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ReentrancyGuardReentrantCall\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"UUPSUnauthorizedCallContext\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"UUPSUnsupportedProxiableUUID\",\"inputs\":[{\"name\":\"slot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"type\":\"error\",\"name\":\"WithdrawalFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZRC20BurnFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZRC20DepositFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZRC20TransferFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZeroAddress\",\"inputs\":[]}]", - Bin: "0x60a06040523060805234801561001457600080fd5b5061001d610022565b6100d4565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100725760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146100d15780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b6080516132346100fd600039600081816123650152818161238e015261254601526132346000f3fe6080604052600436106101bb5760003560e01c80635af65967116100ec578063a217fddf1161008a578063c39aca3711610064578063c39aca3714610600578063d547741f14610620578063e63ab1e914610640578063f45346dc1461067457600080fd5b8063a217fddf14610575578063ad3cb1cc1461058a578063bcf7f32b146105e057600080fd5b80637993c1e0116100c65780637993c1e0146104bb57806380bd3d03146104db5780638456cb59146104fb57806391d148541461051057600080fd5b80635af65967146104445780635c975abb146104645780635d40e1781461049b57600080fd5b806336568abe11610159578063441a3e7011610133578063441a3e70146103dc578063485cc955146103fc5780634f1ef2861461041c57806352d1902d1461042f57600080fd5b806336568abe1461037f5780633ce4a5bc1461039f5780633f4ba83a146103c757600080fd5b806321e093b11161019557806321e093b1146102aa578063248a9ca3146102e25780632f2ff15d1461033f578063309f50041461035f57600080fd5b806301ffc9a714610235578063135390f91461026a57806321501a951461028a57600080fd5b36610230576101c8610694565b6000546001600160a01b031633148015906101f757503373735b14bb79463307aacbed86daf3322b1e6226ab14155b1561022e576040517f229930b200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b005b600080fd5b34801561024157600080fd5b50610255610250366004612a24565b6106f2565b60405190151581526020015b60405180910390f35b34801561027657600080fd5b5061022e610285366004612b3a565b61078b565b34801561029657600080fd5b5061022e6102a5366004612bf6565b6108f9565b3480156102b657600080fd5b506000546102ca906001600160a01b031681565b6040516001600160a01b039091168152602001610261565b3480156102ee57600080fd5b506103316102fd366004612c82565b60009081527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052604090206001015490565b604051908152602001610261565b34801561034b57600080fd5b5061022e61035a366004612c9b565b610ac6565b34801561036b57600080fd5b5061022e61037a366004612ccb565b610b10565b34801561038b57600080fd5b5061022e61039a366004612c9b565b610c7a565b3480156103ab57600080fd5b506102ca73735b14bb79463307aacbed86daf3322b1e6226ab81565b3480156103d357600080fd5b5061022e610cc6565b3480156103e857600080fd5b5061022e6103f7366004612d69565b610cfb565b34801561040857600080fd5b5061022e610417366004612d8b565b610e18565b61022e61042a366004612db9565b61106e565b34801561043b57600080fd5b50610331611089565b34801561045057600080fd5b5061022e61045f366004612ccb565b6110b8565b34801561047057600080fd5b507fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff16610255565b3480156104a757600080fd5b5061022e6104b6366004612e09565b6112c7565b3480156104c757600080fd5b5061022e6104d6366004612e7e565b611381565b3480156104e757600080fd5b5061022e6104f6366004612eb9565b6114f5565b34801561050757600080fd5b5061022e6115e1565b34801561051c57600080fd5b5061025561052b366004612c9b565b60009182527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408084206001600160a01b0393909316845291905290205460ff1690565b34801561058157600080fd5b50610331600081565b34801561059657600080fd5b506105d36040518060400160405280600581526020017f352e302e3000000000000000000000000000000000000000000000000000000081525081565b6040516102619190612f44565b3480156105ec57600080fd5b5061022e6105fb366004612ccb565b611613565b34801561060c57600080fd5b5061022e61061b366004612ccb565b611743565b34801561062c57600080fd5b5061022e61063b366004612c9b565b611952565b34801561064c57600080fd5b506103317f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b34801561068057600080fd5b5061022e61068f366004612f57565b611996565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff16156106f0576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061078557507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b610793611ba5565b61079b610694565b82516000036107d6576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b81600003610810576040517f5d67094f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061081c8383611c26565b90506000336001600160a01b03167fde19dbe881cc0aeeb6e73ce19ac7b5ca695e6be8a076e3eb42292005a7fec1b586858786886001600160a01b0316634d8943bb6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561088d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108b19190612f8e565b6040516108c2959493929190612fa7565b60405180910390a3506108f460017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610946576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61094e610694565b6001600160a01b03831661098e576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b836000036109c8576040517f19c08f4900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03831673735b14bb79463307aacbed86daf3322b1e6226ab14806109fb57506001600160a01b03831630145b15610a32576040517f82d5d76a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610a3c8484611f19565b6000546040517fde43156e0000000000000000000000000000000000000000000000000000000081526001600160a01b038086169263de43156e92610a8d928a9216908990889088906004016130c6565b600060405180830381600087803b158015610aa757600080fd5b505af1158015610abb573d6000803e3d6000fd5b505050505050505050565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020526040902060010154610b00816120e7565b610b0a83836120f1565b50505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610b5d576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610b65610694565b6001600160a01b0385161580610b8257506001600160a01b038316155b15610bb9576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b83600003610bf3576040517f5d67094f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f69582bee0000000000000000000000000000000000000000000000000000000081526001600160a01b038416906369582bee90610c4090899089908990889088906004016130c6565b600060405180830381600087803b158015610c5a57600080fd5b505af1158015610c6e573d6000803e3d6000fd5b50505050505050505050565b6001600160a01b0381163314610cbc576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6108f482826121de565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610cf0816120e7565b610cf86122a2565b50565b610d03611ba5565b610d0b610694565b81600003610d45576040517f19c08f4900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610d638273735b14bb79463307aacbed86daf3322b1e6226ab611f19565b6040517f735b14bb79463307aacbed86daf3322b1e6226ab0000000000000000000000006020820152819033907fde19dbe881cc0aeeb6e73ce19ac7b5ca695e6be8a076e3eb42292005a7fec1b59060340160408051601f198184030181529082905260008054610de3936001600160a01b039091169189918190612fa7565b60405180910390a3610e1460017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b5050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff16600081158015610e635750825b905060008267ffffffffffffffff166001148015610e805750303b155b905081158015610e8e575080155b15610ec5576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001660011785558315610f265784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff16680100000000000000001785555b6001600160a01b0387161580610f4357506001600160a01b038616155b15610f7a576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610f82612332565b610f8a612332565b610f9261233a565b610f9a61234a565b610fa56000876120f1565b50610fd07f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a876120f1565b50600080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03891617905583156110655784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50505050505050565b61107661235a565b61107f8261242a565b610e148282612435565b600061109361253b565b507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc90565b3373735b14bb79463307aacbed86daf3322b1e6226ab14611105576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61110d610694565b6001600160a01b038516158061112a57506001600160a01b038316155b15611161576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8360000361119b576040517f5d67094f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03831673735b14bb79463307aacbed86daf3322b1e6226ab14806111ce57506001600160a01b03831630145b15611205576040517f82d5d76a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f47e7ef240000000000000000000000000000000000000000000000000000000081526001600160a01b038481166004830152602482018690528616906347e7ef24906044016020604051808303816000875af115801561126d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611291919061310d565b610bf3576040517f47d19fab00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6112cf611ba5565b6112d7610694565b8351600003611312576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b82336001600160a01b03167f5322ffbbf9261ff1f8138247942d2b03b28717141ef0a0dd080fc4be9c4e78d38685856040516113509392919061312f565b60405180910390a3610b0a60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b611389611ba5565b611391610694565b84516000036113cc576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b83600003611406576040517f5d67094f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006114128585611c26565b90506000336001600160a01b03167fde19dbe881cc0aeeb6e73ce19ac7b5ca695e6be8a076e3eb42292005a7fec1b5888789868a6001600160a01b0316634d8943bb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611483573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114a79190612f8e565b8a8a6040516114bc979695949392919061315f565b60405180910390a3506114ee60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b5050505050565b6114fd611ba5565b611505610694565b8360000361153f576040517f19c08f4900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61155d8473735b14bb79463307aacbed86daf3322b1e6226ab611f19565b6040517f735b14bb79463307aacbed86daf3322b1e6226ab0000000000000000000000006020820152839033907fde19dbe881cc0aeeb6e73ce19ac7b5ca695e6be8a076e3eb42292005a7fec1b59060340160408051601f198184030181529082905260008054611350936001600160a01b03909116918b9181908b908b9061315f565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61160b816120e7565b610cf861259d565b3373735b14bb79463307aacbed86daf3322b1e6226ab14611660576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611668610694565b6001600160a01b038516158061168557506001600160a01b038316155b156116bc576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b836000036116f6576040517f5d67094f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517fde43156e0000000000000000000000000000000000000000000000000000000081526001600160a01b0384169063de43156e90610c4090899089908990889088906004016130c6565b3373735b14bb79463307aacbed86daf3322b1e6226ab14611790576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611798610694565b6001600160a01b03851615806117b557506001600160a01b038316155b156117ec576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b83600003611826576040517f5d67094f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03831673735b14bb79463307aacbed86daf3322b1e6226ab148061185957506001600160a01b03831630145b15611890576040517f82d5d76a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f47e7ef240000000000000000000000000000000000000000000000000000000081526001600160a01b038481166004830152602482018690528616906347e7ef24906044016020604051808303816000875af11580156118f8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061191c919061310d565b6116f6576040517f47d19fab00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052604090206001015461198c816120e7565b610b0a83836121de565b3373735b14bb79463307aacbed86daf3322b1e6226ab146119e3576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6119eb610694565b6001600160a01b0383161580611a0857506001600160a01b038116155b15611a3f576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b81600003611a79576040517f5d67094f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03811673735b14bb79463307aacbed86daf3322b1e6226ab1480611aac57506001600160a01b03811630145b15611ae3576040517f82d5d76a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f47e7ef240000000000000000000000000000000000000000000000000000000081526001600160a01b038281166004830152602482018490528416906347e7ef24906044016020604051808303816000875af1158015611b4b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b6f919061310d565b6108f4576040517f47d19fab00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0080547ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01611c20576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60029055565b6000806000836001600160a01b031663d9eeebed6040518163ffffffff1660e01b81526004016040805180830381865afa158015611c68573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c8c91906131b4565b6040517f23b872dd00000000000000000000000000000000000000000000000000000000815233600482015273735b14bb79463307aacbed86daf3322b1e6226ab60248201526044810182905291935091506001600160a01b038316906323b872dd906064016020604051808303816000875af1158015611d11573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d35919061310d565b611d6b576040517f0a7cd6d600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f23b872dd000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018690526001600160a01b038516906323b872dd906064016020604051808303816000875af1158015611dd7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611dfb919061310d565b611e31576040517f4dd9ee8d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f42966c68000000000000000000000000000000000000000000000000000000008152600481018690526001600160a01b038516906342966c68906024016020604051808303816000875af1158015611e91573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611eb5919061310d565b611eeb576040517f2c77e05c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b949350505050565b60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b6000546040517f23b872dd000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018490526001600160a01b03909116906323b872dd906064016020604051808303816000875af1158015611f89573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fad919061310d565b611fe3576040517fc7ffc47b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000546040517f2e1a7d4d000000000000000000000000000000000000000000000000000000008152600481018490526001600160a01b0390911690632e1a7d4d90602401600060405180830381600087803b15801561204257600080fd5b505af1158015612056573d6000803e3d6000fd5b505050506000816001600160a01b03168360405160006040518083038185875af1925050503d80600081146120a7576040519150601f19603f3d011682016040523d82523d6000602084013e6120ac565b606091505b50509050806108f4576040517fc7ffc47b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610cf88133612616565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff166121d4576000848152602082815260408083206001600160a01b0387168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905561218a3390565b6001600160a01b0316836001600160a01b0316857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a46001915050610785565b6000915050610785565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff16156121d4576000848152602082815260408083206001600160a01b038716808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339287917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a46001915050610785565b6122aa6126a3565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001681557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a150565b6106f06126fe565b6123426126fe565b6106f0612765565b6123526126fe565b6106f06127b6565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806123f357507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166123e77f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b6001600160a01b031614155b156106f0576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610e14816120e7565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa92505050801561248f575060408051601f3d908101601f1916820190925261248c91810190612f8e565b60015b6124d5576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b03831660048201526024015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8114612531576040517faa1d49a4000000000000000000000000000000000000000000000000000000008152600481018290526024016124cc565b6108f483836127be565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146106f0576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6125a5610694565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011781557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25833612314565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408083206001600160a01b038516845290915290205460ff16610e14576040517fe2517d3f0000000000000000000000000000000000000000000000000000000081526001600160a01b0382166004820152602481018390526044016124cc565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff166106f0576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff166106f0576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61276d6126fe565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055565b611ef36126fe565b6127c782612814565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a280511561280c576108f482826128bc565b610e14612932565b806001600160a01b03163b600003612863576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b03821660048201526024016124cc565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6060600080846001600160a01b0316846040516128d991906131e2565b600060405180830381855af49150503d8060008114612914576040519150601f19603f3d011682016040523d82523d6000602084013e612919565b606091505b509150915061292985838361296a565b95945050505050565b34156106f0576040517fb398979f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60608261297f5761297a826129e2565b6129db565b815115801561299657506001600160a01b0384163b155b156129d8576040517f9996b3150000000000000000000000000000000000000000000000000000000081526001600160a01b03851660048201526024016124cc565b50805b9392505050565b8051156129f25780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060208284031215612a3657600080fd5b81357fffffffff00000000000000000000000000000000000000000000000000000000811681146129db57600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600082601f830112612aa657600080fd5b813567ffffffffffffffff811115612ac057612ac0612a66565b604051601f19603f601f19601f8501160116810181811067ffffffffffffffff82111715612af057612af0612a66565b604052818152838201602001851015612b0857600080fd5b816020850160208301376000918101602001919091529392505050565b6001600160a01b0381168114610cf857600080fd5b600080600060608486031215612b4f57600080fd5b833567ffffffffffffffff811115612b6657600080fd5b612b7286828701612a95565b935050602084013591506040840135612b8a81612b25565b809150509250925092565b600060608284031215612ba757600080fd5b50919050565b60008083601f840112612bbf57600080fd5b50813567ffffffffffffffff811115612bd757600080fd5b602083019150836020828501011115612bef57600080fd5b9250929050565b600080600080600060808688031215612c0e57600080fd5b853567ffffffffffffffff811115612c2557600080fd5b612c3188828901612b95565b955050602086013593506040860135612c4981612b25565b9250606086013567ffffffffffffffff811115612c6557600080fd5b612c7188828901612bad565b969995985093965092949392505050565b600060208284031215612c9457600080fd5b5035919050565b60008060408385031215612cae57600080fd5b823591506020830135612cc081612b25565b809150509250929050565b60008060008060008060a08789031215612ce457600080fd5b863567ffffffffffffffff811115612cfb57600080fd5b612d0789828a01612b95565b9650506020870135612d1881612b25565b9450604087013593506060870135612d2f81612b25565b9250608087013567ffffffffffffffff811115612d4b57600080fd5b612d5789828a01612bad565b979a9699509497509295939492505050565b60008060408385031215612d7c57600080fd5b50508035926020909101359150565b60008060408385031215612d9e57600080fd5b8235612da981612b25565b91506020830135612cc081612b25565b60008060408385031215612dcc57600080fd5b8235612dd781612b25565b9150602083013567ffffffffffffffff811115612df357600080fd5b612dff85828601612a95565b9150509250929050565b60008060008060608587031215612e1f57600080fd5b843567ffffffffffffffff811115612e3657600080fd5b612e4287828801612a95565b94505060208501359250604085013567ffffffffffffffff811115612e6657600080fd5b612e7287828801612bad565b95989497509550505050565b600080600080600060808688031215612e9657600080fd5b853567ffffffffffffffff811115612ead57600080fd5b612c3188828901612a95565b60008060008060608587031215612ecf57600080fd5b8435935060208501359250604085013567ffffffffffffffff811115612e6657600080fd5b60005b83811015612f0f578181015183820152602001612ef7565b50506000910152565b60008151808452612f30816020860160208601612ef4565b601f01601f19169290920160200192915050565b6020815260006129db6020830184612f18565b600080600060608486031215612f6c57600080fd5b8335612f7781612b25565b9250602084013591506040840135612b8a81612b25565b600060208284031215612fa057600080fd5b5051919050565b60c081526000612fba60c0830188612f18565b6001600160a01b038716602084015285604084015284606084015283608084015282810360a084015260008152602081019150509695505050505050565b818352818160208501375060006020828401015260006020601f19601f840116840101905092915050565b600081357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe183360301811261305757600080fd5b820160208101903567ffffffffffffffff81111561307457600080fd5b80360382131561308357600080fd5b60608552613095606086018284612ff8565b91505060208301356130a681612b25565b6001600160a01b0316602085015260409283013592909301919091525090565b6080815260006130d96080830188613023565b6001600160a01b03871660208401528560408401528281036060840152613101818587612ff8565b98975050505050505050565b60006020828403121561311f57600080fd5b815180151581146129db57600080fd5b6040815260006131426040830186612f18565b8281036020840152613155818587612ff8565b9695505050505050565b60c08152600061317260c083018a612f18565b6001600160a01b038916602084015287604084015286606084015285608084015282810360a08401526131a6818587612ff8565b9a9950505050505050505050565b600080604083850312156131c757600080fd5b82516131d281612b25565b6020939093015192949293505050565b600082516131f4818460208701612ef4565b919091019291505056fea2646970667358221220e552e065fe0e33093f4ee925441290718d332f30e2458c48850361f698017df664736f6c634300081a0033", + Bin: "0x60a06040523060805234801561001457600080fd5b5061001d610022565b6100d4565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100725760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146100d15780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b6080516132346100fd600039600081816123650152818161238e015261254601526132346000f3fe6080604052600436106101bb5760003560e01c80635af65967116100ec578063a217fddf1161008a578063c39aca3711610064578063c39aca3714610600578063d547741f14610620578063e63ab1e914610640578063f45346dc1461067457600080fd5b8063a217fddf14610575578063ad3cb1cc1461058a578063bcf7f32b146105e057600080fd5b80637993c1e0116100c65780637993c1e0146104bb57806380bd3d03146104db5780638456cb59146104fb57806391d148541461051057600080fd5b80635af65967146104445780635c975abb146104645780635d40e1781461049b57600080fd5b806336568abe11610159578063441a3e7011610133578063441a3e70146103dc578063485cc955146103fc5780634f1ef2861461041c57806352d1902d1461042f57600080fd5b806336568abe1461037f5780633ce4a5bc1461039f5780633f4ba83a146103c757600080fd5b806321e093b11161019557806321e093b1146102aa578063248a9ca3146102e25780632f2ff15d1461033f578063309f50041461035f57600080fd5b806301ffc9a714610235578063135390f91461026a57806321501a951461028a57600080fd5b36610230576101c8610694565b6000546001600160a01b031633148015906101f757503373735b14bb79463307aacbed86daf3322b1e6226ab14155b1561022e576040517f229930b200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b005b600080fd5b34801561024157600080fd5b50610255610250366004612a24565b6106f2565b60405190151581526020015b60405180910390f35b34801561027657600080fd5b5061022e610285366004612b3a565b61078b565b34801561029657600080fd5b5061022e6102a5366004612bf6565b6108f9565b3480156102b657600080fd5b506000546102ca906001600160a01b031681565b6040516001600160a01b039091168152602001610261565b3480156102ee57600080fd5b506103316102fd366004612c82565b60009081527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052604090206001015490565b604051908152602001610261565b34801561034b57600080fd5b5061022e61035a366004612c9b565b610ac6565b34801561036b57600080fd5b5061022e61037a366004612ccb565b610b10565b34801561038b57600080fd5b5061022e61039a366004612c9b565b610c7a565b3480156103ab57600080fd5b506102ca73735b14bb79463307aacbed86daf3322b1e6226ab81565b3480156103d357600080fd5b5061022e610cc6565b3480156103e857600080fd5b5061022e6103f7366004612d69565b610cfb565b34801561040857600080fd5b5061022e610417366004612d8b565b610e18565b61022e61042a366004612db9565b61106e565b34801561043b57600080fd5b50610331611089565b34801561045057600080fd5b5061022e61045f366004612ccb565b6110b8565b34801561047057600080fd5b507fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff16610255565b3480156104a757600080fd5b5061022e6104b6366004612e09565b6112c7565b3480156104c757600080fd5b5061022e6104d6366004612e7e565b611381565b3480156104e757600080fd5b5061022e6104f6366004612eb9565b6114f5565b34801561050757600080fd5b5061022e6115e1565b34801561051c57600080fd5b5061025561052b366004612c9b565b60009182527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408084206001600160a01b0393909316845291905290205460ff1690565b34801561058157600080fd5b50610331600081565b34801561059657600080fd5b506105d36040518060400160405280600581526020017f352e302e3000000000000000000000000000000000000000000000000000000081525081565b6040516102619190612f44565b3480156105ec57600080fd5b5061022e6105fb366004612ccb565b611613565b34801561060c57600080fd5b5061022e61061b366004612ccb565b611743565b34801561062c57600080fd5b5061022e61063b366004612c9b565b611952565b34801561064c57600080fd5b506103317f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b34801561068057600080fd5b5061022e61068f366004612f57565b611996565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff16156106f0576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061078557507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b610793611ba5565b61079b610694565b82516000036107d6576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b81600003610810576040517f5d67094f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061081c8383611c26565b90506000336001600160a01b03167fde19dbe881cc0aeeb6e73ce19ac7b5ca695e6be8a076e3eb42292005a7fec1b586858786886001600160a01b0316634d8943bb6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561088d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108b19190612f8e565b6040516108c2959493929190612fa7565b60405180910390a3506108f460017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610946576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61094e610694565b6001600160a01b03831661098e576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b836000036109c8576040517f19c08f4900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03831673735b14bb79463307aacbed86daf3322b1e6226ab14806109fb57506001600160a01b03831630145b15610a32576040517f82d5d76a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610a3c8484611f19565b6000546040517fde43156e0000000000000000000000000000000000000000000000000000000081526001600160a01b038086169263de43156e92610a8d928a9216908990889088906004016130c6565b600060405180830381600087803b158015610aa757600080fd5b505af1158015610abb573d6000803e3d6000fd5b505050505050505050565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020526040902060010154610b00816120e7565b610b0a83836120f1565b50505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610b5d576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610b65610694565b6001600160a01b0385161580610b8257506001600160a01b038316155b15610bb9576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b83600003610bf3576040517f5d67094f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f69582bee0000000000000000000000000000000000000000000000000000000081526001600160a01b038416906369582bee90610c4090899089908990889088906004016130c6565b600060405180830381600087803b158015610c5a57600080fd5b505af1158015610c6e573d6000803e3d6000fd5b50505050505050505050565b6001600160a01b0381163314610cbc576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6108f482826121de565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610cf0816120e7565b610cf86122a2565b50565b610d03611ba5565b610d0b610694565b81600003610d45576040517f19c08f4900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610d638273735b14bb79463307aacbed86daf3322b1e6226ab611f19565b6040517f735b14bb79463307aacbed86daf3322b1e6226ab0000000000000000000000006020820152819033907fde19dbe881cc0aeeb6e73ce19ac7b5ca695e6be8a076e3eb42292005a7fec1b59060340160408051601f198184030181529082905260008054610de3936001600160a01b039091169189918190612fa7565b60405180910390a3610e1460017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b5050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff16600081158015610e635750825b905060008267ffffffffffffffff166001148015610e805750303b155b905081158015610e8e575080155b15610ec5576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001660011785558315610f265784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff16680100000000000000001785555b6001600160a01b0387161580610f4357506001600160a01b038616155b15610f7a576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610f82612332565b610f8a612332565b610f9261233a565b610f9a61234a565b610fa56000876120f1565b50610fd07f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a876120f1565b50600080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03891617905583156110655784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50505050505050565b61107661235a565b61107f8261242a565b610e148282612435565b600061109361253b565b507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc90565b3373735b14bb79463307aacbed86daf3322b1e6226ab14611105576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61110d610694565b6001600160a01b038516158061112a57506001600160a01b038316155b15611161576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8360000361119b576040517f5d67094f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03831673735b14bb79463307aacbed86daf3322b1e6226ab14806111ce57506001600160a01b03831630145b15611205576040517f82d5d76a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f47e7ef240000000000000000000000000000000000000000000000000000000081526001600160a01b038481166004830152602482018690528616906347e7ef24906044016020604051808303816000875af115801561126d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611291919061310d565b610bf3576040517f47d19fab00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6112cf611ba5565b6112d7610694565b8351600003611312576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b82336001600160a01b03167f5322ffbbf9261ff1f8138247942d2b03b28717141ef0a0dd080fc4be9c4e78d38685856040516113509392919061312f565b60405180910390a3610b0a60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b611389611ba5565b611391610694565b84516000036113cc576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b83600003611406576040517f5d67094f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006114128585611c26565b90506000336001600160a01b03167fde19dbe881cc0aeeb6e73ce19ac7b5ca695e6be8a076e3eb42292005a7fec1b5888789868a6001600160a01b0316634d8943bb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611483573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114a79190612f8e565b8a8a6040516114bc979695949392919061315f565b60405180910390a3506114ee60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b5050505050565b6114fd611ba5565b611505610694565b8360000361153f576040517f19c08f4900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61155d8473735b14bb79463307aacbed86daf3322b1e6226ab611f19565b6040517f735b14bb79463307aacbed86daf3322b1e6226ab0000000000000000000000006020820152839033907fde19dbe881cc0aeeb6e73ce19ac7b5ca695e6be8a076e3eb42292005a7fec1b59060340160408051601f198184030181529082905260008054611350936001600160a01b03909116918b9181908b908b9061315f565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61160b816120e7565b610cf861259d565b3373735b14bb79463307aacbed86daf3322b1e6226ab14611660576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611668610694565b6001600160a01b038516158061168557506001600160a01b038316155b156116bc576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b836000036116f6576040517f5d67094f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517fde43156e0000000000000000000000000000000000000000000000000000000081526001600160a01b0384169063de43156e90610c4090899089908990889088906004016130c6565b3373735b14bb79463307aacbed86daf3322b1e6226ab14611790576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611798610694565b6001600160a01b03851615806117b557506001600160a01b038316155b156117ec576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b83600003611826576040517f5d67094f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03831673735b14bb79463307aacbed86daf3322b1e6226ab148061185957506001600160a01b03831630145b15611890576040517f82d5d76a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f47e7ef240000000000000000000000000000000000000000000000000000000081526001600160a01b038481166004830152602482018690528616906347e7ef24906044016020604051808303816000875af11580156118f8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061191c919061310d565b6116f6576040517f47d19fab00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052604090206001015461198c816120e7565b610b0a83836121de565b3373735b14bb79463307aacbed86daf3322b1e6226ab146119e3576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6119eb610694565b6001600160a01b0383161580611a0857506001600160a01b038116155b15611a3f576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b81600003611a79576040517f5d67094f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03811673735b14bb79463307aacbed86daf3322b1e6226ab1480611aac57506001600160a01b03811630145b15611ae3576040517f82d5d76a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f47e7ef240000000000000000000000000000000000000000000000000000000081526001600160a01b038281166004830152602482018490528416906347e7ef24906044016020604051808303816000875af1158015611b4b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b6f919061310d565b6108f4576040517f47d19fab00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0080547ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01611c20576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60029055565b6000806000836001600160a01b031663d9eeebed6040518163ffffffff1660e01b81526004016040805180830381865afa158015611c68573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c8c91906131b4565b6040517f23b872dd00000000000000000000000000000000000000000000000000000000815233600482015273735b14bb79463307aacbed86daf3322b1e6226ab60248201526044810182905291935091506001600160a01b038316906323b872dd906064016020604051808303816000875af1158015611d11573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d35919061310d565b611d6b576040517f0a7cd6d600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f23b872dd000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018690526001600160a01b038516906323b872dd906064016020604051808303816000875af1158015611dd7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611dfb919061310d565b611e31576040517f4dd9ee8d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f42966c68000000000000000000000000000000000000000000000000000000008152600481018690526001600160a01b038516906342966c68906024016020604051808303816000875af1158015611e91573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611eb5919061310d565b611eeb576040517f2c77e05c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b949350505050565b60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b6000546040517f23b872dd000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018490526001600160a01b03909116906323b872dd906064016020604051808303816000875af1158015611f89573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fad919061310d565b611fe3576040517fc7ffc47b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000546040517f2e1a7d4d000000000000000000000000000000000000000000000000000000008152600481018490526001600160a01b0390911690632e1a7d4d90602401600060405180830381600087803b15801561204257600080fd5b505af1158015612056573d6000803e3d6000fd5b505050506000816001600160a01b03168360405160006040518083038185875af1925050503d80600081146120a7576040519150601f19603f3d011682016040523d82523d6000602084013e6120ac565b606091505b50509050806108f4576040517fc7ffc47b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610cf88133612616565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff166121d4576000848152602082815260408083206001600160a01b0387168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905561218a3390565b6001600160a01b0316836001600160a01b0316857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a46001915050610785565b6000915050610785565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff16156121d4576000848152602082815260408083206001600160a01b038716808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339287917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a46001915050610785565b6122aa6126a3565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001681557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a150565b6106f06126fe565b6123426126fe565b6106f0612765565b6123526126fe565b6106f06127b6565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806123f357507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166123e77f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b6001600160a01b031614155b156106f0576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610e14816120e7565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa92505050801561248f575060408051601f3d908101601f1916820190925261248c91810190612f8e565b60015b6124d5576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b03831660048201526024015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8114612531576040517faa1d49a4000000000000000000000000000000000000000000000000000000008152600481018290526024016124cc565b6108f483836127be565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146106f0576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6125a5610694565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011781557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25833612314565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408083206001600160a01b038516845290915290205460ff16610e14576040517fe2517d3f0000000000000000000000000000000000000000000000000000000081526001600160a01b0382166004820152602481018390526044016124cc565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff166106f0576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff166106f0576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61276d6126fe565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055565b611ef36126fe565b6127c782612814565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a280511561280c576108f482826128bc565b610e14612932565b806001600160a01b03163b600003612863576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b03821660048201526024016124cc565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6060600080846001600160a01b0316846040516128d991906131e2565b600060405180830381855af49150503d8060008114612914576040519150601f19603f3d011682016040523d82523d6000602084013e612919565b606091505b509150915061292985838361296a565b95945050505050565b34156106f0576040517fb398979f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60608261297f5761297a826129e2565b6129db565b815115801561299657506001600160a01b0384163b155b156129d8576040517f9996b3150000000000000000000000000000000000000000000000000000000081526001600160a01b03851660048201526024016124cc565b50805b9392505050565b8051156129f25780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060208284031215612a3657600080fd5b81357fffffffff00000000000000000000000000000000000000000000000000000000811681146129db57600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600082601f830112612aa657600080fd5b813567ffffffffffffffff811115612ac057612ac0612a66565b604051601f19603f601f19601f8501160116810181811067ffffffffffffffff82111715612af057612af0612a66565b604052818152838201602001851015612b0857600080fd5b816020850160208301376000918101602001919091529392505050565b6001600160a01b0381168114610cf857600080fd5b600080600060608486031215612b4f57600080fd5b833567ffffffffffffffff811115612b6657600080fd5b612b7286828701612a95565b935050602084013591506040840135612b8a81612b25565b809150509250925092565b600060608284031215612ba757600080fd5b50919050565b60008083601f840112612bbf57600080fd5b50813567ffffffffffffffff811115612bd757600080fd5b602083019150836020828501011115612bef57600080fd5b9250929050565b600080600080600060808688031215612c0e57600080fd5b853567ffffffffffffffff811115612c2557600080fd5b612c3188828901612b95565b955050602086013593506040860135612c4981612b25565b9250606086013567ffffffffffffffff811115612c6557600080fd5b612c7188828901612bad565b969995985093965092949392505050565b600060208284031215612c9457600080fd5b5035919050565b60008060408385031215612cae57600080fd5b823591506020830135612cc081612b25565b809150509250929050565b60008060008060008060a08789031215612ce457600080fd5b863567ffffffffffffffff811115612cfb57600080fd5b612d0789828a01612b95565b9650506020870135612d1881612b25565b9450604087013593506060870135612d2f81612b25565b9250608087013567ffffffffffffffff811115612d4b57600080fd5b612d5789828a01612bad565b979a9699509497509295939492505050565b60008060408385031215612d7c57600080fd5b50508035926020909101359150565b60008060408385031215612d9e57600080fd5b8235612da981612b25565b91506020830135612cc081612b25565b60008060408385031215612dcc57600080fd5b8235612dd781612b25565b9150602083013567ffffffffffffffff811115612df357600080fd5b612dff85828601612a95565b9150509250929050565b60008060008060608587031215612e1f57600080fd5b843567ffffffffffffffff811115612e3657600080fd5b612e4287828801612a95565b94505060208501359250604085013567ffffffffffffffff811115612e6657600080fd5b612e7287828801612bad565b95989497509550505050565b600080600080600060808688031215612e9657600080fd5b853567ffffffffffffffff811115612ead57600080fd5b612c3188828901612a95565b60008060008060608587031215612ecf57600080fd5b8435935060208501359250604085013567ffffffffffffffff811115612e6657600080fd5b60005b83811015612f0f578181015183820152602001612ef7565b50506000910152565b60008151808452612f30816020860160208601612ef4565b601f01601f19169290920160200192915050565b6020815260006129db6020830184612f18565b600080600060608486031215612f6c57600080fd5b8335612f7781612b25565b9250602084013591506040840135612b8a81612b25565b600060208284031215612fa057600080fd5b5051919050565b60c081526000612fba60c0830188612f18565b6001600160a01b038716602084015285604084015284606084015283608084015282810360a084015260008152602081019150509695505050505050565b818352818160208501375060006020828401015260006020601f19601f840116840101905092915050565b600081357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe183360301811261305757600080fd5b820160208101903567ffffffffffffffff81111561307457600080fd5b80360382131561308357600080fd5b60608552613095606086018284612ff8565b91505060208301356130a681612b25565b6001600160a01b0316602085015260409283013592909301919091525090565b6080815260006130d96080830188613023565b6001600160a01b03871660208401528560408401528281036060840152613101818587612ff8565b98975050505050505050565b60006020828403121561311f57600080fd5b815180151581146129db57600080fd5b6040815260006131426040830186612f18565b8281036020840152613155818587612ff8565b9695505050505050565b60c08152600061317260c083018a612f18565b6001600160a01b038916602084015287604084015286606084015285608084015282810360a08401526131a6818587612ff8565b9a9950505050505050505050565b600080604083850312156131c757600080fd5b82516131d281612b25565b6020939093015192949293505050565b600082516131f4818460208701612ef4565b919091019291505056fea2646970667358221220aa7781f02b83781fe8c9234fceb32e81bb1b35cbd84ec554f95cd1a565cec31964736f6c634300081a0033", } // GatewayZEVMABI is the input ABI used to generate the binding from. diff --git a/v2/pkg/gatewayzevm.t.sol/gatewayzevminboundtest.go b/v2/pkg/gatewayzevm.t.sol/gatewayzevminboundtest.go index e5e1d4b4..b34ac6ed 100644 --- a/v2/pkg/gatewayzevm.t.sol/gatewayzevminboundtest.go +++ b/v2/pkg/gatewayzevm.t.sol/gatewayzevminboundtest.go @@ -50,7 +50,7 @@ type StdInvariantFuzzSelector struct { // GatewayZEVMInboundTestMetaData contains all meta data concerning the GatewayZEVMInboundTest contract. var GatewayZEVMInboundTestMetaData = &bind.MetaData{ ABI: "[{\"type\":\"function\",\"name\":\"IS_TEST\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeArtifacts\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedArtifacts_\",\"type\":\"string[]\",\"internalType\":\"string[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeContracts\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedContracts_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeSelectors\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedSelectors_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzSelector[]\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"selectors\",\"type\":\"bytes4[]\",\"internalType\":\"bytes4[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeSenders\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedSenders_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"failed\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"setUp\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"targetArtifactSelectors\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedArtifactSelectors_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzArtifactSelector[]\",\"components\":[{\"name\":\"artifact\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"selectors\",\"type\":\"bytes4[]\",\"internalType\":\"bytes4[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetArtifacts\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedArtifacts_\",\"type\":\"string[]\",\"internalType\":\"string[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetContracts\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedContracts_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetInterfaces\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedInterfaces_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzInterface[]\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"artifacts\",\"type\":\"string[]\",\"internalType\":\"string[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetSelectors\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedSelectors_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzSelector[]\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"selectors\",\"type\":\"bytes4[]\",\"internalType\":\"bytes4[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetSenders\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedSenders_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"testCall\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testCallFailsIfReceiverIsZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawAndCallZRC20FailsIfAmountIsZero\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawAndCallZRC20FailsIfReceiverIsZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawAndcallZETAFailsIfAmountIsZero\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawZETA\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawZETAFailsIfAmountIsZero\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawZETAFailsIfNoAllowance\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawZETAFailsIfNoBalance\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawZETAWithMessage\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawZETAWithMessageFailsIfNoAllowance\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawZRC20\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawZRC20FailsIfNoAllowance\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawZRC20FailsIfNoBalanceForGasFee\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawZRC20FailsIfNoBalanceForTransfer\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawZRC20FailsIfReceiverIsZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawZRC20FailsIsAmountIs0\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawZRC20WithMessage\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawZRC20WithMessageFailsIfNoAllowance\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"event\",\"name\":\"Call\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"chainId\",\"type\":\"uint256\",\"indexed\":true,\"internalType\":\"uint256\"},{\"name\":\"receiver\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"message\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Withdrawal\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"chainId\",\"type\":\"uint256\",\"indexed\":true,\"internalType\":\"uint256\"},{\"name\":\"receiver\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"zrc20\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"gasfee\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"protocolFlatFee\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"message\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log\",\"inputs\":[{\"name\":\"\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_address\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_array\",\"inputs\":[{\"name\":\"val\",\"type\":\"uint256[]\",\"indexed\":false,\"internalType\":\"uint256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_array\",\"inputs\":[{\"name\":\"val\",\"type\":\"int256[]\",\"indexed\":false,\"internalType\":\"int256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_array\",\"inputs\":[{\"name\":\"val\",\"type\":\"address[]\",\"indexed\":false,\"internalType\":\"address[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_bytes\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_bytes32\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_int\",\"inputs\":[{\"name\":\"\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_address\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_array\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"uint256[]\",\"indexed\":false,\"internalType\":\"uint256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_array\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"int256[]\",\"indexed\":false,\"internalType\":\"int256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_array\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"address[]\",\"indexed\":false,\"internalType\":\"address[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_bytes\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_bytes32\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_decimal_int\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"},{\"name\":\"decimals\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_decimal_uint\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"decimals\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_int\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_string\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_uint\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_string\",\"inputs\":[{\"name\":\"\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_uint\",\"inputs\":[{\"name\":\"\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"logs\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"CallerIsNotFungibleModule\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"FailedZetaSent\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"GasFeeTransferFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientZRC20Amount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientZetaAmount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidTarget\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"LowBalance\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OnlyWZETAOrFungible\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"WithdrawalFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZRC20BurnFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZRC20DepositFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZRC20TransferFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZeroAddress\",\"inputs\":[]}]", - Bin: "0x6080604052600c8054600160ff199182168117909255601f80549091169091179055348015602c57600080fd5b5061df248061003c6000396000f3fe608060405234801561001057600080fd5b50600436106101f05760003560e01c806385226c811161010f578063bcc52b9a116100a2578063ea37902f11610071578063ea37902f14610331578063fa7626d414610339578063fbc611c814610346578063fdad0ad01461034e57600080fd5b8063bcc52b9a14610311578063ceccfab314610319578063dde7e96714610321578063e20c9f711461032957600080fd5b8063b7f05836116100de578063b7f05836146102e1578063ba414fa6146102e9578063ba800c9114610301578063ba9adeef1461030957600080fd5b806385226c81146102a7578063916a17c6146102bc578063b0464fdc146102d1578063b5508aa9146102d957600080fd5b806339cbb457116101875780635d72228f116101565780635d72228f1461027a5780636221b5091461028257806366d9a9a01461028a57806383ababa91461029f57600080fd5b806339cbb4571461025a5780633e5e3c23146102625780633f7286f41461026a5780635006fd801461027257600080fd5b80631ed7831c116101c35780631ed7831c1461021757806321aeb18c146102355780632ade38801461023d57806336431b3f1461025257600080fd5b80630a9254e4146101f55780631238212c146101ff57806318a4cfdc146102075780631e63d2b91461020f575b600080fd5b6101fd610356565b005b6101fd610dc3565b6101fd61118c565b6101fd6115e1565b61021f6119cd565b60405161022c91906189f3565b60405180910390f35b6101fd611a2f565b610245611b33565b60405161022c9190618a8f565b6101fd611c75565b6101fd611e1b565b61021f611f83565b61021f611fe3565b6101fd612043565b6101fd6124da565b6101fd612829565b610292612a2f565b60405161022c9190618bf5565b6101fd612bb1565b6102af612cac565b60405161022c9190618c93565b6102c4612d7c565b60405161022c9190618d0a565b6102c4612e77565b6102af612f72565b6101fd613042565b6102f161327f565b604051901515815260200161022c565b6101fd613353565b6101fd61347f565b6101fd613622565b6101fd613783565b6101fd613ab7565b61021f613ed7565b6101fd613f37565b601f546102f19060ff1681565b6101fd6142f3565b6101fd614666565b602580547fffffffffffffffffffffffff000000000000000000000000000000000000000090811630179091556026805490911661123417905560405161039c90618906565b604051809103906000f0801580156103b8573d6000803e3d6000fd5b50602280547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03928316908117909155604080518082018252600f81527f476174657761795a45564d2e736f6c00000000000000000000000000000000006020820152602554915160248101939093529216604482015261049c919060640160408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f485cc955000000000000000000000000000000000000000000000000000000001790526147f5565b601f80547fffffffffffffffffffffff0000000000000000000000000000000000000000ff166101006001600160a01b039384168102919091179182905560208054919092049092167fffffffffffffffffffffffff000000000000000000000000000000000000000090921682178155604080517f3ce4a5bc0000000000000000000000000000000000000000000000000000000081529051633ce4a5bc926004808401939192918290030181865afa15801561055e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105829190618da1565b602780547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03929092169190911790556040516105c690618913565b604051809103906000f0801580156105e2573d6000803e3d6000fd5b50602480547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039283161781556027546040517f06447d5600000000000000000000000000000000000000000000000000000000815292166004830152737109709ecfa91a80626ff3989d68f67f5b1dd12d916306447d569101600060405180830381600087803b15801561067e57600080fd5b505af1158015610692573d6000803e3d6000fd5b5050505060008060006040516106a790618920565b6001600160a01b03938416815291831660208301529091166040820152606001604051809103906000f0801580156106e3573d6000803e3d6000fd5b50602380547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039283169081179091556020546040516012936001938493600093919216906107399061892d565b61074896959493929190618dca565b604051809103906000f080158015610764573d6000803e3d6000fd5b50602180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039283169081179091556023546040517fee2815ba0000000000000000000000000000000000000000000000000000000081526001600482015260248101929092529091169063ee2815ba90604401600060405180830381600087803b1580156107fb57600080fd5b505af115801561080f573d6000803e3d6000fd5b50506023546040517fa7cb050700000000000000000000000000000000000000000000000000000000815260016004820181905260248201526001600160a01b03909116925063a7cb05079150604401600060405180830381600087803b15801561087957600080fd5b505af115801561088d573d6000803e3d6000fd5b50506027546040517fc88a5e6d0000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152633b9aca006024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c88a5e6d9150604401600060405180830381600087803b15801561090d57600080fd5b505af1158015610921573d6000803e3d6000fd5b50505050602260009054906101000a90046001600160a01b03166001600160a01b031663d0e30db0600a6040518263ffffffff1660e01b81526004016000604051808303818588803b15801561097657600080fd5b505af115801561098a573d6000803e3d6000fd5b50506022546020546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152600a60248201529116935063095ea7b3925060440190506020604051808303816000875af11580156109fe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a229190618ebf565b506021546025546040517f47e7ef240000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620186a060248201529116906347e7ef24906044016020604051808303816000875af1158015610a93573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ab79190618ebf565b507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b03166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610b1657600080fd5b505af1158015610b2a573d6000803e3d6000fd5b50506025546040517f06447d560000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506306447d569150602401600060405180830381600087803b158015610ba057600080fd5b505af1158015610bb4573d6000803e3d6000fd5b50506021546020546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620186a060248201529116925063095ea7b391506044016020604051808303816000875af1158015610c28573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c4c9190618ebf565b50602260009054906101000a90046001600160a01b03166001600160a01b031663d0e30db0600a6040518263ffffffff1660e01b81526004016000604051808303818588803b158015610c9e57600080fd5b505af1158015610cb2573d6000803e3d6000fd5b50506022546020546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152600a60248201529116935063095ea7b3925060440190506020604051808303816000875af1158015610d26573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d4a9190618ebf565b507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b03166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610da957600080fd5b505af1158015610dbd573d6000803e3d6000fd5b50505050565b6021546025546040516370a0823160e01b81526001600160a01b03918216600482015260019260009216906370a0823190602401602060405180830381865afa158015610e14573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e389190618ee1565b6025546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015610ead57600080fd5b505af1158015610ec1573d6000803e3d6000fd5b50506021546020546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152600060248201529116925063095ea7b391506044016020604051808303816000875af1158015610f33573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f579190618ebf565b506026546040516001600160a01b03909116602482015260009060440160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f84fae7600000000000000000000000000000000000000000000000000000000017905280517ff48448140000000000000000000000000000000000000000000000000000000081529051919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f48448149160048082019260009290919082900301818387803b15801561103357600080fd5b505af1158015611047573d6000803e3d6000fd5b50506020805460265460405160609190911b6bffffffffffffffffffffffff1916928101929092526001600160a01b03169250637993c1e0915060340160408051601f19818403018152908290526021547fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1683526110db9288916001600160a01b0316908790600401618efa565b600060405180830381600087803b1580156110f557600080fd5b505af1158015611109573d6000803e3d6000fd5b50506021546025546040516370a0823160e01b81526001600160a01b03918216600482015260009450911691506370a0823190602401602060405180830381865afa15801561115c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111809190618ee1565b9050610dbd8382614814565b6022546025546040516370a0823160e01b81526001600160a01b03918216600482015260019260009216906370a0823190602401602060405180830381865afa1580156111dd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112019190618ee1565b6022546020546040516370a0823160e01b81526001600160a01b0391821660048201529293506000929116906370a0823190602401602060405180830381865afa158015611253573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112779190618ee1565b6027546026546040516001600160a01b03918216602482015292935016319060009060440160408051601f19818403018152918152602080830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f84fae760000000000000000000000000000000000000000000000000000000001790525490517f81bad6f30000000000000000000000000000000000000000000000000000000081526001600482018190526024820181905260448201819052606482018190526001600160a01b03909216608482015291925090737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b15801561138657600080fd5b505af115801561139a573d6000803e3d6000fd5b505060255460275460405160609190911b6bffffffffffffffffffffffff191660208201528493506001600160a01b0390911691507fde19dbe881cc0aeeb6e73ce19ac7b5ca695e6be8a076e3eb42292005a7fec1b59060340160408051601f1981840301815290829052602254611426926001600160a01b03909116908c9060009081908b90618f34565b60405180910390a36020546040517f80bd3d030000000000000000000000000000000000000000000000000000000081526001600160a01b03909116906380bd3d039061147b90899085908790600401618f87565b600060405180830381600087803b15801561149557600080fd5b505af11580156114a9573d6000803e3d6000fd5b50506022546025546040516370a0823160e01b81526001600160a01b03918216600482015260009450911691506370a0823190602401602060405180830381865afa1580156114fc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115209190618ee1565b9050611536611530600188618fd5565b82614814565b6022546020546040516370a0823160e01b81526001600160a01b03918216600482015260009291909116906370a0823190602401602060405180830381865afa158015611587573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115ab9190618ee1565b90506115b78682614814565b6115d76115c5866001618fe8565b6027546001600160a01b031631614814565b5050505050505050565b6021546025546040516370a0823160e01b81526001600160a01b03918216600482015260019260009216906370a0823190602401602060405180830381865afa158015611632573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116569190618ee1565b6026546040516001600160a01b03909116602482015290915060009060440160408051601f19818403018152918152602080830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f84fae760000000000000000000000000000000000000000000000000000000001790525490517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b15801561175c57600080fd5b505af1158015611770573d6000803e3d6000fd5b505060255460265460405160609190911b6bffffffffffffffffffffffff19166020820152600093506001600160a01b0390911691507fde19dbe881cc0aeeb6e73ce19ac7b5ca695e6be8a076e3eb42292005a7fec1b59060340160408051601f198184030181528282526021547f4d8943bb000000000000000000000000000000000000000000000000000000008452915190926001600160a01b039092169189916000918491634d8943bb916004808201926020929091908290030181865afa158015611843573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118679190618ee1565b8860405161187a96959493929190618f34565b60405180910390a3602080546026546040516001600160a01b0392831693637993c1e0936118c29316910160609190911b6bffffffffffffffffffffffff1916815260140190565b60408051601f19818403018152908290526021547fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1683526119199288916001600160a01b0316908790600401618efa565b600060405180830381600087803b15801561193357600080fd5b505af1158015611947573d6000803e3d6000fd5b50506021546025546040516370a0823160e01b81526001600160a01b03918216600482015260009450911691506370a0823190602401602060405180830381865afa15801561199a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119be9190618ee1565b9050610dbd6115308585618fd5565b60606016805480602002602001604051908101604052809291908181526020018280548015611a2557602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311611a07575b5050505050905090565b6040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527f19c08f49000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b158015611ab457600080fd5b505af1158015611ac8573d6000803e3d6000fd5b50506020546040517f441a3e7000000000000000000000000000000000000000000000000000000000815260006004820152600160248201526001600160a01b03909116925063441a3e7091506044015b600060405180830381600087803b158015610da957600080fd5b6060601e805480602002602001604051908101604052809291908181526020016000905b82821015611c6c57600084815260208082206040805180820182526002870290920180546001600160a01b03168352600181018054835181870281018701909452808452939591948681019491929084015b82821015611c55578382906000526020600020018054611bc890618ffb565b80601f0160208091040260200160405190810160405280929190818152602001828054611bf490618ffb565b8015611c415780601f10611c1657610100808354040283529160200191611c41565b820191906000526020600020905b815481529060010190602001808311611c2457829003601f168201915b505050505081526020019060010190611ba9565b505050508152505081526020019060010190611b57565b50505050905090565b6026546040516001600160a01b03909116602482015260009060440160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f84fae76000000000000000000000000000000000000000000000000000000000179052517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fd92e233d000000000000000000000000000000000000000000000000000000006004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b158015611d6f57600080fd5b505af1158015611d83573d6000803e3d6000fd5b5050602080546040805160008152928301908190526021547f7993c1e0000000000000000000000000000000000000000000000000000000009091526001600160a01b039182169450637993c1e09350611de69291600191168660248401618efa565b600060405180830381600087803b158015611e0057600080fd5b505af1158015611e14573d6000803e3d6000fd5b5050505050565b6026546040516001600160a01b03909116602482015260009060440160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f84fae76000000000000000000000000000000000000000000000000000000000179052517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fd92e233d000000000000000000000000000000000000000000000000000000006004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b158015611f1557600080fd5b505af1158015611f29573d6000803e3d6000fd5b5050602080546040805160008152928301908190527f5d40e1780000000000000000000000000000000000000000000000000000000090526001600160a01b03169250635d40e1789150611de69060018560248301619048565b60606018805480602002602001604051908101604052809291908181526020018280548015611a25576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311611a07575050505050905090565b60606017805480602002602001604051908101604052809291908181526020018280548015611a25576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311611a07575050505050905090565b6022546025546040516370a0823160e01b81526001600160a01b03918216600482015260019260009216906370a0823190602401602060405180830381865afa158015612094573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120b89190618ee1565b6022546020546040516370a0823160e01b81526001600160a01b0391821660048201529293506000929116906370a0823190602401602060405180830381865afa15801561210a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061212e9190618ee1565b6027546026546040516001600160a01b03918216602482015292935016319060009060440160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f84fae7600000000000000000000000000000000000000000000000000000000017905260255490517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152909150600190737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561222257600080fd5b505af1158015612236573d6000803e3d6000fd5b50506022546020546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152600060248201529116925063095ea7b391506044016020604051808303816000875af11580156122a8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122cc9190618ebf565b507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b031663f48448146040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561232b57600080fd5b505af115801561233f573d6000803e3d6000fd5b50506020546040517f80bd3d030000000000000000000000000000000000000000000000000000000081526001600160a01b0390911692506380bd3d03915061239090899085908790600401618f87565b600060405180830381600087803b1580156123aa57600080fd5b505af11580156123be573d6000803e3d6000fd5b50506022546025546040516370a0823160e01b81526001600160a01b03918216600482015260009450911691506370a0823190602401602060405180830381865afa158015612411573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124359190618ee1565b90506124418682614814565b6022546020546040516370a0823160e01b81526001600160a01b03918216600482015260009291909116906370a0823190602401602060405180830381865afa158015612492573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124b69190618ee1565b90506124c28682614814565b6027546115d79086906001600160a01b031631614814565b6021546025546040516370a0823160e01b81526001600160a01b03918216600482015260019260009216906370a0823190602401602060405180830381865afa15801561252b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061254f9190618ee1565b6025546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156125c457600080fd5b505af11580156125d8573d6000803e3d6000fd5b50506021546020546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152600060248201529116925063095ea7b391506044016020604051808303816000875af115801561264a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061266e9190618ebf565b507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b031663f48448146040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156126cd57600080fd5b505af11580156126e1573d6000803e3d6000fd5b50506020805460265460405160609190911b6bffffffffffffffffffffffff1916928101929092526001600160a01b0316925063135390f9915060340160408051601f19818403018152908290526021547fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1683526127739287916001600160a01b031690600401619073565b600060405180830381600087803b15801561278d57600080fd5b505af11580156127a1573d6000803e3d6000fd5b50506021546025546040516370a0823160e01b81526001600160a01b03918216600482015260009450911691506370a0823190602401602060405180830381865afa1580156127f4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128189190618ee1565b90506128248282614814565b505050565b6022546025546040516370a0823160e01b81526001600160a01b03918216600482015260019260009216906370a0823190602401602060405180830381865afa15801561287a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061289e9190618ee1565b6022546040517fa9059cbb0000000000000000000000000000000000000000000000000000000081526101236004820152602481018390529192506001600160a01b03169063a9059cbb906044016020604051808303816000875af115801561290b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061292f9190618ebf565b506000600190507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b031663f48448146040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561299457600080fd5b505af11580156129a8573d6000803e3d6000fd5b50506020546040517f441a3e7000000000000000000000000000000000000000000000000000000000815260048101879052602481018590526001600160a01b03909116925063441a3e709150604401600060405180830381600087803b158015612a1257600080fd5b505af1158015612a26573d6000803e3d6000fd5b50505050505050565b6060601b805480602002602001604051908101604052809291908181526020016000905b82821015611c6c5783829060005260206000209060020201604051806040016040529081600082018054612a8690618ffb565b80601f0160208091040260200160405190810160405280929190818152602001828054612ab290618ffb565b8015612aff5780601f10612ad457610100808354040283529160200191612aff565b820191906000526020600020905b815481529060010190602001808311612ae257829003601f168201915b5050505050815260200160018201805480602002602001604051908101604052809291908181526020018280548015612b9957602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019060040190602082600301049283019260010382029150808411612b465790505b50505050508152505081526020019060010190612a53565b6040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b158015612c3657600080fd5b505af1158015612c4a573d6000803e3d6000fd5b5050602080546040805160008152928301908190526021547f135390f9000000000000000000000000000000000000000000000000000000009091526001600160a01b03918216945063135390f99350611b1992916001911660248301619073565b6060601a805480602002602001604051908101604052809291908181526020016000905b82821015611c6c578382906000526020600020018054612cef90618ffb565b80601f0160208091040260200160405190810160405280929190818152602001828054612d1b90618ffb565b8015612d685780601f10612d3d57610100808354040283529160200191612d68565b820191906000526020600020905b815481529060010190602001808311612d4b57829003601f168201915b505050505081526020019060010190612cd0565b6060601d805480602002602001604051908101604052809291908181526020016000905b82821015611c6c5760008481526020908190206040805180820182526002860290920180546001600160a01b03168352600181018054835181870281018701909452808452939491938583019392830182828015612e5f57602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019060040190602082600301049283019260010382029150808411612e0c5790505b50505050508152505081526020019060010190612da0565b6060601c805480602002602001604051908101604052809291908181526020016000905b82821015611c6c5760008481526020908190206040805180820182526002860290920180546001600160a01b03168352600181018054835181870281018701909452808452939491938583019392830182828015612f5a57602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019060040190602082600301049283019260010382029150808411612f075790505b50505050508152505081526020019060010190612e9b565b60606019805480602002602001604051908101604052809291908181526020016000905b82821015611c6c578382906000526020600020018054612fb590618ffb565b80601f0160208091040260200160405190810160405280929190818152602001828054612fe190618ffb565b801561302e5780601f106130035761010080835404028352916020019161302e565b820191906000526020600020905b81548152906001019060200180831161301157829003601f168201915b505050505081526020019060010190612f96565b6026546040516001600160a01b03909116602482015260009060440160408051601f19818403018152918152602080830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f84fae760000000000000000000000000000000000000000000000000000000001790525490517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b15801561314557600080fd5b505af1158015613159573d6000803e3d6000fd5b505060255460265460405160609190911b6bffffffffffffffffffffffff19166020820152600193508392506001600160a01b03909116907f5322ffbbf9261ff1f8138247942d2b03b28717141ef0a0dd080fc4be9c4e78d39060340160408051601f19818403018152908290526131d29187906190a5565b60405180910390a3602080546026546040516001600160a01b0392831693635d40e1789361321a9316910160609190911b6bffffffffffffffffffffffff1916815260140190565b60405160208183030381529060405283856040518463ffffffff1660e01b815260040161324993929190619048565b600060405180830381600087803b15801561326357600080fd5b505af1158015613277573d6000803e3d6000fd5b505050505050565b60085460009060ff1615613297575060085460ff1690565b6040517f667f9d70000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d600482018190527f6661696c65640000000000000000000000000000000000000000000000000000602483015260009163667f9d7090604401602060405180830381865afa158015613328573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061334c9190618ee1565b1415905090565b6040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527f5d67094f000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b1580156133d857600080fd5b505af11580156133ec573d6000803e3d6000fd5b50506020805460265460405160609190911b6bffffffffffffffffffffffff1916928101929092526001600160a01b0316925063135390f9915060340160408051601f19818403018152908290526021547fffffffff0000000000000000000000000000000000000000000000000000000060e085901b168352611b19926000916001600160a01b031690600401619073565b6026546040516001600160a01b03909116602482015260009060440160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f84fae76000000000000000000000000000000000000000000000000000000000179052517fc31eb0e00000000000000000000000000000000000000000000000000000000081527f5d67094f000000000000000000000000000000000000000000000000000000006004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b15801561357957600080fd5b505af115801561358d573d6000803e3d6000fd5b50506020805460265460405160609190911b6bffffffffffffffffffffffff1916928101929092526001600160a01b03169250637993c1e0915060340160408051601f19818403018152908290526021547fffffffff0000000000000000000000000000000000000000000000000000000060e085901b168352611de6926000916001600160a01b0316908790600401618efa565b6026546040516001600160a01b03909116602482015260009060440160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f84fae76000000000000000000000000000000000000000000000000000000000179052517fc31eb0e00000000000000000000000000000000000000000000000000000000081527f19c08f49000000000000000000000000000000000000000000000000000000006004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b15801561371c57600080fd5b505af1158015613730573d6000803e3d6000fd5b50506020546040517f80bd3d030000000000000000000000000000000000000000000000000000000081526001600160a01b0390911692506380bd3d039150611de6906000906001908690600401618f87565b6021546025546040516370a0823160e01b81526001600160a01b03918216600482015260019260009216906370a0823190602401602060405180830381865afa1580156137d4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137f89190618ee1565b6021546040517fa9059cbb0000000000000000000000000000000000000000000000000000000081526101236004820152602481018390529192506001600160a01b03169063a9059cbb906044016020604051808303816000875af1158015613865573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138899190618ebf565b506027546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156138fc57600080fd5b505af1158015613910573d6000803e3d6000fd5b50506021546040517ff687d12a000000000000000000000000000000000000000000000000000000008152600a60048201526001600160a01b03909116925063f687d12a9150602401600060405180830381600087803b15801561397357600080fd5b505af1158015613987573d6000803e3d6000fd5b50506040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527ffe382aa7000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e091506024015b600060405180830381600087803b158015613a1157600080fd5b505af1158015613a25573d6000803e3d6000fd5b50506020805460265460405160609190911b6bffffffffffffffffffffffff1916928101929092526001600160a01b0316925063135390f9915060340160408051601f19818403018152908290526021547fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1683526132499287916001600160a01b031690600401619073565b6022546025546040516370a0823160e01b81526001600160a01b03918216600482015260019260009216906370a0823190602401602060405180830381865afa158015613b08573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b2c9190618ee1565b6022546020546040516370a0823160e01b81526001600160a01b0391821660048201529293506000929116906370a0823190602401602060405180830381865afa158015613b7e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613ba29190618ee1565b6027546025546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152929350163190600190737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015613c2057600080fd5b505af1158015613c34573d6000803e3d6000fd5b50506022546020546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152600060248201529116925063095ea7b391506044016020604051808303816000875af1158015613ca6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613cca9190618ebf565b507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b031663f48448146040518163ffffffff1660e01b8152600401600060405180830381600087803b158015613d2957600080fd5b505af1158015613d3d573d6000803e3d6000fd5b50506020546040517f441a3e7000000000000000000000000000000000000000000000000000000000815260048101899052602481018590526001600160a01b03909116925063441a3e709150604401600060405180830381600087803b158015613da757600080fd5b505af1158015613dbb573d6000803e3d6000fd5b50506022546025546040516370a0823160e01b81526001600160a01b03918216600482015260009450911691506370a0823190602401602060405180830381865afa158015613e0e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613e329190618ee1565b9050613e3e8582614814565b6022546020546040516370a0823160e01b81526001600160a01b03918216600482015260009291909116906370a0823190602401602060405180830381865afa158015613e8f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613eb39190618ee1565b9050613ebf8582614814565b602754612a269085906001600160a01b031631614814565b60606015805480602002602001604051908101604052809291908181526020018280548015611a25576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311611a07575050505050905090565b6022546025546040516370a0823160e01b81526001600160a01b03918216600482015260019260009216906370a0823190602401602060405180830381865afa158015613f88573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613fac9190618ee1565b6022546020546040516370a0823160e01b81526001600160a01b0391821660048201529293506000929116906370a0823190602401602060405180830381865afa158015613ffe573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906140229190618ee1565b6027546020546040517f81bad6f30000000000000000000000000000000000000000000000000000000081526001600482018190526024820181905260448201819052606482018190526001600160a01b0392831660848301529394509116319190737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b1580156140bd57600080fd5b505af11580156140d1573d6000803e3d6000fd5b505060255460275460405160609190911b6bffffffffffffffffffffffff191660208201528493506001600160a01b0390911691507fde19dbe881cc0aeeb6e73ce19ac7b5ca695e6be8a076e3eb42292005a7fec1b59060340160408051601f198184030181529082905260225461415b926001600160a01b03909116908b9060009081906190ca565b60405180910390a36020546040517f441a3e7000000000000000000000000000000000000000000000000000000000815260048101879052602481018390526001600160a01b039091169063441a3e7090604401600060405180830381600087803b1580156141c957600080fd5b505af11580156141dd573d6000803e3d6000fd5b50506022546025546040516370a0823160e01b81526001600160a01b03918216600482015260009450911691506370a0823190602401602060405180830381865afa158015614230573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906142549190618ee1565b9050614264611530600187618fd5565b6022546020546040516370a0823160e01b81526001600160a01b03918216600482015260009291909116906370a0823190602401602060405180830381865afa1580156142b5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906142d99190618ee1565b90506142e58582614814565b612a266115c5856001618fe8565b6021546025546040516370a0823160e01b81526001600160a01b03918216600482015260019260009216906370a0823190602401602060405180830381865afa158015614344573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906143689190618ee1565b6020546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b1580156143f957600080fd5b505af115801561440d573d6000803e3d6000fd5b505060255460265460405160609190911b6bffffffffffffffffffffffff19166020820152600093506001600160a01b0390911691507fde19dbe881cc0aeeb6e73ce19ac7b5ca695e6be8a076e3eb42292005a7fec1b59060340160408051601f198184030181528282526021547f4d8943bb000000000000000000000000000000000000000000000000000000008452915190926001600160a01b039092169188916000918491634d8943bb916004808201926020929091908290030181865afa1580156144e0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906145049190618ee1565b6040516145159594939291906190ca565b60405180910390a3602080546026546040516001600160a01b039283169363135390f99361455d9316910160609190911b6bffffffffffffffffffffffff1916815260140190565b60408051601f19818403018152908290526021547fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1683526145b29287916001600160a01b031690600401619073565b600060405180830381600087803b1580156145cc57600080fd5b505af11580156145e0573d6000803e3d6000fd5b50506021546025546040516370a0823160e01b81526001600160a01b03918216600482015260009450911691506370a0823190602401602060405180830381865afa158015614633573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906146579190618ee1565b90506128246115308484618fd5565b6021546025546040516370a0823160e01b81526001600160a01b03918216600482015260029260009216906370a0823190602401602060405180830381865afa1580156146b7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906146db9190618ee1565b6021549091506001600160a01b031663a9059cbb6101236146fd600185618fd5565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303816000875af1158015614760573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906147849190618ebf565b506040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527ffe382aa7000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e0906024016139f7565b60006147ff61893a565b61480a848483614893565b9150505b92915050565b6040517f98296c540000000000000000000000000000000000000000000000000000000081526004810183905260248101829052737109709ecfa91a80626ff3989d68f67f5b1dd12d906398296c549060440160006040518083038186803b15801561487f57600080fd5b505afa158015613277573d6000803e3d6000fd5b6000806148a0858461490e565b90506149036040518060400160405280601d81526020017f4552433139363750726f78792e736f6c3a4552433139363750726f787900000081525082866040516020016148ee92919061911b565b6040516020818303038152906040528561491a565b9150505b9392505050565b60006149078383614948565b60c0810151516000901561493e5761493784848460c00151614963565b9050614907565b6149378484614b09565b60006149548383614bf4565b6149078383602001518461491a565b60008061496e614c04565b9050600061497c8683614cd7565b90506000614993826060015183602001518561517d565b905060006149a38383898961538f565b905060006149b08261620c565b602081015181519192509060030b15614a23578982604001516040516020016149da92919061913d565b60408051601f19818403018152908290527f08c379a0000000000000000000000000000000000000000000000000000000008252614a1a916004016191be565b60405180910390fd5b6000614a666040518060400160405280601581526020017f4465706c6f79656420746f20616464726573733a2000000000000000000000008152508360016163db565b6040517fc6ce059d000000000000000000000000000000000000000000000000000000008152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c6ce059d90614ab99084906004016191be565b602060405180830381865afa158015614ad6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614afa9190618da1565b9b9a5050505050505050505050565b6040517f8d1cc9250000000000000000000000000000000000000000000000000000000081526000908190737109709ecfa91a80626ff3989d68f67f5b1dd12d90638d1cc92590614b5e9087906004016191be565b600060405180830381865afa158015614b7b573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052614ba391908101906192b9565b90506000614bd18285604051602001614bbd9291906192ee565b6040516020818303038152906040526165db565b90506001600160a01b03811661480a5784846040516020016149da92919061931d565b614c00828260006165ee565b5050565b604080518082018252600381527f6f75740000000000000000000000000000000000000000000000000000000000602082015290517fd145736c000000000000000000000000000000000000000000000000000000008152606091737109709ecfa91a80626ff3989d68f67f5b1dd12d91829063d145736c90614c8b9084906004016193c8565b600060405180830381865afa158015614ca8573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052614cd0919081019061940f565b9250505090565b614d096040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b6000737109709ecfa91a80626ff3989d68f67f5b1dd12d9050614d546040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b614d5d856166f1565b60208201526000614d6d86616ad6565b90506000836001600160a01b031663d930a0e66040518163ffffffff1660e01b8152600401600060405180830381865afa158015614daf573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052614dd7919081019061940f565b86838560200151604051602001614df19493929190619458565b60408051601f19818403018152908290527f60f9bb1100000000000000000000000000000000000000000000000000000000825291506000906001600160a01b038616906360f9bb1190614e499085906004016191be565b600060405180830381865afa158015614e66573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052614e8e919081019061940f565b6040517fdb4235f60000000000000000000000000000000000000000000000000000000081529091506001600160a01b0386169063db4235f690614ed690849060040161955c565b602060405180830381865afa158015614ef3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614f179190618ebf565b614f2c57816040516020016149da91906195ae565b6040517f49c4fac80000000000000000000000000000000000000000000000000000000081526001600160a01b038616906349c4fac890614f71908490600401619640565b600060405180830381865afa158015614f8e573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052614fb6919081019061940f565b84526040517fdb4235f60000000000000000000000000000000000000000000000000000000081526001600160a01b0386169063db4235f690614ffd908490600401619692565b602060405180830381865afa15801561501a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061503e9190618ebf565b156150d3576040517f49c4fac80000000000000000000000000000000000000000000000000000000081526001600160a01b038616906349c4fac890615088908490600401619692565b600060405180830381865afa1580156150a5573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526150cd919081019061940f565b60408501525b846001600160a01b03166349c4fac88286600001516040516020016150f891906196e4565b6040516020818303038152906040526040518363ffffffff1660e01b81526004016151249291906190a5565b600060405180830381865afa158015615141573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052615169919081019061940f565b606085015250608083015250949350505050565b60408051600480825260a0820190925260609160009190816020015b60608152602001906001900390816151995790505090506040518060400160405280600481526020017f6772657000000000000000000000000000000000000000000000000000000000815250816000815181106151f9576151f9619750565b60200260200101819052506040518060400160405280600381526020017f2d726c00000000000000000000000000000000000000000000000000000000008152508160018151811061524d5761524d619750565b602002602001018190525084604051602001615269919061977f565b6040516020818303038152906040528160028151811061528b5761528b619750565b6020026020010181905250826040516020016152a791906197eb565b604051602081830303815290604052816003815181106152c9576152c9619750565b602002602001018190525060006152df8261620c565b602080820151604080518082018252600581527f2e6a736f6e00000000000000000000000000000000000000000000000000000081850190815282518084018452600080825290860152825180840190935290518252928101929092529192506153709060408051808201825260008082526020918201528151808301909252845182528085019082015290616d59565b61538557856040516020016149da919061982c565b9695505050505050565b60a0810151604080518082018252600080825260209182015281518083019092528251808352928101910152606090737109709ecfa91a80626ff3989d68f67f5b1dd12d90156153df565b511590565b6155535782602001511561549b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605860248201527f54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f742060448201527f62652075736564207768656e207468652060736b6970566572696679536f757260648201527f6365436f646560206f7074696f6e206973206074727565600000000000000000608482015260a401614a1a565b8260c0015115615553576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605360248201527f54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f742060448201527f62652075736564207768656e207468652060736b69704c6963656e736554797060648201527f6560206f7074696f6e2069732060747275656000000000000000000000000000608482015260a401614a1a565b6040805160ff8082526120008201909252600091816020015b606081526020019060019003908161556c57905050905060006040518060400160405280600381526020017f6e707800000000000000000000000000000000000000000000000000000000008152508282806155c7906198bd565b935060ff16815181106155dc576155dc619750565b60200260200101819052506040518060400160405280600d81526020017f302e302e312d616c7068612e370000000000000000000000000000000000000081525060405160200161562d91906198dc565b604051602081830303815290604052828280615648906198bd565b935060ff168151811061565d5761565d619750565b60200260200101819052506040518060400160405280600681526020017f6465706c6f7900000000000000000000000000000000000000000000000000008152508282806156aa906198bd565b935060ff16815181106156bf576156bf619750565b60200260200101819052506040518060400160405280600e81526020017f2d2d636f6e74726163744e616d6500000000000000000000000000000000000081525082828061570c906198bd565b935060ff168151811061572157615721619750565b6020026020010181905250876020015182828061573d906198bd565b935060ff168151811061575257615752619750565b60200260200101819052506040518060400160405280600e81526020017f2d2d636f6e74726163745061746800000000000000000000000000000000000081525082828061579f906198bd565b935060ff16815181106157b4576157b4619750565b6020908102919091010152875182826157cc816198bd565b935060ff16815181106157e1576157e1619750565b60200260200101819052506040518060400160405280600981526020017f2d2d636861696e4964000000000000000000000000000000000000000000000081525082828061582e906198bd565b935060ff168151811061584357615843619750565b602002602001018190525061585746616dba565b8282615862816198bd565b935060ff168151811061587757615877619750565b60200260200101819052506040518060400160405280600f81526020017f2d2d6275696c64496e666f46696c6500000000000000000000000000000000008152508282806158c4906198bd565b935060ff16815181106158d9576158d9619750565b6020026020010181905250868282806158f1906198bd565b935060ff168151811061590657615906619750565b6020908102919091010152855115615a2d5760408051808201909152601581527f2d2d636f6e7374727563746f7242797465636f6465000000000000000000000060208201528282615957816198bd565b935060ff168151811061596c5761596c619750565b60209081029190910101526040517f71aad10d0000000000000000000000000000000000000000000000000000000081526001600160a01b038416906371aad10d906159bc9089906004016191be565b600060405180830381865afa1580156159d9573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052615a01919081019061940f565b8282615a0c816198bd565b935060ff1681518110615a2157615a21619750565b60200260200101819052505b846020015115615afd5760408051808201909152601281527f2d2d766572696679536f75726365436f6465000000000000000000000000000060208201528282615a76816198bd565b935060ff1681518110615a8b57615a8b619750565b60200260200101819052506040518060400160405280600581526020017f66616c7365000000000000000000000000000000000000000000000000000000815250828280615ad8906198bd565b935060ff1681518110615aed57615aed619750565b6020026020010181905250615cc4565b615b356153da8660a0015160408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b615bc85760408051808201909152600d81527f2d2d6c6963656e7365547970650000000000000000000000000000000000000060208201528282615b78816198bd565b935060ff1681518110615b8d57615b8d619750565b60200260200101819052508460a00151604051602001615bad919061977f565b604051602081830303815290604052828280615ad8906198bd565b8460c00151158015615c0b575060408089015181518083018352600080825260209182015282518084019093528151835290810190820152615c0990511590565b155b15615cc45760408051808201909152600d81527f2d2d6c6963656e7365547970650000000000000000000000000000000000000060208201528282615c4f816198bd565b935060ff1681518110615c6457615c64619750565b6020026020010181905250615c7888616e5a565b604051602001615c88919061977f565b604051602081830303815290604052828280615ca3906198bd565b935060ff1681518110615cb857615cb8619750565b60200260200101819052505b60408086015181518083018352600080825260209182015282518084019093528151835290810190820152615cf890511590565b615d8d5760408051808201909152600b81527f2d2d72656c61796572496400000000000000000000000000000000000000000060208201528282615d3b816198bd565b935060ff1681518110615d5057615d50619750565b60200260200101819052508460400151828280615d6c906198bd565b935060ff1681518110615d8157615d81619750565b60200260200101819052505b606085015115615eae5760408051808201909152600681527f2d2d73616c74000000000000000000000000000000000000000000000000000060208201528282615dd6816198bd565b935060ff1681518110615deb57615deb619750565b602090810291909101015260608501516040517fb11a19e800000000000000000000000000000000000000000000000000000000815260048101919091526001600160a01b0384169063b11a19e890602401600060405180830381865afa158015615e5a573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052615e82919081019061940f565b8282615e8d816198bd565b935060ff1681518110615ea257615ea2619750565b60200260200101819052505b60e08501515115615f555760408051808201909152600a81527f2d2d6761734c696d69740000000000000000000000000000000000000000000060208201528282615ef8816198bd565b935060ff1681518110615f0d57615f0d619750565b6020026020010181905250615f298560e0015160000151616dba565b8282615f34816198bd565b935060ff1681518110615f4957615f49619750565b60200260200101819052505b60e08501516020015115615fff5760408051808201909152600a81527f2d2d67617350726963650000000000000000000000000000000000000000000060208201528282615fa2816198bd565b935060ff1681518110615fb757615fb7619750565b6020026020010181905250615fd38560e0015160200151616dba565b8282615fde816198bd565b935060ff1681518110615ff357615ff3619750565b60200260200101819052505b60e085015160400151156160a95760408051808201909152600e81527f2d2d6d61784665655065724761730000000000000000000000000000000000006020820152828261604c816198bd565b935060ff168151811061606157616061619750565b602002602001018190525061607d8560e0015160400151616dba565b8282616088816198bd565b935060ff168151811061609d5761609d619750565b60200260200101819052505b60e085015160600151156161535760408051808201909152601681527f2d2d6d61785072696f7269747946656550657247617300000000000000000000602082015282826160f6816198bd565b935060ff168151811061610b5761610b619750565b60200260200101819052506161278560e0015160600151616dba565b8282616132816198bd565b935060ff168151811061614757616147619750565b60200260200101819052505b60008160ff1667ffffffffffffffff811115616171576161716191d1565b6040519080825280602002602001820160405280156161a457816020015b606081526020019060019003908161618f5790505b50905060005b8260ff168160ff1610156161fd57838160ff16815181106161cd576161cd619750565b6020026020010151828260ff16815181106161ea576161ea619750565b60209081029190910101526001016161aa565b5093505050505b949350505050565b6162336040518060600160405280600060030b815260200160608152602001606081525090565b60408051808201825260048082527f6261736800000000000000000000000000000000000000000000000000000000602083015291517fd145736c000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d92600091849163d145736c916162b991869101619947565b600060405180830381865afa1580156162d6573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526162fe919081019061940f565b9050600061630c8683617949565b90506000846001600160a01b031663f45c1ce7836040518263ffffffff1660e01b815260040161633c9190618c93565b6000604051808303816000875af115801561635b573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052616383919081019061998e565b805190915060030b1580159061639c5750602081015151155b80156163ab5750604081015151155b1561538557816000815181106163c3576163c3619750565b60200260200101516040516020016149da9190619a44565b606060006164108560408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6040805180820182526000808252602091820152815180830190925286518252808701908201529091506164479082905b90617a9e565b156165a45760006164c4826164be846164b861648a8a60408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6040805180820182526000808252602091820152815180830190925282518252918201519181019190915290565b90617ac5565b90617b27565b604080518082018252600181527f0a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152909150616528908290617a9e565b1561659257604080518082018252600181527f0a000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261658f905b8290617bac565b90505b61659b81617bd2565b92505050614907565b82156165bd5784846040516020016149da929190619c30565b5050604080516020810190915260008152614907565b509392505050565b6000808251602084016000f09392505050565b8160a00151156165fd57505050565b600061660a848484617c3b565b905060006166178261620c565b602081015181519192509060030b1580156166b35750604080518082018252600781527f5355434345535300000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526166b390604080518082018252600080825260209182015281518083019092528451825280850190820152616441565b156166c057505050505050565b604082015151156166e05781604001516040516020016149da9190619cd7565b806040516020016149da9190619d35565b606060006167268360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600481527f2e736f6c000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015290915061678b905b8290616d59565b156167fa57604080518082018252600481527f2e736f6c0000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152614907906167f59083906181d6565b617bd2565b604080518082018252600181527f3a000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261685c905b8290618260565b60010361692957604080518082018252600181527f3a00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526168c290616588565b50604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152614907906167f5905b8390617bac565b604080518082018252600581527f2e6a736f6e0000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261698890616784565b15616abf57604080518082018252600181527f2f000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201819052845180860190955292518452830152906169f09083906182fa565b905060008160018351616a039190618fd5565b81518110616a1357616a13619750565b60200260200101519050616ab66167f5616a896040518060400160405280600581526020017f2e6a736f6e00000000000000000000000000000000000000000000000000000081525060408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600080825260209182015281518083019092528551825280860190820152906181d6565b95945050505050565b826040516020016149da9190619da0565b50919050565b60606000616b0b8360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600481527f2e736f6c0000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152909150616b6d90616784565b15616b7b5761490781617bd2565b604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616bda90616855565b600103616c4457604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152614907906167f590616922565b604080518082018252600581527f2e6a736f6e00000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616ca390616784565b15616abf57604080518082018252600181527f2f00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820181905284518086019095529251845283015290616d0b9083906182fa565b9050600181511115616d47578060028251616d269190618fd5565b81518110616d3657616d36619750565b602002602001015192505050919050565b50826040516020016149da9190619da0565b805182516000911115616d6e5750600061480e565b81518351602085015160009291616d8491618fe8565b616d8e9190618fd5565b905082602001518103616da557600191505061480e565b82516020840151819020912014905092915050565b60606000616dc78361839f565b600101905060008167ffffffffffffffff811115616de757616de76191d1565b6040519080825280601f01601f191660200182016040528015616e11576020820181803683370190505b5090508181016020015b600019017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a8504945084616e1b57509392505050565b604081810151815180830183526000808252602091820181905283518085018552835181529282018383015283518085018552600a81527f554e4c4943454e5345440000000000000000000000000000000000000000000081840190815285518087018752838152840192909252845180860190955251845290830152606091616ee6905b8290618481565b15616f2657505060408051808201909152600481527f4e6f6e65000000000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600981527f556e6c6963656e7365000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616f8590616edf565b15616fc557505060408051808201909152600981527f556e6c6963656e736500000000000000000000000000000000000000000000006020820152919050565b604080518082018252600381527f4d495400000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261702490616edf565b1561706457505060408051808201909152600381527f4d495400000000000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f47504c2d322e302d6f6e6c790000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526170c390616edf565b806171285750604080518082018252601081527f47504c2d322e302d6f722d6c61746572000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261712890616edf565b1561716857505060408051808201909152600981527f474e552047504c763200000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f47504c2d332e302d6f6e6c790000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526171c790616edf565b8061722c5750604080518082018252601081527f47504c2d332e302d6f722d6c61746572000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261722c90616edf565b1561726c57505060408051808201909152600981527f474e552047504c763300000000000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4c47504c2d322e312d6f6e6c7900000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526172cb90616edf565b806173305750604080518082018252601181527f4c47504c2d322e312d6f722d6c617465720000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261733090616edf565b1561737057505060408051808201909152600c81527f474e55204c47504c76322e3100000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4c47504c2d332e302d6f6e6c7900000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526173cf90616edf565b806174345750604080518082018252601181527f4c47504c2d332e302d6f722d6c617465720000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261743490616edf565b1561747457505060408051808201909152600a81527f474e55204c47504c7633000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f4253442d322d436c617573650000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526174d390616edf565b1561751357505060408051808201909152600c81527f4253442d322d436c6175736500000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f4253442d332d436c6175736500000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261757290616edf565b156175b257505060408051808201909152600c81527f4253442d332d436c6175736500000000000000000000000000000000000000006020820152919050565b604080518082018252600781527f4d504c2d322e30000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261761190616edf565b1561765157505060408051808201909152600781527f4d504c2d322e30000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600781527f4f534c2d332e3000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526176b090616edf565b156176f057505060408051808201909152600781527f4f534c2d332e30000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600a81527f4170616368652d322e30000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261774f90616edf565b1561778f57505060408051808201909152600a81527f4170616368652d322e30000000000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4147504c2d332e302d6f6e6c7900000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526177ee90616edf565b806178535750604080518082018252601181527f4147504c2d332e302d6f722d6c617465720000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261785390616edf565b1561789357505060408051808201909152600a81527f474e55204147504c7633000000000000000000000000000000000000000000006020820152919050565b604080518082018252600881527f4255534c2d312e31000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526178f290616edf565b1561793257505060408051808201909152600781527f42534c20312e31000000000000000000000000000000000000000000000000006020820152919050565b604080840151845191516149da9290602001619e7e565b60608060005b84518110156179d4578185828151811061796b5761796b619750565b60200260200101516040516020016179849291906192ee565b6040516020818303038152906040529150600185516179a39190618fd5565b81146179cc57816040516020016179ba9190619fe7565b60405160208183030381529060405291505b60010161794f565b5060408051600380825260808201909252600091816020015b60608152602001906001900390816179ed5790505090508381600081518110617a1857617a18619750565b60200260200101819052506040518060400160405280600281526020017f2d6300000000000000000000000000000000000000000000000000000000000081525081600181518110617a6c57617a6c619750565b60200260200101819052508181600281518110617a8b57617a8b619750565b6020908102919091010152949350505050565b6020808301518351835192840151600093617abc9291849190618495565b14159392505050565b60408051808201909152600080825260208201526000617af784600001518560200151856000015186602001516185a6565b9050836020015181617b099190618fd5565b84518590617b18908390618fd5565b90525060208401525090919050565b6040805180820190915260008082526020820152815183511015617b4c57508161480e565b6020808301519084015160019114617b735750815160208481015190840151829020919020145b8015617ba457825184518590617b8a908390618fd5565b9052508251602085018051617ba0908390618fe8565b9052505b509192915050565b6040805180820190915260008082526020820152617bcb8383836186c6565b5092915050565b60606000826000015167ffffffffffffffff811115617bf357617bf36191d1565b6040519080825280601f01601f191660200182016040528015617c1d576020820181803683370190505b5090506000602082019050617bcb8185602001518660000151618771565b60606000617c47614c04565b6040805160ff808252612000820190925291925060009190816020015b6060815260200190600190039081617c6457905050905060006040518060400160405280600381526020017f6e70780000000000000000000000000000000000000000000000000000000000815250828280617cbf906198bd565b935060ff1681518110617cd457617cd4619750565b60200260200101819052506040518060400160405280600781526020017f5e312e33322e3300000000000000000000000000000000000000000000000000815250604051602001617d25919061a028565b604051602081830303815290604052828280617d40906198bd565b935060ff1681518110617d5557617d55619750565b60200260200101819052506040518060400160405280600881526020017f76616c6964617465000000000000000000000000000000000000000000000000815250828280617da2906198bd565b935060ff1681518110617db757617db7619750565b602002602001018190525082604051602001617dd391906197eb565b604051602081830303815290604052828280617dee906198bd565b935060ff1681518110617e0357617e03619750565b60200260200101819052506040518060400160405280600a81526020017f2d2d636f6e747261637400000000000000000000000000000000000000000000815250828280617e50906198bd565b935060ff1681518110617e6557617e65619750565b6020026020010181905250617e7a87846187eb565b8282617e85816198bd565b935060ff1681518110617e9a57617e9a619750565b602090810291909101015285515115617f465760408051808201909152600b81527f2d2d7265666572656e636500000000000000000000000000000000000000000060208201528282617eec816198bd565b935060ff1681518110617f0157617f01619750565b6020026020010181905250617f1a8660000151846187eb565b8282617f25816198bd565b935060ff1681518110617f3a57617f3a619750565b60200260200101819052505b856080015115617fb45760408051808201909152601881527f2d2d756e73616665536b697053746f72616765436865636b000000000000000060208201528282617f8f816198bd565b935060ff1681518110617fa457617fa4619750565b602002602001018190525061801a565b841561801a5760408051808201909152601281527f2d2d726571756972655265666572656e6365000000000000000000000000000060208201528282617ff9816198bd565b935060ff168151811061800e5761800e619750565b60200260200101819052505b604086015151156180b65760408051808201909152600d81527f2d2d756e73616665416c6c6f770000000000000000000000000000000000000060208201528282618064816198bd565b935060ff168151811061807957618079619750565b60200260200101819052508560400151828280618095906198bd565b935060ff16815181106180aa576180aa619750565b60200260200101819052505b8560600151156181205760408051808201909152601481527f2d2d756e73616665416c6c6f7752656e616d6573000000000000000000000000602082015282826180ff816198bd565b935060ff168151811061811457618114619750565b60200260200101819052505b60008160ff1667ffffffffffffffff81111561813e5761813e6191d1565b60405190808252806020026020018201604052801561817157816020015b606081526020019060019003908161815c5790505b50905060005b8260ff168160ff1610156181ca57838160ff168151811061819a5761819a619750565b6020026020010151828260ff16815181106181b7576181b7619750565b6020908102919091010152600101618177565b50979650505050505050565b60408051808201909152600080825260208201528151835110156181fb57508161480e565b8151835160208501516000929161821191618fe8565b61821b9190618fd5565b6020840151909150600190821461823c575082516020840151819020908220145b801561825757835185518690618253908390618fd5565b9052505b50929392505050565b600080826000015161828485600001518660200151866000015187602001516185a6565b61828e9190618fe8565b90505b835160208501516182a29190618fe8565b8111617bcb57816182b28161a06d565b92505082600001516182e98560200151836182cd9190618fd5565b86516182d99190618fd5565b83866000015187602001516185a6565b6182f39190618fe8565b9050618291565b606060006183088484618260565b618313906001618fe8565b67ffffffffffffffff81111561832b5761832b6191d1565b60405190808252806020026020018201604052801561835e57816020015b60608152602001906001900390816183495790505b50905060005b81518110156165d35761837a6167f58686617bac565b82828151811061838c5761838c619750565b6020908102919091010152600101618364565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f01000000000000000083106183e8577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310618414576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc10000831061843257662386f26fc10000830492506010015b6305f5e100831061844a576305f5e100830492506008015b612710831061845e57612710830492506004015b60648310618470576064830492506002015b600a831061480e5760010192915050565b600061848d838361882b565b159392505050565b60008085841161859c576020841161854857600084156184e05760016184bc866020618fd5565b6184c790600861a087565b6184d290600261a185565b6184dc9190618fd5565b1990505b83518116856184ef8989618fe8565b6184f99190618fd5565b805190935082165b8181146185335787841161851b5787945050505050616204565b836185258161a191565b945050828451169050618501565b61853d8785618fe8565b945050505050616204565b8383206185558588618fd5565b61855f9087618fe8565b91505b85821061859a578482208082036185875761857d8684618fe8565b9350505050616204565b618592600184618fd5565b925050618562565b505b5092949350505050565b600083818685116186b1576020851161866057600085156185f25760016185ce876020618fd5565b6185d990600861a087565b6185e490600261a185565b6185ee9190618fd5565b1990505b845181166000876186038b8b618fe8565b61860d9190618fd5565b855190915083165b8281146186525781861061863a5761862d8b8b618fe8565b9650505050505050616204565b856186448161a06d565b965050838651169050618615565b859650505050505050616204565b508383206000905b6186728689618fd5565b82116186af5785832080820361868e5783945050505050616204565b618699600185618fe8565b93505081806186a79061a06d565b925050618668565b505b6186bb8787618fe8565b979650505050505050565b604080518082019091526000808252602082015260006186f885600001518660200151866000015187602001516185a6565b6020808701805191860191909152519091506187149082618fd5565b8352845160208601516187279190618fe8565b81036187365760008552618768565b835183516187449190618fe8565b85518690618753908390618fd5565b90525083516187629082618fe8565b60208601525b50909392505050565b602081106187a95781518352618788602084618fe8565b9250618795602083618fe8565b91506187a2602082618fd5565b9050618771565b60001981156187d85760016187bf836020618fd5565b6187cb9061010061a185565b6187d59190618fd5565b90505b9151835183169219169190911790915250565b606060006187f98484614cd7565b80516020808301516040519394506188139390910161a1a8565b60405160208183030381529060405291505092915050565b815181516000919081111561883e575081515b6020808501519084015160005b838110156188f757825182518082146188c75760001960208710156188a657600184618878896020618fd5565b6188829190618fe8565b61888d90600861a087565b61889890600261a185565b6188a29190618fd5565b1990505b81811683821681810391146188c457975061480e9650505050505050565b50505b6188d2602086618fe8565b94506188df602085618fe8565b935050506020816188f09190618fe8565b905061884b565b5084518651615385919061a200565b610b678061a22183390190565b61053f8061ad8883390190565b61106f8061b2c783390190565b611bb98061c33683390190565b6040518060e0016040528060608152602001606081526020016060815260200160001515815260200160001515815260200160001515815260200161897d618982565b905290565b6040518061010001604052806000151581526020016000151581526020016060815260200160008019168152602001606081526020016060815260200160001515815260200161897d6040518060800160405280600081526020016000815260200160008152602001600081525090565b602080825282518282018190526000918401906040840190835b81811015618a345783516001600160a01b0316835260209384019390920191600101618a0d565b509095945050505050565b60005b83811015618a5a578181015183820152602001618a42565b50506000910152565b60008151808452618a7b816020860160208601618a3f565b601f01601f19169290920160200192915050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015618b8b577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452815180516001600160a01b03168652602090810151604082880181905281519088018190529101906060600582901b88018101919088019060005b81811015618b71577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa08a8503018352618b5b848651618a63565b6020958601959094509290920191600101618b21565b509197505050602094850194929092019150600101618ab7565b50929695505050505050565b600081518084526020840193506020830160005b82811015618beb5781517fffffffff0000000000000000000000000000000000000000000000000000000016865260209586019590910190600101618bab565b5093949350505050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015618b8b577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08786030184528151805160408752618c616040880182618a63565b9050602082015191508681036020880152618c7c8183618b97565b965050506020938401939190910190600101618c1d565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015618b8b577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452618cf5858351618a63565b94506020938401939190910190600101618cbb565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015618b8b577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc087860301845281516001600160a01b0381511686526020810151905060406020870152618d8b6040870182618b97565b9550506020938401939190910190600101618d32565b600060208284031215618db357600080fd5b81516001600160a01b038116811461490757600080fd5b610100815260056101008201527f544f4b454e000000000000000000000000000000000000000000000000000000610120820152610140602082015260036101408201527f544b4e000000000000000000000000000000000000000000000000000000000061016082015260006101808201905060ff8816604083015286606083015260038610618e84577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b8560808301528460a0830152618ea560c08301856001600160a01b03169052565b6001600160a01b03831660e0830152979650505050505050565b600060208284031215618ed157600080fd5b8151801515811461490757600080fd5b600060208284031215618ef357600080fd5b5051919050565b608081526000618f0d6080830187618a63565b8560208401526001600160a01b038516604084015282810360608401526186bb8185618a63565b60c081526000618f4760c0830189618a63565b6001600160a01b038816602084015286604084015285606084015284608084015282810360a0840152618f7a8185618a63565b9998505050505050505050565b838152826020820152606060408201526000616ab66060830184618a63565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8181038181111561480e5761480e618fa6565b8082018082111561480e5761480e618fa6565b600181811c9082168061900f57607f821691505b602082108103616ad0577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60608152600061905b6060830186618a63565b84602084015282810360408401526153858185618a63565b6060815260006190866060830186618a63565b90508360208301526001600160a01b0383166040830152949350505050565b6040815260006190b86040830185618a63565b82810360208401526149038185618a63565b60c0815260006190dd60c0830188618a63565b6001600160a01b038716602084015285604084015284606084015283608084015282810360a084015260008152602081019150509695505050505050565b6001600160a01b03831681526040602082015260006162046040830184618a63565b7f4661696c656420746f206465706c6f7920636f6e74726163742000000000000081526000835161917581601a850160208801618a3f565b7f3a20000000000000000000000000000000000000000000000000000000000000601a9184019182015283516191b281601c840160208801618a3f565b01601c01949350505050565b6020815260006149076020830184618a63565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040516060810167ffffffffffffffff81118282101715619223576192236191d1565b60405290565b60008067ffffffffffffffff841115619244576192446191d1565b50604051601f19601f85018116603f0116810181811067ffffffffffffffff82111715619273576192736191d1565b60405283815290508082840185101561928b57600080fd5b6165d3846020830185618a3f565b600082601f8301126192aa57600080fd5b61490783835160208501619229565b6000602082840312156192cb57600080fd5b815167ffffffffffffffff8111156192e257600080fd5b61480a84828501619299565b60008351619300818460208801618a3f565b835190830190619314818360208801618a3f565b01949350505050565b7f4661696c656420746f206465706c6f7920636f6e74726163742000000000000081526000835161935581601a850160208801618a3f565b7f207573696e6720636f6e7374727563746f722064617461202200000000000000601a918401918201528351619392816033840160208801618a3f565b7f220000000000000000000000000000000000000000000000000000000000000060339290910191820152603401949350505050565b60408152600b60408201527f464f554e4452595f4f555400000000000000000000000000000000000000000060608201526080602082015260006149076080830184618a63565b60006020828403121561942157600080fd5b815167ffffffffffffffff81111561943857600080fd5b8201601f8101841361944957600080fd5b61480a84825160208401619229565b6000855161946a818460208a01618a3f565b7f2f0000000000000000000000000000000000000000000000000000000000000090830190815285516194a4816001840160208a01618a3f565b7f2f000000000000000000000000000000000000000000000000000000000000006001929091019182015284516194e2816002840160208901618a3f565b6001818301019150507f2f0000000000000000000000000000000000000000000000000000000000000060018201528351619524816002840160208801618a3f565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600292909101918201526007019695505050505050565b60408152600061956f6040830184618a63565b8281036020840152600481527f2e6173740000000000000000000000000000000000000000000000000000000060208201526040810191505092915050565b7f436f756c64206e6f742066696e642041535420696e20617274696661637420008152600082516195e681601f850160208701618a3f565b7f2e205365742060617374203d20747275656020696e20666f756e6472792e746f601f9390910192830152507f6d6c000000000000000000000000000000000000000000000000000000000000603f820152604101919050565b6040815260006196536040830184618a63565b8281036020840152601181527f2e6173742e6162736f6c7574655061746800000000000000000000000000000060208201526040810191505092915050565b6040815260006196a56040830184618a63565b8281036020840152600c81527f2e6173742e6c6963656e7365000000000000000000000000000000000000000060208201526040810191505092915050565b7f2e6d657461646174612e736f75726365732e5b2700000000000000000000000081526000825161971c816014850160208701618a3f565b7f275d2e6b656363616b32353600000000000000000000000000000000000000006014939091019283015250602001919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f22000000000000000000000000000000000000000000000000000000000000008152600082516197b7816001850160208701618a3f565b7f22000000000000000000000000000000000000000000000000000000000000006001939091019283015250600201919050565b600082516197fd818460208701618a3f565b7f2f6275696c642d696e666f000000000000000000000000000000000000000000920191825250600b01919050565b7f436f756c64206e6f742066696e64206275696c642d696e666f2066696c65207781527f697468206d61746368696e6720736f7572636520636f6465206861736820666f60208201527f7220636f6e7472616374200000000000000000000000000000000000000000006040820152600082516198b081604b850160208701618a3f565b91909101604b0192915050565b600060ff821660ff81036198d3576198d3618fa6565b60010192915050565b7f406f70656e7a657070656c696e2f646566656e6465722d6465706c6f792d636c81527f69656e742d636c6940000000000000000000000000000000000000000000000060208201526000825161993a816029850160208701618a3f565b9190910160290192915050565b60408152601660408201527f4f50454e5a455050454c494e5f424153485f504154480000000000000000000060608201526080602082015260006149076080830184618a63565b6000602082840312156199a057600080fd5b815167ffffffffffffffff8111156199b757600080fd5b8201606081850312156199c957600080fd5b6199d1619200565b81518060030b81146199e257600080fd5b8152602082015167ffffffffffffffff8111156199fe57600080fd5b619a0a86828501619299565b602083015250604082015167ffffffffffffffff811115619a2a57600080fd5b619a3686828501619299565b604083015250949350505050565b7f4661696c656420746f2072756e206261736820636f6d6d616e6420776974682081527f2200000000000000000000000000000000000000000000000000000000000000602082015260008251619aa2816021850160208701618a3f565b7f222e20496620796f7520617265207573696e672057696e646f77732c2073657460219390910192830152507f20746865204f50454e5a455050454c494e5f424153485f5041544820656e766960418201527f726f6e6d656e74207661726961626c6520746f207468652066756c6c7920717560618201527f616c69666965642070617468206f66207468652062617368206578656375746160818201527f626c652e20466f72206578616d706c652c20696620796f75206172652075736960a18201527f6e672047697420666f722057696e646f77732c206164642074686520666f6c6c60c18201527f6f77696e67206c696e6520696e20746865202e656e762066696c65206f66207960e18201527f6f75722070726f6a65637420287573696e6720666f727761726420736c6173686101018201527f6573293a0a4f50454e5a455050454c494e5f424153485f504154483d22433a2f6101218201527f50726f6772616d2046696c65732f4769742f62696e2f6261736822000000000061014182015261015c01919050565b7f4661696c656420746f2066696e64206c696e652077697468207072656669782081527f2700000000000000000000000000000000000000000000000000000000000000602082015260008351619c8e816021850160208801618a3f565b7f2720696e206f75747075743a20000000000000000000000000000000000000006021918401918201528351619ccb81602e840160208801618a3f565b01602e01949350505050565b7f4661696c656420746f2072756e2075706772616465207361666574792076616c81527f69646174696f6e3a20000000000000000000000000000000000000000000000060208201526000825161993a816029850160208701618a3f565b7f55706772616465207361666574792076616c69646174696f6e206661696c656481527f3a0a000000000000000000000000000000000000000000000000000000000000602082015260008251619d93816022850160208701618a3f565b9190910160220192915050565b7f436f6e7472616374206e616d6520000000000000000000000000000000000000815260008251619dd881600e850160208701618a3f565b7f206d75737420626520696e2074686520666f726d6174204d79436f6e74726163600e9390910192830152507f742e736f6c3a4d79436f6e7472616374206f72204d79436f6e74726163742e73602e8201527f6f6c206f72206f75742f4d79436f6e74726163742e736f6c2f4d79436f6e7472604e8201527f6163742e6a736f6e000000000000000000000000000000000000000000000000606e820152607601919050565b7f53504458206c6963656e7365206964656e746966696572200000000000000000815260008351619eb6816018850160208801618a3f565b7f20696e20000000000000000000000000000000000000000000000000000000006018918401918201528351619ef381601c840160208801618a3f565b7f20646f6573206e6f74206c6f6f6b206c696b65206120737570706f7274656420601c92909101918201527f6c6963656e736520666f7220626c6f636b206578706c6f726572207665726966603c8201527f69636174696f6e2e205573652074686520606c6963656e73655479706560206f605c8201527f7074696f6e20746f20737065636966792061206c6963656e736520747970652c607c8201527f206f7220736574207468652060736b69704c6963656e73655479706560206f70609c8201527f74696f6e20746f2060747275656020746f20736b69702e00000000000000000060bc82015260d301949350505050565b60008251619ff9818460208701618a3f565b7f2000000000000000000000000000000000000000000000000000000000000000920191825250600101919050565b7f406f70656e7a657070656c696e2f75706772616465732d636f7265400000000081526000825161a06081601c850160208701618a3f565b91909101601c0192915050565b6000600019820361a0805761a080618fa6565b5060010190565b808202811582820484141761480e5761480e618fa6565b6001815b600184111561a0d95780850481111561a0bd5761a0bd618fa6565b600184161561a0cb57908102905b60019390931c92800261a0a2565b935093915050565b60008261a0f05750600161480e565b8161a0fd5750600061480e565b816001811461a113576002811461a11d5761a139565b600191505061480e565b60ff84111561a12e5761a12e618fa6565b50506001821b61480e565b5060208310610133831016604e8410600b841016171561a15c575081810a61480e565b61a169600019848461a09e565b806000190482111561a17d5761a17d618fa6565b029392505050565b6000614907838361a0e1565b60008161a1a05761a1a0618fa6565b506000190190565b6000835161a1ba818460208801618a3f565b7f3a00000000000000000000000000000000000000000000000000000000000000908301908152835161a1f4816001840160208801618a3f565b01600101949350505050565b8181036000831280158383131683831282161715617bcb57617bcb618fa656fe60c0604052600d60809081526c2bb930b83832b21022ba3432b960991b60a05260009061002c9082610114565b506040805180820190915260048152630ae8aa8960e31b60208201526001906100559082610114565b506002805460ff1916601217905534801561006f57600080fd5b506101d2565b634e487b7160e01b600052604160045260246000fd5b600181811c9082168061009f57607f821691505b6020821081036100bf57634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111561010f57806000526020600020601f840160051c810160208510156100ec5750805b601f840160051c820191505b8181101561010c57600081556001016100f8565b50505b505050565b81516001600160401b0381111561012d5761012d610075565b6101418161013b845461008b565b846100c5565b6020601f821160018114610175576000831561015d5750848201515b600019600385901b1c1916600184901b17845561010c565b600084815260208120601f198516915b828110156101a55787850151825560209485019460019092019101610185565b50848210156101c35786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b610986806101e16000396000f3fe6080604052600436106100c05760003560e01c8063313ce56711610074578063a9059cbb1161004e578063a9059cbb146101fa578063d0e30db01461021a578063dd62ed3e1461022257600080fd5b8063313ce5671461018c57806370a08231146101b857806395d89b41146101e557600080fd5b806318160ddd116100a557806318160ddd1461012f57806323b872dd1461014c5780632e1a7d4d1461016c57600080fd5b806306fdde03146100d4578063095ea7b3146100ff57600080fd5b366100cf576100cd61025a565b005b600080fd5b3480156100e057600080fd5b506100e96102b5565b6040516100f69190610745565b60405180910390f35b34801561010b57600080fd5b5061011f61011a3660046107da565b610343565b60405190151581526020016100f6565b34801561013b57600080fd5b50475b6040519081526020016100f6565b34801561015857600080fd5b5061011f610167366004610804565b6103bd565b34801561017857600080fd5b506100cd610187366004610841565b610647565b34801561019857600080fd5b506002546101a69060ff1681565b60405160ff90911681526020016100f6565b3480156101c457600080fd5b5061013e6101d336600461085a565b60036020526000908152604090205481565b3480156101f157600080fd5b506100e9610724565b34801561020657600080fd5b5061011f6102153660046107da565b610731565b6100cd61025a565b34801561022e57600080fd5b5061013e61023d366004610875565b600460209081526000928352604080842090915290825290205481565b33600090815260036020526040812080543492906102799084906108d7565b909155505060405134815233907fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c9060200160405180910390a2565b600080546102c2906108ea565b80601f01602080910402602001604051908101604052809291908181526020018280546102ee906108ea565b801561033b5780601f106103105761010080835404028352916020019161033b565b820191906000526020600020905b81548152906001019060200180831161031e57829003601f168201915b505050505081565b33600081815260046020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925906103ab9086815260200190565b60405180910390a35060015b92915050565b73ffffffffffffffffffffffffffffffffffffffff831660009081526003602052604081205482111561042b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600060248201526044015b60405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff841633148015906104a1575073ffffffffffffffffffffffffffffffffffffffff841660009081526004602090815260408083203384529091529020547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff14155b156105605773ffffffffffffffffffffffffffffffffffffffff8416600090815260046020908152604080832033845290915290205482111561051a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526020600482015260006024820152604401610422565b73ffffffffffffffffffffffffffffffffffffffff841660009081526004602090815260408083203384529091528120805484929061055a90849061093d565b90915550505b73ffffffffffffffffffffffffffffffffffffffff84166000908152600360205260408120805484929061059590849061093d565b909155505073ffffffffffffffffffffffffffffffffffffffff8316600090815260036020526040812080548492906105cf9084906108d7565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161063591815260200190565b60405180910390a35060019392505050565b3360009081526003602052604090205481111561069a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526020600482015260006024820152604401610422565b33600090815260036020526040812080548392906106b990849061093d565b9091555050604051339082156108fc029083906000818181858888f193505050501580156106eb573d6000803e3d6000fd5b5060405181815233907f7fcf532c15f0a6db0bd6d0e038bea71d30d808c7d98cb3bf7268a95bf5081b659060200160405180910390a250565b600180546102c2906108ea565b600061073e3384846103bd565b9392505050565b602081526000825180602084015260005b818110156107735760208186018101516040868401015201610756565b5060006040828501015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011684010191505092915050565b803573ffffffffffffffffffffffffffffffffffffffff811681146107d557600080fd5b919050565b600080604083850312156107ed57600080fd5b6107f6836107b1565b946020939093013593505050565b60008060006060848603121561081957600080fd5b610822846107b1565b9250610830602085016107b1565b929592945050506040919091013590565b60006020828403121561085357600080fd5b5035919050565b60006020828403121561086c57600080fd5b61073e826107b1565b6000806040838503121561088857600080fd5b610891836107b1565b915061089f602084016107b1565b90509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b808201808211156103b7576103b76108a8565b600181811c908216806108fe57607f821691505b602082108103610937577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b818103818111156103b7576103b76108a856fea264697066735822122008d7fc4e09519c5dd9f356b03596f6829a151d0bc7682533f9ceab4e459f5ee264736f6c634300081a00336080604052348015600f57600080fd5b506105208061001f6000396000f3fe60806040526004361061002a5760003560e01c806369582bee14610033578063de43156e1461005357005b3661003157005b005b34801561003f57600080fd5b5061003161004e3660046101ba565b610073565b34801561005f57600080fd5b5061003161006e3660046101ba565b6100ee565b6060811561008a5761008782840184610273565b90505b7ffdc887992b033668833927e252058e468fac0b6bd196d520f09c61b740e999486100b58780610369565b6100c560408a0160208b016103ce565b896040013533866040516100de969594939291906103f0565b60405180910390a1505050505050565b606081156101055761010282840184610273565b90505b7fcdc8ee677dc5ebe680fb18cebda5e26ba5ea1f0ba504a47e2a9a2ecb476dc98e6100b58780610369565b60006060828403121561014257600080fd5b50919050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461016c57600080fd5b919050565b60008083601f84011261018357600080fd5b50813567ffffffffffffffff81111561019b57600080fd5b6020830191508360208285010111156101b357600080fd5b9250929050565b6000806000806000608086880312156101d257600080fd5b853567ffffffffffffffff8111156101e957600080fd5b6101f588828901610130565b95505061020460208701610148565b935060408601359250606086013567ffffffffffffffff81111561022757600080fd5b61023388828901610171565b969995985093965092949392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60006020828403121561028557600080fd5b813567ffffffffffffffff81111561029c57600080fd5b8201601f810184136102ad57600080fd5b803567ffffffffffffffff8111156102c7576102c7610244565b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8501160116810181811067ffffffffffffffff8211171561033357610333610244565b60405281815282820160200186101561034b57600080fd5b81602084016020830137600091810160200191909152949350505050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261039e57600080fd5b83018035915067ffffffffffffffff8211156103b957600080fd5b6020019150368190038213156101b357600080fd5b6000602082840312156103e057600080fd5b6103e982610148565b9392505050565b60a081528560a0820152858760c0830137600060c0878301015260007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f880116820173ffffffffffffffffffffffffffffffffffffffff8716602084015285604084015273ffffffffffffffffffffffffffffffffffffffff8516606084015260c083820301608084015283518060c083015260005b818110156104a557602081870181015184830160e0015201610488565b50600060e0838301810191909152601f9091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016909101019897505050505050505056fea2646970667358221220f4d1ccb9c8450e782e1c77412473fd37637a5c83a2a3272307d8c8bc8e8c7a3364736f6c634300081a003360c060405234801561001057600080fd5b5060405161106f38038061106f83398101604081905261002f916100db565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461006357604051632b2add3d60e01b815260040160405180910390fd5b600380546001600160a01b0319166001600160a01b0385811691909117909155828116608052811660a0526040517f80699e81136d69cb8367ad52a994e25c722a86da654b561d0c14b61a777e7ac590600090a150505061011e565b80516001600160a01b03811681146100d657600080fd5b919050565b6000806000606084860312156100f057600080fd5b6100f9846100bf565b9250610107602085016100bf565b9150610115604085016100bf565b90509250925092565b60805160a051610f2561014a60003960006101e50152600081816102b9015261045b0152610f256000f3fe608060405234801561001057600080fd5b50600436106100f55760003560e01c806397770dff11610097578063c63585cc11610066578063c63585cc14610273578063d7fd7afb14610286578063d936a012146102b4578063ee2815ba146102db57600080fd5b806397770dff1461021a578063a7cb05071461022d578063c39aca3714610240578063c62178ac1461025357600080fd5b8063513a9c05116100d3578063513a9c051461018a578063569541b9146101c0578063842da36d146101e057806391dd645f1461020757600080fd5b80630be15547146100fa5780631f0e251b1461015a5780633ce4a5bc1461016f575b600080fd5b610130610108366004610bd1565b60016020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b61016d610168366004610c13565b6102ee565b005b61013073735b14bb79463307aacbed86daf3322b1e6226ab81565b610130610198366004610bd1565b60026020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b6003546101309073ffffffffffffffffffffffffffffffffffffffff1681565b6101307f000000000000000000000000000000000000000000000000000000000000000081565b61016d610215366004610c35565b610402565b61016d610228366004610c13565b610526565b61016d61023b366004610c61565b610633565b61016d61024e366004610c83565b6106ce565b6004546101309073ffffffffffffffffffffffffffffffffffffffff1681565b610130610281366004610d53565b6108cd565b6102a6610294366004610bd1565b60006020819052908152604090205481565b604051908152602001610151565b6101307f000000000000000000000000000000000000000000000000000000000000000081565b61016d6102e9366004610c35565b610a02565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461033b576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116610388576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600480547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527f3ade88e3922d64780e1bf4460d364c2970b69da813f9c0c07a1c187b5647636c906020015b60405180910390a150565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461044f576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600354600090610497907f00000000000000000000000000000000000000000000000000000000000000009073ffffffffffffffffffffffffffffffffffffffff16846108cd565b60008481526002602090815260409182902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff85169081179091558251878152918201529192507f0ecec485166da6139b13bb7e033e9446e2d35348e80ebf1180d4afe2dba1704e910160405180910390a1505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610573576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff81166105c0576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527fdba79d534382d1a8ae108e4c8ecb27c6ae42ab8b91d44eedf88bd329f3868d5e906020016103f7565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610680576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000828152602081815260409182902083905581518481529081018390527f49f492222906ac486c3c1401fa545626df1f0c0e5a77a05597ea2ed66af9850d91015b60405180910390a15050565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461071b576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff831673735b14bb79463307aacbed86daf3322b1e6226ab1480610768575073ffffffffffffffffffffffffffffffffffffffff831630145b1561079f576040517f82d5d76a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f47e7ef2400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152602482018690528616906347e7ef24906044016020604051808303816000875af1158015610814573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108389190610d96565b506040517fde43156e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84169063de43156e906108939089908990899088908890600401610e01565b600060405180830381600087803b1580156108ad57600080fd5b505af11580156108c1573d6000803e3d6000fd5b50505050505050505050565b60008060006108dc8585610ad3565b6040517fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606084811b8216602084015283901b16603482015291935091508690604801604051602081830303815290604052805190602001206040516020016109c29291907fff00000000000000000000000000000000000000000000000000000000000000815260609290921b7fffffffffffffffffffffffffffffffffffffffff00000000000000000000000016600183015260158201527f96e8ac4277198ff8b6f785478aa9a39f403cb768dd02cbee326c3e7da348845f603582015260550190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291905280516020909101209695505050505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610a4f576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008281526001602090815260409182902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff85169081179091558251858152918201527fd1b36d30f6248e97c473b4d1348ca164a4ef6759022f54a58ec200326c39c45d91016106c2565b6000808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603610b3b576040517fcb1e7cfe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1610610b75578284610b78565b83835b909250905073ffffffffffffffffffffffffffffffffffffffff8216610bca576040517f78b507da00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b9250929050565b600060208284031215610be357600080fd5b5035919050565b803573ffffffffffffffffffffffffffffffffffffffff81168114610c0e57600080fd5b919050565b600060208284031215610c2557600080fd5b610c2e82610bea565b9392505050565b60008060408385031215610c4857600080fd5b82359150610c5860208401610bea565b90509250929050565b60008060408385031215610c7457600080fd5b50508035926020909101359150565b60008060008060008060a08789031215610c9c57600080fd5b863567ffffffffffffffff811115610cb357600080fd5b87016060818a031215610cc557600080fd5b9550610cd360208801610bea565b945060408701359350610ce860608801610bea565b9250608087013567ffffffffffffffff811115610d0457600080fd5b8701601f81018913610d1557600080fd5b803567ffffffffffffffff811115610d2c57600080fd5b896020828401011115610d3e57600080fd5b60208201935080925050509295509295509295565b600080600060608486031215610d6857600080fd5b610d7184610bea565b9250610d7f60208501610bea565b9150610d8d60408501610bea565b90509250925092565b600060208284031215610da857600080fd5b81518015158114610c2e57600080fd5b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b60808152600086357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1883603018112610e3957600080fd5b870160208101903567ffffffffffffffff811115610e5657600080fd5b803603821315610e6557600080fd5b60606080850152610e7a60e085018284610db8565b91505073ffffffffffffffffffffffffffffffffffffffff610e9e60208a01610bea565b1660a0840152604088013560c084015273ffffffffffffffffffffffffffffffffffffffff871660208401528560408401528281036060840152610ee3818587610db8565b9897505050505050505056fea2646970667358221220431a07541a491b54259bdf8fcd05ade6751bfbbf0e72e605f27325b56d7d464f64736f6c634300081a003360e060405234801561001057600080fd5b50604051611bb9380380611bb983398101604081905261002f9161020e565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461006357604051632b2add3d60e01b815260040160405180910390fd5b6001600160a01b038216158061008057506001600160a01b038116155b1561009e5760405163d92e233d60e01b815260040160405180910390fd5b60066100aa8982610360565b5060076100b78882610360565b5060ff861660c05260808590528360028111156100d6576100d661041e565b60a08160028111156100ea576100ea61041e565b905250600192909255600080546001600160a01b039283166001600160a01b03199182161790915560088054929093169116179055506104349350505050565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261015157600080fd5b81516001600160401b0381111561016a5761016a61012a565b604051601f8201601f19908116603f011681016001600160401b03811182821017156101985761019861012a565b6040528181528382016020018510156101b057600080fd5b60005b828110156101cf576020818601810151838301820152016101b3565b506000918101602001919091529392505050565b8051600381106101f257600080fd5b919050565b80516001600160a01b03811681146101f257600080fd5b600080600080600080600080610100898b03121561022b57600080fd5b88516001600160401b0381111561024157600080fd5b61024d8b828c01610140565b60208b015190995090506001600160401b0381111561026b57600080fd5b6102778b828c01610140565b975050604089015160ff8116811461028e57600080fd5b60608a015190965094506102a460808a016101e3565b60a08a015190945092506102ba60c08a016101f7565b91506102c860e08a016101f7565b90509295985092959890939650565b600181811c908216806102eb57607f821691505b60208210810361030b57634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111561035b57806000526020600020601f840160051c810160208510156103385750805b601f840160051c820191505b818110156103585760008155600101610344565b50505b505050565b81516001600160401b038111156103795761037961012a565b61038d8161038784546102d7565b84610311565b6020601f8211600181146103c157600083156103a95750848201515b600019600385901b1c1916600184901b178455610358565b600084815260208120601f198516915b828110156103f157878501518255602094850194600190920191016103d1565b508482101561040f5786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b634e487b7160e01b600052602160045260246000fd5b60805160a05160c05161174861047160003960006102170152600061033a0152600081816102eb01528181610ad70152610bdd01526117486000f3fe608060405234801561001057600080fd5b50600436106101985760003560e01c80638b851b95116100e3578063ccc775991161008c578063eddeb12311610066578063eddeb12314610431578063f2441b3214610444578063f687d12a1461046457600080fd5b8063ccc77599146103a4578063d9eeebed146103b7578063dd62ed3e146103eb57600080fd5b8063a9059cbb116100bd578063a9059cbb14610369578063c70126261461037c578063c835d7cc1461038f57600080fd5b80638b851b951461030d57806395d89b411461032d578063a3413d031461033557600080fd5b80633ce4a5bc116101455780634d8943bb1161011f5780634d8943bb146102a757806370a08231146102b057806385e1f4d0146102e657600080fd5b80633ce4a5bc1461024157806342966c681461028157806347e7ef241461029457600080fd5b806318160ddd1161017657806318160ddd146101f557806323b872dd146101fd578063313ce5671461021057600080fd5b806306fdde031461019d578063091d2788146101bb578063095ea7b3146101d2575b600080fd5b6101a5610477565b6040516101b29190611327565b60405180910390f35b6101c460015481565b6040519081526020016101b2565b6101e56101e0366004611366565b610509565b60405190151581526020016101b2565b6005546101c4565b6101e561020b366004611392565b610520565b60405160ff7f00000000000000000000000000000000000000000000000000000000000000001681526020016101b2565b61025c73735b14bb79463307aacbed86daf3322b1e6226ab81565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101b2565b6101e561028f3660046113d3565b6105b7565b6101e56102a2366004611366565b6105cb565b6101c460025481565b6101c46102be3660046113ec565b73ffffffffffffffffffffffffffffffffffffffff1660009081526003602052604090205490565b6101c47f000000000000000000000000000000000000000000000000000000000000000081565b60085461025c9073ffffffffffffffffffffffffffffffffffffffff1681565b6101a561071f565b61035c7f000000000000000000000000000000000000000000000000000000000000000081565b6040516101b29190611409565b6101e5610377366004611366565b61072e565b6101e561038a366004611479565b61073b565b6103a261039d3660046113ec565b61088a565b005b6103a26103b23660046113ec565b61099e565b6103bf610aab565b6040805173ffffffffffffffffffffffffffffffffffffffff90931683526020830191909152016101b2565b6101c46103f9366004611571565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260046020908152604080832093909416825291909152205490565b6103a261043f3660046113d3565b610cc9565b60005461025c9073ffffffffffffffffffffffffffffffffffffffff1681565b6103a26104723660046113d3565b610d4b565b606060068054610486906115aa565b80601f01602080910402602001604051908101604052809291908181526020018280546104b2906115aa565b80156104ff5780601f106104d4576101008083540402835291602001916104ff565b820191906000526020600020905b8154815290600101906020018083116104e257829003601f168201915b5050505050905090565b6000610516338484610dcd565b5060015b92915050565b600061052d848484610ed6565b73ffffffffffffffffffffffffffffffffffffffff8416600090815260046020908152604080832033845290915290205482811015610598576040517f10bad14700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6105ac85336105a7868561162c565b610dcd565b506001949350505050565b60006105c33383611091565b506001919050565b60003373735b14bb79463307aacbed86daf3322b1e6226ab14801590610609575060005473ffffffffffffffffffffffffffffffffffffffff163314155b801561062d575060085473ffffffffffffffffffffffffffffffffffffffff163314155b15610664576040517fddb5de5e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61066e83836111d3565b6040517f735b14bb79463307aacbed86daf3322b1e6226ab000000000000000000000000602082015273ffffffffffffffffffffffffffffffffffffffff8416907f67fc7bdaed5b0ec550d8706b87d60568ab70c6b781263c70101d54cd1564aab390603401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529082905261070e91869061163f565b60405180910390a250600192915050565b606060078054610486906115aa565b6000610516338484610ed6565b6000806000610748610aab565b6040517f23b872dd00000000000000000000000000000000000000000000000000000000815233600482015273735b14bb79463307aacbed86daf3322b1e6226ab602482015260448101829052919350915073ffffffffffffffffffffffffffffffffffffffff8316906323b872dd906064016020604051808303816000875af11580156107da573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107fe9190611661565b610834576040517f0a7cd6d600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61083e3385611091565b60025460405133917f9ffbffc04a397460ee1dbe8c9503e098090567d6b7f4b3c02a8617d800b6d9559161087791899189918791611683565b60405180910390a2506001949350505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab146108d7576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116610924576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527fd55614e962c5fd6ece71614f6348d702468a997a394dd5e5c1677950226d97ae906020015b60405180910390a150565b3373735b14bb79463307aacbed86daf3322b1e6226ab146109eb576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116610a38576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600880547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527f88815d964e380677e86d817e7d65dea59cb7b4c3b5b7a0c8ec7ea4a74f90a38790602001610993565b600080546040517f0be155470000000000000000000000000000000000000000000000000000000081527f000000000000000000000000000000000000000000000000000000000000000060048201528291829173ffffffffffffffffffffffffffffffffffffffff90911690630be1554790602401602060405180830381865afa158015610b3e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b6291906116b2565b905073ffffffffffffffffffffffffffffffffffffffff8116610bb1576040517f78fff39600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080546040517fd7fd7afb0000000000000000000000000000000000000000000000000000000081527f0000000000000000000000000000000000000000000000000000000000000000600482015273ffffffffffffffffffffffffffffffffffffffff9091169063d7fd7afb90602401602060405180830381865afa158015610c40573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c6491906116cf565b905080600003610ca0576040517fe661aed000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060025460015483610cb391906116e8565b610cbd91906116ff565b92959294509192505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610d16576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60028190556040518181527fef13af88e424b5d15f49c77758542c1938b08b8b95b91ed0751f98ba99000d8f90602001610993565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610d98576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018190556040518181527fff5788270f43bfc1ca41c503606d2594aa3023a1a7547de403a3e2f146a4a80a90602001610993565b73ffffffffffffffffffffffffffffffffffffffff8316610e1a576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216610e67576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff83811660008181526004602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8316610f23576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216610f70576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff831660009081526003602052604090205481811015610fd0576040517ffe382aa700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610fda828261162c565b73ffffffffffffffffffffffffffffffffffffffff808616600090815260036020526040808220939093559085168152908120805484929061101d9084906116ff565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161108391815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff82166110de576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff82166000908152600360205260409020548181101561113e576040517ffe382aa700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611148828261162c565b73ffffffffffffffffffffffffffffffffffffffff84166000908152600360205260408120919091556005805484929061118390849061162c565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90602001610ec9565b73ffffffffffffffffffffffffffffffffffffffff8216611220576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b806005600082825461123291906116ff565b909155505073ffffffffffffffffffffffffffffffffffffffff82166000908152600360205260408120805483929061126c9084906116ff565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6000815180845260005b818110156112e9576020818501810151868301820152016112cd565b5060006020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b60208152600061133a60208301846112c3565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff8116811461136357600080fd5b50565b6000806040838503121561137957600080fd5b823561138481611341565b946020939093013593505050565b6000806000606084860312156113a757600080fd5b83356113b281611341565b925060208401356113c281611341565b929592945050506040919091013590565b6000602082840312156113e557600080fd5b5035919050565b6000602082840312156113fe57600080fd5b813561133a81611341565b6020810160038310611444577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000806040838503121561148c57600080fd5b823567ffffffffffffffff8111156114a357600080fd5b8301601f810185136114b457600080fd5b803567ffffffffffffffff8111156114ce576114ce61144a565b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8501160116810181811067ffffffffffffffff8211171561153a5761153a61144a565b60405281815282820160200187101561155257600080fd5b8160208401602083013760006020928201830152969401359450505050565b6000806040838503121561158457600080fd5b823561158f81611341565b9150602083013561159f81611341565b809150509250929050565b600181811c908216806115be57607f821691505b6020821081036115f7577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8181038181111561051a5761051a6115fd565b60408152600061165260408301856112c3565b90508260208301529392505050565b60006020828403121561167357600080fd5b8151801515811461133a57600080fd5b60808152600061169660808301876112c3565b6020830195909552506040810192909252606090910152919050565b6000602082840312156116c457600080fd5b815161133a81611341565b6000602082840312156116e157600080fd5b5051919050565b808202811582820484141761051a5761051a6115fd565b8082018082111561051a5761051a6115fd56fea26469706673582212204013e39523742118b3f2227e145ee7e48176ba6aebead33c596dca2acb59a74c64736f6c634300081a0033a26469706673582212209d37f8d12ab3d393a8cedbe98cf1cd35836d53925e44c933caadf2b0f857d29a64736f6c634300081a0033", + Bin: "0x6080604052600c8054600160ff199182168117909255601f80549091169091179055348015602c57600080fd5b5061df248061003c6000396000f3fe608060405234801561001057600080fd5b50600436106101f05760003560e01c806385226c811161010f578063bcc52b9a116100a2578063ea37902f11610071578063ea37902f14610331578063fa7626d414610339578063fbc611c814610346578063fdad0ad01461034e57600080fd5b8063bcc52b9a14610311578063ceccfab314610319578063dde7e96714610321578063e20c9f711461032957600080fd5b8063b7f05836116100de578063b7f05836146102e1578063ba414fa6146102e9578063ba800c9114610301578063ba9adeef1461030957600080fd5b806385226c81146102a7578063916a17c6146102bc578063b0464fdc146102d1578063b5508aa9146102d957600080fd5b806339cbb457116101875780635d72228f116101565780635d72228f1461027a5780636221b5091461028257806366d9a9a01461028a57806383ababa91461029f57600080fd5b806339cbb4571461025a5780633e5e3c23146102625780633f7286f41461026a5780635006fd801461027257600080fd5b80631ed7831c116101c35780631ed7831c1461021757806321aeb18c146102355780632ade38801461023d57806336431b3f1461025257600080fd5b80630a9254e4146101f55780631238212c146101ff57806318a4cfdc146102075780631e63d2b91461020f575b600080fd5b6101fd610356565b005b6101fd610dc3565b6101fd61118c565b6101fd6115e1565b61021f6119cd565b60405161022c91906189f3565b60405180910390f35b6101fd611a2f565b610245611b33565b60405161022c9190618a8f565b6101fd611c75565b6101fd611e1b565b61021f611f83565b61021f611fe3565b6101fd612043565b6101fd6124da565b6101fd612829565b610292612a2f565b60405161022c9190618bf5565b6101fd612bb1565b6102af612cac565b60405161022c9190618c93565b6102c4612d7c565b60405161022c9190618d0a565b6102c4612e77565b6102af612f72565b6101fd613042565b6102f161327f565b604051901515815260200161022c565b6101fd613353565b6101fd61347f565b6101fd613622565b6101fd613783565b6101fd613ab7565b61021f613ed7565b6101fd613f37565b601f546102f19060ff1681565b6101fd6142f3565b6101fd614666565b602580547fffffffffffffffffffffffff000000000000000000000000000000000000000090811630179091556026805490911661123417905560405161039c90618906565b604051809103906000f0801580156103b8573d6000803e3d6000fd5b50602280547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03928316908117909155604080518082018252600f81527f476174657761795a45564d2e736f6c00000000000000000000000000000000006020820152602554915160248101939093529216604482015261049c919060640160408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f485cc955000000000000000000000000000000000000000000000000000000001790526147f5565b601f80547fffffffffffffffffffffff0000000000000000000000000000000000000000ff166101006001600160a01b039384168102919091179182905560208054919092049092167fffffffffffffffffffffffff000000000000000000000000000000000000000090921682178155604080517f3ce4a5bc0000000000000000000000000000000000000000000000000000000081529051633ce4a5bc926004808401939192918290030181865afa15801561055e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105829190618da1565b602780547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03929092169190911790556040516105c690618913565b604051809103906000f0801580156105e2573d6000803e3d6000fd5b50602480547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039283161781556027546040517f06447d5600000000000000000000000000000000000000000000000000000000815292166004830152737109709ecfa91a80626ff3989d68f67f5b1dd12d916306447d569101600060405180830381600087803b15801561067e57600080fd5b505af1158015610692573d6000803e3d6000fd5b5050505060008060006040516106a790618920565b6001600160a01b03938416815291831660208301529091166040820152606001604051809103906000f0801580156106e3573d6000803e3d6000fd5b50602380547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039283169081179091556020546040516012936001938493600093919216906107399061892d565b61074896959493929190618dca565b604051809103906000f080158015610764573d6000803e3d6000fd5b50602180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039283169081179091556023546040517fee2815ba0000000000000000000000000000000000000000000000000000000081526001600482015260248101929092529091169063ee2815ba90604401600060405180830381600087803b1580156107fb57600080fd5b505af115801561080f573d6000803e3d6000fd5b50506023546040517fa7cb050700000000000000000000000000000000000000000000000000000000815260016004820181905260248201526001600160a01b03909116925063a7cb05079150604401600060405180830381600087803b15801561087957600080fd5b505af115801561088d573d6000803e3d6000fd5b50506027546040517fc88a5e6d0000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152633b9aca006024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c88a5e6d9150604401600060405180830381600087803b15801561090d57600080fd5b505af1158015610921573d6000803e3d6000fd5b50505050602260009054906101000a90046001600160a01b03166001600160a01b031663d0e30db0600a6040518263ffffffff1660e01b81526004016000604051808303818588803b15801561097657600080fd5b505af115801561098a573d6000803e3d6000fd5b50506022546020546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152600a60248201529116935063095ea7b3925060440190506020604051808303816000875af11580156109fe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a229190618ebf565b506021546025546040517f47e7ef240000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620186a060248201529116906347e7ef24906044016020604051808303816000875af1158015610a93573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ab79190618ebf565b507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b03166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610b1657600080fd5b505af1158015610b2a573d6000803e3d6000fd5b50506025546040517f06447d560000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506306447d569150602401600060405180830381600087803b158015610ba057600080fd5b505af1158015610bb4573d6000803e3d6000fd5b50506021546020546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620186a060248201529116925063095ea7b391506044016020604051808303816000875af1158015610c28573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c4c9190618ebf565b50602260009054906101000a90046001600160a01b03166001600160a01b031663d0e30db0600a6040518263ffffffff1660e01b81526004016000604051808303818588803b158015610c9e57600080fd5b505af1158015610cb2573d6000803e3d6000fd5b50506022546020546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152600a60248201529116935063095ea7b3925060440190506020604051808303816000875af1158015610d26573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d4a9190618ebf565b507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b03166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610da957600080fd5b505af1158015610dbd573d6000803e3d6000fd5b50505050565b6021546025546040516370a0823160e01b81526001600160a01b03918216600482015260019260009216906370a0823190602401602060405180830381865afa158015610e14573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e389190618ee1565b6025546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015610ead57600080fd5b505af1158015610ec1573d6000803e3d6000fd5b50506021546020546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152600060248201529116925063095ea7b391506044016020604051808303816000875af1158015610f33573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f579190618ebf565b506026546040516001600160a01b03909116602482015260009060440160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f84fae7600000000000000000000000000000000000000000000000000000000017905280517ff48448140000000000000000000000000000000000000000000000000000000081529051919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f48448149160048082019260009290919082900301818387803b15801561103357600080fd5b505af1158015611047573d6000803e3d6000fd5b50506020805460265460405160609190911b6bffffffffffffffffffffffff1916928101929092526001600160a01b03169250637993c1e0915060340160408051601f19818403018152908290526021547fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1683526110db9288916001600160a01b0316908790600401618efa565b600060405180830381600087803b1580156110f557600080fd5b505af1158015611109573d6000803e3d6000fd5b50506021546025546040516370a0823160e01b81526001600160a01b03918216600482015260009450911691506370a0823190602401602060405180830381865afa15801561115c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111809190618ee1565b9050610dbd8382614814565b6022546025546040516370a0823160e01b81526001600160a01b03918216600482015260019260009216906370a0823190602401602060405180830381865afa1580156111dd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112019190618ee1565b6022546020546040516370a0823160e01b81526001600160a01b0391821660048201529293506000929116906370a0823190602401602060405180830381865afa158015611253573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112779190618ee1565b6027546026546040516001600160a01b03918216602482015292935016319060009060440160408051601f19818403018152918152602080830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f84fae760000000000000000000000000000000000000000000000000000000001790525490517f81bad6f30000000000000000000000000000000000000000000000000000000081526001600482018190526024820181905260448201819052606482018190526001600160a01b03909216608482015291925090737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b15801561138657600080fd5b505af115801561139a573d6000803e3d6000fd5b505060255460275460405160609190911b6bffffffffffffffffffffffff191660208201528493506001600160a01b0390911691507fde19dbe881cc0aeeb6e73ce19ac7b5ca695e6be8a076e3eb42292005a7fec1b59060340160408051601f1981840301815290829052602254611426926001600160a01b03909116908c9060009081908b90618f34565b60405180910390a36020546040517f80bd3d030000000000000000000000000000000000000000000000000000000081526001600160a01b03909116906380bd3d039061147b90899085908790600401618f87565b600060405180830381600087803b15801561149557600080fd5b505af11580156114a9573d6000803e3d6000fd5b50506022546025546040516370a0823160e01b81526001600160a01b03918216600482015260009450911691506370a0823190602401602060405180830381865afa1580156114fc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115209190618ee1565b9050611536611530600188618fd5565b82614814565b6022546020546040516370a0823160e01b81526001600160a01b03918216600482015260009291909116906370a0823190602401602060405180830381865afa158015611587573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115ab9190618ee1565b90506115b78682614814565b6115d76115c5866001618fe8565b6027546001600160a01b031631614814565b5050505050505050565b6021546025546040516370a0823160e01b81526001600160a01b03918216600482015260019260009216906370a0823190602401602060405180830381865afa158015611632573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116569190618ee1565b6026546040516001600160a01b03909116602482015290915060009060440160408051601f19818403018152918152602080830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f84fae760000000000000000000000000000000000000000000000000000000001790525490517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b15801561175c57600080fd5b505af1158015611770573d6000803e3d6000fd5b505060255460265460405160609190911b6bffffffffffffffffffffffff19166020820152600093506001600160a01b0390911691507fde19dbe881cc0aeeb6e73ce19ac7b5ca695e6be8a076e3eb42292005a7fec1b59060340160408051601f198184030181528282526021547f4d8943bb000000000000000000000000000000000000000000000000000000008452915190926001600160a01b039092169189916000918491634d8943bb916004808201926020929091908290030181865afa158015611843573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118679190618ee1565b8860405161187a96959493929190618f34565b60405180910390a3602080546026546040516001600160a01b0392831693637993c1e0936118c29316910160609190911b6bffffffffffffffffffffffff1916815260140190565b60408051601f19818403018152908290526021547fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1683526119199288916001600160a01b0316908790600401618efa565b600060405180830381600087803b15801561193357600080fd5b505af1158015611947573d6000803e3d6000fd5b50506021546025546040516370a0823160e01b81526001600160a01b03918216600482015260009450911691506370a0823190602401602060405180830381865afa15801561199a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119be9190618ee1565b9050610dbd6115308585618fd5565b60606016805480602002602001604051908101604052809291908181526020018280548015611a2557602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311611a07575b5050505050905090565b6040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527f19c08f49000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b158015611ab457600080fd5b505af1158015611ac8573d6000803e3d6000fd5b50506020546040517f441a3e7000000000000000000000000000000000000000000000000000000000815260006004820152600160248201526001600160a01b03909116925063441a3e7091506044015b600060405180830381600087803b158015610da957600080fd5b6060601e805480602002602001604051908101604052809291908181526020016000905b82821015611c6c57600084815260208082206040805180820182526002870290920180546001600160a01b03168352600181018054835181870281018701909452808452939591948681019491929084015b82821015611c55578382906000526020600020018054611bc890618ffb565b80601f0160208091040260200160405190810160405280929190818152602001828054611bf490618ffb565b8015611c415780601f10611c1657610100808354040283529160200191611c41565b820191906000526020600020905b815481529060010190602001808311611c2457829003601f168201915b505050505081526020019060010190611ba9565b505050508152505081526020019060010190611b57565b50505050905090565b6026546040516001600160a01b03909116602482015260009060440160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f84fae76000000000000000000000000000000000000000000000000000000000179052517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fd92e233d000000000000000000000000000000000000000000000000000000006004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b158015611d6f57600080fd5b505af1158015611d83573d6000803e3d6000fd5b5050602080546040805160008152928301908190526021547f7993c1e0000000000000000000000000000000000000000000000000000000009091526001600160a01b039182169450637993c1e09350611de69291600191168660248401618efa565b600060405180830381600087803b158015611e0057600080fd5b505af1158015611e14573d6000803e3d6000fd5b5050505050565b6026546040516001600160a01b03909116602482015260009060440160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f84fae76000000000000000000000000000000000000000000000000000000000179052517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fd92e233d000000000000000000000000000000000000000000000000000000006004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b158015611f1557600080fd5b505af1158015611f29573d6000803e3d6000fd5b5050602080546040805160008152928301908190527f5d40e1780000000000000000000000000000000000000000000000000000000090526001600160a01b03169250635d40e1789150611de69060018560248301619048565b60606018805480602002602001604051908101604052809291908181526020018280548015611a25576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311611a07575050505050905090565b60606017805480602002602001604051908101604052809291908181526020018280548015611a25576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311611a07575050505050905090565b6022546025546040516370a0823160e01b81526001600160a01b03918216600482015260019260009216906370a0823190602401602060405180830381865afa158015612094573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120b89190618ee1565b6022546020546040516370a0823160e01b81526001600160a01b0391821660048201529293506000929116906370a0823190602401602060405180830381865afa15801561210a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061212e9190618ee1565b6027546026546040516001600160a01b03918216602482015292935016319060009060440160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f84fae7600000000000000000000000000000000000000000000000000000000017905260255490517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152909150600190737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561222257600080fd5b505af1158015612236573d6000803e3d6000fd5b50506022546020546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152600060248201529116925063095ea7b391506044016020604051808303816000875af11580156122a8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122cc9190618ebf565b507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b031663f48448146040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561232b57600080fd5b505af115801561233f573d6000803e3d6000fd5b50506020546040517f80bd3d030000000000000000000000000000000000000000000000000000000081526001600160a01b0390911692506380bd3d03915061239090899085908790600401618f87565b600060405180830381600087803b1580156123aa57600080fd5b505af11580156123be573d6000803e3d6000fd5b50506022546025546040516370a0823160e01b81526001600160a01b03918216600482015260009450911691506370a0823190602401602060405180830381865afa158015612411573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124359190618ee1565b90506124418682614814565b6022546020546040516370a0823160e01b81526001600160a01b03918216600482015260009291909116906370a0823190602401602060405180830381865afa158015612492573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124b69190618ee1565b90506124c28682614814565b6027546115d79086906001600160a01b031631614814565b6021546025546040516370a0823160e01b81526001600160a01b03918216600482015260019260009216906370a0823190602401602060405180830381865afa15801561252b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061254f9190618ee1565b6025546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156125c457600080fd5b505af11580156125d8573d6000803e3d6000fd5b50506021546020546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152600060248201529116925063095ea7b391506044016020604051808303816000875af115801561264a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061266e9190618ebf565b507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b031663f48448146040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156126cd57600080fd5b505af11580156126e1573d6000803e3d6000fd5b50506020805460265460405160609190911b6bffffffffffffffffffffffff1916928101929092526001600160a01b0316925063135390f9915060340160408051601f19818403018152908290526021547fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1683526127739287916001600160a01b031690600401619073565b600060405180830381600087803b15801561278d57600080fd5b505af11580156127a1573d6000803e3d6000fd5b50506021546025546040516370a0823160e01b81526001600160a01b03918216600482015260009450911691506370a0823190602401602060405180830381865afa1580156127f4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128189190618ee1565b90506128248282614814565b505050565b6022546025546040516370a0823160e01b81526001600160a01b03918216600482015260019260009216906370a0823190602401602060405180830381865afa15801561287a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061289e9190618ee1565b6022546040517fa9059cbb0000000000000000000000000000000000000000000000000000000081526101236004820152602481018390529192506001600160a01b03169063a9059cbb906044016020604051808303816000875af115801561290b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061292f9190618ebf565b506000600190507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b031663f48448146040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561299457600080fd5b505af11580156129a8573d6000803e3d6000fd5b50506020546040517f441a3e7000000000000000000000000000000000000000000000000000000000815260048101879052602481018590526001600160a01b03909116925063441a3e709150604401600060405180830381600087803b158015612a1257600080fd5b505af1158015612a26573d6000803e3d6000fd5b50505050505050565b6060601b805480602002602001604051908101604052809291908181526020016000905b82821015611c6c5783829060005260206000209060020201604051806040016040529081600082018054612a8690618ffb565b80601f0160208091040260200160405190810160405280929190818152602001828054612ab290618ffb565b8015612aff5780601f10612ad457610100808354040283529160200191612aff565b820191906000526020600020905b815481529060010190602001808311612ae257829003601f168201915b5050505050815260200160018201805480602002602001604051908101604052809291908181526020018280548015612b9957602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019060040190602082600301049283019260010382029150808411612b465790505b50505050508152505081526020019060010190612a53565b6040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b158015612c3657600080fd5b505af1158015612c4a573d6000803e3d6000fd5b5050602080546040805160008152928301908190526021547f135390f9000000000000000000000000000000000000000000000000000000009091526001600160a01b03918216945063135390f99350611b1992916001911660248301619073565b6060601a805480602002602001604051908101604052809291908181526020016000905b82821015611c6c578382906000526020600020018054612cef90618ffb565b80601f0160208091040260200160405190810160405280929190818152602001828054612d1b90618ffb565b8015612d685780601f10612d3d57610100808354040283529160200191612d68565b820191906000526020600020905b815481529060010190602001808311612d4b57829003601f168201915b505050505081526020019060010190612cd0565b6060601d805480602002602001604051908101604052809291908181526020016000905b82821015611c6c5760008481526020908190206040805180820182526002860290920180546001600160a01b03168352600181018054835181870281018701909452808452939491938583019392830182828015612e5f57602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019060040190602082600301049283019260010382029150808411612e0c5790505b50505050508152505081526020019060010190612da0565b6060601c805480602002602001604051908101604052809291908181526020016000905b82821015611c6c5760008481526020908190206040805180820182526002860290920180546001600160a01b03168352600181018054835181870281018701909452808452939491938583019392830182828015612f5a57602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019060040190602082600301049283019260010382029150808411612f075790505b50505050508152505081526020019060010190612e9b565b60606019805480602002602001604051908101604052809291908181526020016000905b82821015611c6c578382906000526020600020018054612fb590618ffb565b80601f0160208091040260200160405190810160405280929190818152602001828054612fe190618ffb565b801561302e5780601f106130035761010080835404028352916020019161302e565b820191906000526020600020905b81548152906001019060200180831161301157829003601f168201915b505050505081526020019060010190612f96565b6026546040516001600160a01b03909116602482015260009060440160408051601f19818403018152918152602080830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f84fae760000000000000000000000000000000000000000000000000000000001790525490517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b15801561314557600080fd5b505af1158015613159573d6000803e3d6000fd5b505060255460265460405160609190911b6bffffffffffffffffffffffff19166020820152600193508392506001600160a01b03909116907f5322ffbbf9261ff1f8138247942d2b03b28717141ef0a0dd080fc4be9c4e78d39060340160408051601f19818403018152908290526131d29187906190a5565b60405180910390a3602080546026546040516001600160a01b0392831693635d40e1789361321a9316910160609190911b6bffffffffffffffffffffffff1916815260140190565b60405160208183030381529060405283856040518463ffffffff1660e01b815260040161324993929190619048565b600060405180830381600087803b15801561326357600080fd5b505af1158015613277573d6000803e3d6000fd5b505050505050565b60085460009060ff1615613297575060085460ff1690565b6040517f667f9d70000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d600482018190527f6661696c65640000000000000000000000000000000000000000000000000000602483015260009163667f9d7090604401602060405180830381865afa158015613328573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061334c9190618ee1565b1415905090565b6040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527f5d67094f000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b1580156133d857600080fd5b505af11580156133ec573d6000803e3d6000fd5b50506020805460265460405160609190911b6bffffffffffffffffffffffff1916928101929092526001600160a01b0316925063135390f9915060340160408051601f19818403018152908290526021547fffffffff0000000000000000000000000000000000000000000000000000000060e085901b168352611b19926000916001600160a01b031690600401619073565b6026546040516001600160a01b03909116602482015260009060440160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f84fae76000000000000000000000000000000000000000000000000000000000179052517fc31eb0e00000000000000000000000000000000000000000000000000000000081527f5d67094f000000000000000000000000000000000000000000000000000000006004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b15801561357957600080fd5b505af115801561358d573d6000803e3d6000fd5b50506020805460265460405160609190911b6bffffffffffffffffffffffff1916928101929092526001600160a01b03169250637993c1e0915060340160408051601f19818403018152908290526021547fffffffff0000000000000000000000000000000000000000000000000000000060e085901b168352611de6926000916001600160a01b0316908790600401618efa565b6026546040516001600160a01b03909116602482015260009060440160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f84fae76000000000000000000000000000000000000000000000000000000000179052517fc31eb0e00000000000000000000000000000000000000000000000000000000081527f19c08f49000000000000000000000000000000000000000000000000000000006004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b15801561371c57600080fd5b505af1158015613730573d6000803e3d6000fd5b50506020546040517f80bd3d030000000000000000000000000000000000000000000000000000000081526001600160a01b0390911692506380bd3d039150611de6906000906001908690600401618f87565b6021546025546040516370a0823160e01b81526001600160a01b03918216600482015260019260009216906370a0823190602401602060405180830381865afa1580156137d4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137f89190618ee1565b6021546040517fa9059cbb0000000000000000000000000000000000000000000000000000000081526101236004820152602481018390529192506001600160a01b03169063a9059cbb906044016020604051808303816000875af1158015613865573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138899190618ebf565b506027546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156138fc57600080fd5b505af1158015613910573d6000803e3d6000fd5b50506021546040517ff687d12a000000000000000000000000000000000000000000000000000000008152600a60048201526001600160a01b03909116925063f687d12a9150602401600060405180830381600087803b15801561397357600080fd5b505af1158015613987573d6000803e3d6000fd5b50506040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527ffe382aa7000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e091506024015b600060405180830381600087803b158015613a1157600080fd5b505af1158015613a25573d6000803e3d6000fd5b50506020805460265460405160609190911b6bffffffffffffffffffffffff1916928101929092526001600160a01b0316925063135390f9915060340160408051601f19818403018152908290526021547fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1683526132499287916001600160a01b031690600401619073565b6022546025546040516370a0823160e01b81526001600160a01b03918216600482015260019260009216906370a0823190602401602060405180830381865afa158015613b08573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b2c9190618ee1565b6022546020546040516370a0823160e01b81526001600160a01b0391821660048201529293506000929116906370a0823190602401602060405180830381865afa158015613b7e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613ba29190618ee1565b6027546025546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152929350163190600190737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015613c2057600080fd5b505af1158015613c34573d6000803e3d6000fd5b50506022546020546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152600060248201529116925063095ea7b391506044016020604051808303816000875af1158015613ca6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613cca9190618ebf565b507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b031663f48448146040518163ffffffff1660e01b8152600401600060405180830381600087803b158015613d2957600080fd5b505af1158015613d3d573d6000803e3d6000fd5b50506020546040517f441a3e7000000000000000000000000000000000000000000000000000000000815260048101899052602481018590526001600160a01b03909116925063441a3e709150604401600060405180830381600087803b158015613da757600080fd5b505af1158015613dbb573d6000803e3d6000fd5b50506022546025546040516370a0823160e01b81526001600160a01b03918216600482015260009450911691506370a0823190602401602060405180830381865afa158015613e0e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613e329190618ee1565b9050613e3e8582614814565b6022546020546040516370a0823160e01b81526001600160a01b03918216600482015260009291909116906370a0823190602401602060405180830381865afa158015613e8f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613eb39190618ee1565b9050613ebf8582614814565b602754612a269085906001600160a01b031631614814565b60606015805480602002602001604051908101604052809291908181526020018280548015611a25576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311611a07575050505050905090565b6022546025546040516370a0823160e01b81526001600160a01b03918216600482015260019260009216906370a0823190602401602060405180830381865afa158015613f88573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613fac9190618ee1565b6022546020546040516370a0823160e01b81526001600160a01b0391821660048201529293506000929116906370a0823190602401602060405180830381865afa158015613ffe573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906140229190618ee1565b6027546020546040517f81bad6f30000000000000000000000000000000000000000000000000000000081526001600482018190526024820181905260448201819052606482018190526001600160a01b0392831660848301529394509116319190737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b1580156140bd57600080fd5b505af11580156140d1573d6000803e3d6000fd5b505060255460275460405160609190911b6bffffffffffffffffffffffff191660208201528493506001600160a01b0390911691507fde19dbe881cc0aeeb6e73ce19ac7b5ca695e6be8a076e3eb42292005a7fec1b59060340160408051601f198184030181529082905260225461415b926001600160a01b03909116908b9060009081906190ca565b60405180910390a36020546040517f441a3e7000000000000000000000000000000000000000000000000000000000815260048101879052602481018390526001600160a01b039091169063441a3e7090604401600060405180830381600087803b1580156141c957600080fd5b505af11580156141dd573d6000803e3d6000fd5b50506022546025546040516370a0823160e01b81526001600160a01b03918216600482015260009450911691506370a0823190602401602060405180830381865afa158015614230573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906142549190618ee1565b9050614264611530600187618fd5565b6022546020546040516370a0823160e01b81526001600160a01b03918216600482015260009291909116906370a0823190602401602060405180830381865afa1580156142b5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906142d99190618ee1565b90506142e58582614814565b612a266115c5856001618fe8565b6021546025546040516370a0823160e01b81526001600160a01b03918216600482015260019260009216906370a0823190602401602060405180830381865afa158015614344573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906143689190618ee1565b6020546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b1580156143f957600080fd5b505af115801561440d573d6000803e3d6000fd5b505060255460265460405160609190911b6bffffffffffffffffffffffff19166020820152600093506001600160a01b0390911691507fde19dbe881cc0aeeb6e73ce19ac7b5ca695e6be8a076e3eb42292005a7fec1b59060340160408051601f198184030181528282526021547f4d8943bb000000000000000000000000000000000000000000000000000000008452915190926001600160a01b039092169188916000918491634d8943bb916004808201926020929091908290030181865afa1580156144e0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906145049190618ee1565b6040516145159594939291906190ca565b60405180910390a3602080546026546040516001600160a01b039283169363135390f99361455d9316910160609190911b6bffffffffffffffffffffffff1916815260140190565b60408051601f19818403018152908290526021547fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1683526145b29287916001600160a01b031690600401619073565b600060405180830381600087803b1580156145cc57600080fd5b505af11580156145e0573d6000803e3d6000fd5b50506021546025546040516370a0823160e01b81526001600160a01b03918216600482015260009450911691506370a0823190602401602060405180830381865afa158015614633573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906146579190618ee1565b90506128246115308484618fd5565b6021546025546040516370a0823160e01b81526001600160a01b03918216600482015260029260009216906370a0823190602401602060405180830381865afa1580156146b7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906146db9190618ee1565b6021549091506001600160a01b031663a9059cbb6101236146fd600185618fd5565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303816000875af1158015614760573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906147849190618ebf565b506040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527ffe382aa7000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e0906024016139f7565b60006147ff61893a565b61480a848483614893565b9150505b92915050565b6040517f98296c540000000000000000000000000000000000000000000000000000000081526004810183905260248101829052737109709ecfa91a80626ff3989d68f67f5b1dd12d906398296c549060440160006040518083038186803b15801561487f57600080fd5b505afa158015613277573d6000803e3d6000fd5b6000806148a0858461490e565b90506149036040518060400160405280601d81526020017f4552433139363750726f78792e736f6c3a4552433139363750726f787900000081525082866040516020016148ee92919061911b565b6040516020818303038152906040528561491a565b9150505b9392505050565b60006149078383614948565b60c0810151516000901561493e5761493784848460c00151614963565b9050614907565b6149378484614b09565b60006149548383614bf4565b6149078383602001518461491a565b60008061496e614c04565b9050600061497c8683614cd7565b90506000614993826060015183602001518561517d565b905060006149a38383898961538f565b905060006149b08261620c565b602081015181519192509060030b15614a23578982604001516040516020016149da92919061913d565b60408051601f19818403018152908290527f08c379a0000000000000000000000000000000000000000000000000000000008252614a1a916004016191be565b60405180910390fd5b6000614a666040518060400160405280601581526020017f4465706c6f79656420746f20616464726573733a2000000000000000000000008152508360016163db565b6040517fc6ce059d000000000000000000000000000000000000000000000000000000008152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c6ce059d90614ab99084906004016191be565b602060405180830381865afa158015614ad6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614afa9190618da1565b9b9a5050505050505050505050565b6040517f8d1cc9250000000000000000000000000000000000000000000000000000000081526000908190737109709ecfa91a80626ff3989d68f67f5b1dd12d90638d1cc92590614b5e9087906004016191be565b600060405180830381865afa158015614b7b573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052614ba391908101906192b9565b90506000614bd18285604051602001614bbd9291906192ee565b6040516020818303038152906040526165db565b90506001600160a01b03811661480a5784846040516020016149da92919061931d565b614c00828260006165ee565b5050565b604080518082018252600381527f6f75740000000000000000000000000000000000000000000000000000000000602082015290517fd145736c000000000000000000000000000000000000000000000000000000008152606091737109709ecfa91a80626ff3989d68f67f5b1dd12d91829063d145736c90614c8b9084906004016193c8565b600060405180830381865afa158015614ca8573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052614cd0919081019061940f565b9250505090565b614d096040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b6000737109709ecfa91a80626ff3989d68f67f5b1dd12d9050614d546040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b614d5d856166f1565b60208201526000614d6d86616ad6565b90506000836001600160a01b031663d930a0e66040518163ffffffff1660e01b8152600401600060405180830381865afa158015614daf573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052614dd7919081019061940f565b86838560200151604051602001614df19493929190619458565b60408051601f19818403018152908290527f60f9bb1100000000000000000000000000000000000000000000000000000000825291506000906001600160a01b038616906360f9bb1190614e499085906004016191be565b600060405180830381865afa158015614e66573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052614e8e919081019061940f565b6040517fdb4235f60000000000000000000000000000000000000000000000000000000081529091506001600160a01b0386169063db4235f690614ed690849060040161955c565b602060405180830381865afa158015614ef3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614f179190618ebf565b614f2c57816040516020016149da91906195ae565b6040517f49c4fac80000000000000000000000000000000000000000000000000000000081526001600160a01b038616906349c4fac890614f71908490600401619640565b600060405180830381865afa158015614f8e573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052614fb6919081019061940f565b84526040517fdb4235f60000000000000000000000000000000000000000000000000000000081526001600160a01b0386169063db4235f690614ffd908490600401619692565b602060405180830381865afa15801561501a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061503e9190618ebf565b156150d3576040517f49c4fac80000000000000000000000000000000000000000000000000000000081526001600160a01b038616906349c4fac890615088908490600401619692565b600060405180830381865afa1580156150a5573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526150cd919081019061940f565b60408501525b846001600160a01b03166349c4fac88286600001516040516020016150f891906196e4565b6040516020818303038152906040526040518363ffffffff1660e01b81526004016151249291906190a5565b600060405180830381865afa158015615141573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052615169919081019061940f565b606085015250608083015250949350505050565b60408051600480825260a0820190925260609160009190816020015b60608152602001906001900390816151995790505090506040518060400160405280600481526020017f6772657000000000000000000000000000000000000000000000000000000000815250816000815181106151f9576151f9619750565b60200260200101819052506040518060400160405280600381526020017f2d726c00000000000000000000000000000000000000000000000000000000008152508160018151811061524d5761524d619750565b602002602001018190525084604051602001615269919061977f565b6040516020818303038152906040528160028151811061528b5761528b619750565b6020026020010181905250826040516020016152a791906197eb565b604051602081830303815290604052816003815181106152c9576152c9619750565b602002602001018190525060006152df8261620c565b602080820151604080518082018252600581527f2e6a736f6e00000000000000000000000000000000000000000000000000000081850190815282518084018452600080825290860152825180840190935290518252928101929092529192506153709060408051808201825260008082526020918201528151808301909252845182528085019082015290616d59565b61538557856040516020016149da919061982c565b9695505050505050565b60a0810151604080518082018252600080825260209182015281518083019092528251808352928101910152606090737109709ecfa91a80626ff3989d68f67f5b1dd12d90156153df565b511590565b6155535782602001511561549b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605860248201527f54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f742060448201527f62652075736564207768656e207468652060736b6970566572696679536f757260648201527f6365436f646560206f7074696f6e206973206074727565600000000000000000608482015260a401614a1a565b8260c0015115615553576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605360248201527f54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f742060448201527f62652075736564207768656e207468652060736b69704c6963656e736554797060648201527f6560206f7074696f6e2069732060747275656000000000000000000000000000608482015260a401614a1a565b6040805160ff8082526120008201909252600091816020015b606081526020019060019003908161556c57905050905060006040518060400160405280600381526020017f6e707800000000000000000000000000000000000000000000000000000000008152508282806155c7906198bd565b935060ff16815181106155dc576155dc619750565b60200260200101819052506040518060400160405280600d81526020017f302e302e312d616c7068612e370000000000000000000000000000000000000081525060405160200161562d91906198dc565b604051602081830303815290604052828280615648906198bd565b935060ff168151811061565d5761565d619750565b60200260200101819052506040518060400160405280600681526020017f6465706c6f7900000000000000000000000000000000000000000000000000008152508282806156aa906198bd565b935060ff16815181106156bf576156bf619750565b60200260200101819052506040518060400160405280600e81526020017f2d2d636f6e74726163744e616d6500000000000000000000000000000000000081525082828061570c906198bd565b935060ff168151811061572157615721619750565b6020026020010181905250876020015182828061573d906198bd565b935060ff168151811061575257615752619750565b60200260200101819052506040518060400160405280600e81526020017f2d2d636f6e74726163745061746800000000000000000000000000000000000081525082828061579f906198bd565b935060ff16815181106157b4576157b4619750565b6020908102919091010152875182826157cc816198bd565b935060ff16815181106157e1576157e1619750565b60200260200101819052506040518060400160405280600981526020017f2d2d636861696e4964000000000000000000000000000000000000000000000081525082828061582e906198bd565b935060ff168151811061584357615843619750565b602002602001018190525061585746616dba565b8282615862816198bd565b935060ff168151811061587757615877619750565b60200260200101819052506040518060400160405280600f81526020017f2d2d6275696c64496e666f46696c6500000000000000000000000000000000008152508282806158c4906198bd565b935060ff16815181106158d9576158d9619750565b6020026020010181905250868282806158f1906198bd565b935060ff168151811061590657615906619750565b6020908102919091010152855115615a2d5760408051808201909152601581527f2d2d636f6e7374727563746f7242797465636f6465000000000000000000000060208201528282615957816198bd565b935060ff168151811061596c5761596c619750565b60209081029190910101526040517f71aad10d0000000000000000000000000000000000000000000000000000000081526001600160a01b038416906371aad10d906159bc9089906004016191be565b600060405180830381865afa1580156159d9573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052615a01919081019061940f565b8282615a0c816198bd565b935060ff1681518110615a2157615a21619750565b60200260200101819052505b846020015115615afd5760408051808201909152601281527f2d2d766572696679536f75726365436f6465000000000000000000000000000060208201528282615a76816198bd565b935060ff1681518110615a8b57615a8b619750565b60200260200101819052506040518060400160405280600581526020017f66616c7365000000000000000000000000000000000000000000000000000000815250828280615ad8906198bd565b935060ff1681518110615aed57615aed619750565b6020026020010181905250615cc4565b615b356153da8660a0015160408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b615bc85760408051808201909152600d81527f2d2d6c6963656e7365547970650000000000000000000000000000000000000060208201528282615b78816198bd565b935060ff1681518110615b8d57615b8d619750565b60200260200101819052508460a00151604051602001615bad919061977f565b604051602081830303815290604052828280615ad8906198bd565b8460c00151158015615c0b575060408089015181518083018352600080825260209182015282518084019093528151835290810190820152615c0990511590565b155b15615cc45760408051808201909152600d81527f2d2d6c6963656e7365547970650000000000000000000000000000000000000060208201528282615c4f816198bd565b935060ff1681518110615c6457615c64619750565b6020026020010181905250615c7888616e5a565b604051602001615c88919061977f565b604051602081830303815290604052828280615ca3906198bd565b935060ff1681518110615cb857615cb8619750565b60200260200101819052505b60408086015181518083018352600080825260209182015282518084019093528151835290810190820152615cf890511590565b615d8d5760408051808201909152600b81527f2d2d72656c61796572496400000000000000000000000000000000000000000060208201528282615d3b816198bd565b935060ff1681518110615d5057615d50619750565b60200260200101819052508460400151828280615d6c906198bd565b935060ff1681518110615d8157615d81619750565b60200260200101819052505b606085015115615eae5760408051808201909152600681527f2d2d73616c74000000000000000000000000000000000000000000000000000060208201528282615dd6816198bd565b935060ff1681518110615deb57615deb619750565b602090810291909101015260608501516040517fb11a19e800000000000000000000000000000000000000000000000000000000815260048101919091526001600160a01b0384169063b11a19e890602401600060405180830381865afa158015615e5a573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052615e82919081019061940f565b8282615e8d816198bd565b935060ff1681518110615ea257615ea2619750565b60200260200101819052505b60e08501515115615f555760408051808201909152600a81527f2d2d6761734c696d69740000000000000000000000000000000000000000000060208201528282615ef8816198bd565b935060ff1681518110615f0d57615f0d619750565b6020026020010181905250615f298560e0015160000151616dba565b8282615f34816198bd565b935060ff1681518110615f4957615f49619750565b60200260200101819052505b60e08501516020015115615fff5760408051808201909152600a81527f2d2d67617350726963650000000000000000000000000000000000000000000060208201528282615fa2816198bd565b935060ff1681518110615fb757615fb7619750565b6020026020010181905250615fd38560e0015160200151616dba565b8282615fde816198bd565b935060ff1681518110615ff357615ff3619750565b60200260200101819052505b60e085015160400151156160a95760408051808201909152600e81527f2d2d6d61784665655065724761730000000000000000000000000000000000006020820152828261604c816198bd565b935060ff168151811061606157616061619750565b602002602001018190525061607d8560e0015160400151616dba565b8282616088816198bd565b935060ff168151811061609d5761609d619750565b60200260200101819052505b60e085015160600151156161535760408051808201909152601681527f2d2d6d61785072696f7269747946656550657247617300000000000000000000602082015282826160f6816198bd565b935060ff168151811061610b5761610b619750565b60200260200101819052506161278560e0015160600151616dba565b8282616132816198bd565b935060ff168151811061614757616147619750565b60200260200101819052505b60008160ff1667ffffffffffffffff811115616171576161716191d1565b6040519080825280602002602001820160405280156161a457816020015b606081526020019060019003908161618f5790505b50905060005b8260ff168160ff1610156161fd57838160ff16815181106161cd576161cd619750565b6020026020010151828260ff16815181106161ea576161ea619750565b60209081029190910101526001016161aa565b5093505050505b949350505050565b6162336040518060600160405280600060030b815260200160608152602001606081525090565b60408051808201825260048082527f6261736800000000000000000000000000000000000000000000000000000000602083015291517fd145736c000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d92600091849163d145736c916162b991869101619947565b600060405180830381865afa1580156162d6573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526162fe919081019061940f565b9050600061630c8683617949565b90506000846001600160a01b031663f45c1ce7836040518263ffffffff1660e01b815260040161633c9190618c93565b6000604051808303816000875af115801561635b573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052616383919081019061998e565b805190915060030b1580159061639c5750602081015151155b80156163ab5750604081015151155b1561538557816000815181106163c3576163c3619750565b60200260200101516040516020016149da9190619a44565b606060006164108560408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6040805180820182526000808252602091820152815180830190925286518252808701908201529091506164479082905b90617a9e565b156165a45760006164c4826164be846164b861648a8a60408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6040805180820182526000808252602091820152815180830190925282518252918201519181019190915290565b90617ac5565b90617b27565b604080518082018252600181527f0a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152909150616528908290617a9e565b1561659257604080518082018252600181527f0a000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261658f905b8290617bac565b90505b61659b81617bd2565b92505050614907565b82156165bd5784846040516020016149da929190619c30565b5050604080516020810190915260008152614907565b509392505050565b6000808251602084016000f09392505050565b8160a00151156165fd57505050565b600061660a848484617c3b565b905060006166178261620c565b602081015181519192509060030b1580156166b35750604080518082018252600781527f5355434345535300000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526166b390604080518082018252600080825260209182015281518083019092528451825280850190820152616441565b156166c057505050505050565b604082015151156166e05781604001516040516020016149da9190619cd7565b806040516020016149da9190619d35565b606060006167268360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600481527f2e736f6c000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015290915061678b905b8290616d59565b156167fa57604080518082018252600481527f2e736f6c0000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152614907906167f59083906181d6565b617bd2565b604080518082018252600181527f3a000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261685c905b8290618260565b60010361692957604080518082018252600181527f3a00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526168c290616588565b50604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152614907906167f5905b8390617bac565b604080518082018252600581527f2e6a736f6e0000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261698890616784565b15616abf57604080518082018252600181527f2f000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201819052845180860190955292518452830152906169f09083906182fa565b905060008160018351616a039190618fd5565b81518110616a1357616a13619750565b60200260200101519050616ab66167f5616a896040518060400160405280600581526020017f2e6a736f6e00000000000000000000000000000000000000000000000000000081525060408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600080825260209182015281518083019092528551825280860190820152906181d6565b95945050505050565b826040516020016149da9190619da0565b50919050565b60606000616b0b8360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600481527f2e736f6c0000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152909150616b6d90616784565b15616b7b5761490781617bd2565b604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616bda90616855565b600103616c4457604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152614907906167f590616922565b604080518082018252600581527f2e6a736f6e00000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616ca390616784565b15616abf57604080518082018252600181527f2f00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820181905284518086019095529251845283015290616d0b9083906182fa565b9050600181511115616d47578060028251616d269190618fd5565b81518110616d3657616d36619750565b602002602001015192505050919050565b50826040516020016149da9190619da0565b805182516000911115616d6e5750600061480e565b81518351602085015160009291616d8491618fe8565b616d8e9190618fd5565b905082602001518103616da557600191505061480e565b82516020840151819020912014905092915050565b60606000616dc78361839f565b600101905060008167ffffffffffffffff811115616de757616de76191d1565b6040519080825280601f01601f191660200182016040528015616e11576020820181803683370190505b5090508181016020015b600019017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a8504945084616e1b57509392505050565b604081810151815180830183526000808252602091820181905283518085018552835181529282018383015283518085018552600a81527f554e4c4943454e5345440000000000000000000000000000000000000000000081840190815285518087018752838152840192909252845180860190955251845290830152606091616ee6905b8290618481565b15616f2657505060408051808201909152600481527f4e6f6e65000000000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600981527f556e6c6963656e7365000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616f8590616edf565b15616fc557505060408051808201909152600981527f556e6c6963656e736500000000000000000000000000000000000000000000006020820152919050565b604080518082018252600381527f4d495400000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261702490616edf565b1561706457505060408051808201909152600381527f4d495400000000000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f47504c2d322e302d6f6e6c790000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526170c390616edf565b806171285750604080518082018252601081527f47504c2d322e302d6f722d6c61746572000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261712890616edf565b1561716857505060408051808201909152600981527f474e552047504c763200000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f47504c2d332e302d6f6e6c790000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526171c790616edf565b8061722c5750604080518082018252601081527f47504c2d332e302d6f722d6c61746572000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261722c90616edf565b1561726c57505060408051808201909152600981527f474e552047504c763300000000000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4c47504c2d322e312d6f6e6c7900000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526172cb90616edf565b806173305750604080518082018252601181527f4c47504c2d322e312d6f722d6c617465720000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261733090616edf565b1561737057505060408051808201909152600c81527f474e55204c47504c76322e3100000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4c47504c2d332e302d6f6e6c7900000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526173cf90616edf565b806174345750604080518082018252601181527f4c47504c2d332e302d6f722d6c617465720000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261743490616edf565b1561747457505060408051808201909152600a81527f474e55204c47504c7633000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f4253442d322d436c617573650000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526174d390616edf565b1561751357505060408051808201909152600c81527f4253442d322d436c6175736500000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f4253442d332d436c6175736500000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261757290616edf565b156175b257505060408051808201909152600c81527f4253442d332d436c6175736500000000000000000000000000000000000000006020820152919050565b604080518082018252600781527f4d504c2d322e30000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261761190616edf565b1561765157505060408051808201909152600781527f4d504c2d322e30000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600781527f4f534c2d332e3000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526176b090616edf565b156176f057505060408051808201909152600781527f4f534c2d332e30000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600a81527f4170616368652d322e30000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261774f90616edf565b1561778f57505060408051808201909152600a81527f4170616368652d322e30000000000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4147504c2d332e302d6f6e6c7900000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526177ee90616edf565b806178535750604080518082018252601181527f4147504c2d332e302d6f722d6c617465720000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261785390616edf565b1561789357505060408051808201909152600a81527f474e55204147504c7633000000000000000000000000000000000000000000006020820152919050565b604080518082018252600881527f4255534c2d312e31000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526178f290616edf565b1561793257505060408051808201909152600781527f42534c20312e31000000000000000000000000000000000000000000000000006020820152919050565b604080840151845191516149da9290602001619e7e565b60608060005b84518110156179d4578185828151811061796b5761796b619750565b60200260200101516040516020016179849291906192ee565b6040516020818303038152906040529150600185516179a39190618fd5565b81146179cc57816040516020016179ba9190619fe7565b60405160208183030381529060405291505b60010161794f565b5060408051600380825260808201909252600091816020015b60608152602001906001900390816179ed5790505090508381600081518110617a1857617a18619750565b60200260200101819052506040518060400160405280600281526020017f2d6300000000000000000000000000000000000000000000000000000000000081525081600181518110617a6c57617a6c619750565b60200260200101819052508181600281518110617a8b57617a8b619750565b6020908102919091010152949350505050565b6020808301518351835192840151600093617abc9291849190618495565b14159392505050565b60408051808201909152600080825260208201526000617af784600001518560200151856000015186602001516185a6565b9050836020015181617b099190618fd5565b84518590617b18908390618fd5565b90525060208401525090919050565b6040805180820190915260008082526020820152815183511015617b4c57508161480e565b6020808301519084015160019114617b735750815160208481015190840151829020919020145b8015617ba457825184518590617b8a908390618fd5565b9052508251602085018051617ba0908390618fe8565b9052505b509192915050565b6040805180820190915260008082526020820152617bcb8383836186c6565b5092915050565b60606000826000015167ffffffffffffffff811115617bf357617bf36191d1565b6040519080825280601f01601f191660200182016040528015617c1d576020820181803683370190505b5090506000602082019050617bcb8185602001518660000151618771565b60606000617c47614c04565b6040805160ff808252612000820190925291925060009190816020015b6060815260200190600190039081617c6457905050905060006040518060400160405280600381526020017f6e70780000000000000000000000000000000000000000000000000000000000815250828280617cbf906198bd565b935060ff1681518110617cd457617cd4619750565b60200260200101819052506040518060400160405280600781526020017f5e312e33322e3300000000000000000000000000000000000000000000000000815250604051602001617d25919061a028565b604051602081830303815290604052828280617d40906198bd565b935060ff1681518110617d5557617d55619750565b60200260200101819052506040518060400160405280600881526020017f76616c6964617465000000000000000000000000000000000000000000000000815250828280617da2906198bd565b935060ff1681518110617db757617db7619750565b602002602001018190525082604051602001617dd391906197eb565b604051602081830303815290604052828280617dee906198bd565b935060ff1681518110617e0357617e03619750565b60200260200101819052506040518060400160405280600a81526020017f2d2d636f6e747261637400000000000000000000000000000000000000000000815250828280617e50906198bd565b935060ff1681518110617e6557617e65619750565b6020026020010181905250617e7a87846187eb565b8282617e85816198bd565b935060ff1681518110617e9a57617e9a619750565b602090810291909101015285515115617f465760408051808201909152600b81527f2d2d7265666572656e636500000000000000000000000000000000000000000060208201528282617eec816198bd565b935060ff1681518110617f0157617f01619750565b6020026020010181905250617f1a8660000151846187eb565b8282617f25816198bd565b935060ff1681518110617f3a57617f3a619750565b60200260200101819052505b856080015115617fb45760408051808201909152601881527f2d2d756e73616665536b697053746f72616765436865636b000000000000000060208201528282617f8f816198bd565b935060ff1681518110617fa457617fa4619750565b602002602001018190525061801a565b841561801a5760408051808201909152601281527f2d2d726571756972655265666572656e6365000000000000000000000000000060208201528282617ff9816198bd565b935060ff168151811061800e5761800e619750565b60200260200101819052505b604086015151156180b65760408051808201909152600d81527f2d2d756e73616665416c6c6f770000000000000000000000000000000000000060208201528282618064816198bd565b935060ff168151811061807957618079619750565b60200260200101819052508560400151828280618095906198bd565b935060ff16815181106180aa576180aa619750565b60200260200101819052505b8560600151156181205760408051808201909152601481527f2d2d756e73616665416c6c6f7752656e616d6573000000000000000000000000602082015282826180ff816198bd565b935060ff168151811061811457618114619750565b60200260200101819052505b60008160ff1667ffffffffffffffff81111561813e5761813e6191d1565b60405190808252806020026020018201604052801561817157816020015b606081526020019060019003908161815c5790505b50905060005b8260ff168160ff1610156181ca57838160ff168151811061819a5761819a619750565b6020026020010151828260ff16815181106181b7576181b7619750565b6020908102919091010152600101618177565b50979650505050505050565b60408051808201909152600080825260208201528151835110156181fb57508161480e565b8151835160208501516000929161821191618fe8565b61821b9190618fd5565b6020840151909150600190821461823c575082516020840151819020908220145b801561825757835185518690618253908390618fd5565b9052505b50929392505050565b600080826000015161828485600001518660200151866000015187602001516185a6565b61828e9190618fe8565b90505b835160208501516182a29190618fe8565b8111617bcb57816182b28161a06d565b92505082600001516182e98560200151836182cd9190618fd5565b86516182d99190618fd5565b83866000015187602001516185a6565b6182f39190618fe8565b9050618291565b606060006183088484618260565b618313906001618fe8565b67ffffffffffffffff81111561832b5761832b6191d1565b60405190808252806020026020018201604052801561835e57816020015b60608152602001906001900390816183495790505b50905060005b81518110156165d35761837a6167f58686617bac565b82828151811061838c5761838c619750565b6020908102919091010152600101618364565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f01000000000000000083106183e8577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310618414576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc10000831061843257662386f26fc10000830492506010015b6305f5e100831061844a576305f5e100830492506008015b612710831061845e57612710830492506004015b60648310618470576064830492506002015b600a831061480e5760010192915050565b600061848d838361882b565b159392505050565b60008085841161859c576020841161854857600084156184e05760016184bc866020618fd5565b6184c790600861a087565b6184d290600261a185565b6184dc9190618fd5565b1990505b83518116856184ef8989618fe8565b6184f99190618fd5565b805190935082165b8181146185335787841161851b5787945050505050616204565b836185258161a191565b945050828451169050618501565b61853d8785618fe8565b945050505050616204565b8383206185558588618fd5565b61855f9087618fe8565b91505b85821061859a578482208082036185875761857d8684618fe8565b9350505050616204565b618592600184618fd5565b925050618562565b505b5092949350505050565b600083818685116186b1576020851161866057600085156185f25760016185ce876020618fd5565b6185d990600861a087565b6185e490600261a185565b6185ee9190618fd5565b1990505b845181166000876186038b8b618fe8565b61860d9190618fd5565b855190915083165b8281146186525781861061863a5761862d8b8b618fe8565b9650505050505050616204565b856186448161a06d565b965050838651169050618615565b859650505050505050616204565b508383206000905b6186728689618fd5565b82116186af5785832080820361868e5783945050505050616204565b618699600185618fe8565b93505081806186a79061a06d565b925050618668565b505b6186bb8787618fe8565b979650505050505050565b604080518082019091526000808252602082015260006186f885600001518660200151866000015187602001516185a6565b6020808701805191860191909152519091506187149082618fd5565b8352845160208601516187279190618fe8565b81036187365760008552618768565b835183516187449190618fe8565b85518690618753908390618fd5565b90525083516187629082618fe8565b60208601525b50909392505050565b602081106187a95781518352618788602084618fe8565b9250618795602083618fe8565b91506187a2602082618fd5565b9050618771565b60001981156187d85760016187bf836020618fd5565b6187cb9061010061a185565b6187d59190618fd5565b90505b9151835183169219169190911790915250565b606060006187f98484614cd7565b80516020808301516040519394506188139390910161a1a8565b60405160208183030381529060405291505092915050565b815181516000919081111561883e575081515b6020808501519084015160005b838110156188f757825182518082146188c75760001960208710156188a657600184618878896020618fd5565b6188829190618fe8565b61888d90600861a087565b61889890600261a185565b6188a29190618fd5565b1990505b81811683821681810391146188c457975061480e9650505050505050565b50505b6188d2602086618fe8565b94506188df602085618fe8565b935050506020816188f09190618fe8565b905061884b565b5084518651615385919061a200565b610b678061a22183390190565b61053f8061ad8883390190565b61106f8061b2c783390190565b611bb98061c33683390190565b6040518060e0016040528060608152602001606081526020016060815260200160001515815260200160001515815260200160001515815260200161897d618982565b905290565b6040518061010001604052806000151581526020016000151581526020016060815260200160008019168152602001606081526020016060815260200160001515815260200161897d6040518060800160405280600081526020016000815260200160008152602001600081525090565b602080825282518282018190526000918401906040840190835b81811015618a345783516001600160a01b0316835260209384019390920191600101618a0d565b509095945050505050565b60005b83811015618a5a578181015183820152602001618a42565b50506000910152565b60008151808452618a7b816020860160208601618a3f565b601f01601f19169290920160200192915050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015618b8b577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452815180516001600160a01b03168652602090810151604082880181905281519088018190529101906060600582901b88018101919088019060005b81811015618b71577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa08a8503018352618b5b848651618a63565b6020958601959094509290920191600101618b21565b509197505050602094850194929092019150600101618ab7565b50929695505050505050565b600081518084526020840193506020830160005b82811015618beb5781517fffffffff0000000000000000000000000000000000000000000000000000000016865260209586019590910190600101618bab565b5093949350505050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015618b8b577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08786030184528151805160408752618c616040880182618a63565b9050602082015191508681036020880152618c7c8183618b97565b965050506020938401939190910190600101618c1d565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015618b8b577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452618cf5858351618a63565b94506020938401939190910190600101618cbb565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015618b8b577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc087860301845281516001600160a01b0381511686526020810151905060406020870152618d8b6040870182618b97565b9550506020938401939190910190600101618d32565b600060208284031215618db357600080fd5b81516001600160a01b038116811461490757600080fd5b610100815260056101008201527f544f4b454e000000000000000000000000000000000000000000000000000000610120820152610140602082015260036101408201527f544b4e000000000000000000000000000000000000000000000000000000000061016082015260006101808201905060ff8816604083015286606083015260038610618e84577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b8560808301528460a0830152618ea560c08301856001600160a01b03169052565b6001600160a01b03831660e0830152979650505050505050565b600060208284031215618ed157600080fd5b8151801515811461490757600080fd5b600060208284031215618ef357600080fd5b5051919050565b608081526000618f0d6080830187618a63565b8560208401526001600160a01b038516604084015282810360608401526186bb8185618a63565b60c081526000618f4760c0830189618a63565b6001600160a01b038816602084015286604084015285606084015284608084015282810360a0840152618f7a8185618a63565b9998505050505050505050565b838152826020820152606060408201526000616ab66060830184618a63565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8181038181111561480e5761480e618fa6565b8082018082111561480e5761480e618fa6565b600181811c9082168061900f57607f821691505b602082108103616ad0577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60608152600061905b6060830186618a63565b84602084015282810360408401526153858185618a63565b6060815260006190866060830186618a63565b90508360208301526001600160a01b0383166040830152949350505050565b6040815260006190b86040830185618a63565b82810360208401526149038185618a63565b60c0815260006190dd60c0830188618a63565b6001600160a01b038716602084015285604084015284606084015283608084015282810360a084015260008152602081019150509695505050505050565b6001600160a01b03831681526040602082015260006162046040830184618a63565b7f4661696c656420746f206465706c6f7920636f6e74726163742000000000000081526000835161917581601a850160208801618a3f565b7f3a20000000000000000000000000000000000000000000000000000000000000601a9184019182015283516191b281601c840160208801618a3f565b01601c01949350505050565b6020815260006149076020830184618a63565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040516060810167ffffffffffffffff81118282101715619223576192236191d1565b60405290565b60008067ffffffffffffffff841115619244576192446191d1565b50604051601f19601f85018116603f0116810181811067ffffffffffffffff82111715619273576192736191d1565b60405283815290508082840185101561928b57600080fd5b6165d3846020830185618a3f565b600082601f8301126192aa57600080fd5b61490783835160208501619229565b6000602082840312156192cb57600080fd5b815167ffffffffffffffff8111156192e257600080fd5b61480a84828501619299565b60008351619300818460208801618a3f565b835190830190619314818360208801618a3f565b01949350505050565b7f4661696c656420746f206465706c6f7920636f6e74726163742000000000000081526000835161935581601a850160208801618a3f565b7f207573696e6720636f6e7374727563746f722064617461202200000000000000601a918401918201528351619392816033840160208801618a3f565b7f220000000000000000000000000000000000000000000000000000000000000060339290910191820152603401949350505050565b60408152600b60408201527f464f554e4452595f4f555400000000000000000000000000000000000000000060608201526080602082015260006149076080830184618a63565b60006020828403121561942157600080fd5b815167ffffffffffffffff81111561943857600080fd5b8201601f8101841361944957600080fd5b61480a84825160208401619229565b6000855161946a818460208a01618a3f565b7f2f0000000000000000000000000000000000000000000000000000000000000090830190815285516194a4816001840160208a01618a3f565b7f2f000000000000000000000000000000000000000000000000000000000000006001929091019182015284516194e2816002840160208901618a3f565b6001818301019150507f2f0000000000000000000000000000000000000000000000000000000000000060018201528351619524816002840160208801618a3f565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600292909101918201526007019695505050505050565b60408152600061956f6040830184618a63565b8281036020840152600481527f2e6173740000000000000000000000000000000000000000000000000000000060208201526040810191505092915050565b7f436f756c64206e6f742066696e642041535420696e20617274696661637420008152600082516195e681601f850160208701618a3f565b7f2e205365742060617374203d20747275656020696e20666f756e6472792e746f601f9390910192830152507f6d6c000000000000000000000000000000000000000000000000000000000000603f820152604101919050565b6040815260006196536040830184618a63565b8281036020840152601181527f2e6173742e6162736f6c7574655061746800000000000000000000000000000060208201526040810191505092915050565b6040815260006196a56040830184618a63565b8281036020840152600c81527f2e6173742e6c6963656e7365000000000000000000000000000000000000000060208201526040810191505092915050565b7f2e6d657461646174612e736f75726365732e5b2700000000000000000000000081526000825161971c816014850160208701618a3f565b7f275d2e6b656363616b32353600000000000000000000000000000000000000006014939091019283015250602001919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f22000000000000000000000000000000000000000000000000000000000000008152600082516197b7816001850160208701618a3f565b7f22000000000000000000000000000000000000000000000000000000000000006001939091019283015250600201919050565b600082516197fd818460208701618a3f565b7f2f6275696c642d696e666f000000000000000000000000000000000000000000920191825250600b01919050565b7f436f756c64206e6f742066696e64206275696c642d696e666f2066696c65207781527f697468206d61746368696e6720736f7572636520636f6465206861736820666f60208201527f7220636f6e7472616374200000000000000000000000000000000000000000006040820152600082516198b081604b850160208701618a3f565b91909101604b0192915050565b600060ff821660ff81036198d3576198d3618fa6565b60010192915050565b7f406f70656e7a657070656c696e2f646566656e6465722d6465706c6f792d636c81527f69656e742d636c6940000000000000000000000000000000000000000000000060208201526000825161993a816029850160208701618a3f565b9190910160290192915050565b60408152601660408201527f4f50454e5a455050454c494e5f424153485f504154480000000000000000000060608201526080602082015260006149076080830184618a63565b6000602082840312156199a057600080fd5b815167ffffffffffffffff8111156199b757600080fd5b8201606081850312156199c957600080fd5b6199d1619200565b81518060030b81146199e257600080fd5b8152602082015167ffffffffffffffff8111156199fe57600080fd5b619a0a86828501619299565b602083015250604082015167ffffffffffffffff811115619a2a57600080fd5b619a3686828501619299565b604083015250949350505050565b7f4661696c656420746f2072756e206261736820636f6d6d616e6420776974682081527f2200000000000000000000000000000000000000000000000000000000000000602082015260008251619aa2816021850160208701618a3f565b7f222e20496620796f7520617265207573696e672057696e646f77732c2073657460219390910192830152507f20746865204f50454e5a455050454c494e5f424153485f5041544820656e766960418201527f726f6e6d656e74207661726961626c6520746f207468652066756c6c7920717560618201527f616c69666965642070617468206f66207468652062617368206578656375746160818201527f626c652e20466f72206578616d706c652c20696620796f75206172652075736960a18201527f6e672047697420666f722057696e646f77732c206164642074686520666f6c6c60c18201527f6f77696e67206c696e6520696e20746865202e656e762066696c65206f66207960e18201527f6f75722070726f6a65637420287573696e6720666f727761726420736c6173686101018201527f6573293a0a4f50454e5a455050454c494e5f424153485f504154483d22433a2f6101218201527f50726f6772616d2046696c65732f4769742f62696e2f6261736822000000000061014182015261015c01919050565b7f4661696c656420746f2066696e64206c696e652077697468207072656669782081527f2700000000000000000000000000000000000000000000000000000000000000602082015260008351619c8e816021850160208801618a3f565b7f2720696e206f75747075743a20000000000000000000000000000000000000006021918401918201528351619ccb81602e840160208801618a3f565b01602e01949350505050565b7f4661696c656420746f2072756e2075706772616465207361666574792076616c81527f69646174696f6e3a20000000000000000000000000000000000000000000000060208201526000825161993a816029850160208701618a3f565b7f55706772616465207361666574792076616c69646174696f6e206661696c656481527f3a0a000000000000000000000000000000000000000000000000000000000000602082015260008251619d93816022850160208701618a3f565b9190910160220192915050565b7f436f6e7472616374206e616d6520000000000000000000000000000000000000815260008251619dd881600e850160208701618a3f565b7f206d75737420626520696e2074686520666f726d6174204d79436f6e74726163600e9390910192830152507f742e736f6c3a4d79436f6e7472616374206f72204d79436f6e74726163742e73602e8201527f6f6c206f72206f75742f4d79436f6e74726163742e736f6c2f4d79436f6e7472604e8201527f6163742e6a736f6e000000000000000000000000000000000000000000000000606e820152607601919050565b7f53504458206c6963656e7365206964656e746966696572200000000000000000815260008351619eb6816018850160208801618a3f565b7f20696e20000000000000000000000000000000000000000000000000000000006018918401918201528351619ef381601c840160208801618a3f565b7f20646f6573206e6f74206c6f6f6b206c696b65206120737570706f7274656420601c92909101918201527f6c6963656e736520666f7220626c6f636b206578706c6f726572207665726966603c8201527f69636174696f6e2e205573652074686520606c6963656e73655479706560206f605c8201527f7074696f6e20746f20737065636966792061206c6963656e736520747970652c607c8201527f206f7220736574207468652060736b69704c6963656e73655479706560206f70609c8201527f74696f6e20746f2060747275656020746f20736b69702e00000000000000000060bc82015260d301949350505050565b60008251619ff9818460208701618a3f565b7f2000000000000000000000000000000000000000000000000000000000000000920191825250600101919050565b7f406f70656e7a657070656c696e2f75706772616465732d636f7265400000000081526000825161a06081601c850160208701618a3f565b91909101601c0192915050565b6000600019820361a0805761a080618fa6565b5060010190565b808202811582820484141761480e5761480e618fa6565b6001815b600184111561a0d95780850481111561a0bd5761a0bd618fa6565b600184161561a0cb57908102905b60019390931c92800261a0a2565b935093915050565b60008261a0f05750600161480e565b8161a0fd5750600061480e565b816001811461a113576002811461a11d5761a139565b600191505061480e565b60ff84111561a12e5761a12e618fa6565b50506001821b61480e565b5060208310610133831016604e8410600b841016171561a15c575081810a61480e565b61a169600019848461a09e565b806000190482111561a17d5761a17d618fa6565b029392505050565b6000614907838361a0e1565b60008161a1a05761a1a0618fa6565b506000190190565b6000835161a1ba818460208801618a3f565b7f3a00000000000000000000000000000000000000000000000000000000000000908301908152835161a1f4816001840160208801618a3f565b01600101949350505050565b8181036000831280158383131683831282161715617bcb57617bcb618fa656fe60c0604052600d60809081526c2bb930b83832b21022ba3432b960991b60a05260009061002c9082610114565b506040805180820190915260048152630ae8aa8960e31b60208201526001906100559082610114565b506002805460ff1916601217905534801561006f57600080fd5b506101d2565b634e487b7160e01b600052604160045260246000fd5b600181811c9082168061009f57607f821691505b6020821081036100bf57634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111561010f57806000526020600020601f840160051c810160208510156100ec5750805b601f840160051c820191505b8181101561010c57600081556001016100f8565b50505b505050565b81516001600160401b0381111561012d5761012d610075565b6101418161013b845461008b565b846100c5565b6020601f821160018114610175576000831561015d5750848201515b600019600385901b1c1916600184901b17845561010c565b600084815260208120601f198516915b828110156101a55787850151825560209485019460019092019101610185565b50848210156101c35786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b610986806101e16000396000f3fe6080604052600436106100c05760003560e01c8063313ce56711610074578063a9059cbb1161004e578063a9059cbb146101fa578063d0e30db01461021a578063dd62ed3e1461022257600080fd5b8063313ce5671461018c57806370a08231146101b857806395d89b41146101e557600080fd5b806318160ddd116100a557806318160ddd1461012f57806323b872dd1461014c5780632e1a7d4d1461016c57600080fd5b806306fdde03146100d4578063095ea7b3146100ff57600080fd5b366100cf576100cd61025a565b005b600080fd5b3480156100e057600080fd5b506100e96102b5565b6040516100f69190610745565b60405180910390f35b34801561010b57600080fd5b5061011f61011a3660046107da565b610343565b60405190151581526020016100f6565b34801561013b57600080fd5b50475b6040519081526020016100f6565b34801561015857600080fd5b5061011f610167366004610804565b6103bd565b34801561017857600080fd5b506100cd610187366004610841565b610647565b34801561019857600080fd5b506002546101a69060ff1681565b60405160ff90911681526020016100f6565b3480156101c457600080fd5b5061013e6101d336600461085a565b60036020526000908152604090205481565b3480156101f157600080fd5b506100e9610724565b34801561020657600080fd5b5061011f6102153660046107da565b610731565b6100cd61025a565b34801561022e57600080fd5b5061013e61023d366004610875565b600460209081526000928352604080842090915290825290205481565b33600090815260036020526040812080543492906102799084906108d7565b909155505060405134815233907fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c9060200160405180910390a2565b600080546102c2906108ea565b80601f01602080910402602001604051908101604052809291908181526020018280546102ee906108ea565b801561033b5780601f106103105761010080835404028352916020019161033b565b820191906000526020600020905b81548152906001019060200180831161031e57829003601f168201915b505050505081565b33600081815260046020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925906103ab9086815260200190565b60405180910390a35060015b92915050565b73ffffffffffffffffffffffffffffffffffffffff831660009081526003602052604081205482111561042b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600060248201526044015b60405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff841633148015906104a1575073ffffffffffffffffffffffffffffffffffffffff841660009081526004602090815260408083203384529091529020547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff14155b156105605773ffffffffffffffffffffffffffffffffffffffff8416600090815260046020908152604080832033845290915290205482111561051a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526020600482015260006024820152604401610422565b73ffffffffffffffffffffffffffffffffffffffff841660009081526004602090815260408083203384529091528120805484929061055a90849061093d565b90915550505b73ffffffffffffffffffffffffffffffffffffffff84166000908152600360205260408120805484929061059590849061093d565b909155505073ffffffffffffffffffffffffffffffffffffffff8316600090815260036020526040812080548492906105cf9084906108d7565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161063591815260200190565b60405180910390a35060019392505050565b3360009081526003602052604090205481111561069a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526020600482015260006024820152604401610422565b33600090815260036020526040812080548392906106b990849061093d565b9091555050604051339082156108fc029083906000818181858888f193505050501580156106eb573d6000803e3d6000fd5b5060405181815233907f7fcf532c15f0a6db0bd6d0e038bea71d30d808c7d98cb3bf7268a95bf5081b659060200160405180910390a250565b600180546102c2906108ea565b600061073e3384846103bd565b9392505050565b602081526000825180602084015260005b818110156107735760208186018101516040868401015201610756565b5060006040828501015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011684010191505092915050565b803573ffffffffffffffffffffffffffffffffffffffff811681146107d557600080fd5b919050565b600080604083850312156107ed57600080fd5b6107f6836107b1565b946020939093013593505050565b60008060006060848603121561081957600080fd5b610822846107b1565b9250610830602085016107b1565b929592945050506040919091013590565b60006020828403121561085357600080fd5b5035919050565b60006020828403121561086c57600080fd5b61073e826107b1565b6000806040838503121561088857600080fd5b610891836107b1565b915061089f602084016107b1565b90509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b808201808211156103b7576103b76108a8565b600181811c908216806108fe57607f821691505b602082108103610937577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b818103818111156103b7576103b76108a856fea264697066735822122008d7fc4e09519c5dd9f356b03596f6829a151d0bc7682533f9ceab4e459f5ee264736f6c634300081a00336080604052348015600f57600080fd5b506105208061001f6000396000f3fe60806040526004361061002a5760003560e01c806369582bee14610033578063de43156e1461005357005b3661003157005b005b34801561003f57600080fd5b5061003161004e3660046101ba565b610073565b34801561005f57600080fd5b5061003161006e3660046101ba565b6100ee565b6060811561008a5761008782840184610273565b90505b7ffdc887992b033668833927e252058e468fac0b6bd196d520f09c61b740e999486100b58780610369565b6100c560408a0160208b016103ce565b896040013533866040516100de969594939291906103f0565b60405180910390a1505050505050565b606081156101055761010282840184610273565b90505b7fcdc8ee677dc5ebe680fb18cebda5e26ba5ea1f0ba504a47e2a9a2ecb476dc98e6100b58780610369565b60006060828403121561014257600080fd5b50919050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461016c57600080fd5b919050565b60008083601f84011261018357600080fd5b50813567ffffffffffffffff81111561019b57600080fd5b6020830191508360208285010111156101b357600080fd5b9250929050565b6000806000806000608086880312156101d257600080fd5b853567ffffffffffffffff8111156101e957600080fd5b6101f588828901610130565b95505061020460208701610148565b935060408601359250606086013567ffffffffffffffff81111561022757600080fd5b61023388828901610171565b969995985093965092949392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60006020828403121561028557600080fd5b813567ffffffffffffffff81111561029c57600080fd5b8201601f810184136102ad57600080fd5b803567ffffffffffffffff8111156102c7576102c7610244565b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8501160116810181811067ffffffffffffffff8211171561033357610333610244565b60405281815282820160200186101561034b57600080fd5b81602084016020830137600091810160200191909152949350505050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261039e57600080fd5b83018035915067ffffffffffffffff8211156103b957600080fd5b6020019150368190038213156101b357600080fd5b6000602082840312156103e057600080fd5b6103e982610148565b9392505050565b60a081528560a0820152858760c0830137600060c0878301015260007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f880116820173ffffffffffffffffffffffffffffffffffffffff8716602084015285604084015273ffffffffffffffffffffffffffffffffffffffff8516606084015260c083820301608084015283518060c083015260005b818110156104a557602081870181015184830160e0015201610488565b50600060e0838301810191909152601f9091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016909101019897505050505050505056fea2646970667358221220f4d1ccb9c8450e782e1c77412473fd37637a5c83a2a3272307d8c8bc8e8c7a3364736f6c634300081a003360c060405234801561001057600080fd5b5060405161106f38038061106f83398101604081905261002f916100db565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461006357604051632b2add3d60e01b815260040160405180910390fd5b600380546001600160a01b0319166001600160a01b0385811691909117909155828116608052811660a0526040517f80699e81136d69cb8367ad52a994e25c722a86da654b561d0c14b61a777e7ac590600090a150505061011e565b80516001600160a01b03811681146100d657600080fd5b919050565b6000806000606084860312156100f057600080fd5b6100f9846100bf565b9250610107602085016100bf565b9150610115604085016100bf565b90509250925092565b60805160a051610f2561014a60003960006101e50152600081816102b9015261045b0152610f256000f3fe608060405234801561001057600080fd5b50600436106100f55760003560e01c806397770dff11610097578063c63585cc11610066578063c63585cc14610273578063d7fd7afb14610286578063d936a012146102b4578063ee2815ba146102db57600080fd5b806397770dff1461021a578063a7cb05071461022d578063c39aca3714610240578063c62178ac1461025357600080fd5b8063513a9c05116100d3578063513a9c051461018a578063569541b9146101c0578063842da36d146101e057806391dd645f1461020757600080fd5b80630be15547146100fa5780631f0e251b1461015a5780633ce4a5bc1461016f575b600080fd5b610130610108366004610bd1565b60016020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b61016d610168366004610c13565b6102ee565b005b61013073735b14bb79463307aacbed86daf3322b1e6226ab81565b610130610198366004610bd1565b60026020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b6003546101309073ffffffffffffffffffffffffffffffffffffffff1681565b6101307f000000000000000000000000000000000000000000000000000000000000000081565b61016d610215366004610c35565b610402565b61016d610228366004610c13565b610526565b61016d61023b366004610c61565b610633565b61016d61024e366004610c83565b6106ce565b6004546101309073ffffffffffffffffffffffffffffffffffffffff1681565b610130610281366004610d53565b6108cd565b6102a6610294366004610bd1565b60006020819052908152604090205481565b604051908152602001610151565b6101307f000000000000000000000000000000000000000000000000000000000000000081565b61016d6102e9366004610c35565b610a02565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461033b576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116610388576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600480547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527f3ade88e3922d64780e1bf4460d364c2970b69da813f9c0c07a1c187b5647636c906020015b60405180910390a150565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461044f576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600354600090610497907f00000000000000000000000000000000000000000000000000000000000000009073ffffffffffffffffffffffffffffffffffffffff16846108cd565b60008481526002602090815260409182902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff85169081179091558251878152918201529192507f0ecec485166da6139b13bb7e033e9446e2d35348e80ebf1180d4afe2dba1704e910160405180910390a1505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610573576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff81166105c0576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527fdba79d534382d1a8ae108e4c8ecb27c6ae42ab8b91d44eedf88bd329f3868d5e906020016103f7565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610680576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000828152602081815260409182902083905581518481529081018390527f49f492222906ac486c3c1401fa545626df1f0c0e5a77a05597ea2ed66af9850d91015b60405180910390a15050565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461071b576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff831673735b14bb79463307aacbed86daf3322b1e6226ab1480610768575073ffffffffffffffffffffffffffffffffffffffff831630145b1561079f576040517f82d5d76a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f47e7ef2400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152602482018690528616906347e7ef24906044016020604051808303816000875af1158015610814573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108389190610d96565b506040517fde43156e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84169063de43156e906108939089908990899088908890600401610e01565b600060405180830381600087803b1580156108ad57600080fd5b505af11580156108c1573d6000803e3d6000fd5b50505050505050505050565b60008060006108dc8585610ad3565b6040517fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606084811b8216602084015283901b16603482015291935091508690604801604051602081830303815290604052805190602001206040516020016109c29291907fff00000000000000000000000000000000000000000000000000000000000000815260609290921b7fffffffffffffffffffffffffffffffffffffffff00000000000000000000000016600183015260158201527f96e8ac4277198ff8b6f785478aa9a39f403cb768dd02cbee326c3e7da348845f603582015260550190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291905280516020909101209695505050505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610a4f576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008281526001602090815260409182902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff85169081179091558251858152918201527fd1b36d30f6248e97c473b4d1348ca164a4ef6759022f54a58ec200326c39c45d91016106c2565b6000808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603610b3b576040517fcb1e7cfe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1610610b75578284610b78565b83835b909250905073ffffffffffffffffffffffffffffffffffffffff8216610bca576040517f78b507da00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b9250929050565b600060208284031215610be357600080fd5b5035919050565b803573ffffffffffffffffffffffffffffffffffffffff81168114610c0e57600080fd5b919050565b600060208284031215610c2557600080fd5b610c2e82610bea565b9392505050565b60008060408385031215610c4857600080fd5b82359150610c5860208401610bea565b90509250929050565b60008060408385031215610c7457600080fd5b50508035926020909101359150565b60008060008060008060a08789031215610c9c57600080fd5b863567ffffffffffffffff811115610cb357600080fd5b87016060818a031215610cc557600080fd5b9550610cd360208801610bea565b945060408701359350610ce860608801610bea565b9250608087013567ffffffffffffffff811115610d0457600080fd5b8701601f81018913610d1557600080fd5b803567ffffffffffffffff811115610d2c57600080fd5b896020828401011115610d3e57600080fd5b60208201935080925050509295509295509295565b600080600060608486031215610d6857600080fd5b610d7184610bea565b9250610d7f60208501610bea565b9150610d8d60408501610bea565b90509250925092565b600060208284031215610da857600080fd5b81518015158114610c2e57600080fd5b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b60808152600086357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1883603018112610e3957600080fd5b870160208101903567ffffffffffffffff811115610e5657600080fd5b803603821315610e6557600080fd5b60606080850152610e7a60e085018284610db8565b91505073ffffffffffffffffffffffffffffffffffffffff610e9e60208a01610bea565b1660a0840152604088013560c084015273ffffffffffffffffffffffffffffffffffffffff871660208401528560408401528281036060840152610ee3818587610db8565b9897505050505050505056fea2646970667358221220431a07541a491b54259bdf8fcd05ade6751bfbbf0e72e605f27325b56d7d464f64736f6c634300081a003360e060405234801561001057600080fd5b50604051611bb9380380611bb983398101604081905261002f9161020e565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461006357604051632b2add3d60e01b815260040160405180910390fd5b6001600160a01b038216158061008057506001600160a01b038116155b1561009e5760405163d92e233d60e01b815260040160405180910390fd5b60066100aa8982610360565b5060076100b78882610360565b5060ff861660c05260808590528360028111156100d6576100d661041e565b60a08160028111156100ea576100ea61041e565b905250600192909255600080546001600160a01b039283166001600160a01b03199182161790915560088054929093169116179055506104349350505050565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261015157600080fd5b81516001600160401b0381111561016a5761016a61012a565b604051601f8201601f19908116603f011681016001600160401b03811182821017156101985761019861012a565b6040528181528382016020018510156101b057600080fd5b60005b828110156101cf576020818601810151838301820152016101b3565b506000918101602001919091529392505050565b8051600381106101f257600080fd5b919050565b80516001600160a01b03811681146101f257600080fd5b600080600080600080600080610100898b03121561022b57600080fd5b88516001600160401b0381111561024157600080fd5b61024d8b828c01610140565b60208b015190995090506001600160401b0381111561026b57600080fd5b6102778b828c01610140565b975050604089015160ff8116811461028e57600080fd5b60608a015190965094506102a460808a016101e3565b60a08a015190945092506102ba60c08a016101f7565b91506102c860e08a016101f7565b90509295985092959890939650565b600181811c908216806102eb57607f821691505b60208210810361030b57634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111561035b57806000526020600020601f840160051c810160208510156103385750805b601f840160051c820191505b818110156103585760008155600101610344565b50505b505050565b81516001600160401b038111156103795761037961012a565b61038d8161038784546102d7565b84610311565b6020601f8211600181146103c157600083156103a95750848201515b600019600385901b1c1916600184901b178455610358565b600084815260208120601f198516915b828110156103f157878501518255602094850194600190920191016103d1565b508482101561040f5786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b634e487b7160e01b600052602160045260246000fd5b60805160a05160c05161174861047160003960006102170152600061033a0152600081816102eb01528181610ad70152610bdd01526117486000f3fe608060405234801561001057600080fd5b50600436106101985760003560e01c80638b851b95116100e3578063ccc775991161008c578063eddeb12311610066578063eddeb12314610431578063f2441b3214610444578063f687d12a1461046457600080fd5b8063ccc77599146103a4578063d9eeebed146103b7578063dd62ed3e146103eb57600080fd5b8063a9059cbb116100bd578063a9059cbb14610369578063c70126261461037c578063c835d7cc1461038f57600080fd5b80638b851b951461030d57806395d89b411461032d578063a3413d031461033557600080fd5b80633ce4a5bc116101455780634d8943bb1161011f5780634d8943bb146102a757806370a08231146102b057806385e1f4d0146102e657600080fd5b80633ce4a5bc1461024157806342966c681461028157806347e7ef241461029457600080fd5b806318160ddd1161017657806318160ddd146101f557806323b872dd146101fd578063313ce5671461021057600080fd5b806306fdde031461019d578063091d2788146101bb578063095ea7b3146101d2575b600080fd5b6101a5610477565b6040516101b29190611327565b60405180910390f35b6101c460015481565b6040519081526020016101b2565b6101e56101e0366004611366565b610509565b60405190151581526020016101b2565b6005546101c4565b6101e561020b366004611392565b610520565b60405160ff7f00000000000000000000000000000000000000000000000000000000000000001681526020016101b2565b61025c73735b14bb79463307aacbed86daf3322b1e6226ab81565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101b2565b6101e561028f3660046113d3565b6105b7565b6101e56102a2366004611366565b6105cb565b6101c460025481565b6101c46102be3660046113ec565b73ffffffffffffffffffffffffffffffffffffffff1660009081526003602052604090205490565b6101c47f000000000000000000000000000000000000000000000000000000000000000081565b60085461025c9073ffffffffffffffffffffffffffffffffffffffff1681565b6101a561071f565b61035c7f000000000000000000000000000000000000000000000000000000000000000081565b6040516101b29190611409565b6101e5610377366004611366565b61072e565b6101e561038a366004611479565b61073b565b6103a261039d3660046113ec565b61088a565b005b6103a26103b23660046113ec565b61099e565b6103bf610aab565b6040805173ffffffffffffffffffffffffffffffffffffffff90931683526020830191909152016101b2565b6101c46103f9366004611571565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260046020908152604080832093909416825291909152205490565b6103a261043f3660046113d3565b610cc9565b60005461025c9073ffffffffffffffffffffffffffffffffffffffff1681565b6103a26104723660046113d3565b610d4b565b606060068054610486906115aa565b80601f01602080910402602001604051908101604052809291908181526020018280546104b2906115aa565b80156104ff5780601f106104d4576101008083540402835291602001916104ff565b820191906000526020600020905b8154815290600101906020018083116104e257829003601f168201915b5050505050905090565b6000610516338484610dcd565b5060015b92915050565b600061052d848484610ed6565b73ffffffffffffffffffffffffffffffffffffffff8416600090815260046020908152604080832033845290915290205482811015610598576040517f10bad14700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6105ac85336105a7868561162c565b610dcd565b506001949350505050565b60006105c33383611091565b506001919050565b60003373735b14bb79463307aacbed86daf3322b1e6226ab14801590610609575060005473ffffffffffffffffffffffffffffffffffffffff163314155b801561062d575060085473ffffffffffffffffffffffffffffffffffffffff163314155b15610664576040517fddb5de5e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61066e83836111d3565b6040517f735b14bb79463307aacbed86daf3322b1e6226ab000000000000000000000000602082015273ffffffffffffffffffffffffffffffffffffffff8416907f67fc7bdaed5b0ec550d8706b87d60568ab70c6b781263c70101d54cd1564aab390603401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529082905261070e91869061163f565b60405180910390a250600192915050565b606060078054610486906115aa565b6000610516338484610ed6565b6000806000610748610aab565b6040517f23b872dd00000000000000000000000000000000000000000000000000000000815233600482015273735b14bb79463307aacbed86daf3322b1e6226ab602482015260448101829052919350915073ffffffffffffffffffffffffffffffffffffffff8316906323b872dd906064016020604051808303816000875af11580156107da573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107fe9190611661565b610834576040517f0a7cd6d600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61083e3385611091565b60025460405133917f9ffbffc04a397460ee1dbe8c9503e098090567d6b7f4b3c02a8617d800b6d9559161087791899189918791611683565b60405180910390a2506001949350505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab146108d7576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116610924576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527fd55614e962c5fd6ece71614f6348d702468a997a394dd5e5c1677950226d97ae906020015b60405180910390a150565b3373735b14bb79463307aacbed86daf3322b1e6226ab146109eb576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116610a38576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600880547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527f88815d964e380677e86d817e7d65dea59cb7b4c3b5b7a0c8ec7ea4a74f90a38790602001610993565b600080546040517f0be155470000000000000000000000000000000000000000000000000000000081527f000000000000000000000000000000000000000000000000000000000000000060048201528291829173ffffffffffffffffffffffffffffffffffffffff90911690630be1554790602401602060405180830381865afa158015610b3e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b6291906116b2565b905073ffffffffffffffffffffffffffffffffffffffff8116610bb1576040517f78fff39600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080546040517fd7fd7afb0000000000000000000000000000000000000000000000000000000081527f0000000000000000000000000000000000000000000000000000000000000000600482015273ffffffffffffffffffffffffffffffffffffffff9091169063d7fd7afb90602401602060405180830381865afa158015610c40573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c6491906116cf565b905080600003610ca0576040517fe661aed000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060025460015483610cb391906116e8565b610cbd91906116ff565b92959294509192505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610d16576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60028190556040518181527fef13af88e424b5d15f49c77758542c1938b08b8b95b91ed0751f98ba99000d8f90602001610993565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610d98576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018190556040518181527fff5788270f43bfc1ca41c503606d2594aa3023a1a7547de403a3e2f146a4a80a90602001610993565b73ffffffffffffffffffffffffffffffffffffffff8316610e1a576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216610e67576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff83811660008181526004602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8316610f23576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216610f70576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff831660009081526003602052604090205481811015610fd0576040517ffe382aa700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610fda828261162c565b73ffffffffffffffffffffffffffffffffffffffff808616600090815260036020526040808220939093559085168152908120805484929061101d9084906116ff565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161108391815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff82166110de576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff82166000908152600360205260409020548181101561113e576040517ffe382aa700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611148828261162c565b73ffffffffffffffffffffffffffffffffffffffff84166000908152600360205260408120919091556005805484929061118390849061162c565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90602001610ec9565b73ffffffffffffffffffffffffffffffffffffffff8216611220576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b806005600082825461123291906116ff565b909155505073ffffffffffffffffffffffffffffffffffffffff82166000908152600360205260408120805483929061126c9084906116ff565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6000815180845260005b818110156112e9576020818501810151868301820152016112cd565b5060006020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b60208152600061133a60208301846112c3565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff8116811461136357600080fd5b50565b6000806040838503121561137957600080fd5b823561138481611341565b946020939093013593505050565b6000806000606084860312156113a757600080fd5b83356113b281611341565b925060208401356113c281611341565b929592945050506040919091013590565b6000602082840312156113e557600080fd5b5035919050565b6000602082840312156113fe57600080fd5b813561133a81611341565b6020810160038310611444577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000806040838503121561148c57600080fd5b823567ffffffffffffffff8111156114a357600080fd5b8301601f810185136114b457600080fd5b803567ffffffffffffffff8111156114ce576114ce61144a565b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8501160116810181811067ffffffffffffffff8211171561153a5761153a61144a565b60405281815282820160200187101561155257600080fd5b8160208401602083013760006020928201830152969401359450505050565b6000806040838503121561158457600080fd5b823561158f81611341565b9150602083013561159f81611341565b809150509250929050565b600181811c908216806115be57607f821691505b6020821081036115f7577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8181038181111561051a5761051a6115fd565b60408152600061165260408301856112c3565b90508260208301529392505050565b60006020828403121561167357600080fd5b8151801515811461133a57600080fd5b60808152600061169660808301876112c3565b6020830195909552506040810192909252606090910152919050565b6000602082840312156116c457600080fd5b815161133a81611341565b6000602082840312156116e157600080fd5b5051919050565b808202811582820484141761051a5761051a6115fd565b8082018082111561051a5761051a6115fd56fea26469706673582212204013e39523742118b3f2227e145ee7e48176ba6aebead33c596dca2acb59a74c64736f6c634300081a0033a26469706673582212200cba2b427932e08852b96ad15b313c50f22369922ac94104641269d615b2ebd464736f6c634300081a0033", } // GatewayZEVMInboundTestABI is the input ABI used to generate the binding from. diff --git a/v2/pkg/gatewayzevm.t.sol/gatewayzevmoutboundtest.go b/v2/pkg/gatewayzevm.t.sol/gatewayzevmoutboundtest.go index 4dcd5094..2aa9c2fc 100644 --- a/v2/pkg/gatewayzevm.t.sol/gatewayzevmoutboundtest.go +++ b/v2/pkg/gatewayzevm.t.sol/gatewayzevmoutboundtest.go @@ -50,7 +50,7 @@ type StdInvariantFuzzSelector struct { // GatewayZEVMOutboundTestMetaData contains all meta data concerning the GatewayZEVMOutboundTest contract. var GatewayZEVMOutboundTestMetaData = &bind.MetaData{ ABI: "[{\"type\":\"function\",\"name\":\"IS_TEST\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"PAUSER_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeArtifacts\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedArtifacts_\",\"type\":\"string[]\",\"internalType\":\"string[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeContracts\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedContracts_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeSelectors\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedSelectors_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzSelector[]\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"selectors\",\"type\":\"bytes4[]\",\"internalType\":\"bytes4[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeSenders\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedSenders_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"failed\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"setUp\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"targetArtifactSelectors\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedArtifactSelectors_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzArtifactSelector[]\",\"components\":[{\"name\":\"artifact\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"selectors\",\"type\":\"bytes4[]\",\"internalType\":\"bytes4[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetArtifacts\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedArtifacts_\",\"type\":\"string[]\",\"internalType\":\"string[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetContracts\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedContracts_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetInterfaces\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedInterfaces_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzInterface[]\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"artifacts\",\"type\":\"string[]\",\"internalType\":\"string[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetSelectors\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedSelectors_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzSelector[]\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"selectors\",\"type\":\"bytes4[]\",\"internalType\":\"bytes4[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetSenders\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedSenders_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"testDeposit\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositAndRevertZRC20AndCallZContract\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositAndRevertZRC20AndCallZContractFailsITargetIsFungibleModule\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositAndRevertZRC20AndCallZContractFailsITargetIsGateway\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositAndRevertZRC20AndCallZContractFailsIfAmountIsZero\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositAndRevertZRC20AndCallZContractFailsIfSenderIsNotFungibleModule\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositAndRevertZRC20AndCallZContractFailsIfTargetIsZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositAndRevertZRC20AndCallZContractFailsIfZrc20IsZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositFailsIfAmountIs0\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositFailsIfSenderNotFungibleModule\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositFailsIfTargetIsFungibleModule\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositFailsIfTargetIsGateway\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositFailsIfTargetIsZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositFailsIfZrc20IsZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositTogglePause\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositZETAAndCallZContract\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositZETAAndCallZContractFailsIfSenderIsNotFungibleModule\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositZETAAndCallZContractFailsIfTargetIsAmountIsZero\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositZETAAndCallZContractFailsIfTargetIsFungibleModule\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositZETAAndCallZContractFailsIfTargetIsGateway\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositZETAAndCallZContractFailsIfTargetIsZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositZRC20AndCallZContract\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositZRC20AndCallZContractFailsIfAmountIsZero\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositZRC20AndCallZContractFailsIfSenderIsNotFungibleModule\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositZRC20AndCallZContractFailsIfTargetIsZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositZRC20AndCallZContractFailsIfZrc20IsZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositZRC20AndCallZContractIfTargetIsFungibleModule\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositZRC20AndCallZContractIfTargetIsGateway\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testExecuteFailsIfAmountIsZero\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testExecuteFailsIfTargetIsZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testExecuteFailsIfZrc20IsZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testExecuteRevertZContract\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testExecuteRevertZContractFailsIfAmountIsZero\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testExecuteRevertZContractFailsIfTargetIsZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testExecuteRevertZContractFailsIfZrc20IsZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testExecuteRevertZContractIfSenderIsNotFungibleModule\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testExecuteZContract\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testExecuteZContractFailsIfSenderIsNotFungibleModule\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"event\",\"name\":\"Call\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"chainId\",\"type\":\"uint256\",\"indexed\":true,\"internalType\":\"uint256\"},{\"name\":\"receiver\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"message\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ContextData\",\"inputs\":[{\"name\":\"origin\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"chainID\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"msgSender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"message\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ContextDataRevert\",\"inputs\":[{\"name\":\"origin\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"chainID\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"msgSender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"message\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Withdrawal\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"chainId\",\"type\":\"uint256\",\"indexed\":true,\"internalType\":\"uint256\"},{\"name\":\"receiver\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"zrc20\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"gasfee\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"protocolFlatFee\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"message\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log\",\"inputs\":[{\"name\":\"\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_address\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_array\",\"inputs\":[{\"name\":\"val\",\"type\":\"uint256[]\",\"indexed\":false,\"internalType\":\"uint256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_array\",\"inputs\":[{\"name\":\"val\",\"type\":\"int256[]\",\"indexed\":false,\"internalType\":\"int256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_array\",\"inputs\":[{\"name\":\"val\",\"type\":\"address[]\",\"indexed\":false,\"internalType\":\"address[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_bytes\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_bytes32\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_int\",\"inputs\":[{\"name\":\"\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_address\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_array\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"uint256[]\",\"indexed\":false,\"internalType\":\"uint256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_array\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"int256[]\",\"indexed\":false,\"internalType\":\"int256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_array\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"address[]\",\"indexed\":false,\"internalType\":\"address[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_bytes\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_bytes32\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_decimal_int\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"},{\"name\":\"decimals\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_decimal_uint\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"decimals\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_int\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_string\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_uint\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_string\",\"inputs\":[{\"name\":\"\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_uint\",\"inputs\":[{\"name\":\"\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"logs\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"AccessControlUnauthorizedAccount\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"neededRole\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"type\":\"error\",\"name\":\"CallerIsNotFungibleModule\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"EnforcedPause\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"FailedZetaSent\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"GasFeeTransferFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientZRC20Amount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientZetaAmount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidTarget\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OnlyWZETAOrFungible\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"WithdrawalFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZRC20BurnFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZRC20DepositFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZRC20TransferFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZeroAddress\",\"inputs\":[]}]", - Bin: "0x6080604052600c8054600160ff199182168117909255601f80549091169091179055348015602c57600080fd5b5061fe508061003c6000396000f3fe608060405234801561001057600080fd5b506004361061034c5760003560e01c80637f924c4e116101bd578063c2725318116100f9578063e63ab1e9116100a2578063f5a357331161007c578063f5a357331461055a578063fa7626d414610562578063fc6734eb1461056f578063fc79171b1461057757600080fd5b8063e63ab1e914610515578063eba3c49c1461054a578063f06c08941461055257600080fd5b8063df690b9a116100d3578063df690b9a146104fd578063df881f6c14610505578063e20c9f711461050d57600080fd5b8063c2725318146104e5578063c3248272146104ed578063cced12c7146104f557600080fd5b8063996b767511610166578063aed71d9711610140578063aed71d97146104b5578063b0464fdc146104bd578063b5508aa9146104c5578063ba414fa6146104cd57600080fd5b8063996b76751461049d5780639b3272bf146104a55780639b86d40f146104ad57600080fd5b8063916a17c611610197578063916a17c61461047857806394d78f7b1461048d57806396d9d8761461049557600080fd5b80637f924c4e1461045357806382978ffc1461045b57806385226c811461046357600080fd5b806331d099561161028c578063461fc5af11610235578063612aa5491161020f578063612aa5491461042657806366d9a9a01461042e578063720b9aa9146104435780637243a2fb1461044b57600080fd5b8063461fc5af1461040e57806355ea935114610416578063597cfeb01461041e57600080fd5b80633e5e3c23116102665780633e5e3c23146103f65780633f7286f4146103fe57806344b2a40b1461040657600080fd5b806331d09956146103de5780633a25c460146103e65780633ab5b199146103ee57600080fd5b8063198d5ca4116102f95780631fe68797116102d35780631fe68797146103b1578063254ea181146103b95780632ade3880146103c157806330548465146103d657600080fd5b8063198d5ca4146103835780631c785a141461038b5780631ed7831c1461039357600080fd5b8063104b35221161032a578063104b35221461036b57806314b7a6da14610373578063191c9a9e1461037b57600080fd5b806309f080da1461035157806309f92c1f1461035b5780630a9254e414610363575b600080fd5b61035961057f565b005b610359610773565b610359610926565b610359611393565b610359611585565b6103596116eb565b61035961189c565b610359611b56565b61039b61249f565b6040516103a8919061a8fc565b60405180910390f35b610359612501565b610359612a30565b6103c9612be5565b6040516103a8919061a998565b610359612d27565b610359612edc565b61035961309b565b610359613256565b61039b613407565b61039b613467565b6103596134c7565b61035961364f565b61035961380d565b6103596139c0565b610359613d96565b610436613f49565b6040516103a8919061aafe565b6103596140cb565b61035961433e565b6103596144f1565b610359614543565b61046b614693565b6040516103a8919061ab9c565b610480614763565b6040516103a8919061ac13565b61035961485e565b610359614a0d565b610359614b60565b610359614cb4565b610359614e65565b610359615011565b61048061531d565b61046b615418565b6104d56154e8565b60405190151581526020016103a8565b6103596155bc565b610359615775565b61035961592e565b610359615b19565b610359615cd7565b61039b615e8c565b61053c7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b6040519081526020016103a8565b610359615eec565b6103596160aa565b61035961625f565b601f546104d59060ff1681565b610359616416565b6103596165c7565b60006040516020016105909061acaa565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401526001838301528151630618f58760e51b81527f2b2add3d0000000000000000000000000000000000000000000000000000000060048201529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163c31eb0e091602480830192600092919082900301818387803b15801561065a57600080fd5b505af115801561066e573d6000803e3d6000fd5b505060255460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b1580156106cb57600080fd5b505af11580156106df573d6000803e3d6000fd5b50506020546021546024546040517f5af659670000000000000000000000000000000000000000000000000000000081526001600160a01b039384169550635af65967945061073d938793811692600192911690899060040161ad25565b600060405180830381600087803b15801561075757600080fd5b505af115801561076b573d6000803e3d6000fd5b505050505050565b60006040516020016107849061acaa565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401819052600184840152825163ca669fa760e01b815260048101919091529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163ca669fa791602480830192600092919082900301818387803b15801561083257600080fd5b505af1158015610846573d6000803e3d6000fd5b5050604051630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b1580156108b657600080fd5b505af11580156108ca573d6000803e3d6000fd5b50506020546024546040517fbcf7f32b0000000000000000000000000000000000000000000000000000000081526001600160a01b03928316945063bcf7f32b935061073d92869260009260019290911690899060040161ad25565b602580547fffffffffffffffffffffffff000000000000000000000000000000000000000090811630179091556026805490911661123417905560405161096c9061a80f565b604051809103906000f080158015610988573d6000803e3d6000fd5b50602280547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03928316908117909155604080518082018252600f81527f476174657761795a45564d2e736f6c000000000000000000000000000000000060208201526025549151602481019390935292166044820152610a6c919060640160408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f485cc955000000000000000000000000000000000000000000000000000000001790526166fe565b601f80547fffffffffffffffffffffff0000000000000000000000000000000000000000ff166101006001600160a01b039384168102919091179182905560208054919092049092167fffffffffffffffffffffffff000000000000000000000000000000000000000090921682178155604080517f3ce4a5bc0000000000000000000000000000000000000000000000000000000081529051633ce4a5bc926004808401939192918290030181865afa158015610b2e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b52919061ad7a565b602780547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055604051610b969061a81c565b604051809103906000f080158015610bb2573d6000803e3d6000fd5b50602480547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039283161781556027546040517f06447d5600000000000000000000000000000000000000000000000000000000815292166004830152737109709ecfa91a80626ff3989d68f67f5b1dd12d916306447d569101600060405180830381600087803b158015610c4e57600080fd5b505af1158015610c62573d6000803e3d6000fd5b505050506000806000604051610c779061a829565b6001600160a01b03938416815291831660208301529091166040820152606001604051809103906000f080158015610cb3573d6000803e3d6000fd5b50602380547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03928316908117909155602054604051601293600193849360009391921690610d099061a836565b610d189695949392919061ada3565b604051809103906000f080158015610d34573d6000803e3d6000fd5b50602180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039283169081179091556023546040517fee2815ba0000000000000000000000000000000000000000000000000000000081526001600482015260248101929092529091169063ee2815ba90604401600060405180830381600087803b158015610dcb57600080fd5b505af1158015610ddf573d6000803e3d6000fd5b50506023546040517fa7cb050700000000000000000000000000000000000000000000000000000000815260016004820181905260248201526001600160a01b03909116925063a7cb05079150604401600060405180830381600087803b158015610e4957600080fd5b505af1158015610e5d573d6000803e3d6000fd5b50506027546040517fc88a5e6d0000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152633b9aca006024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c88a5e6d9150604401600060405180830381600087803b158015610edd57600080fd5b505af1158015610ef1573d6000803e3d6000fd5b50505050602260009054906101000a90046001600160a01b03166001600160a01b031663d0e30db0600a6040518263ffffffff1660e01b81526004016000604051808303818588803b158015610f4657600080fd5b505af1158015610f5a573d6000803e3d6000fd5b50506022546020546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152600a60248201529116935063095ea7b3925060440190506020604051808303816000875af1158015610fce573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ff2919061ae98565b506021546025546040517f47e7ef240000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620186a060248201529116906347e7ef24906044016020604051808303816000875af1158015611063573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611087919061ae98565b507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b03166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156110e657600080fd5b505af11580156110fa573d6000803e3d6000fd5b50506025546040517f06447d560000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506306447d569150602401600060405180830381600087803b15801561117057600080fd5b505af1158015611184573d6000803e3d6000fd5b50506021546020546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620186a060248201529116925063095ea7b391506044016020604051808303816000875af11580156111f8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061121c919061ae98565b50602260009054906101000a90046001600160a01b03166001600160a01b031663d0e30db0600a6040518263ffffffff1660e01b81526004016000604051808303818588803b15801561126e57600080fd5b505af1158015611282573d6000803e3d6000fd5b50506022546020546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152600a60248201529116935063095ea7b3925060440190506020604051808303816000875af11580156112f6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061131a919061ae98565b507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b03166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561137957600080fd5b505af115801561138d573d6000803e3d6000fd5b50505050565b6040516001906000906113a89060200161acaa565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401526001838301528151630618f58760e51b81527f82d5d76a0000000000000000000000000000000000000000000000000000000060048201529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163c31eb0e091602480830192600092919082900301818387803b15801561147257600080fd5b505af1158015611486573d6000803e3d6000fd5b505060275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b1580156114e357600080fd5b505af11580156114f7573d6000803e3d6000fd5b50506020546027546040517f21501a950000000000000000000000000000000000000000000000000000000081526001600160a01b0392831694506321501a95935061154e9286928992911690889060040161aeba565b600060405180830381600087803b15801561156857600080fd5b505af115801561157c573d6000803e3d6000fd5b50505050505050565b60275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156115de57600080fd5b505af11580156115f2573d6000803e3d6000fd5b5050604051630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b15801561166257600080fd5b505af1158015611676573d6000803e3d6000fd5b50506020546021546040517ff45346dc0000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260016024820152600060448201529116925063f45346dc91506064015b600060405180830381600087803b15801561137957600080fd5b60006040516020016116fc9061acaa565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401819052600184840152825163ca669fa760e01b815260048101919091529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163ca669fa791602480830192600092919082900301818387803b1580156117aa57600080fd5b505af11580156117be573d6000803e3d6000fd5b5050604051630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b15801561182e57600080fd5b505af1158015611842573d6000803e3d6000fd5b50506020546021546040517f309f50040000000000000000000000000000000000000000000000000000000081526001600160a01b03928316945063309f5004935061073d9286921690600190600090899060040161ad25565b6021546026546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260019260009216906370a0823190602401602060405180830381865afa158015611906573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061192a919061aef4565b905061193760008261671d565b60255460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561199057600080fd5b505af11580156119a4573d6000803e3d6000fd5b5050604051630618f58760e51b81527f2b2add3d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b158015611a1457600080fd5b505af1158015611a28573d6000803e3d6000fd5b50506020546021546026546040517ff45346dc0000000000000000000000000000000000000000000000000000000081526001600160a01b0392831660048201526024810188905290821660448201529116925063f45346dc9150606401600060405180830381600087803b158015611aa057600080fd5b505af1158015611ab4573d6000803e3d6000fd5b50506021546026546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260009450911691506370a0823190602401602060405180830381865afa158015611b20573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b44919061aef4565b9050611b5160008261671d565b505050565b60275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015611baf57600080fd5b505af1158015611bc3573d6000803e3d6000fd5b5050602754604080516001600160a01b0390921660248301527f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a60448084019190915281518084039091018152606490920181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb39250611cae919060040161af0d565b600060405180830381600087803b158015611cc857600080fd5b505af1158015611cdc573d6000803e3d6000fd5b50505050602060009054906101000a90046001600160a01b03166001600160a01b0316638456cb596040518163ffffffff1660e01b8152600401600060405180830381600087803b158015611d3057600080fd5b505af1158015611d44573d6000803e3d6000fd5b505060275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b158015611da157600080fd5b505af1158015611db5573d6000803e3d6000fd5b5050602754604080516001600160a01b0390921660248301527f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a60448084019190915281518084039091018152606490920181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb39250611ea0919060040161af0d565b600060405180830381600087803b158015611eba57600080fd5b505af1158015611ece573d6000803e3d6000fd5b50505050602060009054906101000a90046001600160a01b03166001600160a01b0316633f4ba83a6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015611f2257600080fd5b505af1158015611f36573d6000803e3d6000fd5b505060255460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b158015611f9357600080fd5b505af1158015611fa7573d6000803e3d6000fd5b50505050602060009054906101000a90046001600160a01b03166001600160a01b0316638456cb596040518163ffffffff1660e01b8152600401600060405180830381600087803b158015611ffb57600080fd5b505af115801561200f573d6000803e3d6000fd5b5050604051630618f58760e51b81527fd93c066500000000000000000000000000000000000000000000000000000000600482015260019250737109709ecfa91a80626ff3989d68f67f5b1dd12d915063c31eb0e090602401600060405180830381600087803b15801561208257600080fd5b505af1158015612096573d6000803e3d6000fd5b505060275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b1580156120f357600080fd5b505af1158015612107573d6000803e3d6000fd5b50506020546021546026546040517ff45346dc0000000000000000000000000000000000000000000000000000000081526001600160a01b0392831660048201526024810187905290821660448201529116925063f45346dc9150606401600060405180830381600087803b15801561217f57600080fd5b505af1158015612193573d6000803e3d6000fd5b505060255460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b1580156121f057600080fd5b505af1158015612204573d6000803e3d6000fd5b50505050602060009054906101000a90046001600160a01b03166001600160a01b0316633f4ba83a6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561225857600080fd5b505af115801561226c573d6000803e3d6000fd5b50506021546026546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260009450911691506370a08231906024015b602060405180830381865afa1580156122d9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122fd919061aef4565b905061230a60008261671d565b60275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561236357600080fd5b505af1158015612377573d6000803e3d6000fd5b50506020546021546026546040517ff45346dc0000000000000000000000000000000000000000000000000000000081526001600160a01b0392831660048201526024810188905290821660448201529116925063f45346dc9150606401600060405180830381600087803b1580156123ef57600080fd5b505af1158015612403573d6000803e3d6000fd5b50506021546026546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260009450911691506370a0823190602401602060405180830381865afa15801561246f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612493919061aef4565b9050611b51838261671d565b606060168054806020026020016040519081016040528092919081815260200182805480156124f757602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116124d9575b5050505050905090565b6022546027546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260019260009216906370a0823190602401602060405180830381865afa15801561256b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061258f919061aef4565b6022546020546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201529293506000929116906370a0823190602401602060405180830381865afa1580156125fa573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061261e919061aef4565b6024546040519192506001600160a01b031631906000906126419060200161acaa565b60408051601f19818403018152606080840190925260205490911b6bffffffffffffffffffffffff191660808301529150600090806094810160408051808303601f190181529181529082526027546001600160a01b03908116602084015260019282018390526024805492517f81bad6f300000000000000000000000000000000000000000000000000000000815260048101859052908101849052604481018490526064810193909352166084820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b15801561272f57600080fd5b505af1158015612743573d6000803e3d6000fd5b5050602080546040517fcdc8ee677dc5ebe680fb18cebda5e26ba5ea1f0ba504a47e2a9a2ecb476dc98e945061279e93506001600160a01b03909116910160609190911b6bffffffffffffffffffffffff1916815260140190565b60408051601f19818403018152908290526027546020546127ce936001600160a01b03928316928c92169061af20565b60405180910390a160275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561282f57600080fd5b505af1158015612843573d6000803e3d6000fd5b50506020546024546040517f21501a950000000000000000000000000000000000000000000000000000000081526001600160a01b0392831694506321501a95935061289a9286928c92911690889060040161aeba565b600060405180830381600087803b1580156128b457600080fd5b505af11580156128c8573d6000803e3d6000fd5b50506022546027546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260009450911691506370a0823190602401602060405180830381865afa158015612934573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612958919061aef4565b905061296d612967888861afc2565b8261671d565b6022546020546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260009291909116906370a0823190602401602060405180830381865afa1580156129d7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129fb919061aef4565b9050612a07868261671d565b612a26612a14898761afd5565b6024546001600160a01b03163161671d565b5050505050505050565b6000604051602001612a419061acaa565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401819052600184840152825163ca669fa760e01b815260048101919091529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163ca669fa791602480830192600092919082900301818387803b158015612aef57600080fd5b505af1158015612b03573d6000803e3d6000fd5b5050604051630618f58760e51b81527f5d67094f000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b158015612b7357600080fd5b505af1158015612b87573d6000803e3d6000fd5b50506020546021546024546040517fc39aca370000000000000000000000000000000000000000000000000000000081526001600160a01b03938416955063c39aca37945061073d938793811692600092911690899060040161ad25565b6060601e805480602002602001604051908101604052809291908181526020016000905b82821015612d1e57600084815260208082206040805180820182526002870290920180546001600160a01b03168352600181018054835181870281018701909452808452939591948681019491929084015b82821015612d07578382906000526020600020018054612c7a9061afe8565b80601f0160208091040260200160405190810160405280929190818152602001828054612ca69061afe8565b8015612cf35780601f10612cc857610100808354040283529160200191612cf3565b820191906000526020600020905b815481529060010190602001808311612cd657829003601f168201915b505050505081526020019060010190612c5b565b505050508152505081526020019060010190612c09565b50505050905090565b6000604051602001612d389061acaa565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401819052600184840152825163ca669fa760e01b815260048101919091529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163ca669fa791602480830192600092919082900301818387803b158015612de657600080fd5b505af1158015612dfa573d6000803e3d6000fd5b5050604051630618f58760e51b81527f5d67094f000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b158015612e6a57600080fd5b505af1158015612e7e573d6000803e3d6000fd5b50506020546021546024546040517f309f50040000000000000000000000000000000000000000000000000000000081526001600160a01b03938416955063309f5004945061073d938793811692600092911690899060040161ad25565b6000604051602001612eed9061acaa565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401526001838301528151630618f58760e51b81527f2b2add3d0000000000000000000000000000000000000000000000000000000060048201529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163c31eb0e091602480830192600092919082900301818387803b158015612fb757600080fd5b505af1158015612fcb573d6000803e3d6000fd5b505060255460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa791506024015b600060405180830381600087803b15801561302957600080fd5b505af115801561303d573d6000803e3d6000fd5b50506020546021546024546040517f309f50040000000000000000000000000000000000000000000000000000000081526001600160a01b03938416955063309f5004945061073d938793811692600192911690899060040161ad25565b6040516001906000906130b09060200161acaa565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401526001838301528151630618f58760e51b81527f2b2add3d0000000000000000000000000000000000000000000000000000000060048201529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163c31eb0e091602480830192600092919082900301818387803b15801561317a57600080fd5b505af115801561318e573d6000803e3d6000fd5b505060255460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b1580156131eb57600080fd5b505af11580156131ff573d6000803e3d6000fd5b50506020546024546040517f21501a950000000000000000000000000000000000000000000000000000000081526001600160a01b0392831694506321501a95935061154e9286928992911690889060040161aeba565b60006040516020016132679061acaa565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401819052600184840152825163ca669fa760e01b815260048101919091529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163ca669fa791602480830192600092919082900301818387803b15801561331557600080fd5b505af1158015613329573d6000803e3d6000fd5b5050604051630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b15801561339957600080fd5b505af11580156133ad573d6000803e3d6000fd5b50506020546021546040517fbcf7f32b0000000000000000000000000000000000000000000000000000000081526001600160a01b03928316945063bcf7f32b935061073d9286921690600190600090899060040161ad25565b606060188054806020026020016040519081016040528092919081815260200182805480156124f7576020028201919060005260206000209081546001600160a01b031681526001909101906020018083116124d9575050505050905090565b606060178054806020026020016040519081016040528092919081815260200182805480156124f7576020028201919060005260206000209081546001600160a01b031681526001909101906020018083116124d9575050505050905090565b60275460405163ca669fa760e01b81526001600160a01b039091166004820152600190737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561352357600080fd5b505af1158015613537573d6000803e3d6000fd5b5050604051630618f58760e51b81527f82d5d76a000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b1580156135a757600080fd5b505af11580156135bb573d6000803e3d6000fd5b50506020546021546027546040517ff45346dc0000000000000000000000000000000000000000000000000000000081526001600160a01b0392831660048201526024810187905290821660448201529116925063f45346dc91506064015b600060405180830381600087803b15801561363457600080fd5b505af1158015613648573d6000803e3d6000fd5b5050505050565b60006040516020016136609061acaa565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401526001838301528151630618f58760e51b81527f2b2add3d0000000000000000000000000000000000000000000000000000000060048201529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163c31eb0e091602480830192600092919082900301818387803b15801561372a57600080fd5b505af115801561373e573d6000803e3d6000fd5b505060255460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b15801561379b57600080fd5b505af11580156137af573d6000803e3d6000fd5b50506020546021546024546040517fc39aca370000000000000000000000000000000000000000000000000000000081526001600160a01b03938416955063c39aca37945061073d938793811692600192911690899060040161ad25565b600060405160200161381e9061acaa565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401819052600184840152825163ca669fa760e01b815260048101919091529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163ca669fa791602480830192600092919082900301818387803b1580156138cc57600080fd5b505af11580156138e0573d6000803e3d6000fd5b5050604051630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b15801561395057600080fd5b505af1158015613964573d6000803e3d6000fd5b50506020546024546040517f5af659670000000000000000000000000000000000000000000000000000000081526001600160a01b039283169450635af65967935061073d92869260009260019290911690899060040161ad25565b602154602480546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260009391909116916370a082319101602060405180830381865afa158015613a29573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a4d919061aef4565b9050613a5a60008261671d565b6000604051602001613a6b9061acaa565b60408051601f19818403018152606080840190925260205490911b6bffffffffffffffffffffffff191660808301529150600090806094810160408051808303601f190181529181529082526027546001600160a01b03908116602084015260019282018390526024805492517f81bad6f300000000000000000000000000000000000000000000000000000000815260048101859052908101849052604481018490526064810193909352166084820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b158015613b5957600080fd5b505af1158015613b6d573d6000803e3d6000fd5b5050602080546040517fcdc8ee677dc5ebe680fb18cebda5e26ba5ea1f0ba504a47e2a9a2ecb476dc98e9450613bc893506001600160a01b03909116910160609190911b6bffffffffffffffffffffffff1916815260140190565b60408051601f1981840301815290829052602754602054613bf9936001600160a01b0392831692600192169061af20565b60405180910390a160275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015613c5a57600080fd5b505af1158015613c6e573d6000803e3d6000fd5b50506020546021546024546040517fc39aca370000000000000000000000000000000000000000000000000000000081526001600160a01b03938416955063c39aca379450613ccc938793811692600192911690899060040161ad25565b600060405180830381600087803b158015613ce657600080fd5b505af1158015613cfa573d6000803e3d6000fd5b5050602154602480546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260009550921692506370a082319101602060405180830381865afa158015613d65573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613d89919061aef4565b905061138d60018261671d565b6000604051602001613da79061acaa565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401819052600184840152825163ca669fa760e01b815260048101919091529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163ca669fa791602480830192600092919082900301818387803b158015613e5557600080fd5b505af1158015613e69573d6000803e3d6000fd5b5050604051630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b158015613ed957600080fd5b505af1158015613eed573d6000803e3d6000fd5b50506020546024546040517fc39aca370000000000000000000000000000000000000000000000000000000081526001600160a01b03928316945063c39aca37935061073d92869260009260019290911690899060040161ad25565b6060601b805480602002602001604051908101604052809291908181526020016000905b82821015612d1e5783829060005260206000209060020201604051806040016040529081600082018054613fa09061afe8565b80601f0160208091040260200160405190810160405280929190818152602001828054613fcc9061afe8565b80156140195780601f10613fee57610100808354040283529160200191614019565b820191906000526020600020905b815481529060010190602001808311613ffc57829003601f168201915b50505050508152602001600182018054806020026020016040519081016040528092919081815260200182805480156140b357602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190600401906020826003010492830192600103820291508084116140605790505b50505050508152505081526020019060010190613f6d565b60006040516020016140dc9061acaa565b60408051601f19818403018152606080840190925260205490911b6bffffffffffffffffffffffff191660808301529150600090806094810160408051808303601f190181529181529082526027546001600160a01b03908116602084015260019282018390526024805492517f81bad6f300000000000000000000000000000000000000000000000000000000815260048101859052908101849052604481018490526064810193909352166084820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b1580156141ca57600080fd5b505af11580156141de573d6000803e3d6000fd5b5050602080546040517fcdc8ee677dc5ebe680fb18cebda5e26ba5ea1f0ba504a47e2a9a2ecb476dc98e945061423993506001600160a01b03909116910160609190911b6bffffffffffffffffffffffff1916815260140190565b60408051601f198184030181529082905260275460205461426a936001600160a01b0392831692600192169061af20565b60405180910390a160275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa7906024015b600060405180830381600087803b1580156142cc57600080fd5b505af11580156142e0573d6000803e3d6000fd5b50506020546021546024546040517fbcf7f32b0000000000000000000000000000000000000000000000000000000081526001600160a01b03938416955063bcf7f32b945061073d938793811692600192911690899060040161ad25565b600060405160200161434f9061acaa565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401819052600184840152825163ca669fa760e01b815260048101919091529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163ca669fa791602480830192600092919082900301818387803b1580156143fd57600080fd5b505af1158015614411573d6000803e3d6000fd5b5050604051630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b15801561448157600080fd5b505af1158015614495573d6000803e3d6000fd5b50506020546024546040517f309f50040000000000000000000000000000000000000000000000000000000081526001600160a01b03928316945063309f5004935061073d92869260009260019290911690899060040161ad25565b6021546026546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260019260009216906370a08231906024016122bc565b60275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561459c57600080fd5b505af11580156145b0573d6000803e3d6000fd5b5050604051630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b15801561462057600080fd5b505af1158015614634573d6000803e3d6000fd5b50506020546026546040517ff45346dc00000000000000000000000000000000000000000000000000000000815260006004820152600160248201526001600160a01b0391821660448201529116925063f45346dc91506064016116d1565b6060601a805480602002602001604051908101604052809291908181526020016000905b82821015612d1e5783829060005260206000200180546146d69061afe8565b80601f01602080910402602001604051908101604052809291908181526020018280546147029061afe8565b801561474f5780601f106147245761010080835404028352916020019161474f565b820191906000526020600020905b81548152906001019060200180831161473257829003601f168201915b5050505050815260200190600101906146b7565b6060601d805480602002602001604051908101604052809291908181526020016000905b82821015612d1e5760008481526020908190206040805180820182526002860290920180546001600160a01b0316835260018101805483518187028101870190945280845293949193858301939283018282801561484657602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190600401906020826003010492830192600103820291508084116147f35790505b50505050508152505081526020019060010190614787565b600060405160200161486f9061acaa565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401819052600184840152825163ca669fa760e01b815260048101919091529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163ca669fa791602480830192600092919082900301818387803b15801561491d57600080fd5b505af1158015614931573d6000803e3d6000fd5b5050604051630618f58760e51b81527f19c08f49000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b1580156149a157600080fd5b505af11580156149b5573d6000803e3d6000fd5b50506020546021546040517f21501a950000000000000000000000000000000000000000000000000000000081526001600160a01b0392831694506321501a95935061073d928692600092911690889060040161aeba565b60275460405163ca669fa760e01b81526001600160a01b039091166004820152600190737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015614a6957600080fd5b505af1158015614a7d573d6000803e3d6000fd5b5050604051630618f58760e51b81527f82d5d76a000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b158015614aed57600080fd5b505af1158015614b01573d6000803e3d6000fd5b50506020546021546040517ff45346dc0000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260248101869052911660448201819052925063f45346dc915060640161361a565b60275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015614bb957600080fd5b505af1158015614bcd573d6000803e3d6000fd5b5050604051630618f58760e51b81527f5d67094f000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b158015614c3d57600080fd5b505af1158015614c51573d6000803e3d6000fd5b50506020546021546026546040517ff45346dc0000000000000000000000000000000000000000000000000000000081526001600160a01b0392831660048201526000602482015290821660448201529116925063f45346dc91506064016116d1565b6000604051602001614cc59061acaa565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401819052600184840152825163ca669fa760e01b815260048101919091529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163ca669fa791602480830192600092919082900301818387803b158015614d7357600080fd5b505af1158015614d87573d6000803e3d6000fd5b5050604051630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b158015614df757600080fd5b505af1158015614e0b573d6000803e3d6000fd5b50506020546021546040517fc39aca370000000000000000000000000000000000000000000000000000000081526001600160a01b03928316945063c39aca37935061073d9286921690600190600090899060040161ad25565b6000604051602001614e769061acaa565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401819052600184840152825163ca669fa760e01b815260048101919091529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163ca669fa791602480830192600092919082900301818387803b158015614f2457600080fd5b505af1158015614f38573d6000803e3d6000fd5b5050604051630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b158015614fa857600080fd5b505af1158015614fbc573d6000803e3d6000fd5b50506020546040517f21501a950000000000000000000000000000000000000000000000000000000081526001600160a01b0390911692506321501a95915061073d908490600190600090889060040161aeba565b602154602480546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260009391909116916370a082319101602060405180830381865afa15801561507a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061509e919061aef4565b90506150ab60008261671d565b60006040516020016150bc9061acaa565b60408051601f19818403018152606080840190925260205490911b6bffffffffffffffffffffffff191660808301529150600090806094810160408051808303601f190181529181529082526027546001600160a01b03908116602084015260019282018390526024805492517f81bad6f300000000000000000000000000000000000000000000000000000000815260048101859052908101849052604481018490526064810193909352166084820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b1580156151aa57600080fd5b505af11580156151be573d6000803e3d6000fd5b5050602080546040517ffdc887992b033668833927e252058e468fac0b6bd196d520f09c61b740e99948945061521993506001600160a01b03909116910160609190911b6bffffffffffffffffffffffff1916815260140190565b60408051601f198184030181529082905260275460205461524a936001600160a01b0392831692600192169061af20565b60405180910390a160275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156152ab57600080fd5b505af11580156152bf573d6000803e3d6000fd5b50506020546021546024546040517f5af659670000000000000000000000000000000000000000000000000000000081526001600160a01b039384169550635af659679450613ccc938793811692600192911690899060040161ad25565b6060601c805480602002602001604051908101604052809291908181526020016000905b82821015612d1e5760008481526020908190206040805180820182526002860290920180546001600160a01b0316835260018101805483518187028101870190945280845293949193858301939283018282801561540057602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190600401906020826003010492830192600103820291508084116153ad5790505b50505050508152505081526020019060010190615341565b60606019805480602002602001604051908101604052809291908181526020016000905b82821015612d1e57838290600052602060002001805461545b9061afe8565b80601f01602080910402602001604051908101604052809291908181526020018280546154879061afe8565b80156154d45780601f106154a9576101008083540402835291602001916154d4565b820191906000526020600020905b8154815290600101906020018083116154b757829003601f168201915b50505050508152602001906001019061543c565b60085460009060ff1615615500575060085460ff1690565b6040517f667f9d70000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d600482018190527f6661696c65640000000000000000000000000000000000000000000000000000602483015260009163667f9d7090604401602060405180830381865afa158015615591573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906155b5919061aef4565b1415905090565b60006040516020016155cd9061acaa565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401526001838301528151630618f58760e51b81527f82d5d76a0000000000000000000000000000000000000000000000000000000060048201529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163c31eb0e091602480830192600092919082900301818387803b15801561569757600080fd5b505af11580156156ab573d6000803e3d6000fd5b505060275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b15801561570857600080fd5b505af115801561571c573d6000803e3d6000fd5b50506020546021546040517fc39aca370000000000000000000000000000000000000000000000000000000081526001600160a01b03928316945063c39aca37935061073d92869216906001908690899060040161ad25565b60006040516020016157869061acaa565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401526001838301528151630618f58760e51b81527f82d5d76a0000000000000000000000000000000000000000000000000000000060048201529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163c31eb0e091602480830192600092919082900301818387803b15801561585057600080fd5b505af1158015615864573d6000803e3d6000fd5b505060275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b1580156158c157600080fd5b505af11580156158d5573d6000803e3d6000fd5b50506020546021546040517f5af659670000000000000000000000000000000000000000000000000000000081526001600160a01b039283169450635af65967935061073d92869216906001908690899060040161ad25565b600060405160200161593f9061acaa565b60408051601f19818403018152606080840190925260205490911b6bffffffffffffffffffffffff191660808301529150600090806094810160408051808303601f190181529181529082526027546001600160a01b03908116602084015260019282018390526024805492517f81bad6f300000000000000000000000000000000000000000000000000000000815260048101859052908101849052604481018490526064810193909352166084820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b158015615a2d57600080fd5b505af1158015615a41573d6000803e3d6000fd5b5050602080546040517ffdc887992b033668833927e252058e468fac0b6bd196d520f09c61b740e999489450615a9c93506001600160a01b03909116910160609190911b6bffffffffffffffffffffffff1916815260140190565b60408051601f1981840301815290829052602754602054615acd936001600160a01b0392831692600192169061af20565b60405180910390a160275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa79060240161300f565b6000604051602001615b2a9061acaa565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401526001838301528151630618f58760e51b81527f82d5d76a0000000000000000000000000000000000000000000000000000000060048201529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163c31eb0e091602480830192600092919082900301818387803b158015615bf457600080fd5b505af1158015615c08573d6000803e3d6000fd5b505060275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b158015615c6557600080fd5b505af1158015615c79573d6000803e3d6000fd5b50506020546021546027546040517fc39aca370000000000000000000000000000000000000000000000000000000081526001600160a01b03938416955063c39aca37945061073d938793811692600192911690899060040161ad25565b6000604051602001615ce89061acaa565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401819052600184840152825163ca669fa760e01b815260048101919091529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163ca669fa791602480830192600092919082900301818387803b158015615d9657600080fd5b505af1158015615daa573d6000803e3d6000fd5b5050604051630618f58760e51b81527f5d67094f000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b158015615e1a57600080fd5b505af1158015615e2e573d6000803e3d6000fd5b50506020546021546024546040517fbcf7f32b0000000000000000000000000000000000000000000000000000000081526001600160a01b03938416955063bcf7f32b945061073d938793811692600092911690899060040161ad25565b606060158054806020026020016040519081016040528092919081815260200182805480156124f7576020028201919060005260206000209081546001600160a01b031681526001909101906020018083116124d9575050505050905090565b6000604051602001615efd9061acaa565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401526001838301528151630618f58760e51b81527f82d5d76a0000000000000000000000000000000000000000000000000000000060048201529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163c31eb0e091602480830192600092919082900301818387803b158015615fc757600080fd5b505af1158015615fdb573d6000803e3d6000fd5b505060275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b15801561603857600080fd5b505af115801561604c573d6000803e3d6000fd5b50506020546021546027546040517f5af659670000000000000000000000000000000000000000000000000000000081526001600160a01b039384169550635af65967945061073d938793811692600192911690899060040161ad25565b60006040516020016160bb9061acaa565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401819052600184840152825163ca669fa760e01b815260048101919091529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163ca669fa791602480830192600092919082900301818387803b15801561616957600080fd5b505af115801561617d573d6000803e3d6000fd5b5050604051630618f58760e51b81527f5d67094f000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b1580156161ed57600080fd5b505af1158015616201573d6000803e3d6000fd5b50506020546021546024546040517f5af659670000000000000000000000000000000000000000000000000000000081526001600160a01b039384169550635af65967945061073d938793811692600092911690899060040161ad25565b6040516001906000906162749060200161acaa565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401526001838301528151630618f58760e51b81527f82d5d76a0000000000000000000000000000000000000000000000000000000060048201529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163c31eb0e091602480830192600092919082900301818387803b15801561633e57600080fd5b505af1158015616352573d6000803e3d6000fd5b505060275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b1580156163af57600080fd5b505af11580156163c3573d6000803e3d6000fd5b50506020546040517f21501a950000000000000000000000000000000000000000000000000000000081526001600160a01b0390911692506321501a95915061154e90849087908590889060040161aeba565b60006040516020016164279061acaa565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401819052600184840152825163ca669fa760e01b815260048101919091529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163ca669fa791602480830192600092919082900301818387803b1580156164d557600080fd5b505af11580156164e9573d6000803e3d6000fd5b5050604051630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b15801561655957600080fd5b505af115801561656d573d6000803e3d6000fd5b50506020546021546040517f5af659670000000000000000000000000000000000000000000000000000000081526001600160a01b039283169450635af65967935061073d9286921690600190600090899060040161ad25565b60006040516020016165d89061acaa565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401526001838301528151630618f58760e51b81527f2b2add3d0000000000000000000000000000000000000000000000000000000060048201529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163c31eb0e091602480830192600092919082900301818387803b1580156166a257600080fd5b505af11580156166b6573d6000803e3d6000fd5b505060255460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa791506024016142b2565b600061670861a843565b61671384848361679c565b9150505b92915050565b6040517f98296c540000000000000000000000000000000000000000000000000000000081526004810183905260248101829052737109709ecfa91a80626ff3989d68f67f5b1dd12d906398296c549060440160006040518083038186803b15801561678857600080fd5b505afa15801561076b573d6000803e3d6000fd5b6000806167a98584616817565b905061680c6040518060400160405280601d81526020017f4552433139363750726f78792e736f6c3a4552433139363750726f787900000081525082866040516020016167f792919061b035565b60405160208183030381529060405285616823565b9150505b9392505050565b60006168108383616851565b60c081015151600090156168475761684084848460c0015161686c565b9050616810565b6168408484616a12565b600061685d8383616afd565b61681083836020015184616823565b600080616877616b0d565b905060006168858683616be0565b9050600061689c8260600151836020015185617086565b905060006168ac83838989617298565b905060006168b982618115565b602081015181519192509060030b1561692c578982604001516040516020016168e392919061b057565b60408051601f19818403018152908290527f08c379a00000000000000000000000000000000000000000000000000000000082526169239160040161af0d565b60405180910390fd5b600061696f6040518060400160405280601581526020017f4465706c6f79656420746f20616464726573733a2000000000000000000000008152508360016182e4565b6040517fc6ce059d000000000000000000000000000000000000000000000000000000008152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c6ce059d906169c290849060040161af0d565b602060405180830381865afa1580156169df573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190616a03919061ad7a565b9b9a5050505050505050505050565b6040517f8d1cc9250000000000000000000000000000000000000000000000000000000081526000908190737109709ecfa91a80626ff3989d68f67f5b1dd12d90638d1cc92590616a6790879060040161af0d565b600060405180830381865afa158015616a84573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052616aac919081019061b1c0565b90506000616ada8285604051602001616ac692919061b1f5565b6040516020818303038152906040526184e4565b90506001600160a01b0381166167135784846040516020016168e392919061b224565b616b09828260006184f7565b5050565b604080518082018252600381527f6f75740000000000000000000000000000000000000000000000000000000000602082015290517fd145736c000000000000000000000000000000000000000000000000000000008152606091737109709ecfa91a80626ff3989d68f67f5b1dd12d91829063d145736c90616b9490849060040161b2cf565b600060405180830381865afa158015616bb1573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052616bd9919081019061b316565b9250505090565b616c126040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b6000737109709ecfa91a80626ff3989d68f67f5b1dd12d9050616c5d6040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b616c66856185fa565b60208201526000616c76866189df565b90506000836001600160a01b031663d930a0e66040518163ffffffff1660e01b8152600401600060405180830381865afa158015616cb8573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052616ce0919081019061b316565b86838560200151604051602001616cfa949392919061b35f565b60408051601f19818403018152908290527f60f9bb1100000000000000000000000000000000000000000000000000000000825291506000906001600160a01b038616906360f9bb1190616d5290859060040161af0d565b600060405180830381865afa158015616d6f573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052616d97919081019061b316565b6040517fdb4235f60000000000000000000000000000000000000000000000000000000081529091506001600160a01b0386169063db4235f690616ddf90849060040161b463565b602060405180830381865afa158015616dfc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190616e20919061ae98565b616e3557816040516020016168e3919061b4b5565b6040517f49c4fac80000000000000000000000000000000000000000000000000000000081526001600160a01b038616906349c4fac890616e7a90849060040161b547565b600060405180830381865afa158015616e97573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052616ebf919081019061b316565b84526040517fdb4235f60000000000000000000000000000000000000000000000000000000081526001600160a01b0386169063db4235f690616f0690849060040161b599565b602060405180830381865afa158015616f23573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190616f47919061ae98565b15616fdc576040517f49c4fac80000000000000000000000000000000000000000000000000000000081526001600160a01b038616906349c4fac890616f9190849060040161b599565b600060405180830381865afa158015616fae573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052616fd6919081019061b316565b60408501525b846001600160a01b03166349c4fac8828660000151604051602001617001919061b5eb565b6040516020818303038152906040526040518363ffffffff1660e01b815260040161702d92919061b657565b600060405180830381865afa15801561704a573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052617072919081019061b316565b606085015250608083015250949350505050565b60408051600480825260a0820190925260609160009190816020015b60608152602001906001900390816170a25790505090506040518060400160405280600481526020017f6772657000000000000000000000000000000000000000000000000000000000815250816000815181106171025761710261b67c565b60200260200101819052506040518060400160405280600381526020017f2d726c0000000000000000000000000000000000000000000000000000000000815250816001815181106171565761715661b67c565b602002602001018190525084604051602001617172919061b6ab565b604051602081830303815290604052816002815181106171945761719461b67c565b6020026020010181905250826040516020016171b0919061b717565b604051602081830303815290604052816003815181106171d2576171d261b67c565b602002602001018190525060006171e882618115565b602080820151604080518082018252600581527f2e6a736f6e00000000000000000000000000000000000000000000000000000081850190815282518084018452600080825290860152825180840190935290518252928101929092529192506172799060408051808201825260008082526020918201528151808301909252845182528085019082015290618c62565b61728e57856040516020016168e3919061b758565b9695505050505050565b60a0810151604080518082018252600080825260209182015281518083019092528251808352928101910152606090737109709ecfa91a80626ff3989d68f67f5b1dd12d90156172e8565b511590565b61745c578260200151156173a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605860248201527f54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f742060448201527f62652075736564207768656e207468652060736b6970566572696679536f757260648201527f6365436f646560206f7074696f6e206973206074727565600000000000000000608482015260a401616923565b8260c001511561745c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605360248201527f54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f742060448201527f62652075736564207768656e207468652060736b69704c6963656e736554797060648201527f6560206f7074696f6e2069732060747275656000000000000000000000000000608482015260a401616923565b6040805160ff8082526120008201909252600091816020015b606081526020019060019003908161747557905050905060006040518060400160405280600381526020017f6e707800000000000000000000000000000000000000000000000000000000008152508282806174d09061b7e9565b935060ff16815181106174e5576174e561b67c565b60200260200101819052506040518060400160405280600d81526020017f302e302e312d616c7068612e3700000000000000000000000000000000000000815250604051602001617536919061b808565b6040516020818303038152906040528282806175519061b7e9565b935060ff16815181106175665761756661b67c565b60200260200101819052506040518060400160405280600681526020017f6465706c6f7900000000000000000000000000000000000000000000000000008152508282806175b39061b7e9565b935060ff16815181106175c8576175c861b67c565b60200260200101819052506040518060400160405280600e81526020017f2d2d636f6e74726163744e616d650000000000000000000000000000000000008152508282806176159061b7e9565b935060ff168151811061762a5761762a61b67c565b602002602001018190525087602001518282806176469061b7e9565b935060ff168151811061765b5761765b61b67c565b60200260200101819052506040518060400160405280600e81526020017f2d2d636f6e7472616374506174680000000000000000000000000000000000008152508282806176a89061b7e9565b935060ff16815181106176bd576176bd61b67c565b6020908102919091010152875182826176d58161b7e9565b935060ff16815181106176ea576176ea61b67c565b60200260200101819052506040518060400160405280600981526020017f2d2d636861696e496400000000000000000000000000000000000000000000008152508282806177379061b7e9565b935060ff168151811061774c5761774c61b67c565b602002602001018190525061776046618cc3565b828261776b8161b7e9565b935060ff16815181106177805761778061b67c565b60200260200101819052506040518060400160405280600f81526020017f2d2d6275696c64496e666f46696c6500000000000000000000000000000000008152508282806177cd9061b7e9565b935060ff16815181106177e2576177e261b67c565b6020026020010181905250868282806177fa9061b7e9565b935060ff168151811061780f5761780f61b67c565b60209081029190910101528551156179365760408051808201909152601581527f2d2d636f6e7374727563746f7242797465636f64650000000000000000000000602082015282826178608161b7e9565b935060ff16815181106178755761787561b67c565b60209081029190910101526040517f71aad10d0000000000000000000000000000000000000000000000000000000081526001600160a01b038416906371aad10d906178c590899060040161af0d565b600060405180830381865afa1580156178e2573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261790a919081019061b316565b82826179158161b7e9565b935060ff168151811061792a5761792a61b67c565b60200260200101819052505b846020015115617a065760408051808201909152601281527f2d2d766572696679536f75726365436f646500000000000000000000000000006020820152828261797f8161b7e9565b935060ff16815181106179945761799461b67c565b60200260200101819052506040518060400160405280600581526020017f66616c73650000000000000000000000000000000000000000000000000000008152508282806179e19061b7e9565b935060ff16815181106179f6576179f661b67c565b6020026020010181905250617bcd565b617a3e6172e38660a0015160408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b617ad15760408051808201909152600d81527f2d2d6c6963656e7365547970650000000000000000000000000000000000000060208201528282617a818161b7e9565b935060ff1681518110617a9657617a9661b67c565b60200260200101819052508460a00151604051602001617ab6919061b6ab565b6040516020818303038152906040528282806179e19061b7e9565b8460c00151158015617b14575060408089015181518083018352600080825260209182015282518084019093528151835290810190820152617b1290511590565b155b15617bcd5760408051808201909152600d81527f2d2d6c6963656e7365547970650000000000000000000000000000000000000060208201528282617b588161b7e9565b935060ff1681518110617b6d57617b6d61b67c565b6020026020010181905250617b8188618d63565b604051602001617b91919061b6ab565b604051602081830303815290604052828280617bac9061b7e9565b935060ff1681518110617bc157617bc161b67c565b60200260200101819052505b60408086015181518083018352600080825260209182015282518084019093528151835290810190820152617c0190511590565b617c965760408051808201909152600b81527f2d2d72656c61796572496400000000000000000000000000000000000000000060208201528282617c448161b7e9565b935060ff1681518110617c5957617c5961b67c565b60200260200101819052508460400151828280617c759061b7e9565b935060ff1681518110617c8a57617c8a61b67c565b60200260200101819052505b606085015115617db75760408051808201909152600681527f2d2d73616c74000000000000000000000000000000000000000000000000000060208201528282617cdf8161b7e9565b935060ff1681518110617cf457617cf461b67c565b602090810291909101015260608501516040517fb11a19e800000000000000000000000000000000000000000000000000000000815260048101919091526001600160a01b0384169063b11a19e890602401600060405180830381865afa158015617d63573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052617d8b919081019061b316565b8282617d968161b7e9565b935060ff1681518110617dab57617dab61b67c565b60200260200101819052505b60e08501515115617e5e5760408051808201909152600a81527f2d2d6761734c696d69740000000000000000000000000000000000000000000060208201528282617e018161b7e9565b935060ff1681518110617e1657617e1661b67c565b6020026020010181905250617e328560e0015160000151618cc3565b8282617e3d8161b7e9565b935060ff1681518110617e5257617e5261b67c565b60200260200101819052505b60e08501516020015115617f085760408051808201909152600a81527f2d2d67617350726963650000000000000000000000000000000000000000000060208201528282617eab8161b7e9565b935060ff1681518110617ec057617ec061b67c565b6020026020010181905250617edc8560e0015160200151618cc3565b8282617ee78161b7e9565b935060ff1681518110617efc57617efc61b67c565b60200260200101819052505b60e08501516040015115617fb25760408051808201909152600e81527f2d2d6d617846656550657247617300000000000000000000000000000000000060208201528282617f558161b7e9565b935060ff1681518110617f6a57617f6a61b67c565b6020026020010181905250617f868560e0015160400151618cc3565b8282617f918161b7e9565b935060ff1681518110617fa657617fa661b67c565b60200260200101819052505b60e0850151606001511561805c5760408051808201909152601681527f2d2d6d61785072696f726974794665655065724761730000000000000000000060208201528282617fff8161b7e9565b935060ff16815181106180145761801461b67c565b60200260200101819052506180308560e0015160600151618cc3565b828261803b8161b7e9565b935060ff16815181106180505761805061b67c565b60200260200101819052505b60008160ff1667ffffffffffffffff81111561807a5761807a61b0d8565b6040519080825280602002602001820160405280156180ad57816020015b60608152602001906001900390816180985790505b50905060005b8260ff168160ff16101561810657838160ff16815181106180d6576180d661b67c565b6020026020010151828260ff16815181106180f3576180f361b67c565b60209081029190910101526001016180b3565b5093505050505b949350505050565b61813c6040518060600160405280600060030b815260200160608152602001606081525090565b60408051808201825260048082527f6261736800000000000000000000000000000000000000000000000000000000602083015291517fd145736c000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d92600091849163d145736c916181c29186910161b873565b600060405180830381865afa1580156181df573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052618207919081019061b316565b905060006182158683619852565b90506000846001600160a01b031663f45c1ce7836040518263ffffffff1660e01b8152600401618245919061ab9c565b6000604051808303816000875af1158015618264573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261828c919081019061b8ba565b805190915060030b158015906182a55750602081015151155b80156182b45750604081015151155b1561728e57816000815181106182cc576182cc61b67c565b60200260200101516040516020016168e3919061b970565b606060006183198560408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6040805180820182526000808252602091820152815180830190925286518252808701908201529091506183509082905b906199a7565b156184ad5760006183cd826183c7846183c16183938a60408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6040805180820182526000808252602091820152815180830190925282518252918201519181019190915290565b906199ce565b90619a30565b604080518082018252600181527f0a00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201529091506184319082906199a7565b1561849b57604080518082018252600181527f0a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152618498905b8290619ab5565b90505b6184a481619adb565b92505050616810565b82156184c65784846040516020016168e392919061bb5c565b5050604080516020810190915260008152616810565b509392505050565b6000808251602084016000f09392505050565b8160a001511561850657505050565b6000618513848484619b44565b9050600061852082618115565b602081015181519192509060030b1580156185bc5750604080518082018252600781527f5355434345535300000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526185bc9060408051808201825260008082526020918201528151808301909252845182528085019082015261834a565b156185c957505050505050565b604082015151156185e95781604001516040516020016168e3919061bc03565b806040516020016168e3919061bc61565b6060600061862f8360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600481527f2e736f6c0000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152909150618694905b8290618c62565b1561870357604080518082018252600481527f2e736f6c0000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616810906186fe90839061a0df565b619adb565b604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152618765905b829061a169565b60010361883257604080518082018252600181527f3a00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526187cb90618491565b50604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616810906186fe905b8390619ab5565b604080518082018252600581527f2e6a736f6e000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526188919061868d565b156189c857604080518082018252600181527f2f000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201819052845180860190955292518452830152906188f990839061a203565b90506000816001835161890c919061afc2565b8151811061891c5761891c61b67c565b602002602001015190506189bf6186fe6189926040518060400160405280600581526020017f2e6a736f6e00000000000000000000000000000000000000000000000000000081525060408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6040805180820182526000808252602091820152815180830190925285518252808601908201529061a0df565b95945050505050565b826040516020016168e3919061bccc565b50919050565b60606000618a148360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600481527f2e736f6c0000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152909150618a769061868d565b15618a845761681081619adb565b604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152618ae39061875e565b600103618b4d57604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616810906186fe9061882b565b604080518082018252600581527f2e6a736f6e00000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152618bac9061868d565b156189c857604080518082018252600181527f2f00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820181905284518086019095529251845283015290618c1490839061a203565b9050600181511115618c50578060028251618c2f919061afc2565b81518110618c3f57618c3f61b67c565b602002602001015192505050919050565b50826040516020016168e3919061bccc565b805182516000911115618c7757506000616717565b81518351602085015160009291618c8d9161afd5565b618c97919061afc2565b905082602001518103618cae576001915050616717565b82516020840151819020912014905092915050565b60606000618cd08361a2a8565b600101905060008167ffffffffffffffff811115618cf057618cf061b0d8565b6040519080825280601f01601f191660200182016040528015618d1a576020820181803683370190505b5090508181016020015b600019017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a8504945084618d2457509392505050565b604081810151815180830183526000808252602091820181905283518085018552835181529282018383015283518085018552600a81527f554e4c4943454e5345440000000000000000000000000000000000000000000081840190815285518087018752838152840192909252845180860190955251845290830152606091618def905b829061a38a565b15618e2f57505060408051808201909152600481527f4e6f6e65000000000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600981527f556e6c6963656e7365000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152618e8e90618de8565b15618ece57505060408051808201909152600981527f556e6c6963656e736500000000000000000000000000000000000000000000006020820152919050565b604080518082018252600381527f4d4954000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152618f2d90618de8565b15618f6d57505060408051808201909152600381527f4d495400000000000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f47504c2d322e302d6f6e6c79000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152618fcc90618de8565b806190315750604080518082018252601081527f47504c2d322e302d6f722d6c61746572000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261903190618de8565b1561907157505060408051808201909152600981527f474e552047504c763200000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f47504c2d332e302d6f6e6c790000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526190d090618de8565b806191355750604080518082018252601081527f47504c2d332e302d6f722d6c61746572000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261913590618de8565b1561917557505060408051808201909152600981527f474e552047504c763300000000000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4c47504c2d322e312d6f6e6c7900000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526191d490618de8565b806192395750604080518082018252601181527f4c47504c2d322e312d6f722d6c617465720000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261923990618de8565b1561927957505060408051808201909152600c81527f474e55204c47504c76322e3100000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4c47504c2d332e302d6f6e6c7900000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526192d890618de8565b8061933d5750604080518082018252601181527f4c47504c2d332e302d6f722d6c617465720000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261933d90618de8565b1561937d57505060408051808201909152600a81527f474e55204c47504c7633000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f4253442d322d436c617573650000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526193dc90618de8565b1561941c57505060408051808201909152600c81527f4253442d322d436c6175736500000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f4253442d332d436c6175736500000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261947b90618de8565b156194bb57505060408051808201909152600c81527f4253442d332d436c6175736500000000000000000000000000000000000000006020820152919050565b604080518082018252600781527f4d504c2d322e30000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261951a90618de8565b1561955a57505060408051808201909152600781527f4d504c2d322e30000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600781527f4f534c2d332e3000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526195b990618de8565b156195f957505060408051808201909152600781527f4f534c2d332e30000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600a81527f4170616368652d322e30000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261965890618de8565b1561969857505060408051808201909152600a81527f4170616368652d322e30000000000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4147504c2d332e302d6f6e6c7900000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526196f790618de8565b8061975c5750604080518082018252601181527f4147504c2d332e302d6f722d6c617465720000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261975c90618de8565b1561979c57505060408051808201909152600a81527f474e55204147504c7633000000000000000000000000000000000000000000006020820152919050565b604080518082018252600881527f4255534c2d312e31000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526197fb90618de8565b1561983b57505060408051808201909152600781527f42534c20312e31000000000000000000000000000000000000000000000000006020820152919050565b604080840151845191516168e3929060200161bdaa565b60608060005b84518110156198dd57818582815181106198745761987461b67c565b602002602001015160405160200161988d92919061b1f5565b6040516020818303038152906040529150600185516198ac919061afc2565b81146198d557816040516020016198c3919061bf13565b60405160208183030381529060405291505b600101619858565b5060408051600380825260808201909252600091816020015b60608152602001906001900390816198f657905050905083816000815181106199215761992161b67c565b60200260200101819052506040518060400160405280600281526020017f2d63000000000000000000000000000000000000000000000000000000000000815250816001815181106199755761997561b67c565b602002602001018190525081816002815181106199945761999461b67c565b6020908102919091010152949350505050565b60208083015183518351928401516000936199c5929184919061a39e565b14159392505050565b60408051808201909152600080825260208201526000619a00846000015185602001518560000151866020015161a4af565b9050836020015181619a12919061afc2565b84518590619a2190839061afc2565b90525060208401525090919050565b6040805180820190915260008082526020820152815183511015619a55575081616717565b6020808301519084015160019114619a7c5750815160208481015190840151829020919020145b8015619aad57825184518590619a9390839061afc2565b9052508251602085018051619aa990839061afd5565b9052505b509192915050565b6040805180820190915260008082526020820152619ad483838361a5cf565b5092915050565b60606000826000015167ffffffffffffffff811115619afc57619afc61b0d8565b6040519080825280601f01601f191660200182016040528015619b26576020820181803683370190505b5090506000602082019050619ad4818560200151866000015161a67a565b60606000619b50616b0d565b6040805160ff808252612000820190925291925060009190816020015b6060815260200190600190039081619b6d57905050905060006040518060400160405280600381526020017f6e70780000000000000000000000000000000000000000000000000000000000815250828280619bc89061b7e9565b935060ff1681518110619bdd57619bdd61b67c565b60200260200101819052506040518060400160405280600781526020017f5e312e33322e3300000000000000000000000000000000000000000000000000815250604051602001619c2e919061bf54565b604051602081830303815290604052828280619c499061b7e9565b935060ff1681518110619c5e57619c5e61b67c565b60200260200101819052506040518060400160405280600881526020017f76616c6964617465000000000000000000000000000000000000000000000000815250828280619cab9061b7e9565b935060ff1681518110619cc057619cc061b67c565b602002602001018190525082604051602001619cdc919061b717565b604051602081830303815290604052828280619cf79061b7e9565b935060ff1681518110619d0c57619d0c61b67c565b60200260200101819052506040518060400160405280600a81526020017f2d2d636f6e747261637400000000000000000000000000000000000000000000815250828280619d599061b7e9565b935060ff1681518110619d6e57619d6e61b67c565b6020026020010181905250619d83878461a6f4565b8282619d8e8161b7e9565b935060ff1681518110619da357619da361b67c565b602090810291909101015285515115619e4f5760408051808201909152600b81527f2d2d7265666572656e636500000000000000000000000000000000000000000060208201528282619df58161b7e9565b935060ff1681518110619e0a57619e0a61b67c565b6020026020010181905250619e2386600001518461a6f4565b8282619e2e8161b7e9565b935060ff1681518110619e4357619e4361b67c565b60200260200101819052505b856080015115619ebd5760408051808201909152601881527f2d2d756e73616665536b697053746f72616765436865636b000000000000000060208201528282619e988161b7e9565b935060ff1681518110619ead57619ead61b67c565b6020026020010181905250619f23565b8415619f235760408051808201909152601281527f2d2d726571756972655265666572656e6365000000000000000000000000000060208201528282619f028161b7e9565b935060ff1681518110619f1757619f1761b67c565b60200260200101819052505b60408601515115619fbf5760408051808201909152600d81527f2d2d756e73616665416c6c6f770000000000000000000000000000000000000060208201528282619f6d8161b7e9565b935060ff1681518110619f8257619f8261b67c565b60200260200101819052508560400151828280619f9e9061b7e9565b935060ff1681518110619fb357619fb361b67c565b60200260200101819052505b85606001511561a0295760408051808201909152601481527f2d2d756e73616665416c6c6f7752656e616d65730000000000000000000000006020820152828261a0088161b7e9565b935060ff168151811061a01d5761a01d61b67c565b60200260200101819052505b60008160ff1667ffffffffffffffff81111561a0475761a04761b0d8565b60405190808252806020026020018201604052801561a07a57816020015b606081526020019060019003908161a0655790505b50905060005b8260ff168160ff16101561a0d357838160ff168151811061a0a35761a0a361b67c565b6020026020010151828260ff168151811061a0c05761a0c061b67c565b602090810291909101015260010161a080565b50979650505050505050565b604080518082019091526000808252602082015281518351101561a104575081616717565b8151835160208501516000929161a11a9161afd5565b61a124919061afc2565b6020840151909150600190821461a145575082516020840151819020908220145b801561a1605783518551869061a15c90839061afc2565b9052505b50929392505050565b600080826000015161a18d856000015186602001518660000151876020015161a4af565b61a197919061afd5565b90505b8351602085015161a1ab919061afd5565b8111619ad4578161a1bb8161bf99565b925050826000015161a1f285602001518361a1d6919061afc2565b865161a1e2919061afc2565b838660000151876020015161a4af565b61a1fc919061afd5565b905061a19a565b6060600061a211848461a169565b61a21c90600161afd5565b67ffffffffffffffff81111561a2345761a23461b0d8565b60405190808252806020026020018201604052801561a26757816020015b606081526020019060019003908161a2525790505b50905060005b81518110156184dc5761a2836186fe8686619ab5565b82828151811061a2955761a29561b67c565b602090810291909101015260010161a26d565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000831061a2f1577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef8100000000831061a31d576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc10000831061a33b57662386f26fc10000830492506010015b6305f5e100831061a353576305f5e100830492506008015b612710831061a36757612710830492506004015b6064831061a379576064830492506002015b600a83106167175760010192915050565b600061a396838361a734565b159392505050565b60008085841161a4a5576020841161a451576000841561a3e957600161a3c586602061afc2565b61a3d090600861bfb3565b61a3db90600261c0b1565b61a3e5919061afc2565b1990505b835181168561a3f8898961afd5565b61a402919061afc2565b805190935082165b81811461a43c5787841161a424578794505050505061810d565b8361a42e8161c0bd565b94505082845116905061a40a565b61a446878561afd5565b94505050505061810d565b83832061a45e858861afc2565b61a468908761afd5565b91505b85821061a4a35784822080820361a4905761a486868461afd5565b935050505061810d565b61a49b60018461afc2565b92505061a46b565b505b5092949350505050565b6000838186851161a5ba576020851161a569576000851561a4fb57600161a4d787602061afc2565b61a4e290600861bfb3565b61a4ed90600261c0b1565b61a4f7919061afc2565b1990505b8451811660008761a50c8b8b61afd5565b61a516919061afc2565b855190915083165b82811461a55b5781861061a5435761a5368b8b61afd5565b965050505050505061810d565b8561a54d8161bf99565b96505083865116905061a51e565b85965050505050505061810d565b508383206000905b61a57b868961afc2565b821161a5b85785832080820361a597578394505050505061810d565b61a5a260018561afd5565b935050818061a5b09061bf99565b92505061a571565b505b61a5c4878761afd5565b979650505050505050565b6040805180820190915260008082526020820152600061a601856000015186602001518660000151876020015161a4af565b60208087018051918601919091525190915061a61d908261afc2565b83528451602086015161a630919061afd5565b810361a63f576000855261a671565b8351835161a64d919061afd5565b8551869061a65c90839061afc2565b905250835161a66b908261afd5565b60208601525b50909392505050565b6020811061a6b2578151835261a69160208461afd5565b925061a69e60208361afd5565b915061a6ab60208261afc2565b905061a67a565b600019811561a6e157600161a6c883602061afc2565b61a6d49061010061c0b1565b61a6de919061afc2565b90505b9151835183169219169190911790915250565b6060600061a7028484616be0565b805160208083015160405193945061a71c9390910161c0d4565b60405160208183030381529060405291505092915050565b815181516000919081111561a747575081515b6020808501519084015160005b8381101561a800578251825180821461a7d057600019602087101561a7af5760018461a78189602061afc2565b61a78b919061afd5565b61a79690600861bfb3565b61a7a190600261c0b1565b61a7ab919061afc2565b1990505b818116838216818103911461a7cd5797506167179650505050505050565b50505b61a7db60208661afd5565b945061a7e860208561afd5565b9350505060208161a7f9919061afd5565b905061a754565b508451865161728e919061c12c565b610b678061c14d83390190565b61053f8061ccb483390190565b61106f8061d1f383390190565b611bb98061e26283390190565b6040518060e0016040528060608152602001606081526020016060815260200160001515815260200160001515815260200160001515815260200161a88661a88b565b905290565b6040518061010001604052806000151581526020016000151581526020016060815260200160008019168152602001606081526020016060815260200160001515815260200161a8866040518060800160405280600081526020016000815260200160008152602001600081525090565b602080825282518282018190526000918401906040840190835b8181101561a93d5783516001600160a01b031683526020938401939092019160010161a916565b509095945050505050565b60005b8381101561a96357818101518382015260200161a94b565b50506000910152565b6000815180845261a98481602086016020860161a948565b601f01601f19169290920160200192915050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b8281101561aa94577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452815180516001600160a01b03168652602090810151604082880181905281519088018190529101906060600582901b88018101919088019060005b8181101561aa7a577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa08a850301835261aa6484865161a96c565b602095860195909450929092019160010161aa2a565b50919750505060209485019492909201915060010161a9c0565b50929695505050505050565b600081518084526020840193506020830160005b8281101561aaf45781517fffffffff000000000000000000000000000000000000000000000000000000001686526020958601959091019060010161aab4565b5093949350505050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b8281101561aa94577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452815180516040875261ab6a604088018261a96c565b905060208201519150868103602088015261ab85818361aaa0565b96505050602093840193919091019060010161ab26565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b8281101561aa94577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc087860301845261abfe85835161a96c565b9450602093840193919091019060010161abc4565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b8281101561aa94577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc087860301845281516001600160a01b038151168652602081015190506040602087015261ac94604087018261aaa0565b955050602093840193919091019060010161ac3b565b60208152600061671760208301600581527f68656c6c6f000000000000000000000000000000000000000000000000000000602082015260400190565b600081516060845261acfc606085018261a96c565b90506001600160a01b036020840151166020850152604083015160408501528091505092915050565b60a08152600061ad3860a083018861ace7565b6001600160a01b03871660208401528560408401526001600160a01b0385166060840152828103608084015261ad6e818561a96c565b98975050505050505050565b60006020828403121561ad8c57600080fd5b81516001600160a01b038116811461681057600080fd5b610100815260056101008201527f544f4b454e000000000000000000000000000000000000000000000000000000610120820152610140602082015260036101408201527f544b4e000000000000000000000000000000000000000000000000000000000061016082015260006101808201905060ff881660408301528660608301526003861061ae5d577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b8560808301528460a083015261ae7e60c08301856001600160a01b03169052565b6001600160a01b03831660e0830152979650505050505050565b60006020828403121561aeaa57600080fd5b8151801515811461681057600080fd5b60808152600061aecd608083018761ace7565b8560208401526001600160a01b0385166040840152828103606084015261a5c4818561a96c565b60006020828403121561af0657600080fd5b5051919050565b602081526000616810602083018461a96c565b60a08152600061af3360a083018761a96c565b6001600160a01b03861660208401528460408401526001600160a01b0384166060840152828103608084015261a5c481600581527f68656c6c6f000000000000000000000000000000000000000000000000000000602082015260400190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b818103818111156167175761671761af93565b808201808211156167175761671761af93565b600181811c9082168061affc57607f821691505b6020821081036189d9577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6001600160a01b038316815260406020820152600061810d604083018461a96c565b7f4661696c656420746f206465706c6f7920636f6e74726163742000000000000081526000835161b08f81601a85016020880161a948565b7f3a20000000000000000000000000000000000000000000000000000000000000601a91840191820152835161b0cc81601c84016020880161a948565b01601c01949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040516060810167ffffffffffffffff8111828210171561b12a5761b12a61b0d8565b60405290565b60008067ffffffffffffffff84111561b14b5761b14b61b0d8565b50604051601f19601f85018116603f0116810181811067ffffffffffffffff8211171561b17a5761b17a61b0d8565b60405283815290508082840185101561b19257600080fd5b6184dc84602083018561a948565b600082601f83011261b1b157600080fd5b6168108383516020850161b130565b60006020828403121561b1d257600080fd5b815167ffffffffffffffff81111561b1e957600080fd5b6167138482850161b1a0565b6000835161b20781846020880161a948565b83519083019061b21b81836020880161a948565b01949350505050565b7f4661696c656420746f206465706c6f7920636f6e74726163742000000000000081526000835161b25c81601a85016020880161a948565b7f207573696e6720636f6e7374727563746f722064617461202200000000000000601a91840191820152835161b29981603384016020880161a948565b7f220000000000000000000000000000000000000000000000000000000000000060339290910191820152603401949350505050565b60408152600b60408201527f464f554e4452595f4f55540000000000000000000000000000000000000000006060820152608060208201526000616810608083018461a96c565b60006020828403121561b32857600080fd5b815167ffffffffffffffff81111561b33f57600080fd5b8201601f8101841361b35057600080fd5b6167138482516020840161b130565b6000855161b371818460208a0161a948565b7f2f00000000000000000000000000000000000000000000000000000000000000908301908152855161b3ab816001840160208a0161a948565b7f2f0000000000000000000000000000000000000000000000000000000000000060019290910191820152845161b3e981600284016020890161a948565b6001818301019150507f2f000000000000000000000000000000000000000000000000000000000000006001820152835161b42b81600284016020880161a948565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600292909101918201526007019695505050505050565b60408152600061b476604083018461a96c565b8281036020840152600481527f2e6173740000000000000000000000000000000000000000000000000000000060208201526040810191505092915050565b7f436f756c64206e6f742066696e642041535420696e206172746966616374200081526000825161b4ed81601f85016020870161a948565b7f2e205365742060617374203d20747275656020696e20666f756e6472792e746f601f9390910192830152507f6d6c000000000000000000000000000000000000000000000000000000000000603f820152604101919050565b60408152600061b55a604083018461a96c565b8281036020840152601181527f2e6173742e6162736f6c7574655061746800000000000000000000000000000060208201526040810191505092915050565b60408152600061b5ac604083018461a96c565b8281036020840152600c81527f2e6173742e6c6963656e7365000000000000000000000000000000000000000060208201526040810191505092915050565b7f2e6d657461646174612e736f75726365732e5b2700000000000000000000000081526000825161b62381601485016020870161a948565b7f275d2e6b656363616b32353600000000000000000000000000000000000000006014939091019283015250602001919050565b60408152600061b66a604083018561a96c565b828103602084015261680c818561a96c565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f220000000000000000000000000000000000000000000000000000000000000081526000825161b6e381600185016020870161a948565b7f22000000000000000000000000000000000000000000000000000000000000006001939091019283015250600201919050565b6000825161b72981846020870161a948565b7f2f6275696c642d696e666f000000000000000000000000000000000000000000920191825250600b01919050565b7f436f756c64206e6f742066696e64206275696c642d696e666f2066696c65207781527f697468206d61746368696e6720736f7572636520636f6465206861736820666f60208201527f7220636f6e74726163742000000000000000000000000000000000000000000060408201526000825161b7dc81604b85016020870161a948565b91909101604b0192915050565b600060ff821660ff810361b7ff5761b7ff61af93565b60010192915050565b7f406f70656e7a657070656c696e2f646566656e6465722d6465706c6f792d636c81527f69656e742d636c6940000000000000000000000000000000000000000000000060208201526000825161b86681602985016020870161a948565b9190910160290192915050565b60408152601660408201527f4f50454e5a455050454c494e5f424153485f50415448000000000000000000006060820152608060208201526000616810608083018461a96c565b60006020828403121561b8cc57600080fd5b815167ffffffffffffffff81111561b8e357600080fd5b82016060818503121561b8f557600080fd5b61b8fd61b107565b81518060030b811461b90e57600080fd5b8152602082015167ffffffffffffffff81111561b92a57600080fd5b61b9368682850161b1a0565b602083015250604082015167ffffffffffffffff81111561b95657600080fd5b61b9628682850161b1a0565b604083015250949350505050565b7f4661696c656420746f2072756e206261736820636f6d6d616e6420776974682081527f220000000000000000000000000000000000000000000000000000000000000060208201526000825161b9ce81602185016020870161a948565b7f222e20496620796f7520617265207573696e672057696e646f77732c2073657460219390910192830152507f20746865204f50454e5a455050454c494e5f424153485f5041544820656e766960418201527f726f6e6d656e74207661726961626c6520746f207468652066756c6c7920717560618201527f616c69666965642070617468206f66207468652062617368206578656375746160818201527f626c652e20466f72206578616d706c652c20696620796f75206172652075736960a18201527f6e672047697420666f722057696e646f77732c206164642074686520666f6c6c60c18201527f6f77696e67206c696e6520696e20746865202e656e762066696c65206f66207960e18201527f6f75722070726f6a65637420287573696e6720666f727761726420736c6173686101018201527f6573293a0a4f50454e5a455050454c494e5f424153485f504154483d22433a2f6101218201527f50726f6772616d2046696c65732f4769742f62696e2f6261736822000000000061014182015261015c01919050565b7f4661696c656420746f2066696e64206c696e652077697468207072656669782081527f270000000000000000000000000000000000000000000000000000000000000060208201526000835161bbba81602185016020880161a948565b7f2720696e206f75747075743a2000000000000000000000000000000000000000602191840191820152835161bbf781602e84016020880161a948565b01602e01949350505050565b7f4661696c656420746f2072756e2075706772616465207361666574792076616c81527f69646174696f6e3a20000000000000000000000000000000000000000000000060208201526000825161b86681602985016020870161a948565b7f55706772616465207361666574792076616c69646174696f6e206661696c656481527f3a0a00000000000000000000000000000000000000000000000000000000000060208201526000825161bcbf81602285016020870161a948565b9190910160220192915050565b7f436f6e7472616374206e616d652000000000000000000000000000000000000081526000825161bd0481600e85016020870161a948565b7f206d75737420626520696e2074686520666f726d6174204d79436f6e74726163600e9390910192830152507f742e736f6c3a4d79436f6e7472616374206f72204d79436f6e74726163742e73602e8201527f6f6c206f72206f75742f4d79436f6e74726163742e736f6c2f4d79436f6e7472604e8201527f6163742e6a736f6e000000000000000000000000000000000000000000000000606e820152607601919050565b7f53504458206c6963656e7365206964656e74696669657220000000000000000081526000835161bde281601885016020880161a948565b7f20696e2000000000000000000000000000000000000000000000000000000000601891840191820152835161be1f81601c84016020880161a948565b7f20646f6573206e6f74206c6f6f6b206c696b65206120737570706f7274656420601c92909101918201527f6c6963656e736520666f7220626c6f636b206578706c6f726572207665726966603c8201527f69636174696f6e2e205573652074686520606c6963656e73655479706560206f605c8201527f7074696f6e20746f20737065636966792061206c6963656e736520747970652c607c8201527f206f7220736574207468652060736b69704c6963656e73655479706560206f70609c8201527f74696f6e20746f2060747275656020746f20736b69702e00000000000000000060bc82015260d301949350505050565b6000825161bf2581846020870161a948565b7f2000000000000000000000000000000000000000000000000000000000000000920191825250600101919050565b7f406f70656e7a657070656c696e2f75706772616465732d636f7265400000000081526000825161bf8c81601c85016020870161a948565b91909101601c0192915050565b6000600019820361bfac5761bfac61af93565b5060010190565b80820281158282048414176167175761671761af93565b6001815b600184111561c0055780850481111561bfe95761bfe961af93565b600184161561bff757908102905b60019390931c92800261bfce565b935093915050565b60008261c01c57506001616717565b8161c02957506000616717565b816001811461c03f576002811461c0495761c065565b6001915050616717565b60ff84111561c05a5761c05a61af93565b50506001821b616717565b5060208310610133831016604e8410600b841016171561c088575081810a616717565b61c095600019848461bfca565b806000190482111561c0a95761c0a961af93565b029392505050565b6000616810838361c00d565b60008161c0cc5761c0cc61af93565b506000190190565b6000835161c0e681846020880161a948565b7f3a00000000000000000000000000000000000000000000000000000000000000908301908152835161c12081600184016020880161a948565b01600101949350505050565b8181036000831280158383131683831282161715619ad457619ad461af9356fe60c0604052600d60809081526c2bb930b83832b21022ba3432b960991b60a05260009061002c9082610114565b506040805180820190915260048152630ae8aa8960e31b60208201526001906100559082610114565b506002805460ff1916601217905534801561006f57600080fd5b506101d2565b634e487b7160e01b600052604160045260246000fd5b600181811c9082168061009f57607f821691505b6020821081036100bf57634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111561010f57806000526020600020601f840160051c810160208510156100ec5750805b601f840160051c820191505b8181101561010c57600081556001016100f8565b50505b505050565b81516001600160401b0381111561012d5761012d610075565b6101418161013b845461008b565b846100c5565b6020601f821160018114610175576000831561015d5750848201515b600019600385901b1c1916600184901b17845561010c565b600084815260208120601f198516915b828110156101a55787850151825560209485019460019092019101610185565b50848210156101c35786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b610986806101e16000396000f3fe6080604052600436106100c05760003560e01c8063313ce56711610074578063a9059cbb1161004e578063a9059cbb146101fa578063d0e30db01461021a578063dd62ed3e1461022257600080fd5b8063313ce5671461018c57806370a08231146101b857806395d89b41146101e557600080fd5b806318160ddd116100a557806318160ddd1461012f57806323b872dd1461014c5780632e1a7d4d1461016c57600080fd5b806306fdde03146100d4578063095ea7b3146100ff57600080fd5b366100cf576100cd61025a565b005b600080fd5b3480156100e057600080fd5b506100e96102b5565b6040516100f69190610745565b60405180910390f35b34801561010b57600080fd5b5061011f61011a3660046107da565b610343565b60405190151581526020016100f6565b34801561013b57600080fd5b50475b6040519081526020016100f6565b34801561015857600080fd5b5061011f610167366004610804565b6103bd565b34801561017857600080fd5b506100cd610187366004610841565b610647565b34801561019857600080fd5b506002546101a69060ff1681565b60405160ff90911681526020016100f6565b3480156101c457600080fd5b5061013e6101d336600461085a565b60036020526000908152604090205481565b3480156101f157600080fd5b506100e9610724565b34801561020657600080fd5b5061011f6102153660046107da565b610731565b6100cd61025a565b34801561022e57600080fd5b5061013e61023d366004610875565b600460209081526000928352604080842090915290825290205481565b33600090815260036020526040812080543492906102799084906108d7565b909155505060405134815233907fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c9060200160405180910390a2565b600080546102c2906108ea565b80601f01602080910402602001604051908101604052809291908181526020018280546102ee906108ea565b801561033b5780601f106103105761010080835404028352916020019161033b565b820191906000526020600020905b81548152906001019060200180831161031e57829003601f168201915b505050505081565b33600081815260046020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925906103ab9086815260200190565b60405180910390a35060015b92915050565b73ffffffffffffffffffffffffffffffffffffffff831660009081526003602052604081205482111561042b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600060248201526044015b60405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff841633148015906104a1575073ffffffffffffffffffffffffffffffffffffffff841660009081526004602090815260408083203384529091529020547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff14155b156105605773ffffffffffffffffffffffffffffffffffffffff8416600090815260046020908152604080832033845290915290205482111561051a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526020600482015260006024820152604401610422565b73ffffffffffffffffffffffffffffffffffffffff841660009081526004602090815260408083203384529091528120805484929061055a90849061093d565b90915550505b73ffffffffffffffffffffffffffffffffffffffff84166000908152600360205260408120805484929061059590849061093d565b909155505073ffffffffffffffffffffffffffffffffffffffff8316600090815260036020526040812080548492906105cf9084906108d7565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161063591815260200190565b60405180910390a35060019392505050565b3360009081526003602052604090205481111561069a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526020600482015260006024820152604401610422565b33600090815260036020526040812080548392906106b990849061093d565b9091555050604051339082156108fc029083906000818181858888f193505050501580156106eb573d6000803e3d6000fd5b5060405181815233907f7fcf532c15f0a6db0bd6d0e038bea71d30d808c7d98cb3bf7268a95bf5081b659060200160405180910390a250565b600180546102c2906108ea565b600061073e3384846103bd565b9392505050565b602081526000825180602084015260005b818110156107735760208186018101516040868401015201610756565b5060006040828501015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011684010191505092915050565b803573ffffffffffffffffffffffffffffffffffffffff811681146107d557600080fd5b919050565b600080604083850312156107ed57600080fd5b6107f6836107b1565b946020939093013593505050565b60008060006060848603121561081957600080fd5b610822846107b1565b9250610830602085016107b1565b929592945050506040919091013590565b60006020828403121561085357600080fd5b5035919050565b60006020828403121561086c57600080fd5b61073e826107b1565b6000806040838503121561088857600080fd5b610891836107b1565b915061089f602084016107b1565b90509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b808201808211156103b7576103b76108a8565b600181811c908216806108fe57607f821691505b602082108103610937577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b818103818111156103b7576103b76108a856fea264697066735822122008d7fc4e09519c5dd9f356b03596f6829a151d0bc7682533f9ceab4e459f5ee264736f6c634300081a00336080604052348015600f57600080fd5b506105208061001f6000396000f3fe60806040526004361061002a5760003560e01c806369582bee14610033578063de43156e1461005357005b3661003157005b005b34801561003f57600080fd5b5061003161004e3660046101ba565b610073565b34801561005f57600080fd5b5061003161006e3660046101ba565b6100ee565b6060811561008a5761008782840184610273565b90505b7ffdc887992b033668833927e252058e468fac0b6bd196d520f09c61b740e999486100b58780610369565b6100c560408a0160208b016103ce565b896040013533866040516100de969594939291906103f0565b60405180910390a1505050505050565b606081156101055761010282840184610273565b90505b7fcdc8ee677dc5ebe680fb18cebda5e26ba5ea1f0ba504a47e2a9a2ecb476dc98e6100b58780610369565b60006060828403121561014257600080fd5b50919050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461016c57600080fd5b919050565b60008083601f84011261018357600080fd5b50813567ffffffffffffffff81111561019b57600080fd5b6020830191508360208285010111156101b357600080fd5b9250929050565b6000806000806000608086880312156101d257600080fd5b853567ffffffffffffffff8111156101e957600080fd5b6101f588828901610130565b95505061020460208701610148565b935060408601359250606086013567ffffffffffffffff81111561022757600080fd5b61023388828901610171565b969995985093965092949392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60006020828403121561028557600080fd5b813567ffffffffffffffff81111561029c57600080fd5b8201601f810184136102ad57600080fd5b803567ffffffffffffffff8111156102c7576102c7610244565b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8501160116810181811067ffffffffffffffff8211171561033357610333610244565b60405281815282820160200186101561034b57600080fd5b81602084016020830137600091810160200191909152949350505050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261039e57600080fd5b83018035915067ffffffffffffffff8211156103b957600080fd5b6020019150368190038213156101b357600080fd5b6000602082840312156103e057600080fd5b6103e982610148565b9392505050565b60a081528560a0820152858760c0830137600060c0878301015260007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f880116820173ffffffffffffffffffffffffffffffffffffffff8716602084015285604084015273ffffffffffffffffffffffffffffffffffffffff8516606084015260c083820301608084015283518060c083015260005b818110156104a557602081870181015184830160e0015201610488565b50600060e0838301810191909152601f9091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016909101019897505050505050505056fea2646970667358221220f4d1ccb9c8450e782e1c77412473fd37637a5c83a2a3272307d8c8bc8e8c7a3364736f6c634300081a003360c060405234801561001057600080fd5b5060405161106f38038061106f83398101604081905261002f916100db565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461006357604051632b2add3d60e01b815260040160405180910390fd5b600380546001600160a01b0319166001600160a01b0385811691909117909155828116608052811660a0526040517f80699e81136d69cb8367ad52a994e25c722a86da654b561d0c14b61a777e7ac590600090a150505061011e565b80516001600160a01b03811681146100d657600080fd5b919050565b6000806000606084860312156100f057600080fd5b6100f9846100bf565b9250610107602085016100bf565b9150610115604085016100bf565b90509250925092565b60805160a051610f2561014a60003960006101e50152600081816102b9015261045b0152610f256000f3fe608060405234801561001057600080fd5b50600436106100f55760003560e01c806397770dff11610097578063c63585cc11610066578063c63585cc14610273578063d7fd7afb14610286578063d936a012146102b4578063ee2815ba146102db57600080fd5b806397770dff1461021a578063a7cb05071461022d578063c39aca3714610240578063c62178ac1461025357600080fd5b8063513a9c05116100d3578063513a9c051461018a578063569541b9146101c0578063842da36d146101e057806391dd645f1461020757600080fd5b80630be15547146100fa5780631f0e251b1461015a5780633ce4a5bc1461016f575b600080fd5b610130610108366004610bd1565b60016020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b61016d610168366004610c13565b6102ee565b005b61013073735b14bb79463307aacbed86daf3322b1e6226ab81565b610130610198366004610bd1565b60026020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b6003546101309073ffffffffffffffffffffffffffffffffffffffff1681565b6101307f000000000000000000000000000000000000000000000000000000000000000081565b61016d610215366004610c35565b610402565b61016d610228366004610c13565b610526565b61016d61023b366004610c61565b610633565b61016d61024e366004610c83565b6106ce565b6004546101309073ffffffffffffffffffffffffffffffffffffffff1681565b610130610281366004610d53565b6108cd565b6102a6610294366004610bd1565b60006020819052908152604090205481565b604051908152602001610151565b6101307f000000000000000000000000000000000000000000000000000000000000000081565b61016d6102e9366004610c35565b610a02565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461033b576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116610388576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600480547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527f3ade88e3922d64780e1bf4460d364c2970b69da813f9c0c07a1c187b5647636c906020015b60405180910390a150565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461044f576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600354600090610497907f00000000000000000000000000000000000000000000000000000000000000009073ffffffffffffffffffffffffffffffffffffffff16846108cd565b60008481526002602090815260409182902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff85169081179091558251878152918201529192507f0ecec485166da6139b13bb7e033e9446e2d35348e80ebf1180d4afe2dba1704e910160405180910390a1505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610573576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff81166105c0576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527fdba79d534382d1a8ae108e4c8ecb27c6ae42ab8b91d44eedf88bd329f3868d5e906020016103f7565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610680576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000828152602081815260409182902083905581518481529081018390527f49f492222906ac486c3c1401fa545626df1f0c0e5a77a05597ea2ed66af9850d91015b60405180910390a15050565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461071b576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff831673735b14bb79463307aacbed86daf3322b1e6226ab1480610768575073ffffffffffffffffffffffffffffffffffffffff831630145b1561079f576040517f82d5d76a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f47e7ef2400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152602482018690528616906347e7ef24906044016020604051808303816000875af1158015610814573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108389190610d96565b506040517fde43156e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84169063de43156e906108939089908990899088908890600401610e01565b600060405180830381600087803b1580156108ad57600080fd5b505af11580156108c1573d6000803e3d6000fd5b50505050505050505050565b60008060006108dc8585610ad3565b6040517fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606084811b8216602084015283901b16603482015291935091508690604801604051602081830303815290604052805190602001206040516020016109c29291907fff00000000000000000000000000000000000000000000000000000000000000815260609290921b7fffffffffffffffffffffffffffffffffffffffff00000000000000000000000016600183015260158201527f96e8ac4277198ff8b6f785478aa9a39f403cb768dd02cbee326c3e7da348845f603582015260550190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291905280516020909101209695505050505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610a4f576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008281526001602090815260409182902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff85169081179091558251858152918201527fd1b36d30f6248e97c473b4d1348ca164a4ef6759022f54a58ec200326c39c45d91016106c2565b6000808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603610b3b576040517fcb1e7cfe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1610610b75578284610b78565b83835b909250905073ffffffffffffffffffffffffffffffffffffffff8216610bca576040517f78b507da00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b9250929050565b600060208284031215610be357600080fd5b5035919050565b803573ffffffffffffffffffffffffffffffffffffffff81168114610c0e57600080fd5b919050565b600060208284031215610c2557600080fd5b610c2e82610bea565b9392505050565b60008060408385031215610c4857600080fd5b82359150610c5860208401610bea565b90509250929050565b60008060408385031215610c7457600080fd5b50508035926020909101359150565b60008060008060008060a08789031215610c9c57600080fd5b863567ffffffffffffffff811115610cb357600080fd5b87016060818a031215610cc557600080fd5b9550610cd360208801610bea565b945060408701359350610ce860608801610bea565b9250608087013567ffffffffffffffff811115610d0457600080fd5b8701601f81018913610d1557600080fd5b803567ffffffffffffffff811115610d2c57600080fd5b896020828401011115610d3e57600080fd5b60208201935080925050509295509295509295565b600080600060608486031215610d6857600080fd5b610d7184610bea565b9250610d7f60208501610bea565b9150610d8d60408501610bea565b90509250925092565b600060208284031215610da857600080fd5b81518015158114610c2e57600080fd5b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b60808152600086357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1883603018112610e3957600080fd5b870160208101903567ffffffffffffffff811115610e5657600080fd5b803603821315610e6557600080fd5b60606080850152610e7a60e085018284610db8565b91505073ffffffffffffffffffffffffffffffffffffffff610e9e60208a01610bea565b1660a0840152604088013560c084015273ffffffffffffffffffffffffffffffffffffffff871660208401528560408401528281036060840152610ee3818587610db8565b9897505050505050505056fea2646970667358221220431a07541a491b54259bdf8fcd05ade6751bfbbf0e72e605f27325b56d7d464f64736f6c634300081a003360e060405234801561001057600080fd5b50604051611bb9380380611bb983398101604081905261002f9161020e565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461006357604051632b2add3d60e01b815260040160405180910390fd5b6001600160a01b038216158061008057506001600160a01b038116155b1561009e5760405163d92e233d60e01b815260040160405180910390fd5b60066100aa8982610360565b5060076100b78882610360565b5060ff861660c05260808590528360028111156100d6576100d661041e565b60a08160028111156100ea576100ea61041e565b905250600192909255600080546001600160a01b039283166001600160a01b03199182161790915560088054929093169116179055506104349350505050565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261015157600080fd5b81516001600160401b0381111561016a5761016a61012a565b604051601f8201601f19908116603f011681016001600160401b03811182821017156101985761019861012a565b6040528181528382016020018510156101b057600080fd5b60005b828110156101cf576020818601810151838301820152016101b3565b506000918101602001919091529392505050565b8051600381106101f257600080fd5b919050565b80516001600160a01b03811681146101f257600080fd5b600080600080600080600080610100898b03121561022b57600080fd5b88516001600160401b0381111561024157600080fd5b61024d8b828c01610140565b60208b015190995090506001600160401b0381111561026b57600080fd5b6102778b828c01610140565b975050604089015160ff8116811461028e57600080fd5b60608a015190965094506102a460808a016101e3565b60a08a015190945092506102ba60c08a016101f7565b91506102c860e08a016101f7565b90509295985092959890939650565b600181811c908216806102eb57607f821691505b60208210810361030b57634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111561035b57806000526020600020601f840160051c810160208510156103385750805b601f840160051c820191505b818110156103585760008155600101610344565b50505b505050565b81516001600160401b038111156103795761037961012a565b61038d8161038784546102d7565b84610311565b6020601f8211600181146103c157600083156103a95750848201515b600019600385901b1c1916600184901b178455610358565b600084815260208120601f198516915b828110156103f157878501518255602094850194600190920191016103d1565b508482101561040f5786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b634e487b7160e01b600052602160045260246000fd5b60805160a05160c05161174861047160003960006102170152600061033a0152600081816102eb01528181610ad70152610bdd01526117486000f3fe608060405234801561001057600080fd5b50600436106101985760003560e01c80638b851b95116100e3578063ccc775991161008c578063eddeb12311610066578063eddeb12314610431578063f2441b3214610444578063f687d12a1461046457600080fd5b8063ccc77599146103a4578063d9eeebed146103b7578063dd62ed3e146103eb57600080fd5b8063a9059cbb116100bd578063a9059cbb14610369578063c70126261461037c578063c835d7cc1461038f57600080fd5b80638b851b951461030d57806395d89b411461032d578063a3413d031461033557600080fd5b80633ce4a5bc116101455780634d8943bb1161011f5780634d8943bb146102a757806370a08231146102b057806385e1f4d0146102e657600080fd5b80633ce4a5bc1461024157806342966c681461028157806347e7ef241461029457600080fd5b806318160ddd1161017657806318160ddd146101f557806323b872dd146101fd578063313ce5671461021057600080fd5b806306fdde031461019d578063091d2788146101bb578063095ea7b3146101d2575b600080fd5b6101a5610477565b6040516101b29190611327565b60405180910390f35b6101c460015481565b6040519081526020016101b2565b6101e56101e0366004611366565b610509565b60405190151581526020016101b2565b6005546101c4565b6101e561020b366004611392565b610520565b60405160ff7f00000000000000000000000000000000000000000000000000000000000000001681526020016101b2565b61025c73735b14bb79463307aacbed86daf3322b1e6226ab81565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101b2565b6101e561028f3660046113d3565b6105b7565b6101e56102a2366004611366565b6105cb565b6101c460025481565b6101c46102be3660046113ec565b73ffffffffffffffffffffffffffffffffffffffff1660009081526003602052604090205490565b6101c47f000000000000000000000000000000000000000000000000000000000000000081565b60085461025c9073ffffffffffffffffffffffffffffffffffffffff1681565b6101a561071f565b61035c7f000000000000000000000000000000000000000000000000000000000000000081565b6040516101b29190611409565b6101e5610377366004611366565b61072e565b6101e561038a366004611479565b61073b565b6103a261039d3660046113ec565b61088a565b005b6103a26103b23660046113ec565b61099e565b6103bf610aab565b6040805173ffffffffffffffffffffffffffffffffffffffff90931683526020830191909152016101b2565b6101c46103f9366004611571565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260046020908152604080832093909416825291909152205490565b6103a261043f3660046113d3565b610cc9565b60005461025c9073ffffffffffffffffffffffffffffffffffffffff1681565b6103a26104723660046113d3565b610d4b565b606060068054610486906115aa565b80601f01602080910402602001604051908101604052809291908181526020018280546104b2906115aa565b80156104ff5780601f106104d4576101008083540402835291602001916104ff565b820191906000526020600020905b8154815290600101906020018083116104e257829003601f168201915b5050505050905090565b6000610516338484610dcd565b5060015b92915050565b600061052d848484610ed6565b73ffffffffffffffffffffffffffffffffffffffff8416600090815260046020908152604080832033845290915290205482811015610598576040517f10bad14700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6105ac85336105a7868561162c565b610dcd565b506001949350505050565b60006105c33383611091565b506001919050565b60003373735b14bb79463307aacbed86daf3322b1e6226ab14801590610609575060005473ffffffffffffffffffffffffffffffffffffffff163314155b801561062d575060085473ffffffffffffffffffffffffffffffffffffffff163314155b15610664576040517fddb5de5e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61066e83836111d3565b6040517f735b14bb79463307aacbed86daf3322b1e6226ab000000000000000000000000602082015273ffffffffffffffffffffffffffffffffffffffff8416907f67fc7bdaed5b0ec550d8706b87d60568ab70c6b781263c70101d54cd1564aab390603401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529082905261070e91869061163f565b60405180910390a250600192915050565b606060078054610486906115aa565b6000610516338484610ed6565b6000806000610748610aab565b6040517f23b872dd00000000000000000000000000000000000000000000000000000000815233600482015273735b14bb79463307aacbed86daf3322b1e6226ab602482015260448101829052919350915073ffffffffffffffffffffffffffffffffffffffff8316906323b872dd906064016020604051808303816000875af11580156107da573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107fe9190611661565b610834576040517f0a7cd6d600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61083e3385611091565b60025460405133917f9ffbffc04a397460ee1dbe8c9503e098090567d6b7f4b3c02a8617d800b6d9559161087791899189918791611683565b60405180910390a2506001949350505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab146108d7576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116610924576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527fd55614e962c5fd6ece71614f6348d702468a997a394dd5e5c1677950226d97ae906020015b60405180910390a150565b3373735b14bb79463307aacbed86daf3322b1e6226ab146109eb576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116610a38576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600880547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527f88815d964e380677e86d817e7d65dea59cb7b4c3b5b7a0c8ec7ea4a74f90a38790602001610993565b600080546040517f0be155470000000000000000000000000000000000000000000000000000000081527f000000000000000000000000000000000000000000000000000000000000000060048201528291829173ffffffffffffffffffffffffffffffffffffffff90911690630be1554790602401602060405180830381865afa158015610b3e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b6291906116b2565b905073ffffffffffffffffffffffffffffffffffffffff8116610bb1576040517f78fff39600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080546040517fd7fd7afb0000000000000000000000000000000000000000000000000000000081527f0000000000000000000000000000000000000000000000000000000000000000600482015273ffffffffffffffffffffffffffffffffffffffff9091169063d7fd7afb90602401602060405180830381865afa158015610c40573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c6491906116cf565b905080600003610ca0576040517fe661aed000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060025460015483610cb391906116e8565b610cbd91906116ff565b92959294509192505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610d16576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60028190556040518181527fef13af88e424b5d15f49c77758542c1938b08b8b95b91ed0751f98ba99000d8f90602001610993565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610d98576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018190556040518181527fff5788270f43bfc1ca41c503606d2594aa3023a1a7547de403a3e2f146a4a80a90602001610993565b73ffffffffffffffffffffffffffffffffffffffff8316610e1a576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216610e67576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff83811660008181526004602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8316610f23576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216610f70576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff831660009081526003602052604090205481811015610fd0576040517ffe382aa700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610fda828261162c565b73ffffffffffffffffffffffffffffffffffffffff808616600090815260036020526040808220939093559085168152908120805484929061101d9084906116ff565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161108391815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff82166110de576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff82166000908152600360205260409020548181101561113e576040517ffe382aa700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611148828261162c565b73ffffffffffffffffffffffffffffffffffffffff84166000908152600360205260408120919091556005805484929061118390849061162c565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90602001610ec9565b73ffffffffffffffffffffffffffffffffffffffff8216611220576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b806005600082825461123291906116ff565b909155505073ffffffffffffffffffffffffffffffffffffffff82166000908152600360205260408120805483929061126c9084906116ff565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6000815180845260005b818110156112e9576020818501810151868301820152016112cd565b5060006020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b60208152600061133a60208301846112c3565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff8116811461136357600080fd5b50565b6000806040838503121561137957600080fd5b823561138481611341565b946020939093013593505050565b6000806000606084860312156113a757600080fd5b83356113b281611341565b925060208401356113c281611341565b929592945050506040919091013590565b6000602082840312156113e557600080fd5b5035919050565b6000602082840312156113fe57600080fd5b813561133a81611341565b6020810160038310611444577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000806040838503121561148c57600080fd5b823567ffffffffffffffff8111156114a357600080fd5b8301601f810185136114b457600080fd5b803567ffffffffffffffff8111156114ce576114ce61144a565b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8501160116810181811067ffffffffffffffff8211171561153a5761153a61144a565b60405281815282820160200187101561155257600080fd5b8160208401602083013760006020928201830152969401359450505050565b6000806040838503121561158457600080fd5b823561158f81611341565b9150602083013561159f81611341565b809150509250929050565b600181811c908216806115be57607f821691505b6020821081036115f7577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8181038181111561051a5761051a6115fd565b60408152600061165260408301856112c3565b90508260208301529392505050565b60006020828403121561167357600080fd5b8151801515811461133a57600080fd5b60808152600061169660808301876112c3565b6020830195909552506040810192909252606090910152919050565b6000602082840312156116c457600080fd5b815161133a81611341565b6000602082840312156116e157600080fd5b5051919050565b808202811582820484141761051a5761051a6115fd565b8082018082111561051a5761051a6115fd56fea26469706673582212204013e39523742118b3f2227e145ee7e48176ba6aebead33c596dca2acb59a74c64736f6c634300081a0033a26469706673582212207465760759c1618d571ccbe09a72466b5d791124360fd095e2c90e31e51a331464736f6c634300081a0033", + Bin: "0x6080604052600c8054600160ff199182168117909255601f80549091169091179055348015602c57600080fd5b5061fe508061003c6000396000f3fe608060405234801561001057600080fd5b506004361061034c5760003560e01c80637f924c4e116101bd578063c2725318116100f9578063e63ab1e9116100a2578063f5a357331161007c578063f5a357331461055a578063fa7626d414610562578063fc6734eb1461056f578063fc79171b1461057757600080fd5b8063e63ab1e914610515578063eba3c49c1461054a578063f06c08941461055257600080fd5b8063df690b9a116100d3578063df690b9a146104fd578063df881f6c14610505578063e20c9f711461050d57600080fd5b8063c2725318146104e5578063c3248272146104ed578063cced12c7146104f557600080fd5b8063996b767511610166578063aed71d9711610140578063aed71d97146104b5578063b0464fdc146104bd578063b5508aa9146104c5578063ba414fa6146104cd57600080fd5b8063996b76751461049d5780639b3272bf146104a55780639b86d40f146104ad57600080fd5b8063916a17c611610197578063916a17c61461047857806394d78f7b1461048d57806396d9d8761461049557600080fd5b80637f924c4e1461045357806382978ffc1461045b57806385226c811461046357600080fd5b806331d099561161028c578063461fc5af11610235578063612aa5491161020f578063612aa5491461042657806366d9a9a01461042e578063720b9aa9146104435780637243a2fb1461044b57600080fd5b8063461fc5af1461040e57806355ea935114610416578063597cfeb01461041e57600080fd5b80633e5e3c23116102665780633e5e3c23146103f65780633f7286f4146103fe57806344b2a40b1461040657600080fd5b806331d09956146103de5780633a25c460146103e65780633ab5b199146103ee57600080fd5b8063198d5ca4116102f95780631fe68797116102d35780631fe68797146103b1578063254ea181146103b95780632ade3880146103c157806330548465146103d657600080fd5b8063198d5ca4146103835780631c785a141461038b5780631ed7831c1461039357600080fd5b8063104b35221161032a578063104b35221461036b57806314b7a6da14610373578063191c9a9e1461037b57600080fd5b806309f080da1461035157806309f92c1f1461035b5780630a9254e414610363575b600080fd5b61035961057f565b005b610359610773565b610359610926565b610359611393565b610359611585565b6103596116eb565b61035961189c565b610359611b56565b61039b61249f565b6040516103a8919061a8fc565b60405180910390f35b610359612501565b610359612a30565b6103c9612be5565b6040516103a8919061a998565b610359612d27565b610359612edc565b61035961309b565b610359613256565b61039b613407565b61039b613467565b6103596134c7565b61035961364f565b61035961380d565b6103596139c0565b610359613d96565b610436613f49565b6040516103a8919061aafe565b6103596140cb565b61035961433e565b6103596144f1565b610359614543565b61046b614693565b6040516103a8919061ab9c565b610480614763565b6040516103a8919061ac13565b61035961485e565b610359614a0d565b610359614b60565b610359614cb4565b610359614e65565b610359615011565b61048061531d565b61046b615418565b6104d56154e8565b60405190151581526020016103a8565b6103596155bc565b610359615775565b61035961592e565b610359615b19565b610359615cd7565b61039b615e8c565b61053c7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b6040519081526020016103a8565b610359615eec565b6103596160aa565b61035961625f565b601f546104d59060ff1681565b610359616416565b6103596165c7565b60006040516020016105909061acaa565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401526001838301528151630618f58760e51b81527f2b2add3d0000000000000000000000000000000000000000000000000000000060048201529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163c31eb0e091602480830192600092919082900301818387803b15801561065a57600080fd5b505af115801561066e573d6000803e3d6000fd5b505060255460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b1580156106cb57600080fd5b505af11580156106df573d6000803e3d6000fd5b50506020546021546024546040517f5af659670000000000000000000000000000000000000000000000000000000081526001600160a01b039384169550635af65967945061073d938793811692600192911690899060040161ad25565b600060405180830381600087803b15801561075757600080fd5b505af115801561076b573d6000803e3d6000fd5b505050505050565b60006040516020016107849061acaa565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401819052600184840152825163ca669fa760e01b815260048101919091529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163ca669fa791602480830192600092919082900301818387803b15801561083257600080fd5b505af1158015610846573d6000803e3d6000fd5b5050604051630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b1580156108b657600080fd5b505af11580156108ca573d6000803e3d6000fd5b50506020546024546040517fbcf7f32b0000000000000000000000000000000000000000000000000000000081526001600160a01b03928316945063bcf7f32b935061073d92869260009260019290911690899060040161ad25565b602580547fffffffffffffffffffffffff000000000000000000000000000000000000000090811630179091556026805490911661123417905560405161096c9061a80f565b604051809103906000f080158015610988573d6000803e3d6000fd5b50602280547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03928316908117909155604080518082018252600f81527f476174657761795a45564d2e736f6c000000000000000000000000000000000060208201526025549151602481019390935292166044820152610a6c919060640160408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f485cc955000000000000000000000000000000000000000000000000000000001790526166fe565b601f80547fffffffffffffffffffffff0000000000000000000000000000000000000000ff166101006001600160a01b039384168102919091179182905560208054919092049092167fffffffffffffffffffffffff000000000000000000000000000000000000000090921682178155604080517f3ce4a5bc0000000000000000000000000000000000000000000000000000000081529051633ce4a5bc926004808401939192918290030181865afa158015610b2e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b52919061ad7a565b602780547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055604051610b969061a81c565b604051809103906000f080158015610bb2573d6000803e3d6000fd5b50602480547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039283161781556027546040517f06447d5600000000000000000000000000000000000000000000000000000000815292166004830152737109709ecfa91a80626ff3989d68f67f5b1dd12d916306447d569101600060405180830381600087803b158015610c4e57600080fd5b505af1158015610c62573d6000803e3d6000fd5b505050506000806000604051610c779061a829565b6001600160a01b03938416815291831660208301529091166040820152606001604051809103906000f080158015610cb3573d6000803e3d6000fd5b50602380547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03928316908117909155602054604051601293600193849360009391921690610d099061a836565b610d189695949392919061ada3565b604051809103906000f080158015610d34573d6000803e3d6000fd5b50602180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039283169081179091556023546040517fee2815ba0000000000000000000000000000000000000000000000000000000081526001600482015260248101929092529091169063ee2815ba90604401600060405180830381600087803b158015610dcb57600080fd5b505af1158015610ddf573d6000803e3d6000fd5b50506023546040517fa7cb050700000000000000000000000000000000000000000000000000000000815260016004820181905260248201526001600160a01b03909116925063a7cb05079150604401600060405180830381600087803b158015610e4957600080fd5b505af1158015610e5d573d6000803e3d6000fd5b50506027546040517fc88a5e6d0000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152633b9aca006024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c88a5e6d9150604401600060405180830381600087803b158015610edd57600080fd5b505af1158015610ef1573d6000803e3d6000fd5b50505050602260009054906101000a90046001600160a01b03166001600160a01b031663d0e30db0600a6040518263ffffffff1660e01b81526004016000604051808303818588803b158015610f4657600080fd5b505af1158015610f5a573d6000803e3d6000fd5b50506022546020546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152600a60248201529116935063095ea7b3925060440190506020604051808303816000875af1158015610fce573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ff2919061ae98565b506021546025546040517f47e7ef240000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620186a060248201529116906347e7ef24906044016020604051808303816000875af1158015611063573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611087919061ae98565b507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b03166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156110e657600080fd5b505af11580156110fa573d6000803e3d6000fd5b50506025546040517f06447d560000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506306447d569150602401600060405180830381600087803b15801561117057600080fd5b505af1158015611184573d6000803e3d6000fd5b50506021546020546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620186a060248201529116925063095ea7b391506044016020604051808303816000875af11580156111f8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061121c919061ae98565b50602260009054906101000a90046001600160a01b03166001600160a01b031663d0e30db0600a6040518263ffffffff1660e01b81526004016000604051808303818588803b15801561126e57600080fd5b505af1158015611282573d6000803e3d6000fd5b50506022546020546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152600a60248201529116935063095ea7b3925060440190506020604051808303816000875af11580156112f6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061131a919061ae98565b507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b03166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561137957600080fd5b505af115801561138d573d6000803e3d6000fd5b50505050565b6040516001906000906113a89060200161acaa565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401526001838301528151630618f58760e51b81527f82d5d76a0000000000000000000000000000000000000000000000000000000060048201529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163c31eb0e091602480830192600092919082900301818387803b15801561147257600080fd5b505af1158015611486573d6000803e3d6000fd5b505060275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b1580156114e357600080fd5b505af11580156114f7573d6000803e3d6000fd5b50506020546027546040517f21501a950000000000000000000000000000000000000000000000000000000081526001600160a01b0392831694506321501a95935061154e9286928992911690889060040161aeba565b600060405180830381600087803b15801561156857600080fd5b505af115801561157c573d6000803e3d6000fd5b50505050505050565b60275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156115de57600080fd5b505af11580156115f2573d6000803e3d6000fd5b5050604051630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b15801561166257600080fd5b505af1158015611676573d6000803e3d6000fd5b50506020546021546040517ff45346dc0000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260016024820152600060448201529116925063f45346dc91506064015b600060405180830381600087803b15801561137957600080fd5b60006040516020016116fc9061acaa565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401819052600184840152825163ca669fa760e01b815260048101919091529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163ca669fa791602480830192600092919082900301818387803b1580156117aa57600080fd5b505af11580156117be573d6000803e3d6000fd5b5050604051630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b15801561182e57600080fd5b505af1158015611842573d6000803e3d6000fd5b50506020546021546040517f309f50040000000000000000000000000000000000000000000000000000000081526001600160a01b03928316945063309f5004935061073d9286921690600190600090899060040161ad25565b6021546026546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260019260009216906370a0823190602401602060405180830381865afa158015611906573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061192a919061aef4565b905061193760008261671d565b60255460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561199057600080fd5b505af11580156119a4573d6000803e3d6000fd5b5050604051630618f58760e51b81527f2b2add3d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b158015611a1457600080fd5b505af1158015611a28573d6000803e3d6000fd5b50506020546021546026546040517ff45346dc0000000000000000000000000000000000000000000000000000000081526001600160a01b0392831660048201526024810188905290821660448201529116925063f45346dc9150606401600060405180830381600087803b158015611aa057600080fd5b505af1158015611ab4573d6000803e3d6000fd5b50506021546026546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260009450911691506370a0823190602401602060405180830381865afa158015611b20573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b44919061aef4565b9050611b5160008261671d565b505050565b60275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015611baf57600080fd5b505af1158015611bc3573d6000803e3d6000fd5b5050602754604080516001600160a01b0390921660248301527f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a60448084019190915281518084039091018152606490920181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb39250611cae919060040161af0d565b600060405180830381600087803b158015611cc857600080fd5b505af1158015611cdc573d6000803e3d6000fd5b50505050602060009054906101000a90046001600160a01b03166001600160a01b0316638456cb596040518163ffffffff1660e01b8152600401600060405180830381600087803b158015611d3057600080fd5b505af1158015611d44573d6000803e3d6000fd5b505060275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b158015611da157600080fd5b505af1158015611db5573d6000803e3d6000fd5b5050602754604080516001600160a01b0390921660248301527f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a60448084019190915281518084039091018152606490920181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb39250611ea0919060040161af0d565b600060405180830381600087803b158015611eba57600080fd5b505af1158015611ece573d6000803e3d6000fd5b50505050602060009054906101000a90046001600160a01b03166001600160a01b0316633f4ba83a6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015611f2257600080fd5b505af1158015611f36573d6000803e3d6000fd5b505060255460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b158015611f9357600080fd5b505af1158015611fa7573d6000803e3d6000fd5b50505050602060009054906101000a90046001600160a01b03166001600160a01b0316638456cb596040518163ffffffff1660e01b8152600401600060405180830381600087803b158015611ffb57600080fd5b505af115801561200f573d6000803e3d6000fd5b5050604051630618f58760e51b81527fd93c066500000000000000000000000000000000000000000000000000000000600482015260019250737109709ecfa91a80626ff3989d68f67f5b1dd12d915063c31eb0e090602401600060405180830381600087803b15801561208257600080fd5b505af1158015612096573d6000803e3d6000fd5b505060275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b1580156120f357600080fd5b505af1158015612107573d6000803e3d6000fd5b50506020546021546026546040517ff45346dc0000000000000000000000000000000000000000000000000000000081526001600160a01b0392831660048201526024810187905290821660448201529116925063f45346dc9150606401600060405180830381600087803b15801561217f57600080fd5b505af1158015612193573d6000803e3d6000fd5b505060255460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b1580156121f057600080fd5b505af1158015612204573d6000803e3d6000fd5b50505050602060009054906101000a90046001600160a01b03166001600160a01b0316633f4ba83a6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561225857600080fd5b505af115801561226c573d6000803e3d6000fd5b50506021546026546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260009450911691506370a08231906024015b602060405180830381865afa1580156122d9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122fd919061aef4565b905061230a60008261671d565b60275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561236357600080fd5b505af1158015612377573d6000803e3d6000fd5b50506020546021546026546040517ff45346dc0000000000000000000000000000000000000000000000000000000081526001600160a01b0392831660048201526024810188905290821660448201529116925063f45346dc9150606401600060405180830381600087803b1580156123ef57600080fd5b505af1158015612403573d6000803e3d6000fd5b50506021546026546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260009450911691506370a0823190602401602060405180830381865afa15801561246f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612493919061aef4565b9050611b51838261671d565b606060168054806020026020016040519081016040528092919081815260200182805480156124f757602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116124d9575b5050505050905090565b6022546027546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260019260009216906370a0823190602401602060405180830381865afa15801561256b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061258f919061aef4565b6022546020546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201529293506000929116906370a0823190602401602060405180830381865afa1580156125fa573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061261e919061aef4565b6024546040519192506001600160a01b031631906000906126419060200161acaa565b60408051601f19818403018152606080840190925260205490911b6bffffffffffffffffffffffff191660808301529150600090806094810160408051808303601f190181529181529082526027546001600160a01b03908116602084015260019282018390526024805492517f81bad6f300000000000000000000000000000000000000000000000000000000815260048101859052908101849052604481018490526064810193909352166084820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b15801561272f57600080fd5b505af1158015612743573d6000803e3d6000fd5b5050602080546040517fcdc8ee677dc5ebe680fb18cebda5e26ba5ea1f0ba504a47e2a9a2ecb476dc98e945061279e93506001600160a01b03909116910160609190911b6bffffffffffffffffffffffff1916815260140190565b60408051601f19818403018152908290526027546020546127ce936001600160a01b03928316928c92169061af20565b60405180910390a160275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561282f57600080fd5b505af1158015612843573d6000803e3d6000fd5b50506020546024546040517f21501a950000000000000000000000000000000000000000000000000000000081526001600160a01b0392831694506321501a95935061289a9286928c92911690889060040161aeba565b600060405180830381600087803b1580156128b457600080fd5b505af11580156128c8573d6000803e3d6000fd5b50506022546027546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260009450911691506370a0823190602401602060405180830381865afa158015612934573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612958919061aef4565b905061296d612967888861afc2565b8261671d565b6022546020546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260009291909116906370a0823190602401602060405180830381865afa1580156129d7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129fb919061aef4565b9050612a07868261671d565b612a26612a14898761afd5565b6024546001600160a01b03163161671d565b5050505050505050565b6000604051602001612a419061acaa565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401819052600184840152825163ca669fa760e01b815260048101919091529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163ca669fa791602480830192600092919082900301818387803b158015612aef57600080fd5b505af1158015612b03573d6000803e3d6000fd5b5050604051630618f58760e51b81527f5d67094f000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b158015612b7357600080fd5b505af1158015612b87573d6000803e3d6000fd5b50506020546021546024546040517fc39aca370000000000000000000000000000000000000000000000000000000081526001600160a01b03938416955063c39aca37945061073d938793811692600092911690899060040161ad25565b6060601e805480602002602001604051908101604052809291908181526020016000905b82821015612d1e57600084815260208082206040805180820182526002870290920180546001600160a01b03168352600181018054835181870281018701909452808452939591948681019491929084015b82821015612d07578382906000526020600020018054612c7a9061afe8565b80601f0160208091040260200160405190810160405280929190818152602001828054612ca69061afe8565b8015612cf35780601f10612cc857610100808354040283529160200191612cf3565b820191906000526020600020905b815481529060010190602001808311612cd657829003601f168201915b505050505081526020019060010190612c5b565b505050508152505081526020019060010190612c09565b50505050905090565b6000604051602001612d389061acaa565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401819052600184840152825163ca669fa760e01b815260048101919091529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163ca669fa791602480830192600092919082900301818387803b158015612de657600080fd5b505af1158015612dfa573d6000803e3d6000fd5b5050604051630618f58760e51b81527f5d67094f000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b158015612e6a57600080fd5b505af1158015612e7e573d6000803e3d6000fd5b50506020546021546024546040517f309f50040000000000000000000000000000000000000000000000000000000081526001600160a01b03938416955063309f5004945061073d938793811692600092911690899060040161ad25565b6000604051602001612eed9061acaa565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401526001838301528151630618f58760e51b81527f2b2add3d0000000000000000000000000000000000000000000000000000000060048201529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163c31eb0e091602480830192600092919082900301818387803b158015612fb757600080fd5b505af1158015612fcb573d6000803e3d6000fd5b505060255460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa791506024015b600060405180830381600087803b15801561302957600080fd5b505af115801561303d573d6000803e3d6000fd5b50506020546021546024546040517f309f50040000000000000000000000000000000000000000000000000000000081526001600160a01b03938416955063309f5004945061073d938793811692600192911690899060040161ad25565b6040516001906000906130b09060200161acaa565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401526001838301528151630618f58760e51b81527f2b2add3d0000000000000000000000000000000000000000000000000000000060048201529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163c31eb0e091602480830192600092919082900301818387803b15801561317a57600080fd5b505af115801561318e573d6000803e3d6000fd5b505060255460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b1580156131eb57600080fd5b505af11580156131ff573d6000803e3d6000fd5b50506020546024546040517f21501a950000000000000000000000000000000000000000000000000000000081526001600160a01b0392831694506321501a95935061154e9286928992911690889060040161aeba565b60006040516020016132679061acaa565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401819052600184840152825163ca669fa760e01b815260048101919091529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163ca669fa791602480830192600092919082900301818387803b15801561331557600080fd5b505af1158015613329573d6000803e3d6000fd5b5050604051630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b15801561339957600080fd5b505af11580156133ad573d6000803e3d6000fd5b50506020546021546040517fbcf7f32b0000000000000000000000000000000000000000000000000000000081526001600160a01b03928316945063bcf7f32b935061073d9286921690600190600090899060040161ad25565b606060188054806020026020016040519081016040528092919081815260200182805480156124f7576020028201919060005260206000209081546001600160a01b031681526001909101906020018083116124d9575050505050905090565b606060178054806020026020016040519081016040528092919081815260200182805480156124f7576020028201919060005260206000209081546001600160a01b031681526001909101906020018083116124d9575050505050905090565b60275460405163ca669fa760e01b81526001600160a01b039091166004820152600190737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561352357600080fd5b505af1158015613537573d6000803e3d6000fd5b5050604051630618f58760e51b81527f82d5d76a000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b1580156135a757600080fd5b505af11580156135bb573d6000803e3d6000fd5b50506020546021546027546040517ff45346dc0000000000000000000000000000000000000000000000000000000081526001600160a01b0392831660048201526024810187905290821660448201529116925063f45346dc91506064015b600060405180830381600087803b15801561363457600080fd5b505af1158015613648573d6000803e3d6000fd5b5050505050565b60006040516020016136609061acaa565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401526001838301528151630618f58760e51b81527f2b2add3d0000000000000000000000000000000000000000000000000000000060048201529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163c31eb0e091602480830192600092919082900301818387803b15801561372a57600080fd5b505af115801561373e573d6000803e3d6000fd5b505060255460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b15801561379b57600080fd5b505af11580156137af573d6000803e3d6000fd5b50506020546021546024546040517fc39aca370000000000000000000000000000000000000000000000000000000081526001600160a01b03938416955063c39aca37945061073d938793811692600192911690899060040161ad25565b600060405160200161381e9061acaa565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401819052600184840152825163ca669fa760e01b815260048101919091529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163ca669fa791602480830192600092919082900301818387803b1580156138cc57600080fd5b505af11580156138e0573d6000803e3d6000fd5b5050604051630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b15801561395057600080fd5b505af1158015613964573d6000803e3d6000fd5b50506020546024546040517f5af659670000000000000000000000000000000000000000000000000000000081526001600160a01b039283169450635af65967935061073d92869260009260019290911690899060040161ad25565b602154602480546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260009391909116916370a082319101602060405180830381865afa158015613a29573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a4d919061aef4565b9050613a5a60008261671d565b6000604051602001613a6b9061acaa565b60408051601f19818403018152606080840190925260205490911b6bffffffffffffffffffffffff191660808301529150600090806094810160408051808303601f190181529181529082526027546001600160a01b03908116602084015260019282018390526024805492517f81bad6f300000000000000000000000000000000000000000000000000000000815260048101859052908101849052604481018490526064810193909352166084820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b158015613b5957600080fd5b505af1158015613b6d573d6000803e3d6000fd5b5050602080546040517fcdc8ee677dc5ebe680fb18cebda5e26ba5ea1f0ba504a47e2a9a2ecb476dc98e9450613bc893506001600160a01b03909116910160609190911b6bffffffffffffffffffffffff1916815260140190565b60408051601f1981840301815290829052602754602054613bf9936001600160a01b0392831692600192169061af20565b60405180910390a160275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015613c5a57600080fd5b505af1158015613c6e573d6000803e3d6000fd5b50506020546021546024546040517fc39aca370000000000000000000000000000000000000000000000000000000081526001600160a01b03938416955063c39aca379450613ccc938793811692600192911690899060040161ad25565b600060405180830381600087803b158015613ce657600080fd5b505af1158015613cfa573d6000803e3d6000fd5b5050602154602480546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260009550921692506370a082319101602060405180830381865afa158015613d65573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613d89919061aef4565b905061138d60018261671d565b6000604051602001613da79061acaa565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401819052600184840152825163ca669fa760e01b815260048101919091529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163ca669fa791602480830192600092919082900301818387803b158015613e5557600080fd5b505af1158015613e69573d6000803e3d6000fd5b5050604051630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b158015613ed957600080fd5b505af1158015613eed573d6000803e3d6000fd5b50506020546024546040517fc39aca370000000000000000000000000000000000000000000000000000000081526001600160a01b03928316945063c39aca37935061073d92869260009260019290911690899060040161ad25565b6060601b805480602002602001604051908101604052809291908181526020016000905b82821015612d1e5783829060005260206000209060020201604051806040016040529081600082018054613fa09061afe8565b80601f0160208091040260200160405190810160405280929190818152602001828054613fcc9061afe8565b80156140195780601f10613fee57610100808354040283529160200191614019565b820191906000526020600020905b815481529060010190602001808311613ffc57829003601f168201915b50505050508152602001600182018054806020026020016040519081016040528092919081815260200182805480156140b357602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190600401906020826003010492830192600103820291508084116140605790505b50505050508152505081526020019060010190613f6d565b60006040516020016140dc9061acaa565b60408051601f19818403018152606080840190925260205490911b6bffffffffffffffffffffffff191660808301529150600090806094810160408051808303601f190181529181529082526027546001600160a01b03908116602084015260019282018390526024805492517f81bad6f300000000000000000000000000000000000000000000000000000000815260048101859052908101849052604481018490526064810193909352166084820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b1580156141ca57600080fd5b505af11580156141de573d6000803e3d6000fd5b5050602080546040517fcdc8ee677dc5ebe680fb18cebda5e26ba5ea1f0ba504a47e2a9a2ecb476dc98e945061423993506001600160a01b03909116910160609190911b6bffffffffffffffffffffffff1916815260140190565b60408051601f198184030181529082905260275460205461426a936001600160a01b0392831692600192169061af20565b60405180910390a160275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa7906024015b600060405180830381600087803b1580156142cc57600080fd5b505af11580156142e0573d6000803e3d6000fd5b50506020546021546024546040517fbcf7f32b0000000000000000000000000000000000000000000000000000000081526001600160a01b03938416955063bcf7f32b945061073d938793811692600192911690899060040161ad25565b600060405160200161434f9061acaa565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401819052600184840152825163ca669fa760e01b815260048101919091529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163ca669fa791602480830192600092919082900301818387803b1580156143fd57600080fd5b505af1158015614411573d6000803e3d6000fd5b5050604051630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b15801561448157600080fd5b505af1158015614495573d6000803e3d6000fd5b50506020546024546040517f309f50040000000000000000000000000000000000000000000000000000000081526001600160a01b03928316945063309f5004935061073d92869260009260019290911690899060040161ad25565b6021546026546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260019260009216906370a08231906024016122bc565b60275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561459c57600080fd5b505af11580156145b0573d6000803e3d6000fd5b5050604051630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b15801561462057600080fd5b505af1158015614634573d6000803e3d6000fd5b50506020546026546040517ff45346dc00000000000000000000000000000000000000000000000000000000815260006004820152600160248201526001600160a01b0391821660448201529116925063f45346dc91506064016116d1565b6060601a805480602002602001604051908101604052809291908181526020016000905b82821015612d1e5783829060005260206000200180546146d69061afe8565b80601f01602080910402602001604051908101604052809291908181526020018280546147029061afe8565b801561474f5780601f106147245761010080835404028352916020019161474f565b820191906000526020600020905b81548152906001019060200180831161473257829003601f168201915b5050505050815260200190600101906146b7565b6060601d805480602002602001604051908101604052809291908181526020016000905b82821015612d1e5760008481526020908190206040805180820182526002860290920180546001600160a01b0316835260018101805483518187028101870190945280845293949193858301939283018282801561484657602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190600401906020826003010492830192600103820291508084116147f35790505b50505050508152505081526020019060010190614787565b600060405160200161486f9061acaa565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401819052600184840152825163ca669fa760e01b815260048101919091529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163ca669fa791602480830192600092919082900301818387803b15801561491d57600080fd5b505af1158015614931573d6000803e3d6000fd5b5050604051630618f58760e51b81527f19c08f49000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b1580156149a157600080fd5b505af11580156149b5573d6000803e3d6000fd5b50506020546021546040517f21501a950000000000000000000000000000000000000000000000000000000081526001600160a01b0392831694506321501a95935061073d928692600092911690889060040161aeba565b60275460405163ca669fa760e01b81526001600160a01b039091166004820152600190737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015614a6957600080fd5b505af1158015614a7d573d6000803e3d6000fd5b5050604051630618f58760e51b81527f82d5d76a000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b158015614aed57600080fd5b505af1158015614b01573d6000803e3d6000fd5b50506020546021546040517ff45346dc0000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260248101869052911660448201819052925063f45346dc915060640161361a565b60275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015614bb957600080fd5b505af1158015614bcd573d6000803e3d6000fd5b5050604051630618f58760e51b81527f5d67094f000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b158015614c3d57600080fd5b505af1158015614c51573d6000803e3d6000fd5b50506020546021546026546040517ff45346dc0000000000000000000000000000000000000000000000000000000081526001600160a01b0392831660048201526000602482015290821660448201529116925063f45346dc91506064016116d1565b6000604051602001614cc59061acaa565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401819052600184840152825163ca669fa760e01b815260048101919091529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163ca669fa791602480830192600092919082900301818387803b158015614d7357600080fd5b505af1158015614d87573d6000803e3d6000fd5b5050604051630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b158015614df757600080fd5b505af1158015614e0b573d6000803e3d6000fd5b50506020546021546040517fc39aca370000000000000000000000000000000000000000000000000000000081526001600160a01b03928316945063c39aca37935061073d9286921690600190600090899060040161ad25565b6000604051602001614e769061acaa565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401819052600184840152825163ca669fa760e01b815260048101919091529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163ca669fa791602480830192600092919082900301818387803b158015614f2457600080fd5b505af1158015614f38573d6000803e3d6000fd5b5050604051630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b158015614fa857600080fd5b505af1158015614fbc573d6000803e3d6000fd5b50506020546040517f21501a950000000000000000000000000000000000000000000000000000000081526001600160a01b0390911692506321501a95915061073d908490600190600090889060040161aeba565b602154602480546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260009391909116916370a082319101602060405180830381865afa15801561507a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061509e919061aef4565b90506150ab60008261671d565b60006040516020016150bc9061acaa565b60408051601f19818403018152606080840190925260205490911b6bffffffffffffffffffffffff191660808301529150600090806094810160408051808303601f190181529181529082526027546001600160a01b03908116602084015260019282018390526024805492517f81bad6f300000000000000000000000000000000000000000000000000000000815260048101859052908101849052604481018490526064810193909352166084820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b1580156151aa57600080fd5b505af11580156151be573d6000803e3d6000fd5b5050602080546040517ffdc887992b033668833927e252058e468fac0b6bd196d520f09c61b740e99948945061521993506001600160a01b03909116910160609190911b6bffffffffffffffffffffffff1916815260140190565b60408051601f198184030181529082905260275460205461524a936001600160a01b0392831692600192169061af20565b60405180910390a160275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156152ab57600080fd5b505af11580156152bf573d6000803e3d6000fd5b50506020546021546024546040517f5af659670000000000000000000000000000000000000000000000000000000081526001600160a01b039384169550635af659679450613ccc938793811692600192911690899060040161ad25565b6060601c805480602002602001604051908101604052809291908181526020016000905b82821015612d1e5760008481526020908190206040805180820182526002860290920180546001600160a01b0316835260018101805483518187028101870190945280845293949193858301939283018282801561540057602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190600401906020826003010492830192600103820291508084116153ad5790505b50505050508152505081526020019060010190615341565b60606019805480602002602001604051908101604052809291908181526020016000905b82821015612d1e57838290600052602060002001805461545b9061afe8565b80601f01602080910402602001604051908101604052809291908181526020018280546154879061afe8565b80156154d45780601f106154a9576101008083540402835291602001916154d4565b820191906000526020600020905b8154815290600101906020018083116154b757829003601f168201915b50505050508152602001906001019061543c565b60085460009060ff1615615500575060085460ff1690565b6040517f667f9d70000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d600482018190527f6661696c65640000000000000000000000000000000000000000000000000000602483015260009163667f9d7090604401602060405180830381865afa158015615591573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906155b5919061aef4565b1415905090565b60006040516020016155cd9061acaa565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401526001838301528151630618f58760e51b81527f82d5d76a0000000000000000000000000000000000000000000000000000000060048201529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163c31eb0e091602480830192600092919082900301818387803b15801561569757600080fd5b505af11580156156ab573d6000803e3d6000fd5b505060275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b15801561570857600080fd5b505af115801561571c573d6000803e3d6000fd5b50506020546021546040517fc39aca370000000000000000000000000000000000000000000000000000000081526001600160a01b03928316945063c39aca37935061073d92869216906001908690899060040161ad25565b60006040516020016157869061acaa565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401526001838301528151630618f58760e51b81527f82d5d76a0000000000000000000000000000000000000000000000000000000060048201529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163c31eb0e091602480830192600092919082900301818387803b15801561585057600080fd5b505af1158015615864573d6000803e3d6000fd5b505060275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b1580156158c157600080fd5b505af11580156158d5573d6000803e3d6000fd5b50506020546021546040517f5af659670000000000000000000000000000000000000000000000000000000081526001600160a01b039283169450635af65967935061073d92869216906001908690899060040161ad25565b600060405160200161593f9061acaa565b60408051601f19818403018152606080840190925260205490911b6bffffffffffffffffffffffff191660808301529150600090806094810160408051808303601f190181529181529082526027546001600160a01b03908116602084015260019282018390526024805492517f81bad6f300000000000000000000000000000000000000000000000000000000815260048101859052908101849052604481018490526064810193909352166084820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b158015615a2d57600080fd5b505af1158015615a41573d6000803e3d6000fd5b5050602080546040517ffdc887992b033668833927e252058e468fac0b6bd196d520f09c61b740e999489450615a9c93506001600160a01b03909116910160609190911b6bffffffffffffffffffffffff1916815260140190565b60408051601f1981840301815290829052602754602054615acd936001600160a01b0392831692600192169061af20565b60405180910390a160275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa79060240161300f565b6000604051602001615b2a9061acaa565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401526001838301528151630618f58760e51b81527f82d5d76a0000000000000000000000000000000000000000000000000000000060048201529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163c31eb0e091602480830192600092919082900301818387803b158015615bf457600080fd5b505af1158015615c08573d6000803e3d6000fd5b505060275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b158015615c6557600080fd5b505af1158015615c79573d6000803e3d6000fd5b50506020546021546027546040517fc39aca370000000000000000000000000000000000000000000000000000000081526001600160a01b03938416955063c39aca37945061073d938793811692600192911690899060040161ad25565b6000604051602001615ce89061acaa565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401819052600184840152825163ca669fa760e01b815260048101919091529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163ca669fa791602480830192600092919082900301818387803b158015615d9657600080fd5b505af1158015615daa573d6000803e3d6000fd5b5050604051630618f58760e51b81527f5d67094f000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b158015615e1a57600080fd5b505af1158015615e2e573d6000803e3d6000fd5b50506020546021546024546040517fbcf7f32b0000000000000000000000000000000000000000000000000000000081526001600160a01b03938416955063bcf7f32b945061073d938793811692600092911690899060040161ad25565b606060158054806020026020016040519081016040528092919081815260200182805480156124f7576020028201919060005260206000209081546001600160a01b031681526001909101906020018083116124d9575050505050905090565b6000604051602001615efd9061acaa565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401526001838301528151630618f58760e51b81527f82d5d76a0000000000000000000000000000000000000000000000000000000060048201529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163c31eb0e091602480830192600092919082900301818387803b158015615fc757600080fd5b505af1158015615fdb573d6000803e3d6000fd5b505060275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b15801561603857600080fd5b505af115801561604c573d6000803e3d6000fd5b50506020546021546027546040517f5af659670000000000000000000000000000000000000000000000000000000081526001600160a01b039384169550635af65967945061073d938793811692600192911690899060040161ad25565b60006040516020016160bb9061acaa565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401819052600184840152825163ca669fa760e01b815260048101919091529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163ca669fa791602480830192600092919082900301818387803b15801561616957600080fd5b505af115801561617d573d6000803e3d6000fd5b5050604051630618f58760e51b81527f5d67094f000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b1580156161ed57600080fd5b505af1158015616201573d6000803e3d6000fd5b50506020546021546024546040517f5af659670000000000000000000000000000000000000000000000000000000081526001600160a01b039384169550635af65967945061073d938793811692600092911690899060040161ad25565b6040516001906000906162749060200161acaa565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401526001838301528151630618f58760e51b81527f82d5d76a0000000000000000000000000000000000000000000000000000000060048201529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163c31eb0e091602480830192600092919082900301818387803b15801561633e57600080fd5b505af1158015616352573d6000803e3d6000fd5b505060275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b1580156163af57600080fd5b505af11580156163c3573d6000803e3d6000fd5b50506020546040517f21501a950000000000000000000000000000000000000000000000000000000081526001600160a01b0390911692506321501a95915061154e90849087908590889060040161aeba565b60006040516020016164279061acaa565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401819052600184840152825163ca669fa760e01b815260048101919091529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163ca669fa791602480830192600092919082900301818387803b1580156164d557600080fd5b505af11580156164e9573d6000803e3d6000fd5b5050604051630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b15801561655957600080fd5b505af115801561656d573d6000803e3d6000fd5b50506020546021546040517f5af659670000000000000000000000000000000000000000000000000000000081526001600160a01b039283169450635af65967935061073d9286921690600190600090899060040161ad25565b60006040516020016165d89061acaa565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401526001838301528151630618f58760e51b81527f2b2add3d0000000000000000000000000000000000000000000000000000000060048201529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163c31eb0e091602480830192600092919082900301818387803b1580156166a257600080fd5b505af11580156166b6573d6000803e3d6000fd5b505060255460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa791506024016142b2565b600061670861a843565b61671384848361679c565b9150505b92915050565b6040517f98296c540000000000000000000000000000000000000000000000000000000081526004810183905260248101829052737109709ecfa91a80626ff3989d68f67f5b1dd12d906398296c549060440160006040518083038186803b15801561678857600080fd5b505afa15801561076b573d6000803e3d6000fd5b6000806167a98584616817565b905061680c6040518060400160405280601d81526020017f4552433139363750726f78792e736f6c3a4552433139363750726f787900000081525082866040516020016167f792919061b035565b60405160208183030381529060405285616823565b9150505b9392505050565b60006168108383616851565b60c081015151600090156168475761684084848460c0015161686c565b9050616810565b6168408484616a12565b600061685d8383616afd565b61681083836020015184616823565b600080616877616b0d565b905060006168858683616be0565b9050600061689c8260600151836020015185617086565b905060006168ac83838989617298565b905060006168b982618115565b602081015181519192509060030b1561692c578982604001516040516020016168e392919061b057565b60408051601f19818403018152908290527f08c379a00000000000000000000000000000000000000000000000000000000082526169239160040161af0d565b60405180910390fd5b600061696f6040518060400160405280601581526020017f4465706c6f79656420746f20616464726573733a2000000000000000000000008152508360016182e4565b6040517fc6ce059d000000000000000000000000000000000000000000000000000000008152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c6ce059d906169c290849060040161af0d565b602060405180830381865afa1580156169df573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190616a03919061ad7a565b9b9a5050505050505050505050565b6040517f8d1cc9250000000000000000000000000000000000000000000000000000000081526000908190737109709ecfa91a80626ff3989d68f67f5b1dd12d90638d1cc92590616a6790879060040161af0d565b600060405180830381865afa158015616a84573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052616aac919081019061b1c0565b90506000616ada8285604051602001616ac692919061b1f5565b6040516020818303038152906040526184e4565b90506001600160a01b0381166167135784846040516020016168e392919061b224565b616b09828260006184f7565b5050565b604080518082018252600381527f6f75740000000000000000000000000000000000000000000000000000000000602082015290517fd145736c000000000000000000000000000000000000000000000000000000008152606091737109709ecfa91a80626ff3989d68f67f5b1dd12d91829063d145736c90616b9490849060040161b2cf565b600060405180830381865afa158015616bb1573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052616bd9919081019061b316565b9250505090565b616c126040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b6000737109709ecfa91a80626ff3989d68f67f5b1dd12d9050616c5d6040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b616c66856185fa565b60208201526000616c76866189df565b90506000836001600160a01b031663d930a0e66040518163ffffffff1660e01b8152600401600060405180830381865afa158015616cb8573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052616ce0919081019061b316565b86838560200151604051602001616cfa949392919061b35f565b60408051601f19818403018152908290527f60f9bb1100000000000000000000000000000000000000000000000000000000825291506000906001600160a01b038616906360f9bb1190616d5290859060040161af0d565b600060405180830381865afa158015616d6f573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052616d97919081019061b316565b6040517fdb4235f60000000000000000000000000000000000000000000000000000000081529091506001600160a01b0386169063db4235f690616ddf90849060040161b463565b602060405180830381865afa158015616dfc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190616e20919061ae98565b616e3557816040516020016168e3919061b4b5565b6040517f49c4fac80000000000000000000000000000000000000000000000000000000081526001600160a01b038616906349c4fac890616e7a90849060040161b547565b600060405180830381865afa158015616e97573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052616ebf919081019061b316565b84526040517fdb4235f60000000000000000000000000000000000000000000000000000000081526001600160a01b0386169063db4235f690616f0690849060040161b599565b602060405180830381865afa158015616f23573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190616f47919061ae98565b15616fdc576040517f49c4fac80000000000000000000000000000000000000000000000000000000081526001600160a01b038616906349c4fac890616f9190849060040161b599565b600060405180830381865afa158015616fae573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052616fd6919081019061b316565b60408501525b846001600160a01b03166349c4fac8828660000151604051602001617001919061b5eb565b6040516020818303038152906040526040518363ffffffff1660e01b815260040161702d92919061b657565b600060405180830381865afa15801561704a573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052617072919081019061b316565b606085015250608083015250949350505050565b60408051600480825260a0820190925260609160009190816020015b60608152602001906001900390816170a25790505090506040518060400160405280600481526020017f6772657000000000000000000000000000000000000000000000000000000000815250816000815181106171025761710261b67c565b60200260200101819052506040518060400160405280600381526020017f2d726c0000000000000000000000000000000000000000000000000000000000815250816001815181106171565761715661b67c565b602002602001018190525084604051602001617172919061b6ab565b604051602081830303815290604052816002815181106171945761719461b67c565b6020026020010181905250826040516020016171b0919061b717565b604051602081830303815290604052816003815181106171d2576171d261b67c565b602002602001018190525060006171e882618115565b602080820151604080518082018252600581527f2e6a736f6e00000000000000000000000000000000000000000000000000000081850190815282518084018452600080825290860152825180840190935290518252928101929092529192506172799060408051808201825260008082526020918201528151808301909252845182528085019082015290618c62565b61728e57856040516020016168e3919061b758565b9695505050505050565b60a0810151604080518082018252600080825260209182015281518083019092528251808352928101910152606090737109709ecfa91a80626ff3989d68f67f5b1dd12d90156172e8565b511590565b61745c578260200151156173a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605860248201527f54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f742060448201527f62652075736564207768656e207468652060736b6970566572696679536f757260648201527f6365436f646560206f7074696f6e206973206074727565600000000000000000608482015260a401616923565b8260c001511561745c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605360248201527f54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f742060448201527f62652075736564207768656e207468652060736b69704c6963656e736554797060648201527f6560206f7074696f6e2069732060747275656000000000000000000000000000608482015260a401616923565b6040805160ff8082526120008201909252600091816020015b606081526020019060019003908161747557905050905060006040518060400160405280600381526020017f6e707800000000000000000000000000000000000000000000000000000000008152508282806174d09061b7e9565b935060ff16815181106174e5576174e561b67c565b60200260200101819052506040518060400160405280600d81526020017f302e302e312d616c7068612e3700000000000000000000000000000000000000815250604051602001617536919061b808565b6040516020818303038152906040528282806175519061b7e9565b935060ff16815181106175665761756661b67c565b60200260200101819052506040518060400160405280600681526020017f6465706c6f7900000000000000000000000000000000000000000000000000008152508282806175b39061b7e9565b935060ff16815181106175c8576175c861b67c565b60200260200101819052506040518060400160405280600e81526020017f2d2d636f6e74726163744e616d650000000000000000000000000000000000008152508282806176159061b7e9565b935060ff168151811061762a5761762a61b67c565b602002602001018190525087602001518282806176469061b7e9565b935060ff168151811061765b5761765b61b67c565b60200260200101819052506040518060400160405280600e81526020017f2d2d636f6e7472616374506174680000000000000000000000000000000000008152508282806176a89061b7e9565b935060ff16815181106176bd576176bd61b67c565b6020908102919091010152875182826176d58161b7e9565b935060ff16815181106176ea576176ea61b67c565b60200260200101819052506040518060400160405280600981526020017f2d2d636861696e496400000000000000000000000000000000000000000000008152508282806177379061b7e9565b935060ff168151811061774c5761774c61b67c565b602002602001018190525061776046618cc3565b828261776b8161b7e9565b935060ff16815181106177805761778061b67c565b60200260200101819052506040518060400160405280600f81526020017f2d2d6275696c64496e666f46696c6500000000000000000000000000000000008152508282806177cd9061b7e9565b935060ff16815181106177e2576177e261b67c565b6020026020010181905250868282806177fa9061b7e9565b935060ff168151811061780f5761780f61b67c565b60209081029190910101528551156179365760408051808201909152601581527f2d2d636f6e7374727563746f7242797465636f64650000000000000000000000602082015282826178608161b7e9565b935060ff16815181106178755761787561b67c565b60209081029190910101526040517f71aad10d0000000000000000000000000000000000000000000000000000000081526001600160a01b038416906371aad10d906178c590899060040161af0d565b600060405180830381865afa1580156178e2573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261790a919081019061b316565b82826179158161b7e9565b935060ff168151811061792a5761792a61b67c565b60200260200101819052505b846020015115617a065760408051808201909152601281527f2d2d766572696679536f75726365436f646500000000000000000000000000006020820152828261797f8161b7e9565b935060ff16815181106179945761799461b67c565b60200260200101819052506040518060400160405280600581526020017f66616c73650000000000000000000000000000000000000000000000000000008152508282806179e19061b7e9565b935060ff16815181106179f6576179f661b67c565b6020026020010181905250617bcd565b617a3e6172e38660a0015160408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b617ad15760408051808201909152600d81527f2d2d6c6963656e7365547970650000000000000000000000000000000000000060208201528282617a818161b7e9565b935060ff1681518110617a9657617a9661b67c565b60200260200101819052508460a00151604051602001617ab6919061b6ab565b6040516020818303038152906040528282806179e19061b7e9565b8460c00151158015617b14575060408089015181518083018352600080825260209182015282518084019093528151835290810190820152617b1290511590565b155b15617bcd5760408051808201909152600d81527f2d2d6c6963656e7365547970650000000000000000000000000000000000000060208201528282617b588161b7e9565b935060ff1681518110617b6d57617b6d61b67c565b6020026020010181905250617b8188618d63565b604051602001617b91919061b6ab565b604051602081830303815290604052828280617bac9061b7e9565b935060ff1681518110617bc157617bc161b67c565b60200260200101819052505b60408086015181518083018352600080825260209182015282518084019093528151835290810190820152617c0190511590565b617c965760408051808201909152600b81527f2d2d72656c61796572496400000000000000000000000000000000000000000060208201528282617c448161b7e9565b935060ff1681518110617c5957617c5961b67c565b60200260200101819052508460400151828280617c759061b7e9565b935060ff1681518110617c8a57617c8a61b67c565b60200260200101819052505b606085015115617db75760408051808201909152600681527f2d2d73616c74000000000000000000000000000000000000000000000000000060208201528282617cdf8161b7e9565b935060ff1681518110617cf457617cf461b67c565b602090810291909101015260608501516040517fb11a19e800000000000000000000000000000000000000000000000000000000815260048101919091526001600160a01b0384169063b11a19e890602401600060405180830381865afa158015617d63573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052617d8b919081019061b316565b8282617d968161b7e9565b935060ff1681518110617dab57617dab61b67c565b60200260200101819052505b60e08501515115617e5e5760408051808201909152600a81527f2d2d6761734c696d69740000000000000000000000000000000000000000000060208201528282617e018161b7e9565b935060ff1681518110617e1657617e1661b67c565b6020026020010181905250617e328560e0015160000151618cc3565b8282617e3d8161b7e9565b935060ff1681518110617e5257617e5261b67c565b60200260200101819052505b60e08501516020015115617f085760408051808201909152600a81527f2d2d67617350726963650000000000000000000000000000000000000000000060208201528282617eab8161b7e9565b935060ff1681518110617ec057617ec061b67c565b6020026020010181905250617edc8560e0015160200151618cc3565b8282617ee78161b7e9565b935060ff1681518110617efc57617efc61b67c565b60200260200101819052505b60e08501516040015115617fb25760408051808201909152600e81527f2d2d6d617846656550657247617300000000000000000000000000000000000060208201528282617f558161b7e9565b935060ff1681518110617f6a57617f6a61b67c565b6020026020010181905250617f868560e0015160400151618cc3565b8282617f918161b7e9565b935060ff1681518110617fa657617fa661b67c565b60200260200101819052505b60e0850151606001511561805c5760408051808201909152601681527f2d2d6d61785072696f726974794665655065724761730000000000000000000060208201528282617fff8161b7e9565b935060ff16815181106180145761801461b67c565b60200260200101819052506180308560e0015160600151618cc3565b828261803b8161b7e9565b935060ff16815181106180505761805061b67c565b60200260200101819052505b60008160ff1667ffffffffffffffff81111561807a5761807a61b0d8565b6040519080825280602002602001820160405280156180ad57816020015b60608152602001906001900390816180985790505b50905060005b8260ff168160ff16101561810657838160ff16815181106180d6576180d661b67c565b6020026020010151828260ff16815181106180f3576180f361b67c565b60209081029190910101526001016180b3565b5093505050505b949350505050565b61813c6040518060600160405280600060030b815260200160608152602001606081525090565b60408051808201825260048082527f6261736800000000000000000000000000000000000000000000000000000000602083015291517fd145736c000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d92600091849163d145736c916181c29186910161b873565b600060405180830381865afa1580156181df573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052618207919081019061b316565b905060006182158683619852565b90506000846001600160a01b031663f45c1ce7836040518263ffffffff1660e01b8152600401618245919061ab9c565b6000604051808303816000875af1158015618264573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261828c919081019061b8ba565b805190915060030b158015906182a55750602081015151155b80156182b45750604081015151155b1561728e57816000815181106182cc576182cc61b67c565b60200260200101516040516020016168e3919061b970565b606060006183198560408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6040805180820182526000808252602091820152815180830190925286518252808701908201529091506183509082905b906199a7565b156184ad5760006183cd826183c7846183c16183938a60408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6040805180820182526000808252602091820152815180830190925282518252918201519181019190915290565b906199ce565b90619a30565b604080518082018252600181527f0a00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201529091506184319082906199a7565b1561849b57604080518082018252600181527f0a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152618498905b8290619ab5565b90505b6184a481619adb565b92505050616810565b82156184c65784846040516020016168e392919061bb5c565b5050604080516020810190915260008152616810565b509392505050565b6000808251602084016000f09392505050565b8160a001511561850657505050565b6000618513848484619b44565b9050600061852082618115565b602081015181519192509060030b1580156185bc5750604080518082018252600781527f5355434345535300000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526185bc9060408051808201825260008082526020918201528151808301909252845182528085019082015261834a565b156185c957505050505050565b604082015151156185e95781604001516040516020016168e3919061bc03565b806040516020016168e3919061bc61565b6060600061862f8360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600481527f2e736f6c0000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152909150618694905b8290618c62565b1561870357604080518082018252600481527f2e736f6c0000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616810906186fe90839061a0df565b619adb565b604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152618765905b829061a169565b60010361883257604080518082018252600181527f3a00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526187cb90618491565b50604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616810906186fe905b8390619ab5565b604080518082018252600581527f2e6a736f6e000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526188919061868d565b156189c857604080518082018252600181527f2f000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201819052845180860190955292518452830152906188f990839061a203565b90506000816001835161890c919061afc2565b8151811061891c5761891c61b67c565b602002602001015190506189bf6186fe6189926040518060400160405280600581526020017f2e6a736f6e00000000000000000000000000000000000000000000000000000081525060408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6040805180820182526000808252602091820152815180830190925285518252808601908201529061a0df565b95945050505050565b826040516020016168e3919061bccc565b50919050565b60606000618a148360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600481527f2e736f6c0000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152909150618a769061868d565b15618a845761681081619adb565b604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152618ae39061875e565b600103618b4d57604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616810906186fe9061882b565b604080518082018252600581527f2e6a736f6e00000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152618bac9061868d565b156189c857604080518082018252600181527f2f00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820181905284518086019095529251845283015290618c1490839061a203565b9050600181511115618c50578060028251618c2f919061afc2565b81518110618c3f57618c3f61b67c565b602002602001015192505050919050565b50826040516020016168e3919061bccc565b805182516000911115618c7757506000616717565b81518351602085015160009291618c8d9161afd5565b618c97919061afc2565b905082602001518103618cae576001915050616717565b82516020840151819020912014905092915050565b60606000618cd08361a2a8565b600101905060008167ffffffffffffffff811115618cf057618cf061b0d8565b6040519080825280601f01601f191660200182016040528015618d1a576020820181803683370190505b5090508181016020015b600019017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a8504945084618d2457509392505050565b604081810151815180830183526000808252602091820181905283518085018552835181529282018383015283518085018552600a81527f554e4c4943454e5345440000000000000000000000000000000000000000000081840190815285518087018752838152840192909252845180860190955251845290830152606091618def905b829061a38a565b15618e2f57505060408051808201909152600481527f4e6f6e65000000000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600981527f556e6c6963656e7365000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152618e8e90618de8565b15618ece57505060408051808201909152600981527f556e6c6963656e736500000000000000000000000000000000000000000000006020820152919050565b604080518082018252600381527f4d4954000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152618f2d90618de8565b15618f6d57505060408051808201909152600381527f4d495400000000000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f47504c2d322e302d6f6e6c79000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152618fcc90618de8565b806190315750604080518082018252601081527f47504c2d322e302d6f722d6c61746572000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261903190618de8565b1561907157505060408051808201909152600981527f474e552047504c763200000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f47504c2d332e302d6f6e6c790000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526190d090618de8565b806191355750604080518082018252601081527f47504c2d332e302d6f722d6c61746572000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261913590618de8565b1561917557505060408051808201909152600981527f474e552047504c763300000000000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4c47504c2d322e312d6f6e6c7900000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526191d490618de8565b806192395750604080518082018252601181527f4c47504c2d322e312d6f722d6c617465720000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261923990618de8565b1561927957505060408051808201909152600c81527f474e55204c47504c76322e3100000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4c47504c2d332e302d6f6e6c7900000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526192d890618de8565b8061933d5750604080518082018252601181527f4c47504c2d332e302d6f722d6c617465720000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261933d90618de8565b1561937d57505060408051808201909152600a81527f474e55204c47504c7633000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f4253442d322d436c617573650000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526193dc90618de8565b1561941c57505060408051808201909152600c81527f4253442d322d436c6175736500000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f4253442d332d436c6175736500000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261947b90618de8565b156194bb57505060408051808201909152600c81527f4253442d332d436c6175736500000000000000000000000000000000000000006020820152919050565b604080518082018252600781527f4d504c2d322e30000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261951a90618de8565b1561955a57505060408051808201909152600781527f4d504c2d322e30000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600781527f4f534c2d332e3000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526195b990618de8565b156195f957505060408051808201909152600781527f4f534c2d332e30000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600a81527f4170616368652d322e30000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261965890618de8565b1561969857505060408051808201909152600a81527f4170616368652d322e30000000000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4147504c2d332e302d6f6e6c7900000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526196f790618de8565b8061975c5750604080518082018252601181527f4147504c2d332e302d6f722d6c617465720000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261975c90618de8565b1561979c57505060408051808201909152600a81527f474e55204147504c7633000000000000000000000000000000000000000000006020820152919050565b604080518082018252600881527f4255534c2d312e31000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526197fb90618de8565b1561983b57505060408051808201909152600781527f42534c20312e31000000000000000000000000000000000000000000000000006020820152919050565b604080840151845191516168e3929060200161bdaa565b60608060005b84518110156198dd57818582815181106198745761987461b67c565b602002602001015160405160200161988d92919061b1f5565b6040516020818303038152906040529150600185516198ac919061afc2565b81146198d557816040516020016198c3919061bf13565b60405160208183030381529060405291505b600101619858565b5060408051600380825260808201909252600091816020015b60608152602001906001900390816198f657905050905083816000815181106199215761992161b67c565b60200260200101819052506040518060400160405280600281526020017f2d63000000000000000000000000000000000000000000000000000000000000815250816001815181106199755761997561b67c565b602002602001018190525081816002815181106199945761999461b67c565b6020908102919091010152949350505050565b60208083015183518351928401516000936199c5929184919061a39e565b14159392505050565b60408051808201909152600080825260208201526000619a00846000015185602001518560000151866020015161a4af565b9050836020015181619a12919061afc2565b84518590619a2190839061afc2565b90525060208401525090919050565b6040805180820190915260008082526020820152815183511015619a55575081616717565b6020808301519084015160019114619a7c5750815160208481015190840151829020919020145b8015619aad57825184518590619a9390839061afc2565b9052508251602085018051619aa990839061afd5565b9052505b509192915050565b6040805180820190915260008082526020820152619ad483838361a5cf565b5092915050565b60606000826000015167ffffffffffffffff811115619afc57619afc61b0d8565b6040519080825280601f01601f191660200182016040528015619b26576020820181803683370190505b5090506000602082019050619ad4818560200151866000015161a67a565b60606000619b50616b0d565b6040805160ff808252612000820190925291925060009190816020015b6060815260200190600190039081619b6d57905050905060006040518060400160405280600381526020017f6e70780000000000000000000000000000000000000000000000000000000000815250828280619bc89061b7e9565b935060ff1681518110619bdd57619bdd61b67c565b60200260200101819052506040518060400160405280600781526020017f5e312e33322e3300000000000000000000000000000000000000000000000000815250604051602001619c2e919061bf54565b604051602081830303815290604052828280619c499061b7e9565b935060ff1681518110619c5e57619c5e61b67c565b60200260200101819052506040518060400160405280600881526020017f76616c6964617465000000000000000000000000000000000000000000000000815250828280619cab9061b7e9565b935060ff1681518110619cc057619cc061b67c565b602002602001018190525082604051602001619cdc919061b717565b604051602081830303815290604052828280619cf79061b7e9565b935060ff1681518110619d0c57619d0c61b67c565b60200260200101819052506040518060400160405280600a81526020017f2d2d636f6e747261637400000000000000000000000000000000000000000000815250828280619d599061b7e9565b935060ff1681518110619d6e57619d6e61b67c565b6020026020010181905250619d83878461a6f4565b8282619d8e8161b7e9565b935060ff1681518110619da357619da361b67c565b602090810291909101015285515115619e4f5760408051808201909152600b81527f2d2d7265666572656e636500000000000000000000000000000000000000000060208201528282619df58161b7e9565b935060ff1681518110619e0a57619e0a61b67c565b6020026020010181905250619e2386600001518461a6f4565b8282619e2e8161b7e9565b935060ff1681518110619e4357619e4361b67c565b60200260200101819052505b856080015115619ebd5760408051808201909152601881527f2d2d756e73616665536b697053746f72616765436865636b000000000000000060208201528282619e988161b7e9565b935060ff1681518110619ead57619ead61b67c565b6020026020010181905250619f23565b8415619f235760408051808201909152601281527f2d2d726571756972655265666572656e6365000000000000000000000000000060208201528282619f028161b7e9565b935060ff1681518110619f1757619f1761b67c565b60200260200101819052505b60408601515115619fbf5760408051808201909152600d81527f2d2d756e73616665416c6c6f770000000000000000000000000000000000000060208201528282619f6d8161b7e9565b935060ff1681518110619f8257619f8261b67c565b60200260200101819052508560400151828280619f9e9061b7e9565b935060ff1681518110619fb357619fb361b67c565b60200260200101819052505b85606001511561a0295760408051808201909152601481527f2d2d756e73616665416c6c6f7752656e616d65730000000000000000000000006020820152828261a0088161b7e9565b935060ff168151811061a01d5761a01d61b67c565b60200260200101819052505b60008160ff1667ffffffffffffffff81111561a0475761a04761b0d8565b60405190808252806020026020018201604052801561a07a57816020015b606081526020019060019003908161a0655790505b50905060005b8260ff168160ff16101561a0d357838160ff168151811061a0a35761a0a361b67c565b6020026020010151828260ff168151811061a0c05761a0c061b67c565b602090810291909101015260010161a080565b50979650505050505050565b604080518082019091526000808252602082015281518351101561a104575081616717565b8151835160208501516000929161a11a9161afd5565b61a124919061afc2565b6020840151909150600190821461a145575082516020840151819020908220145b801561a1605783518551869061a15c90839061afc2565b9052505b50929392505050565b600080826000015161a18d856000015186602001518660000151876020015161a4af565b61a197919061afd5565b90505b8351602085015161a1ab919061afd5565b8111619ad4578161a1bb8161bf99565b925050826000015161a1f285602001518361a1d6919061afc2565b865161a1e2919061afc2565b838660000151876020015161a4af565b61a1fc919061afd5565b905061a19a565b6060600061a211848461a169565b61a21c90600161afd5565b67ffffffffffffffff81111561a2345761a23461b0d8565b60405190808252806020026020018201604052801561a26757816020015b606081526020019060019003908161a2525790505b50905060005b81518110156184dc5761a2836186fe8686619ab5565b82828151811061a2955761a29561b67c565b602090810291909101015260010161a26d565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000831061a2f1577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef8100000000831061a31d576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc10000831061a33b57662386f26fc10000830492506010015b6305f5e100831061a353576305f5e100830492506008015b612710831061a36757612710830492506004015b6064831061a379576064830492506002015b600a83106167175760010192915050565b600061a396838361a734565b159392505050565b60008085841161a4a5576020841161a451576000841561a3e957600161a3c586602061afc2565b61a3d090600861bfb3565b61a3db90600261c0b1565b61a3e5919061afc2565b1990505b835181168561a3f8898961afd5565b61a402919061afc2565b805190935082165b81811461a43c5787841161a424578794505050505061810d565b8361a42e8161c0bd565b94505082845116905061a40a565b61a446878561afd5565b94505050505061810d565b83832061a45e858861afc2565b61a468908761afd5565b91505b85821061a4a35784822080820361a4905761a486868461afd5565b935050505061810d565b61a49b60018461afc2565b92505061a46b565b505b5092949350505050565b6000838186851161a5ba576020851161a569576000851561a4fb57600161a4d787602061afc2565b61a4e290600861bfb3565b61a4ed90600261c0b1565b61a4f7919061afc2565b1990505b8451811660008761a50c8b8b61afd5565b61a516919061afc2565b855190915083165b82811461a55b5781861061a5435761a5368b8b61afd5565b965050505050505061810d565b8561a54d8161bf99565b96505083865116905061a51e565b85965050505050505061810d565b508383206000905b61a57b868961afc2565b821161a5b85785832080820361a597578394505050505061810d565b61a5a260018561afd5565b935050818061a5b09061bf99565b92505061a571565b505b61a5c4878761afd5565b979650505050505050565b6040805180820190915260008082526020820152600061a601856000015186602001518660000151876020015161a4af565b60208087018051918601919091525190915061a61d908261afc2565b83528451602086015161a630919061afd5565b810361a63f576000855261a671565b8351835161a64d919061afd5565b8551869061a65c90839061afc2565b905250835161a66b908261afd5565b60208601525b50909392505050565b6020811061a6b2578151835261a69160208461afd5565b925061a69e60208361afd5565b915061a6ab60208261afc2565b905061a67a565b600019811561a6e157600161a6c883602061afc2565b61a6d49061010061c0b1565b61a6de919061afc2565b90505b9151835183169219169190911790915250565b6060600061a7028484616be0565b805160208083015160405193945061a71c9390910161c0d4565b60405160208183030381529060405291505092915050565b815181516000919081111561a747575081515b6020808501519084015160005b8381101561a800578251825180821461a7d057600019602087101561a7af5760018461a78189602061afc2565b61a78b919061afd5565b61a79690600861bfb3565b61a7a190600261c0b1565b61a7ab919061afc2565b1990505b818116838216818103911461a7cd5797506167179650505050505050565b50505b61a7db60208661afd5565b945061a7e860208561afd5565b9350505060208161a7f9919061afd5565b905061a754565b508451865161728e919061c12c565b610b678061c14d83390190565b61053f8061ccb483390190565b61106f8061d1f383390190565b611bb98061e26283390190565b6040518060e0016040528060608152602001606081526020016060815260200160001515815260200160001515815260200160001515815260200161a88661a88b565b905290565b6040518061010001604052806000151581526020016000151581526020016060815260200160008019168152602001606081526020016060815260200160001515815260200161a8866040518060800160405280600081526020016000815260200160008152602001600081525090565b602080825282518282018190526000918401906040840190835b8181101561a93d5783516001600160a01b031683526020938401939092019160010161a916565b509095945050505050565b60005b8381101561a96357818101518382015260200161a94b565b50506000910152565b6000815180845261a98481602086016020860161a948565b601f01601f19169290920160200192915050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b8281101561aa94577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452815180516001600160a01b03168652602090810151604082880181905281519088018190529101906060600582901b88018101919088019060005b8181101561aa7a577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa08a850301835261aa6484865161a96c565b602095860195909450929092019160010161aa2a565b50919750505060209485019492909201915060010161a9c0565b50929695505050505050565b600081518084526020840193506020830160005b8281101561aaf45781517fffffffff000000000000000000000000000000000000000000000000000000001686526020958601959091019060010161aab4565b5093949350505050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b8281101561aa94577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452815180516040875261ab6a604088018261a96c565b905060208201519150868103602088015261ab85818361aaa0565b96505050602093840193919091019060010161ab26565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b8281101561aa94577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc087860301845261abfe85835161a96c565b9450602093840193919091019060010161abc4565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b8281101561aa94577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc087860301845281516001600160a01b038151168652602081015190506040602087015261ac94604087018261aaa0565b955050602093840193919091019060010161ac3b565b60208152600061671760208301600581527f68656c6c6f000000000000000000000000000000000000000000000000000000602082015260400190565b600081516060845261acfc606085018261a96c565b90506001600160a01b036020840151166020850152604083015160408501528091505092915050565b60a08152600061ad3860a083018861ace7565b6001600160a01b03871660208401528560408401526001600160a01b0385166060840152828103608084015261ad6e818561a96c565b98975050505050505050565b60006020828403121561ad8c57600080fd5b81516001600160a01b038116811461681057600080fd5b610100815260056101008201527f544f4b454e000000000000000000000000000000000000000000000000000000610120820152610140602082015260036101408201527f544b4e000000000000000000000000000000000000000000000000000000000061016082015260006101808201905060ff881660408301528660608301526003861061ae5d577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b8560808301528460a083015261ae7e60c08301856001600160a01b03169052565b6001600160a01b03831660e0830152979650505050505050565b60006020828403121561aeaa57600080fd5b8151801515811461681057600080fd5b60808152600061aecd608083018761ace7565b8560208401526001600160a01b0385166040840152828103606084015261a5c4818561a96c565b60006020828403121561af0657600080fd5b5051919050565b602081526000616810602083018461a96c565b60a08152600061af3360a083018761a96c565b6001600160a01b03861660208401528460408401526001600160a01b0384166060840152828103608084015261a5c481600581527f68656c6c6f000000000000000000000000000000000000000000000000000000602082015260400190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b818103818111156167175761671761af93565b808201808211156167175761671761af93565b600181811c9082168061affc57607f821691505b6020821081036189d9577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6001600160a01b038316815260406020820152600061810d604083018461a96c565b7f4661696c656420746f206465706c6f7920636f6e74726163742000000000000081526000835161b08f81601a85016020880161a948565b7f3a20000000000000000000000000000000000000000000000000000000000000601a91840191820152835161b0cc81601c84016020880161a948565b01601c01949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040516060810167ffffffffffffffff8111828210171561b12a5761b12a61b0d8565b60405290565b60008067ffffffffffffffff84111561b14b5761b14b61b0d8565b50604051601f19601f85018116603f0116810181811067ffffffffffffffff8211171561b17a5761b17a61b0d8565b60405283815290508082840185101561b19257600080fd5b6184dc84602083018561a948565b600082601f83011261b1b157600080fd5b6168108383516020850161b130565b60006020828403121561b1d257600080fd5b815167ffffffffffffffff81111561b1e957600080fd5b6167138482850161b1a0565b6000835161b20781846020880161a948565b83519083019061b21b81836020880161a948565b01949350505050565b7f4661696c656420746f206465706c6f7920636f6e74726163742000000000000081526000835161b25c81601a85016020880161a948565b7f207573696e6720636f6e7374727563746f722064617461202200000000000000601a91840191820152835161b29981603384016020880161a948565b7f220000000000000000000000000000000000000000000000000000000000000060339290910191820152603401949350505050565b60408152600b60408201527f464f554e4452595f4f55540000000000000000000000000000000000000000006060820152608060208201526000616810608083018461a96c565b60006020828403121561b32857600080fd5b815167ffffffffffffffff81111561b33f57600080fd5b8201601f8101841361b35057600080fd5b6167138482516020840161b130565b6000855161b371818460208a0161a948565b7f2f00000000000000000000000000000000000000000000000000000000000000908301908152855161b3ab816001840160208a0161a948565b7f2f0000000000000000000000000000000000000000000000000000000000000060019290910191820152845161b3e981600284016020890161a948565b6001818301019150507f2f000000000000000000000000000000000000000000000000000000000000006001820152835161b42b81600284016020880161a948565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600292909101918201526007019695505050505050565b60408152600061b476604083018461a96c565b8281036020840152600481527f2e6173740000000000000000000000000000000000000000000000000000000060208201526040810191505092915050565b7f436f756c64206e6f742066696e642041535420696e206172746966616374200081526000825161b4ed81601f85016020870161a948565b7f2e205365742060617374203d20747275656020696e20666f756e6472792e746f601f9390910192830152507f6d6c000000000000000000000000000000000000000000000000000000000000603f820152604101919050565b60408152600061b55a604083018461a96c565b8281036020840152601181527f2e6173742e6162736f6c7574655061746800000000000000000000000000000060208201526040810191505092915050565b60408152600061b5ac604083018461a96c565b8281036020840152600c81527f2e6173742e6c6963656e7365000000000000000000000000000000000000000060208201526040810191505092915050565b7f2e6d657461646174612e736f75726365732e5b2700000000000000000000000081526000825161b62381601485016020870161a948565b7f275d2e6b656363616b32353600000000000000000000000000000000000000006014939091019283015250602001919050565b60408152600061b66a604083018561a96c565b828103602084015261680c818561a96c565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f220000000000000000000000000000000000000000000000000000000000000081526000825161b6e381600185016020870161a948565b7f22000000000000000000000000000000000000000000000000000000000000006001939091019283015250600201919050565b6000825161b72981846020870161a948565b7f2f6275696c642d696e666f000000000000000000000000000000000000000000920191825250600b01919050565b7f436f756c64206e6f742066696e64206275696c642d696e666f2066696c65207781527f697468206d61746368696e6720736f7572636520636f6465206861736820666f60208201527f7220636f6e74726163742000000000000000000000000000000000000000000060408201526000825161b7dc81604b85016020870161a948565b91909101604b0192915050565b600060ff821660ff810361b7ff5761b7ff61af93565b60010192915050565b7f406f70656e7a657070656c696e2f646566656e6465722d6465706c6f792d636c81527f69656e742d636c6940000000000000000000000000000000000000000000000060208201526000825161b86681602985016020870161a948565b9190910160290192915050565b60408152601660408201527f4f50454e5a455050454c494e5f424153485f50415448000000000000000000006060820152608060208201526000616810608083018461a96c565b60006020828403121561b8cc57600080fd5b815167ffffffffffffffff81111561b8e357600080fd5b82016060818503121561b8f557600080fd5b61b8fd61b107565b81518060030b811461b90e57600080fd5b8152602082015167ffffffffffffffff81111561b92a57600080fd5b61b9368682850161b1a0565b602083015250604082015167ffffffffffffffff81111561b95657600080fd5b61b9628682850161b1a0565b604083015250949350505050565b7f4661696c656420746f2072756e206261736820636f6d6d616e6420776974682081527f220000000000000000000000000000000000000000000000000000000000000060208201526000825161b9ce81602185016020870161a948565b7f222e20496620796f7520617265207573696e672057696e646f77732c2073657460219390910192830152507f20746865204f50454e5a455050454c494e5f424153485f5041544820656e766960418201527f726f6e6d656e74207661726961626c6520746f207468652066756c6c7920717560618201527f616c69666965642070617468206f66207468652062617368206578656375746160818201527f626c652e20466f72206578616d706c652c20696620796f75206172652075736960a18201527f6e672047697420666f722057696e646f77732c206164642074686520666f6c6c60c18201527f6f77696e67206c696e6520696e20746865202e656e762066696c65206f66207960e18201527f6f75722070726f6a65637420287573696e6720666f727761726420736c6173686101018201527f6573293a0a4f50454e5a455050454c494e5f424153485f504154483d22433a2f6101218201527f50726f6772616d2046696c65732f4769742f62696e2f6261736822000000000061014182015261015c01919050565b7f4661696c656420746f2066696e64206c696e652077697468207072656669782081527f270000000000000000000000000000000000000000000000000000000000000060208201526000835161bbba81602185016020880161a948565b7f2720696e206f75747075743a2000000000000000000000000000000000000000602191840191820152835161bbf781602e84016020880161a948565b01602e01949350505050565b7f4661696c656420746f2072756e2075706772616465207361666574792076616c81527f69646174696f6e3a20000000000000000000000000000000000000000000000060208201526000825161b86681602985016020870161a948565b7f55706772616465207361666574792076616c69646174696f6e206661696c656481527f3a0a00000000000000000000000000000000000000000000000000000000000060208201526000825161bcbf81602285016020870161a948565b9190910160220192915050565b7f436f6e7472616374206e616d652000000000000000000000000000000000000081526000825161bd0481600e85016020870161a948565b7f206d75737420626520696e2074686520666f726d6174204d79436f6e74726163600e9390910192830152507f742e736f6c3a4d79436f6e7472616374206f72204d79436f6e74726163742e73602e8201527f6f6c206f72206f75742f4d79436f6e74726163742e736f6c2f4d79436f6e7472604e8201527f6163742e6a736f6e000000000000000000000000000000000000000000000000606e820152607601919050565b7f53504458206c6963656e7365206964656e74696669657220000000000000000081526000835161bde281601885016020880161a948565b7f20696e2000000000000000000000000000000000000000000000000000000000601891840191820152835161be1f81601c84016020880161a948565b7f20646f6573206e6f74206c6f6f6b206c696b65206120737570706f7274656420601c92909101918201527f6c6963656e736520666f7220626c6f636b206578706c6f726572207665726966603c8201527f69636174696f6e2e205573652074686520606c6963656e73655479706560206f605c8201527f7074696f6e20746f20737065636966792061206c6963656e736520747970652c607c8201527f206f7220736574207468652060736b69704c6963656e73655479706560206f70609c8201527f74696f6e20746f2060747275656020746f20736b69702e00000000000000000060bc82015260d301949350505050565b6000825161bf2581846020870161a948565b7f2000000000000000000000000000000000000000000000000000000000000000920191825250600101919050565b7f406f70656e7a657070656c696e2f75706772616465732d636f7265400000000081526000825161bf8c81601c85016020870161a948565b91909101601c0192915050565b6000600019820361bfac5761bfac61af93565b5060010190565b80820281158282048414176167175761671761af93565b6001815b600184111561c0055780850481111561bfe95761bfe961af93565b600184161561bff757908102905b60019390931c92800261bfce565b935093915050565b60008261c01c57506001616717565b8161c02957506000616717565b816001811461c03f576002811461c0495761c065565b6001915050616717565b60ff84111561c05a5761c05a61af93565b50506001821b616717565b5060208310610133831016604e8410600b841016171561c088575081810a616717565b61c095600019848461bfca565b806000190482111561c0a95761c0a961af93565b029392505050565b6000616810838361c00d565b60008161c0cc5761c0cc61af93565b506000190190565b6000835161c0e681846020880161a948565b7f3a00000000000000000000000000000000000000000000000000000000000000908301908152835161c12081600184016020880161a948565b01600101949350505050565b8181036000831280158383131683831282161715619ad457619ad461af9356fe60c0604052600d60809081526c2bb930b83832b21022ba3432b960991b60a05260009061002c9082610114565b506040805180820190915260048152630ae8aa8960e31b60208201526001906100559082610114565b506002805460ff1916601217905534801561006f57600080fd5b506101d2565b634e487b7160e01b600052604160045260246000fd5b600181811c9082168061009f57607f821691505b6020821081036100bf57634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111561010f57806000526020600020601f840160051c810160208510156100ec5750805b601f840160051c820191505b8181101561010c57600081556001016100f8565b50505b505050565b81516001600160401b0381111561012d5761012d610075565b6101418161013b845461008b565b846100c5565b6020601f821160018114610175576000831561015d5750848201515b600019600385901b1c1916600184901b17845561010c565b600084815260208120601f198516915b828110156101a55787850151825560209485019460019092019101610185565b50848210156101c35786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b610986806101e16000396000f3fe6080604052600436106100c05760003560e01c8063313ce56711610074578063a9059cbb1161004e578063a9059cbb146101fa578063d0e30db01461021a578063dd62ed3e1461022257600080fd5b8063313ce5671461018c57806370a08231146101b857806395d89b41146101e557600080fd5b806318160ddd116100a557806318160ddd1461012f57806323b872dd1461014c5780632e1a7d4d1461016c57600080fd5b806306fdde03146100d4578063095ea7b3146100ff57600080fd5b366100cf576100cd61025a565b005b600080fd5b3480156100e057600080fd5b506100e96102b5565b6040516100f69190610745565b60405180910390f35b34801561010b57600080fd5b5061011f61011a3660046107da565b610343565b60405190151581526020016100f6565b34801561013b57600080fd5b50475b6040519081526020016100f6565b34801561015857600080fd5b5061011f610167366004610804565b6103bd565b34801561017857600080fd5b506100cd610187366004610841565b610647565b34801561019857600080fd5b506002546101a69060ff1681565b60405160ff90911681526020016100f6565b3480156101c457600080fd5b5061013e6101d336600461085a565b60036020526000908152604090205481565b3480156101f157600080fd5b506100e9610724565b34801561020657600080fd5b5061011f6102153660046107da565b610731565b6100cd61025a565b34801561022e57600080fd5b5061013e61023d366004610875565b600460209081526000928352604080842090915290825290205481565b33600090815260036020526040812080543492906102799084906108d7565b909155505060405134815233907fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c9060200160405180910390a2565b600080546102c2906108ea565b80601f01602080910402602001604051908101604052809291908181526020018280546102ee906108ea565b801561033b5780601f106103105761010080835404028352916020019161033b565b820191906000526020600020905b81548152906001019060200180831161031e57829003601f168201915b505050505081565b33600081815260046020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925906103ab9086815260200190565b60405180910390a35060015b92915050565b73ffffffffffffffffffffffffffffffffffffffff831660009081526003602052604081205482111561042b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600060248201526044015b60405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff841633148015906104a1575073ffffffffffffffffffffffffffffffffffffffff841660009081526004602090815260408083203384529091529020547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff14155b156105605773ffffffffffffffffffffffffffffffffffffffff8416600090815260046020908152604080832033845290915290205482111561051a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526020600482015260006024820152604401610422565b73ffffffffffffffffffffffffffffffffffffffff841660009081526004602090815260408083203384529091528120805484929061055a90849061093d565b90915550505b73ffffffffffffffffffffffffffffffffffffffff84166000908152600360205260408120805484929061059590849061093d565b909155505073ffffffffffffffffffffffffffffffffffffffff8316600090815260036020526040812080548492906105cf9084906108d7565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161063591815260200190565b60405180910390a35060019392505050565b3360009081526003602052604090205481111561069a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526020600482015260006024820152604401610422565b33600090815260036020526040812080548392906106b990849061093d565b9091555050604051339082156108fc029083906000818181858888f193505050501580156106eb573d6000803e3d6000fd5b5060405181815233907f7fcf532c15f0a6db0bd6d0e038bea71d30d808c7d98cb3bf7268a95bf5081b659060200160405180910390a250565b600180546102c2906108ea565b600061073e3384846103bd565b9392505050565b602081526000825180602084015260005b818110156107735760208186018101516040868401015201610756565b5060006040828501015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011684010191505092915050565b803573ffffffffffffffffffffffffffffffffffffffff811681146107d557600080fd5b919050565b600080604083850312156107ed57600080fd5b6107f6836107b1565b946020939093013593505050565b60008060006060848603121561081957600080fd5b610822846107b1565b9250610830602085016107b1565b929592945050506040919091013590565b60006020828403121561085357600080fd5b5035919050565b60006020828403121561086c57600080fd5b61073e826107b1565b6000806040838503121561088857600080fd5b610891836107b1565b915061089f602084016107b1565b90509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b808201808211156103b7576103b76108a8565b600181811c908216806108fe57607f821691505b602082108103610937577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b818103818111156103b7576103b76108a856fea264697066735822122008d7fc4e09519c5dd9f356b03596f6829a151d0bc7682533f9ceab4e459f5ee264736f6c634300081a00336080604052348015600f57600080fd5b506105208061001f6000396000f3fe60806040526004361061002a5760003560e01c806369582bee14610033578063de43156e1461005357005b3661003157005b005b34801561003f57600080fd5b5061003161004e3660046101ba565b610073565b34801561005f57600080fd5b5061003161006e3660046101ba565b6100ee565b6060811561008a5761008782840184610273565b90505b7ffdc887992b033668833927e252058e468fac0b6bd196d520f09c61b740e999486100b58780610369565b6100c560408a0160208b016103ce565b896040013533866040516100de969594939291906103f0565b60405180910390a1505050505050565b606081156101055761010282840184610273565b90505b7fcdc8ee677dc5ebe680fb18cebda5e26ba5ea1f0ba504a47e2a9a2ecb476dc98e6100b58780610369565b60006060828403121561014257600080fd5b50919050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461016c57600080fd5b919050565b60008083601f84011261018357600080fd5b50813567ffffffffffffffff81111561019b57600080fd5b6020830191508360208285010111156101b357600080fd5b9250929050565b6000806000806000608086880312156101d257600080fd5b853567ffffffffffffffff8111156101e957600080fd5b6101f588828901610130565b95505061020460208701610148565b935060408601359250606086013567ffffffffffffffff81111561022757600080fd5b61023388828901610171565b969995985093965092949392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60006020828403121561028557600080fd5b813567ffffffffffffffff81111561029c57600080fd5b8201601f810184136102ad57600080fd5b803567ffffffffffffffff8111156102c7576102c7610244565b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8501160116810181811067ffffffffffffffff8211171561033357610333610244565b60405281815282820160200186101561034b57600080fd5b81602084016020830137600091810160200191909152949350505050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261039e57600080fd5b83018035915067ffffffffffffffff8211156103b957600080fd5b6020019150368190038213156101b357600080fd5b6000602082840312156103e057600080fd5b6103e982610148565b9392505050565b60a081528560a0820152858760c0830137600060c0878301015260007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f880116820173ffffffffffffffffffffffffffffffffffffffff8716602084015285604084015273ffffffffffffffffffffffffffffffffffffffff8516606084015260c083820301608084015283518060c083015260005b818110156104a557602081870181015184830160e0015201610488565b50600060e0838301810191909152601f9091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016909101019897505050505050505056fea2646970667358221220f4d1ccb9c8450e782e1c77412473fd37637a5c83a2a3272307d8c8bc8e8c7a3364736f6c634300081a003360c060405234801561001057600080fd5b5060405161106f38038061106f83398101604081905261002f916100db565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461006357604051632b2add3d60e01b815260040160405180910390fd5b600380546001600160a01b0319166001600160a01b0385811691909117909155828116608052811660a0526040517f80699e81136d69cb8367ad52a994e25c722a86da654b561d0c14b61a777e7ac590600090a150505061011e565b80516001600160a01b03811681146100d657600080fd5b919050565b6000806000606084860312156100f057600080fd5b6100f9846100bf565b9250610107602085016100bf565b9150610115604085016100bf565b90509250925092565b60805160a051610f2561014a60003960006101e50152600081816102b9015261045b0152610f256000f3fe608060405234801561001057600080fd5b50600436106100f55760003560e01c806397770dff11610097578063c63585cc11610066578063c63585cc14610273578063d7fd7afb14610286578063d936a012146102b4578063ee2815ba146102db57600080fd5b806397770dff1461021a578063a7cb05071461022d578063c39aca3714610240578063c62178ac1461025357600080fd5b8063513a9c05116100d3578063513a9c051461018a578063569541b9146101c0578063842da36d146101e057806391dd645f1461020757600080fd5b80630be15547146100fa5780631f0e251b1461015a5780633ce4a5bc1461016f575b600080fd5b610130610108366004610bd1565b60016020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b61016d610168366004610c13565b6102ee565b005b61013073735b14bb79463307aacbed86daf3322b1e6226ab81565b610130610198366004610bd1565b60026020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b6003546101309073ffffffffffffffffffffffffffffffffffffffff1681565b6101307f000000000000000000000000000000000000000000000000000000000000000081565b61016d610215366004610c35565b610402565b61016d610228366004610c13565b610526565b61016d61023b366004610c61565b610633565b61016d61024e366004610c83565b6106ce565b6004546101309073ffffffffffffffffffffffffffffffffffffffff1681565b610130610281366004610d53565b6108cd565b6102a6610294366004610bd1565b60006020819052908152604090205481565b604051908152602001610151565b6101307f000000000000000000000000000000000000000000000000000000000000000081565b61016d6102e9366004610c35565b610a02565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461033b576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116610388576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600480547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527f3ade88e3922d64780e1bf4460d364c2970b69da813f9c0c07a1c187b5647636c906020015b60405180910390a150565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461044f576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600354600090610497907f00000000000000000000000000000000000000000000000000000000000000009073ffffffffffffffffffffffffffffffffffffffff16846108cd565b60008481526002602090815260409182902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff85169081179091558251878152918201529192507f0ecec485166da6139b13bb7e033e9446e2d35348e80ebf1180d4afe2dba1704e910160405180910390a1505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610573576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff81166105c0576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527fdba79d534382d1a8ae108e4c8ecb27c6ae42ab8b91d44eedf88bd329f3868d5e906020016103f7565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610680576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000828152602081815260409182902083905581518481529081018390527f49f492222906ac486c3c1401fa545626df1f0c0e5a77a05597ea2ed66af9850d91015b60405180910390a15050565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461071b576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff831673735b14bb79463307aacbed86daf3322b1e6226ab1480610768575073ffffffffffffffffffffffffffffffffffffffff831630145b1561079f576040517f82d5d76a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f47e7ef2400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152602482018690528616906347e7ef24906044016020604051808303816000875af1158015610814573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108389190610d96565b506040517fde43156e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84169063de43156e906108939089908990899088908890600401610e01565b600060405180830381600087803b1580156108ad57600080fd5b505af11580156108c1573d6000803e3d6000fd5b50505050505050505050565b60008060006108dc8585610ad3565b6040517fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606084811b8216602084015283901b16603482015291935091508690604801604051602081830303815290604052805190602001206040516020016109c29291907fff00000000000000000000000000000000000000000000000000000000000000815260609290921b7fffffffffffffffffffffffffffffffffffffffff00000000000000000000000016600183015260158201527f96e8ac4277198ff8b6f785478aa9a39f403cb768dd02cbee326c3e7da348845f603582015260550190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291905280516020909101209695505050505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610a4f576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008281526001602090815260409182902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff85169081179091558251858152918201527fd1b36d30f6248e97c473b4d1348ca164a4ef6759022f54a58ec200326c39c45d91016106c2565b6000808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603610b3b576040517fcb1e7cfe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1610610b75578284610b78565b83835b909250905073ffffffffffffffffffffffffffffffffffffffff8216610bca576040517f78b507da00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b9250929050565b600060208284031215610be357600080fd5b5035919050565b803573ffffffffffffffffffffffffffffffffffffffff81168114610c0e57600080fd5b919050565b600060208284031215610c2557600080fd5b610c2e82610bea565b9392505050565b60008060408385031215610c4857600080fd5b82359150610c5860208401610bea565b90509250929050565b60008060408385031215610c7457600080fd5b50508035926020909101359150565b60008060008060008060a08789031215610c9c57600080fd5b863567ffffffffffffffff811115610cb357600080fd5b87016060818a031215610cc557600080fd5b9550610cd360208801610bea565b945060408701359350610ce860608801610bea565b9250608087013567ffffffffffffffff811115610d0457600080fd5b8701601f81018913610d1557600080fd5b803567ffffffffffffffff811115610d2c57600080fd5b896020828401011115610d3e57600080fd5b60208201935080925050509295509295509295565b600080600060608486031215610d6857600080fd5b610d7184610bea565b9250610d7f60208501610bea565b9150610d8d60408501610bea565b90509250925092565b600060208284031215610da857600080fd5b81518015158114610c2e57600080fd5b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b60808152600086357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1883603018112610e3957600080fd5b870160208101903567ffffffffffffffff811115610e5657600080fd5b803603821315610e6557600080fd5b60606080850152610e7a60e085018284610db8565b91505073ffffffffffffffffffffffffffffffffffffffff610e9e60208a01610bea565b1660a0840152604088013560c084015273ffffffffffffffffffffffffffffffffffffffff871660208401528560408401528281036060840152610ee3818587610db8565b9897505050505050505056fea2646970667358221220431a07541a491b54259bdf8fcd05ade6751bfbbf0e72e605f27325b56d7d464f64736f6c634300081a003360e060405234801561001057600080fd5b50604051611bb9380380611bb983398101604081905261002f9161020e565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461006357604051632b2add3d60e01b815260040160405180910390fd5b6001600160a01b038216158061008057506001600160a01b038116155b1561009e5760405163d92e233d60e01b815260040160405180910390fd5b60066100aa8982610360565b5060076100b78882610360565b5060ff861660c05260808590528360028111156100d6576100d661041e565b60a08160028111156100ea576100ea61041e565b905250600192909255600080546001600160a01b039283166001600160a01b03199182161790915560088054929093169116179055506104349350505050565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261015157600080fd5b81516001600160401b0381111561016a5761016a61012a565b604051601f8201601f19908116603f011681016001600160401b03811182821017156101985761019861012a565b6040528181528382016020018510156101b057600080fd5b60005b828110156101cf576020818601810151838301820152016101b3565b506000918101602001919091529392505050565b8051600381106101f257600080fd5b919050565b80516001600160a01b03811681146101f257600080fd5b600080600080600080600080610100898b03121561022b57600080fd5b88516001600160401b0381111561024157600080fd5b61024d8b828c01610140565b60208b015190995090506001600160401b0381111561026b57600080fd5b6102778b828c01610140565b975050604089015160ff8116811461028e57600080fd5b60608a015190965094506102a460808a016101e3565b60a08a015190945092506102ba60c08a016101f7565b91506102c860e08a016101f7565b90509295985092959890939650565b600181811c908216806102eb57607f821691505b60208210810361030b57634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111561035b57806000526020600020601f840160051c810160208510156103385750805b601f840160051c820191505b818110156103585760008155600101610344565b50505b505050565b81516001600160401b038111156103795761037961012a565b61038d8161038784546102d7565b84610311565b6020601f8211600181146103c157600083156103a95750848201515b600019600385901b1c1916600184901b178455610358565b600084815260208120601f198516915b828110156103f157878501518255602094850194600190920191016103d1565b508482101561040f5786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b634e487b7160e01b600052602160045260246000fd5b60805160a05160c05161174861047160003960006102170152600061033a0152600081816102eb01528181610ad70152610bdd01526117486000f3fe608060405234801561001057600080fd5b50600436106101985760003560e01c80638b851b95116100e3578063ccc775991161008c578063eddeb12311610066578063eddeb12314610431578063f2441b3214610444578063f687d12a1461046457600080fd5b8063ccc77599146103a4578063d9eeebed146103b7578063dd62ed3e146103eb57600080fd5b8063a9059cbb116100bd578063a9059cbb14610369578063c70126261461037c578063c835d7cc1461038f57600080fd5b80638b851b951461030d57806395d89b411461032d578063a3413d031461033557600080fd5b80633ce4a5bc116101455780634d8943bb1161011f5780634d8943bb146102a757806370a08231146102b057806385e1f4d0146102e657600080fd5b80633ce4a5bc1461024157806342966c681461028157806347e7ef241461029457600080fd5b806318160ddd1161017657806318160ddd146101f557806323b872dd146101fd578063313ce5671461021057600080fd5b806306fdde031461019d578063091d2788146101bb578063095ea7b3146101d2575b600080fd5b6101a5610477565b6040516101b29190611327565b60405180910390f35b6101c460015481565b6040519081526020016101b2565b6101e56101e0366004611366565b610509565b60405190151581526020016101b2565b6005546101c4565b6101e561020b366004611392565b610520565b60405160ff7f00000000000000000000000000000000000000000000000000000000000000001681526020016101b2565b61025c73735b14bb79463307aacbed86daf3322b1e6226ab81565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101b2565b6101e561028f3660046113d3565b6105b7565b6101e56102a2366004611366565b6105cb565b6101c460025481565b6101c46102be3660046113ec565b73ffffffffffffffffffffffffffffffffffffffff1660009081526003602052604090205490565b6101c47f000000000000000000000000000000000000000000000000000000000000000081565b60085461025c9073ffffffffffffffffffffffffffffffffffffffff1681565b6101a561071f565b61035c7f000000000000000000000000000000000000000000000000000000000000000081565b6040516101b29190611409565b6101e5610377366004611366565b61072e565b6101e561038a366004611479565b61073b565b6103a261039d3660046113ec565b61088a565b005b6103a26103b23660046113ec565b61099e565b6103bf610aab565b6040805173ffffffffffffffffffffffffffffffffffffffff90931683526020830191909152016101b2565b6101c46103f9366004611571565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260046020908152604080832093909416825291909152205490565b6103a261043f3660046113d3565b610cc9565b60005461025c9073ffffffffffffffffffffffffffffffffffffffff1681565b6103a26104723660046113d3565b610d4b565b606060068054610486906115aa565b80601f01602080910402602001604051908101604052809291908181526020018280546104b2906115aa565b80156104ff5780601f106104d4576101008083540402835291602001916104ff565b820191906000526020600020905b8154815290600101906020018083116104e257829003601f168201915b5050505050905090565b6000610516338484610dcd565b5060015b92915050565b600061052d848484610ed6565b73ffffffffffffffffffffffffffffffffffffffff8416600090815260046020908152604080832033845290915290205482811015610598576040517f10bad14700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6105ac85336105a7868561162c565b610dcd565b506001949350505050565b60006105c33383611091565b506001919050565b60003373735b14bb79463307aacbed86daf3322b1e6226ab14801590610609575060005473ffffffffffffffffffffffffffffffffffffffff163314155b801561062d575060085473ffffffffffffffffffffffffffffffffffffffff163314155b15610664576040517fddb5de5e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61066e83836111d3565b6040517f735b14bb79463307aacbed86daf3322b1e6226ab000000000000000000000000602082015273ffffffffffffffffffffffffffffffffffffffff8416907f67fc7bdaed5b0ec550d8706b87d60568ab70c6b781263c70101d54cd1564aab390603401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529082905261070e91869061163f565b60405180910390a250600192915050565b606060078054610486906115aa565b6000610516338484610ed6565b6000806000610748610aab565b6040517f23b872dd00000000000000000000000000000000000000000000000000000000815233600482015273735b14bb79463307aacbed86daf3322b1e6226ab602482015260448101829052919350915073ffffffffffffffffffffffffffffffffffffffff8316906323b872dd906064016020604051808303816000875af11580156107da573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107fe9190611661565b610834576040517f0a7cd6d600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61083e3385611091565b60025460405133917f9ffbffc04a397460ee1dbe8c9503e098090567d6b7f4b3c02a8617d800b6d9559161087791899189918791611683565b60405180910390a2506001949350505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab146108d7576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116610924576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527fd55614e962c5fd6ece71614f6348d702468a997a394dd5e5c1677950226d97ae906020015b60405180910390a150565b3373735b14bb79463307aacbed86daf3322b1e6226ab146109eb576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116610a38576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600880547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527f88815d964e380677e86d817e7d65dea59cb7b4c3b5b7a0c8ec7ea4a74f90a38790602001610993565b600080546040517f0be155470000000000000000000000000000000000000000000000000000000081527f000000000000000000000000000000000000000000000000000000000000000060048201528291829173ffffffffffffffffffffffffffffffffffffffff90911690630be1554790602401602060405180830381865afa158015610b3e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b6291906116b2565b905073ffffffffffffffffffffffffffffffffffffffff8116610bb1576040517f78fff39600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080546040517fd7fd7afb0000000000000000000000000000000000000000000000000000000081527f0000000000000000000000000000000000000000000000000000000000000000600482015273ffffffffffffffffffffffffffffffffffffffff9091169063d7fd7afb90602401602060405180830381865afa158015610c40573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c6491906116cf565b905080600003610ca0576040517fe661aed000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060025460015483610cb391906116e8565b610cbd91906116ff565b92959294509192505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610d16576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60028190556040518181527fef13af88e424b5d15f49c77758542c1938b08b8b95b91ed0751f98ba99000d8f90602001610993565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610d98576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018190556040518181527fff5788270f43bfc1ca41c503606d2594aa3023a1a7547de403a3e2f146a4a80a90602001610993565b73ffffffffffffffffffffffffffffffffffffffff8316610e1a576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216610e67576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff83811660008181526004602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8316610f23576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216610f70576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff831660009081526003602052604090205481811015610fd0576040517ffe382aa700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610fda828261162c565b73ffffffffffffffffffffffffffffffffffffffff808616600090815260036020526040808220939093559085168152908120805484929061101d9084906116ff565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161108391815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff82166110de576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff82166000908152600360205260409020548181101561113e576040517ffe382aa700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611148828261162c565b73ffffffffffffffffffffffffffffffffffffffff84166000908152600360205260408120919091556005805484929061118390849061162c565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90602001610ec9565b73ffffffffffffffffffffffffffffffffffffffff8216611220576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b806005600082825461123291906116ff565b909155505073ffffffffffffffffffffffffffffffffffffffff82166000908152600360205260408120805483929061126c9084906116ff565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6000815180845260005b818110156112e9576020818501810151868301820152016112cd565b5060006020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b60208152600061133a60208301846112c3565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff8116811461136357600080fd5b50565b6000806040838503121561137957600080fd5b823561138481611341565b946020939093013593505050565b6000806000606084860312156113a757600080fd5b83356113b281611341565b925060208401356113c281611341565b929592945050506040919091013590565b6000602082840312156113e557600080fd5b5035919050565b6000602082840312156113fe57600080fd5b813561133a81611341565b6020810160038310611444577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000806040838503121561148c57600080fd5b823567ffffffffffffffff8111156114a357600080fd5b8301601f810185136114b457600080fd5b803567ffffffffffffffff8111156114ce576114ce61144a565b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8501160116810181811067ffffffffffffffff8211171561153a5761153a61144a565b60405281815282820160200187101561155257600080fd5b8160208401602083013760006020928201830152969401359450505050565b6000806040838503121561158457600080fd5b823561158f81611341565b9150602083013561159f81611341565b809150509250929050565b600181811c908216806115be57607f821691505b6020821081036115f7577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8181038181111561051a5761051a6115fd565b60408152600061165260408301856112c3565b90508260208301529392505050565b60006020828403121561167357600080fd5b8151801515811461133a57600080fd5b60808152600061169660808301876112c3565b6020830195909552506040810192909252606090910152919050565b6000602082840312156116c457600080fd5b815161133a81611341565b6000602082840312156116e157600080fd5b5051919050565b808202811582820484141761051a5761051a6115fd565b8082018082111561051a5761051a6115fd56fea26469706673582212204013e39523742118b3f2227e145ee7e48176ba6aebead33c596dca2acb59a74c64736f6c634300081a0033a2646970667358221220bece5e1c812fe258c6727799ee166dd0bb6d56e249f9594182e618cf7109dd3164736f6c634300081a0033", } // GatewayZEVMOutboundTestABI is the input ABI used to generate the binding from. diff --git a/v2/pkg/ierc20custody.sol/ierc20custody.go b/v2/pkg/ierc20custody.sol/ierc20custody.go new file mode 100644 index 00000000..3d9dfd0c --- /dev/null +++ b/v2/pkg/ierc20custody.sol/ierc20custody.go @@ -0,0 +1,1027 @@ +// Code generated - DO NOT EDIT. +// This file is a generated binding and any manual changes will be lost. + +package ierc20custody + +import ( + "errors" + "math/big" + "strings" + + ethereum "github.com/ethereum/go-ethereum" + "github.com/ethereum/go-ethereum/accounts/abi" + "github.com/ethereum/go-ethereum/accounts/abi/bind" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/core/types" + "github.com/ethereum/go-ethereum/event" +) + +// Reference imports to suppress errors if they are not otherwise used. +var ( + _ = errors.New + _ = big.NewInt + _ = strings.NewReader + _ = ethereum.NotFound + _ = bind.Bind + _ = common.Big1 + _ = types.BloomLookup + _ = event.NewSubscription + _ = abi.ConvertType +) + +// IERC20CustodyMetaData contains all meta data concerning the IERC20Custody contract. +var IERC20CustodyMetaData = &bind.MetaData{ + ABI: "[{\"type\":\"function\",\"name\":\"whitelisted\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"withdraw\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"withdrawAndCall\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"withdrawAndRevert\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"event\",\"name\":\"Unwhitelisted\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Whitelisted\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Withdraw\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"WithdrawAndCall\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"WithdrawAndRevert\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"NotWhitelisted\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZeroAddress\",\"inputs\":[]}]", +} + +// IERC20CustodyABI is the input ABI used to generate the binding from. +// Deprecated: Use IERC20CustodyMetaData.ABI instead. +var IERC20CustodyABI = IERC20CustodyMetaData.ABI + +// IERC20Custody is an auto generated Go binding around an Ethereum contract. +type IERC20Custody struct { + IERC20CustodyCaller // Read-only binding to the contract + IERC20CustodyTransactor // Write-only binding to the contract + IERC20CustodyFilterer // Log filterer for contract events +} + +// IERC20CustodyCaller is an auto generated read-only Go binding around an Ethereum contract. +type IERC20CustodyCaller struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// IERC20CustodyTransactor is an auto generated write-only Go binding around an Ethereum contract. +type IERC20CustodyTransactor struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// IERC20CustodyFilterer is an auto generated log filtering Go binding around an Ethereum contract events. +type IERC20CustodyFilterer struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// IERC20CustodySession is an auto generated Go binding around an Ethereum contract, +// with pre-set call and transact options. +type IERC20CustodySession struct { + Contract *IERC20Custody // Generic contract binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// IERC20CustodyCallerSession is an auto generated read-only Go binding around an Ethereum contract, +// with pre-set call options. +type IERC20CustodyCallerSession struct { + Contract *IERC20CustodyCaller // Generic contract caller binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session +} + +// IERC20CustodyTransactorSession is an auto generated write-only Go binding around an Ethereum contract, +// with pre-set transact options. +type IERC20CustodyTransactorSession struct { + Contract *IERC20CustodyTransactor // Generic contract transactor binding to set the session for + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// IERC20CustodyRaw is an auto generated low-level Go binding around an Ethereum contract. +type IERC20CustodyRaw struct { + Contract *IERC20Custody // Generic contract binding to access the raw methods on +} + +// IERC20CustodyCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract. +type IERC20CustodyCallerRaw struct { + Contract *IERC20CustodyCaller // Generic read-only contract binding to access the raw methods on +} + +// IERC20CustodyTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract. +type IERC20CustodyTransactorRaw struct { + Contract *IERC20CustodyTransactor // Generic write-only contract binding to access the raw methods on +} + +// NewIERC20Custody creates a new instance of IERC20Custody, bound to a specific deployed contract. +func NewIERC20Custody(address common.Address, backend bind.ContractBackend) (*IERC20Custody, error) { + contract, err := bindIERC20Custody(address, backend, backend, backend) + if err != nil { + return nil, err + } + return &IERC20Custody{IERC20CustodyCaller: IERC20CustodyCaller{contract: contract}, IERC20CustodyTransactor: IERC20CustodyTransactor{contract: contract}, IERC20CustodyFilterer: IERC20CustodyFilterer{contract: contract}}, nil +} + +// NewIERC20CustodyCaller creates a new read-only instance of IERC20Custody, bound to a specific deployed contract. +func NewIERC20CustodyCaller(address common.Address, caller bind.ContractCaller) (*IERC20CustodyCaller, error) { + contract, err := bindIERC20Custody(address, caller, nil, nil) + if err != nil { + return nil, err + } + return &IERC20CustodyCaller{contract: contract}, nil +} + +// NewIERC20CustodyTransactor creates a new write-only instance of IERC20Custody, bound to a specific deployed contract. +func NewIERC20CustodyTransactor(address common.Address, transactor bind.ContractTransactor) (*IERC20CustodyTransactor, error) { + contract, err := bindIERC20Custody(address, nil, transactor, nil) + if err != nil { + return nil, err + } + return &IERC20CustodyTransactor{contract: contract}, nil +} + +// NewIERC20CustodyFilterer creates a new log filterer instance of IERC20Custody, bound to a specific deployed contract. +func NewIERC20CustodyFilterer(address common.Address, filterer bind.ContractFilterer) (*IERC20CustodyFilterer, error) { + contract, err := bindIERC20Custody(address, nil, nil, filterer) + if err != nil { + return nil, err + } + return &IERC20CustodyFilterer{contract: contract}, nil +} + +// bindIERC20Custody binds a generic wrapper to an already deployed contract. +func bindIERC20Custody(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { + parsed, err := IERC20CustodyMetaData.GetAbi() + if err != nil { + return nil, err + } + return bind.NewBoundContract(address, *parsed, caller, transactor, filterer), nil +} + +// Call invokes the (constant) contract method with params as input values and +// sets the output to result. The result type might be a single field for simple +// returns, a slice of interfaces for anonymous returns and a struct for named +// returns. +func (_IERC20Custody *IERC20CustodyRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _IERC20Custody.Contract.IERC20CustodyCaller.contract.Call(opts, result, method, params...) +} + +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_IERC20Custody *IERC20CustodyRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _IERC20Custody.Contract.IERC20CustodyTransactor.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_IERC20Custody *IERC20CustodyRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _IERC20Custody.Contract.IERC20CustodyTransactor.contract.Transact(opts, method, params...) +} + +// Call invokes the (constant) contract method with params as input values and +// sets the output to result. The result type might be a single field for simple +// returns, a slice of interfaces for anonymous returns and a struct for named +// returns. +func (_IERC20Custody *IERC20CustodyCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _IERC20Custody.Contract.contract.Call(opts, result, method, params...) +} + +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_IERC20Custody *IERC20CustodyTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _IERC20Custody.Contract.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_IERC20Custody *IERC20CustodyTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _IERC20Custody.Contract.contract.Transact(opts, method, params...) +} + +// Whitelisted is a free data retrieval call binding the contract method 0xd936547e. +// +// Solidity: function whitelisted(address token) view returns(bool) +func (_IERC20Custody *IERC20CustodyCaller) Whitelisted(opts *bind.CallOpts, token common.Address) (bool, error) { + var out []interface{} + err := _IERC20Custody.contract.Call(opts, &out, "whitelisted", token) + + if err != nil { + return *new(bool), err + } + + out0 := *abi.ConvertType(out[0], new(bool)).(*bool) + + return out0, err + +} + +// Whitelisted is a free data retrieval call binding the contract method 0xd936547e. +// +// Solidity: function whitelisted(address token) view returns(bool) +func (_IERC20Custody *IERC20CustodySession) Whitelisted(token common.Address) (bool, error) { + return _IERC20Custody.Contract.Whitelisted(&_IERC20Custody.CallOpts, token) +} + +// Whitelisted is a free data retrieval call binding the contract method 0xd936547e. +// +// Solidity: function whitelisted(address token) view returns(bool) +func (_IERC20Custody *IERC20CustodyCallerSession) Whitelisted(token common.Address) (bool, error) { + return _IERC20Custody.Contract.Whitelisted(&_IERC20Custody.CallOpts, token) +} + +// Withdraw is a paid mutator transaction binding the contract method 0xd9caed12. +// +// Solidity: function withdraw(address token, address to, uint256 amount) returns() +func (_IERC20Custody *IERC20CustodyTransactor) Withdraw(opts *bind.TransactOpts, token common.Address, to common.Address, amount *big.Int) (*types.Transaction, error) { + return _IERC20Custody.contract.Transact(opts, "withdraw", token, to, amount) +} + +// Withdraw is a paid mutator transaction binding the contract method 0xd9caed12. +// +// Solidity: function withdraw(address token, address to, uint256 amount) returns() +func (_IERC20Custody *IERC20CustodySession) Withdraw(token common.Address, to common.Address, amount *big.Int) (*types.Transaction, error) { + return _IERC20Custody.Contract.Withdraw(&_IERC20Custody.TransactOpts, token, to, amount) +} + +// Withdraw is a paid mutator transaction binding the contract method 0xd9caed12. +// +// Solidity: function withdraw(address token, address to, uint256 amount) returns() +func (_IERC20Custody *IERC20CustodyTransactorSession) Withdraw(token common.Address, to common.Address, amount *big.Int) (*types.Transaction, error) { + return _IERC20Custody.Contract.Withdraw(&_IERC20Custody.TransactOpts, token, to, amount) +} + +// WithdrawAndCall is a paid mutator transaction binding the contract method 0x21fc65f2. +// +// Solidity: function withdrawAndCall(address token, address to, uint256 amount, bytes data) returns() +func (_IERC20Custody *IERC20CustodyTransactor) WithdrawAndCall(opts *bind.TransactOpts, token common.Address, to common.Address, amount *big.Int, data []byte) (*types.Transaction, error) { + return _IERC20Custody.contract.Transact(opts, "withdrawAndCall", token, to, amount, data) +} + +// WithdrawAndCall is a paid mutator transaction binding the contract method 0x21fc65f2. +// +// Solidity: function withdrawAndCall(address token, address to, uint256 amount, bytes data) returns() +func (_IERC20Custody *IERC20CustodySession) WithdrawAndCall(token common.Address, to common.Address, amount *big.Int, data []byte) (*types.Transaction, error) { + return _IERC20Custody.Contract.WithdrawAndCall(&_IERC20Custody.TransactOpts, token, to, amount, data) +} + +// WithdrawAndCall is a paid mutator transaction binding the contract method 0x21fc65f2. +// +// Solidity: function withdrawAndCall(address token, address to, uint256 amount, bytes data) returns() +func (_IERC20Custody *IERC20CustodyTransactorSession) WithdrawAndCall(token common.Address, to common.Address, amount *big.Int, data []byte) (*types.Transaction, error) { + return _IERC20Custody.Contract.WithdrawAndCall(&_IERC20Custody.TransactOpts, token, to, amount, data) +} + +// WithdrawAndRevert is a paid mutator transaction binding the contract method 0xc8a02362. +// +// Solidity: function withdrawAndRevert(address token, address to, uint256 amount, bytes data) returns() +func (_IERC20Custody *IERC20CustodyTransactor) WithdrawAndRevert(opts *bind.TransactOpts, token common.Address, to common.Address, amount *big.Int, data []byte) (*types.Transaction, error) { + return _IERC20Custody.contract.Transact(opts, "withdrawAndRevert", token, to, amount, data) +} + +// WithdrawAndRevert is a paid mutator transaction binding the contract method 0xc8a02362. +// +// Solidity: function withdrawAndRevert(address token, address to, uint256 amount, bytes data) returns() +func (_IERC20Custody *IERC20CustodySession) WithdrawAndRevert(token common.Address, to common.Address, amount *big.Int, data []byte) (*types.Transaction, error) { + return _IERC20Custody.Contract.WithdrawAndRevert(&_IERC20Custody.TransactOpts, token, to, amount, data) +} + +// WithdrawAndRevert is a paid mutator transaction binding the contract method 0xc8a02362. +// +// Solidity: function withdrawAndRevert(address token, address to, uint256 amount, bytes data) returns() +func (_IERC20Custody *IERC20CustodyTransactorSession) WithdrawAndRevert(token common.Address, to common.Address, amount *big.Int, data []byte) (*types.Transaction, error) { + return _IERC20Custody.Contract.WithdrawAndRevert(&_IERC20Custody.TransactOpts, token, to, amount, data) +} + +// IERC20CustodyUnwhitelistedIterator is returned from FilterUnwhitelisted and is used to iterate over the raw logs and unpacked data for Unwhitelisted events raised by the IERC20Custody contract. +type IERC20CustodyUnwhitelistedIterator struct { + Event *IERC20CustodyUnwhitelisted // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *IERC20CustodyUnwhitelistedIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(IERC20CustodyUnwhitelisted) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(IERC20CustodyUnwhitelisted) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *IERC20CustodyUnwhitelistedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *IERC20CustodyUnwhitelistedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// IERC20CustodyUnwhitelisted represents a Unwhitelisted event raised by the IERC20Custody contract. +type IERC20CustodyUnwhitelisted struct { + Token common.Address + Raw types.Log // Blockchain specific contextual infos +} + +// FilterUnwhitelisted is a free log retrieval operation binding the contract event 0x51085ddf9ebdded84b76e829eb58c4078e4b5bdf97d9a94723f336039da46791. +// +// Solidity: event Unwhitelisted(address indexed token) +func (_IERC20Custody *IERC20CustodyFilterer) FilterUnwhitelisted(opts *bind.FilterOpts, token []common.Address) (*IERC20CustodyUnwhitelistedIterator, error) { + + var tokenRule []interface{} + for _, tokenItem := range token { + tokenRule = append(tokenRule, tokenItem) + } + + logs, sub, err := _IERC20Custody.contract.FilterLogs(opts, "Unwhitelisted", tokenRule) + if err != nil { + return nil, err + } + return &IERC20CustodyUnwhitelistedIterator{contract: _IERC20Custody.contract, event: "Unwhitelisted", logs: logs, sub: sub}, nil +} + +// WatchUnwhitelisted is a free log subscription operation binding the contract event 0x51085ddf9ebdded84b76e829eb58c4078e4b5bdf97d9a94723f336039da46791. +// +// Solidity: event Unwhitelisted(address indexed token) +func (_IERC20Custody *IERC20CustodyFilterer) WatchUnwhitelisted(opts *bind.WatchOpts, sink chan<- *IERC20CustodyUnwhitelisted, token []common.Address) (event.Subscription, error) { + + var tokenRule []interface{} + for _, tokenItem := range token { + tokenRule = append(tokenRule, tokenItem) + } + + logs, sub, err := _IERC20Custody.contract.WatchLogs(opts, "Unwhitelisted", tokenRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(IERC20CustodyUnwhitelisted) + if err := _IERC20Custody.contract.UnpackLog(event, "Unwhitelisted", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseUnwhitelisted is a log parse operation binding the contract event 0x51085ddf9ebdded84b76e829eb58c4078e4b5bdf97d9a94723f336039da46791. +// +// Solidity: event Unwhitelisted(address indexed token) +func (_IERC20Custody *IERC20CustodyFilterer) ParseUnwhitelisted(log types.Log) (*IERC20CustodyUnwhitelisted, error) { + event := new(IERC20CustodyUnwhitelisted) + if err := _IERC20Custody.contract.UnpackLog(event, "Unwhitelisted", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// IERC20CustodyWhitelistedIterator is returned from FilterWhitelisted and is used to iterate over the raw logs and unpacked data for Whitelisted events raised by the IERC20Custody contract. +type IERC20CustodyWhitelistedIterator struct { + Event *IERC20CustodyWhitelisted // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *IERC20CustodyWhitelistedIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(IERC20CustodyWhitelisted) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(IERC20CustodyWhitelisted) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *IERC20CustodyWhitelistedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *IERC20CustodyWhitelistedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// IERC20CustodyWhitelisted represents a Whitelisted event raised by the IERC20Custody contract. +type IERC20CustodyWhitelisted struct { + Token common.Address + Raw types.Log // Blockchain specific contextual infos +} + +// FilterWhitelisted is a free log retrieval operation binding the contract event 0xaab7954e9d246b167ef88aeddad35209ca2489d95a8aeb59e288d9b19fae5a54. +// +// Solidity: event Whitelisted(address indexed token) +func (_IERC20Custody *IERC20CustodyFilterer) FilterWhitelisted(opts *bind.FilterOpts, token []common.Address) (*IERC20CustodyWhitelistedIterator, error) { + + var tokenRule []interface{} + for _, tokenItem := range token { + tokenRule = append(tokenRule, tokenItem) + } + + logs, sub, err := _IERC20Custody.contract.FilterLogs(opts, "Whitelisted", tokenRule) + if err != nil { + return nil, err + } + return &IERC20CustodyWhitelistedIterator{contract: _IERC20Custody.contract, event: "Whitelisted", logs: logs, sub: sub}, nil +} + +// WatchWhitelisted is a free log subscription operation binding the contract event 0xaab7954e9d246b167ef88aeddad35209ca2489d95a8aeb59e288d9b19fae5a54. +// +// Solidity: event Whitelisted(address indexed token) +func (_IERC20Custody *IERC20CustodyFilterer) WatchWhitelisted(opts *bind.WatchOpts, sink chan<- *IERC20CustodyWhitelisted, token []common.Address) (event.Subscription, error) { + + var tokenRule []interface{} + for _, tokenItem := range token { + tokenRule = append(tokenRule, tokenItem) + } + + logs, sub, err := _IERC20Custody.contract.WatchLogs(opts, "Whitelisted", tokenRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(IERC20CustodyWhitelisted) + if err := _IERC20Custody.contract.UnpackLog(event, "Whitelisted", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseWhitelisted is a log parse operation binding the contract event 0xaab7954e9d246b167ef88aeddad35209ca2489d95a8aeb59e288d9b19fae5a54. +// +// Solidity: event Whitelisted(address indexed token) +func (_IERC20Custody *IERC20CustodyFilterer) ParseWhitelisted(log types.Log) (*IERC20CustodyWhitelisted, error) { + event := new(IERC20CustodyWhitelisted) + if err := _IERC20Custody.contract.UnpackLog(event, "Whitelisted", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// IERC20CustodyWithdrawIterator is returned from FilterWithdraw and is used to iterate over the raw logs and unpacked data for Withdraw events raised by the IERC20Custody contract. +type IERC20CustodyWithdrawIterator struct { + Event *IERC20CustodyWithdraw // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *IERC20CustodyWithdrawIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(IERC20CustodyWithdraw) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(IERC20CustodyWithdraw) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *IERC20CustodyWithdrawIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *IERC20CustodyWithdrawIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// IERC20CustodyWithdraw represents a Withdraw event raised by the IERC20Custody contract. +type IERC20CustodyWithdraw struct { + Token common.Address + To common.Address + Amount *big.Int + Raw types.Log // Blockchain specific contextual infos +} + +// FilterWithdraw is a free log retrieval operation binding the contract event 0x9b1bfa7fa9ee420a16e124f794c35ac9f90472acc99140eb2f6447c714cad8eb. +// +// Solidity: event Withdraw(address indexed token, address indexed to, uint256 amount) +func (_IERC20Custody *IERC20CustodyFilterer) FilterWithdraw(opts *bind.FilterOpts, token []common.Address, to []common.Address) (*IERC20CustodyWithdrawIterator, error) { + + var tokenRule []interface{} + for _, tokenItem := range token { + tokenRule = append(tokenRule, tokenItem) + } + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _IERC20Custody.contract.FilterLogs(opts, "Withdraw", tokenRule, toRule) + if err != nil { + return nil, err + } + return &IERC20CustodyWithdrawIterator{contract: _IERC20Custody.contract, event: "Withdraw", logs: logs, sub: sub}, nil +} + +// WatchWithdraw is a free log subscription operation binding the contract event 0x9b1bfa7fa9ee420a16e124f794c35ac9f90472acc99140eb2f6447c714cad8eb. +// +// Solidity: event Withdraw(address indexed token, address indexed to, uint256 amount) +func (_IERC20Custody *IERC20CustodyFilterer) WatchWithdraw(opts *bind.WatchOpts, sink chan<- *IERC20CustodyWithdraw, token []common.Address, to []common.Address) (event.Subscription, error) { + + var tokenRule []interface{} + for _, tokenItem := range token { + tokenRule = append(tokenRule, tokenItem) + } + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _IERC20Custody.contract.WatchLogs(opts, "Withdraw", tokenRule, toRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(IERC20CustodyWithdraw) + if err := _IERC20Custody.contract.UnpackLog(event, "Withdraw", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseWithdraw is a log parse operation binding the contract event 0x9b1bfa7fa9ee420a16e124f794c35ac9f90472acc99140eb2f6447c714cad8eb. +// +// Solidity: event Withdraw(address indexed token, address indexed to, uint256 amount) +func (_IERC20Custody *IERC20CustodyFilterer) ParseWithdraw(log types.Log) (*IERC20CustodyWithdraw, error) { + event := new(IERC20CustodyWithdraw) + if err := _IERC20Custody.contract.UnpackLog(event, "Withdraw", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// IERC20CustodyWithdrawAndCallIterator is returned from FilterWithdrawAndCall and is used to iterate over the raw logs and unpacked data for WithdrawAndCall events raised by the IERC20Custody contract. +type IERC20CustodyWithdrawAndCallIterator struct { + Event *IERC20CustodyWithdrawAndCall // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *IERC20CustodyWithdrawAndCallIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(IERC20CustodyWithdrawAndCall) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(IERC20CustodyWithdrawAndCall) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *IERC20CustodyWithdrawAndCallIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *IERC20CustodyWithdrawAndCallIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// IERC20CustodyWithdrawAndCall represents a WithdrawAndCall event raised by the IERC20Custody contract. +type IERC20CustodyWithdrawAndCall struct { + Token common.Address + To common.Address + Amount *big.Int + Data []byte + Raw types.Log // Blockchain specific contextual infos +} + +// FilterWithdrawAndCall is a free log retrieval operation binding the contract event 0x85b5be9cf454e05e0bddf49315178102227c312078eefa3c00294fb4d912ae4e. +// +// Solidity: event WithdrawAndCall(address indexed token, address indexed to, uint256 amount, bytes data) +func (_IERC20Custody *IERC20CustodyFilterer) FilterWithdrawAndCall(opts *bind.FilterOpts, token []common.Address, to []common.Address) (*IERC20CustodyWithdrawAndCallIterator, error) { + + var tokenRule []interface{} + for _, tokenItem := range token { + tokenRule = append(tokenRule, tokenItem) + } + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _IERC20Custody.contract.FilterLogs(opts, "WithdrawAndCall", tokenRule, toRule) + if err != nil { + return nil, err + } + return &IERC20CustodyWithdrawAndCallIterator{contract: _IERC20Custody.contract, event: "WithdrawAndCall", logs: logs, sub: sub}, nil +} + +// WatchWithdrawAndCall is a free log subscription operation binding the contract event 0x85b5be9cf454e05e0bddf49315178102227c312078eefa3c00294fb4d912ae4e. +// +// Solidity: event WithdrawAndCall(address indexed token, address indexed to, uint256 amount, bytes data) +func (_IERC20Custody *IERC20CustodyFilterer) WatchWithdrawAndCall(opts *bind.WatchOpts, sink chan<- *IERC20CustodyWithdrawAndCall, token []common.Address, to []common.Address) (event.Subscription, error) { + + var tokenRule []interface{} + for _, tokenItem := range token { + tokenRule = append(tokenRule, tokenItem) + } + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _IERC20Custody.contract.WatchLogs(opts, "WithdrawAndCall", tokenRule, toRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(IERC20CustodyWithdrawAndCall) + if err := _IERC20Custody.contract.UnpackLog(event, "WithdrawAndCall", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseWithdrawAndCall is a log parse operation binding the contract event 0x85b5be9cf454e05e0bddf49315178102227c312078eefa3c00294fb4d912ae4e. +// +// Solidity: event WithdrawAndCall(address indexed token, address indexed to, uint256 amount, bytes data) +func (_IERC20Custody *IERC20CustodyFilterer) ParseWithdrawAndCall(log types.Log) (*IERC20CustodyWithdrawAndCall, error) { + event := new(IERC20CustodyWithdrawAndCall) + if err := _IERC20Custody.contract.UnpackLog(event, "WithdrawAndCall", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// IERC20CustodyWithdrawAndRevertIterator is returned from FilterWithdrawAndRevert and is used to iterate over the raw logs and unpacked data for WithdrawAndRevert events raised by the IERC20Custody contract. +type IERC20CustodyWithdrawAndRevertIterator struct { + Event *IERC20CustodyWithdrawAndRevert // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *IERC20CustodyWithdrawAndRevertIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(IERC20CustodyWithdrawAndRevert) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(IERC20CustodyWithdrawAndRevert) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *IERC20CustodyWithdrawAndRevertIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *IERC20CustodyWithdrawAndRevertIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// IERC20CustodyWithdrawAndRevert represents a WithdrawAndRevert event raised by the IERC20Custody contract. +type IERC20CustodyWithdrawAndRevert struct { + Token common.Address + To common.Address + Amount *big.Int + Data []byte + Raw types.Log // Blockchain specific contextual infos +} + +// FilterWithdrawAndRevert is a free log retrieval operation binding the contract event 0xb9d4efa96044e5f5e03e696fa9ae2ff66911cc27e8a637c3627c75bc5b2241c8. +// +// Solidity: event WithdrawAndRevert(address indexed token, address indexed to, uint256 amount, bytes data) +func (_IERC20Custody *IERC20CustodyFilterer) FilterWithdrawAndRevert(opts *bind.FilterOpts, token []common.Address, to []common.Address) (*IERC20CustodyWithdrawAndRevertIterator, error) { + + var tokenRule []interface{} + for _, tokenItem := range token { + tokenRule = append(tokenRule, tokenItem) + } + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _IERC20Custody.contract.FilterLogs(opts, "WithdrawAndRevert", tokenRule, toRule) + if err != nil { + return nil, err + } + return &IERC20CustodyWithdrawAndRevertIterator{contract: _IERC20Custody.contract, event: "WithdrawAndRevert", logs: logs, sub: sub}, nil +} + +// WatchWithdrawAndRevert is a free log subscription operation binding the contract event 0xb9d4efa96044e5f5e03e696fa9ae2ff66911cc27e8a637c3627c75bc5b2241c8. +// +// Solidity: event WithdrawAndRevert(address indexed token, address indexed to, uint256 amount, bytes data) +func (_IERC20Custody *IERC20CustodyFilterer) WatchWithdrawAndRevert(opts *bind.WatchOpts, sink chan<- *IERC20CustodyWithdrawAndRevert, token []common.Address, to []common.Address) (event.Subscription, error) { + + var tokenRule []interface{} + for _, tokenItem := range token { + tokenRule = append(tokenRule, tokenItem) + } + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _IERC20Custody.contract.WatchLogs(opts, "WithdrawAndRevert", tokenRule, toRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(IERC20CustodyWithdrawAndRevert) + if err := _IERC20Custody.contract.UnpackLog(event, "WithdrawAndRevert", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseWithdrawAndRevert is a log parse operation binding the contract event 0xb9d4efa96044e5f5e03e696fa9ae2ff66911cc27e8a637c3627c75bc5b2241c8. +// +// Solidity: event WithdrawAndRevert(address indexed token, address indexed to, uint256 amount, bytes data) +func (_IERC20Custody *IERC20CustodyFilterer) ParseWithdrawAndRevert(log types.Log) (*IERC20CustodyWithdrawAndRevert, error) { + event := new(IERC20CustodyWithdrawAndRevert) + if err := _IERC20Custody.contract.UnpackLog(event, "WithdrawAndRevert", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} diff --git a/v2/pkg/ierc20custody.sol/ierc20custodyerrors.go b/v2/pkg/ierc20custody.sol/ierc20custodyerrors.go index 5ff40f4f..ec6678ff 100644 --- a/v2/pkg/ierc20custody.sol/ierc20custodyerrors.go +++ b/v2/pkg/ierc20custody.sol/ierc20custodyerrors.go @@ -31,7 +31,7 @@ var ( // IERC20CustodyErrorsMetaData contains all meta data concerning the IERC20CustodyErrors contract. var IERC20CustodyErrorsMetaData = &bind.MetaData{ - ABI: "[{\"type\":\"error\",\"name\":\"ZeroAddress\",\"inputs\":[]}]", + ABI: "[{\"type\":\"error\",\"name\":\"NotWhitelisted\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZeroAddress\",\"inputs\":[]}]", } // IERC20CustodyErrorsABI is the input ABI used to generate the binding from. diff --git a/v2/pkg/ierc20custody.sol/ierc20custodyevents.go b/v2/pkg/ierc20custody.sol/ierc20custodyevents.go index 5777242e..331c1dad 100644 --- a/v2/pkg/ierc20custody.sol/ierc20custodyevents.go +++ b/v2/pkg/ierc20custody.sol/ierc20custodyevents.go @@ -31,7 +31,7 @@ var ( // IERC20CustodyEventsMetaData contains all meta data concerning the IERC20CustodyEvents contract. var IERC20CustodyEventsMetaData = &bind.MetaData{ - ABI: "[{\"type\":\"event\",\"name\":\"Withdraw\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"WithdrawAndCall\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"WithdrawAndRevert\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false}]", + ABI: "[{\"type\":\"event\",\"name\":\"Unwhitelisted\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Whitelisted\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Withdraw\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"WithdrawAndCall\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"WithdrawAndRevert\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false}]", } // IERC20CustodyEventsABI is the input ABI used to generate the binding from. @@ -180,6 +180,294 @@ func (_IERC20CustodyEvents *IERC20CustodyEventsTransactorRaw) Transact(opts *bin return _IERC20CustodyEvents.Contract.contract.Transact(opts, method, params...) } +// IERC20CustodyEventsUnwhitelistedIterator is returned from FilterUnwhitelisted and is used to iterate over the raw logs and unpacked data for Unwhitelisted events raised by the IERC20CustodyEvents contract. +type IERC20CustodyEventsUnwhitelistedIterator struct { + Event *IERC20CustodyEventsUnwhitelisted // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *IERC20CustodyEventsUnwhitelistedIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(IERC20CustodyEventsUnwhitelisted) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(IERC20CustodyEventsUnwhitelisted) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *IERC20CustodyEventsUnwhitelistedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *IERC20CustodyEventsUnwhitelistedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// IERC20CustodyEventsUnwhitelisted represents a Unwhitelisted event raised by the IERC20CustodyEvents contract. +type IERC20CustodyEventsUnwhitelisted struct { + Token common.Address + Raw types.Log // Blockchain specific contextual infos +} + +// FilterUnwhitelisted is a free log retrieval operation binding the contract event 0x51085ddf9ebdded84b76e829eb58c4078e4b5bdf97d9a94723f336039da46791. +// +// Solidity: event Unwhitelisted(address indexed token) +func (_IERC20CustodyEvents *IERC20CustodyEventsFilterer) FilterUnwhitelisted(opts *bind.FilterOpts, token []common.Address) (*IERC20CustodyEventsUnwhitelistedIterator, error) { + + var tokenRule []interface{} + for _, tokenItem := range token { + tokenRule = append(tokenRule, tokenItem) + } + + logs, sub, err := _IERC20CustodyEvents.contract.FilterLogs(opts, "Unwhitelisted", tokenRule) + if err != nil { + return nil, err + } + return &IERC20CustodyEventsUnwhitelistedIterator{contract: _IERC20CustodyEvents.contract, event: "Unwhitelisted", logs: logs, sub: sub}, nil +} + +// WatchUnwhitelisted is a free log subscription operation binding the contract event 0x51085ddf9ebdded84b76e829eb58c4078e4b5bdf97d9a94723f336039da46791. +// +// Solidity: event Unwhitelisted(address indexed token) +func (_IERC20CustodyEvents *IERC20CustodyEventsFilterer) WatchUnwhitelisted(opts *bind.WatchOpts, sink chan<- *IERC20CustodyEventsUnwhitelisted, token []common.Address) (event.Subscription, error) { + + var tokenRule []interface{} + for _, tokenItem := range token { + tokenRule = append(tokenRule, tokenItem) + } + + logs, sub, err := _IERC20CustodyEvents.contract.WatchLogs(opts, "Unwhitelisted", tokenRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(IERC20CustodyEventsUnwhitelisted) + if err := _IERC20CustodyEvents.contract.UnpackLog(event, "Unwhitelisted", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseUnwhitelisted is a log parse operation binding the contract event 0x51085ddf9ebdded84b76e829eb58c4078e4b5bdf97d9a94723f336039da46791. +// +// Solidity: event Unwhitelisted(address indexed token) +func (_IERC20CustodyEvents *IERC20CustodyEventsFilterer) ParseUnwhitelisted(log types.Log) (*IERC20CustodyEventsUnwhitelisted, error) { + event := new(IERC20CustodyEventsUnwhitelisted) + if err := _IERC20CustodyEvents.contract.UnpackLog(event, "Unwhitelisted", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// IERC20CustodyEventsWhitelistedIterator is returned from FilterWhitelisted and is used to iterate over the raw logs and unpacked data for Whitelisted events raised by the IERC20CustodyEvents contract. +type IERC20CustodyEventsWhitelistedIterator struct { + Event *IERC20CustodyEventsWhitelisted // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *IERC20CustodyEventsWhitelistedIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(IERC20CustodyEventsWhitelisted) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(IERC20CustodyEventsWhitelisted) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *IERC20CustodyEventsWhitelistedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *IERC20CustodyEventsWhitelistedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// IERC20CustodyEventsWhitelisted represents a Whitelisted event raised by the IERC20CustodyEvents contract. +type IERC20CustodyEventsWhitelisted struct { + Token common.Address + Raw types.Log // Blockchain specific contextual infos +} + +// FilterWhitelisted is a free log retrieval operation binding the contract event 0xaab7954e9d246b167ef88aeddad35209ca2489d95a8aeb59e288d9b19fae5a54. +// +// Solidity: event Whitelisted(address indexed token) +func (_IERC20CustodyEvents *IERC20CustodyEventsFilterer) FilterWhitelisted(opts *bind.FilterOpts, token []common.Address) (*IERC20CustodyEventsWhitelistedIterator, error) { + + var tokenRule []interface{} + for _, tokenItem := range token { + tokenRule = append(tokenRule, tokenItem) + } + + logs, sub, err := _IERC20CustodyEvents.contract.FilterLogs(opts, "Whitelisted", tokenRule) + if err != nil { + return nil, err + } + return &IERC20CustodyEventsWhitelistedIterator{contract: _IERC20CustodyEvents.contract, event: "Whitelisted", logs: logs, sub: sub}, nil +} + +// WatchWhitelisted is a free log subscription operation binding the contract event 0xaab7954e9d246b167ef88aeddad35209ca2489d95a8aeb59e288d9b19fae5a54. +// +// Solidity: event Whitelisted(address indexed token) +func (_IERC20CustodyEvents *IERC20CustodyEventsFilterer) WatchWhitelisted(opts *bind.WatchOpts, sink chan<- *IERC20CustodyEventsWhitelisted, token []common.Address) (event.Subscription, error) { + + var tokenRule []interface{} + for _, tokenItem := range token { + tokenRule = append(tokenRule, tokenItem) + } + + logs, sub, err := _IERC20CustodyEvents.contract.WatchLogs(opts, "Whitelisted", tokenRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(IERC20CustodyEventsWhitelisted) + if err := _IERC20CustodyEvents.contract.UnpackLog(event, "Whitelisted", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseWhitelisted is a log parse operation binding the contract event 0xaab7954e9d246b167ef88aeddad35209ca2489d95a8aeb59e288d9b19fae5a54. +// +// Solidity: event Whitelisted(address indexed token) +func (_IERC20CustodyEvents *IERC20CustodyEventsFilterer) ParseWhitelisted(log types.Log) (*IERC20CustodyEventsWhitelisted, error) { + event := new(IERC20CustodyEventsWhitelisted) + if err := _IERC20CustodyEvents.contract.UnpackLog(event, "Whitelisted", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + // IERC20CustodyEventsWithdrawIterator is returned from FilterWithdraw and is used to iterate over the raw logs and unpacked data for Withdraw events raised by the IERC20CustodyEvents contract. type IERC20CustodyEventsWithdrawIterator struct { Event *IERC20CustodyEventsWithdraw // Event containing the contract specifics and raw log diff --git a/v2/pkg/igatewayevm.sol/igatewayevm.go b/v2/pkg/igatewayevm.sol/igatewayevm.go index bd144008..a727d87e 100644 --- a/v2/pkg/igatewayevm.sol/igatewayevm.go +++ b/v2/pkg/igatewayevm.sol/igatewayevm.go @@ -31,7 +31,7 @@ var ( // IGatewayEVMMetaData contains all meta data concerning the IGatewayEVM contract. var IGatewayEVMMetaData = &bind.MetaData{ - ABI: "[{\"type\":\"function\",\"name\":\"call\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"deposit\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"deposit\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"depositAndCall\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"depositAndCall\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"execute\",\"inputs\":[{\"name\":\"destination\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"executeRevert\",\"inputs\":[{\"name\":\"destination\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"executeWithERC20\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"revertWithERC20\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"}]", + ABI: "[{\"type\":\"function\",\"name\":\"call\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"deposit\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"deposit\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"depositAndCall\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"depositAndCall\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"execute\",\"inputs\":[{\"name\":\"destination\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"executeRevert\",\"inputs\":[{\"name\":\"destination\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"executeWithERC20\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"revertWithERC20\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"event\",\"name\":\"Call\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"receiver\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Deposit\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"receiver\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"asset\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Executed\",\"inputs\":[{\"name\":\"destination\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ExecutedWithERC20\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Reverted\",\"inputs\":[{\"name\":\"destination\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RevertedWithERC20\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"ApprovalFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ConnectorInitialized\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"CustodyInitialized\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"DepositFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ExecutionFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientERC20Amount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientETHAmount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NotWhitelistedInCustody\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZeroAddress\",\"inputs\":[]}]", } // IGatewayEVMABI is the input ABI used to generate the binding from. @@ -368,3 +368,915 @@ func (_IGatewayEVM *IGatewayEVMSession) RevertWithERC20(token common.Address, to func (_IGatewayEVM *IGatewayEVMTransactorSession) RevertWithERC20(token common.Address, to common.Address, amount *big.Int, data []byte) (*types.Transaction, error) { return _IGatewayEVM.Contract.RevertWithERC20(&_IGatewayEVM.TransactOpts, token, to, amount, data) } + +// IGatewayEVMCallIterator is returned from FilterCall and is used to iterate over the raw logs and unpacked data for Call events raised by the IGatewayEVM contract. +type IGatewayEVMCallIterator struct { + Event *IGatewayEVMCall // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *IGatewayEVMCallIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(IGatewayEVMCall) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(IGatewayEVMCall) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *IGatewayEVMCallIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *IGatewayEVMCallIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// IGatewayEVMCall represents a Call event raised by the IGatewayEVM contract. +type IGatewayEVMCall struct { + Sender common.Address + Receiver common.Address + Payload []byte + Raw types.Log // Blockchain specific contextual infos +} + +// FilterCall is a free log retrieval operation binding the contract event 0x2a21062ee9199c2e205622999eeb7c3da73153674f36a0acd3f74fa6af67bde3. +// +// Solidity: event Call(address indexed sender, address indexed receiver, bytes payload) +func (_IGatewayEVM *IGatewayEVMFilterer) FilterCall(opts *bind.FilterOpts, sender []common.Address, receiver []common.Address) (*IGatewayEVMCallIterator, error) { + + var senderRule []interface{} + for _, senderItem := range sender { + senderRule = append(senderRule, senderItem) + } + var receiverRule []interface{} + for _, receiverItem := range receiver { + receiverRule = append(receiverRule, receiverItem) + } + + logs, sub, err := _IGatewayEVM.contract.FilterLogs(opts, "Call", senderRule, receiverRule) + if err != nil { + return nil, err + } + return &IGatewayEVMCallIterator{contract: _IGatewayEVM.contract, event: "Call", logs: logs, sub: sub}, nil +} + +// WatchCall is a free log subscription operation binding the contract event 0x2a21062ee9199c2e205622999eeb7c3da73153674f36a0acd3f74fa6af67bde3. +// +// Solidity: event Call(address indexed sender, address indexed receiver, bytes payload) +func (_IGatewayEVM *IGatewayEVMFilterer) WatchCall(opts *bind.WatchOpts, sink chan<- *IGatewayEVMCall, sender []common.Address, receiver []common.Address) (event.Subscription, error) { + + var senderRule []interface{} + for _, senderItem := range sender { + senderRule = append(senderRule, senderItem) + } + var receiverRule []interface{} + for _, receiverItem := range receiver { + receiverRule = append(receiverRule, receiverItem) + } + + logs, sub, err := _IGatewayEVM.contract.WatchLogs(opts, "Call", senderRule, receiverRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(IGatewayEVMCall) + if err := _IGatewayEVM.contract.UnpackLog(event, "Call", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseCall is a log parse operation binding the contract event 0x2a21062ee9199c2e205622999eeb7c3da73153674f36a0acd3f74fa6af67bde3. +// +// Solidity: event Call(address indexed sender, address indexed receiver, bytes payload) +func (_IGatewayEVM *IGatewayEVMFilterer) ParseCall(log types.Log) (*IGatewayEVMCall, error) { + event := new(IGatewayEVMCall) + if err := _IGatewayEVM.contract.UnpackLog(event, "Call", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// IGatewayEVMDepositIterator is returned from FilterDeposit and is used to iterate over the raw logs and unpacked data for Deposit events raised by the IGatewayEVM contract. +type IGatewayEVMDepositIterator struct { + Event *IGatewayEVMDeposit // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *IGatewayEVMDepositIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(IGatewayEVMDeposit) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(IGatewayEVMDeposit) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *IGatewayEVMDepositIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *IGatewayEVMDepositIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// IGatewayEVMDeposit represents a Deposit event raised by the IGatewayEVM contract. +type IGatewayEVMDeposit struct { + Sender common.Address + Receiver common.Address + Amount *big.Int + Asset common.Address + Payload []byte + Raw types.Log // Blockchain specific contextual infos +} + +// FilterDeposit is a free log retrieval operation binding the contract event 0x2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a4. +// +// Solidity: event Deposit(address indexed sender, address indexed receiver, uint256 amount, address asset, bytes payload) +func (_IGatewayEVM *IGatewayEVMFilterer) FilterDeposit(opts *bind.FilterOpts, sender []common.Address, receiver []common.Address) (*IGatewayEVMDepositIterator, error) { + + var senderRule []interface{} + for _, senderItem := range sender { + senderRule = append(senderRule, senderItem) + } + var receiverRule []interface{} + for _, receiverItem := range receiver { + receiverRule = append(receiverRule, receiverItem) + } + + logs, sub, err := _IGatewayEVM.contract.FilterLogs(opts, "Deposit", senderRule, receiverRule) + if err != nil { + return nil, err + } + return &IGatewayEVMDepositIterator{contract: _IGatewayEVM.contract, event: "Deposit", logs: logs, sub: sub}, nil +} + +// WatchDeposit is a free log subscription operation binding the contract event 0x2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a4. +// +// Solidity: event Deposit(address indexed sender, address indexed receiver, uint256 amount, address asset, bytes payload) +func (_IGatewayEVM *IGatewayEVMFilterer) WatchDeposit(opts *bind.WatchOpts, sink chan<- *IGatewayEVMDeposit, sender []common.Address, receiver []common.Address) (event.Subscription, error) { + + var senderRule []interface{} + for _, senderItem := range sender { + senderRule = append(senderRule, senderItem) + } + var receiverRule []interface{} + for _, receiverItem := range receiver { + receiverRule = append(receiverRule, receiverItem) + } + + logs, sub, err := _IGatewayEVM.contract.WatchLogs(opts, "Deposit", senderRule, receiverRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(IGatewayEVMDeposit) + if err := _IGatewayEVM.contract.UnpackLog(event, "Deposit", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseDeposit is a log parse operation binding the contract event 0x2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a4. +// +// Solidity: event Deposit(address indexed sender, address indexed receiver, uint256 amount, address asset, bytes payload) +func (_IGatewayEVM *IGatewayEVMFilterer) ParseDeposit(log types.Log) (*IGatewayEVMDeposit, error) { + event := new(IGatewayEVMDeposit) + if err := _IGatewayEVM.contract.UnpackLog(event, "Deposit", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// IGatewayEVMExecutedIterator is returned from FilterExecuted and is used to iterate over the raw logs and unpacked data for Executed events raised by the IGatewayEVM contract. +type IGatewayEVMExecutedIterator struct { + Event *IGatewayEVMExecuted // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *IGatewayEVMExecutedIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(IGatewayEVMExecuted) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(IGatewayEVMExecuted) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *IGatewayEVMExecutedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *IGatewayEVMExecutedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// IGatewayEVMExecuted represents a Executed event raised by the IGatewayEVM contract. +type IGatewayEVMExecuted struct { + Destination common.Address + Value *big.Int + Data []byte + Raw types.Log // Blockchain specific contextual infos +} + +// FilterExecuted is a free log retrieval operation binding the contract event 0xcaf938de11c367272220bfd1d2baa99ca46665e7bc4d85f00adb51b90fe1fa9f. +// +// Solidity: event Executed(address indexed destination, uint256 value, bytes data) +func (_IGatewayEVM *IGatewayEVMFilterer) FilterExecuted(opts *bind.FilterOpts, destination []common.Address) (*IGatewayEVMExecutedIterator, error) { + + var destinationRule []interface{} + for _, destinationItem := range destination { + destinationRule = append(destinationRule, destinationItem) + } + + logs, sub, err := _IGatewayEVM.contract.FilterLogs(opts, "Executed", destinationRule) + if err != nil { + return nil, err + } + return &IGatewayEVMExecutedIterator{contract: _IGatewayEVM.contract, event: "Executed", logs: logs, sub: sub}, nil +} + +// WatchExecuted is a free log subscription operation binding the contract event 0xcaf938de11c367272220bfd1d2baa99ca46665e7bc4d85f00adb51b90fe1fa9f. +// +// Solidity: event Executed(address indexed destination, uint256 value, bytes data) +func (_IGatewayEVM *IGatewayEVMFilterer) WatchExecuted(opts *bind.WatchOpts, sink chan<- *IGatewayEVMExecuted, destination []common.Address) (event.Subscription, error) { + + var destinationRule []interface{} + for _, destinationItem := range destination { + destinationRule = append(destinationRule, destinationItem) + } + + logs, sub, err := _IGatewayEVM.contract.WatchLogs(opts, "Executed", destinationRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(IGatewayEVMExecuted) + if err := _IGatewayEVM.contract.UnpackLog(event, "Executed", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseExecuted is a log parse operation binding the contract event 0xcaf938de11c367272220bfd1d2baa99ca46665e7bc4d85f00adb51b90fe1fa9f. +// +// Solidity: event Executed(address indexed destination, uint256 value, bytes data) +func (_IGatewayEVM *IGatewayEVMFilterer) ParseExecuted(log types.Log) (*IGatewayEVMExecuted, error) { + event := new(IGatewayEVMExecuted) + if err := _IGatewayEVM.contract.UnpackLog(event, "Executed", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// IGatewayEVMExecutedWithERC20Iterator is returned from FilterExecutedWithERC20 and is used to iterate over the raw logs and unpacked data for ExecutedWithERC20 events raised by the IGatewayEVM contract. +type IGatewayEVMExecutedWithERC20Iterator struct { + Event *IGatewayEVMExecutedWithERC20 // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *IGatewayEVMExecutedWithERC20Iterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(IGatewayEVMExecutedWithERC20) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(IGatewayEVMExecutedWithERC20) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *IGatewayEVMExecutedWithERC20Iterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *IGatewayEVMExecutedWithERC20Iterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// IGatewayEVMExecutedWithERC20 represents a ExecutedWithERC20 event raised by the IGatewayEVM contract. +type IGatewayEVMExecutedWithERC20 struct { + Token common.Address + To common.Address + Amount *big.Int + Data []byte + Raw types.Log // Blockchain specific contextual infos +} + +// FilterExecutedWithERC20 is a free log retrieval operation binding the contract event 0x29c40793bffd84cb810179f15d1ceec72bc7f0785514c668ba36645cf99b7382. +// +// Solidity: event ExecutedWithERC20(address indexed token, address indexed to, uint256 amount, bytes data) +func (_IGatewayEVM *IGatewayEVMFilterer) FilterExecutedWithERC20(opts *bind.FilterOpts, token []common.Address, to []common.Address) (*IGatewayEVMExecutedWithERC20Iterator, error) { + + var tokenRule []interface{} + for _, tokenItem := range token { + tokenRule = append(tokenRule, tokenItem) + } + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _IGatewayEVM.contract.FilterLogs(opts, "ExecutedWithERC20", tokenRule, toRule) + if err != nil { + return nil, err + } + return &IGatewayEVMExecutedWithERC20Iterator{contract: _IGatewayEVM.contract, event: "ExecutedWithERC20", logs: logs, sub: sub}, nil +} + +// WatchExecutedWithERC20 is a free log subscription operation binding the contract event 0x29c40793bffd84cb810179f15d1ceec72bc7f0785514c668ba36645cf99b7382. +// +// Solidity: event ExecutedWithERC20(address indexed token, address indexed to, uint256 amount, bytes data) +func (_IGatewayEVM *IGatewayEVMFilterer) WatchExecutedWithERC20(opts *bind.WatchOpts, sink chan<- *IGatewayEVMExecutedWithERC20, token []common.Address, to []common.Address) (event.Subscription, error) { + + var tokenRule []interface{} + for _, tokenItem := range token { + tokenRule = append(tokenRule, tokenItem) + } + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _IGatewayEVM.contract.WatchLogs(opts, "ExecutedWithERC20", tokenRule, toRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(IGatewayEVMExecutedWithERC20) + if err := _IGatewayEVM.contract.UnpackLog(event, "ExecutedWithERC20", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseExecutedWithERC20 is a log parse operation binding the contract event 0x29c40793bffd84cb810179f15d1ceec72bc7f0785514c668ba36645cf99b7382. +// +// Solidity: event ExecutedWithERC20(address indexed token, address indexed to, uint256 amount, bytes data) +func (_IGatewayEVM *IGatewayEVMFilterer) ParseExecutedWithERC20(log types.Log) (*IGatewayEVMExecutedWithERC20, error) { + event := new(IGatewayEVMExecutedWithERC20) + if err := _IGatewayEVM.contract.UnpackLog(event, "ExecutedWithERC20", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// IGatewayEVMRevertedIterator is returned from FilterReverted and is used to iterate over the raw logs and unpacked data for Reverted events raised by the IGatewayEVM contract. +type IGatewayEVMRevertedIterator struct { + Event *IGatewayEVMReverted // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *IGatewayEVMRevertedIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(IGatewayEVMReverted) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(IGatewayEVMReverted) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *IGatewayEVMRevertedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *IGatewayEVMRevertedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// IGatewayEVMReverted represents a Reverted event raised by the IGatewayEVM contract. +type IGatewayEVMReverted struct { + Destination common.Address + Value *big.Int + Data []byte + Raw types.Log // Blockchain specific contextual infos +} + +// FilterReverted is a free log retrieval operation binding the contract event 0xd5d7616b1678354a0dea9d7e57e6a090bff5babe9f8d6381fdbad16e89ba311c. +// +// Solidity: event Reverted(address indexed destination, uint256 value, bytes data) +func (_IGatewayEVM *IGatewayEVMFilterer) FilterReverted(opts *bind.FilterOpts, destination []common.Address) (*IGatewayEVMRevertedIterator, error) { + + var destinationRule []interface{} + for _, destinationItem := range destination { + destinationRule = append(destinationRule, destinationItem) + } + + logs, sub, err := _IGatewayEVM.contract.FilterLogs(opts, "Reverted", destinationRule) + if err != nil { + return nil, err + } + return &IGatewayEVMRevertedIterator{contract: _IGatewayEVM.contract, event: "Reverted", logs: logs, sub: sub}, nil +} + +// WatchReverted is a free log subscription operation binding the contract event 0xd5d7616b1678354a0dea9d7e57e6a090bff5babe9f8d6381fdbad16e89ba311c. +// +// Solidity: event Reverted(address indexed destination, uint256 value, bytes data) +func (_IGatewayEVM *IGatewayEVMFilterer) WatchReverted(opts *bind.WatchOpts, sink chan<- *IGatewayEVMReverted, destination []common.Address) (event.Subscription, error) { + + var destinationRule []interface{} + for _, destinationItem := range destination { + destinationRule = append(destinationRule, destinationItem) + } + + logs, sub, err := _IGatewayEVM.contract.WatchLogs(opts, "Reverted", destinationRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(IGatewayEVMReverted) + if err := _IGatewayEVM.contract.UnpackLog(event, "Reverted", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseReverted is a log parse operation binding the contract event 0xd5d7616b1678354a0dea9d7e57e6a090bff5babe9f8d6381fdbad16e89ba311c. +// +// Solidity: event Reverted(address indexed destination, uint256 value, bytes data) +func (_IGatewayEVM *IGatewayEVMFilterer) ParseReverted(log types.Log) (*IGatewayEVMReverted, error) { + event := new(IGatewayEVMReverted) + if err := _IGatewayEVM.contract.UnpackLog(event, "Reverted", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// IGatewayEVMRevertedWithERC20Iterator is returned from FilterRevertedWithERC20 and is used to iterate over the raw logs and unpacked data for RevertedWithERC20 events raised by the IGatewayEVM contract. +type IGatewayEVMRevertedWithERC20Iterator struct { + Event *IGatewayEVMRevertedWithERC20 // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *IGatewayEVMRevertedWithERC20Iterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(IGatewayEVMRevertedWithERC20) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(IGatewayEVMRevertedWithERC20) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *IGatewayEVMRevertedWithERC20Iterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *IGatewayEVMRevertedWithERC20Iterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// IGatewayEVMRevertedWithERC20 represents a RevertedWithERC20 event raised by the IGatewayEVM contract. +type IGatewayEVMRevertedWithERC20 struct { + Token common.Address + To common.Address + Amount *big.Int + Data []byte + Raw types.Log // Blockchain specific contextual infos +} + +// FilterRevertedWithERC20 is a free log retrieval operation binding the contract event 0x723fc7be2448075379e4fdf1e6bf5fead954d2668d2da05dcb44ccfec4beeda7. +// +// Solidity: event RevertedWithERC20(address indexed token, address indexed to, uint256 amount, bytes data) +func (_IGatewayEVM *IGatewayEVMFilterer) FilterRevertedWithERC20(opts *bind.FilterOpts, token []common.Address, to []common.Address) (*IGatewayEVMRevertedWithERC20Iterator, error) { + + var tokenRule []interface{} + for _, tokenItem := range token { + tokenRule = append(tokenRule, tokenItem) + } + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _IGatewayEVM.contract.FilterLogs(opts, "RevertedWithERC20", tokenRule, toRule) + if err != nil { + return nil, err + } + return &IGatewayEVMRevertedWithERC20Iterator{contract: _IGatewayEVM.contract, event: "RevertedWithERC20", logs: logs, sub: sub}, nil +} + +// WatchRevertedWithERC20 is a free log subscription operation binding the contract event 0x723fc7be2448075379e4fdf1e6bf5fead954d2668d2da05dcb44ccfec4beeda7. +// +// Solidity: event RevertedWithERC20(address indexed token, address indexed to, uint256 amount, bytes data) +func (_IGatewayEVM *IGatewayEVMFilterer) WatchRevertedWithERC20(opts *bind.WatchOpts, sink chan<- *IGatewayEVMRevertedWithERC20, token []common.Address, to []common.Address) (event.Subscription, error) { + + var tokenRule []interface{} + for _, tokenItem := range token { + tokenRule = append(tokenRule, tokenItem) + } + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _IGatewayEVM.contract.WatchLogs(opts, "RevertedWithERC20", tokenRule, toRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(IGatewayEVMRevertedWithERC20) + if err := _IGatewayEVM.contract.UnpackLog(event, "RevertedWithERC20", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseRevertedWithERC20 is a log parse operation binding the contract event 0x723fc7be2448075379e4fdf1e6bf5fead954d2668d2da05dcb44ccfec4beeda7. +// +// Solidity: event RevertedWithERC20(address indexed token, address indexed to, uint256 amount, bytes data) +func (_IGatewayEVM *IGatewayEVMFilterer) ParseRevertedWithERC20(log types.Log) (*IGatewayEVMRevertedWithERC20, error) { + event := new(IGatewayEVMRevertedWithERC20) + if err := _IGatewayEVM.contract.UnpackLog(event, "RevertedWithERC20", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} diff --git a/v2/pkg/igatewayevm.sol/igatewayevmerrors.go b/v2/pkg/igatewayevm.sol/igatewayevmerrors.go index d59c42a6..e4ca53e4 100644 --- a/v2/pkg/igatewayevm.sol/igatewayevmerrors.go +++ b/v2/pkg/igatewayevm.sol/igatewayevmerrors.go @@ -31,7 +31,7 @@ var ( // IGatewayEVMErrorsMetaData contains all meta data concerning the IGatewayEVMErrors contract. var IGatewayEVMErrorsMetaData = &bind.MetaData{ - ABI: "[{\"type\":\"error\",\"name\":\"ApprovalFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ConnectorInitialized\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"CustodyInitialized\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"DepositFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ExecutionFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientERC20Amount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientETHAmount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZeroAddress\",\"inputs\":[]}]", + ABI: "[{\"type\":\"error\",\"name\":\"ApprovalFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ConnectorInitialized\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"CustodyInitialized\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"DepositFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ExecutionFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientERC20Amount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientETHAmount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NotWhitelistedInCustody\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZeroAddress\",\"inputs\":[]}]", } // IGatewayEVMErrorsABI is the input ABI used to generate the binding from. diff --git a/v2/pkg/igatewayzevm.sol/igatewayzevm.go b/v2/pkg/igatewayzevm.sol/igatewayzevm.go index 37b95648..471a9921 100644 --- a/v2/pkg/igatewayzevm.sol/igatewayzevm.go +++ b/v2/pkg/igatewayzevm.sol/igatewayzevm.go @@ -45,7 +45,7 @@ type ZContext struct { // IGatewayZEVMMetaData contains all meta data concerning the IGatewayZEVM contract. var IGatewayZEVMMetaData = &bind.MetaData{ - ABI: "[{\"type\":\"function\",\"name\":\"call\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"chainId\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"message\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"deposit\",\"inputs\":[{\"name\":\"zrc20\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"depositAndCall\",\"inputs\":[{\"name\":\"context\",\"type\":\"tuple\",\"internalType\":\"structzContext\",\"components\":[{\"name\":\"origin\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"sender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"chainID\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"message\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"depositAndCall\",\"inputs\":[{\"name\":\"context\",\"type\":\"tuple\",\"internalType\":\"structzContext\",\"components\":[{\"name\":\"origin\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"sender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"chainID\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"zrc20\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"message\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"depositAndRevert\",\"inputs\":[{\"name\":\"context\",\"type\":\"tuple\",\"internalType\":\"structrevertContext\",\"components\":[{\"name\":\"origin\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"sender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"chainID\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"zrc20\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"message\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"execute\",\"inputs\":[{\"name\":\"context\",\"type\":\"tuple\",\"internalType\":\"structzContext\",\"components\":[{\"name\":\"origin\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"sender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"chainID\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"zrc20\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"message\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"executeRevert\",\"inputs\":[{\"name\":\"context\",\"type\":\"tuple\",\"internalType\":\"structrevertContext\",\"components\":[{\"name\":\"origin\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"sender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"chainID\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"zrc20\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"message\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"withdraw\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"zrc20\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"withdraw\",\"inputs\":[{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"chainId\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"withdrawAndCall\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"zrc20\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"message\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"withdrawAndCall\",\"inputs\":[{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"chainId\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"message\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"}]", + ABI: "[{\"type\":\"function\",\"name\":\"call\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"chainId\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"message\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"deposit\",\"inputs\":[{\"name\":\"zrc20\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"depositAndCall\",\"inputs\":[{\"name\":\"context\",\"type\":\"tuple\",\"internalType\":\"structzContext\",\"components\":[{\"name\":\"origin\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"sender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"chainID\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"message\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"depositAndCall\",\"inputs\":[{\"name\":\"context\",\"type\":\"tuple\",\"internalType\":\"structzContext\",\"components\":[{\"name\":\"origin\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"sender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"chainID\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"zrc20\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"message\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"depositAndRevert\",\"inputs\":[{\"name\":\"context\",\"type\":\"tuple\",\"internalType\":\"structrevertContext\",\"components\":[{\"name\":\"origin\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"sender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"chainID\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"zrc20\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"message\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"execute\",\"inputs\":[{\"name\":\"context\",\"type\":\"tuple\",\"internalType\":\"structzContext\",\"components\":[{\"name\":\"origin\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"sender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"chainID\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"zrc20\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"message\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"executeRevert\",\"inputs\":[{\"name\":\"context\",\"type\":\"tuple\",\"internalType\":\"structrevertContext\",\"components\":[{\"name\":\"origin\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"sender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"chainID\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"zrc20\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"message\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"withdraw\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"zrc20\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"withdraw\",\"inputs\":[{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"chainId\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"withdrawAndCall\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"zrc20\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"message\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"withdrawAndCall\",\"inputs\":[{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"chainId\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"message\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"event\",\"name\":\"Call\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"chainId\",\"type\":\"uint256\",\"indexed\":true,\"internalType\":\"uint256\"},{\"name\":\"receiver\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"message\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Withdrawal\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"chainId\",\"type\":\"uint256\",\"indexed\":true,\"internalType\":\"uint256\"},{\"name\":\"receiver\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"zrc20\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"gasfee\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"protocolFlatFee\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"message\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"CallerIsNotFungibleModule\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"FailedZetaSent\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"GasFeeTransferFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientZRC20Amount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientZetaAmount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidTarget\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OnlyWZETAOrFungible\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"WithdrawalFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZRC20BurnFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZRC20DepositFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZRC20TransferFailed\",\"inputs\":[]}]", } // IGatewayZEVMABI is the input ABI used to generate the binding from. @@ -424,3 +424,317 @@ func (_IGatewayZEVM *IGatewayZEVMSession) WithdrawAndCall0(amount *big.Int, chai func (_IGatewayZEVM *IGatewayZEVMTransactorSession) WithdrawAndCall0(amount *big.Int, chainId *big.Int, message []byte) (*types.Transaction, error) { return _IGatewayZEVM.Contract.WithdrawAndCall0(&_IGatewayZEVM.TransactOpts, amount, chainId, message) } + +// IGatewayZEVMCallIterator is returned from FilterCall and is used to iterate over the raw logs and unpacked data for Call events raised by the IGatewayZEVM contract. +type IGatewayZEVMCallIterator struct { + Event *IGatewayZEVMCall // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *IGatewayZEVMCallIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(IGatewayZEVMCall) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(IGatewayZEVMCall) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *IGatewayZEVMCallIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *IGatewayZEVMCallIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// IGatewayZEVMCall represents a Call event raised by the IGatewayZEVM contract. +type IGatewayZEVMCall struct { + Sender common.Address + ChainId *big.Int + Receiver []byte + Message []byte + Raw types.Log // Blockchain specific contextual infos +} + +// FilterCall is a free log retrieval operation binding the contract event 0x5322ffbbf9261ff1f8138247942d2b03b28717141ef0a0dd080fc4be9c4e78d3. +// +// Solidity: event Call(address indexed sender, uint256 indexed chainId, bytes receiver, bytes message) +func (_IGatewayZEVM *IGatewayZEVMFilterer) FilterCall(opts *bind.FilterOpts, sender []common.Address, chainId []*big.Int) (*IGatewayZEVMCallIterator, error) { + + var senderRule []interface{} + for _, senderItem := range sender { + senderRule = append(senderRule, senderItem) + } + var chainIdRule []interface{} + for _, chainIdItem := range chainId { + chainIdRule = append(chainIdRule, chainIdItem) + } + + logs, sub, err := _IGatewayZEVM.contract.FilterLogs(opts, "Call", senderRule, chainIdRule) + if err != nil { + return nil, err + } + return &IGatewayZEVMCallIterator{contract: _IGatewayZEVM.contract, event: "Call", logs: logs, sub: sub}, nil +} + +// WatchCall is a free log subscription operation binding the contract event 0x5322ffbbf9261ff1f8138247942d2b03b28717141ef0a0dd080fc4be9c4e78d3. +// +// Solidity: event Call(address indexed sender, uint256 indexed chainId, bytes receiver, bytes message) +func (_IGatewayZEVM *IGatewayZEVMFilterer) WatchCall(opts *bind.WatchOpts, sink chan<- *IGatewayZEVMCall, sender []common.Address, chainId []*big.Int) (event.Subscription, error) { + + var senderRule []interface{} + for _, senderItem := range sender { + senderRule = append(senderRule, senderItem) + } + var chainIdRule []interface{} + for _, chainIdItem := range chainId { + chainIdRule = append(chainIdRule, chainIdItem) + } + + logs, sub, err := _IGatewayZEVM.contract.WatchLogs(opts, "Call", senderRule, chainIdRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(IGatewayZEVMCall) + if err := _IGatewayZEVM.contract.UnpackLog(event, "Call", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseCall is a log parse operation binding the contract event 0x5322ffbbf9261ff1f8138247942d2b03b28717141ef0a0dd080fc4be9c4e78d3. +// +// Solidity: event Call(address indexed sender, uint256 indexed chainId, bytes receiver, bytes message) +func (_IGatewayZEVM *IGatewayZEVMFilterer) ParseCall(log types.Log) (*IGatewayZEVMCall, error) { + event := new(IGatewayZEVMCall) + if err := _IGatewayZEVM.contract.UnpackLog(event, "Call", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// IGatewayZEVMWithdrawalIterator is returned from FilterWithdrawal and is used to iterate over the raw logs and unpacked data for Withdrawal events raised by the IGatewayZEVM contract. +type IGatewayZEVMWithdrawalIterator struct { + Event *IGatewayZEVMWithdrawal // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *IGatewayZEVMWithdrawalIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(IGatewayZEVMWithdrawal) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(IGatewayZEVMWithdrawal) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *IGatewayZEVMWithdrawalIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *IGatewayZEVMWithdrawalIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// IGatewayZEVMWithdrawal represents a Withdrawal event raised by the IGatewayZEVM contract. +type IGatewayZEVMWithdrawal struct { + Sender common.Address + ChainId *big.Int + Receiver []byte + Zrc20 common.Address + Value *big.Int + Gasfee *big.Int + ProtocolFlatFee *big.Int + Message []byte + Raw types.Log // Blockchain specific contextual infos +} + +// FilterWithdrawal is a free log retrieval operation binding the contract event 0xde19dbe881cc0aeeb6e73ce19ac7b5ca695e6be8a076e3eb42292005a7fec1b5. +// +// Solidity: event Withdrawal(address indexed sender, uint256 indexed chainId, bytes receiver, address zrc20, uint256 value, uint256 gasfee, uint256 protocolFlatFee, bytes message) +func (_IGatewayZEVM *IGatewayZEVMFilterer) FilterWithdrawal(opts *bind.FilterOpts, sender []common.Address, chainId []*big.Int) (*IGatewayZEVMWithdrawalIterator, error) { + + var senderRule []interface{} + for _, senderItem := range sender { + senderRule = append(senderRule, senderItem) + } + var chainIdRule []interface{} + for _, chainIdItem := range chainId { + chainIdRule = append(chainIdRule, chainIdItem) + } + + logs, sub, err := _IGatewayZEVM.contract.FilterLogs(opts, "Withdrawal", senderRule, chainIdRule) + if err != nil { + return nil, err + } + return &IGatewayZEVMWithdrawalIterator{contract: _IGatewayZEVM.contract, event: "Withdrawal", logs: logs, sub: sub}, nil +} + +// WatchWithdrawal is a free log subscription operation binding the contract event 0xde19dbe881cc0aeeb6e73ce19ac7b5ca695e6be8a076e3eb42292005a7fec1b5. +// +// Solidity: event Withdrawal(address indexed sender, uint256 indexed chainId, bytes receiver, address zrc20, uint256 value, uint256 gasfee, uint256 protocolFlatFee, bytes message) +func (_IGatewayZEVM *IGatewayZEVMFilterer) WatchWithdrawal(opts *bind.WatchOpts, sink chan<- *IGatewayZEVMWithdrawal, sender []common.Address, chainId []*big.Int) (event.Subscription, error) { + + var senderRule []interface{} + for _, senderItem := range sender { + senderRule = append(senderRule, senderItem) + } + var chainIdRule []interface{} + for _, chainIdItem := range chainId { + chainIdRule = append(chainIdRule, chainIdItem) + } + + logs, sub, err := _IGatewayZEVM.contract.WatchLogs(opts, "Withdrawal", senderRule, chainIdRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(IGatewayZEVMWithdrawal) + if err := _IGatewayZEVM.contract.UnpackLog(event, "Withdrawal", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseWithdrawal is a log parse operation binding the contract event 0xde19dbe881cc0aeeb6e73ce19ac7b5ca695e6be8a076e3eb42292005a7fec1b5. +// +// Solidity: event Withdrawal(address indexed sender, uint256 indexed chainId, bytes receiver, address zrc20, uint256 value, uint256 gasfee, uint256 protocolFlatFee, bytes message) +func (_IGatewayZEVM *IGatewayZEVMFilterer) ParseWithdrawal(log types.Log) (*IGatewayZEVMWithdrawal, error) { + event := new(IGatewayZEVMWithdrawal) + if err := _IGatewayZEVM.contract.UnpackLog(event, "Withdrawal", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} diff --git a/v2/pkg/senderzevm.sol/senderzevm.go b/v2/pkg/senderzevm.sol/senderzevm.go index 080cace9..611b4c5e 100644 --- a/v2/pkg/senderzevm.sol/senderzevm.go +++ b/v2/pkg/senderzevm.sol/senderzevm.go @@ -32,7 +32,7 @@ var ( // SenderZEVMMetaData contains all meta data concerning the SenderZEVM contract. var SenderZEVMMetaData = &bind.MetaData{ ABI: "[{\"type\":\"constructor\",\"inputs\":[{\"name\":\"_gateway\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"callReceiver\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"chainId\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"str\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"num\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"flag\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"gateway\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"withdrawAndCallReceiver\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"zrc20\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"str\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"num\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"flag\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"error\",\"name\":\"ApprovalFailed\",\"inputs\":[]}]", - Bin: "0x6080604052348015600f57600080fd5b5060405161080c38038061080c833981016040819052602c916050565b600080546001600160a01b0319166001600160a01b0392909216919091179055607e565b600060208284031215606157600080fd5b81516001600160a01b0381168114607757600080fd5b9392505050565b61077f8061008d6000396000f3fe608060405234801561001057600080fd5b50600436106100415760003560e01c80630abd890514610046578063116191b61461005b578063865b36f6146100a4575b600080fd5b6100596100543660046104c4565b6100b7565b005b60005461007b9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b6100596100b236600461057f565b6102af565b60008383836040516024016100ce93929190610674565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe04d4f970000000000000000000000000000000000000000000000000000000017905260005490517f095ea7b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff91821660048201526024810189905291925086169063095ea7b3906044016020604051808303816000875af11580156101be573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101e2919061069e565b610218576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000546040517f7993c1e000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff90911690637993c1e090610274908a908a908a9087906004016106c2565b600060405180830381600087803b15801561028e57600080fd5b505af11580156102a2573d6000803e3d6000fd5b5050505050505050505050565b60008383836040516024016102c693929190610674565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe04d4f970000000000000000000000000000000000000000000000000000000017905260005490517f5d40e17800000000000000000000000000000000000000000000000000000000815291925073ffffffffffffffffffffffffffffffffffffffff1690635d40e1789061039690899089908690600401610714565b600060405180830381600087803b1580156103b057600080fd5b505af11580156103c4573d6000803e3d6000fd5b50505050505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600082601f83011261041057600080fd5b81356020830160008067ffffffffffffffff841115610431576104316103d0565b506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f85018116603f0116810181811067ffffffffffffffff8211171561047e5761047e6103d0565b60405283815290508082840187101561049657600080fd5b838360208301376000602085830101528094505050505092915050565b80151581146104c157600080fd5b50565b60008060008060008060c087890312156104dd57600080fd5b863567ffffffffffffffff8111156104f457600080fd5b61050089828a016103ff565b96505060208701359450604087013573ffffffffffffffffffffffffffffffffffffffff8116811461053157600080fd5b9350606087013567ffffffffffffffff81111561054d57600080fd5b61055989828a016103ff565b9350506080870135915060a0870135610571816104b3565b809150509295509295509295565b600080600080600060a0868803121561059757600080fd5b853567ffffffffffffffff8111156105ae57600080fd5b6105ba888289016103ff565b95505060208601359350604086013567ffffffffffffffff8111156105de57600080fd5b6105ea888289016103ff565b935050606086013591506080860135610602816104b3565b809150509295509295909350565b6000815180845260005b818110156106365760208185018101518683018201520161061a565b5060006020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b6060815260006106876060830186610610565b602083019490945250901515604090910152919050565b6000602082840312156106b057600080fd5b81516106bb816104b3565b9392505050565b6080815260006106d56080830187610610565b85602084015273ffffffffffffffffffffffffffffffffffffffff8516604084015282810360608401526107098185610610565b979650505050505050565b6060815260006107276060830186610610565b846020840152828103604084015261073f8185610610565b969550505050505056fea2646970667358221220d5c8efa106d3ece0f3750900034e01f5ba81ba4b46a57e03310e9ccd21566f2864736f6c634300081a0033", + Bin: "0x6080604052348015600f57600080fd5b5060405161080c38038061080c833981016040819052602c916050565b600080546001600160a01b0319166001600160a01b0392909216919091179055607e565b600060208284031215606157600080fd5b81516001600160a01b0381168114607757600080fd5b9392505050565b61077f8061008d6000396000f3fe608060405234801561001057600080fd5b50600436106100415760003560e01c80630abd890514610046578063116191b61461005b578063865b36f6146100a4575b600080fd5b6100596100543660046104c4565b6100b7565b005b60005461007b9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b6100596100b236600461057f565b6102af565b60008383836040516024016100ce93929190610674565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe04d4f970000000000000000000000000000000000000000000000000000000017905260005490517f095ea7b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff91821660048201526024810189905291925086169063095ea7b3906044016020604051808303816000875af11580156101be573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101e2919061069e565b610218576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000546040517f7993c1e000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff90911690637993c1e090610274908a908a908a9087906004016106c2565b600060405180830381600087803b15801561028e57600080fd5b505af11580156102a2573d6000803e3d6000fd5b5050505050505050505050565b60008383836040516024016102c693929190610674565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe04d4f970000000000000000000000000000000000000000000000000000000017905260005490517f5d40e17800000000000000000000000000000000000000000000000000000000815291925073ffffffffffffffffffffffffffffffffffffffff1690635d40e1789061039690899089908690600401610714565b600060405180830381600087803b1580156103b057600080fd5b505af11580156103c4573d6000803e3d6000fd5b50505050505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600082601f83011261041057600080fd5b81356020830160008067ffffffffffffffff841115610431576104316103d0565b506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f85018116603f0116810181811067ffffffffffffffff8211171561047e5761047e6103d0565b60405283815290508082840187101561049657600080fd5b838360208301376000602085830101528094505050505092915050565b80151581146104c157600080fd5b50565b60008060008060008060c087890312156104dd57600080fd5b863567ffffffffffffffff8111156104f457600080fd5b61050089828a016103ff565b96505060208701359450604087013573ffffffffffffffffffffffffffffffffffffffff8116811461053157600080fd5b9350606087013567ffffffffffffffff81111561054d57600080fd5b61055989828a016103ff565b9350506080870135915060a0870135610571816104b3565b809150509295509295509295565b600080600080600060a0868803121561059757600080fd5b853567ffffffffffffffff8111156105ae57600080fd5b6105ba888289016103ff565b95505060208601359350604086013567ffffffffffffffff8111156105de57600080fd5b6105ea888289016103ff565b935050606086013591506080860135610602816104b3565b809150509295509295909350565b6000815180845260005b818110156106365760208185018101518683018201520161061a565b5060006020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b6060815260006106876060830186610610565b602083019490945250901515604090910152919050565b6000602082840312156106b057600080fd5b81516106bb816104b3565b9392505050565b6080815260006106d56080830187610610565b85602084015273ffffffffffffffffffffffffffffffffffffffff8516604084015282810360608401526107098185610610565b979650505050505050565b6060815260006107276060830186610610565b846020840152828103604084015261073f8185610610565b969550505050505056fea26469706673582212202d9e7d32ef6522050432c1694ddb8cfdc9122adb07ccb90fba239639e4abfd7c64736f6c634300081a0033", } // SenderZEVMABI is the input ABI used to generate the binding from. diff --git a/v2/pkg/zetaconnectornative.sol/zetaconnectornative.go b/v2/pkg/zetaconnectornative.sol/zetaconnectornative.go index 69812a82..b0023821 100644 --- a/v2/pkg/zetaconnectornative.sol/zetaconnectornative.go +++ b/v2/pkg/zetaconnectornative.sol/zetaconnectornative.go @@ -32,7 +32,7 @@ var ( // ZetaConnectorNativeMetaData contains all meta data concerning the ZetaConnectorNative contract. var ZetaConnectorNativeMetaData = &bind.MetaData{ ABI: "[{\"type\":\"constructor\",\"inputs\":[{\"name\":\"gateway_\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"zetaToken_\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"tssAddress_\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"admin_\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"DEFAULT_ADMIN_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"PAUSER_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"TSS_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"WITHDRAWER_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"gateway\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIGatewayEVM\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getRoleAdmin\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"grantRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"hasRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"pause\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"paused\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"receiveTokens\",\"inputs\":[{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"renounceRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"callerConfirmation\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"revokeRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"supportsInterface\",\"inputs\":[{\"name\":\"interfaceId\",\"type\":\"bytes4\",\"internalType\":\"bytes4\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"unpause\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"withdraw\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"internalSendHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"withdrawAndCall\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"internalSendHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"withdrawAndRevert\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"internalSendHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"zetaToken\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"event\",\"name\":\"Paused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleAdminChanged\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"previousAdminRole\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"newAdminRole\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleGranted\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleRevoked\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Unpaused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Withdraw\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"WithdrawAndCall\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"WithdrawAndRevert\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"AccessControlBadConfirmation\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"AccessControlUnauthorizedAccount\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"neededRole\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"type\":\"error\",\"name\":\"AddressEmptyCode\",\"inputs\":[{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"AddressInsufficientBalance\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"EnforcedPause\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ExpectedPause\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"FailedInnerCall\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ReentrancyGuardReentrantCall\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"SafeERC20FailedOperation\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"ZeroAddress\",\"inputs\":[]}]", - Bin: "0x60c060405234801561001057600080fd5b5060405161166338038061166383398101604081905261002f9161021a565b60016000819055805460ff19169055838383836001600160a01b038416158061005f57506001600160a01b038316155b8061007157506001600160a01b038216155b8061008357506001600160a01b038116155b156100a15760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b03808516608052831660a0526100bf60008261014e565b506100ea7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e48361014e565b506101157f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb8361014e565b506101407f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a8261014e565b50505050505050505061026e565b60008281526002602090815260408083206001600160a01b038516845290915281205460ff166101f45760008381526002602090815260408083206001600160a01b03861684529091529020805460ff191660011790556101ac3390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45060016101f8565b5060005b92915050565b80516001600160a01b038116811461021557600080fd5b919050565b6000806000806080858703121561023057600080fd5b610239856101fe565b9350610247602086016101fe565b9250610255604086016101fe565b9150610263606086016101fe565b905092959194509250565b60805160a05161138a6102d9600039600081816101f701528181610474015281816105250152818161063f015281816107d30152818161088401526109520152600081816101ab01528181610496015281816104f8015281816107f50152610857015261138a6000f3fe608060405234801561001057600080fd5b50600436106101515760003560e01c80635c975abb116100cd57806391d1485411610081578063a783c78911610066578063a783c78914610326578063d547741f1461034d578063e63ab1e91461036057600080fd5b806391d14854146102d8578063a217fddf1461031e57600080fd5b8063743e0c9b116100b2578063743e0c9b146102965780638456cb59146102a957806385f438c1146102b157600080fd5b80635c975abb146102785780635e3e9fef1461028357600080fd5b806321e093b1116101245780632f2ff15d116101095780632f2ff15d1461024a57806336568abe1461025d5780633f4ba83a1461027057600080fd5b806321e093b1146101f2578063248a9ca31461021957600080fd5b806301ffc9a71461015657806302d5c8991461017e578063106e629014610193578063116191b6146101a6575b600080fd5b6101696101643660046110c5565b610387565b60405190151581526020015b60405180910390f35b61019161018c366004611130565b610420565b005b6101916101a13660046111c2565b6105eb565b6101cd7f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610175565b6101cd7f000000000000000000000000000000000000000000000000000000000000000081565b61023c6102273660046111f5565b60009081526002602052604090206001015490565b604051908152602001610175565b61019161025836600461120e565b6106c6565b61019161026b36600461120e565b6106f1565b61019161074a565b60015460ff16610169565b610191610291366004611130565b61077f565b6101916102a43660046111f5565b610930565b61019161097a565b61023c7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b6101696102e636600461120e565b600091825260026020908152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b61023c600081565b61023c7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb81565b61019161035b36600461120e565b6109ac565b61023c7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061041a57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b6104286109d1565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461045281610a14565b61045a610a1e565b6104bb73ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000167f000000000000000000000000000000000000000000000000000000000000000087610a5d565b6040517fb8969bd400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063b8969bd490610555907f0000000000000000000000000000000000000000000000000000000000000000908a908a908a908a90600401611283565b600060405180830381600087803b15801561056f57600080fd5b505af1158015610583573d6000803e3d6000fd5b505050508573ffffffffffffffffffffffffffffffffffffffff167fba96f26bdda53eb8c8ba39045dfb4ff39753fbc7a6edcf250a88e75e78d102fe8686866040516105d1939291906112e0565b60405180910390a2506105e46001600055565b5050505050565b6105f36109d1565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461061d81610a14565b610625610a1e565b61066673ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168585610a5d565b8373ffffffffffffffffffffffffffffffffffffffff167f884edad9ce6fa2440d8a54cc123490eb96d2768479d49ff9c7366125a9424364846040516106ae91815260200190565b60405180910390a2506106c16001600055565b505050565b6000828152600260205260409020600101546106e181610a14565b6106eb8383610ade565b50505050565b73ffffffffffffffffffffffffffffffffffffffff81163314610740576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6106c18282610bde565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61077481610a14565b61077c610c9d565b50565b6107876109d1565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e46107b181610a14565b6107b9610a1e565b61081a73ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000167f000000000000000000000000000000000000000000000000000000000000000087610a5d565b6040517f5131ab5900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690635131ab59906108b4907f0000000000000000000000000000000000000000000000000000000000000000908a908a908a908a90600401611283565b600060405180830381600087803b1580156108ce57600080fd5b505af11580156108e2573d6000803e3d6000fd5b505050508573ffffffffffffffffffffffffffffffffffffffff167f7772f56296d3a5202974a45c61c9188d844ab4d6eeb18c851e4b8d5384ca6ced8686866040516105d1939291906112e0565b610938610a1e565b61077c73ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016333084610d1a565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a6109a481610a14565b61077c610d60565b6000828152600260205260409020600101546109c781610a14565b6106eb8383610bde565b600260005403610a0d576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b61077c8133610db9565b60015460ff1615610a5b576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b60405173ffffffffffffffffffffffffffffffffffffffff8381166024830152604482018390526106c191859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050610e4a565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff16610bd657600083815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff86168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055610b743390565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a450600161041a565b50600061041a565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff1615610bd657600083815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8616808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a450600161041a565b610ca5610ee0565b600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b60405173ffffffffffffffffffffffffffffffffffffffff84811660248301528381166044830152606482018390526106eb9186918216906323b872dd90608401610a97565b610d68610a1e565b600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016811790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25833610cf0565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16610e46576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82166004820152602481018390526044015b60405180910390fd5b5050565b6000610e6c73ffffffffffffffffffffffffffffffffffffffff841683610f1c565b90508051600014158015610e91575080806020019051810190610e8f9190611303565b155b156106c1576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84166004820152602401610e3d565b60015460ff16610a5b576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6060610f2a83836000610f31565b9392505050565b606081471015610f6f576040517fcd786059000000000000000000000000000000000000000000000000000000008152306004820152602401610e3d565b6000808573ffffffffffffffffffffffffffffffffffffffff168486604051610f989190611325565b60006040518083038185875af1925050503d8060008114610fd5576040519150601f19603f3d011682016040523d82523d6000602084013e610fda565b606091505b5091509150610fea868383610ff4565b9695505050505050565b6060826110095761100482611083565b610f2a565b815115801561102d575073ffffffffffffffffffffffffffffffffffffffff84163b155b1561107c576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85166004820152602401610e3d565b5080610f2a565b8051156110935780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000602082840312156110d757600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610f2a57600080fd5b803573ffffffffffffffffffffffffffffffffffffffff8116811461112b57600080fd5b919050565b60008060008060006080868803121561114857600080fd5b61115186611107565b945060208601359350604086013567ffffffffffffffff81111561117457600080fd5b8601601f8101881361118557600080fd5b803567ffffffffffffffff81111561119c57600080fd5b8860208284010111156111ae57600080fd5b959894975060200195606001359392505050565b6000806000606084860312156111d757600080fd5b6111e084611107565b95602085013595506040909401359392505050565b60006020828403121561120757600080fd5b5035919050565b6000806040838503121561122157600080fd5b8235915061123160208401611107565b90509250929050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff8616815273ffffffffffffffffffffffffffffffffffffffff851660208201528360408201526080606082015260006112d560808301848661123a565b979650505050505050565b8381526040602082015260006112fa60408301848661123a565b95945050505050565b60006020828403121561131557600080fd5b81518015158114610f2a57600080fd5b6000825160005b81811015611346576020818601810151858301520161132c565b50600092019182525091905056fea2646970667358221220b04453dff0090afb8a475e5970db3acd2d95039b4c5a72b1afb3fdac6383a65d64736f6c634300081a0033", + Bin: "0x60c060405234801561001057600080fd5b5060405161166338038061166383398101604081905261002f9161021a565b60016000819055805460ff19169055838383836001600160a01b038416158061005f57506001600160a01b038316155b8061007157506001600160a01b038216155b8061008357506001600160a01b038116155b156100a15760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b03808516608052831660a0526100bf60008261014e565b506100ea7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e48361014e565b506101157f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb8361014e565b506101407f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a8261014e565b50505050505050505061026e565b60008281526002602090815260408083206001600160a01b038516845290915281205460ff166101f45760008381526002602090815260408083206001600160a01b03861684529091529020805460ff191660011790556101ac3390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45060016101f8565b5060005b92915050565b80516001600160a01b038116811461021557600080fd5b919050565b6000806000806080858703121561023057600080fd5b610239856101fe565b9350610247602086016101fe565b9250610255604086016101fe565b9150610263606086016101fe565b905092959194509250565b60805160a05161138a6102d9600039600081816101f701528181610474015281816105250152818161063f015281816107d30152818161088401526109520152600081816101ab01528181610496015281816104f8015281816107f50152610857015261138a6000f3fe608060405234801561001057600080fd5b50600436106101515760003560e01c80635c975abb116100cd57806391d1485411610081578063a783c78911610066578063a783c78914610326578063d547741f1461034d578063e63ab1e91461036057600080fd5b806391d14854146102d8578063a217fddf1461031e57600080fd5b8063743e0c9b116100b2578063743e0c9b146102965780638456cb59146102a957806385f438c1146102b157600080fd5b80635c975abb146102785780635e3e9fef1461028357600080fd5b806321e093b1116101245780632f2ff15d116101095780632f2ff15d1461024a57806336568abe1461025d5780633f4ba83a1461027057600080fd5b806321e093b1146101f2578063248a9ca31461021957600080fd5b806301ffc9a71461015657806302d5c8991461017e578063106e629014610193578063116191b6146101a6575b600080fd5b6101696101643660046110c5565b610387565b60405190151581526020015b60405180910390f35b61019161018c366004611130565b610420565b005b6101916101a13660046111c2565b6105eb565b6101cd7f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610175565b6101cd7f000000000000000000000000000000000000000000000000000000000000000081565b61023c6102273660046111f5565b60009081526002602052604090206001015490565b604051908152602001610175565b61019161025836600461120e565b6106c6565b61019161026b36600461120e565b6106f1565b61019161074a565b60015460ff16610169565b610191610291366004611130565b61077f565b6101916102a43660046111f5565b610930565b61019161097a565b61023c7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b6101696102e636600461120e565b600091825260026020908152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b61023c600081565b61023c7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb81565b61019161035b36600461120e565b6109ac565b61023c7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061041a57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b6104286109d1565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461045281610a14565b61045a610a1e565b6104bb73ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000167f000000000000000000000000000000000000000000000000000000000000000087610a5d565b6040517fb8969bd400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063b8969bd490610555907f0000000000000000000000000000000000000000000000000000000000000000908a908a908a908a90600401611283565b600060405180830381600087803b15801561056f57600080fd5b505af1158015610583573d6000803e3d6000fd5b505050508573ffffffffffffffffffffffffffffffffffffffff167fba96f26bdda53eb8c8ba39045dfb4ff39753fbc7a6edcf250a88e75e78d102fe8686866040516105d1939291906112e0565b60405180910390a2506105e46001600055565b5050505050565b6105f36109d1565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461061d81610a14565b610625610a1e565b61066673ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168585610a5d565b8373ffffffffffffffffffffffffffffffffffffffff167f884edad9ce6fa2440d8a54cc123490eb96d2768479d49ff9c7366125a9424364846040516106ae91815260200190565b60405180910390a2506106c16001600055565b505050565b6000828152600260205260409020600101546106e181610a14565b6106eb8383610ade565b50505050565b73ffffffffffffffffffffffffffffffffffffffff81163314610740576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6106c18282610bde565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61077481610a14565b61077c610c9d565b50565b6107876109d1565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e46107b181610a14565b6107b9610a1e565b61081a73ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000167f000000000000000000000000000000000000000000000000000000000000000087610a5d565b6040517f5131ab5900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690635131ab59906108b4907f0000000000000000000000000000000000000000000000000000000000000000908a908a908a908a90600401611283565b600060405180830381600087803b1580156108ce57600080fd5b505af11580156108e2573d6000803e3d6000fd5b505050508573ffffffffffffffffffffffffffffffffffffffff167f7772f56296d3a5202974a45c61c9188d844ab4d6eeb18c851e4b8d5384ca6ced8686866040516105d1939291906112e0565b610938610a1e565b61077c73ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016333084610d1a565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a6109a481610a14565b61077c610d60565b6000828152600260205260409020600101546109c781610a14565b6106eb8383610bde565b600260005403610a0d576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b61077c8133610db9565b60015460ff1615610a5b576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b60405173ffffffffffffffffffffffffffffffffffffffff8381166024830152604482018390526106c191859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050610e4a565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff16610bd657600083815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff86168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055610b743390565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a450600161041a565b50600061041a565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff1615610bd657600083815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8616808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a450600161041a565b610ca5610ee0565b600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b60405173ffffffffffffffffffffffffffffffffffffffff84811660248301528381166044830152606482018390526106eb9186918216906323b872dd90608401610a97565b610d68610a1e565b600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016811790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25833610cf0565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16610e46576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82166004820152602481018390526044015b60405180910390fd5b5050565b6000610e6c73ffffffffffffffffffffffffffffffffffffffff841683610f1c565b90508051600014158015610e91575080806020019051810190610e8f9190611303565b155b156106c1576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84166004820152602401610e3d565b60015460ff16610a5b576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6060610f2a83836000610f31565b9392505050565b606081471015610f6f576040517fcd786059000000000000000000000000000000000000000000000000000000008152306004820152602401610e3d565b6000808573ffffffffffffffffffffffffffffffffffffffff168486604051610f989190611325565b60006040518083038185875af1925050503d8060008114610fd5576040519150601f19603f3d011682016040523d82523d6000602084013e610fda565b606091505b5091509150610fea868383610ff4565b9695505050505050565b6060826110095761100482611083565b610f2a565b815115801561102d575073ffffffffffffffffffffffffffffffffffffffff84163b155b1561107c576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85166004820152602401610e3d565b5080610f2a565b8051156110935780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000602082840312156110d757600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610f2a57600080fd5b803573ffffffffffffffffffffffffffffffffffffffff8116811461112b57600080fd5b919050565b60008060008060006080868803121561114857600080fd5b61115186611107565b945060208601359350604086013567ffffffffffffffff81111561117457600080fd5b8601601f8101881361118557600080fd5b803567ffffffffffffffff81111561119c57600080fd5b8860208284010111156111ae57600080fd5b959894975060200195606001359392505050565b6000806000606084860312156111d757600080fd5b6111e084611107565b95602085013595506040909401359392505050565b60006020828403121561120757600080fd5b5035919050565b6000806040838503121561122157600080fd5b8235915061123160208401611107565b90509250929050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff8616815273ffffffffffffffffffffffffffffffffffffffff851660208201528360408201526080606082015260006112d560808301848661123a565b979650505050505050565b8381526040602082015260006112fa60408301848661123a565b95945050505050565b60006020828403121561131557600080fd5b81518015158114610f2a57600080fd5b6000825160005b81811015611346576020818601810151858301520161132c565b50600092019182525091905056fea264697066735822122055d09557e5c9ebfe94b17ac42f0790bf256cf4c257e31c46bc4dbb126e31fe1964736f6c634300081a0033", } // ZetaConnectorNativeABI is the input ABI used to generate the binding from. diff --git a/v2/pkg/zetaconnectornative.t.sol/zetaconnectornativetest.go b/v2/pkg/zetaconnectornative.t.sol/zetaconnectornativetest.go index 245ec5d6..a2e1b3c4 100644 --- a/v2/pkg/zetaconnectornative.t.sol/zetaconnectornativetest.go +++ b/v2/pkg/zetaconnectornative.t.sol/zetaconnectornativetest.go @@ -49,8 +49,8 @@ type StdInvariantFuzzSelector struct { // ZetaConnectorNativeTestMetaData contains all meta data concerning the ZetaConnectorNativeTest contract. var ZetaConnectorNativeTestMetaData = &bind.MetaData{ - ABI: "[{\"type\":\"function\",\"name\":\"IS_TEST\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"PAUSER_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"WITHDRAWER_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeArtifacts\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedArtifacts_\",\"type\":\"string[]\",\"internalType\":\"string[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeContracts\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedContracts_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeSelectors\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedSelectors_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzSelector[]\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"selectors\",\"type\":\"bytes4[]\",\"internalType\":\"bytes4[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeSenders\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedSenders_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"failed\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"setUp\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"targetArtifactSelectors\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedArtifactSelectors_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzArtifactSelector[]\",\"components\":[{\"name\":\"artifact\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"selectors\",\"type\":\"bytes4[]\",\"internalType\":\"bytes4[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetArtifacts\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedArtifacts_\",\"type\":\"string[]\",\"internalType\":\"string[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetContracts\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedContracts_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetInterfaces\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedInterfaces_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzInterface[]\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"artifacts\",\"type\":\"string[]\",\"internalType\":\"string[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetSelectors\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedSelectors_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzSelector[]\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"selectors\",\"type\":\"bytes4[]\",\"internalType\":\"bytes4[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetSenders\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedSenders_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"testWithdraw\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawAndCallReceiveERC20\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawAndCallReceiveERC20FailsIfSenderIsNotWithdrawer\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawAndCallReceiveERC20Partial\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawAndCallReceiveNoParams\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawAndRevert\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawAndRevertFailsIfSenderIsNotWithdrawer\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawFailsIfSenderIsNotWithdrawer\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawTogglePause\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"event\",\"name\":\"Call\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"receiver\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Deposit\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"receiver\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"asset\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Executed\",\"inputs\":[{\"name\":\"destination\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ExecutedWithERC20\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedERC20\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"token\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"destination\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedNoParams\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedNonPayable\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"strs\",\"type\":\"string[]\",\"indexed\":false,\"internalType\":\"string[]\"},{\"name\":\"nums\",\"type\":\"uint256[]\",\"indexed\":false,\"internalType\":\"uint256[]\"},{\"name\":\"flag\",\"type\":\"bool\",\"indexed\":false,\"internalType\":\"bool\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedPayable\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"str\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"num\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"flag\",\"type\":\"bool\",\"indexed\":false,\"internalType\":\"bool\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedRevert\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Reverted\",\"inputs\":[{\"name\":\"destination\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RevertedWithERC20\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Withdraw\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"WithdrawAndCall\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"WithdrawAndRevert\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log\",\"inputs\":[{\"name\":\"\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_address\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_array\",\"inputs\":[{\"name\":\"val\",\"type\":\"uint256[]\",\"indexed\":false,\"internalType\":\"uint256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_array\",\"inputs\":[{\"name\":\"val\",\"type\":\"int256[]\",\"indexed\":false,\"internalType\":\"int256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_array\",\"inputs\":[{\"name\":\"val\",\"type\":\"address[]\",\"indexed\":false,\"internalType\":\"address[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_bytes\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_bytes32\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_int\",\"inputs\":[{\"name\":\"\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_address\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_array\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"uint256[]\",\"indexed\":false,\"internalType\":\"uint256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_array\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"int256[]\",\"indexed\":false,\"internalType\":\"int256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_array\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"address[]\",\"indexed\":false,\"internalType\":\"address[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_bytes\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_bytes32\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_decimal_int\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"},{\"name\":\"decimals\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_decimal_uint\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"decimals\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_int\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_string\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_uint\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_string\",\"inputs\":[{\"name\":\"\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_uint\",\"inputs\":[{\"name\":\"\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"logs\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"AccessControlUnauthorizedAccount\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"neededRole\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"type\":\"error\",\"name\":\"ApprovalFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ConnectorInitialized\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"CustodyInitialized\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"DepositFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"EnforcedPause\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ExecutionFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientERC20Amount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientETHAmount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZeroAddress\",\"inputs\":[]}]", - Bin: "0x6080604052600c8054600160ff199182168117909255601f80549091169091179055348015602c57600080fd5b5061dd8d8061003c6000396000f3fe608060405234801561001057600080fd5b50600436106101985760003560e01c8063b0464fdc116100e3578063dcf7d0371161008c578063e63ab1e911610066578063e63ab1e9146102ce578063fa7626d4146102f5578063fe574f841461030257600080fd5b8063dcf7d037146102b6578063de1cb76c146102be578063e20c9f71146102c657600080fd5b8063c1909972116100bd578063c19099721461029e578063ccb0e3f2146102a6578063d509b16c146102ae57600080fd5b8063b0464fdc14610276578063b5508aa91461027e578063ba414fa61461028657600080fd5b8063493465581161014557806385226c811161011f57806385226c811461021757806385f438c11461022c578063916a17c61461026157600080fd5b806349346558146101f257806366d9a9a0146101fa578063828320141461020f57600080fd5b80633cba0107116101765780633cba0107146101da5780633e5e3c23146101e25780633f7286f4146101ea57600080fd5b80630a9254e41461019d5780631ed7831c146101a75780632ade3880146101c5575b600080fd5b6101a561030a565b005b6101af610a70565b6040516101bc9190618259565b60405180910390f35b6101cd610ad2565b6040516101bc91906182f5565b6101a5610c14565b6101af6113ce565b6101af61142e565b6101a561148e565b610202611ad1565b6040516101bc919061845b565b6101a5611c53565b61021f611eac565b6040516101bc91906184f9565b6102537f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b6040519081526020016101bc565b610269611f7c565b6040516101bc9190618570565b610269612077565b61021f612172565b61028e612242565b60405190151581526020016101bc565b6101a5612316565b6101a5612581565b6101a56130ad565b6101a56130e9565b6101a5613790565b6101af613ddd565b6102537f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b601f5461028e9060ff1681565b6101a5613e3d565b602580547fffffffffffffffffffffffff000000000000000000000000000000000000000090811630179091556026805482166112341790556027805490911661567817905560405161035c9061816c565b604080825260049082018190527f7a6574610000000000000000000000000000000000000000000000000000000060608301526080602083018190528201527f5a4554410000000000000000000000000000000000000000000000000000000060a082015260c001604051809103906000f0801580156103e0573d6000803e3d6000fd5b50602480547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039283169081178255604080518082018252600e81527f4761746577617945564d2e736f6c0000000000000000000000000000000000006020820152602754602554925190861694810194909452604484019290925290921660648201526104d1919060840160408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fc0c53b8b0000000000000000000000000000000000000000000000000000000017905261405b565b601f80547fffffffffffffffffffffff0000000000000000000000000000000000000000ff166101006001600160a01b0393841681029190911791829055602080549190920483167fffffffffffffffffffffffff0000000000000000000000000000000000000000909116811790915560275460255460405192939182169291169061055d90618179565b6001600160a01b03938416815291831660208301529091166040820152606001604051809103906000f080158015610599573d6000803e3d6000fd5b50602280547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392831617905560205460245460275460255460405193851694928316939183169216906105f490618186565b6001600160a01b039485168152928416602084015290831660408301529091166060820152608001604051809103906000f080158015610638573d6000803e3d6000fd5b50602380547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039290921691909117905560405161067d90618193565b604051809103906000f080158015610699573d6000803e3d6000fd5b50602180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039283161790556027546040517fc88a5e6d00000000000000000000000000000000000000000000000000000000815291166004820152670de0b6b3a76400006024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c88a5e6d90604401600060405180830381600087803b15801561074557600080fd5b505af1158015610759573d6000803e3d6000fd5b50506025546040517f06447d560000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506306447d569150602401600060405180830381600087803b1580156107cf57600080fd5b505af11580156107e3573d6000803e3d6000fd5b50506020546022546040517fae7a3a6f0000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201529116925063ae7a3a6f9150602401600060405180830381600087803b15801561084957600080fd5b505af115801561085d573d6000803e3d6000fd5b50506020546023546040517f10188aef0000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152911692506310188aef9150602401600060405180830381600087803b1580156108c357600080fd5b505af11580156108d7573d6000803e3d6000fd5b505050507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b03166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561093957600080fd5b505af115801561094d573d6000803e3d6000fd5b5050602480546023546040517f40c10f190000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152624c4b40938101939093521692506340c10f199150604401600060405180830381600087803b1580156109be57600080fd5b505af11580156109d2573d6000803e3d6000fd5b50506027546040517fc88a5e6d0000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152670de0b6b3a76400006024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c88a5e6d9150604401600060405180830381600087803b158015610a5657600080fd5b505af1158015610a6a573d6000803e3d6000fd5b50505050565b60606016805480602002602001604051908101604052809291908181526020018280548015610ac857602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610aaa575b5050505050905090565b6060601e805480602002602001604051908101604052809291908181526020016000905b82821015610c0b57600084815260208082206040805180820182526002870290920180546001600160a01b03168352600181018054835181870281018701909452808452939591948681019491929084015b82821015610bf4578382906000526020600020018054610b6790618607565b80601f0160208091040260200160405190810160405280929190818152602001828054610b9390618607565b8015610be05780601f10610bb557610100808354040283529160200191610be0565b820191906000526020600020905b815481529060010190602001808311610bc357829003601f168201915b505050505081526020019060010190610b48565b505050508152505081526020019060010190610af6565b50505050905090565b60248054602654604051620186a09381018490526001600160a01b03928316604482015291166064820152600090819060840160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f357fc5a2000000000000000000000000000000000000000000000000000000001790526024805460265492516370a0823160e01b81526001600160a01b0393841660048201529394506000939216916370a082319101602060405180830381865afa158015610cef573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d139190618654565b9050610d2081600061407a565b602480546023546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa158015610d70573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d949190618654565b6020546040516001600160a01b0390911660248201526044810187905290915060009060640160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb0000000000000000000000000000000000000000000000000000000017905260245490517ff30c7ba3000000000000000000000000000000000000000000000000000000008152919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f30c7ba391610e77916001600160a01b039190911690600090869060040161866d565b600060405180830381600087803b158015610e9157600080fd5b505af1158015610ea5573d6000803e3d6000fd5b50506021546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b158015610f3757600080fd5b505af1158015610f4b573d6000803e3d6000fd5b505060208054602454602654604080516001600160a01b0394851681529485018d905291831684830152919091166060830152517f2b58128f24a9f59127cc5b5430d70542b22220f2d9adaa86e442b816ab98af609350908190036080019150a16023546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b15801561103a57600080fd5b505af115801561104e573d6000803e3d6000fd5b50506021546040516001600160a01b0390911692507f7772f56296d3a5202974a45c61c9188d844ab4d6eeb18c851e4b8d5384ca6ced91506110939089908890618695565b60405180910390a260275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156110f457600080fd5b505af1158015611108573d6000803e3d6000fd5b50506023546021546040517f5e3e9fef0000000000000000000000000000000000000000000000000000000081526001600160a01b039283169450635e3e9fef935061116092909116908a9089908b906004016186ae565b600060405180830381600087803b15801561117a57600080fd5b505af115801561118e573d6000803e3d6000fd5b5050602480546026546040516370a0823160e01b81526001600160a01b03918216600482015260009550911692506370a0823191015b602060405180830381865afa1580156111e1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112059190618654565b9050611211818861407a565b602480546023546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa158015611261573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112859190618654565b905061129a816112958a87618716565b61407a565b602480546020546021546040517fdd62ed3e0000000000000000000000000000000000000000000000000000000081526001600160a01b0392831660048201529082169381019390935260009291169063dd62ed3e90604401602060405180830381865afa158015611310573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113349190618654565b905061134181600061407a565b602480546020546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa158015611391573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113b59190618654565b90506113c281600061407a565b50505050505050505050565b60606018805480602002602001604051908101604052809291908181526020018280548015610ac8576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311610aaa575050505050905090565b60606017805480602002602001604051908101604052809291908181526020018280548015610ac8576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311610aaa575050505050905090565b604080516004808252602480830184526020830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f6ed70169000000000000000000000000000000000000000000000000000000001790525460265493516370a0823160e01b8152620186a0946000949385936001600160a01b03908116936370a082319361152f93921691016001600160a01b0391909116815260200190565b602060405180830381865afa15801561154c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115709190618654565b905061157d81600061407a565b602480546023546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa1580156115cd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115f19190618654565b6020546040516001600160a01b0390911660248201526044810187905290915060009060640160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb0000000000000000000000000000000000000000000000000000000017905260245490517ff30c7ba3000000000000000000000000000000000000000000000000000000008152919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f30c7ba3916116d4916001600160a01b039190911690600090869060040161866d565b600060405180830381600087803b1580156116ee57600080fd5b505af1158015611702573d6000803e3d6000fd5b50506021546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b15801561179457600080fd5b505af11580156117a8573d6000803e3d6000fd5b5050602080546040516001600160a01b0390911681527fbcaadb46b82a48af60b608f58959ae6b8310d1b0a0d094c2e9ec3208ed39f2a0935001905060405180910390a16023546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b15801561187a57600080fd5b505af115801561188e573d6000803e3d6000fd5b50506021546040516001600160a01b0390911692507f7772f56296d3a5202974a45c61c9188d844ab4d6eeb18c851e4b8d5384ca6ced91506118d39089908890618695565b60405180910390a260275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561193457600080fd5b505af1158015611948573d6000803e3d6000fd5b50506023546021546040517f5e3e9fef0000000000000000000000000000000000000000000000000000000081526001600160a01b039283169450635e3e9fef93506119a092909116908a9089908b906004016186ae565b600060405180830381600087803b1580156119ba57600080fd5b505af11580156119ce573d6000803e3d6000fd5b5050602480546026546040516370a0823160e01b81526001600160a01b03918216600482015260009550911692506370a082319101602060405180830381865afa158015611a20573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a449190618654565b9050611a5181600061407a565b602480546023546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa158015611aa1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ac59190618654565b905061129a818561407a565b6060601b805480602002602001604051908101604052809291908181526020016000905b82821015610c0b5783829060005260206000209060020201604051806040016040529081600082018054611b2890618607565b80601f0160208091040260200160405190810160405280929190818152602001828054611b5490618607565b8015611ba15780601f10611b7657610100808354040283529160200191611ba1565b820191906000526020600020905b815481529060010190602001808311611b8457829003601f168201915b5050505050815260200160018201805480602002602001604051908101604052809291908181526020018280548015611c3b57602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019060040190602082600301049283019260010382029150808411611be85790505b50505050508152505081526020019060010190611af5565b6040517f68656c6c6f0000000000000000000000000000000000000000000000000000006020820152620186a090600090819060250160408051808303601f190181529082905260255463ca669fa760e01b83526001600160a01b031660048301529150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015611cf057600080fd5b505af1158015611d04573d6000803e3d6000fd5b5050602554604080516001600160a01b0390921660248301527f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e460448084019190915281518084039091018152606490920181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb39250611def9190600401618729565b600060405180830381600087803b158015611e0957600080fd5b505af1158015611e1d573d6000803e3d6000fd5b50506023546021546040517f02d5c8990000000000000000000000000000000000000000000000000000000081526001600160a01b0392831694506302d5c8999350611e7592909116908790869088906004016186ae565b600060405180830381600087803b158015611e8f57600080fd5b505af1158015611ea3573d6000803e3d6000fd5b50505050505050565b6060601a805480602002602001604051908101604052809291908181526020016000905b82821015610c0b578382906000526020600020018054611eef90618607565b80601f0160208091040260200160405190810160405280929190818152602001828054611f1b90618607565b8015611f685780601f10611f3d57610100808354040283529160200191611f68565b820191906000526020600020905b815481529060010190602001808311611f4b57829003601f168201915b505050505081526020019060010190611ed0565b6060601d805480602002602001604051908101604052809291908181526020016000905b82821015610c0b5760008481526020908190206040805180820182526002860290920180546001600160a01b0316835260018101805483518187028101870190945280845293949193858301939283018282801561205f57602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168152602001906004019060208260030104928301926001038202915080841161200c5790505b50505050508152505081526020019060010190611fa0565b6060601c805480602002602001604051908101604052809291908181526020016000905b82821015610c0b5760008481526020908190206040805180820182526002860290920180546001600160a01b0316835260018101805483518187028101870190945280845293949193858301939283018282801561215a57602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190600401906020826003010492830192600103820291508084116121075790505b5050505050815250508152602001906001019061209b565b60606019805480602002602001604051908101604052809291908181526020016000905b82821015610c0b5783829060005260206000200180546121b590618607565b80601f01602080910402602001604051908101604052809291908181526020018280546121e190618607565b801561222e5780601f106122035761010080835404028352916020019161222e565b820191906000526020600020905b81548152906001019060200180831161221157829003601f168201915b505050505081526020019060010190612196565b60085460009060ff161561225a575060085460ff1690565b6040517f667f9d70000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d600482018190527f6661696c65640000000000000000000000000000000000000000000000000000602483015260009163667f9d7090604401602060405180830381865afa1580156122eb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061230f9190618654565b1415905090565b60248054602654604051620186a09381018490526001600160a01b03928316604482015291166064820152600090819060840160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f357fc5a200000000000000000000000000000000000000000000000000000000179052602554905163ca669fa760e01b81526001600160a01b039091166004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156123fc57600080fd5b505af1158015612410573d6000803e3d6000fd5b5050602554604080516001600160a01b0390921660248301527f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e460448084019190915281518084039091018152606490920181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb392506124fb9190600401618729565b600060405180830381600087803b15801561251557600080fd5b505af1158015612529573d6000803e3d6000fd5b50506023546021546040517f5e3e9fef0000000000000000000000000000000000000000000000000000000081526001600160a01b039283169450635e3e9fef9350611e7592909116908790869088906004016186ae565b60275460405163ca669fa760e01b81526001600160a01b039091166004820152620186a090600090737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156125e257600080fd5b505af11580156125f6573d6000803e3d6000fd5b5050602754604080516001600160a01b0390921660248301527f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a60448084019190915281518084039091018152606490920181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb392506126e19190600401618729565b600060405180830381600087803b1580156126fb57600080fd5b505af115801561270f573d6000803e3d6000fd5b50505050602360009054906101000a90046001600160a01b03166001600160a01b0316638456cb596040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561276357600080fd5b505af1158015612777573d6000803e3d6000fd5b505060275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b1580156127d457600080fd5b505af11580156127e8573d6000803e3d6000fd5b5050602754604080516001600160a01b0390921660248301527f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a60448084019190915281518084039091018152606490920181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb392506128d39190600401618729565b600060405180830381600087803b1580156128ed57600080fd5b505af1158015612901573d6000803e3d6000fd5b50505050602360009054906101000a90046001600160a01b03166001600160a01b0316633f4ba83a6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561295557600080fd5b505af1158015612969573d6000803e3d6000fd5b505060255460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b1580156129c657600080fd5b505af11580156129da573d6000803e3d6000fd5b50505050602360009054906101000a90046001600160a01b03166001600160a01b0316638456cb596040518163ffffffff1660e01b8152600401600060405180830381600087803b158015612a2e57600080fd5b505af1158015612a42573d6000803e3d6000fd5b50506040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fd93c0665000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b158015612acb57600080fd5b505af1158015612adf573d6000803e3d6000fd5b505060275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b158015612b3c57600080fd5b505af1158015612b50573d6000803e3d6000fd5b50506023546026546040517f106e62900000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260248101879052604481018690529116925063106e62909150606401600060405180830381600087803b158015612bc457600080fd5b505af1158015612bd8573d6000803e3d6000fd5b505060255460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b158015612c3557600080fd5b505af1158015612c49573d6000803e3d6000fd5b50505050602360009054906101000a90046001600160a01b03166001600160a01b0316633f4ba83a6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015612c9d57600080fd5b505af1158015612cb1573d6000803e3d6000fd5b5050602480546026546040516370a0823160e01b81526001600160a01b03918216600482015260009550911692506370a0823191015b602060405180830381865afa158015612d04573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d289190618654565b9050612d3581600061407a565b6026546040516001600160a01b0390911660248201526044810184905260009060640160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb0000000000000000000000000000000000000000000000000000000017905260245490517ff30c7ba3000000000000000000000000000000000000000000000000000000008152919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f30c7ba391612e15916001600160a01b039190911690600090869060040161866d565b600060405180830381600087803b158015612e2f57600080fd5b505af1158015612e43573d6000803e3d6000fd5b50506023546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b158015612ed557600080fd5b505af1158015612ee9573d6000803e3d6000fd5b50506026546040518781526001600160a01b0390911692507f884edad9ce6fa2440d8a54cc123490eb96d2768479d49ff9c7366125a9424364915060200160405180910390a260275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015612f8857600080fd5b505af1158015612f9c573d6000803e3d6000fd5b50506023546026546040517f106e62900000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260248101899052604481018890529116925063106e62909150606401600060405180830381600087803b15801561301057600080fd5b505af1158015613024573d6000803e3d6000fd5b5050602480546026546040516370a0823160e01b81526001600160a01b03918216600482015260009550911692506370a082319101602060405180830381865afa158015613076573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061309a9190618654565b90506130a6818661407a565b5050505050565b602480546026546040516370a0823160e01b81526001600160a01b039182166004820152620186a093600093849316916370a082319101612ce7565b60248054602654604051620186a09381018490526001600160a01b03928316604482015291166064820152600090819060840160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fc5131691000000000000000000000000000000000000000000000000000000001790526024805460265492516370a0823160e01b81526001600160a01b0393841660048201529394506000939216916370a082319101602060405180830381865afa1580156131c4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131e89190618654565b90506131f581600061407a565b602480546023546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa158015613245573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132699190618654565b6020546040516001600160a01b0390911660248201526044810187905290915060009060640160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb0000000000000000000000000000000000000000000000000000000017905260245490517ff30c7ba3000000000000000000000000000000000000000000000000000000008152919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f30c7ba39161334c916001600160a01b039190911690600090869060040161866d565b600060405180830381600087803b15801561336657600080fd5b505af115801561337a573d6000803e3d6000fd5b50506021546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b15801561340c57600080fd5b505af1158015613420573d6000803e3d6000fd5b50506020547f2b58128f24a9f59127cc5b5430d70542b22220f2d9adaa86e442b816ab98af6092506001600160a01b0316905061345e60028961873c565b602454602654604080516001600160a01b03958616815260208101949094529184168383015292909216606082015290519081900360800190a16023546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b15801561352657600080fd5b505af115801561353a573d6000803e3d6000fd5b50506021546040516001600160a01b0390911692507f7772f56296d3a5202974a45c61c9188d844ab4d6eeb18c851e4b8d5384ca6ced915061357f9089908890618695565b60405180910390a260275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156135e057600080fd5b505af11580156135f4573d6000803e3d6000fd5b50506023546021546040517f5e3e9fef0000000000000000000000000000000000000000000000000000000081526001600160a01b039283169450635e3e9fef935061364c92909116908a9089908b906004016186ae565b600060405180830381600087803b15801561366657600080fd5b505af115801561367a573d6000803e3d6000fd5b5050602480546026546040516370a0823160e01b81526001600160a01b03918216600482015260009550911692506370a082319101602060405180830381865afa1580156136cc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136f09190618654565b90506137018161129560028a61873c565b602480546023546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa158015613751573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137759190618654565b905061129a8161378660028b61873c565b6112959087618716565b6040517f68656c6c6f0000000000000000000000000000000000000000000000000000006020820152620186a090600090819060250160408051808303601f1901815290829052602480546021546370a0823160e01b85526001600160a01b0390811660048601529294506000939216916370a082319101602060405180830381865afa158015613825573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138499190618654565b905061385681600061407a565b602480546023546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa1580156138a6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138ca9190618654565b6020546040516001600160a01b0390911660248201526044810187905290915060009060640160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb0000000000000000000000000000000000000000000000000000000017905260245490517ff30c7ba3000000000000000000000000000000000000000000000000000000008152919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f30c7ba3916139ad916001600160a01b039190911690600090869060040161866d565b600060405180830381600087803b1580156139c757600080fd5b505af11580156139db573d6000803e3d6000fd5b50506021546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b158015613a6d57600080fd5b505af1158015613a81573d6000803e3d6000fd5b50506020546040517f0d3f65f00e631663aa85c96330b5c7a83bb29af3630c0063776f985edc3037aa9350613ac492506001600160a01b03909116908790618777565b60405180910390a16020546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b158015613b5a57600080fd5b505af1158015613b6e573d6000803e3d6000fd5b50506021546024546040516001600160a01b039283169450911691507f723fc7be2448075379e4fdf1e6bf5fead954d2668d2da05dcb44ccfec4beeda790613bb9908a908990618695565b60405180910390a36023546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b158015613c4f57600080fd5b505af1158015613c63573d6000803e3d6000fd5b50506021546040516001600160a01b0390911692507fba96f26bdda53eb8c8ba39045dfb4ff39753fbc7a6edcf250a88e75e78d102fe9150613ca89089908890618695565b60405180910390a260275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015613d0957600080fd5b505af1158015613d1d573d6000803e3d6000fd5b50506023546021546040517f02d5c8990000000000000000000000000000000000000000000000000000000081526001600160a01b0392831694506302d5c8999350613d7592909116908a9089908b906004016186ae565b600060405180830381600087803b158015613d8f57600080fd5b505af1158015613da3573d6000803e3d6000fd5b5050602480546021546040516370a0823160e01b81526001600160a01b03918216600482015260009550911692506370a0823191016111c4565b60606015805480602002602001604051908101604052809291908181526020018280548015610ac8576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311610aaa575050505050905090565b60255460405163ca669fa760e01b81526001600160a01b039091166004820152620186a090600090737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015613e9e57600080fd5b505af1158015613eb2573d6000803e3d6000fd5b5050602554604080516001600160a01b0390921660248301527f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e460448084019190915281518084039091018152606490920181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb39250613f9d9190600401618729565b600060405180830381600087803b158015613fb757600080fd5b505af1158015613fcb573d6000803e3d6000fd5b50506023546026546040517f106e62900000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260248101879052604481018690529116925063106e62909150606401600060405180830381600087803b15801561403f57600080fd5b505af1158015614053573d6000803e3d6000fd5b505050505050565b60006140656181a0565b6140708484836140f9565b9150505b92915050565b6040517f98296c540000000000000000000000000000000000000000000000000000000081526004810183905260248101829052737109709ecfa91a80626ff3989d68f67f5b1dd12d906398296c549060440160006040518083038186803b1580156140e557600080fd5b505afa158015614053573d6000803e3d6000fd5b6000806141068584614174565b90506141696040518060400160405280601d81526020017f4552433139363750726f78792e736f6c3a4552433139363750726f78790000008152508286604051602001614154929190618777565b60405160208183030381529060405285614180565b9150505b9392505050565b600061416d83836141ae565b60c081015151600090156141a45761419d84848460c001516141c9565b905061416d565b61419d848461436f565b60006141ba838361445a565b61416d83836020015184614180565b6000806141d461446a565b905060006141e2868361453d565b905060006141f982606001518360200151856149e3565b9050600061420983838989614bf5565b9050600061421682615a72565b602081015181519192509060030b1561428957898260400151604051602001614240929190618799565b60408051601f19818403018152908290527f08c379a000000000000000000000000000000000000000000000000000000000825261428091600401618729565b60405180910390fd5b60006142cc6040518060400160405280601581526020017f4465706c6f79656420746f20616464726573733a200000000000000000000000815250836001615c41565b6040517fc6ce059d000000000000000000000000000000000000000000000000000000008152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c6ce059d9061431f908490600401618729565b602060405180830381865afa15801561433c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614360919061881a565b9b9a5050505050505050505050565b6040517f8d1cc9250000000000000000000000000000000000000000000000000000000081526000908190737109709ecfa91a80626ff3989d68f67f5b1dd12d90638d1cc925906143c4908790600401618729565b600060405180830381865afa1580156143e1573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052614409919081019061892b565b905060006144378285604051602001614423929190618960565b604051602081830303815290604052615e41565b90506001600160a01b03811661407057848460405160200161424092919061898f565b61446682826000615e54565b5050565b604080518082018252600381527f6f75740000000000000000000000000000000000000000000000000000000000602082015290517fd145736c000000000000000000000000000000000000000000000000000000008152606091737109709ecfa91a80626ff3989d68f67f5b1dd12d91829063d145736c906144f1908490600401618a3a565b600060405180830381865afa15801561450e573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526145369190810190618a81565b9250505090565b61456f6040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b6000737109709ecfa91a80626ff3989d68f67f5b1dd12d90506145ba6040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b6145c385615f57565b602082015260006145d38661633c565b90506000836001600160a01b031663d930a0e66040518163ffffffff1660e01b8152600401600060405180830381865afa158015614615573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261463d9190810190618a81565b868385602001516040516020016146579493929190618aca565b60408051601f19818403018152908290527f60f9bb1100000000000000000000000000000000000000000000000000000000825291506000906001600160a01b038616906360f9bb11906146af908590600401618729565b600060405180830381865afa1580156146cc573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526146f49190810190618a81565b6040517fdb4235f60000000000000000000000000000000000000000000000000000000081529091506001600160a01b0386169063db4235f69061473c908490600401618bce565b602060405180830381865afa158015614759573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061477d9190618c20565b61479257816040516020016142409190618c42565b6040517f49c4fac80000000000000000000000000000000000000000000000000000000081526001600160a01b038616906349c4fac8906147d7908490600401618cd4565b600060405180830381865afa1580156147f4573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261481c9190810190618a81565b84526040517fdb4235f60000000000000000000000000000000000000000000000000000000081526001600160a01b0386169063db4235f690614863908490600401618d26565b602060405180830381865afa158015614880573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906148a49190618c20565b15614939576040517f49c4fac80000000000000000000000000000000000000000000000000000000081526001600160a01b038616906349c4fac8906148ee908490600401618d26565b600060405180830381865afa15801561490b573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526149339190810190618a81565b60408501525b846001600160a01b03166349c4fac882866000015160405160200161495e9190618d78565b6040516020818303038152906040526040518363ffffffff1660e01b815260040161498a929190618de4565b600060405180830381865afa1580156149a7573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526149cf9190810190618a81565b606085015250608083015250949350505050565b60408051600480825260a0820190925260609160009190816020015b60608152602001906001900390816149ff5790505090506040518060400160405280600481526020017f677265700000000000000000000000000000000000000000000000000000000081525081600081518110614a5f57614a5f618e09565b60200260200101819052506040518060400160405280600381526020017f2d726c000000000000000000000000000000000000000000000000000000000081525081600181518110614ab357614ab3618e09565b602002602001018190525084604051602001614acf9190618e38565b60405160208183030381529060405281600281518110614af157614af1618e09565b602002602001018190525082604051602001614b0d9190618ea4565b60405160208183030381529060405281600381518110614b2f57614b2f618e09565b60200260200101819052506000614b4582615a72565b602080820151604080518082018252600581527f2e6a736f6e0000000000000000000000000000000000000000000000000000008185019081528251808401845260008082529086015282518084019093529051825292810192909252919250614bd690604080518082018252600080825260209182015281518083019092528451825280850190820152906165bf565b614beb57856040516020016142409190618ee5565b9695505050505050565b60a0810151604080518082018252600080825260209182015281518083019092528251808352928101910152606090737109709ecfa91a80626ff3989d68f67f5b1dd12d9015614c45565b511590565b614db957826020015115614d01576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605860248201527f54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f742060448201527f62652075736564207768656e207468652060736b6970566572696679536f757260648201527f6365436f646560206f7074696f6e206973206074727565600000000000000000608482015260a401614280565b8260c0015115614db9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605360248201527f54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f742060448201527f62652075736564207768656e207468652060736b69704c6963656e736554797060648201527f6560206f7074696f6e2069732060747275656000000000000000000000000000608482015260a401614280565b6040805160ff8082526120008201909252600091816020015b6060815260200190600190039081614dd257905050905060006040518060400160405280600381526020017f6e70780000000000000000000000000000000000000000000000000000000000815250828280614e2d90618f76565b935060ff1681518110614e4257614e42618e09565b60200260200101819052506040518060400160405280600d81526020017f302e302e312d616c7068612e3700000000000000000000000000000000000000815250604051602001614e939190618f95565b604051602081830303815290604052828280614eae90618f76565b935060ff1681518110614ec357614ec3618e09565b60200260200101819052506040518060400160405280600681526020017f6465706c6f790000000000000000000000000000000000000000000000000000815250828280614f1090618f76565b935060ff1681518110614f2557614f25618e09565b60200260200101819052506040518060400160405280600e81526020017f2d2d636f6e74726163744e616d65000000000000000000000000000000000000815250828280614f7290618f76565b935060ff1681518110614f8757614f87618e09565b60200260200101819052508760200151828280614fa390618f76565b935060ff1681518110614fb857614fb8618e09565b60200260200101819052506040518060400160405280600e81526020017f2d2d636f6e74726163745061746800000000000000000000000000000000000081525082828061500590618f76565b935060ff168151811061501a5761501a618e09565b60209081029190910101528751828261503281618f76565b935060ff168151811061504757615047618e09565b60200260200101819052506040518060400160405280600981526020017f2d2d636861696e4964000000000000000000000000000000000000000000000081525082828061509490618f76565b935060ff16815181106150a9576150a9618e09565b60200260200101819052506150bd46616620565b82826150c881618f76565b935060ff16815181106150dd576150dd618e09565b60200260200101819052506040518060400160405280600f81526020017f2d2d6275696c64496e666f46696c65000000000000000000000000000000000081525082828061512a90618f76565b935060ff168151811061513f5761513f618e09565b60200260200101819052508682828061515790618f76565b935060ff168151811061516c5761516c618e09565b60209081029190910101528551156152935760408051808201909152601581527f2d2d636f6e7374727563746f7242797465636f64650000000000000000000000602082015282826151bd81618f76565b935060ff16815181106151d2576151d2618e09565b60209081029190910101526040517f71aad10d0000000000000000000000000000000000000000000000000000000081526001600160a01b038416906371aad10d90615222908990600401618729565b600060405180830381865afa15801561523f573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526152679190810190618a81565b828261527281618f76565b935060ff168151811061528757615287618e09565b60200260200101819052505b8460200151156153635760408051808201909152601281527f2d2d766572696679536f75726365436f64650000000000000000000000000000602082015282826152dc81618f76565b935060ff16815181106152f1576152f1618e09565b60200260200101819052506040518060400160405280600581526020017f66616c736500000000000000000000000000000000000000000000000000000081525082828061533e90618f76565b935060ff168151811061535357615353618e09565b602002602001018190525061552a565b61539b614c408660a0015160408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b61542e5760408051808201909152600d81527f2d2d6c6963656e73655479706500000000000000000000000000000000000000602082015282826153de81618f76565b935060ff16815181106153f3576153f3618e09565b60200260200101819052508460a001516040516020016154139190618e38565b60405160208183030381529060405282828061533e90618f76565b8460c0015115801561547157506040808901518151808301835260008082526020918201528251808401909352815183529081019082015261546f90511590565b155b1561552a5760408051808201909152600d81527f2d2d6c6963656e73655479706500000000000000000000000000000000000000602082015282826154b581618f76565b935060ff16815181106154ca576154ca618e09565b60200260200101819052506154de886166c0565b6040516020016154ee9190618e38565b60405160208183030381529060405282828061550990618f76565b935060ff168151811061551e5761551e618e09565b60200260200101819052505b6040808601518151808301835260008082526020918201528251808401909352815183529081019082015261555e90511590565b6155f35760408051808201909152600b81527f2d2d72656c617965724964000000000000000000000000000000000000000000602082015282826155a181618f76565b935060ff16815181106155b6576155b6618e09565b602002602001018190525084604001518282806155d290618f76565b935060ff16815181106155e7576155e7618e09565b60200260200101819052505b6060850151156157145760408051808201909152600681527f2d2d73616c7400000000000000000000000000000000000000000000000000006020820152828261563c81618f76565b935060ff168151811061565157615651618e09565b602090810291909101015260608501516040517fb11a19e800000000000000000000000000000000000000000000000000000000815260048101919091526001600160a01b0384169063b11a19e890602401600060405180830381865afa1580156156c0573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526156e89190810190618a81565b82826156f381618f76565b935060ff168151811061570857615708618e09565b60200260200101819052505b60e085015151156157bb5760408051808201909152600a81527f2d2d6761734c696d6974000000000000000000000000000000000000000000006020820152828261575e81618f76565b935060ff168151811061577357615773618e09565b602002602001018190525061578f8560e0015160000151616620565b828261579a81618f76565b935060ff16815181106157af576157af618e09565b60200260200101819052505b60e085015160200151156158655760408051808201909152600a81527f2d2d6761735072696365000000000000000000000000000000000000000000006020820152828261580881618f76565b935060ff168151811061581d5761581d618e09565b60200260200101819052506158398560e0015160200151616620565b828261584481618f76565b935060ff168151811061585957615859618e09565b60200260200101819052505b60e0850151604001511561590f5760408051808201909152600e81527f2d2d6d6178466565506572476173000000000000000000000000000000000000602082015282826158b281618f76565b935060ff16815181106158c7576158c7618e09565b60200260200101819052506158e38560e0015160400151616620565b82826158ee81618f76565b935060ff168151811061590357615903618e09565b60200260200101819052505b60e085015160600151156159b95760408051808201909152601681527f2d2d6d61785072696f72697479466565506572476173000000000000000000006020820152828261595c81618f76565b935060ff168151811061597157615971618e09565b602002602001018190525061598d8560e0015160600151616620565b828261599881618f76565b935060ff16815181106159ad576159ad618e09565b60200260200101819052505b60008160ff1667ffffffffffffffff8111156159d7576159d7618843565b604051908082528060200260200182016040528015615a0a57816020015b60608152602001906001900390816159f55790505b50905060005b8260ff168160ff161015615a6357838160ff1681518110615a3357615a33618e09565b6020026020010151828260ff1681518110615a5057615a50618e09565b6020908102919091010152600101615a10565b5093505050505b949350505050565b615a996040518060600160405280600060030b815260200160608152602001606081525090565b60408051808201825260048082527f6261736800000000000000000000000000000000000000000000000000000000602083015291517fd145736c000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d92600091849163d145736c91615b1f91869101619000565b600060405180830381865afa158015615b3c573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052615b649190810190618a81565b90506000615b7286836171af565b90506000846001600160a01b031663f45c1ce7836040518263ffffffff1660e01b8152600401615ba291906184f9565b6000604051808303816000875af1158015615bc1573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052615be99190810190619047565b805190915060030b15801590615c025750602081015151155b8015615c115750604081015151155b15614beb5781600081518110615c2957615c29618e09565b602002602001015160405160200161424091906190fd565b60606000615c768560408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600080825260209182015281518083019092528651825280870190820152909150615cad9082905b90617304565b15615e0a576000615d2a82615d2484615d1e615cf08a60408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6040805180820182526000808252602091820152815180830190925282518252918201519181019190915290565b9061732b565b9061738d565b604080518082018252600181527f0a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152909150615d8e908290617304565b15615df857604080518082018252600181527f0a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152615df5905b8290617412565b90505b615e0181617438565b9250505061416d565b8215615e235784846040516020016142409291906192e9565b505060408051602081019091526000815261416d565b509392505050565b6000808251602084016000f09392505050565b8160a0015115615e6357505050565b6000615e708484846174a1565b90506000615e7d82615a72565b602081015181519192509060030b158015615f195750604080518082018252600781527f535543434553530000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152615f1990604080518082018252600080825260209182015281518083019092528451825280850190820152615ca7565b15615f2657505050505050565b60408201515115615f465781604001516040516020016142409190619390565b8060405160200161424091906193ee565b60606000615f8c8360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600481527f2e736f6c0000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152909150615ff1905b82906165bf565b1561606057604080518082018252600481527f2e736f6c000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261416d9061605b908390617a3c565b617438565b604080518082018252600181527f3a00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526160c2905b8290617ac6565b60010361618f57604080518082018252600181527f3a000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261612890615dee565b50604080518082018252600181527f3a000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261416d9061605b905b8390617412565b604080518082018252600581527f2e6a736f6e000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526161ee90615fea565b1561632557604080518082018252600181527f2f00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820181905284518086019095529251845283015290616256908390617b60565b9050600081600183516162699190618716565b8151811061627957616279618e09565b6020026020010151905061631c61605b6162ef6040518060400160405280600581526020017f2e6a736f6e00000000000000000000000000000000000000000000000000000081525060408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b60408051808201825260008082526020918201528151808301909252855182528086019082015290617a3c565b95945050505050565b826040516020016142409190619459565b50919050565b606060006163718360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600481527f2e736f6c00000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201529091506163d390615fea565b156163e15761416d81617438565b604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616440906160bb565b6001036164aa57604080518082018252600181527f3a000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261416d9061605b90616188565b604080518082018252600581527f2e6a736f6e0000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261650990615fea565b1561632557604080518082018252600181527f2f00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820181905284518086019095529251845283015290616571908390617b60565b90506001815111156165ad57806002825161658c9190618716565b8151811061659c5761659c618e09565b602002602001015192505050919050565b50826040516020016142409190619459565b8051825160009111156165d457506000614074565b815183516020850151600092916165ea91619537565b6165f49190618716565b90508260200151810361660b576001915050614074565b82516020840151819020912014905092915050565b6060600061662d83617c05565b600101905060008167ffffffffffffffff81111561664d5761664d618843565b6040519080825280601f01601f191660200182016040528015616677576020820181803683370190505b5090508181016020015b600019017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a850494508461668157509392505050565b604081810151815180830183526000808252602091820181905283518085018552835181529282018383015283518085018552600a81527f554e4c4943454e534544000000000000000000000000000000000000000000008184019081528551808701875283815284019290925284518086019095525184529083015260609161674c905b8290617ce7565b1561678c57505060408051808201909152600481527f4e6f6e65000000000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600981527f556e6c6963656e73650000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526167eb90616745565b1561682b57505060408051808201909152600981527f556e6c6963656e736500000000000000000000000000000000000000000000006020820152919050565b604080518082018252600381527f4d495400000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261688a90616745565b156168ca57505060408051808201909152600381527f4d495400000000000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f47504c2d322e302d6f6e6c7900000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261692990616745565b8061698e5750604080518082018252601081527f47504c2d322e302d6f722d6c61746572000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261698e90616745565b156169ce57505060408051808201909152600981527f474e552047504c763200000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f47504c2d332e302d6f6e6c79000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616a2d90616745565b80616a925750604080518082018252601081527f47504c2d332e302d6f722d6c617465720000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616a9290616745565b15616ad257505060408051808201909152600981527f474e552047504c763300000000000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4c47504c2d322e312d6f6e6c790000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616b3190616745565b80616b965750604080518082018252601181527f4c47504c2d322e312d6f722d6c6174657200000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616b9690616745565b15616bd657505060408051808201909152600c81527f474e55204c47504c76322e3100000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4c47504c2d332e302d6f6e6c790000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616c3590616745565b80616c9a5750604080518082018252601181527f4c47504c2d332e302d6f722d6c6174657200000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616c9a90616745565b15616cda57505060408051808201909152600a81527f474e55204c47504c7633000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f4253442d322d436c61757365000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616d3990616745565b15616d7957505060408051808201909152600c81527f4253442d322d436c6175736500000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f4253442d332d436c61757365000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616dd890616745565b15616e1857505060408051808201909152600c81527f4253442d332d436c6175736500000000000000000000000000000000000000006020820152919050565b604080518082018252600781527f4d504c2d322e300000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616e7790616745565b15616eb757505060408051808201909152600781527f4d504c2d322e30000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600781527f4f534c2d332e300000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616f1690616745565b15616f5657505060408051808201909152600781527f4f534c2d332e30000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600a81527f4170616368652d322e300000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616fb590616745565b15616ff557505060408051808201909152600a81527f4170616368652d322e30000000000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4147504c2d332e302d6f6e6c79000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261705490616745565b806170b95750604080518082018252601181527f4147504c2d332e302d6f722d6c61746572000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526170b990616745565b156170f957505060408051808201909152600a81527f474e55204147504c7633000000000000000000000000000000000000000000006020820152919050565b604080518082018252600881527f4255534c2d312e310000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261715890616745565b1561719857505060408051808201909152600781527f42534c20312e31000000000000000000000000000000000000000000000000006020820152919050565b60408084015184519151614240929060200161954a565b60608060005b845181101561723a57818582815181106171d1576171d1618e09565b60200260200101516040516020016171ea929190618960565b6040516020818303038152906040529150600185516172099190618716565b8114617232578160405160200161722091906196b3565b60405160208183030381529060405291505b6001016171b5565b5060408051600380825260808201909252600091816020015b6060815260200190600190039081617253579050509050838160008151811061727e5761727e618e09565b60200260200101819052506040518060400160405280600281526020017f2d63000000000000000000000000000000000000000000000000000000000000815250816001815181106172d2576172d2618e09565b602002602001018190525081816002815181106172f1576172f1618e09565b6020908102919091010152949350505050565b60208083015183518351928401516000936173229291849190617cfb565b14159392505050565b6040805180820190915260008082526020820152600061735d8460000151856020015185600001518660200151617e0c565b905083602001518161736f9190618716565b8451859061737e908390618716565b90525060208401525090919050565b60408051808201909152600080825260208201528151835110156173b2575081614074565b60208083015190840151600191146173d95750815160208481015190840151829020919020145b801561740a578251845185906173f0908390618716565b9052508251602085018051617406908390619537565b9052505b509192915050565b6040805180820190915260008082526020820152617431838383617f2c565b5092915050565b60606000826000015167ffffffffffffffff81111561745957617459618843565b6040519080825280601f01601f191660200182016040528015617483576020820181803683370190505b50905060006020820190506174318185602001518660000151617fd7565b606060006174ad61446a565b6040805160ff808252612000820190925291925060009190816020015b60608152602001906001900390816174ca57905050905060006040518060400160405280600381526020017f6e7078000000000000000000000000000000000000000000000000000000000081525082828061752590618f76565b935060ff168151811061753a5761753a618e09565b60200260200101819052506040518060400160405280600781526020017f5e312e33322e330000000000000000000000000000000000000000000000000081525060405160200161758b91906196f4565b6040516020818303038152906040528282806175a690618f76565b935060ff16815181106175bb576175bb618e09565b60200260200101819052506040518060400160405280600881526020017f76616c696461746500000000000000000000000000000000000000000000000081525082828061760890618f76565b935060ff168151811061761d5761761d618e09565b6020026020010181905250826040516020016176399190618ea4565b60405160208183030381529060405282828061765490618f76565b935060ff168151811061766957617669618e09565b60200260200101819052506040518060400160405280600a81526020017f2d2d636f6e7472616374000000000000000000000000000000000000000000008152508282806176b690618f76565b935060ff16815181106176cb576176cb618e09565b60200260200101819052506176e08784618051565b82826176eb81618f76565b935060ff168151811061770057617700618e09565b6020908102919091010152855151156177ac5760408051808201909152600b81527f2d2d7265666572656e63650000000000000000000000000000000000000000006020820152828261775281618f76565b935060ff168151811061776757617767618e09565b6020026020010181905250617780866000015184618051565b828261778b81618f76565b935060ff16815181106177a0576177a0618e09565b60200260200101819052505b85608001511561781a5760408051808201909152601881527f2d2d756e73616665536b697053746f72616765436865636b0000000000000000602082015282826177f581618f76565b935060ff168151811061780a5761780a618e09565b6020026020010181905250617880565b84156178805760408051808201909152601281527f2d2d726571756972655265666572656e636500000000000000000000000000006020820152828261785f81618f76565b935060ff168151811061787457617874618e09565b60200260200101819052505b6040860151511561791c5760408051808201909152600d81527f2d2d756e73616665416c6c6f7700000000000000000000000000000000000000602082015282826178ca81618f76565b935060ff16815181106178df576178df618e09565b602002602001018190525085604001518282806178fb90618f76565b935060ff168151811061791057617910618e09565b60200260200101819052505b8560600151156179865760408051808201909152601481527f2d2d756e73616665416c6c6f7752656e616d65730000000000000000000000006020820152828261796581618f76565b935060ff168151811061797a5761797a618e09565b60200260200101819052505b60008160ff1667ffffffffffffffff8111156179a4576179a4618843565b6040519080825280602002602001820160405280156179d757816020015b60608152602001906001900390816179c25790505b50905060005b8260ff168160ff161015617a3057838160ff1681518110617a0057617a00618e09565b6020026020010151828260ff1681518110617a1d57617a1d618e09565b60209081029190910101526001016179dd565b50979650505050505050565b6040805180820190915260008082526020820152815183511015617a61575081614074565b81518351602085015160009291617a7791619537565b617a819190618716565b60208401519091506001908214617aa2575082516020840151819020908220145b8015617abd57835185518690617ab9908390618716565b9052505b50929392505050565b6000808260000151617aea8560000151866020015186600001518760200151617e0c565b617af49190619537565b90505b83516020850151617b089190619537565b81116174315781617b1881619739565b9250508260000151617b4f856020015183617b339190618716565b8651617b3f9190618716565b8386600001518760200151617e0c565b617b599190619537565b9050617af7565b60606000617b6e8484617ac6565b617b79906001619537565b67ffffffffffffffff811115617b9157617b91618843565b604051908082528060200260200182016040528015617bc457816020015b6060815260200190600190039081617baf5790505b50905060005b8151811015615e3957617be061605b8686617412565b828281518110617bf257617bf2618e09565b6020908102919091010152600101617bca565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310617c4e577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310617c7a576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc100008310617c9857662386f26fc10000830492506010015b6305f5e1008310617cb0576305f5e100830492506008015b6127108310617cc457612710830492506004015b60648310617cd6576064830492506002015b600a83106140745760010192915050565b6000617cf38383618091565b159392505050565b600080858411617e025760208411617dae5760008415617d46576001617d22866020618716565b617d2d906008619753565b617d38906002619851565b617d429190618716565b1990505b8351811685617d558989619537565b617d5f9190618716565b805190935082165b818114617d9957878411617d815787945050505050615a6a565b83617d8b8161985d565b945050828451169050617d67565b617da38785619537565b945050505050615a6a565b838320617dbb8588618716565b617dc59087619537565b91505b858210617e0057848220808203617ded57617de38684619537565b9350505050615a6a565b617df8600184618716565b925050617dc8565b505b5092949350505050565b60008381868511617f175760208511617ec65760008515617e58576001617e34876020618716565b617e3f906008619753565b617e4a906002619851565b617e549190618716565b1990505b84518116600087617e698b8b619537565b617e739190618716565b855190915083165b828114617eb857818610617ea057617e938b8b619537565b9650505050505050615a6a565b85617eaa81619739565b965050838651169050617e7b565b859650505050505050615a6a565b508383206000905b617ed88689618716565b8211617f1557858320808203617ef45783945050505050615a6a565b617eff600185619537565b9350508180617f0d90619739565b925050617ece565b505b617f218787619537565b979650505050505050565b60408051808201909152600080825260208201526000617f5e8560000151866020015186600001518760200151617e0c565b602080870180519186019190915251909150617f7a9082618716565b835284516020860151617f8d9190619537565b8103617f9c5760008552617fce565b83518351617faa9190619537565b85518690617fb9908390618716565b9052508351617fc89082619537565b60208601525b50909392505050565b6020811061800f5781518352617fee602084619537565b9250617ffb602083619537565b9150618008602082618716565b9050617fd7565b600019811561803e576001618025836020618716565b61803190610100619851565b61803b9190618716565b90505b9151835183169219169190911790915250565b6060600061805f848461453d565b805160208083015160405193945061807993909101619874565b60405160208183030381529060405291505092915050565b81518151600091908111156180a4575081515b6020808501519084015160005b8381101561815d578251825180821461812d57600019602087101561810c576001846180de896020618716565b6180e89190619537565b6180f3906008619753565b6180fe906002619851565b6181089190618716565b1990505b818116838216818103911461812a5797506140749650505050505050565b50505b618138602086619537565b9450618145602085619537565b935050506020816181569190619537565b90506180b1565b5084518651614beb91906198cc565b610c9f806198ed83390190565b61140b8061a58c83390190565b6116638061b99783390190565b610d5e8061cffa83390190565b6040518060e001604052806060815260200160608152602001606081526020016000151581526020016000151581526020016000151581526020016181e36181e8565b905290565b604051806101000160405280600015158152602001600015158152602001606081526020016000801916815260200160608152602001606081526020016000151581526020016181e36040518060800160405280600081526020016000815260200160008152602001600081525090565b602080825282518282018190526000918401906040840190835b8181101561829a5783516001600160a01b0316835260209384019390920191600101618273565b509095945050505050565b60005b838110156182c05781810151838201526020016182a8565b50506000910152565b600081518084526182e18160208601602086016182a5565b601f01601f19169290920160200192915050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b828110156183f1577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452815180516001600160a01b03168652602090810151604082880181905281519088018190529101906060600582901b88018101919088019060005b818110156183d7577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa08a85030183526183c18486516182c9565b6020958601959094509290920191600101618387565b50919750505060209485019492909201915060010161831d565b50929695505050505050565b600081518084526020840193506020830160005b828110156184515781517fffffffff0000000000000000000000000000000000000000000000000000000016865260209586019590910190600101618411565b5093949350505050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b828110156183f1577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc087860301845281518051604087526184c760408801826182c9565b90506020820151915086810360208801526184e281836183fd565b965050506020938401939190910190600101618483565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b828110156183f1577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc087860301845261855b8583516182c9565b94506020938401939190910190600101618521565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b828110156183f1577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc087860301845281516001600160a01b03815116865260208101519050604060208701526185f160408701826183fd565b9550506020938401939190910190600101618598565b600181811c9082168061861b57607f821691505b602082108103616336577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006020828403121561866657600080fd5b5051919050565b6001600160a01b038416815282602082015260606040820152600061631c60608301846182c9565b828152604060208201526000615a6a60408301846182c9565b6001600160a01b03851681528360208201526080604082015260006186d660808301856182c9565b905082606083015295945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b81810381811115614074576140746186e7565b60208152600061416d60208301846182c9565b600082618772577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b6001600160a01b0383168152604060208201526000615a6a60408301846182c9565b7f4661696c656420746f206465706c6f7920636f6e7472616374200000000000008152600083516187d181601a8501602088016182a5565b7f3a20000000000000000000000000000000000000000000000000000000000000601a91840191820152835161880e81601c8401602088016182a5565b01601c01949350505050565b60006020828403121561882c57600080fd5b81516001600160a01b038116811461416d57600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040516060810167ffffffffffffffff8111828210171561889557618895618843565b60405290565b60008067ffffffffffffffff8411156188b6576188b6618843565b50604051601f19601f85018116603f0116810181811067ffffffffffffffff821117156188e5576188e5618843565b6040528381529050808284018510156188fd57600080fd5b615e398460208301856182a5565b600082601f83011261891c57600080fd5b61416d8383516020850161889b565b60006020828403121561893d57600080fd5b815167ffffffffffffffff81111561895457600080fd5b6140708482850161890b565b600083516189728184602088016182a5565b8351908301906189868183602088016182a5565b01949350505050565b7f4661696c656420746f206465706c6f7920636f6e7472616374200000000000008152600083516189c781601a8501602088016182a5565b7f207573696e6720636f6e7374727563746f722064617461202200000000000000601a918401918201528351618a048160338401602088016182a5565b7f220000000000000000000000000000000000000000000000000000000000000060339290910191820152603401949350505050565b60408152600b60408201527f464f554e4452595f4f5554000000000000000000000000000000000000000000606082015260806020820152600061416d60808301846182c9565b600060208284031215618a9357600080fd5b815167ffffffffffffffff811115618aaa57600080fd5b8201601f81018413618abb57600080fd5b6140708482516020840161889b565b60008551618adc818460208a016182a5565b7f2f000000000000000000000000000000000000000000000000000000000000009083019081528551618b16816001840160208a016182a5565b7f2f00000000000000000000000000000000000000000000000000000000000000600192909101918201528451618b548160028401602089016182a5565b6001818301019150507f2f0000000000000000000000000000000000000000000000000000000000000060018201528351618b968160028401602088016182a5565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600292909101918201526007019695505050505050565b604081526000618be160408301846182c9565b8281036020840152600481527f2e6173740000000000000000000000000000000000000000000000000000000060208201526040810191505092915050565b600060208284031215618c3257600080fd5b8151801515811461416d57600080fd5b7f436f756c64206e6f742066696e642041535420696e2061727469666163742000815260008251618c7a81601f8501602087016182a5565b7f2e205365742060617374203d20747275656020696e20666f756e6472792e746f601f9390910192830152507f6d6c000000000000000000000000000000000000000000000000000000000000603f820152604101919050565b604081526000618ce760408301846182c9565b8281036020840152601181527f2e6173742e6162736f6c7574655061746800000000000000000000000000000060208201526040810191505092915050565b604081526000618d3960408301846182c9565b8281036020840152600c81527f2e6173742e6c6963656e7365000000000000000000000000000000000000000060208201526040810191505092915050565b7f2e6d657461646174612e736f75726365732e5b27000000000000000000000000815260008251618db08160148501602087016182a5565b7f275d2e6b656363616b32353600000000000000000000000000000000000000006014939091019283015250602001919050565b604081526000618df760408301856182c9565b828103602084015261416981856182c9565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f2200000000000000000000000000000000000000000000000000000000000000815260008251618e708160018501602087016182a5565b7f22000000000000000000000000000000000000000000000000000000000000006001939091019283015250600201919050565b60008251618eb68184602087016182a5565b7f2f6275696c642d696e666f000000000000000000000000000000000000000000920191825250600b01919050565b7f436f756c64206e6f742066696e64206275696c642d696e666f2066696c65207781527f697468206d61746368696e6720736f7572636520636f6465206861736820666f60208201527f7220636f6e747261637420000000000000000000000000000000000000000000604082015260008251618f6981604b8501602087016182a5565b91909101604b0192915050565b600060ff821660ff8103618f8c57618f8c6186e7565b60010192915050565b7f406f70656e7a657070656c696e2f646566656e6465722d6465706c6f792d636c81527f69656e742d636c69400000000000000000000000000000000000000000000000602082015260008251618ff38160298501602087016182a5565b9190910160290192915050565b60408152601660408201527f4f50454e5a455050454c494e5f424153485f5041544800000000000000000000606082015260806020820152600061416d60808301846182c9565b60006020828403121561905957600080fd5b815167ffffffffffffffff81111561907057600080fd5b82016060818503121561908257600080fd5b61908a618872565b81518060030b811461909b57600080fd5b8152602082015167ffffffffffffffff8111156190b757600080fd5b6190c38682850161890b565b602083015250604082015167ffffffffffffffff8111156190e357600080fd5b6190ef8682850161890b565b604083015250949350505050565b7f4661696c656420746f2072756e206261736820636f6d6d616e6420776974682081527f220000000000000000000000000000000000000000000000000000000000000060208201526000825161915b8160218501602087016182a5565b7f222e20496620796f7520617265207573696e672057696e646f77732c2073657460219390910192830152507f20746865204f50454e5a455050454c494e5f424153485f5041544820656e766960418201527f726f6e6d656e74207661726961626c6520746f207468652066756c6c7920717560618201527f616c69666965642070617468206f66207468652062617368206578656375746160818201527f626c652e20466f72206578616d706c652c20696620796f75206172652075736960a18201527f6e672047697420666f722057696e646f77732c206164642074686520666f6c6c60c18201527f6f77696e67206c696e6520696e20746865202e656e762066696c65206f66207960e18201527f6f75722070726f6a65637420287573696e6720666f727761726420736c6173686101018201527f6573293a0a4f50454e5a455050454c494e5f424153485f504154483d22433a2f6101218201527f50726f6772616d2046696c65732f4769742f62696e2f6261736822000000000061014182015261015c01919050565b7f4661696c656420746f2066696e64206c696e652077697468207072656669782081527f27000000000000000000000000000000000000000000000000000000000000006020820152600083516193478160218501602088016182a5565b7f2720696e206f75747075743a2000000000000000000000000000000000000000602191840191820152835161938481602e8401602088016182a5565b01602e01949350505050565b7f4661696c656420746f2072756e2075706772616465207361666574792076616c81527f69646174696f6e3a200000000000000000000000000000000000000000000000602082015260008251618ff38160298501602087016182a5565b7f55706772616465207361666574792076616c69646174696f6e206661696c656481527f3a0a00000000000000000000000000000000000000000000000000000000000060208201526000825161944c8160228501602087016182a5565b9190910160220192915050565b7f436f6e7472616374206e616d652000000000000000000000000000000000000081526000825161949181600e8501602087016182a5565b7f206d75737420626520696e2074686520666f726d6174204d79436f6e74726163600e9390910192830152507f742e736f6c3a4d79436f6e7472616374206f72204d79436f6e74726163742e73602e8201527f6f6c206f72206f75742f4d79436f6e74726163742e736f6c2f4d79436f6e7472604e8201527f6163742e6a736f6e000000000000000000000000000000000000000000000000606e820152607601919050565b80820180821115614074576140746186e7565b7f53504458206c6963656e7365206964656e7469666965722000000000000000008152600083516195828160188501602088016182a5565b7f20696e200000000000000000000000000000000000000000000000000000000060189184019182015283516195bf81601c8401602088016182a5565b7f20646f6573206e6f74206c6f6f6b206c696b65206120737570706f7274656420601c92909101918201527f6c6963656e736520666f7220626c6f636b206578706c6f726572207665726966603c8201527f69636174696f6e2e205573652074686520606c6963656e73655479706560206f605c8201527f7074696f6e20746f20737065636966792061206c6963656e736520747970652c607c8201527f206f7220736574207468652060736b69704c6963656e73655479706560206f70609c8201527f74696f6e20746f2060747275656020746f20736b69702e00000000000000000060bc82015260d301949350505050565b600082516196c58184602087016182a5565b7f2000000000000000000000000000000000000000000000000000000000000000920191825250600101919050565b7f406f70656e7a657070656c696e2f75706772616465732d636f7265400000000081526000825161972c81601c8501602087016182a5565b91909101601c0192915050565b6000600019820361974c5761974c6186e7565b5060010190565b8082028115828204841417614074576140746186e7565b6001815b60018411156197a557808504811115619789576197896186e7565b600184161561979757908102905b60019390931c92800261976e565b935093915050565b6000826197bc57506001614074565b816197c957506000614074565b81600181146197df57600281146197e957619805565b6001915050614074565b60ff8411156197fa576197fa6186e7565b50506001821b614074565b5060208310610133831016604e8410600b8410161715619828575081810a614074565b619835600019848461976a565b8060001904821115619849576198496186e7565b029392505050565b600061416d83836197ad565b60008161986c5761986c6186e7565b506000190190565b600083516198868184602088016182a5565b7f3a0000000000000000000000000000000000000000000000000000000000000090830190815283516198c08160018401602088016182a5565b01600101949350505050565b8181036000831280158383131683831282161715617431576174316186e756fe608060405234801561001057600080fd5b50604051610c9f380380610c9f83398101604081905261002f9161010d565b8181600361003d83826101ff565b50600461004a82826101ff565b50505050506102bd565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261007b57600080fd5b81516001600160401b0381111561009457610094610054565b604051601f8201601f19908116603f011681016001600160401b03811182821017156100c2576100c2610054565b6040528181528382016020018510156100da57600080fd5b60005b828110156100f9576020818601810151838301820152016100dd565b506000918101602001919091529392505050565b6000806040838503121561012057600080fd5b82516001600160401b0381111561013657600080fd5b6101428582860161006a565b602085015190935090506001600160401b0381111561016057600080fd5b61016c8582860161006a565b9150509250929050565b600181811c9082168061018a57607f821691505b6020821081036101aa57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156101fa57806000526020600020601f840160051c810160208510156101d75750805b601f840160051c820191505b818110156101f757600081556001016101e3565b50505b505050565b81516001600160401b0381111561021857610218610054565b61022c816102268454610176565b846101b0565b6020601f82116001811461026057600083156102485750848201515b600019600385901b1c1916600184901b1784556101f7565b600084815260208120601f198516915b828110156102905787850151825560209485019460019092019101610270565b50848210156102ae5786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b6109d3806102cc6000396000f3fe608060405234801561001057600080fd5b50600436106100be5760003560e01c806340c10f191161007657806395d89b411161005b57806395d89b4114610183578063a9059cbb1461018b578063dd62ed3e1461019e57600080fd5b806340c10f191461013857806370a082311461014d57600080fd5b806318160ddd116100a757806318160ddd1461010457806323b872dd14610116578063313ce5671461012957600080fd5b806306fdde03146100c3578063095ea7b3146100e1575b600080fd5b6100cb6101e4565b6040516100d891906107bf565b60405180910390f35b6100f46100ef366004610854565b610276565b60405190151581526020016100d8565b6002545b6040519081526020016100d8565b6100f461012436600461087e565b610290565b604051601281526020016100d8565b61014b610146366004610854565b6102b4565b005b61010861015b3660046108bb565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6100cb6102c2565b6100f4610199366004610854565b6102d1565b6101086101ac3660046108dd565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6060600380546101f390610910565b80601f016020809104026020016040519081016040528092919081815260200182805461021f90610910565b801561026c5780601f106102415761010080835404028352916020019161026c565b820191906000526020600020905b81548152906001019060200180831161024f57829003601f168201915b5050505050905090565b6000336102848185856102df565b60019150505b92915050565b60003361029e8582856102f1565b6102a98585856103c5565b506001949350505050565b6102be8282610470565b5050565b6060600480546101f390610910565b6000336102848185856103c5565b6102ec83838360016104cc565b505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146103bf57818110156103b0576040517ffb8f41b200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416600482015260248101829052604481018390526064015b60405180910390fd5b6103bf848484840360006104cc565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8316610415576040517f96c6fd1e000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff8216610465576040517fec442f05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b6102ec838383610614565b73ffffffffffffffffffffffffffffffffffffffff82166104c0576040517fec442f05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b6102be60008383610614565b73ffffffffffffffffffffffffffffffffffffffff841661051c576040517fe602df05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff831661056c576040517f94280d62000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260016020908152604080832093871683529290522082905580156103bf578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161060691815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff831661064c5780600260008282546106419190610963565b909155506106fe9050565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260208190526040902054818110156106d2576040517fe450d38c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8516600482015260248101829052604481018390526064016103a7565b73ffffffffffffffffffffffffffffffffffffffff841660009081526020819052604090209082900390555b73ffffffffffffffffffffffffffffffffffffffff821661072757600280548290039055610753565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090208054820190555b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516107b291815260200190565b60405180910390a3505050565b602081526000825180602084015260005b818110156107ed57602081860181015160408684010152016107d0565b5060006040828501015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011684010191505092915050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461084f57600080fd5b919050565b6000806040838503121561086757600080fd5b6108708361082b565b946020939093013593505050565b60008060006060848603121561089357600080fd5b61089c8461082b565b92506108aa6020850161082b565b929592945050506040919091013590565b6000602082840312156108cd57600080fd5b6108d68261082b565b9392505050565b600080604083850312156108f057600080fd5b6108f98361082b565b91506109076020840161082b565b90509250929050565b600181811c9082168061092457607f821691505b60208210810361095d577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b8082018082111561028a577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea26469706673582212207e804ca539d49155d2b6bc19268ce22f9f857027c75247d69fb0d56a089c93d464736f6c634300081a003360a060405234801561001057600080fd5b5060405161140b38038061140b83398101604081905261002f916101b3565b60016000556002805460ff191690556001600160a01b038316158061005b57506001600160a01b038216155b8061006d57506001600160a01b038116155b1561008b5760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b0383166080526100a3600082610102565b506100ce7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a82610102565b506100f97f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e483610102565b505050506101f6565b60008281526001602090815260408083206001600160a01b038516845290915281205460ff1661018d5760008381526001602081815260408084206001600160a01b0387168086529252808420805460ff19169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a4506001610191565b5060005b92915050565b80516001600160a01b03811681146101ae57600080fd5b919050565b6000806000606084860312156101c857600080fd5b6101d184610197565b92506101df60208501610197565b91506101ed60408501610197565b90509250925092565b6080516111de61022d60003960008181610132015281816103c5015281816104270152818161065801526106ba01526111de6000f3fe608060405234801561001057600080fd5b50600436106101005760003560e01c80638456cb5911610097578063c8a0236211610066578063c8a0236214610276578063d547741f14610289578063d9caed121461029c578063e63ab1e9146102af57600080fd5b80638456cb59146101f957806385f438c11461020157806391d1485414610228578063a217fddf1461026e57600080fd5b80632f2ff15d116100d35780632f2ff15d146101c057806336568abe146101d35780633f4ba83a146101e65780635c975abb146101ee57600080fd5b806301ffc9a714610105578063116191b61461012d57806321fc65f214610179578063248a9ca31461018e575b600080fd5b610118610113366004610f04565b6102d6565b60405190151581526020015b60405180910390f35b6101547f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610124565b61018c610187366004610f6f565b61036f565b005b6101b261019c36600461100c565b6000908152600160208190526040909120015490565b604051908152602001610124565b61018c6101ce366004611025565b610511565b61018c6101e1366004611025565b61053d565b61018c61059b565b60025460ff16610118565b61018c6105d0565b6101b27f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b610118610236366004611025565b600091825260016020908152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b6101b2600081565b61018c610284366004610f6f565b610602565b61018c610297366004611025565b61078a565b61018c6102aa366004611051565b6107b0565b6101b27f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061036957507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b61037761087d565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e46103a1816108c0565b6103a96108ca565b6103ea73ffffffffffffffffffffffffffffffffffffffff87167f000000000000000000000000000000000000000000000000000000000000000086610909565b6040517f5131ab5900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690635131ab599061046490899089908990899089906004016110d7565b600060405180830381600087803b15801561047e57600080fd5b505af1158015610492573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167f85b5be9cf454e05e0bddf49315178102227c312078eefa3c00294fb4d912ae4e8686866040516104f793929190611134565b60405180910390a35061050a6001600055565b5050505050565b6000828152600160208190526040909120015461052d816108c0565b6105378383610996565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8116331461058c576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6105968282610a61565b505050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a6105c5816108c0565b6105cd610b20565b50565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a6105fa816108c0565b6105cd610b9d565b61060a61087d565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e4610634816108c0565b61063c6108ca565b61067d73ffffffffffffffffffffffffffffffffffffffff87167f000000000000000000000000000000000000000000000000000000000000000086610909565b6040517fb8969bd400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063b8969bd4906106f790899089908990899089906004016110d7565b600060405180830381600087803b15801561071157600080fd5b505af1158015610725573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fb9d4efa96044e5f5e03e696fa9ae2ff66911cc27e8a637c3627c75bc5b2241c88686866040516104f793929190611134565b600082815260016020819052604090912001546107a6816108c0565b6105378383610a61565b6107b861087d565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e46107e2816108c0565b6107ea6108ca565b61080b73ffffffffffffffffffffffffffffffffffffffff85168484610909565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f9b1bfa7fa9ee420a16e124f794c35ac9f90472acc99140eb2f6447c714cad8eb8460405161086a91815260200190565b60405180910390a3506105966001600055565b6002600054036108b9576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b6105cd8133610bf8565b60025460ff1615610907576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6040805173ffffffffffffffffffffffffffffffffffffffff8416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb00000000000000000000000000000000000000000000000000000000179052610596908490610c89565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff16610a5957600083815260016020818152604080842073ffffffffffffffffffffffffffffffffffffffff8716808652925280842080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a4506001610369565b506000610369565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff1615610a5957600083815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8616808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a4506001610369565b610b28610d1f565b600280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b610ba56108ca565b600280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258610b733390565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16610c85576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82166004820152602481018390526044015b60405180910390fd5b5050565b6000610cab73ffffffffffffffffffffffffffffffffffffffff841683610d5b565b90508051600014158015610cd0575080806020019051810190610cce9190611157565b155b15610596576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84166004820152602401610c7c565b60025460ff16610907576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6060610d6983836000610d70565b9392505050565b606081471015610dae576040517fcd786059000000000000000000000000000000000000000000000000000000008152306004820152602401610c7c565b6000808573ffffffffffffffffffffffffffffffffffffffff168486604051610dd79190611179565b60006040518083038185875af1925050503d8060008114610e14576040519150601f19603f3d011682016040523d82523d6000602084013e610e19565b606091505b5091509150610e29868383610e33565b9695505050505050565b606082610e4857610e4382610ec2565b610d69565b8151158015610e6c575073ffffffffffffffffffffffffffffffffffffffff84163b155b15610ebb576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85166004820152602401610c7c565b5080610d69565b805115610ed25780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060208284031215610f1657600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610d6957600080fd5b803573ffffffffffffffffffffffffffffffffffffffff81168114610f6a57600080fd5b919050565b600080600080600060808688031215610f8757600080fd5b610f9086610f46565b9450610f9e60208701610f46565b935060408601359250606086013567ffffffffffffffff811115610fc157600080fd5b8601601f81018813610fd257600080fd5b803567ffffffffffffffff811115610fe957600080fd5b886020828401011115610ffb57600080fd5b959894975092955050506020019190565b60006020828403121561101e57600080fd5b5035919050565b6000806040838503121561103857600080fd5b8235915061104860208401610f46565b90509250929050565b60008060006060848603121561106657600080fd5b61106f84610f46565b925061107d60208501610f46565b929592945050506040919091013590565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff8616815273ffffffffffffffffffffffffffffffffffffffff8516602082015283604082015260806060820152600061112960808301848661108e565b979650505050505050565b83815260406020820152600061114e60408301848661108e565b95945050505050565b60006020828403121561116957600080fd5b81518015158114610d6957600080fd5b6000825160005b8181101561119a5760208186018101518583015201611180565b50600092019182525091905056fea264697066735822122069d5c5c3cb2752c876b6a2138d8d9b66bac6bd1b48a1fe98417eea81faf02a3e64736f6c634300081a003360c060405234801561001057600080fd5b5060405161166338038061166383398101604081905261002f9161021a565b60016000819055805460ff19169055838383836001600160a01b038416158061005f57506001600160a01b038316155b8061007157506001600160a01b038216155b8061008357506001600160a01b038116155b156100a15760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b03808516608052831660a0526100bf60008261014e565b506100ea7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e48361014e565b506101157f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb8361014e565b506101407f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a8261014e565b50505050505050505061026e565b60008281526002602090815260408083206001600160a01b038516845290915281205460ff166101f45760008381526002602090815260408083206001600160a01b03861684529091529020805460ff191660011790556101ac3390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45060016101f8565b5060005b92915050565b80516001600160a01b038116811461021557600080fd5b919050565b6000806000806080858703121561023057600080fd5b610239856101fe565b9350610247602086016101fe565b9250610255604086016101fe565b9150610263606086016101fe565b905092959194509250565b60805160a05161138a6102d9600039600081816101f701528181610474015281816105250152818161063f015281816107d30152818161088401526109520152600081816101ab01528181610496015281816104f8015281816107f50152610857015261138a6000f3fe608060405234801561001057600080fd5b50600436106101515760003560e01c80635c975abb116100cd57806391d1485411610081578063a783c78911610066578063a783c78914610326578063d547741f1461034d578063e63ab1e91461036057600080fd5b806391d14854146102d8578063a217fddf1461031e57600080fd5b8063743e0c9b116100b2578063743e0c9b146102965780638456cb59146102a957806385f438c1146102b157600080fd5b80635c975abb146102785780635e3e9fef1461028357600080fd5b806321e093b1116101245780632f2ff15d116101095780632f2ff15d1461024a57806336568abe1461025d5780633f4ba83a1461027057600080fd5b806321e093b1146101f2578063248a9ca31461021957600080fd5b806301ffc9a71461015657806302d5c8991461017e578063106e629014610193578063116191b6146101a6575b600080fd5b6101696101643660046110c5565b610387565b60405190151581526020015b60405180910390f35b61019161018c366004611130565b610420565b005b6101916101a13660046111c2565b6105eb565b6101cd7f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610175565b6101cd7f000000000000000000000000000000000000000000000000000000000000000081565b61023c6102273660046111f5565b60009081526002602052604090206001015490565b604051908152602001610175565b61019161025836600461120e565b6106c6565b61019161026b36600461120e565b6106f1565b61019161074a565b60015460ff16610169565b610191610291366004611130565b61077f565b6101916102a43660046111f5565b610930565b61019161097a565b61023c7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b6101696102e636600461120e565b600091825260026020908152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b61023c600081565b61023c7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb81565b61019161035b36600461120e565b6109ac565b61023c7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061041a57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b6104286109d1565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461045281610a14565b61045a610a1e565b6104bb73ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000167f000000000000000000000000000000000000000000000000000000000000000087610a5d565b6040517fb8969bd400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063b8969bd490610555907f0000000000000000000000000000000000000000000000000000000000000000908a908a908a908a90600401611283565b600060405180830381600087803b15801561056f57600080fd5b505af1158015610583573d6000803e3d6000fd5b505050508573ffffffffffffffffffffffffffffffffffffffff167fba96f26bdda53eb8c8ba39045dfb4ff39753fbc7a6edcf250a88e75e78d102fe8686866040516105d1939291906112e0565b60405180910390a2506105e46001600055565b5050505050565b6105f36109d1565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461061d81610a14565b610625610a1e565b61066673ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168585610a5d565b8373ffffffffffffffffffffffffffffffffffffffff167f884edad9ce6fa2440d8a54cc123490eb96d2768479d49ff9c7366125a9424364846040516106ae91815260200190565b60405180910390a2506106c16001600055565b505050565b6000828152600260205260409020600101546106e181610a14565b6106eb8383610ade565b50505050565b73ffffffffffffffffffffffffffffffffffffffff81163314610740576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6106c18282610bde565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61077481610a14565b61077c610c9d565b50565b6107876109d1565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e46107b181610a14565b6107b9610a1e565b61081a73ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000167f000000000000000000000000000000000000000000000000000000000000000087610a5d565b6040517f5131ab5900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690635131ab59906108b4907f0000000000000000000000000000000000000000000000000000000000000000908a908a908a908a90600401611283565b600060405180830381600087803b1580156108ce57600080fd5b505af11580156108e2573d6000803e3d6000fd5b505050508573ffffffffffffffffffffffffffffffffffffffff167f7772f56296d3a5202974a45c61c9188d844ab4d6eeb18c851e4b8d5384ca6ced8686866040516105d1939291906112e0565b610938610a1e565b61077c73ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016333084610d1a565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a6109a481610a14565b61077c610d60565b6000828152600260205260409020600101546109c781610a14565b6106eb8383610bde565b600260005403610a0d576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b61077c8133610db9565b60015460ff1615610a5b576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b60405173ffffffffffffffffffffffffffffffffffffffff8381166024830152604482018390526106c191859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050610e4a565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff16610bd657600083815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff86168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055610b743390565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a450600161041a565b50600061041a565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff1615610bd657600083815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8616808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a450600161041a565b610ca5610ee0565b600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b60405173ffffffffffffffffffffffffffffffffffffffff84811660248301528381166044830152606482018390526106eb9186918216906323b872dd90608401610a97565b610d68610a1e565b600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016811790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25833610cf0565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16610e46576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82166004820152602481018390526044015b60405180910390fd5b5050565b6000610e6c73ffffffffffffffffffffffffffffffffffffffff841683610f1c565b90508051600014158015610e91575080806020019051810190610e8f9190611303565b155b156106c1576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84166004820152602401610e3d565b60015460ff16610a5b576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6060610f2a83836000610f31565b9392505050565b606081471015610f6f576040517fcd786059000000000000000000000000000000000000000000000000000000008152306004820152602401610e3d565b6000808573ffffffffffffffffffffffffffffffffffffffff168486604051610f989190611325565b60006040518083038185875af1925050503d8060008114610fd5576040519150601f19603f3d011682016040523d82523d6000602084013e610fda565b606091505b5091509150610fea868383610ff4565b9695505050505050565b6060826110095761100482611083565b610f2a565b815115801561102d575073ffffffffffffffffffffffffffffffffffffffff84163b155b1561107c576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85166004820152602401610e3d565b5080610f2a565b8051156110935780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000602082840312156110d757600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610f2a57600080fd5b803573ffffffffffffffffffffffffffffffffffffffff8116811461112b57600080fd5b919050565b60008060008060006080868803121561114857600080fd5b61115186611107565b945060208601359350604086013567ffffffffffffffff81111561117457600080fd5b8601601f8101881361118557600080fd5b803567ffffffffffffffff81111561119c57600080fd5b8860208284010111156111ae57600080fd5b959894975060200195606001359392505050565b6000806000606084860312156111d757600080fd5b6111e084611107565b95602085013595506040909401359392505050565b60006020828403121561120757600080fd5b5035919050565b6000806040838503121561122157600080fd5b8235915061123160208401611107565b90509250929050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff8616815273ffffffffffffffffffffffffffffffffffffffff851660208201528360408201526080606082015260006112d560808301848661123a565b979650505050505050565b8381526040602082015260006112fa60408301848661123a565b95945050505050565b60006020828403121561131557600080fd5b81518015158114610f2a57600080fd5b6000825160005b81811015611346576020818601810151858301520161132c565b50600092019182525091905056fea2646970667358221220b04453dff0090afb8a475e5970db3acd2d95039b4c5a72b1afb3fdac6383a65d64736f6c634300081a00336080604052348015600f57600080fd5b506001600055610d3a806100246000396000f3fe6080604052600436106100635760003560e01c8063c513169111610040578063c5131691146100c1578063e04d4f97146100e1578063f05b6abf146100f457005b8063357fc5a21461006c5780636ed701691461008c5780638fcaa0b5146100a157005b3661006a57005b005b34801561007857600080fd5b5061006a6100873660046106c0565b610114565b34801561009857600080fd5b5061006a6101aa565b3480156100ad57600080fd5b5061006a6100bc3660046106fc565b6101df565b3480156100cd57600080fd5b5061006a6100dc3660046106c0565b61021e565b61006a6100ef366004610895565b6102f9565b34801561010057600080fd5b5061006a61010f366004610981565b61033d565b61011c610372565b61013e73ffffffffffffffffffffffffffffffffffffffff83163383866103b5565b604080513381526020810185905273ffffffffffffffffffffffffffffffffffffffff848116828401528316606082015290517f2b58128f24a9f59127cc5b5430d70542b22220f2d9adaa86e442b816ab98af609181900360800190a16101a56001600055565b505050565b6040513381527fbcaadb46b82a48af60b608f58959ae6b8310d1b0a0d094c2e9ec3208ed39f2a09060200160405180910390a1565b7f0d3f65f00e631663aa85c96330b5c7a83bb29af3630c0063776f985edc3037aa33838360405161021293929190610a6b565b60405180910390a15050565b610226610372565b6000610233600285610ad5565b90508060000361026f576040517f1f2a200500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61029173ffffffffffffffffffffffffffffffffffffffff84163384846103b5565b604080513381526020810183905273ffffffffffffffffffffffffffffffffffffffff858116828401528416606082015290517f2b58128f24a9f59127cc5b5430d70542b22220f2d9adaa86e442b816ab98af609181900360800190a1506101a56001600055565b7f1f1ff1f5fb41346850b2f5c04e6c767e2f1c8a525c5c0c5cdb60cdf3ca5f62fa3334858585604051610330959493929190610b7e565b60405180910390a1505050565b7f74a53cd528a921fca7dbdee62f86819051d3cc98f214951f4238e8843f20b146338484846040516103309493929190610c08565b6002600054036103ae576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b6040805173ffffffffffffffffffffffffffffffffffffffff85811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd0000000000000000000000000000000000000000000000000000000017905261044a908590610450565b50505050565b600061047273ffffffffffffffffffffffffffffffffffffffff8416836104eb565b905080516000141580156104975750808060200190518101906104959190610ccb565b155b156101a5576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff841660048201526024015b60405180910390fd5b60606104f983836000610500565b9392505050565b60608147101561053e576040517fcd7860590000000000000000000000000000000000000000000000000000000081523060048201526024016104e2565b6000808573ffffffffffffffffffffffffffffffffffffffff1684866040516105679190610ce8565b60006040518083038185875af1925050503d80600081146105a4576040519150601f19603f3d011682016040523d82523d6000602084013e6105a9565b606091505b50915091506105b98683836105c3565b9695505050505050565b6060826105d8576105d382610652565b6104f9565b81511580156105fc575073ffffffffffffffffffffffffffffffffffffffff84163b155b1561064b576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff851660048201526024016104e2565b50806104f9565b8051156106625780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50565b803573ffffffffffffffffffffffffffffffffffffffff811681146106bb57600080fd5b919050565b6000806000606084860312156106d557600080fd5b833592506106e560208501610697565b91506106f360408501610697565b90509250925092565b6000806020838503121561070f57600080fd5b823567ffffffffffffffff81111561072657600080fd5b8301601f8101851361073757600080fd5b803567ffffffffffffffff81111561074e57600080fd5b85602082840101111561076057600080fd5b6020919091019590945092505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156107e6576107e6610770565b604052919050565b600082601f8301126107ff57600080fd5b813567ffffffffffffffff81111561081957610819610770565b61084a60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8401160161079f565b81815284602083860101111561085f57600080fd5b816020850160208301376000918101602001919091529392505050565b801515811461069457600080fd5b80356106bb8161087c565b6000806000606084860312156108aa57600080fd5b833567ffffffffffffffff8111156108c157600080fd5b6108cd868287016107ee565b9350506020840135915060408401356108e58161087c565b809150509250925092565b600067ffffffffffffffff82111561090a5761090a610770565b5060051b60200190565b600082601f83011261092557600080fd5b8135610938610933826108f0565b61079f565b8082825260208201915060208360051b86010192508583111561095a57600080fd5b602085015b8381101561097757803583526020928301920161095f565b5095945050505050565b60008060006060848603121561099657600080fd5b833567ffffffffffffffff8111156109ad57600080fd5b8401601f810186136109be57600080fd5b80356109cc610933826108f0565b8082825260208201915060208360051b8501019250888311156109ee57600080fd5b602084015b83811015610a3057803567ffffffffffffffff811115610a1257600080fd5b610a218b6020838901016107ee565b845250602092830192016109f3565b509550505050602084013567ffffffffffffffff811115610a5057600080fd5b610a5c86828701610914565b9250506106f36040850161088a565b73ffffffffffffffffffffffffffffffffffffffff8416815260406020820152816040820152818360608301376000818301606090810191909152601f9092017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016010192915050565b600082610b0b577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60005b83811015610b2b578181015183820152602001610b13565b50506000910152565b60008151808452610b4c816020860160208601610b10565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b73ffffffffffffffffffffffffffffffffffffffff8616815284602082015260a060408201526000610bb360a0830186610b34565b6060830194909452509015156080909101529392505050565b600081518084526020840193506020830160005b82811015610bfe578151865260209586019590910190600101610be0565b5093949350505050565b60006080820173ffffffffffffffffffffffffffffffffffffffff871683526080602084015280865180835260a08501915060a08160051b86010192506020880160005b82811015610c9b577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60878603018452610c86858351610b34565b94506020938401939190910190600101610c4c565b505050508281036040840152610cb18186610bcc565b915050610cc2606083018415159052565b95945050505050565b600060208284031215610cdd57600080fd5b81516104f98161087c565b60008251610cfa818460208701610b10565b919091019291505056fea2646970667358221220556072e1abafc3c4063b8cce832228b4f309b93726aaa6a6dfab20cb880c6d1864736f6c634300081a0033a26469706673582212209da1e8669fe74e0b9657536fdf6fe4266ac5baf1ef22465b84d3efd35f8efd0764736f6c634300081a0033", + ABI: "[{\"type\":\"function\",\"name\":\"IS_TEST\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"PAUSER_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"WITHDRAWER_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeArtifacts\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedArtifacts_\",\"type\":\"string[]\",\"internalType\":\"string[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeContracts\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedContracts_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeSelectors\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedSelectors_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzSelector[]\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"selectors\",\"type\":\"bytes4[]\",\"internalType\":\"bytes4[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeSenders\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedSenders_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"failed\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"setUp\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"targetArtifactSelectors\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedArtifactSelectors_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzArtifactSelector[]\",\"components\":[{\"name\":\"artifact\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"selectors\",\"type\":\"bytes4[]\",\"internalType\":\"bytes4[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetArtifacts\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedArtifacts_\",\"type\":\"string[]\",\"internalType\":\"string[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetContracts\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedContracts_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetInterfaces\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedInterfaces_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzInterface[]\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"artifacts\",\"type\":\"string[]\",\"internalType\":\"string[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetSelectors\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedSelectors_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzSelector[]\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"selectors\",\"type\":\"bytes4[]\",\"internalType\":\"bytes4[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetSenders\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedSenders_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"testWithdraw\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawAndCallReceiveERC20\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawAndCallReceiveERC20FailsIfSenderIsNotWithdrawer\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawAndCallReceiveERC20Partial\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawAndCallReceiveNoParams\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawAndRevert\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawAndRevertFailsIfSenderIsNotWithdrawer\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawFailsIfSenderIsNotWithdrawer\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawTogglePause\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"event\",\"name\":\"Call\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"receiver\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Deposit\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"receiver\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"asset\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Executed\",\"inputs\":[{\"name\":\"destination\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ExecutedWithERC20\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedERC20\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"token\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"destination\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedNoParams\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedNonPayable\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"strs\",\"type\":\"string[]\",\"indexed\":false,\"internalType\":\"string[]\"},{\"name\":\"nums\",\"type\":\"uint256[]\",\"indexed\":false,\"internalType\":\"uint256[]\"},{\"name\":\"flag\",\"type\":\"bool\",\"indexed\":false,\"internalType\":\"bool\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedPayable\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"str\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"num\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"flag\",\"type\":\"bool\",\"indexed\":false,\"internalType\":\"bool\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedRevert\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Reverted\",\"inputs\":[{\"name\":\"destination\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RevertedWithERC20\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Withdraw\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"WithdrawAndCall\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"WithdrawAndRevert\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log\",\"inputs\":[{\"name\":\"\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_address\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_array\",\"inputs\":[{\"name\":\"val\",\"type\":\"uint256[]\",\"indexed\":false,\"internalType\":\"uint256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_array\",\"inputs\":[{\"name\":\"val\",\"type\":\"int256[]\",\"indexed\":false,\"internalType\":\"int256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_array\",\"inputs\":[{\"name\":\"val\",\"type\":\"address[]\",\"indexed\":false,\"internalType\":\"address[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_bytes\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_bytes32\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_int\",\"inputs\":[{\"name\":\"\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_address\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_array\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"uint256[]\",\"indexed\":false,\"internalType\":\"uint256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_array\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"int256[]\",\"indexed\":false,\"internalType\":\"int256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_array\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"address[]\",\"indexed\":false,\"internalType\":\"address[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_bytes\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_bytes32\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_decimal_int\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"},{\"name\":\"decimals\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_decimal_uint\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"decimals\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_int\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_string\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_uint\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_string\",\"inputs\":[{\"name\":\"\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_uint\",\"inputs\":[{\"name\":\"\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"logs\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"AccessControlUnauthorizedAccount\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"neededRole\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"type\":\"error\",\"name\":\"ApprovalFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ConnectorInitialized\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"CustodyInitialized\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"DepositFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"EnforcedPause\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ExecutionFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientERC20Amount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientETHAmount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NotWhitelistedInCustody\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZeroAddress\",\"inputs\":[]}]", + Bin: "0x6080604052600c8054600160ff199182168117909255601f80549091169091179055348015602c57600080fd5b5061e0808061003c6000396000f3fe608060405234801561001057600080fd5b50600436106101985760003560e01c8063b0464fdc116100e3578063dcf7d0371161008c578063e63ab1e911610066578063e63ab1e9146102ce578063fa7626d4146102f5578063fe574f841461030257600080fd5b8063dcf7d037146102b6578063de1cb76c146102be578063e20c9f71146102c657600080fd5b8063c1909972116100bd578063c19099721461029e578063ccb0e3f2146102a6578063d509b16c146102ae57600080fd5b8063b0464fdc14610276578063b5508aa91461027e578063ba414fa61461028657600080fd5b8063493465581161014557806385226c811161011f57806385226c811461021757806385f438c11461022c578063916a17c61461026157600080fd5b806349346558146101f257806366d9a9a0146101fa578063828320141461020f57600080fd5b80633cba0107116101765780633cba0107146101da5780633e5e3c23146101e25780633f7286f4146101ea57600080fd5b80630a9254e41461019d5780631ed7831c146101a75780632ade3880146101c5575b600080fd5b6101a561030a565b005b6101af610a70565b6040516101bc9190618259565b60405180910390f35b6101cd610ad2565b6040516101bc91906182f5565b6101a5610c14565b6101af6113ce565b6101af61142e565b6101a561148e565b610202611ad1565b6040516101bc919061845b565b6101a5611c53565b61021f611eac565b6040516101bc91906184f9565b6102537f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b6040519081526020016101bc565b610269611f7c565b6040516101bc9190618570565b610269612077565b61021f612172565b61028e612242565b60405190151581526020016101bc565b6101a5612316565b6101a5612581565b6101a56130ad565b6101a56130e9565b6101a5613790565b6101af613ddd565b6102537f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b601f5461028e9060ff1681565b6101a5613e3d565b602580547fffffffffffffffffffffffff000000000000000000000000000000000000000090811630179091556026805482166112341790556027805490911661567817905560405161035c9061816c565b604080825260049082018190527f7a6574610000000000000000000000000000000000000000000000000000000060608301526080602083018190528201527f5a4554410000000000000000000000000000000000000000000000000000000060a082015260c001604051809103906000f0801580156103e0573d6000803e3d6000fd5b50602480547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039283169081178255604080518082018252600e81527f4761746577617945564d2e736f6c0000000000000000000000000000000000006020820152602754602554925190861694810194909452604484019290925290921660648201526104d1919060840160408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fc0c53b8b0000000000000000000000000000000000000000000000000000000017905261405b565b601f80547fffffffffffffffffffffff0000000000000000000000000000000000000000ff166101006001600160a01b0393841681029190911791829055602080549190920483167fffffffffffffffffffffffff0000000000000000000000000000000000000000909116811790915560275460255460405192939182169291169061055d90618179565b6001600160a01b03938416815291831660208301529091166040820152606001604051809103906000f080158015610599573d6000803e3d6000fd5b50602280547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392831617905560205460245460275460255460405193851694928316939183169216906105f490618186565b6001600160a01b039485168152928416602084015290831660408301529091166060820152608001604051809103906000f080158015610638573d6000803e3d6000fd5b50602380547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039290921691909117905560405161067d90618193565b604051809103906000f080158015610699573d6000803e3d6000fd5b50602180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039283161790556027546040517fc88a5e6d00000000000000000000000000000000000000000000000000000000815291166004820152670de0b6b3a76400006024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c88a5e6d90604401600060405180830381600087803b15801561074557600080fd5b505af1158015610759573d6000803e3d6000fd5b50506025546040517f06447d560000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506306447d569150602401600060405180830381600087803b1580156107cf57600080fd5b505af11580156107e3573d6000803e3d6000fd5b50506020546022546040517fae7a3a6f0000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201529116925063ae7a3a6f9150602401600060405180830381600087803b15801561084957600080fd5b505af115801561085d573d6000803e3d6000fd5b50506020546023546040517f10188aef0000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152911692506310188aef9150602401600060405180830381600087803b1580156108c357600080fd5b505af11580156108d7573d6000803e3d6000fd5b505050507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b03166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561093957600080fd5b505af115801561094d573d6000803e3d6000fd5b5050602480546023546040517f40c10f190000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152624c4b40938101939093521692506340c10f199150604401600060405180830381600087803b1580156109be57600080fd5b505af11580156109d2573d6000803e3d6000fd5b50506027546040517fc88a5e6d0000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152670de0b6b3a76400006024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c88a5e6d9150604401600060405180830381600087803b158015610a5657600080fd5b505af1158015610a6a573d6000803e3d6000fd5b50505050565b60606016805480602002602001604051908101604052809291908181526020018280548015610ac857602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610aaa575b5050505050905090565b6060601e805480602002602001604051908101604052809291908181526020016000905b82821015610c0b57600084815260208082206040805180820182526002870290920180546001600160a01b03168352600181018054835181870281018701909452808452939591948681019491929084015b82821015610bf4578382906000526020600020018054610b6790618607565b80601f0160208091040260200160405190810160405280929190818152602001828054610b9390618607565b8015610be05780601f10610bb557610100808354040283529160200191610be0565b820191906000526020600020905b815481529060010190602001808311610bc357829003601f168201915b505050505081526020019060010190610b48565b505050508152505081526020019060010190610af6565b50505050905090565b60248054602654604051620186a09381018490526001600160a01b03928316604482015291166064820152600090819060840160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f357fc5a2000000000000000000000000000000000000000000000000000000001790526024805460265492516370a0823160e01b81526001600160a01b0393841660048201529394506000939216916370a082319101602060405180830381865afa158015610cef573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d139190618654565b9050610d2081600061407a565b602480546023546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa158015610d70573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d949190618654565b6020546040516001600160a01b0390911660248201526044810187905290915060009060640160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb0000000000000000000000000000000000000000000000000000000017905260245490517ff30c7ba3000000000000000000000000000000000000000000000000000000008152919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f30c7ba391610e77916001600160a01b039190911690600090869060040161866d565b600060405180830381600087803b158015610e9157600080fd5b505af1158015610ea5573d6000803e3d6000fd5b50506021546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b158015610f3757600080fd5b505af1158015610f4b573d6000803e3d6000fd5b505060208054602454602654604080516001600160a01b0394851681529485018d905291831684830152919091166060830152517f2b58128f24a9f59127cc5b5430d70542b22220f2d9adaa86e442b816ab98af609350908190036080019150a16023546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b15801561103a57600080fd5b505af115801561104e573d6000803e3d6000fd5b50506021546040516001600160a01b0390911692507f7772f56296d3a5202974a45c61c9188d844ab4d6eeb18c851e4b8d5384ca6ced91506110939089908890618695565b60405180910390a260275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156110f457600080fd5b505af1158015611108573d6000803e3d6000fd5b50506023546021546040517f5e3e9fef0000000000000000000000000000000000000000000000000000000081526001600160a01b039283169450635e3e9fef935061116092909116908a9089908b906004016186ae565b600060405180830381600087803b15801561117a57600080fd5b505af115801561118e573d6000803e3d6000fd5b5050602480546026546040516370a0823160e01b81526001600160a01b03918216600482015260009550911692506370a0823191015b602060405180830381865afa1580156111e1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112059190618654565b9050611211818861407a565b602480546023546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa158015611261573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112859190618654565b905061129a816112958a87618716565b61407a565b602480546020546021546040517fdd62ed3e0000000000000000000000000000000000000000000000000000000081526001600160a01b0392831660048201529082169381019390935260009291169063dd62ed3e90604401602060405180830381865afa158015611310573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113349190618654565b905061134181600061407a565b602480546020546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa158015611391573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113b59190618654565b90506113c281600061407a565b50505050505050505050565b60606018805480602002602001604051908101604052809291908181526020018280548015610ac8576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311610aaa575050505050905090565b60606017805480602002602001604051908101604052809291908181526020018280548015610ac8576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311610aaa575050505050905090565b604080516004808252602480830184526020830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f6ed70169000000000000000000000000000000000000000000000000000000001790525460265493516370a0823160e01b8152620186a0946000949385936001600160a01b03908116936370a082319361152f93921691016001600160a01b0391909116815260200190565b602060405180830381865afa15801561154c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115709190618654565b905061157d81600061407a565b602480546023546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa1580156115cd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115f19190618654565b6020546040516001600160a01b0390911660248201526044810187905290915060009060640160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb0000000000000000000000000000000000000000000000000000000017905260245490517ff30c7ba3000000000000000000000000000000000000000000000000000000008152919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f30c7ba3916116d4916001600160a01b039190911690600090869060040161866d565b600060405180830381600087803b1580156116ee57600080fd5b505af1158015611702573d6000803e3d6000fd5b50506021546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b15801561179457600080fd5b505af11580156117a8573d6000803e3d6000fd5b5050602080546040516001600160a01b0390911681527fbcaadb46b82a48af60b608f58959ae6b8310d1b0a0d094c2e9ec3208ed39f2a0935001905060405180910390a16023546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b15801561187a57600080fd5b505af115801561188e573d6000803e3d6000fd5b50506021546040516001600160a01b0390911692507f7772f56296d3a5202974a45c61c9188d844ab4d6eeb18c851e4b8d5384ca6ced91506118d39089908890618695565b60405180910390a260275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561193457600080fd5b505af1158015611948573d6000803e3d6000fd5b50506023546021546040517f5e3e9fef0000000000000000000000000000000000000000000000000000000081526001600160a01b039283169450635e3e9fef93506119a092909116908a9089908b906004016186ae565b600060405180830381600087803b1580156119ba57600080fd5b505af11580156119ce573d6000803e3d6000fd5b5050602480546026546040516370a0823160e01b81526001600160a01b03918216600482015260009550911692506370a082319101602060405180830381865afa158015611a20573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a449190618654565b9050611a5181600061407a565b602480546023546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa158015611aa1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ac59190618654565b905061129a818561407a565b6060601b805480602002602001604051908101604052809291908181526020016000905b82821015610c0b5783829060005260206000209060020201604051806040016040529081600082018054611b2890618607565b80601f0160208091040260200160405190810160405280929190818152602001828054611b5490618607565b8015611ba15780601f10611b7657610100808354040283529160200191611ba1565b820191906000526020600020905b815481529060010190602001808311611b8457829003601f168201915b5050505050815260200160018201805480602002602001604051908101604052809291908181526020018280548015611c3b57602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019060040190602082600301049283019260010382029150808411611be85790505b50505050508152505081526020019060010190611af5565b6040517f68656c6c6f0000000000000000000000000000000000000000000000000000006020820152620186a090600090819060250160408051808303601f190181529082905260255463ca669fa760e01b83526001600160a01b031660048301529150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015611cf057600080fd5b505af1158015611d04573d6000803e3d6000fd5b5050602554604080516001600160a01b0390921660248301527f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e460448084019190915281518084039091018152606490920181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb39250611def9190600401618729565b600060405180830381600087803b158015611e0957600080fd5b505af1158015611e1d573d6000803e3d6000fd5b50506023546021546040517f02d5c8990000000000000000000000000000000000000000000000000000000081526001600160a01b0392831694506302d5c8999350611e7592909116908790869088906004016186ae565b600060405180830381600087803b158015611e8f57600080fd5b505af1158015611ea3573d6000803e3d6000fd5b50505050505050565b6060601a805480602002602001604051908101604052809291908181526020016000905b82821015610c0b578382906000526020600020018054611eef90618607565b80601f0160208091040260200160405190810160405280929190818152602001828054611f1b90618607565b8015611f685780601f10611f3d57610100808354040283529160200191611f68565b820191906000526020600020905b815481529060010190602001808311611f4b57829003601f168201915b505050505081526020019060010190611ed0565b6060601d805480602002602001604051908101604052809291908181526020016000905b82821015610c0b5760008481526020908190206040805180820182526002860290920180546001600160a01b0316835260018101805483518187028101870190945280845293949193858301939283018282801561205f57602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168152602001906004019060208260030104928301926001038202915080841161200c5790505b50505050508152505081526020019060010190611fa0565b6060601c805480602002602001604051908101604052809291908181526020016000905b82821015610c0b5760008481526020908190206040805180820182526002860290920180546001600160a01b0316835260018101805483518187028101870190945280845293949193858301939283018282801561215a57602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190600401906020826003010492830192600103820291508084116121075790505b5050505050815250508152602001906001019061209b565b60606019805480602002602001604051908101604052809291908181526020016000905b82821015610c0b5783829060005260206000200180546121b590618607565b80601f01602080910402602001604051908101604052809291908181526020018280546121e190618607565b801561222e5780601f106122035761010080835404028352916020019161222e565b820191906000526020600020905b81548152906001019060200180831161221157829003601f168201915b505050505081526020019060010190612196565b60085460009060ff161561225a575060085460ff1690565b6040517f667f9d70000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d600482018190527f6661696c65640000000000000000000000000000000000000000000000000000602483015260009163667f9d7090604401602060405180830381865afa1580156122eb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061230f9190618654565b1415905090565b60248054602654604051620186a09381018490526001600160a01b03928316604482015291166064820152600090819060840160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f357fc5a200000000000000000000000000000000000000000000000000000000179052602554905163ca669fa760e01b81526001600160a01b039091166004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156123fc57600080fd5b505af1158015612410573d6000803e3d6000fd5b5050602554604080516001600160a01b0390921660248301527f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e460448084019190915281518084039091018152606490920181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb392506124fb9190600401618729565b600060405180830381600087803b15801561251557600080fd5b505af1158015612529573d6000803e3d6000fd5b50506023546021546040517f5e3e9fef0000000000000000000000000000000000000000000000000000000081526001600160a01b039283169450635e3e9fef9350611e7592909116908790869088906004016186ae565b60275460405163ca669fa760e01b81526001600160a01b039091166004820152620186a090600090737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156125e257600080fd5b505af11580156125f6573d6000803e3d6000fd5b5050602754604080516001600160a01b0390921660248301527f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a60448084019190915281518084039091018152606490920181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb392506126e19190600401618729565b600060405180830381600087803b1580156126fb57600080fd5b505af115801561270f573d6000803e3d6000fd5b50505050602360009054906101000a90046001600160a01b03166001600160a01b0316638456cb596040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561276357600080fd5b505af1158015612777573d6000803e3d6000fd5b505060275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b1580156127d457600080fd5b505af11580156127e8573d6000803e3d6000fd5b5050602754604080516001600160a01b0390921660248301527f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a60448084019190915281518084039091018152606490920181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb392506128d39190600401618729565b600060405180830381600087803b1580156128ed57600080fd5b505af1158015612901573d6000803e3d6000fd5b50505050602360009054906101000a90046001600160a01b03166001600160a01b0316633f4ba83a6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561295557600080fd5b505af1158015612969573d6000803e3d6000fd5b505060255460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b1580156129c657600080fd5b505af11580156129da573d6000803e3d6000fd5b50505050602360009054906101000a90046001600160a01b03166001600160a01b0316638456cb596040518163ffffffff1660e01b8152600401600060405180830381600087803b158015612a2e57600080fd5b505af1158015612a42573d6000803e3d6000fd5b50506040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fd93c0665000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b158015612acb57600080fd5b505af1158015612adf573d6000803e3d6000fd5b505060275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b158015612b3c57600080fd5b505af1158015612b50573d6000803e3d6000fd5b50506023546026546040517f106e62900000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260248101879052604481018690529116925063106e62909150606401600060405180830381600087803b158015612bc457600080fd5b505af1158015612bd8573d6000803e3d6000fd5b505060255460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b158015612c3557600080fd5b505af1158015612c49573d6000803e3d6000fd5b50505050602360009054906101000a90046001600160a01b03166001600160a01b0316633f4ba83a6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015612c9d57600080fd5b505af1158015612cb1573d6000803e3d6000fd5b5050602480546026546040516370a0823160e01b81526001600160a01b03918216600482015260009550911692506370a0823191015b602060405180830381865afa158015612d04573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d289190618654565b9050612d3581600061407a565b6026546040516001600160a01b0390911660248201526044810184905260009060640160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb0000000000000000000000000000000000000000000000000000000017905260245490517ff30c7ba3000000000000000000000000000000000000000000000000000000008152919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f30c7ba391612e15916001600160a01b039190911690600090869060040161866d565b600060405180830381600087803b158015612e2f57600080fd5b505af1158015612e43573d6000803e3d6000fd5b50506023546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b158015612ed557600080fd5b505af1158015612ee9573d6000803e3d6000fd5b50506026546040518781526001600160a01b0390911692507f884edad9ce6fa2440d8a54cc123490eb96d2768479d49ff9c7366125a9424364915060200160405180910390a260275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015612f8857600080fd5b505af1158015612f9c573d6000803e3d6000fd5b50506023546026546040517f106e62900000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260248101899052604481018890529116925063106e62909150606401600060405180830381600087803b15801561301057600080fd5b505af1158015613024573d6000803e3d6000fd5b5050602480546026546040516370a0823160e01b81526001600160a01b03918216600482015260009550911692506370a082319101602060405180830381865afa158015613076573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061309a9190618654565b90506130a6818661407a565b5050505050565b602480546026546040516370a0823160e01b81526001600160a01b039182166004820152620186a093600093849316916370a082319101612ce7565b60248054602654604051620186a09381018490526001600160a01b03928316604482015291166064820152600090819060840160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fc5131691000000000000000000000000000000000000000000000000000000001790526024805460265492516370a0823160e01b81526001600160a01b0393841660048201529394506000939216916370a082319101602060405180830381865afa1580156131c4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131e89190618654565b90506131f581600061407a565b602480546023546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa158015613245573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132699190618654565b6020546040516001600160a01b0390911660248201526044810187905290915060009060640160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb0000000000000000000000000000000000000000000000000000000017905260245490517ff30c7ba3000000000000000000000000000000000000000000000000000000008152919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f30c7ba39161334c916001600160a01b039190911690600090869060040161866d565b600060405180830381600087803b15801561336657600080fd5b505af115801561337a573d6000803e3d6000fd5b50506021546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b15801561340c57600080fd5b505af1158015613420573d6000803e3d6000fd5b50506020547f2b58128f24a9f59127cc5b5430d70542b22220f2d9adaa86e442b816ab98af6092506001600160a01b0316905061345e60028961873c565b602454602654604080516001600160a01b03958616815260208101949094529184168383015292909216606082015290519081900360800190a16023546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b15801561352657600080fd5b505af115801561353a573d6000803e3d6000fd5b50506021546040516001600160a01b0390911692507f7772f56296d3a5202974a45c61c9188d844ab4d6eeb18c851e4b8d5384ca6ced915061357f9089908890618695565b60405180910390a260275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156135e057600080fd5b505af11580156135f4573d6000803e3d6000fd5b50506023546021546040517f5e3e9fef0000000000000000000000000000000000000000000000000000000081526001600160a01b039283169450635e3e9fef935061364c92909116908a9089908b906004016186ae565b600060405180830381600087803b15801561366657600080fd5b505af115801561367a573d6000803e3d6000fd5b5050602480546026546040516370a0823160e01b81526001600160a01b03918216600482015260009550911692506370a082319101602060405180830381865afa1580156136cc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136f09190618654565b90506137018161129560028a61873c565b602480546023546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa158015613751573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137759190618654565b905061129a8161378660028b61873c565b6112959087618716565b6040517f68656c6c6f0000000000000000000000000000000000000000000000000000006020820152620186a090600090819060250160408051808303601f1901815290829052602480546021546370a0823160e01b85526001600160a01b0390811660048601529294506000939216916370a082319101602060405180830381865afa158015613825573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138499190618654565b905061385681600061407a565b602480546023546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa1580156138a6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138ca9190618654565b6020546040516001600160a01b0390911660248201526044810187905290915060009060640160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb0000000000000000000000000000000000000000000000000000000017905260245490517ff30c7ba3000000000000000000000000000000000000000000000000000000008152919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f30c7ba3916139ad916001600160a01b039190911690600090869060040161866d565b600060405180830381600087803b1580156139c757600080fd5b505af11580156139db573d6000803e3d6000fd5b50506021546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b158015613a6d57600080fd5b505af1158015613a81573d6000803e3d6000fd5b50506020546040517f0d3f65f00e631663aa85c96330b5c7a83bb29af3630c0063776f985edc3037aa9350613ac492506001600160a01b03909116908790618777565b60405180910390a16020546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b158015613b5a57600080fd5b505af1158015613b6e573d6000803e3d6000fd5b50506021546024546040516001600160a01b039283169450911691507f723fc7be2448075379e4fdf1e6bf5fead954d2668d2da05dcb44ccfec4beeda790613bb9908a908990618695565b60405180910390a36023546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b158015613c4f57600080fd5b505af1158015613c63573d6000803e3d6000fd5b50506021546040516001600160a01b0390911692507fba96f26bdda53eb8c8ba39045dfb4ff39753fbc7a6edcf250a88e75e78d102fe9150613ca89089908890618695565b60405180910390a260275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015613d0957600080fd5b505af1158015613d1d573d6000803e3d6000fd5b50506023546021546040517f02d5c8990000000000000000000000000000000000000000000000000000000081526001600160a01b0392831694506302d5c8999350613d7592909116908a9089908b906004016186ae565b600060405180830381600087803b158015613d8f57600080fd5b505af1158015613da3573d6000803e3d6000fd5b5050602480546021546040516370a0823160e01b81526001600160a01b03918216600482015260009550911692506370a0823191016111c4565b60606015805480602002602001604051908101604052809291908181526020018280548015610ac8576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311610aaa575050505050905090565b60255460405163ca669fa760e01b81526001600160a01b039091166004820152620186a090600090737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015613e9e57600080fd5b505af1158015613eb2573d6000803e3d6000fd5b5050602554604080516001600160a01b0390921660248301527f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e460448084019190915281518084039091018152606490920181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb39250613f9d9190600401618729565b600060405180830381600087803b158015613fb757600080fd5b505af1158015613fcb573d6000803e3d6000fd5b50506023546026546040517f106e62900000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260248101879052604481018690529116925063106e62909150606401600060405180830381600087803b15801561403f57600080fd5b505af1158015614053573d6000803e3d6000fd5b505050505050565b60006140656181a0565b6140708484836140f9565b9150505b92915050565b6040517f98296c540000000000000000000000000000000000000000000000000000000081526004810183905260248101829052737109709ecfa91a80626ff3989d68f67f5b1dd12d906398296c549060440160006040518083038186803b1580156140e557600080fd5b505afa158015614053573d6000803e3d6000fd5b6000806141068584614174565b90506141696040518060400160405280601d81526020017f4552433139363750726f78792e736f6c3a4552433139363750726f78790000008152508286604051602001614154929190618777565b60405160208183030381529060405285614180565b9150505b9392505050565b600061416d83836141ae565b60c081015151600090156141a45761419d84848460c001516141c9565b905061416d565b61419d848461436f565b60006141ba838361445a565b61416d83836020015184614180565b6000806141d461446a565b905060006141e2868361453d565b905060006141f982606001518360200151856149e3565b9050600061420983838989614bf5565b9050600061421682615a72565b602081015181519192509060030b1561428957898260400151604051602001614240929190618799565b60408051601f19818403018152908290527f08c379a000000000000000000000000000000000000000000000000000000000825261428091600401618729565b60405180910390fd5b60006142cc6040518060400160405280601581526020017f4465706c6f79656420746f20616464726573733a200000000000000000000000815250836001615c41565b6040517fc6ce059d000000000000000000000000000000000000000000000000000000008152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c6ce059d9061431f908490600401618729565b602060405180830381865afa15801561433c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614360919061881a565b9b9a5050505050505050505050565b6040517f8d1cc9250000000000000000000000000000000000000000000000000000000081526000908190737109709ecfa91a80626ff3989d68f67f5b1dd12d90638d1cc925906143c4908790600401618729565b600060405180830381865afa1580156143e1573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052614409919081019061892b565b905060006144378285604051602001614423929190618960565b604051602081830303815290604052615e41565b90506001600160a01b03811661407057848460405160200161424092919061898f565b61446682826000615e54565b5050565b604080518082018252600381527f6f75740000000000000000000000000000000000000000000000000000000000602082015290517fd145736c000000000000000000000000000000000000000000000000000000008152606091737109709ecfa91a80626ff3989d68f67f5b1dd12d91829063d145736c906144f1908490600401618a3a565b600060405180830381865afa15801561450e573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526145369190810190618a81565b9250505090565b61456f6040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b6000737109709ecfa91a80626ff3989d68f67f5b1dd12d90506145ba6040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b6145c385615f57565b602082015260006145d38661633c565b90506000836001600160a01b031663d930a0e66040518163ffffffff1660e01b8152600401600060405180830381865afa158015614615573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261463d9190810190618a81565b868385602001516040516020016146579493929190618aca565b60408051601f19818403018152908290527f60f9bb1100000000000000000000000000000000000000000000000000000000825291506000906001600160a01b038616906360f9bb11906146af908590600401618729565b600060405180830381865afa1580156146cc573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526146f49190810190618a81565b6040517fdb4235f60000000000000000000000000000000000000000000000000000000081529091506001600160a01b0386169063db4235f69061473c908490600401618bce565b602060405180830381865afa158015614759573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061477d9190618c20565b61479257816040516020016142409190618c42565b6040517f49c4fac80000000000000000000000000000000000000000000000000000000081526001600160a01b038616906349c4fac8906147d7908490600401618cd4565b600060405180830381865afa1580156147f4573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261481c9190810190618a81565b84526040517fdb4235f60000000000000000000000000000000000000000000000000000000081526001600160a01b0386169063db4235f690614863908490600401618d26565b602060405180830381865afa158015614880573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906148a49190618c20565b15614939576040517f49c4fac80000000000000000000000000000000000000000000000000000000081526001600160a01b038616906349c4fac8906148ee908490600401618d26565b600060405180830381865afa15801561490b573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526149339190810190618a81565b60408501525b846001600160a01b03166349c4fac882866000015160405160200161495e9190618d78565b6040516020818303038152906040526040518363ffffffff1660e01b815260040161498a929190618de4565b600060405180830381865afa1580156149a7573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526149cf9190810190618a81565b606085015250608083015250949350505050565b60408051600480825260a0820190925260609160009190816020015b60608152602001906001900390816149ff5790505090506040518060400160405280600481526020017f677265700000000000000000000000000000000000000000000000000000000081525081600081518110614a5f57614a5f618e09565b60200260200101819052506040518060400160405280600381526020017f2d726c000000000000000000000000000000000000000000000000000000000081525081600181518110614ab357614ab3618e09565b602002602001018190525084604051602001614acf9190618e38565b60405160208183030381529060405281600281518110614af157614af1618e09565b602002602001018190525082604051602001614b0d9190618ea4565b60405160208183030381529060405281600381518110614b2f57614b2f618e09565b60200260200101819052506000614b4582615a72565b602080820151604080518082018252600581527f2e6a736f6e0000000000000000000000000000000000000000000000000000008185019081528251808401845260008082529086015282518084019093529051825292810192909252919250614bd690604080518082018252600080825260209182015281518083019092528451825280850190820152906165bf565b614beb57856040516020016142409190618ee5565b9695505050505050565b60a0810151604080518082018252600080825260209182015281518083019092528251808352928101910152606090737109709ecfa91a80626ff3989d68f67f5b1dd12d9015614c45565b511590565b614db957826020015115614d01576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605860248201527f54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f742060448201527f62652075736564207768656e207468652060736b6970566572696679536f757260648201527f6365436f646560206f7074696f6e206973206074727565600000000000000000608482015260a401614280565b8260c0015115614db9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605360248201527f54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f742060448201527f62652075736564207768656e207468652060736b69704c6963656e736554797060648201527f6560206f7074696f6e2069732060747275656000000000000000000000000000608482015260a401614280565b6040805160ff8082526120008201909252600091816020015b6060815260200190600190039081614dd257905050905060006040518060400160405280600381526020017f6e70780000000000000000000000000000000000000000000000000000000000815250828280614e2d90618f76565b935060ff1681518110614e4257614e42618e09565b60200260200101819052506040518060400160405280600d81526020017f302e302e312d616c7068612e3700000000000000000000000000000000000000815250604051602001614e939190618f95565b604051602081830303815290604052828280614eae90618f76565b935060ff1681518110614ec357614ec3618e09565b60200260200101819052506040518060400160405280600681526020017f6465706c6f790000000000000000000000000000000000000000000000000000815250828280614f1090618f76565b935060ff1681518110614f2557614f25618e09565b60200260200101819052506040518060400160405280600e81526020017f2d2d636f6e74726163744e616d65000000000000000000000000000000000000815250828280614f7290618f76565b935060ff1681518110614f8757614f87618e09565b60200260200101819052508760200151828280614fa390618f76565b935060ff1681518110614fb857614fb8618e09565b60200260200101819052506040518060400160405280600e81526020017f2d2d636f6e74726163745061746800000000000000000000000000000000000081525082828061500590618f76565b935060ff168151811061501a5761501a618e09565b60209081029190910101528751828261503281618f76565b935060ff168151811061504757615047618e09565b60200260200101819052506040518060400160405280600981526020017f2d2d636861696e4964000000000000000000000000000000000000000000000081525082828061509490618f76565b935060ff16815181106150a9576150a9618e09565b60200260200101819052506150bd46616620565b82826150c881618f76565b935060ff16815181106150dd576150dd618e09565b60200260200101819052506040518060400160405280600f81526020017f2d2d6275696c64496e666f46696c65000000000000000000000000000000000081525082828061512a90618f76565b935060ff168151811061513f5761513f618e09565b60200260200101819052508682828061515790618f76565b935060ff168151811061516c5761516c618e09565b60209081029190910101528551156152935760408051808201909152601581527f2d2d636f6e7374727563746f7242797465636f64650000000000000000000000602082015282826151bd81618f76565b935060ff16815181106151d2576151d2618e09565b60209081029190910101526040517f71aad10d0000000000000000000000000000000000000000000000000000000081526001600160a01b038416906371aad10d90615222908990600401618729565b600060405180830381865afa15801561523f573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526152679190810190618a81565b828261527281618f76565b935060ff168151811061528757615287618e09565b60200260200101819052505b8460200151156153635760408051808201909152601281527f2d2d766572696679536f75726365436f64650000000000000000000000000000602082015282826152dc81618f76565b935060ff16815181106152f1576152f1618e09565b60200260200101819052506040518060400160405280600581526020017f66616c736500000000000000000000000000000000000000000000000000000081525082828061533e90618f76565b935060ff168151811061535357615353618e09565b602002602001018190525061552a565b61539b614c408660a0015160408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b61542e5760408051808201909152600d81527f2d2d6c6963656e73655479706500000000000000000000000000000000000000602082015282826153de81618f76565b935060ff16815181106153f3576153f3618e09565b60200260200101819052508460a001516040516020016154139190618e38565b60405160208183030381529060405282828061533e90618f76565b8460c0015115801561547157506040808901518151808301835260008082526020918201528251808401909352815183529081019082015261546f90511590565b155b1561552a5760408051808201909152600d81527f2d2d6c6963656e73655479706500000000000000000000000000000000000000602082015282826154b581618f76565b935060ff16815181106154ca576154ca618e09565b60200260200101819052506154de886166c0565b6040516020016154ee9190618e38565b60405160208183030381529060405282828061550990618f76565b935060ff168151811061551e5761551e618e09565b60200260200101819052505b6040808601518151808301835260008082526020918201528251808401909352815183529081019082015261555e90511590565b6155f35760408051808201909152600b81527f2d2d72656c617965724964000000000000000000000000000000000000000000602082015282826155a181618f76565b935060ff16815181106155b6576155b6618e09565b602002602001018190525084604001518282806155d290618f76565b935060ff16815181106155e7576155e7618e09565b60200260200101819052505b6060850151156157145760408051808201909152600681527f2d2d73616c7400000000000000000000000000000000000000000000000000006020820152828261563c81618f76565b935060ff168151811061565157615651618e09565b602090810291909101015260608501516040517fb11a19e800000000000000000000000000000000000000000000000000000000815260048101919091526001600160a01b0384169063b11a19e890602401600060405180830381865afa1580156156c0573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526156e89190810190618a81565b82826156f381618f76565b935060ff168151811061570857615708618e09565b60200260200101819052505b60e085015151156157bb5760408051808201909152600a81527f2d2d6761734c696d6974000000000000000000000000000000000000000000006020820152828261575e81618f76565b935060ff168151811061577357615773618e09565b602002602001018190525061578f8560e0015160000151616620565b828261579a81618f76565b935060ff16815181106157af576157af618e09565b60200260200101819052505b60e085015160200151156158655760408051808201909152600a81527f2d2d6761735072696365000000000000000000000000000000000000000000006020820152828261580881618f76565b935060ff168151811061581d5761581d618e09565b60200260200101819052506158398560e0015160200151616620565b828261584481618f76565b935060ff168151811061585957615859618e09565b60200260200101819052505b60e0850151604001511561590f5760408051808201909152600e81527f2d2d6d6178466565506572476173000000000000000000000000000000000000602082015282826158b281618f76565b935060ff16815181106158c7576158c7618e09565b60200260200101819052506158e38560e0015160400151616620565b82826158ee81618f76565b935060ff168151811061590357615903618e09565b60200260200101819052505b60e085015160600151156159b95760408051808201909152601681527f2d2d6d61785072696f72697479466565506572476173000000000000000000006020820152828261595c81618f76565b935060ff168151811061597157615971618e09565b602002602001018190525061598d8560e0015160600151616620565b828261599881618f76565b935060ff16815181106159ad576159ad618e09565b60200260200101819052505b60008160ff1667ffffffffffffffff8111156159d7576159d7618843565b604051908082528060200260200182016040528015615a0a57816020015b60608152602001906001900390816159f55790505b50905060005b8260ff168160ff161015615a6357838160ff1681518110615a3357615a33618e09565b6020026020010151828260ff1681518110615a5057615a50618e09565b6020908102919091010152600101615a10565b5093505050505b949350505050565b615a996040518060600160405280600060030b815260200160608152602001606081525090565b60408051808201825260048082527f6261736800000000000000000000000000000000000000000000000000000000602083015291517fd145736c000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d92600091849163d145736c91615b1f91869101619000565b600060405180830381865afa158015615b3c573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052615b649190810190618a81565b90506000615b7286836171af565b90506000846001600160a01b031663f45c1ce7836040518263ffffffff1660e01b8152600401615ba291906184f9565b6000604051808303816000875af1158015615bc1573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052615be99190810190619047565b805190915060030b15801590615c025750602081015151155b8015615c115750604081015151155b15614beb5781600081518110615c2957615c29618e09565b602002602001015160405160200161424091906190fd565b60606000615c768560408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600080825260209182015281518083019092528651825280870190820152909150615cad9082905b90617304565b15615e0a576000615d2a82615d2484615d1e615cf08a60408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6040805180820182526000808252602091820152815180830190925282518252918201519181019190915290565b9061732b565b9061738d565b604080518082018252600181527f0a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152909150615d8e908290617304565b15615df857604080518082018252600181527f0a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152615df5905b8290617412565b90505b615e0181617438565b9250505061416d565b8215615e235784846040516020016142409291906192e9565b505060408051602081019091526000815261416d565b509392505050565b6000808251602084016000f09392505050565b8160a0015115615e6357505050565b6000615e708484846174a1565b90506000615e7d82615a72565b602081015181519192509060030b158015615f195750604080518082018252600781527f535543434553530000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152615f1990604080518082018252600080825260209182015281518083019092528451825280850190820152615ca7565b15615f2657505050505050565b60408201515115615f465781604001516040516020016142409190619390565b8060405160200161424091906193ee565b60606000615f8c8360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600481527f2e736f6c0000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152909150615ff1905b82906165bf565b1561606057604080518082018252600481527f2e736f6c000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261416d9061605b908390617a3c565b617438565b604080518082018252600181527f3a00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526160c2905b8290617ac6565b60010361618f57604080518082018252600181527f3a000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261612890615dee565b50604080518082018252600181527f3a000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261416d9061605b905b8390617412565b604080518082018252600581527f2e6a736f6e000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526161ee90615fea565b1561632557604080518082018252600181527f2f00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820181905284518086019095529251845283015290616256908390617b60565b9050600081600183516162699190618716565b8151811061627957616279618e09565b6020026020010151905061631c61605b6162ef6040518060400160405280600581526020017f2e6a736f6e00000000000000000000000000000000000000000000000000000081525060408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b60408051808201825260008082526020918201528151808301909252855182528086019082015290617a3c565b95945050505050565b826040516020016142409190619459565b50919050565b606060006163718360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600481527f2e736f6c00000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201529091506163d390615fea565b156163e15761416d81617438565b604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616440906160bb565b6001036164aa57604080518082018252600181527f3a000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261416d9061605b90616188565b604080518082018252600581527f2e6a736f6e0000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261650990615fea565b1561632557604080518082018252600181527f2f00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820181905284518086019095529251845283015290616571908390617b60565b90506001815111156165ad57806002825161658c9190618716565b8151811061659c5761659c618e09565b602002602001015192505050919050565b50826040516020016142409190619459565b8051825160009111156165d457506000614074565b815183516020850151600092916165ea91619537565b6165f49190618716565b90508260200151810361660b576001915050614074565b82516020840151819020912014905092915050565b6060600061662d83617c05565b600101905060008167ffffffffffffffff81111561664d5761664d618843565b6040519080825280601f01601f191660200182016040528015616677576020820181803683370190505b5090508181016020015b600019017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a850494508461668157509392505050565b604081810151815180830183526000808252602091820181905283518085018552835181529282018383015283518085018552600a81527f554e4c4943454e534544000000000000000000000000000000000000000000008184019081528551808701875283815284019290925284518086019095525184529083015260609161674c905b8290617ce7565b1561678c57505060408051808201909152600481527f4e6f6e65000000000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600981527f556e6c6963656e73650000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526167eb90616745565b1561682b57505060408051808201909152600981527f556e6c6963656e736500000000000000000000000000000000000000000000006020820152919050565b604080518082018252600381527f4d495400000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261688a90616745565b156168ca57505060408051808201909152600381527f4d495400000000000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f47504c2d322e302d6f6e6c7900000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261692990616745565b8061698e5750604080518082018252601081527f47504c2d322e302d6f722d6c61746572000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261698e90616745565b156169ce57505060408051808201909152600981527f474e552047504c763200000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f47504c2d332e302d6f6e6c79000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616a2d90616745565b80616a925750604080518082018252601081527f47504c2d332e302d6f722d6c617465720000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616a9290616745565b15616ad257505060408051808201909152600981527f474e552047504c763300000000000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4c47504c2d322e312d6f6e6c790000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616b3190616745565b80616b965750604080518082018252601181527f4c47504c2d322e312d6f722d6c6174657200000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616b9690616745565b15616bd657505060408051808201909152600c81527f474e55204c47504c76322e3100000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4c47504c2d332e302d6f6e6c790000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616c3590616745565b80616c9a5750604080518082018252601181527f4c47504c2d332e302d6f722d6c6174657200000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616c9a90616745565b15616cda57505060408051808201909152600a81527f474e55204c47504c7633000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f4253442d322d436c61757365000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616d3990616745565b15616d7957505060408051808201909152600c81527f4253442d322d436c6175736500000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f4253442d332d436c61757365000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616dd890616745565b15616e1857505060408051808201909152600c81527f4253442d332d436c6175736500000000000000000000000000000000000000006020820152919050565b604080518082018252600781527f4d504c2d322e300000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616e7790616745565b15616eb757505060408051808201909152600781527f4d504c2d322e30000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600781527f4f534c2d332e300000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616f1690616745565b15616f5657505060408051808201909152600781527f4f534c2d332e30000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600a81527f4170616368652d322e300000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616fb590616745565b15616ff557505060408051808201909152600a81527f4170616368652d322e30000000000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4147504c2d332e302d6f6e6c79000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261705490616745565b806170b95750604080518082018252601181527f4147504c2d332e302d6f722d6c61746572000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526170b990616745565b156170f957505060408051808201909152600a81527f474e55204147504c7633000000000000000000000000000000000000000000006020820152919050565b604080518082018252600881527f4255534c2d312e310000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261715890616745565b1561719857505060408051808201909152600781527f42534c20312e31000000000000000000000000000000000000000000000000006020820152919050565b60408084015184519151614240929060200161954a565b60608060005b845181101561723a57818582815181106171d1576171d1618e09565b60200260200101516040516020016171ea929190618960565b6040516020818303038152906040529150600185516172099190618716565b8114617232578160405160200161722091906196b3565b60405160208183030381529060405291505b6001016171b5565b5060408051600380825260808201909252600091816020015b6060815260200190600190039081617253579050509050838160008151811061727e5761727e618e09565b60200260200101819052506040518060400160405280600281526020017f2d63000000000000000000000000000000000000000000000000000000000000815250816001815181106172d2576172d2618e09565b602002602001018190525081816002815181106172f1576172f1618e09565b6020908102919091010152949350505050565b60208083015183518351928401516000936173229291849190617cfb565b14159392505050565b6040805180820190915260008082526020820152600061735d8460000151856020015185600001518660200151617e0c565b905083602001518161736f9190618716565b8451859061737e908390618716565b90525060208401525090919050565b60408051808201909152600080825260208201528151835110156173b2575081614074565b60208083015190840151600191146173d95750815160208481015190840151829020919020145b801561740a578251845185906173f0908390618716565b9052508251602085018051617406908390619537565b9052505b509192915050565b6040805180820190915260008082526020820152617431838383617f2c565b5092915050565b60606000826000015167ffffffffffffffff81111561745957617459618843565b6040519080825280601f01601f191660200182016040528015617483576020820181803683370190505b50905060006020820190506174318185602001518660000151617fd7565b606060006174ad61446a565b6040805160ff808252612000820190925291925060009190816020015b60608152602001906001900390816174ca57905050905060006040518060400160405280600381526020017f6e7078000000000000000000000000000000000000000000000000000000000081525082828061752590618f76565b935060ff168151811061753a5761753a618e09565b60200260200101819052506040518060400160405280600781526020017f5e312e33322e330000000000000000000000000000000000000000000000000081525060405160200161758b91906196f4565b6040516020818303038152906040528282806175a690618f76565b935060ff16815181106175bb576175bb618e09565b60200260200101819052506040518060400160405280600881526020017f76616c696461746500000000000000000000000000000000000000000000000081525082828061760890618f76565b935060ff168151811061761d5761761d618e09565b6020026020010181905250826040516020016176399190618ea4565b60405160208183030381529060405282828061765490618f76565b935060ff168151811061766957617669618e09565b60200260200101819052506040518060400160405280600a81526020017f2d2d636f6e7472616374000000000000000000000000000000000000000000008152508282806176b690618f76565b935060ff16815181106176cb576176cb618e09565b60200260200101819052506176e08784618051565b82826176eb81618f76565b935060ff168151811061770057617700618e09565b6020908102919091010152855151156177ac5760408051808201909152600b81527f2d2d7265666572656e63650000000000000000000000000000000000000000006020820152828261775281618f76565b935060ff168151811061776757617767618e09565b6020026020010181905250617780866000015184618051565b828261778b81618f76565b935060ff16815181106177a0576177a0618e09565b60200260200101819052505b85608001511561781a5760408051808201909152601881527f2d2d756e73616665536b697053746f72616765436865636b0000000000000000602082015282826177f581618f76565b935060ff168151811061780a5761780a618e09565b6020026020010181905250617880565b84156178805760408051808201909152601281527f2d2d726571756972655265666572656e636500000000000000000000000000006020820152828261785f81618f76565b935060ff168151811061787457617874618e09565b60200260200101819052505b6040860151511561791c5760408051808201909152600d81527f2d2d756e73616665416c6c6f7700000000000000000000000000000000000000602082015282826178ca81618f76565b935060ff16815181106178df576178df618e09565b602002602001018190525085604001518282806178fb90618f76565b935060ff168151811061791057617910618e09565b60200260200101819052505b8560600151156179865760408051808201909152601481527f2d2d756e73616665416c6c6f7752656e616d65730000000000000000000000006020820152828261796581618f76565b935060ff168151811061797a5761797a618e09565b60200260200101819052505b60008160ff1667ffffffffffffffff8111156179a4576179a4618843565b6040519080825280602002602001820160405280156179d757816020015b60608152602001906001900390816179c25790505b50905060005b8260ff168160ff161015617a3057838160ff1681518110617a0057617a00618e09565b6020026020010151828260ff1681518110617a1d57617a1d618e09565b60209081029190910101526001016179dd565b50979650505050505050565b6040805180820190915260008082526020820152815183511015617a61575081614074565b81518351602085015160009291617a7791619537565b617a819190618716565b60208401519091506001908214617aa2575082516020840151819020908220145b8015617abd57835185518690617ab9908390618716565b9052505b50929392505050565b6000808260000151617aea8560000151866020015186600001518760200151617e0c565b617af49190619537565b90505b83516020850151617b089190619537565b81116174315781617b1881619739565b9250508260000151617b4f856020015183617b339190618716565b8651617b3f9190618716565b8386600001518760200151617e0c565b617b599190619537565b9050617af7565b60606000617b6e8484617ac6565b617b79906001619537565b67ffffffffffffffff811115617b9157617b91618843565b604051908082528060200260200182016040528015617bc457816020015b6060815260200190600190039081617baf5790505b50905060005b8151811015615e3957617be061605b8686617412565b828281518110617bf257617bf2618e09565b6020908102919091010152600101617bca565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310617c4e577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310617c7a576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc100008310617c9857662386f26fc10000830492506010015b6305f5e1008310617cb0576305f5e100830492506008015b6127108310617cc457612710830492506004015b60648310617cd6576064830492506002015b600a83106140745760010192915050565b6000617cf38383618091565b159392505050565b600080858411617e025760208411617dae5760008415617d46576001617d22866020618716565b617d2d906008619753565b617d38906002619851565b617d429190618716565b1990505b8351811685617d558989619537565b617d5f9190618716565b805190935082165b818114617d9957878411617d815787945050505050615a6a565b83617d8b8161985d565b945050828451169050617d67565b617da38785619537565b945050505050615a6a565b838320617dbb8588618716565b617dc59087619537565b91505b858210617e0057848220808203617ded57617de38684619537565b9350505050615a6a565b617df8600184618716565b925050617dc8565b505b5092949350505050565b60008381868511617f175760208511617ec65760008515617e58576001617e34876020618716565b617e3f906008619753565b617e4a906002619851565b617e549190618716565b1990505b84518116600087617e698b8b619537565b617e739190618716565b855190915083165b828114617eb857818610617ea057617e938b8b619537565b9650505050505050615a6a565b85617eaa81619739565b965050838651169050617e7b565b859650505050505050615a6a565b508383206000905b617ed88689618716565b8211617f1557858320808203617ef45783945050505050615a6a565b617eff600185619537565b9350508180617f0d90619739565b925050617ece565b505b617f218787619537565b979650505050505050565b60408051808201909152600080825260208201526000617f5e8560000151866020015186600001518760200151617e0c565b602080870180519186019190915251909150617f7a9082618716565b835284516020860151617f8d9190619537565b8103617f9c5760008552617fce565b83518351617faa9190619537565b85518690617fb9908390618716565b9052508351617fc89082619537565b60208601525b50909392505050565b6020811061800f5781518352617fee602084619537565b9250617ffb602083619537565b9150618008602082618716565b9050617fd7565b600019811561803e576001618025836020618716565b61803190610100619851565b61803b9190618716565b90505b9151835183169219169190911790915250565b6060600061805f848461453d565b805160208083015160405193945061807993909101619874565b60405160208183030381529060405291505092915050565b81518151600091908111156180a4575081515b6020808501519084015160005b8381101561815d578251825180821461812d57600019602087101561810c576001846180de896020618716565b6180e89190619537565b6180f3906008619753565b6180fe906002619851565b6181089190618716565b1990505b818116838216818103911461812a5797506140749650505050505050565b50505b618138602086619537565b9450618145602085619537565b935050506020816181569190619537565b90506180b1565b5084518651614beb91906198cc565b610c9f806198ed83390190565b6116fe8061a58c83390190565b6116638061bc8a83390190565b610d5e8061d2ed83390190565b6040518060e001604052806060815260200160608152602001606081526020016000151581526020016000151581526020016000151581526020016181e36181e8565b905290565b604051806101000160405280600015158152602001600015158152602001606081526020016000801916815260200160608152602001606081526020016000151581526020016181e36040518060800160405280600081526020016000815260200160008152602001600081525090565b602080825282518282018190526000918401906040840190835b8181101561829a5783516001600160a01b0316835260209384019390920191600101618273565b509095945050505050565b60005b838110156182c05781810151838201526020016182a8565b50506000910152565b600081518084526182e18160208601602086016182a5565b601f01601f19169290920160200192915050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b828110156183f1577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452815180516001600160a01b03168652602090810151604082880181905281519088018190529101906060600582901b88018101919088019060005b818110156183d7577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa08a85030183526183c18486516182c9565b6020958601959094509290920191600101618387565b50919750505060209485019492909201915060010161831d565b50929695505050505050565b600081518084526020840193506020830160005b828110156184515781517fffffffff0000000000000000000000000000000000000000000000000000000016865260209586019590910190600101618411565b5093949350505050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b828110156183f1577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc087860301845281518051604087526184c760408801826182c9565b90506020820151915086810360208801526184e281836183fd565b965050506020938401939190910190600101618483565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b828110156183f1577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc087860301845261855b8583516182c9565b94506020938401939190910190600101618521565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b828110156183f1577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc087860301845281516001600160a01b03815116865260208101519050604060208701526185f160408701826183fd565b9550506020938401939190910190600101618598565b600181811c9082168061861b57607f821691505b602082108103616336577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006020828403121561866657600080fd5b5051919050565b6001600160a01b038416815282602082015260606040820152600061631c60608301846182c9565b828152604060208201526000615a6a60408301846182c9565b6001600160a01b03851681528360208201526080604082015260006186d660808301856182c9565b905082606083015295945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b81810381811115614074576140746186e7565b60208152600061416d60208301846182c9565b600082618772577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b6001600160a01b0383168152604060208201526000615a6a60408301846182c9565b7f4661696c656420746f206465706c6f7920636f6e7472616374200000000000008152600083516187d181601a8501602088016182a5565b7f3a20000000000000000000000000000000000000000000000000000000000000601a91840191820152835161880e81601c8401602088016182a5565b01601c01949350505050565b60006020828403121561882c57600080fd5b81516001600160a01b038116811461416d57600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040516060810167ffffffffffffffff8111828210171561889557618895618843565b60405290565b60008067ffffffffffffffff8411156188b6576188b6618843565b50604051601f19601f85018116603f0116810181811067ffffffffffffffff821117156188e5576188e5618843565b6040528381529050808284018510156188fd57600080fd5b615e398460208301856182a5565b600082601f83011261891c57600080fd5b61416d8383516020850161889b565b60006020828403121561893d57600080fd5b815167ffffffffffffffff81111561895457600080fd5b6140708482850161890b565b600083516189728184602088016182a5565b8351908301906189868183602088016182a5565b01949350505050565b7f4661696c656420746f206465706c6f7920636f6e7472616374200000000000008152600083516189c781601a8501602088016182a5565b7f207573696e6720636f6e7374727563746f722064617461202200000000000000601a918401918201528351618a048160338401602088016182a5565b7f220000000000000000000000000000000000000000000000000000000000000060339290910191820152603401949350505050565b60408152600b60408201527f464f554e4452595f4f5554000000000000000000000000000000000000000000606082015260806020820152600061416d60808301846182c9565b600060208284031215618a9357600080fd5b815167ffffffffffffffff811115618aaa57600080fd5b8201601f81018413618abb57600080fd5b6140708482516020840161889b565b60008551618adc818460208a016182a5565b7f2f000000000000000000000000000000000000000000000000000000000000009083019081528551618b16816001840160208a016182a5565b7f2f00000000000000000000000000000000000000000000000000000000000000600192909101918201528451618b548160028401602089016182a5565b6001818301019150507f2f0000000000000000000000000000000000000000000000000000000000000060018201528351618b968160028401602088016182a5565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600292909101918201526007019695505050505050565b604081526000618be160408301846182c9565b8281036020840152600481527f2e6173740000000000000000000000000000000000000000000000000000000060208201526040810191505092915050565b600060208284031215618c3257600080fd5b8151801515811461416d57600080fd5b7f436f756c64206e6f742066696e642041535420696e2061727469666163742000815260008251618c7a81601f8501602087016182a5565b7f2e205365742060617374203d20747275656020696e20666f756e6472792e746f601f9390910192830152507f6d6c000000000000000000000000000000000000000000000000000000000000603f820152604101919050565b604081526000618ce760408301846182c9565b8281036020840152601181527f2e6173742e6162736f6c7574655061746800000000000000000000000000000060208201526040810191505092915050565b604081526000618d3960408301846182c9565b8281036020840152600c81527f2e6173742e6c6963656e7365000000000000000000000000000000000000000060208201526040810191505092915050565b7f2e6d657461646174612e736f75726365732e5b27000000000000000000000000815260008251618db08160148501602087016182a5565b7f275d2e6b656363616b32353600000000000000000000000000000000000000006014939091019283015250602001919050565b604081526000618df760408301856182c9565b828103602084015261416981856182c9565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f2200000000000000000000000000000000000000000000000000000000000000815260008251618e708160018501602087016182a5565b7f22000000000000000000000000000000000000000000000000000000000000006001939091019283015250600201919050565b60008251618eb68184602087016182a5565b7f2f6275696c642d696e666f000000000000000000000000000000000000000000920191825250600b01919050565b7f436f756c64206e6f742066696e64206275696c642d696e666f2066696c65207781527f697468206d61746368696e6720736f7572636520636f6465206861736820666f60208201527f7220636f6e747261637420000000000000000000000000000000000000000000604082015260008251618f6981604b8501602087016182a5565b91909101604b0192915050565b600060ff821660ff8103618f8c57618f8c6186e7565b60010192915050565b7f406f70656e7a657070656c696e2f646566656e6465722d6465706c6f792d636c81527f69656e742d636c69400000000000000000000000000000000000000000000000602082015260008251618ff38160298501602087016182a5565b9190910160290192915050565b60408152601660408201527f4f50454e5a455050454c494e5f424153485f5041544800000000000000000000606082015260806020820152600061416d60808301846182c9565b60006020828403121561905957600080fd5b815167ffffffffffffffff81111561907057600080fd5b82016060818503121561908257600080fd5b61908a618872565b81518060030b811461909b57600080fd5b8152602082015167ffffffffffffffff8111156190b757600080fd5b6190c38682850161890b565b602083015250604082015167ffffffffffffffff8111156190e357600080fd5b6190ef8682850161890b565b604083015250949350505050565b7f4661696c656420746f2072756e206261736820636f6d6d616e6420776974682081527f220000000000000000000000000000000000000000000000000000000000000060208201526000825161915b8160218501602087016182a5565b7f222e20496620796f7520617265207573696e672057696e646f77732c2073657460219390910192830152507f20746865204f50454e5a455050454c494e5f424153485f5041544820656e766960418201527f726f6e6d656e74207661726961626c6520746f207468652066756c6c7920717560618201527f616c69666965642070617468206f66207468652062617368206578656375746160818201527f626c652e20466f72206578616d706c652c20696620796f75206172652075736960a18201527f6e672047697420666f722057696e646f77732c206164642074686520666f6c6c60c18201527f6f77696e67206c696e6520696e20746865202e656e762066696c65206f66207960e18201527f6f75722070726f6a65637420287573696e6720666f727761726420736c6173686101018201527f6573293a0a4f50454e5a455050454c494e5f424153485f504154483d22433a2f6101218201527f50726f6772616d2046696c65732f4769742f62696e2f6261736822000000000061014182015261015c01919050565b7f4661696c656420746f2066696e64206c696e652077697468207072656669782081527f27000000000000000000000000000000000000000000000000000000000000006020820152600083516193478160218501602088016182a5565b7f2720696e206f75747075743a2000000000000000000000000000000000000000602191840191820152835161938481602e8401602088016182a5565b01602e01949350505050565b7f4661696c656420746f2072756e2075706772616465207361666574792076616c81527f69646174696f6e3a200000000000000000000000000000000000000000000000602082015260008251618ff38160298501602087016182a5565b7f55706772616465207361666574792076616c69646174696f6e206661696c656481527f3a0a00000000000000000000000000000000000000000000000000000000000060208201526000825161944c8160228501602087016182a5565b9190910160220192915050565b7f436f6e7472616374206e616d652000000000000000000000000000000000000081526000825161949181600e8501602087016182a5565b7f206d75737420626520696e2074686520666f726d6174204d79436f6e74726163600e9390910192830152507f742e736f6c3a4d79436f6e7472616374206f72204d79436f6e74726163742e73602e8201527f6f6c206f72206f75742f4d79436f6e74726163742e736f6c2f4d79436f6e7472604e8201527f6163742e6a736f6e000000000000000000000000000000000000000000000000606e820152607601919050565b80820180821115614074576140746186e7565b7f53504458206c6963656e7365206964656e7469666965722000000000000000008152600083516195828160188501602088016182a5565b7f20696e200000000000000000000000000000000000000000000000000000000060189184019182015283516195bf81601c8401602088016182a5565b7f20646f6573206e6f74206c6f6f6b206c696b65206120737570706f7274656420601c92909101918201527f6c6963656e736520666f7220626c6f636b206578706c6f726572207665726966603c8201527f69636174696f6e2e205573652074686520606c6963656e73655479706560206f605c8201527f7074696f6e20746f20737065636966792061206c6963656e736520747970652c607c8201527f206f7220736574207468652060736b69704c6963656e73655479706560206f70609c8201527f74696f6e20746f2060747275656020746f20736b69702e00000000000000000060bc82015260d301949350505050565b600082516196c58184602087016182a5565b7f2000000000000000000000000000000000000000000000000000000000000000920191825250600101919050565b7f406f70656e7a657070656c696e2f75706772616465732d636f7265400000000081526000825161972c81601c8501602087016182a5565b91909101601c0192915050565b6000600019820361974c5761974c6186e7565b5060010190565b8082028115828204841417614074576140746186e7565b6001815b60018411156197a557808504811115619789576197896186e7565b600184161561979757908102905b60019390931c92800261976e565b935093915050565b6000826197bc57506001614074565b816197c957506000614074565b81600181146197df57600281146197e957619805565b6001915050614074565b60ff8411156197fa576197fa6186e7565b50506001821b614074565b5060208310610133831016604e8410600b8410161715619828575081810a614074565b619835600019848461976a565b8060001904821115619849576198496186e7565b029392505050565b600061416d83836197ad565b60008161986c5761986c6186e7565b506000190190565b600083516198868184602088016182a5565b7f3a0000000000000000000000000000000000000000000000000000000000000090830190815283516198c08160018401602088016182a5565b01600101949350505050565b8181036000831280158383131683831282161715617431576174316186e756fe608060405234801561001057600080fd5b50604051610c9f380380610c9f83398101604081905261002f9161010d565b8181600361003d83826101ff565b50600461004a82826101ff565b50505050506102bd565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261007b57600080fd5b81516001600160401b0381111561009457610094610054565b604051601f8201601f19908116603f011681016001600160401b03811182821017156100c2576100c2610054565b6040528181528382016020018510156100da57600080fd5b60005b828110156100f9576020818601810151838301820152016100dd565b506000918101602001919091529392505050565b6000806040838503121561012057600080fd5b82516001600160401b0381111561013657600080fd5b6101428582860161006a565b602085015190935090506001600160401b0381111561016057600080fd5b61016c8582860161006a565b9150509250929050565b600181811c9082168061018a57607f821691505b6020821081036101aa57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156101fa57806000526020600020601f840160051c810160208510156101d75750805b601f840160051c820191505b818110156101f757600081556001016101e3565b50505b505050565b81516001600160401b0381111561021857610218610054565b61022c816102268454610176565b846101b0565b6020601f82116001811461026057600083156102485750848201515b600019600385901b1c1916600184901b1784556101f7565b600084815260208120601f198516915b828110156102905787850151825560209485019460019092019101610270565b50848210156102ae5786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b6109d3806102cc6000396000f3fe608060405234801561001057600080fd5b50600436106100be5760003560e01c806340c10f191161007657806395d89b411161005b57806395d89b4114610183578063a9059cbb1461018b578063dd62ed3e1461019e57600080fd5b806340c10f191461013857806370a082311461014d57600080fd5b806318160ddd116100a757806318160ddd1461010457806323b872dd14610116578063313ce5671461012957600080fd5b806306fdde03146100c3578063095ea7b3146100e1575b600080fd5b6100cb6101e4565b6040516100d891906107bf565b60405180910390f35b6100f46100ef366004610854565b610276565b60405190151581526020016100d8565b6002545b6040519081526020016100d8565b6100f461012436600461087e565b610290565b604051601281526020016100d8565b61014b610146366004610854565b6102b4565b005b61010861015b3660046108bb565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6100cb6102c2565b6100f4610199366004610854565b6102d1565b6101086101ac3660046108dd565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6060600380546101f390610910565b80601f016020809104026020016040519081016040528092919081815260200182805461021f90610910565b801561026c5780601f106102415761010080835404028352916020019161026c565b820191906000526020600020905b81548152906001019060200180831161024f57829003601f168201915b5050505050905090565b6000336102848185856102df565b60019150505b92915050565b60003361029e8582856102f1565b6102a98585856103c5565b506001949350505050565b6102be8282610470565b5050565b6060600480546101f390610910565b6000336102848185856103c5565b6102ec83838360016104cc565b505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146103bf57818110156103b0576040517ffb8f41b200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416600482015260248101829052604481018390526064015b60405180910390fd5b6103bf848484840360006104cc565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8316610415576040517f96c6fd1e000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff8216610465576040517fec442f05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b6102ec838383610614565b73ffffffffffffffffffffffffffffffffffffffff82166104c0576040517fec442f05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b6102be60008383610614565b73ffffffffffffffffffffffffffffffffffffffff841661051c576040517fe602df05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff831661056c576040517f94280d62000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260016020908152604080832093871683529290522082905580156103bf578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161060691815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff831661064c5780600260008282546106419190610963565b909155506106fe9050565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260208190526040902054818110156106d2576040517fe450d38c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8516600482015260248101829052604481018390526064016103a7565b73ffffffffffffffffffffffffffffffffffffffff841660009081526020819052604090209082900390555b73ffffffffffffffffffffffffffffffffffffffff821661072757600280548290039055610753565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090208054820190555b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516107b291815260200190565b60405180910390a3505050565b602081526000825180602084015260005b818110156107ed57602081860181015160408684010152016107d0565b5060006040828501015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011684010191505092915050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461084f57600080fd5b919050565b6000806040838503121561086757600080fd5b6108708361082b565b946020939093013593505050565b60008060006060848603121561089357600080fd5b61089c8461082b565b92506108aa6020850161082b565b929592945050506040919091013590565b6000602082840312156108cd57600080fd5b6108d68261082b565b9392505050565b600080604083850312156108f057600080fd5b6108f98361082b565b91506109076020840161082b565b90509250929050565b600181811c9082168061092457607f821691505b60208210810361095d577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b8082018082111561028a577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea26469706673582212207e804ca539d49155d2b6bc19268ce22f9f857027c75247d69fb0d56a089c93d464736f6c634300081a003360a060405234801561001057600080fd5b506040516116fe3803806116fe83398101604081905261002f916101e5565b60016000556002805460ff191690556001600160a01b038316158061005b57506001600160a01b038216155b8061006d57506001600160a01b038116155b1561008b5760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b0383166080526100a3600082610134565b506100ce7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a82610134565b506100f97f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e483610134565b506101126000805160206116de83398151915282610134565b5061012b6000805160206116de83398151915283610134565b50505050610228565b60008281526001602090815260408083206001600160a01b038516845290915281205460ff166101bf5760008381526001602081815260408084206001600160a01b0387168086529252808420805460ff19169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45060016101c3565b5060005b92915050565b80516001600160a01b03811681146101e057600080fd5b919050565b6000806000606084860312156101fa57600080fd5b610203846101c9565b9250610211602085016101c9565b915061021f604085016101c9565b90509250925092565b60805161147f61025f6000396000818161019e0152818161050001528181610562015281816108f70152610959015261147f6000f3fe608060405234801561001057600080fd5b506004361061016c5760003560e01c806385f438c1116100cd578063c8a0236211610081578063d936547e11610066578063d936547e14610355578063d9caed1214610378578063e63ab1e91461038b57600080fd5b8063c8a023621461032f578063d547741f1461034257600080fd5b80639a590427116100b25780639a590427146103015780639b19251a14610314578063a217fddf1461032757600080fd5b806385f438c11461029457806391d14854146102bb57600080fd5b806336568abe11610124578063570618e111610109578063570618e11461025a5780635c975abb146102815780638456cb591461028c57600080fd5b806336568abe1461023f5780633f4ba83a1461025257600080fd5b806321fc65f21161015557806321fc65f2146101e5578063248a9ca3146101fa5780632f2ff15d1461022c57600080fd5b806301ffc9a714610171578063116191b614610199575b600080fd5b61018461017f36600461118a565b6103b2565b60405190151581526020015b60405180910390f35b6101c07f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610190565b6101f86101f33660046111f5565b61044b565b005b61021e610208366004611292565b6000908152600160208190526040909120015490565b604051908152602001610190565b6101f861023a3660046112ab565b61064c565b6101f861024d3660046112ab565b610678565b6101f86106d6565b61021e7f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a81565b60025460ff16610184565b6101f861070b565b61021e7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b6101846102c93660046112ab565b600091825260016020908152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b6101f861030f3660046112d7565b61073d565b6101f86103223660046112d7565b6107be565b61021e600081565b6101f861033d3660046111f5565b610842565b6101f86103503660046112ab565b610a29565b6101846103633660046112d7565b60036020526000908152604090205460ff1681565b6101f86103863660046112f2565b610a4f565b61021e7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061044557507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b610453610b7b565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461047d81610bbe565b610485610bc8565b73ffffffffffffffffffffffffffffffffffffffff861660009081526003602052604090205460ff166104e4576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61052573ffffffffffffffffffffffffffffffffffffffff87167f000000000000000000000000000000000000000000000000000000000000000086610c07565b6040517f5131ab5900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690635131ab599061059f9089908990899089908990600401611378565b600060405180830381600087803b1580156105b957600080fd5b505af11580156105cd573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167f85b5be9cf454e05e0bddf49315178102227c312078eefa3c00294fb4d912ae4e868686604051610632939291906113d5565b60405180910390a3506106456001600055565b5050505050565b6000828152600160208190526040909120015461066881610bbe565b6106728383610c94565b50505050565b73ffffffffffffffffffffffffffffffffffffffff811633146106c7576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6106d18282610d41565b505050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61070081610bbe565b610708610de2565b50565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61073581610bbe565b610708610e41565b7f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a61076781610bbe565b73ffffffffffffffffffffffffffffffffffffffff8216600081815260036020526040808220805460ff19169055517f51085ddf9ebdded84b76e829eb58c4078e4b5bdf97d9a94723f336039da467919190a25050565b7f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a6107e881610bbe565b73ffffffffffffffffffffffffffffffffffffffff8216600081815260036020526040808220805460ff19166001179055517faab7954e9d246b167ef88aeddad35209ca2489d95a8aeb59e288d9b19fae5a549190a25050565b61084a610b7b565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461087481610bbe565b61087c610bc8565b73ffffffffffffffffffffffffffffffffffffffff861660009081526003602052604090205460ff166108db576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61091c73ffffffffffffffffffffffffffffffffffffffff87167f000000000000000000000000000000000000000000000000000000000000000086610c07565b6040517fb8969bd400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063b8969bd4906109969089908990899089908990600401611378565b600060405180830381600087803b1580156109b057600080fd5b505af11580156109c4573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fb9d4efa96044e5f5e03e696fa9ae2ff66911cc27e8a637c3627c75bc5b2241c8868686604051610632939291906113d5565b60008281526001602081905260409091200154610a4581610bbe565b6106728383610d41565b610a57610b7b565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e4610a8181610bbe565b610a89610bc8565b73ffffffffffffffffffffffffffffffffffffffff841660009081526003602052604090205460ff16610ae8576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610b0973ffffffffffffffffffffffffffffffffffffffff85168484610c07565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f9b1bfa7fa9ee420a16e124f794c35ac9f90472acc99140eb2f6447c714cad8eb84604051610b6891815260200190565b60405180910390a3506106d16001600055565b600260005403610bb7576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b6107088133610e7e565b60025460ff1615610c05576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6040805173ffffffffffffffffffffffffffffffffffffffff8416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb000000000000000000000000000000000000000000000000000000001790526106d1908490610f0f565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff16610d3957600083815260016020818152604080842073ffffffffffffffffffffffffffffffffffffffff87168086529252808420805460ff19169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a4506001610445565b506000610445565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff1615610d3957600083815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff86168085529252808320805460ff1916905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a4506001610445565b610dea610fa5565b6002805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b610e49610bc8565b6002805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258610e173390565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16610f0b576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82166004820152602481018390526044015b60405180910390fd5b5050565b6000610f3173ffffffffffffffffffffffffffffffffffffffff841683610fe1565b90508051600014158015610f56575080806020019051810190610f5491906113f8565b155b156106d1576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84166004820152602401610f02565b60025460ff16610c05576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6060610fef83836000610ff6565b9392505050565b606081471015611034576040517fcd786059000000000000000000000000000000000000000000000000000000008152306004820152602401610f02565b6000808573ffffffffffffffffffffffffffffffffffffffff16848660405161105d919061141a565b60006040518083038185875af1925050503d806000811461109a576040519150601f19603f3d011682016040523d82523d6000602084013e61109f565b606091505b50915091506110af8683836110b9565b9695505050505050565b6060826110ce576110c982611148565b610fef565b81511580156110f2575073ffffffffffffffffffffffffffffffffffffffff84163b155b15611141576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85166004820152602401610f02565b5080610fef565b8051156111585780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006020828403121561119c57600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610fef57600080fd5b803573ffffffffffffffffffffffffffffffffffffffff811681146111f057600080fd5b919050565b60008060008060006080868803121561120d57600080fd5b611216866111cc565b9450611224602087016111cc565b935060408601359250606086013567ffffffffffffffff81111561124757600080fd5b8601601f8101881361125857600080fd5b803567ffffffffffffffff81111561126f57600080fd5b88602082840101111561128157600080fd5b959894975092955050506020019190565b6000602082840312156112a457600080fd5b5035919050565b600080604083850312156112be57600080fd5b823591506112ce602084016111cc565b90509250929050565b6000602082840312156112e957600080fd5b610fef826111cc565b60008060006060848603121561130757600080fd5b611310846111cc565b925061131e602085016111cc565b929592945050506040919091013590565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff8616815273ffffffffffffffffffffffffffffffffffffffff851660208201528360408201526080606082015260006113ca60808301848661132f565b979650505050505050565b8381526040602082015260006113ef60408301848661132f565b95945050505050565b60006020828403121561140a57600080fd5b81518015158114610fef57600080fd5b6000825160005b8181101561143b5760208186018101518583015201611421565b50600092019182525091905056fea2646970667358221220dc54ce548a1f0bf8ba5e86cc53c6d822e55eee543451395733c659359bac8dd164736f6c634300081a00338619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a60c060405234801561001057600080fd5b5060405161166338038061166383398101604081905261002f9161021a565b60016000819055805460ff19169055838383836001600160a01b038416158061005f57506001600160a01b038316155b8061007157506001600160a01b038216155b8061008357506001600160a01b038116155b156100a15760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b03808516608052831660a0526100bf60008261014e565b506100ea7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e48361014e565b506101157f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb8361014e565b506101407f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a8261014e565b50505050505050505061026e565b60008281526002602090815260408083206001600160a01b038516845290915281205460ff166101f45760008381526002602090815260408083206001600160a01b03861684529091529020805460ff191660011790556101ac3390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45060016101f8565b5060005b92915050565b80516001600160a01b038116811461021557600080fd5b919050565b6000806000806080858703121561023057600080fd5b610239856101fe565b9350610247602086016101fe565b9250610255604086016101fe565b9150610263606086016101fe565b905092959194509250565b60805160a05161138a6102d9600039600081816101f701528181610474015281816105250152818161063f015281816107d30152818161088401526109520152600081816101ab01528181610496015281816104f8015281816107f50152610857015261138a6000f3fe608060405234801561001057600080fd5b50600436106101515760003560e01c80635c975abb116100cd57806391d1485411610081578063a783c78911610066578063a783c78914610326578063d547741f1461034d578063e63ab1e91461036057600080fd5b806391d14854146102d8578063a217fddf1461031e57600080fd5b8063743e0c9b116100b2578063743e0c9b146102965780638456cb59146102a957806385f438c1146102b157600080fd5b80635c975abb146102785780635e3e9fef1461028357600080fd5b806321e093b1116101245780632f2ff15d116101095780632f2ff15d1461024a57806336568abe1461025d5780633f4ba83a1461027057600080fd5b806321e093b1146101f2578063248a9ca31461021957600080fd5b806301ffc9a71461015657806302d5c8991461017e578063106e629014610193578063116191b6146101a6575b600080fd5b6101696101643660046110c5565b610387565b60405190151581526020015b60405180910390f35b61019161018c366004611130565b610420565b005b6101916101a13660046111c2565b6105eb565b6101cd7f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610175565b6101cd7f000000000000000000000000000000000000000000000000000000000000000081565b61023c6102273660046111f5565b60009081526002602052604090206001015490565b604051908152602001610175565b61019161025836600461120e565b6106c6565b61019161026b36600461120e565b6106f1565b61019161074a565b60015460ff16610169565b610191610291366004611130565b61077f565b6101916102a43660046111f5565b610930565b61019161097a565b61023c7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b6101696102e636600461120e565b600091825260026020908152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b61023c600081565b61023c7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb81565b61019161035b36600461120e565b6109ac565b61023c7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061041a57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b6104286109d1565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461045281610a14565b61045a610a1e565b6104bb73ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000167f000000000000000000000000000000000000000000000000000000000000000087610a5d565b6040517fb8969bd400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063b8969bd490610555907f0000000000000000000000000000000000000000000000000000000000000000908a908a908a908a90600401611283565b600060405180830381600087803b15801561056f57600080fd5b505af1158015610583573d6000803e3d6000fd5b505050508573ffffffffffffffffffffffffffffffffffffffff167fba96f26bdda53eb8c8ba39045dfb4ff39753fbc7a6edcf250a88e75e78d102fe8686866040516105d1939291906112e0565b60405180910390a2506105e46001600055565b5050505050565b6105f36109d1565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461061d81610a14565b610625610a1e565b61066673ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168585610a5d565b8373ffffffffffffffffffffffffffffffffffffffff167f884edad9ce6fa2440d8a54cc123490eb96d2768479d49ff9c7366125a9424364846040516106ae91815260200190565b60405180910390a2506106c16001600055565b505050565b6000828152600260205260409020600101546106e181610a14565b6106eb8383610ade565b50505050565b73ffffffffffffffffffffffffffffffffffffffff81163314610740576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6106c18282610bde565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61077481610a14565b61077c610c9d565b50565b6107876109d1565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e46107b181610a14565b6107b9610a1e565b61081a73ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000167f000000000000000000000000000000000000000000000000000000000000000087610a5d565b6040517f5131ab5900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690635131ab59906108b4907f0000000000000000000000000000000000000000000000000000000000000000908a908a908a908a90600401611283565b600060405180830381600087803b1580156108ce57600080fd5b505af11580156108e2573d6000803e3d6000fd5b505050508573ffffffffffffffffffffffffffffffffffffffff167f7772f56296d3a5202974a45c61c9188d844ab4d6eeb18c851e4b8d5384ca6ced8686866040516105d1939291906112e0565b610938610a1e565b61077c73ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016333084610d1a565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a6109a481610a14565b61077c610d60565b6000828152600260205260409020600101546109c781610a14565b6106eb8383610bde565b600260005403610a0d576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b61077c8133610db9565b60015460ff1615610a5b576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b60405173ffffffffffffffffffffffffffffffffffffffff8381166024830152604482018390526106c191859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050610e4a565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff16610bd657600083815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff86168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055610b743390565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a450600161041a565b50600061041a565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff1615610bd657600083815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8616808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a450600161041a565b610ca5610ee0565b600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b60405173ffffffffffffffffffffffffffffffffffffffff84811660248301528381166044830152606482018390526106eb9186918216906323b872dd90608401610a97565b610d68610a1e565b600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016811790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25833610cf0565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16610e46576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82166004820152602481018390526044015b60405180910390fd5b5050565b6000610e6c73ffffffffffffffffffffffffffffffffffffffff841683610f1c565b90508051600014158015610e91575080806020019051810190610e8f9190611303565b155b156106c1576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84166004820152602401610e3d565b60015460ff16610a5b576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6060610f2a83836000610f31565b9392505050565b606081471015610f6f576040517fcd786059000000000000000000000000000000000000000000000000000000008152306004820152602401610e3d565b6000808573ffffffffffffffffffffffffffffffffffffffff168486604051610f989190611325565b60006040518083038185875af1925050503d8060008114610fd5576040519150601f19603f3d011682016040523d82523d6000602084013e610fda565b606091505b5091509150610fea868383610ff4565b9695505050505050565b6060826110095761100482611083565b610f2a565b815115801561102d575073ffffffffffffffffffffffffffffffffffffffff84163b155b1561107c576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85166004820152602401610e3d565b5080610f2a565b8051156110935780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000602082840312156110d757600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610f2a57600080fd5b803573ffffffffffffffffffffffffffffffffffffffff8116811461112b57600080fd5b919050565b60008060008060006080868803121561114857600080fd5b61115186611107565b945060208601359350604086013567ffffffffffffffff81111561117457600080fd5b8601601f8101881361118557600080fd5b803567ffffffffffffffff81111561119c57600080fd5b8860208284010111156111ae57600080fd5b959894975060200195606001359392505050565b6000806000606084860312156111d757600080fd5b6111e084611107565b95602085013595506040909401359392505050565b60006020828403121561120757600080fd5b5035919050565b6000806040838503121561122157600080fd5b8235915061123160208401611107565b90509250929050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff8616815273ffffffffffffffffffffffffffffffffffffffff851660208201528360408201526080606082015260006112d560808301848661123a565b979650505050505050565b8381526040602082015260006112fa60408301848661123a565b95945050505050565b60006020828403121561131557600080fd5b81518015158114610f2a57600080fd5b6000825160005b81811015611346576020818601810151858301520161132c565b50600092019182525091905056fea264697066735822122055d09557e5c9ebfe94b17ac42f0790bf256cf4c257e31c46bc4dbb126e31fe1964736f6c634300081a00336080604052348015600f57600080fd5b506001600055610d3a806100246000396000f3fe6080604052600436106100635760003560e01c8063c513169111610040578063c5131691146100c1578063e04d4f97146100e1578063f05b6abf146100f457005b8063357fc5a21461006c5780636ed701691461008c5780638fcaa0b5146100a157005b3661006a57005b005b34801561007857600080fd5b5061006a6100873660046106c0565b610114565b34801561009857600080fd5b5061006a6101aa565b3480156100ad57600080fd5b5061006a6100bc3660046106fc565b6101df565b3480156100cd57600080fd5b5061006a6100dc3660046106c0565b61021e565b61006a6100ef366004610895565b6102f9565b34801561010057600080fd5b5061006a61010f366004610981565b61033d565b61011c610372565b61013e73ffffffffffffffffffffffffffffffffffffffff83163383866103b5565b604080513381526020810185905273ffffffffffffffffffffffffffffffffffffffff848116828401528316606082015290517f2b58128f24a9f59127cc5b5430d70542b22220f2d9adaa86e442b816ab98af609181900360800190a16101a56001600055565b505050565b6040513381527fbcaadb46b82a48af60b608f58959ae6b8310d1b0a0d094c2e9ec3208ed39f2a09060200160405180910390a1565b7f0d3f65f00e631663aa85c96330b5c7a83bb29af3630c0063776f985edc3037aa33838360405161021293929190610a6b565b60405180910390a15050565b610226610372565b6000610233600285610ad5565b90508060000361026f576040517f1f2a200500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61029173ffffffffffffffffffffffffffffffffffffffff84163384846103b5565b604080513381526020810183905273ffffffffffffffffffffffffffffffffffffffff858116828401528416606082015290517f2b58128f24a9f59127cc5b5430d70542b22220f2d9adaa86e442b816ab98af609181900360800190a1506101a56001600055565b7f1f1ff1f5fb41346850b2f5c04e6c767e2f1c8a525c5c0c5cdb60cdf3ca5f62fa3334858585604051610330959493929190610b7e565b60405180910390a1505050565b7f74a53cd528a921fca7dbdee62f86819051d3cc98f214951f4238e8843f20b146338484846040516103309493929190610c08565b6002600054036103ae576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b6040805173ffffffffffffffffffffffffffffffffffffffff85811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd0000000000000000000000000000000000000000000000000000000017905261044a908590610450565b50505050565b600061047273ffffffffffffffffffffffffffffffffffffffff8416836104eb565b905080516000141580156104975750808060200190518101906104959190610ccb565b155b156101a5576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff841660048201526024015b60405180910390fd5b60606104f983836000610500565b9392505050565b60608147101561053e576040517fcd7860590000000000000000000000000000000000000000000000000000000081523060048201526024016104e2565b6000808573ffffffffffffffffffffffffffffffffffffffff1684866040516105679190610ce8565b60006040518083038185875af1925050503d80600081146105a4576040519150601f19603f3d011682016040523d82523d6000602084013e6105a9565b606091505b50915091506105b98683836105c3565b9695505050505050565b6060826105d8576105d382610652565b6104f9565b81511580156105fc575073ffffffffffffffffffffffffffffffffffffffff84163b155b1561064b576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff851660048201526024016104e2565b50806104f9565b8051156106625780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50565b803573ffffffffffffffffffffffffffffffffffffffff811681146106bb57600080fd5b919050565b6000806000606084860312156106d557600080fd5b833592506106e560208501610697565b91506106f360408501610697565b90509250925092565b6000806020838503121561070f57600080fd5b823567ffffffffffffffff81111561072657600080fd5b8301601f8101851361073757600080fd5b803567ffffffffffffffff81111561074e57600080fd5b85602082840101111561076057600080fd5b6020919091019590945092505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156107e6576107e6610770565b604052919050565b600082601f8301126107ff57600080fd5b813567ffffffffffffffff81111561081957610819610770565b61084a60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8401160161079f565b81815284602083860101111561085f57600080fd5b816020850160208301376000918101602001919091529392505050565b801515811461069457600080fd5b80356106bb8161087c565b6000806000606084860312156108aa57600080fd5b833567ffffffffffffffff8111156108c157600080fd5b6108cd868287016107ee565b9350506020840135915060408401356108e58161087c565b809150509250925092565b600067ffffffffffffffff82111561090a5761090a610770565b5060051b60200190565b600082601f83011261092557600080fd5b8135610938610933826108f0565b61079f565b8082825260208201915060208360051b86010192508583111561095a57600080fd5b602085015b8381101561097757803583526020928301920161095f565b5095945050505050565b60008060006060848603121561099657600080fd5b833567ffffffffffffffff8111156109ad57600080fd5b8401601f810186136109be57600080fd5b80356109cc610933826108f0565b8082825260208201915060208360051b8501019250888311156109ee57600080fd5b602084015b83811015610a3057803567ffffffffffffffff811115610a1257600080fd5b610a218b6020838901016107ee565b845250602092830192016109f3565b509550505050602084013567ffffffffffffffff811115610a5057600080fd5b610a5c86828701610914565b9250506106f36040850161088a565b73ffffffffffffffffffffffffffffffffffffffff8416815260406020820152816040820152818360608301376000818301606090810191909152601f9092017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016010192915050565b600082610b0b577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60005b83811015610b2b578181015183820152602001610b13565b50506000910152565b60008151808452610b4c816020860160208601610b10565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b73ffffffffffffffffffffffffffffffffffffffff8616815284602082015260a060408201526000610bb360a0830186610b34565b6060830194909452509015156080909101529392505050565b600081518084526020840193506020830160005b82811015610bfe578151865260209586019590910190600101610be0565b5093949350505050565b60006080820173ffffffffffffffffffffffffffffffffffffffff871683526080602084015280865180835260a08501915060a08160051b86010192506020880160005b82811015610c9b577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60878603018452610c86858351610b34565b94506020938401939190910190600101610c4c565b505050508281036040840152610cb18186610bcc565b915050610cc2606083018415159052565b95945050505050565b600060208284031215610cdd57600080fd5b81516104f98161087c565b60008251610cfa818460208701610b10565b919091019291505056fea2646970667358221220556072e1abafc3c4063b8cce832228b4f309b93726aaa6a6dfab20cb880c6d1864736f6c634300081a0033a26469706673582212203a68549b278af3497992869afa233a123bfd11b2258f45bd8ad63acebf04336b64736f6c634300081a0033", } // ZetaConnectorNativeTestABI is the input ABI used to generate the binding from. diff --git a/v2/pkg/zetaconnectornonnative.sol/zetaconnectornonnative.go b/v2/pkg/zetaconnectornonnative.sol/zetaconnectornonnative.go index c494b8b8..8fead4dd 100644 --- a/v2/pkg/zetaconnectornonnative.sol/zetaconnectornonnative.go +++ b/v2/pkg/zetaconnectornonnative.sol/zetaconnectornonnative.go @@ -32,7 +32,7 @@ var ( // ZetaConnectorNonNativeMetaData contains all meta data concerning the ZetaConnectorNonNative contract. var ZetaConnectorNonNativeMetaData = &bind.MetaData{ ABI: "[{\"type\":\"constructor\",\"inputs\":[{\"name\":\"gateway_\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"zetaToken_\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"tssAddress_\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"admin_\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"DEFAULT_ADMIN_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"PAUSER_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"TSS_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"WITHDRAWER_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"gateway\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIGatewayEVM\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getRoleAdmin\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"grantRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"hasRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"maxSupply\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"pause\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"paused\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"receiveTokens\",\"inputs\":[{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"renounceRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"callerConfirmation\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"revokeRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setMaxSupply\",\"inputs\":[{\"name\":\"maxSupply_\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"supportsInterface\",\"inputs\":[{\"name\":\"interfaceId\",\"type\":\"bytes4\",\"internalType\":\"bytes4\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"unpause\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"withdraw\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"internalSendHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"withdrawAndCall\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"internalSendHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"withdrawAndRevert\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"internalSendHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"zetaToken\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"event\",\"name\":\"MaxSupplyUpdated\",\"inputs\":[{\"name\":\"maxSupply\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Paused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleAdminChanged\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"previousAdminRole\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"newAdminRole\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleGranted\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleRevoked\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Unpaused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Withdraw\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"WithdrawAndCall\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"WithdrawAndRevert\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"AccessControlBadConfirmation\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"AccessControlUnauthorizedAccount\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"neededRole\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"type\":\"error\",\"name\":\"EnforcedPause\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ExceedsMaxSupply\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ExpectedPause\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ReentrancyGuardReentrantCall\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZeroAddress\",\"inputs\":[]}]", - Bin: "0x60c060405260001960035534801561001657600080fd5b5060405161155a38038061155a83398101604081905261003591610220565b60016000819055805460ff19169055838383836001600160a01b038416158061006557506001600160a01b038316155b8061007757506001600160a01b038216155b8061008957506001600160a01b038116155b156100a75760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b03808516608052831660a0526100c5600082610154565b506100f07f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e483610154565b5061011b7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb83610154565b506101467f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a82610154565b505050505050505050610274565b60008281526002602090815260408083206001600160a01b038516845290915281205460ff166101fa5760008381526002602090815260408083206001600160a01b03861684529091529020805460ff191660011790556101b23390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45060016101fe565b5060005b92915050565b80516001600160a01b038116811461021b57600080fd5b919050565b6000806000806080858703121561023657600080fd5b61023f85610204565b935061024d60208601610204565b925061025b60408601610204565b915061026960608601610204565b905092959194509250565b60805160a0516112826102d86000396000818161021d01528181610531015281816108240152818161097b01528181610ad00152610bf20152600081816101d1015281816104a1015281816105040152818161079401526107f701526112826000f3fe608060405234801561001057600080fd5b50600436106101775760003560e01c80635e3e9fef116100d857806391d148541161008c578063d547741f11610066578063d547741f14610386578063d5abeb0114610399578063e63ab1e9146103a257600080fd5b806391d1485414610311578063a217fddf14610357578063a783c7891461035f57600080fd5b8063743e0c9b116100bd578063743e0c9b146102cf5780638456cb59146102e257806385f438c1146102ea57600080fd5b80635e3e9fef146102a95780636f8b44b0146102bc57600080fd5b8063248a9ca31161012f57806336568abe1161011457806336568abe146102835780633f4ba83a146102965780635c975abb1461029e57600080fd5b8063248a9ca31461023f5780632f2ff15d1461027057600080fd5b8063106e629011610160578063106e6290146101b9578063116191b6146101cc57806321e093b11461021857600080fd5b806301ffc9a71461017c57806302d5c899146101a4575b600080fd5b61018f61018a366004610fb4565b6103c9565b60405190151581526020015b60405180910390f35b6101b76101b2366004611026565b610462565b005b6101b76101c73660046110b8565b6105f7565b6101f37f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161019b565b6101f37f000000000000000000000000000000000000000000000000000000000000000081565b61026261024d3660046110eb565b60009081526002602052604090206001015490565b60405190815260200161019b565b6101b761027e366004611104565b61069c565b6101b7610291366004611104565b6106c7565b6101b7610720565b60015460ff1661018f565b6101b76102b7366004611026565b610755565b6101b76102ca3660046110eb565b6108d0565b6101b76102dd3660046110eb565b61093e565b6101b76109e8565b6102627f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b61018f61031f366004611104565b600091825260026020908152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b610262600081565b6102627f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb81565b6101b7610394366004611104565b610a1a565b61026260035481565b6102627f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061045c57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b61046a610a3f565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461049481610a82565b61049c610a8c565b6104c77f00000000000000000000000000000000000000000000000000000000000000008684610acb565b6040517fb8969bd400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063b8969bd490610561907f0000000000000000000000000000000000000000000000000000000000000000908a908a908a908a90600401611179565b600060405180830381600087803b15801561057b57600080fd5b505af115801561058f573d6000803e3d6000fd5b505050508573ffffffffffffffffffffffffffffffffffffffff167fba96f26bdda53eb8c8ba39045dfb4ff39753fbc7a6edcf250a88e75e78d102fe8686866040516105dd939291906111d6565b60405180910390a2506105f06001600055565b5050505050565b6105ff610a3f565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461062981610a82565b610631610a8c565b61063c848484610acb565b8373ffffffffffffffffffffffffffffffffffffffff167f884edad9ce6fa2440d8a54cc123490eb96d2768479d49ff9c7366125a94243648460405161068491815260200190565b60405180910390a2506106976001600055565b505050565b6000828152600260205260409020600101546106b781610a82565b6106c18383610c53565b50505050565b73ffffffffffffffffffffffffffffffffffffffff81163314610716576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6106978282610d53565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61074a81610a82565b610752610e12565b50565b61075d610a3f565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461078781610a82565b61078f610a8c565b6107ba7f00000000000000000000000000000000000000000000000000000000000000008684610acb565b6040517f5131ab5900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690635131ab5990610854907f0000000000000000000000000000000000000000000000000000000000000000908a908a908a908a90600401611179565b600060405180830381600087803b15801561086e57600080fd5b505af1158015610882573d6000803e3d6000fd5b505050508573ffffffffffffffffffffffffffffffffffffffff167f7772f56296d3a5202974a45c61c9188d844ab4d6eeb18c851e4b8d5384ca6ced8686866040516105dd939291906111d6565b7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb6108fa81610a82565b610902610a8c565b60038290556040518281527f7810bd47de260c3e9ee10061cf438099dd12256c79485f12f94dbccc981e806c9060200160405180910390a15050565b610946610a8c565b6040517f79cc6790000000000000000000000000000000000000000000000000000000008152336004820152602481018290527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16906379cc679090604401600060405180830381600087803b1580156109d457600080fd5b505af11580156105f0573d6000803e3d6000fd5b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610a1281610a82565b610752610e8f565b600082815260026020526040902060010154610a3581610a82565b6106c18383610d53565b600260005403610a7b576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b6107528133610ee8565b60015460ff1615610ac9576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6003547f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b39573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b5d91906111f9565b610b679084611212565b1115610b9f576040517fc30436e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f1e458bee00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff848116600483015260248201849052604482018390527f00000000000000000000000000000000000000000000000000000000000000001690631e458bee90606401600060405180830381600087803b158015610c3657600080fd5b505af1158015610c4a573d6000803e3d6000fd5b50505050505050565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff16610d4b57600083815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff86168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055610ce93390565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a450600161045c565b50600061045c565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff1615610d4b57600083815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8616808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a450600161045c565b610e1a610f78565b600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b610e97610a8c565b600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016811790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25833610e65565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16610f74576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff821660048201526024810183905260440160405180910390fd5b5050565b60015460ff16610ac9576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060208284031215610fc657600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610ff657600080fd5b9392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461102157600080fd5b919050565b60008060008060006080868803121561103e57600080fd5b61104786610ffd565b945060208601359350604086013567ffffffffffffffff81111561106a57600080fd5b8601601f8101881361107b57600080fd5b803567ffffffffffffffff81111561109257600080fd5b8860208284010111156110a457600080fd5b959894975060200195606001359392505050565b6000806000606084860312156110cd57600080fd5b6110d684610ffd565b95602085013595506040909401359392505050565b6000602082840312156110fd57600080fd5b5035919050565b6000806040838503121561111757600080fd5b8235915061112760208401610ffd565b90509250929050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff8616815273ffffffffffffffffffffffffffffffffffffffff851660208201528360408201526080606082015260006111cb608083018486611130565b979650505050505050565b8381526040602082015260006111f0604083018486611130565b95945050505050565b60006020828403121561120b57600080fd5b5051919050565b8082018082111561045c577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea2646970667358221220f784eb6e1655c2988d3f762737188cfee07a61da1d5b8456cc4f4e55cb339cfb64736f6c634300081a0033", + Bin: "0x60c060405260001960035534801561001657600080fd5b5060405161155a38038061155a83398101604081905261003591610220565b60016000819055805460ff19169055838383836001600160a01b038416158061006557506001600160a01b038316155b8061007757506001600160a01b038216155b8061008957506001600160a01b038116155b156100a75760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b03808516608052831660a0526100c5600082610154565b506100f07f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e483610154565b5061011b7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb83610154565b506101467f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a82610154565b505050505050505050610274565b60008281526002602090815260408083206001600160a01b038516845290915281205460ff166101fa5760008381526002602090815260408083206001600160a01b03861684529091529020805460ff191660011790556101b23390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45060016101fe565b5060005b92915050565b80516001600160a01b038116811461021b57600080fd5b919050565b6000806000806080858703121561023657600080fd5b61023f85610204565b935061024d60208601610204565b925061025b60408601610204565b915061026960608601610204565b905092959194509250565b60805160a0516112826102d86000396000818161021d01528181610531015281816108240152818161097b01528181610ad00152610bf20152600081816101d1015281816104a1015281816105040152818161079401526107f701526112826000f3fe608060405234801561001057600080fd5b50600436106101775760003560e01c80635e3e9fef116100d857806391d148541161008c578063d547741f11610066578063d547741f14610386578063d5abeb0114610399578063e63ab1e9146103a257600080fd5b806391d1485414610311578063a217fddf14610357578063a783c7891461035f57600080fd5b8063743e0c9b116100bd578063743e0c9b146102cf5780638456cb59146102e257806385f438c1146102ea57600080fd5b80635e3e9fef146102a95780636f8b44b0146102bc57600080fd5b8063248a9ca31161012f57806336568abe1161011457806336568abe146102835780633f4ba83a146102965780635c975abb1461029e57600080fd5b8063248a9ca31461023f5780632f2ff15d1461027057600080fd5b8063106e629011610160578063106e6290146101b9578063116191b6146101cc57806321e093b11461021857600080fd5b806301ffc9a71461017c57806302d5c899146101a4575b600080fd5b61018f61018a366004610fb4565b6103c9565b60405190151581526020015b60405180910390f35b6101b76101b2366004611026565b610462565b005b6101b76101c73660046110b8565b6105f7565b6101f37f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161019b565b6101f37f000000000000000000000000000000000000000000000000000000000000000081565b61026261024d3660046110eb565b60009081526002602052604090206001015490565b60405190815260200161019b565b6101b761027e366004611104565b61069c565b6101b7610291366004611104565b6106c7565b6101b7610720565b60015460ff1661018f565b6101b76102b7366004611026565b610755565b6101b76102ca3660046110eb565b6108d0565b6101b76102dd3660046110eb565b61093e565b6101b76109e8565b6102627f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b61018f61031f366004611104565b600091825260026020908152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b610262600081565b6102627f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb81565b6101b7610394366004611104565b610a1a565b61026260035481565b6102627f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061045c57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b61046a610a3f565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461049481610a82565b61049c610a8c565b6104c77f00000000000000000000000000000000000000000000000000000000000000008684610acb565b6040517fb8969bd400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063b8969bd490610561907f0000000000000000000000000000000000000000000000000000000000000000908a908a908a908a90600401611179565b600060405180830381600087803b15801561057b57600080fd5b505af115801561058f573d6000803e3d6000fd5b505050508573ffffffffffffffffffffffffffffffffffffffff167fba96f26bdda53eb8c8ba39045dfb4ff39753fbc7a6edcf250a88e75e78d102fe8686866040516105dd939291906111d6565b60405180910390a2506105f06001600055565b5050505050565b6105ff610a3f565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461062981610a82565b610631610a8c565b61063c848484610acb565b8373ffffffffffffffffffffffffffffffffffffffff167f884edad9ce6fa2440d8a54cc123490eb96d2768479d49ff9c7366125a94243648460405161068491815260200190565b60405180910390a2506106976001600055565b505050565b6000828152600260205260409020600101546106b781610a82565b6106c18383610c53565b50505050565b73ffffffffffffffffffffffffffffffffffffffff81163314610716576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6106978282610d53565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61074a81610a82565b610752610e12565b50565b61075d610a3f565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461078781610a82565b61078f610a8c565b6107ba7f00000000000000000000000000000000000000000000000000000000000000008684610acb565b6040517f5131ab5900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690635131ab5990610854907f0000000000000000000000000000000000000000000000000000000000000000908a908a908a908a90600401611179565b600060405180830381600087803b15801561086e57600080fd5b505af1158015610882573d6000803e3d6000fd5b505050508573ffffffffffffffffffffffffffffffffffffffff167f7772f56296d3a5202974a45c61c9188d844ab4d6eeb18c851e4b8d5384ca6ced8686866040516105dd939291906111d6565b7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb6108fa81610a82565b610902610a8c565b60038290556040518281527f7810bd47de260c3e9ee10061cf438099dd12256c79485f12f94dbccc981e806c9060200160405180910390a15050565b610946610a8c565b6040517f79cc6790000000000000000000000000000000000000000000000000000000008152336004820152602481018290527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16906379cc679090604401600060405180830381600087803b1580156109d457600080fd5b505af11580156105f0573d6000803e3d6000fd5b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610a1281610a82565b610752610e8f565b600082815260026020526040902060010154610a3581610a82565b6106c18383610d53565b600260005403610a7b576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b6107528133610ee8565b60015460ff1615610ac9576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6003547f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b39573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b5d91906111f9565b610b679084611212565b1115610b9f576040517fc30436e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f1e458bee00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff848116600483015260248201849052604482018390527f00000000000000000000000000000000000000000000000000000000000000001690631e458bee90606401600060405180830381600087803b158015610c3657600080fd5b505af1158015610c4a573d6000803e3d6000fd5b50505050505050565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff16610d4b57600083815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff86168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055610ce93390565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a450600161045c565b50600061045c565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff1615610d4b57600083815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8616808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a450600161045c565b610e1a610f78565b600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b610e97610a8c565b600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016811790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25833610e65565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16610f74576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff821660048201526024810183905260440160405180910390fd5b5050565b60015460ff16610ac9576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060208284031215610fc657600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610ff657600080fd5b9392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461102157600080fd5b919050565b60008060008060006080868803121561103e57600080fd5b61104786610ffd565b945060208601359350604086013567ffffffffffffffff81111561106a57600080fd5b8601601f8101881361107b57600080fd5b803567ffffffffffffffff81111561109257600080fd5b8860208284010111156110a457600080fd5b959894975060200195606001359392505050565b6000806000606084860312156110cd57600080fd5b6110d684610ffd565b95602085013595506040909401359392505050565b6000602082840312156110fd57600080fd5b5035919050565b6000806040838503121561111757600080fd5b8235915061112760208401610ffd565b90509250929050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff8616815273ffffffffffffffffffffffffffffffffffffffff851660208201528360408201526080606082015260006111cb608083018486611130565b979650505050505050565b8381526040602082015260006111f0604083018486611130565b95945050505050565b60006020828403121561120b57600080fd5b5051919050565b8082018082111561045c577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea2646970667358221220de5fa55e0ca79ea2f08903481d01ea00bbbf346b9cfba44e12a2dd6f3a6f2e8a64736f6c634300081a0033", } // ZetaConnectorNonNativeABI is the input ABI used to generate the binding from. diff --git a/v2/pkg/zetaconnectornonnative.t.sol/zetaconnectornonnativetest.go b/v2/pkg/zetaconnectornonnative.t.sol/zetaconnectornonnativetest.go index 50e5b06e..6b3a0adb 100644 --- a/v2/pkg/zetaconnectornonnative.t.sol/zetaconnectornonnativetest.go +++ b/v2/pkg/zetaconnectornonnative.t.sol/zetaconnectornonnativetest.go @@ -49,8 +49,8 @@ type StdInvariantFuzzSelector struct { // ZetaConnectorNonNativeTestMetaData contains all meta data concerning the ZetaConnectorNonNativeTest contract. var ZetaConnectorNonNativeTestMetaData = &bind.MetaData{ - ABI: "[{\"type\":\"function\",\"name\":\"IS_TEST\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"PAUSER_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"TSS_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"WITHDRAWER_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeArtifacts\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedArtifacts_\",\"type\":\"string[]\",\"internalType\":\"string[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeContracts\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedContracts_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeSelectors\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedSelectors_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzSelector[]\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"selectors\",\"type\":\"bytes4[]\",\"internalType\":\"bytes4[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeSenders\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedSenders_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"failed\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"setUp\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"targetArtifactSelectors\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedArtifactSelectors_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzArtifactSelector[]\",\"components\":[{\"name\":\"artifact\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"selectors\",\"type\":\"bytes4[]\",\"internalType\":\"bytes4[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetArtifacts\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedArtifacts_\",\"type\":\"string[]\",\"internalType\":\"string[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetContracts\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedContracts_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetInterfaces\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedInterfaces_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzInterface[]\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"artifacts\",\"type\":\"string[]\",\"internalType\":\"string[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetSelectors\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedSelectors_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzSelector[]\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"selectors\",\"type\":\"bytes4[]\",\"internalType\":\"bytes4[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetSenders\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedSenders_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"testSexMaxSupplyFailsIfSenderIsNotTss\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdraw\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawAndCallFailsIfMaxSupplyIsReached\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawAndCallReceiveERC20\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawAndCallReceiveERC20FailsIfSenderIsNotWithdrawer\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawAndCallReceiveERC20Partial\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawAndCallReceiveNoParams\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawAndFailsIfMaxSupplyIsReached\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawAndRevert\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawAndRevertFailsIfMaxSupplyIsReached\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawAndRevertFailsIfSenderIsNotWithdrawer\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawFailsIfSenderIsNotWithdrawer\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawTogglePause\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"event\",\"name\":\"Call\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"receiver\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Deposit\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"receiver\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"asset\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Executed\",\"inputs\":[{\"name\":\"destination\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ExecutedWithERC20\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedERC20\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"token\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"destination\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedNoParams\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedNonPayable\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"strs\",\"type\":\"string[]\",\"indexed\":false,\"internalType\":\"string[]\"},{\"name\":\"nums\",\"type\":\"uint256[]\",\"indexed\":false,\"internalType\":\"uint256[]\"},{\"name\":\"flag\",\"type\":\"bool\",\"indexed\":false,\"internalType\":\"bool\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedPayable\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"str\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"num\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"flag\",\"type\":\"bool\",\"indexed\":false,\"internalType\":\"bool\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedRevert\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Reverted\",\"inputs\":[{\"name\":\"destination\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RevertedWithERC20\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Withdraw\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"WithdrawAndCall\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"WithdrawAndRevert\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log\",\"inputs\":[{\"name\":\"\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_address\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_array\",\"inputs\":[{\"name\":\"val\",\"type\":\"uint256[]\",\"indexed\":false,\"internalType\":\"uint256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_array\",\"inputs\":[{\"name\":\"val\",\"type\":\"int256[]\",\"indexed\":false,\"internalType\":\"int256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_array\",\"inputs\":[{\"name\":\"val\",\"type\":\"address[]\",\"indexed\":false,\"internalType\":\"address[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_bytes\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_bytes32\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_int\",\"inputs\":[{\"name\":\"\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_address\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_array\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"uint256[]\",\"indexed\":false,\"internalType\":\"uint256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_array\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"int256[]\",\"indexed\":false,\"internalType\":\"int256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_array\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"address[]\",\"indexed\":false,\"internalType\":\"address[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_bytes\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_bytes32\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_decimal_int\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"},{\"name\":\"decimals\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_decimal_uint\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"decimals\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_int\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_string\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_uint\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_string\",\"inputs\":[{\"name\":\"\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_uint\",\"inputs\":[{\"name\":\"\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"logs\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"AccessControlUnauthorizedAccount\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"neededRole\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"type\":\"error\",\"name\":\"ApprovalFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ConnectorInitialized\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"CustodyInitialized\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"DepositFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"EnforcedPause\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ExceedsMaxSupply\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ExecutionFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientERC20Amount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientETHAmount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZeroAddress\",\"inputs\":[]}]", - Bin: "0x6080604052600c8054600160ff199182168117909255601f80549091169091179055348015602c57600080fd5b5061ef2f8061003c6000396000f3fe608060405234801561001057600080fd5b50600436106101cf5760003560e01c8063a783c78911610104578063d509b16c116100a2578063e63ab1e911610071578063e63ab1e914610344578063fa7626d41461036b578063fdca905214610378578063fe574f841461038057600080fd5b8063d509b16c14610324578063dcf7d0371461032c578063de1cb76c14610334578063e20c9f711461033c57600080fd5b8063b5508aa9116100de578063b5508aa9146102f4578063ba414fa6146102fc578063c190997214610314578063ccb0e3f21461031c57600080fd5b8063a783c789146102bd578063aaf74192146102e4578063b0464fdc146102ec57600080fd5b80634934655811610171578063828320141161014b578063828320141461025657806385226c811461025e57806385f438c114610273578063916a17c6146102a857600080fd5b8063493465581461023157806366d9a9a0146102395780637db20efb1461024e57600080fd5b80632ade3880116101ad5780632ade3880146102045780633cba0107146102195780633e5e3c23146102215780633f7286f41461022957600080fd5b80630a9254e4146101d45780631ed7831c146101de5780632506ef03146101fc575b600080fd5b6101dc610388565b005b6101e6610a6e565b6040516101f39190618ec4565b60405180910390f35b6101dc610ad0565b61020c610d81565b6040516101f39190618f60565b6101dc610ec3565b6101e6611685565b6101e66116e5565b6101dc611745565b610241611d19565b6040516101f391906190c6565b6101dc611e9b565b6101dc61213a565b610266612393565b6040516101f39190619164565b61029a7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b6040519081526020016101f3565b6102b0612463565b6040516101f391906191db565b61029a7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb81565b6101dc61255e565b6102b06127ba565b6102666128b5565b610304612985565b60405190151581526020016101f3565b6101dc612a59565b6101dc612cc4565b6101dc6137f0565b6101dc613b45565b6101dc614173565b6101e661488f565b61029a7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b601f546103049060ff1681565b6101dc6148ef565b6101dc614ad9565b60258054307fffffffffffffffffffffffff000000000000000000000000000000000000000091821617909155602680546112349083161790556027805461567892168217905560405181906103dd90618dd7565b6001600160a01b03928316815291166020820152604001604051809103906000f080158015610410573d6000803e3d6000fd5b50602480547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039283169081178255604080518082018252600e81527f4761746577617945564d2e736f6c000000000000000000000000000000000000602082015260275460255492519086169481019490945260448401929092529092166064820152610501919060840160408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fc0c53b8b00000000000000000000000000000000000000000000000000000000179052614cc6565b601f80547fffffffffffffffffffffff0000000000000000000000000000000000000000ff166101006001600160a01b0393841681029190911791829055602080549190920483167fffffffffffffffffffffffff0000000000000000000000000000000000000000909116811790915560275460255460405192939182169291169061058d90618de4565b6001600160a01b03938416815291831660208301529091166040820152606001604051809103906000f0801580156105c9573d6000803e3d6000fd5b50602280547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03928316179055602054602454602754602554604051938516949283169391831692169061062490618df1565b6001600160a01b039485168152928416602084015290831660408301529091166060820152608001604051809103906000f080158015610668573d6000803e3d6000fd5b50602380547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392831617905560275460405163ca669fa760e01b815291166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156106ed57600080fd5b505af1158015610701573d6000803e3d6000fd5b5050602480546027546023546040517f15d57fd40000000000000000000000000000000000000000000000000000000081526001600160a01b039283166004820152908216938101939093521692506315d57fd49150604401600060405180830381600087803b15801561077457600080fd5b505af1158015610788573d6000803e3d6000fd5b5050505060405161079890618dfe565b604051809103906000f0801580156107b4573d6000803e3d6000fd5b50602180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039283161790556027546040517fc88a5e6d00000000000000000000000000000000000000000000000000000000815291166004820152670de0b6b3a76400006024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c88a5e6d90604401600060405180830381600087803b15801561086057600080fd5b505af1158015610874573d6000803e3d6000fd5b50506025546040517f06447d560000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506306447d569150602401600060405180830381600087803b1580156108ea57600080fd5b505af11580156108fe573d6000803e3d6000fd5b50506020546022546040517fae7a3a6f0000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201529116925063ae7a3a6f9150602401600060405180830381600087803b15801561096457600080fd5b505af1158015610978573d6000803e3d6000fd5b50506020546023546040517f10188aef0000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152911692506310188aef9150602401600060405180830381600087803b1580156109de57600080fd5b505af11580156109f2573d6000803e3d6000fd5b505050507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b03166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610a5457600080fd5b505af1158015610a68573d6000803e3d6000fd5b50505050565b60606016805480602002602001604051908101604052809291908181526020018280548015610ac657602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610aa8575b5050505050905090565b6040517f68656c6c6f0000000000000000000000000000000000000000000000000000006020820152620186a09060009060250160408051808303601f190181529082905260275463ca669fa760e01b83526001600160a01b031660048301529150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015610b6b57600080fd5b505af1158015610b7f573d6000803e3d6000fd5b50506023546040517f6f8b44b0000000000000000000000000000000000000000000000000000000008152600481018690526001600160a01b039091169250636f8b44b09150602401600060405180830381600087803b158015610be257600080fd5b505af1158015610bf6573d6000803e3d6000fd5b505060275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b158015610c5357600080fd5b505af1158015610c67573d6000803e3d6000fd5b50506040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fc30436e9000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b158015610cf057600080fd5b505af1158015610d04573d6000803e3d6000fd5b50506023546021546001600160a01b0391821693506302d5c899925016610d2c8560016192a1565b846040518463ffffffff1660e01b8152600401610d4b939291906192b4565b600060405180830381600087803b158015610d6557600080fd5b505af1158015610d79573d6000803e3d6000fd5b505050505050565b6060601e805480602002602001604051908101604052809291908181526020016000905b82821015610eba57600084815260208082206040805180820182526002870290920180546001600160a01b03168352600181018054835181870281018701909452808452939591948681019491929084015b82821015610ea3578382906000526020600020018054610e16906192ed565b80601f0160208091040260200160405190810160405280929190818152602001828054610e42906192ed565b8015610e8f5780601f10610e6457610100808354040283529160200191610e8f565b820191906000526020600020905b815481529060010190602001808311610e7257829003601f168201915b505050505081526020019060010190610df7565b505050508152505081526020019060010190610da5565b50505050905090565b60248054602654604051620186a09381018490526001600160a01b03928316604482015291166064820152600090819060840160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f357fc5a2000000000000000000000000000000000000000000000000000000001790526024805460265492516370a0823160e01b81526001600160a01b0393841660048201529394506000939216916370a082319101602060405180830381865afa158015610f9e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fc2919061933a565b9050610fcf816000614ce5565b602480546023546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa15801561101f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611043919061933a565b9050611050816000614ce5565b6020546040516001600160a01b039091166024820152604481018690526064810185905260009060840160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f1e458bee0000000000000000000000000000000000000000000000000000000017905260245490517ff30c7ba3000000000000000000000000000000000000000000000000000000008152919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f30c7ba391611137916001600160a01b0391909116906000908690600401619353565b600060405180830381600087803b15801561115157600080fd5b505af1158015611165573d6000803e3d6000fd5b50506021546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b1580156111f757600080fd5b505af115801561120b573d6000803e3d6000fd5b505060208054602454602654604080516001600160a01b0394851681529485018d905291831684830152919091166060830152517f2b58128f24a9f59127cc5b5430d70542b22220f2d9adaa86e442b816ab98af609350908190036080019150a16023546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b1580156112fa57600080fd5b505af115801561130e573d6000803e3d6000fd5b50506021546040516001600160a01b0390911692507f7772f56296d3a5202974a45c61c9188d844ab4d6eeb18c851e4b8d5384ca6ced9150611353908990889061937b565b60405180910390a260275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156113b457600080fd5b505af11580156113c8573d6000803e3d6000fd5b50506023546021546040517f5e3e9fef0000000000000000000000000000000000000000000000000000000081526001600160a01b039283169450635e3e9fef935061142092909116908a9089908b90600401619394565b600060405180830381600087803b15801561143a57600080fd5b505af115801561144e573d6000803e3d6000fd5b5050602480546026546040516370a0823160e01b81526001600160a01b03918216600482015260009550911692506370a082319101602060405180830381865afa1580156114a0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114c4919061933a565b90506114d08188614ce5565b602480546023546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa158015611520573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611544919061933a565b9050611551816000614ce5565b602480546020546021546040517fdd62ed3e0000000000000000000000000000000000000000000000000000000081526001600160a01b0392831660048201529082169381019390935260009291169063dd62ed3e90604401602060405180830381865afa1580156115c7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115eb919061933a565b90506115f8816000614ce5565b602480546020546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa158015611648573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061166c919061933a565b9050611679816000614ce5565b50505050505050505050565b60606018805480602002602001604051908101604052809291908181526020018280548015610ac6576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311610aa8575050505050905090565b60606017805480602002602001604051908101604052809291908181526020018280548015610ac6576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311610aa8575050505050905090565b604080516004808252602480830184526020830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f6ed70169000000000000000000000000000000000000000000000000000000001790525460265493516370a0823160e01b8152620186a0946000949385936001600160a01b03908116936370a08231936117e693921691016001600160a01b0391909116815260200190565b602060405180830381865afa158015611803573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611827919061933a565b9050611834816000614ce5565b602480546023546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa158015611884573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118a8919061933a565b90506118b5816000614ce5565b6020546040516001600160a01b039091166024820152604481018690526064810185905260009060840160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f1e458bee0000000000000000000000000000000000000000000000000000000017905260245490517ff30c7ba3000000000000000000000000000000000000000000000000000000008152919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f30c7ba39161199c916001600160a01b0391909116906000908690600401619353565b600060405180830381600087803b1580156119b657600080fd5b505af11580156119ca573d6000803e3d6000fd5b50506021546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b158015611a5c57600080fd5b505af1158015611a70573d6000803e3d6000fd5b5050602080546040516001600160a01b0390911681527fbcaadb46b82a48af60b608f58959ae6b8310d1b0a0d094c2e9ec3208ed39f2a0935001905060405180910390a16023546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b158015611b4257600080fd5b505af1158015611b56573d6000803e3d6000fd5b50506021546040516001600160a01b0390911692507f7772f56296d3a5202974a45c61c9188d844ab4d6eeb18c851e4b8d5384ca6ced9150611b9b908990889061937b565b60405180910390a260275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015611bfc57600080fd5b505af1158015611c10573d6000803e3d6000fd5b50506023546021546040517f5e3e9fef0000000000000000000000000000000000000000000000000000000081526001600160a01b039283169450635e3e9fef9350611c6892909116908a9089908b90600401619394565b600060405180830381600087803b158015611c8257600080fd5b505af1158015611c96573d6000803e3d6000fd5b5050602480546026546040516370a0823160e01b81526001600160a01b03918216600482015260009550911692506370a082319101602060405180830381865afa158015611ce8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d0c919061933a565b90506114d0816000614ce5565b6060601b805480602002602001604051908101604052809291908181526020016000905b82821015610eba5783829060005260206000209060020201604051806040016040529081600082018054611d70906192ed565b80601f0160208091040260200160405190810160405280929190818152602001828054611d9c906192ed565b8015611de95780601f10611dbe57610100808354040283529160200191611de9565b820191906000526020600020905b815481529060010190602001808311611dcc57829003601f168201915b5050505050815260200160018201805480602002602001604051908101604052809291908181526020018280548015611e8357602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019060040190602082600301049283019260010382029150808411611e305790505b50505050508152505081526020019060010190611d3d565b60275460405163ca669fa760e01b81526001600160a01b039091166004820152620186a090737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015611ef957600080fd5b505af1158015611f0d573d6000803e3d6000fd5b50506023546040517f6f8b44b0000000000000000000000000000000000000000000000000000000008152600481018590526001600160a01b039091169250636f8b44b09150602401600060405180830381600087803b158015611f7057600080fd5b505af1158015611f84573d6000803e3d6000fd5b505060275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b158015611fe157600080fd5b505af1158015611ff5573d6000803e3d6000fd5b50506040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fc30436e9000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b15801561207e57600080fd5b505af1158015612092573d6000803e3d6000fd5b50506023546021546001600160a01b03918216935063106e62909250166120ba8460016192a1565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b039092166004830152602482015260006044820152606401600060405180830381600087803b15801561211f57600080fd5b505af1158015612133573d6000803e3d6000fd5b5050505050565b6040517f68656c6c6f0000000000000000000000000000000000000000000000000000006020820152620186a090600090819060250160408051808303601f190181529082905260255463ca669fa760e01b83526001600160a01b031660048301529150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156121d757600080fd5b505af11580156121eb573d6000803e3d6000fd5b5050602554604080516001600160a01b0390921660248301527f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e460448084019190915281518084039091018152606490920181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb392506122d691906004016193cd565b600060405180830381600087803b1580156122f057600080fd5b505af1158015612304573d6000803e3d6000fd5b50506023546021546040517f02d5c8990000000000000000000000000000000000000000000000000000000081526001600160a01b0392831694506302d5c899935061235c9290911690879086908890600401619394565b600060405180830381600087803b15801561237657600080fd5b505af115801561238a573d6000803e3d6000fd5b50505050505050565b6060601a805480602002602001604051908101604052809291908181526020016000905b82821015610eba5783829060005260206000200180546123d6906192ed565b80601f0160208091040260200160405190810160405280929190818152602001828054612402906192ed565b801561244f5780601f106124245761010080835404028352916020019161244f565b820191906000526020600020905b81548152906001019060200180831161243257829003601f168201915b5050505050815260200190600101906123b7565b6060601d805480602002602001604051908101604052809291908181526020016000905b82821015610eba5760008481526020908190206040805180820182526002860290920180546001600160a01b0316835260018101805483518187028101870190945280845293949193858301939283018282801561254657602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190600401906020826003010492830192600103820291508084116124f35790505b50505050508152505081526020019060010190612487565b6040517f68656c6c6f0000000000000000000000000000000000000000000000000000006020820152620186a09060009060250160408051808303601f190181529082905260275463ca669fa760e01b83526001600160a01b031660048301529150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156125f957600080fd5b505af115801561260d573d6000803e3d6000fd5b50506023546040517f6f8b44b0000000000000000000000000000000000000000000000000000000008152600481018690526001600160a01b039091169250636f8b44b09150602401600060405180830381600087803b15801561267057600080fd5b505af1158015612684573d6000803e3d6000fd5b505060275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b1580156126e157600080fd5b505af11580156126f5573d6000803e3d6000fd5b50506040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fc30436e9000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b15801561277e57600080fd5b505af1158015612792573d6000803e3d6000fd5b50506023546021546001600160a01b039182169350635e3e9fef925016610d2c8560016192a1565b6060601c805480602002602001604051908101604052809291908181526020016000905b82821015610eba5760008481526020908190206040805180820182526002860290920180546001600160a01b0316835260018101805483518187028101870190945280845293949193858301939283018282801561289d57602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168152602001906004019060208260030104928301926001038202915080841161284a5790505b505050505081525050815260200190600101906127de565b60606019805480602002602001604051908101604052809291908181526020016000905b82821015610eba5783829060005260206000200180546128f8906192ed565b80601f0160208091040260200160405190810160405280929190818152602001828054612924906192ed565b80156129715780601f1061294657610100808354040283529160200191612971565b820191906000526020600020905b81548152906001019060200180831161295457829003601f168201915b5050505050815260200190600101906128d9565b60085460009060ff161561299d575060085460ff1690565b6040517f667f9d70000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d600482018190527f6661696c65640000000000000000000000000000000000000000000000000000602483015260009163667f9d7090604401602060405180830381865afa158015612a2e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a52919061933a565b1415905090565b60248054602654604051620186a09381018490526001600160a01b03928316604482015291166064820152600090819060840160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f357fc5a200000000000000000000000000000000000000000000000000000000179052602554905163ca669fa760e01b81526001600160a01b039091166004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015612b3f57600080fd5b505af1158015612b53573d6000803e3d6000fd5b5050602554604080516001600160a01b0390921660248301527f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e460448084019190915281518084039091018152606490920181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb39250612c3e91906004016193cd565b600060405180830381600087803b158015612c5857600080fd5b505af1158015612c6c573d6000803e3d6000fd5b50506023546021546040517f5e3e9fef0000000000000000000000000000000000000000000000000000000081526001600160a01b039283169450635e3e9fef935061235c9290911690879086908890600401619394565b60275460405163ca669fa760e01b81526001600160a01b039091166004820152620186a090600090737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015612d2557600080fd5b505af1158015612d39573d6000803e3d6000fd5b5050602754604080516001600160a01b0390921660248301527f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a60448084019190915281518084039091018152606490920181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb39250612e2491906004016193cd565b600060405180830381600087803b158015612e3e57600080fd5b505af1158015612e52573d6000803e3d6000fd5b50505050602360009054906101000a90046001600160a01b03166001600160a01b0316638456cb596040518163ffffffff1660e01b8152600401600060405180830381600087803b158015612ea657600080fd5b505af1158015612eba573d6000803e3d6000fd5b505060275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b158015612f1757600080fd5b505af1158015612f2b573d6000803e3d6000fd5b5050602754604080516001600160a01b0390921660248301527f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a60448084019190915281518084039091018152606490920181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb3925061301691906004016193cd565b600060405180830381600087803b15801561303057600080fd5b505af1158015613044573d6000803e3d6000fd5b50505050602360009054906101000a90046001600160a01b03166001600160a01b0316633f4ba83a6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561309857600080fd5b505af11580156130ac573d6000803e3d6000fd5b505060255460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b15801561310957600080fd5b505af115801561311d573d6000803e3d6000fd5b50505050602360009054906101000a90046001600160a01b03166001600160a01b0316638456cb596040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561317157600080fd5b505af1158015613185573d6000803e3d6000fd5b50506040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fd93c0665000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b15801561320e57600080fd5b505af1158015613222573d6000803e3d6000fd5b505060275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b15801561327f57600080fd5b505af1158015613293573d6000803e3d6000fd5b50506023546026546040517f106e62900000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260248101879052604481018690529116925063106e62909150606401600060405180830381600087803b15801561330757600080fd5b505af115801561331b573d6000803e3d6000fd5b505060255460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b15801561337857600080fd5b505af115801561338c573d6000803e3d6000fd5b50505050602360009054906101000a90046001600160a01b03166001600160a01b0316633f4ba83a6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156133e057600080fd5b505af11580156133f4573d6000803e3d6000fd5b5050602480546026546040516370a0823160e01b81526001600160a01b03918216600482015260009550911692506370a082319101602060405180830381865afa158015613446573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061346a919061933a565b9050613477816000614ce5565b6026546040516001600160a01b039091166024820152604481018490526064810183905260009060840160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f1e458bee0000000000000000000000000000000000000000000000000000000017905260245490517ff30c7ba3000000000000000000000000000000000000000000000000000000008152919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f30c7ba39161355e916001600160a01b0391909116906000908690600401619353565b600060405180830381600087803b15801561357857600080fd5b505af115801561358c573d6000803e3d6000fd5b50506023546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b15801561361e57600080fd5b505af1158015613632573d6000803e3d6000fd5b50506026546040518781526001600160a01b0390911692507f884edad9ce6fa2440d8a54cc123490eb96d2768479d49ff9c7366125a9424364915060200160405180910390a260275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156136d157600080fd5b505af11580156136e5573d6000803e3d6000fd5b50506023546026546040517f106e62900000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260248101899052604481018890529116925063106e629091506064015b600060405180830381600087803b15801561375a57600080fd5b505af115801561376e573d6000803e3d6000fd5b5050602480546026546040516370a0823160e01b81526001600160a01b03918216600482015260009550911692506370a082319101602060405180830381865afa1580156137c0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137e4919061933a565b90506121338186614ce5565b602480546026546040516370a0823160e01b81526001600160a01b039182166004820152620186a09360009392909216916370a082319101602060405180830381865afa158015613845573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613869919061933a565b9050613876816000614ce5565b6026546040516001600160a01b0390911660248201526044810183905260006064820181905290819060840160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f1e458bee0000000000000000000000000000000000000000000000000000000017905260245490517ff30c7ba3000000000000000000000000000000000000000000000000000000008152919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f30c7ba39161395f916001600160a01b0391909116906000908690600401619353565b600060405180830381600087803b15801561397957600080fd5b505af115801561398d573d6000803e3d6000fd5b50506023546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b158015613a1f57600080fd5b505af1158015613a33573d6000803e3d6000fd5b50506026546040518781526001600160a01b0390911692507f884edad9ce6fa2440d8a54cc123490eb96d2768479d49ff9c7366125a9424364915060200160405180910390a260275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015613ad257600080fd5b505af1158015613ae6573d6000803e3d6000fd5b50506023546026546040517f106e62900000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260248101899052604481018790529116925063106e62909150606401613740565b60248054602654604051620186a09381018490526001600160a01b03928316604482015291166064820152600090819060840160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fc5131691000000000000000000000000000000000000000000000000000000001790526024805460265492516370a0823160e01b81526001600160a01b0393841660048201529394506000939216916370a082319101602060405180830381865afa158015613c20573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613c44919061933a565b9050613c51816000614ce5565b602480546023546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa158015613ca1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613cc5919061933a565b9050613cd2816000614ce5565b6020546040516001600160a01b039091166024820152604481018690526064810185905260009060840160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f1e458bee0000000000000000000000000000000000000000000000000000000017905260245490517ff30c7ba3000000000000000000000000000000000000000000000000000000008152919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f30c7ba391613db9916001600160a01b0391909116906000908690600401619353565b600060405180830381600087803b158015613dd357600080fd5b505af1158015613de7573d6000803e3d6000fd5b50506021546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b158015613e7957600080fd5b505af1158015613e8d573d6000803e3d6000fd5b50506020547f2b58128f24a9f59127cc5b5430d70542b22220f2d9adaa86e442b816ab98af6092506001600160a01b03169050613ecb6002896193e0565b602454602654604080516001600160a01b03958616815260208101949094529184168383015292909216606082015290519081900360800190a16023546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b158015613f9357600080fd5b505af1158015613fa7573d6000803e3d6000fd5b50506021546040516001600160a01b0390911692507f7772f56296d3a5202974a45c61c9188d844ab4d6eeb18c851e4b8d5384ca6ced9150613fec908990889061937b565b60405180910390a260275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561404d57600080fd5b505af1158015614061573d6000803e3d6000fd5b50506023546021546040517f5e3e9fef0000000000000000000000000000000000000000000000000000000081526001600160a01b039283169450635e3e9fef93506140b992909116908a9089908b90600401619394565b600060405180830381600087803b1580156140d357600080fd5b505af11580156140e7573d6000803e3d6000fd5b5050602480546026546040516370a0823160e01b81526001600160a01b03918216600482015260009550911692506370a082319101602060405180830381865afa158015614139573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061415d919061933a565b90506114d08161416e60028a6193e0565b614ce5565b6040517f68656c6c6f0000000000000000000000000000000000000000000000000000006020820152620186a090600090819060250160408051808303601f1901815290829052602480546021546370a0823160e01b85526001600160a01b0390811660048601529294506000939216916370a082319101602060405180830381865afa158015614208573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061422c919061933a565b9050614239816000614ce5565b602480546023546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa158015614289573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906142ad919061933a565b6020546040516001600160a01b039091166024820152604481018790526064810186905290915060009060840160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f1e458bee0000000000000000000000000000000000000000000000000000000017905260245490517ff30c7ba3000000000000000000000000000000000000000000000000000000008152919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f30c7ba391614397916001600160a01b0391909116906000908690600401619353565b600060405180830381600087803b1580156143b157600080fd5b505af11580156143c5573d6000803e3d6000fd5b50506021546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b15801561445757600080fd5b505af115801561446b573d6000803e3d6000fd5b50506020546040517f0d3f65f00e631663aa85c96330b5c7a83bb29af3630c0063776f985edc3037aa93506144ae92506001600160a01b0390911690879061941b565b60405180910390a16020546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b15801561454457600080fd5b505af1158015614558573d6000803e3d6000fd5b50506021546024546040516001600160a01b039283169450911691507f723fc7be2448075379e4fdf1e6bf5fead954d2668d2da05dcb44ccfec4beeda7906145a3908a90899061937b565b60405180910390a36023546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b15801561463957600080fd5b505af115801561464d573d6000803e3d6000fd5b50506021546040516001600160a01b0390911692507fba96f26bdda53eb8c8ba39045dfb4ff39753fbc7a6edcf250a88e75e78d102fe9150614692908990889061937b565b60405180910390a260275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156146f357600080fd5b505af1158015614707573d6000803e3d6000fd5b50506023546021546040517f02d5c8990000000000000000000000000000000000000000000000000000000081526001600160a01b0392831694506302d5c899935061475f92909116908a9089908b90600401619394565b600060405180830381600087803b15801561477957600080fd5b505af115801561478d573d6000803e3d6000fd5b5050602480546021546040516370a0823160e01b81526001600160a01b03918216600482015260009550911692506370a082319101602060405180830381865afa1580156147df573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614803919061933a565b905061480f8188614ce5565b602480546023546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa15801561485f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614883919061933a565b90506115518185614ce5565b60606015805480602002602001604051908101604052809291908181526020018280548015610ac6576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311610aa8575050505050905090565b60255460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561494857600080fd5b505af115801561495c573d6000803e3d6000fd5b5050602554604080516001600160a01b0390921660248301527f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb60448084019190915281518084039091018152606490920181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb39250614a4791906004016193cd565b600060405180830381600087803b158015614a6157600080fd5b505af1158015614a75573d6000803e3d6000fd5b50506023546040517f6f8b44b000000000000000000000000000000000000000000000000000000000815261271060048201526001600160a01b039091169250636f8b44b09150602401600060405180830381600087803b158015610a5457600080fd5b60255460405163ca669fa760e01b81526001600160a01b039091166004820152620186a090600090737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015614b3a57600080fd5b505af1158015614b4e573d6000803e3d6000fd5b5050602554604080516001600160a01b0390921660248301527f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e460448084019190915281518084039091018152606490920181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb39250614c3991906004016193cd565b600060405180830381600087803b158015614c5357600080fd5b505af1158015614c67573d6000803e3d6000fd5b50506023546026546040517f106e62900000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260248101879052604481018690529116925063106e62909150606401610d4b565b6000614cd0618e0b565b614cdb848483614d64565b9150505b92915050565b6040517f98296c540000000000000000000000000000000000000000000000000000000081526004810183905260248101829052737109709ecfa91a80626ff3989d68f67f5b1dd12d906398296c549060440160006040518083038186803b158015614d5057600080fd5b505afa158015610d79573d6000803e3d6000fd5b600080614d718584614ddf565b9050614dd46040518060400160405280601d81526020017f4552433139363750726f78792e736f6c3a4552433139363750726f78790000008152508286604051602001614dbf92919061941b565b60405160208183030381529060405285614deb565b9150505b9392505050565b6000614dd88383614e19565b60c08101515160009015614e0f57614e0884848460c00151614e34565b9050614dd8565b614e088484614fda565b6000614e2583836150c5565b614dd883836020015184614deb565b600080614e3f6150d5565b90506000614e4d86836151a8565b90506000614e64826060015183602001518561564e565b90506000614e7483838989615860565b90506000614e81826166dd565b602081015181519192509060030b15614ef457898260400151604051602001614eab92919061943d565b60408051601f19818403018152908290527f08c379a0000000000000000000000000000000000000000000000000000000008252614eeb916004016193cd565b60405180910390fd5b6000614f376040518060400160405280601581526020017f4465706c6f79656420746f20616464726573733a2000000000000000000000008152508360016168ac565b6040517fc6ce059d000000000000000000000000000000000000000000000000000000008152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c6ce059d90614f8a9084906004016193cd565b602060405180830381865afa158015614fa7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614fcb91906194be565b9b9a5050505050505050505050565b6040517f8d1cc9250000000000000000000000000000000000000000000000000000000081526000908190737109709ecfa91a80626ff3989d68f67f5b1dd12d90638d1cc9259061502f9087906004016193cd565b600060405180830381865afa15801561504c573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261507491908101906195cf565b905060006150a2828560405160200161508e929190619604565b604051602081830303815290604052616aac565b90506001600160a01b038116614cdb578484604051602001614eab929190619633565b6150d182826000616abf565b5050565b604080518082018252600381527f6f75740000000000000000000000000000000000000000000000000000000000602082015290517fd145736c000000000000000000000000000000000000000000000000000000008152606091737109709ecfa91a80626ff3989d68f67f5b1dd12d91829063d145736c9061515c9084906004016196de565b600060405180830381865afa158015615179573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526151a19190810190619725565b9250505090565b6151da6040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b6000737109709ecfa91a80626ff3989d68f67f5b1dd12d90506152256040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b61522e85616bc2565b6020820152600061523e86616fa7565b90506000836001600160a01b031663d930a0e66040518163ffffffff1660e01b8152600401600060405180830381865afa158015615280573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526152a89190810190619725565b868385602001516040516020016152c2949392919061976e565b60408051601f19818403018152908290527f60f9bb1100000000000000000000000000000000000000000000000000000000825291506000906001600160a01b038616906360f9bb119061531a9085906004016193cd565b600060405180830381865afa158015615337573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261535f9190810190619725565b6040517fdb4235f60000000000000000000000000000000000000000000000000000000081529091506001600160a01b0386169063db4235f6906153a7908490600401619872565b602060405180830381865afa1580156153c4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906153e891906198c4565b6153fd5781604051602001614eab91906198e6565b6040517f49c4fac80000000000000000000000000000000000000000000000000000000081526001600160a01b038616906349c4fac890615442908490600401619978565b600060405180830381865afa15801561545f573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526154879190810190619725565b84526040517fdb4235f60000000000000000000000000000000000000000000000000000000081526001600160a01b0386169063db4235f6906154ce9084906004016199ca565b602060405180830381865afa1580156154eb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061550f91906198c4565b156155a4576040517f49c4fac80000000000000000000000000000000000000000000000000000000081526001600160a01b038616906349c4fac8906155599084906004016199ca565b600060405180830381865afa158015615576573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261559e9190810190619725565b60408501525b846001600160a01b03166349c4fac88286600001516040516020016155c99190619a1c565b6040516020818303038152906040526040518363ffffffff1660e01b81526004016155f5929190619a88565b600060405180830381865afa158015615612573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261563a9190810190619725565b606085015250608083015250949350505050565b60408051600480825260a0820190925260609160009190816020015b606081526020019060019003908161566a5790505090506040518060400160405280600481526020017f6772657000000000000000000000000000000000000000000000000000000000815250816000815181106156ca576156ca619aad565b60200260200101819052506040518060400160405280600381526020017f2d726c00000000000000000000000000000000000000000000000000000000008152508160018151811061571e5761571e619aad565b60200260200101819052508460405160200161573a9190619adc565b6040516020818303038152906040528160028151811061575c5761575c619aad565b6020026020010181905250826040516020016157789190619b48565b6040516020818303038152906040528160038151811061579a5761579a619aad565b602002602001018190525060006157b0826166dd565b602080820151604080518082018252600581527f2e6a736f6e0000000000000000000000000000000000000000000000000000008185019081528251808401845260008082529086015282518084019093529051825292810192909252919250615841906040805180820182526000808252602091820152815180830190925284518252808501908201529061722a565b6158565785604051602001614eab9190619b89565b9695505050505050565b60a0810151604080518082018252600080825260209182015281518083019092528251808352928101910152606090737109709ecfa91a80626ff3989d68f67f5b1dd12d90156158b0565b511590565b615a245782602001511561596c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605860248201527f54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f742060448201527f62652075736564207768656e207468652060736b6970566572696679536f757260648201527f6365436f646560206f7074696f6e206973206074727565600000000000000000608482015260a401614eeb565b8260c0015115615a24576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605360248201527f54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f742060448201527f62652075736564207768656e207468652060736b69704c6963656e736554797060648201527f6560206f7074696f6e2069732060747275656000000000000000000000000000608482015260a401614eeb565b6040805160ff8082526120008201909252600091816020015b6060815260200190600190039081615a3d57905050905060006040518060400160405280600381526020017f6e70780000000000000000000000000000000000000000000000000000000000815250828280615a9890619c1a565b935060ff1681518110615aad57615aad619aad565b60200260200101819052506040518060400160405280600d81526020017f302e302e312d616c7068612e3700000000000000000000000000000000000000815250604051602001615afe9190619c39565b604051602081830303815290604052828280615b1990619c1a565b935060ff1681518110615b2e57615b2e619aad565b60200260200101819052506040518060400160405280600681526020017f6465706c6f790000000000000000000000000000000000000000000000000000815250828280615b7b90619c1a565b935060ff1681518110615b9057615b90619aad565b60200260200101819052506040518060400160405280600e81526020017f2d2d636f6e74726163744e616d65000000000000000000000000000000000000815250828280615bdd90619c1a565b935060ff1681518110615bf257615bf2619aad565b60200260200101819052508760200151828280615c0e90619c1a565b935060ff1681518110615c2357615c23619aad565b60200260200101819052506040518060400160405280600e81526020017f2d2d636f6e747261637450617468000000000000000000000000000000000000815250828280615c7090619c1a565b935060ff1681518110615c8557615c85619aad565b602090810291909101015287518282615c9d81619c1a565b935060ff1681518110615cb257615cb2619aad565b60200260200101819052506040518060400160405280600981526020017f2d2d636861696e49640000000000000000000000000000000000000000000000815250828280615cff90619c1a565b935060ff1681518110615d1457615d14619aad565b6020026020010181905250615d284661728b565b8282615d3381619c1a565b935060ff1681518110615d4857615d48619aad565b60200260200101819052506040518060400160405280600f81526020017f2d2d6275696c64496e666f46696c650000000000000000000000000000000000815250828280615d9590619c1a565b935060ff1681518110615daa57615daa619aad565b602002602001018190525086828280615dc290619c1a565b935060ff1681518110615dd757615dd7619aad565b6020908102919091010152855115615efe5760408051808201909152601581527f2d2d636f6e7374727563746f7242797465636f6465000000000000000000000060208201528282615e2881619c1a565b935060ff1681518110615e3d57615e3d619aad565b60209081029190910101526040517f71aad10d0000000000000000000000000000000000000000000000000000000081526001600160a01b038416906371aad10d90615e8d9089906004016193cd565b600060405180830381865afa158015615eaa573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052615ed29190810190619725565b8282615edd81619c1a565b935060ff1681518110615ef257615ef2619aad565b60200260200101819052505b846020015115615fce5760408051808201909152601281527f2d2d766572696679536f75726365436f6465000000000000000000000000000060208201528282615f4781619c1a565b935060ff1681518110615f5c57615f5c619aad565b60200260200101819052506040518060400160405280600581526020017f66616c7365000000000000000000000000000000000000000000000000000000815250828280615fa990619c1a565b935060ff1681518110615fbe57615fbe619aad565b6020026020010181905250616195565b6160066158ab8660a0015160408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6160995760408051808201909152600d81527f2d2d6c6963656e736554797065000000000000000000000000000000000000006020820152828261604981619c1a565b935060ff168151811061605e5761605e619aad565b60200260200101819052508460a0015160405160200161607e9190619adc565b604051602081830303815290604052828280615fa990619c1a565b8460c001511580156160dc5750604080890151815180830183526000808252602091820152825180840190935281518352908101908201526160da90511590565b155b156161955760408051808201909152600d81527f2d2d6c6963656e736554797065000000000000000000000000000000000000006020820152828261612081619c1a565b935060ff168151811061613557616135619aad565b60200260200101819052506161498861732b565b6040516020016161599190619adc565b60405160208183030381529060405282828061617490619c1a565b935060ff168151811061618957616189619aad565b60200260200101819052505b604080860151815180830183526000808252602091820152825180840190935281518352908101908201526161c990511590565b61625e5760408051808201909152600b81527f2d2d72656c6179657249640000000000000000000000000000000000000000006020820152828261620c81619c1a565b935060ff168151811061622157616221619aad565b6020026020010181905250846040015182828061623d90619c1a565b935060ff168151811061625257616252619aad565b60200260200101819052505b60608501511561637f5760408051808201909152600681527f2d2d73616c740000000000000000000000000000000000000000000000000000602082015282826162a781619c1a565b935060ff16815181106162bc576162bc619aad565b602090810291909101015260608501516040517fb11a19e800000000000000000000000000000000000000000000000000000000815260048101919091526001600160a01b0384169063b11a19e890602401600060405180830381865afa15801561632b573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526163539190810190619725565b828261635e81619c1a565b935060ff168151811061637357616373619aad565b60200260200101819052505b60e085015151156164265760408051808201909152600a81527f2d2d6761734c696d697400000000000000000000000000000000000000000000602082015282826163c981619c1a565b935060ff16815181106163de576163de619aad565b60200260200101819052506163fa8560e001516000015161728b565b828261640581619c1a565b935060ff168151811061641a5761641a619aad565b60200260200101819052505b60e085015160200151156164d05760408051808201909152600a81527f2d2d6761735072696365000000000000000000000000000000000000000000006020820152828261647381619c1a565b935060ff168151811061648857616488619aad565b60200260200101819052506164a48560e001516020015161728b565b82826164af81619c1a565b935060ff16815181106164c4576164c4619aad565b60200260200101819052505b60e0850151604001511561657a5760408051808201909152600e81527f2d2d6d61784665655065724761730000000000000000000000000000000000006020820152828261651d81619c1a565b935060ff168151811061653257616532619aad565b602002602001018190525061654e8560e001516040015161728b565b828261655981619c1a565b935060ff168151811061656e5761656e619aad565b60200260200101819052505b60e085015160600151156166245760408051808201909152601681527f2d2d6d61785072696f7269747946656550657247617300000000000000000000602082015282826165c781619c1a565b935060ff16815181106165dc576165dc619aad565b60200260200101819052506165f88560e001516060015161728b565b828261660381619c1a565b935060ff168151811061661857616618619aad565b60200260200101819052505b60008160ff1667ffffffffffffffff811115616642576166426194e7565b60405190808252806020026020018201604052801561667557816020015b60608152602001906001900390816166605790505b50905060005b8260ff168160ff1610156166ce57838160ff168151811061669e5761669e619aad565b6020026020010151828260ff16815181106166bb576166bb619aad565b602090810291909101015260010161667b565b5093505050505b949350505050565b6167046040518060600160405280600060030b815260200160608152602001606081525090565b60408051808201825260048082527f6261736800000000000000000000000000000000000000000000000000000000602083015291517fd145736c000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d92600091849163d145736c9161678a91869101619ca4565b600060405180830381865afa1580156167a7573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526167cf9190810190619725565b905060006167dd8683617e1a565b90506000846001600160a01b031663f45c1ce7836040518263ffffffff1660e01b815260040161680d9190619164565b6000604051808303816000875af115801561682c573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526168549190810190619ceb565b805190915060030b1580159061686d5750602081015151155b801561687c5750604081015151155b15615856578160008151811061689457616894619aad565b6020026020010151604051602001614eab9190619da1565b606060006168e18560408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6040805180820182526000808252602091820152815180830190925286518252808701908201529091506169189082905b90617f6f565b15616a755760006169958261698f8461698961695b8a60408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6040805180820182526000808252602091820152815180830190925282518252918201519181019190915290565b90617f96565b90617ff8565b604080518082018252600181527f0a00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201529091506169f9908290617f6f565b15616a6357604080518082018252600181527f0a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616a60905b829061807d565b90505b616a6c816180a3565b92505050614dd8565b8215616a8e578484604051602001614eab929190619f8d565b5050604080516020810190915260008152614dd8565b509392505050565b6000808251602084016000f09392505050565b8160a0015115616ace57505050565b6000616adb84848461810c565b90506000616ae8826166dd565b602081015181519192509060030b158015616b845750604080518082018252600781527f535543434553530000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616b8490604080518082018252600080825260209182015281518083019092528451825280850190820152616912565b15616b9157505050505050565b60408201515115616bb1578160400151604051602001614eab919061a034565b80604051602001614eab919061a092565b60606000616bf78360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600481527f2e736f6c0000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152909150616c5c905b829061722a565b15616ccb57604080518082018252600481527f2e736f6c0000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152614dd890616cc69083906186a7565b6180a3565b604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616d2d905b8290618731565b600103616dfa57604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616d9390616a59565b50604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152614dd890616cc6905b839061807d565b604080518082018252600581527f2e6a736f6e00000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616e5990616c55565b15616f9057604080518082018252600181527f2f00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820181905284518086019095529251845283015290616ec19083906187cb565b905060008160018351616ed4919061a0fd565b81518110616ee457616ee4619aad565b60200260200101519050616f87616cc6616f5a6040518060400160405280600581526020017f2e6a736f6e00000000000000000000000000000000000000000000000000000081525060408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600080825260209182015281518083019092528551825280860190820152906186a7565b95945050505050565b82604051602001614eab919061a110565b50919050565b60606000616fdc8360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600481527f2e736f6c000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015290915061703e90616c55565b1561704c57614dd8816180a3565b604080518082018252600181527f3a00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526170ab90616d26565b60010361711557604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152614dd890616cc690616df3565b604080518082018252600581527f2e6a736f6e0000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261717490616c55565b15616f9057604080518082018252600181527f2f000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201819052845180860190955292518452830152906171dc9083906187cb565b90506001815111156172185780600282516171f7919061a0fd565b8151811061720757617207619aad565b602002602001015192505050919050565b5082604051602001614eab919061a110565b80518251600091111561723f57506000614cdf565b81518351602085015160009291617255916192a1565b61725f919061a0fd565b905082602001518103617276576001915050614cdf565b82516020840151819020912014905092915050565b6060600061729883618870565b600101905060008167ffffffffffffffff8111156172b8576172b86194e7565b6040519080825280601f01601f1916602001820160405280156172e2576020820181803683370190505b5090508181016020015b600019017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a85049450846172ec57509392505050565b604081810151815180830183526000808252602091820181905283518085018552835181529282018383015283518085018552600a81527f554e4c4943454e53454400000000000000000000000000000000000000000000818401908152855180870187528381528401929092528451808601909552518452908301526060916173b7905b8290618952565b156173f757505060408051808201909152600481527f4e6f6e65000000000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600981527f556e6c6963656e7365000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617456906173b0565b1561749657505060408051808201909152600981527f556e6c6963656e736500000000000000000000000000000000000000000000006020820152919050565b604080518082018252600381527f4d49540000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526174f5906173b0565b1561753557505060408051808201909152600381527f4d495400000000000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f47504c2d322e302d6f6e6c79000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617594906173b0565b806175f95750604080518082018252601081527f47504c2d322e302d6f722d6c6174657200000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526175f9906173b0565b1561763957505060408051808201909152600981527f474e552047504c763200000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f47504c2d332e302d6f6e6c79000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617698906173b0565b806176fd5750604080518082018252601081527f47504c2d332e302d6f722d6c6174657200000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526176fd906173b0565b1561773d57505060408051808201909152600981527f474e552047504c763300000000000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4c47504c2d322e312d6f6e6c79000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261779c906173b0565b806178015750604080518082018252601181527f4c47504c2d322e312d6f722d6c6174657200000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617801906173b0565b1561784157505060408051808201909152600c81527f474e55204c47504c76322e3100000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4c47504c2d332e302d6f6e6c7900000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526178a0906173b0565b806179055750604080518082018252601181527f4c47504c2d332e302d6f722d6c6174657200000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617905906173b0565b1561794557505060408051808201909152600a81527f474e55204c47504c7633000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f4253442d322d436c617573650000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526179a4906173b0565b156179e457505060408051808201909152600c81527f4253442d322d436c6175736500000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f4253442d332d436c61757365000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617a43906173b0565b15617a8357505060408051808201909152600c81527f4253442d332d436c6175736500000000000000000000000000000000000000006020820152919050565b604080518082018252600781527f4d504c2d322e300000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617ae2906173b0565b15617b2257505060408051808201909152600781527f4d504c2d322e30000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600781527f4f534c2d332e300000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617b81906173b0565b15617bc157505060408051808201909152600781527f4f534c2d332e30000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600a81527f4170616368652d322e300000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617c20906173b0565b15617c6057505060408051808201909152600a81527f4170616368652d322e30000000000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4147504c2d332e302d6f6e6c790000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617cbf906173b0565b80617d245750604080518082018252601181527f4147504c2d332e302d6f722d6c6174657200000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617d24906173b0565b15617d6457505060408051808201909152600a81527f474e55204147504c7633000000000000000000000000000000000000000000006020820152919050565b604080518082018252600881527f4255534c2d312e3100000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617dc3906173b0565b15617e0357505060408051808201909152600781527f42534c20312e31000000000000000000000000000000000000000000000000006020820152919050565b60408084015184519151614eab929060200161a1ee565b60608060005b8451811015617ea55781858281518110617e3c57617e3c619aad565b6020026020010151604051602001617e55929190619604565b604051602081830303815290604052915060018551617e74919061a0fd565b8114617e9d5781604051602001617e8b919061a357565b60405160208183030381529060405291505b600101617e20565b5060408051600380825260808201909252600091816020015b6060815260200190600190039081617ebe5790505090508381600081518110617ee957617ee9619aad565b60200260200101819052506040518060400160405280600281526020017f2d6300000000000000000000000000000000000000000000000000000000000081525081600181518110617f3d57617f3d619aad565b60200260200101819052508181600281518110617f5c57617f5c619aad565b6020908102919091010152949350505050565b6020808301518351835192840151600093617f8d9291849190618966565b14159392505050565b60408051808201909152600080825260208201526000617fc88460000151856020015185600001518660200151618a77565b9050836020015181617fda919061a0fd565b84518590617fe990839061a0fd565b90525060208401525090919050565b604080518082019091526000808252602082015281518351101561801d575081614cdf565b60208083015190840151600191146180445750815160208481015190840151829020919020145b80156180755782518451859061805b90839061a0fd565b90525082516020850180516180719083906192a1565b9052505b509192915050565b604080518082019091526000808252602082015261809c838383618b97565b5092915050565b60606000826000015167ffffffffffffffff8111156180c4576180c46194e7565b6040519080825280601f01601f1916602001820160405280156180ee576020820181803683370190505b509050600060208201905061809c8185602001518660000151618c42565b606060006181186150d5565b6040805160ff808252612000820190925291925060009190816020015b606081526020019060019003908161813557905050905060006040518060400160405280600381526020017f6e7078000000000000000000000000000000000000000000000000000000000081525082828061819090619c1a565b935060ff16815181106181a5576181a5619aad565b60200260200101819052506040518060400160405280600781526020017f5e312e33322e33000000000000000000000000000000000000000000000000008152506040516020016181f6919061a398565b60405160208183030381529060405282828061821190619c1a565b935060ff168151811061822657618226619aad565b60200260200101819052506040518060400160405280600881526020017f76616c696461746500000000000000000000000000000000000000000000000081525082828061827390619c1a565b935060ff168151811061828857618288619aad565b6020026020010181905250826040516020016182a49190619b48565b6040516020818303038152906040528282806182bf90619c1a565b935060ff16815181106182d4576182d4619aad565b60200260200101819052506040518060400160405280600a81526020017f2d2d636f6e74726163740000000000000000000000000000000000000000000081525082828061832190619c1a565b935060ff168151811061833657618336619aad565b602002602001018190525061834b8784618cbc565b828261835681619c1a565b935060ff168151811061836b5761836b619aad565b6020908102919091010152855151156184175760408051808201909152600b81527f2d2d7265666572656e6365000000000000000000000000000000000000000000602082015282826183bd81619c1a565b935060ff16815181106183d2576183d2619aad565b60200260200101819052506183eb866000015184618cbc565b82826183f681619c1a565b935060ff168151811061840b5761840b619aad565b60200260200101819052505b8560800151156184855760408051808201909152601881527f2d2d756e73616665536b697053746f72616765436865636b00000000000000006020820152828261846081619c1a565b935060ff168151811061847557618475619aad565b60200260200101819052506184eb565b84156184eb5760408051808201909152601281527f2d2d726571756972655265666572656e63650000000000000000000000000000602082015282826184ca81619c1a565b935060ff16815181106184df576184df619aad565b60200260200101819052505b604086015151156185875760408051808201909152600d81527f2d2d756e73616665416c6c6f77000000000000000000000000000000000000006020820152828261853581619c1a565b935060ff168151811061854a5761854a619aad565b6020026020010181905250856040015182828061856690619c1a565b935060ff168151811061857b5761857b619aad565b60200260200101819052505b8560600151156185f15760408051808201909152601481527f2d2d756e73616665416c6c6f7752656e616d6573000000000000000000000000602082015282826185d081619c1a565b935060ff16815181106185e5576185e5619aad565b60200260200101819052505b60008160ff1667ffffffffffffffff81111561860f5761860f6194e7565b60405190808252806020026020018201604052801561864257816020015b606081526020019060019003908161862d5790505b50905060005b8260ff168160ff16101561869b57838160ff168151811061866b5761866b619aad565b6020026020010151828260ff168151811061868857618688619aad565b6020908102919091010152600101618648565b50979650505050505050565b60408051808201909152600080825260208201528151835110156186cc575081614cdf565b815183516020850151600092916186e2916192a1565b6186ec919061a0fd565b6020840151909150600190821461870d575082516020840151819020908220145b80156187285783518551869061872490839061a0fd565b9052505b50929392505050565b60008082600001516187558560000151866020015186600001518760200151618a77565b61875f91906192a1565b90505b8351602085015161877391906192a1565b811161809c57816187838161a3dd565b92505082600001516187ba85602001518361879e919061a0fd565b86516187aa919061a0fd565b8386600001518760200151618a77565b6187c491906192a1565b9050618762565b606060006187d98484618731565b6187e49060016192a1565b67ffffffffffffffff8111156187fc576187fc6194e7565b60405190808252806020026020018201604052801561882f57816020015b606081526020019060019003908161881a5790505b50905060005b8151811015616aa45761884b616cc6868661807d565b82828151811061885d5761885d619aad565b6020908102919091010152600101618835565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f01000000000000000083106188b9577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef810000000083106188e5576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc10000831061890357662386f26fc10000830492506010015b6305f5e100831061891b576305f5e100830492506008015b612710831061892f57612710830492506004015b60648310618941576064830492506002015b600a8310614cdf5760010192915050565b600061895e8383618cfc565b159392505050565b600080858411618a6d5760208411618a1957600084156189b157600161898d86602061a0fd565b61899890600861a3f7565b6189a390600261a4f5565b6189ad919061a0fd565b1990505b83518116856189c089896192a1565b6189ca919061a0fd565b805190935082165b818114618a04578784116189ec57879450505050506166d5565b836189f68161a501565b9450508284511690506189d2565b618a0e87856192a1565b9450505050506166d5565b838320618a26858861a0fd565b618a3090876192a1565b91505b858210618a6b57848220808203618a5857618a4e86846192a1565b93505050506166d5565b618a6360018461a0fd565b925050618a33565b505b5092949350505050565b60008381868511618b825760208511618b315760008515618ac3576001618a9f87602061a0fd565b618aaa90600861a3f7565b618ab590600261a4f5565b618abf919061a0fd565b1990505b84518116600087618ad48b8b6192a1565b618ade919061a0fd565b855190915083165b828114618b2357818610618b0b57618afe8b8b6192a1565b96505050505050506166d5565b85618b158161a3dd565b965050838651169050618ae6565b8596505050505050506166d5565b508383206000905b618b43868961a0fd565b8211618b8057858320808203618b5f57839450505050506166d5565b618b6a6001856192a1565b9350508180618b789061a3dd565b925050618b39565b505b618b8c87876192a1565b979650505050505050565b60408051808201909152600080825260208201526000618bc98560000151866020015186600001518760200151618a77565b602080870180519186019190915251909150618be5908261a0fd565b835284516020860151618bf891906192a1565b8103618c075760008552618c39565b83518351618c1591906192a1565b85518690618c2490839061a0fd565b9052508351618c3390826192a1565b60208601525b50909392505050565b60208110618c7a5781518352618c596020846192a1565b9250618c666020836192a1565b9150618c7360208261a0fd565b9050618c42565b6000198115618ca9576001618c9083602061a0fd565b618c9c9061010061a4f5565b618ca6919061a0fd565b90505b9151835183169219169190911790915250565b60606000618cca84846151a8565b8051602080830151604051939450618ce49390910161a518565b60405160208183030381529060405291505092915050565b8151815160009190811115618d0f575081515b6020808501519084015160005b83811015618dc85782518251808214618d98576000196020871015618d7757600184618d4989602061a0fd565b618d5391906192a1565b618d5e90600861a3f7565b618d6990600261a4f5565b618d73919061a0fd565b1990505b8181168382168181039114618d95579750614cdf9650505050505050565b50505b618da36020866192a1565b9450618db06020856192a1565b93505050602081618dc191906192a1565b9050618d1c565b5084518651615856919061a570565b6112a68061a59183390190565b61140b8061b83783390190565b61155a8061cc4283390190565b610d5e8061e19c83390190565b6040518060e00160405280606081526020016060815260200160608152602001600015158152602001600015158152602001600015158152602001618e4e618e53565b905290565b60405180610100016040528060001515815260200160001515815260200160608152602001600080191681526020016060815260200160608152602001600015158152602001618e4e6040518060800160405280600081526020016000815260200160008152602001600081525090565b602080825282518282018190526000918401906040840190835b81811015618f055783516001600160a01b0316835260209384019390920191600101618ede565b509095945050505050565b60005b83811015618f2b578181015183820152602001618f13565b50506000910152565b60008151808452618f4c816020860160208601618f10565b601f01601f19169290920160200192915050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b8281101561905c577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452815180516001600160a01b03168652602090810151604082880181905281519088018190529101906060600582901b88018101919088019060005b81811015619042577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa08a850301835261902c848651618f34565b6020958601959094509290920191600101618ff2565b509197505050602094850194929092019150600101618f88565b50929695505050505050565b600081518084526020840193506020830160005b828110156190bc5781517fffffffff000000000000000000000000000000000000000000000000000000001686526020958601959091019060010161907c565b5093949350505050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b8281101561905c577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc087860301845281518051604087526191326040880182618f34565b905060208201519150868103602088015261914d8183619068565b9650505060209384019391909101906001016190ee565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b8281101561905c577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08786030184526191c6858351618f34565b9450602093840193919091019060010161918c565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b8281101561905c577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc087860301845281516001600160a01b038151168652602081015190506040602087015261925c6040870182619068565b9550506020938401939190910190600101619203565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b80820180821115614cdf57614cdf619272565b6001600160a01b03841681528260208201526080604082015260006192dc6080830184618f34565b905060006060830152949350505050565b600181811c9082168061930157607f821691505b602082108103616fa1577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006020828403121561934c57600080fd5b5051919050565b6001600160a01b0384168152826020820152606060408201526000616f876060830184618f34565b8281526040602082015260006166d56040830184618f34565b6001600160a01b03851681528360208201526080604082015260006193bc6080830185618f34565b905082606083015295945050505050565b602081526000614dd86020830184618f34565b600082619416577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b6001600160a01b03831681526040602082015260006166d56040830184618f34565b7f4661696c656420746f206465706c6f7920636f6e74726163742000000000000081526000835161947581601a850160208801618f10565b7f3a20000000000000000000000000000000000000000000000000000000000000601a9184019182015283516194b281601c840160208801618f10565b01601c01949350505050565b6000602082840312156194d057600080fd5b81516001600160a01b0381168114614dd857600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040516060810167ffffffffffffffff81118282101715619539576195396194e7565b60405290565b60008067ffffffffffffffff84111561955a5761955a6194e7565b50604051601f19601f85018116603f0116810181811067ffffffffffffffff82111715619589576195896194e7565b6040528381529050808284018510156195a157600080fd5b616aa4846020830185618f10565b600082601f8301126195c057600080fd5b614dd88383516020850161953f565b6000602082840312156195e157600080fd5b815167ffffffffffffffff8111156195f857600080fd5b614cdb848285016195af565b60008351619616818460208801618f10565b83519083019061962a818360208801618f10565b01949350505050565b7f4661696c656420746f206465706c6f7920636f6e74726163742000000000000081526000835161966b81601a850160208801618f10565b7f207573696e6720636f6e7374727563746f722064617461202200000000000000601a9184019182015283516196a8816033840160208801618f10565b7f220000000000000000000000000000000000000000000000000000000000000060339290910191820152603401949350505050565b60408152600b60408201527f464f554e4452595f4f55540000000000000000000000000000000000000000006060820152608060208201526000614dd86080830184618f34565b60006020828403121561973757600080fd5b815167ffffffffffffffff81111561974e57600080fd5b8201601f8101841361975f57600080fd5b614cdb8482516020840161953f565b60008551619780818460208a01618f10565b7f2f0000000000000000000000000000000000000000000000000000000000000090830190815285516197ba816001840160208a01618f10565b7f2f000000000000000000000000000000000000000000000000000000000000006001929091019182015284516197f8816002840160208901618f10565b6001818301019150507f2f000000000000000000000000000000000000000000000000000000000000006001820152835161983a816002840160208801618f10565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600292909101918201526007019695505050505050565b6040815260006198856040830184618f34565b8281036020840152600481527f2e6173740000000000000000000000000000000000000000000000000000000060208201526040810191505092915050565b6000602082840312156198d657600080fd5b81518015158114614dd857600080fd5b7f436f756c64206e6f742066696e642041535420696e206172746966616374200081526000825161991e81601f850160208701618f10565b7f2e205365742060617374203d20747275656020696e20666f756e6472792e746f601f9390910192830152507f6d6c000000000000000000000000000000000000000000000000000000000000603f820152604101919050565b60408152600061998b6040830184618f34565b8281036020840152601181527f2e6173742e6162736f6c7574655061746800000000000000000000000000000060208201526040810191505092915050565b6040815260006199dd6040830184618f34565b8281036020840152600c81527f2e6173742e6c6963656e7365000000000000000000000000000000000000000060208201526040810191505092915050565b7f2e6d657461646174612e736f75726365732e5b27000000000000000000000000815260008251619a54816014850160208701618f10565b7f275d2e6b656363616b32353600000000000000000000000000000000000000006014939091019283015250602001919050565b604081526000619a9b6040830185618f34565b8281036020840152614dd48185618f34565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f2200000000000000000000000000000000000000000000000000000000000000815260008251619b14816001850160208701618f10565b7f22000000000000000000000000000000000000000000000000000000000000006001939091019283015250600201919050565b60008251619b5a818460208701618f10565b7f2f6275696c642d696e666f000000000000000000000000000000000000000000920191825250600b01919050565b7f436f756c64206e6f742066696e64206275696c642d696e666f2066696c65207781527f697468206d61746368696e6720736f7572636520636f6465206861736820666f60208201527f7220636f6e747261637420000000000000000000000000000000000000000000604082015260008251619c0d81604b850160208701618f10565b91909101604b0192915050565b600060ff821660ff8103619c3057619c30619272565b60010192915050565b7f406f70656e7a657070656c696e2f646566656e6465722d6465706c6f792d636c81527f69656e742d636c69400000000000000000000000000000000000000000000000602082015260008251619c97816029850160208701618f10565b9190910160290192915050565b60408152601660408201527f4f50454e5a455050454c494e5f424153485f50415448000000000000000000006060820152608060208201526000614dd86080830184618f34565b600060208284031215619cfd57600080fd5b815167ffffffffffffffff811115619d1457600080fd5b820160608185031215619d2657600080fd5b619d2e619516565b81518060030b8114619d3f57600080fd5b8152602082015167ffffffffffffffff811115619d5b57600080fd5b619d67868285016195af565b602083015250604082015167ffffffffffffffff811115619d8757600080fd5b619d93868285016195af565b604083015250949350505050565b7f4661696c656420746f2072756e206261736820636f6d6d616e6420776974682081527f2200000000000000000000000000000000000000000000000000000000000000602082015260008251619dff816021850160208701618f10565b7f222e20496620796f7520617265207573696e672057696e646f77732c2073657460219390910192830152507f20746865204f50454e5a455050454c494e5f424153485f5041544820656e766960418201527f726f6e6d656e74207661726961626c6520746f207468652066756c6c7920717560618201527f616c69666965642070617468206f66207468652062617368206578656375746160818201527f626c652e20466f72206578616d706c652c20696620796f75206172652075736960a18201527f6e672047697420666f722057696e646f77732c206164642074686520666f6c6c60c18201527f6f77696e67206c696e6520696e20746865202e656e762066696c65206f66207960e18201527f6f75722070726f6a65637420287573696e6720666f727761726420736c6173686101018201527f6573293a0a4f50454e5a455050454c494e5f424153485f504154483d22433a2f6101218201527f50726f6772616d2046696c65732f4769742f62696e2f6261736822000000000061014182015261015c01919050565b7f4661696c656420746f2066696e64206c696e652077697468207072656669782081527f2700000000000000000000000000000000000000000000000000000000000000602082015260008351619feb816021850160208801618f10565b7f2720696e206f75747075743a2000000000000000000000000000000000000000602191840191820152835161a02881602e840160208801618f10565b01602e01949350505050565b7f4661696c656420746f2072756e2075706772616465207361666574792076616c81527f69646174696f6e3a200000000000000000000000000000000000000000000000602082015260008251619c97816029850160208701618f10565b7f55706772616465207361666574792076616c69646174696f6e206661696c656481527f3a0a00000000000000000000000000000000000000000000000000000000000060208201526000825161a0f0816022850160208701618f10565b9190910160220192915050565b81810381811115614cdf57614cdf619272565b7f436f6e7472616374206e616d652000000000000000000000000000000000000081526000825161a14881600e850160208701618f10565b7f206d75737420626520696e2074686520666f726d6174204d79436f6e74726163600e9390910192830152507f742e736f6c3a4d79436f6e7472616374206f72204d79436f6e74726163742e73602e8201527f6f6c206f72206f75742f4d79436f6e74726163742e736f6c2f4d79436f6e7472604e8201527f6163742e6a736f6e000000000000000000000000000000000000000000000000606e820152607601919050565b7f53504458206c6963656e7365206964656e74696669657220000000000000000081526000835161a226816018850160208801618f10565b7f20696e2000000000000000000000000000000000000000000000000000000000601891840191820152835161a26381601c840160208801618f10565b7f20646f6573206e6f74206c6f6f6b206c696b65206120737570706f7274656420601c92909101918201527f6c6963656e736520666f7220626c6f636b206578706c6f726572207665726966603c8201527f69636174696f6e2e205573652074686520606c6963656e73655479706560206f605c8201527f7074696f6e20746f20737065636966792061206c6963656e736520747970652c607c8201527f206f7220736574207468652060736b69704c6963656e73655479706560206f70609c8201527f74696f6e20746f2060747275656020746f20736b69702e00000000000000000060bc82015260d301949350505050565b6000825161a369818460208701618f10565b7f2000000000000000000000000000000000000000000000000000000000000000920191825250600101919050565b7f406f70656e7a657070656c696e2f75706772616465732d636f7265400000000081526000825161a3d081601c850160208701618f10565b91909101601c0192915050565b6000600019820361a3f05761a3f0619272565b5060010190565b8082028115828204841417614cdf57614cdf619272565b6001815b600184111561a4495780850481111561a42d5761a42d619272565b600184161561a43b57908102905b60019390931c92800261a412565b935093915050565b60008261a46057506001614cdf565b8161a46d57506000614cdf565b816001811461a483576002811461a48d5761a4a9565b6001915050614cdf565b60ff84111561a49e5761a49e619272565b50506001821b614cdf565b5060208310610133831016604e8410600b841016171561a4cc575081810a614cdf565b61a4d9600019848461a40e565b806000190482111561a4ed5761a4ed619272565b029392505050565b6000614dd8838361a451565b60008161a5105761a510619272565b506000190190565b6000835161a52a818460208801618f10565b7f3a00000000000000000000000000000000000000000000000000000000000000908301908152835161a564816001840160208801618f10565b01600101949350505050565b818103600083128015838313168383128216171561809c5761809c61927256fe608060405234801561001057600080fd5b506040516112a63803806112a683398101604081905261002f91610110565b604051806040016040528060048152602001635a65746160e01b815250604051806040016040528060048152602001635a45544160e01b815250816003908161007891906101e2565b50600461008582826101e2565b5050506001600160a01b03821615806100a557506001600160a01b038116155b156100c35760405163e6c4247b60e01b815260040160405180910390fd5b600680546001600160a01b039384166001600160a01b031991821617909155600780549290931691161790556102a0565b80516001600160a01b038116811461010b57600080fd5b919050565b6000806040838503121561012357600080fd5b61012c836100f4565b915061013a602084016100f4565b90509250929050565b634e487b7160e01b600052604160045260246000fd5b600181811c9082168061016d57607f821691505b60208210810361018d57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156101dd57806000526020600020601f840160051c810160208510156101ba5750805b601f840160051c820191505b818110156101da57600081556001016101c6565b50505b505050565b81516001600160401b038111156101fb576101fb610143565b61020f816102098454610159565b84610193565b6020601f821160018114610243576000831561022b5750848201515b600019600385901b1c1916600184901b1784556101da565b600084815260208120601f198516915b828110156102735787850151825560209485019460019092019101610253565b50848210156102915786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b610ff7806102af6000396000f3fe608060405234801561001057600080fd5b506004361061011b5760003560e01c806342966c68116100b257806379cc679011610081578063a9059cbb11610066578063a9059cbb1461028e578063bff9662a146102a1578063dd62ed3e146102c157600080fd5b806379cc67901461027357806395d89b411461028657600080fd5b806342966c68146102025780635b1125911461021557806370a0823114610235578063779e3b631461026b57600080fd5b80631e458bee116100ee5780631e458bee1461018857806323b872dd1461019b578063313ce567146101ae578063328a01d0146101bd57600080fd5b806306fdde0314610120578063095ea7b31461013e57806315d57fd41461016157806318160ddd14610176575b600080fd5b610128610307565b6040516101359190610d97565b60405180910390f35b61015161014c366004610e2c565b610399565b6040519015158152602001610135565b61017461016f366004610e56565b6103b3565b005b6002545b604051908152602001610135565b610174610196366004610e89565b61057e565b6101516101a9366004610ebc565b610631565b60405160128152602001610135565b6007546101dd9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610135565b610174610210366004610ef9565b610655565b6006546101dd9073ffffffffffffffffffffffffffffffffffffffff1681565b61017a610243366004610f12565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b610174610662565b610174610281366004610e2c565b610786565b610128610837565b61015161029c366004610e2c565b610846565b6005546101dd9073ffffffffffffffffffffffffffffffffffffffff1681565b61017a6102cf366004610e56565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b60606003805461031690610f34565b80601f016020809104026020016040519081016040528092919081815260200182805461034290610f34565b801561038f5780601f106103645761010080835404028352916020019161038f565b820191906000526020600020905b81548152906001019060200180831161037257829003601f168201915b5050505050905090565b6000336103a7818585610854565b60019150505b92915050565b60075473ffffffffffffffffffffffffffffffffffffffff1633148015906103f3575060065473ffffffffffffffffffffffffffffffffffffffff163314155b15610431576040517fcdfcef970000000000000000000000000000000000000000000000000000000081523360048201526024015b60405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff82161580610468575073ffffffffffffffffffffffffffffffffffffffff8116155b1561049f576040517fe6c4247b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6006805473ffffffffffffffffffffffffffffffffffffffff8481167fffffffffffffffffffffffff0000000000000000000000000000000000000000928316811790935560058054918516919092161790556040805133815260208101929092527fe79965b5c67dcfb2cf5fe152715e4a7256cee62a3d5dd8484fd8a8539eb8beff910160405180910390a16040805133815273ffffffffffffffffffffffffffffffffffffffff831660208201527f1b9352454524a57a51f24f67dc66d898f616922cd1f7a12d73570ece12b1975c910160405180910390a15050565b60055473ffffffffffffffffffffffffffffffffffffffff1633146105d1576040517f3fe32fba000000000000000000000000000000000000000000000000000000008152336004820152602401610428565b6105db8383610866565b808373ffffffffffffffffffffffffffffffffffffffff167fc263b302aec62d29105026245f19e16f8e0137066ccd4a8bd941f716bd4096bb8460405161062491815260200190565b60405180910390a3505050565b60003361063f8582856108c6565b61064a858585610995565b506001949350505050565b61065f3382610a40565b50565b60075473ffffffffffffffffffffffffffffffffffffffff1633146106b5576040517fe700765e000000000000000000000000000000000000000000000000000000008152336004820152602401610428565b60065473ffffffffffffffffffffffffffffffffffffffff16610704576040517fe6c4247b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600654600780547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff90921691821790556040805133815260208101929092527f5104c9abdc7d111c2aeb4ce890ac70274a4be2ee83f46a62551be5e6ebc82dd0910160405180910390a1565b60055473ffffffffffffffffffffffffffffffffffffffff1633146107d9576040517f3fe32fba000000000000000000000000000000000000000000000000000000008152336004820152602401610428565b6107e38282610a9c565b8173ffffffffffffffffffffffffffffffffffffffff167f919f7e2092ffcc9d09f599be18d8152860b0c054df788a33bc549cdd9d0f15b18260405161082b91815260200190565b60405180910390a25050565b60606004805461031690610f34565b6000336103a7818585610995565b6108618383836001610ab1565b505050565b73ffffffffffffffffffffffffffffffffffffffff82166108b6576040517fec442f0500000000000000000000000000000000000000000000000000000000815260006004820152602401610428565b6108c260008383610bf9565b5050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811461098f5781811015610980576040517ffb8f41b200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff841660048201526024810182905260448101839052606401610428565b61098f84848484036000610ab1565b50505050565b73ffffffffffffffffffffffffffffffffffffffff83166109e5576040517f96c6fd1e00000000000000000000000000000000000000000000000000000000815260006004820152602401610428565b73ffffffffffffffffffffffffffffffffffffffff8216610a35576040517fec442f0500000000000000000000000000000000000000000000000000000000815260006004820152602401610428565b610861838383610bf9565b73ffffffffffffffffffffffffffffffffffffffff8216610a90576040517f96c6fd1e00000000000000000000000000000000000000000000000000000000815260006004820152602401610428565b6108c282600083610bf9565b610aa78233836108c6565b6108c28282610a40565b73ffffffffffffffffffffffffffffffffffffffff8416610b01576040517fe602df0500000000000000000000000000000000000000000000000000000000815260006004820152602401610428565b73ffffffffffffffffffffffffffffffffffffffff8316610b51576040517f94280d6200000000000000000000000000000000000000000000000000000000815260006004820152602401610428565b73ffffffffffffffffffffffffffffffffffffffff8085166000908152600160209081526040808320938716835292905220829055801561098f578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051610beb91815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff8316610c31578060026000828254610c269190610f87565b90915550610ce39050565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205481811015610cb7576040517fe450d38c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff851660048201526024810182905260448101839052606401610428565b73ffffffffffffffffffffffffffffffffffffffff841660009081526020819052604090209082900390555b73ffffffffffffffffffffffffffffffffffffffff8216610d0c57600280548290039055610d38565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090208054820190555b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161062491815260200190565b602081526000825180602084015260005b81811015610dc55760208186018101516040868401015201610da8565b5060006040828501015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011684010191505092915050565b803573ffffffffffffffffffffffffffffffffffffffff81168114610e2757600080fd5b919050565b60008060408385031215610e3f57600080fd5b610e4883610e03565b946020939093013593505050565b60008060408385031215610e6957600080fd5b610e7283610e03565b9150610e8060208401610e03565b90509250929050565b600080600060608486031215610e9e57600080fd5b610ea784610e03565b95602085013595506040909401359392505050565b600080600060608486031215610ed157600080fd5b610eda84610e03565b9250610ee860208501610e03565b929592945050506040919091013590565b600060208284031215610f0b57600080fd5b5035919050565b600060208284031215610f2457600080fd5b610f2d82610e03565b9392505050565b600181811c90821680610f4857607f821691505b602082108103610f81577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b808201808211156103ad577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea2646970667358221220085f01204b33dc17013c78c74fbca32a3da2c0b384ce7c8878c889551af28c6164736f6c634300081a003360a060405234801561001057600080fd5b5060405161140b38038061140b83398101604081905261002f916101b3565b60016000556002805460ff191690556001600160a01b038316158061005b57506001600160a01b038216155b8061006d57506001600160a01b038116155b1561008b5760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b0383166080526100a3600082610102565b506100ce7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a82610102565b506100f97f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e483610102565b505050506101f6565b60008281526001602090815260408083206001600160a01b038516845290915281205460ff1661018d5760008381526001602081815260408084206001600160a01b0387168086529252808420805460ff19169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a4506001610191565b5060005b92915050565b80516001600160a01b03811681146101ae57600080fd5b919050565b6000806000606084860312156101c857600080fd5b6101d184610197565b92506101df60208501610197565b91506101ed60408501610197565b90509250925092565b6080516111de61022d60003960008181610132015281816103c5015281816104270152818161065801526106ba01526111de6000f3fe608060405234801561001057600080fd5b50600436106101005760003560e01c80638456cb5911610097578063c8a0236211610066578063c8a0236214610276578063d547741f14610289578063d9caed121461029c578063e63ab1e9146102af57600080fd5b80638456cb59146101f957806385f438c11461020157806391d1485414610228578063a217fddf1461026e57600080fd5b80632f2ff15d116100d35780632f2ff15d146101c057806336568abe146101d35780633f4ba83a146101e65780635c975abb146101ee57600080fd5b806301ffc9a714610105578063116191b61461012d57806321fc65f214610179578063248a9ca31461018e575b600080fd5b610118610113366004610f04565b6102d6565b60405190151581526020015b60405180910390f35b6101547f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610124565b61018c610187366004610f6f565b61036f565b005b6101b261019c36600461100c565b6000908152600160208190526040909120015490565b604051908152602001610124565b61018c6101ce366004611025565b610511565b61018c6101e1366004611025565b61053d565b61018c61059b565b60025460ff16610118565b61018c6105d0565b6101b27f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b610118610236366004611025565b600091825260016020908152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b6101b2600081565b61018c610284366004610f6f565b610602565b61018c610297366004611025565b61078a565b61018c6102aa366004611051565b6107b0565b6101b27f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061036957507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b61037761087d565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e46103a1816108c0565b6103a96108ca565b6103ea73ffffffffffffffffffffffffffffffffffffffff87167f000000000000000000000000000000000000000000000000000000000000000086610909565b6040517f5131ab5900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690635131ab599061046490899089908990899089906004016110d7565b600060405180830381600087803b15801561047e57600080fd5b505af1158015610492573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167f85b5be9cf454e05e0bddf49315178102227c312078eefa3c00294fb4d912ae4e8686866040516104f793929190611134565b60405180910390a35061050a6001600055565b5050505050565b6000828152600160208190526040909120015461052d816108c0565b6105378383610996565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8116331461058c576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6105968282610a61565b505050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a6105c5816108c0565b6105cd610b20565b50565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a6105fa816108c0565b6105cd610b9d565b61060a61087d565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e4610634816108c0565b61063c6108ca565b61067d73ffffffffffffffffffffffffffffffffffffffff87167f000000000000000000000000000000000000000000000000000000000000000086610909565b6040517fb8969bd400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063b8969bd4906106f790899089908990899089906004016110d7565b600060405180830381600087803b15801561071157600080fd5b505af1158015610725573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fb9d4efa96044e5f5e03e696fa9ae2ff66911cc27e8a637c3627c75bc5b2241c88686866040516104f793929190611134565b600082815260016020819052604090912001546107a6816108c0565b6105378383610a61565b6107b861087d565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e46107e2816108c0565b6107ea6108ca565b61080b73ffffffffffffffffffffffffffffffffffffffff85168484610909565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f9b1bfa7fa9ee420a16e124f794c35ac9f90472acc99140eb2f6447c714cad8eb8460405161086a91815260200190565b60405180910390a3506105966001600055565b6002600054036108b9576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b6105cd8133610bf8565b60025460ff1615610907576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6040805173ffffffffffffffffffffffffffffffffffffffff8416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb00000000000000000000000000000000000000000000000000000000179052610596908490610c89565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff16610a5957600083815260016020818152604080842073ffffffffffffffffffffffffffffffffffffffff8716808652925280842080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a4506001610369565b506000610369565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff1615610a5957600083815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8616808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a4506001610369565b610b28610d1f565b600280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b610ba56108ca565b600280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258610b733390565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16610c85576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82166004820152602481018390526044015b60405180910390fd5b5050565b6000610cab73ffffffffffffffffffffffffffffffffffffffff841683610d5b565b90508051600014158015610cd0575080806020019051810190610cce9190611157565b155b15610596576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84166004820152602401610c7c565b60025460ff16610907576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6060610d6983836000610d70565b9392505050565b606081471015610dae576040517fcd786059000000000000000000000000000000000000000000000000000000008152306004820152602401610c7c565b6000808573ffffffffffffffffffffffffffffffffffffffff168486604051610dd79190611179565b60006040518083038185875af1925050503d8060008114610e14576040519150601f19603f3d011682016040523d82523d6000602084013e610e19565b606091505b5091509150610e29868383610e33565b9695505050505050565b606082610e4857610e4382610ec2565b610d69565b8151158015610e6c575073ffffffffffffffffffffffffffffffffffffffff84163b155b15610ebb576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85166004820152602401610c7c565b5080610d69565b805115610ed25780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060208284031215610f1657600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610d6957600080fd5b803573ffffffffffffffffffffffffffffffffffffffff81168114610f6a57600080fd5b919050565b600080600080600060808688031215610f8757600080fd5b610f9086610f46565b9450610f9e60208701610f46565b935060408601359250606086013567ffffffffffffffff811115610fc157600080fd5b8601601f81018813610fd257600080fd5b803567ffffffffffffffff811115610fe957600080fd5b886020828401011115610ffb57600080fd5b959894975092955050506020019190565b60006020828403121561101e57600080fd5b5035919050565b6000806040838503121561103857600080fd5b8235915061104860208401610f46565b90509250929050565b60008060006060848603121561106657600080fd5b61106f84610f46565b925061107d60208501610f46565b929592945050506040919091013590565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff8616815273ffffffffffffffffffffffffffffffffffffffff8516602082015283604082015260806060820152600061112960808301848661108e565b979650505050505050565b83815260406020820152600061114e60408301848661108e565b95945050505050565b60006020828403121561116957600080fd5b81518015158114610d6957600080fd5b6000825160005b8181101561119a5760208186018101518583015201611180565b50600092019182525091905056fea264697066735822122069d5c5c3cb2752c876b6a2138d8d9b66bac6bd1b48a1fe98417eea81faf02a3e64736f6c634300081a003360c060405260001960035534801561001657600080fd5b5060405161155a38038061155a83398101604081905261003591610220565b60016000819055805460ff19169055838383836001600160a01b038416158061006557506001600160a01b038316155b8061007757506001600160a01b038216155b8061008957506001600160a01b038116155b156100a75760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b03808516608052831660a0526100c5600082610154565b506100f07f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e483610154565b5061011b7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb83610154565b506101467f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a82610154565b505050505050505050610274565b60008281526002602090815260408083206001600160a01b038516845290915281205460ff166101fa5760008381526002602090815260408083206001600160a01b03861684529091529020805460ff191660011790556101b23390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45060016101fe565b5060005b92915050565b80516001600160a01b038116811461021b57600080fd5b919050565b6000806000806080858703121561023657600080fd5b61023f85610204565b935061024d60208601610204565b925061025b60408601610204565b915061026960608601610204565b905092959194509250565b60805160a0516112826102d86000396000818161021d01528181610531015281816108240152818161097b01528181610ad00152610bf20152600081816101d1015281816104a1015281816105040152818161079401526107f701526112826000f3fe608060405234801561001057600080fd5b50600436106101775760003560e01c80635e3e9fef116100d857806391d148541161008c578063d547741f11610066578063d547741f14610386578063d5abeb0114610399578063e63ab1e9146103a257600080fd5b806391d1485414610311578063a217fddf14610357578063a783c7891461035f57600080fd5b8063743e0c9b116100bd578063743e0c9b146102cf5780638456cb59146102e257806385f438c1146102ea57600080fd5b80635e3e9fef146102a95780636f8b44b0146102bc57600080fd5b8063248a9ca31161012f57806336568abe1161011457806336568abe146102835780633f4ba83a146102965780635c975abb1461029e57600080fd5b8063248a9ca31461023f5780632f2ff15d1461027057600080fd5b8063106e629011610160578063106e6290146101b9578063116191b6146101cc57806321e093b11461021857600080fd5b806301ffc9a71461017c57806302d5c899146101a4575b600080fd5b61018f61018a366004610fb4565b6103c9565b60405190151581526020015b60405180910390f35b6101b76101b2366004611026565b610462565b005b6101b76101c73660046110b8565b6105f7565b6101f37f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161019b565b6101f37f000000000000000000000000000000000000000000000000000000000000000081565b61026261024d3660046110eb565b60009081526002602052604090206001015490565b60405190815260200161019b565b6101b761027e366004611104565b61069c565b6101b7610291366004611104565b6106c7565b6101b7610720565b60015460ff1661018f565b6101b76102b7366004611026565b610755565b6101b76102ca3660046110eb565b6108d0565b6101b76102dd3660046110eb565b61093e565b6101b76109e8565b6102627f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b61018f61031f366004611104565b600091825260026020908152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b610262600081565b6102627f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb81565b6101b7610394366004611104565b610a1a565b61026260035481565b6102627f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061045c57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b61046a610a3f565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461049481610a82565b61049c610a8c565b6104c77f00000000000000000000000000000000000000000000000000000000000000008684610acb565b6040517fb8969bd400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063b8969bd490610561907f0000000000000000000000000000000000000000000000000000000000000000908a908a908a908a90600401611179565b600060405180830381600087803b15801561057b57600080fd5b505af115801561058f573d6000803e3d6000fd5b505050508573ffffffffffffffffffffffffffffffffffffffff167fba96f26bdda53eb8c8ba39045dfb4ff39753fbc7a6edcf250a88e75e78d102fe8686866040516105dd939291906111d6565b60405180910390a2506105f06001600055565b5050505050565b6105ff610a3f565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461062981610a82565b610631610a8c565b61063c848484610acb565b8373ffffffffffffffffffffffffffffffffffffffff167f884edad9ce6fa2440d8a54cc123490eb96d2768479d49ff9c7366125a94243648460405161068491815260200190565b60405180910390a2506106976001600055565b505050565b6000828152600260205260409020600101546106b781610a82565b6106c18383610c53565b50505050565b73ffffffffffffffffffffffffffffffffffffffff81163314610716576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6106978282610d53565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61074a81610a82565b610752610e12565b50565b61075d610a3f565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461078781610a82565b61078f610a8c565b6107ba7f00000000000000000000000000000000000000000000000000000000000000008684610acb565b6040517f5131ab5900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690635131ab5990610854907f0000000000000000000000000000000000000000000000000000000000000000908a908a908a908a90600401611179565b600060405180830381600087803b15801561086e57600080fd5b505af1158015610882573d6000803e3d6000fd5b505050508573ffffffffffffffffffffffffffffffffffffffff167f7772f56296d3a5202974a45c61c9188d844ab4d6eeb18c851e4b8d5384ca6ced8686866040516105dd939291906111d6565b7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb6108fa81610a82565b610902610a8c565b60038290556040518281527f7810bd47de260c3e9ee10061cf438099dd12256c79485f12f94dbccc981e806c9060200160405180910390a15050565b610946610a8c565b6040517f79cc6790000000000000000000000000000000000000000000000000000000008152336004820152602481018290527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16906379cc679090604401600060405180830381600087803b1580156109d457600080fd5b505af11580156105f0573d6000803e3d6000fd5b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610a1281610a82565b610752610e8f565b600082815260026020526040902060010154610a3581610a82565b6106c18383610d53565b600260005403610a7b576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b6107528133610ee8565b60015460ff1615610ac9576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6003547f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b39573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b5d91906111f9565b610b679084611212565b1115610b9f576040517fc30436e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f1e458bee00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff848116600483015260248201849052604482018390527f00000000000000000000000000000000000000000000000000000000000000001690631e458bee90606401600060405180830381600087803b158015610c3657600080fd5b505af1158015610c4a573d6000803e3d6000fd5b50505050505050565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff16610d4b57600083815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff86168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055610ce93390565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a450600161045c565b50600061045c565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff1615610d4b57600083815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8616808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a450600161045c565b610e1a610f78565b600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b610e97610a8c565b600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016811790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25833610e65565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16610f74576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff821660048201526024810183905260440160405180910390fd5b5050565b60015460ff16610ac9576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060208284031215610fc657600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610ff657600080fd5b9392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461102157600080fd5b919050565b60008060008060006080868803121561103e57600080fd5b61104786610ffd565b945060208601359350604086013567ffffffffffffffff81111561106a57600080fd5b8601601f8101881361107b57600080fd5b803567ffffffffffffffff81111561109257600080fd5b8860208284010111156110a457600080fd5b959894975060200195606001359392505050565b6000806000606084860312156110cd57600080fd5b6110d684610ffd565b95602085013595506040909401359392505050565b6000602082840312156110fd57600080fd5b5035919050565b6000806040838503121561111757600080fd5b8235915061112760208401610ffd565b90509250929050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff8616815273ffffffffffffffffffffffffffffffffffffffff851660208201528360408201526080606082015260006111cb608083018486611130565b979650505050505050565b8381526040602082015260006111f0604083018486611130565b95945050505050565b60006020828403121561120b57600080fd5b5051919050565b8082018082111561045c577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea2646970667358221220f784eb6e1655c2988d3f762737188cfee07a61da1d5b8456cc4f4e55cb339cfb64736f6c634300081a00336080604052348015600f57600080fd5b506001600055610d3a806100246000396000f3fe6080604052600436106100635760003560e01c8063c513169111610040578063c5131691146100c1578063e04d4f97146100e1578063f05b6abf146100f457005b8063357fc5a21461006c5780636ed701691461008c5780638fcaa0b5146100a157005b3661006a57005b005b34801561007857600080fd5b5061006a6100873660046106c0565b610114565b34801561009857600080fd5b5061006a6101aa565b3480156100ad57600080fd5b5061006a6100bc3660046106fc565b6101df565b3480156100cd57600080fd5b5061006a6100dc3660046106c0565b61021e565b61006a6100ef366004610895565b6102f9565b34801561010057600080fd5b5061006a61010f366004610981565b61033d565b61011c610372565b61013e73ffffffffffffffffffffffffffffffffffffffff83163383866103b5565b604080513381526020810185905273ffffffffffffffffffffffffffffffffffffffff848116828401528316606082015290517f2b58128f24a9f59127cc5b5430d70542b22220f2d9adaa86e442b816ab98af609181900360800190a16101a56001600055565b505050565b6040513381527fbcaadb46b82a48af60b608f58959ae6b8310d1b0a0d094c2e9ec3208ed39f2a09060200160405180910390a1565b7f0d3f65f00e631663aa85c96330b5c7a83bb29af3630c0063776f985edc3037aa33838360405161021293929190610a6b565b60405180910390a15050565b610226610372565b6000610233600285610ad5565b90508060000361026f576040517f1f2a200500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61029173ffffffffffffffffffffffffffffffffffffffff84163384846103b5565b604080513381526020810183905273ffffffffffffffffffffffffffffffffffffffff858116828401528416606082015290517f2b58128f24a9f59127cc5b5430d70542b22220f2d9adaa86e442b816ab98af609181900360800190a1506101a56001600055565b7f1f1ff1f5fb41346850b2f5c04e6c767e2f1c8a525c5c0c5cdb60cdf3ca5f62fa3334858585604051610330959493929190610b7e565b60405180910390a1505050565b7f74a53cd528a921fca7dbdee62f86819051d3cc98f214951f4238e8843f20b146338484846040516103309493929190610c08565b6002600054036103ae576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b6040805173ffffffffffffffffffffffffffffffffffffffff85811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd0000000000000000000000000000000000000000000000000000000017905261044a908590610450565b50505050565b600061047273ffffffffffffffffffffffffffffffffffffffff8416836104eb565b905080516000141580156104975750808060200190518101906104959190610ccb565b155b156101a5576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff841660048201526024015b60405180910390fd5b60606104f983836000610500565b9392505050565b60608147101561053e576040517fcd7860590000000000000000000000000000000000000000000000000000000081523060048201526024016104e2565b6000808573ffffffffffffffffffffffffffffffffffffffff1684866040516105679190610ce8565b60006040518083038185875af1925050503d80600081146105a4576040519150601f19603f3d011682016040523d82523d6000602084013e6105a9565b606091505b50915091506105b98683836105c3565b9695505050505050565b6060826105d8576105d382610652565b6104f9565b81511580156105fc575073ffffffffffffffffffffffffffffffffffffffff84163b155b1561064b576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff851660048201526024016104e2565b50806104f9565b8051156106625780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50565b803573ffffffffffffffffffffffffffffffffffffffff811681146106bb57600080fd5b919050565b6000806000606084860312156106d557600080fd5b833592506106e560208501610697565b91506106f360408501610697565b90509250925092565b6000806020838503121561070f57600080fd5b823567ffffffffffffffff81111561072657600080fd5b8301601f8101851361073757600080fd5b803567ffffffffffffffff81111561074e57600080fd5b85602082840101111561076057600080fd5b6020919091019590945092505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156107e6576107e6610770565b604052919050565b600082601f8301126107ff57600080fd5b813567ffffffffffffffff81111561081957610819610770565b61084a60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8401160161079f565b81815284602083860101111561085f57600080fd5b816020850160208301376000918101602001919091529392505050565b801515811461069457600080fd5b80356106bb8161087c565b6000806000606084860312156108aa57600080fd5b833567ffffffffffffffff8111156108c157600080fd5b6108cd868287016107ee565b9350506020840135915060408401356108e58161087c565b809150509250925092565b600067ffffffffffffffff82111561090a5761090a610770565b5060051b60200190565b600082601f83011261092557600080fd5b8135610938610933826108f0565b61079f565b8082825260208201915060208360051b86010192508583111561095a57600080fd5b602085015b8381101561097757803583526020928301920161095f565b5095945050505050565b60008060006060848603121561099657600080fd5b833567ffffffffffffffff8111156109ad57600080fd5b8401601f810186136109be57600080fd5b80356109cc610933826108f0565b8082825260208201915060208360051b8501019250888311156109ee57600080fd5b602084015b83811015610a3057803567ffffffffffffffff811115610a1257600080fd5b610a218b6020838901016107ee565b845250602092830192016109f3565b509550505050602084013567ffffffffffffffff811115610a5057600080fd5b610a5c86828701610914565b9250506106f36040850161088a565b73ffffffffffffffffffffffffffffffffffffffff8416815260406020820152816040820152818360608301376000818301606090810191909152601f9092017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016010192915050565b600082610b0b577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60005b83811015610b2b578181015183820152602001610b13565b50506000910152565b60008151808452610b4c816020860160208601610b10565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b73ffffffffffffffffffffffffffffffffffffffff8616815284602082015260a060408201526000610bb360a0830186610b34565b6060830194909452509015156080909101529392505050565b600081518084526020840193506020830160005b82811015610bfe578151865260209586019590910190600101610be0565b5093949350505050565b60006080820173ffffffffffffffffffffffffffffffffffffffff871683526080602084015280865180835260a08501915060a08160051b86010192506020880160005b82811015610c9b577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60878603018452610c86858351610b34565b94506020938401939190910190600101610c4c565b505050508281036040840152610cb18186610bcc565b915050610cc2606083018415159052565b95945050505050565b600060208284031215610cdd57600080fd5b81516104f98161087c565b60008251610cfa818460208701610b10565b919091019291505056fea2646970667358221220556072e1abafc3c4063b8cce832228b4f309b93726aaa6a6dfab20cb880c6d1864736f6c634300081a0033a26469706673582212208aba4a4973a1007b6c90d268c5bae9be9253f9f823e62d1b12b478049ff40de164736f6c634300081a0033", + ABI: "[{\"type\":\"function\",\"name\":\"IS_TEST\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"PAUSER_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"TSS_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"WITHDRAWER_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeArtifacts\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedArtifacts_\",\"type\":\"string[]\",\"internalType\":\"string[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeContracts\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedContracts_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeSelectors\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedSelectors_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzSelector[]\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"selectors\",\"type\":\"bytes4[]\",\"internalType\":\"bytes4[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeSenders\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedSenders_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"failed\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"setUp\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"targetArtifactSelectors\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedArtifactSelectors_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzArtifactSelector[]\",\"components\":[{\"name\":\"artifact\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"selectors\",\"type\":\"bytes4[]\",\"internalType\":\"bytes4[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetArtifacts\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedArtifacts_\",\"type\":\"string[]\",\"internalType\":\"string[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetContracts\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedContracts_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetInterfaces\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedInterfaces_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzInterface[]\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"artifacts\",\"type\":\"string[]\",\"internalType\":\"string[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetSelectors\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedSelectors_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzSelector[]\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"selectors\",\"type\":\"bytes4[]\",\"internalType\":\"bytes4[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetSenders\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedSenders_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"testSexMaxSupplyFailsIfSenderIsNotTss\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdraw\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawAndCallFailsIfMaxSupplyIsReached\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawAndCallReceiveERC20\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawAndCallReceiveERC20FailsIfSenderIsNotWithdrawer\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawAndCallReceiveERC20Partial\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawAndCallReceiveNoParams\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawAndFailsIfMaxSupplyIsReached\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawAndRevert\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawAndRevertFailsIfMaxSupplyIsReached\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawAndRevertFailsIfSenderIsNotWithdrawer\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawFailsIfSenderIsNotWithdrawer\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawTogglePause\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"event\",\"name\":\"Call\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"receiver\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Deposit\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"receiver\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"asset\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Executed\",\"inputs\":[{\"name\":\"destination\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ExecutedWithERC20\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedERC20\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"token\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"destination\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedNoParams\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedNonPayable\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"strs\",\"type\":\"string[]\",\"indexed\":false,\"internalType\":\"string[]\"},{\"name\":\"nums\",\"type\":\"uint256[]\",\"indexed\":false,\"internalType\":\"uint256[]\"},{\"name\":\"flag\",\"type\":\"bool\",\"indexed\":false,\"internalType\":\"bool\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedPayable\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"str\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"num\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"flag\",\"type\":\"bool\",\"indexed\":false,\"internalType\":\"bool\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedRevert\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Reverted\",\"inputs\":[{\"name\":\"destination\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RevertedWithERC20\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Withdraw\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"WithdrawAndCall\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"WithdrawAndRevert\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log\",\"inputs\":[{\"name\":\"\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_address\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_array\",\"inputs\":[{\"name\":\"val\",\"type\":\"uint256[]\",\"indexed\":false,\"internalType\":\"uint256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_array\",\"inputs\":[{\"name\":\"val\",\"type\":\"int256[]\",\"indexed\":false,\"internalType\":\"int256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_array\",\"inputs\":[{\"name\":\"val\",\"type\":\"address[]\",\"indexed\":false,\"internalType\":\"address[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_bytes\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_bytes32\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_int\",\"inputs\":[{\"name\":\"\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_address\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_array\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"uint256[]\",\"indexed\":false,\"internalType\":\"uint256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_array\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"int256[]\",\"indexed\":false,\"internalType\":\"int256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_array\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"address[]\",\"indexed\":false,\"internalType\":\"address[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_bytes\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_bytes32\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_decimal_int\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"},{\"name\":\"decimals\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_decimal_uint\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"decimals\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_int\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_string\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_uint\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_string\",\"inputs\":[{\"name\":\"\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_uint\",\"inputs\":[{\"name\":\"\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"logs\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"AccessControlUnauthorizedAccount\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"neededRole\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"type\":\"error\",\"name\":\"ApprovalFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ConnectorInitialized\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"CustodyInitialized\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"DepositFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"EnforcedPause\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ExceedsMaxSupply\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ExecutionFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientERC20Amount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientETHAmount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NotWhitelistedInCustody\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZeroAddress\",\"inputs\":[]}]", + Bin: "0x6080604052600c8054600160ff199182168117909255601f80549091169091179055348015602c57600080fd5b5061f2228061003c6000396000f3fe608060405234801561001057600080fd5b50600436106101cf5760003560e01c8063a783c78911610104578063d509b16c116100a2578063e63ab1e911610071578063e63ab1e914610344578063fa7626d41461036b578063fdca905214610378578063fe574f841461038057600080fd5b8063d509b16c14610324578063dcf7d0371461032c578063de1cb76c14610334578063e20c9f711461033c57600080fd5b8063b5508aa9116100de578063b5508aa9146102f4578063ba414fa6146102fc578063c190997214610314578063ccb0e3f21461031c57600080fd5b8063a783c789146102bd578063aaf74192146102e4578063b0464fdc146102ec57600080fd5b80634934655811610171578063828320141161014b578063828320141461025657806385226c811461025e57806385f438c114610273578063916a17c6146102a857600080fd5b8063493465581461023157806366d9a9a0146102395780637db20efb1461024e57600080fd5b80632ade3880116101ad5780632ade3880146102045780633cba0107146102195780633e5e3c23146102215780633f7286f41461022957600080fd5b80630a9254e4146101d45780631ed7831c146101de5780632506ef03146101fc575b600080fd5b6101dc610388565b005b6101e6610a6e565b6040516101f39190618ec4565b60405180910390f35b6101dc610ad0565b61020c610d81565b6040516101f39190618f60565b6101dc610ec3565b6101e6611685565b6101e66116e5565b6101dc611745565b610241611d19565b6040516101f391906190c6565b6101dc611e9b565b6101dc61213a565b610266612393565b6040516101f39190619164565b61029a7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b6040519081526020016101f3565b6102b0612463565b6040516101f391906191db565b61029a7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb81565b6101dc61255e565b6102b06127ba565b6102666128b5565b610304612985565b60405190151581526020016101f3565b6101dc612a59565b6101dc612cc4565b6101dc6137f0565b6101dc613b45565b6101dc614173565b6101e661488f565b61029a7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b601f546103049060ff1681565b6101dc6148ef565b6101dc614ad9565b60258054307fffffffffffffffffffffffff000000000000000000000000000000000000000091821617909155602680546112349083161790556027805461567892168217905560405181906103dd90618dd7565b6001600160a01b03928316815291166020820152604001604051809103906000f080158015610410573d6000803e3d6000fd5b50602480547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039283169081178255604080518082018252600e81527f4761746577617945564d2e736f6c000000000000000000000000000000000000602082015260275460255492519086169481019490945260448401929092529092166064820152610501919060840160408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fc0c53b8b00000000000000000000000000000000000000000000000000000000179052614cc6565b601f80547fffffffffffffffffffffff0000000000000000000000000000000000000000ff166101006001600160a01b0393841681029190911791829055602080549190920483167fffffffffffffffffffffffff0000000000000000000000000000000000000000909116811790915560275460255460405192939182169291169061058d90618de4565b6001600160a01b03938416815291831660208301529091166040820152606001604051809103906000f0801580156105c9573d6000803e3d6000fd5b50602280547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03928316179055602054602454602754602554604051938516949283169391831692169061062490618df1565b6001600160a01b039485168152928416602084015290831660408301529091166060820152608001604051809103906000f080158015610668573d6000803e3d6000fd5b50602380547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392831617905560275460405163ca669fa760e01b815291166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156106ed57600080fd5b505af1158015610701573d6000803e3d6000fd5b5050602480546027546023546040517f15d57fd40000000000000000000000000000000000000000000000000000000081526001600160a01b039283166004820152908216938101939093521692506315d57fd49150604401600060405180830381600087803b15801561077457600080fd5b505af1158015610788573d6000803e3d6000fd5b5050505060405161079890618dfe565b604051809103906000f0801580156107b4573d6000803e3d6000fd5b50602180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039283161790556027546040517fc88a5e6d00000000000000000000000000000000000000000000000000000000815291166004820152670de0b6b3a76400006024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c88a5e6d90604401600060405180830381600087803b15801561086057600080fd5b505af1158015610874573d6000803e3d6000fd5b50506025546040517f06447d560000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506306447d569150602401600060405180830381600087803b1580156108ea57600080fd5b505af11580156108fe573d6000803e3d6000fd5b50506020546022546040517fae7a3a6f0000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201529116925063ae7a3a6f9150602401600060405180830381600087803b15801561096457600080fd5b505af1158015610978573d6000803e3d6000fd5b50506020546023546040517f10188aef0000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152911692506310188aef9150602401600060405180830381600087803b1580156109de57600080fd5b505af11580156109f2573d6000803e3d6000fd5b505050507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b03166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610a5457600080fd5b505af1158015610a68573d6000803e3d6000fd5b50505050565b60606016805480602002602001604051908101604052809291908181526020018280548015610ac657602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610aa8575b5050505050905090565b6040517f68656c6c6f0000000000000000000000000000000000000000000000000000006020820152620186a09060009060250160408051808303601f190181529082905260275463ca669fa760e01b83526001600160a01b031660048301529150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015610b6b57600080fd5b505af1158015610b7f573d6000803e3d6000fd5b50506023546040517f6f8b44b0000000000000000000000000000000000000000000000000000000008152600481018690526001600160a01b039091169250636f8b44b09150602401600060405180830381600087803b158015610be257600080fd5b505af1158015610bf6573d6000803e3d6000fd5b505060275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b158015610c5357600080fd5b505af1158015610c67573d6000803e3d6000fd5b50506040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fc30436e9000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b158015610cf057600080fd5b505af1158015610d04573d6000803e3d6000fd5b50506023546021546001600160a01b0391821693506302d5c899925016610d2c8560016192a1565b846040518463ffffffff1660e01b8152600401610d4b939291906192b4565b600060405180830381600087803b158015610d6557600080fd5b505af1158015610d79573d6000803e3d6000fd5b505050505050565b6060601e805480602002602001604051908101604052809291908181526020016000905b82821015610eba57600084815260208082206040805180820182526002870290920180546001600160a01b03168352600181018054835181870281018701909452808452939591948681019491929084015b82821015610ea3578382906000526020600020018054610e16906192ed565b80601f0160208091040260200160405190810160405280929190818152602001828054610e42906192ed565b8015610e8f5780601f10610e6457610100808354040283529160200191610e8f565b820191906000526020600020905b815481529060010190602001808311610e7257829003601f168201915b505050505081526020019060010190610df7565b505050508152505081526020019060010190610da5565b50505050905090565b60248054602654604051620186a09381018490526001600160a01b03928316604482015291166064820152600090819060840160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f357fc5a2000000000000000000000000000000000000000000000000000000001790526024805460265492516370a0823160e01b81526001600160a01b0393841660048201529394506000939216916370a082319101602060405180830381865afa158015610f9e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fc2919061933a565b9050610fcf816000614ce5565b602480546023546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa15801561101f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611043919061933a565b9050611050816000614ce5565b6020546040516001600160a01b039091166024820152604481018690526064810185905260009060840160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f1e458bee0000000000000000000000000000000000000000000000000000000017905260245490517ff30c7ba3000000000000000000000000000000000000000000000000000000008152919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f30c7ba391611137916001600160a01b0391909116906000908690600401619353565b600060405180830381600087803b15801561115157600080fd5b505af1158015611165573d6000803e3d6000fd5b50506021546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b1580156111f757600080fd5b505af115801561120b573d6000803e3d6000fd5b505060208054602454602654604080516001600160a01b0394851681529485018d905291831684830152919091166060830152517f2b58128f24a9f59127cc5b5430d70542b22220f2d9adaa86e442b816ab98af609350908190036080019150a16023546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b1580156112fa57600080fd5b505af115801561130e573d6000803e3d6000fd5b50506021546040516001600160a01b0390911692507f7772f56296d3a5202974a45c61c9188d844ab4d6eeb18c851e4b8d5384ca6ced9150611353908990889061937b565b60405180910390a260275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156113b457600080fd5b505af11580156113c8573d6000803e3d6000fd5b50506023546021546040517f5e3e9fef0000000000000000000000000000000000000000000000000000000081526001600160a01b039283169450635e3e9fef935061142092909116908a9089908b90600401619394565b600060405180830381600087803b15801561143a57600080fd5b505af115801561144e573d6000803e3d6000fd5b5050602480546026546040516370a0823160e01b81526001600160a01b03918216600482015260009550911692506370a082319101602060405180830381865afa1580156114a0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114c4919061933a565b90506114d08188614ce5565b602480546023546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa158015611520573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611544919061933a565b9050611551816000614ce5565b602480546020546021546040517fdd62ed3e0000000000000000000000000000000000000000000000000000000081526001600160a01b0392831660048201529082169381019390935260009291169063dd62ed3e90604401602060405180830381865afa1580156115c7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115eb919061933a565b90506115f8816000614ce5565b602480546020546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa158015611648573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061166c919061933a565b9050611679816000614ce5565b50505050505050505050565b60606018805480602002602001604051908101604052809291908181526020018280548015610ac6576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311610aa8575050505050905090565b60606017805480602002602001604051908101604052809291908181526020018280548015610ac6576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311610aa8575050505050905090565b604080516004808252602480830184526020830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f6ed70169000000000000000000000000000000000000000000000000000000001790525460265493516370a0823160e01b8152620186a0946000949385936001600160a01b03908116936370a08231936117e693921691016001600160a01b0391909116815260200190565b602060405180830381865afa158015611803573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611827919061933a565b9050611834816000614ce5565b602480546023546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa158015611884573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118a8919061933a565b90506118b5816000614ce5565b6020546040516001600160a01b039091166024820152604481018690526064810185905260009060840160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f1e458bee0000000000000000000000000000000000000000000000000000000017905260245490517ff30c7ba3000000000000000000000000000000000000000000000000000000008152919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f30c7ba39161199c916001600160a01b0391909116906000908690600401619353565b600060405180830381600087803b1580156119b657600080fd5b505af11580156119ca573d6000803e3d6000fd5b50506021546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b158015611a5c57600080fd5b505af1158015611a70573d6000803e3d6000fd5b5050602080546040516001600160a01b0390911681527fbcaadb46b82a48af60b608f58959ae6b8310d1b0a0d094c2e9ec3208ed39f2a0935001905060405180910390a16023546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b158015611b4257600080fd5b505af1158015611b56573d6000803e3d6000fd5b50506021546040516001600160a01b0390911692507f7772f56296d3a5202974a45c61c9188d844ab4d6eeb18c851e4b8d5384ca6ced9150611b9b908990889061937b565b60405180910390a260275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015611bfc57600080fd5b505af1158015611c10573d6000803e3d6000fd5b50506023546021546040517f5e3e9fef0000000000000000000000000000000000000000000000000000000081526001600160a01b039283169450635e3e9fef9350611c6892909116908a9089908b90600401619394565b600060405180830381600087803b158015611c8257600080fd5b505af1158015611c96573d6000803e3d6000fd5b5050602480546026546040516370a0823160e01b81526001600160a01b03918216600482015260009550911692506370a082319101602060405180830381865afa158015611ce8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d0c919061933a565b90506114d0816000614ce5565b6060601b805480602002602001604051908101604052809291908181526020016000905b82821015610eba5783829060005260206000209060020201604051806040016040529081600082018054611d70906192ed565b80601f0160208091040260200160405190810160405280929190818152602001828054611d9c906192ed565b8015611de95780601f10611dbe57610100808354040283529160200191611de9565b820191906000526020600020905b815481529060010190602001808311611dcc57829003601f168201915b5050505050815260200160018201805480602002602001604051908101604052809291908181526020018280548015611e8357602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019060040190602082600301049283019260010382029150808411611e305790505b50505050508152505081526020019060010190611d3d565b60275460405163ca669fa760e01b81526001600160a01b039091166004820152620186a090737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015611ef957600080fd5b505af1158015611f0d573d6000803e3d6000fd5b50506023546040517f6f8b44b0000000000000000000000000000000000000000000000000000000008152600481018590526001600160a01b039091169250636f8b44b09150602401600060405180830381600087803b158015611f7057600080fd5b505af1158015611f84573d6000803e3d6000fd5b505060275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b158015611fe157600080fd5b505af1158015611ff5573d6000803e3d6000fd5b50506040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fc30436e9000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b15801561207e57600080fd5b505af1158015612092573d6000803e3d6000fd5b50506023546021546001600160a01b03918216935063106e62909250166120ba8460016192a1565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b039092166004830152602482015260006044820152606401600060405180830381600087803b15801561211f57600080fd5b505af1158015612133573d6000803e3d6000fd5b5050505050565b6040517f68656c6c6f0000000000000000000000000000000000000000000000000000006020820152620186a090600090819060250160408051808303601f190181529082905260255463ca669fa760e01b83526001600160a01b031660048301529150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156121d757600080fd5b505af11580156121eb573d6000803e3d6000fd5b5050602554604080516001600160a01b0390921660248301527f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e460448084019190915281518084039091018152606490920181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb392506122d691906004016193cd565b600060405180830381600087803b1580156122f057600080fd5b505af1158015612304573d6000803e3d6000fd5b50506023546021546040517f02d5c8990000000000000000000000000000000000000000000000000000000081526001600160a01b0392831694506302d5c899935061235c9290911690879086908890600401619394565b600060405180830381600087803b15801561237657600080fd5b505af115801561238a573d6000803e3d6000fd5b50505050505050565b6060601a805480602002602001604051908101604052809291908181526020016000905b82821015610eba5783829060005260206000200180546123d6906192ed565b80601f0160208091040260200160405190810160405280929190818152602001828054612402906192ed565b801561244f5780601f106124245761010080835404028352916020019161244f565b820191906000526020600020905b81548152906001019060200180831161243257829003601f168201915b5050505050815260200190600101906123b7565b6060601d805480602002602001604051908101604052809291908181526020016000905b82821015610eba5760008481526020908190206040805180820182526002860290920180546001600160a01b0316835260018101805483518187028101870190945280845293949193858301939283018282801561254657602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190600401906020826003010492830192600103820291508084116124f35790505b50505050508152505081526020019060010190612487565b6040517f68656c6c6f0000000000000000000000000000000000000000000000000000006020820152620186a09060009060250160408051808303601f190181529082905260275463ca669fa760e01b83526001600160a01b031660048301529150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156125f957600080fd5b505af115801561260d573d6000803e3d6000fd5b50506023546040517f6f8b44b0000000000000000000000000000000000000000000000000000000008152600481018690526001600160a01b039091169250636f8b44b09150602401600060405180830381600087803b15801561267057600080fd5b505af1158015612684573d6000803e3d6000fd5b505060275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b1580156126e157600080fd5b505af11580156126f5573d6000803e3d6000fd5b50506040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fc30436e9000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b15801561277e57600080fd5b505af1158015612792573d6000803e3d6000fd5b50506023546021546001600160a01b039182169350635e3e9fef925016610d2c8560016192a1565b6060601c805480602002602001604051908101604052809291908181526020016000905b82821015610eba5760008481526020908190206040805180820182526002860290920180546001600160a01b0316835260018101805483518187028101870190945280845293949193858301939283018282801561289d57602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168152602001906004019060208260030104928301926001038202915080841161284a5790505b505050505081525050815260200190600101906127de565b60606019805480602002602001604051908101604052809291908181526020016000905b82821015610eba5783829060005260206000200180546128f8906192ed565b80601f0160208091040260200160405190810160405280929190818152602001828054612924906192ed565b80156129715780601f1061294657610100808354040283529160200191612971565b820191906000526020600020905b81548152906001019060200180831161295457829003601f168201915b5050505050815260200190600101906128d9565b60085460009060ff161561299d575060085460ff1690565b6040517f667f9d70000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d600482018190527f6661696c65640000000000000000000000000000000000000000000000000000602483015260009163667f9d7090604401602060405180830381865afa158015612a2e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a52919061933a565b1415905090565b60248054602654604051620186a09381018490526001600160a01b03928316604482015291166064820152600090819060840160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f357fc5a200000000000000000000000000000000000000000000000000000000179052602554905163ca669fa760e01b81526001600160a01b039091166004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015612b3f57600080fd5b505af1158015612b53573d6000803e3d6000fd5b5050602554604080516001600160a01b0390921660248301527f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e460448084019190915281518084039091018152606490920181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb39250612c3e91906004016193cd565b600060405180830381600087803b158015612c5857600080fd5b505af1158015612c6c573d6000803e3d6000fd5b50506023546021546040517f5e3e9fef0000000000000000000000000000000000000000000000000000000081526001600160a01b039283169450635e3e9fef935061235c9290911690879086908890600401619394565b60275460405163ca669fa760e01b81526001600160a01b039091166004820152620186a090600090737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015612d2557600080fd5b505af1158015612d39573d6000803e3d6000fd5b5050602754604080516001600160a01b0390921660248301527f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a60448084019190915281518084039091018152606490920181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb39250612e2491906004016193cd565b600060405180830381600087803b158015612e3e57600080fd5b505af1158015612e52573d6000803e3d6000fd5b50505050602360009054906101000a90046001600160a01b03166001600160a01b0316638456cb596040518163ffffffff1660e01b8152600401600060405180830381600087803b158015612ea657600080fd5b505af1158015612eba573d6000803e3d6000fd5b505060275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b158015612f1757600080fd5b505af1158015612f2b573d6000803e3d6000fd5b5050602754604080516001600160a01b0390921660248301527f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a60448084019190915281518084039091018152606490920181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb3925061301691906004016193cd565b600060405180830381600087803b15801561303057600080fd5b505af1158015613044573d6000803e3d6000fd5b50505050602360009054906101000a90046001600160a01b03166001600160a01b0316633f4ba83a6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561309857600080fd5b505af11580156130ac573d6000803e3d6000fd5b505060255460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b15801561310957600080fd5b505af115801561311d573d6000803e3d6000fd5b50505050602360009054906101000a90046001600160a01b03166001600160a01b0316638456cb596040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561317157600080fd5b505af1158015613185573d6000803e3d6000fd5b50506040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fd93c0665000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b15801561320e57600080fd5b505af1158015613222573d6000803e3d6000fd5b505060275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b15801561327f57600080fd5b505af1158015613293573d6000803e3d6000fd5b50506023546026546040517f106e62900000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260248101879052604481018690529116925063106e62909150606401600060405180830381600087803b15801561330757600080fd5b505af115801561331b573d6000803e3d6000fd5b505060255460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b15801561337857600080fd5b505af115801561338c573d6000803e3d6000fd5b50505050602360009054906101000a90046001600160a01b03166001600160a01b0316633f4ba83a6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156133e057600080fd5b505af11580156133f4573d6000803e3d6000fd5b5050602480546026546040516370a0823160e01b81526001600160a01b03918216600482015260009550911692506370a082319101602060405180830381865afa158015613446573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061346a919061933a565b9050613477816000614ce5565b6026546040516001600160a01b039091166024820152604481018490526064810183905260009060840160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f1e458bee0000000000000000000000000000000000000000000000000000000017905260245490517ff30c7ba3000000000000000000000000000000000000000000000000000000008152919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f30c7ba39161355e916001600160a01b0391909116906000908690600401619353565b600060405180830381600087803b15801561357857600080fd5b505af115801561358c573d6000803e3d6000fd5b50506023546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b15801561361e57600080fd5b505af1158015613632573d6000803e3d6000fd5b50506026546040518781526001600160a01b0390911692507f884edad9ce6fa2440d8a54cc123490eb96d2768479d49ff9c7366125a9424364915060200160405180910390a260275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156136d157600080fd5b505af11580156136e5573d6000803e3d6000fd5b50506023546026546040517f106e62900000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260248101899052604481018890529116925063106e629091506064015b600060405180830381600087803b15801561375a57600080fd5b505af115801561376e573d6000803e3d6000fd5b5050602480546026546040516370a0823160e01b81526001600160a01b03918216600482015260009550911692506370a082319101602060405180830381865afa1580156137c0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137e4919061933a565b90506121338186614ce5565b602480546026546040516370a0823160e01b81526001600160a01b039182166004820152620186a09360009392909216916370a082319101602060405180830381865afa158015613845573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613869919061933a565b9050613876816000614ce5565b6026546040516001600160a01b0390911660248201526044810183905260006064820181905290819060840160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f1e458bee0000000000000000000000000000000000000000000000000000000017905260245490517ff30c7ba3000000000000000000000000000000000000000000000000000000008152919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f30c7ba39161395f916001600160a01b0391909116906000908690600401619353565b600060405180830381600087803b15801561397957600080fd5b505af115801561398d573d6000803e3d6000fd5b50506023546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b158015613a1f57600080fd5b505af1158015613a33573d6000803e3d6000fd5b50506026546040518781526001600160a01b0390911692507f884edad9ce6fa2440d8a54cc123490eb96d2768479d49ff9c7366125a9424364915060200160405180910390a260275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015613ad257600080fd5b505af1158015613ae6573d6000803e3d6000fd5b50506023546026546040517f106e62900000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260248101899052604481018790529116925063106e62909150606401613740565b60248054602654604051620186a09381018490526001600160a01b03928316604482015291166064820152600090819060840160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fc5131691000000000000000000000000000000000000000000000000000000001790526024805460265492516370a0823160e01b81526001600160a01b0393841660048201529394506000939216916370a082319101602060405180830381865afa158015613c20573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613c44919061933a565b9050613c51816000614ce5565b602480546023546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa158015613ca1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613cc5919061933a565b9050613cd2816000614ce5565b6020546040516001600160a01b039091166024820152604481018690526064810185905260009060840160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f1e458bee0000000000000000000000000000000000000000000000000000000017905260245490517ff30c7ba3000000000000000000000000000000000000000000000000000000008152919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f30c7ba391613db9916001600160a01b0391909116906000908690600401619353565b600060405180830381600087803b158015613dd357600080fd5b505af1158015613de7573d6000803e3d6000fd5b50506021546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b158015613e7957600080fd5b505af1158015613e8d573d6000803e3d6000fd5b50506020547f2b58128f24a9f59127cc5b5430d70542b22220f2d9adaa86e442b816ab98af6092506001600160a01b03169050613ecb6002896193e0565b602454602654604080516001600160a01b03958616815260208101949094529184168383015292909216606082015290519081900360800190a16023546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b158015613f9357600080fd5b505af1158015613fa7573d6000803e3d6000fd5b50506021546040516001600160a01b0390911692507f7772f56296d3a5202974a45c61c9188d844ab4d6eeb18c851e4b8d5384ca6ced9150613fec908990889061937b565b60405180910390a260275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561404d57600080fd5b505af1158015614061573d6000803e3d6000fd5b50506023546021546040517f5e3e9fef0000000000000000000000000000000000000000000000000000000081526001600160a01b039283169450635e3e9fef93506140b992909116908a9089908b90600401619394565b600060405180830381600087803b1580156140d357600080fd5b505af11580156140e7573d6000803e3d6000fd5b5050602480546026546040516370a0823160e01b81526001600160a01b03918216600482015260009550911692506370a082319101602060405180830381865afa158015614139573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061415d919061933a565b90506114d08161416e60028a6193e0565b614ce5565b6040517f68656c6c6f0000000000000000000000000000000000000000000000000000006020820152620186a090600090819060250160408051808303601f1901815290829052602480546021546370a0823160e01b85526001600160a01b0390811660048601529294506000939216916370a082319101602060405180830381865afa158015614208573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061422c919061933a565b9050614239816000614ce5565b602480546023546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa158015614289573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906142ad919061933a565b6020546040516001600160a01b039091166024820152604481018790526064810186905290915060009060840160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f1e458bee0000000000000000000000000000000000000000000000000000000017905260245490517ff30c7ba3000000000000000000000000000000000000000000000000000000008152919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f30c7ba391614397916001600160a01b0391909116906000908690600401619353565b600060405180830381600087803b1580156143b157600080fd5b505af11580156143c5573d6000803e3d6000fd5b50506021546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b15801561445757600080fd5b505af115801561446b573d6000803e3d6000fd5b50506020546040517f0d3f65f00e631663aa85c96330b5c7a83bb29af3630c0063776f985edc3037aa93506144ae92506001600160a01b0390911690879061941b565b60405180910390a16020546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b15801561454457600080fd5b505af1158015614558573d6000803e3d6000fd5b50506021546024546040516001600160a01b039283169450911691507f723fc7be2448075379e4fdf1e6bf5fead954d2668d2da05dcb44ccfec4beeda7906145a3908a90899061937b565b60405180910390a36023546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b15801561463957600080fd5b505af115801561464d573d6000803e3d6000fd5b50506021546040516001600160a01b0390911692507fba96f26bdda53eb8c8ba39045dfb4ff39753fbc7a6edcf250a88e75e78d102fe9150614692908990889061937b565b60405180910390a260275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156146f357600080fd5b505af1158015614707573d6000803e3d6000fd5b50506023546021546040517f02d5c8990000000000000000000000000000000000000000000000000000000081526001600160a01b0392831694506302d5c899935061475f92909116908a9089908b90600401619394565b600060405180830381600087803b15801561477957600080fd5b505af115801561478d573d6000803e3d6000fd5b5050602480546021546040516370a0823160e01b81526001600160a01b03918216600482015260009550911692506370a082319101602060405180830381865afa1580156147df573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614803919061933a565b905061480f8188614ce5565b602480546023546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa15801561485f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614883919061933a565b90506115518185614ce5565b60606015805480602002602001604051908101604052809291908181526020018280548015610ac6576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311610aa8575050505050905090565b60255460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561494857600080fd5b505af115801561495c573d6000803e3d6000fd5b5050602554604080516001600160a01b0390921660248301527f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb60448084019190915281518084039091018152606490920181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb39250614a4791906004016193cd565b600060405180830381600087803b158015614a6157600080fd5b505af1158015614a75573d6000803e3d6000fd5b50506023546040517f6f8b44b000000000000000000000000000000000000000000000000000000000815261271060048201526001600160a01b039091169250636f8b44b09150602401600060405180830381600087803b158015610a5457600080fd5b60255460405163ca669fa760e01b81526001600160a01b039091166004820152620186a090600090737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015614b3a57600080fd5b505af1158015614b4e573d6000803e3d6000fd5b5050602554604080516001600160a01b0390921660248301527f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e460448084019190915281518084039091018152606490920181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb39250614c3991906004016193cd565b600060405180830381600087803b158015614c5357600080fd5b505af1158015614c67573d6000803e3d6000fd5b50506023546026546040517f106e62900000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260248101879052604481018690529116925063106e62909150606401610d4b565b6000614cd0618e0b565b614cdb848483614d64565b9150505b92915050565b6040517f98296c540000000000000000000000000000000000000000000000000000000081526004810183905260248101829052737109709ecfa91a80626ff3989d68f67f5b1dd12d906398296c549060440160006040518083038186803b158015614d5057600080fd5b505afa158015610d79573d6000803e3d6000fd5b600080614d718584614ddf565b9050614dd46040518060400160405280601d81526020017f4552433139363750726f78792e736f6c3a4552433139363750726f78790000008152508286604051602001614dbf92919061941b565b60405160208183030381529060405285614deb565b9150505b9392505050565b6000614dd88383614e19565b60c08101515160009015614e0f57614e0884848460c00151614e34565b9050614dd8565b614e088484614fda565b6000614e2583836150c5565b614dd883836020015184614deb565b600080614e3f6150d5565b90506000614e4d86836151a8565b90506000614e64826060015183602001518561564e565b90506000614e7483838989615860565b90506000614e81826166dd565b602081015181519192509060030b15614ef457898260400151604051602001614eab92919061943d565b60408051601f19818403018152908290527f08c379a0000000000000000000000000000000000000000000000000000000008252614eeb916004016193cd565b60405180910390fd5b6000614f376040518060400160405280601581526020017f4465706c6f79656420746f20616464726573733a2000000000000000000000008152508360016168ac565b6040517fc6ce059d000000000000000000000000000000000000000000000000000000008152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c6ce059d90614f8a9084906004016193cd565b602060405180830381865afa158015614fa7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614fcb91906194be565b9b9a5050505050505050505050565b6040517f8d1cc9250000000000000000000000000000000000000000000000000000000081526000908190737109709ecfa91a80626ff3989d68f67f5b1dd12d90638d1cc9259061502f9087906004016193cd565b600060405180830381865afa15801561504c573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261507491908101906195cf565b905060006150a2828560405160200161508e929190619604565b604051602081830303815290604052616aac565b90506001600160a01b038116614cdb578484604051602001614eab929190619633565b6150d182826000616abf565b5050565b604080518082018252600381527f6f75740000000000000000000000000000000000000000000000000000000000602082015290517fd145736c000000000000000000000000000000000000000000000000000000008152606091737109709ecfa91a80626ff3989d68f67f5b1dd12d91829063d145736c9061515c9084906004016196de565b600060405180830381865afa158015615179573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526151a19190810190619725565b9250505090565b6151da6040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b6000737109709ecfa91a80626ff3989d68f67f5b1dd12d90506152256040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b61522e85616bc2565b6020820152600061523e86616fa7565b90506000836001600160a01b031663d930a0e66040518163ffffffff1660e01b8152600401600060405180830381865afa158015615280573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526152a89190810190619725565b868385602001516040516020016152c2949392919061976e565b60408051601f19818403018152908290527f60f9bb1100000000000000000000000000000000000000000000000000000000825291506000906001600160a01b038616906360f9bb119061531a9085906004016193cd565b600060405180830381865afa158015615337573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261535f9190810190619725565b6040517fdb4235f60000000000000000000000000000000000000000000000000000000081529091506001600160a01b0386169063db4235f6906153a7908490600401619872565b602060405180830381865afa1580156153c4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906153e891906198c4565b6153fd5781604051602001614eab91906198e6565b6040517f49c4fac80000000000000000000000000000000000000000000000000000000081526001600160a01b038616906349c4fac890615442908490600401619978565b600060405180830381865afa15801561545f573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526154879190810190619725565b84526040517fdb4235f60000000000000000000000000000000000000000000000000000000081526001600160a01b0386169063db4235f6906154ce9084906004016199ca565b602060405180830381865afa1580156154eb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061550f91906198c4565b156155a4576040517f49c4fac80000000000000000000000000000000000000000000000000000000081526001600160a01b038616906349c4fac8906155599084906004016199ca565b600060405180830381865afa158015615576573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261559e9190810190619725565b60408501525b846001600160a01b03166349c4fac88286600001516040516020016155c99190619a1c565b6040516020818303038152906040526040518363ffffffff1660e01b81526004016155f5929190619a88565b600060405180830381865afa158015615612573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261563a9190810190619725565b606085015250608083015250949350505050565b60408051600480825260a0820190925260609160009190816020015b606081526020019060019003908161566a5790505090506040518060400160405280600481526020017f6772657000000000000000000000000000000000000000000000000000000000815250816000815181106156ca576156ca619aad565b60200260200101819052506040518060400160405280600381526020017f2d726c00000000000000000000000000000000000000000000000000000000008152508160018151811061571e5761571e619aad565b60200260200101819052508460405160200161573a9190619adc565b6040516020818303038152906040528160028151811061575c5761575c619aad565b6020026020010181905250826040516020016157789190619b48565b6040516020818303038152906040528160038151811061579a5761579a619aad565b602002602001018190525060006157b0826166dd565b602080820151604080518082018252600581527f2e6a736f6e0000000000000000000000000000000000000000000000000000008185019081528251808401845260008082529086015282518084019093529051825292810192909252919250615841906040805180820182526000808252602091820152815180830190925284518252808501908201529061722a565b6158565785604051602001614eab9190619b89565b9695505050505050565b60a0810151604080518082018252600080825260209182015281518083019092528251808352928101910152606090737109709ecfa91a80626ff3989d68f67f5b1dd12d90156158b0565b511590565b615a245782602001511561596c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605860248201527f54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f742060448201527f62652075736564207768656e207468652060736b6970566572696679536f757260648201527f6365436f646560206f7074696f6e206973206074727565600000000000000000608482015260a401614eeb565b8260c0015115615a24576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605360248201527f54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f742060448201527f62652075736564207768656e207468652060736b69704c6963656e736554797060648201527f6560206f7074696f6e2069732060747275656000000000000000000000000000608482015260a401614eeb565b6040805160ff8082526120008201909252600091816020015b6060815260200190600190039081615a3d57905050905060006040518060400160405280600381526020017f6e70780000000000000000000000000000000000000000000000000000000000815250828280615a9890619c1a565b935060ff1681518110615aad57615aad619aad565b60200260200101819052506040518060400160405280600d81526020017f302e302e312d616c7068612e3700000000000000000000000000000000000000815250604051602001615afe9190619c39565b604051602081830303815290604052828280615b1990619c1a565b935060ff1681518110615b2e57615b2e619aad565b60200260200101819052506040518060400160405280600681526020017f6465706c6f790000000000000000000000000000000000000000000000000000815250828280615b7b90619c1a565b935060ff1681518110615b9057615b90619aad565b60200260200101819052506040518060400160405280600e81526020017f2d2d636f6e74726163744e616d65000000000000000000000000000000000000815250828280615bdd90619c1a565b935060ff1681518110615bf257615bf2619aad565b60200260200101819052508760200151828280615c0e90619c1a565b935060ff1681518110615c2357615c23619aad565b60200260200101819052506040518060400160405280600e81526020017f2d2d636f6e747261637450617468000000000000000000000000000000000000815250828280615c7090619c1a565b935060ff1681518110615c8557615c85619aad565b602090810291909101015287518282615c9d81619c1a565b935060ff1681518110615cb257615cb2619aad565b60200260200101819052506040518060400160405280600981526020017f2d2d636861696e49640000000000000000000000000000000000000000000000815250828280615cff90619c1a565b935060ff1681518110615d1457615d14619aad565b6020026020010181905250615d284661728b565b8282615d3381619c1a565b935060ff1681518110615d4857615d48619aad565b60200260200101819052506040518060400160405280600f81526020017f2d2d6275696c64496e666f46696c650000000000000000000000000000000000815250828280615d9590619c1a565b935060ff1681518110615daa57615daa619aad565b602002602001018190525086828280615dc290619c1a565b935060ff1681518110615dd757615dd7619aad565b6020908102919091010152855115615efe5760408051808201909152601581527f2d2d636f6e7374727563746f7242797465636f6465000000000000000000000060208201528282615e2881619c1a565b935060ff1681518110615e3d57615e3d619aad565b60209081029190910101526040517f71aad10d0000000000000000000000000000000000000000000000000000000081526001600160a01b038416906371aad10d90615e8d9089906004016193cd565b600060405180830381865afa158015615eaa573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052615ed29190810190619725565b8282615edd81619c1a565b935060ff1681518110615ef257615ef2619aad565b60200260200101819052505b846020015115615fce5760408051808201909152601281527f2d2d766572696679536f75726365436f6465000000000000000000000000000060208201528282615f4781619c1a565b935060ff1681518110615f5c57615f5c619aad565b60200260200101819052506040518060400160405280600581526020017f66616c7365000000000000000000000000000000000000000000000000000000815250828280615fa990619c1a565b935060ff1681518110615fbe57615fbe619aad565b6020026020010181905250616195565b6160066158ab8660a0015160408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6160995760408051808201909152600d81527f2d2d6c6963656e736554797065000000000000000000000000000000000000006020820152828261604981619c1a565b935060ff168151811061605e5761605e619aad565b60200260200101819052508460a0015160405160200161607e9190619adc565b604051602081830303815290604052828280615fa990619c1a565b8460c001511580156160dc5750604080890151815180830183526000808252602091820152825180840190935281518352908101908201526160da90511590565b155b156161955760408051808201909152600d81527f2d2d6c6963656e736554797065000000000000000000000000000000000000006020820152828261612081619c1a565b935060ff168151811061613557616135619aad565b60200260200101819052506161498861732b565b6040516020016161599190619adc565b60405160208183030381529060405282828061617490619c1a565b935060ff168151811061618957616189619aad565b60200260200101819052505b604080860151815180830183526000808252602091820152825180840190935281518352908101908201526161c990511590565b61625e5760408051808201909152600b81527f2d2d72656c6179657249640000000000000000000000000000000000000000006020820152828261620c81619c1a565b935060ff168151811061622157616221619aad565b6020026020010181905250846040015182828061623d90619c1a565b935060ff168151811061625257616252619aad565b60200260200101819052505b60608501511561637f5760408051808201909152600681527f2d2d73616c740000000000000000000000000000000000000000000000000000602082015282826162a781619c1a565b935060ff16815181106162bc576162bc619aad565b602090810291909101015260608501516040517fb11a19e800000000000000000000000000000000000000000000000000000000815260048101919091526001600160a01b0384169063b11a19e890602401600060405180830381865afa15801561632b573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526163539190810190619725565b828261635e81619c1a565b935060ff168151811061637357616373619aad565b60200260200101819052505b60e085015151156164265760408051808201909152600a81527f2d2d6761734c696d697400000000000000000000000000000000000000000000602082015282826163c981619c1a565b935060ff16815181106163de576163de619aad565b60200260200101819052506163fa8560e001516000015161728b565b828261640581619c1a565b935060ff168151811061641a5761641a619aad565b60200260200101819052505b60e085015160200151156164d05760408051808201909152600a81527f2d2d6761735072696365000000000000000000000000000000000000000000006020820152828261647381619c1a565b935060ff168151811061648857616488619aad565b60200260200101819052506164a48560e001516020015161728b565b82826164af81619c1a565b935060ff16815181106164c4576164c4619aad565b60200260200101819052505b60e0850151604001511561657a5760408051808201909152600e81527f2d2d6d61784665655065724761730000000000000000000000000000000000006020820152828261651d81619c1a565b935060ff168151811061653257616532619aad565b602002602001018190525061654e8560e001516040015161728b565b828261655981619c1a565b935060ff168151811061656e5761656e619aad565b60200260200101819052505b60e085015160600151156166245760408051808201909152601681527f2d2d6d61785072696f7269747946656550657247617300000000000000000000602082015282826165c781619c1a565b935060ff16815181106165dc576165dc619aad565b60200260200101819052506165f88560e001516060015161728b565b828261660381619c1a565b935060ff168151811061661857616618619aad565b60200260200101819052505b60008160ff1667ffffffffffffffff811115616642576166426194e7565b60405190808252806020026020018201604052801561667557816020015b60608152602001906001900390816166605790505b50905060005b8260ff168160ff1610156166ce57838160ff168151811061669e5761669e619aad565b6020026020010151828260ff16815181106166bb576166bb619aad565b602090810291909101015260010161667b565b5093505050505b949350505050565b6167046040518060600160405280600060030b815260200160608152602001606081525090565b60408051808201825260048082527f6261736800000000000000000000000000000000000000000000000000000000602083015291517fd145736c000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d92600091849163d145736c9161678a91869101619ca4565b600060405180830381865afa1580156167a7573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526167cf9190810190619725565b905060006167dd8683617e1a565b90506000846001600160a01b031663f45c1ce7836040518263ffffffff1660e01b815260040161680d9190619164565b6000604051808303816000875af115801561682c573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526168549190810190619ceb565b805190915060030b1580159061686d5750602081015151155b801561687c5750604081015151155b15615856578160008151811061689457616894619aad565b6020026020010151604051602001614eab9190619da1565b606060006168e18560408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6040805180820182526000808252602091820152815180830190925286518252808701908201529091506169189082905b90617f6f565b15616a755760006169958261698f8461698961695b8a60408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6040805180820182526000808252602091820152815180830190925282518252918201519181019190915290565b90617f96565b90617ff8565b604080518082018252600181527f0a00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201529091506169f9908290617f6f565b15616a6357604080518082018252600181527f0a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616a60905b829061807d565b90505b616a6c816180a3565b92505050614dd8565b8215616a8e578484604051602001614eab929190619f8d565b5050604080516020810190915260008152614dd8565b509392505050565b6000808251602084016000f09392505050565b8160a0015115616ace57505050565b6000616adb84848461810c565b90506000616ae8826166dd565b602081015181519192509060030b158015616b845750604080518082018252600781527f535543434553530000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616b8490604080518082018252600080825260209182015281518083019092528451825280850190820152616912565b15616b9157505050505050565b60408201515115616bb1578160400151604051602001614eab919061a034565b80604051602001614eab919061a092565b60606000616bf78360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600481527f2e736f6c0000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152909150616c5c905b829061722a565b15616ccb57604080518082018252600481527f2e736f6c0000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152614dd890616cc69083906186a7565b6180a3565b604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616d2d905b8290618731565b600103616dfa57604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616d9390616a59565b50604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152614dd890616cc6905b839061807d565b604080518082018252600581527f2e6a736f6e00000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616e5990616c55565b15616f9057604080518082018252600181527f2f00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820181905284518086019095529251845283015290616ec19083906187cb565b905060008160018351616ed4919061a0fd565b81518110616ee457616ee4619aad565b60200260200101519050616f87616cc6616f5a6040518060400160405280600581526020017f2e6a736f6e00000000000000000000000000000000000000000000000000000081525060408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600080825260209182015281518083019092528551825280860190820152906186a7565b95945050505050565b82604051602001614eab919061a110565b50919050565b60606000616fdc8360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600481527f2e736f6c000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015290915061703e90616c55565b1561704c57614dd8816180a3565b604080518082018252600181527f3a00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526170ab90616d26565b60010361711557604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152614dd890616cc690616df3565b604080518082018252600581527f2e6a736f6e0000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261717490616c55565b15616f9057604080518082018252600181527f2f000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201819052845180860190955292518452830152906171dc9083906187cb565b90506001815111156172185780600282516171f7919061a0fd565b8151811061720757617207619aad565b602002602001015192505050919050565b5082604051602001614eab919061a110565b80518251600091111561723f57506000614cdf565b81518351602085015160009291617255916192a1565b61725f919061a0fd565b905082602001518103617276576001915050614cdf565b82516020840151819020912014905092915050565b6060600061729883618870565b600101905060008167ffffffffffffffff8111156172b8576172b86194e7565b6040519080825280601f01601f1916602001820160405280156172e2576020820181803683370190505b5090508181016020015b600019017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a85049450846172ec57509392505050565b604081810151815180830183526000808252602091820181905283518085018552835181529282018383015283518085018552600a81527f554e4c4943454e53454400000000000000000000000000000000000000000000818401908152855180870187528381528401929092528451808601909552518452908301526060916173b7905b8290618952565b156173f757505060408051808201909152600481527f4e6f6e65000000000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600981527f556e6c6963656e7365000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617456906173b0565b1561749657505060408051808201909152600981527f556e6c6963656e736500000000000000000000000000000000000000000000006020820152919050565b604080518082018252600381527f4d49540000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526174f5906173b0565b1561753557505060408051808201909152600381527f4d495400000000000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f47504c2d322e302d6f6e6c79000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617594906173b0565b806175f95750604080518082018252601081527f47504c2d322e302d6f722d6c6174657200000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526175f9906173b0565b1561763957505060408051808201909152600981527f474e552047504c763200000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f47504c2d332e302d6f6e6c79000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617698906173b0565b806176fd5750604080518082018252601081527f47504c2d332e302d6f722d6c6174657200000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526176fd906173b0565b1561773d57505060408051808201909152600981527f474e552047504c763300000000000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4c47504c2d322e312d6f6e6c79000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261779c906173b0565b806178015750604080518082018252601181527f4c47504c2d322e312d6f722d6c6174657200000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617801906173b0565b1561784157505060408051808201909152600c81527f474e55204c47504c76322e3100000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4c47504c2d332e302d6f6e6c7900000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526178a0906173b0565b806179055750604080518082018252601181527f4c47504c2d332e302d6f722d6c6174657200000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617905906173b0565b1561794557505060408051808201909152600a81527f474e55204c47504c7633000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f4253442d322d436c617573650000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526179a4906173b0565b156179e457505060408051808201909152600c81527f4253442d322d436c6175736500000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f4253442d332d436c61757365000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617a43906173b0565b15617a8357505060408051808201909152600c81527f4253442d332d436c6175736500000000000000000000000000000000000000006020820152919050565b604080518082018252600781527f4d504c2d322e300000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617ae2906173b0565b15617b2257505060408051808201909152600781527f4d504c2d322e30000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600781527f4f534c2d332e300000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617b81906173b0565b15617bc157505060408051808201909152600781527f4f534c2d332e30000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600a81527f4170616368652d322e300000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617c20906173b0565b15617c6057505060408051808201909152600a81527f4170616368652d322e30000000000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4147504c2d332e302d6f6e6c790000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617cbf906173b0565b80617d245750604080518082018252601181527f4147504c2d332e302d6f722d6c6174657200000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617d24906173b0565b15617d6457505060408051808201909152600a81527f474e55204147504c7633000000000000000000000000000000000000000000006020820152919050565b604080518082018252600881527f4255534c2d312e3100000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617dc3906173b0565b15617e0357505060408051808201909152600781527f42534c20312e31000000000000000000000000000000000000000000000000006020820152919050565b60408084015184519151614eab929060200161a1ee565b60608060005b8451811015617ea55781858281518110617e3c57617e3c619aad565b6020026020010151604051602001617e55929190619604565b604051602081830303815290604052915060018551617e74919061a0fd565b8114617e9d5781604051602001617e8b919061a357565b60405160208183030381529060405291505b600101617e20565b5060408051600380825260808201909252600091816020015b6060815260200190600190039081617ebe5790505090508381600081518110617ee957617ee9619aad565b60200260200101819052506040518060400160405280600281526020017f2d6300000000000000000000000000000000000000000000000000000000000081525081600181518110617f3d57617f3d619aad565b60200260200101819052508181600281518110617f5c57617f5c619aad565b6020908102919091010152949350505050565b6020808301518351835192840151600093617f8d9291849190618966565b14159392505050565b60408051808201909152600080825260208201526000617fc88460000151856020015185600001518660200151618a77565b9050836020015181617fda919061a0fd565b84518590617fe990839061a0fd565b90525060208401525090919050565b604080518082019091526000808252602082015281518351101561801d575081614cdf565b60208083015190840151600191146180445750815160208481015190840151829020919020145b80156180755782518451859061805b90839061a0fd565b90525082516020850180516180719083906192a1565b9052505b509192915050565b604080518082019091526000808252602082015261809c838383618b97565b5092915050565b60606000826000015167ffffffffffffffff8111156180c4576180c46194e7565b6040519080825280601f01601f1916602001820160405280156180ee576020820181803683370190505b509050600060208201905061809c8185602001518660000151618c42565b606060006181186150d5565b6040805160ff808252612000820190925291925060009190816020015b606081526020019060019003908161813557905050905060006040518060400160405280600381526020017f6e7078000000000000000000000000000000000000000000000000000000000081525082828061819090619c1a565b935060ff16815181106181a5576181a5619aad565b60200260200101819052506040518060400160405280600781526020017f5e312e33322e33000000000000000000000000000000000000000000000000008152506040516020016181f6919061a398565b60405160208183030381529060405282828061821190619c1a565b935060ff168151811061822657618226619aad565b60200260200101819052506040518060400160405280600881526020017f76616c696461746500000000000000000000000000000000000000000000000081525082828061827390619c1a565b935060ff168151811061828857618288619aad565b6020026020010181905250826040516020016182a49190619b48565b6040516020818303038152906040528282806182bf90619c1a565b935060ff16815181106182d4576182d4619aad565b60200260200101819052506040518060400160405280600a81526020017f2d2d636f6e74726163740000000000000000000000000000000000000000000081525082828061832190619c1a565b935060ff168151811061833657618336619aad565b602002602001018190525061834b8784618cbc565b828261835681619c1a565b935060ff168151811061836b5761836b619aad565b6020908102919091010152855151156184175760408051808201909152600b81527f2d2d7265666572656e6365000000000000000000000000000000000000000000602082015282826183bd81619c1a565b935060ff16815181106183d2576183d2619aad565b60200260200101819052506183eb866000015184618cbc565b82826183f681619c1a565b935060ff168151811061840b5761840b619aad565b60200260200101819052505b8560800151156184855760408051808201909152601881527f2d2d756e73616665536b697053746f72616765436865636b00000000000000006020820152828261846081619c1a565b935060ff168151811061847557618475619aad565b60200260200101819052506184eb565b84156184eb5760408051808201909152601281527f2d2d726571756972655265666572656e63650000000000000000000000000000602082015282826184ca81619c1a565b935060ff16815181106184df576184df619aad565b60200260200101819052505b604086015151156185875760408051808201909152600d81527f2d2d756e73616665416c6c6f77000000000000000000000000000000000000006020820152828261853581619c1a565b935060ff168151811061854a5761854a619aad565b6020026020010181905250856040015182828061856690619c1a565b935060ff168151811061857b5761857b619aad565b60200260200101819052505b8560600151156185f15760408051808201909152601481527f2d2d756e73616665416c6c6f7752656e616d6573000000000000000000000000602082015282826185d081619c1a565b935060ff16815181106185e5576185e5619aad565b60200260200101819052505b60008160ff1667ffffffffffffffff81111561860f5761860f6194e7565b60405190808252806020026020018201604052801561864257816020015b606081526020019060019003908161862d5790505b50905060005b8260ff168160ff16101561869b57838160ff168151811061866b5761866b619aad565b6020026020010151828260ff168151811061868857618688619aad565b6020908102919091010152600101618648565b50979650505050505050565b60408051808201909152600080825260208201528151835110156186cc575081614cdf565b815183516020850151600092916186e2916192a1565b6186ec919061a0fd565b6020840151909150600190821461870d575082516020840151819020908220145b80156187285783518551869061872490839061a0fd565b9052505b50929392505050565b60008082600001516187558560000151866020015186600001518760200151618a77565b61875f91906192a1565b90505b8351602085015161877391906192a1565b811161809c57816187838161a3dd565b92505082600001516187ba85602001518361879e919061a0fd565b86516187aa919061a0fd565b8386600001518760200151618a77565b6187c491906192a1565b9050618762565b606060006187d98484618731565b6187e49060016192a1565b67ffffffffffffffff8111156187fc576187fc6194e7565b60405190808252806020026020018201604052801561882f57816020015b606081526020019060019003908161881a5790505b50905060005b8151811015616aa45761884b616cc6868661807d565b82828151811061885d5761885d619aad565b6020908102919091010152600101618835565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f01000000000000000083106188b9577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef810000000083106188e5576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc10000831061890357662386f26fc10000830492506010015b6305f5e100831061891b576305f5e100830492506008015b612710831061892f57612710830492506004015b60648310618941576064830492506002015b600a8310614cdf5760010192915050565b600061895e8383618cfc565b159392505050565b600080858411618a6d5760208411618a1957600084156189b157600161898d86602061a0fd565b61899890600861a3f7565b6189a390600261a4f5565b6189ad919061a0fd565b1990505b83518116856189c089896192a1565b6189ca919061a0fd565b805190935082165b818114618a04578784116189ec57879450505050506166d5565b836189f68161a501565b9450508284511690506189d2565b618a0e87856192a1565b9450505050506166d5565b838320618a26858861a0fd565b618a3090876192a1565b91505b858210618a6b57848220808203618a5857618a4e86846192a1565b93505050506166d5565b618a6360018461a0fd565b925050618a33565b505b5092949350505050565b60008381868511618b825760208511618b315760008515618ac3576001618a9f87602061a0fd565b618aaa90600861a3f7565b618ab590600261a4f5565b618abf919061a0fd565b1990505b84518116600087618ad48b8b6192a1565b618ade919061a0fd565b855190915083165b828114618b2357818610618b0b57618afe8b8b6192a1565b96505050505050506166d5565b85618b158161a3dd565b965050838651169050618ae6565b8596505050505050506166d5565b508383206000905b618b43868961a0fd565b8211618b8057858320808203618b5f57839450505050506166d5565b618b6a6001856192a1565b9350508180618b789061a3dd565b925050618b39565b505b618b8c87876192a1565b979650505050505050565b60408051808201909152600080825260208201526000618bc98560000151866020015186600001518760200151618a77565b602080870180519186019190915251909150618be5908261a0fd565b835284516020860151618bf891906192a1565b8103618c075760008552618c39565b83518351618c1591906192a1565b85518690618c2490839061a0fd565b9052508351618c3390826192a1565b60208601525b50909392505050565b60208110618c7a5781518352618c596020846192a1565b9250618c666020836192a1565b9150618c7360208261a0fd565b9050618c42565b6000198115618ca9576001618c9083602061a0fd565b618c9c9061010061a4f5565b618ca6919061a0fd565b90505b9151835183169219169190911790915250565b60606000618cca84846151a8565b8051602080830151604051939450618ce49390910161a518565b60405160208183030381529060405291505092915050565b8151815160009190811115618d0f575081515b6020808501519084015160005b83811015618dc85782518251808214618d98576000196020871015618d7757600184618d4989602061a0fd565b618d5391906192a1565b618d5e90600861a3f7565b618d6990600261a4f5565b618d73919061a0fd565b1990505b8181168382168181039114618d95579750614cdf9650505050505050565b50505b618da36020866192a1565b9450618db06020856192a1565b93505050602081618dc191906192a1565b9050618d1c565b5084518651615856919061a570565b6112a68061a59183390190565b6116fe8061b83783390190565b61155a8061cf3583390190565b610d5e8061e48f83390190565b6040518060e00160405280606081526020016060815260200160608152602001600015158152602001600015158152602001600015158152602001618e4e618e53565b905290565b60405180610100016040528060001515815260200160001515815260200160608152602001600080191681526020016060815260200160608152602001600015158152602001618e4e6040518060800160405280600081526020016000815260200160008152602001600081525090565b602080825282518282018190526000918401906040840190835b81811015618f055783516001600160a01b0316835260209384019390920191600101618ede565b509095945050505050565b60005b83811015618f2b578181015183820152602001618f13565b50506000910152565b60008151808452618f4c816020860160208601618f10565b601f01601f19169290920160200192915050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b8281101561905c577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452815180516001600160a01b03168652602090810151604082880181905281519088018190529101906060600582901b88018101919088019060005b81811015619042577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa08a850301835261902c848651618f34565b6020958601959094509290920191600101618ff2565b509197505050602094850194929092019150600101618f88565b50929695505050505050565b600081518084526020840193506020830160005b828110156190bc5781517fffffffff000000000000000000000000000000000000000000000000000000001686526020958601959091019060010161907c565b5093949350505050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b8281101561905c577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc087860301845281518051604087526191326040880182618f34565b905060208201519150868103602088015261914d8183619068565b9650505060209384019391909101906001016190ee565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b8281101561905c577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08786030184526191c6858351618f34565b9450602093840193919091019060010161918c565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b8281101561905c577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc087860301845281516001600160a01b038151168652602081015190506040602087015261925c6040870182619068565b9550506020938401939190910190600101619203565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b80820180821115614cdf57614cdf619272565b6001600160a01b03841681528260208201526080604082015260006192dc6080830184618f34565b905060006060830152949350505050565b600181811c9082168061930157607f821691505b602082108103616fa1577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006020828403121561934c57600080fd5b5051919050565b6001600160a01b0384168152826020820152606060408201526000616f876060830184618f34565b8281526040602082015260006166d56040830184618f34565b6001600160a01b03851681528360208201526080604082015260006193bc6080830185618f34565b905082606083015295945050505050565b602081526000614dd86020830184618f34565b600082619416577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b6001600160a01b03831681526040602082015260006166d56040830184618f34565b7f4661696c656420746f206465706c6f7920636f6e74726163742000000000000081526000835161947581601a850160208801618f10565b7f3a20000000000000000000000000000000000000000000000000000000000000601a9184019182015283516194b281601c840160208801618f10565b01601c01949350505050565b6000602082840312156194d057600080fd5b81516001600160a01b0381168114614dd857600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040516060810167ffffffffffffffff81118282101715619539576195396194e7565b60405290565b60008067ffffffffffffffff84111561955a5761955a6194e7565b50604051601f19601f85018116603f0116810181811067ffffffffffffffff82111715619589576195896194e7565b6040528381529050808284018510156195a157600080fd5b616aa4846020830185618f10565b600082601f8301126195c057600080fd5b614dd88383516020850161953f565b6000602082840312156195e157600080fd5b815167ffffffffffffffff8111156195f857600080fd5b614cdb848285016195af565b60008351619616818460208801618f10565b83519083019061962a818360208801618f10565b01949350505050565b7f4661696c656420746f206465706c6f7920636f6e74726163742000000000000081526000835161966b81601a850160208801618f10565b7f207573696e6720636f6e7374727563746f722064617461202200000000000000601a9184019182015283516196a8816033840160208801618f10565b7f220000000000000000000000000000000000000000000000000000000000000060339290910191820152603401949350505050565b60408152600b60408201527f464f554e4452595f4f55540000000000000000000000000000000000000000006060820152608060208201526000614dd86080830184618f34565b60006020828403121561973757600080fd5b815167ffffffffffffffff81111561974e57600080fd5b8201601f8101841361975f57600080fd5b614cdb8482516020840161953f565b60008551619780818460208a01618f10565b7f2f0000000000000000000000000000000000000000000000000000000000000090830190815285516197ba816001840160208a01618f10565b7f2f000000000000000000000000000000000000000000000000000000000000006001929091019182015284516197f8816002840160208901618f10565b6001818301019150507f2f000000000000000000000000000000000000000000000000000000000000006001820152835161983a816002840160208801618f10565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600292909101918201526007019695505050505050565b6040815260006198856040830184618f34565b8281036020840152600481527f2e6173740000000000000000000000000000000000000000000000000000000060208201526040810191505092915050565b6000602082840312156198d657600080fd5b81518015158114614dd857600080fd5b7f436f756c64206e6f742066696e642041535420696e206172746966616374200081526000825161991e81601f850160208701618f10565b7f2e205365742060617374203d20747275656020696e20666f756e6472792e746f601f9390910192830152507f6d6c000000000000000000000000000000000000000000000000000000000000603f820152604101919050565b60408152600061998b6040830184618f34565b8281036020840152601181527f2e6173742e6162736f6c7574655061746800000000000000000000000000000060208201526040810191505092915050565b6040815260006199dd6040830184618f34565b8281036020840152600c81527f2e6173742e6c6963656e7365000000000000000000000000000000000000000060208201526040810191505092915050565b7f2e6d657461646174612e736f75726365732e5b27000000000000000000000000815260008251619a54816014850160208701618f10565b7f275d2e6b656363616b32353600000000000000000000000000000000000000006014939091019283015250602001919050565b604081526000619a9b6040830185618f34565b8281036020840152614dd48185618f34565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f2200000000000000000000000000000000000000000000000000000000000000815260008251619b14816001850160208701618f10565b7f22000000000000000000000000000000000000000000000000000000000000006001939091019283015250600201919050565b60008251619b5a818460208701618f10565b7f2f6275696c642d696e666f000000000000000000000000000000000000000000920191825250600b01919050565b7f436f756c64206e6f742066696e64206275696c642d696e666f2066696c65207781527f697468206d61746368696e6720736f7572636520636f6465206861736820666f60208201527f7220636f6e747261637420000000000000000000000000000000000000000000604082015260008251619c0d81604b850160208701618f10565b91909101604b0192915050565b600060ff821660ff8103619c3057619c30619272565b60010192915050565b7f406f70656e7a657070656c696e2f646566656e6465722d6465706c6f792d636c81527f69656e742d636c69400000000000000000000000000000000000000000000000602082015260008251619c97816029850160208701618f10565b9190910160290192915050565b60408152601660408201527f4f50454e5a455050454c494e5f424153485f50415448000000000000000000006060820152608060208201526000614dd86080830184618f34565b600060208284031215619cfd57600080fd5b815167ffffffffffffffff811115619d1457600080fd5b820160608185031215619d2657600080fd5b619d2e619516565b81518060030b8114619d3f57600080fd5b8152602082015167ffffffffffffffff811115619d5b57600080fd5b619d67868285016195af565b602083015250604082015167ffffffffffffffff811115619d8757600080fd5b619d93868285016195af565b604083015250949350505050565b7f4661696c656420746f2072756e206261736820636f6d6d616e6420776974682081527f2200000000000000000000000000000000000000000000000000000000000000602082015260008251619dff816021850160208701618f10565b7f222e20496620796f7520617265207573696e672057696e646f77732c2073657460219390910192830152507f20746865204f50454e5a455050454c494e5f424153485f5041544820656e766960418201527f726f6e6d656e74207661726961626c6520746f207468652066756c6c7920717560618201527f616c69666965642070617468206f66207468652062617368206578656375746160818201527f626c652e20466f72206578616d706c652c20696620796f75206172652075736960a18201527f6e672047697420666f722057696e646f77732c206164642074686520666f6c6c60c18201527f6f77696e67206c696e6520696e20746865202e656e762066696c65206f66207960e18201527f6f75722070726f6a65637420287573696e6720666f727761726420736c6173686101018201527f6573293a0a4f50454e5a455050454c494e5f424153485f504154483d22433a2f6101218201527f50726f6772616d2046696c65732f4769742f62696e2f6261736822000000000061014182015261015c01919050565b7f4661696c656420746f2066696e64206c696e652077697468207072656669782081527f2700000000000000000000000000000000000000000000000000000000000000602082015260008351619feb816021850160208801618f10565b7f2720696e206f75747075743a2000000000000000000000000000000000000000602191840191820152835161a02881602e840160208801618f10565b01602e01949350505050565b7f4661696c656420746f2072756e2075706772616465207361666574792076616c81527f69646174696f6e3a200000000000000000000000000000000000000000000000602082015260008251619c97816029850160208701618f10565b7f55706772616465207361666574792076616c69646174696f6e206661696c656481527f3a0a00000000000000000000000000000000000000000000000000000000000060208201526000825161a0f0816022850160208701618f10565b9190910160220192915050565b81810381811115614cdf57614cdf619272565b7f436f6e7472616374206e616d652000000000000000000000000000000000000081526000825161a14881600e850160208701618f10565b7f206d75737420626520696e2074686520666f726d6174204d79436f6e74726163600e9390910192830152507f742e736f6c3a4d79436f6e7472616374206f72204d79436f6e74726163742e73602e8201527f6f6c206f72206f75742f4d79436f6e74726163742e736f6c2f4d79436f6e7472604e8201527f6163742e6a736f6e000000000000000000000000000000000000000000000000606e820152607601919050565b7f53504458206c6963656e7365206964656e74696669657220000000000000000081526000835161a226816018850160208801618f10565b7f20696e2000000000000000000000000000000000000000000000000000000000601891840191820152835161a26381601c840160208801618f10565b7f20646f6573206e6f74206c6f6f6b206c696b65206120737570706f7274656420601c92909101918201527f6c6963656e736520666f7220626c6f636b206578706c6f726572207665726966603c8201527f69636174696f6e2e205573652074686520606c6963656e73655479706560206f605c8201527f7074696f6e20746f20737065636966792061206c6963656e736520747970652c607c8201527f206f7220736574207468652060736b69704c6963656e73655479706560206f70609c8201527f74696f6e20746f2060747275656020746f20736b69702e00000000000000000060bc82015260d301949350505050565b6000825161a369818460208701618f10565b7f2000000000000000000000000000000000000000000000000000000000000000920191825250600101919050565b7f406f70656e7a657070656c696e2f75706772616465732d636f7265400000000081526000825161a3d081601c850160208701618f10565b91909101601c0192915050565b6000600019820361a3f05761a3f0619272565b5060010190565b8082028115828204841417614cdf57614cdf619272565b6001815b600184111561a4495780850481111561a42d5761a42d619272565b600184161561a43b57908102905b60019390931c92800261a412565b935093915050565b60008261a46057506001614cdf565b8161a46d57506000614cdf565b816001811461a483576002811461a48d5761a4a9565b6001915050614cdf565b60ff84111561a49e5761a49e619272565b50506001821b614cdf565b5060208310610133831016604e8410600b841016171561a4cc575081810a614cdf565b61a4d9600019848461a40e565b806000190482111561a4ed5761a4ed619272565b029392505050565b6000614dd8838361a451565b60008161a5105761a510619272565b506000190190565b6000835161a52a818460208801618f10565b7f3a00000000000000000000000000000000000000000000000000000000000000908301908152835161a564816001840160208801618f10565b01600101949350505050565b818103600083128015838313168383128216171561809c5761809c61927256fe608060405234801561001057600080fd5b506040516112a63803806112a683398101604081905261002f91610110565b604051806040016040528060048152602001635a65746160e01b815250604051806040016040528060048152602001635a45544160e01b815250816003908161007891906101e2565b50600461008582826101e2565b5050506001600160a01b03821615806100a557506001600160a01b038116155b156100c35760405163e6c4247b60e01b815260040160405180910390fd5b600680546001600160a01b039384166001600160a01b031991821617909155600780549290931691161790556102a0565b80516001600160a01b038116811461010b57600080fd5b919050565b6000806040838503121561012357600080fd5b61012c836100f4565b915061013a602084016100f4565b90509250929050565b634e487b7160e01b600052604160045260246000fd5b600181811c9082168061016d57607f821691505b60208210810361018d57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156101dd57806000526020600020601f840160051c810160208510156101ba5750805b601f840160051c820191505b818110156101da57600081556001016101c6565b50505b505050565b81516001600160401b038111156101fb576101fb610143565b61020f816102098454610159565b84610193565b6020601f821160018114610243576000831561022b5750848201515b600019600385901b1c1916600184901b1784556101da565b600084815260208120601f198516915b828110156102735787850151825560209485019460019092019101610253565b50848210156102915786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b610ff7806102af6000396000f3fe608060405234801561001057600080fd5b506004361061011b5760003560e01c806342966c68116100b257806379cc679011610081578063a9059cbb11610066578063a9059cbb1461028e578063bff9662a146102a1578063dd62ed3e146102c157600080fd5b806379cc67901461027357806395d89b411461028657600080fd5b806342966c68146102025780635b1125911461021557806370a0823114610235578063779e3b631461026b57600080fd5b80631e458bee116100ee5780631e458bee1461018857806323b872dd1461019b578063313ce567146101ae578063328a01d0146101bd57600080fd5b806306fdde0314610120578063095ea7b31461013e57806315d57fd41461016157806318160ddd14610176575b600080fd5b610128610307565b6040516101359190610d97565b60405180910390f35b61015161014c366004610e2c565b610399565b6040519015158152602001610135565b61017461016f366004610e56565b6103b3565b005b6002545b604051908152602001610135565b610174610196366004610e89565b61057e565b6101516101a9366004610ebc565b610631565b60405160128152602001610135565b6007546101dd9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610135565b610174610210366004610ef9565b610655565b6006546101dd9073ffffffffffffffffffffffffffffffffffffffff1681565b61017a610243366004610f12565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b610174610662565b610174610281366004610e2c565b610786565b610128610837565b61015161029c366004610e2c565b610846565b6005546101dd9073ffffffffffffffffffffffffffffffffffffffff1681565b61017a6102cf366004610e56565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b60606003805461031690610f34565b80601f016020809104026020016040519081016040528092919081815260200182805461034290610f34565b801561038f5780601f106103645761010080835404028352916020019161038f565b820191906000526020600020905b81548152906001019060200180831161037257829003601f168201915b5050505050905090565b6000336103a7818585610854565b60019150505b92915050565b60075473ffffffffffffffffffffffffffffffffffffffff1633148015906103f3575060065473ffffffffffffffffffffffffffffffffffffffff163314155b15610431576040517fcdfcef970000000000000000000000000000000000000000000000000000000081523360048201526024015b60405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff82161580610468575073ffffffffffffffffffffffffffffffffffffffff8116155b1561049f576040517fe6c4247b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6006805473ffffffffffffffffffffffffffffffffffffffff8481167fffffffffffffffffffffffff0000000000000000000000000000000000000000928316811790935560058054918516919092161790556040805133815260208101929092527fe79965b5c67dcfb2cf5fe152715e4a7256cee62a3d5dd8484fd8a8539eb8beff910160405180910390a16040805133815273ffffffffffffffffffffffffffffffffffffffff831660208201527f1b9352454524a57a51f24f67dc66d898f616922cd1f7a12d73570ece12b1975c910160405180910390a15050565b60055473ffffffffffffffffffffffffffffffffffffffff1633146105d1576040517f3fe32fba000000000000000000000000000000000000000000000000000000008152336004820152602401610428565b6105db8383610866565b808373ffffffffffffffffffffffffffffffffffffffff167fc263b302aec62d29105026245f19e16f8e0137066ccd4a8bd941f716bd4096bb8460405161062491815260200190565b60405180910390a3505050565b60003361063f8582856108c6565b61064a858585610995565b506001949350505050565b61065f3382610a40565b50565b60075473ffffffffffffffffffffffffffffffffffffffff1633146106b5576040517fe700765e000000000000000000000000000000000000000000000000000000008152336004820152602401610428565b60065473ffffffffffffffffffffffffffffffffffffffff16610704576040517fe6c4247b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600654600780547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff90921691821790556040805133815260208101929092527f5104c9abdc7d111c2aeb4ce890ac70274a4be2ee83f46a62551be5e6ebc82dd0910160405180910390a1565b60055473ffffffffffffffffffffffffffffffffffffffff1633146107d9576040517f3fe32fba000000000000000000000000000000000000000000000000000000008152336004820152602401610428565b6107e38282610a9c565b8173ffffffffffffffffffffffffffffffffffffffff167f919f7e2092ffcc9d09f599be18d8152860b0c054df788a33bc549cdd9d0f15b18260405161082b91815260200190565b60405180910390a25050565b60606004805461031690610f34565b6000336103a7818585610995565b6108618383836001610ab1565b505050565b73ffffffffffffffffffffffffffffffffffffffff82166108b6576040517fec442f0500000000000000000000000000000000000000000000000000000000815260006004820152602401610428565b6108c260008383610bf9565b5050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811461098f5781811015610980576040517ffb8f41b200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff841660048201526024810182905260448101839052606401610428565b61098f84848484036000610ab1565b50505050565b73ffffffffffffffffffffffffffffffffffffffff83166109e5576040517f96c6fd1e00000000000000000000000000000000000000000000000000000000815260006004820152602401610428565b73ffffffffffffffffffffffffffffffffffffffff8216610a35576040517fec442f0500000000000000000000000000000000000000000000000000000000815260006004820152602401610428565b610861838383610bf9565b73ffffffffffffffffffffffffffffffffffffffff8216610a90576040517f96c6fd1e00000000000000000000000000000000000000000000000000000000815260006004820152602401610428565b6108c282600083610bf9565b610aa78233836108c6565b6108c28282610a40565b73ffffffffffffffffffffffffffffffffffffffff8416610b01576040517fe602df0500000000000000000000000000000000000000000000000000000000815260006004820152602401610428565b73ffffffffffffffffffffffffffffffffffffffff8316610b51576040517f94280d6200000000000000000000000000000000000000000000000000000000815260006004820152602401610428565b73ffffffffffffffffffffffffffffffffffffffff8085166000908152600160209081526040808320938716835292905220829055801561098f578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051610beb91815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff8316610c31578060026000828254610c269190610f87565b90915550610ce39050565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205481811015610cb7576040517fe450d38c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff851660048201526024810182905260448101839052606401610428565b73ffffffffffffffffffffffffffffffffffffffff841660009081526020819052604090209082900390555b73ffffffffffffffffffffffffffffffffffffffff8216610d0c57600280548290039055610d38565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090208054820190555b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161062491815260200190565b602081526000825180602084015260005b81811015610dc55760208186018101516040868401015201610da8565b5060006040828501015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011684010191505092915050565b803573ffffffffffffffffffffffffffffffffffffffff81168114610e2757600080fd5b919050565b60008060408385031215610e3f57600080fd5b610e4883610e03565b946020939093013593505050565b60008060408385031215610e6957600080fd5b610e7283610e03565b9150610e8060208401610e03565b90509250929050565b600080600060608486031215610e9e57600080fd5b610ea784610e03565b95602085013595506040909401359392505050565b600080600060608486031215610ed157600080fd5b610eda84610e03565b9250610ee860208501610e03565b929592945050506040919091013590565b600060208284031215610f0b57600080fd5b5035919050565b600060208284031215610f2457600080fd5b610f2d82610e03565b9392505050565b600181811c90821680610f4857607f821691505b602082108103610f81577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b808201808211156103ad577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea2646970667358221220085f01204b33dc17013c78c74fbca32a3da2c0b384ce7c8878c889551af28c6164736f6c634300081a003360a060405234801561001057600080fd5b506040516116fe3803806116fe83398101604081905261002f916101e5565b60016000556002805460ff191690556001600160a01b038316158061005b57506001600160a01b038216155b8061006d57506001600160a01b038116155b1561008b5760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b0383166080526100a3600082610134565b506100ce7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a82610134565b506100f97f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e483610134565b506101126000805160206116de83398151915282610134565b5061012b6000805160206116de83398151915283610134565b50505050610228565b60008281526001602090815260408083206001600160a01b038516845290915281205460ff166101bf5760008381526001602081815260408084206001600160a01b0387168086529252808420805460ff19169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45060016101c3565b5060005b92915050565b80516001600160a01b03811681146101e057600080fd5b919050565b6000806000606084860312156101fa57600080fd5b610203846101c9565b9250610211602085016101c9565b915061021f604085016101c9565b90509250925092565b60805161147f61025f6000396000818161019e0152818161050001528181610562015281816108f70152610959015261147f6000f3fe608060405234801561001057600080fd5b506004361061016c5760003560e01c806385f438c1116100cd578063c8a0236211610081578063d936547e11610066578063d936547e14610355578063d9caed1214610378578063e63ab1e91461038b57600080fd5b8063c8a023621461032f578063d547741f1461034257600080fd5b80639a590427116100b25780639a590427146103015780639b19251a14610314578063a217fddf1461032757600080fd5b806385f438c11461029457806391d14854146102bb57600080fd5b806336568abe11610124578063570618e111610109578063570618e11461025a5780635c975abb146102815780638456cb591461028c57600080fd5b806336568abe1461023f5780633f4ba83a1461025257600080fd5b806321fc65f21161015557806321fc65f2146101e5578063248a9ca3146101fa5780632f2ff15d1461022c57600080fd5b806301ffc9a714610171578063116191b614610199575b600080fd5b61018461017f36600461118a565b6103b2565b60405190151581526020015b60405180910390f35b6101c07f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610190565b6101f86101f33660046111f5565b61044b565b005b61021e610208366004611292565b6000908152600160208190526040909120015490565b604051908152602001610190565b6101f861023a3660046112ab565b61064c565b6101f861024d3660046112ab565b610678565b6101f86106d6565b61021e7f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a81565b60025460ff16610184565b6101f861070b565b61021e7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b6101846102c93660046112ab565b600091825260016020908152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b6101f861030f3660046112d7565b61073d565b6101f86103223660046112d7565b6107be565b61021e600081565b6101f861033d3660046111f5565b610842565b6101f86103503660046112ab565b610a29565b6101846103633660046112d7565b60036020526000908152604090205460ff1681565b6101f86103863660046112f2565b610a4f565b61021e7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061044557507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b610453610b7b565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461047d81610bbe565b610485610bc8565b73ffffffffffffffffffffffffffffffffffffffff861660009081526003602052604090205460ff166104e4576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61052573ffffffffffffffffffffffffffffffffffffffff87167f000000000000000000000000000000000000000000000000000000000000000086610c07565b6040517f5131ab5900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690635131ab599061059f9089908990899089908990600401611378565b600060405180830381600087803b1580156105b957600080fd5b505af11580156105cd573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167f85b5be9cf454e05e0bddf49315178102227c312078eefa3c00294fb4d912ae4e868686604051610632939291906113d5565b60405180910390a3506106456001600055565b5050505050565b6000828152600160208190526040909120015461066881610bbe565b6106728383610c94565b50505050565b73ffffffffffffffffffffffffffffffffffffffff811633146106c7576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6106d18282610d41565b505050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61070081610bbe565b610708610de2565b50565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61073581610bbe565b610708610e41565b7f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a61076781610bbe565b73ffffffffffffffffffffffffffffffffffffffff8216600081815260036020526040808220805460ff19169055517f51085ddf9ebdded84b76e829eb58c4078e4b5bdf97d9a94723f336039da467919190a25050565b7f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a6107e881610bbe565b73ffffffffffffffffffffffffffffffffffffffff8216600081815260036020526040808220805460ff19166001179055517faab7954e9d246b167ef88aeddad35209ca2489d95a8aeb59e288d9b19fae5a549190a25050565b61084a610b7b565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461087481610bbe565b61087c610bc8565b73ffffffffffffffffffffffffffffffffffffffff861660009081526003602052604090205460ff166108db576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61091c73ffffffffffffffffffffffffffffffffffffffff87167f000000000000000000000000000000000000000000000000000000000000000086610c07565b6040517fb8969bd400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063b8969bd4906109969089908990899089908990600401611378565b600060405180830381600087803b1580156109b057600080fd5b505af11580156109c4573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fb9d4efa96044e5f5e03e696fa9ae2ff66911cc27e8a637c3627c75bc5b2241c8868686604051610632939291906113d5565b60008281526001602081905260409091200154610a4581610bbe565b6106728383610d41565b610a57610b7b565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e4610a8181610bbe565b610a89610bc8565b73ffffffffffffffffffffffffffffffffffffffff841660009081526003602052604090205460ff16610ae8576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610b0973ffffffffffffffffffffffffffffffffffffffff85168484610c07565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f9b1bfa7fa9ee420a16e124f794c35ac9f90472acc99140eb2f6447c714cad8eb84604051610b6891815260200190565b60405180910390a3506106d16001600055565b600260005403610bb7576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b6107088133610e7e565b60025460ff1615610c05576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6040805173ffffffffffffffffffffffffffffffffffffffff8416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb000000000000000000000000000000000000000000000000000000001790526106d1908490610f0f565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff16610d3957600083815260016020818152604080842073ffffffffffffffffffffffffffffffffffffffff87168086529252808420805460ff19169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a4506001610445565b506000610445565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff1615610d3957600083815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff86168085529252808320805460ff1916905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a4506001610445565b610dea610fa5565b6002805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b610e49610bc8565b6002805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258610e173390565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16610f0b576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82166004820152602481018390526044015b60405180910390fd5b5050565b6000610f3173ffffffffffffffffffffffffffffffffffffffff841683610fe1565b90508051600014158015610f56575080806020019051810190610f5491906113f8565b155b156106d1576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84166004820152602401610f02565b60025460ff16610c05576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6060610fef83836000610ff6565b9392505050565b606081471015611034576040517fcd786059000000000000000000000000000000000000000000000000000000008152306004820152602401610f02565b6000808573ffffffffffffffffffffffffffffffffffffffff16848660405161105d919061141a565b60006040518083038185875af1925050503d806000811461109a576040519150601f19603f3d011682016040523d82523d6000602084013e61109f565b606091505b50915091506110af8683836110b9565b9695505050505050565b6060826110ce576110c982611148565b610fef565b81511580156110f2575073ffffffffffffffffffffffffffffffffffffffff84163b155b15611141576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85166004820152602401610f02565b5080610fef565b8051156111585780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006020828403121561119c57600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610fef57600080fd5b803573ffffffffffffffffffffffffffffffffffffffff811681146111f057600080fd5b919050565b60008060008060006080868803121561120d57600080fd5b611216866111cc565b9450611224602087016111cc565b935060408601359250606086013567ffffffffffffffff81111561124757600080fd5b8601601f8101881361125857600080fd5b803567ffffffffffffffff81111561126f57600080fd5b88602082840101111561128157600080fd5b959894975092955050506020019190565b6000602082840312156112a457600080fd5b5035919050565b600080604083850312156112be57600080fd5b823591506112ce602084016111cc565b90509250929050565b6000602082840312156112e957600080fd5b610fef826111cc565b60008060006060848603121561130757600080fd5b611310846111cc565b925061131e602085016111cc565b929592945050506040919091013590565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff8616815273ffffffffffffffffffffffffffffffffffffffff851660208201528360408201526080606082015260006113ca60808301848661132f565b979650505050505050565b8381526040602082015260006113ef60408301848661132f565b95945050505050565b60006020828403121561140a57600080fd5b81518015158114610fef57600080fd5b6000825160005b8181101561143b5760208186018101518583015201611421565b50600092019182525091905056fea2646970667358221220dc54ce548a1f0bf8ba5e86cc53c6d822e55eee543451395733c659359bac8dd164736f6c634300081a00338619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a60c060405260001960035534801561001657600080fd5b5060405161155a38038061155a83398101604081905261003591610220565b60016000819055805460ff19169055838383836001600160a01b038416158061006557506001600160a01b038316155b8061007757506001600160a01b038216155b8061008957506001600160a01b038116155b156100a75760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b03808516608052831660a0526100c5600082610154565b506100f07f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e483610154565b5061011b7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb83610154565b506101467f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a82610154565b505050505050505050610274565b60008281526002602090815260408083206001600160a01b038516845290915281205460ff166101fa5760008381526002602090815260408083206001600160a01b03861684529091529020805460ff191660011790556101b23390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45060016101fe565b5060005b92915050565b80516001600160a01b038116811461021b57600080fd5b919050565b6000806000806080858703121561023657600080fd5b61023f85610204565b935061024d60208601610204565b925061025b60408601610204565b915061026960608601610204565b905092959194509250565b60805160a0516112826102d86000396000818161021d01528181610531015281816108240152818161097b01528181610ad00152610bf20152600081816101d1015281816104a1015281816105040152818161079401526107f701526112826000f3fe608060405234801561001057600080fd5b50600436106101775760003560e01c80635e3e9fef116100d857806391d148541161008c578063d547741f11610066578063d547741f14610386578063d5abeb0114610399578063e63ab1e9146103a257600080fd5b806391d1485414610311578063a217fddf14610357578063a783c7891461035f57600080fd5b8063743e0c9b116100bd578063743e0c9b146102cf5780638456cb59146102e257806385f438c1146102ea57600080fd5b80635e3e9fef146102a95780636f8b44b0146102bc57600080fd5b8063248a9ca31161012f57806336568abe1161011457806336568abe146102835780633f4ba83a146102965780635c975abb1461029e57600080fd5b8063248a9ca31461023f5780632f2ff15d1461027057600080fd5b8063106e629011610160578063106e6290146101b9578063116191b6146101cc57806321e093b11461021857600080fd5b806301ffc9a71461017c57806302d5c899146101a4575b600080fd5b61018f61018a366004610fb4565b6103c9565b60405190151581526020015b60405180910390f35b6101b76101b2366004611026565b610462565b005b6101b76101c73660046110b8565b6105f7565b6101f37f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161019b565b6101f37f000000000000000000000000000000000000000000000000000000000000000081565b61026261024d3660046110eb565b60009081526002602052604090206001015490565b60405190815260200161019b565b6101b761027e366004611104565b61069c565b6101b7610291366004611104565b6106c7565b6101b7610720565b60015460ff1661018f565b6101b76102b7366004611026565b610755565b6101b76102ca3660046110eb565b6108d0565b6101b76102dd3660046110eb565b61093e565b6101b76109e8565b6102627f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b61018f61031f366004611104565b600091825260026020908152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b610262600081565b6102627f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb81565b6101b7610394366004611104565b610a1a565b61026260035481565b6102627f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061045c57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b61046a610a3f565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461049481610a82565b61049c610a8c565b6104c77f00000000000000000000000000000000000000000000000000000000000000008684610acb565b6040517fb8969bd400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063b8969bd490610561907f0000000000000000000000000000000000000000000000000000000000000000908a908a908a908a90600401611179565b600060405180830381600087803b15801561057b57600080fd5b505af115801561058f573d6000803e3d6000fd5b505050508573ffffffffffffffffffffffffffffffffffffffff167fba96f26bdda53eb8c8ba39045dfb4ff39753fbc7a6edcf250a88e75e78d102fe8686866040516105dd939291906111d6565b60405180910390a2506105f06001600055565b5050505050565b6105ff610a3f565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461062981610a82565b610631610a8c565b61063c848484610acb565b8373ffffffffffffffffffffffffffffffffffffffff167f884edad9ce6fa2440d8a54cc123490eb96d2768479d49ff9c7366125a94243648460405161068491815260200190565b60405180910390a2506106976001600055565b505050565b6000828152600260205260409020600101546106b781610a82565b6106c18383610c53565b50505050565b73ffffffffffffffffffffffffffffffffffffffff81163314610716576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6106978282610d53565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61074a81610a82565b610752610e12565b50565b61075d610a3f565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461078781610a82565b61078f610a8c565b6107ba7f00000000000000000000000000000000000000000000000000000000000000008684610acb565b6040517f5131ab5900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690635131ab5990610854907f0000000000000000000000000000000000000000000000000000000000000000908a908a908a908a90600401611179565b600060405180830381600087803b15801561086e57600080fd5b505af1158015610882573d6000803e3d6000fd5b505050508573ffffffffffffffffffffffffffffffffffffffff167f7772f56296d3a5202974a45c61c9188d844ab4d6eeb18c851e4b8d5384ca6ced8686866040516105dd939291906111d6565b7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb6108fa81610a82565b610902610a8c565b60038290556040518281527f7810bd47de260c3e9ee10061cf438099dd12256c79485f12f94dbccc981e806c9060200160405180910390a15050565b610946610a8c565b6040517f79cc6790000000000000000000000000000000000000000000000000000000008152336004820152602481018290527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16906379cc679090604401600060405180830381600087803b1580156109d457600080fd5b505af11580156105f0573d6000803e3d6000fd5b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610a1281610a82565b610752610e8f565b600082815260026020526040902060010154610a3581610a82565b6106c18383610d53565b600260005403610a7b576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b6107528133610ee8565b60015460ff1615610ac9576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6003547f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b39573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b5d91906111f9565b610b679084611212565b1115610b9f576040517fc30436e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f1e458bee00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff848116600483015260248201849052604482018390527f00000000000000000000000000000000000000000000000000000000000000001690631e458bee90606401600060405180830381600087803b158015610c3657600080fd5b505af1158015610c4a573d6000803e3d6000fd5b50505050505050565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff16610d4b57600083815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff86168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055610ce93390565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a450600161045c565b50600061045c565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff1615610d4b57600083815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8616808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a450600161045c565b610e1a610f78565b600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b610e97610a8c565b600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016811790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25833610e65565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16610f74576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff821660048201526024810183905260440160405180910390fd5b5050565b60015460ff16610ac9576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060208284031215610fc657600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610ff657600080fd5b9392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461102157600080fd5b919050565b60008060008060006080868803121561103e57600080fd5b61104786610ffd565b945060208601359350604086013567ffffffffffffffff81111561106a57600080fd5b8601601f8101881361107b57600080fd5b803567ffffffffffffffff81111561109257600080fd5b8860208284010111156110a457600080fd5b959894975060200195606001359392505050565b6000806000606084860312156110cd57600080fd5b6110d684610ffd565b95602085013595506040909401359392505050565b6000602082840312156110fd57600080fd5b5035919050565b6000806040838503121561111757600080fd5b8235915061112760208401610ffd565b90509250929050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff8616815273ffffffffffffffffffffffffffffffffffffffff851660208201528360408201526080606082015260006111cb608083018486611130565b979650505050505050565b8381526040602082015260006111f0604083018486611130565b95945050505050565b60006020828403121561120b57600080fd5b5051919050565b8082018082111561045c577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea2646970667358221220de5fa55e0ca79ea2f08903481d01ea00bbbf346b9cfba44e12a2dd6f3a6f2e8a64736f6c634300081a00336080604052348015600f57600080fd5b506001600055610d3a806100246000396000f3fe6080604052600436106100635760003560e01c8063c513169111610040578063c5131691146100c1578063e04d4f97146100e1578063f05b6abf146100f457005b8063357fc5a21461006c5780636ed701691461008c5780638fcaa0b5146100a157005b3661006a57005b005b34801561007857600080fd5b5061006a6100873660046106c0565b610114565b34801561009857600080fd5b5061006a6101aa565b3480156100ad57600080fd5b5061006a6100bc3660046106fc565b6101df565b3480156100cd57600080fd5b5061006a6100dc3660046106c0565b61021e565b61006a6100ef366004610895565b6102f9565b34801561010057600080fd5b5061006a61010f366004610981565b61033d565b61011c610372565b61013e73ffffffffffffffffffffffffffffffffffffffff83163383866103b5565b604080513381526020810185905273ffffffffffffffffffffffffffffffffffffffff848116828401528316606082015290517f2b58128f24a9f59127cc5b5430d70542b22220f2d9adaa86e442b816ab98af609181900360800190a16101a56001600055565b505050565b6040513381527fbcaadb46b82a48af60b608f58959ae6b8310d1b0a0d094c2e9ec3208ed39f2a09060200160405180910390a1565b7f0d3f65f00e631663aa85c96330b5c7a83bb29af3630c0063776f985edc3037aa33838360405161021293929190610a6b565b60405180910390a15050565b610226610372565b6000610233600285610ad5565b90508060000361026f576040517f1f2a200500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61029173ffffffffffffffffffffffffffffffffffffffff84163384846103b5565b604080513381526020810183905273ffffffffffffffffffffffffffffffffffffffff858116828401528416606082015290517f2b58128f24a9f59127cc5b5430d70542b22220f2d9adaa86e442b816ab98af609181900360800190a1506101a56001600055565b7f1f1ff1f5fb41346850b2f5c04e6c767e2f1c8a525c5c0c5cdb60cdf3ca5f62fa3334858585604051610330959493929190610b7e565b60405180910390a1505050565b7f74a53cd528a921fca7dbdee62f86819051d3cc98f214951f4238e8843f20b146338484846040516103309493929190610c08565b6002600054036103ae576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b6040805173ffffffffffffffffffffffffffffffffffffffff85811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd0000000000000000000000000000000000000000000000000000000017905261044a908590610450565b50505050565b600061047273ffffffffffffffffffffffffffffffffffffffff8416836104eb565b905080516000141580156104975750808060200190518101906104959190610ccb565b155b156101a5576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff841660048201526024015b60405180910390fd5b60606104f983836000610500565b9392505050565b60608147101561053e576040517fcd7860590000000000000000000000000000000000000000000000000000000081523060048201526024016104e2565b6000808573ffffffffffffffffffffffffffffffffffffffff1684866040516105679190610ce8565b60006040518083038185875af1925050503d80600081146105a4576040519150601f19603f3d011682016040523d82523d6000602084013e6105a9565b606091505b50915091506105b98683836105c3565b9695505050505050565b6060826105d8576105d382610652565b6104f9565b81511580156105fc575073ffffffffffffffffffffffffffffffffffffffff84163b155b1561064b576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff851660048201526024016104e2565b50806104f9565b8051156106625780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50565b803573ffffffffffffffffffffffffffffffffffffffff811681146106bb57600080fd5b919050565b6000806000606084860312156106d557600080fd5b833592506106e560208501610697565b91506106f360408501610697565b90509250925092565b6000806020838503121561070f57600080fd5b823567ffffffffffffffff81111561072657600080fd5b8301601f8101851361073757600080fd5b803567ffffffffffffffff81111561074e57600080fd5b85602082840101111561076057600080fd5b6020919091019590945092505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156107e6576107e6610770565b604052919050565b600082601f8301126107ff57600080fd5b813567ffffffffffffffff81111561081957610819610770565b61084a60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8401160161079f565b81815284602083860101111561085f57600080fd5b816020850160208301376000918101602001919091529392505050565b801515811461069457600080fd5b80356106bb8161087c565b6000806000606084860312156108aa57600080fd5b833567ffffffffffffffff8111156108c157600080fd5b6108cd868287016107ee565b9350506020840135915060408401356108e58161087c565b809150509250925092565b600067ffffffffffffffff82111561090a5761090a610770565b5060051b60200190565b600082601f83011261092557600080fd5b8135610938610933826108f0565b61079f565b8082825260208201915060208360051b86010192508583111561095a57600080fd5b602085015b8381101561097757803583526020928301920161095f565b5095945050505050565b60008060006060848603121561099657600080fd5b833567ffffffffffffffff8111156109ad57600080fd5b8401601f810186136109be57600080fd5b80356109cc610933826108f0565b8082825260208201915060208360051b8501019250888311156109ee57600080fd5b602084015b83811015610a3057803567ffffffffffffffff811115610a1257600080fd5b610a218b6020838901016107ee565b845250602092830192016109f3565b509550505050602084013567ffffffffffffffff811115610a5057600080fd5b610a5c86828701610914565b9250506106f36040850161088a565b73ffffffffffffffffffffffffffffffffffffffff8416815260406020820152816040820152818360608301376000818301606090810191909152601f9092017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016010192915050565b600082610b0b577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60005b83811015610b2b578181015183820152602001610b13565b50506000910152565b60008151808452610b4c816020860160208601610b10565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b73ffffffffffffffffffffffffffffffffffffffff8616815284602082015260a060408201526000610bb360a0830186610b34565b6060830194909452509015156080909101529392505050565b600081518084526020840193506020830160005b82811015610bfe578151865260209586019590910190600101610be0565b5093949350505050565b60006080820173ffffffffffffffffffffffffffffffffffffffff871683526080602084015280865180835260a08501915060a08160051b86010192506020880160005b82811015610c9b577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60878603018452610c86858351610b34565b94506020938401939190910190600101610c4c565b505050508281036040840152610cb18186610bcc565b915050610cc2606083018415159052565b95945050505050565b600060208284031215610cdd57600080fd5b81516104f98161087c565b60008251610cfa818460208701610b10565b919091019291505056fea2646970667358221220556072e1abafc3c4063b8cce832228b4f309b93726aaa6a6dfab20cb880c6d1864736f6c634300081a0033a26469706673582212208630e257501dbf0e417e076e931f5c705369be26151f5cfc9961cffc63c41d8164736f6c634300081a0033", } // ZetaConnectorNonNativeTestABI is the input ABI used to generate the binding from. diff --git a/v2/pkg/zrc20.t.sol/zrc20test.go b/v2/pkg/zrc20.t.sol/zrc20test.go index e8447bb4..1c4d0595 100644 --- a/v2/pkg/zrc20.t.sol/zrc20test.go +++ b/v2/pkg/zrc20.t.sol/zrc20test.go @@ -50,7 +50,7 @@ type StdInvariantFuzzSelector struct { // ZRC20TestMetaData contains all meta data concerning the ZRC20Test contract. var ZRC20TestMetaData = &bind.MetaData{ ABI: "[{\"type\":\"function\",\"name\":\"IS_TEST\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeArtifacts\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedArtifacts_\",\"type\":\"string[]\",\"internalType\":\"string[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeContracts\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedContracts_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeSelectors\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedSelectors_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzSelector[]\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"selectors\",\"type\":\"bytes4[]\",\"internalType\":\"bytes4[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeSenders\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedSenders_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"failed\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"setUp\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"targetArtifactSelectors\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedArtifactSelectors_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzArtifactSelector[]\",\"components\":[{\"name\":\"artifact\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"selectors\",\"type\":\"bytes4[]\",\"internalType\":\"bytes4[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetArtifacts\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedArtifacts_\",\"type\":\"string[]\",\"internalType\":\"string[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetContracts\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedContracts_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetInterfaces\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedInterfaces_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzInterface[]\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"artifacts\",\"type\":\"string[]\",\"internalType\":\"string[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetSelectors\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedSelectors_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzSelector[]\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"selectors\",\"type\":\"bytes4[]\",\"internalType\":\"bytes4[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetSenders\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedSenders_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"testApproveFailsIfRecipientIsZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testBurn\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testBurnFailsIfNoBalance\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDeposit\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositFailsIfRecipientIsZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositFailsIfSenderIsNotGateway\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testTransfer\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testTransferFailsIfNoBalance\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testTransferFailsIfRecipientIsZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testTransferFrom\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testTransferFromFailsIfNoAllowance\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testTransferFromFailsIfNoBalance\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testTransferFromFailsIfRecipientIsZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testTransferFromFailsIfSenderIsZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testUpdateGasLimit\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testUpdateGasLimitFailsIfSenderIsNotFungible\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testUpdateGatewayAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testUpdateGatewayAddressFailsIfSenderIsNotFungible\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testUpdateGatewayAddressFailsIfZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testUpdateProtocolFlatFee\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testUpdateProtocolFlatFeeFailsIfSenderIsNotFungible\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testUpdateSystemContractAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testUpdateSystemContractAddressFailsIfSenderIsNotFungible\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testUpdateSystemContractAddressFailsIfZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdraw\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawFailsIfNoAllowance\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawFailsIfNoBalance\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawGasFee\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawGasFeeFailsIfGasCoinNotSetForChainId\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawGasFeeFailsIfGasPriceNotSetForChainId\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testZRC20BasicInfo\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"event\",\"name\":\"log\",\"inputs\":[{\"name\":\"\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_address\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_array\",\"inputs\":[{\"name\":\"val\",\"type\":\"uint256[]\",\"indexed\":false,\"internalType\":\"uint256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_array\",\"inputs\":[{\"name\":\"val\",\"type\":\"int256[]\",\"indexed\":false,\"internalType\":\"int256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_array\",\"inputs\":[{\"name\":\"val\",\"type\":\"address[]\",\"indexed\":false,\"internalType\":\"address[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_bytes\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_bytes32\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_int\",\"inputs\":[{\"name\":\"\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_address\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_array\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"uint256[]\",\"indexed\":false,\"internalType\":\"uint256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_array\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"int256[]\",\"indexed\":false,\"internalType\":\"int256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_array\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"address[]\",\"indexed\":false,\"internalType\":\"address[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_bytes\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_bytes32\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_decimal_int\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"},{\"name\":\"decimals\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_decimal_uint\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"decimals\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_int\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_string\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_uint\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_string\",\"inputs\":[{\"name\":\"\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_uint\",\"inputs\":[{\"name\":\"\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"logs\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"CallerIsNotFungibleModule\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"GasFeeTransferFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidSender\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"LowAllowance\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"LowBalance\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZeroAddress\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZeroGasCoin\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZeroGasPrice\",\"inputs\":[]}]", - Bin: "0x6080604052600c8054600160ff199182168117909255601f80549091169091179055348015602c57600080fd5b5061df6a8061003c6000396000f3fe608060405234801561001057600080fd5b50600436106102f45760003560e01c80638ce7ef0511610191578063d27b0427116100e3578063dfbdf60011610097578063f1f87f4011610071578063f1f87f401461049d578063f2413096146104a5578063fa7626d4146104ad57600080fd5b8063dfbdf60014610485578063e13aba481461048d578063e20c9f711461049557600080fd5b8063d591221f116100c8578063d591221f1461046d578063d97136a214610475578063dcba486a1461047d57600080fd5b8063d27b04271461045d578063d509b16c1461046557600080fd5b8063b549984c11610145578063ba414fa61161011f578063ba414fa614610435578063d04cda981461044d578063d1fd32911461045557600080fd5b8063b549984c1461041d578063b5508aa914610425578063b79cad091461042d57600080fd5b8063a4aa6c7c11610176578063a4aa6c7c14610405578063ae9687dc1461040d578063b0464fdc1461041557600080fd5b80638ce7ef05146103e8578063916a17c6146103f057600080fd5b80634b6295091161024a57806366d9a9a0116101fe5780637f924c4e116101d85780637f924c4e146103c357806380326680146103cb57806385226c81146103d357600080fd5b806366d9a9a01461039e5780636ff45850146103b357806370557298146103bb57600080fd5b8063513999621161022f578063513999621461038657806358fdbbe01461038e5780635f01db7e1461039657600080fd5b80634b629509146103765780634cfc0aaa1461037e57600080fd5b806328438826116102ac5780633be9ec80116102865780633be9ec801461035e5780633e5e3c23146103665780633f7286f41461036e57600080fd5b806328438826146103395780632ade3880146103415780632f6254fc1461035657600080fd5b80630a9254e4116102dd5780630a9254e41461030b5780631142744e146103135780631ed7831c1461031b57600080fd5b80630393998b146102f95780630809dfef14610303575b600080fd5b6103016104ba565b005b6103016105bc565b61030161074a565b610301610e2c565b610323610f10565b6040516103309190619053565b60405180910390f35b610301610f72565b6103496111bd565b60405161033091906190ef565b6103016112ff565b610301611470565b61032361165d565b6103236116bd565b61030161171d565b6103016117f0565b6103016118c9565b610301611c46565b610301611d19565b6103a6611e86565b6040516103309190619255565b610301612008565b610301612218565b610301612468565b61030161268c565b6103db612760565b60405161033091906192f3565b610301612830565b6103f8612a30565b604051610330919061936a565b610301612b2b565b610301612ce0565b6103f8612f6d565b610301613068565b6103db61313a565b61030161320a565b61043d61359c565b6040519015158152602001610330565b610301613670565b6103016137b4565b6103016138f7565b610301613a3a565b6103016140ce565b6103016141b2565b610301614338565b6103016145bb565b6103016146fe565b6103236149a8565b610301614a08565b610301614b4e565b601f5461043d9060ff1681565b604051630618f58760e51b81527f2b2add3d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b15801561052657600080fd5b505af115801561053a573d6000803e3d6000fd5b5050601f546040517feddeb123000000000000000000000000000000000000000000000000000000008152600a60048201526101009091046001600160a01b0316925063eddeb12391506024015b600060405180830381600087803b1580156105a257600080fd5b505af11580156105b6573d6000803e3d6000fd5b50505050565b60225460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561061557600080fd5b505af1158015610629573d6000803e3d6000fd5b5050604051630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b15801561069957600080fd5b505af11580156106ad573d6000803e3d6000fd5b5050601f546040517f47e7ef2400000000000000000000000000000000000000000000000000000000815260006004820152620186a060248201526101009091046001600160a01b031692506347e7ef2491506044015b6020604051808303816000875af1158015610723573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107479190619401565b50565b602480547fffffffffffffffffffffffff000000000000000000000000000000000000000090811630179091556025805490911661123417905560405161079090618f73565b604051809103906000f0801580156107ac573d6000803e3d6000fd5b50602380547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03928316908117909155604080518082018252600f81527f476174657761795a45564d2e736f6c000000000000000000000000000000000060208201526024805492519081019390935292166044820152610890919060640160408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f485cc95500000000000000000000000000000000000000000000000000000000179052614daa565b602280546001600160a01b03929092167fffffffffffffffffffffffff00000000000000000000000000000000000000009283168117909155602180549092168117909155604080517f3ce4a5bc0000000000000000000000000000000000000000000000000000000081529051633ce4a5bc916004808201926020929091908290030181865afa158015610929573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061094d919061943f565b602680547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039290921691821790556040517f06447d560000000000000000000000000000000000000000000000000000000081526004810191909152737109709ecfa91a80626ff3989d68f67f5b1dd12d906306447d5690602401600060405180830381600087803b1580156109eb57600080fd5b505af11580156109ff573d6000803e3d6000fd5b505050506000806000604051610a1490618f80565b6001600160a01b03938416815291831660208301529091166040820152606001604051809103906000f080158015610a50573d6000803e3d6000fd5b50602080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03928316908117909155602154604051601293600193849360009391921690610aa690618f8d565b610ab59695949392919061945a565b604051809103906000f080158015610ad1573d6000803e3d6000fd5b50601f80547fffffffffffffffffffffff0000000000000000000000000000000000000000ff166101006001600160a01b03938416810291909117918290556020546040517fee2815ba00000000000000000000000000000000000000000000000000000000815260016004820152919092048316602482015291169063ee2815ba90604401600060405180830381600087803b158015610b7157600080fd5b505af1158015610b85573d6000803e3d6000fd5b50506020546040517fa7cb050700000000000000000000000000000000000000000000000000000000815260016004820181905260248201526001600160a01b03909116925063a7cb05079150604401600060405180830381600087803b158015610bef57600080fd5b505af1158015610c03573d6000803e3d6000fd5b50506026546040517fc88a5e6d0000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152633b9aca006024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c88a5e6d9150604401600060405180830381600087803b158015610c8357600080fd5b505af1158015610c97573d6000803e3d6000fd5b50506022546040517fc88a5e6d0000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152633b9aca006024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c88a5e6d9150604401600060405180830381600087803b158015610d1757600080fd5b505af1158015610d2b573d6000803e3d6000fd5b5050601f54602480546040517f47e7ef240000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620186a09281019290925261010090920490911692506347e7ef2491506044016020604051808303816000875af1158015610da9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dcd9190619401565b507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b03166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156105a257600080fd5b604051630618f58760e51b81527fddb5de5e000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b158015610e9857600080fd5b505af1158015610eac573d6000803e3d6000fd5b5050601f54602480546040517f47e7ef240000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620186a09281019290925261010090920490911692506347e7ef249150604401610704565b60606016805480602002602001604051908101604052809291908181526020018280548015610f6857602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610f4a575b5050505050905090565b601f546025546040516370a0823160e01b81526001600160a01b0391821660048201526000926101009004909116906370a0823190602401602060405180830381865afa158015610fc7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610feb919061954f565b9050610ff8600082614dc9565b601f54602480546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201526207a12092810183905291926101009004169063095ea7b3906044016020604051808303816000875af1158015611070573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110949190619401565b50604051630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b15801561110157600080fd5b505af1158015611115573d6000803e3d6000fd5b5050601f546025546040517f23b872dd000000000000000000000000000000000000000000000000000000008152600060048201526001600160a01b039182166024820152604481018690526101009092041692506323b872dd91506064015b6020604051808303816000875af1158015611194573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111b89190619401565b505050565b6060601e805480602002602001604051908101604052809291908181526020016000905b828210156112f657600084815260208082206040805180820182526002870290920180546001600160a01b03168352600181018054835181870281018701909452808452939591948681019491929084015b828210156112df57838290600052602060002001805461125290619568565b80601f016020809104026020016040519081016040528092919081815260200182805461127e90619568565b80156112cb5780601f106112a0576101008083540402835291602001916112cb565b820191906000526020600020905b8154815290600101906020018083116112ae57829003601f168201915b505050505081526020019060010190611233565b5050505081525050815260200190600101906111e1565b50505050905090565b60265460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561135857600080fd5b505af115801561136c573d6000803e3d6000fd5b5050601f546040517fc835d7cc00000000000000000000000000000000000000000000000000000000815261321160048201526101009091046001600160a01b0316925063c835d7cc9150602401600060405180830381600087803b1580156113d457600080fd5b505af11580156113e8573d6000803e3d6000fd5b5050505061146e601f60019054906101000a90046001600160a01b03166001600160a01b031663f2441b326040518163ffffffff1660e01b8152600401602060405180830381865afa158015611442573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611466919061943f565b613211614e51565b565b60265460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156114c957600080fd5b505af11580156114dd573d6000803e3d6000fd5b50506020546040517fa7cb050700000000000000000000000000000000000000000000000000000000815260016004820152600060248201526001600160a01b03909116925063a7cb05079150604401600060405180830381600087803b15801561154757600080fd5b505af115801561155b573d6000803e3d6000fd5b5050604051630618f58760e51b81527fe661aed0000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e091506024015b600060405180830381600087803b1580156115cc57600080fd5b505af11580156115e0573d6000803e3d6000fd5b50505050600080601f60019054906101000a90046001600160a01b03166001600160a01b031663d9eeebed6040518163ffffffff1660e01b81526004016040805180830381865afa158015611639573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105b691906195b5565b60606018805480602002602001604051908101604052809291908181526020018280548015610f68576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311610f4a575050505050905090565b60606017805480602002602001604051908101604052809291908181526020018280548015610f68576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311610f4a575050505050905090565b604051630618f58760e51b81527f2b2add3d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b15801561178957600080fd5b505af115801561179d573d6000803e3d6000fd5b5050601f546040517fccc7759900000000000000000000000000000000000000000000000000000000815261321160048201526101009091046001600160a01b0316925063ccc775999150602401610588565b604051630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b15801561185c57600080fd5b505af1158015611870573d6000803e3d6000fd5b5050601f546040517f095ea7b300000000000000000000000000000000000000000000000000000000815260006004820152600a60248201526101009091046001600160a01b0316925063095ea7b39150604401610704565b60265460405163ca669fa760e01b81526001600160a01b039091166004820152600a908190737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561192757600080fd5b505af115801561193b573d6000803e3d6000fd5b5050601f546040517ff687d12a000000000000000000000000000000000000000000000000000000008152600481018690526101009091046001600160a01b0316925063f687d12a9150602401600060405180830381600087803b1580156119a257600080fd5b505af11580156119b6573d6000803e3d6000fd5b505060265460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b158015611a1357600080fd5b505af1158015611a27573d6000803e3d6000fd5b5050601f546040517feddeb123000000000000000000000000000000000000000000000000000000008152600481018590526101009091046001600160a01b0316925063eddeb1239150602401600060405180830381600087803b158015611a8e57600080fd5b505af1158015611aa2573d6000803e3d6000fd5b5050601f546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526101009091046001600160a01b03166004820181905260006024830152925063095ea7b391506044016020604051808303816000875af1158015611b15573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b399190619401565b507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b031663f48448146040518163ffffffff1660e01b8152600401600060405180830381600087803b158015611b9857600080fd5b505af1158015611bac573d6000803e3d6000fd5b5050601f546025546040805160609290921b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000001660208301528051601481840301815260348301918290527fc7012626000000000000000000000000000000000000000000000000000000009091526001600160a01b0361010090930492909216935063c7012626925061117591906001906038016195e1565b604051630618f58760e51b81527f2b2add3d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b158015611cb257600080fd5b505af1158015611cc6573d6000803e3d6000fd5b5050601f546040517fc835d7cc00000000000000000000000000000000000000000000000000000000815261321160048201526101009091046001600160a01b0316925063c835d7cc9150602401610588565b60265460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015611d7257600080fd5b505af1158015611d86573d6000803e3d6000fd5b5050601f546040517ff687d12a000000000000000000000000000000000000000000000000000000008152600a60048201526101009091046001600160a01b0316925063f687d12a9150602401600060405180830381600087803b158015611ded57600080fd5b505af1158015611e01573d6000803e3d6000fd5b5050505061146e600a601f60019054906101000a90046001600160a01b03166001600160a01b031663091d27886040518163ffffffff1660e01b8152600401602060405180830381865afa158015611e5d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e81919061954f565b614dc9565b6060601b805480602002602001604051908101604052809291908181526020016000905b828210156112f65783829060005260206000209060020201604051806040016040529081600082018054611edd90619568565b80601f0160208091040260200160405190810160405280929190818152602001828054611f0990619568565b8015611f565780601f10611f2b57610100808354040283529160200191611f56565b820191906000526020600020905b815481529060010190602001808311611f3957829003601f168201915b5050505050815260200160018201805480602002602001604051908101604052809291908181526020018280548015611ff057602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019060040190602082600301049283019260010382029150808411611f9d5790505b50505050508152505081526020019060010190611eaa565b601f546025546040516370a0823160e01b81526001600160a01b0391821660048201526000926101009004909116906370a0823190602401602060405180830381865afa15801561205d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612081919061954f565b905061208e600082614dc9565b601f54602480546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201526207a12092810183905291926101009004169063095ea7b3906044016020604051808303816000875af1158015612106573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061212a9190619401565b50604051630618f58760e51b81527ffe382aa7000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b15801561219757600080fd5b505af11580156121ab573d6000803e3d6000fd5b5050601f54602480546025546040517f23b872dd0000000000000000000000000000000000000000000000000000000081526001600160a01b039283166004820152908216928101929092526044820186905261010090920490911692506323b872dd9150606401611175565b601f546025546040516370a0823160e01b81526001600160a01b0391821660048201526000926101009004909116906370a0823190602401602060405180830381865afa15801561226d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612291919061954f565b905061229e600082614dc9565b601f54602480546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015261c35092810183905291926101009004169063095ea7b3906044016020604051808303816000875af1158015612315573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123399190619401565b50601f54602480546025546040517f23b872dd0000000000000000000000000000000000000000000000000000000081526001600160a01b0392831660048201529082169281019290925260448201849052610100909204909116906323b872dd906064015b6020604051808303816000875af11580156123be573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123e29190619401565b50601f546025546040516370a0823160e01b81526001600160a01b0391821660048201526000926101009004909116906370a0823190602401602060405180830381865afa158015612438573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061245c919061954f565b90506111b88282614dc9565b6000601f60019054906101000a90046001600160a01b03166001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156124bd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124e1919061954f565b90506124f0620186a082614dc9565b60225460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561254957600080fd5b505af115801561255d573d6000803e3d6000fd5b5050601f54602480546040517f47e7ef240000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620186a09281019290925261010090920490911692506347e7ef2491506044016020604051808303816000875af11580156125db573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125ff9190619401565b506000601f60019054906101000a90046001600160a01b03166001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612655573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612679919061954f565b905061268862030d4082614dc9565b5050565b604051630618f58760e51b81527ffe382aa7000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b1580156126f857600080fd5b505af115801561270c573d6000803e3d6000fd5b5050601f546040517f42966c68000000000000000000000000000000000000000000000000000000008152620249f060048201526101009091046001600160a01b031692506342966c689150602401610704565b6060601a805480602002602001604051908101604052809291908181526020016000905b828210156112f65783829060005260206000200180546127a390619568565b80601f01602080910402602001604051908101604052809291908181526020018280546127cf90619568565b801561281c5780601f106127f15761010080835404028352916020019161281c565b820191906000526020600020905b8154815290600101906020018083116127ff57829003601f168201915b505050505081526020019060010190612784565b601f546025546040516370a0823160e01b81526001600160a01b0391821660048201526000926101009004909116906370a0823190602401602060405180830381865afa158015612885573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128a9919061954f565b90506128b6600082614dc9565b601f54602480546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201526207a12092810183905291926101009004169063095ea7b3906044016020604051808303816000875af115801561292e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129529190619401565b50604051630618f58760e51b81527ffe382aa7000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b1580156129bf57600080fd5b505af11580156129d3573d6000803e3d6000fd5b5050601f546025546040517fa9059cbb0000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201526024810186905261010090920416925063a9059cbb9150604401611175565b6060601d805480602002602001604051908101604052809291908181526020016000905b828210156112f65760008481526020908190206040805180820182526002860290920180546001600160a01b03168352600181018054835181870281018701909452808452939491938583019392830182828015612b1357602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019060040190602082600301049283019260010382029150808411612ac05790505b50505050508152505081526020019060010190612a54565b601f54602480546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201526207a12092810183905291926101009004169063095ea7b3906044016020604051808303816000875af1158015612ba3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612bc79190619401565b50604051630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b158015612c3457600080fd5b505af1158015612c48573d6000803e3d6000fd5b5050601f546040517fa9059cbb00000000000000000000000000000000000000000000000000000000815260006004820152602481018590526101009091046001600160a01b0316925063a9059cbb91506044015b6020604051808303816000875af1158015612cbc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126889190619401565b6000601f60019054906101000a90046001600160a01b03166001600160a01b03166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa158015612d35573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052612d5d91908101906196cb565b9050612d9e6040518060400160405280600581526020017f544f4b454e00000000000000000000000000000000000000000000000000000081525082614eb2565b6000601f60019054906101000a90046001600160a01b03166001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa158015612df3573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052612e1b91908101906196cb565b9050612e5c6040518060400160405280600381526020017f544b4e000000000000000000000000000000000000000000000000000000000081525082614eb2565b6000601f60019054906101000a90046001600160a01b03166001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015612eb1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ed59190619714565b9050612ee560128260ff16614dc9565b6000601f60019054906101000a90046001600160a01b03166001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612f3a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f5e919061954f565b90506105b6620186a082614dc9565b6060601c805480602002602001604051908101604052809291908181526020016000905b828210156112f65760008481526020908190206040805180820182526002860290920180546001600160a01b0316835260018101805483518187028101870190945280845293949193858301939283018282801561305057602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019060040190602082600301049283019260010382029150808411612ffd5790505b50505050508152505081526020019060010190612f91565b604051630618f58760e51b81527f2b2add3d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b1580156130d457600080fd5b505af11580156130e8573d6000803e3d6000fd5b5050601f546040517ff687d12a000000000000000000000000000000000000000000000000000000008152600a60048201526101009091046001600160a01b0316925063f687d12a9150602401610588565b60606019805480602002602001604051908101604052809291908181526020016000905b828210156112f657838290600052602060002001805461317d90619568565b80601f01602080910402602001604051908101604052809291908181526020018280546131a990619568565b80156131f65780601f106131cb576101008083540402835291602001916131f6565b820191906000526020600020905b8154815290600101906020018083116131d957829003601f168201915b50505050508152602001906001019061315e565b60265460405163ca669fa760e01b81526001600160a01b039091166004820152600a906305f5e10090737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561326c57600080fd5b505af1158015613280573d6000803e3d6000fd5b5050601f546040517ff687d12a000000000000000000000000000000000000000000000000000000008152600481018690526101009091046001600160a01b0316925063f687d12a9150602401600060405180830381600087803b1580156132e757600080fd5b505af11580156132fb573d6000803e3d6000fd5b505060265460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b15801561335857600080fd5b505af115801561336c573d6000803e3d6000fd5b5050601f546040517feddeb123000000000000000000000000000000000000000000000000000000008152600481018590526101009091046001600160a01b0316925063eddeb1239150602401600060405180830381600087803b1580156133d357600080fd5b505af11580156133e7573d6000803e3d6000fd5b5050601f546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526101009091046001600160a01b031660048201819052630bebc2006024830152925063095ea7b391506044016020604051808303816000875af115801561345d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134819190619401565b50604051630618f58760e51b81527ffe382aa7000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b1580156134ee57600080fd5b505af1158015613502573d6000803e3d6000fd5b5050601f546025546040805160609290921b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000001660208301528051601481840301815260348301918290527fc7012626000000000000000000000000000000000000000000000000000000009091526001600160a01b0361010090930492909216935063c7012626925061117591906064906038016195e1565b60085460009060ff16156135b4575060085460ff1690565b6040517f667f9d70000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d600482018190527f6661696c65640000000000000000000000000000000000000000000000000000602483015260009163667f9d7090604401602060405180830381865afa158015613645573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613669919061954f565b1415905090565b60265460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156136c957600080fd5b505af11580156136dd573d6000803e3d6000fd5b5050601f546040517feddeb123000000000000000000000000000000000000000000000000000000008152600a60048201526101009091046001600160a01b0316925063eddeb1239150602401600060405180830381600087803b15801561374457600080fd5b505af1158015613758573d6000803e3d6000fd5b5050505061146e600a601f60019054906101000a90046001600160a01b03166001600160a01b0316634d8943bb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611e5d573d6000803e3d6000fd5b60265460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561380d57600080fd5b505af1158015613821573d6000803e3d6000fd5b5050604051630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b15801561389157600080fd5b505af11580156138a5573d6000803e3d6000fd5b5050601f546040517fccc77599000000000000000000000000000000000000000000000000000000008152600060048201526101009091046001600160a01b0316925063ccc775999150602401610588565b60265460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561395057600080fd5b505af1158015613964573d6000803e3d6000fd5b5050604051630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b1580156139d457600080fd5b505af11580156139e8573d6000803e3d6000fd5b5050601f546040517fc835d7cc000000000000000000000000000000000000000000000000000000008152600060048201526101009091046001600160a01b0316925063c835d7cc9150602401610588565b60265460405163ca669fa760e01b81526001600160a01b039091166004820152600a908190737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015613a9857600080fd5b505af1158015613aac573d6000803e3d6000fd5b5050601f546040517ff687d12a000000000000000000000000000000000000000000000000000000008152600481018690526101009091046001600160a01b0316925063f687d12a9150602401600060405180830381600087803b158015613b1357600080fd5b505af1158015613b27573d6000803e3d6000fd5b505060265460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b158015613b8457600080fd5b505af1158015613b98573d6000803e3d6000fd5b5050601f546040517feddeb123000000000000000000000000000000000000000000000000000000008152600481018590526101009091046001600160a01b0316925063eddeb1239150602401600060405180830381600087803b158015613bff57600080fd5b505af1158015613c13573d6000803e3d6000fd5b5050601f54602480546040516370a0823160e01b81526001600160a01b039182166004820152600095506101009093041692506370a082319101602060405180830381865afa158015613c6a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613c8e919061954f565b9050613c9d620186a082614dc9565b6000601f60019054906101000a90046001600160a01b03166001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613cf2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613d16919061954f565b9050613d25620186a082614dc9565b601f546026546040516370a0823160e01b81526001600160a01b0391821660048201526000926101009004909116906370a0823190602401602060405180830381865afa158015613d7a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613d9e919061954f565b601f546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526101009091046001600160a01b03166004820181905261c350602483015291925063095ea7b3906044016020604051808303816000875af1158015613e10573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613e349190619401565b50601f546025546040805160609290921b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000001660208301528051601481840301815260348301918290527fc7012626000000000000000000000000000000000000000000000000000000009091526001600160a01b03610100909304929092169163c701262691613ecc919061c350906038016195e1565b6020604051808303816000875af1158015613eeb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613f0f9190619401565b50601f546026546040516370a0823160e01b81526001600160a01b0391821660048201526000926101009004909116906370a0823190602401602060405180830381865afa158015613f65573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613f89919061954f565b9050613fa985613f998885619766565b613fa39190619766565b82614dc9565b601f54602480546040516370a0823160e01b81526001600160a01b0391821660048201526000936101009004909116916370a082319101602060405180830381865afa158015613ffd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614021919061954f565b905061403d866140338961c350619779565b613fa39190619779565b6000601f60019054906101000a90046001600160a01b03166001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015614092573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906140b6919061954f565b90506140c461c35082614dc9565b5050505050505050565b601f546025546040516370a0823160e01b81526001600160a01b0391821660048201526000926101009004909116906370a0823190602401602060405180830381865afa158015614123573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614147919061954f565b9050614154600082614dc9565b601f546025546040517fa9059cbb0000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015261c350602482018190529261010090049091169063a9059cbb9060440161239f565b601f54602480546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201526207a12092810183905291926101009004169063095ea7b3906044016020604051808303816000875af115801561422a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061424e9190619401565b50604051630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b1580156142bb57600080fd5b505af11580156142cf573d6000803e3d6000fd5b5050601f54602480546040517f23b872dd0000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201526000928101929092526044820186905261010090920490911692506323b872dd9150606401612c9d565b60265460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561439157600080fd5b505af11580156143a5573d6000803e3d6000fd5b5050601f546040517ff687d12a000000000000000000000000000000000000000000000000000000008152600a6004820181905293508392506101009091046001600160a01b03169063f687d12a90602401600060405180830381600087803b15801561441157600080fd5b505af1158015614425573d6000803e3d6000fd5b505060265460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b15801561448257600080fd5b505af1158015614496573d6000803e3d6000fd5b5050601f546040517feddeb123000000000000000000000000000000000000000000000000000000008152600a60048201526101009091046001600160a01b0316925063eddeb1239150602401600060405180830381600087803b1580156144fd57600080fd5b505af1158015614511573d6000803e3d6000fd5b50505050600080601f60019054906101000a90046001600160a01b03166001600160a01b031663d9eeebed6040518163ffffffff1660e01b81526004016040805180830381865afa15801561456a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061458e91906195b5565b601f5491935091506145ae9061010090046001600160a01b031683614e51565b6105b6613fa38486619766565b60265460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561461457600080fd5b505af1158015614628573d6000803e3d6000fd5b5050601f546040517fccc7759900000000000000000000000000000000000000000000000000000000815261321160048201526101009091046001600160a01b0316925063ccc775999150602401600060405180830381600087803b15801561469057600080fd5b505af11580156146a4573d6000803e3d6000fd5b5050505061146e601f60019054906101000a90046001600160a01b03166001600160a01b0316638b851b956040518163ffffffff1660e01b8152600401602060405180830381865afa158015611442573d6000803e3d6000fd5b601f54602480546040516370a0823160e01b81526001600160a01b0391821660048201526000936101009004909116916370a082319101602060405180830381865afa158015614752573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614776919061954f565b9050614785620186a082614dc9565b6000601f60019054906101000a90046001600160a01b03166001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156147da573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906147fe919061954f565b905061480d620186a082614dc9565b601f546040517f42966c6800000000000000000000000000000000000000000000000000000000815261c35060048201526101009091046001600160a01b0316906342966c68906024016020604051808303816000875af1158015614876573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061489a9190619401565b50601f54602480546040516370a0823160e01b81526001600160a01b0391821660048201526000936101009004909116916370a082319101602060405180830381865afa1580156148ef573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614913919061954f565b905061492161c35082614dc9565b6000601f60019054906101000a90046001600160a01b03166001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015614976573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061499a919061954f565b90506105b661c35082614dc9565b60606015805480602002602001604051908101604052809291908181526020018280548015610f68576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311610f4a575050505050905090565b60265460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015614a6157600080fd5b505af1158015614a75573d6000803e3d6000fd5b50506020546040517fee2815ba00000000000000000000000000000000000000000000000000000000815260016004820152600060248201526001600160a01b03909116925063ee2815ba9150604401600060405180830381600087803b158015614adf57600080fd5b505af1158015614af3573d6000803e3d6000fd5b5050604051630618f58760e51b81527f78fff396000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e091506024016115b2565b601f546025546040516370a0823160e01b81526001600160a01b0391821660048201526000926101009004909116906370a0823190602401602060405180830381865afa158015614ba3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614bc7919061954f565b9050614bd4600082614dc9565b601f54602480546040517fdd62ed3e0000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201819052928101929092526000926101009004169063dd62ed3e90604401602060405180830381865afa158015614c4a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614c6e919061954f565b9050614c7b600082614dc9565b604051630618f58760e51b81527f10bad14700000000000000000000000000000000000000000000000000000000600482015261c35090737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b158015614ceb57600080fd5b505af1158015614cff573d6000803e3d6000fd5b5050601f54602480546025546040517f23b872dd0000000000000000000000000000000000000000000000000000000081526001600160a01b039283166004820152908216928101929092526044820186905261010090920490911692506323b872dd91506064016020604051808303816000875af1158015614d86573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105b69190619401565b6000614db4618f9a565b614dbf848483614f04565b9150505b92915050565b6040517f98296c540000000000000000000000000000000000000000000000000000000081526004810183905260248101829052737109709ecfa91a80626ff3989d68f67f5b1dd12d906398296c54906044015b60006040518083038186803b158015614e3557600080fd5b505afa158015614e49573d6000803e3d6000fd5b505050505050565b6040517f515361f60000000000000000000000000000000000000000000000000000000081526001600160a01b03808416600483015282166024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063515361f690604401614e1d565b6040517ff320d963000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063f320d96390614e1d908590859060040161978c565b600080614f118584614f7f565b9050614f746040518060400160405280601d81526020017f4552433139363750726f78792e736f6c3a4552433139363750726f78790000008152508286604051602001614f5f9291906197b1565b60405160208183030381529060405285614f8b565b9150505b9392505050565b6000614f788383614fb9565b60c08101515160009015614faf57614fa884848460c00151614fd4565b9050614f78565b614fa8848461517a565b6000614fc58383615265565b614f7883836020015184614f8b565b600080614fdf615271565b90506000614fed8683615344565b9050600061500482606001518360200151856157ea565b90506000615014838389896159fc565b9050600061502182616879565b602081015181519192509060030b156150945789826040015160405160200161504b9291906197d3565b60408051601f19818403018152908290527f08c379a000000000000000000000000000000000000000000000000000000000825261508b91600401619854565b60405180910390fd5b60006150d76040518060400160405280601581526020017f4465706c6f79656420746f20616464726573733a200000000000000000000000815250836001616a48565b6040517fc6ce059d000000000000000000000000000000000000000000000000000000008152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c6ce059d9061512a908490600401619854565b602060405180830381865afa158015615147573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061516b919061943f565b9b9a5050505050505050505050565b6040517f8d1cc9250000000000000000000000000000000000000000000000000000000081526000908190737109709ecfa91a80626ff3989d68f67f5b1dd12d90638d1cc925906151cf908790600401619854565b600060405180830381865afa1580156151ec573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526152149190810190619887565b90506000615242828560405160200161522e9291906198bc565b604051602081830303815290604052616c48565b90506001600160a01b038116614dbf57848460405160200161504b9291906198eb565b61268882826000616c5b565b604080518082018252600381527f6f75740000000000000000000000000000000000000000000000000000000000602082015290517fd145736c000000000000000000000000000000000000000000000000000000008152606091737109709ecfa91a80626ff3989d68f67f5b1dd12d91829063d145736c906152f8908490600401619996565b600060405180830381865afa158015615315573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261533d91908101906196cb565b9250505090565b6153766040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b6000737109709ecfa91a80626ff3989d68f67f5b1dd12d90506153c16040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b6153ca85616d5e565b602082015260006153da86617143565b90506000836001600160a01b031663d930a0e66040518163ffffffff1660e01b8152600401600060405180830381865afa15801561541c573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261544491908101906196cb565b8683856020015160405160200161545e94939291906199dd565b60408051601f19818403018152908290527f60f9bb1100000000000000000000000000000000000000000000000000000000825291506000906001600160a01b038616906360f9bb11906154b6908590600401619854565b600060405180830381865afa1580156154d3573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526154fb91908101906196cb565b6040517fdb4235f60000000000000000000000000000000000000000000000000000000081529091506001600160a01b0386169063db4235f690615543908490600401619ae1565b602060405180830381865afa158015615560573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906155849190619401565b615599578160405160200161504b9190619b33565b6040517f49c4fac80000000000000000000000000000000000000000000000000000000081526001600160a01b038616906349c4fac8906155de908490600401619bc5565b600060405180830381865afa1580156155fb573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261562391908101906196cb565b84526040517fdb4235f60000000000000000000000000000000000000000000000000000000081526001600160a01b0386169063db4235f69061566a908490600401619c17565b602060405180830381865afa158015615687573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906156ab9190619401565b15615740576040517f49c4fac80000000000000000000000000000000000000000000000000000000081526001600160a01b038616906349c4fac8906156f5908490600401619c17565b600060405180830381865afa158015615712573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261573a91908101906196cb565b60408501525b846001600160a01b03166349c4fac88286600001516040516020016157659190619c69565b6040516020818303038152906040526040518363ffffffff1660e01b815260040161579192919061978c565b600060405180830381865afa1580156157ae573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526157d691908101906196cb565b606085015250608083015250949350505050565b60408051600480825260a0820190925260609160009190816020015b60608152602001906001900390816158065790505090506040518060400160405280600481526020017f67726570000000000000000000000000000000000000000000000000000000008152508160008151811061586657615866619cd5565b60200260200101819052506040518060400160405280600381526020017f2d726c0000000000000000000000000000000000000000000000000000000000815250816001815181106158ba576158ba619cd5565b6020026020010181905250846040516020016158d69190619d04565b604051602081830303815290604052816002815181106158f8576158f8619cd5565b6020026020010181905250826040516020016159149190619d70565b6040516020818303038152906040528160038151811061593657615936619cd5565b6020026020010181905250600061594c82616879565b602080820151604080518082018252600581527f2e6a736f6e00000000000000000000000000000000000000000000000000000081850190815282518084018452600080825290860152825180840190935290518252928101929092529192506159dd90604080518082018252600080825260209182015281518083019092528451825280850190820152906173c6565b6159f2578560405160200161504b9190619db1565b9695505050505050565b60a0810151604080518082018252600080825260209182015281518083019092528251808352928101910152606090737109709ecfa91a80626ff3989d68f67f5b1dd12d9015615a4c565b511590565b615bc057826020015115615b08576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605860248201527f54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f742060448201527f62652075736564207768656e207468652060736b6970566572696679536f757260648201527f6365436f646560206f7074696f6e206973206074727565600000000000000000608482015260a40161508b565b8260c0015115615bc0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605360248201527f54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f742060448201527f62652075736564207768656e207468652060736b69704c6963656e736554797060648201527f6560206f7074696f6e2069732060747275656000000000000000000000000000608482015260a40161508b565b6040805160ff8082526120008201909252600091816020015b6060815260200190600190039081615bd957905050905060006040518060400160405280600381526020017f6e70780000000000000000000000000000000000000000000000000000000000815250828280615c3490619e42565b935060ff1681518110615c4957615c49619cd5565b60200260200101819052506040518060400160405280600d81526020017f302e302e312d616c7068612e3700000000000000000000000000000000000000815250604051602001615c9a9190619e61565b604051602081830303815290604052828280615cb590619e42565b935060ff1681518110615cca57615cca619cd5565b60200260200101819052506040518060400160405280600681526020017f6465706c6f790000000000000000000000000000000000000000000000000000815250828280615d1790619e42565b935060ff1681518110615d2c57615d2c619cd5565b60200260200101819052506040518060400160405280600e81526020017f2d2d636f6e74726163744e616d65000000000000000000000000000000000000815250828280615d7990619e42565b935060ff1681518110615d8e57615d8e619cd5565b60200260200101819052508760200151828280615daa90619e42565b935060ff1681518110615dbf57615dbf619cd5565b60200260200101819052506040518060400160405280600e81526020017f2d2d636f6e747261637450617468000000000000000000000000000000000000815250828280615e0c90619e42565b935060ff1681518110615e2157615e21619cd5565b602090810291909101015287518282615e3981619e42565b935060ff1681518110615e4e57615e4e619cd5565b60200260200101819052506040518060400160405280600981526020017f2d2d636861696e49640000000000000000000000000000000000000000000000815250828280615e9b90619e42565b935060ff1681518110615eb057615eb0619cd5565b6020026020010181905250615ec446617427565b8282615ecf81619e42565b935060ff1681518110615ee457615ee4619cd5565b60200260200101819052506040518060400160405280600f81526020017f2d2d6275696c64496e666f46696c650000000000000000000000000000000000815250828280615f3190619e42565b935060ff1681518110615f4657615f46619cd5565b602002602001018190525086828280615f5e90619e42565b935060ff1681518110615f7357615f73619cd5565b602090810291909101015285511561609a5760408051808201909152601581527f2d2d636f6e7374727563746f7242797465636f6465000000000000000000000060208201528282615fc481619e42565b935060ff1681518110615fd957615fd9619cd5565b60209081029190910101526040517f71aad10d0000000000000000000000000000000000000000000000000000000081526001600160a01b038416906371aad10d90616029908990600401619854565b600060405180830381865afa158015616046573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261606e91908101906196cb565b828261607981619e42565b935060ff168151811061608e5761608e619cd5565b60200260200101819052505b84602001511561616a5760408051808201909152601281527f2d2d766572696679536f75726365436f64650000000000000000000000000000602082015282826160e381619e42565b935060ff16815181106160f8576160f8619cd5565b60200260200101819052506040518060400160405280600581526020017f66616c736500000000000000000000000000000000000000000000000000000081525082828061614590619e42565b935060ff168151811061615a5761615a619cd5565b6020026020010181905250616331565b6161a2615a478660a0015160408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6162355760408051808201909152600d81527f2d2d6c6963656e73655479706500000000000000000000000000000000000000602082015282826161e581619e42565b935060ff16815181106161fa576161fa619cd5565b60200260200101819052508460a0015160405160200161621a9190619d04565b60405160208183030381529060405282828061614590619e42565b8460c0015115801561627857506040808901518151808301835260008082526020918201528251808401909352815183529081019082015261627690511590565b155b156163315760408051808201909152600d81527f2d2d6c6963656e73655479706500000000000000000000000000000000000000602082015282826162bc81619e42565b935060ff16815181106162d1576162d1619cd5565b60200260200101819052506162e5886174c7565b6040516020016162f59190619d04565b60405160208183030381529060405282828061631090619e42565b935060ff168151811061632557616325619cd5565b60200260200101819052505b6040808601518151808301835260008082526020918201528251808401909352815183529081019082015261636590511590565b6163fa5760408051808201909152600b81527f2d2d72656c617965724964000000000000000000000000000000000000000000602082015282826163a881619e42565b935060ff16815181106163bd576163bd619cd5565b602002602001018190525084604001518282806163d990619e42565b935060ff16815181106163ee576163ee619cd5565b60200260200101819052505b60608501511561651b5760408051808201909152600681527f2d2d73616c7400000000000000000000000000000000000000000000000000006020820152828261644381619e42565b935060ff168151811061645857616458619cd5565b602090810291909101015260608501516040517fb11a19e800000000000000000000000000000000000000000000000000000000815260048101919091526001600160a01b0384169063b11a19e890602401600060405180830381865afa1580156164c7573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526164ef91908101906196cb565b82826164fa81619e42565b935060ff168151811061650f5761650f619cd5565b60200260200101819052505b60e085015151156165c25760408051808201909152600a81527f2d2d6761734c696d6974000000000000000000000000000000000000000000006020820152828261656581619e42565b935060ff168151811061657a5761657a619cd5565b60200260200101819052506165968560e0015160000151617427565b82826165a181619e42565b935060ff16815181106165b6576165b6619cd5565b60200260200101819052505b60e0850151602001511561666c5760408051808201909152600a81527f2d2d6761735072696365000000000000000000000000000000000000000000006020820152828261660f81619e42565b935060ff168151811061662457616624619cd5565b60200260200101819052506166408560e0015160200151617427565b828261664b81619e42565b935060ff168151811061666057616660619cd5565b60200260200101819052505b60e085015160400151156167165760408051808201909152600e81527f2d2d6d6178466565506572476173000000000000000000000000000000000000602082015282826166b981619e42565b935060ff16815181106166ce576166ce619cd5565b60200260200101819052506166ea8560e0015160400151617427565b82826166f581619e42565b935060ff168151811061670a5761670a619cd5565b60200260200101819052505b60e085015160600151156167c05760408051808201909152601681527f2d2d6d61785072696f72697479466565506572476173000000000000000000006020820152828261676381619e42565b935060ff168151811061677857616778619cd5565b60200260200101819052506167948560e0015160600151617427565b828261679f81619e42565b935060ff16815181106167b4576167b4619cd5565b60200260200101819052505b60008160ff1667ffffffffffffffff8111156167de576167de619603565b60405190808252806020026020018201604052801561681157816020015b60608152602001906001900390816167fc5790505b50905060005b8260ff168160ff16101561686a57838160ff168151811061683a5761683a619cd5565b6020026020010151828260ff168151811061685757616857619cd5565b6020908102919091010152600101616817565b5093505050505b949350505050565b6168a06040518060600160405280600060030b815260200160608152602001606081525090565b60408051808201825260048082527f6261736800000000000000000000000000000000000000000000000000000000602083015291517fd145736c000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d92600091849163d145736c9161692691869101619ecc565b600060405180830381865afa158015616943573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261696b91908101906196cb565b905060006169798683617fb6565b90506000846001600160a01b031663f45c1ce7836040518263ffffffff1660e01b81526004016169a991906192f3565b6000604051808303816000875af11580156169c8573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526169f09190810190619f13565b805190915060030b15801590616a095750602081015151155b8015616a185750604081015151155b156159f25781600081518110616a3057616a30619cd5565b602002602001015160405160200161504b9190619fc9565b60606000616a7d8560408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600080825260209182015281518083019092528651825280870190820152909150616ab49082905b9061810b565b15616c11576000616b3182616b2b84616b25616af78a60408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6040805180820182526000808252602091820152815180830190925282518252918201519181019190915290565b90618132565b90618194565b604080518082018252600181527f0a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152909150616b9590829061810b565b15616bff57604080518082018252600181527f0a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616bfc905b8290618219565b90505b616c088161823f565b92505050614f78565b8215616c2a57848460405160200161504b92919061a1b5565b5050604080516020810190915260008152614f78565b509392505050565b6000808251602084016000f09392505050565b8160a0015115616c6a57505050565b6000616c778484846182a8565b90506000616c8482616879565b602081015181519192509060030b158015616d205750604080518082018252600781527f535543434553530000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616d2090604080518082018252600080825260209182015281518083019092528451825280850190820152616aae565b15616d2d57505050505050565b60408201515115616d4d57816040015160405160200161504b919061a25c565b8060405160200161504b919061a2ba565b60606000616d938360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600481527f2e736f6c0000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152909150616df8905b82906173c6565b15616e6757604080518082018252600481527f2e736f6c0000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152614f7890616e62908390618843565b61823f565b604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616ec9905b82906188cd565b600103616f9657604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616f2f90616bf5565b50604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152614f7890616e62905b8390618219565b604080518082018252600581527f2e6a736f6e00000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616ff590616df1565b1561712c57604080518082018252600181527f2f0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082018190528451808601909552925184528301529061705d908390618967565b9050600081600183516170709190619779565b8151811061708057617080619cd5565b60200260200101519050617123616e626170f66040518060400160405280600581526020017f2e6a736f6e00000000000000000000000000000000000000000000000000000081525060408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b60408051808201825260008082526020918201528151808301909252855182528086019082015290618843565b95945050505050565b8260405160200161504b919061a325565b50919050565b606060006171788360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600481527f2e736f6c00000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201529091506171da90616df1565b156171e857614f788161823f565b604080518082018252600181527f3a000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261724790616ec2565b6001036172b157604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152614f7890616e6290616f8f565b604080518082018252600581527f2e6a736f6e0000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261731090616df1565b1561712c57604080518082018252600181527f2f00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820181905284518086019095529251845283015290617378908390618967565b90506001815111156173b45780600282516173939190619779565b815181106173a3576173a3619cd5565b602002602001015192505050919050565b508260405160200161504b919061a325565b8051825160009111156173db57506000614dc3565b815183516020850151600092916173f191619766565b6173fb9190619779565b905082602001518103617412576001915050614dc3565b82516020840151819020912014905092915050565b6060600061743483618a0c565b600101905060008167ffffffffffffffff81111561745457617454619603565b6040519080825280601f01601f19166020018201604052801561747e576020820181803683370190505b5090508181016020015b600019017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a850494508461748857509392505050565b604081810151815180830183526000808252602091820181905283518085018552835181529282018383015283518085018552600a81527f554e4c4943454e5345440000000000000000000000000000000000000000000081840190815285518087018752838152840192909252845180860190955251845290830152606091617553905b8290618aee565b1561759357505060408051808201909152600481527f4e6f6e65000000000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600981527f556e6c6963656e73650000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526175f29061754c565b1561763257505060408051808201909152600981527f556e6c6963656e736500000000000000000000000000000000000000000000006020820152919050565b604080518082018252600381527f4d49540000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526176919061754c565b156176d157505060408051808201909152600381527f4d495400000000000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f47504c2d322e302d6f6e6c790000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526177309061754c565b806177955750604080518082018252601081527f47504c2d322e302d6f722d6c6174657200000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526177959061754c565b156177d557505060408051808201909152600981527f474e552047504c763200000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f47504c2d332e302d6f6e6c790000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526178349061754c565b806178995750604080518082018252601081527f47504c2d332e302d6f722d6c6174657200000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526178999061754c565b156178d957505060408051808201909152600981527f474e552047504c763300000000000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4c47504c2d322e312d6f6e6c7900000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526179389061754c565b8061799d5750604080518082018252601181527f4c47504c2d322e312d6f722d6c617465720000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261799d9061754c565b156179dd57505060408051808201909152600c81527f474e55204c47504c76322e3100000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4c47504c2d332e302d6f6e6c790000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617a3c9061754c565b80617aa15750604080518082018252601181527f4c47504c2d332e302d6f722d6c6174657200000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617aa19061754c565b15617ae157505060408051808201909152600a81527f474e55204c47504c7633000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f4253442d322d436c61757365000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617b409061754c565b15617b8057505060408051808201909152600c81527f4253442d322d436c6175736500000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f4253442d332d436c61757365000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617bdf9061754c565b15617c1f57505060408051808201909152600c81527f4253442d332d436c6175736500000000000000000000000000000000000000006020820152919050565b604080518082018252600781527f4d504c2d322e300000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617c7e9061754c565b15617cbe57505060408051808201909152600781527f4d504c2d322e30000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600781527f4f534c2d332e300000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617d1d9061754c565b15617d5d57505060408051808201909152600781527f4f534c2d332e30000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600a81527f4170616368652d322e300000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617dbc9061754c565b15617dfc57505060408051808201909152600a81527f4170616368652d322e30000000000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4147504c2d332e302d6f6e6c790000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617e5b9061754c565b80617ec05750604080518082018252601181527f4147504c2d332e302d6f722d6c6174657200000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617ec09061754c565b15617f0057505060408051808201909152600a81527f474e55204147504c7633000000000000000000000000000000000000000000006020820152919050565b604080518082018252600881527f4255534c2d312e3100000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617f5f9061754c565b15617f9f57505060408051808201909152600781527f42534c20312e31000000000000000000000000000000000000000000000000006020820152919050565b6040808401518451915161504b929060200161a403565b60608060005b84518110156180415781858281518110617fd857617fd8619cd5565b6020026020010151604051602001617ff19291906198bc565b6040516020818303038152906040529150600185516180109190619779565b81146180395781604051602001618027919061a56c565b60405160208183030381529060405291505b600101617fbc565b5060408051600380825260808201909252600091816020015b606081526020019060019003908161805a579050509050838160008151811061808557618085619cd5565b60200260200101819052506040518060400160405280600281526020017f2d63000000000000000000000000000000000000000000000000000000000000815250816001815181106180d9576180d9619cd5565b602002602001018190525081816002815181106180f8576180f8619cd5565b6020908102919091010152949350505050565b60208083015183518351928401516000936181299291849190618b02565b14159392505050565b604080518082019091526000808252602082015260006181648460000151856020015185600001518660200151618c13565b90508360200151816181769190619779565b84518590618185908390619779565b90525060208401525090919050565b60408051808201909152600080825260208201528151835110156181b9575081614dc3565b60208083015190840151600191146181e05750815160208481015190840151829020919020145b8015618211578251845185906181f7908390619779565b905250825160208501805161820d908390619766565b9052505b509192915050565b6040805180820190915260008082526020820152618238838383618d33565b5092915050565b60606000826000015167ffffffffffffffff81111561826057618260619603565b6040519080825280601f01601f19166020018201604052801561828a576020820181803683370190505b50905060006020820190506182388185602001518660000151618dde565b606060006182b4615271565b6040805160ff808252612000820190925291925060009190816020015b60608152602001906001900390816182d157905050905060006040518060400160405280600381526020017f6e7078000000000000000000000000000000000000000000000000000000000081525082828061832c90619e42565b935060ff168151811061834157618341619cd5565b60200260200101819052506040518060400160405280600781526020017f5e312e33322e3300000000000000000000000000000000000000000000000000815250604051602001618392919061a5ad565b6040516020818303038152906040528282806183ad90619e42565b935060ff16815181106183c2576183c2619cd5565b60200260200101819052506040518060400160405280600881526020017f76616c696461746500000000000000000000000000000000000000000000000081525082828061840f90619e42565b935060ff168151811061842457618424619cd5565b6020026020010181905250826040516020016184409190619d70565b60405160208183030381529060405282828061845b90619e42565b935060ff168151811061847057618470619cd5565b60200260200101819052506040518060400160405280600a81526020017f2d2d636f6e7472616374000000000000000000000000000000000000000000008152508282806184bd90619e42565b935060ff16815181106184d2576184d2619cd5565b60200260200101819052506184e78784618e58565b82826184f281619e42565b935060ff168151811061850757618507619cd5565b6020908102919091010152855151156185b35760408051808201909152600b81527f2d2d7265666572656e63650000000000000000000000000000000000000000006020820152828261855981619e42565b935060ff168151811061856e5761856e619cd5565b6020026020010181905250618587866000015184618e58565b828261859281619e42565b935060ff16815181106185a7576185a7619cd5565b60200260200101819052505b8560800151156186215760408051808201909152601881527f2d2d756e73616665536b697053746f72616765436865636b0000000000000000602082015282826185fc81619e42565b935060ff168151811061861157618611619cd5565b6020026020010181905250618687565b84156186875760408051808201909152601281527f2d2d726571756972655265666572656e636500000000000000000000000000006020820152828261866681619e42565b935060ff168151811061867b5761867b619cd5565b60200260200101819052505b604086015151156187235760408051808201909152600d81527f2d2d756e73616665416c6c6f7700000000000000000000000000000000000000602082015282826186d181619e42565b935060ff16815181106186e6576186e6619cd5565b6020026020010181905250856040015182828061870290619e42565b935060ff168151811061871757618717619cd5565b60200260200101819052505b85606001511561878d5760408051808201909152601481527f2d2d756e73616665416c6c6f7752656e616d65730000000000000000000000006020820152828261876c81619e42565b935060ff168151811061878157618781619cd5565b60200260200101819052505b60008160ff1667ffffffffffffffff8111156187ab576187ab619603565b6040519080825280602002602001820160405280156187de57816020015b60608152602001906001900390816187c95790505b50905060005b8260ff168160ff16101561883757838160ff168151811061880757618807619cd5565b6020026020010151828260ff168151811061882457618824619cd5565b60209081029190910101526001016187e4565b50979650505050505050565b6040805180820190915260008082526020820152815183511015618868575081614dc3565b8151835160208501516000929161887e91619766565b6188889190619779565b602084015190915060019082146188a9575082516020840151819020908220145b80156188c4578351855186906188c0908390619779565b9052505b50929392505050565b60008082600001516188f18560000151866020015186600001518760200151618c13565b6188fb9190619766565b90505b8351602085015161890f9190619766565b8111618238578161891f8161a5f2565b925050826000015161895685602001518361893a9190619779565b86516189469190619779565b8386600001518760200151618c13565b6189609190619766565b90506188fe565b6060600061897584846188cd565b618980906001619766565b67ffffffffffffffff81111561899857618998619603565b6040519080825280602002602001820160405280156189cb57816020015b60608152602001906001900390816189b65790505b50905060005b8151811015616c40576189e7616e628686618219565b8282815181106189f9576189f9619cd5565b60209081029190910101526001016189d1565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310618a55577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310618a81576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc100008310618a9f57662386f26fc10000830492506010015b6305f5e1008310618ab7576305f5e100830492506008015b6127108310618acb57612710830492506004015b60648310618add576064830492506002015b600a8310614dc35760010192915050565b6000618afa8383618e98565b159392505050565b600080858411618c095760208411618bb55760008415618b4d576001618b29866020619779565b618b3490600861a60c565b618b3f90600261a70a565b618b499190619779565b1990505b8351811685618b5c8989619766565b618b669190619779565b805190935082165b818114618ba057878411618b885787945050505050616871565b83618b928161a716565b945050828451169050618b6e565b618baa8785619766565b945050505050616871565b838320618bc28588619779565b618bcc9087619766565b91505b858210618c0757848220808203618bf457618bea8684619766565b9350505050616871565b618bff600184619779565b925050618bcf565b505b5092949350505050565b60008381868511618d1e5760208511618ccd5760008515618c5f576001618c3b876020619779565b618c4690600861a60c565b618c5190600261a70a565b618c5b9190619779565b1990505b84518116600087618c708b8b619766565b618c7a9190619779565b855190915083165b828114618cbf57818610618ca757618c9a8b8b619766565b9650505050505050616871565b85618cb18161a5f2565b965050838651169050618c82565b859650505050505050616871565b508383206000905b618cdf8689619779565b8211618d1c57858320808203618cfb5783945050505050616871565b618d06600185619766565b9350508180618d149061a5f2565b925050618cd5565b505b618d288787619766565b979650505050505050565b60408051808201909152600080825260208201526000618d658560000151866020015186600001518760200151618c13565b602080870180519186019190915251909150618d819082619779565b835284516020860151618d949190619766565b8103618da35760008552618dd5565b83518351618db19190619766565b85518690618dc0908390619779565b9052508351618dcf9082619766565b60208601525b50909392505050565b60208110618e165781518352618df5602084619766565b9250618e02602083619766565b9150618e0f602082619779565b9050618dde565b6000198115618e45576001618e2c836020619779565b618e389061010061a70a565b618e429190619779565b90505b9151835183169219169190911790915250565b60606000618e668484615344565b8051602080830151604051939450618e809390910161a72d565b60405160208183030381529060405291505092915050565b8151815160009190811115618eab575081515b6020808501519084015160005b83811015618f645782518251808214618f34576000196020871015618f1357600184618ee5896020619779565b618eef9190619766565b618efa90600861a60c565b618f0590600261a70a565b618f0f9190619779565b1990505b8181168382168181039114618f31579750614dc39650505050505050565b50505b618f3f602086619766565b9450618f4c602085619766565b93505050602081618f5d9190619766565b9050618eb8565b50845186516159f2919061a785565b610b678061a7a683390190565b61106f8061b30d83390190565b611bb98061c37c83390190565b6040518060e00160405280606081526020016060815260200160608152602001600015158152602001600015158152602001600015158152602001618fdd618fe2565b905290565b60405180610100016040528060001515815260200160001515815260200160608152602001600080191681526020016060815260200160608152602001600015158152602001618fdd6040518060800160405280600081526020016000815260200160008152602001600081525090565b602080825282518282018190526000918401906040840190835b818110156190945783516001600160a01b031683526020938401939092019160010161906d565b509095945050505050565b60005b838110156190ba5781810151838201526020016190a2565b50506000910152565b600081518084526190db81602086016020860161909f565b601f01601f19169290920160200192915050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b828110156191eb577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452815180516001600160a01b03168652602090810151604082880181905281519088018190529101906060600582901b88018101919088019060005b818110156191d1577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa08a85030183526191bb8486516190c3565b6020958601959094509290920191600101619181565b509197505050602094850194929092019150600101619117565b50929695505050505050565b600081518084526020840193506020830160005b8281101561924b5781517fffffffff000000000000000000000000000000000000000000000000000000001686526020958601959091019060010161920b565b5093949350505050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b828110156191eb577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc087860301845281518051604087526192c160408801826190c3565b90506020820151915086810360208801526192dc81836191f7565b96505050602093840193919091019060010161927d565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b828110156191eb577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08786030184526193558583516190c3565b9450602093840193919091019060010161931b565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b828110156191eb577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc087860301845281516001600160a01b03815116865260208101519050604060208701526193eb60408701826191f7565b9550506020938401939190910190600101619392565b60006020828403121561941357600080fd5b81518015158114614f7857600080fd5b80516001600160a01b038116811461943a57600080fd5b919050565b60006020828403121561945157600080fd5b614f7882619423565b610100815260056101008201527f544f4b454e000000000000000000000000000000000000000000000000000000610120820152610140602082015260036101408201527f544b4e000000000000000000000000000000000000000000000000000000000061016082015260006101808201905060ff8816604083015286606083015260038610619514577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b8560808301528460a083015261953560c08301856001600160a01b03169052565b6001600160a01b03831660e0830152979650505050505050565b60006020828403121561956157600080fd5b5051919050565b600181811c9082168061957c57607f821691505b60208210810361713d577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600080604083850312156195c857600080fd5b6195d183619423565b6020939093015192949293505050565b6040815260006195f460408301856190c3565b90508260208301529392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040516060810167ffffffffffffffff8111828210171561965557619655619603565b60405290565b60008067ffffffffffffffff84111561967657619676619603565b50604051601f19601f85018116603f0116810181811067ffffffffffffffff821117156196a5576196a5619603565b6040528381529050808284018510156196bd57600080fd5b616c4084602083018561909f565b6000602082840312156196dd57600080fd5b815167ffffffffffffffff8111156196f457600080fd5b8201601f8101841361970557600080fd5b614dbf8482516020840161965b565b60006020828403121561972657600080fd5b815160ff81168114614f7857600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b80820180821115614dc357614dc3619737565b81810381811115614dc357614dc3619737565b60408152600061979f60408301856190c3565b8281036020840152614f7481856190c3565b6001600160a01b038316815260406020820152600061687160408301846190c3565b7f4661696c656420746f206465706c6f7920636f6e74726163742000000000000081526000835161980b81601a85016020880161909f565b7f3a20000000000000000000000000000000000000000000000000000000000000601a91840191820152835161984881601c84016020880161909f565b01601c01949350505050565b602081526000614f7860208301846190c3565b600082601f83011261987857600080fd5b614f788383516020850161965b565b60006020828403121561989957600080fd5b815167ffffffffffffffff8111156198b057600080fd5b614dbf84828501619867565b600083516198ce81846020880161909f565b8351908301906198e281836020880161909f565b01949350505050565b7f4661696c656420746f206465706c6f7920636f6e74726163742000000000000081526000835161992381601a85016020880161909f565b7f207573696e6720636f6e7374727563746f722064617461202200000000000000601a91840191820152835161996081603384016020880161909f565b7f220000000000000000000000000000000000000000000000000000000000000060339290910191820152603401949350505050565b60408152600b60408201527f464f554e4452595f4f55540000000000000000000000000000000000000000006060820152608060208201526000614f7860808301846190c3565b600085516199ef818460208a0161909f565b7f2f000000000000000000000000000000000000000000000000000000000000009083019081528551619a29816001840160208a0161909f565b7f2f00000000000000000000000000000000000000000000000000000000000000600192909101918201528451619a6781600284016020890161909f565b6001818301019150507f2f0000000000000000000000000000000000000000000000000000000000000060018201528351619aa981600284016020880161909f565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600292909101918201526007019695505050505050565b604081526000619af460408301846190c3565b8281036020840152600481527f2e6173740000000000000000000000000000000000000000000000000000000060208201526040810191505092915050565b7f436f756c64206e6f742066696e642041535420696e2061727469666163742000815260008251619b6b81601f85016020870161909f565b7f2e205365742060617374203d20747275656020696e20666f756e6472792e746f601f9390910192830152507f6d6c000000000000000000000000000000000000000000000000000000000000603f820152604101919050565b604081526000619bd860408301846190c3565b8281036020840152601181527f2e6173742e6162736f6c7574655061746800000000000000000000000000000060208201526040810191505092915050565b604081526000619c2a60408301846190c3565b8281036020840152600c81527f2e6173742e6c6963656e7365000000000000000000000000000000000000000060208201526040810191505092915050565b7f2e6d657461646174612e736f75726365732e5b27000000000000000000000000815260008251619ca181601485016020870161909f565b7f275d2e6b656363616b32353600000000000000000000000000000000000000006014939091019283015250602001919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f2200000000000000000000000000000000000000000000000000000000000000815260008251619d3c81600185016020870161909f565b7f22000000000000000000000000000000000000000000000000000000000000006001939091019283015250600201919050565b60008251619d8281846020870161909f565b7f2f6275696c642d696e666f000000000000000000000000000000000000000000920191825250600b01919050565b7f436f756c64206e6f742066696e64206275696c642d696e666f2066696c65207781527f697468206d61746368696e6720736f7572636520636f6465206861736820666f60208201527f7220636f6e747261637420000000000000000000000000000000000000000000604082015260008251619e3581604b85016020870161909f565b91909101604b0192915050565b600060ff821660ff8103619e5857619e58619737565b60010192915050565b7f406f70656e7a657070656c696e2f646566656e6465722d6465706c6f792d636c81527f69656e742d636c69400000000000000000000000000000000000000000000000602082015260008251619ebf81602985016020870161909f565b9190910160290192915050565b60408152601660408201527f4f50454e5a455050454c494e5f424153485f50415448000000000000000000006060820152608060208201526000614f7860808301846190c3565b600060208284031215619f2557600080fd5b815167ffffffffffffffff811115619f3c57600080fd5b820160608185031215619f4e57600080fd5b619f56619632565b81518060030b8114619f6757600080fd5b8152602082015167ffffffffffffffff811115619f8357600080fd5b619f8f86828501619867565b602083015250604082015167ffffffffffffffff811115619faf57600080fd5b619fbb86828501619867565b604083015250949350505050565b7f4661696c656420746f2072756e206261736820636f6d6d616e6420776974682081527f220000000000000000000000000000000000000000000000000000000000000060208201526000825161a02781602185016020870161909f565b7f222e20496620796f7520617265207573696e672057696e646f77732c2073657460219390910192830152507f20746865204f50454e5a455050454c494e5f424153485f5041544820656e766960418201527f726f6e6d656e74207661726961626c6520746f207468652066756c6c7920717560618201527f616c69666965642070617468206f66207468652062617368206578656375746160818201527f626c652e20466f72206578616d706c652c20696620796f75206172652075736960a18201527f6e672047697420666f722057696e646f77732c206164642074686520666f6c6c60c18201527f6f77696e67206c696e6520696e20746865202e656e762066696c65206f66207960e18201527f6f75722070726f6a65637420287573696e6720666f727761726420736c6173686101018201527f6573293a0a4f50454e5a455050454c494e5f424153485f504154483d22433a2f6101218201527f50726f6772616d2046696c65732f4769742f62696e2f6261736822000000000061014182015261015c01919050565b7f4661696c656420746f2066696e64206c696e652077697468207072656669782081527f270000000000000000000000000000000000000000000000000000000000000060208201526000835161a21381602185016020880161909f565b7f2720696e206f75747075743a2000000000000000000000000000000000000000602191840191820152835161a25081602e84016020880161909f565b01602e01949350505050565b7f4661696c656420746f2072756e2075706772616465207361666574792076616c81527f69646174696f6e3a200000000000000000000000000000000000000000000000602082015260008251619ebf81602985016020870161909f565b7f55706772616465207361666574792076616c69646174696f6e206661696c656481527f3a0a00000000000000000000000000000000000000000000000000000000000060208201526000825161a31881602285016020870161909f565b9190910160220192915050565b7f436f6e7472616374206e616d652000000000000000000000000000000000000081526000825161a35d81600e85016020870161909f565b7f206d75737420626520696e2074686520666f726d6174204d79436f6e74726163600e9390910192830152507f742e736f6c3a4d79436f6e7472616374206f72204d79436f6e74726163742e73602e8201527f6f6c206f72206f75742f4d79436f6e74726163742e736f6c2f4d79436f6e7472604e8201527f6163742e6a736f6e000000000000000000000000000000000000000000000000606e820152607601919050565b7f53504458206c6963656e7365206964656e74696669657220000000000000000081526000835161a43b81601885016020880161909f565b7f20696e2000000000000000000000000000000000000000000000000000000000601891840191820152835161a47881601c84016020880161909f565b7f20646f6573206e6f74206c6f6f6b206c696b65206120737570706f7274656420601c92909101918201527f6c6963656e736520666f7220626c6f636b206578706c6f726572207665726966603c8201527f69636174696f6e2e205573652074686520606c6963656e73655479706560206f605c8201527f7074696f6e20746f20737065636966792061206c6963656e736520747970652c607c8201527f206f7220736574207468652060736b69704c6963656e73655479706560206f70609c8201527f74696f6e20746f2060747275656020746f20736b69702e00000000000000000060bc82015260d301949350505050565b6000825161a57e81846020870161909f565b7f2000000000000000000000000000000000000000000000000000000000000000920191825250600101919050565b7f406f70656e7a657070656c696e2f75706772616465732d636f7265400000000081526000825161a5e581601c85016020870161909f565b91909101601c0192915050565b6000600019820361a6055761a605619737565b5060010190565b8082028115828204841417614dc357614dc3619737565b6001815b600184111561a65e5780850481111561a6425761a642619737565b600184161561a65057908102905b60019390931c92800261a627565b935093915050565b60008261a67557506001614dc3565b8161a68257506000614dc3565b816001811461a698576002811461a6a25761a6be565b6001915050614dc3565b60ff84111561a6b35761a6b3619737565b50506001821b614dc3565b5060208310610133831016604e8410600b841016171561a6e1575081810a614dc3565b61a6ee600019848461a623565b806000190482111561a7025761a702619737565b029392505050565b6000614f78838361a666565b60008161a7255761a725619737565b506000190190565b6000835161a73f81846020880161909f565b7f3a00000000000000000000000000000000000000000000000000000000000000908301908152835161a77981600184016020880161909f565b01600101949350505050565b81810360008312801583831316838312821617156182385761823861973756fe60c0604052600d60809081526c2bb930b83832b21022ba3432b960991b60a05260009061002c9082610114565b506040805180820190915260048152630ae8aa8960e31b60208201526001906100559082610114565b506002805460ff1916601217905534801561006f57600080fd5b506101d2565b634e487b7160e01b600052604160045260246000fd5b600181811c9082168061009f57607f821691505b6020821081036100bf57634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111561010f57806000526020600020601f840160051c810160208510156100ec5750805b601f840160051c820191505b8181101561010c57600081556001016100f8565b50505b505050565b81516001600160401b0381111561012d5761012d610075565b6101418161013b845461008b565b846100c5565b6020601f821160018114610175576000831561015d5750848201515b600019600385901b1c1916600184901b17845561010c565b600084815260208120601f198516915b828110156101a55787850151825560209485019460019092019101610185565b50848210156101c35786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b610986806101e16000396000f3fe6080604052600436106100c05760003560e01c8063313ce56711610074578063a9059cbb1161004e578063a9059cbb146101fa578063d0e30db01461021a578063dd62ed3e1461022257600080fd5b8063313ce5671461018c57806370a08231146101b857806395d89b41146101e557600080fd5b806318160ddd116100a557806318160ddd1461012f57806323b872dd1461014c5780632e1a7d4d1461016c57600080fd5b806306fdde03146100d4578063095ea7b3146100ff57600080fd5b366100cf576100cd61025a565b005b600080fd5b3480156100e057600080fd5b506100e96102b5565b6040516100f69190610745565b60405180910390f35b34801561010b57600080fd5b5061011f61011a3660046107da565b610343565b60405190151581526020016100f6565b34801561013b57600080fd5b50475b6040519081526020016100f6565b34801561015857600080fd5b5061011f610167366004610804565b6103bd565b34801561017857600080fd5b506100cd610187366004610841565b610647565b34801561019857600080fd5b506002546101a69060ff1681565b60405160ff90911681526020016100f6565b3480156101c457600080fd5b5061013e6101d336600461085a565b60036020526000908152604090205481565b3480156101f157600080fd5b506100e9610724565b34801561020657600080fd5b5061011f6102153660046107da565b610731565b6100cd61025a565b34801561022e57600080fd5b5061013e61023d366004610875565b600460209081526000928352604080842090915290825290205481565b33600090815260036020526040812080543492906102799084906108d7565b909155505060405134815233907fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c9060200160405180910390a2565b600080546102c2906108ea565b80601f01602080910402602001604051908101604052809291908181526020018280546102ee906108ea565b801561033b5780601f106103105761010080835404028352916020019161033b565b820191906000526020600020905b81548152906001019060200180831161031e57829003601f168201915b505050505081565b33600081815260046020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925906103ab9086815260200190565b60405180910390a35060015b92915050565b73ffffffffffffffffffffffffffffffffffffffff831660009081526003602052604081205482111561042b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600060248201526044015b60405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff841633148015906104a1575073ffffffffffffffffffffffffffffffffffffffff841660009081526004602090815260408083203384529091529020547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff14155b156105605773ffffffffffffffffffffffffffffffffffffffff8416600090815260046020908152604080832033845290915290205482111561051a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526020600482015260006024820152604401610422565b73ffffffffffffffffffffffffffffffffffffffff841660009081526004602090815260408083203384529091528120805484929061055a90849061093d565b90915550505b73ffffffffffffffffffffffffffffffffffffffff84166000908152600360205260408120805484929061059590849061093d565b909155505073ffffffffffffffffffffffffffffffffffffffff8316600090815260036020526040812080548492906105cf9084906108d7565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161063591815260200190565b60405180910390a35060019392505050565b3360009081526003602052604090205481111561069a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526020600482015260006024820152604401610422565b33600090815260036020526040812080548392906106b990849061093d565b9091555050604051339082156108fc029083906000818181858888f193505050501580156106eb573d6000803e3d6000fd5b5060405181815233907f7fcf532c15f0a6db0bd6d0e038bea71d30d808c7d98cb3bf7268a95bf5081b659060200160405180910390a250565b600180546102c2906108ea565b600061073e3384846103bd565b9392505050565b602081526000825180602084015260005b818110156107735760208186018101516040868401015201610756565b5060006040828501015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011684010191505092915050565b803573ffffffffffffffffffffffffffffffffffffffff811681146107d557600080fd5b919050565b600080604083850312156107ed57600080fd5b6107f6836107b1565b946020939093013593505050565b60008060006060848603121561081957600080fd5b610822846107b1565b9250610830602085016107b1565b929592945050506040919091013590565b60006020828403121561085357600080fd5b5035919050565b60006020828403121561086c57600080fd5b61073e826107b1565b6000806040838503121561088857600080fd5b610891836107b1565b915061089f602084016107b1565b90509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b808201808211156103b7576103b76108a8565b600181811c908216806108fe57607f821691505b602082108103610937577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b818103818111156103b7576103b76108a856fea264697066735822122008d7fc4e09519c5dd9f356b03596f6829a151d0bc7682533f9ceab4e459f5ee264736f6c634300081a003360c060405234801561001057600080fd5b5060405161106f38038061106f83398101604081905261002f916100db565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461006357604051632b2add3d60e01b815260040160405180910390fd5b600380546001600160a01b0319166001600160a01b0385811691909117909155828116608052811660a0526040517f80699e81136d69cb8367ad52a994e25c722a86da654b561d0c14b61a777e7ac590600090a150505061011e565b80516001600160a01b03811681146100d657600080fd5b919050565b6000806000606084860312156100f057600080fd5b6100f9846100bf565b9250610107602085016100bf565b9150610115604085016100bf565b90509250925092565b60805160a051610f2561014a60003960006101e50152600081816102b9015261045b0152610f256000f3fe608060405234801561001057600080fd5b50600436106100f55760003560e01c806397770dff11610097578063c63585cc11610066578063c63585cc14610273578063d7fd7afb14610286578063d936a012146102b4578063ee2815ba146102db57600080fd5b806397770dff1461021a578063a7cb05071461022d578063c39aca3714610240578063c62178ac1461025357600080fd5b8063513a9c05116100d3578063513a9c051461018a578063569541b9146101c0578063842da36d146101e057806391dd645f1461020757600080fd5b80630be15547146100fa5780631f0e251b1461015a5780633ce4a5bc1461016f575b600080fd5b610130610108366004610bd1565b60016020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b61016d610168366004610c13565b6102ee565b005b61013073735b14bb79463307aacbed86daf3322b1e6226ab81565b610130610198366004610bd1565b60026020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b6003546101309073ffffffffffffffffffffffffffffffffffffffff1681565b6101307f000000000000000000000000000000000000000000000000000000000000000081565b61016d610215366004610c35565b610402565b61016d610228366004610c13565b610526565b61016d61023b366004610c61565b610633565b61016d61024e366004610c83565b6106ce565b6004546101309073ffffffffffffffffffffffffffffffffffffffff1681565b610130610281366004610d53565b6108cd565b6102a6610294366004610bd1565b60006020819052908152604090205481565b604051908152602001610151565b6101307f000000000000000000000000000000000000000000000000000000000000000081565b61016d6102e9366004610c35565b610a02565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461033b576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116610388576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600480547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527f3ade88e3922d64780e1bf4460d364c2970b69da813f9c0c07a1c187b5647636c906020015b60405180910390a150565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461044f576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600354600090610497907f00000000000000000000000000000000000000000000000000000000000000009073ffffffffffffffffffffffffffffffffffffffff16846108cd565b60008481526002602090815260409182902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff85169081179091558251878152918201529192507f0ecec485166da6139b13bb7e033e9446e2d35348e80ebf1180d4afe2dba1704e910160405180910390a1505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610573576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff81166105c0576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527fdba79d534382d1a8ae108e4c8ecb27c6ae42ab8b91d44eedf88bd329f3868d5e906020016103f7565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610680576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000828152602081815260409182902083905581518481529081018390527f49f492222906ac486c3c1401fa545626df1f0c0e5a77a05597ea2ed66af9850d91015b60405180910390a15050565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461071b576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff831673735b14bb79463307aacbed86daf3322b1e6226ab1480610768575073ffffffffffffffffffffffffffffffffffffffff831630145b1561079f576040517f82d5d76a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f47e7ef2400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152602482018690528616906347e7ef24906044016020604051808303816000875af1158015610814573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108389190610d96565b506040517fde43156e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84169063de43156e906108939089908990899088908890600401610e01565b600060405180830381600087803b1580156108ad57600080fd5b505af11580156108c1573d6000803e3d6000fd5b50505050505050505050565b60008060006108dc8585610ad3565b6040517fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606084811b8216602084015283901b16603482015291935091508690604801604051602081830303815290604052805190602001206040516020016109c29291907fff00000000000000000000000000000000000000000000000000000000000000815260609290921b7fffffffffffffffffffffffffffffffffffffffff00000000000000000000000016600183015260158201527f96e8ac4277198ff8b6f785478aa9a39f403cb768dd02cbee326c3e7da348845f603582015260550190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291905280516020909101209695505050505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610a4f576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008281526001602090815260409182902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff85169081179091558251858152918201527fd1b36d30f6248e97c473b4d1348ca164a4ef6759022f54a58ec200326c39c45d91016106c2565b6000808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603610b3b576040517fcb1e7cfe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1610610b75578284610b78565b83835b909250905073ffffffffffffffffffffffffffffffffffffffff8216610bca576040517f78b507da00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b9250929050565b600060208284031215610be357600080fd5b5035919050565b803573ffffffffffffffffffffffffffffffffffffffff81168114610c0e57600080fd5b919050565b600060208284031215610c2557600080fd5b610c2e82610bea565b9392505050565b60008060408385031215610c4857600080fd5b82359150610c5860208401610bea565b90509250929050565b60008060408385031215610c7457600080fd5b50508035926020909101359150565b60008060008060008060a08789031215610c9c57600080fd5b863567ffffffffffffffff811115610cb357600080fd5b87016060818a031215610cc557600080fd5b9550610cd360208801610bea565b945060408701359350610ce860608801610bea565b9250608087013567ffffffffffffffff811115610d0457600080fd5b8701601f81018913610d1557600080fd5b803567ffffffffffffffff811115610d2c57600080fd5b896020828401011115610d3e57600080fd5b60208201935080925050509295509295509295565b600080600060608486031215610d6857600080fd5b610d7184610bea565b9250610d7f60208501610bea565b9150610d8d60408501610bea565b90509250925092565b600060208284031215610da857600080fd5b81518015158114610c2e57600080fd5b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b60808152600086357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1883603018112610e3957600080fd5b870160208101903567ffffffffffffffff811115610e5657600080fd5b803603821315610e6557600080fd5b60606080850152610e7a60e085018284610db8565b91505073ffffffffffffffffffffffffffffffffffffffff610e9e60208a01610bea565b1660a0840152604088013560c084015273ffffffffffffffffffffffffffffffffffffffff871660208401528560408401528281036060840152610ee3818587610db8565b9897505050505050505056fea2646970667358221220431a07541a491b54259bdf8fcd05ade6751bfbbf0e72e605f27325b56d7d464f64736f6c634300081a003360e060405234801561001057600080fd5b50604051611bb9380380611bb983398101604081905261002f9161020e565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461006357604051632b2add3d60e01b815260040160405180910390fd5b6001600160a01b038216158061008057506001600160a01b038116155b1561009e5760405163d92e233d60e01b815260040160405180910390fd5b60066100aa8982610360565b5060076100b78882610360565b5060ff861660c05260808590528360028111156100d6576100d661041e565b60a08160028111156100ea576100ea61041e565b905250600192909255600080546001600160a01b039283166001600160a01b03199182161790915560088054929093169116179055506104349350505050565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261015157600080fd5b81516001600160401b0381111561016a5761016a61012a565b604051601f8201601f19908116603f011681016001600160401b03811182821017156101985761019861012a565b6040528181528382016020018510156101b057600080fd5b60005b828110156101cf576020818601810151838301820152016101b3565b506000918101602001919091529392505050565b8051600381106101f257600080fd5b919050565b80516001600160a01b03811681146101f257600080fd5b600080600080600080600080610100898b03121561022b57600080fd5b88516001600160401b0381111561024157600080fd5b61024d8b828c01610140565b60208b015190995090506001600160401b0381111561026b57600080fd5b6102778b828c01610140565b975050604089015160ff8116811461028e57600080fd5b60608a015190965094506102a460808a016101e3565b60a08a015190945092506102ba60c08a016101f7565b91506102c860e08a016101f7565b90509295985092959890939650565b600181811c908216806102eb57607f821691505b60208210810361030b57634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111561035b57806000526020600020601f840160051c810160208510156103385750805b601f840160051c820191505b818110156103585760008155600101610344565b50505b505050565b81516001600160401b038111156103795761037961012a565b61038d8161038784546102d7565b84610311565b6020601f8211600181146103c157600083156103a95750848201515b600019600385901b1c1916600184901b178455610358565b600084815260208120601f198516915b828110156103f157878501518255602094850194600190920191016103d1565b508482101561040f5786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b634e487b7160e01b600052602160045260246000fd5b60805160a05160c05161174861047160003960006102170152600061033a0152600081816102eb01528181610ad70152610bdd01526117486000f3fe608060405234801561001057600080fd5b50600436106101985760003560e01c80638b851b95116100e3578063ccc775991161008c578063eddeb12311610066578063eddeb12314610431578063f2441b3214610444578063f687d12a1461046457600080fd5b8063ccc77599146103a4578063d9eeebed146103b7578063dd62ed3e146103eb57600080fd5b8063a9059cbb116100bd578063a9059cbb14610369578063c70126261461037c578063c835d7cc1461038f57600080fd5b80638b851b951461030d57806395d89b411461032d578063a3413d031461033557600080fd5b80633ce4a5bc116101455780634d8943bb1161011f5780634d8943bb146102a757806370a08231146102b057806385e1f4d0146102e657600080fd5b80633ce4a5bc1461024157806342966c681461028157806347e7ef241461029457600080fd5b806318160ddd1161017657806318160ddd146101f557806323b872dd146101fd578063313ce5671461021057600080fd5b806306fdde031461019d578063091d2788146101bb578063095ea7b3146101d2575b600080fd5b6101a5610477565b6040516101b29190611327565b60405180910390f35b6101c460015481565b6040519081526020016101b2565b6101e56101e0366004611366565b610509565b60405190151581526020016101b2565b6005546101c4565b6101e561020b366004611392565b610520565b60405160ff7f00000000000000000000000000000000000000000000000000000000000000001681526020016101b2565b61025c73735b14bb79463307aacbed86daf3322b1e6226ab81565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101b2565b6101e561028f3660046113d3565b6105b7565b6101e56102a2366004611366565b6105cb565b6101c460025481565b6101c46102be3660046113ec565b73ffffffffffffffffffffffffffffffffffffffff1660009081526003602052604090205490565b6101c47f000000000000000000000000000000000000000000000000000000000000000081565b60085461025c9073ffffffffffffffffffffffffffffffffffffffff1681565b6101a561071f565b61035c7f000000000000000000000000000000000000000000000000000000000000000081565b6040516101b29190611409565b6101e5610377366004611366565b61072e565b6101e561038a366004611479565b61073b565b6103a261039d3660046113ec565b61088a565b005b6103a26103b23660046113ec565b61099e565b6103bf610aab565b6040805173ffffffffffffffffffffffffffffffffffffffff90931683526020830191909152016101b2565b6101c46103f9366004611571565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260046020908152604080832093909416825291909152205490565b6103a261043f3660046113d3565b610cc9565b60005461025c9073ffffffffffffffffffffffffffffffffffffffff1681565b6103a26104723660046113d3565b610d4b565b606060068054610486906115aa565b80601f01602080910402602001604051908101604052809291908181526020018280546104b2906115aa565b80156104ff5780601f106104d4576101008083540402835291602001916104ff565b820191906000526020600020905b8154815290600101906020018083116104e257829003601f168201915b5050505050905090565b6000610516338484610dcd565b5060015b92915050565b600061052d848484610ed6565b73ffffffffffffffffffffffffffffffffffffffff8416600090815260046020908152604080832033845290915290205482811015610598576040517f10bad14700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6105ac85336105a7868561162c565b610dcd565b506001949350505050565b60006105c33383611091565b506001919050565b60003373735b14bb79463307aacbed86daf3322b1e6226ab14801590610609575060005473ffffffffffffffffffffffffffffffffffffffff163314155b801561062d575060085473ffffffffffffffffffffffffffffffffffffffff163314155b15610664576040517fddb5de5e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61066e83836111d3565b6040517f735b14bb79463307aacbed86daf3322b1e6226ab000000000000000000000000602082015273ffffffffffffffffffffffffffffffffffffffff8416907f67fc7bdaed5b0ec550d8706b87d60568ab70c6b781263c70101d54cd1564aab390603401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529082905261070e91869061163f565b60405180910390a250600192915050565b606060078054610486906115aa565b6000610516338484610ed6565b6000806000610748610aab565b6040517f23b872dd00000000000000000000000000000000000000000000000000000000815233600482015273735b14bb79463307aacbed86daf3322b1e6226ab602482015260448101829052919350915073ffffffffffffffffffffffffffffffffffffffff8316906323b872dd906064016020604051808303816000875af11580156107da573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107fe9190611661565b610834576040517f0a7cd6d600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61083e3385611091565b60025460405133917f9ffbffc04a397460ee1dbe8c9503e098090567d6b7f4b3c02a8617d800b6d9559161087791899189918791611683565b60405180910390a2506001949350505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab146108d7576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116610924576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527fd55614e962c5fd6ece71614f6348d702468a997a394dd5e5c1677950226d97ae906020015b60405180910390a150565b3373735b14bb79463307aacbed86daf3322b1e6226ab146109eb576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116610a38576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600880547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527f88815d964e380677e86d817e7d65dea59cb7b4c3b5b7a0c8ec7ea4a74f90a38790602001610993565b600080546040517f0be155470000000000000000000000000000000000000000000000000000000081527f000000000000000000000000000000000000000000000000000000000000000060048201528291829173ffffffffffffffffffffffffffffffffffffffff90911690630be1554790602401602060405180830381865afa158015610b3e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b6291906116b2565b905073ffffffffffffffffffffffffffffffffffffffff8116610bb1576040517f78fff39600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080546040517fd7fd7afb0000000000000000000000000000000000000000000000000000000081527f0000000000000000000000000000000000000000000000000000000000000000600482015273ffffffffffffffffffffffffffffffffffffffff9091169063d7fd7afb90602401602060405180830381865afa158015610c40573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c6491906116cf565b905080600003610ca0576040517fe661aed000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060025460015483610cb391906116e8565b610cbd91906116ff565b92959294509192505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610d16576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60028190556040518181527fef13af88e424b5d15f49c77758542c1938b08b8b95b91ed0751f98ba99000d8f90602001610993565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610d98576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018190556040518181527fff5788270f43bfc1ca41c503606d2594aa3023a1a7547de403a3e2f146a4a80a90602001610993565b73ffffffffffffffffffffffffffffffffffffffff8316610e1a576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216610e67576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff83811660008181526004602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8316610f23576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216610f70576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff831660009081526003602052604090205481811015610fd0576040517ffe382aa700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610fda828261162c565b73ffffffffffffffffffffffffffffffffffffffff808616600090815260036020526040808220939093559085168152908120805484929061101d9084906116ff565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161108391815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff82166110de576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff82166000908152600360205260409020548181101561113e576040517ffe382aa700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611148828261162c565b73ffffffffffffffffffffffffffffffffffffffff84166000908152600360205260408120919091556005805484929061118390849061162c565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90602001610ec9565b73ffffffffffffffffffffffffffffffffffffffff8216611220576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b806005600082825461123291906116ff565b909155505073ffffffffffffffffffffffffffffffffffffffff82166000908152600360205260408120805483929061126c9084906116ff565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6000815180845260005b818110156112e9576020818501810151868301820152016112cd565b5060006020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b60208152600061133a60208301846112c3565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff8116811461136357600080fd5b50565b6000806040838503121561137957600080fd5b823561138481611341565b946020939093013593505050565b6000806000606084860312156113a757600080fd5b83356113b281611341565b925060208401356113c281611341565b929592945050506040919091013590565b6000602082840312156113e557600080fd5b5035919050565b6000602082840312156113fe57600080fd5b813561133a81611341565b6020810160038310611444577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000806040838503121561148c57600080fd5b823567ffffffffffffffff8111156114a357600080fd5b8301601f810185136114b457600080fd5b803567ffffffffffffffff8111156114ce576114ce61144a565b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8501160116810181811067ffffffffffffffff8211171561153a5761153a61144a565b60405281815282820160200187101561155257600080fd5b8160208401602083013760006020928201830152969401359450505050565b6000806040838503121561158457600080fd5b823561158f81611341565b9150602083013561159f81611341565b809150509250929050565b600181811c908216806115be57607f821691505b6020821081036115f7577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8181038181111561051a5761051a6115fd565b60408152600061165260408301856112c3565b90508260208301529392505050565b60006020828403121561167357600080fd5b8151801515811461133a57600080fd5b60808152600061169660808301876112c3565b6020830195909552506040810192909252606090910152919050565b6000602082840312156116c457600080fd5b815161133a81611341565b6000602082840312156116e157600080fd5b5051919050565b808202811582820484141761051a5761051a6115fd565b8082018082111561051a5761051a6115fd56fea26469706673582212204013e39523742118b3f2227e145ee7e48176ba6aebead33c596dca2acb59a74c64736f6c634300081a0033a2646970667358221220573f1cc6799103b470ec41dd299a89dd6b87e46cbfed0317f99a81a6e0a5904a64736f6c634300081a0033", + Bin: "0x6080604052600c8054600160ff199182168117909255601f80549091169091179055348015602c57600080fd5b5061df6a8061003c6000396000f3fe608060405234801561001057600080fd5b50600436106102f45760003560e01c80638ce7ef0511610191578063d27b0427116100e3578063dfbdf60011610097578063f1f87f4011610071578063f1f87f401461049d578063f2413096146104a5578063fa7626d4146104ad57600080fd5b8063dfbdf60014610485578063e13aba481461048d578063e20c9f711461049557600080fd5b8063d591221f116100c8578063d591221f1461046d578063d97136a214610475578063dcba486a1461047d57600080fd5b8063d27b04271461045d578063d509b16c1461046557600080fd5b8063b549984c11610145578063ba414fa61161011f578063ba414fa614610435578063d04cda981461044d578063d1fd32911461045557600080fd5b8063b549984c1461041d578063b5508aa914610425578063b79cad091461042d57600080fd5b8063a4aa6c7c11610176578063a4aa6c7c14610405578063ae9687dc1461040d578063b0464fdc1461041557600080fd5b80638ce7ef05146103e8578063916a17c6146103f057600080fd5b80634b6295091161024a57806366d9a9a0116101fe5780637f924c4e116101d85780637f924c4e146103c357806380326680146103cb57806385226c81146103d357600080fd5b806366d9a9a01461039e5780636ff45850146103b357806370557298146103bb57600080fd5b8063513999621161022f578063513999621461038657806358fdbbe01461038e5780635f01db7e1461039657600080fd5b80634b629509146103765780634cfc0aaa1461037e57600080fd5b806328438826116102ac5780633be9ec80116102865780633be9ec801461035e5780633e5e3c23146103665780633f7286f41461036e57600080fd5b806328438826146103395780632ade3880146103415780632f6254fc1461035657600080fd5b80630a9254e4116102dd5780630a9254e41461030b5780631142744e146103135780631ed7831c1461031b57600080fd5b80630393998b146102f95780630809dfef14610303575b600080fd5b6103016104ba565b005b6103016105bc565b61030161074a565b610301610e2c565b610323610f10565b6040516103309190619053565b60405180910390f35b610301610f72565b6103496111bd565b60405161033091906190ef565b6103016112ff565b610301611470565b61032361165d565b6103236116bd565b61030161171d565b6103016117f0565b6103016118c9565b610301611c46565b610301611d19565b6103a6611e86565b6040516103309190619255565b610301612008565b610301612218565b610301612468565b61030161268c565b6103db612760565b60405161033091906192f3565b610301612830565b6103f8612a30565b604051610330919061936a565b610301612b2b565b610301612ce0565b6103f8612f6d565b610301613068565b6103db61313a565b61030161320a565b61043d61359c565b6040519015158152602001610330565b610301613670565b6103016137b4565b6103016138f7565b610301613a3a565b6103016140ce565b6103016141b2565b610301614338565b6103016145bb565b6103016146fe565b6103236149a8565b610301614a08565b610301614b4e565b601f5461043d9060ff1681565b604051630618f58760e51b81527f2b2add3d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b15801561052657600080fd5b505af115801561053a573d6000803e3d6000fd5b5050601f546040517feddeb123000000000000000000000000000000000000000000000000000000008152600a60048201526101009091046001600160a01b0316925063eddeb12391506024015b600060405180830381600087803b1580156105a257600080fd5b505af11580156105b6573d6000803e3d6000fd5b50505050565b60225460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561061557600080fd5b505af1158015610629573d6000803e3d6000fd5b5050604051630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b15801561069957600080fd5b505af11580156106ad573d6000803e3d6000fd5b5050601f546040517f47e7ef2400000000000000000000000000000000000000000000000000000000815260006004820152620186a060248201526101009091046001600160a01b031692506347e7ef2491506044015b6020604051808303816000875af1158015610723573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107479190619401565b50565b602480547fffffffffffffffffffffffff000000000000000000000000000000000000000090811630179091556025805490911661123417905560405161079090618f73565b604051809103906000f0801580156107ac573d6000803e3d6000fd5b50602380547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03928316908117909155604080518082018252600f81527f476174657761795a45564d2e736f6c000000000000000000000000000000000060208201526024805492519081019390935292166044820152610890919060640160408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f485cc95500000000000000000000000000000000000000000000000000000000179052614daa565b602280546001600160a01b03929092167fffffffffffffffffffffffff00000000000000000000000000000000000000009283168117909155602180549092168117909155604080517f3ce4a5bc0000000000000000000000000000000000000000000000000000000081529051633ce4a5bc916004808201926020929091908290030181865afa158015610929573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061094d919061943f565b602680547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039290921691821790556040517f06447d560000000000000000000000000000000000000000000000000000000081526004810191909152737109709ecfa91a80626ff3989d68f67f5b1dd12d906306447d5690602401600060405180830381600087803b1580156109eb57600080fd5b505af11580156109ff573d6000803e3d6000fd5b505050506000806000604051610a1490618f80565b6001600160a01b03938416815291831660208301529091166040820152606001604051809103906000f080158015610a50573d6000803e3d6000fd5b50602080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03928316908117909155602154604051601293600193849360009391921690610aa690618f8d565b610ab59695949392919061945a565b604051809103906000f080158015610ad1573d6000803e3d6000fd5b50601f80547fffffffffffffffffffffff0000000000000000000000000000000000000000ff166101006001600160a01b03938416810291909117918290556020546040517fee2815ba00000000000000000000000000000000000000000000000000000000815260016004820152919092048316602482015291169063ee2815ba90604401600060405180830381600087803b158015610b7157600080fd5b505af1158015610b85573d6000803e3d6000fd5b50506020546040517fa7cb050700000000000000000000000000000000000000000000000000000000815260016004820181905260248201526001600160a01b03909116925063a7cb05079150604401600060405180830381600087803b158015610bef57600080fd5b505af1158015610c03573d6000803e3d6000fd5b50506026546040517fc88a5e6d0000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152633b9aca006024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c88a5e6d9150604401600060405180830381600087803b158015610c8357600080fd5b505af1158015610c97573d6000803e3d6000fd5b50506022546040517fc88a5e6d0000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152633b9aca006024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c88a5e6d9150604401600060405180830381600087803b158015610d1757600080fd5b505af1158015610d2b573d6000803e3d6000fd5b5050601f54602480546040517f47e7ef240000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620186a09281019290925261010090920490911692506347e7ef2491506044016020604051808303816000875af1158015610da9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dcd9190619401565b507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b03166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156105a257600080fd5b604051630618f58760e51b81527fddb5de5e000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b158015610e9857600080fd5b505af1158015610eac573d6000803e3d6000fd5b5050601f54602480546040517f47e7ef240000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620186a09281019290925261010090920490911692506347e7ef249150604401610704565b60606016805480602002602001604051908101604052809291908181526020018280548015610f6857602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610f4a575b5050505050905090565b601f546025546040516370a0823160e01b81526001600160a01b0391821660048201526000926101009004909116906370a0823190602401602060405180830381865afa158015610fc7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610feb919061954f565b9050610ff8600082614dc9565b601f54602480546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201526207a12092810183905291926101009004169063095ea7b3906044016020604051808303816000875af1158015611070573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110949190619401565b50604051630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b15801561110157600080fd5b505af1158015611115573d6000803e3d6000fd5b5050601f546025546040517f23b872dd000000000000000000000000000000000000000000000000000000008152600060048201526001600160a01b039182166024820152604481018690526101009092041692506323b872dd91506064015b6020604051808303816000875af1158015611194573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111b89190619401565b505050565b6060601e805480602002602001604051908101604052809291908181526020016000905b828210156112f657600084815260208082206040805180820182526002870290920180546001600160a01b03168352600181018054835181870281018701909452808452939591948681019491929084015b828210156112df57838290600052602060002001805461125290619568565b80601f016020809104026020016040519081016040528092919081815260200182805461127e90619568565b80156112cb5780601f106112a0576101008083540402835291602001916112cb565b820191906000526020600020905b8154815290600101906020018083116112ae57829003601f168201915b505050505081526020019060010190611233565b5050505081525050815260200190600101906111e1565b50505050905090565b60265460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561135857600080fd5b505af115801561136c573d6000803e3d6000fd5b5050601f546040517fc835d7cc00000000000000000000000000000000000000000000000000000000815261321160048201526101009091046001600160a01b0316925063c835d7cc9150602401600060405180830381600087803b1580156113d457600080fd5b505af11580156113e8573d6000803e3d6000fd5b5050505061146e601f60019054906101000a90046001600160a01b03166001600160a01b031663f2441b326040518163ffffffff1660e01b8152600401602060405180830381865afa158015611442573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611466919061943f565b613211614e51565b565b60265460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156114c957600080fd5b505af11580156114dd573d6000803e3d6000fd5b50506020546040517fa7cb050700000000000000000000000000000000000000000000000000000000815260016004820152600060248201526001600160a01b03909116925063a7cb05079150604401600060405180830381600087803b15801561154757600080fd5b505af115801561155b573d6000803e3d6000fd5b5050604051630618f58760e51b81527fe661aed0000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e091506024015b600060405180830381600087803b1580156115cc57600080fd5b505af11580156115e0573d6000803e3d6000fd5b50505050600080601f60019054906101000a90046001600160a01b03166001600160a01b031663d9eeebed6040518163ffffffff1660e01b81526004016040805180830381865afa158015611639573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105b691906195b5565b60606018805480602002602001604051908101604052809291908181526020018280548015610f68576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311610f4a575050505050905090565b60606017805480602002602001604051908101604052809291908181526020018280548015610f68576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311610f4a575050505050905090565b604051630618f58760e51b81527f2b2add3d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b15801561178957600080fd5b505af115801561179d573d6000803e3d6000fd5b5050601f546040517fccc7759900000000000000000000000000000000000000000000000000000000815261321160048201526101009091046001600160a01b0316925063ccc775999150602401610588565b604051630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b15801561185c57600080fd5b505af1158015611870573d6000803e3d6000fd5b5050601f546040517f095ea7b300000000000000000000000000000000000000000000000000000000815260006004820152600a60248201526101009091046001600160a01b0316925063095ea7b39150604401610704565b60265460405163ca669fa760e01b81526001600160a01b039091166004820152600a908190737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561192757600080fd5b505af115801561193b573d6000803e3d6000fd5b5050601f546040517ff687d12a000000000000000000000000000000000000000000000000000000008152600481018690526101009091046001600160a01b0316925063f687d12a9150602401600060405180830381600087803b1580156119a257600080fd5b505af11580156119b6573d6000803e3d6000fd5b505060265460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b158015611a1357600080fd5b505af1158015611a27573d6000803e3d6000fd5b5050601f546040517feddeb123000000000000000000000000000000000000000000000000000000008152600481018590526101009091046001600160a01b0316925063eddeb1239150602401600060405180830381600087803b158015611a8e57600080fd5b505af1158015611aa2573d6000803e3d6000fd5b5050601f546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526101009091046001600160a01b03166004820181905260006024830152925063095ea7b391506044016020604051808303816000875af1158015611b15573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b399190619401565b507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b031663f48448146040518163ffffffff1660e01b8152600401600060405180830381600087803b158015611b9857600080fd5b505af1158015611bac573d6000803e3d6000fd5b5050601f546025546040805160609290921b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000001660208301528051601481840301815260348301918290527fc7012626000000000000000000000000000000000000000000000000000000009091526001600160a01b0361010090930492909216935063c7012626925061117591906001906038016195e1565b604051630618f58760e51b81527f2b2add3d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b158015611cb257600080fd5b505af1158015611cc6573d6000803e3d6000fd5b5050601f546040517fc835d7cc00000000000000000000000000000000000000000000000000000000815261321160048201526101009091046001600160a01b0316925063c835d7cc9150602401610588565b60265460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015611d7257600080fd5b505af1158015611d86573d6000803e3d6000fd5b5050601f546040517ff687d12a000000000000000000000000000000000000000000000000000000008152600a60048201526101009091046001600160a01b0316925063f687d12a9150602401600060405180830381600087803b158015611ded57600080fd5b505af1158015611e01573d6000803e3d6000fd5b5050505061146e600a601f60019054906101000a90046001600160a01b03166001600160a01b031663091d27886040518163ffffffff1660e01b8152600401602060405180830381865afa158015611e5d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e81919061954f565b614dc9565b6060601b805480602002602001604051908101604052809291908181526020016000905b828210156112f65783829060005260206000209060020201604051806040016040529081600082018054611edd90619568565b80601f0160208091040260200160405190810160405280929190818152602001828054611f0990619568565b8015611f565780601f10611f2b57610100808354040283529160200191611f56565b820191906000526020600020905b815481529060010190602001808311611f3957829003601f168201915b5050505050815260200160018201805480602002602001604051908101604052809291908181526020018280548015611ff057602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019060040190602082600301049283019260010382029150808411611f9d5790505b50505050508152505081526020019060010190611eaa565b601f546025546040516370a0823160e01b81526001600160a01b0391821660048201526000926101009004909116906370a0823190602401602060405180830381865afa15801561205d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612081919061954f565b905061208e600082614dc9565b601f54602480546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201526207a12092810183905291926101009004169063095ea7b3906044016020604051808303816000875af1158015612106573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061212a9190619401565b50604051630618f58760e51b81527ffe382aa7000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b15801561219757600080fd5b505af11580156121ab573d6000803e3d6000fd5b5050601f54602480546025546040517f23b872dd0000000000000000000000000000000000000000000000000000000081526001600160a01b039283166004820152908216928101929092526044820186905261010090920490911692506323b872dd9150606401611175565b601f546025546040516370a0823160e01b81526001600160a01b0391821660048201526000926101009004909116906370a0823190602401602060405180830381865afa15801561226d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612291919061954f565b905061229e600082614dc9565b601f54602480546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015261c35092810183905291926101009004169063095ea7b3906044016020604051808303816000875af1158015612315573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123399190619401565b50601f54602480546025546040517f23b872dd0000000000000000000000000000000000000000000000000000000081526001600160a01b0392831660048201529082169281019290925260448201849052610100909204909116906323b872dd906064015b6020604051808303816000875af11580156123be573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123e29190619401565b50601f546025546040516370a0823160e01b81526001600160a01b0391821660048201526000926101009004909116906370a0823190602401602060405180830381865afa158015612438573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061245c919061954f565b90506111b88282614dc9565b6000601f60019054906101000a90046001600160a01b03166001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156124bd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124e1919061954f565b90506124f0620186a082614dc9565b60225460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561254957600080fd5b505af115801561255d573d6000803e3d6000fd5b5050601f54602480546040517f47e7ef240000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620186a09281019290925261010090920490911692506347e7ef2491506044016020604051808303816000875af11580156125db573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125ff9190619401565b506000601f60019054906101000a90046001600160a01b03166001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612655573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612679919061954f565b905061268862030d4082614dc9565b5050565b604051630618f58760e51b81527ffe382aa7000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b1580156126f857600080fd5b505af115801561270c573d6000803e3d6000fd5b5050601f546040517f42966c68000000000000000000000000000000000000000000000000000000008152620249f060048201526101009091046001600160a01b031692506342966c689150602401610704565b6060601a805480602002602001604051908101604052809291908181526020016000905b828210156112f65783829060005260206000200180546127a390619568565b80601f01602080910402602001604051908101604052809291908181526020018280546127cf90619568565b801561281c5780601f106127f15761010080835404028352916020019161281c565b820191906000526020600020905b8154815290600101906020018083116127ff57829003601f168201915b505050505081526020019060010190612784565b601f546025546040516370a0823160e01b81526001600160a01b0391821660048201526000926101009004909116906370a0823190602401602060405180830381865afa158015612885573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128a9919061954f565b90506128b6600082614dc9565b601f54602480546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201526207a12092810183905291926101009004169063095ea7b3906044016020604051808303816000875af115801561292e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129529190619401565b50604051630618f58760e51b81527ffe382aa7000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b1580156129bf57600080fd5b505af11580156129d3573d6000803e3d6000fd5b5050601f546025546040517fa9059cbb0000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201526024810186905261010090920416925063a9059cbb9150604401611175565b6060601d805480602002602001604051908101604052809291908181526020016000905b828210156112f65760008481526020908190206040805180820182526002860290920180546001600160a01b03168352600181018054835181870281018701909452808452939491938583019392830182828015612b1357602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019060040190602082600301049283019260010382029150808411612ac05790505b50505050508152505081526020019060010190612a54565b601f54602480546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201526207a12092810183905291926101009004169063095ea7b3906044016020604051808303816000875af1158015612ba3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612bc79190619401565b50604051630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b158015612c3457600080fd5b505af1158015612c48573d6000803e3d6000fd5b5050601f546040517fa9059cbb00000000000000000000000000000000000000000000000000000000815260006004820152602481018590526101009091046001600160a01b0316925063a9059cbb91506044015b6020604051808303816000875af1158015612cbc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126889190619401565b6000601f60019054906101000a90046001600160a01b03166001600160a01b03166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa158015612d35573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052612d5d91908101906196cb565b9050612d9e6040518060400160405280600581526020017f544f4b454e00000000000000000000000000000000000000000000000000000081525082614eb2565b6000601f60019054906101000a90046001600160a01b03166001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa158015612df3573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052612e1b91908101906196cb565b9050612e5c6040518060400160405280600381526020017f544b4e000000000000000000000000000000000000000000000000000000000081525082614eb2565b6000601f60019054906101000a90046001600160a01b03166001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015612eb1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ed59190619714565b9050612ee560128260ff16614dc9565b6000601f60019054906101000a90046001600160a01b03166001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612f3a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f5e919061954f565b90506105b6620186a082614dc9565b6060601c805480602002602001604051908101604052809291908181526020016000905b828210156112f65760008481526020908190206040805180820182526002860290920180546001600160a01b0316835260018101805483518187028101870190945280845293949193858301939283018282801561305057602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019060040190602082600301049283019260010382029150808411612ffd5790505b50505050508152505081526020019060010190612f91565b604051630618f58760e51b81527f2b2add3d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b1580156130d457600080fd5b505af11580156130e8573d6000803e3d6000fd5b5050601f546040517ff687d12a000000000000000000000000000000000000000000000000000000008152600a60048201526101009091046001600160a01b0316925063f687d12a9150602401610588565b60606019805480602002602001604051908101604052809291908181526020016000905b828210156112f657838290600052602060002001805461317d90619568565b80601f01602080910402602001604051908101604052809291908181526020018280546131a990619568565b80156131f65780601f106131cb576101008083540402835291602001916131f6565b820191906000526020600020905b8154815290600101906020018083116131d957829003601f168201915b50505050508152602001906001019061315e565b60265460405163ca669fa760e01b81526001600160a01b039091166004820152600a906305f5e10090737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561326c57600080fd5b505af1158015613280573d6000803e3d6000fd5b5050601f546040517ff687d12a000000000000000000000000000000000000000000000000000000008152600481018690526101009091046001600160a01b0316925063f687d12a9150602401600060405180830381600087803b1580156132e757600080fd5b505af11580156132fb573d6000803e3d6000fd5b505060265460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b15801561335857600080fd5b505af115801561336c573d6000803e3d6000fd5b5050601f546040517feddeb123000000000000000000000000000000000000000000000000000000008152600481018590526101009091046001600160a01b0316925063eddeb1239150602401600060405180830381600087803b1580156133d357600080fd5b505af11580156133e7573d6000803e3d6000fd5b5050601f546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526101009091046001600160a01b031660048201819052630bebc2006024830152925063095ea7b391506044016020604051808303816000875af115801561345d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134819190619401565b50604051630618f58760e51b81527ffe382aa7000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b1580156134ee57600080fd5b505af1158015613502573d6000803e3d6000fd5b5050601f546025546040805160609290921b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000001660208301528051601481840301815260348301918290527fc7012626000000000000000000000000000000000000000000000000000000009091526001600160a01b0361010090930492909216935063c7012626925061117591906064906038016195e1565b60085460009060ff16156135b4575060085460ff1690565b6040517f667f9d70000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d600482018190527f6661696c65640000000000000000000000000000000000000000000000000000602483015260009163667f9d7090604401602060405180830381865afa158015613645573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613669919061954f565b1415905090565b60265460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156136c957600080fd5b505af11580156136dd573d6000803e3d6000fd5b5050601f546040517feddeb123000000000000000000000000000000000000000000000000000000008152600a60048201526101009091046001600160a01b0316925063eddeb1239150602401600060405180830381600087803b15801561374457600080fd5b505af1158015613758573d6000803e3d6000fd5b5050505061146e600a601f60019054906101000a90046001600160a01b03166001600160a01b0316634d8943bb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611e5d573d6000803e3d6000fd5b60265460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561380d57600080fd5b505af1158015613821573d6000803e3d6000fd5b5050604051630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b15801561389157600080fd5b505af11580156138a5573d6000803e3d6000fd5b5050601f546040517fccc77599000000000000000000000000000000000000000000000000000000008152600060048201526101009091046001600160a01b0316925063ccc775999150602401610588565b60265460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561395057600080fd5b505af1158015613964573d6000803e3d6000fd5b5050604051630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b1580156139d457600080fd5b505af11580156139e8573d6000803e3d6000fd5b5050601f546040517fc835d7cc000000000000000000000000000000000000000000000000000000008152600060048201526101009091046001600160a01b0316925063c835d7cc9150602401610588565b60265460405163ca669fa760e01b81526001600160a01b039091166004820152600a908190737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015613a9857600080fd5b505af1158015613aac573d6000803e3d6000fd5b5050601f546040517ff687d12a000000000000000000000000000000000000000000000000000000008152600481018690526101009091046001600160a01b0316925063f687d12a9150602401600060405180830381600087803b158015613b1357600080fd5b505af1158015613b27573d6000803e3d6000fd5b505060265460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b158015613b8457600080fd5b505af1158015613b98573d6000803e3d6000fd5b5050601f546040517feddeb123000000000000000000000000000000000000000000000000000000008152600481018590526101009091046001600160a01b0316925063eddeb1239150602401600060405180830381600087803b158015613bff57600080fd5b505af1158015613c13573d6000803e3d6000fd5b5050601f54602480546040516370a0823160e01b81526001600160a01b039182166004820152600095506101009093041692506370a082319101602060405180830381865afa158015613c6a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613c8e919061954f565b9050613c9d620186a082614dc9565b6000601f60019054906101000a90046001600160a01b03166001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613cf2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613d16919061954f565b9050613d25620186a082614dc9565b601f546026546040516370a0823160e01b81526001600160a01b0391821660048201526000926101009004909116906370a0823190602401602060405180830381865afa158015613d7a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613d9e919061954f565b601f546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526101009091046001600160a01b03166004820181905261c350602483015291925063095ea7b3906044016020604051808303816000875af1158015613e10573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613e349190619401565b50601f546025546040805160609290921b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000001660208301528051601481840301815260348301918290527fc7012626000000000000000000000000000000000000000000000000000000009091526001600160a01b03610100909304929092169163c701262691613ecc919061c350906038016195e1565b6020604051808303816000875af1158015613eeb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613f0f9190619401565b50601f546026546040516370a0823160e01b81526001600160a01b0391821660048201526000926101009004909116906370a0823190602401602060405180830381865afa158015613f65573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613f89919061954f565b9050613fa985613f998885619766565b613fa39190619766565b82614dc9565b601f54602480546040516370a0823160e01b81526001600160a01b0391821660048201526000936101009004909116916370a082319101602060405180830381865afa158015613ffd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614021919061954f565b905061403d866140338961c350619779565b613fa39190619779565b6000601f60019054906101000a90046001600160a01b03166001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015614092573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906140b6919061954f565b90506140c461c35082614dc9565b5050505050505050565b601f546025546040516370a0823160e01b81526001600160a01b0391821660048201526000926101009004909116906370a0823190602401602060405180830381865afa158015614123573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614147919061954f565b9050614154600082614dc9565b601f546025546040517fa9059cbb0000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015261c350602482018190529261010090049091169063a9059cbb9060440161239f565b601f54602480546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201526207a12092810183905291926101009004169063095ea7b3906044016020604051808303816000875af115801561422a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061424e9190619401565b50604051630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b1580156142bb57600080fd5b505af11580156142cf573d6000803e3d6000fd5b5050601f54602480546040517f23b872dd0000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201526000928101929092526044820186905261010090920490911692506323b872dd9150606401612c9d565b60265460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561439157600080fd5b505af11580156143a5573d6000803e3d6000fd5b5050601f546040517ff687d12a000000000000000000000000000000000000000000000000000000008152600a6004820181905293508392506101009091046001600160a01b03169063f687d12a90602401600060405180830381600087803b15801561441157600080fd5b505af1158015614425573d6000803e3d6000fd5b505060265460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b15801561448257600080fd5b505af1158015614496573d6000803e3d6000fd5b5050601f546040517feddeb123000000000000000000000000000000000000000000000000000000008152600a60048201526101009091046001600160a01b0316925063eddeb1239150602401600060405180830381600087803b1580156144fd57600080fd5b505af1158015614511573d6000803e3d6000fd5b50505050600080601f60019054906101000a90046001600160a01b03166001600160a01b031663d9eeebed6040518163ffffffff1660e01b81526004016040805180830381865afa15801561456a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061458e91906195b5565b601f5491935091506145ae9061010090046001600160a01b031683614e51565b6105b6613fa38486619766565b60265460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561461457600080fd5b505af1158015614628573d6000803e3d6000fd5b5050601f546040517fccc7759900000000000000000000000000000000000000000000000000000000815261321160048201526101009091046001600160a01b0316925063ccc775999150602401600060405180830381600087803b15801561469057600080fd5b505af11580156146a4573d6000803e3d6000fd5b5050505061146e601f60019054906101000a90046001600160a01b03166001600160a01b0316638b851b956040518163ffffffff1660e01b8152600401602060405180830381865afa158015611442573d6000803e3d6000fd5b601f54602480546040516370a0823160e01b81526001600160a01b0391821660048201526000936101009004909116916370a082319101602060405180830381865afa158015614752573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614776919061954f565b9050614785620186a082614dc9565b6000601f60019054906101000a90046001600160a01b03166001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156147da573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906147fe919061954f565b905061480d620186a082614dc9565b601f546040517f42966c6800000000000000000000000000000000000000000000000000000000815261c35060048201526101009091046001600160a01b0316906342966c68906024016020604051808303816000875af1158015614876573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061489a9190619401565b50601f54602480546040516370a0823160e01b81526001600160a01b0391821660048201526000936101009004909116916370a082319101602060405180830381865afa1580156148ef573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614913919061954f565b905061492161c35082614dc9565b6000601f60019054906101000a90046001600160a01b03166001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015614976573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061499a919061954f565b90506105b661c35082614dc9565b60606015805480602002602001604051908101604052809291908181526020018280548015610f68576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311610f4a575050505050905090565b60265460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015614a6157600080fd5b505af1158015614a75573d6000803e3d6000fd5b50506020546040517fee2815ba00000000000000000000000000000000000000000000000000000000815260016004820152600060248201526001600160a01b03909116925063ee2815ba9150604401600060405180830381600087803b158015614adf57600080fd5b505af1158015614af3573d6000803e3d6000fd5b5050604051630618f58760e51b81527f78fff396000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e091506024016115b2565b601f546025546040516370a0823160e01b81526001600160a01b0391821660048201526000926101009004909116906370a0823190602401602060405180830381865afa158015614ba3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614bc7919061954f565b9050614bd4600082614dc9565b601f54602480546040517fdd62ed3e0000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201819052928101929092526000926101009004169063dd62ed3e90604401602060405180830381865afa158015614c4a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614c6e919061954f565b9050614c7b600082614dc9565b604051630618f58760e51b81527f10bad14700000000000000000000000000000000000000000000000000000000600482015261c35090737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b158015614ceb57600080fd5b505af1158015614cff573d6000803e3d6000fd5b5050601f54602480546025546040517f23b872dd0000000000000000000000000000000000000000000000000000000081526001600160a01b039283166004820152908216928101929092526044820186905261010090920490911692506323b872dd91506064016020604051808303816000875af1158015614d86573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105b69190619401565b6000614db4618f9a565b614dbf848483614f04565b9150505b92915050565b6040517f98296c540000000000000000000000000000000000000000000000000000000081526004810183905260248101829052737109709ecfa91a80626ff3989d68f67f5b1dd12d906398296c54906044015b60006040518083038186803b158015614e3557600080fd5b505afa158015614e49573d6000803e3d6000fd5b505050505050565b6040517f515361f60000000000000000000000000000000000000000000000000000000081526001600160a01b03808416600483015282166024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063515361f690604401614e1d565b6040517ff320d963000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063f320d96390614e1d908590859060040161978c565b600080614f118584614f7f565b9050614f746040518060400160405280601d81526020017f4552433139363750726f78792e736f6c3a4552433139363750726f78790000008152508286604051602001614f5f9291906197b1565b60405160208183030381529060405285614f8b565b9150505b9392505050565b6000614f788383614fb9565b60c08101515160009015614faf57614fa884848460c00151614fd4565b9050614f78565b614fa8848461517a565b6000614fc58383615265565b614f7883836020015184614f8b565b600080614fdf615271565b90506000614fed8683615344565b9050600061500482606001518360200151856157ea565b90506000615014838389896159fc565b9050600061502182616879565b602081015181519192509060030b156150945789826040015160405160200161504b9291906197d3565b60408051601f19818403018152908290527f08c379a000000000000000000000000000000000000000000000000000000000825261508b91600401619854565b60405180910390fd5b60006150d76040518060400160405280601581526020017f4465706c6f79656420746f20616464726573733a200000000000000000000000815250836001616a48565b6040517fc6ce059d000000000000000000000000000000000000000000000000000000008152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c6ce059d9061512a908490600401619854565b602060405180830381865afa158015615147573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061516b919061943f565b9b9a5050505050505050505050565b6040517f8d1cc9250000000000000000000000000000000000000000000000000000000081526000908190737109709ecfa91a80626ff3989d68f67f5b1dd12d90638d1cc925906151cf908790600401619854565b600060405180830381865afa1580156151ec573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526152149190810190619887565b90506000615242828560405160200161522e9291906198bc565b604051602081830303815290604052616c48565b90506001600160a01b038116614dbf57848460405160200161504b9291906198eb565b61268882826000616c5b565b604080518082018252600381527f6f75740000000000000000000000000000000000000000000000000000000000602082015290517fd145736c000000000000000000000000000000000000000000000000000000008152606091737109709ecfa91a80626ff3989d68f67f5b1dd12d91829063d145736c906152f8908490600401619996565b600060405180830381865afa158015615315573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261533d91908101906196cb565b9250505090565b6153766040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b6000737109709ecfa91a80626ff3989d68f67f5b1dd12d90506153c16040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b6153ca85616d5e565b602082015260006153da86617143565b90506000836001600160a01b031663d930a0e66040518163ffffffff1660e01b8152600401600060405180830381865afa15801561541c573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261544491908101906196cb565b8683856020015160405160200161545e94939291906199dd565b60408051601f19818403018152908290527f60f9bb1100000000000000000000000000000000000000000000000000000000825291506000906001600160a01b038616906360f9bb11906154b6908590600401619854565b600060405180830381865afa1580156154d3573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526154fb91908101906196cb565b6040517fdb4235f60000000000000000000000000000000000000000000000000000000081529091506001600160a01b0386169063db4235f690615543908490600401619ae1565b602060405180830381865afa158015615560573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906155849190619401565b615599578160405160200161504b9190619b33565b6040517f49c4fac80000000000000000000000000000000000000000000000000000000081526001600160a01b038616906349c4fac8906155de908490600401619bc5565b600060405180830381865afa1580156155fb573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261562391908101906196cb565b84526040517fdb4235f60000000000000000000000000000000000000000000000000000000081526001600160a01b0386169063db4235f69061566a908490600401619c17565b602060405180830381865afa158015615687573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906156ab9190619401565b15615740576040517f49c4fac80000000000000000000000000000000000000000000000000000000081526001600160a01b038616906349c4fac8906156f5908490600401619c17565b600060405180830381865afa158015615712573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261573a91908101906196cb565b60408501525b846001600160a01b03166349c4fac88286600001516040516020016157659190619c69565b6040516020818303038152906040526040518363ffffffff1660e01b815260040161579192919061978c565b600060405180830381865afa1580156157ae573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526157d691908101906196cb565b606085015250608083015250949350505050565b60408051600480825260a0820190925260609160009190816020015b60608152602001906001900390816158065790505090506040518060400160405280600481526020017f67726570000000000000000000000000000000000000000000000000000000008152508160008151811061586657615866619cd5565b60200260200101819052506040518060400160405280600381526020017f2d726c0000000000000000000000000000000000000000000000000000000000815250816001815181106158ba576158ba619cd5565b6020026020010181905250846040516020016158d69190619d04565b604051602081830303815290604052816002815181106158f8576158f8619cd5565b6020026020010181905250826040516020016159149190619d70565b6040516020818303038152906040528160038151811061593657615936619cd5565b6020026020010181905250600061594c82616879565b602080820151604080518082018252600581527f2e6a736f6e00000000000000000000000000000000000000000000000000000081850190815282518084018452600080825290860152825180840190935290518252928101929092529192506159dd90604080518082018252600080825260209182015281518083019092528451825280850190820152906173c6565b6159f2578560405160200161504b9190619db1565b9695505050505050565b60a0810151604080518082018252600080825260209182015281518083019092528251808352928101910152606090737109709ecfa91a80626ff3989d68f67f5b1dd12d9015615a4c565b511590565b615bc057826020015115615b08576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605860248201527f54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f742060448201527f62652075736564207768656e207468652060736b6970566572696679536f757260648201527f6365436f646560206f7074696f6e206973206074727565600000000000000000608482015260a40161508b565b8260c0015115615bc0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605360248201527f54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f742060448201527f62652075736564207768656e207468652060736b69704c6963656e736554797060648201527f6560206f7074696f6e2069732060747275656000000000000000000000000000608482015260a40161508b565b6040805160ff8082526120008201909252600091816020015b6060815260200190600190039081615bd957905050905060006040518060400160405280600381526020017f6e70780000000000000000000000000000000000000000000000000000000000815250828280615c3490619e42565b935060ff1681518110615c4957615c49619cd5565b60200260200101819052506040518060400160405280600d81526020017f302e302e312d616c7068612e3700000000000000000000000000000000000000815250604051602001615c9a9190619e61565b604051602081830303815290604052828280615cb590619e42565b935060ff1681518110615cca57615cca619cd5565b60200260200101819052506040518060400160405280600681526020017f6465706c6f790000000000000000000000000000000000000000000000000000815250828280615d1790619e42565b935060ff1681518110615d2c57615d2c619cd5565b60200260200101819052506040518060400160405280600e81526020017f2d2d636f6e74726163744e616d65000000000000000000000000000000000000815250828280615d7990619e42565b935060ff1681518110615d8e57615d8e619cd5565b60200260200101819052508760200151828280615daa90619e42565b935060ff1681518110615dbf57615dbf619cd5565b60200260200101819052506040518060400160405280600e81526020017f2d2d636f6e747261637450617468000000000000000000000000000000000000815250828280615e0c90619e42565b935060ff1681518110615e2157615e21619cd5565b602090810291909101015287518282615e3981619e42565b935060ff1681518110615e4e57615e4e619cd5565b60200260200101819052506040518060400160405280600981526020017f2d2d636861696e49640000000000000000000000000000000000000000000000815250828280615e9b90619e42565b935060ff1681518110615eb057615eb0619cd5565b6020026020010181905250615ec446617427565b8282615ecf81619e42565b935060ff1681518110615ee457615ee4619cd5565b60200260200101819052506040518060400160405280600f81526020017f2d2d6275696c64496e666f46696c650000000000000000000000000000000000815250828280615f3190619e42565b935060ff1681518110615f4657615f46619cd5565b602002602001018190525086828280615f5e90619e42565b935060ff1681518110615f7357615f73619cd5565b602090810291909101015285511561609a5760408051808201909152601581527f2d2d636f6e7374727563746f7242797465636f6465000000000000000000000060208201528282615fc481619e42565b935060ff1681518110615fd957615fd9619cd5565b60209081029190910101526040517f71aad10d0000000000000000000000000000000000000000000000000000000081526001600160a01b038416906371aad10d90616029908990600401619854565b600060405180830381865afa158015616046573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261606e91908101906196cb565b828261607981619e42565b935060ff168151811061608e5761608e619cd5565b60200260200101819052505b84602001511561616a5760408051808201909152601281527f2d2d766572696679536f75726365436f64650000000000000000000000000000602082015282826160e381619e42565b935060ff16815181106160f8576160f8619cd5565b60200260200101819052506040518060400160405280600581526020017f66616c736500000000000000000000000000000000000000000000000000000081525082828061614590619e42565b935060ff168151811061615a5761615a619cd5565b6020026020010181905250616331565b6161a2615a478660a0015160408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6162355760408051808201909152600d81527f2d2d6c6963656e73655479706500000000000000000000000000000000000000602082015282826161e581619e42565b935060ff16815181106161fa576161fa619cd5565b60200260200101819052508460a0015160405160200161621a9190619d04565b60405160208183030381529060405282828061614590619e42565b8460c0015115801561627857506040808901518151808301835260008082526020918201528251808401909352815183529081019082015261627690511590565b155b156163315760408051808201909152600d81527f2d2d6c6963656e73655479706500000000000000000000000000000000000000602082015282826162bc81619e42565b935060ff16815181106162d1576162d1619cd5565b60200260200101819052506162e5886174c7565b6040516020016162f59190619d04565b60405160208183030381529060405282828061631090619e42565b935060ff168151811061632557616325619cd5565b60200260200101819052505b6040808601518151808301835260008082526020918201528251808401909352815183529081019082015261636590511590565b6163fa5760408051808201909152600b81527f2d2d72656c617965724964000000000000000000000000000000000000000000602082015282826163a881619e42565b935060ff16815181106163bd576163bd619cd5565b602002602001018190525084604001518282806163d990619e42565b935060ff16815181106163ee576163ee619cd5565b60200260200101819052505b60608501511561651b5760408051808201909152600681527f2d2d73616c7400000000000000000000000000000000000000000000000000006020820152828261644381619e42565b935060ff168151811061645857616458619cd5565b602090810291909101015260608501516040517fb11a19e800000000000000000000000000000000000000000000000000000000815260048101919091526001600160a01b0384169063b11a19e890602401600060405180830381865afa1580156164c7573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526164ef91908101906196cb565b82826164fa81619e42565b935060ff168151811061650f5761650f619cd5565b60200260200101819052505b60e085015151156165c25760408051808201909152600a81527f2d2d6761734c696d6974000000000000000000000000000000000000000000006020820152828261656581619e42565b935060ff168151811061657a5761657a619cd5565b60200260200101819052506165968560e0015160000151617427565b82826165a181619e42565b935060ff16815181106165b6576165b6619cd5565b60200260200101819052505b60e0850151602001511561666c5760408051808201909152600a81527f2d2d6761735072696365000000000000000000000000000000000000000000006020820152828261660f81619e42565b935060ff168151811061662457616624619cd5565b60200260200101819052506166408560e0015160200151617427565b828261664b81619e42565b935060ff168151811061666057616660619cd5565b60200260200101819052505b60e085015160400151156167165760408051808201909152600e81527f2d2d6d6178466565506572476173000000000000000000000000000000000000602082015282826166b981619e42565b935060ff16815181106166ce576166ce619cd5565b60200260200101819052506166ea8560e0015160400151617427565b82826166f581619e42565b935060ff168151811061670a5761670a619cd5565b60200260200101819052505b60e085015160600151156167c05760408051808201909152601681527f2d2d6d61785072696f72697479466565506572476173000000000000000000006020820152828261676381619e42565b935060ff168151811061677857616778619cd5565b60200260200101819052506167948560e0015160600151617427565b828261679f81619e42565b935060ff16815181106167b4576167b4619cd5565b60200260200101819052505b60008160ff1667ffffffffffffffff8111156167de576167de619603565b60405190808252806020026020018201604052801561681157816020015b60608152602001906001900390816167fc5790505b50905060005b8260ff168160ff16101561686a57838160ff168151811061683a5761683a619cd5565b6020026020010151828260ff168151811061685757616857619cd5565b6020908102919091010152600101616817565b5093505050505b949350505050565b6168a06040518060600160405280600060030b815260200160608152602001606081525090565b60408051808201825260048082527f6261736800000000000000000000000000000000000000000000000000000000602083015291517fd145736c000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d92600091849163d145736c9161692691869101619ecc565b600060405180830381865afa158015616943573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261696b91908101906196cb565b905060006169798683617fb6565b90506000846001600160a01b031663f45c1ce7836040518263ffffffff1660e01b81526004016169a991906192f3565b6000604051808303816000875af11580156169c8573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526169f09190810190619f13565b805190915060030b15801590616a095750602081015151155b8015616a185750604081015151155b156159f25781600081518110616a3057616a30619cd5565b602002602001015160405160200161504b9190619fc9565b60606000616a7d8560408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600080825260209182015281518083019092528651825280870190820152909150616ab49082905b9061810b565b15616c11576000616b3182616b2b84616b25616af78a60408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6040805180820182526000808252602091820152815180830190925282518252918201519181019190915290565b90618132565b90618194565b604080518082018252600181527f0a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152909150616b9590829061810b565b15616bff57604080518082018252600181527f0a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616bfc905b8290618219565b90505b616c088161823f565b92505050614f78565b8215616c2a57848460405160200161504b92919061a1b5565b5050604080516020810190915260008152614f78565b509392505050565b6000808251602084016000f09392505050565b8160a0015115616c6a57505050565b6000616c778484846182a8565b90506000616c8482616879565b602081015181519192509060030b158015616d205750604080518082018252600781527f535543434553530000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616d2090604080518082018252600080825260209182015281518083019092528451825280850190820152616aae565b15616d2d57505050505050565b60408201515115616d4d57816040015160405160200161504b919061a25c565b8060405160200161504b919061a2ba565b60606000616d938360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600481527f2e736f6c0000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152909150616df8905b82906173c6565b15616e6757604080518082018252600481527f2e736f6c0000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152614f7890616e62908390618843565b61823f565b604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616ec9905b82906188cd565b600103616f9657604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616f2f90616bf5565b50604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152614f7890616e62905b8390618219565b604080518082018252600581527f2e6a736f6e00000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616ff590616df1565b1561712c57604080518082018252600181527f2f0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082018190528451808601909552925184528301529061705d908390618967565b9050600081600183516170709190619779565b8151811061708057617080619cd5565b60200260200101519050617123616e626170f66040518060400160405280600581526020017f2e6a736f6e00000000000000000000000000000000000000000000000000000081525060408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b60408051808201825260008082526020918201528151808301909252855182528086019082015290618843565b95945050505050565b8260405160200161504b919061a325565b50919050565b606060006171788360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600481527f2e736f6c00000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201529091506171da90616df1565b156171e857614f788161823f565b604080518082018252600181527f3a000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261724790616ec2565b6001036172b157604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152614f7890616e6290616f8f565b604080518082018252600581527f2e6a736f6e0000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261731090616df1565b1561712c57604080518082018252600181527f2f00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820181905284518086019095529251845283015290617378908390618967565b90506001815111156173b45780600282516173939190619779565b815181106173a3576173a3619cd5565b602002602001015192505050919050565b508260405160200161504b919061a325565b8051825160009111156173db57506000614dc3565b815183516020850151600092916173f191619766565b6173fb9190619779565b905082602001518103617412576001915050614dc3565b82516020840151819020912014905092915050565b6060600061743483618a0c565b600101905060008167ffffffffffffffff81111561745457617454619603565b6040519080825280601f01601f19166020018201604052801561747e576020820181803683370190505b5090508181016020015b600019017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a850494508461748857509392505050565b604081810151815180830183526000808252602091820181905283518085018552835181529282018383015283518085018552600a81527f554e4c4943454e5345440000000000000000000000000000000000000000000081840190815285518087018752838152840192909252845180860190955251845290830152606091617553905b8290618aee565b1561759357505060408051808201909152600481527f4e6f6e65000000000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600981527f556e6c6963656e73650000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526175f29061754c565b1561763257505060408051808201909152600981527f556e6c6963656e736500000000000000000000000000000000000000000000006020820152919050565b604080518082018252600381527f4d49540000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526176919061754c565b156176d157505060408051808201909152600381527f4d495400000000000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f47504c2d322e302d6f6e6c790000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526177309061754c565b806177955750604080518082018252601081527f47504c2d322e302d6f722d6c6174657200000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526177959061754c565b156177d557505060408051808201909152600981527f474e552047504c763200000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f47504c2d332e302d6f6e6c790000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526178349061754c565b806178995750604080518082018252601081527f47504c2d332e302d6f722d6c6174657200000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526178999061754c565b156178d957505060408051808201909152600981527f474e552047504c763300000000000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4c47504c2d322e312d6f6e6c7900000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526179389061754c565b8061799d5750604080518082018252601181527f4c47504c2d322e312d6f722d6c617465720000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261799d9061754c565b156179dd57505060408051808201909152600c81527f474e55204c47504c76322e3100000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4c47504c2d332e302d6f6e6c790000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617a3c9061754c565b80617aa15750604080518082018252601181527f4c47504c2d332e302d6f722d6c6174657200000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617aa19061754c565b15617ae157505060408051808201909152600a81527f474e55204c47504c7633000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f4253442d322d436c61757365000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617b409061754c565b15617b8057505060408051808201909152600c81527f4253442d322d436c6175736500000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f4253442d332d436c61757365000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617bdf9061754c565b15617c1f57505060408051808201909152600c81527f4253442d332d436c6175736500000000000000000000000000000000000000006020820152919050565b604080518082018252600781527f4d504c2d322e300000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617c7e9061754c565b15617cbe57505060408051808201909152600781527f4d504c2d322e30000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600781527f4f534c2d332e300000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617d1d9061754c565b15617d5d57505060408051808201909152600781527f4f534c2d332e30000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600a81527f4170616368652d322e300000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617dbc9061754c565b15617dfc57505060408051808201909152600a81527f4170616368652d322e30000000000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4147504c2d332e302d6f6e6c790000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617e5b9061754c565b80617ec05750604080518082018252601181527f4147504c2d332e302d6f722d6c6174657200000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617ec09061754c565b15617f0057505060408051808201909152600a81527f474e55204147504c7633000000000000000000000000000000000000000000006020820152919050565b604080518082018252600881527f4255534c2d312e3100000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617f5f9061754c565b15617f9f57505060408051808201909152600781527f42534c20312e31000000000000000000000000000000000000000000000000006020820152919050565b6040808401518451915161504b929060200161a403565b60608060005b84518110156180415781858281518110617fd857617fd8619cd5565b6020026020010151604051602001617ff19291906198bc565b6040516020818303038152906040529150600185516180109190619779565b81146180395781604051602001618027919061a56c565b60405160208183030381529060405291505b600101617fbc565b5060408051600380825260808201909252600091816020015b606081526020019060019003908161805a579050509050838160008151811061808557618085619cd5565b60200260200101819052506040518060400160405280600281526020017f2d63000000000000000000000000000000000000000000000000000000000000815250816001815181106180d9576180d9619cd5565b602002602001018190525081816002815181106180f8576180f8619cd5565b6020908102919091010152949350505050565b60208083015183518351928401516000936181299291849190618b02565b14159392505050565b604080518082019091526000808252602082015260006181648460000151856020015185600001518660200151618c13565b90508360200151816181769190619779565b84518590618185908390619779565b90525060208401525090919050565b60408051808201909152600080825260208201528151835110156181b9575081614dc3565b60208083015190840151600191146181e05750815160208481015190840151829020919020145b8015618211578251845185906181f7908390619779565b905250825160208501805161820d908390619766565b9052505b509192915050565b6040805180820190915260008082526020820152618238838383618d33565b5092915050565b60606000826000015167ffffffffffffffff81111561826057618260619603565b6040519080825280601f01601f19166020018201604052801561828a576020820181803683370190505b50905060006020820190506182388185602001518660000151618dde565b606060006182b4615271565b6040805160ff808252612000820190925291925060009190816020015b60608152602001906001900390816182d157905050905060006040518060400160405280600381526020017f6e7078000000000000000000000000000000000000000000000000000000000081525082828061832c90619e42565b935060ff168151811061834157618341619cd5565b60200260200101819052506040518060400160405280600781526020017f5e312e33322e3300000000000000000000000000000000000000000000000000815250604051602001618392919061a5ad565b6040516020818303038152906040528282806183ad90619e42565b935060ff16815181106183c2576183c2619cd5565b60200260200101819052506040518060400160405280600881526020017f76616c696461746500000000000000000000000000000000000000000000000081525082828061840f90619e42565b935060ff168151811061842457618424619cd5565b6020026020010181905250826040516020016184409190619d70565b60405160208183030381529060405282828061845b90619e42565b935060ff168151811061847057618470619cd5565b60200260200101819052506040518060400160405280600a81526020017f2d2d636f6e7472616374000000000000000000000000000000000000000000008152508282806184bd90619e42565b935060ff16815181106184d2576184d2619cd5565b60200260200101819052506184e78784618e58565b82826184f281619e42565b935060ff168151811061850757618507619cd5565b6020908102919091010152855151156185b35760408051808201909152600b81527f2d2d7265666572656e63650000000000000000000000000000000000000000006020820152828261855981619e42565b935060ff168151811061856e5761856e619cd5565b6020026020010181905250618587866000015184618e58565b828261859281619e42565b935060ff16815181106185a7576185a7619cd5565b60200260200101819052505b8560800151156186215760408051808201909152601881527f2d2d756e73616665536b697053746f72616765436865636b0000000000000000602082015282826185fc81619e42565b935060ff168151811061861157618611619cd5565b6020026020010181905250618687565b84156186875760408051808201909152601281527f2d2d726571756972655265666572656e636500000000000000000000000000006020820152828261866681619e42565b935060ff168151811061867b5761867b619cd5565b60200260200101819052505b604086015151156187235760408051808201909152600d81527f2d2d756e73616665416c6c6f7700000000000000000000000000000000000000602082015282826186d181619e42565b935060ff16815181106186e6576186e6619cd5565b6020026020010181905250856040015182828061870290619e42565b935060ff168151811061871757618717619cd5565b60200260200101819052505b85606001511561878d5760408051808201909152601481527f2d2d756e73616665416c6c6f7752656e616d65730000000000000000000000006020820152828261876c81619e42565b935060ff168151811061878157618781619cd5565b60200260200101819052505b60008160ff1667ffffffffffffffff8111156187ab576187ab619603565b6040519080825280602002602001820160405280156187de57816020015b60608152602001906001900390816187c95790505b50905060005b8260ff168160ff16101561883757838160ff168151811061880757618807619cd5565b6020026020010151828260ff168151811061882457618824619cd5565b60209081029190910101526001016187e4565b50979650505050505050565b6040805180820190915260008082526020820152815183511015618868575081614dc3565b8151835160208501516000929161887e91619766565b6188889190619779565b602084015190915060019082146188a9575082516020840151819020908220145b80156188c4578351855186906188c0908390619779565b9052505b50929392505050565b60008082600001516188f18560000151866020015186600001518760200151618c13565b6188fb9190619766565b90505b8351602085015161890f9190619766565b8111618238578161891f8161a5f2565b925050826000015161895685602001518361893a9190619779565b86516189469190619779565b8386600001518760200151618c13565b6189609190619766565b90506188fe565b6060600061897584846188cd565b618980906001619766565b67ffffffffffffffff81111561899857618998619603565b6040519080825280602002602001820160405280156189cb57816020015b60608152602001906001900390816189b65790505b50905060005b8151811015616c40576189e7616e628686618219565b8282815181106189f9576189f9619cd5565b60209081029190910101526001016189d1565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310618a55577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310618a81576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc100008310618a9f57662386f26fc10000830492506010015b6305f5e1008310618ab7576305f5e100830492506008015b6127108310618acb57612710830492506004015b60648310618add576064830492506002015b600a8310614dc35760010192915050565b6000618afa8383618e98565b159392505050565b600080858411618c095760208411618bb55760008415618b4d576001618b29866020619779565b618b3490600861a60c565b618b3f90600261a70a565b618b499190619779565b1990505b8351811685618b5c8989619766565b618b669190619779565b805190935082165b818114618ba057878411618b885787945050505050616871565b83618b928161a716565b945050828451169050618b6e565b618baa8785619766565b945050505050616871565b838320618bc28588619779565b618bcc9087619766565b91505b858210618c0757848220808203618bf457618bea8684619766565b9350505050616871565b618bff600184619779565b925050618bcf565b505b5092949350505050565b60008381868511618d1e5760208511618ccd5760008515618c5f576001618c3b876020619779565b618c4690600861a60c565b618c5190600261a70a565b618c5b9190619779565b1990505b84518116600087618c708b8b619766565b618c7a9190619779565b855190915083165b828114618cbf57818610618ca757618c9a8b8b619766565b9650505050505050616871565b85618cb18161a5f2565b965050838651169050618c82565b859650505050505050616871565b508383206000905b618cdf8689619779565b8211618d1c57858320808203618cfb5783945050505050616871565b618d06600185619766565b9350508180618d149061a5f2565b925050618cd5565b505b618d288787619766565b979650505050505050565b60408051808201909152600080825260208201526000618d658560000151866020015186600001518760200151618c13565b602080870180519186019190915251909150618d819082619779565b835284516020860151618d949190619766565b8103618da35760008552618dd5565b83518351618db19190619766565b85518690618dc0908390619779565b9052508351618dcf9082619766565b60208601525b50909392505050565b60208110618e165781518352618df5602084619766565b9250618e02602083619766565b9150618e0f602082619779565b9050618dde565b6000198115618e45576001618e2c836020619779565b618e389061010061a70a565b618e429190619779565b90505b9151835183169219169190911790915250565b60606000618e668484615344565b8051602080830151604051939450618e809390910161a72d565b60405160208183030381529060405291505092915050565b8151815160009190811115618eab575081515b6020808501519084015160005b83811015618f645782518251808214618f34576000196020871015618f1357600184618ee5896020619779565b618eef9190619766565b618efa90600861a60c565b618f0590600261a70a565b618f0f9190619779565b1990505b8181168382168181039114618f31579750614dc39650505050505050565b50505b618f3f602086619766565b9450618f4c602085619766565b93505050602081618f5d9190619766565b9050618eb8565b50845186516159f2919061a785565b610b678061a7a683390190565b61106f8061b30d83390190565b611bb98061c37c83390190565b6040518060e00160405280606081526020016060815260200160608152602001600015158152602001600015158152602001600015158152602001618fdd618fe2565b905290565b60405180610100016040528060001515815260200160001515815260200160608152602001600080191681526020016060815260200160608152602001600015158152602001618fdd6040518060800160405280600081526020016000815260200160008152602001600081525090565b602080825282518282018190526000918401906040840190835b818110156190945783516001600160a01b031683526020938401939092019160010161906d565b509095945050505050565b60005b838110156190ba5781810151838201526020016190a2565b50506000910152565b600081518084526190db81602086016020860161909f565b601f01601f19169290920160200192915050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b828110156191eb577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452815180516001600160a01b03168652602090810151604082880181905281519088018190529101906060600582901b88018101919088019060005b818110156191d1577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa08a85030183526191bb8486516190c3565b6020958601959094509290920191600101619181565b509197505050602094850194929092019150600101619117565b50929695505050505050565b600081518084526020840193506020830160005b8281101561924b5781517fffffffff000000000000000000000000000000000000000000000000000000001686526020958601959091019060010161920b565b5093949350505050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b828110156191eb577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc087860301845281518051604087526192c160408801826190c3565b90506020820151915086810360208801526192dc81836191f7565b96505050602093840193919091019060010161927d565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b828110156191eb577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08786030184526193558583516190c3565b9450602093840193919091019060010161931b565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b828110156191eb577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc087860301845281516001600160a01b03815116865260208101519050604060208701526193eb60408701826191f7565b9550506020938401939190910190600101619392565b60006020828403121561941357600080fd5b81518015158114614f7857600080fd5b80516001600160a01b038116811461943a57600080fd5b919050565b60006020828403121561945157600080fd5b614f7882619423565b610100815260056101008201527f544f4b454e000000000000000000000000000000000000000000000000000000610120820152610140602082015260036101408201527f544b4e000000000000000000000000000000000000000000000000000000000061016082015260006101808201905060ff8816604083015286606083015260038610619514577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b8560808301528460a083015261953560c08301856001600160a01b03169052565b6001600160a01b03831660e0830152979650505050505050565b60006020828403121561956157600080fd5b5051919050565b600181811c9082168061957c57607f821691505b60208210810361713d577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600080604083850312156195c857600080fd5b6195d183619423565b6020939093015192949293505050565b6040815260006195f460408301856190c3565b90508260208301529392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040516060810167ffffffffffffffff8111828210171561965557619655619603565b60405290565b60008067ffffffffffffffff84111561967657619676619603565b50604051601f19601f85018116603f0116810181811067ffffffffffffffff821117156196a5576196a5619603565b6040528381529050808284018510156196bd57600080fd5b616c4084602083018561909f565b6000602082840312156196dd57600080fd5b815167ffffffffffffffff8111156196f457600080fd5b8201601f8101841361970557600080fd5b614dbf8482516020840161965b565b60006020828403121561972657600080fd5b815160ff81168114614f7857600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b80820180821115614dc357614dc3619737565b81810381811115614dc357614dc3619737565b60408152600061979f60408301856190c3565b8281036020840152614f7481856190c3565b6001600160a01b038316815260406020820152600061687160408301846190c3565b7f4661696c656420746f206465706c6f7920636f6e74726163742000000000000081526000835161980b81601a85016020880161909f565b7f3a20000000000000000000000000000000000000000000000000000000000000601a91840191820152835161984881601c84016020880161909f565b01601c01949350505050565b602081526000614f7860208301846190c3565b600082601f83011261987857600080fd5b614f788383516020850161965b565b60006020828403121561989957600080fd5b815167ffffffffffffffff8111156198b057600080fd5b614dbf84828501619867565b600083516198ce81846020880161909f565b8351908301906198e281836020880161909f565b01949350505050565b7f4661696c656420746f206465706c6f7920636f6e74726163742000000000000081526000835161992381601a85016020880161909f565b7f207573696e6720636f6e7374727563746f722064617461202200000000000000601a91840191820152835161996081603384016020880161909f565b7f220000000000000000000000000000000000000000000000000000000000000060339290910191820152603401949350505050565b60408152600b60408201527f464f554e4452595f4f55540000000000000000000000000000000000000000006060820152608060208201526000614f7860808301846190c3565b600085516199ef818460208a0161909f565b7f2f000000000000000000000000000000000000000000000000000000000000009083019081528551619a29816001840160208a0161909f565b7f2f00000000000000000000000000000000000000000000000000000000000000600192909101918201528451619a6781600284016020890161909f565b6001818301019150507f2f0000000000000000000000000000000000000000000000000000000000000060018201528351619aa981600284016020880161909f565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600292909101918201526007019695505050505050565b604081526000619af460408301846190c3565b8281036020840152600481527f2e6173740000000000000000000000000000000000000000000000000000000060208201526040810191505092915050565b7f436f756c64206e6f742066696e642041535420696e2061727469666163742000815260008251619b6b81601f85016020870161909f565b7f2e205365742060617374203d20747275656020696e20666f756e6472792e746f601f9390910192830152507f6d6c000000000000000000000000000000000000000000000000000000000000603f820152604101919050565b604081526000619bd860408301846190c3565b8281036020840152601181527f2e6173742e6162736f6c7574655061746800000000000000000000000000000060208201526040810191505092915050565b604081526000619c2a60408301846190c3565b8281036020840152600c81527f2e6173742e6c6963656e7365000000000000000000000000000000000000000060208201526040810191505092915050565b7f2e6d657461646174612e736f75726365732e5b27000000000000000000000000815260008251619ca181601485016020870161909f565b7f275d2e6b656363616b32353600000000000000000000000000000000000000006014939091019283015250602001919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f2200000000000000000000000000000000000000000000000000000000000000815260008251619d3c81600185016020870161909f565b7f22000000000000000000000000000000000000000000000000000000000000006001939091019283015250600201919050565b60008251619d8281846020870161909f565b7f2f6275696c642d696e666f000000000000000000000000000000000000000000920191825250600b01919050565b7f436f756c64206e6f742066696e64206275696c642d696e666f2066696c65207781527f697468206d61746368696e6720736f7572636520636f6465206861736820666f60208201527f7220636f6e747261637420000000000000000000000000000000000000000000604082015260008251619e3581604b85016020870161909f565b91909101604b0192915050565b600060ff821660ff8103619e5857619e58619737565b60010192915050565b7f406f70656e7a657070656c696e2f646566656e6465722d6465706c6f792d636c81527f69656e742d636c69400000000000000000000000000000000000000000000000602082015260008251619ebf81602985016020870161909f565b9190910160290192915050565b60408152601660408201527f4f50454e5a455050454c494e5f424153485f50415448000000000000000000006060820152608060208201526000614f7860808301846190c3565b600060208284031215619f2557600080fd5b815167ffffffffffffffff811115619f3c57600080fd5b820160608185031215619f4e57600080fd5b619f56619632565b81518060030b8114619f6757600080fd5b8152602082015167ffffffffffffffff811115619f8357600080fd5b619f8f86828501619867565b602083015250604082015167ffffffffffffffff811115619faf57600080fd5b619fbb86828501619867565b604083015250949350505050565b7f4661696c656420746f2072756e206261736820636f6d6d616e6420776974682081527f220000000000000000000000000000000000000000000000000000000000000060208201526000825161a02781602185016020870161909f565b7f222e20496620796f7520617265207573696e672057696e646f77732c2073657460219390910192830152507f20746865204f50454e5a455050454c494e5f424153485f5041544820656e766960418201527f726f6e6d656e74207661726961626c6520746f207468652066756c6c7920717560618201527f616c69666965642070617468206f66207468652062617368206578656375746160818201527f626c652e20466f72206578616d706c652c20696620796f75206172652075736960a18201527f6e672047697420666f722057696e646f77732c206164642074686520666f6c6c60c18201527f6f77696e67206c696e6520696e20746865202e656e762066696c65206f66207960e18201527f6f75722070726f6a65637420287573696e6720666f727761726420736c6173686101018201527f6573293a0a4f50454e5a455050454c494e5f424153485f504154483d22433a2f6101218201527f50726f6772616d2046696c65732f4769742f62696e2f6261736822000000000061014182015261015c01919050565b7f4661696c656420746f2066696e64206c696e652077697468207072656669782081527f270000000000000000000000000000000000000000000000000000000000000060208201526000835161a21381602185016020880161909f565b7f2720696e206f75747075743a2000000000000000000000000000000000000000602191840191820152835161a25081602e84016020880161909f565b01602e01949350505050565b7f4661696c656420746f2072756e2075706772616465207361666574792076616c81527f69646174696f6e3a200000000000000000000000000000000000000000000000602082015260008251619ebf81602985016020870161909f565b7f55706772616465207361666574792076616c69646174696f6e206661696c656481527f3a0a00000000000000000000000000000000000000000000000000000000000060208201526000825161a31881602285016020870161909f565b9190910160220192915050565b7f436f6e7472616374206e616d652000000000000000000000000000000000000081526000825161a35d81600e85016020870161909f565b7f206d75737420626520696e2074686520666f726d6174204d79436f6e74726163600e9390910192830152507f742e736f6c3a4d79436f6e7472616374206f72204d79436f6e74726163742e73602e8201527f6f6c206f72206f75742f4d79436f6e74726163742e736f6c2f4d79436f6e7472604e8201527f6163742e6a736f6e000000000000000000000000000000000000000000000000606e820152607601919050565b7f53504458206c6963656e7365206964656e74696669657220000000000000000081526000835161a43b81601885016020880161909f565b7f20696e2000000000000000000000000000000000000000000000000000000000601891840191820152835161a47881601c84016020880161909f565b7f20646f6573206e6f74206c6f6f6b206c696b65206120737570706f7274656420601c92909101918201527f6c6963656e736520666f7220626c6f636b206578706c6f726572207665726966603c8201527f69636174696f6e2e205573652074686520606c6963656e73655479706560206f605c8201527f7074696f6e20746f20737065636966792061206c6963656e736520747970652c607c8201527f206f7220736574207468652060736b69704c6963656e73655479706560206f70609c8201527f74696f6e20746f2060747275656020746f20736b69702e00000000000000000060bc82015260d301949350505050565b6000825161a57e81846020870161909f565b7f2000000000000000000000000000000000000000000000000000000000000000920191825250600101919050565b7f406f70656e7a657070656c696e2f75706772616465732d636f7265400000000081526000825161a5e581601c85016020870161909f565b91909101601c0192915050565b6000600019820361a6055761a605619737565b5060010190565b8082028115828204841417614dc357614dc3619737565b6001815b600184111561a65e5780850481111561a6425761a642619737565b600184161561a65057908102905b60019390931c92800261a627565b935093915050565b60008261a67557506001614dc3565b8161a68257506000614dc3565b816001811461a698576002811461a6a25761a6be565b6001915050614dc3565b60ff84111561a6b35761a6b3619737565b50506001821b614dc3565b5060208310610133831016604e8410600b841016171561a6e1575081810a614dc3565b61a6ee600019848461a623565b806000190482111561a7025761a702619737565b029392505050565b6000614f78838361a666565b60008161a7255761a725619737565b506000190190565b6000835161a73f81846020880161909f565b7f3a00000000000000000000000000000000000000000000000000000000000000908301908152835161a77981600184016020880161909f565b01600101949350505050565b81810360008312801583831316838312821617156182385761823861973756fe60c0604052600d60809081526c2bb930b83832b21022ba3432b960991b60a05260009061002c9082610114565b506040805180820190915260048152630ae8aa8960e31b60208201526001906100559082610114565b506002805460ff1916601217905534801561006f57600080fd5b506101d2565b634e487b7160e01b600052604160045260246000fd5b600181811c9082168061009f57607f821691505b6020821081036100bf57634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111561010f57806000526020600020601f840160051c810160208510156100ec5750805b601f840160051c820191505b8181101561010c57600081556001016100f8565b50505b505050565b81516001600160401b0381111561012d5761012d610075565b6101418161013b845461008b565b846100c5565b6020601f821160018114610175576000831561015d5750848201515b600019600385901b1c1916600184901b17845561010c565b600084815260208120601f198516915b828110156101a55787850151825560209485019460019092019101610185565b50848210156101c35786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b610986806101e16000396000f3fe6080604052600436106100c05760003560e01c8063313ce56711610074578063a9059cbb1161004e578063a9059cbb146101fa578063d0e30db01461021a578063dd62ed3e1461022257600080fd5b8063313ce5671461018c57806370a08231146101b857806395d89b41146101e557600080fd5b806318160ddd116100a557806318160ddd1461012f57806323b872dd1461014c5780632e1a7d4d1461016c57600080fd5b806306fdde03146100d4578063095ea7b3146100ff57600080fd5b366100cf576100cd61025a565b005b600080fd5b3480156100e057600080fd5b506100e96102b5565b6040516100f69190610745565b60405180910390f35b34801561010b57600080fd5b5061011f61011a3660046107da565b610343565b60405190151581526020016100f6565b34801561013b57600080fd5b50475b6040519081526020016100f6565b34801561015857600080fd5b5061011f610167366004610804565b6103bd565b34801561017857600080fd5b506100cd610187366004610841565b610647565b34801561019857600080fd5b506002546101a69060ff1681565b60405160ff90911681526020016100f6565b3480156101c457600080fd5b5061013e6101d336600461085a565b60036020526000908152604090205481565b3480156101f157600080fd5b506100e9610724565b34801561020657600080fd5b5061011f6102153660046107da565b610731565b6100cd61025a565b34801561022e57600080fd5b5061013e61023d366004610875565b600460209081526000928352604080842090915290825290205481565b33600090815260036020526040812080543492906102799084906108d7565b909155505060405134815233907fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c9060200160405180910390a2565b600080546102c2906108ea565b80601f01602080910402602001604051908101604052809291908181526020018280546102ee906108ea565b801561033b5780601f106103105761010080835404028352916020019161033b565b820191906000526020600020905b81548152906001019060200180831161031e57829003601f168201915b505050505081565b33600081815260046020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925906103ab9086815260200190565b60405180910390a35060015b92915050565b73ffffffffffffffffffffffffffffffffffffffff831660009081526003602052604081205482111561042b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600060248201526044015b60405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff841633148015906104a1575073ffffffffffffffffffffffffffffffffffffffff841660009081526004602090815260408083203384529091529020547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff14155b156105605773ffffffffffffffffffffffffffffffffffffffff8416600090815260046020908152604080832033845290915290205482111561051a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526020600482015260006024820152604401610422565b73ffffffffffffffffffffffffffffffffffffffff841660009081526004602090815260408083203384529091528120805484929061055a90849061093d565b90915550505b73ffffffffffffffffffffffffffffffffffffffff84166000908152600360205260408120805484929061059590849061093d565b909155505073ffffffffffffffffffffffffffffffffffffffff8316600090815260036020526040812080548492906105cf9084906108d7565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161063591815260200190565b60405180910390a35060019392505050565b3360009081526003602052604090205481111561069a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526020600482015260006024820152604401610422565b33600090815260036020526040812080548392906106b990849061093d565b9091555050604051339082156108fc029083906000818181858888f193505050501580156106eb573d6000803e3d6000fd5b5060405181815233907f7fcf532c15f0a6db0bd6d0e038bea71d30d808c7d98cb3bf7268a95bf5081b659060200160405180910390a250565b600180546102c2906108ea565b600061073e3384846103bd565b9392505050565b602081526000825180602084015260005b818110156107735760208186018101516040868401015201610756565b5060006040828501015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011684010191505092915050565b803573ffffffffffffffffffffffffffffffffffffffff811681146107d557600080fd5b919050565b600080604083850312156107ed57600080fd5b6107f6836107b1565b946020939093013593505050565b60008060006060848603121561081957600080fd5b610822846107b1565b9250610830602085016107b1565b929592945050506040919091013590565b60006020828403121561085357600080fd5b5035919050565b60006020828403121561086c57600080fd5b61073e826107b1565b6000806040838503121561088857600080fd5b610891836107b1565b915061089f602084016107b1565b90509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b808201808211156103b7576103b76108a8565b600181811c908216806108fe57607f821691505b602082108103610937577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b818103818111156103b7576103b76108a856fea264697066735822122008d7fc4e09519c5dd9f356b03596f6829a151d0bc7682533f9ceab4e459f5ee264736f6c634300081a003360c060405234801561001057600080fd5b5060405161106f38038061106f83398101604081905261002f916100db565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461006357604051632b2add3d60e01b815260040160405180910390fd5b600380546001600160a01b0319166001600160a01b0385811691909117909155828116608052811660a0526040517f80699e81136d69cb8367ad52a994e25c722a86da654b561d0c14b61a777e7ac590600090a150505061011e565b80516001600160a01b03811681146100d657600080fd5b919050565b6000806000606084860312156100f057600080fd5b6100f9846100bf565b9250610107602085016100bf565b9150610115604085016100bf565b90509250925092565b60805160a051610f2561014a60003960006101e50152600081816102b9015261045b0152610f256000f3fe608060405234801561001057600080fd5b50600436106100f55760003560e01c806397770dff11610097578063c63585cc11610066578063c63585cc14610273578063d7fd7afb14610286578063d936a012146102b4578063ee2815ba146102db57600080fd5b806397770dff1461021a578063a7cb05071461022d578063c39aca3714610240578063c62178ac1461025357600080fd5b8063513a9c05116100d3578063513a9c051461018a578063569541b9146101c0578063842da36d146101e057806391dd645f1461020757600080fd5b80630be15547146100fa5780631f0e251b1461015a5780633ce4a5bc1461016f575b600080fd5b610130610108366004610bd1565b60016020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b61016d610168366004610c13565b6102ee565b005b61013073735b14bb79463307aacbed86daf3322b1e6226ab81565b610130610198366004610bd1565b60026020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b6003546101309073ffffffffffffffffffffffffffffffffffffffff1681565b6101307f000000000000000000000000000000000000000000000000000000000000000081565b61016d610215366004610c35565b610402565b61016d610228366004610c13565b610526565b61016d61023b366004610c61565b610633565b61016d61024e366004610c83565b6106ce565b6004546101309073ffffffffffffffffffffffffffffffffffffffff1681565b610130610281366004610d53565b6108cd565b6102a6610294366004610bd1565b60006020819052908152604090205481565b604051908152602001610151565b6101307f000000000000000000000000000000000000000000000000000000000000000081565b61016d6102e9366004610c35565b610a02565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461033b576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116610388576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600480547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527f3ade88e3922d64780e1bf4460d364c2970b69da813f9c0c07a1c187b5647636c906020015b60405180910390a150565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461044f576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600354600090610497907f00000000000000000000000000000000000000000000000000000000000000009073ffffffffffffffffffffffffffffffffffffffff16846108cd565b60008481526002602090815260409182902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff85169081179091558251878152918201529192507f0ecec485166da6139b13bb7e033e9446e2d35348e80ebf1180d4afe2dba1704e910160405180910390a1505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610573576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff81166105c0576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527fdba79d534382d1a8ae108e4c8ecb27c6ae42ab8b91d44eedf88bd329f3868d5e906020016103f7565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610680576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000828152602081815260409182902083905581518481529081018390527f49f492222906ac486c3c1401fa545626df1f0c0e5a77a05597ea2ed66af9850d91015b60405180910390a15050565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461071b576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff831673735b14bb79463307aacbed86daf3322b1e6226ab1480610768575073ffffffffffffffffffffffffffffffffffffffff831630145b1561079f576040517f82d5d76a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f47e7ef2400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152602482018690528616906347e7ef24906044016020604051808303816000875af1158015610814573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108389190610d96565b506040517fde43156e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84169063de43156e906108939089908990899088908890600401610e01565b600060405180830381600087803b1580156108ad57600080fd5b505af11580156108c1573d6000803e3d6000fd5b50505050505050505050565b60008060006108dc8585610ad3565b6040517fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606084811b8216602084015283901b16603482015291935091508690604801604051602081830303815290604052805190602001206040516020016109c29291907fff00000000000000000000000000000000000000000000000000000000000000815260609290921b7fffffffffffffffffffffffffffffffffffffffff00000000000000000000000016600183015260158201527f96e8ac4277198ff8b6f785478aa9a39f403cb768dd02cbee326c3e7da348845f603582015260550190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291905280516020909101209695505050505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610a4f576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008281526001602090815260409182902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff85169081179091558251858152918201527fd1b36d30f6248e97c473b4d1348ca164a4ef6759022f54a58ec200326c39c45d91016106c2565b6000808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603610b3b576040517fcb1e7cfe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1610610b75578284610b78565b83835b909250905073ffffffffffffffffffffffffffffffffffffffff8216610bca576040517f78b507da00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b9250929050565b600060208284031215610be357600080fd5b5035919050565b803573ffffffffffffffffffffffffffffffffffffffff81168114610c0e57600080fd5b919050565b600060208284031215610c2557600080fd5b610c2e82610bea565b9392505050565b60008060408385031215610c4857600080fd5b82359150610c5860208401610bea565b90509250929050565b60008060408385031215610c7457600080fd5b50508035926020909101359150565b60008060008060008060a08789031215610c9c57600080fd5b863567ffffffffffffffff811115610cb357600080fd5b87016060818a031215610cc557600080fd5b9550610cd360208801610bea565b945060408701359350610ce860608801610bea565b9250608087013567ffffffffffffffff811115610d0457600080fd5b8701601f81018913610d1557600080fd5b803567ffffffffffffffff811115610d2c57600080fd5b896020828401011115610d3e57600080fd5b60208201935080925050509295509295509295565b600080600060608486031215610d6857600080fd5b610d7184610bea565b9250610d7f60208501610bea565b9150610d8d60408501610bea565b90509250925092565b600060208284031215610da857600080fd5b81518015158114610c2e57600080fd5b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b60808152600086357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1883603018112610e3957600080fd5b870160208101903567ffffffffffffffff811115610e5657600080fd5b803603821315610e6557600080fd5b60606080850152610e7a60e085018284610db8565b91505073ffffffffffffffffffffffffffffffffffffffff610e9e60208a01610bea565b1660a0840152604088013560c084015273ffffffffffffffffffffffffffffffffffffffff871660208401528560408401528281036060840152610ee3818587610db8565b9897505050505050505056fea2646970667358221220431a07541a491b54259bdf8fcd05ade6751bfbbf0e72e605f27325b56d7d464f64736f6c634300081a003360e060405234801561001057600080fd5b50604051611bb9380380611bb983398101604081905261002f9161020e565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461006357604051632b2add3d60e01b815260040160405180910390fd5b6001600160a01b038216158061008057506001600160a01b038116155b1561009e5760405163d92e233d60e01b815260040160405180910390fd5b60066100aa8982610360565b5060076100b78882610360565b5060ff861660c05260808590528360028111156100d6576100d661041e565b60a08160028111156100ea576100ea61041e565b905250600192909255600080546001600160a01b039283166001600160a01b03199182161790915560088054929093169116179055506104349350505050565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261015157600080fd5b81516001600160401b0381111561016a5761016a61012a565b604051601f8201601f19908116603f011681016001600160401b03811182821017156101985761019861012a565b6040528181528382016020018510156101b057600080fd5b60005b828110156101cf576020818601810151838301820152016101b3565b506000918101602001919091529392505050565b8051600381106101f257600080fd5b919050565b80516001600160a01b03811681146101f257600080fd5b600080600080600080600080610100898b03121561022b57600080fd5b88516001600160401b0381111561024157600080fd5b61024d8b828c01610140565b60208b015190995090506001600160401b0381111561026b57600080fd5b6102778b828c01610140565b975050604089015160ff8116811461028e57600080fd5b60608a015190965094506102a460808a016101e3565b60a08a015190945092506102ba60c08a016101f7565b91506102c860e08a016101f7565b90509295985092959890939650565b600181811c908216806102eb57607f821691505b60208210810361030b57634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111561035b57806000526020600020601f840160051c810160208510156103385750805b601f840160051c820191505b818110156103585760008155600101610344565b50505b505050565b81516001600160401b038111156103795761037961012a565b61038d8161038784546102d7565b84610311565b6020601f8211600181146103c157600083156103a95750848201515b600019600385901b1c1916600184901b178455610358565b600084815260208120601f198516915b828110156103f157878501518255602094850194600190920191016103d1565b508482101561040f5786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b634e487b7160e01b600052602160045260246000fd5b60805160a05160c05161174861047160003960006102170152600061033a0152600081816102eb01528181610ad70152610bdd01526117486000f3fe608060405234801561001057600080fd5b50600436106101985760003560e01c80638b851b95116100e3578063ccc775991161008c578063eddeb12311610066578063eddeb12314610431578063f2441b3214610444578063f687d12a1461046457600080fd5b8063ccc77599146103a4578063d9eeebed146103b7578063dd62ed3e146103eb57600080fd5b8063a9059cbb116100bd578063a9059cbb14610369578063c70126261461037c578063c835d7cc1461038f57600080fd5b80638b851b951461030d57806395d89b411461032d578063a3413d031461033557600080fd5b80633ce4a5bc116101455780634d8943bb1161011f5780634d8943bb146102a757806370a08231146102b057806385e1f4d0146102e657600080fd5b80633ce4a5bc1461024157806342966c681461028157806347e7ef241461029457600080fd5b806318160ddd1161017657806318160ddd146101f557806323b872dd146101fd578063313ce5671461021057600080fd5b806306fdde031461019d578063091d2788146101bb578063095ea7b3146101d2575b600080fd5b6101a5610477565b6040516101b29190611327565b60405180910390f35b6101c460015481565b6040519081526020016101b2565b6101e56101e0366004611366565b610509565b60405190151581526020016101b2565b6005546101c4565b6101e561020b366004611392565b610520565b60405160ff7f00000000000000000000000000000000000000000000000000000000000000001681526020016101b2565b61025c73735b14bb79463307aacbed86daf3322b1e6226ab81565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101b2565b6101e561028f3660046113d3565b6105b7565b6101e56102a2366004611366565b6105cb565b6101c460025481565b6101c46102be3660046113ec565b73ffffffffffffffffffffffffffffffffffffffff1660009081526003602052604090205490565b6101c47f000000000000000000000000000000000000000000000000000000000000000081565b60085461025c9073ffffffffffffffffffffffffffffffffffffffff1681565b6101a561071f565b61035c7f000000000000000000000000000000000000000000000000000000000000000081565b6040516101b29190611409565b6101e5610377366004611366565b61072e565b6101e561038a366004611479565b61073b565b6103a261039d3660046113ec565b61088a565b005b6103a26103b23660046113ec565b61099e565b6103bf610aab565b6040805173ffffffffffffffffffffffffffffffffffffffff90931683526020830191909152016101b2565b6101c46103f9366004611571565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260046020908152604080832093909416825291909152205490565b6103a261043f3660046113d3565b610cc9565b60005461025c9073ffffffffffffffffffffffffffffffffffffffff1681565b6103a26104723660046113d3565b610d4b565b606060068054610486906115aa565b80601f01602080910402602001604051908101604052809291908181526020018280546104b2906115aa565b80156104ff5780601f106104d4576101008083540402835291602001916104ff565b820191906000526020600020905b8154815290600101906020018083116104e257829003601f168201915b5050505050905090565b6000610516338484610dcd565b5060015b92915050565b600061052d848484610ed6565b73ffffffffffffffffffffffffffffffffffffffff8416600090815260046020908152604080832033845290915290205482811015610598576040517f10bad14700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6105ac85336105a7868561162c565b610dcd565b506001949350505050565b60006105c33383611091565b506001919050565b60003373735b14bb79463307aacbed86daf3322b1e6226ab14801590610609575060005473ffffffffffffffffffffffffffffffffffffffff163314155b801561062d575060085473ffffffffffffffffffffffffffffffffffffffff163314155b15610664576040517fddb5de5e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61066e83836111d3565b6040517f735b14bb79463307aacbed86daf3322b1e6226ab000000000000000000000000602082015273ffffffffffffffffffffffffffffffffffffffff8416907f67fc7bdaed5b0ec550d8706b87d60568ab70c6b781263c70101d54cd1564aab390603401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529082905261070e91869061163f565b60405180910390a250600192915050565b606060078054610486906115aa565b6000610516338484610ed6565b6000806000610748610aab565b6040517f23b872dd00000000000000000000000000000000000000000000000000000000815233600482015273735b14bb79463307aacbed86daf3322b1e6226ab602482015260448101829052919350915073ffffffffffffffffffffffffffffffffffffffff8316906323b872dd906064016020604051808303816000875af11580156107da573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107fe9190611661565b610834576040517f0a7cd6d600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61083e3385611091565b60025460405133917f9ffbffc04a397460ee1dbe8c9503e098090567d6b7f4b3c02a8617d800b6d9559161087791899189918791611683565b60405180910390a2506001949350505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab146108d7576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116610924576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527fd55614e962c5fd6ece71614f6348d702468a997a394dd5e5c1677950226d97ae906020015b60405180910390a150565b3373735b14bb79463307aacbed86daf3322b1e6226ab146109eb576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116610a38576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600880547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527f88815d964e380677e86d817e7d65dea59cb7b4c3b5b7a0c8ec7ea4a74f90a38790602001610993565b600080546040517f0be155470000000000000000000000000000000000000000000000000000000081527f000000000000000000000000000000000000000000000000000000000000000060048201528291829173ffffffffffffffffffffffffffffffffffffffff90911690630be1554790602401602060405180830381865afa158015610b3e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b6291906116b2565b905073ffffffffffffffffffffffffffffffffffffffff8116610bb1576040517f78fff39600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080546040517fd7fd7afb0000000000000000000000000000000000000000000000000000000081527f0000000000000000000000000000000000000000000000000000000000000000600482015273ffffffffffffffffffffffffffffffffffffffff9091169063d7fd7afb90602401602060405180830381865afa158015610c40573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c6491906116cf565b905080600003610ca0576040517fe661aed000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060025460015483610cb391906116e8565b610cbd91906116ff565b92959294509192505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610d16576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60028190556040518181527fef13af88e424b5d15f49c77758542c1938b08b8b95b91ed0751f98ba99000d8f90602001610993565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610d98576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018190556040518181527fff5788270f43bfc1ca41c503606d2594aa3023a1a7547de403a3e2f146a4a80a90602001610993565b73ffffffffffffffffffffffffffffffffffffffff8316610e1a576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216610e67576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff83811660008181526004602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8316610f23576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216610f70576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff831660009081526003602052604090205481811015610fd0576040517ffe382aa700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610fda828261162c565b73ffffffffffffffffffffffffffffffffffffffff808616600090815260036020526040808220939093559085168152908120805484929061101d9084906116ff565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161108391815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff82166110de576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff82166000908152600360205260409020548181101561113e576040517ffe382aa700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611148828261162c565b73ffffffffffffffffffffffffffffffffffffffff84166000908152600360205260408120919091556005805484929061118390849061162c565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90602001610ec9565b73ffffffffffffffffffffffffffffffffffffffff8216611220576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b806005600082825461123291906116ff565b909155505073ffffffffffffffffffffffffffffffffffffffff82166000908152600360205260408120805483929061126c9084906116ff565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6000815180845260005b818110156112e9576020818501810151868301820152016112cd565b5060006020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b60208152600061133a60208301846112c3565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff8116811461136357600080fd5b50565b6000806040838503121561137957600080fd5b823561138481611341565b946020939093013593505050565b6000806000606084860312156113a757600080fd5b83356113b281611341565b925060208401356113c281611341565b929592945050506040919091013590565b6000602082840312156113e557600080fd5b5035919050565b6000602082840312156113fe57600080fd5b813561133a81611341565b6020810160038310611444577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000806040838503121561148c57600080fd5b823567ffffffffffffffff8111156114a357600080fd5b8301601f810185136114b457600080fd5b803567ffffffffffffffff8111156114ce576114ce61144a565b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8501160116810181811067ffffffffffffffff8211171561153a5761153a61144a565b60405281815282820160200187101561155257600080fd5b8160208401602083013760006020928201830152969401359450505050565b6000806040838503121561158457600080fd5b823561158f81611341565b9150602083013561159f81611341565b809150509250929050565b600181811c908216806115be57607f821691505b6020821081036115f7577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8181038181111561051a5761051a6115fd565b60408152600061165260408301856112c3565b90508260208301529392505050565b60006020828403121561167357600080fd5b8151801515811461133a57600080fd5b60808152600061169660808301876112c3565b6020830195909552506040810192909252606090910152919050565b6000602082840312156116c457600080fd5b815161133a81611341565b6000602082840312156116e157600080fd5b5051919050565b808202811582820484141761051a5761051a6115fd565b8082018082111561051a5761051a6115fd56fea26469706673582212204013e39523742118b3f2227e145ee7e48176ba6aebead33c596dca2acb59a74c64736f6c634300081a0033a2646970667358221220d8446b0a335ac34a74df999c6bbd30e7ea914a28392418f32d5e2a8c0b9d853164736f6c634300081a0033", } // ZRC20TestABI is the input ABI used to generate the binding from. diff --git a/v2/src/evm/GatewayEVM.sol b/v2/src/evm/GatewayEVM.sol index 39fbb801..3daf28fb 100644 --- a/v2/src/evm/GatewayEVM.sol +++ b/v2/src/evm/GatewayEVM.sol @@ -2,8 +2,9 @@ pragma solidity 0.8.26; import "./ZetaConnectorBase.sol"; -import "./interfaces/IGatewayEVM.sol"; + import "./interfaces/IERC20Custody.sol"; +import "./interfaces/IGatewayEVM.sol"; import "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol"; import "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol"; diff --git a/v2/src/evm/interfaces/IERC20Custody.sol b/v2/src/evm/interfaces/IERC20Custody.sol index 840132e5..a0950839 100644 --- a/v2/src/evm/interfaces/IERC20Custody.sol +++ b/v2/src/evm/interfaces/IERC20Custody.sol @@ -51,11 +51,7 @@ interface IERC20Custody is IERC20CustodyEvents, IERC20CustodyErrors { /// @param token Address of the ERC20 token. /// @param to Destination address for the tokens. /// @param amount Amount of tokens to withdraw. - function withdraw( - address token, - address to, - uint256 amount - ) external; + function withdraw(address token, address to, uint256 amount) external; /// @notice WithdrawAndCall transfers tokens to Gateway and call a contract through the Gateway. /// @dev This function can only be called by the TSS address. @@ -63,12 +59,7 @@ interface IERC20Custody is IERC20CustodyEvents, IERC20CustodyErrors { /// @param to Address of the contract to call. /// @param amount Amount of tokens to withdraw. /// @param data Calldata to pass to the contract call. - function withdrawAndCall( - address token, - address to, - uint256 amount, - bytes calldata data - ) external; + function withdrawAndCall(address token, address to, uint256 amount, bytes calldata data) external; /// @notice WithdrawAndRevert transfers tokens to Gateway and call a contract with a revert functionality through /// the Gateway. @@ -77,10 +68,5 @@ interface IERC20Custody is IERC20CustodyEvents, IERC20CustodyErrors { /// @param to Address of the contract to call. /// @param amount Amount of tokens to withdraw. /// @param data Calldata to pass to the contract call. - function withdrawAndRevert( - address token, - address to, - uint256 amount, - bytes calldata data - ) external; -} \ No newline at end of file + function withdrawAndRevert(address token, address to, uint256 amount, bytes calldata data) external; +} diff --git a/v2/src/zevm/interfaces/IGatewayZEVM.sol b/v2/src/zevm/interfaces/IGatewayZEVM.sol index 3798e7af..4f9eaddf 100644 --- a/v2/src/zevm/interfaces/IGatewayZEVM.sol +++ b/v2/src/zevm/interfaces/IGatewayZEVM.sol @@ -182,4 +182,4 @@ interface IGatewayZEVM is IGatewayZEVMErrors, IGatewayZEVMEvents { bytes calldata message ) external; -} \ No newline at end of file +} diff --git a/v2/test/ERC20Custody.t.sol b/v2/test/ERC20Custody.t.sol index 306354f1..a3b7b003 100644 --- a/v2/test/ERC20Custody.t.sol +++ b/v2/test/ERC20Custody.t.sol @@ -77,13 +77,17 @@ contract ERC20CustodyTest is Test, IGatewayEVMErrors, IGatewayEVMEvents, IReceiv function testWhitelistFailsIfSenderIsNotWhitelister() public { vm.prank(address(0x123)); - vm.expectRevert(abi.encodeWithSelector(AccessControlUnauthorizedAccount.selector, address(0x123), WHITELISTER_ROLE)); + vm.expectRevert( + abi.encodeWithSelector(AccessControlUnauthorizedAccount.selector, address(0x123), WHITELISTER_ROLE) + ); custody.whitelist(address(zeta)); } function testUnwhitelistFailsIfSenderIsNotWhitelister() public { vm.prank(address(0x123)); - vm.expectRevert(abi.encodeWithSelector(AccessControlUnauthorizedAccount.selector, address(0x123), WHITELISTER_ROLE)); + vm.expectRevert( + abi.encodeWithSelector(AccessControlUnauthorizedAccount.selector, address(0x123), WHITELISTER_ROLE) + ); custody.unwhitelist(address(zeta)); } @@ -348,7 +352,7 @@ contract ERC20CustodyTest is Test, IGatewayEVMErrors, IGatewayEVMEvents, IReceiv vm.stopPrank(); } - function testWithdrawAndRevertFailsIfTokenIsNotWhitelisted() public { + function testWithdrawAndRevertFailsIfTokenIsNotWhitelisted() public { bytes memory data = abi.encodeWithSignature("receiveERC20(uint256,address,address)", 1, address(token), destination); vm.startPrank(tssAddress); diff --git a/v2/typechain-types/ERC20Custody.ts b/v2/typechain-types/ERC20Custody.ts index 6f4845ed..7d9f21a0 100644 --- a/v2/typechain-types/ERC20Custody.ts +++ b/v2/typechain-types/ERC20Custody.ts @@ -28,6 +28,7 @@ export interface ERC20CustodyInterface extends Interface { nameOrSignature: | "DEFAULT_ADMIN_ROLE" | "PAUSER_ROLE" + | "WHITELISTER_ROLE" | "WITHDRAWER_ROLE" | "gateway" | "getRoleAdmin" @@ -39,6 +40,9 @@ export interface ERC20CustodyInterface extends Interface { | "revokeRole" | "supportsInterface" | "unpause" + | "unwhitelist" + | "whitelist" + | "whitelisted" | "withdraw" | "withdrawAndCall" | "withdrawAndRevert" @@ -51,6 +55,8 @@ export interface ERC20CustodyInterface extends Interface { | "RoleGranted" | "RoleRevoked" | "Unpaused" + | "Unwhitelisted" + | "Whitelisted" | "Withdraw" | "WithdrawAndCall" | "WithdrawAndRevert" @@ -64,6 +70,10 @@ export interface ERC20CustodyInterface extends Interface { functionFragment: "PAUSER_ROLE", values?: undefined ): string; + encodeFunctionData( + functionFragment: "WHITELISTER_ROLE", + values?: undefined + ): string; encodeFunctionData( functionFragment: "WITHDRAWER_ROLE", values?: undefined @@ -96,6 +106,18 @@ export interface ERC20CustodyInterface extends Interface { values: [BytesLike] ): string; encodeFunctionData(functionFragment: "unpause", values?: undefined): string; + encodeFunctionData( + functionFragment: "unwhitelist", + values: [AddressLike] + ): string; + encodeFunctionData( + functionFragment: "whitelist", + values: [AddressLike] + ): string; + encodeFunctionData( + functionFragment: "whitelisted", + values: [AddressLike] + ): string; encodeFunctionData( functionFragment: "withdraw", values: [AddressLike, AddressLike, BigNumberish] @@ -117,6 +139,10 @@ export interface ERC20CustodyInterface extends Interface { functionFragment: "PAUSER_ROLE", data: BytesLike ): Result; + decodeFunctionResult( + functionFragment: "WHITELISTER_ROLE", + data: BytesLike + ): Result; decodeFunctionResult( functionFragment: "WITHDRAWER_ROLE", data: BytesLike @@ -140,6 +166,15 @@ export interface ERC20CustodyInterface extends Interface { data: BytesLike ): Result; decodeFunctionResult(functionFragment: "unpause", data: BytesLike): Result; + decodeFunctionResult( + functionFragment: "unwhitelist", + data: BytesLike + ): Result; + decodeFunctionResult(functionFragment: "whitelist", data: BytesLike): Result; + decodeFunctionResult( + functionFragment: "whitelisted", + data: BytesLike + ): Result; decodeFunctionResult(functionFragment: "withdraw", data: BytesLike): Result; decodeFunctionResult( functionFragment: "withdrawAndCall", @@ -233,6 +268,30 @@ export namespace UnpausedEvent { export type LogDescription = TypedLogDescription; } +export namespace UnwhitelistedEvent { + export type InputTuple = [token: AddressLike]; + export type OutputTuple = [token: string]; + export interface OutputObject { + token: string; + } + export type Event = TypedContractEvent; + export type Filter = TypedDeferredTopicFilter; + export type Log = TypedEventLog; + export type LogDescription = TypedLogDescription; +} + +export namespace WhitelistedEvent { + export type InputTuple = [token: AddressLike]; + export type OutputTuple = [token: string]; + export interface OutputObject { + token: string; + } + export type Event = TypedContractEvent; + export type Filter = TypedDeferredTopicFilter; + export type Log = TypedEventLog; + export type LogDescription = TypedLogDescription; +} + export namespace WithdrawEvent { export type InputTuple = [ token: AddressLike, @@ -348,6 +407,8 @@ export interface ERC20Custody extends BaseContract { PAUSER_ROLE: TypedContractMethod<[], [string], "view">; + WHITELISTER_ROLE: TypedContractMethod<[], [string], "view">; + WITHDRAWER_ROLE: TypedContractMethod<[], [string], "view">; gateway: TypedContractMethod<[], [string], "view">; @@ -390,6 +451,12 @@ export interface ERC20Custody extends BaseContract { unpause: TypedContractMethod<[], [void], "nonpayable">; + unwhitelist: TypedContractMethod<[token: AddressLike], [void], "nonpayable">; + + whitelist: TypedContractMethod<[token: AddressLike], [void], "nonpayable">; + + whitelisted: TypedContractMethod<[arg0: AddressLike], [boolean], "view">; + withdraw: TypedContractMethod< [token: AddressLike, to: AddressLike, amount: BigNumberish], [void], @@ -428,6 +495,9 @@ export interface ERC20Custody extends BaseContract { getFunction( nameOrSignature: "PAUSER_ROLE" ): TypedContractMethod<[], [string], "view">; + getFunction( + nameOrSignature: "WHITELISTER_ROLE" + ): TypedContractMethod<[], [string], "view">; getFunction( nameOrSignature: "WITHDRAWER_ROLE" ): TypedContractMethod<[], [string], "view">; @@ -477,6 +547,15 @@ export interface ERC20Custody extends BaseContract { getFunction( nameOrSignature: "unpause" ): TypedContractMethod<[], [void], "nonpayable">; + getFunction( + nameOrSignature: "unwhitelist" + ): TypedContractMethod<[token: AddressLike], [void], "nonpayable">; + getFunction( + nameOrSignature: "whitelist" + ): TypedContractMethod<[token: AddressLike], [void], "nonpayable">; + getFunction( + nameOrSignature: "whitelisted" + ): TypedContractMethod<[arg0: AddressLike], [boolean], "view">; getFunction( nameOrSignature: "withdraw" ): TypedContractMethod< @@ -544,6 +623,20 @@ export interface ERC20Custody extends BaseContract { UnpausedEvent.OutputTuple, UnpausedEvent.OutputObject >; + getEvent( + key: "Unwhitelisted" + ): TypedContractEvent< + UnwhitelistedEvent.InputTuple, + UnwhitelistedEvent.OutputTuple, + UnwhitelistedEvent.OutputObject + >; + getEvent( + key: "Whitelisted" + ): TypedContractEvent< + WhitelistedEvent.InputTuple, + WhitelistedEvent.OutputTuple, + WhitelistedEvent.OutputObject + >; getEvent( key: "Withdraw" ): TypedContractEvent< @@ -622,6 +715,28 @@ export interface ERC20Custody extends BaseContract { UnpausedEvent.OutputObject >; + "Unwhitelisted(address)": TypedContractEvent< + UnwhitelistedEvent.InputTuple, + UnwhitelistedEvent.OutputTuple, + UnwhitelistedEvent.OutputObject + >; + Unwhitelisted: TypedContractEvent< + UnwhitelistedEvent.InputTuple, + UnwhitelistedEvent.OutputTuple, + UnwhitelistedEvent.OutputObject + >; + + "Whitelisted(address)": TypedContractEvent< + WhitelistedEvent.InputTuple, + WhitelistedEvent.OutputTuple, + WhitelistedEvent.OutputObject + >; + Whitelisted: TypedContractEvent< + WhitelistedEvent.InputTuple, + WhitelistedEvent.OutputTuple, + WhitelistedEvent.OutputObject + >; + "Withdraw(address,address,uint256)": TypedContractEvent< WithdrawEvent.InputTuple, WithdrawEvent.OutputTuple, diff --git a/v2/typechain-types/ERC20CustodyEchidnaTest.ts b/v2/typechain-types/ERC20CustodyEchidnaTest.ts index a0bd66ef..b937b8a0 100644 --- a/v2/typechain-types/ERC20CustodyEchidnaTest.ts +++ b/v2/typechain-types/ERC20CustodyEchidnaTest.ts @@ -28,6 +28,7 @@ export interface ERC20CustodyEchidnaTestInterface extends Interface { nameOrSignature: | "DEFAULT_ADMIN_ROLE" | "PAUSER_ROLE" + | "WHITELISTER_ROLE" | "WITHDRAWER_ROLE" | "echidnaCaller" | "gateway" @@ -42,6 +43,9 @@ export interface ERC20CustodyEchidnaTestInterface extends Interface { | "testERC20" | "testWithdrawAndCall" | "unpause" + | "unwhitelist" + | "whitelist" + | "whitelisted" | "withdraw" | "withdrawAndCall" | "withdrawAndRevert" @@ -54,6 +58,8 @@ export interface ERC20CustodyEchidnaTestInterface extends Interface { | "RoleGranted" | "RoleRevoked" | "Unpaused" + | "Unwhitelisted" + | "Whitelisted" | "Withdraw" | "WithdrawAndCall" | "WithdrawAndRevert" @@ -67,6 +73,10 @@ export interface ERC20CustodyEchidnaTestInterface extends Interface { functionFragment: "PAUSER_ROLE", values?: undefined ): string; + encodeFunctionData( + functionFragment: "WHITELISTER_ROLE", + values?: undefined + ): string; encodeFunctionData( functionFragment: "WITHDRAWER_ROLE", values?: undefined @@ -108,6 +118,18 @@ export interface ERC20CustodyEchidnaTestInterface extends Interface { values: [AddressLike, BigNumberish, BytesLike] ): string; encodeFunctionData(functionFragment: "unpause", values?: undefined): string; + encodeFunctionData( + functionFragment: "unwhitelist", + values: [AddressLike] + ): string; + encodeFunctionData( + functionFragment: "whitelist", + values: [AddressLike] + ): string; + encodeFunctionData( + functionFragment: "whitelisted", + values: [AddressLike] + ): string; encodeFunctionData( functionFragment: "withdraw", values: [AddressLike, AddressLike, BigNumberish] @@ -129,6 +151,10 @@ export interface ERC20CustodyEchidnaTestInterface extends Interface { functionFragment: "PAUSER_ROLE", data: BytesLike ): Result; + decodeFunctionResult( + functionFragment: "WHITELISTER_ROLE", + data: BytesLike + ): Result; decodeFunctionResult( functionFragment: "WITHDRAWER_ROLE", data: BytesLike @@ -161,6 +187,15 @@ export interface ERC20CustodyEchidnaTestInterface extends Interface { data: BytesLike ): Result; decodeFunctionResult(functionFragment: "unpause", data: BytesLike): Result; + decodeFunctionResult( + functionFragment: "unwhitelist", + data: BytesLike + ): Result; + decodeFunctionResult(functionFragment: "whitelist", data: BytesLike): Result; + decodeFunctionResult( + functionFragment: "whitelisted", + data: BytesLike + ): Result; decodeFunctionResult(functionFragment: "withdraw", data: BytesLike): Result; decodeFunctionResult( functionFragment: "withdrawAndCall", @@ -254,6 +289,30 @@ export namespace UnpausedEvent { export type LogDescription = TypedLogDescription; } +export namespace UnwhitelistedEvent { + export type InputTuple = [token: AddressLike]; + export type OutputTuple = [token: string]; + export interface OutputObject { + token: string; + } + export type Event = TypedContractEvent; + export type Filter = TypedDeferredTopicFilter; + export type Log = TypedEventLog; + export type LogDescription = TypedLogDescription; +} + +export namespace WhitelistedEvent { + export type InputTuple = [token: AddressLike]; + export type OutputTuple = [token: string]; + export interface OutputObject { + token: string; + } + export type Event = TypedContractEvent; + export type Filter = TypedDeferredTopicFilter; + export type Log = TypedEventLog; + export type LogDescription = TypedLogDescription; +} + export namespace WithdrawEvent { export type InputTuple = [ token: AddressLike, @@ -369,6 +428,8 @@ export interface ERC20CustodyEchidnaTest extends BaseContract { PAUSER_ROLE: TypedContractMethod<[], [string], "view">; + WHITELISTER_ROLE: TypedContractMethod<[], [string], "view">; + WITHDRAWER_ROLE: TypedContractMethod<[], [string], "view">; echidnaCaller: TypedContractMethod<[], [string], "view">; @@ -421,6 +482,12 @@ export interface ERC20CustodyEchidnaTest extends BaseContract { unpause: TypedContractMethod<[], [void], "nonpayable">; + unwhitelist: TypedContractMethod<[token: AddressLike], [void], "nonpayable">; + + whitelist: TypedContractMethod<[token: AddressLike], [void], "nonpayable">; + + whitelisted: TypedContractMethod<[arg0: AddressLike], [boolean], "view">; + withdraw: TypedContractMethod< [token: AddressLike, to: AddressLike, amount: BigNumberish], [void], @@ -459,6 +526,9 @@ export interface ERC20CustodyEchidnaTest extends BaseContract { getFunction( nameOrSignature: "PAUSER_ROLE" ): TypedContractMethod<[], [string], "view">; + getFunction( + nameOrSignature: "WHITELISTER_ROLE" + ): TypedContractMethod<[], [string], "view">; getFunction( nameOrSignature: "WITHDRAWER_ROLE" ): TypedContractMethod<[], [string], "view">; @@ -521,6 +591,15 @@ export interface ERC20CustodyEchidnaTest extends BaseContract { getFunction( nameOrSignature: "unpause" ): TypedContractMethod<[], [void], "nonpayable">; + getFunction( + nameOrSignature: "unwhitelist" + ): TypedContractMethod<[token: AddressLike], [void], "nonpayable">; + getFunction( + nameOrSignature: "whitelist" + ): TypedContractMethod<[token: AddressLike], [void], "nonpayable">; + getFunction( + nameOrSignature: "whitelisted" + ): TypedContractMethod<[arg0: AddressLike], [boolean], "view">; getFunction( nameOrSignature: "withdraw" ): TypedContractMethod< @@ -588,6 +667,20 @@ export interface ERC20CustodyEchidnaTest extends BaseContract { UnpausedEvent.OutputTuple, UnpausedEvent.OutputObject >; + getEvent( + key: "Unwhitelisted" + ): TypedContractEvent< + UnwhitelistedEvent.InputTuple, + UnwhitelistedEvent.OutputTuple, + UnwhitelistedEvent.OutputObject + >; + getEvent( + key: "Whitelisted" + ): TypedContractEvent< + WhitelistedEvent.InputTuple, + WhitelistedEvent.OutputTuple, + WhitelistedEvent.OutputObject + >; getEvent( key: "Withdraw" ): TypedContractEvent< @@ -666,6 +759,28 @@ export interface ERC20CustodyEchidnaTest extends BaseContract { UnpausedEvent.OutputObject >; + "Unwhitelisted(address)": TypedContractEvent< + UnwhitelistedEvent.InputTuple, + UnwhitelistedEvent.OutputTuple, + UnwhitelistedEvent.OutputObject + >; + Unwhitelisted: TypedContractEvent< + UnwhitelistedEvent.InputTuple, + UnwhitelistedEvent.OutputTuple, + UnwhitelistedEvent.OutputObject + >; + + "Whitelisted(address)": TypedContractEvent< + WhitelistedEvent.InputTuple, + WhitelistedEvent.OutputTuple, + WhitelistedEvent.OutputObject + >; + Whitelisted: TypedContractEvent< + WhitelistedEvent.InputTuple, + WhitelistedEvent.OutputTuple, + WhitelistedEvent.OutputObject + >; + "Withdraw(address,address,uint256)": TypedContractEvent< WithdrawEvent.InputTuple, WithdrawEvent.OutputTuple, diff --git a/v2/typechain-types/IERC20Custody.sol/IERC20Custody.ts b/v2/typechain-types/IERC20Custody.sol/IERC20Custody.ts new file mode 100644 index 00000000..ead49b25 --- /dev/null +++ b/v2/typechain-types/IERC20Custody.sol/IERC20Custody.ts @@ -0,0 +1,372 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ +import type { + BaseContract, + BigNumberish, + BytesLike, + FunctionFragment, + Result, + Interface, + EventFragment, + AddressLike, + ContractRunner, + ContractMethod, + Listener, +} from "ethers"; +import type { + TypedContractEvent, + TypedDeferredTopicFilter, + TypedEventLog, + TypedLogDescription, + TypedListener, + TypedContractMethod, +} from "../common"; + +export interface IERC20CustodyInterface extends Interface { + getFunction( + nameOrSignature: + | "whitelisted" + | "withdraw" + | "withdrawAndCall" + | "withdrawAndRevert" + ): FunctionFragment; + + getEvent( + nameOrSignatureOrTopic: + | "Unwhitelisted" + | "Whitelisted" + | "Withdraw" + | "WithdrawAndCall" + | "WithdrawAndRevert" + ): EventFragment; + + encodeFunctionData( + functionFragment: "whitelisted", + values: [AddressLike] + ): string; + encodeFunctionData( + functionFragment: "withdraw", + values: [AddressLike, AddressLike, BigNumberish] + ): string; + encodeFunctionData( + functionFragment: "withdrawAndCall", + values: [AddressLike, AddressLike, BigNumberish, BytesLike] + ): string; + encodeFunctionData( + functionFragment: "withdrawAndRevert", + values: [AddressLike, AddressLike, BigNumberish, BytesLike] + ): string; + + decodeFunctionResult( + functionFragment: "whitelisted", + data: BytesLike + ): Result; + decodeFunctionResult(functionFragment: "withdraw", data: BytesLike): Result; + decodeFunctionResult( + functionFragment: "withdrawAndCall", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "withdrawAndRevert", + data: BytesLike + ): Result; +} + +export namespace UnwhitelistedEvent { + export type InputTuple = [token: AddressLike]; + export type OutputTuple = [token: string]; + export interface OutputObject { + token: string; + } + export type Event = TypedContractEvent; + export type Filter = TypedDeferredTopicFilter; + export type Log = TypedEventLog; + export type LogDescription = TypedLogDescription; +} + +export namespace WhitelistedEvent { + export type InputTuple = [token: AddressLike]; + export type OutputTuple = [token: string]; + export interface OutputObject { + token: string; + } + export type Event = TypedContractEvent; + export type Filter = TypedDeferredTopicFilter; + export type Log = TypedEventLog; + export type LogDescription = TypedLogDescription; +} + +export namespace WithdrawEvent { + export type InputTuple = [ + token: AddressLike, + to: AddressLike, + amount: BigNumberish + ]; + export type OutputTuple = [token: string, to: string, amount: bigint]; + export interface OutputObject { + token: string; + to: string; + amount: bigint; + } + export type Event = TypedContractEvent; + export type Filter = TypedDeferredTopicFilter; + export type Log = TypedEventLog; + export type LogDescription = TypedLogDescription; +} + +export namespace WithdrawAndCallEvent { + export type InputTuple = [ + token: AddressLike, + to: AddressLike, + amount: BigNumberish, + data: BytesLike + ]; + export type OutputTuple = [ + token: string, + to: string, + amount: bigint, + data: string + ]; + export interface OutputObject { + token: string; + to: string; + amount: bigint; + data: string; + } + export type Event = TypedContractEvent; + export type Filter = TypedDeferredTopicFilter; + export type Log = TypedEventLog; + export type LogDescription = TypedLogDescription; +} + +export namespace WithdrawAndRevertEvent { + export type InputTuple = [ + token: AddressLike, + to: AddressLike, + amount: BigNumberish, + data: BytesLike + ]; + export type OutputTuple = [ + token: string, + to: string, + amount: bigint, + data: string + ]; + export interface OutputObject { + token: string; + to: string; + amount: bigint; + data: string; + } + export type Event = TypedContractEvent; + export type Filter = TypedDeferredTopicFilter; + export type Log = TypedEventLog; + export type LogDescription = TypedLogDescription; +} + +export interface IERC20Custody extends BaseContract { + connect(runner?: ContractRunner | null): IERC20Custody; + waitForDeployment(): Promise; + + interface: IERC20CustodyInterface; + + queryFilter( + event: TCEvent, + fromBlockOrBlockhash?: string | number | undefined, + toBlock?: string | number | undefined + ): Promise>>; + queryFilter( + filter: TypedDeferredTopicFilter, + fromBlockOrBlockhash?: string | number | undefined, + toBlock?: string | number | undefined + ): Promise>>; + + on( + event: TCEvent, + listener: TypedListener + ): Promise; + on( + filter: TypedDeferredTopicFilter, + listener: TypedListener + ): Promise; + + once( + event: TCEvent, + listener: TypedListener + ): Promise; + once( + filter: TypedDeferredTopicFilter, + listener: TypedListener + ): Promise; + + listeners( + event: TCEvent + ): Promise>>; + listeners(eventName?: string): Promise>; + removeAllListeners( + event?: TCEvent + ): Promise; + + whitelisted: TypedContractMethod<[token: AddressLike], [boolean], "view">; + + withdraw: TypedContractMethod< + [token: AddressLike, to: AddressLike, amount: BigNumberish], + [void], + "nonpayable" + >; + + withdrawAndCall: TypedContractMethod< + [ + token: AddressLike, + to: AddressLike, + amount: BigNumberish, + data: BytesLike + ], + [void], + "nonpayable" + >; + + withdrawAndRevert: TypedContractMethod< + [ + token: AddressLike, + to: AddressLike, + amount: BigNumberish, + data: BytesLike + ], + [void], + "nonpayable" + >; + + getFunction( + key: string | FunctionFragment + ): T; + + getFunction( + nameOrSignature: "whitelisted" + ): TypedContractMethod<[token: AddressLike], [boolean], "view">; + getFunction( + nameOrSignature: "withdraw" + ): TypedContractMethod< + [token: AddressLike, to: AddressLike, amount: BigNumberish], + [void], + "nonpayable" + >; + getFunction( + nameOrSignature: "withdrawAndCall" + ): TypedContractMethod< + [ + token: AddressLike, + to: AddressLike, + amount: BigNumberish, + data: BytesLike + ], + [void], + "nonpayable" + >; + getFunction( + nameOrSignature: "withdrawAndRevert" + ): TypedContractMethod< + [ + token: AddressLike, + to: AddressLike, + amount: BigNumberish, + data: BytesLike + ], + [void], + "nonpayable" + >; + + getEvent( + key: "Unwhitelisted" + ): TypedContractEvent< + UnwhitelistedEvent.InputTuple, + UnwhitelistedEvent.OutputTuple, + UnwhitelistedEvent.OutputObject + >; + getEvent( + key: "Whitelisted" + ): TypedContractEvent< + WhitelistedEvent.InputTuple, + WhitelistedEvent.OutputTuple, + WhitelistedEvent.OutputObject + >; + getEvent( + key: "Withdraw" + ): TypedContractEvent< + WithdrawEvent.InputTuple, + WithdrawEvent.OutputTuple, + WithdrawEvent.OutputObject + >; + getEvent( + key: "WithdrawAndCall" + ): TypedContractEvent< + WithdrawAndCallEvent.InputTuple, + WithdrawAndCallEvent.OutputTuple, + WithdrawAndCallEvent.OutputObject + >; + getEvent( + key: "WithdrawAndRevert" + ): TypedContractEvent< + WithdrawAndRevertEvent.InputTuple, + WithdrawAndRevertEvent.OutputTuple, + WithdrawAndRevertEvent.OutputObject + >; + + filters: { + "Unwhitelisted(address)": TypedContractEvent< + UnwhitelistedEvent.InputTuple, + UnwhitelistedEvent.OutputTuple, + UnwhitelistedEvent.OutputObject + >; + Unwhitelisted: TypedContractEvent< + UnwhitelistedEvent.InputTuple, + UnwhitelistedEvent.OutputTuple, + UnwhitelistedEvent.OutputObject + >; + + "Whitelisted(address)": TypedContractEvent< + WhitelistedEvent.InputTuple, + WhitelistedEvent.OutputTuple, + WhitelistedEvent.OutputObject + >; + Whitelisted: TypedContractEvent< + WhitelistedEvent.InputTuple, + WhitelistedEvent.OutputTuple, + WhitelistedEvent.OutputObject + >; + + "Withdraw(address,address,uint256)": TypedContractEvent< + WithdrawEvent.InputTuple, + WithdrawEvent.OutputTuple, + WithdrawEvent.OutputObject + >; + Withdraw: TypedContractEvent< + WithdrawEvent.InputTuple, + WithdrawEvent.OutputTuple, + WithdrawEvent.OutputObject + >; + + "WithdrawAndCall(address,address,uint256,bytes)": TypedContractEvent< + WithdrawAndCallEvent.InputTuple, + WithdrawAndCallEvent.OutputTuple, + WithdrawAndCallEvent.OutputObject + >; + WithdrawAndCall: TypedContractEvent< + WithdrawAndCallEvent.InputTuple, + WithdrawAndCallEvent.OutputTuple, + WithdrawAndCallEvent.OutputObject + >; + + "WithdrawAndRevert(address,address,uint256,bytes)": TypedContractEvent< + WithdrawAndRevertEvent.InputTuple, + WithdrawAndRevertEvent.OutputTuple, + WithdrawAndRevertEvent.OutputObject + >; + WithdrawAndRevert: TypedContractEvent< + WithdrawAndRevertEvent.InputTuple, + WithdrawAndRevertEvent.OutputTuple, + WithdrawAndRevertEvent.OutputObject + >; + }; +} diff --git a/v2/typechain-types/IERC20Custody.sol/IERC20CustodyEvents.ts b/v2/typechain-types/IERC20Custody.sol/IERC20CustodyEvents.ts index af645748..b0f00107 100644 --- a/v2/typechain-types/IERC20Custody.sol/IERC20CustodyEvents.ts +++ b/v2/typechain-types/IERC20Custody.sol/IERC20CustodyEvents.ts @@ -23,10 +23,39 @@ import type { export interface IERC20CustodyEventsInterface extends Interface { getEvent( - nameOrSignatureOrTopic: "Withdraw" | "WithdrawAndCall" | "WithdrawAndRevert" + nameOrSignatureOrTopic: + | "Unwhitelisted" + | "Whitelisted" + | "Withdraw" + | "WithdrawAndCall" + | "WithdrawAndRevert" ): EventFragment; } +export namespace UnwhitelistedEvent { + export type InputTuple = [token: AddressLike]; + export type OutputTuple = [token: string]; + export interface OutputObject { + token: string; + } + export type Event = TypedContractEvent; + export type Filter = TypedDeferredTopicFilter; + export type Log = TypedEventLog; + export type LogDescription = TypedLogDescription; +} + +export namespace WhitelistedEvent { + export type InputTuple = [token: AddressLike]; + export type OutputTuple = [token: string]; + export interface OutputObject { + token: string; + } + export type Event = TypedContractEvent; + export type Filter = TypedDeferredTopicFilter; + export type Log = TypedEventLog; + export type LogDescription = TypedLogDescription; +} + export namespace WithdrawEvent { export type InputTuple = [ token: AddressLike, @@ -142,6 +171,20 @@ export interface IERC20CustodyEvents extends BaseContract { key: string | FunctionFragment ): T; + getEvent( + key: "Unwhitelisted" + ): TypedContractEvent< + UnwhitelistedEvent.InputTuple, + UnwhitelistedEvent.OutputTuple, + UnwhitelistedEvent.OutputObject + >; + getEvent( + key: "Whitelisted" + ): TypedContractEvent< + WhitelistedEvent.InputTuple, + WhitelistedEvent.OutputTuple, + WhitelistedEvent.OutputObject + >; getEvent( key: "Withdraw" ): TypedContractEvent< @@ -165,6 +208,28 @@ export interface IERC20CustodyEvents extends BaseContract { >; filters: { + "Unwhitelisted(address)": TypedContractEvent< + UnwhitelistedEvent.InputTuple, + UnwhitelistedEvent.OutputTuple, + UnwhitelistedEvent.OutputObject + >; + Unwhitelisted: TypedContractEvent< + UnwhitelistedEvent.InputTuple, + UnwhitelistedEvent.OutputTuple, + UnwhitelistedEvent.OutputObject + >; + + "Whitelisted(address)": TypedContractEvent< + WhitelistedEvent.InputTuple, + WhitelistedEvent.OutputTuple, + WhitelistedEvent.OutputObject + >; + Whitelisted: TypedContractEvent< + WhitelistedEvent.InputTuple, + WhitelistedEvent.OutputTuple, + WhitelistedEvent.OutputObject + >; + "Withdraw(address,address,uint256)": TypedContractEvent< WithdrawEvent.InputTuple, WithdrawEvent.OutputTuple, diff --git a/v2/typechain-types/IERC20Custody.sol/index.ts b/v2/typechain-types/IERC20Custody.sol/index.ts index fa390d55..26e32f74 100644 --- a/v2/typechain-types/IERC20Custody.sol/index.ts +++ b/v2/typechain-types/IERC20Custody.sol/index.ts @@ -1,5 +1,6 @@ /* Autogenerated file. Do not edit manually. */ /* tslint:disable */ /* eslint-disable */ +export type { IERC20Custody } from "./IERC20Custody"; export type { IERC20CustodyErrors } from "./IERC20CustodyErrors"; export type { IERC20CustodyEvents } from "./IERC20CustodyEvents"; diff --git a/v2/typechain-types/IGatewayEVM.sol/IGatewayEVM.ts b/v2/typechain-types/IGatewayEVM.sol/IGatewayEVM.ts index 7aff294c..26f095eb 100644 --- a/v2/typechain-types/IGatewayEVM.sol/IGatewayEVM.ts +++ b/v2/typechain-types/IGatewayEVM.sol/IGatewayEVM.ts @@ -8,6 +8,7 @@ import type { FunctionFragment, Result, Interface, + EventFragment, AddressLike, ContractRunner, ContractMethod, @@ -17,6 +18,7 @@ import type { TypedContractEvent, TypedDeferredTopicFilter, TypedEventLog, + TypedLogDescription, TypedListener, TypedContractMethod, } from "../common"; @@ -35,6 +37,16 @@ export interface IGatewayEVMInterface extends Interface { | "revertWithERC20" ): FunctionFragment; + getEvent( + nameOrSignatureOrTopic: + | "Call" + | "Deposit" + | "Executed" + | "ExecutedWithERC20" + | "Reverted" + | "RevertedWithERC20" + ): EventFragment; + encodeFunctionData( functionFragment: "call", values: [AddressLike, BytesLike] @@ -104,6 +116,138 @@ export interface IGatewayEVMInterface extends Interface { ): Result; } +export namespace CallEvent { + export type InputTuple = [ + sender: AddressLike, + receiver: AddressLike, + payload: BytesLike + ]; + export type OutputTuple = [sender: string, receiver: string, payload: string]; + export interface OutputObject { + sender: string; + receiver: string; + payload: string; + } + export type Event = TypedContractEvent; + export type Filter = TypedDeferredTopicFilter; + export type Log = TypedEventLog; + export type LogDescription = TypedLogDescription; +} + +export namespace DepositEvent { + export type InputTuple = [ + sender: AddressLike, + receiver: AddressLike, + amount: BigNumberish, + asset: AddressLike, + payload: BytesLike + ]; + export type OutputTuple = [ + sender: string, + receiver: string, + amount: bigint, + asset: string, + payload: string + ]; + export interface OutputObject { + sender: string; + receiver: string; + amount: bigint; + asset: string; + payload: string; + } + export type Event = TypedContractEvent; + export type Filter = TypedDeferredTopicFilter; + export type Log = TypedEventLog; + export type LogDescription = TypedLogDescription; +} + +export namespace ExecutedEvent { + export type InputTuple = [ + destination: AddressLike, + value: BigNumberish, + data: BytesLike + ]; + export type OutputTuple = [destination: string, value: bigint, data: string]; + export interface OutputObject { + destination: string; + value: bigint; + data: string; + } + export type Event = TypedContractEvent; + export type Filter = TypedDeferredTopicFilter; + export type Log = TypedEventLog; + export type LogDescription = TypedLogDescription; +} + +export namespace ExecutedWithERC20Event { + export type InputTuple = [ + token: AddressLike, + to: AddressLike, + amount: BigNumberish, + data: BytesLike + ]; + export type OutputTuple = [ + token: string, + to: string, + amount: bigint, + data: string + ]; + export interface OutputObject { + token: string; + to: string; + amount: bigint; + data: string; + } + export type Event = TypedContractEvent; + export type Filter = TypedDeferredTopicFilter; + export type Log = TypedEventLog; + export type LogDescription = TypedLogDescription; +} + +export namespace RevertedEvent { + export type InputTuple = [ + destination: AddressLike, + value: BigNumberish, + data: BytesLike + ]; + export type OutputTuple = [destination: string, value: bigint, data: string]; + export interface OutputObject { + destination: string; + value: bigint; + data: string; + } + export type Event = TypedContractEvent; + export type Filter = TypedDeferredTopicFilter; + export type Log = TypedEventLog; + export type LogDescription = TypedLogDescription; +} + +export namespace RevertedWithERC20Event { + export type InputTuple = [ + token: AddressLike, + to: AddressLike, + amount: BigNumberish, + data: BytesLike + ]; + export type OutputTuple = [ + token: string, + to: string, + amount: bigint, + data: string + ]; + export interface OutputObject { + token: string; + to: string; + amount: bigint; + data: string; + } + export type Event = TypedContractEvent; + export type Filter = TypedDeferredTopicFilter; + export type Log = TypedEventLog; + export type LogDescription = TypedLogDescription; +} + export interface IGatewayEVM extends BaseContract { connect(runner?: ContractRunner | null): IGatewayEVM; waitForDeployment(): Promise; @@ -295,5 +439,114 @@ export interface IGatewayEVM extends BaseContract { "nonpayable" >; - filters: {}; + getEvent( + key: "Call" + ): TypedContractEvent< + CallEvent.InputTuple, + CallEvent.OutputTuple, + CallEvent.OutputObject + >; + getEvent( + key: "Deposit" + ): TypedContractEvent< + DepositEvent.InputTuple, + DepositEvent.OutputTuple, + DepositEvent.OutputObject + >; + getEvent( + key: "Executed" + ): TypedContractEvent< + ExecutedEvent.InputTuple, + ExecutedEvent.OutputTuple, + ExecutedEvent.OutputObject + >; + getEvent( + key: "ExecutedWithERC20" + ): TypedContractEvent< + ExecutedWithERC20Event.InputTuple, + ExecutedWithERC20Event.OutputTuple, + ExecutedWithERC20Event.OutputObject + >; + getEvent( + key: "Reverted" + ): TypedContractEvent< + RevertedEvent.InputTuple, + RevertedEvent.OutputTuple, + RevertedEvent.OutputObject + >; + getEvent( + key: "RevertedWithERC20" + ): TypedContractEvent< + RevertedWithERC20Event.InputTuple, + RevertedWithERC20Event.OutputTuple, + RevertedWithERC20Event.OutputObject + >; + + filters: { + "Call(address,address,bytes)": TypedContractEvent< + CallEvent.InputTuple, + CallEvent.OutputTuple, + CallEvent.OutputObject + >; + Call: TypedContractEvent< + CallEvent.InputTuple, + CallEvent.OutputTuple, + CallEvent.OutputObject + >; + + "Deposit(address,address,uint256,address,bytes)": TypedContractEvent< + DepositEvent.InputTuple, + DepositEvent.OutputTuple, + DepositEvent.OutputObject + >; + Deposit: TypedContractEvent< + DepositEvent.InputTuple, + DepositEvent.OutputTuple, + DepositEvent.OutputObject + >; + + "Executed(address,uint256,bytes)": TypedContractEvent< + ExecutedEvent.InputTuple, + ExecutedEvent.OutputTuple, + ExecutedEvent.OutputObject + >; + Executed: TypedContractEvent< + ExecutedEvent.InputTuple, + ExecutedEvent.OutputTuple, + ExecutedEvent.OutputObject + >; + + "ExecutedWithERC20(address,address,uint256,bytes)": TypedContractEvent< + ExecutedWithERC20Event.InputTuple, + ExecutedWithERC20Event.OutputTuple, + ExecutedWithERC20Event.OutputObject + >; + ExecutedWithERC20: TypedContractEvent< + ExecutedWithERC20Event.InputTuple, + ExecutedWithERC20Event.OutputTuple, + ExecutedWithERC20Event.OutputObject + >; + + "Reverted(address,uint256,bytes)": TypedContractEvent< + RevertedEvent.InputTuple, + RevertedEvent.OutputTuple, + RevertedEvent.OutputObject + >; + Reverted: TypedContractEvent< + RevertedEvent.InputTuple, + RevertedEvent.OutputTuple, + RevertedEvent.OutputObject + >; + + "RevertedWithERC20(address,address,uint256,bytes)": TypedContractEvent< + RevertedWithERC20Event.InputTuple, + RevertedWithERC20Event.OutputTuple, + RevertedWithERC20Event.OutputObject + >; + RevertedWithERC20: TypedContractEvent< + RevertedWithERC20Event.InputTuple, + RevertedWithERC20Event.OutputTuple, + RevertedWithERC20Event.OutputObject + >; + }; } diff --git a/v2/typechain-types/IGatewayZEVM.sol/IGatewayZEVM.ts b/v2/typechain-types/IGatewayZEVM.sol/IGatewayZEVM.ts index 09a96a0e..943b5654 100644 --- a/v2/typechain-types/IGatewayZEVM.sol/IGatewayZEVM.ts +++ b/v2/typechain-types/IGatewayZEVM.sol/IGatewayZEVM.ts @@ -8,6 +8,7 @@ import type { FunctionFragment, Result, Interface, + EventFragment, AddressLike, ContractRunner, ContractMethod, @@ -17,6 +18,7 @@ import type { TypedContractEvent, TypedDeferredTopicFilter, TypedEventLog, + TypedLogDescription, TypedListener, TypedContractMethod, } from "../common"; @@ -61,6 +63,8 @@ export interface IGatewayZEVMInterface extends Interface { | "withdrawAndCall(uint256,uint256,bytes)" ): FunctionFragment; + getEvent(nameOrSignatureOrTopic: "Call" | "Withdrawal"): EventFragment; + encodeFunctionData( functionFragment: "call", values: [BytesLike, BigNumberish, BytesLike] @@ -155,6 +159,68 @@ export interface IGatewayZEVMInterface extends Interface { ): Result; } +export namespace CallEvent { + export type InputTuple = [ + sender: AddressLike, + chainId: BigNumberish, + receiver: BytesLike, + message: BytesLike + ]; + export type OutputTuple = [ + sender: string, + chainId: bigint, + receiver: string, + message: string + ]; + export interface OutputObject { + sender: string; + chainId: bigint; + receiver: string; + message: string; + } + export type Event = TypedContractEvent; + export type Filter = TypedDeferredTopicFilter; + export type Log = TypedEventLog; + export type LogDescription = TypedLogDescription; +} + +export namespace WithdrawalEvent { + export type InputTuple = [ + sender: AddressLike, + chainId: BigNumberish, + receiver: BytesLike, + zrc20: AddressLike, + value: BigNumberish, + gasfee: BigNumberish, + protocolFlatFee: BigNumberish, + message: BytesLike + ]; + export type OutputTuple = [ + sender: string, + chainId: bigint, + receiver: string, + zrc20: string, + value: bigint, + gasfee: bigint, + protocolFlatFee: bigint, + message: string + ]; + export interface OutputObject { + sender: string; + chainId: bigint; + receiver: string; + zrc20: string; + value: bigint; + gasfee: bigint; + protocolFlatFee: bigint; + message: string; + } + export type Event = TypedContractEvent; + export type Filter = TypedDeferredTopicFilter; + export type Log = TypedEventLog; + export type LogDescription = TypedLogDescription; +} + export interface IGatewayZEVM extends BaseContract { connect(runner?: ContractRunner | null): IGatewayZEVM; waitForDeployment(): Promise; @@ -414,5 +480,42 @@ export interface IGatewayZEVM extends BaseContract { "nonpayable" >; - filters: {}; + getEvent( + key: "Call" + ): TypedContractEvent< + CallEvent.InputTuple, + CallEvent.OutputTuple, + CallEvent.OutputObject + >; + getEvent( + key: "Withdrawal" + ): TypedContractEvent< + WithdrawalEvent.InputTuple, + WithdrawalEvent.OutputTuple, + WithdrawalEvent.OutputObject + >; + + filters: { + "Call(address,uint256,bytes,bytes)": TypedContractEvent< + CallEvent.InputTuple, + CallEvent.OutputTuple, + CallEvent.OutputObject + >; + Call: TypedContractEvent< + CallEvent.InputTuple, + CallEvent.OutputTuple, + CallEvent.OutputObject + >; + + "Withdrawal(address,uint256,bytes,address,uint256,uint256,uint256,bytes)": TypedContractEvent< + WithdrawalEvent.InputTuple, + WithdrawalEvent.OutputTuple, + WithdrawalEvent.OutputObject + >; + Withdrawal: TypedContractEvent< + WithdrawalEvent.InputTuple, + WithdrawalEvent.OutputTuple, + WithdrawalEvent.OutputObject + >; + }; } diff --git a/v2/typechain-types/factories/ERC20CustodyEchidnaTest__factory.ts b/v2/typechain-types/factories/ERC20CustodyEchidnaTest__factory.ts index 951818f5..4c15b5d9 100644 --- a/v2/typechain-types/factories/ERC20CustodyEchidnaTest__factory.ts +++ b/v2/typechain-types/factories/ERC20CustodyEchidnaTest__factory.ts @@ -46,6 +46,19 @@ const _abi = [ ], stateMutability: "view", }, + { + type: "function", + name: "WHITELISTER_ROLE", + inputs: [], + outputs: [ + { + name: "", + type: "bytes32", + internalType: "bytes32", + }, + ], + stateMutability: "view", + }, { type: "function", name: "WITHDRAWER_ROLE", @@ -264,6 +277,51 @@ const _abi = [ outputs: [], stateMutability: "nonpayable", }, + { + type: "function", + name: "unwhitelist", + inputs: [ + { + name: "token", + type: "address", + internalType: "address", + }, + ], + outputs: [], + stateMutability: "nonpayable", + }, + { + type: "function", + name: "whitelist", + inputs: [ + { + name: "token", + type: "address", + internalType: "address", + }, + ], + outputs: [], + stateMutability: "nonpayable", + }, + { + type: "function", + name: "whitelisted", + inputs: [ + { + name: "", + type: "address", + internalType: "address", + }, + ], + outputs: [ + { + name: "", + type: "bool", + internalType: "bool", + }, + ], + stateMutability: "view", + }, { type: "function", name: "withdraw", @@ -444,6 +502,32 @@ const _abi = [ ], anonymous: false, }, + { + type: "event", + name: "Unwhitelisted", + inputs: [ + { + name: "token", + type: "address", + indexed: true, + internalType: "address", + }, + ], + anonymous: false, + }, + { + type: "event", + name: "Whitelisted", + inputs: [ + { + name: "token", + type: "address", + indexed: true, + internalType: "address", + }, + ], + anonymous: false, + }, { type: "event", name: "Withdraw", @@ -589,6 +673,11 @@ const _abi = [ name: "FailedInnerCall", inputs: [], }, + { + type: "error", + name: "NotWhitelisted", + inputs: [], + }, { type: "error", name: "ReentrancyGuardReentrantCall", @@ -613,7 +702,7 @@ const _abi = [ ] as const; const _bytecode = - "0x600380546001600160a01b03191633908117909155600e60a09081526d11d85d195dd85e5155934b9cdbdb60921b60c0526101049190915261012361012481905261014452606460e090815261016460405261010080516001600160e01b0390811663c0c53b8b60e01b1790915261007992919061026316565b600480546001600160a01b03929092166001600160a01b03199283168117909155600580549092161790553480156100b057600080fd5b5060055460035460016000556002805460ff191690556001600160a01b039182169116808215806100e857506001600160a01b038216155b806100fa57506001600160a01b038116155b156101185760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b038316608052610130600082610282565b5061015b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a82610282565b506101867f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e483610282565b505050506040516101969061380e565b60408082526004908201819052631d195cdd60e21b606083015260806020830181905282015263151154d560e21b60a082015260c001604051809103906000f0801580156101e8573d6000803e3d6000fd5b5060028054610100600160a81b0319166101006001600160a01b039384160217905560055460405163ae7a3a6f60e01b815230600482015291169063ae7a3a6f90602401600060405180830381600087803b15801561024657600080fd5b505af115801561025a573d6000803e3d6000fd5b5050505061488f565b600061026d61381b565b610278848483610315565b9150505b92915050565b60008281526001602090815260408083206001600160a01b038516845290915281205460ff1661030d5760008381526001602081815260408084206001600160a01b0387168086529252808420805460ff19169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a450600161027c565b50600061027c565b6000806103228584610391565b90506103866040518060400160405280601d81526020017f4552433139363750726f78792e736f6c3a4552433139363750726f78790000008152508286604051602001610370929190613924565b60408051601f198184030181529190528561039d565b9150505b9392505050565b600061038a83836103d1565b60c081015151600090156103c7576103c084848460c001516103f260201b60201c565b905061038a565b6103c0848461056b565b60006103dd8383610638565b61038a8383602001518461039d60201b60201c565b6000806103fd610648565b9050600061040b86836106e2565b905060006104288260600151836020015185610b0560201b60201c565b9050600061043883838989610cba565b9050600061044582611936565b602081015181519192509060030b1561049e5789826040015160405160200161046f929190613948565b60408051601f198184030181529082905262461bcd60e51b8252610495916004016139ae565b60405180910390fd5b60006104e76040518060400160405280601581526020017f4465706c6f79656420746f20616464726573733a200000000000000000000000815250836001611acd60201b60201c565b60405163c6ce059d60e01b8152909150600080516020616b378339815191529063c6ce059d9061051b9084906004016139ae565b602060405180830381865afa158015610538573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061055c91906139c1565b9b9a5050505050505050505050565b604051638d1cc92560e01b81526000908190600080516020616b3783398151915290638d1cc925906105a19087906004016139ae565b600060405180830381865afa1580156105be573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526105e69190810190613ab6565b905060006106158285604051602001610600929190613aea565b60408051601f19818403018152919052611c6d565b90506001600160a01b03811661027857848460405160200161046f929190613b19565b61064482826000611c80565b5050565b60408051808201825260038152621bdd5d60ea1b602082015290516334515cdb60e21b8152606091600080516020616b3783398151915291829063d145736c90610696908490600401613ba8565b600060405180830381865afa1580156106b3573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526106db9190810190613bdd565b9250505090565b6107146040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b6000600080516020616b3783398151915290506107596040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b61076285611d5a565b6020820152600061077286611faf565b90506000836001600160a01b031663d930a0e66040518163ffffffff1660e01b8152600401600060405180830381865afa1580156107b4573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526107dc9190810190613bdd565b868385602001516040516020016107f69493929190613c25565b60408051601f19818403018152908290526360f9bb1160e01b825291506000906001600160a01b038616906360f9bb11906108359085906004016139ae565b600060405180830381865afa158015610852573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261087a9190810190613bdd565b604051636da11afb60e11b81529091506001600160a01b0386169063db4235f6906108a9908490600401613cbd565b602060405180830381865afa1580156108c6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108ea9190613cf6565b6108ff578160405160200161046f9190613d18565b6040516309389f5960e31b81526001600160a01b038616906349c4fac89061092b908490600401613d8f565b600060405180830381865afa158015610948573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526109709190810190613bdd565b8452604051636da11afb60e11b81526001600160a01b0386169063db4235f69061099e908490600401613dd5565b602060405180830381865afa1580156109bb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109df9190613cf6565b15610a5b576040516309389f5960e31b81526001600160a01b038616906349c4fac890610a10908490600401613dd5565b600060405180830381865afa158015610a2d573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610a559190810190613bdd565b60408501525b846001600160a01b03166349c4fac8828660000151604051602001610a809190613e16565b6040516020818303038152906040526040518363ffffffff1660e01b8152600401610aac929190613e71565b600060405180830381865afa158015610ac9573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610af19190810190613bdd565b606085015250608083015250949350505050565b60408051600480825260a0820190925260609160009190816020015b6060815260200190600190039081610b21579050509050604051806040016040528060048152602001630677265760e41b81525081600081518110610b6857610b68613e96565b6020026020010181905250604051806040016040528060038152602001620b5c9b60ea1b81525081600181518110610ba257610ba2613e96565b602002602001018190525084604051602001610bbe9190613eac565b60405160208183030381529060405281600281518110610be057610be0613e96565b602002602001018190525082604051602001610bfc9190613ee1565b60405160208183030381529060405281600381518110610c1e57610c1e613e96565b60209081029190910101526000610c3482611936565b9050600081602001519050610c9b610c6e60405180604001604052806005815260200164173539b7b760d91b81525061213260201b60201c565b6040805180820182526000808252602091820152815180830190925284518252808501908201529061215f565b610cb0578560405160200161046f9190613f10565b9695505050505050565b60a0810151604080518082018252600080825260209182015281518083019092528251808352928101910152606090600080516020616b378339815191529015610d04565b511590565b610e2057826020015115610d945760405162461bcd60e51b81526020600482015260586024820152600080516020616b5783398151915260448201527f62652075736564207768656e207468652060736b6970566572696679536f757260648201527f6365436f646560206f7074696f6e206973206074727565600000000000000000608482015260a401610495565b8260c0015115610e205760405162461bcd60e51b81526020600482015260536024820152600080516020616b5783398151915260448201527f62652075736564207768656e207468652060736b69704c6963656e736554797060648201527f6560206f7074696f6e2069732060747275656000000000000000000000000000608482015260a401610495565b6040805160ff8082526120008201909252600091816020015b6060815260200190600190039081610e395790505090506000604051806040016040528060038152602001620dce0f60eb1b815250828280610e7a90613fa5565b935060ff1681518110610e8f57610e8f613e96565b60200260200101819052506040518060400160405280600d81526020016c302e302e312d616c7068612e3760981b815250604051602001610ed09190613fc4565b604051602081830303815290604052828280610eeb90613fa5565b935060ff1681518110610f0057610f00613e96565b6020026020010181905250604051806040016040528060068152602001656465706c6f7960d01b815250828280610f3690613fa5565b935060ff1681518110610f4b57610f4b613e96565b60200260200101819052506040518060400160405280600e81526020016d2d2d636f6e74726163744e616d6560901b815250828280610f8990613fa5565b935060ff1681518110610f9e57610f9e613e96565b60200260200101819052508760200151828280610fba90613fa5565b935060ff1681518110610fcf57610fcf613e96565b60200260200101819052506040518060400160405280600e81526020016d05a5ac6dedce8e4c2c6e8a0c2e8d60931b81525082828061100d90613fa5565b935060ff168151811061102257611022613e96565b60209081029190910101528751828261103a81613fa5565b935060ff168151811061104f5761104f613e96565b6020026020010181905250604051806040016040528060098152602001680b4b58da185a5b925960ba1b81525082828061108890613fa5565b935060ff168151811061109d5761109d613e96565b60209081029190910101526110b1466121c0565b82826110bc81613fa5565b935060ff16815181106110d1576110d1613e96565b60200260200101819052506040518060400160405280600f81526020016e2d2d6275696c64496e666f46696c6560881b81525082828061111090613fa5565b935060ff168151811061112557611125613e96565b60200260200101819052508682828061113d90613fa5565b935060ff168151811061115257611152613e96565b60209081029190910101528551156112605760408051808201909152601581527f2d2d636f6e7374727563746f7242797465636f64650000000000000000000000602082015282826111a381613fa5565b935060ff16815181106111b8576111b8613e96565b60209081029190910101526040516371aad10d60e01b81526001600160a01b038416906371aad10d906111ef9089906004016139ae565b600060405180830381865afa15801561120c573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526112349190810190613bdd565b828261123f81613fa5565b935060ff168151811061125457611254613e96565b60200260200101819052505b84602001511561130d576040805180820190915260128152712d2d766572696679536f75726365436f646560701b6020820152828261129e81613fa5565b935060ff16815181106112b3576112b3613e96565b60200260200101819052506040518060400160405280600581526020016466616c736560d81b8152508282806112e890613fa5565b935060ff16815181106112fd576112fd613e96565b6020026020010181905250611474565b611323610cff8660a0015161213260201b60201c565b6113a65760408051808201909152600d81526c2d2d6c6963656e73655479706560981b6020820152828261135681613fa5565b935060ff168151811061136b5761136b613e96565b60200260200101819052508460a0015160405160200161138b9190613eac565b6040516020818303038152906040528282806112e890613fa5565b8460c001511580156113cb57506113c9610cff896040015161213260201b60201c565b155b156114745760408051808201909152600d81526c2d2d6c6963656e73655479706560981b602082015282826113ff81613fa5565b935060ff168151811061141457611414613e96565b602090810291909101015261142888612252565b6040516020016114389190613eac565b60405160208183030381529060405282828061145390613fa5565b935060ff168151811061146857611468613e96565b60200260200101819052505b61148a610cff866040015161213260201b60201c565b61150d5760408051808201909152600b81526a0b4b5c995b185e595c925960aa1b602082015282826114bb81613fa5565b935060ff16815181106114d0576114d0613e96565b602002602001018190525084604001518282806114ec90613fa5565b935060ff168151811061150157611501613e96565b60200260200101819052505b6060850151156115fe576040805180820190915260068152650b4b5cd85b1d60d21b6020820152828261153f81613fa5565b935060ff168151811061155457611554613e96565b60209081029190910101526060850151604051631623433d60e31b815260048101919091526001600160a01b0384169063b11a19e890602401600060405180830381865afa1580156115aa573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526115d29190810190613bdd565b82826115dd81613fa5565b935060ff16815181106115f2576115f2613e96565b60200260200101819052505b60e085015151156116905760408051808201909152600a8152690b4b59d85cd31a5b5a5d60b21b6020820152828261163581613fa5565b935060ff168151811061164a5761164a613e96565b602090810291909101015260e085015151611664906121c0565b828261166f81613fa5565b935060ff168151811061168457611684613e96565b60200260200101819052505b60e0850151602001511561172d5760408051808201909152600a8152692d2d676173507269636560b01b602082015282826116ca81613fa5565b935060ff16815181106116df576116df613e96565b60200260200101819052506117018560e00151602001516121c060201b60201c565b828261170c81613fa5565b935060ff168151811061172157611721613e96565b60200260200101819052505b60e085015160400151156117ce5760408051808201909152600e81526d2d2d6d617846656550657247617360901b6020820152828261176b81613fa5565b935060ff168151811061178057611780613e96565b60200260200101819052506117a28560e00151604001516121c060201b60201c565b82826117ad81613fa5565b935060ff16815181106117c2576117c2613e96565b60200260200101819052505b60e0850151606001511561187e5760408051808201909152601681527f2d2d6d61785072696f72697479466565506572476173000000000000000000006020820152828261181b81613fa5565b935060ff168151811061183057611830613e96565b60200260200101819052506118528560e00151606001516121c060201b60201c565b828261185d81613fa5565b935060ff168151811061187257611872613e96565b60200260200101819052505b60008160ff166001600160401b0381111561189b5761189b6139ea565b6040519080825280602002602001820160405280156118ce57816020015b60608152602001906001900390816118b95790505b50905060005b8260ff168160ff16101561192757838160ff16815181106118f7576118f7613e96565b6020026020010151828260ff168151811061191457611914613e96565b60209081029190910101526001016118d4565b5093505050505b949350505050565b61195d6040518060600160405280600060030b815260200160608152602001606081525090565b6040805180820182526004808252630c4c2e6d60e31b602083015291516334515cdb60e21b8152600080516020616b3783398151915292600091849163d145736c916119ab9186910161401b565b600060405180830381865afa1580156119c8573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526119f09190810190613bdd565b905060006119fe8683612908565b90506000846001600160a01b031663f45c1ce7836040518263ffffffff1660e01b8152600401611a2e9190614062565b6000604051808303816000875af1158015611a4d573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611a7591908101906140c7565b805190915060030b15801590611a8e5750602081015151155b8015611a9d5750604081015151155b15610cb05781600081518110611ab557611ab5613e96565b602002602001015160405160200161046f919061417a565b60606000611b028560408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600080825260209182015281518083019092528651825280870190820152909150611b399082905b90612a42565b15611c36576000611bb682611bb081611baa611b7c8a60408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6040805180820182526000808252602091820152815180830190925282518252918201519181019190915290565b90612a69565b90612ac6565b9050611bea611be3604051806040016040528060018152602001600560f91b81525061213260201b60201c565b8290612a42565b15611c2457611c21611c1a604051806040016040528060018152602001600560f91b81525061213260201b60201c565b8290612b4b565b90505b611c2d81612b71565b9250505061038a565b8215611c4f57848460405160200161046f92919061434a565b505060408051602081019091526000815261038a565b509392505050565b6000808251602084016000f09392505050565b8160a0015115611c8f57505050565b6000611c9c848484612bd6565b90506000611ca982611936565b602081015181519192509060030b158015611d1c5750611d1c611cf0604051806040016040528060078152602001665355434345535360c81b81525061213260201b60201c565b604080518082018252600080825260209182015281518083019092528451825280850190820152611b33565b15611d2957505050505050565b60408201515115611d4957816040015160405160200161046f91906143c5565b8060405160200161046f919061440f565b60606000611d8f8360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b9050611dc6611dbf604051806040016040528060048152602001630b9cdbdb60e21b81525061213260201b60201c565b829061215f565b15611e085761038a611e03611dfc604051806040016040528060048152602001630b9cdbdb60e21b81525061213260201b60201c565b83906130e9565b612b71565b611e3a611e33604051806040016040528060018152602001601d60f91b81525061213260201b60201c565b8290613173565b600103611ea257611e6c611c1a604051806040016040528060018152602001601d60f91b81525061213260201b60201c565b5061038a611e03611e9b604051806040016040528060018152602001601d60f91b81525061213260201b60201c565b8390612b4b565b611ed1611dbf60405180604001604052806005815260200164173539b7b760d91b81525061213260201b60201c565b15611f9e576000611f0982611f04604051806040016040528060018152602001602f60f81b81525061213260201b60201c565b613208565b905060008160018351611f1c919061445f565b81518110611f2c57611f2c613e96565b60200260200101519050611f95611e03611f6860405180604001604052806005815260200164173539b7b760d91b81525061213260201b60201c565b604080518082018252600080825260209182015281518083019092528551825280860190820152906130e9565b95945050505050565b8260405160200161046f9190614472565b60606000611fe48360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b9050612014611dbf604051806040016040528060048152602001630b9cdbdb60e21b81525061213260201b60201c565b156120225761038a81612b71565b61204d611e33604051806040016040528060018152602001601d60f91b81525061213260201b60201c565b6001036120825761038a611e03611e9b604051806040016040528060018152602001601d60f91b81525061213260201b60201c565b6120b1611dbf60405180604001604052806005815260200164173539b7b760d91b81525061213260201b60201c565b15611f9e5760006120e482611f04604051806040016040528060018152602001602f60f81b81525061213260201b60201c565b90506001815111156121205780600282516120ff919061445f565b8151811061210f5761210f613e96565b602002602001015192505050919050565b508260405160200161046f9190614472565b60408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b8051825160009111156121745750600061027c565b8151835160208501516000929161218a9161452c565b612194919061445f565b9050826020015181036121ab57600191505061027c565b82516020840151819020912014905092915050565b606060006121cd836132ac565b60010190506000816001600160401b038111156121ec576121ec6139ea565b6040519080825280601f01601f191660200182016040528015612216576020820181803683370190505b5090508181016020015b600019016f181899199a1a9b1b9c1cb0b131b232b360811b600a86061a8153600a850494508461222057509392505050565b60606000612269836040015161213260201b60201c565b90506122a661229f6040518060400160405280600a8152602001691553931250d15394d15160b21b81525061213260201b60201c565b829061338e565b156122cd5750506040805180820190915260048152634e6f6e6560e01b6020820152919050565b61230061229f60405180604001604052806009815260200168556e6c6963656e736560b81b81525061213260201b60201c565b1561232c575050604080518082019091526009815268556e6c6963656e736560b81b6020820152919050565b61235961229f6040518060400160405280600381526020016213525560ea1b81525061213260201b60201c565b1561237f57505060408051808201909152600381526213525560ea1b6020820152919050565b6123b561229f6040518060400160405280600c81526020016b47504c2d322e302d6f6e6c7960a01b81525061213260201b60201c565b806123f557506123f561229f6040518060400160405280601081526020016f23a8261699171816b7b916b630ba32b960811b81525061213260201b60201c565b1561242157505060408051808201909152600981526823a72a9023a8263b1960b91b6020820152919050565b61245761229f6040518060400160405280600c81526020016b47504c2d332e302d6f6e6c7960a01b81525061213260201b60201c565b80612497575061249761229f6040518060400160405280601081526020016f23a8261699971816b7b916b630ba32b960811b81525061213260201b60201c565b156124c3575050604080518082019091526009815268474e552047504c763360b81b6020820152919050565b6124fa61229f6040518060400160405280600d81526020016c4c47504c2d322e312d6f6e6c7960981b81525061213260201b60201c565b8061253b575061253b61229f604051806040016040528060118152602001702623a8261699171896b7b916b630ba32b960791b81525061213260201b60201c565b1561256a57505060408051808201909152600c81526b474e55204c47504c76322e3160a01b6020820152919050565b6125a161229f6040518060400160405280600d81526020016c4c47504c2d332e302d6f6e6c7960981b81525061213260201b60201c565b806125e257506125e261229f604051806040016040528060118152602001702623a8261699971816b7b916b630ba32b960791b81525061213260201b60201c565b1561260f57505060408051808201909152600a815269474e55204c47504c763360b01b6020820152919050565b61264561229f6040518060400160405280600c81526020016b4253442d322d436c6175736560a01b81525061213260201b60201c565b1561267457505060408051808201909152600c81526b4253442d322d436c6175736560a01b6020820152919050565b6126aa61229f6040518060400160405280600c81526020016b4253442d332d436c6175736560a01b81525061213260201b60201c565b156126d957505060408051808201909152600c81526b4253442d332d436c6175736560a01b6020820152919050565b61270a61229f6040518060400160405280600781526020016604d504c2d322e360cc1b81525061213260201b60201c565b1561273457505060408051808201909152600781526604d504c2d322e360cc1b6020820152919050565b61276561229f6040518060400160405280600781526020016604f534c2d332e360cc1b81525061213260201b60201c565b1561278f57505060408051808201909152600781526604f534c2d332e360cc1b6020820152919050565b6127c361229f6040518060400160405280600a81526020016904170616368652d322e360b41b81525061213260201b60201c565b156127f057505060408051808201909152600a81526904170616368652d322e360b41b6020820152919050565b61282761229f6040518060400160405280600d81526020016c4147504c2d332e302d6f6e6c7960981b81525061213260201b60201c565b80612868575061286861229f6040518060400160405280601181526020017020a3a8261699971816b7b916b630ba32b960791b81525061213260201b60201c565b1561289557505060408051808201909152600a815269474e55204147504c763360b01b6020820152919050565b6128c761229f604051806040016040528060088152602001674255534c2d312e3160c01b81525061213260201b60201c565b156128f157505060408051808201909152600781526642534c20312e3160c81b6020820152919050565b6040808401518451915161046f929060200161453f565b60608060005b8451811015612993578185828151811061292a5761292a613e96565b6020026020010151604051602001612943929190613aea565b604051602081830303815290604052915060018551612962919061445f565b811461298b5781604051602001612979919061468f565b60405160208183030381529060405291505b60010161290e565b5060408051600380825260808201909252600091816020015b60608152602001906001900390816129ac57905050905083816000815181106129d7576129d7613e96565b6020026020010181905250604051806040016040528060028152602001612d6360f01b81525081600181518110612a1057612a10613e96565b60200260200101819052508181600281518110612a2f57612a2f613e96565b6020908102919091010152949350505050565b6020808301518351835192840151600093612a6092918491906133a2565b14159392505050565b6040805180820190915260008082526020808301829052845185820151855192860151612a9693906134b3565b9050836020015181612aa8919061445f565b84518590612ab790839061445f565b90525060208401525090919050565b6040805180820190915260008082526020820152815183511015612aeb57508161027c565b6020808301519084015160019114612b125750815160208481015190840151829020919020145b8015612b4357825184518590612b2990839061445f565b9052508251602085018051612b3f90839061452c565b9052505b509192915050565b6040805180820190915260008082526020820152612b6a8383836135d3565b5092915050565b6060600082600001516001600160401b03811115612b9157612b916139ea565b6040519080825280601f01601f191660200182016040528015612bbb576020820181803683370190505b50602084810151855192935090830191612b6a918391613679565b60606000612be2610648565b6040805160ff808252612000820190925291925060009190816020015b6060815260200190600190039081612bff5790505090506000604051806040016040528060038152602001620dce0f60eb1b815250828280612c4090613fa5565b935060ff1681518110612c5557612c55613e96565b6020026020010181905250604051806040016040528060078152602001665e312e33322e3360c81b815250604051602001612c9091906146b4565b604051602081830303815290604052828280612cab90613fa5565b935060ff1681518110612cc057612cc0613e96565b60200260200101819052506040518060400160405280600881526020016776616c696461746560c01b815250828280612cf890613fa5565b935060ff1681518110612d0d57612d0d613e96565b602002602001018190525082604051602001612d299190613ee1565b604051602081830303815290604052828280612d4490613fa5565b935060ff1681518110612d5957612d59613e96565b60200260200101819052506040518060400160405280600a8152602001690b4b58dbdb9d1c9858dd60b21b815250828280612d9390613fa5565b935060ff1681518110612da857612da8613e96565b6020908102919091010152612dbd87846136f3565b8282612dc881613fa5565b935060ff1681518110612ddd57612ddd613e96565b602090810291909101015285515115612e755760408051808201909152600b81526a2d2d7265666572656e636560a81b60208201528282612e1d81613fa5565b935060ff1681518110612e3257612e32613e96565b60209081029190910101528551612e4990846136f3565b8282612e5481613fa5565b935060ff1681518110612e6957612e69613e96565b60200260200101819052505b856080015115612ee35760408051808201909152601881527f2d2d756e73616665536b697053746f72616765436865636b000000000000000060208201528282612ebe81613fa5565b935060ff1681518110612ed357612ed3613e96565b6020026020010181905250612f3e565b8415612f3e576040805180820190915260128152712d2d726571756972655265666572656e636560701b60208201528282612f1d81613fa5565b935060ff1681518110612f3257612f32613e96565b60200260200101819052505b60408601515115612fca5760408051808201909152600d81526c2d2d756e73616665416c6c6f7760981b60208201528282612f7881613fa5565b935060ff1681518110612f8d57612f8d613e96565b60200260200101819052508560400151828280612fa990613fa5565b935060ff1681518110612fbe57612fbe613e96565b60200260200101819052505b8560600151156130345760408051808201909152601481527f2d2d756e73616665416c6c6f7752656e616d65730000000000000000000000006020820152828261301381613fa5565b935060ff168151811061302857613028613e96565b60200260200101819052505b60008160ff166001600160401b03811115613051576130516139ea565b60405190808252806020026020018201604052801561308457816020015b606081526020019060019003908161306f5790505b50905060005b8260ff168160ff1610156130dd57838160ff16815181106130ad576130ad613e96565b6020026020010151828260ff16815181106130ca576130ca613e96565b602090810291909101015260010161308a565b50979650505050505050565b604080518082019091526000808252602082015281518351101561310e57508161027c565b815183516020850151600092916131249161452c565b61312e919061445f565b6020840151909150600190821461314f575082516020840151819020908220145b801561316a5783518551869061316690839061445f565b9052505b50929392505050565b8051825160208085015190840151600093849390926131939284906134b3565b61319d919061452c565b90505b835160208501516131b1919061452c565b8111612b6a57816131c1816146f9565b92505082600001516131f78560200151836131dc919061445f565b86516131e8919061445f565b855160208701518591906134b3565b613201919061452c565b90506131a0565b606060006132168484613173565b61322190600161452c565b6001600160401b03811115613238576132386139ea565b60405190808252806020026020018201604052801561326b57816020015b60608152602001906001900390816132565790505b50905060005b8151811015611c6557613287611e038686612b4b565b82828151811061329957613299613e96565b6020908102919091010152600101613271565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f01000000000000000083106132f5577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310613321576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc10000831061333f57662386f26fc10000830492506010015b6305f5e1008310613357576305f5e100830492506008015b612710831061336b57612710830492506004015b6064831061337d576064830492506002015b600a831061027c5760010192915050565b600061339a8383613733565b159392505050565b6000808584116134a9576020841161345557600084156133ed5760016133c986602061445f565b6133d4906008614712565b6133df906002614810565b6133e9919061445f565b1990505b83518116856133fc898961452c565b613406919061445f565b805190935082165b81811461344057878411613428578794505050505061192e565b836134328161481c565b94505082845116905061340e565b61344a878561452c565b94505050505061192e565b838320613462858861445f565b61346c908761452c565b91505b8582106134a7578482208082036134945761348a868461452c565b935050505061192e565b61349f60018461445f565b92505061346f565b505b5092949350505050565b600083818685116135be576020851161356d57600085156134ff5760016134db87602061445f565b6134e6906008614712565b6134f1906002614810565b6134fb919061445f565b1990505b845181166000876135108b8b61452c565b61351a919061445f565b855190915083165b82811461355f578186106135475761353a8b8b61452c565b965050505050505061192e565b85613551816146f9565b965050838651169050613522565b85965050505050505061192e565b508383206000905b61357f868961445f565b82116135bc5785832080820361359b578394505050505061192e565b6135a660018561452c565b93505081806135b4906146f9565b925050613575565b505b6135c8878761452c565b979650505050505050565b604080518082019091526000808252602080830182905285518682015186519287015161360093906134b3565b60208087018051918601919091525190915061361c908261445f565b83528451602086015161362f919061452c565b810361363e5760008552613670565b8351835161364c919061452c565b8551869061365b90839061445f565b905250835161366a908261452c565b60208601525b50909392505050565b602081106136b1578151835261369060208461452c565b925061369d60208361452c565b91506136aa60208261445f565b9050613679565b60001981156136e05760016136c783602061445f565b6136d390610100614810565b6136dd919061445f565b90505b9151835183169219169190911790915250565b6060600061370184846106e2565b805160208083015160405193945061371b93909101614833565b60405160208183030381529060405291505092915050565b8151815160009190811115613746575081515b6020808501519084015160005b838110156137ff57825182518082146137cf5760001960208710156137ae5760018461378089602061445f565b61378a919061452c565b613795906008614712565b6137a0906002614810565b6137aa919061445f565b1990505b81811683821681810391146137cc57975061027c9650505050505050565b50505b6137da60208661452c565b94506137e760208561452c565b935050506020816137f8919061452c565b9050613753565b5084518651610cb0919061486f565b610c9f80615e9883390190565b6040518060e0016040528060608152602001606081526020016060815260200160001515815260200160001515815260200160001515815260200161385e613863565b905290565b6040518061010001604052806000151581526020016000151581526020016060815260200160008019168152602001606081526020016060815260200160001515815260200161385e6040518060800160405280600081526020016000815260200160008152602001600081525090565b60005b838110156138ef5781810151838201526020016138d7565b50506000910152565b600081518084526139108160208601602086016138d4565b601f01601f19169290920160200192915050565b6001600160a01b038316815260406020820181905260009061192e908301846138f8565b7f4661696c656420746f206465706c6f7920636f6e74726163742000000000000081526000835161398081601a8501602088016138d4565b6101d160f51b601a9184019182015283516139a281601c8401602088016138d4565b01601c01949350505050565b60208152600061038a60208301846138f8565b6000602082840312156139d357600080fd5b81516001600160a01b038116811461038a57600080fd5b634e487b7160e01b600052604160045260246000fd5b604051606081016001600160401b0381118282101715613a2257613a226139ea565b60405290565b6000806001600160401b03841115613a4257613a426139ea565b50604051601f19601f85018116603f011681018181106001600160401b0382111715613a7057613a706139ea565b604052838152905080828401851015613a8857600080fd5b611c658460208301856138d4565b600082601f830112613aa757600080fd5b61038a83835160208501613a28565b600060208284031215613ac857600080fd5b81516001600160401b03811115613ade57600080fd5b61027884828501613a96565b60008351613afc8184602088016138d4565b835190830190613b108183602088016138d4565b01949350505050565b7f4661696c656420746f206465706c6f7920636f6e747261637420000000000000815260008351613b5181601a8501602088016138d4565b7f207573696e6720636f6e7374727563746f722064617461202200000000000000601a918401918201528351613b8e8160338401602088016138d4565b601160f91b60339290910191820152603401949350505050565b60408152600b60408201526a1193d55391149657d3d55560aa1b606082015260806020820152600061038a60808301846138f8565b600060208284031215613bef57600080fd5b81516001600160401b03811115613c0557600080fd5b8201601f81018413613c1657600080fd5b61027884825160208401613a28565b60008551613c37818460208a016138d4565b602f60f81b9083019081528551613c55816001840160208a016138d4565b602f60f81b600192909101918201528451613c778160028401602089016138d4565b600181830101915050602f60f81b60018201528351613c9d8160028401602088016138d4565b64173539b7b760d91b600292909101918201526007019695505050505050565b604081526000613cd060408301846138f8565b828103602084015260048152630b985cdd60e21b60208201526040810191505092915050565b600060208284031215613d0857600080fd5b8151801515811461038a57600080fd5b7f436f756c64206e6f742066696e642041535420696e2061727469666163742000815260008251613d5081601f8501602087016138d4565b7f2e205365742060617374203d20747275656020696e20666f756e6472792e746f601f939091019283015250611b5b60f21b603f820152604101919050565b604081526000613da260408301846138f8565b8281036020840152601181527005cc2e6e85cc2c4e6ded8eae8caa0c2e8d607b1b60208201526040810191505092915050565b604081526000613de860408301846138f8565b8281036020840152600c81526b2e6173742e6c6963656e736560a01b60208201526040810191505092915050565b7f2e6d657461646174612e736f75726365732e5b27000000000000000000000000815260008251613e4e8160148501602087016138d4565b6b13ae9735b2b1b1b0b5991a9b60a11b6014939091019283015250602001919050565b604081526000613e8460408301856138f8565b828103602084015261038681856138f8565b634e487b7160e01b600052603260045260246000fd5b601160f91b81528151600090613ec98160018501602087016138d4565b601160f91b6001939091019283015250600201919050565b60008251613ef38184602087016138d4565b6a2f6275696c642d696e666f60a81b920191825250600b01919050565b7f436f756c64206e6f742066696e64206275696c642d696e666f2066696c65207781527f697468206d61746368696e6720736f7572636520636f6465206861736820666f60208201526a0391031b7b73a3930b1ba160ad1b604082015260008251613f8281604b8501602087016138d4565b91909101604b0192915050565b634e487b7160e01b600052601160045260246000fd5b600060ff821660ff8103613fbb57613fbb613f8f565b60010192915050565b7f406f70656e7a657070656c696e2f646566656e6465722d6465706c6f792d636c81526801a595b9d0b58db1a560be1b60208201526000825161400e8160298501602087016138d4565b9190910160290192915050565b60408152601660408201527f4f50454e5a455050454c494e5f424153485f5041544800000000000000000000606082015260806020820152600061038a60808301846138f8565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b828110156140bb57603f198786030184526140a68583516138f8565b9450602093840193919091019060010161408a565b50929695505050505050565b6000602082840312156140d957600080fd5b81516001600160401b038111156140ef57600080fd5b82016060818503121561410157600080fd5b614109613a00565b81518060030b811461411a57600080fd5b815260208201516001600160401b0381111561413557600080fd5b61414186828501613a96565b60208301525060408201516001600160401b0381111561416057600080fd5b61416c86828501613a96565b604083015250949350505050565b7f4661696c656420746f2072756e206261736820636f6d6d616e642077697468208152601160f91b6020820152600082516141bc8160218501602087016138d4565b7f222e20496620796f7520617265207573696e672057696e646f77732c2073657460219390910192830152507f20746865204f50454e5a455050454c494e5f424153485f5041544820656e766960418201527f726f6e6d656e74207661726961626c6520746f207468652066756c6c7920717560618201527f616c69666965642070617468206f66207468652062617368206578656375746160818201527f626c652e20466f72206578616d706c652c20696620796f75206172652075736960a18201527f6e672047697420666f722057696e646f77732c206164642074686520666f6c6c60c18201527f6f77696e67206c696e6520696e20746865202e656e762066696c65206f66207960e18201527f6f75722070726f6a65637420287573696e6720666f727761726420736c6173686101018201527f6573293a0a4f50454e5a455050454c494e5f424153485f504154483d22433a2f6101218201527f50726f6772616d2046696c65732f4769742f62696e2f6261736822000000000061014182015261015c01919050565b7f4661696c656420746f2066696e64206c696e65207769746820707265666978208152602760f81b60208201526000835161438c8160218501602088016138d4565b6c0139034b71037baba383aba1d1609d1b60219184019182015283516143b981602e8401602088016138d4565b01602e01949350505050565b7f4661696c656420746f2072756e2075706772616465207361666574792076616c815268034b230ba34b7b71d160bd1b60208201526000825161400e8160298501602087016138d4565b7f55706772616465207361666574792076616c69646174696f6e206661696c65648152611d0560f11b6020820152600082516144528160228501602087016138d4565b9190910160220192915050565b8181038181111561027c5761027c613f8f565b6d021b7b73a3930b1ba103730b6b2960951b81526000825161449b81600e8501602087016138d4565b7f206d75737420626520696e2074686520666f726d6174204d79436f6e74726163600e9390910192830152507f742e736f6c3a4d79436f6e7472616374206f72204d79436f6e74726163742e73602e8201527f6f6c206f72206f75742f4d79436f6e74726163742e736f6c2f4d79436f6e7472604e8201526730b1ba173539b7b760c11b606e820152607601919050565b8082018082111561027c5761027c613f8f565b7f53504458206c6963656e7365206964656e7469666965722000000000000000008152600083516145778160188501602088016138d4565b6301034b7160e51b601891840191820152835161459b81601c8401602088016138d4565b7f20646f6573206e6f74206c6f6f6b206c696b65206120737570706f7274656420601c92909101918201527f6c6963656e736520666f7220626c6f636b206578706c6f726572207665726966603c8201527f69636174696f6e2e205573652074686520606c6963656e73655479706560206f605c8201527f7074696f6e20746f20737065636966792061206c6963656e736520747970652c607c8201527f206f7220736574207468652060736b69704c6963656e73655479706560206f70609c8201527f74696f6e20746f2060747275656020746f20736b69702e00000000000000000060bc82015260d301949350505050565b600082516146a18184602087016138d4565b600160fd1b920191825250600101919050565b7f406f70656e7a657070656c696e2f75706772616465732d636f726540000000008152600082516146ec81601c8501602087016138d4565b91909101601c0192915050565b60006001820161470b5761470b613f8f565b5060010190565b808202811582820484141761027c5761027c613f8f565b6001815b60018411156147645780850481111561474857614748613f8f565b600184161561475657908102905b60019390931c92800261472d565b935093915050565b60008261477b5750600161027c565b816147885750600061027c565b816001811461479e57600281146147a8576147c4565b600191505061027c565b60ff8411156147b9576147b9613f8f565b50506001821b61027c565b5060208310610133831016604e8410600b84101617156147e7575081810a61027c565b6147f46000198484614729565b806000190482111561480857614808613f8f565b029392505050565b600061038a838361476c565b60008161482b5761482b613f8f565b506000190190565b600083516148458184602088016138d4565b601d60f91b90830190815283516148638160018401602088016138d4565b01600101949350505050565b8181036000831280158383131683831282161715612b6a57612b6a613f8f565b6080516115cb6148cd600039600081816101830152818161046e015281816104d00152818161083f0152818161094e01526109b001526115cb6000f3fe608060405234801561001057600080fd5b50600436106101515760003560e01c80636133b4bb116100cd578063a217fddf11610081578063d547741f11610066578063d547741f14610332578063d9caed1214610345578063e63ab1e91461035857600080fd5b8063a217fddf14610317578063c8a023621461031f57600080fd5b80638456cb59116100b25780638456cb59146102a257806385f438c1146102aa57806391d14854146102d157600080fd5b80636133b4bb1461026f57806381100bf01461028257600080fd5b80632f2ff15d116101245780633c2f05a8116101095780633c2f05a8146102375780633f4ba83a1461025c5780635c975abb1461026457600080fd5b80632f2ff15d1461021157806336568abe1461022457600080fd5b806301ffc9a714610156578063116191b61461017e57806321fc65f2146101ca578063248a9ca3146101df575b600080fd5b6101696101643660046111fa565b61037f565b60405190151581526020015b60405180910390f35b6101a57f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610175565b6101dd6101d83660046112ae565b610418565b005b6102036101ed36600461131d565b6000908152600160208190526040909120015490565b604051908152602001610175565b6101dd61021f366004611336565b6105ba565b6101dd610232366004611336565b6105e6565b6002546101a590610100900473ffffffffffffffffffffffffffffffffffffffff1681565b6101dd610644565b60025460ff16610169565b6101dd61027d366004611362565b610679565b6003546101a59073ffffffffffffffffffffffffffffffffffffffff1681565b6101dd6108c6565b6102037f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b6101696102df366004611336565b600091825260016020908152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b610203600081565b6101dd61032d3660046112ae565b6108f8565b6101dd610340366004611336565b610a80565b6101dd6103533660046113bc565b610aa6565b6102037f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061041257507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b610420610b73565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461044a81610bb6565b610452610bc0565b61049373ffffffffffffffffffffffffffffffffffffffff87167f000000000000000000000000000000000000000000000000000000000000000086610bff565b6040517f5131ab5900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690635131ab599061050d9089908990899089908990600401611442565b600060405180830381600087803b15801561052757600080fd5b505af115801561053b573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167f85b5be9cf454e05e0bddf49315178102227c312078eefa3c00294fb4d912ae4e8686866040516105a09392919061149f565b60405180910390a3506105b36001600055565b5050505050565b600082815260016020819052604090912001546105d681610bb6565b6105e08383610c8c565b50505050565b73ffffffffffffffffffffffffffffffffffffffff81163314610635576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61063f8282610d57565b505050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61066e81610bb6565b610676610e16565b50565b600254610100900473ffffffffffffffffffffffffffffffffffffffff166340c10f19306106a88660056114c2565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815273ffffffffffffffffffffffffffffffffffffffff90921660048301526024820152604401600060405180830381600087803b15801561071357600080fd5b505af1158015610727573d6000803e3d6000fd5b5050600254600580546040517fa9059cbb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff91821660048201526024810192909252610100909204909116925063a9059cbb91506044016020604051808303816000875af11580156107af573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107d391906114fc565b506002546107ff90610100900473ffffffffffffffffffffffffffffffffffffffff1685858585610418565b6002546040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000081166004830152610100909204909116906370a0823190602401602060405180830381865afa158015610895573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108b9919061151e565b156105e0576105e0611537565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a6108f081610bb6565b610676610e93565b610900610b73565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461092a81610bb6565b610932610bc0565b61097373ffffffffffffffffffffffffffffffffffffffff87167f000000000000000000000000000000000000000000000000000000000000000086610bff565b6040517fb8969bd400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063b8969bd4906109ed9089908990899089908990600401611442565b600060405180830381600087803b158015610a0757600080fd5b505af1158015610a1b573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fb9d4efa96044e5f5e03e696fa9ae2ff66911cc27e8a637c3627c75bc5b2241c88686866040516105a09392919061149f565b60008281526001602081905260409091200154610a9c81610bb6565b6105e08383610d57565b610aae610b73565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e4610ad881610bb6565b610ae0610bc0565b610b0173ffffffffffffffffffffffffffffffffffffffff85168484610bff565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f9b1bfa7fa9ee420a16e124f794c35ac9f90472acc99140eb2f6447c714cad8eb84604051610b6091815260200190565b60405180910390a35061063f6001600055565b600260005403610baf576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b6106768133610eee565b60025460ff1615610bfd576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6040805173ffffffffffffffffffffffffffffffffffffffff8416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb0000000000000000000000000000000000000000000000000000000017905261063f908490610f7f565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff16610d4f57600083815260016020818152604080842073ffffffffffffffffffffffffffffffffffffffff8716808652925280842080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a4506001610412565b506000610412565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff1615610d4f57600083815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8616808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a4506001610412565b610e1e611015565b600280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b610e9b610bc0565b600280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258610e693390565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16610f7b576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82166004820152602481018390526044015b60405180910390fd5b5050565b6000610fa173ffffffffffffffffffffffffffffffffffffffff841683611051565b90508051600014158015610fc6575080806020019051810190610fc491906114fc565b155b1561063f576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84166004820152602401610f72565b60025460ff16610bfd576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606061105f83836000611066565b9392505050565b6060814710156110a4576040517fcd786059000000000000000000000000000000000000000000000000000000008152306004820152602401610f72565b6000808573ffffffffffffffffffffffffffffffffffffffff1684866040516110cd9190611566565b60006040518083038185875af1925050503d806000811461110a576040519150601f19603f3d011682016040523d82523d6000602084013e61110f565b606091505b509150915061111f868383611129565b9695505050505050565b60608261113e57611139826111b8565b61105f565b8151158015611162575073ffffffffffffffffffffffffffffffffffffffff84163b155b156111b1576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85166004820152602401610f72565b508061105f565b8051156111c85780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006020828403121561120c57600080fd5b81357fffffffff000000000000000000000000000000000000000000000000000000008116811461105f57600080fd5b803573ffffffffffffffffffffffffffffffffffffffff8116811461126057600080fd5b919050565b60008083601f84011261127757600080fd5b50813567ffffffffffffffff81111561128f57600080fd5b6020830191508360208285010111156112a757600080fd5b9250929050565b6000806000806000608086880312156112c657600080fd5b6112cf8661123c565b94506112dd6020870161123c565b935060408601359250606086013567ffffffffffffffff81111561130057600080fd5b61130c88828901611265565b969995985093965092949392505050565b60006020828403121561132f57600080fd5b5035919050565b6000806040838503121561134957600080fd5b823591506113596020840161123c565b90509250929050565b6000806000806060858703121561137857600080fd5b6113818561123c565b935060208501359250604085013567ffffffffffffffff8111156113a457600080fd5b6113b087828801611265565b95989497509550505050565b6000806000606084860312156113d157600080fd5b6113da8461123c565b92506113e86020850161123c565b929592945050506040919091013590565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff8616815273ffffffffffffffffffffffffffffffffffffffff851660208201528360408201526080606082015260006114946080830184866113f9565b979650505050505050565b8381526040602082015260006114b96040830184866113f9565b95945050505050565b80820180821115610412577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006020828403121561150e57600080fd5b8151801515811461105f57600080fd5b60006020828403121561153057600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b6000825160005b81811015611587576020818601810151858301520161156d565b50600092019182525091905056fea2646970667358221220104b616cf3a4de8de20ce232b02a085284cb46a03acd1d5e4082d88a9d59181064736f6c634300081a0033608060405234801561001057600080fd5b50604051610c9f380380610c9f83398101604081905261002f9161010d565b8181600361003d83826101ff565b50600461004a82826101ff565b50505050506102bd565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261007b57600080fd5b81516001600160401b0381111561009457610094610054565b604051601f8201601f19908116603f011681016001600160401b03811182821017156100c2576100c2610054565b6040528181528382016020018510156100da57600080fd5b60005b828110156100f9576020818601810151838301820152016100dd565b506000918101602001919091529392505050565b6000806040838503121561012057600080fd5b82516001600160401b0381111561013657600080fd5b6101428582860161006a565b602085015190935090506001600160401b0381111561016057600080fd5b61016c8582860161006a565b9150509250929050565b600181811c9082168061018a57607f821691505b6020821081036101aa57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156101fa57806000526020600020601f840160051c810160208510156101d75750805b601f840160051c820191505b818110156101f757600081556001016101e3565b50505b505050565b81516001600160401b0381111561021857610218610054565b61022c816102268454610176565b846101b0565b6020601f82116001811461026057600083156102485750848201515b600019600385901b1c1916600184901b1784556101f7565b600084815260208120601f198516915b828110156102905787850151825560209485019460019092019101610270565b50848210156102ae5786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b6109d3806102cc6000396000f3fe608060405234801561001057600080fd5b50600436106100be5760003560e01c806340c10f191161007657806395d89b411161005b57806395d89b4114610183578063a9059cbb1461018b578063dd62ed3e1461019e57600080fd5b806340c10f191461013857806370a082311461014d57600080fd5b806318160ddd116100a757806318160ddd1461010457806323b872dd14610116578063313ce5671461012957600080fd5b806306fdde03146100c3578063095ea7b3146100e1575b600080fd5b6100cb6101e4565b6040516100d891906107bf565b60405180910390f35b6100f46100ef366004610854565b610276565b60405190151581526020016100d8565b6002545b6040519081526020016100d8565b6100f461012436600461087e565b610290565b604051601281526020016100d8565b61014b610146366004610854565b6102b4565b005b61010861015b3660046108bb565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6100cb6102c2565b6100f4610199366004610854565b6102d1565b6101086101ac3660046108dd565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6060600380546101f390610910565b80601f016020809104026020016040519081016040528092919081815260200182805461021f90610910565b801561026c5780601f106102415761010080835404028352916020019161026c565b820191906000526020600020905b81548152906001019060200180831161024f57829003601f168201915b5050505050905090565b6000336102848185856102df565b60019150505b92915050565b60003361029e8582856102f1565b6102a98585856103c5565b506001949350505050565b6102be8282610470565b5050565b6060600480546101f390610910565b6000336102848185856103c5565b6102ec83838360016104cc565b505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146103bf57818110156103b0576040517ffb8f41b200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416600482015260248101829052604481018390526064015b60405180910390fd5b6103bf848484840360006104cc565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8316610415576040517f96c6fd1e000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff8216610465576040517fec442f05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b6102ec838383610614565b73ffffffffffffffffffffffffffffffffffffffff82166104c0576040517fec442f05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b6102be60008383610614565b73ffffffffffffffffffffffffffffffffffffffff841661051c576040517fe602df05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff831661056c576040517f94280d62000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260016020908152604080832093871683529290522082905580156103bf578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161060691815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff831661064c5780600260008282546106419190610963565b909155506106fe9050565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260208190526040902054818110156106d2576040517fe450d38c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8516600482015260248101829052604481018390526064016103a7565b73ffffffffffffffffffffffffffffffffffffffff841660009081526020819052604090209082900390555b73ffffffffffffffffffffffffffffffffffffffff821661072757600280548290039055610753565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090208054820190555b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516107b291815260200190565b60405180910390a3505050565b602081526000825180602084015260005b818110156107ed57602081860181015160408684010152016107d0565b5060006040828501015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011684010191505092915050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461084f57600080fd5b919050565b6000806040838503121561086757600080fd5b6108708361082b565b946020939093013593505050565b60008060006060848603121561089357600080fd5b61089c8461082b565b92506108aa6020850161082b565b929592945050506040919091013590565b6000602082840312156108cd57600080fd5b6108d68261082b565b9392505050565b600080604083850312156108f057600080fd5b6108f98361082b565b91506109076020840161082b565b90509250929050565b600181811c9082168061092457607f821691505b60208210810361095d577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b8082018082111561028a577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea26469706673582212207e804ca539d49155d2b6bc19268ce22f9f857027c75247d69fb0d56a089c93d464736f6c634300081a00330000000000000000000000007109709ecfa91a80626ff3989d68f67f5b1dd12d54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f7420"; + "0x600580546001600160a01b03191633908117909155600e60a09081526d11d85d195dd85e5155934b9cdbdb60921b60c0526101049190915261012361012481905261014452606460e090815261016460405261010080516001600160e01b0390811663c0c53b8b60e01b1790915261007992919061029316565b600680546001600160a01b03929092166001600160a01b03199283168117909155600780549092161790553480156100b057600080fd5b5060075460055460016000556002805460ff191690556001600160a01b039182169116808215806100e857506001600160a01b038216155b806100fa57506001600160a01b038116155b156101185760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b0383166080526101306000826102b2565b5061015b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a826102b2565b506101867f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e4836102b2565b5061019f600080516020616dde833981519152826102b2565b506101b8600080516020616dde833981519152836102b2565b505050506040516101c89061383e565b60408082526004908201819052631d195cdd60e21b606083015260806020830181905282015263151154d560e21b60a082015260c001604051809103906000f08015801561021a573d6000803e3d6000fd5b50600480546001600160a01b0319166001600160a01b0392831617815560075460405163ae7a3a6f60e01b815230928101929092529091169063ae7a3a6f90602401600060405180830381600087803b15801561027657600080fd5b505af115801561028a573d6000803e3d6000fd5b505050506148bf565b600061029d61384b565b6102a8848483610345565b9150505b92915050565b60008281526001602090815260408083206001600160a01b038516845290915281205460ff1661033d5760008381526001602081815260408084206001600160a01b0387168086529252808420805460ff19169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45060016102ac565b5060006102ac565b60008061035285846103c1565b90506103b66040518060400160405280601d81526020017f4552433139363750726f78792e736f6c3a4552433139363750726f787900000081525082866040516020016103a0929190613954565b60408051601f19818403018152919052856103cd565b9150505b9392505050565b60006103ba8383610401565b60c081015151600090156103f7576103f084848460c0015161042260201b60201c565b90506103ba565b6103f0848461059b565b600061040d8383610668565b6103ba838360200151846103cd60201b60201c565b60008061042d610678565b9050600061043b8683610712565b905060006104588260600151836020015185610b3560201b60201c565b9050600061046883838989610cea565b9050600061047582611966565b602081015181519192509060030b156104ce5789826040015160405160200161049f929190613978565b60408051601f198184030181529082905262461bcd60e51b82526104c5916004016139de565b60405180910390fd5b60006105176040518060400160405280601581526020017f4465706c6f79656420746f20616464726573733a200000000000000000000000815250836001611afd60201b60201c565b60405163c6ce059d60e01b8152909150600080516020616dbe8339815191529063c6ce059d9061054b9084906004016139de565b602060405180830381865afa158015610568573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061058c91906139f1565b9b9a5050505050505050505050565b604051638d1cc92560e01b81526000908190600080516020616dbe83398151915290638d1cc925906105d19087906004016139de565b600060405180830381865afa1580156105ee573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526106169190810190613ae6565b905060006106458285604051602001610630929190613b1a565b60408051601f19818403018152919052611c9d565b90506001600160a01b0381166102a857848460405160200161049f929190613b49565b61067482826000611cb0565b5050565b60408051808201825260038152621bdd5d60ea1b602082015290516334515cdb60e21b8152606091600080516020616dbe83398151915291829063d145736c906106c6908490600401613bd8565b600060405180830381865afa1580156106e3573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261070b9190810190613c0d565b9250505090565b6107446040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b6000600080516020616dbe83398151915290506107896040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b61079285611d8a565b602082015260006107a286611fdf565b90506000836001600160a01b031663d930a0e66040518163ffffffff1660e01b8152600401600060405180830381865afa1580156107e4573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261080c9190810190613c0d565b868385602001516040516020016108269493929190613c55565b60408051601f19818403018152908290526360f9bb1160e01b825291506000906001600160a01b038616906360f9bb11906108659085906004016139de565b600060405180830381865afa158015610882573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526108aa9190810190613c0d565b604051636da11afb60e11b81529091506001600160a01b0386169063db4235f6906108d9908490600401613ced565b602060405180830381865afa1580156108f6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061091a9190613d26565b61092f578160405160200161049f9190613d48565b6040516309389f5960e31b81526001600160a01b038616906349c4fac89061095b908490600401613dbf565b600060405180830381865afa158015610978573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526109a09190810190613c0d565b8452604051636da11afb60e11b81526001600160a01b0386169063db4235f6906109ce908490600401613e05565b602060405180830381865afa1580156109eb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a0f9190613d26565b15610a8b576040516309389f5960e31b81526001600160a01b038616906349c4fac890610a40908490600401613e05565b600060405180830381865afa158015610a5d573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610a859190810190613c0d565b60408501525b846001600160a01b03166349c4fac8828660000151604051602001610ab09190613e46565b6040516020818303038152906040526040518363ffffffff1660e01b8152600401610adc929190613ea1565b600060405180830381865afa158015610af9573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610b219190810190613c0d565b606085015250608083015250949350505050565b60408051600480825260a0820190925260609160009190816020015b6060815260200190600190039081610b51579050509050604051806040016040528060048152602001630677265760e41b81525081600081518110610b9857610b98613ec6565b6020026020010181905250604051806040016040528060038152602001620b5c9b60ea1b81525081600181518110610bd257610bd2613ec6565b602002602001018190525084604051602001610bee9190613edc565b60405160208183030381529060405281600281518110610c1057610c10613ec6565b602002602001018190525082604051602001610c2c9190613f11565b60405160208183030381529060405281600381518110610c4e57610c4e613ec6565b60209081029190910101526000610c6482611966565b9050600081602001519050610ccb610c9e60405180604001604052806005815260200164173539b7b760d91b81525061216260201b60201c565b6040805180820182526000808252602091820152815180830190925284518252808501908201529061218f565b610ce0578560405160200161049f9190613f40565b9695505050505050565b60a0810151604080518082018252600080825260209182015281518083019092528251808352928101910152606090600080516020616dbe8339815191529015610d34565b511590565b610e5057826020015115610dc45760405162461bcd60e51b81526020600482015260586024820152600080516020616dfe83398151915260448201527f62652075736564207768656e207468652060736b6970566572696679536f757260648201527f6365436f646560206f7074696f6e206973206074727565600000000000000000608482015260a4016104c5565b8260c0015115610e505760405162461bcd60e51b81526020600482015260536024820152600080516020616dfe83398151915260448201527f62652075736564207768656e207468652060736b69704c6963656e736554797060648201527f6560206f7074696f6e2069732060747275656000000000000000000000000000608482015260a4016104c5565b6040805160ff8082526120008201909252600091816020015b6060815260200190600190039081610e695790505090506000604051806040016040528060038152602001620dce0f60eb1b815250828280610eaa90613fd5565b935060ff1681518110610ebf57610ebf613ec6565b60200260200101819052506040518060400160405280600d81526020016c302e302e312d616c7068612e3760981b815250604051602001610f009190613ff4565b604051602081830303815290604052828280610f1b90613fd5565b935060ff1681518110610f3057610f30613ec6565b6020026020010181905250604051806040016040528060068152602001656465706c6f7960d01b815250828280610f6690613fd5565b935060ff1681518110610f7b57610f7b613ec6565b60200260200101819052506040518060400160405280600e81526020016d2d2d636f6e74726163744e616d6560901b815250828280610fb990613fd5565b935060ff1681518110610fce57610fce613ec6565b60200260200101819052508760200151828280610fea90613fd5565b935060ff1681518110610fff57610fff613ec6565b60200260200101819052506040518060400160405280600e81526020016d05a5ac6dedce8e4c2c6e8a0c2e8d60931b81525082828061103d90613fd5565b935060ff168151811061105257611052613ec6565b60209081029190910101528751828261106a81613fd5565b935060ff168151811061107f5761107f613ec6565b6020026020010181905250604051806040016040528060098152602001680b4b58da185a5b925960ba1b8152508282806110b890613fd5565b935060ff16815181106110cd576110cd613ec6565b60209081029190910101526110e1466121f0565b82826110ec81613fd5565b935060ff168151811061110157611101613ec6565b60200260200101819052506040518060400160405280600f81526020016e2d2d6275696c64496e666f46696c6560881b81525082828061114090613fd5565b935060ff168151811061115557611155613ec6565b60200260200101819052508682828061116d90613fd5565b935060ff168151811061118257611182613ec6565b60209081029190910101528551156112905760408051808201909152601581527f2d2d636f6e7374727563746f7242797465636f64650000000000000000000000602082015282826111d381613fd5565b935060ff16815181106111e8576111e8613ec6565b60209081029190910101526040516371aad10d60e01b81526001600160a01b038416906371aad10d9061121f9089906004016139de565b600060405180830381865afa15801561123c573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526112649190810190613c0d565b828261126f81613fd5565b935060ff168151811061128457611284613ec6565b60200260200101819052505b84602001511561133d576040805180820190915260128152712d2d766572696679536f75726365436f646560701b602082015282826112ce81613fd5565b935060ff16815181106112e3576112e3613ec6565b60200260200101819052506040518060400160405280600581526020016466616c736560d81b81525082828061131890613fd5565b935060ff168151811061132d5761132d613ec6565b60200260200101819052506114a4565b611353610d2f8660a0015161216260201b60201c565b6113d65760408051808201909152600d81526c2d2d6c6963656e73655479706560981b6020820152828261138681613fd5565b935060ff168151811061139b5761139b613ec6565b60200260200101819052508460a001516040516020016113bb9190613edc565b60405160208183030381529060405282828061131890613fd5565b8460c001511580156113fb57506113f9610d2f896040015161216260201b60201c565b155b156114a45760408051808201909152600d81526c2d2d6c6963656e73655479706560981b6020820152828261142f81613fd5565b935060ff168151811061144457611444613ec6565b602090810291909101015261145888612282565b6040516020016114689190613edc565b60405160208183030381529060405282828061148390613fd5565b935060ff168151811061149857611498613ec6565b60200260200101819052505b6114ba610d2f866040015161216260201b60201c565b61153d5760408051808201909152600b81526a0b4b5c995b185e595c925960aa1b602082015282826114eb81613fd5565b935060ff168151811061150057611500613ec6565b6020026020010181905250846040015182828061151c90613fd5565b935060ff168151811061153157611531613ec6565b60200260200101819052505b60608501511561162e576040805180820190915260068152650b4b5cd85b1d60d21b6020820152828261156f81613fd5565b935060ff168151811061158457611584613ec6565b60209081029190910101526060850151604051631623433d60e31b815260048101919091526001600160a01b0384169063b11a19e890602401600060405180830381865afa1580156115da573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526116029190810190613c0d565b828261160d81613fd5565b935060ff168151811061162257611622613ec6565b60200260200101819052505b60e085015151156116c05760408051808201909152600a8152690b4b59d85cd31a5b5a5d60b21b6020820152828261166581613fd5565b935060ff168151811061167a5761167a613ec6565b602090810291909101015260e085015151611694906121f0565b828261169f81613fd5565b935060ff16815181106116b4576116b4613ec6565b60200260200101819052505b60e0850151602001511561175d5760408051808201909152600a8152692d2d676173507269636560b01b602082015282826116fa81613fd5565b935060ff168151811061170f5761170f613ec6565b60200260200101819052506117318560e00151602001516121f060201b60201c565b828261173c81613fd5565b935060ff168151811061175157611751613ec6565b60200260200101819052505b60e085015160400151156117fe5760408051808201909152600e81526d2d2d6d617846656550657247617360901b6020820152828261179b81613fd5565b935060ff16815181106117b0576117b0613ec6565b60200260200101819052506117d28560e00151604001516121f060201b60201c565b82826117dd81613fd5565b935060ff16815181106117f2576117f2613ec6565b60200260200101819052505b60e085015160600151156118ae5760408051808201909152601681527f2d2d6d61785072696f72697479466565506572476173000000000000000000006020820152828261184b81613fd5565b935060ff168151811061186057611860613ec6565b60200260200101819052506118828560e00151606001516121f060201b60201c565b828261188d81613fd5565b935060ff16815181106118a2576118a2613ec6565b60200260200101819052505b60008160ff166001600160401b038111156118cb576118cb613a1a565b6040519080825280602002602001820160405280156118fe57816020015b60608152602001906001900390816118e95790505b50905060005b8260ff168160ff16101561195757838160ff168151811061192757611927613ec6565b6020026020010151828260ff168151811061194457611944613ec6565b6020908102919091010152600101611904565b5093505050505b949350505050565b61198d6040518060600160405280600060030b815260200160608152602001606081525090565b6040805180820182526004808252630c4c2e6d60e31b602083015291516334515cdb60e21b8152600080516020616dbe83398151915292600091849163d145736c916119db9186910161404b565b600060405180830381865afa1580156119f8573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611a209190810190613c0d565b90506000611a2e8683612938565b90506000846001600160a01b031663f45c1ce7836040518263ffffffff1660e01b8152600401611a5e9190614092565b6000604051808303816000875af1158015611a7d573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611aa591908101906140f7565b805190915060030b15801590611abe5750602081015151155b8015611acd5750604081015151155b15610ce05781600081518110611ae557611ae5613ec6565b602002602001015160405160200161049f91906141aa565b60606000611b328560408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600080825260209182015281518083019092528651825280870190820152909150611b699082905b90612a72565b15611c66576000611be682611be081611bda611bac8a60408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6040805180820182526000808252602091820152815180830190925282518252918201519181019190915290565b90612a99565b90612af6565b9050611c1a611c13604051806040016040528060018152602001600560f91b81525061216260201b60201c565b8290612a72565b15611c5457611c51611c4a604051806040016040528060018152602001600560f91b81525061216260201b60201c565b8290612b7b565b90505b611c5d81612ba1565b925050506103ba565b8215611c7f57848460405160200161049f92919061437a565b50506040805160208101909152600081526103ba565b509392505050565b6000808251602084016000f09392505050565b8160a0015115611cbf57505050565b6000611ccc848484612c06565b90506000611cd982611966565b602081015181519192509060030b158015611d4c5750611d4c611d20604051806040016040528060078152602001665355434345535360c81b81525061216260201b60201c565b604080518082018252600080825260209182015281518083019092528451825280850190820152611b63565b15611d5957505050505050565b60408201515115611d7957816040015160405160200161049f91906143f5565b8060405160200161049f919061443f565b60606000611dbf8360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b9050611df6611def604051806040016040528060048152602001630b9cdbdb60e21b81525061216260201b60201c565b829061218f565b15611e38576103ba611e33611e2c604051806040016040528060048152602001630b9cdbdb60e21b81525061216260201b60201c565b8390613119565b612ba1565b611e6a611e63604051806040016040528060018152602001601d60f91b81525061216260201b60201c565b82906131a3565b600103611ed257611e9c611c4a604051806040016040528060018152602001601d60f91b81525061216260201b60201c565b506103ba611e33611ecb604051806040016040528060018152602001601d60f91b81525061216260201b60201c565b8390612b7b565b611f01611def60405180604001604052806005815260200164173539b7b760d91b81525061216260201b60201c565b15611fce576000611f3982611f34604051806040016040528060018152602001602f60f81b81525061216260201b60201c565b613238565b905060008160018351611f4c919061448f565b81518110611f5c57611f5c613ec6565b60200260200101519050611fc5611e33611f9860405180604001604052806005815260200164173539b7b760d91b81525061216260201b60201c565b60408051808201825260008082526020918201528151808301909252855182528086019082015290613119565b95945050505050565b8260405160200161049f91906144a2565b606060006120148360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b9050612044611def604051806040016040528060048152602001630b9cdbdb60e21b81525061216260201b60201c565b15612052576103ba81612ba1565b61207d611e63604051806040016040528060018152602001601d60f91b81525061216260201b60201c565b6001036120b2576103ba611e33611ecb604051806040016040528060018152602001601d60f91b81525061216260201b60201c565b6120e1611def60405180604001604052806005815260200164173539b7b760d91b81525061216260201b60201c565b15611fce57600061211482611f34604051806040016040528060018152602001602f60f81b81525061216260201b60201c565b905060018151111561215057806002825161212f919061448f565b8151811061213f5761213f613ec6565b602002602001015192505050919050565b508260405160200161049f91906144a2565b60408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b8051825160009111156121a4575060006102ac565b815183516020850151600092916121ba9161455c565b6121c4919061448f565b9050826020015181036121db5760019150506102ac565b82516020840151819020912014905092915050565b606060006121fd836132dc565b60010190506000816001600160401b0381111561221c5761221c613a1a565b6040519080825280601f01601f191660200182016040528015612246576020820181803683370190505b5090508181016020015b600019016f181899199a1a9b1b9c1cb0b131b232b360811b600a86061a8153600a850494508461225057509392505050565b60606000612299836040015161216260201b60201c565b90506122d66122cf6040518060400160405280600a8152602001691553931250d15394d15160b21b81525061216260201b60201c565b82906133be565b156122fd5750506040805180820190915260048152634e6f6e6560e01b6020820152919050565b6123306122cf60405180604001604052806009815260200168556e6c6963656e736560b81b81525061216260201b60201c565b1561235c575050604080518082019091526009815268556e6c6963656e736560b81b6020820152919050565b6123896122cf6040518060400160405280600381526020016213525560ea1b81525061216260201b60201c565b156123af57505060408051808201909152600381526213525560ea1b6020820152919050565b6123e56122cf6040518060400160405280600c81526020016b47504c2d322e302d6f6e6c7960a01b81525061216260201b60201c565b8061242557506124256122cf6040518060400160405280601081526020016f23a8261699171816b7b916b630ba32b960811b81525061216260201b60201c565b1561245157505060408051808201909152600981526823a72a9023a8263b1960b91b6020820152919050565b6124876122cf6040518060400160405280600c81526020016b47504c2d332e302d6f6e6c7960a01b81525061216260201b60201c565b806124c757506124c76122cf6040518060400160405280601081526020016f23a8261699971816b7b916b630ba32b960811b81525061216260201b60201c565b156124f3575050604080518082019091526009815268474e552047504c763360b81b6020820152919050565b61252a6122cf6040518060400160405280600d81526020016c4c47504c2d322e312d6f6e6c7960981b81525061216260201b60201c565b8061256b575061256b6122cf604051806040016040528060118152602001702623a8261699171896b7b916b630ba32b960791b81525061216260201b60201c565b1561259a57505060408051808201909152600c81526b474e55204c47504c76322e3160a01b6020820152919050565b6125d16122cf6040518060400160405280600d81526020016c4c47504c2d332e302d6f6e6c7960981b81525061216260201b60201c565b8061261257506126126122cf604051806040016040528060118152602001702623a8261699971816b7b916b630ba32b960791b81525061216260201b60201c565b1561263f57505060408051808201909152600a815269474e55204c47504c763360b01b6020820152919050565b6126756122cf6040518060400160405280600c81526020016b4253442d322d436c6175736560a01b81525061216260201b60201c565b156126a457505060408051808201909152600c81526b4253442d322d436c6175736560a01b6020820152919050565b6126da6122cf6040518060400160405280600c81526020016b4253442d332d436c6175736560a01b81525061216260201b60201c565b1561270957505060408051808201909152600c81526b4253442d332d436c6175736560a01b6020820152919050565b61273a6122cf6040518060400160405280600781526020016604d504c2d322e360cc1b81525061216260201b60201c565b1561276457505060408051808201909152600781526604d504c2d322e360cc1b6020820152919050565b6127956122cf6040518060400160405280600781526020016604f534c2d332e360cc1b81525061216260201b60201c565b156127bf57505060408051808201909152600781526604f534c2d332e360cc1b6020820152919050565b6127f36122cf6040518060400160405280600a81526020016904170616368652d322e360b41b81525061216260201b60201c565b1561282057505060408051808201909152600a81526904170616368652d322e360b41b6020820152919050565b6128576122cf6040518060400160405280600d81526020016c4147504c2d332e302d6f6e6c7960981b81525061216260201b60201c565b8061289857506128986122cf6040518060400160405280601181526020017020a3a8261699971816b7b916b630ba32b960791b81525061216260201b60201c565b156128c557505060408051808201909152600a815269474e55204147504c763360b01b6020820152919050565b6128f76122cf604051806040016040528060088152602001674255534c2d312e3160c01b81525061216260201b60201c565b1561292157505060408051808201909152600781526642534c20312e3160c81b6020820152919050565b6040808401518451915161049f929060200161456f565b60608060005b84518110156129c3578185828151811061295a5761295a613ec6565b6020026020010151604051602001612973929190613b1a565b604051602081830303815290604052915060018551612992919061448f565b81146129bb57816040516020016129a991906146bf565b60405160208183030381529060405291505b60010161293e565b5060408051600380825260808201909252600091816020015b60608152602001906001900390816129dc5790505090508381600081518110612a0757612a07613ec6565b6020026020010181905250604051806040016040528060028152602001612d6360f01b81525081600181518110612a4057612a40613ec6565b60200260200101819052508181600281518110612a5f57612a5f613ec6565b6020908102919091010152949350505050565b6020808301518351835192840151600093612a9092918491906133d2565b14159392505050565b6040805180820190915260008082526020808301829052845185820151855192860151612ac693906134e3565b9050836020015181612ad8919061448f565b84518590612ae790839061448f565b90525060208401525090919050565b6040805180820190915260008082526020820152815183511015612b1b5750816102ac565b6020808301519084015160019114612b425750815160208481015190840151829020919020145b8015612b7357825184518590612b5990839061448f565b9052508251602085018051612b6f90839061455c565b9052505b509192915050565b6040805180820190915260008082526020820152612b9a838383613603565b5092915050565b6060600082600001516001600160401b03811115612bc157612bc1613a1a565b6040519080825280601f01601f191660200182016040528015612beb576020820181803683370190505b50602084810151855192935090830191612b9a9183916136a9565b60606000612c12610678565b6040805160ff808252612000820190925291925060009190816020015b6060815260200190600190039081612c2f5790505090506000604051806040016040528060038152602001620dce0f60eb1b815250828280612c7090613fd5565b935060ff1681518110612c8557612c85613ec6565b6020026020010181905250604051806040016040528060078152602001665e312e33322e3360c81b815250604051602001612cc091906146e4565b604051602081830303815290604052828280612cdb90613fd5565b935060ff1681518110612cf057612cf0613ec6565b60200260200101819052506040518060400160405280600881526020016776616c696461746560c01b815250828280612d2890613fd5565b935060ff1681518110612d3d57612d3d613ec6565b602002602001018190525082604051602001612d599190613f11565b604051602081830303815290604052828280612d7490613fd5565b935060ff1681518110612d8957612d89613ec6565b60200260200101819052506040518060400160405280600a8152602001690b4b58dbdb9d1c9858dd60b21b815250828280612dc390613fd5565b935060ff1681518110612dd857612dd8613ec6565b6020908102919091010152612ded8784613723565b8282612df881613fd5565b935060ff1681518110612e0d57612e0d613ec6565b602090810291909101015285515115612ea55760408051808201909152600b81526a2d2d7265666572656e636560a81b60208201528282612e4d81613fd5565b935060ff1681518110612e6257612e62613ec6565b60209081029190910101528551612e799084613723565b8282612e8481613fd5565b935060ff1681518110612e9957612e99613ec6565b60200260200101819052505b856080015115612f135760408051808201909152601881527f2d2d756e73616665536b697053746f72616765436865636b000000000000000060208201528282612eee81613fd5565b935060ff1681518110612f0357612f03613ec6565b6020026020010181905250612f6e565b8415612f6e576040805180820190915260128152712d2d726571756972655265666572656e636560701b60208201528282612f4d81613fd5565b935060ff1681518110612f6257612f62613ec6565b60200260200101819052505b60408601515115612ffa5760408051808201909152600d81526c2d2d756e73616665416c6c6f7760981b60208201528282612fa881613fd5565b935060ff1681518110612fbd57612fbd613ec6565b60200260200101819052508560400151828280612fd990613fd5565b935060ff1681518110612fee57612fee613ec6565b60200260200101819052505b8560600151156130645760408051808201909152601481527f2d2d756e73616665416c6c6f7752656e616d65730000000000000000000000006020820152828261304381613fd5565b935060ff168151811061305857613058613ec6565b60200260200101819052505b60008160ff166001600160401b0381111561308157613081613a1a565b6040519080825280602002602001820160405280156130b457816020015b606081526020019060019003908161309f5790505b50905060005b8260ff168160ff16101561310d57838160ff16815181106130dd576130dd613ec6565b6020026020010151828260ff16815181106130fa576130fa613ec6565b60209081029190910101526001016130ba565b50979650505050505050565b604080518082019091526000808252602082015281518351101561313e5750816102ac565b815183516020850151600092916131549161455c565b61315e919061448f565b6020840151909150600190821461317f575082516020840151819020908220145b801561319a5783518551869061319690839061448f565b9052505b50929392505050565b8051825160208085015190840151600093849390926131c39284906134e3565b6131cd919061455c565b90505b835160208501516131e1919061455c565b8111612b9a57816131f181614729565b925050826000015161322785602001518361320c919061448f565b8651613218919061448f565b855160208701518591906134e3565b613231919061455c565b90506131d0565b6060600061324684846131a3565b61325190600161455c565b6001600160401b0381111561326857613268613a1a565b60405190808252806020026020018201604052801561329b57816020015b60608152602001906001900390816132865790505b50905060005b8151811015611c95576132b7611e338686612b7b565b8282815181106132c9576132c9613ec6565b60209081029190910101526001016132a1565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310613325577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310613351576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc10000831061336f57662386f26fc10000830492506010015b6305f5e1008310613387576305f5e100830492506008015b612710831061339b57612710830492506004015b606483106133ad576064830492506002015b600a83106102ac5760010192915050565b60006133ca8383613763565b159392505050565b6000808584116134d95760208411613485576000841561341d5760016133f986602061448f565b613404906008614742565b61340f906002614840565b613419919061448f565b1990505b835181168561342c898961455c565b613436919061448f565b805190935082165b81811461347057878411613458578794505050505061195e565b836134628161484c565b94505082845116905061343e565b61347a878561455c565b94505050505061195e565b838320613492858861448f565b61349c908761455c565b91505b8582106134d7578482208082036134c4576134ba868461455c565b935050505061195e565b6134cf60018461448f565b92505061349f565b505b5092949350505050565b600083818685116135ee576020851161359d576000851561352f57600161350b87602061448f565b613516906008614742565b613521906002614840565b61352b919061448f565b1990505b845181166000876135408b8b61455c565b61354a919061448f565b855190915083165b82811461358f578186106135775761356a8b8b61455c565b965050505050505061195e565b8561358181614729565b965050838651169050613552565b85965050505050505061195e565b508383206000905b6135af868961448f565b82116135ec578583208082036135cb578394505050505061195e565b6135d660018561455c565b93505081806135e490614729565b9250506135a5565b505b6135f8878761455c565b979650505050505050565b604080518082019091526000808252602080830182905285518682015186519287015161363093906134e3565b60208087018051918601919091525190915061364c908261448f565b83528451602086015161365f919061455c565b810361366e57600085526136a0565b8351835161367c919061455c565b8551869061368b90839061448f565b905250835161369a908261455c565b60208601525b50909392505050565b602081106136e157815183526136c060208461455c565b92506136cd60208361455c565b91506136da60208261448f565b90506136a9565b60001981156137105760016136f783602061448f565b61370390610100614840565b61370d919061448f565b90505b9151835183169219169190911790915250565b606060006137318484610712565b805160208083015160405193945061374b93909101614863565b60405160208183030381529060405291505092915050565b8151815160009190811115613776575081515b6020808501519084015160005b8381101561382f57825182518082146137ff5760001960208710156137de576001846137b089602061448f565b6137ba919061455c565b6137c5906008614742565b6137d0906002614840565b6137da919061448f565b1990505b81811683821681810391146137fc5797506102ac9650505050505050565b50505b61380a60208661455c565b945061381760208561455c565b93505050602081613828919061455c565b9050613783565b5084518651610ce0919061489f565b610c9f8061611f83390190565b6040518060e0016040528060608152602001606081526020016060815260200160001515815260200160001515815260200160001515815260200161388e613893565b905290565b6040518061010001604052806000151581526020016000151581526020016060815260200160008019168152602001606081526020016060815260200160001515815260200161388e6040518060800160405280600081526020016000815260200160008152602001600081525090565b60005b8381101561391f578181015183820152602001613907565b50506000910152565b60008151808452613940816020860160208601613904565b601f01601f19169290920160200192915050565b6001600160a01b038316815260406020820181905260009061195e90830184613928565b7f4661696c656420746f206465706c6f7920636f6e7472616374200000000000008152600083516139b081601a850160208801613904565b6101d160f51b601a9184019182015283516139d281601c840160208801613904565b01601c01949350505050565b6020815260006103ba6020830184613928565b600060208284031215613a0357600080fd5b81516001600160a01b03811681146103ba57600080fd5b634e487b7160e01b600052604160045260246000fd5b604051606081016001600160401b0381118282101715613a5257613a52613a1a565b60405290565b6000806001600160401b03841115613a7257613a72613a1a565b50604051601f19601f85018116603f011681018181106001600160401b0382111715613aa057613aa0613a1a565b604052838152905080828401851015613ab857600080fd5b611c95846020830185613904565b600082601f830112613ad757600080fd5b6103ba83835160208501613a58565b600060208284031215613af857600080fd5b81516001600160401b03811115613b0e57600080fd5b6102a884828501613ac6565b60008351613b2c818460208801613904565b835190830190613b40818360208801613904565b01949350505050565b7f4661696c656420746f206465706c6f7920636f6e747261637420000000000000815260008351613b8181601a850160208801613904565b7f207573696e6720636f6e7374727563746f722064617461202200000000000000601a918401918201528351613bbe816033840160208801613904565b601160f91b60339290910191820152603401949350505050565b60408152600b60408201526a1193d55391149657d3d55560aa1b60608201526080602082015260006103ba6080830184613928565b600060208284031215613c1f57600080fd5b81516001600160401b03811115613c3557600080fd5b8201601f81018413613c4657600080fd5b6102a884825160208401613a58565b60008551613c67818460208a01613904565b602f60f81b9083019081528551613c85816001840160208a01613904565b602f60f81b600192909101918201528451613ca7816002840160208901613904565b600181830101915050602f60f81b60018201528351613ccd816002840160208801613904565b64173539b7b760d91b600292909101918201526007019695505050505050565b604081526000613d006040830184613928565b828103602084015260048152630b985cdd60e21b60208201526040810191505092915050565b600060208284031215613d3857600080fd5b815180151581146103ba57600080fd5b7f436f756c64206e6f742066696e642041535420696e2061727469666163742000815260008251613d8081601f850160208701613904565b7f2e205365742060617374203d20747275656020696e20666f756e6472792e746f601f939091019283015250611b5b60f21b603f820152604101919050565b604081526000613dd26040830184613928565b8281036020840152601181527005cc2e6e85cc2c4e6ded8eae8caa0c2e8d607b1b60208201526040810191505092915050565b604081526000613e186040830184613928565b8281036020840152600c81526b2e6173742e6c6963656e736560a01b60208201526040810191505092915050565b7f2e6d657461646174612e736f75726365732e5b27000000000000000000000000815260008251613e7e816014850160208701613904565b6b13ae9735b2b1b1b0b5991a9b60a11b6014939091019283015250602001919050565b604081526000613eb46040830185613928565b82810360208401526103b68185613928565b634e487b7160e01b600052603260045260246000fd5b601160f91b81528151600090613ef9816001850160208701613904565b601160f91b6001939091019283015250600201919050565b60008251613f23818460208701613904565b6a2f6275696c642d696e666f60a81b920191825250600b01919050565b7f436f756c64206e6f742066696e64206275696c642d696e666f2066696c65207781527f697468206d61746368696e6720736f7572636520636f6465206861736820666f60208201526a0391031b7b73a3930b1ba160ad1b604082015260008251613fb281604b850160208701613904565b91909101604b0192915050565b634e487b7160e01b600052601160045260246000fd5b600060ff821660ff8103613feb57613feb613fbf565b60010192915050565b7f406f70656e7a657070656c696e2f646566656e6465722d6465706c6f792d636c81526801a595b9d0b58db1a560be1b60208201526000825161403e816029850160208701613904565b9190910160290192915050565b60408152601660408201527f4f50454e5a455050454c494e5f424153485f504154480000000000000000000060608201526080602082015260006103ba6080830184613928565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b828110156140eb57603f198786030184526140d6858351613928565b945060209384019391909101906001016140ba565b50929695505050505050565b60006020828403121561410957600080fd5b81516001600160401b0381111561411f57600080fd5b82016060818503121561413157600080fd5b614139613a30565b81518060030b811461414a57600080fd5b815260208201516001600160401b0381111561416557600080fd5b61417186828501613ac6565b60208301525060408201516001600160401b0381111561419057600080fd5b61419c86828501613ac6565b604083015250949350505050565b7f4661696c656420746f2072756e206261736820636f6d6d616e642077697468208152601160f91b6020820152600082516141ec816021850160208701613904565b7f222e20496620796f7520617265207573696e672057696e646f77732c2073657460219390910192830152507f20746865204f50454e5a455050454c494e5f424153485f5041544820656e766960418201527f726f6e6d656e74207661726961626c6520746f207468652066756c6c7920717560618201527f616c69666965642070617468206f66207468652062617368206578656375746160818201527f626c652e20466f72206578616d706c652c20696620796f75206172652075736960a18201527f6e672047697420666f722057696e646f77732c206164642074686520666f6c6c60c18201527f6f77696e67206c696e6520696e20746865202e656e762066696c65206f66207960e18201527f6f75722070726f6a65637420287573696e6720666f727761726420736c6173686101018201527f6573293a0a4f50454e5a455050454c494e5f424153485f504154483d22433a2f6101218201527f50726f6772616d2046696c65732f4769742f62696e2f6261736822000000000061014182015261015c01919050565b7f4661696c656420746f2066696e64206c696e65207769746820707265666978208152602760f81b6020820152600083516143bc816021850160208801613904565b6c0139034b71037baba383aba1d1609d1b60219184019182015283516143e981602e840160208801613904565b01602e01949350505050565b7f4661696c656420746f2072756e2075706772616465207361666574792076616c815268034b230ba34b7b71d160bd1b60208201526000825161403e816029850160208701613904565b7f55706772616465207361666574792076616c69646174696f6e206661696c65648152611d0560f11b602082015260008251614482816022850160208701613904565b9190910160220192915050565b818103818111156102ac576102ac613fbf565b6d021b7b73a3930b1ba103730b6b2960951b8152600082516144cb81600e850160208701613904565b7f206d75737420626520696e2074686520666f726d6174204d79436f6e74726163600e9390910192830152507f742e736f6c3a4d79436f6e7472616374206f72204d79436f6e74726163742e73602e8201527f6f6c206f72206f75742f4d79436f6e74726163742e736f6c2f4d79436f6e7472604e8201526730b1ba173539b7b760c11b606e820152607601919050565b808201808211156102ac576102ac613fbf565b7f53504458206c6963656e7365206964656e7469666965722000000000000000008152600083516145a7816018850160208801613904565b6301034b7160e51b60189184019182015283516145cb81601c840160208801613904565b7f20646f6573206e6f74206c6f6f6b206c696b65206120737570706f7274656420601c92909101918201527f6c6963656e736520666f7220626c6f636b206578706c6f726572207665726966603c8201527f69636174696f6e2e205573652074686520606c6963656e73655479706560206f605c8201527f7074696f6e20746f20737065636966792061206c6963656e736520747970652c607c8201527f206f7220736574207468652060736b69704c6963656e73655479706560206f70609c8201527f74696f6e20746f2060747275656020746f20736b69702e00000000000000000060bc82015260d301949350505050565b600082516146d1818460208701613904565b600160fd1b920191825250600101919050565b7f406f70656e7a657070656c696e2f75706772616465732d636f7265400000000081526000825161471c81601c850160208701613904565b91909101601c0192915050565b60006001820161473b5761473b613fbf565b5060010190565b80820281158282048414176102ac576102ac613fbf565b6001815b60018411156147945780850481111561477857614778613fbf565b600184161561478657908102905b60019390931c92800261475d565b935093915050565b6000826147ab575060016102ac565b816147b8575060006102ac565b81600181146147ce57600281146147d8576147f4565b60019150506102ac565b60ff8411156147e9576147e9613fbf565b50506001821b6102ac565b5060208310610133831016604e8410600b8410161715614817575081810a6102ac565b6148246000198484614759565b806000190482111561483857614838613fbf565b029392505050565b60006103ba838361479c565b60008161485b5761485b613fbf565b506000190190565b60008351614875818460208801613904565b601d60f91b9083019081528351614893816001840160208801613904565b01600101949350505050565b8181036000831280158383131683831282161715612b9a57612b9a613fbf565b6080516118226148fd600039600081816101bf01528181610574015281816105d60152818161093501528181610ba30152610c0501526118226000f3fe608060405234801561001057600080fd5b506004361061018d5760003560e01c806381100bf0116100e3578063a217fddf1161008c578063d936547e11610066578063d936547e146103c9578063d9caed12146103ec578063e63ab1e9146103ff57600080fd5b8063a217fddf1461039b578063c8a02362146103a3578063d547741f146103b657600080fd5b806391d14854116100bd57806391d148541461032f5780639a590427146103755780639b19251a1461038857600080fd5b806381100bf0146102e05780638456cb591461030057806385f438c11461030857600080fd5b806336568abe11610145578063570618e11161011f578063570618e11461029b5780635c975abb146102c25780636133b4bb146102cd57600080fd5b806336568abe146102605780633c2f05a8146102735780633f4ba83a1461029357600080fd5b806321fc65f21161017657806321fc65f214610206578063248a9ca31461021b5780632f2ff15d1461024d57600080fd5b806301ffc9a714610192578063116191b6146101ba575b600080fd5b6101a56101a0366004611436565b610426565b60405190151581526020015b60405180910390f35b6101e17f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101b1565b6102196102143660046114ea565b6104bf565b005b61023f610229366004611559565b6000908152600160208190526040909120015490565b6040519081526020016101b1565b61021961025b366004611572565b6106c0565b61021961026e366004611572565b6106ec565b6004546101e19073ffffffffffffffffffffffffffffffffffffffff1681565b61021961074a565b61023f7f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a81565b60025460ff166101a5565b6102196102db36600461159e565b61077f565b6005546101e19073ffffffffffffffffffffffffffffffffffffffff1681565b6102196109b7565b61023f7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b6101a561033d366004611572565b600091825260016020908152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b6102196103833660046115f8565b6109e9565b6102196103963660046115f8565b610a6a565b61023f600081565b6102196103b13660046114ea565b610aee565b6102196103c4366004611572565b610cd5565b6101a56103d73660046115f8565b60036020526000908152604090205460ff1681565b6102196103fa366004611613565b610cfb565b61023f7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b0000000000000000000000000000000000000000000000000000000014806104b957507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b6104c7610e27565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e46104f181610e6a565b6104f9610e74565b73ffffffffffffffffffffffffffffffffffffffff861660009081526003602052604090205460ff16610558576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61059973ffffffffffffffffffffffffffffffffffffffff87167f000000000000000000000000000000000000000000000000000000000000000086610eb3565b6040517f5131ab5900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690635131ab59906106139089908990899089908990600401611699565b600060405180830381600087803b15801561062d57600080fd5b505af1158015610641573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167f85b5be9cf454e05e0bddf49315178102227c312078eefa3c00294fb4d912ae4e8686866040516106a6939291906116f6565b60405180910390a3506106b96001600055565b5050505050565b600082815260016020819052604090912001546106dc81610e6a565b6106e68383610f40565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8116331461073b576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6107458282610fed565b505050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61077481610e6a565b61077c61108e565b50565b60045473ffffffffffffffffffffffffffffffffffffffff166340c10f19306107a9866005611719565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815273ffffffffffffffffffffffffffffffffffffffff90921660048301526024820152604401600060405180830381600087803b15801561081457600080fd5b505af1158015610828573d6000803e3d6000fd5b5050600480546007546040517fa9059cbb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff918216938101939093526005602484015216925063a9059cbb91506044016020604051808303816000875af11580156108a9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108cd9190611753565b506004546108f49073ffffffffffffffffffffffffffffffffffffffff16858585856104bf565b600480546040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116938201939093529116906370a0823190602401602060405180830381865afa158015610986573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109aa9190611775565b156106e6576106e661178e565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a6109e181610e6a565b61077c6110ed565b7f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a610a1381610e6a565b73ffffffffffffffffffffffffffffffffffffffff8216600081815260036020526040808220805460ff19169055517f51085ddf9ebdded84b76e829eb58c4078e4b5bdf97d9a94723f336039da467919190a25050565b7f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a610a9481610e6a565b73ffffffffffffffffffffffffffffffffffffffff8216600081815260036020526040808220805460ff19166001179055517faab7954e9d246b167ef88aeddad35209ca2489d95a8aeb59e288d9b19fae5a549190a25050565b610af6610e27565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e4610b2081610e6a565b610b28610e74565b73ffffffffffffffffffffffffffffffffffffffff861660009081526003602052604090205460ff16610b87576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610bc873ffffffffffffffffffffffffffffffffffffffff87167f000000000000000000000000000000000000000000000000000000000000000086610eb3565b6040517fb8969bd400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063b8969bd490610c429089908990899089908990600401611699565b600060405180830381600087803b158015610c5c57600080fd5b505af1158015610c70573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fb9d4efa96044e5f5e03e696fa9ae2ff66911cc27e8a637c3627c75bc5b2241c88686866040516106a6939291906116f6565b60008281526001602081905260409091200154610cf181610e6a565b6106e68383610fed565b610d03610e27565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e4610d2d81610e6a565b610d35610e74565b73ffffffffffffffffffffffffffffffffffffffff841660009081526003602052604090205460ff16610d94576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610db573ffffffffffffffffffffffffffffffffffffffff85168484610eb3565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f9b1bfa7fa9ee420a16e124f794c35ac9f90472acc99140eb2f6447c714cad8eb84604051610e1491815260200190565b60405180910390a3506107456001600055565b600260005403610e63576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b61077c813361112a565b60025460ff1615610eb1576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6040805173ffffffffffffffffffffffffffffffffffffffff8416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb000000000000000000000000000000000000000000000000000000001790526107459084906111bb565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff16610fe557600083815260016020818152604080842073ffffffffffffffffffffffffffffffffffffffff87168086529252808420805460ff19169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45060016104b9565b5060006104b9565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff1615610fe557600083815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff86168085529252808320805460ff1916905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45060016104b9565b611096611251565b6002805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b6110f5610e74565b6002805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586110c33390565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff166111b7576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82166004820152602481018390526044015b60405180910390fd5b5050565b60006111dd73ffffffffffffffffffffffffffffffffffffffff84168361128d565b905080516000141580156112025750808060200190518101906112009190611753565b155b15610745576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff841660048201526024016111ae565b60025460ff16610eb1576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606061129b838360006112a2565b9392505050565b6060814710156112e0576040517fcd7860590000000000000000000000000000000000000000000000000000000081523060048201526024016111ae565b6000808573ffffffffffffffffffffffffffffffffffffffff16848660405161130991906117bd565b60006040518083038185875af1925050503d8060008114611346576040519150601f19603f3d011682016040523d82523d6000602084013e61134b565b606091505b509150915061135b868383611365565b9695505050505050565b60608261137a57611375826113f4565b61129b565b815115801561139e575073ffffffffffffffffffffffffffffffffffffffff84163b155b156113ed576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff851660048201526024016111ae565b508061129b565b8051156114045780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006020828403121561144857600080fd5b81357fffffffff000000000000000000000000000000000000000000000000000000008116811461129b57600080fd5b803573ffffffffffffffffffffffffffffffffffffffff8116811461149c57600080fd5b919050565b60008083601f8401126114b357600080fd5b50813567ffffffffffffffff8111156114cb57600080fd5b6020830191508360208285010111156114e357600080fd5b9250929050565b60008060008060006080868803121561150257600080fd5b61150b86611478565b945061151960208701611478565b935060408601359250606086013567ffffffffffffffff81111561153c57600080fd5b611548888289016114a1565b969995985093965092949392505050565b60006020828403121561156b57600080fd5b5035919050565b6000806040838503121561158557600080fd5b8235915061159560208401611478565b90509250929050565b600080600080606085870312156115b457600080fd5b6115bd85611478565b935060208501359250604085013567ffffffffffffffff8111156115e057600080fd5b6115ec878288016114a1565b95989497509550505050565b60006020828403121561160a57600080fd5b61129b82611478565b60008060006060848603121561162857600080fd5b61163184611478565b925061163f60208501611478565b929592945050506040919091013590565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff8616815273ffffffffffffffffffffffffffffffffffffffff851660208201528360408201526080606082015260006116eb608083018486611650565b979650505050505050565b838152604060208201526000611710604083018486611650565b95945050505050565b808201808211156104b9577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006020828403121561176557600080fd5b8151801515811461129b57600080fd5b60006020828403121561178757600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b6000825160005b818110156117de57602081860181015185830152016117c4565b50600092019182525091905056fea264697066735822122077f2d215a4760682a6f757e5b5c49fde9ea29a3b2ef55d3e1c39d0779fbdec1164736f6c634300081a0033608060405234801561001057600080fd5b50604051610c9f380380610c9f83398101604081905261002f9161010d565b8181600361003d83826101ff565b50600461004a82826101ff565b50505050506102bd565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261007b57600080fd5b81516001600160401b0381111561009457610094610054565b604051601f8201601f19908116603f011681016001600160401b03811182821017156100c2576100c2610054565b6040528181528382016020018510156100da57600080fd5b60005b828110156100f9576020818601810151838301820152016100dd565b506000918101602001919091529392505050565b6000806040838503121561012057600080fd5b82516001600160401b0381111561013657600080fd5b6101428582860161006a565b602085015190935090506001600160401b0381111561016057600080fd5b61016c8582860161006a565b9150509250929050565b600181811c9082168061018a57607f821691505b6020821081036101aa57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156101fa57806000526020600020601f840160051c810160208510156101d75750805b601f840160051c820191505b818110156101f757600081556001016101e3565b50505b505050565b81516001600160401b0381111561021857610218610054565b61022c816102268454610176565b846101b0565b6020601f82116001811461026057600083156102485750848201515b600019600385901b1c1916600184901b1784556101f7565b600084815260208120601f198516915b828110156102905787850151825560209485019460019092019101610270565b50848210156102ae5786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b6109d3806102cc6000396000f3fe608060405234801561001057600080fd5b50600436106100be5760003560e01c806340c10f191161007657806395d89b411161005b57806395d89b4114610183578063a9059cbb1461018b578063dd62ed3e1461019e57600080fd5b806340c10f191461013857806370a082311461014d57600080fd5b806318160ddd116100a757806318160ddd1461010457806323b872dd14610116578063313ce5671461012957600080fd5b806306fdde03146100c3578063095ea7b3146100e1575b600080fd5b6100cb6101e4565b6040516100d891906107bf565b60405180910390f35b6100f46100ef366004610854565b610276565b60405190151581526020016100d8565b6002545b6040519081526020016100d8565b6100f461012436600461087e565b610290565b604051601281526020016100d8565b61014b610146366004610854565b6102b4565b005b61010861015b3660046108bb565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6100cb6102c2565b6100f4610199366004610854565b6102d1565b6101086101ac3660046108dd565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6060600380546101f390610910565b80601f016020809104026020016040519081016040528092919081815260200182805461021f90610910565b801561026c5780601f106102415761010080835404028352916020019161026c565b820191906000526020600020905b81548152906001019060200180831161024f57829003601f168201915b5050505050905090565b6000336102848185856102df565b60019150505b92915050565b60003361029e8582856102f1565b6102a98585856103c5565b506001949350505050565b6102be8282610470565b5050565b6060600480546101f390610910565b6000336102848185856103c5565b6102ec83838360016104cc565b505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146103bf57818110156103b0576040517ffb8f41b200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416600482015260248101829052604481018390526064015b60405180910390fd5b6103bf848484840360006104cc565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8316610415576040517f96c6fd1e000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff8216610465576040517fec442f05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b6102ec838383610614565b73ffffffffffffffffffffffffffffffffffffffff82166104c0576040517fec442f05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b6102be60008383610614565b73ffffffffffffffffffffffffffffffffffffffff841661051c576040517fe602df05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff831661056c576040517f94280d62000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260016020908152604080832093871683529290522082905580156103bf578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161060691815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff831661064c5780600260008282546106419190610963565b909155506106fe9050565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260208190526040902054818110156106d2576040517fe450d38c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8516600482015260248101829052604481018390526064016103a7565b73ffffffffffffffffffffffffffffffffffffffff841660009081526020819052604090209082900390555b73ffffffffffffffffffffffffffffffffffffffff821661072757600280548290039055610753565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090208054820190555b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516107b291815260200190565b60405180910390a3505050565b602081526000825180602084015260005b818110156107ed57602081860181015160408684010152016107d0565b5060006040828501015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011684010191505092915050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461084f57600080fd5b919050565b6000806040838503121561086757600080fd5b6108708361082b565b946020939093013593505050565b60008060006060848603121561089357600080fd5b61089c8461082b565b92506108aa6020850161082b565b929592945050506040919091013590565b6000602082840312156108cd57600080fd5b6108d68261082b565b9392505050565b600080604083850312156108f057600080fd5b6108f98361082b565b91506109076020840161082b565b90509250929050565b600181811c9082168061092457607f821691505b60208210810361095d577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b8082018082111561028a577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea26469706673582212207e804ca539d49155d2b6bc19268ce22f9f857027c75247d69fb0d56a089c93d464736f6c634300081a00330000000000000000000000007109709ecfa91a80626ff3989d68f67f5b1dd12d8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f7420"; type ERC20CustodyEchidnaTestConstructorParams = | [signer?: Signer] diff --git a/v2/typechain-types/factories/ERC20Custody__factory.ts b/v2/typechain-types/factories/ERC20Custody__factory.ts index 3f50e9bf..bffd156f 100644 --- a/v2/typechain-types/factories/ERC20Custody__factory.ts +++ b/v2/typechain-types/factories/ERC20Custody__factory.ts @@ -64,6 +64,19 @@ const _abi = [ ], stateMutability: "view", }, + { + type: "function", + name: "WHITELISTER_ROLE", + inputs: [], + outputs: [ + { + name: "", + type: "bytes32", + internalType: "bytes32", + }, + ], + stateMutability: "view", + }, { type: "function", name: "WITHDRAWER_ROLE", @@ -233,6 +246,51 @@ const _abi = [ outputs: [], stateMutability: "nonpayable", }, + { + type: "function", + name: "unwhitelist", + inputs: [ + { + name: "token", + type: "address", + internalType: "address", + }, + ], + outputs: [], + stateMutability: "nonpayable", + }, + { + type: "function", + name: "whitelist", + inputs: [ + { + name: "token", + type: "address", + internalType: "address", + }, + ], + outputs: [], + stateMutability: "nonpayable", + }, + { + type: "function", + name: "whitelisted", + inputs: [ + { + name: "", + type: "address", + internalType: "address", + }, + ], + outputs: [ + { + name: "", + type: "bool", + internalType: "bool", + }, + ], + stateMutability: "view", + }, { type: "function", name: "withdraw", @@ -413,6 +471,32 @@ const _abi = [ ], anonymous: false, }, + { + type: "event", + name: "Unwhitelisted", + inputs: [ + { + name: "token", + type: "address", + indexed: true, + internalType: "address", + }, + ], + anonymous: false, + }, + { + type: "event", + name: "Whitelisted", + inputs: [ + { + name: "token", + type: "address", + indexed: true, + internalType: "address", + }, + ], + anonymous: false, + }, { type: "event", name: "Withdraw", @@ -558,6 +642,11 @@ const _abi = [ name: "FailedInnerCall", inputs: [], }, + { + type: "error", + name: "NotWhitelisted", + inputs: [], + }, { type: "error", name: "ReentrancyGuardReentrantCall", @@ -582,7 +671,7 @@ const _abi = [ ] as const; const _bytecode = - "0x60a060405234801561001057600080fd5b5060405161140b38038061140b83398101604081905261002f916101b3565b60016000556002805460ff191690556001600160a01b038316158061005b57506001600160a01b038216155b8061006d57506001600160a01b038116155b1561008b5760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b0383166080526100a3600082610102565b506100ce7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a82610102565b506100f97f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e483610102565b505050506101f6565b60008281526001602090815260408083206001600160a01b038516845290915281205460ff1661018d5760008381526001602081815260408084206001600160a01b0387168086529252808420805460ff19169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a4506001610191565b5060005b92915050565b80516001600160a01b03811681146101ae57600080fd5b919050565b6000806000606084860312156101c857600080fd5b6101d184610197565b92506101df60208501610197565b91506101ed60408501610197565b90509250925092565b6080516111de61022d60003960008181610132015281816103c5015281816104270152818161065801526106ba01526111de6000f3fe608060405234801561001057600080fd5b50600436106101005760003560e01c80638456cb5911610097578063c8a0236211610066578063c8a0236214610276578063d547741f14610289578063d9caed121461029c578063e63ab1e9146102af57600080fd5b80638456cb59146101f957806385f438c11461020157806391d1485414610228578063a217fddf1461026e57600080fd5b80632f2ff15d116100d35780632f2ff15d146101c057806336568abe146101d35780633f4ba83a146101e65780635c975abb146101ee57600080fd5b806301ffc9a714610105578063116191b61461012d57806321fc65f214610179578063248a9ca31461018e575b600080fd5b610118610113366004610f04565b6102d6565b60405190151581526020015b60405180910390f35b6101547f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610124565b61018c610187366004610f6f565b61036f565b005b6101b261019c36600461100c565b6000908152600160208190526040909120015490565b604051908152602001610124565b61018c6101ce366004611025565b610511565b61018c6101e1366004611025565b61053d565b61018c61059b565b60025460ff16610118565b61018c6105d0565b6101b27f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b610118610236366004611025565b600091825260016020908152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b6101b2600081565b61018c610284366004610f6f565b610602565b61018c610297366004611025565b61078a565b61018c6102aa366004611051565b6107b0565b6101b27f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061036957507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b61037761087d565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e46103a1816108c0565b6103a96108ca565b6103ea73ffffffffffffffffffffffffffffffffffffffff87167f000000000000000000000000000000000000000000000000000000000000000086610909565b6040517f5131ab5900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690635131ab599061046490899089908990899089906004016110d7565b600060405180830381600087803b15801561047e57600080fd5b505af1158015610492573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167f85b5be9cf454e05e0bddf49315178102227c312078eefa3c00294fb4d912ae4e8686866040516104f793929190611134565b60405180910390a35061050a6001600055565b5050505050565b6000828152600160208190526040909120015461052d816108c0565b6105378383610996565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8116331461058c576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6105968282610a61565b505050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a6105c5816108c0565b6105cd610b20565b50565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a6105fa816108c0565b6105cd610b9d565b61060a61087d565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e4610634816108c0565b61063c6108ca565b61067d73ffffffffffffffffffffffffffffffffffffffff87167f000000000000000000000000000000000000000000000000000000000000000086610909565b6040517fb8969bd400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063b8969bd4906106f790899089908990899089906004016110d7565b600060405180830381600087803b15801561071157600080fd5b505af1158015610725573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fb9d4efa96044e5f5e03e696fa9ae2ff66911cc27e8a637c3627c75bc5b2241c88686866040516104f793929190611134565b600082815260016020819052604090912001546107a6816108c0565b6105378383610a61565b6107b861087d565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e46107e2816108c0565b6107ea6108ca565b61080b73ffffffffffffffffffffffffffffffffffffffff85168484610909565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f9b1bfa7fa9ee420a16e124f794c35ac9f90472acc99140eb2f6447c714cad8eb8460405161086a91815260200190565b60405180910390a3506105966001600055565b6002600054036108b9576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b6105cd8133610bf8565b60025460ff1615610907576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6040805173ffffffffffffffffffffffffffffffffffffffff8416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb00000000000000000000000000000000000000000000000000000000179052610596908490610c89565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff16610a5957600083815260016020818152604080842073ffffffffffffffffffffffffffffffffffffffff8716808652925280842080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a4506001610369565b506000610369565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff1615610a5957600083815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8616808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a4506001610369565b610b28610d1f565b600280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b610ba56108ca565b600280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258610b733390565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16610c85576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82166004820152602481018390526044015b60405180910390fd5b5050565b6000610cab73ffffffffffffffffffffffffffffffffffffffff841683610d5b565b90508051600014158015610cd0575080806020019051810190610cce9190611157565b155b15610596576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84166004820152602401610c7c565b60025460ff16610907576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6060610d6983836000610d70565b9392505050565b606081471015610dae576040517fcd786059000000000000000000000000000000000000000000000000000000008152306004820152602401610c7c565b6000808573ffffffffffffffffffffffffffffffffffffffff168486604051610dd79190611179565b60006040518083038185875af1925050503d8060008114610e14576040519150601f19603f3d011682016040523d82523d6000602084013e610e19565b606091505b5091509150610e29868383610e33565b9695505050505050565b606082610e4857610e4382610ec2565b610d69565b8151158015610e6c575073ffffffffffffffffffffffffffffffffffffffff84163b155b15610ebb576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85166004820152602401610c7c565b5080610d69565b805115610ed25780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060208284031215610f1657600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610d6957600080fd5b803573ffffffffffffffffffffffffffffffffffffffff81168114610f6a57600080fd5b919050565b600080600080600060808688031215610f8757600080fd5b610f9086610f46565b9450610f9e60208701610f46565b935060408601359250606086013567ffffffffffffffff811115610fc157600080fd5b8601601f81018813610fd257600080fd5b803567ffffffffffffffff811115610fe957600080fd5b886020828401011115610ffb57600080fd5b959894975092955050506020019190565b60006020828403121561101e57600080fd5b5035919050565b6000806040838503121561103857600080fd5b8235915061104860208401610f46565b90509250929050565b60008060006060848603121561106657600080fd5b61106f84610f46565b925061107d60208501610f46565b929592945050506040919091013590565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff8616815273ffffffffffffffffffffffffffffffffffffffff8516602082015283604082015260806060820152600061112960808301848661108e565b979650505050505050565b83815260406020820152600061114e60408301848661108e565b95945050505050565b60006020828403121561116957600080fd5b81518015158114610d6957600080fd5b6000825160005b8181101561119a5760208186018101518583015201611180565b50600092019182525091905056fea264697066735822122069d5c5c3cb2752c876b6a2138d8d9b66bac6bd1b48a1fe98417eea81faf02a3e64736f6c634300081a0033"; + "0x60a060405234801561001057600080fd5b506040516116fe3803806116fe83398101604081905261002f916101e5565b60016000556002805460ff191690556001600160a01b038316158061005b57506001600160a01b038216155b8061006d57506001600160a01b038116155b1561008b5760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b0383166080526100a3600082610134565b506100ce7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a82610134565b506100f97f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e483610134565b506101126000805160206116de83398151915282610134565b5061012b6000805160206116de83398151915283610134565b50505050610228565b60008281526001602090815260408083206001600160a01b038516845290915281205460ff166101bf5760008381526001602081815260408084206001600160a01b0387168086529252808420805460ff19169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45060016101c3565b5060005b92915050565b80516001600160a01b03811681146101e057600080fd5b919050565b6000806000606084860312156101fa57600080fd5b610203846101c9565b9250610211602085016101c9565b915061021f604085016101c9565b90509250925092565b60805161147f61025f6000396000818161019e0152818161050001528181610562015281816108f70152610959015261147f6000f3fe608060405234801561001057600080fd5b506004361061016c5760003560e01c806385f438c1116100cd578063c8a0236211610081578063d936547e11610066578063d936547e14610355578063d9caed1214610378578063e63ab1e91461038b57600080fd5b8063c8a023621461032f578063d547741f1461034257600080fd5b80639a590427116100b25780639a590427146103015780639b19251a14610314578063a217fddf1461032757600080fd5b806385f438c11461029457806391d14854146102bb57600080fd5b806336568abe11610124578063570618e111610109578063570618e11461025a5780635c975abb146102815780638456cb591461028c57600080fd5b806336568abe1461023f5780633f4ba83a1461025257600080fd5b806321fc65f21161015557806321fc65f2146101e5578063248a9ca3146101fa5780632f2ff15d1461022c57600080fd5b806301ffc9a714610171578063116191b614610199575b600080fd5b61018461017f36600461118a565b6103b2565b60405190151581526020015b60405180910390f35b6101c07f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610190565b6101f86101f33660046111f5565b61044b565b005b61021e610208366004611292565b6000908152600160208190526040909120015490565b604051908152602001610190565b6101f861023a3660046112ab565b61064c565b6101f861024d3660046112ab565b610678565b6101f86106d6565b61021e7f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a81565b60025460ff16610184565b6101f861070b565b61021e7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b6101846102c93660046112ab565b600091825260016020908152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b6101f861030f3660046112d7565b61073d565b6101f86103223660046112d7565b6107be565b61021e600081565b6101f861033d3660046111f5565b610842565b6101f86103503660046112ab565b610a29565b6101846103633660046112d7565b60036020526000908152604090205460ff1681565b6101f86103863660046112f2565b610a4f565b61021e7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061044557507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b610453610b7b565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461047d81610bbe565b610485610bc8565b73ffffffffffffffffffffffffffffffffffffffff861660009081526003602052604090205460ff166104e4576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61052573ffffffffffffffffffffffffffffffffffffffff87167f000000000000000000000000000000000000000000000000000000000000000086610c07565b6040517f5131ab5900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690635131ab599061059f9089908990899089908990600401611378565b600060405180830381600087803b1580156105b957600080fd5b505af11580156105cd573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167f85b5be9cf454e05e0bddf49315178102227c312078eefa3c00294fb4d912ae4e868686604051610632939291906113d5565b60405180910390a3506106456001600055565b5050505050565b6000828152600160208190526040909120015461066881610bbe565b6106728383610c94565b50505050565b73ffffffffffffffffffffffffffffffffffffffff811633146106c7576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6106d18282610d41565b505050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61070081610bbe565b610708610de2565b50565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61073581610bbe565b610708610e41565b7f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a61076781610bbe565b73ffffffffffffffffffffffffffffffffffffffff8216600081815260036020526040808220805460ff19169055517f51085ddf9ebdded84b76e829eb58c4078e4b5bdf97d9a94723f336039da467919190a25050565b7f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a6107e881610bbe565b73ffffffffffffffffffffffffffffffffffffffff8216600081815260036020526040808220805460ff19166001179055517faab7954e9d246b167ef88aeddad35209ca2489d95a8aeb59e288d9b19fae5a549190a25050565b61084a610b7b565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461087481610bbe565b61087c610bc8565b73ffffffffffffffffffffffffffffffffffffffff861660009081526003602052604090205460ff166108db576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61091c73ffffffffffffffffffffffffffffffffffffffff87167f000000000000000000000000000000000000000000000000000000000000000086610c07565b6040517fb8969bd400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063b8969bd4906109969089908990899089908990600401611378565b600060405180830381600087803b1580156109b057600080fd5b505af11580156109c4573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fb9d4efa96044e5f5e03e696fa9ae2ff66911cc27e8a637c3627c75bc5b2241c8868686604051610632939291906113d5565b60008281526001602081905260409091200154610a4581610bbe565b6106728383610d41565b610a57610b7b565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e4610a8181610bbe565b610a89610bc8565b73ffffffffffffffffffffffffffffffffffffffff841660009081526003602052604090205460ff16610ae8576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610b0973ffffffffffffffffffffffffffffffffffffffff85168484610c07565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f9b1bfa7fa9ee420a16e124f794c35ac9f90472acc99140eb2f6447c714cad8eb84604051610b6891815260200190565b60405180910390a3506106d16001600055565b600260005403610bb7576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b6107088133610e7e565b60025460ff1615610c05576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6040805173ffffffffffffffffffffffffffffffffffffffff8416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb000000000000000000000000000000000000000000000000000000001790526106d1908490610f0f565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff16610d3957600083815260016020818152604080842073ffffffffffffffffffffffffffffffffffffffff87168086529252808420805460ff19169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a4506001610445565b506000610445565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff1615610d3957600083815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff86168085529252808320805460ff1916905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a4506001610445565b610dea610fa5565b6002805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b610e49610bc8565b6002805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258610e173390565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16610f0b576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82166004820152602481018390526044015b60405180910390fd5b5050565b6000610f3173ffffffffffffffffffffffffffffffffffffffff841683610fe1565b90508051600014158015610f56575080806020019051810190610f5491906113f8565b155b156106d1576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84166004820152602401610f02565b60025460ff16610c05576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6060610fef83836000610ff6565b9392505050565b606081471015611034576040517fcd786059000000000000000000000000000000000000000000000000000000008152306004820152602401610f02565b6000808573ffffffffffffffffffffffffffffffffffffffff16848660405161105d919061141a565b60006040518083038185875af1925050503d806000811461109a576040519150601f19603f3d011682016040523d82523d6000602084013e61109f565b606091505b50915091506110af8683836110b9565b9695505050505050565b6060826110ce576110c982611148565b610fef565b81511580156110f2575073ffffffffffffffffffffffffffffffffffffffff84163b155b15611141576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85166004820152602401610f02565b5080610fef565b8051156111585780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006020828403121561119c57600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610fef57600080fd5b803573ffffffffffffffffffffffffffffffffffffffff811681146111f057600080fd5b919050565b60008060008060006080868803121561120d57600080fd5b611216866111cc565b9450611224602087016111cc565b935060408601359250606086013567ffffffffffffffff81111561124757600080fd5b8601601f8101881361125857600080fd5b803567ffffffffffffffff81111561126f57600080fd5b88602082840101111561128157600080fd5b959894975092955050506020019190565b6000602082840312156112a457600080fd5b5035919050565b600080604083850312156112be57600080fd5b823591506112ce602084016111cc565b90509250929050565b6000602082840312156112e957600080fd5b610fef826111cc565b60008060006060848603121561130757600080fd5b611310846111cc565b925061131e602085016111cc565b929592945050506040919091013590565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff8616815273ffffffffffffffffffffffffffffffffffffffff851660208201528360408201526080606082015260006113ca60808301848661132f565b979650505050505050565b8381526040602082015260006113ef60408301848661132f565b95945050505050565b60006020828403121561140a57600080fd5b81518015158114610fef57600080fd5b6000825160005b8181101561143b5760208186018101518583015201611421565b50600092019182525091905056fea2646970667358221220dc54ce548a1f0bf8ba5e86cc53c6d822e55eee543451395733c659359bac8dd164736f6c634300081a00338619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a"; type ERC20CustodyConstructorParams = | [signer?: Signer] diff --git a/v2/typechain-types/factories/GatewayEVMEchidnaTest__factory.ts b/v2/typechain-types/factories/GatewayEVMEchidnaTest__factory.ts index 9a623c5d..635dde3d 100644 --- a/v2/typechain-types/factories/GatewayEVMEchidnaTest__factory.ts +++ b/v2/typechain-types/factories/GatewayEVMEchidnaTest__factory.ts @@ -1027,6 +1027,11 @@ const _abi = [ name: "NotInitializing", inputs: [], }, + { + type: "error", + name: "NotWhitelistedInCustody", + inputs: [], + }, { type: "error", name: "ReentrancyGuardReentrantCall", @@ -1067,7 +1072,7 @@ const _abi = [ ] as const; const _bytecode = - "0x60a060405230608052600580546001600160a01b0319163317905534801561002657600080fd5b5061002f610154565b600554600180546001600160a01b039092166001600160a01b031992831617905560028054610123921691909117905560405161006b90610206565b60408082526004908201819052631d195cdd60e21b606083015260806020830181905282015263151154d560e21b60a082015260c001604051809103906000f0801580156100bd573d6000803e3d6000fd5b50600480546001600160a01b0319166001600160a01b039283161790556001546040513092919091169082906100f290610213565b6001600160a01b03938416815291831660208301529091166040820152606001604051809103906000f08015801561012e573d6000803e3d6000fd5b50600080546001600160a01b0319166001600160a01b0392909216919091179055610220565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156101a45760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146102035780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b610c9f806135b283390190565b61140b8061425183390190565b608051613369610249600039600081816120e20152818161210b01526124da01526133696000f3fe6080604052600436106102345760003560e01c80635c975abb11610138578063ad3cb1cc116100b0578063d547741f1161007f578063e63ab1e911610064578063e63ab1e9146106ff578063f340fa0114610733578063f45346dc1461074657600080fd5b8063d547741f146106bf578063dda79b75146106df57600080fd5b8063ad3cb1cc14610616578063ae7a3a6f1461065f578063b8969bd41461067f578063c0c53b8b1461069f57600080fd5b80638456cb591161010757806391d14854116100ec57806391d1485414610568578063a217fddf146105cd578063a783c789146105e257600080fd5b80638456cb59146105335780638c6f037f1461054857600080fd5b80635c975abb146104885780635d62c860146104bf5780636ab90f9b146104f357806381100bf01461051357600080fd5b806335c018db116101cb5780634f1ef2861161019a57806352d1902d1161017f57806352d1902d1461043357806357bec62f146104485780635b1125911461046857600080fd5b80634f1ef286146104005780635131ab591461041357600080fd5b806335c018db1461039857806336568abe146103ab5780633c2f05a8146103cb5780633f4ba83a146103eb57600080fd5b806321e093b11161020757806321e093b1146102d0578063248a9ca31461030857806329c59b5d146103655780632f2ff15d1461037857600080fd5b806301ffc9a71461023957806310188aef1461026e5780631b8b921d146102905780631cff79cd146102b0575b600080fd5b34801561024557600080fd5b50610259610254366004612d53565b610766565b60405190151581526020015b60405180910390f35b34801561027a57600080fd5b5061028e610289366004612db1565b6107ff565b005b34801561029c57600080fd5b5061028e6102ab366004612e15565b6108f3565b6102c36102be366004612e15565b61097e565b6040516102659190612ed6565b3480156102dc57600080fd5b506003546102f0906001600160a01b031681565b6040516001600160a01b039091168152602001610265565b34801561031457600080fd5b50610357610323366004612ee9565b60009081527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052604090206001015490565b604051908152602001610265565b61028e610373366004612e15565b610a81565b34801561038457600080fd5b5061028e610393366004612f02565b610c14565b61028e6103a6366004612e15565b610c5e565b3480156103b757600080fd5b5061028e6103c6366004612f02565b610e4d565b3480156103d757600080fd5b506004546102f0906001600160a01b031681565b3480156103f757600080fd5b5061028e610e99565b61028e61040e366004612f5d565b610ece565b34801561041f57600080fd5b5061028e61042e366004613064565b610eed565b34801561043f57600080fd5b50610357611206565b34801561045457600080fd5b506002546102f0906001600160a01b031681565b34801561047457600080fd5b506001546102f0906001600160a01b031681565b34801561049457600080fd5b507fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff16610259565b3480156104cb57600080fd5b506103577f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b981565b3480156104ff57600080fd5b5061028e61050e3660046130d3565b611235565b34801561051f57600080fd5b506005546102f0906001600160a01b031681565b34801561053f57600080fd5b5061028e611360565b34801561055457600080fd5b5061028e61056336600461312d565b611392565b34801561057457600080fd5b50610259610583366004612f02565b60009182527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408084206001600160a01b0393909316845291905290205460ff1690565b3480156105d957600080fd5b50610357600081565b3480156105ee57600080fd5b506103577f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb81565b34801561062257600080fd5b506102c36040518060400160405280600581526020017f352e302e3000000000000000000000000000000000000000000000000000000081525081565b34801561066b57600080fd5b5061028e61067a366004612db1565b6114a8565b34801561068b57600080fd5b5061028e61069a366004613064565b61159c565b3480156106ab57600080fd5b5061028e6106ba36600461317f565b611755565b3480156106cb57600080fd5b5061028e6106da366004612f02565b611a0a565b3480156106eb57600080fd5b506000546102f0906001600160a01b031681565b34801561070b57600080fd5b506103577f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b61028e610741366004612db1565b611a4e565b34801561075257600080fd5b5061028e6107613660046131c2565b611be3565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b0000000000000000000000000000000000000000000000000000000014806107f957507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b600061080a81611cde565b6001600160a01b03821661084a576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002546001600160a01b03161561088d576040517f0c8dc01600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6108b77f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b983611ce8565b5050600280547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6108fb611dd5565b610903611e33565b826001600160a01b0316336001600160a01b03167f2a21062ee9199c2e205622999eeb7c3da73153674f36a0acd3f74fa6af67bde3848460405161094892919061323e565b60405180910390a361097960017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b505050565b60607f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb6109aa81611cde565b6109b2611dd5565b6109ba611e33565b6001600160a01b0385166109fa576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610a07868686611eda565b9050856001600160a01b03167fcaf938de11c367272220bfd1d2baa99ca46665e7bc4d85f00adb51b90fe1fa9f348787604051610a469392919061325a565b60405180910390a29150610a7960017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b509392505050565b610a89611dd5565b610a91611e33565b34600003610acb576040517f7671265e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038316610b0b576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546040516000916001600160a01b03169034908381818185875af1925050503d8060008114610b58576040519150601f19603f3d011682016040523d82523d6000602084013e610b5d565b606091505b5050905080610b98576040517f79cacff100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b836001600160a01b0316336001600160a01b03167f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a43460008787604051610be29493929190613274565b60405180910390a35061097960017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020526040902060010154610c4e81611cde565b610c588383611ce8565b50505050565b7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb610c8881611cde565b610c90611dd5565b610c98611e33565b6001600160a01b038416610cd8576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000846001600160a01b03163460405160006040518083038185875af1925050503d8060008114610d25576040519150601f19603f3d011682016040523d82523d6000602084013e610d2a565b606091505b5050905080610d65576040517facfdb44400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f8fcaa0b50000000000000000000000000000000000000000000000000000000081526001600160a01b03861690638fcaa0b590610dac908790879060040161323e565b600060405180830381600087803b158015610dc657600080fd5b505af1158015610dda573d6000803e3d6000fd5b50505050846001600160a01b03167fd5d7616b1678354a0dea9d7e57e6a090bff5babe9f8d6381fdbad16e89ba311c348686604051610e1b9392919061325a565b60405180910390a250610c5860017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b6001600160a01b0381163314610e8f576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6109798282611f83565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610ec381611cde565b610ecb612047565b50565b610ed66120d7565b610edf826121a7565b610ee982826121b2565b5050565b7f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b9610f1781611cde565b610f1f611dd5565b610f27611e33565b83600003610f61576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038516610fa1576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610fab86866122d6565b610fe1576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b0386811660048301526024820186905287169063095ea7b3906044016020604051808303816000875af1158015611049573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061106d919061329d565b6110a3576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6110ae858484611eda565b506110b986866122d6565b6110ef576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201526000906001600160a01b038816906370a0823190602401602060405180830381865afa15801561114f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061117391906132bf565b90508015611185576111858782612366565b856001600160a01b0316876001600160a01b03167f29c40793bffd84cb810179f15d1ceec72bc7f0785514c668ba36645cf99b73828787876040516111cc9392919061325a565b60405180910390a3506111fe60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b505050505050565b60006112106124cf565b507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc90565b600480546040517f40c10f190000000000000000000000000000000000000000000000000000000081523092810192909252602482018590526001600160a01b0316906340c10f1990604401600060405180830381600087803b15801561129b57600080fd5b505af11580156112af573d6000803e3d6000fd5b50506004546112cd92506001600160a01b0316905085858585610eed565b600480546040517f70a0823100000000000000000000000000000000000000000000000000000000815230928101929092526001600160a01b0316906370a0823190602401602060405180830381865afa15801561132f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061135391906132bf565b15610c5857610c586132d8565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61138a81611cde565b610ecb612531565b61139a611dd5565b6113a2611e33565b836000036113dc576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03851661141c576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6114273384866125aa565b846001600160a01b0316336001600160a01b03167f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a4868686866040516114709493929190613274565b60405180910390a36114a160017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b5050505050565b60006114b381611cde565b6001600160a01b0382166114f3576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000546001600160a01b031615611536576040517fb337f37800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6115607f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b983611ce8565b5050600080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b7f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b96115c681611cde565b6115ce611dd5565b6115d6611e33565b83600003611610576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038516611650576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6116646001600160a01b0387168686612733565b6040517f8fcaa0b50000000000000000000000000000000000000000000000000000000081526001600160a01b03861690638fcaa0b5906116ab908690869060040161323e565b600060405180830381600087803b1580156116c557600080fd5b505af11580156116d9573d6000803e3d6000fd5b50505050846001600160a01b0316866001600160a01b03167f723fc7be2448075379e4fdf1e6bf5fead954d2668d2da05dcb44ccfec4beeda78686866040516117249392919061325a565b60405180910390a36111fe60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156117a05750825b905060008267ffffffffffffffff1660011480156117bd5750303b155b9050811580156117cb575080155b15611802576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84547fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000016600117855583156118635784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff16680100000000000000001785555b6001600160a01b038816158061188057506001600160a01b038716155b156118b7576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6118bf6127a7565b6118c76127af565b6118cf6127a7565b6118d76127bf565b6118e2600087611ce8565b5061190d7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a87611ce8565b50600180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b038a1617905561196b7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb89611ce8565b50600380547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0389161790558315611a005784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b5050505050505050565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020526040902060010154611a4481611cde565b610c588383611f83565b611a56611dd5565b611a5e611e33565b34600003611a98576040517f7671265e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038116611ad8576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546040516000916001600160a01b03169034908381818185875af1925050503d8060008114611b25576040519150601f19603f3d011682016040523d82523d6000602084013e611b2a565b606091505b5050905080611b65576040517f79cacff100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60408051348152600060208201819052606082840181905282015290516001600160a01b0384169133917f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a49181900360800190a350610ecb60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b611beb611dd5565b611bf3611e33565b81600003611c2d576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038316611c6d576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611c783382846125aa565b826001600160a01b0316336001600160a01b03167f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a484846040516109489291909182526001600160a01b0316602082015260606040820181905260009082015260800190565b610ecb81336127cf565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff16611dcb576000848152602082815260408083206001600160a01b0387168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055611d813390565b6001600160a01b0316836001600160a01b0316857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a460019150506107f9565b60009150506107f9565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff1615611e31576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0080547ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01611eae576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60029055565b60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b6060600080856001600160a01b0316348686604051611efa929190613307565b60006040518083038185875af1925050503d8060008114611f37576040519150601f19603f3d011682016040523d82523d6000602084013e611f3c565b606091505b509150915081611f78576040517facfdb44400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b9150505b9392505050565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff1615611dcb576000848152602082815260408083206001600160a01b038716808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339287917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a460019150506107f9565b61204f61285c565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001681557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a150565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148061217057507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166121647f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b6001600160a01b031614155b15611e31576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610ee981611cde565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa92505050801561222a575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252612227918101906132bf565b60015b612270576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b03831660048201526024015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc81146122cc576040517faa1d49a400000000000000000000000000000000000000000000000000000000815260048101829052602401612267565b61097983836128b7565b6040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b038281166004830152600060248301819052919084169063095ea7b3906044016020604051808303816000875af1158015612342573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f7c919061329d565b6003546001600160a01b03908116908316036124b5576002546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152602481018390529083169063095ea7b3906044016020604051808303816000875af11580156123e8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061240c919061329d565b612442576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002546040517f743e0c9b000000000000000000000000000000000000000000000000000000008152600481018390526001600160a01b039091169063743e0c9b90602401600060405180830381600087803b1580156124a157600080fd5b505af11580156111fe573d6000803e3d6000fd5b600054610ee9906001600160a01b03848116911683612733565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614611e31576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612539611dd5565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011781557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258336120b9565b6003546001600160a01b0390811690831603612717576125d56001600160a01b03831684308461290d565b6002546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152602481018390529083169063095ea7b3906044016020604051808303816000875af1158015612641573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612665919061329d565b61269b576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002546040517f743e0c9b000000000000000000000000000000000000000000000000000000008152600481018390526001600160a01b039091169063743e0c9b90602401600060405180830381600087803b1580156126fa57600080fd5b505af115801561270e573d6000803e3d6000fd5b50505050505050565b600054610979906001600160a01b03848116918691168461290d565b6040516001600160a01b0383811660248301526044820183905261097991859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050612946565b611e316129c2565b6127b76129c2565b611e31612a29565b6127c76129c2565b611e31612a31565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408083206001600160a01b038516845290915290205460ff16610ee9576040517fe2517d3f0000000000000000000000000000000000000000000000000000000081526001600160a01b038216600482015260248101839052604401612267565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff16611e31576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6128c082612a82565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a2805115612905576109798282612b2a565b610ee9612ba0565b6040516001600160a01b038481166024830152838116604483015260648201839052610c589186918216906323b872dd90608401612760565b600061295b6001600160a01b03841683612bd8565b9050805160001415801561298057508080602001905181019061297e919061329d565b155b15610979576040517f5274afe70000000000000000000000000000000000000000000000000000000081526001600160a01b0384166004820152602401612267565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff16611e31576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611eb46129c2565b612a396129c2565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055565b806001600160a01b03163b600003612ad1576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b0382166004820152602401612267565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6060600080846001600160a01b031684604051612b479190613317565b600060405180830381855af49150503d8060008114612b82576040519150601f19603f3d011682016040523d82523d6000602084013e612b87565b606091505b5091509150612b97858383612be6565b95945050505050565b3415611e31576040517fb398979f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6060611f7c83836000612c5b565b606082612bfb57612bf682612d11565b611f7c565b8151158015612c1257506001600160a01b0384163b155b15612c54576040517f9996b3150000000000000000000000000000000000000000000000000000000081526001600160a01b0385166004820152602401612267565b5080611f7c565b606081471015612c99576040517fcd786059000000000000000000000000000000000000000000000000000000008152306004820152602401612267565b600080856001600160a01b03168486604051612cb59190613317565b60006040518083038185875af1925050503d8060008114612cf2576040519150601f19603f3d011682016040523d82523d6000602084013e612cf7565b606091505b5091509150612d07868383612be6565b9695505050505050565b805115612d215780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060208284031215612d6557600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114611f7c57600080fd5b80356001600160a01b0381168114612dac57600080fd5b919050565b600060208284031215612dc357600080fd5b611f7c82612d95565b60008083601f840112612dde57600080fd5b50813567ffffffffffffffff811115612df657600080fd5b602083019150836020828501011115612e0e57600080fd5b9250929050565b600080600060408486031215612e2a57600080fd5b612e3384612d95565b9250602084013567ffffffffffffffff811115612e4f57600080fd5b612e5b86828701612dcc565b9497909650939450505050565b60005b83811015612e83578181015183820152602001612e6b565b50506000910152565b60008151808452612ea4816020860160208601612e68565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000611f7c6020830184612e8c565b600060208284031215612efb57600080fd5b5035919050565b60008060408385031215612f1557600080fd5b82359150612f2560208401612d95565b90509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60008060408385031215612f7057600080fd5b612f7983612d95565b9150602083013567ffffffffffffffff811115612f9557600080fd5b8301601f81018513612fa657600080fd5b803567ffffffffffffffff811115612fc057612fc0612f2e565b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8501160116810181811067ffffffffffffffff8211171561302c5761302c612f2e565b60405281815282820160200187101561304457600080fd5b816020840160208301376000602083830101528093505050509250929050565b60008060008060006080868803121561307c57600080fd5b61308586612d95565b945061309360208701612d95565b935060408601359250606086013567ffffffffffffffff8111156130b657600080fd5b6130c288828901612dcc565b969995985093965092949392505050565b600080600080606085870312156130e957600080fd5b6130f285612d95565b935060208501359250604085013567ffffffffffffffff81111561311557600080fd5b61312187828801612dcc565b95989497509550505050565b60008060008060006080868803121561314557600080fd5b61314e86612d95565b94506020860135935061316360408701612d95565b9250606086013567ffffffffffffffff8111156130b657600080fd5b60008060006060848603121561319457600080fd5b61319d84612d95565b92506131ab60208501612d95565b91506131b960408501612d95565b90509250925092565b6000806000606084860312156131d757600080fd5b6131e084612d95565b9250602084013591506131b960408501612d95565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b6020815260006132526020830184866131f5565b949350505050565b838152604060208201526000612b976040830184866131f5565b8481526001600160a01b0384166020820152606060408201526000612d076060830184866131f5565b6000602082840312156132af57600080fd5b81518015158114611f7c57600080fd5b6000602082840312156132d157600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b8183823760009101908152919050565b60008251613329818460208701612e68565b919091019291505056fea2646970667358221220d968781c52811c0ad33400d2e6fd7deb96a254471b52dcc00cbee1f639dac0b664736f6c634300081a0033608060405234801561001057600080fd5b50604051610c9f380380610c9f83398101604081905261002f9161010d565b8181600361003d83826101ff565b50600461004a82826101ff565b50505050506102bd565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261007b57600080fd5b81516001600160401b0381111561009457610094610054565b604051601f8201601f19908116603f011681016001600160401b03811182821017156100c2576100c2610054565b6040528181528382016020018510156100da57600080fd5b60005b828110156100f9576020818601810151838301820152016100dd565b506000918101602001919091529392505050565b6000806040838503121561012057600080fd5b82516001600160401b0381111561013657600080fd5b6101428582860161006a565b602085015190935090506001600160401b0381111561016057600080fd5b61016c8582860161006a565b9150509250929050565b600181811c9082168061018a57607f821691505b6020821081036101aa57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156101fa57806000526020600020601f840160051c810160208510156101d75750805b601f840160051c820191505b818110156101f757600081556001016101e3565b50505b505050565b81516001600160401b0381111561021857610218610054565b61022c816102268454610176565b846101b0565b6020601f82116001811461026057600083156102485750848201515b600019600385901b1c1916600184901b1784556101f7565b600084815260208120601f198516915b828110156102905787850151825560209485019460019092019101610270565b50848210156102ae5786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b6109d3806102cc6000396000f3fe608060405234801561001057600080fd5b50600436106100be5760003560e01c806340c10f191161007657806395d89b411161005b57806395d89b4114610183578063a9059cbb1461018b578063dd62ed3e1461019e57600080fd5b806340c10f191461013857806370a082311461014d57600080fd5b806318160ddd116100a757806318160ddd1461010457806323b872dd14610116578063313ce5671461012957600080fd5b806306fdde03146100c3578063095ea7b3146100e1575b600080fd5b6100cb6101e4565b6040516100d891906107bf565b60405180910390f35b6100f46100ef366004610854565b610276565b60405190151581526020016100d8565b6002545b6040519081526020016100d8565b6100f461012436600461087e565b610290565b604051601281526020016100d8565b61014b610146366004610854565b6102b4565b005b61010861015b3660046108bb565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6100cb6102c2565b6100f4610199366004610854565b6102d1565b6101086101ac3660046108dd565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6060600380546101f390610910565b80601f016020809104026020016040519081016040528092919081815260200182805461021f90610910565b801561026c5780601f106102415761010080835404028352916020019161026c565b820191906000526020600020905b81548152906001019060200180831161024f57829003601f168201915b5050505050905090565b6000336102848185856102df565b60019150505b92915050565b60003361029e8582856102f1565b6102a98585856103c5565b506001949350505050565b6102be8282610470565b5050565b6060600480546101f390610910565b6000336102848185856103c5565b6102ec83838360016104cc565b505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146103bf57818110156103b0576040517ffb8f41b200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416600482015260248101829052604481018390526064015b60405180910390fd5b6103bf848484840360006104cc565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8316610415576040517f96c6fd1e000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff8216610465576040517fec442f05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b6102ec838383610614565b73ffffffffffffffffffffffffffffffffffffffff82166104c0576040517fec442f05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b6102be60008383610614565b73ffffffffffffffffffffffffffffffffffffffff841661051c576040517fe602df05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff831661056c576040517f94280d62000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260016020908152604080832093871683529290522082905580156103bf578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161060691815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff831661064c5780600260008282546106419190610963565b909155506106fe9050565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260208190526040902054818110156106d2576040517fe450d38c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8516600482015260248101829052604481018390526064016103a7565b73ffffffffffffffffffffffffffffffffffffffff841660009081526020819052604090209082900390555b73ffffffffffffffffffffffffffffffffffffffff821661072757600280548290039055610753565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090208054820190555b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516107b291815260200190565b60405180910390a3505050565b602081526000825180602084015260005b818110156107ed57602081860181015160408684010152016107d0565b5060006040828501015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011684010191505092915050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461084f57600080fd5b919050565b6000806040838503121561086757600080fd5b6108708361082b565b946020939093013593505050565b60008060006060848603121561089357600080fd5b61089c8461082b565b92506108aa6020850161082b565b929592945050506040919091013590565b6000602082840312156108cd57600080fd5b6108d68261082b565b9392505050565b600080604083850312156108f057600080fd5b6108f98361082b565b91506109076020840161082b565b90509250929050565b600181811c9082168061092457607f821691505b60208210810361095d577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b8082018082111561028a577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea26469706673582212207e804ca539d49155d2b6bc19268ce22f9f857027c75247d69fb0d56a089c93d464736f6c634300081a003360a060405234801561001057600080fd5b5060405161140b38038061140b83398101604081905261002f916101b3565b60016000556002805460ff191690556001600160a01b038316158061005b57506001600160a01b038216155b8061006d57506001600160a01b038116155b1561008b5760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b0383166080526100a3600082610102565b506100ce7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a82610102565b506100f97f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e483610102565b505050506101f6565b60008281526001602090815260408083206001600160a01b038516845290915281205460ff1661018d5760008381526001602081815260408084206001600160a01b0387168086529252808420805460ff19169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a4506001610191565b5060005b92915050565b80516001600160a01b03811681146101ae57600080fd5b919050565b6000806000606084860312156101c857600080fd5b6101d184610197565b92506101df60208501610197565b91506101ed60408501610197565b90509250925092565b6080516111de61022d60003960008181610132015281816103c5015281816104270152818161065801526106ba01526111de6000f3fe608060405234801561001057600080fd5b50600436106101005760003560e01c80638456cb5911610097578063c8a0236211610066578063c8a0236214610276578063d547741f14610289578063d9caed121461029c578063e63ab1e9146102af57600080fd5b80638456cb59146101f957806385f438c11461020157806391d1485414610228578063a217fddf1461026e57600080fd5b80632f2ff15d116100d35780632f2ff15d146101c057806336568abe146101d35780633f4ba83a146101e65780635c975abb146101ee57600080fd5b806301ffc9a714610105578063116191b61461012d57806321fc65f214610179578063248a9ca31461018e575b600080fd5b610118610113366004610f04565b6102d6565b60405190151581526020015b60405180910390f35b6101547f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610124565b61018c610187366004610f6f565b61036f565b005b6101b261019c36600461100c565b6000908152600160208190526040909120015490565b604051908152602001610124565b61018c6101ce366004611025565b610511565b61018c6101e1366004611025565b61053d565b61018c61059b565b60025460ff16610118565b61018c6105d0565b6101b27f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b610118610236366004611025565b600091825260016020908152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b6101b2600081565b61018c610284366004610f6f565b610602565b61018c610297366004611025565b61078a565b61018c6102aa366004611051565b6107b0565b6101b27f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061036957507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b61037761087d565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e46103a1816108c0565b6103a96108ca565b6103ea73ffffffffffffffffffffffffffffffffffffffff87167f000000000000000000000000000000000000000000000000000000000000000086610909565b6040517f5131ab5900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690635131ab599061046490899089908990899089906004016110d7565b600060405180830381600087803b15801561047e57600080fd5b505af1158015610492573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167f85b5be9cf454e05e0bddf49315178102227c312078eefa3c00294fb4d912ae4e8686866040516104f793929190611134565b60405180910390a35061050a6001600055565b5050505050565b6000828152600160208190526040909120015461052d816108c0565b6105378383610996565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8116331461058c576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6105968282610a61565b505050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a6105c5816108c0565b6105cd610b20565b50565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a6105fa816108c0565b6105cd610b9d565b61060a61087d565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e4610634816108c0565b61063c6108ca565b61067d73ffffffffffffffffffffffffffffffffffffffff87167f000000000000000000000000000000000000000000000000000000000000000086610909565b6040517fb8969bd400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063b8969bd4906106f790899089908990899089906004016110d7565b600060405180830381600087803b15801561071157600080fd5b505af1158015610725573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fb9d4efa96044e5f5e03e696fa9ae2ff66911cc27e8a637c3627c75bc5b2241c88686866040516104f793929190611134565b600082815260016020819052604090912001546107a6816108c0565b6105378383610a61565b6107b861087d565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e46107e2816108c0565b6107ea6108ca565b61080b73ffffffffffffffffffffffffffffffffffffffff85168484610909565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f9b1bfa7fa9ee420a16e124f794c35ac9f90472acc99140eb2f6447c714cad8eb8460405161086a91815260200190565b60405180910390a3506105966001600055565b6002600054036108b9576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b6105cd8133610bf8565b60025460ff1615610907576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6040805173ffffffffffffffffffffffffffffffffffffffff8416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb00000000000000000000000000000000000000000000000000000000179052610596908490610c89565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff16610a5957600083815260016020818152604080842073ffffffffffffffffffffffffffffffffffffffff8716808652925280842080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a4506001610369565b506000610369565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff1615610a5957600083815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8616808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a4506001610369565b610b28610d1f565b600280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b610ba56108ca565b600280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258610b733390565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16610c85576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82166004820152602481018390526044015b60405180910390fd5b5050565b6000610cab73ffffffffffffffffffffffffffffffffffffffff841683610d5b565b90508051600014158015610cd0575080806020019051810190610cce9190611157565b155b15610596576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84166004820152602401610c7c565b60025460ff16610907576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6060610d6983836000610d70565b9392505050565b606081471015610dae576040517fcd786059000000000000000000000000000000000000000000000000000000008152306004820152602401610c7c565b6000808573ffffffffffffffffffffffffffffffffffffffff168486604051610dd79190611179565b60006040518083038185875af1925050503d8060008114610e14576040519150601f19603f3d011682016040523d82523d6000602084013e610e19565b606091505b5091509150610e29868383610e33565b9695505050505050565b606082610e4857610e4382610ec2565b610d69565b8151158015610e6c575073ffffffffffffffffffffffffffffffffffffffff84163b155b15610ebb576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85166004820152602401610c7c565b5080610d69565b805115610ed25780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060208284031215610f1657600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610d6957600080fd5b803573ffffffffffffffffffffffffffffffffffffffff81168114610f6a57600080fd5b919050565b600080600080600060808688031215610f8757600080fd5b610f9086610f46565b9450610f9e60208701610f46565b935060408601359250606086013567ffffffffffffffff811115610fc157600080fd5b8601601f81018813610fd257600080fd5b803567ffffffffffffffff811115610fe957600080fd5b886020828401011115610ffb57600080fd5b959894975092955050506020019190565b60006020828403121561101e57600080fd5b5035919050565b6000806040838503121561103857600080fd5b8235915061104860208401610f46565b90509250929050565b60008060006060848603121561106657600080fd5b61106f84610f46565b925061107d60208501610f46565b929592945050506040919091013590565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff8616815273ffffffffffffffffffffffffffffffffffffffff8516602082015283604082015260806060820152600061112960808301848661108e565b979650505050505050565b83815260406020820152600061114e60408301848661108e565b95945050505050565b60006020828403121561116957600080fd5b81518015158114610d6957600080fd5b6000825160005b8181101561119a5760208186018101518583015201611180565b50600092019182525091905056fea264697066735822122069d5c5c3cb2752c876b6a2138d8d9b66bac6bd1b48a1fe98417eea81faf02a3e64736f6c634300081a0033"; + "0x60a060405230608052600580546001600160a01b0319163317905534801561002657600080fd5b5061002f610154565b600554600180546001600160a01b039092166001600160a01b031992831617905560028054610123921691909117905560405161006b90610206565b60408082526004908201819052631d195cdd60e21b606083015260806020830181905282015263151154d560e21b60a082015260c001604051809103906000f0801580156100bd573d6000803e3d6000fd5b50600480546001600160a01b0319166001600160a01b039283161790556001546040513092919091169082906100f290610213565b6001600160a01b03938416815291831660208301529091166040820152606001604051809103906000f08015801561012e573d6000803e3d6000fd5b50600080546001600160a01b0319166001600160a01b0392909216919091179055610220565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156101a45760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146102035780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b610c9f8061372c83390190565b6116fe806143cb83390190565b6080516134e3610249600039600081816120e20152818161210b015261259701526134e36000f3fe6080604052600436106102345760003560e01c80635c975abb11610138578063ad3cb1cc116100b0578063d547741f1161007f578063e63ab1e911610064578063e63ab1e9146106ff578063f340fa0114610733578063f45346dc1461074657600080fd5b8063d547741f146106bf578063dda79b75146106df57600080fd5b8063ad3cb1cc14610616578063ae7a3a6f1461065f578063b8969bd41461067f578063c0c53b8b1461069f57600080fd5b80638456cb591161010757806391d14854116100ec57806391d1485414610568578063a217fddf146105cd578063a783c789146105e257600080fd5b80638456cb59146105335780638c6f037f1461054857600080fd5b80635c975abb146104885780635d62c860146104bf5780636ab90f9b146104f357806381100bf01461051357600080fd5b806335c018db116101cb5780634f1ef2861161019a57806352d1902d1161017f57806352d1902d1461043357806357bec62f146104485780635b1125911461046857600080fd5b80634f1ef286146104005780635131ab591461041357600080fd5b806335c018db1461039857806336568abe146103ab5780633c2f05a8146103cb5780633f4ba83a146103eb57600080fd5b806321e093b11161020757806321e093b1146102d0578063248a9ca31461030857806329c59b5d146103655780632f2ff15d1461037857600080fd5b806301ffc9a71461023957806310188aef1461026e5780631b8b921d146102905780631cff79cd146102b0575b600080fd5b34801561024557600080fd5b50610259610254366004612ecd565b610766565b60405190151581526020015b60405180910390f35b34801561027a57600080fd5b5061028e610289366004612f2b565b6107ff565b005b34801561029c57600080fd5b5061028e6102ab366004612f8f565b6108f3565b6102c36102be366004612f8f565b61097e565b6040516102659190613050565b3480156102dc57600080fd5b506003546102f0906001600160a01b031681565b6040516001600160a01b039091168152602001610265565b34801561031457600080fd5b50610357610323366004613063565b60009081527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052604090206001015490565b604051908152602001610265565b61028e610373366004612f8f565b610a81565b34801561038457600080fd5b5061028e61039336600461307c565b610c14565b61028e6103a6366004612f8f565b610c5e565b3480156103b757600080fd5b5061028e6103c636600461307c565b610e4d565b3480156103d757600080fd5b506004546102f0906001600160a01b031681565b3480156103f757600080fd5b5061028e610e99565b61028e61040e3660046130d7565b610ece565b34801561041f57600080fd5b5061028e61042e3660046131de565b610eed565b34801561043f57600080fd5b50610357611206565b34801561045457600080fd5b506002546102f0906001600160a01b031681565b34801561047457600080fd5b506001546102f0906001600160a01b031681565b34801561049457600080fd5b507fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff16610259565b3480156104cb57600080fd5b506103577f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b981565b3480156104ff57600080fd5b5061028e61050e36600461324d565b611235565b34801561051f57600080fd5b506005546102f0906001600160a01b031681565b34801561053f57600080fd5b5061028e611360565b34801561055457600080fd5b5061028e6105633660046132a7565b611392565b34801561057457600080fd5b5061025961058336600461307c565b60009182527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408084206001600160a01b0393909316845291905290205460ff1690565b3480156105d957600080fd5b50610357600081565b3480156105ee57600080fd5b506103577f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb81565b34801561062257600080fd5b506102c36040518060400160405280600581526020017f352e302e3000000000000000000000000000000000000000000000000000000081525081565b34801561066b57600080fd5b5061028e61067a366004612f2b565b6114a8565b34801561068b57600080fd5b5061028e61069a3660046131de565b61159c565b3480156106ab57600080fd5b5061028e6106ba3660046132f9565b611755565b3480156106cb57600080fd5b5061028e6106da36600461307c565b611a0a565b3480156106eb57600080fd5b506000546102f0906001600160a01b031681565b34801561070b57600080fd5b506103577f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b61028e610741366004612f2b565b611a4e565b34801561075257600080fd5b5061028e61076136600461333c565b611be3565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b0000000000000000000000000000000000000000000000000000000014806107f957507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b600061080a81611cde565b6001600160a01b03821661084a576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002546001600160a01b03161561088d576040517f0c8dc01600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6108b77f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b983611ce8565b5050600280547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6108fb611dd5565b610903611e33565b826001600160a01b0316336001600160a01b03167f2a21062ee9199c2e205622999eeb7c3da73153674f36a0acd3f74fa6af67bde384846040516109489291906133b8565b60405180910390a361097960017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b505050565b60607f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb6109aa81611cde565b6109b2611dd5565b6109ba611e33565b6001600160a01b0385166109fa576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610a07868686611eda565b9050856001600160a01b03167fcaf938de11c367272220bfd1d2baa99ca46665e7bc4d85f00adb51b90fe1fa9f348787604051610a46939291906133d4565b60405180910390a29150610a7960017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b509392505050565b610a89611dd5565b610a91611e33565b34600003610acb576040517f7671265e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038316610b0b576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546040516000916001600160a01b03169034908381818185875af1925050503d8060008114610b58576040519150601f19603f3d011682016040523d82523d6000602084013e610b5d565b606091505b5050905080610b98576040517f79cacff100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b836001600160a01b0316336001600160a01b03167f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a43460008787604051610be294939291906133ee565b60405180910390a35061097960017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020526040902060010154610c4e81611cde565b610c588383611ce8565b50505050565b7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb610c8881611cde565b610c90611dd5565b610c98611e33565b6001600160a01b038416610cd8576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000846001600160a01b03163460405160006040518083038185875af1925050503d8060008114610d25576040519150601f19603f3d011682016040523d82523d6000602084013e610d2a565b606091505b5050905080610d65576040517facfdb44400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f8fcaa0b50000000000000000000000000000000000000000000000000000000081526001600160a01b03861690638fcaa0b590610dac90879087906004016133b8565b600060405180830381600087803b158015610dc657600080fd5b505af1158015610dda573d6000803e3d6000fd5b50505050846001600160a01b03167fd5d7616b1678354a0dea9d7e57e6a090bff5babe9f8d6381fdbad16e89ba311c348686604051610e1b939291906133d4565b60405180910390a250610c5860017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b6001600160a01b0381163314610e8f576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6109798282611f83565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610ec381611cde565b610ecb612047565b50565b610ed66120d7565b610edf826121a7565b610ee982826121b2565b5050565b7f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b9610f1781611cde565b610f1f611dd5565b610f27611e33565b83600003610f61576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038516610fa1576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610fab86866122d6565b610fe1576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b0386811660048301526024820186905287169063095ea7b3906044016020604051808303816000875af1158015611049573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061106d9190613417565b6110a3576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6110ae858484611eda565b506110b986866122d6565b6110ef576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201526000906001600160a01b038816906370a0823190602401602060405180830381865afa15801561114f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111739190613439565b90508015611185576111858782612366565b856001600160a01b0316876001600160a01b03167f29c40793bffd84cb810179f15d1ceec72bc7f0785514c668ba36645cf99b73828787876040516111cc939291906133d4565b60405180910390a3506111fe60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b505050505050565b600061121061258c565b507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc90565b600480546040517f40c10f190000000000000000000000000000000000000000000000000000000081523092810192909252602482018590526001600160a01b0316906340c10f1990604401600060405180830381600087803b15801561129b57600080fd5b505af11580156112af573d6000803e3d6000fd5b50506004546112cd92506001600160a01b0316905085858585610eed565b600480546040517f70a0823100000000000000000000000000000000000000000000000000000000815230928101929092526001600160a01b0316906370a0823190602401602060405180830381865afa15801561132f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113539190613439565b15610c5857610c58613452565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61138a81611cde565b610ecb6125ee565b61139a611dd5565b6113a2611e33565b836000036113dc576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03851661141c576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611427338486612667565b846001600160a01b0316336001600160a01b03167f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a48686868660405161147094939291906133ee565b60405180910390a36114a160017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b5050505050565b60006114b381611cde565b6001600160a01b0382166114f3576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000546001600160a01b031615611536576040517fb337f37800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6115607f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b983611ce8565b5050600080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b7f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b96115c681611cde565b6115ce611dd5565b6115d6611e33565b83600003611610576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038516611650576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6116646001600160a01b03871686866128ad565b6040517f8fcaa0b50000000000000000000000000000000000000000000000000000000081526001600160a01b03861690638fcaa0b5906116ab90869086906004016133b8565b600060405180830381600087803b1580156116c557600080fd5b505af11580156116d9573d6000803e3d6000fd5b50505050846001600160a01b0316866001600160a01b03167f723fc7be2448075379e4fdf1e6bf5fead954d2668d2da05dcb44ccfec4beeda7868686604051611724939291906133d4565b60405180910390a36111fe60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156117a05750825b905060008267ffffffffffffffff1660011480156117bd5750303b155b9050811580156117cb575080155b15611802576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84547fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000016600117855583156118635784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff16680100000000000000001785555b6001600160a01b038816158061188057506001600160a01b038716155b156118b7576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6118bf612921565b6118c7612929565b6118cf612921565b6118d7612939565b6118e2600087611ce8565b5061190d7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a87611ce8565b50600180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b038a1617905561196b7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb89611ce8565b50600380547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0389161790558315611a005784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b5050505050505050565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020526040902060010154611a4481611cde565b610c588383611f83565b611a56611dd5565b611a5e611e33565b34600003611a98576040517f7671265e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038116611ad8576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546040516000916001600160a01b03169034908381818185875af1925050503d8060008114611b25576040519150601f19603f3d011682016040523d82523d6000602084013e611b2a565b606091505b5050905080611b65576040517f79cacff100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60408051348152600060208201819052606082840181905282015290516001600160a01b0384169133917f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a49181900360800190a350610ecb60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b611beb611dd5565b611bf3611e33565b81600003611c2d576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038316611c6d576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611c78338284612667565b826001600160a01b0316336001600160a01b03167f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a484846040516109489291909182526001600160a01b0316602082015260606040820181905260009082015260800190565b610ecb8133612949565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff16611dcb576000848152602082815260408083206001600160a01b0387168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055611d813390565b6001600160a01b0316836001600160a01b0316857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a460019150506107f9565b60009150506107f9565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff1615611e31576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0080547ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01611eae576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60029055565b60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b6060600080856001600160a01b0316348686604051611efa929190613481565b60006040518083038185875af1925050503d8060008114611f37576040519150601f19603f3d011682016040523d82523d6000602084013e611f3c565b606091505b509150915081611f78576040517facfdb44400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b9150505b9392505050565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff1615611dcb576000848152602082815260408083206001600160a01b038716808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339287917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a460019150506107f9565b61204f6129d6565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001681557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a150565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148061217057507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166121647f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b6001600160a01b031614155b15611e31576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610ee981611cde565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa92505050801561222a575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820190925261222791810190613439565b60015b612270576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b03831660048201526024015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc81146122cc576040517faa1d49a400000000000000000000000000000000000000000000000000000000815260048101829052602401612267565b6109798383612a31565b6040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b038281166004830152600060248301819052919084169063095ea7b3906044016020604051808303816000875af1158015612342573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f7c9190613417565b6003546001600160a01b03908116908316036124b5576002546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152602481018390529083169063095ea7b3906044016020604051808303816000875af11580156123e8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061240c9190613417565b612442576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002546040517f743e0c9b000000000000000000000000000000000000000000000000000000008152600481018390526001600160a01b039091169063743e0c9b90602401600060405180830381600087803b1580156124a157600080fd5b505af11580156111fe573d6000803e3d6000fd5b6000546040517fd936547e0000000000000000000000000000000000000000000000000000000081526001600160a01b0384811660048301529091169063d936547e90602401602060405180830381865afa158015612518573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061253c9190613417565b612572576040517fac2175f100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600054610ee9906001600160a01b038481169116836128ad565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614611e31576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6125f6611dd5565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011781557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258336120b9565b6003546001600160a01b03908116908316036127d4576126926001600160a01b038316843084612a87565b6002546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152602481018390529083169063095ea7b3906044016020604051808303816000875af11580156126fe573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127229190613417565b612758576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002546040517f743e0c9b000000000000000000000000000000000000000000000000000000008152600481018390526001600160a01b039091169063743e0c9b90602401600060405180830381600087803b1580156127b757600080fd5b505af11580156127cb573d6000803e3d6000fd5b50505050505050565b6000546040517fd936547e0000000000000000000000000000000000000000000000000000000081526001600160a01b0384811660048301529091169063d936547e90602401602060405180830381865afa158015612837573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061285b9190613417565b612891576040517fac2175f100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600054610979906001600160a01b038481169186911684612a87565b6040516001600160a01b0383811660248301526044820183905261097991859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050612ac0565b611e31612b3c565b612931612b3c565b611e31612ba3565b612941612b3c565b611e31612bab565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408083206001600160a01b038516845290915290205460ff16610ee9576040517fe2517d3f0000000000000000000000000000000000000000000000000000000081526001600160a01b038216600482015260248101839052604401612267565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff16611e31576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612a3a82612bfc565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a2805115612a7f576109798282612ca4565b610ee9612d1a565b6040516001600160a01b038481166024830152838116604483015260648201839052610c589186918216906323b872dd906084016128da565b6000612ad56001600160a01b03841683612d52565b90508051600014158015612afa575080806020019051810190612af89190613417565b155b15610979576040517f5274afe70000000000000000000000000000000000000000000000000000000081526001600160a01b0384166004820152602401612267565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff16611e31576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611eb4612b3c565b612bb3612b3c565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055565b806001600160a01b03163b600003612c4b576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b0382166004820152602401612267565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6060600080846001600160a01b031684604051612cc19190613491565b600060405180830381855af49150503d8060008114612cfc576040519150601f19603f3d011682016040523d82523d6000602084013e612d01565b606091505b5091509150612d11858383612d60565b95945050505050565b3415611e31576040517fb398979f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6060611f7c83836000612dd5565b606082612d7557612d7082612e8b565b611f7c565b8151158015612d8c57506001600160a01b0384163b155b15612dce576040517f9996b3150000000000000000000000000000000000000000000000000000000081526001600160a01b0385166004820152602401612267565b5080611f7c565b606081471015612e13576040517fcd786059000000000000000000000000000000000000000000000000000000008152306004820152602401612267565b600080856001600160a01b03168486604051612e2f9190613491565b60006040518083038185875af1925050503d8060008114612e6c576040519150601f19603f3d011682016040523d82523d6000602084013e612e71565b606091505b5091509150612e81868383612d60565b9695505050505050565b805115612e9b5780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060208284031215612edf57600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114611f7c57600080fd5b80356001600160a01b0381168114612f2657600080fd5b919050565b600060208284031215612f3d57600080fd5b611f7c82612f0f565b60008083601f840112612f5857600080fd5b50813567ffffffffffffffff811115612f7057600080fd5b602083019150836020828501011115612f8857600080fd5b9250929050565b600080600060408486031215612fa457600080fd5b612fad84612f0f565b9250602084013567ffffffffffffffff811115612fc957600080fd5b612fd586828701612f46565b9497909650939450505050565b60005b83811015612ffd578181015183820152602001612fe5565b50506000910152565b6000815180845261301e816020860160208601612fe2565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000611f7c6020830184613006565b60006020828403121561307557600080fd5b5035919050565b6000806040838503121561308f57600080fd5b8235915061309f60208401612f0f565b90509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080604083850312156130ea57600080fd5b6130f383612f0f565b9150602083013567ffffffffffffffff81111561310f57600080fd5b8301601f8101851361312057600080fd5b803567ffffffffffffffff81111561313a5761313a6130a8565b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8501160116810181811067ffffffffffffffff821117156131a6576131a66130a8565b6040528181528282016020018710156131be57600080fd5b816020840160208301376000602083830101528093505050509250929050565b6000806000806000608086880312156131f657600080fd5b6131ff86612f0f565b945061320d60208701612f0f565b935060408601359250606086013567ffffffffffffffff81111561323057600080fd5b61323c88828901612f46565b969995985093965092949392505050565b6000806000806060858703121561326357600080fd5b61326c85612f0f565b935060208501359250604085013567ffffffffffffffff81111561328f57600080fd5b61329b87828801612f46565b95989497509550505050565b6000806000806000608086880312156132bf57600080fd5b6132c886612f0f565b9450602086013593506132dd60408701612f0f565b9250606086013567ffffffffffffffff81111561323057600080fd5b60008060006060848603121561330e57600080fd5b61331784612f0f565b925061332560208501612f0f565b915061333360408501612f0f565b90509250925092565b60008060006060848603121561335157600080fd5b61335a84612f0f565b92506020840135915061333360408501612f0f565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b6020815260006133cc60208301848661336f565b949350505050565b838152604060208201526000612d1160408301848661336f565b8481526001600160a01b0384166020820152606060408201526000612e8160608301848661336f565b60006020828403121561342957600080fd5b81518015158114611f7c57600080fd5b60006020828403121561344b57600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b8183823760009101908152919050565b600082516134a3818460208701612fe2565b919091019291505056fea2646970667358221220749992fc5d6c5f5fcb8a3202d9894526b754415bef831ad88ca3d85be39dad4a64736f6c634300081a0033608060405234801561001057600080fd5b50604051610c9f380380610c9f83398101604081905261002f9161010d565b8181600361003d83826101ff565b50600461004a82826101ff565b50505050506102bd565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261007b57600080fd5b81516001600160401b0381111561009457610094610054565b604051601f8201601f19908116603f011681016001600160401b03811182821017156100c2576100c2610054565b6040528181528382016020018510156100da57600080fd5b60005b828110156100f9576020818601810151838301820152016100dd565b506000918101602001919091529392505050565b6000806040838503121561012057600080fd5b82516001600160401b0381111561013657600080fd5b6101428582860161006a565b602085015190935090506001600160401b0381111561016057600080fd5b61016c8582860161006a565b9150509250929050565b600181811c9082168061018a57607f821691505b6020821081036101aa57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156101fa57806000526020600020601f840160051c810160208510156101d75750805b601f840160051c820191505b818110156101f757600081556001016101e3565b50505b505050565b81516001600160401b0381111561021857610218610054565b61022c816102268454610176565b846101b0565b6020601f82116001811461026057600083156102485750848201515b600019600385901b1c1916600184901b1784556101f7565b600084815260208120601f198516915b828110156102905787850151825560209485019460019092019101610270565b50848210156102ae5786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b6109d3806102cc6000396000f3fe608060405234801561001057600080fd5b50600436106100be5760003560e01c806340c10f191161007657806395d89b411161005b57806395d89b4114610183578063a9059cbb1461018b578063dd62ed3e1461019e57600080fd5b806340c10f191461013857806370a082311461014d57600080fd5b806318160ddd116100a757806318160ddd1461010457806323b872dd14610116578063313ce5671461012957600080fd5b806306fdde03146100c3578063095ea7b3146100e1575b600080fd5b6100cb6101e4565b6040516100d891906107bf565b60405180910390f35b6100f46100ef366004610854565b610276565b60405190151581526020016100d8565b6002545b6040519081526020016100d8565b6100f461012436600461087e565b610290565b604051601281526020016100d8565b61014b610146366004610854565b6102b4565b005b61010861015b3660046108bb565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6100cb6102c2565b6100f4610199366004610854565b6102d1565b6101086101ac3660046108dd565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6060600380546101f390610910565b80601f016020809104026020016040519081016040528092919081815260200182805461021f90610910565b801561026c5780601f106102415761010080835404028352916020019161026c565b820191906000526020600020905b81548152906001019060200180831161024f57829003601f168201915b5050505050905090565b6000336102848185856102df565b60019150505b92915050565b60003361029e8582856102f1565b6102a98585856103c5565b506001949350505050565b6102be8282610470565b5050565b6060600480546101f390610910565b6000336102848185856103c5565b6102ec83838360016104cc565b505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146103bf57818110156103b0576040517ffb8f41b200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416600482015260248101829052604481018390526064015b60405180910390fd5b6103bf848484840360006104cc565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8316610415576040517f96c6fd1e000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff8216610465576040517fec442f05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b6102ec838383610614565b73ffffffffffffffffffffffffffffffffffffffff82166104c0576040517fec442f05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b6102be60008383610614565b73ffffffffffffffffffffffffffffffffffffffff841661051c576040517fe602df05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff831661056c576040517f94280d62000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260016020908152604080832093871683529290522082905580156103bf578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161060691815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff831661064c5780600260008282546106419190610963565b909155506106fe9050565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260208190526040902054818110156106d2576040517fe450d38c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8516600482015260248101829052604481018390526064016103a7565b73ffffffffffffffffffffffffffffffffffffffff841660009081526020819052604090209082900390555b73ffffffffffffffffffffffffffffffffffffffff821661072757600280548290039055610753565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090208054820190555b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516107b291815260200190565b60405180910390a3505050565b602081526000825180602084015260005b818110156107ed57602081860181015160408684010152016107d0565b5060006040828501015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011684010191505092915050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461084f57600080fd5b919050565b6000806040838503121561086757600080fd5b6108708361082b565b946020939093013593505050565b60008060006060848603121561089357600080fd5b61089c8461082b565b92506108aa6020850161082b565b929592945050506040919091013590565b6000602082840312156108cd57600080fd5b6108d68261082b565b9392505050565b600080604083850312156108f057600080fd5b6108f98361082b565b91506109076020840161082b565b90509250929050565b600181811c9082168061092457607f821691505b60208210810361095d577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b8082018082111561028a577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea26469706673582212207e804ca539d49155d2b6bc19268ce22f9f857027c75247d69fb0d56a089c93d464736f6c634300081a003360a060405234801561001057600080fd5b506040516116fe3803806116fe83398101604081905261002f916101e5565b60016000556002805460ff191690556001600160a01b038316158061005b57506001600160a01b038216155b8061006d57506001600160a01b038116155b1561008b5760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b0383166080526100a3600082610134565b506100ce7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a82610134565b506100f97f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e483610134565b506101126000805160206116de83398151915282610134565b5061012b6000805160206116de83398151915283610134565b50505050610228565b60008281526001602090815260408083206001600160a01b038516845290915281205460ff166101bf5760008381526001602081815260408084206001600160a01b0387168086529252808420805460ff19169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45060016101c3565b5060005b92915050565b80516001600160a01b03811681146101e057600080fd5b919050565b6000806000606084860312156101fa57600080fd5b610203846101c9565b9250610211602085016101c9565b915061021f604085016101c9565b90509250925092565b60805161147f61025f6000396000818161019e0152818161050001528181610562015281816108f70152610959015261147f6000f3fe608060405234801561001057600080fd5b506004361061016c5760003560e01c806385f438c1116100cd578063c8a0236211610081578063d936547e11610066578063d936547e14610355578063d9caed1214610378578063e63ab1e91461038b57600080fd5b8063c8a023621461032f578063d547741f1461034257600080fd5b80639a590427116100b25780639a590427146103015780639b19251a14610314578063a217fddf1461032757600080fd5b806385f438c11461029457806391d14854146102bb57600080fd5b806336568abe11610124578063570618e111610109578063570618e11461025a5780635c975abb146102815780638456cb591461028c57600080fd5b806336568abe1461023f5780633f4ba83a1461025257600080fd5b806321fc65f21161015557806321fc65f2146101e5578063248a9ca3146101fa5780632f2ff15d1461022c57600080fd5b806301ffc9a714610171578063116191b614610199575b600080fd5b61018461017f36600461118a565b6103b2565b60405190151581526020015b60405180910390f35b6101c07f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610190565b6101f86101f33660046111f5565b61044b565b005b61021e610208366004611292565b6000908152600160208190526040909120015490565b604051908152602001610190565b6101f861023a3660046112ab565b61064c565b6101f861024d3660046112ab565b610678565b6101f86106d6565b61021e7f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a81565b60025460ff16610184565b6101f861070b565b61021e7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b6101846102c93660046112ab565b600091825260016020908152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b6101f861030f3660046112d7565b61073d565b6101f86103223660046112d7565b6107be565b61021e600081565b6101f861033d3660046111f5565b610842565b6101f86103503660046112ab565b610a29565b6101846103633660046112d7565b60036020526000908152604090205460ff1681565b6101f86103863660046112f2565b610a4f565b61021e7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061044557507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b610453610b7b565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461047d81610bbe565b610485610bc8565b73ffffffffffffffffffffffffffffffffffffffff861660009081526003602052604090205460ff166104e4576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61052573ffffffffffffffffffffffffffffffffffffffff87167f000000000000000000000000000000000000000000000000000000000000000086610c07565b6040517f5131ab5900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690635131ab599061059f9089908990899089908990600401611378565b600060405180830381600087803b1580156105b957600080fd5b505af11580156105cd573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167f85b5be9cf454e05e0bddf49315178102227c312078eefa3c00294fb4d912ae4e868686604051610632939291906113d5565b60405180910390a3506106456001600055565b5050505050565b6000828152600160208190526040909120015461066881610bbe565b6106728383610c94565b50505050565b73ffffffffffffffffffffffffffffffffffffffff811633146106c7576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6106d18282610d41565b505050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61070081610bbe565b610708610de2565b50565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61073581610bbe565b610708610e41565b7f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a61076781610bbe565b73ffffffffffffffffffffffffffffffffffffffff8216600081815260036020526040808220805460ff19169055517f51085ddf9ebdded84b76e829eb58c4078e4b5bdf97d9a94723f336039da467919190a25050565b7f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a6107e881610bbe565b73ffffffffffffffffffffffffffffffffffffffff8216600081815260036020526040808220805460ff19166001179055517faab7954e9d246b167ef88aeddad35209ca2489d95a8aeb59e288d9b19fae5a549190a25050565b61084a610b7b565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461087481610bbe565b61087c610bc8565b73ffffffffffffffffffffffffffffffffffffffff861660009081526003602052604090205460ff166108db576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61091c73ffffffffffffffffffffffffffffffffffffffff87167f000000000000000000000000000000000000000000000000000000000000000086610c07565b6040517fb8969bd400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063b8969bd4906109969089908990899089908990600401611378565b600060405180830381600087803b1580156109b057600080fd5b505af11580156109c4573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fb9d4efa96044e5f5e03e696fa9ae2ff66911cc27e8a637c3627c75bc5b2241c8868686604051610632939291906113d5565b60008281526001602081905260409091200154610a4581610bbe565b6106728383610d41565b610a57610b7b565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e4610a8181610bbe565b610a89610bc8565b73ffffffffffffffffffffffffffffffffffffffff841660009081526003602052604090205460ff16610ae8576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610b0973ffffffffffffffffffffffffffffffffffffffff85168484610c07565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f9b1bfa7fa9ee420a16e124f794c35ac9f90472acc99140eb2f6447c714cad8eb84604051610b6891815260200190565b60405180910390a3506106d16001600055565b600260005403610bb7576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b6107088133610e7e565b60025460ff1615610c05576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6040805173ffffffffffffffffffffffffffffffffffffffff8416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb000000000000000000000000000000000000000000000000000000001790526106d1908490610f0f565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff16610d3957600083815260016020818152604080842073ffffffffffffffffffffffffffffffffffffffff87168086529252808420805460ff19169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a4506001610445565b506000610445565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff1615610d3957600083815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff86168085529252808320805460ff1916905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a4506001610445565b610dea610fa5565b6002805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b610e49610bc8565b6002805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258610e173390565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16610f0b576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82166004820152602481018390526044015b60405180910390fd5b5050565b6000610f3173ffffffffffffffffffffffffffffffffffffffff841683610fe1565b90508051600014158015610f56575080806020019051810190610f5491906113f8565b155b156106d1576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84166004820152602401610f02565b60025460ff16610c05576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6060610fef83836000610ff6565b9392505050565b606081471015611034576040517fcd786059000000000000000000000000000000000000000000000000000000008152306004820152602401610f02565b6000808573ffffffffffffffffffffffffffffffffffffffff16848660405161105d919061141a565b60006040518083038185875af1925050503d806000811461109a576040519150601f19603f3d011682016040523d82523d6000602084013e61109f565b606091505b50915091506110af8683836110b9565b9695505050505050565b6060826110ce576110c982611148565b610fef565b81511580156110f2575073ffffffffffffffffffffffffffffffffffffffff84163b155b15611141576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85166004820152602401610f02565b5080610fef565b8051156111585780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006020828403121561119c57600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610fef57600080fd5b803573ffffffffffffffffffffffffffffffffffffffff811681146111f057600080fd5b919050565b60008060008060006080868803121561120d57600080fd5b611216866111cc565b9450611224602087016111cc565b935060408601359250606086013567ffffffffffffffff81111561124757600080fd5b8601601f8101881361125857600080fd5b803567ffffffffffffffff81111561126f57600080fd5b88602082840101111561128157600080fd5b959894975092955050506020019190565b6000602082840312156112a457600080fd5b5035919050565b600080604083850312156112be57600080fd5b823591506112ce602084016111cc565b90509250929050565b6000602082840312156112e957600080fd5b610fef826111cc565b60008060006060848603121561130757600080fd5b611310846111cc565b925061131e602085016111cc565b929592945050506040919091013590565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff8616815273ffffffffffffffffffffffffffffffffffffffff851660208201528360408201526080606082015260006113ca60808301848661132f565b979650505050505050565b8381526040602082015260006113ef60408301848661132f565b95945050505050565b60006020828403121561140a57600080fd5b81518015158114610fef57600080fd5b6000825160005b8181101561143b5760208186018101518583015201611421565b50600092019182525091905056fea2646970667358221220dc54ce548a1f0bf8ba5e86cc53c6d822e55eee543451395733c659359bac8dd164736f6c634300081a00338619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a"; type GatewayEVMEchidnaTestConstructorParams = | [signer?: Signer] diff --git a/v2/typechain-types/factories/GatewayEVMUpgradeTest__factory.ts b/v2/typechain-types/factories/GatewayEVMUpgradeTest__factory.ts index db7100bb..4ff6148b 100644 --- a/v2/typechain-types/factories/GatewayEVMUpgradeTest__factory.ts +++ b/v2/typechain-types/factories/GatewayEVMUpgradeTest__factory.ts @@ -1003,6 +1003,11 @@ const _abi = [ name: "NotInitializing", inputs: [], }, + { + type: "error", + name: "NotWhitelistedInCustody", + inputs: [], + }, { type: "error", name: "ReentrancyGuardReentrantCall", @@ -1043,7 +1048,7 @@ const _abi = [ ] as const; const _bytecode = - "0x60a06040523060805234801561001457600080fd5b5061001d610022565b6100d4565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100725760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146100d15780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b608051612d526100fd60003960008181611ab101528181611ada0152611f250152612d526000f3fe6080604052600436106101e35760003560e01c80635c975abb11610102578063ae7a3a6f11610095578063dda79b7511610064578063dda79b751461062e578063e63ab1e91461064e578063f340fa0114610682578063f45346dc1461069557600080fd5b8063ae7a3a6f146105ae578063b8969bd4146105ce578063c0c53b8b146105ee578063d547741f1461060e57600080fd5b806391d14854116100d157806391d14854146104b7578063a217fddf1461051c578063a783c78914610531578063ad3cb1cc1461056557600080fd5b80635c975abb146104175780635d62c8601461044e5780638456cb59146104825780638c6f037f1461049757600080fd5b806335c018db1161017a5780635131ab59116101495780635131ab59146103a257806352d1902d146103c257806357bec62f146103d75780635b112591146103f757600080fd5b806335c018db1461034757806336568abe1461035a5780633f4ba83a1461037a5780634f1ef2861461038f57600080fd5b806321e093b1116101b657806321e093b11461027f578063248a9ca3146102b757806329c59b5d146103145780632f2ff15d1461032757600080fd5b806301ffc9a7146101e857806310188aef1461021d5780631b8b921d1461023f5780631cff79cd1461025f575b600080fd5b3480156101f457600080fd5b506102086102033660046127c5565b6106b5565b60405190151581526020015b60405180910390f35b34801561022957600080fd5b5061023d610238366004612823565b61074e565b005b34801561024b57600080fd5b5061023d61025a366004612887565b610842565b61027261026d366004612887565b610894565b6040516102149190612948565b34801561028b57600080fd5b5060035461029f906001600160a01b031681565b6040516001600160a01b039091168152602001610214565b3480156102c357600080fd5b506103066102d236600461295b565b60009081527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052604090206001015490565b604051908152602001610214565b61023d610322366004612887565b61091d565b34801561033357600080fd5b5061023d610342366004612974565b610a42565b61023d610355366004612887565b610a8c565b34801561036657600080fd5b5061023d610375366004612974565b610c0b565b34801561038657600080fd5b5061023d610c5c565b61023d61039d3660046129cf565b610c91565b3480156103ae57600080fd5b5061023d6103bd366004612ad6565b610cb0565b3480156103ce57600080fd5b50610306610f85565b3480156103e357600080fd5b5060025461029f906001600160a01b031681565b34801561040357600080fd5b5060015461029f906001600160a01b031681565b34801561042357600080fd5b507fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff16610208565b34801561045a57600080fd5b506103067f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b981565b34801561048e57600080fd5b5061023d610fb4565b3480156104a357600080fd5b5061023d6104b2366004612b45565b610fe6565b3480156104c357600080fd5b506102086104d2366004612974565b60009182527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408084206001600160a01b0393909316845291905290205460ff1690565b34801561052857600080fd5b50610306600081565b34801561053d57600080fd5b506103067f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb81565b34801561057157600080fd5b506102726040518060400160405280600581526020017f352e302e3000000000000000000000000000000000000000000000000000000081525081565b3480156105ba57600080fd5b5061023d6105c9366004612823565b611083565b3480156105da57600080fd5b5061023d6105e9366004612ad6565b611177565b3480156105fa57600080fd5b5061023d610609366004612b97565b6112e9565b34801561061a57600080fd5b5061023d610629366004612974565b61159e565b34801561063a57600080fd5b5060005461029f906001600160a01b031681565b34801561065a57600080fd5b506103067f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b61023d610690366004612823565b6115e2565b3480156106a157600080fd5b5061023d6106b0366004612bda565b611707565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061074857507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b6000610759816117b2565b6002546001600160a01b03161561079c576040517fb337f37800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b0382166107dc576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6108067f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b9836117bc565b5050600280547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b826001600160a01b0316336001600160a01b03167f2a21062ee9199c2e205622999eeb7c3da73153674f36a0acd3f74fa6af67bde38484604051610887929190612c56565b60405180910390a3505050565b60607f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb6108c0816117b2565b60006108cd8686866118a9565b9050856001600160a01b03167f373df382b9c587826f3de13f16d67f8d99f28ee947fc0924c6ef2d6d2c7e854634878760405161090c93929190612c72565b60405180910390a295945050505050565b34600003610957576040517f7671265e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546040516000916001600160a01b03169034908381818185875af1925050503d80600081146109a4576040519150601f19603f3d011682016040523d82523d6000602084013e6109a9565b606091505b50909150508015156000036109ea576040517f79cacff100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b836001600160a01b0316336001600160a01b03167f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a43460008787604051610a349493929190612c8c565b60405180910390a350505050565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020526040902060010154610a7c816117b2565b610a8683836117bc565b50505050565b7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb610ab6816117b2565b600080856001600160a01b03163460405160006040518083038185875af1925050503d8060008114610b04576040519150601f19603f3d011682016040523d82523d6000602084013e610b09565b606091505b509150915081610b45576040517facfdb44400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f8fcaa0b50000000000000000000000000000000000000000000000000000000081526001600160a01b03871690638fcaa0b590610b8c9088908890600401612c56565b600060405180830381600087803b158015610ba657600080fd5b505af1158015610bba573d6000803e3d6000fd5b50505050856001600160a01b03167fd5d7616b1678354a0dea9d7e57e6a090bff5babe9f8d6381fdbad16e89ba311c348787604051610bfb93929190612c72565b60405180910390a2505050505050565b6001600160a01b0381163314610c4d576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610c578282611952565b505050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610c86816117b2565b610c8e611a16565b50565b610c99611aa6565b610ca282611b78565b610cac8282611b83565b5050565b610cb8611ca7565b7f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b9610ce2816117b2565b83600003610d1c576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610d268686611d28565b610d5c576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b0386811660048301526024820186905287169063095ea7b3906044016020604051808303816000875af1158015610dc4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610de89190612cb5565b610e1e576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610e2b8685856118a9565b9050610e378787611d28565b610e6d576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201526000906001600160a01b038916906370a0823190602401602060405180830381865afa158015610ecd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ef19190612cd7565b90508015610f0357610f038882611db8565b866001600160a01b0316886001600160a01b03167f29c40793bffd84cb810179f15d1ceec72bc7f0785514c668ba36645cf99b7382888888604051610f4a93929190612c72565b60405180910390a3505050610f7e60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b5050505050565b6000610f8f611f1a565b507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc90565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610fde816117b2565b610c8e611f7c565b83600003611020576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61102b338486611ff5565b846001600160a01b0316336001600160a01b03167f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a4868686866040516110749493929190612c8c565b60405180910390a35050505050565b600061108e816117b2565b6000546001600160a01b0316156110d1576040517fb337f37800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038216611111576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61113b7f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b9836117bc565b5050600080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b61117f611ca7565b7f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b96111a9816117b2565b836000036111e3576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6111f76001600160a01b0387168686612149565b6040517f8fcaa0b50000000000000000000000000000000000000000000000000000000081526001600160a01b03861690638fcaa0b59061123e9086908690600401612c56565b600060405180830381600087803b15801561125857600080fd5b505af115801561126c573d6000803e3d6000fd5b50505050846001600160a01b0316866001600160a01b03167f723fc7be2448075379e4fdf1e6bf5fead954d2668d2da05dcb44ccfec4beeda78686866040516112b793929190612c72565b60405180910390a350610f7e60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156113345750825b905060008267ffffffffffffffff1660011480156113515750303b155b90508115801561135f575080155b15611396576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84547fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000016600117855583156113f75784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff16680100000000000000001785555b6001600160a01b038816158061141457506001600160a01b038716155b1561144b576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6114536121bd565b61145b6121c5565b6114636121bd565b61146b6121d5565b6114766000876117bc565b506114a17f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a876117bc565b50600180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b038a161790556114ff7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb896117bc565b50600380547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03891617905583156115945784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b5050505050505050565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b62680060205260409020600101546115d8816117b2565b610a868383611952565b3460000361161c576040517f7671265e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546040516000916001600160a01b03169034908381818185875af1925050503d8060008114611669576040519150601f19603f3d011682016040523d82523d6000602084013e61166e565b606091505b50909150508015156000036116af576040517f79cacff100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60408051348152600060208201819052606082840181905282015290516001600160a01b0384169133917f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a49181900360800190a35050565b81600003611741576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61174c338284611ff5565b826001600160a01b0316336001600160a01b03167f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a484846040516108879291909182526001600160a01b0316602082015260606040820181905260009082015260800190565b610c8e81336121e5565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff1661189f576000848152602082815260408083206001600160a01b0387168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790556118553390565b6001600160a01b0316836001600160a01b0316857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a46001915050610748565b6000915050610748565b6060600080856001600160a01b03163486866040516118c9929190612cf0565b60006040518083038185875af1925050503d8060008114611906576040519150601f19603f3d011682016040523d82523d6000602084013e61190b565b606091505b509150915081611947576040517facfdb44400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b9150505b9392505050565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff161561189f576000848152602082815260408083206001600160a01b038716808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339287917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a46001915050610748565b611a1e612272565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001681557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a150565b306001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161480611b3f57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316611b337f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b6001600160a01b031614155b15611b76576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6000610cac816117b2565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015611bfb575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252611bf891810190612cd7565b60015b611c41576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b03831660048201526024015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8114611c9d576040517faa1d49a400000000000000000000000000000000000000000000000000000000815260048101829052602401611c38565b610c5783836122cd565b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0080547ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01611d22576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60029055565b6040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b038281166004830152600060248301819052919084169063095ea7b3906044016020604051808303816000875af1158015611d94573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061194b9190612cb5565b6003546001600160a01b0390811690831603611eda576002546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152602481018390529083169063095ea7b3906044016020604051808303816000875af1158015611e3a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e5e9190612cb5565b506002546040517f743e0c9b000000000000000000000000000000000000000000000000000000008152600481018390526001600160a01b039091169063743e0c9b90602401600060405180830381600087803b158015611ebe57600080fd5b505af1158015611ed2573d6000803e3d6000fd5b505050505050565b600054610cac906001600160a01b03848116911683612149565b60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614611b76576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611f84612323565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011781557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25833611a88565b6003546001600160a01b039081169083160361212d576120206001600160a01b03831684308461237f565b6002546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152602481018390529083169063095ea7b3906044016020604051808303816000875af115801561208c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120b09190612cb5565b506002546040517f743e0c9b000000000000000000000000000000000000000000000000000000008152600481018390526001600160a01b039091169063743e0c9b90602401600060405180830381600087803b15801561211057600080fd5b505af1158015612124573d6000803e3d6000fd5b50505050505050565b600054610c57906001600160a01b03848116918691168461237f565b6040516001600160a01b03838116602483015260448201839052610c5791859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506123b8565b611b76612434565b6121cd612434565b611b7661249b565b6121dd612434565b611b766124a3565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408083206001600160a01b038516845290915290205460ff16610cac576040517fe2517d3f0000000000000000000000000000000000000000000000000000000081526001600160a01b038216600482015260248101839052604401611c38565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff16611b76576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6122d6826124f4565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a280511561231b57610c57828261259c565b610cac612612565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff1615611b76576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040516001600160a01b038481166024830152838116604483015260648201839052610a869186918216906323b872dd90608401612176565b60006123cd6001600160a01b0384168361264a565b905080516000141580156123f25750808060200190518101906123f09190612cb5565b155b15610c57576040517f5274afe70000000000000000000000000000000000000000000000000000000081526001600160a01b0384166004820152602401611c38565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff16611b76576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611ef4612434565b6124ab612434565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055565b806001600160a01b03163b600003612543576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b0382166004820152602401611c38565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6060600080846001600160a01b0316846040516125b99190612d00565b600060405180830381855af49150503d80600081146125f4576040519150601f19603f3d011682016040523d82523d6000602084013e6125f9565b606091505b5091509150612609858383612658565b95945050505050565b3415611b76576040517fb398979f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606061194b838360006126cd565b60608261266d5761266882612783565b61194b565b815115801561268457506001600160a01b0384163b155b156126c6576040517f9996b3150000000000000000000000000000000000000000000000000000000081526001600160a01b0385166004820152602401611c38565b508061194b565b60608147101561270b576040517fcd786059000000000000000000000000000000000000000000000000000000008152306004820152602401611c38565b600080856001600160a01b031684866040516127279190612d00565b60006040518083038185875af1925050503d8060008114612764576040519150601f19603f3d011682016040523d82523d6000602084013e612769565b606091505b5091509150612779868383612658565b9695505050505050565b8051156127935780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000602082840312156127d757600080fd5b81357fffffffff000000000000000000000000000000000000000000000000000000008116811461194b57600080fd5b80356001600160a01b038116811461281e57600080fd5b919050565b60006020828403121561283557600080fd5b61194b82612807565b60008083601f84011261285057600080fd5b50813567ffffffffffffffff81111561286857600080fd5b60208301915083602082850101111561288057600080fd5b9250929050565b60008060006040848603121561289c57600080fd5b6128a584612807565b9250602084013567ffffffffffffffff8111156128c157600080fd5b6128cd8682870161283e565b9497909650939450505050565b60005b838110156128f55781810151838201526020016128dd565b50506000910152565b600081518084526129168160208601602086016128da565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152600061194b60208301846128fe565b60006020828403121561296d57600080fd5b5035919050565b6000806040838503121561298757600080fd5b8235915061299760208401612807565b90509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080604083850312156129e257600080fd5b6129eb83612807565b9150602083013567ffffffffffffffff811115612a0757600080fd5b8301601f81018513612a1857600080fd5b803567ffffffffffffffff811115612a3257612a326129a0565b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8501160116810181811067ffffffffffffffff82111715612a9e57612a9e6129a0565b604052818152828201602001871015612ab657600080fd5b816020840160208301376000602083830101528093505050509250929050565b600080600080600060808688031215612aee57600080fd5b612af786612807565b9450612b0560208701612807565b935060408601359250606086013567ffffffffffffffff811115612b2857600080fd5b612b348882890161283e565b969995985093965092949392505050565b600080600080600060808688031215612b5d57600080fd5b612b6686612807565b945060208601359350612b7b60408701612807565b9250606086013567ffffffffffffffff811115612b2857600080fd5b600080600060608486031215612bac57600080fd5b612bb584612807565b9250612bc360208501612807565b9150612bd160408501612807565b90509250925092565b600080600060608486031215612bef57600080fd5b612bf884612807565b925060208401359150612bd160408501612807565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b602081526000612c6a602083018486612c0d565b949350505050565b838152604060208201526000612609604083018486612c0d565b8481526001600160a01b0384166020820152606060408201526000612779606083018486612c0d565b600060208284031215612cc757600080fd5b8151801515811461194b57600080fd5b600060208284031215612ce957600080fd5b5051919050565b8183823760009101908152919050565b60008251612d128184602087016128da565b919091019291505056fea2646970667358221220a2cc45e19abbbfe5e651a45b4ddc5a5ada7e94e7b4482a57a5011f556e05ea7a64736f6c634300081a0033"; + "0x60a06040523060805234801561001457600080fd5b5061001d610022565b6100d4565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100725760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146100d15780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b608051612d526100fd60003960008181611ab101528181611ada0152611f250152612d526000f3fe6080604052600436106101e35760003560e01c80635c975abb11610102578063ae7a3a6f11610095578063dda79b7511610064578063dda79b751461062e578063e63ab1e91461064e578063f340fa0114610682578063f45346dc1461069557600080fd5b8063ae7a3a6f146105ae578063b8969bd4146105ce578063c0c53b8b146105ee578063d547741f1461060e57600080fd5b806391d14854116100d157806391d14854146104b7578063a217fddf1461051c578063a783c78914610531578063ad3cb1cc1461056557600080fd5b80635c975abb146104175780635d62c8601461044e5780638456cb59146104825780638c6f037f1461049757600080fd5b806335c018db1161017a5780635131ab59116101495780635131ab59146103a257806352d1902d146103c257806357bec62f146103d75780635b112591146103f757600080fd5b806335c018db1461034757806336568abe1461035a5780633f4ba83a1461037a5780634f1ef2861461038f57600080fd5b806321e093b1116101b657806321e093b11461027f578063248a9ca3146102b757806329c59b5d146103145780632f2ff15d1461032757600080fd5b806301ffc9a7146101e857806310188aef1461021d5780631b8b921d1461023f5780631cff79cd1461025f575b600080fd5b3480156101f457600080fd5b506102086102033660046127c5565b6106b5565b60405190151581526020015b60405180910390f35b34801561022957600080fd5b5061023d610238366004612823565b61074e565b005b34801561024b57600080fd5b5061023d61025a366004612887565b610842565b61027261026d366004612887565b610894565b6040516102149190612948565b34801561028b57600080fd5b5060035461029f906001600160a01b031681565b6040516001600160a01b039091168152602001610214565b3480156102c357600080fd5b506103066102d236600461295b565b60009081527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052604090206001015490565b604051908152602001610214565b61023d610322366004612887565b61091d565b34801561033357600080fd5b5061023d610342366004612974565b610a42565b61023d610355366004612887565b610a8c565b34801561036657600080fd5b5061023d610375366004612974565b610c0b565b34801561038657600080fd5b5061023d610c5c565b61023d61039d3660046129cf565b610c91565b3480156103ae57600080fd5b5061023d6103bd366004612ad6565b610cb0565b3480156103ce57600080fd5b50610306610f85565b3480156103e357600080fd5b5060025461029f906001600160a01b031681565b34801561040357600080fd5b5060015461029f906001600160a01b031681565b34801561042357600080fd5b507fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff16610208565b34801561045a57600080fd5b506103067f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b981565b34801561048e57600080fd5b5061023d610fb4565b3480156104a357600080fd5b5061023d6104b2366004612b45565b610fe6565b3480156104c357600080fd5b506102086104d2366004612974565b60009182527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408084206001600160a01b0393909316845291905290205460ff1690565b34801561052857600080fd5b50610306600081565b34801561053d57600080fd5b506103067f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb81565b34801561057157600080fd5b506102726040518060400160405280600581526020017f352e302e3000000000000000000000000000000000000000000000000000000081525081565b3480156105ba57600080fd5b5061023d6105c9366004612823565b611083565b3480156105da57600080fd5b5061023d6105e9366004612ad6565b611177565b3480156105fa57600080fd5b5061023d610609366004612b97565b6112e9565b34801561061a57600080fd5b5061023d610629366004612974565b61159e565b34801561063a57600080fd5b5060005461029f906001600160a01b031681565b34801561065a57600080fd5b506103067f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b61023d610690366004612823565b6115e2565b3480156106a157600080fd5b5061023d6106b0366004612bda565b611707565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061074857507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b6000610759816117b2565b6002546001600160a01b03161561079c576040517fb337f37800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b0382166107dc576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6108067f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b9836117bc565b5050600280547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b826001600160a01b0316336001600160a01b03167f2a21062ee9199c2e205622999eeb7c3da73153674f36a0acd3f74fa6af67bde38484604051610887929190612c56565b60405180910390a3505050565b60607f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb6108c0816117b2565b60006108cd8686866118a9565b9050856001600160a01b03167f373df382b9c587826f3de13f16d67f8d99f28ee947fc0924c6ef2d6d2c7e854634878760405161090c93929190612c72565b60405180910390a295945050505050565b34600003610957576040517f7671265e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546040516000916001600160a01b03169034908381818185875af1925050503d80600081146109a4576040519150601f19603f3d011682016040523d82523d6000602084013e6109a9565b606091505b50909150508015156000036109ea576040517f79cacff100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b836001600160a01b0316336001600160a01b03167f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a43460008787604051610a349493929190612c8c565b60405180910390a350505050565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020526040902060010154610a7c816117b2565b610a8683836117bc565b50505050565b7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb610ab6816117b2565b600080856001600160a01b03163460405160006040518083038185875af1925050503d8060008114610b04576040519150601f19603f3d011682016040523d82523d6000602084013e610b09565b606091505b509150915081610b45576040517facfdb44400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f8fcaa0b50000000000000000000000000000000000000000000000000000000081526001600160a01b03871690638fcaa0b590610b8c9088908890600401612c56565b600060405180830381600087803b158015610ba657600080fd5b505af1158015610bba573d6000803e3d6000fd5b50505050856001600160a01b03167fd5d7616b1678354a0dea9d7e57e6a090bff5babe9f8d6381fdbad16e89ba311c348787604051610bfb93929190612c72565b60405180910390a2505050505050565b6001600160a01b0381163314610c4d576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610c578282611952565b505050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610c86816117b2565b610c8e611a16565b50565b610c99611aa6565b610ca282611b78565b610cac8282611b83565b5050565b610cb8611ca7565b7f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b9610ce2816117b2565b83600003610d1c576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610d268686611d28565b610d5c576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b0386811660048301526024820186905287169063095ea7b3906044016020604051808303816000875af1158015610dc4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610de89190612cb5565b610e1e576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610e2b8685856118a9565b9050610e378787611d28565b610e6d576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201526000906001600160a01b038916906370a0823190602401602060405180830381865afa158015610ecd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ef19190612cd7565b90508015610f0357610f038882611db8565b866001600160a01b0316886001600160a01b03167f29c40793bffd84cb810179f15d1ceec72bc7f0785514c668ba36645cf99b7382888888604051610f4a93929190612c72565b60405180910390a3505050610f7e60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b5050505050565b6000610f8f611f1a565b507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc90565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610fde816117b2565b610c8e611f7c565b83600003611020576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61102b338486611ff5565b846001600160a01b0316336001600160a01b03167f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a4868686866040516110749493929190612c8c565b60405180910390a35050505050565b600061108e816117b2565b6000546001600160a01b0316156110d1576040517fb337f37800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038216611111576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61113b7f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b9836117bc565b5050600080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b61117f611ca7565b7f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b96111a9816117b2565b836000036111e3576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6111f76001600160a01b0387168686612149565b6040517f8fcaa0b50000000000000000000000000000000000000000000000000000000081526001600160a01b03861690638fcaa0b59061123e9086908690600401612c56565b600060405180830381600087803b15801561125857600080fd5b505af115801561126c573d6000803e3d6000fd5b50505050846001600160a01b0316866001600160a01b03167f723fc7be2448075379e4fdf1e6bf5fead954d2668d2da05dcb44ccfec4beeda78686866040516112b793929190612c72565b60405180910390a350610f7e60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156113345750825b905060008267ffffffffffffffff1660011480156113515750303b155b90508115801561135f575080155b15611396576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84547fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000016600117855583156113f75784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff16680100000000000000001785555b6001600160a01b038816158061141457506001600160a01b038716155b1561144b576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6114536121bd565b61145b6121c5565b6114636121bd565b61146b6121d5565b6114766000876117bc565b506114a17f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a876117bc565b50600180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b038a161790556114ff7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb896117bc565b50600380547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03891617905583156115945784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b5050505050505050565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b62680060205260409020600101546115d8816117b2565b610a868383611952565b3460000361161c576040517f7671265e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546040516000916001600160a01b03169034908381818185875af1925050503d8060008114611669576040519150601f19603f3d011682016040523d82523d6000602084013e61166e565b606091505b50909150508015156000036116af576040517f79cacff100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60408051348152600060208201819052606082840181905282015290516001600160a01b0384169133917f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a49181900360800190a35050565b81600003611741576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61174c338284611ff5565b826001600160a01b0316336001600160a01b03167f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a484846040516108879291909182526001600160a01b0316602082015260606040820181905260009082015260800190565b610c8e81336121e5565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff1661189f576000848152602082815260408083206001600160a01b0387168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790556118553390565b6001600160a01b0316836001600160a01b0316857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a46001915050610748565b6000915050610748565b6060600080856001600160a01b03163486866040516118c9929190612cf0565b60006040518083038185875af1925050503d8060008114611906576040519150601f19603f3d011682016040523d82523d6000602084013e61190b565b606091505b509150915081611947576040517facfdb44400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b9150505b9392505050565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff161561189f576000848152602082815260408083206001600160a01b038716808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339287917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a46001915050610748565b611a1e612272565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001681557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a150565b306001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161480611b3f57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316611b337f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b6001600160a01b031614155b15611b76576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6000610cac816117b2565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015611bfb575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252611bf891810190612cd7565b60015b611c41576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b03831660048201526024015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8114611c9d576040517faa1d49a400000000000000000000000000000000000000000000000000000000815260048101829052602401611c38565b610c5783836122cd565b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0080547ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01611d22576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60029055565b6040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b038281166004830152600060248301819052919084169063095ea7b3906044016020604051808303816000875af1158015611d94573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061194b9190612cb5565b6003546001600160a01b0390811690831603611eda576002546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152602481018390529083169063095ea7b3906044016020604051808303816000875af1158015611e3a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e5e9190612cb5565b506002546040517f743e0c9b000000000000000000000000000000000000000000000000000000008152600481018390526001600160a01b039091169063743e0c9b90602401600060405180830381600087803b158015611ebe57600080fd5b505af1158015611ed2573d6000803e3d6000fd5b505050505050565b600054610cac906001600160a01b03848116911683612149565b60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614611b76576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611f84612323565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011781557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25833611a88565b6003546001600160a01b039081169083160361212d576120206001600160a01b03831684308461237f565b6002546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152602481018390529083169063095ea7b3906044016020604051808303816000875af115801561208c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120b09190612cb5565b506002546040517f743e0c9b000000000000000000000000000000000000000000000000000000008152600481018390526001600160a01b039091169063743e0c9b90602401600060405180830381600087803b15801561211057600080fd5b505af1158015612124573d6000803e3d6000fd5b50505050505050565b600054610c57906001600160a01b03848116918691168461237f565b6040516001600160a01b03838116602483015260448201839052610c5791859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506123b8565b611b76612434565b6121cd612434565b611b7661249b565b6121dd612434565b611b766124a3565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408083206001600160a01b038516845290915290205460ff16610cac576040517fe2517d3f0000000000000000000000000000000000000000000000000000000081526001600160a01b038216600482015260248101839052604401611c38565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff16611b76576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6122d6826124f4565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a280511561231b57610c57828261259c565b610cac612612565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff1615611b76576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040516001600160a01b038481166024830152838116604483015260648201839052610a869186918216906323b872dd90608401612176565b60006123cd6001600160a01b0384168361264a565b905080516000141580156123f25750808060200190518101906123f09190612cb5565b155b15610c57576040517f5274afe70000000000000000000000000000000000000000000000000000000081526001600160a01b0384166004820152602401611c38565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff16611b76576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611ef4612434565b6124ab612434565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055565b806001600160a01b03163b600003612543576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b0382166004820152602401611c38565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6060600080846001600160a01b0316846040516125b99190612d00565b600060405180830381855af49150503d80600081146125f4576040519150601f19603f3d011682016040523d82523d6000602084013e6125f9565b606091505b5091509150612609858383612658565b95945050505050565b3415611b76576040517fb398979f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606061194b838360006126cd565b60608261266d5761266882612783565b61194b565b815115801561268457506001600160a01b0384163b155b156126c6576040517f9996b3150000000000000000000000000000000000000000000000000000000081526001600160a01b0385166004820152602401611c38565b508061194b565b60608147101561270b576040517fcd786059000000000000000000000000000000000000000000000000000000008152306004820152602401611c38565b600080856001600160a01b031684866040516127279190612d00565b60006040518083038185875af1925050503d8060008114612764576040519150601f19603f3d011682016040523d82523d6000602084013e612769565b606091505b5091509150612779868383612658565b9695505050505050565b8051156127935780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000602082840312156127d757600080fd5b81357fffffffff000000000000000000000000000000000000000000000000000000008116811461194b57600080fd5b80356001600160a01b038116811461281e57600080fd5b919050565b60006020828403121561283557600080fd5b61194b82612807565b60008083601f84011261285057600080fd5b50813567ffffffffffffffff81111561286857600080fd5b60208301915083602082850101111561288057600080fd5b9250929050565b60008060006040848603121561289c57600080fd5b6128a584612807565b9250602084013567ffffffffffffffff8111156128c157600080fd5b6128cd8682870161283e565b9497909650939450505050565b60005b838110156128f55781810151838201526020016128dd565b50506000910152565b600081518084526129168160208601602086016128da565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152600061194b60208301846128fe565b60006020828403121561296d57600080fd5b5035919050565b6000806040838503121561298757600080fd5b8235915061299760208401612807565b90509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080604083850312156129e257600080fd5b6129eb83612807565b9150602083013567ffffffffffffffff811115612a0757600080fd5b8301601f81018513612a1857600080fd5b803567ffffffffffffffff811115612a3257612a326129a0565b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8501160116810181811067ffffffffffffffff82111715612a9e57612a9e6129a0565b604052818152828201602001871015612ab657600080fd5b816020840160208301376000602083830101528093505050509250929050565b600080600080600060808688031215612aee57600080fd5b612af786612807565b9450612b0560208701612807565b935060408601359250606086013567ffffffffffffffff811115612b2857600080fd5b612b348882890161283e565b969995985093965092949392505050565b600080600080600060808688031215612b5d57600080fd5b612b6686612807565b945060208601359350612b7b60408701612807565b9250606086013567ffffffffffffffff811115612b2857600080fd5b600080600060608486031215612bac57600080fd5b612bb584612807565b9250612bc360208501612807565b9150612bd160408501612807565b90509250925092565b600080600060608486031215612bef57600080fd5b612bf884612807565b925060208401359150612bd160408501612807565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b602081526000612c6a602083018486612c0d565b949350505050565b838152604060208201526000612609604083018486612c0d565b8481526001600160a01b0384166020820152606060408201526000612779606083018486612c0d565b600060208284031215612cc757600080fd5b8151801515811461194b57600080fd5b600060208284031215612ce957600080fd5b5051919050565b8183823760009101908152919050565b60008251612d128184602087016128da565b919091019291505056fea2646970667358221220e8ffc6341fffbc216a05dd7d399fd25443efd956129cf4964951b693540aaeef64736f6c634300081a0033"; type GatewayEVMUpgradeTestConstructorParams = | [signer?: Signer] diff --git a/v2/typechain-types/factories/GatewayEVM__factory.ts b/v2/typechain-types/factories/GatewayEVM__factory.ts index 6d5d7702..ee0a1ace 100644 --- a/v2/typechain-types/factories/GatewayEVM__factory.ts +++ b/v2/typechain-types/factories/GatewayEVM__factory.ts @@ -975,6 +975,11 @@ const _abi = [ name: "NotInitializing", inputs: [], }, + { + type: "error", + name: "NotWhitelistedInCustody", + inputs: [], + }, { type: "error", name: "ReentrancyGuardReentrantCall", @@ -1015,7 +1020,7 @@ const _abi = [ ] as const; const _bytecode = - "0x60a06040523060805234801561001457600080fd5b5061001d610022565b6100d4565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100725760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146100d15780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b6080516131046100fd60003960008181611f0601528181611f2f01526122fe01526131046000f3fe6080604052600436106101e35760003560e01c80635c975abb11610102578063ae7a3a6f11610095578063dda79b7511610064578063dda79b751461062e578063e63ab1e91461064e578063f340fa0114610682578063f45346dc1461069557600080fd5b8063ae7a3a6f146105ae578063b8969bd4146105ce578063c0c53b8b146105ee578063d547741f1461060e57600080fd5b806391d14854116100d157806391d14854146104b7578063a217fddf1461051c578063a783c78914610531578063ad3cb1cc1461056557600080fd5b80635c975abb146104175780635d62c8601461044e5780638456cb59146104825780638c6f037f1461049757600080fd5b806335c018db1161017a5780635131ab59116101495780635131ab59146103a257806352d1902d146103c257806357bec62f146103d75780635b112591146103f757600080fd5b806335c018db1461034757806336568abe1461035a5780633f4ba83a1461037a5780634f1ef2861461038f57600080fd5b806321e093b1116101b657806321e093b11461027f578063248a9ca3146102b757806329c59b5d146103145780632f2ff15d1461032757600080fd5b806301ffc9a7146101e857806310188aef1461021d5780631b8b921d1461023f5780631cff79cd1461025f575b600080fd5b3480156101f457600080fd5b50610208610203366004612b77565b6106b5565b60405190151581526020015b60405180910390f35b34801561022957600080fd5b5061023d610238366004612bd5565b61074e565b005b34801561024b57600080fd5b5061023d61025a366004612c39565b610842565b61027261026d366004612c39565b6108cd565b6040516102149190612cfa565b34801561028b57600080fd5b5060035461029f906001600160a01b031681565b6040516001600160a01b039091168152602001610214565b3480156102c357600080fd5b506103066102d2366004612d0d565b60009081527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052604090206001015490565b604051908152602001610214565b61023d610322366004612c39565b6109d0565b34801561033357600080fd5b5061023d610342366004612d26565b610b63565b61023d610355366004612c39565b610bad565b34801561036657600080fd5b5061023d610375366004612d26565b610d9c565b34801561038657600080fd5b5061023d610de8565b61023d61039d366004612d81565b610e1d565b3480156103ae57600080fd5b5061023d6103bd366004612e88565b610e3c565b3480156103ce57600080fd5b50610306611155565b3480156103e357600080fd5b5060025461029f906001600160a01b031681565b34801561040357600080fd5b5060015461029f906001600160a01b031681565b34801561042357600080fd5b507fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff16610208565b34801561045a57600080fd5b506103067f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b981565b34801561048e57600080fd5b5061023d611184565b3480156104a357600080fd5b5061023d6104b2366004612ef7565b6111b6565b3480156104c357600080fd5b506102086104d2366004612d26565b60009182527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408084206001600160a01b0393909316845291905290205460ff1690565b34801561052857600080fd5b50610306600081565b34801561053d57600080fd5b506103067f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb81565b34801561057157600080fd5b506102726040518060400160405280600581526020017f352e302e3000000000000000000000000000000000000000000000000000000081525081565b3480156105ba57600080fd5b5061023d6105c9366004612bd5565b6112cc565b3480156105da57600080fd5b5061023d6105e9366004612e88565b6113c0565b3480156105fa57600080fd5b5061023d610609366004612f49565b611579565b34801561061a57600080fd5b5061023d610629366004612d26565b61182e565b34801561063a57600080fd5b5060005461029f906001600160a01b031681565b34801561065a57600080fd5b506103067f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b61023d610690366004612bd5565b611872565b3480156106a157600080fd5b5061023d6106b0366004612f8c565b611a07565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061074857507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b600061075981611b02565b6001600160a01b038216610799576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002546001600160a01b0316156107dc576040517f0c8dc01600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6108067f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b983611b0c565b5050600280547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b61084a611bf9565b610852611c57565b826001600160a01b0316336001600160a01b03167f2a21062ee9199c2e205622999eeb7c3da73153674f36a0acd3f74fa6af67bde38484604051610897929190613008565b60405180910390a36108c860017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b505050565b60607f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb6108f981611b02565b610901611bf9565b610909611c57565b6001600160a01b038516610949576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610956868686611cfe565b9050856001600160a01b03167fcaf938de11c367272220bfd1d2baa99ca46665e7bc4d85f00adb51b90fe1fa9f34878760405161099593929190613024565b60405180910390a291506109c860017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b509392505050565b6109d8611bf9565b6109e0611c57565b34600003610a1a576040517f7671265e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038316610a5a576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546040516000916001600160a01b03169034908381818185875af1925050503d8060008114610aa7576040519150601f19603f3d011682016040523d82523d6000602084013e610aac565b606091505b5050905080610ae7576040517f79cacff100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b836001600160a01b0316336001600160a01b03167f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a43460008787604051610b31949392919061303e565b60405180910390a3506108c860017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020526040902060010154610b9d81611b02565b610ba78383611b0c565b50505050565b7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb610bd781611b02565b610bdf611bf9565b610be7611c57565b6001600160a01b038416610c27576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000846001600160a01b03163460405160006040518083038185875af1925050503d8060008114610c74576040519150601f19603f3d011682016040523d82523d6000602084013e610c79565b606091505b5050905080610cb4576040517facfdb44400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f8fcaa0b50000000000000000000000000000000000000000000000000000000081526001600160a01b03861690638fcaa0b590610cfb9087908790600401613008565b600060405180830381600087803b158015610d1557600080fd5b505af1158015610d29573d6000803e3d6000fd5b50505050846001600160a01b03167fd5d7616b1678354a0dea9d7e57e6a090bff5babe9f8d6381fdbad16e89ba311c348686604051610d6a93929190613024565b60405180910390a250610ba760017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b6001600160a01b0381163314610dde576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6108c88282611da7565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610e1281611b02565b610e1a611e6b565b50565b610e25611efb565b610e2e82611fcb565b610e388282611fd6565b5050565b7f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b9610e6681611b02565b610e6e611bf9565b610e76611c57565b83600003610eb0576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038516610ef0576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610efa86866120fa565b610f30576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b0386811660048301526024820186905287169063095ea7b3906044016020604051808303816000875af1158015610f98573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fbc9190613067565b610ff2576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610ffd858484611cfe565b5061100886866120fa565b61103e576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201526000906001600160a01b038816906370a0823190602401602060405180830381865afa15801561109e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110c29190613089565b905080156110d4576110d4878261218a565b856001600160a01b0316876001600160a01b03167f29c40793bffd84cb810179f15d1ceec72bc7f0785514c668ba36645cf99b738287878760405161111b93929190613024565b60405180910390a35061114d60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b505050505050565b600061115f6122f3565b507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc90565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a6111ae81611b02565b610e1a612355565b6111be611bf9565b6111c6611c57565b83600003611200576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038516611240576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61124b3384866123ce565b846001600160a01b0316336001600160a01b03167f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a486868686604051611294949392919061303e565b60405180910390a36112c560017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b5050505050565b60006112d781611b02565b6001600160a01b038216611317576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000546001600160a01b03161561135a576040517fb337f37800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6113847f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b983611b0c565b5050600080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b7f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b96113ea81611b02565b6113f2611bf9565b6113fa611c57565b83600003611434576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038516611474576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6114886001600160a01b0387168686612557565b6040517f8fcaa0b50000000000000000000000000000000000000000000000000000000081526001600160a01b03861690638fcaa0b5906114cf9086908690600401613008565b600060405180830381600087803b1580156114e957600080fd5b505af11580156114fd573d6000803e3d6000fd5b50505050846001600160a01b0316866001600160a01b03167f723fc7be2448075379e4fdf1e6bf5fead954d2668d2da05dcb44ccfec4beeda786868660405161154893929190613024565b60405180910390a361114d60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156115c45750825b905060008267ffffffffffffffff1660011480156115e15750303b155b9050811580156115ef575080155b15611626576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84547fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000016600117855583156116875784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff16680100000000000000001785555b6001600160a01b03881615806116a457506001600160a01b038716155b156116db576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6116e36125cb565b6116eb6125d3565b6116f36125cb565b6116fb6125e3565b611706600087611b0c565b506117317f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a87611b0c565b50600180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b038a1617905561178f7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb89611b0c565b50600380547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03891617905583156118245784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b5050505050505050565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052604090206001015461186881611b02565b610ba78383611da7565b61187a611bf9565b611882611c57565b346000036118bc576040517f7671265e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b0381166118fc576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546040516000916001600160a01b03169034908381818185875af1925050503d8060008114611949576040519150601f19603f3d011682016040523d82523d6000602084013e61194e565b606091505b5050905080611989576040517f79cacff100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60408051348152600060208201819052606082840181905282015290516001600160a01b0384169133917f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a49181900360800190a350610e1a60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b611a0f611bf9565b611a17611c57565b81600003611a51576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038316611a91576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611a9c3382846123ce565b826001600160a01b0316336001600160a01b03167f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a484846040516108979291909182526001600160a01b0316602082015260606040820181905260009082015260800190565b610e1a81336125f3565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff16611bef576000848152602082815260408083206001600160a01b0387168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055611ba53390565b6001600160a01b0316836001600160a01b0316857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a46001915050610748565b6000915050610748565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff1615611c55576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0080547ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01611cd2576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60029055565b60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b6060600080856001600160a01b0316348686604051611d1e9291906130a2565b60006040518083038185875af1925050503d8060008114611d5b576040519150601f19603f3d011682016040523d82523d6000602084013e611d60565b606091505b509150915081611d9c576040517facfdb44400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b9150505b9392505050565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff1615611bef576000848152602082815260408083206001600160a01b038716808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339287917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a46001915050610748565b611e73612680565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001681557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a150565b306001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161480611f9457507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316611f887f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b6001600160a01b031614155b15611c55576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610e3881611b02565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa92505050801561204e575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820190925261204b91810190613089565b60015b612094576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b03831660048201526024015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc81146120f0576040517faa1d49a40000000000000000000000000000000000000000000000000000000081526004810182905260240161208b565b6108c883836126db565b6040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b038281166004830152600060248301819052919084169063095ea7b3906044016020604051808303816000875af1158015612166573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611da09190613067565b6003546001600160a01b03908116908316036122d9576002546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152602481018390529083169063095ea7b3906044016020604051808303816000875af115801561220c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122309190613067565b612266576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002546040517f743e0c9b000000000000000000000000000000000000000000000000000000008152600481018390526001600160a01b039091169063743e0c9b90602401600060405180830381600087803b1580156122c557600080fd5b505af115801561114d573d6000803e3d6000fd5b600054610e38906001600160a01b03848116911683612557565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614611c55576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61235d611bf9565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011781557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25833611edd565b6003546001600160a01b039081169083160361253b576123f96001600160a01b038316843084612731565b6002546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152602481018390529083169063095ea7b3906044016020604051808303816000875af1158015612465573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124899190613067565b6124bf576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002546040517f743e0c9b000000000000000000000000000000000000000000000000000000008152600481018390526001600160a01b039091169063743e0c9b90602401600060405180830381600087803b15801561251e57600080fd5b505af1158015612532573d6000803e3d6000fd5b50505050505050565b6000546108c8906001600160a01b038481169186911684612731565b6040516001600160a01b038381166024830152604482018390526108c891859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505061276a565b611c556127e6565b6125db6127e6565b611c5561284d565b6125eb6127e6565b611c55612855565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408083206001600160a01b038516845290915290205460ff16610e38576040517fe2517d3f0000000000000000000000000000000000000000000000000000000081526001600160a01b03821660048201526024810183905260440161208b565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff16611c55576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6126e4826128a6565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a2805115612729576108c8828261294e565b610e386129c4565b6040516001600160a01b038481166024830152838116604483015260648201839052610ba79186918216906323b872dd90608401612584565b600061277f6001600160a01b038416836129fc565b905080516000141580156127a45750808060200190518101906127a29190613067565b155b156108c8576040517f5274afe70000000000000000000000000000000000000000000000000000000081526001600160a01b038416600482015260240161208b565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff16611c55576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611cd86127e6565b61285d6127e6565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055565b806001600160a01b03163b6000036128f5576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b038216600482015260240161208b565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6060600080846001600160a01b03168460405161296b91906130b2565b600060405180830381855af49150503d80600081146129a6576040519150601f19603f3d011682016040523d82523d6000602084013e6129ab565b606091505b50915091506129bb858383612a0a565b95945050505050565b3415611c55576040517fb398979f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6060611da083836000612a7f565b606082612a1f57612a1a82612b35565b611da0565b8151158015612a3657506001600160a01b0384163b155b15612a78576040517f9996b3150000000000000000000000000000000000000000000000000000000081526001600160a01b038516600482015260240161208b565b5080611da0565b606081471015612abd576040517fcd78605900000000000000000000000000000000000000000000000000000000815230600482015260240161208b565b600080856001600160a01b03168486604051612ad991906130b2565b60006040518083038185875af1925050503d8060008114612b16576040519150601f19603f3d011682016040523d82523d6000602084013e612b1b565b606091505b5091509150612b2b868383612a0a565b9695505050505050565b805115612b455780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060208284031215612b8957600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114611da057600080fd5b80356001600160a01b0381168114612bd057600080fd5b919050565b600060208284031215612be757600080fd5b611da082612bb9565b60008083601f840112612c0257600080fd5b50813567ffffffffffffffff811115612c1a57600080fd5b602083019150836020828501011115612c3257600080fd5b9250929050565b600080600060408486031215612c4e57600080fd5b612c5784612bb9565b9250602084013567ffffffffffffffff811115612c7357600080fd5b612c7f86828701612bf0565b9497909650939450505050565b60005b83811015612ca7578181015183820152602001612c8f565b50506000910152565b60008151808452612cc8816020860160208601612c8c565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000611da06020830184612cb0565b600060208284031215612d1f57600080fd5b5035919050565b60008060408385031215612d3957600080fd5b82359150612d4960208401612bb9565b90509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60008060408385031215612d9457600080fd5b612d9d83612bb9565b9150602083013567ffffffffffffffff811115612db957600080fd5b8301601f81018513612dca57600080fd5b803567ffffffffffffffff811115612de457612de4612d52565b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8501160116810181811067ffffffffffffffff82111715612e5057612e50612d52565b604052818152828201602001871015612e6857600080fd5b816020840160208301376000602083830101528093505050509250929050565b600080600080600060808688031215612ea057600080fd5b612ea986612bb9565b9450612eb760208701612bb9565b935060408601359250606086013567ffffffffffffffff811115612eda57600080fd5b612ee688828901612bf0565b969995985093965092949392505050565b600080600080600060808688031215612f0f57600080fd5b612f1886612bb9565b945060208601359350612f2d60408701612bb9565b9250606086013567ffffffffffffffff811115612eda57600080fd5b600080600060608486031215612f5e57600080fd5b612f6784612bb9565b9250612f7560208501612bb9565b9150612f8360408501612bb9565b90509250925092565b600080600060608486031215612fa157600080fd5b612faa84612bb9565b925060208401359150612f8360408501612bb9565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b60208152600061301c602083018486612fbf565b949350505050565b8381526040602082015260006129bb604083018486612fbf565b8481526001600160a01b0384166020820152606060408201526000612b2b606083018486612fbf565b60006020828403121561307957600080fd5b81518015158114611da057600080fd5b60006020828403121561309b57600080fd5b5051919050565b8183823760009101908152919050565b600082516130c4818460208701612c8c565b919091019291505056fea26469706673582212200408bf040a3098a9cce7f65bb8ff06c078a2de57e9b22f0fcfc5376aec2d596d64736f6c634300081a0033"; + "0x60a06040523060805234801561001457600080fd5b5061001d610022565b6100d4565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100725760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146100d15780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b60805161327e6100fd60003960008181611f0601528181611f2f01526123bb015261327e6000f3fe6080604052600436106101e35760003560e01c80635c975abb11610102578063ae7a3a6f11610095578063dda79b7511610064578063dda79b751461062e578063e63ab1e91461064e578063f340fa0114610682578063f45346dc1461069557600080fd5b8063ae7a3a6f146105ae578063b8969bd4146105ce578063c0c53b8b146105ee578063d547741f1461060e57600080fd5b806391d14854116100d157806391d14854146104b7578063a217fddf1461051c578063a783c78914610531578063ad3cb1cc1461056557600080fd5b80635c975abb146104175780635d62c8601461044e5780638456cb59146104825780638c6f037f1461049757600080fd5b806335c018db1161017a5780635131ab59116101495780635131ab59146103a257806352d1902d146103c257806357bec62f146103d75780635b112591146103f757600080fd5b806335c018db1461034757806336568abe1461035a5780633f4ba83a1461037a5780634f1ef2861461038f57600080fd5b806321e093b1116101b657806321e093b11461027f578063248a9ca3146102b757806329c59b5d146103145780632f2ff15d1461032757600080fd5b806301ffc9a7146101e857806310188aef1461021d5780631b8b921d1461023f5780631cff79cd1461025f575b600080fd5b3480156101f457600080fd5b50610208610203366004612cf1565b6106b5565b60405190151581526020015b60405180910390f35b34801561022957600080fd5b5061023d610238366004612d4f565b61074e565b005b34801561024b57600080fd5b5061023d61025a366004612db3565b610842565b61027261026d366004612db3565b6108cd565b6040516102149190612e74565b34801561028b57600080fd5b5060035461029f906001600160a01b031681565b6040516001600160a01b039091168152602001610214565b3480156102c357600080fd5b506103066102d2366004612e87565b60009081527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052604090206001015490565b604051908152602001610214565b61023d610322366004612db3565b6109d0565b34801561033357600080fd5b5061023d610342366004612ea0565b610b63565b61023d610355366004612db3565b610bad565b34801561036657600080fd5b5061023d610375366004612ea0565b610d9c565b34801561038657600080fd5b5061023d610de8565b61023d61039d366004612efb565b610e1d565b3480156103ae57600080fd5b5061023d6103bd366004613002565b610e3c565b3480156103ce57600080fd5b50610306611155565b3480156103e357600080fd5b5060025461029f906001600160a01b031681565b34801561040357600080fd5b5060015461029f906001600160a01b031681565b34801561042357600080fd5b507fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff16610208565b34801561045a57600080fd5b506103067f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b981565b34801561048e57600080fd5b5061023d611184565b3480156104a357600080fd5b5061023d6104b2366004613071565b6111b6565b3480156104c357600080fd5b506102086104d2366004612ea0565b60009182527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408084206001600160a01b0393909316845291905290205460ff1690565b34801561052857600080fd5b50610306600081565b34801561053d57600080fd5b506103067f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb81565b34801561057157600080fd5b506102726040518060400160405280600581526020017f352e302e3000000000000000000000000000000000000000000000000000000081525081565b3480156105ba57600080fd5b5061023d6105c9366004612d4f565b6112cc565b3480156105da57600080fd5b5061023d6105e9366004613002565b6113c0565b3480156105fa57600080fd5b5061023d6106093660046130c3565b611579565b34801561061a57600080fd5b5061023d610629366004612ea0565b61182e565b34801561063a57600080fd5b5060005461029f906001600160a01b031681565b34801561065a57600080fd5b506103067f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b61023d610690366004612d4f565b611872565b3480156106a157600080fd5b5061023d6106b0366004613106565b611a07565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061074857507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b600061075981611b02565b6001600160a01b038216610799576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002546001600160a01b0316156107dc576040517f0c8dc01600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6108067f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b983611b0c565b5050600280547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b61084a611bf9565b610852611c57565b826001600160a01b0316336001600160a01b03167f2a21062ee9199c2e205622999eeb7c3da73153674f36a0acd3f74fa6af67bde38484604051610897929190613182565b60405180910390a36108c860017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b505050565b60607f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb6108f981611b02565b610901611bf9565b610909611c57565b6001600160a01b038516610949576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610956868686611cfe565b9050856001600160a01b03167fcaf938de11c367272220bfd1d2baa99ca46665e7bc4d85f00adb51b90fe1fa9f3487876040516109959392919061319e565b60405180910390a291506109c860017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b509392505050565b6109d8611bf9565b6109e0611c57565b34600003610a1a576040517f7671265e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038316610a5a576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546040516000916001600160a01b03169034908381818185875af1925050503d8060008114610aa7576040519150601f19603f3d011682016040523d82523d6000602084013e610aac565b606091505b5050905080610ae7576040517f79cacff100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b836001600160a01b0316336001600160a01b03167f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a43460008787604051610b3194939291906131b8565b60405180910390a3506108c860017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020526040902060010154610b9d81611b02565b610ba78383611b0c565b50505050565b7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb610bd781611b02565b610bdf611bf9565b610be7611c57565b6001600160a01b038416610c27576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000846001600160a01b03163460405160006040518083038185875af1925050503d8060008114610c74576040519150601f19603f3d011682016040523d82523d6000602084013e610c79565b606091505b5050905080610cb4576040517facfdb44400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f8fcaa0b50000000000000000000000000000000000000000000000000000000081526001600160a01b03861690638fcaa0b590610cfb9087908790600401613182565b600060405180830381600087803b158015610d1557600080fd5b505af1158015610d29573d6000803e3d6000fd5b50505050846001600160a01b03167fd5d7616b1678354a0dea9d7e57e6a090bff5babe9f8d6381fdbad16e89ba311c348686604051610d6a9392919061319e565b60405180910390a250610ba760017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b6001600160a01b0381163314610dde576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6108c88282611da7565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610e1281611b02565b610e1a611e6b565b50565b610e25611efb565b610e2e82611fcb565b610e388282611fd6565b5050565b7f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b9610e6681611b02565b610e6e611bf9565b610e76611c57565b83600003610eb0576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038516610ef0576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610efa86866120fa565b610f30576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b0386811660048301526024820186905287169063095ea7b3906044016020604051808303816000875af1158015610f98573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fbc91906131e1565b610ff2576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610ffd858484611cfe565b5061100886866120fa565b61103e576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201526000906001600160a01b038816906370a0823190602401602060405180830381865afa15801561109e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110c29190613203565b905080156110d4576110d4878261218a565b856001600160a01b0316876001600160a01b03167f29c40793bffd84cb810179f15d1ceec72bc7f0785514c668ba36645cf99b738287878760405161111b9392919061319e565b60405180910390a35061114d60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b505050505050565b600061115f6123b0565b507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc90565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a6111ae81611b02565b610e1a612412565b6111be611bf9565b6111c6611c57565b83600003611200576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038516611240576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61124b33848661248b565b846001600160a01b0316336001600160a01b03167f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a48686868660405161129494939291906131b8565b60405180910390a36112c560017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b5050505050565b60006112d781611b02565b6001600160a01b038216611317576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000546001600160a01b03161561135a576040517fb337f37800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6113847f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b983611b0c565b5050600080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b7f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b96113ea81611b02565b6113f2611bf9565b6113fa611c57565b83600003611434576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038516611474576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6114886001600160a01b03871686866126d1565b6040517f8fcaa0b50000000000000000000000000000000000000000000000000000000081526001600160a01b03861690638fcaa0b5906114cf9086908690600401613182565b600060405180830381600087803b1580156114e957600080fd5b505af11580156114fd573d6000803e3d6000fd5b50505050846001600160a01b0316866001600160a01b03167f723fc7be2448075379e4fdf1e6bf5fead954d2668d2da05dcb44ccfec4beeda78686866040516115489392919061319e565b60405180910390a361114d60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156115c45750825b905060008267ffffffffffffffff1660011480156115e15750303b155b9050811580156115ef575080155b15611626576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84547fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000016600117855583156116875784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff16680100000000000000001785555b6001600160a01b03881615806116a457506001600160a01b038716155b156116db576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6116e3612745565b6116eb61274d565b6116f3612745565b6116fb61275d565b611706600087611b0c565b506117317f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a87611b0c565b50600180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b038a1617905561178f7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb89611b0c565b50600380547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03891617905583156118245784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b5050505050505050565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052604090206001015461186881611b02565b610ba78383611da7565b61187a611bf9565b611882611c57565b346000036118bc576040517f7671265e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b0381166118fc576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546040516000916001600160a01b03169034908381818185875af1925050503d8060008114611949576040519150601f19603f3d011682016040523d82523d6000602084013e61194e565b606091505b5050905080611989576040517f79cacff100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60408051348152600060208201819052606082840181905282015290516001600160a01b0384169133917f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a49181900360800190a350610e1a60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b611a0f611bf9565b611a17611c57565b81600003611a51576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038316611a91576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611a9c33828461248b565b826001600160a01b0316336001600160a01b03167f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a484846040516108979291909182526001600160a01b0316602082015260606040820181905260009082015260800190565b610e1a813361276d565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff16611bef576000848152602082815260408083206001600160a01b0387168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055611ba53390565b6001600160a01b0316836001600160a01b0316857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a46001915050610748565b6000915050610748565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff1615611c55576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0080547ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01611cd2576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60029055565b60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b6060600080856001600160a01b0316348686604051611d1e92919061321c565b60006040518083038185875af1925050503d8060008114611d5b576040519150601f19603f3d011682016040523d82523d6000602084013e611d60565b606091505b509150915081611d9c576040517facfdb44400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b9150505b9392505050565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff1615611bef576000848152602082815260408083206001600160a01b038716808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339287917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a46001915050610748565b611e736127fa565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001681557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a150565b306001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161480611f9457507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316611f887f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b6001600160a01b031614155b15611c55576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610e3881611b02565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa92505050801561204e575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820190925261204b91810190613203565b60015b612094576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b03831660048201526024015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc81146120f0576040517faa1d49a40000000000000000000000000000000000000000000000000000000081526004810182905260240161208b565b6108c88383612855565b6040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b038281166004830152600060248301819052919084169063095ea7b3906044016020604051808303816000875af1158015612166573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611da091906131e1565b6003546001600160a01b03908116908316036122d9576002546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152602481018390529083169063095ea7b3906044016020604051808303816000875af115801561220c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061223091906131e1565b612266576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002546040517f743e0c9b000000000000000000000000000000000000000000000000000000008152600481018390526001600160a01b039091169063743e0c9b90602401600060405180830381600087803b1580156122c557600080fd5b505af115801561114d573d6000803e3d6000fd5b6000546040517fd936547e0000000000000000000000000000000000000000000000000000000081526001600160a01b0384811660048301529091169063d936547e90602401602060405180830381865afa15801561233c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061236091906131e1565b612396576040517fac2175f100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600054610e38906001600160a01b038481169116836126d1565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614611c55576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61241a611bf9565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011781557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25833611edd565b6003546001600160a01b03908116908316036125f8576124b66001600160a01b0383168430846128ab565b6002546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152602481018390529083169063095ea7b3906044016020604051808303816000875af1158015612522573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061254691906131e1565b61257c576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002546040517f743e0c9b000000000000000000000000000000000000000000000000000000008152600481018390526001600160a01b039091169063743e0c9b90602401600060405180830381600087803b1580156125db57600080fd5b505af11580156125ef573d6000803e3d6000fd5b50505050505050565b6000546040517fd936547e0000000000000000000000000000000000000000000000000000000081526001600160a01b0384811660048301529091169063d936547e90602401602060405180830381865afa15801561265b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061267f91906131e1565b6126b5576040517fac2175f100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000546108c8906001600160a01b0384811691869116846128ab565b6040516001600160a01b038381166024830152604482018390526108c891859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506128e4565b611c55612960565b612755612960565b611c556129c7565b612765612960565b611c556129cf565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408083206001600160a01b038516845290915290205460ff16610e38576040517fe2517d3f0000000000000000000000000000000000000000000000000000000081526001600160a01b03821660048201526024810183905260440161208b565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff16611c55576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61285e82612a20565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a28051156128a3576108c88282612ac8565b610e38612b3e565b6040516001600160a01b038481166024830152838116604483015260648201839052610ba79186918216906323b872dd906084016126fe565b60006128f96001600160a01b03841683612b76565b9050805160001415801561291e57508080602001905181019061291c91906131e1565b155b156108c8576040517f5274afe70000000000000000000000000000000000000000000000000000000081526001600160a01b038416600482015260240161208b565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff16611c55576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611cd8612960565b6129d7612960565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055565b806001600160a01b03163b600003612a6f576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b038216600482015260240161208b565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6060600080846001600160a01b031684604051612ae5919061322c565b600060405180830381855af49150503d8060008114612b20576040519150601f19603f3d011682016040523d82523d6000602084013e612b25565b606091505b5091509150612b35858383612b84565b95945050505050565b3415611c55576040517fb398979f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6060611da083836000612bf9565b606082612b9957612b9482612caf565b611da0565b8151158015612bb057506001600160a01b0384163b155b15612bf2576040517f9996b3150000000000000000000000000000000000000000000000000000000081526001600160a01b038516600482015260240161208b565b5080611da0565b606081471015612c37576040517fcd78605900000000000000000000000000000000000000000000000000000000815230600482015260240161208b565b600080856001600160a01b03168486604051612c53919061322c565b60006040518083038185875af1925050503d8060008114612c90576040519150601f19603f3d011682016040523d82523d6000602084013e612c95565b606091505b5091509150612ca5868383612b84565b9695505050505050565b805115612cbf5780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060208284031215612d0357600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114611da057600080fd5b80356001600160a01b0381168114612d4a57600080fd5b919050565b600060208284031215612d6157600080fd5b611da082612d33565b60008083601f840112612d7c57600080fd5b50813567ffffffffffffffff811115612d9457600080fd5b602083019150836020828501011115612dac57600080fd5b9250929050565b600080600060408486031215612dc857600080fd5b612dd184612d33565b9250602084013567ffffffffffffffff811115612ded57600080fd5b612df986828701612d6a565b9497909650939450505050565b60005b83811015612e21578181015183820152602001612e09565b50506000910152565b60008151808452612e42816020860160208601612e06565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000611da06020830184612e2a565b600060208284031215612e9957600080fd5b5035919050565b60008060408385031215612eb357600080fd5b82359150612ec360208401612d33565b90509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60008060408385031215612f0e57600080fd5b612f1783612d33565b9150602083013567ffffffffffffffff811115612f3357600080fd5b8301601f81018513612f4457600080fd5b803567ffffffffffffffff811115612f5e57612f5e612ecc565b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8501160116810181811067ffffffffffffffff82111715612fca57612fca612ecc565b604052818152828201602001871015612fe257600080fd5b816020840160208301376000602083830101528093505050509250929050565b60008060008060006080868803121561301a57600080fd5b61302386612d33565b945061303160208701612d33565b935060408601359250606086013567ffffffffffffffff81111561305457600080fd5b61306088828901612d6a565b969995985093965092949392505050565b60008060008060006080868803121561308957600080fd5b61309286612d33565b9450602086013593506130a760408701612d33565b9250606086013567ffffffffffffffff81111561305457600080fd5b6000806000606084860312156130d857600080fd5b6130e184612d33565b92506130ef60208501612d33565b91506130fd60408501612d33565b90509250925092565b60008060006060848603121561311b57600080fd5b61312484612d33565b9250602084013591506130fd60408501612d33565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b602081526000613196602083018486613139565b949350505050565b838152604060208201526000612b35604083018486613139565b8481526001600160a01b0384166020820152606060408201526000612ca5606083018486613139565b6000602082840312156131f357600080fd5b81518015158114611da057600080fd5b60006020828403121561321557600080fd5b5051919050565b8183823760009101908152919050565b6000825161323e818460208701612e06565b919091019291505056fea26469706673582212200a52884ba895ee02e7bedb4efa2b0b5651b56a4a1ec71f83b2704f710c1e97c664736f6c634300081a0033"; type GatewayEVMConstructorParams = | [signer?: Signer] diff --git a/v2/typechain-types/factories/GatewayZEVM__factory.ts b/v2/typechain-types/factories/GatewayZEVM__factory.ts index 7347cda0..dfc665b2 100644 --- a/v2/typechain-types/factories/GatewayZEVM__factory.ts +++ b/v2/typechain-types/factories/GatewayZEVM__factory.ts @@ -1031,7 +1031,7 @@ const _abi = [ ] as const; const _bytecode = - "0x60a06040523060805234801561001457600080fd5b5061001d610022565b6100d4565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100725760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146100d15780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b6080516132346100fd600039600081816123650152818161238e015261254601526132346000f3fe6080604052600436106101bb5760003560e01c80635af65967116100ec578063a217fddf1161008a578063c39aca3711610064578063c39aca3714610600578063d547741f14610620578063e63ab1e914610640578063f45346dc1461067457600080fd5b8063a217fddf14610575578063ad3cb1cc1461058a578063bcf7f32b146105e057600080fd5b80637993c1e0116100c65780637993c1e0146104bb57806380bd3d03146104db5780638456cb59146104fb57806391d148541461051057600080fd5b80635af65967146104445780635c975abb146104645780635d40e1781461049b57600080fd5b806336568abe11610159578063441a3e7011610133578063441a3e70146103dc578063485cc955146103fc5780634f1ef2861461041c57806352d1902d1461042f57600080fd5b806336568abe1461037f5780633ce4a5bc1461039f5780633f4ba83a146103c757600080fd5b806321e093b11161019557806321e093b1146102aa578063248a9ca3146102e25780632f2ff15d1461033f578063309f50041461035f57600080fd5b806301ffc9a714610235578063135390f91461026a57806321501a951461028a57600080fd5b36610230576101c8610694565b6000546001600160a01b031633148015906101f757503373735b14bb79463307aacbed86daf3322b1e6226ab14155b1561022e576040517f229930b200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b005b600080fd5b34801561024157600080fd5b50610255610250366004612a24565b6106f2565b60405190151581526020015b60405180910390f35b34801561027657600080fd5b5061022e610285366004612b3a565b61078b565b34801561029657600080fd5b5061022e6102a5366004612bf6565b6108f9565b3480156102b657600080fd5b506000546102ca906001600160a01b031681565b6040516001600160a01b039091168152602001610261565b3480156102ee57600080fd5b506103316102fd366004612c82565b60009081527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052604090206001015490565b604051908152602001610261565b34801561034b57600080fd5b5061022e61035a366004612c9b565b610ac6565b34801561036b57600080fd5b5061022e61037a366004612ccb565b610b10565b34801561038b57600080fd5b5061022e61039a366004612c9b565b610c7a565b3480156103ab57600080fd5b506102ca73735b14bb79463307aacbed86daf3322b1e6226ab81565b3480156103d357600080fd5b5061022e610cc6565b3480156103e857600080fd5b5061022e6103f7366004612d69565b610cfb565b34801561040857600080fd5b5061022e610417366004612d8b565b610e18565b61022e61042a366004612db9565b61106e565b34801561043b57600080fd5b50610331611089565b34801561045057600080fd5b5061022e61045f366004612ccb565b6110b8565b34801561047057600080fd5b507fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff16610255565b3480156104a757600080fd5b5061022e6104b6366004612e09565b6112c7565b3480156104c757600080fd5b5061022e6104d6366004612e7e565b611381565b3480156104e757600080fd5b5061022e6104f6366004612eb9565b6114f5565b34801561050757600080fd5b5061022e6115e1565b34801561051c57600080fd5b5061025561052b366004612c9b565b60009182527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408084206001600160a01b0393909316845291905290205460ff1690565b34801561058157600080fd5b50610331600081565b34801561059657600080fd5b506105d36040518060400160405280600581526020017f352e302e3000000000000000000000000000000000000000000000000000000081525081565b6040516102619190612f44565b3480156105ec57600080fd5b5061022e6105fb366004612ccb565b611613565b34801561060c57600080fd5b5061022e61061b366004612ccb565b611743565b34801561062c57600080fd5b5061022e61063b366004612c9b565b611952565b34801561064c57600080fd5b506103317f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b34801561068057600080fd5b5061022e61068f366004612f57565b611996565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff16156106f0576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061078557507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b610793611ba5565b61079b610694565b82516000036107d6576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b81600003610810576040517f5d67094f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061081c8383611c26565b90506000336001600160a01b03167fde19dbe881cc0aeeb6e73ce19ac7b5ca695e6be8a076e3eb42292005a7fec1b586858786886001600160a01b0316634d8943bb6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561088d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108b19190612f8e565b6040516108c2959493929190612fa7565b60405180910390a3506108f460017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610946576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61094e610694565b6001600160a01b03831661098e576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b836000036109c8576040517f19c08f4900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03831673735b14bb79463307aacbed86daf3322b1e6226ab14806109fb57506001600160a01b03831630145b15610a32576040517f82d5d76a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610a3c8484611f19565b6000546040517fde43156e0000000000000000000000000000000000000000000000000000000081526001600160a01b038086169263de43156e92610a8d928a9216908990889088906004016130c6565b600060405180830381600087803b158015610aa757600080fd5b505af1158015610abb573d6000803e3d6000fd5b505050505050505050565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020526040902060010154610b00816120e7565b610b0a83836120f1565b50505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610b5d576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610b65610694565b6001600160a01b0385161580610b8257506001600160a01b038316155b15610bb9576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b83600003610bf3576040517f5d67094f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f69582bee0000000000000000000000000000000000000000000000000000000081526001600160a01b038416906369582bee90610c4090899089908990889088906004016130c6565b600060405180830381600087803b158015610c5a57600080fd5b505af1158015610c6e573d6000803e3d6000fd5b50505050505050505050565b6001600160a01b0381163314610cbc576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6108f482826121de565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610cf0816120e7565b610cf86122a2565b50565b610d03611ba5565b610d0b610694565b81600003610d45576040517f19c08f4900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610d638273735b14bb79463307aacbed86daf3322b1e6226ab611f19565b6040517f735b14bb79463307aacbed86daf3322b1e6226ab0000000000000000000000006020820152819033907fde19dbe881cc0aeeb6e73ce19ac7b5ca695e6be8a076e3eb42292005a7fec1b59060340160408051601f198184030181529082905260008054610de3936001600160a01b039091169189918190612fa7565b60405180910390a3610e1460017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b5050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff16600081158015610e635750825b905060008267ffffffffffffffff166001148015610e805750303b155b905081158015610e8e575080155b15610ec5576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001660011785558315610f265784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff16680100000000000000001785555b6001600160a01b0387161580610f4357506001600160a01b038616155b15610f7a576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610f82612332565b610f8a612332565b610f9261233a565b610f9a61234a565b610fa56000876120f1565b50610fd07f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a876120f1565b50600080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03891617905583156110655784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50505050505050565b61107661235a565b61107f8261242a565b610e148282612435565b600061109361253b565b507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc90565b3373735b14bb79463307aacbed86daf3322b1e6226ab14611105576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61110d610694565b6001600160a01b038516158061112a57506001600160a01b038316155b15611161576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8360000361119b576040517f5d67094f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03831673735b14bb79463307aacbed86daf3322b1e6226ab14806111ce57506001600160a01b03831630145b15611205576040517f82d5d76a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f47e7ef240000000000000000000000000000000000000000000000000000000081526001600160a01b038481166004830152602482018690528616906347e7ef24906044016020604051808303816000875af115801561126d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611291919061310d565b610bf3576040517f47d19fab00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6112cf611ba5565b6112d7610694565b8351600003611312576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b82336001600160a01b03167f5322ffbbf9261ff1f8138247942d2b03b28717141ef0a0dd080fc4be9c4e78d38685856040516113509392919061312f565b60405180910390a3610b0a60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b611389611ba5565b611391610694565b84516000036113cc576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b83600003611406576040517f5d67094f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006114128585611c26565b90506000336001600160a01b03167fde19dbe881cc0aeeb6e73ce19ac7b5ca695e6be8a076e3eb42292005a7fec1b5888789868a6001600160a01b0316634d8943bb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611483573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114a79190612f8e565b8a8a6040516114bc979695949392919061315f565b60405180910390a3506114ee60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b5050505050565b6114fd611ba5565b611505610694565b8360000361153f576040517f19c08f4900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61155d8473735b14bb79463307aacbed86daf3322b1e6226ab611f19565b6040517f735b14bb79463307aacbed86daf3322b1e6226ab0000000000000000000000006020820152839033907fde19dbe881cc0aeeb6e73ce19ac7b5ca695e6be8a076e3eb42292005a7fec1b59060340160408051601f198184030181529082905260008054611350936001600160a01b03909116918b9181908b908b9061315f565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61160b816120e7565b610cf861259d565b3373735b14bb79463307aacbed86daf3322b1e6226ab14611660576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611668610694565b6001600160a01b038516158061168557506001600160a01b038316155b156116bc576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b836000036116f6576040517f5d67094f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517fde43156e0000000000000000000000000000000000000000000000000000000081526001600160a01b0384169063de43156e90610c4090899089908990889088906004016130c6565b3373735b14bb79463307aacbed86daf3322b1e6226ab14611790576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611798610694565b6001600160a01b03851615806117b557506001600160a01b038316155b156117ec576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b83600003611826576040517f5d67094f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03831673735b14bb79463307aacbed86daf3322b1e6226ab148061185957506001600160a01b03831630145b15611890576040517f82d5d76a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f47e7ef240000000000000000000000000000000000000000000000000000000081526001600160a01b038481166004830152602482018690528616906347e7ef24906044016020604051808303816000875af11580156118f8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061191c919061310d565b6116f6576040517f47d19fab00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052604090206001015461198c816120e7565b610b0a83836121de565b3373735b14bb79463307aacbed86daf3322b1e6226ab146119e3576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6119eb610694565b6001600160a01b0383161580611a0857506001600160a01b038116155b15611a3f576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b81600003611a79576040517f5d67094f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03811673735b14bb79463307aacbed86daf3322b1e6226ab1480611aac57506001600160a01b03811630145b15611ae3576040517f82d5d76a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f47e7ef240000000000000000000000000000000000000000000000000000000081526001600160a01b038281166004830152602482018490528416906347e7ef24906044016020604051808303816000875af1158015611b4b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b6f919061310d565b6108f4576040517f47d19fab00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0080547ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01611c20576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60029055565b6000806000836001600160a01b031663d9eeebed6040518163ffffffff1660e01b81526004016040805180830381865afa158015611c68573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c8c91906131b4565b6040517f23b872dd00000000000000000000000000000000000000000000000000000000815233600482015273735b14bb79463307aacbed86daf3322b1e6226ab60248201526044810182905291935091506001600160a01b038316906323b872dd906064016020604051808303816000875af1158015611d11573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d35919061310d565b611d6b576040517f0a7cd6d600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f23b872dd000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018690526001600160a01b038516906323b872dd906064016020604051808303816000875af1158015611dd7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611dfb919061310d565b611e31576040517f4dd9ee8d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f42966c68000000000000000000000000000000000000000000000000000000008152600481018690526001600160a01b038516906342966c68906024016020604051808303816000875af1158015611e91573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611eb5919061310d565b611eeb576040517f2c77e05c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b949350505050565b60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b6000546040517f23b872dd000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018490526001600160a01b03909116906323b872dd906064016020604051808303816000875af1158015611f89573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fad919061310d565b611fe3576040517fc7ffc47b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000546040517f2e1a7d4d000000000000000000000000000000000000000000000000000000008152600481018490526001600160a01b0390911690632e1a7d4d90602401600060405180830381600087803b15801561204257600080fd5b505af1158015612056573d6000803e3d6000fd5b505050506000816001600160a01b03168360405160006040518083038185875af1925050503d80600081146120a7576040519150601f19603f3d011682016040523d82523d6000602084013e6120ac565b606091505b50509050806108f4576040517fc7ffc47b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610cf88133612616565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff166121d4576000848152602082815260408083206001600160a01b0387168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905561218a3390565b6001600160a01b0316836001600160a01b0316857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a46001915050610785565b6000915050610785565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff16156121d4576000848152602082815260408083206001600160a01b038716808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339287917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a46001915050610785565b6122aa6126a3565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001681557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a150565b6106f06126fe565b6123426126fe565b6106f0612765565b6123526126fe565b6106f06127b6565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806123f357507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166123e77f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b6001600160a01b031614155b156106f0576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610e14816120e7565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa92505050801561248f575060408051601f3d908101601f1916820190925261248c91810190612f8e565b60015b6124d5576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b03831660048201526024015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8114612531576040517faa1d49a4000000000000000000000000000000000000000000000000000000008152600481018290526024016124cc565b6108f483836127be565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146106f0576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6125a5610694565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011781557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25833612314565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408083206001600160a01b038516845290915290205460ff16610e14576040517fe2517d3f0000000000000000000000000000000000000000000000000000000081526001600160a01b0382166004820152602481018390526044016124cc565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff166106f0576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff166106f0576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61276d6126fe565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055565b611ef36126fe565b6127c782612814565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a280511561280c576108f482826128bc565b610e14612932565b806001600160a01b03163b600003612863576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b03821660048201526024016124cc565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6060600080846001600160a01b0316846040516128d991906131e2565b600060405180830381855af49150503d8060008114612914576040519150601f19603f3d011682016040523d82523d6000602084013e612919565b606091505b509150915061292985838361296a565b95945050505050565b34156106f0576040517fb398979f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60608261297f5761297a826129e2565b6129db565b815115801561299657506001600160a01b0384163b155b156129d8576040517f9996b3150000000000000000000000000000000000000000000000000000000081526001600160a01b03851660048201526024016124cc565b50805b9392505050565b8051156129f25780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060208284031215612a3657600080fd5b81357fffffffff00000000000000000000000000000000000000000000000000000000811681146129db57600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600082601f830112612aa657600080fd5b813567ffffffffffffffff811115612ac057612ac0612a66565b604051601f19603f601f19601f8501160116810181811067ffffffffffffffff82111715612af057612af0612a66565b604052818152838201602001851015612b0857600080fd5b816020850160208301376000918101602001919091529392505050565b6001600160a01b0381168114610cf857600080fd5b600080600060608486031215612b4f57600080fd5b833567ffffffffffffffff811115612b6657600080fd5b612b7286828701612a95565b935050602084013591506040840135612b8a81612b25565b809150509250925092565b600060608284031215612ba757600080fd5b50919050565b60008083601f840112612bbf57600080fd5b50813567ffffffffffffffff811115612bd757600080fd5b602083019150836020828501011115612bef57600080fd5b9250929050565b600080600080600060808688031215612c0e57600080fd5b853567ffffffffffffffff811115612c2557600080fd5b612c3188828901612b95565b955050602086013593506040860135612c4981612b25565b9250606086013567ffffffffffffffff811115612c6557600080fd5b612c7188828901612bad565b969995985093965092949392505050565b600060208284031215612c9457600080fd5b5035919050565b60008060408385031215612cae57600080fd5b823591506020830135612cc081612b25565b809150509250929050565b60008060008060008060a08789031215612ce457600080fd5b863567ffffffffffffffff811115612cfb57600080fd5b612d0789828a01612b95565b9650506020870135612d1881612b25565b9450604087013593506060870135612d2f81612b25565b9250608087013567ffffffffffffffff811115612d4b57600080fd5b612d5789828a01612bad565b979a9699509497509295939492505050565b60008060408385031215612d7c57600080fd5b50508035926020909101359150565b60008060408385031215612d9e57600080fd5b8235612da981612b25565b91506020830135612cc081612b25565b60008060408385031215612dcc57600080fd5b8235612dd781612b25565b9150602083013567ffffffffffffffff811115612df357600080fd5b612dff85828601612a95565b9150509250929050565b60008060008060608587031215612e1f57600080fd5b843567ffffffffffffffff811115612e3657600080fd5b612e4287828801612a95565b94505060208501359250604085013567ffffffffffffffff811115612e6657600080fd5b612e7287828801612bad565b95989497509550505050565b600080600080600060808688031215612e9657600080fd5b853567ffffffffffffffff811115612ead57600080fd5b612c3188828901612a95565b60008060008060608587031215612ecf57600080fd5b8435935060208501359250604085013567ffffffffffffffff811115612e6657600080fd5b60005b83811015612f0f578181015183820152602001612ef7565b50506000910152565b60008151808452612f30816020860160208601612ef4565b601f01601f19169290920160200192915050565b6020815260006129db6020830184612f18565b600080600060608486031215612f6c57600080fd5b8335612f7781612b25565b9250602084013591506040840135612b8a81612b25565b600060208284031215612fa057600080fd5b5051919050565b60c081526000612fba60c0830188612f18565b6001600160a01b038716602084015285604084015284606084015283608084015282810360a084015260008152602081019150509695505050505050565b818352818160208501375060006020828401015260006020601f19601f840116840101905092915050565b600081357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe183360301811261305757600080fd5b820160208101903567ffffffffffffffff81111561307457600080fd5b80360382131561308357600080fd5b60608552613095606086018284612ff8565b91505060208301356130a681612b25565b6001600160a01b0316602085015260409283013592909301919091525090565b6080815260006130d96080830188613023565b6001600160a01b03871660208401528560408401528281036060840152613101818587612ff8565b98975050505050505050565b60006020828403121561311f57600080fd5b815180151581146129db57600080fd5b6040815260006131426040830186612f18565b8281036020840152613155818587612ff8565b9695505050505050565b60c08152600061317260c083018a612f18565b6001600160a01b038916602084015287604084015286606084015285608084015282810360a08401526131a6818587612ff8565b9a9950505050505050505050565b600080604083850312156131c757600080fd5b82516131d281612b25565b6020939093015192949293505050565b600082516131f4818460208701612ef4565b919091019291505056fea2646970667358221220e552e065fe0e33093f4ee925441290718d332f30e2458c48850361f698017df664736f6c634300081a0033"; + "0x60a06040523060805234801561001457600080fd5b5061001d610022565b6100d4565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100725760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146100d15780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b6080516132346100fd600039600081816123650152818161238e015261254601526132346000f3fe6080604052600436106101bb5760003560e01c80635af65967116100ec578063a217fddf1161008a578063c39aca3711610064578063c39aca3714610600578063d547741f14610620578063e63ab1e914610640578063f45346dc1461067457600080fd5b8063a217fddf14610575578063ad3cb1cc1461058a578063bcf7f32b146105e057600080fd5b80637993c1e0116100c65780637993c1e0146104bb57806380bd3d03146104db5780638456cb59146104fb57806391d148541461051057600080fd5b80635af65967146104445780635c975abb146104645780635d40e1781461049b57600080fd5b806336568abe11610159578063441a3e7011610133578063441a3e70146103dc578063485cc955146103fc5780634f1ef2861461041c57806352d1902d1461042f57600080fd5b806336568abe1461037f5780633ce4a5bc1461039f5780633f4ba83a146103c757600080fd5b806321e093b11161019557806321e093b1146102aa578063248a9ca3146102e25780632f2ff15d1461033f578063309f50041461035f57600080fd5b806301ffc9a714610235578063135390f91461026a57806321501a951461028a57600080fd5b36610230576101c8610694565b6000546001600160a01b031633148015906101f757503373735b14bb79463307aacbed86daf3322b1e6226ab14155b1561022e576040517f229930b200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b005b600080fd5b34801561024157600080fd5b50610255610250366004612a24565b6106f2565b60405190151581526020015b60405180910390f35b34801561027657600080fd5b5061022e610285366004612b3a565b61078b565b34801561029657600080fd5b5061022e6102a5366004612bf6565b6108f9565b3480156102b657600080fd5b506000546102ca906001600160a01b031681565b6040516001600160a01b039091168152602001610261565b3480156102ee57600080fd5b506103316102fd366004612c82565b60009081527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052604090206001015490565b604051908152602001610261565b34801561034b57600080fd5b5061022e61035a366004612c9b565b610ac6565b34801561036b57600080fd5b5061022e61037a366004612ccb565b610b10565b34801561038b57600080fd5b5061022e61039a366004612c9b565b610c7a565b3480156103ab57600080fd5b506102ca73735b14bb79463307aacbed86daf3322b1e6226ab81565b3480156103d357600080fd5b5061022e610cc6565b3480156103e857600080fd5b5061022e6103f7366004612d69565b610cfb565b34801561040857600080fd5b5061022e610417366004612d8b565b610e18565b61022e61042a366004612db9565b61106e565b34801561043b57600080fd5b50610331611089565b34801561045057600080fd5b5061022e61045f366004612ccb565b6110b8565b34801561047057600080fd5b507fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff16610255565b3480156104a757600080fd5b5061022e6104b6366004612e09565b6112c7565b3480156104c757600080fd5b5061022e6104d6366004612e7e565b611381565b3480156104e757600080fd5b5061022e6104f6366004612eb9565b6114f5565b34801561050757600080fd5b5061022e6115e1565b34801561051c57600080fd5b5061025561052b366004612c9b565b60009182527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408084206001600160a01b0393909316845291905290205460ff1690565b34801561058157600080fd5b50610331600081565b34801561059657600080fd5b506105d36040518060400160405280600581526020017f352e302e3000000000000000000000000000000000000000000000000000000081525081565b6040516102619190612f44565b3480156105ec57600080fd5b5061022e6105fb366004612ccb565b611613565b34801561060c57600080fd5b5061022e61061b366004612ccb565b611743565b34801561062c57600080fd5b5061022e61063b366004612c9b565b611952565b34801561064c57600080fd5b506103317f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b34801561068057600080fd5b5061022e61068f366004612f57565b611996565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff16156106f0576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061078557507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b610793611ba5565b61079b610694565b82516000036107d6576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b81600003610810576040517f5d67094f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061081c8383611c26565b90506000336001600160a01b03167fde19dbe881cc0aeeb6e73ce19ac7b5ca695e6be8a076e3eb42292005a7fec1b586858786886001600160a01b0316634d8943bb6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561088d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108b19190612f8e565b6040516108c2959493929190612fa7565b60405180910390a3506108f460017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610946576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61094e610694565b6001600160a01b03831661098e576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b836000036109c8576040517f19c08f4900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03831673735b14bb79463307aacbed86daf3322b1e6226ab14806109fb57506001600160a01b03831630145b15610a32576040517f82d5d76a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610a3c8484611f19565b6000546040517fde43156e0000000000000000000000000000000000000000000000000000000081526001600160a01b038086169263de43156e92610a8d928a9216908990889088906004016130c6565b600060405180830381600087803b158015610aa757600080fd5b505af1158015610abb573d6000803e3d6000fd5b505050505050505050565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020526040902060010154610b00816120e7565b610b0a83836120f1565b50505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610b5d576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610b65610694565b6001600160a01b0385161580610b8257506001600160a01b038316155b15610bb9576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b83600003610bf3576040517f5d67094f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f69582bee0000000000000000000000000000000000000000000000000000000081526001600160a01b038416906369582bee90610c4090899089908990889088906004016130c6565b600060405180830381600087803b158015610c5a57600080fd5b505af1158015610c6e573d6000803e3d6000fd5b50505050505050505050565b6001600160a01b0381163314610cbc576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6108f482826121de565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610cf0816120e7565b610cf86122a2565b50565b610d03611ba5565b610d0b610694565b81600003610d45576040517f19c08f4900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610d638273735b14bb79463307aacbed86daf3322b1e6226ab611f19565b6040517f735b14bb79463307aacbed86daf3322b1e6226ab0000000000000000000000006020820152819033907fde19dbe881cc0aeeb6e73ce19ac7b5ca695e6be8a076e3eb42292005a7fec1b59060340160408051601f198184030181529082905260008054610de3936001600160a01b039091169189918190612fa7565b60405180910390a3610e1460017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b5050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff16600081158015610e635750825b905060008267ffffffffffffffff166001148015610e805750303b155b905081158015610e8e575080155b15610ec5576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001660011785558315610f265784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff16680100000000000000001785555b6001600160a01b0387161580610f4357506001600160a01b038616155b15610f7a576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610f82612332565b610f8a612332565b610f9261233a565b610f9a61234a565b610fa56000876120f1565b50610fd07f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a876120f1565b50600080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03891617905583156110655784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50505050505050565b61107661235a565b61107f8261242a565b610e148282612435565b600061109361253b565b507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc90565b3373735b14bb79463307aacbed86daf3322b1e6226ab14611105576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61110d610694565b6001600160a01b038516158061112a57506001600160a01b038316155b15611161576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8360000361119b576040517f5d67094f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03831673735b14bb79463307aacbed86daf3322b1e6226ab14806111ce57506001600160a01b03831630145b15611205576040517f82d5d76a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f47e7ef240000000000000000000000000000000000000000000000000000000081526001600160a01b038481166004830152602482018690528616906347e7ef24906044016020604051808303816000875af115801561126d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611291919061310d565b610bf3576040517f47d19fab00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6112cf611ba5565b6112d7610694565b8351600003611312576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b82336001600160a01b03167f5322ffbbf9261ff1f8138247942d2b03b28717141ef0a0dd080fc4be9c4e78d38685856040516113509392919061312f565b60405180910390a3610b0a60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b611389611ba5565b611391610694565b84516000036113cc576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b83600003611406576040517f5d67094f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006114128585611c26565b90506000336001600160a01b03167fde19dbe881cc0aeeb6e73ce19ac7b5ca695e6be8a076e3eb42292005a7fec1b5888789868a6001600160a01b0316634d8943bb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611483573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114a79190612f8e565b8a8a6040516114bc979695949392919061315f565b60405180910390a3506114ee60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b5050505050565b6114fd611ba5565b611505610694565b8360000361153f576040517f19c08f4900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61155d8473735b14bb79463307aacbed86daf3322b1e6226ab611f19565b6040517f735b14bb79463307aacbed86daf3322b1e6226ab0000000000000000000000006020820152839033907fde19dbe881cc0aeeb6e73ce19ac7b5ca695e6be8a076e3eb42292005a7fec1b59060340160408051601f198184030181529082905260008054611350936001600160a01b03909116918b9181908b908b9061315f565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61160b816120e7565b610cf861259d565b3373735b14bb79463307aacbed86daf3322b1e6226ab14611660576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611668610694565b6001600160a01b038516158061168557506001600160a01b038316155b156116bc576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b836000036116f6576040517f5d67094f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517fde43156e0000000000000000000000000000000000000000000000000000000081526001600160a01b0384169063de43156e90610c4090899089908990889088906004016130c6565b3373735b14bb79463307aacbed86daf3322b1e6226ab14611790576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611798610694565b6001600160a01b03851615806117b557506001600160a01b038316155b156117ec576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b83600003611826576040517f5d67094f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03831673735b14bb79463307aacbed86daf3322b1e6226ab148061185957506001600160a01b03831630145b15611890576040517f82d5d76a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f47e7ef240000000000000000000000000000000000000000000000000000000081526001600160a01b038481166004830152602482018690528616906347e7ef24906044016020604051808303816000875af11580156118f8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061191c919061310d565b6116f6576040517f47d19fab00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052604090206001015461198c816120e7565b610b0a83836121de565b3373735b14bb79463307aacbed86daf3322b1e6226ab146119e3576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6119eb610694565b6001600160a01b0383161580611a0857506001600160a01b038116155b15611a3f576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b81600003611a79576040517f5d67094f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03811673735b14bb79463307aacbed86daf3322b1e6226ab1480611aac57506001600160a01b03811630145b15611ae3576040517f82d5d76a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f47e7ef240000000000000000000000000000000000000000000000000000000081526001600160a01b038281166004830152602482018490528416906347e7ef24906044016020604051808303816000875af1158015611b4b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b6f919061310d565b6108f4576040517f47d19fab00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0080547ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01611c20576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60029055565b6000806000836001600160a01b031663d9eeebed6040518163ffffffff1660e01b81526004016040805180830381865afa158015611c68573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c8c91906131b4565b6040517f23b872dd00000000000000000000000000000000000000000000000000000000815233600482015273735b14bb79463307aacbed86daf3322b1e6226ab60248201526044810182905291935091506001600160a01b038316906323b872dd906064016020604051808303816000875af1158015611d11573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d35919061310d565b611d6b576040517f0a7cd6d600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f23b872dd000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018690526001600160a01b038516906323b872dd906064016020604051808303816000875af1158015611dd7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611dfb919061310d565b611e31576040517f4dd9ee8d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f42966c68000000000000000000000000000000000000000000000000000000008152600481018690526001600160a01b038516906342966c68906024016020604051808303816000875af1158015611e91573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611eb5919061310d565b611eeb576040517f2c77e05c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b949350505050565b60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b6000546040517f23b872dd000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018490526001600160a01b03909116906323b872dd906064016020604051808303816000875af1158015611f89573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fad919061310d565b611fe3576040517fc7ffc47b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000546040517f2e1a7d4d000000000000000000000000000000000000000000000000000000008152600481018490526001600160a01b0390911690632e1a7d4d90602401600060405180830381600087803b15801561204257600080fd5b505af1158015612056573d6000803e3d6000fd5b505050506000816001600160a01b03168360405160006040518083038185875af1925050503d80600081146120a7576040519150601f19603f3d011682016040523d82523d6000602084013e6120ac565b606091505b50509050806108f4576040517fc7ffc47b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610cf88133612616565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff166121d4576000848152602082815260408083206001600160a01b0387168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905561218a3390565b6001600160a01b0316836001600160a01b0316857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a46001915050610785565b6000915050610785565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff16156121d4576000848152602082815260408083206001600160a01b038716808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339287917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a46001915050610785565b6122aa6126a3565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001681557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a150565b6106f06126fe565b6123426126fe565b6106f0612765565b6123526126fe565b6106f06127b6565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806123f357507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166123e77f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b6001600160a01b031614155b156106f0576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610e14816120e7565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa92505050801561248f575060408051601f3d908101601f1916820190925261248c91810190612f8e565b60015b6124d5576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b03831660048201526024015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8114612531576040517faa1d49a4000000000000000000000000000000000000000000000000000000008152600481018290526024016124cc565b6108f483836127be565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146106f0576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6125a5610694565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011781557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25833612314565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408083206001600160a01b038516845290915290205460ff16610e14576040517fe2517d3f0000000000000000000000000000000000000000000000000000000081526001600160a01b0382166004820152602481018390526044016124cc565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff166106f0576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff166106f0576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61276d6126fe565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055565b611ef36126fe565b6127c782612814565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a280511561280c576108f482826128bc565b610e14612932565b806001600160a01b03163b600003612863576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b03821660048201526024016124cc565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6060600080846001600160a01b0316846040516128d991906131e2565b600060405180830381855af49150503d8060008114612914576040519150601f19603f3d011682016040523d82523d6000602084013e612919565b606091505b509150915061292985838361296a565b95945050505050565b34156106f0576040517fb398979f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60608261297f5761297a826129e2565b6129db565b815115801561299657506001600160a01b0384163b155b156129d8576040517f9996b3150000000000000000000000000000000000000000000000000000000081526001600160a01b03851660048201526024016124cc565b50805b9392505050565b8051156129f25780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060208284031215612a3657600080fd5b81357fffffffff00000000000000000000000000000000000000000000000000000000811681146129db57600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600082601f830112612aa657600080fd5b813567ffffffffffffffff811115612ac057612ac0612a66565b604051601f19603f601f19601f8501160116810181811067ffffffffffffffff82111715612af057612af0612a66565b604052818152838201602001851015612b0857600080fd5b816020850160208301376000918101602001919091529392505050565b6001600160a01b0381168114610cf857600080fd5b600080600060608486031215612b4f57600080fd5b833567ffffffffffffffff811115612b6657600080fd5b612b7286828701612a95565b935050602084013591506040840135612b8a81612b25565b809150509250925092565b600060608284031215612ba757600080fd5b50919050565b60008083601f840112612bbf57600080fd5b50813567ffffffffffffffff811115612bd757600080fd5b602083019150836020828501011115612bef57600080fd5b9250929050565b600080600080600060808688031215612c0e57600080fd5b853567ffffffffffffffff811115612c2557600080fd5b612c3188828901612b95565b955050602086013593506040860135612c4981612b25565b9250606086013567ffffffffffffffff811115612c6557600080fd5b612c7188828901612bad565b969995985093965092949392505050565b600060208284031215612c9457600080fd5b5035919050565b60008060408385031215612cae57600080fd5b823591506020830135612cc081612b25565b809150509250929050565b60008060008060008060a08789031215612ce457600080fd5b863567ffffffffffffffff811115612cfb57600080fd5b612d0789828a01612b95565b9650506020870135612d1881612b25565b9450604087013593506060870135612d2f81612b25565b9250608087013567ffffffffffffffff811115612d4b57600080fd5b612d5789828a01612bad565b979a9699509497509295939492505050565b60008060408385031215612d7c57600080fd5b50508035926020909101359150565b60008060408385031215612d9e57600080fd5b8235612da981612b25565b91506020830135612cc081612b25565b60008060408385031215612dcc57600080fd5b8235612dd781612b25565b9150602083013567ffffffffffffffff811115612df357600080fd5b612dff85828601612a95565b9150509250929050565b60008060008060608587031215612e1f57600080fd5b843567ffffffffffffffff811115612e3657600080fd5b612e4287828801612a95565b94505060208501359250604085013567ffffffffffffffff811115612e6657600080fd5b612e7287828801612bad565b95989497509550505050565b600080600080600060808688031215612e9657600080fd5b853567ffffffffffffffff811115612ead57600080fd5b612c3188828901612a95565b60008060008060608587031215612ecf57600080fd5b8435935060208501359250604085013567ffffffffffffffff811115612e6657600080fd5b60005b83811015612f0f578181015183820152602001612ef7565b50506000910152565b60008151808452612f30816020860160208601612ef4565b601f01601f19169290920160200192915050565b6020815260006129db6020830184612f18565b600080600060608486031215612f6c57600080fd5b8335612f7781612b25565b9250602084013591506040840135612b8a81612b25565b600060208284031215612fa057600080fd5b5051919050565b60c081526000612fba60c0830188612f18565b6001600160a01b038716602084015285604084015284606084015283608084015282810360a084015260008152602081019150509695505050505050565b818352818160208501375060006020828401015260006020601f19601f840116840101905092915050565b600081357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe183360301811261305757600080fd5b820160208101903567ffffffffffffffff81111561307457600080fd5b80360382131561308357600080fd5b60608552613095606086018284612ff8565b91505060208301356130a681612b25565b6001600160a01b0316602085015260409283013592909301919091525090565b6080815260006130d96080830188613023565b6001600160a01b03871660208401528560408401528281036060840152613101818587612ff8565b98975050505050505050565b60006020828403121561311f57600080fd5b815180151581146129db57600080fd5b6040815260006131426040830186612f18565b8281036020840152613155818587612ff8565b9695505050505050565b60c08152600061317260c083018a612f18565b6001600160a01b038916602084015287604084015286606084015285608084015282810360a08401526131a6818587612ff8565b9a9950505050505050505050565b600080604083850312156131c757600080fd5b82516131d281612b25565b6020939093015192949293505050565b600082516131f4818460208701612ef4565b919091019291505056fea2646970667358221220aa7781f02b83781fe8c9234fceb32e81bb1b35cbd84ec554f95cd1a565cec31964736f6c634300081a0033"; type GatewayZEVMConstructorParams = | [signer?: Signer] diff --git a/v2/typechain-types/factories/IERC20Custody.sol/IERC20CustodyErrors__factory.ts b/v2/typechain-types/factories/IERC20Custody.sol/IERC20CustodyErrors__factory.ts index f30ec9ca..33cb99b0 100644 --- a/v2/typechain-types/factories/IERC20Custody.sol/IERC20CustodyErrors__factory.ts +++ b/v2/typechain-types/factories/IERC20Custody.sol/IERC20CustodyErrors__factory.ts @@ -9,6 +9,11 @@ import type { } from "../../IERC20Custody.sol/IERC20CustodyErrors"; const _abi = [ + { + type: "error", + name: "NotWhitelisted", + inputs: [], + }, { type: "error", name: "ZeroAddress", diff --git a/v2/typechain-types/factories/IERC20Custody.sol/IERC20CustodyEvents__factory.ts b/v2/typechain-types/factories/IERC20Custody.sol/IERC20CustodyEvents__factory.ts index 08163fdb..836e4111 100644 --- a/v2/typechain-types/factories/IERC20Custody.sol/IERC20CustodyEvents__factory.ts +++ b/v2/typechain-types/factories/IERC20Custody.sol/IERC20CustodyEvents__factory.ts @@ -9,6 +9,32 @@ import type { } from "../../IERC20Custody.sol/IERC20CustodyEvents"; const _abi = [ + { + type: "event", + name: "Unwhitelisted", + inputs: [ + { + name: "token", + type: "address", + indexed: true, + internalType: "address", + }, + ], + anonymous: false, + }, + { + type: "event", + name: "Whitelisted", + inputs: [ + { + name: "token", + type: "address", + indexed: true, + internalType: "address", + }, + ], + anonymous: false, + }, { type: "event", name: "Withdraw", diff --git a/v2/typechain-types/factories/IERC20Custody.sol/IERC20Custody__factory.ts b/v2/typechain-types/factories/IERC20Custody.sol/IERC20Custody__factory.ts new file mode 100644 index 00000000..e53b21b5 --- /dev/null +++ b/v2/typechain-types/factories/IERC20Custody.sol/IERC20Custody__factory.ts @@ -0,0 +1,246 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ + +import { Contract, Interface, type ContractRunner } from "ethers"; +import type { + IERC20Custody, + IERC20CustodyInterface, +} from "../../IERC20Custody.sol/IERC20Custody"; + +const _abi = [ + { + type: "function", + name: "whitelisted", + inputs: [ + { + name: "token", + type: "address", + internalType: "address", + }, + ], + outputs: [ + { + name: "", + type: "bool", + internalType: "bool", + }, + ], + stateMutability: "view", + }, + { + type: "function", + name: "withdraw", + inputs: [ + { + name: "token", + type: "address", + internalType: "address", + }, + { + name: "to", + type: "address", + internalType: "address", + }, + { + name: "amount", + type: "uint256", + internalType: "uint256", + }, + ], + outputs: [], + stateMutability: "nonpayable", + }, + { + type: "function", + name: "withdrawAndCall", + inputs: [ + { + name: "token", + type: "address", + internalType: "address", + }, + { + name: "to", + type: "address", + internalType: "address", + }, + { + name: "amount", + type: "uint256", + internalType: "uint256", + }, + { + name: "data", + type: "bytes", + internalType: "bytes", + }, + ], + outputs: [], + stateMutability: "nonpayable", + }, + { + type: "function", + name: "withdrawAndRevert", + inputs: [ + { + name: "token", + type: "address", + internalType: "address", + }, + { + name: "to", + type: "address", + internalType: "address", + }, + { + name: "amount", + type: "uint256", + internalType: "uint256", + }, + { + name: "data", + type: "bytes", + internalType: "bytes", + }, + ], + outputs: [], + stateMutability: "nonpayable", + }, + { + type: "event", + name: "Unwhitelisted", + inputs: [ + { + name: "token", + type: "address", + indexed: true, + internalType: "address", + }, + ], + anonymous: false, + }, + { + type: "event", + name: "Whitelisted", + inputs: [ + { + name: "token", + type: "address", + indexed: true, + internalType: "address", + }, + ], + anonymous: false, + }, + { + type: "event", + name: "Withdraw", + inputs: [ + { + name: "token", + type: "address", + indexed: true, + internalType: "address", + }, + { + name: "to", + type: "address", + indexed: true, + internalType: "address", + }, + { + name: "amount", + type: "uint256", + indexed: false, + internalType: "uint256", + }, + ], + anonymous: false, + }, + { + type: "event", + name: "WithdrawAndCall", + inputs: [ + { + name: "token", + type: "address", + indexed: true, + internalType: "address", + }, + { + name: "to", + type: "address", + indexed: true, + internalType: "address", + }, + { + name: "amount", + type: "uint256", + indexed: false, + internalType: "uint256", + }, + { + name: "data", + type: "bytes", + indexed: false, + internalType: "bytes", + }, + ], + anonymous: false, + }, + { + type: "event", + name: "WithdrawAndRevert", + inputs: [ + { + name: "token", + type: "address", + indexed: true, + internalType: "address", + }, + { + name: "to", + type: "address", + indexed: true, + internalType: "address", + }, + { + name: "amount", + type: "uint256", + indexed: false, + internalType: "uint256", + }, + { + name: "data", + type: "bytes", + indexed: false, + internalType: "bytes", + }, + ], + anonymous: false, + }, + { + type: "error", + name: "NotWhitelisted", + inputs: [], + }, + { + type: "error", + name: "ZeroAddress", + inputs: [], + }, +] as const; + +export class IERC20Custody__factory { + static readonly abi = _abi; + static createInterface(): IERC20CustodyInterface { + return new Interface(_abi) as IERC20CustodyInterface; + } + static connect( + address: string, + runner?: ContractRunner | null + ): IERC20Custody { + return new Contract(address, _abi, runner) as unknown as IERC20Custody; + } +} diff --git a/v2/typechain-types/factories/IERC20Custody.sol/index.ts b/v2/typechain-types/factories/IERC20Custody.sol/index.ts index 9ad68318..93a54174 100644 --- a/v2/typechain-types/factories/IERC20Custody.sol/index.ts +++ b/v2/typechain-types/factories/IERC20Custody.sol/index.ts @@ -1,5 +1,6 @@ /* Autogenerated file. Do not edit manually. */ /* tslint:disable */ /* eslint-disable */ +export { IERC20Custody__factory } from "./IERC20Custody__factory"; export { IERC20CustodyErrors__factory } from "./IERC20CustodyErrors__factory"; export { IERC20CustodyEvents__factory } from "./IERC20CustodyEvents__factory"; diff --git a/v2/typechain-types/factories/IGatewayEVM.sol/IGatewayEVMErrors__factory.ts b/v2/typechain-types/factories/IGatewayEVM.sol/IGatewayEVMErrors__factory.ts index 34cc3a3e..842b99ee 100644 --- a/v2/typechain-types/factories/IGatewayEVM.sol/IGatewayEVMErrors__factory.ts +++ b/v2/typechain-types/factories/IGatewayEVM.sol/IGatewayEVMErrors__factory.ts @@ -44,6 +44,11 @@ const _abi = [ name: "InsufficientETHAmount", inputs: [], }, + { + type: "error", + name: "NotWhitelistedInCustody", + inputs: [], + }, { type: "error", name: "ZeroAddress", diff --git a/v2/typechain-types/factories/IGatewayEVM.sol/IGatewayEVM__factory.ts b/v2/typechain-types/factories/IGatewayEVM.sol/IGatewayEVM__factory.ts index f1627cbb..ef5f3b1c 100644 --- a/v2/typechain-types/factories/IGatewayEVM.sol/IGatewayEVM__factory.ts +++ b/v2/typechain-types/factories/IGatewayEVM.sol/IGatewayEVM__factory.ts @@ -207,6 +207,225 @@ const _abi = [ outputs: [], stateMutability: "nonpayable", }, + { + type: "event", + name: "Call", + inputs: [ + { + name: "sender", + type: "address", + indexed: true, + internalType: "address", + }, + { + name: "receiver", + type: "address", + indexed: true, + internalType: "address", + }, + { + name: "payload", + type: "bytes", + indexed: false, + internalType: "bytes", + }, + ], + anonymous: false, + }, + { + type: "event", + name: "Deposit", + inputs: [ + { + name: "sender", + type: "address", + indexed: true, + internalType: "address", + }, + { + name: "receiver", + type: "address", + indexed: true, + internalType: "address", + }, + { + name: "amount", + type: "uint256", + indexed: false, + internalType: "uint256", + }, + { + name: "asset", + type: "address", + indexed: false, + internalType: "address", + }, + { + name: "payload", + type: "bytes", + indexed: false, + internalType: "bytes", + }, + ], + anonymous: false, + }, + { + type: "event", + name: "Executed", + inputs: [ + { + name: "destination", + type: "address", + indexed: true, + internalType: "address", + }, + { + name: "value", + type: "uint256", + indexed: false, + internalType: "uint256", + }, + { + name: "data", + type: "bytes", + indexed: false, + internalType: "bytes", + }, + ], + anonymous: false, + }, + { + type: "event", + name: "ExecutedWithERC20", + inputs: [ + { + name: "token", + type: "address", + indexed: true, + internalType: "address", + }, + { + name: "to", + type: "address", + indexed: true, + internalType: "address", + }, + { + name: "amount", + type: "uint256", + indexed: false, + internalType: "uint256", + }, + { + name: "data", + type: "bytes", + indexed: false, + internalType: "bytes", + }, + ], + anonymous: false, + }, + { + type: "event", + name: "Reverted", + inputs: [ + { + name: "destination", + type: "address", + indexed: true, + internalType: "address", + }, + { + name: "value", + type: "uint256", + indexed: false, + internalType: "uint256", + }, + { + name: "data", + type: "bytes", + indexed: false, + internalType: "bytes", + }, + ], + anonymous: false, + }, + { + type: "event", + name: "RevertedWithERC20", + inputs: [ + { + name: "token", + type: "address", + indexed: true, + internalType: "address", + }, + { + name: "to", + type: "address", + indexed: true, + internalType: "address", + }, + { + name: "amount", + type: "uint256", + indexed: false, + internalType: "uint256", + }, + { + name: "data", + type: "bytes", + indexed: false, + internalType: "bytes", + }, + ], + anonymous: false, + }, + { + type: "error", + name: "ApprovalFailed", + inputs: [], + }, + { + type: "error", + name: "ConnectorInitialized", + inputs: [], + }, + { + type: "error", + name: "CustodyInitialized", + inputs: [], + }, + { + type: "error", + name: "DepositFailed", + inputs: [], + }, + { + type: "error", + name: "ExecutionFailed", + inputs: [], + }, + { + type: "error", + name: "InsufficientERC20Amount", + inputs: [], + }, + { + type: "error", + name: "InsufficientETHAmount", + inputs: [], + }, + { + type: "error", + name: "NotWhitelistedInCustody", + inputs: [], + }, + { + type: "error", + name: "ZeroAddress", + inputs: [], + }, ] as const; export class IGatewayEVM__factory { diff --git a/v2/typechain-types/factories/IGatewayZEVM.sol/IGatewayZEVM__factory.ts b/v2/typechain-types/factories/IGatewayZEVM.sol/IGatewayZEVM__factory.ts index 955b4e4e..0c2196a4 100644 --- a/v2/typechain-types/factories/IGatewayZEVM.sol/IGatewayZEVM__factory.ts +++ b/v2/typechain-types/factories/IGatewayZEVM.sol/IGatewayZEVM__factory.ts @@ -392,6 +392,147 @@ const _abi = [ outputs: [], stateMutability: "nonpayable", }, + { + type: "event", + name: "Call", + inputs: [ + { + name: "sender", + type: "address", + indexed: true, + internalType: "address", + }, + { + name: "chainId", + type: "uint256", + indexed: true, + internalType: "uint256", + }, + { + name: "receiver", + type: "bytes", + indexed: false, + internalType: "bytes", + }, + { + name: "message", + type: "bytes", + indexed: false, + internalType: "bytes", + }, + ], + anonymous: false, + }, + { + type: "event", + name: "Withdrawal", + inputs: [ + { + name: "sender", + type: "address", + indexed: true, + internalType: "address", + }, + { + name: "chainId", + type: "uint256", + indexed: true, + internalType: "uint256", + }, + { + name: "receiver", + type: "bytes", + indexed: false, + internalType: "bytes", + }, + { + name: "zrc20", + type: "address", + indexed: false, + internalType: "address", + }, + { + name: "value", + type: "uint256", + indexed: false, + internalType: "uint256", + }, + { + name: "gasfee", + type: "uint256", + indexed: false, + internalType: "uint256", + }, + { + name: "protocolFlatFee", + type: "uint256", + indexed: false, + internalType: "uint256", + }, + { + name: "message", + type: "bytes", + indexed: false, + internalType: "bytes", + }, + ], + anonymous: false, + }, + { + type: "error", + name: "CallerIsNotFungibleModule", + inputs: [], + }, + { + type: "error", + name: "FailedZetaSent", + inputs: [], + }, + { + type: "error", + name: "GasFeeTransferFailed", + inputs: [], + }, + { + type: "error", + name: "InsufficientZRC20Amount", + inputs: [], + }, + { + type: "error", + name: "InsufficientZetaAmount", + inputs: [], + }, + { + type: "error", + name: "InvalidTarget", + inputs: [], + }, + { + type: "error", + name: "OnlyWZETAOrFungible", + inputs: [], + }, + { + type: "error", + name: "WithdrawalFailed", + inputs: [], + }, + { + type: "error", + name: "ZRC20BurnFailed", + inputs: [], + }, + { + type: "error", + name: "ZRC20DepositFailed", + inputs: [], + }, + { + type: "error", + name: "ZRC20TransferFailed", + inputs: [], + }, ] as const; export class IGatewayZEVM__factory { diff --git a/v2/typechain-types/factories/SenderZEVM__factory.ts b/v2/typechain-types/factories/SenderZEVM__factory.ts index 1899e4f6..81033adf 100644 --- a/v2/typechain-types/factories/SenderZEVM__factory.ts +++ b/v2/typechain-types/factories/SenderZEVM__factory.ts @@ -120,7 +120,7 @@ const _abi = [ ] as const; const _bytecode = - "0x6080604052348015600f57600080fd5b5060405161080c38038061080c833981016040819052602c916050565b600080546001600160a01b0319166001600160a01b0392909216919091179055607e565b600060208284031215606157600080fd5b81516001600160a01b0381168114607757600080fd5b9392505050565b61077f8061008d6000396000f3fe608060405234801561001057600080fd5b50600436106100415760003560e01c80630abd890514610046578063116191b61461005b578063865b36f6146100a4575b600080fd5b6100596100543660046104c4565b6100b7565b005b60005461007b9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b6100596100b236600461057f565b6102af565b60008383836040516024016100ce93929190610674565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe04d4f970000000000000000000000000000000000000000000000000000000017905260005490517f095ea7b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff91821660048201526024810189905291925086169063095ea7b3906044016020604051808303816000875af11580156101be573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101e2919061069e565b610218576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000546040517f7993c1e000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff90911690637993c1e090610274908a908a908a9087906004016106c2565b600060405180830381600087803b15801561028e57600080fd5b505af11580156102a2573d6000803e3d6000fd5b5050505050505050505050565b60008383836040516024016102c693929190610674565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe04d4f970000000000000000000000000000000000000000000000000000000017905260005490517f5d40e17800000000000000000000000000000000000000000000000000000000815291925073ffffffffffffffffffffffffffffffffffffffff1690635d40e1789061039690899089908690600401610714565b600060405180830381600087803b1580156103b057600080fd5b505af11580156103c4573d6000803e3d6000fd5b50505050505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600082601f83011261041057600080fd5b81356020830160008067ffffffffffffffff841115610431576104316103d0565b506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f85018116603f0116810181811067ffffffffffffffff8211171561047e5761047e6103d0565b60405283815290508082840187101561049657600080fd5b838360208301376000602085830101528094505050505092915050565b80151581146104c157600080fd5b50565b60008060008060008060c087890312156104dd57600080fd5b863567ffffffffffffffff8111156104f457600080fd5b61050089828a016103ff565b96505060208701359450604087013573ffffffffffffffffffffffffffffffffffffffff8116811461053157600080fd5b9350606087013567ffffffffffffffff81111561054d57600080fd5b61055989828a016103ff565b9350506080870135915060a0870135610571816104b3565b809150509295509295509295565b600080600080600060a0868803121561059757600080fd5b853567ffffffffffffffff8111156105ae57600080fd5b6105ba888289016103ff565b95505060208601359350604086013567ffffffffffffffff8111156105de57600080fd5b6105ea888289016103ff565b935050606086013591506080860135610602816104b3565b809150509295509295909350565b6000815180845260005b818110156106365760208185018101518683018201520161061a565b5060006020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b6060815260006106876060830186610610565b602083019490945250901515604090910152919050565b6000602082840312156106b057600080fd5b81516106bb816104b3565b9392505050565b6080815260006106d56080830187610610565b85602084015273ffffffffffffffffffffffffffffffffffffffff8516604084015282810360608401526107098185610610565b979650505050505050565b6060815260006107276060830186610610565b846020840152828103604084015261073f8185610610565b969550505050505056fea2646970667358221220d5c8efa106d3ece0f3750900034e01f5ba81ba4b46a57e03310e9ccd21566f2864736f6c634300081a0033"; + "0x6080604052348015600f57600080fd5b5060405161080c38038061080c833981016040819052602c916050565b600080546001600160a01b0319166001600160a01b0392909216919091179055607e565b600060208284031215606157600080fd5b81516001600160a01b0381168114607757600080fd5b9392505050565b61077f8061008d6000396000f3fe608060405234801561001057600080fd5b50600436106100415760003560e01c80630abd890514610046578063116191b61461005b578063865b36f6146100a4575b600080fd5b6100596100543660046104c4565b6100b7565b005b60005461007b9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b6100596100b236600461057f565b6102af565b60008383836040516024016100ce93929190610674565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe04d4f970000000000000000000000000000000000000000000000000000000017905260005490517f095ea7b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff91821660048201526024810189905291925086169063095ea7b3906044016020604051808303816000875af11580156101be573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101e2919061069e565b610218576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000546040517f7993c1e000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff90911690637993c1e090610274908a908a908a9087906004016106c2565b600060405180830381600087803b15801561028e57600080fd5b505af11580156102a2573d6000803e3d6000fd5b5050505050505050505050565b60008383836040516024016102c693929190610674565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe04d4f970000000000000000000000000000000000000000000000000000000017905260005490517f5d40e17800000000000000000000000000000000000000000000000000000000815291925073ffffffffffffffffffffffffffffffffffffffff1690635d40e1789061039690899089908690600401610714565b600060405180830381600087803b1580156103b057600080fd5b505af11580156103c4573d6000803e3d6000fd5b50505050505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600082601f83011261041057600080fd5b81356020830160008067ffffffffffffffff841115610431576104316103d0565b506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f85018116603f0116810181811067ffffffffffffffff8211171561047e5761047e6103d0565b60405283815290508082840187101561049657600080fd5b838360208301376000602085830101528094505050505092915050565b80151581146104c157600080fd5b50565b60008060008060008060c087890312156104dd57600080fd5b863567ffffffffffffffff8111156104f457600080fd5b61050089828a016103ff565b96505060208701359450604087013573ffffffffffffffffffffffffffffffffffffffff8116811461053157600080fd5b9350606087013567ffffffffffffffff81111561054d57600080fd5b61055989828a016103ff565b9350506080870135915060a0870135610571816104b3565b809150509295509295509295565b600080600080600060a0868803121561059757600080fd5b853567ffffffffffffffff8111156105ae57600080fd5b6105ba888289016103ff565b95505060208601359350604086013567ffffffffffffffff8111156105de57600080fd5b6105ea888289016103ff565b935050606086013591506080860135610602816104b3565b809150509295509295909350565b6000815180845260005b818110156106365760208185018101518683018201520161061a565b5060006020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b6060815260006106876060830186610610565b602083019490945250901515604090910152919050565b6000602082840312156106b057600080fd5b81516106bb816104b3565b9392505050565b6080815260006106d56080830187610610565b85602084015273ffffffffffffffffffffffffffffffffffffffff8516604084015282810360608401526107098185610610565b979650505050505050565b6060815260006107276060830186610610565b846020840152828103604084015261073f8185610610565b969550505050505056fea26469706673582212202d9e7d32ef6522050432c1694ddb8cfdc9122adb07ccb90fba239639e4abfd7c64736f6c634300081a0033"; type SenderZEVMConstructorParams = | [signer?: Signer] diff --git a/v2/typechain-types/factories/ZetaConnectorNative__factory.ts b/v2/typechain-types/factories/ZetaConnectorNative__factory.ts index fcea5323..60bfa648 100644 --- a/v2/typechain-types/factories/ZetaConnectorNative__factory.ts +++ b/v2/typechain-types/factories/ZetaConnectorNative__factory.ts @@ -611,7 +611,7 @@ const _abi = [ ] as const; const _bytecode = - "0x60c060405234801561001057600080fd5b5060405161166338038061166383398101604081905261002f9161021a565b60016000819055805460ff19169055838383836001600160a01b038416158061005f57506001600160a01b038316155b8061007157506001600160a01b038216155b8061008357506001600160a01b038116155b156100a15760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b03808516608052831660a0526100bf60008261014e565b506100ea7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e48361014e565b506101157f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb8361014e565b506101407f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a8261014e565b50505050505050505061026e565b60008281526002602090815260408083206001600160a01b038516845290915281205460ff166101f45760008381526002602090815260408083206001600160a01b03861684529091529020805460ff191660011790556101ac3390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45060016101f8565b5060005b92915050565b80516001600160a01b038116811461021557600080fd5b919050565b6000806000806080858703121561023057600080fd5b610239856101fe565b9350610247602086016101fe565b9250610255604086016101fe565b9150610263606086016101fe565b905092959194509250565b60805160a05161138a6102d9600039600081816101f701528181610474015281816105250152818161063f015281816107d30152818161088401526109520152600081816101ab01528181610496015281816104f8015281816107f50152610857015261138a6000f3fe608060405234801561001057600080fd5b50600436106101515760003560e01c80635c975abb116100cd57806391d1485411610081578063a783c78911610066578063a783c78914610326578063d547741f1461034d578063e63ab1e91461036057600080fd5b806391d14854146102d8578063a217fddf1461031e57600080fd5b8063743e0c9b116100b2578063743e0c9b146102965780638456cb59146102a957806385f438c1146102b157600080fd5b80635c975abb146102785780635e3e9fef1461028357600080fd5b806321e093b1116101245780632f2ff15d116101095780632f2ff15d1461024a57806336568abe1461025d5780633f4ba83a1461027057600080fd5b806321e093b1146101f2578063248a9ca31461021957600080fd5b806301ffc9a71461015657806302d5c8991461017e578063106e629014610193578063116191b6146101a6575b600080fd5b6101696101643660046110c5565b610387565b60405190151581526020015b60405180910390f35b61019161018c366004611130565b610420565b005b6101916101a13660046111c2565b6105eb565b6101cd7f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610175565b6101cd7f000000000000000000000000000000000000000000000000000000000000000081565b61023c6102273660046111f5565b60009081526002602052604090206001015490565b604051908152602001610175565b61019161025836600461120e565b6106c6565b61019161026b36600461120e565b6106f1565b61019161074a565b60015460ff16610169565b610191610291366004611130565b61077f565b6101916102a43660046111f5565b610930565b61019161097a565b61023c7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b6101696102e636600461120e565b600091825260026020908152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b61023c600081565b61023c7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb81565b61019161035b36600461120e565b6109ac565b61023c7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061041a57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b6104286109d1565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461045281610a14565b61045a610a1e565b6104bb73ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000167f000000000000000000000000000000000000000000000000000000000000000087610a5d565b6040517fb8969bd400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063b8969bd490610555907f0000000000000000000000000000000000000000000000000000000000000000908a908a908a908a90600401611283565b600060405180830381600087803b15801561056f57600080fd5b505af1158015610583573d6000803e3d6000fd5b505050508573ffffffffffffffffffffffffffffffffffffffff167fba96f26bdda53eb8c8ba39045dfb4ff39753fbc7a6edcf250a88e75e78d102fe8686866040516105d1939291906112e0565b60405180910390a2506105e46001600055565b5050505050565b6105f36109d1565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461061d81610a14565b610625610a1e565b61066673ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168585610a5d565b8373ffffffffffffffffffffffffffffffffffffffff167f884edad9ce6fa2440d8a54cc123490eb96d2768479d49ff9c7366125a9424364846040516106ae91815260200190565b60405180910390a2506106c16001600055565b505050565b6000828152600260205260409020600101546106e181610a14565b6106eb8383610ade565b50505050565b73ffffffffffffffffffffffffffffffffffffffff81163314610740576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6106c18282610bde565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61077481610a14565b61077c610c9d565b50565b6107876109d1565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e46107b181610a14565b6107b9610a1e565b61081a73ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000167f000000000000000000000000000000000000000000000000000000000000000087610a5d565b6040517f5131ab5900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690635131ab59906108b4907f0000000000000000000000000000000000000000000000000000000000000000908a908a908a908a90600401611283565b600060405180830381600087803b1580156108ce57600080fd5b505af11580156108e2573d6000803e3d6000fd5b505050508573ffffffffffffffffffffffffffffffffffffffff167f7772f56296d3a5202974a45c61c9188d844ab4d6eeb18c851e4b8d5384ca6ced8686866040516105d1939291906112e0565b610938610a1e565b61077c73ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016333084610d1a565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a6109a481610a14565b61077c610d60565b6000828152600260205260409020600101546109c781610a14565b6106eb8383610bde565b600260005403610a0d576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b61077c8133610db9565b60015460ff1615610a5b576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b60405173ffffffffffffffffffffffffffffffffffffffff8381166024830152604482018390526106c191859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050610e4a565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff16610bd657600083815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff86168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055610b743390565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a450600161041a565b50600061041a565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff1615610bd657600083815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8616808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a450600161041a565b610ca5610ee0565b600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b60405173ffffffffffffffffffffffffffffffffffffffff84811660248301528381166044830152606482018390526106eb9186918216906323b872dd90608401610a97565b610d68610a1e565b600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016811790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25833610cf0565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16610e46576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82166004820152602481018390526044015b60405180910390fd5b5050565b6000610e6c73ffffffffffffffffffffffffffffffffffffffff841683610f1c565b90508051600014158015610e91575080806020019051810190610e8f9190611303565b155b156106c1576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84166004820152602401610e3d565b60015460ff16610a5b576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6060610f2a83836000610f31565b9392505050565b606081471015610f6f576040517fcd786059000000000000000000000000000000000000000000000000000000008152306004820152602401610e3d565b6000808573ffffffffffffffffffffffffffffffffffffffff168486604051610f989190611325565b60006040518083038185875af1925050503d8060008114610fd5576040519150601f19603f3d011682016040523d82523d6000602084013e610fda565b606091505b5091509150610fea868383610ff4565b9695505050505050565b6060826110095761100482611083565b610f2a565b815115801561102d575073ffffffffffffffffffffffffffffffffffffffff84163b155b1561107c576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85166004820152602401610e3d565b5080610f2a565b8051156110935780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000602082840312156110d757600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610f2a57600080fd5b803573ffffffffffffffffffffffffffffffffffffffff8116811461112b57600080fd5b919050565b60008060008060006080868803121561114857600080fd5b61115186611107565b945060208601359350604086013567ffffffffffffffff81111561117457600080fd5b8601601f8101881361118557600080fd5b803567ffffffffffffffff81111561119c57600080fd5b8860208284010111156111ae57600080fd5b959894975060200195606001359392505050565b6000806000606084860312156111d757600080fd5b6111e084611107565b95602085013595506040909401359392505050565b60006020828403121561120757600080fd5b5035919050565b6000806040838503121561122157600080fd5b8235915061123160208401611107565b90509250929050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff8616815273ffffffffffffffffffffffffffffffffffffffff851660208201528360408201526080606082015260006112d560808301848661123a565b979650505050505050565b8381526040602082015260006112fa60408301848661123a565b95945050505050565b60006020828403121561131557600080fd5b81518015158114610f2a57600080fd5b6000825160005b81811015611346576020818601810151858301520161132c565b50600092019182525091905056fea2646970667358221220b04453dff0090afb8a475e5970db3acd2d95039b4c5a72b1afb3fdac6383a65d64736f6c634300081a0033"; + "0x60c060405234801561001057600080fd5b5060405161166338038061166383398101604081905261002f9161021a565b60016000819055805460ff19169055838383836001600160a01b038416158061005f57506001600160a01b038316155b8061007157506001600160a01b038216155b8061008357506001600160a01b038116155b156100a15760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b03808516608052831660a0526100bf60008261014e565b506100ea7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e48361014e565b506101157f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb8361014e565b506101407f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a8261014e565b50505050505050505061026e565b60008281526002602090815260408083206001600160a01b038516845290915281205460ff166101f45760008381526002602090815260408083206001600160a01b03861684529091529020805460ff191660011790556101ac3390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45060016101f8565b5060005b92915050565b80516001600160a01b038116811461021557600080fd5b919050565b6000806000806080858703121561023057600080fd5b610239856101fe565b9350610247602086016101fe565b9250610255604086016101fe565b9150610263606086016101fe565b905092959194509250565b60805160a05161138a6102d9600039600081816101f701528181610474015281816105250152818161063f015281816107d30152818161088401526109520152600081816101ab01528181610496015281816104f8015281816107f50152610857015261138a6000f3fe608060405234801561001057600080fd5b50600436106101515760003560e01c80635c975abb116100cd57806391d1485411610081578063a783c78911610066578063a783c78914610326578063d547741f1461034d578063e63ab1e91461036057600080fd5b806391d14854146102d8578063a217fddf1461031e57600080fd5b8063743e0c9b116100b2578063743e0c9b146102965780638456cb59146102a957806385f438c1146102b157600080fd5b80635c975abb146102785780635e3e9fef1461028357600080fd5b806321e093b1116101245780632f2ff15d116101095780632f2ff15d1461024a57806336568abe1461025d5780633f4ba83a1461027057600080fd5b806321e093b1146101f2578063248a9ca31461021957600080fd5b806301ffc9a71461015657806302d5c8991461017e578063106e629014610193578063116191b6146101a6575b600080fd5b6101696101643660046110c5565b610387565b60405190151581526020015b60405180910390f35b61019161018c366004611130565b610420565b005b6101916101a13660046111c2565b6105eb565b6101cd7f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610175565b6101cd7f000000000000000000000000000000000000000000000000000000000000000081565b61023c6102273660046111f5565b60009081526002602052604090206001015490565b604051908152602001610175565b61019161025836600461120e565b6106c6565b61019161026b36600461120e565b6106f1565b61019161074a565b60015460ff16610169565b610191610291366004611130565b61077f565b6101916102a43660046111f5565b610930565b61019161097a565b61023c7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b6101696102e636600461120e565b600091825260026020908152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b61023c600081565b61023c7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb81565b61019161035b36600461120e565b6109ac565b61023c7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061041a57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b6104286109d1565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461045281610a14565b61045a610a1e565b6104bb73ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000167f000000000000000000000000000000000000000000000000000000000000000087610a5d565b6040517fb8969bd400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063b8969bd490610555907f0000000000000000000000000000000000000000000000000000000000000000908a908a908a908a90600401611283565b600060405180830381600087803b15801561056f57600080fd5b505af1158015610583573d6000803e3d6000fd5b505050508573ffffffffffffffffffffffffffffffffffffffff167fba96f26bdda53eb8c8ba39045dfb4ff39753fbc7a6edcf250a88e75e78d102fe8686866040516105d1939291906112e0565b60405180910390a2506105e46001600055565b5050505050565b6105f36109d1565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461061d81610a14565b610625610a1e565b61066673ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168585610a5d565b8373ffffffffffffffffffffffffffffffffffffffff167f884edad9ce6fa2440d8a54cc123490eb96d2768479d49ff9c7366125a9424364846040516106ae91815260200190565b60405180910390a2506106c16001600055565b505050565b6000828152600260205260409020600101546106e181610a14565b6106eb8383610ade565b50505050565b73ffffffffffffffffffffffffffffffffffffffff81163314610740576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6106c18282610bde565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61077481610a14565b61077c610c9d565b50565b6107876109d1565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e46107b181610a14565b6107b9610a1e565b61081a73ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000167f000000000000000000000000000000000000000000000000000000000000000087610a5d565b6040517f5131ab5900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690635131ab59906108b4907f0000000000000000000000000000000000000000000000000000000000000000908a908a908a908a90600401611283565b600060405180830381600087803b1580156108ce57600080fd5b505af11580156108e2573d6000803e3d6000fd5b505050508573ffffffffffffffffffffffffffffffffffffffff167f7772f56296d3a5202974a45c61c9188d844ab4d6eeb18c851e4b8d5384ca6ced8686866040516105d1939291906112e0565b610938610a1e565b61077c73ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016333084610d1a565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a6109a481610a14565b61077c610d60565b6000828152600260205260409020600101546109c781610a14565b6106eb8383610bde565b600260005403610a0d576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b61077c8133610db9565b60015460ff1615610a5b576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b60405173ffffffffffffffffffffffffffffffffffffffff8381166024830152604482018390526106c191859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050610e4a565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff16610bd657600083815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff86168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055610b743390565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a450600161041a565b50600061041a565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff1615610bd657600083815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8616808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a450600161041a565b610ca5610ee0565b600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b60405173ffffffffffffffffffffffffffffffffffffffff84811660248301528381166044830152606482018390526106eb9186918216906323b872dd90608401610a97565b610d68610a1e565b600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016811790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25833610cf0565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16610e46576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82166004820152602481018390526044015b60405180910390fd5b5050565b6000610e6c73ffffffffffffffffffffffffffffffffffffffff841683610f1c565b90508051600014158015610e91575080806020019051810190610e8f9190611303565b155b156106c1576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84166004820152602401610e3d565b60015460ff16610a5b576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6060610f2a83836000610f31565b9392505050565b606081471015610f6f576040517fcd786059000000000000000000000000000000000000000000000000000000008152306004820152602401610e3d565b6000808573ffffffffffffffffffffffffffffffffffffffff168486604051610f989190611325565b60006040518083038185875af1925050503d8060008114610fd5576040519150601f19603f3d011682016040523d82523d6000602084013e610fda565b606091505b5091509150610fea868383610ff4565b9695505050505050565b6060826110095761100482611083565b610f2a565b815115801561102d575073ffffffffffffffffffffffffffffffffffffffff84163b155b1561107c576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85166004820152602401610e3d565b5080610f2a565b8051156110935780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000602082840312156110d757600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610f2a57600080fd5b803573ffffffffffffffffffffffffffffffffffffffff8116811461112b57600080fd5b919050565b60008060008060006080868803121561114857600080fd5b61115186611107565b945060208601359350604086013567ffffffffffffffff81111561117457600080fd5b8601601f8101881361118557600080fd5b803567ffffffffffffffff81111561119c57600080fd5b8860208284010111156111ae57600080fd5b959894975060200195606001359392505050565b6000806000606084860312156111d757600080fd5b6111e084611107565b95602085013595506040909401359392505050565b60006020828403121561120757600080fd5b5035919050565b6000806040838503121561122157600080fd5b8235915061123160208401611107565b90509250929050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff8616815273ffffffffffffffffffffffffffffffffffffffff851660208201528360408201526080606082015260006112d560808301848661123a565b979650505050505050565b8381526040602082015260006112fa60408301848661123a565b95945050505050565b60006020828403121561131557600080fd5b81518015158114610f2a57600080fd5b6000825160005b81811015611346576020818601810151858301520161132c565b50600092019182525091905056fea264697066735822122055d09557e5c9ebfe94b17ac42f0790bf256cf4c257e31c46bc4dbb126e31fe1964736f6c634300081a0033"; type ZetaConnectorNativeConstructorParams = | [signer?: Signer] diff --git a/v2/typechain-types/factories/ZetaConnectorNonNative__factory.ts b/v2/typechain-types/factories/ZetaConnectorNonNative__factory.ts index 88928539..671d82f8 100644 --- a/v2/typechain-types/factories/ZetaConnectorNonNative__factory.ts +++ b/v2/typechain-types/factories/ZetaConnectorNonNative__factory.ts @@ -617,7 +617,7 @@ const _abi = [ ] as const; const _bytecode = - "0x60c060405260001960035534801561001657600080fd5b5060405161155a38038061155a83398101604081905261003591610220565b60016000819055805460ff19169055838383836001600160a01b038416158061006557506001600160a01b038316155b8061007757506001600160a01b038216155b8061008957506001600160a01b038116155b156100a75760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b03808516608052831660a0526100c5600082610154565b506100f07f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e483610154565b5061011b7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb83610154565b506101467f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a82610154565b505050505050505050610274565b60008281526002602090815260408083206001600160a01b038516845290915281205460ff166101fa5760008381526002602090815260408083206001600160a01b03861684529091529020805460ff191660011790556101b23390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45060016101fe565b5060005b92915050565b80516001600160a01b038116811461021b57600080fd5b919050565b6000806000806080858703121561023657600080fd5b61023f85610204565b935061024d60208601610204565b925061025b60408601610204565b915061026960608601610204565b905092959194509250565b60805160a0516112826102d86000396000818161021d01528181610531015281816108240152818161097b01528181610ad00152610bf20152600081816101d1015281816104a1015281816105040152818161079401526107f701526112826000f3fe608060405234801561001057600080fd5b50600436106101775760003560e01c80635e3e9fef116100d857806391d148541161008c578063d547741f11610066578063d547741f14610386578063d5abeb0114610399578063e63ab1e9146103a257600080fd5b806391d1485414610311578063a217fddf14610357578063a783c7891461035f57600080fd5b8063743e0c9b116100bd578063743e0c9b146102cf5780638456cb59146102e257806385f438c1146102ea57600080fd5b80635e3e9fef146102a95780636f8b44b0146102bc57600080fd5b8063248a9ca31161012f57806336568abe1161011457806336568abe146102835780633f4ba83a146102965780635c975abb1461029e57600080fd5b8063248a9ca31461023f5780632f2ff15d1461027057600080fd5b8063106e629011610160578063106e6290146101b9578063116191b6146101cc57806321e093b11461021857600080fd5b806301ffc9a71461017c57806302d5c899146101a4575b600080fd5b61018f61018a366004610fb4565b6103c9565b60405190151581526020015b60405180910390f35b6101b76101b2366004611026565b610462565b005b6101b76101c73660046110b8565b6105f7565b6101f37f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161019b565b6101f37f000000000000000000000000000000000000000000000000000000000000000081565b61026261024d3660046110eb565b60009081526002602052604090206001015490565b60405190815260200161019b565b6101b761027e366004611104565b61069c565b6101b7610291366004611104565b6106c7565b6101b7610720565b60015460ff1661018f565b6101b76102b7366004611026565b610755565b6101b76102ca3660046110eb565b6108d0565b6101b76102dd3660046110eb565b61093e565b6101b76109e8565b6102627f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b61018f61031f366004611104565b600091825260026020908152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b610262600081565b6102627f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb81565b6101b7610394366004611104565b610a1a565b61026260035481565b6102627f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061045c57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b61046a610a3f565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461049481610a82565b61049c610a8c565b6104c77f00000000000000000000000000000000000000000000000000000000000000008684610acb565b6040517fb8969bd400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063b8969bd490610561907f0000000000000000000000000000000000000000000000000000000000000000908a908a908a908a90600401611179565b600060405180830381600087803b15801561057b57600080fd5b505af115801561058f573d6000803e3d6000fd5b505050508573ffffffffffffffffffffffffffffffffffffffff167fba96f26bdda53eb8c8ba39045dfb4ff39753fbc7a6edcf250a88e75e78d102fe8686866040516105dd939291906111d6565b60405180910390a2506105f06001600055565b5050505050565b6105ff610a3f565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461062981610a82565b610631610a8c565b61063c848484610acb565b8373ffffffffffffffffffffffffffffffffffffffff167f884edad9ce6fa2440d8a54cc123490eb96d2768479d49ff9c7366125a94243648460405161068491815260200190565b60405180910390a2506106976001600055565b505050565b6000828152600260205260409020600101546106b781610a82565b6106c18383610c53565b50505050565b73ffffffffffffffffffffffffffffffffffffffff81163314610716576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6106978282610d53565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61074a81610a82565b610752610e12565b50565b61075d610a3f565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461078781610a82565b61078f610a8c565b6107ba7f00000000000000000000000000000000000000000000000000000000000000008684610acb565b6040517f5131ab5900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690635131ab5990610854907f0000000000000000000000000000000000000000000000000000000000000000908a908a908a908a90600401611179565b600060405180830381600087803b15801561086e57600080fd5b505af1158015610882573d6000803e3d6000fd5b505050508573ffffffffffffffffffffffffffffffffffffffff167f7772f56296d3a5202974a45c61c9188d844ab4d6eeb18c851e4b8d5384ca6ced8686866040516105dd939291906111d6565b7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb6108fa81610a82565b610902610a8c565b60038290556040518281527f7810bd47de260c3e9ee10061cf438099dd12256c79485f12f94dbccc981e806c9060200160405180910390a15050565b610946610a8c565b6040517f79cc6790000000000000000000000000000000000000000000000000000000008152336004820152602481018290527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16906379cc679090604401600060405180830381600087803b1580156109d457600080fd5b505af11580156105f0573d6000803e3d6000fd5b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610a1281610a82565b610752610e8f565b600082815260026020526040902060010154610a3581610a82565b6106c18383610d53565b600260005403610a7b576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b6107528133610ee8565b60015460ff1615610ac9576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6003547f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b39573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b5d91906111f9565b610b679084611212565b1115610b9f576040517fc30436e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f1e458bee00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff848116600483015260248201849052604482018390527f00000000000000000000000000000000000000000000000000000000000000001690631e458bee90606401600060405180830381600087803b158015610c3657600080fd5b505af1158015610c4a573d6000803e3d6000fd5b50505050505050565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff16610d4b57600083815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff86168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055610ce93390565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a450600161045c565b50600061045c565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff1615610d4b57600083815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8616808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a450600161045c565b610e1a610f78565b600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b610e97610a8c565b600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016811790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25833610e65565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16610f74576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff821660048201526024810183905260440160405180910390fd5b5050565b60015460ff16610ac9576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060208284031215610fc657600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610ff657600080fd5b9392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461102157600080fd5b919050565b60008060008060006080868803121561103e57600080fd5b61104786610ffd565b945060208601359350604086013567ffffffffffffffff81111561106a57600080fd5b8601601f8101881361107b57600080fd5b803567ffffffffffffffff81111561109257600080fd5b8860208284010111156110a457600080fd5b959894975060200195606001359392505050565b6000806000606084860312156110cd57600080fd5b6110d684610ffd565b95602085013595506040909401359392505050565b6000602082840312156110fd57600080fd5b5035919050565b6000806040838503121561111757600080fd5b8235915061112760208401610ffd565b90509250929050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff8616815273ffffffffffffffffffffffffffffffffffffffff851660208201528360408201526080606082015260006111cb608083018486611130565b979650505050505050565b8381526040602082015260006111f0604083018486611130565b95945050505050565b60006020828403121561120b57600080fd5b5051919050565b8082018082111561045c577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea2646970667358221220f784eb6e1655c2988d3f762737188cfee07a61da1d5b8456cc4f4e55cb339cfb64736f6c634300081a0033"; + "0x60c060405260001960035534801561001657600080fd5b5060405161155a38038061155a83398101604081905261003591610220565b60016000819055805460ff19169055838383836001600160a01b038416158061006557506001600160a01b038316155b8061007757506001600160a01b038216155b8061008957506001600160a01b038116155b156100a75760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b03808516608052831660a0526100c5600082610154565b506100f07f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e483610154565b5061011b7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb83610154565b506101467f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a82610154565b505050505050505050610274565b60008281526002602090815260408083206001600160a01b038516845290915281205460ff166101fa5760008381526002602090815260408083206001600160a01b03861684529091529020805460ff191660011790556101b23390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45060016101fe565b5060005b92915050565b80516001600160a01b038116811461021b57600080fd5b919050565b6000806000806080858703121561023657600080fd5b61023f85610204565b935061024d60208601610204565b925061025b60408601610204565b915061026960608601610204565b905092959194509250565b60805160a0516112826102d86000396000818161021d01528181610531015281816108240152818161097b01528181610ad00152610bf20152600081816101d1015281816104a1015281816105040152818161079401526107f701526112826000f3fe608060405234801561001057600080fd5b50600436106101775760003560e01c80635e3e9fef116100d857806391d148541161008c578063d547741f11610066578063d547741f14610386578063d5abeb0114610399578063e63ab1e9146103a257600080fd5b806391d1485414610311578063a217fddf14610357578063a783c7891461035f57600080fd5b8063743e0c9b116100bd578063743e0c9b146102cf5780638456cb59146102e257806385f438c1146102ea57600080fd5b80635e3e9fef146102a95780636f8b44b0146102bc57600080fd5b8063248a9ca31161012f57806336568abe1161011457806336568abe146102835780633f4ba83a146102965780635c975abb1461029e57600080fd5b8063248a9ca31461023f5780632f2ff15d1461027057600080fd5b8063106e629011610160578063106e6290146101b9578063116191b6146101cc57806321e093b11461021857600080fd5b806301ffc9a71461017c57806302d5c899146101a4575b600080fd5b61018f61018a366004610fb4565b6103c9565b60405190151581526020015b60405180910390f35b6101b76101b2366004611026565b610462565b005b6101b76101c73660046110b8565b6105f7565b6101f37f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161019b565b6101f37f000000000000000000000000000000000000000000000000000000000000000081565b61026261024d3660046110eb565b60009081526002602052604090206001015490565b60405190815260200161019b565b6101b761027e366004611104565b61069c565b6101b7610291366004611104565b6106c7565b6101b7610720565b60015460ff1661018f565b6101b76102b7366004611026565b610755565b6101b76102ca3660046110eb565b6108d0565b6101b76102dd3660046110eb565b61093e565b6101b76109e8565b6102627f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b61018f61031f366004611104565b600091825260026020908152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b610262600081565b6102627f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb81565b6101b7610394366004611104565b610a1a565b61026260035481565b6102627f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061045c57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b61046a610a3f565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461049481610a82565b61049c610a8c565b6104c77f00000000000000000000000000000000000000000000000000000000000000008684610acb565b6040517fb8969bd400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063b8969bd490610561907f0000000000000000000000000000000000000000000000000000000000000000908a908a908a908a90600401611179565b600060405180830381600087803b15801561057b57600080fd5b505af115801561058f573d6000803e3d6000fd5b505050508573ffffffffffffffffffffffffffffffffffffffff167fba96f26bdda53eb8c8ba39045dfb4ff39753fbc7a6edcf250a88e75e78d102fe8686866040516105dd939291906111d6565b60405180910390a2506105f06001600055565b5050505050565b6105ff610a3f565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461062981610a82565b610631610a8c565b61063c848484610acb565b8373ffffffffffffffffffffffffffffffffffffffff167f884edad9ce6fa2440d8a54cc123490eb96d2768479d49ff9c7366125a94243648460405161068491815260200190565b60405180910390a2506106976001600055565b505050565b6000828152600260205260409020600101546106b781610a82565b6106c18383610c53565b50505050565b73ffffffffffffffffffffffffffffffffffffffff81163314610716576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6106978282610d53565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61074a81610a82565b610752610e12565b50565b61075d610a3f565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461078781610a82565b61078f610a8c565b6107ba7f00000000000000000000000000000000000000000000000000000000000000008684610acb565b6040517f5131ab5900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690635131ab5990610854907f0000000000000000000000000000000000000000000000000000000000000000908a908a908a908a90600401611179565b600060405180830381600087803b15801561086e57600080fd5b505af1158015610882573d6000803e3d6000fd5b505050508573ffffffffffffffffffffffffffffffffffffffff167f7772f56296d3a5202974a45c61c9188d844ab4d6eeb18c851e4b8d5384ca6ced8686866040516105dd939291906111d6565b7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb6108fa81610a82565b610902610a8c565b60038290556040518281527f7810bd47de260c3e9ee10061cf438099dd12256c79485f12f94dbccc981e806c9060200160405180910390a15050565b610946610a8c565b6040517f79cc6790000000000000000000000000000000000000000000000000000000008152336004820152602481018290527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16906379cc679090604401600060405180830381600087803b1580156109d457600080fd5b505af11580156105f0573d6000803e3d6000fd5b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610a1281610a82565b610752610e8f565b600082815260026020526040902060010154610a3581610a82565b6106c18383610d53565b600260005403610a7b576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b6107528133610ee8565b60015460ff1615610ac9576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6003547f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b39573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b5d91906111f9565b610b679084611212565b1115610b9f576040517fc30436e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f1e458bee00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff848116600483015260248201849052604482018390527f00000000000000000000000000000000000000000000000000000000000000001690631e458bee90606401600060405180830381600087803b158015610c3657600080fd5b505af1158015610c4a573d6000803e3d6000fd5b50505050505050565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff16610d4b57600083815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff86168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055610ce93390565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a450600161045c565b50600061045c565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff1615610d4b57600083815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8616808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a450600161045c565b610e1a610f78565b600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b610e97610a8c565b600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016811790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25833610e65565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16610f74576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff821660048201526024810183905260440160405180910390fd5b5050565b60015460ff16610ac9576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060208284031215610fc657600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610ff657600080fd5b9392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461102157600080fd5b919050565b60008060008060006080868803121561103e57600080fd5b61104786610ffd565b945060208601359350604086013567ffffffffffffffff81111561106a57600080fd5b8601601f8101881361107b57600080fd5b803567ffffffffffffffff81111561109257600080fd5b8860208284010111156110a457600080fd5b959894975060200195606001359392505050565b6000806000606084860312156110cd57600080fd5b6110d684610ffd565b95602085013595506040909401359392505050565b6000602082840312156110fd57600080fd5b5035919050565b6000806040838503121561111757600080fd5b8235915061112760208401610ffd565b90509250929050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff8616815273ffffffffffffffffffffffffffffffffffffffff851660208201528360408201526080606082015260006111cb608083018486611130565b979650505050505050565b8381526040602082015260006111f0604083018486611130565b95945050505050565b60006020828403121561120b57600080fd5b5051919050565b8082018082111561045c577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea2646970667358221220de5fa55e0ca79ea2f08903481d01ea00bbbf346b9cfba44e12a2dd6f3a6f2e8a64736f6c634300081a0033"; type ZetaConnectorNonNativeConstructorParams = | [signer?: Signer] diff --git a/v2/typechain-types/index.ts b/v2/typechain-types/index.ts index c3d0734e..3c5c5a45 100644 --- a/v2/typechain-types/index.ts +++ b/v2/typechain-types/index.ts @@ -133,6 +133,8 @@ export { IAccessControl__factory } from "./factories/IAccessControl__factory"; export { IBeacon__factory } from "./factories/IBeacon__factory"; export { IERC165__factory } from "./factories/IERC165__factory"; export { IERC1967__factory } from "./factories/IERC1967__factory"; +export type { IERC20Custody } from "./IERC20Custody.sol/IERC20Custody"; +export { IERC20Custody__factory } from "./factories/IERC20Custody.sol/IERC20Custody__factory"; export type { IERC20CustodyErrors } from "./IERC20Custody.sol/IERC20CustodyErrors"; export { IERC20CustodyErrors__factory } from "./factories/IERC20Custody.sol/IERC20CustodyErrors__factory"; export type { IERC20CustodyEvents } from "./IERC20Custody.sol/IERC20CustodyEvents"; From a32bf1457810fec5b3a7c898b9185f100ecf8306 Mon Sep 17 00:00:00 2001 From: skosito Date: Thu, 8 Aug 2024 15:37:47 +0200 Subject: [PATCH 17/21] add missing receiver arg --- v2/src/zevm/GatewayZEVM.sol | 10 +++++++--- v2/src/zevm/interfaces/IGatewayZEVM.sol | 6 ++++-- v2/test/GatewayZEVM.t.sol | 24 +++++++++++++++--------- 3 files changed, 26 insertions(+), 14 deletions(-) diff --git a/v2/src/zevm/GatewayZEVM.sol b/v2/src/zevm/GatewayZEVM.sol index e3ac6fe9..863783e2 100644 --- a/v2/src/zevm/GatewayZEVM.sol +++ b/v2/src/zevm/GatewayZEVM.sol @@ -146,21 +146,24 @@ contract GatewayZEVM is } /// @notice Withdraw ZETA tokens to an external chain. + /// @param receiver The receiver address on the external chain. /// @param amount The amount of tokens to withdraw. - function withdraw(uint256 amount, uint256 chainId) external nonReentrant whenNotPaused { + function withdraw(bytes memory receiver, uint256 amount, uint256 chainId) external nonReentrant whenNotPaused { if (amount == 0) revert InsufficientZetaAmount(); _transferZETA(amount, FUNGIBLE_MODULE_ADDRESS); emit Withdrawal( - msg.sender, chainId, abi.encodePacked(FUNGIBLE_MODULE_ADDRESS), address(zetaToken), amount, 0, 0, "" + msg.sender, chainId, receiver, address(zetaToken), amount, 0, 0, "" ); } /// @notice Withdraw ZETA tokens and call a smart contract on an external chain. + /// @param receiver The receiver address on the external chain. /// @param amount The amount of tokens to withdraw. /// @param chainId Chain id of the external chain. /// @param message The calldata to pass to the contract call. function withdrawAndCall( + bytes memory receiver, uint256 amount, uint256 chainId, bytes calldata message @@ -169,11 +172,12 @@ contract GatewayZEVM is nonReentrant whenNotPaused { + if (receiver.length == 0) revert ZeroAddress(); if (amount == 0) revert InsufficientZetaAmount(); _transferZETA(amount, FUNGIBLE_MODULE_ADDRESS); emit Withdrawal( - msg.sender, chainId, abi.encodePacked(FUNGIBLE_MODULE_ADDRESS), address(zetaToken), amount, 0, 0, message + msg.sender, chainId, receiver, address(zetaToken), amount, 0, 0, message ); } diff --git a/v2/src/zevm/interfaces/IGatewayZEVM.sol b/v2/src/zevm/interfaces/IGatewayZEVM.sol index 4f9eaddf..c9e59a0f 100644 --- a/v2/src/zevm/interfaces/IGatewayZEVM.sol +++ b/v2/src/zevm/interfaces/IGatewayZEVM.sol @@ -82,8 +82,9 @@ interface IGatewayZEVM is IGatewayZEVMErrors, IGatewayZEVMEvents { function withdraw(bytes memory receiver, uint256 amount, address zrc20) external; /// @notice Withdraw ZETA tokens to an external chain. + /// @param receiver The receiver address on the external chain. /// @param amount The amount of tokens to withdraw. - function withdraw(uint256 amount, uint256 chainId) external; + function withdraw(bytes memory receiver, uint256 amount, uint256 chainId) external; /// @notice Withdraw ZRC20 tokens and call a smart contract on an external chain. /// @param receiver The receiver address on the external chain. @@ -93,10 +94,11 @@ interface IGatewayZEVM is IGatewayZEVMErrors, IGatewayZEVMEvents { function withdrawAndCall(bytes memory receiver, uint256 amount, address zrc20, bytes calldata message) external; /// @notice Withdraw ZETA tokens and call a smart contract on an external chain. + /// @param receiver The receiver address on the external chain. /// @param amount The amount of tokens to withdraw. /// @param chainId Chain id of the external chain. /// @param message The calldata to pass to the contract call. - function withdrawAndCall(uint256 amount, uint256 chainId, bytes calldata message) external; + function withdrawAndCall(bytes memory receiver, uint256 amount, uint256 chainId, bytes calldata message) external; /// @notice Call a smart contract on an external chain without asset transfer. /// @param receiver The receiver address on the external chain. diff --git a/v2/test/GatewayZEVM.t.sol b/v2/test/GatewayZEVM.t.sol index 82467d09..2af59513 100644 --- a/v2/test/GatewayZEVM.t.sol +++ b/v2/test/GatewayZEVM.t.sol @@ -169,13 +169,19 @@ contract GatewayZEVMInboundTest is Test, IGatewayZEVMEvents, IGatewayZEVMErrors function testWithdrawZETAFailsIfAmountIsZero() public { vm.expectRevert(InsufficientZetaAmount.selector); - gateway.withdraw(0, 1); + gateway.withdraw(abi.encodePacked(addr1), 0, 1); } function testWithdrawAndcallZETAFailsIfAmountIsZero() public { bytes memory message = abi.encodeWithSignature("hello(address)", addr1); vm.expectRevert(InsufficientZetaAmount.selector); - gateway.withdrawAndCall(0, 1, message); + gateway.withdrawAndCall(abi.encodePacked(addr1), 0, 1, message); + } + + function testWithdrawAndcallZETAFailsIfAmountIsReceiverIsZeroAddress() public { + bytes memory message = abi.encodeWithSignature("hello(address)", addr1); + vm.expectRevert(ZeroAddress.selector); + gateway.withdrawAndCall(abi.encodePacked(""), 1, 1, message); } function testWithdrawZETA() public { @@ -186,8 +192,8 @@ contract GatewayZEVMInboundTest is Test, IGatewayZEVMEvents, IGatewayZEVMErrors uint256 chainId = 1; vm.expectEmit(true, true, true, true, address(gateway)); - emit Withdrawal(owner, chainId, abi.encodePacked(fungibleModule), address(zetaToken), amount, 0, 0, ""); - gateway.withdraw(amount, chainId); + emit Withdrawal(owner, chainId, abi.encodePacked(addr1), address(zetaToken), amount, 0, 0, ""); + gateway.withdraw(abi.encodePacked(addr1), amount, chainId); uint256 ownerBalanceAfter = zetaToken.balanceOf(owner); assertEq(ownerBalanceBefore - 1, ownerBalanceAfter); @@ -211,7 +217,7 @@ contract GatewayZEVMInboundTest is Test, IGatewayZEVMEvents, IGatewayZEVMErrors zetaToken.approve(address(gateway), 0); vm.expectRevert(); - gateway.withdraw(amount, chainId); + gateway.withdraw(abi.encodePacked(addr1), amount, chainId); // Verify balances not changed uint256 ownerBalanceAfter = zetaToken.balanceOf(owner); @@ -230,7 +236,7 @@ contract GatewayZEVMInboundTest is Test, IGatewayZEVMEvents, IGatewayZEVMErrors uint256 chainId = 1; vm.expectRevert(); - gateway.withdraw(amount, chainId); + gateway.withdraw(abi.encodePacked(addr1), amount, chainId); } function testWithdrawZETAWithMessage() public { @@ -242,8 +248,8 @@ contract GatewayZEVMInboundTest is Test, IGatewayZEVMEvents, IGatewayZEVMErrors uint256 chainId = 1; vm.expectEmit(true, true, true, true, address(gateway)); - emit Withdrawal(owner, chainId, abi.encodePacked(fungibleModule), address(zetaToken), amount, 0, 0, message); - gateway.withdrawAndCall(amount, chainId, message); + emit Withdrawal(owner, chainId, abi.encodePacked(addr1), address(zetaToken), amount, 0, 0, message); + gateway.withdrawAndCall(abi.encodePacked(addr1), amount, chainId, message); uint256 ownerBalanceAfter = zetaToken.balanceOf(owner); assertEq(ownerBalanceBefore - 1, ownerBalanceAfter); @@ -268,7 +274,7 @@ contract GatewayZEVMInboundTest is Test, IGatewayZEVMEvents, IGatewayZEVMErrors zetaToken.approve(address(gateway), 0); vm.expectRevert(); - gateway.withdrawAndCall(amount, chainId, message); + gateway.withdrawAndCall(abi.encodePacked(addr1), amount, chainId, message); // Verify balances not changed uint256 ownerBalanceAfter = zetaToken.balanceOf(owner); From ca5401806d732e811798967ee6afb9a84d980232 Mon Sep 17 00:00:00 2001 From: skosito Date: Thu, 8 Aug 2024 15:52:12 +0200 Subject: [PATCH 18/21] locanet fixes --- v2/scripts/localnet/EvmDepositAndCall.s.sol | 5 +++++ v2/scripts/localnet/ZevmWithdrawAndCall.s.sol | 2 +- v2/scripts/localnet/worker.ts | 4 ++-- v2/src/evm/GatewayEVM.sol | 1 + v2/test/GatewayEVM.t.sol | 7 +++++++ 5 files changed, 16 insertions(+), 3 deletions(-) diff --git a/v2/scripts/localnet/EvmDepositAndCall.s.sol b/v2/scripts/localnet/EvmDepositAndCall.s.sol index e44c3e88..42ad10a4 100644 --- a/v2/scripts/localnet/EvmDepositAndCall.s.sol +++ b/v2/scripts/localnet/EvmDepositAndCall.s.sol @@ -3,6 +3,7 @@ pragma solidity 0.8.26; import "forge-std/Script.sol"; import "src/evm/GatewayEVM.sol"; +import "src/evm/ERC20Custody.sol"; import "test/utils/TestZContract.sol"; import "test/utils/TestERC20.sol"; @@ -12,6 +13,7 @@ contract EvmDepositAndCallScript is Script { function run() external { address payable gatewayEVMAddress = payable(vm.envOr("GATEWAY_EVM", 0x9fE46736679d2D9a65F0992F2272dE9f3c7fa6e0)); address payable zContractAddress = payable(vm.envOr("Z_CONTRACT", 0x68B1D87F95878fE05B998F19b66F4baba5De1aed)); + address custodyAddress = vm.envOr("CUSTODY", 0xDc64a140Aa3E981100a9becA4E685f962f0cF6C9); address erc20Address = vm.envOr("ERC20", 0x9A676e781A523b5d0C0e43731313A708CB607508); uint256 amount = vm.envOr("AMOUNT", uint256(1)); string memory mnemonic = "test test test test test test test test test test test junk"; @@ -23,6 +25,9 @@ contract EvmDepositAndCallScript is Script { GatewayEVM gatewayEVM = GatewayEVM(gatewayEVMAddress); TestZContract zContract = TestZContract(zContractAddress); TestERC20 erc20 = TestERC20(erc20Address); + ERC20Custody custody = ERC20Custody(custodyAddress); + + custody.whitelist(erc20Address); // Approve the ERC20 transfer erc20.approve(gatewayEVMAddress, amount); diff --git a/v2/scripts/localnet/ZevmWithdrawAndCall.s.sol b/v2/scripts/localnet/ZevmWithdrawAndCall.s.sol index fed5bf3b..69babcd4 100644 --- a/v2/scripts/localnet/ZevmWithdrawAndCall.s.sol +++ b/v2/scripts/localnet/ZevmWithdrawAndCall.s.sol @@ -4,7 +4,7 @@ pragma solidity 0.8.26; import "forge-std/Script.sol"; import "src/zevm/GatewayZEVM.sol"; import "test/utils/ReceiverEVM.sol"; -import "test/utils/ZRC20.sol"; +import "src/zevm/ZRC20.sol"; // ZevmWithdrawAndCallScript executes withdrawAndCall method on GatewayZEVM and it should be used on localnet. // It uses anvil private key, and sets default contract addresses deployed on fresh localnet, that can be overriden with env vars. diff --git a/v2/scripts/localnet/worker.ts b/v2/scripts/localnet/worker.ts index ed3f37d3..95298ee6 100644 --- a/v2/scripts/localnet/worker.ts +++ b/v2/scripts/localnet/worker.ts @@ -246,7 +246,7 @@ const startWorker = async () => { chainID, }, testContracts.zrc20.target, - 0, + 1, zContract, payload, deployOpts @@ -271,7 +271,7 @@ const startWorker = async () => { .execute( [protocolContracts.gatewayZEVM.target, await fungibleModuleSigner.getAddress(), 1], asset, - 0, + 1, receiver, payload, deployOpts diff --git a/v2/src/evm/GatewayEVM.sol b/v2/src/evm/GatewayEVM.sol index 3daf28fb..ae81dc77 100644 --- a/v2/src/evm/GatewayEVM.sol +++ b/v2/src/evm/GatewayEVM.sol @@ -269,6 +269,7 @@ contract GatewayEVM is /// @param receiver Address of the receiver. /// @param payload Calldata to pass to the call. function call(address receiver, bytes calldata payload) external whenNotPaused nonReentrant { + if (receiver == address(0)) revert ZeroAddress(); emit Call(msg.sender, receiver, payload); } diff --git a/v2/test/GatewayEVM.t.sol b/v2/test/GatewayEVM.t.sol index ed0514f3..81660e30 100644 --- a/v2/test/GatewayEVM.t.sol +++ b/v2/test/GatewayEVM.t.sol @@ -488,4 +488,11 @@ contract GatewayEVMInboundTest is Test, IGatewayEVMErrors, IGatewayEVMEvents, IR emit Call(owner, destination, payload); gateway.call(destination, payload); } + + function testCallWithPayloadFailsIfDestinationIsZeroAddress() public { + bytes memory payload = abi.encodeWithSignature("hello(address)", destination); + + vm.expectRevert(ZeroAddress.selector); + gateway.call(address(0), payload); + } } From 22ea111e1e11e62a97ca6f82af59adc53f445e44 Mon Sep 17 00:00:00 2001 From: skosito Date: Thu, 8 Aug 2024 16:14:26 +0200 Subject: [PATCH 19/21] generate --- v2/pkg/erc20custody.sol/erc20custody.go | 2 +- v2/pkg/erc20custody.t.sol/erc20custodytest.go | 2 +- .../erc20custodyechidnatest.go | 2 +- v2/pkg/gatewayevm.sol/gatewayevm.go | 2 +- .../gatewayevm.t.sol/gatewayevminboundtest.go | 25 ++++++++- v2/pkg/gatewayevm.t.sol/gatewayevmtest.go | 2 +- .../gatewayevmechidnatest.go | 2 +- .../gatewayevmuupsupgradetest.go | 2 +- .../gatewayevmzevmtest.go | 2 +- v2/pkg/gatewayzevm.sol/gatewayzevm.go | 52 +++++++++---------- .../gatewayzevminboundtest.go | 25 ++++++++- .../gatewayzevmoutboundtest.go | 2 +- v2/pkg/igatewayzevm.sol/igatewayzevm.go | 50 +++++++++--------- v2/pkg/senderzevm.sol/senderzevm.go | 2 +- .../zetaconnectornativetest.go | 2 +- .../zetaconnectornonnativetest.go | 2 +- v2/pkg/zrc20.t.sol/zrc20test.go | 2 +- v2/src/zevm/GatewayZEVM.sol | 8 +-- v2/typechain-types/GatewayZEVM.ts | 42 +++++++++------ .../IGatewayZEVM.sol/IGatewayZEVM.ts | 42 +++++++++------ .../ERC20CustodyEchidnaTest__factory.ts | 2 +- .../factories/ERC20Custody__factory.ts | 2 +- .../GatewayEVMEchidnaTest__factory.ts | 2 +- .../factories/GatewayEVM__factory.ts | 2 +- .../factories/GatewayZEVM__factory.ts | 12 ++++- .../IGatewayZEVM.sol/IGatewayZEVM__factory.ts | 10 ++++ .../factories/SenderZEVM__factory.ts | 2 +- 27 files changed, 190 insertions(+), 112 deletions(-) diff --git a/v2/pkg/erc20custody.sol/erc20custody.go b/v2/pkg/erc20custody.sol/erc20custody.go index 4438f45f..114ec0b4 100644 --- a/v2/pkg/erc20custody.sol/erc20custody.go +++ b/v2/pkg/erc20custody.sol/erc20custody.go @@ -32,7 +32,7 @@ var ( // ERC20CustodyMetaData contains all meta data concerning the ERC20Custody contract. var ERC20CustodyMetaData = &bind.MetaData{ ABI: "[{\"type\":\"constructor\",\"inputs\":[{\"name\":\"gateway_\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"tssAddress_\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"admin_\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"DEFAULT_ADMIN_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"PAUSER_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"WHITELISTER_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"WITHDRAWER_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"gateway\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIGatewayEVM\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getRoleAdmin\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"grantRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"hasRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"pause\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"paused\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"renounceRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"callerConfirmation\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"revokeRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"supportsInterface\",\"inputs\":[{\"name\":\"interfaceId\",\"type\":\"bytes4\",\"internalType\":\"bytes4\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"unpause\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"unwhitelist\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"whitelist\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"whitelisted\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"withdraw\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"withdrawAndCall\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"withdrawAndRevert\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"event\",\"name\":\"Paused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleAdminChanged\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"previousAdminRole\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"newAdminRole\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleGranted\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleRevoked\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Unpaused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Unwhitelisted\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Whitelisted\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Withdraw\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"WithdrawAndCall\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"WithdrawAndRevert\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"AccessControlBadConfirmation\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"AccessControlUnauthorizedAccount\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"neededRole\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"type\":\"error\",\"name\":\"AddressEmptyCode\",\"inputs\":[{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"AddressInsufficientBalance\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"EnforcedPause\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ExpectedPause\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"FailedInnerCall\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NotWhitelisted\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ReentrancyGuardReentrantCall\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"SafeERC20FailedOperation\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"ZeroAddress\",\"inputs\":[]}]", - Bin: "0x60a060405234801561001057600080fd5b506040516116fe3803806116fe83398101604081905261002f916101e5565b60016000556002805460ff191690556001600160a01b038316158061005b57506001600160a01b038216155b8061006d57506001600160a01b038116155b1561008b5760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b0383166080526100a3600082610134565b506100ce7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a82610134565b506100f97f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e483610134565b506101126000805160206116de83398151915282610134565b5061012b6000805160206116de83398151915283610134565b50505050610228565b60008281526001602090815260408083206001600160a01b038516845290915281205460ff166101bf5760008381526001602081815260408084206001600160a01b0387168086529252808420805460ff19169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45060016101c3565b5060005b92915050565b80516001600160a01b03811681146101e057600080fd5b919050565b6000806000606084860312156101fa57600080fd5b610203846101c9565b9250610211602085016101c9565b915061021f604085016101c9565b90509250925092565b60805161147f61025f6000396000818161019e0152818161050001528181610562015281816108f70152610959015261147f6000f3fe608060405234801561001057600080fd5b506004361061016c5760003560e01c806385f438c1116100cd578063c8a0236211610081578063d936547e11610066578063d936547e14610355578063d9caed1214610378578063e63ab1e91461038b57600080fd5b8063c8a023621461032f578063d547741f1461034257600080fd5b80639a590427116100b25780639a590427146103015780639b19251a14610314578063a217fddf1461032757600080fd5b806385f438c11461029457806391d14854146102bb57600080fd5b806336568abe11610124578063570618e111610109578063570618e11461025a5780635c975abb146102815780638456cb591461028c57600080fd5b806336568abe1461023f5780633f4ba83a1461025257600080fd5b806321fc65f21161015557806321fc65f2146101e5578063248a9ca3146101fa5780632f2ff15d1461022c57600080fd5b806301ffc9a714610171578063116191b614610199575b600080fd5b61018461017f36600461118a565b6103b2565b60405190151581526020015b60405180910390f35b6101c07f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610190565b6101f86101f33660046111f5565b61044b565b005b61021e610208366004611292565b6000908152600160208190526040909120015490565b604051908152602001610190565b6101f861023a3660046112ab565b61064c565b6101f861024d3660046112ab565b610678565b6101f86106d6565b61021e7f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a81565b60025460ff16610184565b6101f861070b565b61021e7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b6101846102c93660046112ab565b600091825260016020908152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b6101f861030f3660046112d7565b61073d565b6101f86103223660046112d7565b6107be565b61021e600081565b6101f861033d3660046111f5565b610842565b6101f86103503660046112ab565b610a29565b6101846103633660046112d7565b60036020526000908152604090205460ff1681565b6101f86103863660046112f2565b610a4f565b61021e7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061044557507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b610453610b7b565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461047d81610bbe565b610485610bc8565b73ffffffffffffffffffffffffffffffffffffffff861660009081526003602052604090205460ff166104e4576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61052573ffffffffffffffffffffffffffffffffffffffff87167f000000000000000000000000000000000000000000000000000000000000000086610c07565b6040517f5131ab5900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690635131ab599061059f9089908990899089908990600401611378565b600060405180830381600087803b1580156105b957600080fd5b505af11580156105cd573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167f85b5be9cf454e05e0bddf49315178102227c312078eefa3c00294fb4d912ae4e868686604051610632939291906113d5565b60405180910390a3506106456001600055565b5050505050565b6000828152600160208190526040909120015461066881610bbe565b6106728383610c94565b50505050565b73ffffffffffffffffffffffffffffffffffffffff811633146106c7576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6106d18282610d41565b505050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61070081610bbe565b610708610de2565b50565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61073581610bbe565b610708610e41565b7f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a61076781610bbe565b73ffffffffffffffffffffffffffffffffffffffff8216600081815260036020526040808220805460ff19169055517f51085ddf9ebdded84b76e829eb58c4078e4b5bdf97d9a94723f336039da467919190a25050565b7f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a6107e881610bbe565b73ffffffffffffffffffffffffffffffffffffffff8216600081815260036020526040808220805460ff19166001179055517faab7954e9d246b167ef88aeddad35209ca2489d95a8aeb59e288d9b19fae5a549190a25050565b61084a610b7b565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461087481610bbe565b61087c610bc8565b73ffffffffffffffffffffffffffffffffffffffff861660009081526003602052604090205460ff166108db576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61091c73ffffffffffffffffffffffffffffffffffffffff87167f000000000000000000000000000000000000000000000000000000000000000086610c07565b6040517fb8969bd400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063b8969bd4906109969089908990899089908990600401611378565b600060405180830381600087803b1580156109b057600080fd5b505af11580156109c4573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fb9d4efa96044e5f5e03e696fa9ae2ff66911cc27e8a637c3627c75bc5b2241c8868686604051610632939291906113d5565b60008281526001602081905260409091200154610a4581610bbe565b6106728383610d41565b610a57610b7b565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e4610a8181610bbe565b610a89610bc8565b73ffffffffffffffffffffffffffffffffffffffff841660009081526003602052604090205460ff16610ae8576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610b0973ffffffffffffffffffffffffffffffffffffffff85168484610c07565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f9b1bfa7fa9ee420a16e124f794c35ac9f90472acc99140eb2f6447c714cad8eb84604051610b6891815260200190565b60405180910390a3506106d16001600055565b600260005403610bb7576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b6107088133610e7e565b60025460ff1615610c05576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6040805173ffffffffffffffffffffffffffffffffffffffff8416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb000000000000000000000000000000000000000000000000000000001790526106d1908490610f0f565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff16610d3957600083815260016020818152604080842073ffffffffffffffffffffffffffffffffffffffff87168086529252808420805460ff19169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a4506001610445565b506000610445565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff1615610d3957600083815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff86168085529252808320805460ff1916905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a4506001610445565b610dea610fa5565b6002805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b610e49610bc8565b6002805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258610e173390565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16610f0b576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82166004820152602481018390526044015b60405180910390fd5b5050565b6000610f3173ffffffffffffffffffffffffffffffffffffffff841683610fe1565b90508051600014158015610f56575080806020019051810190610f5491906113f8565b155b156106d1576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84166004820152602401610f02565b60025460ff16610c05576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6060610fef83836000610ff6565b9392505050565b606081471015611034576040517fcd786059000000000000000000000000000000000000000000000000000000008152306004820152602401610f02565b6000808573ffffffffffffffffffffffffffffffffffffffff16848660405161105d919061141a565b60006040518083038185875af1925050503d806000811461109a576040519150601f19603f3d011682016040523d82523d6000602084013e61109f565b606091505b50915091506110af8683836110b9565b9695505050505050565b6060826110ce576110c982611148565b610fef565b81511580156110f2575073ffffffffffffffffffffffffffffffffffffffff84163b155b15611141576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85166004820152602401610f02565b5080610fef565b8051156111585780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006020828403121561119c57600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610fef57600080fd5b803573ffffffffffffffffffffffffffffffffffffffff811681146111f057600080fd5b919050565b60008060008060006080868803121561120d57600080fd5b611216866111cc565b9450611224602087016111cc565b935060408601359250606086013567ffffffffffffffff81111561124757600080fd5b8601601f8101881361125857600080fd5b803567ffffffffffffffff81111561126f57600080fd5b88602082840101111561128157600080fd5b959894975092955050506020019190565b6000602082840312156112a457600080fd5b5035919050565b600080604083850312156112be57600080fd5b823591506112ce602084016111cc565b90509250929050565b6000602082840312156112e957600080fd5b610fef826111cc565b60008060006060848603121561130757600080fd5b611310846111cc565b925061131e602085016111cc565b929592945050506040919091013590565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff8616815273ffffffffffffffffffffffffffffffffffffffff851660208201528360408201526080606082015260006113ca60808301848661132f565b979650505050505050565b8381526040602082015260006113ef60408301848661132f565b95945050505050565b60006020828403121561140a57600080fd5b81518015158114610fef57600080fd5b6000825160005b8181101561143b5760208186018101518583015201611421565b50600092019182525091905056fea2646970667358221220dc54ce548a1f0bf8ba5e86cc53c6d822e55eee543451395733c659359bac8dd164736f6c634300081a00338619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a", + Bin: "0x60a060405234801561001057600080fd5b506040516116fe3803806116fe83398101604081905261002f916101e5565b60016000556002805460ff191690556001600160a01b038316158061005b57506001600160a01b038216155b8061006d57506001600160a01b038116155b1561008b5760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b0383166080526100a3600082610134565b506100ce7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a82610134565b506100f97f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e483610134565b506101126000805160206116de83398151915282610134565b5061012b6000805160206116de83398151915283610134565b50505050610228565b60008281526001602090815260408083206001600160a01b038516845290915281205460ff166101bf5760008381526001602081815260408084206001600160a01b0387168086529252808420805460ff19169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45060016101c3565b5060005b92915050565b80516001600160a01b03811681146101e057600080fd5b919050565b6000806000606084860312156101fa57600080fd5b610203846101c9565b9250610211602085016101c9565b915061021f604085016101c9565b90509250925092565b60805161147f61025f6000396000818161019e0152818161050001528181610562015281816108f70152610959015261147f6000f3fe608060405234801561001057600080fd5b506004361061016c5760003560e01c806385f438c1116100cd578063c8a0236211610081578063d936547e11610066578063d936547e14610355578063d9caed1214610378578063e63ab1e91461038b57600080fd5b8063c8a023621461032f578063d547741f1461034257600080fd5b80639a590427116100b25780639a590427146103015780639b19251a14610314578063a217fddf1461032757600080fd5b806385f438c11461029457806391d14854146102bb57600080fd5b806336568abe11610124578063570618e111610109578063570618e11461025a5780635c975abb146102815780638456cb591461028c57600080fd5b806336568abe1461023f5780633f4ba83a1461025257600080fd5b806321fc65f21161015557806321fc65f2146101e5578063248a9ca3146101fa5780632f2ff15d1461022c57600080fd5b806301ffc9a714610171578063116191b614610199575b600080fd5b61018461017f36600461118a565b6103b2565b60405190151581526020015b60405180910390f35b6101c07f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610190565b6101f86101f33660046111f5565b61044b565b005b61021e610208366004611292565b6000908152600160208190526040909120015490565b604051908152602001610190565b6101f861023a3660046112ab565b61064c565b6101f861024d3660046112ab565b610678565b6101f86106d6565b61021e7f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a81565b60025460ff16610184565b6101f861070b565b61021e7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b6101846102c93660046112ab565b600091825260016020908152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b6101f861030f3660046112d7565b61073d565b6101f86103223660046112d7565b6107be565b61021e600081565b6101f861033d3660046111f5565b610842565b6101f86103503660046112ab565b610a29565b6101846103633660046112d7565b60036020526000908152604090205460ff1681565b6101f86103863660046112f2565b610a4f565b61021e7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061044557507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b610453610b7b565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461047d81610bbe565b610485610bc8565b73ffffffffffffffffffffffffffffffffffffffff861660009081526003602052604090205460ff166104e4576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61052573ffffffffffffffffffffffffffffffffffffffff87167f000000000000000000000000000000000000000000000000000000000000000086610c07565b6040517f5131ab5900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690635131ab599061059f9089908990899089908990600401611378565b600060405180830381600087803b1580156105b957600080fd5b505af11580156105cd573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167f85b5be9cf454e05e0bddf49315178102227c312078eefa3c00294fb4d912ae4e868686604051610632939291906113d5565b60405180910390a3506106456001600055565b5050505050565b6000828152600160208190526040909120015461066881610bbe565b6106728383610c94565b50505050565b73ffffffffffffffffffffffffffffffffffffffff811633146106c7576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6106d18282610d41565b505050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61070081610bbe565b610708610de2565b50565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61073581610bbe565b610708610e41565b7f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a61076781610bbe565b73ffffffffffffffffffffffffffffffffffffffff8216600081815260036020526040808220805460ff19169055517f51085ddf9ebdded84b76e829eb58c4078e4b5bdf97d9a94723f336039da467919190a25050565b7f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a6107e881610bbe565b73ffffffffffffffffffffffffffffffffffffffff8216600081815260036020526040808220805460ff19166001179055517faab7954e9d246b167ef88aeddad35209ca2489d95a8aeb59e288d9b19fae5a549190a25050565b61084a610b7b565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461087481610bbe565b61087c610bc8565b73ffffffffffffffffffffffffffffffffffffffff861660009081526003602052604090205460ff166108db576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61091c73ffffffffffffffffffffffffffffffffffffffff87167f000000000000000000000000000000000000000000000000000000000000000086610c07565b6040517fb8969bd400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063b8969bd4906109969089908990899089908990600401611378565b600060405180830381600087803b1580156109b057600080fd5b505af11580156109c4573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fb9d4efa96044e5f5e03e696fa9ae2ff66911cc27e8a637c3627c75bc5b2241c8868686604051610632939291906113d5565b60008281526001602081905260409091200154610a4581610bbe565b6106728383610d41565b610a57610b7b565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e4610a8181610bbe565b610a89610bc8565b73ffffffffffffffffffffffffffffffffffffffff841660009081526003602052604090205460ff16610ae8576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610b0973ffffffffffffffffffffffffffffffffffffffff85168484610c07565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f9b1bfa7fa9ee420a16e124f794c35ac9f90472acc99140eb2f6447c714cad8eb84604051610b6891815260200190565b60405180910390a3506106d16001600055565b600260005403610bb7576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b6107088133610e7e565b60025460ff1615610c05576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6040805173ffffffffffffffffffffffffffffffffffffffff8416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb000000000000000000000000000000000000000000000000000000001790526106d1908490610f0f565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff16610d3957600083815260016020818152604080842073ffffffffffffffffffffffffffffffffffffffff87168086529252808420805460ff19169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a4506001610445565b506000610445565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff1615610d3957600083815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff86168085529252808320805460ff1916905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a4506001610445565b610dea610fa5565b6002805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b610e49610bc8565b6002805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258610e173390565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16610f0b576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82166004820152602481018390526044015b60405180910390fd5b5050565b6000610f3173ffffffffffffffffffffffffffffffffffffffff841683610fe1565b90508051600014158015610f56575080806020019051810190610f5491906113f8565b155b156106d1576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84166004820152602401610f02565b60025460ff16610c05576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6060610fef83836000610ff6565b9392505050565b606081471015611034576040517fcd786059000000000000000000000000000000000000000000000000000000008152306004820152602401610f02565b6000808573ffffffffffffffffffffffffffffffffffffffff16848660405161105d919061141a565b60006040518083038185875af1925050503d806000811461109a576040519150601f19603f3d011682016040523d82523d6000602084013e61109f565b606091505b50915091506110af8683836110b9565b9695505050505050565b6060826110ce576110c982611148565b610fef565b81511580156110f2575073ffffffffffffffffffffffffffffffffffffffff84163b155b15611141576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85166004820152602401610f02565b5080610fef565b8051156111585780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006020828403121561119c57600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610fef57600080fd5b803573ffffffffffffffffffffffffffffffffffffffff811681146111f057600080fd5b919050565b60008060008060006080868803121561120d57600080fd5b611216866111cc565b9450611224602087016111cc565b935060408601359250606086013567ffffffffffffffff81111561124757600080fd5b8601601f8101881361125857600080fd5b803567ffffffffffffffff81111561126f57600080fd5b88602082840101111561128157600080fd5b959894975092955050506020019190565b6000602082840312156112a457600080fd5b5035919050565b600080604083850312156112be57600080fd5b823591506112ce602084016111cc565b90509250929050565b6000602082840312156112e957600080fd5b610fef826111cc565b60008060006060848603121561130757600080fd5b611310846111cc565b925061131e602085016111cc565b929592945050506040919091013590565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff8616815273ffffffffffffffffffffffffffffffffffffffff851660208201528360408201526080606082015260006113ca60808301848661132f565b979650505050505050565b8381526040602082015260006113ef60408301848661132f565b95945050505050565b60006020828403121561140a57600080fd5b81518015158114610fef57600080fd5b6000825160005b8181101561143b5760208186018101518583015201611421565b50600092019182525091905056fea26469706673582212202f3991d39315b7c0e5ef6fd88336a0f791f8e1cce0a70cb66f2c4c9404215ae364736f6c634300081a00338619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a", } // ERC20CustodyABI is the input ABI used to generate the binding from. diff --git a/v2/pkg/erc20custody.t.sol/erc20custodytest.go b/v2/pkg/erc20custody.t.sol/erc20custodytest.go index 1ed1aed2..b1edfa90 100644 --- a/v2/pkg/erc20custody.t.sol/erc20custodytest.go +++ b/v2/pkg/erc20custody.t.sol/erc20custodytest.go @@ -50,7 +50,7 @@ type StdInvariantFuzzSelector struct { // ERC20CustodyTestMetaData contains all meta data concerning the ERC20CustodyTest contract. var ERC20CustodyTestMetaData = &bind.MetaData{ ABI: "[{\"type\":\"function\",\"name\":\"ASSET_HANDLER_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"IS_TEST\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"PAUSER_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"TSS_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"WHITELISTER_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"WITHDRAWER_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeArtifacts\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedArtifacts_\",\"type\":\"string[]\",\"internalType\":\"string[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeContracts\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedContracts_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeSelectors\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedSelectors_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzSelector[]\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"selectors\",\"type\":\"bytes4[]\",\"internalType\":\"bytes4[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeSenders\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedSenders_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"failed\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"setUp\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"targetArtifactSelectors\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedArtifactSelectors_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzArtifactSelector[]\",\"components\":[{\"name\":\"artifact\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"selectors\",\"type\":\"bytes4[]\",\"internalType\":\"bytes4[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetArtifacts\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedArtifacts_\",\"type\":\"string[]\",\"internalType\":\"string[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetContracts\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedContracts_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetInterfaces\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedInterfaces_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzInterface[]\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"artifacts\",\"type\":\"string[]\",\"internalType\":\"string[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetSelectors\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedSelectors_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzSelector[]\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"selectors\",\"type\":\"bytes4[]\",\"internalType\":\"bytes4[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetSenders\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedSenders_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"testForwardCallToReceiveERC20PartialThroughCustody\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testForwardCallToReceiveERC20PartialThroughCustodyFailsIfAmountIs0\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testForwardCallToReceiveERC20PartialThroughCustodyFailsIfSenderIsNotWithdrawer\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testForwardCallToReceiveERC20ThroughCustody\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testForwardCallToReceiveERC20ThroughCustodyFailsIfAmountIs0\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testForwardCallToReceiveERC20ThroughCustodyFailsIfReceiverIsZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testForwardCallToReceiveERC20ThroughCustodyFailsIfSenderIsNotWithdrawer\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testForwardCallToReceiveERC20ThroughCustodyTogglePause\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testForwardCallToReceiveNoParamsThroughCustody\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testNewCustodyFailsIfAddressesAreZero\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testUnwhitelist\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testUnwhitelistFailsIfSenderIsNotWhitelister\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWhitelist\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWhitelistFailsIfSenderIsNotWhitelister\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawAndCallFailsIfTokenIsNotWhitelisted\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawAndRevertFailsIfTokenIsNotWhitelisted\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawAndRevertThroughCustody\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawAndRevertThroughCustodyFailsIfAmountIs0\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawAndRevertThroughCustodyFailsIfReceiverIsZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawAndRevertThroughCustodyFailsIfSenderIsNotWithdrawer\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawFailsIfTokenIsNotWhitelisted\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawThroughCustody\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawThroughCustodyFailsIfSenderIsNotWithdrawer\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"event\",\"name\":\"Call\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"receiver\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Deposit\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"receiver\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"asset\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Executed\",\"inputs\":[{\"name\":\"destination\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ExecutedWithERC20\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedERC20\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"token\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"destination\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedNoParams\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedNonPayable\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"strs\",\"type\":\"string[]\",\"indexed\":false,\"internalType\":\"string[]\"},{\"name\":\"nums\",\"type\":\"uint256[]\",\"indexed\":false,\"internalType\":\"uint256[]\"},{\"name\":\"flag\",\"type\":\"bool\",\"indexed\":false,\"internalType\":\"bool\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedPayable\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"str\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"num\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"flag\",\"type\":\"bool\",\"indexed\":false,\"internalType\":\"bool\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedRevert\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Reverted\",\"inputs\":[{\"name\":\"destination\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RevertedWithERC20\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Unwhitelisted\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Whitelisted\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Withdraw\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"WithdrawAndCall\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"WithdrawAndRevert\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log\",\"inputs\":[{\"name\":\"\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_address\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_array\",\"inputs\":[{\"name\":\"val\",\"type\":\"uint256[]\",\"indexed\":false,\"internalType\":\"uint256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_array\",\"inputs\":[{\"name\":\"val\",\"type\":\"int256[]\",\"indexed\":false,\"internalType\":\"int256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_array\",\"inputs\":[{\"name\":\"val\",\"type\":\"address[]\",\"indexed\":false,\"internalType\":\"address[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_bytes\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_bytes32\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_int\",\"inputs\":[{\"name\":\"\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_address\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_array\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"uint256[]\",\"indexed\":false,\"internalType\":\"uint256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_array\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"int256[]\",\"indexed\":false,\"internalType\":\"int256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_array\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"address[]\",\"indexed\":false,\"internalType\":\"address[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_bytes\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_bytes32\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_decimal_int\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"},{\"name\":\"decimals\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_decimal_uint\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"decimals\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_int\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_string\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_uint\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_string\",\"inputs\":[{\"name\":\"\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_uint\",\"inputs\":[{\"name\":\"\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"logs\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"AccessControlUnauthorizedAccount\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"neededRole\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"type\":\"error\",\"name\":\"ApprovalFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ConnectorInitialized\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"CustodyInitialized\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"DepositFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"EnforcedPause\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ExecutionFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientERC20Amount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientETHAmount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NotWhitelisted\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NotWhitelistedInCustody\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZeroAddress\",\"inputs\":[]}]", - Bin: "0x6080604052600c8054600160ff199182168117909255601f80549091169091179055348015602c57600080fd5b50620102bf806200003e6000396000f3fe608060405234801561001057600080fd5b50600436106102d35760003560e01c806385226c8111610186578063c713f827116100e3578063f0c8e7e011610097578063fa7626d411610071578063fa7626d41461050d578063fb176c121461051a578063fe8e5f1b1461052257600080fd5b8063f0c8e7e0146104f5578063f4221f08146104fd578063fa2a70741461050557600080fd5b8063e20c9f71116100c8578063e20c9f71146104be578063e63ab1e9146104c6578063eb1ce7f9146104ed57600080fd5b8063c713f827146104ae578063cbd57e2f146104b657600080fd5b8063a4943deb1161013a578063b0464fdc1161011f578063b0464fdc14610486578063b5508aa91461048e578063ba414fa61461049657600080fd5b8063a4943deb14610457578063a783c7891461045f57600080fd5b8063916a17c61161016b578063916a17c6146104325780639918c1c214610447578063a3f9d0e01461044f57600080fd5b806385226c81146103f657806385f438c11461040b57600080fd5b80633f7286f41161023457806366d9a9a0116101e857806371149c94116101cd57806371149c94146103de5780637e91c50f146103e657806382c52992146103ee57600080fd5b806366d9a9a0146103c15780636a621854146103d657600080fd5b806351ecdf3c1161021957806351ecdf3c1461035d578063570618e1146103655780635d62c8601461039a57600080fd5b80633f7286f41461034d5780634b5838d21461035557600080fd5b80632ade38801161028b5780633e5e3c23116102705780633e5e3c23146103355780633e73ecb41461033d5780633ee929231461034557600080fd5b80632ade3880146103185780632be6a1621461032d57600080fd5b80631779672f116102bc5780631779672f146102ea5780631ed7831c146102f2578063284cb9291461031057600080fd5b80630a9254e4146102d85780630eee72a9146102e2575b600080fd5b6102e061052a565b005b6102e0610e69565b6102e061110e565b6102fa611278565b604051610307919061a5a3565b60405180910390f35b6102e06112da565b6103206115d7565b604051610307919061a63f565b6102e0611719565b6102fa6118db565b6102e061193b565b6102e0611eca565b6102fa611f99565b6102e0611ff9565b6102e0612367565b61038c7f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a81565b604051908152602001610307565b61038c7f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b981565b6103c9612553565b604051610307919061a7a5565b6102e06126d5565b6102e06127a1565b6102e0612ff7565b6102e061319a565b6103fe613428565b604051610307919061a843565b61038c7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b61043a6134f8565b604051610307919061a8ba565b6102e06135f3565b6102e0613921565b6102e0613f5b565b61038c7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb81565b61043a614180565b6103fe61427b565b61049e61434b565b6040519015158152602001610307565b6102e061441f565b6102e061510d565b6102fa6151ce565b61038c7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b6102e061522e565b6102e0615353565b6102e0615515565b6102e0615798565b601f5461049e9060ff1681565b6102e0615a8f565b6102e061613f565b602680547fffffffffffffffffffffffff000000000000000000000000000000000000000090811630179091556027805482166112341790556028805490911661567817905560405161057c9061a4b2565b60408082526004908201527f746573740000000000000000000000000000000000000000000000000000000060608201526080602082018190526003908201527f54544b000000000000000000000000000000000000000000000000000000000060a082015260c001604051809103906000f080158015610601573d6000803e3d6000fd5b50602480547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03929092169190911790556040516106469061a4b2565b604080825260049082018190527f7a6574610000000000000000000000000000000000000000000000000000000060608301526080602083018190528201527f5a4554410000000000000000000000000000000000000000000000000000000060a082015260c001604051809103906000f0801580156106ca573d6000803e3d6000fd5b50602580547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03928316908117909155604080518082018252600e81527f4761746577617945564d2e736f6c0000000000000000000000000000000000006020820152602854602654925190851660248201526044810193909352921660648201526107b9919060840160408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fc0c53b8b00000000000000000000000000000000000000000000000000000000179052616346565b601f80547fffffffffffffffffffffff0000000000000000000000000000000000000000ff166101006001600160a01b0393841681029190911791829055602080549190920483167fffffffffffffffffffffffff000000000000000000000000000000000000000090911681179091556028546026546040519293918216929116906108459061a4c0565b6001600160a01b03938416815291831660208301529091166040820152606001604051809103906000f080158015610881573d6000803e3d6000fd5b50602280547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392831617905560205460255460285460265460405193851694928316939183169216906108dc9061a4ce565b6001600160a01b039485168152928416602084015290831660408301529091166060820152608001604051809103906000f080158015610920573d6000803e3d6000fd5b50602380547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03929092169190911790556040516109659061a4dc565b604051809103906000f080158015610981573d6000803e3d6000fd5b50602180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039283161790556028546040517fc88a5e6d00000000000000000000000000000000000000000000000000000000815291166004820152670de0b6b3a76400006024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c88a5e6d90604401600060405180830381600087803b158015610a2d57600080fd5b505af1158015610a41573d6000803e3d6000fd5b50506026546040517f06447d560000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506306447d569150602401600060405180830381600087803b158015610ab757600080fd5b505af1158015610acb573d6000803e3d6000fd5b50506020546022546040517fae7a3a6f0000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201529116925063ae7a3a6f9150602401600060405180830381600087803b158015610b3157600080fd5b505af1158015610b45573d6000803e3d6000fd5b50506020546023546040517f10188aef0000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152911692506310188aef9150602401600060405180830381600087803b158015610bab57600080fd5b505af1158015610bbf573d6000803e3d6000fd5b5050602254602480546040517f9b19251a0000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015292169350639b19251a925001600060405180830381600087803b158015610c2457600080fd5b505af1158015610c38573d6000803e3d6000fd5b505050507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b03166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610c9a57600080fd5b505af1158015610cae573d6000803e3d6000fd5b5050602480546026546040517f40c10f190000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620f4240938101939093521692506340c10f199150604401600060405180830381600087803b158015610d1f57600080fd5b505af1158015610d33573d6000803e3d6000fd5b5050602480546022546040517fa9059cbb0000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201526207a1209381019390935216925063a9059cbb91506044016020604051808303816000875af1158015610da9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dcd919061a951565b506028546040517fc88a5e6d0000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152670de0b6b3a76400006024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c88a5e6d906044015b600060405180830381600087803b158015610e4f57600080fd5b505af1158015610e63573d6000803e3d6000fd5b50505050565b60248054602754604051620186a09381018490526001600160a01b0392831660448201529116606482015260009060840160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fc513169100000000000000000000000000000000000000000000000000000000179052602654905163ca669fa760e01b81526001600160a01b039091166004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa7906024015b600060405180830381600087803b158015610f4e57600080fd5b505af1158015610f62573d6000803e3d6000fd5b5050602654604080516001600160a01b0390921660248301527f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e460448084019190915281518084039091018152606490920181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb3925061104d919060040161a973565b600060405180830381600087803b15801561106757600080fd5b505af115801561107b573d6000803e3d6000fd5b50506022546024546021546040517f21fc65f20000000000000000000000000000000000000000000000000000000081526001600160a01b0393841695506321fc65f294506110d89392831692909116908790879060040161a986565b600060405180830381600087803b1580156110f257600080fd5b505af1158015611106573d6000803e3d6000fd5b505050505050565b6024805460275460405160009381018490526001600160a01b03928316604482015291166064820152819060840160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f357fc5a200000000000000000000000000000000000000000000000000000000179052602854905163ca669fa760e01b81526001600160a01b039091166004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa7906024015b600060405180830381600087803b1580156111f057600080fd5b505af1158015611204573d6000803e3d6000fd5b50506040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527f951e19ed000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e0915060240161104d565b606060168054806020026020016040519081016040528092919081815260200182805480156112d057602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116112b2575b5050505050905090565b6022546025546040517fd936547e0000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152600092919091169063d936547e90602401602060405180830381865afa158015611344573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611368919061a951565b9050611375600082616365565b6022546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b15801561140357600080fd5b505af1158015611417573d6000803e3d6000fd5b50506025546040516001600160a01b0390911692507faab7954e9d246b167ef88aeddad35209ca2489d95a8aeb59e288d9b19fae5a549150600090a260265460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156114ac57600080fd5b505af11580156114c0573d6000803e3d6000fd5b50506022546025546040517f9b19251a0000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015291169250639b19251a9150602401600060405180830381600087803b15801561152657600080fd5b505af115801561153a573d6000803e3d6000fd5b50506022546025546040517fd936547e0000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201529116925063d936547e9150602401602060405180830381865afa1580156115a3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115c7919061a951565b90506115d4600182616365565b50565b6060601e805480602002602001604051908101604052809291908181526020016000905b8282101561171057600084815260208082206040805180820182526002870290920180546001600160a01b03168352600181018054835181870281018701909452808452939591948681019491929084015b828210156116f957838290600052602060002001805461166c9061a9bd565b80601f01602080910402602001604051908101604052809291908181526020018280546116989061a9bd565b80156116e55780601f106116ba576101008083540402835291602001916116e5565b820191906000526020600020905b8154815290600101906020018083116116c857829003601f168201915b50505050508152602001906001019061164d565b5050505081525050815260200190600101906115fb565b50505050905090565b60405163ca669fa760e01b81526101236004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561176757600080fd5b505af115801561177b573d6000803e3d6000fd5b50506040805161012360248201527f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a60448083019190915282518083039091018152606490910182526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f0000000000000000000000000000000000000000000000000000000017905290517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb3925061185c919060040161a973565b600060405180830381600087803b15801561187657600080fd5b505af115801561188a573d6000803e3d6000fd5b50506022546025546040517f9b19251a0000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015291169250639b19251a9150602401610e35565b606060188054806020026020016040519081016040528092919081815260200182805480156112d0576020028201919060005260206000209081546001600160a01b031681526001909101906020018083116112b2575050505050905090565b602480546027546040516370a0823160e01b81526001600160a01b039182166004820152620186a09360009392909216916370a082319101602060405180830381865afa158015611990573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119b4919061aa0a565b90506119c18160006163e7565b602480546022546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa158015611a11573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a35919061aa0a565b6027546040516001600160a01b0390911660248201526044810185905290915060009060640160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb0000000000000000000000000000000000000000000000000000000017905260245490517ff30c7ba3000000000000000000000000000000000000000000000000000000008152919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f30c7ba391611b18916001600160a01b039190911690600090869060040161aa23565b600060405180830381600087803b158015611b3257600080fd5b505af1158015611b46573d6000803e3d6000fd5b50506022546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b158015611bd857600080fd5b505af1158015611bec573d6000803e3d6000fd5b50506027546024546040518881526001600160a01b039283169450911691507f9b1bfa7fa9ee420a16e124f794c35ac9f90472acc99140eb2f6447c714cad8eb9060200160405180910390a360285460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015611c9157600080fd5b505af1158015611ca5573d6000803e3d6000fd5b5050602254602480546027546040517fd9caed120000000000000000000000000000000000000000000000000000000081526001600160a01b0392831660048201529082169281019290925260448201899052909116925063d9caed129150606401600060405180830381600087803b158015611d2157600080fd5b505af1158015611d35573d6000803e3d6000fd5b5050602480546027546040516370a0823160e01b81526001600160a01b03918216600482015260009550911692506370a082319101602060405180830381865afa158015611d87573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611dab919061aa0a565b9050611db781866163e7565b602480546022546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa158015611e07573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e2b919061aa0a565b9050611e4081611e3b888761aa7a565b6163e7565b602480546020546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa158015611e90573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611eb4919061aa0a565b9050611ec18160006163e7565b50505050505050565b60248054602754604051620186a09381018490526001600160a01b0392831660448201529116606482015260009060840160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f357fc5a200000000000000000000000000000000000000000000000000000000179052602654905163ca669fa760e01b81526001600160a01b039091166004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401610f34565b606060178054806020026020016040519081016040528092919081815260200182805480156112d0576020028201919060005260206000209081546001600160a01b031681526001909101906020018083116112b2575050505050905090565b6040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b15801561207e57600080fd5b505af1158015612092573d6000803e3d6000fd5b5050602854602654604051600094508493506001600160a01b0392831692909116906120bd9061a4c0565b6001600160a01b03938416815291831660208301529091166040820152606001604051809103906000f0801580156120f9573d6000803e3d6000fd5b506040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fd92e233d000000000000000000000000000000000000000000000000000000006004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b15801561218257600080fd5b505af1158015612196573d6000803e3d6000fd5b50506020546026546040516001600160a01b039283169450600093509116906121be9061a4c0565b6001600160a01b03938416815291831660208301529091166040820152606001604051809103906000f0801580156121fa573d6000803e3d6000fd5b506040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fd92e233d000000000000000000000000000000000000000000000000000000006004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b15801561228357600080fd5b505af1158015612297573d6000803e3d6000fd5b50506020546028546040516001600160a01b039283169450911691506000906122bf9061a4c0565b6001600160a01b03938416815291831660208301529091166040820152606001604051809103906000f0801580156122fb573d6000803e3d6000fd5b506020546028546026546040519394506001600160a01b03928316939183169216906123269061a4c0565b6001600160a01b03938416815291831660208301529091166040820152606001604051809103906000f080158015612362573d6000803e3d6000fd5b505050565b6024805460275460405160019381018490526001600160a01b0392831660448201529116606482015260009060840160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f357fc5a200000000000000000000000000000000000000000000000000000000179052602854905163ca669fa760e01b81526001600160a01b039091166004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561244957600080fd5b505af115801561245d573d6000803e3d6000fd5b50506040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b1580156124e657600080fd5b505af11580156124fa573d6000803e3d6000fd5b50506022546024546040517f21fc65f20000000000000000000000000000000000000000000000000000000081526001600160a01b0392831694506321fc65f293506110d892909116906000908790879060040161a986565b6060601b805480602002602001604051908101604052809291908181526020016000905b8282101561171057838290600052602060002090600202016040518060400160405290816000820180546125aa9061a9bd565b80601f01602080910402602001604051908101604052809291908181526020018280546125d69061a9bd565b80156126235780601f106125f857610100808354040283529160200191612623565b820191906000526020600020905b81548152906001019060200180831161260657829003601f168201915b50505050508152602001600182018054806020026020016040519081016040528092919081815260200182805480156126bd57602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168152602001906004019060208260030104928301926001038202915080841161266a5790505b50505050508152505081526020019060010190612577565b6024805460275460405160009381018490526001600160a01b03928316604482015291166064820152819060840160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fc513169100000000000000000000000000000000000000000000000000000000179052602854905163ca669fa760e01b81526001600160a01b039091166004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa7906024016111d6565b6040517f68656c6c6f0000000000000000000000000000000000000000000000000000006020820152620186a09060009060250160408051808303601f1901815290829052602480546021546370a0823160e01b85526001600160a01b0390811660048601529294506000939216916370a082319101602060405180830381865afa158015612834573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612858919061aa0a565b90506128658160006163e7565b602480546022546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa1580156128b5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128d9919061aa0a565b6020546040516001600160a01b0390911660248201526044810186905290915060009060640160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb0000000000000000000000000000000000000000000000000000000017905260245490517ff30c7ba3000000000000000000000000000000000000000000000000000000008152919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f30c7ba3916129bc916001600160a01b039190911690600090869060040161aa23565b600060405180830381600087803b1580156129d657600080fd5b505af11580156129ea573d6000803e3d6000fd5b50506021546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b158015612a7c57600080fd5b505af1158015612a90573d6000803e3d6000fd5b50506020546040517f0d3f65f00e631663aa85c96330b5c7a83bb29af3630c0063776f985edc3037aa9350612ad392506001600160a01b0390911690879061aa8d565b60405180910390a16020546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b158015612b6957600080fd5b505af1158015612b7d573d6000803e3d6000fd5b50506021546024546040516001600160a01b039283169450911691507f723fc7be2448075379e4fdf1e6bf5fead954d2668d2da05dcb44ccfec4beeda790612bc8908990899061aaaf565b60405180910390a36022546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b158015612c5e57600080fd5b505af1158015612c72573d6000803e3d6000fd5b50506021546024546040516001600160a01b039283169450911691507fb9d4efa96044e5f5e03e696fa9ae2ff66911cc27e8a637c3627c75bc5b2241c890612cbd908990899061aaaf565b60405180910390a360285460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015612d1e57600080fd5b505af1158015612d32573d6000803e3d6000fd5b50506022546024546021546040517fc8a023620000000000000000000000000000000000000000000000000000000081526001600160a01b03938416955063c8a023629450612d8f9392831692909116908a908a9060040161a986565b600060405180830381600087803b158015612da957600080fd5b505af1158015612dbd573d6000803e3d6000fd5b5050602480546021546040516370a0823160e01b81526001600160a01b03918216600482015260009550911692506370a0823191015b602060405180830381865afa158015612e10573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e34919061aa0a565b9050612e4081876163e7565b602480546022546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa158015612e90573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612eb4919061aa0a565b9050612ec481611e3b898761aa7a565b602480546020546021546040517fdd62ed3e0000000000000000000000000000000000000000000000000000000081526001600160a01b0392831660048201529082169381019390935260009291169063dd62ed3e90604401602060405180830381865afa158015612f3a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f5e919061aa0a565b9050612f6b8160006163e7565b602480546020546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa158015612fbb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612fdf919061aa0a565b9050612fec8160006163e7565b505050505050505050565b6040517f68656c6c6f000000000000000000000000000000000000000000000000000000602082015260019060009060250160408051808303601f190181529082905260285463ca669fa760e01b83526001600160a01b031660048301529150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561309057600080fd5b505af11580156130a4573d6000803e3d6000fd5b50506040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b15801561312d57600080fd5b505af1158015613141573d6000803e3d6000fd5b50506022546024546040517fc8a023620000000000000000000000000000000000000000000000000000000081526001600160a01b03928316945063c8a0236293506110d892909116906000908790879060040161a986565b6028546040517f06447d560000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906306447d5690602401600060405180830381600087803b15801561320c57600080fd5b505af1158015613220573d6000803e3d6000fd5b5050602254602480546040517f9a5904270000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015292169350639a590427925001600060405180830381600087803b15801561328557600080fd5b505af1158015613299573d6000803e3d6000fd5b50506040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527f584a7938000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b15801561332257600080fd5b505af1158015613336573d6000803e3d6000fd5b5050602254602480546027546040517fd9caed120000000000000000000000000000000000000000000000000000000081526001600160a01b0392831660048201529082169281019290925260016044830152909116925063d9caed129150606401600060405180830381600087803b1580156133b257600080fd5b505af11580156133c6573d6000803e3d6000fd5b505050507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b03166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610e4f57600080fd5b6060601a805480602002602001604051908101604052809291908181526020016000905b8282101561171057838290600052602060002001805461346b9061a9bd565b80601f01602080910402602001604051908101604052809291908181526020018280546134979061a9bd565b80156134e45780601f106134b9576101008083540402835291602001916134e4565b820191906000526020600020905b8154815290600101906020018083116134c757829003601f168201915b50505050508152602001906001019061344c565b6060601d805480602002602001604051908101604052809291908181526020016000905b828210156117105760008481526020908190206040805180820182526002860290920180546001600160a01b031683526001810180548351818702810187019094528084529394919385830193928301828280156135db57602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190600401906020826003010492830192600103820291508084116135885790505b5050505050815250508152602001906001019061351c565b602480546027546040516001938101939093526001600160a01b03918216604484015216606482015260009060840160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f357fc5a20000000000000000000000000000000000000000000000000000000017905260285490517f06447d560000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d906306447d5690602401600060405180830381600087803b1580156136ee57600080fd5b505af1158015613702573d6000803e3d6000fd5b5050602254602480546040517f9a5904270000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015292169350639a590427925001600060405180830381600087803b15801561376757600080fd5b505af115801561377b573d6000803e3d6000fd5b50506040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527f584a7938000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b15801561380457600080fd5b505af1158015613818573d6000803e3d6000fd5b50506022546024546021546040517f21fc65f20000000000000000000000000000000000000000000000000000000081526001600160a01b0393841695506321fc65f29450613876939283169290911690600190879060040161a986565b600060405180830381600087803b15801561389057600080fd5b505af11580156138a4573d6000803e3d6000fd5b505050507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b03166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561390657600080fd5b505af115801561391a573d6000803e3d6000fd5b5050505050565b604080516004808252602480830184526020830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f6ed7016900000000000000000000000000000000000000000000000000000000179052805460275494516370a0823160e01b81526001600160a01b0395861693810193909352620186a0946000939116916370a082319101602060405180830381865afa1580156139cb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906139ef919061aa0a565b90506139fc8160006163e7565b602480546022546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa158015613a4c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a70919061aa0a565b6020546040516001600160a01b0390911660248201526044810186905290915060009060640160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb0000000000000000000000000000000000000000000000000000000017905260245490517ff30c7ba3000000000000000000000000000000000000000000000000000000008152919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f30c7ba391613b53916001600160a01b039190911690600090869060040161aa23565b600060405180830381600087803b158015613b6d57600080fd5b505af1158015613b81573d6000803e3d6000fd5b50506021546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b158015613c1357600080fd5b505af1158015613c27573d6000803e3d6000fd5b5050602080546040516001600160a01b0390911681527fbcaadb46b82a48af60b608f58959ae6b8310d1b0a0d094c2e9ec3208ed39f2a0935001905060405180910390a16022546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b158015613cf957600080fd5b505af1158015613d0d573d6000803e3d6000fd5b50506021546024546040516001600160a01b039283169450911691507f85b5be9cf454e05e0bddf49315178102227c312078eefa3c00294fb4d912ae4e90613d58908990899061aaaf565b60405180910390a360285460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015613db957600080fd5b505af1158015613dcd573d6000803e3d6000fd5b50506022546024546021546040517f21fc65f20000000000000000000000000000000000000000000000000000000081526001600160a01b0393841695506321fc65f29450613e2a9392831692909116908a908a9060040161a986565b600060405180830381600087803b158015613e4457600080fd5b505af1158015613e58573d6000803e3d6000fd5b5050602480546027546040516370a0823160e01b81526001600160a01b03918216600482015260009550911692506370a082319101602060405180830381865afa158015613eaa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613ece919061aa0a565b9050613edb8160006163e7565b602480546022546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa158015613f2b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613f4f919061aa0a565b9050612ec481856163e7565b6040517f68656c6c6f0000000000000000000000000000000000000000000000000000006020820152620186a09060009060250160408051808303601f190181529082905260265463ca669fa760e01b83526001600160a01b031660048301529150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015613ff657600080fd5b505af115801561400a573d6000803e3d6000fd5b5050602654604080516001600160a01b0390921660248301527f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e460448084019190915281518084039091018152606490920181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb392506140f5919060040161a973565b600060405180830381600087803b15801561410f57600080fd5b505af1158015614123573d6000803e3d6000fd5b50506022546024546021546040517fc8a023620000000000000000000000000000000000000000000000000000000081526001600160a01b03938416955063c8a0236294506110d89392831692909116908790879060040161a986565b6060601c805480602002602001604051908101604052809291908181526020016000905b828210156117105760008481526020908190206040805180820182526002860290920180546001600160a01b0316835260018101805483518187028101870190945280845293949193858301939283018282801561426357602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190600401906020826003010492830192600103820291508084116142105790505b505050505081525050815260200190600101906141a4565b60606019805480602002602001604051908101604052809291908181526020016000905b828210156117105783829060005260206000200180546142be9061a9bd565b80601f01602080910402602001604051908101604052809291908181526020018280546142ea9061a9bd565b80156143375780601f1061430c57610100808354040283529160200191614337565b820191906000526020600020905b81548152906001019060200180831161431a57829003601f168201915b50505050508152602001906001019061429f565b60085460009060ff1615614363575060085460ff1690565b6040517f667f9d70000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d600482018190527f6661696c65640000000000000000000000000000000000000000000000000000602483015260009163667f9d7090604401602060405180830381865afa1580156143f4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614418919061aa0a565b1415905090565b60285460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561447857600080fd5b505af115801561448c573d6000803e3d6000fd5b5050602854604080516001600160a01b0390921660248301527f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a60448084019190915281518084039091018152606490920181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb39250614577919060040161a973565b600060405180830381600087803b15801561459157600080fd5b505af11580156145a5573d6000803e3d6000fd5b50505050602260009054906101000a90046001600160a01b03166001600160a01b0316638456cb596040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156145f957600080fd5b505af115801561460d573d6000803e3d6000fd5b505060285460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b15801561466a57600080fd5b505af115801561467e573d6000803e3d6000fd5b5050602854604080516001600160a01b0390921660248301527f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a60448084019190915281518084039091018152606490920181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb39250614769919060040161a973565b600060405180830381600087803b15801561478357600080fd5b505af1158015614797573d6000803e3d6000fd5b50505050602060009054906101000a90046001600160a01b03166001600160a01b0316633f4ba83a6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156147eb57600080fd5b505af11580156147ff573d6000803e3d6000fd5b505060265460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b15801561485c57600080fd5b505af1158015614870573d6000803e3d6000fd5b50505050602260009054906101000a90046001600160a01b03166001600160a01b0316638456cb596040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156148c457600080fd5b505af11580156148d8573d6000803e3d6000fd5b505060248054602754604051620186a09381018490526001600160a01b039283166044820152911660648201529092506000915060840160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f357fc5a200000000000000000000000000000000000000000000000000000000179052517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fd93c0665000000000000000000000000000000000000000000000000000000006004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b1580156149ed57600080fd5b505af1158015614a01573d6000803e3d6000fd5b505060285460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b158015614a5e57600080fd5b505af1158015614a72573d6000803e3d6000fd5b50506022546024546021546040517f21fc65f20000000000000000000000000000000000000000000000000000000081526001600160a01b0393841695506321fc65f29450614acf9392831692909116908790879060040161a986565b600060405180830381600087803b158015614ae957600080fd5b505af1158015614afd573d6000803e3d6000fd5b505060265460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b158015614b5a57600080fd5b505af1158015614b6e573d6000803e3d6000fd5b50505050602260009054906101000a90046001600160a01b03166001600160a01b0316633f4ba83a6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015614bc257600080fd5b505af1158015614bd6573d6000803e3d6000fd5b5050602480546027546040516370a0823160e01b81526001600160a01b03918216600482015260009550911692506370a0823191015b602060405180830381865afa158015614c29573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614c4d919061aa0a565b9050614c5a8160006163e7565b602480546022546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa158015614caa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614cce919061aa0a565b6020546040516001600160a01b0390911660248201526044810186905290915060009060640160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb0000000000000000000000000000000000000000000000000000000017905260245490517ff30c7ba3000000000000000000000000000000000000000000000000000000008152919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f30c7ba391614db1916001600160a01b039190911690600090869060040161aa23565b600060405180830381600087803b158015614dcb57600080fd5b505af1158015614ddf573d6000803e3d6000fd5b50506021546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b158015614e7157600080fd5b505af1158015614e85573d6000803e3d6000fd5b505060208054602454602754604080516001600160a01b0394851681529485018c905291831684830152919091166060830152517f2b58128f24a9f59127cc5b5430d70542b22220f2d9adaa86e442b816ab98af609350908190036080019150a16022546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b158015614f7457600080fd5b505af1158015614f88573d6000803e3d6000fd5b50506021546024546040516001600160a01b039283169450911691507f85b5be9cf454e05e0bddf49315178102227c312078eefa3c00294fb4d912ae4e90614fd3908990899061aaaf565b60405180910390a360285460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561503457600080fd5b505af1158015615048573d6000803e3d6000fd5b50506022546024546021546040517f21fc65f20000000000000000000000000000000000000000000000000000000081526001600160a01b0393841695506321fc65f294506150a59392831692909116908a908a9060040161a986565b600060405180830381600087803b1580156150bf57600080fd5b505af11580156150d3573d6000803e3d6000fd5b5050602480546027546040516370a0823160e01b81526001600160a01b03918216600482015260009550911692506370a082319101612df3565b60248054602754604051620186a09381018490526001600160a01b0392831660448201529116606482015260009060840160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f357fc5a2000000000000000000000000000000000000000000000000000000001790526024805460275492516370a0823160e01b81526001600160a01b0393841660048201529394506000939216916370a082319101614c0c565b606060158054806020026020016040519081016040528092919081815260200182805480156112d0576020028201919060005260206000209081546001600160a01b031681526001909101906020018083116112b2575050505050905090565b600080604051602001615264907f68656c6c6f000000000000000000000000000000000000000000000000000000815260050190565b60408051808303601f190181529082905260285463ca669fa760e01b83526001600160a01b031660048301529150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156152cb57600080fd5b505af11580156152df573d6000803e3d6000fd5b50506040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527f951e19ed000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e091506024016140f5565b60405163ca669fa760e01b81526101236004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156153a157600080fd5b505af11580156153b5573d6000803e3d6000fd5b50506040805161012360248201527f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a60448083019190915282518083039091018152606490910182526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f0000000000000000000000000000000000000000000000000000000017905290517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb39250615496919060040161a973565b600060405180830381600087803b1580156154b057600080fd5b505af11580156154c4573d6000803e3d6000fd5b50506022546025546040517f9a5904270000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015291169250639a5904279150602401610e35565b602480546027546040516001938101939093526001600160a01b03918216604484015216606482015260009060840160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f357fc5a20000000000000000000000000000000000000000000000000000000017905260285490517f06447d560000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d906306447d5690602401600060405180830381600087803b15801561561057600080fd5b505af1158015615624573d6000803e3d6000fd5b5050602254602480546040517f9a5904270000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015292169350639a590427925001600060405180830381600087803b15801561568957600080fd5b505af115801561569d573d6000803e3d6000fd5b50506040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527f584a7938000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b15801561572657600080fd5b505af115801561573a573d6000803e3d6000fd5b50506022546024546021546040517fc8a023620000000000000000000000000000000000000000000000000000000081526001600160a01b03938416955063c8a023629450613876939283169290911690600190879060040161a986565b602254602480546040517fd936547e0000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152600093919091169163d936547e9101602060405180830381865afa158015615801573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190615825919061a951565b9050615832600182616365565b6022546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b1580156158c057600080fd5b505af11580156158d4573d6000803e3d6000fd5b50506024546040516001600160a01b0390911692507f51085ddf9ebdded84b76e829eb58c4078e4b5bdf97d9a94723f336039da467919150600090a260265460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561596957600080fd5b505af115801561597d573d6000803e3d6000fd5b5050602254602480546040517f9a5904270000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015292169350639a590427925001600060405180830381600087803b1580156159e257600080fd5b505af11580156159f6573d6000803e3d6000fd5b5050602254602480546040517fd936547e0000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201529216935063d936547e925001602060405180830381865afa158015615a5e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190615a82919061a951565b90506115d4600082616365565b60248054602754604051620186a09381018490526001600160a01b0392831660448201529116606482015260009060840160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fc5131691000000000000000000000000000000000000000000000000000000001790526024805460275492516370a0823160e01b81526001600160a01b0393841660048201529394506000939216916370a082319101602060405180830381865afa158015615b68573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190615b8c919061aa0a565b9050615b998160006163e7565b602480546022546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa158015615be9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190615c0d919061aa0a565b6020546040516001600160a01b0390911660248201526044810186905290915060009060640160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb0000000000000000000000000000000000000000000000000000000017905260245490517ff30c7ba3000000000000000000000000000000000000000000000000000000008152919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f30c7ba391615cf0916001600160a01b039190911690600090869060040161aa23565b600060405180830381600087803b158015615d0a57600080fd5b505af1158015615d1e573d6000803e3d6000fd5b50506021546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b158015615db057600080fd5b505af1158015615dc4573d6000803e3d6000fd5b50506020547f2b58128f24a9f59127cc5b5430d70542b22220f2d9adaa86e442b816ab98af6092506001600160a01b03169050615e0260028861aac8565b602454602754604080516001600160a01b03958616815260208101949094529184168383015292909216606082015290519081900360800190a16022546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b158015615eca57600080fd5b505af1158015615ede573d6000803e3d6000fd5b50506021546024546040516001600160a01b039283169450911691507f85b5be9cf454e05e0bddf49315178102227c312078eefa3c00294fb4d912ae4e90615f29908990899061aaaf565b60405180910390a360285460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015615f8a57600080fd5b505af1158015615f9e573d6000803e3d6000fd5b50506022546024546021546040517f21fc65f20000000000000000000000000000000000000000000000000000000081526001600160a01b0393841695506321fc65f29450615ffb9392831692909116908a908a9060040161a986565b600060405180830381600087803b15801561601557600080fd5b505af1158015616029573d6000803e3d6000fd5b5050602480546027546040516370a0823160e01b81526001600160a01b03918216600482015260009550911692506370a082319101602060405180830381865afa15801561607b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061609f919061aa0a565b90506160b081611e3b60028961aac8565b602480546022546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa158015616100573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190616124919061aa0a565b9050612ec48161613560028a61aac8565b611e3b908761aa7a565b60265460405163ca669fa760e01b81526001600160a01b039091166004820152620186a090737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561619d57600080fd5b505af11580156161b1573d6000803e3d6000fd5b5050602654604080516001600160a01b0390921660248301527f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e460448084019190915281518084039091018152606490920181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb3925061629c919060040161a973565b600060405180830381600087803b1580156162b657600080fd5b505af11580156162ca573d6000803e3d6000fd5b5050602254602480546027546040517fd9caed120000000000000000000000000000000000000000000000000000000081526001600160a01b0392831660048201529082169281019290925260448201869052909116925063d9caed129150606401600060405180830381600087803b15801561390657600080fd5b600061635061a4ea565b61635b84848361643f565b9150505b92915050565b6040517ff7fe347700000000000000000000000000000000000000000000000000000000815282151560048201528115156024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063f7fe3477906044015b60006040518083038186803b1580156163d357600080fd5b505afa158015611106573d6000803e3d6000fd5b6040517f98296c540000000000000000000000000000000000000000000000000000000081526004810183905260248101829052737109709ecfa91a80626ff3989d68f67f5b1dd12d906398296c54906044016163bb565b60008061644c85846164ba565b90506164af6040518060400160405280601d81526020017f4552433139363750726f78792e736f6c3a4552433139363750726f7879000000815250828660405160200161649a92919061aa8d565b604051602081830303815290604052856164c6565b9150505b9392505050565b60006164b383836164f4565b60c081015151600090156164ea576164e384848460c0015161650f565b90506164b3565b6164e384846166b5565b600061650083836167a0565b6164b3838360200151846164c6565b60008061651a6167b0565b905060006165288683616883565b9050600061653f8260600151836020015185616d29565b9050600061654f83838989616f3b565b9050600061655c82617db8565b602081015181519192509060030b156165cf5789826040015160405160200161658692919061ab03565b60408051601f19818403018152908290527f08c379a00000000000000000000000000000000000000000000000000000000082526165c69160040161a973565b60405180910390fd5b60006166126040518060400160405280601581526020017f4465706c6f79656420746f20616464726573733a200000000000000000000000815250836001617f87565b6040517fc6ce059d000000000000000000000000000000000000000000000000000000008152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c6ce059d9061666590849060040161a973565b602060405180830381865afa158015616682573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906166a6919061ab84565b9b9a5050505050505050505050565b6040517f8d1cc9250000000000000000000000000000000000000000000000000000000081526000908190737109709ecfa91a80626ff3989d68f67f5b1dd12d90638d1cc9259061670a90879060040161a973565b600060405180830381865afa158015616727573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261674f919081019061ac95565b9050600061677d828560405160200161676992919061acca565b604051602081830303815290604052618187565b90506001600160a01b03811661635b57848460405160200161658692919061acf9565b6167ac8282600061819a565b5050565b604080518082018252600381527f6f75740000000000000000000000000000000000000000000000000000000000602082015290517fd145736c000000000000000000000000000000000000000000000000000000008152606091737109709ecfa91a80626ff3989d68f67f5b1dd12d91829063d145736c9061683790849060040161ada4565b600060405180830381865afa158015616854573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261687c919081019061adeb565b9250505090565b6168b56040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b6000737109709ecfa91a80626ff3989d68f67f5b1dd12d90506169006040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b6169098561829d565b6020820152600061691986618682565b90506000836001600160a01b031663d930a0e66040518163ffffffff1660e01b8152600401600060405180830381865afa15801561695b573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052616983919081019061adeb565b8683856020015160405160200161699d949392919061ae34565b60408051601f19818403018152908290527f60f9bb1100000000000000000000000000000000000000000000000000000000825291506000906001600160a01b038616906360f9bb11906169f590859060040161a973565b600060405180830381865afa158015616a12573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052616a3a919081019061adeb565b6040517fdb4235f60000000000000000000000000000000000000000000000000000000081529091506001600160a01b0386169063db4235f690616a8290849060040161af38565b602060405180830381865afa158015616a9f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190616ac3919061a951565b616ad85781604051602001616586919061af8a565b6040517f49c4fac80000000000000000000000000000000000000000000000000000000081526001600160a01b038616906349c4fac890616b1d90849060040161b01c565b600060405180830381865afa158015616b3a573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052616b62919081019061adeb565b84526040517fdb4235f60000000000000000000000000000000000000000000000000000000081526001600160a01b0386169063db4235f690616ba990849060040161b06e565b602060405180830381865afa158015616bc6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190616bea919061a951565b15616c7f576040517f49c4fac80000000000000000000000000000000000000000000000000000000081526001600160a01b038616906349c4fac890616c3490849060040161b06e565b600060405180830381865afa158015616c51573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052616c79919081019061adeb565b60408501525b846001600160a01b03166349c4fac8828660000151604051602001616ca4919061b0c0565b6040516020818303038152906040526040518363ffffffff1660e01b8152600401616cd092919061b12c565b600060405180830381865afa158015616ced573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052616d15919081019061adeb565b606085015250608083015250949350505050565b60408051600480825260a0820190925260609160009190816020015b6060815260200190600190039081616d455790505090506040518060400160405280600481526020017f677265700000000000000000000000000000000000000000000000000000000081525081600081518110616da557616da561b151565b60200260200101819052506040518060400160405280600381526020017f2d726c000000000000000000000000000000000000000000000000000000000081525081600181518110616df957616df961b151565b602002602001018190525084604051602001616e15919061b180565b60405160208183030381529060405281600281518110616e3757616e3761b151565b602002602001018190525082604051602001616e53919061b1ec565b60405160208183030381529060405281600381518110616e7557616e7561b151565b60200260200101819052506000616e8b82617db8565b602080820151604080518082018252600581527f2e6a736f6e0000000000000000000000000000000000000000000000000000008185019081528251808401845260008082529086015282518084019093529051825292810192909252919250616f1c9060408051808201825260008082526020918201528151808301909252845182528085019082015290618905565b616f315785604051602001616586919061b22d565b9695505050505050565b60a0810151604080518082018252600080825260209182015281518083019092528251808352928101910152606090737109709ecfa91a80626ff3989d68f67f5b1dd12d9015616f8b565b511590565b6170ff57826020015115617047576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605860248201527f54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f742060448201527f62652075736564207768656e207468652060736b6970566572696679536f757260648201527f6365436f646560206f7074696f6e206973206074727565600000000000000000608482015260a4016165c6565b8260c00151156170ff576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605360248201527f54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f742060448201527f62652075736564207768656e207468652060736b69704c6963656e736554797060648201527f6560206f7074696f6e2069732060747275656000000000000000000000000000608482015260a4016165c6565b6040805160ff8082526120008201909252600091816020015b606081526020019060019003908161711857905050905060006040518060400160405280600381526020017f6e707800000000000000000000000000000000000000000000000000000000008152508282806171739061b2be565b935060ff16815181106171885761718861b151565b60200260200101819052506040518060400160405280600d81526020017f302e302e312d616c7068612e37000000000000000000000000000000000000008152506040516020016171d9919061b2dd565b6040516020818303038152906040528282806171f49061b2be565b935060ff16815181106172095761720961b151565b60200260200101819052506040518060400160405280600681526020017f6465706c6f7900000000000000000000000000000000000000000000000000008152508282806172569061b2be565b935060ff168151811061726b5761726b61b151565b60200260200101819052506040518060400160405280600e81526020017f2d2d636f6e74726163744e616d650000000000000000000000000000000000008152508282806172b89061b2be565b935060ff16815181106172cd576172cd61b151565b602002602001018190525087602001518282806172e99061b2be565b935060ff16815181106172fe576172fe61b151565b60200260200101819052506040518060400160405280600e81526020017f2d2d636f6e74726163745061746800000000000000000000000000000000000081525082828061734b9061b2be565b935060ff16815181106173605761736061b151565b6020908102919091010152875182826173788161b2be565b935060ff168151811061738d5761738d61b151565b60200260200101819052506040518060400160405280600981526020017f2d2d636861696e496400000000000000000000000000000000000000000000008152508282806173da9061b2be565b935060ff16815181106173ef576173ef61b151565b602002602001018190525061740346618966565b828261740e8161b2be565b935060ff16815181106174235761742361b151565b60200260200101819052506040518060400160405280600f81526020017f2d2d6275696c64496e666f46696c6500000000000000000000000000000000008152508282806174709061b2be565b935060ff16815181106174855761748561b151565b60200260200101819052508682828061749d9061b2be565b935060ff16815181106174b2576174b261b151565b60209081029190910101528551156175d95760408051808201909152601581527f2d2d636f6e7374727563746f7242797465636f64650000000000000000000000602082015282826175038161b2be565b935060ff16815181106175185761751861b151565b60209081029190910101526040517f71aad10d0000000000000000000000000000000000000000000000000000000081526001600160a01b038416906371aad10d9061756890899060040161a973565b600060405180830381865afa158015617585573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526175ad919081019061adeb565b82826175b88161b2be565b935060ff16815181106175cd576175cd61b151565b60200260200101819052505b8460200151156176a95760408051808201909152601281527f2d2d766572696679536f75726365436f64650000000000000000000000000000602082015282826176228161b2be565b935060ff16815181106176375761763761b151565b60200260200101819052506040518060400160405280600581526020017f66616c73650000000000000000000000000000000000000000000000000000008152508282806176849061b2be565b935060ff16815181106176995761769961b151565b6020026020010181905250617870565b6176e1616f868660a0015160408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6177745760408051808201909152600d81527f2d2d6c6963656e73655479706500000000000000000000000000000000000000602082015282826177248161b2be565b935060ff16815181106177395761773961b151565b60200260200101819052508460a00151604051602001617759919061b180565b6040516020818303038152906040528282806176849061b2be565b8460c001511580156177b75750604080890151815180830183526000808252602091820152825180840190935281518352908101908201526177b590511590565b155b156178705760408051808201909152600d81527f2d2d6c6963656e73655479706500000000000000000000000000000000000000602082015282826177fb8161b2be565b935060ff16815181106178105761781061b151565b602002602001018190525061782488618a06565b604051602001617834919061b180565b60405160208183030381529060405282828061784f9061b2be565b935060ff16815181106178645761786461b151565b60200260200101819052505b604080860151815180830183526000808252602091820152825180840190935281518352908101908201526178a490511590565b6179395760408051808201909152600b81527f2d2d72656c617965724964000000000000000000000000000000000000000000602082015282826178e78161b2be565b935060ff16815181106178fc576178fc61b151565b602002602001018190525084604001518282806179189061b2be565b935060ff168151811061792d5761792d61b151565b60200260200101819052505b606085015115617a5a5760408051808201909152600681527f2d2d73616c740000000000000000000000000000000000000000000000000000602082015282826179828161b2be565b935060ff16815181106179975761799761b151565b602090810291909101015260608501516040517fb11a19e800000000000000000000000000000000000000000000000000000000815260048101919091526001600160a01b0384169063b11a19e890602401600060405180830381865afa158015617a06573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052617a2e919081019061adeb565b8282617a398161b2be565b935060ff1681518110617a4e57617a4e61b151565b60200260200101819052505b60e08501515115617b015760408051808201909152600a81527f2d2d6761734c696d69740000000000000000000000000000000000000000000060208201528282617aa48161b2be565b935060ff1681518110617ab957617ab961b151565b6020026020010181905250617ad58560e0015160000151618966565b8282617ae08161b2be565b935060ff1681518110617af557617af561b151565b60200260200101819052505b60e08501516020015115617bab5760408051808201909152600a81527f2d2d67617350726963650000000000000000000000000000000000000000000060208201528282617b4e8161b2be565b935060ff1681518110617b6357617b6361b151565b6020026020010181905250617b7f8560e0015160200151618966565b8282617b8a8161b2be565b935060ff1681518110617b9f57617b9f61b151565b60200260200101819052505b60e08501516040015115617c555760408051808201909152600e81527f2d2d6d617846656550657247617300000000000000000000000000000000000060208201528282617bf88161b2be565b935060ff1681518110617c0d57617c0d61b151565b6020026020010181905250617c298560e0015160400151618966565b8282617c348161b2be565b935060ff1681518110617c4957617c4961b151565b60200260200101819052505b60e08501516060015115617cff5760408051808201909152601681527f2d2d6d61785072696f726974794665655065724761730000000000000000000060208201528282617ca28161b2be565b935060ff1681518110617cb757617cb761b151565b6020026020010181905250617cd38560e0015160600151618966565b8282617cde8161b2be565b935060ff1681518110617cf357617cf361b151565b60200260200101819052505b60008160ff1667ffffffffffffffff811115617d1d57617d1d61abad565b604051908082528060200260200182016040528015617d5057816020015b6060815260200190600190039081617d3b5790505b50905060005b8260ff168160ff161015617da957838160ff1681518110617d7957617d7961b151565b6020026020010151828260ff1681518110617d9657617d9661b151565b6020908102919091010152600101617d56565b5093505050505b949350505050565b617ddf6040518060600160405280600060030b815260200160608152602001606081525090565b60408051808201825260048082527f6261736800000000000000000000000000000000000000000000000000000000602083015291517fd145736c000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d92600091849163d145736c91617e659186910161b348565b600060405180830381865afa158015617e82573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052617eaa919081019061adeb565b90506000617eb886836194f5565b90506000846001600160a01b031663f45c1ce7836040518263ffffffff1660e01b8152600401617ee8919061a843565b6000604051808303816000875af1158015617f07573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052617f2f919081019061b38f565b805190915060030b15801590617f485750602081015151155b8015617f575750604081015151155b15616f315781600081518110617f6f57617f6f61b151565b6020026020010151604051602001616586919061b445565b60606000617fbc8560408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600080825260209182015281518083019092528651825280870190820152909150617ff39082905b9061964a565b156181505760006180708261806a846180646180368a60408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6040805180820182526000808252602091820152815180830190925282518252918201519181019190915290565b90619671565b906196d3565b604080518082018252600181527f0a00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201529091506180d490829061964a565b1561813e57604080518082018252600181527f0a000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261813b905b8290619758565b90505b6181478161977e565b925050506164b3565b821561816957848460405160200161658692919061b631565b50506040805160208101909152600081526164b3565b509392505050565b6000808251602084016000f09392505050565b8160a00151156181a957505050565b60006181b68484846197e7565b905060006181c382617db8565b602081015181519192509060030b15801561825f5750604080518082018252600781527f53554343455353000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261825f90604080518082018252600080825260209182015281518083019092528451825280850190820152617fed565b1561826c57505050505050565b6040820151511561828c578160400151604051602001616586919061b6d8565b80604051602001616586919061b736565b606060006182d28360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600481527f2e736f6c0000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152909150618337905b8290618905565b156183a657604080518082018252600481527f2e736f6c00000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526164b3906183a1908390619d82565b61977e565b604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152618408905b8290619e0c565b6001036184d557604080518082018252600181527f3a000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261846e90618134565b50604080518082018252600181527f3a00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526164b3906183a1905b8390619758565b604080518082018252600581527f2e6a736f6e0000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261853490618330565b1561866b57604080518082018252600181527f2f0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082018190528451808601909552925184528301529061859c908390619ea6565b9050600081600183516185af919061aa7a565b815181106185bf576185bf61b151565b602002602001015190506186626183a16186356040518060400160405280600581526020017f2e6a736f6e00000000000000000000000000000000000000000000000000000081525060408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b60408051808201825260008082526020918201528151808301909252855182528086019082015290619d82565b95945050505050565b82604051602001616586919061b7a1565b50919050565b606060006186b78360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600481527f2e736f6c000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015290915061871990618330565b15618727576164b38161977e565b604080518082018252600181527f3a000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261878690618401565b6001036187f057604080518082018252600181527f3a00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526164b3906183a1906184ce565b604080518082018252600581527f2e6a736f6e0000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261884f90618330565b1561866b57604080518082018252600181527f2f000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201819052845180860190955292518452830152906188b7908390619ea6565b90506001815111156188f35780600282516188d2919061aa7a565b815181106188e2576188e261b151565b602002602001015192505050919050565b5082604051602001616586919061b7a1565b80518251600091111561891a5750600061635f565b815183516020850151600092916189309161b87f565b61893a919061aa7a565b90508260200151810361895157600191505061635f565b82516020840151819020912014905092915050565b6060600061897383619f4b565b600101905060008167ffffffffffffffff8111156189935761899361abad565b6040519080825280601f01601f1916602001820160405280156189bd576020820181803683370190505b5090508181016020015b600019017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a85049450846189c757509392505050565b604081810151815180830183526000808252602091820181905283518085018552835181529282018383015283518085018552600a81527f554e4c4943454e5345440000000000000000000000000000000000000000000081840190815285518087018752838152840192909252845180860190955251845290830152606091618a92905b829061a02d565b15618ad257505060408051808201909152600481527f4e6f6e65000000000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600981527f556e6c6963656e7365000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152618b3190618a8b565b15618b7157505060408051808201909152600981527f556e6c6963656e736500000000000000000000000000000000000000000000006020820152919050565b604080518082018252600381527f4d4954000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152618bd090618a8b565b15618c1057505060408051808201909152600381527f4d495400000000000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f47504c2d322e302d6f6e6c79000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152618c6f90618a8b565b80618cd45750604080518082018252601081527f47504c2d322e302d6f722d6c617465720000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152618cd490618a8b565b15618d1457505060408051808201909152600981527f474e552047504c763200000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f47504c2d332e302d6f6e6c79000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152618d7390618a8b565b80618dd85750604080518082018252601081527f47504c2d332e302d6f722d6c617465720000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152618dd890618a8b565b15618e1857505060408051808201909152600981527f474e552047504c763300000000000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4c47504c2d322e312d6f6e6c790000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152618e7790618a8b565b80618edc5750604080518082018252601181527f4c47504c2d322e312d6f722d6c6174657200000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152618edc90618a8b565b15618f1c57505060408051808201909152600c81527f474e55204c47504c76322e3100000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4c47504c2d332e302d6f6e6c790000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152618f7b90618a8b565b80618fe05750604080518082018252601181527f4c47504c2d332e302d6f722d6c6174657200000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152618fe090618a8b565b1561902057505060408051808201909152600a81527f474e55204c47504c7633000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f4253442d322d436c6175736500000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261907f90618a8b565b156190bf57505060408051808201909152600c81527f4253442d322d436c6175736500000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f4253442d332d436c6175736500000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261911e90618a8b565b1561915e57505060408051808201909152600c81527f4253442d332d436c6175736500000000000000000000000000000000000000006020820152919050565b604080518082018252600781527f4d504c2d322e3000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526191bd90618a8b565b156191fd57505060408051808201909152600781527f4d504c2d322e30000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600781527f4f534c2d332e30000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261925c90618a8b565b1561929c57505060408051808201909152600781527f4f534c2d332e30000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600a81527f4170616368652d322e3000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526192fb90618a8b565b1561933b57505060408051808201909152600a81527f4170616368652d322e30000000000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4147504c2d332e302d6f6e6c79000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261939a90618a8b565b806193ff5750604080518082018252601181527f4147504c2d332e302d6f722d6c61746572000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526193ff90618a8b565b1561943f57505060408051808201909152600a81527f474e55204147504c7633000000000000000000000000000000000000000000006020820152919050565b604080518082018252600881527f4255534c2d312e310000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261949e90618a8b565b156194de57505060408051808201909152600781527f42534c20312e31000000000000000000000000000000000000000000000000006020820152919050565b60408084015184519151616586929060200161b892565b60608060005b845181101561958057818582815181106195175761951761b151565b602002602001015160405160200161953092919061acca565b60405160208183030381529060405291506001855161954f919061aa7a565b81146195785781604051602001619566919061b9fb565b60405160208183030381529060405291505b6001016194fb565b5060408051600380825260808201909252600091816020015b606081526020019060019003908161959957905050905083816000815181106195c4576195c461b151565b60200260200101819052506040518060400160405280600281526020017f2d63000000000000000000000000000000000000000000000000000000000000815250816001815181106196185761961861b151565b602002602001018190525081816002815181106196375761963761b151565b6020908102919091010152949350505050565b6020808301518351835192840151600093619668929184919061a041565b14159392505050565b604080518082019091526000808252602082015260006196a3846000015185602001518560000151866020015161a152565b90508360200151816196b5919061aa7a565b845185906196c490839061aa7a565b90525060208401525090919050565b60408051808201909152600080825260208201528151835110156196f857508161635f565b602080830151908401516001911461971f5750815160208481015190840151829020919020145b80156197505782518451859061973690839061aa7a565b905250825160208501805161974c90839061b87f565b9052505b509192915050565b604080518082019091526000808252602082015261977783838361a272565b5092915050565b60606000826000015167ffffffffffffffff81111561979f5761979f61abad565b6040519080825280601f01601f1916602001820160405280156197c9576020820181803683370190505b5090506000602082019050619777818560200151866000015161a31d565b606060006197f36167b0565b6040805160ff808252612000820190925291925060009190816020015b606081526020019060019003908161981057905050905060006040518060400160405280600381526020017f6e7078000000000000000000000000000000000000000000000000000000000081525082828061986b9061b2be565b935060ff16815181106198805761988061b151565b60200260200101819052506040518060400160405280600781526020017f5e312e33322e33000000000000000000000000000000000000000000000000008152506040516020016198d1919061ba3c565b6040516020818303038152906040528282806198ec9061b2be565b935060ff16815181106199015761990161b151565b60200260200101819052506040518060400160405280600881526020017f76616c696461746500000000000000000000000000000000000000000000000081525082828061994e9061b2be565b935060ff16815181106199635761996361b151565b60200260200101819052508260405160200161997f919061b1ec565b60405160208183030381529060405282828061999a9061b2be565b935060ff16815181106199af576199af61b151565b60200260200101819052506040518060400160405280600a81526020017f2d2d636f6e7472616374000000000000000000000000000000000000000000008152508282806199fc9061b2be565b935060ff1681518110619a1157619a1161b151565b6020026020010181905250619a26878461a397565b8282619a318161b2be565b935060ff1681518110619a4657619a4661b151565b602090810291909101015285515115619af25760408051808201909152600b81527f2d2d7265666572656e636500000000000000000000000000000000000000000060208201528282619a988161b2be565b935060ff1681518110619aad57619aad61b151565b6020026020010181905250619ac686600001518461a397565b8282619ad18161b2be565b935060ff1681518110619ae657619ae661b151565b60200260200101819052505b856080015115619b605760408051808201909152601881527f2d2d756e73616665536b697053746f72616765436865636b000000000000000060208201528282619b3b8161b2be565b935060ff1681518110619b5057619b5061b151565b6020026020010181905250619bc6565b8415619bc65760408051808201909152601281527f2d2d726571756972655265666572656e6365000000000000000000000000000060208201528282619ba58161b2be565b935060ff1681518110619bba57619bba61b151565b60200260200101819052505b60408601515115619c625760408051808201909152600d81527f2d2d756e73616665416c6c6f770000000000000000000000000000000000000060208201528282619c108161b2be565b935060ff1681518110619c2557619c2561b151565b60200260200101819052508560400151828280619c419061b2be565b935060ff1681518110619c5657619c5661b151565b60200260200101819052505b856060015115619ccc5760408051808201909152601481527f2d2d756e73616665416c6c6f7752656e616d657300000000000000000000000060208201528282619cab8161b2be565b935060ff1681518110619cc057619cc061b151565b60200260200101819052505b60008160ff1667ffffffffffffffff811115619cea57619cea61abad565b604051908082528060200260200182016040528015619d1d57816020015b6060815260200190600190039081619d085790505b50905060005b8260ff168160ff161015619d7657838160ff1681518110619d4657619d4661b151565b6020026020010151828260ff1681518110619d6357619d6361b151565b6020908102919091010152600101619d23565b50979650505050505050565b6040805180820190915260008082526020820152815183511015619da757508161635f565b81518351602085015160009291619dbd9161b87f565b619dc7919061aa7a565b60208401519091506001908214619de8575082516020840151819020908220145b8015619e0357835185518690619dff90839061aa7a565b9052505b50929392505050565b6000808260000151619e30856000015186602001518660000151876020015161a152565b619e3a919061b87f565b90505b83516020850151619e4e919061b87f565b81116197775781619e5e8161ba81565b9250508260000151619e95856020015183619e79919061aa7a565b8651619e85919061aa7a565b838660000151876020015161a152565b619e9f919061b87f565b9050619e3d565b60606000619eb48484619e0c565b619ebf90600161b87f565b67ffffffffffffffff811115619ed757619ed761abad565b604051908082528060200260200182016040528015619f0a57816020015b6060815260200190600190039081619ef55790505b50905060005b815181101561817f57619f266183a18686619758565b828281518110619f3857619f3861b151565b6020908102919091010152600101619f10565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310619f94577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310619fc0576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc100008310619fde57662386f26fc10000830492506010015b6305f5e1008310619ff6576305f5e100830492506008015b612710831061a00a57612710830492506004015b6064831061a01c576064830492506002015b600a831061635f5760010192915050565b600061a039838361a3d7565b159392505050565b60008085841161a148576020841161a0f4576000841561a08c57600161a06886602061aa7a565b61a07390600861ba9b565b61a07e90600261bb99565b61a088919061aa7a565b1990505b835181168561a09b898961b87f565b61a0a5919061aa7a565b805190935082165b81811461a0df5787841161a0c75787945050505050617db0565b8361a0d18161bba5565b94505082845116905061a0ad565b61a0e9878561b87f565b945050505050617db0565b83832061a101858861aa7a565b61a10b908761b87f565b91505b85821061a1465784822080820361a1335761a129868461b87f565b9350505050617db0565b61a13e60018461aa7a565b92505061a10e565b505b5092949350505050565b6000838186851161a25d576020851161a20c576000851561a19e57600161a17a87602061aa7a565b61a18590600861ba9b565b61a19090600261bb99565b61a19a919061aa7a565b1990505b8451811660008761a1af8b8b61b87f565b61a1b9919061aa7a565b855190915083165b82811461a1fe5781861061a1e65761a1d98b8b61b87f565b9650505050505050617db0565b8561a1f08161ba81565b96505083865116905061a1c1565b859650505050505050617db0565b508383206000905b61a21e868961aa7a565b821161a25b5785832080820361a23a5783945050505050617db0565b61a24560018561b87f565b935050818061a2539061ba81565b92505061a214565b505b61a267878761b87f565b979650505050505050565b6040805180820190915260008082526020820152600061a2a4856000015186602001518660000151876020015161a152565b60208087018051918601919091525190915061a2c0908261aa7a565b83528451602086015161a2d3919061b87f565b810361a2e2576000855261a314565b8351835161a2f0919061b87f565b8551869061a2ff90839061aa7a565b905250835161a30e908261b87f565b60208601525b50909392505050565b6020811061a355578151835261a33460208461b87f565b925061a34160208361b87f565b915061a34e60208261aa7a565b905061a31d565b600019811561a38457600161a36b83602061aa7a565b61a3779061010061bb99565b61a381919061aa7a565b90505b9151835183169219169190911790915250565b6060600061a3a58484616883565b805160208083015160405193945061a3bf9390910161bbbc565b60405160208183030381529060405291505092915050565b815181516000919081111561a3ea575081515b6020808501519084015160005b8381101561a4a3578251825180821461a47357600019602087101561a4525760018461a42489602061aa7a565b61a42e919061b87f565b61a43990600861ba9b565b61a44490600261bb99565b61a44e919061aa7a565b1990505b818116838216818103911461a47057975061635f9650505050505050565b50505b61a47e60208661b87f565b945061a48b60208561b87f565b9350505060208161a49c919061b87f565b905061a3f7565b5084518651616f31919061bc14565b610c9f806200bc3583390190565b6116fe806200c8d483390190565b61155a806200dfd283390190565b610d5e806200f52c83390190565b6040518060e0016040528060608152602001606081526020016060815260200160001515815260200160001515815260200160001515815260200161a52d61a532565b905290565b6040518061010001604052806000151581526020016000151581526020016060815260200160008019168152602001606081526020016060815260200160001515815260200161a52d6040518060800160405280600081526020016000815260200160008152602001600081525090565b602080825282518282018190526000918401906040840190835b8181101561a5e45783516001600160a01b031683526020938401939092019160010161a5bd565b509095945050505050565b60005b8381101561a60a57818101518382015260200161a5f2565b50506000910152565b6000815180845261a62b81602086016020860161a5ef565b601f01601f19169290920160200192915050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b8281101561a73b577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452815180516001600160a01b03168652602090810151604082880181905281519088018190529101906060600582901b88018101919088019060005b8181101561a721577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa08a850301835261a70b84865161a613565b602095860195909450929092019160010161a6d1565b50919750505060209485019492909201915060010161a667565b50929695505050505050565b600081518084526020840193506020830160005b8281101561a79b5781517fffffffff000000000000000000000000000000000000000000000000000000001686526020958601959091019060010161a75b565b5093949350505050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b8281101561a73b577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452815180516040875261a811604088018261a613565b905060208201519150868103602088015261a82c818361a747565b96505050602093840193919091019060010161a7cd565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b8281101561a73b577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc087860301845261a8a585835161a613565b9450602093840193919091019060010161a86b565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b8281101561a73b577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc087860301845281516001600160a01b038151168652602081015190506040602087015261a93b604087018261a747565b955050602093840193919091019060010161a8e2565b60006020828403121561a96357600080fd5b815180151581146164b357600080fd5b6020815260006164b3602083018461a613565b6001600160a01b03851681526001600160a01b0384166020820152826040820152608060608201526000616f31608083018461a613565b600181811c9082168061a9d157607f821691505b60208210810361867c577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006020828403121561aa1c57600080fd5b5051919050565b6001600160a01b0384168152826020820152606060408201526000618662606083018461a613565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8181038181111561635f5761635f61aa4b565b6001600160a01b0383168152604060208201526000617db0604083018461a613565b828152604060208201526000617db0604083018461a613565b60008261aafe577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b7f4661696c656420746f206465706c6f7920636f6e74726163742000000000000081526000835161ab3b81601a85016020880161a5ef565b7f3a20000000000000000000000000000000000000000000000000000000000000601a91840191820152835161ab7881601c84016020880161a5ef565b01601c01949350505050565b60006020828403121561ab9657600080fd5b81516001600160a01b03811681146164b357600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040516060810167ffffffffffffffff8111828210171561abff5761abff61abad565b60405290565b60008067ffffffffffffffff84111561ac205761ac2061abad565b50604051601f19601f85018116603f0116810181811067ffffffffffffffff8211171561ac4f5761ac4f61abad565b60405283815290508082840185101561ac6757600080fd5b61817f84602083018561a5ef565b600082601f83011261ac8657600080fd5b6164b38383516020850161ac05565b60006020828403121561aca757600080fd5b815167ffffffffffffffff81111561acbe57600080fd5b61635b8482850161ac75565b6000835161acdc81846020880161a5ef565b83519083019061acf081836020880161a5ef565b01949350505050565b7f4661696c656420746f206465706c6f7920636f6e74726163742000000000000081526000835161ad3181601a85016020880161a5ef565b7f207573696e6720636f6e7374727563746f722064617461202200000000000000601a91840191820152835161ad6e81603384016020880161a5ef565b7f220000000000000000000000000000000000000000000000000000000000000060339290910191820152603401949350505050565b60408152600b60408201527f464f554e4452595f4f555400000000000000000000000000000000000000000060608201526080602082015260006164b3608083018461a613565b60006020828403121561adfd57600080fd5b815167ffffffffffffffff81111561ae1457600080fd5b8201601f8101841361ae2557600080fd5b61635b8482516020840161ac05565b6000855161ae46818460208a0161a5ef565b7f2f00000000000000000000000000000000000000000000000000000000000000908301908152855161ae80816001840160208a0161a5ef565b7f2f0000000000000000000000000000000000000000000000000000000000000060019290910191820152845161aebe81600284016020890161a5ef565b6001818301019150507f2f000000000000000000000000000000000000000000000000000000000000006001820152835161af0081600284016020880161a5ef565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600292909101918201526007019695505050505050565b60408152600061af4b604083018461a613565b8281036020840152600481527f2e6173740000000000000000000000000000000000000000000000000000000060208201526040810191505092915050565b7f436f756c64206e6f742066696e642041535420696e206172746966616374200081526000825161afc281601f85016020870161a5ef565b7f2e205365742060617374203d20747275656020696e20666f756e6472792e746f601f9390910192830152507f6d6c000000000000000000000000000000000000000000000000000000000000603f820152604101919050565b60408152600061b02f604083018461a613565b8281036020840152601181527f2e6173742e6162736f6c7574655061746800000000000000000000000000000060208201526040810191505092915050565b60408152600061b081604083018461a613565b8281036020840152600c81527f2e6173742e6c6963656e7365000000000000000000000000000000000000000060208201526040810191505092915050565b7f2e6d657461646174612e736f75726365732e5b2700000000000000000000000081526000825161b0f881601485016020870161a5ef565b7f275d2e6b656363616b32353600000000000000000000000000000000000000006014939091019283015250602001919050565b60408152600061b13f604083018561a613565b82810360208401526164af818561a613565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f220000000000000000000000000000000000000000000000000000000000000081526000825161b1b881600185016020870161a5ef565b7f22000000000000000000000000000000000000000000000000000000000000006001939091019283015250600201919050565b6000825161b1fe81846020870161a5ef565b7f2f6275696c642d696e666f000000000000000000000000000000000000000000920191825250600b01919050565b7f436f756c64206e6f742066696e64206275696c642d696e666f2066696c65207781527f697468206d61746368696e6720736f7572636520636f6465206861736820666f60208201527f7220636f6e74726163742000000000000000000000000000000000000000000060408201526000825161b2b181604b85016020870161a5ef565b91909101604b0192915050565b600060ff821660ff810361b2d45761b2d461aa4b565b60010192915050565b7f406f70656e7a657070656c696e2f646566656e6465722d6465706c6f792d636c81527f69656e742d636c6940000000000000000000000000000000000000000000000060208201526000825161b33b81602985016020870161a5ef565b9190910160290192915050565b60408152601660408201527f4f50454e5a455050454c494e5f424153485f504154480000000000000000000060608201526080602082015260006164b3608083018461a613565b60006020828403121561b3a157600080fd5b815167ffffffffffffffff81111561b3b857600080fd5b82016060818503121561b3ca57600080fd5b61b3d261abdc565b81518060030b811461b3e357600080fd5b8152602082015167ffffffffffffffff81111561b3ff57600080fd5b61b40b8682850161ac75565b602083015250604082015167ffffffffffffffff81111561b42b57600080fd5b61b4378682850161ac75565b604083015250949350505050565b7f4661696c656420746f2072756e206261736820636f6d6d616e6420776974682081527f220000000000000000000000000000000000000000000000000000000000000060208201526000825161b4a381602185016020870161a5ef565b7f222e20496620796f7520617265207573696e672057696e646f77732c2073657460219390910192830152507f20746865204f50454e5a455050454c494e5f424153485f5041544820656e766960418201527f726f6e6d656e74207661726961626c6520746f207468652066756c6c7920717560618201527f616c69666965642070617468206f66207468652062617368206578656375746160818201527f626c652e20466f72206578616d706c652c20696620796f75206172652075736960a18201527f6e672047697420666f722057696e646f77732c206164642074686520666f6c6c60c18201527f6f77696e67206c696e6520696e20746865202e656e762066696c65206f66207960e18201527f6f75722070726f6a65637420287573696e6720666f727761726420736c6173686101018201527f6573293a0a4f50454e5a455050454c494e5f424153485f504154483d22433a2f6101218201527f50726f6772616d2046696c65732f4769742f62696e2f6261736822000000000061014182015261015c01919050565b7f4661696c656420746f2066696e64206c696e652077697468207072656669782081527f270000000000000000000000000000000000000000000000000000000000000060208201526000835161b68f81602185016020880161a5ef565b7f2720696e206f75747075743a2000000000000000000000000000000000000000602191840191820152835161b6cc81602e84016020880161a5ef565b01602e01949350505050565b7f4661696c656420746f2072756e2075706772616465207361666574792076616c81527f69646174696f6e3a20000000000000000000000000000000000000000000000060208201526000825161b33b81602985016020870161a5ef565b7f55706772616465207361666574792076616c69646174696f6e206661696c656481527f3a0a00000000000000000000000000000000000000000000000000000000000060208201526000825161b79481602285016020870161a5ef565b9190910160220192915050565b7f436f6e7472616374206e616d652000000000000000000000000000000000000081526000825161b7d981600e85016020870161a5ef565b7f206d75737420626520696e2074686520666f726d6174204d79436f6e74726163600e9390910192830152507f742e736f6c3a4d79436f6e7472616374206f72204d79436f6e74726163742e73602e8201527f6f6c206f72206f75742f4d79436f6e74726163742e736f6c2f4d79436f6e7472604e8201527f6163742e6a736f6e000000000000000000000000000000000000000000000000606e820152607601919050565b8082018082111561635f5761635f61aa4b565b7f53504458206c6963656e7365206964656e74696669657220000000000000000081526000835161b8ca81601885016020880161a5ef565b7f20696e2000000000000000000000000000000000000000000000000000000000601891840191820152835161b90781601c84016020880161a5ef565b7f20646f6573206e6f74206c6f6f6b206c696b65206120737570706f7274656420601c92909101918201527f6c6963656e736520666f7220626c6f636b206578706c6f726572207665726966603c8201527f69636174696f6e2e205573652074686520606c6963656e73655479706560206f605c8201527f7074696f6e20746f20737065636966792061206c6963656e736520747970652c607c8201527f206f7220736574207468652060736b69704c6963656e73655479706560206f70609c8201527f74696f6e20746f2060747275656020746f20736b69702e00000000000000000060bc82015260d301949350505050565b6000825161ba0d81846020870161a5ef565b7f2000000000000000000000000000000000000000000000000000000000000000920191825250600101919050565b7f406f70656e7a657070656c696e2f75706772616465732d636f7265400000000081526000825161ba7481601c85016020870161a5ef565b91909101601c0192915050565b6000600019820361ba945761ba9461aa4b565b5060010190565b808202811582820484141761635f5761635f61aa4b565b6001815b600184111561baed5780850481111561bad15761bad161aa4b565b600184161561badf57908102905b60019390931c92800261bab6565b935093915050565b60008261bb045750600161635f565b8161bb115750600061635f565b816001811461bb27576002811461bb315761bb4d565b600191505061635f565b60ff84111561bb425761bb4261aa4b565b50506001821b61635f565b5060208310610133831016604e8410600b841016171561bb70575081810a61635f565b61bb7d600019848461bab2565b806000190482111561bb915761bb9161aa4b565b029392505050565b60006164b3838361baf5565b60008161bbb45761bbb461aa4b565b506000190190565b6000835161bbce81846020880161a5ef565b7f3a00000000000000000000000000000000000000000000000000000000000000908301908152835161bc0881600184016020880161a5ef565b01600101949350505050565b81810360008312801583831316838312821617156197775761977761aa4b56fe608060405234801561001057600080fd5b50604051610c9f380380610c9f83398101604081905261002f9161010d565b8181600361003d83826101ff565b50600461004a82826101ff565b50505050506102bd565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261007b57600080fd5b81516001600160401b0381111561009457610094610054565b604051601f8201601f19908116603f011681016001600160401b03811182821017156100c2576100c2610054565b6040528181528382016020018510156100da57600080fd5b60005b828110156100f9576020818601810151838301820152016100dd565b506000918101602001919091529392505050565b6000806040838503121561012057600080fd5b82516001600160401b0381111561013657600080fd5b6101428582860161006a565b602085015190935090506001600160401b0381111561016057600080fd5b61016c8582860161006a565b9150509250929050565b600181811c9082168061018a57607f821691505b6020821081036101aa57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156101fa57806000526020600020601f840160051c810160208510156101d75750805b601f840160051c820191505b818110156101f757600081556001016101e3565b50505b505050565b81516001600160401b0381111561021857610218610054565b61022c816102268454610176565b846101b0565b6020601f82116001811461026057600083156102485750848201515b600019600385901b1c1916600184901b1784556101f7565b600084815260208120601f198516915b828110156102905787850151825560209485019460019092019101610270565b50848210156102ae5786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b6109d3806102cc6000396000f3fe608060405234801561001057600080fd5b50600436106100be5760003560e01c806340c10f191161007657806395d89b411161005b57806395d89b4114610183578063a9059cbb1461018b578063dd62ed3e1461019e57600080fd5b806340c10f191461013857806370a082311461014d57600080fd5b806318160ddd116100a757806318160ddd1461010457806323b872dd14610116578063313ce5671461012957600080fd5b806306fdde03146100c3578063095ea7b3146100e1575b600080fd5b6100cb6101e4565b6040516100d891906107bf565b60405180910390f35b6100f46100ef366004610854565b610276565b60405190151581526020016100d8565b6002545b6040519081526020016100d8565b6100f461012436600461087e565b610290565b604051601281526020016100d8565b61014b610146366004610854565b6102b4565b005b61010861015b3660046108bb565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6100cb6102c2565b6100f4610199366004610854565b6102d1565b6101086101ac3660046108dd565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6060600380546101f390610910565b80601f016020809104026020016040519081016040528092919081815260200182805461021f90610910565b801561026c5780601f106102415761010080835404028352916020019161026c565b820191906000526020600020905b81548152906001019060200180831161024f57829003601f168201915b5050505050905090565b6000336102848185856102df565b60019150505b92915050565b60003361029e8582856102f1565b6102a98585856103c5565b506001949350505050565b6102be8282610470565b5050565b6060600480546101f390610910565b6000336102848185856103c5565b6102ec83838360016104cc565b505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146103bf57818110156103b0576040517ffb8f41b200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416600482015260248101829052604481018390526064015b60405180910390fd5b6103bf848484840360006104cc565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8316610415576040517f96c6fd1e000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff8216610465576040517fec442f05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b6102ec838383610614565b73ffffffffffffffffffffffffffffffffffffffff82166104c0576040517fec442f05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b6102be60008383610614565b73ffffffffffffffffffffffffffffffffffffffff841661051c576040517fe602df05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff831661056c576040517f94280d62000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260016020908152604080832093871683529290522082905580156103bf578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161060691815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff831661064c5780600260008282546106419190610963565b909155506106fe9050565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260208190526040902054818110156106d2576040517fe450d38c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8516600482015260248101829052604481018390526064016103a7565b73ffffffffffffffffffffffffffffffffffffffff841660009081526020819052604090209082900390555b73ffffffffffffffffffffffffffffffffffffffff821661072757600280548290039055610753565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090208054820190555b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516107b291815260200190565b60405180910390a3505050565b602081526000825180602084015260005b818110156107ed57602081860181015160408684010152016107d0565b5060006040828501015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011684010191505092915050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461084f57600080fd5b919050565b6000806040838503121561086757600080fd5b6108708361082b565b946020939093013593505050565b60008060006060848603121561089357600080fd5b61089c8461082b565b92506108aa6020850161082b565b929592945050506040919091013590565b6000602082840312156108cd57600080fd5b6108d68261082b565b9392505050565b600080604083850312156108f057600080fd5b6108f98361082b565b91506109076020840161082b565b90509250929050565b600181811c9082168061092457607f821691505b60208210810361095d577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b8082018082111561028a577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea26469706673582212207e804ca539d49155d2b6bc19268ce22f9f857027c75247d69fb0d56a089c93d464736f6c634300081a003360a060405234801561001057600080fd5b506040516116fe3803806116fe83398101604081905261002f916101e5565b60016000556002805460ff191690556001600160a01b038316158061005b57506001600160a01b038216155b8061006d57506001600160a01b038116155b1561008b5760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b0383166080526100a3600082610134565b506100ce7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a82610134565b506100f97f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e483610134565b506101126000805160206116de83398151915282610134565b5061012b6000805160206116de83398151915283610134565b50505050610228565b60008281526001602090815260408083206001600160a01b038516845290915281205460ff166101bf5760008381526001602081815260408084206001600160a01b0387168086529252808420805460ff19169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45060016101c3565b5060005b92915050565b80516001600160a01b03811681146101e057600080fd5b919050565b6000806000606084860312156101fa57600080fd5b610203846101c9565b9250610211602085016101c9565b915061021f604085016101c9565b90509250925092565b60805161147f61025f6000396000818161019e0152818161050001528181610562015281816108f70152610959015261147f6000f3fe608060405234801561001057600080fd5b506004361061016c5760003560e01c806385f438c1116100cd578063c8a0236211610081578063d936547e11610066578063d936547e14610355578063d9caed1214610378578063e63ab1e91461038b57600080fd5b8063c8a023621461032f578063d547741f1461034257600080fd5b80639a590427116100b25780639a590427146103015780639b19251a14610314578063a217fddf1461032757600080fd5b806385f438c11461029457806391d14854146102bb57600080fd5b806336568abe11610124578063570618e111610109578063570618e11461025a5780635c975abb146102815780638456cb591461028c57600080fd5b806336568abe1461023f5780633f4ba83a1461025257600080fd5b806321fc65f21161015557806321fc65f2146101e5578063248a9ca3146101fa5780632f2ff15d1461022c57600080fd5b806301ffc9a714610171578063116191b614610199575b600080fd5b61018461017f36600461118a565b6103b2565b60405190151581526020015b60405180910390f35b6101c07f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610190565b6101f86101f33660046111f5565b61044b565b005b61021e610208366004611292565b6000908152600160208190526040909120015490565b604051908152602001610190565b6101f861023a3660046112ab565b61064c565b6101f861024d3660046112ab565b610678565b6101f86106d6565b61021e7f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a81565b60025460ff16610184565b6101f861070b565b61021e7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b6101846102c93660046112ab565b600091825260016020908152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b6101f861030f3660046112d7565b61073d565b6101f86103223660046112d7565b6107be565b61021e600081565b6101f861033d3660046111f5565b610842565b6101f86103503660046112ab565b610a29565b6101846103633660046112d7565b60036020526000908152604090205460ff1681565b6101f86103863660046112f2565b610a4f565b61021e7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061044557507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b610453610b7b565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461047d81610bbe565b610485610bc8565b73ffffffffffffffffffffffffffffffffffffffff861660009081526003602052604090205460ff166104e4576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61052573ffffffffffffffffffffffffffffffffffffffff87167f000000000000000000000000000000000000000000000000000000000000000086610c07565b6040517f5131ab5900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690635131ab599061059f9089908990899089908990600401611378565b600060405180830381600087803b1580156105b957600080fd5b505af11580156105cd573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167f85b5be9cf454e05e0bddf49315178102227c312078eefa3c00294fb4d912ae4e868686604051610632939291906113d5565b60405180910390a3506106456001600055565b5050505050565b6000828152600160208190526040909120015461066881610bbe565b6106728383610c94565b50505050565b73ffffffffffffffffffffffffffffffffffffffff811633146106c7576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6106d18282610d41565b505050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61070081610bbe565b610708610de2565b50565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61073581610bbe565b610708610e41565b7f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a61076781610bbe565b73ffffffffffffffffffffffffffffffffffffffff8216600081815260036020526040808220805460ff19169055517f51085ddf9ebdded84b76e829eb58c4078e4b5bdf97d9a94723f336039da467919190a25050565b7f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a6107e881610bbe565b73ffffffffffffffffffffffffffffffffffffffff8216600081815260036020526040808220805460ff19166001179055517faab7954e9d246b167ef88aeddad35209ca2489d95a8aeb59e288d9b19fae5a549190a25050565b61084a610b7b565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461087481610bbe565b61087c610bc8565b73ffffffffffffffffffffffffffffffffffffffff861660009081526003602052604090205460ff166108db576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61091c73ffffffffffffffffffffffffffffffffffffffff87167f000000000000000000000000000000000000000000000000000000000000000086610c07565b6040517fb8969bd400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063b8969bd4906109969089908990899089908990600401611378565b600060405180830381600087803b1580156109b057600080fd5b505af11580156109c4573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fb9d4efa96044e5f5e03e696fa9ae2ff66911cc27e8a637c3627c75bc5b2241c8868686604051610632939291906113d5565b60008281526001602081905260409091200154610a4581610bbe565b6106728383610d41565b610a57610b7b565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e4610a8181610bbe565b610a89610bc8565b73ffffffffffffffffffffffffffffffffffffffff841660009081526003602052604090205460ff16610ae8576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610b0973ffffffffffffffffffffffffffffffffffffffff85168484610c07565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f9b1bfa7fa9ee420a16e124f794c35ac9f90472acc99140eb2f6447c714cad8eb84604051610b6891815260200190565b60405180910390a3506106d16001600055565b600260005403610bb7576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b6107088133610e7e565b60025460ff1615610c05576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6040805173ffffffffffffffffffffffffffffffffffffffff8416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb000000000000000000000000000000000000000000000000000000001790526106d1908490610f0f565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff16610d3957600083815260016020818152604080842073ffffffffffffffffffffffffffffffffffffffff87168086529252808420805460ff19169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a4506001610445565b506000610445565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff1615610d3957600083815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff86168085529252808320805460ff1916905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a4506001610445565b610dea610fa5565b6002805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b610e49610bc8565b6002805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258610e173390565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16610f0b576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82166004820152602481018390526044015b60405180910390fd5b5050565b6000610f3173ffffffffffffffffffffffffffffffffffffffff841683610fe1565b90508051600014158015610f56575080806020019051810190610f5491906113f8565b155b156106d1576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84166004820152602401610f02565b60025460ff16610c05576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6060610fef83836000610ff6565b9392505050565b606081471015611034576040517fcd786059000000000000000000000000000000000000000000000000000000008152306004820152602401610f02565b6000808573ffffffffffffffffffffffffffffffffffffffff16848660405161105d919061141a565b60006040518083038185875af1925050503d806000811461109a576040519150601f19603f3d011682016040523d82523d6000602084013e61109f565b606091505b50915091506110af8683836110b9565b9695505050505050565b6060826110ce576110c982611148565b610fef565b81511580156110f2575073ffffffffffffffffffffffffffffffffffffffff84163b155b15611141576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85166004820152602401610f02565b5080610fef565b8051156111585780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006020828403121561119c57600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610fef57600080fd5b803573ffffffffffffffffffffffffffffffffffffffff811681146111f057600080fd5b919050565b60008060008060006080868803121561120d57600080fd5b611216866111cc565b9450611224602087016111cc565b935060408601359250606086013567ffffffffffffffff81111561124757600080fd5b8601601f8101881361125857600080fd5b803567ffffffffffffffff81111561126f57600080fd5b88602082840101111561128157600080fd5b959894975092955050506020019190565b6000602082840312156112a457600080fd5b5035919050565b600080604083850312156112be57600080fd5b823591506112ce602084016111cc565b90509250929050565b6000602082840312156112e957600080fd5b610fef826111cc565b60008060006060848603121561130757600080fd5b611310846111cc565b925061131e602085016111cc565b929592945050506040919091013590565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff8616815273ffffffffffffffffffffffffffffffffffffffff851660208201528360408201526080606082015260006113ca60808301848661132f565b979650505050505050565b8381526040602082015260006113ef60408301848661132f565b95945050505050565b60006020828403121561140a57600080fd5b81518015158114610fef57600080fd5b6000825160005b8181101561143b5760208186018101518583015201611421565b50600092019182525091905056fea2646970667358221220dc54ce548a1f0bf8ba5e86cc53c6d822e55eee543451395733c659359bac8dd164736f6c634300081a00338619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a60c060405260001960035534801561001657600080fd5b5060405161155a38038061155a83398101604081905261003591610220565b60016000819055805460ff19169055838383836001600160a01b038416158061006557506001600160a01b038316155b8061007757506001600160a01b038216155b8061008957506001600160a01b038116155b156100a75760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b03808516608052831660a0526100c5600082610154565b506100f07f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e483610154565b5061011b7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb83610154565b506101467f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a82610154565b505050505050505050610274565b60008281526002602090815260408083206001600160a01b038516845290915281205460ff166101fa5760008381526002602090815260408083206001600160a01b03861684529091529020805460ff191660011790556101b23390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45060016101fe565b5060005b92915050565b80516001600160a01b038116811461021b57600080fd5b919050565b6000806000806080858703121561023657600080fd5b61023f85610204565b935061024d60208601610204565b925061025b60408601610204565b915061026960608601610204565b905092959194509250565b60805160a0516112826102d86000396000818161021d01528181610531015281816108240152818161097b01528181610ad00152610bf20152600081816101d1015281816104a1015281816105040152818161079401526107f701526112826000f3fe608060405234801561001057600080fd5b50600436106101775760003560e01c80635e3e9fef116100d857806391d148541161008c578063d547741f11610066578063d547741f14610386578063d5abeb0114610399578063e63ab1e9146103a257600080fd5b806391d1485414610311578063a217fddf14610357578063a783c7891461035f57600080fd5b8063743e0c9b116100bd578063743e0c9b146102cf5780638456cb59146102e257806385f438c1146102ea57600080fd5b80635e3e9fef146102a95780636f8b44b0146102bc57600080fd5b8063248a9ca31161012f57806336568abe1161011457806336568abe146102835780633f4ba83a146102965780635c975abb1461029e57600080fd5b8063248a9ca31461023f5780632f2ff15d1461027057600080fd5b8063106e629011610160578063106e6290146101b9578063116191b6146101cc57806321e093b11461021857600080fd5b806301ffc9a71461017c57806302d5c899146101a4575b600080fd5b61018f61018a366004610fb4565b6103c9565b60405190151581526020015b60405180910390f35b6101b76101b2366004611026565b610462565b005b6101b76101c73660046110b8565b6105f7565b6101f37f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161019b565b6101f37f000000000000000000000000000000000000000000000000000000000000000081565b61026261024d3660046110eb565b60009081526002602052604090206001015490565b60405190815260200161019b565b6101b761027e366004611104565b61069c565b6101b7610291366004611104565b6106c7565b6101b7610720565b60015460ff1661018f565b6101b76102b7366004611026565b610755565b6101b76102ca3660046110eb565b6108d0565b6101b76102dd3660046110eb565b61093e565b6101b76109e8565b6102627f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b61018f61031f366004611104565b600091825260026020908152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b610262600081565b6102627f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb81565b6101b7610394366004611104565b610a1a565b61026260035481565b6102627f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061045c57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b61046a610a3f565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461049481610a82565b61049c610a8c565b6104c77f00000000000000000000000000000000000000000000000000000000000000008684610acb565b6040517fb8969bd400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063b8969bd490610561907f0000000000000000000000000000000000000000000000000000000000000000908a908a908a908a90600401611179565b600060405180830381600087803b15801561057b57600080fd5b505af115801561058f573d6000803e3d6000fd5b505050508573ffffffffffffffffffffffffffffffffffffffff167fba96f26bdda53eb8c8ba39045dfb4ff39753fbc7a6edcf250a88e75e78d102fe8686866040516105dd939291906111d6565b60405180910390a2506105f06001600055565b5050505050565b6105ff610a3f565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461062981610a82565b610631610a8c565b61063c848484610acb565b8373ffffffffffffffffffffffffffffffffffffffff167f884edad9ce6fa2440d8a54cc123490eb96d2768479d49ff9c7366125a94243648460405161068491815260200190565b60405180910390a2506106976001600055565b505050565b6000828152600260205260409020600101546106b781610a82565b6106c18383610c53565b50505050565b73ffffffffffffffffffffffffffffffffffffffff81163314610716576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6106978282610d53565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61074a81610a82565b610752610e12565b50565b61075d610a3f565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461078781610a82565b61078f610a8c565b6107ba7f00000000000000000000000000000000000000000000000000000000000000008684610acb565b6040517f5131ab5900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690635131ab5990610854907f0000000000000000000000000000000000000000000000000000000000000000908a908a908a908a90600401611179565b600060405180830381600087803b15801561086e57600080fd5b505af1158015610882573d6000803e3d6000fd5b505050508573ffffffffffffffffffffffffffffffffffffffff167f7772f56296d3a5202974a45c61c9188d844ab4d6eeb18c851e4b8d5384ca6ced8686866040516105dd939291906111d6565b7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb6108fa81610a82565b610902610a8c565b60038290556040518281527f7810bd47de260c3e9ee10061cf438099dd12256c79485f12f94dbccc981e806c9060200160405180910390a15050565b610946610a8c565b6040517f79cc6790000000000000000000000000000000000000000000000000000000008152336004820152602481018290527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16906379cc679090604401600060405180830381600087803b1580156109d457600080fd5b505af11580156105f0573d6000803e3d6000fd5b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610a1281610a82565b610752610e8f565b600082815260026020526040902060010154610a3581610a82565b6106c18383610d53565b600260005403610a7b576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b6107528133610ee8565b60015460ff1615610ac9576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6003547f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b39573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b5d91906111f9565b610b679084611212565b1115610b9f576040517fc30436e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f1e458bee00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff848116600483015260248201849052604482018390527f00000000000000000000000000000000000000000000000000000000000000001690631e458bee90606401600060405180830381600087803b158015610c3657600080fd5b505af1158015610c4a573d6000803e3d6000fd5b50505050505050565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff16610d4b57600083815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff86168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055610ce93390565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a450600161045c565b50600061045c565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff1615610d4b57600083815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8616808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a450600161045c565b610e1a610f78565b600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b610e97610a8c565b600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016811790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25833610e65565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16610f74576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff821660048201526024810183905260440160405180910390fd5b5050565b60015460ff16610ac9576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060208284031215610fc657600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610ff657600080fd5b9392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461102157600080fd5b919050565b60008060008060006080868803121561103e57600080fd5b61104786610ffd565b945060208601359350604086013567ffffffffffffffff81111561106a57600080fd5b8601601f8101881361107b57600080fd5b803567ffffffffffffffff81111561109257600080fd5b8860208284010111156110a457600080fd5b959894975060200195606001359392505050565b6000806000606084860312156110cd57600080fd5b6110d684610ffd565b95602085013595506040909401359392505050565b6000602082840312156110fd57600080fd5b5035919050565b6000806040838503121561111757600080fd5b8235915061112760208401610ffd565b90509250929050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff8616815273ffffffffffffffffffffffffffffffffffffffff851660208201528360408201526080606082015260006111cb608083018486611130565b979650505050505050565b8381526040602082015260006111f0604083018486611130565b95945050505050565b60006020828403121561120b57600080fd5b5051919050565b8082018082111561045c577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea2646970667358221220de5fa55e0ca79ea2f08903481d01ea00bbbf346b9cfba44e12a2dd6f3a6f2e8a64736f6c634300081a00336080604052348015600f57600080fd5b506001600055610d3a806100246000396000f3fe6080604052600436106100635760003560e01c8063c513169111610040578063c5131691146100c1578063e04d4f97146100e1578063f05b6abf146100f457005b8063357fc5a21461006c5780636ed701691461008c5780638fcaa0b5146100a157005b3661006a57005b005b34801561007857600080fd5b5061006a6100873660046106c0565b610114565b34801561009857600080fd5b5061006a6101aa565b3480156100ad57600080fd5b5061006a6100bc3660046106fc565b6101df565b3480156100cd57600080fd5b5061006a6100dc3660046106c0565b61021e565b61006a6100ef366004610895565b6102f9565b34801561010057600080fd5b5061006a61010f366004610981565b61033d565b61011c610372565b61013e73ffffffffffffffffffffffffffffffffffffffff83163383866103b5565b604080513381526020810185905273ffffffffffffffffffffffffffffffffffffffff848116828401528316606082015290517f2b58128f24a9f59127cc5b5430d70542b22220f2d9adaa86e442b816ab98af609181900360800190a16101a56001600055565b505050565b6040513381527fbcaadb46b82a48af60b608f58959ae6b8310d1b0a0d094c2e9ec3208ed39f2a09060200160405180910390a1565b7f0d3f65f00e631663aa85c96330b5c7a83bb29af3630c0063776f985edc3037aa33838360405161021293929190610a6b565b60405180910390a15050565b610226610372565b6000610233600285610ad5565b90508060000361026f576040517f1f2a200500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61029173ffffffffffffffffffffffffffffffffffffffff84163384846103b5565b604080513381526020810183905273ffffffffffffffffffffffffffffffffffffffff858116828401528416606082015290517f2b58128f24a9f59127cc5b5430d70542b22220f2d9adaa86e442b816ab98af609181900360800190a1506101a56001600055565b7f1f1ff1f5fb41346850b2f5c04e6c767e2f1c8a525c5c0c5cdb60cdf3ca5f62fa3334858585604051610330959493929190610b7e565b60405180910390a1505050565b7f74a53cd528a921fca7dbdee62f86819051d3cc98f214951f4238e8843f20b146338484846040516103309493929190610c08565b6002600054036103ae576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b6040805173ffffffffffffffffffffffffffffffffffffffff85811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd0000000000000000000000000000000000000000000000000000000017905261044a908590610450565b50505050565b600061047273ffffffffffffffffffffffffffffffffffffffff8416836104eb565b905080516000141580156104975750808060200190518101906104959190610ccb565b155b156101a5576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff841660048201526024015b60405180910390fd5b60606104f983836000610500565b9392505050565b60608147101561053e576040517fcd7860590000000000000000000000000000000000000000000000000000000081523060048201526024016104e2565b6000808573ffffffffffffffffffffffffffffffffffffffff1684866040516105679190610ce8565b60006040518083038185875af1925050503d80600081146105a4576040519150601f19603f3d011682016040523d82523d6000602084013e6105a9565b606091505b50915091506105b98683836105c3565b9695505050505050565b6060826105d8576105d382610652565b6104f9565b81511580156105fc575073ffffffffffffffffffffffffffffffffffffffff84163b155b1561064b576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff851660048201526024016104e2565b50806104f9565b8051156106625780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50565b803573ffffffffffffffffffffffffffffffffffffffff811681146106bb57600080fd5b919050565b6000806000606084860312156106d557600080fd5b833592506106e560208501610697565b91506106f360408501610697565b90509250925092565b6000806020838503121561070f57600080fd5b823567ffffffffffffffff81111561072657600080fd5b8301601f8101851361073757600080fd5b803567ffffffffffffffff81111561074e57600080fd5b85602082840101111561076057600080fd5b6020919091019590945092505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156107e6576107e6610770565b604052919050565b600082601f8301126107ff57600080fd5b813567ffffffffffffffff81111561081957610819610770565b61084a60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8401160161079f565b81815284602083860101111561085f57600080fd5b816020850160208301376000918101602001919091529392505050565b801515811461069457600080fd5b80356106bb8161087c565b6000806000606084860312156108aa57600080fd5b833567ffffffffffffffff8111156108c157600080fd5b6108cd868287016107ee565b9350506020840135915060408401356108e58161087c565b809150509250925092565b600067ffffffffffffffff82111561090a5761090a610770565b5060051b60200190565b600082601f83011261092557600080fd5b8135610938610933826108f0565b61079f565b8082825260208201915060208360051b86010192508583111561095a57600080fd5b602085015b8381101561097757803583526020928301920161095f565b5095945050505050565b60008060006060848603121561099657600080fd5b833567ffffffffffffffff8111156109ad57600080fd5b8401601f810186136109be57600080fd5b80356109cc610933826108f0565b8082825260208201915060208360051b8501019250888311156109ee57600080fd5b602084015b83811015610a3057803567ffffffffffffffff811115610a1257600080fd5b610a218b6020838901016107ee565b845250602092830192016109f3565b509550505050602084013567ffffffffffffffff811115610a5057600080fd5b610a5c86828701610914565b9250506106f36040850161088a565b73ffffffffffffffffffffffffffffffffffffffff8416815260406020820152816040820152818360608301376000818301606090810191909152601f9092017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016010192915050565b600082610b0b577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60005b83811015610b2b578181015183820152602001610b13565b50506000910152565b60008151808452610b4c816020860160208601610b10565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b73ffffffffffffffffffffffffffffffffffffffff8616815284602082015260a060408201526000610bb360a0830186610b34565b6060830194909452509015156080909101529392505050565b600081518084526020840193506020830160005b82811015610bfe578151865260209586019590910190600101610be0565b5093949350505050565b60006080820173ffffffffffffffffffffffffffffffffffffffff871683526080602084015280865180835260a08501915060a08160051b86010192506020880160005b82811015610c9b577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60878603018452610c86858351610b34565b94506020938401939190910190600101610c4c565b505050508281036040840152610cb18186610bcc565b915050610cc2606083018415159052565b95945050505050565b600060208284031215610cdd57600080fd5b81516104f98161087c565b60008251610cfa818460208701610b10565b919091019291505056fea2646970667358221220556072e1abafc3c4063b8cce832228b4f309b93726aaa6a6dfab20cb880c6d1864736f6c634300081a0033a26469706673582212201e67211881e86ae19a2444e1df334f77ca6edbd7114015548e5beb0878b2e45664736f6c634300081a0033", + Bin: "0x6080604052600c8054600160ff199182168117909255601f80549091169091179055348015602c57600080fd5b50620102bf806200003e6000396000f3fe608060405234801561001057600080fd5b50600436106102d35760003560e01c806385226c8111610186578063c713f827116100e3578063f0c8e7e011610097578063fa7626d411610071578063fa7626d41461050d578063fb176c121461051a578063fe8e5f1b1461052257600080fd5b8063f0c8e7e0146104f5578063f4221f08146104fd578063fa2a70741461050557600080fd5b8063e20c9f71116100c8578063e20c9f71146104be578063e63ab1e9146104c6578063eb1ce7f9146104ed57600080fd5b8063c713f827146104ae578063cbd57e2f146104b657600080fd5b8063a4943deb1161013a578063b0464fdc1161011f578063b0464fdc14610486578063b5508aa91461048e578063ba414fa61461049657600080fd5b8063a4943deb14610457578063a783c7891461045f57600080fd5b8063916a17c61161016b578063916a17c6146104325780639918c1c214610447578063a3f9d0e01461044f57600080fd5b806385226c81146103f657806385f438c11461040b57600080fd5b80633f7286f41161023457806366d9a9a0116101e857806371149c94116101cd57806371149c94146103de5780637e91c50f146103e657806382c52992146103ee57600080fd5b806366d9a9a0146103c15780636a621854146103d657600080fd5b806351ecdf3c1161021957806351ecdf3c1461035d578063570618e1146103655780635d62c8601461039a57600080fd5b80633f7286f41461034d5780634b5838d21461035557600080fd5b80632ade38801161028b5780633e5e3c23116102705780633e5e3c23146103355780633e73ecb41461033d5780633ee929231461034557600080fd5b80632ade3880146103185780632be6a1621461032d57600080fd5b80631779672f116102bc5780631779672f146102ea5780631ed7831c146102f2578063284cb9291461031057600080fd5b80630a9254e4146102d85780630eee72a9146102e2575b600080fd5b6102e061052a565b005b6102e0610e69565b6102e061110e565b6102fa611278565b604051610307919061a5a3565b60405180910390f35b6102e06112da565b6103206115d7565b604051610307919061a63f565b6102e0611719565b6102fa6118db565b6102e061193b565b6102e0611eca565b6102fa611f99565b6102e0611ff9565b6102e0612367565b61038c7f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a81565b604051908152602001610307565b61038c7f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b981565b6103c9612553565b604051610307919061a7a5565b6102e06126d5565b6102e06127a1565b6102e0612ff7565b6102e061319a565b6103fe613428565b604051610307919061a843565b61038c7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b61043a6134f8565b604051610307919061a8ba565b6102e06135f3565b6102e0613921565b6102e0613f5b565b61038c7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb81565b61043a614180565b6103fe61427b565b61049e61434b565b6040519015158152602001610307565b6102e061441f565b6102e061510d565b6102fa6151ce565b61038c7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b6102e061522e565b6102e0615353565b6102e0615515565b6102e0615798565b601f5461049e9060ff1681565b6102e0615a8f565b6102e061613f565b602680547fffffffffffffffffffffffff000000000000000000000000000000000000000090811630179091556027805482166112341790556028805490911661567817905560405161057c9061a4b2565b60408082526004908201527f746573740000000000000000000000000000000000000000000000000000000060608201526080602082018190526003908201527f54544b000000000000000000000000000000000000000000000000000000000060a082015260c001604051809103906000f080158015610601573d6000803e3d6000fd5b50602480547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03929092169190911790556040516106469061a4b2565b604080825260049082018190527f7a6574610000000000000000000000000000000000000000000000000000000060608301526080602083018190528201527f5a4554410000000000000000000000000000000000000000000000000000000060a082015260c001604051809103906000f0801580156106ca573d6000803e3d6000fd5b50602580547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03928316908117909155604080518082018252600e81527f4761746577617945564d2e736f6c0000000000000000000000000000000000006020820152602854602654925190851660248201526044810193909352921660648201526107b9919060840160408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fc0c53b8b00000000000000000000000000000000000000000000000000000000179052616346565b601f80547fffffffffffffffffffffff0000000000000000000000000000000000000000ff166101006001600160a01b0393841681029190911791829055602080549190920483167fffffffffffffffffffffffff000000000000000000000000000000000000000090911681179091556028546026546040519293918216929116906108459061a4c0565b6001600160a01b03938416815291831660208301529091166040820152606001604051809103906000f080158015610881573d6000803e3d6000fd5b50602280547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392831617905560205460255460285460265460405193851694928316939183169216906108dc9061a4ce565b6001600160a01b039485168152928416602084015290831660408301529091166060820152608001604051809103906000f080158015610920573d6000803e3d6000fd5b50602380547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03929092169190911790556040516109659061a4dc565b604051809103906000f080158015610981573d6000803e3d6000fd5b50602180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039283161790556028546040517fc88a5e6d00000000000000000000000000000000000000000000000000000000815291166004820152670de0b6b3a76400006024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c88a5e6d90604401600060405180830381600087803b158015610a2d57600080fd5b505af1158015610a41573d6000803e3d6000fd5b50506026546040517f06447d560000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506306447d569150602401600060405180830381600087803b158015610ab757600080fd5b505af1158015610acb573d6000803e3d6000fd5b50506020546022546040517fae7a3a6f0000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201529116925063ae7a3a6f9150602401600060405180830381600087803b158015610b3157600080fd5b505af1158015610b45573d6000803e3d6000fd5b50506020546023546040517f10188aef0000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152911692506310188aef9150602401600060405180830381600087803b158015610bab57600080fd5b505af1158015610bbf573d6000803e3d6000fd5b5050602254602480546040517f9b19251a0000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015292169350639b19251a925001600060405180830381600087803b158015610c2457600080fd5b505af1158015610c38573d6000803e3d6000fd5b505050507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b03166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610c9a57600080fd5b505af1158015610cae573d6000803e3d6000fd5b5050602480546026546040517f40c10f190000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620f4240938101939093521692506340c10f199150604401600060405180830381600087803b158015610d1f57600080fd5b505af1158015610d33573d6000803e3d6000fd5b5050602480546022546040517fa9059cbb0000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201526207a1209381019390935216925063a9059cbb91506044016020604051808303816000875af1158015610da9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dcd919061a951565b506028546040517fc88a5e6d0000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152670de0b6b3a76400006024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c88a5e6d906044015b600060405180830381600087803b158015610e4f57600080fd5b505af1158015610e63573d6000803e3d6000fd5b50505050565b60248054602754604051620186a09381018490526001600160a01b0392831660448201529116606482015260009060840160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fc513169100000000000000000000000000000000000000000000000000000000179052602654905163ca669fa760e01b81526001600160a01b039091166004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa7906024015b600060405180830381600087803b158015610f4e57600080fd5b505af1158015610f62573d6000803e3d6000fd5b5050602654604080516001600160a01b0390921660248301527f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e460448084019190915281518084039091018152606490920181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb3925061104d919060040161a973565b600060405180830381600087803b15801561106757600080fd5b505af115801561107b573d6000803e3d6000fd5b50506022546024546021546040517f21fc65f20000000000000000000000000000000000000000000000000000000081526001600160a01b0393841695506321fc65f294506110d89392831692909116908790879060040161a986565b600060405180830381600087803b1580156110f257600080fd5b505af1158015611106573d6000803e3d6000fd5b505050505050565b6024805460275460405160009381018490526001600160a01b03928316604482015291166064820152819060840160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f357fc5a200000000000000000000000000000000000000000000000000000000179052602854905163ca669fa760e01b81526001600160a01b039091166004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa7906024015b600060405180830381600087803b1580156111f057600080fd5b505af1158015611204573d6000803e3d6000fd5b50506040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527f951e19ed000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e0915060240161104d565b606060168054806020026020016040519081016040528092919081815260200182805480156112d057602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116112b2575b5050505050905090565b6022546025546040517fd936547e0000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152600092919091169063d936547e90602401602060405180830381865afa158015611344573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611368919061a951565b9050611375600082616365565b6022546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b15801561140357600080fd5b505af1158015611417573d6000803e3d6000fd5b50506025546040516001600160a01b0390911692507faab7954e9d246b167ef88aeddad35209ca2489d95a8aeb59e288d9b19fae5a549150600090a260265460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156114ac57600080fd5b505af11580156114c0573d6000803e3d6000fd5b50506022546025546040517f9b19251a0000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015291169250639b19251a9150602401600060405180830381600087803b15801561152657600080fd5b505af115801561153a573d6000803e3d6000fd5b50506022546025546040517fd936547e0000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201529116925063d936547e9150602401602060405180830381865afa1580156115a3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115c7919061a951565b90506115d4600182616365565b50565b6060601e805480602002602001604051908101604052809291908181526020016000905b8282101561171057600084815260208082206040805180820182526002870290920180546001600160a01b03168352600181018054835181870281018701909452808452939591948681019491929084015b828210156116f957838290600052602060002001805461166c9061a9bd565b80601f01602080910402602001604051908101604052809291908181526020018280546116989061a9bd565b80156116e55780601f106116ba576101008083540402835291602001916116e5565b820191906000526020600020905b8154815290600101906020018083116116c857829003601f168201915b50505050508152602001906001019061164d565b5050505081525050815260200190600101906115fb565b50505050905090565b60405163ca669fa760e01b81526101236004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561176757600080fd5b505af115801561177b573d6000803e3d6000fd5b50506040805161012360248201527f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a60448083019190915282518083039091018152606490910182526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f0000000000000000000000000000000000000000000000000000000017905290517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb3925061185c919060040161a973565b600060405180830381600087803b15801561187657600080fd5b505af115801561188a573d6000803e3d6000fd5b50506022546025546040517f9b19251a0000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015291169250639b19251a9150602401610e35565b606060188054806020026020016040519081016040528092919081815260200182805480156112d0576020028201919060005260206000209081546001600160a01b031681526001909101906020018083116112b2575050505050905090565b602480546027546040516370a0823160e01b81526001600160a01b039182166004820152620186a09360009392909216916370a082319101602060405180830381865afa158015611990573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119b4919061aa0a565b90506119c18160006163e7565b602480546022546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa158015611a11573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a35919061aa0a565b6027546040516001600160a01b0390911660248201526044810185905290915060009060640160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb0000000000000000000000000000000000000000000000000000000017905260245490517ff30c7ba3000000000000000000000000000000000000000000000000000000008152919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f30c7ba391611b18916001600160a01b039190911690600090869060040161aa23565b600060405180830381600087803b158015611b3257600080fd5b505af1158015611b46573d6000803e3d6000fd5b50506022546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b158015611bd857600080fd5b505af1158015611bec573d6000803e3d6000fd5b50506027546024546040518881526001600160a01b039283169450911691507f9b1bfa7fa9ee420a16e124f794c35ac9f90472acc99140eb2f6447c714cad8eb9060200160405180910390a360285460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015611c9157600080fd5b505af1158015611ca5573d6000803e3d6000fd5b5050602254602480546027546040517fd9caed120000000000000000000000000000000000000000000000000000000081526001600160a01b0392831660048201529082169281019290925260448201899052909116925063d9caed129150606401600060405180830381600087803b158015611d2157600080fd5b505af1158015611d35573d6000803e3d6000fd5b5050602480546027546040516370a0823160e01b81526001600160a01b03918216600482015260009550911692506370a082319101602060405180830381865afa158015611d87573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611dab919061aa0a565b9050611db781866163e7565b602480546022546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa158015611e07573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e2b919061aa0a565b9050611e4081611e3b888761aa7a565b6163e7565b602480546020546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa158015611e90573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611eb4919061aa0a565b9050611ec18160006163e7565b50505050505050565b60248054602754604051620186a09381018490526001600160a01b0392831660448201529116606482015260009060840160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f357fc5a200000000000000000000000000000000000000000000000000000000179052602654905163ca669fa760e01b81526001600160a01b039091166004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401610f34565b606060178054806020026020016040519081016040528092919081815260200182805480156112d0576020028201919060005260206000209081546001600160a01b031681526001909101906020018083116112b2575050505050905090565b6040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b15801561207e57600080fd5b505af1158015612092573d6000803e3d6000fd5b5050602854602654604051600094508493506001600160a01b0392831692909116906120bd9061a4c0565b6001600160a01b03938416815291831660208301529091166040820152606001604051809103906000f0801580156120f9573d6000803e3d6000fd5b506040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fd92e233d000000000000000000000000000000000000000000000000000000006004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b15801561218257600080fd5b505af1158015612196573d6000803e3d6000fd5b50506020546026546040516001600160a01b039283169450600093509116906121be9061a4c0565b6001600160a01b03938416815291831660208301529091166040820152606001604051809103906000f0801580156121fa573d6000803e3d6000fd5b506040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fd92e233d000000000000000000000000000000000000000000000000000000006004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b15801561228357600080fd5b505af1158015612297573d6000803e3d6000fd5b50506020546028546040516001600160a01b039283169450911691506000906122bf9061a4c0565b6001600160a01b03938416815291831660208301529091166040820152606001604051809103906000f0801580156122fb573d6000803e3d6000fd5b506020546028546026546040519394506001600160a01b03928316939183169216906123269061a4c0565b6001600160a01b03938416815291831660208301529091166040820152606001604051809103906000f080158015612362573d6000803e3d6000fd5b505050565b6024805460275460405160019381018490526001600160a01b0392831660448201529116606482015260009060840160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f357fc5a200000000000000000000000000000000000000000000000000000000179052602854905163ca669fa760e01b81526001600160a01b039091166004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561244957600080fd5b505af115801561245d573d6000803e3d6000fd5b50506040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b1580156124e657600080fd5b505af11580156124fa573d6000803e3d6000fd5b50506022546024546040517f21fc65f20000000000000000000000000000000000000000000000000000000081526001600160a01b0392831694506321fc65f293506110d892909116906000908790879060040161a986565b6060601b805480602002602001604051908101604052809291908181526020016000905b8282101561171057838290600052602060002090600202016040518060400160405290816000820180546125aa9061a9bd565b80601f01602080910402602001604051908101604052809291908181526020018280546125d69061a9bd565b80156126235780601f106125f857610100808354040283529160200191612623565b820191906000526020600020905b81548152906001019060200180831161260657829003601f168201915b50505050508152602001600182018054806020026020016040519081016040528092919081815260200182805480156126bd57602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168152602001906004019060208260030104928301926001038202915080841161266a5790505b50505050508152505081526020019060010190612577565b6024805460275460405160009381018490526001600160a01b03928316604482015291166064820152819060840160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fc513169100000000000000000000000000000000000000000000000000000000179052602854905163ca669fa760e01b81526001600160a01b039091166004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa7906024016111d6565b6040517f68656c6c6f0000000000000000000000000000000000000000000000000000006020820152620186a09060009060250160408051808303601f1901815290829052602480546021546370a0823160e01b85526001600160a01b0390811660048601529294506000939216916370a082319101602060405180830381865afa158015612834573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612858919061aa0a565b90506128658160006163e7565b602480546022546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa1580156128b5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128d9919061aa0a565b6020546040516001600160a01b0390911660248201526044810186905290915060009060640160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb0000000000000000000000000000000000000000000000000000000017905260245490517ff30c7ba3000000000000000000000000000000000000000000000000000000008152919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f30c7ba3916129bc916001600160a01b039190911690600090869060040161aa23565b600060405180830381600087803b1580156129d657600080fd5b505af11580156129ea573d6000803e3d6000fd5b50506021546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b158015612a7c57600080fd5b505af1158015612a90573d6000803e3d6000fd5b50506020546040517f0d3f65f00e631663aa85c96330b5c7a83bb29af3630c0063776f985edc3037aa9350612ad392506001600160a01b0390911690879061aa8d565b60405180910390a16020546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b158015612b6957600080fd5b505af1158015612b7d573d6000803e3d6000fd5b50506021546024546040516001600160a01b039283169450911691507f723fc7be2448075379e4fdf1e6bf5fead954d2668d2da05dcb44ccfec4beeda790612bc8908990899061aaaf565b60405180910390a36022546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b158015612c5e57600080fd5b505af1158015612c72573d6000803e3d6000fd5b50506021546024546040516001600160a01b039283169450911691507fb9d4efa96044e5f5e03e696fa9ae2ff66911cc27e8a637c3627c75bc5b2241c890612cbd908990899061aaaf565b60405180910390a360285460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015612d1e57600080fd5b505af1158015612d32573d6000803e3d6000fd5b50506022546024546021546040517fc8a023620000000000000000000000000000000000000000000000000000000081526001600160a01b03938416955063c8a023629450612d8f9392831692909116908a908a9060040161a986565b600060405180830381600087803b158015612da957600080fd5b505af1158015612dbd573d6000803e3d6000fd5b5050602480546021546040516370a0823160e01b81526001600160a01b03918216600482015260009550911692506370a0823191015b602060405180830381865afa158015612e10573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e34919061aa0a565b9050612e4081876163e7565b602480546022546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa158015612e90573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612eb4919061aa0a565b9050612ec481611e3b898761aa7a565b602480546020546021546040517fdd62ed3e0000000000000000000000000000000000000000000000000000000081526001600160a01b0392831660048201529082169381019390935260009291169063dd62ed3e90604401602060405180830381865afa158015612f3a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f5e919061aa0a565b9050612f6b8160006163e7565b602480546020546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa158015612fbb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612fdf919061aa0a565b9050612fec8160006163e7565b505050505050505050565b6040517f68656c6c6f000000000000000000000000000000000000000000000000000000602082015260019060009060250160408051808303601f190181529082905260285463ca669fa760e01b83526001600160a01b031660048301529150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561309057600080fd5b505af11580156130a4573d6000803e3d6000fd5b50506040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b15801561312d57600080fd5b505af1158015613141573d6000803e3d6000fd5b50506022546024546040517fc8a023620000000000000000000000000000000000000000000000000000000081526001600160a01b03928316945063c8a0236293506110d892909116906000908790879060040161a986565b6028546040517f06447d560000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906306447d5690602401600060405180830381600087803b15801561320c57600080fd5b505af1158015613220573d6000803e3d6000fd5b5050602254602480546040517f9a5904270000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015292169350639a590427925001600060405180830381600087803b15801561328557600080fd5b505af1158015613299573d6000803e3d6000fd5b50506040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527f584a7938000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b15801561332257600080fd5b505af1158015613336573d6000803e3d6000fd5b5050602254602480546027546040517fd9caed120000000000000000000000000000000000000000000000000000000081526001600160a01b0392831660048201529082169281019290925260016044830152909116925063d9caed129150606401600060405180830381600087803b1580156133b257600080fd5b505af11580156133c6573d6000803e3d6000fd5b505050507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b03166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610e4f57600080fd5b6060601a805480602002602001604051908101604052809291908181526020016000905b8282101561171057838290600052602060002001805461346b9061a9bd565b80601f01602080910402602001604051908101604052809291908181526020018280546134979061a9bd565b80156134e45780601f106134b9576101008083540402835291602001916134e4565b820191906000526020600020905b8154815290600101906020018083116134c757829003601f168201915b50505050508152602001906001019061344c565b6060601d805480602002602001604051908101604052809291908181526020016000905b828210156117105760008481526020908190206040805180820182526002860290920180546001600160a01b031683526001810180548351818702810187019094528084529394919385830193928301828280156135db57602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190600401906020826003010492830192600103820291508084116135885790505b5050505050815250508152602001906001019061351c565b602480546027546040516001938101939093526001600160a01b03918216604484015216606482015260009060840160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f357fc5a20000000000000000000000000000000000000000000000000000000017905260285490517f06447d560000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d906306447d5690602401600060405180830381600087803b1580156136ee57600080fd5b505af1158015613702573d6000803e3d6000fd5b5050602254602480546040517f9a5904270000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015292169350639a590427925001600060405180830381600087803b15801561376757600080fd5b505af115801561377b573d6000803e3d6000fd5b50506040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527f584a7938000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b15801561380457600080fd5b505af1158015613818573d6000803e3d6000fd5b50506022546024546021546040517f21fc65f20000000000000000000000000000000000000000000000000000000081526001600160a01b0393841695506321fc65f29450613876939283169290911690600190879060040161a986565b600060405180830381600087803b15801561389057600080fd5b505af11580156138a4573d6000803e3d6000fd5b505050507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b03166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561390657600080fd5b505af115801561391a573d6000803e3d6000fd5b5050505050565b604080516004808252602480830184526020830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f6ed7016900000000000000000000000000000000000000000000000000000000179052805460275494516370a0823160e01b81526001600160a01b0395861693810193909352620186a0946000939116916370a082319101602060405180830381865afa1580156139cb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906139ef919061aa0a565b90506139fc8160006163e7565b602480546022546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa158015613a4c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a70919061aa0a565b6020546040516001600160a01b0390911660248201526044810186905290915060009060640160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb0000000000000000000000000000000000000000000000000000000017905260245490517ff30c7ba3000000000000000000000000000000000000000000000000000000008152919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f30c7ba391613b53916001600160a01b039190911690600090869060040161aa23565b600060405180830381600087803b158015613b6d57600080fd5b505af1158015613b81573d6000803e3d6000fd5b50506021546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b158015613c1357600080fd5b505af1158015613c27573d6000803e3d6000fd5b5050602080546040516001600160a01b0390911681527fbcaadb46b82a48af60b608f58959ae6b8310d1b0a0d094c2e9ec3208ed39f2a0935001905060405180910390a16022546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b158015613cf957600080fd5b505af1158015613d0d573d6000803e3d6000fd5b50506021546024546040516001600160a01b039283169450911691507f85b5be9cf454e05e0bddf49315178102227c312078eefa3c00294fb4d912ae4e90613d58908990899061aaaf565b60405180910390a360285460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015613db957600080fd5b505af1158015613dcd573d6000803e3d6000fd5b50506022546024546021546040517f21fc65f20000000000000000000000000000000000000000000000000000000081526001600160a01b0393841695506321fc65f29450613e2a9392831692909116908a908a9060040161a986565b600060405180830381600087803b158015613e4457600080fd5b505af1158015613e58573d6000803e3d6000fd5b5050602480546027546040516370a0823160e01b81526001600160a01b03918216600482015260009550911692506370a082319101602060405180830381865afa158015613eaa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613ece919061aa0a565b9050613edb8160006163e7565b602480546022546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa158015613f2b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613f4f919061aa0a565b9050612ec481856163e7565b6040517f68656c6c6f0000000000000000000000000000000000000000000000000000006020820152620186a09060009060250160408051808303601f190181529082905260265463ca669fa760e01b83526001600160a01b031660048301529150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015613ff657600080fd5b505af115801561400a573d6000803e3d6000fd5b5050602654604080516001600160a01b0390921660248301527f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e460448084019190915281518084039091018152606490920181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb392506140f5919060040161a973565b600060405180830381600087803b15801561410f57600080fd5b505af1158015614123573d6000803e3d6000fd5b50506022546024546021546040517fc8a023620000000000000000000000000000000000000000000000000000000081526001600160a01b03938416955063c8a0236294506110d89392831692909116908790879060040161a986565b6060601c805480602002602001604051908101604052809291908181526020016000905b828210156117105760008481526020908190206040805180820182526002860290920180546001600160a01b0316835260018101805483518187028101870190945280845293949193858301939283018282801561426357602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190600401906020826003010492830192600103820291508084116142105790505b505050505081525050815260200190600101906141a4565b60606019805480602002602001604051908101604052809291908181526020016000905b828210156117105783829060005260206000200180546142be9061a9bd565b80601f01602080910402602001604051908101604052809291908181526020018280546142ea9061a9bd565b80156143375780601f1061430c57610100808354040283529160200191614337565b820191906000526020600020905b81548152906001019060200180831161431a57829003601f168201915b50505050508152602001906001019061429f565b60085460009060ff1615614363575060085460ff1690565b6040517f667f9d70000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d600482018190527f6661696c65640000000000000000000000000000000000000000000000000000602483015260009163667f9d7090604401602060405180830381865afa1580156143f4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614418919061aa0a565b1415905090565b60285460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561447857600080fd5b505af115801561448c573d6000803e3d6000fd5b5050602854604080516001600160a01b0390921660248301527f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a60448084019190915281518084039091018152606490920181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb39250614577919060040161a973565b600060405180830381600087803b15801561459157600080fd5b505af11580156145a5573d6000803e3d6000fd5b50505050602260009054906101000a90046001600160a01b03166001600160a01b0316638456cb596040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156145f957600080fd5b505af115801561460d573d6000803e3d6000fd5b505060285460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b15801561466a57600080fd5b505af115801561467e573d6000803e3d6000fd5b5050602854604080516001600160a01b0390921660248301527f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a60448084019190915281518084039091018152606490920181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb39250614769919060040161a973565b600060405180830381600087803b15801561478357600080fd5b505af1158015614797573d6000803e3d6000fd5b50505050602060009054906101000a90046001600160a01b03166001600160a01b0316633f4ba83a6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156147eb57600080fd5b505af11580156147ff573d6000803e3d6000fd5b505060265460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b15801561485c57600080fd5b505af1158015614870573d6000803e3d6000fd5b50505050602260009054906101000a90046001600160a01b03166001600160a01b0316638456cb596040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156148c457600080fd5b505af11580156148d8573d6000803e3d6000fd5b505060248054602754604051620186a09381018490526001600160a01b039283166044820152911660648201529092506000915060840160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f357fc5a200000000000000000000000000000000000000000000000000000000179052517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fd93c0665000000000000000000000000000000000000000000000000000000006004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b1580156149ed57600080fd5b505af1158015614a01573d6000803e3d6000fd5b505060285460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b158015614a5e57600080fd5b505af1158015614a72573d6000803e3d6000fd5b50506022546024546021546040517f21fc65f20000000000000000000000000000000000000000000000000000000081526001600160a01b0393841695506321fc65f29450614acf9392831692909116908790879060040161a986565b600060405180830381600087803b158015614ae957600080fd5b505af1158015614afd573d6000803e3d6000fd5b505060265460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b158015614b5a57600080fd5b505af1158015614b6e573d6000803e3d6000fd5b50505050602260009054906101000a90046001600160a01b03166001600160a01b0316633f4ba83a6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015614bc257600080fd5b505af1158015614bd6573d6000803e3d6000fd5b5050602480546027546040516370a0823160e01b81526001600160a01b03918216600482015260009550911692506370a0823191015b602060405180830381865afa158015614c29573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614c4d919061aa0a565b9050614c5a8160006163e7565b602480546022546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa158015614caa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614cce919061aa0a565b6020546040516001600160a01b0390911660248201526044810186905290915060009060640160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb0000000000000000000000000000000000000000000000000000000017905260245490517ff30c7ba3000000000000000000000000000000000000000000000000000000008152919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f30c7ba391614db1916001600160a01b039190911690600090869060040161aa23565b600060405180830381600087803b158015614dcb57600080fd5b505af1158015614ddf573d6000803e3d6000fd5b50506021546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b158015614e7157600080fd5b505af1158015614e85573d6000803e3d6000fd5b505060208054602454602754604080516001600160a01b0394851681529485018c905291831684830152919091166060830152517f2b58128f24a9f59127cc5b5430d70542b22220f2d9adaa86e442b816ab98af609350908190036080019150a16022546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b158015614f7457600080fd5b505af1158015614f88573d6000803e3d6000fd5b50506021546024546040516001600160a01b039283169450911691507f85b5be9cf454e05e0bddf49315178102227c312078eefa3c00294fb4d912ae4e90614fd3908990899061aaaf565b60405180910390a360285460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561503457600080fd5b505af1158015615048573d6000803e3d6000fd5b50506022546024546021546040517f21fc65f20000000000000000000000000000000000000000000000000000000081526001600160a01b0393841695506321fc65f294506150a59392831692909116908a908a9060040161a986565b600060405180830381600087803b1580156150bf57600080fd5b505af11580156150d3573d6000803e3d6000fd5b5050602480546027546040516370a0823160e01b81526001600160a01b03918216600482015260009550911692506370a082319101612df3565b60248054602754604051620186a09381018490526001600160a01b0392831660448201529116606482015260009060840160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f357fc5a2000000000000000000000000000000000000000000000000000000001790526024805460275492516370a0823160e01b81526001600160a01b0393841660048201529394506000939216916370a082319101614c0c565b606060158054806020026020016040519081016040528092919081815260200182805480156112d0576020028201919060005260206000209081546001600160a01b031681526001909101906020018083116112b2575050505050905090565b600080604051602001615264907f68656c6c6f000000000000000000000000000000000000000000000000000000815260050190565b60408051808303601f190181529082905260285463ca669fa760e01b83526001600160a01b031660048301529150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156152cb57600080fd5b505af11580156152df573d6000803e3d6000fd5b50506040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527f951e19ed000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e091506024016140f5565b60405163ca669fa760e01b81526101236004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156153a157600080fd5b505af11580156153b5573d6000803e3d6000fd5b50506040805161012360248201527f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a60448083019190915282518083039091018152606490910182526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f0000000000000000000000000000000000000000000000000000000017905290517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb39250615496919060040161a973565b600060405180830381600087803b1580156154b057600080fd5b505af11580156154c4573d6000803e3d6000fd5b50506022546025546040517f9a5904270000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015291169250639a5904279150602401610e35565b602480546027546040516001938101939093526001600160a01b03918216604484015216606482015260009060840160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f357fc5a20000000000000000000000000000000000000000000000000000000017905260285490517f06447d560000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d906306447d5690602401600060405180830381600087803b15801561561057600080fd5b505af1158015615624573d6000803e3d6000fd5b5050602254602480546040517f9a5904270000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015292169350639a590427925001600060405180830381600087803b15801561568957600080fd5b505af115801561569d573d6000803e3d6000fd5b50506040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527f584a7938000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b15801561572657600080fd5b505af115801561573a573d6000803e3d6000fd5b50506022546024546021546040517fc8a023620000000000000000000000000000000000000000000000000000000081526001600160a01b03938416955063c8a023629450613876939283169290911690600190879060040161a986565b602254602480546040517fd936547e0000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152600093919091169163d936547e9101602060405180830381865afa158015615801573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190615825919061a951565b9050615832600182616365565b6022546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b1580156158c057600080fd5b505af11580156158d4573d6000803e3d6000fd5b50506024546040516001600160a01b0390911692507f51085ddf9ebdded84b76e829eb58c4078e4b5bdf97d9a94723f336039da467919150600090a260265460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561596957600080fd5b505af115801561597d573d6000803e3d6000fd5b5050602254602480546040517f9a5904270000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015292169350639a590427925001600060405180830381600087803b1580156159e257600080fd5b505af11580156159f6573d6000803e3d6000fd5b5050602254602480546040517fd936547e0000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201529216935063d936547e925001602060405180830381865afa158015615a5e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190615a82919061a951565b90506115d4600082616365565b60248054602754604051620186a09381018490526001600160a01b0392831660448201529116606482015260009060840160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fc5131691000000000000000000000000000000000000000000000000000000001790526024805460275492516370a0823160e01b81526001600160a01b0393841660048201529394506000939216916370a082319101602060405180830381865afa158015615b68573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190615b8c919061aa0a565b9050615b998160006163e7565b602480546022546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa158015615be9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190615c0d919061aa0a565b6020546040516001600160a01b0390911660248201526044810186905290915060009060640160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb0000000000000000000000000000000000000000000000000000000017905260245490517ff30c7ba3000000000000000000000000000000000000000000000000000000008152919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f30c7ba391615cf0916001600160a01b039190911690600090869060040161aa23565b600060405180830381600087803b158015615d0a57600080fd5b505af1158015615d1e573d6000803e3d6000fd5b50506021546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b158015615db057600080fd5b505af1158015615dc4573d6000803e3d6000fd5b50506020547f2b58128f24a9f59127cc5b5430d70542b22220f2d9adaa86e442b816ab98af6092506001600160a01b03169050615e0260028861aac8565b602454602754604080516001600160a01b03958616815260208101949094529184168383015292909216606082015290519081900360800190a16022546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b158015615eca57600080fd5b505af1158015615ede573d6000803e3d6000fd5b50506021546024546040516001600160a01b039283169450911691507f85b5be9cf454e05e0bddf49315178102227c312078eefa3c00294fb4d912ae4e90615f29908990899061aaaf565b60405180910390a360285460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015615f8a57600080fd5b505af1158015615f9e573d6000803e3d6000fd5b50506022546024546021546040517f21fc65f20000000000000000000000000000000000000000000000000000000081526001600160a01b0393841695506321fc65f29450615ffb9392831692909116908a908a9060040161a986565b600060405180830381600087803b15801561601557600080fd5b505af1158015616029573d6000803e3d6000fd5b5050602480546027546040516370a0823160e01b81526001600160a01b03918216600482015260009550911692506370a082319101602060405180830381865afa15801561607b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061609f919061aa0a565b90506160b081611e3b60028961aac8565b602480546022546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa158015616100573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190616124919061aa0a565b9050612ec48161613560028a61aac8565b611e3b908761aa7a565b60265460405163ca669fa760e01b81526001600160a01b039091166004820152620186a090737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561619d57600080fd5b505af11580156161b1573d6000803e3d6000fd5b5050602654604080516001600160a01b0390921660248301527f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e460448084019190915281518084039091018152606490920181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb3925061629c919060040161a973565b600060405180830381600087803b1580156162b657600080fd5b505af11580156162ca573d6000803e3d6000fd5b5050602254602480546027546040517fd9caed120000000000000000000000000000000000000000000000000000000081526001600160a01b0392831660048201529082169281019290925260448201869052909116925063d9caed129150606401600060405180830381600087803b15801561390657600080fd5b600061635061a4ea565b61635b84848361643f565b9150505b92915050565b6040517ff7fe347700000000000000000000000000000000000000000000000000000000815282151560048201528115156024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063f7fe3477906044015b60006040518083038186803b1580156163d357600080fd5b505afa158015611106573d6000803e3d6000fd5b6040517f98296c540000000000000000000000000000000000000000000000000000000081526004810183905260248101829052737109709ecfa91a80626ff3989d68f67f5b1dd12d906398296c54906044016163bb565b60008061644c85846164ba565b90506164af6040518060400160405280601d81526020017f4552433139363750726f78792e736f6c3a4552433139363750726f7879000000815250828660405160200161649a92919061aa8d565b604051602081830303815290604052856164c6565b9150505b9392505050565b60006164b383836164f4565b60c081015151600090156164ea576164e384848460c0015161650f565b90506164b3565b6164e384846166b5565b600061650083836167a0565b6164b3838360200151846164c6565b60008061651a6167b0565b905060006165288683616883565b9050600061653f8260600151836020015185616d29565b9050600061654f83838989616f3b565b9050600061655c82617db8565b602081015181519192509060030b156165cf5789826040015160405160200161658692919061ab03565b60408051601f19818403018152908290527f08c379a00000000000000000000000000000000000000000000000000000000082526165c69160040161a973565b60405180910390fd5b60006166126040518060400160405280601581526020017f4465706c6f79656420746f20616464726573733a200000000000000000000000815250836001617f87565b6040517fc6ce059d000000000000000000000000000000000000000000000000000000008152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c6ce059d9061666590849060040161a973565b602060405180830381865afa158015616682573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906166a6919061ab84565b9b9a5050505050505050505050565b6040517f8d1cc9250000000000000000000000000000000000000000000000000000000081526000908190737109709ecfa91a80626ff3989d68f67f5b1dd12d90638d1cc9259061670a90879060040161a973565b600060405180830381865afa158015616727573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261674f919081019061ac95565b9050600061677d828560405160200161676992919061acca565b604051602081830303815290604052618187565b90506001600160a01b03811661635b57848460405160200161658692919061acf9565b6167ac8282600061819a565b5050565b604080518082018252600381527f6f75740000000000000000000000000000000000000000000000000000000000602082015290517fd145736c000000000000000000000000000000000000000000000000000000008152606091737109709ecfa91a80626ff3989d68f67f5b1dd12d91829063d145736c9061683790849060040161ada4565b600060405180830381865afa158015616854573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261687c919081019061adeb565b9250505090565b6168b56040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b6000737109709ecfa91a80626ff3989d68f67f5b1dd12d90506169006040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b6169098561829d565b6020820152600061691986618682565b90506000836001600160a01b031663d930a0e66040518163ffffffff1660e01b8152600401600060405180830381865afa15801561695b573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052616983919081019061adeb565b8683856020015160405160200161699d949392919061ae34565b60408051601f19818403018152908290527f60f9bb1100000000000000000000000000000000000000000000000000000000825291506000906001600160a01b038616906360f9bb11906169f590859060040161a973565b600060405180830381865afa158015616a12573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052616a3a919081019061adeb565b6040517fdb4235f60000000000000000000000000000000000000000000000000000000081529091506001600160a01b0386169063db4235f690616a8290849060040161af38565b602060405180830381865afa158015616a9f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190616ac3919061a951565b616ad85781604051602001616586919061af8a565b6040517f49c4fac80000000000000000000000000000000000000000000000000000000081526001600160a01b038616906349c4fac890616b1d90849060040161b01c565b600060405180830381865afa158015616b3a573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052616b62919081019061adeb565b84526040517fdb4235f60000000000000000000000000000000000000000000000000000000081526001600160a01b0386169063db4235f690616ba990849060040161b06e565b602060405180830381865afa158015616bc6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190616bea919061a951565b15616c7f576040517f49c4fac80000000000000000000000000000000000000000000000000000000081526001600160a01b038616906349c4fac890616c3490849060040161b06e565b600060405180830381865afa158015616c51573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052616c79919081019061adeb565b60408501525b846001600160a01b03166349c4fac8828660000151604051602001616ca4919061b0c0565b6040516020818303038152906040526040518363ffffffff1660e01b8152600401616cd092919061b12c565b600060405180830381865afa158015616ced573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052616d15919081019061adeb565b606085015250608083015250949350505050565b60408051600480825260a0820190925260609160009190816020015b6060815260200190600190039081616d455790505090506040518060400160405280600481526020017f677265700000000000000000000000000000000000000000000000000000000081525081600081518110616da557616da561b151565b60200260200101819052506040518060400160405280600381526020017f2d726c000000000000000000000000000000000000000000000000000000000081525081600181518110616df957616df961b151565b602002602001018190525084604051602001616e15919061b180565b60405160208183030381529060405281600281518110616e3757616e3761b151565b602002602001018190525082604051602001616e53919061b1ec565b60405160208183030381529060405281600381518110616e7557616e7561b151565b60200260200101819052506000616e8b82617db8565b602080820151604080518082018252600581527f2e6a736f6e0000000000000000000000000000000000000000000000000000008185019081528251808401845260008082529086015282518084019093529051825292810192909252919250616f1c9060408051808201825260008082526020918201528151808301909252845182528085019082015290618905565b616f315785604051602001616586919061b22d565b9695505050505050565b60a0810151604080518082018252600080825260209182015281518083019092528251808352928101910152606090737109709ecfa91a80626ff3989d68f67f5b1dd12d9015616f8b565b511590565b6170ff57826020015115617047576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605860248201527f54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f742060448201527f62652075736564207768656e207468652060736b6970566572696679536f757260648201527f6365436f646560206f7074696f6e206973206074727565600000000000000000608482015260a4016165c6565b8260c00151156170ff576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605360248201527f54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f742060448201527f62652075736564207768656e207468652060736b69704c6963656e736554797060648201527f6560206f7074696f6e2069732060747275656000000000000000000000000000608482015260a4016165c6565b6040805160ff8082526120008201909252600091816020015b606081526020019060019003908161711857905050905060006040518060400160405280600381526020017f6e707800000000000000000000000000000000000000000000000000000000008152508282806171739061b2be565b935060ff16815181106171885761718861b151565b60200260200101819052506040518060400160405280600d81526020017f302e302e312d616c7068612e37000000000000000000000000000000000000008152506040516020016171d9919061b2dd565b6040516020818303038152906040528282806171f49061b2be565b935060ff16815181106172095761720961b151565b60200260200101819052506040518060400160405280600681526020017f6465706c6f7900000000000000000000000000000000000000000000000000008152508282806172569061b2be565b935060ff168151811061726b5761726b61b151565b60200260200101819052506040518060400160405280600e81526020017f2d2d636f6e74726163744e616d650000000000000000000000000000000000008152508282806172b89061b2be565b935060ff16815181106172cd576172cd61b151565b602002602001018190525087602001518282806172e99061b2be565b935060ff16815181106172fe576172fe61b151565b60200260200101819052506040518060400160405280600e81526020017f2d2d636f6e74726163745061746800000000000000000000000000000000000081525082828061734b9061b2be565b935060ff16815181106173605761736061b151565b6020908102919091010152875182826173788161b2be565b935060ff168151811061738d5761738d61b151565b60200260200101819052506040518060400160405280600981526020017f2d2d636861696e496400000000000000000000000000000000000000000000008152508282806173da9061b2be565b935060ff16815181106173ef576173ef61b151565b602002602001018190525061740346618966565b828261740e8161b2be565b935060ff16815181106174235761742361b151565b60200260200101819052506040518060400160405280600f81526020017f2d2d6275696c64496e666f46696c6500000000000000000000000000000000008152508282806174709061b2be565b935060ff16815181106174855761748561b151565b60200260200101819052508682828061749d9061b2be565b935060ff16815181106174b2576174b261b151565b60209081029190910101528551156175d95760408051808201909152601581527f2d2d636f6e7374727563746f7242797465636f64650000000000000000000000602082015282826175038161b2be565b935060ff16815181106175185761751861b151565b60209081029190910101526040517f71aad10d0000000000000000000000000000000000000000000000000000000081526001600160a01b038416906371aad10d9061756890899060040161a973565b600060405180830381865afa158015617585573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526175ad919081019061adeb565b82826175b88161b2be565b935060ff16815181106175cd576175cd61b151565b60200260200101819052505b8460200151156176a95760408051808201909152601281527f2d2d766572696679536f75726365436f64650000000000000000000000000000602082015282826176228161b2be565b935060ff16815181106176375761763761b151565b60200260200101819052506040518060400160405280600581526020017f66616c73650000000000000000000000000000000000000000000000000000008152508282806176849061b2be565b935060ff16815181106176995761769961b151565b6020026020010181905250617870565b6176e1616f868660a0015160408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6177745760408051808201909152600d81527f2d2d6c6963656e73655479706500000000000000000000000000000000000000602082015282826177248161b2be565b935060ff16815181106177395761773961b151565b60200260200101819052508460a00151604051602001617759919061b180565b6040516020818303038152906040528282806176849061b2be565b8460c001511580156177b75750604080890151815180830183526000808252602091820152825180840190935281518352908101908201526177b590511590565b155b156178705760408051808201909152600d81527f2d2d6c6963656e73655479706500000000000000000000000000000000000000602082015282826177fb8161b2be565b935060ff16815181106178105761781061b151565b602002602001018190525061782488618a06565b604051602001617834919061b180565b60405160208183030381529060405282828061784f9061b2be565b935060ff16815181106178645761786461b151565b60200260200101819052505b604080860151815180830183526000808252602091820152825180840190935281518352908101908201526178a490511590565b6179395760408051808201909152600b81527f2d2d72656c617965724964000000000000000000000000000000000000000000602082015282826178e78161b2be565b935060ff16815181106178fc576178fc61b151565b602002602001018190525084604001518282806179189061b2be565b935060ff168151811061792d5761792d61b151565b60200260200101819052505b606085015115617a5a5760408051808201909152600681527f2d2d73616c740000000000000000000000000000000000000000000000000000602082015282826179828161b2be565b935060ff16815181106179975761799761b151565b602090810291909101015260608501516040517fb11a19e800000000000000000000000000000000000000000000000000000000815260048101919091526001600160a01b0384169063b11a19e890602401600060405180830381865afa158015617a06573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052617a2e919081019061adeb565b8282617a398161b2be565b935060ff1681518110617a4e57617a4e61b151565b60200260200101819052505b60e08501515115617b015760408051808201909152600a81527f2d2d6761734c696d69740000000000000000000000000000000000000000000060208201528282617aa48161b2be565b935060ff1681518110617ab957617ab961b151565b6020026020010181905250617ad58560e0015160000151618966565b8282617ae08161b2be565b935060ff1681518110617af557617af561b151565b60200260200101819052505b60e08501516020015115617bab5760408051808201909152600a81527f2d2d67617350726963650000000000000000000000000000000000000000000060208201528282617b4e8161b2be565b935060ff1681518110617b6357617b6361b151565b6020026020010181905250617b7f8560e0015160200151618966565b8282617b8a8161b2be565b935060ff1681518110617b9f57617b9f61b151565b60200260200101819052505b60e08501516040015115617c555760408051808201909152600e81527f2d2d6d617846656550657247617300000000000000000000000000000000000060208201528282617bf88161b2be565b935060ff1681518110617c0d57617c0d61b151565b6020026020010181905250617c298560e0015160400151618966565b8282617c348161b2be565b935060ff1681518110617c4957617c4961b151565b60200260200101819052505b60e08501516060015115617cff5760408051808201909152601681527f2d2d6d61785072696f726974794665655065724761730000000000000000000060208201528282617ca28161b2be565b935060ff1681518110617cb757617cb761b151565b6020026020010181905250617cd38560e0015160600151618966565b8282617cde8161b2be565b935060ff1681518110617cf357617cf361b151565b60200260200101819052505b60008160ff1667ffffffffffffffff811115617d1d57617d1d61abad565b604051908082528060200260200182016040528015617d5057816020015b6060815260200190600190039081617d3b5790505b50905060005b8260ff168160ff161015617da957838160ff1681518110617d7957617d7961b151565b6020026020010151828260ff1681518110617d9657617d9661b151565b6020908102919091010152600101617d56565b5093505050505b949350505050565b617ddf6040518060600160405280600060030b815260200160608152602001606081525090565b60408051808201825260048082527f6261736800000000000000000000000000000000000000000000000000000000602083015291517fd145736c000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d92600091849163d145736c91617e659186910161b348565b600060405180830381865afa158015617e82573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052617eaa919081019061adeb565b90506000617eb886836194f5565b90506000846001600160a01b031663f45c1ce7836040518263ffffffff1660e01b8152600401617ee8919061a843565b6000604051808303816000875af1158015617f07573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052617f2f919081019061b38f565b805190915060030b15801590617f485750602081015151155b8015617f575750604081015151155b15616f315781600081518110617f6f57617f6f61b151565b6020026020010151604051602001616586919061b445565b60606000617fbc8560408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600080825260209182015281518083019092528651825280870190820152909150617ff39082905b9061964a565b156181505760006180708261806a846180646180368a60408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6040805180820182526000808252602091820152815180830190925282518252918201519181019190915290565b90619671565b906196d3565b604080518082018252600181527f0a00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201529091506180d490829061964a565b1561813e57604080518082018252600181527f0a000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261813b905b8290619758565b90505b6181478161977e565b925050506164b3565b821561816957848460405160200161658692919061b631565b50506040805160208101909152600081526164b3565b509392505050565b6000808251602084016000f09392505050565b8160a00151156181a957505050565b60006181b68484846197e7565b905060006181c382617db8565b602081015181519192509060030b15801561825f5750604080518082018252600781527f53554343455353000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261825f90604080518082018252600080825260209182015281518083019092528451825280850190820152617fed565b1561826c57505050505050565b6040820151511561828c578160400151604051602001616586919061b6d8565b80604051602001616586919061b736565b606060006182d28360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600481527f2e736f6c0000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152909150618337905b8290618905565b156183a657604080518082018252600481527f2e736f6c00000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526164b3906183a1908390619d82565b61977e565b604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152618408905b8290619e0c565b6001036184d557604080518082018252600181527f3a000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261846e90618134565b50604080518082018252600181527f3a00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526164b3906183a1905b8390619758565b604080518082018252600581527f2e6a736f6e0000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261853490618330565b1561866b57604080518082018252600181527f2f0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082018190528451808601909552925184528301529061859c908390619ea6565b9050600081600183516185af919061aa7a565b815181106185bf576185bf61b151565b602002602001015190506186626183a16186356040518060400160405280600581526020017f2e6a736f6e00000000000000000000000000000000000000000000000000000081525060408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b60408051808201825260008082526020918201528151808301909252855182528086019082015290619d82565b95945050505050565b82604051602001616586919061b7a1565b50919050565b606060006186b78360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600481527f2e736f6c000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015290915061871990618330565b15618727576164b38161977e565b604080518082018252600181527f3a000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261878690618401565b6001036187f057604080518082018252600181527f3a00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526164b3906183a1906184ce565b604080518082018252600581527f2e6a736f6e0000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261884f90618330565b1561866b57604080518082018252600181527f2f000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201819052845180860190955292518452830152906188b7908390619ea6565b90506001815111156188f35780600282516188d2919061aa7a565b815181106188e2576188e261b151565b602002602001015192505050919050565b5082604051602001616586919061b7a1565b80518251600091111561891a5750600061635f565b815183516020850151600092916189309161b87f565b61893a919061aa7a565b90508260200151810361895157600191505061635f565b82516020840151819020912014905092915050565b6060600061897383619f4b565b600101905060008167ffffffffffffffff8111156189935761899361abad565b6040519080825280601f01601f1916602001820160405280156189bd576020820181803683370190505b5090508181016020015b600019017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a85049450846189c757509392505050565b604081810151815180830183526000808252602091820181905283518085018552835181529282018383015283518085018552600a81527f554e4c4943454e5345440000000000000000000000000000000000000000000081840190815285518087018752838152840192909252845180860190955251845290830152606091618a92905b829061a02d565b15618ad257505060408051808201909152600481527f4e6f6e65000000000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600981527f556e6c6963656e7365000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152618b3190618a8b565b15618b7157505060408051808201909152600981527f556e6c6963656e736500000000000000000000000000000000000000000000006020820152919050565b604080518082018252600381527f4d4954000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152618bd090618a8b565b15618c1057505060408051808201909152600381527f4d495400000000000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f47504c2d322e302d6f6e6c79000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152618c6f90618a8b565b80618cd45750604080518082018252601081527f47504c2d322e302d6f722d6c617465720000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152618cd490618a8b565b15618d1457505060408051808201909152600981527f474e552047504c763200000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f47504c2d332e302d6f6e6c79000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152618d7390618a8b565b80618dd85750604080518082018252601081527f47504c2d332e302d6f722d6c617465720000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152618dd890618a8b565b15618e1857505060408051808201909152600981527f474e552047504c763300000000000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4c47504c2d322e312d6f6e6c790000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152618e7790618a8b565b80618edc5750604080518082018252601181527f4c47504c2d322e312d6f722d6c6174657200000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152618edc90618a8b565b15618f1c57505060408051808201909152600c81527f474e55204c47504c76322e3100000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4c47504c2d332e302d6f6e6c790000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152618f7b90618a8b565b80618fe05750604080518082018252601181527f4c47504c2d332e302d6f722d6c6174657200000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152618fe090618a8b565b1561902057505060408051808201909152600a81527f474e55204c47504c7633000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f4253442d322d436c6175736500000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261907f90618a8b565b156190bf57505060408051808201909152600c81527f4253442d322d436c6175736500000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f4253442d332d436c6175736500000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261911e90618a8b565b1561915e57505060408051808201909152600c81527f4253442d332d436c6175736500000000000000000000000000000000000000006020820152919050565b604080518082018252600781527f4d504c2d322e3000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526191bd90618a8b565b156191fd57505060408051808201909152600781527f4d504c2d322e30000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600781527f4f534c2d332e30000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261925c90618a8b565b1561929c57505060408051808201909152600781527f4f534c2d332e30000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600a81527f4170616368652d322e3000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526192fb90618a8b565b1561933b57505060408051808201909152600a81527f4170616368652d322e30000000000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4147504c2d332e302d6f6e6c79000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261939a90618a8b565b806193ff5750604080518082018252601181527f4147504c2d332e302d6f722d6c61746572000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526193ff90618a8b565b1561943f57505060408051808201909152600a81527f474e55204147504c7633000000000000000000000000000000000000000000006020820152919050565b604080518082018252600881527f4255534c2d312e310000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261949e90618a8b565b156194de57505060408051808201909152600781527f42534c20312e31000000000000000000000000000000000000000000000000006020820152919050565b60408084015184519151616586929060200161b892565b60608060005b845181101561958057818582815181106195175761951761b151565b602002602001015160405160200161953092919061acca565b60405160208183030381529060405291506001855161954f919061aa7a565b81146195785781604051602001619566919061b9fb565b60405160208183030381529060405291505b6001016194fb565b5060408051600380825260808201909252600091816020015b606081526020019060019003908161959957905050905083816000815181106195c4576195c461b151565b60200260200101819052506040518060400160405280600281526020017f2d63000000000000000000000000000000000000000000000000000000000000815250816001815181106196185761961861b151565b602002602001018190525081816002815181106196375761963761b151565b6020908102919091010152949350505050565b6020808301518351835192840151600093619668929184919061a041565b14159392505050565b604080518082019091526000808252602082015260006196a3846000015185602001518560000151866020015161a152565b90508360200151816196b5919061aa7a565b845185906196c490839061aa7a565b90525060208401525090919050565b60408051808201909152600080825260208201528151835110156196f857508161635f565b602080830151908401516001911461971f5750815160208481015190840151829020919020145b80156197505782518451859061973690839061aa7a565b905250825160208501805161974c90839061b87f565b9052505b509192915050565b604080518082019091526000808252602082015261977783838361a272565b5092915050565b60606000826000015167ffffffffffffffff81111561979f5761979f61abad565b6040519080825280601f01601f1916602001820160405280156197c9576020820181803683370190505b5090506000602082019050619777818560200151866000015161a31d565b606060006197f36167b0565b6040805160ff808252612000820190925291925060009190816020015b606081526020019060019003908161981057905050905060006040518060400160405280600381526020017f6e7078000000000000000000000000000000000000000000000000000000000081525082828061986b9061b2be565b935060ff16815181106198805761988061b151565b60200260200101819052506040518060400160405280600781526020017f5e312e33322e33000000000000000000000000000000000000000000000000008152506040516020016198d1919061ba3c565b6040516020818303038152906040528282806198ec9061b2be565b935060ff16815181106199015761990161b151565b60200260200101819052506040518060400160405280600881526020017f76616c696461746500000000000000000000000000000000000000000000000081525082828061994e9061b2be565b935060ff16815181106199635761996361b151565b60200260200101819052508260405160200161997f919061b1ec565b60405160208183030381529060405282828061999a9061b2be565b935060ff16815181106199af576199af61b151565b60200260200101819052506040518060400160405280600a81526020017f2d2d636f6e7472616374000000000000000000000000000000000000000000008152508282806199fc9061b2be565b935060ff1681518110619a1157619a1161b151565b6020026020010181905250619a26878461a397565b8282619a318161b2be565b935060ff1681518110619a4657619a4661b151565b602090810291909101015285515115619af25760408051808201909152600b81527f2d2d7265666572656e636500000000000000000000000000000000000000000060208201528282619a988161b2be565b935060ff1681518110619aad57619aad61b151565b6020026020010181905250619ac686600001518461a397565b8282619ad18161b2be565b935060ff1681518110619ae657619ae661b151565b60200260200101819052505b856080015115619b605760408051808201909152601881527f2d2d756e73616665536b697053746f72616765436865636b000000000000000060208201528282619b3b8161b2be565b935060ff1681518110619b5057619b5061b151565b6020026020010181905250619bc6565b8415619bc65760408051808201909152601281527f2d2d726571756972655265666572656e6365000000000000000000000000000060208201528282619ba58161b2be565b935060ff1681518110619bba57619bba61b151565b60200260200101819052505b60408601515115619c625760408051808201909152600d81527f2d2d756e73616665416c6c6f770000000000000000000000000000000000000060208201528282619c108161b2be565b935060ff1681518110619c2557619c2561b151565b60200260200101819052508560400151828280619c419061b2be565b935060ff1681518110619c5657619c5661b151565b60200260200101819052505b856060015115619ccc5760408051808201909152601481527f2d2d756e73616665416c6c6f7752656e616d657300000000000000000000000060208201528282619cab8161b2be565b935060ff1681518110619cc057619cc061b151565b60200260200101819052505b60008160ff1667ffffffffffffffff811115619cea57619cea61abad565b604051908082528060200260200182016040528015619d1d57816020015b6060815260200190600190039081619d085790505b50905060005b8260ff168160ff161015619d7657838160ff1681518110619d4657619d4661b151565b6020026020010151828260ff1681518110619d6357619d6361b151565b6020908102919091010152600101619d23565b50979650505050505050565b6040805180820190915260008082526020820152815183511015619da757508161635f565b81518351602085015160009291619dbd9161b87f565b619dc7919061aa7a565b60208401519091506001908214619de8575082516020840151819020908220145b8015619e0357835185518690619dff90839061aa7a565b9052505b50929392505050565b6000808260000151619e30856000015186602001518660000151876020015161a152565b619e3a919061b87f565b90505b83516020850151619e4e919061b87f565b81116197775781619e5e8161ba81565b9250508260000151619e95856020015183619e79919061aa7a565b8651619e85919061aa7a565b838660000151876020015161a152565b619e9f919061b87f565b9050619e3d565b60606000619eb48484619e0c565b619ebf90600161b87f565b67ffffffffffffffff811115619ed757619ed761abad565b604051908082528060200260200182016040528015619f0a57816020015b6060815260200190600190039081619ef55790505b50905060005b815181101561817f57619f266183a18686619758565b828281518110619f3857619f3861b151565b6020908102919091010152600101619f10565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310619f94577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310619fc0576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc100008310619fde57662386f26fc10000830492506010015b6305f5e1008310619ff6576305f5e100830492506008015b612710831061a00a57612710830492506004015b6064831061a01c576064830492506002015b600a831061635f5760010192915050565b600061a039838361a3d7565b159392505050565b60008085841161a148576020841161a0f4576000841561a08c57600161a06886602061aa7a565b61a07390600861ba9b565b61a07e90600261bb99565b61a088919061aa7a565b1990505b835181168561a09b898961b87f565b61a0a5919061aa7a565b805190935082165b81811461a0df5787841161a0c75787945050505050617db0565b8361a0d18161bba5565b94505082845116905061a0ad565b61a0e9878561b87f565b945050505050617db0565b83832061a101858861aa7a565b61a10b908761b87f565b91505b85821061a1465784822080820361a1335761a129868461b87f565b9350505050617db0565b61a13e60018461aa7a565b92505061a10e565b505b5092949350505050565b6000838186851161a25d576020851161a20c576000851561a19e57600161a17a87602061aa7a565b61a18590600861ba9b565b61a19090600261bb99565b61a19a919061aa7a565b1990505b8451811660008761a1af8b8b61b87f565b61a1b9919061aa7a565b855190915083165b82811461a1fe5781861061a1e65761a1d98b8b61b87f565b9650505050505050617db0565b8561a1f08161ba81565b96505083865116905061a1c1565b859650505050505050617db0565b508383206000905b61a21e868961aa7a565b821161a25b5785832080820361a23a5783945050505050617db0565b61a24560018561b87f565b935050818061a2539061ba81565b92505061a214565b505b61a267878761b87f565b979650505050505050565b6040805180820190915260008082526020820152600061a2a4856000015186602001518660000151876020015161a152565b60208087018051918601919091525190915061a2c0908261aa7a565b83528451602086015161a2d3919061b87f565b810361a2e2576000855261a314565b8351835161a2f0919061b87f565b8551869061a2ff90839061aa7a565b905250835161a30e908261b87f565b60208601525b50909392505050565b6020811061a355578151835261a33460208461b87f565b925061a34160208361b87f565b915061a34e60208261aa7a565b905061a31d565b600019811561a38457600161a36b83602061aa7a565b61a3779061010061bb99565b61a381919061aa7a565b90505b9151835183169219169190911790915250565b6060600061a3a58484616883565b805160208083015160405193945061a3bf9390910161bbbc565b60405160208183030381529060405291505092915050565b815181516000919081111561a3ea575081515b6020808501519084015160005b8381101561a4a3578251825180821461a47357600019602087101561a4525760018461a42489602061aa7a565b61a42e919061b87f565b61a43990600861ba9b565b61a44490600261bb99565b61a44e919061aa7a565b1990505b818116838216818103911461a47057975061635f9650505050505050565b50505b61a47e60208661b87f565b945061a48b60208561b87f565b9350505060208161a49c919061b87f565b905061a3f7565b5084518651616f31919061bc14565b610c9f806200bc3583390190565b6116fe806200c8d483390190565b61155a806200dfd283390190565b610d5e806200f52c83390190565b6040518060e0016040528060608152602001606081526020016060815260200160001515815260200160001515815260200160001515815260200161a52d61a532565b905290565b6040518061010001604052806000151581526020016000151581526020016060815260200160008019168152602001606081526020016060815260200160001515815260200161a52d6040518060800160405280600081526020016000815260200160008152602001600081525090565b602080825282518282018190526000918401906040840190835b8181101561a5e45783516001600160a01b031683526020938401939092019160010161a5bd565b509095945050505050565b60005b8381101561a60a57818101518382015260200161a5f2565b50506000910152565b6000815180845261a62b81602086016020860161a5ef565b601f01601f19169290920160200192915050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b8281101561a73b577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452815180516001600160a01b03168652602090810151604082880181905281519088018190529101906060600582901b88018101919088019060005b8181101561a721577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa08a850301835261a70b84865161a613565b602095860195909450929092019160010161a6d1565b50919750505060209485019492909201915060010161a667565b50929695505050505050565b600081518084526020840193506020830160005b8281101561a79b5781517fffffffff000000000000000000000000000000000000000000000000000000001686526020958601959091019060010161a75b565b5093949350505050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b8281101561a73b577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452815180516040875261a811604088018261a613565b905060208201519150868103602088015261a82c818361a747565b96505050602093840193919091019060010161a7cd565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b8281101561a73b577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc087860301845261a8a585835161a613565b9450602093840193919091019060010161a86b565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b8281101561a73b577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc087860301845281516001600160a01b038151168652602081015190506040602087015261a93b604087018261a747565b955050602093840193919091019060010161a8e2565b60006020828403121561a96357600080fd5b815180151581146164b357600080fd5b6020815260006164b3602083018461a613565b6001600160a01b03851681526001600160a01b0384166020820152826040820152608060608201526000616f31608083018461a613565b600181811c9082168061a9d157607f821691505b60208210810361867c577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006020828403121561aa1c57600080fd5b5051919050565b6001600160a01b0384168152826020820152606060408201526000618662606083018461a613565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8181038181111561635f5761635f61aa4b565b6001600160a01b0383168152604060208201526000617db0604083018461a613565b828152604060208201526000617db0604083018461a613565b60008261aafe577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b7f4661696c656420746f206465706c6f7920636f6e74726163742000000000000081526000835161ab3b81601a85016020880161a5ef565b7f3a20000000000000000000000000000000000000000000000000000000000000601a91840191820152835161ab7881601c84016020880161a5ef565b01601c01949350505050565b60006020828403121561ab9657600080fd5b81516001600160a01b03811681146164b357600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040516060810167ffffffffffffffff8111828210171561abff5761abff61abad565b60405290565b60008067ffffffffffffffff84111561ac205761ac2061abad565b50604051601f19601f85018116603f0116810181811067ffffffffffffffff8211171561ac4f5761ac4f61abad565b60405283815290508082840185101561ac6757600080fd5b61817f84602083018561a5ef565b600082601f83011261ac8657600080fd5b6164b38383516020850161ac05565b60006020828403121561aca757600080fd5b815167ffffffffffffffff81111561acbe57600080fd5b61635b8482850161ac75565b6000835161acdc81846020880161a5ef565b83519083019061acf081836020880161a5ef565b01949350505050565b7f4661696c656420746f206465706c6f7920636f6e74726163742000000000000081526000835161ad3181601a85016020880161a5ef565b7f207573696e6720636f6e7374727563746f722064617461202200000000000000601a91840191820152835161ad6e81603384016020880161a5ef565b7f220000000000000000000000000000000000000000000000000000000000000060339290910191820152603401949350505050565b60408152600b60408201527f464f554e4452595f4f555400000000000000000000000000000000000000000060608201526080602082015260006164b3608083018461a613565b60006020828403121561adfd57600080fd5b815167ffffffffffffffff81111561ae1457600080fd5b8201601f8101841361ae2557600080fd5b61635b8482516020840161ac05565b6000855161ae46818460208a0161a5ef565b7f2f00000000000000000000000000000000000000000000000000000000000000908301908152855161ae80816001840160208a0161a5ef565b7f2f0000000000000000000000000000000000000000000000000000000000000060019290910191820152845161aebe81600284016020890161a5ef565b6001818301019150507f2f000000000000000000000000000000000000000000000000000000000000006001820152835161af0081600284016020880161a5ef565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600292909101918201526007019695505050505050565b60408152600061af4b604083018461a613565b8281036020840152600481527f2e6173740000000000000000000000000000000000000000000000000000000060208201526040810191505092915050565b7f436f756c64206e6f742066696e642041535420696e206172746966616374200081526000825161afc281601f85016020870161a5ef565b7f2e205365742060617374203d20747275656020696e20666f756e6472792e746f601f9390910192830152507f6d6c000000000000000000000000000000000000000000000000000000000000603f820152604101919050565b60408152600061b02f604083018461a613565b8281036020840152601181527f2e6173742e6162736f6c7574655061746800000000000000000000000000000060208201526040810191505092915050565b60408152600061b081604083018461a613565b8281036020840152600c81527f2e6173742e6c6963656e7365000000000000000000000000000000000000000060208201526040810191505092915050565b7f2e6d657461646174612e736f75726365732e5b2700000000000000000000000081526000825161b0f881601485016020870161a5ef565b7f275d2e6b656363616b32353600000000000000000000000000000000000000006014939091019283015250602001919050565b60408152600061b13f604083018561a613565b82810360208401526164af818561a613565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f220000000000000000000000000000000000000000000000000000000000000081526000825161b1b881600185016020870161a5ef565b7f22000000000000000000000000000000000000000000000000000000000000006001939091019283015250600201919050565b6000825161b1fe81846020870161a5ef565b7f2f6275696c642d696e666f000000000000000000000000000000000000000000920191825250600b01919050565b7f436f756c64206e6f742066696e64206275696c642d696e666f2066696c65207781527f697468206d61746368696e6720736f7572636520636f6465206861736820666f60208201527f7220636f6e74726163742000000000000000000000000000000000000000000060408201526000825161b2b181604b85016020870161a5ef565b91909101604b0192915050565b600060ff821660ff810361b2d45761b2d461aa4b565b60010192915050565b7f406f70656e7a657070656c696e2f646566656e6465722d6465706c6f792d636c81527f69656e742d636c6940000000000000000000000000000000000000000000000060208201526000825161b33b81602985016020870161a5ef565b9190910160290192915050565b60408152601660408201527f4f50454e5a455050454c494e5f424153485f504154480000000000000000000060608201526080602082015260006164b3608083018461a613565b60006020828403121561b3a157600080fd5b815167ffffffffffffffff81111561b3b857600080fd5b82016060818503121561b3ca57600080fd5b61b3d261abdc565b81518060030b811461b3e357600080fd5b8152602082015167ffffffffffffffff81111561b3ff57600080fd5b61b40b8682850161ac75565b602083015250604082015167ffffffffffffffff81111561b42b57600080fd5b61b4378682850161ac75565b604083015250949350505050565b7f4661696c656420746f2072756e206261736820636f6d6d616e6420776974682081527f220000000000000000000000000000000000000000000000000000000000000060208201526000825161b4a381602185016020870161a5ef565b7f222e20496620796f7520617265207573696e672057696e646f77732c2073657460219390910192830152507f20746865204f50454e5a455050454c494e5f424153485f5041544820656e766960418201527f726f6e6d656e74207661726961626c6520746f207468652066756c6c7920717560618201527f616c69666965642070617468206f66207468652062617368206578656375746160818201527f626c652e20466f72206578616d706c652c20696620796f75206172652075736960a18201527f6e672047697420666f722057696e646f77732c206164642074686520666f6c6c60c18201527f6f77696e67206c696e6520696e20746865202e656e762066696c65206f66207960e18201527f6f75722070726f6a65637420287573696e6720666f727761726420736c6173686101018201527f6573293a0a4f50454e5a455050454c494e5f424153485f504154483d22433a2f6101218201527f50726f6772616d2046696c65732f4769742f62696e2f6261736822000000000061014182015261015c01919050565b7f4661696c656420746f2066696e64206c696e652077697468207072656669782081527f270000000000000000000000000000000000000000000000000000000000000060208201526000835161b68f81602185016020880161a5ef565b7f2720696e206f75747075743a2000000000000000000000000000000000000000602191840191820152835161b6cc81602e84016020880161a5ef565b01602e01949350505050565b7f4661696c656420746f2072756e2075706772616465207361666574792076616c81527f69646174696f6e3a20000000000000000000000000000000000000000000000060208201526000825161b33b81602985016020870161a5ef565b7f55706772616465207361666574792076616c69646174696f6e206661696c656481527f3a0a00000000000000000000000000000000000000000000000000000000000060208201526000825161b79481602285016020870161a5ef565b9190910160220192915050565b7f436f6e7472616374206e616d652000000000000000000000000000000000000081526000825161b7d981600e85016020870161a5ef565b7f206d75737420626520696e2074686520666f726d6174204d79436f6e74726163600e9390910192830152507f742e736f6c3a4d79436f6e7472616374206f72204d79436f6e74726163742e73602e8201527f6f6c206f72206f75742f4d79436f6e74726163742e736f6c2f4d79436f6e7472604e8201527f6163742e6a736f6e000000000000000000000000000000000000000000000000606e820152607601919050565b8082018082111561635f5761635f61aa4b565b7f53504458206c6963656e7365206964656e74696669657220000000000000000081526000835161b8ca81601885016020880161a5ef565b7f20696e2000000000000000000000000000000000000000000000000000000000601891840191820152835161b90781601c84016020880161a5ef565b7f20646f6573206e6f74206c6f6f6b206c696b65206120737570706f7274656420601c92909101918201527f6c6963656e736520666f7220626c6f636b206578706c6f726572207665726966603c8201527f69636174696f6e2e205573652074686520606c6963656e73655479706560206f605c8201527f7074696f6e20746f20737065636966792061206c6963656e736520747970652c607c8201527f206f7220736574207468652060736b69704c6963656e73655479706560206f70609c8201527f74696f6e20746f2060747275656020746f20736b69702e00000000000000000060bc82015260d301949350505050565b6000825161ba0d81846020870161a5ef565b7f2000000000000000000000000000000000000000000000000000000000000000920191825250600101919050565b7f406f70656e7a657070656c696e2f75706772616465732d636f7265400000000081526000825161ba7481601c85016020870161a5ef565b91909101601c0192915050565b6000600019820361ba945761ba9461aa4b565b5060010190565b808202811582820484141761635f5761635f61aa4b565b6001815b600184111561baed5780850481111561bad15761bad161aa4b565b600184161561badf57908102905b60019390931c92800261bab6565b935093915050565b60008261bb045750600161635f565b8161bb115750600061635f565b816001811461bb27576002811461bb315761bb4d565b600191505061635f565b60ff84111561bb425761bb4261aa4b565b50506001821b61635f565b5060208310610133831016604e8410600b841016171561bb70575081810a61635f565b61bb7d600019848461bab2565b806000190482111561bb915761bb9161aa4b565b029392505050565b60006164b3838361baf5565b60008161bbb45761bbb461aa4b565b506000190190565b6000835161bbce81846020880161a5ef565b7f3a00000000000000000000000000000000000000000000000000000000000000908301908152835161bc0881600184016020880161a5ef565b01600101949350505050565b81810360008312801583831316838312821617156197775761977761aa4b56fe608060405234801561001057600080fd5b50604051610c9f380380610c9f83398101604081905261002f9161010d565b8181600361003d83826101ff565b50600461004a82826101ff565b50505050506102bd565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261007b57600080fd5b81516001600160401b0381111561009457610094610054565b604051601f8201601f19908116603f011681016001600160401b03811182821017156100c2576100c2610054565b6040528181528382016020018510156100da57600080fd5b60005b828110156100f9576020818601810151838301820152016100dd565b506000918101602001919091529392505050565b6000806040838503121561012057600080fd5b82516001600160401b0381111561013657600080fd5b6101428582860161006a565b602085015190935090506001600160401b0381111561016057600080fd5b61016c8582860161006a565b9150509250929050565b600181811c9082168061018a57607f821691505b6020821081036101aa57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156101fa57806000526020600020601f840160051c810160208510156101d75750805b601f840160051c820191505b818110156101f757600081556001016101e3565b50505b505050565b81516001600160401b0381111561021857610218610054565b61022c816102268454610176565b846101b0565b6020601f82116001811461026057600083156102485750848201515b600019600385901b1c1916600184901b1784556101f7565b600084815260208120601f198516915b828110156102905787850151825560209485019460019092019101610270565b50848210156102ae5786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b6109d3806102cc6000396000f3fe608060405234801561001057600080fd5b50600436106100be5760003560e01c806340c10f191161007657806395d89b411161005b57806395d89b4114610183578063a9059cbb1461018b578063dd62ed3e1461019e57600080fd5b806340c10f191461013857806370a082311461014d57600080fd5b806318160ddd116100a757806318160ddd1461010457806323b872dd14610116578063313ce5671461012957600080fd5b806306fdde03146100c3578063095ea7b3146100e1575b600080fd5b6100cb6101e4565b6040516100d891906107bf565b60405180910390f35b6100f46100ef366004610854565b610276565b60405190151581526020016100d8565b6002545b6040519081526020016100d8565b6100f461012436600461087e565b610290565b604051601281526020016100d8565b61014b610146366004610854565b6102b4565b005b61010861015b3660046108bb565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6100cb6102c2565b6100f4610199366004610854565b6102d1565b6101086101ac3660046108dd565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6060600380546101f390610910565b80601f016020809104026020016040519081016040528092919081815260200182805461021f90610910565b801561026c5780601f106102415761010080835404028352916020019161026c565b820191906000526020600020905b81548152906001019060200180831161024f57829003601f168201915b5050505050905090565b6000336102848185856102df565b60019150505b92915050565b60003361029e8582856102f1565b6102a98585856103c5565b506001949350505050565b6102be8282610470565b5050565b6060600480546101f390610910565b6000336102848185856103c5565b6102ec83838360016104cc565b505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146103bf57818110156103b0576040517ffb8f41b200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416600482015260248101829052604481018390526064015b60405180910390fd5b6103bf848484840360006104cc565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8316610415576040517f96c6fd1e000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff8216610465576040517fec442f05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b6102ec838383610614565b73ffffffffffffffffffffffffffffffffffffffff82166104c0576040517fec442f05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b6102be60008383610614565b73ffffffffffffffffffffffffffffffffffffffff841661051c576040517fe602df05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff831661056c576040517f94280d62000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260016020908152604080832093871683529290522082905580156103bf578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161060691815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff831661064c5780600260008282546106419190610963565b909155506106fe9050565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260208190526040902054818110156106d2576040517fe450d38c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8516600482015260248101829052604481018390526064016103a7565b73ffffffffffffffffffffffffffffffffffffffff841660009081526020819052604090209082900390555b73ffffffffffffffffffffffffffffffffffffffff821661072757600280548290039055610753565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090208054820190555b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516107b291815260200190565b60405180910390a3505050565b602081526000825180602084015260005b818110156107ed57602081860181015160408684010152016107d0565b5060006040828501015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011684010191505092915050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461084f57600080fd5b919050565b6000806040838503121561086757600080fd5b6108708361082b565b946020939093013593505050565b60008060006060848603121561089357600080fd5b61089c8461082b565b92506108aa6020850161082b565b929592945050506040919091013590565b6000602082840312156108cd57600080fd5b6108d68261082b565b9392505050565b600080604083850312156108f057600080fd5b6108f98361082b565b91506109076020840161082b565b90509250929050565b600181811c9082168061092457607f821691505b60208210810361095d577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b8082018082111561028a577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea26469706673582212207e804ca539d49155d2b6bc19268ce22f9f857027c75247d69fb0d56a089c93d464736f6c634300081a003360a060405234801561001057600080fd5b506040516116fe3803806116fe83398101604081905261002f916101e5565b60016000556002805460ff191690556001600160a01b038316158061005b57506001600160a01b038216155b8061006d57506001600160a01b038116155b1561008b5760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b0383166080526100a3600082610134565b506100ce7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a82610134565b506100f97f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e483610134565b506101126000805160206116de83398151915282610134565b5061012b6000805160206116de83398151915283610134565b50505050610228565b60008281526001602090815260408083206001600160a01b038516845290915281205460ff166101bf5760008381526001602081815260408084206001600160a01b0387168086529252808420805460ff19169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45060016101c3565b5060005b92915050565b80516001600160a01b03811681146101e057600080fd5b919050565b6000806000606084860312156101fa57600080fd5b610203846101c9565b9250610211602085016101c9565b915061021f604085016101c9565b90509250925092565b60805161147f61025f6000396000818161019e0152818161050001528181610562015281816108f70152610959015261147f6000f3fe608060405234801561001057600080fd5b506004361061016c5760003560e01c806385f438c1116100cd578063c8a0236211610081578063d936547e11610066578063d936547e14610355578063d9caed1214610378578063e63ab1e91461038b57600080fd5b8063c8a023621461032f578063d547741f1461034257600080fd5b80639a590427116100b25780639a590427146103015780639b19251a14610314578063a217fddf1461032757600080fd5b806385f438c11461029457806391d14854146102bb57600080fd5b806336568abe11610124578063570618e111610109578063570618e11461025a5780635c975abb146102815780638456cb591461028c57600080fd5b806336568abe1461023f5780633f4ba83a1461025257600080fd5b806321fc65f21161015557806321fc65f2146101e5578063248a9ca3146101fa5780632f2ff15d1461022c57600080fd5b806301ffc9a714610171578063116191b614610199575b600080fd5b61018461017f36600461118a565b6103b2565b60405190151581526020015b60405180910390f35b6101c07f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610190565b6101f86101f33660046111f5565b61044b565b005b61021e610208366004611292565b6000908152600160208190526040909120015490565b604051908152602001610190565b6101f861023a3660046112ab565b61064c565b6101f861024d3660046112ab565b610678565b6101f86106d6565b61021e7f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a81565b60025460ff16610184565b6101f861070b565b61021e7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b6101846102c93660046112ab565b600091825260016020908152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b6101f861030f3660046112d7565b61073d565b6101f86103223660046112d7565b6107be565b61021e600081565b6101f861033d3660046111f5565b610842565b6101f86103503660046112ab565b610a29565b6101846103633660046112d7565b60036020526000908152604090205460ff1681565b6101f86103863660046112f2565b610a4f565b61021e7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061044557507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b610453610b7b565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461047d81610bbe565b610485610bc8565b73ffffffffffffffffffffffffffffffffffffffff861660009081526003602052604090205460ff166104e4576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61052573ffffffffffffffffffffffffffffffffffffffff87167f000000000000000000000000000000000000000000000000000000000000000086610c07565b6040517f5131ab5900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690635131ab599061059f9089908990899089908990600401611378565b600060405180830381600087803b1580156105b957600080fd5b505af11580156105cd573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167f85b5be9cf454e05e0bddf49315178102227c312078eefa3c00294fb4d912ae4e868686604051610632939291906113d5565b60405180910390a3506106456001600055565b5050505050565b6000828152600160208190526040909120015461066881610bbe565b6106728383610c94565b50505050565b73ffffffffffffffffffffffffffffffffffffffff811633146106c7576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6106d18282610d41565b505050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61070081610bbe565b610708610de2565b50565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61073581610bbe565b610708610e41565b7f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a61076781610bbe565b73ffffffffffffffffffffffffffffffffffffffff8216600081815260036020526040808220805460ff19169055517f51085ddf9ebdded84b76e829eb58c4078e4b5bdf97d9a94723f336039da467919190a25050565b7f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a6107e881610bbe565b73ffffffffffffffffffffffffffffffffffffffff8216600081815260036020526040808220805460ff19166001179055517faab7954e9d246b167ef88aeddad35209ca2489d95a8aeb59e288d9b19fae5a549190a25050565b61084a610b7b565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461087481610bbe565b61087c610bc8565b73ffffffffffffffffffffffffffffffffffffffff861660009081526003602052604090205460ff166108db576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61091c73ffffffffffffffffffffffffffffffffffffffff87167f000000000000000000000000000000000000000000000000000000000000000086610c07565b6040517fb8969bd400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063b8969bd4906109969089908990899089908990600401611378565b600060405180830381600087803b1580156109b057600080fd5b505af11580156109c4573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fb9d4efa96044e5f5e03e696fa9ae2ff66911cc27e8a637c3627c75bc5b2241c8868686604051610632939291906113d5565b60008281526001602081905260409091200154610a4581610bbe565b6106728383610d41565b610a57610b7b565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e4610a8181610bbe565b610a89610bc8565b73ffffffffffffffffffffffffffffffffffffffff841660009081526003602052604090205460ff16610ae8576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610b0973ffffffffffffffffffffffffffffffffffffffff85168484610c07565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f9b1bfa7fa9ee420a16e124f794c35ac9f90472acc99140eb2f6447c714cad8eb84604051610b6891815260200190565b60405180910390a3506106d16001600055565b600260005403610bb7576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b6107088133610e7e565b60025460ff1615610c05576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6040805173ffffffffffffffffffffffffffffffffffffffff8416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb000000000000000000000000000000000000000000000000000000001790526106d1908490610f0f565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff16610d3957600083815260016020818152604080842073ffffffffffffffffffffffffffffffffffffffff87168086529252808420805460ff19169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a4506001610445565b506000610445565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff1615610d3957600083815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff86168085529252808320805460ff1916905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a4506001610445565b610dea610fa5565b6002805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b610e49610bc8565b6002805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258610e173390565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16610f0b576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82166004820152602481018390526044015b60405180910390fd5b5050565b6000610f3173ffffffffffffffffffffffffffffffffffffffff841683610fe1565b90508051600014158015610f56575080806020019051810190610f5491906113f8565b155b156106d1576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84166004820152602401610f02565b60025460ff16610c05576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6060610fef83836000610ff6565b9392505050565b606081471015611034576040517fcd786059000000000000000000000000000000000000000000000000000000008152306004820152602401610f02565b6000808573ffffffffffffffffffffffffffffffffffffffff16848660405161105d919061141a565b60006040518083038185875af1925050503d806000811461109a576040519150601f19603f3d011682016040523d82523d6000602084013e61109f565b606091505b50915091506110af8683836110b9565b9695505050505050565b6060826110ce576110c982611148565b610fef565b81511580156110f2575073ffffffffffffffffffffffffffffffffffffffff84163b155b15611141576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85166004820152602401610f02565b5080610fef565b8051156111585780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006020828403121561119c57600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610fef57600080fd5b803573ffffffffffffffffffffffffffffffffffffffff811681146111f057600080fd5b919050565b60008060008060006080868803121561120d57600080fd5b611216866111cc565b9450611224602087016111cc565b935060408601359250606086013567ffffffffffffffff81111561124757600080fd5b8601601f8101881361125857600080fd5b803567ffffffffffffffff81111561126f57600080fd5b88602082840101111561128157600080fd5b959894975092955050506020019190565b6000602082840312156112a457600080fd5b5035919050565b600080604083850312156112be57600080fd5b823591506112ce602084016111cc565b90509250929050565b6000602082840312156112e957600080fd5b610fef826111cc565b60008060006060848603121561130757600080fd5b611310846111cc565b925061131e602085016111cc565b929592945050506040919091013590565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff8616815273ffffffffffffffffffffffffffffffffffffffff851660208201528360408201526080606082015260006113ca60808301848661132f565b979650505050505050565b8381526040602082015260006113ef60408301848661132f565b95945050505050565b60006020828403121561140a57600080fd5b81518015158114610fef57600080fd5b6000825160005b8181101561143b5760208186018101518583015201611421565b50600092019182525091905056fea26469706673582212202f3991d39315b7c0e5ef6fd88336a0f791f8e1cce0a70cb66f2c4c9404215ae364736f6c634300081a00338619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a60c060405260001960035534801561001657600080fd5b5060405161155a38038061155a83398101604081905261003591610220565b60016000819055805460ff19169055838383836001600160a01b038416158061006557506001600160a01b038316155b8061007757506001600160a01b038216155b8061008957506001600160a01b038116155b156100a75760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b03808516608052831660a0526100c5600082610154565b506100f07f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e483610154565b5061011b7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb83610154565b506101467f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a82610154565b505050505050505050610274565b60008281526002602090815260408083206001600160a01b038516845290915281205460ff166101fa5760008381526002602090815260408083206001600160a01b03861684529091529020805460ff191660011790556101b23390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45060016101fe565b5060005b92915050565b80516001600160a01b038116811461021b57600080fd5b919050565b6000806000806080858703121561023657600080fd5b61023f85610204565b935061024d60208601610204565b925061025b60408601610204565b915061026960608601610204565b905092959194509250565b60805160a0516112826102d86000396000818161021d01528181610531015281816108240152818161097b01528181610ad00152610bf20152600081816101d1015281816104a1015281816105040152818161079401526107f701526112826000f3fe608060405234801561001057600080fd5b50600436106101775760003560e01c80635e3e9fef116100d857806391d148541161008c578063d547741f11610066578063d547741f14610386578063d5abeb0114610399578063e63ab1e9146103a257600080fd5b806391d1485414610311578063a217fddf14610357578063a783c7891461035f57600080fd5b8063743e0c9b116100bd578063743e0c9b146102cf5780638456cb59146102e257806385f438c1146102ea57600080fd5b80635e3e9fef146102a95780636f8b44b0146102bc57600080fd5b8063248a9ca31161012f57806336568abe1161011457806336568abe146102835780633f4ba83a146102965780635c975abb1461029e57600080fd5b8063248a9ca31461023f5780632f2ff15d1461027057600080fd5b8063106e629011610160578063106e6290146101b9578063116191b6146101cc57806321e093b11461021857600080fd5b806301ffc9a71461017c57806302d5c899146101a4575b600080fd5b61018f61018a366004610fb4565b6103c9565b60405190151581526020015b60405180910390f35b6101b76101b2366004611026565b610462565b005b6101b76101c73660046110b8565b6105f7565b6101f37f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161019b565b6101f37f000000000000000000000000000000000000000000000000000000000000000081565b61026261024d3660046110eb565b60009081526002602052604090206001015490565b60405190815260200161019b565b6101b761027e366004611104565b61069c565b6101b7610291366004611104565b6106c7565b6101b7610720565b60015460ff1661018f565b6101b76102b7366004611026565b610755565b6101b76102ca3660046110eb565b6108d0565b6101b76102dd3660046110eb565b61093e565b6101b76109e8565b6102627f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b61018f61031f366004611104565b600091825260026020908152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b610262600081565b6102627f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb81565b6101b7610394366004611104565b610a1a565b61026260035481565b6102627f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061045c57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b61046a610a3f565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461049481610a82565b61049c610a8c565b6104c77f00000000000000000000000000000000000000000000000000000000000000008684610acb565b6040517fb8969bd400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063b8969bd490610561907f0000000000000000000000000000000000000000000000000000000000000000908a908a908a908a90600401611179565b600060405180830381600087803b15801561057b57600080fd5b505af115801561058f573d6000803e3d6000fd5b505050508573ffffffffffffffffffffffffffffffffffffffff167fba96f26bdda53eb8c8ba39045dfb4ff39753fbc7a6edcf250a88e75e78d102fe8686866040516105dd939291906111d6565b60405180910390a2506105f06001600055565b5050505050565b6105ff610a3f565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461062981610a82565b610631610a8c565b61063c848484610acb565b8373ffffffffffffffffffffffffffffffffffffffff167f884edad9ce6fa2440d8a54cc123490eb96d2768479d49ff9c7366125a94243648460405161068491815260200190565b60405180910390a2506106976001600055565b505050565b6000828152600260205260409020600101546106b781610a82565b6106c18383610c53565b50505050565b73ffffffffffffffffffffffffffffffffffffffff81163314610716576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6106978282610d53565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61074a81610a82565b610752610e12565b50565b61075d610a3f565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461078781610a82565b61078f610a8c565b6107ba7f00000000000000000000000000000000000000000000000000000000000000008684610acb565b6040517f5131ab5900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690635131ab5990610854907f0000000000000000000000000000000000000000000000000000000000000000908a908a908a908a90600401611179565b600060405180830381600087803b15801561086e57600080fd5b505af1158015610882573d6000803e3d6000fd5b505050508573ffffffffffffffffffffffffffffffffffffffff167f7772f56296d3a5202974a45c61c9188d844ab4d6eeb18c851e4b8d5384ca6ced8686866040516105dd939291906111d6565b7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb6108fa81610a82565b610902610a8c565b60038290556040518281527f7810bd47de260c3e9ee10061cf438099dd12256c79485f12f94dbccc981e806c9060200160405180910390a15050565b610946610a8c565b6040517f79cc6790000000000000000000000000000000000000000000000000000000008152336004820152602481018290527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16906379cc679090604401600060405180830381600087803b1580156109d457600080fd5b505af11580156105f0573d6000803e3d6000fd5b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610a1281610a82565b610752610e8f565b600082815260026020526040902060010154610a3581610a82565b6106c18383610d53565b600260005403610a7b576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b6107528133610ee8565b60015460ff1615610ac9576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6003547f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b39573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b5d91906111f9565b610b679084611212565b1115610b9f576040517fc30436e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f1e458bee00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff848116600483015260248201849052604482018390527f00000000000000000000000000000000000000000000000000000000000000001690631e458bee90606401600060405180830381600087803b158015610c3657600080fd5b505af1158015610c4a573d6000803e3d6000fd5b50505050505050565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff16610d4b57600083815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff86168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055610ce93390565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a450600161045c565b50600061045c565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff1615610d4b57600083815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8616808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a450600161045c565b610e1a610f78565b600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b610e97610a8c565b600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016811790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25833610e65565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16610f74576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff821660048201526024810183905260440160405180910390fd5b5050565b60015460ff16610ac9576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060208284031215610fc657600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610ff657600080fd5b9392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461102157600080fd5b919050565b60008060008060006080868803121561103e57600080fd5b61104786610ffd565b945060208601359350604086013567ffffffffffffffff81111561106a57600080fd5b8601601f8101881361107b57600080fd5b803567ffffffffffffffff81111561109257600080fd5b8860208284010111156110a457600080fd5b959894975060200195606001359392505050565b6000806000606084860312156110cd57600080fd5b6110d684610ffd565b95602085013595506040909401359392505050565b6000602082840312156110fd57600080fd5b5035919050565b6000806040838503121561111757600080fd5b8235915061112760208401610ffd565b90509250929050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff8616815273ffffffffffffffffffffffffffffffffffffffff851660208201528360408201526080606082015260006111cb608083018486611130565b979650505050505050565b8381526040602082015260006111f0604083018486611130565b95945050505050565b60006020828403121561120b57600080fd5b5051919050565b8082018082111561045c577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea2646970667358221220de5fa55e0ca79ea2f08903481d01ea00bbbf346b9cfba44e12a2dd6f3a6f2e8a64736f6c634300081a00336080604052348015600f57600080fd5b506001600055610d3a806100246000396000f3fe6080604052600436106100635760003560e01c8063c513169111610040578063c5131691146100c1578063e04d4f97146100e1578063f05b6abf146100f457005b8063357fc5a21461006c5780636ed701691461008c5780638fcaa0b5146100a157005b3661006a57005b005b34801561007857600080fd5b5061006a6100873660046106c0565b610114565b34801561009857600080fd5b5061006a6101aa565b3480156100ad57600080fd5b5061006a6100bc3660046106fc565b6101df565b3480156100cd57600080fd5b5061006a6100dc3660046106c0565b61021e565b61006a6100ef366004610895565b6102f9565b34801561010057600080fd5b5061006a61010f366004610981565b61033d565b61011c610372565b61013e73ffffffffffffffffffffffffffffffffffffffff83163383866103b5565b604080513381526020810185905273ffffffffffffffffffffffffffffffffffffffff848116828401528316606082015290517f2b58128f24a9f59127cc5b5430d70542b22220f2d9adaa86e442b816ab98af609181900360800190a16101a56001600055565b505050565b6040513381527fbcaadb46b82a48af60b608f58959ae6b8310d1b0a0d094c2e9ec3208ed39f2a09060200160405180910390a1565b7f0d3f65f00e631663aa85c96330b5c7a83bb29af3630c0063776f985edc3037aa33838360405161021293929190610a6b565b60405180910390a15050565b610226610372565b6000610233600285610ad5565b90508060000361026f576040517f1f2a200500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61029173ffffffffffffffffffffffffffffffffffffffff84163384846103b5565b604080513381526020810183905273ffffffffffffffffffffffffffffffffffffffff858116828401528416606082015290517f2b58128f24a9f59127cc5b5430d70542b22220f2d9adaa86e442b816ab98af609181900360800190a1506101a56001600055565b7f1f1ff1f5fb41346850b2f5c04e6c767e2f1c8a525c5c0c5cdb60cdf3ca5f62fa3334858585604051610330959493929190610b7e565b60405180910390a1505050565b7f74a53cd528a921fca7dbdee62f86819051d3cc98f214951f4238e8843f20b146338484846040516103309493929190610c08565b6002600054036103ae576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b6040805173ffffffffffffffffffffffffffffffffffffffff85811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd0000000000000000000000000000000000000000000000000000000017905261044a908590610450565b50505050565b600061047273ffffffffffffffffffffffffffffffffffffffff8416836104eb565b905080516000141580156104975750808060200190518101906104959190610ccb565b155b156101a5576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff841660048201526024015b60405180910390fd5b60606104f983836000610500565b9392505050565b60608147101561053e576040517fcd7860590000000000000000000000000000000000000000000000000000000081523060048201526024016104e2565b6000808573ffffffffffffffffffffffffffffffffffffffff1684866040516105679190610ce8565b60006040518083038185875af1925050503d80600081146105a4576040519150601f19603f3d011682016040523d82523d6000602084013e6105a9565b606091505b50915091506105b98683836105c3565b9695505050505050565b6060826105d8576105d382610652565b6104f9565b81511580156105fc575073ffffffffffffffffffffffffffffffffffffffff84163b155b1561064b576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff851660048201526024016104e2565b50806104f9565b8051156106625780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50565b803573ffffffffffffffffffffffffffffffffffffffff811681146106bb57600080fd5b919050565b6000806000606084860312156106d557600080fd5b833592506106e560208501610697565b91506106f360408501610697565b90509250925092565b6000806020838503121561070f57600080fd5b823567ffffffffffffffff81111561072657600080fd5b8301601f8101851361073757600080fd5b803567ffffffffffffffff81111561074e57600080fd5b85602082840101111561076057600080fd5b6020919091019590945092505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156107e6576107e6610770565b604052919050565b600082601f8301126107ff57600080fd5b813567ffffffffffffffff81111561081957610819610770565b61084a60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8401160161079f565b81815284602083860101111561085f57600080fd5b816020850160208301376000918101602001919091529392505050565b801515811461069457600080fd5b80356106bb8161087c565b6000806000606084860312156108aa57600080fd5b833567ffffffffffffffff8111156108c157600080fd5b6108cd868287016107ee565b9350506020840135915060408401356108e58161087c565b809150509250925092565b600067ffffffffffffffff82111561090a5761090a610770565b5060051b60200190565b600082601f83011261092557600080fd5b8135610938610933826108f0565b61079f565b8082825260208201915060208360051b86010192508583111561095a57600080fd5b602085015b8381101561097757803583526020928301920161095f565b5095945050505050565b60008060006060848603121561099657600080fd5b833567ffffffffffffffff8111156109ad57600080fd5b8401601f810186136109be57600080fd5b80356109cc610933826108f0565b8082825260208201915060208360051b8501019250888311156109ee57600080fd5b602084015b83811015610a3057803567ffffffffffffffff811115610a1257600080fd5b610a218b6020838901016107ee565b845250602092830192016109f3565b509550505050602084013567ffffffffffffffff811115610a5057600080fd5b610a5c86828701610914565b9250506106f36040850161088a565b73ffffffffffffffffffffffffffffffffffffffff8416815260406020820152816040820152818360608301376000818301606090810191909152601f9092017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016010192915050565b600082610b0b577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60005b83811015610b2b578181015183820152602001610b13565b50506000910152565b60008151808452610b4c816020860160208601610b10565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b73ffffffffffffffffffffffffffffffffffffffff8616815284602082015260a060408201526000610bb360a0830186610b34565b6060830194909452509015156080909101529392505050565b600081518084526020840193506020830160005b82811015610bfe578151865260209586019590910190600101610be0565b5093949350505050565b60006080820173ffffffffffffffffffffffffffffffffffffffff871683526080602084015280865180835260a08501915060a08160051b86010192506020880160005b82811015610c9b577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60878603018452610c86858351610b34565b94506020938401939190910190600101610c4c565b505050508281036040840152610cb18186610bcc565b915050610cc2606083018415159052565b95945050505050565b600060208284031215610cdd57600080fd5b81516104f98161087c565b60008251610cfa818460208701610b10565b919091019291505056fea2646970667358221220556072e1abafc3c4063b8cce832228b4f309b93726aaa6a6dfab20cb880c6d1864736f6c634300081a0033a26469706673582212208efa349d2e2cc6b00f29603510eb4415f44dfdf97996d1caaeb65be98b09d6f664736f6c634300081a0033", } // ERC20CustodyTestABI is the input ABI used to generate the binding from. diff --git a/v2/pkg/erc20custodyechidnatest.sol/erc20custodyechidnatest.go b/v2/pkg/erc20custodyechidnatest.sol/erc20custodyechidnatest.go index aa8e82e2..12e320e3 100644 --- a/v2/pkg/erc20custodyechidnatest.sol/erc20custodyechidnatest.go +++ b/v2/pkg/erc20custodyechidnatest.sol/erc20custodyechidnatest.go @@ -32,7 +32,7 @@ var ( // ERC20CustodyEchidnaTestMetaData contains all meta data concerning the ERC20CustodyEchidnaTest contract. var ERC20CustodyEchidnaTestMetaData = &bind.MetaData{ ABI: "[{\"type\":\"constructor\",\"inputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"DEFAULT_ADMIN_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"PAUSER_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"WHITELISTER_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"WITHDRAWER_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"echidnaCaller\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"gateway\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIGatewayEVM\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getRoleAdmin\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"grantRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"hasRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"pause\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"paused\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"renounceRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"callerConfirmation\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"revokeRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"supportsInterface\",\"inputs\":[{\"name\":\"interfaceId\",\"type\":\"bytes4\",\"internalType\":\"bytes4\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"testERC20\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractTestERC20\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"testWithdrawAndCall\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"unpause\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"unwhitelist\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"whitelist\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"whitelisted\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"withdraw\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"withdrawAndCall\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"withdrawAndRevert\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"event\",\"name\":\"Paused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleAdminChanged\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"previousAdminRole\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"newAdminRole\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleGranted\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleRevoked\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Unpaused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Unwhitelisted\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Whitelisted\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Withdraw\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"WithdrawAndCall\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"WithdrawAndRevert\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"AccessControlBadConfirmation\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"AccessControlUnauthorizedAccount\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"neededRole\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"type\":\"error\",\"name\":\"AddressEmptyCode\",\"inputs\":[{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"AddressInsufficientBalance\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"EnforcedPause\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ExpectedPause\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"FailedInnerCall\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NotWhitelisted\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ReentrancyGuardReentrantCall\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"SafeERC20FailedOperation\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"ZeroAddress\",\"inputs\":[]}]", - Bin: "0x600580546001600160a01b03191633908117909155600e60a09081526d11d85d195dd85e5155934b9cdbdb60921b60c0526101049190915261012361012481905261014452606460e090815261016460405261010080516001600160e01b0390811663c0c53b8b60e01b1790915261007992919061029316565b600680546001600160a01b03929092166001600160a01b03199283168117909155600780549092161790553480156100b057600080fd5b5060075460055460016000556002805460ff191690556001600160a01b039182169116808215806100e857506001600160a01b038216155b806100fa57506001600160a01b038116155b156101185760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b0383166080526101306000826102b2565b5061015b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a826102b2565b506101867f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e4836102b2565b5061019f600080516020616dde833981519152826102b2565b506101b8600080516020616dde833981519152836102b2565b505050506040516101c89061383e565b60408082526004908201819052631d195cdd60e21b606083015260806020830181905282015263151154d560e21b60a082015260c001604051809103906000f08015801561021a573d6000803e3d6000fd5b50600480546001600160a01b0319166001600160a01b0392831617815560075460405163ae7a3a6f60e01b815230928101929092529091169063ae7a3a6f90602401600060405180830381600087803b15801561027657600080fd5b505af115801561028a573d6000803e3d6000fd5b505050506148bf565b600061029d61384b565b6102a8848483610345565b9150505b92915050565b60008281526001602090815260408083206001600160a01b038516845290915281205460ff1661033d5760008381526001602081815260408084206001600160a01b0387168086529252808420805460ff19169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45060016102ac565b5060006102ac565b60008061035285846103c1565b90506103b66040518060400160405280601d81526020017f4552433139363750726f78792e736f6c3a4552433139363750726f787900000081525082866040516020016103a0929190613954565b60408051601f19818403018152919052856103cd565b9150505b9392505050565b60006103ba8383610401565b60c081015151600090156103f7576103f084848460c0015161042260201b60201c565b90506103ba565b6103f0848461059b565b600061040d8383610668565b6103ba838360200151846103cd60201b60201c565b60008061042d610678565b9050600061043b8683610712565b905060006104588260600151836020015185610b3560201b60201c565b9050600061046883838989610cea565b9050600061047582611966565b602081015181519192509060030b156104ce5789826040015160405160200161049f929190613978565b60408051601f198184030181529082905262461bcd60e51b82526104c5916004016139de565b60405180910390fd5b60006105176040518060400160405280601581526020017f4465706c6f79656420746f20616464726573733a200000000000000000000000815250836001611afd60201b60201c565b60405163c6ce059d60e01b8152909150600080516020616dbe8339815191529063c6ce059d9061054b9084906004016139de565b602060405180830381865afa158015610568573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061058c91906139f1565b9b9a5050505050505050505050565b604051638d1cc92560e01b81526000908190600080516020616dbe83398151915290638d1cc925906105d19087906004016139de565b600060405180830381865afa1580156105ee573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526106169190810190613ae6565b905060006106458285604051602001610630929190613b1a565b60408051601f19818403018152919052611c9d565b90506001600160a01b0381166102a857848460405160200161049f929190613b49565b61067482826000611cb0565b5050565b60408051808201825260038152621bdd5d60ea1b602082015290516334515cdb60e21b8152606091600080516020616dbe83398151915291829063d145736c906106c6908490600401613bd8565b600060405180830381865afa1580156106e3573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261070b9190810190613c0d565b9250505090565b6107446040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b6000600080516020616dbe83398151915290506107896040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b61079285611d8a565b602082015260006107a286611fdf565b90506000836001600160a01b031663d930a0e66040518163ffffffff1660e01b8152600401600060405180830381865afa1580156107e4573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261080c9190810190613c0d565b868385602001516040516020016108269493929190613c55565b60408051601f19818403018152908290526360f9bb1160e01b825291506000906001600160a01b038616906360f9bb11906108659085906004016139de565b600060405180830381865afa158015610882573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526108aa9190810190613c0d565b604051636da11afb60e11b81529091506001600160a01b0386169063db4235f6906108d9908490600401613ced565b602060405180830381865afa1580156108f6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061091a9190613d26565b61092f578160405160200161049f9190613d48565b6040516309389f5960e31b81526001600160a01b038616906349c4fac89061095b908490600401613dbf565b600060405180830381865afa158015610978573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526109a09190810190613c0d565b8452604051636da11afb60e11b81526001600160a01b0386169063db4235f6906109ce908490600401613e05565b602060405180830381865afa1580156109eb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a0f9190613d26565b15610a8b576040516309389f5960e31b81526001600160a01b038616906349c4fac890610a40908490600401613e05565b600060405180830381865afa158015610a5d573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610a859190810190613c0d565b60408501525b846001600160a01b03166349c4fac8828660000151604051602001610ab09190613e46565b6040516020818303038152906040526040518363ffffffff1660e01b8152600401610adc929190613ea1565b600060405180830381865afa158015610af9573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610b219190810190613c0d565b606085015250608083015250949350505050565b60408051600480825260a0820190925260609160009190816020015b6060815260200190600190039081610b51579050509050604051806040016040528060048152602001630677265760e41b81525081600081518110610b9857610b98613ec6565b6020026020010181905250604051806040016040528060038152602001620b5c9b60ea1b81525081600181518110610bd257610bd2613ec6565b602002602001018190525084604051602001610bee9190613edc565b60405160208183030381529060405281600281518110610c1057610c10613ec6565b602002602001018190525082604051602001610c2c9190613f11565b60405160208183030381529060405281600381518110610c4e57610c4e613ec6565b60209081029190910101526000610c6482611966565b9050600081602001519050610ccb610c9e60405180604001604052806005815260200164173539b7b760d91b81525061216260201b60201c565b6040805180820182526000808252602091820152815180830190925284518252808501908201529061218f565b610ce0578560405160200161049f9190613f40565b9695505050505050565b60a0810151604080518082018252600080825260209182015281518083019092528251808352928101910152606090600080516020616dbe8339815191529015610d34565b511590565b610e5057826020015115610dc45760405162461bcd60e51b81526020600482015260586024820152600080516020616dfe83398151915260448201527f62652075736564207768656e207468652060736b6970566572696679536f757260648201527f6365436f646560206f7074696f6e206973206074727565600000000000000000608482015260a4016104c5565b8260c0015115610e505760405162461bcd60e51b81526020600482015260536024820152600080516020616dfe83398151915260448201527f62652075736564207768656e207468652060736b69704c6963656e736554797060648201527f6560206f7074696f6e2069732060747275656000000000000000000000000000608482015260a4016104c5565b6040805160ff8082526120008201909252600091816020015b6060815260200190600190039081610e695790505090506000604051806040016040528060038152602001620dce0f60eb1b815250828280610eaa90613fd5565b935060ff1681518110610ebf57610ebf613ec6565b60200260200101819052506040518060400160405280600d81526020016c302e302e312d616c7068612e3760981b815250604051602001610f009190613ff4565b604051602081830303815290604052828280610f1b90613fd5565b935060ff1681518110610f3057610f30613ec6565b6020026020010181905250604051806040016040528060068152602001656465706c6f7960d01b815250828280610f6690613fd5565b935060ff1681518110610f7b57610f7b613ec6565b60200260200101819052506040518060400160405280600e81526020016d2d2d636f6e74726163744e616d6560901b815250828280610fb990613fd5565b935060ff1681518110610fce57610fce613ec6565b60200260200101819052508760200151828280610fea90613fd5565b935060ff1681518110610fff57610fff613ec6565b60200260200101819052506040518060400160405280600e81526020016d05a5ac6dedce8e4c2c6e8a0c2e8d60931b81525082828061103d90613fd5565b935060ff168151811061105257611052613ec6565b60209081029190910101528751828261106a81613fd5565b935060ff168151811061107f5761107f613ec6565b6020026020010181905250604051806040016040528060098152602001680b4b58da185a5b925960ba1b8152508282806110b890613fd5565b935060ff16815181106110cd576110cd613ec6565b60209081029190910101526110e1466121f0565b82826110ec81613fd5565b935060ff168151811061110157611101613ec6565b60200260200101819052506040518060400160405280600f81526020016e2d2d6275696c64496e666f46696c6560881b81525082828061114090613fd5565b935060ff168151811061115557611155613ec6565b60200260200101819052508682828061116d90613fd5565b935060ff168151811061118257611182613ec6565b60209081029190910101528551156112905760408051808201909152601581527f2d2d636f6e7374727563746f7242797465636f64650000000000000000000000602082015282826111d381613fd5565b935060ff16815181106111e8576111e8613ec6565b60209081029190910101526040516371aad10d60e01b81526001600160a01b038416906371aad10d9061121f9089906004016139de565b600060405180830381865afa15801561123c573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526112649190810190613c0d565b828261126f81613fd5565b935060ff168151811061128457611284613ec6565b60200260200101819052505b84602001511561133d576040805180820190915260128152712d2d766572696679536f75726365436f646560701b602082015282826112ce81613fd5565b935060ff16815181106112e3576112e3613ec6565b60200260200101819052506040518060400160405280600581526020016466616c736560d81b81525082828061131890613fd5565b935060ff168151811061132d5761132d613ec6565b60200260200101819052506114a4565b611353610d2f8660a0015161216260201b60201c565b6113d65760408051808201909152600d81526c2d2d6c6963656e73655479706560981b6020820152828261138681613fd5565b935060ff168151811061139b5761139b613ec6565b60200260200101819052508460a001516040516020016113bb9190613edc565b60405160208183030381529060405282828061131890613fd5565b8460c001511580156113fb57506113f9610d2f896040015161216260201b60201c565b155b156114a45760408051808201909152600d81526c2d2d6c6963656e73655479706560981b6020820152828261142f81613fd5565b935060ff168151811061144457611444613ec6565b602090810291909101015261145888612282565b6040516020016114689190613edc565b60405160208183030381529060405282828061148390613fd5565b935060ff168151811061149857611498613ec6565b60200260200101819052505b6114ba610d2f866040015161216260201b60201c565b61153d5760408051808201909152600b81526a0b4b5c995b185e595c925960aa1b602082015282826114eb81613fd5565b935060ff168151811061150057611500613ec6565b6020026020010181905250846040015182828061151c90613fd5565b935060ff168151811061153157611531613ec6565b60200260200101819052505b60608501511561162e576040805180820190915260068152650b4b5cd85b1d60d21b6020820152828261156f81613fd5565b935060ff168151811061158457611584613ec6565b60209081029190910101526060850151604051631623433d60e31b815260048101919091526001600160a01b0384169063b11a19e890602401600060405180830381865afa1580156115da573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526116029190810190613c0d565b828261160d81613fd5565b935060ff168151811061162257611622613ec6565b60200260200101819052505b60e085015151156116c05760408051808201909152600a8152690b4b59d85cd31a5b5a5d60b21b6020820152828261166581613fd5565b935060ff168151811061167a5761167a613ec6565b602090810291909101015260e085015151611694906121f0565b828261169f81613fd5565b935060ff16815181106116b4576116b4613ec6565b60200260200101819052505b60e0850151602001511561175d5760408051808201909152600a8152692d2d676173507269636560b01b602082015282826116fa81613fd5565b935060ff168151811061170f5761170f613ec6565b60200260200101819052506117318560e00151602001516121f060201b60201c565b828261173c81613fd5565b935060ff168151811061175157611751613ec6565b60200260200101819052505b60e085015160400151156117fe5760408051808201909152600e81526d2d2d6d617846656550657247617360901b6020820152828261179b81613fd5565b935060ff16815181106117b0576117b0613ec6565b60200260200101819052506117d28560e00151604001516121f060201b60201c565b82826117dd81613fd5565b935060ff16815181106117f2576117f2613ec6565b60200260200101819052505b60e085015160600151156118ae5760408051808201909152601681527f2d2d6d61785072696f72697479466565506572476173000000000000000000006020820152828261184b81613fd5565b935060ff168151811061186057611860613ec6565b60200260200101819052506118828560e00151606001516121f060201b60201c565b828261188d81613fd5565b935060ff16815181106118a2576118a2613ec6565b60200260200101819052505b60008160ff166001600160401b038111156118cb576118cb613a1a565b6040519080825280602002602001820160405280156118fe57816020015b60608152602001906001900390816118e95790505b50905060005b8260ff168160ff16101561195757838160ff168151811061192757611927613ec6565b6020026020010151828260ff168151811061194457611944613ec6565b6020908102919091010152600101611904565b5093505050505b949350505050565b61198d6040518060600160405280600060030b815260200160608152602001606081525090565b6040805180820182526004808252630c4c2e6d60e31b602083015291516334515cdb60e21b8152600080516020616dbe83398151915292600091849163d145736c916119db9186910161404b565b600060405180830381865afa1580156119f8573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611a209190810190613c0d565b90506000611a2e8683612938565b90506000846001600160a01b031663f45c1ce7836040518263ffffffff1660e01b8152600401611a5e9190614092565b6000604051808303816000875af1158015611a7d573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611aa591908101906140f7565b805190915060030b15801590611abe5750602081015151155b8015611acd5750604081015151155b15610ce05781600081518110611ae557611ae5613ec6565b602002602001015160405160200161049f91906141aa565b60606000611b328560408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600080825260209182015281518083019092528651825280870190820152909150611b699082905b90612a72565b15611c66576000611be682611be081611bda611bac8a60408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6040805180820182526000808252602091820152815180830190925282518252918201519181019190915290565b90612a99565b90612af6565b9050611c1a611c13604051806040016040528060018152602001600560f91b81525061216260201b60201c565b8290612a72565b15611c5457611c51611c4a604051806040016040528060018152602001600560f91b81525061216260201b60201c565b8290612b7b565b90505b611c5d81612ba1565b925050506103ba565b8215611c7f57848460405160200161049f92919061437a565b50506040805160208101909152600081526103ba565b509392505050565b6000808251602084016000f09392505050565b8160a0015115611cbf57505050565b6000611ccc848484612c06565b90506000611cd982611966565b602081015181519192509060030b158015611d4c5750611d4c611d20604051806040016040528060078152602001665355434345535360c81b81525061216260201b60201c565b604080518082018252600080825260209182015281518083019092528451825280850190820152611b63565b15611d5957505050505050565b60408201515115611d7957816040015160405160200161049f91906143f5565b8060405160200161049f919061443f565b60606000611dbf8360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b9050611df6611def604051806040016040528060048152602001630b9cdbdb60e21b81525061216260201b60201c565b829061218f565b15611e38576103ba611e33611e2c604051806040016040528060048152602001630b9cdbdb60e21b81525061216260201b60201c565b8390613119565b612ba1565b611e6a611e63604051806040016040528060018152602001601d60f91b81525061216260201b60201c565b82906131a3565b600103611ed257611e9c611c4a604051806040016040528060018152602001601d60f91b81525061216260201b60201c565b506103ba611e33611ecb604051806040016040528060018152602001601d60f91b81525061216260201b60201c565b8390612b7b565b611f01611def60405180604001604052806005815260200164173539b7b760d91b81525061216260201b60201c565b15611fce576000611f3982611f34604051806040016040528060018152602001602f60f81b81525061216260201b60201c565b613238565b905060008160018351611f4c919061448f565b81518110611f5c57611f5c613ec6565b60200260200101519050611fc5611e33611f9860405180604001604052806005815260200164173539b7b760d91b81525061216260201b60201c565b60408051808201825260008082526020918201528151808301909252855182528086019082015290613119565b95945050505050565b8260405160200161049f91906144a2565b606060006120148360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b9050612044611def604051806040016040528060048152602001630b9cdbdb60e21b81525061216260201b60201c565b15612052576103ba81612ba1565b61207d611e63604051806040016040528060018152602001601d60f91b81525061216260201b60201c565b6001036120b2576103ba611e33611ecb604051806040016040528060018152602001601d60f91b81525061216260201b60201c565b6120e1611def60405180604001604052806005815260200164173539b7b760d91b81525061216260201b60201c565b15611fce57600061211482611f34604051806040016040528060018152602001602f60f81b81525061216260201b60201c565b905060018151111561215057806002825161212f919061448f565b8151811061213f5761213f613ec6565b602002602001015192505050919050565b508260405160200161049f91906144a2565b60408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b8051825160009111156121a4575060006102ac565b815183516020850151600092916121ba9161455c565b6121c4919061448f565b9050826020015181036121db5760019150506102ac565b82516020840151819020912014905092915050565b606060006121fd836132dc565b60010190506000816001600160401b0381111561221c5761221c613a1a565b6040519080825280601f01601f191660200182016040528015612246576020820181803683370190505b5090508181016020015b600019016f181899199a1a9b1b9c1cb0b131b232b360811b600a86061a8153600a850494508461225057509392505050565b60606000612299836040015161216260201b60201c565b90506122d66122cf6040518060400160405280600a8152602001691553931250d15394d15160b21b81525061216260201b60201c565b82906133be565b156122fd5750506040805180820190915260048152634e6f6e6560e01b6020820152919050565b6123306122cf60405180604001604052806009815260200168556e6c6963656e736560b81b81525061216260201b60201c565b1561235c575050604080518082019091526009815268556e6c6963656e736560b81b6020820152919050565b6123896122cf6040518060400160405280600381526020016213525560ea1b81525061216260201b60201c565b156123af57505060408051808201909152600381526213525560ea1b6020820152919050565b6123e56122cf6040518060400160405280600c81526020016b47504c2d322e302d6f6e6c7960a01b81525061216260201b60201c565b8061242557506124256122cf6040518060400160405280601081526020016f23a8261699171816b7b916b630ba32b960811b81525061216260201b60201c565b1561245157505060408051808201909152600981526823a72a9023a8263b1960b91b6020820152919050565b6124876122cf6040518060400160405280600c81526020016b47504c2d332e302d6f6e6c7960a01b81525061216260201b60201c565b806124c757506124c76122cf6040518060400160405280601081526020016f23a8261699971816b7b916b630ba32b960811b81525061216260201b60201c565b156124f3575050604080518082019091526009815268474e552047504c763360b81b6020820152919050565b61252a6122cf6040518060400160405280600d81526020016c4c47504c2d322e312d6f6e6c7960981b81525061216260201b60201c565b8061256b575061256b6122cf604051806040016040528060118152602001702623a8261699171896b7b916b630ba32b960791b81525061216260201b60201c565b1561259a57505060408051808201909152600c81526b474e55204c47504c76322e3160a01b6020820152919050565b6125d16122cf6040518060400160405280600d81526020016c4c47504c2d332e302d6f6e6c7960981b81525061216260201b60201c565b8061261257506126126122cf604051806040016040528060118152602001702623a8261699971816b7b916b630ba32b960791b81525061216260201b60201c565b1561263f57505060408051808201909152600a815269474e55204c47504c763360b01b6020820152919050565b6126756122cf6040518060400160405280600c81526020016b4253442d322d436c6175736560a01b81525061216260201b60201c565b156126a457505060408051808201909152600c81526b4253442d322d436c6175736560a01b6020820152919050565b6126da6122cf6040518060400160405280600c81526020016b4253442d332d436c6175736560a01b81525061216260201b60201c565b1561270957505060408051808201909152600c81526b4253442d332d436c6175736560a01b6020820152919050565b61273a6122cf6040518060400160405280600781526020016604d504c2d322e360cc1b81525061216260201b60201c565b1561276457505060408051808201909152600781526604d504c2d322e360cc1b6020820152919050565b6127956122cf6040518060400160405280600781526020016604f534c2d332e360cc1b81525061216260201b60201c565b156127bf57505060408051808201909152600781526604f534c2d332e360cc1b6020820152919050565b6127f36122cf6040518060400160405280600a81526020016904170616368652d322e360b41b81525061216260201b60201c565b1561282057505060408051808201909152600a81526904170616368652d322e360b41b6020820152919050565b6128576122cf6040518060400160405280600d81526020016c4147504c2d332e302d6f6e6c7960981b81525061216260201b60201c565b8061289857506128986122cf6040518060400160405280601181526020017020a3a8261699971816b7b916b630ba32b960791b81525061216260201b60201c565b156128c557505060408051808201909152600a815269474e55204147504c763360b01b6020820152919050565b6128f76122cf604051806040016040528060088152602001674255534c2d312e3160c01b81525061216260201b60201c565b1561292157505060408051808201909152600781526642534c20312e3160c81b6020820152919050565b6040808401518451915161049f929060200161456f565b60608060005b84518110156129c3578185828151811061295a5761295a613ec6565b6020026020010151604051602001612973929190613b1a565b604051602081830303815290604052915060018551612992919061448f565b81146129bb57816040516020016129a991906146bf565b60405160208183030381529060405291505b60010161293e565b5060408051600380825260808201909252600091816020015b60608152602001906001900390816129dc5790505090508381600081518110612a0757612a07613ec6565b6020026020010181905250604051806040016040528060028152602001612d6360f01b81525081600181518110612a4057612a40613ec6565b60200260200101819052508181600281518110612a5f57612a5f613ec6565b6020908102919091010152949350505050565b6020808301518351835192840151600093612a9092918491906133d2565b14159392505050565b6040805180820190915260008082526020808301829052845185820151855192860151612ac693906134e3565b9050836020015181612ad8919061448f565b84518590612ae790839061448f565b90525060208401525090919050565b6040805180820190915260008082526020820152815183511015612b1b5750816102ac565b6020808301519084015160019114612b425750815160208481015190840151829020919020145b8015612b7357825184518590612b5990839061448f565b9052508251602085018051612b6f90839061455c565b9052505b509192915050565b6040805180820190915260008082526020820152612b9a838383613603565b5092915050565b6060600082600001516001600160401b03811115612bc157612bc1613a1a565b6040519080825280601f01601f191660200182016040528015612beb576020820181803683370190505b50602084810151855192935090830191612b9a9183916136a9565b60606000612c12610678565b6040805160ff808252612000820190925291925060009190816020015b6060815260200190600190039081612c2f5790505090506000604051806040016040528060038152602001620dce0f60eb1b815250828280612c7090613fd5565b935060ff1681518110612c8557612c85613ec6565b6020026020010181905250604051806040016040528060078152602001665e312e33322e3360c81b815250604051602001612cc091906146e4565b604051602081830303815290604052828280612cdb90613fd5565b935060ff1681518110612cf057612cf0613ec6565b60200260200101819052506040518060400160405280600881526020016776616c696461746560c01b815250828280612d2890613fd5565b935060ff1681518110612d3d57612d3d613ec6565b602002602001018190525082604051602001612d599190613f11565b604051602081830303815290604052828280612d7490613fd5565b935060ff1681518110612d8957612d89613ec6565b60200260200101819052506040518060400160405280600a8152602001690b4b58dbdb9d1c9858dd60b21b815250828280612dc390613fd5565b935060ff1681518110612dd857612dd8613ec6565b6020908102919091010152612ded8784613723565b8282612df881613fd5565b935060ff1681518110612e0d57612e0d613ec6565b602090810291909101015285515115612ea55760408051808201909152600b81526a2d2d7265666572656e636560a81b60208201528282612e4d81613fd5565b935060ff1681518110612e6257612e62613ec6565b60209081029190910101528551612e799084613723565b8282612e8481613fd5565b935060ff1681518110612e9957612e99613ec6565b60200260200101819052505b856080015115612f135760408051808201909152601881527f2d2d756e73616665536b697053746f72616765436865636b000000000000000060208201528282612eee81613fd5565b935060ff1681518110612f0357612f03613ec6565b6020026020010181905250612f6e565b8415612f6e576040805180820190915260128152712d2d726571756972655265666572656e636560701b60208201528282612f4d81613fd5565b935060ff1681518110612f6257612f62613ec6565b60200260200101819052505b60408601515115612ffa5760408051808201909152600d81526c2d2d756e73616665416c6c6f7760981b60208201528282612fa881613fd5565b935060ff1681518110612fbd57612fbd613ec6565b60200260200101819052508560400151828280612fd990613fd5565b935060ff1681518110612fee57612fee613ec6565b60200260200101819052505b8560600151156130645760408051808201909152601481527f2d2d756e73616665416c6c6f7752656e616d65730000000000000000000000006020820152828261304381613fd5565b935060ff168151811061305857613058613ec6565b60200260200101819052505b60008160ff166001600160401b0381111561308157613081613a1a565b6040519080825280602002602001820160405280156130b457816020015b606081526020019060019003908161309f5790505b50905060005b8260ff168160ff16101561310d57838160ff16815181106130dd576130dd613ec6565b6020026020010151828260ff16815181106130fa576130fa613ec6565b60209081029190910101526001016130ba565b50979650505050505050565b604080518082019091526000808252602082015281518351101561313e5750816102ac565b815183516020850151600092916131549161455c565b61315e919061448f565b6020840151909150600190821461317f575082516020840151819020908220145b801561319a5783518551869061319690839061448f565b9052505b50929392505050565b8051825160208085015190840151600093849390926131c39284906134e3565b6131cd919061455c565b90505b835160208501516131e1919061455c565b8111612b9a57816131f181614729565b925050826000015161322785602001518361320c919061448f565b8651613218919061448f565b855160208701518591906134e3565b613231919061455c565b90506131d0565b6060600061324684846131a3565b61325190600161455c565b6001600160401b0381111561326857613268613a1a565b60405190808252806020026020018201604052801561329b57816020015b60608152602001906001900390816132865790505b50905060005b8151811015611c95576132b7611e338686612b7b565b8282815181106132c9576132c9613ec6565b60209081029190910101526001016132a1565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310613325577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310613351576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc10000831061336f57662386f26fc10000830492506010015b6305f5e1008310613387576305f5e100830492506008015b612710831061339b57612710830492506004015b606483106133ad576064830492506002015b600a83106102ac5760010192915050565b60006133ca8383613763565b159392505050565b6000808584116134d95760208411613485576000841561341d5760016133f986602061448f565b613404906008614742565b61340f906002614840565b613419919061448f565b1990505b835181168561342c898961455c565b613436919061448f565b805190935082165b81811461347057878411613458578794505050505061195e565b836134628161484c565b94505082845116905061343e565b61347a878561455c565b94505050505061195e565b838320613492858861448f565b61349c908761455c565b91505b8582106134d7578482208082036134c4576134ba868461455c565b935050505061195e565b6134cf60018461448f565b92505061349f565b505b5092949350505050565b600083818685116135ee576020851161359d576000851561352f57600161350b87602061448f565b613516906008614742565b613521906002614840565b61352b919061448f565b1990505b845181166000876135408b8b61455c565b61354a919061448f565b855190915083165b82811461358f578186106135775761356a8b8b61455c565b965050505050505061195e565b8561358181614729565b965050838651169050613552565b85965050505050505061195e565b508383206000905b6135af868961448f565b82116135ec578583208082036135cb578394505050505061195e565b6135d660018561455c565b93505081806135e490614729565b9250506135a5565b505b6135f8878761455c565b979650505050505050565b604080518082019091526000808252602080830182905285518682015186519287015161363093906134e3565b60208087018051918601919091525190915061364c908261448f565b83528451602086015161365f919061455c565b810361366e57600085526136a0565b8351835161367c919061455c565b8551869061368b90839061448f565b905250835161369a908261455c565b60208601525b50909392505050565b602081106136e157815183526136c060208461455c565b92506136cd60208361455c565b91506136da60208261448f565b90506136a9565b60001981156137105760016136f783602061448f565b61370390610100614840565b61370d919061448f565b90505b9151835183169219169190911790915250565b606060006137318484610712565b805160208083015160405193945061374b93909101614863565b60405160208183030381529060405291505092915050565b8151815160009190811115613776575081515b6020808501519084015160005b8381101561382f57825182518082146137ff5760001960208710156137de576001846137b089602061448f565b6137ba919061455c565b6137c5906008614742565b6137d0906002614840565b6137da919061448f565b1990505b81811683821681810391146137fc5797506102ac9650505050505050565b50505b61380a60208661455c565b945061381760208561455c565b93505050602081613828919061455c565b9050613783565b5084518651610ce0919061489f565b610c9f8061611f83390190565b6040518060e0016040528060608152602001606081526020016060815260200160001515815260200160001515815260200160001515815260200161388e613893565b905290565b6040518061010001604052806000151581526020016000151581526020016060815260200160008019168152602001606081526020016060815260200160001515815260200161388e6040518060800160405280600081526020016000815260200160008152602001600081525090565b60005b8381101561391f578181015183820152602001613907565b50506000910152565b60008151808452613940816020860160208601613904565b601f01601f19169290920160200192915050565b6001600160a01b038316815260406020820181905260009061195e90830184613928565b7f4661696c656420746f206465706c6f7920636f6e7472616374200000000000008152600083516139b081601a850160208801613904565b6101d160f51b601a9184019182015283516139d281601c840160208801613904565b01601c01949350505050565b6020815260006103ba6020830184613928565b600060208284031215613a0357600080fd5b81516001600160a01b03811681146103ba57600080fd5b634e487b7160e01b600052604160045260246000fd5b604051606081016001600160401b0381118282101715613a5257613a52613a1a565b60405290565b6000806001600160401b03841115613a7257613a72613a1a565b50604051601f19601f85018116603f011681018181106001600160401b0382111715613aa057613aa0613a1a565b604052838152905080828401851015613ab857600080fd5b611c95846020830185613904565b600082601f830112613ad757600080fd5b6103ba83835160208501613a58565b600060208284031215613af857600080fd5b81516001600160401b03811115613b0e57600080fd5b6102a884828501613ac6565b60008351613b2c818460208801613904565b835190830190613b40818360208801613904565b01949350505050565b7f4661696c656420746f206465706c6f7920636f6e747261637420000000000000815260008351613b8181601a850160208801613904565b7f207573696e6720636f6e7374727563746f722064617461202200000000000000601a918401918201528351613bbe816033840160208801613904565b601160f91b60339290910191820152603401949350505050565b60408152600b60408201526a1193d55391149657d3d55560aa1b60608201526080602082015260006103ba6080830184613928565b600060208284031215613c1f57600080fd5b81516001600160401b03811115613c3557600080fd5b8201601f81018413613c4657600080fd5b6102a884825160208401613a58565b60008551613c67818460208a01613904565b602f60f81b9083019081528551613c85816001840160208a01613904565b602f60f81b600192909101918201528451613ca7816002840160208901613904565b600181830101915050602f60f81b60018201528351613ccd816002840160208801613904565b64173539b7b760d91b600292909101918201526007019695505050505050565b604081526000613d006040830184613928565b828103602084015260048152630b985cdd60e21b60208201526040810191505092915050565b600060208284031215613d3857600080fd5b815180151581146103ba57600080fd5b7f436f756c64206e6f742066696e642041535420696e2061727469666163742000815260008251613d8081601f850160208701613904565b7f2e205365742060617374203d20747275656020696e20666f756e6472792e746f601f939091019283015250611b5b60f21b603f820152604101919050565b604081526000613dd26040830184613928565b8281036020840152601181527005cc2e6e85cc2c4e6ded8eae8caa0c2e8d607b1b60208201526040810191505092915050565b604081526000613e186040830184613928565b8281036020840152600c81526b2e6173742e6c6963656e736560a01b60208201526040810191505092915050565b7f2e6d657461646174612e736f75726365732e5b27000000000000000000000000815260008251613e7e816014850160208701613904565b6b13ae9735b2b1b1b0b5991a9b60a11b6014939091019283015250602001919050565b604081526000613eb46040830185613928565b82810360208401526103b68185613928565b634e487b7160e01b600052603260045260246000fd5b601160f91b81528151600090613ef9816001850160208701613904565b601160f91b6001939091019283015250600201919050565b60008251613f23818460208701613904565b6a2f6275696c642d696e666f60a81b920191825250600b01919050565b7f436f756c64206e6f742066696e64206275696c642d696e666f2066696c65207781527f697468206d61746368696e6720736f7572636520636f6465206861736820666f60208201526a0391031b7b73a3930b1ba160ad1b604082015260008251613fb281604b850160208701613904565b91909101604b0192915050565b634e487b7160e01b600052601160045260246000fd5b600060ff821660ff8103613feb57613feb613fbf565b60010192915050565b7f406f70656e7a657070656c696e2f646566656e6465722d6465706c6f792d636c81526801a595b9d0b58db1a560be1b60208201526000825161403e816029850160208701613904565b9190910160290192915050565b60408152601660408201527f4f50454e5a455050454c494e5f424153485f504154480000000000000000000060608201526080602082015260006103ba6080830184613928565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b828110156140eb57603f198786030184526140d6858351613928565b945060209384019391909101906001016140ba565b50929695505050505050565b60006020828403121561410957600080fd5b81516001600160401b0381111561411f57600080fd5b82016060818503121561413157600080fd5b614139613a30565b81518060030b811461414a57600080fd5b815260208201516001600160401b0381111561416557600080fd5b61417186828501613ac6565b60208301525060408201516001600160401b0381111561419057600080fd5b61419c86828501613ac6565b604083015250949350505050565b7f4661696c656420746f2072756e206261736820636f6d6d616e642077697468208152601160f91b6020820152600082516141ec816021850160208701613904565b7f222e20496620796f7520617265207573696e672057696e646f77732c2073657460219390910192830152507f20746865204f50454e5a455050454c494e5f424153485f5041544820656e766960418201527f726f6e6d656e74207661726961626c6520746f207468652066756c6c7920717560618201527f616c69666965642070617468206f66207468652062617368206578656375746160818201527f626c652e20466f72206578616d706c652c20696620796f75206172652075736960a18201527f6e672047697420666f722057696e646f77732c206164642074686520666f6c6c60c18201527f6f77696e67206c696e6520696e20746865202e656e762066696c65206f66207960e18201527f6f75722070726f6a65637420287573696e6720666f727761726420736c6173686101018201527f6573293a0a4f50454e5a455050454c494e5f424153485f504154483d22433a2f6101218201527f50726f6772616d2046696c65732f4769742f62696e2f6261736822000000000061014182015261015c01919050565b7f4661696c656420746f2066696e64206c696e65207769746820707265666978208152602760f81b6020820152600083516143bc816021850160208801613904565b6c0139034b71037baba383aba1d1609d1b60219184019182015283516143e981602e840160208801613904565b01602e01949350505050565b7f4661696c656420746f2072756e2075706772616465207361666574792076616c815268034b230ba34b7b71d160bd1b60208201526000825161403e816029850160208701613904565b7f55706772616465207361666574792076616c69646174696f6e206661696c65648152611d0560f11b602082015260008251614482816022850160208701613904565b9190910160220192915050565b818103818111156102ac576102ac613fbf565b6d021b7b73a3930b1ba103730b6b2960951b8152600082516144cb81600e850160208701613904565b7f206d75737420626520696e2074686520666f726d6174204d79436f6e74726163600e9390910192830152507f742e736f6c3a4d79436f6e7472616374206f72204d79436f6e74726163742e73602e8201527f6f6c206f72206f75742f4d79436f6e74726163742e736f6c2f4d79436f6e7472604e8201526730b1ba173539b7b760c11b606e820152607601919050565b808201808211156102ac576102ac613fbf565b7f53504458206c6963656e7365206964656e7469666965722000000000000000008152600083516145a7816018850160208801613904565b6301034b7160e51b60189184019182015283516145cb81601c840160208801613904565b7f20646f6573206e6f74206c6f6f6b206c696b65206120737570706f7274656420601c92909101918201527f6c6963656e736520666f7220626c6f636b206578706c6f726572207665726966603c8201527f69636174696f6e2e205573652074686520606c6963656e73655479706560206f605c8201527f7074696f6e20746f20737065636966792061206c6963656e736520747970652c607c8201527f206f7220736574207468652060736b69704c6963656e73655479706560206f70609c8201527f74696f6e20746f2060747275656020746f20736b69702e00000000000000000060bc82015260d301949350505050565b600082516146d1818460208701613904565b600160fd1b920191825250600101919050565b7f406f70656e7a657070656c696e2f75706772616465732d636f7265400000000081526000825161471c81601c850160208701613904565b91909101601c0192915050565b60006001820161473b5761473b613fbf565b5060010190565b80820281158282048414176102ac576102ac613fbf565b6001815b60018411156147945780850481111561477857614778613fbf565b600184161561478657908102905b60019390931c92800261475d565b935093915050565b6000826147ab575060016102ac565b816147b8575060006102ac565b81600181146147ce57600281146147d8576147f4565b60019150506102ac565b60ff8411156147e9576147e9613fbf565b50506001821b6102ac565b5060208310610133831016604e8410600b8410161715614817575081810a6102ac565b6148246000198484614759565b806000190482111561483857614838613fbf565b029392505050565b60006103ba838361479c565b60008161485b5761485b613fbf565b506000190190565b60008351614875818460208801613904565b601d60f91b9083019081528351614893816001840160208801613904565b01600101949350505050565b8181036000831280158383131683831282161715612b9a57612b9a613fbf565b6080516118226148fd600039600081816101bf01528181610574015281816105d60152818161093501528181610ba30152610c0501526118226000f3fe608060405234801561001057600080fd5b506004361061018d5760003560e01c806381100bf0116100e3578063a217fddf1161008c578063d936547e11610066578063d936547e146103c9578063d9caed12146103ec578063e63ab1e9146103ff57600080fd5b8063a217fddf1461039b578063c8a02362146103a3578063d547741f146103b657600080fd5b806391d14854116100bd57806391d148541461032f5780639a590427146103755780639b19251a1461038857600080fd5b806381100bf0146102e05780638456cb591461030057806385f438c11461030857600080fd5b806336568abe11610145578063570618e11161011f578063570618e11461029b5780635c975abb146102c25780636133b4bb146102cd57600080fd5b806336568abe146102605780633c2f05a8146102735780633f4ba83a1461029357600080fd5b806321fc65f21161017657806321fc65f214610206578063248a9ca31461021b5780632f2ff15d1461024d57600080fd5b806301ffc9a714610192578063116191b6146101ba575b600080fd5b6101a56101a0366004611436565b610426565b60405190151581526020015b60405180910390f35b6101e17f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101b1565b6102196102143660046114ea565b6104bf565b005b61023f610229366004611559565b6000908152600160208190526040909120015490565b6040519081526020016101b1565b61021961025b366004611572565b6106c0565b61021961026e366004611572565b6106ec565b6004546101e19073ffffffffffffffffffffffffffffffffffffffff1681565b61021961074a565b61023f7f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a81565b60025460ff166101a5565b6102196102db36600461159e565b61077f565b6005546101e19073ffffffffffffffffffffffffffffffffffffffff1681565b6102196109b7565b61023f7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b6101a561033d366004611572565b600091825260016020908152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b6102196103833660046115f8565b6109e9565b6102196103963660046115f8565b610a6a565b61023f600081565b6102196103b13660046114ea565b610aee565b6102196103c4366004611572565b610cd5565b6101a56103d73660046115f8565b60036020526000908152604090205460ff1681565b6102196103fa366004611613565b610cfb565b61023f7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b0000000000000000000000000000000000000000000000000000000014806104b957507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b6104c7610e27565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e46104f181610e6a565b6104f9610e74565b73ffffffffffffffffffffffffffffffffffffffff861660009081526003602052604090205460ff16610558576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61059973ffffffffffffffffffffffffffffffffffffffff87167f000000000000000000000000000000000000000000000000000000000000000086610eb3565b6040517f5131ab5900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690635131ab59906106139089908990899089908990600401611699565b600060405180830381600087803b15801561062d57600080fd5b505af1158015610641573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167f85b5be9cf454e05e0bddf49315178102227c312078eefa3c00294fb4d912ae4e8686866040516106a6939291906116f6565b60405180910390a3506106b96001600055565b5050505050565b600082815260016020819052604090912001546106dc81610e6a565b6106e68383610f40565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8116331461073b576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6107458282610fed565b505050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61077481610e6a565b61077c61108e565b50565b60045473ffffffffffffffffffffffffffffffffffffffff166340c10f19306107a9866005611719565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815273ffffffffffffffffffffffffffffffffffffffff90921660048301526024820152604401600060405180830381600087803b15801561081457600080fd5b505af1158015610828573d6000803e3d6000fd5b5050600480546007546040517fa9059cbb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff918216938101939093526005602484015216925063a9059cbb91506044016020604051808303816000875af11580156108a9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108cd9190611753565b506004546108f49073ffffffffffffffffffffffffffffffffffffffff16858585856104bf565b600480546040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116938201939093529116906370a0823190602401602060405180830381865afa158015610986573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109aa9190611775565b156106e6576106e661178e565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a6109e181610e6a565b61077c6110ed565b7f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a610a1381610e6a565b73ffffffffffffffffffffffffffffffffffffffff8216600081815260036020526040808220805460ff19169055517f51085ddf9ebdded84b76e829eb58c4078e4b5bdf97d9a94723f336039da467919190a25050565b7f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a610a9481610e6a565b73ffffffffffffffffffffffffffffffffffffffff8216600081815260036020526040808220805460ff19166001179055517faab7954e9d246b167ef88aeddad35209ca2489d95a8aeb59e288d9b19fae5a549190a25050565b610af6610e27565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e4610b2081610e6a565b610b28610e74565b73ffffffffffffffffffffffffffffffffffffffff861660009081526003602052604090205460ff16610b87576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610bc873ffffffffffffffffffffffffffffffffffffffff87167f000000000000000000000000000000000000000000000000000000000000000086610eb3565b6040517fb8969bd400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063b8969bd490610c429089908990899089908990600401611699565b600060405180830381600087803b158015610c5c57600080fd5b505af1158015610c70573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fb9d4efa96044e5f5e03e696fa9ae2ff66911cc27e8a637c3627c75bc5b2241c88686866040516106a6939291906116f6565b60008281526001602081905260409091200154610cf181610e6a565b6106e68383610fed565b610d03610e27565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e4610d2d81610e6a565b610d35610e74565b73ffffffffffffffffffffffffffffffffffffffff841660009081526003602052604090205460ff16610d94576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610db573ffffffffffffffffffffffffffffffffffffffff85168484610eb3565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f9b1bfa7fa9ee420a16e124f794c35ac9f90472acc99140eb2f6447c714cad8eb84604051610e1491815260200190565b60405180910390a3506107456001600055565b600260005403610e63576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b61077c813361112a565b60025460ff1615610eb1576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6040805173ffffffffffffffffffffffffffffffffffffffff8416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb000000000000000000000000000000000000000000000000000000001790526107459084906111bb565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff16610fe557600083815260016020818152604080842073ffffffffffffffffffffffffffffffffffffffff87168086529252808420805460ff19169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45060016104b9565b5060006104b9565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff1615610fe557600083815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff86168085529252808320805460ff1916905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45060016104b9565b611096611251565b6002805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b6110f5610e74565b6002805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586110c33390565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff166111b7576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82166004820152602481018390526044015b60405180910390fd5b5050565b60006111dd73ffffffffffffffffffffffffffffffffffffffff84168361128d565b905080516000141580156112025750808060200190518101906112009190611753565b155b15610745576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff841660048201526024016111ae565b60025460ff16610eb1576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606061129b838360006112a2565b9392505050565b6060814710156112e0576040517fcd7860590000000000000000000000000000000000000000000000000000000081523060048201526024016111ae565b6000808573ffffffffffffffffffffffffffffffffffffffff16848660405161130991906117bd565b60006040518083038185875af1925050503d8060008114611346576040519150601f19603f3d011682016040523d82523d6000602084013e61134b565b606091505b509150915061135b868383611365565b9695505050505050565b60608261137a57611375826113f4565b61129b565b815115801561139e575073ffffffffffffffffffffffffffffffffffffffff84163b155b156113ed576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff851660048201526024016111ae565b508061129b565b8051156114045780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006020828403121561144857600080fd5b81357fffffffff000000000000000000000000000000000000000000000000000000008116811461129b57600080fd5b803573ffffffffffffffffffffffffffffffffffffffff8116811461149c57600080fd5b919050565b60008083601f8401126114b357600080fd5b50813567ffffffffffffffff8111156114cb57600080fd5b6020830191508360208285010111156114e357600080fd5b9250929050565b60008060008060006080868803121561150257600080fd5b61150b86611478565b945061151960208701611478565b935060408601359250606086013567ffffffffffffffff81111561153c57600080fd5b611548888289016114a1565b969995985093965092949392505050565b60006020828403121561156b57600080fd5b5035919050565b6000806040838503121561158557600080fd5b8235915061159560208401611478565b90509250929050565b600080600080606085870312156115b457600080fd5b6115bd85611478565b935060208501359250604085013567ffffffffffffffff8111156115e057600080fd5b6115ec878288016114a1565b95989497509550505050565b60006020828403121561160a57600080fd5b61129b82611478565b60008060006060848603121561162857600080fd5b61163184611478565b925061163f60208501611478565b929592945050506040919091013590565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff8616815273ffffffffffffffffffffffffffffffffffffffff851660208201528360408201526080606082015260006116eb608083018486611650565b979650505050505050565b838152604060208201526000611710604083018486611650565b95945050505050565b808201808211156104b9577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006020828403121561176557600080fd5b8151801515811461129b57600080fd5b60006020828403121561178757600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b6000825160005b818110156117de57602081860181015185830152016117c4565b50600092019182525091905056fea264697066735822122077f2d215a4760682a6f757e5b5c49fde9ea29a3b2ef55d3e1c39d0779fbdec1164736f6c634300081a0033608060405234801561001057600080fd5b50604051610c9f380380610c9f83398101604081905261002f9161010d565b8181600361003d83826101ff565b50600461004a82826101ff565b50505050506102bd565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261007b57600080fd5b81516001600160401b0381111561009457610094610054565b604051601f8201601f19908116603f011681016001600160401b03811182821017156100c2576100c2610054565b6040528181528382016020018510156100da57600080fd5b60005b828110156100f9576020818601810151838301820152016100dd565b506000918101602001919091529392505050565b6000806040838503121561012057600080fd5b82516001600160401b0381111561013657600080fd5b6101428582860161006a565b602085015190935090506001600160401b0381111561016057600080fd5b61016c8582860161006a565b9150509250929050565b600181811c9082168061018a57607f821691505b6020821081036101aa57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156101fa57806000526020600020601f840160051c810160208510156101d75750805b601f840160051c820191505b818110156101f757600081556001016101e3565b50505b505050565b81516001600160401b0381111561021857610218610054565b61022c816102268454610176565b846101b0565b6020601f82116001811461026057600083156102485750848201515b600019600385901b1c1916600184901b1784556101f7565b600084815260208120601f198516915b828110156102905787850151825560209485019460019092019101610270565b50848210156102ae5786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b6109d3806102cc6000396000f3fe608060405234801561001057600080fd5b50600436106100be5760003560e01c806340c10f191161007657806395d89b411161005b57806395d89b4114610183578063a9059cbb1461018b578063dd62ed3e1461019e57600080fd5b806340c10f191461013857806370a082311461014d57600080fd5b806318160ddd116100a757806318160ddd1461010457806323b872dd14610116578063313ce5671461012957600080fd5b806306fdde03146100c3578063095ea7b3146100e1575b600080fd5b6100cb6101e4565b6040516100d891906107bf565b60405180910390f35b6100f46100ef366004610854565b610276565b60405190151581526020016100d8565b6002545b6040519081526020016100d8565b6100f461012436600461087e565b610290565b604051601281526020016100d8565b61014b610146366004610854565b6102b4565b005b61010861015b3660046108bb565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6100cb6102c2565b6100f4610199366004610854565b6102d1565b6101086101ac3660046108dd565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6060600380546101f390610910565b80601f016020809104026020016040519081016040528092919081815260200182805461021f90610910565b801561026c5780601f106102415761010080835404028352916020019161026c565b820191906000526020600020905b81548152906001019060200180831161024f57829003601f168201915b5050505050905090565b6000336102848185856102df565b60019150505b92915050565b60003361029e8582856102f1565b6102a98585856103c5565b506001949350505050565b6102be8282610470565b5050565b6060600480546101f390610910565b6000336102848185856103c5565b6102ec83838360016104cc565b505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146103bf57818110156103b0576040517ffb8f41b200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416600482015260248101829052604481018390526064015b60405180910390fd5b6103bf848484840360006104cc565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8316610415576040517f96c6fd1e000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff8216610465576040517fec442f05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b6102ec838383610614565b73ffffffffffffffffffffffffffffffffffffffff82166104c0576040517fec442f05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b6102be60008383610614565b73ffffffffffffffffffffffffffffffffffffffff841661051c576040517fe602df05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff831661056c576040517f94280d62000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260016020908152604080832093871683529290522082905580156103bf578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161060691815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff831661064c5780600260008282546106419190610963565b909155506106fe9050565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260208190526040902054818110156106d2576040517fe450d38c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8516600482015260248101829052604481018390526064016103a7565b73ffffffffffffffffffffffffffffffffffffffff841660009081526020819052604090209082900390555b73ffffffffffffffffffffffffffffffffffffffff821661072757600280548290039055610753565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090208054820190555b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516107b291815260200190565b60405180910390a3505050565b602081526000825180602084015260005b818110156107ed57602081860181015160408684010152016107d0565b5060006040828501015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011684010191505092915050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461084f57600080fd5b919050565b6000806040838503121561086757600080fd5b6108708361082b565b946020939093013593505050565b60008060006060848603121561089357600080fd5b61089c8461082b565b92506108aa6020850161082b565b929592945050506040919091013590565b6000602082840312156108cd57600080fd5b6108d68261082b565b9392505050565b600080604083850312156108f057600080fd5b6108f98361082b565b91506109076020840161082b565b90509250929050565b600181811c9082168061092457607f821691505b60208210810361095d577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b8082018082111561028a577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea26469706673582212207e804ca539d49155d2b6bc19268ce22f9f857027c75247d69fb0d56a089c93d464736f6c634300081a00330000000000000000000000007109709ecfa91a80626ff3989d68f67f5b1dd12d8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f7420", + Bin: "0x600580546001600160a01b03191633908117909155600e60a09081526d11d85d195dd85e5155934b9cdbdb60921b60c0526101049190915261012361012481905261014452606460e090815261016460405261010080516001600160e01b0390811663c0c53b8b60e01b1790915261007992919061029316565b600680546001600160a01b03929092166001600160a01b03199283168117909155600780549092161790553480156100b057600080fd5b5060075460055460016000556002805460ff191690556001600160a01b039182169116808215806100e857506001600160a01b038216155b806100fa57506001600160a01b038116155b156101185760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b0383166080526101306000826102b2565b5061015b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a826102b2565b506101867f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e4836102b2565b5061019f600080516020616dde833981519152826102b2565b506101b8600080516020616dde833981519152836102b2565b505050506040516101c89061383e565b60408082526004908201819052631d195cdd60e21b606083015260806020830181905282015263151154d560e21b60a082015260c001604051809103906000f08015801561021a573d6000803e3d6000fd5b50600480546001600160a01b0319166001600160a01b0392831617815560075460405163ae7a3a6f60e01b815230928101929092529091169063ae7a3a6f90602401600060405180830381600087803b15801561027657600080fd5b505af115801561028a573d6000803e3d6000fd5b505050506148bf565b600061029d61384b565b6102a8848483610345565b9150505b92915050565b60008281526001602090815260408083206001600160a01b038516845290915281205460ff1661033d5760008381526001602081815260408084206001600160a01b0387168086529252808420805460ff19169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45060016102ac565b5060006102ac565b60008061035285846103c1565b90506103b66040518060400160405280601d81526020017f4552433139363750726f78792e736f6c3a4552433139363750726f787900000081525082866040516020016103a0929190613954565b60408051601f19818403018152919052856103cd565b9150505b9392505050565b60006103ba8383610401565b60c081015151600090156103f7576103f084848460c0015161042260201b60201c565b90506103ba565b6103f0848461059b565b600061040d8383610668565b6103ba838360200151846103cd60201b60201c565b60008061042d610678565b9050600061043b8683610712565b905060006104588260600151836020015185610b3560201b60201c565b9050600061046883838989610cea565b9050600061047582611966565b602081015181519192509060030b156104ce5789826040015160405160200161049f929190613978565b60408051601f198184030181529082905262461bcd60e51b82526104c5916004016139de565b60405180910390fd5b60006105176040518060400160405280601581526020017f4465706c6f79656420746f20616464726573733a200000000000000000000000815250836001611afd60201b60201c565b60405163c6ce059d60e01b8152909150600080516020616dbe8339815191529063c6ce059d9061054b9084906004016139de565b602060405180830381865afa158015610568573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061058c91906139f1565b9b9a5050505050505050505050565b604051638d1cc92560e01b81526000908190600080516020616dbe83398151915290638d1cc925906105d19087906004016139de565b600060405180830381865afa1580156105ee573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526106169190810190613ae6565b905060006106458285604051602001610630929190613b1a565b60408051601f19818403018152919052611c9d565b90506001600160a01b0381166102a857848460405160200161049f929190613b49565b61067482826000611cb0565b5050565b60408051808201825260038152621bdd5d60ea1b602082015290516334515cdb60e21b8152606091600080516020616dbe83398151915291829063d145736c906106c6908490600401613bd8565b600060405180830381865afa1580156106e3573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261070b9190810190613c0d565b9250505090565b6107446040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b6000600080516020616dbe83398151915290506107896040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b61079285611d8a565b602082015260006107a286611fdf565b90506000836001600160a01b031663d930a0e66040518163ffffffff1660e01b8152600401600060405180830381865afa1580156107e4573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261080c9190810190613c0d565b868385602001516040516020016108269493929190613c55565b60408051601f19818403018152908290526360f9bb1160e01b825291506000906001600160a01b038616906360f9bb11906108659085906004016139de565b600060405180830381865afa158015610882573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526108aa9190810190613c0d565b604051636da11afb60e11b81529091506001600160a01b0386169063db4235f6906108d9908490600401613ced565b602060405180830381865afa1580156108f6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061091a9190613d26565b61092f578160405160200161049f9190613d48565b6040516309389f5960e31b81526001600160a01b038616906349c4fac89061095b908490600401613dbf565b600060405180830381865afa158015610978573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526109a09190810190613c0d565b8452604051636da11afb60e11b81526001600160a01b0386169063db4235f6906109ce908490600401613e05565b602060405180830381865afa1580156109eb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a0f9190613d26565b15610a8b576040516309389f5960e31b81526001600160a01b038616906349c4fac890610a40908490600401613e05565b600060405180830381865afa158015610a5d573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610a859190810190613c0d565b60408501525b846001600160a01b03166349c4fac8828660000151604051602001610ab09190613e46565b6040516020818303038152906040526040518363ffffffff1660e01b8152600401610adc929190613ea1565b600060405180830381865afa158015610af9573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610b219190810190613c0d565b606085015250608083015250949350505050565b60408051600480825260a0820190925260609160009190816020015b6060815260200190600190039081610b51579050509050604051806040016040528060048152602001630677265760e41b81525081600081518110610b9857610b98613ec6565b6020026020010181905250604051806040016040528060038152602001620b5c9b60ea1b81525081600181518110610bd257610bd2613ec6565b602002602001018190525084604051602001610bee9190613edc565b60405160208183030381529060405281600281518110610c1057610c10613ec6565b602002602001018190525082604051602001610c2c9190613f11565b60405160208183030381529060405281600381518110610c4e57610c4e613ec6565b60209081029190910101526000610c6482611966565b9050600081602001519050610ccb610c9e60405180604001604052806005815260200164173539b7b760d91b81525061216260201b60201c565b6040805180820182526000808252602091820152815180830190925284518252808501908201529061218f565b610ce0578560405160200161049f9190613f40565b9695505050505050565b60a0810151604080518082018252600080825260209182015281518083019092528251808352928101910152606090600080516020616dbe8339815191529015610d34565b511590565b610e5057826020015115610dc45760405162461bcd60e51b81526020600482015260586024820152600080516020616dfe83398151915260448201527f62652075736564207768656e207468652060736b6970566572696679536f757260648201527f6365436f646560206f7074696f6e206973206074727565600000000000000000608482015260a4016104c5565b8260c0015115610e505760405162461bcd60e51b81526020600482015260536024820152600080516020616dfe83398151915260448201527f62652075736564207768656e207468652060736b69704c6963656e736554797060648201527f6560206f7074696f6e2069732060747275656000000000000000000000000000608482015260a4016104c5565b6040805160ff8082526120008201909252600091816020015b6060815260200190600190039081610e695790505090506000604051806040016040528060038152602001620dce0f60eb1b815250828280610eaa90613fd5565b935060ff1681518110610ebf57610ebf613ec6565b60200260200101819052506040518060400160405280600d81526020016c302e302e312d616c7068612e3760981b815250604051602001610f009190613ff4565b604051602081830303815290604052828280610f1b90613fd5565b935060ff1681518110610f3057610f30613ec6565b6020026020010181905250604051806040016040528060068152602001656465706c6f7960d01b815250828280610f6690613fd5565b935060ff1681518110610f7b57610f7b613ec6565b60200260200101819052506040518060400160405280600e81526020016d2d2d636f6e74726163744e616d6560901b815250828280610fb990613fd5565b935060ff1681518110610fce57610fce613ec6565b60200260200101819052508760200151828280610fea90613fd5565b935060ff1681518110610fff57610fff613ec6565b60200260200101819052506040518060400160405280600e81526020016d05a5ac6dedce8e4c2c6e8a0c2e8d60931b81525082828061103d90613fd5565b935060ff168151811061105257611052613ec6565b60209081029190910101528751828261106a81613fd5565b935060ff168151811061107f5761107f613ec6565b6020026020010181905250604051806040016040528060098152602001680b4b58da185a5b925960ba1b8152508282806110b890613fd5565b935060ff16815181106110cd576110cd613ec6565b60209081029190910101526110e1466121f0565b82826110ec81613fd5565b935060ff168151811061110157611101613ec6565b60200260200101819052506040518060400160405280600f81526020016e2d2d6275696c64496e666f46696c6560881b81525082828061114090613fd5565b935060ff168151811061115557611155613ec6565b60200260200101819052508682828061116d90613fd5565b935060ff168151811061118257611182613ec6565b60209081029190910101528551156112905760408051808201909152601581527f2d2d636f6e7374727563746f7242797465636f64650000000000000000000000602082015282826111d381613fd5565b935060ff16815181106111e8576111e8613ec6565b60209081029190910101526040516371aad10d60e01b81526001600160a01b038416906371aad10d9061121f9089906004016139de565b600060405180830381865afa15801561123c573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526112649190810190613c0d565b828261126f81613fd5565b935060ff168151811061128457611284613ec6565b60200260200101819052505b84602001511561133d576040805180820190915260128152712d2d766572696679536f75726365436f646560701b602082015282826112ce81613fd5565b935060ff16815181106112e3576112e3613ec6565b60200260200101819052506040518060400160405280600581526020016466616c736560d81b81525082828061131890613fd5565b935060ff168151811061132d5761132d613ec6565b60200260200101819052506114a4565b611353610d2f8660a0015161216260201b60201c565b6113d65760408051808201909152600d81526c2d2d6c6963656e73655479706560981b6020820152828261138681613fd5565b935060ff168151811061139b5761139b613ec6565b60200260200101819052508460a001516040516020016113bb9190613edc565b60405160208183030381529060405282828061131890613fd5565b8460c001511580156113fb57506113f9610d2f896040015161216260201b60201c565b155b156114a45760408051808201909152600d81526c2d2d6c6963656e73655479706560981b6020820152828261142f81613fd5565b935060ff168151811061144457611444613ec6565b602090810291909101015261145888612282565b6040516020016114689190613edc565b60405160208183030381529060405282828061148390613fd5565b935060ff168151811061149857611498613ec6565b60200260200101819052505b6114ba610d2f866040015161216260201b60201c565b61153d5760408051808201909152600b81526a0b4b5c995b185e595c925960aa1b602082015282826114eb81613fd5565b935060ff168151811061150057611500613ec6565b6020026020010181905250846040015182828061151c90613fd5565b935060ff168151811061153157611531613ec6565b60200260200101819052505b60608501511561162e576040805180820190915260068152650b4b5cd85b1d60d21b6020820152828261156f81613fd5565b935060ff168151811061158457611584613ec6565b60209081029190910101526060850151604051631623433d60e31b815260048101919091526001600160a01b0384169063b11a19e890602401600060405180830381865afa1580156115da573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526116029190810190613c0d565b828261160d81613fd5565b935060ff168151811061162257611622613ec6565b60200260200101819052505b60e085015151156116c05760408051808201909152600a8152690b4b59d85cd31a5b5a5d60b21b6020820152828261166581613fd5565b935060ff168151811061167a5761167a613ec6565b602090810291909101015260e085015151611694906121f0565b828261169f81613fd5565b935060ff16815181106116b4576116b4613ec6565b60200260200101819052505b60e0850151602001511561175d5760408051808201909152600a8152692d2d676173507269636560b01b602082015282826116fa81613fd5565b935060ff168151811061170f5761170f613ec6565b60200260200101819052506117318560e00151602001516121f060201b60201c565b828261173c81613fd5565b935060ff168151811061175157611751613ec6565b60200260200101819052505b60e085015160400151156117fe5760408051808201909152600e81526d2d2d6d617846656550657247617360901b6020820152828261179b81613fd5565b935060ff16815181106117b0576117b0613ec6565b60200260200101819052506117d28560e00151604001516121f060201b60201c565b82826117dd81613fd5565b935060ff16815181106117f2576117f2613ec6565b60200260200101819052505b60e085015160600151156118ae5760408051808201909152601681527f2d2d6d61785072696f72697479466565506572476173000000000000000000006020820152828261184b81613fd5565b935060ff168151811061186057611860613ec6565b60200260200101819052506118828560e00151606001516121f060201b60201c565b828261188d81613fd5565b935060ff16815181106118a2576118a2613ec6565b60200260200101819052505b60008160ff166001600160401b038111156118cb576118cb613a1a565b6040519080825280602002602001820160405280156118fe57816020015b60608152602001906001900390816118e95790505b50905060005b8260ff168160ff16101561195757838160ff168151811061192757611927613ec6565b6020026020010151828260ff168151811061194457611944613ec6565b6020908102919091010152600101611904565b5093505050505b949350505050565b61198d6040518060600160405280600060030b815260200160608152602001606081525090565b6040805180820182526004808252630c4c2e6d60e31b602083015291516334515cdb60e21b8152600080516020616dbe83398151915292600091849163d145736c916119db9186910161404b565b600060405180830381865afa1580156119f8573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611a209190810190613c0d565b90506000611a2e8683612938565b90506000846001600160a01b031663f45c1ce7836040518263ffffffff1660e01b8152600401611a5e9190614092565b6000604051808303816000875af1158015611a7d573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611aa591908101906140f7565b805190915060030b15801590611abe5750602081015151155b8015611acd5750604081015151155b15610ce05781600081518110611ae557611ae5613ec6565b602002602001015160405160200161049f91906141aa565b60606000611b328560408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600080825260209182015281518083019092528651825280870190820152909150611b699082905b90612a72565b15611c66576000611be682611be081611bda611bac8a60408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6040805180820182526000808252602091820152815180830190925282518252918201519181019190915290565b90612a99565b90612af6565b9050611c1a611c13604051806040016040528060018152602001600560f91b81525061216260201b60201c565b8290612a72565b15611c5457611c51611c4a604051806040016040528060018152602001600560f91b81525061216260201b60201c565b8290612b7b565b90505b611c5d81612ba1565b925050506103ba565b8215611c7f57848460405160200161049f92919061437a565b50506040805160208101909152600081526103ba565b509392505050565b6000808251602084016000f09392505050565b8160a0015115611cbf57505050565b6000611ccc848484612c06565b90506000611cd982611966565b602081015181519192509060030b158015611d4c5750611d4c611d20604051806040016040528060078152602001665355434345535360c81b81525061216260201b60201c565b604080518082018252600080825260209182015281518083019092528451825280850190820152611b63565b15611d5957505050505050565b60408201515115611d7957816040015160405160200161049f91906143f5565b8060405160200161049f919061443f565b60606000611dbf8360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b9050611df6611def604051806040016040528060048152602001630b9cdbdb60e21b81525061216260201b60201c565b829061218f565b15611e38576103ba611e33611e2c604051806040016040528060048152602001630b9cdbdb60e21b81525061216260201b60201c565b8390613119565b612ba1565b611e6a611e63604051806040016040528060018152602001601d60f91b81525061216260201b60201c565b82906131a3565b600103611ed257611e9c611c4a604051806040016040528060018152602001601d60f91b81525061216260201b60201c565b506103ba611e33611ecb604051806040016040528060018152602001601d60f91b81525061216260201b60201c565b8390612b7b565b611f01611def60405180604001604052806005815260200164173539b7b760d91b81525061216260201b60201c565b15611fce576000611f3982611f34604051806040016040528060018152602001602f60f81b81525061216260201b60201c565b613238565b905060008160018351611f4c919061448f565b81518110611f5c57611f5c613ec6565b60200260200101519050611fc5611e33611f9860405180604001604052806005815260200164173539b7b760d91b81525061216260201b60201c565b60408051808201825260008082526020918201528151808301909252855182528086019082015290613119565b95945050505050565b8260405160200161049f91906144a2565b606060006120148360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b9050612044611def604051806040016040528060048152602001630b9cdbdb60e21b81525061216260201b60201c565b15612052576103ba81612ba1565b61207d611e63604051806040016040528060018152602001601d60f91b81525061216260201b60201c565b6001036120b2576103ba611e33611ecb604051806040016040528060018152602001601d60f91b81525061216260201b60201c565b6120e1611def60405180604001604052806005815260200164173539b7b760d91b81525061216260201b60201c565b15611fce57600061211482611f34604051806040016040528060018152602001602f60f81b81525061216260201b60201c565b905060018151111561215057806002825161212f919061448f565b8151811061213f5761213f613ec6565b602002602001015192505050919050565b508260405160200161049f91906144a2565b60408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b8051825160009111156121a4575060006102ac565b815183516020850151600092916121ba9161455c565b6121c4919061448f565b9050826020015181036121db5760019150506102ac565b82516020840151819020912014905092915050565b606060006121fd836132dc565b60010190506000816001600160401b0381111561221c5761221c613a1a565b6040519080825280601f01601f191660200182016040528015612246576020820181803683370190505b5090508181016020015b600019016f181899199a1a9b1b9c1cb0b131b232b360811b600a86061a8153600a850494508461225057509392505050565b60606000612299836040015161216260201b60201c565b90506122d66122cf6040518060400160405280600a8152602001691553931250d15394d15160b21b81525061216260201b60201c565b82906133be565b156122fd5750506040805180820190915260048152634e6f6e6560e01b6020820152919050565b6123306122cf60405180604001604052806009815260200168556e6c6963656e736560b81b81525061216260201b60201c565b1561235c575050604080518082019091526009815268556e6c6963656e736560b81b6020820152919050565b6123896122cf6040518060400160405280600381526020016213525560ea1b81525061216260201b60201c565b156123af57505060408051808201909152600381526213525560ea1b6020820152919050565b6123e56122cf6040518060400160405280600c81526020016b47504c2d322e302d6f6e6c7960a01b81525061216260201b60201c565b8061242557506124256122cf6040518060400160405280601081526020016f23a8261699171816b7b916b630ba32b960811b81525061216260201b60201c565b1561245157505060408051808201909152600981526823a72a9023a8263b1960b91b6020820152919050565b6124876122cf6040518060400160405280600c81526020016b47504c2d332e302d6f6e6c7960a01b81525061216260201b60201c565b806124c757506124c76122cf6040518060400160405280601081526020016f23a8261699971816b7b916b630ba32b960811b81525061216260201b60201c565b156124f3575050604080518082019091526009815268474e552047504c763360b81b6020820152919050565b61252a6122cf6040518060400160405280600d81526020016c4c47504c2d322e312d6f6e6c7960981b81525061216260201b60201c565b8061256b575061256b6122cf604051806040016040528060118152602001702623a8261699171896b7b916b630ba32b960791b81525061216260201b60201c565b1561259a57505060408051808201909152600c81526b474e55204c47504c76322e3160a01b6020820152919050565b6125d16122cf6040518060400160405280600d81526020016c4c47504c2d332e302d6f6e6c7960981b81525061216260201b60201c565b8061261257506126126122cf604051806040016040528060118152602001702623a8261699971816b7b916b630ba32b960791b81525061216260201b60201c565b1561263f57505060408051808201909152600a815269474e55204c47504c763360b01b6020820152919050565b6126756122cf6040518060400160405280600c81526020016b4253442d322d436c6175736560a01b81525061216260201b60201c565b156126a457505060408051808201909152600c81526b4253442d322d436c6175736560a01b6020820152919050565b6126da6122cf6040518060400160405280600c81526020016b4253442d332d436c6175736560a01b81525061216260201b60201c565b1561270957505060408051808201909152600c81526b4253442d332d436c6175736560a01b6020820152919050565b61273a6122cf6040518060400160405280600781526020016604d504c2d322e360cc1b81525061216260201b60201c565b1561276457505060408051808201909152600781526604d504c2d322e360cc1b6020820152919050565b6127956122cf6040518060400160405280600781526020016604f534c2d332e360cc1b81525061216260201b60201c565b156127bf57505060408051808201909152600781526604f534c2d332e360cc1b6020820152919050565b6127f36122cf6040518060400160405280600a81526020016904170616368652d322e360b41b81525061216260201b60201c565b1561282057505060408051808201909152600a81526904170616368652d322e360b41b6020820152919050565b6128576122cf6040518060400160405280600d81526020016c4147504c2d332e302d6f6e6c7960981b81525061216260201b60201c565b8061289857506128986122cf6040518060400160405280601181526020017020a3a8261699971816b7b916b630ba32b960791b81525061216260201b60201c565b156128c557505060408051808201909152600a815269474e55204147504c763360b01b6020820152919050565b6128f76122cf604051806040016040528060088152602001674255534c2d312e3160c01b81525061216260201b60201c565b1561292157505060408051808201909152600781526642534c20312e3160c81b6020820152919050565b6040808401518451915161049f929060200161456f565b60608060005b84518110156129c3578185828151811061295a5761295a613ec6565b6020026020010151604051602001612973929190613b1a565b604051602081830303815290604052915060018551612992919061448f565b81146129bb57816040516020016129a991906146bf565b60405160208183030381529060405291505b60010161293e565b5060408051600380825260808201909252600091816020015b60608152602001906001900390816129dc5790505090508381600081518110612a0757612a07613ec6565b6020026020010181905250604051806040016040528060028152602001612d6360f01b81525081600181518110612a4057612a40613ec6565b60200260200101819052508181600281518110612a5f57612a5f613ec6565b6020908102919091010152949350505050565b6020808301518351835192840151600093612a9092918491906133d2565b14159392505050565b6040805180820190915260008082526020808301829052845185820151855192860151612ac693906134e3565b9050836020015181612ad8919061448f565b84518590612ae790839061448f565b90525060208401525090919050565b6040805180820190915260008082526020820152815183511015612b1b5750816102ac565b6020808301519084015160019114612b425750815160208481015190840151829020919020145b8015612b7357825184518590612b5990839061448f565b9052508251602085018051612b6f90839061455c565b9052505b509192915050565b6040805180820190915260008082526020820152612b9a838383613603565b5092915050565b6060600082600001516001600160401b03811115612bc157612bc1613a1a565b6040519080825280601f01601f191660200182016040528015612beb576020820181803683370190505b50602084810151855192935090830191612b9a9183916136a9565b60606000612c12610678565b6040805160ff808252612000820190925291925060009190816020015b6060815260200190600190039081612c2f5790505090506000604051806040016040528060038152602001620dce0f60eb1b815250828280612c7090613fd5565b935060ff1681518110612c8557612c85613ec6565b6020026020010181905250604051806040016040528060078152602001665e312e33322e3360c81b815250604051602001612cc091906146e4565b604051602081830303815290604052828280612cdb90613fd5565b935060ff1681518110612cf057612cf0613ec6565b60200260200101819052506040518060400160405280600881526020016776616c696461746560c01b815250828280612d2890613fd5565b935060ff1681518110612d3d57612d3d613ec6565b602002602001018190525082604051602001612d599190613f11565b604051602081830303815290604052828280612d7490613fd5565b935060ff1681518110612d8957612d89613ec6565b60200260200101819052506040518060400160405280600a8152602001690b4b58dbdb9d1c9858dd60b21b815250828280612dc390613fd5565b935060ff1681518110612dd857612dd8613ec6565b6020908102919091010152612ded8784613723565b8282612df881613fd5565b935060ff1681518110612e0d57612e0d613ec6565b602090810291909101015285515115612ea55760408051808201909152600b81526a2d2d7265666572656e636560a81b60208201528282612e4d81613fd5565b935060ff1681518110612e6257612e62613ec6565b60209081029190910101528551612e799084613723565b8282612e8481613fd5565b935060ff1681518110612e9957612e99613ec6565b60200260200101819052505b856080015115612f135760408051808201909152601881527f2d2d756e73616665536b697053746f72616765436865636b000000000000000060208201528282612eee81613fd5565b935060ff1681518110612f0357612f03613ec6565b6020026020010181905250612f6e565b8415612f6e576040805180820190915260128152712d2d726571756972655265666572656e636560701b60208201528282612f4d81613fd5565b935060ff1681518110612f6257612f62613ec6565b60200260200101819052505b60408601515115612ffa5760408051808201909152600d81526c2d2d756e73616665416c6c6f7760981b60208201528282612fa881613fd5565b935060ff1681518110612fbd57612fbd613ec6565b60200260200101819052508560400151828280612fd990613fd5565b935060ff1681518110612fee57612fee613ec6565b60200260200101819052505b8560600151156130645760408051808201909152601481527f2d2d756e73616665416c6c6f7752656e616d65730000000000000000000000006020820152828261304381613fd5565b935060ff168151811061305857613058613ec6565b60200260200101819052505b60008160ff166001600160401b0381111561308157613081613a1a565b6040519080825280602002602001820160405280156130b457816020015b606081526020019060019003908161309f5790505b50905060005b8260ff168160ff16101561310d57838160ff16815181106130dd576130dd613ec6565b6020026020010151828260ff16815181106130fa576130fa613ec6565b60209081029190910101526001016130ba565b50979650505050505050565b604080518082019091526000808252602082015281518351101561313e5750816102ac565b815183516020850151600092916131549161455c565b61315e919061448f565b6020840151909150600190821461317f575082516020840151819020908220145b801561319a5783518551869061319690839061448f565b9052505b50929392505050565b8051825160208085015190840151600093849390926131c39284906134e3565b6131cd919061455c565b90505b835160208501516131e1919061455c565b8111612b9a57816131f181614729565b925050826000015161322785602001518361320c919061448f565b8651613218919061448f565b855160208701518591906134e3565b613231919061455c565b90506131d0565b6060600061324684846131a3565b61325190600161455c565b6001600160401b0381111561326857613268613a1a565b60405190808252806020026020018201604052801561329b57816020015b60608152602001906001900390816132865790505b50905060005b8151811015611c95576132b7611e338686612b7b565b8282815181106132c9576132c9613ec6565b60209081029190910101526001016132a1565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310613325577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310613351576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc10000831061336f57662386f26fc10000830492506010015b6305f5e1008310613387576305f5e100830492506008015b612710831061339b57612710830492506004015b606483106133ad576064830492506002015b600a83106102ac5760010192915050565b60006133ca8383613763565b159392505050565b6000808584116134d95760208411613485576000841561341d5760016133f986602061448f565b613404906008614742565b61340f906002614840565b613419919061448f565b1990505b835181168561342c898961455c565b613436919061448f565b805190935082165b81811461347057878411613458578794505050505061195e565b836134628161484c565b94505082845116905061343e565b61347a878561455c565b94505050505061195e565b838320613492858861448f565b61349c908761455c565b91505b8582106134d7578482208082036134c4576134ba868461455c565b935050505061195e565b6134cf60018461448f565b92505061349f565b505b5092949350505050565b600083818685116135ee576020851161359d576000851561352f57600161350b87602061448f565b613516906008614742565b613521906002614840565b61352b919061448f565b1990505b845181166000876135408b8b61455c565b61354a919061448f565b855190915083165b82811461358f578186106135775761356a8b8b61455c565b965050505050505061195e565b8561358181614729565b965050838651169050613552565b85965050505050505061195e565b508383206000905b6135af868961448f565b82116135ec578583208082036135cb578394505050505061195e565b6135d660018561455c565b93505081806135e490614729565b9250506135a5565b505b6135f8878761455c565b979650505050505050565b604080518082019091526000808252602080830182905285518682015186519287015161363093906134e3565b60208087018051918601919091525190915061364c908261448f565b83528451602086015161365f919061455c565b810361366e57600085526136a0565b8351835161367c919061455c565b8551869061368b90839061448f565b905250835161369a908261455c565b60208601525b50909392505050565b602081106136e157815183526136c060208461455c565b92506136cd60208361455c565b91506136da60208261448f565b90506136a9565b60001981156137105760016136f783602061448f565b61370390610100614840565b61370d919061448f565b90505b9151835183169219169190911790915250565b606060006137318484610712565b805160208083015160405193945061374b93909101614863565b60405160208183030381529060405291505092915050565b8151815160009190811115613776575081515b6020808501519084015160005b8381101561382f57825182518082146137ff5760001960208710156137de576001846137b089602061448f565b6137ba919061455c565b6137c5906008614742565b6137d0906002614840565b6137da919061448f565b1990505b81811683821681810391146137fc5797506102ac9650505050505050565b50505b61380a60208661455c565b945061381760208561455c565b93505050602081613828919061455c565b9050613783565b5084518651610ce0919061489f565b610c9f8061611f83390190565b6040518060e0016040528060608152602001606081526020016060815260200160001515815260200160001515815260200160001515815260200161388e613893565b905290565b6040518061010001604052806000151581526020016000151581526020016060815260200160008019168152602001606081526020016060815260200160001515815260200161388e6040518060800160405280600081526020016000815260200160008152602001600081525090565b60005b8381101561391f578181015183820152602001613907565b50506000910152565b60008151808452613940816020860160208601613904565b601f01601f19169290920160200192915050565b6001600160a01b038316815260406020820181905260009061195e90830184613928565b7f4661696c656420746f206465706c6f7920636f6e7472616374200000000000008152600083516139b081601a850160208801613904565b6101d160f51b601a9184019182015283516139d281601c840160208801613904565b01601c01949350505050565b6020815260006103ba6020830184613928565b600060208284031215613a0357600080fd5b81516001600160a01b03811681146103ba57600080fd5b634e487b7160e01b600052604160045260246000fd5b604051606081016001600160401b0381118282101715613a5257613a52613a1a565b60405290565b6000806001600160401b03841115613a7257613a72613a1a565b50604051601f19601f85018116603f011681018181106001600160401b0382111715613aa057613aa0613a1a565b604052838152905080828401851015613ab857600080fd5b611c95846020830185613904565b600082601f830112613ad757600080fd5b6103ba83835160208501613a58565b600060208284031215613af857600080fd5b81516001600160401b03811115613b0e57600080fd5b6102a884828501613ac6565b60008351613b2c818460208801613904565b835190830190613b40818360208801613904565b01949350505050565b7f4661696c656420746f206465706c6f7920636f6e747261637420000000000000815260008351613b8181601a850160208801613904565b7f207573696e6720636f6e7374727563746f722064617461202200000000000000601a918401918201528351613bbe816033840160208801613904565b601160f91b60339290910191820152603401949350505050565b60408152600b60408201526a1193d55391149657d3d55560aa1b60608201526080602082015260006103ba6080830184613928565b600060208284031215613c1f57600080fd5b81516001600160401b03811115613c3557600080fd5b8201601f81018413613c4657600080fd5b6102a884825160208401613a58565b60008551613c67818460208a01613904565b602f60f81b9083019081528551613c85816001840160208a01613904565b602f60f81b600192909101918201528451613ca7816002840160208901613904565b600181830101915050602f60f81b60018201528351613ccd816002840160208801613904565b64173539b7b760d91b600292909101918201526007019695505050505050565b604081526000613d006040830184613928565b828103602084015260048152630b985cdd60e21b60208201526040810191505092915050565b600060208284031215613d3857600080fd5b815180151581146103ba57600080fd5b7f436f756c64206e6f742066696e642041535420696e2061727469666163742000815260008251613d8081601f850160208701613904565b7f2e205365742060617374203d20747275656020696e20666f756e6472792e746f601f939091019283015250611b5b60f21b603f820152604101919050565b604081526000613dd26040830184613928565b8281036020840152601181527005cc2e6e85cc2c4e6ded8eae8caa0c2e8d607b1b60208201526040810191505092915050565b604081526000613e186040830184613928565b8281036020840152600c81526b2e6173742e6c6963656e736560a01b60208201526040810191505092915050565b7f2e6d657461646174612e736f75726365732e5b27000000000000000000000000815260008251613e7e816014850160208701613904565b6b13ae9735b2b1b1b0b5991a9b60a11b6014939091019283015250602001919050565b604081526000613eb46040830185613928565b82810360208401526103b68185613928565b634e487b7160e01b600052603260045260246000fd5b601160f91b81528151600090613ef9816001850160208701613904565b601160f91b6001939091019283015250600201919050565b60008251613f23818460208701613904565b6a2f6275696c642d696e666f60a81b920191825250600b01919050565b7f436f756c64206e6f742066696e64206275696c642d696e666f2066696c65207781527f697468206d61746368696e6720736f7572636520636f6465206861736820666f60208201526a0391031b7b73a3930b1ba160ad1b604082015260008251613fb281604b850160208701613904565b91909101604b0192915050565b634e487b7160e01b600052601160045260246000fd5b600060ff821660ff8103613feb57613feb613fbf565b60010192915050565b7f406f70656e7a657070656c696e2f646566656e6465722d6465706c6f792d636c81526801a595b9d0b58db1a560be1b60208201526000825161403e816029850160208701613904565b9190910160290192915050565b60408152601660408201527f4f50454e5a455050454c494e5f424153485f504154480000000000000000000060608201526080602082015260006103ba6080830184613928565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b828110156140eb57603f198786030184526140d6858351613928565b945060209384019391909101906001016140ba565b50929695505050505050565b60006020828403121561410957600080fd5b81516001600160401b0381111561411f57600080fd5b82016060818503121561413157600080fd5b614139613a30565b81518060030b811461414a57600080fd5b815260208201516001600160401b0381111561416557600080fd5b61417186828501613ac6565b60208301525060408201516001600160401b0381111561419057600080fd5b61419c86828501613ac6565b604083015250949350505050565b7f4661696c656420746f2072756e206261736820636f6d6d616e642077697468208152601160f91b6020820152600082516141ec816021850160208701613904565b7f222e20496620796f7520617265207573696e672057696e646f77732c2073657460219390910192830152507f20746865204f50454e5a455050454c494e5f424153485f5041544820656e766960418201527f726f6e6d656e74207661726961626c6520746f207468652066756c6c7920717560618201527f616c69666965642070617468206f66207468652062617368206578656375746160818201527f626c652e20466f72206578616d706c652c20696620796f75206172652075736960a18201527f6e672047697420666f722057696e646f77732c206164642074686520666f6c6c60c18201527f6f77696e67206c696e6520696e20746865202e656e762066696c65206f66207960e18201527f6f75722070726f6a65637420287573696e6720666f727761726420736c6173686101018201527f6573293a0a4f50454e5a455050454c494e5f424153485f504154483d22433a2f6101218201527f50726f6772616d2046696c65732f4769742f62696e2f6261736822000000000061014182015261015c01919050565b7f4661696c656420746f2066696e64206c696e65207769746820707265666978208152602760f81b6020820152600083516143bc816021850160208801613904565b6c0139034b71037baba383aba1d1609d1b60219184019182015283516143e981602e840160208801613904565b01602e01949350505050565b7f4661696c656420746f2072756e2075706772616465207361666574792076616c815268034b230ba34b7b71d160bd1b60208201526000825161403e816029850160208701613904565b7f55706772616465207361666574792076616c69646174696f6e206661696c65648152611d0560f11b602082015260008251614482816022850160208701613904565b9190910160220192915050565b818103818111156102ac576102ac613fbf565b6d021b7b73a3930b1ba103730b6b2960951b8152600082516144cb81600e850160208701613904565b7f206d75737420626520696e2074686520666f726d6174204d79436f6e74726163600e9390910192830152507f742e736f6c3a4d79436f6e7472616374206f72204d79436f6e74726163742e73602e8201527f6f6c206f72206f75742f4d79436f6e74726163742e736f6c2f4d79436f6e7472604e8201526730b1ba173539b7b760c11b606e820152607601919050565b808201808211156102ac576102ac613fbf565b7f53504458206c6963656e7365206964656e7469666965722000000000000000008152600083516145a7816018850160208801613904565b6301034b7160e51b60189184019182015283516145cb81601c840160208801613904565b7f20646f6573206e6f74206c6f6f6b206c696b65206120737570706f7274656420601c92909101918201527f6c6963656e736520666f7220626c6f636b206578706c6f726572207665726966603c8201527f69636174696f6e2e205573652074686520606c6963656e73655479706560206f605c8201527f7074696f6e20746f20737065636966792061206c6963656e736520747970652c607c8201527f206f7220736574207468652060736b69704c6963656e73655479706560206f70609c8201527f74696f6e20746f2060747275656020746f20736b69702e00000000000000000060bc82015260d301949350505050565b600082516146d1818460208701613904565b600160fd1b920191825250600101919050565b7f406f70656e7a657070656c696e2f75706772616465732d636f7265400000000081526000825161471c81601c850160208701613904565b91909101601c0192915050565b60006001820161473b5761473b613fbf565b5060010190565b80820281158282048414176102ac576102ac613fbf565b6001815b60018411156147945780850481111561477857614778613fbf565b600184161561478657908102905b60019390931c92800261475d565b935093915050565b6000826147ab575060016102ac565b816147b8575060006102ac565b81600181146147ce57600281146147d8576147f4565b60019150506102ac565b60ff8411156147e9576147e9613fbf565b50506001821b6102ac565b5060208310610133831016604e8410600b8410161715614817575081810a6102ac565b6148246000198484614759565b806000190482111561483857614838613fbf565b029392505050565b60006103ba838361479c565b60008161485b5761485b613fbf565b506000190190565b60008351614875818460208801613904565b601d60f91b9083019081528351614893816001840160208801613904565b01600101949350505050565b8181036000831280158383131683831282161715612b9a57612b9a613fbf565b6080516118226148fd600039600081816101bf01528181610574015281816105d60152818161093501528181610ba30152610c0501526118226000f3fe608060405234801561001057600080fd5b506004361061018d5760003560e01c806381100bf0116100e3578063a217fddf1161008c578063d936547e11610066578063d936547e146103c9578063d9caed12146103ec578063e63ab1e9146103ff57600080fd5b8063a217fddf1461039b578063c8a02362146103a3578063d547741f146103b657600080fd5b806391d14854116100bd57806391d148541461032f5780639a590427146103755780639b19251a1461038857600080fd5b806381100bf0146102e05780638456cb591461030057806385f438c11461030857600080fd5b806336568abe11610145578063570618e11161011f578063570618e11461029b5780635c975abb146102c25780636133b4bb146102cd57600080fd5b806336568abe146102605780633c2f05a8146102735780633f4ba83a1461029357600080fd5b806321fc65f21161017657806321fc65f214610206578063248a9ca31461021b5780632f2ff15d1461024d57600080fd5b806301ffc9a714610192578063116191b6146101ba575b600080fd5b6101a56101a0366004611436565b610426565b60405190151581526020015b60405180910390f35b6101e17f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101b1565b6102196102143660046114ea565b6104bf565b005b61023f610229366004611559565b6000908152600160208190526040909120015490565b6040519081526020016101b1565b61021961025b366004611572565b6106c0565b61021961026e366004611572565b6106ec565b6004546101e19073ffffffffffffffffffffffffffffffffffffffff1681565b61021961074a565b61023f7f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a81565b60025460ff166101a5565b6102196102db36600461159e565b61077f565b6005546101e19073ffffffffffffffffffffffffffffffffffffffff1681565b6102196109b7565b61023f7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b6101a561033d366004611572565b600091825260016020908152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b6102196103833660046115f8565b6109e9565b6102196103963660046115f8565b610a6a565b61023f600081565b6102196103b13660046114ea565b610aee565b6102196103c4366004611572565b610cd5565b6101a56103d73660046115f8565b60036020526000908152604090205460ff1681565b6102196103fa366004611613565b610cfb565b61023f7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b0000000000000000000000000000000000000000000000000000000014806104b957507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b6104c7610e27565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e46104f181610e6a565b6104f9610e74565b73ffffffffffffffffffffffffffffffffffffffff861660009081526003602052604090205460ff16610558576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61059973ffffffffffffffffffffffffffffffffffffffff87167f000000000000000000000000000000000000000000000000000000000000000086610eb3565b6040517f5131ab5900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690635131ab59906106139089908990899089908990600401611699565b600060405180830381600087803b15801561062d57600080fd5b505af1158015610641573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167f85b5be9cf454e05e0bddf49315178102227c312078eefa3c00294fb4d912ae4e8686866040516106a6939291906116f6565b60405180910390a3506106b96001600055565b5050505050565b600082815260016020819052604090912001546106dc81610e6a565b6106e68383610f40565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8116331461073b576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6107458282610fed565b505050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61077481610e6a565b61077c61108e565b50565b60045473ffffffffffffffffffffffffffffffffffffffff166340c10f19306107a9866005611719565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815273ffffffffffffffffffffffffffffffffffffffff90921660048301526024820152604401600060405180830381600087803b15801561081457600080fd5b505af1158015610828573d6000803e3d6000fd5b5050600480546007546040517fa9059cbb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff918216938101939093526005602484015216925063a9059cbb91506044016020604051808303816000875af11580156108a9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108cd9190611753565b506004546108f49073ffffffffffffffffffffffffffffffffffffffff16858585856104bf565b600480546040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116938201939093529116906370a0823190602401602060405180830381865afa158015610986573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109aa9190611775565b156106e6576106e661178e565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a6109e181610e6a565b61077c6110ed565b7f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a610a1381610e6a565b73ffffffffffffffffffffffffffffffffffffffff8216600081815260036020526040808220805460ff19169055517f51085ddf9ebdded84b76e829eb58c4078e4b5bdf97d9a94723f336039da467919190a25050565b7f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a610a9481610e6a565b73ffffffffffffffffffffffffffffffffffffffff8216600081815260036020526040808220805460ff19166001179055517faab7954e9d246b167ef88aeddad35209ca2489d95a8aeb59e288d9b19fae5a549190a25050565b610af6610e27565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e4610b2081610e6a565b610b28610e74565b73ffffffffffffffffffffffffffffffffffffffff861660009081526003602052604090205460ff16610b87576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610bc873ffffffffffffffffffffffffffffffffffffffff87167f000000000000000000000000000000000000000000000000000000000000000086610eb3565b6040517fb8969bd400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063b8969bd490610c429089908990899089908990600401611699565b600060405180830381600087803b158015610c5c57600080fd5b505af1158015610c70573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fb9d4efa96044e5f5e03e696fa9ae2ff66911cc27e8a637c3627c75bc5b2241c88686866040516106a6939291906116f6565b60008281526001602081905260409091200154610cf181610e6a565b6106e68383610fed565b610d03610e27565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e4610d2d81610e6a565b610d35610e74565b73ffffffffffffffffffffffffffffffffffffffff841660009081526003602052604090205460ff16610d94576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610db573ffffffffffffffffffffffffffffffffffffffff85168484610eb3565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f9b1bfa7fa9ee420a16e124f794c35ac9f90472acc99140eb2f6447c714cad8eb84604051610e1491815260200190565b60405180910390a3506107456001600055565b600260005403610e63576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b61077c813361112a565b60025460ff1615610eb1576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6040805173ffffffffffffffffffffffffffffffffffffffff8416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb000000000000000000000000000000000000000000000000000000001790526107459084906111bb565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff16610fe557600083815260016020818152604080842073ffffffffffffffffffffffffffffffffffffffff87168086529252808420805460ff19169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45060016104b9565b5060006104b9565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff1615610fe557600083815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff86168085529252808320805460ff1916905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45060016104b9565b611096611251565b6002805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b6110f5610e74565b6002805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586110c33390565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff166111b7576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82166004820152602481018390526044015b60405180910390fd5b5050565b60006111dd73ffffffffffffffffffffffffffffffffffffffff84168361128d565b905080516000141580156112025750808060200190518101906112009190611753565b155b15610745576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff841660048201526024016111ae565b60025460ff16610eb1576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606061129b838360006112a2565b9392505050565b6060814710156112e0576040517fcd7860590000000000000000000000000000000000000000000000000000000081523060048201526024016111ae565b6000808573ffffffffffffffffffffffffffffffffffffffff16848660405161130991906117bd565b60006040518083038185875af1925050503d8060008114611346576040519150601f19603f3d011682016040523d82523d6000602084013e61134b565b606091505b509150915061135b868383611365565b9695505050505050565b60608261137a57611375826113f4565b61129b565b815115801561139e575073ffffffffffffffffffffffffffffffffffffffff84163b155b156113ed576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff851660048201526024016111ae565b508061129b565b8051156114045780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006020828403121561144857600080fd5b81357fffffffff000000000000000000000000000000000000000000000000000000008116811461129b57600080fd5b803573ffffffffffffffffffffffffffffffffffffffff8116811461149c57600080fd5b919050565b60008083601f8401126114b357600080fd5b50813567ffffffffffffffff8111156114cb57600080fd5b6020830191508360208285010111156114e357600080fd5b9250929050565b60008060008060006080868803121561150257600080fd5b61150b86611478565b945061151960208701611478565b935060408601359250606086013567ffffffffffffffff81111561153c57600080fd5b611548888289016114a1565b969995985093965092949392505050565b60006020828403121561156b57600080fd5b5035919050565b6000806040838503121561158557600080fd5b8235915061159560208401611478565b90509250929050565b600080600080606085870312156115b457600080fd5b6115bd85611478565b935060208501359250604085013567ffffffffffffffff8111156115e057600080fd5b6115ec878288016114a1565b95989497509550505050565b60006020828403121561160a57600080fd5b61129b82611478565b60008060006060848603121561162857600080fd5b61163184611478565b925061163f60208501611478565b929592945050506040919091013590565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff8616815273ffffffffffffffffffffffffffffffffffffffff851660208201528360408201526080606082015260006116eb608083018486611650565b979650505050505050565b838152604060208201526000611710604083018486611650565b95945050505050565b808201808211156104b9577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006020828403121561176557600080fd5b8151801515811461129b57600080fd5b60006020828403121561178757600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b6000825160005b818110156117de57602081860181015185830152016117c4565b50600092019182525091905056fea26469706673582212205ee3088cb72cdf6af276cb9438f26efb7aef2a16db8cbb4ac62af55114684a9c64736f6c634300081a0033608060405234801561001057600080fd5b50604051610c9f380380610c9f83398101604081905261002f9161010d565b8181600361003d83826101ff565b50600461004a82826101ff565b50505050506102bd565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261007b57600080fd5b81516001600160401b0381111561009457610094610054565b604051601f8201601f19908116603f011681016001600160401b03811182821017156100c2576100c2610054565b6040528181528382016020018510156100da57600080fd5b60005b828110156100f9576020818601810151838301820152016100dd565b506000918101602001919091529392505050565b6000806040838503121561012057600080fd5b82516001600160401b0381111561013657600080fd5b6101428582860161006a565b602085015190935090506001600160401b0381111561016057600080fd5b61016c8582860161006a565b9150509250929050565b600181811c9082168061018a57607f821691505b6020821081036101aa57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156101fa57806000526020600020601f840160051c810160208510156101d75750805b601f840160051c820191505b818110156101f757600081556001016101e3565b50505b505050565b81516001600160401b0381111561021857610218610054565b61022c816102268454610176565b846101b0565b6020601f82116001811461026057600083156102485750848201515b600019600385901b1c1916600184901b1784556101f7565b600084815260208120601f198516915b828110156102905787850151825560209485019460019092019101610270565b50848210156102ae5786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b6109d3806102cc6000396000f3fe608060405234801561001057600080fd5b50600436106100be5760003560e01c806340c10f191161007657806395d89b411161005b57806395d89b4114610183578063a9059cbb1461018b578063dd62ed3e1461019e57600080fd5b806340c10f191461013857806370a082311461014d57600080fd5b806318160ddd116100a757806318160ddd1461010457806323b872dd14610116578063313ce5671461012957600080fd5b806306fdde03146100c3578063095ea7b3146100e1575b600080fd5b6100cb6101e4565b6040516100d891906107bf565b60405180910390f35b6100f46100ef366004610854565b610276565b60405190151581526020016100d8565b6002545b6040519081526020016100d8565b6100f461012436600461087e565b610290565b604051601281526020016100d8565b61014b610146366004610854565b6102b4565b005b61010861015b3660046108bb565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6100cb6102c2565b6100f4610199366004610854565b6102d1565b6101086101ac3660046108dd565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6060600380546101f390610910565b80601f016020809104026020016040519081016040528092919081815260200182805461021f90610910565b801561026c5780601f106102415761010080835404028352916020019161026c565b820191906000526020600020905b81548152906001019060200180831161024f57829003601f168201915b5050505050905090565b6000336102848185856102df565b60019150505b92915050565b60003361029e8582856102f1565b6102a98585856103c5565b506001949350505050565b6102be8282610470565b5050565b6060600480546101f390610910565b6000336102848185856103c5565b6102ec83838360016104cc565b505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146103bf57818110156103b0576040517ffb8f41b200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416600482015260248101829052604481018390526064015b60405180910390fd5b6103bf848484840360006104cc565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8316610415576040517f96c6fd1e000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff8216610465576040517fec442f05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b6102ec838383610614565b73ffffffffffffffffffffffffffffffffffffffff82166104c0576040517fec442f05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b6102be60008383610614565b73ffffffffffffffffffffffffffffffffffffffff841661051c576040517fe602df05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff831661056c576040517f94280d62000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260016020908152604080832093871683529290522082905580156103bf578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161060691815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff831661064c5780600260008282546106419190610963565b909155506106fe9050565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260208190526040902054818110156106d2576040517fe450d38c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8516600482015260248101829052604481018390526064016103a7565b73ffffffffffffffffffffffffffffffffffffffff841660009081526020819052604090209082900390555b73ffffffffffffffffffffffffffffffffffffffff821661072757600280548290039055610753565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090208054820190555b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516107b291815260200190565b60405180910390a3505050565b602081526000825180602084015260005b818110156107ed57602081860181015160408684010152016107d0565b5060006040828501015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011684010191505092915050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461084f57600080fd5b919050565b6000806040838503121561086757600080fd5b6108708361082b565b946020939093013593505050565b60008060006060848603121561089357600080fd5b61089c8461082b565b92506108aa6020850161082b565b929592945050506040919091013590565b6000602082840312156108cd57600080fd5b6108d68261082b565b9392505050565b600080604083850312156108f057600080fd5b6108f98361082b565b91506109076020840161082b565b90509250929050565b600181811c9082168061092457607f821691505b60208210810361095d577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b8082018082111561028a577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea26469706673582212207e804ca539d49155d2b6bc19268ce22f9f857027c75247d69fb0d56a089c93d464736f6c634300081a00330000000000000000000000007109709ecfa91a80626ff3989d68f67f5b1dd12d8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f7420", } // ERC20CustodyEchidnaTestABI is the input ABI used to generate the binding from. diff --git a/v2/pkg/gatewayevm.sol/gatewayevm.go b/v2/pkg/gatewayevm.sol/gatewayevm.go index fa2ef3f1..a306afdb 100644 --- a/v2/pkg/gatewayevm.sol/gatewayevm.go +++ b/v2/pkg/gatewayevm.sol/gatewayevm.go @@ -32,7 +32,7 @@ var ( // GatewayEVMMetaData contains all meta data concerning the GatewayEVM contract. var GatewayEVMMetaData = &bind.MetaData{ ABI: "[{\"type\":\"constructor\",\"inputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"ASSET_HANDLER_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"DEFAULT_ADMIN_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"PAUSER_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"TSS_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"UPGRADE_INTERFACE_VERSION\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"call\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"custody\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"deposit\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"deposit\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"depositAndCall\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"depositAndCall\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"execute\",\"inputs\":[{\"name\":\"destination\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"executeRevert\",\"inputs\":[{\"name\":\"destination\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"executeWithERC20\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"getRoleAdmin\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"grantRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"hasRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"initialize\",\"inputs\":[{\"name\":\"tssAddress_\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"zetaToken_\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"admin_\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"pause\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"paused\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"proxiableUUID\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"renounceRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"callerConfirmation\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"revertWithERC20\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"revokeRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setConnector\",\"inputs\":[{\"name\":\"zetaConnector_\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setCustody\",\"inputs\":[{\"name\":\"custody_\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"supportsInterface\",\"inputs\":[{\"name\":\"interfaceId\",\"type\":\"bytes4\",\"internalType\":\"bytes4\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"tssAddress\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"unpause\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"upgradeToAndCall\",\"inputs\":[{\"name\":\"newImplementation\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"zetaConnector\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"zetaToken\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"event\",\"name\":\"Call\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"receiver\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Deposit\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"receiver\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"asset\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Executed\",\"inputs\":[{\"name\":\"destination\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ExecutedWithERC20\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Initialized\",\"inputs\":[{\"name\":\"version\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Paused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Reverted\",\"inputs\":[{\"name\":\"destination\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RevertedWithERC20\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleAdminChanged\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"previousAdminRole\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"newAdminRole\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleGranted\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleRevoked\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Unpaused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Upgraded\",\"inputs\":[{\"name\":\"implementation\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"AccessControlBadConfirmation\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"AccessControlUnauthorizedAccount\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"neededRole\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"type\":\"error\",\"name\":\"AddressEmptyCode\",\"inputs\":[{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"AddressInsufficientBalance\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"ApprovalFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ConnectorInitialized\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"CustodyInitialized\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"DepositFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ERC1967InvalidImplementation\",\"inputs\":[{\"name\":\"implementation\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"ERC1967NonPayable\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"EnforcedPause\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ExecutionFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ExpectedPause\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"FailedInnerCall\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientERC20Amount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientETHAmount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidInitialization\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NotInitializing\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NotWhitelistedInCustody\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ReentrancyGuardReentrantCall\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"SafeERC20FailedOperation\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"UUPSUnauthorizedCallContext\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"UUPSUnsupportedProxiableUUID\",\"inputs\":[{\"name\":\"slot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"type\":\"error\",\"name\":\"ZeroAddress\",\"inputs\":[]}]", - Bin: "0x60a06040523060805234801561001457600080fd5b5061001d610022565b6100d4565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100725760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146100d15780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b60805161327e6100fd60003960008181611f0601528181611f2f01526123bb015261327e6000f3fe6080604052600436106101e35760003560e01c80635c975abb11610102578063ae7a3a6f11610095578063dda79b7511610064578063dda79b751461062e578063e63ab1e91461064e578063f340fa0114610682578063f45346dc1461069557600080fd5b8063ae7a3a6f146105ae578063b8969bd4146105ce578063c0c53b8b146105ee578063d547741f1461060e57600080fd5b806391d14854116100d157806391d14854146104b7578063a217fddf1461051c578063a783c78914610531578063ad3cb1cc1461056557600080fd5b80635c975abb146104175780635d62c8601461044e5780638456cb59146104825780638c6f037f1461049757600080fd5b806335c018db1161017a5780635131ab59116101495780635131ab59146103a257806352d1902d146103c257806357bec62f146103d75780635b112591146103f757600080fd5b806335c018db1461034757806336568abe1461035a5780633f4ba83a1461037a5780634f1ef2861461038f57600080fd5b806321e093b1116101b657806321e093b11461027f578063248a9ca3146102b757806329c59b5d146103145780632f2ff15d1461032757600080fd5b806301ffc9a7146101e857806310188aef1461021d5780631b8b921d1461023f5780631cff79cd1461025f575b600080fd5b3480156101f457600080fd5b50610208610203366004612cf1565b6106b5565b60405190151581526020015b60405180910390f35b34801561022957600080fd5b5061023d610238366004612d4f565b61074e565b005b34801561024b57600080fd5b5061023d61025a366004612db3565b610842565b61027261026d366004612db3565b6108cd565b6040516102149190612e74565b34801561028b57600080fd5b5060035461029f906001600160a01b031681565b6040516001600160a01b039091168152602001610214565b3480156102c357600080fd5b506103066102d2366004612e87565b60009081527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052604090206001015490565b604051908152602001610214565b61023d610322366004612db3565b6109d0565b34801561033357600080fd5b5061023d610342366004612ea0565b610b63565b61023d610355366004612db3565b610bad565b34801561036657600080fd5b5061023d610375366004612ea0565b610d9c565b34801561038657600080fd5b5061023d610de8565b61023d61039d366004612efb565b610e1d565b3480156103ae57600080fd5b5061023d6103bd366004613002565b610e3c565b3480156103ce57600080fd5b50610306611155565b3480156103e357600080fd5b5060025461029f906001600160a01b031681565b34801561040357600080fd5b5060015461029f906001600160a01b031681565b34801561042357600080fd5b507fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff16610208565b34801561045a57600080fd5b506103067f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b981565b34801561048e57600080fd5b5061023d611184565b3480156104a357600080fd5b5061023d6104b2366004613071565b6111b6565b3480156104c357600080fd5b506102086104d2366004612ea0565b60009182527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408084206001600160a01b0393909316845291905290205460ff1690565b34801561052857600080fd5b50610306600081565b34801561053d57600080fd5b506103067f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb81565b34801561057157600080fd5b506102726040518060400160405280600581526020017f352e302e3000000000000000000000000000000000000000000000000000000081525081565b3480156105ba57600080fd5b5061023d6105c9366004612d4f565b6112cc565b3480156105da57600080fd5b5061023d6105e9366004613002565b6113c0565b3480156105fa57600080fd5b5061023d6106093660046130c3565b611579565b34801561061a57600080fd5b5061023d610629366004612ea0565b61182e565b34801561063a57600080fd5b5060005461029f906001600160a01b031681565b34801561065a57600080fd5b506103067f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b61023d610690366004612d4f565b611872565b3480156106a157600080fd5b5061023d6106b0366004613106565b611a07565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061074857507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b600061075981611b02565b6001600160a01b038216610799576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002546001600160a01b0316156107dc576040517f0c8dc01600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6108067f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b983611b0c565b5050600280547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b61084a611bf9565b610852611c57565b826001600160a01b0316336001600160a01b03167f2a21062ee9199c2e205622999eeb7c3da73153674f36a0acd3f74fa6af67bde38484604051610897929190613182565b60405180910390a36108c860017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b505050565b60607f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb6108f981611b02565b610901611bf9565b610909611c57565b6001600160a01b038516610949576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610956868686611cfe565b9050856001600160a01b03167fcaf938de11c367272220bfd1d2baa99ca46665e7bc4d85f00adb51b90fe1fa9f3487876040516109959392919061319e565b60405180910390a291506109c860017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b509392505050565b6109d8611bf9565b6109e0611c57565b34600003610a1a576040517f7671265e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038316610a5a576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546040516000916001600160a01b03169034908381818185875af1925050503d8060008114610aa7576040519150601f19603f3d011682016040523d82523d6000602084013e610aac565b606091505b5050905080610ae7576040517f79cacff100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b836001600160a01b0316336001600160a01b03167f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a43460008787604051610b3194939291906131b8565b60405180910390a3506108c860017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020526040902060010154610b9d81611b02565b610ba78383611b0c565b50505050565b7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb610bd781611b02565b610bdf611bf9565b610be7611c57565b6001600160a01b038416610c27576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000846001600160a01b03163460405160006040518083038185875af1925050503d8060008114610c74576040519150601f19603f3d011682016040523d82523d6000602084013e610c79565b606091505b5050905080610cb4576040517facfdb44400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f8fcaa0b50000000000000000000000000000000000000000000000000000000081526001600160a01b03861690638fcaa0b590610cfb9087908790600401613182565b600060405180830381600087803b158015610d1557600080fd5b505af1158015610d29573d6000803e3d6000fd5b50505050846001600160a01b03167fd5d7616b1678354a0dea9d7e57e6a090bff5babe9f8d6381fdbad16e89ba311c348686604051610d6a9392919061319e565b60405180910390a250610ba760017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b6001600160a01b0381163314610dde576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6108c88282611da7565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610e1281611b02565b610e1a611e6b565b50565b610e25611efb565b610e2e82611fcb565b610e388282611fd6565b5050565b7f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b9610e6681611b02565b610e6e611bf9565b610e76611c57565b83600003610eb0576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038516610ef0576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610efa86866120fa565b610f30576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b0386811660048301526024820186905287169063095ea7b3906044016020604051808303816000875af1158015610f98573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fbc91906131e1565b610ff2576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610ffd858484611cfe565b5061100886866120fa565b61103e576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201526000906001600160a01b038816906370a0823190602401602060405180830381865afa15801561109e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110c29190613203565b905080156110d4576110d4878261218a565b856001600160a01b0316876001600160a01b03167f29c40793bffd84cb810179f15d1ceec72bc7f0785514c668ba36645cf99b738287878760405161111b9392919061319e565b60405180910390a35061114d60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b505050505050565b600061115f6123b0565b507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc90565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a6111ae81611b02565b610e1a612412565b6111be611bf9565b6111c6611c57565b83600003611200576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038516611240576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61124b33848661248b565b846001600160a01b0316336001600160a01b03167f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a48686868660405161129494939291906131b8565b60405180910390a36112c560017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b5050505050565b60006112d781611b02565b6001600160a01b038216611317576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000546001600160a01b03161561135a576040517fb337f37800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6113847f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b983611b0c565b5050600080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b7f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b96113ea81611b02565b6113f2611bf9565b6113fa611c57565b83600003611434576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038516611474576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6114886001600160a01b03871686866126d1565b6040517f8fcaa0b50000000000000000000000000000000000000000000000000000000081526001600160a01b03861690638fcaa0b5906114cf9086908690600401613182565b600060405180830381600087803b1580156114e957600080fd5b505af11580156114fd573d6000803e3d6000fd5b50505050846001600160a01b0316866001600160a01b03167f723fc7be2448075379e4fdf1e6bf5fead954d2668d2da05dcb44ccfec4beeda78686866040516115489392919061319e565b60405180910390a361114d60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156115c45750825b905060008267ffffffffffffffff1660011480156115e15750303b155b9050811580156115ef575080155b15611626576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84547fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000016600117855583156116875784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff16680100000000000000001785555b6001600160a01b03881615806116a457506001600160a01b038716155b156116db576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6116e3612745565b6116eb61274d565b6116f3612745565b6116fb61275d565b611706600087611b0c565b506117317f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a87611b0c565b50600180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b038a1617905561178f7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb89611b0c565b50600380547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03891617905583156118245784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b5050505050505050565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052604090206001015461186881611b02565b610ba78383611da7565b61187a611bf9565b611882611c57565b346000036118bc576040517f7671265e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b0381166118fc576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546040516000916001600160a01b03169034908381818185875af1925050503d8060008114611949576040519150601f19603f3d011682016040523d82523d6000602084013e61194e565b606091505b5050905080611989576040517f79cacff100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60408051348152600060208201819052606082840181905282015290516001600160a01b0384169133917f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a49181900360800190a350610e1a60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b611a0f611bf9565b611a17611c57565b81600003611a51576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038316611a91576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611a9c33828461248b565b826001600160a01b0316336001600160a01b03167f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a484846040516108979291909182526001600160a01b0316602082015260606040820181905260009082015260800190565b610e1a813361276d565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff16611bef576000848152602082815260408083206001600160a01b0387168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055611ba53390565b6001600160a01b0316836001600160a01b0316857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a46001915050610748565b6000915050610748565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff1615611c55576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0080547ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01611cd2576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60029055565b60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b6060600080856001600160a01b0316348686604051611d1e92919061321c565b60006040518083038185875af1925050503d8060008114611d5b576040519150601f19603f3d011682016040523d82523d6000602084013e611d60565b606091505b509150915081611d9c576040517facfdb44400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b9150505b9392505050565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff1615611bef576000848152602082815260408083206001600160a01b038716808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339287917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a46001915050610748565b611e736127fa565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001681557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a150565b306001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161480611f9457507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316611f887f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b6001600160a01b031614155b15611c55576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610e3881611b02565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa92505050801561204e575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820190925261204b91810190613203565b60015b612094576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b03831660048201526024015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc81146120f0576040517faa1d49a40000000000000000000000000000000000000000000000000000000081526004810182905260240161208b565b6108c88383612855565b6040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b038281166004830152600060248301819052919084169063095ea7b3906044016020604051808303816000875af1158015612166573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611da091906131e1565b6003546001600160a01b03908116908316036122d9576002546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152602481018390529083169063095ea7b3906044016020604051808303816000875af115801561220c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061223091906131e1565b612266576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002546040517f743e0c9b000000000000000000000000000000000000000000000000000000008152600481018390526001600160a01b039091169063743e0c9b90602401600060405180830381600087803b1580156122c557600080fd5b505af115801561114d573d6000803e3d6000fd5b6000546040517fd936547e0000000000000000000000000000000000000000000000000000000081526001600160a01b0384811660048301529091169063d936547e90602401602060405180830381865afa15801561233c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061236091906131e1565b612396576040517fac2175f100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600054610e38906001600160a01b038481169116836126d1565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614611c55576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61241a611bf9565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011781557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25833611edd565b6003546001600160a01b03908116908316036125f8576124b66001600160a01b0383168430846128ab565b6002546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152602481018390529083169063095ea7b3906044016020604051808303816000875af1158015612522573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061254691906131e1565b61257c576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002546040517f743e0c9b000000000000000000000000000000000000000000000000000000008152600481018390526001600160a01b039091169063743e0c9b90602401600060405180830381600087803b1580156125db57600080fd5b505af11580156125ef573d6000803e3d6000fd5b50505050505050565b6000546040517fd936547e0000000000000000000000000000000000000000000000000000000081526001600160a01b0384811660048301529091169063d936547e90602401602060405180830381865afa15801561265b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061267f91906131e1565b6126b5576040517fac2175f100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000546108c8906001600160a01b0384811691869116846128ab565b6040516001600160a01b038381166024830152604482018390526108c891859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506128e4565b611c55612960565b612755612960565b611c556129c7565b612765612960565b611c556129cf565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408083206001600160a01b038516845290915290205460ff16610e38576040517fe2517d3f0000000000000000000000000000000000000000000000000000000081526001600160a01b03821660048201526024810183905260440161208b565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff16611c55576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61285e82612a20565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a28051156128a3576108c88282612ac8565b610e38612b3e565b6040516001600160a01b038481166024830152838116604483015260648201839052610ba79186918216906323b872dd906084016126fe565b60006128f96001600160a01b03841683612b76565b9050805160001415801561291e57508080602001905181019061291c91906131e1565b155b156108c8576040517f5274afe70000000000000000000000000000000000000000000000000000000081526001600160a01b038416600482015260240161208b565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff16611c55576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611cd8612960565b6129d7612960565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055565b806001600160a01b03163b600003612a6f576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b038216600482015260240161208b565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6060600080846001600160a01b031684604051612ae5919061322c565b600060405180830381855af49150503d8060008114612b20576040519150601f19603f3d011682016040523d82523d6000602084013e612b25565b606091505b5091509150612b35858383612b84565b95945050505050565b3415611c55576040517fb398979f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6060611da083836000612bf9565b606082612b9957612b9482612caf565b611da0565b8151158015612bb057506001600160a01b0384163b155b15612bf2576040517f9996b3150000000000000000000000000000000000000000000000000000000081526001600160a01b038516600482015260240161208b565b5080611da0565b606081471015612c37576040517fcd78605900000000000000000000000000000000000000000000000000000000815230600482015260240161208b565b600080856001600160a01b03168486604051612c53919061322c565b60006040518083038185875af1925050503d8060008114612c90576040519150601f19603f3d011682016040523d82523d6000602084013e612c95565b606091505b5091509150612ca5868383612b84565b9695505050505050565b805115612cbf5780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060208284031215612d0357600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114611da057600080fd5b80356001600160a01b0381168114612d4a57600080fd5b919050565b600060208284031215612d6157600080fd5b611da082612d33565b60008083601f840112612d7c57600080fd5b50813567ffffffffffffffff811115612d9457600080fd5b602083019150836020828501011115612dac57600080fd5b9250929050565b600080600060408486031215612dc857600080fd5b612dd184612d33565b9250602084013567ffffffffffffffff811115612ded57600080fd5b612df986828701612d6a565b9497909650939450505050565b60005b83811015612e21578181015183820152602001612e09565b50506000910152565b60008151808452612e42816020860160208601612e06565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000611da06020830184612e2a565b600060208284031215612e9957600080fd5b5035919050565b60008060408385031215612eb357600080fd5b82359150612ec360208401612d33565b90509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60008060408385031215612f0e57600080fd5b612f1783612d33565b9150602083013567ffffffffffffffff811115612f3357600080fd5b8301601f81018513612f4457600080fd5b803567ffffffffffffffff811115612f5e57612f5e612ecc565b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8501160116810181811067ffffffffffffffff82111715612fca57612fca612ecc565b604052818152828201602001871015612fe257600080fd5b816020840160208301376000602083830101528093505050509250929050565b60008060008060006080868803121561301a57600080fd5b61302386612d33565b945061303160208701612d33565b935060408601359250606086013567ffffffffffffffff81111561305457600080fd5b61306088828901612d6a565b969995985093965092949392505050565b60008060008060006080868803121561308957600080fd5b61309286612d33565b9450602086013593506130a760408701612d33565b9250606086013567ffffffffffffffff81111561305457600080fd5b6000806000606084860312156130d857600080fd5b6130e184612d33565b92506130ef60208501612d33565b91506130fd60408501612d33565b90509250925092565b60008060006060848603121561311b57600080fd5b61312484612d33565b9250602084013591506130fd60408501612d33565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b602081526000613196602083018486613139565b949350505050565b838152604060208201526000612b35604083018486613139565b8481526001600160a01b0384166020820152606060408201526000612ca5606083018486613139565b6000602082840312156131f357600080fd5b81518015158114611da057600080fd5b60006020828403121561321557600080fd5b5051919050565b8183823760009101908152919050565b6000825161323e818460208701612e06565b919091019291505056fea26469706673582212200a52884ba895ee02e7bedb4efa2b0b5651b56a4a1ec71f83b2704f710c1e97c664736f6c634300081a0033", + Bin: "0x60a06040523060805234801561001457600080fd5b5061001d610022565b6100d4565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100725760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146100d15780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b6080516132be6100fd60003960008181611f4601528181611f6f01526123fb01526132be6000f3fe6080604052600436106101e35760003560e01c80635c975abb11610102578063ae7a3a6f11610095578063dda79b7511610064578063dda79b751461062e578063e63ab1e91461064e578063f340fa0114610682578063f45346dc1461069557600080fd5b8063ae7a3a6f146105ae578063b8969bd4146105ce578063c0c53b8b146105ee578063d547741f1461060e57600080fd5b806391d14854116100d157806391d14854146104b7578063a217fddf1461051c578063a783c78914610531578063ad3cb1cc1461056557600080fd5b80635c975abb146104175780635d62c8601461044e5780638456cb59146104825780638c6f037f1461049757600080fd5b806335c018db1161017a5780635131ab59116101495780635131ab59146103a257806352d1902d146103c257806357bec62f146103d75780635b112591146103f757600080fd5b806335c018db1461034757806336568abe1461035a5780633f4ba83a1461037a5780634f1ef2861461038f57600080fd5b806321e093b1116101b657806321e093b11461027f578063248a9ca3146102b757806329c59b5d146103145780632f2ff15d1461032757600080fd5b806301ffc9a7146101e857806310188aef1461021d5780631b8b921d1461023f5780631cff79cd1461025f575b600080fd5b3480156101f457600080fd5b50610208610203366004612d31565b6106b5565b60405190151581526020015b60405180910390f35b34801561022957600080fd5b5061023d610238366004612d8f565b61074e565b005b34801561024b57600080fd5b5061023d61025a366004612df3565b610842565b61027261026d366004612df3565b61090d565b6040516102149190612eb4565b34801561028b57600080fd5b5060035461029f906001600160a01b031681565b6040516001600160a01b039091168152602001610214565b3480156102c357600080fd5b506103066102d2366004612ec7565b60009081527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052604090206001015490565b604051908152602001610214565b61023d610322366004612df3565b610a10565b34801561033357600080fd5b5061023d610342366004612ee0565b610ba3565b61023d610355366004612df3565b610bed565b34801561036657600080fd5b5061023d610375366004612ee0565b610ddc565b34801561038657600080fd5b5061023d610e28565b61023d61039d366004612f3b565b610e5d565b3480156103ae57600080fd5b5061023d6103bd366004613042565b610e7c565b3480156103ce57600080fd5b50610306611195565b3480156103e357600080fd5b5060025461029f906001600160a01b031681565b34801561040357600080fd5b5060015461029f906001600160a01b031681565b34801561042357600080fd5b507fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff16610208565b34801561045a57600080fd5b506103067f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b981565b34801561048e57600080fd5b5061023d6111c4565b3480156104a357600080fd5b5061023d6104b23660046130b1565b6111f6565b3480156104c357600080fd5b506102086104d2366004612ee0565b60009182527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408084206001600160a01b0393909316845291905290205460ff1690565b34801561052857600080fd5b50610306600081565b34801561053d57600080fd5b506103067f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb81565b34801561057157600080fd5b506102726040518060400160405280600581526020017f352e302e3000000000000000000000000000000000000000000000000000000081525081565b3480156105ba57600080fd5b5061023d6105c9366004612d8f565b61130c565b3480156105da57600080fd5b5061023d6105e9366004613042565b611400565b3480156105fa57600080fd5b5061023d610609366004613103565b6115b9565b34801561061a57600080fd5b5061023d610629366004612ee0565b61186e565b34801561063a57600080fd5b5060005461029f906001600160a01b031681565b34801561065a57600080fd5b506103067f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b61023d610690366004612d8f565b6118b2565b3480156106a157600080fd5b5061023d6106b0366004613146565b611a47565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061074857507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b600061075981611b42565b6001600160a01b038216610799576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002546001600160a01b0316156107dc576040517f0c8dc01600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6108067f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b983611b4c565b5050600280547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b61084a611c39565b610852611c97565b6001600160a01b038316610892576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b826001600160a01b0316336001600160a01b03167f2a21062ee9199c2e205622999eeb7c3da73153674f36a0acd3f74fa6af67bde384846040516108d79291906131c2565b60405180910390a361090860017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b505050565b60607f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb61093981611b42565b610941611c39565b610949611c97565b6001600160a01b038516610989576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610996868686611d3e565b9050856001600160a01b03167fcaf938de11c367272220bfd1d2baa99ca46665e7bc4d85f00adb51b90fe1fa9f3487876040516109d5939291906131de565b60405180910390a29150610a0860017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b509392505050565b610a18611c39565b610a20611c97565b34600003610a5a576040517f7671265e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038316610a9a576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546040516000916001600160a01b03169034908381818185875af1925050503d8060008114610ae7576040519150601f19603f3d011682016040523d82523d6000602084013e610aec565b606091505b5050905080610b27576040517f79cacff100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b836001600160a01b0316336001600160a01b03167f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a43460008787604051610b7194939291906131f8565b60405180910390a35061090860017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020526040902060010154610bdd81611b42565b610be78383611b4c565b50505050565b7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb610c1781611b42565b610c1f611c39565b610c27611c97565b6001600160a01b038416610c67576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000846001600160a01b03163460405160006040518083038185875af1925050503d8060008114610cb4576040519150601f19603f3d011682016040523d82523d6000602084013e610cb9565b606091505b5050905080610cf4576040517facfdb44400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f8fcaa0b50000000000000000000000000000000000000000000000000000000081526001600160a01b03861690638fcaa0b590610d3b90879087906004016131c2565b600060405180830381600087803b158015610d5557600080fd5b505af1158015610d69573d6000803e3d6000fd5b50505050846001600160a01b03167fd5d7616b1678354a0dea9d7e57e6a090bff5babe9f8d6381fdbad16e89ba311c348686604051610daa939291906131de565b60405180910390a250610be760017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b6001600160a01b0381163314610e1e576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6109088282611de7565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610e5281611b42565b610e5a611eab565b50565b610e65611f3b565b610e6e8261200b565b610e788282612016565b5050565b7f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b9610ea681611b42565b610eae611c39565b610eb6611c97565b83600003610ef0576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038516610f30576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610f3a868661213a565b610f70576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b0386811660048301526024820186905287169063095ea7b3906044016020604051808303816000875af1158015610fd8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ffc9190613221565b611032576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61103d858484611d3e565b50611048868661213a565b61107e576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201526000906001600160a01b038816906370a0823190602401602060405180830381865afa1580156110de573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111029190613243565b905080156111145761111487826121ca565b856001600160a01b0316876001600160a01b03167f29c40793bffd84cb810179f15d1ceec72bc7f0785514c668ba36645cf99b738287878760405161115b939291906131de565b60405180910390a35061118d60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b505050505050565b600061119f6123f0565b507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc90565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a6111ee81611b42565b610e5a612452565b6111fe611c39565b611206611c97565b83600003611240576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038516611280576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61128b3384866124cb565b846001600160a01b0316336001600160a01b03167f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a4868686866040516112d494939291906131f8565b60405180910390a361130560017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b5050505050565b600061131781611b42565b6001600160a01b038216611357576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000546001600160a01b03161561139a576040517fb337f37800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6113c47f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b983611b4c565b5050600080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b7f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b961142a81611b42565b611432611c39565b61143a611c97565b83600003611474576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b0385166114b4576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6114c86001600160a01b0387168686612711565b6040517f8fcaa0b50000000000000000000000000000000000000000000000000000000081526001600160a01b03861690638fcaa0b59061150f90869086906004016131c2565b600060405180830381600087803b15801561152957600080fd5b505af115801561153d573d6000803e3d6000fd5b50505050846001600160a01b0316866001600160a01b03167f723fc7be2448075379e4fdf1e6bf5fead954d2668d2da05dcb44ccfec4beeda7868686604051611588939291906131de565b60405180910390a361118d60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156116045750825b905060008267ffffffffffffffff1660011480156116215750303b155b90508115801561162f575080155b15611666576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84547fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000016600117855583156116c75784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff16680100000000000000001785555b6001600160a01b03881615806116e457506001600160a01b038716155b1561171b576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611723612785565b61172b61278d565b611733612785565b61173b61279d565b611746600087611b4c565b506117717f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a87611b4c565b50600180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b038a161790556117cf7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb89611b4c565b50600380547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03891617905583156118645784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b5050505050505050565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b62680060205260409020600101546118a881611b42565b610be78383611de7565b6118ba611c39565b6118c2611c97565b346000036118fc576040517f7671265e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03811661193c576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546040516000916001600160a01b03169034908381818185875af1925050503d8060008114611989576040519150601f19603f3d011682016040523d82523d6000602084013e61198e565b606091505b50509050806119c9576040517f79cacff100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60408051348152600060208201819052606082840181905282015290516001600160a01b0384169133917f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a49181900360800190a350610e5a60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b611a4f611c39565b611a57611c97565b81600003611a91576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038316611ad1576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611adc3382846124cb565b826001600160a01b0316336001600160a01b03167f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a484846040516108d79291909182526001600160a01b0316602082015260606040820181905260009082015260800190565b610e5a81336127ad565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff16611c2f576000848152602082815260408083206001600160a01b0387168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055611be53390565b6001600160a01b0316836001600160a01b0316857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a46001915050610748565b6000915050610748565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff1615611c95576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0080547ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01611d12576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60029055565b60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b6060600080856001600160a01b0316348686604051611d5e92919061325c565b60006040518083038185875af1925050503d8060008114611d9b576040519150601f19603f3d011682016040523d82523d6000602084013e611da0565b606091505b509150915081611ddc576040517facfdb44400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b9150505b9392505050565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff1615611c2f576000848152602082815260408083206001600160a01b038716808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339287917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a46001915050610748565b611eb361283a565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001681557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a150565b306001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161480611fd457507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316611fc87f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b6001600160a01b031614155b15611c95576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610e7881611b42565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa92505050801561208e575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820190925261208b91810190613243565b60015b6120d4576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b03831660048201526024015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8114612130576040517faa1d49a4000000000000000000000000000000000000000000000000000000008152600481018290526024016120cb565b6109088383612895565b6040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b038281166004830152600060248301819052919084169063095ea7b3906044016020604051808303816000875af11580156121a6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611de09190613221565b6003546001600160a01b0390811690831603612319576002546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152602481018390529083169063095ea7b3906044016020604051808303816000875af115801561224c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122709190613221565b6122a6576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002546040517f743e0c9b000000000000000000000000000000000000000000000000000000008152600481018390526001600160a01b039091169063743e0c9b90602401600060405180830381600087803b15801561230557600080fd5b505af115801561118d573d6000803e3d6000fd5b6000546040517fd936547e0000000000000000000000000000000000000000000000000000000081526001600160a01b0384811660048301529091169063d936547e90602401602060405180830381865afa15801561237c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123a09190613221565b6123d6576040517fac2175f100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600054610e78906001600160a01b03848116911683612711565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614611c95576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61245a611c39565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011781557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25833611f1d565b6003546001600160a01b0390811690831603612638576124f66001600160a01b0383168430846128eb565b6002546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152602481018390529083169063095ea7b3906044016020604051808303816000875af1158015612562573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125869190613221565b6125bc576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002546040517f743e0c9b000000000000000000000000000000000000000000000000000000008152600481018390526001600160a01b039091169063743e0c9b90602401600060405180830381600087803b15801561261b57600080fd5b505af115801561262f573d6000803e3d6000fd5b50505050505050565b6000546040517fd936547e0000000000000000000000000000000000000000000000000000000081526001600160a01b0384811660048301529091169063d936547e90602401602060405180830381865afa15801561269b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126bf9190613221565b6126f5576040517fac2175f100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600054610908906001600160a01b0384811691869116846128eb565b6040516001600160a01b0383811660248301526044820183905261090891859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050612924565b611c956129a0565b6127956129a0565b611c95612a07565b6127a56129a0565b611c95612a0f565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408083206001600160a01b038516845290915290205460ff16610e78576040517fe2517d3f0000000000000000000000000000000000000000000000000000000081526001600160a01b0382166004820152602481018390526044016120cb565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff16611c95576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61289e82612a60565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a28051156128e3576109088282612b08565b610e78612b7e565b6040516001600160a01b038481166024830152838116604483015260648201839052610be79186918216906323b872dd9060840161273e565b60006129396001600160a01b03841683612bb6565b9050805160001415801561295e57508080602001905181019061295c9190613221565b155b15610908576040517f5274afe70000000000000000000000000000000000000000000000000000000081526001600160a01b03841660048201526024016120cb565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff16611c95576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611d186129a0565b612a176129a0565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055565b806001600160a01b03163b600003612aaf576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b03821660048201526024016120cb565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6060600080846001600160a01b031684604051612b25919061326c565b600060405180830381855af49150503d8060008114612b60576040519150601f19603f3d011682016040523d82523d6000602084013e612b65565b606091505b5091509150612b75858383612bc4565b95945050505050565b3415611c95576040517fb398979f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6060611de083836000612c39565b606082612bd957612bd482612cef565b611de0565b8151158015612bf057506001600160a01b0384163b155b15612c32576040517f9996b3150000000000000000000000000000000000000000000000000000000081526001600160a01b03851660048201526024016120cb565b5080611de0565b606081471015612c77576040517fcd7860590000000000000000000000000000000000000000000000000000000081523060048201526024016120cb565b600080856001600160a01b03168486604051612c93919061326c565b60006040518083038185875af1925050503d8060008114612cd0576040519150601f19603f3d011682016040523d82523d6000602084013e612cd5565b606091505b5091509150612ce5868383612bc4565b9695505050505050565b805115612cff5780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060208284031215612d4357600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114611de057600080fd5b80356001600160a01b0381168114612d8a57600080fd5b919050565b600060208284031215612da157600080fd5b611de082612d73565b60008083601f840112612dbc57600080fd5b50813567ffffffffffffffff811115612dd457600080fd5b602083019150836020828501011115612dec57600080fd5b9250929050565b600080600060408486031215612e0857600080fd5b612e1184612d73565b9250602084013567ffffffffffffffff811115612e2d57600080fd5b612e3986828701612daa565b9497909650939450505050565b60005b83811015612e61578181015183820152602001612e49565b50506000910152565b60008151808452612e82816020860160208601612e46565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000611de06020830184612e6a565b600060208284031215612ed957600080fd5b5035919050565b60008060408385031215612ef357600080fd5b82359150612f0360208401612d73565b90509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60008060408385031215612f4e57600080fd5b612f5783612d73565b9150602083013567ffffffffffffffff811115612f7357600080fd5b8301601f81018513612f8457600080fd5b803567ffffffffffffffff811115612f9e57612f9e612f0c565b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8501160116810181811067ffffffffffffffff8211171561300a5761300a612f0c565b60405281815282820160200187101561302257600080fd5b816020840160208301376000602083830101528093505050509250929050565b60008060008060006080868803121561305a57600080fd5b61306386612d73565b945061307160208701612d73565b935060408601359250606086013567ffffffffffffffff81111561309457600080fd5b6130a088828901612daa565b969995985093965092949392505050565b6000806000806000608086880312156130c957600080fd5b6130d286612d73565b9450602086013593506130e760408701612d73565b9250606086013567ffffffffffffffff81111561309457600080fd5b60008060006060848603121561311857600080fd5b61312184612d73565b925061312f60208501612d73565b915061313d60408501612d73565b90509250925092565b60008060006060848603121561315b57600080fd5b61316484612d73565b92506020840135915061313d60408501612d73565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b6020815260006131d6602083018486613179565b949350505050565b838152604060208201526000612b75604083018486613179565b8481526001600160a01b0384166020820152606060408201526000612ce5606083018486613179565b60006020828403121561323357600080fd5b81518015158114611de057600080fd5b60006020828403121561325557600080fd5b5051919050565b8183823760009101908152919050565b6000825161327e818460208701612e46565b919091019291505056fea26469706673582212207502c72fde83b46f559fca91354376f4a808a2aefc289286688b1a9d18fa9f3f64736f6c634300081a0033", } // GatewayEVMABI is the input ABI used to generate the binding from. diff --git a/v2/pkg/gatewayevm.t.sol/gatewayevminboundtest.go b/v2/pkg/gatewayevm.t.sol/gatewayevminboundtest.go index 5362c614..bf702e0b 100644 --- a/v2/pkg/gatewayevm.t.sol/gatewayevminboundtest.go +++ b/v2/pkg/gatewayevm.t.sol/gatewayevminboundtest.go @@ -49,8 +49,8 @@ type StdInvariantFuzzSelector struct { // GatewayEVMInboundTestMetaData contains all meta data concerning the GatewayEVMInboundTest contract. var GatewayEVMInboundTestMetaData = &bind.MetaData{ - ABI: "[{\"type\":\"function\",\"name\":\"IS_TEST\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeArtifacts\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedArtifacts_\",\"type\":\"string[]\",\"internalType\":\"string[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeContracts\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedContracts_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeSelectors\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedSelectors_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzSelector[]\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"selectors\",\"type\":\"bytes4[]\",\"internalType\":\"bytes4[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeSenders\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedSenders_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"failed\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"setUp\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"targetArtifactSelectors\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedArtifactSelectors_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzArtifactSelector[]\",\"components\":[{\"name\":\"artifact\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"selectors\",\"type\":\"bytes4[]\",\"internalType\":\"bytes4[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetArtifacts\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedArtifacts_\",\"type\":\"string[]\",\"internalType\":\"string[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetContracts\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedContracts_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetInterfaces\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedInterfaces_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzInterface[]\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"artifacts\",\"type\":\"string[]\",\"internalType\":\"string[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetSelectors\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedSelectors_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzSelector[]\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"selectors\",\"type\":\"bytes4[]\",\"internalType\":\"bytes4[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetSenders\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedSenders_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"testCallWithPayload\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositERC20ToCustody\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositERC20ToCustodyFailsIfTokenIsNotWhitelisted\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositERC20ToCustodyWithPayload\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositERC20ToCustodyWithPayloadFailsIfTokenIsNotWhitelisted\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositEthToTss\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositEthToTssWithPayload\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositZetaToConnector\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testFailDepositERC20ToCustodyIfAmountIs0\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testFailDepositERC20ToCustodyIfReceiverIsZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testFailDepositERC20ToCustodyWithPayloadIfAmountIs0\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testFailDepositERC20ToCustodyWithPayloadIfReceiverIsZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testFailDepositEthToTssIfAmountIs0\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testFailDepositEthToTssIfReceiverIsZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testFailDepositEthToTssWithPayloadIfAmountIs0\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testFailDepositEthToTssWithPayloadIfReceiverIsZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"event\",\"name\":\"Call\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"receiver\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Deposit\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"receiver\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"asset\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Executed\",\"inputs\":[{\"name\":\"destination\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ExecutedWithERC20\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedERC20\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"token\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"destination\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedNoParams\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedNonPayable\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"strs\",\"type\":\"string[]\",\"indexed\":false,\"internalType\":\"string[]\"},{\"name\":\"nums\",\"type\":\"uint256[]\",\"indexed\":false,\"internalType\":\"uint256[]\"},{\"name\":\"flag\",\"type\":\"bool\",\"indexed\":false,\"internalType\":\"bool\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedPayable\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"str\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"num\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"flag\",\"type\":\"bool\",\"indexed\":false,\"internalType\":\"bool\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedRevert\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Reverted\",\"inputs\":[{\"name\":\"destination\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RevertedWithERC20\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log\",\"inputs\":[{\"name\":\"\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_address\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_array\",\"inputs\":[{\"name\":\"val\",\"type\":\"uint256[]\",\"indexed\":false,\"internalType\":\"uint256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_array\",\"inputs\":[{\"name\":\"val\",\"type\":\"int256[]\",\"indexed\":false,\"internalType\":\"int256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_array\",\"inputs\":[{\"name\":\"val\",\"type\":\"address[]\",\"indexed\":false,\"internalType\":\"address[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_bytes\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_bytes32\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_int\",\"inputs\":[{\"name\":\"\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_address\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_array\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"uint256[]\",\"indexed\":false,\"internalType\":\"uint256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_array\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"int256[]\",\"indexed\":false,\"internalType\":\"int256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_array\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"address[]\",\"indexed\":false,\"internalType\":\"address[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_bytes\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_bytes32\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_decimal_int\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"},{\"name\":\"decimals\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_decimal_uint\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"decimals\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_int\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_string\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_uint\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_string\",\"inputs\":[{\"name\":\"\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_uint\",\"inputs\":[{\"name\":\"\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"logs\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"ApprovalFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ConnectorInitialized\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"CustodyInitialized\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"DepositFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ExecutionFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientERC20Amount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientETHAmount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NotWhitelistedInCustody\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZeroAddress\",\"inputs\":[]}]", - Bin: "0x6080604052600c8054600160ff199182168117909255601f80549091169091179055620f4240602855348015603357600080fd5b5061d9ee806100436000396000f3fe608060405234801561001057600080fd5b50600436106101cf5760003560e01c8063916a17c611610104578063bb93f11e116100a2578063e306a97811610071578063e306a978146102f8578063e85c5a0714610300578063f96c02df14610308578063fa7626d41461031057600080fd5b8063bb93f11e146102d8578063c13d738f146102e0578063d896e261146102e8578063e20c9f71146102f057600080fd5b8063b0464fdc116100de578063b0464fdc146102a8578063b2849063146102b0578063b5508aa9146102b8578063ba414fa6146102c057600080fd5b8063916a17c6146102835780639fd1e59714610298578063aa030c1c146102a057600080fd5b806330f7c04f116101715780636459542a1161014b5780636459542a1461024957806366d9a9a0146102515780637478fda01461026657806385226c811461026e57600080fd5b806330f7c04f146102315780633e5e3c23146102395780633f7286f41461024157600080fd5b80630a9254e4116101ad5780630a9254e4146101ee5780631806a9a5146101f65780631ed7831c146101fe5780632ade38801461021c57600080fd5b806305a898e2146101d457806306978ca3146101de5780630724d8e3146101e6575b600080fd5b6101dc61031d565b005b6101dc6104d1565b6101dc6105e3565b6101dc61079a565b6101dc611125565b61020661121f565b60405161021391906177de565b60405180910390f35b610224611281565b604051610213919061787a565b6101dc6113c3565b610206611830565b610206611890565b6101dc6118f0565b610259611ced565b60405161021391906179e0565b6101dc611e6f565b610276611fa2565b6040516102139190617a7e565b61028b612072565b6040516102139190617af5565b6101dc61216d565b6101dc612389565b61028b612540565b6101dc61263b565b6102766128d6565b6102c86129a6565b6040519015158152602001610213565b6101dc612a7a565b6101dc612bfa565b6101dc612da9565b610206612f21565b6101dc612f81565b6101dc61324d565b6101dc6134ce565b601f546102c89060ff1681565b6026546040516001600160a01b03909116602482015260019060009060440160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f84fae76000000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063f28dceb390610415906004016020808252600b908201527f5a65726f41646472657373000000000000000000000000000000000000000000604082015260600190565b600060405180830381600087803b15801561042f57600080fd5b505af1158015610443573d6000803e3d6000fd5b50506020546023546040517f8c6f037f0000000000000000000000000000000000000000000000000000000081526001600160a01b039283169450638c6f037f935061049b9260009288929116908790600401617b8c565b600060405180830381600087803b1580156104b557600080fd5b505af11580156104c9573d6000803e3d6000fd5b505050505050565b6040517ff28dceb300000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f496e73756666696369656e74455448416d6f756e7400000000000000000000006044820152600090737109709ecfa91a80626ff3989d68f67f5b1dd12d9063f28dceb390606401600060405180830381600087803b15801561056757600080fd5b505af115801561057b573d6000803e3d6000fd5b50506020546026546040517ff340fa010000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201529116925063f340fa01915083906024015b6000604051808303818588803b1580156104b557600080fd5b6027546020546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039182166084820152620186a092919091163190737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b15801561067f57600080fd5b505af1158015610693573d6000803e3d6000fd5b505060265460255460408051878152600060208201819052606082840181905282015290516001600160a01b0393841695509290911692507f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a4919081900360800190a36020546026546040517ff340fa010000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015291169063f340fa019084906024016000604051808303818588803b15801561075957600080fd5b505af115801561076d573d6000803e3d6000fd5b50506027546001600160a01b0316319250610795915061078f90508484617bf2565b826135e4565b505050565b602580547fffffffffffffffffffffffff00000000000000000000000000000000000000009081163017909155602680548216611234179055602780549091166156781790556040516107ec906176f1565b60408082526004908201527f746573740000000000000000000000000000000000000000000000000000000060608201526080602082018190526003908201527f54544b000000000000000000000000000000000000000000000000000000000060a082015260c001604051809103906000f080158015610871573d6000803e3d6000fd5b50602380547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392831617905560275460405191169081906108ba906176fe565b6001600160a01b03928316815291166020820152604001604051809103906000f0801580156108ed573d6000803e3d6000fd5b50602480547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039283169081178255604080518082018252600e81527f4761746577617945564d2e736f6c0000000000000000000000000000000000006020820152602754602554925190861694810194909452604484019290925290921660648201526109de919060840160408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fc0c53b8b00000000000000000000000000000000000000000000000000000000179052613663565b601f80547fffffffffffffffffffffff0000000000000000000000000000000000000000ff166101006001600160a01b0393841681029190911791829055602080549190920483167fffffffffffffffffffffffff00000000000000000000000000000000000000009091168117909155602754602554604051929391821692911690610a6a9061770b565b6001600160a01b03938416815291831660208301529091166040820152606001604051809103906000f080158015610aa6573d6000803e3d6000fd5b50602180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039283161790556020546024546027546025546040519385169492831693918316921690610b0190617718565b6001600160a01b039485168152928416602084015290831660408301529091166060820152608001604051809103906000f080158015610b45573d6000803e3d6000fd5b50602280547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039283161790556027546040517fca669fa700000000000000000000000000000000000000000000000000000000815291166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015610be357600080fd5b505af1158015610bf7573d6000803e3d6000fd5b5050602480546027546022546040517f15d57fd40000000000000000000000000000000000000000000000000000000081526001600160a01b039283166004820152908216938101939093521692506315d57fd49150604401600060405180830381600087803b158015610c6a57600080fd5b505af1158015610c7e573d6000803e3d6000fd5b50506027546040517fc88a5e6d0000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152670de0b6b3a76400006024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c88a5e6d9150604401600060405180830381600087803b158015610d0257600080fd5b505af1158015610d16573d6000803e3d6000fd5b50506025546040517f06447d560000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506306447d569150602401600060405180830381600087803b158015610d8c57600080fd5b505af1158015610da0573d6000803e3d6000fd5b50506020546021546040517fae7a3a6f0000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201529116925063ae7a3a6f9150602401600060405180830381600087803b158015610e0657600080fd5b505af1158015610e1a573d6000803e3d6000fd5b50506020546022546040517f10188aef0000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152911692506310188aef9150602401600060405180830381600087803b158015610e8057600080fd5b505af1158015610e94573d6000803e3d6000fd5b50506021546023546040517f9b19251a0000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015291169250639b19251a9150602401600060405180830381600087803b158015610efa57600080fd5b505af1158015610f0e573d6000803e3d6000fd5b505050507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b03166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610f7057600080fd5b505af1158015610f84573d6000803e3d6000fd5b50506023546025546028546040517f40c10f190000000000000000000000000000000000000000000000000000000081526001600160a01b0392831660048201526024810191909152911692506340c10f199150604401600060405180830381600087803b158015610ff557600080fd5b505af1158015611009573d6000803e3d6000fd5b50506027546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b15801561107f57600080fd5b505af1158015611093573d6000803e3d6000fd5b50506022546025546028546040517f106e62900000000000000000000000000000000000000000000000000000000081526001600160a01b0392831660048201526024810191909152600060448201529116925063106e62909150606401600060405180830381600087803b15801561110b57600080fd5b505af115801561111f573d6000803e3d6000fd5b50505050565b6040517ff28dceb300000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f5a65726f416464726573730000000000000000000000000000000000000000006044820152600190737109709ecfa91a80626ff3989d68f67f5b1dd12d9063f28dceb390606401600060405180830381600087803b1580156111bb57600080fd5b505af11580156111cf573d6000803e3d6000fd5b50506020546040517ff340fa01000000000000000000000000000000000000000000000000000000008152600060048201526001600160a01b03909116925063f340fa01915083906024016105ca565b6060601680548060200260200160405190810160405280929190818152602001828054801561127757602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311611259575b5050505050905090565b6060601e805480602002602001604051908101604052809291908181526020016000905b828210156113ba57600084815260208082206040805180820182526002870290920180546001600160a01b03168352600181018054835181870281018701909452808452939591948681019491929084015b828210156113a357838290600052602060002001805461131690617c05565b80601f016020809104026020016040519081016040528092919081815260200182805461134290617c05565b801561138f5780601f106113645761010080835404028352916020019161138f565b820191906000526020600020905b81548152906001019060200180831161137257829003601f168201915b5050505050815260200190600101906112f7565b5050505081525050815260200190600101906112a5565b50505050905090565b6023546021546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620186a09260009216906370a0823190602401602060405180830381865afa15801561142f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114539190617c52565b90506114606000826135e4565b6026546040516001600160a01b03909116602482015260009060440160408051601f19818403018152918152602080830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f84fae76000000000000000000000000000000000000000000000000000000000179052602354905491517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b03928316600482015260248101879052929350169063095ea7b3906044016020604051808303816000875af1158015611543573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115679190617c6b565b506020546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b1580156115f657600080fd5b505af115801561160a573d6000803e3d6000fd5b50506026546025546023546040516001600160a01b03938416955091831693507f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a49261165d928992909116908790617c8d565b60405180910390a36020546026546023546040517f8c6f037f0000000000000000000000000000000000000000000000000000000081526001600160a01b0393841693638c6f037f936116be93908216928992909116908790600401617b8c565b600060405180830381600087803b1580156116d857600080fd5b505af11580156116ec573d6000803e3d6000fd5b50506023546021546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260009450911691506370a0823190602401602060405180830381865afa158015611758573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061177c9190617c52565b905061178884826135e4565b6023546025546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260009291909116906370a0823190602401602060405180830381865afa1580156117f2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118169190617c52565b90506118298560285461078f9190617cb5565b5050505050565b60606018805480602002602001604051908101604052809291908181526020018280548015611277576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311611259575050505050905090565b60606017805480602002602001604051908101604052809291908181526020018280548015611277576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311611259575050505050905090565b6023546021546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620186a09260009216906370a0823190602401602060405180830381865afa15801561195c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119809190617c52565b905061198d6000826135e4565b6023546020546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201526024810185905291169063095ea7b3906044016020604051808303816000875af11580156119fb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a1f9190617c6b565b506020546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b158015611aae57600080fd5b505af1158015611ac2573d6000803e3d6000fd5b5050602654602554602354604080518881526001600160a01b039283166020820152606081830181905260009082015290519382169550911692507f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a4919081900360800190a36020546026546023546040517ff45346dc0000000000000000000000000000000000000000000000000000000081526001600160a01b03928316600482015260248101869052908216604482015291169063f45346dc90606401600060405180830381600087803b158015611b9c57600080fd5b505af1158015611bb0573d6000803e3d6000fd5b50506023546021546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260009450911691506370a0823190602401602060405180830381865afa158015611c1c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c409190617c52565b9050611c4c83826135e4565b6023546025546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260009291909116906370a0823190602401602060405180830381865afa158015611cb6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cda9190617c52565b905061111f8460285461078f9190617cb5565b6060601b805480602002602001604051908101604052809291908181526020016000905b828210156113ba5783829060005260206000209060020201604051806040016040529081600082018054611d4490617c05565b80601f0160208091040260200160405190810160405280929190818152602001828054611d7090617c05565b8015611dbd5780601f10611d9257610100808354040283529160200191611dbd565b820191906000526020600020905b815481529060010190602001808311611da057829003601f168201915b5050505050815260200160018201805480602002602001604051908101604052809291908181526020018280548015611e5757602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019060040190602082600301049283019260010382029150808411611e045790505b50505050508152505081526020019060010190611d11565b6040517ff28dceb300000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f5a65726f416464726573730000000000000000000000000000000000000000006044820152600190737109709ecfa91a80626ff3989d68f67f5b1dd12d9063f28dceb390606401600060405180830381600087803b158015611f0557600080fd5b505af1158015611f19573d6000803e3d6000fd5b50506020546023546040517ff45346dc00000000000000000000000000000000000000000000000000000000815260006004820152602481018690526001600160a01b0391821660448201529116925063f45346dc91506064015b600060405180830381600087803b158015611f8e57600080fd5b505af1158015611829573d6000803e3d6000fd5b6060601a805480602002602001604051908101604052809291908181526020016000905b828210156113ba578382906000526020600020018054611fe590617c05565b80601f016020809104026020016040519081016040528092919081815260200182805461201190617c05565b801561205e5780601f106120335761010080835404028352916020019161205e565b820191906000526020600020905b81548152906001019060200180831161204157829003601f168201915b505050505081526020019060010190611fc6565b6060601d805480602002602001604051908101604052809291908181526020016000905b828210156113ba5760008481526020908190206040805180820182526002860290920180546001600160a01b0316835260018101805483518187028101870190945280845293949193858301939283018282801561215557602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190600401906020826003010492830192600103820291508084116121025790505b50505050508152505081526020019060010190612096565b6027546026546040516001600160a01b039182166024820152620186a09291909116319060009060440160408051601f19818403018152918152602080830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f84fae760000000000000000000000000000000000000000000000000000000001790525490517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b15801561227e57600080fd5b505af1158015612292573d6000803e3d6000fd5b50506026546025546040516001600160a01b039283169450911691507f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a4906122e09087906000908790617c8d565b60405180910390a36020546026546040517f29c59b5d0000000000000000000000000000000000000000000000000000000081526001600160a01b03928316926329c59b5d92879261233a92909116908690600401617cc8565b6000604051808303818588803b15801561235357600080fd5b505af1158015612367573d6000803e3d6000fd5b50506027546001600160a01b031631925061111f915061078f90508585617bf2565b6026546040516001600160a01b03909116602482015260009060440160408051601f19818403018152918152602080830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f84fae760000000000000000000000000000000000000000000000000000000001790525490517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b15801561248c57600080fd5b505af11580156124a0573d6000803e3d6000fd5b50506026546025546040516001600160a01b039283169450911691507f2a21062ee9199c2e205622999eeb7c3da73153674f36a0acd3f74fa6af67bde3906124e9908590617cea565b60405180910390a36020546026546040517f1b8b921d0000000000000000000000000000000000000000000000000000000081526001600160a01b0392831692631b8b921d92611f74929116908590600401617cc8565b6060601c805480602002602001604051908101604052809291908181526020016000905b828210156113ba5760008481526020908190206040805180820182526002860290920180546001600160a01b0316835260018101805483518187028101870190945280845293949193858301939283018282801561262357602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190600401906020826003010492830192600103820291508084116125d05790505b50505050508152505081526020019060010190612564565b6023546020546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620186a06024820181905292919091169063095ea7b3906044016020604051808303816000875af11580156126b0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126d49190617c6b565b506025546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561274757600080fd5b505af115801561275b573d6000803e3d6000fd5b50506021546023546040517f9a5904270000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015291169250639a5904279150602401600060405180830381600087803b1580156127c157600080fd5b505af11580156127d5573d6000803e3d6000fd5b50506040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fac2175f1000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e091506024015b600060405180830381600087803b15801561285f57600080fd5b505af1158015612873573d6000803e3d6000fd5b50506020546026546023546040517ff45346dc0000000000000000000000000000000000000000000000000000000081526001600160a01b0392831660048201526024810187905290821660448201529116925063f45346dc9150606401611f74565b60606019805480602002602001604051908101604052809291908181526020016000905b828210156113ba57838290600052602060002001805461291990617c05565b80601f016020809104026020016040519081016040528092919081815260200182805461294590617c05565b80156129925780601f1061296757610100808354040283529160200191612992565b820191906000526020600020905b81548152906001019060200180831161297557829003601f168201915b5050505050815260200190600101906128fa565b60085460009060ff16156129be575060085460ff1690565b6040517f667f9d70000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d600482018190527f6661696c65640000000000000000000000000000000000000000000000000000602483015260009163667f9d7090604401602060405180830381865afa158015612a4f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a739190617c52565b1415905090565b6026546040516001600160a01b039091166024820152600090819060440160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f84fae76000000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063f28dceb390612b719060040160208082526017908201527f496e73756666696369656e744552433230416d6f756e74000000000000000000604082015260600190565b600060405180830381600087803b158015612b8b57600080fd5b505af1158015612b9f573d6000803e3d6000fd5b50506020546026546023546040517f8c6f037f0000000000000000000000000000000000000000000000000000000081526001600160a01b039384169550638c6f037f945061049b9392831692889216908790600401617b8c565b6026546040516001600160a01b039091166024820152600090819060440160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f84fae76000000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063f28dceb390612cf19060040160208082526015908201527f496e73756666696369656e74455448416d6f756e740000000000000000000000604082015260600190565b600060405180830381600087803b158015612d0b57600080fd5b505af1158015612d1f573d6000803e3d6000fd5b50506020546026546040517f29c59b5d0000000000000000000000000000000000000000000000000000000081526001600160a01b0392831694506329c59b5d93508692612d739216908690600401617cc8565b6000604051808303818588803b158015612d8c57600080fd5b505af1158015612da0573d6000803e3d6000fd5b50505050505050565b6026546040516001600160a01b03909116602482015260019060009060440160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f84fae76000000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063f28dceb390612ea1906004016020808252600b908201527f5a65726f41646472657373000000000000000000000000000000000000000000604082015260600190565b600060405180830381600087803b158015612ebb57600080fd5b505af1158015612ecf573d6000803e3d6000fd5b50506020546040517f29c59b5d0000000000000000000000000000000000000000000000000000000081526001600160a01b0390911692506329c59b5d91508490612d73906000908690600401617cc8565b60606015805480602002602001604051908101604052809291908181526020018280548015611277576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311611259575050505050905090565b602480546020546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620186a093810184905291169063095ea7b3906044016020604051808303816000875af1158015612ff3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130179190617c6b565b506020546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b1580156130a657600080fd5b505af11580156130ba573d6000803e3d6000fd5b5050602654602554602454604080518781526001600160a01b039283166020820152606081830181905260009082015290519382169550911692507f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a4919081900360800190a3602054602654602480546040517ff45346dc0000000000000000000000000000000000000000000000000000000081526001600160a01b0393841660048201529182018590528216604482015291169063f45346dc90606401600060405180830381600087803b15801561319357600080fd5b505af11580156131a7573d6000803e3d6000fd5b5050602480546025546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260009550911692506370a082319101602060405180830381865afa158015613212573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132369190617c52565b90506132498260285461078f9190617cb5565b5050565b6026546040516001600160a01b039091166024820152620186a09060009060440160408051601f19818403018152918152602080830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f84fae76000000000000000000000000000000000000000000000000000000000179052602354905491517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b03928316600482015260248101869052929350169063095ea7b3906044016020604051808303816000875af1158015613335573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133599190617c6b565b506025546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156133cc57600080fd5b505af11580156133e0573d6000803e3d6000fd5b50506021546023546040517f9a5904270000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015291169250639a5904279150602401600060405180830381600087803b15801561344657600080fd5b505af115801561345a573d6000803e3d6000fd5b50506040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fac2175f1000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401612b71565b6023546020546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260006024820181905292919091169063095ea7b3906044016020604051808303816000875af1158015613541573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135659190617c6b565b506040517ff28dceb300000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f496e73756666696369656e744552433230416d6f756e740000000000000000006044820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063f28dceb390606401612845565b6040517f98296c540000000000000000000000000000000000000000000000000000000081526004810183905260248101829052737109709ecfa91a80626ff3989d68f67f5b1dd12d906398296c549060440160006040518083038186803b15801561364f57600080fd5b505afa1580156104c9573d6000803e3d6000fd5b600061366d617725565b613678848483613682565b9150505b92915050565b60008061368f85846136fd565b90506136f26040518060400160405280601d81526020017f4552433139363750726f78792e736f6c3a4552433139363750726f787900000081525082866040516020016136dd929190617cc8565b60405160208183030381529060405285613709565b9150505b9392505050565b60006136f68383613737565b60c0810151516000901561372d5761372684848460c00151613752565b90506136f6565b61372684846138f8565b600061374383836139e3565b6136f683836020015184613709565b60008061375d6139ef565b9050600061376b8683613ac2565b905060006137828260600151836020015185613f68565b905060006137928383898961417a565b9050600061379f82614ff7565b602081015181519192509060030b15613812578982604001516040516020016137c9929190617cfd565b60408051601f19818403018152908290527f08c379a000000000000000000000000000000000000000000000000000000000825261380991600401617cea565b60405180910390fd5b60006138556040518060400160405280601581526020017f4465706c6f79656420746f20616464726573733a2000000000000000000000008152508360016151c6565b6040517fc6ce059d000000000000000000000000000000000000000000000000000000008152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c6ce059d906138a8908490600401617cea565b602060405180830381865afa1580156138c5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138e99190617d7e565b9b9a5050505050505050505050565b6040517f8d1cc9250000000000000000000000000000000000000000000000000000000081526000908190737109709ecfa91a80626ff3989d68f67f5b1dd12d90638d1cc9259061394d908790600401617cea565b600060405180830381865afa15801561396a573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526139929190810190617e8f565b905060006139c082856040516020016139ac929190617ec4565b6040516020818303038152906040526153c6565b90506001600160a01b0381166136785784846040516020016137c9929190617ef3565b613249828260006153d9565b604080518082018252600381527f6f75740000000000000000000000000000000000000000000000000000000000602082015290517fd145736c000000000000000000000000000000000000000000000000000000008152606091737109709ecfa91a80626ff3989d68f67f5b1dd12d91829063d145736c90613a76908490600401617f9e565b600060405180830381865afa158015613a93573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052613abb9190810190617fe5565b9250505090565b613af46040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b6000737109709ecfa91a80626ff3989d68f67f5b1dd12d9050613b3f6040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b613b48856154dc565b60208201526000613b58866158c1565b90506000836001600160a01b031663d930a0e66040518163ffffffff1660e01b8152600401600060405180830381865afa158015613b9a573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052613bc29190810190617fe5565b86838560200151604051602001613bdc949392919061802e565b60408051601f19818403018152908290527f60f9bb1100000000000000000000000000000000000000000000000000000000825291506000906001600160a01b038616906360f9bb1190613c34908590600401617cea565b600060405180830381865afa158015613c51573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052613c799190810190617fe5565b6040517fdb4235f60000000000000000000000000000000000000000000000000000000081529091506001600160a01b0386169063db4235f690613cc1908490600401618132565b602060405180830381865afa158015613cde573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613d029190617c6b565b613d1757816040516020016137c99190618184565b6040517f49c4fac80000000000000000000000000000000000000000000000000000000081526001600160a01b038616906349c4fac890613d5c908490600401618216565b600060405180830381865afa158015613d79573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052613da19190810190617fe5565b84526040517fdb4235f60000000000000000000000000000000000000000000000000000000081526001600160a01b0386169063db4235f690613de8908490600401618268565b602060405180830381865afa158015613e05573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613e299190617c6b565b15613ebe576040517f49c4fac80000000000000000000000000000000000000000000000000000000081526001600160a01b038616906349c4fac890613e73908490600401618268565b600060405180830381865afa158015613e90573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052613eb89190810190617fe5565b60408501525b846001600160a01b03166349c4fac8828660000151604051602001613ee391906182ba565b6040516020818303038152906040526040518363ffffffff1660e01b8152600401613f0f929190618326565b600060405180830381865afa158015613f2c573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052613f549190810190617fe5565b606085015250608083015250949350505050565b60408051600480825260a0820190925260609160009190816020015b6060815260200190600190039081613f845790505090506040518060400160405280600481526020017f677265700000000000000000000000000000000000000000000000000000000081525081600081518110613fe457613fe461834b565b60200260200101819052506040518060400160405280600381526020017f2d726c0000000000000000000000000000000000000000000000000000000000815250816001815181106140385761403861834b565b602002602001018190525084604051602001614054919061837a565b604051602081830303815290604052816002815181106140765761407661834b565b60200260200101819052508260405160200161409291906183e6565b604051602081830303815290604052816003815181106140b4576140b461834b565b602002602001018190525060006140ca82614ff7565b602080820151604080518082018252600581527f2e6a736f6e000000000000000000000000000000000000000000000000000000818501908152825180840184526000808252908601528251808401909352905182529281019290925291925061415b9060408051808201825260008082526020918201528151808301909252845182528085019082015290615b44565b61417057856040516020016137c99190618427565b9695505050505050565b60a0810151604080518082018252600080825260209182015281518083019092528251808352928101910152606090737109709ecfa91a80626ff3989d68f67f5b1dd12d90156141ca565b511590565b61433e57826020015115614286576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605860248201527f54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f742060448201527f62652075736564207768656e207468652060736b6970566572696679536f757260648201527f6365436f646560206f7074696f6e206973206074727565600000000000000000608482015260a401613809565b8260c001511561433e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605360248201527f54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f742060448201527f62652075736564207768656e207468652060736b69704c6963656e736554797060648201527f6560206f7074696f6e2069732060747275656000000000000000000000000000608482015260a401613809565b6040805160ff8082526120008201909252600091816020015b606081526020019060019003908161435757905050905060006040518060400160405280600381526020017f6e707800000000000000000000000000000000000000000000000000000000008152508282806143b2906184b8565b935060ff16815181106143c7576143c761834b565b60200260200101819052506040518060400160405280600d81526020017f302e302e312d616c7068612e370000000000000000000000000000000000000081525060405160200161441891906184d7565b604051602081830303815290604052828280614433906184b8565b935060ff16815181106144485761444861834b565b60200260200101819052506040518060400160405280600681526020017f6465706c6f790000000000000000000000000000000000000000000000000000815250828280614495906184b8565b935060ff16815181106144aa576144aa61834b565b60200260200101819052506040518060400160405280600e81526020017f2d2d636f6e74726163744e616d650000000000000000000000000000000000008152508282806144f7906184b8565b935060ff168151811061450c5761450c61834b565b60200260200101819052508760200151828280614528906184b8565b935060ff168151811061453d5761453d61834b565b60200260200101819052506040518060400160405280600e81526020017f2d2d636f6e74726163745061746800000000000000000000000000000000000081525082828061458a906184b8565b935060ff168151811061459f5761459f61834b565b6020908102919091010152875182826145b7816184b8565b935060ff16815181106145cc576145cc61834b565b60200260200101819052506040518060400160405280600981526020017f2d2d636861696e49640000000000000000000000000000000000000000000000815250828280614619906184b8565b935060ff168151811061462e5761462e61834b565b602002602001018190525061464246615ba5565b828261464d816184b8565b935060ff16815181106146625761466261834b565b60200260200101819052506040518060400160405280600f81526020017f2d2d6275696c64496e666f46696c6500000000000000000000000000000000008152508282806146af906184b8565b935060ff16815181106146c4576146c461834b565b6020026020010181905250868282806146dc906184b8565b935060ff16815181106146f1576146f161834b565b60209081029190910101528551156148185760408051808201909152601581527f2d2d636f6e7374727563746f7242797465636f6465000000000000000000000060208201528282614742816184b8565b935060ff16815181106147575761475761834b565b60209081029190910101526040517f71aad10d0000000000000000000000000000000000000000000000000000000081526001600160a01b038416906371aad10d906147a7908990600401617cea565b600060405180830381865afa1580156147c4573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526147ec9190810190617fe5565b82826147f7816184b8565b935060ff168151811061480c5761480c61834b565b60200260200101819052505b8460200151156148e85760408051808201909152601281527f2d2d766572696679536f75726365436f6465000000000000000000000000000060208201528282614861816184b8565b935060ff16815181106148765761487661834b565b60200260200101819052506040518060400160405280600581526020017f66616c73650000000000000000000000000000000000000000000000000000008152508282806148c3906184b8565b935060ff16815181106148d8576148d861834b565b6020026020010181905250614aaf565b6149206141c58660a0015160408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6149b35760408051808201909152600d81527f2d2d6c6963656e7365547970650000000000000000000000000000000000000060208201528282614963816184b8565b935060ff16815181106149785761497861834b565b60200260200101819052508460a00151604051602001614998919061837a565b6040516020818303038152906040528282806148c3906184b8565b8460c001511580156149f65750604080890151815180830183526000808252602091820152825180840190935281518352908101908201526149f490511590565b155b15614aaf5760408051808201909152600d81527f2d2d6c6963656e7365547970650000000000000000000000000000000000000060208201528282614a3a816184b8565b935060ff1681518110614a4f57614a4f61834b565b6020026020010181905250614a6388615c45565b604051602001614a73919061837a565b604051602081830303815290604052828280614a8e906184b8565b935060ff1681518110614aa357614aa361834b565b60200260200101819052505b60408086015181518083018352600080825260209182015282518084019093528151835290810190820152614ae390511590565b614b785760408051808201909152600b81527f2d2d72656c61796572496400000000000000000000000000000000000000000060208201528282614b26816184b8565b935060ff1681518110614b3b57614b3b61834b565b60200260200101819052508460400151828280614b57906184b8565b935060ff1681518110614b6c57614b6c61834b565b60200260200101819052505b606085015115614c995760408051808201909152600681527f2d2d73616c74000000000000000000000000000000000000000000000000000060208201528282614bc1816184b8565b935060ff1681518110614bd657614bd661834b565b602090810291909101015260608501516040517fb11a19e800000000000000000000000000000000000000000000000000000000815260048101919091526001600160a01b0384169063b11a19e890602401600060405180830381865afa158015614c45573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052614c6d9190810190617fe5565b8282614c78816184b8565b935060ff1681518110614c8d57614c8d61834b565b60200260200101819052505b60e08501515115614d405760408051808201909152600a81527f2d2d6761734c696d69740000000000000000000000000000000000000000000060208201528282614ce3816184b8565b935060ff1681518110614cf857614cf861834b565b6020026020010181905250614d148560e0015160000151615ba5565b8282614d1f816184b8565b935060ff1681518110614d3457614d3461834b565b60200260200101819052505b60e08501516020015115614dea5760408051808201909152600a81527f2d2d67617350726963650000000000000000000000000000000000000000000060208201528282614d8d816184b8565b935060ff1681518110614da257614da261834b565b6020026020010181905250614dbe8560e0015160200151615ba5565b8282614dc9816184b8565b935060ff1681518110614dde57614dde61834b565b60200260200101819052505b60e08501516040015115614e945760408051808201909152600e81527f2d2d6d617846656550657247617300000000000000000000000000000000000060208201528282614e37816184b8565b935060ff1681518110614e4c57614e4c61834b565b6020026020010181905250614e688560e0015160400151615ba5565b8282614e73816184b8565b935060ff1681518110614e8857614e8861834b565b60200260200101819052505b60e08501516060015115614f3e5760408051808201909152601681527f2d2d6d61785072696f726974794665655065724761730000000000000000000060208201528282614ee1816184b8565b935060ff1681518110614ef657614ef661834b565b6020026020010181905250614f128560e0015160600151615ba5565b8282614f1d816184b8565b935060ff1681518110614f3257614f3261834b565b60200260200101819052505b60008160ff1667ffffffffffffffff811115614f5c57614f5c617da7565b604051908082528060200260200182016040528015614f8f57816020015b6060815260200190600190039081614f7a5790505b50905060005b8260ff168160ff161015614fe857838160ff1681518110614fb857614fb861834b565b6020026020010151828260ff1681518110614fd557614fd561834b565b6020908102919091010152600101614f95565b5093505050505b949350505050565b61501e6040518060600160405280600060030b815260200160608152602001606081525090565b60408051808201825260048082527f6261736800000000000000000000000000000000000000000000000000000000602083015291517fd145736c000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d92600091849163d145736c916150a491869101618542565b600060405180830381865afa1580156150c1573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526150e99190810190617fe5565b905060006150f78683616734565b90506000846001600160a01b031663f45c1ce7836040518263ffffffff1660e01b81526004016151279190617a7e565b6000604051808303816000875af1158015615146573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261516e9190810190618589565b805190915060030b158015906151875750602081015151155b80156151965750604081015151155b1561417057816000815181106151ae576151ae61834b565b60200260200101516040516020016137c9919061863f565b606060006151fb8560408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6040805180820182526000808252602091820152815180830190925286518252808701908201529091506152329082905b90616889565b1561538f5760006152af826152a9846152a36152758a60408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6040805180820182526000808252602091820152815180830190925282518252918201519181019190915290565b906168b0565b90616912565b604080518082018252600181527f0a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152909150615313908290616889565b1561537d57604080518082018252600181527f0a000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261537a905b8290616997565b90505b615386816169bd565b925050506136f6565b82156153a85784846040516020016137c992919061882b565b50506040805160208101909152600081526136f6565b509392505050565b6000808251602084016000f09392505050565b8160a00151156153e857505050565b60006153f5848484616a26565b9050600061540282614ff7565b602081015181519192509060030b15801561549e5750604080518082018252600781527f53554343455353000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261549e9060408051808201825260008082526020918201528151808301909252845182528085019082015261522c565b156154ab57505050505050565b604082015151156154cb5781604001516040516020016137c991906188d2565b806040516020016137c99190618930565b606060006155118360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600481527f2e736f6c0000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152909150615576905b8290615b44565b156155e557604080518082018252600481527f2e736f6c00000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526136f6906155e0908390616fc1565b6169bd565b604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152615647905b829061704b565b60010361571457604080518082018252600181527f3a00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526156ad90615373565b50604080518082018252600181527f3a00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526136f6906155e0905b8390616997565b604080518082018252600581527f2e6a736f6e000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526157739061556f565b156158aa57604080518082018252600181527f2f000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201819052845180860190955292518452830152906157db9083906170e5565b9050600081600183516157ee9190617cb5565b815181106157fe576157fe61834b565b602002602001015190506158a16155e06158746040518060400160405280600581526020017f2e6a736f6e00000000000000000000000000000000000000000000000000000081525060408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b60408051808201825260008082526020918201528151808301909252855182528086019082015290616fc1565b95945050505050565b826040516020016137c9919061899b565b50919050565b606060006158f68360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600481527f2e736f6c00000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201529091506159589061556f565b15615966576136f6816169bd565b604080518082018252600181527f3a00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526159c590615640565b600103615a2f57604080518082018252600181527f3a00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526136f6906155e09061570d565b604080518082018252600581527f2e6a736f6e00000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152615a8e9061556f565b156158aa57604080518082018252600181527f2f00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820181905284518086019095529251845283015290615af69083906170e5565b9050600181511115615b32578060028251615b119190617cb5565b81518110615b2157615b2161834b565b602002602001015192505050919050565b50826040516020016137c9919061899b565b805182516000911115615b595750600061367c565b81518351602085015160009291615b6f91617bf2565b615b799190617cb5565b905082602001518103615b9057600191505061367c565b82516020840151819020912014905092915050565b60606000615bb28361718a565b600101905060008167ffffffffffffffff811115615bd257615bd2617da7565b6040519080825280601f01601f191660200182016040528015615bfc576020820181803683370190505b5090508181016020015b600019017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a8504945084615c0657509392505050565b604081810151815180830183526000808252602091820181905283518085018552835181529282018383015283518085018552600a81527f554e4c4943454e5345440000000000000000000000000000000000000000000081840190815285518087018752838152840192909252845180860190955251845290830152606091615cd1905b829061726c565b15615d1157505060408051808201909152600481527f4e6f6e65000000000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600981527f556e6c6963656e7365000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152615d7090615cca565b15615db057505060408051808201909152600981527f556e6c6963656e736500000000000000000000000000000000000000000000006020820152919050565b604080518082018252600381527f4d4954000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152615e0f90615cca565b15615e4f57505060408051808201909152600381527f4d495400000000000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f47504c2d322e302d6f6e6c79000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152615eae90615cca565b80615f135750604080518082018252601081527f47504c2d322e302d6f722d6c617465720000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152615f1390615cca565b15615f5357505060408051808201909152600981527f474e552047504c763200000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f47504c2d332e302d6f6e6c79000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152615fb290615cca565b806160175750604080518082018252601081527f47504c2d332e302d6f722d6c61746572000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261601790615cca565b1561605757505060408051808201909152600981527f474e552047504c763300000000000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4c47504c2d322e312d6f6e6c7900000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526160b690615cca565b8061611b5750604080518082018252601181527f4c47504c2d322e312d6f722d6c617465720000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261611b90615cca565b1561615b57505060408051808201909152600c81527f474e55204c47504c76322e3100000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4c47504c2d332e302d6f6e6c7900000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526161ba90615cca565b8061621f5750604080518082018252601181527f4c47504c2d332e302d6f722d6c617465720000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261621f90615cca565b1561625f57505060408051808201909152600a81527f474e55204c47504c7633000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f4253442d322d436c617573650000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526162be90615cca565b156162fe57505060408051808201909152600c81527f4253442d322d436c6175736500000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f4253442d332d436c6175736500000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261635d90615cca565b1561639d57505060408051808201909152600c81527f4253442d332d436c6175736500000000000000000000000000000000000000006020820152919050565b604080518082018252600781527f4d504c2d322e3000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526163fc90615cca565b1561643c57505060408051808201909152600781527f4d504c2d322e30000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600781527f4f534c2d332e30000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261649b90615cca565b156164db57505060408051808201909152600781527f4f534c2d332e30000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600a81527f4170616368652d322e30000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261653a90615cca565b1561657a57505060408051808201909152600a81527f4170616368652d322e30000000000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4147504c2d332e302d6f6e6c7900000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526165d990615cca565b8061663e5750604080518082018252601181527f4147504c2d332e302d6f722d6c617465720000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261663e90615cca565b1561667e57505060408051808201909152600a81527f474e55204147504c7633000000000000000000000000000000000000000000006020820152919050565b604080518082018252600881527f4255534c2d312e31000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526166dd90615cca565b1561671d57505060408051808201909152600781527f42534c20312e31000000000000000000000000000000000000000000000000006020820152919050565b604080840151845191516137c99290602001618a79565b60608060005b84518110156167bf57818582815181106167565761675661834b565b602002602001015160405160200161676f929190617ec4565b60405160208183030381529060405291506001855161678e9190617cb5565b81146167b757816040516020016167a59190618be2565b60405160208183030381529060405291505b60010161673a565b5060408051600380825260808201909252600091816020015b60608152602001906001900390816167d857905050905083816000815181106168035761680361834b565b60200260200101819052506040518060400160405280600281526020017f2d63000000000000000000000000000000000000000000000000000000000000815250816001815181106168575761685761834b565b602002602001018190525081816002815181106168765761687661834b565b6020908102919091010152949350505050565b60208083015183518351928401516000936168a79291849190617280565b14159392505050565b604080518082019091526000808252602082015260006168e28460000151856020015185600001518660200151617391565b90508360200151816168f49190617cb5565b84518590616903908390617cb5565b90525060208401525090919050565b604080518082019091526000808252602082015281518351101561693757508161367c565b602080830151908401516001911461695e5750815160208481015190840151829020919020145b801561698f57825184518590616975908390617cb5565b905250825160208501805161698b908390617bf2565b9052505b509192915050565b60408051808201909152600080825260208201526169b68383836174b1565b5092915050565b60606000826000015167ffffffffffffffff8111156169de576169de617da7565b6040519080825280601f01601f191660200182016040528015616a08576020820181803683370190505b50905060006020820190506169b6818560200151866000015161755c565b60606000616a326139ef565b6040805160ff808252612000820190925291925060009190816020015b6060815260200190600190039081616a4f57905050905060006040518060400160405280600381526020017f6e70780000000000000000000000000000000000000000000000000000000000815250828280616aaa906184b8565b935060ff1681518110616abf57616abf61834b565b60200260200101819052506040518060400160405280600781526020017f5e312e33322e3300000000000000000000000000000000000000000000000000815250604051602001616b109190618c23565b604051602081830303815290604052828280616b2b906184b8565b935060ff1681518110616b4057616b4061834b565b60200260200101819052506040518060400160405280600881526020017f76616c6964617465000000000000000000000000000000000000000000000000815250828280616b8d906184b8565b935060ff1681518110616ba257616ba261834b565b602002602001018190525082604051602001616bbe91906183e6565b604051602081830303815290604052828280616bd9906184b8565b935060ff1681518110616bee57616bee61834b565b60200260200101819052506040518060400160405280600a81526020017f2d2d636f6e747261637400000000000000000000000000000000000000000000815250828280616c3b906184b8565b935060ff1681518110616c5057616c5061834b565b6020026020010181905250616c6587846175d6565b8282616c70816184b8565b935060ff1681518110616c8557616c8561834b565b602090810291909101015285515115616d315760408051808201909152600b81527f2d2d7265666572656e636500000000000000000000000000000000000000000060208201528282616cd7816184b8565b935060ff1681518110616cec57616cec61834b565b6020026020010181905250616d058660000151846175d6565b8282616d10816184b8565b935060ff1681518110616d2557616d2561834b565b60200260200101819052505b856080015115616d9f5760408051808201909152601881527f2d2d756e73616665536b697053746f72616765436865636b000000000000000060208201528282616d7a816184b8565b935060ff1681518110616d8f57616d8f61834b565b6020026020010181905250616e05565b8415616e055760408051808201909152601281527f2d2d726571756972655265666572656e6365000000000000000000000000000060208201528282616de4816184b8565b935060ff1681518110616df957616df961834b565b60200260200101819052505b60408601515115616ea15760408051808201909152600d81527f2d2d756e73616665416c6c6f770000000000000000000000000000000000000060208201528282616e4f816184b8565b935060ff1681518110616e6457616e6461834b565b60200260200101819052508560400151828280616e80906184b8565b935060ff1681518110616e9557616e9561834b565b60200260200101819052505b856060015115616f0b5760408051808201909152601481527f2d2d756e73616665416c6c6f7752656e616d657300000000000000000000000060208201528282616eea816184b8565b935060ff1681518110616eff57616eff61834b565b60200260200101819052505b60008160ff1667ffffffffffffffff811115616f2957616f29617da7565b604051908082528060200260200182016040528015616f5c57816020015b6060815260200190600190039081616f475790505b50905060005b8260ff168160ff161015616fb557838160ff1681518110616f8557616f8561834b565b6020026020010151828260ff1681518110616fa257616fa261834b565b6020908102919091010152600101616f62565b50979650505050505050565b6040805180820190915260008082526020820152815183511015616fe657508161367c565b81518351602085015160009291616ffc91617bf2565b6170069190617cb5565b60208401519091506001908214617027575082516020840151819020908220145b80156170425783518551869061703e908390617cb5565b9052505b50929392505050565b600080826000015161706f8560000151866020015186600001518760200151617391565b6170799190617bf2565b90505b8351602085015161708d9190617bf2565b81116169b6578161709d81618c68565b92505082600001516170d48560200151836170b89190617cb5565b86516170c49190617cb5565b8386600001518760200151617391565b6170de9190617bf2565b905061707c565b606060006170f3848461704b565b6170fe906001617bf2565b67ffffffffffffffff81111561711657617116617da7565b60405190808252806020026020018201604052801561714957816020015b60608152602001906001900390816171345790505b50905060005b81518110156153be576171656155e08686616997565b8282815181106171775761717761834b565b602090810291909101015260010161714f565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f01000000000000000083106171d3577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef810000000083106171ff576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc10000831061721d57662386f26fc10000830492506010015b6305f5e1008310617235576305f5e100830492506008015b612710831061724957612710830492506004015b6064831061725b576064830492506002015b600a831061367c5760010192915050565b60006172788383617616565b159392505050565b600080858411617387576020841161733357600084156172cb5760016172a7866020617cb5565b6172b2906008618c82565b6172bd906002618d80565b6172c79190617cb5565b1990505b83518116856172da8989617bf2565b6172e49190617cb5565b805190935082165b81811461731e578784116173065787945050505050614fef565b8361731081618d8c565b9450508284511690506172ec565b6173288785617bf2565b945050505050614fef565b8383206173408588617cb5565b61734a9087617bf2565b91505b85821061738557848220808203617372576173688684617bf2565b9350505050614fef565b61737d600184617cb5565b92505061734d565b505b5092949350505050565b6000838186851161749c576020851161744b57600085156173dd5760016173b9876020617cb5565b6173c4906008618c82565b6173cf906002618d80565b6173d99190617cb5565b1990505b845181166000876173ee8b8b617bf2565b6173f89190617cb5565b855190915083165b82811461743d57818610617425576174188b8b617bf2565b9650505050505050614fef565b8561742f81618c68565b965050838651169050617400565b859650505050505050614fef565b508383206000905b61745d8689617cb5565b821161749a578583208082036174795783945050505050614fef565b617484600185617bf2565b935050818061749290618c68565b925050617453565b505b6174a68787617bf2565b979650505050505050565b604080518082019091526000808252602082015260006174e38560000151866020015186600001518760200151617391565b6020808701805191860191909152519091506174ff9082617cb5565b8352845160208601516175129190617bf2565b81036175215760008552617553565b8351835161752f9190617bf2565b8551869061753e908390617cb5565b905250835161754d9082617bf2565b60208601525b50909392505050565b602081106175945781518352617573602084617bf2565b9250617580602083617bf2565b915061758d602082617cb5565b905061755c565b60001981156175c35760016175aa836020617cb5565b6175b690610100618d80565b6175c09190617cb5565b90505b9151835183169219169190911790915250565b606060006175e48484613ac2565b80516020808301516040519394506175fe93909101618da3565b60405160208183030381529060405291505092915050565b8151815160009190811115617629575081515b6020808501519084015160005b838110156176e257825182518082146176b257600019602087101561769157600184617663896020617cb5565b61766d9190617bf2565b617678906008618c82565b617683906002618d80565b61768d9190617cb5565b1990505b81811683821681810391146176af57975061367c9650505050505050565b50505b6176bd602086617bf2565b94506176ca602085617bf2565b935050506020816176db9190617bf2565b9050617636565b50845186516141709190618dfb565b610c9f80618e1c83390190565b6112a680619abb83390190565b6116fe8061ad6183390190565b61155a8061c45f83390190565b6040518060e0016040528060608152602001606081526020016060815260200160001515815260200160001515815260200160001515815260200161776861776d565b905290565b604051806101000160405280600015158152602001600015158152602001606081526020016000801916815260200160608152602001606081526020016000151581526020016177686040518060800160405280600081526020016000815260200160008152602001600081525090565b602080825282518282018190526000918401906040840190835b8181101561781f5783516001600160a01b03168352602093840193909201916001016177f8565b509095945050505050565b60005b8381101561784557818101518382015260200161782d565b50506000910152565b6000815180845261786681602086016020860161782a565b601f01601f19169290920160200192915050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015617976577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452815180516001600160a01b03168652602090810151604082880181905281519088018190529101906060600582901b88018101919088019060005b8181101561795c577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa08a850301835261794684865161784e565b602095860195909450929092019160010161790c565b5091975050506020948501949290920191506001016178a2565b50929695505050505050565b600081518084526020840193506020830160005b828110156179d65781517fffffffff0000000000000000000000000000000000000000000000000000000016865260209586019590910190600101617996565b5093949350505050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015617976577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08786030184528151805160408752617a4c604088018261784e565b9050602082015191508681036020880152617a678183617982565b965050506020938401939190910190600101617a08565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015617976577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452617ae085835161784e565b94506020938401939190910190600101617aa6565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015617976577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc087860301845281516001600160a01b0381511686526020810151905060406020870152617b766040870182617982565b9550506020938401939190910190600101617b1d565b6001600160a01b03851681528360208201526001600160a01b0383166040820152608060608201526000614170608083018461784e565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8082018082111561367c5761367c617bc3565b600181811c90821680617c1957607f821691505b6020821081036158bb577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060208284031215617c6457600080fd5b5051919050565b600060208284031215617c7d57600080fd5b815180151581146136f657600080fd5b8381526001600160a01b03831660208201526060604082015260006158a1606083018461784e565b8181038181111561367c5761367c617bc3565b6001600160a01b0383168152604060208201526000614fef604083018461784e565b6020815260006136f6602083018461784e565b7f4661696c656420746f206465706c6f7920636f6e747261637420000000000000815260008351617d3581601a85016020880161782a565b7f3a20000000000000000000000000000000000000000000000000000000000000601a918401918201528351617d7281601c84016020880161782a565b01601c01949350505050565b600060208284031215617d9057600080fd5b81516001600160a01b03811681146136f657600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040516060810167ffffffffffffffff81118282101715617df957617df9617da7565b60405290565b60008067ffffffffffffffff841115617e1a57617e1a617da7565b50604051601f19601f85018116603f0116810181811067ffffffffffffffff82111715617e4957617e49617da7565b604052838152905080828401851015617e6157600080fd5b6153be84602083018561782a565b600082601f830112617e8057600080fd5b6136f683835160208501617dff565b600060208284031215617ea157600080fd5b815167ffffffffffffffff811115617eb857600080fd5b61367884828501617e6f565b60008351617ed681846020880161782a565b835190830190617eea81836020880161782a565b01949350505050565b7f4661696c656420746f206465706c6f7920636f6e747261637420000000000000815260008351617f2b81601a85016020880161782a565b7f207573696e6720636f6e7374727563746f722064617461202200000000000000601a918401918201528351617f6881603384016020880161782a565b7f220000000000000000000000000000000000000000000000000000000000000060339290910191820152603401949350505050565b60408152600b60408201527f464f554e4452595f4f555400000000000000000000000000000000000000000060608201526080602082015260006136f6608083018461784e565b600060208284031215617ff757600080fd5b815167ffffffffffffffff81111561800e57600080fd5b8201601f8101841361801f57600080fd5b61367884825160208401617dff565b60008551618040818460208a0161782a565b7f2f00000000000000000000000000000000000000000000000000000000000000908301908152855161807a816001840160208a0161782a565b7f2f000000000000000000000000000000000000000000000000000000000000006001929091019182015284516180b881600284016020890161782a565b6001818301019150507f2f00000000000000000000000000000000000000000000000000000000000000600182015283516180fa81600284016020880161782a565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600292909101918201526007019695505050505050565b604081526000618145604083018461784e565b8281036020840152600481527f2e6173740000000000000000000000000000000000000000000000000000000060208201526040810191505092915050565b7f436f756c64206e6f742066696e642041535420696e20617274696661637420008152600082516181bc81601f85016020870161782a565b7f2e205365742060617374203d20747275656020696e20666f756e6472792e746f601f9390910192830152507f6d6c000000000000000000000000000000000000000000000000000000000000603f820152604101919050565b604081526000618229604083018461784e565b8281036020840152601181527f2e6173742e6162736f6c7574655061746800000000000000000000000000000060208201526040810191505092915050565b60408152600061827b604083018461784e565b8281036020840152600c81527f2e6173742e6c6963656e7365000000000000000000000000000000000000000060208201526040810191505092915050565b7f2e6d657461646174612e736f75726365732e5b270000000000000000000000008152600082516182f281601485016020870161782a565b7f275d2e6b656363616b32353600000000000000000000000000000000000000006014939091019283015250602001919050565b604081526000618339604083018561784e565b82810360208401526136f2818561784e565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f22000000000000000000000000000000000000000000000000000000000000008152600082516183b281600185016020870161782a565b7f22000000000000000000000000000000000000000000000000000000000000006001939091019283015250600201919050565b600082516183f881846020870161782a565b7f2f6275696c642d696e666f000000000000000000000000000000000000000000920191825250600b01919050565b7f436f756c64206e6f742066696e64206275696c642d696e666f2066696c65207781527f697468206d61746368696e6720736f7572636520636f6465206861736820666f60208201527f7220636f6e7472616374200000000000000000000000000000000000000000006040820152600082516184ab81604b85016020870161782a565b91909101604b0192915050565b600060ff821660ff81036184ce576184ce617bc3565b60010192915050565b7f406f70656e7a657070656c696e2f646566656e6465722d6465706c6f792d636c81527f69656e742d636c6940000000000000000000000000000000000000000000000060208201526000825161853581602985016020870161782a565b9190910160290192915050565b60408152601660408201527f4f50454e5a455050454c494e5f424153485f504154480000000000000000000060608201526080602082015260006136f6608083018461784e565b60006020828403121561859b57600080fd5b815167ffffffffffffffff8111156185b257600080fd5b8201606081850312156185c457600080fd5b6185cc617dd6565b81518060030b81146185dd57600080fd5b8152602082015167ffffffffffffffff8111156185f957600080fd5b61860586828501617e6f565b602083015250604082015167ffffffffffffffff81111561862557600080fd5b61863186828501617e6f565b604083015250949350505050565b7f4661696c656420746f2072756e206261736820636f6d6d616e6420776974682081527f220000000000000000000000000000000000000000000000000000000000000060208201526000825161869d81602185016020870161782a565b7f222e20496620796f7520617265207573696e672057696e646f77732c2073657460219390910192830152507f20746865204f50454e5a455050454c494e5f424153485f5041544820656e766960418201527f726f6e6d656e74207661726961626c6520746f207468652066756c6c7920717560618201527f616c69666965642070617468206f66207468652062617368206578656375746160818201527f626c652e20466f72206578616d706c652c20696620796f75206172652075736960a18201527f6e672047697420666f722057696e646f77732c206164642074686520666f6c6c60c18201527f6f77696e67206c696e6520696e20746865202e656e762066696c65206f66207960e18201527f6f75722070726f6a65637420287573696e6720666f727761726420736c6173686101018201527f6573293a0a4f50454e5a455050454c494e5f424153485f504154483d22433a2f6101218201527f50726f6772616d2046696c65732f4769742f62696e2f6261736822000000000061014182015261015c01919050565b7f4661696c656420746f2066696e64206c696e652077697468207072656669782081527f270000000000000000000000000000000000000000000000000000000000000060208201526000835161888981602185016020880161782a565b7f2720696e206f75747075743a200000000000000000000000000000000000000060219184019182015283516188c681602e84016020880161782a565b01602e01949350505050565b7f4661696c656420746f2072756e2075706772616465207361666574792076616c81527f69646174696f6e3a20000000000000000000000000000000000000000000000060208201526000825161853581602985016020870161782a565b7f55706772616465207361666574792076616c69646174696f6e206661696c656481527f3a0a00000000000000000000000000000000000000000000000000000000000060208201526000825161898e81602285016020870161782a565b9190910160220192915050565b7f436f6e7472616374206e616d65200000000000000000000000000000000000008152600082516189d381600e85016020870161782a565b7f206d75737420626520696e2074686520666f726d6174204d79436f6e74726163600e9390910192830152507f742e736f6c3a4d79436f6e7472616374206f72204d79436f6e74726163742e73602e8201527f6f6c206f72206f75742f4d79436f6e74726163742e736f6c2f4d79436f6e7472604e8201527f6163742e6a736f6e000000000000000000000000000000000000000000000000606e820152607601919050565b7f53504458206c6963656e7365206964656e746966696572200000000000000000815260008351618ab181601885016020880161782a565b7f20696e20000000000000000000000000000000000000000000000000000000006018918401918201528351618aee81601c84016020880161782a565b7f20646f6573206e6f74206c6f6f6b206c696b65206120737570706f7274656420601c92909101918201527f6c6963656e736520666f7220626c6f636b206578706c6f726572207665726966603c8201527f69636174696f6e2e205573652074686520606c6963656e73655479706560206f605c8201527f7074696f6e20746f20737065636966792061206c6963656e736520747970652c607c8201527f206f7220736574207468652060736b69704c6963656e73655479706560206f70609c8201527f74696f6e20746f2060747275656020746f20736b69702e00000000000000000060bc82015260d301949350505050565b60008251618bf481846020870161782a565b7f2000000000000000000000000000000000000000000000000000000000000000920191825250600101919050565b7f406f70656e7a657070656c696e2f75706772616465732d636f72654000000000815260008251618c5b81601c85016020870161782a565b91909101601c0192915050565b60006000198203618c7b57618c7b617bc3565b5060010190565b808202811582820484141761367c5761367c617bc3565b6001815b6001841115618cd457808504811115618cb857618cb8617bc3565b6001841615618cc657908102905b60019390931c928002618c9d565b935093915050565b600082618ceb5750600161367c565b81618cf85750600061367c565b8160018114618d0e5760028114618d1857618d34565b600191505061367c565b60ff841115618d2957618d29617bc3565b50506001821b61367c565b5060208310610133831016604e8410600b8410161715618d57575081810a61367c565b618d646000198484618c99565b8060001904821115618d7857618d78617bc3565b029392505050565b60006136f68383618cdc565b600081618d9b57618d9b617bc3565b506000190190565b60008351618db581846020880161782a565b7f3a000000000000000000000000000000000000000000000000000000000000009083019081528351618def81600184016020880161782a565b01600101949350505050565b81810360008312801583831316838312821617156169b6576169b6617bc356fe608060405234801561001057600080fd5b50604051610c9f380380610c9f83398101604081905261002f9161010d565b8181600361003d83826101ff565b50600461004a82826101ff565b50505050506102bd565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261007b57600080fd5b81516001600160401b0381111561009457610094610054565b604051601f8201601f19908116603f011681016001600160401b03811182821017156100c2576100c2610054565b6040528181528382016020018510156100da57600080fd5b60005b828110156100f9576020818601810151838301820152016100dd565b506000918101602001919091529392505050565b6000806040838503121561012057600080fd5b82516001600160401b0381111561013657600080fd5b6101428582860161006a565b602085015190935090506001600160401b0381111561016057600080fd5b61016c8582860161006a565b9150509250929050565b600181811c9082168061018a57607f821691505b6020821081036101aa57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156101fa57806000526020600020601f840160051c810160208510156101d75750805b601f840160051c820191505b818110156101f757600081556001016101e3565b50505b505050565b81516001600160401b0381111561021857610218610054565b61022c816102268454610176565b846101b0565b6020601f82116001811461026057600083156102485750848201515b600019600385901b1c1916600184901b1784556101f7565b600084815260208120601f198516915b828110156102905787850151825560209485019460019092019101610270565b50848210156102ae5786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b6109d3806102cc6000396000f3fe608060405234801561001057600080fd5b50600436106100be5760003560e01c806340c10f191161007657806395d89b411161005b57806395d89b4114610183578063a9059cbb1461018b578063dd62ed3e1461019e57600080fd5b806340c10f191461013857806370a082311461014d57600080fd5b806318160ddd116100a757806318160ddd1461010457806323b872dd14610116578063313ce5671461012957600080fd5b806306fdde03146100c3578063095ea7b3146100e1575b600080fd5b6100cb6101e4565b6040516100d891906107bf565b60405180910390f35b6100f46100ef366004610854565b610276565b60405190151581526020016100d8565b6002545b6040519081526020016100d8565b6100f461012436600461087e565b610290565b604051601281526020016100d8565b61014b610146366004610854565b6102b4565b005b61010861015b3660046108bb565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6100cb6102c2565b6100f4610199366004610854565b6102d1565b6101086101ac3660046108dd565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6060600380546101f390610910565b80601f016020809104026020016040519081016040528092919081815260200182805461021f90610910565b801561026c5780601f106102415761010080835404028352916020019161026c565b820191906000526020600020905b81548152906001019060200180831161024f57829003601f168201915b5050505050905090565b6000336102848185856102df565b60019150505b92915050565b60003361029e8582856102f1565b6102a98585856103c5565b506001949350505050565b6102be8282610470565b5050565b6060600480546101f390610910565b6000336102848185856103c5565b6102ec83838360016104cc565b505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146103bf57818110156103b0576040517ffb8f41b200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416600482015260248101829052604481018390526064015b60405180910390fd5b6103bf848484840360006104cc565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8316610415576040517f96c6fd1e000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff8216610465576040517fec442f05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b6102ec838383610614565b73ffffffffffffffffffffffffffffffffffffffff82166104c0576040517fec442f05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b6102be60008383610614565b73ffffffffffffffffffffffffffffffffffffffff841661051c576040517fe602df05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff831661056c576040517f94280d62000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260016020908152604080832093871683529290522082905580156103bf578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161060691815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff831661064c5780600260008282546106419190610963565b909155506106fe9050565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260208190526040902054818110156106d2576040517fe450d38c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8516600482015260248101829052604481018390526064016103a7565b73ffffffffffffffffffffffffffffffffffffffff841660009081526020819052604090209082900390555b73ffffffffffffffffffffffffffffffffffffffff821661072757600280548290039055610753565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090208054820190555b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516107b291815260200190565b60405180910390a3505050565b602081526000825180602084015260005b818110156107ed57602081860181015160408684010152016107d0565b5060006040828501015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011684010191505092915050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461084f57600080fd5b919050565b6000806040838503121561086757600080fd5b6108708361082b565b946020939093013593505050565b60008060006060848603121561089357600080fd5b61089c8461082b565b92506108aa6020850161082b565b929592945050506040919091013590565b6000602082840312156108cd57600080fd5b6108d68261082b565b9392505050565b600080604083850312156108f057600080fd5b6108f98361082b565b91506109076020840161082b565b90509250929050565b600181811c9082168061092457607f821691505b60208210810361095d577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b8082018082111561028a577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea26469706673582212207e804ca539d49155d2b6bc19268ce22f9f857027c75247d69fb0d56a089c93d464736f6c634300081a0033608060405234801561001057600080fd5b506040516112a63803806112a683398101604081905261002f91610110565b604051806040016040528060048152602001635a65746160e01b815250604051806040016040528060048152602001635a45544160e01b815250816003908161007891906101e2565b50600461008582826101e2565b5050506001600160a01b03821615806100a557506001600160a01b038116155b156100c35760405163e6c4247b60e01b815260040160405180910390fd5b600680546001600160a01b039384166001600160a01b031991821617909155600780549290931691161790556102a0565b80516001600160a01b038116811461010b57600080fd5b919050565b6000806040838503121561012357600080fd5b61012c836100f4565b915061013a602084016100f4565b90509250929050565b634e487b7160e01b600052604160045260246000fd5b600181811c9082168061016d57607f821691505b60208210810361018d57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156101dd57806000526020600020601f840160051c810160208510156101ba5750805b601f840160051c820191505b818110156101da57600081556001016101c6565b50505b505050565b81516001600160401b038111156101fb576101fb610143565b61020f816102098454610159565b84610193565b6020601f821160018114610243576000831561022b5750848201515b600019600385901b1c1916600184901b1784556101da565b600084815260208120601f198516915b828110156102735787850151825560209485019460019092019101610253565b50848210156102915786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b610ff7806102af6000396000f3fe608060405234801561001057600080fd5b506004361061011b5760003560e01c806342966c68116100b257806379cc679011610081578063a9059cbb11610066578063a9059cbb1461028e578063bff9662a146102a1578063dd62ed3e146102c157600080fd5b806379cc67901461027357806395d89b411461028657600080fd5b806342966c68146102025780635b1125911461021557806370a0823114610235578063779e3b631461026b57600080fd5b80631e458bee116100ee5780631e458bee1461018857806323b872dd1461019b578063313ce567146101ae578063328a01d0146101bd57600080fd5b806306fdde0314610120578063095ea7b31461013e57806315d57fd41461016157806318160ddd14610176575b600080fd5b610128610307565b6040516101359190610d97565b60405180910390f35b61015161014c366004610e2c565b610399565b6040519015158152602001610135565b61017461016f366004610e56565b6103b3565b005b6002545b604051908152602001610135565b610174610196366004610e89565b61057e565b6101516101a9366004610ebc565b610631565b60405160128152602001610135565b6007546101dd9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610135565b610174610210366004610ef9565b610655565b6006546101dd9073ffffffffffffffffffffffffffffffffffffffff1681565b61017a610243366004610f12565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b610174610662565b610174610281366004610e2c565b610786565b610128610837565b61015161029c366004610e2c565b610846565b6005546101dd9073ffffffffffffffffffffffffffffffffffffffff1681565b61017a6102cf366004610e56565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b60606003805461031690610f34565b80601f016020809104026020016040519081016040528092919081815260200182805461034290610f34565b801561038f5780601f106103645761010080835404028352916020019161038f565b820191906000526020600020905b81548152906001019060200180831161037257829003601f168201915b5050505050905090565b6000336103a7818585610854565b60019150505b92915050565b60075473ffffffffffffffffffffffffffffffffffffffff1633148015906103f3575060065473ffffffffffffffffffffffffffffffffffffffff163314155b15610431576040517fcdfcef970000000000000000000000000000000000000000000000000000000081523360048201526024015b60405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff82161580610468575073ffffffffffffffffffffffffffffffffffffffff8116155b1561049f576040517fe6c4247b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6006805473ffffffffffffffffffffffffffffffffffffffff8481167fffffffffffffffffffffffff0000000000000000000000000000000000000000928316811790935560058054918516919092161790556040805133815260208101929092527fe79965b5c67dcfb2cf5fe152715e4a7256cee62a3d5dd8484fd8a8539eb8beff910160405180910390a16040805133815273ffffffffffffffffffffffffffffffffffffffff831660208201527f1b9352454524a57a51f24f67dc66d898f616922cd1f7a12d73570ece12b1975c910160405180910390a15050565b60055473ffffffffffffffffffffffffffffffffffffffff1633146105d1576040517f3fe32fba000000000000000000000000000000000000000000000000000000008152336004820152602401610428565b6105db8383610866565b808373ffffffffffffffffffffffffffffffffffffffff167fc263b302aec62d29105026245f19e16f8e0137066ccd4a8bd941f716bd4096bb8460405161062491815260200190565b60405180910390a3505050565b60003361063f8582856108c6565b61064a858585610995565b506001949350505050565b61065f3382610a40565b50565b60075473ffffffffffffffffffffffffffffffffffffffff1633146106b5576040517fe700765e000000000000000000000000000000000000000000000000000000008152336004820152602401610428565b60065473ffffffffffffffffffffffffffffffffffffffff16610704576040517fe6c4247b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600654600780547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff90921691821790556040805133815260208101929092527f5104c9abdc7d111c2aeb4ce890ac70274a4be2ee83f46a62551be5e6ebc82dd0910160405180910390a1565b60055473ffffffffffffffffffffffffffffffffffffffff1633146107d9576040517f3fe32fba000000000000000000000000000000000000000000000000000000008152336004820152602401610428565b6107e38282610a9c565b8173ffffffffffffffffffffffffffffffffffffffff167f919f7e2092ffcc9d09f599be18d8152860b0c054df788a33bc549cdd9d0f15b18260405161082b91815260200190565b60405180910390a25050565b60606004805461031690610f34565b6000336103a7818585610995565b6108618383836001610ab1565b505050565b73ffffffffffffffffffffffffffffffffffffffff82166108b6576040517fec442f0500000000000000000000000000000000000000000000000000000000815260006004820152602401610428565b6108c260008383610bf9565b5050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811461098f5781811015610980576040517ffb8f41b200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff841660048201526024810182905260448101839052606401610428565b61098f84848484036000610ab1565b50505050565b73ffffffffffffffffffffffffffffffffffffffff83166109e5576040517f96c6fd1e00000000000000000000000000000000000000000000000000000000815260006004820152602401610428565b73ffffffffffffffffffffffffffffffffffffffff8216610a35576040517fec442f0500000000000000000000000000000000000000000000000000000000815260006004820152602401610428565b610861838383610bf9565b73ffffffffffffffffffffffffffffffffffffffff8216610a90576040517f96c6fd1e00000000000000000000000000000000000000000000000000000000815260006004820152602401610428565b6108c282600083610bf9565b610aa78233836108c6565b6108c28282610a40565b73ffffffffffffffffffffffffffffffffffffffff8416610b01576040517fe602df0500000000000000000000000000000000000000000000000000000000815260006004820152602401610428565b73ffffffffffffffffffffffffffffffffffffffff8316610b51576040517f94280d6200000000000000000000000000000000000000000000000000000000815260006004820152602401610428565b73ffffffffffffffffffffffffffffffffffffffff8085166000908152600160209081526040808320938716835292905220829055801561098f578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051610beb91815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff8316610c31578060026000828254610c269190610f87565b90915550610ce39050565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205481811015610cb7576040517fe450d38c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff851660048201526024810182905260448101839052606401610428565b73ffffffffffffffffffffffffffffffffffffffff841660009081526020819052604090209082900390555b73ffffffffffffffffffffffffffffffffffffffff8216610d0c57600280548290039055610d38565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090208054820190555b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161062491815260200190565b602081526000825180602084015260005b81811015610dc55760208186018101516040868401015201610da8565b5060006040828501015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011684010191505092915050565b803573ffffffffffffffffffffffffffffffffffffffff81168114610e2757600080fd5b919050565b60008060408385031215610e3f57600080fd5b610e4883610e03565b946020939093013593505050565b60008060408385031215610e6957600080fd5b610e7283610e03565b9150610e8060208401610e03565b90509250929050565b600080600060608486031215610e9e57600080fd5b610ea784610e03565b95602085013595506040909401359392505050565b600080600060608486031215610ed157600080fd5b610eda84610e03565b9250610ee860208501610e03565b929592945050506040919091013590565b600060208284031215610f0b57600080fd5b5035919050565b600060208284031215610f2457600080fd5b610f2d82610e03565b9392505050565b600181811c90821680610f4857607f821691505b602082108103610f81577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b808201808211156103ad577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea2646970667358221220085f01204b33dc17013c78c74fbca32a3da2c0b384ce7c8878c889551af28c6164736f6c634300081a003360a060405234801561001057600080fd5b506040516116fe3803806116fe83398101604081905261002f916101e5565b60016000556002805460ff191690556001600160a01b038316158061005b57506001600160a01b038216155b8061006d57506001600160a01b038116155b1561008b5760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b0383166080526100a3600082610134565b506100ce7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a82610134565b506100f97f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e483610134565b506101126000805160206116de83398151915282610134565b5061012b6000805160206116de83398151915283610134565b50505050610228565b60008281526001602090815260408083206001600160a01b038516845290915281205460ff166101bf5760008381526001602081815260408084206001600160a01b0387168086529252808420805460ff19169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45060016101c3565b5060005b92915050565b80516001600160a01b03811681146101e057600080fd5b919050565b6000806000606084860312156101fa57600080fd5b610203846101c9565b9250610211602085016101c9565b915061021f604085016101c9565b90509250925092565b60805161147f61025f6000396000818161019e0152818161050001528181610562015281816108f70152610959015261147f6000f3fe608060405234801561001057600080fd5b506004361061016c5760003560e01c806385f438c1116100cd578063c8a0236211610081578063d936547e11610066578063d936547e14610355578063d9caed1214610378578063e63ab1e91461038b57600080fd5b8063c8a023621461032f578063d547741f1461034257600080fd5b80639a590427116100b25780639a590427146103015780639b19251a14610314578063a217fddf1461032757600080fd5b806385f438c11461029457806391d14854146102bb57600080fd5b806336568abe11610124578063570618e111610109578063570618e11461025a5780635c975abb146102815780638456cb591461028c57600080fd5b806336568abe1461023f5780633f4ba83a1461025257600080fd5b806321fc65f21161015557806321fc65f2146101e5578063248a9ca3146101fa5780632f2ff15d1461022c57600080fd5b806301ffc9a714610171578063116191b614610199575b600080fd5b61018461017f36600461118a565b6103b2565b60405190151581526020015b60405180910390f35b6101c07f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610190565b6101f86101f33660046111f5565b61044b565b005b61021e610208366004611292565b6000908152600160208190526040909120015490565b604051908152602001610190565b6101f861023a3660046112ab565b61064c565b6101f861024d3660046112ab565b610678565b6101f86106d6565b61021e7f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a81565b60025460ff16610184565b6101f861070b565b61021e7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b6101846102c93660046112ab565b600091825260016020908152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b6101f861030f3660046112d7565b61073d565b6101f86103223660046112d7565b6107be565b61021e600081565b6101f861033d3660046111f5565b610842565b6101f86103503660046112ab565b610a29565b6101846103633660046112d7565b60036020526000908152604090205460ff1681565b6101f86103863660046112f2565b610a4f565b61021e7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061044557507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b610453610b7b565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461047d81610bbe565b610485610bc8565b73ffffffffffffffffffffffffffffffffffffffff861660009081526003602052604090205460ff166104e4576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61052573ffffffffffffffffffffffffffffffffffffffff87167f000000000000000000000000000000000000000000000000000000000000000086610c07565b6040517f5131ab5900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690635131ab599061059f9089908990899089908990600401611378565b600060405180830381600087803b1580156105b957600080fd5b505af11580156105cd573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167f85b5be9cf454e05e0bddf49315178102227c312078eefa3c00294fb4d912ae4e868686604051610632939291906113d5565b60405180910390a3506106456001600055565b5050505050565b6000828152600160208190526040909120015461066881610bbe565b6106728383610c94565b50505050565b73ffffffffffffffffffffffffffffffffffffffff811633146106c7576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6106d18282610d41565b505050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61070081610bbe565b610708610de2565b50565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61073581610bbe565b610708610e41565b7f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a61076781610bbe565b73ffffffffffffffffffffffffffffffffffffffff8216600081815260036020526040808220805460ff19169055517f51085ddf9ebdded84b76e829eb58c4078e4b5bdf97d9a94723f336039da467919190a25050565b7f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a6107e881610bbe565b73ffffffffffffffffffffffffffffffffffffffff8216600081815260036020526040808220805460ff19166001179055517faab7954e9d246b167ef88aeddad35209ca2489d95a8aeb59e288d9b19fae5a549190a25050565b61084a610b7b565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461087481610bbe565b61087c610bc8565b73ffffffffffffffffffffffffffffffffffffffff861660009081526003602052604090205460ff166108db576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61091c73ffffffffffffffffffffffffffffffffffffffff87167f000000000000000000000000000000000000000000000000000000000000000086610c07565b6040517fb8969bd400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063b8969bd4906109969089908990899089908990600401611378565b600060405180830381600087803b1580156109b057600080fd5b505af11580156109c4573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fb9d4efa96044e5f5e03e696fa9ae2ff66911cc27e8a637c3627c75bc5b2241c8868686604051610632939291906113d5565b60008281526001602081905260409091200154610a4581610bbe565b6106728383610d41565b610a57610b7b565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e4610a8181610bbe565b610a89610bc8565b73ffffffffffffffffffffffffffffffffffffffff841660009081526003602052604090205460ff16610ae8576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610b0973ffffffffffffffffffffffffffffffffffffffff85168484610c07565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f9b1bfa7fa9ee420a16e124f794c35ac9f90472acc99140eb2f6447c714cad8eb84604051610b6891815260200190565b60405180910390a3506106d16001600055565b600260005403610bb7576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b6107088133610e7e565b60025460ff1615610c05576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6040805173ffffffffffffffffffffffffffffffffffffffff8416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb000000000000000000000000000000000000000000000000000000001790526106d1908490610f0f565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff16610d3957600083815260016020818152604080842073ffffffffffffffffffffffffffffffffffffffff87168086529252808420805460ff19169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a4506001610445565b506000610445565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff1615610d3957600083815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff86168085529252808320805460ff1916905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a4506001610445565b610dea610fa5565b6002805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b610e49610bc8565b6002805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258610e173390565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16610f0b576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82166004820152602481018390526044015b60405180910390fd5b5050565b6000610f3173ffffffffffffffffffffffffffffffffffffffff841683610fe1565b90508051600014158015610f56575080806020019051810190610f5491906113f8565b155b156106d1576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84166004820152602401610f02565b60025460ff16610c05576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6060610fef83836000610ff6565b9392505050565b606081471015611034576040517fcd786059000000000000000000000000000000000000000000000000000000008152306004820152602401610f02565b6000808573ffffffffffffffffffffffffffffffffffffffff16848660405161105d919061141a565b60006040518083038185875af1925050503d806000811461109a576040519150601f19603f3d011682016040523d82523d6000602084013e61109f565b606091505b50915091506110af8683836110b9565b9695505050505050565b6060826110ce576110c982611148565b610fef565b81511580156110f2575073ffffffffffffffffffffffffffffffffffffffff84163b155b15611141576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85166004820152602401610f02565b5080610fef565b8051156111585780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006020828403121561119c57600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610fef57600080fd5b803573ffffffffffffffffffffffffffffffffffffffff811681146111f057600080fd5b919050565b60008060008060006080868803121561120d57600080fd5b611216866111cc565b9450611224602087016111cc565b935060408601359250606086013567ffffffffffffffff81111561124757600080fd5b8601601f8101881361125857600080fd5b803567ffffffffffffffff81111561126f57600080fd5b88602082840101111561128157600080fd5b959894975092955050506020019190565b6000602082840312156112a457600080fd5b5035919050565b600080604083850312156112be57600080fd5b823591506112ce602084016111cc565b90509250929050565b6000602082840312156112e957600080fd5b610fef826111cc565b60008060006060848603121561130757600080fd5b611310846111cc565b925061131e602085016111cc565b929592945050506040919091013590565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff8616815273ffffffffffffffffffffffffffffffffffffffff851660208201528360408201526080606082015260006113ca60808301848661132f565b979650505050505050565b8381526040602082015260006113ef60408301848661132f565b95945050505050565b60006020828403121561140a57600080fd5b81518015158114610fef57600080fd5b6000825160005b8181101561143b5760208186018101518583015201611421565b50600092019182525091905056fea2646970667358221220dc54ce548a1f0bf8ba5e86cc53c6d822e55eee543451395733c659359bac8dd164736f6c634300081a00338619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a60c060405260001960035534801561001657600080fd5b5060405161155a38038061155a83398101604081905261003591610220565b60016000819055805460ff19169055838383836001600160a01b038416158061006557506001600160a01b038316155b8061007757506001600160a01b038216155b8061008957506001600160a01b038116155b156100a75760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b03808516608052831660a0526100c5600082610154565b506100f07f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e483610154565b5061011b7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb83610154565b506101467f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a82610154565b505050505050505050610274565b60008281526002602090815260408083206001600160a01b038516845290915281205460ff166101fa5760008381526002602090815260408083206001600160a01b03861684529091529020805460ff191660011790556101b23390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45060016101fe565b5060005b92915050565b80516001600160a01b038116811461021b57600080fd5b919050565b6000806000806080858703121561023657600080fd5b61023f85610204565b935061024d60208601610204565b925061025b60408601610204565b915061026960608601610204565b905092959194509250565b60805160a0516112826102d86000396000818161021d01528181610531015281816108240152818161097b01528181610ad00152610bf20152600081816101d1015281816104a1015281816105040152818161079401526107f701526112826000f3fe608060405234801561001057600080fd5b50600436106101775760003560e01c80635e3e9fef116100d857806391d148541161008c578063d547741f11610066578063d547741f14610386578063d5abeb0114610399578063e63ab1e9146103a257600080fd5b806391d1485414610311578063a217fddf14610357578063a783c7891461035f57600080fd5b8063743e0c9b116100bd578063743e0c9b146102cf5780638456cb59146102e257806385f438c1146102ea57600080fd5b80635e3e9fef146102a95780636f8b44b0146102bc57600080fd5b8063248a9ca31161012f57806336568abe1161011457806336568abe146102835780633f4ba83a146102965780635c975abb1461029e57600080fd5b8063248a9ca31461023f5780632f2ff15d1461027057600080fd5b8063106e629011610160578063106e6290146101b9578063116191b6146101cc57806321e093b11461021857600080fd5b806301ffc9a71461017c57806302d5c899146101a4575b600080fd5b61018f61018a366004610fb4565b6103c9565b60405190151581526020015b60405180910390f35b6101b76101b2366004611026565b610462565b005b6101b76101c73660046110b8565b6105f7565b6101f37f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161019b565b6101f37f000000000000000000000000000000000000000000000000000000000000000081565b61026261024d3660046110eb565b60009081526002602052604090206001015490565b60405190815260200161019b565b6101b761027e366004611104565b61069c565b6101b7610291366004611104565b6106c7565b6101b7610720565b60015460ff1661018f565b6101b76102b7366004611026565b610755565b6101b76102ca3660046110eb565b6108d0565b6101b76102dd3660046110eb565b61093e565b6101b76109e8565b6102627f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b61018f61031f366004611104565b600091825260026020908152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b610262600081565b6102627f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb81565b6101b7610394366004611104565b610a1a565b61026260035481565b6102627f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061045c57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b61046a610a3f565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461049481610a82565b61049c610a8c565b6104c77f00000000000000000000000000000000000000000000000000000000000000008684610acb565b6040517fb8969bd400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063b8969bd490610561907f0000000000000000000000000000000000000000000000000000000000000000908a908a908a908a90600401611179565b600060405180830381600087803b15801561057b57600080fd5b505af115801561058f573d6000803e3d6000fd5b505050508573ffffffffffffffffffffffffffffffffffffffff167fba96f26bdda53eb8c8ba39045dfb4ff39753fbc7a6edcf250a88e75e78d102fe8686866040516105dd939291906111d6565b60405180910390a2506105f06001600055565b5050505050565b6105ff610a3f565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461062981610a82565b610631610a8c565b61063c848484610acb565b8373ffffffffffffffffffffffffffffffffffffffff167f884edad9ce6fa2440d8a54cc123490eb96d2768479d49ff9c7366125a94243648460405161068491815260200190565b60405180910390a2506106976001600055565b505050565b6000828152600260205260409020600101546106b781610a82565b6106c18383610c53565b50505050565b73ffffffffffffffffffffffffffffffffffffffff81163314610716576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6106978282610d53565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61074a81610a82565b610752610e12565b50565b61075d610a3f565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461078781610a82565b61078f610a8c565b6107ba7f00000000000000000000000000000000000000000000000000000000000000008684610acb565b6040517f5131ab5900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690635131ab5990610854907f0000000000000000000000000000000000000000000000000000000000000000908a908a908a908a90600401611179565b600060405180830381600087803b15801561086e57600080fd5b505af1158015610882573d6000803e3d6000fd5b505050508573ffffffffffffffffffffffffffffffffffffffff167f7772f56296d3a5202974a45c61c9188d844ab4d6eeb18c851e4b8d5384ca6ced8686866040516105dd939291906111d6565b7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb6108fa81610a82565b610902610a8c565b60038290556040518281527f7810bd47de260c3e9ee10061cf438099dd12256c79485f12f94dbccc981e806c9060200160405180910390a15050565b610946610a8c565b6040517f79cc6790000000000000000000000000000000000000000000000000000000008152336004820152602481018290527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16906379cc679090604401600060405180830381600087803b1580156109d457600080fd5b505af11580156105f0573d6000803e3d6000fd5b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610a1281610a82565b610752610e8f565b600082815260026020526040902060010154610a3581610a82565b6106c18383610d53565b600260005403610a7b576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b6107528133610ee8565b60015460ff1615610ac9576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6003547f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b39573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b5d91906111f9565b610b679084611212565b1115610b9f576040517fc30436e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f1e458bee00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff848116600483015260248201849052604482018390527f00000000000000000000000000000000000000000000000000000000000000001690631e458bee90606401600060405180830381600087803b158015610c3657600080fd5b505af1158015610c4a573d6000803e3d6000fd5b50505050505050565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff16610d4b57600083815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff86168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055610ce93390565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a450600161045c565b50600061045c565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff1615610d4b57600083815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8616808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a450600161045c565b610e1a610f78565b600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b610e97610a8c565b600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016811790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25833610e65565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16610f74576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff821660048201526024810183905260440160405180910390fd5b5050565b60015460ff16610ac9576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060208284031215610fc657600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610ff657600080fd5b9392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461102157600080fd5b919050565b60008060008060006080868803121561103e57600080fd5b61104786610ffd565b945060208601359350604086013567ffffffffffffffff81111561106a57600080fd5b8601601f8101881361107b57600080fd5b803567ffffffffffffffff81111561109257600080fd5b8860208284010111156110a457600080fd5b959894975060200195606001359392505050565b6000806000606084860312156110cd57600080fd5b6110d684610ffd565b95602085013595506040909401359392505050565b6000602082840312156110fd57600080fd5b5035919050565b6000806040838503121561111757600080fd5b8235915061112760208401610ffd565b90509250929050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff8616815273ffffffffffffffffffffffffffffffffffffffff851660208201528360408201526080606082015260006111cb608083018486611130565b979650505050505050565b8381526040602082015260006111f0604083018486611130565b95945050505050565b60006020828403121561120b57600080fd5b5051919050565b8082018082111561045c577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea2646970667358221220de5fa55e0ca79ea2f08903481d01ea00bbbf346b9cfba44e12a2dd6f3a6f2e8a64736f6c634300081a0033a2646970667358221220a2621da9f998b0ed06762d65434142881a98c2f15b1a0217f6171c8297d85f6d64736f6c634300081a0033", + ABI: "[{\"type\":\"function\",\"name\":\"IS_TEST\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeArtifacts\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedArtifacts_\",\"type\":\"string[]\",\"internalType\":\"string[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeContracts\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedContracts_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeSelectors\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedSelectors_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzSelector[]\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"selectors\",\"type\":\"bytes4[]\",\"internalType\":\"bytes4[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeSenders\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedSenders_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"failed\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"setUp\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"targetArtifactSelectors\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedArtifactSelectors_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzArtifactSelector[]\",\"components\":[{\"name\":\"artifact\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"selectors\",\"type\":\"bytes4[]\",\"internalType\":\"bytes4[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetArtifacts\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedArtifacts_\",\"type\":\"string[]\",\"internalType\":\"string[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetContracts\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedContracts_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetInterfaces\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedInterfaces_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzInterface[]\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"artifacts\",\"type\":\"string[]\",\"internalType\":\"string[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetSelectors\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedSelectors_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzSelector[]\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"selectors\",\"type\":\"bytes4[]\",\"internalType\":\"bytes4[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetSenders\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedSenders_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"testCallWithPayload\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testCallWithPayloadFailsIfDestinationIsZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositERC20ToCustody\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositERC20ToCustodyFailsIfTokenIsNotWhitelisted\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositERC20ToCustodyWithPayload\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositERC20ToCustodyWithPayloadFailsIfTokenIsNotWhitelisted\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositEthToTss\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositEthToTssWithPayload\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositZetaToConnector\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testFailDepositERC20ToCustodyIfAmountIs0\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testFailDepositERC20ToCustodyIfReceiverIsZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testFailDepositERC20ToCustodyWithPayloadIfAmountIs0\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testFailDepositERC20ToCustodyWithPayloadIfReceiverIsZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testFailDepositEthToTssIfAmountIs0\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testFailDepositEthToTssIfReceiverIsZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testFailDepositEthToTssWithPayloadIfAmountIs0\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testFailDepositEthToTssWithPayloadIfReceiverIsZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"event\",\"name\":\"Call\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"receiver\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Deposit\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"receiver\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"asset\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Executed\",\"inputs\":[{\"name\":\"destination\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ExecutedWithERC20\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedERC20\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"token\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"destination\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedNoParams\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedNonPayable\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"strs\",\"type\":\"string[]\",\"indexed\":false,\"internalType\":\"string[]\"},{\"name\":\"nums\",\"type\":\"uint256[]\",\"indexed\":false,\"internalType\":\"uint256[]\"},{\"name\":\"flag\",\"type\":\"bool\",\"indexed\":false,\"internalType\":\"bool\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedPayable\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"str\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"num\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"flag\",\"type\":\"bool\",\"indexed\":false,\"internalType\":\"bool\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedRevert\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Reverted\",\"inputs\":[{\"name\":\"destination\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RevertedWithERC20\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log\",\"inputs\":[{\"name\":\"\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_address\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_array\",\"inputs\":[{\"name\":\"val\",\"type\":\"uint256[]\",\"indexed\":false,\"internalType\":\"uint256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_array\",\"inputs\":[{\"name\":\"val\",\"type\":\"int256[]\",\"indexed\":false,\"internalType\":\"int256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_array\",\"inputs\":[{\"name\":\"val\",\"type\":\"address[]\",\"indexed\":false,\"internalType\":\"address[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_bytes\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_bytes32\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_int\",\"inputs\":[{\"name\":\"\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_address\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_array\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"uint256[]\",\"indexed\":false,\"internalType\":\"uint256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_array\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"int256[]\",\"indexed\":false,\"internalType\":\"int256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_array\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"address[]\",\"indexed\":false,\"internalType\":\"address[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_bytes\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_bytes32\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_decimal_int\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"},{\"name\":\"decimals\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_decimal_uint\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"decimals\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_int\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_string\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_uint\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_string\",\"inputs\":[{\"name\":\"\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_uint\",\"inputs\":[{\"name\":\"\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"logs\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"ApprovalFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ConnectorInitialized\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"CustodyInitialized\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"DepositFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ExecutionFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientERC20Amount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientETHAmount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NotWhitelistedInCustody\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZeroAddress\",\"inputs\":[]}]", + Bin: "0x6080604052600c8054600160ff199182168117909255601f80549091169091179055620f4240602855348015603357600080fd5b5061db63806100436000396000f3fe608060405234801561001057600080fd5b50600436106101da5760003560e01c8063916a17c611610104578063bb93f11e116100a2578063e306a97811610071578063e306a9781461030b578063e85c5a0714610313578063f96c02df1461031b578063fa7626d41461032357600080fd5b8063bb93f11e146102eb578063c13d738f146102f3578063d896e261146102fb578063e20c9f711461030357600080fd5b8063b0464fdc116100de578063b0464fdc146102bb578063b2849063146102c3578063b5508aa9146102cb578063ba414fa6146102d357600080fd5b8063916a17c6146102965780639fd1e597146102ab578063aa030c1c146102b357600080fd5b806330f7c04f1161017c5780636459542a1161014b5780636459542a1461025c57806366d9a9a0146102645780637478fda01461027957806385226c811461028157600080fd5b806330f7c04f1461023c5780633e5e3c23146102445780633f7286f41461024c57806351da903d1461025457600080fd5b80630a9254e4116101b85780630a9254e4146101f95780631806a9a5146102015780631ed7831c146102095780632ade38801461022757600080fd5b806305a898e2146101df57806306978ca3146101e95780630724d8e3146101f1575b600080fd5b6101e7610330565b005b6101e76104e4565b6101e76105f6565b6101e76107ad565b6101e7611138565b610211611232565b60405161021e9190617953565b60405180910390f35b61022f611294565b60405161021e91906179ef565b6101e76113d6565b610211611843565b6102116118a3565b6101e7611903565b6101e7611a8f565b61026c611e8c565b60405161021e9190617b55565b6101e761200e565b610289612117565b60405161021e9190617bf3565b61029e6121e7565b60405161021e9190617c6a565b6101e76122e2565b6101e76124fe565b61029e6126b5565b6101e76127b0565b610289612a4b565b6102db612b1b565b604051901515815260200161021e565b6101e7612bef565b6101e7612d6f565b6101e7612f1e565b610211613096565b6101e76130f6565b6101e76133c2565b6101e7613643565b601f546102db9060ff1681565b6026546040516001600160a01b03909116602482015260019060009060440160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f84fae76000000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063f28dceb390610428906004016020808252600b908201527f5a65726f41646472657373000000000000000000000000000000000000000000604082015260600190565b600060405180830381600087803b15801561044257600080fd5b505af1158015610456573d6000803e3d6000fd5b50506020546023546040517f8c6f037f0000000000000000000000000000000000000000000000000000000081526001600160a01b039283169450638c6f037f93506104ae9260009288929116908790600401617d01565b600060405180830381600087803b1580156104c857600080fd5b505af11580156104dc573d6000803e3d6000fd5b505050505050565b6040517ff28dceb300000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f496e73756666696369656e74455448416d6f756e7400000000000000000000006044820152600090737109709ecfa91a80626ff3989d68f67f5b1dd12d9063f28dceb390606401600060405180830381600087803b15801561057a57600080fd5b505af115801561058e573d6000803e3d6000fd5b50506020546026546040517ff340fa010000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201529116925063f340fa01915083906024015b6000604051808303818588803b1580156104c857600080fd5b6027546020546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039182166084820152620186a092919091163190737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b15801561069257600080fd5b505af11580156106a6573d6000803e3d6000fd5b505060265460255460408051878152600060208201819052606082840181905282015290516001600160a01b0393841695509290911692507f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a4919081900360800190a36020546026546040517ff340fa010000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015291169063f340fa019084906024016000604051808303818588803b15801561076c57600080fd5b505af1158015610780573d6000803e3d6000fd5b50506027546001600160a01b03163192506107a891506107a290508484617d67565b82613759565b505050565b602580547fffffffffffffffffffffffff00000000000000000000000000000000000000009081163017909155602680548216611234179055602780549091166156781790556040516107ff90617866565b60408082526004908201527f746573740000000000000000000000000000000000000000000000000000000060608201526080602082018190526003908201527f54544b000000000000000000000000000000000000000000000000000000000060a082015260c001604051809103906000f080158015610884573d6000803e3d6000fd5b50602380547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392831617905560275460405191169081906108cd90617873565b6001600160a01b03928316815291166020820152604001604051809103906000f080158015610900573d6000803e3d6000fd5b50602480547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039283169081178255604080518082018252600e81527f4761746577617945564d2e736f6c0000000000000000000000000000000000006020820152602754602554925190861694810194909452604484019290925290921660648201526109f1919060840160408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fc0c53b8b000000000000000000000000000000000000000000000000000000001790526137d8565b601f80547fffffffffffffffffffffff0000000000000000000000000000000000000000ff166101006001600160a01b0393841681029190911791829055602080549190920483167fffffffffffffffffffffffff00000000000000000000000000000000000000009091168117909155602754602554604051929391821692911690610a7d90617880565b6001600160a01b03938416815291831660208301529091166040820152606001604051809103906000f080158015610ab9573d6000803e3d6000fd5b50602180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039283161790556020546024546027546025546040519385169492831693918316921690610b149061788d565b6001600160a01b039485168152928416602084015290831660408301529091166060820152608001604051809103906000f080158015610b58573d6000803e3d6000fd5b50602280547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039283161790556027546040517fca669fa700000000000000000000000000000000000000000000000000000000815291166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015610bf657600080fd5b505af1158015610c0a573d6000803e3d6000fd5b5050602480546027546022546040517f15d57fd40000000000000000000000000000000000000000000000000000000081526001600160a01b039283166004820152908216938101939093521692506315d57fd49150604401600060405180830381600087803b158015610c7d57600080fd5b505af1158015610c91573d6000803e3d6000fd5b50506027546040517fc88a5e6d0000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152670de0b6b3a76400006024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c88a5e6d9150604401600060405180830381600087803b158015610d1557600080fd5b505af1158015610d29573d6000803e3d6000fd5b50506025546040517f06447d560000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506306447d569150602401600060405180830381600087803b158015610d9f57600080fd5b505af1158015610db3573d6000803e3d6000fd5b50506020546021546040517fae7a3a6f0000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201529116925063ae7a3a6f9150602401600060405180830381600087803b158015610e1957600080fd5b505af1158015610e2d573d6000803e3d6000fd5b50506020546022546040517f10188aef0000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152911692506310188aef9150602401600060405180830381600087803b158015610e9357600080fd5b505af1158015610ea7573d6000803e3d6000fd5b50506021546023546040517f9b19251a0000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015291169250639b19251a9150602401600060405180830381600087803b158015610f0d57600080fd5b505af1158015610f21573d6000803e3d6000fd5b505050507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b03166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610f8357600080fd5b505af1158015610f97573d6000803e3d6000fd5b50506023546025546028546040517f40c10f190000000000000000000000000000000000000000000000000000000081526001600160a01b0392831660048201526024810191909152911692506340c10f199150604401600060405180830381600087803b15801561100857600080fd5b505af115801561101c573d6000803e3d6000fd5b50506027546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b15801561109257600080fd5b505af11580156110a6573d6000803e3d6000fd5b50506022546025546028546040517f106e62900000000000000000000000000000000000000000000000000000000081526001600160a01b0392831660048201526024810191909152600060448201529116925063106e62909150606401600060405180830381600087803b15801561111e57600080fd5b505af1158015611132573d6000803e3d6000fd5b50505050565b6040517ff28dceb300000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f5a65726f416464726573730000000000000000000000000000000000000000006044820152600190737109709ecfa91a80626ff3989d68f67f5b1dd12d9063f28dceb390606401600060405180830381600087803b1580156111ce57600080fd5b505af11580156111e2573d6000803e3d6000fd5b50506020546040517ff340fa01000000000000000000000000000000000000000000000000000000008152600060048201526001600160a01b03909116925063f340fa01915083906024016105dd565b6060601680548060200260200160405190810160405280929190818152602001828054801561128a57602002820191906000526020600020905b81546001600160a01b0316815260019091019060200180831161126c575b5050505050905090565b6060601e805480602002602001604051908101604052809291908181526020016000905b828210156113cd57600084815260208082206040805180820182526002870290920180546001600160a01b03168352600181018054835181870281018701909452808452939591948681019491929084015b828210156113b657838290600052602060002001805461132990617d7a565b80601f016020809104026020016040519081016040528092919081815260200182805461135590617d7a565b80156113a25780601f10611377576101008083540402835291602001916113a2565b820191906000526020600020905b81548152906001019060200180831161138557829003601f168201915b50505050508152602001906001019061130a565b5050505081525050815260200190600101906112b8565b50505050905090565b6023546021546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620186a09260009216906370a0823190602401602060405180830381865afa158015611442573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114669190617dc7565b9050611473600082613759565b6026546040516001600160a01b03909116602482015260009060440160408051601f19818403018152918152602080830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f84fae76000000000000000000000000000000000000000000000000000000000179052602354905491517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b03928316600482015260248101879052929350169063095ea7b3906044016020604051808303816000875af1158015611556573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061157a9190617de0565b506020546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b15801561160957600080fd5b505af115801561161d573d6000803e3d6000fd5b50506026546025546023546040516001600160a01b03938416955091831693507f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a492611670928992909116908790617e02565b60405180910390a36020546026546023546040517f8c6f037f0000000000000000000000000000000000000000000000000000000081526001600160a01b0393841693638c6f037f936116d193908216928992909116908790600401617d01565b600060405180830381600087803b1580156116eb57600080fd5b505af11580156116ff573d6000803e3d6000fd5b50506023546021546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260009450911691506370a0823190602401602060405180830381865afa15801561176b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061178f9190617dc7565b905061179b8482613759565b6023546025546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260009291909116906370a0823190602401602060405180830381865afa158015611805573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118299190617dc7565b905061183c856028546107a29190617e2a565b5050505050565b6060601880548060200260200160405190810160405280929190818152602001828054801561128a576020028201919060005260206000209081546001600160a01b0316815260019091019060200180831161126c575050505050905090565b6060601780548060200260200160405190810160405280929190818152602001828054801561128a576020028201919060005260206000209081546001600160a01b0316815260019091019060200180831161126c575050505050905090565b6026546040516001600160a01b03909116602482015260009060440160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f84fae76000000000000000000000000000000000000000000000000000000000179052517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fd92e233d000000000000000000000000000000000000000000000000000000006004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b1580156119fd57600080fd5b505af1158015611a11573d6000803e3d6000fd5b50506020546040517f1b8b921d0000000000000000000000000000000000000000000000000000000081526001600160a01b039091169250631b8b921d9150611a61906000908590600401617e3d565b600060405180830381600087803b158015611a7b57600080fd5b505af115801561183c573d6000803e3d6000fd5b6023546021546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620186a09260009216906370a0823190602401602060405180830381865afa158015611afb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b1f9190617dc7565b9050611b2c600082613759565b6023546020546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201526024810185905291169063095ea7b3906044016020604051808303816000875af1158015611b9a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bbe9190617de0565b506020546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b158015611c4d57600080fd5b505af1158015611c61573d6000803e3d6000fd5b5050602654602554602354604080518881526001600160a01b039283166020820152606081830181905260009082015290519382169550911692507f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a4919081900360800190a36020546026546023546040517ff45346dc0000000000000000000000000000000000000000000000000000000081526001600160a01b03928316600482015260248101869052908216604482015291169063f45346dc90606401600060405180830381600087803b158015611d3b57600080fd5b505af1158015611d4f573d6000803e3d6000fd5b50506023546021546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260009450911691506370a0823190602401602060405180830381865afa158015611dbb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ddf9190617dc7565b9050611deb8382613759565b6023546025546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260009291909116906370a0823190602401602060405180830381865afa158015611e55573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e799190617dc7565b9050611132846028546107a29190617e2a565b6060601b805480602002602001604051908101604052809291908181526020016000905b828210156113cd5783829060005260206000209060020201604051806040016040529081600082018054611ee390617d7a565b80601f0160208091040260200160405190810160405280929190818152602001828054611f0f90617d7a565b8015611f5c5780601f10611f3157610100808354040283529160200191611f5c565b820191906000526020600020905b815481529060010190602001808311611f3f57829003601f168201915b5050505050815260200160018201805480602002602001604051908101604052809291908181526020018280548015611ff657602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019060040190602082600301049283019260010382029150808411611fa35790505b50505050508152505081526020019060010190611eb0565b6040517ff28dceb300000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f5a65726f416464726573730000000000000000000000000000000000000000006044820152600190737109709ecfa91a80626ff3989d68f67f5b1dd12d9063f28dceb390606401600060405180830381600087803b1580156120a457600080fd5b505af11580156120b8573d6000803e3d6000fd5b50506020546023546040517ff45346dc00000000000000000000000000000000000000000000000000000000815260006004820152602481018690526001600160a01b0391821660448201529116925063f45346dc9150606401611a61565b6060601a805480602002602001604051908101604052809291908181526020016000905b828210156113cd57838290600052602060002001805461215a90617d7a565b80601f016020809104026020016040519081016040528092919081815260200182805461218690617d7a565b80156121d35780601f106121a8576101008083540402835291602001916121d3565b820191906000526020600020905b8154815290600101906020018083116121b657829003601f168201915b50505050508152602001906001019061213b565b6060601d805480602002602001604051908101604052809291908181526020016000905b828210156113cd5760008481526020908190206040805180820182526002860290920180546001600160a01b031683526001810180548351818702810187019094528084529394919385830193928301828280156122ca57602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190600401906020826003010492830192600103820291508084116122775790505b5050505050815250508152602001906001019061220b565b6027546026546040516001600160a01b039182166024820152620186a09291909116319060009060440160408051601f19818403018152918152602080830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f84fae760000000000000000000000000000000000000000000000000000000001790525490517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b1580156123f357600080fd5b505af1158015612407573d6000803e3d6000fd5b50506026546025546040516001600160a01b039283169450911691507f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a4906124559087906000908790617e02565b60405180910390a36020546026546040517f29c59b5d0000000000000000000000000000000000000000000000000000000081526001600160a01b03928316926329c59b5d9287926124af92909116908690600401617e3d565b6000604051808303818588803b1580156124c857600080fd5b505af11580156124dc573d6000803e3d6000fd5b50506027546001600160a01b031631925061113291506107a290508585617d67565b6026546040516001600160a01b03909116602482015260009060440160408051601f19818403018152918152602080830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f84fae760000000000000000000000000000000000000000000000000000000001790525490517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b15801561260157600080fd5b505af1158015612615573d6000803e3d6000fd5b50506026546025546040516001600160a01b039283169450911691507f2a21062ee9199c2e205622999eeb7c3da73153674f36a0acd3f74fa6af67bde39061265e908590617e5f565b60405180910390a36020546026546040517f1b8b921d0000000000000000000000000000000000000000000000000000000081526001600160a01b0392831692631b8b921d92611a61929116908590600401617e3d565b6060601c805480602002602001604051908101604052809291908181526020016000905b828210156113cd5760008481526020908190206040805180820182526002860290920180546001600160a01b0316835260018101805483518187028101870190945280845293949193858301939283018282801561279857602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190600401906020826003010492830192600103820291508084116127455790505b505050505081525050815260200190600101906126d9565b6023546020546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620186a06024820181905292919091169063095ea7b3906044016020604051808303816000875af1158015612825573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128499190617de0565b506025546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156128bc57600080fd5b505af11580156128d0573d6000803e3d6000fd5b50506021546023546040517f9a5904270000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015291169250639a5904279150602401600060405180830381600087803b15801561293657600080fd5b505af115801561294a573d6000803e3d6000fd5b50506040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fac2175f1000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e091506024015b600060405180830381600087803b1580156129d457600080fd5b505af11580156129e8573d6000803e3d6000fd5b50506020546026546023546040517ff45346dc0000000000000000000000000000000000000000000000000000000081526001600160a01b0392831660048201526024810187905290821660448201529116925063f45346dc9150606401611a61565b60606019805480602002602001604051908101604052809291908181526020016000905b828210156113cd578382906000526020600020018054612a8e90617d7a565b80601f0160208091040260200160405190810160405280929190818152602001828054612aba90617d7a565b8015612b075780601f10612adc57610100808354040283529160200191612b07565b820191906000526020600020905b815481529060010190602001808311612aea57829003601f168201915b505050505081526020019060010190612a6f565b60085460009060ff1615612b33575060085460ff1690565b6040517f667f9d70000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d600482018190527f6661696c65640000000000000000000000000000000000000000000000000000602483015260009163667f9d7090604401602060405180830381865afa158015612bc4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612be89190617dc7565b1415905090565b6026546040516001600160a01b039091166024820152600090819060440160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f84fae76000000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063f28dceb390612ce69060040160208082526017908201527f496e73756666696369656e744552433230416d6f756e74000000000000000000604082015260600190565b600060405180830381600087803b158015612d0057600080fd5b505af1158015612d14573d6000803e3d6000fd5b50506020546026546023546040517f8c6f037f0000000000000000000000000000000000000000000000000000000081526001600160a01b039384169550638c6f037f94506104ae9392831692889216908790600401617d01565b6026546040516001600160a01b039091166024820152600090819060440160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f84fae76000000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063f28dceb390612e669060040160208082526015908201527f496e73756666696369656e74455448416d6f756e740000000000000000000000604082015260600190565b600060405180830381600087803b158015612e8057600080fd5b505af1158015612e94573d6000803e3d6000fd5b50506020546026546040517f29c59b5d0000000000000000000000000000000000000000000000000000000081526001600160a01b0392831694506329c59b5d93508692612ee89216908690600401617e3d565b6000604051808303818588803b158015612f0157600080fd5b505af1158015612f15573d6000803e3d6000fd5b50505050505050565b6026546040516001600160a01b03909116602482015260019060009060440160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f84fae76000000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063f28dceb390613016906004016020808252600b908201527f5a65726f41646472657373000000000000000000000000000000000000000000604082015260600190565b600060405180830381600087803b15801561303057600080fd5b505af1158015613044573d6000803e3d6000fd5b50506020546040517f29c59b5d0000000000000000000000000000000000000000000000000000000081526001600160a01b0390911692506329c59b5d91508490612ee8906000908690600401617e3d565b6060601580548060200260200160405190810160405280929190818152602001828054801561128a576020028201919060005260206000209081546001600160a01b0316815260019091019060200180831161126c575050505050905090565b602480546020546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620186a093810184905291169063095ea7b3906044016020604051808303816000875af1158015613168573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061318c9190617de0565b506020546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b15801561321b57600080fd5b505af115801561322f573d6000803e3d6000fd5b5050602654602554602454604080518781526001600160a01b039283166020820152606081830181905260009082015290519382169550911692507f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a4919081900360800190a3602054602654602480546040517ff45346dc0000000000000000000000000000000000000000000000000000000081526001600160a01b0393841660048201529182018590528216604482015291169063f45346dc90606401600060405180830381600087803b15801561330857600080fd5b505af115801561331c573d6000803e3d6000fd5b5050602480546025546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260009550911692506370a082319101602060405180830381865afa158015613387573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133ab9190617dc7565b90506133be826028546107a29190617e2a565b5050565b6026546040516001600160a01b039091166024820152620186a09060009060440160408051601f19818403018152918152602080830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f84fae76000000000000000000000000000000000000000000000000000000000179052602354905491517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b03928316600482015260248101869052929350169063095ea7b3906044016020604051808303816000875af11580156134aa573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134ce9190617de0565b506025546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561354157600080fd5b505af1158015613555573d6000803e3d6000fd5b50506021546023546040517f9a5904270000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015291169250639a5904279150602401600060405180830381600087803b1580156135bb57600080fd5b505af11580156135cf573d6000803e3d6000fd5b50506040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fac2175f1000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401612ce6565b6023546020546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260006024820181905292919091169063095ea7b3906044016020604051808303816000875af11580156136b6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136da9190617de0565b506040517ff28dceb300000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f496e73756666696369656e744552433230416d6f756e740000000000000000006044820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063f28dceb3906064016129ba565b6040517f98296c540000000000000000000000000000000000000000000000000000000081526004810183905260248101829052737109709ecfa91a80626ff3989d68f67f5b1dd12d906398296c549060440160006040518083038186803b1580156137c457600080fd5b505afa1580156104dc573d6000803e3d6000fd5b60006137e261789a565b6137ed8484836137f7565b9150505b92915050565b6000806138048584613872565b90506138676040518060400160405280601d81526020017f4552433139363750726f78792e736f6c3a4552433139363750726f78790000008152508286604051602001613852929190617e3d565b6040516020818303038152906040528561387e565b9150505b9392505050565b600061386b83836138ac565b60c081015151600090156138a25761389b84848460c001516138c7565b905061386b565b61389b8484613a6d565b60006138b88383613b58565b61386b8383602001518461387e565b6000806138d2613b64565b905060006138e08683613c37565b905060006138f782606001518360200151856140dd565b90506000613907838389896142ef565b905060006139148261516c565b602081015181519192509060030b156139875789826040015160405160200161393e929190617e72565b60408051601f19818403018152908290527f08c379a000000000000000000000000000000000000000000000000000000000825261397e91600401617e5f565b60405180910390fd5b60006139ca6040518060400160405280601581526020017f4465706c6f79656420746f20616464726573733a20000000000000000000000081525083600161533b565b6040517fc6ce059d000000000000000000000000000000000000000000000000000000008152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c6ce059d90613a1d908490600401617e5f565b602060405180830381865afa158015613a3a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a5e9190617ef3565b9b9a5050505050505050505050565b6040517f8d1cc9250000000000000000000000000000000000000000000000000000000081526000908190737109709ecfa91a80626ff3989d68f67f5b1dd12d90638d1cc92590613ac2908790600401617e5f565b600060405180830381865afa158015613adf573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052613b079190810190618004565b90506000613b358285604051602001613b21929190618039565b60405160208183030381529060405261553b565b90506001600160a01b0381166137ed57848460405160200161393e929190618068565b6133be8282600061554e565b604080518082018252600381527f6f75740000000000000000000000000000000000000000000000000000000000602082015290517fd145736c000000000000000000000000000000000000000000000000000000008152606091737109709ecfa91a80626ff3989d68f67f5b1dd12d91829063d145736c90613beb908490600401618113565b600060405180830381865afa158015613c08573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052613c30919081019061815a565b9250505090565b613c696040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b6000737109709ecfa91a80626ff3989d68f67f5b1dd12d9050613cb46040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b613cbd85615651565b60208201526000613ccd86615a36565b90506000836001600160a01b031663d930a0e66040518163ffffffff1660e01b8152600401600060405180830381865afa158015613d0f573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052613d37919081019061815a565b86838560200151604051602001613d5194939291906181a3565b60408051601f19818403018152908290527f60f9bb1100000000000000000000000000000000000000000000000000000000825291506000906001600160a01b038616906360f9bb1190613da9908590600401617e5f565b600060405180830381865afa158015613dc6573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052613dee919081019061815a565b6040517fdb4235f60000000000000000000000000000000000000000000000000000000081529091506001600160a01b0386169063db4235f690613e369084906004016182a7565b602060405180830381865afa158015613e53573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613e779190617de0565b613e8c578160405160200161393e91906182f9565b6040517f49c4fac80000000000000000000000000000000000000000000000000000000081526001600160a01b038616906349c4fac890613ed190849060040161838b565b600060405180830381865afa158015613eee573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052613f16919081019061815a565b84526040517fdb4235f60000000000000000000000000000000000000000000000000000000081526001600160a01b0386169063db4235f690613f5d9084906004016183dd565b602060405180830381865afa158015613f7a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613f9e9190617de0565b15614033576040517f49c4fac80000000000000000000000000000000000000000000000000000000081526001600160a01b038616906349c4fac890613fe89084906004016183dd565b600060405180830381865afa158015614005573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261402d919081019061815a565b60408501525b846001600160a01b03166349c4fac8828660000151604051602001614058919061842f565b6040516020818303038152906040526040518363ffffffff1660e01b815260040161408492919061849b565b600060405180830381865afa1580156140a1573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526140c9919081019061815a565b606085015250608083015250949350505050565b60408051600480825260a0820190925260609160009190816020015b60608152602001906001900390816140f95790505090506040518060400160405280600481526020017f677265700000000000000000000000000000000000000000000000000000000081525081600081518110614159576141596184c0565b60200260200101819052506040518060400160405280600381526020017f2d726c0000000000000000000000000000000000000000000000000000000000815250816001815181106141ad576141ad6184c0565b6020026020010181905250846040516020016141c991906184ef565b604051602081830303815290604052816002815181106141eb576141eb6184c0565b602002602001018190525082604051602001614207919061855b565b60405160208183030381529060405281600381518110614229576142296184c0565b6020026020010181905250600061423f8261516c565b602080820151604080518082018252600581527f2e6a736f6e00000000000000000000000000000000000000000000000000000081850190815282518084018452600080825290860152825180840190935290518252928101929092529192506142d09060408051808201825260008082526020918201528151808301909252845182528085019082015290615cb9565b6142e5578560405160200161393e919061859c565b9695505050505050565b60a0810151604080518082018252600080825260209182015281518083019092528251808352928101910152606090737109709ecfa91a80626ff3989d68f67f5b1dd12d901561433f565b511590565b6144b3578260200151156143fb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605860248201527f54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f742060448201527f62652075736564207768656e207468652060736b6970566572696679536f757260648201527f6365436f646560206f7074696f6e206973206074727565600000000000000000608482015260a40161397e565b8260c00151156144b3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605360248201527f54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f742060448201527f62652075736564207768656e207468652060736b69704c6963656e736554797060648201527f6560206f7074696f6e2069732060747275656000000000000000000000000000608482015260a40161397e565b6040805160ff8082526120008201909252600091816020015b60608152602001906001900390816144cc57905050905060006040518060400160405280600381526020017f6e707800000000000000000000000000000000000000000000000000000000008152508282806145279061862d565b935060ff168151811061453c5761453c6184c0565b60200260200101819052506040518060400160405280600d81526020017f302e302e312d616c7068612e370000000000000000000000000000000000000081525060405160200161458d919061864c565b6040516020818303038152906040528282806145a89061862d565b935060ff16815181106145bd576145bd6184c0565b60200260200101819052506040518060400160405280600681526020017f6465706c6f79000000000000000000000000000000000000000000000000000081525082828061460a9061862d565b935060ff168151811061461f5761461f6184c0565b60200260200101819052506040518060400160405280600e81526020017f2d2d636f6e74726163744e616d6500000000000000000000000000000000000081525082828061466c9061862d565b935060ff1681518110614681576146816184c0565b6020026020010181905250876020015182828061469d9061862d565b935060ff16815181106146b2576146b26184c0565b60200260200101819052506040518060400160405280600e81526020017f2d2d636f6e7472616374506174680000000000000000000000000000000000008152508282806146ff9061862d565b935060ff1681518110614714576147146184c0565b60209081029190910101528751828261472c8161862d565b935060ff1681518110614741576147416184c0565b60200260200101819052506040518060400160405280600981526020017f2d2d636861696e4964000000000000000000000000000000000000000000000081525082828061478e9061862d565b935060ff16815181106147a3576147a36184c0565b60200260200101819052506147b746615d1a565b82826147c28161862d565b935060ff16815181106147d7576147d76184c0565b60200260200101819052506040518060400160405280600f81526020017f2d2d6275696c64496e666f46696c6500000000000000000000000000000000008152508282806148249061862d565b935060ff1681518110614839576148396184c0565b6020026020010181905250868282806148519061862d565b935060ff1681518110614866576148666184c0565b602090810291909101015285511561498d5760408051808201909152601581527f2d2d636f6e7374727563746f7242797465636f64650000000000000000000000602082015282826148b78161862d565b935060ff16815181106148cc576148cc6184c0565b60209081029190910101526040517f71aad10d0000000000000000000000000000000000000000000000000000000081526001600160a01b038416906371aad10d9061491c908990600401617e5f565b600060405180830381865afa158015614939573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052614961919081019061815a565b828261496c8161862d565b935060ff1681518110614981576149816184c0565b60200260200101819052505b846020015115614a5d5760408051808201909152601281527f2d2d766572696679536f75726365436f64650000000000000000000000000000602082015282826149d68161862d565b935060ff16815181106149eb576149eb6184c0565b60200260200101819052506040518060400160405280600581526020017f66616c7365000000000000000000000000000000000000000000000000000000815250828280614a389061862d565b935060ff1681518110614a4d57614a4d6184c0565b6020026020010181905250614c24565b614a9561433a8660a0015160408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b614b285760408051808201909152600d81527f2d2d6c6963656e7365547970650000000000000000000000000000000000000060208201528282614ad88161862d565b935060ff1681518110614aed57614aed6184c0565b60200260200101819052508460a00151604051602001614b0d91906184ef565b604051602081830303815290604052828280614a389061862d565b8460c00151158015614b6b575060408089015181518083018352600080825260209182015282518084019093528151835290810190820152614b6990511590565b155b15614c245760408051808201909152600d81527f2d2d6c6963656e7365547970650000000000000000000000000000000000000060208201528282614baf8161862d565b935060ff1681518110614bc457614bc46184c0565b6020026020010181905250614bd888615dba565b604051602001614be891906184ef565b604051602081830303815290604052828280614c039061862d565b935060ff1681518110614c1857614c186184c0565b60200260200101819052505b60408086015181518083018352600080825260209182015282518084019093528151835290810190820152614c5890511590565b614ced5760408051808201909152600b81527f2d2d72656c61796572496400000000000000000000000000000000000000000060208201528282614c9b8161862d565b935060ff1681518110614cb057614cb06184c0565b60200260200101819052508460400151828280614ccc9061862d565b935060ff1681518110614ce157614ce16184c0565b60200260200101819052505b606085015115614e0e5760408051808201909152600681527f2d2d73616c74000000000000000000000000000000000000000000000000000060208201528282614d368161862d565b935060ff1681518110614d4b57614d4b6184c0565b602090810291909101015260608501516040517fb11a19e800000000000000000000000000000000000000000000000000000000815260048101919091526001600160a01b0384169063b11a19e890602401600060405180830381865afa158015614dba573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052614de2919081019061815a565b8282614ded8161862d565b935060ff1681518110614e0257614e026184c0565b60200260200101819052505b60e08501515115614eb55760408051808201909152600a81527f2d2d6761734c696d69740000000000000000000000000000000000000000000060208201528282614e588161862d565b935060ff1681518110614e6d57614e6d6184c0565b6020026020010181905250614e898560e0015160000151615d1a565b8282614e948161862d565b935060ff1681518110614ea957614ea96184c0565b60200260200101819052505b60e08501516020015115614f5f5760408051808201909152600a81527f2d2d67617350726963650000000000000000000000000000000000000000000060208201528282614f028161862d565b935060ff1681518110614f1757614f176184c0565b6020026020010181905250614f338560e0015160200151615d1a565b8282614f3e8161862d565b935060ff1681518110614f5357614f536184c0565b60200260200101819052505b60e085015160400151156150095760408051808201909152600e81527f2d2d6d617846656550657247617300000000000000000000000000000000000060208201528282614fac8161862d565b935060ff1681518110614fc157614fc16184c0565b6020026020010181905250614fdd8560e0015160400151615d1a565b8282614fe88161862d565b935060ff1681518110614ffd57614ffd6184c0565b60200260200101819052505b60e085015160600151156150b35760408051808201909152601681527f2d2d6d61785072696f7269747946656550657247617300000000000000000000602082015282826150568161862d565b935060ff168151811061506b5761506b6184c0565b60200260200101819052506150878560e0015160600151615d1a565b82826150928161862d565b935060ff16815181106150a7576150a76184c0565b60200260200101819052505b60008160ff1667ffffffffffffffff8111156150d1576150d1617f1c565b60405190808252806020026020018201604052801561510457816020015b60608152602001906001900390816150ef5790505b50905060005b8260ff168160ff16101561515d57838160ff168151811061512d5761512d6184c0565b6020026020010151828260ff168151811061514a5761514a6184c0565b602090810291909101015260010161510a565b5093505050505b949350505050565b6151936040518060600160405280600060030b815260200160608152602001606081525090565b60408051808201825260048082527f6261736800000000000000000000000000000000000000000000000000000000602083015291517fd145736c000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d92600091849163d145736c91615219918691016186b7565b600060405180830381865afa158015615236573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261525e919081019061815a565b9050600061526c86836168a9565b90506000846001600160a01b031663f45c1ce7836040518263ffffffff1660e01b815260040161529c9190617bf3565b6000604051808303816000875af11580156152bb573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526152e391908101906186fe565b805190915060030b158015906152fc5750602081015151155b801561530b5750604081015151155b156142e55781600081518110615323576153236184c0565b602002602001015160405160200161393e91906187b4565b606060006153708560408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6040805180820182526000808252602091820152815180830190925286518252808701908201529091506153a79082905b906169fe565b156155045760006154248261541e846154186153ea8a60408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6040805180820182526000808252602091820152815180830190925282518252918201519181019190915290565b90616a25565b90616a87565b604080518082018252600181527f0a00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201529091506154889082906169fe565b156154f257604080518082018252600181527f0a00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526154ef905b8290616b0c565b90505b6154fb81616b32565b9250505061386b565b821561551d57848460405160200161393e9291906189a0565b505060408051602081019091526000815261386b565b509392505050565b6000808251602084016000f09392505050565b8160a001511561555d57505050565b600061556a848484616b9b565b905060006155778261516c565b602081015181519192509060030b1580156156135750604080518082018252600781527f535543434553530000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152615613906040805180820182526000808252602091820152815180830190925284518252808501908201526153a1565b1561562057505050505050565b6040820151511561564057816040015160405160200161393e9190618a47565b8060405160200161393e9190618aa5565b606060006156868360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600481527f2e736f6c00000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201529091506156eb905b8290615cb9565b1561575a57604080518082018252600481527f2e736f6c000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261386b90615755908390617136565b616b32565b604080518082018252600181527f3a00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526157bc905b82906171c0565b60010361588957604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152615822906154e8565b50604080518082018252600181527f3a000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261386b90615755905b8390616b0c565b604080518082018252600581527f2e6a736f6e000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526158e8906156e4565b15615a1f57604080518082018252600181527f2f0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082018190528451808601909552925184528301529061595090839061725a565b9050600081600183516159639190617e2a565b81518110615973576159736184c0565b60200260200101519050615a166157556159e96040518060400160405280600581526020017f2e6a736f6e00000000000000000000000000000000000000000000000000000081525060408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b60408051808201825260008082526020918201528151808301909252855182528086019082015290617136565b95945050505050565b8260405160200161393e9190618b10565b50919050565b60606000615a6b8360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600481527f2e736f6c0000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152909150615acd906156e4565b15615adb5761386b81616b32565b604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152615b3a906157b5565b600103615ba457604080518082018252600181527f3a000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261386b9061575590615882565b604080518082018252600581527f2e6a736f6e00000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152615c03906156e4565b15615a1f57604080518082018252600181527f2f00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820181905284518086019095529251845283015290615c6b90839061725a565b9050600181511115615ca7578060028251615c869190617e2a565b81518110615c9657615c966184c0565b602002602001015192505050919050565b508260405160200161393e9190618b10565b805182516000911115615cce575060006137f1565b81518351602085015160009291615ce491617d67565b615cee9190617e2a565b905082602001518103615d055760019150506137f1565b82516020840151819020912014905092915050565b60606000615d27836172ff565b600101905060008167ffffffffffffffff811115615d4757615d47617f1c565b6040519080825280601f01601f191660200182016040528015615d71576020820181803683370190505b5090508181016020015b600019017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a8504945084615d7b57509392505050565b604081810151815180830183526000808252602091820181905283518085018552835181529282018383015283518085018552600a81527f554e4c4943454e5345440000000000000000000000000000000000000000000081840190815285518087018752838152840192909252845180860190955251845290830152606091615e46905b82906173e1565b15615e8657505060408051808201909152600481527f4e6f6e65000000000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600981527f556e6c6963656e7365000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152615ee590615e3f565b15615f2557505060408051808201909152600981527f556e6c6963656e736500000000000000000000000000000000000000000000006020820152919050565b604080518082018252600381527f4d4954000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152615f8490615e3f565b15615fc457505060408051808201909152600381527f4d495400000000000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f47504c2d322e302d6f6e6c7900000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261602390615e3f565b806160885750604080518082018252601081527f47504c2d322e302d6f722d6c61746572000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261608890615e3f565b156160c857505060408051808201909152600981527f474e552047504c763200000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f47504c2d332e302d6f6e6c7900000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261612790615e3f565b8061618c5750604080518082018252601081527f47504c2d332e302d6f722d6c61746572000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261618c90615e3f565b156161cc57505060408051808201909152600981527f474e552047504c763300000000000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4c47504c2d322e312d6f6e6c79000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261622b90615e3f565b806162905750604080518082018252601181527f4c47504c2d322e312d6f722d6c617465720000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261629090615e3f565b156162d057505060408051808201909152600c81527f474e55204c47504c76322e3100000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4c47504c2d332e302d6f6e6c79000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261632f90615e3f565b806163945750604080518082018252601181527f4c47504c2d332e302d6f722d6c617465720000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261639490615e3f565b156163d457505060408051808201909152600a81527f474e55204c47504c7633000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f4253442d322d436c6175736500000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261643390615e3f565b1561647357505060408051808201909152600c81527f4253442d322d436c6175736500000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f4253442d332d436c617573650000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526164d290615e3f565b1561651257505060408051808201909152600c81527f4253442d332d436c6175736500000000000000000000000000000000000000006020820152919050565b604080518082018252600781527f4d504c2d322e30000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261657190615e3f565b156165b157505060408051808201909152600781527f4d504c2d322e30000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600781527f4f534c2d332e30000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261661090615e3f565b1561665057505060408051808201909152600781527f4f534c2d332e30000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600a81527f4170616368652d322e3000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526166af90615e3f565b156166ef57505060408051808201909152600a81527f4170616368652d322e30000000000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4147504c2d332e302d6f6e6c79000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261674e90615e3f565b806167b35750604080518082018252601181527f4147504c2d332e302d6f722d6c61746572000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526167b390615e3f565b156167f357505060408051808201909152600a81527f474e55204147504c7633000000000000000000000000000000000000000000006020820152919050565b604080518082018252600881527f4255534c2d312e310000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261685290615e3f565b1561689257505060408051808201909152600781527f42534c20312e31000000000000000000000000000000000000000000000000006020820152919050565b6040808401518451915161393e9290602001618bee565b60608060005b845181101561693457818582815181106168cb576168cb6184c0565b60200260200101516040516020016168e4929190618039565b6040516020818303038152906040529150600185516169039190617e2a565b811461692c578160405160200161691a9190618d57565b60405160208183030381529060405291505b6001016168af565b5060408051600380825260808201909252600091816020015b606081526020019060019003908161694d5790505090508381600081518110616978576169786184c0565b60200260200101819052506040518060400160405280600281526020017f2d63000000000000000000000000000000000000000000000000000000000000815250816001815181106169cc576169cc6184c0565b602002602001018190525081816002815181106169eb576169eb6184c0565b6020908102919091010152949350505050565b6020808301518351835192840151600093616a1c92918491906173f5565b14159392505050565b60408051808201909152600080825260208201526000616a578460000151856020015185600001518660200151617506565b9050836020015181616a699190617e2a565b84518590616a78908390617e2a565b90525060208401525090919050565b6040805180820190915260008082526020820152815183511015616aac5750816137f1565b6020808301519084015160019114616ad35750815160208481015190840151829020919020145b8015616b0457825184518590616aea908390617e2a565b9052508251602085018051616b00908390617d67565b9052505b509192915050565b6040805180820190915260008082526020820152616b2b838383617626565b5092915050565b60606000826000015167ffffffffffffffff811115616b5357616b53617f1c565b6040519080825280601f01601f191660200182016040528015616b7d576020820181803683370190505b5090506000602082019050616b2b81856020015186600001516176d1565b60606000616ba7613b64565b6040805160ff808252612000820190925291925060009190816020015b6060815260200190600190039081616bc457905050905060006040518060400160405280600381526020017f6e70780000000000000000000000000000000000000000000000000000000000815250828280616c1f9061862d565b935060ff1681518110616c3457616c346184c0565b60200260200101819052506040518060400160405280600781526020017f5e312e33322e3300000000000000000000000000000000000000000000000000815250604051602001616c859190618d98565b604051602081830303815290604052828280616ca09061862d565b935060ff1681518110616cb557616cb56184c0565b60200260200101819052506040518060400160405280600881526020017f76616c6964617465000000000000000000000000000000000000000000000000815250828280616d029061862d565b935060ff1681518110616d1757616d176184c0565b602002602001018190525082604051602001616d33919061855b565b604051602081830303815290604052828280616d4e9061862d565b935060ff1681518110616d6357616d636184c0565b60200260200101819052506040518060400160405280600a81526020017f2d2d636f6e747261637400000000000000000000000000000000000000000000815250828280616db09061862d565b935060ff1681518110616dc557616dc56184c0565b6020026020010181905250616dda878461774b565b8282616de58161862d565b935060ff1681518110616dfa57616dfa6184c0565b602090810291909101015285515115616ea65760408051808201909152600b81527f2d2d7265666572656e636500000000000000000000000000000000000000000060208201528282616e4c8161862d565b935060ff1681518110616e6157616e616184c0565b6020026020010181905250616e7a86600001518461774b565b8282616e858161862d565b935060ff1681518110616e9a57616e9a6184c0565b60200260200101819052505b856080015115616f145760408051808201909152601881527f2d2d756e73616665536b697053746f72616765436865636b000000000000000060208201528282616eef8161862d565b935060ff1681518110616f0457616f046184c0565b6020026020010181905250616f7a565b8415616f7a5760408051808201909152601281527f2d2d726571756972655265666572656e6365000000000000000000000000000060208201528282616f598161862d565b935060ff1681518110616f6e57616f6e6184c0565b60200260200101819052505b604086015151156170165760408051808201909152600d81527f2d2d756e73616665416c6c6f770000000000000000000000000000000000000060208201528282616fc48161862d565b935060ff1681518110616fd957616fd96184c0565b60200260200101819052508560400151828280616ff59061862d565b935060ff168151811061700a5761700a6184c0565b60200260200101819052505b8560600151156170805760408051808201909152601481527f2d2d756e73616665416c6c6f7752656e616d65730000000000000000000000006020820152828261705f8161862d565b935060ff1681518110617074576170746184c0565b60200260200101819052505b60008160ff1667ffffffffffffffff81111561709e5761709e617f1c565b6040519080825280602002602001820160405280156170d157816020015b60608152602001906001900390816170bc5790505b50905060005b8260ff168160ff16101561712a57838160ff16815181106170fa576170fa6184c0565b6020026020010151828260ff1681518110617117576171176184c0565b60209081029190910101526001016170d7565b50979650505050505050565b604080518082019091526000808252602082015281518351101561715b5750816137f1565b8151835160208501516000929161717191617d67565b61717b9190617e2a565b6020840151909150600190821461719c575082516020840151819020908220145b80156171b7578351855186906171b3908390617e2a565b9052505b50929392505050565b60008082600001516171e48560000151866020015186600001518760200151617506565b6171ee9190617d67565b90505b835160208501516172029190617d67565b8111616b2b578161721281618ddd565b925050826000015161724985602001518361722d9190617e2a565b86516172399190617e2a565b8386600001518760200151617506565b6172539190617d67565b90506171f1565b6060600061726884846171c0565b617273906001617d67565b67ffffffffffffffff81111561728b5761728b617f1c565b6040519080825280602002602001820160405280156172be57816020015b60608152602001906001900390816172a95790505b50905060005b8151811015615533576172da6157558686616b0c565b8282815181106172ec576172ec6184c0565b60209081029190910101526001016172c4565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310617348577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310617374576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc10000831061739257662386f26fc10000830492506010015b6305f5e10083106173aa576305f5e100830492506008015b61271083106173be57612710830492506004015b606483106173d0576064830492506002015b600a83106137f15760010192915050565b60006173ed838361778b565b159392505050565b6000808584116174fc57602084116174a8576000841561744057600161741c866020617e2a565b617427906008618df7565b617432906002618ef5565b61743c9190617e2a565b1990505b835181168561744f8989617d67565b6174599190617e2a565b805190935082165b8181146174935787841161747b5787945050505050615164565b8361748581618f01565b945050828451169050617461565b61749d8785617d67565b945050505050615164565b8383206174b58588617e2a565b6174bf9087617d67565b91505b8582106174fa578482208082036174e7576174dd8684617d67565b9350505050615164565b6174f2600184617e2a565b9250506174c2565b505b5092949350505050565b6000838186851161761157602085116175c0576000851561755257600161752e876020617e2a565b617539906008618df7565b617544906002618ef5565b61754e9190617e2a565b1990505b845181166000876175638b8b617d67565b61756d9190617e2a565b855190915083165b8281146175b25781861061759a5761758d8b8b617d67565b9650505050505050615164565b856175a481618ddd565b965050838651169050617575565b859650505050505050615164565b508383206000905b6175d28689617e2a565b821161760f578583208082036175ee5783945050505050615164565b6175f9600185617d67565b935050818061760790618ddd565b9250506175c8565b505b61761b8787617d67565b979650505050505050565b604080518082019091526000808252602082015260006176588560000151866020015186600001518760200151617506565b6020808701805191860191909152519091506176749082617e2a565b8352845160208601516176879190617d67565b810361769657600085526176c8565b835183516176a49190617d67565b855186906176b3908390617e2a565b90525083516176c29082617d67565b60208601525b50909392505050565b6020811061770957815183526176e8602084617d67565b92506176f5602083617d67565b9150617702602082617e2a565b90506176d1565b600019811561773857600161771f836020617e2a565b61772b90610100618ef5565b6177359190617e2a565b90505b9151835183169219169190911790915250565b606060006177598484613c37565b805160208083015160405193945061777393909101618f18565b60405160208183030381529060405291505092915050565b815181516000919081111561779e575081515b6020808501519084015160005b838110156178575782518251808214617827576000196020871015617806576001846177d8896020617e2a565b6177e29190617d67565b6177ed906008618df7565b6177f8906002618ef5565b6178029190617e2a565b1990505b81811683821681810391146178245797506137f19650505050505050565b50505b617832602086617d67565b945061783f602085617d67565b935050506020816178509190617d67565b90506177ab565b50845186516142e59190618f70565b610c9f80618f9183390190565b6112a680619c3083390190565b6116fe8061aed683390190565b61155a8061c5d483390190565b6040518060e001604052806060815260200160608152602001606081526020016000151581526020016000151581526020016000151581526020016178dd6178e2565b905290565b604051806101000160405280600015158152602001600015158152602001606081526020016000801916815260200160608152602001606081526020016000151581526020016178dd6040518060800160405280600081526020016000815260200160008152602001600081525090565b602080825282518282018190526000918401906040840190835b818110156179945783516001600160a01b031683526020938401939092019160010161796d565b509095945050505050565b60005b838110156179ba5781810151838201526020016179a2565b50506000910152565b600081518084526179db81602086016020860161799f565b601f01601f19169290920160200192915050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015617aeb577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452815180516001600160a01b03168652602090810151604082880181905281519088018190529101906060600582901b88018101919088019060005b81811015617ad1577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa08a8503018352617abb8486516179c3565b6020958601959094509290920191600101617a81565b509197505050602094850194929092019150600101617a17565b50929695505050505050565b600081518084526020840193506020830160005b82811015617b4b5781517fffffffff0000000000000000000000000000000000000000000000000000000016865260209586019590910190600101617b0b565b5093949350505050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015617aeb577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08786030184528151805160408752617bc160408801826179c3565b9050602082015191508681036020880152617bdc8183617af7565b965050506020938401939190910190600101617b7d565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015617aeb577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452617c558583516179c3565b94506020938401939190910190600101617c1b565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015617aeb577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc087860301845281516001600160a01b0381511686526020810151905060406020870152617ceb6040870182617af7565b9550506020938401939190910190600101617c92565b6001600160a01b03851681528360208201526001600160a01b03831660408201526080606082015260006142e560808301846179c3565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b808201808211156137f1576137f1617d38565b600181811c90821680617d8e57607f821691505b602082108103615a30577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060208284031215617dd957600080fd5b5051919050565b600060208284031215617df257600080fd5b8151801515811461386b57600080fd5b8381526001600160a01b0383166020820152606060408201526000615a1660608301846179c3565b818103818111156137f1576137f1617d38565b6001600160a01b038316815260406020820152600061516460408301846179c3565b60208152600061386b60208301846179c3565b7f4661696c656420746f206465706c6f7920636f6e747261637420000000000000815260008351617eaa81601a85016020880161799f565b7f3a20000000000000000000000000000000000000000000000000000000000000601a918401918201528351617ee781601c84016020880161799f565b01601c01949350505050565b600060208284031215617f0557600080fd5b81516001600160a01b038116811461386b57600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040516060810167ffffffffffffffff81118282101715617f6e57617f6e617f1c565b60405290565b60008067ffffffffffffffff841115617f8f57617f8f617f1c565b50604051601f19601f85018116603f0116810181811067ffffffffffffffff82111715617fbe57617fbe617f1c565b604052838152905080828401851015617fd657600080fd5b61553384602083018561799f565b600082601f830112617ff557600080fd5b61386b83835160208501617f74565b60006020828403121561801657600080fd5b815167ffffffffffffffff81111561802d57600080fd5b6137ed84828501617fe4565b6000835161804b81846020880161799f565b83519083019061805f81836020880161799f565b01949350505050565b7f4661696c656420746f206465706c6f7920636f6e7472616374200000000000008152600083516180a081601a85016020880161799f565b7f207573696e6720636f6e7374727563746f722064617461202200000000000000601a9184019182015283516180dd81603384016020880161799f565b7f220000000000000000000000000000000000000000000000000000000000000060339290910191820152603401949350505050565b60408152600b60408201527f464f554e4452595f4f5554000000000000000000000000000000000000000000606082015260806020820152600061386b60808301846179c3565b60006020828403121561816c57600080fd5b815167ffffffffffffffff81111561818357600080fd5b8201601f8101841361819457600080fd5b6137ed84825160208401617f74565b600085516181b5818460208a0161799f565b7f2f0000000000000000000000000000000000000000000000000000000000000090830190815285516181ef816001840160208a0161799f565b7f2f0000000000000000000000000000000000000000000000000000000000000060019290910191820152845161822d81600284016020890161799f565b6001818301019150507f2f000000000000000000000000000000000000000000000000000000000000006001820152835161826f81600284016020880161799f565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600292909101918201526007019695505050505050565b6040815260006182ba60408301846179c3565b8281036020840152600481527f2e6173740000000000000000000000000000000000000000000000000000000060208201526040810191505092915050565b7f436f756c64206e6f742066696e642041535420696e206172746966616374200081526000825161833181601f85016020870161799f565b7f2e205365742060617374203d20747275656020696e20666f756e6472792e746f601f9390910192830152507f6d6c000000000000000000000000000000000000000000000000000000000000603f820152604101919050565b60408152600061839e60408301846179c3565b8281036020840152601181527f2e6173742e6162736f6c7574655061746800000000000000000000000000000060208201526040810191505092915050565b6040815260006183f060408301846179c3565b8281036020840152600c81527f2e6173742e6c6963656e7365000000000000000000000000000000000000000060208201526040810191505092915050565b7f2e6d657461646174612e736f75726365732e5b2700000000000000000000000081526000825161846781601485016020870161799f565b7f275d2e6b656363616b32353600000000000000000000000000000000000000006014939091019283015250602001919050565b6040815260006184ae60408301856179c3565b828103602084015261386781856179c3565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f220000000000000000000000000000000000000000000000000000000000000081526000825161852781600185016020870161799f565b7f22000000000000000000000000000000000000000000000000000000000000006001939091019283015250600201919050565b6000825161856d81846020870161799f565b7f2f6275696c642d696e666f000000000000000000000000000000000000000000920191825250600b01919050565b7f436f756c64206e6f742066696e64206275696c642d696e666f2066696c65207781527f697468206d61746368696e6720736f7572636520636f6465206861736820666f60208201527f7220636f6e74726163742000000000000000000000000000000000000000000060408201526000825161862081604b85016020870161799f565b91909101604b0192915050565b600060ff821660ff810361864357618643617d38565b60010192915050565b7f406f70656e7a657070656c696e2f646566656e6465722d6465706c6f792d636c81527f69656e742d636c694000000000000000000000000000000000000000000000006020820152600082516186aa81602985016020870161799f565b9190910160290192915050565b60408152601660408201527f4f50454e5a455050454c494e5f424153485f5041544800000000000000000000606082015260806020820152600061386b60808301846179c3565b60006020828403121561871057600080fd5b815167ffffffffffffffff81111561872757600080fd5b82016060818503121561873957600080fd5b618741617f4b565b81518060030b811461875257600080fd5b8152602082015167ffffffffffffffff81111561876e57600080fd5b61877a86828501617fe4565b602083015250604082015167ffffffffffffffff81111561879a57600080fd5b6187a686828501617fe4565b604083015250949350505050565b7f4661696c656420746f2072756e206261736820636f6d6d616e6420776974682081527f220000000000000000000000000000000000000000000000000000000000000060208201526000825161881281602185016020870161799f565b7f222e20496620796f7520617265207573696e672057696e646f77732c2073657460219390910192830152507f20746865204f50454e5a455050454c494e5f424153485f5041544820656e766960418201527f726f6e6d656e74207661726961626c6520746f207468652066756c6c7920717560618201527f616c69666965642070617468206f66207468652062617368206578656375746160818201527f626c652e20466f72206578616d706c652c20696620796f75206172652075736960a18201527f6e672047697420666f722057696e646f77732c206164642074686520666f6c6c60c18201527f6f77696e67206c696e6520696e20746865202e656e762066696c65206f66207960e18201527f6f75722070726f6a65637420287573696e6720666f727761726420736c6173686101018201527f6573293a0a4f50454e5a455050454c494e5f424153485f504154483d22433a2f6101218201527f50726f6772616d2046696c65732f4769742f62696e2f6261736822000000000061014182015261015c01919050565b7f4661696c656420746f2066696e64206c696e652077697468207072656669782081527f27000000000000000000000000000000000000000000000000000000000000006020820152600083516189fe81602185016020880161799f565b7f2720696e206f75747075743a20000000000000000000000000000000000000006021918401918201528351618a3b81602e84016020880161799f565b01602e01949350505050565b7f4661696c656420746f2072756e2075706772616465207361666574792076616c81527f69646174696f6e3a2000000000000000000000000000000000000000000000006020820152600082516186aa81602985016020870161799f565b7f55706772616465207361666574792076616c69646174696f6e206661696c656481527f3a0a000000000000000000000000000000000000000000000000000000000000602082015260008251618b0381602285016020870161799f565b9190910160220192915050565b7f436f6e7472616374206e616d6520000000000000000000000000000000000000815260008251618b4881600e85016020870161799f565b7f206d75737420626520696e2074686520666f726d6174204d79436f6e74726163600e9390910192830152507f742e736f6c3a4d79436f6e7472616374206f72204d79436f6e74726163742e73602e8201527f6f6c206f72206f75742f4d79436f6e74726163742e736f6c2f4d79436f6e7472604e8201527f6163742e6a736f6e000000000000000000000000000000000000000000000000606e820152607601919050565b7f53504458206c6963656e7365206964656e746966696572200000000000000000815260008351618c2681601885016020880161799f565b7f20696e20000000000000000000000000000000000000000000000000000000006018918401918201528351618c6381601c84016020880161799f565b7f20646f6573206e6f74206c6f6f6b206c696b65206120737570706f7274656420601c92909101918201527f6c6963656e736520666f7220626c6f636b206578706c6f726572207665726966603c8201527f69636174696f6e2e205573652074686520606c6963656e73655479706560206f605c8201527f7074696f6e20746f20737065636966792061206c6963656e736520747970652c607c8201527f206f7220736574207468652060736b69704c6963656e73655479706560206f70609c8201527f74696f6e20746f2060747275656020746f20736b69702e00000000000000000060bc82015260d301949350505050565b60008251618d6981846020870161799f565b7f2000000000000000000000000000000000000000000000000000000000000000920191825250600101919050565b7f406f70656e7a657070656c696e2f75706772616465732d636f72654000000000815260008251618dd081601c85016020870161799f565b91909101601c0192915050565b60006000198203618df057618df0617d38565b5060010190565b80820281158282048414176137f1576137f1617d38565b6001815b6001841115618e4957808504811115618e2d57618e2d617d38565b6001841615618e3b57908102905b60019390931c928002618e12565b935093915050565b600082618e60575060016137f1565b81618e6d575060006137f1565b8160018114618e835760028114618e8d57618ea9565b60019150506137f1565b60ff841115618e9e57618e9e617d38565b50506001821b6137f1565b5060208310610133831016604e8410600b8410161715618ecc575081810a6137f1565b618ed96000198484618e0e565b8060001904821115618eed57618eed617d38565b029392505050565b600061386b8383618e51565b600081618f1057618f10617d38565b506000190190565b60008351618f2a81846020880161799f565b7f3a000000000000000000000000000000000000000000000000000000000000009083019081528351618f6481600184016020880161799f565b01600101949350505050565b8181036000831280158383131683831282161715616b2b57616b2b617d3856fe608060405234801561001057600080fd5b50604051610c9f380380610c9f83398101604081905261002f9161010d565b8181600361003d83826101ff565b50600461004a82826101ff565b50505050506102bd565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261007b57600080fd5b81516001600160401b0381111561009457610094610054565b604051601f8201601f19908116603f011681016001600160401b03811182821017156100c2576100c2610054565b6040528181528382016020018510156100da57600080fd5b60005b828110156100f9576020818601810151838301820152016100dd565b506000918101602001919091529392505050565b6000806040838503121561012057600080fd5b82516001600160401b0381111561013657600080fd5b6101428582860161006a565b602085015190935090506001600160401b0381111561016057600080fd5b61016c8582860161006a565b9150509250929050565b600181811c9082168061018a57607f821691505b6020821081036101aa57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156101fa57806000526020600020601f840160051c810160208510156101d75750805b601f840160051c820191505b818110156101f757600081556001016101e3565b50505b505050565b81516001600160401b0381111561021857610218610054565b61022c816102268454610176565b846101b0565b6020601f82116001811461026057600083156102485750848201515b600019600385901b1c1916600184901b1784556101f7565b600084815260208120601f198516915b828110156102905787850151825560209485019460019092019101610270565b50848210156102ae5786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b6109d3806102cc6000396000f3fe608060405234801561001057600080fd5b50600436106100be5760003560e01c806340c10f191161007657806395d89b411161005b57806395d89b4114610183578063a9059cbb1461018b578063dd62ed3e1461019e57600080fd5b806340c10f191461013857806370a082311461014d57600080fd5b806318160ddd116100a757806318160ddd1461010457806323b872dd14610116578063313ce5671461012957600080fd5b806306fdde03146100c3578063095ea7b3146100e1575b600080fd5b6100cb6101e4565b6040516100d891906107bf565b60405180910390f35b6100f46100ef366004610854565b610276565b60405190151581526020016100d8565b6002545b6040519081526020016100d8565b6100f461012436600461087e565b610290565b604051601281526020016100d8565b61014b610146366004610854565b6102b4565b005b61010861015b3660046108bb565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6100cb6102c2565b6100f4610199366004610854565b6102d1565b6101086101ac3660046108dd565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6060600380546101f390610910565b80601f016020809104026020016040519081016040528092919081815260200182805461021f90610910565b801561026c5780601f106102415761010080835404028352916020019161026c565b820191906000526020600020905b81548152906001019060200180831161024f57829003601f168201915b5050505050905090565b6000336102848185856102df565b60019150505b92915050565b60003361029e8582856102f1565b6102a98585856103c5565b506001949350505050565b6102be8282610470565b5050565b6060600480546101f390610910565b6000336102848185856103c5565b6102ec83838360016104cc565b505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146103bf57818110156103b0576040517ffb8f41b200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416600482015260248101829052604481018390526064015b60405180910390fd5b6103bf848484840360006104cc565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8316610415576040517f96c6fd1e000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff8216610465576040517fec442f05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b6102ec838383610614565b73ffffffffffffffffffffffffffffffffffffffff82166104c0576040517fec442f05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b6102be60008383610614565b73ffffffffffffffffffffffffffffffffffffffff841661051c576040517fe602df05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff831661056c576040517f94280d62000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260016020908152604080832093871683529290522082905580156103bf578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161060691815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff831661064c5780600260008282546106419190610963565b909155506106fe9050565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260208190526040902054818110156106d2576040517fe450d38c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8516600482015260248101829052604481018390526064016103a7565b73ffffffffffffffffffffffffffffffffffffffff841660009081526020819052604090209082900390555b73ffffffffffffffffffffffffffffffffffffffff821661072757600280548290039055610753565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090208054820190555b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516107b291815260200190565b60405180910390a3505050565b602081526000825180602084015260005b818110156107ed57602081860181015160408684010152016107d0565b5060006040828501015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011684010191505092915050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461084f57600080fd5b919050565b6000806040838503121561086757600080fd5b6108708361082b565b946020939093013593505050565b60008060006060848603121561089357600080fd5b61089c8461082b565b92506108aa6020850161082b565b929592945050506040919091013590565b6000602082840312156108cd57600080fd5b6108d68261082b565b9392505050565b600080604083850312156108f057600080fd5b6108f98361082b565b91506109076020840161082b565b90509250929050565b600181811c9082168061092457607f821691505b60208210810361095d577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b8082018082111561028a577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea26469706673582212207e804ca539d49155d2b6bc19268ce22f9f857027c75247d69fb0d56a089c93d464736f6c634300081a0033608060405234801561001057600080fd5b506040516112a63803806112a683398101604081905261002f91610110565b604051806040016040528060048152602001635a65746160e01b815250604051806040016040528060048152602001635a45544160e01b815250816003908161007891906101e2565b50600461008582826101e2565b5050506001600160a01b03821615806100a557506001600160a01b038116155b156100c35760405163e6c4247b60e01b815260040160405180910390fd5b600680546001600160a01b039384166001600160a01b031991821617909155600780549290931691161790556102a0565b80516001600160a01b038116811461010b57600080fd5b919050565b6000806040838503121561012357600080fd5b61012c836100f4565b915061013a602084016100f4565b90509250929050565b634e487b7160e01b600052604160045260246000fd5b600181811c9082168061016d57607f821691505b60208210810361018d57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156101dd57806000526020600020601f840160051c810160208510156101ba5750805b601f840160051c820191505b818110156101da57600081556001016101c6565b50505b505050565b81516001600160401b038111156101fb576101fb610143565b61020f816102098454610159565b84610193565b6020601f821160018114610243576000831561022b5750848201515b600019600385901b1c1916600184901b1784556101da565b600084815260208120601f198516915b828110156102735787850151825560209485019460019092019101610253565b50848210156102915786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b610ff7806102af6000396000f3fe608060405234801561001057600080fd5b506004361061011b5760003560e01c806342966c68116100b257806379cc679011610081578063a9059cbb11610066578063a9059cbb1461028e578063bff9662a146102a1578063dd62ed3e146102c157600080fd5b806379cc67901461027357806395d89b411461028657600080fd5b806342966c68146102025780635b1125911461021557806370a0823114610235578063779e3b631461026b57600080fd5b80631e458bee116100ee5780631e458bee1461018857806323b872dd1461019b578063313ce567146101ae578063328a01d0146101bd57600080fd5b806306fdde0314610120578063095ea7b31461013e57806315d57fd41461016157806318160ddd14610176575b600080fd5b610128610307565b6040516101359190610d97565b60405180910390f35b61015161014c366004610e2c565b610399565b6040519015158152602001610135565b61017461016f366004610e56565b6103b3565b005b6002545b604051908152602001610135565b610174610196366004610e89565b61057e565b6101516101a9366004610ebc565b610631565b60405160128152602001610135565b6007546101dd9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610135565b610174610210366004610ef9565b610655565b6006546101dd9073ffffffffffffffffffffffffffffffffffffffff1681565b61017a610243366004610f12565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b610174610662565b610174610281366004610e2c565b610786565b610128610837565b61015161029c366004610e2c565b610846565b6005546101dd9073ffffffffffffffffffffffffffffffffffffffff1681565b61017a6102cf366004610e56565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b60606003805461031690610f34565b80601f016020809104026020016040519081016040528092919081815260200182805461034290610f34565b801561038f5780601f106103645761010080835404028352916020019161038f565b820191906000526020600020905b81548152906001019060200180831161037257829003601f168201915b5050505050905090565b6000336103a7818585610854565b60019150505b92915050565b60075473ffffffffffffffffffffffffffffffffffffffff1633148015906103f3575060065473ffffffffffffffffffffffffffffffffffffffff163314155b15610431576040517fcdfcef970000000000000000000000000000000000000000000000000000000081523360048201526024015b60405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff82161580610468575073ffffffffffffffffffffffffffffffffffffffff8116155b1561049f576040517fe6c4247b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6006805473ffffffffffffffffffffffffffffffffffffffff8481167fffffffffffffffffffffffff0000000000000000000000000000000000000000928316811790935560058054918516919092161790556040805133815260208101929092527fe79965b5c67dcfb2cf5fe152715e4a7256cee62a3d5dd8484fd8a8539eb8beff910160405180910390a16040805133815273ffffffffffffffffffffffffffffffffffffffff831660208201527f1b9352454524a57a51f24f67dc66d898f616922cd1f7a12d73570ece12b1975c910160405180910390a15050565b60055473ffffffffffffffffffffffffffffffffffffffff1633146105d1576040517f3fe32fba000000000000000000000000000000000000000000000000000000008152336004820152602401610428565b6105db8383610866565b808373ffffffffffffffffffffffffffffffffffffffff167fc263b302aec62d29105026245f19e16f8e0137066ccd4a8bd941f716bd4096bb8460405161062491815260200190565b60405180910390a3505050565b60003361063f8582856108c6565b61064a858585610995565b506001949350505050565b61065f3382610a40565b50565b60075473ffffffffffffffffffffffffffffffffffffffff1633146106b5576040517fe700765e000000000000000000000000000000000000000000000000000000008152336004820152602401610428565b60065473ffffffffffffffffffffffffffffffffffffffff16610704576040517fe6c4247b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600654600780547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff90921691821790556040805133815260208101929092527f5104c9abdc7d111c2aeb4ce890ac70274a4be2ee83f46a62551be5e6ebc82dd0910160405180910390a1565b60055473ffffffffffffffffffffffffffffffffffffffff1633146107d9576040517f3fe32fba000000000000000000000000000000000000000000000000000000008152336004820152602401610428565b6107e38282610a9c565b8173ffffffffffffffffffffffffffffffffffffffff167f919f7e2092ffcc9d09f599be18d8152860b0c054df788a33bc549cdd9d0f15b18260405161082b91815260200190565b60405180910390a25050565b60606004805461031690610f34565b6000336103a7818585610995565b6108618383836001610ab1565b505050565b73ffffffffffffffffffffffffffffffffffffffff82166108b6576040517fec442f0500000000000000000000000000000000000000000000000000000000815260006004820152602401610428565b6108c260008383610bf9565b5050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811461098f5781811015610980576040517ffb8f41b200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff841660048201526024810182905260448101839052606401610428565b61098f84848484036000610ab1565b50505050565b73ffffffffffffffffffffffffffffffffffffffff83166109e5576040517f96c6fd1e00000000000000000000000000000000000000000000000000000000815260006004820152602401610428565b73ffffffffffffffffffffffffffffffffffffffff8216610a35576040517fec442f0500000000000000000000000000000000000000000000000000000000815260006004820152602401610428565b610861838383610bf9565b73ffffffffffffffffffffffffffffffffffffffff8216610a90576040517f96c6fd1e00000000000000000000000000000000000000000000000000000000815260006004820152602401610428565b6108c282600083610bf9565b610aa78233836108c6565b6108c28282610a40565b73ffffffffffffffffffffffffffffffffffffffff8416610b01576040517fe602df0500000000000000000000000000000000000000000000000000000000815260006004820152602401610428565b73ffffffffffffffffffffffffffffffffffffffff8316610b51576040517f94280d6200000000000000000000000000000000000000000000000000000000815260006004820152602401610428565b73ffffffffffffffffffffffffffffffffffffffff8085166000908152600160209081526040808320938716835292905220829055801561098f578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051610beb91815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff8316610c31578060026000828254610c269190610f87565b90915550610ce39050565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205481811015610cb7576040517fe450d38c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff851660048201526024810182905260448101839052606401610428565b73ffffffffffffffffffffffffffffffffffffffff841660009081526020819052604090209082900390555b73ffffffffffffffffffffffffffffffffffffffff8216610d0c57600280548290039055610d38565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090208054820190555b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161062491815260200190565b602081526000825180602084015260005b81811015610dc55760208186018101516040868401015201610da8565b5060006040828501015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011684010191505092915050565b803573ffffffffffffffffffffffffffffffffffffffff81168114610e2757600080fd5b919050565b60008060408385031215610e3f57600080fd5b610e4883610e03565b946020939093013593505050565b60008060408385031215610e6957600080fd5b610e7283610e03565b9150610e8060208401610e03565b90509250929050565b600080600060608486031215610e9e57600080fd5b610ea784610e03565b95602085013595506040909401359392505050565b600080600060608486031215610ed157600080fd5b610eda84610e03565b9250610ee860208501610e03565b929592945050506040919091013590565b600060208284031215610f0b57600080fd5b5035919050565b600060208284031215610f2457600080fd5b610f2d82610e03565b9392505050565b600181811c90821680610f4857607f821691505b602082108103610f81577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b808201808211156103ad577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea2646970667358221220085f01204b33dc17013c78c74fbca32a3da2c0b384ce7c8878c889551af28c6164736f6c634300081a003360a060405234801561001057600080fd5b506040516116fe3803806116fe83398101604081905261002f916101e5565b60016000556002805460ff191690556001600160a01b038316158061005b57506001600160a01b038216155b8061006d57506001600160a01b038116155b1561008b5760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b0383166080526100a3600082610134565b506100ce7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a82610134565b506100f97f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e483610134565b506101126000805160206116de83398151915282610134565b5061012b6000805160206116de83398151915283610134565b50505050610228565b60008281526001602090815260408083206001600160a01b038516845290915281205460ff166101bf5760008381526001602081815260408084206001600160a01b0387168086529252808420805460ff19169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45060016101c3565b5060005b92915050565b80516001600160a01b03811681146101e057600080fd5b919050565b6000806000606084860312156101fa57600080fd5b610203846101c9565b9250610211602085016101c9565b915061021f604085016101c9565b90509250925092565b60805161147f61025f6000396000818161019e0152818161050001528181610562015281816108f70152610959015261147f6000f3fe608060405234801561001057600080fd5b506004361061016c5760003560e01c806385f438c1116100cd578063c8a0236211610081578063d936547e11610066578063d936547e14610355578063d9caed1214610378578063e63ab1e91461038b57600080fd5b8063c8a023621461032f578063d547741f1461034257600080fd5b80639a590427116100b25780639a590427146103015780639b19251a14610314578063a217fddf1461032757600080fd5b806385f438c11461029457806391d14854146102bb57600080fd5b806336568abe11610124578063570618e111610109578063570618e11461025a5780635c975abb146102815780638456cb591461028c57600080fd5b806336568abe1461023f5780633f4ba83a1461025257600080fd5b806321fc65f21161015557806321fc65f2146101e5578063248a9ca3146101fa5780632f2ff15d1461022c57600080fd5b806301ffc9a714610171578063116191b614610199575b600080fd5b61018461017f36600461118a565b6103b2565b60405190151581526020015b60405180910390f35b6101c07f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610190565b6101f86101f33660046111f5565b61044b565b005b61021e610208366004611292565b6000908152600160208190526040909120015490565b604051908152602001610190565b6101f861023a3660046112ab565b61064c565b6101f861024d3660046112ab565b610678565b6101f86106d6565b61021e7f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a81565b60025460ff16610184565b6101f861070b565b61021e7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b6101846102c93660046112ab565b600091825260016020908152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b6101f861030f3660046112d7565b61073d565b6101f86103223660046112d7565b6107be565b61021e600081565b6101f861033d3660046111f5565b610842565b6101f86103503660046112ab565b610a29565b6101846103633660046112d7565b60036020526000908152604090205460ff1681565b6101f86103863660046112f2565b610a4f565b61021e7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061044557507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b610453610b7b565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461047d81610bbe565b610485610bc8565b73ffffffffffffffffffffffffffffffffffffffff861660009081526003602052604090205460ff166104e4576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61052573ffffffffffffffffffffffffffffffffffffffff87167f000000000000000000000000000000000000000000000000000000000000000086610c07565b6040517f5131ab5900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690635131ab599061059f9089908990899089908990600401611378565b600060405180830381600087803b1580156105b957600080fd5b505af11580156105cd573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167f85b5be9cf454e05e0bddf49315178102227c312078eefa3c00294fb4d912ae4e868686604051610632939291906113d5565b60405180910390a3506106456001600055565b5050505050565b6000828152600160208190526040909120015461066881610bbe565b6106728383610c94565b50505050565b73ffffffffffffffffffffffffffffffffffffffff811633146106c7576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6106d18282610d41565b505050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61070081610bbe565b610708610de2565b50565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61073581610bbe565b610708610e41565b7f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a61076781610bbe565b73ffffffffffffffffffffffffffffffffffffffff8216600081815260036020526040808220805460ff19169055517f51085ddf9ebdded84b76e829eb58c4078e4b5bdf97d9a94723f336039da467919190a25050565b7f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a6107e881610bbe565b73ffffffffffffffffffffffffffffffffffffffff8216600081815260036020526040808220805460ff19166001179055517faab7954e9d246b167ef88aeddad35209ca2489d95a8aeb59e288d9b19fae5a549190a25050565b61084a610b7b565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461087481610bbe565b61087c610bc8565b73ffffffffffffffffffffffffffffffffffffffff861660009081526003602052604090205460ff166108db576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61091c73ffffffffffffffffffffffffffffffffffffffff87167f000000000000000000000000000000000000000000000000000000000000000086610c07565b6040517fb8969bd400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063b8969bd4906109969089908990899089908990600401611378565b600060405180830381600087803b1580156109b057600080fd5b505af11580156109c4573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fb9d4efa96044e5f5e03e696fa9ae2ff66911cc27e8a637c3627c75bc5b2241c8868686604051610632939291906113d5565b60008281526001602081905260409091200154610a4581610bbe565b6106728383610d41565b610a57610b7b565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e4610a8181610bbe565b610a89610bc8565b73ffffffffffffffffffffffffffffffffffffffff841660009081526003602052604090205460ff16610ae8576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610b0973ffffffffffffffffffffffffffffffffffffffff85168484610c07565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f9b1bfa7fa9ee420a16e124f794c35ac9f90472acc99140eb2f6447c714cad8eb84604051610b6891815260200190565b60405180910390a3506106d16001600055565b600260005403610bb7576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b6107088133610e7e565b60025460ff1615610c05576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6040805173ffffffffffffffffffffffffffffffffffffffff8416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb000000000000000000000000000000000000000000000000000000001790526106d1908490610f0f565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff16610d3957600083815260016020818152604080842073ffffffffffffffffffffffffffffffffffffffff87168086529252808420805460ff19169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a4506001610445565b506000610445565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff1615610d3957600083815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff86168085529252808320805460ff1916905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a4506001610445565b610dea610fa5565b6002805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b610e49610bc8565b6002805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258610e173390565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16610f0b576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82166004820152602481018390526044015b60405180910390fd5b5050565b6000610f3173ffffffffffffffffffffffffffffffffffffffff841683610fe1565b90508051600014158015610f56575080806020019051810190610f5491906113f8565b155b156106d1576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84166004820152602401610f02565b60025460ff16610c05576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6060610fef83836000610ff6565b9392505050565b606081471015611034576040517fcd786059000000000000000000000000000000000000000000000000000000008152306004820152602401610f02565b6000808573ffffffffffffffffffffffffffffffffffffffff16848660405161105d919061141a565b60006040518083038185875af1925050503d806000811461109a576040519150601f19603f3d011682016040523d82523d6000602084013e61109f565b606091505b50915091506110af8683836110b9565b9695505050505050565b6060826110ce576110c982611148565b610fef565b81511580156110f2575073ffffffffffffffffffffffffffffffffffffffff84163b155b15611141576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85166004820152602401610f02565b5080610fef565b8051156111585780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006020828403121561119c57600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610fef57600080fd5b803573ffffffffffffffffffffffffffffffffffffffff811681146111f057600080fd5b919050565b60008060008060006080868803121561120d57600080fd5b611216866111cc565b9450611224602087016111cc565b935060408601359250606086013567ffffffffffffffff81111561124757600080fd5b8601601f8101881361125857600080fd5b803567ffffffffffffffff81111561126f57600080fd5b88602082840101111561128157600080fd5b959894975092955050506020019190565b6000602082840312156112a457600080fd5b5035919050565b600080604083850312156112be57600080fd5b823591506112ce602084016111cc565b90509250929050565b6000602082840312156112e957600080fd5b610fef826111cc565b60008060006060848603121561130757600080fd5b611310846111cc565b925061131e602085016111cc565b929592945050506040919091013590565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff8616815273ffffffffffffffffffffffffffffffffffffffff851660208201528360408201526080606082015260006113ca60808301848661132f565b979650505050505050565b8381526040602082015260006113ef60408301848661132f565b95945050505050565b60006020828403121561140a57600080fd5b81518015158114610fef57600080fd5b6000825160005b8181101561143b5760208186018101518583015201611421565b50600092019182525091905056fea26469706673582212202f3991d39315b7c0e5ef6fd88336a0f791f8e1cce0a70cb66f2c4c9404215ae364736f6c634300081a00338619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a60c060405260001960035534801561001657600080fd5b5060405161155a38038061155a83398101604081905261003591610220565b60016000819055805460ff19169055838383836001600160a01b038416158061006557506001600160a01b038316155b8061007757506001600160a01b038216155b8061008957506001600160a01b038116155b156100a75760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b03808516608052831660a0526100c5600082610154565b506100f07f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e483610154565b5061011b7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb83610154565b506101467f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a82610154565b505050505050505050610274565b60008281526002602090815260408083206001600160a01b038516845290915281205460ff166101fa5760008381526002602090815260408083206001600160a01b03861684529091529020805460ff191660011790556101b23390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45060016101fe565b5060005b92915050565b80516001600160a01b038116811461021b57600080fd5b919050565b6000806000806080858703121561023657600080fd5b61023f85610204565b935061024d60208601610204565b925061025b60408601610204565b915061026960608601610204565b905092959194509250565b60805160a0516112826102d86000396000818161021d01528181610531015281816108240152818161097b01528181610ad00152610bf20152600081816101d1015281816104a1015281816105040152818161079401526107f701526112826000f3fe608060405234801561001057600080fd5b50600436106101775760003560e01c80635e3e9fef116100d857806391d148541161008c578063d547741f11610066578063d547741f14610386578063d5abeb0114610399578063e63ab1e9146103a257600080fd5b806391d1485414610311578063a217fddf14610357578063a783c7891461035f57600080fd5b8063743e0c9b116100bd578063743e0c9b146102cf5780638456cb59146102e257806385f438c1146102ea57600080fd5b80635e3e9fef146102a95780636f8b44b0146102bc57600080fd5b8063248a9ca31161012f57806336568abe1161011457806336568abe146102835780633f4ba83a146102965780635c975abb1461029e57600080fd5b8063248a9ca31461023f5780632f2ff15d1461027057600080fd5b8063106e629011610160578063106e6290146101b9578063116191b6146101cc57806321e093b11461021857600080fd5b806301ffc9a71461017c57806302d5c899146101a4575b600080fd5b61018f61018a366004610fb4565b6103c9565b60405190151581526020015b60405180910390f35b6101b76101b2366004611026565b610462565b005b6101b76101c73660046110b8565b6105f7565b6101f37f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161019b565b6101f37f000000000000000000000000000000000000000000000000000000000000000081565b61026261024d3660046110eb565b60009081526002602052604090206001015490565b60405190815260200161019b565b6101b761027e366004611104565b61069c565b6101b7610291366004611104565b6106c7565b6101b7610720565b60015460ff1661018f565b6101b76102b7366004611026565b610755565b6101b76102ca3660046110eb565b6108d0565b6101b76102dd3660046110eb565b61093e565b6101b76109e8565b6102627f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b61018f61031f366004611104565b600091825260026020908152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b610262600081565b6102627f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb81565b6101b7610394366004611104565b610a1a565b61026260035481565b6102627f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061045c57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b61046a610a3f565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461049481610a82565b61049c610a8c565b6104c77f00000000000000000000000000000000000000000000000000000000000000008684610acb565b6040517fb8969bd400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063b8969bd490610561907f0000000000000000000000000000000000000000000000000000000000000000908a908a908a908a90600401611179565b600060405180830381600087803b15801561057b57600080fd5b505af115801561058f573d6000803e3d6000fd5b505050508573ffffffffffffffffffffffffffffffffffffffff167fba96f26bdda53eb8c8ba39045dfb4ff39753fbc7a6edcf250a88e75e78d102fe8686866040516105dd939291906111d6565b60405180910390a2506105f06001600055565b5050505050565b6105ff610a3f565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461062981610a82565b610631610a8c565b61063c848484610acb565b8373ffffffffffffffffffffffffffffffffffffffff167f884edad9ce6fa2440d8a54cc123490eb96d2768479d49ff9c7366125a94243648460405161068491815260200190565b60405180910390a2506106976001600055565b505050565b6000828152600260205260409020600101546106b781610a82565b6106c18383610c53565b50505050565b73ffffffffffffffffffffffffffffffffffffffff81163314610716576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6106978282610d53565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61074a81610a82565b610752610e12565b50565b61075d610a3f565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461078781610a82565b61078f610a8c565b6107ba7f00000000000000000000000000000000000000000000000000000000000000008684610acb565b6040517f5131ab5900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690635131ab5990610854907f0000000000000000000000000000000000000000000000000000000000000000908a908a908a908a90600401611179565b600060405180830381600087803b15801561086e57600080fd5b505af1158015610882573d6000803e3d6000fd5b505050508573ffffffffffffffffffffffffffffffffffffffff167f7772f56296d3a5202974a45c61c9188d844ab4d6eeb18c851e4b8d5384ca6ced8686866040516105dd939291906111d6565b7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb6108fa81610a82565b610902610a8c565b60038290556040518281527f7810bd47de260c3e9ee10061cf438099dd12256c79485f12f94dbccc981e806c9060200160405180910390a15050565b610946610a8c565b6040517f79cc6790000000000000000000000000000000000000000000000000000000008152336004820152602481018290527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16906379cc679090604401600060405180830381600087803b1580156109d457600080fd5b505af11580156105f0573d6000803e3d6000fd5b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610a1281610a82565b610752610e8f565b600082815260026020526040902060010154610a3581610a82565b6106c18383610d53565b600260005403610a7b576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b6107528133610ee8565b60015460ff1615610ac9576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6003547f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b39573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b5d91906111f9565b610b679084611212565b1115610b9f576040517fc30436e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f1e458bee00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff848116600483015260248201849052604482018390527f00000000000000000000000000000000000000000000000000000000000000001690631e458bee90606401600060405180830381600087803b158015610c3657600080fd5b505af1158015610c4a573d6000803e3d6000fd5b50505050505050565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff16610d4b57600083815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff86168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055610ce93390565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a450600161045c565b50600061045c565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff1615610d4b57600083815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8616808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a450600161045c565b610e1a610f78565b600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b610e97610a8c565b600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016811790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25833610e65565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16610f74576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff821660048201526024810183905260440160405180910390fd5b5050565b60015460ff16610ac9576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060208284031215610fc657600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610ff657600080fd5b9392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461102157600080fd5b919050565b60008060008060006080868803121561103e57600080fd5b61104786610ffd565b945060208601359350604086013567ffffffffffffffff81111561106a57600080fd5b8601601f8101881361107b57600080fd5b803567ffffffffffffffff81111561109257600080fd5b8860208284010111156110a457600080fd5b959894975060200195606001359392505050565b6000806000606084860312156110cd57600080fd5b6110d684610ffd565b95602085013595506040909401359392505050565b6000602082840312156110fd57600080fd5b5035919050565b6000806040838503121561111757600080fd5b8235915061112760208401610ffd565b90509250929050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff8616815273ffffffffffffffffffffffffffffffffffffffff851660208201528360408201526080606082015260006111cb608083018486611130565b979650505050505050565b8381526040602082015260006111f0604083018486611130565b95945050505050565b60006020828403121561120b57600080fd5b5051919050565b8082018082111561045c577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea2646970667358221220de5fa55e0ca79ea2f08903481d01ea00bbbf346b9cfba44e12a2dd6f3a6f2e8a64736f6c634300081a0033a2646970667358221220ec9a3b01b984d455c9b95fe406e81f3b45ce55ffbea3320b9af79e44452ec74664736f6c634300081a0033", } // GatewayEVMInboundTestABI is the input ABI used to generate the binding from. @@ -634,6 +634,27 @@ func (_GatewayEVMInboundTest *GatewayEVMInboundTestTransactorSession) TestCallWi return _GatewayEVMInboundTest.Contract.TestCallWithPayload(&_GatewayEVMInboundTest.TransactOpts) } +// TestCallWithPayloadFailsIfDestinationIsZeroAddress is a paid mutator transaction binding the contract method 0x51da903d. +// +// Solidity: function testCallWithPayloadFailsIfDestinationIsZeroAddress() returns() +func (_GatewayEVMInboundTest *GatewayEVMInboundTestTransactor) TestCallWithPayloadFailsIfDestinationIsZeroAddress(opts *bind.TransactOpts) (*types.Transaction, error) { + return _GatewayEVMInboundTest.contract.Transact(opts, "testCallWithPayloadFailsIfDestinationIsZeroAddress") +} + +// TestCallWithPayloadFailsIfDestinationIsZeroAddress is a paid mutator transaction binding the contract method 0x51da903d. +// +// Solidity: function testCallWithPayloadFailsIfDestinationIsZeroAddress() returns() +func (_GatewayEVMInboundTest *GatewayEVMInboundTestSession) TestCallWithPayloadFailsIfDestinationIsZeroAddress() (*types.Transaction, error) { + return _GatewayEVMInboundTest.Contract.TestCallWithPayloadFailsIfDestinationIsZeroAddress(&_GatewayEVMInboundTest.TransactOpts) +} + +// TestCallWithPayloadFailsIfDestinationIsZeroAddress is a paid mutator transaction binding the contract method 0x51da903d. +// +// Solidity: function testCallWithPayloadFailsIfDestinationIsZeroAddress() returns() +func (_GatewayEVMInboundTest *GatewayEVMInboundTestTransactorSession) TestCallWithPayloadFailsIfDestinationIsZeroAddress() (*types.Transaction, error) { + return _GatewayEVMInboundTest.Contract.TestCallWithPayloadFailsIfDestinationIsZeroAddress(&_GatewayEVMInboundTest.TransactOpts) +} + // TestDepositERC20ToCustody is a paid mutator transaction binding the contract method 0x6459542a. // // Solidity: function testDepositERC20ToCustody() returns() diff --git a/v2/pkg/gatewayevm.t.sol/gatewayevmtest.go b/v2/pkg/gatewayevm.t.sol/gatewayevmtest.go index 93e8a2f0..702581bb 100644 --- a/v2/pkg/gatewayevm.t.sol/gatewayevmtest.go +++ b/v2/pkg/gatewayevm.t.sol/gatewayevmtest.go @@ -50,7 +50,7 @@ type StdInvariantFuzzSelector struct { // GatewayEVMTestMetaData contains all meta data concerning the GatewayEVMTest contract. var GatewayEVMTestMetaData = &bind.MetaData{ ABI: "[{\"type\":\"function\",\"name\":\"ASSET_HANDLER_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"DEFAULT_ADMIN_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"IS_TEST\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"PAUSER_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"TSS_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"WITHDRAWER_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeArtifacts\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedArtifacts_\",\"type\":\"string[]\",\"internalType\":\"string[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeContracts\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedContracts_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeSelectors\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedSelectors_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzSelector[]\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"selectors\",\"type\":\"bytes4[]\",\"internalType\":\"bytes4[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeSenders\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedSenders_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"failed\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"setUp\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"targetArtifactSelectors\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedArtifactSelectors_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzArtifactSelector[]\",\"components\":[{\"name\":\"artifact\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"selectors\",\"type\":\"bytes4[]\",\"internalType\":\"bytes4[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetArtifacts\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedArtifacts_\",\"type\":\"string[]\",\"internalType\":\"string[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetContracts\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedContracts_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetInterfaces\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedInterfaces_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzInterface[]\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"artifacts\",\"type\":\"string[]\",\"internalType\":\"string[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetSelectors\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedSelectors_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzSelector[]\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"selectors\",\"type\":\"bytes4[]\",\"internalType\":\"bytes4[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetSenders\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedSenders_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"testExecuteFailsIfDestinationIsZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testExecuteRevert\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testExecuteRevertFailsIfReceiverIsZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testExecuteRevertFailsIfSenderIsNotTSS\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testExecuteWithERC20FailsIfNotCustodyOrConnector\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testForwardCallToReceiveNoParams\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testForwardCallToReceiveNoParamsTogglePause\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testForwardCallToReceiveNonPayable\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testForwardCallToReceiveNonPayableFailsIfSenderIsNotTSS\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testForwardCallToReceivePayable\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testRevertWithERC20FailsIfNotCustodyOrConnector\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testSetConnectorFailsIfSenderIsNotAdmin\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testSetConnectorFailsIfSet\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testSetConnectorFailsIfZero\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testSetCustodyFailsIfSenderIsNotAdmin\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testSetCustodyFailsIfSet\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testSetCustodyFailsIfZero\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"event\",\"name\":\"Call\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"receiver\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Deposit\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"receiver\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"asset\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Executed\",\"inputs\":[{\"name\":\"destination\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ExecutedWithERC20\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedERC20\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"token\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"destination\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedNoParams\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedNonPayable\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"strs\",\"type\":\"string[]\",\"indexed\":false,\"internalType\":\"string[]\"},{\"name\":\"nums\",\"type\":\"uint256[]\",\"indexed\":false,\"internalType\":\"uint256[]\"},{\"name\":\"flag\",\"type\":\"bool\",\"indexed\":false,\"internalType\":\"bool\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedPayable\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"str\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"num\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"flag\",\"type\":\"bool\",\"indexed\":false,\"internalType\":\"bool\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedRevert\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Reverted\",\"inputs\":[{\"name\":\"destination\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RevertedWithERC20\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Unwhitelisted\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Whitelisted\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Withdraw\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"WithdrawAndCall\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"WithdrawAndRevert\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log\",\"inputs\":[{\"name\":\"\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_address\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_array\",\"inputs\":[{\"name\":\"val\",\"type\":\"uint256[]\",\"indexed\":false,\"internalType\":\"uint256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_array\",\"inputs\":[{\"name\":\"val\",\"type\":\"int256[]\",\"indexed\":false,\"internalType\":\"int256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_array\",\"inputs\":[{\"name\":\"val\",\"type\":\"address[]\",\"indexed\":false,\"internalType\":\"address[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_bytes\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_bytes32\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_int\",\"inputs\":[{\"name\":\"\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_address\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_array\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"uint256[]\",\"indexed\":false,\"internalType\":\"uint256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_array\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"int256[]\",\"indexed\":false,\"internalType\":\"int256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_array\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"address[]\",\"indexed\":false,\"internalType\":\"address[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_bytes\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_bytes32\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_decimal_int\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"},{\"name\":\"decimals\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_decimal_uint\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"decimals\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_int\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_string\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_uint\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_string\",\"inputs\":[{\"name\":\"\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_uint\",\"inputs\":[{\"name\":\"\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"logs\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"AccessControlUnauthorizedAccount\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"neededRole\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"type\":\"error\",\"name\":\"ApprovalFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ConnectorInitialized\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"CustodyInitialized\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"DepositFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"EnforcedPause\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ExecutionFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientERC20Amount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientETHAmount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NotWhitelistedInCustody\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZeroAddress\",\"inputs\":[]}]", - Bin: "0x6080604052600c8054600160ff199182168117909255601f80549091169091179055348015602c57600080fd5b5061f7208061003c6000396000f3fe608060405234801561001057600080fd5b50600436106102415760003560e01c8063a217fddf11610145578063cebad2a6116100bd578063e6afc7901161008c578063fa18c09b11610071578063fa18c09b1461042c578063fa7626d414610434578063fe7bdbb21461044157600080fd5b8063e6afc7901461041c578063f68bd1c01461042457600080fd5b8063cebad2a6146103dd578063dd51e82f146103e5578063e20c9f71146103ed578063e63ab1e9146103f557600080fd5b8063b124dbf511610114578063ba414fa6116100f9578063ba414fa6146103b5578063ccf20616146103cd578063ce5871e1146103d557600080fd5b8063b124dbf5146103a5578063b5508aa9146103ad57600080fd5b8063a217fddf14610366578063a56f7a4b1461036e578063a783c78914610376578063b0464fdc1461039d57600080fd5b806344671b94116101d85780637d7f772a116101a757806385226c811161018c57806385226c811461031557806385f438c11461032a578063916a17c61461035157600080fd5b80637d7f772a146103055780637ebf744f1461030d57600080fd5b806344671b94146102ab57806351010e49146102b35780635d62c860146102bb57806366d9a9a0146102f057600080fd5b80631ed7831c116102145780631ed7831c146102685780632ade3880146102865780633e5e3c231461029b5780633f7286f4146102a357600080fd5b806304b974f9146102465780630a9254e4146102505780631226c655146102585780631855c33714610260575b600080fd5b61024e610449565b005b61024e610656565b61024e610fb8565b61024e611129565b61027061129e565b60405161027d9190618684565b60405180910390f35b61028e611300565b60405161027d9190618720565b610270611442565b6102706114a2565b61024e611502565b61024e611881565b6102e27f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b981565b60405190815260200161027d565b6102f8611a5a565b60405161027d9190618886565b61024e611bdc565b61024e611f3f565b61031d6120b4565b60405161027d9190618980565b6102e27f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b610359612184565b60405161027d9190618993565b6102e2600081565b61024e61227f565b6102e27f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb81565b6103596123d1565b61024e6124cc565b61031d612770565b6103bd612840565b604051901515815260200161027d565b61024e612914565b61024e612a66565b61024e612bd7565b61024e612df8565b6102706135ed565b6102e27f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b61024e61364d565b61024e6138bb565b61024e613cb0565b601f546103bd9060ff1681565b61024e614008565b6040805160048082526024820183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f6ed7016900000000000000000000000000000000000000000000000000000000179052602854925163ca669fa760e01b81529192737109709ecfa91a80626ff3989d68f67f5b1dd12d9263ca669fa7926104f0926001600160a01b031691016001600160a01b0391909116815260200190565b600060405180830381600087803b15801561050a57600080fd5b505af115801561051e573d6000803e3d6000fd5b50506040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b1580156105a757600080fd5b505af11580156105bb573d6000803e3d6000fd5b50506020546040517f1cff79cd0000000000000000000000000000000000000000000000000000000081526001600160a01b039091169250631cff79cd915061060b906000908590600401618a2a565b6000604051808303816000875af115801561062a573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526106529190810190618b34565b5050565b602680547fffffffffffffffffffffffff00000000000000000000000000000000000000009081163017909155602780548216611234179055602880549091166156781790556040516106a89061858a565b60408082526004908201527f746573740000000000000000000000000000000000000000000000000000000060608201526080602082018190526003908201527f54544b000000000000000000000000000000000000000000000000000000000060a082015260c001604051809103906000f08015801561072d573d6000803e3d6000fd5b50602480547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03928316179055602854604051911690819061077690618597565b6001600160a01b03928316815291166020820152604001604051809103906000f0801580156107a9573d6000803e3d6000fd5b50602580547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03928316908117909155604080518082018252600e81527f4761746577617945564d2e736f6c000000000000000000000000000000000000602082015260285460265492519085166024820152604481019390935292166064820152610898919060840160408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fc0c53b8b0000000000000000000000000000000000000000000000000000000017905261447d565b601f80547fffffffffffffffffffffff0000000000000000000000000000000000000000ff166101006001600160a01b0393841681029190911791829055602080549190920483167fffffffffffffffffffffffff00000000000000000000000000000000000000009091168117909155602854602654604051929391821692911690610924906185a4565b6001600160a01b03938416815291831660208301529091166040820152606001604051809103906000f080158015610960573d6000803e3d6000fd5b50602280547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392831617905560205460255460285460265460405193851694928316939183169216906109bb906185b1565b6001600160a01b039485168152928416602084015290831660408301529091166060820152608001604051809103906000f0801580156109ff573d6000803e3d6000fd5b50602380547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392831617905560285460405163ca669fa760e01b815291166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015610a8457600080fd5b505af1158015610a98573d6000803e3d6000fd5b50506025546028546023546040517f15d57fd40000000000000000000000000000000000000000000000000000000081526001600160a01b0392831660048201529082166024820152911692506315d57fd49150604401600060405180830381600087803b158015610b0957600080fd5b505af1158015610b1d573d6000803e3d6000fd5b50505050604051610b2d906185be565b604051809103906000f080158015610b49573d6000803e3d6000fd5b50602180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039283161790556028546040517fc88a5e6d00000000000000000000000000000000000000000000000000000000815291166004820152670de0b6b3a76400006024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c88a5e6d90604401600060405180830381600087803b158015610bf557600080fd5b505af1158015610c09573d6000803e3d6000fd5b50506026546040517f06447d560000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506306447d569150602401600060405180830381600087803b158015610c7f57600080fd5b505af1158015610c93573d6000803e3d6000fd5b50506020546022546040517fae7a3a6f0000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201529116925063ae7a3a6f9150602401600060405180830381600087803b158015610cf957600080fd5b505af1158015610d0d573d6000803e3d6000fd5b50506020546023546040517f10188aef0000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152911692506310188aef9150602401600060405180830381600087803b158015610d7357600080fd5b505af1158015610d87573d6000803e3d6000fd5b505050507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b03166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610de957600080fd5b505af1158015610dfd573d6000803e3d6000fd5b5050602480546026546040517f40c10f190000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620f4240938101939093521692506340c10f199150604401600060405180830381600087803b158015610e6e57600080fd5b505af1158015610e82573d6000803e3d6000fd5b5050602480546022546040517fa9059cbb0000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201526207a1209381019390935216925063a9059cbb91506044016020604051808303816000875af1158015610ef8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f1c9190618b69565b506028546040517fc88a5e6d0000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152670de0b6b3a76400006024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c88a5e6d906044015b600060405180830381600087803b158015610f9e57600080fd5b505af1158015610fb2573d6000803e3d6000fd5b50505050565b6026546040517f06447d560000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906306447d5690602401600060405180830381600087803b15801561102a57600080fd5b505af115801561103e573d6000803e3d6000fd5b50506040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b1580156110c757600080fd5b505af11580156110db573d6000803e3d6000fd5b50506020546040517fae7a3a6f000000000000000000000000000000000000000000000000000000008152600060048201526001600160a01b03909116925063ae7a3a6f9150602401610f84565b6026546040517f06447d560000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906306447d5690602401600060405180830381600087803b15801561119b57600080fd5b505af11580156111af573d6000803e3d6000fd5b50506040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fb337f378000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e091506024015b600060405180830381600087803b15801561123957600080fd5b505af115801561124d573d6000803e3d6000fd5b50506020546022546040517fae7a3a6f0000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201529116925063ae7a3a6f9150602401610f84565b606060168054806020026020016040519081016040528092919081815260200182805480156112f657602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116112d8575b5050505050905090565b6060601e805480602002602001604051908101604052809291908181526020016000905b8282101561143957600084815260208082206040805180820182526002870290920180546001600160a01b03168352600181018054835181870281018701909452808452939591948681019491929084015b8282101561142257838290600052602060002001805461139590618b8b565b80601f01602080910402602001604051908101604052809291908181526020018280546113c190618b8b565b801561140e5780601f106113e35761010080835404028352916020019161140e565b820191906000526020600020905b8154815290600101906020018083116113f157829003601f168201915b505050505081526020019060010190611376565b505050508152505081526020019060010190611324565b50505050905090565b606060188054806020026020016040519081016040528092919081815260200182805480156112f6576020028201919060005260206000209081546001600160a01b031681526001909101906020018083116112d8575050505050905090565b606060178054806020026020016040519081016040528092919081815260200182805480156112f6576020028201919060005260206000209081546001600160a01b031681526001909101906020018083116112d8575050505050905090565b6040805160048082526024820183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f6ed701690000000000000000000000000000000000000000000000000000000017905260215492517ff30c7ba30000000000000000000000000000000000000000000000000000000081529192737109709ecfa91a80626ff3989d68f67f5b1dd12d9263f30c7ba3926115b8926001600160a01b031691600091879101618bd8565b600060405180830381600087803b1580156115d257600080fd5b505af11580156115e6573d6000803e3d6000fd5b50506021546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b15801561167857600080fd5b505af115801561168c573d6000803e3d6000fd5b5050602080546040516001600160a01b0390911681527fbcaadb46b82a48af60b608f58959ae6b8310d1b0a0d094c2e9ec3208ed39f2a0935001905060405180910390a16020546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b15801561175e57600080fd5b505af1158015611772573d6000803e3d6000fd5b50506021546040516001600160a01b0390911692507fcaf938de11c367272220bfd1d2baa99ca46665e7bc4d85f00adb51b90fe1fa9f91506117b8906000908590618c00565b60405180910390a260285460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561181957600080fd5b505af115801561182d573d6000803e3d6000fd5b50506020546021546040517f1cff79cd0000000000000000000000000000000000000000000000000000000081526001600160a01b039283169450631cff79cd935061060b92909116908590600401618a2a565b6040517f68656c6c6f0000000000000000000000000000000000000000000000000000006020820152670de0b6b3a76400009060009060250160408051808303601f190181529082905260285463ca669fa760e01b83526001600160a01b031660048301529150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561192157600080fd5b505af1158015611935573d6000803e3d6000fd5b50506040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b1580156119be57600080fd5b505af11580156119d2573d6000803e3d6000fd5b50506020546040517f35c018db0000000000000000000000000000000000000000000000000000000081526001600160a01b0390911692506335c018db91508490611a24906000908690600401618a2a565b6000604051808303818588803b158015611a3d57600080fd5b505af1158015611a51573d6000803e3d6000fd5b50505050505050565b6060601b805480602002602001604051908101604052809291908181526020016000905b828210156114395783829060005260206000209060020201604051806040016040529081600082018054611ab190618b8b565b80601f0160208091040260200160405190810160405280929190818152602001828054611add90618b8b565b8015611b2a5780601f10611aff57610100808354040283529160200191611b2a565b820191906000526020600020905b815481529060010190602001808311611b0d57829003601f168201915b5050505050815260200160018201805480602002602001604051908101604052809291908181526020018280548015611bc457602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019060040190602082600301049283019260010382029150808411611b715790505b50505050508152505081526020019060010190611a7e565b604080516001808252818301909252600091816020015b6060815260200190600190039081611bf35790505090506040518060400160405280600f81526020017f48656c6c6f2c20466f756e64727921000000000000000000000000000000000081525081600081518110611c5357611c53618c19565b6020908102919091010152604080516001808252818301909252600091816020016020820280368337019050509050602a81600081518110611c9757611c97618c19565b6020908102919091010152604051600190600090611cbd90859085908590602401618c7a565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167ff05b6abf00000000000000000000000000000000000000000000000000000000179052602654905163ca669fa760e01b81526001600160a01b039091166004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015611d7057600080fd5b505af1158015611d84573d6000803e3d6000fd5b5050602654604080516001600160a01b0390921660248301527f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb60448084019190915281518084039091018152606490920181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb39250611e6f9190600401618cb2565b600060405180830381600087803b158015611e8957600080fd5b505af1158015611e9d573d6000803e3d6000fd5b50506020546021546040517f1cff79cd0000000000000000000000000000000000000000000000000000000081526001600160a01b039283169450631cff79cd9350611ef192909116908590600401618a2a565b6000604051808303816000875af1158015611f10573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611f389190810190618b34565b5050505050565b6026546040517f06447d560000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906306447d5690602401600060405180830381600087803b158015611fb157600080fd5b505af1158015611fc5573d6000803e3d6000fd5b50506040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527f0c8dc016000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e091506024015b600060405180830381600087803b15801561204f57600080fd5b505af1158015612063573d6000803e3d6000fd5b50506020546023546040517f10188aef0000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152911692506310188aef9150602401610f84565b6060601a805480602002602001604051908101604052809291908181526020016000905b828210156114395783829060005260206000200180546120f790618b8b565b80601f016020809104026020016040519081016040528092919081815260200182805461212390618b8b565b80156121705780601f1061214557610100808354040283529160200191612170565b820191906000526020600020905b81548152906001019060200180831161215357829003601f168201915b5050505050815260200190600101906120d8565b6060601d805480602002602001604051908101604052809291908181526020016000905b828210156114395760008481526020908190206040805180820182526002860290920180546001600160a01b0316835260018101805483518187028101870190945280845293949193858301939283018282801561226757602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190600401906020826003010492830192600103820291508084116122145790505b505050505081525050815260200190600101906121a8565b6028546040517f06447d560000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906306447d5690602401600060405180830381600087803b1580156122f157600080fd5b505af1158015612305573d6000803e3d6000fd5b5050602854604080516001600160a01b039092166024830152600060448084019190915281518084039091018152606490920181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb3925061121f9190600401618cb2565b6060601c805480602002602001604051908101604052809291908181526020016000905b828210156114395760008481526020908190206040805180820182526002860290920180546001600160a01b031683526001810180548351818702810187019094528084529394919385830193928301828280156124b457602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190600401906020826003010492830192600103820291508084116124615790505b505050505081525050815260200190600101906123f5565b60248054602754604051620186a09381018490526001600160a01b0392831660448201529116606482015260009060840160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f357fc5a200000000000000000000000000000000000000000000000000000000179052602654905163ca669fa760e01b81526001600160a01b039091166004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156125b057600080fd5b505af11580156125c4573d6000803e3d6000fd5b5050602654604080516001600160a01b0390921660248301527f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b960448084019190915281518084039091018152606490920181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb392506126af9190600401618cb2565b600060405180830381600087803b1580156126c957600080fd5b505af11580156126dd573d6000803e3d6000fd5b50506020546024546027546040517fb8969bd40000000000000000000000000000000000000000000000000000000081526001600160a01b03938416955063b8969bd4945061273a93928316929091169087908790600401618cc5565b600060405180830381600087803b15801561275457600080fd5b505af1158015612768573d6000803e3d6000fd5b505050505050565b60606019805480602002602001604051908101604052809291908181526020016000905b828210156114395783829060005260206000200180546127b390618b8b565b80601f01602080910402602001604051908101604052809291908181526020018280546127df90618b8b565b801561282c5780601f106128015761010080835404028352916020019161282c565b820191906000526020600020905b81548152906001019060200180831161280f57829003601f168201915b505050505081526020019060010190612794565b60085460009060ff1615612858575060085460ff1690565b6040517f667f9d70000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d600482018190527f6661696c65640000000000000000000000000000000000000000000000000000602483015260009163667f9d7090604401602060405180830381865afa1580156128e9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061290d9190618cfc565b1415905090565b6028546040517f06447d560000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906306447d5690602401600060405180830381600087803b15801561298657600080fd5b505af115801561299a573d6000803e3d6000fd5b5050602854604080516001600160a01b039092166024830152600060448084019190915281518084039091018152606490920181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb392506120359190600401618cb2565b6026546040517f06447d560000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906306447d5690602401600060405180830381600087803b158015612ad857600080fd5b505af1158015612aec573d6000803e3d6000fd5b50506040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b158015612b7557600080fd5b505af1158015612b89573d6000803e3d6000fd5b50506020546040517f10188aef000000000000000000000000000000000000000000000000000000008152600060048201526001600160a01b0390911692506310188aef9150602401610f84565b6040517f68656c6c6f0000000000000000000000000000000000000000000000000000006020820152670de0b6b3a76400009060009060250160408051808303601f190181529082905260265463ca669fa760e01b83526001600160a01b031660048301529150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015612c7757600080fd5b505af1158015612c8b573d6000803e3d6000fd5b5050602654604080516001600160a01b0390921660248301527f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb60448084019190915281518084039091018152606490920181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb39250612d769190600401618cb2565b600060405180830381600087803b158015612d9057600080fd5b505af1158015612da4573d6000803e3d6000fd5b50506020546021546040517f35c018db0000000000000000000000000000000000000000000000000000000081526001600160a01b0392831694506335c018db93508692611a249216908690600401618a2a565b60285460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015612e5157600080fd5b505af1158015612e65573d6000803e3d6000fd5b5050602854604080516001600160a01b0390921660248301527f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a60448084019190915281518084039091018152606490920181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb39250612f509190600401618cb2565b600060405180830381600087803b158015612f6a57600080fd5b505af1158015612f7e573d6000803e3d6000fd5b50505050602060009054906101000a90046001600160a01b03166001600160a01b0316638456cb596040518163ffffffff1660e01b8152600401600060405180830381600087803b158015612fd257600080fd5b505af1158015612fe6573d6000803e3d6000fd5b505060285460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b15801561304357600080fd5b505af1158015613057573d6000803e3d6000fd5b5050602854604080516001600160a01b0390921660248301527f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a60448084019190915281518084039091018152606490920181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb392506131429190600401618cb2565b600060405180830381600087803b15801561315c57600080fd5b505af1158015613170573d6000803e3d6000fd5b50505050602060009054906101000a90046001600160a01b03166001600160a01b0316633f4ba83a6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156131c457600080fd5b505af11580156131d8573d6000803e3d6000fd5b505060265460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b15801561323557600080fd5b505af1158015613249573d6000803e3d6000fd5b50505050602060009054906101000a90046001600160a01b03166001600160a01b0316638456cb596040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561329d57600080fd5b505af11580156132b1573d6000803e3d6000fd5b5050604080516004808252602480830184526020830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f6ed701690000000000000000000000000000000000000000000000000000000017905292517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fd93c06650000000000000000000000000000000000000000000000000000000091810191909152909350737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09101600060405180830381600087803b15801561339357600080fd5b505af11580156133a7573d6000803e3d6000fd5b505060285460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b15801561340457600080fd5b505af1158015613418573d6000803e3d6000fd5b50506020546021546040517f1cff79cd0000000000000000000000000000000000000000000000000000000081526001600160a01b039283169450631cff79cd935061346c92909116908590600401618a2a565b6000604051808303816000875af115801561348b573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526134b39190810190618b34565b5060265460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561350d57600080fd5b505af1158015613521573d6000803e3d6000fd5b50505050602060009054906101000a90046001600160a01b03166001600160a01b0316633f4ba83a6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561357557600080fd5b505af1158015613589573d6000803e3d6000fd5b50506021546040517ff30c7ba3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f30c7ba392506115b8916001600160a01b0316906000908690600401618bd8565b606060158054806020026020016040519081016040528092919081815260200182805480156112f6576020028201919060005260206000209081546001600160a01b031681526001909101906020018083116112d8575050505050905090565b60248054602754604051620186a09381018490526001600160a01b0392831660448201529116606482015260009060840160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f357fc5a200000000000000000000000000000000000000000000000000000000179052602654905163ca669fa760e01b81526001600160a01b039091166004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561373157600080fd5b505af1158015613745573d6000803e3d6000fd5b5050602654604080516001600160a01b0390921660248301527f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b960448084019190915281518084039091018152606490920181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb392506138309190600401618cb2565b600060405180830381600087803b15801561384a57600080fd5b505af115801561385e573d6000803e3d6000fd5b50506020546024546027546040517f5131ab590000000000000000000000000000000000000000000000000000000081526001600160a01b039384169550635131ab59945061273a93928316929091169087908790600401618cc5565b604080516001808252818301909252600091816020015b60608152602001906001900390816138d25790505090506040518060400160405280600f81526020017f48656c6c6f2c20466f756e6472792100000000000000000000000000000000008152508160008151811061393257613932618c19565b6020908102919091010152604080516001808252818301909252600091816020016020820280368337019050509050602a8160008151811061397657613976618c19565b602090810291909101015260405160019060009061399c90859085908590602401618c7a565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167ff05b6abf0000000000000000000000000000000000000000000000000000000017905260215490517ff30c7ba3000000000000000000000000000000000000000000000000000000008152919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f30c7ba391613a59916001600160a01b0391909116906000908690600401618bd8565b600060405180830381600087803b158015613a7357600080fd5b505af1158015613a87573d6000803e3d6000fd5b50506021546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b158015613b1957600080fd5b505af1158015613b2d573d6000803e3d6000fd5b50506020546040517f74a53cd528a921fca7dbdee62f86819051d3cc98f214951f4238e8843f20b1469350613b7492506001600160a01b0390911690879087908790618d15565b60405180910390a16020546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b158015613c0a57600080fd5b505af1158015613c1e573d6000803e3d6000fd5b50506021546040516001600160a01b0390911692507fcaf938de11c367272220bfd1d2baa99ca46665e7bc4d85f00adb51b90fe1fa9f9150613c64906000908590618c00565b60405180910390a260285460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401611e6f565b604080517f68656c6c6f0000000000000000000000000000000000000000000000000000006020820152815160058183030181526025909101909152602154670de0b6b3a764000091906001600160a01b031631613d0f81600061449c565b6021546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b158015613d9d57600080fd5b505af1158015613db1573d6000803e3d6000fd5b50506020546040517f0d3f65f00e631663aa85c96330b5c7a83bb29af3630c0063776f985edc3037aa9350613df492506001600160a01b03909116908590618a2a565b60405180910390a16020546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b158015613e8a57600080fd5b505af1158015613e9e573d6000803e3d6000fd5b50506021546040516001600160a01b0390911692507fd5d7616b1678354a0dea9d7e57e6a090bff5babe9f8d6381fdbad16e89ba311c9150613eeb90670de0b6b3a7640000908690618c00565b60405180910390a260285460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015613f4c57600080fd5b505af1158015613f60573d6000803e3d6000fd5b50506020546021546040517f35c018db0000000000000000000000000000000000000000000000000000000081526001600160a01b0392831694506335c018db93508792613fb49216908790600401618a2a565b6000604051808303818588803b158015613fcd57600080fd5b505af1158015613fe1573d6000803e3d6000fd5b50506021546001600160a01b0316319250610fb29150829050670de0b6b3a764000061449c565b60408051808201909152600f81527f48656c6c6f2c20466f756e6472792100000000000000000000000000000000006020820152602154602a90600190670de0b6b3a764000090614065906000906001600160a01b03163161449c565b600084848460405160240161407c93929190618d5d565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe04d4f970000000000000000000000000000000000000000000000000000000017905260215490517ff30c7ba3000000000000000000000000000000000000000000000000000000008152919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f30c7ba391614140916001600160a01b039190911690670de0b6b3a7640000908690600401618bd8565b600060405180830381600087803b15801561415a57600080fd5b505af115801561416e573d6000803e3d6000fd5b50506021546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b15801561420057600080fd5b505af1158015614214573d6000803e3d6000fd5b50506020546040517f1f1ff1f5fb41346850b2f5c04e6c767e2f1c8a525c5c0c5cdb60cdf3ca5f62fa935061425d92506001600160a01b03909116908590899089908990618d87565b60405180910390a16020546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b1580156142f357600080fd5b505af1158015614307573d6000803e3d6000fd5b50506021546040516001600160a01b0390911692507fcaf938de11c367272220bfd1d2baa99ca46665e7bc4d85f00adb51b90fe1fa9f915061435490670de0b6b3a7640000908590618c00565b60405180910390a260285460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156143b557600080fd5b505af11580156143c9573d6000803e3d6000fd5b50506020546021546040517f1cff79cd0000000000000000000000000000000000000000000000000000000081526001600160a01b039283169450631cff79cd9350869261441d9216908690600401618a2a565b60006040518083038185885af115801561443b573d6000803e3d6000fd5b50505050506040513d6000823e601f3d908101601f191682016040526144649190810190618b34565b50602154611f389083906001600160a01b03163161449c565b60006144876185cb565b61449284848361451b565b9150505b92915050565b6040517f98296c540000000000000000000000000000000000000000000000000000000081526004810183905260248101829052737109709ecfa91a80626ff3989d68f67f5b1dd12d906398296c549060440160006040518083038186803b15801561450757600080fd5b505afa158015612768573d6000803e3d6000fd5b6000806145288584614596565b905061458b6040518060400160405280601d81526020017f4552433139363750726f78792e736f6c3a4552433139363750726f78790000008152508286604051602001614576929190618a2a565b604051602081830303815290604052856145a2565b9150505b9392505050565b600061458f83836145d0565b60c081015151600090156145c6576145bf84848460c001516145eb565b905061458f565b6145bf8484614791565b60006145dc838361487c565b61458f838360200151846145a2565b6000806145f6614888565b90506000614604868361495b565b9050600061461b8260600151836020015185614e01565b9050600061462b83838989615013565b9050600061463882615e90565b602081015181519192509060030b156146ab57898260400151604051602001614662929190618dc8565b60408051601f19818403018152908290527f08c379a00000000000000000000000000000000000000000000000000000000082526146a291600401618cb2565b60405180910390fd5b60006146ee6040518060400160405280601581526020017f4465706c6f79656420746f20616464726573733a20000000000000000000000081525083600161605f565b6040517fc6ce059d000000000000000000000000000000000000000000000000000000008152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c6ce059d90614741908490600401618cb2565b602060405180830381865afa15801561475e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906147829190618e49565b9b9a5050505050505050505050565b6040517f8d1cc9250000000000000000000000000000000000000000000000000000000081526000908190737109709ecfa91a80626ff3989d68f67f5b1dd12d90638d1cc925906147e6908790600401618cb2565b600060405180830381865afa158015614803573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261482b9190810190618b34565b905060006148598285604051602001614845929190618e72565b60405160208183030381529060405261625f565b90506001600160a01b038116614492578484604051602001614662929190618ea1565b61065282826000616272565b604080518082018252600381527f6f75740000000000000000000000000000000000000000000000000000000000602082015290517fd145736c000000000000000000000000000000000000000000000000000000008152606091737109709ecfa91a80626ff3989d68f67f5b1dd12d91829063d145736c9061490f908490600401618f4c565b600060405180830381865afa15801561492c573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526149549190810190618f93565b9250505090565b61498d6040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b6000737109709ecfa91a80626ff3989d68f67f5b1dd12d90506149d86040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b6149e185616375565b602082015260006149f18661675a565b90506000836001600160a01b031663d930a0e66040518163ffffffff1660e01b8152600401600060405180830381865afa158015614a33573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052614a5b9190810190618f93565b86838560200151604051602001614a759493929190618fdc565b60408051601f19818403018152908290527f60f9bb1100000000000000000000000000000000000000000000000000000000825291506000906001600160a01b038616906360f9bb1190614acd908590600401618cb2565b600060405180830381865afa158015614aea573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052614b129190810190618f93565b6040517fdb4235f60000000000000000000000000000000000000000000000000000000081529091506001600160a01b0386169063db4235f690614b5a9084906004016190e0565b602060405180830381865afa158015614b77573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614b9b9190618b69565b614bb057816040516020016146629190619132565b6040517f49c4fac80000000000000000000000000000000000000000000000000000000081526001600160a01b038616906349c4fac890614bf59084906004016191c4565b600060405180830381865afa158015614c12573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052614c3a9190810190618f93565b84526040517fdb4235f60000000000000000000000000000000000000000000000000000000081526001600160a01b0386169063db4235f690614c81908490600401619216565b602060405180830381865afa158015614c9e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614cc29190618b69565b15614d57576040517f49c4fac80000000000000000000000000000000000000000000000000000000081526001600160a01b038616906349c4fac890614d0c908490600401619216565b600060405180830381865afa158015614d29573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052614d519190810190618f93565b60408501525b846001600160a01b03166349c4fac8828660000151604051602001614d7c9190619268565b6040516020818303038152906040526040518363ffffffff1660e01b8152600401614da89291906192d4565b600060405180830381865afa158015614dc5573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052614ded9190810190618f93565b606085015250608083015250949350505050565b60408051600480825260a0820190925260609160009190816020015b6060815260200190600190039081614e1d5790505090506040518060400160405280600481526020017f677265700000000000000000000000000000000000000000000000000000000081525081600081518110614e7d57614e7d618c19565b60200260200101819052506040518060400160405280600381526020017f2d726c000000000000000000000000000000000000000000000000000000000081525081600181518110614ed157614ed1618c19565b602002602001018190525084604051602001614eed91906192f9565b60405160208183030381529060405281600281518110614f0f57614f0f618c19565b602002602001018190525082604051602001614f2b9190619365565b60405160208183030381529060405281600381518110614f4d57614f4d618c19565b60200260200101819052506000614f6382615e90565b602080820151604080518082018252600581527f2e6a736f6e0000000000000000000000000000000000000000000000000000008185019081528251808401845260008082529086015282518084019093529051825292810192909252919250614ff490604080518082018252600080825260209182015281518083019092528451825280850190820152906169dd565b615009578560405160200161466291906193a6565b9695505050505050565b60a0810151604080518082018252600080825260209182015281518083019092528251808352928101910152606090737109709ecfa91a80626ff3989d68f67f5b1dd12d9015615063565b511590565b6151d75782602001511561511f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605860248201527f54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f742060448201527f62652075736564207768656e207468652060736b6970566572696679536f757260648201527f6365436f646560206f7074696f6e206973206074727565600000000000000000608482015260a4016146a2565b8260c00151156151d7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605360248201527f54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f742060448201527f62652075736564207768656e207468652060736b69704c6963656e736554797060648201527f6560206f7074696f6e2069732060747275656000000000000000000000000000608482015260a4016146a2565b6040805160ff8082526120008201909252600091816020015b60608152602001906001900390816151f057905050905060006040518060400160405280600381526020017f6e7078000000000000000000000000000000000000000000000000000000000081525082828061524b90619466565b935060ff168151811061526057615260618c19565b60200260200101819052506040518060400160405280600d81526020017f302e302e312d616c7068612e37000000000000000000000000000000000000008152506040516020016152b19190619485565b6040516020818303038152906040528282806152cc90619466565b935060ff16815181106152e1576152e1618c19565b60200260200101819052506040518060400160405280600681526020017f6465706c6f79000000000000000000000000000000000000000000000000000081525082828061532e90619466565b935060ff168151811061534357615343618c19565b60200260200101819052506040518060400160405280600e81526020017f2d2d636f6e74726163744e616d6500000000000000000000000000000000000081525082828061539090619466565b935060ff16815181106153a5576153a5618c19565b602002602001018190525087602001518282806153c190619466565b935060ff16815181106153d6576153d6618c19565b60200260200101819052506040518060400160405280600e81526020017f2d2d636f6e74726163745061746800000000000000000000000000000000000081525082828061542390619466565b935060ff168151811061543857615438618c19565b60209081029190910101528751828261545081619466565b935060ff168151811061546557615465618c19565b60200260200101819052506040518060400160405280600981526020017f2d2d636861696e496400000000000000000000000000000000000000000000008152508282806154b290619466565b935060ff16815181106154c7576154c7618c19565b60200260200101819052506154db46616a3e565b82826154e681619466565b935060ff16815181106154fb576154fb618c19565b60200260200101819052506040518060400160405280600f81526020017f2d2d6275696c64496e666f46696c65000000000000000000000000000000000081525082828061554890619466565b935060ff168151811061555d5761555d618c19565b60200260200101819052508682828061557590619466565b935060ff168151811061558a5761558a618c19565b60209081029190910101528551156156b15760408051808201909152601581527f2d2d636f6e7374727563746f7242797465636f64650000000000000000000000602082015282826155db81619466565b935060ff16815181106155f0576155f0618c19565b60209081029190910101526040517f71aad10d0000000000000000000000000000000000000000000000000000000081526001600160a01b038416906371aad10d90615640908990600401618cb2565b600060405180830381865afa15801561565d573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526156859190810190618f93565b828261569081619466565b935060ff16815181106156a5576156a5618c19565b60200260200101819052505b8460200151156157815760408051808201909152601281527f2d2d766572696679536f75726365436f64650000000000000000000000000000602082015282826156fa81619466565b935060ff168151811061570f5761570f618c19565b60200260200101819052506040518060400160405280600581526020017f66616c736500000000000000000000000000000000000000000000000000000081525082828061575c90619466565b935060ff168151811061577157615771618c19565b6020026020010181905250615948565b6157b961505e8660a0015160408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b61584c5760408051808201909152600d81527f2d2d6c6963656e73655479706500000000000000000000000000000000000000602082015282826157fc81619466565b935060ff168151811061581157615811618c19565b60200260200101819052508460a0015160405160200161583191906192f9565b60405160208183030381529060405282828061575c90619466565b8460c0015115801561588f57506040808901518151808301835260008082526020918201528251808401909352815183529081019082015261588d90511590565b155b156159485760408051808201909152600d81527f2d2d6c6963656e73655479706500000000000000000000000000000000000000602082015282826158d381619466565b935060ff16815181106158e8576158e8618c19565b60200260200101819052506158fc88616ade565b60405160200161590c91906192f9565b60405160208183030381529060405282828061592790619466565b935060ff168151811061593c5761593c618c19565b60200260200101819052505b6040808601518151808301835260008082526020918201528251808401909352815183529081019082015261597c90511590565b615a115760408051808201909152600b81527f2d2d72656c617965724964000000000000000000000000000000000000000000602082015282826159bf81619466565b935060ff16815181106159d4576159d4618c19565b602002602001018190525084604001518282806159f090619466565b935060ff1681518110615a0557615a05618c19565b60200260200101819052505b606085015115615b325760408051808201909152600681527f2d2d73616c74000000000000000000000000000000000000000000000000000060208201528282615a5a81619466565b935060ff1681518110615a6f57615a6f618c19565b602090810291909101015260608501516040517fb11a19e800000000000000000000000000000000000000000000000000000000815260048101919091526001600160a01b0384169063b11a19e890602401600060405180830381865afa158015615ade573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052615b069190810190618f93565b8282615b1181619466565b935060ff1681518110615b2657615b26618c19565b60200260200101819052505b60e08501515115615bd95760408051808201909152600a81527f2d2d6761734c696d69740000000000000000000000000000000000000000000060208201528282615b7c81619466565b935060ff1681518110615b9157615b91618c19565b6020026020010181905250615bad8560e0015160000151616a3e565b8282615bb881619466565b935060ff1681518110615bcd57615bcd618c19565b60200260200101819052505b60e08501516020015115615c835760408051808201909152600a81527f2d2d67617350726963650000000000000000000000000000000000000000000060208201528282615c2681619466565b935060ff1681518110615c3b57615c3b618c19565b6020026020010181905250615c578560e0015160200151616a3e565b8282615c6281619466565b935060ff1681518110615c7757615c77618c19565b60200260200101819052505b60e08501516040015115615d2d5760408051808201909152600e81527f2d2d6d617846656550657247617300000000000000000000000000000000000060208201528282615cd081619466565b935060ff1681518110615ce557615ce5618c19565b6020026020010181905250615d018560e0015160400151616a3e565b8282615d0c81619466565b935060ff1681518110615d2157615d21618c19565b60200260200101819052505b60e08501516060015115615dd75760408051808201909152601681527f2d2d6d61785072696f726974794665655065724761730000000000000000000060208201528282615d7a81619466565b935060ff1681518110615d8f57615d8f618c19565b6020026020010181905250615dab8560e0015160600151616a3e565b8282615db681619466565b935060ff1681518110615dcb57615dcb618c19565b60200260200101819052505b60008160ff1667ffffffffffffffff811115615df557615df5618a4c565b604051908082528060200260200182016040528015615e2857816020015b6060815260200190600190039081615e135790505b50905060005b8260ff168160ff161015615e8157838160ff1681518110615e5157615e51618c19565b6020026020010151828260ff1681518110615e6e57615e6e618c19565b6020908102919091010152600101615e2e565b5093505050505b949350505050565b615eb76040518060600160405280600060030b815260200160608152602001606081525090565b60408051808201825260048082527f6261736800000000000000000000000000000000000000000000000000000000602083015291517fd145736c000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d92600091849163d145736c91615f3d918691016194f0565b600060405180830381865afa158015615f5a573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052615f829190810190618f93565b90506000615f9086836175cd565b90506000846001600160a01b031663f45c1ce7836040518263ffffffff1660e01b8152600401615fc09190618980565b6000604051808303816000875af1158015615fdf573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526160079190810190619537565b805190915060030b158015906160205750602081015151155b801561602f5750604081015151155b15615009578160008151811061604757616047618c19565b602002602001015160405160200161466291906195ed565b606060006160948560408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6040805180820182526000808252602091820152815180830190925286518252808701908201529091506160cb9082905b90617722565b15616228576000616148826161428461613c61610e8a60408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6040805180820182526000808252602091820152815180830190925282518252918201519181019190915290565b90617749565b906177ab565b604080518082018252600181527f0a00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201529091506161ac908290617722565b1561621657604080518082018252600181527f0a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616213905b8290617830565b90505b61621f81617856565b9250505061458f565b82156162415784846040516020016146629291906197d9565b505060408051602081019091526000815261458f565b509392505050565b6000808251602084016000f09392505050565b8160a001511561628157505050565b600061628e8484846178bf565b9050600061629b82615e90565b602081015181519192509060030b1580156163375750604080518082018252600781527f535543434553530000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616337906040805180820182526000808252602091820152815180830190925284518252808501908201526160c5565b1561634457505050505050565b604082015151156163645781604001516040516020016146629190619880565b8060405160200161466291906198de565b606060006163aa8360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600481527f2e736f6c000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015290915061640f905b82906169dd565b1561647e57604080518082018252600481527f2e736f6c000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261458f90616479908390617e5a565b617856565b604080518082018252600181527f3a00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526164e0905b8290617ee4565b6001036165ad57604080518082018252600181527f3a00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526165469061620c565b50604080518082018252600181527f3a000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261458f90616479905b8390617830565b604080518082018252600581527f2e6a736f6e0000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261660c90616408565b1561674357604080518082018252600181527f2f00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820181905284518086019095529251845283015290616674908390617f7e565b9050600081600183516166879190619949565b8151811061669757616697618c19565b6020026020010151905061673a61647961670d6040518060400160405280600581526020017f2e6a736f6e00000000000000000000000000000000000000000000000000000081525060408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b60408051808201825260008082526020918201528151808301909252855182528086019082015290617e5a565b95945050505050565b82604051602001614662919061995c565b50919050565b6060600061678f8360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600481527f2e736f6c00000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201529091506167f190616408565b156167ff5761458f81617856565b604080518082018252600181527f3a000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261685e906164d9565b6001036168c857604080518082018252600181527f3a000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261458f90616479906165a6565b604080518082018252600581527f2e6a736f6e0000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261692790616408565b1561674357604080518082018252600181527f2f0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082018190528451808601909552925184528301529061698f908390617f7e565b90506001815111156169cb5780600282516169aa9190619949565b815181106169ba576169ba618c19565b602002602001015192505050919050565b5082604051602001614662919061995c565b8051825160009111156169f257506000614496565b81518351602085015160009291616a0891619a3a565b616a129190619949565b905082602001518103616a29576001915050614496565b82516020840151819020912014905092915050565b60606000616a4b83618023565b600101905060008167ffffffffffffffff811115616a6b57616a6b618a4c565b6040519080825280601f01601f191660200182016040528015616a95576020820181803683370190505b5090508181016020015b600019017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a8504945084616a9f57509392505050565b604081810151815180830183526000808252602091820181905283518085018552835181529282018383015283518085018552600a81527f554e4c4943454e5345440000000000000000000000000000000000000000000081840190815285518087018752838152840192909252845180860190955251845290830152606091616b6a905b8290618105565b15616baa57505060408051808201909152600481527f4e6f6e65000000000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600981527f556e6c6963656e7365000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616c0990616b63565b15616c4957505060408051808201909152600981527f556e6c6963656e736500000000000000000000000000000000000000000000006020820152919050565b604080518082018252600381527f4d4954000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616ca890616b63565b15616ce857505060408051808201909152600381527f4d495400000000000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f47504c2d322e302d6f6e6c79000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616d4790616b63565b80616dac5750604080518082018252601081527f47504c2d322e302d6f722d6c617465720000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616dac90616b63565b15616dec57505060408051808201909152600981527f474e552047504c763200000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f47504c2d332e302d6f6e6c79000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616e4b90616b63565b80616eb05750604080518082018252601081527f47504c2d332e302d6f722d6c617465720000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616eb090616b63565b15616ef057505060408051808201909152600981527f474e552047504c763300000000000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4c47504c2d322e312d6f6e6c790000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616f4f90616b63565b80616fb45750604080518082018252601181527f4c47504c2d322e312d6f722d6c6174657200000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616fb490616b63565b15616ff457505060408051808201909152600c81527f474e55204c47504c76322e3100000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4c47504c2d332e302d6f6e6c79000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261705390616b63565b806170b85750604080518082018252601181527f4c47504c2d332e302d6f722d6c61746572000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526170b890616b63565b156170f857505060408051808201909152600a81527f474e55204c47504c7633000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f4253442d322d436c6175736500000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261715790616b63565b1561719757505060408051808201909152600c81527f4253442d322d436c6175736500000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f4253442d332d436c617573650000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526171f690616b63565b1561723657505060408051808201909152600c81527f4253442d332d436c6175736500000000000000000000000000000000000000006020820152919050565b604080518082018252600781527f4d504c2d322e30000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261729590616b63565b156172d557505060408051808201909152600781527f4d504c2d322e30000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600781527f4f534c2d332e30000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261733490616b63565b1561737457505060408051808201909152600781527f4f534c2d332e30000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600a81527f4170616368652d322e3000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526173d390616b63565b1561741357505060408051808201909152600a81527f4170616368652d322e30000000000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4147504c2d332e302d6f6e6c79000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261747290616b63565b806174d75750604080518082018252601181527f4147504c2d332e302d6f722d6c61746572000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526174d790616b63565b1561751757505060408051808201909152600a81527f474e55204147504c7633000000000000000000000000000000000000000000006020820152919050565b604080518082018252600881527f4255534c2d312e310000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261757690616b63565b156175b657505060408051808201909152600781527f42534c20312e31000000000000000000000000000000000000000000000000006020820152919050565b604080840151845191516146629290602001619a4d565b60608060005b845181101561765857818582815181106175ef576175ef618c19565b6020026020010151604051602001617608929190618e72565b6040516020818303038152906040529150600185516176279190619949565b8114617650578160405160200161763e9190619bb6565b60405160208183030381529060405291505b6001016175d3565b5060408051600380825260808201909252600091816020015b6060815260200190600190039081617671579050509050838160008151811061769c5761769c618c19565b60200260200101819052506040518060400160405280600281526020017f2d63000000000000000000000000000000000000000000000000000000000000815250816001815181106176f0576176f0618c19565b6020026020010181905250818160028151811061770f5761770f618c19565b6020908102919091010152949350505050565b60208083015183518351928401516000936177409291849190618119565b14159392505050565b6040805180820190915260008082526020820152600061777b846000015185602001518560000151866020015161822a565b905083602001518161778d9190619949565b8451859061779c908390619949565b90525060208401525090919050565b60408051808201909152600080825260208201528151835110156177d0575081614496565b60208083015190840151600191146177f75750815160208481015190840151829020919020145b80156178285782518451859061780e908390619949565b9052508251602085018051617824908390619a3a565b9052505b509192915050565b604080518082019091526000808252602082015261784f83838361834a565b5092915050565b60606000826000015167ffffffffffffffff81111561787757617877618a4c565b6040519080825280601f01601f1916602001820160405280156178a1576020820181803683370190505b509050600060208201905061784f81856020015186600001516183f5565b606060006178cb614888565b6040805160ff808252612000820190925291925060009190816020015b60608152602001906001900390816178e857905050905060006040518060400160405280600381526020017f6e7078000000000000000000000000000000000000000000000000000000000081525082828061794390619466565b935060ff168151811061795857617958618c19565b60200260200101819052506040518060400160405280600781526020017f5e312e33322e33000000000000000000000000000000000000000000000000008152506040516020016179a99190619bf7565b6040516020818303038152906040528282806179c490619466565b935060ff16815181106179d9576179d9618c19565b60200260200101819052506040518060400160405280600881526020017f76616c6964617465000000000000000000000000000000000000000000000000815250828280617a2690619466565b935060ff1681518110617a3b57617a3b618c19565b602002602001018190525082604051602001617a579190619365565b604051602081830303815290604052828280617a7290619466565b935060ff1681518110617a8757617a87618c19565b60200260200101819052506040518060400160405280600a81526020017f2d2d636f6e747261637400000000000000000000000000000000000000000000815250828280617ad490619466565b935060ff1681518110617ae957617ae9618c19565b6020026020010181905250617afe878461846f565b8282617b0981619466565b935060ff1681518110617b1e57617b1e618c19565b602090810291909101015285515115617bca5760408051808201909152600b81527f2d2d7265666572656e636500000000000000000000000000000000000000000060208201528282617b7081619466565b935060ff1681518110617b8557617b85618c19565b6020026020010181905250617b9e86600001518461846f565b8282617ba981619466565b935060ff1681518110617bbe57617bbe618c19565b60200260200101819052505b856080015115617c385760408051808201909152601881527f2d2d756e73616665536b697053746f72616765436865636b000000000000000060208201528282617c1381619466565b935060ff1681518110617c2857617c28618c19565b6020026020010181905250617c9e565b8415617c9e5760408051808201909152601281527f2d2d726571756972655265666572656e6365000000000000000000000000000060208201528282617c7d81619466565b935060ff1681518110617c9257617c92618c19565b60200260200101819052505b60408601515115617d3a5760408051808201909152600d81527f2d2d756e73616665416c6c6f770000000000000000000000000000000000000060208201528282617ce881619466565b935060ff1681518110617cfd57617cfd618c19565b60200260200101819052508560400151828280617d1990619466565b935060ff1681518110617d2e57617d2e618c19565b60200260200101819052505b856060015115617da45760408051808201909152601481527f2d2d756e73616665416c6c6f7752656e616d657300000000000000000000000060208201528282617d8381619466565b935060ff1681518110617d9857617d98618c19565b60200260200101819052505b60008160ff1667ffffffffffffffff811115617dc257617dc2618a4c565b604051908082528060200260200182016040528015617df557816020015b6060815260200190600190039081617de05790505b50905060005b8260ff168160ff161015617e4e57838160ff1681518110617e1e57617e1e618c19565b6020026020010151828260ff1681518110617e3b57617e3b618c19565b6020908102919091010152600101617dfb565b50979650505050505050565b6040805180820190915260008082526020820152815183511015617e7f575081614496565b81518351602085015160009291617e9591619a3a565b617e9f9190619949565b60208401519091506001908214617ec0575082516020840151819020908220145b8015617edb57835185518690617ed7908390619949565b9052505b50929392505050565b6000808260000151617f08856000015186602001518660000151876020015161822a565b617f129190619a3a565b90505b83516020850151617f269190619a3a565b811161784f5781617f3681619c3c565b9250508260000151617f6d856020015183617f519190619949565b8651617f5d9190619949565b838660000151876020015161822a565b617f779190619a3a565b9050617f15565b60606000617f8c8484617ee4565b617f97906001619a3a565b67ffffffffffffffff811115617faf57617faf618a4c565b604051908082528060200260200182016040528015617fe257816020015b6060815260200190600190039081617fcd5790505b50905060005b815181101561625757617ffe6164798686617830565b82828151811061801057618010618c19565b6020908102919091010152600101617fe8565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000831061806c577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310618098576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc1000083106180b657662386f26fc10000830492506010015b6305f5e10083106180ce576305f5e100830492506008015b61271083106180e257612710830492506004015b606483106180f4576064830492506002015b600a83106144965760010192915050565b600061811183836184af565b159392505050565b60008085841161822057602084116181cc5760008415618164576001618140866020619949565b61814b906008619c56565b618156906002619d54565b6181609190619949565b1990505b83518116856181738989619a3a565b61817d9190619949565b805190935082165b8181146181b75787841161819f5787945050505050615e88565b836181a981619d60565b945050828451169050618185565b6181c18785619a3a565b945050505050615e88565b8383206181d98588619949565b6181e39087619a3a565b91505b85821061821e5784822080820361820b576182018684619a3a565b9350505050615e88565b618216600184619949565b9250506181e6565b505b5092949350505050565b6000838186851161833557602085116182e45760008515618276576001618252876020619949565b61825d906008619c56565b618268906002619d54565b6182729190619949565b1990505b845181166000876182878b8b619a3a565b6182919190619949565b855190915083165b8281146182d6578186106182be576182b18b8b619a3a565b9650505050505050615e88565b856182c881619c3c565b965050838651169050618299565b859650505050505050615e88565b508383206000905b6182f68689619949565b8211618333578583208082036183125783945050505050615e88565b61831d600185619a3a565b935050818061832b90619c3c565b9250506182ec565b505b61833f8787619a3a565b979650505050505050565b6040805180820190915260008082526020820152600061837c856000015186602001518660000151876020015161822a565b6020808701805191860191909152519091506183989082619949565b8352845160208601516183ab9190619a3a565b81036183ba57600085526183ec565b835183516183c89190619a3a565b855186906183d7908390619949565b90525083516183e69082619a3a565b60208601525b50909392505050565b6020811061842d578151835261840c602084619a3a565b9250618419602083619a3a565b9150618426602082619949565b90506183f5565b600019811561845c576001618443836020619949565b61844f90610100619d54565b6184599190619949565b90505b9151835183169219169190911790915250565b6060600061847d848461495b565b805160208083015160405193945061849793909101619d77565b60405160208183030381529060405291505092915050565b81518151600091908111156184c2575081515b6020808501519084015160005b8381101561857b578251825180821461854b57600019602087101561852a576001846184fc896020619949565b6185069190619a3a565b618511906008619c56565b61851c906002619d54565b6185269190619949565b1990505b81811683821681810391146185485797506144969650505050505050565b50505b618556602086619a3a565b9450618563602085619a3a565b935050506020816185749190619a3a565b90506184cf565b50845186516150099190619dcf565b610c9f80619df083390190565b6112a68061aa8f83390190565b6116fe8061bd3583390190565b61155a8061d43383390190565b610d5e8061e98d83390190565b6040518060e0016040528060608152602001606081526020016060815260200160001515815260200160001515815260200160001515815260200161860e618613565b905290565b6040518061010001604052806000151581526020016000151581526020016060815260200160008019168152602001606081526020016060815260200160001515815260200161860e6040518060800160405280600081526020016000815260200160008152602001600081525090565b602080825282518282018190526000918401906040840190835b818110156186c55783516001600160a01b031683526020938401939092019160010161869e565b509095945050505050565b60005b838110156186eb5781810151838201526020016186d3565b50506000910152565b6000815180845261870c8160208601602086016186d0565b601f01601f19169290920160200192915050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b8281101561881c577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452815180516001600160a01b03168652602090810151604082880181905281519088018190529101906060600582901b88018101919088019060005b81811015618802577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa08a85030183526187ec8486516186f4565b60209586019590945092909201916001016187b2565b509197505050602094850194929092019150600101618748565b50929695505050505050565b600081518084526020840193506020830160005b8281101561887c5781517fffffffff000000000000000000000000000000000000000000000000000000001686526020958601959091019060010161883c565b5093949350505050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b8281101561881c577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc087860301845281518051604087526188f260408801826186f4565b905060208201519150868103602088015261890d8183618828565b9650505060209384019391909101906001016188ae565b600082825180855260208501945060208160051b8301016020850160005b8381101561897457601f1985840301885261895e8383516186f4565b6020988901989093509190910190600101618942565b50909695505050505050565b60208152600061458f6020830184618924565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b8281101561881c577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc087860301845281516001600160a01b0381511686526020810151905060406020870152618a146040870182618828565b95505060209384019391909101906001016189bb565b6001600160a01b0383168152604060208201526000615e8860408301846186f4565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040516060810167ffffffffffffffff81118282101715618a9e57618a9e618a4c565b60405290565b60008067ffffffffffffffff841115618abf57618abf618a4c565b50604051601f19601f85018116603f0116810181811067ffffffffffffffff82111715618aee57618aee618a4c565b604052838152905080828401851015618b0657600080fd5b6162578460208301856186d0565b600082601f830112618b2557600080fd5b61458f83835160208501618aa4565b600060208284031215618b4657600080fd5b815167ffffffffffffffff811115618b5d57600080fd5b61449284828501618b14565b600060208284031215618b7b57600080fd5b8151801515811461458f57600080fd5b600181811c90821680618b9f57607f821691505b602082108103616754577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6001600160a01b038416815282602082015260606040820152600061673a60608301846186f4565b828152604060208201526000615e8860408301846186f4565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081518084526020840193506020830160005b8281101561887c578151865260209586019590910190600101618c5c565b606081526000618c8d6060830186618924565b8281036020840152618c9f8186618c48565b9150508215156040830152949350505050565b60208152600061458f60208301846186f4565b6001600160a01b03851681526001600160a01b038416602082015282604082015260806060820152600061500960808301846186f4565b600060208284031215618d0e57600080fd5b5051919050565b6001600160a01b0385168152608060208201526000618d376080830186618924565b8281036040840152618d498186618c48565b915050821515606083015295945050505050565b606081526000618d7060608301866186f4565b602083019490945250901515604090910152919050565b6001600160a01b038616815284602082015260a060408201526000618daf60a08301866186f4565b6060830194909452509015156080909101529392505050565b7f4661696c656420746f206465706c6f7920636f6e747261637420000000000000815260008351618e0081601a8501602088016186d0565b7f3a20000000000000000000000000000000000000000000000000000000000000601a918401918201528351618e3d81601c8401602088016186d0565b01601c01949350505050565b600060208284031215618e5b57600080fd5b81516001600160a01b038116811461458f57600080fd5b60008351618e848184602088016186d0565b835190830190618e988183602088016186d0565b01949350505050565b7f4661696c656420746f206465706c6f7920636f6e747261637420000000000000815260008351618ed981601a8501602088016186d0565b7f207573696e6720636f6e7374727563746f722064617461202200000000000000601a918401918201528351618f168160338401602088016186d0565b7f220000000000000000000000000000000000000000000000000000000000000060339290910191820152603401949350505050565b60408152600b60408201527f464f554e4452595f4f5554000000000000000000000000000000000000000000606082015260806020820152600061458f60808301846186f4565b600060208284031215618fa557600080fd5b815167ffffffffffffffff811115618fbc57600080fd5b8201601f81018413618fcd57600080fd5b61449284825160208401618aa4565b60008551618fee818460208a016186d0565b7f2f000000000000000000000000000000000000000000000000000000000000009083019081528551619028816001840160208a016186d0565b7f2f000000000000000000000000000000000000000000000000000000000000006001929091019182015284516190668160028401602089016186d0565b6001818301019150507f2f00000000000000000000000000000000000000000000000000000000000000600182015283516190a88160028401602088016186d0565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600292909101918201526007019695505050505050565b6040815260006190f360408301846186f4565b8281036020840152600481527f2e6173740000000000000000000000000000000000000000000000000000000060208201526040810191505092915050565b7f436f756c64206e6f742066696e642041535420696e206172746966616374200081526000825161916a81601f8501602087016186d0565b7f2e205365742060617374203d20747275656020696e20666f756e6472792e746f601f9390910192830152507f6d6c000000000000000000000000000000000000000000000000000000000000603f820152604101919050565b6040815260006191d760408301846186f4565b8281036020840152601181527f2e6173742e6162736f6c7574655061746800000000000000000000000000000060208201526040810191505092915050565b60408152600061922960408301846186f4565b8281036020840152600c81527f2e6173742e6c6963656e7365000000000000000000000000000000000000000060208201526040810191505092915050565b7f2e6d657461646174612e736f75726365732e5b270000000000000000000000008152600082516192a08160148501602087016186d0565b7f275d2e6b656363616b32353600000000000000000000000000000000000000006014939091019283015250602001919050565b6040815260006192e760408301856186f4565b828103602084015261458b81856186f4565b7f22000000000000000000000000000000000000000000000000000000000000008152600082516193318160018501602087016186d0565b7f22000000000000000000000000000000000000000000000000000000000000006001939091019283015250600201919050565b600082516193778184602087016186d0565b7f2f6275696c642d696e666f000000000000000000000000000000000000000000920191825250600b01919050565b7f436f756c64206e6f742066696e64206275696c642d696e666f2066696c65207781527f697468206d61746368696e6720736f7572636520636f6465206861736820666f60208201527f7220636f6e74726163742000000000000000000000000000000000000000000060408201526000825161942a81604b8501602087016186d0565b91909101604b0192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600060ff821660ff810361947c5761947c619437565b60010192915050565b7f406f70656e7a657070656c696e2f646566656e6465722d6465706c6f792d636c81527f69656e742d636c694000000000000000000000000000000000000000000000006020820152600082516194e38160298501602087016186d0565b9190910160290192915050565b60408152601660408201527f4f50454e5a455050454c494e5f424153485f5041544800000000000000000000606082015260806020820152600061458f60808301846186f4565b60006020828403121561954957600080fd5b815167ffffffffffffffff81111561956057600080fd5b82016060818503121561957257600080fd5b61957a618a7b565b81518060030b811461958b57600080fd5b8152602082015167ffffffffffffffff8111156195a757600080fd5b6195b386828501618b14565b602083015250604082015167ffffffffffffffff8111156195d357600080fd5b6195df86828501618b14565b604083015250949350505050565b7f4661696c656420746f2072756e206261736820636f6d6d616e6420776974682081527f220000000000000000000000000000000000000000000000000000000000000060208201526000825161964b8160218501602087016186d0565b7f222e20496620796f7520617265207573696e672057696e646f77732c2073657460219390910192830152507f20746865204f50454e5a455050454c494e5f424153485f5041544820656e766960418201527f726f6e6d656e74207661726961626c6520746f207468652066756c6c7920717560618201527f616c69666965642070617468206f66207468652062617368206578656375746160818201527f626c652e20466f72206578616d706c652c20696620796f75206172652075736960a18201527f6e672047697420666f722057696e646f77732c206164642074686520666f6c6c60c18201527f6f77696e67206c696e6520696e20746865202e656e762066696c65206f66207960e18201527f6f75722070726f6a65637420287573696e6720666f727761726420736c6173686101018201527f6573293a0a4f50454e5a455050454c494e5f424153485f504154483d22433a2f6101218201527f50726f6772616d2046696c65732f4769742f62696e2f6261736822000000000061014182015261015c01919050565b7f4661696c656420746f2066696e64206c696e652077697468207072656669782081527f27000000000000000000000000000000000000000000000000000000000000006020820152600083516198378160218501602088016186d0565b7f2720696e206f75747075743a2000000000000000000000000000000000000000602191840191820152835161987481602e8401602088016186d0565b01602e01949350505050565b7f4661696c656420746f2072756e2075706772616465207361666574792076616c81527f69646174696f6e3a2000000000000000000000000000000000000000000000006020820152600082516194e38160298501602087016186d0565b7f55706772616465207361666574792076616c69646174696f6e206661696c656481527f3a0a00000000000000000000000000000000000000000000000000000000000060208201526000825161993c8160228501602087016186d0565b9190910160220192915050565b8181038181111561449657614496619437565b7f436f6e7472616374206e616d652000000000000000000000000000000000000081526000825161999481600e8501602087016186d0565b7f206d75737420626520696e2074686520666f726d6174204d79436f6e74726163600e9390910192830152507f742e736f6c3a4d79436f6e7472616374206f72204d79436f6e74726163742e73602e8201527f6f6c206f72206f75742f4d79436f6e74726163742e736f6c2f4d79436f6e7472604e8201527f6163742e6a736f6e000000000000000000000000000000000000000000000000606e820152607601919050565b8082018082111561449657614496619437565b7f53504458206c6963656e7365206964656e746966696572200000000000000000815260008351619a858160188501602088016186d0565b7f20696e20000000000000000000000000000000000000000000000000000000006018918401918201528351619ac281601c8401602088016186d0565b7f20646f6573206e6f74206c6f6f6b206c696b65206120737570706f7274656420601c92909101918201527f6c6963656e736520666f7220626c6f636b206578706c6f726572207665726966603c8201527f69636174696f6e2e205573652074686520606c6963656e73655479706560206f605c8201527f7074696f6e20746f20737065636966792061206c6963656e736520747970652c607c8201527f206f7220736574207468652060736b69704c6963656e73655479706560206f70609c8201527f74696f6e20746f2060747275656020746f20736b69702e00000000000000000060bc82015260d301949350505050565b60008251619bc88184602087016186d0565b7f2000000000000000000000000000000000000000000000000000000000000000920191825250600101919050565b7f406f70656e7a657070656c696e2f75706772616465732d636f72654000000000815260008251619c2f81601c8501602087016186d0565b91909101601c0192915050565b60006000198203619c4f57619c4f619437565b5060010190565b808202811582820484141761449657614496619437565b6001815b6001841115619ca857808504811115619c8c57619c8c619437565b6001841615619c9a57908102905b60019390931c928002619c71565b935093915050565b600082619cbf57506001614496565b81619ccc57506000614496565b8160018114619ce25760028114619cec57619d08565b6001915050614496565b60ff841115619cfd57619cfd619437565b50506001821b614496565b5060208310610133831016604e8410600b8410161715619d2b575081810a614496565b619d386000198484619c6d565b8060001904821115619d4c57619d4c619437565b029392505050565b600061458f8383619cb0565b600081619d6f57619d6f619437565b506000190190565b60008351619d898184602088016186d0565b7f3a000000000000000000000000000000000000000000000000000000000000009083019081528351619dc38160018401602088016186d0565b01600101949350505050565b818103600083128015838313168383128216171561784f5761784f61943756fe608060405234801561001057600080fd5b50604051610c9f380380610c9f83398101604081905261002f9161010d565b8181600361003d83826101ff565b50600461004a82826101ff565b50505050506102bd565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261007b57600080fd5b81516001600160401b0381111561009457610094610054565b604051601f8201601f19908116603f011681016001600160401b03811182821017156100c2576100c2610054565b6040528181528382016020018510156100da57600080fd5b60005b828110156100f9576020818601810151838301820152016100dd565b506000918101602001919091529392505050565b6000806040838503121561012057600080fd5b82516001600160401b0381111561013657600080fd5b6101428582860161006a565b602085015190935090506001600160401b0381111561016057600080fd5b61016c8582860161006a565b9150509250929050565b600181811c9082168061018a57607f821691505b6020821081036101aa57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156101fa57806000526020600020601f840160051c810160208510156101d75750805b601f840160051c820191505b818110156101f757600081556001016101e3565b50505b505050565b81516001600160401b0381111561021857610218610054565b61022c816102268454610176565b846101b0565b6020601f82116001811461026057600083156102485750848201515b600019600385901b1c1916600184901b1784556101f7565b600084815260208120601f198516915b828110156102905787850151825560209485019460019092019101610270565b50848210156102ae5786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b6109d3806102cc6000396000f3fe608060405234801561001057600080fd5b50600436106100be5760003560e01c806340c10f191161007657806395d89b411161005b57806395d89b4114610183578063a9059cbb1461018b578063dd62ed3e1461019e57600080fd5b806340c10f191461013857806370a082311461014d57600080fd5b806318160ddd116100a757806318160ddd1461010457806323b872dd14610116578063313ce5671461012957600080fd5b806306fdde03146100c3578063095ea7b3146100e1575b600080fd5b6100cb6101e4565b6040516100d891906107bf565b60405180910390f35b6100f46100ef366004610854565b610276565b60405190151581526020016100d8565b6002545b6040519081526020016100d8565b6100f461012436600461087e565b610290565b604051601281526020016100d8565b61014b610146366004610854565b6102b4565b005b61010861015b3660046108bb565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6100cb6102c2565b6100f4610199366004610854565b6102d1565b6101086101ac3660046108dd565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6060600380546101f390610910565b80601f016020809104026020016040519081016040528092919081815260200182805461021f90610910565b801561026c5780601f106102415761010080835404028352916020019161026c565b820191906000526020600020905b81548152906001019060200180831161024f57829003601f168201915b5050505050905090565b6000336102848185856102df565b60019150505b92915050565b60003361029e8582856102f1565b6102a98585856103c5565b506001949350505050565b6102be8282610470565b5050565b6060600480546101f390610910565b6000336102848185856103c5565b6102ec83838360016104cc565b505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146103bf57818110156103b0576040517ffb8f41b200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416600482015260248101829052604481018390526064015b60405180910390fd5b6103bf848484840360006104cc565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8316610415576040517f96c6fd1e000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff8216610465576040517fec442f05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b6102ec838383610614565b73ffffffffffffffffffffffffffffffffffffffff82166104c0576040517fec442f05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b6102be60008383610614565b73ffffffffffffffffffffffffffffffffffffffff841661051c576040517fe602df05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff831661056c576040517f94280d62000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260016020908152604080832093871683529290522082905580156103bf578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161060691815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff831661064c5780600260008282546106419190610963565b909155506106fe9050565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260208190526040902054818110156106d2576040517fe450d38c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8516600482015260248101829052604481018390526064016103a7565b73ffffffffffffffffffffffffffffffffffffffff841660009081526020819052604090209082900390555b73ffffffffffffffffffffffffffffffffffffffff821661072757600280548290039055610753565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090208054820190555b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516107b291815260200190565b60405180910390a3505050565b602081526000825180602084015260005b818110156107ed57602081860181015160408684010152016107d0565b5060006040828501015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011684010191505092915050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461084f57600080fd5b919050565b6000806040838503121561086757600080fd5b6108708361082b565b946020939093013593505050565b60008060006060848603121561089357600080fd5b61089c8461082b565b92506108aa6020850161082b565b929592945050506040919091013590565b6000602082840312156108cd57600080fd5b6108d68261082b565b9392505050565b600080604083850312156108f057600080fd5b6108f98361082b565b91506109076020840161082b565b90509250929050565b600181811c9082168061092457607f821691505b60208210810361095d577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b8082018082111561028a577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea26469706673582212207e804ca539d49155d2b6bc19268ce22f9f857027c75247d69fb0d56a089c93d464736f6c634300081a0033608060405234801561001057600080fd5b506040516112a63803806112a683398101604081905261002f91610110565b604051806040016040528060048152602001635a65746160e01b815250604051806040016040528060048152602001635a45544160e01b815250816003908161007891906101e2565b50600461008582826101e2565b5050506001600160a01b03821615806100a557506001600160a01b038116155b156100c35760405163e6c4247b60e01b815260040160405180910390fd5b600680546001600160a01b039384166001600160a01b031991821617909155600780549290931691161790556102a0565b80516001600160a01b038116811461010b57600080fd5b919050565b6000806040838503121561012357600080fd5b61012c836100f4565b915061013a602084016100f4565b90509250929050565b634e487b7160e01b600052604160045260246000fd5b600181811c9082168061016d57607f821691505b60208210810361018d57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156101dd57806000526020600020601f840160051c810160208510156101ba5750805b601f840160051c820191505b818110156101da57600081556001016101c6565b50505b505050565b81516001600160401b038111156101fb576101fb610143565b61020f816102098454610159565b84610193565b6020601f821160018114610243576000831561022b5750848201515b600019600385901b1c1916600184901b1784556101da565b600084815260208120601f198516915b828110156102735787850151825560209485019460019092019101610253565b50848210156102915786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b610ff7806102af6000396000f3fe608060405234801561001057600080fd5b506004361061011b5760003560e01c806342966c68116100b257806379cc679011610081578063a9059cbb11610066578063a9059cbb1461028e578063bff9662a146102a1578063dd62ed3e146102c157600080fd5b806379cc67901461027357806395d89b411461028657600080fd5b806342966c68146102025780635b1125911461021557806370a0823114610235578063779e3b631461026b57600080fd5b80631e458bee116100ee5780631e458bee1461018857806323b872dd1461019b578063313ce567146101ae578063328a01d0146101bd57600080fd5b806306fdde0314610120578063095ea7b31461013e57806315d57fd41461016157806318160ddd14610176575b600080fd5b610128610307565b6040516101359190610d97565b60405180910390f35b61015161014c366004610e2c565b610399565b6040519015158152602001610135565b61017461016f366004610e56565b6103b3565b005b6002545b604051908152602001610135565b610174610196366004610e89565b61057e565b6101516101a9366004610ebc565b610631565b60405160128152602001610135565b6007546101dd9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610135565b610174610210366004610ef9565b610655565b6006546101dd9073ffffffffffffffffffffffffffffffffffffffff1681565b61017a610243366004610f12565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b610174610662565b610174610281366004610e2c565b610786565b610128610837565b61015161029c366004610e2c565b610846565b6005546101dd9073ffffffffffffffffffffffffffffffffffffffff1681565b61017a6102cf366004610e56565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b60606003805461031690610f34565b80601f016020809104026020016040519081016040528092919081815260200182805461034290610f34565b801561038f5780601f106103645761010080835404028352916020019161038f565b820191906000526020600020905b81548152906001019060200180831161037257829003601f168201915b5050505050905090565b6000336103a7818585610854565b60019150505b92915050565b60075473ffffffffffffffffffffffffffffffffffffffff1633148015906103f3575060065473ffffffffffffffffffffffffffffffffffffffff163314155b15610431576040517fcdfcef970000000000000000000000000000000000000000000000000000000081523360048201526024015b60405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff82161580610468575073ffffffffffffffffffffffffffffffffffffffff8116155b1561049f576040517fe6c4247b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6006805473ffffffffffffffffffffffffffffffffffffffff8481167fffffffffffffffffffffffff0000000000000000000000000000000000000000928316811790935560058054918516919092161790556040805133815260208101929092527fe79965b5c67dcfb2cf5fe152715e4a7256cee62a3d5dd8484fd8a8539eb8beff910160405180910390a16040805133815273ffffffffffffffffffffffffffffffffffffffff831660208201527f1b9352454524a57a51f24f67dc66d898f616922cd1f7a12d73570ece12b1975c910160405180910390a15050565b60055473ffffffffffffffffffffffffffffffffffffffff1633146105d1576040517f3fe32fba000000000000000000000000000000000000000000000000000000008152336004820152602401610428565b6105db8383610866565b808373ffffffffffffffffffffffffffffffffffffffff167fc263b302aec62d29105026245f19e16f8e0137066ccd4a8bd941f716bd4096bb8460405161062491815260200190565b60405180910390a3505050565b60003361063f8582856108c6565b61064a858585610995565b506001949350505050565b61065f3382610a40565b50565b60075473ffffffffffffffffffffffffffffffffffffffff1633146106b5576040517fe700765e000000000000000000000000000000000000000000000000000000008152336004820152602401610428565b60065473ffffffffffffffffffffffffffffffffffffffff16610704576040517fe6c4247b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600654600780547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff90921691821790556040805133815260208101929092527f5104c9abdc7d111c2aeb4ce890ac70274a4be2ee83f46a62551be5e6ebc82dd0910160405180910390a1565b60055473ffffffffffffffffffffffffffffffffffffffff1633146107d9576040517f3fe32fba000000000000000000000000000000000000000000000000000000008152336004820152602401610428565b6107e38282610a9c565b8173ffffffffffffffffffffffffffffffffffffffff167f919f7e2092ffcc9d09f599be18d8152860b0c054df788a33bc549cdd9d0f15b18260405161082b91815260200190565b60405180910390a25050565b60606004805461031690610f34565b6000336103a7818585610995565b6108618383836001610ab1565b505050565b73ffffffffffffffffffffffffffffffffffffffff82166108b6576040517fec442f0500000000000000000000000000000000000000000000000000000000815260006004820152602401610428565b6108c260008383610bf9565b5050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811461098f5781811015610980576040517ffb8f41b200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff841660048201526024810182905260448101839052606401610428565b61098f84848484036000610ab1565b50505050565b73ffffffffffffffffffffffffffffffffffffffff83166109e5576040517f96c6fd1e00000000000000000000000000000000000000000000000000000000815260006004820152602401610428565b73ffffffffffffffffffffffffffffffffffffffff8216610a35576040517fec442f0500000000000000000000000000000000000000000000000000000000815260006004820152602401610428565b610861838383610bf9565b73ffffffffffffffffffffffffffffffffffffffff8216610a90576040517f96c6fd1e00000000000000000000000000000000000000000000000000000000815260006004820152602401610428565b6108c282600083610bf9565b610aa78233836108c6565b6108c28282610a40565b73ffffffffffffffffffffffffffffffffffffffff8416610b01576040517fe602df0500000000000000000000000000000000000000000000000000000000815260006004820152602401610428565b73ffffffffffffffffffffffffffffffffffffffff8316610b51576040517f94280d6200000000000000000000000000000000000000000000000000000000815260006004820152602401610428565b73ffffffffffffffffffffffffffffffffffffffff8085166000908152600160209081526040808320938716835292905220829055801561098f578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051610beb91815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff8316610c31578060026000828254610c269190610f87565b90915550610ce39050565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205481811015610cb7576040517fe450d38c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff851660048201526024810182905260448101839052606401610428565b73ffffffffffffffffffffffffffffffffffffffff841660009081526020819052604090209082900390555b73ffffffffffffffffffffffffffffffffffffffff8216610d0c57600280548290039055610d38565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090208054820190555b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161062491815260200190565b602081526000825180602084015260005b81811015610dc55760208186018101516040868401015201610da8565b5060006040828501015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011684010191505092915050565b803573ffffffffffffffffffffffffffffffffffffffff81168114610e2757600080fd5b919050565b60008060408385031215610e3f57600080fd5b610e4883610e03565b946020939093013593505050565b60008060408385031215610e6957600080fd5b610e7283610e03565b9150610e8060208401610e03565b90509250929050565b600080600060608486031215610e9e57600080fd5b610ea784610e03565b95602085013595506040909401359392505050565b600080600060608486031215610ed157600080fd5b610eda84610e03565b9250610ee860208501610e03565b929592945050506040919091013590565b600060208284031215610f0b57600080fd5b5035919050565b600060208284031215610f2457600080fd5b610f2d82610e03565b9392505050565b600181811c90821680610f4857607f821691505b602082108103610f81577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b808201808211156103ad577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea2646970667358221220085f01204b33dc17013c78c74fbca32a3da2c0b384ce7c8878c889551af28c6164736f6c634300081a003360a060405234801561001057600080fd5b506040516116fe3803806116fe83398101604081905261002f916101e5565b60016000556002805460ff191690556001600160a01b038316158061005b57506001600160a01b038216155b8061006d57506001600160a01b038116155b1561008b5760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b0383166080526100a3600082610134565b506100ce7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a82610134565b506100f97f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e483610134565b506101126000805160206116de83398151915282610134565b5061012b6000805160206116de83398151915283610134565b50505050610228565b60008281526001602090815260408083206001600160a01b038516845290915281205460ff166101bf5760008381526001602081815260408084206001600160a01b0387168086529252808420805460ff19169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45060016101c3565b5060005b92915050565b80516001600160a01b03811681146101e057600080fd5b919050565b6000806000606084860312156101fa57600080fd5b610203846101c9565b9250610211602085016101c9565b915061021f604085016101c9565b90509250925092565b60805161147f61025f6000396000818161019e0152818161050001528181610562015281816108f70152610959015261147f6000f3fe608060405234801561001057600080fd5b506004361061016c5760003560e01c806385f438c1116100cd578063c8a0236211610081578063d936547e11610066578063d936547e14610355578063d9caed1214610378578063e63ab1e91461038b57600080fd5b8063c8a023621461032f578063d547741f1461034257600080fd5b80639a590427116100b25780639a590427146103015780639b19251a14610314578063a217fddf1461032757600080fd5b806385f438c11461029457806391d14854146102bb57600080fd5b806336568abe11610124578063570618e111610109578063570618e11461025a5780635c975abb146102815780638456cb591461028c57600080fd5b806336568abe1461023f5780633f4ba83a1461025257600080fd5b806321fc65f21161015557806321fc65f2146101e5578063248a9ca3146101fa5780632f2ff15d1461022c57600080fd5b806301ffc9a714610171578063116191b614610199575b600080fd5b61018461017f36600461118a565b6103b2565b60405190151581526020015b60405180910390f35b6101c07f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610190565b6101f86101f33660046111f5565b61044b565b005b61021e610208366004611292565b6000908152600160208190526040909120015490565b604051908152602001610190565b6101f861023a3660046112ab565b61064c565b6101f861024d3660046112ab565b610678565b6101f86106d6565b61021e7f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a81565b60025460ff16610184565b6101f861070b565b61021e7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b6101846102c93660046112ab565b600091825260016020908152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b6101f861030f3660046112d7565b61073d565b6101f86103223660046112d7565b6107be565b61021e600081565b6101f861033d3660046111f5565b610842565b6101f86103503660046112ab565b610a29565b6101846103633660046112d7565b60036020526000908152604090205460ff1681565b6101f86103863660046112f2565b610a4f565b61021e7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061044557507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b610453610b7b565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461047d81610bbe565b610485610bc8565b73ffffffffffffffffffffffffffffffffffffffff861660009081526003602052604090205460ff166104e4576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61052573ffffffffffffffffffffffffffffffffffffffff87167f000000000000000000000000000000000000000000000000000000000000000086610c07565b6040517f5131ab5900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690635131ab599061059f9089908990899089908990600401611378565b600060405180830381600087803b1580156105b957600080fd5b505af11580156105cd573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167f85b5be9cf454e05e0bddf49315178102227c312078eefa3c00294fb4d912ae4e868686604051610632939291906113d5565b60405180910390a3506106456001600055565b5050505050565b6000828152600160208190526040909120015461066881610bbe565b6106728383610c94565b50505050565b73ffffffffffffffffffffffffffffffffffffffff811633146106c7576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6106d18282610d41565b505050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61070081610bbe565b610708610de2565b50565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61073581610bbe565b610708610e41565b7f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a61076781610bbe565b73ffffffffffffffffffffffffffffffffffffffff8216600081815260036020526040808220805460ff19169055517f51085ddf9ebdded84b76e829eb58c4078e4b5bdf97d9a94723f336039da467919190a25050565b7f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a6107e881610bbe565b73ffffffffffffffffffffffffffffffffffffffff8216600081815260036020526040808220805460ff19166001179055517faab7954e9d246b167ef88aeddad35209ca2489d95a8aeb59e288d9b19fae5a549190a25050565b61084a610b7b565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461087481610bbe565b61087c610bc8565b73ffffffffffffffffffffffffffffffffffffffff861660009081526003602052604090205460ff166108db576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61091c73ffffffffffffffffffffffffffffffffffffffff87167f000000000000000000000000000000000000000000000000000000000000000086610c07565b6040517fb8969bd400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063b8969bd4906109969089908990899089908990600401611378565b600060405180830381600087803b1580156109b057600080fd5b505af11580156109c4573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fb9d4efa96044e5f5e03e696fa9ae2ff66911cc27e8a637c3627c75bc5b2241c8868686604051610632939291906113d5565b60008281526001602081905260409091200154610a4581610bbe565b6106728383610d41565b610a57610b7b565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e4610a8181610bbe565b610a89610bc8565b73ffffffffffffffffffffffffffffffffffffffff841660009081526003602052604090205460ff16610ae8576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610b0973ffffffffffffffffffffffffffffffffffffffff85168484610c07565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f9b1bfa7fa9ee420a16e124f794c35ac9f90472acc99140eb2f6447c714cad8eb84604051610b6891815260200190565b60405180910390a3506106d16001600055565b600260005403610bb7576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b6107088133610e7e565b60025460ff1615610c05576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6040805173ffffffffffffffffffffffffffffffffffffffff8416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb000000000000000000000000000000000000000000000000000000001790526106d1908490610f0f565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff16610d3957600083815260016020818152604080842073ffffffffffffffffffffffffffffffffffffffff87168086529252808420805460ff19169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a4506001610445565b506000610445565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff1615610d3957600083815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff86168085529252808320805460ff1916905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a4506001610445565b610dea610fa5565b6002805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b610e49610bc8565b6002805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258610e173390565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16610f0b576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82166004820152602481018390526044015b60405180910390fd5b5050565b6000610f3173ffffffffffffffffffffffffffffffffffffffff841683610fe1565b90508051600014158015610f56575080806020019051810190610f5491906113f8565b155b156106d1576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84166004820152602401610f02565b60025460ff16610c05576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6060610fef83836000610ff6565b9392505050565b606081471015611034576040517fcd786059000000000000000000000000000000000000000000000000000000008152306004820152602401610f02565b6000808573ffffffffffffffffffffffffffffffffffffffff16848660405161105d919061141a565b60006040518083038185875af1925050503d806000811461109a576040519150601f19603f3d011682016040523d82523d6000602084013e61109f565b606091505b50915091506110af8683836110b9565b9695505050505050565b6060826110ce576110c982611148565b610fef565b81511580156110f2575073ffffffffffffffffffffffffffffffffffffffff84163b155b15611141576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85166004820152602401610f02565b5080610fef565b8051156111585780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006020828403121561119c57600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610fef57600080fd5b803573ffffffffffffffffffffffffffffffffffffffff811681146111f057600080fd5b919050565b60008060008060006080868803121561120d57600080fd5b611216866111cc565b9450611224602087016111cc565b935060408601359250606086013567ffffffffffffffff81111561124757600080fd5b8601601f8101881361125857600080fd5b803567ffffffffffffffff81111561126f57600080fd5b88602082840101111561128157600080fd5b959894975092955050506020019190565b6000602082840312156112a457600080fd5b5035919050565b600080604083850312156112be57600080fd5b823591506112ce602084016111cc565b90509250929050565b6000602082840312156112e957600080fd5b610fef826111cc565b60008060006060848603121561130757600080fd5b611310846111cc565b925061131e602085016111cc565b929592945050506040919091013590565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff8616815273ffffffffffffffffffffffffffffffffffffffff851660208201528360408201526080606082015260006113ca60808301848661132f565b979650505050505050565b8381526040602082015260006113ef60408301848661132f565b95945050505050565b60006020828403121561140a57600080fd5b81518015158114610fef57600080fd5b6000825160005b8181101561143b5760208186018101518583015201611421565b50600092019182525091905056fea2646970667358221220dc54ce548a1f0bf8ba5e86cc53c6d822e55eee543451395733c659359bac8dd164736f6c634300081a00338619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a60c060405260001960035534801561001657600080fd5b5060405161155a38038061155a83398101604081905261003591610220565b60016000819055805460ff19169055838383836001600160a01b038416158061006557506001600160a01b038316155b8061007757506001600160a01b038216155b8061008957506001600160a01b038116155b156100a75760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b03808516608052831660a0526100c5600082610154565b506100f07f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e483610154565b5061011b7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb83610154565b506101467f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a82610154565b505050505050505050610274565b60008281526002602090815260408083206001600160a01b038516845290915281205460ff166101fa5760008381526002602090815260408083206001600160a01b03861684529091529020805460ff191660011790556101b23390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45060016101fe565b5060005b92915050565b80516001600160a01b038116811461021b57600080fd5b919050565b6000806000806080858703121561023657600080fd5b61023f85610204565b935061024d60208601610204565b925061025b60408601610204565b915061026960608601610204565b905092959194509250565b60805160a0516112826102d86000396000818161021d01528181610531015281816108240152818161097b01528181610ad00152610bf20152600081816101d1015281816104a1015281816105040152818161079401526107f701526112826000f3fe608060405234801561001057600080fd5b50600436106101775760003560e01c80635e3e9fef116100d857806391d148541161008c578063d547741f11610066578063d547741f14610386578063d5abeb0114610399578063e63ab1e9146103a257600080fd5b806391d1485414610311578063a217fddf14610357578063a783c7891461035f57600080fd5b8063743e0c9b116100bd578063743e0c9b146102cf5780638456cb59146102e257806385f438c1146102ea57600080fd5b80635e3e9fef146102a95780636f8b44b0146102bc57600080fd5b8063248a9ca31161012f57806336568abe1161011457806336568abe146102835780633f4ba83a146102965780635c975abb1461029e57600080fd5b8063248a9ca31461023f5780632f2ff15d1461027057600080fd5b8063106e629011610160578063106e6290146101b9578063116191b6146101cc57806321e093b11461021857600080fd5b806301ffc9a71461017c57806302d5c899146101a4575b600080fd5b61018f61018a366004610fb4565b6103c9565b60405190151581526020015b60405180910390f35b6101b76101b2366004611026565b610462565b005b6101b76101c73660046110b8565b6105f7565b6101f37f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161019b565b6101f37f000000000000000000000000000000000000000000000000000000000000000081565b61026261024d3660046110eb565b60009081526002602052604090206001015490565b60405190815260200161019b565b6101b761027e366004611104565b61069c565b6101b7610291366004611104565b6106c7565b6101b7610720565b60015460ff1661018f565b6101b76102b7366004611026565b610755565b6101b76102ca3660046110eb565b6108d0565b6101b76102dd3660046110eb565b61093e565b6101b76109e8565b6102627f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b61018f61031f366004611104565b600091825260026020908152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b610262600081565b6102627f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb81565b6101b7610394366004611104565b610a1a565b61026260035481565b6102627f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061045c57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b61046a610a3f565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461049481610a82565b61049c610a8c565b6104c77f00000000000000000000000000000000000000000000000000000000000000008684610acb565b6040517fb8969bd400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063b8969bd490610561907f0000000000000000000000000000000000000000000000000000000000000000908a908a908a908a90600401611179565b600060405180830381600087803b15801561057b57600080fd5b505af115801561058f573d6000803e3d6000fd5b505050508573ffffffffffffffffffffffffffffffffffffffff167fba96f26bdda53eb8c8ba39045dfb4ff39753fbc7a6edcf250a88e75e78d102fe8686866040516105dd939291906111d6565b60405180910390a2506105f06001600055565b5050505050565b6105ff610a3f565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461062981610a82565b610631610a8c565b61063c848484610acb565b8373ffffffffffffffffffffffffffffffffffffffff167f884edad9ce6fa2440d8a54cc123490eb96d2768479d49ff9c7366125a94243648460405161068491815260200190565b60405180910390a2506106976001600055565b505050565b6000828152600260205260409020600101546106b781610a82565b6106c18383610c53565b50505050565b73ffffffffffffffffffffffffffffffffffffffff81163314610716576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6106978282610d53565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61074a81610a82565b610752610e12565b50565b61075d610a3f565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461078781610a82565b61078f610a8c565b6107ba7f00000000000000000000000000000000000000000000000000000000000000008684610acb565b6040517f5131ab5900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690635131ab5990610854907f0000000000000000000000000000000000000000000000000000000000000000908a908a908a908a90600401611179565b600060405180830381600087803b15801561086e57600080fd5b505af1158015610882573d6000803e3d6000fd5b505050508573ffffffffffffffffffffffffffffffffffffffff167f7772f56296d3a5202974a45c61c9188d844ab4d6eeb18c851e4b8d5384ca6ced8686866040516105dd939291906111d6565b7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb6108fa81610a82565b610902610a8c565b60038290556040518281527f7810bd47de260c3e9ee10061cf438099dd12256c79485f12f94dbccc981e806c9060200160405180910390a15050565b610946610a8c565b6040517f79cc6790000000000000000000000000000000000000000000000000000000008152336004820152602481018290527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16906379cc679090604401600060405180830381600087803b1580156109d457600080fd5b505af11580156105f0573d6000803e3d6000fd5b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610a1281610a82565b610752610e8f565b600082815260026020526040902060010154610a3581610a82565b6106c18383610d53565b600260005403610a7b576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b6107528133610ee8565b60015460ff1615610ac9576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6003547f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b39573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b5d91906111f9565b610b679084611212565b1115610b9f576040517fc30436e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f1e458bee00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff848116600483015260248201849052604482018390527f00000000000000000000000000000000000000000000000000000000000000001690631e458bee90606401600060405180830381600087803b158015610c3657600080fd5b505af1158015610c4a573d6000803e3d6000fd5b50505050505050565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff16610d4b57600083815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff86168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055610ce93390565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a450600161045c565b50600061045c565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff1615610d4b57600083815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8616808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a450600161045c565b610e1a610f78565b600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b610e97610a8c565b600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016811790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25833610e65565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16610f74576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff821660048201526024810183905260440160405180910390fd5b5050565b60015460ff16610ac9576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060208284031215610fc657600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610ff657600080fd5b9392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461102157600080fd5b919050565b60008060008060006080868803121561103e57600080fd5b61104786610ffd565b945060208601359350604086013567ffffffffffffffff81111561106a57600080fd5b8601601f8101881361107b57600080fd5b803567ffffffffffffffff81111561109257600080fd5b8860208284010111156110a457600080fd5b959894975060200195606001359392505050565b6000806000606084860312156110cd57600080fd5b6110d684610ffd565b95602085013595506040909401359392505050565b6000602082840312156110fd57600080fd5b5035919050565b6000806040838503121561111757600080fd5b8235915061112760208401610ffd565b90509250929050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff8616815273ffffffffffffffffffffffffffffffffffffffff851660208201528360408201526080606082015260006111cb608083018486611130565b979650505050505050565b8381526040602082015260006111f0604083018486611130565b95945050505050565b60006020828403121561120b57600080fd5b5051919050565b8082018082111561045c577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea2646970667358221220de5fa55e0ca79ea2f08903481d01ea00bbbf346b9cfba44e12a2dd6f3a6f2e8a64736f6c634300081a00336080604052348015600f57600080fd5b506001600055610d3a806100246000396000f3fe6080604052600436106100635760003560e01c8063c513169111610040578063c5131691146100c1578063e04d4f97146100e1578063f05b6abf146100f457005b8063357fc5a21461006c5780636ed701691461008c5780638fcaa0b5146100a157005b3661006a57005b005b34801561007857600080fd5b5061006a6100873660046106c0565b610114565b34801561009857600080fd5b5061006a6101aa565b3480156100ad57600080fd5b5061006a6100bc3660046106fc565b6101df565b3480156100cd57600080fd5b5061006a6100dc3660046106c0565b61021e565b61006a6100ef366004610895565b6102f9565b34801561010057600080fd5b5061006a61010f366004610981565b61033d565b61011c610372565b61013e73ffffffffffffffffffffffffffffffffffffffff83163383866103b5565b604080513381526020810185905273ffffffffffffffffffffffffffffffffffffffff848116828401528316606082015290517f2b58128f24a9f59127cc5b5430d70542b22220f2d9adaa86e442b816ab98af609181900360800190a16101a56001600055565b505050565b6040513381527fbcaadb46b82a48af60b608f58959ae6b8310d1b0a0d094c2e9ec3208ed39f2a09060200160405180910390a1565b7f0d3f65f00e631663aa85c96330b5c7a83bb29af3630c0063776f985edc3037aa33838360405161021293929190610a6b565b60405180910390a15050565b610226610372565b6000610233600285610ad5565b90508060000361026f576040517f1f2a200500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61029173ffffffffffffffffffffffffffffffffffffffff84163384846103b5565b604080513381526020810183905273ffffffffffffffffffffffffffffffffffffffff858116828401528416606082015290517f2b58128f24a9f59127cc5b5430d70542b22220f2d9adaa86e442b816ab98af609181900360800190a1506101a56001600055565b7f1f1ff1f5fb41346850b2f5c04e6c767e2f1c8a525c5c0c5cdb60cdf3ca5f62fa3334858585604051610330959493929190610b7e565b60405180910390a1505050565b7f74a53cd528a921fca7dbdee62f86819051d3cc98f214951f4238e8843f20b146338484846040516103309493929190610c08565b6002600054036103ae576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b6040805173ffffffffffffffffffffffffffffffffffffffff85811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd0000000000000000000000000000000000000000000000000000000017905261044a908590610450565b50505050565b600061047273ffffffffffffffffffffffffffffffffffffffff8416836104eb565b905080516000141580156104975750808060200190518101906104959190610ccb565b155b156101a5576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff841660048201526024015b60405180910390fd5b60606104f983836000610500565b9392505050565b60608147101561053e576040517fcd7860590000000000000000000000000000000000000000000000000000000081523060048201526024016104e2565b6000808573ffffffffffffffffffffffffffffffffffffffff1684866040516105679190610ce8565b60006040518083038185875af1925050503d80600081146105a4576040519150601f19603f3d011682016040523d82523d6000602084013e6105a9565b606091505b50915091506105b98683836105c3565b9695505050505050565b6060826105d8576105d382610652565b6104f9565b81511580156105fc575073ffffffffffffffffffffffffffffffffffffffff84163b155b1561064b576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff851660048201526024016104e2565b50806104f9565b8051156106625780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50565b803573ffffffffffffffffffffffffffffffffffffffff811681146106bb57600080fd5b919050565b6000806000606084860312156106d557600080fd5b833592506106e560208501610697565b91506106f360408501610697565b90509250925092565b6000806020838503121561070f57600080fd5b823567ffffffffffffffff81111561072657600080fd5b8301601f8101851361073757600080fd5b803567ffffffffffffffff81111561074e57600080fd5b85602082840101111561076057600080fd5b6020919091019590945092505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156107e6576107e6610770565b604052919050565b600082601f8301126107ff57600080fd5b813567ffffffffffffffff81111561081957610819610770565b61084a60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8401160161079f565b81815284602083860101111561085f57600080fd5b816020850160208301376000918101602001919091529392505050565b801515811461069457600080fd5b80356106bb8161087c565b6000806000606084860312156108aa57600080fd5b833567ffffffffffffffff8111156108c157600080fd5b6108cd868287016107ee565b9350506020840135915060408401356108e58161087c565b809150509250925092565b600067ffffffffffffffff82111561090a5761090a610770565b5060051b60200190565b600082601f83011261092557600080fd5b8135610938610933826108f0565b61079f565b8082825260208201915060208360051b86010192508583111561095a57600080fd5b602085015b8381101561097757803583526020928301920161095f565b5095945050505050565b60008060006060848603121561099657600080fd5b833567ffffffffffffffff8111156109ad57600080fd5b8401601f810186136109be57600080fd5b80356109cc610933826108f0565b8082825260208201915060208360051b8501019250888311156109ee57600080fd5b602084015b83811015610a3057803567ffffffffffffffff811115610a1257600080fd5b610a218b6020838901016107ee565b845250602092830192016109f3565b509550505050602084013567ffffffffffffffff811115610a5057600080fd5b610a5c86828701610914565b9250506106f36040850161088a565b73ffffffffffffffffffffffffffffffffffffffff8416815260406020820152816040820152818360608301376000818301606090810191909152601f9092017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016010192915050565b600082610b0b577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60005b83811015610b2b578181015183820152602001610b13565b50506000910152565b60008151808452610b4c816020860160208601610b10565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b73ffffffffffffffffffffffffffffffffffffffff8616815284602082015260a060408201526000610bb360a0830186610b34565b6060830194909452509015156080909101529392505050565b600081518084526020840193506020830160005b82811015610bfe578151865260209586019590910190600101610be0565b5093949350505050565b60006080820173ffffffffffffffffffffffffffffffffffffffff871683526080602084015280865180835260a08501915060a08160051b86010192506020880160005b82811015610c9b577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60878603018452610c86858351610b34565b94506020938401939190910190600101610c4c565b505050508281036040840152610cb18186610bcc565b915050610cc2606083018415159052565b95945050505050565b600060208284031215610cdd57600080fd5b81516104f98161087c565b60008251610cfa818460208701610b10565b919091019291505056fea2646970667358221220556072e1abafc3c4063b8cce832228b4f309b93726aaa6a6dfab20cb880c6d1864736f6c634300081a0033a264697066735822122046e98cccbaf070131f4e0ae9a68d5fcaf4a60e0dd7665edb0dd60abca499705764736f6c634300081a0033", + Bin: "0x6080604052600c8054600160ff199182168117909255601f80549091169091179055348015602c57600080fd5b5061f7208061003c6000396000f3fe608060405234801561001057600080fd5b50600436106102415760003560e01c8063a217fddf11610145578063cebad2a6116100bd578063e6afc7901161008c578063fa18c09b11610071578063fa18c09b1461042c578063fa7626d414610434578063fe7bdbb21461044157600080fd5b8063e6afc7901461041c578063f68bd1c01461042457600080fd5b8063cebad2a6146103dd578063dd51e82f146103e5578063e20c9f71146103ed578063e63ab1e9146103f557600080fd5b8063b124dbf511610114578063ba414fa6116100f9578063ba414fa6146103b5578063ccf20616146103cd578063ce5871e1146103d557600080fd5b8063b124dbf5146103a5578063b5508aa9146103ad57600080fd5b8063a217fddf14610366578063a56f7a4b1461036e578063a783c78914610376578063b0464fdc1461039d57600080fd5b806344671b94116101d85780637d7f772a116101a757806385226c811161018c57806385226c811461031557806385f438c11461032a578063916a17c61461035157600080fd5b80637d7f772a146103055780637ebf744f1461030d57600080fd5b806344671b94146102ab57806351010e49146102b35780635d62c860146102bb57806366d9a9a0146102f057600080fd5b80631ed7831c116102145780631ed7831c146102685780632ade3880146102865780633e5e3c231461029b5780633f7286f4146102a357600080fd5b806304b974f9146102465780630a9254e4146102505780631226c655146102585780631855c33714610260575b600080fd5b61024e610449565b005b61024e610656565b61024e610fb8565b61024e611129565b61027061129e565b60405161027d9190618684565b60405180910390f35b61028e611300565b60405161027d9190618720565b610270611442565b6102706114a2565b61024e611502565b61024e611881565b6102e27f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b981565b60405190815260200161027d565b6102f8611a5a565b60405161027d9190618886565b61024e611bdc565b61024e611f3f565b61031d6120b4565b60405161027d9190618980565b6102e27f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b610359612184565b60405161027d9190618993565b6102e2600081565b61024e61227f565b6102e27f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb81565b6103596123d1565b61024e6124cc565b61031d612770565b6103bd612840565b604051901515815260200161027d565b61024e612914565b61024e612a66565b61024e612bd7565b61024e612df8565b6102706135ed565b6102e27f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b61024e61364d565b61024e6138bb565b61024e613cb0565b601f546103bd9060ff1681565b61024e614008565b6040805160048082526024820183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f6ed7016900000000000000000000000000000000000000000000000000000000179052602854925163ca669fa760e01b81529192737109709ecfa91a80626ff3989d68f67f5b1dd12d9263ca669fa7926104f0926001600160a01b031691016001600160a01b0391909116815260200190565b600060405180830381600087803b15801561050a57600080fd5b505af115801561051e573d6000803e3d6000fd5b50506040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b1580156105a757600080fd5b505af11580156105bb573d6000803e3d6000fd5b50506020546040517f1cff79cd0000000000000000000000000000000000000000000000000000000081526001600160a01b039091169250631cff79cd915061060b906000908590600401618a2a565b6000604051808303816000875af115801561062a573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526106529190810190618b34565b5050565b602680547fffffffffffffffffffffffff00000000000000000000000000000000000000009081163017909155602780548216611234179055602880549091166156781790556040516106a89061858a565b60408082526004908201527f746573740000000000000000000000000000000000000000000000000000000060608201526080602082018190526003908201527f54544b000000000000000000000000000000000000000000000000000000000060a082015260c001604051809103906000f08015801561072d573d6000803e3d6000fd5b50602480547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03928316179055602854604051911690819061077690618597565b6001600160a01b03928316815291166020820152604001604051809103906000f0801580156107a9573d6000803e3d6000fd5b50602580547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03928316908117909155604080518082018252600e81527f4761746577617945564d2e736f6c000000000000000000000000000000000000602082015260285460265492519085166024820152604481019390935292166064820152610898919060840160408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fc0c53b8b0000000000000000000000000000000000000000000000000000000017905261447d565b601f80547fffffffffffffffffffffff0000000000000000000000000000000000000000ff166101006001600160a01b0393841681029190911791829055602080549190920483167fffffffffffffffffffffffff00000000000000000000000000000000000000009091168117909155602854602654604051929391821692911690610924906185a4565b6001600160a01b03938416815291831660208301529091166040820152606001604051809103906000f080158015610960573d6000803e3d6000fd5b50602280547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392831617905560205460255460285460265460405193851694928316939183169216906109bb906185b1565b6001600160a01b039485168152928416602084015290831660408301529091166060820152608001604051809103906000f0801580156109ff573d6000803e3d6000fd5b50602380547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392831617905560285460405163ca669fa760e01b815291166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015610a8457600080fd5b505af1158015610a98573d6000803e3d6000fd5b50506025546028546023546040517f15d57fd40000000000000000000000000000000000000000000000000000000081526001600160a01b0392831660048201529082166024820152911692506315d57fd49150604401600060405180830381600087803b158015610b0957600080fd5b505af1158015610b1d573d6000803e3d6000fd5b50505050604051610b2d906185be565b604051809103906000f080158015610b49573d6000803e3d6000fd5b50602180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039283161790556028546040517fc88a5e6d00000000000000000000000000000000000000000000000000000000815291166004820152670de0b6b3a76400006024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c88a5e6d90604401600060405180830381600087803b158015610bf557600080fd5b505af1158015610c09573d6000803e3d6000fd5b50506026546040517f06447d560000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506306447d569150602401600060405180830381600087803b158015610c7f57600080fd5b505af1158015610c93573d6000803e3d6000fd5b50506020546022546040517fae7a3a6f0000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201529116925063ae7a3a6f9150602401600060405180830381600087803b158015610cf957600080fd5b505af1158015610d0d573d6000803e3d6000fd5b50506020546023546040517f10188aef0000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152911692506310188aef9150602401600060405180830381600087803b158015610d7357600080fd5b505af1158015610d87573d6000803e3d6000fd5b505050507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b03166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610de957600080fd5b505af1158015610dfd573d6000803e3d6000fd5b5050602480546026546040517f40c10f190000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620f4240938101939093521692506340c10f199150604401600060405180830381600087803b158015610e6e57600080fd5b505af1158015610e82573d6000803e3d6000fd5b5050602480546022546040517fa9059cbb0000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201526207a1209381019390935216925063a9059cbb91506044016020604051808303816000875af1158015610ef8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f1c9190618b69565b506028546040517fc88a5e6d0000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152670de0b6b3a76400006024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c88a5e6d906044015b600060405180830381600087803b158015610f9e57600080fd5b505af1158015610fb2573d6000803e3d6000fd5b50505050565b6026546040517f06447d560000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906306447d5690602401600060405180830381600087803b15801561102a57600080fd5b505af115801561103e573d6000803e3d6000fd5b50506040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b1580156110c757600080fd5b505af11580156110db573d6000803e3d6000fd5b50506020546040517fae7a3a6f000000000000000000000000000000000000000000000000000000008152600060048201526001600160a01b03909116925063ae7a3a6f9150602401610f84565b6026546040517f06447d560000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906306447d5690602401600060405180830381600087803b15801561119b57600080fd5b505af11580156111af573d6000803e3d6000fd5b50506040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fb337f378000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e091506024015b600060405180830381600087803b15801561123957600080fd5b505af115801561124d573d6000803e3d6000fd5b50506020546022546040517fae7a3a6f0000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201529116925063ae7a3a6f9150602401610f84565b606060168054806020026020016040519081016040528092919081815260200182805480156112f657602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116112d8575b5050505050905090565b6060601e805480602002602001604051908101604052809291908181526020016000905b8282101561143957600084815260208082206040805180820182526002870290920180546001600160a01b03168352600181018054835181870281018701909452808452939591948681019491929084015b8282101561142257838290600052602060002001805461139590618b8b565b80601f01602080910402602001604051908101604052809291908181526020018280546113c190618b8b565b801561140e5780601f106113e35761010080835404028352916020019161140e565b820191906000526020600020905b8154815290600101906020018083116113f157829003601f168201915b505050505081526020019060010190611376565b505050508152505081526020019060010190611324565b50505050905090565b606060188054806020026020016040519081016040528092919081815260200182805480156112f6576020028201919060005260206000209081546001600160a01b031681526001909101906020018083116112d8575050505050905090565b606060178054806020026020016040519081016040528092919081815260200182805480156112f6576020028201919060005260206000209081546001600160a01b031681526001909101906020018083116112d8575050505050905090565b6040805160048082526024820183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f6ed701690000000000000000000000000000000000000000000000000000000017905260215492517ff30c7ba30000000000000000000000000000000000000000000000000000000081529192737109709ecfa91a80626ff3989d68f67f5b1dd12d9263f30c7ba3926115b8926001600160a01b031691600091879101618bd8565b600060405180830381600087803b1580156115d257600080fd5b505af11580156115e6573d6000803e3d6000fd5b50506021546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b15801561167857600080fd5b505af115801561168c573d6000803e3d6000fd5b5050602080546040516001600160a01b0390911681527fbcaadb46b82a48af60b608f58959ae6b8310d1b0a0d094c2e9ec3208ed39f2a0935001905060405180910390a16020546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b15801561175e57600080fd5b505af1158015611772573d6000803e3d6000fd5b50506021546040516001600160a01b0390911692507fcaf938de11c367272220bfd1d2baa99ca46665e7bc4d85f00adb51b90fe1fa9f91506117b8906000908590618c00565b60405180910390a260285460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561181957600080fd5b505af115801561182d573d6000803e3d6000fd5b50506020546021546040517f1cff79cd0000000000000000000000000000000000000000000000000000000081526001600160a01b039283169450631cff79cd935061060b92909116908590600401618a2a565b6040517f68656c6c6f0000000000000000000000000000000000000000000000000000006020820152670de0b6b3a76400009060009060250160408051808303601f190181529082905260285463ca669fa760e01b83526001600160a01b031660048301529150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561192157600080fd5b505af1158015611935573d6000803e3d6000fd5b50506040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b1580156119be57600080fd5b505af11580156119d2573d6000803e3d6000fd5b50506020546040517f35c018db0000000000000000000000000000000000000000000000000000000081526001600160a01b0390911692506335c018db91508490611a24906000908690600401618a2a565b6000604051808303818588803b158015611a3d57600080fd5b505af1158015611a51573d6000803e3d6000fd5b50505050505050565b6060601b805480602002602001604051908101604052809291908181526020016000905b828210156114395783829060005260206000209060020201604051806040016040529081600082018054611ab190618b8b565b80601f0160208091040260200160405190810160405280929190818152602001828054611add90618b8b565b8015611b2a5780601f10611aff57610100808354040283529160200191611b2a565b820191906000526020600020905b815481529060010190602001808311611b0d57829003601f168201915b5050505050815260200160018201805480602002602001604051908101604052809291908181526020018280548015611bc457602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019060040190602082600301049283019260010382029150808411611b715790505b50505050508152505081526020019060010190611a7e565b604080516001808252818301909252600091816020015b6060815260200190600190039081611bf35790505090506040518060400160405280600f81526020017f48656c6c6f2c20466f756e64727921000000000000000000000000000000000081525081600081518110611c5357611c53618c19565b6020908102919091010152604080516001808252818301909252600091816020016020820280368337019050509050602a81600081518110611c9757611c97618c19565b6020908102919091010152604051600190600090611cbd90859085908590602401618c7a565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167ff05b6abf00000000000000000000000000000000000000000000000000000000179052602654905163ca669fa760e01b81526001600160a01b039091166004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015611d7057600080fd5b505af1158015611d84573d6000803e3d6000fd5b5050602654604080516001600160a01b0390921660248301527f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb60448084019190915281518084039091018152606490920181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb39250611e6f9190600401618cb2565b600060405180830381600087803b158015611e8957600080fd5b505af1158015611e9d573d6000803e3d6000fd5b50506020546021546040517f1cff79cd0000000000000000000000000000000000000000000000000000000081526001600160a01b039283169450631cff79cd9350611ef192909116908590600401618a2a565b6000604051808303816000875af1158015611f10573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611f389190810190618b34565b5050505050565b6026546040517f06447d560000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906306447d5690602401600060405180830381600087803b158015611fb157600080fd5b505af1158015611fc5573d6000803e3d6000fd5b50506040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527f0c8dc016000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e091506024015b600060405180830381600087803b15801561204f57600080fd5b505af1158015612063573d6000803e3d6000fd5b50506020546023546040517f10188aef0000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152911692506310188aef9150602401610f84565b6060601a805480602002602001604051908101604052809291908181526020016000905b828210156114395783829060005260206000200180546120f790618b8b565b80601f016020809104026020016040519081016040528092919081815260200182805461212390618b8b565b80156121705780601f1061214557610100808354040283529160200191612170565b820191906000526020600020905b81548152906001019060200180831161215357829003601f168201915b5050505050815260200190600101906120d8565b6060601d805480602002602001604051908101604052809291908181526020016000905b828210156114395760008481526020908190206040805180820182526002860290920180546001600160a01b0316835260018101805483518187028101870190945280845293949193858301939283018282801561226757602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190600401906020826003010492830192600103820291508084116122145790505b505050505081525050815260200190600101906121a8565b6028546040517f06447d560000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906306447d5690602401600060405180830381600087803b1580156122f157600080fd5b505af1158015612305573d6000803e3d6000fd5b5050602854604080516001600160a01b039092166024830152600060448084019190915281518084039091018152606490920181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb3925061121f9190600401618cb2565b6060601c805480602002602001604051908101604052809291908181526020016000905b828210156114395760008481526020908190206040805180820182526002860290920180546001600160a01b031683526001810180548351818702810187019094528084529394919385830193928301828280156124b457602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190600401906020826003010492830192600103820291508084116124615790505b505050505081525050815260200190600101906123f5565b60248054602754604051620186a09381018490526001600160a01b0392831660448201529116606482015260009060840160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f357fc5a200000000000000000000000000000000000000000000000000000000179052602654905163ca669fa760e01b81526001600160a01b039091166004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156125b057600080fd5b505af11580156125c4573d6000803e3d6000fd5b5050602654604080516001600160a01b0390921660248301527f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b960448084019190915281518084039091018152606490920181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb392506126af9190600401618cb2565b600060405180830381600087803b1580156126c957600080fd5b505af11580156126dd573d6000803e3d6000fd5b50506020546024546027546040517fb8969bd40000000000000000000000000000000000000000000000000000000081526001600160a01b03938416955063b8969bd4945061273a93928316929091169087908790600401618cc5565b600060405180830381600087803b15801561275457600080fd5b505af1158015612768573d6000803e3d6000fd5b505050505050565b60606019805480602002602001604051908101604052809291908181526020016000905b828210156114395783829060005260206000200180546127b390618b8b565b80601f01602080910402602001604051908101604052809291908181526020018280546127df90618b8b565b801561282c5780601f106128015761010080835404028352916020019161282c565b820191906000526020600020905b81548152906001019060200180831161280f57829003601f168201915b505050505081526020019060010190612794565b60085460009060ff1615612858575060085460ff1690565b6040517f667f9d70000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d600482018190527f6661696c65640000000000000000000000000000000000000000000000000000602483015260009163667f9d7090604401602060405180830381865afa1580156128e9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061290d9190618cfc565b1415905090565b6028546040517f06447d560000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906306447d5690602401600060405180830381600087803b15801561298657600080fd5b505af115801561299a573d6000803e3d6000fd5b5050602854604080516001600160a01b039092166024830152600060448084019190915281518084039091018152606490920181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb392506120359190600401618cb2565b6026546040517f06447d560000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906306447d5690602401600060405180830381600087803b158015612ad857600080fd5b505af1158015612aec573d6000803e3d6000fd5b50506040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b158015612b7557600080fd5b505af1158015612b89573d6000803e3d6000fd5b50506020546040517f10188aef000000000000000000000000000000000000000000000000000000008152600060048201526001600160a01b0390911692506310188aef9150602401610f84565b6040517f68656c6c6f0000000000000000000000000000000000000000000000000000006020820152670de0b6b3a76400009060009060250160408051808303601f190181529082905260265463ca669fa760e01b83526001600160a01b031660048301529150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015612c7757600080fd5b505af1158015612c8b573d6000803e3d6000fd5b5050602654604080516001600160a01b0390921660248301527f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb60448084019190915281518084039091018152606490920181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb39250612d769190600401618cb2565b600060405180830381600087803b158015612d9057600080fd5b505af1158015612da4573d6000803e3d6000fd5b50506020546021546040517f35c018db0000000000000000000000000000000000000000000000000000000081526001600160a01b0392831694506335c018db93508692611a249216908690600401618a2a565b60285460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015612e5157600080fd5b505af1158015612e65573d6000803e3d6000fd5b5050602854604080516001600160a01b0390921660248301527f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a60448084019190915281518084039091018152606490920181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb39250612f509190600401618cb2565b600060405180830381600087803b158015612f6a57600080fd5b505af1158015612f7e573d6000803e3d6000fd5b50505050602060009054906101000a90046001600160a01b03166001600160a01b0316638456cb596040518163ffffffff1660e01b8152600401600060405180830381600087803b158015612fd257600080fd5b505af1158015612fe6573d6000803e3d6000fd5b505060285460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b15801561304357600080fd5b505af1158015613057573d6000803e3d6000fd5b5050602854604080516001600160a01b0390921660248301527f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a60448084019190915281518084039091018152606490920181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb392506131429190600401618cb2565b600060405180830381600087803b15801561315c57600080fd5b505af1158015613170573d6000803e3d6000fd5b50505050602060009054906101000a90046001600160a01b03166001600160a01b0316633f4ba83a6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156131c457600080fd5b505af11580156131d8573d6000803e3d6000fd5b505060265460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b15801561323557600080fd5b505af1158015613249573d6000803e3d6000fd5b50505050602060009054906101000a90046001600160a01b03166001600160a01b0316638456cb596040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561329d57600080fd5b505af11580156132b1573d6000803e3d6000fd5b5050604080516004808252602480830184526020830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f6ed701690000000000000000000000000000000000000000000000000000000017905292517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fd93c06650000000000000000000000000000000000000000000000000000000091810191909152909350737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09101600060405180830381600087803b15801561339357600080fd5b505af11580156133a7573d6000803e3d6000fd5b505060285460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b15801561340457600080fd5b505af1158015613418573d6000803e3d6000fd5b50506020546021546040517f1cff79cd0000000000000000000000000000000000000000000000000000000081526001600160a01b039283169450631cff79cd935061346c92909116908590600401618a2a565b6000604051808303816000875af115801561348b573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526134b39190810190618b34565b5060265460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561350d57600080fd5b505af1158015613521573d6000803e3d6000fd5b50505050602060009054906101000a90046001600160a01b03166001600160a01b0316633f4ba83a6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561357557600080fd5b505af1158015613589573d6000803e3d6000fd5b50506021546040517ff30c7ba3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f30c7ba392506115b8916001600160a01b0316906000908690600401618bd8565b606060158054806020026020016040519081016040528092919081815260200182805480156112f6576020028201919060005260206000209081546001600160a01b031681526001909101906020018083116112d8575050505050905090565b60248054602754604051620186a09381018490526001600160a01b0392831660448201529116606482015260009060840160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f357fc5a200000000000000000000000000000000000000000000000000000000179052602654905163ca669fa760e01b81526001600160a01b039091166004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561373157600080fd5b505af1158015613745573d6000803e3d6000fd5b5050602654604080516001600160a01b0390921660248301527f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b960448084019190915281518084039091018152606490920181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb392506138309190600401618cb2565b600060405180830381600087803b15801561384a57600080fd5b505af115801561385e573d6000803e3d6000fd5b50506020546024546027546040517f5131ab590000000000000000000000000000000000000000000000000000000081526001600160a01b039384169550635131ab59945061273a93928316929091169087908790600401618cc5565b604080516001808252818301909252600091816020015b60608152602001906001900390816138d25790505090506040518060400160405280600f81526020017f48656c6c6f2c20466f756e6472792100000000000000000000000000000000008152508160008151811061393257613932618c19565b6020908102919091010152604080516001808252818301909252600091816020016020820280368337019050509050602a8160008151811061397657613976618c19565b602090810291909101015260405160019060009061399c90859085908590602401618c7a565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167ff05b6abf0000000000000000000000000000000000000000000000000000000017905260215490517ff30c7ba3000000000000000000000000000000000000000000000000000000008152919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f30c7ba391613a59916001600160a01b0391909116906000908690600401618bd8565b600060405180830381600087803b158015613a7357600080fd5b505af1158015613a87573d6000803e3d6000fd5b50506021546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b158015613b1957600080fd5b505af1158015613b2d573d6000803e3d6000fd5b50506020546040517f74a53cd528a921fca7dbdee62f86819051d3cc98f214951f4238e8843f20b1469350613b7492506001600160a01b0390911690879087908790618d15565b60405180910390a16020546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b158015613c0a57600080fd5b505af1158015613c1e573d6000803e3d6000fd5b50506021546040516001600160a01b0390911692507fcaf938de11c367272220bfd1d2baa99ca46665e7bc4d85f00adb51b90fe1fa9f9150613c64906000908590618c00565b60405180910390a260285460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401611e6f565b604080517f68656c6c6f0000000000000000000000000000000000000000000000000000006020820152815160058183030181526025909101909152602154670de0b6b3a764000091906001600160a01b031631613d0f81600061449c565b6021546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b158015613d9d57600080fd5b505af1158015613db1573d6000803e3d6000fd5b50506020546040517f0d3f65f00e631663aa85c96330b5c7a83bb29af3630c0063776f985edc3037aa9350613df492506001600160a01b03909116908590618a2a565b60405180910390a16020546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b158015613e8a57600080fd5b505af1158015613e9e573d6000803e3d6000fd5b50506021546040516001600160a01b0390911692507fd5d7616b1678354a0dea9d7e57e6a090bff5babe9f8d6381fdbad16e89ba311c9150613eeb90670de0b6b3a7640000908690618c00565b60405180910390a260285460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015613f4c57600080fd5b505af1158015613f60573d6000803e3d6000fd5b50506020546021546040517f35c018db0000000000000000000000000000000000000000000000000000000081526001600160a01b0392831694506335c018db93508792613fb49216908790600401618a2a565b6000604051808303818588803b158015613fcd57600080fd5b505af1158015613fe1573d6000803e3d6000fd5b50506021546001600160a01b0316319250610fb29150829050670de0b6b3a764000061449c565b60408051808201909152600f81527f48656c6c6f2c20466f756e6472792100000000000000000000000000000000006020820152602154602a90600190670de0b6b3a764000090614065906000906001600160a01b03163161449c565b600084848460405160240161407c93929190618d5d565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe04d4f970000000000000000000000000000000000000000000000000000000017905260215490517ff30c7ba3000000000000000000000000000000000000000000000000000000008152919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f30c7ba391614140916001600160a01b039190911690670de0b6b3a7640000908690600401618bd8565b600060405180830381600087803b15801561415a57600080fd5b505af115801561416e573d6000803e3d6000fd5b50506021546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b15801561420057600080fd5b505af1158015614214573d6000803e3d6000fd5b50506020546040517f1f1ff1f5fb41346850b2f5c04e6c767e2f1c8a525c5c0c5cdb60cdf3ca5f62fa935061425d92506001600160a01b03909116908590899089908990618d87565b60405180910390a16020546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b1580156142f357600080fd5b505af1158015614307573d6000803e3d6000fd5b50506021546040516001600160a01b0390911692507fcaf938de11c367272220bfd1d2baa99ca46665e7bc4d85f00adb51b90fe1fa9f915061435490670de0b6b3a7640000908590618c00565b60405180910390a260285460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156143b557600080fd5b505af11580156143c9573d6000803e3d6000fd5b50506020546021546040517f1cff79cd0000000000000000000000000000000000000000000000000000000081526001600160a01b039283169450631cff79cd9350869261441d9216908690600401618a2a565b60006040518083038185885af115801561443b573d6000803e3d6000fd5b50505050506040513d6000823e601f3d908101601f191682016040526144649190810190618b34565b50602154611f389083906001600160a01b03163161449c565b60006144876185cb565b61449284848361451b565b9150505b92915050565b6040517f98296c540000000000000000000000000000000000000000000000000000000081526004810183905260248101829052737109709ecfa91a80626ff3989d68f67f5b1dd12d906398296c549060440160006040518083038186803b15801561450757600080fd5b505afa158015612768573d6000803e3d6000fd5b6000806145288584614596565b905061458b6040518060400160405280601d81526020017f4552433139363750726f78792e736f6c3a4552433139363750726f78790000008152508286604051602001614576929190618a2a565b604051602081830303815290604052856145a2565b9150505b9392505050565b600061458f83836145d0565b60c081015151600090156145c6576145bf84848460c001516145eb565b905061458f565b6145bf8484614791565b60006145dc838361487c565b61458f838360200151846145a2565b6000806145f6614888565b90506000614604868361495b565b9050600061461b8260600151836020015185614e01565b9050600061462b83838989615013565b9050600061463882615e90565b602081015181519192509060030b156146ab57898260400151604051602001614662929190618dc8565b60408051601f19818403018152908290527f08c379a00000000000000000000000000000000000000000000000000000000082526146a291600401618cb2565b60405180910390fd5b60006146ee6040518060400160405280601581526020017f4465706c6f79656420746f20616464726573733a20000000000000000000000081525083600161605f565b6040517fc6ce059d000000000000000000000000000000000000000000000000000000008152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c6ce059d90614741908490600401618cb2565b602060405180830381865afa15801561475e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906147829190618e49565b9b9a5050505050505050505050565b6040517f8d1cc9250000000000000000000000000000000000000000000000000000000081526000908190737109709ecfa91a80626ff3989d68f67f5b1dd12d90638d1cc925906147e6908790600401618cb2565b600060405180830381865afa158015614803573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261482b9190810190618b34565b905060006148598285604051602001614845929190618e72565b60405160208183030381529060405261625f565b90506001600160a01b038116614492578484604051602001614662929190618ea1565b61065282826000616272565b604080518082018252600381527f6f75740000000000000000000000000000000000000000000000000000000000602082015290517fd145736c000000000000000000000000000000000000000000000000000000008152606091737109709ecfa91a80626ff3989d68f67f5b1dd12d91829063d145736c9061490f908490600401618f4c565b600060405180830381865afa15801561492c573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526149549190810190618f93565b9250505090565b61498d6040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b6000737109709ecfa91a80626ff3989d68f67f5b1dd12d90506149d86040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b6149e185616375565b602082015260006149f18661675a565b90506000836001600160a01b031663d930a0e66040518163ffffffff1660e01b8152600401600060405180830381865afa158015614a33573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052614a5b9190810190618f93565b86838560200151604051602001614a759493929190618fdc565b60408051601f19818403018152908290527f60f9bb1100000000000000000000000000000000000000000000000000000000825291506000906001600160a01b038616906360f9bb1190614acd908590600401618cb2565b600060405180830381865afa158015614aea573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052614b129190810190618f93565b6040517fdb4235f60000000000000000000000000000000000000000000000000000000081529091506001600160a01b0386169063db4235f690614b5a9084906004016190e0565b602060405180830381865afa158015614b77573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614b9b9190618b69565b614bb057816040516020016146629190619132565b6040517f49c4fac80000000000000000000000000000000000000000000000000000000081526001600160a01b038616906349c4fac890614bf59084906004016191c4565b600060405180830381865afa158015614c12573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052614c3a9190810190618f93565b84526040517fdb4235f60000000000000000000000000000000000000000000000000000000081526001600160a01b0386169063db4235f690614c81908490600401619216565b602060405180830381865afa158015614c9e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614cc29190618b69565b15614d57576040517f49c4fac80000000000000000000000000000000000000000000000000000000081526001600160a01b038616906349c4fac890614d0c908490600401619216565b600060405180830381865afa158015614d29573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052614d519190810190618f93565b60408501525b846001600160a01b03166349c4fac8828660000151604051602001614d7c9190619268565b6040516020818303038152906040526040518363ffffffff1660e01b8152600401614da89291906192d4565b600060405180830381865afa158015614dc5573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052614ded9190810190618f93565b606085015250608083015250949350505050565b60408051600480825260a0820190925260609160009190816020015b6060815260200190600190039081614e1d5790505090506040518060400160405280600481526020017f677265700000000000000000000000000000000000000000000000000000000081525081600081518110614e7d57614e7d618c19565b60200260200101819052506040518060400160405280600381526020017f2d726c000000000000000000000000000000000000000000000000000000000081525081600181518110614ed157614ed1618c19565b602002602001018190525084604051602001614eed91906192f9565b60405160208183030381529060405281600281518110614f0f57614f0f618c19565b602002602001018190525082604051602001614f2b9190619365565b60405160208183030381529060405281600381518110614f4d57614f4d618c19565b60200260200101819052506000614f6382615e90565b602080820151604080518082018252600581527f2e6a736f6e0000000000000000000000000000000000000000000000000000008185019081528251808401845260008082529086015282518084019093529051825292810192909252919250614ff490604080518082018252600080825260209182015281518083019092528451825280850190820152906169dd565b615009578560405160200161466291906193a6565b9695505050505050565b60a0810151604080518082018252600080825260209182015281518083019092528251808352928101910152606090737109709ecfa91a80626ff3989d68f67f5b1dd12d9015615063565b511590565b6151d75782602001511561511f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605860248201527f54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f742060448201527f62652075736564207768656e207468652060736b6970566572696679536f757260648201527f6365436f646560206f7074696f6e206973206074727565600000000000000000608482015260a4016146a2565b8260c00151156151d7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605360248201527f54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f742060448201527f62652075736564207768656e207468652060736b69704c6963656e736554797060648201527f6560206f7074696f6e2069732060747275656000000000000000000000000000608482015260a4016146a2565b6040805160ff8082526120008201909252600091816020015b60608152602001906001900390816151f057905050905060006040518060400160405280600381526020017f6e7078000000000000000000000000000000000000000000000000000000000081525082828061524b90619466565b935060ff168151811061526057615260618c19565b60200260200101819052506040518060400160405280600d81526020017f302e302e312d616c7068612e37000000000000000000000000000000000000008152506040516020016152b19190619485565b6040516020818303038152906040528282806152cc90619466565b935060ff16815181106152e1576152e1618c19565b60200260200101819052506040518060400160405280600681526020017f6465706c6f79000000000000000000000000000000000000000000000000000081525082828061532e90619466565b935060ff168151811061534357615343618c19565b60200260200101819052506040518060400160405280600e81526020017f2d2d636f6e74726163744e616d6500000000000000000000000000000000000081525082828061539090619466565b935060ff16815181106153a5576153a5618c19565b602002602001018190525087602001518282806153c190619466565b935060ff16815181106153d6576153d6618c19565b60200260200101819052506040518060400160405280600e81526020017f2d2d636f6e74726163745061746800000000000000000000000000000000000081525082828061542390619466565b935060ff168151811061543857615438618c19565b60209081029190910101528751828261545081619466565b935060ff168151811061546557615465618c19565b60200260200101819052506040518060400160405280600981526020017f2d2d636861696e496400000000000000000000000000000000000000000000008152508282806154b290619466565b935060ff16815181106154c7576154c7618c19565b60200260200101819052506154db46616a3e565b82826154e681619466565b935060ff16815181106154fb576154fb618c19565b60200260200101819052506040518060400160405280600f81526020017f2d2d6275696c64496e666f46696c65000000000000000000000000000000000081525082828061554890619466565b935060ff168151811061555d5761555d618c19565b60200260200101819052508682828061557590619466565b935060ff168151811061558a5761558a618c19565b60209081029190910101528551156156b15760408051808201909152601581527f2d2d636f6e7374727563746f7242797465636f64650000000000000000000000602082015282826155db81619466565b935060ff16815181106155f0576155f0618c19565b60209081029190910101526040517f71aad10d0000000000000000000000000000000000000000000000000000000081526001600160a01b038416906371aad10d90615640908990600401618cb2565b600060405180830381865afa15801561565d573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526156859190810190618f93565b828261569081619466565b935060ff16815181106156a5576156a5618c19565b60200260200101819052505b8460200151156157815760408051808201909152601281527f2d2d766572696679536f75726365436f64650000000000000000000000000000602082015282826156fa81619466565b935060ff168151811061570f5761570f618c19565b60200260200101819052506040518060400160405280600581526020017f66616c736500000000000000000000000000000000000000000000000000000081525082828061575c90619466565b935060ff168151811061577157615771618c19565b6020026020010181905250615948565b6157b961505e8660a0015160408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b61584c5760408051808201909152600d81527f2d2d6c6963656e73655479706500000000000000000000000000000000000000602082015282826157fc81619466565b935060ff168151811061581157615811618c19565b60200260200101819052508460a0015160405160200161583191906192f9565b60405160208183030381529060405282828061575c90619466565b8460c0015115801561588f57506040808901518151808301835260008082526020918201528251808401909352815183529081019082015261588d90511590565b155b156159485760408051808201909152600d81527f2d2d6c6963656e73655479706500000000000000000000000000000000000000602082015282826158d381619466565b935060ff16815181106158e8576158e8618c19565b60200260200101819052506158fc88616ade565b60405160200161590c91906192f9565b60405160208183030381529060405282828061592790619466565b935060ff168151811061593c5761593c618c19565b60200260200101819052505b6040808601518151808301835260008082526020918201528251808401909352815183529081019082015261597c90511590565b615a115760408051808201909152600b81527f2d2d72656c617965724964000000000000000000000000000000000000000000602082015282826159bf81619466565b935060ff16815181106159d4576159d4618c19565b602002602001018190525084604001518282806159f090619466565b935060ff1681518110615a0557615a05618c19565b60200260200101819052505b606085015115615b325760408051808201909152600681527f2d2d73616c74000000000000000000000000000000000000000000000000000060208201528282615a5a81619466565b935060ff1681518110615a6f57615a6f618c19565b602090810291909101015260608501516040517fb11a19e800000000000000000000000000000000000000000000000000000000815260048101919091526001600160a01b0384169063b11a19e890602401600060405180830381865afa158015615ade573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052615b069190810190618f93565b8282615b1181619466565b935060ff1681518110615b2657615b26618c19565b60200260200101819052505b60e08501515115615bd95760408051808201909152600a81527f2d2d6761734c696d69740000000000000000000000000000000000000000000060208201528282615b7c81619466565b935060ff1681518110615b9157615b91618c19565b6020026020010181905250615bad8560e0015160000151616a3e565b8282615bb881619466565b935060ff1681518110615bcd57615bcd618c19565b60200260200101819052505b60e08501516020015115615c835760408051808201909152600a81527f2d2d67617350726963650000000000000000000000000000000000000000000060208201528282615c2681619466565b935060ff1681518110615c3b57615c3b618c19565b6020026020010181905250615c578560e0015160200151616a3e565b8282615c6281619466565b935060ff1681518110615c7757615c77618c19565b60200260200101819052505b60e08501516040015115615d2d5760408051808201909152600e81527f2d2d6d617846656550657247617300000000000000000000000000000000000060208201528282615cd081619466565b935060ff1681518110615ce557615ce5618c19565b6020026020010181905250615d018560e0015160400151616a3e565b8282615d0c81619466565b935060ff1681518110615d2157615d21618c19565b60200260200101819052505b60e08501516060015115615dd75760408051808201909152601681527f2d2d6d61785072696f726974794665655065724761730000000000000000000060208201528282615d7a81619466565b935060ff1681518110615d8f57615d8f618c19565b6020026020010181905250615dab8560e0015160600151616a3e565b8282615db681619466565b935060ff1681518110615dcb57615dcb618c19565b60200260200101819052505b60008160ff1667ffffffffffffffff811115615df557615df5618a4c565b604051908082528060200260200182016040528015615e2857816020015b6060815260200190600190039081615e135790505b50905060005b8260ff168160ff161015615e8157838160ff1681518110615e5157615e51618c19565b6020026020010151828260ff1681518110615e6e57615e6e618c19565b6020908102919091010152600101615e2e565b5093505050505b949350505050565b615eb76040518060600160405280600060030b815260200160608152602001606081525090565b60408051808201825260048082527f6261736800000000000000000000000000000000000000000000000000000000602083015291517fd145736c000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d92600091849163d145736c91615f3d918691016194f0565b600060405180830381865afa158015615f5a573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052615f829190810190618f93565b90506000615f9086836175cd565b90506000846001600160a01b031663f45c1ce7836040518263ffffffff1660e01b8152600401615fc09190618980565b6000604051808303816000875af1158015615fdf573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526160079190810190619537565b805190915060030b158015906160205750602081015151155b801561602f5750604081015151155b15615009578160008151811061604757616047618c19565b602002602001015160405160200161466291906195ed565b606060006160948560408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6040805180820182526000808252602091820152815180830190925286518252808701908201529091506160cb9082905b90617722565b15616228576000616148826161428461613c61610e8a60408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6040805180820182526000808252602091820152815180830190925282518252918201519181019190915290565b90617749565b906177ab565b604080518082018252600181527f0a00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201529091506161ac908290617722565b1561621657604080518082018252600181527f0a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616213905b8290617830565b90505b61621f81617856565b9250505061458f565b82156162415784846040516020016146629291906197d9565b505060408051602081019091526000815261458f565b509392505050565b6000808251602084016000f09392505050565b8160a001511561628157505050565b600061628e8484846178bf565b9050600061629b82615e90565b602081015181519192509060030b1580156163375750604080518082018252600781527f535543434553530000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616337906040805180820182526000808252602091820152815180830190925284518252808501908201526160c5565b1561634457505050505050565b604082015151156163645781604001516040516020016146629190619880565b8060405160200161466291906198de565b606060006163aa8360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600481527f2e736f6c000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015290915061640f905b82906169dd565b1561647e57604080518082018252600481527f2e736f6c000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261458f90616479908390617e5a565b617856565b604080518082018252600181527f3a00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526164e0905b8290617ee4565b6001036165ad57604080518082018252600181527f3a00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526165469061620c565b50604080518082018252600181527f3a000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261458f90616479905b8390617830565b604080518082018252600581527f2e6a736f6e0000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261660c90616408565b1561674357604080518082018252600181527f2f00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820181905284518086019095529251845283015290616674908390617f7e565b9050600081600183516166879190619949565b8151811061669757616697618c19565b6020026020010151905061673a61647961670d6040518060400160405280600581526020017f2e6a736f6e00000000000000000000000000000000000000000000000000000081525060408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b60408051808201825260008082526020918201528151808301909252855182528086019082015290617e5a565b95945050505050565b82604051602001614662919061995c565b50919050565b6060600061678f8360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600481527f2e736f6c00000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201529091506167f190616408565b156167ff5761458f81617856565b604080518082018252600181527f3a000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261685e906164d9565b6001036168c857604080518082018252600181527f3a000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261458f90616479906165a6565b604080518082018252600581527f2e6a736f6e0000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261692790616408565b1561674357604080518082018252600181527f2f0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082018190528451808601909552925184528301529061698f908390617f7e565b90506001815111156169cb5780600282516169aa9190619949565b815181106169ba576169ba618c19565b602002602001015192505050919050565b5082604051602001614662919061995c565b8051825160009111156169f257506000614496565b81518351602085015160009291616a0891619a3a565b616a129190619949565b905082602001518103616a29576001915050614496565b82516020840151819020912014905092915050565b60606000616a4b83618023565b600101905060008167ffffffffffffffff811115616a6b57616a6b618a4c565b6040519080825280601f01601f191660200182016040528015616a95576020820181803683370190505b5090508181016020015b600019017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a8504945084616a9f57509392505050565b604081810151815180830183526000808252602091820181905283518085018552835181529282018383015283518085018552600a81527f554e4c4943454e5345440000000000000000000000000000000000000000000081840190815285518087018752838152840192909252845180860190955251845290830152606091616b6a905b8290618105565b15616baa57505060408051808201909152600481527f4e6f6e65000000000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600981527f556e6c6963656e7365000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616c0990616b63565b15616c4957505060408051808201909152600981527f556e6c6963656e736500000000000000000000000000000000000000000000006020820152919050565b604080518082018252600381527f4d4954000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616ca890616b63565b15616ce857505060408051808201909152600381527f4d495400000000000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f47504c2d322e302d6f6e6c79000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616d4790616b63565b80616dac5750604080518082018252601081527f47504c2d322e302d6f722d6c617465720000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616dac90616b63565b15616dec57505060408051808201909152600981527f474e552047504c763200000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f47504c2d332e302d6f6e6c79000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616e4b90616b63565b80616eb05750604080518082018252601081527f47504c2d332e302d6f722d6c617465720000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616eb090616b63565b15616ef057505060408051808201909152600981527f474e552047504c763300000000000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4c47504c2d322e312d6f6e6c790000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616f4f90616b63565b80616fb45750604080518082018252601181527f4c47504c2d322e312d6f722d6c6174657200000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616fb490616b63565b15616ff457505060408051808201909152600c81527f474e55204c47504c76322e3100000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4c47504c2d332e302d6f6e6c79000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261705390616b63565b806170b85750604080518082018252601181527f4c47504c2d332e302d6f722d6c61746572000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526170b890616b63565b156170f857505060408051808201909152600a81527f474e55204c47504c7633000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f4253442d322d436c6175736500000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261715790616b63565b1561719757505060408051808201909152600c81527f4253442d322d436c6175736500000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f4253442d332d436c617573650000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526171f690616b63565b1561723657505060408051808201909152600c81527f4253442d332d436c6175736500000000000000000000000000000000000000006020820152919050565b604080518082018252600781527f4d504c2d322e30000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261729590616b63565b156172d557505060408051808201909152600781527f4d504c2d322e30000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600781527f4f534c2d332e30000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261733490616b63565b1561737457505060408051808201909152600781527f4f534c2d332e30000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600a81527f4170616368652d322e3000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526173d390616b63565b1561741357505060408051808201909152600a81527f4170616368652d322e30000000000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4147504c2d332e302d6f6e6c79000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261747290616b63565b806174d75750604080518082018252601181527f4147504c2d332e302d6f722d6c61746572000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526174d790616b63565b1561751757505060408051808201909152600a81527f474e55204147504c7633000000000000000000000000000000000000000000006020820152919050565b604080518082018252600881527f4255534c2d312e310000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261757690616b63565b156175b657505060408051808201909152600781527f42534c20312e31000000000000000000000000000000000000000000000000006020820152919050565b604080840151845191516146629290602001619a4d565b60608060005b845181101561765857818582815181106175ef576175ef618c19565b6020026020010151604051602001617608929190618e72565b6040516020818303038152906040529150600185516176279190619949565b8114617650578160405160200161763e9190619bb6565b60405160208183030381529060405291505b6001016175d3565b5060408051600380825260808201909252600091816020015b6060815260200190600190039081617671579050509050838160008151811061769c5761769c618c19565b60200260200101819052506040518060400160405280600281526020017f2d63000000000000000000000000000000000000000000000000000000000000815250816001815181106176f0576176f0618c19565b6020026020010181905250818160028151811061770f5761770f618c19565b6020908102919091010152949350505050565b60208083015183518351928401516000936177409291849190618119565b14159392505050565b6040805180820190915260008082526020820152600061777b846000015185602001518560000151866020015161822a565b905083602001518161778d9190619949565b8451859061779c908390619949565b90525060208401525090919050565b60408051808201909152600080825260208201528151835110156177d0575081614496565b60208083015190840151600191146177f75750815160208481015190840151829020919020145b80156178285782518451859061780e908390619949565b9052508251602085018051617824908390619a3a565b9052505b509192915050565b604080518082019091526000808252602082015261784f83838361834a565b5092915050565b60606000826000015167ffffffffffffffff81111561787757617877618a4c565b6040519080825280601f01601f1916602001820160405280156178a1576020820181803683370190505b509050600060208201905061784f81856020015186600001516183f5565b606060006178cb614888565b6040805160ff808252612000820190925291925060009190816020015b60608152602001906001900390816178e857905050905060006040518060400160405280600381526020017f6e7078000000000000000000000000000000000000000000000000000000000081525082828061794390619466565b935060ff168151811061795857617958618c19565b60200260200101819052506040518060400160405280600781526020017f5e312e33322e33000000000000000000000000000000000000000000000000008152506040516020016179a99190619bf7565b6040516020818303038152906040528282806179c490619466565b935060ff16815181106179d9576179d9618c19565b60200260200101819052506040518060400160405280600881526020017f76616c6964617465000000000000000000000000000000000000000000000000815250828280617a2690619466565b935060ff1681518110617a3b57617a3b618c19565b602002602001018190525082604051602001617a579190619365565b604051602081830303815290604052828280617a7290619466565b935060ff1681518110617a8757617a87618c19565b60200260200101819052506040518060400160405280600a81526020017f2d2d636f6e747261637400000000000000000000000000000000000000000000815250828280617ad490619466565b935060ff1681518110617ae957617ae9618c19565b6020026020010181905250617afe878461846f565b8282617b0981619466565b935060ff1681518110617b1e57617b1e618c19565b602090810291909101015285515115617bca5760408051808201909152600b81527f2d2d7265666572656e636500000000000000000000000000000000000000000060208201528282617b7081619466565b935060ff1681518110617b8557617b85618c19565b6020026020010181905250617b9e86600001518461846f565b8282617ba981619466565b935060ff1681518110617bbe57617bbe618c19565b60200260200101819052505b856080015115617c385760408051808201909152601881527f2d2d756e73616665536b697053746f72616765436865636b000000000000000060208201528282617c1381619466565b935060ff1681518110617c2857617c28618c19565b6020026020010181905250617c9e565b8415617c9e5760408051808201909152601281527f2d2d726571756972655265666572656e6365000000000000000000000000000060208201528282617c7d81619466565b935060ff1681518110617c9257617c92618c19565b60200260200101819052505b60408601515115617d3a5760408051808201909152600d81527f2d2d756e73616665416c6c6f770000000000000000000000000000000000000060208201528282617ce881619466565b935060ff1681518110617cfd57617cfd618c19565b60200260200101819052508560400151828280617d1990619466565b935060ff1681518110617d2e57617d2e618c19565b60200260200101819052505b856060015115617da45760408051808201909152601481527f2d2d756e73616665416c6c6f7752656e616d657300000000000000000000000060208201528282617d8381619466565b935060ff1681518110617d9857617d98618c19565b60200260200101819052505b60008160ff1667ffffffffffffffff811115617dc257617dc2618a4c565b604051908082528060200260200182016040528015617df557816020015b6060815260200190600190039081617de05790505b50905060005b8260ff168160ff161015617e4e57838160ff1681518110617e1e57617e1e618c19565b6020026020010151828260ff1681518110617e3b57617e3b618c19565b6020908102919091010152600101617dfb565b50979650505050505050565b6040805180820190915260008082526020820152815183511015617e7f575081614496565b81518351602085015160009291617e9591619a3a565b617e9f9190619949565b60208401519091506001908214617ec0575082516020840151819020908220145b8015617edb57835185518690617ed7908390619949565b9052505b50929392505050565b6000808260000151617f08856000015186602001518660000151876020015161822a565b617f129190619a3a565b90505b83516020850151617f269190619a3a565b811161784f5781617f3681619c3c565b9250508260000151617f6d856020015183617f519190619949565b8651617f5d9190619949565b838660000151876020015161822a565b617f779190619a3a565b9050617f15565b60606000617f8c8484617ee4565b617f97906001619a3a565b67ffffffffffffffff811115617faf57617faf618a4c565b604051908082528060200260200182016040528015617fe257816020015b6060815260200190600190039081617fcd5790505b50905060005b815181101561625757617ffe6164798686617830565b82828151811061801057618010618c19565b6020908102919091010152600101617fe8565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000831061806c577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310618098576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc1000083106180b657662386f26fc10000830492506010015b6305f5e10083106180ce576305f5e100830492506008015b61271083106180e257612710830492506004015b606483106180f4576064830492506002015b600a83106144965760010192915050565b600061811183836184af565b159392505050565b60008085841161822057602084116181cc5760008415618164576001618140866020619949565b61814b906008619c56565b618156906002619d54565b6181609190619949565b1990505b83518116856181738989619a3a565b61817d9190619949565b805190935082165b8181146181b75787841161819f5787945050505050615e88565b836181a981619d60565b945050828451169050618185565b6181c18785619a3a565b945050505050615e88565b8383206181d98588619949565b6181e39087619a3a565b91505b85821061821e5784822080820361820b576182018684619a3a565b9350505050615e88565b618216600184619949565b9250506181e6565b505b5092949350505050565b6000838186851161833557602085116182e45760008515618276576001618252876020619949565b61825d906008619c56565b618268906002619d54565b6182729190619949565b1990505b845181166000876182878b8b619a3a565b6182919190619949565b855190915083165b8281146182d6578186106182be576182b18b8b619a3a565b9650505050505050615e88565b856182c881619c3c565b965050838651169050618299565b859650505050505050615e88565b508383206000905b6182f68689619949565b8211618333578583208082036183125783945050505050615e88565b61831d600185619a3a565b935050818061832b90619c3c565b9250506182ec565b505b61833f8787619a3a565b979650505050505050565b6040805180820190915260008082526020820152600061837c856000015186602001518660000151876020015161822a565b6020808701805191860191909152519091506183989082619949565b8352845160208601516183ab9190619a3a565b81036183ba57600085526183ec565b835183516183c89190619a3a565b855186906183d7908390619949565b90525083516183e69082619a3a565b60208601525b50909392505050565b6020811061842d578151835261840c602084619a3a565b9250618419602083619a3a565b9150618426602082619949565b90506183f5565b600019811561845c576001618443836020619949565b61844f90610100619d54565b6184599190619949565b90505b9151835183169219169190911790915250565b6060600061847d848461495b565b805160208083015160405193945061849793909101619d77565b60405160208183030381529060405291505092915050565b81518151600091908111156184c2575081515b6020808501519084015160005b8381101561857b578251825180821461854b57600019602087101561852a576001846184fc896020619949565b6185069190619a3a565b618511906008619c56565b61851c906002619d54565b6185269190619949565b1990505b81811683821681810391146185485797506144969650505050505050565b50505b618556602086619a3a565b9450618563602085619a3a565b935050506020816185749190619a3a565b90506184cf565b50845186516150099190619dcf565b610c9f80619df083390190565b6112a68061aa8f83390190565b6116fe8061bd3583390190565b61155a8061d43383390190565b610d5e8061e98d83390190565b6040518060e0016040528060608152602001606081526020016060815260200160001515815260200160001515815260200160001515815260200161860e618613565b905290565b6040518061010001604052806000151581526020016000151581526020016060815260200160008019168152602001606081526020016060815260200160001515815260200161860e6040518060800160405280600081526020016000815260200160008152602001600081525090565b602080825282518282018190526000918401906040840190835b818110156186c55783516001600160a01b031683526020938401939092019160010161869e565b509095945050505050565b60005b838110156186eb5781810151838201526020016186d3565b50506000910152565b6000815180845261870c8160208601602086016186d0565b601f01601f19169290920160200192915050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b8281101561881c577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452815180516001600160a01b03168652602090810151604082880181905281519088018190529101906060600582901b88018101919088019060005b81811015618802577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa08a85030183526187ec8486516186f4565b60209586019590945092909201916001016187b2565b509197505050602094850194929092019150600101618748565b50929695505050505050565b600081518084526020840193506020830160005b8281101561887c5781517fffffffff000000000000000000000000000000000000000000000000000000001686526020958601959091019060010161883c565b5093949350505050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b8281101561881c577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc087860301845281518051604087526188f260408801826186f4565b905060208201519150868103602088015261890d8183618828565b9650505060209384019391909101906001016188ae565b600082825180855260208501945060208160051b8301016020850160005b8381101561897457601f1985840301885261895e8383516186f4565b6020988901989093509190910190600101618942565b50909695505050505050565b60208152600061458f6020830184618924565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b8281101561881c577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc087860301845281516001600160a01b0381511686526020810151905060406020870152618a146040870182618828565b95505060209384019391909101906001016189bb565b6001600160a01b0383168152604060208201526000615e8860408301846186f4565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040516060810167ffffffffffffffff81118282101715618a9e57618a9e618a4c565b60405290565b60008067ffffffffffffffff841115618abf57618abf618a4c565b50604051601f19601f85018116603f0116810181811067ffffffffffffffff82111715618aee57618aee618a4c565b604052838152905080828401851015618b0657600080fd5b6162578460208301856186d0565b600082601f830112618b2557600080fd5b61458f83835160208501618aa4565b600060208284031215618b4657600080fd5b815167ffffffffffffffff811115618b5d57600080fd5b61449284828501618b14565b600060208284031215618b7b57600080fd5b8151801515811461458f57600080fd5b600181811c90821680618b9f57607f821691505b602082108103616754577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6001600160a01b038416815282602082015260606040820152600061673a60608301846186f4565b828152604060208201526000615e8860408301846186f4565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081518084526020840193506020830160005b8281101561887c578151865260209586019590910190600101618c5c565b606081526000618c8d6060830186618924565b8281036020840152618c9f8186618c48565b9150508215156040830152949350505050565b60208152600061458f60208301846186f4565b6001600160a01b03851681526001600160a01b038416602082015282604082015260806060820152600061500960808301846186f4565b600060208284031215618d0e57600080fd5b5051919050565b6001600160a01b0385168152608060208201526000618d376080830186618924565b8281036040840152618d498186618c48565b915050821515606083015295945050505050565b606081526000618d7060608301866186f4565b602083019490945250901515604090910152919050565b6001600160a01b038616815284602082015260a060408201526000618daf60a08301866186f4565b6060830194909452509015156080909101529392505050565b7f4661696c656420746f206465706c6f7920636f6e747261637420000000000000815260008351618e0081601a8501602088016186d0565b7f3a20000000000000000000000000000000000000000000000000000000000000601a918401918201528351618e3d81601c8401602088016186d0565b01601c01949350505050565b600060208284031215618e5b57600080fd5b81516001600160a01b038116811461458f57600080fd5b60008351618e848184602088016186d0565b835190830190618e988183602088016186d0565b01949350505050565b7f4661696c656420746f206465706c6f7920636f6e747261637420000000000000815260008351618ed981601a8501602088016186d0565b7f207573696e6720636f6e7374727563746f722064617461202200000000000000601a918401918201528351618f168160338401602088016186d0565b7f220000000000000000000000000000000000000000000000000000000000000060339290910191820152603401949350505050565b60408152600b60408201527f464f554e4452595f4f5554000000000000000000000000000000000000000000606082015260806020820152600061458f60808301846186f4565b600060208284031215618fa557600080fd5b815167ffffffffffffffff811115618fbc57600080fd5b8201601f81018413618fcd57600080fd5b61449284825160208401618aa4565b60008551618fee818460208a016186d0565b7f2f000000000000000000000000000000000000000000000000000000000000009083019081528551619028816001840160208a016186d0565b7f2f000000000000000000000000000000000000000000000000000000000000006001929091019182015284516190668160028401602089016186d0565b6001818301019150507f2f00000000000000000000000000000000000000000000000000000000000000600182015283516190a88160028401602088016186d0565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600292909101918201526007019695505050505050565b6040815260006190f360408301846186f4565b8281036020840152600481527f2e6173740000000000000000000000000000000000000000000000000000000060208201526040810191505092915050565b7f436f756c64206e6f742066696e642041535420696e206172746966616374200081526000825161916a81601f8501602087016186d0565b7f2e205365742060617374203d20747275656020696e20666f756e6472792e746f601f9390910192830152507f6d6c000000000000000000000000000000000000000000000000000000000000603f820152604101919050565b6040815260006191d760408301846186f4565b8281036020840152601181527f2e6173742e6162736f6c7574655061746800000000000000000000000000000060208201526040810191505092915050565b60408152600061922960408301846186f4565b8281036020840152600c81527f2e6173742e6c6963656e7365000000000000000000000000000000000000000060208201526040810191505092915050565b7f2e6d657461646174612e736f75726365732e5b270000000000000000000000008152600082516192a08160148501602087016186d0565b7f275d2e6b656363616b32353600000000000000000000000000000000000000006014939091019283015250602001919050565b6040815260006192e760408301856186f4565b828103602084015261458b81856186f4565b7f22000000000000000000000000000000000000000000000000000000000000008152600082516193318160018501602087016186d0565b7f22000000000000000000000000000000000000000000000000000000000000006001939091019283015250600201919050565b600082516193778184602087016186d0565b7f2f6275696c642d696e666f000000000000000000000000000000000000000000920191825250600b01919050565b7f436f756c64206e6f742066696e64206275696c642d696e666f2066696c65207781527f697468206d61746368696e6720736f7572636520636f6465206861736820666f60208201527f7220636f6e74726163742000000000000000000000000000000000000000000060408201526000825161942a81604b8501602087016186d0565b91909101604b0192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600060ff821660ff810361947c5761947c619437565b60010192915050565b7f406f70656e7a657070656c696e2f646566656e6465722d6465706c6f792d636c81527f69656e742d636c694000000000000000000000000000000000000000000000006020820152600082516194e38160298501602087016186d0565b9190910160290192915050565b60408152601660408201527f4f50454e5a455050454c494e5f424153485f5041544800000000000000000000606082015260806020820152600061458f60808301846186f4565b60006020828403121561954957600080fd5b815167ffffffffffffffff81111561956057600080fd5b82016060818503121561957257600080fd5b61957a618a7b565b81518060030b811461958b57600080fd5b8152602082015167ffffffffffffffff8111156195a757600080fd5b6195b386828501618b14565b602083015250604082015167ffffffffffffffff8111156195d357600080fd5b6195df86828501618b14565b604083015250949350505050565b7f4661696c656420746f2072756e206261736820636f6d6d616e6420776974682081527f220000000000000000000000000000000000000000000000000000000000000060208201526000825161964b8160218501602087016186d0565b7f222e20496620796f7520617265207573696e672057696e646f77732c2073657460219390910192830152507f20746865204f50454e5a455050454c494e5f424153485f5041544820656e766960418201527f726f6e6d656e74207661726961626c6520746f207468652066756c6c7920717560618201527f616c69666965642070617468206f66207468652062617368206578656375746160818201527f626c652e20466f72206578616d706c652c20696620796f75206172652075736960a18201527f6e672047697420666f722057696e646f77732c206164642074686520666f6c6c60c18201527f6f77696e67206c696e6520696e20746865202e656e762066696c65206f66207960e18201527f6f75722070726f6a65637420287573696e6720666f727761726420736c6173686101018201527f6573293a0a4f50454e5a455050454c494e5f424153485f504154483d22433a2f6101218201527f50726f6772616d2046696c65732f4769742f62696e2f6261736822000000000061014182015261015c01919050565b7f4661696c656420746f2066696e64206c696e652077697468207072656669782081527f27000000000000000000000000000000000000000000000000000000000000006020820152600083516198378160218501602088016186d0565b7f2720696e206f75747075743a2000000000000000000000000000000000000000602191840191820152835161987481602e8401602088016186d0565b01602e01949350505050565b7f4661696c656420746f2072756e2075706772616465207361666574792076616c81527f69646174696f6e3a2000000000000000000000000000000000000000000000006020820152600082516194e38160298501602087016186d0565b7f55706772616465207361666574792076616c69646174696f6e206661696c656481527f3a0a00000000000000000000000000000000000000000000000000000000000060208201526000825161993c8160228501602087016186d0565b9190910160220192915050565b8181038181111561449657614496619437565b7f436f6e7472616374206e616d652000000000000000000000000000000000000081526000825161999481600e8501602087016186d0565b7f206d75737420626520696e2074686520666f726d6174204d79436f6e74726163600e9390910192830152507f742e736f6c3a4d79436f6e7472616374206f72204d79436f6e74726163742e73602e8201527f6f6c206f72206f75742f4d79436f6e74726163742e736f6c2f4d79436f6e7472604e8201527f6163742e6a736f6e000000000000000000000000000000000000000000000000606e820152607601919050565b8082018082111561449657614496619437565b7f53504458206c6963656e7365206964656e746966696572200000000000000000815260008351619a858160188501602088016186d0565b7f20696e20000000000000000000000000000000000000000000000000000000006018918401918201528351619ac281601c8401602088016186d0565b7f20646f6573206e6f74206c6f6f6b206c696b65206120737570706f7274656420601c92909101918201527f6c6963656e736520666f7220626c6f636b206578706c6f726572207665726966603c8201527f69636174696f6e2e205573652074686520606c6963656e73655479706560206f605c8201527f7074696f6e20746f20737065636966792061206c6963656e736520747970652c607c8201527f206f7220736574207468652060736b69704c6963656e73655479706560206f70609c8201527f74696f6e20746f2060747275656020746f20736b69702e00000000000000000060bc82015260d301949350505050565b60008251619bc88184602087016186d0565b7f2000000000000000000000000000000000000000000000000000000000000000920191825250600101919050565b7f406f70656e7a657070656c696e2f75706772616465732d636f72654000000000815260008251619c2f81601c8501602087016186d0565b91909101601c0192915050565b60006000198203619c4f57619c4f619437565b5060010190565b808202811582820484141761449657614496619437565b6001815b6001841115619ca857808504811115619c8c57619c8c619437565b6001841615619c9a57908102905b60019390931c928002619c71565b935093915050565b600082619cbf57506001614496565b81619ccc57506000614496565b8160018114619ce25760028114619cec57619d08565b6001915050614496565b60ff841115619cfd57619cfd619437565b50506001821b614496565b5060208310610133831016604e8410600b8410161715619d2b575081810a614496565b619d386000198484619c6d565b8060001904821115619d4c57619d4c619437565b029392505050565b600061458f8383619cb0565b600081619d6f57619d6f619437565b506000190190565b60008351619d898184602088016186d0565b7f3a000000000000000000000000000000000000000000000000000000000000009083019081528351619dc38160018401602088016186d0565b01600101949350505050565b818103600083128015838313168383128216171561784f5761784f61943756fe608060405234801561001057600080fd5b50604051610c9f380380610c9f83398101604081905261002f9161010d565b8181600361003d83826101ff565b50600461004a82826101ff565b50505050506102bd565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261007b57600080fd5b81516001600160401b0381111561009457610094610054565b604051601f8201601f19908116603f011681016001600160401b03811182821017156100c2576100c2610054565b6040528181528382016020018510156100da57600080fd5b60005b828110156100f9576020818601810151838301820152016100dd565b506000918101602001919091529392505050565b6000806040838503121561012057600080fd5b82516001600160401b0381111561013657600080fd5b6101428582860161006a565b602085015190935090506001600160401b0381111561016057600080fd5b61016c8582860161006a565b9150509250929050565b600181811c9082168061018a57607f821691505b6020821081036101aa57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156101fa57806000526020600020601f840160051c810160208510156101d75750805b601f840160051c820191505b818110156101f757600081556001016101e3565b50505b505050565b81516001600160401b0381111561021857610218610054565b61022c816102268454610176565b846101b0565b6020601f82116001811461026057600083156102485750848201515b600019600385901b1c1916600184901b1784556101f7565b600084815260208120601f198516915b828110156102905787850151825560209485019460019092019101610270565b50848210156102ae5786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b6109d3806102cc6000396000f3fe608060405234801561001057600080fd5b50600436106100be5760003560e01c806340c10f191161007657806395d89b411161005b57806395d89b4114610183578063a9059cbb1461018b578063dd62ed3e1461019e57600080fd5b806340c10f191461013857806370a082311461014d57600080fd5b806318160ddd116100a757806318160ddd1461010457806323b872dd14610116578063313ce5671461012957600080fd5b806306fdde03146100c3578063095ea7b3146100e1575b600080fd5b6100cb6101e4565b6040516100d891906107bf565b60405180910390f35b6100f46100ef366004610854565b610276565b60405190151581526020016100d8565b6002545b6040519081526020016100d8565b6100f461012436600461087e565b610290565b604051601281526020016100d8565b61014b610146366004610854565b6102b4565b005b61010861015b3660046108bb565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6100cb6102c2565b6100f4610199366004610854565b6102d1565b6101086101ac3660046108dd565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6060600380546101f390610910565b80601f016020809104026020016040519081016040528092919081815260200182805461021f90610910565b801561026c5780601f106102415761010080835404028352916020019161026c565b820191906000526020600020905b81548152906001019060200180831161024f57829003601f168201915b5050505050905090565b6000336102848185856102df565b60019150505b92915050565b60003361029e8582856102f1565b6102a98585856103c5565b506001949350505050565b6102be8282610470565b5050565b6060600480546101f390610910565b6000336102848185856103c5565b6102ec83838360016104cc565b505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146103bf57818110156103b0576040517ffb8f41b200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416600482015260248101829052604481018390526064015b60405180910390fd5b6103bf848484840360006104cc565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8316610415576040517f96c6fd1e000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff8216610465576040517fec442f05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b6102ec838383610614565b73ffffffffffffffffffffffffffffffffffffffff82166104c0576040517fec442f05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b6102be60008383610614565b73ffffffffffffffffffffffffffffffffffffffff841661051c576040517fe602df05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff831661056c576040517f94280d62000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260016020908152604080832093871683529290522082905580156103bf578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161060691815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff831661064c5780600260008282546106419190610963565b909155506106fe9050565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260208190526040902054818110156106d2576040517fe450d38c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8516600482015260248101829052604481018390526064016103a7565b73ffffffffffffffffffffffffffffffffffffffff841660009081526020819052604090209082900390555b73ffffffffffffffffffffffffffffffffffffffff821661072757600280548290039055610753565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090208054820190555b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516107b291815260200190565b60405180910390a3505050565b602081526000825180602084015260005b818110156107ed57602081860181015160408684010152016107d0565b5060006040828501015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011684010191505092915050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461084f57600080fd5b919050565b6000806040838503121561086757600080fd5b6108708361082b565b946020939093013593505050565b60008060006060848603121561089357600080fd5b61089c8461082b565b92506108aa6020850161082b565b929592945050506040919091013590565b6000602082840312156108cd57600080fd5b6108d68261082b565b9392505050565b600080604083850312156108f057600080fd5b6108f98361082b565b91506109076020840161082b565b90509250929050565b600181811c9082168061092457607f821691505b60208210810361095d577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b8082018082111561028a577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea26469706673582212207e804ca539d49155d2b6bc19268ce22f9f857027c75247d69fb0d56a089c93d464736f6c634300081a0033608060405234801561001057600080fd5b506040516112a63803806112a683398101604081905261002f91610110565b604051806040016040528060048152602001635a65746160e01b815250604051806040016040528060048152602001635a45544160e01b815250816003908161007891906101e2565b50600461008582826101e2565b5050506001600160a01b03821615806100a557506001600160a01b038116155b156100c35760405163e6c4247b60e01b815260040160405180910390fd5b600680546001600160a01b039384166001600160a01b031991821617909155600780549290931691161790556102a0565b80516001600160a01b038116811461010b57600080fd5b919050565b6000806040838503121561012357600080fd5b61012c836100f4565b915061013a602084016100f4565b90509250929050565b634e487b7160e01b600052604160045260246000fd5b600181811c9082168061016d57607f821691505b60208210810361018d57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156101dd57806000526020600020601f840160051c810160208510156101ba5750805b601f840160051c820191505b818110156101da57600081556001016101c6565b50505b505050565b81516001600160401b038111156101fb576101fb610143565b61020f816102098454610159565b84610193565b6020601f821160018114610243576000831561022b5750848201515b600019600385901b1c1916600184901b1784556101da565b600084815260208120601f198516915b828110156102735787850151825560209485019460019092019101610253565b50848210156102915786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b610ff7806102af6000396000f3fe608060405234801561001057600080fd5b506004361061011b5760003560e01c806342966c68116100b257806379cc679011610081578063a9059cbb11610066578063a9059cbb1461028e578063bff9662a146102a1578063dd62ed3e146102c157600080fd5b806379cc67901461027357806395d89b411461028657600080fd5b806342966c68146102025780635b1125911461021557806370a0823114610235578063779e3b631461026b57600080fd5b80631e458bee116100ee5780631e458bee1461018857806323b872dd1461019b578063313ce567146101ae578063328a01d0146101bd57600080fd5b806306fdde0314610120578063095ea7b31461013e57806315d57fd41461016157806318160ddd14610176575b600080fd5b610128610307565b6040516101359190610d97565b60405180910390f35b61015161014c366004610e2c565b610399565b6040519015158152602001610135565b61017461016f366004610e56565b6103b3565b005b6002545b604051908152602001610135565b610174610196366004610e89565b61057e565b6101516101a9366004610ebc565b610631565b60405160128152602001610135565b6007546101dd9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610135565b610174610210366004610ef9565b610655565b6006546101dd9073ffffffffffffffffffffffffffffffffffffffff1681565b61017a610243366004610f12565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b610174610662565b610174610281366004610e2c565b610786565b610128610837565b61015161029c366004610e2c565b610846565b6005546101dd9073ffffffffffffffffffffffffffffffffffffffff1681565b61017a6102cf366004610e56565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b60606003805461031690610f34565b80601f016020809104026020016040519081016040528092919081815260200182805461034290610f34565b801561038f5780601f106103645761010080835404028352916020019161038f565b820191906000526020600020905b81548152906001019060200180831161037257829003601f168201915b5050505050905090565b6000336103a7818585610854565b60019150505b92915050565b60075473ffffffffffffffffffffffffffffffffffffffff1633148015906103f3575060065473ffffffffffffffffffffffffffffffffffffffff163314155b15610431576040517fcdfcef970000000000000000000000000000000000000000000000000000000081523360048201526024015b60405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff82161580610468575073ffffffffffffffffffffffffffffffffffffffff8116155b1561049f576040517fe6c4247b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6006805473ffffffffffffffffffffffffffffffffffffffff8481167fffffffffffffffffffffffff0000000000000000000000000000000000000000928316811790935560058054918516919092161790556040805133815260208101929092527fe79965b5c67dcfb2cf5fe152715e4a7256cee62a3d5dd8484fd8a8539eb8beff910160405180910390a16040805133815273ffffffffffffffffffffffffffffffffffffffff831660208201527f1b9352454524a57a51f24f67dc66d898f616922cd1f7a12d73570ece12b1975c910160405180910390a15050565b60055473ffffffffffffffffffffffffffffffffffffffff1633146105d1576040517f3fe32fba000000000000000000000000000000000000000000000000000000008152336004820152602401610428565b6105db8383610866565b808373ffffffffffffffffffffffffffffffffffffffff167fc263b302aec62d29105026245f19e16f8e0137066ccd4a8bd941f716bd4096bb8460405161062491815260200190565b60405180910390a3505050565b60003361063f8582856108c6565b61064a858585610995565b506001949350505050565b61065f3382610a40565b50565b60075473ffffffffffffffffffffffffffffffffffffffff1633146106b5576040517fe700765e000000000000000000000000000000000000000000000000000000008152336004820152602401610428565b60065473ffffffffffffffffffffffffffffffffffffffff16610704576040517fe6c4247b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600654600780547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff90921691821790556040805133815260208101929092527f5104c9abdc7d111c2aeb4ce890ac70274a4be2ee83f46a62551be5e6ebc82dd0910160405180910390a1565b60055473ffffffffffffffffffffffffffffffffffffffff1633146107d9576040517f3fe32fba000000000000000000000000000000000000000000000000000000008152336004820152602401610428565b6107e38282610a9c565b8173ffffffffffffffffffffffffffffffffffffffff167f919f7e2092ffcc9d09f599be18d8152860b0c054df788a33bc549cdd9d0f15b18260405161082b91815260200190565b60405180910390a25050565b60606004805461031690610f34565b6000336103a7818585610995565b6108618383836001610ab1565b505050565b73ffffffffffffffffffffffffffffffffffffffff82166108b6576040517fec442f0500000000000000000000000000000000000000000000000000000000815260006004820152602401610428565b6108c260008383610bf9565b5050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811461098f5781811015610980576040517ffb8f41b200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff841660048201526024810182905260448101839052606401610428565b61098f84848484036000610ab1565b50505050565b73ffffffffffffffffffffffffffffffffffffffff83166109e5576040517f96c6fd1e00000000000000000000000000000000000000000000000000000000815260006004820152602401610428565b73ffffffffffffffffffffffffffffffffffffffff8216610a35576040517fec442f0500000000000000000000000000000000000000000000000000000000815260006004820152602401610428565b610861838383610bf9565b73ffffffffffffffffffffffffffffffffffffffff8216610a90576040517f96c6fd1e00000000000000000000000000000000000000000000000000000000815260006004820152602401610428565b6108c282600083610bf9565b610aa78233836108c6565b6108c28282610a40565b73ffffffffffffffffffffffffffffffffffffffff8416610b01576040517fe602df0500000000000000000000000000000000000000000000000000000000815260006004820152602401610428565b73ffffffffffffffffffffffffffffffffffffffff8316610b51576040517f94280d6200000000000000000000000000000000000000000000000000000000815260006004820152602401610428565b73ffffffffffffffffffffffffffffffffffffffff8085166000908152600160209081526040808320938716835292905220829055801561098f578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051610beb91815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff8316610c31578060026000828254610c269190610f87565b90915550610ce39050565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205481811015610cb7576040517fe450d38c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff851660048201526024810182905260448101839052606401610428565b73ffffffffffffffffffffffffffffffffffffffff841660009081526020819052604090209082900390555b73ffffffffffffffffffffffffffffffffffffffff8216610d0c57600280548290039055610d38565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090208054820190555b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161062491815260200190565b602081526000825180602084015260005b81811015610dc55760208186018101516040868401015201610da8565b5060006040828501015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011684010191505092915050565b803573ffffffffffffffffffffffffffffffffffffffff81168114610e2757600080fd5b919050565b60008060408385031215610e3f57600080fd5b610e4883610e03565b946020939093013593505050565b60008060408385031215610e6957600080fd5b610e7283610e03565b9150610e8060208401610e03565b90509250929050565b600080600060608486031215610e9e57600080fd5b610ea784610e03565b95602085013595506040909401359392505050565b600080600060608486031215610ed157600080fd5b610eda84610e03565b9250610ee860208501610e03565b929592945050506040919091013590565b600060208284031215610f0b57600080fd5b5035919050565b600060208284031215610f2457600080fd5b610f2d82610e03565b9392505050565b600181811c90821680610f4857607f821691505b602082108103610f81577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b808201808211156103ad577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea2646970667358221220085f01204b33dc17013c78c74fbca32a3da2c0b384ce7c8878c889551af28c6164736f6c634300081a003360a060405234801561001057600080fd5b506040516116fe3803806116fe83398101604081905261002f916101e5565b60016000556002805460ff191690556001600160a01b038316158061005b57506001600160a01b038216155b8061006d57506001600160a01b038116155b1561008b5760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b0383166080526100a3600082610134565b506100ce7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a82610134565b506100f97f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e483610134565b506101126000805160206116de83398151915282610134565b5061012b6000805160206116de83398151915283610134565b50505050610228565b60008281526001602090815260408083206001600160a01b038516845290915281205460ff166101bf5760008381526001602081815260408084206001600160a01b0387168086529252808420805460ff19169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45060016101c3565b5060005b92915050565b80516001600160a01b03811681146101e057600080fd5b919050565b6000806000606084860312156101fa57600080fd5b610203846101c9565b9250610211602085016101c9565b915061021f604085016101c9565b90509250925092565b60805161147f61025f6000396000818161019e0152818161050001528181610562015281816108f70152610959015261147f6000f3fe608060405234801561001057600080fd5b506004361061016c5760003560e01c806385f438c1116100cd578063c8a0236211610081578063d936547e11610066578063d936547e14610355578063d9caed1214610378578063e63ab1e91461038b57600080fd5b8063c8a023621461032f578063d547741f1461034257600080fd5b80639a590427116100b25780639a590427146103015780639b19251a14610314578063a217fddf1461032757600080fd5b806385f438c11461029457806391d14854146102bb57600080fd5b806336568abe11610124578063570618e111610109578063570618e11461025a5780635c975abb146102815780638456cb591461028c57600080fd5b806336568abe1461023f5780633f4ba83a1461025257600080fd5b806321fc65f21161015557806321fc65f2146101e5578063248a9ca3146101fa5780632f2ff15d1461022c57600080fd5b806301ffc9a714610171578063116191b614610199575b600080fd5b61018461017f36600461118a565b6103b2565b60405190151581526020015b60405180910390f35b6101c07f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610190565b6101f86101f33660046111f5565b61044b565b005b61021e610208366004611292565b6000908152600160208190526040909120015490565b604051908152602001610190565b6101f861023a3660046112ab565b61064c565b6101f861024d3660046112ab565b610678565b6101f86106d6565b61021e7f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a81565b60025460ff16610184565b6101f861070b565b61021e7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b6101846102c93660046112ab565b600091825260016020908152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b6101f861030f3660046112d7565b61073d565b6101f86103223660046112d7565b6107be565b61021e600081565b6101f861033d3660046111f5565b610842565b6101f86103503660046112ab565b610a29565b6101846103633660046112d7565b60036020526000908152604090205460ff1681565b6101f86103863660046112f2565b610a4f565b61021e7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061044557507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b610453610b7b565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461047d81610bbe565b610485610bc8565b73ffffffffffffffffffffffffffffffffffffffff861660009081526003602052604090205460ff166104e4576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61052573ffffffffffffffffffffffffffffffffffffffff87167f000000000000000000000000000000000000000000000000000000000000000086610c07565b6040517f5131ab5900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690635131ab599061059f9089908990899089908990600401611378565b600060405180830381600087803b1580156105b957600080fd5b505af11580156105cd573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167f85b5be9cf454e05e0bddf49315178102227c312078eefa3c00294fb4d912ae4e868686604051610632939291906113d5565b60405180910390a3506106456001600055565b5050505050565b6000828152600160208190526040909120015461066881610bbe565b6106728383610c94565b50505050565b73ffffffffffffffffffffffffffffffffffffffff811633146106c7576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6106d18282610d41565b505050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61070081610bbe565b610708610de2565b50565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61073581610bbe565b610708610e41565b7f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a61076781610bbe565b73ffffffffffffffffffffffffffffffffffffffff8216600081815260036020526040808220805460ff19169055517f51085ddf9ebdded84b76e829eb58c4078e4b5bdf97d9a94723f336039da467919190a25050565b7f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a6107e881610bbe565b73ffffffffffffffffffffffffffffffffffffffff8216600081815260036020526040808220805460ff19166001179055517faab7954e9d246b167ef88aeddad35209ca2489d95a8aeb59e288d9b19fae5a549190a25050565b61084a610b7b565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461087481610bbe565b61087c610bc8565b73ffffffffffffffffffffffffffffffffffffffff861660009081526003602052604090205460ff166108db576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61091c73ffffffffffffffffffffffffffffffffffffffff87167f000000000000000000000000000000000000000000000000000000000000000086610c07565b6040517fb8969bd400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063b8969bd4906109969089908990899089908990600401611378565b600060405180830381600087803b1580156109b057600080fd5b505af11580156109c4573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fb9d4efa96044e5f5e03e696fa9ae2ff66911cc27e8a637c3627c75bc5b2241c8868686604051610632939291906113d5565b60008281526001602081905260409091200154610a4581610bbe565b6106728383610d41565b610a57610b7b565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e4610a8181610bbe565b610a89610bc8565b73ffffffffffffffffffffffffffffffffffffffff841660009081526003602052604090205460ff16610ae8576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610b0973ffffffffffffffffffffffffffffffffffffffff85168484610c07565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f9b1bfa7fa9ee420a16e124f794c35ac9f90472acc99140eb2f6447c714cad8eb84604051610b6891815260200190565b60405180910390a3506106d16001600055565b600260005403610bb7576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b6107088133610e7e565b60025460ff1615610c05576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6040805173ffffffffffffffffffffffffffffffffffffffff8416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb000000000000000000000000000000000000000000000000000000001790526106d1908490610f0f565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff16610d3957600083815260016020818152604080842073ffffffffffffffffffffffffffffffffffffffff87168086529252808420805460ff19169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a4506001610445565b506000610445565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff1615610d3957600083815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff86168085529252808320805460ff1916905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a4506001610445565b610dea610fa5565b6002805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b610e49610bc8565b6002805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258610e173390565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16610f0b576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82166004820152602481018390526044015b60405180910390fd5b5050565b6000610f3173ffffffffffffffffffffffffffffffffffffffff841683610fe1565b90508051600014158015610f56575080806020019051810190610f5491906113f8565b155b156106d1576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84166004820152602401610f02565b60025460ff16610c05576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6060610fef83836000610ff6565b9392505050565b606081471015611034576040517fcd786059000000000000000000000000000000000000000000000000000000008152306004820152602401610f02565b6000808573ffffffffffffffffffffffffffffffffffffffff16848660405161105d919061141a565b60006040518083038185875af1925050503d806000811461109a576040519150601f19603f3d011682016040523d82523d6000602084013e61109f565b606091505b50915091506110af8683836110b9565b9695505050505050565b6060826110ce576110c982611148565b610fef565b81511580156110f2575073ffffffffffffffffffffffffffffffffffffffff84163b155b15611141576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85166004820152602401610f02565b5080610fef565b8051156111585780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006020828403121561119c57600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610fef57600080fd5b803573ffffffffffffffffffffffffffffffffffffffff811681146111f057600080fd5b919050565b60008060008060006080868803121561120d57600080fd5b611216866111cc565b9450611224602087016111cc565b935060408601359250606086013567ffffffffffffffff81111561124757600080fd5b8601601f8101881361125857600080fd5b803567ffffffffffffffff81111561126f57600080fd5b88602082840101111561128157600080fd5b959894975092955050506020019190565b6000602082840312156112a457600080fd5b5035919050565b600080604083850312156112be57600080fd5b823591506112ce602084016111cc565b90509250929050565b6000602082840312156112e957600080fd5b610fef826111cc565b60008060006060848603121561130757600080fd5b611310846111cc565b925061131e602085016111cc565b929592945050506040919091013590565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff8616815273ffffffffffffffffffffffffffffffffffffffff851660208201528360408201526080606082015260006113ca60808301848661132f565b979650505050505050565b8381526040602082015260006113ef60408301848661132f565b95945050505050565b60006020828403121561140a57600080fd5b81518015158114610fef57600080fd5b6000825160005b8181101561143b5760208186018101518583015201611421565b50600092019182525091905056fea26469706673582212202f3991d39315b7c0e5ef6fd88336a0f791f8e1cce0a70cb66f2c4c9404215ae364736f6c634300081a00338619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a60c060405260001960035534801561001657600080fd5b5060405161155a38038061155a83398101604081905261003591610220565b60016000819055805460ff19169055838383836001600160a01b038416158061006557506001600160a01b038316155b8061007757506001600160a01b038216155b8061008957506001600160a01b038116155b156100a75760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b03808516608052831660a0526100c5600082610154565b506100f07f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e483610154565b5061011b7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb83610154565b506101467f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a82610154565b505050505050505050610274565b60008281526002602090815260408083206001600160a01b038516845290915281205460ff166101fa5760008381526002602090815260408083206001600160a01b03861684529091529020805460ff191660011790556101b23390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45060016101fe565b5060005b92915050565b80516001600160a01b038116811461021b57600080fd5b919050565b6000806000806080858703121561023657600080fd5b61023f85610204565b935061024d60208601610204565b925061025b60408601610204565b915061026960608601610204565b905092959194509250565b60805160a0516112826102d86000396000818161021d01528181610531015281816108240152818161097b01528181610ad00152610bf20152600081816101d1015281816104a1015281816105040152818161079401526107f701526112826000f3fe608060405234801561001057600080fd5b50600436106101775760003560e01c80635e3e9fef116100d857806391d148541161008c578063d547741f11610066578063d547741f14610386578063d5abeb0114610399578063e63ab1e9146103a257600080fd5b806391d1485414610311578063a217fddf14610357578063a783c7891461035f57600080fd5b8063743e0c9b116100bd578063743e0c9b146102cf5780638456cb59146102e257806385f438c1146102ea57600080fd5b80635e3e9fef146102a95780636f8b44b0146102bc57600080fd5b8063248a9ca31161012f57806336568abe1161011457806336568abe146102835780633f4ba83a146102965780635c975abb1461029e57600080fd5b8063248a9ca31461023f5780632f2ff15d1461027057600080fd5b8063106e629011610160578063106e6290146101b9578063116191b6146101cc57806321e093b11461021857600080fd5b806301ffc9a71461017c57806302d5c899146101a4575b600080fd5b61018f61018a366004610fb4565b6103c9565b60405190151581526020015b60405180910390f35b6101b76101b2366004611026565b610462565b005b6101b76101c73660046110b8565b6105f7565b6101f37f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161019b565b6101f37f000000000000000000000000000000000000000000000000000000000000000081565b61026261024d3660046110eb565b60009081526002602052604090206001015490565b60405190815260200161019b565b6101b761027e366004611104565b61069c565b6101b7610291366004611104565b6106c7565b6101b7610720565b60015460ff1661018f565b6101b76102b7366004611026565b610755565b6101b76102ca3660046110eb565b6108d0565b6101b76102dd3660046110eb565b61093e565b6101b76109e8565b6102627f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b61018f61031f366004611104565b600091825260026020908152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b610262600081565b6102627f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb81565b6101b7610394366004611104565b610a1a565b61026260035481565b6102627f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061045c57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b61046a610a3f565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461049481610a82565b61049c610a8c565b6104c77f00000000000000000000000000000000000000000000000000000000000000008684610acb565b6040517fb8969bd400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063b8969bd490610561907f0000000000000000000000000000000000000000000000000000000000000000908a908a908a908a90600401611179565b600060405180830381600087803b15801561057b57600080fd5b505af115801561058f573d6000803e3d6000fd5b505050508573ffffffffffffffffffffffffffffffffffffffff167fba96f26bdda53eb8c8ba39045dfb4ff39753fbc7a6edcf250a88e75e78d102fe8686866040516105dd939291906111d6565b60405180910390a2506105f06001600055565b5050505050565b6105ff610a3f565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461062981610a82565b610631610a8c565b61063c848484610acb565b8373ffffffffffffffffffffffffffffffffffffffff167f884edad9ce6fa2440d8a54cc123490eb96d2768479d49ff9c7366125a94243648460405161068491815260200190565b60405180910390a2506106976001600055565b505050565b6000828152600260205260409020600101546106b781610a82565b6106c18383610c53565b50505050565b73ffffffffffffffffffffffffffffffffffffffff81163314610716576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6106978282610d53565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61074a81610a82565b610752610e12565b50565b61075d610a3f565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461078781610a82565b61078f610a8c565b6107ba7f00000000000000000000000000000000000000000000000000000000000000008684610acb565b6040517f5131ab5900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690635131ab5990610854907f0000000000000000000000000000000000000000000000000000000000000000908a908a908a908a90600401611179565b600060405180830381600087803b15801561086e57600080fd5b505af1158015610882573d6000803e3d6000fd5b505050508573ffffffffffffffffffffffffffffffffffffffff167f7772f56296d3a5202974a45c61c9188d844ab4d6eeb18c851e4b8d5384ca6ced8686866040516105dd939291906111d6565b7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb6108fa81610a82565b610902610a8c565b60038290556040518281527f7810bd47de260c3e9ee10061cf438099dd12256c79485f12f94dbccc981e806c9060200160405180910390a15050565b610946610a8c565b6040517f79cc6790000000000000000000000000000000000000000000000000000000008152336004820152602481018290527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16906379cc679090604401600060405180830381600087803b1580156109d457600080fd5b505af11580156105f0573d6000803e3d6000fd5b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610a1281610a82565b610752610e8f565b600082815260026020526040902060010154610a3581610a82565b6106c18383610d53565b600260005403610a7b576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b6107528133610ee8565b60015460ff1615610ac9576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6003547f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b39573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b5d91906111f9565b610b679084611212565b1115610b9f576040517fc30436e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f1e458bee00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff848116600483015260248201849052604482018390527f00000000000000000000000000000000000000000000000000000000000000001690631e458bee90606401600060405180830381600087803b158015610c3657600080fd5b505af1158015610c4a573d6000803e3d6000fd5b50505050505050565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff16610d4b57600083815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff86168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055610ce93390565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a450600161045c565b50600061045c565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff1615610d4b57600083815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8616808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a450600161045c565b610e1a610f78565b600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b610e97610a8c565b600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016811790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25833610e65565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16610f74576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff821660048201526024810183905260440160405180910390fd5b5050565b60015460ff16610ac9576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060208284031215610fc657600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610ff657600080fd5b9392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461102157600080fd5b919050565b60008060008060006080868803121561103e57600080fd5b61104786610ffd565b945060208601359350604086013567ffffffffffffffff81111561106a57600080fd5b8601601f8101881361107b57600080fd5b803567ffffffffffffffff81111561109257600080fd5b8860208284010111156110a457600080fd5b959894975060200195606001359392505050565b6000806000606084860312156110cd57600080fd5b6110d684610ffd565b95602085013595506040909401359392505050565b6000602082840312156110fd57600080fd5b5035919050565b6000806040838503121561111757600080fd5b8235915061112760208401610ffd565b90509250929050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff8616815273ffffffffffffffffffffffffffffffffffffffff851660208201528360408201526080606082015260006111cb608083018486611130565b979650505050505050565b8381526040602082015260006111f0604083018486611130565b95945050505050565b60006020828403121561120b57600080fd5b5051919050565b8082018082111561045c577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea2646970667358221220de5fa55e0ca79ea2f08903481d01ea00bbbf346b9cfba44e12a2dd6f3a6f2e8a64736f6c634300081a00336080604052348015600f57600080fd5b506001600055610d3a806100246000396000f3fe6080604052600436106100635760003560e01c8063c513169111610040578063c5131691146100c1578063e04d4f97146100e1578063f05b6abf146100f457005b8063357fc5a21461006c5780636ed701691461008c5780638fcaa0b5146100a157005b3661006a57005b005b34801561007857600080fd5b5061006a6100873660046106c0565b610114565b34801561009857600080fd5b5061006a6101aa565b3480156100ad57600080fd5b5061006a6100bc3660046106fc565b6101df565b3480156100cd57600080fd5b5061006a6100dc3660046106c0565b61021e565b61006a6100ef366004610895565b6102f9565b34801561010057600080fd5b5061006a61010f366004610981565b61033d565b61011c610372565b61013e73ffffffffffffffffffffffffffffffffffffffff83163383866103b5565b604080513381526020810185905273ffffffffffffffffffffffffffffffffffffffff848116828401528316606082015290517f2b58128f24a9f59127cc5b5430d70542b22220f2d9adaa86e442b816ab98af609181900360800190a16101a56001600055565b505050565b6040513381527fbcaadb46b82a48af60b608f58959ae6b8310d1b0a0d094c2e9ec3208ed39f2a09060200160405180910390a1565b7f0d3f65f00e631663aa85c96330b5c7a83bb29af3630c0063776f985edc3037aa33838360405161021293929190610a6b565b60405180910390a15050565b610226610372565b6000610233600285610ad5565b90508060000361026f576040517f1f2a200500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61029173ffffffffffffffffffffffffffffffffffffffff84163384846103b5565b604080513381526020810183905273ffffffffffffffffffffffffffffffffffffffff858116828401528416606082015290517f2b58128f24a9f59127cc5b5430d70542b22220f2d9adaa86e442b816ab98af609181900360800190a1506101a56001600055565b7f1f1ff1f5fb41346850b2f5c04e6c767e2f1c8a525c5c0c5cdb60cdf3ca5f62fa3334858585604051610330959493929190610b7e565b60405180910390a1505050565b7f74a53cd528a921fca7dbdee62f86819051d3cc98f214951f4238e8843f20b146338484846040516103309493929190610c08565b6002600054036103ae576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b6040805173ffffffffffffffffffffffffffffffffffffffff85811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd0000000000000000000000000000000000000000000000000000000017905261044a908590610450565b50505050565b600061047273ffffffffffffffffffffffffffffffffffffffff8416836104eb565b905080516000141580156104975750808060200190518101906104959190610ccb565b155b156101a5576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff841660048201526024015b60405180910390fd5b60606104f983836000610500565b9392505050565b60608147101561053e576040517fcd7860590000000000000000000000000000000000000000000000000000000081523060048201526024016104e2565b6000808573ffffffffffffffffffffffffffffffffffffffff1684866040516105679190610ce8565b60006040518083038185875af1925050503d80600081146105a4576040519150601f19603f3d011682016040523d82523d6000602084013e6105a9565b606091505b50915091506105b98683836105c3565b9695505050505050565b6060826105d8576105d382610652565b6104f9565b81511580156105fc575073ffffffffffffffffffffffffffffffffffffffff84163b155b1561064b576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff851660048201526024016104e2565b50806104f9565b8051156106625780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50565b803573ffffffffffffffffffffffffffffffffffffffff811681146106bb57600080fd5b919050565b6000806000606084860312156106d557600080fd5b833592506106e560208501610697565b91506106f360408501610697565b90509250925092565b6000806020838503121561070f57600080fd5b823567ffffffffffffffff81111561072657600080fd5b8301601f8101851361073757600080fd5b803567ffffffffffffffff81111561074e57600080fd5b85602082840101111561076057600080fd5b6020919091019590945092505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156107e6576107e6610770565b604052919050565b600082601f8301126107ff57600080fd5b813567ffffffffffffffff81111561081957610819610770565b61084a60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8401160161079f565b81815284602083860101111561085f57600080fd5b816020850160208301376000918101602001919091529392505050565b801515811461069457600080fd5b80356106bb8161087c565b6000806000606084860312156108aa57600080fd5b833567ffffffffffffffff8111156108c157600080fd5b6108cd868287016107ee565b9350506020840135915060408401356108e58161087c565b809150509250925092565b600067ffffffffffffffff82111561090a5761090a610770565b5060051b60200190565b600082601f83011261092557600080fd5b8135610938610933826108f0565b61079f565b8082825260208201915060208360051b86010192508583111561095a57600080fd5b602085015b8381101561097757803583526020928301920161095f565b5095945050505050565b60008060006060848603121561099657600080fd5b833567ffffffffffffffff8111156109ad57600080fd5b8401601f810186136109be57600080fd5b80356109cc610933826108f0565b8082825260208201915060208360051b8501019250888311156109ee57600080fd5b602084015b83811015610a3057803567ffffffffffffffff811115610a1257600080fd5b610a218b6020838901016107ee565b845250602092830192016109f3565b509550505050602084013567ffffffffffffffff811115610a5057600080fd5b610a5c86828701610914565b9250506106f36040850161088a565b73ffffffffffffffffffffffffffffffffffffffff8416815260406020820152816040820152818360608301376000818301606090810191909152601f9092017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016010192915050565b600082610b0b577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60005b83811015610b2b578181015183820152602001610b13565b50506000910152565b60008151808452610b4c816020860160208601610b10565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b73ffffffffffffffffffffffffffffffffffffffff8616815284602082015260a060408201526000610bb360a0830186610b34565b6060830194909452509015156080909101529392505050565b600081518084526020840193506020830160005b82811015610bfe578151865260209586019590910190600101610be0565b5093949350505050565b60006080820173ffffffffffffffffffffffffffffffffffffffff871683526080602084015280865180835260a08501915060a08160051b86010192506020880160005b82811015610c9b577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60878603018452610c86858351610b34565b94506020938401939190910190600101610c4c565b505050508281036040840152610cb18186610bcc565b915050610cc2606083018415159052565b95945050505050565b600060208284031215610cdd57600080fd5b81516104f98161087c565b60008251610cfa818460208701610b10565b919091019291505056fea2646970667358221220556072e1abafc3c4063b8cce832228b4f309b93726aaa6a6dfab20cb880c6d1864736f6c634300081a0033a26469706673582212200beb5f5d57c71c7a96d94dbffb879b504affbec1e8d13769a25466d16d2a079264736f6c634300081a0033", } // GatewayEVMTestABI is the input ABI used to generate the binding from. diff --git a/v2/pkg/gatewayevmechidnatest.sol/gatewayevmechidnatest.go b/v2/pkg/gatewayevmechidnatest.sol/gatewayevmechidnatest.go index be0a0638..1b051073 100644 --- a/v2/pkg/gatewayevmechidnatest.sol/gatewayevmechidnatest.go +++ b/v2/pkg/gatewayevmechidnatest.sol/gatewayevmechidnatest.go @@ -32,7 +32,7 @@ var ( // GatewayEVMEchidnaTestMetaData contains all meta data concerning the GatewayEVMEchidnaTest contract. var GatewayEVMEchidnaTestMetaData = &bind.MetaData{ ABI: "[{\"type\":\"constructor\",\"inputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"ASSET_HANDLER_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"DEFAULT_ADMIN_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"PAUSER_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"TSS_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"UPGRADE_INTERFACE_VERSION\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"call\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"custody\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"deposit\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"deposit\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"depositAndCall\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"depositAndCall\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"echidnaCaller\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"execute\",\"inputs\":[{\"name\":\"destination\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"executeRevert\",\"inputs\":[{\"name\":\"destination\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"executeWithERC20\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"getRoleAdmin\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"grantRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"hasRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"initialize\",\"inputs\":[{\"name\":\"tssAddress_\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"zetaToken_\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"admin_\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"pause\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"paused\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"proxiableUUID\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"renounceRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"callerConfirmation\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"revertWithERC20\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"revokeRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setConnector\",\"inputs\":[{\"name\":\"zetaConnector_\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setCustody\",\"inputs\":[{\"name\":\"custody_\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"supportsInterface\",\"inputs\":[{\"name\":\"interfaceId\",\"type\":\"bytes4\",\"internalType\":\"bytes4\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"testERC20\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractTestERC20\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"testExecuteWithERC20\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"tssAddress\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"unpause\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"upgradeToAndCall\",\"inputs\":[{\"name\":\"newImplementation\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"zetaConnector\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"zetaToken\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"event\",\"name\":\"Call\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"receiver\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Deposit\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"receiver\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"asset\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Executed\",\"inputs\":[{\"name\":\"destination\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ExecutedWithERC20\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Initialized\",\"inputs\":[{\"name\":\"version\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Paused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Reverted\",\"inputs\":[{\"name\":\"destination\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RevertedWithERC20\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleAdminChanged\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"previousAdminRole\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"newAdminRole\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleGranted\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleRevoked\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Unpaused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Upgraded\",\"inputs\":[{\"name\":\"implementation\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"AccessControlBadConfirmation\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"AccessControlUnauthorizedAccount\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"neededRole\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"type\":\"error\",\"name\":\"AddressEmptyCode\",\"inputs\":[{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"AddressInsufficientBalance\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"ApprovalFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ConnectorInitialized\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"CustodyInitialized\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"DepositFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ERC1967InvalidImplementation\",\"inputs\":[{\"name\":\"implementation\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"ERC1967NonPayable\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"EnforcedPause\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ExecutionFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ExpectedPause\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"FailedInnerCall\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientERC20Amount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientETHAmount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidInitialization\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NotInitializing\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NotWhitelistedInCustody\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ReentrancyGuardReentrantCall\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"SafeERC20FailedOperation\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"UUPSUnauthorizedCallContext\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"UUPSUnsupportedProxiableUUID\",\"inputs\":[{\"name\":\"slot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"type\":\"error\",\"name\":\"ZeroAddress\",\"inputs\":[]}]", - Bin: "0x60a060405230608052600580546001600160a01b0319163317905534801561002657600080fd5b5061002f610154565b600554600180546001600160a01b039092166001600160a01b031992831617905560028054610123921691909117905560405161006b90610206565b60408082526004908201819052631d195cdd60e21b606083015260806020830181905282015263151154d560e21b60a082015260c001604051809103906000f0801580156100bd573d6000803e3d6000fd5b50600480546001600160a01b0319166001600160a01b039283161790556001546040513092919091169082906100f290610213565b6001600160a01b03938416815291831660208301529091166040820152606001604051809103906000f08015801561012e573d6000803e3d6000fd5b50600080546001600160a01b0319166001600160a01b0392909216919091179055610220565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156101a45760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146102035780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b610c9f8061372c83390190565b6116fe806143cb83390190565b6080516134e3610249600039600081816120e20152818161210b015261259701526134e36000f3fe6080604052600436106102345760003560e01c80635c975abb11610138578063ad3cb1cc116100b0578063d547741f1161007f578063e63ab1e911610064578063e63ab1e9146106ff578063f340fa0114610733578063f45346dc1461074657600080fd5b8063d547741f146106bf578063dda79b75146106df57600080fd5b8063ad3cb1cc14610616578063ae7a3a6f1461065f578063b8969bd41461067f578063c0c53b8b1461069f57600080fd5b80638456cb591161010757806391d14854116100ec57806391d1485414610568578063a217fddf146105cd578063a783c789146105e257600080fd5b80638456cb59146105335780638c6f037f1461054857600080fd5b80635c975abb146104885780635d62c860146104bf5780636ab90f9b146104f357806381100bf01461051357600080fd5b806335c018db116101cb5780634f1ef2861161019a57806352d1902d1161017f57806352d1902d1461043357806357bec62f146104485780635b1125911461046857600080fd5b80634f1ef286146104005780635131ab591461041357600080fd5b806335c018db1461039857806336568abe146103ab5780633c2f05a8146103cb5780633f4ba83a146103eb57600080fd5b806321e093b11161020757806321e093b1146102d0578063248a9ca31461030857806329c59b5d146103655780632f2ff15d1461037857600080fd5b806301ffc9a71461023957806310188aef1461026e5780631b8b921d146102905780631cff79cd146102b0575b600080fd5b34801561024557600080fd5b50610259610254366004612ecd565b610766565b60405190151581526020015b60405180910390f35b34801561027a57600080fd5b5061028e610289366004612f2b565b6107ff565b005b34801561029c57600080fd5b5061028e6102ab366004612f8f565b6108f3565b6102c36102be366004612f8f565b61097e565b6040516102659190613050565b3480156102dc57600080fd5b506003546102f0906001600160a01b031681565b6040516001600160a01b039091168152602001610265565b34801561031457600080fd5b50610357610323366004613063565b60009081527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052604090206001015490565b604051908152602001610265565b61028e610373366004612f8f565b610a81565b34801561038457600080fd5b5061028e61039336600461307c565b610c14565b61028e6103a6366004612f8f565b610c5e565b3480156103b757600080fd5b5061028e6103c636600461307c565b610e4d565b3480156103d757600080fd5b506004546102f0906001600160a01b031681565b3480156103f757600080fd5b5061028e610e99565b61028e61040e3660046130d7565b610ece565b34801561041f57600080fd5b5061028e61042e3660046131de565b610eed565b34801561043f57600080fd5b50610357611206565b34801561045457600080fd5b506002546102f0906001600160a01b031681565b34801561047457600080fd5b506001546102f0906001600160a01b031681565b34801561049457600080fd5b507fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff16610259565b3480156104cb57600080fd5b506103577f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b981565b3480156104ff57600080fd5b5061028e61050e36600461324d565b611235565b34801561051f57600080fd5b506005546102f0906001600160a01b031681565b34801561053f57600080fd5b5061028e611360565b34801561055457600080fd5b5061028e6105633660046132a7565b611392565b34801561057457600080fd5b5061025961058336600461307c565b60009182527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408084206001600160a01b0393909316845291905290205460ff1690565b3480156105d957600080fd5b50610357600081565b3480156105ee57600080fd5b506103577f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb81565b34801561062257600080fd5b506102c36040518060400160405280600581526020017f352e302e3000000000000000000000000000000000000000000000000000000081525081565b34801561066b57600080fd5b5061028e61067a366004612f2b565b6114a8565b34801561068b57600080fd5b5061028e61069a3660046131de565b61159c565b3480156106ab57600080fd5b5061028e6106ba3660046132f9565b611755565b3480156106cb57600080fd5b5061028e6106da36600461307c565b611a0a565b3480156106eb57600080fd5b506000546102f0906001600160a01b031681565b34801561070b57600080fd5b506103577f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b61028e610741366004612f2b565b611a4e565b34801561075257600080fd5b5061028e61076136600461333c565b611be3565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b0000000000000000000000000000000000000000000000000000000014806107f957507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b600061080a81611cde565b6001600160a01b03821661084a576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002546001600160a01b03161561088d576040517f0c8dc01600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6108b77f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b983611ce8565b5050600280547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6108fb611dd5565b610903611e33565b826001600160a01b0316336001600160a01b03167f2a21062ee9199c2e205622999eeb7c3da73153674f36a0acd3f74fa6af67bde384846040516109489291906133b8565b60405180910390a361097960017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b505050565b60607f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb6109aa81611cde565b6109b2611dd5565b6109ba611e33565b6001600160a01b0385166109fa576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610a07868686611eda565b9050856001600160a01b03167fcaf938de11c367272220bfd1d2baa99ca46665e7bc4d85f00adb51b90fe1fa9f348787604051610a46939291906133d4565b60405180910390a29150610a7960017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b509392505050565b610a89611dd5565b610a91611e33565b34600003610acb576040517f7671265e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038316610b0b576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546040516000916001600160a01b03169034908381818185875af1925050503d8060008114610b58576040519150601f19603f3d011682016040523d82523d6000602084013e610b5d565b606091505b5050905080610b98576040517f79cacff100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b836001600160a01b0316336001600160a01b03167f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a43460008787604051610be294939291906133ee565b60405180910390a35061097960017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020526040902060010154610c4e81611cde565b610c588383611ce8565b50505050565b7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb610c8881611cde565b610c90611dd5565b610c98611e33565b6001600160a01b038416610cd8576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000846001600160a01b03163460405160006040518083038185875af1925050503d8060008114610d25576040519150601f19603f3d011682016040523d82523d6000602084013e610d2a565b606091505b5050905080610d65576040517facfdb44400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f8fcaa0b50000000000000000000000000000000000000000000000000000000081526001600160a01b03861690638fcaa0b590610dac90879087906004016133b8565b600060405180830381600087803b158015610dc657600080fd5b505af1158015610dda573d6000803e3d6000fd5b50505050846001600160a01b03167fd5d7616b1678354a0dea9d7e57e6a090bff5babe9f8d6381fdbad16e89ba311c348686604051610e1b939291906133d4565b60405180910390a250610c5860017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b6001600160a01b0381163314610e8f576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6109798282611f83565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610ec381611cde565b610ecb612047565b50565b610ed66120d7565b610edf826121a7565b610ee982826121b2565b5050565b7f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b9610f1781611cde565b610f1f611dd5565b610f27611e33565b83600003610f61576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038516610fa1576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610fab86866122d6565b610fe1576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b0386811660048301526024820186905287169063095ea7b3906044016020604051808303816000875af1158015611049573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061106d9190613417565b6110a3576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6110ae858484611eda565b506110b986866122d6565b6110ef576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201526000906001600160a01b038816906370a0823190602401602060405180830381865afa15801561114f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111739190613439565b90508015611185576111858782612366565b856001600160a01b0316876001600160a01b03167f29c40793bffd84cb810179f15d1ceec72bc7f0785514c668ba36645cf99b73828787876040516111cc939291906133d4565b60405180910390a3506111fe60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b505050505050565b600061121061258c565b507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc90565b600480546040517f40c10f190000000000000000000000000000000000000000000000000000000081523092810192909252602482018590526001600160a01b0316906340c10f1990604401600060405180830381600087803b15801561129b57600080fd5b505af11580156112af573d6000803e3d6000fd5b50506004546112cd92506001600160a01b0316905085858585610eed565b600480546040517f70a0823100000000000000000000000000000000000000000000000000000000815230928101929092526001600160a01b0316906370a0823190602401602060405180830381865afa15801561132f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113539190613439565b15610c5857610c58613452565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61138a81611cde565b610ecb6125ee565b61139a611dd5565b6113a2611e33565b836000036113dc576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03851661141c576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611427338486612667565b846001600160a01b0316336001600160a01b03167f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a48686868660405161147094939291906133ee565b60405180910390a36114a160017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b5050505050565b60006114b381611cde565b6001600160a01b0382166114f3576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000546001600160a01b031615611536576040517fb337f37800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6115607f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b983611ce8565b5050600080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b7f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b96115c681611cde565b6115ce611dd5565b6115d6611e33565b83600003611610576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038516611650576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6116646001600160a01b03871686866128ad565b6040517f8fcaa0b50000000000000000000000000000000000000000000000000000000081526001600160a01b03861690638fcaa0b5906116ab90869086906004016133b8565b600060405180830381600087803b1580156116c557600080fd5b505af11580156116d9573d6000803e3d6000fd5b50505050846001600160a01b0316866001600160a01b03167f723fc7be2448075379e4fdf1e6bf5fead954d2668d2da05dcb44ccfec4beeda7868686604051611724939291906133d4565b60405180910390a36111fe60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156117a05750825b905060008267ffffffffffffffff1660011480156117bd5750303b155b9050811580156117cb575080155b15611802576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84547fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000016600117855583156118635784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff16680100000000000000001785555b6001600160a01b038816158061188057506001600160a01b038716155b156118b7576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6118bf612921565b6118c7612929565b6118cf612921565b6118d7612939565b6118e2600087611ce8565b5061190d7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a87611ce8565b50600180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b038a1617905561196b7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb89611ce8565b50600380547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0389161790558315611a005784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b5050505050505050565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020526040902060010154611a4481611cde565b610c588383611f83565b611a56611dd5565b611a5e611e33565b34600003611a98576040517f7671265e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038116611ad8576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546040516000916001600160a01b03169034908381818185875af1925050503d8060008114611b25576040519150601f19603f3d011682016040523d82523d6000602084013e611b2a565b606091505b5050905080611b65576040517f79cacff100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60408051348152600060208201819052606082840181905282015290516001600160a01b0384169133917f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a49181900360800190a350610ecb60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b611beb611dd5565b611bf3611e33565b81600003611c2d576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038316611c6d576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611c78338284612667565b826001600160a01b0316336001600160a01b03167f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a484846040516109489291909182526001600160a01b0316602082015260606040820181905260009082015260800190565b610ecb8133612949565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff16611dcb576000848152602082815260408083206001600160a01b0387168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055611d813390565b6001600160a01b0316836001600160a01b0316857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a460019150506107f9565b60009150506107f9565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff1615611e31576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0080547ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01611eae576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60029055565b60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b6060600080856001600160a01b0316348686604051611efa929190613481565b60006040518083038185875af1925050503d8060008114611f37576040519150601f19603f3d011682016040523d82523d6000602084013e611f3c565b606091505b509150915081611f78576040517facfdb44400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b9150505b9392505050565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff1615611dcb576000848152602082815260408083206001600160a01b038716808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339287917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a460019150506107f9565b61204f6129d6565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001681557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a150565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148061217057507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166121647f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b6001600160a01b031614155b15611e31576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610ee981611cde565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa92505050801561222a575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820190925261222791810190613439565b60015b612270576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b03831660048201526024015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc81146122cc576040517faa1d49a400000000000000000000000000000000000000000000000000000000815260048101829052602401612267565b6109798383612a31565b6040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b038281166004830152600060248301819052919084169063095ea7b3906044016020604051808303816000875af1158015612342573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f7c9190613417565b6003546001600160a01b03908116908316036124b5576002546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152602481018390529083169063095ea7b3906044016020604051808303816000875af11580156123e8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061240c9190613417565b612442576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002546040517f743e0c9b000000000000000000000000000000000000000000000000000000008152600481018390526001600160a01b039091169063743e0c9b90602401600060405180830381600087803b1580156124a157600080fd5b505af11580156111fe573d6000803e3d6000fd5b6000546040517fd936547e0000000000000000000000000000000000000000000000000000000081526001600160a01b0384811660048301529091169063d936547e90602401602060405180830381865afa158015612518573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061253c9190613417565b612572576040517fac2175f100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600054610ee9906001600160a01b038481169116836128ad565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614611e31576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6125f6611dd5565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011781557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258336120b9565b6003546001600160a01b03908116908316036127d4576126926001600160a01b038316843084612a87565b6002546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152602481018390529083169063095ea7b3906044016020604051808303816000875af11580156126fe573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127229190613417565b612758576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002546040517f743e0c9b000000000000000000000000000000000000000000000000000000008152600481018390526001600160a01b039091169063743e0c9b90602401600060405180830381600087803b1580156127b757600080fd5b505af11580156127cb573d6000803e3d6000fd5b50505050505050565b6000546040517fd936547e0000000000000000000000000000000000000000000000000000000081526001600160a01b0384811660048301529091169063d936547e90602401602060405180830381865afa158015612837573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061285b9190613417565b612891576040517fac2175f100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600054610979906001600160a01b038481169186911684612a87565b6040516001600160a01b0383811660248301526044820183905261097991859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050612ac0565b611e31612b3c565b612931612b3c565b611e31612ba3565b612941612b3c565b611e31612bab565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408083206001600160a01b038516845290915290205460ff16610ee9576040517fe2517d3f0000000000000000000000000000000000000000000000000000000081526001600160a01b038216600482015260248101839052604401612267565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff16611e31576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612a3a82612bfc565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a2805115612a7f576109798282612ca4565b610ee9612d1a565b6040516001600160a01b038481166024830152838116604483015260648201839052610c589186918216906323b872dd906084016128da565b6000612ad56001600160a01b03841683612d52565b90508051600014158015612afa575080806020019051810190612af89190613417565b155b15610979576040517f5274afe70000000000000000000000000000000000000000000000000000000081526001600160a01b0384166004820152602401612267565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff16611e31576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611eb4612b3c565b612bb3612b3c565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055565b806001600160a01b03163b600003612c4b576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b0382166004820152602401612267565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6060600080846001600160a01b031684604051612cc19190613491565b600060405180830381855af49150503d8060008114612cfc576040519150601f19603f3d011682016040523d82523d6000602084013e612d01565b606091505b5091509150612d11858383612d60565b95945050505050565b3415611e31576040517fb398979f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6060611f7c83836000612dd5565b606082612d7557612d7082612e8b565b611f7c565b8151158015612d8c57506001600160a01b0384163b155b15612dce576040517f9996b3150000000000000000000000000000000000000000000000000000000081526001600160a01b0385166004820152602401612267565b5080611f7c565b606081471015612e13576040517fcd786059000000000000000000000000000000000000000000000000000000008152306004820152602401612267565b600080856001600160a01b03168486604051612e2f9190613491565b60006040518083038185875af1925050503d8060008114612e6c576040519150601f19603f3d011682016040523d82523d6000602084013e612e71565b606091505b5091509150612e81868383612d60565b9695505050505050565b805115612e9b5780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060208284031215612edf57600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114611f7c57600080fd5b80356001600160a01b0381168114612f2657600080fd5b919050565b600060208284031215612f3d57600080fd5b611f7c82612f0f565b60008083601f840112612f5857600080fd5b50813567ffffffffffffffff811115612f7057600080fd5b602083019150836020828501011115612f8857600080fd5b9250929050565b600080600060408486031215612fa457600080fd5b612fad84612f0f565b9250602084013567ffffffffffffffff811115612fc957600080fd5b612fd586828701612f46565b9497909650939450505050565b60005b83811015612ffd578181015183820152602001612fe5565b50506000910152565b6000815180845261301e816020860160208601612fe2565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000611f7c6020830184613006565b60006020828403121561307557600080fd5b5035919050565b6000806040838503121561308f57600080fd5b8235915061309f60208401612f0f565b90509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080604083850312156130ea57600080fd5b6130f383612f0f565b9150602083013567ffffffffffffffff81111561310f57600080fd5b8301601f8101851361312057600080fd5b803567ffffffffffffffff81111561313a5761313a6130a8565b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8501160116810181811067ffffffffffffffff821117156131a6576131a66130a8565b6040528181528282016020018710156131be57600080fd5b816020840160208301376000602083830101528093505050509250929050565b6000806000806000608086880312156131f657600080fd5b6131ff86612f0f565b945061320d60208701612f0f565b935060408601359250606086013567ffffffffffffffff81111561323057600080fd5b61323c88828901612f46565b969995985093965092949392505050565b6000806000806060858703121561326357600080fd5b61326c85612f0f565b935060208501359250604085013567ffffffffffffffff81111561328f57600080fd5b61329b87828801612f46565b95989497509550505050565b6000806000806000608086880312156132bf57600080fd5b6132c886612f0f565b9450602086013593506132dd60408701612f0f565b9250606086013567ffffffffffffffff81111561323057600080fd5b60008060006060848603121561330e57600080fd5b61331784612f0f565b925061332560208501612f0f565b915061333360408501612f0f565b90509250925092565b60008060006060848603121561335157600080fd5b61335a84612f0f565b92506020840135915061333360408501612f0f565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b6020815260006133cc60208301848661336f565b949350505050565b838152604060208201526000612d1160408301848661336f565b8481526001600160a01b0384166020820152606060408201526000612e8160608301848661336f565b60006020828403121561342957600080fd5b81518015158114611f7c57600080fd5b60006020828403121561344b57600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b8183823760009101908152919050565b600082516134a3818460208701612fe2565b919091019291505056fea2646970667358221220749992fc5d6c5f5fcb8a3202d9894526b754415bef831ad88ca3d85be39dad4a64736f6c634300081a0033608060405234801561001057600080fd5b50604051610c9f380380610c9f83398101604081905261002f9161010d565b8181600361003d83826101ff565b50600461004a82826101ff565b50505050506102bd565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261007b57600080fd5b81516001600160401b0381111561009457610094610054565b604051601f8201601f19908116603f011681016001600160401b03811182821017156100c2576100c2610054565b6040528181528382016020018510156100da57600080fd5b60005b828110156100f9576020818601810151838301820152016100dd565b506000918101602001919091529392505050565b6000806040838503121561012057600080fd5b82516001600160401b0381111561013657600080fd5b6101428582860161006a565b602085015190935090506001600160401b0381111561016057600080fd5b61016c8582860161006a565b9150509250929050565b600181811c9082168061018a57607f821691505b6020821081036101aa57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156101fa57806000526020600020601f840160051c810160208510156101d75750805b601f840160051c820191505b818110156101f757600081556001016101e3565b50505b505050565b81516001600160401b0381111561021857610218610054565b61022c816102268454610176565b846101b0565b6020601f82116001811461026057600083156102485750848201515b600019600385901b1c1916600184901b1784556101f7565b600084815260208120601f198516915b828110156102905787850151825560209485019460019092019101610270565b50848210156102ae5786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b6109d3806102cc6000396000f3fe608060405234801561001057600080fd5b50600436106100be5760003560e01c806340c10f191161007657806395d89b411161005b57806395d89b4114610183578063a9059cbb1461018b578063dd62ed3e1461019e57600080fd5b806340c10f191461013857806370a082311461014d57600080fd5b806318160ddd116100a757806318160ddd1461010457806323b872dd14610116578063313ce5671461012957600080fd5b806306fdde03146100c3578063095ea7b3146100e1575b600080fd5b6100cb6101e4565b6040516100d891906107bf565b60405180910390f35b6100f46100ef366004610854565b610276565b60405190151581526020016100d8565b6002545b6040519081526020016100d8565b6100f461012436600461087e565b610290565b604051601281526020016100d8565b61014b610146366004610854565b6102b4565b005b61010861015b3660046108bb565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6100cb6102c2565b6100f4610199366004610854565b6102d1565b6101086101ac3660046108dd565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6060600380546101f390610910565b80601f016020809104026020016040519081016040528092919081815260200182805461021f90610910565b801561026c5780601f106102415761010080835404028352916020019161026c565b820191906000526020600020905b81548152906001019060200180831161024f57829003601f168201915b5050505050905090565b6000336102848185856102df565b60019150505b92915050565b60003361029e8582856102f1565b6102a98585856103c5565b506001949350505050565b6102be8282610470565b5050565b6060600480546101f390610910565b6000336102848185856103c5565b6102ec83838360016104cc565b505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146103bf57818110156103b0576040517ffb8f41b200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416600482015260248101829052604481018390526064015b60405180910390fd5b6103bf848484840360006104cc565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8316610415576040517f96c6fd1e000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff8216610465576040517fec442f05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b6102ec838383610614565b73ffffffffffffffffffffffffffffffffffffffff82166104c0576040517fec442f05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b6102be60008383610614565b73ffffffffffffffffffffffffffffffffffffffff841661051c576040517fe602df05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff831661056c576040517f94280d62000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260016020908152604080832093871683529290522082905580156103bf578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161060691815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff831661064c5780600260008282546106419190610963565b909155506106fe9050565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260208190526040902054818110156106d2576040517fe450d38c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8516600482015260248101829052604481018390526064016103a7565b73ffffffffffffffffffffffffffffffffffffffff841660009081526020819052604090209082900390555b73ffffffffffffffffffffffffffffffffffffffff821661072757600280548290039055610753565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090208054820190555b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516107b291815260200190565b60405180910390a3505050565b602081526000825180602084015260005b818110156107ed57602081860181015160408684010152016107d0565b5060006040828501015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011684010191505092915050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461084f57600080fd5b919050565b6000806040838503121561086757600080fd5b6108708361082b565b946020939093013593505050565b60008060006060848603121561089357600080fd5b61089c8461082b565b92506108aa6020850161082b565b929592945050506040919091013590565b6000602082840312156108cd57600080fd5b6108d68261082b565b9392505050565b600080604083850312156108f057600080fd5b6108f98361082b565b91506109076020840161082b565b90509250929050565b600181811c9082168061092457607f821691505b60208210810361095d577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b8082018082111561028a577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea26469706673582212207e804ca539d49155d2b6bc19268ce22f9f857027c75247d69fb0d56a089c93d464736f6c634300081a003360a060405234801561001057600080fd5b506040516116fe3803806116fe83398101604081905261002f916101e5565b60016000556002805460ff191690556001600160a01b038316158061005b57506001600160a01b038216155b8061006d57506001600160a01b038116155b1561008b5760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b0383166080526100a3600082610134565b506100ce7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a82610134565b506100f97f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e483610134565b506101126000805160206116de83398151915282610134565b5061012b6000805160206116de83398151915283610134565b50505050610228565b60008281526001602090815260408083206001600160a01b038516845290915281205460ff166101bf5760008381526001602081815260408084206001600160a01b0387168086529252808420805460ff19169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45060016101c3565b5060005b92915050565b80516001600160a01b03811681146101e057600080fd5b919050565b6000806000606084860312156101fa57600080fd5b610203846101c9565b9250610211602085016101c9565b915061021f604085016101c9565b90509250925092565b60805161147f61025f6000396000818161019e0152818161050001528181610562015281816108f70152610959015261147f6000f3fe608060405234801561001057600080fd5b506004361061016c5760003560e01c806385f438c1116100cd578063c8a0236211610081578063d936547e11610066578063d936547e14610355578063d9caed1214610378578063e63ab1e91461038b57600080fd5b8063c8a023621461032f578063d547741f1461034257600080fd5b80639a590427116100b25780639a590427146103015780639b19251a14610314578063a217fddf1461032757600080fd5b806385f438c11461029457806391d14854146102bb57600080fd5b806336568abe11610124578063570618e111610109578063570618e11461025a5780635c975abb146102815780638456cb591461028c57600080fd5b806336568abe1461023f5780633f4ba83a1461025257600080fd5b806321fc65f21161015557806321fc65f2146101e5578063248a9ca3146101fa5780632f2ff15d1461022c57600080fd5b806301ffc9a714610171578063116191b614610199575b600080fd5b61018461017f36600461118a565b6103b2565b60405190151581526020015b60405180910390f35b6101c07f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610190565b6101f86101f33660046111f5565b61044b565b005b61021e610208366004611292565b6000908152600160208190526040909120015490565b604051908152602001610190565b6101f861023a3660046112ab565b61064c565b6101f861024d3660046112ab565b610678565b6101f86106d6565b61021e7f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a81565b60025460ff16610184565b6101f861070b565b61021e7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b6101846102c93660046112ab565b600091825260016020908152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b6101f861030f3660046112d7565b61073d565b6101f86103223660046112d7565b6107be565b61021e600081565b6101f861033d3660046111f5565b610842565b6101f86103503660046112ab565b610a29565b6101846103633660046112d7565b60036020526000908152604090205460ff1681565b6101f86103863660046112f2565b610a4f565b61021e7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061044557507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b610453610b7b565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461047d81610bbe565b610485610bc8565b73ffffffffffffffffffffffffffffffffffffffff861660009081526003602052604090205460ff166104e4576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61052573ffffffffffffffffffffffffffffffffffffffff87167f000000000000000000000000000000000000000000000000000000000000000086610c07565b6040517f5131ab5900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690635131ab599061059f9089908990899089908990600401611378565b600060405180830381600087803b1580156105b957600080fd5b505af11580156105cd573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167f85b5be9cf454e05e0bddf49315178102227c312078eefa3c00294fb4d912ae4e868686604051610632939291906113d5565b60405180910390a3506106456001600055565b5050505050565b6000828152600160208190526040909120015461066881610bbe565b6106728383610c94565b50505050565b73ffffffffffffffffffffffffffffffffffffffff811633146106c7576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6106d18282610d41565b505050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61070081610bbe565b610708610de2565b50565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61073581610bbe565b610708610e41565b7f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a61076781610bbe565b73ffffffffffffffffffffffffffffffffffffffff8216600081815260036020526040808220805460ff19169055517f51085ddf9ebdded84b76e829eb58c4078e4b5bdf97d9a94723f336039da467919190a25050565b7f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a6107e881610bbe565b73ffffffffffffffffffffffffffffffffffffffff8216600081815260036020526040808220805460ff19166001179055517faab7954e9d246b167ef88aeddad35209ca2489d95a8aeb59e288d9b19fae5a549190a25050565b61084a610b7b565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461087481610bbe565b61087c610bc8565b73ffffffffffffffffffffffffffffffffffffffff861660009081526003602052604090205460ff166108db576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61091c73ffffffffffffffffffffffffffffffffffffffff87167f000000000000000000000000000000000000000000000000000000000000000086610c07565b6040517fb8969bd400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063b8969bd4906109969089908990899089908990600401611378565b600060405180830381600087803b1580156109b057600080fd5b505af11580156109c4573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fb9d4efa96044e5f5e03e696fa9ae2ff66911cc27e8a637c3627c75bc5b2241c8868686604051610632939291906113d5565b60008281526001602081905260409091200154610a4581610bbe565b6106728383610d41565b610a57610b7b565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e4610a8181610bbe565b610a89610bc8565b73ffffffffffffffffffffffffffffffffffffffff841660009081526003602052604090205460ff16610ae8576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610b0973ffffffffffffffffffffffffffffffffffffffff85168484610c07565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f9b1bfa7fa9ee420a16e124f794c35ac9f90472acc99140eb2f6447c714cad8eb84604051610b6891815260200190565b60405180910390a3506106d16001600055565b600260005403610bb7576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b6107088133610e7e565b60025460ff1615610c05576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6040805173ffffffffffffffffffffffffffffffffffffffff8416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb000000000000000000000000000000000000000000000000000000001790526106d1908490610f0f565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff16610d3957600083815260016020818152604080842073ffffffffffffffffffffffffffffffffffffffff87168086529252808420805460ff19169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a4506001610445565b506000610445565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff1615610d3957600083815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff86168085529252808320805460ff1916905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a4506001610445565b610dea610fa5565b6002805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b610e49610bc8565b6002805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258610e173390565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16610f0b576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82166004820152602481018390526044015b60405180910390fd5b5050565b6000610f3173ffffffffffffffffffffffffffffffffffffffff841683610fe1565b90508051600014158015610f56575080806020019051810190610f5491906113f8565b155b156106d1576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84166004820152602401610f02565b60025460ff16610c05576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6060610fef83836000610ff6565b9392505050565b606081471015611034576040517fcd786059000000000000000000000000000000000000000000000000000000008152306004820152602401610f02565b6000808573ffffffffffffffffffffffffffffffffffffffff16848660405161105d919061141a565b60006040518083038185875af1925050503d806000811461109a576040519150601f19603f3d011682016040523d82523d6000602084013e61109f565b606091505b50915091506110af8683836110b9565b9695505050505050565b6060826110ce576110c982611148565b610fef565b81511580156110f2575073ffffffffffffffffffffffffffffffffffffffff84163b155b15611141576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85166004820152602401610f02565b5080610fef565b8051156111585780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006020828403121561119c57600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610fef57600080fd5b803573ffffffffffffffffffffffffffffffffffffffff811681146111f057600080fd5b919050565b60008060008060006080868803121561120d57600080fd5b611216866111cc565b9450611224602087016111cc565b935060408601359250606086013567ffffffffffffffff81111561124757600080fd5b8601601f8101881361125857600080fd5b803567ffffffffffffffff81111561126f57600080fd5b88602082840101111561128157600080fd5b959894975092955050506020019190565b6000602082840312156112a457600080fd5b5035919050565b600080604083850312156112be57600080fd5b823591506112ce602084016111cc565b90509250929050565b6000602082840312156112e957600080fd5b610fef826111cc565b60008060006060848603121561130757600080fd5b611310846111cc565b925061131e602085016111cc565b929592945050506040919091013590565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff8616815273ffffffffffffffffffffffffffffffffffffffff851660208201528360408201526080606082015260006113ca60808301848661132f565b979650505050505050565b8381526040602082015260006113ef60408301848661132f565b95945050505050565b60006020828403121561140a57600080fd5b81518015158114610fef57600080fd5b6000825160005b8181101561143b5760208186018101518583015201611421565b50600092019182525091905056fea2646970667358221220dc54ce548a1f0bf8ba5e86cc53c6d822e55eee543451395733c659359bac8dd164736f6c634300081a00338619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a", + Bin: "0x60a060405230608052600580546001600160a01b0319163317905534801561002657600080fd5b5061002f610154565b600554600180546001600160a01b039092166001600160a01b031992831617905560028054610123921691909117905560405161006b90610206565b60408082526004908201819052631d195cdd60e21b606083015260806020830181905282015263151154d560e21b60a082015260c001604051809103906000f0801580156100bd573d6000803e3d6000fd5b50600480546001600160a01b0319166001600160a01b039283161790556001546040513092919091169082906100f290610213565b6001600160a01b03938416815291831660208301529091166040820152606001604051809103906000f08015801561012e573d6000803e3d6000fd5b50600080546001600160a01b0319166001600160a01b0392909216919091179055610220565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156101a45760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146102035780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b610c9f8061376c83390190565b6116fe8061440b83390190565b608051613523610249600039600081816121220152818161214b01526125d701526135236000f3fe6080604052600436106102345760003560e01c80635c975abb11610138578063ad3cb1cc116100b0578063d547741f1161007f578063e63ab1e911610064578063e63ab1e9146106ff578063f340fa0114610733578063f45346dc1461074657600080fd5b8063d547741f146106bf578063dda79b75146106df57600080fd5b8063ad3cb1cc14610616578063ae7a3a6f1461065f578063b8969bd41461067f578063c0c53b8b1461069f57600080fd5b80638456cb591161010757806391d14854116100ec57806391d1485414610568578063a217fddf146105cd578063a783c789146105e257600080fd5b80638456cb59146105335780638c6f037f1461054857600080fd5b80635c975abb146104885780635d62c860146104bf5780636ab90f9b146104f357806381100bf01461051357600080fd5b806335c018db116101cb5780634f1ef2861161019a57806352d1902d1161017f57806352d1902d1461043357806357bec62f146104485780635b1125911461046857600080fd5b80634f1ef286146104005780635131ab591461041357600080fd5b806335c018db1461039857806336568abe146103ab5780633c2f05a8146103cb5780633f4ba83a146103eb57600080fd5b806321e093b11161020757806321e093b1146102d0578063248a9ca31461030857806329c59b5d146103655780632f2ff15d1461037857600080fd5b806301ffc9a71461023957806310188aef1461026e5780631b8b921d146102905780631cff79cd146102b0575b600080fd5b34801561024557600080fd5b50610259610254366004612f0d565b610766565b60405190151581526020015b60405180910390f35b34801561027a57600080fd5b5061028e610289366004612f6b565b6107ff565b005b34801561029c57600080fd5b5061028e6102ab366004612fcf565b6108f3565b6102c36102be366004612fcf565b6109be565b6040516102659190613090565b3480156102dc57600080fd5b506003546102f0906001600160a01b031681565b6040516001600160a01b039091168152602001610265565b34801561031457600080fd5b506103576103233660046130a3565b60009081527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052604090206001015490565b604051908152602001610265565b61028e610373366004612fcf565b610ac1565b34801561038457600080fd5b5061028e6103933660046130bc565b610c54565b61028e6103a6366004612fcf565b610c9e565b3480156103b757600080fd5b5061028e6103c63660046130bc565b610e8d565b3480156103d757600080fd5b506004546102f0906001600160a01b031681565b3480156103f757600080fd5b5061028e610ed9565b61028e61040e366004613117565b610f0e565b34801561041f57600080fd5b5061028e61042e36600461321e565b610f2d565b34801561043f57600080fd5b50610357611246565b34801561045457600080fd5b506002546102f0906001600160a01b031681565b34801561047457600080fd5b506001546102f0906001600160a01b031681565b34801561049457600080fd5b507fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff16610259565b3480156104cb57600080fd5b506103577f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b981565b3480156104ff57600080fd5b5061028e61050e36600461328d565b611275565b34801561051f57600080fd5b506005546102f0906001600160a01b031681565b34801561053f57600080fd5b5061028e6113a0565b34801561055457600080fd5b5061028e6105633660046132e7565b6113d2565b34801561057457600080fd5b506102596105833660046130bc565b60009182527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408084206001600160a01b0393909316845291905290205460ff1690565b3480156105d957600080fd5b50610357600081565b3480156105ee57600080fd5b506103577f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb81565b34801561062257600080fd5b506102c36040518060400160405280600581526020017f352e302e3000000000000000000000000000000000000000000000000000000081525081565b34801561066b57600080fd5b5061028e61067a366004612f6b565b6114e8565b34801561068b57600080fd5b5061028e61069a36600461321e565b6115dc565b3480156106ab57600080fd5b5061028e6106ba366004613339565b611795565b3480156106cb57600080fd5b5061028e6106da3660046130bc565b611a4a565b3480156106eb57600080fd5b506000546102f0906001600160a01b031681565b34801561070b57600080fd5b506103577f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b61028e610741366004612f6b565b611a8e565b34801561075257600080fd5b5061028e61076136600461337c565b611c23565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b0000000000000000000000000000000000000000000000000000000014806107f957507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b600061080a81611d1e565b6001600160a01b03821661084a576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002546001600160a01b03161561088d576040517f0c8dc01600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6108b77f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b983611d28565b5050600280547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6108fb611e15565b610903611e73565b6001600160a01b038316610943576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b826001600160a01b0316336001600160a01b03167f2a21062ee9199c2e205622999eeb7c3da73153674f36a0acd3f74fa6af67bde384846040516109889291906133f8565b60405180910390a36109b960017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b505050565b60607f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb6109ea81611d1e565b6109f2611e15565b6109fa611e73565b6001600160a01b038516610a3a576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610a47868686611f1a565b9050856001600160a01b03167fcaf938de11c367272220bfd1d2baa99ca46665e7bc4d85f00adb51b90fe1fa9f348787604051610a8693929190613414565b60405180910390a29150610ab960017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b509392505050565b610ac9611e15565b610ad1611e73565b34600003610b0b576040517f7671265e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038316610b4b576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546040516000916001600160a01b03169034908381818185875af1925050503d8060008114610b98576040519150601f19603f3d011682016040523d82523d6000602084013e610b9d565b606091505b5050905080610bd8576040517f79cacff100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b836001600160a01b0316336001600160a01b03167f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a43460008787604051610c22949392919061342e565b60405180910390a3506109b960017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020526040902060010154610c8e81611d1e565b610c988383611d28565b50505050565b7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb610cc881611d1e565b610cd0611e15565b610cd8611e73565b6001600160a01b038416610d18576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000846001600160a01b03163460405160006040518083038185875af1925050503d8060008114610d65576040519150601f19603f3d011682016040523d82523d6000602084013e610d6a565b606091505b5050905080610da5576040517facfdb44400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f8fcaa0b50000000000000000000000000000000000000000000000000000000081526001600160a01b03861690638fcaa0b590610dec90879087906004016133f8565b600060405180830381600087803b158015610e0657600080fd5b505af1158015610e1a573d6000803e3d6000fd5b50505050846001600160a01b03167fd5d7616b1678354a0dea9d7e57e6a090bff5babe9f8d6381fdbad16e89ba311c348686604051610e5b93929190613414565b60405180910390a250610c9860017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b6001600160a01b0381163314610ecf576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6109b98282611fc3565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610f0381611d1e565b610f0b612087565b50565b610f16612117565b610f1f826121e7565b610f2982826121f2565b5050565b7f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b9610f5781611d1e565b610f5f611e15565b610f67611e73565b83600003610fa1576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038516610fe1576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610feb8686612316565b611021576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b0386811660048301526024820186905287169063095ea7b3906044016020604051808303816000875af1158015611089573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110ad9190613457565b6110e3576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6110ee858484611f1a565b506110f98686612316565b61112f576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201526000906001600160a01b038816906370a0823190602401602060405180830381865afa15801561118f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111b39190613479565b905080156111c5576111c587826123a6565b856001600160a01b0316876001600160a01b03167f29c40793bffd84cb810179f15d1ceec72bc7f0785514c668ba36645cf99b738287878760405161120c93929190613414565b60405180910390a35061123e60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b505050505050565b60006112506125cc565b507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc90565b600480546040517f40c10f190000000000000000000000000000000000000000000000000000000081523092810192909252602482018590526001600160a01b0316906340c10f1990604401600060405180830381600087803b1580156112db57600080fd5b505af11580156112ef573d6000803e3d6000fd5b505060045461130d92506001600160a01b0316905085858585610f2d565b600480546040517f70a0823100000000000000000000000000000000000000000000000000000000815230928101929092526001600160a01b0316906370a0823190602401602060405180830381865afa15801561136f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113939190613479565b15610c9857610c98613492565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a6113ca81611d1e565b610f0b61262e565b6113da611e15565b6113e2611e73565b8360000361141c576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03851661145c576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6114673384866126a7565b846001600160a01b0316336001600160a01b03167f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a4868686866040516114b0949392919061342e565b60405180910390a36114e160017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b5050505050565b60006114f381611d1e565b6001600160a01b038216611533576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000546001600160a01b031615611576576040517fb337f37800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6115a07f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b983611d28565b5050600080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b7f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b961160681611d1e565b61160e611e15565b611616611e73565b83600003611650576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038516611690576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6116a46001600160a01b03871686866128ed565b6040517f8fcaa0b50000000000000000000000000000000000000000000000000000000081526001600160a01b03861690638fcaa0b5906116eb90869086906004016133f8565b600060405180830381600087803b15801561170557600080fd5b505af1158015611719573d6000803e3d6000fd5b50505050846001600160a01b0316866001600160a01b03167f723fc7be2448075379e4fdf1e6bf5fead954d2668d2da05dcb44ccfec4beeda786868660405161176493929190613414565b60405180910390a361123e60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156117e05750825b905060008267ffffffffffffffff1660011480156117fd5750303b155b90508115801561180b575080155b15611842576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84547fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000016600117855583156118a35784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff16680100000000000000001785555b6001600160a01b03881615806118c057506001600160a01b038716155b156118f7576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6118ff612961565b611907612969565b61190f612961565b611917612979565b611922600087611d28565b5061194d7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a87611d28565b50600180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b038a161790556119ab7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb89611d28565b50600380547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0389161790558315611a405784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b5050505050505050565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020526040902060010154611a8481611d1e565b610c988383611fc3565b611a96611e15565b611a9e611e73565b34600003611ad8576040517f7671265e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038116611b18576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546040516000916001600160a01b03169034908381818185875af1925050503d8060008114611b65576040519150601f19603f3d011682016040523d82523d6000602084013e611b6a565b606091505b5050905080611ba5576040517f79cacff100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60408051348152600060208201819052606082840181905282015290516001600160a01b0384169133917f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a49181900360800190a350610f0b60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b611c2b611e15565b611c33611e73565b81600003611c6d576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038316611cad576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611cb83382846126a7565b826001600160a01b0316336001600160a01b03167f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a484846040516109889291909182526001600160a01b0316602082015260606040820181905260009082015260800190565b610f0b8133612989565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff16611e0b576000848152602082815260408083206001600160a01b0387168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055611dc13390565b6001600160a01b0316836001600160a01b0316857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a460019150506107f9565b60009150506107f9565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff1615611e71576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0080547ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01611eee576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60029055565b60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b6060600080856001600160a01b0316348686604051611f3a9291906134c1565b60006040518083038185875af1925050503d8060008114611f77576040519150601f19603f3d011682016040523d82523d6000602084013e611f7c565b606091505b509150915081611fb8576040517facfdb44400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b9150505b9392505050565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff1615611e0b576000848152602082815260408083206001600160a01b038716808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339287917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a460019150506107f9565b61208f612a16565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001681557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a150565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806121b057507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166121a47f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b6001600160a01b031614155b15611e71576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610f2981611d1e565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa92505050801561226a575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820190925261226791810190613479565b60015b6122b0576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b03831660048201526024015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc811461230c576040517faa1d49a4000000000000000000000000000000000000000000000000000000008152600481018290526024016122a7565b6109b98383612a71565b6040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b038281166004830152600060248301819052919084169063095ea7b3906044016020604051808303816000875af1158015612382573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fbc9190613457565b6003546001600160a01b03908116908316036124f5576002546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152602481018390529083169063095ea7b3906044016020604051808303816000875af1158015612428573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061244c9190613457565b612482576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002546040517f743e0c9b000000000000000000000000000000000000000000000000000000008152600481018390526001600160a01b039091169063743e0c9b90602401600060405180830381600087803b1580156124e157600080fd5b505af115801561123e573d6000803e3d6000fd5b6000546040517fd936547e0000000000000000000000000000000000000000000000000000000081526001600160a01b0384811660048301529091169063d936547e90602401602060405180830381865afa158015612558573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061257c9190613457565b6125b2576040517fac2175f100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600054610f29906001600160a01b038481169116836128ed565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614611e71576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612636611e15565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011781557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258336120f9565b6003546001600160a01b0390811690831603612814576126d26001600160a01b038316843084612ac7565b6002546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152602481018390529083169063095ea7b3906044016020604051808303816000875af115801561273e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127629190613457565b612798576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002546040517f743e0c9b000000000000000000000000000000000000000000000000000000008152600481018390526001600160a01b039091169063743e0c9b90602401600060405180830381600087803b1580156127f757600080fd5b505af115801561280b573d6000803e3d6000fd5b50505050505050565b6000546040517fd936547e0000000000000000000000000000000000000000000000000000000081526001600160a01b0384811660048301529091169063d936547e90602401602060405180830381865afa158015612877573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061289b9190613457565b6128d1576040517fac2175f100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000546109b9906001600160a01b038481169186911684612ac7565b6040516001600160a01b038381166024830152604482018390526109b991859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050612b00565b611e71612b7c565b612971612b7c565b611e71612be3565b612981612b7c565b611e71612beb565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408083206001600160a01b038516845290915290205460ff16610f29576040517fe2517d3f0000000000000000000000000000000000000000000000000000000081526001600160a01b0382166004820152602481018390526044016122a7565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff16611e71576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612a7a82612c3c565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a2805115612abf576109b98282612ce4565b610f29612d5a565b6040516001600160a01b038481166024830152838116604483015260648201839052610c989186918216906323b872dd9060840161291a565b6000612b156001600160a01b03841683612d92565b90508051600014158015612b3a575080806020019051810190612b389190613457565b155b156109b9576040517f5274afe70000000000000000000000000000000000000000000000000000000081526001600160a01b03841660048201526024016122a7565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff16611e71576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611ef4612b7c565b612bf3612b7c565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055565b806001600160a01b03163b600003612c8b576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b03821660048201526024016122a7565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6060600080846001600160a01b031684604051612d0191906134d1565b600060405180830381855af49150503d8060008114612d3c576040519150601f19603f3d011682016040523d82523d6000602084013e612d41565b606091505b5091509150612d51858383612da0565b95945050505050565b3415611e71576040517fb398979f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6060611fbc83836000612e15565b606082612db557612db082612ecb565b611fbc565b8151158015612dcc57506001600160a01b0384163b155b15612e0e576040517f9996b3150000000000000000000000000000000000000000000000000000000081526001600160a01b03851660048201526024016122a7565b5080611fbc565b606081471015612e53576040517fcd7860590000000000000000000000000000000000000000000000000000000081523060048201526024016122a7565b600080856001600160a01b03168486604051612e6f91906134d1565b60006040518083038185875af1925050503d8060008114612eac576040519150601f19603f3d011682016040523d82523d6000602084013e612eb1565b606091505b5091509150612ec1868383612da0565b9695505050505050565b805115612edb5780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060208284031215612f1f57600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114611fbc57600080fd5b80356001600160a01b0381168114612f6657600080fd5b919050565b600060208284031215612f7d57600080fd5b611fbc82612f4f565b60008083601f840112612f9857600080fd5b50813567ffffffffffffffff811115612fb057600080fd5b602083019150836020828501011115612fc857600080fd5b9250929050565b600080600060408486031215612fe457600080fd5b612fed84612f4f565b9250602084013567ffffffffffffffff81111561300957600080fd5b61301586828701612f86565b9497909650939450505050565b60005b8381101561303d578181015183820152602001613025565b50506000910152565b6000815180845261305e816020860160208601613022565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000611fbc6020830184613046565b6000602082840312156130b557600080fd5b5035919050565b600080604083850312156130cf57600080fd5b823591506130df60208401612f4f565b90509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000806040838503121561312a57600080fd5b61313383612f4f565b9150602083013567ffffffffffffffff81111561314f57600080fd5b8301601f8101851361316057600080fd5b803567ffffffffffffffff81111561317a5761317a6130e8565b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8501160116810181811067ffffffffffffffff821117156131e6576131e66130e8565b6040528181528282016020018710156131fe57600080fd5b816020840160208301376000602083830101528093505050509250929050565b60008060008060006080868803121561323657600080fd5b61323f86612f4f565b945061324d60208701612f4f565b935060408601359250606086013567ffffffffffffffff81111561327057600080fd5b61327c88828901612f86565b969995985093965092949392505050565b600080600080606085870312156132a357600080fd5b6132ac85612f4f565b935060208501359250604085013567ffffffffffffffff8111156132cf57600080fd5b6132db87828801612f86565b95989497509550505050565b6000806000806000608086880312156132ff57600080fd5b61330886612f4f565b94506020860135935061331d60408701612f4f565b9250606086013567ffffffffffffffff81111561327057600080fd5b60008060006060848603121561334e57600080fd5b61335784612f4f565b925061336560208501612f4f565b915061337360408501612f4f565b90509250925092565b60008060006060848603121561339157600080fd5b61339a84612f4f565b92506020840135915061337360408501612f4f565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b60208152600061340c6020830184866133af565b949350505050565b838152604060208201526000612d516040830184866133af565b8481526001600160a01b0384166020820152606060408201526000612ec16060830184866133af565b60006020828403121561346957600080fd5b81518015158114611fbc57600080fd5b60006020828403121561348b57600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b8183823760009101908152919050565b600082516134e3818460208701613022565b919091019291505056fea2646970667358221220d45ec3cba3622227dcd9c14b95d8558626955d38c71357f7fccb19bc65c6737564736f6c634300081a0033608060405234801561001057600080fd5b50604051610c9f380380610c9f83398101604081905261002f9161010d565b8181600361003d83826101ff565b50600461004a82826101ff565b50505050506102bd565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261007b57600080fd5b81516001600160401b0381111561009457610094610054565b604051601f8201601f19908116603f011681016001600160401b03811182821017156100c2576100c2610054565b6040528181528382016020018510156100da57600080fd5b60005b828110156100f9576020818601810151838301820152016100dd565b506000918101602001919091529392505050565b6000806040838503121561012057600080fd5b82516001600160401b0381111561013657600080fd5b6101428582860161006a565b602085015190935090506001600160401b0381111561016057600080fd5b61016c8582860161006a565b9150509250929050565b600181811c9082168061018a57607f821691505b6020821081036101aa57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156101fa57806000526020600020601f840160051c810160208510156101d75750805b601f840160051c820191505b818110156101f757600081556001016101e3565b50505b505050565b81516001600160401b0381111561021857610218610054565b61022c816102268454610176565b846101b0565b6020601f82116001811461026057600083156102485750848201515b600019600385901b1c1916600184901b1784556101f7565b600084815260208120601f198516915b828110156102905787850151825560209485019460019092019101610270565b50848210156102ae5786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b6109d3806102cc6000396000f3fe608060405234801561001057600080fd5b50600436106100be5760003560e01c806340c10f191161007657806395d89b411161005b57806395d89b4114610183578063a9059cbb1461018b578063dd62ed3e1461019e57600080fd5b806340c10f191461013857806370a082311461014d57600080fd5b806318160ddd116100a757806318160ddd1461010457806323b872dd14610116578063313ce5671461012957600080fd5b806306fdde03146100c3578063095ea7b3146100e1575b600080fd5b6100cb6101e4565b6040516100d891906107bf565b60405180910390f35b6100f46100ef366004610854565b610276565b60405190151581526020016100d8565b6002545b6040519081526020016100d8565b6100f461012436600461087e565b610290565b604051601281526020016100d8565b61014b610146366004610854565b6102b4565b005b61010861015b3660046108bb565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6100cb6102c2565b6100f4610199366004610854565b6102d1565b6101086101ac3660046108dd565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6060600380546101f390610910565b80601f016020809104026020016040519081016040528092919081815260200182805461021f90610910565b801561026c5780601f106102415761010080835404028352916020019161026c565b820191906000526020600020905b81548152906001019060200180831161024f57829003601f168201915b5050505050905090565b6000336102848185856102df565b60019150505b92915050565b60003361029e8582856102f1565b6102a98585856103c5565b506001949350505050565b6102be8282610470565b5050565b6060600480546101f390610910565b6000336102848185856103c5565b6102ec83838360016104cc565b505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146103bf57818110156103b0576040517ffb8f41b200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416600482015260248101829052604481018390526064015b60405180910390fd5b6103bf848484840360006104cc565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8316610415576040517f96c6fd1e000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff8216610465576040517fec442f05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b6102ec838383610614565b73ffffffffffffffffffffffffffffffffffffffff82166104c0576040517fec442f05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b6102be60008383610614565b73ffffffffffffffffffffffffffffffffffffffff841661051c576040517fe602df05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff831661056c576040517f94280d62000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260016020908152604080832093871683529290522082905580156103bf578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161060691815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff831661064c5780600260008282546106419190610963565b909155506106fe9050565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260208190526040902054818110156106d2576040517fe450d38c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8516600482015260248101829052604481018390526064016103a7565b73ffffffffffffffffffffffffffffffffffffffff841660009081526020819052604090209082900390555b73ffffffffffffffffffffffffffffffffffffffff821661072757600280548290039055610753565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090208054820190555b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516107b291815260200190565b60405180910390a3505050565b602081526000825180602084015260005b818110156107ed57602081860181015160408684010152016107d0565b5060006040828501015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011684010191505092915050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461084f57600080fd5b919050565b6000806040838503121561086757600080fd5b6108708361082b565b946020939093013593505050565b60008060006060848603121561089357600080fd5b61089c8461082b565b92506108aa6020850161082b565b929592945050506040919091013590565b6000602082840312156108cd57600080fd5b6108d68261082b565b9392505050565b600080604083850312156108f057600080fd5b6108f98361082b565b91506109076020840161082b565b90509250929050565b600181811c9082168061092457607f821691505b60208210810361095d577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b8082018082111561028a577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea26469706673582212207e804ca539d49155d2b6bc19268ce22f9f857027c75247d69fb0d56a089c93d464736f6c634300081a003360a060405234801561001057600080fd5b506040516116fe3803806116fe83398101604081905261002f916101e5565b60016000556002805460ff191690556001600160a01b038316158061005b57506001600160a01b038216155b8061006d57506001600160a01b038116155b1561008b5760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b0383166080526100a3600082610134565b506100ce7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a82610134565b506100f97f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e483610134565b506101126000805160206116de83398151915282610134565b5061012b6000805160206116de83398151915283610134565b50505050610228565b60008281526001602090815260408083206001600160a01b038516845290915281205460ff166101bf5760008381526001602081815260408084206001600160a01b0387168086529252808420805460ff19169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45060016101c3565b5060005b92915050565b80516001600160a01b03811681146101e057600080fd5b919050565b6000806000606084860312156101fa57600080fd5b610203846101c9565b9250610211602085016101c9565b915061021f604085016101c9565b90509250925092565b60805161147f61025f6000396000818161019e0152818161050001528181610562015281816108f70152610959015261147f6000f3fe608060405234801561001057600080fd5b506004361061016c5760003560e01c806385f438c1116100cd578063c8a0236211610081578063d936547e11610066578063d936547e14610355578063d9caed1214610378578063e63ab1e91461038b57600080fd5b8063c8a023621461032f578063d547741f1461034257600080fd5b80639a590427116100b25780639a590427146103015780639b19251a14610314578063a217fddf1461032757600080fd5b806385f438c11461029457806391d14854146102bb57600080fd5b806336568abe11610124578063570618e111610109578063570618e11461025a5780635c975abb146102815780638456cb591461028c57600080fd5b806336568abe1461023f5780633f4ba83a1461025257600080fd5b806321fc65f21161015557806321fc65f2146101e5578063248a9ca3146101fa5780632f2ff15d1461022c57600080fd5b806301ffc9a714610171578063116191b614610199575b600080fd5b61018461017f36600461118a565b6103b2565b60405190151581526020015b60405180910390f35b6101c07f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610190565b6101f86101f33660046111f5565b61044b565b005b61021e610208366004611292565b6000908152600160208190526040909120015490565b604051908152602001610190565b6101f861023a3660046112ab565b61064c565b6101f861024d3660046112ab565b610678565b6101f86106d6565b61021e7f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a81565b60025460ff16610184565b6101f861070b565b61021e7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b6101846102c93660046112ab565b600091825260016020908152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b6101f861030f3660046112d7565b61073d565b6101f86103223660046112d7565b6107be565b61021e600081565b6101f861033d3660046111f5565b610842565b6101f86103503660046112ab565b610a29565b6101846103633660046112d7565b60036020526000908152604090205460ff1681565b6101f86103863660046112f2565b610a4f565b61021e7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061044557507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b610453610b7b565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461047d81610bbe565b610485610bc8565b73ffffffffffffffffffffffffffffffffffffffff861660009081526003602052604090205460ff166104e4576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61052573ffffffffffffffffffffffffffffffffffffffff87167f000000000000000000000000000000000000000000000000000000000000000086610c07565b6040517f5131ab5900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690635131ab599061059f9089908990899089908990600401611378565b600060405180830381600087803b1580156105b957600080fd5b505af11580156105cd573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167f85b5be9cf454e05e0bddf49315178102227c312078eefa3c00294fb4d912ae4e868686604051610632939291906113d5565b60405180910390a3506106456001600055565b5050505050565b6000828152600160208190526040909120015461066881610bbe565b6106728383610c94565b50505050565b73ffffffffffffffffffffffffffffffffffffffff811633146106c7576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6106d18282610d41565b505050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61070081610bbe565b610708610de2565b50565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61073581610bbe565b610708610e41565b7f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a61076781610bbe565b73ffffffffffffffffffffffffffffffffffffffff8216600081815260036020526040808220805460ff19169055517f51085ddf9ebdded84b76e829eb58c4078e4b5bdf97d9a94723f336039da467919190a25050565b7f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a6107e881610bbe565b73ffffffffffffffffffffffffffffffffffffffff8216600081815260036020526040808220805460ff19166001179055517faab7954e9d246b167ef88aeddad35209ca2489d95a8aeb59e288d9b19fae5a549190a25050565b61084a610b7b565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461087481610bbe565b61087c610bc8565b73ffffffffffffffffffffffffffffffffffffffff861660009081526003602052604090205460ff166108db576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61091c73ffffffffffffffffffffffffffffffffffffffff87167f000000000000000000000000000000000000000000000000000000000000000086610c07565b6040517fb8969bd400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063b8969bd4906109969089908990899089908990600401611378565b600060405180830381600087803b1580156109b057600080fd5b505af11580156109c4573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fb9d4efa96044e5f5e03e696fa9ae2ff66911cc27e8a637c3627c75bc5b2241c8868686604051610632939291906113d5565b60008281526001602081905260409091200154610a4581610bbe565b6106728383610d41565b610a57610b7b565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e4610a8181610bbe565b610a89610bc8565b73ffffffffffffffffffffffffffffffffffffffff841660009081526003602052604090205460ff16610ae8576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610b0973ffffffffffffffffffffffffffffffffffffffff85168484610c07565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f9b1bfa7fa9ee420a16e124f794c35ac9f90472acc99140eb2f6447c714cad8eb84604051610b6891815260200190565b60405180910390a3506106d16001600055565b600260005403610bb7576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b6107088133610e7e565b60025460ff1615610c05576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6040805173ffffffffffffffffffffffffffffffffffffffff8416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb000000000000000000000000000000000000000000000000000000001790526106d1908490610f0f565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff16610d3957600083815260016020818152604080842073ffffffffffffffffffffffffffffffffffffffff87168086529252808420805460ff19169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a4506001610445565b506000610445565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff1615610d3957600083815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff86168085529252808320805460ff1916905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a4506001610445565b610dea610fa5565b6002805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b610e49610bc8565b6002805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258610e173390565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16610f0b576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82166004820152602481018390526044015b60405180910390fd5b5050565b6000610f3173ffffffffffffffffffffffffffffffffffffffff841683610fe1565b90508051600014158015610f56575080806020019051810190610f5491906113f8565b155b156106d1576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84166004820152602401610f02565b60025460ff16610c05576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6060610fef83836000610ff6565b9392505050565b606081471015611034576040517fcd786059000000000000000000000000000000000000000000000000000000008152306004820152602401610f02565b6000808573ffffffffffffffffffffffffffffffffffffffff16848660405161105d919061141a565b60006040518083038185875af1925050503d806000811461109a576040519150601f19603f3d011682016040523d82523d6000602084013e61109f565b606091505b50915091506110af8683836110b9565b9695505050505050565b6060826110ce576110c982611148565b610fef565b81511580156110f2575073ffffffffffffffffffffffffffffffffffffffff84163b155b15611141576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85166004820152602401610f02565b5080610fef565b8051156111585780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006020828403121561119c57600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610fef57600080fd5b803573ffffffffffffffffffffffffffffffffffffffff811681146111f057600080fd5b919050565b60008060008060006080868803121561120d57600080fd5b611216866111cc565b9450611224602087016111cc565b935060408601359250606086013567ffffffffffffffff81111561124757600080fd5b8601601f8101881361125857600080fd5b803567ffffffffffffffff81111561126f57600080fd5b88602082840101111561128157600080fd5b959894975092955050506020019190565b6000602082840312156112a457600080fd5b5035919050565b600080604083850312156112be57600080fd5b823591506112ce602084016111cc565b90509250929050565b6000602082840312156112e957600080fd5b610fef826111cc565b60008060006060848603121561130757600080fd5b611310846111cc565b925061131e602085016111cc565b929592945050506040919091013590565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff8616815273ffffffffffffffffffffffffffffffffffffffff851660208201528360408201526080606082015260006113ca60808301848661132f565b979650505050505050565b8381526040602082015260006113ef60408301848661132f565b95945050505050565b60006020828403121561140a57600080fd5b81518015158114610fef57600080fd5b6000825160005b8181101561143b5760208186018101518583015201611421565b50600092019182525091905056fea26469706673582212202f3991d39315b7c0e5ef6fd88336a0f791f8e1cce0a70cb66f2c4c9404215ae364736f6c634300081a00338619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a", } // GatewayEVMEchidnaTestABI is the input ABI used to generate the binding from. diff --git a/v2/pkg/gatewayevmupgrade.t.sol/gatewayevmuupsupgradetest.go b/v2/pkg/gatewayevmupgrade.t.sol/gatewayevmuupsupgradetest.go index 57e0a1df..0af8d54b 100644 --- a/v2/pkg/gatewayevmupgrade.t.sol/gatewayevmuupsupgradetest.go +++ b/v2/pkg/gatewayevmupgrade.t.sol/gatewayevmuupsupgradetest.go @@ -50,7 +50,7 @@ type StdInvariantFuzzSelector struct { // GatewayEVMUUPSUpgradeTestMetaData contains all meta data concerning the GatewayEVMUUPSUpgradeTest contract. var GatewayEVMUUPSUpgradeTestMetaData = &bind.MetaData{ ABI: "[{\"type\":\"function\",\"name\":\"IS_TEST\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeArtifacts\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedArtifacts_\",\"type\":\"string[]\",\"internalType\":\"string[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeContracts\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedContracts_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeSelectors\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedSelectors_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzSelector[]\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"selectors\",\"type\":\"bytes4[]\",\"internalType\":\"bytes4[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeSenders\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedSenders_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"failed\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"setUp\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"targetArtifactSelectors\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedArtifactSelectors_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzArtifactSelector[]\",\"components\":[{\"name\":\"artifact\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"selectors\",\"type\":\"bytes4[]\",\"internalType\":\"bytes4[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetArtifacts\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedArtifacts_\",\"type\":\"string[]\",\"internalType\":\"string[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetContracts\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedContracts_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetInterfaces\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedInterfaces_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzInterface[]\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"artifacts\",\"type\":\"string[]\",\"internalType\":\"string[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetSelectors\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedSelectors_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzSelector[]\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"selectors\",\"type\":\"bytes4[]\",\"internalType\":\"bytes4[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetSenders\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedSenders_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"testUpgradeAndForwardCallToReceivePayable\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"event\",\"name\":\"Call\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"receiver\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Deposit\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"receiver\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"asset\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Executed\",\"inputs\":[{\"name\":\"destination\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ExecutedV2\",\"inputs\":[{\"name\":\"destination\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ExecutedWithERC20\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedERC20\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"token\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"destination\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedNoParams\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedNonPayable\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"strs\",\"type\":\"string[]\",\"indexed\":false,\"internalType\":\"string[]\"},{\"name\":\"nums\",\"type\":\"uint256[]\",\"indexed\":false,\"internalType\":\"uint256[]\"},{\"name\":\"flag\",\"type\":\"bool\",\"indexed\":false,\"internalType\":\"bool\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedPayable\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"str\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"num\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"flag\",\"type\":\"bool\",\"indexed\":false,\"internalType\":\"bool\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedRevert\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Reverted\",\"inputs\":[{\"name\":\"destination\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RevertedWithERC20\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log\",\"inputs\":[{\"name\":\"\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_address\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_array\",\"inputs\":[{\"name\":\"val\",\"type\":\"uint256[]\",\"indexed\":false,\"internalType\":\"uint256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_array\",\"inputs\":[{\"name\":\"val\",\"type\":\"int256[]\",\"indexed\":false,\"internalType\":\"int256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_array\",\"inputs\":[{\"name\":\"val\",\"type\":\"address[]\",\"indexed\":false,\"internalType\":\"address[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_bytes\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_bytes32\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_int\",\"inputs\":[{\"name\":\"\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_address\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_array\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"uint256[]\",\"indexed\":false,\"internalType\":\"uint256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_array\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"int256[]\",\"indexed\":false,\"internalType\":\"int256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_array\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"address[]\",\"indexed\":false,\"internalType\":\"address[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_bytes\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_bytes32\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_decimal_int\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"},{\"name\":\"decimals\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_decimal_uint\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"decimals\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_int\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_string\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_uint\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_string\",\"inputs\":[{\"name\":\"\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_uint\",\"inputs\":[{\"name\":\"\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"logs\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"ApprovalFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ConnectorInitialized\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"CustodyInitialized\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"DepositFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ExecutionFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientERC20Amount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientETHAmount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NotWhitelistedInCustody\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZeroAddress\",\"inputs\":[]}]", - Bin: "0x6080604052600c8054600160ff199182168117909255601f80549091169091179055348015602c57600080fd5b5061bf6d8061003c6000396000f3fe608060405234801561001057600080fd5b50600436106100ea5760003560e01c806385226c811161008c578063b5508aa911610066578063b5508aa91461018b578063ba414fa614610193578063e20c9f71146101ab578063fa7626d4146101b357600080fd5b806385226c8114610159578063916a17c61461016e578063b0464fdc1461018357600080fd5b80633e5e3c23116100c85780633e5e3c231461012c5780633f7286f41461013457806366d9a9a01461013c5780637a380ebf1461015157600080fd5b80630a9254e4146100ef5780631ed7831c146100f95780632ade388014610117575b600080fd5b6100f76101c0565b005b610101610a85565b60405161010e919061620b565b60405180910390f35b61011f610ae7565b60405161010e91906162a7565b610101610c29565b610101610c89565b610144610ce9565b60405161010e919061640d565b6100f7610e6b565b61016161152d565b60405161010e91906164ab565b6101766115fd565b60405161010e9190616522565b6101766116f8565b6101616117f3565b61019b6118c3565b604051901515815260200161010e565b610101611997565b601f5461019b9060ff1681565b602680547fffffffffffffffffffffffff00000000000000000000000000000000000000009081163017909155602780548216611234179055602880549091166156781790556040516102129061611e565b60408082526004908201527f746573740000000000000000000000000000000000000000000000000000000060608201526080602082018190526003908201527f54544b000000000000000000000000000000000000000000000000000000000060a082015260c001604051809103906000f080158015610297573d6000803e3d6000fd5b50602480547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03929092169190911790556040516102dc9061611e565b604080825260049082018190527f7a6574610000000000000000000000000000000000000000000000000000000060608301526080602083018190528201527f5a4554410000000000000000000000000000000000000000000000000000000060a082015260c001604051809103906000f080158015610360573d6000803e3d6000fd5b50602580547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03928316908117909155604080518082018252600e81527f4761746577617945564d2e736f6c00000000000000000000000000000000000060208201526028546026549251908516602482015260448101939093529216606482015261044f919060840160408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fc0c53b8b000000000000000000000000000000000000000000000000000000001790526119f7565b601f80547fffffffffffffffffffffff0000000000000000000000000000000000000000ff166101006001600160a01b0393841681029190911791829055602080549190920483167fffffffffffffffffffffffff000000000000000000000000000000000000000090911681179091556028546026546040519293918216929116906104db9061612b565b6001600160a01b03938416815291831660208301529091166040820152606001604051809103906000f080158015610517573d6000803e3d6000fd5b50602280547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03928316179055602054602554602854602654604051938516949283169391831692169061057290616138565b6001600160a01b039485168152928416602084015290831660408301529091166060820152608001604051809103906000f0801580156105b6573d6000803e3d6000fd5b50602380547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03929092169190911790556040516105fb90616145565b604051809103906000f080158015610617573d6000803e3d6000fd5b50602180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039283161790556028546040517fc88a5e6d00000000000000000000000000000000000000000000000000000000815291166004820152670de0b6b3a76400006024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c88a5e6d90604401600060405180830381600087803b1580156106c357600080fd5b505af11580156106d7573d6000803e3d6000fd5b50506026546040517f06447d560000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506306447d569150602401600060405180830381600087803b15801561074d57600080fd5b505af1158015610761573d6000803e3d6000fd5b50506020546022546040517fae7a3a6f0000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201529116925063ae7a3a6f9150602401600060405180830381600087803b1580156107c757600080fd5b505af11580156107db573d6000803e3d6000fd5b50506020546023546040517f10188aef0000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152911692506310188aef9150602401600060405180830381600087803b15801561084157600080fd5b505af1158015610855573d6000803e3d6000fd5b505050507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b03166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156108b757600080fd5b505af11580156108cb573d6000803e3d6000fd5b5050602480546026546040517f40c10f190000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620f4240938101939093521692506340c10f199150604401600060405180830381600087803b15801561093c57600080fd5b505af1158015610950573d6000803e3d6000fd5b5050602480546022546040517fa9059cbb0000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201526207a1209381019390935216925063a9059cbb91506044016020604051808303816000875af11580156109c6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109ea91906165b9565b506028546040517fc88a5e6d0000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152670de0b6b3a76400006024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c88a5e6d90604401600060405180830381600087803b158015610a6b57600080fd5b505af1158015610a7f573d6000803e3d6000fd5b50505050565b60606016805480602002602001604051908101604052809291908181526020018280548015610add57602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610abf575b5050505050905090565b6060601e805480602002602001604051908101604052809291908181526020016000905b82821015610c2057600084815260208082206040805180820182526002870290920180546001600160a01b03168352600181018054835181870281018701909452808452939591948681019491929084015b82821015610c09578382906000526020600020018054610b7c906165db565b80601f0160208091040260200160405190810160405280929190818152602001828054610ba8906165db565b8015610bf55780601f10610bca57610100808354040283529160200191610bf5565b820191906000526020600020905b815481529060010190602001808311610bd857829003601f168201915b505050505081526020019060010190610b5d565b505050508152505081526020019060010190610b0b565b50505050905090565b60606018805480602002602001604051908101604052809291908181526020018280548015610add576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311610abf575050505050905090565b60606017805480602002602001604051908101604052809291908181526020018280548015610add576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311610abf575050505050905090565b6060601b805480602002602001604051908101604052809291908181526020016000905b82821015610c205783829060005260206000209060020201604051806040016040529081600082018054610d40906165db565b80601f0160208091040260200160405190810160405280929190818152602001828054610d6c906165db565b8015610db95780601f10610d8e57610100808354040283529160200191610db9565b820191906000526020600020905b815481529060010190602001808311610d9c57829003601f168201915b5050505050815260200160018201805480602002602001604051908101604052809291908181526020018280548015610e5357602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019060040190602082600301049283019260010382029150808411610e005790505b50505050508152505081526020019060010190610d0d565b60208054604080517fdda79b7500000000000000000000000000000000000000000000000000000000815290516000936001600160a01b039093169263dda79b7592600480820193918290030181865afa158015610ecd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ef19190616628565b60208054604080517f5b11259100000000000000000000000000000000000000000000000000000000815290519394506000936001600160a01b0390921692635b112591926004808401938290030181865afa158015610f55573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f799190616628565b604080518082018252600f81527f48656c6c6f2c20466f756e647279210000000000000000000000000000000000602080830191909152601f5483518085018552601981527f4761746577617945564d55706772616465546573742e736f6c00000000000000818401528451928301909452600082526026549495509193602a93600193670de0b6b3a764000093611023936001600160a01b036101009093048316939216611a16565b600084848460405160240161103a93929190616651565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe04d4f9700000000000000000000000000000000000000000000000000000000179052601f5460215491517ff30c7ba30000000000000000000000000000000000000000000000000000000081529293506001600160a01b03610100909104811692737109709ecfa91a80626ff3989d68f67f5b1dd12d9263f30c7ba392611100929116908790879060040161667b565b600060405180830381600087803b15801561111a57600080fd5b505af115801561112e573d6000803e3d6000fd5b50506021546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b1580156111c057600080fd5b505af11580156111d4573d6000803e3d6000fd5b50506020546040517f1f1ff1f5fb41346850b2f5c04e6c767e2f1c8a525c5c0c5cdb60cdf3ca5f62fa935061121d92506001600160a01b039091169086908a908a908a906166a3565b60405180910390a16020546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b1580156112b357600080fd5b505af11580156112c7573d6000803e3d6000fd5b50506021546040516001600160a01b0390911692507f373df382b9c587826f3de13f16d67f8d99f28ee947fc0924c6ef2d6d2c7e8546915061130c90869086906166e4565b60405180910390a26028546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561138657600080fd5b505af115801561139a573d6000803e3d6000fd5b50506021546040517f1cff79cd0000000000000000000000000000000000000000000000000000000081526001600160a01b038086169450631cff79cd935087926113ec9291169087906004016166fd565b60006040518083038185885af115801561140a573d6000803e3d6000fd5b50505050506040513d6000823e601f3d908101601f191682016040526114339190810190616807565b5060208054604080517fdda79b7500000000000000000000000000000000000000000000000000000000815290516114c0938c936001600160a01b03169263dda79b7592600480830193928290030181865afa158015611497573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114bb9190616628565b611a32565b60208054604080517f5b1125910000000000000000000000000000000000000000000000000000000081529051611523938b936001600160a01b031692635b11259192600480830193928290030181865afa158015611497573d6000803e3d6000fd5b5050505050505050565b6060601a805480602002602001604051908101604052809291908181526020016000905b82821015610c20578382906000526020600020018054611570906165db565b80601f016020809104026020016040519081016040528092919081815260200182805461159c906165db565b80156115e95780601f106115be576101008083540402835291602001916115e9565b820191906000526020600020905b8154815290600101906020018083116115cc57829003601f168201915b505050505081526020019060010190611551565b6060601d805480602002602001604051908101604052809291908181526020016000905b82821015610c205760008481526020908190206040805180820182526002860290920180546001600160a01b031683526001810180548351818702810187019094528084529394919385830193928301828280156116e057602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168152602001906004019060208260030104928301926001038202915080841161168d5790505b50505050508152505081526020019060010190611621565b6060601c805480602002602001604051908101604052809291908181526020016000905b82821015610c205760008481526020908190206040805180820182526002860290920180546001600160a01b031683526001810180548351818702810187019094528084529394919385830193928301828280156117db57602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190600401906020826003010492830192600103820291508084116117885790505b5050505050815250508152602001906001019061171c565b60606019805480602002602001604051908101604052809291908181526020016000905b82821015610c20578382906000526020600020018054611836906165db565b80601f0160208091040260200160405190810160405280929190818152602001828054611862906165db565b80156118af5780601f10611884576101008083540402835291602001916118af565b820191906000526020600020905b81548152906001019060200180831161189257829003601f168201915b505050505081526020019060010190611817565b60085460009060ff16156118db575060085460ff1690565b6040517f667f9d70000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d600482018190527f6661696c65640000000000000000000000000000000000000000000000000000602483015260009163667f9d7090604401602060405180830381865afa15801561196c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611990919061683c565b1415905090565b60606015805480602002602001604051908101604052809291908181526020018280548015610add576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311610abf575050505050905090565b6000611a01616152565b611a0c848483611ac2565b9150505b92915050565b611a1e616152565b611a2b8585858486611b3d565b5050505050565b6040517f515361f60000000000000000000000000000000000000000000000000000000081526001600160a01b03808416600483015282166024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063515361f69060440160006040518083038186803b158015611aa657600080fd5b505afa158015611aba573d6000803e3d6000fd5b505050505050565b600080611acf8584611c3e565b9050611b326040518060400160405280601d81526020017f4552433139363750726f78792e736f6c3a4552433139363750726f78790000008152508286604051602001611b1d9291906166fd565b60405160208183030381529060405285611c4a565b9150505b9392505050565b6040517f06447d560000000000000000000000000000000000000000000000000000000081526001600160a01b03821660048201528190737109709ecfa91a80626ff3989d68f67f5b1dd12d9081906306447d5690602401600060405180830381600087803b158015611baf57600080fd5b505af1925050508015611bc0575060015b611bd557611bd087878787611c78565b611c35565b611be187878787611c78565b806001600160a01b03166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015611c1c57600080fd5b505af1158015611c30573d6000803e3d6000fd5b505050505b50505050505050565b6000611b368383611c91565b60c08101515160009015611c6e57611c6784848460c00151611cac565b9050611b36565b611c678484611e52565b6000611c848483611f3d565b9050611a2b858285611f49565b6000611c9d8383612313565b611b3683836020015184611c4a565b600080611cb7612323565b90506000611cc586836123f6565b90506000611cdc826060015183602001518561289c565b90506000611cec83838989612aae565b90506000611cf98261392b565b602081015181519192509060030b15611d6c57898260400151604051602001611d23929190616855565b60408051601f19818403018152908290527f08c379a0000000000000000000000000000000000000000000000000000000008252611d63916004016168d6565b60405180910390fd5b6000611daf6040518060400160405280601581526020017f4465706c6f79656420746f20616464726573733a200000000000000000000000815250836001613afa565b6040517fc6ce059d000000000000000000000000000000000000000000000000000000008152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c6ce059d90611e029084906004016168d6565b602060405180830381865afa158015611e1f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e439190616628565b9b9a5050505050505050505050565b6040517f8d1cc9250000000000000000000000000000000000000000000000000000000081526000908190737109709ecfa91a80626ff3989d68f67f5b1dd12d90638d1cc92590611ea79087906004016168d6565b600060405180830381865afa158015611ec4573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611eec9190810190616807565b90506000611f1a8285604051602001611f069291906168e9565b604051602081830303815290604052613cfa565b90506001600160a01b038116611a0c578484604051602001611d23929190616918565b6000611c9d8383613d0d565b6040517f667f9d700000000000000000000000000000000000000000000000000000000081526001600160a01b03841660048201527fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61036024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d90600090829063667f9d7090604401602060405180830381865afa158015611fe5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612009919061683c565b9050806121b057600061201b86613d19565b604080518082018252600581527f352e302e30000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201529091506120a6905b60408051808201825260008082526020918201528151808301909252845182528085019082015290613e06565b806120b2575060008451115b15612135576040517f4f1ef2860000000000000000000000000000000000000000000000000000000081526001600160a01b03871690634f1ef286906120fe90889088906004016166fd565b600060405180830381600087803b15801561211857600080fd5b505af115801561212c573d6000803e3d6000fd5b505050506121aa565b6040517f3659cfe60000000000000000000000000000000000000000000000000000000081526001600160a01b038681166004830152871690633659cfe690602401600060405180830381600087803b15801561219157600080fd5b505af11580156121a5573d6000803e3d6000fd5b505050505b50611a2b565b8060006121bc82613d19565b604080518082018252600581527f352e302e300000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015290915061221e90612079565b8061222a575060008551115b156122af576040517f9623609d0000000000000000000000000000000000000000000000000000000081526001600160a01b03831690639623609d90612278908a908a908a906004016169c3565b600060405180830381600087803b15801561229257600080fd5b505af11580156122a6573d6000803e3d6000fd5b50505050611c35565b6040517f99a88ec40000000000000000000000000000000000000000000000000000000081526001600160a01b03888116600483015287811660248301528316906399a88ec490604401600060405180830381600087803b158015611c1c57600080fd5b61231f82826000613e1a565b5050565b604080518082018252600381527f6f75740000000000000000000000000000000000000000000000000000000000602082015290517fd145736c000000000000000000000000000000000000000000000000000000008152606091737109709ecfa91a80626ff3989d68f67f5b1dd12d91829063d145736c906123aa9084906004016169f4565b600060405180830381865afa1580156123c7573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526123ef9190810190616a3b565b9250505090565b6124286040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b6000737109709ecfa91a80626ff3989d68f67f5b1dd12d90506124736040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b61247c85613f1d565b6020820152600061248c86614302565b90506000836001600160a01b031663d930a0e66040518163ffffffff1660e01b8152600401600060405180830381865afa1580156124ce573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526124f69190810190616a3b565b868385602001516040516020016125109493929190616a84565b60408051601f19818403018152908290527f60f9bb1100000000000000000000000000000000000000000000000000000000825291506000906001600160a01b038616906360f9bb11906125689085906004016168d6565b600060405180830381865afa158015612585573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526125ad9190810190616a3b565b6040517fdb4235f60000000000000000000000000000000000000000000000000000000081529091506001600160a01b0386169063db4235f6906125f5908490600401616b88565b602060405180830381865afa158015612612573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061263691906165b9565b61264b5781604051602001611d239190616bda565b6040517f49c4fac80000000000000000000000000000000000000000000000000000000081526001600160a01b038616906349c4fac890612690908490600401616c6c565b600060405180830381865afa1580156126ad573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526126d59190810190616a3b565b84526040517fdb4235f60000000000000000000000000000000000000000000000000000000081526001600160a01b0386169063db4235f69061271c908490600401616cbe565b602060405180830381865afa158015612739573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061275d91906165b9565b156127f2576040517f49c4fac80000000000000000000000000000000000000000000000000000000081526001600160a01b038616906349c4fac8906127a7908490600401616cbe565b600060405180830381865afa1580156127c4573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526127ec9190810190616a3b565b60408501525b846001600160a01b03166349c4fac88286600001516040516020016128179190616d10565b6040516020818303038152906040526040518363ffffffff1660e01b8152600401612843929190616d7c565b600060405180830381865afa158015612860573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526128889190810190616a3b565b606085015250608083015250949350505050565b60408051600480825260a0820190925260609160009190816020015b60608152602001906001900390816128b85790505090506040518060400160405280600481526020017f67726570000000000000000000000000000000000000000000000000000000008152508160008151811061291857612918616da1565b60200260200101819052506040518060400160405280600381526020017f2d726c00000000000000000000000000000000000000000000000000000000008152508160018151811061296c5761296c616da1565b6020026020010181905250846040516020016129889190616dd0565b604051602081830303815290604052816002815181106129aa576129aa616da1565b6020026020010181905250826040516020016129c69190616e3c565b604051602081830303815290604052816003815181106129e8576129e8616da1565b602002602001018190525060006129fe8261392b565b602080820151604080518082018252600581527f2e6a736f6e0000000000000000000000000000000000000000000000000000008185019081528251808401845260008082529086015282518084019093529051825292810192909252919250612a8f9060408051808201825260008082526020918201528151808301909252845182528085019082015290614585565b612aa45785604051602001611d239190616e7d565b9695505050505050565b60a0810151604080518082018252600080825260209182015281518083019092528251808352928101910152606090737109709ecfa91a80626ff3989d68f67f5b1dd12d9015612afe565b511590565b612c7257826020015115612bba576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605860248201527f54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f742060448201527f62652075736564207768656e207468652060736b6970566572696679536f757260648201527f6365436f646560206f7074696f6e206973206074727565600000000000000000608482015260a401611d63565b8260c0015115612c72576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605360248201527f54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f742060448201527f62652075736564207768656e207468652060736b69704c6963656e736554797060648201527f6560206f7074696f6e2069732060747275656000000000000000000000000000608482015260a401611d63565b6040805160ff8082526120008201909252600091816020015b6060815260200190600190039081612c8b57905050905060006040518060400160405280600381526020017f6e70780000000000000000000000000000000000000000000000000000000000815250828280612ce690616f3d565b935060ff1681518110612cfb57612cfb616da1565b60200260200101819052506040518060400160405280600d81526020017f302e302e312d616c7068612e3700000000000000000000000000000000000000815250604051602001612d4c9190616f5c565b604051602081830303815290604052828280612d6790616f3d565b935060ff1681518110612d7c57612d7c616da1565b60200260200101819052506040518060400160405280600681526020017f6465706c6f790000000000000000000000000000000000000000000000000000815250828280612dc990616f3d565b935060ff1681518110612dde57612dde616da1565b60200260200101819052506040518060400160405280600e81526020017f2d2d636f6e74726163744e616d65000000000000000000000000000000000000815250828280612e2b90616f3d565b935060ff1681518110612e4057612e40616da1565b60200260200101819052508760200151828280612e5c90616f3d565b935060ff1681518110612e7157612e71616da1565b60200260200101819052506040518060400160405280600e81526020017f2d2d636f6e747261637450617468000000000000000000000000000000000000815250828280612ebe90616f3d565b935060ff1681518110612ed357612ed3616da1565b602090810291909101015287518282612eeb81616f3d565b935060ff1681518110612f0057612f00616da1565b60200260200101819052506040518060400160405280600981526020017f2d2d636861696e49640000000000000000000000000000000000000000000000815250828280612f4d90616f3d565b935060ff1681518110612f6257612f62616da1565b6020026020010181905250612f76466145e6565b8282612f8181616f3d565b935060ff1681518110612f9657612f96616da1565b60200260200101819052506040518060400160405280600f81526020017f2d2d6275696c64496e666f46696c650000000000000000000000000000000000815250828280612fe390616f3d565b935060ff1681518110612ff857612ff8616da1565b60200260200101819052508682828061301090616f3d565b935060ff168151811061302557613025616da1565b602090810291909101015285511561314c5760408051808201909152601581527f2d2d636f6e7374727563746f7242797465636f646500000000000000000000006020820152828261307681616f3d565b935060ff168151811061308b5761308b616da1565b60209081029190910101526040517f71aad10d0000000000000000000000000000000000000000000000000000000081526001600160a01b038416906371aad10d906130db9089906004016168d6565b600060405180830381865afa1580156130f8573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526131209190810190616a3b565b828261312b81616f3d565b935060ff168151811061314057613140616da1565b60200260200101819052505b84602001511561321c5760408051808201909152601281527f2d2d766572696679536f75726365436f646500000000000000000000000000006020820152828261319581616f3d565b935060ff16815181106131aa576131aa616da1565b60200260200101819052506040518060400160405280600581526020017f66616c73650000000000000000000000000000000000000000000000000000008152508282806131f790616f3d565b935060ff168151811061320c5761320c616da1565b60200260200101819052506133e3565b613254612af98660a0015160408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6132e75760408051808201909152600d81527f2d2d6c6963656e736554797065000000000000000000000000000000000000006020820152828261329781616f3d565b935060ff16815181106132ac576132ac616da1565b60200260200101819052508460a001516040516020016132cc9190616dd0565b6040516020818303038152906040528282806131f790616f3d565b8460c0015115801561332a57506040808901518151808301835260008082526020918201528251808401909352815183529081019082015261332890511590565b155b156133e35760408051808201909152600d81527f2d2d6c6963656e736554797065000000000000000000000000000000000000006020820152828261336e81616f3d565b935060ff168151811061338357613383616da1565b602002602001018190525061339788614686565b6040516020016133a79190616dd0565b6040516020818303038152906040528282806133c290616f3d565b935060ff16815181106133d7576133d7616da1565b60200260200101819052505b6040808601518151808301835260008082526020918201528251808401909352815183529081019082015261341790511590565b6134ac5760408051808201909152600b81527f2d2d72656c6179657249640000000000000000000000000000000000000000006020820152828261345a81616f3d565b935060ff168151811061346f5761346f616da1565b6020026020010181905250846040015182828061348b90616f3d565b935060ff16815181106134a0576134a0616da1565b60200260200101819052505b6060850151156135cd5760408051808201909152600681527f2d2d73616c740000000000000000000000000000000000000000000000000000602082015282826134f581616f3d565b935060ff168151811061350a5761350a616da1565b602090810291909101015260608501516040517fb11a19e800000000000000000000000000000000000000000000000000000000815260048101919091526001600160a01b0384169063b11a19e890602401600060405180830381865afa158015613579573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526135a19190810190616a3b565b82826135ac81616f3d565b935060ff16815181106135c1576135c1616da1565b60200260200101819052505b60e085015151156136745760408051808201909152600a81527f2d2d6761734c696d6974000000000000000000000000000000000000000000006020820152828261361781616f3d565b935060ff168151811061362c5761362c616da1565b60200260200101819052506136488560e00151600001516145e6565b828261365381616f3d565b935060ff168151811061366857613668616da1565b60200260200101819052505b60e0850151602001511561371e5760408051808201909152600a81527f2d2d676173507269636500000000000000000000000000000000000000000000602082015282826136c181616f3d565b935060ff16815181106136d6576136d6616da1565b60200260200101819052506136f28560e00151602001516145e6565b82826136fd81616f3d565b935060ff168151811061371257613712616da1565b60200260200101819052505b60e085015160400151156137c85760408051808201909152600e81527f2d2d6d61784665655065724761730000000000000000000000000000000000006020820152828261376b81616f3d565b935060ff168151811061378057613780616da1565b602002602001018190525061379c8560e00151604001516145e6565b82826137a781616f3d565b935060ff16815181106137bc576137bc616da1565b60200260200101819052505b60e085015160600151156138725760408051808201909152601681527f2d2d6d61785072696f72697479466565506572476173000000000000000000006020820152828261381581616f3d565b935060ff168151811061382a5761382a616da1565b60200260200101819052506138468560e00151606001516145e6565b828261385181616f3d565b935060ff168151811061386657613866616da1565b60200260200101819052505b60008160ff1667ffffffffffffffff8111156138905761389061671f565b6040519080825280602002602001820160405280156138c357816020015b60608152602001906001900390816138ae5790505b50905060005b8260ff168160ff16101561391c57838160ff16815181106138ec576138ec616da1565b6020026020010151828260ff168151811061390957613909616da1565b60209081029190910101526001016138c9565b5093505050505b949350505050565b6139526040518060600160405280600060030b815260200160608152602001606081525090565b60408051808201825260048082527f6261736800000000000000000000000000000000000000000000000000000000602083015291517fd145736c000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d92600091849163d145736c916139d891869101616fc7565b600060405180830381865afa1580156139f5573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052613a1d9190810190616a3b565b90506000613a2b8683615175565b90506000846001600160a01b031663f45c1ce7836040518263ffffffff1660e01b8152600401613a5b91906164ab565b6000604051808303816000875af1158015613a7a573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052613aa2919081019061700e565b805190915060030b15801590613abb5750602081015151155b8015613aca5750604081015151155b15612aa45781600081518110613ae257613ae2616da1565b6020026020010151604051602001611d2391906170c4565b60606000613b2f8560408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600080825260209182015281518083019092528651825280870190820152909150613b669082905b906152ca565b15613cc3576000613be382613bdd84613bd7613ba98a60408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6040805180820182526000808252602091820152815180830190925282518252918201519181019190915290565b906152f1565b90615353565b604080518082018252600181527f0a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152909150613c479082906152ca565b15613cb157604080518082018252600181527f0a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152613cae905b82906153d8565b90505b613cba816153fe565b92505050611b36565b8215613cdc578484604051602001611d239291906172b0565b5050604080516020810190915260008152611b36565b509392505050565b6000808251602084016000f09392505050565b61231f82826001613e1a565b60408051600481526024810182526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fad3cb1cc00000000000000000000000000000000000000000000000000000000179052905160609160009182916001600160a01b03861691613d8e9190617357565b6000604051808303816000865af19150503d8060008114613dcb576040519150601f19603f3d011682016040523d82523d6000602084013e613dd0565b606091505b50915091508115613def57808060200190518101906139239190616a3b565b505060408051602081019091526000815292915050565b6000613e128383615467565b159392505050565b8160a0015115613e2957505050565b6000613e36848484615542565b90506000613e438261392b565b602081015181519192509060030b158015613edf5750604080518082018252600781527f535543434553530000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152613edf90604080518082018252600080825260209182015281518083019092528451825280850190820152613b60565b15613eec57505050505050565b60408201515115613f0c578160400151604051602001611d239190617373565b80604051602001611d2391906173d1565b60606000613f528360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600481527f2e736f6c0000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152909150613fb7905b8290614585565b1561402657604080518082018252600481527f2e736f6c0000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152611b3690614021908390615add565b6153fe565b604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152614088905b8290615b67565b60010361415557604080518082018252600181527f3a00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526140ee90613ca7565b50604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152611b3690614021905b83906153d8565b604080518082018252600581527f2e6a736f6e000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526141b490613fb0565b156142eb57604080518082018252600181527f2f0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082018190528451808601909552925184528301529061421c908390615c01565b90506000816001835161422f919061743c565b8151811061423f5761423f616da1565b602002602001015190506142e26140216142b56040518060400160405280600581526020017f2e6a736f6e00000000000000000000000000000000000000000000000000000081525060408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b60408051808201825260008082526020918201528151808301909252855182528086019082015290615add565b95945050505050565b82604051602001611d23919061744f565b50919050565b606060006143378360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600481527f2e736f6c000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015290915061439990613fb0565b156143a757611b36816153fe565b604080518082018252600181527f3a000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261440690614081565b60010361447057604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152611b36906140219061414e565b604080518082018252600581527f2e6a736f6e000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526144cf90613fb0565b156142eb57604080518082018252600181527f2f00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820181905284518086019095529251845283015290614537908390615c01565b9050600181511115614573578060028251614552919061743c565b8151811061456257614562616da1565b602002602001015192505050919050565b5082604051602001611d23919061744f565b80518251600091111561459a57506000611a10565b815183516020850151600092916145b09161752d565b6145ba919061743c565b9050826020015181036145d1576001915050611a10565b82516020840151819020912014905092915050565b606060006145f383615ca6565b600101905060008167ffffffffffffffff8111156146135761461361671f565b6040519080825280601f01601f19166020018201604052801561463d576020820181803683370190505b5090508181016020015b600019017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a850494508461464757509392505050565b604081810151815180830183526000808252602091820181905283518085018552835181529282018383015283518085018552600a81527f554e4c4943454e5345440000000000000000000000000000000000000000000081840190815285518087018752838152840192909252845180860190955251845290830152606091614712905b8290613e06565b1561475257505060408051808201909152600481527f4e6f6e65000000000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600981527f556e6c6963656e73650000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526147b19061470b565b156147f157505060408051808201909152600981527f556e6c6963656e736500000000000000000000000000000000000000000000006020820152919050565b604080518082018252600381527f4d49540000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526148509061470b565b1561489057505060408051808201909152600381527f4d495400000000000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f47504c2d322e302d6f6e6c790000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526148ef9061470b565b806149545750604080518082018252601081527f47504c2d322e302d6f722d6c6174657200000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526149549061470b565b1561499457505060408051808201909152600981527f474e552047504c763200000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f47504c2d332e302d6f6e6c790000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526149f39061470b565b80614a585750604080518082018252601081527f47504c2d332e302d6f722d6c617465720000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152614a589061470b565b15614a9857505060408051808201909152600981527f474e552047504c763300000000000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4c47504c2d322e312d6f6e6c790000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152614af79061470b565b80614b5c5750604080518082018252601181527f4c47504c2d322e312d6f722d6c6174657200000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152614b5c9061470b565b15614b9c57505060408051808201909152600c81527f474e55204c47504c76322e3100000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4c47504c2d332e302d6f6e6c790000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152614bfb9061470b565b80614c605750604080518082018252601181527f4c47504c2d332e302d6f722d6c6174657200000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152614c609061470b565b15614ca057505060408051808201909152600a81527f474e55204c47504c7633000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f4253442d322d436c61757365000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152614cff9061470b565b15614d3f57505060408051808201909152600c81527f4253442d322d436c6175736500000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f4253442d332d436c61757365000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152614d9e9061470b565b15614dde57505060408051808201909152600c81527f4253442d332d436c6175736500000000000000000000000000000000000000006020820152919050565b604080518082018252600781527f4d504c2d322e300000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152614e3d9061470b565b15614e7d57505060408051808201909152600781527f4d504c2d322e30000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600781527f4f534c2d332e300000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152614edc9061470b565b15614f1c57505060408051808201909152600781527f4f534c2d332e30000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600a81527f4170616368652d322e300000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152614f7b9061470b565b15614fbb57505060408051808201909152600a81527f4170616368652d322e30000000000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4147504c2d332e302d6f6e6c79000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261501a9061470b565b8061507f5750604080518082018252601181527f4147504c2d332e302d6f722d6c617465720000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261507f9061470b565b156150bf57505060408051808201909152600a81527f474e55204147504c7633000000000000000000000000000000000000000000006020820152919050565b604080518082018252600881527f4255534c2d312e310000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261511e9061470b565b1561515e57505060408051808201909152600781527f42534c20312e31000000000000000000000000000000000000000000000000006020820152919050565b60408084015184519151611d239290602001617540565b60608060005b8451811015615200578185828151811061519757615197616da1565b60200260200101516040516020016151b09291906168e9565b6040516020818303038152906040529150600185516151cf919061743c565b81146151f857816040516020016151e691906176a9565b60405160208183030381529060405291505b60010161517b565b5060408051600380825260808201909252600091816020015b6060815260200190600190039081615219579050509050838160008151811061524457615244616da1565b60200260200101819052506040518060400160405280600281526020017f2d630000000000000000000000000000000000000000000000000000000000008152508160018151811061529857615298616da1565b602002602001018190525081816002815181106152b7576152b7616da1565b6020908102919091010152949350505050565b60208083015183518351928401516000936152e89291849190615d88565b14159392505050565b604080518082019091526000808252602082015260006153238460000151856020015185600001518660200151615e99565b9050836020015181615335919061743c565b8451859061534490839061743c565b90525060208401525090919050565b6040805180820190915260008082526020820152815183511015615378575081611a10565b602080830151908401516001911461539f5750815160208481015190840151829020919020145b80156153d0578251845185906153b690839061743c565b90525082516020850180516153cc90839061752d565b9052505b509192915050565b60408051808201909152600080825260208201526153f7838383615fb9565b5092915050565b60606000826000015167ffffffffffffffff81111561541f5761541f61671f565b6040519080825280601f01601f191660200182016040528015615449576020820181803683370190505b50905060006020820190506153f78185602001518660000151616064565b815181516000919081111561547a575081515b6020808501519084015160005b8381101561553357825182518082146155035760001960208710156154e2576001846154b489602061743c565b6154be919061752d565b6154c99060086176ea565b6154d49060026177e8565b6154de919061743c565b1990505b8181168382168181039114615500579750611a109650505050505050565b50505b61550e60208661752d565b945061551b60208561752d565b9350505060208161552c919061752d565b9050615487565b5084518651612aa491906177f4565b6060600061554e612323565b6040805160ff808252612000820190925291925060009190816020015b606081526020019060019003908161556b57905050905060006040518060400160405280600381526020017f6e707800000000000000000000000000000000000000000000000000000000008152508282806155c690616f3d565b935060ff16815181106155db576155db616da1565b60200260200101819052506040518060400160405280600781526020017f5e312e33322e330000000000000000000000000000000000000000000000000081525060405160200161562c9190617814565b60405160208183030381529060405282828061564790616f3d565b935060ff168151811061565c5761565c616da1565b60200260200101819052506040518060400160405280600881526020017f76616c69646174650000000000000000000000000000000000000000000000008152508282806156a990616f3d565b935060ff16815181106156be576156be616da1565b6020026020010181905250826040516020016156da9190616e3c565b6040516020818303038152906040528282806156f590616f3d565b935060ff168151811061570a5761570a616da1565b60200260200101819052506040518060400160405280600a81526020017f2d2d636f6e74726163740000000000000000000000000000000000000000000081525082828061575790616f3d565b935060ff168151811061576c5761576c616da1565b602002602001018190525061578187846160de565b828261578c81616f3d565b935060ff16815181106157a1576157a1616da1565b60209081029190910101528551511561584d5760408051808201909152600b81527f2d2d7265666572656e6365000000000000000000000000000000000000000000602082015282826157f381616f3d565b935060ff168151811061580857615808616da1565b60200260200101819052506158218660000151846160de565b828261582c81616f3d565b935060ff168151811061584157615841616da1565b60200260200101819052505b8560800151156158bb5760408051808201909152601881527f2d2d756e73616665536b697053746f72616765436865636b00000000000000006020820152828261589681616f3d565b935060ff16815181106158ab576158ab616da1565b6020026020010181905250615921565b84156159215760408051808201909152601281527f2d2d726571756972655265666572656e636500000000000000000000000000006020820152828261590081616f3d565b935060ff168151811061591557615915616da1565b60200260200101819052505b604086015151156159bd5760408051808201909152600d81527f2d2d756e73616665416c6c6f77000000000000000000000000000000000000006020820152828261596b81616f3d565b935060ff168151811061598057615980616da1565b6020026020010181905250856040015182828061599c90616f3d565b935060ff16815181106159b1576159b1616da1565b60200260200101819052505b856060015115615a275760408051808201909152601481527f2d2d756e73616665416c6c6f7752656e616d657300000000000000000000000060208201528282615a0681616f3d565b935060ff1681518110615a1b57615a1b616da1565b60200260200101819052505b60008160ff1667ffffffffffffffff811115615a4557615a4561671f565b604051908082528060200260200182016040528015615a7857816020015b6060815260200190600190039081615a635790505b50905060005b8260ff168160ff161015615ad157838160ff1681518110615aa157615aa1616da1565b6020026020010151828260ff1681518110615abe57615abe616da1565b6020908102919091010152600101615a7e565b50979650505050505050565b6040805180820190915260008082526020820152815183511015615b02575081611a10565b81518351602085015160009291615b189161752d565b615b22919061743c565b60208401519091506001908214615b43575082516020840151819020908220145b8015615b5e57835185518690615b5a90839061743c565b9052505b50929392505050565b6000808260000151615b8b8560000151866020015186600001518760200151615e99565b615b95919061752d565b90505b83516020850151615ba9919061752d565b81116153f75781615bb981617859565b9250508260000151615bf0856020015183615bd4919061743c565b8651615be0919061743c565b8386600001518760200151615e99565b615bfa919061752d565b9050615b98565b60606000615c0f8484615b67565b615c1a90600161752d565b67ffffffffffffffff811115615c3257615c3261671f565b604051908082528060200260200182016040528015615c6557816020015b6060815260200190600190039081615c505790505b50905060005b8151811015613cf257615c8161402186866153d8565b828281518110615c9357615c93616da1565b6020908102919091010152600101615c6b565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310615cef577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310615d1b576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc100008310615d3957662386f26fc10000830492506010015b6305f5e1008310615d51576305f5e100830492506008015b6127108310615d6557612710830492506004015b60648310615d77576064830492506002015b600a8310611a105760010192915050565b600080858411615e8f5760208411615e3b5760008415615dd3576001615daf86602061743c565b615dba9060086176ea565b615dc59060026177e8565b615dcf919061743c565b1990505b8351811685615de2898961752d565b615dec919061743c565b805190935082165b818114615e2657878411615e0e5787945050505050613923565b83615e1881617873565b945050828451169050615df4565b615e30878561752d565b945050505050613923565b838320615e48858861743c565b615e52908761752d565b91505b858210615e8d57848220808203615e7a57615e70868461752d565b9350505050613923565b615e8560018461743c565b925050615e55565b505b5092949350505050565b60008381868511615fa45760208511615f535760008515615ee5576001615ec187602061743c565b615ecc9060086176ea565b615ed79060026177e8565b615ee1919061743c565b1990505b84518116600087615ef68b8b61752d565b615f00919061743c565b855190915083165b828114615f4557818610615f2d57615f208b8b61752d565b9650505050505050613923565b85615f3781617859565b965050838651169050615f08565b859650505050505050613923565b508383206000905b615f65868961743c565b8211615fa257858320808203615f815783945050505050613923565b615f8c60018561752d565b9350508180615f9a90617859565b925050615f5b565b505b615fae878761752d565b979650505050505050565b60408051808201909152600080825260208201526000615feb8560000151866020015186600001518760200151615e99565b602080870180519186019190915251909150616007908261743c565b83528451602086015161601a919061752d565b8103616029576000855261605b565b83518351616037919061752d565b8551869061604690839061743c565b9052508351616055908261752d565b60208601525b50909392505050565b6020811061609c578151835261607b60208461752d565b925061608860208361752d565b915061609560208261743c565b9050616064565b60001981156160cb5760016160b283602061743c565b6160be906101006177e8565b6160c8919061743c565b90505b9151835183169219169190911790915250565b606060006160ec84846123f6565b80516020808301516040519394506161069390910161788a565b60405160208183030381529060405291505092915050565b610c9f806178e383390190565b6116fe8061858283390190565b61155a80619c8083390190565b610d5e8061b1da83390190565b6040518060e0016040528060608152602001606081526020016060815260200160001515815260200160001515815260200160001515815260200161619561619a565b905290565b604051806101000160405280600015158152602001600015158152602001606081526020016000801916815260200160608152602001606081526020016000151581526020016161956040518060800160405280600081526020016000815260200160008152602001600081525090565b602080825282518282018190526000918401906040840190835b8181101561624c5783516001600160a01b0316835260209384019390920191600101616225565b509095945050505050565b60005b8381101561627257818101518382015260200161625a565b50506000910152565b60008151808452616293816020860160208601616257565b601f01601f19169290920160200192915050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b828110156163a3577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452815180516001600160a01b03168652602090810151604082880181905281519088018190529101906060600582901b88018101919088019060005b81811015616389577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa08a850301835261637384865161627b565b6020958601959094509290920191600101616339565b5091975050506020948501949290920191506001016162cf565b50929695505050505050565b600081518084526020840193506020830160005b828110156164035781517fffffffff00000000000000000000000000000000000000000000000000000000168652602095860195909101906001016163c3565b5093949350505050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b828110156163a3577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08786030184528151805160408752616479604088018261627b565b905060208201519150868103602088015261649481836163af565b965050506020938401939190910190600101616435565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b828110156163a3577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc087860301845261650d85835161627b565b945060209384019391909101906001016164d3565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b828110156163a3577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc087860301845281516001600160a01b03815116865260208101519050604060208701526165a360408701826163af565b955050602093840193919091019060010161654a565b6000602082840312156165cb57600080fd5b81518015158114611b3657600080fd5b600181811c908216806165ef57607f821691505b6020821081036142fc577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006020828403121561663a57600080fd5b81516001600160a01b0381168114611b3657600080fd5b606081526000616664606083018661627b565b602083019490945250901515604090910152919050565b6001600160a01b03841681528260208201526060604082015260006142e2606083018461627b565b6001600160a01b038616815284602082015260a0604082015260006166cb60a083018661627b565b6060830194909452509015156080909101529392505050565b828152604060208201526000613923604083018461627b565b6001600160a01b0383168152604060208201526000613923604083018461627b565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040516060810167ffffffffffffffff811182821017156167715761677161671f565b60405290565b60008067ffffffffffffffff8411156167925761679261671f565b50604051601f19601f85018116603f0116810181811067ffffffffffffffff821117156167c1576167c161671f565b6040528381529050808284018510156167d957600080fd5b613cf2846020830185616257565b600082601f8301126167f857600080fd5b611b3683835160208501616777565b60006020828403121561681957600080fd5b815167ffffffffffffffff81111561683057600080fd5b611a0c848285016167e7565b60006020828403121561684e57600080fd5b5051919050565b7f4661696c656420746f206465706c6f7920636f6e74726163742000000000000081526000835161688d81601a850160208801616257565b7f3a20000000000000000000000000000000000000000000000000000000000000601a9184019182015283516168ca81601c840160208801616257565b01601c01949350505050565b602081526000611b36602083018461627b565b600083516168fb818460208801616257565b83519083019061690f818360208801616257565b01949350505050565b7f4661696c656420746f206465706c6f7920636f6e74726163742000000000000081526000835161695081601a850160208801616257565b7f207573696e6720636f6e7374727563746f722064617461202200000000000000601a91840191820152835161698d816033840160208801616257565b7f220000000000000000000000000000000000000000000000000000000000000060339290910191820152603401949350505050565b6001600160a01b03841681526001600160a01b03831660208201526060604082015260006142e2606083018461627b565b60408152600b60408201527f464f554e4452595f4f55540000000000000000000000000000000000000000006060820152608060208201526000611b36608083018461627b565b600060208284031215616a4d57600080fd5b815167ffffffffffffffff811115616a6457600080fd5b8201601f81018413616a7557600080fd5b611a0c84825160208401616777565b60008551616a96818460208a01616257565b7f2f000000000000000000000000000000000000000000000000000000000000009083019081528551616ad0816001840160208a01616257565b7f2f00000000000000000000000000000000000000000000000000000000000000600192909101918201528451616b0e816002840160208901616257565b6001818301019150507f2f0000000000000000000000000000000000000000000000000000000000000060018201528351616b50816002840160208801616257565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600292909101918201526007019695505050505050565b604081526000616b9b604083018461627b565b8281036020840152600481527f2e6173740000000000000000000000000000000000000000000000000000000060208201526040810191505092915050565b7f436f756c64206e6f742066696e642041535420696e2061727469666163742000815260008251616c1281601f850160208701616257565b7f2e205365742060617374203d20747275656020696e20666f756e6472792e746f601f9390910192830152507f6d6c000000000000000000000000000000000000000000000000000000000000603f820152604101919050565b604081526000616c7f604083018461627b565b8281036020840152601181527f2e6173742e6162736f6c7574655061746800000000000000000000000000000060208201526040810191505092915050565b604081526000616cd1604083018461627b565b8281036020840152600c81527f2e6173742e6c6963656e7365000000000000000000000000000000000000000060208201526040810191505092915050565b7f2e6d657461646174612e736f75726365732e5b27000000000000000000000000815260008251616d48816014850160208701616257565b7f275d2e6b656363616b32353600000000000000000000000000000000000000006014939091019283015250602001919050565b604081526000616d8f604083018561627b565b8281036020840152611b32818561627b565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f2200000000000000000000000000000000000000000000000000000000000000815260008251616e08816001850160208701616257565b7f22000000000000000000000000000000000000000000000000000000000000006001939091019283015250600201919050565b60008251616e4e818460208701616257565b7f2f6275696c642d696e666f000000000000000000000000000000000000000000920191825250600b01919050565b7f436f756c64206e6f742066696e64206275696c642d696e666f2066696c65207781527f697468206d61746368696e6720736f7572636520636f6465206861736820666f60208201527f7220636f6e747261637420000000000000000000000000000000000000000000604082015260008251616f0181604b850160208701616257565b91909101604b0192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600060ff821660ff8103616f5357616f53616f0e565b60010192915050565b7f406f70656e7a657070656c696e2f646566656e6465722d6465706c6f792d636c81527f69656e742d636c69400000000000000000000000000000000000000000000000602082015260008251616fba816029850160208701616257565b9190910160290192915050565b60408152601660408201527f4f50454e5a455050454c494e5f424153485f50415448000000000000000000006060820152608060208201526000611b36608083018461627b565b60006020828403121561702057600080fd5b815167ffffffffffffffff81111561703757600080fd5b82016060818503121561704957600080fd5b61705161674e565b81518060030b811461706257600080fd5b8152602082015167ffffffffffffffff81111561707e57600080fd5b61708a868285016167e7565b602083015250604082015167ffffffffffffffff8111156170aa57600080fd5b6170b6868285016167e7565b604083015250949350505050565b7f4661696c656420746f2072756e206261736820636f6d6d616e6420776974682081527f2200000000000000000000000000000000000000000000000000000000000000602082015260008251617122816021850160208701616257565b7f222e20496620796f7520617265207573696e672057696e646f77732c2073657460219390910192830152507f20746865204f50454e5a455050454c494e5f424153485f5041544820656e766960418201527f726f6e6d656e74207661726961626c6520746f207468652066756c6c7920717560618201527f616c69666965642070617468206f66207468652062617368206578656375746160818201527f626c652e20466f72206578616d706c652c20696620796f75206172652075736960a18201527f6e672047697420666f722057696e646f77732c206164642074686520666f6c6c60c18201527f6f77696e67206c696e6520696e20746865202e656e762066696c65206f66207960e18201527f6f75722070726f6a65637420287573696e6720666f727761726420736c6173686101018201527f6573293a0a4f50454e5a455050454c494e5f424153485f504154483d22433a2f6101218201527f50726f6772616d2046696c65732f4769742f62696e2f6261736822000000000061014182015261015c01919050565b7f4661696c656420746f2066696e64206c696e652077697468207072656669782081527f270000000000000000000000000000000000000000000000000000000000000060208201526000835161730e816021850160208801616257565b7f2720696e206f75747075743a2000000000000000000000000000000000000000602191840191820152835161734b81602e840160208801616257565b01602e01949350505050565b60008251617369818460208701616257565b9190910192915050565b7f4661696c656420746f2072756e2075706772616465207361666574792076616c81527f69646174696f6e3a200000000000000000000000000000000000000000000000602082015260008251616fba816029850160208701616257565b7f55706772616465207361666574792076616c69646174696f6e206661696c656481527f3a0a00000000000000000000000000000000000000000000000000000000000060208201526000825161742f816022850160208701616257565b9190910160220192915050565b81810381811115611a1057611a10616f0e565b7f436f6e7472616374206e616d652000000000000000000000000000000000000081526000825161748781600e850160208701616257565b7f206d75737420626520696e2074686520666f726d6174204d79436f6e74726163600e9390910192830152507f742e736f6c3a4d79436f6e7472616374206f72204d79436f6e74726163742e73602e8201527f6f6c206f72206f75742f4d79436f6e74726163742e736f6c2f4d79436f6e7472604e8201527f6163742e6a736f6e000000000000000000000000000000000000000000000000606e820152607601919050565b80820180821115611a1057611a10616f0e565b7f53504458206c6963656e7365206964656e746966696572200000000000000000815260008351617578816018850160208801616257565b7f20696e200000000000000000000000000000000000000000000000000000000060189184019182015283516175b581601c840160208801616257565b7f20646f6573206e6f74206c6f6f6b206c696b65206120737570706f7274656420601c92909101918201527f6c6963656e736520666f7220626c6f636b206578706c6f726572207665726966603c8201527f69636174696f6e2e205573652074686520606c6963656e73655479706560206f605c8201527f7074696f6e20746f20737065636966792061206c6963656e736520747970652c607c8201527f206f7220736574207468652060736b69704c6963656e73655479706560206f70609c8201527f74696f6e20746f2060747275656020746f20736b69702e00000000000000000060bc82015260d301949350505050565b600082516176bb818460208701616257565b7f2000000000000000000000000000000000000000000000000000000000000000920191825250600101919050565b8082028115828204841417611a1057611a10616f0e565b6001815b600184111561773c5780850481111561772057617720616f0e565b600184161561772e57908102905b60019390931c928002617705565b935093915050565b60008261775357506001611a10565b8161776057506000611a10565b816001811461777657600281146177805761779c565b6001915050611a10565b60ff84111561779157617791616f0e565b50506001821b611a10565b5060208310610133831016604e8410600b84101617156177bf575081810a611a10565b6177cc6000198484617701565b80600019048211156177e0576177e0616f0e565b029392505050565b6000611b368383617744565b81810360008312801583831316838312821617156153f7576153f7616f0e565b7f406f70656e7a657070656c696e2f75706772616465732d636f7265400000000081526000825161784c81601c850160208701616257565b91909101601c0192915050565b6000600019820361786c5761786c616f0e565b5060010190565b60008161788257617882616f0e565b506000190190565b6000835161789c818460208801616257565b7f3a0000000000000000000000000000000000000000000000000000000000000090830190815283516178d6816001840160208801616257565b0160010194935050505056fe608060405234801561001057600080fd5b50604051610c9f380380610c9f83398101604081905261002f9161010d565b8181600361003d83826101ff565b50600461004a82826101ff565b50505050506102bd565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261007b57600080fd5b81516001600160401b0381111561009457610094610054565b604051601f8201601f19908116603f011681016001600160401b03811182821017156100c2576100c2610054565b6040528181528382016020018510156100da57600080fd5b60005b828110156100f9576020818601810151838301820152016100dd565b506000918101602001919091529392505050565b6000806040838503121561012057600080fd5b82516001600160401b0381111561013657600080fd5b6101428582860161006a565b602085015190935090506001600160401b0381111561016057600080fd5b61016c8582860161006a565b9150509250929050565b600181811c9082168061018a57607f821691505b6020821081036101aa57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156101fa57806000526020600020601f840160051c810160208510156101d75750805b601f840160051c820191505b818110156101f757600081556001016101e3565b50505b505050565b81516001600160401b0381111561021857610218610054565b61022c816102268454610176565b846101b0565b6020601f82116001811461026057600083156102485750848201515b600019600385901b1c1916600184901b1784556101f7565b600084815260208120601f198516915b828110156102905787850151825560209485019460019092019101610270565b50848210156102ae5786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b6109d3806102cc6000396000f3fe608060405234801561001057600080fd5b50600436106100be5760003560e01c806340c10f191161007657806395d89b411161005b57806395d89b4114610183578063a9059cbb1461018b578063dd62ed3e1461019e57600080fd5b806340c10f191461013857806370a082311461014d57600080fd5b806318160ddd116100a757806318160ddd1461010457806323b872dd14610116578063313ce5671461012957600080fd5b806306fdde03146100c3578063095ea7b3146100e1575b600080fd5b6100cb6101e4565b6040516100d891906107bf565b60405180910390f35b6100f46100ef366004610854565b610276565b60405190151581526020016100d8565b6002545b6040519081526020016100d8565b6100f461012436600461087e565b610290565b604051601281526020016100d8565b61014b610146366004610854565b6102b4565b005b61010861015b3660046108bb565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6100cb6102c2565b6100f4610199366004610854565b6102d1565b6101086101ac3660046108dd565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6060600380546101f390610910565b80601f016020809104026020016040519081016040528092919081815260200182805461021f90610910565b801561026c5780601f106102415761010080835404028352916020019161026c565b820191906000526020600020905b81548152906001019060200180831161024f57829003601f168201915b5050505050905090565b6000336102848185856102df565b60019150505b92915050565b60003361029e8582856102f1565b6102a98585856103c5565b506001949350505050565b6102be8282610470565b5050565b6060600480546101f390610910565b6000336102848185856103c5565b6102ec83838360016104cc565b505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146103bf57818110156103b0576040517ffb8f41b200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416600482015260248101829052604481018390526064015b60405180910390fd5b6103bf848484840360006104cc565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8316610415576040517f96c6fd1e000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff8216610465576040517fec442f05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b6102ec838383610614565b73ffffffffffffffffffffffffffffffffffffffff82166104c0576040517fec442f05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b6102be60008383610614565b73ffffffffffffffffffffffffffffffffffffffff841661051c576040517fe602df05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff831661056c576040517f94280d62000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260016020908152604080832093871683529290522082905580156103bf578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161060691815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff831661064c5780600260008282546106419190610963565b909155506106fe9050565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260208190526040902054818110156106d2576040517fe450d38c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8516600482015260248101829052604481018390526064016103a7565b73ffffffffffffffffffffffffffffffffffffffff841660009081526020819052604090209082900390555b73ffffffffffffffffffffffffffffffffffffffff821661072757600280548290039055610753565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090208054820190555b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516107b291815260200190565b60405180910390a3505050565b602081526000825180602084015260005b818110156107ed57602081860181015160408684010152016107d0565b5060006040828501015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011684010191505092915050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461084f57600080fd5b919050565b6000806040838503121561086757600080fd5b6108708361082b565b946020939093013593505050565b60008060006060848603121561089357600080fd5b61089c8461082b565b92506108aa6020850161082b565b929592945050506040919091013590565b6000602082840312156108cd57600080fd5b6108d68261082b565b9392505050565b600080604083850312156108f057600080fd5b6108f98361082b565b91506109076020840161082b565b90509250929050565b600181811c9082168061092457607f821691505b60208210810361095d577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b8082018082111561028a577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea26469706673582212207e804ca539d49155d2b6bc19268ce22f9f857027c75247d69fb0d56a089c93d464736f6c634300081a003360a060405234801561001057600080fd5b506040516116fe3803806116fe83398101604081905261002f916101e5565b60016000556002805460ff191690556001600160a01b038316158061005b57506001600160a01b038216155b8061006d57506001600160a01b038116155b1561008b5760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b0383166080526100a3600082610134565b506100ce7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a82610134565b506100f97f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e483610134565b506101126000805160206116de83398151915282610134565b5061012b6000805160206116de83398151915283610134565b50505050610228565b60008281526001602090815260408083206001600160a01b038516845290915281205460ff166101bf5760008381526001602081815260408084206001600160a01b0387168086529252808420805460ff19169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45060016101c3565b5060005b92915050565b80516001600160a01b03811681146101e057600080fd5b919050565b6000806000606084860312156101fa57600080fd5b610203846101c9565b9250610211602085016101c9565b915061021f604085016101c9565b90509250925092565b60805161147f61025f6000396000818161019e0152818161050001528181610562015281816108f70152610959015261147f6000f3fe608060405234801561001057600080fd5b506004361061016c5760003560e01c806385f438c1116100cd578063c8a0236211610081578063d936547e11610066578063d936547e14610355578063d9caed1214610378578063e63ab1e91461038b57600080fd5b8063c8a023621461032f578063d547741f1461034257600080fd5b80639a590427116100b25780639a590427146103015780639b19251a14610314578063a217fddf1461032757600080fd5b806385f438c11461029457806391d14854146102bb57600080fd5b806336568abe11610124578063570618e111610109578063570618e11461025a5780635c975abb146102815780638456cb591461028c57600080fd5b806336568abe1461023f5780633f4ba83a1461025257600080fd5b806321fc65f21161015557806321fc65f2146101e5578063248a9ca3146101fa5780632f2ff15d1461022c57600080fd5b806301ffc9a714610171578063116191b614610199575b600080fd5b61018461017f36600461118a565b6103b2565b60405190151581526020015b60405180910390f35b6101c07f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610190565b6101f86101f33660046111f5565b61044b565b005b61021e610208366004611292565b6000908152600160208190526040909120015490565b604051908152602001610190565b6101f861023a3660046112ab565b61064c565b6101f861024d3660046112ab565b610678565b6101f86106d6565b61021e7f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a81565b60025460ff16610184565b6101f861070b565b61021e7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b6101846102c93660046112ab565b600091825260016020908152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b6101f861030f3660046112d7565b61073d565b6101f86103223660046112d7565b6107be565b61021e600081565b6101f861033d3660046111f5565b610842565b6101f86103503660046112ab565b610a29565b6101846103633660046112d7565b60036020526000908152604090205460ff1681565b6101f86103863660046112f2565b610a4f565b61021e7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061044557507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b610453610b7b565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461047d81610bbe565b610485610bc8565b73ffffffffffffffffffffffffffffffffffffffff861660009081526003602052604090205460ff166104e4576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61052573ffffffffffffffffffffffffffffffffffffffff87167f000000000000000000000000000000000000000000000000000000000000000086610c07565b6040517f5131ab5900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690635131ab599061059f9089908990899089908990600401611378565b600060405180830381600087803b1580156105b957600080fd5b505af11580156105cd573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167f85b5be9cf454e05e0bddf49315178102227c312078eefa3c00294fb4d912ae4e868686604051610632939291906113d5565b60405180910390a3506106456001600055565b5050505050565b6000828152600160208190526040909120015461066881610bbe565b6106728383610c94565b50505050565b73ffffffffffffffffffffffffffffffffffffffff811633146106c7576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6106d18282610d41565b505050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61070081610bbe565b610708610de2565b50565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61073581610bbe565b610708610e41565b7f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a61076781610bbe565b73ffffffffffffffffffffffffffffffffffffffff8216600081815260036020526040808220805460ff19169055517f51085ddf9ebdded84b76e829eb58c4078e4b5bdf97d9a94723f336039da467919190a25050565b7f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a6107e881610bbe565b73ffffffffffffffffffffffffffffffffffffffff8216600081815260036020526040808220805460ff19166001179055517faab7954e9d246b167ef88aeddad35209ca2489d95a8aeb59e288d9b19fae5a549190a25050565b61084a610b7b565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461087481610bbe565b61087c610bc8565b73ffffffffffffffffffffffffffffffffffffffff861660009081526003602052604090205460ff166108db576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61091c73ffffffffffffffffffffffffffffffffffffffff87167f000000000000000000000000000000000000000000000000000000000000000086610c07565b6040517fb8969bd400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063b8969bd4906109969089908990899089908990600401611378565b600060405180830381600087803b1580156109b057600080fd5b505af11580156109c4573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fb9d4efa96044e5f5e03e696fa9ae2ff66911cc27e8a637c3627c75bc5b2241c8868686604051610632939291906113d5565b60008281526001602081905260409091200154610a4581610bbe565b6106728383610d41565b610a57610b7b565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e4610a8181610bbe565b610a89610bc8565b73ffffffffffffffffffffffffffffffffffffffff841660009081526003602052604090205460ff16610ae8576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610b0973ffffffffffffffffffffffffffffffffffffffff85168484610c07565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f9b1bfa7fa9ee420a16e124f794c35ac9f90472acc99140eb2f6447c714cad8eb84604051610b6891815260200190565b60405180910390a3506106d16001600055565b600260005403610bb7576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b6107088133610e7e565b60025460ff1615610c05576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6040805173ffffffffffffffffffffffffffffffffffffffff8416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb000000000000000000000000000000000000000000000000000000001790526106d1908490610f0f565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff16610d3957600083815260016020818152604080842073ffffffffffffffffffffffffffffffffffffffff87168086529252808420805460ff19169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a4506001610445565b506000610445565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff1615610d3957600083815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff86168085529252808320805460ff1916905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a4506001610445565b610dea610fa5565b6002805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b610e49610bc8565b6002805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258610e173390565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16610f0b576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82166004820152602481018390526044015b60405180910390fd5b5050565b6000610f3173ffffffffffffffffffffffffffffffffffffffff841683610fe1565b90508051600014158015610f56575080806020019051810190610f5491906113f8565b155b156106d1576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84166004820152602401610f02565b60025460ff16610c05576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6060610fef83836000610ff6565b9392505050565b606081471015611034576040517fcd786059000000000000000000000000000000000000000000000000000000008152306004820152602401610f02565b6000808573ffffffffffffffffffffffffffffffffffffffff16848660405161105d919061141a565b60006040518083038185875af1925050503d806000811461109a576040519150601f19603f3d011682016040523d82523d6000602084013e61109f565b606091505b50915091506110af8683836110b9565b9695505050505050565b6060826110ce576110c982611148565b610fef565b81511580156110f2575073ffffffffffffffffffffffffffffffffffffffff84163b155b15611141576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85166004820152602401610f02565b5080610fef565b8051156111585780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006020828403121561119c57600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610fef57600080fd5b803573ffffffffffffffffffffffffffffffffffffffff811681146111f057600080fd5b919050565b60008060008060006080868803121561120d57600080fd5b611216866111cc565b9450611224602087016111cc565b935060408601359250606086013567ffffffffffffffff81111561124757600080fd5b8601601f8101881361125857600080fd5b803567ffffffffffffffff81111561126f57600080fd5b88602082840101111561128157600080fd5b959894975092955050506020019190565b6000602082840312156112a457600080fd5b5035919050565b600080604083850312156112be57600080fd5b823591506112ce602084016111cc565b90509250929050565b6000602082840312156112e957600080fd5b610fef826111cc565b60008060006060848603121561130757600080fd5b611310846111cc565b925061131e602085016111cc565b929592945050506040919091013590565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff8616815273ffffffffffffffffffffffffffffffffffffffff851660208201528360408201526080606082015260006113ca60808301848661132f565b979650505050505050565b8381526040602082015260006113ef60408301848661132f565b95945050505050565b60006020828403121561140a57600080fd5b81518015158114610fef57600080fd5b6000825160005b8181101561143b5760208186018101518583015201611421565b50600092019182525091905056fea2646970667358221220dc54ce548a1f0bf8ba5e86cc53c6d822e55eee543451395733c659359bac8dd164736f6c634300081a00338619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a60c060405260001960035534801561001657600080fd5b5060405161155a38038061155a83398101604081905261003591610220565b60016000819055805460ff19169055838383836001600160a01b038416158061006557506001600160a01b038316155b8061007757506001600160a01b038216155b8061008957506001600160a01b038116155b156100a75760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b03808516608052831660a0526100c5600082610154565b506100f07f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e483610154565b5061011b7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb83610154565b506101467f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a82610154565b505050505050505050610274565b60008281526002602090815260408083206001600160a01b038516845290915281205460ff166101fa5760008381526002602090815260408083206001600160a01b03861684529091529020805460ff191660011790556101b23390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45060016101fe565b5060005b92915050565b80516001600160a01b038116811461021b57600080fd5b919050565b6000806000806080858703121561023657600080fd5b61023f85610204565b935061024d60208601610204565b925061025b60408601610204565b915061026960608601610204565b905092959194509250565b60805160a0516112826102d86000396000818161021d01528181610531015281816108240152818161097b01528181610ad00152610bf20152600081816101d1015281816104a1015281816105040152818161079401526107f701526112826000f3fe608060405234801561001057600080fd5b50600436106101775760003560e01c80635e3e9fef116100d857806391d148541161008c578063d547741f11610066578063d547741f14610386578063d5abeb0114610399578063e63ab1e9146103a257600080fd5b806391d1485414610311578063a217fddf14610357578063a783c7891461035f57600080fd5b8063743e0c9b116100bd578063743e0c9b146102cf5780638456cb59146102e257806385f438c1146102ea57600080fd5b80635e3e9fef146102a95780636f8b44b0146102bc57600080fd5b8063248a9ca31161012f57806336568abe1161011457806336568abe146102835780633f4ba83a146102965780635c975abb1461029e57600080fd5b8063248a9ca31461023f5780632f2ff15d1461027057600080fd5b8063106e629011610160578063106e6290146101b9578063116191b6146101cc57806321e093b11461021857600080fd5b806301ffc9a71461017c57806302d5c899146101a4575b600080fd5b61018f61018a366004610fb4565b6103c9565b60405190151581526020015b60405180910390f35b6101b76101b2366004611026565b610462565b005b6101b76101c73660046110b8565b6105f7565b6101f37f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161019b565b6101f37f000000000000000000000000000000000000000000000000000000000000000081565b61026261024d3660046110eb565b60009081526002602052604090206001015490565b60405190815260200161019b565b6101b761027e366004611104565b61069c565b6101b7610291366004611104565b6106c7565b6101b7610720565b60015460ff1661018f565b6101b76102b7366004611026565b610755565b6101b76102ca3660046110eb565b6108d0565b6101b76102dd3660046110eb565b61093e565b6101b76109e8565b6102627f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b61018f61031f366004611104565b600091825260026020908152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b610262600081565b6102627f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb81565b6101b7610394366004611104565b610a1a565b61026260035481565b6102627f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061045c57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b61046a610a3f565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461049481610a82565b61049c610a8c565b6104c77f00000000000000000000000000000000000000000000000000000000000000008684610acb565b6040517fb8969bd400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063b8969bd490610561907f0000000000000000000000000000000000000000000000000000000000000000908a908a908a908a90600401611179565b600060405180830381600087803b15801561057b57600080fd5b505af115801561058f573d6000803e3d6000fd5b505050508573ffffffffffffffffffffffffffffffffffffffff167fba96f26bdda53eb8c8ba39045dfb4ff39753fbc7a6edcf250a88e75e78d102fe8686866040516105dd939291906111d6565b60405180910390a2506105f06001600055565b5050505050565b6105ff610a3f565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461062981610a82565b610631610a8c565b61063c848484610acb565b8373ffffffffffffffffffffffffffffffffffffffff167f884edad9ce6fa2440d8a54cc123490eb96d2768479d49ff9c7366125a94243648460405161068491815260200190565b60405180910390a2506106976001600055565b505050565b6000828152600260205260409020600101546106b781610a82565b6106c18383610c53565b50505050565b73ffffffffffffffffffffffffffffffffffffffff81163314610716576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6106978282610d53565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61074a81610a82565b610752610e12565b50565b61075d610a3f565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461078781610a82565b61078f610a8c565b6107ba7f00000000000000000000000000000000000000000000000000000000000000008684610acb565b6040517f5131ab5900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690635131ab5990610854907f0000000000000000000000000000000000000000000000000000000000000000908a908a908a908a90600401611179565b600060405180830381600087803b15801561086e57600080fd5b505af1158015610882573d6000803e3d6000fd5b505050508573ffffffffffffffffffffffffffffffffffffffff167f7772f56296d3a5202974a45c61c9188d844ab4d6eeb18c851e4b8d5384ca6ced8686866040516105dd939291906111d6565b7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb6108fa81610a82565b610902610a8c565b60038290556040518281527f7810bd47de260c3e9ee10061cf438099dd12256c79485f12f94dbccc981e806c9060200160405180910390a15050565b610946610a8c565b6040517f79cc6790000000000000000000000000000000000000000000000000000000008152336004820152602481018290527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16906379cc679090604401600060405180830381600087803b1580156109d457600080fd5b505af11580156105f0573d6000803e3d6000fd5b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610a1281610a82565b610752610e8f565b600082815260026020526040902060010154610a3581610a82565b6106c18383610d53565b600260005403610a7b576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b6107528133610ee8565b60015460ff1615610ac9576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6003547f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b39573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b5d91906111f9565b610b679084611212565b1115610b9f576040517fc30436e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f1e458bee00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff848116600483015260248201849052604482018390527f00000000000000000000000000000000000000000000000000000000000000001690631e458bee90606401600060405180830381600087803b158015610c3657600080fd5b505af1158015610c4a573d6000803e3d6000fd5b50505050505050565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff16610d4b57600083815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff86168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055610ce93390565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a450600161045c565b50600061045c565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff1615610d4b57600083815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8616808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a450600161045c565b610e1a610f78565b600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b610e97610a8c565b600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016811790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25833610e65565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16610f74576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff821660048201526024810183905260440160405180910390fd5b5050565b60015460ff16610ac9576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060208284031215610fc657600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610ff657600080fd5b9392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461102157600080fd5b919050565b60008060008060006080868803121561103e57600080fd5b61104786610ffd565b945060208601359350604086013567ffffffffffffffff81111561106a57600080fd5b8601601f8101881361107b57600080fd5b803567ffffffffffffffff81111561109257600080fd5b8860208284010111156110a457600080fd5b959894975060200195606001359392505050565b6000806000606084860312156110cd57600080fd5b6110d684610ffd565b95602085013595506040909401359392505050565b6000602082840312156110fd57600080fd5b5035919050565b6000806040838503121561111757600080fd5b8235915061112760208401610ffd565b90509250929050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff8616815273ffffffffffffffffffffffffffffffffffffffff851660208201528360408201526080606082015260006111cb608083018486611130565b979650505050505050565b8381526040602082015260006111f0604083018486611130565b95945050505050565b60006020828403121561120b57600080fd5b5051919050565b8082018082111561045c577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea2646970667358221220de5fa55e0ca79ea2f08903481d01ea00bbbf346b9cfba44e12a2dd6f3a6f2e8a64736f6c634300081a00336080604052348015600f57600080fd5b506001600055610d3a806100246000396000f3fe6080604052600436106100635760003560e01c8063c513169111610040578063c5131691146100c1578063e04d4f97146100e1578063f05b6abf146100f457005b8063357fc5a21461006c5780636ed701691461008c5780638fcaa0b5146100a157005b3661006a57005b005b34801561007857600080fd5b5061006a6100873660046106c0565b610114565b34801561009857600080fd5b5061006a6101aa565b3480156100ad57600080fd5b5061006a6100bc3660046106fc565b6101df565b3480156100cd57600080fd5b5061006a6100dc3660046106c0565b61021e565b61006a6100ef366004610895565b6102f9565b34801561010057600080fd5b5061006a61010f366004610981565b61033d565b61011c610372565b61013e73ffffffffffffffffffffffffffffffffffffffff83163383866103b5565b604080513381526020810185905273ffffffffffffffffffffffffffffffffffffffff848116828401528316606082015290517f2b58128f24a9f59127cc5b5430d70542b22220f2d9adaa86e442b816ab98af609181900360800190a16101a56001600055565b505050565b6040513381527fbcaadb46b82a48af60b608f58959ae6b8310d1b0a0d094c2e9ec3208ed39f2a09060200160405180910390a1565b7f0d3f65f00e631663aa85c96330b5c7a83bb29af3630c0063776f985edc3037aa33838360405161021293929190610a6b565b60405180910390a15050565b610226610372565b6000610233600285610ad5565b90508060000361026f576040517f1f2a200500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61029173ffffffffffffffffffffffffffffffffffffffff84163384846103b5565b604080513381526020810183905273ffffffffffffffffffffffffffffffffffffffff858116828401528416606082015290517f2b58128f24a9f59127cc5b5430d70542b22220f2d9adaa86e442b816ab98af609181900360800190a1506101a56001600055565b7f1f1ff1f5fb41346850b2f5c04e6c767e2f1c8a525c5c0c5cdb60cdf3ca5f62fa3334858585604051610330959493929190610b7e565b60405180910390a1505050565b7f74a53cd528a921fca7dbdee62f86819051d3cc98f214951f4238e8843f20b146338484846040516103309493929190610c08565b6002600054036103ae576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b6040805173ffffffffffffffffffffffffffffffffffffffff85811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd0000000000000000000000000000000000000000000000000000000017905261044a908590610450565b50505050565b600061047273ffffffffffffffffffffffffffffffffffffffff8416836104eb565b905080516000141580156104975750808060200190518101906104959190610ccb565b155b156101a5576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff841660048201526024015b60405180910390fd5b60606104f983836000610500565b9392505050565b60608147101561053e576040517fcd7860590000000000000000000000000000000000000000000000000000000081523060048201526024016104e2565b6000808573ffffffffffffffffffffffffffffffffffffffff1684866040516105679190610ce8565b60006040518083038185875af1925050503d80600081146105a4576040519150601f19603f3d011682016040523d82523d6000602084013e6105a9565b606091505b50915091506105b98683836105c3565b9695505050505050565b6060826105d8576105d382610652565b6104f9565b81511580156105fc575073ffffffffffffffffffffffffffffffffffffffff84163b155b1561064b576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff851660048201526024016104e2565b50806104f9565b8051156106625780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50565b803573ffffffffffffffffffffffffffffffffffffffff811681146106bb57600080fd5b919050565b6000806000606084860312156106d557600080fd5b833592506106e560208501610697565b91506106f360408501610697565b90509250925092565b6000806020838503121561070f57600080fd5b823567ffffffffffffffff81111561072657600080fd5b8301601f8101851361073757600080fd5b803567ffffffffffffffff81111561074e57600080fd5b85602082840101111561076057600080fd5b6020919091019590945092505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156107e6576107e6610770565b604052919050565b600082601f8301126107ff57600080fd5b813567ffffffffffffffff81111561081957610819610770565b61084a60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8401160161079f565b81815284602083860101111561085f57600080fd5b816020850160208301376000918101602001919091529392505050565b801515811461069457600080fd5b80356106bb8161087c565b6000806000606084860312156108aa57600080fd5b833567ffffffffffffffff8111156108c157600080fd5b6108cd868287016107ee565b9350506020840135915060408401356108e58161087c565b809150509250925092565b600067ffffffffffffffff82111561090a5761090a610770565b5060051b60200190565b600082601f83011261092557600080fd5b8135610938610933826108f0565b61079f565b8082825260208201915060208360051b86010192508583111561095a57600080fd5b602085015b8381101561097757803583526020928301920161095f565b5095945050505050565b60008060006060848603121561099657600080fd5b833567ffffffffffffffff8111156109ad57600080fd5b8401601f810186136109be57600080fd5b80356109cc610933826108f0565b8082825260208201915060208360051b8501019250888311156109ee57600080fd5b602084015b83811015610a3057803567ffffffffffffffff811115610a1257600080fd5b610a218b6020838901016107ee565b845250602092830192016109f3565b509550505050602084013567ffffffffffffffff811115610a5057600080fd5b610a5c86828701610914565b9250506106f36040850161088a565b73ffffffffffffffffffffffffffffffffffffffff8416815260406020820152816040820152818360608301376000818301606090810191909152601f9092017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016010192915050565b600082610b0b577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60005b83811015610b2b578181015183820152602001610b13565b50506000910152565b60008151808452610b4c816020860160208601610b10565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b73ffffffffffffffffffffffffffffffffffffffff8616815284602082015260a060408201526000610bb360a0830186610b34565b6060830194909452509015156080909101529392505050565b600081518084526020840193506020830160005b82811015610bfe578151865260209586019590910190600101610be0565b5093949350505050565b60006080820173ffffffffffffffffffffffffffffffffffffffff871683526080602084015280865180835260a08501915060a08160051b86010192506020880160005b82811015610c9b577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60878603018452610c86858351610b34565b94506020938401939190910190600101610c4c565b505050508281036040840152610cb18186610bcc565b915050610cc2606083018415159052565b95945050505050565b600060208284031215610cdd57600080fd5b81516104f98161087c565b60008251610cfa818460208701610b10565b919091019291505056fea2646970667358221220556072e1abafc3c4063b8cce832228b4f309b93726aaa6a6dfab20cb880c6d1864736f6c634300081a0033a264697066735822122082a62ac186a112136baadcc082d5c077c1bedadf0fffeec23479f5a44e23243164736f6c634300081a0033", + Bin: "0x6080604052600c8054600160ff199182168117909255601f80549091169091179055348015602c57600080fd5b5061bf6d8061003c6000396000f3fe608060405234801561001057600080fd5b50600436106100ea5760003560e01c806385226c811161008c578063b5508aa911610066578063b5508aa91461018b578063ba414fa614610193578063e20c9f71146101ab578063fa7626d4146101b357600080fd5b806385226c8114610159578063916a17c61461016e578063b0464fdc1461018357600080fd5b80633e5e3c23116100c85780633e5e3c231461012c5780633f7286f41461013457806366d9a9a01461013c5780637a380ebf1461015157600080fd5b80630a9254e4146100ef5780631ed7831c146100f95780632ade388014610117575b600080fd5b6100f76101c0565b005b610101610a85565b60405161010e919061620b565b60405180910390f35b61011f610ae7565b60405161010e91906162a7565b610101610c29565b610101610c89565b610144610ce9565b60405161010e919061640d565b6100f7610e6b565b61016161152d565b60405161010e91906164ab565b6101766115fd565b60405161010e9190616522565b6101766116f8565b6101616117f3565b61019b6118c3565b604051901515815260200161010e565b610101611997565b601f5461019b9060ff1681565b602680547fffffffffffffffffffffffff00000000000000000000000000000000000000009081163017909155602780548216611234179055602880549091166156781790556040516102129061611e565b60408082526004908201527f746573740000000000000000000000000000000000000000000000000000000060608201526080602082018190526003908201527f54544b000000000000000000000000000000000000000000000000000000000060a082015260c001604051809103906000f080158015610297573d6000803e3d6000fd5b50602480547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03929092169190911790556040516102dc9061611e565b604080825260049082018190527f7a6574610000000000000000000000000000000000000000000000000000000060608301526080602083018190528201527f5a4554410000000000000000000000000000000000000000000000000000000060a082015260c001604051809103906000f080158015610360573d6000803e3d6000fd5b50602580547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03928316908117909155604080518082018252600e81527f4761746577617945564d2e736f6c00000000000000000000000000000000000060208201526028546026549251908516602482015260448101939093529216606482015261044f919060840160408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fc0c53b8b000000000000000000000000000000000000000000000000000000001790526119f7565b601f80547fffffffffffffffffffffff0000000000000000000000000000000000000000ff166101006001600160a01b0393841681029190911791829055602080549190920483167fffffffffffffffffffffffff000000000000000000000000000000000000000090911681179091556028546026546040519293918216929116906104db9061612b565b6001600160a01b03938416815291831660208301529091166040820152606001604051809103906000f080158015610517573d6000803e3d6000fd5b50602280547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03928316179055602054602554602854602654604051938516949283169391831692169061057290616138565b6001600160a01b039485168152928416602084015290831660408301529091166060820152608001604051809103906000f0801580156105b6573d6000803e3d6000fd5b50602380547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03929092169190911790556040516105fb90616145565b604051809103906000f080158015610617573d6000803e3d6000fd5b50602180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039283161790556028546040517fc88a5e6d00000000000000000000000000000000000000000000000000000000815291166004820152670de0b6b3a76400006024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c88a5e6d90604401600060405180830381600087803b1580156106c357600080fd5b505af11580156106d7573d6000803e3d6000fd5b50506026546040517f06447d560000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506306447d569150602401600060405180830381600087803b15801561074d57600080fd5b505af1158015610761573d6000803e3d6000fd5b50506020546022546040517fae7a3a6f0000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201529116925063ae7a3a6f9150602401600060405180830381600087803b1580156107c757600080fd5b505af11580156107db573d6000803e3d6000fd5b50506020546023546040517f10188aef0000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152911692506310188aef9150602401600060405180830381600087803b15801561084157600080fd5b505af1158015610855573d6000803e3d6000fd5b505050507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b03166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156108b757600080fd5b505af11580156108cb573d6000803e3d6000fd5b5050602480546026546040517f40c10f190000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620f4240938101939093521692506340c10f199150604401600060405180830381600087803b15801561093c57600080fd5b505af1158015610950573d6000803e3d6000fd5b5050602480546022546040517fa9059cbb0000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201526207a1209381019390935216925063a9059cbb91506044016020604051808303816000875af11580156109c6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109ea91906165b9565b506028546040517fc88a5e6d0000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152670de0b6b3a76400006024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c88a5e6d90604401600060405180830381600087803b158015610a6b57600080fd5b505af1158015610a7f573d6000803e3d6000fd5b50505050565b60606016805480602002602001604051908101604052809291908181526020018280548015610add57602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610abf575b5050505050905090565b6060601e805480602002602001604051908101604052809291908181526020016000905b82821015610c2057600084815260208082206040805180820182526002870290920180546001600160a01b03168352600181018054835181870281018701909452808452939591948681019491929084015b82821015610c09578382906000526020600020018054610b7c906165db565b80601f0160208091040260200160405190810160405280929190818152602001828054610ba8906165db565b8015610bf55780601f10610bca57610100808354040283529160200191610bf5565b820191906000526020600020905b815481529060010190602001808311610bd857829003601f168201915b505050505081526020019060010190610b5d565b505050508152505081526020019060010190610b0b565b50505050905090565b60606018805480602002602001604051908101604052809291908181526020018280548015610add576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311610abf575050505050905090565b60606017805480602002602001604051908101604052809291908181526020018280548015610add576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311610abf575050505050905090565b6060601b805480602002602001604051908101604052809291908181526020016000905b82821015610c205783829060005260206000209060020201604051806040016040529081600082018054610d40906165db565b80601f0160208091040260200160405190810160405280929190818152602001828054610d6c906165db565b8015610db95780601f10610d8e57610100808354040283529160200191610db9565b820191906000526020600020905b815481529060010190602001808311610d9c57829003601f168201915b5050505050815260200160018201805480602002602001604051908101604052809291908181526020018280548015610e5357602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019060040190602082600301049283019260010382029150808411610e005790505b50505050508152505081526020019060010190610d0d565b60208054604080517fdda79b7500000000000000000000000000000000000000000000000000000000815290516000936001600160a01b039093169263dda79b7592600480820193918290030181865afa158015610ecd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ef19190616628565b60208054604080517f5b11259100000000000000000000000000000000000000000000000000000000815290519394506000936001600160a01b0390921692635b112591926004808401938290030181865afa158015610f55573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f799190616628565b604080518082018252600f81527f48656c6c6f2c20466f756e647279210000000000000000000000000000000000602080830191909152601f5483518085018552601981527f4761746577617945564d55706772616465546573742e736f6c00000000000000818401528451928301909452600082526026549495509193602a93600193670de0b6b3a764000093611023936001600160a01b036101009093048316939216611a16565b600084848460405160240161103a93929190616651565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe04d4f9700000000000000000000000000000000000000000000000000000000179052601f5460215491517ff30c7ba30000000000000000000000000000000000000000000000000000000081529293506001600160a01b03610100909104811692737109709ecfa91a80626ff3989d68f67f5b1dd12d9263f30c7ba392611100929116908790879060040161667b565b600060405180830381600087803b15801561111a57600080fd5b505af115801561112e573d6000803e3d6000fd5b50506021546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b1580156111c057600080fd5b505af11580156111d4573d6000803e3d6000fd5b50506020546040517f1f1ff1f5fb41346850b2f5c04e6c767e2f1c8a525c5c0c5cdb60cdf3ca5f62fa935061121d92506001600160a01b039091169086908a908a908a906166a3565b60405180910390a16020546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b1580156112b357600080fd5b505af11580156112c7573d6000803e3d6000fd5b50506021546040516001600160a01b0390911692507f373df382b9c587826f3de13f16d67f8d99f28ee947fc0924c6ef2d6d2c7e8546915061130c90869086906166e4565b60405180910390a26028546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561138657600080fd5b505af115801561139a573d6000803e3d6000fd5b50506021546040517f1cff79cd0000000000000000000000000000000000000000000000000000000081526001600160a01b038086169450631cff79cd935087926113ec9291169087906004016166fd565b60006040518083038185885af115801561140a573d6000803e3d6000fd5b50505050506040513d6000823e601f3d908101601f191682016040526114339190810190616807565b5060208054604080517fdda79b7500000000000000000000000000000000000000000000000000000000815290516114c0938c936001600160a01b03169263dda79b7592600480830193928290030181865afa158015611497573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114bb9190616628565b611a32565b60208054604080517f5b1125910000000000000000000000000000000000000000000000000000000081529051611523938b936001600160a01b031692635b11259192600480830193928290030181865afa158015611497573d6000803e3d6000fd5b5050505050505050565b6060601a805480602002602001604051908101604052809291908181526020016000905b82821015610c20578382906000526020600020018054611570906165db565b80601f016020809104026020016040519081016040528092919081815260200182805461159c906165db565b80156115e95780601f106115be576101008083540402835291602001916115e9565b820191906000526020600020905b8154815290600101906020018083116115cc57829003601f168201915b505050505081526020019060010190611551565b6060601d805480602002602001604051908101604052809291908181526020016000905b82821015610c205760008481526020908190206040805180820182526002860290920180546001600160a01b031683526001810180548351818702810187019094528084529394919385830193928301828280156116e057602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168152602001906004019060208260030104928301926001038202915080841161168d5790505b50505050508152505081526020019060010190611621565b6060601c805480602002602001604051908101604052809291908181526020016000905b82821015610c205760008481526020908190206040805180820182526002860290920180546001600160a01b031683526001810180548351818702810187019094528084529394919385830193928301828280156117db57602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190600401906020826003010492830192600103820291508084116117885790505b5050505050815250508152602001906001019061171c565b60606019805480602002602001604051908101604052809291908181526020016000905b82821015610c20578382906000526020600020018054611836906165db565b80601f0160208091040260200160405190810160405280929190818152602001828054611862906165db565b80156118af5780601f10611884576101008083540402835291602001916118af565b820191906000526020600020905b81548152906001019060200180831161189257829003601f168201915b505050505081526020019060010190611817565b60085460009060ff16156118db575060085460ff1690565b6040517f667f9d70000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d600482018190527f6661696c65640000000000000000000000000000000000000000000000000000602483015260009163667f9d7090604401602060405180830381865afa15801561196c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611990919061683c565b1415905090565b60606015805480602002602001604051908101604052809291908181526020018280548015610add576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311610abf575050505050905090565b6000611a01616152565b611a0c848483611ac2565b9150505b92915050565b611a1e616152565b611a2b8585858486611b3d565b5050505050565b6040517f515361f60000000000000000000000000000000000000000000000000000000081526001600160a01b03808416600483015282166024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063515361f69060440160006040518083038186803b158015611aa657600080fd5b505afa158015611aba573d6000803e3d6000fd5b505050505050565b600080611acf8584611c3e565b9050611b326040518060400160405280601d81526020017f4552433139363750726f78792e736f6c3a4552433139363750726f78790000008152508286604051602001611b1d9291906166fd565b60405160208183030381529060405285611c4a565b9150505b9392505050565b6040517f06447d560000000000000000000000000000000000000000000000000000000081526001600160a01b03821660048201528190737109709ecfa91a80626ff3989d68f67f5b1dd12d9081906306447d5690602401600060405180830381600087803b158015611baf57600080fd5b505af1925050508015611bc0575060015b611bd557611bd087878787611c78565b611c35565b611be187878787611c78565b806001600160a01b03166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015611c1c57600080fd5b505af1158015611c30573d6000803e3d6000fd5b505050505b50505050505050565b6000611b368383611c91565b60c08101515160009015611c6e57611c6784848460c00151611cac565b9050611b36565b611c678484611e52565b6000611c848483611f3d565b9050611a2b858285611f49565b6000611c9d8383612313565b611b3683836020015184611c4a565b600080611cb7612323565b90506000611cc586836123f6565b90506000611cdc826060015183602001518561289c565b90506000611cec83838989612aae565b90506000611cf98261392b565b602081015181519192509060030b15611d6c57898260400151604051602001611d23929190616855565b60408051601f19818403018152908290527f08c379a0000000000000000000000000000000000000000000000000000000008252611d63916004016168d6565b60405180910390fd5b6000611daf6040518060400160405280601581526020017f4465706c6f79656420746f20616464726573733a200000000000000000000000815250836001613afa565b6040517fc6ce059d000000000000000000000000000000000000000000000000000000008152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c6ce059d90611e029084906004016168d6565b602060405180830381865afa158015611e1f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e439190616628565b9b9a5050505050505050505050565b6040517f8d1cc9250000000000000000000000000000000000000000000000000000000081526000908190737109709ecfa91a80626ff3989d68f67f5b1dd12d90638d1cc92590611ea79087906004016168d6565b600060405180830381865afa158015611ec4573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611eec9190810190616807565b90506000611f1a8285604051602001611f069291906168e9565b604051602081830303815290604052613cfa565b90506001600160a01b038116611a0c578484604051602001611d23929190616918565b6000611c9d8383613d0d565b6040517f667f9d700000000000000000000000000000000000000000000000000000000081526001600160a01b03841660048201527fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61036024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d90600090829063667f9d7090604401602060405180830381865afa158015611fe5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612009919061683c565b9050806121b057600061201b86613d19565b604080518082018252600581527f352e302e30000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201529091506120a6905b60408051808201825260008082526020918201528151808301909252845182528085019082015290613e06565b806120b2575060008451115b15612135576040517f4f1ef2860000000000000000000000000000000000000000000000000000000081526001600160a01b03871690634f1ef286906120fe90889088906004016166fd565b600060405180830381600087803b15801561211857600080fd5b505af115801561212c573d6000803e3d6000fd5b505050506121aa565b6040517f3659cfe60000000000000000000000000000000000000000000000000000000081526001600160a01b038681166004830152871690633659cfe690602401600060405180830381600087803b15801561219157600080fd5b505af11580156121a5573d6000803e3d6000fd5b505050505b50611a2b565b8060006121bc82613d19565b604080518082018252600581527f352e302e300000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015290915061221e90612079565b8061222a575060008551115b156122af576040517f9623609d0000000000000000000000000000000000000000000000000000000081526001600160a01b03831690639623609d90612278908a908a908a906004016169c3565b600060405180830381600087803b15801561229257600080fd5b505af11580156122a6573d6000803e3d6000fd5b50505050611c35565b6040517f99a88ec40000000000000000000000000000000000000000000000000000000081526001600160a01b03888116600483015287811660248301528316906399a88ec490604401600060405180830381600087803b158015611c1c57600080fd5b61231f82826000613e1a565b5050565b604080518082018252600381527f6f75740000000000000000000000000000000000000000000000000000000000602082015290517fd145736c000000000000000000000000000000000000000000000000000000008152606091737109709ecfa91a80626ff3989d68f67f5b1dd12d91829063d145736c906123aa9084906004016169f4565b600060405180830381865afa1580156123c7573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526123ef9190810190616a3b565b9250505090565b6124286040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b6000737109709ecfa91a80626ff3989d68f67f5b1dd12d90506124736040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b61247c85613f1d565b6020820152600061248c86614302565b90506000836001600160a01b031663d930a0e66040518163ffffffff1660e01b8152600401600060405180830381865afa1580156124ce573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526124f69190810190616a3b565b868385602001516040516020016125109493929190616a84565b60408051601f19818403018152908290527f60f9bb1100000000000000000000000000000000000000000000000000000000825291506000906001600160a01b038616906360f9bb11906125689085906004016168d6565b600060405180830381865afa158015612585573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526125ad9190810190616a3b565b6040517fdb4235f60000000000000000000000000000000000000000000000000000000081529091506001600160a01b0386169063db4235f6906125f5908490600401616b88565b602060405180830381865afa158015612612573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061263691906165b9565b61264b5781604051602001611d239190616bda565b6040517f49c4fac80000000000000000000000000000000000000000000000000000000081526001600160a01b038616906349c4fac890612690908490600401616c6c565b600060405180830381865afa1580156126ad573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526126d59190810190616a3b565b84526040517fdb4235f60000000000000000000000000000000000000000000000000000000081526001600160a01b0386169063db4235f69061271c908490600401616cbe565b602060405180830381865afa158015612739573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061275d91906165b9565b156127f2576040517f49c4fac80000000000000000000000000000000000000000000000000000000081526001600160a01b038616906349c4fac8906127a7908490600401616cbe565b600060405180830381865afa1580156127c4573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526127ec9190810190616a3b565b60408501525b846001600160a01b03166349c4fac88286600001516040516020016128179190616d10565b6040516020818303038152906040526040518363ffffffff1660e01b8152600401612843929190616d7c565b600060405180830381865afa158015612860573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526128889190810190616a3b565b606085015250608083015250949350505050565b60408051600480825260a0820190925260609160009190816020015b60608152602001906001900390816128b85790505090506040518060400160405280600481526020017f67726570000000000000000000000000000000000000000000000000000000008152508160008151811061291857612918616da1565b60200260200101819052506040518060400160405280600381526020017f2d726c00000000000000000000000000000000000000000000000000000000008152508160018151811061296c5761296c616da1565b6020026020010181905250846040516020016129889190616dd0565b604051602081830303815290604052816002815181106129aa576129aa616da1565b6020026020010181905250826040516020016129c69190616e3c565b604051602081830303815290604052816003815181106129e8576129e8616da1565b602002602001018190525060006129fe8261392b565b602080820151604080518082018252600581527f2e6a736f6e0000000000000000000000000000000000000000000000000000008185019081528251808401845260008082529086015282518084019093529051825292810192909252919250612a8f9060408051808201825260008082526020918201528151808301909252845182528085019082015290614585565b612aa45785604051602001611d239190616e7d565b9695505050505050565b60a0810151604080518082018252600080825260209182015281518083019092528251808352928101910152606090737109709ecfa91a80626ff3989d68f67f5b1dd12d9015612afe565b511590565b612c7257826020015115612bba576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605860248201527f54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f742060448201527f62652075736564207768656e207468652060736b6970566572696679536f757260648201527f6365436f646560206f7074696f6e206973206074727565600000000000000000608482015260a401611d63565b8260c0015115612c72576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605360248201527f54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f742060448201527f62652075736564207768656e207468652060736b69704c6963656e736554797060648201527f6560206f7074696f6e2069732060747275656000000000000000000000000000608482015260a401611d63565b6040805160ff8082526120008201909252600091816020015b6060815260200190600190039081612c8b57905050905060006040518060400160405280600381526020017f6e70780000000000000000000000000000000000000000000000000000000000815250828280612ce690616f3d565b935060ff1681518110612cfb57612cfb616da1565b60200260200101819052506040518060400160405280600d81526020017f302e302e312d616c7068612e3700000000000000000000000000000000000000815250604051602001612d4c9190616f5c565b604051602081830303815290604052828280612d6790616f3d565b935060ff1681518110612d7c57612d7c616da1565b60200260200101819052506040518060400160405280600681526020017f6465706c6f790000000000000000000000000000000000000000000000000000815250828280612dc990616f3d565b935060ff1681518110612dde57612dde616da1565b60200260200101819052506040518060400160405280600e81526020017f2d2d636f6e74726163744e616d65000000000000000000000000000000000000815250828280612e2b90616f3d565b935060ff1681518110612e4057612e40616da1565b60200260200101819052508760200151828280612e5c90616f3d565b935060ff1681518110612e7157612e71616da1565b60200260200101819052506040518060400160405280600e81526020017f2d2d636f6e747261637450617468000000000000000000000000000000000000815250828280612ebe90616f3d565b935060ff1681518110612ed357612ed3616da1565b602090810291909101015287518282612eeb81616f3d565b935060ff1681518110612f0057612f00616da1565b60200260200101819052506040518060400160405280600981526020017f2d2d636861696e49640000000000000000000000000000000000000000000000815250828280612f4d90616f3d565b935060ff1681518110612f6257612f62616da1565b6020026020010181905250612f76466145e6565b8282612f8181616f3d565b935060ff1681518110612f9657612f96616da1565b60200260200101819052506040518060400160405280600f81526020017f2d2d6275696c64496e666f46696c650000000000000000000000000000000000815250828280612fe390616f3d565b935060ff1681518110612ff857612ff8616da1565b60200260200101819052508682828061301090616f3d565b935060ff168151811061302557613025616da1565b602090810291909101015285511561314c5760408051808201909152601581527f2d2d636f6e7374727563746f7242797465636f646500000000000000000000006020820152828261307681616f3d565b935060ff168151811061308b5761308b616da1565b60209081029190910101526040517f71aad10d0000000000000000000000000000000000000000000000000000000081526001600160a01b038416906371aad10d906130db9089906004016168d6565b600060405180830381865afa1580156130f8573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526131209190810190616a3b565b828261312b81616f3d565b935060ff168151811061314057613140616da1565b60200260200101819052505b84602001511561321c5760408051808201909152601281527f2d2d766572696679536f75726365436f646500000000000000000000000000006020820152828261319581616f3d565b935060ff16815181106131aa576131aa616da1565b60200260200101819052506040518060400160405280600581526020017f66616c73650000000000000000000000000000000000000000000000000000008152508282806131f790616f3d565b935060ff168151811061320c5761320c616da1565b60200260200101819052506133e3565b613254612af98660a0015160408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6132e75760408051808201909152600d81527f2d2d6c6963656e736554797065000000000000000000000000000000000000006020820152828261329781616f3d565b935060ff16815181106132ac576132ac616da1565b60200260200101819052508460a001516040516020016132cc9190616dd0565b6040516020818303038152906040528282806131f790616f3d565b8460c0015115801561332a57506040808901518151808301835260008082526020918201528251808401909352815183529081019082015261332890511590565b155b156133e35760408051808201909152600d81527f2d2d6c6963656e736554797065000000000000000000000000000000000000006020820152828261336e81616f3d565b935060ff168151811061338357613383616da1565b602002602001018190525061339788614686565b6040516020016133a79190616dd0565b6040516020818303038152906040528282806133c290616f3d565b935060ff16815181106133d7576133d7616da1565b60200260200101819052505b6040808601518151808301835260008082526020918201528251808401909352815183529081019082015261341790511590565b6134ac5760408051808201909152600b81527f2d2d72656c6179657249640000000000000000000000000000000000000000006020820152828261345a81616f3d565b935060ff168151811061346f5761346f616da1565b6020026020010181905250846040015182828061348b90616f3d565b935060ff16815181106134a0576134a0616da1565b60200260200101819052505b6060850151156135cd5760408051808201909152600681527f2d2d73616c740000000000000000000000000000000000000000000000000000602082015282826134f581616f3d565b935060ff168151811061350a5761350a616da1565b602090810291909101015260608501516040517fb11a19e800000000000000000000000000000000000000000000000000000000815260048101919091526001600160a01b0384169063b11a19e890602401600060405180830381865afa158015613579573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526135a19190810190616a3b565b82826135ac81616f3d565b935060ff16815181106135c1576135c1616da1565b60200260200101819052505b60e085015151156136745760408051808201909152600a81527f2d2d6761734c696d6974000000000000000000000000000000000000000000006020820152828261361781616f3d565b935060ff168151811061362c5761362c616da1565b60200260200101819052506136488560e00151600001516145e6565b828261365381616f3d565b935060ff168151811061366857613668616da1565b60200260200101819052505b60e0850151602001511561371e5760408051808201909152600a81527f2d2d676173507269636500000000000000000000000000000000000000000000602082015282826136c181616f3d565b935060ff16815181106136d6576136d6616da1565b60200260200101819052506136f28560e00151602001516145e6565b82826136fd81616f3d565b935060ff168151811061371257613712616da1565b60200260200101819052505b60e085015160400151156137c85760408051808201909152600e81527f2d2d6d61784665655065724761730000000000000000000000000000000000006020820152828261376b81616f3d565b935060ff168151811061378057613780616da1565b602002602001018190525061379c8560e00151604001516145e6565b82826137a781616f3d565b935060ff16815181106137bc576137bc616da1565b60200260200101819052505b60e085015160600151156138725760408051808201909152601681527f2d2d6d61785072696f72697479466565506572476173000000000000000000006020820152828261381581616f3d565b935060ff168151811061382a5761382a616da1565b60200260200101819052506138468560e00151606001516145e6565b828261385181616f3d565b935060ff168151811061386657613866616da1565b60200260200101819052505b60008160ff1667ffffffffffffffff8111156138905761389061671f565b6040519080825280602002602001820160405280156138c357816020015b60608152602001906001900390816138ae5790505b50905060005b8260ff168160ff16101561391c57838160ff16815181106138ec576138ec616da1565b6020026020010151828260ff168151811061390957613909616da1565b60209081029190910101526001016138c9565b5093505050505b949350505050565b6139526040518060600160405280600060030b815260200160608152602001606081525090565b60408051808201825260048082527f6261736800000000000000000000000000000000000000000000000000000000602083015291517fd145736c000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d92600091849163d145736c916139d891869101616fc7565b600060405180830381865afa1580156139f5573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052613a1d9190810190616a3b565b90506000613a2b8683615175565b90506000846001600160a01b031663f45c1ce7836040518263ffffffff1660e01b8152600401613a5b91906164ab565b6000604051808303816000875af1158015613a7a573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052613aa2919081019061700e565b805190915060030b15801590613abb5750602081015151155b8015613aca5750604081015151155b15612aa45781600081518110613ae257613ae2616da1565b6020026020010151604051602001611d2391906170c4565b60606000613b2f8560408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600080825260209182015281518083019092528651825280870190820152909150613b669082905b906152ca565b15613cc3576000613be382613bdd84613bd7613ba98a60408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6040805180820182526000808252602091820152815180830190925282518252918201519181019190915290565b906152f1565b90615353565b604080518082018252600181527f0a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152909150613c479082906152ca565b15613cb157604080518082018252600181527f0a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152613cae905b82906153d8565b90505b613cba816153fe565b92505050611b36565b8215613cdc578484604051602001611d239291906172b0565b5050604080516020810190915260008152611b36565b509392505050565b6000808251602084016000f09392505050565b61231f82826001613e1a565b60408051600481526024810182526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fad3cb1cc00000000000000000000000000000000000000000000000000000000179052905160609160009182916001600160a01b03861691613d8e9190617357565b6000604051808303816000865af19150503d8060008114613dcb576040519150601f19603f3d011682016040523d82523d6000602084013e613dd0565b606091505b50915091508115613def57808060200190518101906139239190616a3b565b505060408051602081019091526000815292915050565b6000613e128383615467565b159392505050565b8160a0015115613e2957505050565b6000613e36848484615542565b90506000613e438261392b565b602081015181519192509060030b158015613edf5750604080518082018252600781527f535543434553530000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152613edf90604080518082018252600080825260209182015281518083019092528451825280850190820152613b60565b15613eec57505050505050565b60408201515115613f0c578160400151604051602001611d239190617373565b80604051602001611d2391906173d1565b60606000613f528360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600481527f2e736f6c0000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152909150613fb7905b8290614585565b1561402657604080518082018252600481527f2e736f6c0000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152611b3690614021908390615add565b6153fe565b604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152614088905b8290615b67565b60010361415557604080518082018252600181527f3a00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526140ee90613ca7565b50604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152611b3690614021905b83906153d8565b604080518082018252600581527f2e6a736f6e000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526141b490613fb0565b156142eb57604080518082018252600181527f2f0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082018190528451808601909552925184528301529061421c908390615c01565b90506000816001835161422f919061743c565b8151811061423f5761423f616da1565b602002602001015190506142e26140216142b56040518060400160405280600581526020017f2e6a736f6e00000000000000000000000000000000000000000000000000000081525060408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b60408051808201825260008082526020918201528151808301909252855182528086019082015290615add565b95945050505050565b82604051602001611d23919061744f565b50919050565b606060006143378360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600481527f2e736f6c000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015290915061439990613fb0565b156143a757611b36816153fe565b604080518082018252600181527f3a000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261440690614081565b60010361447057604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152611b36906140219061414e565b604080518082018252600581527f2e6a736f6e000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526144cf90613fb0565b156142eb57604080518082018252600181527f2f00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820181905284518086019095529251845283015290614537908390615c01565b9050600181511115614573578060028251614552919061743c565b8151811061456257614562616da1565b602002602001015192505050919050565b5082604051602001611d23919061744f565b80518251600091111561459a57506000611a10565b815183516020850151600092916145b09161752d565b6145ba919061743c565b9050826020015181036145d1576001915050611a10565b82516020840151819020912014905092915050565b606060006145f383615ca6565b600101905060008167ffffffffffffffff8111156146135761461361671f565b6040519080825280601f01601f19166020018201604052801561463d576020820181803683370190505b5090508181016020015b600019017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a850494508461464757509392505050565b604081810151815180830183526000808252602091820181905283518085018552835181529282018383015283518085018552600a81527f554e4c4943454e5345440000000000000000000000000000000000000000000081840190815285518087018752838152840192909252845180860190955251845290830152606091614712905b8290613e06565b1561475257505060408051808201909152600481527f4e6f6e65000000000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600981527f556e6c6963656e73650000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526147b19061470b565b156147f157505060408051808201909152600981527f556e6c6963656e736500000000000000000000000000000000000000000000006020820152919050565b604080518082018252600381527f4d49540000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526148509061470b565b1561489057505060408051808201909152600381527f4d495400000000000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f47504c2d322e302d6f6e6c790000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526148ef9061470b565b806149545750604080518082018252601081527f47504c2d322e302d6f722d6c6174657200000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526149549061470b565b1561499457505060408051808201909152600981527f474e552047504c763200000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f47504c2d332e302d6f6e6c790000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526149f39061470b565b80614a585750604080518082018252601081527f47504c2d332e302d6f722d6c617465720000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152614a589061470b565b15614a9857505060408051808201909152600981527f474e552047504c763300000000000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4c47504c2d322e312d6f6e6c790000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152614af79061470b565b80614b5c5750604080518082018252601181527f4c47504c2d322e312d6f722d6c6174657200000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152614b5c9061470b565b15614b9c57505060408051808201909152600c81527f474e55204c47504c76322e3100000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4c47504c2d332e302d6f6e6c790000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152614bfb9061470b565b80614c605750604080518082018252601181527f4c47504c2d332e302d6f722d6c6174657200000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152614c609061470b565b15614ca057505060408051808201909152600a81527f474e55204c47504c7633000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f4253442d322d436c61757365000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152614cff9061470b565b15614d3f57505060408051808201909152600c81527f4253442d322d436c6175736500000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f4253442d332d436c61757365000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152614d9e9061470b565b15614dde57505060408051808201909152600c81527f4253442d332d436c6175736500000000000000000000000000000000000000006020820152919050565b604080518082018252600781527f4d504c2d322e300000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152614e3d9061470b565b15614e7d57505060408051808201909152600781527f4d504c2d322e30000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600781527f4f534c2d332e300000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152614edc9061470b565b15614f1c57505060408051808201909152600781527f4f534c2d332e30000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600a81527f4170616368652d322e300000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152614f7b9061470b565b15614fbb57505060408051808201909152600a81527f4170616368652d322e30000000000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4147504c2d332e302d6f6e6c79000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261501a9061470b565b8061507f5750604080518082018252601181527f4147504c2d332e302d6f722d6c617465720000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261507f9061470b565b156150bf57505060408051808201909152600a81527f474e55204147504c7633000000000000000000000000000000000000000000006020820152919050565b604080518082018252600881527f4255534c2d312e310000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261511e9061470b565b1561515e57505060408051808201909152600781527f42534c20312e31000000000000000000000000000000000000000000000000006020820152919050565b60408084015184519151611d239290602001617540565b60608060005b8451811015615200578185828151811061519757615197616da1565b60200260200101516040516020016151b09291906168e9565b6040516020818303038152906040529150600185516151cf919061743c565b81146151f857816040516020016151e691906176a9565b60405160208183030381529060405291505b60010161517b565b5060408051600380825260808201909252600091816020015b6060815260200190600190039081615219579050509050838160008151811061524457615244616da1565b60200260200101819052506040518060400160405280600281526020017f2d630000000000000000000000000000000000000000000000000000000000008152508160018151811061529857615298616da1565b602002602001018190525081816002815181106152b7576152b7616da1565b6020908102919091010152949350505050565b60208083015183518351928401516000936152e89291849190615d88565b14159392505050565b604080518082019091526000808252602082015260006153238460000151856020015185600001518660200151615e99565b9050836020015181615335919061743c565b8451859061534490839061743c565b90525060208401525090919050565b6040805180820190915260008082526020820152815183511015615378575081611a10565b602080830151908401516001911461539f5750815160208481015190840151829020919020145b80156153d0578251845185906153b690839061743c565b90525082516020850180516153cc90839061752d565b9052505b509192915050565b60408051808201909152600080825260208201526153f7838383615fb9565b5092915050565b60606000826000015167ffffffffffffffff81111561541f5761541f61671f565b6040519080825280601f01601f191660200182016040528015615449576020820181803683370190505b50905060006020820190506153f78185602001518660000151616064565b815181516000919081111561547a575081515b6020808501519084015160005b8381101561553357825182518082146155035760001960208710156154e2576001846154b489602061743c565b6154be919061752d565b6154c99060086176ea565b6154d49060026177e8565b6154de919061743c565b1990505b8181168382168181039114615500579750611a109650505050505050565b50505b61550e60208661752d565b945061551b60208561752d565b9350505060208161552c919061752d565b9050615487565b5084518651612aa491906177f4565b6060600061554e612323565b6040805160ff808252612000820190925291925060009190816020015b606081526020019060019003908161556b57905050905060006040518060400160405280600381526020017f6e707800000000000000000000000000000000000000000000000000000000008152508282806155c690616f3d565b935060ff16815181106155db576155db616da1565b60200260200101819052506040518060400160405280600781526020017f5e312e33322e330000000000000000000000000000000000000000000000000081525060405160200161562c9190617814565b60405160208183030381529060405282828061564790616f3d565b935060ff168151811061565c5761565c616da1565b60200260200101819052506040518060400160405280600881526020017f76616c69646174650000000000000000000000000000000000000000000000008152508282806156a990616f3d565b935060ff16815181106156be576156be616da1565b6020026020010181905250826040516020016156da9190616e3c565b6040516020818303038152906040528282806156f590616f3d565b935060ff168151811061570a5761570a616da1565b60200260200101819052506040518060400160405280600a81526020017f2d2d636f6e74726163740000000000000000000000000000000000000000000081525082828061575790616f3d565b935060ff168151811061576c5761576c616da1565b602002602001018190525061578187846160de565b828261578c81616f3d565b935060ff16815181106157a1576157a1616da1565b60209081029190910101528551511561584d5760408051808201909152600b81527f2d2d7265666572656e6365000000000000000000000000000000000000000000602082015282826157f381616f3d565b935060ff168151811061580857615808616da1565b60200260200101819052506158218660000151846160de565b828261582c81616f3d565b935060ff168151811061584157615841616da1565b60200260200101819052505b8560800151156158bb5760408051808201909152601881527f2d2d756e73616665536b697053746f72616765436865636b00000000000000006020820152828261589681616f3d565b935060ff16815181106158ab576158ab616da1565b6020026020010181905250615921565b84156159215760408051808201909152601281527f2d2d726571756972655265666572656e636500000000000000000000000000006020820152828261590081616f3d565b935060ff168151811061591557615915616da1565b60200260200101819052505b604086015151156159bd5760408051808201909152600d81527f2d2d756e73616665416c6c6f77000000000000000000000000000000000000006020820152828261596b81616f3d565b935060ff168151811061598057615980616da1565b6020026020010181905250856040015182828061599c90616f3d565b935060ff16815181106159b1576159b1616da1565b60200260200101819052505b856060015115615a275760408051808201909152601481527f2d2d756e73616665416c6c6f7752656e616d657300000000000000000000000060208201528282615a0681616f3d565b935060ff1681518110615a1b57615a1b616da1565b60200260200101819052505b60008160ff1667ffffffffffffffff811115615a4557615a4561671f565b604051908082528060200260200182016040528015615a7857816020015b6060815260200190600190039081615a635790505b50905060005b8260ff168160ff161015615ad157838160ff1681518110615aa157615aa1616da1565b6020026020010151828260ff1681518110615abe57615abe616da1565b6020908102919091010152600101615a7e565b50979650505050505050565b6040805180820190915260008082526020820152815183511015615b02575081611a10565b81518351602085015160009291615b189161752d565b615b22919061743c565b60208401519091506001908214615b43575082516020840151819020908220145b8015615b5e57835185518690615b5a90839061743c565b9052505b50929392505050565b6000808260000151615b8b8560000151866020015186600001518760200151615e99565b615b95919061752d565b90505b83516020850151615ba9919061752d565b81116153f75781615bb981617859565b9250508260000151615bf0856020015183615bd4919061743c565b8651615be0919061743c565b8386600001518760200151615e99565b615bfa919061752d565b9050615b98565b60606000615c0f8484615b67565b615c1a90600161752d565b67ffffffffffffffff811115615c3257615c3261671f565b604051908082528060200260200182016040528015615c6557816020015b6060815260200190600190039081615c505790505b50905060005b8151811015613cf257615c8161402186866153d8565b828281518110615c9357615c93616da1565b6020908102919091010152600101615c6b565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310615cef577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310615d1b576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc100008310615d3957662386f26fc10000830492506010015b6305f5e1008310615d51576305f5e100830492506008015b6127108310615d6557612710830492506004015b60648310615d77576064830492506002015b600a8310611a105760010192915050565b600080858411615e8f5760208411615e3b5760008415615dd3576001615daf86602061743c565b615dba9060086176ea565b615dc59060026177e8565b615dcf919061743c565b1990505b8351811685615de2898961752d565b615dec919061743c565b805190935082165b818114615e2657878411615e0e5787945050505050613923565b83615e1881617873565b945050828451169050615df4565b615e30878561752d565b945050505050613923565b838320615e48858861743c565b615e52908761752d565b91505b858210615e8d57848220808203615e7a57615e70868461752d565b9350505050613923565b615e8560018461743c565b925050615e55565b505b5092949350505050565b60008381868511615fa45760208511615f535760008515615ee5576001615ec187602061743c565b615ecc9060086176ea565b615ed79060026177e8565b615ee1919061743c565b1990505b84518116600087615ef68b8b61752d565b615f00919061743c565b855190915083165b828114615f4557818610615f2d57615f208b8b61752d565b9650505050505050613923565b85615f3781617859565b965050838651169050615f08565b859650505050505050613923565b508383206000905b615f65868961743c565b8211615fa257858320808203615f815783945050505050613923565b615f8c60018561752d565b9350508180615f9a90617859565b925050615f5b565b505b615fae878761752d565b979650505050505050565b60408051808201909152600080825260208201526000615feb8560000151866020015186600001518760200151615e99565b602080870180519186019190915251909150616007908261743c565b83528451602086015161601a919061752d565b8103616029576000855261605b565b83518351616037919061752d565b8551869061604690839061743c565b9052508351616055908261752d565b60208601525b50909392505050565b6020811061609c578151835261607b60208461752d565b925061608860208361752d565b915061609560208261743c565b9050616064565b60001981156160cb5760016160b283602061743c565b6160be906101006177e8565b6160c8919061743c565b90505b9151835183169219169190911790915250565b606060006160ec84846123f6565b80516020808301516040519394506161069390910161788a565b60405160208183030381529060405291505092915050565b610c9f806178e383390190565b6116fe8061858283390190565b61155a80619c8083390190565b610d5e8061b1da83390190565b6040518060e0016040528060608152602001606081526020016060815260200160001515815260200160001515815260200160001515815260200161619561619a565b905290565b604051806101000160405280600015158152602001600015158152602001606081526020016000801916815260200160608152602001606081526020016000151581526020016161956040518060800160405280600081526020016000815260200160008152602001600081525090565b602080825282518282018190526000918401906040840190835b8181101561624c5783516001600160a01b0316835260209384019390920191600101616225565b509095945050505050565b60005b8381101561627257818101518382015260200161625a565b50506000910152565b60008151808452616293816020860160208601616257565b601f01601f19169290920160200192915050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b828110156163a3577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452815180516001600160a01b03168652602090810151604082880181905281519088018190529101906060600582901b88018101919088019060005b81811015616389577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa08a850301835261637384865161627b565b6020958601959094509290920191600101616339565b5091975050506020948501949290920191506001016162cf565b50929695505050505050565b600081518084526020840193506020830160005b828110156164035781517fffffffff00000000000000000000000000000000000000000000000000000000168652602095860195909101906001016163c3565b5093949350505050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b828110156163a3577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08786030184528151805160408752616479604088018261627b565b905060208201519150868103602088015261649481836163af565b965050506020938401939190910190600101616435565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b828110156163a3577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc087860301845261650d85835161627b565b945060209384019391909101906001016164d3565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b828110156163a3577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc087860301845281516001600160a01b03815116865260208101519050604060208701526165a360408701826163af565b955050602093840193919091019060010161654a565b6000602082840312156165cb57600080fd5b81518015158114611b3657600080fd5b600181811c908216806165ef57607f821691505b6020821081036142fc577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006020828403121561663a57600080fd5b81516001600160a01b0381168114611b3657600080fd5b606081526000616664606083018661627b565b602083019490945250901515604090910152919050565b6001600160a01b03841681528260208201526060604082015260006142e2606083018461627b565b6001600160a01b038616815284602082015260a0604082015260006166cb60a083018661627b565b6060830194909452509015156080909101529392505050565b828152604060208201526000613923604083018461627b565b6001600160a01b0383168152604060208201526000613923604083018461627b565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040516060810167ffffffffffffffff811182821017156167715761677161671f565b60405290565b60008067ffffffffffffffff8411156167925761679261671f565b50604051601f19601f85018116603f0116810181811067ffffffffffffffff821117156167c1576167c161671f565b6040528381529050808284018510156167d957600080fd5b613cf2846020830185616257565b600082601f8301126167f857600080fd5b611b3683835160208501616777565b60006020828403121561681957600080fd5b815167ffffffffffffffff81111561683057600080fd5b611a0c848285016167e7565b60006020828403121561684e57600080fd5b5051919050565b7f4661696c656420746f206465706c6f7920636f6e74726163742000000000000081526000835161688d81601a850160208801616257565b7f3a20000000000000000000000000000000000000000000000000000000000000601a9184019182015283516168ca81601c840160208801616257565b01601c01949350505050565b602081526000611b36602083018461627b565b600083516168fb818460208801616257565b83519083019061690f818360208801616257565b01949350505050565b7f4661696c656420746f206465706c6f7920636f6e74726163742000000000000081526000835161695081601a850160208801616257565b7f207573696e6720636f6e7374727563746f722064617461202200000000000000601a91840191820152835161698d816033840160208801616257565b7f220000000000000000000000000000000000000000000000000000000000000060339290910191820152603401949350505050565b6001600160a01b03841681526001600160a01b03831660208201526060604082015260006142e2606083018461627b565b60408152600b60408201527f464f554e4452595f4f55540000000000000000000000000000000000000000006060820152608060208201526000611b36608083018461627b565b600060208284031215616a4d57600080fd5b815167ffffffffffffffff811115616a6457600080fd5b8201601f81018413616a7557600080fd5b611a0c84825160208401616777565b60008551616a96818460208a01616257565b7f2f000000000000000000000000000000000000000000000000000000000000009083019081528551616ad0816001840160208a01616257565b7f2f00000000000000000000000000000000000000000000000000000000000000600192909101918201528451616b0e816002840160208901616257565b6001818301019150507f2f0000000000000000000000000000000000000000000000000000000000000060018201528351616b50816002840160208801616257565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600292909101918201526007019695505050505050565b604081526000616b9b604083018461627b565b8281036020840152600481527f2e6173740000000000000000000000000000000000000000000000000000000060208201526040810191505092915050565b7f436f756c64206e6f742066696e642041535420696e2061727469666163742000815260008251616c1281601f850160208701616257565b7f2e205365742060617374203d20747275656020696e20666f756e6472792e746f601f9390910192830152507f6d6c000000000000000000000000000000000000000000000000000000000000603f820152604101919050565b604081526000616c7f604083018461627b565b8281036020840152601181527f2e6173742e6162736f6c7574655061746800000000000000000000000000000060208201526040810191505092915050565b604081526000616cd1604083018461627b565b8281036020840152600c81527f2e6173742e6c6963656e7365000000000000000000000000000000000000000060208201526040810191505092915050565b7f2e6d657461646174612e736f75726365732e5b27000000000000000000000000815260008251616d48816014850160208701616257565b7f275d2e6b656363616b32353600000000000000000000000000000000000000006014939091019283015250602001919050565b604081526000616d8f604083018561627b565b8281036020840152611b32818561627b565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f2200000000000000000000000000000000000000000000000000000000000000815260008251616e08816001850160208701616257565b7f22000000000000000000000000000000000000000000000000000000000000006001939091019283015250600201919050565b60008251616e4e818460208701616257565b7f2f6275696c642d696e666f000000000000000000000000000000000000000000920191825250600b01919050565b7f436f756c64206e6f742066696e64206275696c642d696e666f2066696c65207781527f697468206d61746368696e6720736f7572636520636f6465206861736820666f60208201527f7220636f6e747261637420000000000000000000000000000000000000000000604082015260008251616f0181604b850160208701616257565b91909101604b0192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600060ff821660ff8103616f5357616f53616f0e565b60010192915050565b7f406f70656e7a657070656c696e2f646566656e6465722d6465706c6f792d636c81527f69656e742d636c69400000000000000000000000000000000000000000000000602082015260008251616fba816029850160208701616257565b9190910160290192915050565b60408152601660408201527f4f50454e5a455050454c494e5f424153485f50415448000000000000000000006060820152608060208201526000611b36608083018461627b565b60006020828403121561702057600080fd5b815167ffffffffffffffff81111561703757600080fd5b82016060818503121561704957600080fd5b61705161674e565b81518060030b811461706257600080fd5b8152602082015167ffffffffffffffff81111561707e57600080fd5b61708a868285016167e7565b602083015250604082015167ffffffffffffffff8111156170aa57600080fd5b6170b6868285016167e7565b604083015250949350505050565b7f4661696c656420746f2072756e206261736820636f6d6d616e6420776974682081527f2200000000000000000000000000000000000000000000000000000000000000602082015260008251617122816021850160208701616257565b7f222e20496620796f7520617265207573696e672057696e646f77732c2073657460219390910192830152507f20746865204f50454e5a455050454c494e5f424153485f5041544820656e766960418201527f726f6e6d656e74207661726961626c6520746f207468652066756c6c7920717560618201527f616c69666965642070617468206f66207468652062617368206578656375746160818201527f626c652e20466f72206578616d706c652c20696620796f75206172652075736960a18201527f6e672047697420666f722057696e646f77732c206164642074686520666f6c6c60c18201527f6f77696e67206c696e6520696e20746865202e656e762066696c65206f66207960e18201527f6f75722070726f6a65637420287573696e6720666f727761726420736c6173686101018201527f6573293a0a4f50454e5a455050454c494e5f424153485f504154483d22433a2f6101218201527f50726f6772616d2046696c65732f4769742f62696e2f6261736822000000000061014182015261015c01919050565b7f4661696c656420746f2066696e64206c696e652077697468207072656669782081527f270000000000000000000000000000000000000000000000000000000000000060208201526000835161730e816021850160208801616257565b7f2720696e206f75747075743a2000000000000000000000000000000000000000602191840191820152835161734b81602e840160208801616257565b01602e01949350505050565b60008251617369818460208701616257565b9190910192915050565b7f4661696c656420746f2072756e2075706772616465207361666574792076616c81527f69646174696f6e3a200000000000000000000000000000000000000000000000602082015260008251616fba816029850160208701616257565b7f55706772616465207361666574792076616c69646174696f6e206661696c656481527f3a0a00000000000000000000000000000000000000000000000000000000000060208201526000825161742f816022850160208701616257565b9190910160220192915050565b81810381811115611a1057611a10616f0e565b7f436f6e7472616374206e616d652000000000000000000000000000000000000081526000825161748781600e850160208701616257565b7f206d75737420626520696e2074686520666f726d6174204d79436f6e74726163600e9390910192830152507f742e736f6c3a4d79436f6e7472616374206f72204d79436f6e74726163742e73602e8201527f6f6c206f72206f75742f4d79436f6e74726163742e736f6c2f4d79436f6e7472604e8201527f6163742e6a736f6e000000000000000000000000000000000000000000000000606e820152607601919050565b80820180821115611a1057611a10616f0e565b7f53504458206c6963656e7365206964656e746966696572200000000000000000815260008351617578816018850160208801616257565b7f20696e200000000000000000000000000000000000000000000000000000000060189184019182015283516175b581601c840160208801616257565b7f20646f6573206e6f74206c6f6f6b206c696b65206120737570706f7274656420601c92909101918201527f6c6963656e736520666f7220626c6f636b206578706c6f726572207665726966603c8201527f69636174696f6e2e205573652074686520606c6963656e73655479706560206f605c8201527f7074696f6e20746f20737065636966792061206c6963656e736520747970652c607c8201527f206f7220736574207468652060736b69704c6963656e73655479706560206f70609c8201527f74696f6e20746f2060747275656020746f20736b69702e00000000000000000060bc82015260d301949350505050565b600082516176bb818460208701616257565b7f2000000000000000000000000000000000000000000000000000000000000000920191825250600101919050565b8082028115828204841417611a1057611a10616f0e565b6001815b600184111561773c5780850481111561772057617720616f0e565b600184161561772e57908102905b60019390931c928002617705565b935093915050565b60008261775357506001611a10565b8161776057506000611a10565b816001811461777657600281146177805761779c565b6001915050611a10565b60ff84111561779157617791616f0e565b50506001821b611a10565b5060208310610133831016604e8410600b84101617156177bf575081810a611a10565b6177cc6000198484617701565b80600019048211156177e0576177e0616f0e565b029392505050565b6000611b368383617744565b81810360008312801583831316838312821617156153f7576153f7616f0e565b7f406f70656e7a657070656c696e2f75706772616465732d636f7265400000000081526000825161784c81601c850160208701616257565b91909101601c0192915050565b6000600019820361786c5761786c616f0e565b5060010190565b60008161788257617882616f0e565b506000190190565b6000835161789c818460208801616257565b7f3a0000000000000000000000000000000000000000000000000000000000000090830190815283516178d6816001840160208801616257565b0160010194935050505056fe608060405234801561001057600080fd5b50604051610c9f380380610c9f83398101604081905261002f9161010d565b8181600361003d83826101ff565b50600461004a82826101ff565b50505050506102bd565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261007b57600080fd5b81516001600160401b0381111561009457610094610054565b604051601f8201601f19908116603f011681016001600160401b03811182821017156100c2576100c2610054565b6040528181528382016020018510156100da57600080fd5b60005b828110156100f9576020818601810151838301820152016100dd565b506000918101602001919091529392505050565b6000806040838503121561012057600080fd5b82516001600160401b0381111561013657600080fd5b6101428582860161006a565b602085015190935090506001600160401b0381111561016057600080fd5b61016c8582860161006a565b9150509250929050565b600181811c9082168061018a57607f821691505b6020821081036101aa57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156101fa57806000526020600020601f840160051c810160208510156101d75750805b601f840160051c820191505b818110156101f757600081556001016101e3565b50505b505050565b81516001600160401b0381111561021857610218610054565b61022c816102268454610176565b846101b0565b6020601f82116001811461026057600083156102485750848201515b600019600385901b1c1916600184901b1784556101f7565b600084815260208120601f198516915b828110156102905787850151825560209485019460019092019101610270565b50848210156102ae5786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b6109d3806102cc6000396000f3fe608060405234801561001057600080fd5b50600436106100be5760003560e01c806340c10f191161007657806395d89b411161005b57806395d89b4114610183578063a9059cbb1461018b578063dd62ed3e1461019e57600080fd5b806340c10f191461013857806370a082311461014d57600080fd5b806318160ddd116100a757806318160ddd1461010457806323b872dd14610116578063313ce5671461012957600080fd5b806306fdde03146100c3578063095ea7b3146100e1575b600080fd5b6100cb6101e4565b6040516100d891906107bf565b60405180910390f35b6100f46100ef366004610854565b610276565b60405190151581526020016100d8565b6002545b6040519081526020016100d8565b6100f461012436600461087e565b610290565b604051601281526020016100d8565b61014b610146366004610854565b6102b4565b005b61010861015b3660046108bb565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6100cb6102c2565b6100f4610199366004610854565b6102d1565b6101086101ac3660046108dd565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6060600380546101f390610910565b80601f016020809104026020016040519081016040528092919081815260200182805461021f90610910565b801561026c5780601f106102415761010080835404028352916020019161026c565b820191906000526020600020905b81548152906001019060200180831161024f57829003601f168201915b5050505050905090565b6000336102848185856102df565b60019150505b92915050565b60003361029e8582856102f1565b6102a98585856103c5565b506001949350505050565b6102be8282610470565b5050565b6060600480546101f390610910565b6000336102848185856103c5565b6102ec83838360016104cc565b505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146103bf57818110156103b0576040517ffb8f41b200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416600482015260248101829052604481018390526064015b60405180910390fd5b6103bf848484840360006104cc565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8316610415576040517f96c6fd1e000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff8216610465576040517fec442f05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b6102ec838383610614565b73ffffffffffffffffffffffffffffffffffffffff82166104c0576040517fec442f05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b6102be60008383610614565b73ffffffffffffffffffffffffffffffffffffffff841661051c576040517fe602df05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff831661056c576040517f94280d62000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260016020908152604080832093871683529290522082905580156103bf578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161060691815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff831661064c5780600260008282546106419190610963565b909155506106fe9050565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260208190526040902054818110156106d2576040517fe450d38c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8516600482015260248101829052604481018390526064016103a7565b73ffffffffffffffffffffffffffffffffffffffff841660009081526020819052604090209082900390555b73ffffffffffffffffffffffffffffffffffffffff821661072757600280548290039055610753565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090208054820190555b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516107b291815260200190565b60405180910390a3505050565b602081526000825180602084015260005b818110156107ed57602081860181015160408684010152016107d0565b5060006040828501015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011684010191505092915050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461084f57600080fd5b919050565b6000806040838503121561086757600080fd5b6108708361082b565b946020939093013593505050565b60008060006060848603121561089357600080fd5b61089c8461082b565b92506108aa6020850161082b565b929592945050506040919091013590565b6000602082840312156108cd57600080fd5b6108d68261082b565b9392505050565b600080604083850312156108f057600080fd5b6108f98361082b565b91506109076020840161082b565b90509250929050565b600181811c9082168061092457607f821691505b60208210810361095d577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b8082018082111561028a577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea26469706673582212207e804ca539d49155d2b6bc19268ce22f9f857027c75247d69fb0d56a089c93d464736f6c634300081a003360a060405234801561001057600080fd5b506040516116fe3803806116fe83398101604081905261002f916101e5565b60016000556002805460ff191690556001600160a01b038316158061005b57506001600160a01b038216155b8061006d57506001600160a01b038116155b1561008b5760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b0383166080526100a3600082610134565b506100ce7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a82610134565b506100f97f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e483610134565b506101126000805160206116de83398151915282610134565b5061012b6000805160206116de83398151915283610134565b50505050610228565b60008281526001602090815260408083206001600160a01b038516845290915281205460ff166101bf5760008381526001602081815260408084206001600160a01b0387168086529252808420805460ff19169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45060016101c3565b5060005b92915050565b80516001600160a01b03811681146101e057600080fd5b919050565b6000806000606084860312156101fa57600080fd5b610203846101c9565b9250610211602085016101c9565b915061021f604085016101c9565b90509250925092565b60805161147f61025f6000396000818161019e0152818161050001528181610562015281816108f70152610959015261147f6000f3fe608060405234801561001057600080fd5b506004361061016c5760003560e01c806385f438c1116100cd578063c8a0236211610081578063d936547e11610066578063d936547e14610355578063d9caed1214610378578063e63ab1e91461038b57600080fd5b8063c8a023621461032f578063d547741f1461034257600080fd5b80639a590427116100b25780639a590427146103015780639b19251a14610314578063a217fddf1461032757600080fd5b806385f438c11461029457806391d14854146102bb57600080fd5b806336568abe11610124578063570618e111610109578063570618e11461025a5780635c975abb146102815780638456cb591461028c57600080fd5b806336568abe1461023f5780633f4ba83a1461025257600080fd5b806321fc65f21161015557806321fc65f2146101e5578063248a9ca3146101fa5780632f2ff15d1461022c57600080fd5b806301ffc9a714610171578063116191b614610199575b600080fd5b61018461017f36600461118a565b6103b2565b60405190151581526020015b60405180910390f35b6101c07f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610190565b6101f86101f33660046111f5565b61044b565b005b61021e610208366004611292565b6000908152600160208190526040909120015490565b604051908152602001610190565b6101f861023a3660046112ab565b61064c565b6101f861024d3660046112ab565b610678565b6101f86106d6565b61021e7f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a81565b60025460ff16610184565b6101f861070b565b61021e7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b6101846102c93660046112ab565b600091825260016020908152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b6101f861030f3660046112d7565b61073d565b6101f86103223660046112d7565b6107be565b61021e600081565b6101f861033d3660046111f5565b610842565b6101f86103503660046112ab565b610a29565b6101846103633660046112d7565b60036020526000908152604090205460ff1681565b6101f86103863660046112f2565b610a4f565b61021e7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061044557507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b610453610b7b565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461047d81610bbe565b610485610bc8565b73ffffffffffffffffffffffffffffffffffffffff861660009081526003602052604090205460ff166104e4576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61052573ffffffffffffffffffffffffffffffffffffffff87167f000000000000000000000000000000000000000000000000000000000000000086610c07565b6040517f5131ab5900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690635131ab599061059f9089908990899089908990600401611378565b600060405180830381600087803b1580156105b957600080fd5b505af11580156105cd573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167f85b5be9cf454e05e0bddf49315178102227c312078eefa3c00294fb4d912ae4e868686604051610632939291906113d5565b60405180910390a3506106456001600055565b5050505050565b6000828152600160208190526040909120015461066881610bbe565b6106728383610c94565b50505050565b73ffffffffffffffffffffffffffffffffffffffff811633146106c7576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6106d18282610d41565b505050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61070081610bbe565b610708610de2565b50565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61073581610bbe565b610708610e41565b7f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a61076781610bbe565b73ffffffffffffffffffffffffffffffffffffffff8216600081815260036020526040808220805460ff19169055517f51085ddf9ebdded84b76e829eb58c4078e4b5bdf97d9a94723f336039da467919190a25050565b7f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a6107e881610bbe565b73ffffffffffffffffffffffffffffffffffffffff8216600081815260036020526040808220805460ff19166001179055517faab7954e9d246b167ef88aeddad35209ca2489d95a8aeb59e288d9b19fae5a549190a25050565b61084a610b7b565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461087481610bbe565b61087c610bc8565b73ffffffffffffffffffffffffffffffffffffffff861660009081526003602052604090205460ff166108db576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61091c73ffffffffffffffffffffffffffffffffffffffff87167f000000000000000000000000000000000000000000000000000000000000000086610c07565b6040517fb8969bd400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063b8969bd4906109969089908990899089908990600401611378565b600060405180830381600087803b1580156109b057600080fd5b505af11580156109c4573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fb9d4efa96044e5f5e03e696fa9ae2ff66911cc27e8a637c3627c75bc5b2241c8868686604051610632939291906113d5565b60008281526001602081905260409091200154610a4581610bbe565b6106728383610d41565b610a57610b7b565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e4610a8181610bbe565b610a89610bc8565b73ffffffffffffffffffffffffffffffffffffffff841660009081526003602052604090205460ff16610ae8576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610b0973ffffffffffffffffffffffffffffffffffffffff85168484610c07565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f9b1bfa7fa9ee420a16e124f794c35ac9f90472acc99140eb2f6447c714cad8eb84604051610b6891815260200190565b60405180910390a3506106d16001600055565b600260005403610bb7576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b6107088133610e7e565b60025460ff1615610c05576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6040805173ffffffffffffffffffffffffffffffffffffffff8416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb000000000000000000000000000000000000000000000000000000001790526106d1908490610f0f565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff16610d3957600083815260016020818152604080842073ffffffffffffffffffffffffffffffffffffffff87168086529252808420805460ff19169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a4506001610445565b506000610445565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff1615610d3957600083815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff86168085529252808320805460ff1916905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a4506001610445565b610dea610fa5565b6002805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b610e49610bc8565b6002805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258610e173390565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16610f0b576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82166004820152602481018390526044015b60405180910390fd5b5050565b6000610f3173ffffffffffffffffffffffffffffffffffffffff841683610fe1565b90508051600014158015610f56575080806020019051810190610f5491906113f8565b155b156106d1576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84166004820152602401610f02565b60025460ff16610c05576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6060610fef83836000610ff6565b9392505050565b606081471015611034576040517fcd786059000000000000000000000000000000000000000000000000000000008152306004820152602401610f02565b6000808573ffffffffffffffffffffffffffffffffffffffff16848660405161105d919061141a565b60006040518083038185875af1925050503d806000811461109a576040519150601f19603f3d011682016040523d82523d6000602084013e61109f565b606091505b50915091506110af8683836110b9565b9695505050505050565b6060826110ce576110c982611148565b610fef565b81511580156110f2575073ffffffffffffffffffffffffffffffffffffffff84163b155b15611141576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85166004820152602401610f02565b5080610fef565b8051156111585780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006020828403121561119c57600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610fef57600080fd5b803573ffffffffffffffffffffffffffffffffffffffff811681146111f057600080fd5b919050565b60008060008060006080868803121561120d57600080fd5b611216866111cc565b9450611224602087016111cc565b935060408601359250606086013567ffffffffffffffff81111561124757600080fd5b8601601f8101881361125857600080fd5b803567ffffffffffffffff81111561126f57600080fd5b88602082840101111561128157600080fd5b959894975092955050506020019190565b6000602082840312156112a457600080fd5b5035919050565b600080604083850312156112be57600080fd5b823591506112ce602084016111cc565b90509250929050565b6000602082840312156112e957600080fd5b610fef826111cc565b60008060006060848603121561130757600080fd5b611310846111cc565b925061131e602085016111cc565b929592945050506040919091013590565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff8616815273ffffffffffffffffffffffffffffffffffffffff851660208201528360408201526080606082015260006113ca60808301848661132f565b979650505050505050565b8381526040602082015260006113ef60408301848661132f565b95945050505050565b60006020828403121561140a57600080fd5b81518015158114610fef57600080fd5b6000825160005b8181101561143b5760208186018101518583015201611421565b50600092019182525091905056fea26469706673582212202f3991d39315b7c0e5ef6fd88336a0f791f8e1cce0a70cb66f2c4c9404215ae364736f6c634300081a00338619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a60c060405260001960035534801561001657600080fd5b5060405161155a38038061155a83398101604081905261003591610220565b60016000819055805460ff19169055838383836001600160a01b038416158061006557506001600160a01b038316155b8061007757506001600160a01b038216155b8061008957506001600160a01b038116155b156100a75760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b03808516608052831660a0526100c5600082610154565b506100f07f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e483610154565b5061011b7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb83610154565b506101467f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a82610154565b505050505050505050610274565b60008281526002602090815260408083206001600160a01b038516845290915281205460ff166101fa5760008381526002602090815260408083206001600160a01b03861684529091529020805460ff191660011790556101b23390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45060016101fe565b5060005b92915050565b80516001600160a01b038116811461021b57600080fd5b919050565b6000806000806080858703121561023657600080fd5b61023f85610204565b935061024d60208601610204565b925061025b60408601610204565b915061026960608601610204565b905092959194509250565b60805160a0516112826102d86000396000818161021d01528181610531015281816108240152818161097b01528181610ad00152610bf20152600081816101d1015281816104a1015281816105040152818161079401526107f701526112826000f3fe608060405234801561001057600080fd5b50600436106101775760003560e01c80635e3e9fef116100d857806391d148541161008c578063d547741f11610066578063d547741f14610386578063d5abeb0114610399578063e63ab1e9146103a257600080fd5b806391d1485414610311578063a217fddf14610357578063a783c7891461035f57600080fd5b8063743e0c9b116100bd578063743e0c9b146102cf5780638456cb59146102e257806385f438c1146102ea57600080fd5b80635e3e9fef146102a95780636f8b44b0146102bc57600080fd5b8063248a9ca31161012f57806336568abe1161011457806336568abe146102835780633f4ba83a146102965780635c975abb1461029e57600080fd5b8063248a9ca31461023f5780632f2ff15d1461027057600080fd5b8063106e629011610160578063106e6290146101b9578063116191b6146101cc57806321e093b11461021857600080fd5b806301ffc9a71461017c57806302d5c899146101a4575b600080fd5b61018f61018a366004610fb4565b6103c9565b60405190151581526020015b60405180910390f35b6101b76101b2366004611026565b610462565b005b6101b76101c73660046110b8565b6105f7565b6101f37f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161019b565b6101f37f000000000000000000000000000000000000000000000000000000000000000081565b61026261024d3660046110eb565b60009081526002602052604090206001015490565b60405190815260200161019b565b6101b761027e366004611104565b61069c565b6101b7610291366004611104565b6106c7565b6101b7610720565b60015460ff1661018f565b6101b76102b7366004611026565b610755565b6101b76102ca3660046110eb565b6108d0565b6101b76102dd3660046110eb565b61093e565b6101b76109e8565b6102627f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b61018f61031f366004611104565b600091825260026020908152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b610262600081565b6102627f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb81565b6101b7610394366004611104565b610a1a565b61026260035481565b6102627f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061045c57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b61046a610a3f565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461049481610a82565b61049c610a8c565b6104c77f00000000000000000000000000000000000000000000000000000000000000008684610acb565b6040517fb8969bd400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063b8969bd490610561907f0000000000000000000000000000000000000000000000000000000000000000908a908a908a908a90600401611179565b600060405180830381600087803b15801561057b57600080fd5b505af115801561058f573d6000803e3d6000fd5b505050508573ffffffffffffffffffffffffffffffffffffffff167fba96f26bdda53eb8c8ba39045dfb4ff39753fbc7a6edcf250a88e75e78d102fe8686866040516105dd939291906111d6565b60405180910390a2506105f06001600055565b5050505050565b6105ff610a3f565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461062981610a82565b610631610a8c565b61063c848484610acb565b8373ffffffffffffffffffffffffffffffffffffffff167f884edad9ce6fa2440d8a54cc123490eb96d2768479d49ff9c7366125a94243648460405161068491815260200190565b60405180910390a2506106976001600055565b505050565b6000828152600260205260409020600101546106b781610a82565b6106c18383610c53565b50505050565b73ffffffffffffffffffffffffffffffffffffffff81163314610716576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6106978282610d53565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61074a81610a82565b610752610e12565b50565b61075d610a3f565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461078781610a82565b61078f610a8c565b6107ba7f00000000000000000000000000000000000000000000000000000000000000008684610acb565b6040517f5131ab5900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690635131ab5990610854907f0000000000000000000000000000000000000000000000000000000000000000908a908a908a908a90600401611179565b600060405180830381600087803b15801561086e57600080fd5b505af1158015610882573d6000803e3d6000fd5b505050508573ffffffffffffffffffffffffffffffffffffffff167f7772f56296d3a5202974a45c61c9188d844ab4d6eeb18c851e4b8d5384ca6ced8686866040516105dd939291906111d6565b7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb6108fa81610a82565b610902610a8c565b60038290556040518281527f7810bd47de260c3e9ee10061cf438099dd12256c79485f12f94dbccc981e806c9060200160405180910390a15050565b610946610a8c565b6040517f79cc6790000000000000000000000000000000000000000000000000000000008152336004820152602481018290527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16906379cc679090604401600060405180830381600087803b1580156109d457600080fd5b505af11580156105f0573d6000803e3d6000fd5b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610a1281610a82565b610752610e8f565b600082815260026020526040902060010154610a3581610a82565b6106c18383610d53565b600260005403610a7b576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b6107528133610ee8565b60015460ff1615610ac9576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6003547f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b39573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b5d91906111f9565b610b679084611212565b1115610b9f576040517fc30436e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f1e458bee00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff848116600483015260248201849052604482018390527f00000000000000000000000000000000000000000000000000000000000000001690631e458bee90606401600060405180830381600087803b158015610c3657600080fd5b505af1158015610c4a573d6000803e3d6000fd5b50505050505050565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff16610d4b57600083815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff86168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055610ce93390565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a450600161045c565b50600061045c565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff1615610d4b57600083815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8616808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a450600161045c565b610e1a610f78565b600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b610e97610a8c565b600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016811790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25833610e65565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16610f74576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff821660048201526024810183905260440160405180910390fd5b5050565b60015460ff16610ac9576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060208284031215610fc657600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610ff657600080fd5b9392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461102157600080fd5b919050565b60008060008060006080868803121561103e57600080fd5b61104786610ffd565b945060208601359350604086013567ffffffffffffffff81111561106a57600080fd5b8601601f8101881361107b57600080fd5b803567ffffffffffffffff81111561109257600080fd5b8860208284010111156110a457600080fd5b959894975060200195606001359392505050565b6000806000606084860312156110cd57600080fd5b6110d684610ffd565b95602085013595506040909401359392505050565b6000602082840312156110fd57600080fd5b5035919050565b6000806040838503121561111757600080fd5b8235915061112760208401610ffd565b90509250929050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff8616815273ffffffffffffffffffffffffffffffffffffffff851660208201528360408201526080606082015260006111cb608083018486611130565b979650505050505050565b8381526040602082015260006111f0604083018486611130565b95945050505050565b60006020828403121561120b57600080fd5b5051919050565b8082018082111561045c577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea2646970667358221220de5fa55e0ca79ea2f08903481d01ea00bbbf346b9cfba44e12a2dd6f3a6f2e8a64736f6c634300081a00336080604052348015600f57600080fd5b506001600055610d3a806100246000396000f3fe6080604052600436106100635760003560e01c8063c513169111610040578063c5131691146100c1578063e04d4f97146100e1578063f05b6abf146100f457005b8063357fc5a21461006c5780636ed701691461008c5780638fcaa0b5146100a157005b3661006a57005b005b34801561007857600080fd5b5061006a6100873660046106c0565b610114565b34801561009857600080fd5b5061006a6101aa565b3480156100ad57600080fd5b5061006a6100bc3660046106fc565b6101df565b3480156100cd57600080fd5b5061006a6100dc3660046106c0565b61021e565b61006a6100ef366004610895565b6102f9565b34801561010057600080fd5b5061006a61010f366004610981565b61033d565b61011c610372565b61013e73ffffffffffffffffffffffffffffffffffffffff83163383866103b5565b604080513381526020810185905273ffffffffffffffffffffffffffffffffffffffff848116828401528316606082015290517f2b58128f24a9f59127cc5b5430d70542b22220f2d9adaa86e442b816ab98af609181900360800190a16101a56001600055565b505050565b6040513381527fbcaadb46b82a48af60b608f58959ae6b8310d1b0a0d094c2e9ec3208ed39f2a09060200160405180910390a1565b7f0d3f65f00e631663aa85c96330b5c7a83bb29af3630c0063776f985edc3037aa33838360405161021293929190610a6b565b60405180910390a15050565b610226610372565b6000610233600285610ad5565b90508060000361026f576040517f1f2a200500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61029173ffffffffffffffffffffffffffffffffffffffff84163384846103b5565b604080513381526020810183905273ffffffffffffffffffffffffffffffffffffffff858116828401528416606082015290517f2b58128f24a9f59127cc5b5430d70542b22220f2d9adaa86e442b816ab98af609181900360800190a1506101a56001600055565b7f1f1ff1f5fb41346850b2f5c04e6c767e2f1c8a525c5c0c5cdb60cdf3ca5f62fa3334858585604051610330959493929190610b7e565b60405180910390a1505050565b7f74a53cd528a921fca7dbdee62f86819051d3cc98f214951f4238e8843f20b146338484846040516103309493929190610c08565b6002600054036103ae576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b6040805173ffffffffffffffffffffffffffffffffffffffff85811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd0000000000000000000000000000000000000000000000000000000017905261044a908590610450565b50505050565b600061047273ffffffffffffffffffffffffffffffffffffffff8416836104eb565b905080516000141580156104975750808060200190518101906104959190610ccb565b155b156101a5576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff841660048201526024015b60405180910390fd5b60606104f983836000610500565b9392505050565b60608147101561053e576040517fcd7860590000000000000000000000000000000000000000000000000000000081523060048201526024016104e2565b6000808573ffffffffffffffffffffffffffffffffffffffff1684866040516105679190610ce8565b60006040518083038185875af1925050503d80600081146105a4576040519150601f19603f3d011682016040523d82523d6000602084013e6105a9565b606091505b50915091506105b98683836105c3565b9695505050505050565b6060826105d8576105d382610652565b6104f9565b81511580156105fc575073ffffffffffffffffffffffffffffffffffffffff84163b155b1561064b576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff851660048201526024016104e2565b50806104f9565b8051156106625780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50565b803573ffffffffffffffffffffffffffffffffffffffff811681146106bb57600080fd5b919050565b6000806000606084860312156106d557600080fd5b833592506106e560208501610697565b91506106f360408501610697565b90509250925092565b6000806020838503121561070f57600080fd5b823567ffffffffffffffff81111561072657600080fd5b8301601f8101851361073757600080fd5b803567ffffffffffffffff81111561074e57600080fd5b85602082840101111561076057600080fd5b6020919091019590945092505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156107e6576107e6610770565b604052919050565b600082601f8301126107ff57600080fd5b813567ffffffffffffffff81111561081957610819610770565b61084a60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8401160161079f565b81815284602083860101111561085f57600080fd5b816020850160208301376000918101602001919091529392505050565b801515811461069457600080fd5b80356106bb8161087c565b6000806000606084860312156108aa57600080fd5b833567ffffffffffffffff8111156108c157600080fd5b6108cd868287016107ee565b9350506020840135915060408401356108e58161087c565b809150509250925092565b600067ffffffffffffffff82111561090a5761090a610770565b5060051b60200190565b600082601f83011261092557600080fd5b8135610938610933826108f0565b61079f565b8082825260208201915060208360051b86010192508583111561095a57600080fd5b602085015b8381101561097757803583526020928301920161095f565b5095945050505050565b60008060006060848603121561099657600080fd5b833567ffffffffffffffff8111156109ad57600080fd5b8401601f810186136109be57600080fd5b80356109cc610933826108f0565b8082825260208201915060208360051b8501019250888311156109ee57600080fd5b602084015b83811015610a3057803567ffffffffffffffff811115610a1257600080fd5b610a218b6020838901016107ee565b845250602092830192016109f3565b509550505050602084013567ffffffffffffffff811115610a5057600080fd5b610a5c86828701610914565b9250506106f36040850161088a565b73ffffffffffffffffffffffffffffffffffffffff8416815260406020820152816040820152818360608301376000818301606090810191909152601f9092017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016010192915050565b600082610b0b577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60005b83811015610b2b578181015183820152602001610b13565b50506000910152565b60008151808452610b4c816020860160208601610b10565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b73ffffffffffffffffffffffffffffffffffffffff8616815284602082015260a060408201526000610bb360a0830186610b34565b6060830194909452509015156080909101529392505050565b600081518084526020840193506020830160005b82811015610bfe578151865260209586019590910190600101610be0565b5093949350505050565b60006080820173ffffffffffffffffffffffffffffffffffffffff871683526080602084015280865180835260a08501915060a08160051b86010192506020880160005b82811015610c9b577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60878603018452610c86858351610b34565b94506020938401939190910190600101610c4c565b505050508281036040840152610cb18186610bcc565b915050610cc2606083018415159052565b95945050505050565b600060208284031215610cdd57600080fd5b81516104f98161087c565b60008251610cfa818460208701610b10565b919091019291505056fea2646970667358221220556072e1abafc3c4063b8cce832228b4f309b93726aaa6a6dfab20cb880c6d1864736f6c634300081a0033a26469706673582212208184dc991bc7e10320f65011e674503839279bf0b350eee22b70cb84d2e8f22464736f6c634300081a0033", } // GatewayEVMUUPSUpgradeTestABI is the input ABI used to generate the binding from. diff --git a/v2/pkg/gatewayevmzevm.t.sol/gatewayevmzevmtest.go b/v2/pkg/gatewayevmzevm.t.sol/gatewayevmzevmtest.go index 96fadda5..206935cb 100644 --- a/v2/pkg/gatewayevmzevm.t.sol/gatewayevmzevmtest.go +++ b/v2/pkg/gatewayevmzevm.t.sol/gatewayevmzevmtest.go @@ -50,7 +50,7 @@ type StdInvariantFuzzSelector struct { // GatewayEVMZEVMTestMetaData contains all meta data concerning the GatewayEVMZEVMTest contract. var GatewayEVMZEVMTestMetaData = &bind.MetaData{ ABI: "[{\"type\":\"function\",\"name\":\"IS_TEST\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeArtifacts\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedArtifacts_\",\"type\":\"string[]\",\"internalType\":\"string[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeContracts\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedContracts_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeSelectors\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedSelectors_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzSelector[]\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"selectors\",\"type\":\"bytes4[]\",\"internalType\":\"bytes4[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeSenders\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedSenders_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"failed\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"setUp\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"targetArtifactSelectors\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedArtifactSelectors_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzArtifactSelector[]\",\"components\":[{\"name\":\"artifact\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"selectors\",\"type\":\"bytes4[]\",\"internalType\":\"bytes4[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetArtifacts\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedArtifacts_\",\"type\":\"string[]\",\"internalType\":\"string[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetContracts\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedContracts_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetInterfaces\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedInterfaces_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzInterface[]\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"artifacts\",\"type\":\"string[]\",\"internalType\":\"string[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetSelectors\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedSelectors_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzSelector[]\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"selectors\",\"type\":\"bytes4[]\",\"internalType\":\"bytes4[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetSenders\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedSenders_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"testCallReceiverEVMFromSenderZEVM\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testCallReceiverEVMFromZEVM\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawAndCallReceiverEVMFromSenderZEVM\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawAndCallReceiverEVMFromZEVM\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"event\",\"name\":\"Call\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"receiver\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Call\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"chainId\",\"type\":\"uint256\",\"indexed\":true,\"internalType\":\"uint256\"},{\"name\":\"receiver\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"message\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Deposit\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"receiver\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"asset\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Executed\",\"inputs\":[{\"name\":\"destination\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ExecutedWithERC20\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedERC20\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"token\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"destination\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedNoParams\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedNonPayable\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"strs\",\"type\":\"string[]\",\"indexed\":false,\"internalType\":\"string[]\"},{\"name\":\"nums\",\"type\":\"uint256[]\",\"indexed\":false,\"internalType\":\"uint256[]\"},{\"name\":\"flag\",\"type\":\"bool\",\"indexed\":false,\"internalType\":\"bool\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedPayable\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"str\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"num\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"flag\",\"type\":\"bool\",\"indexed\":false,\"internalType\":\"bool\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedRevert\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Reverted\",\"inputs\":[{\"name\":\"destination\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RevertedWithERC20\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Withdrawal\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"chainId\",\"type\":\"uint256\",\"indexed\":true,\"internalType\":\"uint256\"},{\"name\":\"receiver\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"zrc20\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"gasfee\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"protocolFlatFee\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"message\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log\",\"inputs\":[{\"name\":\"\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_address\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_array\",\"inputs\":[{\"name\":\"val\",\"type\":\"uint256[]\",\"indexed\":false,\"internalType\":\"uint256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_array\",\"inputs\":[{\"name\":\"val\",\"type\":\"int256[]\",\"indexed\":false,\"internalType\":\"int256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_array\",\"inputs\":[{\"name\":\"val\",\"type\":\"address[]\",\"indexed\":false,\"internalType\":\"address[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_bytes\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_bytes32\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_int\",\"inputs\":[{\"name\":\"\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_address\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_array\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"uint256[]\",\"indexed\":false,\"internalType\":\"uint256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_array\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"int256[]\",\"indexed\":false,\"internalType\":\"int256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_array\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"address[]\",\"indexed\":false,\"internalType\":\"address[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_bytes\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_bytes32\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_decimal_int\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"},{\"name\":\"decimals\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_decimal_uint\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"decimals\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_int\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_string\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_uint\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_string\",\"inputs\":[{\"name\":\"\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_uint\",\"inputs\":[{\"name\":\"\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"logs\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"ApprovalFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"CallerIsNotFungibleModule\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ConnectorInitialized\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"CustodyInitialized\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"DepositFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ExecutionFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"FailedZetaSent\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"GasFeeTransferFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientERC20Amount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientETHAmount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientZRC20Amount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientZetaAmount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidTarget\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NotWhitelistedInCustody\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OnlyWZETAOrFungible\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"WithdrawalFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZRC20BurnFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZRC20DepositFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZRC20TransferFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZeroAddress\",\"inputs\":[]}]", - Bin: "0x6080604052600c8054600160ff199182168117909255601f80549091169091179055348015602c57600080fd5b50620107e3806200003e6000396000f3fe608060405234801561001057600080fd5b506004361061011b5760003560e01c806385226c81116100b2578063b5508aa911610081578063d7a525fc11610066578063d7a525fc146101ec578063e20c9f71146101f4578063fa7626d4146101fc57600080fd5b8063b5508aa9146101cc578063ba414fa6146101d457600080fd5b806385226c8114610192578063916a17c6146101a75780639683c695146101bc578063b0464fdc146101c457600080fd5b80633f7286f4116100ee5780633f7286f414610165578063524744131461016d57806366d9a9a0146101755780636ff15ccc1461018a57600080fd5b80630a9254e4146101205780631ed7831c1461012a5780632ade3880146101485780633e5e3c231461015d575b600080fd5b610128610209565b005b61013261118d565b60405161013f9190617944565b60405180910390f35b6101506111ef565b60405161013f91906179e0565b610132611331565b610132611391565b6101286113f1565b61017d611c4e565b60405161013f9190617b46565b610128611dd0565b61019a6125e8565b60405161013f9190617be4565b6101af6126b8565b60405161013f9190617c5b565b6101286127b3565b6101af612d2f565b61019a612e2a565b6101dc612efa565b604051901515815260200161013f565b610128612fce565b6101326136b0565b601f546101dc9060ff1681565b602680547fffffffffffffffffffffffff00000000000000000000000000000000000000009081163017909155602780548216611234179055602880548216615678179055602e805490911661432117905560405161026790617829565b60408082526004908201527f746573740000000000000000000000000000000000000000000000000000000060608201526080602082018190526003908201527f54544b000000000000000000000000000000000000000000000000000000000060a082015260c001604051809103906000f0801580156102ec573d6000803e3d6000fd5b50602380547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039290921691909117905560405161033190617829565b604080825260049082018190527f7a6574610000000000000000000000000000000000000000000000000000000060608301526080602083018190528201527f5a4554410000000000000000000000000000000000000000000000000000000060a082015260c001604051809103906000f0801580156103b5573d6000803e3d6000fd5b50602480547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039283169081178255604080518082018252600e81527f4761746577617945564d2e736f6c0000000000000000000000000000000000006020820152602854602654925190861694810194909452604484019290925290921660648201526104a6919060840160408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fc0c53b8b00000000000000000000000000000000000000000000000000000000179052613710565b601f80547fffffffffffffffffffffff0000000000000000000000000000000000000000ff166101006001600160a01b0393841681029190911791829055602080549190920483167fffffffffffffffffffffffff0000000000000000000000000000000000000000909116811790915560285460265460405192939182169291169061053290617837565b6001600160a01b03938416815291831660208301529091166040820152606001604051809103906000f08015801561056e573d6000803e3d6000fd5b50602180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392831617905560205460245460285460265460405193851694928316939183169216906105c990617845565b6001600160a01b039485168152928416602084015290831660408301529091166060820152608001604051809103906000f08015801561060d573d6000803e3d6000fd5b50602280547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039283161790556028546040517fc88a5e6d00000000000000000000000000000000000000000000000000000000815291166004820152670de0b6b3a76400006024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c88a5e6d90604401600060405180830381600087803b1580156106b957600080fd5b505af11580156106cd573d6000803e3d6000fd5b50506026546040517f06447d560000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506306447d569150602401600060405180830381600087803b15801561074357600080fd5b505af1158015610757573d6000803e3d6000fd5b50506020546021546040517fae7a3a6f0000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201529116925063ae7a3a6f9150602401600060405180830381600087803b1580156107bd57600080fd5b505af11580156107d1573d6000803e3d6000fd5b50506020546022546040517f10188aef0000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152911692506310188aef9150602401600060405180830381600087803b15801561083757600080fd5b505af115801561084b573d6000803e3d6000fd5b505050507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b03166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156108ad57600080fd5b505af11580156108c1573d6000803e3d6000fd5b50506023546026546040517f40c10f190000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620f42406024820152911692506340c10f199150604401600060405180830381600087803b15801561093057600080fd5b505af1158015610944573d6000803e3d6000fd5b50506023546021546040517fa9059cbb0000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201526207a12060248201529116925063a9059cbb91506044016020604051808303816000875af11580156109b8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109dc9190617cf2565b506040516109e990617853565b604051809103906000f080158015610a05573d6000803e3d6000fd5b50602580547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03928316179055604080518082018252600f81527f476174657761795a45564d2e736f6c0000000000000000000000000000000000602082015260248054602e54935190851691810191909152919092166044820152610aee919060640160408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f485cc95500000000000000000000000000000000000000000000000000000000179052613710565b602980546001600160a01b03929092167fffffffffffffffffffffffff00000000000000000000000000000000000000009283168117909155602a80549092168117909155604051610b3f90617861565b6001600160a01b039091168152602001604051809103906000f080158015610b6b573d6000803e3d6000fd5b50602b80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03929092169190911790556040517f06447d5600000000000000000000000000000000000000000000000000000000815273735b14bb79463307aacbed86daf3322b1e6226ab6004820181905290737109709ecfa91a80626ff3989d68f67f5b1dd12d906306447d5690602401600060405180830381600087803b158015610c2057600080fd5b505af1158015610c34573d6000803e3d6000fd5b505050506000806000604051610c499061786f565b6001600160a01b03938416815291831660208301529091166040820152606001604051809103906000f080158015610c85573d6000803e3d6000fd5b50602c80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03928316908117909155602a54604051601293600193600093849391921690610cdb9061787d565b610cea96959493929190617d14565b604051809103906000f080158015610d06573d6000803e3d6000fd5b50602d80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03928316908117909155602c546040517fee2815ba0000000000000000000000000000000000000000000000000000000081526001600482015260248101929092529091169063ee2815ba90604401600060405180830381600087803b158015610d9d57600080fd5b505af1158015610db1573d6000803e3d6000fd5b5050602c546040517fa7cb050700000000000000000000000000000000000000000000000000000000815260016004820181905260248201526001600160a01b03909116925063a7cb05079150604401600060405180830381600087803b158015610e1b57600080fd5b505af1158015610e2f573d6000803e3d6000fd5b5050602d54602e546040517f47e7ef240000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620f42406024820152911692506347e7ef2491506044016020604051808303816000875af1158015610ea3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ec79190617cf2565b50602d54602b546040517f47e7ef240000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620f424060248201529116906347e7ef24906044016020604051808303816000875af1158015610f38573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f5c9190617cf2565b507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b03166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610fbb57600080fd5b505af1158015610fcf573d6000803e3d6000fd5b5050602e546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b15801561104557600080fd5b505af1158015611059573d6000803e3d6000fd5b5050602d54602a546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620f424060248201529116925063095ea7b391506044016020604051808303816000875af11580156110cd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110f19190617cf2565b506028546040517fc88a5e6d0000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152670de0b6b3a76400006024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c88a5e6d90604401600060405180830381600087803b15801561117257600080fd5b505af1158015611186573d6000803e3d6000fd5b5050505050565b606060168054806020026020016040519081016040528092919081815260200182805480156111e557602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116111c7575b5050505050905090565b6060601e805480602002602001604051908101604052809291908181526020016000905b8282101561132857600084815260208082206040805180820182526002870290920180546001600160a01b03168352600181018054835181870281018701909452808452939591948681019491929084015b8282101561131157838290600052602060002001805461128490617e09565b80601f01602080910402602001604051908101604052809291908181526020018280546112b090617e09565b80156112fd5780601f106112d2576101008083540402835291602001916112fd565b820191906000526020600020905b8154815290600101906020018083116112e057829003601f168201915b505050505081526020019060010190611265565b505050508152505081526020019060010190611213565b50505050905090565b606060188054806020026020016040519081016040528092919081815260200182805480156111e5576020028201919060005260206000209081546001600160a01b031681526001909101906020018083116111c7575050505050905090565b606060178054806020026020016040519081016040528092919081815260200182805480156111e5576020028201919060005260206000209081546001600160a01b031681526001909101906020018083116111c7575050505050905090565b604080518082018252600681527f48656c6c6f2100000000000000000000000000000000000000000000000000006020820152602d54602b5492517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b0393841660048201529192602a92600192670de0b6b3a7640000926000929116906370a0823190602401602060405180830381865afa15801561149d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114c19190617e56565b6040519091506000907fe04d4f9700000000000000000000000000000000000000000000000000000000906114fe90889088908890602401617e6f565b60408051601f19818403018152918152602080830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909516949094179093526025549051919350600092611597926001600160a01b03909216910160609190911b6bffffffffffffffffffffffff1916815260140190565b60408051601f1981840301815290829052602d546115c892620f4240916001600160a01b0316908690602401617e99565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f7993c1e000000000000000000000000000000000000000000000000000000000179052602a5490517ff30c7ba3000000000000000000000000000000000000000000000000000000008152919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f30c7ba391611685916001600160a01b0391909116906000908690600401617ed8565b600060405180830381600087803b15801561169f57600080fd5b505af11580156116b3573d6000803e3d6000fd5b5050602e546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b15801561172957600080fd5b505af115801561173d573d6000803e3d6000fd5b5050602b5460255460405160609190911b6bffffffffffffffffffffffff191660208201526001600160a01b039091169250630abd8905915060340160408051601f1981840301815290829052602d547fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1683526117d792620f4240916001600160a01b0316908d908d908d90600401617f00565b600060405180830381600087803b1580156117f157600080fd5b505af1158015611805573d6000803e3d6000fd5b50506020546040517fc88a5e6d0000000000000000000000000000000000000000000000000000000081526001600160a01b03909116600482015260248101879052737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c88a5e6d9150604401600060405180830381600087803b15801561188257600080fd5b505af1158015611896573d6000803e3d6000fd5b50506025546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b15801561192857600080fd5b505af115801561193c573d6000803e3d6000fd5b50506020546040517f1f1ff1f5fb41346850b2f5c04e6c767e2f1c8a525c5c0c5cdb60cdf3ca5f62fa935061198592506001600160a01b039091169087908b908b908b90617f55565b60405180910390a16020546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b158015611a1b57600080fd5b505af1158015611a2f573d6000803e3d6000fd5b50506025546040516001600160a01b0390911692507fcaf938de11c367272220bfd1d2baa99ca46665e7bc4d85f00adb51b90fe1fa9f9150611a749087908690617f96565b60405180910390a26028546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015611aee57600080fd5b505af1158015611b02573d6000803e3d6000fd5b50506020546025546040517f1cff79cd0000000000000000000000000000000000000000000000000000000081526001600160a01b039283169450631cff79cd93508892611b569216908790600401617faf565b60006040518083038185885af1158015611b74573d6000803e3d6000fd5b50505050506040513d6000823e601f3d908101601f19168201604052611b9d91908101906180b9565b50602d54602b546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260009291909116906370a0823190602401602060405180830381865afa158015611c08573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c2c9190617e56565b9050611c4481611c3f620f42408761811d565b61372f565b5050505050505050565b6060601b805480602002602001604051908101604052809291908181526020016000905b828210156113285783829060005260206000209060020201604051806040016040529081600082018054611ca590617e09565b80601f0160208091040260200160405190810160405280929190818152602001828054611cd190617e09565b8015611d1e5780601f10611cf357610100808354040283529160200191611d1e565b820191906000526020600020905b815481529060010190602001808311611d0157829003601f168201915b5050505050815260200160018201805480602002602001604051908101604052809291908181526020018280548015611db857602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019060040190602082600301049283019260010382029150808411611d655790505b50505050508152505081526020019060010190611c72565b604080518082018252600681527f48656c6c6f21000000000000000000000000000000000000000000000000000060208201529051602a90600190670de0b6b3a7640000906000907fe04d4f970000000000000000000000000000000000000000000000000000000090611e4c90879087908790602401617e6f565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009490941693909317909252602a5491517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b0390921660848301529150737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b158015611f3b57600080fd5b505af1158015611f4f573d6000803e3d6000fd5b5050602e5460255460405160609190911b6bffffffffffffffffffffffff19166020820152600093506001600160a01b0390911691507fde19dbe881cc0aeeb6e73ce19ac7b5ca695e6be8a076e3eb42292005a7fec1b59060340160408051601f19818403018152828252602d547f4d8943bb000000000000000000000000000000000000000000000000000000008452915190926001600160a01b0390921691620f4240916000918491634d8943bb916004808201926020929091908290030181865afa158015612025573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120499190617e56565b8860405161205c96959493929190618130565b60405180910390a3602e546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156120d657600080fd5b505af11580156120ea573d6000803e3d6000fd5b5050602a5460255460405160609190911b6bffffffffffffffffffffffff191660208201526001600160a01b039091169250637993c1e0915060340160408051601f1981840301815290829052602d547fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16835261218092620f4240916001600160a01b0316908790600401618183565b600060405180830381600087803b15801561219a57600080fd5b505af11580156121ae573d6000803e3d6000fd5b5050602d54602e546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260009450911691506370a0823190602401602060405180830381865afa15801561221a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061223e9190617e56565b905061224b81600061372f565b6020546040517fc88a5e6d0000000000000000000000000000000000000000000000000000000081526001600160a01b03909116600482015260248101849052737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c88a5e6d90604401600060405180830381600087803b1580156122c457600080fd5b505af11580156122d8573d6000803e3d6000fd5b50506025546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b15801561236a57600080fd5b505af115801561237e573d6000803e3d6000fd5b50506020546040517f1f1ff1f5fb41346850b2f5c04e6c767e2f1c8a525c5c0c5cdb60cdf3ca5f62fa93506123c792506001600160a01b039091169086908a908a908a90617f55565b60405180910390a16020546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b15801561245d57600080fd5b505af1158015612471573d6000803e3d6000fd5b50506025546040516001600160a01b0390911692507fcaf938de11c367272220bfd1d2baa99ca46665e7bc4d85f00adb51b90fe1fa9f91506124b69086908690617f96565b60405180910390a26028546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561253057600080fd5b505af1158015612544573d6000803e3d6000fd5b50506020546025546040517f1cff79cd0000000000000000000000000000000000000000000000000000000081526001600160a01b039283169450631cff79cd935087926125989216908790600401617faf565b60006040518083038185885af11580156125b6573d6000803e3d6000fd5b50505050506040513d6000823e601f3d908101601f191682016040526125df91908101906180b9565b50505050505050565b6060601a805480602002602001604051908101604052809291908181526020016000905b8282101561132857838290600052602060002001805461262b90617e09565b80601f016020809104026020016040519081016040528092919081815260200182805461265790617e09565b80156126a45780601f10612679576101008083540402835291602001916126a4565b820191906000526020600020905b81548152906001019060200180831161268757829003601f168201915b50505050508152602001906001019061260c565b6060601d805480602002602001604051908101604052809291908181526020016000905b828210156113285760008481526020908190206040805180820182526002860290920180546001600160a01b0316835260018101805483518187028101870190945280845293949193858301939283018282801561279b57602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190600401906020826003010492830192600103820291508084116127485790505b505050505081525050815260200190600101906126dc565b604080518082018252600681527f48656c6c6f21000000000000000000000000000000000000000000000000000060208201529051602a90600190670de0b6b3a76400009082906000907fe04d4f97000000000000000000000000000000000000000000000000000000009061283190889088908690602401617e6f565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009490941693909317909252602e5491517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b0390921660048301529150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561290457600080fd5b505af1158015612918573d6000803e3d6000fd5b5050602a546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b1580156129aa57600080fd5b505af11580156129be573d6000803e3d6000fd5b5050602e5460255460405160609190911b6bffffffffffffffffffffffff191660208201528593506001600160a01b0390911691507f5322ffbbf9261ff1f8138247942d2b03b28717141ef0a0dd080fc4be9c4e78d39060340160408051601f1981840301815290829052612a349186906181bd565b60405180910390a3602a5460255460405160609190911b6bffffffffffffffffffffffff191660208201526001600160a01b0390911690635d40e1789060340160405160208183030381529060405284846040518463ffffffff1660e01b8152600401612aa3939291906181e2565b600060405180830381600087803b158015612abd57600080fd5b505af1158015612ad1573d6000803e3d6000fd5b50506020546040517fc88a5e6d0000000000000000000000000000000000000000000000000000000081526001600160a01b03909116600482015260248101869052737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c88a5e6d9150604401600060405180830381600087803b158015612b4e57600080fd5b505af1158015612b62573d6000803e3d6000fd5b50506020546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b158015612bf457600080fd5b505af1158015612c08573d6000803e3d6000fd5b50506025546040516001600160a01b0390911692507fcaf938de11c367272220bfd1d2baa99ca46665e7bc4d85f00adb51b90fe1fa9f9150612c4d9086908590617f96565b60405180910390a26028546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015612cc757600080fd5b505af1158015612cdb573d6000803e3d6000fd5b50506020546025546040517f1cff79cd0000000000000000000000000000000000000000000000000000000081526001600160a01b039283169450631cff79cd935087926125989216908690600401617faf565b6060601c805480602002602001604051908101604052809291908181526020016000905b828210156113285760008481526020908190206040805180820182526002860290920180546001600160a01b03168352600181018054835181870281018701909452808452939491938583019392830182828015612e1257602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019060040190602082600301049283019260010382029150808411612dbf5790505b50505050508152505081526020019060010190612d53565b60606019805480602002602001604051908101604052809291908181526020016000905b82821015611328578382906000526020600020018054612e6d90617e09565b80601f0160208091040260200160405190810160405280929190818152602001828054612e9990617e09565b8015612ee65780601f10612ebb57610100808354040283529160200191612ee6565b820191906000526020600020905b815481529060010190602001808311612ec957829003601f168201915b505050505081526020019060010190612e4e565b60085460009060ff1615612f12575060085460ff1690565b6040517f667f9d70000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d600482018190527f6661696c65640000000000000000000000000000000000000000000000000000602483015260009163667f9d7090604401602060405180830381865afa158015612fa3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612fc79190617e56565b1415905090565b604080518082018252600681527f48656c6c6f21000000000000000000000000000000000000000000000000000060208201529051602a90600190670de0b6b3a76400009082906000907fe04d4f97000000000000000000000000000000000000000000000000000000009061304c90889088908690602401617e6f565b60408051601f19818403018152918152602080830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009095169490941790935260255490519193506000926130e5926001600160a01b03909216910160609190911b6bffffffffffffffffffffffff1916815260140190565b60408051601f198184030181529082905261310691859085906024016181e2565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f5d40e17800000000000000000000000000000000000000000000000000000000179052602a5490517ff30c7ba3000000000000000000000000000000000000000000000000000000008152919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f30c7ba3916131c3916001600160a01b0391909116906000908690600401617ed8565b600060405180830381600087803b1580156131dd57600080fd5b505af11580156131f1573d6000803e3d6000fd5b5050602e546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b15801561326757600080fd5b505af115801561327b573d6000803e3d6000fd5b5050602b5460255460405160609190911b6bffffffffffffffffffffffff191660208201526001600160a01b03909116925063865b36f69150603401604051602081830303815290604052858a8a8a6040518663ffffffff1660e01b81526004016132ea95949392919061820d565b600060405180830381600087803b15801561330457600080fd5b505af1158015613318573d6000803e3d6000fd5b50506020546040517fc88a5e6d0000000000000000000000000000000000000000000000000000000081526001600160a01b03909116600482015260248101879052737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c88a5e6d9150604401600060405180830381600087803b15801561339557600080fd5b505af11580156133a9573d6000803e3d6000fd5b50506025546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b15801561343b57600080fd5b505af115801561344f573d6000803e3d6000fd5b50506020546040517f1f1ff1f5fb41346850b2f5c04e6c767e2f1c8a525c5c0c5cdb60cdf3ca5f62fa935061349892506001600160a01b039091169087908b908b908b90617f55565b60405180910390a16020546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b15801561352e57600080fd5b505af1158015613542573d6000803e3d6000fd5b50506025546040516001600160a01b0390911692507fcaf938de11c367272220bfd1d2baa99ca46665e7bc4d85f00adb51b90fe1fa9f91506135879087908690617f96565b60405180910390a26028546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561360157600080fd5b505af1158015613615573d6000803e3d6000fd5b50506020546025546040517f1cff79cd0000000000000000000000000000000000000000000000000000000081526001600160a01b039283169450631cff79cd935088926136699216908790600401617faf565b60006040518083038185885af1158015613687573d6000803e3d6000fd5b50505050506040513d6000823e601f3d908101601f19168201604052611c4491908101906180b9565b606060158054806020026020016040519081016040528092919081815260200182805480156111e5576020028201919060005260206000209081546001600160a01b031681526001909101906020018083116111c7575050505050905090565b600061371a61788b565b6137258484836137b6565b9150505b92915050565b6040517f98296c540000000000000000000000000000000000000000000000000000000081526004810183905260248101829052737109709ecfa91a80626ff3989d68f67f5b1dd12d906398296c549060440160006040518083038186803b15801561379a57600080fd5b505afa1580156137ae573d6000803e3d6000fd5b505050505050565b6000806137c38584613831565b90506138266040518060400160405280601d81526020017f4552433139363750726f78792e736f6c3a4552433139363750726f78790000008152508286604051602001613811929190617faf565b6040516020818303038152906040528561383d565b9150505b9392505050565b600061382a838361386b565b60c081015151600090156138615761385a84848460c00151613886565b905061382a565b61385a8484613a2c565b60006138778383613b17565b61382a8383602001518461383d565b600080613891613b27565b9050600061389f8683613bfa565b905060006138b682606001518360200151856140a0565b905060006138c6838389896142b2565b905060006138d38261512f565b602081015181519192509060030b15613946578982604001516040516020016138fd929190618252565b60408051601f19818403018152908290527f08c379a000000000000000000000000000000000000000000000000000000000825261393d916004016182d3565b60405180910390fd5b60006139896040518060400160405280601581526020017f4465706c6f79656420746f20616464726573733a2000000000000000000000008152508360016152fe565b6040517fc6ce059d000000000000000000000000000000000000000000000000000000008152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c6ce059d906139dc9084906004016182d3565b602060405180830381865afa1580156139f9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a1d91906182e6565b9b9a5050505050505050505050565b6040517f8d1cc9250000000000000000000000000000000000000000000000000000000081526000908190737109709ecfa91a80626ff3989d68f67f5b1dd12d90638d1cc92590613a819087906004016182d3565b600060405180830381865afa158015613a9e573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052613ac691908101906180b9565b90506000613af48285604051602001613ae092919061830f565b6040516020818303038152906040526154fe565b90506001600160a01b0381166137255784846040516020016138fd92919061833e565b613b2382826000615511565b5050565b604080518082018252600381527f6f75740000000000000000000000000000000000000000000000000000000000602082015290517fd145736c000000000000000000000000000000000000000000000000000000008152606091737109709ecfa91a80626ff3989d68f67f5b1dd12d91829063d145736c90613bae9084906004016183e9565b600060405180830381865afa158015613bcb573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052613bf39190810190618430565b9250505090565b613c2c6040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b6000737109709ecfa91a80626ff3989d68f67f5b1dd12d9050613c776040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b613c8085615614565b60208201526000613c90866159f9565b90506000836001600160a01b031663d930a0e66040518163ffffffff1660e01b8152600401600060405180830381865afa158015613cd2573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052613cfa9190810190618430565b86838560200151604051602001613d149493929190618479565b60408051601f19818403018152908290527f60f9bb1100000000000000000000000000000000000000000000000000000000825291506000906001600160a01b038616906360f9bb1190613d6c9085906004016182d3565b600060405180830381865afa158015613d89573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052613db19190810190618430565b6040517fdb4235f60000000000000000000000000000000000000000000000000000000081529091506001600160a01b0386169063db4235f690613df990849060040161857d565b602060405180830381865afa158015613e16573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613e3a9190617cf2565b613e4f57816040516020016138fd91906185cf565b6040517f49c4fac80000000000000000000000000000000000000000000000000000000081526001600160a01b038616906349c4fac890613e94908490600401618661565b600060405180830381865afa158015613eb1573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052613ed99190810190618430565b84526040517fdb4235f60000000000000000000000000000000000000000000000000000000081526001600160a01b0386169063db4235f690613f209084906004016186b3565b602060405180830381865afa158015613f3d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613f619190617cf2565b15613ff6576040517f49c4fac80000000000000000000000000000000000000000000000000000000081526001600160a01b038616906349c4fac890613fab9084906004016186b3565b600060405180830381865afa158015613fc8573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052613ff09190810190618430565b60408501525b846001600160a01b03166349c4fac882866000015160405160200161401b9190618705565b6040516020818303038152906040526040518363ffffffff1660e01b81526004016140479291906181bd565b600060405180830381865afa158015614064573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261408c9190810190618430565b606085015250608083015250949350505050565b60408051600480825260a0820190925260609160009190816020015b60608152602001906001900390816140bc5790505090506040518060400160405280600481526020017f67726570000000000000000000000000000000000000000000000000000000008152508160008151811061411c5761411c618771565b60200260200101819052506040518060400160405280600381526020017f2d726c00000000000000000000000000000000000000000000000000000000008152508160018151811061417057614170618771565b60200260200101819052508460405160200161418c91906187a0565b604051602081830303815290604052816002815181106141ae576141ae618771565b6020026020010181905250826040516020016141ca919061880c565b604051602081830303815290604052816003815181106141ec576141ec618771565b602002602001018190525060006142028261512f565b602080820151604080518082018252600581527f2e6a736f6e00000000000000000000000000000000000000000000000000000081850190815282518084018452600080825290860152825180840190935290518252928101929092529192506142939060408051808201825260008082526020918201528151808301909252845182528085019082015290615c7c565b6142a857856040516020016138fd919061884d565b9695505050505050565b60a0810151604080518082018252600080825260209182015281518083019092528251808352928101910152606090737109709ecfa91a80626ff3989d68f67f5b1dd12d9015614302565b511590565b614476578260200151156143be576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605860248201527f54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f742060448201527f62652075736564207768656e207468652060736b6970566572696679536f757260648201527f6365436f646560206f7074696f6e206973206074727565600000000000000000608482015260a40161393d565b8260c0015115614476576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605360248201527f54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f742060448201527f62652075736564207768656e207468652060736b69704c6963656e736554797060648201527f6560206f7074696f6e2069732060747275656000000000000000000000000000608482015260a40161393d565b6040805160ff8082526120008201909252600091816020015b606081526020019060019003908161448f57905050905060006040518060400160405280600381526020017f6e707800000000000000000000000000000000000000000000000000000000008152508282806144ea906188de565b935060ff16815181106144ff576144ff618771565b60200260200101819052506040518060400160405280600d81526020017f302e302e312d616c7068612e370000000000000000000000000000000000000081525060405160200161455091906188fd565b60405160208183030381529060405282828061456b906188de565b935060ff168151811061458057614580618771565b60200260200101819052506040518060400160405280600681526020017f6465706c6f7900000000000000000000000000000000000000000000000000008152508282806145cd906188de565b935060ff16815181106145e2576145e2618771565b60200260200101819052506040518060400160405280600e81526020017f2d2d636f6e74726163744e616d6500000000000000000000000000000000000081525082828061462f906188de565b935060ff168151811061464457614644618771565b60200260200101819052508760200151828280614660906188de565b935060ff168151811061467557614675618771565b60200260200101819052506040518060400160405280600e81526020017f2d2d636f6e7472616374506174680000000000000000000000000000000000008152508282806146c2906188de565b935060ff16815181106146d7576146d7618771565b6020908102919091010152875182826146ef816188de565b935060ff168151811061470457614704618771565b60200260200101819052506040518060400160405280600981526020017f2d2d636861696e49640000000000000000000000000000000000000000000000815250828280614751906188de565b935060ff168151811061476657614766618771565b602002602001018190525061477a46615cdd565b8282614785816188de565b935060ff168151811061479a5761479a618771565b60200260200101819052506040518060400160405280600f81526020017f2d2d6275696c64496e666f46696c6500000000000000000000000000000000008152508282806147e7906188de565b935060ff16815181106147fc576147fc618771565b602002602001018190525086828280614814906188de565b935060ff168151811061482957614829618771565b60209081029190910101528551156149505760408051808201909152601581527f2d2d636f6e7374727563746f7242797465636f646500000000000000000000006020820152828261487a816188de565b935060ff168151811061488f5761488f618771565b60209081029190910101526040517f71aad10d0000000000000000000000000000000000000000000000000000000081526001600160a01b038416906371aad10d906148df9089906004016182d3565b600060405180830381865afa1580156148fc573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526149249190810190618430565b828261492f816188de565b935060ff168151811061494457614944618771565b60200260200101819052505b846020015115614a205760408051808201909152601281527f2d2d766572696679536f75726365436f6465000000000000000000000000000060208201528282614999816188de565b935060ff16815181106149ae576149ae618771565b60200260200101819052506040518060400160405280600581526020017f66616c73650000000000000000000000000000000000000000000000000000008152508282806149fb906188de565b935060ff1681518110614a1057614a10618771565b6020026020010181905250614be7565b614a586142fd8660a0015160408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b614aeb5760408051808201909152600d81527f2d2d6c6963656e7365547970650000000000000000000000000000000000000060208201528282614a9b816188de565b935060ff1681518110614ab057614ab0618771565b60200260200101819052508460a00151604051602001614ad091906187a0565b6040516020818303038152906040528282806149fb906188de565b8460c00151158015614b2e575060408089015181518083018352600080825260209182015282518084019093528151835290810190820152614b2c90511590565b155b15614be75760408051808201909152600d81527f2d2d6c6963656e7365547970650000000000000000000000000000000000000060208201528282614b72816188de565b935060ff1681518110614b8757614b87618771565b6020026020010181905250614b9b88615d7d565b604051602001614bab91906187a0565b604051602081830303815290604052828280614bc6906188de565b935060ff1681518110614bdb57614bdb618771565b60200260200101819052505b60408086015181518083018352600080825260209182015282518084019093528151835290810190820152614c1b90511590565b614cb05760408051808201909152600b81527f2d2d72656c61796572496400000000000000000000000000000000000000000060208201528282614c5e816188de565b935060ff1681518110614c7357614c73618771565b60200260200101819052508460400151828280614c8f906188de565b935060ff1681518110614ca457614ca4618771565b60200260200101819052505b606085015115614dd15760408051808201909152600681527f2d2d73616c74000000000000000000000000000000000000000000000000000060208201528282614cf9816188de565b935060ff1681518110614d0e57614d0e618771565b602090810291909101015260608501516040517fb11a19e800000000000000000000000000000000000000000000000000000000815260048101919091526001600160a01b0384169063b11a19e890602401600060405180830381865afa158015614d7d573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052614da59190810190618430565b8282614db0816188de565b935060ff1681518110614dc557614dc5618771565b60200260200101819052505b60e08501515115614e785760408051808201909152600a81527f2d2d6761734c696d69740000000000000000000000000000000000000000000060208201528282614e1b816188de565b935060ff1681518110614e3057614e30618771565b6020026020010181905250614e4c8560e0015160000151615cdd565b8282614e57816188de565b935060ff1681518110614e6c57614e6c618771565b60200260200101819052505b60e08501516020015115614f225760408051808201909152600a81527f2d2d67617350726963650000000000000000000000000000000000000000000060208201528282614ec5816188de565b935060ff1681518110614eda57614eda618771565b6020026020010181905250614ef68560e0015160200151615cdd565b8282614f01816188de565b935060ff1681518110614f1657614f16618771565b60200260200101819052505b60e08501516040015115614fcc5760408051808201909152600e81527f2d2d6d617846656550657247617300000000000000000000000000000000000060208201528282614f6f816188de565b935060ff1681518110614f8457614f84618771565b6020026020010181905250614fa08560e0015160400151615cdd565b8282614fab816188de565b935060ff1681518110614fc057614fc0618771565b60200260200101819052505b60e085015160600151156150765760408051808201909152601681527f2d2d6d61785072696f726974794665655065724761730000000000000000000060208201528282615019816188de565b935060ff168151811061502e5761502e618771565b602002602001018190525061504a8560e0015160600151615cdd565b8282615055816188de565b935060ff168151811061506a5761506a618771565b60200260200101819052505b60008160ff1667ffffffffffffffff81111561509457615094617fd1565b6040519080825280602002602001820160405280156150c757816020015b60608152602001906001900390816150b25790505b50905060005b8260ff168160ff16101561512057838160ff16815181106150f0576150f0618771565b6020026020010151828260ff168151811061510d5761510d618771565b60209081029190910101526001016150cd565b5093505050505b949350505050565b6151566040518060600160405280600060030b815260200160608152602001606081525090565b60408051808201825260048082527f6261736800000000000000000000000000000000000000000000000000000000602083015291517fd145736c000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d92600091849163d145736c916151dc91869101618968565b600060405180830381865afa1580156151f9573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526152219190810190618430565b9050600061522f868361686c565b90506000846001600160a01b031663f45c1ce7836040518263ffffffff1660e01b815260040161525f9190617be4565b6000604051808303816000875af115801561527e573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526152a691908101906189af565b805190915060030b158015906152bf5750602081015151155b80156152ce5750604081015151155b156142a857816000815181106152e6576152e6618771565b60200260200101516040516020016138fd9190618a65565b606060006153338560408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b60408051808201825260008082526020918201528151808301909252865182528087019082015290915061536a9082905b906169c1565b156154c75760006153e7826153e1846153db6153ad8a60408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6040805180820182526000808252602091820152815180830190925282518252918201519181019190915290565b906169e8565b90616a4a565b604080518082018252600181527f0a000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015290915061544b9082906169c1565b156154b557604080518082018252600181527f0a00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526154b2905b8290616acf565b90505b6154be81616af5565b9250505061382a565b82156154e05784846040516020016138fd929190618c51565b505060408051602081019091526000815261382a565b509392505050565b6000808251602084016000f09392505050565b8160a001511561552057505050565b600061552d848484616b5e565b9050600061553a8261512f565b602081015181519192509060030b1580156155d65750604080518082018252600781527f5355434345535300000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526155d690604080518082018252600080825260209182015281518083019092528451825280850190820152615364565b156155e357505050505050565b604082015151156156035781604001516040516020016138fd9190618cf8565b806040516020016138fd9190618d56565b606060006156498360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600481527f2e736f6c00000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201529091506156ae905b8290615c7c565b1561571d57604080518082018252600481527f2e736f6c000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261382a906157189083906170f9565b616af5565b604080518082018252600181527f3a000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261577f905b8290617183565b60010361584c57604080518082018252600181527f3a00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526157e5906154ab565b50604080518082018252600181527f3a000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261382a90615718905b8390616acf565b604080518082018252600581527f2e6a736f6e000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526158ab906156a7565b156159e257604080518082018252600181527f2f0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082018190528451808601909552925184528301529061591390839061721d565b905060008160018351615926919061811d565b8151811061593657615936618771565b602002602001015190506159d96157186159ac6040518060400160405280600581526020017f2e6a736f6e00000000000000000000000000000000000000000000000000000081525060408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600080825260209182015281518083019092528551825280860190820152906170f9565b95945050505050565b826040516020016138fd9190618dc1565b50919050565b60606000615a2e8360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600481527f2e736f6c0000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152909150615a90906156a7565b15615a9e5761382a81616af5565b604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152615afd90615778565b600103615b6757604080518082018252600181527f3a000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261382a9061571890615845565b604080518082018252600581527f2e6a736f6e00000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152615bc6906156a7565b156159e257604080518082018252600181527f2f00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820181905284518086019095529251845283015290615c2e90839061721d565b9050600181511115615c6a578060028251615c49919061811d565b81518110615c5957615c59618771565b602002602001015192505050919050565b50826040516020016138fd9190618dc1565b805182516000911115615c9157506000613729565b81518351602085015160009291615ca791618e9f565b615cb1919061811d565b905082602001518103615cc8576001915050613729565b82516020840151819020912014905092915050565b60606000615cea836172c2565b600101905060008167ffffffffffffffff811115615d0a57615d0a617fd1565b6040519080825280601f01601f191660200182016040528015615d34576020820181803683370190505b5090508181016020015b600019017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a8504945084615d3e57509392505050565b604081810151815180830183526000808252602091820181905283518085018552835181529282018383015283518085018552600a81527f554e4c4943454e5345440000000000000000000000000000000000000000000081840190815285518087018752838152840192909252845180860190955251845290830152606091615e09905b82906173a4565b15615e4957505060408051808201909152600481527f4e6f6e65000000000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600981527f556e6c6963656e7365000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152615ea890615e02565b15615ee857505060408051808201909152600981527f556e6c6963656e736500000000000000000000000000000000000000000000006020820152919050565b604080518082018252600381527f4d4954000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152615f4790615e02565b15615f8757505060408051808201909152600381527f4d495400000000000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f47504c2d322e302d6f6e6c79000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152615fe690615e02565b8061604b5750604080518082018252601081527f47504c2d322e302d6f722d6c61746572000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261604b90615e02565b1561608b57505060408051808201909152600981527f474e552047504c763200000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f47504c2d332e302d6f6e6c790000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526160ea90615e02565b8061614f5750604080518082018252601081527f47504c2d332e302d6f722d6c61746572000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261614f90615e02565b1561618f57505060408051808201909152600981527f474e552047504c763300000000000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4c47504c2d322e312d6f6e6c7900000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526161ee90615e02565b806162535750604080518082018252601181527f4c47504c2d322e312d6f722d6c617465720000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261625390615e02565b1561629357505060408051808201909152600c81527f474e55204c47504c76322e3100000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4c47504c2d332e302d6f6e6c7900000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526162f290615e02565b806163575750604080518082018252601181527f4c47504c2d332e302d6f722d6c617465720000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261635790615e02565b1561639757505060408051808201909152600a81527f474e55204c47504c7633000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f4253442d322d436c617573650000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526163f690615e02565b1561643657505060408051808201909152600c81527f4253442d322d436c6175736500000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f4253442d332d436c6175736500000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261649590615e02565b156164d557505060408051808201909152600c81527f4253442d332d436c6175736500000000000000000000000000000000000000006020820152919050565b604080518082018252600781527f4d504c2d322e30000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261653490615e02565b1561657457505060408051808201909152600781527f4d504c2d322e30000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600781527f4f534c2d332e3000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526165d390615e02565b1561661357505060408051808201909152600781527f4f534c2d332e30000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600a81527f4170616368652d322e30000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261667290615e02565b156166b257505060408051808201909152600a81527f4170616368652d322e30000000000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4147504c2d332e302d6f6e6c79000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261671190615e02565b806167765750604080518082018252601181527f4147504c2d332e302d6f722d6c617465720000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261677690615e02565b156167b657505060408051808201909152600a81527f474e55204147504c7633000000000000000000000000000000000000000000006020820152919050565b604080518082018252600881527f4255534c2d312e310000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261681590615e02565b1561685557505060408051808201909152600781527f42534c20312e31000000000000000000000000000000000000000000000000006020820152919050565b604080840151845191516138fd9290602001618eb2565b60608060005b84518110156168f7578185828151811061688e5761688e618771565b60200260200101516040516020016168a792919061830f565b6040516020818303038152906040529150600185516168c6919061811d565b81146168ef57816040516020016168dd919061901b565b60405160208183030381529060405291505b600101616872565b5060408051600380825260808201909252600091816020015b6060815260200190600190039081616910579050509050838160008151811061693b5761693b618771565b60200260200101819052506040518060400160405280600281526020017f2d630000000000000000000000000000000000000000000000000000000000008152508160018151811061698f5761698f618771565b602002602001018190525081816002815181106169ae576169ae618771565b6020908102919091010152949350505050565b60208083015183518351928401516000936169df92918491906173b8565b14159392505050565b60408051808201909152600080825260208201526000616a1a84600001518560200151856000015186602001516174c9565b9050836020015181616a2c919061811d565b84518590616a3b90839061811d565b90525060208401525090919050565b6040805180820190915260008082526020820152815183511015616a6f575081613729565b6020808301519084015160019114616a965750815160208481015190840151829020919020145b8015616ac757825184518590616aad90839061811d565b9052508251602085018051616ac3908390618e9f565b9052505b509192915050565b6040805180820190915260008082526020820152616aee8383836175e9565b5092915050565b60606000826000015167ffffffffffffffff811115616b1657616b16617fd1565b6040519080825280601f01601f191660200182016040528015616b40576020820181803683370190505b5090506000602082019050616aee8185602001518660000151617694565b60606000616b6a613b27565b6040805160ff808252612000820190925291925060009190816020015b6060815260200190600190039081616b8757905050905060006040518060400160405280600381526020017f6e70780000000000000000000000000000000000000000000000000000000000815250828280616be2906188de565b935060ff1681518110616bf757616bf7618771565b60200260200101819052506040518060400160405280600781526020017f5e312e33322e3300000000000000000000000000000000000000000000000000815250604051602001616c48919061905c565b604051602081830303815290604052828280616c63906188de565b935060ff1681518110616c7857616c78618771565b60200260200101819052506040518060400160405280600881526020017f76616c6964617465000000000000000000000000000000000000000000000000815250828280616cc5906188de565b935060ff1681518110616cda57616cda618771565b602002602001018190525082604051602001616cf6919061880c565b604051602081830303815290604052828280616d11906188de565b935060ff1681518110616d2657616d26618771565b60200260200101819052506040518060400160405280600a81526020017f2d2d636f6e747261637400000000000000000000000000000000000000000000815250828280616d73906188de565b935060ff1681518110616d8857616d88618771565b6020026020010181905250616d9d878461770e565b8282616da8816188de565b935060ff1681518110616dbd57616dbd618771565b602090810291909101015285515115616e695760408051808201909152600b81527f2d2d7265666572656e636500000000000000000000000000000000000000000060208201528282616e0f816188de565b935060ff1681518110616e2457616e24618771565b6020026020010181905250616e3d86600001518461770e565b8282616e48816188de565b935060ff1681518110616e5d57616e5d618771565b60200260200101819052505b856080015115616ed75760408051808201909152601881527f2d2d756e73616665536b697053746f72616765436865636b000000000000000060208201528282616eb2816188de565b935060ff1681518110616ec757616ec7618771565b6020026020010181905250616f3d565b8415616f3d5760408051808201909152601281527f2d2d726571756972655265666572656e6365000000000000000000000000000060208201528282616f1c816188de565b935060ff1681518110616f3157616f31618771565b60200260200101819052505b60408601515115616fd95760408051808201909152600d81527f2d2d756e73616665416c6c6f770000000000000000000000000000000000000060208201528282616f87816188de565b935060ff1681518110616f9c57616f9c618771565b60200260200101819052508560400151828280616fb8906188de565b935060ff1681518110616fcd57616fcd618771565b60200260200101819052505b8560600151156170435760408051808201909152601481527f2d2d756e73616665416c6c6f7752656e616d657300000000000000000000000060208201528282617022816188de565b935060ff168151811061703757617037618771565b60200260200101819052505b60008160ff1667ffffffffffffffff81111561706157617061617fd1565b60405190808252806020026020018201604052801561709457816020015b606081526020019060019003908161707f5790505b50905060005b8260ff168160ff1610156170ed57838160ff16815181106170bd576170bd618771565b6020026020010151828260ff16815181106170da576170da618771565b602090810291909101015260010161709a565b50979650505050505050565b604080518082019091526000808252602082015281518351101561711e575081613729565b8151835160208501516000929161713491618e9f565b61713e919061811d565b6020840151909150600190821461715f575082516020840151819020908220145b801561717a5783518551869061717690839061811d565b9052505b50929392505050565b60008082600001516171a785600001518660200151866000015187602001516174c9565b6171b19190618e9f565b90505b835160208501516171c59190618e9f565b8111616aee57816171d5816190a1565b925050826000015161720c8560200151836171f0919061811d565b86516171fc919061811d565b83866000015187602001516174c9565b6172169190618e9f565b90506171b4565b6060600061722b8484617183565b617236906001618e9f565b67ffffffffffffffff81111561724e5761724e617fd1565b60405190808252806020026020018201604052801561728157816020015b606081526020019060019003908161726c5790505b50905060005b81518110156154f65761729d6157188686616acf565b8282815181106172af576172af618771565b6020908102919091010152600101617287565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000831061730b577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310617337576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc10000831061735557662386f26fc10000830492506010015b6305f5e100831061736d576305f5e100830492506008015b612710831061738157612710830492506004015b60648310617393576064830492506002015b600a83106137295760010192915050565b60006173b0838361774e565b159392505050565b6000808584116174bf576020841161746b57600084156174035760016173df86602061811d565b6173ea9060086190bb565b6173f59060026191b9565b6173ff919061811d565b1990505b83518116856174128989618e9f565b61741c919061811d565b805190935082165b8181146174565787841161743e5787945050505050615127565b83617448816191c5565b945050828451169050617424565b6174608785618e9f565b945050505050615127565b838320617478858861811d565b6174829087618e9f565b91505b8582106174bd578482208082036174aa576174a08684618e9f565b9350505050615127565b6174b560018461811d565b925050617485565b505b5092949350505050565b600083818685116175d4576020851161758357600085156175155760016174f187602061811d565b6174fc9060086190bb565b6175079060026191b9565b617511919061811d565b1990505b845181166000876175268b8b618e9f565b617530919061811d565b855190915083165b8281146175755781861061755d576175508b8b618e9f565b9650505050505050615127565b85617567816190a1565b965050838651169050617538565b859650505050505050615127565b508383206000905b617595868961811d565b82116175d2578583208082036175b15783945050505050615127565b6175bc600185618e9f565b93505081806175ca906190a1565b92505061758b565b505b6175de8787618e9f565b979650505050505050565b6040805180820190915260008082526020820152600061761b85600001518660200151866000015187602001516174c9565b602080870180519186019190915251909150617637908261811d565b83528451602086015161764a9190618e9f565b8103617659576000855261768b565b835183516176679190618e9f565b8551869061767690839061811d565b90525083516176859082618e9f565b60208601525b50909392505050565b602081106176cc57815183526176ab602084618e9f565b92506176b8602083618e9f565b91506176c560208261811d565b9050617694565b60001981156176fb5760016176e283602061811d565b6176ee906101006191b9565b6176f8919061811d565b90505b9151835183169219169190911790915250565b6060600061771c8484613bfa565b8051602080830151604051939450617736939091016191dc565b60405160208183030381529060405291505092915050565b8151815160009190811115617761575081515b6020808501519084015160005b8381101561781a57825182518082146177ea5760001960208710156177c95760018461779b89602061811d565b6177a59190618e9f565b6177b09060086190bb565b6177bb9060026191b9565b6177c5919061811d565b1990505b81811683821681810391146177e75797506137299650505050505050565b50505b6177f5602086618e9f565b9450617802602085618e9f565b935050506020816178139190618e9f565b905061776e565b50845186516142a89190619234565b610c9f806200925583390190565b6116fe8062009ef483390190565b61155a806200b5f283390190565b610d5e806200cb4c83390190565b61080c806200d8aa83390190565b610b3f806200e0b683390190565b611bb9806200ebf583390190565b6040518060e001604052806060815260200160608152602001606081526020016000151581526020016000151581526020016000151581526020016178ce6178d3565b905290565b604051806101000160405280600015158152602001600015158152602001606081526020016000801916815260200160608152602001606081526020016000151581526020016178ce6040518060800160405280600081526020016000815260200160008152602001600081525090565b602080825282518282018190526000918401906040840190835b818110156179855783516001600160a01b031683526020938401939092019160010161795e565b509095945050505050565b60005b838110156179ab578181015183820152602001617993565b50506000910152565b600081518084526179cc816020860160208601617990565b601f01601f19169290920160200192915050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015617adc577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452815180516001600160a01b03168652602090810151604082880181905281519088018190529101906060600582901b88018101919088019060005b81811015617ac2577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa08a8503018352617aac8486516179b4565b6020958601959094509290920191600101617a72565b509197505050602094850194929092019150600101617a08565b50929695505050505050565b600081518084526020840193506020830160005b82811015617b3c5781517fffffffff0000000000000000000000000000000000000000000000000000000016865260209586019590910190600101617afc565b5093949350505050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015617adc577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08786030184528151805160408752617bb260408801826179b4565b9050602082015191508681036020880152617bcd8183617ae8565b965050506020938401939190910190600101617b6e565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015617adc577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452617c468583516179b4565b94506020938401939190910190600101617c0c565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015617adc577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc087860301845281516001600160a01b0381511686526020810151905060406020870152617cdc6040870182617ae8565b9550506020938401939190910190600101617c83565b600060208284031215617d0457600080fd5b8151801515811461382a57600080fd5b610100815260056101008201527f544f4b454e000000000000000000000000000000000000000000000000000000610120820152610140602082015260036101408201527f544b4e000000000000000000000000000000000000000000000000000000000061016082015260006101808201905060ff8816604083015286606083015260038610617dce577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b8560808301528460a0830152617def60c08301856001600160a01b03169052565b6001600160a01b03831660e0830152979650505050505050565b600181811c90821680617e1d57607f821691505b6020821081036159f3577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060208284031215617e6857600080fd5b5051919050565b606081526000617e8260608301866179b4565b602083019490945250901515604090910152919050565b608081526000617eac60808301876179b4565b62ffffff861660208401526001600160a01b038516604084015282810360608401526175de81856179b4565b6001600160a01b03841681528260208201526060604082015260006159d960608301846179b4565b60c081526000617f1360c08301896179b4565b8760208401526001600160a01b03871660408401528281036060840152617f3a81876179b4565b6080840195909552505090151560a090910152949350505050565b6001600160a01b038616815284602082015260a060408201526000617f7d60a08301866179b4565b6060830194909452509015156080909101529392505050565b82815260406020820152600061512760408301846179b4565b6001600160a01b038316815260406020820152600061512760408301846179b4565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040516060810167ffffffffffffffff8111828210171561802357618023617fd1565b60405290565b60008067ffffffffffffffff84111561804457618044617fd1565b50604051601f19601f85018116603f0116810181811067ffffffffffffffff8211171561807357618073617fd1565b60405283815290508082840185101561808b57600080fd5b6154f6846020830185617990565b600082601f8301126180aa57600080fd5b61382a83835160208501618029565b6000602082840312156180cb57600080fd5b815167ffffffffffffffff8111156180e257600080fd5b61372584828501618099565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b81810381811115613729576137296180ee565b60c08152600061814360c08301896179b4565b6001600160a01b038816602084015286604084015285606084015284608084015282810360a084015261817681856179b4565b9998505050505050505050565b60808152600061819660808301876179b4565b8560208401526001600160a01b038516604084015282810360608401526175de81856179b4565b6040815260006181d060408301856179b4565b828103602084015261382681856179b4565b6060815260006181f560608301866179b4565b84602084015282810360408401526142a881856179b4565b60a08152600061822060a08301886179b4565b866020840152828103604084015261823881876179b4565b606084019590955250509015156080909101529392505050565b7f4661696c656420746f206465706c6f7920636f6e74726163742000000000000081526000835161828a81601a850160208801617990565b7f3a20000000000000000000000000000000000000000000000000000000000000601a9184019182015283516182c781601c840160208801617990565b01601c01949350505050565b60208152600061382a60208301846179b4565b6000602082840312156182f857600080fd5b81516001600160a01b038116811461382a57600080fd5b60008351618321818460208801617990565b835190830190618335818360208801617990565b01949350505050565b7f4661696c656420746f206465706c6f7920636f6e74726163742000000000000081526000835161837681601a850160208801617990565b7f207573696e6720636f6e7374727563746f722064617461202200000000000000601a9184019182015283516183b3816033840160208801617990565b7f220000000000000000000000000000000000000000000000000000000000000060339290910191820152603401949350505050565b60408152600b60408201527f464f554e4452595f4f5554000000000000000000000000000000000000000000606082015260806020820152600061382a60808301846179b4565b60006020828403121561844257600080fd5b815167ffffffffffffffff81111561845957600080fd5b8201601f8101841361846a57600080fd5b61372584825160208401618029565b6000855161848b818460208a01617990565b7f2f0000000000000000000000000000000000000000000000000000000000000090830190815285516184c5816001840160208a01617990565b7f2f00000000000000000000000000000000000000000000000000000000000000600192909101918201528451618503816002840160208901617990565b6001818301019150507f2f0000000000000000000000000000000000000000000000000000000000000060018201528351618545816002840160208801617990565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600292909101918201526007019695505050505050565b60408152600061859060408301846179b4565b8281036020840152600481527f2e6173740000000000000000000000000000000000000000000000000000000060208201526040810191505092915050565b7f436f756c64206e6f742066696e642041535420696e206172746966616374200081526000825161860781601f850160208701617990565b7f2e205365742060617374203d20747275656020696e20666f756e6472792e746f601f9390910192830152507f6d6c000000000000000000000000000000000000000000000000000000000000603f820152604101919050565b60408152600061867460408301846179b4565b8281036020840152601181527f2e6173742e6162736f6c7574655061746800000000000000000000000000000060208201526040810191505092915050565b6040815260006186c660408301846179b4565b8281036020840152600c81527f2e6173742e6c6963656e7365000000000000000000000000000000000000000060208201526040810191505092915050565b7f2e6d657461646174612e736f75726365732e5b2700000000000000000000000081526000825161873d816014850160208701617990565b7f275d2e6b656363616b32353600000000000000000000000000000000000000006014939091019283015250602001919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f22000000000000000000000000000000000000000000000000000000000000008152600082516187d8816001850160208701617990565b7f22000000000000000000000000000000000000000000000000000000000000006001939091019283015250600201919050565b6000825161881e818460208701617990565b7f2f6275696c642d696e666f000000000000000000000000000000000000000000920191825250600b01919050565b7f436f756c64206e6f742066696e64206275696c642d696e666f2066696c65207781527f697468206d61746368696e6720736f7572636520636f6465206861736820666f60208201527f7220636f6e7472616374200000000000000000000000000000000000000000006040820152600082516188d181604b850160208701617990565b91909101604b0192915050565b600060ff821660ff81036188f4576188f46180ee565b60010192915050565b7f406f70656e7a657070656c696e2f646566656e6465722d6465706c6f792d636c81527f69656e742d636c6940000000000000000000000000000000000000000000000060208201526000825161895b816029850160208701617990565b9190910160290192915050565b60408152601660408201527f4f50454e5a455050454c494e5f424153485f5041544800000000000000000000606082015260806020820152600061382a60808301846179b4565b6000602082840312156189c157600080fd5b815167ffffffffffffffff8111156189d857600080fd5b8201606081850312156189ea57600080fd5b6189f2618000565b81518060030b8114618a0357600080fd5b8152602082015167ffffffffffffffff811115618a1f57600080fd5b618a2b86828501618099565b602083015250604082015167ffffffffffffffff811115618a4b57600080fd5b618a5786828501618099565b604083015250949350505050565b7f4661696c656420746f2072756e206261736820636f6d6d616e6420776974682081527f2200000000000000000000000000000000000000000000000000000000000000602082015260008251618ac3816021850160208701617990565b7f222e20496620796f7520617265207573696e672057696e646f77732c2073657460219390910192830152507f20746865204f50454e5a455050454c494e5f424153485f5041544820656e766960418201527f726f6e6d656e74207661726961626c6520746f207468652066756c6c7920717560618201527f616c69666965642070617468206f66207468652062617368206578656375746160818201527f626c652e20466f72206578616d706c652c20696620796f75206172652075736960a18201527f6e672047697420666f722057696e646f77732c206164642074686520666f6c6c60c18201527f6f77696e67206c696e6520696e20746865202e656e762066696c65206f66207960e18201527f6f75722070726f6a65637420287573696e6720666f727761726420736c6173686101018201527f6573293a0a4f50454e5a455050454c494e5f424153485f504154483d22433a2f6101218201527f50726f6772616d2046696c65732f4769742f62696e2f6261736822000000000061014182015261015c01919050565b7f4661696c656420746f2066696e64206c696e652077697468207072656669782081527f2700000000000000000000000000000000000000000000000000000000000000602082015260008351618caf816021850160208801617990565b7f2720696e206f75747075743a20000000000000000000000000000000000000006021918401918201528351618cec81602e840160208801617990565b01602e01949350505050565b7f4661696c656420746f2072756e2075706772616465207361666574792076616c81527f69646174696f6e3a20000000000000000000000000000000000000000000000060208201526000825161895b816029850160208701617990565b7f55706772616465207361666574792076616c69646174696f6e206661696c656481527f3a0a000000000000000000000000000000000000000000000000000000000000602082015260008251618db4816022850160208701617990565b9190910160220192915050565b7f436f6e7472616374206e616d6520000000000000000000000000000000000000815260008251618df981600e850160208701617990565b7f206d75737420626520696e2074686520666f726d6174204d79436f6e74726163600e9390910192830152507f742e736f6c3a4d79436f6e7472616374206f72204d79436f6e74726163742e73602e8201527f6f6c206f72206f75742f4d79436f6e74726163742e736f6c2f4d79436f6e7472604e8201527f6163742e6a736f6e000000000000000000000000000000000000000000000000606e820152607601919050565b80820180821115613729576137296180ee565b7f53504458206c6963656e7365206964656e746966696572200000000000000000815260008351618eea816018850160208801617990565b7f20696e20000000000000000000000000000000000000000000000000000000006018918401918201528351618f2781601c840160208801617990565b7f20646f6573206e6f74206c6f6f6b206c696b65206120737570706f7274656420601c92909101918201527f6c6963656e736520666f7220626c6f636b206578706c6f726572207665726966603c8201527f69636174696f6e2e205573652074686520606c6963656e73655479706560206f605c8201527f7074696f6e20746f20737065636966792061206c6963656e736520747970652c607c8201527f206f7220736574207468652060736b69704c6963656e73655479706560206f70609c8201527f74696f6e20746f2060747275656020746f20736b69702e00000000000000000060bc82015260d301949350505050565b6000825161902d818460208701617990565b7f2000000000000000000000000000000000000000000000000000000000000000920191825250600101919050565b7f406f70656e7a657070656c696e2f75706772616465732d636f7265400000000081526000825161909481601c850160208701617990565b91909101601c0192915050565b600060001982036190b4576190b46180ee565b5060010190565b8082028115828204841417613729576137296180ee565b6001815b600184111561910d578085048111156190f1576190f16180ee565b60018416156190ff57908102905b60019390931c9280026190d6565b935093915050565b60008261912457506001613729565b8161913157506000613729565b816001811461914757600281146191515761916d565b6001915050613729565b60ff841115619162576191626180ee565b50506001821b613729565b5060208310610133831016604e8410600b8410161715619190575081810a613729565b61919d60001984846190d2565b80600019048211156191b1576191b16180ee565b029392505050565b600061382a8383619115565b6000816191d4576191d46180ee565b506000190190565b600083516191ee818460208801617990565b7f3a000000000000000000000000000000000000000000000000000000000000009083019081528351619228816001840160208801617990565b01600101949350505050565b8181036000831280158383131683831282161715616aee57616aee6180ee56fe608060405234801561001057600080fd5b50604051610c9f380380610c9f83398101604081905261002f9161010d565b8181600361003d83826101ff565b50600461004a82826101ff565b50505050506102bd565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261007b57600080fd5b81516001600160401b0381111561009457610094610054565b604051601f8201601f19908116603f011681016001600160401b03811182821017156100c2576100c2610054565b6040528181528382016020018510156100da57600080fd5b60005b828110156100f9576020818601810151838301820152016100dd565b506000918101602001919091529392505050565b6000806040838503121561012057600080fd5b82516001600160401b0381111561013657600080fd5b6101428582860161006a565b602085015190935090506001600160401b0381111561016057600080fd5b61016c8582860161006a565b9150509250929050565b600181811c9082168061018a57607f821691505b6020821081036101aa57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156101fa57806000526020600020601f840160051c810160208510156101d75750805b601f840160051c820191505b818110156101f757600081556001016101e3565b50505b505050565b81516001600160401b0381111561021857610218610054565b61022c816102268454610176565b846101b0565b6020601f82116001811461026057600083156102485750848201515b600019600385901b1c1916600184901b1784556101f7565b600084815260208120601f198516915b828110156102905787850151825560209485019460019092019101610270565b50848210156102ae5786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b6109d3806102cc6000396000f3fe608060405234801561001057600080fd5b50600436106100be5760003560e01c806340c10f191161007657806395d89b411161005b57806395d89b4114610183578063a9059cbb1461018b578063dd62ed3e1461019e57600080fd5b806340c10f191461013857806370a082311461014d57600080fd5b806318160ddd116100a757806318160ddd1461010457806323b872dd14610116578063313ce5671461012957600080fd5b806306fdde03146100c3578063095ea7b3146100e1575b600080fd5b6100cb6101e4565b6040516100d891906107bf565b60405180910390f35b6100f46100ef366004610854565b610276565b60405190151581526020016100d8565b6002545b6040519081526020016100d8565b6100f461012436600461087e565b610290565b604051601281526020016100d8565b61014b610146366004610854565b6102b4565b005b61010861015b3660046108bb565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6100cb6102c2565b6100f4610199366004610854565b6102d1565b6101086101ac3660046108dd565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6060600380546101f390610910565b80601f016020809104026020016040519081016040528092919081815260200182805461021f90610910565b801561026c5780601f106102415761010080835404028352916020019161026c565b820191906000526020600020905b81548152906001019060200180831161024f57829003601f168201915b5050505050905090565b6000336102848185856102df565b60019150505b92915050565b60003361029e8582856102f1565b6102a98585856103c5565b506001949350505050565b6102be8282610470565b5050565b6060600480546101f390610910565b6000336102848185856103c5565b6102ec83838360016104cc565b505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146103bf57818110156103b0576040517ffb8f41b200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416600482015260248101829052604481018390526064015b60405180910390fd5b6103bf848484840360006104cc565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8316610415576040517f96c6fd1e000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff8216610465576040517fec442f05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b6102ec838383610614565b73ffffffffffffffffffffffffffffffffffffffff82166104c0576040517fec442f05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b6102be60008383610614565b73ffffffffffffffffffffffffffffffffffffffff841661051c576040517fe602df05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff831661056c576040517f94280d62000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260016020908152604080832093871683529290522082905580156103bf578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161060691815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff831661064c5780600260008282546106419190610963565b909155506106fe9050565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260208190526040902054818110156106d2576040517fe450d38c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8516600482015260248101829052604481018390526064016103a7565b73ffffffffffffffffffffffffffffffffffffffff841660009081526020819052604090209082900390555b73ffffffffffffffffffffffffffffffffffffffff821661072757600280548290039055610753565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090208054820190555b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516107b291815260200190565b60405180910390a3505050565b602081526000825180602084015260005b818110156107ed57602081860181015160408684010152016107d0565b5060006040828501015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011684010191505092915050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461084f57600080fd5b919050565b6000806040838503121561086757600080fd5b6108708361082b565b946020939093013593505050565b60008060006060848603121561089357600080fd5b61089c8461082b565b92506108aa6020850161082b565b929592945050506040919091013590565b6000602082840312156108cd57600080fd5b6108d68261082b565b9392505050565b600080604083850312156108f057600080fd5b6108f98361082b565b91506109076020840161082b565b90509250929050565b600181811c9082168061092457607f821691505b60208210810361095d577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b8082018082111561028a577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea26469706673582212207e804ca539d49155d2b6bc19268ce22f9f857027c75247d69fb0d56a089c93d464736f6c634300081a003360a060405234801561001057600080fd5b506040516116fe3803806116fe83398101604081905261002f916101e5565b60016000556002805460ff191690556001600160a01b038316158061005b57506001600160a01b038216155b8061006d57506001600160a01b038116155b1561008b5760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b0383166080526100a3600082610134565b506100ce7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a82610134565b506100f97f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e483610134565b506101126000805160206116de83398151915282610134565b5061012b6000805160206116de83398151915283610134565b50505050610228565b60008281526001602090815260408083206001600160a01b038516845290915281205460ff166101bf5760008381526001602081815260408084206001600160a01b0387168086529252808420805460ff19169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45060016101c3565b5060005b92915050565b80516001600160a01b03811681146101e057600080fd5b919050565b6000806000606084860312156101fa57600080fd5b610203846101c9565b9250610211602085016101c9565b915061021f604085016101c9565b90509250925092565b60805161147f61025f6000396000818161019e0152818161050001528181610562015281816108f70152610959015261147f6000f3fe608060405234801561001057600080fd5b506004361061016c5760003560e01c806385f438c1116100cd578063c8a0236211610081578063d936547e11610066578063d936547e14610355578063d9caed1214610378578063e63ab1e91461038b57600080fd5b8063c8a023621461032f578063d547741f1461034257600080fd5b80639a590427116100b25780639a590427146103015780639b19251a14610314578063a217fddf1461032757600080fd5b806385f438c11461029457806391d14854146102bb57600080fd5b806336568abe11610124578063570618e111610109578063570618e11461025a5780635c975abb146102815780638456cb591461028c57600080fd5b806336568abe1461023f5780633f4ba83a1461025257600080fd5b806321fc65f21161015557806321fc65f2146101e5578063248a9ca3146101fa5780632f2ff15d1461022c57600080fd5b806301ffc9a714610171578063116191b614610199575b600080fd5b61018461017f36600461118a565b6103b2565b60405190151581526020015b60405180910390f35b6101c07f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610190565b6101f86101f33660046111f5565b61044b565b005b61021e610208366004611292565b6000908152600160208190526040909120015490565b604051908152602001610190565b6101f861023a3660046112ab565b61064c565b6101f861024d3660046112ab565b610678565b6101f86106d6565b61021e7f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a81565b60025460ff16610184565b6101f861070b565b61021e7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b6101846102c93660046112ab565b600091825260016020908152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b6101f861030f3660046112d7565b61073d565b6101f86103223660046112d7565b6107be565b61021e600081565b6101f861033d3660046111f5565b610842565b6101f86103503660046112ab565b610a29565b6101846103633660046112d7565b60036020526000908152604090205460ff1681565b6101f86103863660046112f2565b610a4f565b61021e7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061044557507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b610453610b7b565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461047d81610bbe565b610485610bc8565b73ffffffffffffffffffffffffffffffffffffffff861660009081526003602052604090205460ff166104e4576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61052573ffffffffffffffffffffffffffffffffffffffff87167f000000000000000000000000000000000000000000000000000000000000000086610c07565b6040517f5131ab5900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690635131ab599061059f9089908990899089908990600401611378565b600060405180830381600087803b1580156105b957600080fd5b505af11580156105cd573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167f85b5be9cf454e05e0bddf49315178102227c312078eefa3c00294fb4d912ae4e868686604051610632939291906113d5565b60405180910390a3506106456001600055565b5050505050565b6000828152600160208190526040909120015461066881610bbe565b6106728383610c94565b50505050565b73ffffffffffffffffffffffffffffffffffffffff811633146106c7576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6106d18282610d41565b505050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61070081610bbe565b610708610de2565b50565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61073581610bbe565b610708610e41565b7f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a61076781610bbe565b73ffffffffffffffffffffffffffffffffffffffff8216600081815260036020526040808220805460ff19169055517f51085ddf9ebdded84b76e829eb58c4078e4b5bdf97d9a94723f336039da467919190a25050565b7f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a6107e881610bbe565b73ffffffffffffffffffffffffffffffffffffffff8216600081815260036020526040808220805460ff19166001179055517faab7954e9d246b167ef88aeddad35209ca2489d95a8aeb59e288d9b19fae5a549190a25050565b61084a610b7b565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461087481610bbe565b61087c610bc8565b73ffffffffffffffffffffffffffffffffffffffff861660009081526003602052604090205460ff166108db576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61091c73ffffffffffffffffffffffffffffffffffffffff87167f000000000000000000000000000000000000000000000000000000000000000086610c07565b6040517fb8969bd400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063b8969bd4906109969089908990899089908990600401611378565b600060405180830381600087803b1580156109b057600080fd5b505af11580156109c4573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fb9d4efa96044e5f5e03e696fa9ae2ff66911cc27e8a637c3627c75bc5b2241c8868686604051610632939291906113d5565b60008281526001602081905260409091200154610a4581610bbe565b6106728383610d41565b610a57610b7b565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e4610a8181610bbe565b610a89610bc8565b73ffffffffffffffffffffffffffffffffffffffff841660009081526003602052604090205460ff16610ae8576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610b0973ffffffffffffffffffffffffffffffffffffffff85168484610c07565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f9b1bfa7fa9ee420a16e124f794c35ac9f90472acc99140eb2f6447c714cad8eb84604051610b6891815260200190565b60405180910390a3506106d16001600055565b600260005403610bb7576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b6107088133610e7e565b60025460ff1615610c05576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6040805173ffffffffffffffffffffffffffffffffffffffff8416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb000000000000000000000000000000000000000000000000000000001790526106d1908490610f0f565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff16610d3957600083815260016020818152604080842073ffffffffffffffffffffffffffffffffffffffff87168086529252808420805460ff19169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a4506001610445565b506000610445565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff1615610d3957600083815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff86168085529252808320805460ff1916905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a4506001610445565b610dea610fa5565b6002805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b610e49610bc8565b6002805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258610e173390565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16610f0b576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82166004820152602481018390526044015b60405180910390fd5b5050565b6000610f3173ffffffffffffffffffffffffffffffffffffffff841683610fe1565b90508051600014158015610f56575080806020019051810190610f5491906113f8565b155b156106d1576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84166004820152602401610f02565b60025460ff16610c05576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6060610fef83836000610ff6565b9392505050565b606081471015611034576040517fcd786059000000000000000000000000000000000000000000000000000000008152306004820152602401610f02565b6000808573ffffffffffffffffffffffffffffffffffffffff16848660405161105d919061141a565b60006040518083038185875af1925050503d806000811461109a576040519150601f19603f3d011682016040523d82523d6000602084013e61109f565b606091505b50915091506110af8683836110b9565b9695505050505050565b6060826110ce576110c982611148565b610fef565b81511580156110f2575073ffffffffffffffffffffffffffffffffffffffff84163b155b15611141576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85166004820152602401610f02565b5080610fef565b8051156111585780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006020828403121561119c57600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610fef57600080fd5b803573ffffffffffffffffffffffffffffffffffffffff811681146111f057600080fd5b919050565b60008060008060006080868803121561120d57600080fd5b611216866111cc565b9450611224602087016111cc565b935060408601359250606086013567ffffffffffffffff81111561124757600080fd5b8601601f8101881361125857600080fd5b803567ffffffffffffffff81111561126f57600080fd5b88602082840101111561128157600080fd5b959894975092955050506020019190565b6000602082840312156112a457600080fd5b5035919050565b600080604083850312156112be57600080fd5b823591506112ce602084016111cc565b90509250929050565b6000602082840312156112e957600080fd5b610fef826111cc565b60008060006060848603121561130757600080fd5b611310846111cc565b925061131e602085016111cc565b929592945050506040919091013590565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff8616815273ffffffffffffffffffffffffffffffffffffffff851660208201528360408201526080606082015260006113ca60808301848661132f565b979650505050505050565b8381526040602082015260006113ef60408301848661132f565b95945050505050565b60006020828403121561140a57600080fd5b81518015158114610fef57600080fd5b6000825160005b8181101561143b5760208186018101518583015201611421565b50600092019182525091905056fea2646970667358221220dc54ce548a1f0bf8ba5e86cc53c6d822e55eee543451395733c659359bac8dd164736f6c634300081a00338619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a60c060405260001960035534801561001657600080fd5b5060405161155a38038061155a83398101604081905261003591610220565b60016000819055805460ff19169055838383836001600160a01b038416158061006557506001600160a01b038316155b8061007757506001600160a01b038216155b8061008957506001600160a01b038116155b156100a75760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b03808516608052831660a0526100c5600082610154565b506100f07f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e483610154565b5061011b7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb83610154565b506101467f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a82610154565b505050505050505050610274565b60008281526002602090815260408083206001600160a01b038516845290915281205460ff166101fa5760008381526002602090815260408083206001600160a01b03861684529091529020805460ff191660011790556101b23390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45060016101fe565b5060005b92915050565b80516001600160a01b038116811461021b57600080fd5b919050565b6000806000806080858703121561023657600080fd5b61023f85610204565b935061024d60208601610204565b925061025b60408601610204565b915061026960608601610204565b905092959194509250565b60805160a0516112826102d86000396000818161021d01528181610531015281816108240152818161097b01528181610ad00152610bf20152600081816101d1015281816104a1015281816105040152818161079401526107f701526112826000f3fe608060405234801561001057600080fd5b50600436106101775760003560e01c80635e3e9fef116100d857806391d148541161008c578063d547741f11610066578063d547741f14610386578063d5abeb0114610399578063e63ab1e9146103a257600080fd5b806391d1485414610311578063a217fddf14610357578063a783c7891461035f57600080fd5b8063743e0c9b116100bd578063743e0c9b146102cf5780638456cb59146102e257806385f438c1146102ea57600080fd5b80635e3e9fef146102a95780636f8b44b0146102bc57600080fd5b8063248a9ca31161012f57806336568abe1161011457806336568abe146102835780633f4ba83a146102965780635c975abb1461029e57600080fd5b8063248a9ca31461023f5780632f2ff15d1461027057600080fd5b8063106e629011610160578063106e6290146101b9578063116191b6146101cc57806321e093b11461021857600080fd5b806301ffc9a71461017c57806302d5c899146101a4575b600080fd5b61018f61018a366004610fb4565b6103c9565b60405190151581526020015b60405180910390f35b6101b76101b2366004611026565b610462565b005b6101b76101c73660046110b8565b6105f7565b6101f37f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161019b565b6101f37f000000000000000000000000000000000000000000000000000000000000000081565b61026261024d3660046110eb565b60009081526002602052604090206001015490565b60405190815260200161019b565b6101b761027e366004611104565b61069c565b6101b7610291366004611104565b6106c7565b6101b7610720565b60015460ff1661018f565b6101b76102b7366004611026565b610755565b6101b76102ca3660046110eb565b6108d0565b6101b76102dd3660046110eb565b61093e565b6101b76109e8565b6102627f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b61018f61031f366004611104565b600091825260026020908152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b610262600081565b6102627f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb81565b6101b7610394366004611104565b610a1a565b61026260035481565b6102627f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061045c57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b61046a610a3f565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461049481610a82565b61049c610a8c565b6104c77f00000000000000000000000000000000000000000000000000000000000000008684610acb565b6040517fb8969bd400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063b8969bd490610561907f0000000000000000000000000000000000000000000000000000000000000000908a908a908a908a90600401611179565b600060405180830381600087803b15801561057b57600080fd5b505af115801561058f573d6000803e3d6000fd5b505050508573ffffffffffffffffffffffffffffffffffffffff167fba96f26bdda53eb8c8ba39045dfb4ff39753fbc7a6edcf250a88e75e78d102fe8686866040516105dd939291906111d6565b60405180910390a2506105f06001600055565b5050505050565b6105ff610a3f565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461062981610a82565b610631610a8c565b61063c848484610acb565b8373ffffffffffffffffffffffffffffffffffffffff167f884edad9ce6fa2440d8a54cc123490eb96d2768479d49ff9c7366125a94243648460405161068491815260200190565b60405180910390a2506106976001600055565b505050565b6000828152600260205260409020600101546106b781610a82565b6106c18383610c53565b50505050565b73ffffffffffffffffffffffffffffffffffffffff81163314610716576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6106978282610d53565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61074a81610a82565b610752610e12565b50565b61075d610a3f565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461078781610a82565b61078f610a8c565b6107ba7f00000000000000000000000000000000000000000000000000000000000000008684610acb565b6040517f5131ab5900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690635131ab5990610854907f0000000000000000000000000000000000000000000000000000000000000000908a908a908a908a90600401611179565b600060405180830381600087803b15801561086e57600080fd5b505af1158015610882573d6000803e3d6000fd5b505050508573ffffffffffffffffffffffffffffffffffffffff167f7772f56296d3a5202974a45c61c9188d844ab4d6eeb18c851e4b8d5384ca6ced8686866040516105dd939291906111d6565b7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb6108fa81610a82565b610902610a8c565b60038290556040518281527f7810bd47de260c3e9ee10061cf438099dd12256c79485f12f94dbccc981e806c9060200160405180910390a15050565b610946610a8c565b6040517f79cc6790000000000000000000000000000000000000000000000000000000008152336004820152602481018290527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16906379cc679090604401600060405180830381600087803b1580156109d457600080fd5b505af11580156105f0573d6000803e3d6000fd5b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610a1281610a82565b610752610e8f565b600082815260026020526040902060010154610a3581610a82565b6106c18383610d53565b600260005403610a7b576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b6107528133610ee8565b60015460ff1615610ac9576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6003547f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b39573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b5d91906111f9565b610b679084611212565b1115610b9f576040517fc30436e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f1e458bee00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff848116600483015260248201849052604482018390527f00000000000000000000000000000000000000000000000000000000000000001690631e458bee90606401600060405180830381600087803b158015610c3657600080fd5b505af1158015610c4a573d6000803e3d6000fd5b50505050505050565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff16610d4b57600083815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff86168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055610ce93390565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a450600161045c565b50600061045c565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff1615610d4b57600083815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8616808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a450600161045c565b610e1a610f78565b600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b610e97610a8c565b600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016811790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25833610e65565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16610f74576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff821660048201526024810183905260440160405180910390fd5b5050565b60015460ff16610ac9576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060208284031215610fc657600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610ff657600080fd5b9392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461102157600080fd5b919050565b60008060008060006080868803121561103e57600080fd5b61104786610ffd565b945060208601359350604086013567ffffffffffffffff81111561106a57600080fd5b8601601f8101881361107b57600080fd5b803567ffffffffffffffff81111561109257600080fd5b8860208284010111156110a457600080fd5b959894975060200195606001359392505050565b6000806000606084860312156110cd57600080fd5b6110d684610ffd565b95602085013595506040909401359392505050565b6000602082840312156110fd57600080fd5b5035919050565b6000806040838503121561111757600080fd5b8235915061112760208401610ffd565b90509250929050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff8616815273ffffffffffffffffffffffffffffffffffffffff851660208201528360408201526080606082015260006111cb608083018486611130565b979650505050505050565b8381526040602082015260006111f0604083018486611130565b95945050505050565b60006020828403121561120b57600080fd5b5051919050565b8082018082111561045c577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea2646970667358221220de5fa55e0ca79ea2f08903481d01ea00bbbf346b9cfba44e12a2dd6f3a6f2e8a64736f6c634300081a00336080604052348015600f57600080fd5b506001600055610d3a806100246000396000f3fe6080604052600436106100635760003560e01c8063c513169111610040578063c5131691146100c1578063e04d4f97146100e1578063f05b6abf146100f457005b8063357fc5a21461006c5780636ed701691461008c5780638fcaa0b5146100a157005b3661006a57005b005b34801561007857600080fd5b5061006a6100873660046106c0565b610114565b34801561009857600080fd5b5061006a6101aa565b3480156100ad57600080fd5b5061006a6100bc3660046106fc565b6101df565b3480156100cd57600080fd5b5061006a6100dc3660046106c0565b61021e565b61006a6100ef366004610895565b6102f9565b34801561010057600080fd5b5061006a61010f366004610981565b61033d565b61011c610372565b61013e73ffffffffffffffffffffffffffffffffffffffff83163383866103b5565b604080513381526020810185905273ffffffffffffffffffffffffffffffffffffffff848116828401528316606082015290517f2b58128f24a9f59127cc5b5430d70542b22220f2d9adaa86e442b816ab98af609181900360800190a16101a56001600055565b505050565b6040513381527fbcaadb46b82a48af60b608f58959ae6b8310d1b0a0d094c2e9ec3208ed39f2a09060200160405180910390a1565b7f0d3f65f00e631663aa85c96330b5c7a83bb29af3630c0063776f985edc3037aa33838360405161021293929190610a6b565b60405180910390a15050565b610226610372565b6000610233600285610ad5565b90508060000361026f576040517f1f2a200500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61029173ffffffffffffffffffffffffffffffffffffffff84163384846103b5565b604080513381526020810183905273ffffffffffffffffffffffffffffffffffffffff858116828401528416606082015290517f2b58128f24a9f59127cc5b5430d70542b22220f2d9adaa86e442b816ab98af609181900360800190a1506101a56001600055565b7f1f1ff1f5fb41346850b2f5c04e6c767e2f1c8a525c5c0c5cdb60cdf3ca5f62fa3334858585604051610330959493929190610b7e565b60405180910390a1505050565b7f74a53cd528a921fca7dbdee62f86819051d3cc98f214951f4238e8843f20b146338484846040516103309493929190610c08565b6002600054036103ae576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b6040805173ffffffffffffffffffffffffffffffffffffffff85811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd0000000000000000000000000000000000000000000000000000000017905261044a908590610450565b50505050565b600061047273ffffffffffffffffffffffffffffffffffffffff8416836104eb565b905080516000141580156104975750808060200190518101906104959190610ccb565b155b156101a5576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff841660048201526024015b60405180910390fd5b60606104f983836000610500565b9392505050565b60608147101561053e576040517fcd7860590000000000000000000000000000000000000000000000000000000081523060048201526024016104e2565b6000808573ffffffffffffffffffffffffffffffffffffffff1684866040516105679190610ce8565b60006040518083038185875af1925050503d80600081146105a4576040519150601f19603f3d011682016040523d82523d6000602084013e6105a9565b606091505b50915091506105b98683836105c3565b9695505050505050565b6060826105d8576105d382610652565b6104f9565b81511580156105fc575073ffffffffffffffffffffffffffffffffffffffff84163b155b1561064b576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff851660048201526024016104e2565b50806104f9565b8051156106625780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50565b803573ffffffffffffffffffffffffffffffffffffffff811681146106bb57600080fd5b919050565b6000806000606084860312156106d557600080fd5b833592506106e560208501610697565b91506106f360408501610697565b90509250925092565b6000806020838503121561070f57600080fd5b823567ffffffffffffffff81111561072657600080fd5b8301601f8101851361073757600080fd5b803567ffffffffffffffff81111561074e57600080fd5b85602082840101111561076057600080fd5b6020919091019590945092505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156107e6576107e6610770565b604052919050565b600082601f8301126107ff57600080fd5b813567ffffffffffffffff81111561081957610819610770565b61084a60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8401160161079f565b81815284602083860101111561085f57600080fd5b816020850160208301376000918101602001919091529392505050565b801515811461069457600080fd5b80356106bb8161087c565b6000806000606084860312156108aa57600080fd5b833567ffffffffffffffff8111156108c157600080fd5b6108cd868287016107ee565b9350506020840135915060408401356108e58161087c565b809150509250925092565b600067ffffffffffffffff82111561090a5761090a610770565b5060051b60200190565b600082601f83011261092557600080fd5b8135610938610933826108f0565b61079f565b8082825260208201915060208360051b86010192508583111561095a57600080fd5b602085015b8381101561097757803583526020928301920161095f565b5095945050505050565b60008060006060848603121561099657600080fd5b833567ffffffffffffffff8111156109ad57600080fd5b8401601f810186136109be57600080fd5b80356109cc610933826108f0565b8082825260208201915060208360051b8501019250888311156109ee57600080fd5b602084015b83811015610a3057803567ffffffffffffffff811115610a1257600080fd5b610a218b6020838901016107ee565b845250602092830192016109f3565b509550505050602084013567ffffffffffffffff811115610a5057600080fd5b610a5c86828701610914565b9250506106f36040850161088a565b73ffffffffffffffffffffffffffffffffffffffff8416815260406020820152816040820152818360608301376000818301606090810191909152601f9092017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016010192915050565b600082610b0b577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60005b83811015610b2b578181015183820152602001610b13565b50506000910152565b60008151808452610b4c816020860160208601610b10565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b73ffffffffffffffffffffffffffffffffffffffff8616815284602082015260a060408201526000610bb360a0830186610b34565b6060830194909452509015156080909101529392505050565b600081518084526020840193506020830160005b82811015610bfe578151865260209586019590910190600101610be0565b5093949350505050565b60006080820173ffffffffffffffffffffffffffffffffffffffff871683526080602084015280865180835260a08501915060a08160051b86010192506020880160005b82811015610c9b577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60878603018452610c86858351610b34565b94506020938401939190910190600101610c4c565b505050508281036040840152610cb18186610bcc565b915050610cc2606083018415159052565b95945050505050565b600060208284031215610cdd57600080fd5b81516104f98161087c565b60008251610cfa818460208701610b10565b919091019291505056fea2646970667358221220556072e1abafc3c4063b8cce832228b4f309b93726aaa6a6dfab20cb880c6d1864736f6c634300081a00336080604052348015600f57600080fd5b5060405161080c38038061080c833981016040819052602c916050565b600080546001600160a01b0319166001600160a01b0392909216919091179055607e565b600060208284031215606157600080fd5b81516001600160a01b0381168114607757600080fd5b9392505050565b61077f8061008d6000396000f3fe608060405234801561001057600080fd5b50600436106100415760003560e01c80630abd890514610046578063116191b61461005b578063865b36f6146100a4575b600080fd5b6100596100543660046104c4565b6100b7565b005b60005461007b9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b6100596100b236600461057f565b6102af565b60008383836040516024016100ce93929190610674565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe04d4f970000000000000000000000000000000000000000000000000000000017905260005490517f095ea7b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff91821660048201526024810189905291925086169063095ea7b3906044016020604051808303816000875af11580156101be573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101e2919061069e565b610218576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000546040517f7993c1e000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff90911690637993c1e090610274908a908a908a9087906004016106c2565b600060405180830381600087803b15801561028e57600080fd5b505af11580156102a2573d6000803e3d6000fd5b5050505050505050505050565b60008383836040516024016102c693929190610674565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe04d4f970000000000000000000000000000000000000000000000000000000017905260005490517f5d40e17800000000000000000000000000000000000000000000000000000000815291925073ffffffffffffffffffffffffffffffffffffffff1690635d40e1789061039690899089908690600401610714565b600060405180830381600087803b1580156103b057600080fd5b505af11580156103c4573d6000803e3d6000fd5b50505050505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600082601f83011261041057600080fd5b81356020830160008067ffffffffffffffff841115610431576104316103d0565b506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f85018116603f0116810181811067ffffffffffffffff8211171561047e5761047e6103d0565b60405283815290508082840187101561049657600080fd5b838360208301376000602085830101528094505050505092915050565b80151581146104c157600080fd5b50565b60008060008060008060c087890312156104dd57600080fd5b863567ffffffffffffffff8111156104f457600080fd5b61050089828a016103ff565b96505060208701359450604087013573ffffffffffffffffffffffffffffffffffffffff8116811461053157600080fd5b9350606087013567ffffffffffffffff81111561054d57600080fd5b61055989828a016103ff565b9350506080870135915060a0870135610571816104b3565b809150509295509295509295565b600080600080600060a0868803121561059757600080fd5b853567ffffffffffffffff8111156105ae57600080fd5b6105ba888289016103ff565b95505060208601359350604086013567ffffffffffffffff8111156105de57600080fd5b6105ea888289016103ff565b935050606086013591506080860135610602816104b3565b809150509295509295909350565b6000815180845260005b818110156106365760208185018101518683018201520161061a565b5060006020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b6060815260006106876060830186610610565b602083019490945250901515604090910152919050565b6000602082840312156106b057600080fd5b81516106bb816104b3565b9392505050565b6080815260006106d56080830187610610565b85602084015273ffffffffffffffffffffffffffffffffffffffff8516604084015282810360608401526107098185610610565b979650505050505050565b6060815260006107276060830186610610565b846020840152828103604084015261073f8185610610565b969550505050505056fea26469706673582212202d9e7d32ef6522050432c1694ddb8cfdc9122adb07ccb90fba239639e4abfd7c64736f6c634300081a0033608060405234801561001057600080fd5b50604051610b3f380380610b3f83398101604081905261002f916100b9565b600380546001600160a01b038086166001600160a01b0319928316179092556004805485841690831617905560058054928416929091169190911790556040517f80699e81136d69cb8367ad52a994e25c722a86da654b561d0c14b61a777e7ac590600090a15050506100fc565b80516001600160a01b03811681146100b457600080fd5b919050565b6000806000606084860312156100ce57600080fd5b6100d78461009d565b92506100e56020850161009d565b91506100f36040850161009d565b90509250925092565b610a348061010b6000396000f3fe608060405234801561001057600080fd5b50600436106100c95760003560e01c806397770dff11610081578063d7fd7afb1161005b578063d7fd7afb146101f2578063d936a01214610220578063ee2815ba1461024057600080fd5b806397770dff146101b9578063a7cb0507146101cc578063c63585cc146101df57600080fd5b8063513a9c05116100b2578063513a9c0514610143578063569541b914610179578063842da36d1461019957600080fd5b80630be15547146100ce5780633c669d551461012e575b600080fd5b6101046100dc36600461071e565b60016020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b61014161013c366004610760565b610253565b005b61010461015136600461071e565b60026020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b6003546101049073ffffffffffffffffffffffffffffffffffffffff1681565b6005546101049073ffffffffffffffffffffffffffffffffffffffff1681565b6101416101c73660046107fd565b6103a0565b6101416101da36600461081f565b610419565b6101046101ed366004610841565b610467565b61021261020036600461071e565b60006020819052908152604090205481565b604051908152602001610125565b6004546101049073ffffffffffffffffffffffffffffffffffffffff1681565b61014161024e366004610884565b61059c565b604080516080810182526000606082019081528152336020820152468183015290517fa9059cbb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff87811660048301526024820186905286169063a9059cbb906044016020604051808303816000875af11580156102e7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061030b91906108b0565b506040517fde43156e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff87169063de43156e90610366908490899089908990899060040161091b565b600060405180830381600087803b15801561038057600080fd5b505af1158015610394573d6000803e3d6000fd5b50505050505050505050565b600380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527fdba79d534382d1a8ae108e4c8ecb27c6ae42ab8b91d44eedf88bd329f3868d5e9060200160405180910390a150565b6000828152602081815260409182902083905581518481529081018390527f49f492222906ac486c3c1401fa545626df1f0c0e5a77a05597ea2ed66af9850d91015b60405180910390a15050565b60008060006104768585610620565b6040517fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606084811b8216602084015283901b166034820152919350915086906048016040516020818303038152906040528051906020012060405160200161055c9291907fff00000000000000000000000000000000000000000000000000000000000000815260609290921b7fffffffffffffffffffffffffffffffffffffffff00000000000000000000000016600183015260158201527f96e8ac4277198ff8b6f785478aa9a39f403cb768dd02cbee326c3e7da348845f603582015260550190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291905280516020909101209695505050505050565b60008281526001602090815260409182902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff85169081179091558251858152918201527fd1b36d30f6248e97c473b4d1348ca164a4ef6759022f54a58ec200326c39c45d910161045b565b6000808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603610688576040517fcb1e7cfe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16106106c25782846106c5565b83835b909250905073ffffffffffffffffffffffffffffffffffffffff8216610717576040517f78b507da00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b9250929050565b60006020828403121561073057600080fd5b5035919050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461075b57600080fd5b919050565b60008060008060006080868803121561077857600080fd5b61078186610737565b945061078f60208701610737565b935060408601359250606086013567ffffffffffffffff8111156107b257600080fd5b8601601f810188136107c357600080fd5b803567ffffffffffffffff8111156107da57600080fd5b8860208284010111156107ec57600080fd5b959894975092955050506020019190565b60006020828403121561080f57600080fd5b61081882610737565b9392505050565b6000806040838503121561083257600080fd5b50508035926020909101359150565b60008060006060848603121561085657600080fd5b61085f84610737565b925061086d60208501610737565b915061087b60408501610737565b90509250925092565b6000806040838503121561089757600080fd5b823591506108a760208401610737565b90509250929050565b6000602082840312156108c257600080fd5b8151801515811461081857600080fd5b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b60808152600086516060608084015280518060e085015260005b81811015610953576020818401810151610100878401015201610935565b5060008482016101000152602089015173ffffffffffffffffffffffffffffffffffffffff811660a0860152601f9091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168401915050604088015160c084015273ffffffffffffffffffffffffffffffffffffffff871660208401528560408401526101008382030160608401526109f2610100820185876108d2565b9897505050505050505056fea264697066735822122044450a00a3ccd112d5abf008f947389875d330f56afa78b6ab0863159c2d87f664736f6c634300081a003360e060405234801561001057600080fd5b50604051611bb9380380611bb983398101604081905261002f9161020e565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461006357604051632b2add3d60e01b815260040160405180910390fd5b6001600160a01b038216158061008057506001600160a01b038116155b1561009e5760405163d92e233d60e01b815260040160405180910390fd5b60066100aa8982610360565b5060076100b78882610360565b5060ff861660c05260808590528360028111156100d6576100d661041e565b60a08160028111156100ea576100ea61041e565b905250600192909255600080546001600160a01b039283166001600160a01b03199182161790915560088054929093169116179055506104349350505050565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261015157600080fd5b81516001600160401b0381111561016a5761016a61012a565b604051601f8201601f19908116603f011681016001600160401b03811182821017156101985761019861012a565b6040528181528382016020018510156101b057600080fd5b60005b828110156101cf576020818601810151838301820152016101b3565b506000918101602001919091529392505050565b8051600381106101f257600080fd5b919050565b80516001600160a01b03811681146101f257600080fd5b600080600080600080600080610100898b03121561022b57600080fd5b88516001600160401b0381111561024157600080fd5b61024d8b828c01610140565b60208b015190995090506001600160401b0381111561026b57600080fd5b6102778b828c01610140565b975050604089015160ff8116811461028e57600080fd5b60608a015190965094506102a460808a016101e3565b60a08a015190945092506102ba60c08a016101f7565b91506102c860e08a016101f7565b90509295985092959890939650565b600181811c908216806102eb57607f821691505b60208210810361030b57634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111561035b57806000526020600020601f840160051c810160208510156103385750805b601f840160051c820191505b818110156103585760008155600101610344565b50505b505050565b81516001600160401b038111156103795761037961012a565b61038d8161038784546102d7565b84610311565b6020601f8211600181146103c157600083156103a95750848201515b600019600385901b1c1916600184901b178455610358565b600084815260208120601f198516915b828110156103f157878501518255602094850194600190920191016103d1565b508482101561040f5786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b634e487b7160e01b600052602160045260246000fd5b60805160a05160c05161174861047160003960006102170152600061033a0152600081816102eb01528181610ad70152610bdd01526117486000f3fe608060405234801561001057600080fd5b50600436106101985760003560e01c80638b851b95116100e3578063ccc775991161008c578063eddeb12311610066578063eddeb12314610431578063f2441b3214610444578063f687d12a1461046457600080fd5b8063ccc77599146103a4578063d9eeebed146103b7578063dd62ed3e146103eb57600080fd5b8063a9059cbb116100bd578063a9059cbb14610369578063c70126261461037c578063c835d7cc1461038f57600080fd5b80638b851b951461030d57806395d89b411461032d578063a3413d031461033557600080fd5b80633ce4a5bc116101455780634d8943bb1161011f5780634d8943bb146102a757806370a08231146102b057806385e1f4d0146102e657600080fd5b80633ce4a5bc1461024157806342966c681461028157806347e7ef241461029457600080fd5b806318160ddd1161017657806318160ddd146101f557806323b872dd146101fd578063313ce5671461021057600080fd5b806306fdde031461019d578063091d2788146101bb578063095ea7b3146101d2575b600080fd5b6101a5610477565b6040516101b29190611327565b60405180910390f35b6101c460015481565b6040519081526020016101b2565b6101e56101e0366004611366565b610509565b60405190151581526020016101b2565b6005546101c4565b6101e561020b366004611392565b610520565b60405160ff7f00000000000000000000000000000000000000000000000000000000000000001681526020016101b2565b61025c73735b14bb79463307aacbed86daf3322b1e6226ab81565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101b2565b6101e561028f3660046113d3565b6105b7565b6101e56102a2366004611366565b6105cb565b6101c460025481565b6101c46102be3660046113ec565b73ffffffffffffffffffffffffffffffffffffffff1660009081526003602052604090205490565b6101c47f000000000000000000000000000000000000000000000000000000000000000081565b60085461025c9073ffffffffffffffffffffffffffffffffffffffff1681565b6101a561071f565b61035c7f000000000000000000000000000000000000000000000000000000000000000081565b6040516101b29190611409565b6101e5610377366004611366565b61072e565b6101e561038a366004611479565b61073b565b6103a261039d3660046113ec565b61088a565b005b6103a26103b23660046113ec565b61099e565b6103bf610aab565b6040805173ffffffffffffffffffffffffffffffffffffffff90931683526020830191909152016101b2565b6101c46103f9366004611571565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260046020908152604080832093909416825291909152205490565b6103a261043f3660046113d3565b610cc9565b60005461025c9073ffffffffffffffffffffffffffffffffffffffff1681565b6103a26104723660046113d3565b610d4b565b606060068054610486906115aa565b80601f01602080910402602001604051908101604052809291908181526020018280546104b2906115aa565b80156104ff5780601f106104d4576101008083540402835291602001916104ff565b820191906000526020600020905b8154815290600101906020018083116104e257829003601f168201915b5050505050905090565b6000610516338484610dcd565b5060015b92915050565b600061052d848484610ed6565b73ffffffffffffffffffffffffffffffffffffffff8416600090815260046020908152604080832033845290915290205482811015610598576040517f10bad14700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6105ac85336105a7868561162c565b610dcd565b506001949350505050565b60006105c33383611091565b506001919050565b60003373735b14bb79463307aacbed86daf3322b1e6226ab14801590610609575060005473ffffffffffffffffffffffffffffffffffffffff163314155b801561062d575060085473ffffffffffffffffffffffffffffffffffffffff163314155b15610664576040517fddb5de5e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61066e83836111d3565b6040517f735b14bb79463307aacbed86daf3322b1e6226ab000000000000000000000000602082015273ffffffffffffffffffffffffffffffffffffffff8416907f67fc7bdaed5b0ec550d8706b87d60568ab70c6b781263c70101d54cd1564aab390603401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529082905261070e91869061163f565b60405180910390a250600192915050565b606060078054610486906115aa565b6000610516338484610ed6565b6000806000610748610aab565b6040517f23b872dd00000000000000000000000000000000000000000000000000000000815233600482015273735b14bb79463307aacbed86daf3322b1e6226ab602482015260448101829052919350915073ffffffffffffffffffffffffffffffffffffffff8316906323b872dd906064016020604051808303816000875af11580156107da573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107fe9190611661565b610834576040517f0a7cd6d600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61083e3385611091565b60025460405133917f9ffbffc04a397460ee1dbe8c9503e098090567d6b7f4b3c02a8617d800b6d9559161087791899189918791611683565b60405180910390a2506001949350505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab146108d7576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116610924576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527fd55614e962c5fd6ece71614f6348d702468a997a394dd5e5c1677950226d97ae906020015b60405180910390a150565b3373735b14bb79463307aacbed86daf3322b1e6226ab146109eb576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116610a38576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600880547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527f88815d964e380677e86d817e7d65dea59cb7b4c3b5b7a0c8ec7ea4a74f90a38790602001610993565b600080546040517f0be155470000000000000000000000000000000000000000000000000000000081527f000000000000000000000000000000000000000000000000000000000000000060048201528291829173ffffffffffffffffffffffffffffffffffffffff90911690630be1554790602401602060405180830381865afa158015610b3e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b6291906116b2565b905073ffffffffffffffffffffffffffffffffffffffff8116610bb1576040517f78fff39600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080546040517fd7fd7afb0000000000000000000000000000000000000000000000000000000081527f0000000000000000000000000000000000000000000000000000000000000000600482015273ffffffffffffffffffffffffffffffffffffffff9091169063d7fd7afb90602401602060405180830381865afa158015610c40573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c6491906116cf565b905080600003610ca0576040517fe661aed000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060025460015483610cb391906116e8565b610cbd91906116ff565b92959294509192505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610d16576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60028190556040518181527fef13af88e424b5d15f49c77758542c1938b08b8b95b91ed0751f98ba99000d8f90602001610993565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610d98576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018190556040518181527fff5788270f43bfc1ca41c503606d2594aa3023a1a7547de403a3e2f146a4a80a90602001610993565b73ffffffffffffffffffffffffffffffffffffffff8316610e1a576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216610e67576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff83811660008181526004602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8316610f23576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216610f70576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff831660009081526003602052604090205481811015610fd0576040517ffe382aa700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610fda828261162c565b73ffffffffffffffffffffffffffffffffffffffff808616600090815260036020526040808220939093559085168152908120805484929061101d9084906116ff565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161108391815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff82166110de576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff82166000908152600360205260409020548181101561113e576040517ffe382aa700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611148828261162c565b73ffffffffffffffffffffffffffffffffffffffff84166000908152600360205260408120919091556005805484929061118390849061162c565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90602001610ec9565b73ffffffffffffffffffffffffffffffffffffffff8216611220576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b806005600082825461123291906116ff565b909155505073ffffffffffffffffffffffffffffffffffffffff82166000908152600360205260408120805483929061126c9084906116ff565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6000815180845260005b818110156112e9576020818501810151868301820152016112cd565b5060006020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b60208152600061133a60208301846112c3565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff8116811461136357600080fd5b50565b6000806040838503121561137957600080fd5b823561138481611341565b946020939093013593505050565b6000806000606084860312156113a757600080fd5b83356113b281611341565b925060208401356113c281611341565b929592945050506040919091013590565b6000602082840312156113e557600080fd5b5035919050565b6000602082840312156113fe57600080fd5b813561133a81611341565b6020810160038310611444577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000806040838503121561148c57600080fd5b823567ffffffffffffffff8111156114a357600080fd5b8301601f810185136114b457600080fd5b803567ffffffffffffffff8111156114ce576114ce61144a565b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8501160116810181811067ffffffffffffffff8211171561153a5761153a61144a565b60405281815282820160200187101561155257600080fd5b8160208401602083013760006020928201830152969401359450505050565b6000806040838503121561158457600080fd5b823561158f81611341565b9150602083013561159f81611341565b809150509250929050565b600181811c908216806115be57607f821691505b6020821081036115f7577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8181038181111561051a5761051a6115fd565b60408152600061165260408301856112c3565b90508260208301529392505050565b60006020828403121561167357600080fd5b8151801515811461133a57600080fd5b60808152600061169660808301876112c3565b6020830195909552506040810192909252606090910152919050565b6000602082840312156116c457600080fd5b815161133a81611341565b6000602082840312156116e157600080fd5b5051919050565b808202811582820484141761051a5761051a6115fd565b8082018082111561051a5761051a6115fd56fea26469706673582212204013e39523742118b3f2227e145ee7e48176ba6aebead33c596dca2acb59a74c64736f6c634300081a0033a2646970667358221220c33784e2634913f051879de657c0fb3cb6ade526391b130eb043a348f788b0c564736f6c634300081a0033", + Bin: "0x6080604052600c8054600160ff199182168117909255601f80549091169091179055348015602c57600080fd5b50620107e3806200003e6000396000f3fe608060405234801561001057600080fd5b506004361061011b5760003560e01c806385226c81116100b2578063b5508aa911610081578063d7a525fc11610066578063d7a525fc146101ec578063e20c9f71146101f4578063fa7626d4146101fc57600080fd5b8063b5508aa9146101cc578063ba414fa6146101d457600080fd5b806385226c8114610192578063916a17c6146101a75780639683c695146101bc578063b0464fdc146101c457600080fd5b80633f7286f4116100ee5780633f7286f414610165578063524744131461016d57806366d9a9a0146101755780636ff15ccc1461018a57600080fd5b80630a9254e4146101205780631ed7831c1461012a5780632ade3880146101485780633e5e3c231461015d575b600080fd5b610128610209565b005b61013261118d565b60405161013f9190617944565b60405180910390f35b6101506111ef565b60405161013f91906179e0565b610132611331565b610132611391565b6101286113f1565b61017d611c4e565b60405161013f9190617b46565b610128611dd0565b61019a6125e8565b60405161013f9190617be4565b6101af6126b8565b60405161013f9190617c5b565b6101286127b3565b6101af612d2f565b61019a612e2a565b6101dc612efa565b604051901515815260200161013f565b610128612fce565b6101326136b0565b601f546101dc9060ff1681565b602680547fffffffffffffffffffffffff00000000000000000000000000000000000000009081163017909155602780548216611234179055602880548216615678179055602e805490911661432117905560405161026790617829565b60408082526004908201527f746573740000000000000000000000000000000000000000000000000000000060608201526080602082018190526003908201527f54544b000000000000000000000000000000000000000000000000000000000060a082015260c001604051809103906000f0801580156102ec573d6000803e3d6000fd5b50602380547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039290921691909117905560405161033190617829565b604080825260049082018190527f7a6574610000000000000000000000000000000000000000000000000000000060608301526080602083018190528201527f5a4554410000000000000000000000000000000000000000000000000000000060a082015260c001604051809103906000f0801580156103b5573d6000803e3d6000fd5b50602480547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039283169081178255604080518082018252600e81527f4761746577617945564d2e736f6c0000000000000000000000000000000000006020820152602854602654925190861694810194909452604484019290925290921660648201526104a6919060840160408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fc0c53b8b00000000000000000000000000000000000000000000000000000000179052613710565b601f80547fffffffffffffffffffffff0000000000000000000000000000000000000000ff166101006001600160a01b0393841681029190911791829055602080549190920483167fffffffffffffffffffffffff0000000000000000000000000000000000000000909116811790915560285460265460405192939182169291169061053290617837565b6001600160a01b03938416815291831660208301529091166040820152606001604051809103906000f08015801561056e573d6000803e3d6000fd5b50602180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392831617905560205460245460285460265460405193851694928316939183169216906105c990617845565b6001600160a01b039485168152928416602084015290831660408301529091166060820152608001604051809103906000f08015801561060d573d6000803e3d6000fd5b50602280547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039283161790556028546040517fc88a5e6d00000000000000000000000000000000000000000000000000000000815291166004820152670de0b6b3a76400006024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c88a5e6d90604401600060405180830381600087803b1580156106b957600080fd5b505af11580156106cd573d6000803e3d6000fd5b50506026546040517f06447d560000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506306447d569150602401600060405180830381600087803b15801561074357600080fd5b505af1158015610757573d6000803e3d6000fd5b50506020546021546040517fae7a3a6f0000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201529116925063ae7a3a6f9150602401600060405180830381600087803b1580156107bd57600080fd5b505af11580156107d1573d6000803e3d6000fd5b50506020546022546040517f10188aef0000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152911692506310188aef9150602401600060405180830381600087803b15801561083757600080fd5b505af115801561084b573d6000803e3d6000fd5b505050507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b03166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156108ad57600080fd5b505af11580156108c1573d6000803e3d6000fd5b50506023546026546040517f40c10f190000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620f42406024820152911692506340c10f199150604401600060405180830381600087803b15801561093057600080fd5b505af1158015610944573d6000803e3d6000fd5b50506023546021546040517fa9059cbb0000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201526207a12060248201529116925063a9059cbb91506044016020604051808303816000875af11580156109b8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109dc9190617cf2565b506040516109e990617853565b604051809103906000f080158015610a05573d6000803e3d6000fd5b50602580547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03928316179055604080518082018252600f81527f476174657761795a45564d2e736f6c0000000000000000000000000000000000602082015260248054602e54935190851691810191909152919092166044820152610aee919060640160408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f485cc95500000000000000000000000000000000000000000000000000000000179052613710565b602980546001600160a01b03929092167fffffffffffffffffffffffff00000000000000000000000000000000000000009283168117909155602a80549092168117909155604051610b3f90617861565b6001600160a01b039091168152602001604051809103906000f080158015610b6b573d6000803e3d6000fd5b50602b80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03929092169190911790556040517f06447d5600000000000000000000000000000000000000000000000000000000815273735b14bb79463307aacbed86daf3322b1e6226ab6004820181905290737109709ecfa91a80626ff3989d68f67f5b1dd12d906306447d5690602401600060405180830381600087803b158015610c2057600080fd5b505af1158015610c34573d6000803e3d6000fd5b505050506000806000604051610c499061786f565b6001600160a01b03938416815291831660208301529091166040820152606001604051809103906000f080158015610c85573d6000803e3d6000fd5b50602c80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03928316908117909155602a54604051601293600193600093849391921690610cdb9061787d565b610cea96959493929190617d14565b604051809103906000f080158015610d06573d6000803e3d6000fd5b50602d80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03928316908117909155602c546040517fee2815ba0000000000000000000000000000000000000000000000000000000081526001600482015260248101929092529091169063ee2815ba90604401600060405180830381600087803b158015610d9d57600080fd5b505af1158015610db1573d6000803e3d6000fd5b5050602c546040517fa7cb050700000000000000000000000000000000000000000000000000000000815260016004820181905260248201526001600160a01b03909116925063a7cb05079150604401600060405180830381600087803b158015610e1b57600080fd5b505af1158015610e2f573d6000803e3d6000fd5b5050602d54602e546040517f47e7ef240000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620f42406024820152911692506347e7ef2491506044016020604051808303816000875af1158015610ea3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ec79190617cf2565b50602d54602b546040517f47e7ef240000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620f424060248201529116906347e7ef24906044016020604051808303816000875af1158015610f38573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f5c9190617cf2565b507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b03166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610fbb57600080fd5b505af1158015610fcf573d6000803e3d6000fd5b5050602e546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b15801561104557600080fd5b505af1158015611059573d6000803e3d6000fd5b5050602d54602a546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620f424060248201529116925063095ea7b391506044016020604051808303816000875af11580156110cd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110f19190617cf2565b506028546040517fc88a5e6d0000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152670de0b6b3a76400006024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c88a5e6d90604401600060405180830381600087803b15801561117257600080fd5b505af1158015611186573d6000803e3d6000fd5b5050505050565b606060168054806020026020016040519081016040528092919081815260200182805480156111e557602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116111c7575b5050505050905090565b6060601e805480602002602001604051908101604052809291908181526020016000905b8282101561132857600084815260208082206040805180820182526002870290920180546001600160a01b03168352600181018054835181870281018701909452808452939591948681019491929084015b8282101561131157838290600052602060002001805461128490617e09565b80601f01602080910402602001604051908101604052809291908181526020018280546112b090617e09565b80156112fd5780601f106112d2576101008083540402835291602001916112fd565b820191906000526020600020905b8154815290600101906020018083116112e057829003601f168201915b505050505081526020019060010190611265565b505050508152505081526020019060010190611213565b50505050905090565b606060188054806020026020016040519081016040528092919081815260200182805480156111e5576020028201919060005260206000209081546001600160a01b031681526001909101906020018083116111c7575050505050905090565b606060178054806020026020016040519081016040528092919081815260200182805480156111e5576020028201919060005260206000209081546001600160a01b031681526001909101906020018083116111c7575050505050905090565b604080518082018252600681527f48656c6c6f2100000000000000000000000000000000000000000000000000006020820152602d54602b5492517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b0393841660048201529192602a92600192670de0b6b3a7640000926000929116906370a0823190602401602060405180830381865afa15801561149d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114c19190617e56565b6040519091506000907fe04d4f9700000000000000000000000000000000000000000000000000000000906114fe90889088908890602401617e6f565b60408051601f19818403018152918152602080830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909516949094179093526025549051919350600092611597926001600160a01b03909216910160609190911b6bffffffffffffffffffffffff1916815260140190565b60408051601f1981840301815290829052602d546115c892620f4240916001600160a01b0316908690602401617e99565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f7993c1e000000000000000000000000000000000000000000000000000000000179052602a5490517ff30c7ba3000000000000000000000000000000000000000000000000000000008152919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f30c7ba391611685916001600160a01b0391909116906000908690600401617ed8565b600060405180830381600087803b15801561169f57600080fd5b505af11580156116b3573d6000803e3d6000fd5b5050602e546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b15801561172957600080fd5b505af115801561173d573d6000803e3d6000fd5b5050602b5460255460405160609190911b6bffffffffffffffffffffffff191660208201526001600160a01b039091169250630abd8905915060340160408051601f1981840301815290829052602d547fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1683526117d792620f4240916001600160a01b0316908d908d908d90600401617f00565b600060405180830381600087803b1580156117f157600080fd5b505af1158015611805573d6000803e3d6000fd5b50506020546040517fc88a5e6d0000000000000000000000000000000000000000000000000000000081526001600160a01b03909116600482015260248101879052737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c88a5e6d9150604401600060405180830381600087803b15801561188257600080fd5b505af1158015611896573d6000803e3d6000fd5b50506025546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b15801561192857600080fd5b505af115801561193c573d6000803e3d6000fd5b50506020546040517f1f1ff1f5fb41346850b2f5c04e6c767e2f1c8a525c5c0c5cdb60cdf3ca5f62fa935061198592506001600160a01b039091169087908b908b908b90617f55565b60405180910390a16020546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b158015611a1b57600080fd5b505af1158015611a2f573d6000803e3d6000fd5b50506025546040516001600160a01b0390911692507fcaf938de11c367272220bfd1d2baa99ca46665e7bc4d85f00adb51b90fe1fa9f9150611a749087908690617f96565b60405180910390a26028546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015611aee57600080fd5b505af1158015611b02573d6000803e3d6000fd5b50506020546025546040517f1cff79cd0000000000000000000000000000000000000000000000000000000081526001600160a01b039283169450631cff79cd93508892611b569216908790600401617faf565b60006040518083038185885af1158015611b74573d6000803e3d6000fd5b50505050506040513d6000823e601f3d908101601f19168201604052611b9d91908101906180b9565b50602d54602b546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260009291909116906370a0823190602401602060405180830381865afa158015611c08573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c2c9190617e56565b9050611c4481611c3f620f42408761811d565b61372f565b5050505050505050565b6060601b805480602002602001604051908101604052809291908181526020016000905b828210156113285783829060005260206000209060020201604051806040016040529081600082018054611ca590617e09565b80601f0160208091040260200160405190810160405280929190818152602001828054611cd190617e09565b8015611d1e5780601f10611cf357610100808354040283529160200191611d1e565b820191906000526020600020905b815481529060010190602001808311611d0157829003601f168201915b5050505050815260200160018201805480602002602001604051908101604052809291908181526020018280548015611db857602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019060040190602082600301049283019260010382029150808411611d655790505b50505050508152505081526020019060010190611c72565b604080518082018252600681527f48656c6c6f21000000000000000000000000000000000000000000000000000060208201529051602a90600190670de0b6b3a7640000906000907fe04d4f970000000000000000000000000000000000000000000000000000000090611e4c90879087908790602401617e6f565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009490941693909317909252602a5491517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b0390921660848301529150737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b158015611f3b57600080fd5b505af1158015611f4f573d6000803e3d6000fd5b5050602e5460255460405160609190911b6bffffffffffffffffffffffff19166020820152600093506001600160a01b0390911691507fde19dbe881cc0aeeb6e73ce19ac7b5ca695e6be8a076e3eb42292005a7fec1b59060340160408051601f19818403018152828252602d547f4d8943bb000000000000000000000000000000000000000000000000000000008452915190926001600160a01b0390921691620f4240916000918491634d8943bb916004808201926020929091908290030181865afa158015612025573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120499190617e56565b8860405161205c96959493929190618130565b60405180910390a3602e546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156120d657600080fd5b505af11580156120ea573d6000803e3d6000fd5b5050602a5460255460405160609190911b6bffffffffffffffffffffffff191660208201526001600160a01b039091169250637993c1e0915060340160408051601f1981840301815290829052602d547fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16835261218092620f4240916001600160a01b0316908790600401618183565b600060405180830381600087803b15801561219a57600080fd5b505af11580156121ae573d6000803e3d6000fd5b5050602d54602e546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260009450911691506370a0823190602401602060405180830381865afa15801561221a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061223e9190617e56565b905061224b81600061372f565b6020546040517fc88a5e6d0000000000000000000000000000000000000000000000000000000081526001600160a01b03909116600482015260248101849052737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c88a5e6d90604401600060405180830381600087803b1580156122c457600080fd5b505af11580156122d8573d6000803e3d6000fd5b50506025546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b15801561236a57600080fd5b505af115801561237e573d6000803e3d6000fd5b50506020546040517f1f1ff1f5fb41346850b2f5c04e6c767e2f1c8a525c5c0c5cdb60cdf3ca5f62fa93506123c792506001600160a01b039091169086908a908a908a90617f55565b60405180910390a16020546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b15801561245d57600080fd5b505af1158015612471573d6000803e3d6000fd5b50506025546040516001600160a01b0390911692507fcaf938de11c367272220bfd1d2baa99ca46665e7bc4d85f00adb51b90fe1fa9f91506124b69086908690617f96565b60405180910390a26028546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561253057600080fd5b505af1158015612544573d6000803e3d6000fd5b50506020546025546040517f1cff79cd0000000000000000000000000000000000000000000000000000000081526001600160a01b039283169450631cff79cd935087926125989216908790600401617faf565b60006040518083038185885af11580156125b6573d6000803e3d6000fd5b50505050506040513d6000823e601f3d908101601f191682016040526125df91908101906180b9565b50505050505050565b6060601a805480602002602001604051908101604052809291908181526020016000905b8282101561132857838290600052602060002001805461262b90617e09565b80601f016020809104026020016040519081016040528092919081815260200182805461265790617e09565b80156126a45780601f10612679576101008083540402835291602001916126a4565b820191906000526020600020905b81548152906001019060200180831161268757829003601f168201915b50505050508152602001906001019061260c565b6060601d805480602002602001604051908101604052809291908181526020016000905b828210156113285760008481526020908190206040805180820182526002860290920180546001600160a01b0316835260018101805483518187028101870190945280845293949193858301939283018282801561279b57602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190600401906020826003010492830192600103820291508084116127485790505b505050505081525050815260200190600101906126dc565b604080518082018252600681527f48656c6c6f21000000000000000000000000000000000000000000000000000060208201529051602a90600190670de0b6b3a76400009082906000907fe04d4f97000000000000000000000000000000000000000000000000000000009061283190889088908690602401617e6f565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009490941693909317909252602e5491517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b0390921660048301529150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561290457600080fd5b505af1158015612918573d6000803e3d6000fd5b5050602a546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b1580156129aa57600080fd5b505af11580156129be573d6000803e3d6000fd5b5050602e5460255460405160609190911b6bffffffffffffffffffffffff191660208201528593506001600160a01b0390911691507f5322ffbbf9261ff1f8138247942d2b03b28717141ef0a0dd080fc4be9c4e78d39060340160408051601f1981840301815290829052612a349186906181bd565b60405180910390a3602a5460255460405160609190911b6bffffffffffffffffffffffff191660208201526001600160a01b0390911690635d40e1789060340160405160208183030381529060405284846040518463ffffffff1660e01b8152600401612aa3939291906181e2565b600060405180830381600087803b158015612abd57600080fd5b505af1158015612ad1573d6000803e3d6000fd5b50506020546040517fc88a5e6d0000000000000000000000000000000000000000000000000000000081526001600160a01b03909116600482015260248101869052737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c88a5e6d9150604401600060405180830381600087803b158015612b4e57600080fd5b505af1158015612b62573d6000803e3d6000fd5b50506020546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b158015612bf457600080fd5b505af1158015612c08573d6000803e3d6000fd5b50506025546040516001600160a01b0390911692507fcaf938de11c367272220bfd1d2baa99ca46665e7bc4d85f00adb51b90fe1fa9f9150612c4d9086908590617f96565b60405180910390a26028546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015612cc757600080fd5b505af1158015612cdb573d6000803e3d6000fd5b50506020546025546040517f1cff79cd0000000000000000000000000000000000000000000000000000000081526001600160a01b039283169450631cff79cd935087926125989216908690600401617faf565b6060601c805480602002602001604051908101604052809291908181526020016000905b828210156113285760008481526020908190206040805180820182526002860290920180546001600160a01b03168352600181018054835181870281018701909452808452939491938583019392830182828015612e1257602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019060040190602082600301049283019260010382029150808411612dbf5790505b50505050508152505081526020019060010190612d53565b60606019805480602002602001604051908101604052809291908181526020016000905b82821015611328578382906000526020600020018054612e6d90617e09565b80601f0160208091040260200160405190810160405280929190818152602001828054612e9990617e09565b8015612ee65780601f10612ebb57610100808354040283529160200191612ee6565b820191906000526020600020905b815481529060010190602001808311612ec957829003601f168201915b505050505081526020019060010190612e4e565b60085460009060ff1615612f12575060085460ff1690565b6040517f667f9d70000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d600482018190527f6661696c65640000000000000000000000000000000000000000000000000000602483015260009163667f9d7090604401602060405180830381865afa158015612fa3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612fc79190617e56565b1415905090565b604080518082018252600681527f48656c6c6f21000000000000000000000000000000000000000000000000000060208201529051602a90600190670de0b6b3a76400009082906000907fe04d4f97000000000000000000000000000000000000000000000000000000009061304c90889088908690602401617e6f565b60408051601f19818403018152918152602080830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009095169490941790935260255490519193506000926130e5926001600160a01b03909216910160609190911b6bffffffffffffffffffffffff1916815260140190565b60408051601f198184030181529082905261310691859085906024016181e2565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f5d40e17800000000000000000000000000000000000000000000000000000000179052602a5490517ff30c7ba3000000000000000000000000000000000000000000000000000000008152919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f30c7ba3916131c3916001600160a01b0391909116906000908690600401617ed8565b600060405180830381600087803b1580156131dd57600080fd5b505af11580156131f1573d6000803e3d6000fd5b5050602e546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b15801561326757600080fd5b505af115801561327b573d6000803e3d6000fd5b5050602b5460255460405160609190911b6bffffffffffffffffffffffff191660208201526001600160a01b03909116925063865b36f69150603401604051602081830303815290604052858a8a8a6040518663ffffffff1660e01b81526004016132ea95949392919061820d565b600060405180830381600087803b15801561330457600080fd5b505af1158015613318573d6000803e3d6000fd5b50506020546040517fc88a5e6d0000000000000000000000000000000000000000000000000000000081526001600160a01b03909116600482015260248101879052737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c88a5e6d9150604401600060405180830381600087803b15801561339557600080fd5b505af11580156133a9573d6000803e3d6000fd5b50506025546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b15801561343b57600080fd5b505af115801561344f573d6000803e3d6000fd5b50506020546040517f1f1ff1f5fb41346850b2f5c04e6c767e2f1c8a525c5c0c5cdb60cdf3ca5f62fa935061349892506001600160a01b039091169087908b908b908b90617f55565b60405180910390a16020546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b15801561352e57600080fd5b505af1158015613542573d6000803e3d6000fd5b50506025546040516001600160a01b0390911692507fcaf938de11c367272220bfd1d2baa99ca46665e7bc4d85f00adb51b90fe1fa9f91506135879087908690617f96565b60405180910390a26028546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561360157600080fd5b505af1158015613615573d6000803e3d6000fd5b50506020546025546040517f1cff79cd0000000000000000000000000000000000000000000000000000000081526001600160a01b039283169450631cff79cd935088926136699216908790600401617faf565b60006040518083038185885af1158015613687573d6000803e3d6000fd5b50505050506040513d6000823e601f3d908101601f19168201604052611c4491908101906180b9565b606060158054806020026020016040519081016040528092919081815260200182805480156111e5576020028201919060005260206000209081546001600160a01b031681526001909101906020018083116111c7575050505050905090565b600061371a61788b565b6137258484836137b6565b9150505b92915050565b6040517f98296c540000000000000000000000000000000000000000000000000000000081526004810183905260248101829052737109709ecfa91a80626ff3989d68f67f5b1dd12d906398296c549060440160006040518083038186803b15801561379a57600080fd5b505afa1580156137ae573d6000803e3d6000fd5b505050505050565b6000806137c38584613831565b90506138266040518060400160405280601d81526020017f4552433139363750726f78792e736f6c3a4552433139363750726f78790000008152508286604051602001613811929190617faf565b6040516020818303038152906040528561383d565b9150505b9392505050565b600061382a838361386b565b60c081015151600090156138615761385a84848460c00151613886565b905061382a565b61385a8484613a2c565b60006138778383613b17565b61382a8383602001518461383d565b600080613891613b27565b9050600061389f8683613bfa565b905060006138b682606001518360200151856140a0565b905060006138c6838389896142b2565b905060006138d38261512f565b602081015181519192509060030b15613946578982604001516040516020016138fd929190618252565b60408051601f19818403018152908290527f08c379a000000000000000000000000000000000000000000000000000000000825261393d916004016182d3565b60405180910390fd5b60006139896040518060400160405280601581526020017f4465706c6f79656420746f20616464726573733a2000000000000000000000008152508360016152fe565b6040517fc6ce059d000000000000000000000000000000000000000000000000000000008152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c6ce059d906139dc9084906004016182d3565b602060405180830381865afa1580156139f9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a1d91906182e6565b9b9a5050505050505050505050565b6040517f8d1cc9250000000000000000000000000000000000000000000000000000000081526000908190737109709ecfa91a80626ff3989d68f67f5b1dd12d90638d1cc92590613a819087906004016182d3565b600060405180830381865afa158015613a9e573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052613ac691908101906180b9565b90506000613af48285604051602001613ae092919061830f565b6040516020818303038152906040526154fe565b90506001600160a01b0381166137255784846040516020016138fd92919061833e565b613b2382826000615511565b5050565b604080518082018252600381527f6f75740000000000000000000000000000000000000000000000000000000000602082015290517fd145736c000000000000000000000000000000000000000000000000000000008152606091737109709ecfa91a80626ff3989d68f67f5b1dd12d91829063d145736c90613bae9084906004016183e9565b600060405180830381865afa158015613bcb573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052613bf39190810190618430565b9250505090565b613c2c6040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b6000737109709ecfa91a80626ff3989d68f67f5b1dd12d9050613c776040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b613c8085615614565b60208201526000613c90866159f9565b90506000836001600160a01b031663d930a0e66040518163ffffffff1660e01b8152600401600060405180830381865afa158015613cd2573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052613cfa9190810190618430565b86838560200151604051602001613d149493929190618479565b60408051601f19818403018152908290527f60f9bb1100000000000000000000000000000000000000000000000000000000825291506000906001600160a01b038616906360f9bb1190613d6c9085906004016182d3565b600060405180830381865afa158015613d89573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052613db19190810190618430565b6040517fdb4235f60000000000000000000000000000000000000000000000000000000081529091506001600160a01b0386169063db4235f690613df990849060040161857d565b602060405180830381865afa158015613e16573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613e3a9190617cf2565b613e4f57816040516020016138fd91906185cf565b6040517f49c4fac80000000000000000000000000000000000000000000000000000000081526001600160a01b038616906349c4fac890613e94908490600401618661565b600060405180830381865afa158015613eb1573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052613ed99190810190618430565b84526040517fdb4235f60000000000000000000000000000000000000000000000000000000081526001600160a01b0386169063db4235f690613f209084906004016186b3565b602060405180830381865afa158015613f3d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613f619190617cf2565b15613ff6576040517f49c4fac80000000000000000000000000000000000000000000000000000000081526001600160a01b038616906349c4fac890613fab9084906004016186b3565b600060405180830381865afa158015613fc8573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052613ff09190810190618430565b60408501525b846001600160a01b03166349c4fac882866000015160405160200161401b9190618705565b6040516020818303038152906040526040518363ffffffff1660e01b81526004016140479291906181bd565b600060405180830381865afa158015614064573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261408c9190810190618430565b606085015250608083015250949350505050565b60408051600480825260a0820190925260609160009190816020015b60608152602001906001900390816140bc5790505090506040518060400160405280600481526020017f67726570000000000000000000000000000000000000000000000000000000008152508160008151811061411c5761411c618771565b60200260200101819052506040518060400160405280600381526020017f2d726c00000000000000000000000000000000000000000000000000000000008152508160018151811061417057614170618771565b60200260200101819052508460405160200161418c91906187a0565b604051602081830303815290604052816002815181106141ae576141ae618771565b6020026020010181905250826040516020016141ca919061880c565b604051602081830303815290604052816003815181106141ec576141ec618771565b602002602001018190525060006142028261512f565b602080820151604080518082018252600581527f2e6a736f6e00000000000000000000000000000000000000000000000000000081850190815282518084018452600080825290860152825180840190935290518252928101929092529192506142939060408051808201825260008082526020918201528151808301909252845182528085019082015290615c7c565b6142a857856040516020016138fd919061884d565b9695505050505050565b60a0810151604080518082018252600080825260209182015281518083019092528251808352928101910152606090737109709ecfa91a80626ff3989d68f67f5b1dd12d9015614302565b511590565b614476578260200151156143be576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605860248201527f54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f742060448201527f62652075736564207768656e207468652060736b6970566572696679536f757260648201527f6365436f646560206f7074696f6e206973206074727565600000000000000000608482015260a40161393d565b8260c0015115614476576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605360248201527f54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f742060448201527f62652075736564207768656e207468652060736b69704c6963656e736554797060648201527f6560206f7074696f6e2069732060747275656000000000000000000000000000608482015260a40161393d565b6040805160ff8082526120008201909252600091816020015b606081526020019060019003908161448f57905050905060006040518060400160405280600381526020017f6e707800000000000000000000000000000000000000000000000000000000008152508282806144ea906188de565b935060ff16815181106144ff576144ff618771565b60200260200101819052506040518060400160405280600d81526020017f302e302e312d616c7068612e370000000000000000000000000000000000000081525060405160200161455091906188fd565b60405160208183030381529060405282828061456b906188de565b935060ff168151811061458057614580618771565b60200260200101819052506040518060400160405280600681526020017f6465706c6f7900000000000000000000000000000000000000000000000000008152508282806145cd906188de565b935060ff16815181106145e2576145e2618771565b60200260200101819052506040518060400160405280600e81526020017f2d2d636f6e74726163744e616d6500000000000000000000000000000000000081525082828061462f906188de565b935060ff168151811061464457614644618771565b60200260200101819052508760200151828280614660906188de565b935060ff168151811061467557614675618771565b60200260200101819052506040518060400160405280600e81526020017f2d2d636f6e7472616374506174680000000000000000000000000000000000008152508282806146c2906188de565b935060ff16815181106146d7576146d7618771565b6020908102919091010152875182826146ef816188de565b935060ff168151811061470457614704618771565b60200260200101819052506040518060400160405280600981526020017f2d2d636861696e49640000000000000000000000000000000000000000000000815250828280614751906188de565b935060ff168151811061476657614766618771565b602002602001018190525061477a46615cdd565b8282614785816188de565b935060ff168151811061479a5761479a618771565b60200260200101819052506040518060400160405280600f81526020017f2d2d6275696c64496e666f46696c6500000000000000000000000000000000008152508282806147e7906188de565b935060ff16815181106147fc576147fc618771565b602002602001018190525086828280614814906188de565b935060ff168151811061482957614829618771565b60209081029190910101528551156149505760408051808201909152601581527f2d2d636f6e7374727563746f7242797465636f646500000000000000000000006020820152828261487a816188de565b935060ff168151811061488f5761488f618771565b60209081029190910101526040517f71aad10d0000000000000000000000000000000000000000000000000000000081526001600160a01b038416906371aad10d906148df9089906004016182d3565b600060405180830381865afa1580156148fc573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526149249190810190618430565b828261492f816188de565b935060ff168151811061494457614944618771565b60200260200101819052505b846020015115614a205760408051808201909152601281527f2d2d766572696679536f75726365436f6465000000000000000000000000000060208201528282614999816188de565b935060ff16815181106149ae576149ae618771565b60200260200101819052506040518060400160405280600581526020017f66616c73650000000000000000000000000000000000000000000000000000008152508282806149fb906188de565b935060ff1681518110614a1057614a10618771565b6020026020010181905250614be7565b614a586142fd8660a0015160408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b614aeb5760408051808201909152600d81527f2d2d6c6963656e7365547970650000000000000000000000000000000000000060208201528282614a9b816188de565b935060ff1681518110614ab057614ab0618771565b60200260200101819052508460a00151604051602001614ad091906187a0565b6040516020818303038152906040528282806149fb906188de565b8460c00151158015614b2e575060408089015181518083018352600080825260209182015282518084019093528151835290810190820152614b2c90511590565b155b15614be75760408051808201909152600d81527f2d2d6c6963656e7365547970650000000000000000000000000000000000000060208201528282614b72816188de565b935060ff1681518110614b8757614b87618771565b6020026020010181905250614b9b88615d7d565b604051602001614bab91906187a0565b604051602081830303815290604052828280614bc6906188de565b935060ff1681518110614bdb57614bdb618771565b60200260200101819052505b60408086015181518083018352600080825260209182015282518084019093528151835290810190820152614c1b90511590565b614cb05760408051808201909152600b81527f2d2d72656c61796572496400000000000000000000000000000000000000000060208201528282614c5e816188de565b935060ff1681518110614c7357614c73618771565b60200260200101819052508460400151828280614c8f906188de565b935060ff1681518110614ca457614ca4618771565b60200260200101819052505b606085015115614dd15760408051808201909152600681527f2d2d73616c74000000000000000000000000000000000000000000000000000060208201528282614cf9816188de565b935060ff1681518110614d0e57614d0e618771565b602090810291909101015260608501516040517fb11a19e800000000000000000000000000000000000000000000000000000000815260048101919091526001600160a01b0384169063b11a19e890602401600060405180830381865afa158015614d7d573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052614da59190810190618430565b8282614db0816188de565b935060ff1681518110614dc557614dc5618771565b60200260200101819052505b60e08501515115614e785760408051808201909152600a81527f2d2d6761734c696d69740000000000000000000000000000000000000000000060208201528282614e1b816188de565b935060ff1681518110614e3057614e30618771565b6020026020010181905250614e4c8560e0015160000151615cdd565b8282614e57816188de565b935060ff1681518110614e6c57614e6c618771565b60200260200101819052505b60e08501516020015115614f225760408051808201909152600a81527f2d2d67617350726963650000000000000000000000000000000000000000000060208201528282614ec5816188de565b935060ff1681518110614eda57614eda618771565b6020026020010181905250614ef68560e0015160200151615cdd565b8282614f01816188de565b935060ff1681518110614f1657614f16618771565b60200260200101819052505b60e08501516040015115614fcc5760408051808201909152600e81527f2d2d6d617846656550657247617300000000000000000000000000000000000060208201528282614f6f816188de565b935060ff1681518110614f8457614f84618771565b6020026020010181905250614fa08560e0015160400151615cdd565b8282614fab816188de565b935060ff1681518110614fc057614fc0618771565b60200260200101819052505b60e085015160600151156150765760408051808201909152601681527f2d2d6d61785072696f726974794665655065724761730000000000000000000060208201528282615019816188de565b935060ff168151811061502e5761502e618771565b602002602001018190525061504a8560e0015160600151615cdd565b8282615055816188de565b935060ff168151811061506a5761506a618771565b60200260200101819052505b60008160ff1667ffffffffffffffff81111561509457615094617fd1565b6040519080825280602002602001820160405280156150c757816020015b60608152602001906001900390816150b25790505b50905060005b8260ff168160ff16101561512057838160ff16815181106150f0576150f0618771565b6020026020010151828260ff168151811061510d5761510d618771565b60209081029190910101526001016150cd565b5093505050505b949350505050565b6151566040518060600160405280600060030b815260200160608152602001606081525090565b60408051808201825260048082527f6261736800000000000000000000000000000000000000000000000000000000602083015291517fd145736c000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d92600091849163d145736c916151dc91869101618968565b600060405180830381865afa1580156151f9573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526152219190810190618430565b9050600061522f868361686c565b90506000846001600160a01b031663f45c1ce7836040518263ffffffff1660e01b815260040161525f9190617be4565b6000604051808303816000875af115801561527e573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526152a691908101906189af565b805190915060030b158015906152bf5750602081015151155b80156152ce5750604081015151155b156142a857816000815181106152e6576152e6618771565b60200260200101516040516020016138fd9190618a65565b606060006153338560408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b60408051808201825260008082526020918201528151808301909252865182528087019082015290915061536a9082905b906169c1565b156154c75760006153e7826153e1846153db6153ad8a60408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6040805180820182526000808252602091820152815180830190925282518252918201519181019190915290565b906169e8565b90616a4a565b604080518082018252600181527f0a000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015290915061544b9082906169c1565b156154b557604080518082018252600181527f0a00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526154b2905b8290616acf565b90505b6154be81616af5565b9250505061382a565b82156154e05784846040516020016138fd929190618c51565b505060408051602081019091526000815261382a565b509392505050565b6000808251602084016000f09392505050565b8160a001511561552057505050565b600061552d848484616b5e565b9050600061553a8261512f565b602081015181519192509060030b1580156155d65750604080518082018252600781527f5355434345535300000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526155d690604080518082018252600080825260209182015281518083019092528451825280850190820152615364565b156155e357505050505050565b604082015151156156035781604001516040516020016138fd9190618cf8565b806040516020016138fd9190618d56565b606060006156498360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600481527f2e736f6c00000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201529091506156ae905b8290615c7c565b1561571d57604080518082018252600481527f2e736f6c000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261382a906157189083906170f9565b616af5565b604080518082018252600181527f3a000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261577f905b8290617183565b60010361584c57604080518082018252600181527f3a00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526157e5906154ab565b50604080518082018252600181527f3a000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261382a90615718905b8390616acf565b604080518082018252600581527f2e6a736f6e000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526158ab906156a7565b156159e257604080518082018252600181527f2f0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082018190528451808601909552925184528301529061591390839061721d565b905060008160018351615926919061811d565b8151811061593657615936618771565b602002602001015190506159d96157186159ac6040518060400160405280600581526020017f2e6a736f6e00000000000000000000000000000000000000000000000000000081525060408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600080825260209182015281518083019092528551825280860190820152906170f9565b95945050505050565b826040516020016138fd9190618dc1565b50919050565b60606000615a2e8360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600481527f2e736f6c0000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152909150615a90906156a7565b15615a9e5761382a81616af5565b604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152615afd90615778565b600103615b6757604080518082018252600181527f3a000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261382a9061571890615845565b604080518082018252600581527f2e6a736f6e00000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152615bc6906156a7565b156159e257604080518082018252600181527f2f00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820181905284518086019095529251845283015290615c2e90839061721d565b9050600181511115615c6a578060028251615c49919061811d565b81518110615c5957615c59618771565b602002602001015192505050919050565b50826040516020016138fd9190618dc1565b805182516000911115615c9157506000613729565b81518351602085015160009291615ca791618e9f565b615cb1919061811d565b905082602001518103615cc8576001915050613729565b82516020840151819020912014905092915050565b60606000615cea836172c2565b600101905060008167ffffffffffffffff811115615d0a57615d0a617fd1565b6040519080825280601f01601f191660200182016040528015615d34576020820181803683370190505b5090508181016020015b600019017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a8504945084615d3e57509392505050565b604081810151815180830183526000808252602091820181905283518085018552835181529282018383015283518085018552600a81527f554e4c4943454e5345440000000000000000000000000000000000000000000081840190815285518087018752838152840192909252845180860190955251845290830152606091615e09905b82906173a4565b15615e4957505060408051808201909152600481527f4e6f6e65000000000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600981527f556e6c6963656e7365000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152615ea890615e02565b15615ee857505060408051808201909152600981527f556e6c6963656e736500000000000000000000000000000000000000000000006020820152919050565b604080518082018252600381527f4d4954000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152615f4790615e02565b15615f8757505060408051808201909152600381527f4d495400000000000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f47504c2d322e302d6f6e6c79000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152615fe690615e02565b8061604b5750604080518082018252601081527f47504c2d322e302d6f722d6c61746572000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261604b90615e02565b1561608b57505060408051808201909152600981527f474e552047504c763200000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f47504c2d332e302d6f6e6c790000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526160ea90615e02565b8061614f5750604080518082018252601081527f47504c2d332e302d6f722d6c61746572000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261614f90615e02565b1561618f57505060408051808201909152600981527f474e552047504c763300000000000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4c47504c2d322e312d6f6e6c7900000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526161ee90615e02565b806162535750604080518082018252601181527f4c47504c2d322e312d6f722d6c617465720000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261625390615e02565b1561629357505060408051808201909152600c81527f474e55204c47504c76322e3100000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4c47504c2d332e302d6f6e6c7900000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526162f290615e02565b806163575750604080518082018252601181527f4c47504c2d332e302d6f722d6c617465720000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261635790615e02565b1561639757505060408051808201909152600a81527f474e55204c47504c7633000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f4253442d322d436c617573650000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526163f690615e02565b1561643657505060408051808201909152600c81527f4253442d322d436c6175736500000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f4253442d332d436c6175736500000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261649590615e02565b156164d557505060408051808201909152600c81527f4253442d332d436c6175736500000000000000000000000000000000000000006020820152919050565b604080518082018252600781527f4d504c2d322e30000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261653490615e02565b1561657457505060408051808201909152600781527f4d504c2d322e30000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600781527f4f534c2d332e3000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526165d390615e02565b1561661357505060408051808201909152600781527f4f534c2d332e30000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600a81527f4170616368652d322e30000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261667290615e02565b156166b257505060408051808201909152600a81527f4170616368652d322e30000000000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4147504c2d332e302d6f6e6c79000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261671190615e02565b806167765750604080518082018252601181527f4147504c2d332e302d6f722d6c617465720000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261677690615e02565b156167b657505060408051808201909152600a81527f474e55204147504c7633000000000000000000000000000000000000000000006020820152919050565b604080518082018252600881527f4255534c2d312e310000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261681590615e02565b1561685557505060408051808201909152600781527f42534c20312e31000000000000000000000000000000000000000000000000006020820152919050565b604080840151845191516138fd9290602001618eb2565b60608060005b84518110156168f7578185828151811061688e5761688e618771565b60200260200101516040516020016168a792919061830f565b6040516020818303038152906040529150600185516168c6919061811d565b81146168ef57816040516020016168dd919061901b565b60405160208183030381529060405291505b600101616872565b5060408051600380825260808201909252600091816020015b6060815260200190600190039081616910579050509050838160008151811061693b5761693b618771565b60200260200101819052506040518060400160405280600281526020017f2d630000000000000000000000000000000000000000000000000000000000008152508160018151811061698f5761698f618771565b602002602001018190525081816002815181106169ae576169ae618771565b6020908102919091010152949350505050565b60208083015183518351928401516000936169df92918491906173b8565b14159392505050565b60408051808201909152600080825260208201526000616a1a84600001518560200151856000015186602001516174c9565b9050836020015181616a2c919061811d565b84518590616a3b90839061811d565b90525060208401525090919050565b6040805180820190915260008082526020820152815183511015616a6f575081613729565b6020808301519084015160019114616a965750815160208481015190840151829020919020145b8015616ac757825184518590616aad90839061811d565b9052508251602085018051616ac3908390618e9f565b9052505b509192915050565b6040805180820190915260008082526020820152616aee8383836175e9565b5092915050565b60606000826000015167ffffffffffffffff811115616b1657616b16617fd1565b6040519080825280601f01601f191660200182016040528015616b40576020820181803683370190505b5090506000602082019050616aee8185602001518660000151617694565b60606000616b6a613b27565b6040805160ff808252612000820190925291925060009190816020015b6060815260200190600190039081616b8757905050905060006040518060400160405280600381526020017f6e70780000000000000000000000000000000000000000000000000000000000815250828280616be2906188de565b935060ff1681518110616bf757616bf7618771565b60200260200101819052506040518060400160405280600781526020017f5e312e33322e3300000000000000000000000000000000000000000000000000815250604051602001616c48919061905c565b604051602081830303815290604052828280616c63906188de565b935060ff1681518110616c7857616c78618771565b60200260200101819052506040518060400160405280600881526020017f76616c6964617465000000000000000000000000000000000000000000000000815250828280616cc5906188de565b935060ff1681518110616cda57616cda618771565b602002602001018190525082604051602001616cf6919061880c565b604051602081830303815290604052828280616d11906188de565b935060ff1681518110616d2657616d26618771565b60200260200101819052506040518060400160405280600a81526020017f2d2d636f6e747261637400000000000000000000000000000000000000000000815250828280616d73906188de565b935060ff1681518110616d8857616d88618771565b6020026020010181905250616d9d878461770e565b8282616da8816188de565b935060ff1681518110616dbd57616dbd618771565b602090810291909101015285515115616e695760408051808201909152600b81527f2d2d7265666572656e636500000000000000000000000000000000000000000060208201528282616e0f816188de565b935060ff1681518110616e2457616e24618771565b6020026020010181905250616e3d86600001518461770e565b8282616e48816188de565b935060ff1681518110616e5d57616e5d618771565b60200260200101819052505b856080015115616ed75760408051808201909152601881527f2d2d756e73616665536b697053746f72616765436865636b000000000000000060208201528282616eb2816188de565b935060ff1681518110616ec757616ec7618771565b6020026020010181905250616f3d565b8415616f3d5760408051808201909152601281527f2d2d726571756972655265666572656e6365000000000000000000000000000060208201528282616f1c816188de565b935060ff1681518110616f3157616f31618771565b60200260200101819052505b60408601515115616fd95760408051808201909152600d81527f2d2d756e73616665416c6c6f770000000000000000000000000000000000000060208201528282616f87816188de565b935060ff1681518110616f9c57616f9c618771565b60200260200101819052508560400151828280616fb8906188de565b935060ff1681518110616fcd57616fcd618771565b60200260200101819052505b8560600151156170435760408051808201909152601481527f2d2d756e73616665416c6c6f7752656e616d657300000000000000000000000060208201528282617022816188de565b935060ff168151811061703757617037618771565b60200260200101819052505b60008160ff1667ffffffffffffffff81111561706157617061617fd1565b60405190808252806020026020018201604052801561709457816020015b606081526020019060019003908161707f5790505b50905060005b8260ff168160ff1610156170ed57838160ff16815181106170bd576170bd618771565b6020026020010151828260ff16815181106170da576170da618771565b602090810291909101015260010161709a565b50979650505050505050565b604080518082019091526000808252602082015281518351101561711e575081613729565b8151835160208501516000929161713491618e9f565b61713e919061811d565b6020840151909150600190821461715f575082516020840151819020908220145b801561717a5783518551869061717690839061811d565b9052505b50929392505050565b60008082600001516171a785600001518660200151866000015187602001516174c9565b6171b19190618e9f565b90505b835160208501516171c59190618e9f565b8111616aee57816171d5816190a1565b925050826000015161720c8560200151836171f0919061811d565b86516171fc919061811d565b83866000015187602001516174c9565b6172169190618e9f565b90506171b4565b6060600061722b8484617183565b617236906001618e9f565b67ffffffffffffffff81111561724e5761724e617fd1565b60405190808252806020026020018201604052801561728157816020015b606081526020019060019003908161726c5790505b50905060005b81518110156154f65761729d6157188686616acf565b8282815181106172af576172af618771565b6020908102919091010152600101617287565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000831061730b577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310617337576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc10000831061735557662386f26fc10000830492506010015b6305f5e100831061736d576305f5e100830492506008015b612710831061738157612710830492506004015b60648310617393576064830492506002015b600a83106137295760010192915050565b60006173b0838361774e565b159392505050565b6000808584116174bf576020841161746b57600084156174035760016173df86602061811d565b6173ea9060086190bb565b6173f59060026191b9565b6173ff919061811d565b1990505b83518116856174128989618e9f565b61741c919061811d565b805190935082165b8181146174565787841161743e5787945050505050615127565b83617448816191c5565b945050828451169050617424565b6174608785618e9f565b945050505050615127565b838320617478858861811d565b6174829087618e9f565b91505b8582106174bd578482208082036174aa576174a08684618e9f565b9350505050615127565b6174b560018461811d565b925050617485565b505b5092949350505050565b600083818685116175d4576020851161758357600085156175155760016174f187602061811d565b6174fc9060086190bb565b6175079060026191b9565b617511919061811d565b1990505b845181166000876175268b8b618e9f565b617530919061811d565b855190915083165b8281146175755781861061755d576175508b8b618e9f565b9650505050505050615127565b85617567816190a1565b965050838651169050617538565b859650505050505050615127565b508383206000905b617595868961811d565b82116175d2578583208082036175b15783945050505050615127565b6175bc600185618e9f565b93505081806175ca906190a1565b92505061758b565b505b6175de8787618e9f565b979650505050505050565b6040805180820190915260008082526020820152600061761b85600001518660200151866000015187602001516174c9565b602080870180519186019190915251909150617637908261811d565b83528451602086015161764a9190618e9f565b8103617659576000855261768b565b835183516176679190618e9f565b8551869061767690839061811d565b90525083516176859082618e9f565b60208601525b50909392505050565b602081106176cc57815183526176ab602084618e9f565b92506176b8602083618e9f565b91506176c560208261811d565b9050617694565b60001981156176fb5760016176e283602061811d565b6176ee906101006191b9565b6176f8919061811d565b90505b9151835183169219169190911790915250565b6060600061771c8484613bfa565b8051602080830151604051939450617736939091016191dc565b60405160208183030381529060405291505092915050565b8151815160009190811115617761575081515b6020808501519084015160005b8381101561781a57825182518082146177ea5760001960208710156177c95760018461779b89602061811d565b6177a59190618e9f565b6177b09060086190bb565b6177bb9060026191b9565b6177c5919061811d565b1990505b81811683821681810391146177e75797506137299650505050505050565b50505b6177f5602086618e9f565b9450617802602085618e9f565b935050506020816178139190618e9f565b905061776e565b50845186516142a89190619234565b610c9f806200925583390190565b6116fe8062009ef483390190565b61155a806200b5f283390190565b610d5e806200cb4c83390190565b61080c806200d8aa83390190565b610b3f806200e0b683390190565b611bb9806200ebf583390190565b6040518060e001604052806060815260200160608152602001606081526020016000151581526020016000151581526020016000151581526020016178ce6178d3565b905290565b604051806101000160405280600015158152602001600015158152602001606081526020016000801916815260200160608152602001606081526020016000151581526020016178ce6040518060800160405280600081526020016000815260200160008152602001600081525090565b602080825282518282018190526000918401906040840190835b818110156179855783516001600160a01b031683526020938401939092019160010161795e565b509095945050505050565b60005b838110156179ab578181015183820152602001617993565b50506000910152565b600081518084526179cc816020860160208601617990565b601f01601f19169290920160200192915050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015617adc577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452815180516001600160a01b03168652602090810151604082880181905281519088018190529101906060600582901b88018101919088019060005b81811015617ac2577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa08a8503018352617aac8486516179b4565b6020958601959094509290920191600101617a72565b509197505050602094850194929092019150600101617a08565b50929695505050505050565b600081518084526020840193506020830160005b82811015617b3c5781517fffffffff0000000000000000000000000000000000000000000000000000000016865260209586019590910190600101617afc565b5093949350505050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015617adc577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08786030184528151805160408752617bb260408801826179b4565b9050602082015191508681036020880152617bcd8183617ae8565b965050506020938401939190910190600101617b6e565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015617adc577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452617c468583516179b4565b94506020938401939190910190600101617c0c565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015617adc577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc087860301845281516001600160a01b0381511686526020810151905060406020870152617cdc6040870182617ae8565b9550506020938401939190910190600101617c83565b600060208284031215617d0457600080fd5b8151801515811461382a57600080fd5b610100815260056101008201527f544f4b454e000000000000000000000000000000000000000000000000000000610120820152610140602082015260036101408201527f544b4e000000000000000000000000000000000000000000000000000000000061016082015260006101808201905060ff8816604083015286606083015260038610617dce577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b8560808301528460a0830152617def60c08301856001600160a01b03169052565b6001600160a01b03831660e0830152979650505050505050565b600181811c90821680617e1d57607f821691505b6020821081036159f3577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060208284031215617e6857600080fd5b5051919050565b606081526000617e8260608301866179b4565b602083019490945250901515604090910152919050565b608081526000617eac60808301876179b4565b62ffffff861660208401526001600160a01b038516604084015282810360608401526175de81856179b4565b6001600160a01b03841681528260208201526060604082015260006159d960608301846179b4565b60c081526000617f1360c08301896179b4565b8760208401526001600160a01b03871660408401528281036060840152617f3a81876179b4565b6080840195909552505090151560a090910152949350505050565b6001600160a01b038616815284602082015260a060408201526000617f7d60a08301866179b4565b6060830194909452509015156080909101529392505050565b82815260406020820152600061512760408301846179b4565b6001600160a01b038316815260406020820152600061512760408301846179b4565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040516060810167ffffffffffffffff8111828210171561802357618023617fd1565b60405290565b60008067ffffffffffffffff84111561804457618044617fd1565b50604051601f19601f85018116603f0116810181811067ffffffffffffffff8211171561807357618073617fd1565b60405283815290508082840185101561808b57600080fd5b6154f6846020830185617990565b600082601f8301126180aa57600080fd5b61382a83835160208501618029565b6000602082840312156180cb57600080fd5b815167ffffffffffffffff8111156180e257600080fd5b61372584828501618099565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b81810381811115613729576137296180ee565b60c08152600061814360c08301896179b4565b6001600160a01b038816602084015286604084015285606084015284608084015282810360a084015261817681856179b4565b9998505050505050505050565b60808152600061819660808301876179b4565b8560208401526001600160a01b038516604084015282810360608401526175de81856179b4565b6040815260006181d060408301856179b4565b828103602084015261382681856179b4565b6060815260006181f560608301866179b4565b84602084015282810360408401526142a881856179b4565b60a08152600061822060a08301886179b4565b866020840152828103604084015261823881876179b4565b606084019590955250509015156080909101529392505050565b7f4661696c656420746f206465706c6f7920636f6e74726163742000000000000081526000835161828a81601a850160208801617990565b7f3a20000000000000000000000000000000000000000000000000000000000000601a9184019182015283516182c781601c840160208801617990565b01601c01949350505050565b60208152600061382a60208301846179b4565b6000602082840312156182f857600080fd5b81516001600160a01b038116811461382a57600080fd5b60008351618321818460208801617990565b835190830190618335818360208801617990565b01949350505050565b7f4661696c656420746f206465706c6f7920636f6e74726163742000000000000081526000835161837681601a850160208801617990565b7f207573696e6720636f6e7374727563746f722064617461202200000000000000601a9184019182015283516183b3816033840160208801617990565b7f220000000000000000000000000000000000000000000000000000000000000060339290910191820152603401949350505050565b60408152600b60408201527f464f554e4452595f4f5554000000000000000000000000000000000000000000606082015260806020820152600061382a60808301846179b4565b60006020828403121561844257600080fd5b815167ffffffffffffffff81111561845957600080fd5b8201601f8101841361846a57600080fd5b61372584825160208401618029565b6000855161848b818460208a01617990565b7f2f0000000000000000000000000000000000000000000000000000000000000090830190815285516184c5816001840160208a01617990565b7f2f00000000000000000000000000000000000000000000000000000000000000600192909101918201528451618503816002840160208901617990565b6001818301019150507f2f0000000000000000000000000000000000000000000000000000000000000060018201528351618545816002840160208801617990565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600292909101918201526007019695505050505050565b60408152600061859060408301846179b4565b8281036020840152600481527f2e6173740000000000000000000000000000000000000000000000000000000060208201526040810191505092915050565b7f436f756c64206e6f742066696e642041535420696e206172746966616374200081526000825161860781601f850160208701617990565b7f2e205365742060617374203d20747275656020696e20666f756e6472792e746f601f9390910192830152507f6d6c000000000000000000000000000000000000000000000000000000000000603f820152604101919050565b60408152600061867460408301846179b4565b8281036020840152601181527f2e6173742e6162736f6c7574655061746800000000000000000000000000000060208201526040810191505092915050565b6040815260006186c660408301846179b4565b8281036020840152600c81527f2e6173742e6c6963656e7365000000000000000000000000000000000000000060208201526040810191505092915050565b7f2e6d657461646174612e736f75726365732e5b2700000000000000000000000081526000825161873d816014850160208701617990565b7f275d2e6b656363616b32353600000000000000000000000000000000000000006014939091019283015250602001919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f22000000000000000000000000000000000000000000000000000000000000008152600082516187d8816001850160208701617990565b7f22000000000000000000000000000000000000000000000000000000000000006001939091019283015250600201919050565b6000825161881e818460208701617990565b7f2f6275696c642d696e666f000000000000000000000000000000000000000000920191825250600b01919050565b7f436f756c64206e6f742066696e64206275696c642d696e666f2066696c65207781527f697468206d61746368696e6720736f7572636520636f6465206861736820666f60208201527f7220636f6e7472616374200000000000000000000000000000000000000000006040820152600082516188d181604b850160208701617990565b91909101604b0192915050565b600060ff821660ff81036188f4576188f46180ee565b60010192915050565b7f406f70656e7a657070656c696e2f646566656e6465722d6465706c6f792d636c81527f69656e742d636c6940000000000000000000000000000000000000000000000060208201526000825161895b816029850160208701617990565b9190910160290192915050565b60408152601660408201527f4f50454e5a455050454c494e5f424153485f5041544800000000000000000000606082015260806020820152600061382a60808301846179b4565b6000602082840312156189c157600080fd5b815167ffffffffffffffff8111156189d857600080fd5b8201606081850312156189ea57600080fd5b6189f2618000565b81518060030b8114618a0357600080fd5b8152602082015167ffffffffffffffff811115618a1f57600080fd5b618a2b86828501618099565b602083015250604082015167ffffffffffffffff811115618a4b57600080fd5b618a5786828501618099565b604083015250949350505050565b7f4661696c656420746f2072756e206261736820636f6d6d616e6420776974682081527f2200000000000000000000000000000000000000000000000000000000000000602082015260008251618ac3816021850160208701617990565b7f222e20496620796f7520617265207573696e672057696e646f77732c2073657460219390910192830152507f20746865204f50454e5a455050454c494e5f424153485f5041544820656e766960418201527f726f6e6d656e74207661726961626c6520746f207468652066756c6c7920717560618201527f616c69666965642070617468206f66207468652062617368206578656375746160818201527f626c652e20466f72206578616d706c652c20696620796f75206172652075736960a18201527f6e672047697420666f722057696e646f77732c206164642074686520666f6c6c60c18201527f6f77696e67206c696e6520696e20746865202e656e762066696c65206f66207960e18201527f6f75722070726f6a65637420287573696e6720666f727761726420736c6173686101018201527f6573293a0a4f50454e5a455050454c494e5f424153485f504154483d22433a2f6101218201527f50726f6772616d2046696c65732f4769742f62696e2f6261736822000000000061014182015261015c01919050565b7f4661696c656420746f2066696e64206c696e652077697468207072656669782081527f2700000000000000000000000000000000000000000000000000000000000000602082015260008351618caf816021850160208801617990565b7f2720696e206f75747075743a20000000000000000000000000000000000000006021918401918201528351618cec81602e840160208801617990565b01602e01949350505050565b7f4661696c656420746f2072756e2075706772616465207361666574792076616c81527f69646174696f6e3a20000000000000000000000000000000000000000000000060208201526000825161895b816029850160208701617990565b7f55706772616465207361666574792076616c69646174696f6e206661696c656481527f3a0a000000000000000000000000000000000000000000000000000000000000602082015260008251618db4816022850160208701617990565b9190910160220192915050565b7f436f6e7472616374206e616d6520000000000000000000000000000000000000815260008251618df981600e850160208701617990565b7f206d75737420626520696e2074686520666f726d6174204d79436f6e74726163600e9390910192830152507f742e736f6c3a4d79436f6e7472616374206f72204d79436f6e74726163742e73602e8201527f6f6c206f72206f75742f4d79436f6e74726163742e736f6c2f4d79436f6e7472604e8201527f6163742e6a736f6e000000000000000000000000000000000000000000000000606e820152607601919050565b80820180821115613729576137296180ee565b7f53504458206c6963656e7365206964656e746966696572200000000000000000815260008351618eea816018850160208801617990565b7f20696e20000000000000000000000000000000000000000000000000000000006018918401918201528351618f2781601c840160208801617990565b7f20646f6573206e6f74206c6f6f6b206c696b65206120737570706f7274656420601c92909101918201527f6c6963656e736520666f7220626c6f636b206578706c6f726572207665726966603c8201527f69636174696f6e2e205573652074686520606c6963656e73655479706560206f605c8201527f7074696f6e20746f20737065636966792061206c6963656e736520747970652c607c8201527f206f7220736574207468652060736b69704c6963656e73655479706560206f70609c8201527f74696f6e20746f2060747275656020746f20736b69702e00000000000000000060bc82015260d301949350505050565b6000825161902d818460208701617990565b7f2000000000000000000000000000000000000000000000000000000000000000920191825250600101919050565b7f406f70656e7a657070656c696e2f75706772616465732d636f7265400000000081526000825161909481601c850160208701617990565b91909101601c0192915050565b600060001982036190b4576190b46180ee565b5060010190565b8082028115828204841417613729576137296180ee565b6001815b600184111561910d578085048111156190f1576190f16180ee565b60018416156190ff57908102905b60019390931c9280026190d6565b935093915050565b60008261912457506001613729565b8161913157506000613729565b816001811461914757600281146191515761916d565b6001915050613729565b60ff841115619162576191626180ee565b50506001821b613729565b5060208310610133831016604e8410600b8410161715619190575081810a613729565b61919d60001984846190d2565b80600019048211156191b1576191b16180ee565b029392505050565b600061382a8383619115565b6000816191d4576191d46180ee565b506000190190565b600083516191ee818460208801617990565b7f3a000000000000000000000000000000000000000000000000000000000000009083019081528351619228816001840160208801617990565b01600101949350505050565b8181036000831280158383131683831282161715616aee57616aee6180ee56fe608060405234801561001057600080fd5b50604051610c9f380380610c9f83398101604081905261002f9161010d565b8181600361003d83826101ff565b50600461004a82826101ff565b50505050506102bd565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261007b57600080fd5b81516001600160401b0381111561009457610094610054565b604051601f8201601f19908116603f011681016001600160401b03811182821017156100c2576100c2610054565b6040528181528382016020018510156100da57600080fd5b60005b828110156100f9576020818601810151838301820152016100dd565b506000918101602001919091529392505050565b6000806040838503121561012057600080fd5b82516001600160401b0381111561013657600080fd5b6101428582860161006a565b602085015190935090506001600160401b0381111561016057600080fd5b61016c8582860161006a565b9150509250929050565b600181811c9082168061018a57607f821691505b6020821081036101aa57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156101fa57806000526020600020601f840160051c810160208510156101d75750805b601f840160051c820191505b818110156101f757600081556001016101e3565b50505b505050565b81516001600160401b0381111561021857610218610054565b61022c816102268454610176565b846101b0565b6020601f82116001811461026057600083156102485750848201515b600019600385901b1c1916600184901b1784556101f7565b600084815260208120601f198516915b828110156102905787850151825560209485019460019092019101610270565b50848210156102ae5786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b6109d3806102cc6000396000f3fe608060405234801561001057600080fd5b50600436106100be5760003560e01c806340c10f191161007657806395d89b411161005b57806395d89b4114610183578063a9059cbb1461018b578063dd62ed3e1461019e57600080fd5b806340c10f191461013857806370a082311461014d57600080fd5b806318160ddd116100a757806318160ddd1461010457806323b872dd14610116578063313ce5671461012957600080fd5b806306fdde03146100c3578063095ea7b3146100e1575b600080fd5b6100cb6101e4565b6040516100d891906107bf565b60405180910390f35b6100f46100ef366004610854565b610276565b60405190151581526020016100d8565b6002545b6040519081526020016100d8565b6100f461012436600461087e565b610290565b604051601281526020016100d8565b61014b610146366004610854565b6102b4565b005b61010861015b3660046108bb565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6100cb6102c2565b6100f4610199366004610854565b6102d1565b6101086101ac3660046108dd565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6060600380546101f390610910565b80601f016020809104026020016040519081016040528092919081815260200182805461021f90610910565b801561026c5780601f106102415761010080835404028352916020019161026c565b820191906000526020600020905b81548152906001019060200180831161024f57829003601f168201915b5050505050905090565b6000336102848185856102df565b60019150505b92915050565b60003361029e8582856102f1565b6102a98585856103c5565b506001949350505050565b6102be8282610470565b5050565b6060600480546101f390610910565b6000336102848185856103c5565b6102ec83838360016104cc565b505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146103bf57818110156103b0576040517ffb8f41b200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416600482015260248101829052604481018390526064015b60405180910390fd5b6103bf848484840360006104cc565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8316610415576040517f96c6fd1e000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff8216610465576040517fec442f05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b6102ec838383610614565b73ffffffffffffffffffffffffffffffffffffffff82166104c0576040517fec442f05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b6102be60008383610614565b73ffffffffffffffffffffffffffffffffffffffff841661051c576040517fe602df05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff831661056c576040517f94280d62000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260016020908152604080832093871683529290522082905580156103bf578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161060691815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff831661064c5780600260008282546106419190610963565b909155506106fe9050565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260208190526040902054818110156106d2576040517fe450d38c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8516600482015260248101829052604481018390526064016103a7565b73ffffffffffffffffffffffffffffffffffffffff841660009081526020819052604090209082900390555b73ffffffffffffffffffffffffffffffffffffffff821661072757600280548290039055610753565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090208054820190555b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516107b291815260200190565b60405180910390a3505050565b602081526000825180602084015260005b818110156107ed57602081860181015160408684010152016107d0565b5060006040828501015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011684010191505092915050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461084f57600080fd5b919050565b6000806040838503121561086757600080fd5b6108708361082b565b946020939093013593505050565b60008060006060848603121561089357600080fd5b61089c8461082b565b92506108aa6020850161082b565b929592945050506040919091013590565b6000602082840312156108cd57600080fd5b6108d68261082b565b9392505050565b600080604083850312156108f057600080fd5b6108f98361082b565b91506109076020840161082b565b90509250929050565b600181811c9082168061092457607f821691505b60208210810361095d577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b8082018082111561028a577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea26469706673582212207e804ca539d49155d2b6bc19268ce22f9f857027c75247d69fb0d56a089c93d464736f6c634300081a003360a060405234801561001057600080fd5b506040516116fe3803806116fe83398101604081905261002f916101e5565b60016000556002805460ff191690556001600160a01b038316158061005b57506001600160a01b038216155b8061006d57506001600160a01b038116155b1561008b5760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b0383166080526100a3600082610134565b506100ce7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a82610134565b506100f97f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e483610134565b506101126000805160206116de83398151915282610134565b5061012b6000805160206116de83398151915283610134565b50505050610228565b60008281526001602090815260408083206001600160a01b038516845290915281205460ff166101bf5760008381526001602081815260408084206001600160a01b0387168086529252808420805460ff19169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45060016101c3565b5060005b92915050565b80516001600160a01b03811681146101e057600080fd5b919050565b6000806000606084860312156101fa57600080fd5b610203846101c9565b9250610211602085016101c9565b915061021f604085016101c9565b90509250925092565b60805161147f61025f6000396000818161019e0152818161050001528181610562015281816108f70152610959015261147f6000f3fe608060405234801561001057600080fd5b506004361061016c5760003560e01c806385f438c1116100cd578063c8a0236211610081578063d936547e11610066578063d936547e14610355578063d9caed1214610378578063e63ab1e91461038b57600080fd5b8063c8a023621461032f578063d547741f1461034257600080fd5b80639a590427116100b25780639a590427146103015780639b19251a14610314578063a217fddf1461032757600080fd5b806385f438c11461029457806391d14854146102bb57600080fd5b806336568abe11610124578063570618e111610109578063570618e11461025a5780635c975abb146102815780638456cb591461028c57600080fd5b806336568abe1461023f5780633f4ba83a1461025257600080fd5b806321fc65f21161015557806321fc65f2146101e5578063248a9ca3146101fa5780632f2ff15d1461022c57600080fd5b806301ffc9a714610171578063116191b614610199575b600080fd5b61018461017f36600461118a565b6103b2565b60405190151581526020015b60405180910390f35b6101c07f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610190565b6101f86101f33660046111f5565b61044b565b005b61021e610208366004611292565b6000908152600160208190526040909120015490565b604051908152602001610190565b6101f861023a3660046112ab565b61064c565b6101f861024d3660046112ab565b610678565b6101f86106d6565b61021e7f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a81565b60025460ff16610184565b6101f861070b565b61021e7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b6101846102c93660046112ab565b600091825260016020908152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b6101f861030f3660046112d7565b61073d565b6101f86103223660046112d7565b6107be565b61021e600081565b6101f861033d3660046111f5565b610842565b6101f86103503660046112ab565b610a29565b6101846103633660046112d7565b60036020526000908152604090205460ff1681565b6101f86103863660046112f2565b610a4f565b61021e7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061044557507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b610453610b7b565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461047d81610bbe565b610485610bc8565b73ffffffffffffffffffffffffffffffffffffffff861660009081526003602052604090205460ff166104e4576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61052573ffffffffffffffffffffffffffffffffffffffff87167f000000000000000000000000000000000000000000000000000000000000000086610c07565b6040517f5131ab5900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690635131ab599061059f9089908990899089908990600401611378565b600060405180830381600087803b1580156105b957600080fd5b505af11580156105cd573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167f85b5be9cf454e05e0bddf49315178102227c312078eefa3c00294fb4d912ae4e868686604051610632939291906113d5565b60405180910390a3506106456001600055565b5050505050565b6000828152600160208190526040909120015461066881610bbe565b6106728383610c94565b50505050565b73ffffffffffffffffffffffffffffffffffffffff811633146106c7576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6106d18282610d41565b505050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61070081610bbe565b610708610de2565b50565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61073581610bbe565b610708610e41565b7f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a61076781610bbe565b73ffffffffffffffffffffffffffffffffffffffff8216600081815260036020526040808220805460ff19169055517f51085ddf9ebdded84b76e829eb58c4078e4b5bdf97d9a94723f336039da467919190a25050565b7f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a6107e881610bbe565b73ffffffffffffffffffffffffffffffffffffffff8216600081815260036020526040808220805460ff19166001179055517faab7954e9d246b167ef88aeddad35209ca2489d95a8aeb59e288d9b19fae5a549190a25050565b61084a610b7b565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461087481610bbe565b61087c610bc8565b73ffffffffffffffffffffffffffffffffffffffff861660009081526003602052604090205460ff166108db576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61091c73ffffffffffffffffffffffffffffffffffffffff87167f000000000000000000000000000000000000000000000000000000000000000086610c07565b6040517fb8969bd400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063b8969bd4906109969089908990899089908990600401611378565b600060405180830381600087803b1580156109b057600080fd5b505af11580156109c4573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fb9d4efa96044e5f5e03e696fa9ae2ff66911cc27e8a637c3627c75bc5b2241c8868686604051610632939291906113d5565b60008281526001602081905260409091200154610a4581610bbe565b6106728383610d41565b610a57610b7b565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e4610a8181610bbe565b610a89610bc8565b73ffffffffffffffffffffffffffffffffffffffff841660009081526003602052604090205460ff16610ae8576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610b0973ffffffffffffffffffffffffffffffffffffffff85168484610c07565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f9b1bfa7fa9ee420a16e124f794c35ac9f90472acc99140eb2f6447c714cad8eb84604051610b6891815260200190565b60405180910390a3506106d16001600055565b600260005403610bb7576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b6107088133610e7e565b60025460ff1615610c05576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6040805173ffffffffffffffffffffffffffffffffffffffff8416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb000000000000000000000000000000000000000000000000000000001790526106d1908490610f0f565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff16610d3957600083815260016020818152604080842073ffffffffffffffffffffffffffffffffffffffff87168086529252808420805460ff19169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a4506001610445565b506000610445565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff1615610d3957600083815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff86168085529252808320805460ff1916905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a4506001610445565b610dea610fa5565b6002805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b610e49610bc8565b6002805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258610e173390565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16610f0b576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82166004820152602481018390526044015b60405180910390fd5b5050565b6000610f3173ffffffffffffffffffffffffffffffffffffffff841683610fe1565b90508051600014158015610f56575080806020019051810190610f5491906113f8565b155b156106d1576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84166004820152602401610f02565b60025460ff16610c05576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6060610fef83836000610ff6565b9392505050565b606081471015611034576040517fcd786059000000000000000000000000000000000000000000000000000000008152306004820152602401610f02565b6000808573ffffffffffffffffffffffffffffffffffffffff16848660405161105d919061141a565b60006040518083038185875af1925050503d806000811461109a576040519150601f19603f3d011682016040523d82523d6000602084013e61109f565b606091505b50915091506110af8683836110b9565b9695505050505050565b6060826110ce576110c982611148565b610fef565b81511580156110f2575073ffffffffffffffffffffffffffffffffffffffff84163b155b15611141576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85166004820152602401610f02565b5080610fef565b8051156111585780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006020828403121561119c57600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610fef57600080fd5b803573ffffffffffffffffffffffffffffffffffffffff811681146111f057600080fd5b919050565b60008060008060006080868803121561120d57600080fd5b611216866111cc565b9450611224602087016111cc565b935060408601359250606086013567ffffffffffffffff81111561124757600080fd5b8601601f8101881361125857600080fd5b803567ffffffffffffffff81111561126f57600080fd5b88602082840101111561128157600080fd5b959894975092955050506020019190565b6000602082840312156112a457600080fd5b5035919050565b600080604083850312156112be57600080fd5b823591506112ce602084016111cc565b90509250929050565b6000602082840312156112e957600080fd5b610fef826111cc565b60008060006060848603121561130757600080fd5b611310846111cc565b925061131e602085016111cc565b929592945050506040919091013590565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff8616815273ffffffffffffffffffffffffffffffffffffffff851660208201528360408201526080606082015260006113ca60808301848661132f565b979650505050505050565b8381526040602082015260006113ef60408301848661132f565b95945050505050565b60006020828403121561140a57600080fd5b81518015158114610fef57600080fd5b6000825160005b8181101561143b5760208186018101518583015201611421565b50600092019182525091905056fea26469706673582212202f3991d39315b7c0e5ef6fd88336a0f791f8e1cce0a70cb66f2c4c9404215ae364736f6c634300081a00338619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a60c060405260001960035534801561001657600080fd5b5060405161155a38038061155a83398101604081905261003591610220565b60016000819055805460ff19169055838383836001600160a01b038416158061006557506001600160a01b038316155b8061007757506001600160a01b038216155b8061008957506001600160a01b038116155b156100a75760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b03808516608052831660a0526100c5600082610154565b506100f07f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e483610154565b5061011b7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb83610154565b506101467f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a82610154565b505050505050505050610274565b60008281526002602090815260408083206001600160a01b038516845290915281205460ff166101fa5760008381526002602090815260408083206001600160a01b03861684529091529020805460ff191660011790556101b23390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45060016101fe565b5060005b92915050565b80516001600160a01b038116811461021b57600080fd5b919050565b6000806000806080858703121561023657600080fd5b61023f85610204565b935061024d60208601610204565b925061025b60408601610204565b915061026960608601610204565b905092959194509250565b60805160a0516112826102d86000396000818161021d01528181610531015281816108240152818161097b01528181610ad00152610bf20152600081816101d1015281816104a1015281816105040152818161079401526107f701526112826000f3fe608060405234801561001057600080fd5b50600436106101775760003560e01c80635e3e9fef116100d857806391d148541161008c578063d547741f11610066578063d547741f14610386578063d5abeb0114610399578063e63ab1e9146103a257600080fd5b806391d1485414610311578063a217fddf14610357578063a783c7891461035f57600080fd5b8063743e0c9b116100bd578063743e0c9b146102cf5780638456cb59146102e257806385f438c1146102ea57600080fd5b80635e3e9fef146102a95780636f8b44b0146102bc57600080fd5b8063248a9ca31161012f57806336568abe1161011457806336568abe146102835780633f4ba83a146102965780635c975abb1461029e57600080fd5b8063248a9ca31461023f5780632f2ff15d1461027057600080fd5b8063106e629011610160578063106e6290146101b9578063116191b6146101cc57806321e093b11461021857600080fd5b806301ffc9a71461017c57806302d5c899146101a4575b600080fd5b61018f61018a366004610fb4565b6103c9565b60405190151581526020015b60405180910390f35b6101b76101b2366004611026565b610462565b005b6101b76101c73660046110b8565b6105f7565b6101f37f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161019b565b6101f37f000000000000000000000000000000000000000000000000000000000000000081565b61026261024d3660046110eb565b60009081526002602052604090206001015490565b60405190815260200161019b565b6101b761027e366004611104565b61069c565b6101b7610291366004611104565b6106c7565b6101b7610720565b60015460ff1661018f565b6101b76102b7366004611026565b610755565b6101b76102ca3660046110eb565b6108d0565b6101b76102dd3660046110eb565b61093e565b6101b76109e8565b6102627f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b61018f61031f366004611104565b600091825260026020908152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b610262600081565b6102627f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb81565b6101b7610394366004611104565b610a1a565b61026260035481565b6102627f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061045c57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b61046a610a3f565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461049481610a82565b61049c610a8c565b6104c77f00000000000000000000000000000000000000000000000000000000000000008684610acb565b6040517fb8969bd400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063b8969bd490610561907f0000000000000000000000000000000000000000000000000000000000000000908a908a908a908a90600401611179565b600060405180830381600087803b15801561057b57600080fd5b505af115801561058f573d6000803e3d6000fd5b505050508573ffffffffffffffffffffffffffffffffffffffff167fba96f26bdda53eb8c8ba39045dfb4ff39753fbc7a6edcf250a88e75e78d102fe8686866040516105dd939291906111d6565b60405180910390a2506105f06001600055565b5050505050565b6105ff610a3f565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461062981610a82565b610631610a8c565b61063c848484610acb565b8373ffffffffffffffffffffffffffffffffffffffff167f884edad9ce6fa2440d8a54cc123490eb96d2768479d49ff9c7366125a94243648460405161068491815260200190565b60405180910390a2506106976001600055565b505050565b6000828152600260205260409020600101546106b781610a82565b6106c18383610c53565b50505050565b73ffffffffffffffffffffffffffffffffffffffff81163314610716576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6106978282610d53565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61074a81610a82565b610752610e12565b50565b61075d610a3f565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461078781610a82565b61078f610a8c565b6107ba7f00000000000000000000000000000000000000000000000000000000000000008684610acb565b6040517f5131ab5900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690635131ab5990610854907f0000000000000000000000000000000000000000000000000000000000000000908a908a908a908a90600401611179565b600060405180830381600087803b15801561086e57600080fd5b505af1158015610882573d6000803e3d6000fd5b505050508573ffffffffffffffffffffffffffffffffffffffff167f7772f56296d3a5202974a45c61c9188d844ab4d6eeb18c851e4b8d5384ca6ced8686866040516105dd939291906111d6565b7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb6108fa81610a82565b610902610a8c565b60038290556040518281527f7810bd47de260c3e9ee10061cf438099dd12256c79485f12f94dbccc981e806c9060200160405180910390a15050565b610946610a8c565b6040517f79cc6790000000000000000000000000000000000000000000000000000000008152336004820152602481018290527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16906379cc679090604401600060405180830381600087803b1580156109d457600080fd5b505af11580156105f0573d6000803e3d6000fd5b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610a1281610a82565b610752610e8f565b600082815260026020526040902060010154610a3581610a82565b6106c18383610d53565b600260005403610a7b576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b6107528133610ee8565b60015460ff1615610ac9576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6003547f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b39573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b5d91906111f9565b610b679084611212565b1115610b9f576040517fc30436e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f1e458bee00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff848116600483015260248201849052604482018390527f00000000000000000000000000000000000000000000000000000000000000001690631e458bee90606401600060405180830381600087803b158015610c3657600080fd5b505af1158015610c4a573d6000803e3d6000fd5b50505050505050565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff16610d4b57600083815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff86168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055610ce93390565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a450600161045c565b50600061045c565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff1615610d4b57600083815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8616808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a450600161045c565b610e1a610f78565b600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b610e97610a8c565b600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016811790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25833610e65565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16610f74576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff821660048201526024810183905260440160405180910390fd5b5050565b60015460ff16610ac9576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060208284031215610fc657600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610ff657600080fd5b9392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461102157600080fd5b919050565b60008060008060006080868803121561103e57600080fd5b61104786610ffd565b945060208601359350604086013567ffffffffffffffff81111561106a57600080fd5b8601601f8101881361107b57600080fd5b803567ffffffffffffffff81111561109257600080fd5b8860208284010111156110a457600080fd5b959894975060200195606001359392505050565b6000806000606084860312156110cd57600080fd5b6110d684610ffd565b95602085013595506040909401359392505050565b6000602082840312156110fd57600080fd5b5035919050565b6000806040838503121561111757600080fd5b8235915061112760208401610ffd565b90509250929050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff8616815273ffffffffffffffffffffffffffffffffffffffff851660208201528360408201526080606082015260006111cb608083018486611130565b979650505050505050565b8381526040602082015260006111f0604083018486611130565b95945050505050565b60006020828403121561120b57600080fd5b5051919050565b8082018082111561045c577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea2646970667358221220de5fa55e0ca79ea2f08903481d01ea00bbbf346b9cfba44e12a2dd6f3a6f2e8a64736f6c634300081a00336080604052348015600f57600080fd5b506001600055610d3a806100246000396000f3fe6080604052600436106100635760003560e01c8063c513169111610040578063c5131691146100c1578063e04d4f97146100e1578063f05b6abf146100f457005b8063357fc5a21461006c5780636ed701691461008c5780638fcaa0b5146100a157005b3661006a57005b005b34801561007857600080fd5b5061006a6100873660046106c0565b610114565b34801561009857600080fd5b5061006a6101aa565b3480156100ad57600080fd5b5061006a6100bc3660046106fc565b6101df565b3480156100cd57600080fd5b5061006a6100dc3660046106c0565b61021e565b61006a6100ef366004610895565b6102f9565b34801561010057600080fd5b5061006a61010f366004610981565b61033d565b61011c610372565b61013e73ffffffffffffffffffffffffffffffffffffffff83163383866103b5565b604080513381526020810185905273ffffffffffffffffffffffffffffffffffffffff848116828401528316606082015290517f2b58128f24a9f59127cc5b5430d70542b22220f2d9adaa86e442b816ab98af609181900360800190a16101a56001600055565b505050565b6040513381527fbcaadb46b82a48af60b608f58959ae6b8310d1b0a0d094c2e9ec3208ed39f2a09060200160405180910390a1565b7f0d3f65f00e631663aa85c96330b5c7a83bb29af3630c0063776f985edc3037aa33838360405161021293929190610a6b565b60405180910390a15050565b610226610372565b6000610233600285610ad5565b90508060000361026f576040517f1f2a200500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61029173ffffffffffffffffffffffffffffffffffffffff84163384846103b5565b604080513381526020810183905273ffffffffffffffffffffffffffffffffffffffff858116828401528416606082015290517f2b58128f24a9f59127cc5b5430d70542b22220f2d9adaa86e442b816ab98af609181900360800190a1506101a56001600055565b7f1f1ff1f5fb41346850b2f5c04e6c767e2f1c8a525c5c0c5cdb60cdf3ca5f62fa3334858585604051610330959493929190610b7e565b60405180910390a1505050565b7f74a53cd528a921fca7dbdee62f86819051d3cc98f214951f4238e8843f20b146338484846040516103309493929190610c08565b6002600054036103ae576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b6040805173ffffffffffffffffffffffffffffffffffffffff85811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd0000000000000000000000000000000000000000000000000000000017905261044a908590610450565b50505050565b600061047273ffffffffffffffffffffffffffffffffffffffff8416836104eb565b905080516000141580156104975750808060200190518101906104959190610ccb565b155b156101a5576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff841660048201526024015b60405180910390fd5b60606104f983836000610500565b9392505050565b60608147101561053e576040517fcd7860590000000000000000000000000000000000000000000000000000000081523060048201526024016104e2565b6000808573ffffffffffffffffffffffffffffffffffffffff1684866040516105679190610ce8565b60006040518083038185875af1925050503d80600081146105a4576040519150601f19603f3d011682016040523d82523d6000602084013e6105a9565b606091505b50915091506105b98683836105c3565b9695505050505050565b6060826105d8576105d382610652565b6104f9565b81511580156105fc575073ffffffffffffffffffffffffffffffffffffffff84163b155b1561064b576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff851660048201526024016104e2565b50806104f9565b8051156106625780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50565b803573ffffffffffffffffffffffffffffffffffffffff811681146106bb57600080fd5b919050565b6000806000606084860312156106d557600080fd5b833592506106e560208501610697565b91506106f360408501610697565b90509250925092565b6000806020838503121561070f57600080fd5b823567ffffffffffffffff81111561072657600080fd5b8301601f8101851361073757600080fd5b803567ffffffffffffffff81111561074e57600080fd5b85602082840101111561076057600080fd5b6020919091019590945092505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156107e6576107e6610770565b604052919050565b600082601f8301126107ff57600080fd5b813567ffffffffffffffff81111561081957610819610770565b61084a60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8401160161079f565b81815284602083860101111561085f57600080fd5b816020850160208301376000918101602001919091529392505050565b801515811461069457600080fd5b80356106bb8161087c565b6000806000606084860312156108aa57600080fd5b833567ffffffffffffffff8111156108c157600080fd5b6108cd868287016107ee565b9350506020840135915060408401356108e58161087c565b809150509250925092565b600067ffffffffffffffff82111561090a5761090a610770565b5060051b60200190565b600082601f83011261092557600080fd5b8135610938610933826108f0565b61079f565b8082825260208201915060208360051b86010192508583111561095a57600080fd5b602085015b8381101561097757803583526020928301920161095f565b5095945050505050565b60008060006060848603121561099657600080fd5b833567ffffffffffffffff8111156109ad57600080fd5b8401601f810186136109be57600080fd5b80356109cc610933826108f0565b8082825260208201915060208360051b8501019250888311156109ee57600080fd5b602084015b83811015610a3057803567ffffffffffffffff811115610a1257600080fd5b610a218b6020838901016107ee565b845250602092830192016109f3565b509550505050602084013567ffffffffffffffff811115610a5057600080fd5b610a5c86828701610914565b9250506106f36040850161088a565b73ffffffffffffffffffffffffffffffffffffffff8416815260406020820152816040820152818360608301376000818301606090810191909152601f9092017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016010192915050565b600082610b0b577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60005b83811015610b2b578181015183820152602001610b13565b50506000910152565b60008151808452610b4c816020860160208601610b10565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b73ffffffffffffffffffffffffffffffffffffffff8616815284602082015260a060408201526000610bb360a0830186610b34565b6060830194909452509015156080909101529392505050565b600081518084526020840193506020830160005b82811015610bfe578151865260209586019590910190600101610be0565b5093949350505050565b60006080820173ffffffffffffffffffffffffffffffffffffffff871683526080602084015280865180835260a08501915060a08160051b86010192506020880160005b82811015610c9b577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60878603018452610c86858351610b34565b94506020938401939190910190600101610c4c565b505050508281036040840152610cb18186610bcc565b915050610cc2606083018415159052565b95945050505050565b600060208284031215610cdd57600080fd5b81516104f98161087c565b60008251610cfa818460208701610b10565b919091019291505056fea2646970667358221220556072e1abafc3c4063b8cce832228b4f309b93726aaa6a6dfab20cb880c6d1864736f6c634300081a00336080604052348015600f57600080fd5b5060405161080c38038061080c833981016040819052602c916050565b600080546001600160a01b0319166001600160a01b0392909216919091179055607e565b600060208284031215606157600080fd5b81516001600160a01b0381168114607757600080fd5b9392505050565b61077f8061008d6000396000f3fe608060405234801561001057600080fd5b50600436106100415760003560e01c80630abd890514610046578063116191b61461005b578063865b36f6146100a4575b600080fd5b6100596100543660046104c4565b6100b7565b005b60005461007b9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b6100596100b236600461057f565b6102af565b60008383836040516024016100ce93929190610674565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe04d4f970000000000000000000000000000000000000000000000000000000017905260005490517f095ea7b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff91821660048201526024810189905291925086169063095ea7b3906044016020604051808303816000875af11580156101be573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101e2919061069e565b610218576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000546040517f7993c1e000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff90911690637993c1e090610274908a908a908a9087906004016106c2565b600060405180830381600087803b15801561028e57600080fd5b505af11580156102a2573d6000803e3d6000fd5b5050505050505050505050565b60008383836040516024016102c693929190610674565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe04d4f970000000000000000000000000000000000000000000000000000000017905260005490517f5d40e17800000000000000000000000000000000000000000000000000000000815291925073ffffffffffffffffffffffffffffffffffffffff1690635d40e1789061039690899089908690600401610714565b600060405180830381600087803b1580156103b057600080fd5b505af11580156103c4573d6000803e3d6000fd5b50505050505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600082601f83011261041057600080fd5b81356020830160008067ffffffffffffffff841115610431576104316103d0565b506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f85018116603f0116810181811067ffffffffffffffff8211171561047e5761047e6103d0565b60405283815290508082840187101561049657600080fd5b838360208301376000602085830101528094505050505092915050565b80151581146104c157600080fd5b50565b60008060008060008060c087890312156104dd57600080fd5b863567ffffffffffffffff8111156104f457600080fd5b61050089828a016103ff565b96505060208701359450604087013573ffffffffffffffffffffffffffffffffffffffff8116811461053157600080fd5b9350606087013567ffffffffffffffff81111561054d57600080fd5b61055989828a016103ff565b9350506080870135915060a0870135610571816104b3565b809150509295509295509295565b600080600080600060a0868803121561059757600080fd5b853567ffffffffffffffff8111156105ae57600080fd5b6105ba888289016103ff565b95505060208601359350604086013567ffffffffffffffff8111156105de57600080fd5b6105ea888289016103ff565b935050606086013591506080860135610602816104b3565b809150509295509295909350565b6000815180845260005b818110156106365760208185018101518683018201520161061a565b5060006020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b6060815260006106876060830186610610565b602083019490945250901515604090910152919050565b6000602082840312156106b057600080fd5b81516106bb816104b3565b9392505050565b6080815260006106d56080830187610610565b85602084015273ffffffffffffffffffffffffffffffffffffffff8516604084015282810360608401526107098185610610565b979650505050505050565b6060815260006107276060830186610610565b846020840152828103604084015261073f8185610610565b969550505050505056fea2646970667358221220b01f70fc7d08faa150faba1d40368a8dfab02c60f0c4f8fa10ce583a32885b4d64736f6c634300081a0033608060405234801561001057600080fd5b50604051610b3f380380610b3f83398101604081905261002f916100b9565b600380546001600160a01b038086166001600160a01b0319928316179092556004805485841690831617905560058054928416929091169190911790556040517f80699e81136d69cb8367ad52a994e25c722a86da654b561d0c14b61a777e7ac590600090a15050506100fc565b80516001600160a01b03811681146100b457600080fd5b919050565b6000806000606084860312156100ce57600080fd5b6100d78461009d565b92506100e56020850161009d565b91506100f36040850161009d565b90509250925092565b610a348061010b6000396000f3fe608060405234801561001057600080fd5b50600436106100c95760003560e01c806397770dff11610081578063d7fd7afb1161005b578063d7fd7afb146101f2578063d936a01214610220578063ee2815ba1461024057600080fd5b806397770dff146101b9578063a7cb0507146101cc578063c63585cc146101df57600080fd5b8063513a9c05116100b2578063513a9c0514610143578063569541b914610179578063842da36d1461019957600080fd5b80630be15547146100ce5780633c669d551461012e575b600080fd5b6101046100dc36600461071e565b60016020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b61014161013c366004610760565b610253565b005b61010461015136600461071e565b60026020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b6003546101049073ffffffffffffffffffffffffffffffffffffffff1681565b6005546101049073ffffffffffffffffffffffffffffffffffffffff1681565b6101416101c73660046107fd565b6103a0565b6101416101da36600461081f565b610419565b6101046101ed366004610841565b610467565b61021261020036600461071e565b60006020819052908152604090205481565b604051908152602001610125565b6004546101049073ffffffffffffffffffffffffffffffffffffffff1681565b61014161024e366004610884565b61059c565b604080516080810182526000606082019081528152336020820152468183015290517fa9059cbb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff87811660048301526024820186905286169063a9059cbb906044016020604051808303816000875af11580156102e7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061030b91906108b0565b506040517fde43156e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff87169063de43156e90610366908490899089908990899060040161091b565b600060405180830381600087803b15801561038057600080fd5b505af1158015610394573d6000803e3d6000fd5b50505050505050505050565b600380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527fdba79d534382d1a8ae108e4c8ecb27c6ae42ab8b91d44eedf88bd329f3868d5e9060200160405180910390a150565b6000828152602081815260409182902083905581518481529081018390527f49f492222906ac486c3c1401fa545626df1f0c0e5a77a05597ea2ed66af9850d91015b60405180910390a15050565b60008060006104768585610620565b6040517fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606084811b8216602084015283901b166034820152919350915086906048016040516020818303038152906040528051906020012060405160200161055c9291907fff00000000000000000000000000000000000000000000000000000000000000815260609290921b7fffffffffffffffffffffffffffffffffffffffff00000000000000000000000016600183015260158201527f96e8ac4277198ff8b6f785478aa9a39f403cb768dd02cbee326c3e7da348845f603582015260550190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291905280516020909101209695505050505050565b60008281526001602090815260409182902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff85169081179091558251858152918201527fd1b36d30f6248e97c473b4d1348ca164a4ef6759022f54a58ec200326c39c45d910161045b565b6000808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603610688576040517fcb1e7cfe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16106106c25782846106c5565b83835b909250905073ffffffffffffffffffffffffffffffffffffffff8216610717576040517f78b507da00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b9250929050565b60006020828403121561073057600080fd5b5035919050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461075b57600080fd5b919050565b60008060008060006080868803121561077857600080fd5b61078186610737565b945061078f60208701610737565b935060408601359250606086013567ffffffffffffffff8111156107b257600080fd5b8601601f810188136107c357600080fd5b803567ffffffffffffffff8111156107da57600080fd5b8860208284010111156107ec57600080fd5b959894975092955050506020019190565b60006020828403121561080f57600080fd5b61081882610737565b9392505050565b6000806040838503121561083257600080fd5b50508035926020909101359150565b60008060006060848603121561085657600080fd5b61085f84610737565b925061086d60208501610737565b915061087b60408501610737565b90509250925092565b6000806040838503121561089757600080fd5b823591506108a760208401610737565b90509250929050565b6000602082840312156108c257600080fd5b8151801515811461081857600080fd5b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b60808152600086516060608084015280518060e085015260005b81811015610953576020818401810151610100878401015201610935565b5060008482016101000152602089015173ffffffffffffffffffffffffffffffffffffffff811660a0860152601f9091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168401915050604088015160c084015273ffffffffffffffffffffffffffffffffffffffff871660208401528560408401526101008382030160608401526109f2610100820185876108d2565b9897505050505050505056fea264697066735822122044450a00a3ccd112d5abf008f947389875d330f56afa78b6ab0863159c2d87f664736f6c634300081a003360e060405234801561001057600080fd5b50604051611bb9380380611bb983398101604081905261002f9161020e565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461006357604051632b2add3d60e01b815260040160405180910390fd5b6001600160a01b038216158061008057506001600160a01b038116155b1561009e5760405163d92e233d60e01b815260040160405180910390fd5b60066100aa8982610360565b5060076100b78882610360565b5060ff861660c05260808590528360028111156100d6576100d661041e565b60a08160028111156100ea576100ea61041e565b905250600192909255600080546001600160a01b039283166001600160a01b03199182161790915560088054929093169116179055506104349350505050565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261015157600080fd5b81516001600160401b0381111561016a5761016a61012a565b604051601f8201601f19908116603f011681016001600160401b03811182821017156101985761019861012a565b6040528181528382016020018510156101b057600080fd5b60005b828110156101cf576020818601810151838301820152016101b3565b506000918101602001919091529392505050565b8051600381106101f257600080fd5b919050565b80516001600160a01b03811681146101f257600080fd5b600080600080600080600080610100898b03121561022b57600080fd5b88516001600160401b0381111561024157600080fd5b61024d8b828c01610140565b60208b015190995090506001600160401b0381111561026b57600080fd5b6102778b828c01610140565b975050604089015160ff8116811461028e57600080fd5b60608a015190965094506102a460808a016101e3565b60a08a015190945092506102ba60c08a016101f7565b91506102c860e08a016101f7565b90509295985092959890939650565b600181811c908216806102eb57607f821691505b60208210810361030b57634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111561035b57806000526020600020601f840160051c810160208510156103385750805b601f840160051c820191505b818110156103585760008155600101610344565b50505b505050565b81516001600160401b038111156103795761037961012a565b61038d8161038784546102d7565b84610311565b6020601f8211600181146103c157600083156103a95750848201515b600019600385901b1c1916600184901b178455610358565b600084815260208120601f198516915b828110156103f157878501518255602094850194600190920191016103d1565b508482101561040f5786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b634e487b7160e01b600052602160045260246000fd5b60805160a05160c05161174861047160003960006102170152600061033a0152600081816102eb01528181610ad70152610bdd01526117486000f3fe608060405234801561001057600080fd5b50600436106101985760003560e01c80638b851b95116100e3578063ccc775991161008c578063eddeb12311610066578063eddeb12314610431578063f2441b3214610444578063f687d12a1461046457600080fd5b8063ccc77599146103a4578063d9eeebed146103b7578063dd62ed3e146103eb57600080fd5b8063a9059cbb116100bd578063a9059cbb14610369578063c70126261461037c578063c835d7cc1461038f57600080fd5b80638b851b951461030d57806395d89b411461032d578063a3413d031461033557600080fd5b80633ce4a5bc116101455780634d8943bb1161011f5780634d8943bb146102a757806370a08231146102b057806385e1f4d0146102e657600080fd5b80633ce4a5bc1461024157806342966c681461028157806347e7ef241461029457600080fd5b806318160ddd1161017657806318160ddd146101f557806323b872dd146101fd578063313ce5671461021057600080fd5b806306fdde031461019d578063091d2788146101bb578063095ea7b3146101d2575b600080fd5b6101a5610477565b6040516101b29190611327565b60405180910390f35b6101c460015481565b6040519081526020016101b2565b6101e56101e0366004611366565b610509565b60405190151581526020016101b2565b6005546101c4565b6101e561020b366004611392565b610520565b60405160ff7f00000000000000000000000000000000000000000000000000000000000000001681526020016101b2565b61025c73735b14bb79463307aacbed86daf3322b1e6226ab81565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101b2565b6101e561028f3660046113d3565b6105b7565b6101e56102a2366004611366565b6105cb565b6101c460025481565b6101c46102be3660046113ec565b73ffffffffffffffffffffffffffffffffffffffff1660009081526003602052604090205490565b6101c47f000000000000000000000000000000000000000000000000000000000000000081565b60085461025c9073ffffffffffffffffffffffffffffffffffffffff1681565b6101a561071f565b61035c7f000000000000000000000000000000000000000000000000000000000000000081565b6040516101b29190611409565b6101e5610377366004611366565b61072e565b6101e561038a366004611479565b61073b565b6103a261039d3660046113ec565b61088a565b005b6103a26103b23660046113ec565b61099e565b6103bf610aab565b6040805173ffffffffffffffffffffffffffffffffffffffff90931683526020830191909152016101b2565b6101c46103f9366004611571565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260046020908152604080832093909416825291909152205490565b6103a261043f3660046113d3565b610cc9565b60005461025c9073ffffffffffffffffffffffffffffffffffffffff1681565b6103a26104723660046113d3565b610d4b565b606060068054610486906115aa565b80601f01602080910402602001604051908101604052809291908181526020018280546104b2906115aa565b80156104ff5780601f106104d4576101008083540402835291602001916104ff565b820191906000526020600020905b8154815290600101906020018083116104e257829003601f168201915b5050505050905090565b6000610516338484610dcd565b5060015b92915050565b600061052d848484610ed6565b73ffffffffffffffffffffffffffffffffffffffff8416600090815260046020908152604080832033845290915290205482811015610598576040517f10bad14700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6105ac85336105a7868561162c565b610dcd565b506001949350505050565b60006105c33383611091565b506001919050565b60003373735b14bb79463307aacbed86daf3322b1e6226ab14801590610609575060005473ffffffffffffffffffffffffffffffffffffffff163314155b801561062d575060085473ffffffffffffffffffffffffffffffffffffffff163314155b15610664576040517fddb5de5e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61066e83836111d3565b6040517f735b14bb79463307aacbed86daf3322b1e6226ab000000000000000000000000602082015273ffffffffffffffffffffffffffffffffffffffff8416907f67fc7bdaed5b0ec550d8706b87d60568ab70c6b781263c70101d54cd1564aab390603401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529082905261070e91869061163f565b60405180910390a250600192915050565b606060078054610486906115aa565b6000610516338484610ed6565b6000806000610748610aab565b6040517f23b872dd00000000000000000000000000000000000000000000000000000000815233600482015273735b14bb79463307aacbed86daf3322b1e6226ab602482015260448101829052919350915073ffffffffffffffffffffffffffffffffffffffff8316906323b872dd906064016020604051808303816000875af11580156107da573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107fe9190611661565b610834576040517f0a7cd6d600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61083e3385611091565b60025460405133917f9ffbffc04a397460ee1dbe8c9503e098090567d6b7f4b3c02a8617d800b6d9559161087791899189918791611683565b60405180910390a2506001949350505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab146108d7576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116610924576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527fd55614e962c5fd6ece71614f6348d702468a997a394dd5e5c1677950226d97ae906020015b60405180910390a150565b3373735b14bb79463307aacbed86daf3322b1e6226ab146109eb576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116610a38576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600880547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527f88815d964e380677e86d817e7d65dea59cb7b4c3b5b7a0c8ec7ea4a74f90a38790602001610993565b600080546040517f0be155470000000000000000000000000000000000000000000000000000000081527f000000000000000000000000000000000000000000000000000000000000000060048201528291829173ffffffffffffffffffffffffffffffffffffffff90911690630be1554790602401602060405180830381865afa158015610b3e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b6291906116b2565b905073ffffffffffffffffffffffffffffffffffffffff8116610bb1576040517f78fff39600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080546040517fd7fd7afb0000000000000000000000000000000000000000000000000000000081527f0000000000000000000000000000000000000000000000000000000000000000600482015273ffffffffffffffffffffffffffffffffffffffff9091169063d7fd7afb90602401602060405180830381865afa158015610c40573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c6491906116cf565b905080600003610ca0576040517fe661aed000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060025460015483610cb391906116e8565b610cbd91906116ff565b92959294509192505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610d16576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60028190556040518181527fef13af88e424b5d15f49c77758542c1938b08b8b95b91ed0751f98ba99000d8f90602001610993565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610d98576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018190556040518181527fff5788270f43bfc1ca41c503606d2594aa3023a1a7547de403a3e2f146a4a80a90602001610993565b73ffffffffffffffffffffffffffffffffffffffff8316610e1a576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216610e67576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff83811660008181526004602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8316610f23576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216610f70576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff831660009081526003602052604090205481811015610fd0576040517ffe382aa700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610fda828261162c565b73ffffffffffffffffffffffffffffffffffffffff808616600090815260036020526040808220939093559085168152908120805484929061101d9084906116ff565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161108391815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff82166110de576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff82166000908152600360205260409020548181101561113e576040517ffe382aa700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611148828261162c565b73ffffffffffffffffffffffffffffffffffffffff84166000908152600360205260408120919091556005805484929061118390849061162c565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90602001610ec9565b73ffffffffffffffffffffffffffffffffffffffff8216611220576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b806005600082825461123291906116ff565b909155505073ffffffffffffffffffffffffffffffffffffffff82166000908152600360205260408120805483929061126c9084906116ff565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6000815180845260005b818110156112e9576020818501810151868301820152016112cd565b5060006020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b60208152600061133a60208301846112c3565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff8116811461136357600080fd5b50565b6000806040838503121561137957600080fd5b823561138481611341565b946020939093013593505050565b6000806000606084860312156113a757600080fd5b83356113b281611341565b925060208401356113c281611341565b929592945050506040919091013590565b6000602082840312156113e557600080fd5b5035919050565b6000602082840312156113fe57600080fd5b813561133a81611341565b6020810160038310611444577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000806040838503121561148c57600080fd5b823567ffffffffffffffff8111156114a357600080fd5b8301601f810185136114b457600080fd5b803567ffffffffffffffff8111156114ce576114ce61144a565b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8501160116810181811067ffffffffffffffff8211171561153a5761153a61144a565b60405281815282820160200187101561155257600080fd5b8160208401602083013760006020928201830152969401359450505050565b6000806040838503121561158457600080fd5b823561158f81611341565b9150602083013561159f81611341565b809150509250929050565b600181811c908216806115be57607f821691505b6020821081036115f7577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8181038181111561051a5761051a6115fd565b60408152600061165260408301856112c3565b90508260208301529392505050565b60006020828403121561167357600080fd5b8151801515811461133a57600080fd5b60808152600061169660808301876112c3565b6020830195909552506040810192909252606090910152919050565b6000602082840312156116c457600080fd5b815161133a81611341565b6000602082840312156116e157600080fd5b5051919050565b808202811582820484141761051a5761051a6115fd565b8082018082111561051a5761051a6115fd56fea26469706673582212204013e39523742118b3f2227e145ee7e48176ba6aebead33c596dca2acb59a74c64736f6c634300081a0033a2646970667358221220cd83a3bcd539a98e9d279f234c3665502669bfda6eefd00b3bbe0fafd76206a764736f6c634300081a0033", } // GatewayEVMZEVMTestABI is the input ABI used to generate the binding from. diff --git a/v2/pkg/gatewayzevm.sol/gatewayzevm.go b/v2/pkg/gatewayzevm.sol/gatewayzevm.go index 1881db71..1c0b5d01 100644 --- a/v2/pkg/gatewayzevm.sol/gatewayzevm.go +++ b/v2/pkg/gatewayzevm.sol/gatewayzevm.go @@ -45,8 +45,8 @@ type ZContext struct { // GatewayZEVMMetaData contains all meta data concerning the GatewayZEVM contract. var GatewayZEVMMetaData = &bind.MetaData{ - ABI: "[{\"type\":\"constructor\",\"inputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"receive\",\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"DEFAULT_ADMIN_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"FUNGIBLE_MODULE_ADDRESS\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"PAUSER_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"UPGRADE_INTERFACE_VERSION\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"call\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"chainId\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"message\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"deposit\",\"inputs\":[{\"name\":\"zrc20\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"depositAndCall\",\"inputs\":[{\"name\":\"context\",\"type\":\"tuple\",\"internalType\":\"structzContext\",\"components\":[{\"name\":\"origin\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"sender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"chainID\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"message\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"depositAndCall\",\"inputs\":[{\"name\":\"context\",\"type\":\"tuple\",\"internalType\":\"structzContext\",\"components\":[{\"name\":\"origin\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"sender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"chainID\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"zrc20\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"message\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"depositAndRevert\",\"inputs\":[{\"name\":\"context\",\"type\":\"tuple\",\"internalType\":\"structrevertContext\",\"components\":[{\"name\":\"origin\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"sender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"chainID\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"zrc20\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"message\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"execute\",\"inputs\":[{\"name\":\"context\",\"type\":\"tuple\",\"internalType\":\"structzContext\",\"components\":[{\"name\":\"origin\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"sender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"chainID\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"zrc20\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"message\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"executeRevert\",\"inputs\":[{\"name\":\"context\",\"type\":\"tuple\",\"internalType\":\"structrevertContext\",\"components\":[{\"name\":\"origin\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"sender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"chainID\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"zrc20\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"message\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"getRoleAdmin\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"grantRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"hasRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"initialize\",\"inputs\":[{\"name\":\"zetaToken_\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"admin_\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"pause\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"paused\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"proxiableUUID\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"renounceRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"callerConfirmation\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"revokeRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"supportsInterface\",\"inputs\":[{\"name\":\"interfaceId\",\"type\":\"bytes4\",\"internalType\":\"bytes4\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"unpause\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"upgradeToAndCall\",\"inputs\":[{\"name\":\"newImplementation\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"withdraw\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"zrc20\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"withdraw\",\"inputs\":[{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"chainId\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"withdrawAndCall\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"zrc20\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"message\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"withdrawAndCall\",\"inputs\":[{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"chainId\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"message\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"zetaToken\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"event\",\"name\":\"Call\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"chainId\",\"type\":\"uint256\",\"indexed\":true,\"internalType\":\"uint256\"},{\"name\":\"receiver\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"message\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Initialized\",\"inputs\":[{\"name\":\"version\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Paused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleAdminChanged\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"previousAdminRole\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"newAdminRole\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleGranted\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleRevoked\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Unpaused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Upgraded\",\"inputs\":[{\"name\":\"implementation\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Withdrawal\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"chainId\",\"type\":\"uint256\",\"indexed\":true,\"internalType\":\"uint256\"},{\"name\":\"receiver\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"zrc20\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"gasfee\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"protocolFlatFee\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"message\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"AccessControlBadConfirmation\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"AccessControlUnauthorizedAccount\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"neededRole\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"type\":\"error\",\"name\":\"AddressEmptyCode\",\"inputs\":[{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"CallerIsNotFungibleModule\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ERC1967InvalidImplementation\",\"inputs\":[{\"name\":\"implementation\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"ERC1967NonPayable\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"EnforcedPause\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ExpectedPause\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"FailedInnerCall\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"FailedZetaSent\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"GasFeeTransferFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientZRC20Amount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientZetaAmount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidInitialization\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidTarget\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NotInitializing\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OnlyWZETAOrFungible\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ReentrancyGuardReentrantCall\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"UUPSUnauthorizedCallContext\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"UUPSUnsupportedProxiableUUID\",\"inputs\":[{\"name\":\"slot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"type\":\"error\",\"name\":\"WithdrawalFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZRC20BurnFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZRC20DepositFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZRC20TransferFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZeroAddress\",\"inputs\":[]}]", - Bin: "0x60a06040523060805234801561001457600080fd5b5061001d610022565b6100d4565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100725760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146100d15780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b6080516132346100fd600039600081816123650152818161238e015261254601526132346000f3fe6080604052600436106101bb5760003560e01c80635af65967116100ec578063a217fddf1161008a578063c39aca3711610064578063c39aca3714610600578063d547741f14610620578063e63ab1e914610640578063f45346dc1461067457600080fd5b8063a217fddf14610575578063ad3cb1cc1461058a578063bcf7f32b146105e057600080fd5b80637993c1e0116100c65780637993c1e0146104bb57806380bd3d03146104db5780638456cb59146104fb57806391d148541461051057600080fd5b80635af65967146104445780635c975abb146104645780635d40e1781461049b57600080fd5b806336568abe11610159578063441a3e7011610133578063441a3e70146103dc578063485cc955146103fc5780634f1ef2861461041c57806352d1902d1461042f57600080fd5b806336568abe1461037f5780633ce4a5bc1461039f5780633f4ba83a146103c757600080fd5b806321e093b11161019557806321e093b1146102aa578063248a9ca3146102e25780632f2ff15d1461033f578063309f50041461035f57600080fd5b806301ffc9a714610235578063135390f91461026a57806321501a951461028a57600080fd5b36610230576101c8610694565b6000546001600160a01b031633148015906101f757503373735b14bb79463307aacbed86daf3322b1e6226ab14155b1561022e576040517f229930b200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b005b600080fd5b34801561024157600080fd5b50610255610250366004612a24565b6106f2565b60405190151581526020015b60405180910390f35b34801561027657600080fd5b5061022e610285366004612b3a565b61078b565b34801561029657600080fd5b5061022e6102a5366004612bf6565b6108f9565b3480156102b657600080fd5b506000546102ca906001600160a01b031681565b6040516001600160a01b039091168152602001610261565b3480156102ee57600080fd5b506103316102fd366004612c82565b60009081527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052604090206001015490565b604051908152602001610261565b34801561034b57600080fd5b5061022e61035a366004612c9b565b610ac6565b34801561036b57600080fd5b5061022e61037a366004612ccb565b610b10565b34801561038b57600080fd5b5061022e61039a366004612c9b565b610c7a565b3480156103ab57600080fd5b506102ca73735b14bb79463307aacbed86daf3322b1e6226ab81565b3480156103d357600080fd5b5061022e610cc6565b3480156103e857600080fd5b5061022e6103f7366004612d69565b610cfb565b34801561040857600080fd5b5061022e610417366004612d8b565b610e18565b61022e61042a366004612db9565b61106e565b34801561043b57600080fd5b50610331611089565b34801561045057600080fd5b5061022e61045f366004612ccb565b6110b8565b34801561047057600080fd5b507fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff16610255565b3480156104a757600080fd5b5061022e6104b6366004612e09565b6112c7565b3480156104c757600080fd5b5061022e6104d6366004612e7e565b611381565b3480156104e757600080fd5b5061022e6104f6366004612eb9565b6114f5565b34801561050757600080fd5b5061022e6115e1565b34801561051c57600080fd5b5061025561052b366004612c9b565b60009182527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408084206001600160a01b0393909316845291905290205460ff1690565b34801561058157600080fd5b50610331600081565b34801561059657600080fd5b506105d36040518060400160405280600581526020017f352e302e3000000000000000000000000000000000000000000000000000000081525081565b6040516102619190612f44565b3480156105ec57600080fd5b5061022e6105fb366004612ccb565b611613565b34801561060c57600080fd5b5061022e61061b366004612ccb565b611743565b34801561062c57600080fd5b5061022e61063b366004612c9b565b611952565b34801561064c57600080fd5b506103317f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b34801561068057600080fd5b5061022e61068f366004612f57565b611996565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff16156106f0576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061078557507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b610793611ba5565b61079b610694565b82516000036107d6576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b81600003610810576040517f5d67094f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061081c8383611c26565b90506000336001600160a01b03167fde19dbe881cc0aeeb6e73ce19ac7b5ca695e6be8a076e3eb42292005a7fec1b586858786886001600160a01b0316634d8943bb6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561088d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108b19190612f8e565b6040516108c2959493929190612fa7565b60405180910390a3506108f460017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610946576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61094e610694565b6001600160a01b03831661098e576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b836000036109c8576040517f19c08f4900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03831673735b14bb79463307aacbed86daf3322b1e6226ab14806109fb57506001600160a01b03831630145b15610a32576040517f82d5d76a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610a3c8484611f19565b6000546040517fde43156e0000000000000000000000000000000000000000000000000000000081526001600160a01b038086169263de43156e92610a8d928a9216908990889088906004016130c6565b600060405180830381600087803b158015610aa757600080fd5b505af1158015610abb573d6000803e3d6000fd5b505050505050505050565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020526040902060010154610b00816120e7565b610b0a83836120f1565b50505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610b5d576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610b65610694565b6001600160a01b0385161580610b8257506001600160a01b038316155b15610bb9576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b83600003610bf3576040517f5d67094f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f69582bee0000000000000000000000000000000000000000000000000000000081526001600160a01b038416906369582bee90610c4090899089908990889088906004016130c6565b600060405180830381600087803b158015610c5a57600080fd5b505af1158015610c6e573d6000803e3d6000fd5b50505050505050505050565b6001600160a01b0381163314610cbc576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6108f482826121de565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610cf0816120e7565b610cf86122a2565b50565b610d03611ba5565b610d0b610694565b81600003610d45576040517f19c08f4900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610d638273735b14bb79463307aacbed86daf3322b1e6226ab611f19565b6040517f735b14bb79463307aacbed86daf3322b1e6226ab0000000000000000000000006020820152819033907fde19dbe881cc0aeeb6e73ce19ac7b5ca695e6be8a076e3eb42292005a7fec1b59060340160408051601f198184030181529082905260008054610de3936001600160a01b039091169189918190612fa7565b60405180910390a3610e1460017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b5050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff16600081158015610e635750825b905060008267ffffffffffffffff166001148015610e805750303b155b905081158015610e8e575080155b15610ec5576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001660011785558315610f265784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff16680100000000000000001785555b6001600160a01b0387161580610f4357506001600160a01b038616155b15610f7a576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610f82612332565b610f8a612332565b610f9261233a565b610f9a61234a565b610fa56000876120f1565b50610fd07f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a876120f1565b50600080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03891617905583156110655784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50505050505050565b61107661235a565b61107f8261242a565b610e148282612435565b600061109361253b565b507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc90565b3373735b14bb79463307aacbed86daf3322b1e6226ab14611105576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61110d610694565b6001600160a01b038516158061112a57506001600160a01b038316155b15611161576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8360000361119b576040517f5d67094f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03831673735b14bb79463307aacbed86daf3322b1e6226ab14806111ce57506001600160a01b03831630145b15611205576040517f82d5d76a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f47e7ef240000000000000000000000000000000000000000000000000000000081526001600160a01b038481166004830152602482018690528616906347e7ef24906044016020604051808303816000875af115801561126d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611291919061310d565b610bf3576040517f47d19fab00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6112cf611ba5565b6112d7610694565b8351600003611312576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b82336001600160a01b03167f5322ffbbf9261ff1f8138247942d2b03b28717141ef0a0dd080fc4be9c4e78d38685856040516113509392919061312f565b60405180910390a3610b0a60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b611389611ba5565b611391610694565b84516000036113cc576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b83600003611406576040517f5d67094f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006114128585611c26565b90506000336001600160a01b03167fde19dbe881cc0aeeb6e73ce19ac7b5ca695e6be8a076e3eb42292005a7fec1b5888789868a6001600160a01b0316634d8943bb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611483573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114a79190612f8e565b8a8a6040516114bc979695949392919061315f565b60405180910390a3506114ee60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b5050505050565b6114fd611ba5565b611505610694565b8360000361153f576040517f19c08f4900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61155d8473735b14bb79463307aacbed86daf3322b1e6226ab611f19565b6040517f735b14bb79463307aacbed86daf3322b1e6226ab0000000000000000000000006020820152839033907fde19dbe881cc0aeeb6e73ce19ac7b5ca695e6be8a076e3eb42292005a7fec1b59060340160408051601f198184030181529082905260008054611350936001600160a01b03909116918b9181908b908b9061315f565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61160b816120e7565b610cf861259d565b3373735b14bb79463307aacbed86daf3322b1e6226ab14611660576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611668610694565b6001600160a01b038516158061168557506001600160a01b038316155b156116bc576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b836000036116f6576040517f5d67094f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517fde43156e0000000000000000000000000000000000000000000000000000000081526001600160a01b0384169063de43156e90610c4090899089908990889088906004016130c6565b3373735b14bb79463307aacbed86daf3322b1e6226ab14611790576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611798610694565b6001600160a01b03851615806117b557506001600160a01b038316155b156117ec576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b83600003611826576040517f5d67094f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03831673735b14bb79463307aacbed86daf3322b1e6226ab148061185957506001600160a01b03831630145b15611890576040517f82d5d76a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f47e7ef240000000000000000000000000000000000000000000000000000000081526001600160a01b038481166004830152602482018690528616906347e7ef24906044016020604051808303816000875af11580156118f8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061191c919061310d565b6116f6576040517f47d19fab00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052604090206001015461198c816120e7565b610b0a83836121de565b3373735b14bb79463307aacbed86daf3322b1e6226ab146119e3576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6119eb610694565b6001600160a01b0383161580611a0857506001600160a01b038116155b15611a3f576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b81600003611a79576040517f5d67094f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03811673735b14bb79463307aacbed86daf3322b1e6226ab1480611aac57506001600160a01b03811630145b15611ae3576040517f82d5d76a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f47e7ef240000000000000000000000000000000000000000000000000000000081526001600160a01b038281166004830152602482018490528416906347e7ef24906044016020604051808303816000875af1158015611b4b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b6f919061310d565b6108f4576040517f47d19fab00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0080547ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01611c20576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60029055565b6000806000836001600160a01b031663d9eeebed6040518163ffffffff1660e01b81526004016040805180830381865afa158015611c68573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c8c91906131b4565b6040517f23b872dd00000000000000000000000000000000000000000000000000000000815233600482015273735b14bb79463307aacbed86daf3322b1e6226ab60248201526044810182905291935091506001600160a01b038316906323b872dd906064016020604051808303816000875af1158015611d11573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d35919061310d565b611d6b576040517f0a7cd6d600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f23b872dd000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018690526001600160a01b038516906323b872dd906064016020604051808303816000875af1158015611dd7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611dfb919061310d565b611e31576040517f4dd9ee8d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f42966c68000000000000000000000000000000000000000000000000000000008152600481018690526001600160a01b038516906342966c68906024016020604051808303816000875af1158015611e91573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611eb5919061310d565b611eeb576040517f2c77e05c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b949350505050565b60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b6000546040517f23b872dd000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018490526001600160a01b03909116906323b872dd906064016020604051808303816000875af1158015611f89573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fad919061310d565b611fe3576040517fc7ffc47b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000546040517f2e1a7d4d000000000000000000000000000000000000000000000000000000008152600481018490526001600160a01b0390911690632e1a7d4d90602401600060405180830381600087803b15801561204257600080fd5b505af1158015612056573d6000803e3d6000fd5b505050506000816001600160a01b03168360405160006040518083038185875af1925050503d80600081146120a7576040519150601f19603f3d011682016040523d82523d6000602084013e6120ac565b606091505b50509050806108f4576040517fc7ffc47b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610cf88133612616565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff166121d4576000848152602082815260408083206001600160a01b0387168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905561218a3390565b6001600160a01b0316836001600160a01b0316857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a46001915050610785565b6000915050610785565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff16156121d4576000848152602082815260408083206001600160a01b038716808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339287917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a46001915050610785565b6122aa6126a3565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001681557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a150565b6106f06126fe565b6123426126fe565b6106f0612765565b6123526126fe565b6106f06127b6565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806123f357507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166123e77f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b6001600160a01b031614155b156106f0576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610e14816120e7565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa92505050801561248f575060408051601f3d908101601f1916820190925261248c91810190612f8e565b60015b6124d5576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b03831660048201526024015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8114612531576040517faa1d49a4000000000000000000000000000000000000000000000000000000008152600481018290526024016124cc565b6108f483836127be565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146106f0576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6125a5610694565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011781557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25833612314565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408083206001600160a01b038516845290915290205460ff16610e14576040517fe2517d3f0000000000000000000000000000000000000000000000000000000081526001600160a01b0382166004820152602481018390526044016124cc565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff166106f0576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff166106f0576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61276d6126fe565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055565b611ef36126fe565b6127c782612814565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a280511561280c576108f482826128bc565b610e14612932565b806001600160a01b03163b600003612863576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b03821660048201526024016124cc565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6060600080846001600160a01b0316846040516128d991906131e2565b600060405180830381855af49150503d8060008114612914576040519150601f19603f3d011682016040523d82523d6000602084013e612919565b606091505b509150915061292985838361296a565b95945050505050565b34156106f0576040517fb398979f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60608261297f5761297a826129e2565b6129db565b815115801561299657506001600160a01b0384163b155b156129d8576040517f9996b3150000000000000000000000000000000000000000000000000000000081526001600160a01b03851660048201526024016124cc565b50805b9392505050565b8051156129f25780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060208284031215612a3657600080fd5b81357fffffffff00000000000000000000000000000000000000000000000000000000811681146129db57600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600082601f830112612aa657600080fd5b813567ffffffffffffffff811115612ac057612ac0612a66565b604051601f19603f601f19601f8501160116810181811067ffffffffffffffff82111715612af057612af0612a66565b604052818152838201602001851015612b0857600080fd5b816020850160208301376000918101602001919091529392505050565b6001600160a01b0381168114610cf857600080fd5b600080600060608486031215612b4f57600080fd5b833567ffffffffffffffff811115612b6657600080fd5b612b7286828701612a95565b935050602084013591506040840135612b8a81612b25565b809150509250925092565b600060608284031215612ba757600080fd5b50919050565b60008083601f840112612bbf57600080fd5b50813567ffffffffffffffff811115612bd757600080fd5b602083019150836020828501011115612bef57600080fd5b9250929050565b600080600080600060808688031215612c0e57600080fd5b853567ffffffffffffffff811115612c2557600080fd5b612c3188828901612b95565b955050602086013593506040860135612c4981612b25565b9250606086013567ffffffffffffffff811115612c6557600080fd5b612c7188828901612bad565b969995985093965092949392505050565b600060208284031215612c9457600080fd5b5035919050565b60008060408385031215612cae57600080fd5b823591506020830135612cc081612b25565b809150509250929050565b60008060008060008060a08789031215612ce457600080fd5b863567ffffffffffffffff811115612cfb57600080fd5b612d0789828a01612b95565b9650506020870135612d1881612b25565b9450604087013593506060870135612d2f81612b25565b9250608087013567ffffffffffffffff811115612d4b57600080fd5b612d5789828a01612bad565b979a9699509497509295939492505050565b60008060408385031215612d7c57600080fd5b50508035926020909101359150565b60008060408385031215612d9e57600080fd5b8235612da981612b25565b91506020830135612cc081612b25565b60008060408385031215612dcc57600080fd5b8235612dd781612b25565b9150602083013567ffffffffffffffff811115612df357600080fd5b612dff85828601612a95565b9150509250929050565b60008060008060608587031215612e1f57600080fd5b843567ffffffffffffffff811115612e3657600080fd5b612e4287828801612a95565b94505060208501359250604085013567ffffffffffffffff811115612e6657600080fd5b612e7287828801612bad565b95989497509550505050565b600080600080600060808688031215612e9657600080fd5b853567ffffffffffffffff811115612ead57600080fd5b612c3188828901612a95565b60008060008060608587031215612ecf57600080fd5b8435935060208501359250604085013567ffffffffffffffff811115612e6657600080fd5b60005b83811015612f0f578181015183820152602001612ef7565b50506000910152565b60008151808452612f30816020860160208601612ef4565b601f01601f19169290920160200192915050565b6020815260006129db6020830184612f18565b600080600060608486031215612f6c57600080fd5b8335612f7781612b25565b9250602084013591506040840135612b8a81612b25565b600060208284031215612fa057600080fd5b5051919050565b60c081526000612fba60c0830188612f18565b6001600160a01b038716602084015285604084015284606084015283608084015282810360a084015260008152602081019150509695505050505050565b818352818160208501375060006020828401015260006020601f19601f840116840101905092915050565b600081357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe183360301811261305757600080fd5b820160208101903567ffffffffffffffff81111561307457600080fd5b80360382131561308357600080fd5b60608552613095606086018284612ff8565b91505060208301356130a681612b25565b6001600160a01b0316602085015260409283013592909301919091525090565b6080815260006130d96080830188613023565b6001600160a01b03871660208401528560408401528281036060840152613101818587612ff8565b98975050505050505050565b60006020828403121561311f57600080fd5b815180151581146129db57600080fd5b6040815260006131426040830186612f18565b8281036020840152613155818587612ff8565b9695505050505050565b60c08152600061317260c083018a612f18565b6001600160a01b038916602084015287604084015286606084015285608084015282810360a08401526131a6818587612ff8565b9a9950505050505050505050565b600080604083850312156131c757600080fd5b82516131d281612b25565b6020939093015192949293505050565b600082516131f4818460208701612ef4565b919091019291505056fea2646970667358221220aa7781f02b83781fe8c9234fceb32e81bb1b35cbd84ec554f95cd1a565cec31964736f6c634300081a0033", + ABI: "[{\"type\":\"constructor\",\"inputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"receive\",\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"DEFAULT_ADMIN_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"FUNGIBLE_MODULE_ADDRESS\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"PAUSER_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"UPGRADE_INTERFACE_VERSION\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"call\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"chainId\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"message\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"deposit\",\"inputs\":[{\"name\":\"zrc20\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"depositAndCall\",\"inputs\":[{\"name\":\"context\",\"type\":\"tuple\",\"internalType\":\"structzContext\",\"components\":[{\"name\":\"origin\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"sender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"chainID\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"message\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"depositAndCall\",\"inputs\":[{\"name\":\"context\",\"type\":\"tuple\",\"internalType\":\"structzContext\",\"components\":[{\"name\":\"origin\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"sender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"chainID\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"zrc20\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"message\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"depositAndRevert\",\"inputs\":[{\"name\":\"context\",\"type\":\"tuple\",\"internalType\":\"structrevertContext\",\"components\":[{\"name\":\"origin\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"sender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"chainID\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"zrc20\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"message\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"execute\",\"inputs\":[{\"name\":\"context\",\"type\":\"tuple\",\"internalType\":\"structzContext\",\"components\":[{\"name\":\"origin\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"sender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"chainID\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"zrc20\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"message\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"executeRevert\",\"inputs\":[{\"name\":\"context\",\"type\":\"tuple\",\"internalType\":\"structrevertContext\",\"components\":[{\"name\":\"origin\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"sender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"chainID\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"zrc20\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"message\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"getRoleAdmin\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"grantRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"hasRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"initialize\",\"inputs\":[{\"name\":\"zetaToken_\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"admin_\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"pause\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"paused\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"proxiableUUID\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"renounceRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"callerConfirmation\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"revokeRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"supportsInterface\",\"inputs\":[{\"name\":\"interfaceId\",\"type\":\"bytes4\",\"internalType\":\"bytes4\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"unpause\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"upgradeToAndCall\",\"inputs\":[{\"name\":\"newImplementation\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"withdraw\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"zrc20\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"withdraw\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"chainId\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"withdrawAndCall\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"zrc20\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"message\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"withdrawAndCall\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"chainId\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"message\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"zetaToken\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"event\",\"name\":\"Call\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"chainId\",\"type\":\"uint256\",\"indexed\":true,\"internalType\":\"uint256\"},{\"name\":\"receiver\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"message\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Initialized\",\"inputs\":[{\"name\":\"version\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Paused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleAdminChanged\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"previousAdminRole\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"newAdminRole\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleGranted\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleRevoked\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Unpaused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Upgraded\",\"inputs\":[{\"name\":\"implementation\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Withdrawal\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"chainId\",\"type\":\"uint256\",\"indexed\":true,\"internalType\":\"uint256\"},{\"name\":\"receiver\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"zrc20\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"gasfee\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"protocolFlatFee\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"message\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"AccessControlBadConfirmation\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"AccessControlUnauthorizedAccount\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"neededRole\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"type\":\"error\",\"name\":\"AddressEmptyCode\",\"inputs\":[{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"CallerIsNotFungibleModule\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ERC1967InvalidImplementation\",\"inputs\":[{\"name\":\"implementation\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"ERC1967NonPayable\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"EnforcedPause\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ExpectedPause\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"FailedInnerCall\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"FailedZetaSent\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"GasFeeTransferFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientZRC20Amount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientZetaAmount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidInitialization\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidTarget\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NotInitializing\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OnlyWZETAOrFungible\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ReentrancyGuardReentrantCall\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"UUPSUnauthorizedCallContext\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"UUPSUnsupportedProxiableUUID\",\"inputs\":[{\"name\":\"slot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"type\":\"error\",\"name\":\"WithdrawalFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZRC20BurnFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZRC20DepositFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZRC20TransferFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZeroAddress\",\"inputs\":[]}]", + Bin: "0x60a06040523060805234801561001457600080fd5b5061001d610022565b6100d4565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100725760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146100d15780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b60805161331b6100fd6000396000818161235f01528181612388015261255e015261331b6000f3fe6080604052600436106101bb5760003560e01c80635c975abb116100ec578063ad3cb1cc1161008a578063d547741f11610064578063d547741f14610600578063e63ab1e914610620578063f41d774914610654578063f45346dc1461067457600080fd5b8063ad3cb1cc1461056a578063bcf7f32b146105c0578063c39aca37146105e057600080fd5b80637993c1e0116100c65780637993c1e0146104bb5780638456cb59146104db57806391d14854146104f0578063a217fddf1461055557600080fd5b80635c975abb146104445780635d40e1781461047b578063737a9ed61461049b57600080fd5b806336568abe11610159578063485cc95511610133578063485cc955146103dc5780634f1ef286146103fc57806352d1902d1461040f5780635af659671461042457600080fd5b806336568abe1461037f5780633ce4a5bc1461039f5780633f4ba83a146103c757600080fd5b806321e093b11161019557806321e093b1146102aa578063248a9ca3146102e25780632f2ff15d1461033f578063309f50041461035f57600080fd5b806301ffc9a714610235578063135390f91461026a57806321501a951461028a57600080fd5b36610230576101c8610694565b6000546001600160a01b031633148015906101f757503373735b14bb79463307aacbed86daf3322b1e6226ab14155b1561022e576040517f229930b200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b005b600080fd5b34801561024157600080fd5b50610255610250366004612a3c565b6106f2565b60405190151581526020015b60405180910390f35b34801561027657600080fd5b5061022e610285366004612b8e565b61078b565b34801561029657600080fd5b5061022e6102a5366004612c4a565b6108f9565b3480156102b657600080fd5b506000546102ca906001600160a01b031681565b6040516001600160a01b039091168152602001610261565b3480156102ee57600080fd5b506103316102fd366004612cd6565b60009081527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052604090206001015490565b604051908152602001610261565b34801561034b57600080fd5b5061022e61035a366004612cef565b610ac6565b34801561036b57600080fd5b5061022e61037a366004612d1f565b610b10565b34801561038b57600080fd5b5061022e61039a366004612cef565b610c7a565b3480156103ab57600080fd5b506102ca73735b14bb79463307aacbed86daf3322b1e6226ab81565b3480156103d357600080fd5b5061022e610cc6565b3480156103e857600080fd5b5061022e6103f7366004612dbd565b610cfb565b61022e61040a366004612deb565b610f51565b34801561041b57600080fd5b50610331610f70565b34801561043057600080fd5b5061022e61043f366004612d1f565b610f9f565b34801561045057600080fd5b507fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff16610255565b34801561048757600080fd5b5061022e610496366004612e3b565b6111ae565b3480156104a757600080fd5b5061022e6104b6366004612eb0565b611268565b3480156104c757600080fd5b5061022e6104d6366004612efe565b611348565b3480156104e757600080fd5b5061022e6114bc565b3480156104fc57600080fd5b5061025561050b366004612cef565b60009182527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408084206001600160a01b0393909316845291905290205460ff1690565b34801561056157600080fd5b50610331600081565b34801561057657600080fd5b506105b36040518060400160405280600581526020017f352e302e3000000000000000000000000000000000000000000000000000000081525081565b6040516102619190612fa7565b3480156105cc57600080fd5b5061022e6105db366004612d1f565b6114ee565b3480156105ec57600080fd5b5061022e6105fb366004612d1f565b61161e565b34801561060c57600080fd5b5061022e61061b366004612cef565b61182d565b34801561062c57600080fd5b506103317f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b34801561066057600080fd5b5061022e61066f366004612fba565b611871565b34801561068057600080fd5b5061022e61068f366004613020565b611990565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff16156106f0576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061078557507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b610793611b9f565b61079b610694565b82516000036107d6576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b81600003610810576040517f5d67094f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061081c8383611c20565b90506000336001600160a01b03167fde19dbe881cc0aeeb6e73ce19ac7b5ca695e6be8a076e3eb42292005a7fec1b586858786886001600160a01b0316634d8943bb6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561088d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108b19190613057565b6040516108c2959493929190613070565b60405180910390a3506108f460017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610946576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61094e610694565b6001600160a01b03831661098e576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b836000036109c8576040517f19c08f4900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03831673735b14bb79463307aacbed86daf3322b1e6226ab14806109fb57506001600160a01b03831630145b15610a32576040517f82d5d76a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610a3c8484611f13565b6000546040517fde43156e0000000000000000000000000000000000000000000000000000000081526001600160a01b038086169263de43156e92610a8d928a9216908990889088906004016131ad565b600060405180830381600087803b158015610aa757600080fd5b505af1158015610abb573d6000803e3d6000fd5b505050505050505050565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020526040902060010154610b00816120e1565b610b0a83836120eb565b50505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610b5d576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610b65610694565b6001600160a01b0385161580610b8257506001600160a01b038316155b15610bb9576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b83600003610bf3576040517f5d67094f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f69582bee0000000000000000000000000000000000000000000000000000000081526001600160a01b038416906369582bee90610c4090899089908990889088906004016131ad565b600060405180830381600087803b158015610c5a57600080fd5b505af1158015610c6e573d6000803e3d6000fd5b50505050505050505050565b6001600160a01b0381163314610cbc576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6108f482826121d8565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610cf0816120e1565b610cf861229c565b50565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff16600081158015610d465750825b905060008267ffffffffffffffff166001148015610d635750303b155b905081158015610d71575080155b15610da8576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001660011785558315610e095784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff16680100000000000000001785555b6001600160a01b0387161580610e2657506001600160a01b038616155b15610e5d576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610e6561232c565b610e6d61232c565b610e75612334565b610e7d612344565b610e886000876120eb565b50610eb37f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a876120eb565b50600080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0389161790558315610f485784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50505050505050565b610f59612354565b610f6282612424565b610f6c828261242f565b5050565b6000610f7a612553565b507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc90565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610fec576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610ff4610694565b6001600160a01b038516158061101157506001600160a01b038316155b15611048576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b83600003611082576040517f5d67094f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03831673735b14bb79463307aacbed86daf3322b1e6226ab14806110b557506001600160a01b03831630145b156110ec576040517f82d5d76a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f47e7ef240000000000000000000000000000000000000000000000000000000081526001600160a01b038481166004830152602482018690528616906347e7ef24906044016020604051808303816000875af1158015611154573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061117891906131f4565b610bf3576040517f47d19fab00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6111b6611b9f565b6111be610694565b83516000036111f9576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b82336001600160a01b03167f5322ffbbf9261ff1f8138247942d2b03b28717141ef0a0dd080fc4be9c4e78d386858560405161123793929190613216565b60405180910390a3610b0a60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b611270611b9f565b611278610694565b816000036112b2576040517f19c08f4900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6112d08273735b14bb79463307aacbed86daf3322b1e6226ab611f13565b60008054604051839233927fde19dbe881cc0aeeb6e73ce19ac7b5ca695e6be8a076e3eb42292005a7fec1b5926113179289926001600160a01b0316918991908190613070565b60405180910390a36108f460017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b611350611b9f565b611358610694565b8451600003611393576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b836000036113cd576040517f5d67094f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006113d98585611c20565b90506000336001600160a01b03167fde19dbe881cc0aeeb6e73ce19ac7b5ca695e6be8a076e3eb42292005a7fec1b5888789868a6001600160a01b0316634d8943bb6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561144a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061146e9190613057565b8a8a6040516114839796959493929190613246565b60405180910390a3506114b560017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b5050505050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a6114e6816120e1565b610cf86125b5565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461153b576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611543610694565b6001600160a01b038516158061156057506001600160a01b038316155b15611597576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b836000036115d1576040517f5d67094f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517fde43156e0000000000000000000000000000000000000000000000000000000081526001600160a01b0384169063de43156e90610c4090899089908990889088906004016131ad565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461166b576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611673610694565b6001600160a01b038516158061169057506001600160a01b038316155b156116c7576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b83600003611701576040517f5d67094f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03831673735b14bb79463307aacbed86daf3322b1e6226ab148061173457506001600160a01b03831630145b1561176b576040517f82d5d76a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f47e7ef240000000000000000000000000000000000000000000000000000000081526001600160a01b038481166004830152602482018690528616906347e7ef24906044016020604051808303816000875af11580156117d3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117f791906131f4565b6115d1576040517f47d19fab00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020526040902060010154611867816120e1565b610b0a83836121d8565b611879611b9f565b611881610694565b84516000036118bc576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b836000036118f6576040517f19c08f4900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6119148473735b14bb79463307aacbed86daf3322b1e6226ab611f13565b60008054604051859233927fde19dbe881cc0aeeb6e73ce19ac7b5ca695e6be8a076e3eb42292005a7fec1b59261195f928b926001600160a01b0316918b919081908b908b90613246565b60405180910390a36114b560017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b3373735b14bb79463307aacbed86daf3322b1e6226ab146119dd576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6119e5610694565b6001600160a01b0383161580611a0257506001600160a01b038116155b15611a39576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b81600003611a73576040517f5d67094f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03811673735b14bb79463307aacbed86daf3322b1e6226ab1480611aa657506001600160a01b03811630145b15611add576040517f82d5d76a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f47e7ef240000000000000000000000000000000000000000000000000000000081526001600160a01b038281166004830152602482018490528416906347e7ef24906044016020604051808303816000875af1158015611b45573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b6991906131f4565b6108f4576040517f47d19fab00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0080547ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01611c1a576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60029055565b6000806000836001600160a01b031663d9eeebed6040518163ffffffff1660e01b81526004016040805180830381865afa158015611c62573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c86919061329b565b6040517f23b872dd00000000000000000000000000000000000000000000000000000000815233600482015273735b14bb79463307aacbed86daf3322b1e6226ab60248201526044810182905291935091506001600160a01b038316906323b872dd906064016020604051808303816000875af1158015611d0b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d2f91906131f4565b611d65576040517f0a7cd6d600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f23b872dd000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018690526001600160a01b038516906323b872dd906064016020604051808303816000875af1158015611dd1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611df591906131f4565b611e2b576040517f4dd9ee8d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f42966c68000000000000000000000000000000000000000000000000000000008152600481018690526001600160a01b038516906342966c68906024016020604051808303816000875af1158015611e8b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611eaf91906131f4565b611ee5576040517f2c77e05c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b949350505050565b60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b6000546040517f23b872dd000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018490526001600160a01b03909116906323b872dd906064016020604051808303816000875af1158015611f83573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fa791906131f4565b611fdd576040517fc7ffc47b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000546040517f2e1a7d4d000000000000000000000000000000000000000000000000000000008152600481018490526001600160a01b0390911690632e1a7d4d90602401600060405180830381600087803b15801561203c57600080fd5b505af1158015612050573d6000803e3d6000fd5b505050506000816001600160a01b03168360405160006040518083038185875af1925050503d80600081146120a1576040519150601f19603f3d011682016040523d82523d6000602084013e6120a6565b606091505b50509050806108f4576040517fc7ffc47b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610cf8813361262e565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff166121ce576000848152602082815260408083206001600160a01b0387168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790556121843390565b6001600160a01b0316836001600160a01b0316857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a46001915050610785565b6000915050610785565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff16156121ce576000848152602082815260408083206001600160a01b038716808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339287917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a46001915050610785565b6122a46126bb565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001681557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a150565b6106f0612716565b61233c612716565b6106f061277d565b61234c612716565b6106f06127ce565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806123ed57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166123e17f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b6001600160a01b031614155b156106f0576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610f6c816120e1565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156124a7575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682019092526124a491810190613057565b60015b6124ed576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b03831660048201526024015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8114612549576040517faa1d49a4000000000000000000000000000000000000000000000000000000008152600481018290526024016124e4565b6108f483836127d6565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146106f0576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6125bd610694565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011781557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2583361230e565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408083206001600160a01b038516845290915290205460ff16610f6c576040517fe2517d3f0000000000000000000000000000000000000000000000000000000081526001600160a01b0382166004820152602481018390526044016124e4565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff166106f0576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff166106f0576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612785612716565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055565b611eed612716565b6127df8261282c565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a2805115612824576108f482826128d4565b610f6c61294a565b806001600160a01b03163b60000361287b576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b03821660048201526024016124e4565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6060600080846001600160a01b0316846040516128f191906132c9565b600060405180830381855af49150503d806000811461292c576040519150601f19603f3d011682016040523d82523d6000602084013e612931565b606091505b5091509150612941858383612982565b95945050505050565b34156106f0576040517fb398979f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60608261299757612992826129fa565b6129f3565b81511580156129ae57506001600160a01b0384163b155b156129f0576040517f9996b3150000000000000000000000000000000000000000000000000000000081526001600160a01b03851660048201526024016124e4565b50805b9392505050565b805115612a0a5780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060208284031215612a4e57600080fd5b81357fffffffff00000000000000000000000000000000000000000000000000000000811681146129f357600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600082601f830112612abe57600080fd5b813567ffffffffffffffff811115612ad857612ad8612a7e565b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8501160116810181811067ffffffffffffffff82111715612b4457612b44612a7e565b604052818152838201602001851015612b5c57600080fd5b816020850160208301376000918101602001919091529392505050565b6001600160a01b0381168114610cf857600080fd5b600080600060608486031215612ba357600080fd5b833567ffffffffffffffff811115612bba57600080fd5b612bc686828701612aad565b935050602084013591506040840135612bde81612b79565b809150509250925092565b600060608284031215612bfb57600080fd5b50919050565b60008083601f840112612c1357600080fd5b50813567ffffffffffffffff811115612c2b57600080fd5b602083019150836020828501011115612c4357600080fd5b9250929050565b600080600080600060808688031215612c6257600080fd5b853567ffffffffffffffff811115612c7957600080fd5b612c8588828901612be9565b955050602086013593506040860135612c9d81612b79565b9250606086013567ffffffffffffffff811115612cb957600080fd5b612cc588828901612c01565b969995985093965092949392505050565b600060208284031215612ce857600080fd5b5035919050565b60008060408385031215612d0257600080fd5b823591506020830135612d1481612b79565b809150509250929050565b60008060008060008060a08789031215612d3857600080fd5b863567ffffffffffffffff811115612d4f57600080fd5b612d5b89828a01612be9565b9650506020870135612d6c81612b79565b9450604087013593506060870135612d8381612b79565b9250608087013567ffffffffffffffff811115612d9f57600080fd5b612dab89828a01612c01565b979a9699509497509295939492505050565b60008060408385031215612dd057600080fd5b8235612ddb81612b79565b91506020830135612d1481612b79565b60008060408385031215612dfe57600080fd5b8235612e0981612b79565b9150602083013567ffffffffffffffff811115612e2557600080fd5b612e3185828601612aad565b9150509250929050565b60008060008060608587031215612e5157600080fd5b843567ffffffffffffffff811115612e6857600080fd5b612e7487828801612aad565b94505060208501359250604085013567ffffffffffffffff811115612e9857600080fd5b612ea487828801612c01565b95989497509550505050565b600080600060608486031215612ec557600080fd5b833567ffffffffffffffff811115612edc57600080fd5b612ee886828701612aad565b9660208601359650604090950135949350505050565b600080600080600060808688031215612f1657600080fd5b853567ffffffffffffffff811115612f2d57600080fd5b612c8588828901612aad565b60005b83811015612f54578181015183820152602001612f3c565b50506000910152565b60008151808452612f75816020860160208601612f39565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006129f36020830184612f5d565b600080600080600060808688031215612fd257600080fd5b853567ffffffffffffffff811115612fe957600080fd5b612ff588828901612aad565b9550506020860135935060408601359250606086013567ffffffffffffffff811115612cb957600080fd5b60008060006060848603121561303557600080fd5b833561304081612b79565b9250602084013591506040840135612bde81612b79565b60006020828403121561306957600080fd5b5051919050565b60c08152600061308360c0830188612f5d565b6001600160a01b038716602084015285604084015284606084015283608084015282810360a084015260008152602081019150509695505050505050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b600081357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe183360301811261313e57600080fd5b820160208101903567ffffffffffffffff81111561315b57600080fd5b80360382131561316a57600080fd5b6060855261317c6060860182846130c1565b915050602083013561318d81612b79565b6001600160a01b0316602085015260409283013592909301919091525090565b6080815260006131c0608083018861310a565b6001600160a01b038716602084015285604084015282810360608401526131e88185876130c1565b98975050505050505050565b60006020828403121561320657600080fd5b815180151581146129f357600080fd5b6040815260006132296040830186612f5d565b828103602084015261323c8185876130c1565b9695505050505050565b60c08152600061325960c083018a612f5d565b6001600160a01b038916602084015287604084015286606084015285608084015282810360a084015261328d8185876130c1565b9a9950505050505050505050565b600080604083850312156132ae57600080fd5b82516132b981612b79565b6020939093015192949293505050565b600082516132db818460208701612f39565b919091019291505056fea26469706673582212200b8c15bf3d7fc3d43f6549db8e61ddd6e457ad02ec4a35fc95b81732bdaa45f164736f6c634300081a0033", } // GatewayZEVMABI is the input ABI used to generate the binding from. @@ -841,25 +841,25 @@ func (_GatewayZEVM *GatewayZEVMTransactorSession) Withdraw(receiver []byte, amou return _GatewayZEVM.Contract.Withdraw(&_GatewayZEVM.TransactOpts, receiver, amount, zrc20) } -// Withdraw0 is a paid mutator transaction binding the contract method 0x441a3e70. +// Withdraw0 is a paid mutator transaction binding the contract method 0x737a9ed6. // -// Solidity: function withdraw(uint256 amount, uint256 chainId) returns() -func (_GatewayZEVM *GatewayZEVMTransactor) Withdraw0(opts *bind.TransactOpts, amount *big.Int, chainId *big.Int) (*types.Transaction, error) { - return _GatewayZEVM.contract.Transact(opts, "withdraw0", amount, chainId) +// Solidity: function withdraw(bytes receiver, uint256 amount, uint256 chainId) returns() +func (_GatewayZEVM *GatewayZEVMTransactor) Withdraw0(opts *bind.TransactOpts, receiver []byte, amount *big.Int, chainId *big.Int) (*types.Transaction, error) { + return _GatewayZEVM.contract.Transact(opts, "withdraw0", receiver, amount, chainId) } -// Withdraw0 is a paid mutator transaction binding the contract method 0x441a3e70. +// Withdraw0 is a paid mutator transaction binding the contract method 0x737a9ed6. // -// Solidity: function withdraw(uint256 amount, uint256 chainId) returns() -func (_GatewayZEVM *GatewayZEVMSession) Withdraw0(amount *big.Int, chainId *big.Int) (*types.Transaction, error) { - return _GatewayZEVM.Contract.Withdraw0(&_GatewayZEVM.TransactOpts, amount, chainId) +// Solidity: function withdraw(bytes receiver, uint256 amount, uint256 chainId) returns() +func (_GatewayZEVM *GatewayZEVMSession) Withdraw0(receiver []byte, amount *big.Int, chainId *big.Int) (*types.Transaction, error) { + return _GatewayZEVM.Contract.Withdraw0(&_GatewayZEVM.TransactOpts, receiver, amount, chainId) } -// Withdraw0 is a paid mutator transaction binding the contract method 0x441a3e70. +// Withdraw0 is a paid mutator transaction binding the contract method 0x737a9ed6. // -// Solidity: function withdraw(uint256 amount, uint256 chainId) returns() -func (_GatewayZEVM *GatewayZEVMTransactorSession) Withdraw0(amount *big.Int, chainId *big.Int) (*types.Transaction, error) { - return _GatewayZEVM.Contract.Withdraw0(&_GatewayZEVM.TransactOpts, amount, chainId) +// Solidity: function withdraw(bytes receiver, uint256 amount, uint256 chainId) returns() +func (_GatewayZEVM *GatewayZEVMTransactorSession) Withdraw0(receiver []byte, amount *big.Int, chainId *big.Int) (*types.Transaction, error) { + return _GatewayZEVM.Contract.Withdraw0(&_GatewayZEVM.TransactOpts, receiver, amount, chainId) } // WithdrawAndCall is a paid mutator transaction binding the contract method 0x7993c1e0. @@ -883,25 +883,25 @@ func (_GatewayZEVM *GatewayZEVMTransactorSession) WithdrawAndCall(receiver []byt return _GatewayZEVM.Contract.WithdrawAndCall(&_GatewayZEVM.TransactOpts, receiver, amount, zrc20, message) } -// WithdrawAndCall0 is a paid mutator transaction binding the contract method 0x80bd3d03. +// WithdrawAndCall0 is a paid mutator transaction binding the contract method 0xf41d7749. // -// Solidity: function withdrawAndCall(uint256 amount, uint256 chainId, bytes message) returns() -func (_GatewayZEVM *GatewayZEVMTransactor) WithdrawAndCall0(opts *bind.TransactOpts, amount *big.Int, chainId *big.Int, message []byte) (*types.Transaction, error) { - return _GatewayZEVM.contract.Transact(opts, "withdrawAndCall0", amount, chainId, message) +// Solidity: function withdrawAndCall(bytes receiver, uint256 amount, uint256 chainId, bytes message) returns() +func (_GatewayZEVM *GatewayZEVMTransactor) WithdrawAndCall0(opts *bind.TransactOpts, receiver []byte, amount *big.Int, chainId *big.Int, message []byte) (*types.Transaction, error) { + return _GatewayZEVM.contract.Transact(opts, "withdrawAndCall0", receiver, amount, chainId, message) } -// WithdrawAndCall0 is a paid mutator transaction binding the contract method 0x80bd3d03. +// WithdrawAndCall0 is a paid mutator transaction binding the contract method 0xf41d7749. // -// Solidity: function withdrawAndCall(uint256 amount, uint256 chainId, bytes message) returns() -func (_GatewayZEVM *GatewayZEVMSession) WithdrawAndCall0(amount *big.Int, chainId *big.Int, message []byte) (*types.Transaction, error) { - return _GatewayZEVM.Contract.WithdrawAndCall0(&_GatewayZEVM.TransactOpts, amount, chainId, message) +// Solidity: function withdrawAndCall(bytes receiver, uint256 amount, uint256 chainId, bytes message) returns() +func (_GatewayZEVM *GatewayZEVMSession) WithdrawAndCall0(receiver []byte, amount *big.Int, chainId *big.Int, message []byte) (*types.Transaction, error) { + return _GatewayZEVM.Contract.WithdrawAndCall0(&_GatewayZEVM.TransactOpts, receiver, amount, chainId, message) } -// WithdrawAndCall0 is a paid mutator transaction binding the contract method 0x80bd3d03. +// WithdrawAndCall0 is a paid mutator transaction binding the contract method 0xf41d7749. // -// Solidity: function withdrawAndCall(uint256 amount, uint256 chainId, bytes message) returns() -func (_GatewayZEVM *GatewayZEVMTransactorSession) WithdrawAndCall0(amount *big.Int, chainId *big.Int, message []byte) (*types.Transaction, error) { - return _GatewayZEVM.Contract.WithdrawAndCall0(&_GatewayZEVM.TransactOpts, amount, chainId, message) +// Solidity: function withdrawAndCall(bytes receiver, uint256 amount, uint256 chainId, bytes message) returns() +func (_GatewayZEVM *GatewayZEVMTransactorSession) WithdrawAndCall0(receiver []byte, amount *big.Int, chainId *big.Int, message []byte) (*types.Transaction, error) { + return _GatewayZEVM.Contract.WithdrawAndCall0(&_GatewayZEVM.TransactOpts, receiver, amount, chainId, message) } // Receive is a paid mutator transaction binding the contract receive function. diff --git a/v2/pkg/gatewayzevm.t.sol/gatewayzevminboundtest.go b/v2/pkg/gatewayzevm.t.sol/gatewayzevminboundtest.go index b34ac6ed..a98de33c 100644 --- a/v2/pkg/gatewayzevm.t.sol/gatewayzevminboundtest.go +++ b/v2/pkg/gatewayzevm.t.sol/gatewayzevminboundtest.go @@ -49,8 +49,8 @@ type StdInvariantFuzzSelector struct { // GatewayZEVMInboundTestMetaData contains all meta data concerning the GatewayZEVMInboundTest contract. var GatewayZEVMInboundTestMetaData = &bind.MetaData{ - ABI: "[{\"type\":\"function\",\"name\":\"IS_TEST\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeArtifacts\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedArtifacts_\",\"type\":\"string[]\",\"internalType\":\"string[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeContracts\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedContracts_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeSelectors\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedSelectors_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzSelector[]\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"selectors\",\"type\":\"bytes4[]\",\"internalType\":\"bytes4[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeSenders\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedSenders_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"failed\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"setUp\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"targetArtifactSelectors\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedArtifactSelectors_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzArtifactSelector[]\",\"components\":[{\"name\":\"artifact\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"selectors\",\"type\":\"bytes4[]\",\"internalType\":\"bytes4[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetArtifacts\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedArtifacts_\",\"type\":\"string[]\",\"internalType\":\"string[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetContracts\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedContracts_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetInterfaces\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedInterfaces_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzInterface[]\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"artifacts\",\"type\":\"string[]\",\"internalType\":\"string[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetSelectors\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedSelectors_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzSelector[]\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"selectors\",\"type\":\"bytes4[]\",\"internalType\":\"bytes4[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetSenders\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedSenders_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"testCall\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testCallFailsIfReceiverIsZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawAndCallZRC20FailsIfAmountIsZero\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawAndCallZRC20FailsIfReceiverIsZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawAndcallZETAFailsIfAmountIsZero\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawZETA\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawZETAFailsIfAmountIsZero\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawZETAFailsIfNoAllowance\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawZETAFailsIfNoBalance\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawZETAWithMessage\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawZETAWithMessageFailsIfNoAllowance\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawZRC20\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawZRC20FailsIfNoAllowance\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawZRC20FailsIfNoBalanceForGasFee\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawZRC20FailsIfNoBalanceForTransfer\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawZRC20FailsIfReceiverIsZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawZRC20FailsIsAmountIs0\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawZRC20WithMessage\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawZRC20WithMessageFailsIfNoAllowance\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"event\",\"name\":\"Call\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"chainId\",\"type\":\"uint256\",\"indexed\":true,\"internalType\":\"uint256\"},{\"name\":\"receiver\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"message\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Withdrawal\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"chainId\",\"type\":\"uint256\",\"indexed\":true,\"internalType\":\"uint256\"},{\"name\":\"receiver\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"zrc20\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"gasfee\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"protocolFlatFee\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"message\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log\",\"inputs\":[{\"name\":\"\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_address\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_array\",\"inputs\":[{\"name\":\"val\",\"type\":\"uint256[]\",\"indexed\":false,\"internalType\":\"uint256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_array\",\"inputs\":[{\"name\":\"val\",\"type\":\"int256[]\",\"indexed\":false,\"internalType\":\"int256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_array\",\"inputs\":[{\"name\":\"val\",\"type\":\"address[]\",\"indexed\":false,\"internalType\":\"address[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_bytes\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_bytes32\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_int\",\"inputs\":[{\"name\":\"\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_address\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_array\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"uint256[]\",\"indexed\":false,\"internalType\":\"uint256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_array\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"int256[]\",\"indexed\":false,\"internalType\":\"int256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_array\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"address[]\",\"indexed\":false,\"internalType\":\"address[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_bytes\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_bytes32\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_decimal_int\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"},{\"name\":\"decimals\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_decimal_uint\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"decimals\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_int\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_string\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_uint\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_string\",\"inputs\":[{\"name\":\"\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_uint\",\"inputs\":[{\"name\":\"\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"logs\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"CallerIsNotFungibleModule\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"FailedZetaSent\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"GasFeeTransferFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientZRC20Amount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientZetaAmount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidTarget\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"LowBalance\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OnlyWZETAOrFungible\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"WithdrawalFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZRC20BurnFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZRC20DepositFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZRC20TransferFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZeroAddress\",\"inputs\":[]}]", - Bin: "0x6080604052600c8054600160ff199182168117909255601f80549091169091179055348015602c57600080fd5b5061df248061003c6000396000f3fe608060405234801561001057600080fd5b50600436106101f05760003560e01c806385226c811161010f578063bcc52b9a116100a2578063ea37902f11610071578063ea37902f14610331578063fa7626d414610339578063fbc611c814610346578063fdad0ad01461034e57600080fd5b8063bcc52b9a14610311578063ceccfab314610319578063dde7e96714610321578063e20c9f711461032957600080fd5b8063b7f05836116100de578063b7f05836146102e1578063ba414fa6146102e9578063ba800c9114610301578063ba9adeef1461030957600080fd5b806385226c81146102a7578063916a17c6146102bc578063b0464fdc146102d1578063b5508aa9146102d957600080fd5b806339cbb457116101875780635d72228f116101565780635d72228f1461027a5780636221b5091461028257806366d9a9a01461028a57806383ababa91461029f57600080fd5b806339cbb4571461025a5780633e5e3c23146102625780633f7286f41461026a5780635006fd801461027257600080fd5b80631ed7831c116101c35780631ed7831c1461021757806321aeb18c146102355780632ade38801461023d57806336431b3f1461025257600080fd5b80630a9254e4146101f55780631238212c146101ff57806318a4cfdc146102075780631e63d2b91461020f575b600080fd5b6101fd610356565b005b6101fd610dc3565b6101fd61118c565b6101fd6115e1565b61021f6119cd565b60405161022c91906189f3565b60405180910390f35b6101fd611a2f565b610245611b33565b60405161022c9190618a8f565b6101fd611c75565b6101fd611e1b565b61021f611f83565b61021f611fe3565b6101fd612043565b6101fd6124da565b6101fd612829565b610292612a2f565b60405161022c9190618bf5565b6101fd612bb1565b6102af612cac565b60405161022c9190618c93565b6102c4612d7c565b60405161022c9190618d0a565b6102c4612e77565b6102af612f72565b6101fd613042565b6102f161327f565b604051901515815260200161022c565b6101fd613353565b6101fd61347f565b6101fd613622565b6101fd613783565b6101fd613ab7565b61021f613ed7565b6101fd613f37565b601f546102f19060ff1681565b6101fd6142f3565b6101fd614666565b602580547fffffffffffffffffffffffff000000000000000000000000000000000000000090811630179091556026805490911661123417905560405161039c90618906565b604051809103906000f0801580156103b8573d6000803e3d6000fd5b50602280547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03928316908117909155604080518082018252600f81527f476174657761795a45564d2e736f6c00000000000000000000000000000000006020820152602554915160248101939093529216604482015261049c919060640160408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f485cc955000000000000000000000000000000000000000000000000000000001790526147f5565b601f80547fffffffffffffffffffffff0000000000000000000000000000000000000000ff166101006001600160a01b039384168102919091179182905560208054919092049092167fffffffffffffffffffffffff000000000000000000000000000000000000000090921682178155604080517f3ce4a5bc0000000000000000000000000000000000000000000000000000000081529051633ce4a5bc926004808401939192918290030181865afa15801561055e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105829190618da1565b602780547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03929092169190911790556040516105c690618913565b604051809103906000f0801580156105e2573d6000803e3d6000fd5b50602480547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039283161781556027546040517f06447d5600000000000000000000000000000000000000000000000000000000815292166004830152737109709ecfa91a80626ff3989d68f67f5b1dd12d916306447d569101600060405180830381600087803b15801561067e57600080fd5b505af1158015610692573d6000803e3d6000fd5b5050505060008060006040516106a790618920565b6001600160a01b03938416815291831660208301529091166040820152606001604051809103906000f0801580156106e3573d6000803e3d6000fd5b50602380547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039283169081179091556020546040516012936001938493600093919216906107399061892d565b61074896959493929190618dca565b604051809103906000f080158015610764573d6000803e3d6000fd5b50602180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039283169081179091556023546040517fee2815ba0000000000000000000000000000000000000000000000000000000081526001600482015260248101929092529091169063ee2815ba90604401600060405180830381600087803b1580156107fb57600080fd5b505af115801561080f573d6000803e3d6000fd5b50506023546040517fa7cb050700000000000000000000000000000000000000000000000000000000815260016004820181905260248201526001600160a01b03909116925063a7cb05079150604401600060405180830381600087803b15801561087957600080fd5b505af115801561088d573d6000803e3d6000fd5b50506027546040517fc88a5e6d0000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152633b9aca006024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c88a5e6d9150604401600060405180830381600087803b15801561090d57600080fd5b505af1158015610921573d6000803e3d6000fd5b50505050602260009054906101000a90046001600160a01b03166001600160a01b031663d0e30db0600a6040518263ffffffff1660e01b81526004016000604051808303818588803b15801561097657600080fd5b505af115801561098a573d6000803e3d6000fd5b50506022546020546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152600a60248201529116935063095ea7b3925060440190506020604051808303816000875af11580156109fe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a229190618ebf565b506021546025546040517f47e7ef240000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620186a060248201529116906347e7ef24906044016020604051808303816000875af1158015610a93573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ab79190618ebf565b507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b03166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610b1657600080fd5b505af1158015610b2a573d6000803e3d6000fd5b50506025546040517f06447d560000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506306447d569150602401600060405180830381600087803b158015610ba057600080fd5b505af1158015610bb4573d6000803e3d6000fd5b50506021546020546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620186a060248201529116925063095ea7b391506044016020604051808303816000875af1158015610c28573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c4c9190618ebf565b50602260009054906101000a90046001600160a01b03166001600160a01b031663d0e30db0600a6040518263ffffffff1660e01b81526004016000604051808303818588803b158015610c9e57600080fd5b505af1158015610cb2573d6000803e3d6000fd5b50506022546020546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152600a60248201529116935063095ea7b3925060440190506020604051808303816000875af1158015610d26573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d4a9190618ebf565b507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b03166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610da957600080fd5b505af1158015610dbd573d6000803e3d6000fd5b50505050565b6021546025546040516370a0823160e01b81526001600160a01b03918216600482015260019260009216906370a0823190602401602060405180830381865afa158015610e14573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e389190618ee1565b6025546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015610ead57600080fd5b505af1158015610ec1573d6000803e3d6000fd5b50506021546020546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152600060248201529116925063095ea7b391506044016020604051808303816000875af1158015610f33573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f579190618ebf565b506026546040516001600160a01b03909116602482015260009060440160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f84fae7600000000000000000000000000000000000000000000000000000000017905280517ff48448140000000000000000000000000000000000000000000000000000000081529051919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f48448149160048082019260009290919082900301818387803b15801561103357600080fd5b505af1158015611047573d6000803e3d6000fd5b50506020805460265460405160609190911b6bffffffffffffffffffffffff1916928101929092526001600160a01b03169250637993c1e0915060340160408051601f19818403018152908290526021547fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1683526110db9288916001600160a01b0316908790600401618efa565b600060405180830381600087803b1580156110f557600080fd5b505af1158015611109573d6000803e3d6000fd5b50506021546025546040516370a0823160e01b81526001600160a01b03918216600482015260009450911691506370a0823190602401602060405180830381865afa15801561115c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111809190618ee1565b9050610dbd8382614814565b6022546025546040516370a0823160e01b81526001600160a01b03918216600482015260019260009216906370a0823190602401602060405180830381865afa1580156111dd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112019190618ee1565b6022546020546040516370a0823160e01b81526001600160a01b0391821660048201529293506000929116906370a0823190602401602060405180830381865afa158015611253573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112779190618ee1565b6027546026546040516001600160a01b03918216602482015292935016319060009060440160408051601f19818403018152918152602080830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f84fae760000000000000000000000000000000000000000000000000000000001790525490517f81bad6f30000000000000000000000000000000000000000000000000000000081526001600482018190526024820181905260448201819052606482018190526001600160a01b03909216608482015291925090737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b15801561138657600080fd5b505af115801561139a573d6000803e3d6000fd5b505060255460275460405160609190911b6bffffffffffffffffffffffff191660208201528493506001600160a01b0390911691507fde19dbe881cc0aeeb6e73ce19ac7b5ca695e6be8a076e3eb42292005a7fec1b59060340160408051601f1981840301815290829052602254611426926001600160a01b03909116908c9060009081908b90618f34565b60405180910390a36020546040517f80bd3d030000000000000000000000000000000000000000000000000000000081526001600160a01b03909116906380bd3d039061147b90899085908790600401618f87565b600060405180830381600087803b15801561149557600080fd5b505af11580156114a9573d6000803e3d6000fd5b50506022546025546040516370a0823160e01b81526001600160a01b03918216600482015260009450911691506370a0823190602401602060405180830381865afa1580156114fc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115209190618ee1565b9050611536611530600188618fd5565b82614814565b6022546020546040516370a0823160e01b81526001600160a01b03918216600482015260009291909116906370a0823190602401602060405180830381865afa158015611587573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115ab9190618ee1565b90506115b78682614814565b6115d76115c5866001618fe8565b6027546001600160a01b031631614814565b5050505050505050565b6021546025546040516370a0823160e01b81526001600160a01b03918216600482015260019260009216906370a0823190602401602060405180830381865afa158015611632573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116569190618ee1565b6026546040516001600160a01b03909116602482015290915060009060440160408051601f19818403018152918152602080830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f84fae760000000000000000000000000000000000000000000000000000000001790525490517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b15801561175c57600080fd5b505af1158015611770573d6000803e3d6000fd5b505060255460265460405160609190911b6bffffffffffffffffffffffff19166020820152600093506001600160a01b0390911691507fde19dbe881cc0aeeb6e73ce19ac7b5ca695e6be8a076e3eb42292005a7fec1b59060340160408051601f198184030181528282526021547f4d8943bb000000000000000000000000000000000000000000000000000000008452915190926001600160a01b039092169189916000918491634d8943bb916004808201926020929091908290030181865afa158015611843573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118679190618ee1565b8860405161187a96959493929190618f34565b60405180910390a3602080546026546040516001600160a01b0392831693637993c1e0936118c29316910160609190911b6bffffffffffffffffffffffff1916815260140190565b60408051601f19818403018152908290526021547fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1683526119199288916001600160a01b0316908790600401618efa565b600060405180830381600087803b15801561193357600080fd5b505af1158015611947573d6000803e3d6000fd5b50506021546025546040516370a0823160e01b81526001600160a01b03918216600482015260009450911691506370a0823190602401602060405180830381865afa15801561199a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119be9190618ee1565b9050610dbd6115308585618fd5565b60606016805480602002602001604051908101604052809291908181526020018280548015611a2557602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311611a07575b5050505050905090565b6040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527f19c08f49000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b158015611ab457600080fd5b505af1158015611ac8573d6000803e3d6000fd5b50506020546040517f441a3e7000000000000000000000000000000000000000000000000000000000815260006004820152600160248201526001600160a01b03909116925063441a3e7091506044015b600060405180830381600087803b158015610da957600080fd5b6060601e805480602002602001604051908101604052809291908181526020016000905b82821015611c6c57600084815260208082206040805180820182526002870290920180546001600160a01b03168352600181018054835181870281018701909452808452939591948681019491929084015b82821015611c55578382906000526020600020018054611bc890618ffb565b80601f0160208091040260200160405190810160405280929190818152602001828054611bf490618ffb565b8015611c415780601f10611c1657610100808354040283529160200191611c41565b820191906000526020600020905b815481529060010190602001808311611c2457829003601f168201915b505050505081526020019060010190611ba9565b505050508152505081526020019060010190611b57565b50505050905090565b6026546040516001600160a01b03909116602482015260009060440160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f84fae76000000000000000000000000000000000000000000000000000000000179052517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fd92e233d000000000000000000000000000000000000000000000000000000006004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b158015611d6f57600080fd5b505af1158015611d83573d6000803e3d6000fd5b5050602080546040805160008152928301908190526021547f7993c1e0000000000000000000000000000000000000000000000000000000009091526001600160a01b039182169450637993c1e09350611de69291600191168660248401618efa565b600060405180830381600087803b158015611e0057600080fd5b505af1158015611e14573d6000803e3d6000fd5b5050505050565b6026546040516001600160a01b03909116602482015260009060440160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f84fae76000000000000000000000000000000000000000000000000000000000179052517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fd92e233d000000000000000000000000000000000000000000000000000000006004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b158015611f1557600080fd5b505af1158015611f29573d6000803e3d6000fd5b5050602080546040805160008152928301908190527f5d40e1780000000000000000000000000000000000000000000000000000000090526001600160a01b03169250635d40e1789150611de69060018560248301619048565b60606018805480602002602001604051908101604052809291908181526020018280548015611a25576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311611a07575050505050905090565b60606017805480602002602001604051908101604052809291908181526020018280548015611a25576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311611a07575050505050905090565b6022546025546040516370a0823160e01b81526001600160a01b03918216600482015260019260009216906370a0823190602401602060405180830381865afa158015612094573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120b89190618ee1565b6022546020546040516370a0823160e01b81526001600160a01b0391821660048201529293506000929116906370a0823190602401602060405180830381865afa15801561210a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061212e9190618ee1565b6027546026546040516001600160a01b03918216602482015292935016319060009060440160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f84fae7600000000000000000000000000000000000000000000000000000000017905260255490517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152909150600190737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561222257600080fd5b505af1158015612236573d6000803e3d6000fd5b50506022546020546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152600060248201529116925063095ea7b391506044016020604051808303816000875af11580156122a8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122cc9190618ebf565b507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b031663f48448146040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561232b57600080fd5b505af115801561233f573d6000803e3d6000fd5b50506020546040517f80bd3d030000000000000000000000000000000000000000000000000000000081526001600160a01b0390911692506380bd3d03915061239090899085908790600401618f87565b600060405180830381600087803b1580156123aa57600080fd5b505af11580156123be573d6000803e3d6000fd5b50506022546025546040516370a0823160e01b81526001600160a01b03918216600482015260009450911691506370a0823190602401602060405180830381865afa158015612411573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124359190618ee1565b90506124418682614814565b6022546020546040516370a0823160e01b81526001600160a01b03918216600482015260009291909116906370a0823190602401602060405180830381865afa158015612492573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124b69190618ee1565b90506124c28682614814565b6027546115d79086906001600160a01b031631614814565b6021546025546040516370a0823160e01b81526001600160a01b03918216600482015260019260009216906370a0823190602401602060405180830381865afa15801561252b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061254f9190618ee1565b6025546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156125c457600080fd5b505af11580156125d8573d6000803e3d6000fd5b50506021546020546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152600060248201529116925063095ea7b391506044016020604051808303816000875af115801561264a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061266e9190618ebf565b507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b031663f48448146040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156126cd57600080fd5b505af11580156126e1573d6000803e3d6000fd5b50506020805460265460405160609190911b6bffffffffffffffffffffffff1916928101929092526001600160a01b0316925063135390f9915060340160408051601f19818403018152908290526021547fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1683526127739287916001600160a01b031690600401619073565b600060405180830381600087803b15801561278d57600080fd5b505af11580156127a1573d6000803e3d6000fd5b50506021546025546040516370a0823160e01b81526001600160a01b03918216600482015260009450911691506370a0823190602401602060405180830381865afa1580156127f4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128189190618ee1565b90506128248282614814565b505050565b6022546025546040516370a0823160e01b81526001600160a01b03918216600482015260019260009216906370a0823190602401602060405180830381865afa15801561287a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061289e9190618ee1565b6022546040517fa9059cbb0000000000000000000000000000000000000000000000000000000081526101236004820152602481018390529192506001600160a01b03169063a9059cbb906044016020604051808303816000875af115801561290b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061292f9190618ebf565b506000600190507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b031663f48448146040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561299457600080fd5b505af11580156129a8573d6000803e3d6000fd5b50506020546040517f441a3e7000000000000000000000000000000000000000000000000000000000815260048101879052602481018590526001600160a01b03909116925063441a3e709150604401600060405180830381600087803b158015612a1257600080fd5b505af1158015612a26573d6000803e3d6000fd5b50505050505050565b6060601b805480602002602001604051908101604052809291908181526020016000905b82821015611c6c5783829060005260206000209060020201604051806040016040529081600082018054612a8690618ffb565b80601f0160208091040260200160405190810160405280929190818152602001828054612ab290618ffb565b8015612aff5780601f10612ad457610100808354040283529160200191612aff565b820191906000526020600020905b815481529060010190602001808311612ae257829003601f168201915b5050505050815260200160018201805480602002602001604051908101604052809291908181526020018280548015612b9957602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019060040190602082600301049283019260010382029150808411612b465790505b50505050508152505081526020019060010190612a53565b6040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b158015612c3657600080fd5b505af1158015612c4a573d6000803e3d6000fd5b5050602080546040805160008152928301908190526021547f135390f9000000000000000000000000000000000000000000000000000000009091526001600160a01b03918216945063135390f99350611b1992916001911660248301619073565b6060601a805480602002602001604051908101604052809291908181526020016000905b82821015611c6c578382906000526020600020018054612cef90618ffb565b80601f0160208091040260200160405190810160405280929190818152602001828054612d1b90618ffb565b8015612d685780601f10612d3d57610100808354040283529160200191612d68565b820191906000526020600020905b815481529060010190602001808311612d4b57829003601f168201915b505050505081526020019060010190612cd0565b6060601d805480602002602001604051908101604052809291908181526020016000905b82821015611c6c5760008481526020908190206040805180820182526002860290920180546001600160a01b03168352600181018054835181870281018701909452808452939491938583019392830182828015612e5f57602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019060040190602082600301049283019260010382029150808411612e0c5790505b50505050508152505081526020019060010190612da0565b6060601c805480602002602001604051908101604052809291908181526020016000905b82821015611c6c5760008481526020908190206040805180820182526002860290920180546001600160a01b03168352600181018054835181870281018701909452808452939491938583019392830182828015612f5a57602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019060040190602082600301049283019260010382029150808411612f075790505b50505050508152505081526020019060010190612e9b565b60606019805480602002602001604051908101604052809291908181526020016000905b82821015611c6c578382906000526020600020018054612fb590618ffb565b80601f0160208091040260200160405190810160405280929190818152602001828054612fe190618ffb565b801561302e5780601f106130035761010080835404028352916020019161302e565b820191906000526020600020905b81548152906001019060200180831161301157829003601f168201915b505050505081526020019060010190612f96565b6026546040516001600160a01b03909116602482015260009060440160408051601f19818403018152918152602080830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f84fae760000000000000000000000000000000000000000000000000000000001790525490517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b15801561314557600080fd5b505af1158015613159573d6000803e3d6000fd5b505060255460265460405160609190911b6bffffffffffffffffffffffff19166020820152600193508392506001600160a01b03909116907f5322ffbbf9261ff1f8138247942d2b03b28717141ef0a0dd080fc4be9c4e78d39060340160408051601f19818403018152908290526131d29187906190a5565b60405180910390a3602080546026546040516001600160a01b0392831693635d40e1789361321a9316910160609190911b6bffffffffffffffffffffffff1916815260140190565b60405160208183030381529060405283856040518463ffffffff1660e01b815260040161324993929190619048565b600060405180830381600087803b15801561326357600080fd5b505af1158015613277573d6000803e3d6000fd5b505050505050565b60085460009060ff1615613297575060085460ff1690565b6040517f667f9d70000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d600482018190527f6661696c65640000000000000000000000000000000000000000000000000000602483015260009163667f9d7090604401602060405180830381865afa158015613328573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061334c9190618ee1565b1415905090565b6040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527f5d67094f000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b1580156133d857600080fd5b505af11580156133ec573d6000803e3d6000fd5b50506020805460265460405160609190911b6bffffffffffffffffffffffff1916928101929092526001600160a01b0316925063135390f9915060340160408051601f19818403018152908290526021547fffffffff0000000000000000000000000000000000000000000000000000000060e085901b168352611b19926000916001600160a01b031690600401619073565b6026546040516001600160a01b03909116602482015260009060440160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f84fae76000000000000000000000000000000000000000000000000000000000179052517fc31eb0e00000000000000000000000000000000000000000000000000000000081527f5d67094f000000000000000000000000000000000000000000000000000000006004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b15801561357957600080fd5b505af115801561358d573d6000803e3d6000fd5b50506020805460265460405160609190911b6bffffffffffffffffffffffff1916928101929092526001600160a01b03169250637993c1e0915060340160408051601f19818403018152908290526021547fffffffff0000000000000000000000000000000000000000000000000000000060e085901b168352611de6926000916001600160a01b0316908790600401618efa565b6026546040516001600160a01b03909116602482015260009060440160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f84fae76000000000000000000000000000000000000000000000000000000000179052517fc31eb0e00000000000000000000000000000000000000000000000000000000081527f19c08f49000000000000000000000000000000000000000000000000000000006004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b15801561371c57600080fd5b505af1158015613730573d6000803e3d6000fd5b50506020546040517f80bd3d030000000000000000000000000000000000000000000000000000000081526001600160a01b0390911692506380bd3d039150611de6906000906001908690600401618f87565b6021546025546040516370a0823160e01b81526001600160a01b03918216600482015260019260009216906370a0823190602401602060405180830381865afa1580156137d4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137f89190618ee1565b6021546040517fa9059cbb0000000000000000000000000000000000000000000000000000000081526101236004820152602481018390529192506001600160a01b03169063a9059cbb906044016020604051808303816000875af1158015613865573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138899190618ebf565b506027546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156138fc57600080fd5b505af1158015613910573d6000803e3d6000fd5b50506021546040517ff687d12a000000000000000000000000000000000000000000000000000000008152600a60048201526001600160a01b03909116925063f687d12a9150602401600060405180830381600087803b15801561397357600080fd5b505af1158015613987573d6000803e3d6000fd5b50506040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527ffe382aa7000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e091506024015b600060405180830381600087803b158015613a1157600080fd5b505af1158015613a25573d6000803e3d6000fd5b50506020805460265460405160609190911b6bffffffffffffffffffffffff1916928101929092526001600160a01b0316925063135390f9915060340160408051601f19818403018152908290526021547fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1683526132499287916001600160a01b031690600401619073565b6022546025546040516370a0823160e01b81526001600160a01b03918216600482015260019260009216906370a0823190602401602060405180830381865afa158015613b08573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b2c9190618ee1565b6022546020546040516370a0823160e01b81526001600160a01b0391821660048201529293506000929116906370a0823190602401602060405180830381865afa158015613b7e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613ba29190618ee1565b6027546025546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152929350163190600190737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015613c2057600080fd5b505af1158015613c34573d6000803e3d6000fd5b50506022546020546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152600060248201529116925063095ea7b391506044016020604051808303816000875af1158015613ca6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613cca9190618ebf565b507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b031663f48448146040518163ffffffff1660e01b8152600401600060405180830381600087803b158015613d2957600080fd5b505af1158015613d3d573d6000803e3d6000fd5b50506020546040517f441a3e7000000000000000000000000000000000000000000000000000000000815260048101899052602481018590526001600160a01b03909116925063441a3e709150604401600060405180830381600087803b158015613da757600080fd5b505af1158015613dbb573d6000803e3d6000fd5b50506022546025546040516370a0823160e01b81526001600160a01b03918216600482015260009450911691506370a0823190602401602060405180830381865afa158015613e0e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613e329190618ee1565b9050613e3e8582614814565b6022546020546040516370a0823160e01b81526001600160a01b03918216600482015260009291909116906370a0823190602401602060405180830381865afa158015613e8f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613eb39190618ee1565b9050613ebf8582614814565b602754612a269085906001600160a01b031631614814565b60606015805480602002602001604051908101604052809291908181526020018280548015611a25576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311611a07575050505050905090565b6022546025546040516370a0823160e01b81526001600160a01b03918216600482015260019260009216906370a0823190602401602060405180830381865afa158015613f88573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613fac9190618ee1565b6022546020546040516370a0823160e01b81526001600160a01b0391821660048201529293506000929116906370a0823190602401602060405180830381865afa158015613ffe573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906140229190618ee1565b6027546020546040517f81bad6f30000000000000000000000000000000000000000000000000000000081526001600482018190526024820181905260448201819052606482018190526001600160a01b0392831660848301529394509116319190737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b1580156140bd57600080fd5b505af11580156140d1573d6000803e3d6000fd5b505060255460275460405160609190911b6bffffffffffffffffffffffff191660208201528493506001600160a01b0390911691507fde19dbe881cc0aeeb6e73ce19ac7b5ca695e6be8a076e3eb42292005a7fec1b59060340160408051601f198184030181529082905260225461415b926001600160a01b03909116908b9060009081906190ca565b60405180910390a36020546040517f441a3e7000000000000000000000000000000000000000000000000000000000815260048101879052602481018390526001600160a01b039091169063441a3e7090604401600060405180830381600087803b1580156141c957600080fd5b505af11580156141dd573d6000803e3d6000fd5b50506022546025546040516370a0823160e01b81526001600160a01b03918216600482015260009450911691506370a0823190602401602060405180830381865afa158015614230573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906142549190618ee1565b9050614264611530600187618fd5565b6022546020546040516370a0823160e01b81526001600160a01b03918216600482015260009291909116906370a0823190602401602060405180830381865afa1580156142b5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906142d99190618ee1565b90506142e58582614814565b612a266115c5856001618fe8565b6021546025546040516370a0823160e01b81526001600160a01b03918216600482015260019260009216906370a0823190602401602060405180830381865afa158015614344573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906143689190618ee1565b6020546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b1580156143f957600080fd5b505af115801561440d573d6000803e3d6000fd5b505060255460265460405160609190911b6bffffffffffffffffffffffff19166020820152600093506001600160a01b0390911691507fde19dbe881cc0aeeb6e73ce19ac7b5ca695e6be8a076e3eb42292005a7fec1b59060340160408051601f198184030181528282526021547f4d8943bb000000000000000000000000000000000000000000000000000000008452915190926001600160a01b039092169188916000918491634d8943bb916004808201926020929091908290030181865afa1580156144e0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906145049190618ee1565b6040516145159594939291906190ca565b60405180910390a3602080546026546040516001600160a01b039283169363135390f99361455d9316910160609190911b6bffffffffffffffffffffffff1916815260140190565b60408051601f19818403018152908290526021547fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1683526145b29287916001600160a01b031690600401619073565b600060405180830381600087803b1580156145cc57600080fd5b505af11580156145e0573d6000803e3d6000fd5b50506021546025546040516370a0823160e01b81526001600160a01b03918216600482015260009450911691506370a0823190602401602060405180830381865afa158015614633573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906146579190618ee1565b90506128246115308484618fd5565b6021546025546040516370a0823160e01b81526001600160a01b03918216600482015260029260009216906370a0823190602401602060405180830381865afa1580156146b7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906146db9190618ee1565b6021549091506001600160a01b031663a9059cbb6101236146fd600185618fd5565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303816000875af1158015614760573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906147849190618ebf565b506040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527ffe382aa7000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e0906024016139f7565b60006147ff61893a565b61480a848483614893565b9150505b92915050565b6040517f98296c540000000000000000000000000000000000000000000000000000000081526004810183905260248101829052737109709ecfa91a80626ff3989d68f67f5b1dd12d906398296c549060440160006040518083038186803b15801561487f57600080fd5b505afa158015613277573d6000803e3d6000fd5b6000806148a0858461490e565b90506149036040518060400160405280601d81526020017f4552433139363750726f78792e736f6c3a4552433139363750726f787900000081525082866040516020016148ee92919061911b565b6040516020818303038152906040528561491a565b9150505b9392505050565b60006149078383614948565b60c0810151516000901561493e5761493784848460c00151614963565b9050614907565b6149378484614b09565b60006149548383614bf4565b6149078383602001518461491a565b60008061496e614c04565b9050600061497c8683614cd7565b90506000614993826060015183602001518561517d565b905060006149a38383898961538f565b905060006149b08261620c565b602081015181519192509060030b15614a23578982604001516040516020016149da92919061913d565b60408051601f19818403018152908290527f08c379a0000000000000000000000000000000000000000000000000000000008252614a1a916004016191be565b60405180910390fd5b6000614a666040518060400160405280601581526020017f4465706c6f79656420746f20616464726573733a2000000000000000000000008152508360016163db565b6040517fc6ce059d000000000000000000000000000000000000000000000000000000008152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c6ce059d90614ab99084906004016191be565b602060405180830381865afa158015614ad6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614afa9190618da1565b9b9a5050505050505050505050565b6040517f8d1cc9250000000000000000000000000000000000000000000000000000000081526000908190737109709ecfa91a80626ff3989d68f67f5b1dd12d90638d1cc92590614b5e9087906004016191be565b600060405180830381865afa158015614b7b573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052614ba391908101906192b9565b90506000614bd18285604051602001614bbd9291906192ee565b6040516020818303038152906040526165db565b90506001600160a01b03811661480a5784846040516020016149da92919061931d565b614c00828260006165ee565b5050565b604080518082018252600381527f6f75740000000000000000000000000000000000000000000000000000000000602082015290517fd145736c000000000000000000000000000000000000000000000000000000008152606091737109709ecfa91a80626ff3989d68f67f5b1dd12d91829063d145736c90614c8b9084906004016193c8565b600060405180830381865afa158015614ca8573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052614cd0919081019061940f565b9250505090565b614d096040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b6000737109709ecfa91a80626ff3989d68f67f5b1dd12d9050614d546040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b614d5d856166f1565b60208201526000614d6d86616ad6565b90506000836001600160a01b031663d930a0e66040518163ffffffff1660e01b8152600401600060405180830381865afa158015614daf573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052614dd7919081019061940f565b86838560200151604051602001614df19493929190619458565b60408051601f19818403018152908290527f60f9bb1100000000000000000000000000000000000000000000000000000000825291506000906001600160a01b038616906360f9bb1190614e499085906004016191be565b600060405180830381865afa158015614e66573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052614e8e919081019061940f565b6040517fdb4235f60000000000000000000000000000000000000000000000000000000081529091506001600160a01b0386169063db4235f690614ed690849060040161955c565b602060405180830381865afa158015614ef3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614f179190618ebf565b614f2c57816040516020016149da91906195ae565b6040517f49c4fac80000000000000000000000000000000000000000000000000000000081526001600160a01b038616906349c4fac890614f71908490600401619640565b600060405180830381865afa158015614f8e573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052614fb6919081019061940f565b84526040517fdb4235f60000000000000000000000000000000000000000000000000000000081526001600160a01b0386169063db4235f690614ffd908490600401619692565b602060405180830381865afa15801561501a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061503e9190618ebf565b156150d3576040517f49c4fac80000000000000000000000000000000000000000000000000000000081526001600160a01b038616906349c4fac890615088908490600401619692565b600060405180830381865afa1580156150a5573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526150cd919081019061940f565b60408501525b846001600160a01b03166349c4fac88286600001516040516020016150f891906196e4565b6040516020818303038152906040526040518363ffffffff1660e01b81526004016151249291906190a5565b600060405180830381865afa158015615141573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052615169919081019061940f565b606085015250608083015250949350505050565b60408051600480825260a0820190925260609160009190816020015b60608152602001906001900390816151995790505090506040518060400160405280600481526020017f6772657000000000000000000000000000000000000000000000000000000000815250816000815181106151f9576151f9619750565b60200260200101819052506040518060400160405280600381526020017f2d726c00000000000000000000000000000000000000000000000000000000008152508160018151811061524d5761524d619750565b602002602001018190525084604051602001615269919061977f565b6040516020818303038152906040528160028151811061528b5761528b619750565b6020026020010181905250826040516020016152a791906197eb565b604051602081830303815290604052816003815181106152c9576152c9619750565b602002602001018190525060006152df8261620c565b602080820151604080518082018252600581527f2e6a736f6e00000000000000000000000000000000000000000000000000000081850190815282518084018452600080825290860152825180840190935290518252928101929092529192506153709060408051808201825260008082526020918201528151808301909252845182528085019082015290616d59565b61538557856040516020016149da919061982c565b9695505050505050565b60a0810151604080518082018252600080825260209182015281518083019092528251808352928101910152606090737109709ecfa91a80626ff3989d68f67f5b1dd12d90156153df565b511590565b6155535782602001511561549b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605860248201527f54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f742060448201527f62652075736564207768656e207468652060736b6970566572696679536f757260648201527f6365436f646560206f7074696f6e206973206074727565600000000000000000608482015260a401614a1a565b8260c0015115615553576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605360248201527f54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f742060448201527f62652075736564207768656e207468652060736b69704c6963656e736554797060648201527f6560206f7074696f6e2069732060747275656000000000000000000000000000608482015260a401614a1a565b6040805160ff8082526120008201909252600091816020015b606081526020019060019003908161556c57905050905060006040518060400160405280600381526020017f6e707800000000000000000000000000000000000000000000000000000000008152508282806155c7906198bd565b935060ff16815181106155dc576155dc619750565b60200260200101819052506040518060400160405280600d81526020017f302e302e312d616c7068612e370000000000000000000000000000000000000081525060405160200161562d91906198dc565b604051602081830303815290604052828280615648906198bd565b935060ff168151811061565d5761565d619750565b60200260200101819052506040518060400160405280600681526020017f6465706c6f7900000000000000000000000000000000000000000000000000008152508282806156aa906198bd565b935060ff16815181106156bf576156bf619750565b60200260200101819052506040518060400160405280600e81526020017f2d2d636f6e74726163744e616d6500000000000000000000000000000000000081525082828061570c906198bd565b935060ff168151811061572157615721619750565b6020026020010181905250876020015182828061573d906198bd565b935060ff168151811061575257615752619750565b60200260200101819052506040518060400160405280600e81526020017f2d2d636f6e74726163745061746800000000000000000000000000000000000081525082828061579f906198bd565b935060ff16815181106157b4576157b4619750565b6020908102919091010152875182826157cc816198bd565b935060ff16815181106157e1576157e1619750565b60200260200101819052506040518060400160405280600981526020017f2d2d636861696e4964000000000000000000000000000000000000000000000081525082828061582e906198bd565b935060ff168151811061584357615843619750565b602002602001018190525061585746616dba565b8282615862816198bd565b935060ff168151811061587757615877619750565b60200260200101819052506040518060400160405280600f81526020017f2d2d6275696c64496e666f46696c6500000000000000000000000000000000008152508282806158c4906198bd565b935060ff16815181106158d9576158d9619750565b6020026020010181905250868282806158f1906198bd565b935060ff168151811061590657615906619750565b6020908102919091010152855115615a2d5760408051808201909152601581527f2d2d636f6e7374727563746f7242797465636f6465000000000000000000000060208201528282615957816198bd565b935060ff168151811061596c5761596c619750565b60209081029190910101526040517f71aad10d0000000000000000000000000000000000000000000000000000000081526001600160a01b038416906371aad10d906159bc9089906004016191be565b600060405180830381865afa1580156159d9573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052615a01919081019061940f565b8282615a0c816198bd565b935060ff1681518110615a2157615a21619750565b60200260200101819052505b846020015115615afd5760408051808201909152601281527f2d2d766572696679536f75726365436f6465000000000000000000000000000060208201528282615a76816198bd565b935060ff1681518110615a8b57615a8b619750565b60200260200101819052506040518060400160405280600581526020017f66616c7365000000000000000000000000000000000000000000000000000000815250828280615ad8906198bd565b935060ff1681518110615aed57615aed619750565b6020026020010181905250615cc4565b615b356153da8660a0015160408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b615bc85760408051808201909152600d81527f2d2d6c6963656e7365547970650000000000000000000000000000000000000060208201528282615b78816198bd565b935060ff1681518110615b8d57615b8d619750565b60200260200101819052508460a00151604051602001615bad919061977f565b604051602081830303815290604052828280615ad8906198bd565b8460c00151158015615c0b575060408089015181518083018352600080825260209182015282518084019093528151835290810190820152615c0990511590565b155b15615cc45760408051808201909152600d81527f2d2d6c6963656e7365547970650000000000000000000000000000000000000060208201528282615c4f816198bd565b935060ff1681518110615c6457615c64619750565b6020026020010181905250615c7888616e5a565b604051602001615c88919061977f565b604051602081830303815290604052828280615ca3906198bd565b935060ff1681518110615cb857615cb8619750565b60200260200101819052505b60408086015181518083018352600080825260209182015282518084019093528151835290810190820152615cf890511590565b615d8d5760408051808201909152600b81527f2d2d72656c61796572496400000000000000000000000000000000000000000060208201528282615d3b816198bd565b935060ff1681518110615d5057615d50619750565b60200260200101819052508460400151828280615d6c906198bd565b935060ff1681518110615d8157615d81619750565b60200260200101819052505b606085015115615eae5760408051808201909152600681527f2d2d73616c74000000000000000000000000000000000000000000000000000060208201528282615dd6816198bd565b935060ff1681518110615deb57615deb619750565b602090810291909101015260608501516040517fb11a19e800000000000000000000000000000000000000000000000000000000815260048101919091526001600160a01b0384169063b11a19e890602401600060405180830381865afa158015615e5a573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052615e82919081019061940f565b8282615e8d816198bd565b935060ff1681518110615ea257615ea2619750565b60200260200101819052505b60e08501515115615f555760408051808201909152600a81527f2d2d6761734c696d69740000000000000000000000000000000000000000000060208201528282615ef8816198bd565b935060ff1681518110615f0d57615f0d619750565b6020026020010181905250615f298560e0015160000151616dba565b8282615f34816198bd565b935060ff1681518110615f4957615f49619750565b60200260200101819052505b60e08501516020015115615fff5760408051808201909152600a81527f2d2d67617350726963650000000000000000000000000000000000000000000060208201528282615fa2816198bd565b935060ff1681518110615fb757615fb7619750565b6020026020010181905250615fd38560e0015160200151616dba565b8282615fde816198bd565b935060ff1681518110615ff357615ff3619750565b60200260200101819052505b60e085015160400151156160a95760408051808201909152600e81527f2d2d6d61784665655065724761730000000000000000000000000000000000006020820152828261604c816198bd565b935060ff168151811061606157616061619750565b602002602001018190525061607d8560e0015160400151616dba565b8282616088816198bd565b935060ff168151811061609d5761609d619750565b60200260200101819052505b60e085015160600151156161535760408051808201909152601681527f2d2d6d61785072696f7269747946656550657247617300000000000000000000602082015282826160f6816198bd565b935060ff168151811061610b5761610b619750565b60200260200101819052506161278560e0015160600151616dba565b8282616132816198bd565b935060ff168151811061614757616147619750565b60200260200101819052505b60008160ff1667ffffffffffffffff811115616171576161716191d1565b6040519080825280602002602001820160405280156161a457816020015b606081526020019060019003908161618f5790505b50905060005b8260ff168160ff1610156161fd57838160ff16815181106161cd576161cd619750565b6020026020010151828260ff16815181106161ea576161ea619750565b60209081029190910101526001016161aa565b5093505050505b949350505050565b6162336040518060600160405280600060030b815260200160608152602001606081525090565b60408051808201825260048082527f6261736800000000000000000000000000000000000000000000000000000000602083015291517fd145736c000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d92600091849163d145736c916162b991869101619947565b600060405180830381865afa1580156162d6573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526162fe919081019061940f565b9050600061630c8683617949565b90506000846001600160a01b031663f45c1ce7836040518263ffffffff1660e01b815260040161633c9190618c93565b6000604051808303816000875af115801561635b573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052616383919081019061998e565b805190915060030b1580159061639c5750602081015151155b80156163ab5750604081015151155b1561538557816000815181106163c3576163c3619750565b60200260200101516040516020016149da9190619a44565b606060006164108560408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6040805180820182526000808252602091820152815180830190925286518252808701908201529091506164479082905b90617a9e565b156165a45760006164c4826164be846164b861648a8a60408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6040805180820182526000808252602091820152815180830190925282518252918201519181019190915290565b90617ac5565b90617b27565b604080518082018252600181527f0a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152909150616528908290617a9e565b1561659257604080518082018252600181527f0a000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261658f905b8290617bac565b90505b61659b81617bd2565b92505050614907565b82156165bd5784846040516020016149da929190619c30565b5050604080516020810190915260008152614907565b509392505050565b6000808251602084016000f09392505050565b8160a00151156165fd57505050565b600061660a848484617c3b565b905060006166178261620c565b602081015181519192509060030b1580156166b35750604080518082018252600781527f5355434345535300000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526166b390604080518082018252600080825260209182015281518083019092528451825280850190820152616441565b156166c057505050505050565b604082015151156166e05781604001516040516020016149da9190619cd7565b806040516020016149da9190619d35565b606060006167268360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600481527f2e736f6c000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015290915061678b905b8290616d59565b156167fa57604080518082018252600481527f2e736f6c0000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152614907906167f59083906181d6565b617bd2565b604080518082018252600181527f3a000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261685c905b8290618260565b60010361692957604080518082018252600181527f3a00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526168c290616588565b50604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152614907906167f5905b8390617bac565b604080518082018252600581527f2e6a736f6e0000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261698890616784565b15616abf57604080518082018252600181527f2f000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201819052845180860190955292518452830152906169f09083906182fa565b905060008160018351616a039190618fd5565b81518110616a1357616a13619750565b60200260200101519050616ab66167f5616a896040518060400160405280600581526020017f2e6a736f6e00000000000000000000000000000000000000000000000000000081525060408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600080825260209182015281518083019092528551825280860190820152906181d6565b95945050505050565b826040516020016149da9190619da0565b50919050565b60606000616b0b8360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600481527f2e736f6c0000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152909150616b6d90616784565b15616b7b5761490781617bd2565b604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616bda90616855565b600103616c4457604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152614907906167f590616922565b604080518082018252600581527f2e6a736f6e00000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616ca390616784565b15616abf57604080518082018252600181527f2f00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820181905284518086019095529251845283015290616d0b9083906182fa565b9050600181511115616d47578060028251616d269190618fd5565b81518110616d3657616d36619750565b602002602001015192505050919050565b50826040516020016149da9190619da0565b805182516000911115616d6e5750600061480e565b81518351602085015160009291616d8491618fe8565b616d8e9190618fd5565b905082602001518103616da557600191505061480e565b82516020840151819020912014905092915050565b60606000616dc78361839f565b600101905060008167ffffffffffffffff811115616de757616de76191d1565b6040519080825280601f01601f191660200182016040528015616e11576020820181803683370190505b5090508181016020015b600019017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a8504945084616e1b57509392505050565b604081810151815180830183526000808252602091820181905283518085018552835181529282018383015283518085018552600a81527f554e4c4943454e5345440000000000000000000000000000000000000000000081840190815285518087018752838152840192909252845180860190955251845290830152606091616ee6905b8290618481565b15616f2657505060408051808201909152600481527f4e6f6e65000000000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600981527f556e6c6963656e7365000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616f8590616edf565b15616fc557505060408051808201909152600981527f556e6c6963656e736500000000000000000000000000000000000000000000006020820152919050565b604080518082018252600381527f4d495400000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261702490616edf565b1561706457505060408051808201909152600381527f4d495400000000000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f47504c2d322e302d6f6e6c790000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526170c390616edf565b806171285750604080518082018252601081527f47504c2d322e302d6f722d6c61746572000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261712890616edf565b1561716857505060408051808201909152600981527f474e552047504c763200000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f47504c2d332e302d6f6e6c790000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526171c790616edf565b8061722c5750604080518082018252601081527f47504c2d332e302d6f722d6c61746572000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261722c90616edf565b1561726c57505060408051808201909152600981527f474e552047504c763300000000000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4c47504c2d322e312d6f6e6c7900000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526172cb90616edf565b806173305750604080518082018252601181527f4c47504c2d322e312d6f722d6c617465720000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261733090616edf565b1561737057505060408051808201909152600c81527f474e55204c47504c76322e3100000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4c47504c2d332e302d6f6e6c7900000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526173cf90616edf565b806174345750604080518082018252601181527f4c47504c2d332e302d6f722d6c617465720000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261743490616edf565b1561747457505060408051808201909152600a81527f474e55204c47504c7633000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f4253442d322d436c617573650000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526174d390616edf565b1561751357505060408051808201909152600c81527f4253442d322d436c6175736500000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f4253442d332d436c6175736500000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261757290616edf565b156175b257505060408051808201909152600c81527f4253442d332d436c6175736500000000000000000000000000000000000000006020820152919050565b604080518082018252600781527f4d504c2d322e30000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261761190616edf565b1561765157505060408051808201909152600781527f4d504c2d322e30000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600781527f4f534c2d332e3000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526176b090616edf565b156176f057505060408051808201909152600781527f4f534c2d332e30000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600a81527f4170616368652d322e30000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261774f90616edf565b1561778f57505060408051808201909152600a81527f4170616368652d322e30000000000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4147504c2d332e302d6f6e6c7900000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526177ee90616edf565b806178535750604080518082018252601181527f4147504c2d332e302d6f722d6c617465720000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261785390616edf565b1561789357505060408051808201909152600a81527f474e55204147504c7633000000000000000000000000000000000000000000006020820152919050565b604080518082018252600881527f4255534c2d312e31000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526178f290616edf565b1561793257505060408051808201909152600781527f42534c20312e31000000000000000000000000000000000000000000000000006020820152919050565b604080840151845191516149da9290602001619e7e565b60608060005b84518110156179d4578185828151811061796b5761796b619750565b60200260200101516040516020016179849291906192ee565b6040516020818303038152906040529150600185516179a39190618fd5565b81146179cc57816040516020016179ba9190619fe7565b60405160208183030381529060405291505b60010161794f565b5060408051600380825260808201909252600091816020015b60608152602001906001900390816179ed5790505090508381600081518110617a1857617a18619750565b60200260200101819052506040518060400160405280600281526020017f2d6300000000000000000000000000000000000000000000000000000000000081525081600181518110617a6c57617a6c619750565b60200260200101819052508181600281518110617a8b57617a8b619750565b6020908102919091010152949350505050565b6020808301518351835192840151600093617abc9291849190618495565b14159392505050565b60408051808201909152600080825260208201526000617af784600001518560200151856000015186602001516185a6565b9050836020015181617b099190618fd5565b84518590617b18908390618fd5565b90525060208401525090919050565b6040805180820190915260008082526020820152815183511015617b4c57508161480e565b6020808301519084015160019114617b735750815160208481015190840151829020919020145b8015617ba457825184518590617b8a908390618fd5565b9052508251602085018051617ba0908390618fe8565b9052505b509192915050565b6040805180820190915260008082526020820152617bcb8383836186c6565b5092915050565b60606000826000015167ffffffffffffffff811115617bf357617bf36191d1565b6040519080825280601f01601f191660200182016040528015617c1d576020820181803683370190505b5090506000602082019050617bcb8185602001518660000151618771565b60606000617c47614c04565b6040805160ff808252612000820190925291925060009190816020015b6060815260200190600190039081617c6457905050905060006040518060400160405280600381526020017f6e70780000000000000000000000000000000000000000000000000000000000815250828280617cbf906198bd565b935060ff1681518110617cd457617cd4619750565b60200260200101819052506040518060400160405280600781526020017f5e312e33322e3300000000000000000000000000000000000000000000000000815250604051602001617d25919061a028565b604051602081830303815290604052828280617d40906198bd565b935060ff1681518110617d5557617d55619750565b60200260200101819052506040518060400160405280600881526020017f76616c6964617465000000000000000000000000000000000000000000000000815250828280617da2906198bd565b935060ff1681518110617db757617db7619750565b602002602001018190525082604051602001617dd391906197eb565b604051602081830303815290604052828280617dee906198bd565b935060ff1681518110617e0357617e03619750565b60200260200101819052506040518060400160405280600a81526020017f2d2d636f6e747261637400000000000000000000000000000000000000000000815250828280617e50906198bd565b935060ff1681518110617e6557617e65619750565b6020026020010181905250617e7a87846187eb565b8282617e85816198bd565b935060ff1681518110617e9a57617e9a619750565b602090810291909101015285515115617f465760408051808201909152600b81527f2d2d7265666572656e636500000000000000000000000000000000000000000060208201528282617eec816198bd565b935060ff1681518110617f0157617f01619750565b6020026020010181905250617f1a8660000151846187eb565b8282617f25816198bd565b935060ff1681518110617f3a57617f3a619750565b60200260200101819052505b856080015115617fb45760408051808201909152601881527f2d2d756e73616665536b697053746f72616765436865636b000000000000000060208201528282617f8f816198bd565b935060ff1681518110617fa457617fa4619750565b602002602001018190525061801a565b841561801a5760408051808201909152601281527f2d2d726571756972655265666572656e6365000000000000000000000000000060208201528282617ff9816198bd565b935060ff168151811061800e5761800e619750565b60200260200101819052505b604086015151156180b65760408051808201909152600d81527f2d2d756e73616665416c6c6f770000000000000000000000000000000000000060208201528282618064816198bd565b935060ff168151811061807957618079619750565b60200260200101819052508560400151828280618095906198bd565b935060ff16815181106180aa576180aa619750565b60200260200101819052505b8560600151156181205760408051808201909152601481527f2d2d756e73616665416c6c6f7752656e616d6573000000000000000000000000602082015282826180ff816198bd565b935060ff168151811061811457618114619750565b60200260200101819052505b60008160ff1667ffffffffffffffff81111561813e5761813e6191d1565b60405190808252806020026020018201604052801561817157816020015b606081526020019060019003908161815c5790505b50905060005b8260ff168160ff1610156181ca57838160ff168151811061819a5761819a619750565b6020026020010151828260ff16815181106181b7576181b7619750565b6020908102919091010152600101618177565b50979650505050505050565b60408051808201909152600080825260208201528151835110156181fb57508161480e565b8151835160208501516000929161821191618fe8565b61821b9190618fd5565b6020840151909150600190821461823c575082516020840151819020908220145b801561825757835185518690618253908390618fd5565b9052505b50929392505050565b600080826000015161828485600001518660200151866000015187602001516185a6565b61828e9190618fe8565b90505b835160208501516182a29190618fe8565b8111617bcb57816182b28161a06d565b92505082600001516182e98560200151836182cd9190618fd5565b86516182d99190618fd5565b83866000015187602001516185a6565b6182f39190618fe8565b9050618291565b606060006183088484618260565b618313906001618fe8565b67ffffffffffffffff81111561832b5761832b6191d1565b60405190808252806020026020018201604052801561835e57816020015b60608152602001906001900390816183495790505b50905060005b81518110156165d35761837a6167f58686617bac565b82828151811061838c5761838c619750565b6020908102919091010152600101618364565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f01000000000000000083106183e8577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310618414576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc10000831061843257662386f26fc10000830492506010015b6305f5e100831061844a576305f5e100830492506008015b612710831061845e57612710830492506004015b60648310618470576064830492506002015b600a831061480e5760010192915050565b600061848d838361882b565b159392505050565b60008085841161859c576020841161854857600084156184e05760016184bc866020618fd5565b6184c790600861a087565b6184d290600261a185565b6184dc9190618fd5565b1990505b83518116856184ef8989618fe8565b6184f99190618fd5565b805190935082165b8181146185335787841161851b5787945050505050616204565b836185258161a191565b945050828451169050618501565b61853d8785618fe8565b945050505050616204565b8383206185558588618fd5565b61855f9087618fe8565b91505b85821061859a578482208082036185875761857d8684618fe8565b9350505050616204565b618592600184618fd5565b925050618562565b505b5092949350505050565b600083818685116186b1576020851161866057600085156185f25760016185ce876020618fd5565b6185d990600861a087565b6185e490600261a185565b6185ee9190618fd5565b1990505b845181166000876186038b8b618fe8565b61860d9190618fd5565b855190915083165b8281146186525781861061863a5761862d8b8b618fe8565b9650505050505050616204565b856186448161a06d565b965050838651169050618615565b859650505050505050616204565b508383206000905b6186728689618fd5565b82116186af5785832080820361868e5783945050505050616204565b618699600185618fe8565b93505081806186a79061a06d565b925050618668565b505b6186bb8787618fe8565b979650505050505050565b604080518082019091526000808252602082015260006186f885600001518660200151866000015187602001516185a6565b6020808701805191860191909152519091506187149082618fd5565b8352845160208601516187279190618fe8565b81036187365760008552618768565b835183516187449190618fe8565b85518690618753908390618fd5565b90525083516187629082618fe8565b60208601525b50909392505050565b602081106187a95781518352618788602084618fe8565b9250618795602083618fe8565b91506187a2602082618fd5565b9050618771565b60001981156187d85760016187bf836020618fd5565b6187cb9061010061a185565b6187d59190618fd5565b90505b9151835183169219169190911790915250565b606060006187f98484614cd7565b80516020808301516040519394506188139390910161a1a8565b60405160208183030381529060405291505092915050565b815181516000919081111561883e575081515b6020808501519084015160005b838110156188f757825182518082146188c75760001960208710156188a657600184618878896020618fd5565b6188829190618fe8565b61888d90600861a087565b61889890600261a185565b6188a29190618fd5565b1990505b81811683821681810391146188c457975061480e9650505050505050565b50505b6188d2602086618fe8565b94506188df602085618fe8565b935050506020816188f09190618fe8565b905061884b565b5084518651615385919061a200565b610b678061a22183390190565b61053f8061ad8883390190565b61106f8061b2c783390190565b611bb98061c33683390190565b6040518060e0016040528060608152602001606081526020016060815260200160001515815260200160001515815260200160001515815260200161897d618982565b905290565b6040518061010001604052806000151581526020016000151581526020016060815260200160008019168152602001606081526020016060815260200160001515815260200161897d6040518060800160405280600081526020016000815260200160008152602001600081525090565b602080825282518282018190526000918401906040840190835b81811015618a345783516001600160a01b0316835260209384019390920191600101618a0d565b509095945050505050565b60005b83811015618a5a578181015183820152602001618a42565b50506000910152565b60008151808452618a7b816020860160208601618a3f565b601f01601f19169290920160200192915050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015618b8b577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452815180516001600160a01b03168652602090810151604082880181905281519088018190529101906060600582901b88018101919088019060005b81811015618b71577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa08a8503018352618b5b848651618a63565b6020958601959094509290920191600101618b21565b509197505050602094850194929092019150600101618ab7565b50929695505050505050565b600081518084526020840193506020830160005b82811015618beb5781517fffffffff0000000000000000000000000000000000000000000000000000000016865260209586019590910190600101618bab565b5093949350505050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015618b8b577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08786030184528151805160408752618c616040880182618a63565b9050602082015191508681036020880152618c7c8183618b97565b965050506020938401939190910190600101618c1d565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015618b8b577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452618cf5858351618a63565b94506020938401939190910190600101618cbb565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015618b8b577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc087860301845281516001600160a01b0381511686526020810151905060406020870152618d8b6040870182618b97565b9550506020938401939190910190600101618d32565b600060208284031215618db357600080fd5b81516001600160a01b038116811461490757600080fd5b610100815260056101008201527f544f4b454e000000000000000000000000000000000000000000000000000000610120820152610140602082015260036101408201527f544b4e000000000000000000000000000000000000000000000000000000000061016082015260006101808201905060ff8816604083015286606083015260038610618e84577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b8560808301528460a0830152618ea560c08301856001600160a01b03169052565b6001600160a01b03831660e0830152979650505050505050565b600060208284031215618ed157600080fd5b8151801515811461490757600080fd5b600060208284031215618ef357600080fd5b5051919050565b608081526000618f0d6080830187618a63565b8560208401526001600160a01b038516604084015282810360608401526186bb8185618a63565b60c081526000618f4760c0830189618a63565b6001600160a01b038816602084015286604084015285606084015284608084015282810360a0840152618f7a8185618a63565b9998505050505050505050565b838152826020820152606060408201526000616ab66060830184618a63565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8181038181111561480e5761480e618fa6565b8082018082111561480e5761480e618fa6565b600181811c9082168061900f57607f821691505b602082108103616ad0577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60608152600061905b6060830186618a63565b84602084015282810360408401526153858185618a63565b6060815260006190866060830186618a63565b90508360208301526001600160a01b0383166040830152949350505050565b6040815260006190b86040830185618a63565b82810360208401526149038185618a63565b60c0815260006190dd60c0830188618a63565b6001600160a01b038716602084015285604084015284606084015283608084015282810360a084015260008152602081019150509695505050505050565b6001600160a01b03831681526040602082015260006162046040830184618a63565b7f4661696c656420746f206465706c6f7920636f6e74726163742000000000000081526000835161917581601a850160208801618a3f565b7f3a20000000000000000000000000000000000000000000000000000000000000601a9184019182015283516191b281601c840160208801618a3f565b01601c01949350505050565b6020815260006149076020830184618a63565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040516060810167ffffffffffffffff81118282101715619223576192236191d1565b60405290565b60008067ffffffffffffffff841115619244576192446191d1565b50604051601f19601f85018116603f0116810181811067ffffffffffffffff82111715619273576192736191d1565b60405283815290508082840185101561928b57600080fd5b6165d3846020830185618a3f565b600082601f8301126192aa57600080fd5b61490783835160208501619229565b6000602082840312156192cb57600080fd5b815167ffffffffffffffff8111156192e257600080fd5b61480a84828501619299565b60008351619300818460208801618a3f565b835190830190619314818360208801618a3f565b01949350505050565b7f4661696c656420746f206465706c6f7920636f6e74726163742000000000000081526000835161935581601a850160208801618a3f565b7f207573696e6720636f6e7374727563746f722064617461202200000000000000601a918401918201528351619392816033840160208801618a3f565b7f220000000000000000000000000000000000000000000000000000000000000060339290910191820152603401949350505050565b60408152600b60408201527f464f554e4452595f4f555400000000000000000000000000000000000000000060608201526080602082015260006149076080830184618a63565b60006020828403121561942157600080fd5b815167ffffffffffffffff81111561943857600080fd5b8201601f8101841361944957600080fd5b61480a84825160208401619229565b6000855161946a818460208a01618a3f565b7f2f0000000000000000000000000000000000000000000000000000000000000090830190815285516194a4816001840160208a01618a3f565b7f2f000000000000000000000000000000000000000000000000000000000000006001929091019182015284516194e2816002840160208901618a3f565b6001818301019150507f2f0000000000000000000000000000000000000000000000000000000000000060018201528351619524816002840160208801618a3f565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600292909101918201526007019695505050505050565b60408152600061956f6040830184618a63565b8281036020840152600481527f2e6173740000000000000000000000000000000000000000000000000000000060208201526040810191505092915050565b7f436f756c64206e6f742066696e642041535420696e20617274696661637420008152600082516195e681601f850160208701618a3f565b7f2e205365742060617374203d20747275656020696e20666f756e6472792e746f601f9390910192830152507f6d6c000000000000000000000000000000000000000000000000000000000000603f820152604101919050565b6040815260006196536040830184618a63565b8281036020840152601181527f2e6173742e6162736f6c7574655061746800000000000000000000000000000060208201526040810191505092915050565b6040815260006196a56040830184618a63565b8281036020840152600c81527f2e6173742e6c6963656e7365000000000000000000000000000000000000000060208201526040810191505092915050565b7f2e6d657461646174612e736f75726365732e5b2700000000000000000000000081526000825161971c816014850160208701618a3f565b7f275d2e6b656363616b32353600000000000000000000000000000000000000006014939091019283015250602001919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f22000000000000000000000000000000000000000000000000000000000000008152600082516197b7816001850160208701618a3f565b7f22000000000000000000000000000000000000000000000000000000000000006001939091019283015250600201919050565b600082516197fd818460208701618a3f565b7f2f6275696c642d696e666f000000000000000000000000000000000000000000920191825250600b01919050565b7f436f756c64206e6f742066696e64206275696c642d696e666f2066696c65207781527f697468206d61746368696e6720736f7572636520636f6465206861736820666f60208201527f7220636f6e7472616374200000000000000000000000000000000000000000006040820152600082516198b081604b850160208701618a3f565b91909101604b0192915050565b600060ff821660ff81036198d3576198d3618fa6565b60010192915050565b7f406f70656e7a657070656c696e2f646566656e6465722d6465706c6f792d636c81527f69656e742d636c6940000000000000000000000000000000000000000000000060208201526000825161993a816029850160208701618a3f565b9190910160290192915050565b60408152601660408201527f4f50454e5a455050454c494e5f424153485f504154480000000000000000000060608201526080602082015260006149076080830184618a63565b6000602082840312156199a057600080fd5b815167ffffffffffffffff8111156199b757600080fd5b8201606081850312156199c957600080fd5b6199d1619200565b81518060030b81146199e257600080fd5b8152602082015167ffffffffffffffff8111156199fe57600080fd5b619a0a86828501619299565b602083015250604082015167ffffffffffffffff811115619a2a57600080fd5b619a3686828501619299565b604083015250949350505050565b7f4661696c656420746f2072756e206261736820636f6d6d616e6420776974682081527f2200000000000000000000000000000000000000000000000000000000000000602082015260008251619aa2816021850160208701618a3f565b7f222e20496620796f7520617265207573696e672057696e646f77732c2073657460219390910192830152507f20746865204f50454e5a455050454c494e5f424153485f5041544820656e766960418201527f726f6e6d656e74207661726961626c6520746f207468652066756c6c7920717560618201527f616c69666965642070617468206f66207468652062617368206578656375746160818201527f626c652e20466f72206578616d706c652c20696620796f75206172652075736960a18201527f6e672047697420666f722057696e646f77732c206164642074686520666f6c6c60c18201527f6f77696e67206c696e6520696e20746865202e656e762066696c65206f66207960e18201527f6f75722070726f6a65637420287573696e6720666f727761726420736c6173686101018201527f6573293a0a4f50454e5a455050454c494e5f424153485f504154483d22433a2f6101218201527f50726f6772616d2046696c65732f4769742f62696e2f6261736822000000000061014182015261015c01919050565b7f4661696c656420746f2066696e64206c696e652077697468207072656669782081527f2700000000000000000000000000000000000000000000000000000000000000602082015260008351619c8e816021850160208801618a3f565b7f2720696e206f75747075743a20000000000000000000000000000000000000006021918401918201528351619ccb81602e840160208801618a3f565b01602e01949350505050565b7f4661696c656420746f2072756e2075706772616465207361666574792076616c81527f69646174696f6e3a20000000000000000000000000000000000000000000000060208201526000825161993a816029850160208701618a3f565b7f55706772616465207361666574792076616c69646174696f6e206661696c656481527f3a0a000000000000000000000000000000000000000000000000000000000000602082015260008251619d93816022850160208701618a3f565b9190910160220192915050565b7f436f6e7472616374206e616d6520000000000000000000000000000000000000815260008251619dd881600e850160208701618a3f565b7f206d75737420626520696e2074686520666f726d6174204d79436f6e74726163600e9390910192830152507f742e736f6c3a4d79436f6e7472616374206f72204d79436f6e74726163742e73602e8201527f6f6c206f72206f75742f4d79436f6e74726163742e736f6c2f4d79436f6e7472604e8201527f6163742e6a736f6e000000000000000000000000000000000000000000000000606e820152607601919050565b7f53504458206c6963656e7365206964656e746966696572200000000000000000815260008351619eb6816018850160208801618a3f565b7f20696e20000000000000000000000000000000000000000000000000000000006018918401918201528351619ef381601c840160208801618a3f565b7f20646f6573206e6f74206c6f6f6b206c696b65206120737570706f7274656420601c92909101918201527f6c6963656e736520666f7220626c6f636b206578706c6f726572207665726966603c8201527f69636174696f6e2e205573652074686520606c6963656e73655479706560206f605c8201527f7074696f6e20746f20737065636966792061206c6963656e736520747970652c607c8201527f206f7220736574207468652060736b69704c6963656e73655479706560206f70609c8201527f74696f6e20746f2060747275656020746f20736b69702e00000000000000000060bc82015260d301949350505050565b60008251619ff9818460208701618a3f565b7f2000000000000000000000000000000000000000000000000000000000000000920191825250600101919050565b7f406f70656e7a657070656c696e2f75706772616465732d636f7265400000000081526000825161a06081601c850160208701618a3f565b91909101601c0192915050565b6000600019820361a0805761a080618fa6565b5060010190565b808202811582820484141761480e5761480e618fa6565b6001815b600184111561a0d95780850481111561a0bd5761a0bd618fa6565b600184161561a0cb57908102905b60019390931c92800261a0a2565b935093915050565b60008261a0f05750600161480e565b8161a0fd5750600061480e565b816001811461a113576002811461a11d5761a139565b600191505061480e565b60ff84111561a12e5761a12e618fa6565b50506001821b61480e565b5060208310610133831016604e8410600b841016171561a15c575081810a61480e565b61a169600019848461a09e565b806000190482111561a17d5761a17d618fa6565b029392505050565b6000614907838361a0e1565b60008161a1a05761a1a0618fa6565b506000190190565b6000835161a1ba818460208801618a3f565b7f3a00000000000000000000000000000000000000000000000000000000000000908301908152835161a1f4816001840160208801618a3f565b01600101949350505050565b8181036000831280158383131683831282161715617bcb57617bcb618fa656fe60c0604052600d60809081526c2bb930b83832b21022ba3432b960991b60a05260009061002c9082610114565b506040805180820190915260048152630ae8aa8960e31b60208201526001906100559082610114565b506002805460ff1916601217905534801561006f57600080fd5b506101d2565b634e487b7160e01b600052604160045260246000fd5b600181811c9082168061009f57607f821691505b6020821081036100bf57634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111561010f57806000526020600020601f840160051c810160208510156100ec5750805b601f840160051c820191505b8181101561010c57600081556001016100f8565b50505b505050565b81516001600160401b0381111561012d5761012d610075565b6101418161013b845461008b565b846100c5565b6020601f821160018114610175576000831561015d5750848201515b600019600385901b1c1916600184901b17845561010c565b600084815260208120601f198516915b828110156101a55787850151825560209485019460019092019101610185565b50848210156101c35786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b610986806101e16000396000f3fe6080604052600436106100c05760003560e01c8063313ce56711610074578063a9059cbb1161004e578063a9059cbb146101fa578063d0e30db01461021a578063dd62ed3e1461022257600080fd5b8063313ce5671461018c57806370a08231146101b857806395d89b41146101e557600080fd5b806318160ddd116100a557806318160ddd1461012f57806323b872dd1461014c5780632e1a7d4d1461016c57600080fd5b806306fdde03146100d4578063095ea7b3146100ff57600080fd5b366100cf576100cd61025a565b005b600080fd5b3480156100e057600080fd5b506100e96102b5565b6040516100f69190610745565b60405180910390f35b34801561010b57600080fd5b5061011f61011a3660046107da565b610343565b60405190151581526020016100f6565b34801561013b57600080fd5b50475b6040519081526020016100f6565b34801561015857600080fd5b5061011f610167366004610804565b6103bd565b34801561017857600080fd5b506100cd610187366004610841565b610647565b34801561019857600080fd5b506002546101a69060ff1681565b60405160ff90911681526020016100f6565b3480156101c457600080fd5b5061013e6101d336600461085a565b60036020526000908152604090205481565b3480156101f157600080fd5b506100e9610724565b34801561020657600080fd5b5061011f6102153660046107da565b610731565b6100cd61025a565b34801561022e57600080fd5b5061013e61023d366004610875565b600460209081526000928352604080842090915290825290205481565b33600090815260036020526040812080543492906102799084906108d7565b909155505060405134815233907fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c9060200160405180910390a2565b600080546102c2906108ea565b80601f01602080910402602001604051908101604052809291908181526020018280546102ee906108ea565b801561033b5780601f106103105761010080835404028352916020019161033b565b820191906000526020600020905b81548152906001019060200180831161031e57829003601f168201915b505050505081565b33600081815260046020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925906103ab9086815260200190565b60405180910390a35060015b92915050565b73ffffffffffffffffffffffffffffffffffffffff831660009081526003602052604081205482111561042b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600060248201526044015b60405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff841633148015906104a1575073ffffffffffffffffffffffffffffffffffffffff841660009081526004602090815260408083203384529091529020547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff14155b156105605773ffffffffffffffffffffffffffffffffffffffff8416600090815260046020908152604080832033845290915290205482111561051a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526020600482015260006024820152604401610422565b73ffffffffffffffffffffffffffffffffffffffff841660009081526004602090815260408083203384529091528120805484929061055a90849061093d565b90915550505b73ffffffffffffffffffffffffffffffffffffffff84166000908152600360205260408120805484929061059590849061093d565b909155505073ffffffffffffffffffffffffffffffffffffffff8316600090815260036020526040812080548492906105cf9084906108d7565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161063591815260200190565b60405180910390a35060019392505050565b3360009081526003602052604090205481111561069a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526020600482015260006024820152604401610422565b33600090815260036020526040812080548392906106b990849061093d565b9091555050604051339082156108fc029083906000818181858888f193505050501580156106eb573d6000803e3d6000fd5b5060405181815233907f7fcf532c15f0a6db0bd6d0e038bea71d30d808c7d98cb3bf7268a95bf5081b659060200160405180910390a250565b600180546102c2906108ea565b600061073e3384846103bd565b9392505050565b602081526000825180602084015260005b818110156107735760208186018101516040868401015201610756565b5060006040828501015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011684010191505092915050565b803573ffffffffffffffffffffffffffffffffffffffff811681146107d557600080fd5b919050565b600080604083850312156107ed57600080fd5b6107f6836107b1565b946020939093013593505050565b60008060006060848603121561081957600080fd5b610822846107b1565b9250610830602085016107b1565b929592945050506040919091013590565b60006020828403121561085357600080fd5b5035919050565b60006020828403121561086c57600080fd5b61073e826107b1565b6000806040838503121561088857600080fd5b610891836107b1565b915061089f602084016107b1565b90509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b808201808211156103b7576103b76108a8565b600181811c908216806108fe57607f821691505b602082108103610937577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b818103818111156103b7576103b76108a856fea264697066735822122008d7fc4e09519c5dd9f356b03596f6829a151d0bc7682533f9ceab4e459f5ee264736f6c634300081a00336080604052348015600f57600080fd5b506105208061001f6000396000f3fe60806040526004361061002a5760003560e01c806369582bee14610033578063de43156e1461005357005b3661003157005b005b34801561003f57600080fd5b5061003161004e3660046101ba565b610073565b34801561005f57600080fd5b5061003161006e3660046101ba565b6100ee565b6060811561008a5761008782840184610273565b90505b7ffdc887992b033668833927e252058e468fac0b6bd196d520f09c61b740e999486100b58780610369565b6100c560408a0160208b016103ce565b896040013533866040516100de969594939291906103f0565b60405180910390a1505050505050565b606081156101055761010282840184610273565b90505b7fcdc8ee677dc5ebe680fb18cebda5e26ba5ea1f0ba504a47e2a9a2ecb476dc98e6100b58780610369565b60006060828403121561014257600080fd5b50919050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461016c57600080fd5b919050565b60008083601f84011261018357600080fd5b50813567ffffffffffffffff81111561019b57600080fd5b6020830191508360208285010111156101b357600080fd5b9250929050565b6000806000806000608086880312156101d257600080fd5b853567ffffffffffffffff8111156101e957600080fd5b6101f588828901610130565b95505061020460208701610148565b935060408601359250606086013567ffffffffffffffff81111561022757600080fd5b61023388828901610171565b969995985093965092949392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60006020828403121561028557600080fd5b813567ffffffffffffffff81111561029c57600080fd5b8201601f810184136102ad57600080fd5b803567ffffffffffffffff8111156102c7576102c7610244565b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8501160116810181811067ffffffffffffffff8211171561033357610333610244565b60405281815282820160200186101561034b57600080fd5b81602084016020830137600091810160200191909152949350505050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261039e57600080fd5b83018035915067ffffffffffffffff8211156103b957600080fd5b6020019150368190038213156101b357600080fd5b6000602082840312156103e057600080fd5b6103e982610148565b9392505050565b60a081528560a0820152858760c0830137600060c0878301015260007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f880116820173ffffffffffffffffffffffffffffffffffffffff8716602084015285604084015273ffffffffffffffffffffffffffffffffffffffff8516606084015260c083820301608084015283518060c083015260005b818110156104a557602081870181015184830160e0015201610488565b50600060e0838301810191909152601f9091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016909101019897505050505050505056fea2646970667358221220f4d1ccb9c8450e782e1c77412473fd37637a5c83a2a3272307d8c8bc8e8c7a3364736f6c634300081a003360c060405234801561001057600080fd5b5060405161106f38038061106f83398101604081905261002f916100db565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461006357604051632b2add3d60e01b815260040160405180910390fd5b600380546001600160a01b0319166001600160a01b0385811691909117909155828116608052811660a0526040517f80699e81136d69cb8367ad52a994e25c722a86da654b561d0c14b61a777e7ac590600090a150505061011e565b80516001600160a01b03811681146100d657600080fd5b919050565b6000806000606084860312156100f057600080fd5b6100f9846100bf565b9250610107602085016100bf565b9150610115604085016100bf565b90509250925092565b60805160a051610f2561014a60003960006101e50152600081816102b9015261045b0152610f256000f3fe608060405234801561001057600080fd5b50600436106100f55760003560e01c806397770dff11610097578063c63585cc11610066578063c63585cc14610273578063d7fd7afb14610286578063d936a012146102b4578063ee2815ba146102db57600080fd5b806397770dff1461021a578063a7cb05071461022d578063c39aca3714610240578063c62178ac1461025357600080fd5b8063513a9c05116100d3578063513a9c051461018a578063569541b9146101c0578063842da36d146101e057806391dd645f1461020757600080fd5b80630be15547146100fa5780631f0e251b1461015a5780633ce4a5bc1461016f575b600080fd5b610130610108366004610bd1565b60016020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b61016d610168366004610c13565b6102ee565b005b61013073735b14bb79463307aacbed86daf3322b1e6226ab81565b610130610198366004610bd1565b60026020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b6003546101309073ffffffffffffffffffffffffffffffffffffffff1681565b6101307f000000000000000000000000000000000000000000000000000000000000000081565b61016d610215366004610c35565b610402565b61016d610228366004610c13565b610526565b61016d61023b366004610c61565b610633565b61016d61024e366004610c83565b6106ce565b6004546101309073ffffffffffffffffffffffffffffffffffffffff1681565b610130610281366004610d53565b6108cd565b6102a6610294366004610bd1565b60006020819052908152604090205481565b604051908152602001610151565b6101307f000000000000000000000000000000000000000000000000000000000000000081565b61016d6102e9366004610c35565b610a02565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461033b576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116610388576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600480547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527f3ade88e3922d64780e1bf4460d364c2970b69da813f9c0c07a1c187b5647636c906020015b60405180910390a150565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461044f576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600354600090610497907f00000000000000000000000000000000000000000000000000000000000000009073ffffffffffffffffffffffffffffffffffffffff16846108cd565b60008481526002602090815260409182902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff85169081179091558251878152918201529192507f0ecec485166da6139b13bb7e033e9446e2d35348e80ebf1180d4afe2dba1704e910160405180910390a1505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610573576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff81166105c0576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527fdba79d534382d1a8ae108e4c8ecb27c6ae42ab8b91d44eedf88bd329f3868d5e906020016103f7565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610680576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000828152602081815260409182902083905581518481529081018390527f49f492222906ac486c3c1401fa545626df1f0c0e5a77a05597ea2ed66af9850d91015b60405180910390a15050565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461071b576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff831673735b14bb79463307aacbed86daf3322b1e6226ab1480610768575073ffffffffffffffffffffffffffffffffffffffff831630145b1561079f576040517f82d5d76a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f47e7ef2400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152602482018690528616906347e7ef24906044016020604051808303816000875af1158015610814573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108389190610d96565b506040517fde43156e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84169063de43156e906108939089908990899088908890600401610e01565b600060405180830381600087803b1580156108ad57600080fd5b505af11580156108c1573d6000803e3d6000fd5b50505050505050505050565b60008060006108dc8585610ad3565b6040517fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606084811b8216602084015283901b16603482015291935091508690604801604051602081830303815290604052805190602001206040516020016109c29291907fff00000000000000000000000000000000000000000000000000000000000000815260609290921b7fffffffffffffffffffffffffffffffffffffffff00000000000000000000000016600183015260158201527f96e8ac4277198ff8b6f785478aa9a39f403cb768dd02cbee326c3e7da348845f603582015260550190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291905280516020909101209695505050505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610a4f576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008281526001602090815260409182902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff85169081179091558251858152918201527fd1b36d30f6248e97c473b4d1348ca164a4ef6759022f54a58ec200326c39c45d91016106c2565b6000808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603610b3b576040517fcb1e7cfe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1610610b75578284610b78565b83835b909250905073ffffffffffffffffffffffffffffffffffffffff8216610bca576040517f78b507da00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b9250929050565b600060208284031215610be357600080fd5b5035919050565b803573ffffffffffffffffffffffffffffffffffffffff81168114610c0e57600080fd5b919050565b600060208284031215610c2557600080fd5b610c2e82610bea565b9392505050565b60008060408385031215610c4857600080fd5b82359150610c5860208401610bea565b90509250929050565b60008060408385031215610c7457600080fd5b50508035926020909101359150565b60008060008060008060a08789031215610c9c57600080fd5b863567ffffffffffffffff811115610cb357600080fd5b87016060818a031215610cc557600080fd5b9550610cd360208801610bea565b945060408701359350610ce860608801610bea565b9250608087013567ffffffffffffffff811115610d0457600080fd5b8701601f81018913610d1557600080fd5b803567ffffffffffffffff811115610d2c57600080fd5b896020828401011115610d3e57600080fd5b60208201935080925050509295509295509295565b600080600060608486031215610d6857600080fd5b610d7184610bea565b9250610d7f60208501610bea565b9150610d8d60408501610bea565b90509250925092565b600060208284031215610da857600080fd5b81518015158114610c2e57600080fd5b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b60808152600086357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1883603018112610e3957600080fd5b870160208101903567ffffffffffffffff811115610e5657600080fd5b803603821315610e6557600080fd5b60606080850152610e7a60e085018284610db8565b91505073ffffffffffffffffffffffffffffffffffffffff610e9e60208a01610bea565b1660a0840152604088013560c084015273ffffffffffffffffffffffffffffffffffffffff871660208401528560408401528281036060840152610ee3818587610db8565b9897505050505050505056fea2646970667358221220431a07541a491b54259bdf8fcd05ade6751bfbbf0e72e605f27325b56d7d464f64736f6c634300081a003360e060405234801561001057600080fd5b50604051611bb9380380611bb983398101604081905261002f9161020e565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461006357604051632b2add3d60e01b815260040160405180910390fd5b6001600160a01b038216158061008057506001600160a01b038116155b1561009e5760405163d92e233d60e01b815260040160405180910390fd5b60066100aa8982610360565b5060076100b78882610360565b5060ff861660c05260808590528360028111156100d6576100d661041e565b60a08160028111156100ea576100ea61041e565b905250600192909255600080546001600160a01b039283166001600160a01b03199182161790915560088054929093169116179055506104349350505050565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261015157600080fd5b81516001600160401b0381111561016a5761016a61012a565b604051601f8201601f19908116603f011681016001600160401b03811182821017156101985761019861012a565b6040528181528382016020018510156101b057600080fd5b60005b828110156101cf576020818601810151838301820152016101b3565b506000918101602001919091529392505050565b8051600381106101f257600080fd5b919050565b80516001600160a01b03811681146101f257600080fd5b600080600080600080600080610100898b03121561022b57600080fd5b88516001600160401b0381111561024157600080fd5b61024d8b828c01610140565b60208b015190995090506001600160401b0381111561026b57600080fd5b6102778b828c01610140565b975050604089015160ff8116811461028e57600080fd5b60608a015190965094506102a460808a016101e3565b60a08a015190945092506102ba60c08a016101f7565b91506102c860e08a016101f7565b90509295985092959890939650565b600181811c908216806102eb57607f821691505b60208210810361030b57634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111561035b57806000526020600020601f840160051c810160208510156103385750805b601f840160051c820191505b818110156103585760008155600101610344565b50505b505050565b81516001600160401b038111156103795761037961012a565b61038d8161038784546102d7565b84610311565b6020601f8211600181146103c157600083156103a95750848201515b600019600385901b1c1916600184901b178455610358565b600084815260208120601f198516915b828110156103f157878501518255602094850194600190920191016103d1565b508482101561040f5786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b634e487b7160e01b600052602160045260246000fd5b60805160a05160c05161174861047160003960006102170152600061033a0152600081816102eb01528181610ad70152610bdd01526117486000f3fe608060405234801561001057600080fd5b50600436106101985760003560e01c80638b851b95116100e3578063ccc775991161008c578063eddeb12311610066578063eddeb12314610431578063f2441b3214610444578063f687d12a1461046457600080fd5b8063ccc77599146103a4578063d9eeebed146103b7578063dd62ed3e146103eb57600080fd5b8063a9059cbb116100bd578063a9059cbb14610369578063c70126261461037c578063c835d7cc1461038f57600080fd5b80638b851b951461030d57806395d89b411461032d578063a3413d031461033557600080fd5b80633ce4a5bc116101455780634d8943bb1161011f5780634d8943bb146102a757806370a08231146102b057806385e1f4d0146102e657600080fd5b80633ce4a5bc1461024157806342966c681461028157806347e7ef241461029457600080fd5b806318160ddd1161017657806318160ddd146101f557806323b872dd146101fd578063313ce5671461021057600080fd5b806306fdde031461019d578063091d2788146101bb578063095ea7b3146101d2575b600080fd5b6101a5610477565b6040516101b29190611327565b60405180910390f35b6101c460015481565b6040519081526020016101b2565b6101e56101e0366004611366565b610509565b60405190151581526020016101b2565b6005546101c4565b6101e561020b366004611392565b610520565b60405160ff7f00000000000000000000000000000000000000000000000000000000000000001681526020016101b2565b61025c73735b14bb79463307aacbed86daf3322b1e6226ab81565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101b2565b6101e561028f3660046113d3565b6105b7565b6101e56102a2366004611366565b6105cb565b6101c460025481565b6101c46102be3660046113ec565b73ffffffffffffffffffffffffffffffffffffffff1660009081526003602052604090205490565b6101c47f000000000000000000000000000000000000000000000000000000000000000081565b60085461025c9073ffffffffffffffffffffffffffffffffffffffff1681565b6101a561071f565b61035c7f000000000000000000000000000000000000000000000000000000000000000081565b6040516101b29190611409565b6101e5610377366004611366565b61072e565b6101e561038a366004611479565b61073b565b6103a261039d3660046113ec565b61088a565b005b6103a26103b23660046113ec565b61099e565b6103bf610aab565b6040805173ffffffffffffffffffffffffffffffffffffffff90931683526020830191909152016101b2565b6101c46103f9366004611571565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260046020908152604080832093909416825291909152205490565b6103a261043f3660046113d3565b610cc9565b60005461025c9073ffffffffffffffffffffffffffffffffffffffff1681565b6103a26104723660046113d3565b610d4b565b606060068054610486906115aa565b80601f01602080910402602001604051908101604052809291908181526020018280546104b2906115aa565b80156104ff5780601f106104d4576101008083540402835291602001916104ff565b820191906000526020600020905b8154815290600101906020018083116104e257829003601f168201915b5050505050905090565b6000610516338484610dcd565b5060015b92915050565b600061052d848484610ed6565b73ffffffffffffffffffffffffffffffffffffffff8416600090815260046020908152604080832033845290915290205482811015610598576040517f10bad14700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6105ac85336105a7868561162c565b610dcd565b506001949350505050565b60006105c33383611091565b506001919050565b60003373735b14bb79463307aacbed86daf3322b1e6226ab14801590610609575060005473ffffffffffffffffffffffffffffffffffffffff163314155b801561062d575060085473ffffffffffffffffffffffffffffffffffffffff163314155b15610664576040517fddb5de5e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61066e83836111d3565b6040517f735b14bb79463307aacbed86daf3322b1e6226ab000000000000000000000000602082015273ffffffffffffffffffffffffffffffffffffffff8416907f67fc7bdaed5b0ec550d8706b87d60568ab70c6b781263c70101d54cd1564aab390603401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529082905261070e91869061163f565b60405180910390a250600192915050565b606060078054610486906115aa565b6000610516338484610ed6565b6000806000610748610aab565b6040517f23b872dd00000000000000000000000000000000000000000000000000000000815233600482015273735b14bb79463307aacbed86daf3322b1e6226ab602482015260448101829052919350915073ffffffffffffffffffffffffffffffffffffffff8316906323b872dd906064016020604051808303816000875af11580156107da573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107fe9190611661565b610834576040517f0a7cd6d600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61083e3385611091565b60025460405133917f9ffbffc04a397460ee1dbe8c9503e098090567d6b7f4b3c02a8617d800b6d9559161087791899189918791611683565b60405180910390a2506001949350505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab146108d7576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116610924576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527fd55614e962c5fd6ece71614f6348d702468a997a394dd5e5c1677950226d97ae906020015b60405180910390a150565b3373735b14bb79463307aacbed86daf3322b1e6226ab146109eb576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116610a38576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600880547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527f88815d964e380677e86d817e7d65dea59cb7b4c3b5b7a0c8ec7ea4a74f90a38790602001610993565b600080546040517f0be155470000000000000000000000000000000000000000000000000000000081527f000000000000000000000000000000000000000000000000000000000000000060048201528291829173ffffffffffffffffffffffffffffffffffffffff90911690630be1554790602401602060405180830381865afa158015610b3e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b6291906116b2565b905073ffffffffffffffffffffffffffffffffffffffff8116610bb1576040517f78fff39600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080546040517fd7fd7afb0000000000000000000000000000000000000000000000000000000081527f0000000000000000000000000000000000000000000000000000000000000000600482015273ffffffffffffffffffffffffffffffffffffffff9091169063d7fd7afb90602401602060405180830381865afa158015610c40573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c6491906116cf565b905080600003610ca0576040517fe661aed000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060025460015483610cb391906116e8565b610cbd91906116ff565b92959294509192505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610d16576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60028190556040518181527fef13af88e424b5d15f49c77758542c1938b08b8b95b91ed0751f98ba99000d8f90602001610993565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610d98576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018190556040518181527fff5788270f43bfc1ca41c503606d2594aa3023a1a7547de403a3e2f146a4a80a90602001610993565b73ffffffffffffffffffffffffffffffffffffffff8316610e1a576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216610e67576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff83811660008181526004602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8316610f23576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216610f70576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff831660009081526003602052604090205481811015610fd0576040517ffe382aa700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610fda828261162c565b73ffffffffffffffffffffffffffffffffffffffff808616600090815260036020526040808220939093559085168152908120805484929061101d9084906116ff565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161108391815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff82166110de576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff82166000908152600360205260409020548181101561113e576040517ffe382aa700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611148828261162c565b73ffffffffffffffffffffffffffffffffffffffff84166000908152600360205260408120919091556005805484929061118390849061162c565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90602001610ec9565b73ffffffffffffffffffffffffffffffffffffffff8216611220576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b806005600082825461123291906116ff565b909155505073ffffffffffffffffffffffffffffffffffffffff82166000908152600360205260408120805483929061126c9084906116ff565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6000815180845260005b818110156112e9576020818501810151868301820152016112cd565b5060006020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b60208152600061133a60208301846112c3565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff8116811461136357600080fd5b50565b6000806040838503121561137957600080fd5b823561138481611341565b946020939093013593505050565b6000806000606084860312156113a757600080fd5b83356113b281611341565b925060208401356113c281611341565b929592945050506040919091013590565b6000602082840312156113e557600080fd5b5035919050565b6000602082840312156113fe57600080fd5b813561133a81611341565b6020810160038310611444577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000806040838503121561148c57600080fd5b823567ffffffffffffffff8111156114a357600080fd5b8301601f810185136114b457600080fd5b803567ffffffffffffffff8111156114ce576114ce61144a565b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8501160116810181811067ffffffffffffffff8211171561153a5761153a61144a565b60405281815282820160200187101561155257600080fd5b8160208401602083013760006020928201830152969401359450505050565b6000806040838503121561158457600080fd5b823561158f81611341565b9150602083013561159f81611341565b809150509250929050565b600181811c908216806115be57607f821691505b6020821081036115f7577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8181038181111561051a5761051a6115fd565b60408152600061165260408301856112c3565b90508260208301529392505050565b60006020828403121561167357600080fd5b8151801515811461133a57600080fd5b60808152600061169660808301876112c3565b6020830195909552506040810192909252606090910152919050565b6000602082840312156116c457600080fd5b815161133a81611341565b6000602082840312156116e157600080fd5b5051919050565b808202811582820484141761051a5761051a6115fd565b8082018082111561051a5761051a6115fd56fea26469706673582212204013e39523742118b3f2227e145ee7e48176ba6aebead33c596dca2acb59a74c64736f6c634300081a0033a26469706673582212200cba2b427932e08852b96ad15b313c50f22369922ac94104641269d615b2ebd464736f6c634300081a0033", + ABI: "[{\"type\":\"function\",\"name\":\"IS_TEST\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeArtifacts\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedArtifacts_\",\"type\":\"string[]\",\"internalType\":\"string[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeContracts\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedContracts_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeSelectors\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedSelectors_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzSelector[]\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"selectors\",\"type\":\"bytes4[]\",\"internalType\":\"bytes4[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeSenders\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedSenders_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"failed\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"setUp\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"targetArtifactSelectors\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedArtifactSelectors_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzArtifactSelector[]\",\"components\":[{\"name\":\"artifact\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"selectors\",\"type\":\"bytes4[]\",\"internalType\":\"bytes4[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetArtifacts\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedArtifacts_\",\"type\":\"string[]\",\"internalType\":\"string[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetContracts\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedContracts_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetInterfaces\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedInterfaces_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzInterface[]\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"artifacts\",\"type\":\"string[]\",\"internalType\":\"string[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetSelectors\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedSelectors_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzSelector[]\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"selectors\",\"type\":\"bytes4[]\",\"internalType\":\"bytes4[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetSenders\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedSenders_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"testCall\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testCallFailsIfReceiverIsZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawAndCallZRC20FailsIfAmountIsZero\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawAndCallZRC20FailsIfReceiverIsZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawAndcallZETAFailsIfAmountIsReceiverIsZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawAndcallZETAFailsIfAmountIsZero\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawZETA\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawZETAFailsIfAmountIsZero\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawZETAFailsIfNoAllowance\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawZETAFailsIfNoBalance\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawZETAWithMessage\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawZETAWithMessageFailsIfNoAllowance\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawZRC20\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawZRC20FailsIfNoAllowance\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawZRC20FailsIfNoBalanceForGasFee\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawZRC20FailsIfNoBalanceForTransfer\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawZRC20FailsIfReceiverIsZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawZRC20FailsIsAmountIs0\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawZRC20WithMessage\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawZRC20WithMessageFailsIfNoAllowance\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"event\",\"name\":\"Call\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"chainId\",\"type\":\"uint256\",\"indexed\":true,\"internalType\":\"uint256\"},{\"name\":\"receiver\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"message\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Withdrawal\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"chainId\",\"type\":\"uint256\",\"indexed\":true,\"internalType\":\"uint256\"},{\"name\":\"receiver\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"zrc20\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"gasfee\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"protocolFlatFee\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"message\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log\",\"inputs\":[{\"name\":\"\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_address\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_array\",\"inputs\":[{\"name\":\"val\",\"type\":\"uint256[]\",\"indexed\":false,\"internalType\":\"uint256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_array\",\"inputs\":[{\"name\":\"val\",\"type\":\"int256[]\",\"indexed\":false,\"internalType\":\"int256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_array\",\"inputs\":[{\"name\":\"val\",\"type\":\"address[]\",\"indexed\":false,\"internalType\":\"address[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_bytes\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_bytes32\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_int\",\"inputs\":[{\"name\":\"\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_address\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_array\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"uint256[]\",\"indexed\":false,\"internalType\":\"uint256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_array\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"int256[]\",\"indexed\":false,\"internalType\":\"int256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_array\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"address[]\",\"indexed\":false,\"internalType\":\"address[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_bytes\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_bytes32\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_decimal_int\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"},{\"name\":\"decimals\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_decimal_uint\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"decimals\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_int\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_string\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_uint\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_string\",\"inputs\":[{\"name\":\"\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_uint\",\"inputs\":[{\"name\":\"\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"logs\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"CallerIsNotFungibleModule\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"FailedZetaSent\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"GasFeeTransferFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientZRC20Amount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientZetaAmount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidTarget\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"LowBalance\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OnlyWZETAOrFungible\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"WithdrawalFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZRC20BurnFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZRC20DepositFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZRC20TransferFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZeroAddress\",\"inputs\":[]}]", + Bin: "0x6080604052600c8054600160ff199182168117909255601f80549091169091179055348015602c57600080fd5b5061e1bd8061003c6000396000f3fe608060405234801561001057600080fd5b506004361061020b5760003560e01c806385226c811161012a578063ba9adeef116100bd578063e20c9f711161008c578063fa7626d411610071578063fa7626d41461035c578063fbc611c814610369578063fdad0ad01461037157600080fd5b8063e20c9f711461034c578063ea37902f1461035457600080fd5b8063ba9adeef1461032c578063bcc52b9a14610334578063ceccfab31461033c578063dde7e9671461034457600080fd5b8063b5508aa9116100f9578063b5508aa9146102fc578063b7f0583614610304578063ba414fa61461030c578063ba800c911461032457600080fd5b806385226c81146102c2578063916a17c6146102d757806395c379c1146102ec578063b0464fdc146102f457600080fd5b806339cbb457116101a25780635d72228f116101715780635d72228f146102955780636221b5091461029d57806366d9a9a0146102a557806383ababa9146102ba57600080fd5b806339cbb457146102755780633e5e3c231461027d5780633f7286f4146102855780635006fd801461028d57600080fd5b80631ed7831c116101de5780631ed7831c1461023257806321aeb18c146102505780632ade38801461025857806336431b3f1461026d57600080fd5b80630a9254e4146102105780631238212c1461021a57806318a4cfdc146102225780631e63d2b91461022a575b600080fd5b610218610379565b005b610218610de6565b6102186111af565b610218611628565b61023a611a14565b6040516102479190618c55565b60405180910390f35b610218611a76565b610260611b97565b6040516102479190618cf1565b610218611cd9565b610218611e7f565b61023a611fe7565b61023a612047565b6102186120a7565b61021861255b565b6102186128aa565b6102ad612acc565b6040516102479190618e57565b610218612c4e565b6102ca612d49565b6040516102479190618ef5565b6102df612e19565b6040516102479190618f6c565b610218612f14565b6102df61307d565b6102ca613178565b610218613248565b610314613485565b6040519015158152602001610247565b610218613559565b610218613685565b610218613828565b6102186139a6565b610218613cda565b61023a614116565b610218614176565b601f546103149060ff1681565b610218614555565b6102186148c8565b602580547fffffffffffffffffffffffff00000000000000000000000000000000000000009081163017909155602680549091166112341790556040516103bf90618b68565b604051809103906000f0801580156103db573d6000803e3d6000fd5b50602280547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03928316908117909155604080518082018252600f81527f476174657761795a45564d2e736f6c0000000000000000000000000000000000602082015260255491516024810193909352921660448201526104bf919060640160408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f485cc95500000000000000000000000000000000000000000000000000000000179052614a57565b601f80547fffffffffffffffffffffff0000000000000000000000000000000000000000ff166101006001600160a01b039384168102919091179182905560208054919092049092167fffffffffffffffffffffffff000000000000000000000000000000000000000090921682178155604080517f3ce4a5bc0000000000000000000000000000000000000000000000000000000081529051633ce4a5bc926004808401939192918290030181865afa158015610581573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105a59190619003565b602780547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03929092169190911790556040516105e990618b75565b604051809103906000f080158015610605573d6000803e3d6000fd5b50602480547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039283161781556027546040517f06447d5600000000000000000000000000000000000000000000000000000000815292166004830152737109709ecfa91a80626ff3989d68f67f5b1dd12d916306447d569101600060405180830381600087803b1580156106a157600080fd5b505af11580156106b5573d6000803e3d6000fd5b5050505060008060006040516106ca90618b82565b6001600160a01b03938416815291831660208301529091166040820152606001604051809103906000f080158015610706573d6000803e3d6000fd5b50602380547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392831690811790915560205460405160129360019384936000939192169061075c90618b8f565b61076b9695949392919061902c565b604051809103906000f080158015610787573d6000803e3d6000fd5b50602180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039283169081179091556023546040517fee2815ba0000000000000000000000000000000000000000000000000000000081526001600482015260248101929092529091169063ee2815ba90604401600060405180830381600087803b15801561081e57600080fd5b505af1158015610832573d6000803e3d6000fd5b50506023546040517fa7cb050700000000000000000000000000000000000000000000000000000000815260016004820181905260248201526001600160a01b03909116925063a7cb05079150604401600060405180830381600087803b15801561089c57600080fd5b505af11580156108b0573d6000803e3d6000fd5b50506027546040517fc88a5e6d0000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152633b9aca006024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c88a5e6d9150604401600060405180830381600087803b15801561093057600080fd5b505af1158015610944573d6000803e3d6000fd5b50505050602260009054906101000a90046001600160a01b03166001600160a01b031663d0e30db0600a6040518263ffffffff1660e01b81526004016000604051808303818588803b15801561099957600080fd5b505af11580156109ad573d6000803e3d6000fd5b50506022546020546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152600a60248201529116935063095ea7b3925060440190506020604051808303816000875af1158015610a21573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a459190619121565b506021546025546040517f47e7ef240000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620186a060248201529116906347e7ef24906044016020604051808303816000875af1158015610ab6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ada9190619121565b507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b03166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610b3957600080fd5b505af1158015610b4d573d6000803e3d6000fd5b50506025546040517f06447d560000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506306447d569150602401600060405180830381600087803b158015610bc357600080fd5b505af1158015610bd7573d6000803e3d6000fd5b50506021546020546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620186a060248201529116925063095ea7b391506044016020604051808303816000875af1158015610c4b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c6f9190619121565b50602260009054906101000a90046001600160a01b03166001600160a01b031663d0e30db0600a6040518263ffffffff1660e01b81526004016000604051808303818588803b158015610cc157600080fd5b505af1158015610cd5573d6000803e3d6000fd5b50506022546020546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152600a60248201529116935063095ea7b3925060440190506020604051808303816000875af1158015610d49573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d6d9190619121565b507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b03166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610dcc57600080fd5b505af1158015610de0573d6000803e3d6000fd5b50505050565b6021546025546040516370a0823160e01b81526001600160a01b03918216600482015260019260009216906370a0823190602401602060405180830381865afa158015610e37573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e5b9190619143565b6025546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015610ed057600080fd5b505af1158015610ee4573d6000803e3d6000fd5b50506021546020546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152600060248201529116925063095ea7b391506044016020604051808303816000875af1158015610f56573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f7a9190619121565b506026546040516001600160a01b03909116602482015260009060440160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f84fae7600000000000000000000000000000000000000000000000000000000017905280517ff48448140000000000000000000000000000000000000000000000000000000081529051919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f48448149160048082019260009290919082900301818387803b15801561105657600080fd5b505af115801561106a573d6000803e3d6000fd5b50506020805460265460405160609190911b6bffffffffffffffffffffffff1916928101929092526001600160a01b03169250637993c1e0915060340160408051601f19818403018152908290526021547fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1683526110fe9288916001600160a01b031690879060040161915c565b600060405180830381600087803b15801561111857600080fd5b505af115801561112c573d6000803e3d6000fd5b50506021546025546040516370a0823160e01b81526001600160a01b03918216600482015260009450911691506370a0823190602401602060405180830381865afa15801561117f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111a39190619143565b9050610de08382614a76565b6022546025546040516370a0823160e01b81526001600160a01b03918216600482015260019260009216906370a0823190602401602060405180830381865afa158015611200573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112249190619143565b6022546020546040516370a0823160e01b81526001600160a01b0391821660048201529293506000929116906370a0823190602401602060405180830381865afa158015611276573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061129a9190619143565b6027546026546040516001600160a01b03918216602482015292935016319060009060440160408051601f19818403018152918152602080830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f84fae760000000000000000000000000000000000000000000000000000000001790525490517f81bad6f30000000000000000000000000000000000000000000000000000000081526001600482018190526024820181905260448201819052606482018190526001600160a01b03909216608482015291925090737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b1580156113a957600080fd5b505af11580156113bd573d6000803e3d6000fd5b505060255460265460405160609190911b6bffffffffffffffffffffffff191660208201528493506001600160a01b0390911691507fde19dbe881cc0aeeb6e73ce19ac7b5ca695e6be8a076e3eb42292005a7fec1b59060340160408051601f1981840301815290829052602254611449926001600160a01b03909116908c9060009081908b90619196565b60405180910390a3602080546026546040516001600160a01b039283169363f41d7749936114919316910160609190911b6bffffffffffffffffffffffff1916815260140190565b6040516020818303038152906040528884866040518563ffffffff1660e01b81526004016114c294939291906191e9565b600060405180830381600087803b1580156114dc57600080fd5b505af11580156114f0573d6000803e3d6000fd5b50506022546025546040516370a0823160e01b81526001600160a01b03918216600482015260009450911691506370a0823190602401602060405180830381865afa158015611543573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115679190619143565b905061157d611577600188619249565b82614a76565b6022546020546040516370a0823160e01b81526001600160a01b03918216600482015260009291909116906370a0823190602401602060405180830381865afa1580156115ce573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115f29190619143565b90506115fe8682614a76565b61161e61160c86600161925c565b6027546001600160a01b031631614a76565b5050505050505050565b6021546025546040516370a0823160e01b81526001600160a01b03918216600482015260019260009216906370a0823190602401602060405180830381865afa158015611679573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061169d9190619143565b6026546040516001600160a01b03909116602482015290915060009060440160408051601f19818403018152918152602080830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f84fae760000000000000000000000000000000000000000000000000000000001790525490517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b1580156117a357600080fd5b505af11580156117b7573d6000803e3d6000fd5b505060255460265460405160609190911b6bffffffffffffffffffffffff19166020820152600093506001600160a01b0390911691507fde19dbe881cc0aeeb6e73ce19ac7b5ca695e6be8a076e3eb42292005a7fec1b59060340160408051601f198184030181528282526021547f4d8943bb000000000000000000000000000000000000000000000000000000008452915190926001600160a01b039092169189916000918491634d8943bb916004808201926020929091908290030181865afa15801561188a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118ae9190619143565b886040516118c196959493929190619196565b60405180910390a3602080546026546040516001600160a01b0392831693637993c1e0936119099316910160609190911b6bffffffffffffffffffffffff1916815260140190565b60408051601f19818403018152908290526021547fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1683526119609288916001600160a01b031690879060040161915c565b600060405180830381600087803b15801561197a57600080fd5b505af115801561198e573d6000803e3d6000fd5b50506021546025546040516370a0823160e01b81526001600160a01b03918216600482015260009450911691506370a0823190602401602060405180830381865afa1580156119e1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a059190619143565b9050610de06115778585619249565b60606016805480602002602001604051908101604052809291908181526020018280548015611a6c57602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311611a4e575b5050505050905090565b6040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527f19c08f49000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b158015611afb57600080fd5b505af1158015611b0f573d6000803e3d6000fd5b50506020805460265460405160609190911b6bffffffffffffffffffffffff1916928101929092526001600160a01b0316925063737a9ed69150603401604051602081830303815290604052600060016040518463ffffffff1660e01b8152600401611b7d9392919061926f565b600060405180830381600087803b158015610dcc57600080fd5b6060601e805480602002602001604051908101604052809291908181526020016000905b82821015611cd057600084815260208082206040805180820182526002870290920180546001600160a01b03168352600181018054835181870281018701909452808452939591948681019491929084015b82821015611cb9578382906000526020600020018054611c2c90619294565b80601f0160208091040260200160405190810160405280929190818152602001828054611c5890619294565b8015611ca55780601f10611c7a57610100808354040283529160200191611ca5565b820191906000526020600020905b815481529060010190602001808311611c8857829003601f168201915b505050505081526020019060010190611c0d565b505050508152505081526020019060010190611bbb565b50505050905090565b6026546040516001600160a01b03909116602482015260009060440160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f84fae76000000000000000000000000000000000000000000000000000000000179052517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fd92e233d000000000000000000000000000000000000000000000000000000006004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b158015611dd357600080fd5b505af1158015611de7573d6000803e3d6000fd5b5050602080546040805160008152928301908190526021547f7993c1e0000000000000000000000000000000000000000000000000000000009091526001600160a01b039182169450637993c1e09350611e4a929160019116866024840161915c565b600060405180830381600087803b158015611e6457600080fd5b505af1158015611e78573d6000803e3d6000fd5b5050505050565b6026546040516001600160a01b03909116602482015260009060440160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f84fae76000000000000000000000000000000000000000000000000000000000179052517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fd92e233d000000000000000000000000000000000000000000000000000000006004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b158015611f7957600080fd5b505af1158015611f8d573d6000803e3d6000fd5b5050602080546040805160008152928301908190527f5d40e1780000000000000000000000000000000000000000000000000000000090526001600160a01b03169250635d40e1789150611e4a90600185602483016192e1565b60606018805480602002602001604051908101604052809291908181526020018280548015611a6c576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311611a4e575050505050905090565b60606017805480602002602001604051908101604052809291908181526020018280548015611a6c576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311611a4e575050505050905090565b6022546025546040516370a0823160e01b81526001600160a01b03918216600482015260019260009216906370a0823190602401602060405180830381865afa1580156120f8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061211c9190619143565b6022546020546040516370a0823160e01b81526001600160a01b0391821660048201529293506000929116906370a0823190602401602060405180830381865afa15801561216e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121929190619143565b6027546026546040516001600160a01b03918216602482015292935016319060009060440160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f84fae7600000000000000000000000000000000000000000000000000000000017905260255490517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152909150600190737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561228657600080fd5b505af115801561229a573d6000803e3d6000fd5b50506022546020546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152600060248201529116925063095ea7b391506044016020604051808303816000875af115801561230c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123309190619121565b507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b031663f48448146040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561238f57600080fd5b505af11580156123a3573d6000803e3d6000fd5b50506020805460265460405160609190911b6bffffffffffffffffffffffff1916928101929092526001600160a01b0316925063f41d774991506034016040516020818303038152906040528884866040518563ffffffff1660e01b815260040161241194939291906191e9565b600060405180830381600087803b15801561242b57600080fd5b505af115801561243f573d6000803e3d6000fd5b50506022546025546040516370a0823160e01b81526001600160a01b03918216600482015260009450911691506370a0823190602401602060405180830381865afa158015612492573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124b69190619143565b90506124c28682614a76565b6022546020546040516370a0823160e01b81526001600160a01b03918216600482015260009291909116906370a0823190602401602060405180830381865afa158015612513573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125379190619143565b90506125438682614a76565b60275461161e9086906001600160a01b031631614a76565b6021546025546040516370a0823160e01b81526001600160a01b03918216600482015260019260009216906370a0823190602401602060405180830381865afa1580156125ac573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125d09190619143565b6025546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561264557600080fd5b505af1158015612659573d6000803e3d6000fd5b50506021546020546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152600060248201529116925063095ea7b391506044016020604051808303816000875af11580156126cb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126ef9190619121565b507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b031663f48448146040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561274e57600080fd5b505af1158015612762573d6000803e3d6000fd5b50506020805460265460405160609190911b6bffffffffffffffffffffffff1916928101929092526001600160a01b0316925063135390f9915060340160408051601f19818403018152908290526021547fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1683526127f49287916001600160a01b03169060040161930c565b600060405180830381600087803b15801561280e57600080fd5b505af1158015612822573d6000803e3d6000fd5b50506021546025546040516370a0823160e01b81526001600160a01b03918216600482015260009450911691506370a0823190602401602060405180830381865afa158015612875573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128999190619143565b90506128a58282614a76565b505050565b6022546025546040516370a0823160e01b81526001600160a01b03918216600482015260019260009216906370a0823190602401602060405180830381865afa1580156128fb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061291f9190619143565b6022546040517fa9059cbb0000000000000000000000000000000000000000000000000000000081526101236004820152602481018390529192506001600160a01b03169063a9059cbb906044016020604051808303816000875af115801561298c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129b09190619121565b506000600190507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b031663f48448146040518163ffffffff1660e01b8152600401600060405180830381600087803b158015612a1557600080fd5b505af1158015612a29573d6000803e3d6000fd5b50506020805460265460405160609190911b6bffffffffffffffffffffffff1916928101929092526001600160a01b0316925063737a9ed6915060340160405160208183030381529060405285846040518463ffffffff1660e01b8152600401612a959392919061926f565b600060405180830381600087803b158015612aaf57600080fd5b505af1158015612ac3573d6000803e3d6000fd5b50505050505050565b6060601b805480602002602001604051908101604052809291908181526020016000905b82821015611cd05783829060005260206000209060020201604051806040016040529081600082018054612b2390619294565b80601f0160208091040260200160405190810160405280929190818152602001828054612b4f90619294565b8015612b9c5780601f10612b7157610100808354040283529160200191612b9c565b820191906000526020600020905b815481529060010190602001808311612b7f57829003601f168201915b5050505050815260200160018201805480602002602001604051908101604052809291908181526020018280548015612c3657602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019060040190602082600301049283019260010382029150808411612be35790505b50505050508152505081526020019060010190612af0565b6040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b158015612cd357600080fd5b505af1158015612ce7573d6000803e3d6000fd5b5050602080546040805160008152928301908190526021547f135390f9000000000000000000000000000000000000000000000000000000009091526001600160a01b03918216945063135390f99350611b7d9291600191166024830161930c565b6060601a805480602002602001604051908101604052809291908181526020016000905b82821015611cd0578382906000526020600020018054612d8c90619294565b80601f0160208091040260200160405190810160405280929190818152602001828054612db890619294565b8015612e055780601f10612dda57610100808354040283529160200191612e05565b820191906000526020600020905b815481529060010190602001808311612de857829003601f168201915b505050505081526020019060010190612d6d565b6060601d805480602002602001604051908101604052809291908181526020016000905b82821015611cd05760008481526020908190206040805180820182526002860290920180546001600160a01b03168352600181018054835181870281018701909452808452939491938583019392830182828015612efc57602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019060040190602082600301049283019260010382029150808411612ea95790505b50505050508152505081526020019060010190612e3d565b6026546040516001600160a01b03909116602482015260009060440160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f84fae76000000000000000000000000000000000000000000000000000000000179052517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fd92e233d000000000000000000000000000000000000000000000000000000006004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b15801561300e57600080fd5b505af1158015613022573d6000803e3d6000fd5b5050602080546040805160008152928301908190527ff41d77490000000000000000000000000000000000000000000000000000000090526001600160a01b0316925063f41d77499150611e4a9060018086602484016191e9565b6060601c805480602002602001604051908101604052809291908181526020016000905b82821015611cd05760008481526020908190206040805180820182526002860290920180546001600160a01b0316835260018101805483518187028101870190945280845293949193858301939283018282801561316057602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168152602001906004019060208260030104928301926001038202915080841161310d5790505b505050505081525050815260200190600101906130a1565b60606019805480602002602001604051908101604052809291908181526020016000905b82821015611cd05783829060005260206000200180546131bb90619294565b80601f01602080910402602001604051908101604052809291908181526020018280546131e790619294565b80156132345780601f1061320957610100808354040283529160200191613234565b820191906000526020600020905b81548152906001019060200180831161321757829003601f168201915b50505050508152602001906001019061319c565b6026546040516001600160a01b03909116602482015260009060440160408051601f19818403018152918152602080830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f84fae760000000000000000000000000000000000000000000000000000000001790525490517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b15801561334b57600080fd5b505af115801561335f573d6000803e3d6000fd5b505060255460265460405160609190911b6bffffffffffffffffffffffff19166020820152600193508392506001600160a01b03909116907f5322ffbbf9261ff1f8138247942d2b03b28717141ef0a0dd080fc4be9c4e78d39060340160408051601f19818403018152908290526133d891879061933e565b60405180910390a3602080546026546040516001600160a01b0392831693635d40e178936134209316910160609190911b6bffffffffffffffffffffffff1916815260140190565b60405160208183030381529060405283856040518463ffffffff1660e01b815260040161344f939291906192e1565b600060405180830381600087803b15801561346957600080fd5b505af115801561347d573d6000803e3d6000fd5b505050505050565b60085460009060ff161561349d575060085460ff1690565b6040517f667f9d70000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d600482018190527f6661696c65640000000000000000000000000000000000000000000000000000602483015260009163667f9d7090604401602060405180830381865afa15801561352e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135529190619143565b1415905090565b6040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527f5d67094f000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b1580156135de57600080fd5b505af11580156135f2573d6000803e3d6000fd5b50506020805460265460405160609190911b6bffffffffffffffffffffffff1916928101929092526001600160a01b0316925063135390f9915060340160408051601f19818403018152908290526021547fffffffff0000000000000000000000000000000000000000000000000000000060e085901b168352611b7d926000916001600160a01b03169060040161930c565b6026546040516001600160a01b03909116602482015260009060440160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f84fae76000000000000000000000000000000000000000000000000000000000179052517fc31eb0e00000000000000000000000000000000000000000000000000000000081527f5d67094f000000000000000000000000000000000000000000000000000000006004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b15801561377f57600080fd5b505af1158015613793573d6000803e3d6000fd5b50506020805460265460405160609190911b6bffffffffffffffffffffffff1916928101929092526001600160a01b03169250637993c1e0915060340160408051601f19818403018152908290526021547fffffffff0000000000000000000000000000000000000000000000000000000060e085901b168352611e4a926000916001600160a01b031690879060040161915c565b6026546040516001600160a01b03909116602482015260009060440160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f84fae76000000000000000000000000000000000000000000000000000000000179052517fc31eb0e00000000000000000000000000000000000000000000000000000000081527f19c08f49000000000000000000000000000000000000000000000000000000006004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b15801561392257600080fd5b505af1158015613936573d6000803e3d6000fd5b50506020805460265460405160609190911b6bffffffffffffffffffffffff1916928101929092526001600160a01b0316925063f41d7749915060340160405160208183030381529060405260006001856040518563ffffffff1660e01b8152600401611e4a94939291906191e9565b6021546025546040516370a0823160e01b81526001600160a01b03918216600482015260019260009216906370a0823190602401602060405180830381865afa1580156139f7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a1b9190619143565b6021546040517fa9059cbb0000000000000000000000000000000000000000000000000000000081526101236004820152602481018390529192506001600160a01b03169063a9059cbb906044016020604051808303816000875af1158015613a88573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613aac9190619121565b506027546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015613b1f57600080fd5b505af1158015613b33573d6000803e3d6000fd5b50506021546040517ff687d12a000000000000000000000000000000000000000000000000000000008152600a60048201526001600160a01b03909116925063f687d12a9150602401600060405180830381600087803b158015613b9657600080fd5b505af1158015613baa573d6000803e3d6000fd5b50506040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527ffe382aa7000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e091506024015b600060405180830381600087803b158015613c3457600080fd5b505af1158015613c48573d6000803e3d6000fd5b50506020805460265460405160609190911b6bffffffffffffffffffffffff1916928101929092526001600160a01b0316925063135390f9915060340160408051601f19818403018152908290526021547fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16835261344f9287916001600160a01b03169060040161930c565b6022546025546040516370a0823160e01b81526001600160a01b03918216600482015260019260009216906370a0823190602401602060405180830381865afa158015613d2b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613d4f9190619143565b6022546020546040516370a0823160e01b81526001600160a01b0391821660048201529293506000929116906370a0823190602401602060405180830381865afa158015613da1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613dc59190619143565b6027546025546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152929350163190600190737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015613e4357600080fd5b505af1158015613e57573d6000803e3d6000fd5b50506022546020546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152600060248201529116925063095ea7b391506044016020604051808303816000875af1158015613ec9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613eed9190619121565b507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b031663f48448146040518163ffffffff1660e01b8152600401600060405180830381600087803b158015613f4c57600080fd5b505af1158015613f60573d6000803e3d6000fd5b50506020805460265460405160609190911b6bffffffffffffffffffffffff1916928101929092526001600160a01b0316925063737a9ed6915060340160405160208183030381529060405287846040518463ffffffff1660e01b8152600401613fcc9392919061926f565b600060405180830381600087803b158015613fe657600080fd5b505af1158015613ffa573d6000803e3d6000fd5b50506022546025546040516370a0823160e01b81526001600160a01b03918216600482015260009450911691506370a0823190602401602060405180830381865afa15801561404d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906140719190619143565b905061407d8582614a76565b6022546020546040516370a0823160e01b81526001600160a01b03918216600482015260009291909116906370a0823190602401602060405180830381865afa1580156140ce573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906140f29190619143565b90506140fe8582614a76565b602754612ac39085906001600160a01b031631614a76565b60606015805480602002602001604051908101604052809291908181526020018280548015611a6c576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311611a4e575050505050905090565b6022546025546040516370a0823160e01b81526001600160a01b03918216600482015260019260009216906370a0823190602401602060405180830381865afa1580156141c7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906141eb9190619143565b6022546020546040516370a0823160e01b81526001600160a01b0391821660048201529293506000929116906370a0823190602401602060405180830381865afa15801561423d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906142619190619143565b6027546020546040517f81bad6f30000000000000000000000000000000000000000000000000000000081526001600482018190526024820181905260448201819052606482018190526001600160a01b0392831660848301529394509116319190737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b1580156142fc57600080fd5b505af1158015614310573d6000803e3d6000fd5b505060255460265460405160609190911b6bffffffffffffffffffffffff191660208201528493506001600160a01b0390911691507fde19dbe881cc0aeeb6e73ce19ac7b5ca695e6be8a076e3eb42292005a7fec1b59060340160408051601f198184030181529082905260225461439a926001600160a01b03909116908b906000908190619363565b60405180910390a3602080546026546040516001600160a01b039283169363737a9ed6936143e29316910160609190911b6bffffffffffffffffffffffff1916815260140190565b60405160208183030381529060405287846040518463ffffffff1660e01b81526004016144119392919061926f565b600060405180830381600087803b15801561442b57600080fd5b505af115801561443f573d6000803e3d6000fd5b50506022546025546040516370a0823160e01b81526001600160a01b03918216600482015260009450911691506370a0823190602401602060405180830381865afa158015614492573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906144b69190619143565b90506144c6611577600187619249565b6022546020546040516370a0823160e01b81526001600160a01b03918216600482015260009291909116906370a0823190602401602060405180830381865afa158015614517573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061453b9190619143565b90506145478582614a76565b612ac361160c85600161925c565b6021546025546040516370a0823160e01b81526001600160a01b03918216600482015260019260009216906370a0823190602401602060405180830381865afa1580156145a6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906145ca9190619143565b6020546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b15801561465b57600080fd5b505af115801561466f573d6000803e3d6000fd5b505060255460265460405160609190911b6bffffffffffffffffffffffff19166020820152600093506001600160a01b0390911691507fde19dbe881cc0aeeb6e73ce19ac7b5ca695e6be8a076e3eb42292005a7fec1b59060340160408051601f198184030181528282526021547f4d8943bb000000000000000000000000000000000000000000000000000000008452915190926001600160a01b039092169188916000918491634d8943bb916004808201926020929091908290030181865afa158015614742573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906147669190619143565b604051614777959493929190619363565b60405180910390a3602080546026546040516001600160a01b039283169363135390f9936147bf9316910160609190911b6bffffffffffffffffffffffff1916815260140190565b60408051601f19818403018152908290526021547fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1683526148149287916001600160a01b03169060040161930c565b600060405180830381600087803b15801561482e57600080fd5b505af1158015614842573d6000803e3d6000fd5b50506021546025546040516370a0823160e01b81526001600160a01b03918216600482015260009450911691506370a0823190602401602060405180830381865afa158015614895573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906148b99190619143565b90506128a56115778484619249565b6021546025546040516370a0823160e01b81526001600160a01b03918216600482015260029260009216906370a0823190602401602060405180830381865afa158015614919573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061493d9190619143565b6021549091506001600160a01b031663a9059cbb61012361495f600185619249565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303816000875af11580156149c2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906149e69190619121565b506040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527ffe382aa7000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401613c1a565b6000614a61618b9c565b614a6c848483614af5565b9150505b92915050565b6040517f98296c540000000000000000000000000000000000000000000000000000000081526004810183905260248101829052737109709ecfa91a80626ff3989d68f67f5b1dd12d906398296c549060440160006040518083038186803b158015614ae157600080fd5b505afa15801561347d573d6000803e3d6000fd5b600080614b028584614b70565b9050614b656040518060400160405280601d81526020017f4552433139363750726f78792e736f6c3a4552433139363750726f78790000008152508286604051602001614b509291906193b4565b60405160208183030381529060405285614b7c565b9150505b9392505050565b6000614b698383614baa565b60c08101515160009015614ba057614b9984848460c00151614bc5565b9050614b69565b614b998484614d6b565b6000614bb68383614e56565b614b6983836020015184614b7c565b600080614bd0614e66565b90506000614bde8683614f39565b90506000614bf582606001518360200151856153df565b90506000614c05838389896155f1565b90506000614c128261646e565b602081015181519192509060030b15614c8557898260400151604051602001614c3c9291906193d6565b60408051601f19818403018152908290527f08c379a0000000000000000000000000000000000000000000000000000000008252614c7c91600401619457565b60405180910390fd5b6000614cc86040518060400160405280601581526020017f4465706c6f79656420746f20616464726573733a20000000000000000000000081525083600161663d565b6040517fc6ce059d000000000000000000000000000000000000000000000000000000008152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c6ce059d90614d1b908490600401619457565b602060405180830381865afa158015614d38573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614d5c9190619003565b9b9a5050505050505050505050565b6040517f8d1cc9250000000000000000000000000000000000000000000000000000000081526000908190737109709ecfa91a80626ff3989d68f67f5b1dd12d90638d1cc92590614dc0908790600401619457565b600060405180830381865afa158015614ddd573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052614e059190810190619552565b90506000614e338285604051602001614e1f929190619587565b60405160208183030381529060405261683d565b90506001600160a01b038116614a6c578484604051602001614c3c9291906195b6565b614e6282826000616850565b5050565b604080518082018252600381527f6f75740000000000000000000000000000000000000000000000000000000000602082015290517fd145736c000000000000000000000000000000000000000000000000000000008152606091737109709ecfa91a80626ff3989d68f67f5b1dd12d91829063d145736c90614eed908490600401619661565b600060405180830381865afa158015614f0a573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052614f3291908101906196a8565b9250505090565b614f6b6040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b6000737109709ecfa91a80626ff3989d68f67f5b1dd12d9050614fb66040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b614fbf85616953565b60208201526000614fcf86616d38565b90506000836001600160a01b031663d930a0e66040518163ffffffff1660e01b8152600401600060405180830381865afa158015615011573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261503991908101906196a8565b8683856020015160405160200161505394939291906196f1565b60408051601f19818403018152908290527f60f9bb1100000000000000000000000000000000000000000000000000000000825291506000906001600160a01b038616906360f9bb11906150ab908590600401619457565b600060405180830381865afa1580156150c8573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526150f091908101906196a8565b6040517fdb4235f60000000000000000000000000000000000000000000000000000000081529091506001600160a01b0386169063db4235f6906151389084906004016197f5565b602060405180830381865afa158015615155573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906151799190619121565b61518e5781604051602001614c3c9190619847565b6040517f49c4fac80000000000000000000000000000000000000000000000000000000081526001600160a01b038616906349c4fac8906151d39084906004016198d9565b600060405180830381865afa1580156151f0573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261521891908101906196a8565b84526040517fdb4235f60000000000000000000000000000000000000000000000000000000081526001600160a01b0386169063db4235f69061525f90849060040161992b565b602060405180830381865afa15801561527c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906152a09190619121565b15615335576040517f49c4fac80000000000000000000000000000000000000000000000000000000081526001600160a01b038616906349c4fac8906152ea90849060040161992b565b600060405180830381865afa158015615307573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261532f91908101906196a8565b60408501525b846001600160a01b03166349c4fac882866000015160405160200161535a919061997d565b6040516020818303038152906040526040518363ffffffff1660e01b815260040161538692919061933e565b600060405180830381865afa1580156153a3573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526153cb91908101906196a8565b606085015250608083015250949350505050565b60408051600480825260a0820190925260609160009190816020015b60608152602001906001900390816153fb5790505090506040518060400160405280600481526020017f67726570000000000000000000000000000000000000000000000000000000008152508160008151811061545b5761545b6199e9565b60200260200101819052506040518060400160405280600381526020017f2d726c0000000000000000000000000000000000000000000000000000000000815250816001815181106154af576154af6199e9565b6020026020010181905250846040516020016154cb9190619a18565b604051602081830303815290604052816002815181106154ed576154ed6199e9565b6020026020010181905250826040516020016155099190619a84565b6040516020818303038152906040528160038151811061552b5761552b6199e9565b602002602001018190525060006155418261646e565b602080820151604080518082018252600581527f2e6a736f6e00000000000000000000000000000000000000000000000000000081850190815282518084018452600080825290860152825180840190935290518252928101929092529192506155d29060408051808201825260008082526020918201528151808301909252845182528085019082015290616fbb565b6155e75785604051602001614c3c9190619ac5565b9695505050505050565b60a0810151604080518082018252600080825260209182015281518083019092528251808352928101910152606090737109709ecfa91a80626ff3989d68f67f5b1dd12d9015615641565b511590565b6157b5578260200151156156fd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605860248201527f54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f742060448201527f62652075736564207768656e207468652060736b6970566572696679536f757260648201527f6365436f646560206f7074696f6e206973206074727565600000000000000000608482015260a401614c7c565b8260c00151156157b5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605360248201527f54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f742060448201527f62652075736564207768656e207468652060736b69704c6963656e736554797060648201527f6560206f7074696f6e2069732060747275656000000000000000000000000000608482015260a401614c7c565b6040805160ff8082526120008201909252600091816020015b60608152602001906001900390816157ce57905050905060006040518060400160405280600381526020017f6e7078000000000000000000000000000000000000000000000000000000000081525082828061582990619b56565b935060ff168151811061583e5761583e6199e9565b60200260200101819052506040518060400160405280600d81526020017f302e302e312d616c7068612e370000000000000000000000000000000000000081525060405160200161588f9190619b75565b6040516020818303038152906040528282806158aa90619b56565b935060ff16815181106158bf576158bf6199e9565b60200260200101819052506040518060400160405280600681526020017f6465706c6f79000000000000000000000000000000000000000000000000000081525082828061590c90619b56565b935060ff1681518110615921576159216199e9565b60200260200101819052506040518060400160405280600e81526020017f2d2d636f6e74726163744e616d6500000000000000000000000000000000000081525082828061596e90619b56565b935060ff1681518110615983576159836199e9565b6020026020010181905250876020015182828061599f90619b56565b935060ff16815181106159b4576159b46199e9565b60200260200101819052506040518060400160405280600e81526020017f2d2d636f6e747261637450617468000000000000000000000000000000000000815250828280615a0190619b56565b935060ff1681518110615a1657615a166199e9565b602090810291909101015287518282615a2e81619b56565b935060ff1681518110615a4357615a436199e9565b60200260200101819052506040518060400160405280600981526020017f2d2d636861696e49640000000000000000000000000000000000000000000000815250828280615a9090619b56565b935060ff1681518110615aa557615aa56199e9565b6020026020010181905250615ab94661701c565b8282615ac481619b56565b935060ff1681518110615ad957615ad96199e9565b60200260200101819052506040518060400160405280600f81526020017f2d2d6275696c64496e666f46696c650000000000000000000000000000000000815250828280615b2690619b56565b935060ff1681518110615b3b57615b3b6199e9565b602002602001018190525086828280615b5390619b56565b935060ff1681518110615b6857615b686199e9565b6020908102919091010152855115615c8f5760408051808201909152601581527f2d2d636f6e7374727563746f7242797465636f6465000000000000000000000060208201528282615bb981619b56565b935060ff1681518110615bce57615bce6199e9565b60209081029190910101526040517f71aad10d0000000000000000000000000000000000000000000000000000000081526001600160a01b038416906371aad10d90615c1e908990600401619457565b600060405180830381865afa158015615c3b573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052615c6391908101906196a8565b8282615c6e81619b56565b935060ff1681518110615c8357615c836199e9565b60200260200101819052505b846020015115615d5f5760408051808201909152601281527f2d2d766572696679536f75726365436f6465000000000000000000000000000060208201528282615cd881619b56565b935060ff1681518110615ced57615ced6199e9565b60200260200101819052506040518060400160405280600581526020017f66616c7365000000000000000000000000000000000000000000000000000000815250828280615d3a90619b56565b935060ff1681518110615d4f57615d4f6199e9565b6020026020010181905250615f26565b615d9761563c8660a0015160408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b615e2a5760408051808201909152600d81527f2d2d6c6963656e7365547970650000000000000000000000000000000000000060208201528282615dda81619b56565b935060ff1681518110615def57615def6199e9565b60200260200101819052508460a00151604051602001615e0f9190619a18565b604051602081830303815290604052828280615d3a90619b56565b8460c00151158015615e6d575060408089015181518083018352600080825260209182015282518084019093528151835290810190820152615e6b90511590565b155b15615f265760408051808201909152600d81527f2d2d6c6963656e7365547970650000000000000000000000000000000000000060208201528282615eb181619b56565b935060ff1681518110615ec657615ec66199e9565b6020026020010181905250615eda886170bc565b604051602001615eea9190619a18565b604051602081830303815290604052828280615f0590619b56565b935060ff1681518110615f1a57615f1a6199e9565b60200260200101819052505b60408086015181518083018352600080825260209182015282518084019093528151835290810190820152615f5a90511590565b615fef5760408051808201909152600b81527f2d2d72656c61796572496400000000000000000000000000000000000000000060208201528282615f9d81619b56565b935060ff1681518110615fb257615fb26199e9565b60200260200101819052508460400151828280615fce90619b56565b935060ff1681518110615fe357615fe36199e9565b60200260200101819052505b6060850151156161105760408051808201909152600681527f2d2d73616c7400000000000000000000000000000000000000000000000000006020820152828261603881619b56565b935060ff168151811061604d5761604d6199e9565b602090810291909101015260608501516040517fb11a19e800000000000000000000000000000000000000000000000000000000815260048101919091526001600160a01b0384169063b11a19e890602401600060405180830381865afa1580156160bc573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526160e491908101906196a8565b82826160ef81619b56565b935060ff1681518110616104576161046199e9565b60200260200101819052505b60e085015151156161b75760408051808201909152600a81527f2d2d6761734c696d6974000000000000000000000000000000000000000000006020820152828261615a81619b56565b935060ff168151811061616f5761616f6199e9565b602002602001018190525061618b8560e001516000015161701c565b828261619681619b56565b935060ff16815181106161ab576161ab6199e9565b60200260200101819052505b60e085015160200151156162615760408051808201909152600a81527f2d2d6761735072696365000000000000000000000000000000000000000000006020820152828261620481619b56565b935060ff1681518110616219576162196199e9565b60200260200101819052506162358560e001516020015161701c565b828261624081619b56565b935060ff1681518110616255576162556199e9565b60200260200101819052505b60e0850151604001511561630b5760408051808201909152600e81527f2d2d6d6178466565506572476173000000000000000000000000000000000000602082015282826162ae81619b56565b935060ff16815181106162c3576162c36199e9565b60200260200101819052506162df8560e001516040015161701c565b82826162ea81619b56565b935060ff16815181106162ff576162ff6199e9565b60200260200101819052505b60e085015160600151156163b55760408051808201909152601681527f2d2d6d61785072696f72697479466565506572476173000000000000000000006020820152828261635881619b56565b935060ff168151811061636d5761636d6199e9565b60200260200101819052506163898560e001516060015161701c565b828261639481619b56565b935060ff16815181106163a9576163a96199e9565b60200260200101819052505b60008160ff1667ffffffffffffffff8111156163d3576163d361946a565b60405190808252806020026020018201604052801561640657816020015b60608152602001906001900390816163f15790505b50905060005b8260ff168160ff16101561645f57838160ff168151811061642f5761642f6199e9565b6020026020010151828260ff168151811061644c5761644c6199e9565b602090810291909101015260010161640c565b5093505050505b949350505050565b6164956040518060600160405280600060030b815260200160608152602001606081525090565b60408051808201825260048082527f6261736800000000000000000000000000000000000000000000000000000000602083015291517fd145736c000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d92600091849163d145736c9161651b91869101619be0565b600060405180830381865afa158015616538573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261656091908101906196a8565b9050600061656e8683617bab565b90506000846001600160a01b031663f45c1ce7836040518263ffffffff1660e01b815260040161659e9190618ef5565b6000604051808303816000875af11580156165bd573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526165e59190810190619c27565b805190915060030b158015906165fe5750602081015151155b801561660d5750604081015151155b156155e75781600081518110616625576166256199e9565b6020026020010151604051602001614c3c9190619cdd565b606060006166728560408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6040805180820182526000808252602091820152815180830190925286518252808701908201529091506166a99082905b90617d00565b15616806576000616726826167208461671a6166ec8a60408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6040805180820182526000808252602091820152815180830190925282518252918201519181019190915290565b90617d27565b90617d89565b604080518082018252600181527f0a000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015290915061678a908290617d00565b156167f457604080518082018252600181527f0a00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526167f1905b8290617e0e565b90505b6167fd81617e34565b92505050614b69565b821561681f578484604051602001614c3c929190619ec9565b5050604080516020810190915260008152614b69565b509392505050565b6000808251602084016000f09392505050565b8160a001511561685f57505050565b600061686c848484617e9d565b905060006168798261646e565b602081015181519192509060030b1580156169155750604080518082018252600781527f535543434553530000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616915906040805180820182526000808252602091820152815180830190925284518252808501908201526166a3565b1561692257505050505050565b60408201515115616942578160400151604051602001614c3c9190619f70565b80604051602001614c3c9190619fce565b606060006169888360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600481527f2e736f6c00000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201529091506169ed905b8290616fbb565b15616a5c57604080518082018252600481527f2e736f6c0000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152614b6990616a57908390618438565b617e34565b604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616abe905b82906184c2565b600103616b8b57604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616b24906167ea565b50604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152614b6990616a57905b8390617e0e565b604080518082018252600581527f2e6a736f6e00000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616bea906169e6565b15616d2157604080518082018252600181527f2f00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820181905284518086019095529251845283015290616c5290839061855c565b905060008160018351616c659190619249565b81518110616c7557616c756199e9565b60200260200101519050616d18616a57616ceb6040518060400160405280600581526020017f2e6a736f6e00000000000000000000000000000000000000000000000000000081525060408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b60408051808201825260008082526020918201528151808301909252855182528086019082015290618438565b95945050505050565b82604051602001614c3c919061a039565b50919050565b60606000616d6d8360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600481527f2e736f6c0000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152909150616dcf906169e6565b15616ddd57614b6981617e34565b604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616e3c90616ab7565b600103616ea657604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152614b6990616a5790616b84565b604080518082018252600581527f2e6a736f6e00000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616f05906169e6565b15616d2157604080518082018252600181527f2f00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820181905284518086019095529251845283015290616f6d90839061855c565b9050600181511115616fa9578060028251616f889190619249565b81518110616f9857616f986199e9565b602002602001015192505050919050565b5082604051602001614c3c919061a039565b805182516000911115616fd057506000614a70565b81518351602085015160009291616fe69161925c565b616ff09190619249565b905082602001518103617007576001915050614a70565b82516020840151819020912014905092915050565b6060600061702983618601565b600101905060008167ffffffffffffffff8111156170495761704961946a565b6040519080825280601f01601f191660200182016040528015617073576020820181803683370190505b5090508181016020015b600019017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a850494508461707d57509392505050565b604081810151815180830183526000808252602091820181905283518085018552835181529282018383015283518085018552600a81527f554e4c4943454e5345440000000000000000000000000000000000000000000081840190815285518087018752838152840192909252845180860190955251845290830152606091617148905b82906186e3565b1561718857505060408051808201909152600481527f4e6f6e65000000000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600981527f556e6c6963656e73650000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526171e790617141565b1561722757505060408051808201909152600981527f556e6c6963656e736500000000000000000000000000000000000000000000006020820152919050565b604080518082018252600381527f4d495400000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261728690617141565b156172c657505060408051808201909152600381527f4d495400000000000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f47504c2d322e302d6f6e6c7900000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261732590617141565b8061738a5750604080518082018252601081527f47504c2d322e302d6f722d6c61746572000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261738a90617141565b156173ca57505060408051808201909152600981527f474e552047504c763200000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f47504c2d332e302d6f6e6c7900000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261742990617141565b8061748e5750604080518082018252601081527f47504c2d332e302d6f722d6c61746572000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261748e90617141565b156174ce57505060408051808201909152600981527f474e552047504c763300000000000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4c47504c2d322e312d6f6e6c79000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261752d90617141565b806175925750604080518082018252601181527f4c47504c2d322e312d6f722d6c617465720000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261759290617141565b156175d257505060408051808201909152600c81527f474e55204c47504c76322e3100000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4c47504c2d332e302d6f6e6c79000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261763190617141565b806176965750604080518082018252601181527f4c47504c2d332e302d6f722d6c617465720000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261769690617141565b156176d657505060408051808201909152600a81527f474e55204c47504c7633000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f4253442d322d436c6175736500000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261773590617141565b1561777557505060408051808201909152600c81527f4253442d322d436c6175736500000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f4253442d332d436c617573650000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526177d490617141565b1561781457505060408051808201909152600c81527f4253442d332d436c6175736500000000000000000000000000000000000000006020820152919050565b604080518082018252600781527f4d504c2d322e30000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261787390617141565b156178b357505060408051808201909152600781527f4d504c2d322e30000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600781527f4f534c2d332e30000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261791290617141565b1561795257505060408051808201909152600781527f4f534c2d332e30000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600a81527f4170616368652d322e3000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526179b190617141565b156179f157505060408051808201909152600a81527f4170616368652d322e30000000000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4147504c2d332e302d6f6e6c790000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617a5090617141565b80617ab55750604080518082018252601181527f4147504c2d332e302d6f722d6c6174657200000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617ab590617141565b15617af557505060408051808201909152600a81527f474e55204147504c7633000000000000000000000000000000000000000000006020820152919050565b604080518082018252600881527f4255534c2d312e3100000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617b5490617141565b15617b9457505060408051808201909152600781527f42534c20312e31000000000000000000000000000000000000000000000000006020820152919050565b60408084015184519151614c3c929060200161a117565b60608060005b8451811015617c365781858281518110617bcd57617bcd6199e9565b6020026020010151604051602001617be6929190619587565b604051602081830303815290604052915060018551617c059190619249565b8114617c2e5781604051602001617c1c919061a280565b60405160208183030381529060405291505b600101617bb1565b5060408051600380825260808201909252600091816020015b6060815260200190600190039081617c4f5790505090508381600081518110617c7a57617c7a6199e9565b60200260200101819052506040518060400160405280600281526020017f2d6300000000000000000000000000000000000000000000000000000000000081525081600181518110617cce57617cce6199e9565b60200260200101819052508181600281518110617ced57617ced6199e9565b6020908102919091010152949350505050565b6020808301518351835192840151600093617d1e92918491906186f7565b14159392505050565b60408051808201909152600080825260208201526000617d598460000151856020015185600001518660200151618808565b9050836020015181617d6b9190619249565b84518590617d7a908390619249565b90525060208401525090919050565b6040805180820190915260008082526020820152815183511015617dae575081614a70565b6020808301519084015160019114617dd55750815160208481015190840151829020919020145b8015617e0657825184518590617dec908390619249565b9052508251602085018051617e0290839061925c565b9052505b509192915050565b6040805180820190915260008082526020820152617e2d838383618928565b5092915050565b60606000826000015167ffffffffffffffff811115617e5557617e5561946a565b6040519080825280601f01601f191660200182016040528015617e7f576020820181803683370190505b5090506000602082019050617e2d81856020015186600001516189d3565b60606000617ea9614e66565b6040805160ff808252612000820190925291925060009190816020015b6060815260200190600190039081617ec657905050905060006040518060400160405280600381526020017f6e70780000000000000000000000000000000000000000000000000000000000815250828280617f2190619b56565b935060ff1681518110617f3657617f366199e9565b60200260200101819052506040518060400160405280600781526020017f5e312e33322e3300000000000000000000000000000000000000000000000000815250604051602001617f87919061a2c1565b604051602081830303815290604052828280617fa290619b56565b935060ff1681518110617fb757617fb76199e9565b60200260200101819052506040518060400160405280600881526020017f76616c696461746500000000000000000000000000000000000000000000000081525082828061800490619b56565b935060ff1681518110618019576180196199e9565b6020026020010181905250826040516020016180359190619a84565b60405160208183030381529060405282828061805090619b56565b935060ff1681518110618065576180656199e9565b60200260200101819052506040518060400160405280600a81526020017f2d2d636f6e7472616374000000000000000000000000000000000000000000008152508282806180b290619b56565b935060ff16815181106180c7576180c76199e9565b60200260200101819052506180dc8784618a4d565b82826180e781619b56565b935060ff16815181106180fc576180fc6199e9565b6020908102919091010152855151156181a85760408051808201909152600b81527f2d2d7265666572656e63650000000000000000000000000000000000000000006020820152828261814e81619b56565b935060ff1681518110618163576181636199e9565b602002602001018190525061817c866000015184618a4d565b828261818781619b56565b935060ff168151811061819c5761819c6199e9565b60200260200101819052505b8560800151156182165760408051808201909152601881527f2d2d756e73616665536b697053746f72616765436865636b0000000000000000602082015282826181f181619b56565b935060ff1681518110618206576182066199e9565b602002602001018190525061827c565b841561827c5760408051808201909152601281527f2d2d726571756972655265666572656e636500000000000000000000000000006020820152828261825b81619b56565b935060ff1681518110618270576182706199e9565b60200260200101819052505b604086015151156183185760408051808201909152600d81527f2d2d756e73616665416c6c6f7700000000000000000000000000000000000000602082015282826182c681619b56565b935060ff16815181106182db576182db6199e9565b602002602001018190525085604001518282806182f790619b56565b935060ff168151811061830c5761830c6199e9565b60200260200101819052505b8560600151156183825760408051808201909152601481527f2d2d756e73616665416c6c6f7752656e616d65730000000000000000000000006020820152828261836181619b56565b935060ff1681518110618376576183766199e9565b60200260200101819052505b60008160ff1667ffffffffffffffff8111156183a0576183a061946a565b6040519080825280602002602001820160405280156183d357816020015b60608152602001906001900390816183be5790505b50905060005b8260ff168160ff16101561842c57838160ff16815181106183fc576183fc6199e9565b6020026020010151828260ff1681518110618419576184196199e9565b60209081029190910101526001016183d9565b50979650505050505050565b604080518082019091526000808252602082015281518351101561845d575081614a70565b815183516020850151600092916184739161925c565b61847d9190619249565b6020840151909150600190821461849e575082516020840151819020908220145b80156184b9578351855186906184b5908390619249565b9052505b50929392505050565b60008082600001516184e68560000151866020015186600001518760200151618808565b6184f0919061925c565b90505b83516020850151618504919061925c565b8111617e2d57816185148161a306565b925050826000015161854b85602001518361852f9190619249565b865161853b9190619249565b8386600001518760200151618808565b618555919061925c565b90506184f3565b6060600061856a84846184c2565b61857590600161925c565b67ffffffffffffffff81111561858d5761858d61946a565b6040519080825280602002602001820160405280156185c057816020015b60608152602001906001900390816185ab5790505b50905060005b8151811015616835576185dc616a578686617e0e565b8282815181106185ee576185ee6199e9565b60209081029190910101526001016185c6565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000831061864a577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310618676576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc10000831061869457662386f26fc10000830492506010015b6305f5e10083106186ac576305f5e100830492506008015b61271083106186c057612710830492506004015b606483106186d2576064830492506002015b600a8310614a705760010192915050565b60006186ef8383618a8d565b159392505050565b6000808584116187fe57602084116187aa576000841561874257600161871e866020619249565b61872990600861a320565b61873490600261a41e565b61873e9190619249565b1990505b8351811685618751898961925c565b61875b9190619249565b805190935082165b8181146187955787841161877d5787945050505050616466565b836187878161a42a565b945050828451169050618763565b61879f878561925c565b945050505050616466565b8383206187b78588619249565b6187c1908761925c565b91505b8582106187fc578482208082036187e9576187df868461925c565b9350505050616466565b6187f4600184619249565b9250506187c4565b505b5092949350505050565b6000838186851161891357602085116188c25760008515618854576001618830876020619249565b61883b90600861a320565b61884690600261a41e565b6188509190619249565b1990505b845181166000876188658b8b61925c565b61886f9190619249565b855190915083165b8281146188b45781861061889c5761888f8b8b61925c565b9650505050505050616466565b856188a68161a306565b965050838651169050618877565b859650505050505050616466565b508383206000905b6188d48689619249565b8211618911578583208082036188f05783945050505050616466565b6188fb60018561925c565b93505081806189099061a306565b9250506188ca565b505b61891d878761925c565b979650505050505050565b6040805180820190915260008082526020820152600061895a8560000151866020015186600001518760200151618808565b6020808701805191860191909152519091506189769082619249565b835284516020860151618989919061925c565b810361899857600085526189ca565b835183516189a6919061925c565b855186906189b5908390619249565b90525083516189c4908261925c565b60208601525b50909392505050565b60208110618a0b57815183526189ea60208461925c565b92506189f760208361925c565b9150618a04602082619249565b90506189d3565b6000198115618a3a576001618a21836020619249565b618a2d9061010061a41e565b618a379190619249565b90505b9151835183169219169190911790915250565b60606000618a5b8484614f39565b8051602080830151604051939450618a759390910161a441565b60405160208183030381529060405291505092915050565b8151815160009190811115618aa0575081515b6020808501519084015160005b83811015618b595782518251808214618b29576000196020871015618b0857600184618ada896020619249565b618ae4919061925c565b618aef90600861a320565b618afa90600261a41e565b618b049190619249565b1990505b8181168382168181039114618b26579750614a709650505050505050565b50505b618b3460208661925c565b9450618b4160208561925c565b93505050602081618b52919061925c565b9050618aad565b50845186516155e7919061a499565b610b678061a4ba83390190565b61053f8061b02183390190565b61106f8061b56083390190565b611bb98061c5cf83390190565b6040518060e00160405280606081526020016060815260200160608152602001600015158152602001600015158152602001600015158152602001618bdf618be4565b905290565b60405180610100016040528060001515815260200160001515815260200160608152602001600080191681526020016060815260200160608152602001600015158152602001618bdf6040518060800160405280600081526020016000815260200160008152602001600081525090565b602080825282518282018190526000918401906040840190835b81811015618c965783516001600160a01b0316835260209384019390920191600101618c6f565b509095945050505050565b60005b83811015618cbc578181015183820152602001618ca4565b50506000910152565b60008151808452618cdd816020860160208601618ca1565b601f01601f19169290920160200192915050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015618ded577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452815180516001600160a01b03168652602090810151604082880181905281519088018190529101906060600582901b88018101919088019060005b81811015618dd3577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa08a8503018352618dbd848651618cc5565b6020958601959094509290920191600101618d83565b509197505050602094850194929092019150600101618d19565b50929695505050505050565b600081518084526020840193506020830160005b82811015618e4d5781517fffffffff0000000000000000000000000000000000000000000000000000000016865260209586019590910190600101618e0d565b5093949350505050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015618ded577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08786030184528151805160408752618ec36040880182618cc5565b9050602082015191508681036020880152618ede8183618df9565b965050506020938401939190910190600101618e7f565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015618ded577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452618f57858351618cc5565b94506020938401939190910190600101618f1d565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015618ded577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc087860301845281516001600160a01b0381511686526020810151905060406020870152618fed6040870182618df9565b9550506020938401939190910190600101618f94565b60006020828403121561901557600080fd5b81516001600160a01b0381168114614b6957600080fd5b610100815260056101008201527f544f4b454e000000000000000000000000000000000000000000000000000000610120820152610140602082015260036101408201527f544b4e000000000000000000000000000000000000000000000000000000000061016082015260006101808201905060ff88166040830152866060830152600386106190e6577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b8560808301528460a083015261910760c08301856001600160a01b03169052565b6001600160a01b03831660e0830152979650505050505050565b60006020828403121561913357600080fd5b81518015158114614b6957600080fd5b60006020828403121561915557600080fd5b5051919050565b60808152600061916f6080830187618cc5565b8560208401526001600160a01b0385166040840152828103606084015261891d8185618cc5565b60c0815260006191a960c0830189618cc5565b6001600160a01b038816602084015286604084015285606084015284608084015282810360a08401526191dc8185618cc5565b9998505050505050505050565b6080815260006191fc6080830187618cc5565b856020840152846040840152828103606084015261891d8185618cc5565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b81810381811115614a7057614a7061921a565b80820180821115614a7057614a7061921a565b6060815260006192826060830186618cc5565b60208301949094525060400152919050565b600181811c908216806192a857607f821691505b602082108103616d32577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6060815260006192f46060830186618cc5565b84602084015282810360408401526155e78185618cc5565b60608152600061931f6060830186618cc5565b90508360208301526001600160a01b0383166040830152949350505050565b6040815260006193516040830185618cc5565b8281036020840152614b658185618cc5565b60c08152600061937660c0830188618cc5565b6001600160a01b038716602084015285604084015284606084015283608084015282810360a084015260008152602081019150509695505050505050565b6001600160a01b03831681526040602082015260006164666040830184618cc5565b7f4661696c656420746f206465706c6f7920636f6e74726163742000000000000081526000835161940e81601a850160208801618ca1565b7f3a20000000000000000000000000000000000000000000000000000000000000601a91840191820152835161944b81601c840160208801618ca1565b01601c01949350505050565b602081526000614b696020830184618cc5565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040516060810167ffffffffffffffff811182821017156194bc576194bc61946a565b60405290565b60008067ffffffffffffffff8411156194dd576194dd61946a565b50604051601f19601f85018116603f0116810181811067ffffffffffffffff8211171561950c5761950c61946a565b60405283815290508082840185101561952457600080fd5b616835846020830185618ca1565b600082601f83011261954357600080fd5b614b69838351602085016194c2565b60006020828403121561956457600080fd5b815167ffffffffffffffff81111561957b57600080fd5b614a6c84828501619532565b60008351619599818460208801618ca1565b8351908301906195ad818360208801618ca1565b01949350505050565b7f4661696c656420746f206465706c6f7920636f6e7472616374200000000000008152600083516195ee81601a850160208801618ca1565b7f207573696e6720636f6e7374727563746f722064617461202200000000000000601a91840191820152835161962b816033840160208801618ca1565b7f220000000000000000000000000000000000000000000000000000000000000060339290910191820152603401949350505050565b60408152600b60408201527f464f554e4452595f4f55540000000000000000000000000000000000000000006060820152608060208201526000614b696080830184618cc5565b6000602082840312156196ba57600080fd5b815167ffffffffffffffff8111156196d157600080fd5b8201601f810184136196e257600080fd5b614a6c848251602084016194c2565b60008551619703818460208a01618ca1565b7f2f00000000000000000000000000000000000000000000000000000000000000908301908152855161973d816001840160208a01618ca1565b7f2f0000000000000000000000000000000000000000000000000000000000000060019290910191820152845161977b816002840160208901618ca1565b6001818301019150507f2f00000000000000000000000000000000000000000000000000000000000000600182015283516197bd816002840160208801618ca1565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600292909101918201526007019695505050505050565b6040815260006198086040830184618cc5565b8281036020840152600481527f2e6173740000000000000000000000000000000000000000000000000000000060208201526040810191505092915050565b7f436f756c64206e6f742066696e642041535420696e206172746966616374200081526000825161987f81601f850160208701618ca1565b7f2e205365742060617374203d20747275656020696e20666f756e6472792e746f601f9390910192830152507f6d6c000000000000000000000000000000000000000000000000000000000000603f820152604101919050565b6040815260006198ec6040830184618cc5565b8281036020840152601181527f2e6173742e6162736f6c7574655061746800000000000000000000000000000060208201526040810191505092915050565b60408152600061993e6040830184618cc5565b8281036020840152600c81527f2e6173742e6c6963656e7365000000000000000000000000000000000000000060208201526040810191505092915050565b7f2e6d657461646174612e736f75726365732e5b270000000000000000000000008152600082516199b5816014850160208701618ca1565b7f275d2e6b656363616b32353600000000000000000000000000000000000000006014939091019283015250602001919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f2200000000000000000000000000000000000000000000000000000000000000815260008251619a50816001850160208701618ca1565b7f22000000000000000000000000000000000000000000000000000000000000006001939091019283015250600201919050565b60008251619a96818460208701618ca1565b7f2f6275696c642d696e666f000000000000000000000000000000000000000000920191825250600b01919050565b7f436f756c64206e6f742066696e64206275696c642d696e666f2066696c65207781527f697468206d61746368696e6720736f7572636520636f6465206861736820666f60208201527f7220636f6e747261637420000000000000000000000000000000000000000000604082015260008251619b4981604b850160208701618ca1565b91909101604b0192915050565b600060ff821660ff8103619b6c57619b6c61921a565b60010192915050565b7f406f70656e7a657070656c696e2f646566656e6465722d6465706c6f792d636c81527f69656e742d636c69400000000000000000000000000000000000000000000000602082015260008251619bd3816029850160208701618ca1565b9190910160290192915050565b60408152601660408201527f4f50454e5a455050454c494e5f424153485f50415448000000000000000000006060820152608060208201526000614b696080830184618cc5565b600060208284031215619c3957600080fd5b815167ffffffffffffffff811115619c5057600080fd5b820160608185031215619c6257600080fd5b619c6a619499565b81518060030b8114619c7b57600080fd5b8152602082015167ffffffffffffffff811115619c9757600080fd5b619ca386828501619532565b602083015250604082015167ffffffffffffffff811115619cc357600080fd5b619ccf86828501619532565b604083015250949350505050565b7f4661696c656420746f2072756e206261736820636f6d6d616e6420776974682081527f2200000000000000000000000000000000000000000000000000000000000000602082015260008251619d3b816021850160208701618ca1565b7f222e20496620796f7520617265207573696e672057696e646f77732c2073657460219390910192830152507f20746865204f50454e5a455050454c494e5f424153485f5041544820656e766960418201527f726f6e6d656e74207661726961626c6520746f207468652066756c6c7920717560618201527f616c69666965642070617468206f66207468652062617368206578656375746160818201527f626c652e20466f72206578616d706c652c20696620796f75206172652075736960a18201527f6e672047697420666f722057696e646f77732c206164642074686520666f6c6c60c18201527f6f77696e67206c696e6520696e20746865202e656e762066696c65206f66207960e18201527f6f75722070726f6a65637420287573696e6720666f727761726420736c6173686101018201527f6573293a0a4f50454e5a455050454c494e5f424153485f504154483d22433a2f6101218201527f50726f6772616d2046696c65732f4769742f62696e2f6261736822000000000061014182015261015c01919050565b7f4661696c656420746f2066696e64206c696e652077697468207072656669782081527f2700000000000000000000000000000000000000000000000000000000000000602082015260008351619f27816021850160208801618ca1565b7f2720696e206f75747075743a20000000000000000000000000000000000000006021918401918201528351619f6481602e840160208801618ca1565b01602e01949350505050565b7f4661696c656420746f2072756e2075706772616465207361666574792076616c81527f69646174696f6e3a200000000000000000000000000000000000000000000000602082015260008251619bd3816029850160208701618ca1565b7f55706772616465207361666574792076616c69646174696f6e206661696c656481527f3a0a00000000000000000000000000000000000000000000000000000000000060208201526000825161a02c816022850160208701618ca1565b9190910160220192915050565b7f436f6e7472616374206e616d652000000000000000000000000000000000000081526000825161a07181600e850160208701618ca1565b7f206d75737420626520696e2074686520666f726d6174204d79436f6e74726163600e9390910192830152507f742e736f6c3a4d79436f6e7472616374206f72204d79436f6e74726163742e73602e8201527f6f6c206f72206f75742f4d79436f6e74726163742e736f6c2f4d79436f6e7472604e8201527f6163742e6a736f6e000000000000000000000000000000000000000000000000606e820152607601919050565b7f53504458206c6963656e7365206964656e74696669657220000000000000000081526000835161a14f816018850160208801618ca1565b7f20696e2000000000000000000000000000000000000000000000000000000000601891840191820152835161a18c81601c840160208801618ca1565b7f20646f6573206e6f74206c6f6f6b206c696b65206120737570706f7274656420601c92909101918201527f6c6963656e736520666f7220626c6f636b206578706c6f726572207665726966603c8201527f69636174696f6e2e205573652074686520606c6963656e73655479706560206f605c8201527f7074696f6e20746f20737065636966792061206c6963656e736520747970652c607c8201527f206f7220736574207468652060736b69704c6963656e73655479706560206f70609c8201527f74696f6e20746f2060747275656020746f20736b69702e00000000000000000060bc82015260d301949350505050565b6000825161a292818460208701618ca1565b7f2000000000000000000000000000000000000000000000000000000000000000920191825250600101919050565b7f406f70656e7a657070656c696e2f75706772616465732d636f7265400000000081526000825161a2f981601c850160208701618ca1565b91909101601c0192915050565b6000600019820361a3195761a31961921a565b5060010190565b8082028115828204841417614a7057614a7061921a565b6001815b600184111561a3725780850481111561a3565761a35661921a565b600184161561a36457908102905b60019390931c92800261a33b565b935093915050565b60008261a38957506001614a70565b8161a39657506000614a70565b816001811461a3ac576002811461a3b65761a3d2565b6001915050614a70565b60ff84111561a3c75761a3c761921a565b50506001821b614a70565b5060208310610133831016604e8410600b841016171561a3f5575081810a614a70565b61a402600019848461a337565b806000190482111561a4165761a41661921a565b029392505050565b6000614b69838361a37a565b60008161a4395761a43961921a565b506000190190565b6000835161a453818460208801618ca1565b7f3a00000000000000000000000000000000000000000000000000000000000000908301908152835161a48d816001840160208801618ca1565b01600101949350505050565b8181036000831280158383131683831282161715617e2d57617e2d61921a56fe60c0604052600d60809081526c2bb930b83832b21022ba3432b960991b60a05260009061002c9082610114565b506040805180820190915260048152630ae8aa8960e31b60208201526001906100559082610114565b506002805460ff1916601217905534801561006f57600080fd5b506101d2565b634e487b7160e01b600052604160045260246000fd5b600181811c9082168061009f57607f821691505b6020821081036100bf57634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111561010f57806000526020600020601f840160051c810160208510156100ec5750805b601f840160051c820191505b8181101561010c57600081556001016100f8565b50505b505050565b81516001600160401b0381111561012d5761012d610075565b6101418161013b845461008b565b846100c5565b6020601f821160018114610175576000831561015d5750848201515b600019600385901b1c1916600184901b17845561010c565b600084815260208120601f198516915b828110156101a55787850151825560209485019460019092019101610185565b50848210156101c35786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b610986806101e16000396000f3fe6080604052600436106100c05760003560e01c8063313ce56711610074578063a9059cbb1161004e578063a9059cbb146101fa578063d0e30db01461021a578063dd62ed3e1461022257600080fd5b8063313ce5671461018c57806370a08231146101b857806395d89b41146101e557600080fd5b806318160ddd116100a557806318160ddd1461012f57806323b872dd1461014c5780632e1a7d4d1461016c57600080fd5b806306fdde03146100d4578063095ea7b3146100ff57600080fd5b366100cf576100cd61025a565b005b600080fd5b3480156100e057600080fd5b506100e96102b5565b6040516100f69190610745565b60405180910390f35b34801561010b57600080fd5b5061011f61011a3660046107da565b610343565b60405190151581526020016100f6565b34801561013b57600080fd5b50475b6040519081526020016100f6565b34801561015857600080fd5b5061011f610167366004610804565b6103bd565b34801561017857600080fd5b506100cd610187366004610841565b610647565b34801561019857600080fd5b506002546101a69060ff1681565b60405160ff90911681526020016100f6565b3480156101c457600080fd5b5061013e6101d336600461085a565b60036020526000908152604090205481565b3480156101f157600080fd5b506100e9610724565b34801561020657600080fd5b5061011f6102153660046107da565b610731565b6100cd61025a565b34801561022e57600080fd5b5061013e61023d366004610875565b600460209081526000928352604080842090915290825290205481565b33600090815260036020526040812080543492906102799084906108d7565b909155505060405134815233907fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c9060200160405180910390a2565b600080546102c2906108ea565b80601f01602080910402602001604051908101604052809291908181526020018280546102ee906108ea565b801561033b5780601f106103105761010080835404028352916020019161033b565b820191906000526020600020905b81548152906001019060200180831161031e57829003601f168201915b505050505081565b33600081815260046020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925906103ab9086815260200190565b60405180910390a35060015b92915050565b73ffffffffffffffffffffffffffffffffffffffff831660009081526003602052604081205482111561042b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600060248201526044015b60405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff841633148015906104a1575073ffffffffffffffffffffffffffffffffffffffff841660009081526004602090815260408083203384529091529020547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff14155b156105605773ffffffffffffffffffffffffffffffffffffffff8416600090815260046020908152604080832033845290915290205482111561051a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526020600482015260006024820152604401610422565b73ffffffffffffffffffffffffffffffffffffffff841660009081526004602090815260408083203384529091528120805484929061055a90849061093d565b90915550505b73ffffffffffffffffffffffffffffffffffffffff84166000908152600360205260408120805484929061059590849061093d565b909155505073ffffffffffffffffffffffffffffffffffffffff8316600090815260036020526040812080548492906105cf9084906108d7565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161063591815260200190565b60405180910390a35060019392505050565b3360009081526003602052604090205481111561069a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526020600482015260006024820152604401610422565b33600090815260036020526040812080548392906106b990849061093d565b9091555050604051339082156108fc029083906000818181858888f193505050501580156106eb573d6000803e3d6000fd5b5060405181815233907f7fcf532c15f0a6db0bd6d0e038bea71d30d808c7d98cb3bf7268a95bf5081b659060200160405180910390a250565b600180546102c2906108ea565b600061073e3384846103bd565b9392505050565b602081526000825180602084015260005b818110156107735760208186018101516040868401015201610756565b5060006040828501015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011684010191505092915050565b803573ffffffffffffffffffffffffffffffffffffffff811681146107d557600080fd5b919050565b600080604083850312156107ed57600080fd5b6107f6836107b1565b946020939093013593505050565b60008060006060848603121561081957600080fd5b610822846107b1565b9250610830602085016107b1565b929592945050506040919091013590565b60006020828403121561085357600080fd5b5035919050565b60006020828403121561086c57600080fd5b61073e826107b1565b6000806040838503121561088857600080fd5b610891836107b1565b915061089f602084016107b1565b90509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b808201808211156103b7576103b76108a8565b600181811c908216806108fe57607f821691505b602082108103610937577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b818103818111156103b7576103b76108a856fea264697066735822122008d7fc4e09519c5dd9f356b03596f6829a151d0bc7682533f9ceab4e459f5ee264736f6c634300081a00336080604052348015600f57600080fd5b506105208061001f6000396000f3fe60806040526004361061002a5760003560e01c806369582bee14610033578063de43156e1461005357005b3661003157005b005b34801561003f57600080fd5b5061003161004e3660046101ba565b610073565b34801561005f57600080fd5b5061003161006e3660046101ba565b6100ee565b6060811561008a5761008782840184610273565b90505b7ffdc887992b033668833927e252058e468fac0b6bd196d520f09c61b740e999486100b58780610369565b6100c560408a0160208b016103ce565b896040013533866040516100de969594939291906103f0565b60405180910390a1505050505050565b606081156101055761010282840184610273565b90505b7fcdc8ee677dc5ebe680fb18cebda5e26ba5ea1f0ba504a47e2a9a2ecb476dc98e6100b58780610369565b60006060828403121561014257600080fd5b50919050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461016c57600080fd5b919050565b60008083601f84011261018357600080fd5b50813567ffffffffffffffff81111561019b57600080fd5b6020830191508360208285010111156101b357600080fd5b9250929050565b6000806000806000608086880312156101d257600080fd5b853567ffffffffffffffff8111156101e957600080fd5b6101f588828901610130565b95505061020460208701610148565b935060408601359250606086013567ffffffffffffffff81111561022757600080fd5b61023388828901610171565b969995985093965092949392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60006020828403121561028557600080fd5b813567ffffffffffffffff81111561029c57600080fd5b8201601f810184136102ad57600080fd5b803567ffffffffffffffff8111156102c7576102c7610244565b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8501160116810181811067ffffffffffffffff8211171561033357610333610244565b60405281815282820160200186101561034b57600080fd5b81602084016020830137600091810160200191909152949350505050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261039e57600080fd5b83018035915067ffffffffffffffff8211156103b957600080fd5b6020019150368190038213156101b357600080fd5b6000602082840312156103e057600080fd5b6103e982610148565b9392505050565b60a081528560a0820152858760c0830137600060c0878301015260007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f880116820173ffffffffffffffffffffffffffffffffffffffff8716602084015285604084015273ffffffffffffffffffffffffffffffffffffffff8516606084015260c083820301608084015283518060c083015260005b818110156104a557602081870181015184830160e0015201610488565b50600060e0838301810191909152601f9091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016909101019897505050505050505056fea2646970667358221220f4d1ccb9c8450e782e1c77412473fd37637a5c83a2a3272307d8c8bc8e8c7a3364736f6c634300081a003360c060405234801561001057600080fd5b5060405161106f38038061106f83398101604081905261002f916100db565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461006357604051632b2add3d60e01b815260040160405180910390fd5b600380546001600160a01b0319166001600160a01b0385811691909117909155828116608052811660a0526040517f80699e81136d69cb8367ad52a994e25c722a86da654b561d0c14b61a777e7ac590600090a150505061011e565b80516001600160a01b03811681146100d657600080fd5b919050565b6000806000606084860312156100f057600080fd5b6100f9846100bf565b9250610107602085016100bf565b9150610115604085016100bf565b90509250925092565b60805160a051610f2561014a60003960006101e50152600081816102b9015261045b0152610f256000f3fe608060405234801561001057600080fd5b50600436106100f55760003560e01c806397770dff11610097578063c63585cc11610066578063c63585cc14610273578063d7fd7afb14610286578063d936a012146102b4578063ee2815ba146102db57600080fd5b806397770dff1461021a578063a7cb05071461022d578063c39aca3714610240578063c62178ac1461025357600080fd5b8063513a9c05116100d3578063513a9c051461018a578063569541b9146101c0578063842da36d146101e057806391dd645f1461020757600080fd5b80630be15547146100fa5780631f0e251b1461015a5780633ce4a5bc1461016f575b600080fd5b610130610108366004610bd1565b60016020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b61016d610168366004610c13565b6102ee565b005b61013073735b14bb79463307aacbed86daf3322b1e6226ab81565b610130610198366004610bd1565b60026020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b6003546101309073ffffffffffffffffffffffffffffffffffffffff1681565b6101307f000000000000000000000000000000000000000000000000000000000000000081565b61016d610215366004610c35565b610402565b61016d610228366004610c13565b610526565b61016d61023b366004610c61565b610633565b61016d61024e366004610c83565b6106ce565b6004546101309073ffffffffffffffffffffffffffffffffffffffff1681565b610130610281366004610d53565b6108cd565b6102a6610294366004610bd1565b60006020819052908152604090205481565b604051908152602001610151565b6101307f000000000000000000000000000000000000000000000000000000000000000081565b61016d6102e9366004610c35565b610a02565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461033b576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116610388576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600480547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527f3ade88e3922d64780e1bf4460d364c2970b69da813f9c0c07a1c187b5647636c906020015b60405180910390a150565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461044f576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600354600090610497907f00000000000000000000000000000000000000000000000000000000000000009073ffffffffffffffffffffffffffffffffffffffff16846108cd565b60008481526002602090815260409182902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff85169081179091558251878152918201529192507f0ecec485166da6139b13bb7e033e9446e2d35348e80ebf1180d4afe2dba1704e910160405180910390a1505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610573576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff81166105c0576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527fdba79d534382d1a8ae108e4c8ecb27c6ae42ab8b91d44eedf88bd329f3868d5e906020016103f7565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610680576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000828152602081815260409182902083905581518481529081018390527f49f492222906ac486c3c1401fa545626df1f0c0e5a77a05597ea2ed66af9850d91015b60405180910390a15050565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461071b576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff831673735b14bb79463307aacbed86daf3322b1e6226ab1480610768575073ffffffffffffffffffffffffffffffffffffffff831630145b1561079f576040517f82d5d76a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f47e7ef2400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152602482018690528616906347e7ef24906044016020604051808303816000875af1158015610814573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108389190610d96565b506040517fde43156e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84169063de43156e906108939089908990899088908890600401610e01565b600060405180830381600087803b1580156108ad57600080fd5b505af11580156108c1573d6000803e3d6000fd5b50505050505050505050565b60008060006108dc8585610ad3565b6040517fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606084811b8216602084015283901b16603482015291935091508690604801604051602081830303815290604052805190602001206040516020016109c29291907fff00000000000000000000000000000000000000000000000000000000000000815260609290921b7fffffffffffffffffffffffffffffffffffffffff00000000000000000000000016600183015260158201527f96e8ac4277198ff8b6f785478aa9a39f403cb768dd02cbee326c3e7da348845f603582015260550190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291905280516020909101209695505050505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610a4f576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008281526001602090815260409182902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff85169081179091558251858152918201527fd1b36d30f6248e97c473b4d1348ca164a4ef6759022f54a58ec200326c39c45d91016106c2565b6000808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603610b3b576040517fcb1e7cfe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1610610b75578284610b78565b83835b909250905073ffffffffffffffffffffffffffffffffffffffff8216610bca576040517f78b507da00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b9250929050565b600060208284031215610be357600080fd5b5035919050565b803573ffffffffffffffffffffffffffffffffffffffff81168114610c0e57600080fd5b919050565b600060208284031215610c2557600080fd5b610c2e82610bea565b9392505050565b60008060408385031215610c4857600080fd5b82359150610c5860208401610bea565b90509250929050565b60008060408385031215610c7457600080fd5b50508035926020909101359150565b60008060008060008060a08789031215610c9c57600080fd5b863567ffffffffffffffff811115610cb357600080fd5b87016060818a031215610cc557600080fd5b9550610cd360208801610bea565b945060408701359350610ce860608801610bea565b9250608087013567ffffffffffffffff811115610d0457600080fd5b8701601f81018913610d1557600080fd5b803567ffffffffffffffff811115610d2c57600080fd5b896020828401011115610d3e57600080fd5b60208201935080925050509295509295509295565b600080600060608486031215610d6857600080fd5b610d7184610bea565b9250610d7f60208501610bea565b9150610d8d60408501610bea565b90509250925092565b600060208284031215610da857600080fd5b81518015158114610c2e57600080fd5b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b60808152600086357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1883603018112610e3957600080fd5b870160208101903567ffffffffffffffff811115610e5657600080fd5b803603821315610e6557600080fd5b60606080850152610e7a60e085018284610db8565b91505073ffffffffffffffffffffffffffffffffffffffff610e9e60208a01610bea565b1660a0840152604088013560c084015273ffffffffffffffffffffffffffffffffffffffff871660208401528560408401528281036060840152610ee3818587610db8565b9897505050505050505056fea2646970667358221220431a07541a491b54259bdf8fcd05ade6751bfbbf0e72e605f27325b56d7d464f64736f6c634300081a003360e060405234801561001057600080fd5b50604051611bb9380380611bb983398101604081905261002f9161020e565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461006357604051632b2add3d60e01b815260040160405180910390fd5b6001600160a01b038216158061008057506001600160a01b038116155b1561009e5760405163d92e233d60e01b815260040160405180910390fd5b60066100aa8982610360565b5060076100b78882610360565b5060ff861660c05260808590528360028111156100d6576100d661041e565b60a08160028111156100ea576100ea61041e565b905250600192909255600080546001600160a01b039283166001600160a01b03199182161790915560088054929093169116179055506104349350505050565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261015157600080fd5b81516001600160401b0381111561016a5761016a61012a565b604051601f8201601f19908116603f011681016001600160401b03811182821017156101985761019861012a565b6040528181528382016020018510156101b057600080fd5b60005b828110156101cf576020818601810151838301820152016101b3565b506000918101602001919091529392505050565b8051600381106101f257600080fd5b919050565b80516001600160a01b03811681146101f257600080fd5b600080600080600080600080610100898b03121561022b57600080fd5b88516001600160401b0381111561024157600080fd5b61024d8b828c01610140565b60208b015190995090506001600160401b0381111561026b57600080fd5b6102778b828c01610140565b975050604089015160ff8116811461028e57600080fd5b60608a015190965094506102a460808a016101e3565b60a08a015190945092506102ba60c08a016101f7565b91506102c860e08a016101f7565b90509295985092959890939650565b600181811c908216806102eb57607f821691505b60208210810361030b57634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111561035b57806000526020600020601f840160051c810160208510156103385750805b601f840160051c820191505b818110156103585760008155600101610344565b50505b505050565b81516001600160401b038111156103795761037961012a565b61038d8161038784546102d7565b84610311565b6020601f8211600181146103c157600083156103a95750848201515b600019600385901b1c1916600184901b178455610358565b600084815260208120601f198516915b828110156103f157878501518255602094850194600190920191016103d1565b508482101561040f5786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b634e487b7160e01b600052602160045260246000fd5b60805160a05160c05161174861047160003960006102170152600061033a0152600081816102eb01528181610ad70152610bdd01526117486000f3fe608060405234801561001057600080fd5b50600436106101985760003560e01c80638b851b95116100e3578063ccc775991161008c578063eddeb12311610066578063eddeb12314610431578063f2441b3214610444578063f687d12a1461046457600080fd5b8063ccc77599146103a4578063d9eeebed146103b7578063dd62ed3e146103eb57600080fd5b8063a9059cbb116100bd578063a9059cbb14610369578063c70126261461037c578063c835d7cc1461038f57600080fd5b80638b851b951461030d57806395d89b411461032d578063a3413d031461033557600080fd5b80633ce4a5bc116101455780634d8943bb1161011f5780634d8943bb146102a757806370a08231146102b057806385e1f4d0146102e657600080fd5b80633ce4a5bc1461024157806342966c681461028157806347e7ef241461029457600080fd5b806318160ddd1161017657806318160ddd146101f557806323b872dd146101fd578063313ce5671461021057600080fd5b806306fdde031461019d578063091d2788146101bb578063095ea7b3146101d2575b600080fd5b6101a5610477565b6040516101b29190611327565b60405180910390f35b6101c460015481565b6040519081526020016101b2565b6101e56101e0366004611366565b610509565b60405190151581526020016101b2565b6005546101c4565b6101e561020b366004611392565b610520565b60405160ff7f00000000000000000000000000000000000000000000000000000000000000001681526020016101b2565b61025c73735b14bb79463307aacbed86daf3322b1e6226ab81565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101b2565b6101e561028f3660046113d3565b6105b7565b6101e56102a2366004611366565b6105cb565b6101c460025481565b6101c46102be3660046113ec565b73ffffffffffffffffffffffffffffffffffffffff1660009081526003602052604090205490565b6101c47f000000000000000000000000000000000000000000000000000000000000000081565b60085461025c9073ffffffffffffffffffffffffffffffffffffffff1681565b6101a561071f565b61035c7f000000000000000000000000000000000000000000000000000000000000000081565b6040516101b29190611409565b6101e5610377366004611366565b61072e565b6101e561038a366004611479565b61073b565b6103a261039d3660046113ec565b61088a565b005b6103a26103b23660046113ec565b61099e565b6103bf610aab565b6040805173ffffffffffffffffffffffffffffffffffffffff90931683526020830191909152016101b2565b6101c46103f9366004611571565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260046020908152604080832093909416825291909152205490565b6103a261043f3660046113d3565b610cc9565b60005461025c9073ffffffffffffffffffffffffffffffffffffffff1681565b6103a26104723660046113d3565b610d4b565b606060068054610486906115aa565b80601f01602080910402602001604051908101604052809291908181526020018280546104b2906115aa565b80156104ff5780601f106104d4576101008083540402835291602001916104ff565b820191906000526020600020905b8154815290600101906020018083116104e257829003601f168201915b5050505050905090565b6000610516338484610dcd565b5060015b92915050565b600061052d848484610ed6565b73ffffffffffffffffffffffffffffffffffffffff8416600090815260046020908152604080832033845290915290205482811015610598576040517f10bad14700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6105ac85336105a7868561162c565b610dcd565b506001949350505050565b60006105c33383611091565b506001919050565b60003373735b14bb79463307aacbed86daf3322b1e6226ab14801590610609575060005473ffffffffffffffffffffffffffffffffffffffff163314155b801561062d575060085473ffffffffffffffffffffffffffffffffffffffff163314155b15610664576040517fddb5de5e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61066e83836111d3565b6040517f735b14bb79463307aacbed86daf3322b1e6226ab000000000000000000000000602082015273ffffffffffffffffffffffffffffffffffffffff8416907f67fc7bdaed5b0ec550d8706b87d60568ab70c6b781263c70101d54cd1564aab390603401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529082905261070e91869061163f565b60405180910390a250600192915050565b606060078054610486906115aa565b6000610516338484610ed6565b6000806000610748610aab565b6040517f23b872dd00000000000000000000000000000000000000000000000000000000815233600482015273735b14bb79463307aacbed86daf3322b1e6226ab602482015260448101829052919350915073ffffffffffffffffffffffffffffffffffffffff8316906323b872dd906064016020604051808303816000875af11580156107da573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107fe9190611661565b610834576040517f0a7cd6d600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61083e3385611091565b60025460405133917f9ffbffc04a397460ee1dbe8c9503e098090567d6b7f4b3c02a8617d800b6d9559161087791899189918791611683565b60405180910390a2506001949350505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab146108d7576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116610924576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527fd55614e962c5fd6ece71614f6348d702468a997a394dd5e5c1677950226d97ae906020015b60405180910390a150565b3373735b14bb79463307aacbed86daf3322b1e6226ab146109eb576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116610a38576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600880547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527f88815d964e380677e86d817e7d65dea59cb7b4c3b5b7a0c8ec7ea4a74f90a38790602001610993565b600080546040517f0be155470000000000000000000000000000000000000000000000000000000081527f000000000000000000000000000000000000000000000000000000000000000060048201528291829173ffffffffffffffffffffffffffffffffffffffff90911690630be1554790602401602060405180830381865afa158015610b3e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b6291906116b2565b905073ffffffffffffffffffffffffffffffffffffffff8116610bb1576040517f78fff39600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080546040517fd7fd7afb0000000000000000000000000000000000000000000000000000000081527f0000000000000000000000000000000000000000000000000000000000000000600482015273ffffffffffffffffffffffffffffffffffffffff9091169063d7fd7afb90602401602060405180830381865afa158015610c40573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c6491906116cf565b905080600003610ca0576040517fe661aed000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060025460015483610cb391906116e8565b610cbd91906116ff565b92959294509192505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610d16576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60028190556040518181527fef13af88e424b5d15f49c77758542c1938b08b8b95b91ed0751f98ba99000d8f90602001610993565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610d98576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018190556040518181527fff5788270f43bfc1ca41c503606d2594aa3023a1a7547de403a3e2f146a4a80a90602001610993565b73ffffffffffffffffffffffffffffffffffffffff8316610e1a576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216610e67576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff83811660008181526004602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8316610f23576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216610f70576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff831660009081526003602052604090205481811015610fd0576040517ffe382aa700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610fda828261162c565b73ffffffffffffffffffffffffffffffffffffffff808616600090815260036020526040808220939093559085168152908120805484929061101d9084906116ff565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161108391815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff82166110de576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff82166000908152600360205260409020548181101561113e576040517ffe382aa700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611148828261162c565b73ffffffffffffffffffffffffffffffffffffffff84166000908152600360205260408120919091556005805484929061118390849061162c565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90602001610ec9565b73ffffffffffffffffffffffffffffffffffffffff8216611220576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b806005600082825461123291906116ff565b909155505073ffffffffffffffffffffffffffffffffffffffff82166000908152600360205260408120805483929061126c9084906116ff565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6000815180845260005b818110156112e9576020818501810151868301820152016112cd565b5060006020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b60208152600061133a60208301846112c3565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff8116811461136357600080fd5b50565b6000806040838503121561137957600080fd5b823561138481611341565b946020939093013593505050565b6000806000606084860312156113a757600080fd5b83356113b281611341565b925060208401356113c281611341565b929592945050506040919091013590565b6000602082840312156113e557600080fd5b5035919050565b6000602082840312156113fe57600080fd5b813561133a81611341565b6020810160038310611444577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000806040838503121561148c57600080fd5b823567ffffffffffffffff8111156114a357600080fd5b8301601f810185136114b457600080fd5b803567ffffffffffffffff8111156114ce576114ce61144a565b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8501160116810181811067ffffffffffffffff8211171561153a5761153a61144a565b60405281815282820160200187101561155257600080fd5b8160208401602083013760006020928201830152969401359450505050565b6000806040838503121561158457600080fd5b823561158f81611341565b9150602083013561159f81611341565b809150509250929050565b600181811c908216806115be57607f821691505b6020821081036115f7577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8181038181111561051a5761051a6115fd565b60408152600061165260408301856112c3565b90508260208301529392505050565b60006020828403121561167357600080fd5b8151801515811461133a57600080fd5b60808152600061169660808301876112c3565b6020830195909552506040810192909252606090910152919050565b6000602082840312156116c457600080fd5b815161133a81611341565b6000602082840312156116e157600080fd5b5051919050565b808202811582820484141761051a5761051a6115fd565b8082018082111561051a5761051a6115fd56fea26469706673582212204013e39523742118b3f2227e145ee7e48176ba6aebead33c596dca2acb59a74c64736f6c634300081a0033a2646970667358221220c025e9dea1d8619a571ab4397033192191325b0159c135f1fd5418b81025380b64736f6c634300081a0033", } // GatewayZEVMInboundTestABI is the input ABI used to generate the binding from. @@ -697,6 +697,27 @@ func (_GatewayZEVMInboundTest *GatewayZEVMInboundTestTransactorSession) TestWith return _GatewayZEVMInboundTest.Contract.TestWithdrawAndCallZRC20FailsIfReceiverIsZeroAddress(&_GatewayZEVMInboundTest.TransactOpts) } +// TestWithdrawAndcallZETAFailsIfAmountIsReceiverIsZeroAddress is a paid mutator transaction binding the contract method 0x95c379c1. +// +// Solidity: function testWithdrawAndcallZETAFailsIfAmountIsReceiverIsZeroAddress() returns() +func (_GatewayZEVMInboundTest *GatewayZEVMInboundTestTransactor) TestWithdrawAndcallZETAFailsIfAmountIsReceiverIsZeroAddress(opts *bind.TransactOpts) (*types.Transaction, error) { + return _GatewayZEVMInboundTest.contract.Transact(opts, "testWithdrawAndcallZETAFailsIfAmountIsReceiverIsZeroAddress") +} + +// TestWithdrawAndcallZETAFailsIfAmountIsReceiverIsZeroAddress is a paid mutator transaction binding the contract method 0x95c379c1. +// +// Solidity: function testWithdrawAndcallZETAFailsIfAmountIsReceiverIsZeroAddress() returns() +func (_GatewayZEVMInboundTest *GatewayZEVMInboundTestSession) TestWithdrawAndcallZETAFailsIfAmountIsReceiverIsZeroAddress() (*types.Transaction, error) { + return _GatewayZEVMInboundTest.Contract.TestWithdrawAndcallZETAFailsIfAmountIsReceiverIsZeroAddress(&_GatewayZEVMInboundTest.TransactOpts) +} + +// TestWithdrawAndcallZETAFailsIfAmountIsReceiverIsZeroAddress is a paid mutator transaction binding the contract method 0x95c379c1. +// +// Solidity: function testWithdrawAndcallZETAFailsIfAmountIsReceiverIsZeroAddress() returns() +func (_GatewayZEVMInboundTest *GatewayZEVMInboundTestTransactorSession) TestWithdrawAndcallZETAFailsIfAmountIsReceiverIsZeroAddress() (*types.Transaction, error) { + return _GatewayZEVMInboundTest.Contract.TestWithdrawAndcallZETAFailsIfAmountIsReceiverIsZeroAddress(&_GatewayZEVMInboundTest.TransactOpts) +} + // TestWithdrawAndcallZETAFailsIfAmountIsZero is a paid mutator transaction binding the contract method 0xbcc52b9a. // // Solidity: function testWithdrawAndcallZETAFailsIfAmountIsZero() returns() diff --git a/v2/pkg/gatewayzevm.t.sol/gatewayzevmoutboundtest.go b/v2/pkg/gatewayzevm.t.sol/gatewayzevmoutboundtest.go index 2aa9c2fc..2b56bb29 100644 --- a/v2/pkg/gatewayzevm.t.sol/gatewayzevmoutboundtest.go +++ b/v2/pkg/gatewayzevm.t.sol/gatewayzevmoutboundtest.go @@ -50,7 +50,7 @@ type StdInvariantFuzzSelector struct { // GatewayZEVMOutboundTestMetaData contains all meta data concerning the GatewayZEVMOutboundTest contract. var GatewayZEVMOutboundTestMetaData = &bind.MetaData{ ABI: "[{\"type\":\"function\",\"name\":\"IS_TEST\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"PAUSER_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeArtifacts\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedArtifacts_\",\"type\":\"string[]\",\"internalType\":\"string[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeContracts\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedContracts_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeSelectors\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedSelectors_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzSelector[]\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"selectors\",\"type\":\"bytes4[]\",\"internalType\":\"bytes4[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeSenders\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedSenders_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"failed\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"setUp\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"targetArtifactSelectors\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedArtifactSelectors_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzArtifactSelector[]\",\"components\":[{\"name\":\"artifact\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"selectors\",\"type\":\"bytes4[]\",\"internalType\":\"bytes4[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetArtifacts\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedArtifacts_\",\"type\":\"string[]\",\"internalType\":\"string[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetContracts\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedContracts_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetInterfaces\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedInterfaces_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzInterface[]\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"artifacts\",\"type\":\"string[]\",\"internalType\":\"string[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetSelectors\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedSelectors_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzSelector[]\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"selectors\",\"type\":\"bytes4[]\",\"internalType\":\"bytes4[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetSenders\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedSenders_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"testDeposit\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositAndRevertZRC20AndCallZContract\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositAndRevertZRC20AndCallZContractFailsITargetIsFungibleModule\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositAndRevertZRC20AndCallZContractFailsITargetIsGateway\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositAndRevertZRC20AndCallZContractFailsIfAmountIsZero\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositAndRevertZRC20AndCallZContractFailsIfSenderIsNotFungibleModule\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositAndRevertZRC20AndCallZContractFailsIfTargetIsZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositAndRevertZRC20AndCallZContractFailsIfZrc20IsZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositFailsIfAmountIs0\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositFailsIfSenderNotFungibleModule\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositFailsIfTargetIsFungibleModule\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositFailsIfTargetIsGateway\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositFailsIfTargetIsZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositFailsIfZrc20IsZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositTogglePause\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositZETAAndCallZContract\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositZETAAndCallZContractFailsIfSenderIsNotFungibleModule\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositZETAAndCallZContractFailsIfTargetIsAmountIsZero\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositZETAAndCallZContractFailsIfTargetIsFungibleModule\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositZETAAndCallZContractFailsIfTargetIsGateway\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositZETAAndCallZContractFailsIfTargetIsZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositZRC20AndCallZContract\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositZRC20AndCallZContractFailsIfAmountIsZero\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositZRC20AndCallZContractFailsIfSenderIsNotFungibleModule\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositZRC20AndCallZContractFailsIfTargetIsZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositZRC20AndCallZContractFailsIfZrc20IsZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositZRC20AndCallZContractIfTargetIsFungibleModule\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositZRC20AndCallZContractIfTargetIsGateway\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testExecuteFailsIfAmountIsZero\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testExecuteFailsIfTargetIsZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testExecuteFailsIfZrc20IsZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testExecuteRevertZContract\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testExecuteRevertZContractFailsIfAmountIsZero\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testExecuteRevertZContractFailsIfTargetIsZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testExecuteRevertZContractFailsIfZrc20IsZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testExecuteRevertZContractIfSenderIsNotFungibleModule\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testExecuteZContract\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testExecuteZContractFailsIfSenderIsNotFungibleModule\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"event\",\"name\":\"Call\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"chainId\",\"type\":\"uint256\",\"indexed\":true,\"internalType\":\"uint256\"},{\"name\":\"receiver\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"message\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ContextData\",\"inputs\":[{\"name\":\"origin\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"chainID\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"msgSender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"message\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ContextDataRevert\",\"inputs\":[{\"name\":\"origin\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"chainID\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"msgSender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"message\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Withdrawal\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"chainId\",\"type\":\"uint256\",\"indexed\":true,\"internalType\":\"uint256\"},{\"name\":\"receiver\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"zrc20\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"gasfee\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"protocolFlatFee\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"message\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log\",\"inputs\":[{\"name\":\"\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_address\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_array\",\"inputs\":[{\"name\":\"val\",\"type\":\"uint256[]\",\"indexed\":false,\"internalType\":\"uint256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_array\",\"inputs\":[{\"name\":\"val\",\"type\":\"int256[]\",\"indexed\":false,\"internalType\":\"int256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_array\",\"inputs\":[{\"name\":\"val\",\"type\":\"address[]\",\"indexed\":false,\"internalType\":\"address[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_bytes\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_bytes32\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_int\",\"inputs\":[{\"name\":\"\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_address\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_array\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"uint256[]\",\"indexed\":false,\"internalType\":\"uint256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_array\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"int256[]\",\"indexed\":false,\"internalType\":\"int256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_array\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"address[]\",\"indexed\":false,\"internalType\":\"address[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_bytes\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_bytes32\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_decimal_int\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"},{\"name\":\"decimals\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_decimal_uint\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"decimals\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_int\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_string\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_uint\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_string\",\"inputs\":[{\"name\":\"\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_uint\",\"inputs\":[{\"name\":\"\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"logs\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"AccessControlUnauthorizedAccount\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"neededRole\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"type\":\"error\",\"name\":\"CallerIsNotFungibleModule\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"EnforcedPause\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"FailedZetaSent\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"GasFeeTransferFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientZRC20Amount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientZetaAmount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidTarget\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OnlyWZETAOrFungible\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"WithdrawalFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZRC20BurnFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZRC20DepositFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZRC20TransferFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZeroAddress\",\"inputs\":[]}]", - Bin: "0x6080604052600c8054600160ff199182168117909255601f80549091169091179055348015602c57600080fd5b5061fe508061003c6000396000f3fe608060405234801561001057600080fd5b506004361061034c5760003560e01c80637f924c4e116101bd578063c2725318116100f9578063e63ab1e9116100a2578063f5a357331161007c578063f5a357331461055a578063fa7626d414610562578063fc6734eb1461056f578063fc79171b1461057757600080fd5b8063e63ab1e914610515578063eba3c49c1461054a578063f06c08941461055257600080fd5b8063df690b9a116100d3578063df690b9a146104fd578063df881f6c14610505578063e20c9f711461050d57600080fd5b8063c2725318146104e5578063c3248272146104ed578063cced12c7146104f557600080fd5b8063996b767511610166578063aed71d9711610140578063aed71d97146104b5578063b0464fdc146104bd578063b5508aa9146104c5578063ba414fa6146104cd57600080fd5b8063996b76751461049d5780639b3272bf146104a55780639b86d40f146104ad57600080fd5b8063916a17c611610197578063916a17c61461047857806394d78f7b1461048d57806396d9d8761461049557600080fd5b80637f924c4e1461045357806382978ffc1461045b57806385226c811461046357600080fd5b806331d099561161028c578063461fc5af11610235578063612aa5491161020f578063612aa5491461042657806366d9a9a01461042e578063720b9aa9146104435780637243a2fb1461044b57600080fd5b8063461fc5af1461040e57806355ea935114610416578063597cfeb01461041e57600080fd5b80633e5e3c23116102665780633e5e3c23146103f65780633f7286f4146103fe57806344b2a40b1461040657600080fd5b806331d09956146103de5780633a25c460146103e65780633ab5b199146103ee57600080fd5b8063198d5ca4116102f95780631fe68797116102d35780631fe68797146103b1578063254ea181146103b95780632ade3880146103c157806330548465146103d657600080fd5b8063198d5ca4146103835780631c785a141461038b5780631ed7831c1461039357600080fd5b8063104b35221161032a578063104b35221461036b57806314b7a6da14610373578063191c9a9e1461037b57600080fd5b806309f080da1461035157806309f92c1f1461035b5780630a9254e414610363575b600080fd5b61035961057f565b005b610359610773565b610359610926565b610359611393565b610359611585565b6103596116eb565b61035961189c565b610359611b56565b61039b61249f565b6040516103a8919061a8fc565b60405180910390f35b610359612501565b610359612a30565b6103c9612be5565b6040516103a8919061a998565b610359612d27565b610359612edc565b61035961309b565b610359613256565b61039b613407565b61039b613467565b6103596134c7565b61035961364f565b61035961380d565b6103596139c0565b610359613d96565b610436613f49565b6040516103a8919061aafe565b6103596140cb565b61035961433e565b6103596144f1565b610359614543565b61046b614693565b6040516103a8919061ab9c565b610480614763565b6040516103a8919061ac13565b61035961485e565b610359614a0d565b610359614b60565b610359614cb4565b610359614e65565b610359615011565b61048061531d565b61046b615418565b6104d56154e8565b60405190151581526020016103a8565b6103596155bc565b610359615775565b61035961592e565b610359615b19565b610359615cd7565b61039b615e8c565b61053c7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b6040519081526020016103a8565b610359615eec565b6103596160aa565b61035961625f565b601f546104d59060ff1681565b610359616416565b6103596165c7565b60006040516020016105909061acaa565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401526001838301528151630618f58760e51b81527f2b2add3d0000000000000000000000000000000000000000000000000000000060048201529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163c31eb0e091602480830192600092919082900301818387803b15801561065a57600080fd5b505af115801561066e573d6000803e3d6000fd5b505060255460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b1580156106cb57600080fd5b505af11580156106df573d6000803e3d6000fd5b50506020546021546024546040517f5af659670000000000000000000000000000000000000000000000000000000081526001600160a01b039384169550635af65967945061073d938793811692600192911690899060040161ad25565b600060405180830381600087803b15801561075757600080fd5b505af115801561076b573d6000803e3d6000fd5b505050505050565b60006040516020016107849061acaa565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401819052600184840152825163ca669fa760e01b815260048101919091529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163ca669fa791602480830192600092919082900301818387803b15801561083257600080fd5b505af1158015610846573d6000803e3d6000fd5b5050604051630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b1580156108b657600080fd5b505af11580156108ca573d6000803e3d6000fd5b50506020546024546040517fbcf7f32b0000000000000000000000000000000000000000000000000000000081526001600160a01b03928316945063bcf7f32b935061073d92869260009260019290911690899060040161ad25565b602580547fffffffffffffffffffffffff000000000000000000000000000000000000000090811630179091556026805490911661123417905560405161096c9061a80f565b604051809103906000f080158015610988573d6000803e3d6000fd5b50602280547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03928316908117909155604080518082018252600f81527f476174657761795a45564d2e736f6c000000000000000000000000000000000060208201526025549151602481019390935292166044820152610a6c919060640160408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f485cc955000000000000000000000000000000000000000000000000000000001790526166fe565b601f80547fffffffffffffffffffffff0000000000000000000000000000000000000000ff166101006001600160a01b039384168102919091179182905560208054919092049092167fffffffffffffffffffffffff000000000000000000000000000000000000000090921682178155604080517f3ce4a5bc0000000000000000000000000000000000000000000000000000000081529051633ce4a5bc926004808401939192918290030181865afa158015610b2e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b52919061ad7a565b602780547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055604051610b969061a81c565b604051809103906000f080158015610bb2573d6000803e3d6000fd5b50602480547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039283161781556027546040517f06447d5600000000000000000000000000000000000000000000000000000000815292166004830152737109709ecfa91a80626ff3989d68f67f5b1dd12d916306447d569101600060405180830381600087803b158015610c4e57600080fd5b505af1158015610c62573d6000803e3d6000fd5b505050506000806000604051610c779061a829565b6001600160a01b03938416815291831660208301529091166040820152606001604051809103906000f080158015610cb3573d6000803e3d6000fd5b50602380547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03928316908117909155602054604051601293600193849360009391921690610d099061a836565b610d189695949392919061ada3565b604051809103906000f080158015610d34573d6000803e3d6000fd5b50602180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039283169081179091556023546040517fee2815ba0000000000000000000000000000000000000000000000000000000081526001600482015260248101929092529091169063ee2815ba90604401600060405180830381600087803b158015610dcb57600080fd5b505af1158015610ddf573d6000803e3d6000fd5b50506023546040517fa7cb050700000000000000000000000000000000000000000000000000000000815260016004820181905260248201526001600160a01b03909116925063a7cb05079150604401600060405180830381600087803b158015610e4957600080fd5b505af1158015610e5d573d6000803e3d6000fd5b50506027546040517fc88a5e6d0000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152633b9aca006024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c88a5e6d9150604401600060405180830381600087803b158015610edd57600080fd5b505af1158015610ef1573d6000803e3d6000fd5b50505050602260009054906101000a90046001600160a01b03166001600160a01b031663d0e30db0600a6040518263ffffffff1660e01b81526004016000604051808303818588803b158015610f4657600080fd5b505af1158015610f5a573d6000803e3d6000fd5b50506022546020546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152600a60248201529116935063095ea7b3925060440190506020604051808303816000875af1158015610fce573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ff2919061ae98565b506021546025546040517f47e7ef240000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620186a060248201529116906347e7ef24906044016020604051808303816000875af1158015611063573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611087919061ae98565b507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b03166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156110e657600080fd5b505af11580156110fa573d6000803e3d6000fd5b50506025546040517f06447d560000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506306447d569150602401600060405180830381600087803b15801561117057600080fd5b505af1158015611184573d6000803e3d6000fd5b50506021546020546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620186a060248201529116925063095ea7b391506044016020604051808303816000875af11580156111f8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061121c919061ae98565b50602260009054906101000a90046001600160a01b03166001600160a01b031663d0e30db0600a6040518263ffffffff1660e01b81526004016000604051808303818588803b15801561126e57600080fd5b505af1158015611282573d6000803e3d6000fd5b50506022546020546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152600a60248201529116935063095ea7b3925060440190506020604051808303816000875af11580156112f6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061131a919061ae98565b507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b03166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561137957600080fd5b505af115801561138d573d6000803e3d6000fd5b50505050565b6040516001906000906113a89060200161acaa565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401526001838301528151630618f58760e51b81527f82d5d76a0000000000000000000000000000000000000000000000000000000060048201529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163c31eb0e091602480830192600092919082900301818387803b15801561147257600080fd5b505af1158015611486573d6000803e3d6000fd5b505060275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b1580156114e357600080fd5b505af11580156114f7573d6000803e3d6000fd5b50506020546027546040517f21501a950000000000000000000000000000000000000000000000000000000081526001600160a01b0392831694506321501a95935061154e9286928992911690889060040161aeba565b600060405180830381600087803b15801561156857600080fd5b505af115801561157c573d6000803e3d6000fd5b50505050505050565b60275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156115de57600080fd5b505af11580156115f2573d6000803e3d6000fd5b5050604051630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b15801561166257600080fd5b505af1158015611676573d6000803e3d6000fd5b50506020546021546040517ff45346dc0000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260016024820152600060448201529116925063f45346dc91506064015b600060405180830381600087803b15801561137957600080fd5b60006040516020016116fc9061acaa565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401819052600184840152825163ca669fa760e01b815260048101919091529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163ca669fa791602480830192600092919082900301818387803b1580156117aa57600080fd5b505af11580156117be573d6000803e3d6000fd5b5050604051630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b15801561182e57600080fd5b505af1158015611842573d6000803e3d6000fd5b50506020546021546040517f309f50040000000000000000000000000000000000000000000000000000000081526001600160a01b03928316945063309f5004935061073d9286921690600190600090899060040161ad25565b6021546026546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260019260009216906370a0823190602401602060405180830381865afa158015611906573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061192a919061aef4565b905061193760008261671d565b60255460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561199057600080fd5b505af11580156119a4573d6000803e3d6000fd5b5050604051630618f58760e51b81527f2b2add3d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b158015611a1457600080fd5b505af1158015611a28573d6000803e3d6000fd5b50506020546021546026546040517ff45346dc0000000000000000000000000000000000000000000000000000000081526001600160a01b0392831660048201526024810188905290821660448201529116925063f45346dc9150606401600060405180830381600087803b158015611aa057600080fd5b505af1158015611ab4573d6000803e3d6000fd5b50506021546026546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260009450911691506370a0823190602401602060405180830381865afa158015611b20573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b44919061aef4565b9050611b5160008261671d565b505050565b60275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015611baf57600080fd5b505af1158015611bc3573d6000803e3d6000fd5b5050602754604080516001600160a01b0390921660248301527f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a60448084019190915281518084039091018152606490920181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb39250611cae919060040161af0d565b600060405180830381600087803b158015611cc857600080fd5b505af1158015611cdc573d6000803e3d6000fd5b50505050602060009054906101000a90046001600160a01b03166001600160a01b0316638456cb596040518163ffffffff1660e01b8152600401600060405180830381600087803b158015611d3057600080fd5b505af1158015611d44573d6000803e3d6000fd5b505060275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b158015611da157600080fd5b505af1158015611db5573d6000803e3d6000fd5b5050602754604080516001600160a01b0390921660248301527f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a60448084019190915281518084039091018152606490920181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb39250611ea0919060040161af0d565b600060405180830381600087803b158015611eba57600080fd5b505af1158015611ece573d6000803e3d6000fd5b50505050602060009054906101000a90046001600160a01b03166001600160a01b0316633f4ba83a6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015611f2257600080fd5b505af1158015611f36573d6000803e3d6000fd5b505060255460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b158015611f9357600080fd5b505af1158015611fa7573d6000803e3d6000fd5b50505050602060009054906101000a90046001600160a01b03166001600160a01b0316638456cb596040518163ffffffff1660e01b8152600401600060405180830381600087803b158015611ffb57600080fd5b505af115801561200f573d6000803e3d6000fd5b5050604051630618f58760e51b81527fd93c066500000000000000000000000000000000000000000000000000000000600482015260019250737109709ecfa91a80626ff3989d68f67f5b1dd12d915063c31eb0e090602401600060405180830381600087803b15801561208257600080fd5b505af1158015612096573d6000803e3d6000fd5b505060275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b1580156120f357600080fd5b505af1158015612107573d6000803e3d6000fd5b50506020546021546026546040517ff45346dc0000000000000000000000000000000000000000000000000000000081526001600160a01b0392831660048201526024810187905290821660448201529116925063f45346dc9150606401600060405180830381600087803b15801561217f57600080fd5b505af1158015612193573d6000803e3d6000fd5b505060255460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b1580156121f057600080fd5b505af1158015612204573d6000803e3d6000fd5b50505050602060009054906101000a90046001600160a01b03166001600160a01b0316633f4ba83a6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561225857600080fd5b505af115801561226c573d6000803e3d6000fd5b50506021546026546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260009450911691506370a08231906024015b602060405180830381865afa1580156122d9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122fd919061aef4565b905061230a60008261671d565b60275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561236357600080fd5b505af1158015612377573d6000803e3d6000fd5b50506020546021546026546040517ff45346dc0000000000000000000000000000000000000000000000000000000081526001600160a01b0392831660048201526024810188905290821660448201529116925063f45346dc9150606401600060405180830381600087803b1580156123ef57600080fd5b505af1158015612403573d6000803e3d6000fd5b50506021546026546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260009450911691506370a0823190602401602060405180830381865afa15801561246f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612493919061aef4565b9050611b51838261671d565b606060168054806020026020016040519081016040528092919081815260200182805480156124f757602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116124d9575b5050505050905090565b6022546027546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260019260009216906370a0823190602401602060405180830381865afa15801561256b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061258f919061aef4565b6022546020546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201529293506000929116906370a0823190602401602060405180830381865afa1580156125fa573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061261e919061aef4565b6024546040519192506001600160a01b031631906000906126419060200161acaa565b60408051601f19818403018152606080840190925260205490911b6bffffffffffffffffffffffff191660808301529150600090806094810160408051808303601f190181529181529082526027546001600160a01b03908116602084015260019282018390526024805492517f81bad6f300000000000000000000000000000000000000000000000000000000815260048101859052908101849052604481018490526064810193909352166084820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b15801561272f57600080fd5b505af1158015612743573d6000803e3d6000fd5b5050602080546040517fcdc8ee677dc5ebe680fb18cebda5e26ba5ea1f0ba504a47e2a9a2ecb476dc98e945061279e93506001600160a01b03909116910160609190911b6bffffffffffffffffffffffff1916815260140190565b60408051601f19818403018152908290526027546020546127ce936001600160a01b03928316928c92169061af20565b60405180910390a160275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561282f57600080fd5b505af1158015612843573d6000803e3d6000fd5b50506020546024546040517f21501a950000000000000000000000000000000000000000000000000000000081526001600160a01b0392831694506321501a95935061289a9286928c92911690889060040161aeba565b600060405180830381600087803b1580156128b457600080fd5b505af11580156128c8573d6000803e3d6000fd5b50506022546027546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260009450911691506370a0823190602401602060405180830381865afa158015612934573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612958919061aef4565b905061296d612967888861afc2565b8261671d565b6022546020546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260009291909116906370a0823190602401602060405180830381865afa1580156129d7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129fb919061aef4565b9050612a07868261671d565b612a26612a14898761afd5565b6024546001600160a01b03163161671d565b5050505050505050565b6000604051602001612a419061acaa565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401819052600184840152825163ca669fa760e01b815260048101919091529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163ca669fa791602480830192600092919082900301818387803b158015612aef57600080fd5b505af1158015612b03573d6000803e3d6000fd5b5050604051630618f58760e51b81527f5d67094f000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b158015612b7357600080fd5b505af1158015612b87573d6000803e3d6000fd5b50506020546021546024546040517fc39aca370000000000000000000000000000000000000000000000000000000081526001600160a01b03938416955063c39aca37945061073d938793811692600092911690899060040161ad25565b6060601e805480602002602001604051908101604052809291908181526020016000905b82821015612d1e57600084815260208082206040805180820182526002870290920180546001600160a01b03168352600181018054835181870281018701909452808452939591948681019491929084015b82821015612d07578382906000526020600020018054612c7a9061afe8565b80601f0160208091040260200160405190810160405280929190818152602001828054612ca69061afe8565b8015612cf35780601f10612cc857610100808354040283529160200191612cf3565b820191906000526020600020905b815481529060010190602001808311612cd657829003601f168201915b505050505081526020019060010190612c5b565b505050508152505081526020019060010190612c09565b50505050905090565b6000604051602001612d389061acaa565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401819052600184840152825163ca669fa760e01b815260048101919091529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163ca669fa791602480830192600092919082900301818387803b158015612de657600080fd5b505af1158015612dfa573d6000803e3d6000fd5b5050604051630618f58760e51b81527f5d67094f000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b158015612e6a57600080fd5b505af1158015612e7e573d6000803e3d6000fd5b50506020546021546024546040517f309f50040000000000000000000000000000000000000000000000000000000081526001600160a01b03938416955063309f5004945061073d938793811692600092911690899060040161ad25565b6000604051602001612eed9061acaa565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401526001838301528151630618f58760e51b81527f2b2add3d0000000000000000000000000000000000000000000000000000000060048201529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163c31eb0e091602480830192600092919082900301818387803b158015612fb757600080fd5b505af1158015612fcb573d6000803e3d6000fd5b505060255460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa791506024015b600060405180830381600087803b15801561302957600080fd5b505af115801561303d573d6000803e3d6000fd5b50506020546021546024546040517f309f50040000000000000000000000000000000000000000000000000000000081526001600160a01b03938416955063309f5004945061073d938793811692600192911690899060040161ad25565b6040516001906000906130b09060200161acaa565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401526001838301528151630618f58760e51b81527f2b2add3d0000000000000000000000000000000000000000000000000000000060048201529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163c31eb0e091602480830192600092919082900301818387803b15801561317a57600080fd5b505af115801561318e573d6000803e3d6000fd5b505060255460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b1580156131eb57600080fd5b505af11580156131ff573d6000803e3d6000fd5b50506020546024546040517f21501a950000000000000000000000000000000000000000000000000000000081526001600160a01b0392831694506321501a95935061154e9286928992911690889060040161aeba565b60006040516020016132679061acaa565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401819052600184840152825163ca669fa760e01b815260048101919091529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163ca669fa791602480830192600092919082900301818387803b15801561331557600080fd5b505af1158015613329573d6000803e3d6000fd5b5050604051630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b15801561339957600080fd5b505af11580156133ad573d6000803e3d6000fd5b50506020546021546040517fbcf7f32b0000000000000000000000000000000000000000000000000000000081526001600160a01b03928316945063bcf7f32b935061073d9286921690600190600090899060040161ad25565b606060188054806020026020016040519081016040528092919081815260200182805480156124f7576020028201919060005260206000209081546001600160a01b031681526001909101906020018083116124d9575050505050905090565b606060178054806020026020016040519081016040528092919081815260200182805480156124f7576020028201919060005260206000209081546001600160a01b031681526001909101906020018083116124d9575050505050905090565b60275460405163ca669fa760e01b81526001600160a01b039091166004820152600190737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561352357600080fd5b505af1158015613537573d6000803e3d6000fd5b5050604051630618f58760e51b81527f82d5d76a000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b1580156135a757600080fd5b505af11580156135bb573d6000803e3d6000fd5b50506020546021546027546040517ff45346dc0000000000000000000000000000000000000000000000000000000081526001600160a01b0392831660048201526024810187905290821660448201529116925063f45346dc91506064015b600060405180830381600087803b15801561363457600080fd5b505af1158015613648573d6000803e3d6000fd5b5050505050565b60006040516020016136609061acaa565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401526001838301528151630618f58760e51b81527f2b2add3d0000000000000000000000000000000000000000000000000000000060048201529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163c31eb0e091602480830192600092919082900301818387803b15801561372a57600080fd5b505af115801561373e573d6000803e3d6000fd5b505060255460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b15801561379b57600080fd5b505af11580156137af573d6000803e3d6000fd5b50506020546021546024546040517fc39aca370000000000000000000000000000000000000000000000000000000081526001600160a01b03938416955063c39aca37945061073d938793811692600192911690899060040161ad25565b600060405160200161381e9061acaa565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401819052600184840152825163ca669fa760e01b815260048101919091529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163ca669fa791602480830192600092919082900301818387803b1580156138cc57600080fd5b505af11580156138e0573d6000803e3d6000fd5b5050604051630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b15801561395057600080fd5b505af1158015613964573d6000803e3d6000fd5b50506020546024546040517f5af659670000000000000000000000000000000000000000000000000000000081526001600160a01b039283169450635af65967935061073d92869260009260019290911690899060040161ad25565b602154602480546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260009391909116916370a082319101602060405180830381865afa158015613a29573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a4d919061aef4565b9050613a5a60008261671d565b6000604051602001613a6b9061acaa565b60408051601f19818403018152606080840190925260205490911b6bffffffffffffffffffffffff191660808301529150600090806094810160408051808303601f190181529181529082526027546001600160a01b03908116602084015260019282018390526024805492517f81bad6f300000000000000000000000000000000000000000000000000000000815260048101859052908101849052604481018490526064810193909352166084820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b158015613b5957600080fd5b505af1158015613b6d573d6000803e3d6000fd5b5050602080546040517fcdc8ee677dc5ebe680fb18cebda5e26ba5ea1f0ba504a47e2a9a2ecb476dc98e9450613bc893506001600160a01b03909116910160609190911b6bffffffffffffffffffffffff1916815260140190565b60408051601f1981840301815290829052602754602054613bf9936001600160a01b0392831692600192169061af20565b60405180910390a160275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015613c5a57600080fd5b505af1158015613c6e573d6000803e3d6000fd5b50506020546021546024546040517fc39aca370000000000000000000000000000000000000000000000000000000081526001600160a01b03938416955063c39aca379450613ccc938793811692600192911690899060040161ad25565b600060405180830381600087803b158015613ce657600080fd5b505af1158015613cfa573d6000803e3d6000fd5b5050602154602480546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260009550921692506370a082319101602060405180830381865afa158015613d65573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613d89919061aef4565b905061138d60018261671d565b6000604051602001613da79061acaa565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401819052600184840152825163ca669fa760e01b815260048101919091529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163ca669fa791602480830192600092919082900301818387803b158015613e5557600080fd5b505af1158015613e69573d6000803e3d6000fd5b5050604051630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b158015613ed957600080fd5b505af1158015613eed573d6000803e3d6000fd5b50506020546024546040517fc39aca370000000000000000000000000000000000000000000000000000000081526001600160a01b03928316945063c39aca37935061073d92869260009260019290911690899060040161ad25565b6060601b805480602002602001604051908101604052809291908181526020016000905b82821015612d1e5783829060005260206000209060020201604051806040016040529081600082018054613fa09061afe8565b80601f0160208091040260200160405190810160405280929190818152602001828054613fcc9061afe8565b80156140195780601f10613fee57610100808354040283529160200191614019565b820191906000526020600020905b815481529060010190602001808311613ffc57829003601f168201915b50505050508152602001600182018054806020026020016040519081016040528092919081815260200182805480156140b357602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190600401906020826003010492830192600103820291508084116140605790505b50505050508152505081526020019060010190613f6d565b60006040516020016140dc9061acaa565b60408051601f19818403018152606080840190925260205490911b6bffffffffffffffffffffffff191660808301529150600090806094810160408051808303601f190181529181529082526027546001600160a01b03908116602084015260019282018390526024805492517f81bad6f300000000000000000000000000000000000000000000000000000000815260048101859052908101849052604481018490526064810193909352166084820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b1580156141ca57600080fd5b505af11580156141de573d6000803e3d6000fd5b5050602080546040517fcdc8ee677dc5ebe680fb18cebda5e26ba5ea1f0ba504a47e2a9a2ecb476dc98e945061423993506001600160a01b03909116910160609190911b6bffffffffffffffffffffffff1916815260140190565b60408051601f198184030181529082905260275460205461426a936001600160a01b0392831692600192169061af20565b60405180910390a160275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa7906024015b600060405180830381600087803b1580156142cc57600080fd5b505af11580156142e0573d6000803e3d6000fd5b50506020546021546024546040517fbcf7f32b0000000000000000000000000000000000000000000000000000000081526001600160a01b03938416955063bcf7f32b945061073d938793811692600192911690899060040161ad25565b600060405160200161434f9061acaa565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401819052600184840152825163ca669fa760e01b815260048101919091529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163ca669fa791602480830192600092919082900301818387803b1580156143fd57600080fd5b505af1158015614411573d6000803e3d6000fd5b5050604051630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b15801561448157600080fd5b505af1158015614495573d6000803e3d6000fd5b50506020546024546040517f309f50040000000000000000000000000000000000000000000000000000000081526001600160a01b03928316945063309f5004935061073d92869260009260019290911690899060040161ad25565b6021546026546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260019260009216906370a08231906024016122bc565b60275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561459c57600080fd5b505af11580156145b0573d6000803e3d6000fd5b5050604051630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b15801561462057600080fd5b505af1158015614634573d6000803e3d6000fd5b50506020546026546040517ff45346dc00000000000000000000000000000000000000000000000000000000815260006004820152600160248201526001600160a01b0391821660448201529116925063f45346dc91506064016116d1565b6060601a805480602002602001604051908101604052809291908181526020016000905b82821015612d1e5783829060005260206000200180546146d69061afe8565b80601f01602080910402602001604051908101604052809291908181526020018280546147029061afe8565b801561474f5780601f106147245761010080835404028352916020019161474f565b820191906000526020600020905b81548152906001019060200180831161473257829003601f168201915b5050505050815260200190600101906146b7565b6060601d805480602002602001604051908101604052809291908181526020016000905b82821015612d1e5760008481526020908190206040805180820182526002860290920180546001600160a01b0316835260018101805483518187028101870190945280845293949193858301939283018282801561484657602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190600401906020826003010492830192600103820291508084116147f35790505b50505050508152505081526020019060010190614787565b600060405160200161486f9061acaa565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401819052600184840152825163ca669fa760e01b815260048101919091529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163ca669fa791602480830192600092919082900301818387803b15801561491d57600080fd5b505af1158015614931573d6000803e3d6000fd5b5050604051630618f58760e51b81527f19c08f49000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b1580156149a157600080fd5b505af11580156149b5573d6000803e3d6000fd5b50506020546021546040517f21501a950000000000000000000000000000000000000000000000000000000081526001600160a01b0392831694506321501a95935061073d928692600092911690889060040161aeba565b60275460405163ca669fa760e01b81526001600160a01b039091166004820152600190737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015614a6957600080fd5b505af1158015614a7d573d6000803e3d6000fd5b5050604051630618f58760e51b81527f82d5d76a000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b158015614aed57600080fd5b505af1158015614b01573d6000803e3d6000fd5b50506020546021546040517ff45346dc0000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260248101869052911660448201819052925063f45346dc915060640161361a565b60275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015614bb957600080fd5b505af1158015614bcd573d6000803e3d6000fd5b5050604051630618f58760e51b81527f5d67094f000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b158015614c3d57600080fd5b505af1158015614c51573d6000803e3d6000fd5b50506020546021546026546040517ff45346dc0000000000000000000000000000000000000000000000000000000081526001600160a01b0392831660048201526000602482015290821660448201529116925063f45346dc91506064016116d1565b6000604051602001614cc59061acaa565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401819052600184840152825163ca669fa760e01b815260048101919091529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163ca669fa791602480830192600092919082900301818387803b158015614d7357600080fd5b505af1158015614d87573d6000803e3d6000fd5b5050604051630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b158015614df757600080fd5b505af1158015614e0b573d6000803e3d6000fd5b50506020546021546040517fc39aca370000000000000000000000000000000000000000000000000000000081526001600160a01b03928316945063c39aca37935061073d9286921690600190600090899060040161ad25565b6000604051602001614e769061acaa565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401819052600184840152825163ca669fa760e01b815260048101919091529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163ca669fa791602480830192600092919082900301818387803b158015614f2457600080fd5b505af1158015614f38573d6000803e3d6000fd5b5050604051630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b158015614fa857600080fd5b505af1158015614fbc573d6000803e3d6000fd5b50506020546040517f21501a950000000000000000000000000000000000000000000000000000000081526001600160a01b0390911692506321501a95915061073d908490600190600090889060040161aeba565b602154602480546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260009391909116916370a082319101602060405180830381865afa15801561507a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061509e919061aef4565b90506150ab60008261671d565b60006040516020016150bc9061acaa565b60408051601f19818403018152606080840190925260205490911b6bffffffffffffffffffffffff191660808301529150600090806094810160408051808303601f190181529181529082526027546001600160a01b03908116602084015260019282018390526024805492517f81bad6f300000000000000000000000000000000000000000000000000000000815260048101859052908101849052604481018490526064810193909352166084820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b1580156151aa57600080fd5b505af11580156151be573d6000803e3d6000fd5b5050602080546040517ffdc887992b033668833927e252058e468fac0b6bd196d520f09c61b740e99948945061521993506001600160a01b03909116910160609190911b6bffffffffffffffffffffffff1916815260140190565b60408051601f198184030181529082905260275460205461524a936001600160a01b0392831692600192169061af20565b60405180910390a160275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156152ab57600080fd5b505af11580156152bf573d6000803e3d6000fd5b50506020546021546024546040517f5af659670000000000000000000000000000000000000000000000000000000081526001600160a01b039384169550635af659679450613ccc938793811692600192911690899060040161ad25565b6060601c805480602002602001604051908101604052809291908181526020016000905b82821015612d1e5760008481526020908190206040805180820182526002860290920180546001600160a01b0316835260018101805483518187028101870190945280845293949193858301939283018282801561540057602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190600401906020826003010492830192600103820291508084116153ad5790505b50505050508152505081526020019060010190615341565b60606019805480602002602001604051908101604052809291908181526020016000905b82821015612d1e57838290600052602060002001805461545b9061afe8565b80601f01602080910402602001604051908101604052809291908181526020018280546154879061afe8565b80156154d45780601f106154a9576101008083540402835291602001916154d4565b820191906000526020600020905b8154815290600101906020018083116154b757829003601f168201915b50505050508152602001906001019061543c565b60085460009060ff1615615500575060085460ff1690565b6040517f667f9d70000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d600482018190527f6661696c65640000000000000000000000000000000000000000000000000000602483015260009163667f9d7090604401602060405180830381865afa158015615591573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906155b5919061aef4565b1415905090565b60006040516020016155cd9061acaa565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401526001838301528151630618f58760e51b81527f82d5d76a0000000000000000000000000000000000000000000000000000000060048201529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163c31eb0e091602480830192600092919082900301818387803b15801561569757600080fd5b505af11580156156ab573d6000803e3d6000fd5b505060275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b15801561570857600080fd5b505af115801561571c573d6000803e3d6000fd5b50506020546021546040517fc39aca370000000000000000000000000000000000000000000000000000000081526001600160a01b03928316945063c39aca37935061073d92869216906001908690899060040161ad25565b60006040516020016157869061acaa565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401526001838301528151630618f58760e51b81527f82d5d76a0000000000000000000000000000000000000000000000000000000060048201529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163c31eb0e091602480830192600092919082900301818387803b15801561585057600080fd5b505af1158015615864573d6000803e3d6000fd5b505060275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b1580156158c157600080fd5b505af11580156158d5573d6000803e3d6000fd5b50506020546021546040517f5af659670000000000000000000000000000000000000000000000000000000081526001600160a01b039283169450635af65967935061073d92869216906001908690899060040161ad25565b600060405160200161593f9061acaa565b60408051601f19818403018152606080840190925260205490911b6bffffffffffffffffffffffff191660808301529150600090806094810160408051808303601f190181529181529082526027546001600160a01b03908116602084015260019282018390526024805492517f81bad6f300000000000000000000000000000000000000000000000000000000815260048101859052908101849052604481018490526064810193909352166084820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b158015615a2d57600080fd5b505af1158015615a41573d6000803e3d6000fd5b5050602080546040517ffdc887992b033668833927e252058e468fac0b6bd196d520f09c61b740e999489450615a9c93506001600160a01b03909116910160609190911b6bffffffffffffffffffffffff1916815260140190565b60408051601f1981840301815290829052602754602054615acd936001600160a01b0392831692600192169061af20565b60405180910390a160275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa79060240161300f565b6000604051602001615b2a9061acaa565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401526001838301528151630618f58760e51b81527f82d5d76a0000000000000000000000000000000000000000000000000000000060048201529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163c31eb0e091602480830192600092919082900301818387803b158015615bf457600080fd5b505af1158015615c08573d6000803e3d6000fd5b505060275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b158015615c6557600080fd5b505af1158015615c79573d6000803e3d6000fd5b50506020546021546027546040517fc39aca370000000000000000000000000000000000000000000000000000000081526001600160a01b03938416955063c39aca37945061073d938793811692600192911690899060040161ad25565b6000604051602001615ce89061acaa565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401819052600184840152825163ca669fa760e01b815260048101919091529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163ca669fa791602480830192600092919082900301818387803b158015615d9657600080fd5b505af1158015615daa573d6000803e3d6000fd5b5050604051630618f58760e51b81527f5d67094f000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b158015615e1a57600080fd5b505af1158015615e2e573d6000803e3d6000fd5b50506020546021546024546040517fbcf7f32b0000000000000000000000000000000000000000000000000000000081526001600160a01b03938416955063bcf7f32b945061073d938793811692600092911690899060040161ad25565b606060158054806020026020016040519081016040528092919081815260200182805480156124f7576020028201919060005260206000209081546001600160a01b031681526001909101906020018083116124d9575050505050905090565b6000604051602001615efd9061acaa565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401526001838301528151630618f58760e51b81527f82d5d76a0000000000000000000000000000000000000000000000000000000060048201529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163c31eb0e091602480830192600092919082900301818387803b158015615fc757600080fd5b505af1158015615fdb573d6000803e3d6000fd5b505060275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b15801561603857600080fd5b505af115801561604c573d6000803e3d6000fd5b50506020546021546027546040517f5af659670000000000000000000000000000000000000000000000000000000081526001600160a01b039384169550635af65967945061073d938793811692600192911690899060040161ad25565b60006040516020016160bb9061acaa565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401819052600184840152825163ca669fa760e01b815260048101919091529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163ca669fa791602480830192600092919082900301818387803b15801561616957600080fd5b505af115801561617d573d6000803e3d6000fd5b5050604051630618f58760e51b81527f5d67094f000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b1580156161ed57600080fd5b505af1158015616201573d6000803e3d6000fd5b50506020546021546024546040517f5af659670000000000000000000000000000000000000000000000000000000081526001600160a01b039384169550635af65967945061073d938793811692600092911690899060040161ad25565b6040516001906000906162749060200161acaa565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401526001838301528151630618f58760e51b81527f82d5d76a0000000000000000000000000000000000000000000000000000000060048201529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163c31eb0e091602480830192600092919082900301818387803b15801561633e57600080fd5b505af1158015616352573d6000803e3d6000fd5b505060275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b1580156163af57600080fd5b505af11580156163c3573d6000803e3d6000fd5b50506020546040517f21501a950000000000000000000000000000000000000000000000000000000081526001600160a01b0390911692506321501a95915061154e90849087908590889060040161aeba565b60006040516020016164279061acaa565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401819052600184840152825163ca669fa760e01b815260048101919091529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163ca669fa791602480830192600092919082900301818387803b1580156164d557600080fd5b505af11580156164e9573d6000803e3d6000fd5b5050604051630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b15801561655957600080fd5b505af115801561656d573d6000803e3d6000fd5b50506020546021546040517f5af659670000000000000000000000000000000000000000000000000000000081526001600160a01b039283169450635af65967935061073d9286921690600190600090899060040161ad25565b60006040516020016165d89061acaa565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401526001838301528151630618f58760e51b81527f2b2add3d0000000000000000000000000000000000000000000000000000000060048201529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163c31eb0e091602480830192600092919082900301818387803b1580156166a257600080fd5b505af11580156166b6573d6000803e3d6000fd5b505060255460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa791506024016142b2565b600061670861a843565b61671384848361679c565b9150505b92915050565b6040517f98296c540000000000000000000000000000000000000000000000000000000081526004810183905260248101829052737109709ecfa91a80626ff3989d68f67f5b1dd12d906398296c549060440160006040518083038186803b15801561678857600080fd5b505afa15801561076b573d6000803e3d6000fd5b6000806167a98584616817565b905061680c6040518060400160405280601d81526020017f4552433139363750726f78792e736f6c3a4552433139363750726f787900000081525082866040516020016167f792919061b035565b60405160208183030381529060405285616823565b9150505b9392505050565b60006168108383616851565b60c081015151600090156168475761684084848460c0015161686c565b9050616810565b6168408484616a12565b600061685d8383616afd565b61681083836020015184616823565b600080616877616b0d565b905060006168858683616be0565b9050600061689c8260600151836020015185617086565b905060006168ac83838989617298565b905060006168b982618115565b602081015181519192509060030b1561692c578982604001516040516020016168e392919061b057565b60408051601f19818403018152908290527f08c379a00000000000000000000000000000000000000000000000000000000082526169239160040161af0d565b60405180910390fd5b600061696f6040518060400160405280601581526020017f4465706c6f79656420746f20616464726573733a2000000000000000000000008152508360016182e4565b6040517fc6ce059d000000000000000000000000000000000000000000000000000000008152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c6ce059d906169c290849060040161af0d565b602060405180830381865afa1580156169df573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190616a03919061ad7a565b9b9a5050505050505050505050565b6040517f8d1cc9250000000000000000000000000000000000000000000000000000000081526000908190737109709ecfa91a80626ff3989d68f67f5b1dd12d90638d1cc92590616a6790879060040161af0d565b600060405180830381865afa158015616a84573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052616aac919081019061b1c0565b90506000616ada8285604051602001616ac692919061b1f5565b6040516020818303038152906040526184e4565b90506001600160a01b0381166167135784846040516020016168e392919061b224565b616b09828260006184f7565b5050565b604080518082018252600381527f6f75740000000000000000000000000000000000000000000000000000000000602082015290517fd145736c000000000000000000000000000000000000000000000000000000008152606091737109709ecfa91a80626ff3989d68f67f5b1dd12d91829063d145736c90616b9490849060040161b2cf565b600060405180830381865afa158015616bb1573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052616bd9919081019061b316565b9250505090565b616c126040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b6000737109709ecfa91a80626ff3989d68f67f5b1dd12d9050616c5d6040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b616c66856185fa565b60208201526000616c76866189df565b90506000836001600160a01b031663d930a0e66040518163ffffffff1660e01b8152600401600060405180830381865afa158015616cb8573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052616ce0919081019061b316565b86838560200151604051602001616cfa949392919061b35f565b60408051601f19818403018152908290527f60f9bb1100000000000000000000000000000000000000000000000000000000825291506000906001600160a01b038616906360f9bb1190616d5290859060040161af0d565b600060405180830381865afa158015616d6f573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052616d97919081019061b316565b6040517fdb4235f60000000000000000000000000000000000000000000000000000000081529091506001600160a01b0386169063db4235f690616ddf90849060040161b463565b602060405180830381865afa158015616dfc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190616e20919061ae98565b616e3557816040516020016168e3919061b4b5565b6040517f49c4fac80000000000000000000000000000000000000000000000000000000081526001600160a01b038616906349c4fac890616e7a90849060040161b547565b600060405180830381865afa158015616e97573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052616ebf919081019061b316565b84526040517fdb4235f60000000000000000000000000000000000000000000000000000000081526001600160a01b0386169063db4235f690616f0690849060040161b599565b602060405180830381865afa158015616f23573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190616f47919061ae98565b15616fdc576040517f49c4fac80000000000000000000000000000000000000000000000000000000081526001600160a01b038616906349c4fac890616f9190849060040161b599565b600060405180830381865afa158015616fae573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052616fd6919081019061b316565b60408501525b846001600160a01b03166349c4fac8828660000151604051602001617001919061b5eb565b6040516020818303038152906040526040518363ffffffff1660e01b815260040161702d92919061b657565b600060405180830381865afa15801561704a573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052617072919081019061b316565b606085015250608083015250949350505050565b60408051600480825260a0820190925260609160009190816020015b60608152602001906001900390816170a25790505090506040518060400160405280600481526020017f6772657000000000000000000000000000000000000000000000000000000000815250816000815181106171025761710261b67c565b60200260200101819052506040518060400160405280600381526020017f2d726c0000000000000000000000000000000000000000000000000000000000815250816001815181106171565761715661b67c565b602002602001018190525084604051602001617172919061b6ab565b604051602081830303815290604052816002815181106171945761719461b67c565b6020026020010181905250826040516020016171b0919061b717565b604051602081830303815290604052816003815181106171d2576171d261b67c565b602002602001018190525060006171e882618115565b602080820151604080518082018252600581527f2e6a736f6e00000000000000000000000000000000000000000000000000000081850190815282518084018452600080825290860152825180840190935290518252928101929092529192506172799060408051808201825260008082526020918201528151808301909252845182528085019082015290618c62565b61728e57856040516020016168e3919061b758565b9695505050505050565b60a0810151604080518082018252600080825260209182015281518083019092528251808352928101910152606090737109709ecfa91a80626ff3989d68f67f5b1dd12d90156172e8565b511590565b61745c578260200151156173a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605860248201527f54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f742060448201527f62652075736564207768656e207468652060736b6970566572696679536f757260648201527f6365436f646560206f7074696f6e206973206074727565600000000000000000608482015260a401616923565b8260c001511561745c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605360248201527f54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f742060448201527f62652075736564207768656e207468652060736b69704c6963656e736554797060648201527f6560206f7074696f6e2069732060747275656000000000000000000000000000608482015260a401616923565b6040805160ff8082526120008201909252600091816020015b606081526020019060019003908161747557905050905060006040518060400160405280600381526020017f6e707800000000000000000000000000000000000000000000000000000000008152508282806174d09061b7e9565b935060ff16815181106174e5576174e561b67c565b60200260200101819052506040518060400160405280600d81526020017f302e302e312d616c7068612e3700000000000000000000000000000000000000815250604051602001617536919061b808565b6040516020818303038152906040528282806175519061b7e9565b935060ff16815181106175665761756661b67c565b60200260200101819052506040518060400160405280600681526020017f6465706c6f7900000000000000000000000000000000000000000000000000008152508282806175b39061b7e9565b935060ff16815181106175c8576175c861b67c565b60200260200101819052506040518060400160405280600e81526020017f2d2d636f6e74726163744e616d650000000000000000000000000000000000008152508282806176159061b7e9565b935060ff168151811061762a5761762a61b67c565b602002602001018190525087602001518282806176469061b7e9565b935060ff168151811061765b5761765b61b67c565b60200260200101819052506040518060400160405280600e81526020017f2d2d636f6e7472616374506174680000000000000000000000000000000000008152508282806176a89061b7e9565b935060ff16815181106176bd576176bd61b67c565b6020908102919091010152875182826176d58161b7e9565b935060ff16815181106176ea576176ea61b67c565b60200260200101819052506040518060400160405280600981526020017f2d2d636861696e496400000000000000000000000000000000000000000000008152508282806177379061b7e9565b935060ff168151811061774c5761774c61b67c565b602002602001018190525061776046618cc3565b828261776b8161b7e9565b935060ff16815181106177805761778061b67c565b60200260200101819052506040518060400160405280600f81526020017f2d2d6275696c64496e666f46696c6500000000000000000000000000000000008152508282806177cd9061b7e9565b935060ff16815181106177e2576177e261b67c565b6020026020010181905250868282806177fa9061b7e9565b935060ff168151811061780f5761780f61b67c565b60209081029190910101528551156179365760408051808201909152601581527f2d2d636f6e7374727563746f7242797465636f64650000000000000000000000602082015282826178608161b7e9565b935060ff16815181106178755761787561b67c565b60209081029190910101526040517f71aad10d0000000000000000000000000000000000000000000000000000000081526001600160a01b038416906371aad10d906178c590899060040161af0d565b600060405180830381865afa1580156178e2573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261790a919081019061b316565b82826179158161b7e9565b935060ff168151811061792a5761792a61b67c565b60200260200101819052505b846020015115617a065760408051808201909152601281527f2d2d766572696679536f75726365436f646500000000000000000000000000006020820152828261797f8161b7e9565b935060ff16815181106179945761799461b67c565b60200260200101819052506040518060400160405280600581526020017f66616c73650000000000000000000000000000000000000000000000000000008152508282806179e19061b7e9565b935060ff16815181106179f6576179f661b67c565b6020026020010181905250617bcd565b617a3e6172e38660a0015160408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b617ad15760408051808201909152600d81527f2d2d6c6963656e7365547970650000000000000000000000000000000000000060208201528282617a818161b7e9565b935060ff1681518110617a9657617a9661b67c565b60200260200101819052508460a00151604051602001617ab6919061b6ab565b6040516020818303038152906040528282806179e19061b7e9565b8460c00151158015617b14575060408089015181518083018352600080825260209182015282518084019093528151835290810190820152617b1290511590565b155b15617bcd5760408051808201909152600d81527f2d2d6c6963656e7365547970650000000000000000000000000000000000000060208201528282617b588161b7e9565b935060ff1681518110617b6d57617b6d61b67c565b6020026020010181905250617b8188618d63565b604051602001617b91919061b6ab565b604051602081830303815290604052828280617bac9061b7e9565b935060ff1681518110617bc157617bc161b67c565b60200260200101819052505b60408086015181518083018352600080825260209182015282518084019093528151835290810190820152617c0190511590565b617c965760408051808201909152600b81527f2d2d72656c61796572496400000000000000000000000000000000000000000060208201528282617c448161b7e9565b935060ff1681518110617c5957617c5961b67c565b60200260200101819052508460400151828280617c759061b7e9565b935060ff1681518110617c8a57617c8a61b67c565b60200260200101819052505b606085015115617db75760408051808201909152600681527f2d2d73616c74000000000000000000000000000000000000000000000000000060208201528282617cdf8161b7e9565b935060ff1681518110617cf457617cf461b67c565b602090810291909101015260608501516040517fb11a19e800000000000000000000000000000000000000000000000000000000815260048101919091526001600160a01b0384169063b11a19e890602401600060405180830381865afa158015617d63573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052617d8b919081019061b316565b8282617d968161b7e9565b935060ff1681518110617dab57617dab61b67c565b60200260200101819052505b60e08501515115617e5e5760408051808201909152600a81527f2d2d6761734c696d69740000000000000000000000000000000000000000000060208201528282617e018161b7e9565b935060ff1681518110617e1657617e1661b67c565b6020026020010181905250617e328560e0015160000151618cc3565b8282617e3d8161b7e9565b935060ff1681518110617e5257617e5261b67c565b60200260200101819052505b60e08501516020015115617f085760408051808201909152600a81527f2d2d67617350726963650000000000000000000000000000000000000000000060208201528282617eab8161b7e9565b935060ff1681518110617ec057617ec061b67c565b6020026020010181905250617edc8560e0015160200151618cc3565b8282617ee78161b7e9565b935060ff1681518110617efc57617efc61b67c565b60200260200101819052505b60e08501516040015115617fb25760408051808201909152600e81527f2d2d6d617846656550657247617300000000000000000000000000000000000060208201528282617f558161b7e9565b935060ff1681518110617f6a57617f6a61b67c565b6020026020010181905250617f868560e0015160400151618cc3565b8282617f918161b7e9565b935060ff1681518110617fa657617fa661b67c565b60200260200101819052505b60e0850151606001511561805c5760408051808201909152601681527f2d2d6d61785072696f726974794665655065724761730000000000000000000060208201528282617fff8161b7e9565b935060ff16815181106180145761801461b67c565b60200260200101819052506180308560e0015160600151618cc3565b828261803b8161b7e9565b935060ff16815181106180505761805061b67c565b60200260200101819052505b60008160ff1667ffffffffffffffff81111561807a5761807a61b0d8565b6040519080825280602002602001820160405280156180ad57816020015b60608152602001906001900390816180985790505b50905060005b8260ff168160ff16101561810657838160ff16815181106180d6576180d661b67c565b6020026020010151828260ff16815181106180f3576180f361b67c565b60209081029190910101526001016180b3565b5093505050505b949350505050565b61813c6040518060600160405280600060030b815260200160608152602001606081525090565b60408051808201825260048082527f6261736800000000000000000000000000000000000000000000000000000000602083015291517fd145736c000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d92600091849163d145736c916181c29186910161b873565b600060405180830381865afa1580156181df573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052618207919081019061b316565b905060006182158683619852565b90506000846001600160a01b031663f45c1ce7836040518263ffffffff1660e01b8152600401618245919061ab9c565b6000604051808303816000875af1158015618264573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261828c919081019061b8ba565b805190915060030b158015906182a55750602081015151155b80156182b45750604081015151155b1561728e57816000815181106182cc576182cc61b67c565b60200260200101516040516020016168e3919061b970565b606060006183198560408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6040805180820182526000808252602091820152815180830190925286518252808701908201529091506183509082905b906199a7565b156184ad5760006183cd826183c7846183c16183938a60408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6040805180820182526000808252602091820152815180830190925282518252918201519181019190915290565b906199ce565b90619a30565b604080518082018252600181527f0a00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201529091506184319082906199a7565b1561849b57604080518082018252600181527f0a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152618498905b8290619ab5565b90505b6184a481619adb565b92505050616810565b82156184c65784846040516020016168e392919061bb5c565b5050604080516020810190915260008152616810565b509392505050565b6000808251602084016000f09392505050565b8160a001511561850657505050565b6000618513848484619b44565b9050600061852082618115565b602081015181519192509060030b1580156185bc5750604080518082018252600781527f5355434345535300000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526185bc9060408051808201825260008082526020918201528151808301909252845182528085019082015261834a565b156185c957505050505050565b604082015151156185e95781604001516040516020016168e3919061bc03565b806040516020016168e3919061bc61565b6060600061862f8360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600481527f2e736f6c0000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152909150618694905b8290618c62565b1561870357604080518082018252600481527f2e736f6c0000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616810906186fe90839061a0df565b619adb565b604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152618765905b829061a169565b60010361883257604080518082018252600181527f3a00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526187cb90618491565b50604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616810906186fe905b8390619ab5565b604080518082018252600581527f2e6a736f6e000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526188919061868d565b156189c857604080518082018252600181527f2f000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201819052845180860190955292518452830152906188f990839061a203565b90506000816001835161890c919061afc2565b8151811061891c5761891c61b67c565b602002602001015190506189bf6186fe6189926040518060400160405280600581526020017f2e6a736f6e00000000000000000000000000000000000000000000000000000081525060408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6040805180820182526000808252602091820152815180830190925285518252808601908201529061a0df565b95945050505050565b826040516020016168e3919061bccc565b50919050565b60606000618a148360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600481527f2e736f6c0000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152909150618a769061868d565b15618a845761681081619adb565b604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152618ae39061875e565b600103618b4d57604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616810906186fe9061882b565b604080518082018252600581527f2e6a736f6e00000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152618bac9061868d565b156189c857604080518082018252600181527f2f00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820181905284518086019095529251845283015290618c1490839061a203565b9050600181511115618c50578060028251618c2f919061afc2565b81518110618c3f57618c3f61b67c565b602002602001015192505050919050565b50826040516020016168e3919061bccc565b805182516000911115618c7757506000616717565b81518351602085015160009291618c8d9161afd5565b618c97919061afc2565b905082602001518103618cae576001915050616717565b82516020840151819020912014905092915050565b60606000618cd08361a2a8565b600101905060008167ffffffffffffffff811115618cf057618cf061b0d8565b6040519080825280601f01601f191660200182016040528015618d1a576020820181803683370190505b5090508181016020015b600019017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a8504945084618d2457509392505050565b604081810151815180830183526000808252602091820181905283518085018552835181529282018383015283518085018552600a81527f554e4c4943454e5345440000000000000000000000000000000000000000000081840190815285518087018752838152840192909252845180860190955251845290830152606091618def905b829061a38a565b15618e2f57505060408051808201909152600481527f4e6f6e65000000000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600981527f556e6c6963656e7365000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152618e8e90618de8565b15618ece57505060408051808201909152600981527f556e6c6963656e736500000000000000000000000000000000000000000000006020820152919050565b604080518082018252600381527f4d4954000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152618f2d90618de8565b15618f6d57505060408051808201909152600381527f4d495400000000000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f47504c2d322e302d6f6e6c79000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152618fcc90618de8565b806190315750604080518082018252601081527f47504c2d322e302d6f722d6c61746572000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261903190618de8565b1561907157505060408051808201909152600981527f474e552047504c763200000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f47504c2d332e302d6f6e6c790000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526190d090618de8565b806191355750604080518082018252601081527f47504c2d332e302d6f722d6c61746572000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261913590618de8565b1561917557505060408051808201909152600981527f474e552047504c763300000000000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4c47504c2d322e312d6f6e6c7900000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526191d490618de8565b806192395750604080518082018252601181527f4c47504c2d322e312d6f722d6c617465720000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261923990618de8565b1561927957505060408051808201909152600c81527f474e55204c47504c76322e3100000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4c47504c2d332e302d6f6e6c7900000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526192d890618de8565b8061933d5750604080518082018252601181527f4c47504c2d332e302d6f722d6c617465720000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261933d90618de8565b1561937d57505060408051808201909152600a81527f474e55204c47504c7633000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f4253442d322d436c617573650000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526193dc90618de8565b1561941c57505060408051808201909152600c81527f4253442d322d436c6175736500000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f4253442d332d436c6175736500000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261947b90618de8565b156194bb57505060408051808201909152600c81527f4253442d332d436c6175736500000000000000000000000000000000000000006020820152919050565b604080518082018252600781527f4d504c2d322e30000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261951a90618de8565b1561955a57505060408051808201909152600781527f4d504c2d322e30000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600781527f4f534c2d332e3000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526195b990618de8565b156195f957505060408051808201909152600781527f4f534c2d332e30000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600a81527f4170616368652d322e30000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261965890618de8565b1561969857505060408051808201909152600a81527f4170616368652d322e30000000000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4147504c2d332e302d6f6e6c7900000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526196f790618de8565b8061975c5750604080518082018252601181527f4147504c2d332e302d6f722d6c617465720000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261975c90618de8565b1561979c57505060408051808201909152600a81527f474e55204147504c7633000000000000000000000000000000000000000000006020820152919050565b604080518082018252600881527f4255534c2d312e31000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526197fb90618de8565b1561983b57505060408051808201909152600781527f42534c20312e31000000000000000000000000000000000000000000000000006020820152919050565b604080840151845191516168e3929060200161bdaa565b60608060005b84518110156198dd57818582815181106198745761987461b67c565b602002602001015160405160200161988d92919061b1f5565b6040516020818303038152906040529150600185516198ac919061afc2565b81146198d557816040516020016198c3919061bf13565b60405160208183030381529060405291505b600101619858565b5060408051600380825260808201909252600091816020015b60608152602001906001900390816198f657905050905083816000815181106199215761992161b67c565b60200260200101819052506040518060400160405280600281526020017f2d63000000000000000000000000000000000000000000000000000000000000815250816001815181106199755761997561b67c565b602002602001018190525081816002815181106199945761999461b67c565b6020908102919091010152949350505050565b60208083015183518351928401516000936199c5929184919061a39e565b14159392505050565b60408051808201909152600080825260208201526000619a00846000015185602001518560000151866020015161a4af565b9050836020015181619a12919061afc2565b84518590619a2190839061afc2565b90525060208401525090919050565b6040805180820190915260008082526020820152815183511015619a55575081616717565b6020808301519084015160019114619a7c5750815160208481015190840151829020919020145b8015619aad57825184518590619a9390839061afc2565b9052508251602085018051619aa990839061afd5565b9052505b509192915050565b6040805180820190915260008082526020820152619ad483838361a5cf565b5092915050565b60606000826000015167ffffffffffffffff811115619afc57619afc61b0d8565b6040519080825280601f01601f191660200182016040528015619b26576020820181803683370190505b5090506000602082019050619ad4818560200151866000015161a67a565b60606000619b50616b0d565b6040805160ff808252612000820190925291925060009190816020015b6060815260200190600190039081619b6d57905050905060006040518060400160405280600381526020017f6e70780000000000000000000000000000000000000000000000000000000000815250828280619bc89061b7e9565b935060ff1681518110619bdd57619bdd61b67c565b60200260200101819052506040518060400160405280600781526020017f5e312e33322e3300000000000000000000000000000000000000000000000000815250604051602001619c2e919061bf54565b604051602081830303815290604052828280619c499061b7e9565b935060ff1681518110619c5e57619c5e61b67c565b60200260200101819052506040518060400160405280600881526020017f76616c6964617465000000000000000000000000000000000000000000000000815250828280619cab9061b7e9565b935060ff1681518110619cc057619cc061b67c565b602002602001018190525082604051602001619cdc919061b717565b604051602081830303815290604052828280619cf79061b7e9565b935060ff1681518110619d0c57619d0c61b67c565b60200260200101819052506040518060400160405280600a81526020017f2d2d636f6e747261637400000000000000000000000000000000000000000000815250828280619d599061b7e9565b935060ff1681518110619d6e57619d6e61b67c565b6020026020010181905250619d83878461a6f4565b8282619d8e8161b7e9565b935060ff1681518110619da357619da361b67c565b602090810291909101015285515115619e4f5760408051808201909152600b81527f2d2d7265666572656e636500000000000000000000000000000000000000000060208201528282619df58161b7e9565b935060ff1681518110619e0a57619e0a61b67c565b6020026020010181905250619e2386600001518461a6f4565b8282619e2e8161b7e9565b935060ff1681518110619e4357619e4361b67c565b60200260200101819052505b856080015115619ebd5760408051808201909152601881527f2d2d756e73616665536b697053746f72616765436865636b000000000000000060208201528282619e988161b7e9565b935060ff1681518110619ead57619ead61b67c565b6020026020010181905250619f23565b8415619f235760408051808201909152601281527f2d2d726571756972655265666572656e6365000000000000000000000000000060208201528282619f028161b7e9565b935060ff1681518110619f1757619f1761b67c565b60200260200101819052505b60408601515115619fbf5760408051808201909152600d81527f2d2d756e73616665416c6c6f770000000000000000000000000000000000000060208201528282619f6d8161b7e9565b935060ff1681518110619f8257619f8261b67c565b60200260200101819052508560400151828280619f9e9061b7e9565b935060ff1681518110619fb357619fb361b67c565b60200260200101819052505b85606001511561a0295760408051808201909152601481527f2d2d756e73616665416c6c6f7752656e616d65730000000000000000000000006020820152828261a0088161b7e9565b935060ff168151811061a01d5761a01d61b67c565b60200260200101819052505b60008160ff1667ffffffffffffffff81111561a0475761a04761b0d8565b60405190808252806020026020018201604052801561a07a57816020015b606081526020019060019003908161a0655790505b50905060005b8260ff168160ff16101561a0d357838160ff168151811061a0a35761a0a361b67c565b6020026020010151828260ff168151811061a0c05761a0c061b67c565b602090810291909101015260010161a080565b50979650505050505050565b604080518082019091526000808252602082015281518351101561a104575081616717565b8151835160208501516000929161a11a9161afd5565b61a124919061afc2565b6020840151909150600190821461a145575082516020840151819020908220145b801561a1605783518551869061a15c90839061afc2565b9052505b50929392505050565b600080826000015161a18d856000015186602001518660000151876020015161a4af565b61a197919061afd5565b90505b8351602085015161a1ab919061afd5565b8111619ad4578161a1bb8161bf99565b925050826000015161a1f285602001518361a1d6919061afc2565b865161a1e2919061afc2565b838660000151876020015161a4af565b61a1fc919061afd5565b905061a19a565b6060600061a211848461a169565b61a21c90600161afd5565b67ffffffffffffffff81111561a2345761a23461b0d8565b60405190808252806020026020018201604052801561a26757816020015b606081526020019060019003908161a2525790505b50905060005b81518110156184dc5761a2836186fe8686619ab5565b82828151811061a2955761a29561b67c565b602090810291909101015260010161a26d565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000831061a2f1577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef8100000000831061a31d576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc10000831061a33b57662386f26fc10000830492506010015b6305f5e100831061a353576305f5e100830492506008015b612710831061a36757612710830492506004015b6064831061a379576064830492506002015b600a83106167175760010192915050565b600061a396838361a734565b159392505050565b60008085841161a4a5576020841161a451576000841561a3e957600161a3c586602061afc2565b61a3d090600861bfb3565b61a3db90600261c0b1565b61a3e5919061afc2565b1990505b835181168561a3f8898961afd5565b61a402919061afc2565b805190935082165b81811461a43c5787841161a424578794505050505061810d565b8361a42e8161c0bd565b94505082845116905061a40a565b61a446878561afd5565b94505050505061810d565b83832061a45e858861afc2565b61a468908761afd5565b91505b85821061a4a35784822080820361a4905761a486868461afd5565b935050505061810d565b61a49b60018461afc2565b92505061a46b565b505b5092949350505050565b6000838186851161a5ba576020851161a569576000851561a4fb57600161a4d787602061afc2565b61a4e290600861bfb3565b61a4ed90600261c0b1565b61a4f7919061afc2565b1990505b8451811660008761a50c8b8b61afd5565b61a516919061afc2565b855190915083165b82811461a55b5781861061a5435761a5368b8b61afd5565b965050505050505061810d565b8561a54d8161bf99565b96505083865116905061a51e565b85965050505050505061810d565b508383206000905b61a57b868961afc2565b821161a5b85785832080820361a597578394505050505061810d565b61a5a260018561afd5565b935050818061a5b09061bf99565b92505061a571565b505b61a5c4878761afd5565b979650505050505050565b6040805180820190915260008082526020820152600061a601856000015186602001518660000151876020015161a4af565b60208087018051918601919091525190915061a61d908261afc2565b83528451602086015161a630919061afd5565b810361a63f576000855261a671565b8351835161a64d919061afd5565b8551869061a65c90839061afc2565b905250835161a66b908261afd5565b60208601525b50909392505050565b6020811061a6b2578151835261a69160208461afd5565b925061a69e60208361afd5565b915061a6ab60208261afc2565b905061a67a565b600019811561a6e157600161a6c883602061afc2565b61a6d49061010061c0b1565b61a6de919061afc2565b90505b9151835183169219169190911790915250565b6060600061a7028484616be0565b805160208083015160405193945061a71c9390910161c0d4565b60405160208183030381529060405291505092915050565b815181516000919081111561a747575081515b6020808501519084015160005b8381101561a800578251825180821461a7d057600019602087101561a7af5760018461a78189602061afc2565b61a78b919061afd5565b61a79690600861bfb3565b61a7a190600261c0b1565b61a7ab919061afc2565b1990505b818116838216818103911461a7cd5797506167179650505050505050565b50505b61a7db60208661afd5565b945061a7e860208561afd5565b9350505060208161a7f9919061afd5565b905061a754565b508451865161728e919061c12c565b610b678061c14d83390190565b61053f8061ccb483390190565b61106f8061d1f383390190565b611bb98061e26283390190565b6040518060e0016040528060608152602001606081526020016060815260200160001515815260200160001515815260200160001515815260200161a88661a88b565b905290565b6040518061010001604052806000151581526020016000151581526020016060815260200160008019168152602001606081526020016060815260200160001515815260200161a8866040518060800160405280600081526020016000815260200160008152602001600081525090565b602080825282518282018190526000918401906040840190835b8181101561a93d5783516001600160a01b031683526020938401939092019160010161a916565b509095945050505050565b60005b8381101561a96357818101518382015260200161a94b565b50506000910152565b6000815180845261a98481602086016020860161a948565b601f01601f19169290920160200192915050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b8281101561aa94577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452815180516001600160a01b03168652602090810151604082880181905281519088018190529101906060600582901b88018101919088019060005b8181101561aa7a577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa08a850301835261aa6484865161a96c565b602095860195909450929092019160010161aa2a565b50919750505060209485019492909201915060010161a9c0565b50929695505050505050565b600081518084526020840193506020830160005b8281101561aaf45781517fffffffff000000000000000000000000000000000000000000000000000000001686526020958601959091019060010161aab4565b5093949350505050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b8281101561aa94577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452815180516040875261ab6a604088018261a96c565b905060208201519150868103602088015261ab85818361aaa0565b96505050602093840193919091019060010161ab26565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b8281101561aa94577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc087860301845261abfe85835161a96c565b9450602093840193919091019060010161abc4565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b8281101561aa94577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc087860301845281516001600160a01b038151168652602081015190506040602087015261ac94604087018261aaa0565b955050602093840193919091019060010161ac3b565b60208152600061671760208301600581527f68656c6c6f000000000000000000000000000000000000000000000000000000602082015260400190565b600081516060845261acfc606085018261a96c565b90506001600160a01b036020840151166020850152604083015160408501528091505092915050565b60a08152600061ad3860a083018861ace7565b6001600160a01b03871660208401528560408401526001600160a01b0385166060840152828103608084015261ad6e818561a96c565b98975050505050505050565b60006020828403121561ad8c57600080fd5b81516001600160a01b038116811461681057600080fd5b610100815260056101008201527f544f4b454e000000000000000000000000000000000000000000000000000000610120820152610140602082015260036101408201527f544b4e000000000000000000000000000000000000000000000000000000000061016082015260006101808201905060ff881660408301528660608301526003861061ae5d577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b8560808301528460a083015261ae7e60c08301856001600160a01b03169052565b6001600160a01b03831660e0830152979650505050505050565b60006020828403121561aeaa57600080fd5b8151801515811461681057600080fd5b60808152600061aecd608083018761ace7565b8560208401526001600160a01b0385166040840152828103606084015261a5c4818561a96c565b60006020828403121561af0657600080fd5b5051919050565b602081526000616810602083018461a96c565b60a08152600061af3360a083018761a96c565b6001600160a01b03861660208401528460408401526001600160a01b0384166060840152828103608084015261a5c481600581527f68656c6c6f000000000000000000000000000000000000000000000000000000602082015260400190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b818103818111156167175761671761af93565b808201808211156167175761671761af93565b600181811c9082168061affc57607f821691505b6020821081036189d9577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6001600160a01b038316815260406020820152600061810d604083018461a96c565b7f4661696c656420746f206465706c6f7920636f6e74726163742000000000000081526000835161b08f81601a85016020880161a948565b7f3a20000000000000000000000000000000000000000000000000000000000000601a91840191820152835161b0cc81601c84016020880161a948565b01601c01949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040516060810167ffffffffffffffff8111828210171561b12a5761b12a61b0d8565b60405290565b60008067ffffffffffffffff84111561b14b5761b14b61b0d8565b50604051601f19601f85018116603f0116810181811067ffffffffffffffff8211171561b17a5761b17a61b0d8565b60405283815290508082840185101561b19257600080fd5b6184dc84602083018561a948565b600082601f83011261b1b157600080fd5b6168108383516020850161b130565b60006020828403121561b1d257600080fd5b815167ffffffffffffffff81111561b1e957600080fd5b6167138482850161b1a0565b6000835161b20781846020880161a948565b83519083019061b21b81836020880161a948565b01949350505050565b7f4661696c656420746f206465706c6f7920636f6e74726163742000000000000081526000835161b25c81601a85016020880161a948565b7f207573696e6720636f6e7374727563746f722064617461202200000000000000601a91840191820152835161b29981603384016020880161a948565b7f220000000000000000000000000000000000000000000000000000000000000060339290910191820152603401949350505050565b60408152600b60408201527f464f554e4452595f4f55540000000000000000000000000000000000000000006060820152608060208201526000616810608083018461a96c565b60006020828403121561b32857600080fd5b815167ffffffffffffffff81111561b33f57600080fd5b8201601f8101841361b35057600080fd5b6167138482516020840161b130565b6000855161b371818460208a0161a948565b7f2f00000000000000000000000000000000000000000000000000000000000000908301908152855161b3ab816001840160208a0161a948565b7f2f0000000000000000000000000000000000000000000000000000000000000060019290910191820152845161b3e981600284016020890161a948565b6001818301019150507f2f000000000000000000000000000000000000000000000000000000000000006001820152835161b42b81600284016020880161a948565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600292909101918201526007019695505050505050565b60408152600061b476604083018461a96c565b8281036020840152600481527f2e6173740000000000000000000000000000000000000000000000000000000060208201526040810191505092915050565b7f436f756c64206e6f742066696e642041535420696e206172746966616374200081526000825161b4ed81601f85016020870161a948565b7f2e205365742060617374203d20747275656020696e20666f756e6472792e746f601f9390910192830152507f6d6c000000000000000000000000000000000000000000000000000000000000603f820152604101919050565b60408152600061b55a604083018461a96c565b8281036020840152601181527f2e6173742e6162736f6c7574655061746800000000000000000000000000000060208201526040810191505092915050565b60408152600061b5ac604083018461a96c565b8281036020840152600c81527f2e6173742e6c6963656e7365000000000000000000000000000000000000000060208201526040810191505092915050565b7f2e6d657461646174612e736f75726365732e5b2700000000000000000000000081526000825161b62381601485016020870161a948565b7f275d2e6b656363616b32353600000000000000000000000000000000000000006014939091019283015250602001919050565b60408152600061b66a604083018561a96c565b828103602084015261680c818561a96c565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f220000000000000000000000000000000000000000000000000000000000000081526000825161b6e381600185016020870161a948565b7f22000000000000000000000000000000000000000000000000000000000000006001939091019283015250600201919050565b6000825161b72981846020870161a948565b7f2f6275696c642d696e666f000000000000000000000000000000000000000000920191825250600b01919050565b7f436f756c64206e6f742066696e64206275696c642d696e666f2066696c65207781527f697468206d61746368696e6720736f7572636520636f6465206861736820666f60208201527f7220636f6e74726163742000000000000000000000000000000000000000000060408201526000825161b7dc81604b85016020870161a948565b91909101604b0192915050565b600060ff821660ff810361b7ff5761b7ff61af93565b60010192915050565b7f406f70656e7a657070656c696e2f646566656e6465722d6465706c6f792d636c81527f69656e742d636c6940000000000000000000000000000000000000000000000060208201526000825161b86681602985016020870161a948565b9190910160290192915050565b60408152601660408201527f4f50454e5a455050454c494e5f424153485f50415448000000000000000000006060820152608060208201526000616810608083018461a96c565b60006020828403121561b8cc57600080fd5b815167ffffffffffffffff81111561b8e357600080fd5b82016060818503121561b8f557600080fd5b61b8fd61b107565b81518060030b811461b90e57600080fd5b8152602082015167ffffffffffffffff81111561b92a57600080fd5b61b9368682850161b1a0565b602083015250604082015167ffffffffffffffff81111561b95657600080fd5b61b9628682850161b1a0565b604083015250949350505050565b7f4661696c656420746f2072756e206261736820636f6d6d616e6420776974682081527f220000000000000000000000000000000000000000000000000000000000000060208201526000825161b9ce81602185016020870161a948565b7f222e20496620796f7520617265207573696e672057696e646f77732c2073657460219390910192830152507f20746865204f50454e5a455050454c494e5f424153485f5041544820656e766960418201527f726f6e6d656e74207661726961626c6520746f207468652066756c6c7920717560618201527f616c69666965642070617468206f66207468652062617368206578656375746160818201527f626c652e20466f72206578616d706c652c20696620796f75206172652075736960a18201527f6e672047697420666f722057696e646f77732c206164642074686520666f6c6c60c18201527f6f77696e67206c696e6520696e20746865202e656e762066696c65206f66207960e18201527f6f75722070726f6a65637420287573696e6720666f727761726420736c6173686101018201527f6573293a0a4f50454e5a455050454c494e5f424153485f504154483d22433a2f6101218201527f50726f6772616d2046696c65732f4769742f62696e2f6261736822000000000061014182015261015c01919050565b7f4661696c656420746f2066696e64206c696e652077697468207072656669782081527f270000000000000000000000000000000000000000000000000000000000000060208201526000835161bbba81602185016020880161a948565b7f2720696e206f75747075743a2000000000000000000000000000000000000000602191840191820152835161bbf781602e84016020880161a948565b01602e01949350505050565b7f4661696c656420746f2072756e2075706772616465207361666574792076616c81527f69646174696f6e3a20000000000000000000000000000000000000000000000060208201526000825161b86681602985016020870161a948565b7f55706772616465207361666574792076616c69646174696f6e206661696c656481527f3a0a00000000000000000000000000000000000000000000000000000000000060208201526000825161bcbf81602285016020870161a948565b9190910160220192915050565b7f436f6e7472616374206e616d652000000000000000000000000000000000000081526000825161bd0481600e85016020870161a948565b7f206d75737420626520696e2074686520666f726d6174204d79436f6e74726163600e9390910192830152507f742e736f6c3a4d79436f6e7472616374206f72204d79436f6e74726163742e73602e8201527f6f6c206f72206f75742f4d79436f6e74726163742e736f6c2f4d79436f6e7472604e8201527f6163742e6a736f6e000000000000000000000000000000000000000000000000606e820152607601919050565b7f53504458206c6963656e7365206964656e74696669657220000000000000000081526000835161bde281601885016020880161a948565b7f20696e2000000000000000000000000000000000000000000000000000000000601891840191820152835161be1f81601c84016020880161a948565b7f20646f6573206e6f74206c6f6f6b206c696b65206120737570706f7274656420601c92909101918201527f6c6963656e736520666f7220626c6f636b206578706c6f726572207665726966603c8201527f69636174696f6e2e205573652074686520606c6963656e73655479706560206f605c8201527f7074696f6e20746f20737065636966792061206c6963656e736520747970652c607c8201527f206f7220736574207468652060736b69704c6963656e73655479706560206f70609c8201527f74696f6e20746f2060747275656020746f20736b69702e00000000000000000060bc82015260d301949350505050565b6000825161bf2581846020870161a948565b7f2000000000000000000000000000000000000000000000000000000000000000920191825250600101919050565b7f406f70656e7a657070656c696e2f75706772616465732d636f7265400000000081526000825161bf8c81601c85016020870161a948565b91909101601c0192915050565b6000600019820361bfac5761bfac61af93565b5060010190565b80820281158282048414176167175761671761af93565b6001815b600184111561c0055780850481111561bfe95761bfe961af93565b600184161561bff757908102905b60019390931c92800261bfce565b935093915050565b60008261c01c57506001616717565b8161c02957506000616717565b816001811461c03f576002811461c0495761c065565b6001915050616717565b60ff84111561c05a5761c05a61af93565b50506001821b616717565b5060208310610133831016604e8410600b841016171561c088575081810a616717565b61c095600019848461bfca565b806000190482111561c0a95761c0a961af93565b029392505050565b6000616810838361c00d565b60008161c0cc5761c0cc61af93565b506000190190565b6000835161c0e681846020880161a948565b7f3a00000000000000000000000000000000000000000000000000000000000000908301908152835161c12081600184016020880161a948565b01600101949350505050565b8181036000831280158383131683831282161715619ad457619ad461af9356fe60c0604052600d60809081526c2bb930b83832b21022ba3432b960991b60a05260009061002c9082610114565b506040805180820190915260048152630ae8aa8960e31b60208201526001906100559082610114565b506002805460ff1916601217905534801561006f57600080fd5b506101d2565b634e487b7160e01b600052604160045260246000fd5b600181811c9082168061009f57607f821691505b6020821081036100bf57634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111561010f57806000526020600020601f840160051c810160208510156100ec5750805b601f840160051c820191505b8181101561010c57600081556001016100f8565b50505b505050565b81516001600160401b0381111561012d5761012d610075565b6101418161013b845461008b565b846100c5565b6020601f821160018114610175576000831561015d5750848201515b600019600385901b1c1916600184901b17845561010c565b600084815260208120601f198516915b828110156101a55787850151825560209485019460019092019101610185565b50848210156101c35786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b610986806101e16000396000f3fe6080604052600436106100c05760003560e01c8063313ce56711610074578063a9059cbb1161004e578063a9059cbb146101fa578063d0e30db01461021a578063dd62ed3e1461022257600080fd5b8063313ce5671461018c57806370a08231146101b857806395d89b41146101e557600080fd5b806318160ddd116100a557806318160ddd1461012f57806323b872dd1461014c5780632e1a7d4d1461016c57600080fd5b806306fdde03146100d4578063095ea7b3146100ff57600080fd5b366100cf576100cd61025a565b005b600080fd5b3480156100e057600080fd5b506100e96102b5565b6040516100f69190610745565b60405180910390f35b34801561010b57600080fd5b5061011f61011a3660046107da565b610343565b60405190151581526020016100f6565b34801561013b57600080fd5b50475b6040519081526020016100f6565b34801561015857600080fd5b5061011f610167366004610804565b6103bd565b34801561017857600080fd5b506100cd610187366004610841565b610647565b34801561019857600080fd5b506002546101a69060ff1681565b60405160ff90911681526020016100f6565b3480156101c457600080fd5b5061013e6101d336600461085a565b60036020526000908152604090205481565b3480156101f157600080fd5b506100e9610724565b34801561020657600080fd5b5061011f6102153660046107da565b610731565b6100cd61025a565b34801561022e57600080fd5b5061013e61023d366004610875565b600460209081526000928352604080842090915290825290205481565b33600090815260036020526040812080543492906102799084906108d7565b909155505060405134815233907fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c9060200160405180910390a2565b600080546102c2906108ea565b80601f01602080910402602001604051908101604052809291908181526020018280546102ee906108ea565b801561033b5780601f106103105761010080835404028352916020019161033b565b820191906000526020600020905b81548152906001019060200180831161031e57829003601f168201915b505050505081565b33600081815260046020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925906103ab9086815260200190565b60405180910390a35060015b92915050565b73ffffffffffffffffffffffffffffffffffffffff831660009081526003602052604081205482111561042b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600060248201526044015b60405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff841633148015906104a1575073ffffffffffffffffffffffffffffffffffffffff841660009081526004602090815260408083203384529091529020547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff14155b156105605773ffffffffffffffffffffffffffffffffffffffff8416600090815260046020908152604080832033845290915290205482111561051a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526020600482015260006024820152604401610422565b73ffffffffffffffffffffffffffffffffffffffff841660009081526004602090815260408083203384529091528120805484929061055a90849061093d565b90915550505b73ffffffffffffffffffffffffffffffffffffffff84166000908152600360205260408120805484929061059590849061093d565b909155505073ffffffffffffffffffffffffffffffffffffffff8316600090815260036020526040812080548492906105cf9084906108d7565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161063591815260200190565b60405180910390a35060019392505050565b3360009081526003602052604090205481111561069a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526020600482015260006024820152604401610422565b33600090815260036020526040812080548392906106b990849061093d565b9091555050604051339082156108fc029083906000818181858888f193505050501580156106eb573d6000803e3d6000fd5b5060405181815233907f7fcf532c15f0a6db0bd6d0e038bea71d30d808c7d98cb3bf7268a95bf5081b659060200160405180910390a250565b600180546102c2906108ea565b600061073e3384846103bd565b9392505050565b602081526000825180602084015260005b818110156107735760208186018101516040868401015201610756565b5060006040828501015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011684010191505092915050565b803573ffffffffffffffffffffffffffffffffffffffff811681146107d557600080fd5b919050565b600080604083850312156107ed57600080fd5b6107f6836107b1565b946020939093013593505050565b60008060006060848603121561081957600080fd5b610822846107b1565b9250610830602085016107b1565b929592945050506040919091013590565b60006020828403121561085357600080fd5b5035919050565b60006020828403121561086c57600080fd5b61073e826107b1565b6000806040838503121561088857600080fd5b610891836107b1565b915061089f602084016107b1565b90509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b808201808211156103b7576103b76108a8565b600181811c908216806108fe57607f821691505b602082108103610937577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b818103818111156103b7576103b76108a856fea264697066735822122008d7fc4e09519c5dd9f356b03596f6829a151d0bc7682533f9ceab4e459f5ee264736f6c634300081a00336080604052348015600f57600080fd5b506105208061001f6000396000f3fe60806040526004361061002a5760003560e01c806369582bee14610033578063de43156e1461005357005b3661003157005b005b34801561003f57600080fd5b5061003161004e3660046101ba565b610073565b34801561005f57600080fd5b5061003161006e3660046101ba565b6100ee565b6060811561008a5761008782840184610273565b90505b7ffdc887992b033668833927e252058e468fac0b6bd196d520f09c61b740e999486100b58780610369565b6100c560408a0160208b016103ce565b896040013533866040516100de969594939291906103f0565b60405180910390a1505050505050565b606081156101055761010282840184610273565b90505b7fcdc8ee677dc5ebe680fb18cebda5e26ba5ea1f0ba504a47e2a9a2ecb476dc98e6100b58780610369565b60006060828403121561014257600080fd5b50919050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461016c57600080fd5b919050565b60008083601f84011261018357600080fd5b50813567ffffffffffffffff81111561019b57600080fd5b6020830191508360208285010111156101b357600080fd5b9250929050565b6000806000806000608086880312156101d257600080fd5b853567ffffffffffffffff8111156101e957600080fd5b6101f588828901610130565b95505061020460208701610148565b935060408601359250606086013567ffffffffffffffff81111561022757600080fd5b61023388828901610171565b969995985093965092949392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60006020828403121561028557600080fd5b813567ffffffffffffffff81111561029c57600080fd5b8201601f810184136102ad57600080fd5b803567ffffffffffffffff8111156102c7576102c7610244565b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8501160116810181811067ffffffffffffffff8211171561033357610333610244565b60405281815282820160200186101561034b57600080fd5b81602084016020830137600091810160200191909152949350505050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261039e57600080fd5b83018035915067ffffffffffffffff8211156103b957600080fd5b6020019150368190038213156101b357600080fd5b6000602082840312156103e057600080fd5b6103e982610148565b9392505050565b60a081528560a0820152858760c0830137600060c0878301015260007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f880116820173ffffffffffffffffffffffffffffffffffffffff8716602084015285604084015273ffffffffffffffffffffffffffffffffffffffff8516606084015260c083820301608084015283518060c083015260005b818110156104a557602081870181015184830160e0015201610488565b50600060e0838301810191909152601f9091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016909101019897505050505050505056fea2646970667358221220f4d1ccb9c8450e782e1c77412473fd37637a5c83a2a3272307d8c8bc8e8c7a3364736f6c634300081a003360c060405234801561001057600080fd5b5060405161106f38038061106f83398101604081905261002f916100db565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461006357604051632b2add3d60e01b815260040160405180910390fd5b600380546001600160a01b0319166001600160a01b0385811691909117909155828116608052811660a0526040517f80699e81136d69cb8367ad52a994e25c722a86da654b561d0c14b61a777e7ac590600090a150505061011e565b80516001600160a01b03811681146100d657600080fd5b919050565b6000806000606084860312156100f057600080fd5b6100f9846100bf565b9250610107602085016100bf565b9150610115604085016100bf565b90509250925092565b60805160a051610f2561014a60003960006101e50152600081816102b9015261045b0152610f256000f3fe608060405234801561001057600080fd5b50600436106100f55760003560e01c806397770dff11610097578063c63585cc11610066578063c63585cc14610273578063d7fd7afb14610286578063d936a012146102b4578063ee2815ba146102db57600080fd5b806397770dff1461021a578063a7cb05071461022d578063c39aca3714610240578063c62178ac1461025357600080fd5b8063513a9c05116100d3578063513a9c051461018a578063569541b9146101c0578063842da36d146101e057806391dd645f1461020757600080fd5b80630be15547146100fa5780631f0e251b1461015a5780633ce4a5bc1461016f575b600080fd5b610130610108366004610bd1565b60016020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b61016d610168366004610c13565b6102ee565b005b61013073735b14bb79463307aacbed86daf3322b1e6226ab81565b610130610198366004610bd1565b60026020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b6003546101309073ffffffffffffffffffffffffffffffffffffffff1681565b6101307f000000000000000000000000000000000000000000000000000000000000000081565b61016d610215366004610c35565b610402565b61016d610228366004610c13565b610526565b61016d61023b366004610c61565b610633565b61016d61024e366004610c83565b6106ce565b6004546101309073ffffffffffffffffffffffffffffffffffffffff1681565b610130610281366004610d53565b6108cd565b6102a6610294366004610bd1565b60006020819052908152604090205481565b604051908152602001610151565b6101307f000000000000000000000000000000000000000000000000000000000000000081565b61016d6102e9366004610c35565b610a02565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461033b576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116610388576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600480547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527f3ade88e3922d64780e1bf4460d364c2970b69da813f9c0c07a1c187b5647636c906020015b60405180910390a150565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461044f576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600354600090610497907f00000000000000000000000000000000000000000000000000000000000000009073ffffffffffffffffffffffffffffffffffffffff16846108cd565b60008481526002602090815260409182902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff85169081179091558251878152918201529192507f0ecec485166da6139b13bb7e033e9446e2d35348e80ebf1180d4afe2dba1704e910160405180910390a1505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610573576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff81166105c0576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527fdba79d534382d1a8ae108e4c8ecb27c6ae42ab8b91d44eedf88bd329f3868d5e906020016103f7565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610680576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000828152602081815260409182902083905581518481529081018390527f49f492222906ac486c3c1401fa545626df1f0c0e5a77a05597ea2ed66af9850d91015b60405180910390a15050565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461071b576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff831673735b14bb79463307aacbed86daf3322b1e6226ab1480610768575073ffffffffffffffffffffffffffffffffffffffff831630145b1561079f576040517f82d5d76a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f47e7ef2400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152602482018690528616906347e7ef24906044016020604051808303816000875af1158015610814573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108389190610d96565b506040517fde43156e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84169063de43156e906108939089908990899088908890600401610e01565b600060405180830381600087803b1580156108ad57600080fd5b505af11580156108c1573d6000803e3d6000fd5b50505050505050505050565b60008060006108dc8585610ad3565b6040517fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606084811b8216602084015283901b16603482015291935091508690604801604051602081830303815290604052805190602001206040516020016109c29291907fff00000000000000000000000000000000000000000000000000000000000000815260609290921b7fffffffffffffffffffffffffffffffffffffffff00000000000000000000000016600183015260158201527f96e8ac4277198ff8b6f785478aa9a39f403cb768dd02cbee326c3e7da348845f603582015260550190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291905280516020909101209695505050505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610a4f576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008281526001602090815260409182902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff85169081179091558251858152918201527fd1b36d30f6248e97c473b4d1348ca164a4ef6759022f54a58ec200326c39c45d91016106c2565b6000808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603610b3b576040517fcb1e7cfe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1610610b75578284610b78565b83835b909250905073ffffffffffffffffffffffffffffffffffffffff8216610bca576040517f78b507da00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b9250929050565b600060208284031215610be357600080fd5b5035919050565b803573ffffffffffffffffffffffffffffffffffffffff81168114610c0e57600080fd5b919050565b600060208284031215610c2557600080fd5b610c2e82610bea565b9392505050565b60008060408385031215610c4857600080fd5b82359150610c5860208401610bea565b90509250929050565b60008060408385031215610c7457600080fd5b50508035926020909101359150565b60008060008060008060a08789031215610c9c57600080fd5b863567ffffffffffffffff811115610cb357600080fd5b87016060818a031215610cc557600080fd5b9550610cd360208801610bea565b945060408701359350610ce860608801610bea565b9250608087013567ffffffffffffffff811115610d0457600080fd5b8701601f81018913610d1557600080fd5b803567ffffffffffffffff811115610d2c57600080fd5b896020828401011115610d3e57600080fd5b60208201935080925050509295509295509295565b600080600060608486031215610d6857600080fd5b610d7184610bea565b9250610d7f60208501610bea565b9150610d8d60408501610bea565b90509250925092565b600060208284031215610da857600080fd5b81518015158114610c2e57600080fd5b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b60808152600086357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1883603018112610e3957600080fd5b870160208101903567ffffffffffffffff811115610e5657600080fd5b803603821315610e6557600080fd5b60606080850152610e7a60e085018284610db8565b91505073ffffffffffffffffffffffffffffffffffffffff610e9e60208a01610bea565b1660a0840152604088013560c084015273ffffffffffffffffffffffffffffffffffffffff871660208401528560408401528281036060840152610ee3818587610db8565b9897505050505050505056fea2646970667358221220431a07541a491b54259bdf8fcd05ade6751bfbbf0e72e605f27325b56d7d464f64736f6c634300081a003360e060405234801561001057600080fd5b50604051611bb9380380611bb983398101604081905261002f9161020e565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461006357604051632b2add3d60e01b815260040160405180910390fd5b6001600160a01b038216158061008057506001600160a01b038116155b1561009e5760405163d92e233d60e01b815260040160405180910390fd5b60066100aa8982610360565b5060076100b78882610360565b5060ff861660c05260808590528360028111156100d6576100d661041e565b60a08160028111156100ea576100ea61041e565b905250600192909255600080546001600160a01b039283166001600160a01b03199182161790915560088054929093169116179055506104349350505050565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261015157600080fd5b81516001600160401b0381111561016a5761016a61012a565b604051601f8201601f19908116603f011681016001600160401b03811182821017156101985761019861012a565b6040528181528382016020018510156101b057600080fd5b60005b828110156101cf576020818601810151838301820152016101b3565b506000918101602001919091529392505050565b8051600381106101f257600080fd5b919050565b80516001600160a01b03811681146101f257600080fd5b600080600080600080600080610100898b03121561022b57600080fd5b88516001600160401b0381111561024157600080fd5b61024d8b828c01610140565b60208b015190995090506001600160401b0381111561026b57600080fd5b6102778b828c01610140565b975050604089015160ff8116811461028e57600080fd5b60608a015190965094506102a460808a016101e3565b60a08a015190945092506102ba60c08a016101f7565b91506102c860e08a016101f7565b90509295985092959890939650565b600181811c908216806102eb57607f821691505b60208210810361030b57634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111561035b57806000526020600020601f840160051c810160208510156103385750805b601f840160051c820191505b818110156103585760008155600101610344565b50505b505050565b81516001600160401b038111156103795761037961012a565b61038d8161038784546102d7565b84610311565b6020601f8211600181146103c157600083156103a95750848201515b600019600385901b1c1916600184901b178455610358565b600084815260208120601f198516915b828110156103f157878501518255602094850194600190920191016103d1565b508482101561040f5786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b634e487b7160e01b600052602160045260246000fd5b60805160a05160c05161174861047160003960006102170152600061033a0152600081816102eb01528181610ad70152610bdd01526117486000f3fe608060405234801561001057600080fd5b50600436106101985760003560e01c80638b851b95116100e3578063ccc775991161008c578063eddeb12311610066578063eddeb12314610431578063f2441b3214610444578063f687d12a1461046457600080fd5b8063ccc77599146103a4578063d9eeebed146103b7578063dd62ed3e146103eb57600080fd5b8063a9059cbb116100bd578063a9059cbb14610369578063c70126261461037c578063c835d7cc1461038f57600080fd5b80638b851b951461030d57806395d89b411461032d578063a3413d031461033557600080fd5b80633ce4a5bc116101455780634d8943bb1161011f5780634d8943bb146102a757806370a08231146102b057806385e1f4d0146102e657600080fd5b80633ce4a5bc1461024157806342966c681461028157806347e7ef241461029457600080fd5b806318160ddd1161017657806318160ddd146101f557806323b872dd146101fd578063313ce5671461021057600080fd5b806306fdde031461019d578063091d2788146101bb578063095ea7b3146101d2575b600080fd5b6101a5610477565b6040516101b29190611327565b60405180910390f35b6101c460015481565b6040519081526020016101b2565b6101e56101e0366004611366565b610509565b60405190151581526020016101b2565b6005546101c4565b6101e561020b366004611392565b610520565b60405160ff7f00000000000000000000000000000000000000000000000000000000000000001681526020016101b2565b61025c73735b14bb79463307aacbed86daf3322b1e6226ab81565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101b2565b6101e561028f3660046113d3565b6105b7565b6101e56102a2366004611366565b6105cb565b6101c460025481565b6101c46102be3660046113ec565b73ffffffffffffffffffffffffffffffffffffffff1660009081526003602052604090205490565b6101c47f000000000000000000000000000000000000000000000000000000000000000081565b60085461025c9073ffffffffffffffffffffffffffffffffffffffff1681565b6101a561071f565b61035c7f000000000000000000000000000000000000000000000000000000000000000081565b6040516101b29190611409565b6101e5610377366004611366565b61072e565b6101e561038a366004611479565b61073b565b6103a261039d3660046113ec565b61088a565b005b6103a26103b23660046113ec565b61099e565b6103bf610aab565b6040805173ffffffffffffffffffffffffffffffffffffffff90931683526020830191909152016101b2565b6101c46103f9366004611571565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260046020908152604080832093909416825291909152205490565b6103a261043f3660046113d3565b610cc9565b60005461025c9073ffffffffffffffffffffffffffffffffffffffff1681565b6103a26104723660046113d3565b610d4b565b606060068054610486906115aa565b80601f01602080910402602001604051908101604052809291908181526020018280546104b2906115aa565b80156104ff5780601f106104d4576101008083540402835291602001916104ff565b820191906000526020600020905b8154815290600101906020018083116104e257829003601f168201915b5050505050905090565b6000610516338484610dcd565b5060015b92915050565b600061052d848484610ed6565b73ffffffffffffffffffffffffffffffffffffffff8416600090815260046020908152604080832033845290915290205482811015610598576040517f10bad14700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6105ac85336105a7868561162c565b610dcd565b506001949350505050565b60006105c33383611091565b506001919050565b60003373735b14bb79463307aacbed86daf3322b1e6226ab14801590610609575060005473ffffffffffffffffffffffffffffffffffffffff163314155b801561062d575060085473ffffffffffffffffffffffffffffffffffffffff163314155b15610664576040517fddb5de5e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61066e83836111d3565b6040517f735b14bb79463307aacbed86daf3322b1e6226ab000000000000000000000000602082015273ffffffffffffffffffffffffffffffffffffffff8416907f67fc7bdaed5b0ec550d8706b87d60568ab70c6b781263c70101d54cd1564aab390603401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529082905261070e91869061163f565b60405180910390a250600192915050565b606060078054610486906115aa565b6000610516338484610ed6565b6000806000610748610aab565b6040517f23b872dd00000000000000000000000000000000000000000000000000000000815233600482015273735b14bb79463307aacbed86daf3322b1e6226ab602482015260448101829052919350915073ffffffffffffffffffffffffffffffffffffffff8316906323b872dd906064016020604051808303816000875af11580156107da573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107fe9190611661565b610834576040517f0a7cd6d600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61083e3385611091565b60025460405133917f9ffbffc04a397460ee1dbe8c9503e098090567d6b7f4b3c02a8617d800b6d9559161087791899189918791611683565b60405180910390a2506001949350505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab146108d7576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116610924576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527fd55614e962c5fd6ece71614f6348d702468a997a394dd5e5c1677950226d97ae906020015b60405180910390a150565b3373735b14bb79463307aacbed86daf3322b1e6226ab146109eb576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116610a38576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600880547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527f88815d964e380677e86d817e7d65dea59cb7b4c3b5b7a0c8ec7ea4a74f90a38790602001610993565b600080546040517f0be155470000000000000000000000000000000000000000000000000000000081527f000000000000000000000000000000000000000000000000000000000000000060048201528291829173ffffffffffffffffffffffffffffffffffffffff90911690630be1554790602401602060405180830381865afa158015610b3e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b6291906116b2565b905073ffffffffffffffffffffffffffffffffffffffff8116610bb1576040517f78fff39600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080546040517fd7fd7afb0000000000000000000000000000000000000000000000000000000081527f0000000000000000000000000000000000000000000000000000000000000000600482015273ffffffffffffffffffffffffffffffffffffffff9091169063d7fd7afb90602401602060405180830381865afa158015610c40573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c6491906116cf565b905080600003610ca0576040517fe661aed000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060025460015483610cb391906116e8565b610cbd91906116ff565b92959294509192505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610d16576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60028190556040518181527fef13af88e424b5d15f49c77758542c1938b08b8b95b91ed0751f98ba99000d8f90602001610993565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610d98576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018190556040518181527fff5788270f43bfc1ca41c503606d2594aa3023a1a7547de403a3e2f146a4a80a90602001610993565b73ffffffffffffffffffffffffffffffffffffffff8316610e1a576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216610e67576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff83811660008181526004602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8316610f23576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216610f70576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff831660009081526003602052604090205481811015610fd0576040517ffe382aa700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610fda828261162c565b73ffffffffffffffffffffffffffffffffffffffff808616600090815260036020526040808220939093559085168152908120805484929061101d9084906116ff565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161108391815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff82166110de576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff82166000908152600360205260409020548181101561113e576040517ffe382aa700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611148828261162c565b73ffffffffffffffffffffffffffffffffffffffff84166000908152600360205260408120919091556005805484929061118390849061162c565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90602001610ec9565b73ffffffffffffffffffffffffffffffffffffffff8216611220576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b806005600082825461123291906116ff565b909155505073ffffffffffffffffffffffffffffffffffffffff82166000908152600360205260408120805483929061126c9084906116ff565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6000815180845260005b818110156112e9576020818501810151868301820152016112cd565b5060006020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b60208152600061133a60208301846112c3565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff8116811461136357600080fd5b50565b6000806040838503121561137957600080fd5b823561138481611341565b946020939093013593505050565b6000806000606084860312156113a757600080fd5b83356113b281611341565b925060208401356113c281611341565b929592945050506040919091013590565b6000602082840312156113e557600080fd5b5035919050565b6000602082840312156113fe57600080fd5b813561133a81611341565b6020810160038310611444577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000806040838503121561148c57600080fd5b823567ffffffffffffffff8111156114a357600080fd5b8301601f810185136114b457600080fd5b803567ffffffffffffffff8111156114ce576114ce61144a565b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8501160116810181811067ffffffffffffffff8211171561153a5761153a61144a565b60405281815282820160200187101561155257600080fd5b8160208401602083013760006020928201830152969401359450505050565b6000806040838503121561158457600080fd5b823561158f81611341565b9150602083013561159f81611341565b809150509250929050565b600181811c908216806115be57607f821691505b6020821081036115f7577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8181038181111561051a5761051a6115fd565b60408152600061165260408301856112c3565b90508260208301529392505050565b60006020828403121561167357600080fd5b8151801515811461133a57600080fd5b60808152600061169660808301876112c3565b6020830195909552506040810192909252606090910152919050565b6000602082840312156116c457600080fd5b815161133a81611341565b6000602082840312156116e157600080fd5b5051919050565b808202811582820484141761051a5761051a6115fd565b8082018082111561051a5761051a6115fd56fea26469706673582212204013e39523742118b3f2227e145ee7e48176ba6aebead33c596dca2acb59a74c64736f6c634300081a0033a2646970667358221220bece5e1c812fe258c6727799ee166dd0bb6d56e249f9594182e618cf7109dd3164736f6c634300081a0033", + Bin: "0x6080604052600c8054600160ff199182168117909255601f80549091169091179055348015602c57600080fd5b5061fe508061003c6000396000f3fe608060405234801561001057600080fd5b506004361061034c5760003560e01c80637f924c4e116101bd578063c2725318116100f9578063e63ab1e9116100a2578063f5a357331161007c578063f5a357331461055a578063fa7626d414610562578063fc6734eb1461056f578063fc79171b1461057757600080fd5b8063e63ab1e914610515578063eba3c49c1461054a578063f06c08941461055257600080fd5b8063df690b9a116100d3578063df690b9a146104fd578063df881f6c14610505578063e20c9f711461050d57600080fd5b8063c2725318146104e5578063c3248272146104ed578063cced12c7146104f557600080fd5b8063996b767511610166578063aed71d9711610140578063aed71d97146104b5578063b0464fdc146104bd578063b5508aa9146104c5578063ba414fa6146104cd57600080fd5b8063996b76751461049d5780639b3272bf146104a55780639b86d40f146104ad57600080fd5b8063916a17c611610197578063916a17c61461047857806394d78f7b1461048d57806396d9d8761461049557600080fd5b80637f924c4e1461045357806382978ffc1461045b57806385226c811461046357600080fd5b806331d099561161028c578063461fc5af11610235578063612aa5491161020f578063612aa5491461042657806366d9a9a01461042e578063720b9aa9146104435780637243a2fb1461044b57600080fd5b8063461fc5af1461040e57806355ea935114610416578063597cfeb01461041e57600080fd5b80633e5e3c23116102665780633e5e3c23146103f65780633f7286f4146103fe57806344b2a40b1461040657600080fd5b806331d09956146103de5780633a25c460146103e65780633ab5b199146103ee57600080fd5b8063198d5ca4116102f95780631fe68797116102d35780631fe68797146103b1578063254ea181146103b95780632ade3880146103c157806330548465146103d657600080fd5b8063198d5ca4146103835780631c785a141461038b5780631ed7831c1461039357600080fd5b8063104b35221161032a578063104b35221461036b57806314b7a6da14610373578063191c9a9e1461037b57600080fd5b806309f080da1461035157806309f92c1f1461035b5780630a9254e414610363575b600080fd5b61035961057f565b005b610359610773565b610359610926565b610359611393565b610359611585565b6103596116eb565b61035961189c565b610359611b56565b61039b61249f565b6040516103a8919061a8fc565b60405180910390f35b610359612501565b610359612a30565b6103c9612be5565b6040516103a8919061a998565b610359612d27565b610359612edc565b61035961309b565b610359613256565b61039b613407565b61039b613467565b6103596134c7565b61035961364f565b61035961380d565b6103596139c0565b610359613d96565b610436613f49565b6040516103a8919061aafe565b6103596140cb565b61035961433e565b6103596144f1565b610359614543565b61046b614693565b6040516103a8919061ab9c565b610480614763565b6040516103a8919061ac13565b61035961485e565b610359614a0d565b610359614b60565b610359614cb4565b610359614e65565b610359615011565b61048061531d565b61046b615418565b6104d56154e8565b60405190151581526020016103a8565b6103596155bc565b610359615775565b61035961592e565b610359615b19565b610359615cd7565b61039b615e8c565b61053c7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b6040519081526020016103a8565b610359615eec565b6103596160aa565b61035961625f565b601f546104d59060ff1681565b610359616416565b6103596165c7565b60006040516020016105909061acaa565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401526001838301528151630618f58760e51b81527f2b2add3d0000000000000000000000000000000000000000000000000000000060048201529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163c31eb0e091602480830192600092919082900301818387803b15801561065a57600080fd5b505af115801561066e573d6000803e3d6000fd5b505060255460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b1580156106cb57600080fd5b505af11580156106df573d6000803e3d6000fd5b50506020546021546024546040517f5af659670000000000000000000000000000000000000000000000000000000081526001600160a01b039384169550635af65967945061073d938793811692600192911690899060040161ad25565b600060405180830381600087803b15801561075757600080fd5b505af115801561076b573d6000803e3d6000fd5b505050505050565b60006040516020016107849061acaa565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401819052600184840152825163ca669fa760e01b815260048101919091529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163ca669fa791602480830192600092919082900301818387803b15801561083257600080fd5b505af1158015610846573d6000803e3d6000fd5b5050604051630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b1580156108b657600080fd5b505af11580156108ca573d6000803e3d6000fd5b50506020546024546040517fbcf7f32b0000000000000000000000000000000000000000000000000000000081526001600160a01b03928316945063bcf7f32b935061073d92869260009260019290911690899060040161ad25565b602580547fffffffffffffffffffffffff000000000000000000000000000000000000000090811630179091556026805490911661123417905560405161096c9061a80f565b604051809103906000f080158015610988573d6000803e3d6000fd5b50602280547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03928316908117909155604080518082018252600f81527f476174657761795a45564d2e736f6c000000000000000000000000000000000060208201526025549151602481019390935292166044820152610a6c919060640160408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f485cc955000000000000000000000000000000000000000000000000000000001790526166fe565b601f80547fffffffffffffffffffffff0000000000000000000000000000000000000000ff166101006001600160a01b039384168102919091179182905560208054919092049092167fffffffffffffffffffffffff000000000000000000000000000000000000000090921682178155604080517f3ce4a5bc0000000000000000000000000000000000000000000000000000000081529051633ce4a5bc926004808401939192918290030181865afa158015610b2e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b52919061ad7a565b602780547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055604051610b969061a81c565b604051809103906000f080158015610bb2573d6000803e3d6000fd5b50602480547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039283161781556027546040517f06447d5600000000000000000000000000000000000000000000000000000000815292166004830152737109709ecfa91a80626ff3989d68f67f5b1dd12d916306447d569101600060405180830381600087803b158015610c4e57600080fd5b505af1158015610c62573d6000803e3d6000fd5b505050506000806000604051610c779061a829565b6001600160a01b03938416815291831660208301529091166040820152606001604051809103906000f080158015610cb3573d6000803e3d6000fd5b50602380547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03928316908117909155602054604051601293600193849360009391921690610d099061a836565b610d189695949392919061ada3565b604051809103906000f080158015610d34573d6000803e3d6000fd5b50602180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039283169081179091556023546040517fee2815ba0000000000000000000000000000000000000000000000000000000081526001600482015260248101929092529091169063ee2815ba90604401600060405180830381600087803b158015610dcb57600080fd5b505af1158015610ddf573d6000803e3d6000fd5b50506023546040517fa7cb050700000000000000000000000000000000000000000000000000000000815260016004820181905260248201526001600160a01b03909116925063a7cb05079150604401600060405180830381600087803b158015610e4957600080fd5b505af1158015610e5d573d6000803e3d6000fd5b50506027546040517fc88a5e6d0000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152633b9aca006024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c88a5e6d9150604401600060405180830381600087803b158015610edd57600080fd5b505af1158015610ef1573d6000803e3d6000fd5b50505050602260009054906101000a90046001600160a01b03166001600160a01b031663d0e30db0600a6040518263ffffffff1660e01b81526004016000604051808303818588803b158015610f4657600080fd5b505af1158015610f5a573d6000803e3d6000fd5b50506022546020546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152600a60248201529116935063095ea7b3925060440190506020604051808303816000875af1158015610fce573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ff2919061ae98565b506021546025546040517f47e7ef240000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620186a060248201529116906347e7ef24906044016020604051808303816000875af1158015611063573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611087919061ae98565b507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b03166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156110e657600080fd5b505af11580156110fa573d6000803e3d6000fd5b50506025546040517f06447d560000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506306447d569150602401600060405180830381600087803b15801561117057600080fd5b505af1158015611184573d6000803e3d6000fd5b50506021546020546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620186a060248201529116925063095ea7b391506044016020604051808303816000875af11580156111f8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061121c919061ae98565b50602260009054906101000a90046001600160a01b03166001600160a01b031663d0e30db0600a6040518263ffffffff1660e01b81526004016000604051808303818588803b15801561126e57600080fd5b505af1158015611282573d6000803e3d6000fd5b50506022546020546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152600a60248201529116935063095ea7b3925060440190506020604051808303816000875af11580156112f6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061131a919061ae98565b507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b03166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561137957600080fd5b505af115801561138d573d6000803e3d6000fd5b50505050565b6040516001906000906113a89060200161acaa565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401526001838301528151630618f58760e51b81527f82d5d76a0000000000000000000000000000000000000000000000000000000060048201529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163c31eb0e091602480830192600092919082900301818387803b15801561147257600080fd5b505af1158015611486573d6000803e3d6000fd5b505060275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b1580156114e357600080fd5b505af11580156114f7573d6000803e3d6000fd5b50506020546027546040517f21501a950000000000000000000000000000000000000000000000000000000081526001600160a01b0392831694506321501a95935061154e9286928992911690889060040161aeba565b600060405180830381600087803b15801561156857600080fd5b505af115801561157c573d6000803e3d6000fd5b50505050505050565b60275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156115de57600080fd5b505af11580156115f2573d6000803e3d6000fd5b5050604051630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b15801561166257600080fd5b505af1158015611676573d6000803e3d6000fd5b50506020546021546040517ff45346dc0000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260016024820152600060448201529116925063f45346dc91506064015b600060405180830381600087803b15801561137957600080fd5b60006040516020016116fc9061acaa565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401819052600184840152825163ca669fa760e01b815260048101919091529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163ca669fa791602480830192600092919082900301818387803b1580156117aa57600080fd5b505af11580156117be573d6000803e3d6000fd5b5050604051630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b15801561182e57600080fd5b505af1158015611842573d6000803e3d6000fd5b50506020546021546040517f309f50040000000000000000000000000000000000000000000000000000000081526001600160a01b03928316945063309f5004935061073d9286921690600190600090899060040161ad25565b6021546026546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260019260009216906370a0823190602401602060405180830381865afa158015611906573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061192a919061aef4565b905061193760008261671d565b60255460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561199057600080fd5b505af11580156119a4573d6000803e3d6000fd5b5050604051630618f58760e51b81527f2b2add3d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b158015611a1457600080fd5b505af1158015611a28573d6000803e3d6000fd5b50506020546021546026546040517ff45346dc0000000000000000000000000000000000000000000000000000000081526001600160a01b0392831660048201526024810188905290821660448201529116925063f45346dc9150606401600060405180830381600087803b158015611aa057600080fd5b505af1158015611ab4573d6000803e3d6000fd5b50506021546026546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260009450911691506370a0823190602401602060405180830381865afa158015611b20573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b44919061aef4565b9050611b5160008261671d565b505050565b60275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015611baf57600080fd5b505af1158015611bc3573d6000803e3d6000fd5b5050602754604080516001600160a01b0390921660248301527f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a60448084019190915281518084039091018152606490920181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb39250611cae919060040161af0d565b600060405180830381600087803b158015611cc857600080fd5b505af1158015611cdc573d6000803e3d6000fd5b50505050602060009054906101000a90046001600160a01b03166001600160a01b0316638456cb596040518163ffffffff1660e01b8152600401600060405180830381600087803b158015611d3057600080fd5b505af1158015611d44573d6000803e3d6000fd5b505060275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b158015611da157600080fd5b505af1158015611db5573d6000803e3d6000fd5b5050602754604080516001600160a01b0390921660248301527f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a60448084019190915281518084039091018152606490920181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb39250611ea0919060040161af0d565b600060405180830381600087803b158015611eba57600080fd5b505af1158015611ece573d6000803e3d6000fd5b50505050602060009054906101000a90046001600160a01b03166001600160a01b0316633f4ba83a6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015611f2257600080fd5b505af1158015611f36573d6000803e3d6000fd5b505060255460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b158015611f9357600080fd5b505af1158015611fa7573d6000803e3d6000fd5b50505050602060009054906101000a90046001600160a01b03166001600160a01b0316638456cb596040518163ffffffff1660e01b8152600401600060405180830381600087803b158015611ffb57600080fd5b505af115801561200f573d6000803e3d6000fd5b5050604051630618f58760e51b81527fd93c066500000000000000000000000000000000000000000000000000000000600482015260019250737109709ecfa91a80626ff3989d68f67f5b1dd12d915063c31eb0e090602401600060405180830381600087803b15801561208257600080fd5b505af1158015612096573d6000803e3d6000fd5b505060275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b1580156120f357600080fd5b505af1158015612107573d6000803e3d6000fd5b50506020546021546026546040517ff45346dc0000000000000000000000000000000000000000000000000000000081526001600160a01b0392831660048201526024810187905290821660448201529116925063f45346dc9150606401600060405180830381600087803b15801561217f57600080fd5b505af1158015612193573d6000803e3d6000fd5b505060255460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b1580156121f057600080fd5b505af1158015612204573d6000803e3d6000fd5b50505050602060009054906101000a90046001600160a01b03166001600160a01b0316633f4ba83a6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561225857600080fd5b505af115801561226c573d6000803e3d6000fd5b50506021546026546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260009450911691506370a08231906024015b602060405180830381865afa1580156122d9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122fd919061aef4565b905061230a60008261671d565b60275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561236357600080fd5b505af1158015612377573d6000803e3d6000fd5b50506020546021546026546040517ff45346dc0000000000000000000000000000000000000000000000000000000081526001600160a01b0392831660048201526024810188905290821660448201529116925063f45346dc9150606401600060405180830381600087803b1580156123ef57600080fd5b505af1158015612403573d6000803e3d6000fd5b50506021546026546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260009450911691506370a0823190602401602060405180830381865afa15801561246f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612493919061aef4565b9050611b51838261671d565b606060168054806020026020016040519081016040528092919081815260200182805480156124f757602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116124d9575b5050505050905090565b6022546027546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260019260009216906370a0823190602401602060405180830381865afa15801561256b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061258f919061aef4565b6022546020546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201529293506000929116906370a0823190602401602060405180830381865afa1580156125fa573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061261e919061aef4565b6024546040519192506001600160a01b031631906000906126419060200161acaa565b60408051601f19818403018152606080840190925260205490911b6bffffffffffffffffffffffff191660808301529150600090806094810160408051808303601f190181529181529082526027546001600160a01b03908116602084015260019282018390526024805492517f81bad6f300000000000000000000000000000000000000000000000000000000815260048101859052908101849052604481018490526064810193909352166084820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b15801561272f57600080fd5b505af1158015612743573d6000803e3d6000fd5b5050602080546040517fcdc8ee677dc5ebe680fb18cebda5e26ba5ea1f0ba504a47e2a9a2ecb476dc98e945061279e93506001600160a01b03909116910160609190911b6bffffffffffffffffffffffff1916815260140190565b60408051601f19818403018152908290526027546020546127ce936001600160a01b03928316928c92169061af20565b60405180910390a160275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561282f57600080fd5b505af1158015612843573d6000803e3d6000fd5b50506020546024546040517f21501a950000000000000000000000000000000000000000000000000000000081526001600160a01b0392831694506321501a95935061289a9286928c92911690889060040161aeba565b600060405180830381600087803b1580156128b457600080fd5b505af11580156128c8573d6000803e3d6000fd5b50506022546027546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260009450911691506370a0823190602401602060405180830381865afa158015612934573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612958919061aef4565b905061296d612967888861afc2565b8261671d565b6022546020546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260009291909116906370a0823190602401602060405180830381865afa1580156129d7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129fb919061aef4565b9050612a07868261671d565b612a26612a14898761afd5565b6024546001600160a01b03163161671d565b5050505050505050565b6000604051602001612a419061acaa565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401819052600184840152825163ca669fa760e01b815260048101919091529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163ca669fa791602480830192600092919082900301818387803b158015612aef57600080fd5b505af1158015612b03573d6000803e3d6000fd5b5050604051630618f58760e51b81527f5d67094f000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b158015612b7357600080fd5b505af1158015612b87573d6000803e3d6000fd5b50506020546021546024546040517fc39aca370000000000000000000000000000000000000000000000000000000081526001600160a01b03938416955063c39aca37945061073d938793811692600092911690899060040161ad25565b6060601e805480602002602001604051908101604052809291908181526020016000905b82821015612d1e57600084815260208082206040805180820182526002870290920180546001600160a01b03168352600181018054835181870281018701909452808452939591948681019491929084015b82821015612d07578382906000526020600020018054612c7a9061afe8565b80601f0160208091040260200160405190810160405280929190818152602001828054612ca69061afe8565b8015612cf35780601f10612cc857610100808354040283529160200191612cf3565b820191906000526020600020905b815481529060010190602001808311612cd657829003601f168201915b505050505081526020019060010190612c5b565b505050508152505081526020019060010190612c09565b50505050905090565b6000604051602001612d389061acaa565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401819052600184840152825163ca669fa760e01b815260048101919091529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163ca669fa791602480830192600092919082900301818387803b158015612de657600080fd5b505af1158015612dfa573d6000803e3d6000fd5b5050604051630618f58760e51b81527f5d67094f000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b158015612e6a57600080fd5b505af1158015612e7e573d6000803e3d6000fd5b50506020546021546024546040517f309f50040000000000000000000000000000000000000000000000000000000081526001600160a01b03938416955063309f5004945061073d938793811692600092911690899060040161ad25565b6000604051602001612eed9061acaa565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401526001838301528151630618f58760e51b81527f2b2add3d0000000000000000000000000000000000000000000000000000000060048201529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163c31eb0e091602480830192600092919082900301818387803b158015612fb757600080fd5b505af1158015612fcb573d6000803e3d6000fd5b505060255460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa791506024015b600060405180830381600087803b15801561302957600080fd5b505af115801561303d573d6000803e3d6000fd5b50506020546021546024546040517f309f50040000000000000000000000000000000000000000000000000000000081526001600160a01b03938416955063309f5004945061073d938793811692600192911690899060040161ad25565b6040516001906000906130b09060200161acaa565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401526001838301528151630618f58760e51b81527f2b2add3d0000000000000000000000000000000000000000000000000000000060048201529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163c31eb0e091602480830192600092919082900301818387803b15801561317a57600080fd5b505af115801561318e573d6000803e3d6000fd5b505060255460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b1580156131eb57600080fd5b505af11580156131ff573d6000803e3d6000fd5b50506020546024546040517f21501a950000000000000000000000000000000000000000000000000000000081526001600160a01b0392831694506321501a95935061154e9286928992911690889060040161aeba565b60006040516020016132679061acaa565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401819052600184840152825163ca669fa760e01b815260048101919091529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163ca669fa791602480830192600092919082900301818387803b15801561331557600080fd5b505af1158015613329573d6000803e3d6000fd5b5050604051630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b15801561339957600080fd5b505af11580156133ad573d6000803e3d6000fd5b50506020546021546040517fbcf7f32b0000000000000000000000000000000000000000000000000000000081526001600160a01b03928316945063bcf7f32b935061073d9286921690600190600090899060040161ad25565b606060188054806020026020016040519081016040528092919081815260200182805480156124f7576020028201919060005260206000209081546001600160a01b031681526001909101906020018083116124d9575050505050905090565b606060178054806020026020016040519081016040528092919081815260200182805480156124f7576020028201919060005260206000209081546001600160a01b031681526001909101906020018083116124d9575050505050905090565b60275460405163ca669fa760e01b81526001600160a01b039091166004820152600190737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561352357600080fd5b505af1158015613537573d6000803e3d6000fd5b5050604051630618f58760e51b81527f82d5d76a000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b1580156135a757600080fd5b505af11580156135bb573d6000803e3d6000fd5b50506020546021546027546040517ff45346dc0000000000000000000000000000000000000000000000000000000081526001600160a01b0392831660048201526024810187905290821660448201529116925063f45346dc91506064015b600060405180830381600087803b15801561363457600080fd5b505af1158015613648573d6000803e3d6000fd5b5050505050565b60006040516020016136609061acaa565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401526001838301528151630618f58760e51b81527f2b2add3d0000000000000000000000000000000000000000000000000000000060048201529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163c31eb0e091602480830192600092919082900301818387803b15801561372a57600080fd5b505af115801561373e573d6000803e3d6000fd5b505060255460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b15801561379b57600080fd5b505af11580156137af573d6000803e3d6000fd5b50506020546021546024546040517fc39aca370000000000000000000000000000000000000000000000000000000081526001600160a01b03938416955063c39aca37945061073d938793811692600192911690899060040161ad25565b600060405160200161381e9061acaa565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401819052600184840152825163ca669fa760e01b815260048101919091529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163ca669fa791602480830192600092919082900301818387803b1580156138cc57600080fd5b505af11580156138e0573d6000803e3d6000fd5b5050604051630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b15801561395057600080fd5b505af1158015613964573d6000803e3d6000fd5b50506020546024546040517f5af659670000000000000000000000000000000000000000000000000000000081526001600160a01b039283169450635af65967935061073d92869260009260019290911690899060040161ad25565b602154602480546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260009391909116916370a082319101602060405180830381865afa158015613a29573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a4d919061aef4565b9050613a5a60008261671d565b6000604051602001613a6b9061acaa565b60408051601f19818403018152606080840190925260205490911b6bffffffffffffffffffffffff191660808301529150600090806094810160408051808303601f190181529181529082526027546001600160a01b03908116602084015260019282018390526024805492517f81bad6f300000000000000000000000000000000000000000000000000000000815260048101859052908101849052604481018490526064810193909352166084820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b158015613b5957600080fd5b505af1158015613b6d573d6000803e3d6000fd5b5050602080546040517fcdc8ee677dc5ebe680fb18cebda5e26ba5ea1f0ba504a47e2a9a2ecb476dc98e9450613bc893506001600160a01b03909116910160609190911b6bffffffffffffffffffffffff1916815260140190565b60408051601f1981840301815290829052602754602054613bf9936001600160a01b0392831692600192169061af20565b60405180910390a160275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015613c5a57600080fd5b505af1158015613c6e573d6000803e3d6000fd5b50506020546021546024546040517fc39aca370000000000000000000000000000000000000000000000000000000081526001600160a01b03938416955063c39aca379450613ccc938793811692600192911690899060040161ad25565b600060405180830381600087803b158015613ce657600080fd5b505af1158015613cfa573d6000803e3d6000fd5b5050602154602480546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260009550921692506370a082319101602060405180830381865afa158015613d65573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613d89919061aef4565b905061138d60018261671d565b6000604051602001613da79061acaa565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401819052600184840152825163ca669fa760e01b815260048101919091529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163ca669fa791602480830192600092919082900301818387803b158015613e5557600080fd5b505af1158015613e69573d6000803e3d6000fd5b5050604051630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b158015613ed957600080fd5b505af1158015613eed573d6000803e3d6000fd5b50506020546024546040517fc39aca370000000000000000000000000000000000000000000000000000000081526001600160a01b03928316945063c39aca37935061073d92869260009260019290911690899060040161ad25565b6060601b805480602002602001604051908101604052809291908181526020016000905b82821015612d1e5783829060005260206000209060020201604051806040016040529081600082018054613fa09061afe8565b80601f0160208091040260200160405190810160405280929190818152602001828054613fcc9061afe8565b80156140195780601f10613fee57610100808354040283529160200191614019565b820191906000526020600020905b815481529060010190602001808311613ffc57829003601f168201915b50505050508152602001600182018054806020026020016040519081016040528092919081815260200182805480156140b357602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190600401906020826003010492830192600103820291508084116140605790505b50505050508152505081526020019060010190613f6d565b60006040516020016140dc9061acaa565b60408051601f19818403018152606080840190925260205490911b6bffffffffffffffffffffffff191660808301529150600090806094810160408051808303601f190181529181529082526027546001600160a01b03908116602084015260019282018390526024805492517f81bad6f300000000000000000000000000000000000000000000000000000000815260048101859052908101849052604481018490526064810193909352166084820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b1580156141ca57600080fd5b505af11580156141de573d6000803e3d6000fd5b5050602080546040517fcdc8ee677dc5ebe680fb18cebda5e26ba5ea1f0ba504a47e2a9a2ecb476dc98e945061423993506001600160a01b03909116910160609190911b6bffffffffffffffffffffffff1916815260140190565b60408051601f198184030181529082905260275460205461426a936001600160a01b0392831692600192169061af20565b60405180910390a160275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa7906024015b600060405180830381600087803b1580156142cc57600080fd5b505af11580156142e0573d6000803e3d6000fd5b50506020546021546024546040517fbcf7f32b0000000000000000000000000000000000000000000000000000000081526001600160a01b03938416955063bcf7f32b945061073d938793811692600192911690899060040161ad25565b600060405160200161434f9061acaa565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401819052600184840152825163ca669fa760e01b815260048101919091529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163ca669fa791602480830192600092919082900301818387803b1580156143fd57600080fd5b505af1158015614411573d6000803e3d6000fd5b5050604051630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b15801561448157600080fd5b505af1158015614495573d6000803e3d6000fd5b50506020546024546040517f309f50040000000000000000000000000000000000000000000000000000000081526001600160a01b03928316945063309f5004935061073d92869260009260019290911690899060040161ad25565b6021546026546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260019260009216906370a08231906024016122bc565b60275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561459c57600080fd5b505af11580156145b0573d6000803e3d6000fd5b5050604051630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b15801561462057600080fd5b505af1158015614634573d6000803e3d6000fd5b50506020546026546040517ff45346dc00000000000000000000000000000000000000000000000000000000815260006004820152600160248201526001600160a01b0391821660448201529116925063f45346dc91506064016116d1565b6060601a805480602002602001604051908101604052809291908181526020016000905b82821015612d1e5783829060005260206000200180546146d69061afe8565b80601f01602080910402602001604051908101604052809291908181526020018280546147029061afe8565b801561474f5780601f106147245761010080835404028352916020019161474f565b820191906000526020600020905b81548152906001019060200180831161473257829003601f168201915b5050505050815260200190600101906146b7565b6060601d805480602002602001604051908101604052809291908181526020016000905b82821015612d1e5760008481526020908190206040805180820182526002860290920180546001600160a01b0316835260018101805483518187028101870190945280845293949193858301939283018282801561484657602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190600401906020826003010492830192600103820291508084116147f35790505b50505050508152505081526020019060010190614787565b600060405160200161486f9061acaa565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401819052600184840152825163ca669fa760e01b815260048101919091529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163ca669fa791602480830192600092919082900301818387803b15801561491d57600080fd5b505af1158015614931573d6000803e3d6000fd5b5050604051630618f58760e51b81527f19c08f49000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b1580156149a157600080fd5b505af11580156149b5573d6000803e3d6000fd5b50506020546021546040517f21501a950000000000000000000000000000000000000000000000000000000081526001600160a01b0392831694506321501a95935061073d928692600092911690889060040161aeba565b60275460405163ca669fa760e01b81526001600160a01b039091166004820152600190737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015614a6957600080fd5b505af1158015614a7d573d6000803e3d6000fd5b5050604051630618f58760e51b81527f82d5d76a000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b158015614aed57600080fd5b505af1158015614b01573d6000803e3d6000fd5b50506020546021546040517ff45346dc0000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260248101869052911660448201819052925063f45346dc915060640161361a565b60275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015614bb957600080fd5b505af1158015614bcd573d6000803e3d6000fd5b5050604051630618f58760e51b81527f5d67094f000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b158015614c3d57600080fd5b505af1158015614c51573d6000803e3d6000fd5b50506020546021546026546040517ff45346dc0000000000000000000000000000000000000000000000000000000081526001600160a01b0392831660048201526000602482015290821660448201529116925063f45346dc91506064016116d1565b6000604051602001614cc59061acaa565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401819052600184840152825163ca669fa760e01b815260048101919091529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163ca669fa791602480830192600092919082900301818387803b158015614d7357600080fd5b505af1158015614d87573d6000803e3d6000fd5b5050604051630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b158015614df757600080fd5b505af1158015614e0b573d6000803e3d6000fd5b50506020546021546040517fc39aca370000000000000000000000000000000000000000000000000000000081526001600160a01b03928316945063c39aca37935061073d9286921690600190600090899060040161ad25565b6000604051602001614e769061acaa565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401819052600184840152825163ca669fa760e01b815260048101919091529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163ca669fa791602480830192600092919082900301818387803b158015614f2457600080fd5b505af1158015614f38573d6000803e3d6000fd5b5050604051630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b158015614fa857600080fd5b505af1158015614fbc573d6000803e3d6000fd5b50506020546040517f21501a950000000000000000000000000000000000000000000000000000000081526001600160a01b0390911692506321501a95915061073d908490600190600090889060040161aeba565b602154602480546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260009391909116916370a082319101602060405180830381865afa15801561507a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061509e919061aef4565b90506150ab60008261671d565b60006040516020016150bc9061acaa565b60408051601f19818403018152606080840190925260205490911b6bffffffffffffffffffffffff191660808301529150600090806094810160408051808303601f190181529181529082526027546001600160a01b03908116602084015260019282018390526024805492517f81bad6f300000000000000000000000000000000000000000000000000000000815260048101859052908101849052604481018490526064810193909352166084820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b1580156151aa57600080fd5b505af11580156151be573d6000803e3d6000fd5b5050602080546040517ffdc887992b033668833927e252058e468fac0b6bd196d520f09c61b740e99948945061521993506001600160a01b03909116910160609190911b6bffffffffffffffffffffffff1916815260140190565b60408051601f198184030181529082905260275460205461524a936001600160a01b0392831692600192169061af20565b60405180910390a160275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156152ab57600080fd5b505af11580156152bf573d6000803e3d6000fd5b50506020546021546024546040517f5af659670000000000000000000000000000000000000000000000000000000081526001600160a01b039384169550635af659679450613ccc938793811692600192911690899060040161ad25565b6060601c805480602002602001604051908101604052809291908181526020016000905b82821015612d1e5760008481526020908190206040805180820182526002860290920180546001600160a01b0316835260018101805483518187028101870190945280845293949193858301939283018282801561540057602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190600401906020826003010492830192600103820291508084116153ad5790505b50505050508152505081526020019060010190615341565b60606019805480602002602001604051908101604052809291908181526020016000905b82821015612d1e57838290600052602060002001805461545b9061afe8565b80601f01602080910402602001604051908101604052809291908181526020018280546154879061afe8565b80156154d45780601f106154a9576101008083540402835291602001916154d4565b820191906000526020600020905b8154815290600101906020018083116154b757829003601f168201915b50505050508152602001906001019061543c565b60085460009060ff1615615500575060085460ff1690565b6040517f667f9d70000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d600482018190527f6661696c65640000000000000000000000000000000000000000000000000000602483015260009163667f9d7090604401602060405180830381865afa158015615591573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906155b5919061aef4565b1415905090565b60006040516020016155cd9061acaa565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401526001838301528151630618f58760e51b81527f82d5d76a0000000000000000000000000000000000000000000000000000000060048201529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163c31eb0e091602480830192600092919082900301818387803b15801561569757600080fd5b505af11580156156ab573d6000803e3d6000fd5b505060275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b15801561570857600080fd5b505af115801561571c573d6000803e3d6000fd5b50506020546021546040517fc39aca370000000000000000000000000000000000000000000000000000000081526001600160a01b03928316945063c39aca37935061073d92869216906001908690899060040161ad25565b60006040516020016157869061acaa565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401526001838301528151630618f58760e51b81527f82d5d76a0000000000000000000000000000000000000000000000000000000060048201529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163c31eb0e091602480830192600092919082900301818387803b15801561585057600080fd5b505af1158015615864573d6000803e3d6000fd5b505060275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b1580156158c157600080fd5b505af11580156158d5573d6000803e3d6000fd5b50506020546021546040517f5af659670000000000000000000000000000000000000000000000000000000081526001600160a01b039283169450635af65967935061073d92869216906001908690899060040161ad25565b600060405160200161593f9061acaa565b60408051601f19818403018152606080840190925260205490911b6bffffffffffffffffffffffff191660808301529150600090806094810160408051808303601f190181529181529082526027546001600160a01b03908116602084015260019282018390526024805492517f81bad6f300000000000000000000000000000000000000000000000000000000815260048101859052908101849052604481018490526064810193909352166084820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b158015615a2d57600080fd5b505af1158015615a41573d6000803e3d6000fd5b5050602080546040517ffdc887992b033668833927e252058e468fac0b6bd196d520f09c61b740e999489450615a9c93506001600160a01b03909116910160609190911b6bffffffffffffffffffffffff1916815260140190565b60408051601f1981840301815290829052602754602054615acd936001600160a01b0392831692600192169061af20565b60405180910390a160275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa79060240161300f565b6000604051602001615b2a9061acaa565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401526001838301528151630618f58760e51b81527f82d5d76a0000000000000000000000000000000000000000000000000000000060048201529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163c31eb0e091602480830192600092919082900301818387803b158015615bf457600080fd5b505af1158015615c08573d6000803e3d6000fd5b505060275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b158015615c6557600080fd5b505af1158015615c79573d6000803e3d6000fd5b50506020546021546027546040517fc39aca370000000000000000000000000000000000000000000000000000000081526001600160a01b03938416955063c39aca37945061073d938793811692600192911690899060040161ad25565b6000604051602001615ce89061acaa565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401819052600184840152825163ca669fa760e01b815260048101919091529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163ca669fa791602480830192600092919082900301818387803b158015615d9657600080fd5b505af1158015615daa573d6000803e3d6000fd5b5050604051630618f58760e51b81527f5d67094f000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b158015615e1a57600080fd5b505af1158015615e2e573d6000803e3d6000fd5b50506020546021546024546040517fbcf7f32b0000000000000000000000000000000000000000000000000000000081526001600160a01b03938416955063bcf7f32b945061073d938793811692600092911690899060040161ad25565b606060158054806020026020016040519081016040528092919081815260200182805480156124f7576020028201919060005260206000209081546001600160a01b031681526001909101906020018083116124d9575050505050905090565b6000604051602001615efd9061acaa565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401526001838301528151630618f58760e51b81527f82d5d76a0000000000000000000000000000000000000000000000000000000060048201529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163c31eb0e091602480830192600092919082900301818387803b158015615fc757600080fd5b505af1158015615fdb573d6000803e3d6000fd5b505060275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b15801561603857600080fd5b505af115801561604c573d6000803e3d6000fd5b50506020546021546027546040517f5af659670000000000000000000000000000000000000000000000000000000081526001600160a01b039384169550635af65967945061073d938793811692600192911690899060040161ad25565b60006040516020016160bb9061acaa565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401819052600184840152825163ca669fa760e01b815260048101919091529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163ca669fa791602480830192600092919082900301818387803b15801561616957600080fd5b505af115801561617d573d6000803e3d6000fd5b5050604051630618f58760e51b81527f5d67094f000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b1580156161ed57600080fd5b505af1158015616201573d6000803e3d6000fd5b50506020546021546024546040517f5af659670000000000000000000000000000000000000000000000000000000081526001600160a01b039384169550635af65967945061073d938793811692600092911690899060040161ad25565b6040516001906000906162749060200161acaa565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401526001838301528151630618f58760e51b81527f82d5d76a0000000000000000000000000000000000000000000000000000000060048201529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163c31eb0e091602480830192600092919082900301818387803b15801561633e57600080fd5b505af1158015616352573d6000803e3d6000fd5b505060275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b1580156163af57600080fd5b505af11580156163c3573d6000803e3d6000fd5b50506020546040517f21501a950000000000000000000000000000000000000000000000000000000081526001600160a01b0390911692506321501a95915061154e90849087908590889060040161aeba565b60006040516020016164279061acaa565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401819052600184840152825163ca669fa760e01b815260048101919091529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163ca669fa791602480830192600092919082900301818387803b1580156164d557600080fd5b505af11580156164e9573d6000803e3d6000fd5b5050604051630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b15801561655957600080fd5b505af115801561656d573d6000803e3d6000fd5b50506020546021546040517f5af659670000000000000000000000000000000000000000000000000000000081526001600160a01b039283169450635af65967935061073d9286921690600190600090899060040161ad25565b60006040516020016165d89061acaa565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401526001838301528151630618f58760e51b81527f2b2add3d0000000000000000000000000000000000000000000000000000000060048201529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163c31eb0e091602480830192600092919082900301818387803b1580156166a257600080fd5b505af11580156166b6573d6000803e3d6000fd5b505060255460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa791506024016142b2565b600061670861a843565b61671384848361679c565b9150505b92915050565b6040517f98296c540000000000000000000000000000000000000000000000000000000081526004810183905260248101829052737109709ecfa91a80626ff3989d68f67f5b1dd12d906398296c549060440160006040518083038186803b15801561678857600080fd5b505afa15801561076b573d6000803e3d6000fd5b6000806167a98584616817565b905061680c6040518060400160405280601d81526020017f4552433139363750726f78792e736f6c3a4552433139363750726f787900000081525082866040516020016167f792919061b035565b60405160208183030381529060405285616823565b9150505b9392505050565b60006168108383616851565b60c081015151600090156168475761684084848460c0015161686c565b9050616810565b6168408484616a12565b600061685d8383616afd565b61681083836020015184616823565b600080616877616b0d565b905060006168858683616be0565b9050600061689c8260600151836020015185617086565b905060006168ac83838989617298565b905060006168b982618115565b602081015181519192509060030b1561692c578982604001516040516020016168e392919061b057565b60408051601f19818403018152908290527f08c379a00000000000000000000000000000000000000000000000000000000082526169239160040161af0d565b60405180910390fd5b600061696f6040518060400160405280601581526020017f4465706c6f79656420746f20616464726573733a2000000000000000000000008152508360016182e4565b6040517fc6ce059d000000000000000000000000000000000000000000000000000000008152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c6ce059d906169c290849060040161af0d565b602060405180830381865afa1580156169df573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190616a03919061ad7a565b9b9a5050505050505050505050565b6040517f8d1cc9250000000000000000000000000000000000000000000000000000000081526000908190737109709ecfa91a80626ff3989d68f67f5b1dd12d90638d1cc92590616a6790879060040161af0d565b600060405180830381865afa158015616a84573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052616aac919081019061b1c0565b90506000616ada8285604051602001616ac692919061b1f5565b6040516020818303038152906040526184e4565b90506001600160a01b0381166167135784846040516020016168e392919061b224565b616b09828260006184f7565b5050565b604080518082018252600381527f6f75740000000000000000000000000000000000000000000000000000000000602082015290517fd145736c000000000000000000000000000000000000000000000000000000008152606091737109709ecfa91a80626ff3989d68f67f5b1dd12d91829063d145736c90616b9490849060040161b2cf565b600060405180830381865afa158015616bb1573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052616bd9919081019061b316565b9250505090565b616c126040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b6000737109709ecfa91a80626ff3989d68f67f5b1dd12d9050616c5d6040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b616c66856185fa565b60208201526000616c76866189df565b90506000836001600160a01b031663d930a0e66040518163ffffffff1660e01b8152600401600060405180830381865afa158015616cb8573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052616ce0919081019061b316565b86838560200151604051602001616cfa949392919061b35f565b60408051601f19818403018152908290527f60f9bb1100000000000000000000000000000000000000000000000000000000825291506000906001600160a01b038616906360f9bb1190616d5290859060040161af0d565b600060405180830381865afa158015616d6f573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052616d97919081019061b316565b6040517fdb4235f60000000000000000000000000000000000000000000000000000000081529091506001600160a01b0386169063db4235f690616ddf90849060040161b463565b602060405180830381865afa158015616dfc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190616e20919061ae98565b616e3557816040516020016168e3919061b4b5565b6040517f49c4fac80000000000000000000000000000000000000000000000000000000081526001600160a01b038616906349c4fac890616e7a90849060040161b547565b600060405180830381865afa158015616e97573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052616ebf919081019061b316565b84526040517fdb4235f60000000000000000000000000000000000000000000000000000000081526001600160a01b0386169063db4235f690616f0690849060040161b599565b602060405180830381865afa158015616f23573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190616f47919061ae98565b15616fdc576040517f49c4fac80000000000000000000000000000000000000000000000000000000081526001600160a01b038616906349c4fac890616f9190849060040161b599565b600060405180830381865afa158015616fae573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052616fd6919081019061b316565b60408501525b846001600160a01b03166349c4fac8828660000151604051602001617001919061b5eb565b6040516020818303038152906040526040518363ffffffff1660e01b815260040161702d92919061b657565b600060405180830381865afa15801561704a573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052617072919081019061b316565b606085015250608083015250949350505050565b60408051600480825260a0820190925260609160009190816020015b60608152602001906001900390816170a25790505090506040518060400160405280600481526020017f6772657000000000000000000000000000000000000000000000000000000000815250816000815181106171025761710261b67c565b60200260200101819052506040518060400160405280600381526020017f2d726c0000000000000000000000000000000000000000000000000000000000815250816001815181106171565761715661b67c565b602002602001018190525084604051602001617172919061b6ab565b604051602081830303815290604052816002815181106171945761719461b67c565b6020026020010181905250826040516020016171b0919061b717565b604051602081830303815290604052816003815181106171d2576171d261b67c565b602002602001018190525060006171e882618115565b602080820151604080518082018252600581527f2e6a736f6e00000000000000000000000000000000000000000000000000000081850190815282518084018452600080825290860152825180840190935290518252928101929092529192506172799060408051808201825260008082526020918201528151808301909252845182528085019082015290618c62565b61728e57856040516020016168e3919061b758565b9695505050505050565b60a0810151604080518082018252600080825260209182015281518083019092528251808352928101910152606090737109709ecfa91a80626ff3989d68f67f5b1dd12d90156172e8565b511590565b61745c578260200151156173a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605860248201527f54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f742060448201527f62652075736564207768656e207468652060736b6970566572696679536f757260648201527f6365436f646560206f7074696f6e206973206074727565600000000000000000608482015260a401616923565b8260c001511561745c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605360248201527f54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f742060448201527f62652075736564207768656e207468652060736b69704c6963656e736554797060648201527f6560206f7074696f6e2069732060747275656000000000000000000000000000608482015260a401616923565b6040805160ff8082526120008201909252600091816020015b606081526020019060019003908161747557905050905060006040518060400160405280600381526020017f6e707800000000000000000000000000000000000000000000000000000000008152508282806174d09061b7e9565b935060ff16815181106174e5576174e561b67c565b60200260200101819052506040518060400160405280600d81526020017f302e302e312d616c7068612e3700000000000000000000000000000000000000815250604051602001617536919061b808565b6040516020818303038152906040528282806175519061b7e9565b935060ff16815181106175665761756661b67c565b60200260200101819052506040518060400160405280600681526020017f6465706c6f7900000000000000000000000000000000000000000000000000008152508282806175b39061b7e9565b935060ff16815181106175c8576175c861b67c565b60200260200101819052506040518060400160405280600e81526020017f2d2d636f6e74726163744e616d650000000000000000000000000000000000008152508282806176159061b7e9565b935060ff168151811061762a5761762a61b67c565b602002602001018190525087602001518282806176469061b7e9565b935060ff168151811061765b5761765b61b67c565b60200260200101819052506040518060400160405280600e81526020017f2d2d636f6e7472616374506174680000000000000000000000000000000000008152508282806176a89061b7e9565b935060ff16815181106176bd576176bd61b67c565b6020908102919091010152875182826176d58161b7e9565b935060ff16815181106176ea576176ea61b67c565b60200260200101819052506040518060400160405280600981526020017f2d2d636861696e496400000000000000000000000000000000000000000000008152508282806177379061b7e9565b935060ff168151811061774c5761774c61b67c565b602002602001018190525061776046618cc3565b828261776b8161b7e9565b935060ff16815181106177805761778061b67c565b60200260200101819052506040518060400160405280600f81526020017f2d2d6275696c64496e666f46696c6500000000000000000000000000000000008152508282806177cd9061b7e9565b935060ff16815181106177e2576177e261b67c565b6020026020010181905250868282806177fa9061b7e9565b935060ff168151811061780f5761780f61b67c565b60209081029190910101528551156179365760408051808201909152601581527f2d2d636f6e7374727563746f7242797465636f64650000000000000000000000602082015282826178608161b7e9565b935060ff16815181106178755761787561b67c565b60209081029190910101526040517f71aad10d0000000000000000000000000000000000000000000000000000000081526001600160a01b038416906371aad10d906178c590899060040161af0d565b600060405180830381865afa1580156178e2573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261790a919081019061b316565b82826179158161b7e9565b935060ff168151811061792a5761792a61b67c565b60200260200101819052505b846020015115617a065760408051808201909152601281527f2d2d766572696679536f75726365436f646500000000000000000000000000006020820152828261797f8161b7e9565b935060ff16815181106179945761799461b67c565b60200260200101819052506040518060400160405280600581526020017f66616c73650000000000000000000000000000000000000000000000000000008152508282806179e19061b7e9565b935060ff16815181106179f6576179f661b67c565b6020026020010181905250617bcd565b617a3e6172e38660a0015160408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b617ad15760408051808201909152600d81527f2d2d6c6963656e7365547970650000000000000000000000000000000000000060208201528282617a818161b7e9565b935060ff1681518110617a9657617a9661b67c565b60200260200101819052508460a00151604051602001617ab6919061b6ab565b6040516020818303038152906040528282806179e19061b7e9565b8460c00151158015617b14575060408089015181518083018352600080825260209182015282518084019093528151835290810190820152617b1290511590565b155b15617bcd5760408051808201909152600d81527f2d2d6c6963656e7365547970650000000000000000000000000000000000000060208201528282617b588161b7e9565b935060ff1681518110617b6d57617b6d61b67c565b6020026020010181905250617b8188618d63565b604051602001617b91919061b6ab565b604051602081830303815290604052828280617bac9061b7e9565b935060ff1681518110617bc157617bc161b67c565b60200260200101819052505b60408086015181518083018352600080825260209182015282518084019093528151835290810190820152617c0190511590565b617c965760408051808201909152600b81527f2d2d72656c61796572496400000000000000000000000000000000000000000060208201528282617c448161b7e9565b935060ff1681518110617c5957617c5961b67c565b60200260200101819052508460400151828280617c759061b7e9565b935060ff1681518110617c8a57617c8a61b67c565b60200260200101819052505b606085015115617db75760408051808201909152600681527f2d2d73616c74000000000000000000000000000000000000000000000000000060208201528282617cdf8161b7e9565b935060ff1681518110617cf457617cf461b67c565b602090810291909101015260608501516040517fb11a19e800000000000000000000000000000000000000000000000000000000815260048101919091526001600160a01b0384169063b11a19e890602401600060405180830381865afa158015617d63573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052617d8b919081019061b316565b8282617d968161b7e9565b935060ff1681518110617dab57617dab61b67c565b60200260200101819052505b60e08501515115617e5e5760408051808201909152600a81527f2d2d6761734c696d69740000000000000000000000000000000000000000000060208201528282617e018161b7e9565b935060ff1681518110617e1657617e1661b67c565b6020026020010181905250617e328560e0015160000151618cc3565b8282617e3d8161b7e9565b935060ff1681518110617e5257617e5261b67c565b60200260200101819052505b60e08501516020015115617f085760408051808201909152600a81527f2d2d67617350726963650000000000000000000000000000000000000000000060208201528282617eab8161b7e9565b935060ff1681518110617ec057617ec061b67c565b6020026020010181905250617edc8560e0015160200151618cc3565b8282617ee78161b7e9565b935060ff1681518110617efc57617efc61b67c565b60200260200101819052505b60e08501516040015115617fb25760408051808201909152600e81527f2d2d6d617846656550657247617300000000000000000000000000000000000060208201528282617f558161b7e9565b935060ff1681518110617f6a57617f6a61b67c565b6020026020010181905250617f868560e0015160400151618cc3565b8282617f918161b7e9565b935060ff1681518110617fa657617fa661b67c565b60200260200101819052505b60e0850151606001511561805c5760408051808201909152601681527f2d2d6d61785072696f726974794665655065724761730000000000000000000060208201528282617fff8161b7e9565b935060ff16815181106180145761801461b67c565b60200260200101819052506180308560e0015160600151618cc3565b828261803b8161b7e9565b935060ff16815181106180505761805061b67c565b60200260200101819052505b60008160ff1667ffffffffffffffff81111561807a5761807a61b0d8565b6040519080825280602002602001820160405280156180ad57816020015b60608152602001906001900390816180985790505b50905060005b8260ff168160ff16101561810657838160ff16815181106180d6576180d661b67c565b6020026020010151828260ff16815181106180f3576180f361b67c565b60209081029190910101526001016180b3565b5093505050505b949350505050565b61813c6040518060600160405280600060030b815260200160608152602001606081525090565b60408051808201825260048082527f6261736800000000000000000000000000000000000000000000000000000000602083015291517fd145736c000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d92600091849163d145736c916181c29186910161b873565b600060405180830381865afa1580156181df573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052618207919081019061b316565b905060006182158683619852565b90506000846001600160a01b031663f45c1ce7836040518263ffffffff1660e01b8152600401618245919061ab9c565b6000604051808303816000875af1158015618264573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261828c919081019061b8ba565b805190915060030b158015906182a55750602081015151155b80156182b45750604081015151155b1561728e57816000815181106182cc576182cc61b67c565b60200260200101516040516020016168e3919061b970565b606060006183198560408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6040805180820182526000808252602091820152815180830190925286518252808701908201529091506183509082905b906199a7565b156184ad5760006183cd826183c7846183c16183938a60408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6040805180820182526000808252602091820152815180830190925282518252918201519181019190915290565b906199ce565b90619a30565b604080518082018252600181527f0a00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201529091506184319082906199a7565b1561849b57604080518082018252600181527f0a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152618498905b8290619ab5565b90505b6184a481619adb565b92505050616810565b82156184c65784846040516020016168e392919061bb5c565b5050604080516020810190915260008152616810565b509392505050565b6000808251602084016000f09392505050565b8160a001511561850657505050565b6000618513848484619b44565b9050600061852082618115565b602081015181519192509060030b1580156185bc5750604080518082018252600781527f5355434345535300000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526185bc9060408051808201825260008082526020918201528151808301909252845182528085019082015261834a565b156185c957505050505050565b604082015151156185e95781604001516040516020016168e3919061bc03565b806040516020016168e3919061bc61565b6060600061862f8360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600481527f2e736f6c0000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152909150618694905b8290618c62565b1561870357604080518082018252600481527f2e736f6c0000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616810906186fe90839061a0df565b619adb565b604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152618765905b829061a169565b60010361883257604080518082018252600181527f3a00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526187cb90618491565b50604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616810906186fe905b8390619ab5565b604080518082018252600581527f2e6a736f6e000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526188919061868d565b156189c857604080518082018252600181527f2f000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201819052845180860190955292518452830152906188f990839061a203565b90506000816001835161890c919061afc2565b8151811061891c5761891c61b67c565b602002602001015190506189bf6186fe6189926040518060400160405280600581526020017f2e6a736f6e00000000000000000000000000000000000000000000000000000081525060408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6040805180820182526000808252602091820152815180830190925285518252808601908201529061a0df565b95945050505050565b826040516020016168e3919061bccc565b50919050565b60606000618a148360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600481527f2e736f6c0000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152909150618a769061868d565b15618a845761681081619adb565b604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152618ae39061875e565b600103618b4d57604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616810906186fe9061882b565b604080518082018252600581527f2e6a736f6e00000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152618bac9061868d565b156189c857604080518082018252600181527f2f00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820181905284518086019095529251845283015290618c1490839061a203565b9050600181511115618c50578060028251618c2f919061afc2565b81518110618c3f57618c3f61b67c565b602002602001015192505050919050565b50826040516020016168e3919061bccc565b805182516000911115618c7757506000616717565b81518351602085015160009291618c8d9161afd5565b618c97919061afc2565b905082602001518103618cae576001915050616717565b82516020840151819020912014905092915050565b60606000618cd08361a2a8565b600101905060008167ffffffffffffffff811115618cf057618cf061b0d8565b6040519080825280601f01601f191660200182016040528015618d1a576020820181803683370190505b5090508181016020015b600019017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a8504945084618d2457509392505050565b604081810151815180830183526000808252602091820181905283518085018552835181529282018383015283518085018552600a81527f554e4c4943454e5345440000000000000000000000000000000000000000000081840190815285518087018752838152840192909252845180860190955251845290830152606091618def905b829061a38a565b15618e2f57505060408051808201909152600481527f4e6f6e65000000000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600981527f556e6c6963656e7365000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152618e8e90618de8565b15618ece57505060408051808201909152600981527f556e6c6963656e736500000000000000000000000000000000000000000000006020820152919050565b604080518082018252600381527f4d4954000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152618f2d90618de8565b15618f6d57505060408051808201909152600381527f4d495400000000000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f47504c2d322e302d6f6e6c79000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152618fcc90618de8565b806190315750604080518082018252601081527f47504c2d322e302d6f722d6c61746572000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261903190618de8565b1561907157505060408051808201909152600981527f474e552047504c763200000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f47504c2d332e302d6f6e6c790000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526190d090618de8565b806191355750604080518082018252601081527f47504c2d332e302d6f722d6c61746572000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261913590618de8565b1561917557505060408051808201909152600981527f474e552047504c763300000000000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4c47504c2d322e312d6f6e6c7900000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526191d490618de8565b806192395750604080518082018252601181527f4c47504c2d322e312d6f722d6c617465720000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261923990618de8565b1561927957505060408051808201909152600c81527f474e55204c47504c76322e3100000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4c47504c2d332e302d6f6e6c7900000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526192d890618de8565b8061933d5750604080518082018252601181527f4c47504c2d332e302d6f722d6c617465720000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261933d90618de8565b1561937d57505060408051808201909152600a81527f474e55204c47504c7633000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f4253442d322d436c617573650000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526193dc90618de8565b1561941c57505060408051808201909152600c81527f4253442d322d436c6175736500000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f4253442d332d436c6175736500000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261947b90618de8565b156194bb57505060408051808201909152600c81527f4253442d332d436c6175736500000000000000000000000000000000000000006020820152919050565b604080518082018252600781527f4d504c2d322e30000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261951a90618de8565b1561955a57505060408051808201909152600781527f4d504c2d322e30000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600781527f4f534c2d332e3000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526195b990618de8565b156195f957505060408051808201909152600781527f4f534c2d332e30000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600a81527f4170616368652d322e30000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261965890618de8565b1561969857505060408051808201909152600a81527f4170616368652d322e30000000000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4147504c2d332e302d6f6e6c7900000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526196f790618de8565b8061975c5750604080518082018252601181527f4147504c2d332e302d6f722d6c617465720000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261975c90618de8565b1561979c57505060408051808201909152600a81527f474e55204147504c7633000000000000000000000000000000000000000000006020820152919050565b604080518082018252600881527f4255534c2d312e31000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526197fb90618de8565b1561983b57505060408051808201909152600781527f42534c20312e31000000000000000000000000000000000000000000000000006020820152919050565b604080840151845191516168e3929060200161bdaa565b60608060005b84518110156198dd57818582815181106198745761987461b67c565b602002602001015160405160200161988d92919061b1f5565b6040516020818303038152906040529150600185516198ac919061afc2565b81146198d557816040516020016198c3919061bf13565b60405160208183030381529060405291505b600101619858565b5060408051600380825260808201909252600091816020015b60608152602001906001900390816198f657905050905083816000815181106199215761992161b67c565b60200260200101819052506040518060400160405280600281526020017f2d63000000000000000000000000000000000000000000000000000000000000815250816001815181106199755761997561b67c565b602002602001018190525081816002815181106199945761999461b67c565b6020908102919091010152949350505050565b60208083015183518351928401516000936199c5929184919061a39e565b14159392505050565b60408051808201909152600080825260208201526000619a00846000015185602001518560000151866020015161a4af565b9050836020015181619a12919061afc2565b84518590619a2190839061afc2565b90525060208401525090919050565b6040805180820190915260008082526020820152815183511015619a55575081616717565b6020808301519084015160019114619a7c5750815160208481015190840151829020919020145b8015619aad57825184518590619a9390839061afc2565b9052508251602085018051619aa990839061afd5565b9052505b509192915050565b6040805180820190915260008082526020820152619ad483838361a5cf565b5092915050565b60606000826000015167ffffffffffffffff811115619afc57619afc61b0d8565b6040519080825280601f01601f191660200182016040528015619b26576020820181803683370190505b5090506000602082019050619ad4818560200151866000015161a67a565b60606000619b50616b0d565b6040805160ff808252612000820190925291925060009190816020015b6060815260200190600190039081619b6d57905050905060006040518060400160405280600381526020017f6e70780000000000000000000000000000000000000000000000000000000000815250828280619bc89061b7e9565b935060ff1681518110619bdd57619bdd61b67c565b60200260200101819052506040518060400160405280600781526020017f5e312e33322e3300000000000000000000000000000000000000000000000000815250604051602001619c2e919061bf54565b604051602081830303815290604052828280619c499061b7e9565b935060ff1681518110619c5e57619c5e61b67c565b60200260200101819052506040518060400160405280600881526020017f76616c6964617465000000000000000000000000000000000000000000000000815250828280619cab9061b7e9565b935060ff1681518110619cc057619cc061b67c565b602002602001018190525082604051602001619cdc919061b717565b604051602081830303815290604052828280619cf79061b7e9565b935060ff1681518110619d0c57619d0c61b67c565b60200260200101819052506040518060400160405280600a81526020017f2d2d636f6e747261637400000000000000000000000000000000000000000000815250828280619d599061b7e9565b935060ff1681518110619d6e57619d6e61b67c565b6020026020010181905250619d83878461a6f4565b8282619d8e8161b7e9565b935060ff1681518110619da357619da361b67c565b602090810291909101015285515115619e4f5760408051808201909152600b81527f2d2d7265666572656e636500000000000000000000000000000000000000000060208201528282619df58161b7e9565b935060ff1681518110619e0a57619e0a61b67c565b6020026020010181905250619e2386600001518461a6f4565b8282619e2e8161b7e9565b935060ff1681518110619e4357619e4361b67c565b60200260200101819052505b856080015115619ebd5760408051808201909152601881527f2d2d756e73616665536b697053746f72616765436865636b000000000000000060208201528282619e988161b7e9565b935060ff1681518110619ead57619ead61b67c565b6020026020010181905250619f23565b8415619f235760408051808201909152601281527f2d2d726571756972655265666572656e6365000000000000000000000000000060208201528282619f028161b7e9565b935060ff1681518110619f1757619f1761b67c565b60200260200101819052505b60408601515115619fbf5760408051808201909152600d81527f2d2d756e73616665416c6c6f770000000000000000000000000000000000000060208201528282619f6d8161b7e9565b935060ff1681518110619f8257619f8261b67c565b60200260200101819052508560400151828280619f9e9061b7e9565b935060ff1681518110619fb357619fb361b67c565b60200260200101819052505b85606001511561a0295760408051808201909152601481527f2d2d756e73616665416c6c6f7752656e616d65730000000000000000000000006020820152828261a0088161b7e9565b935060ff168151811061a01d5761a01d61b67c565b60200260200101819052505b60008160ff1667ffffffffffffffff81111561a0475761a04761b0d8565b60405190808252806020026020018201604052801561a07a57816020015b606081526020019060019003908161a0655790505b50905060005b8260ff168160ff16101561a0d357838160ff168151811061a0a35761a0a361b67c565b6020026020010151828260ff168151811061a0c05761a0c061b67c565b602090810291909101015260010161a080565b50979650505050505050565b604080518082019091526000808252602082015281518351101561a104575081616717565b8151835160208501516000929161a11a9161afd5565b61a124919061afc2565b6020840151909150600190821461a145575082516020840151819020908220145b801561a1605783518551869061a15c90839061afc2565b9052505b50929392505050565b600080826000015161a18d856000015186602001518660000151876020015161a4af565b61a197919061afd5565b90505b8351602085015161a1ab919061afd5565b8111619ad4578161a1bb8161bf99565b925050826000015161a1f285602001518361a1d6919061afc2565b865161a1e2919061afc2565b838660000151876020015161a4af565b61a1fc919061afd5565b905061a19a565b6060600061a211848461a169565b61a21c90600161afd5565b67ffffffffffffffff81111561a2345761a23461b0d8565b60405190808252806020026020018201604052801561a26757816020015b606081526020019060019003908161a2525790505b50905060005b81518110156184dc5761a2836186fe8686619ab5565b82828151811061a2955761a29561b67c565b602090810291909101015260010161a26d565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000831061a2f1577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef8100000000831061a31d576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc10000831061a33b57662386f26fc10000830492506010015b6305f5e100831061a353576305f5e100830492506008015b612710831061a36757612710830492506004015b6064831061a379576064830492506002015b600a83106167175760010192915050565b600061a396838361a734565b159392505050565b60008085841161a4a5576020841161a451576000841561a3e957600161a3c586602061afc2565b61a3d090600861bfb3565b61a3db90600261c0b1565b61a3e5919061afc2565b1990505b835181168561a3f8898961afd5565b61a402919061afc2565b805190935082165b81811461a43c5787841161a424578794505050505061810d565b8361a42e8161c0bd565b94505082845116905061a40a565b61a446878561afd5565b94505050505061810d565b83832061a45e858861afc2565b61a468908761afd5565b91505b85821061a4a35784822080820361a4905761a486868461afd5565b935050505061810d565b61a49b60018461afc2565b92505061a46b565b505b5092949350505050565b6000838186851161a5ba576020851161a569576000851561a4fb57600161a4d787602061afc2565b61a4e290600861bfb3565b61a4ed90600261c0b1565b61a4f7919061afc2565b1990505b8451811660008761a50c8b8b61afd5565b61a516919061afc2565b855190915083165b82811461a55b5781861061a5435761a5368b8b61afd5565b965050505050505061810d565b8561a54d8161bf99565b96505083865116905061a51e565b85965050505050505061810d565b508383206000905b61a57b868961afc2565b821161a5b85785832080820361a597578394505050505061810d565b61a5a260018561afd5565b935050818061a5b09061bf99565b92505061a571565b505b61a5c4878761afd5565b979650505050505050565b6040805180820190915260008082526020820152600061a601856000015186602001518660000151876020015161a4af565b60208087018051918601919091525190915061a61d908261afc2565b83528451602086015161a630919061afd5565b810361a63f576000855261a671565b8351835161a64d919061afd5565b8551869061a65c90839061afc2565b905250835161a66b908261afd5565b60208601525b50909392505050565b6020811061a6b2578151835261a69160208461afd5565b925061a69e60208361afd5565b915061a6ab60208261afc2565b905061a67a565b600019811561a6e157600161a6c883602061afc2565b61a6d49061010061c0b1565b61a6de919061afc2565b90505b9151835183169219169190911790915250565b6060600061a7028484616be0565b805160208083015160405193945061a71c9390910161c0d4565b60405160208183030381529060405291505092915050565b815181516000919081111561a747575081515b6020808501519084015160005b8381101561a800578251825180821461a7d057600019602087101561a7af5760018461a78189602061afc2565b61a78b919061afd5565b61a79690600861bfb3565b61a7a190600261c0b1565b61a7ab919061afc2565b1990505b818116838216818103911461a7cd5797506167179650505050505050565b50505b61a7db60208661afd5565b945061a7e860208561afd5565b9350505060208161a7f9919061afd5565b905061a754565b508451865161728e919061c12c565b610b678061c14d83390190565b61053f8061ccb483390190565b61106f8061d1f383390190565b611bb98061e26283390190565b6040518060e0016040528060608152602001606081526020016060815260200160001515815260200160001515815260200160001515815260200161a88661a88b565b905290565b6040518061010001604052806000151581526020016000151581526020016060815260200160008019168152602001606081526020016060815260200160001515815260200161a8866040518060800160405280600081526020016000815260200160008152602001600081525090565b602080825282518282018190526000918401906040840190835b8181101561a93d5783516001600160a01b031683526020938401939092019160010161a916565b509095945050505050565b60005b8381101561a96357818101518382015260200161a94b565b50506000910152565b6000815180845261a98481602086016020860161a948565b601f01601f19169290920160200192915050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b8281101561aa94577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452815180516001600160a01b03168652602090810151604082880181905281519088018190529101906060600582901b88018101919088019060005b8181101561aa7a577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa08a850301835261aa6484865161a96c565b602095860195909450929092019160010161aa2a565b50919750505060209485019492909201915060010161a9c0565b50929695505050505050565b600081518084526020840193506020830160005b8281101561aaf45781517fffffffff000000000000000000000000000000000000000000000000000000001686526020958601959091019060010161aab4565b5093949350505050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b8281101561aa94577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452815180516040875261ab6a604088018261a96c565b905060208201519150868103602088015261ab85818361aaa0565b96505050602093840193919091019060010161ab26565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b8281101561aa94577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc087860301845261abfe85835161a96c565b9450602093840193919091019060010161abc4565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b8281101561aa94577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc087860301845281516001600160a01b038151168652602081015190506040602087015261ac94604087018261aaa0565b955050602093840193919091019060010161ac3b565b60208152600061671760208301600581527f68656c6c6f000000000000000000000000000000000000000000000000000000602082015260400190565b600081516060845261acfc606085018261a96c565b90506001600160a01b036020840151166020850152604083015160408501528091505092915050565b60a08152600061ad3860a083018861ace7565b6001600160a01b03871660208401528560408401526001600160a01b0385166060840152828103608084015261ad6e818561a96c565b98975050505050505050565b60006020828403121561ad8c57600080fd5b81516001600160a01b038116811461681057600080fd5b610100815260056101008201527f544f4b454e000000000000000000000000000000000000000000000000000000610120820152610140602082015260036101408201527f544b4e000000000000000000000000000000000000000000000000000000000061016082015260006101808201905060ff881660408301528660608301526003861061ae5d577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b8560808301528460a083015261ae7e60c08301856001600160a01b03169052565b6001600160a01b03831660e0830152979650505050505050565b60006020828403121561aeaa57600080fd5b8151801515811461681057600080fd5b60808152600061aecd608083018761ace7565b8560208401526001600160a01b0385166040840152828103606084015261a5c4818561a96c565b60006020828403121561af0657600080fd5b5051919050565b602081526000616810602083018461a96c565b60a08152600061af3360a083018761a96c565b6001600160a01b03861660208401528460408401526001600160a01b0384166060840152828103608084015261a5c481600581527f68656c6c6f000000000000000000000000000000000000000000000000000000602082015260400190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b818103818111156167175761671761af93565b808201808211156167175761671761af93565b600181811c9082168061affc57607f821691505b6020821081036189d9577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6001600160a01b038316815260406020820152600061810d604083018461a96c565b7f4661696c656420746f206465706c6f7920636f6e74726163742000000000000081526000835161b08f81601a85016020880161a948565b7f3a20000000000000000000000000000000000000000000000000000000000000601a91840191820152835161b0cc81601c84016020880161a948565b01601c01949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040516060810167ffffffffffffffff8111828210171561b12a5761b12a61b0d8565b60405290565b60008067ffffffffffffffff84111561b14b5761b14b61b0d8565b50604051601f19601f85018116603f0116810181811067ffffffffffffffff8211171561b17a5761b17a61b0d8565b60405283815290508082840185101561b19257600080fd5b6184dc84602083018561a948565b600082601f83011261b1b157600080fd5b6168108383516020850161b130565b60006020828403121561b1d257600080fd5b815167ffffffffffffffff81111561b1e957600080fd5b6167138482850161b1a0565b6000835161b20781846020880161a948565b83519083019061b21b81836020880161a948565b01949350505050565b7f4661696c656420746f206465706c6f7920636f6e74726163742000000000000081526000835161b25c81601a85016020880161a948565b7f207573696e6720636f6e7374727563746f722064617461202200000000000000601a91840191820152835161b29981603384016020880161a948565b7f220000000000000000000000000000000000000000000000000000000000000060339290910191820152603401949350505050565b60408152600b60408201527f464f554e4452595f4f55540000000000000000000000000000000000000000006060820152608060208201526000616810608083018461a96c565b60006020828403121561b32857600080fd5b815167ffffffffffffffff81111561b33f57600080fd5b8201601f8101841361b35057600080fd5b6167138482516020840161b130565b6000855161b371818460208a0161a948565b7f2f00000000000000000000000000000000000000000000000000000000000000908301908152855161b3ab816001840160208a0161a948565b7f2f0000000000000000000000000000000000000000000000000000000000000060019290910191820152845161b3e981600284016020890161a948565b6001818301019150507f2f000000000000000000000000000000000000000000000000000000000000006001820152835161b42b81600284016020880161a948565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600292909101918201526007019695505050505050565b60408152600061b476604083018461a96c565b8281036020840152600481527f2e6173740000000000000000000000000000000000000000000000000000000060208201526040810191505092915050565b7f436f756c64206e6f742066696e642041535420696e206172746966616374200081526000825161b4ed81601f85016020870161a948565b7f2e205365742060617374203d20747275656020696e20666f756e6472792e746f601f9390910192830152507f6d6c000000000000000000000000000000000000000000000000000000000000603f820152604101919050565b60408152600061b55a604083018461a96c565b8281036020840152601181527f2e6173742e6162736f6c7574655061746800000000000000000000000000000060208201526040810191505092915050565b60408152600061b5ac604083018461a96c565b8281036020840152600c81527f2e6173742e6c6963656e7365000000000000000000000000000000000000000060208201526040810191505092915050565b7f2e6d657461646174612e736f75726365732e5b2700000000000000000000000081526000825161b62381601485016020870161a948565b7f275d2e6b656363616b32353600000000000000000000000000000000000000006014939091019283015250602001919050565b60408152600061b66a604083018561a96c565b828103602084015261680c818561a96c565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f220000000000000000000000000000000000000000000000000000000000000081526000825161b6e381600185016020870161a948565b7f22000000000000000000000000000000000000000000000000000000000000006001939091019283015250600201919050565b6000825161b72981846020870161a948565b7f2f6275696c642d696e666f000000000000000000000000000000000000000000920191825250600b01919050565b7f436f756c64206e6f742066696e64206275696c642d696e666f2066696c65207781527f697468206d61746368696e6720736f7572636520636f6465206861736820666f60208201527f7220636f6e74726163742000000000000000000000000000000000000000000060408201526000825161b7dc81604b85016020870161a948565b91909101604b0192915050565b600060ff821660ff810361b7ff5761b7ff61af93565b60010192915050565b7f406f70656e7a657070656c696e2f646566656e6465722d6465706c6f792d636c81527f69656e742d636c6940000000000000000000000000000000000000000000000060208201526000825161b86681602985016020870161a948565b9190910160290192915050565b60408152601660408201527f4f50454e5a455050454c494e5f424153485f50415448000000000000000000006060820152608060208201526000616810608083018461a96c565b60006020828403121561b8cc57600080fd5b815167ffffffffffffffff81111561b8e357600080fd5b82016060818503121561b8f557600080fd5b61b8fd61b107565b81518060030b811461b90e57600080fd5b8152602082015167ffffffffffffffff81111561b92a57600080fd5b61b9368682850161b1a0565b602083015250604082015167ffffffffffffffff81111561b95657600080fd5b61b9628682850161b1a0565b604083015250949350505050565b7f4661696c656420746f2072756e206261736820636f6d6d616e6420776974682081527f220000000000000000000000000000000000000000000000000000000000000060208201526000825161b9ce81602185016020870161a948565b7f222e20496620796f7520617265207573696e672057696e646f77732c2073657460219390910192830152507f20746865204f50454e5a455050454c494e5f424153485f5041544820656e766960418201527f726f6e6d656e74207661726961626c6520746f207468652066756c6c7920717560618201527f616c69666965642070617468206f66207468652062617368206578656375746160818201527f626c652e20466f72206578616d706c652c20696620796f75206172652075736960a18201527f6e672047697420666f722057696e646f77732c206164642074686520666f6c6c60c18201527f6f77696e67206c696e6520696e20746865202e656e762066696c65206f66207960e18201527f6f75722070726f6a65637420287573696e6720666f727761726420736c6173686101018201527f6573293a0a4f50454e5a455050454c494e5f424153485f504154483d22433a2f6101218201527f50726f6772616d2046696c65732f4769742f62696e2f6261736822000000000061014182015261015c01919050565b7f4661696c656420746f2066696e64206c696e652077697468207072656669782081527f270000000000000000000000000000000000000000000000000000000000000060208201526000835161bbba81602185016020880161a948565b7f2720696e206f75747075743a2000000000000000000000000000000000000000602191840191820152835161bbf781602e84016020880161a948565b01602e01949350505050565b7f4661696c656420746f2072756e2075706772616465207361666574792076616c81527f69646174696f6e3a20000000000000000000000000000000000000000000000060208201526000825161b86681602985016020870161a948565b7f55706772616465207361666574792076616c69646174696f6e206661696c656481527f3a0a00000000000000000000000000000000000000000000000000000000000060208201526000825161bcbf81602285016020870161a948565b9190910160220192915050565b7f436f6e7472616374206e616d652000000000000000000000000000000000000081526000825161bd0481600e85016020870161a948565b7f206d75737420626520696e2074686520666f726d6174204d79436f6e74726163600e9390910192830152507f742e736f6c3a4d79436f6e7472616374206f72204d79436f6e74726163742e73602e8201527f6f6c206f72206f75742f4d79436f6e74726163742e736f6c2f4d79436f6e7472604e8201527f6163742e6a736f6e000000000000000000000000000000000000000000000000606e820152607601919050565b7f53504458206c6963656e7365206964656e74696669657220000000000000000081526000835161bde281601885016020880161a948565b7f20696e2000000000000000000000000000000000000000000000000000000000601891840191820152835161be1f81601c84016020880161a948565b7f20646f6573206e6f74206c6f6f6b206c696b65206120737570706f7274656420601c92909101918201527f6c6963656e736520666f7220626c6f636b206578706c6f726572207665726966603c8201527f69636174696f6e2e205573652074686520606c6963656e73655479706560206f605c8201527f7074696f6e20746f20737065636966792061206c6963656e736520747970652c607c8201527f206f7220736574207468652060736b69704c6963656e73655479706560206f70609c8201527f74696f6e20746f2060747275656020746f20736b69702e00000000000000000060bc82015260d301949350505050565b6000825161bf2581846020870161a948565b7f2000000000000000000000000000000000000000000000000000000000000000920191825250600101919050565b7f406f70656e7a657070656c696e2f75706772616465732d636f7265400000000081526000825161bf8c81601c85016020870161a948565b91909101601c0192915050565b6000600019820361bfac5761bfac61af93565b5060010190565b80820281158282048414176167175761671761af93565b6001815b600184111561c0055780850481111561bfe95761bfe961af93565b600184161561bff757908102905b60019390931c92800261bfce565b935093915050565b60008261c01c57506001616717565b8161c02957506000616717565b816001811461c03f576002811461c0495761c065565b6001915050616717565b60ff84111561c05a5761c05a61af93565b50506001821b616717565b5060208310610133831016604e8410600b841016171561c088575081810a616717565b61c095600019848461bfca565b806000190482111561c0a95761c0a961af93565b029392505050565b6000616810838361c00d565b60008161c0cc5761c0cc61af93565b506000190190565b6000835161c0e681846020880161a948565b7f3a00000000000000000000000000000000000000000000000000000000000000908301908152835161c12081600184016020880161a948565b01600101949350505050565b8181036000831280158383131683831282161715619ad457619ad461af9356fe60c0604052600d60809081526c2bb930b83832b21022ba3432b960991b60a05260009061002c9082610114565b506040805180820190915260048152630ae8aa8960e31b60208201526001906100559082610114565b506002805460ff1916601217905534801561006f57600080fd5b506101d2565b634e487b7160e01b600052604160045260246000fd5b600181811c9082168061009f57607f821691505b6020821081036100bf57634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111561010f57806000526020600020601f840160051c810160208510156100ec5750805b601f840160051c820191505b8181101561010c57600081556001016100f8565b50505b505050565b81516001600160401b0381111561012d5761012d610075565b6101418161013b845461008b565b846100c5565b6020601f821160018114610175576000831561015d5750848201515b600019600385901b1c1916600184901b17845561010c565b600084815260208120601f198516915b828110156101a55787850151825560209485019460019092019101610185565b50848210156101c35786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b610986806101e16000396000f3fe6080604052600436106100c05760003560e01c8063313ce56711610074578063a9059cbb1161004e578063a9059cbb146101fa578063d0e30db01461021a578063dd62ed3e1461022257600080fd5b8063313ce5671461018c57806370a08231146101b857806395d89b41146101e557600080fd5b806318160ddd116100a557806318160ddd1461012f57806323b872dd1461014c5780632e1a7d4d1461016c57600080fd5b806306fdde03146100d4578063095ea7b3146100ff57600080fd5b366100cf576100cd61025a565b005b600080fd5b3480156100e057600080fd5b506100e96102b5565b6040516100f69190610745565b60405180910390f35b34801561010b57600080fd5b5061011f61011a3660046107da565b610343565b60405190151581526020016100f6565b34801561013b57600080fd5b50475b6040519081526020016100f6565b34801561015857600080fd5b5061011f610167366004610804565b6103bd565b34801561017857600080fd5b506100cd610187366004610841565b610647565b34801561019857600080fd5b506002546101a69060ff1681565b60405160ff90911681526020016100f6565b3480156101c457600080fd5b5061013e6101d336600461085a565b60036020526000908152604090205481565b3480156101f157600080fd5b506100e9610724565b34801561020657600080fd5b5061011f6102153660046107da565b610731565b6100cd61025a565b34801561022e57600080fd5b5061013e61023d366004610875565b600460209081526000928352604080842090915290825290205481565b33600090815260036020526040812080543492906102799084906108d7565b909155505060405134815233907fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c9060200160405180910390a2565b600080546102c2906108ea565b80601f01602080910402602001604051908101604052809291908181526020018280546102ee906108ea565b801561033b5780601f106103105761010080835404028352916020019161033b565b820191906000526020600020905b81548152906001019060200180831161031e57829003601f168201915b505050505081565b33600081815260046020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925906103ab9086815260200190565b60405180910390a35060015b92915050565b73ffffffffffffffffffffffffffffffffffffffff831660009081526003602052604081205482111561042b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600060248201526044015b60405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff841633148015906104a1575073ffffffffffffffffffffffffffffffffffffffff841660009081526004602090815260408083203384529091529020547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff14155b156105605773ffffffffffffffffffffffffffffffffffffffff8416600090815260046020908152604080832033845290915290205482111561051a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526020600482015260006024820152604401610422565b73ffffffffffffffffffffffffffffffffffffffff841660009081526004602090815260408083203384529091528120805484929061055a90849061093d565b90915550505b73ffffffffffffffffffffffffffffffffffffffff84166000908152600360205260408120805484929061059590849061093d565b909155505073ffffffffffffffffffffffffffffffffffffffff8316600090815260036020526040812080548492906105cf9084906108d7565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161063591815260200190565b60405180910390a35060019392505050565b3360009081526003602052604090205481111561069a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526020600482015260006024820152604401610422565b33600090815260036020526040812080548392906106b990849061093d565b9091555050604051339082156108fc029083906000818181858888f193505050501580156106eb573d6000803e3d6000fd5b5060405181815233907f7fcf532c15f0a6db0bd6d0e038bea71d30d808c7d98cb3bf7268a95bf5081b659060200160405180910390a250565b600180546102c2906108ea565b600061073e3384846103bd565b9392505050565b602081526000825180602084015260005b818110156107735760208186018101516040868401015201610756565b5060006040828501015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011684010191505092915050565b803573ffffffffffffffffffffffffffffffffffffffff811681146107d557600080fd5b919050565b600080604083850312156107ed57600080fd5b6107f6836107b1565b946020939093013593505050565b60008060006060848603121561081957600080fd5b610822846107b1565b9250610830602085016107b1565b929592945050506040919091013590565b60006020828403121561085357600080fd5b5035919050565b60006020828403121561086c57600080fd5b61073e826107b1565b6000806040838503121561088857600080fd5b610891836107b1565b915061089f602084016107b1565b90509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b808201808211156103b7576103b76108a8565b600181811c908216806108fe57607f821691505b602082108103610937577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b818103818111156103b7576103b76108a856fea264697066735822122008d7fc4e09519c5dd9f356b03596f6829a151d0bc7682533f9ceab4e459f5ee264736f6c634300081a00336080604052348015600f57600080fd5b506105208061001f6000396000f3fe60806040526004361061002a5760003560e01c806369582bee14610033578063de43156e1461005357005b3661003157005b005b34801561003f57600080fd5b5061003161004e3660046101ba565b610073565b34801561005f57600080fd5b5061003161006e3660046101ba565b6100ee565b6060811561008a5761008782840184610273565b90505b7ffdc887992b033668833927e252058e468fac0b6bd196d520f09c61b740e999486100b58780610369565b6100c560408a0160208b016103ce565b896040013533866040516100de969594939291906103f0565b60405180910390a1505050505050565b606081156101055761010282840184610273565b90505b7fcdc8ee677dc5ebe680fb18cebda5e26ba5ea1f0ba504a47e2a9a2ecb476dc98e6100b58780610369565b60006060828403121561014257600080fd5b50919050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461016c57600080fd5b919050565b60008083601f84011261018357600080fd5b50813567ffffffffffffffff81111561019b57600080fd5b6020830191508360208285010111156101b357600080fd5b9250929050565b6000806000806000608086880312156101d257600080fd5b853567ffffffffffffffff8111156101e957600080fd5b6101f588828901610130565b95505061020460208701610148565b935060408601359250606086013567ffffffffffffffff81111561022757600080fd5b61023388828901610171565b969995985093965092949392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60006020828403121561028557600080fd5b813567ffffffffffffffff81111561029c57600080fd5b8201601f810184136102ad57600080fd5b803567ffffffffffffffff8111156102c7576102c7610244565b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8501160116810181811067ffffffffffffffff8211171561033357610333610244565b60405281815282820160200186101561034b57600080fd5b81602084016020830137600091810160200191909152949350505050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261039e57600080fd5b83018035915067ffffffffffffffff8211156103b957600080fd5b6020019150368190038213156101b357600080fd5b6000602082840312156103e057600080fd5b6103e982610148565b9392505050565b60a081528560a0820152858760c0830137600060c0878301015260007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f880116820173ffffffffffffffffffffffffffffffffffffffff8716602084015285604084015273ffffffffffffffffffffffffffffffffffffffff8516606084015260c083820301608084015283518060c083015260005b818110156104a557602081870181015184830160e0015201610488565b50600060e0838301810191909152601f9091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016909101019897505050505050505056fea2646970667358221220f4d1ccb9c8450e782e1c77412473fd37637a5c83a2a3272307d8c8bc8e8c7a3364736f6c634300081a003360c060405234801561001057600080fd5b5060405161106f38038061106f83398101604081905261002f916100db565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461006357604051632b2add3d60e01b815260040160405180910390fd5b600380546001600160a01b0319166001600160a01b0385811691909117909155828116608052811660a0526040517f80699e81136d69cb8367ad52a994e25c722a86da654b561d0c14b61a777e7ac590600090a150505061011e565b80516001600160a01b03811681146100d657600080fd5b919050565b6000806000606084860312156100f057600080fd5b6100f9846100bf565b9250610107602085016100bf565b9150610115604085016100bf565b90509250925092565b60805160a051610f2561014a60003960006101e50152600081816102b9015261045b0152610f256000f3fe608060405234801561001057600080fd5b50600436106100f55760003560e01c806397770dff11610097578063c63585cc11610066578063c63585cc14610273578063d7fd7afb14610286578063d936a012146102b4578063ee2815ba146102db57600080fd5b806397770dff1461021a578063a7cb05071461022d578063c39aca3714610240578063c62178ac1461025357600080fd5b8063513a9c05116100d3578063513a9c051461018a578063569541b9146101c0578063842da36d146101e057806391dd645f1461020757600080fd5b80630be15547146100fa5780631f0e251b1461015a5780633ce4a5bc1461016f575b600080fd5b610130610108366004610bd1565b60016020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b61016d610168366004610c13565b6102ee565b005b61013073735b14bb79463307aacbed86daf3322b1e6226ab81565b610130610198366004610bd1565b60026020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b6003546101309073ffffffffffffffffffffffffffffffffffffffff1681565b6101307f000000000000000000000000000000000000000000000000000000000000000081565b61016d610215366004610c35565b610402565b61016d610228366004610c13565b610526565b61016d61023b366004610c61565b610633565b61016d61024e366004610c83565b6106ce565b6004546101309073ffffffffffffffffffffffffffffffffffffffff1681565b610130610281366004610d53565b6108cd565b6102a6610294366004610bd1565b60006020819052908152604090205481565b604051908152602001610151565b6101307f000000000000000000000000000000000000000000000000000000000000000081565b61016d6102e9366004610c35565b610a02565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461033b576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116610388576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600480547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527f3ade88e3922d64780e1bf4460d364c2970b69da813f9c0c07a1c187b5647636c906020015b60405180910390a150565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461044f576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600354600090610497907f00000000000000000000000000000000000000000000000000000000000000009073ffffffffffffffffffffffffffffffffffffffff16846108cd565b60008481526002602090815260409182902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff85169081179091558251878152918201529192507f0ecec485166da6139b13bb7e033e9446e2d35348e80ebf1180d4afe2dba1704e910160405180910390a1505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610573576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff81166105c0576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527fdba79d534382d1a8ae108e4c8ecb27c6ae42ab8b91d44eedf88bd329f3868d5e906020016103f7565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610680576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000828152602081815260409182902083905581518481529081018390527f49f492222906ac486c3c1401fa545626df1f0c0e5a77a05597ea2ed66af9850d91015b60405180910390a15050565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461071b576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff831673735b14bb79463307aacbed86daf3322b1e6226ab1480610768575073ffffffffffffffffffffffffffffffffffffffff831630145b1561079f576040517f82d5d76a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f47e7ef2400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152602482018690528616906347e7ef24906044016020604051808303816000875af1158015610814573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108389190610d96565b506040517fde43156e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84169063de43156e906108939089908990899088908890600401610e01565b600060405180830381600087803b1580156108ad57600080fd5b505af11580156108c1573d6000803e3d6000fd5b50505050505050505050565b60008060006108dc8585610ad3565b6040517fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606084811b8216602084015283901b16603482015291935091508690604801604051602081830303815290604052805190602001206040516020016109c29291907fff00000000000000000000000000000000000000000000000000000000000000815260609290921b7fffffffffffffffffffffffffffffffffffffffff00000000000000000000000016600183015260158201527f96e8ac4277198ff8b6f785478aa9a39f403cb768dd02cbee326c3e7da348845f603582015260550190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291905280516020909101209695505050505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610a4f576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008281526001602090815260409182902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff85169081179091558251858152918201527fd1b36d30f6248e97c473b4d1348ca164a4ef6759022f54a58ec200326c39c45d91016106c2565b6000808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603610b3b576040517fcb1e7cfe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1610610b75578284610b78565b83835b909250905073ffffffffffffffffffffffffffffffffffffffff8216610bca576040517f78b507da00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b9250929050565b600060208284031215610be357600080fd5b5035919050565b803573ffffffffffffffffffffffffffffffffffffffff81168114610c0e57600080fd5b919050565b600060208284031215610c2557600080fd5b610c2e82610bea565b9392505050565b60008060408385031215610c4857600080fd5b82359150610c5860208401610bea565b90509250929050565b60008060408385031215610c7457600080fd5b50508035926020909101359150565b60008060008060008060a08789031215610c9c57600080fd5b863567ffffffffffffffff811115610cb357600080fd5b87016060818a031215610cc557600080fd5b9550610cd360208801610bea565b945060408701359350610ce860608801610bea565b9250608087013567ffffffffffffffff811115610d0457600080fd5b8701601f81018913610d1557600080fd5b803567ffffffffffffffff811115610d2c57600080fd5b896020828401011115610d3e57600080fd5b60208201935080925050509295509295509295565b600080600060608486031215610d6857600080fd5b610d7184610bea565b9250610d7f60208501610bea565b9150610d8d60408501610bea565b90509250925092565b600060208284031215610da857600080fd5b81518015158114610c2e57600080fd5b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b60808152600086357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1883603018112610e3957600080fd5b870160208101903567ffffffffffffffff811115610e5657600080fd5b803603821315610e6557600080fd5b60606080850152610e7a60e085018284610db8565b91505073ffffffffffffffffffffffffffffffffffffffff610e9e60208a01610bea565b1660a0840152604088013560c084015273ffffffffffffffffffffffffffffffffffffffff871660208401528560408401528281036060840152610ee3818587610db8565b9897505050505050505056fea2646970667358221220431a07541a491b54259bdf8fcd05ade6751bfbbf0e72e605f27325b56d7d464f64736f6c634300081a003360e060405234801561001057600080fd5b50604051611bb9380380611bb983398101604081905261002f9161020e565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461006357604051632b2add3d60e01b815260040160405180910390fd5b6001600160a01b038216158061008057506001600160a01b038116155b1561009e5760405163d92e233d60e01b815260040160405180910390fd5b60066100aa8982610360565b5060076100b78882610360565b5060ff861660c05260808590528360028111156100d6576100d661041e565b60a08160028111156100ea576100ea61041e565b905250600192909255600080546001600160a01b039283166001600160a01b03199182161790915560088054929093169116179055506104349350505050565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261015157600080fd5b81516001600160401b0381111561016a5761016a61012a565b604051601f8201601f19908116603f011681016001600160401b03811182821017156101985761019861012a565b6040528181528382016020018510156101b057600080fd5b60005b828110156101cf576020818601810151838301820152016101b3565b506000918101602001919091529392505050565b8051600381106101f257600080fd5b919050565b80516001600160a01b03811681146101f257600080fd5b600080600080600080600080610100898b03121561022b57600080fd5b88516001600160401b0381111561024157600080fd5b61024d8b828c01610140565b60208b015190995090506001600160401b0381111561026b57600080fd5b6102778b828c01610140565b975050604089015160ff8116811461028e57600080fd5b60608a015190965094506102a460808a016101e3565b60a08a015190945092506102ba60c08a016101f7565b91506102c860e08a016101f7565b90509295985092959890939650565b600181811c908216806102eb57607f821691505b60208210810361030b57634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111561035b57806000526020600020601f840160051c810160208510156103385750805b601f840160051c820191505b818110156103585760008155600101610344565b50505b505050565b81516001600160401b038111156103795761037961012a565b61038d8161038784546102d7565b84610311565b6020601f8211600181146103c157600083156103a95750848201515b600019600385901b1c1916600184901b178455610358565b600084815260208120601f198516915b828110156103f157878501518255602094850194600190920191016103d1565b508482101561040f5786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b634e487b7160e01b600052602160045260246000fd5b60805160a05160c05161174861047160003960006102170152600061033a0152600081816102eb01528181610ad70152610bdd01526117486000f3fe608060405234801561001057600080fd5b50600436106101985760003560e01c80638b851b95116100e3578063ccc775991161008c578063eddeb12311610066578063eddeb12314610431578063f2441b3214610444578063f687d12a1461046457600080fd5b8063ccc77599146103a4578063d9eeebed146103b7578063dd62ed3e146103eb57600080fd5b8063a9059cbb116100bd578063a9059cbb14610369578063c70126261461037c578063c835d7cc1461038f57600080fd5b80638b851b951461030d57806395d89b411461032d578063a3413d031461033557600080fd5b80633ce4a5bc116101455780634d8943bb1161011f5780634d8943bb146102a757806370a08231146102b057806385e1f4d0146102e657600080fd5b80633ce4a5bc1461024157806342966c681461028157806347e7ef241461029457600080fd5b806318160ddd1161017657806318160ddd146101f557806323b872dd146101fd578063313ce5671461021057600080fd5b806306fdde031461019d578063091d2788146101bb578063095ea7b3146101d2575b600080fd5b6101a5610477565b6040516101b29190611327565b60405180910390f35b6101c460015481565b6040519081526020016101b2565b6101e56101e0366004611366565b610509565b60405190151581526020016101b2565b6005546101c4565b6101e561020b366004611392565b610520565b60405160ff7f00000000000000000000000000000000000000000000000000000000000000001681526020016101b2565b61025c73735b14bb79463307aacbed86daf3322b1e6226ab81565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101b2565b6101e561028f3660046113d3565b6105b7565b6101e56102a2366004611366565b6105cb565b6101c460025481565b6101c46102be3660046113ec565b73ffffffffffffffffffffffffffffffffffffffff1660009081526003602052604090205490565b6101c47f000000000000000000000000000000000000000000000000000000000000000081565b60085461025c9073ffffffffffffffffffffffffffffffffffffffff1681565b6101a561071f565b61035c7f000000000000000000000000000000000000000000000000000000000000000081565b6040516101b29190611409565b6101e5610377366004611366565b61072e565b6101e561038a366004611479565b61073b565b6103a261039d3660046113ec565b61088a565b005b6103a26103b23660046113ec565b61099e565b6103bf610aab565b6040805173ffffffffffffffffffffffffffffffffffffffff90931683526020830191909152016101b2565b6101c46103f9366004611571565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260046020908152604080832093909416825291909152205490565b6103a261043f3660046113d3565b610cc9565b60005461025c9073ffffffffffffffffffffffffffffffffffffffff1681565b6103a26104723660046113d3565b610d4b565b606060068054610486906115aa565b80601f01602080910402602001604051908101604052809291908181526020018280546104b2906115aa565b80156104ff5780601f106104d4576101008083540402835291602001916104ff565b820191906000526020600020905b8154815290600101906020018083116104e257829003601f168201915b5050505050905090565b6000610516338484610dcd565b5060015b92915050565b600061052d848484610ed6565b73ffffffffffffffffffffffffffffffffffffffff8416600090815260046020908152604080832033845290915290205482811015610598576040517f10bad14700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6105ac85336105a7868561162c565b610dcd565b506001949350505050565b60006105c33383611091565b506001919050565b60003373735b14bb79463307aacbed86daf3322b1e6226ab14801590610609575060005473ffffffffffffffffffffffffffffffffffffffff163314155b801561062d575060085473ffffffffffffffffffffffffffffffffffffffff163314155b15610664576040517fddb5de5e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61066e83836111d3565b6040517f735b14bb79463307aacbed86daf3322b1e6226ab000000000000000000000000602082015273ffffffffffffffffffffffffffffffffffffffff8416907f67fc7bdaed5b0ec550d8706b87d60568ab70c6b781263c70101d54cd1564aab390603401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529082905261070e91869061163f565b60405180910390a250600192915050565b606060078054610486906115aa565b6000610516338484610ed6565b6000806000610748610aab565b6040517f23b872dd00000000000000000000000000000000000000000000000000000000815233600482015273735b14bb79463307aacbed86daf3322b1e6226ab602482015260448101829052919350915073ffffffffffffffffffffffffffffffffffffffff8316906323b872dd906064016020604051808303816000875af11580156107da573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107fe9190611661565b610834576040517f0a7cd6d600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61083e3385611091565b60025460405133917f9ffbffc04a397460ee1dbe8c9503e098090567d6b7f4b3c02a8617d800b6d9559161087791899189918791611683565b60405180910390a2506001949350505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab146108d7576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116610924576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527fd55614e962c5fd6ece71614f6348d702468a997a394dd5e5c1677950226d97ae906020015b60405180910390a150565b3373735b14bb79463307aacbed86daf3322b1e6226ab146109eb576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116610a38576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600880547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527f88815d964e380677e86d817e7d65dea59cb7b4c3b5b7a0c8ec7ea4a74f90a38790602001610993565b600080546040517f0be155470000000000000000000000000000000000000000000000000000000081527f000000000000000000000000000000000000000000000000000000000000000060048201528291829173ffffffffffffffffffffffffffffffffffffffff90911690630be1554790602401602060405180830381865afa158015610b3e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b6291906116b2565b905073ffffffffffffffffffffffffffffffffffffffff8116610bb1576040517f78fff39600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080546040517fd7fd7afb0000000000000000000000000000000000000000000000000000000081527f0000000000000000000000000000000000000000000000000000000000000000600482015273ffffffffffffffffffffffffffffffffffffffff9091169063d7fd7afb90602401602060405180830381865afa158015610c40573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c6491906116cf565b905080600003610ca0576040517fe661aed000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060025460015483610cb391906116e8565b610cbd91906116ff565b92959294509192505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610d16576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60028190556040518181527fef13af88e424b5d15f49c77758542c1938b08b8b95b91ed0751f98ba99000d8f90602001610993565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610d98576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018190556040518181527fff5788270f43bfc1ca41c503606d2594aa3023a1a7547de403a3e2f146a4a80a90602001610993565b73ffffffffffffffffffffffffffffffffffffffff8316610e1a576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216610e67576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff83811660008181526004602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8316610f23576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216610f70576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff831660009081526003602052604090205481811015610fd0576040517ffe382aa700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610fda828261162c565b73ffffffffffffffffffffffffffffffffffffffff808616600090815260036020526040808220939093559085168152908120805484929061101d9084906116ff565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161108391815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff82166110de576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff82166000908152600360205260409020548181101561113e576040517ffe382aa700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611148828261162c565b73ffffffffffffffffffffffffffffffffffffffff84166000908152600360205260408120919091556005805484929061118390849061162c565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90602001610ec9565b73ffffffffffffffffffffffffffffffffffffffff8216611220576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b806005600082825461123291906116ff565b909155505073ffffffffffffffffffffffffffffffffffffffff82166000908152600360205260408120805483929061126c9084906116ff565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6000815180845260005b818110156112e9576020818501810151868301820152016112cd565b5060006020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b60208152600061133a60208301846112c3565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff8116811461136357600080fd5b50565b6000806040838503121561137957600080fd5b823561138481611341565b946020939093013593505050565b6000806000606084860312156113a757600080fd5b83356113b281611341565b925060208401356113c281611341565b929592945050506040919091013590565b6000602082840312156113e557600080fd5b5035919050565b6000602082840312156113fe57600080fd5b813561133a81611341565b6020810160038310611444577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000806040838503121561148c57600080fd5b823567ffffffffffffffff8111156114a357600080fd5b8301601f810185136114b457600080fd5b803567ffffffffffffffff8111156114ce576114ce61144a565b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8501160116810181811067ffffffffffffffff8211171561153a5761153a61144a565b60405281815282820160200187101561155257600080fd5b8160208401602083013760006020928201830152969401359450505050565b6000806040838503121561158457600080fd5b823561158f81611341565b9150602083013561159f81611341565b809150509250929050565b600181811c908216806115be57607f821691505b6020821081036115f7577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8181038181111561051a5761051a6115fd565b60408152600061165260408301856112c3565b90508260208301529392505050565b60006020828403121561167357600080fd5b8151801515811461133a57600080fd5b60808152600061169660808301876112c3565b6020830195909552506040810192909252606090910152919050565b6000602082840312156116c457600080fd5b815161133a81611341565b6000602082840312156116e157600080fd5b5051919050565b808202811582820484141761051a5761051a6115fd565b8082018082111561051a5761051a6115fd56fea26469706673582212204013e39523742118b3f2227e145ee7e48176ba6aebead33c596dca2acb59a74c64736f6c634300081a0033a2646970667358221220755dffb446c57bfb44ce2f29d652e1e486b59240c543b3ca37d14bca51ca7b9c64736f6c634300081a0033", } // GatewayZEVMOutboundTestABI is the input ABI used to generate the binding from. diff --git a/v2/pkg/igatewayzevm.sol/igatewayzevm.go b/v2/pkg/igatewayzevm.sol/igatewayzevm.go index 471a9921..28e5b4e1 100644 --- a/v2/pkg/igatewayzevm.sol/igatewayzevm.go +++ b/v2/pkg/igatewayzevm.sol/igatewayzevm.go @@ -45,7 +45,7 @@ type ZContext struct { // IGatewayZEVMMetaData contains all meta data concerning the IGatewayZEVM contract. var IGatewayZEVMMetaData = &bind.MetaData{ - ABI: "[{\"type\":\"function\",\"name\":\"call\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"chainId\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"message\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"deposit\",\"inputs\":[{\"name\":\"zrc20\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"depositAndCall\",\"inputs\":[{\"name\":\"context\",\"type\":\"tuple\",\"internalType\":\"structzContext\",\"components\":[{\"name\":\"origin\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"sender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"chainID\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"message\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"depositAndCall\",\"inputs\":[{\"name\":\"context\",\"type\":\"tuple\",\"internalType\":\"structzContext\",\"components\":[{\"name\":\"origin\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"sender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"chainID\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"zrc20\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"message\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"depositAndRevert\",\"inputs\":[{\"name\":\"context\",\"type\":\"tuple\",\"internalType\":\"structrevertContext\",\"components\":[{\"name\":\"origin\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"sender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"chainID\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"zrc20\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"message\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"execute\",\"inputs\":[{\"name\":\"context\",\"type\":\"tuple\",\"internalType\":\"structzContext\",\"components\":[{\"name\":\"origin\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"sender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"chainID\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"zrc20\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"message\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"executeRevert\",\"inputs\":[{\"name\":\"context\",\"type\":\"tuple\",\"internalType\":\"structrevertContext\",\"components\":[{\"name\":\"origin\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"sender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"chainID\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"zrc20\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"message\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"withdraw\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"zrc20\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"withdraw\",\"inputs\":[{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"chainId\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"withdrawAndCall\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"zrc20\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"message\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"withdrawAndCall\",\"inputs\":[{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"chainId\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"message\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"event\",\"name\":\"Call\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"chainId\",\"type\":\"uint256\",\"indexed\":true,\"internalType\":\"uint256\"},{\"name\":\"receiver\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"message\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Withdrawal\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"chainId\",\"type\":\"uint256\",\"indexed\":true,\"internalType\":\"uint256\"},{\"name\":\"receiver\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"zrc20\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"gasfee\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"protocolFlatFee\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"message\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"CallerIsNotFungibleModule\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"FailedZetaSent\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"GasFeeTransferFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientZRC20Amount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientZetaAmount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidTarget\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OnlyWZETAOrFungible\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"WithdrawalFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZRC20BurnFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZRC20DepositFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZRC20TransferFailed\",\"inputs\":[]}]", + ABI: "[{\"type\":\"function\",\"name\":\"call\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"chainId\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"message\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"deposit\",\"inputs\":[{\"name\":\"zrc20\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"depositAndCall\",\"inputs\":[{\"name\":\"context\",\"type\":\"tuple\",\"internalType\":\"structzContext\",\"components\":[{\"name\":\"origin\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"sender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"chainID\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"message\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"depositAndCall\",\"inputs\":[{\"name\":\"context\",\"type\":\"tuple\",\"internalType\":\"structzContext\",\"components\":[{\"name\":\"origin\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"sender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"chainID\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"zrc20\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"message\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"depositAndRevert\",\"inputs\":[{\"name\":\"context\",\"type\":\"tuple\",\"internalType\":\"structrevertContext\",\"components\":[{\"name\":\"origin\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"sender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"chainID\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"zrc20\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"message\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"execute\",\"inputs\":[{\"name\":\"context\",\"type\":\"tuple\",\"internalType\":\"structzContext\",\"components\":[{\"name\":\"origin\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"sender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"chainID\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"zrc20\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"message\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"executeRevert\",\"inputs\":[{\"name\":\"context\",\"type\":\"tuple\",\"internalType\":\"structrevertContext\",\"components\":[{\"name\":\"origin\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"sender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"chainID\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"zrc20\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"message\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"withdraw\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"zrc20\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"withdraw\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"chainId\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"withdrawAndCall\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"zrc20\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"message\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"withdrawAndCall\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"chainId\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"message\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"event\",\"name\":\"Call\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"chainId\",\"type\":\"uint256\",\"indexed\":true,\"internalType\":\"uint256\"},{\"name\":\"receiver\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"message\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Withdrawal\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"chainId\",\"type\":\"uint256\",\"indexed\":true,\"internalType\":\"uint256\"},{\"name\":\"receiver\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"zrc20\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"gasfee\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"protocolFlatFee\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"message\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"CallerIsNotFungibleModule\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"FailedZetaSent\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"GasFeeTransferFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientZRC20Amount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientZetaAmount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidTarget\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OnlyWZETAOrFungible\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"WithdrawalFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZRC20BurnFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZRC20DepositFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZRC20TransferFailed\",\"inputs\":[]}]", } // IGatewayZEVMABI is the input ABI used to generate the binding from. @@ -362,25 +362,25 @@ func (_IGatewayZEVM *IGatewayZEVMTransactorSession) Withdraw(receiver []byte, am return _IGatewayZEVM.Contract.Withdraw(&_IGatewayZEVM.TransactOpts, receiver, amount, zrc20) } -// Withdraw0 is a paid mutator transaction binding the contract method 0x441a3e70. +// Withdraw0 is a paid mutator transaction binding the contract method 0x737a9ed6. // -// Solidity: function withdraw(uint256 amount, uint256 chainId) returns() -func (_IGatewayZEVM *IGatewayZEVMTransactor) Withdraw0(opts *bind.TransactOpts, amount *big.Int, chainId *big.Int) (*types.Transaction, error) { - return _IGatewayZEVM.contract.Transact(opts, "withdraw0", amount, chainId) +// Solidity: function withdraw(bytes receiver, uint256 amount, uint256 chainId) returns() +func (_IGatewayZEVM *IGatewayZEVMTransactor) Withdraw0(opts *bind.TransactOpts, receiver []byte, amount *big.Int, chainId *big.Int) (*types.Transaction, error) { + return _IGatewayZEVM.contract.Transact(opts, "withdraw0", receiver, amount, chainId) } -// Withdraw0 is a paid mutator transaction binding the contract method 0x441a3e70. +// Withdraw0 is a paid mutator transaction binding the contract method 0x737a9ed6. // -// Solidity: function withdraw(uint256 amount, uint256 chainId) returns() -func (_IGatewayZEVM *IGatewayZEVMSession) Withdraw0(amount *big.Int, chainId *big.Int) (*types.Transaction, error) { - return _IGatewayZEVM.Contract.Withdraw0(&_IGatewayZEVM.TransactOpts, amount, chainId) +// Solidity: function withdraw(bytes receiver, uint256 amount, uint256 chainId) returns() +func (_IGatewayZEVM *IGatewayZEVMSession) Withdraw0(receiver []byte, amount *big.Int, chainId *big.Int) (*types.Transaction, error) { + return _IGatewayZEVM.Contract.Withdraw0(&_IGatewayZEVM.TransactOpts, receiver, amount, chainId) } -// Withdraw0 is a paid mutator transaction binding the contract method 0x441a3e70. +// Withdraw0 is a paid mutator transaction binding the contract method 0x737a9ed6. // -// Solidity: function withdraw(uint256 amount, uint256 chainId) returns() -func (_IGatewayZEVM *IGatewayZEVMTransactorSession) Withdraw0(amount *big.Int, chainId *big.Int) (*types.Transaction, error) { - return _IGatewayZEVM.Contract.Withdraw0(&_IGatewayZEVM.TransactOpts, amount, chainId) +// Solidity: function withdraw(bytes receiver, uint256 amount, uint256 chainId) returns() +func (_IGatewayZEVM *IGatewayZEVMTransactorSession) Withdraw0(receiver []byte, amount *big.Int, chainId *big.Int) (*types.Transaction, error) { + return _IGatewayZEVM.Contract.Withdraw0(&_IGatewayZEVM.TransactOpts, receiver, amount, chainId) } // WithdrawAndCall is a paid mutator transaction binding the contract method 0x7993c1e0. @@ -404,25 +404,25 @@ func (_IGatewayZEVM *IGatewayZEVMTransactorSession) WithdrawAndCall(receiver []b return _IGatewayZEVM.Contract.WithdrawAndCall(&_IGatewayZEVM.TransactOpts, receiver, amount, zrc20, message) } -// WithdrawAndCall0 is a paid mutator transaction binding the contract method 0x80bd3d03. +// WithdrawAndCall0 is a paid mutator transaction binding the contract method 0xf41d7749. // -// Solidity: function withdrawAndCall(uint256 amount, uint256 chainId, bytes message) returns() -func (_IGatewayZEVM *IGatewayZEVMTransactor) WithdrawAndCall0(opts *bind.TransactOpts, amount *big.Int, chainId *big.Int, message []byte) (*types.Transaction, error) { - return _IGatewayZEVM.contract.Transact(opts, "withdrawAndCall0", amount, chainId, message) +// Solidity: function withdrawAndCall(bytes receiver, uint256 amount, uint256 chainId, bytes message) returns() +func (_IGatewayZEVM *IGatewayZEVMTransactor) WithdrawAndCall0(opts *bind.TransactOpts, receiver []byte, amount *big.Int, chainId *big.Int, message []byte) (*types.Transaction, error) { + return _IGatewayZEVM.contract.Transact(opts, "withdrawAndCall0", receiver, amount, chainId, message) } -// WithdrawAndCall0 is a paid mutator transaction binding the contract method 0x80bd3d03. +// WithdrawAndCall0 is a paid mutator transaction binding the contract method 0xf41d7749. // -// Solidity: function withdrawAndCall(uint256 amount, uint256 chainId, bytes message) returns() -func (_IGatewayZEVM *IGatewayZEVMSession) WithdrawAndCall0(amount *big.Int, chainId *big.Int, message []byte) (*types.Transaction, error) { - return _IGatewayZEVM.Contract.WithdrawAndCall0(&_IGatewayZEVM.TransactOpts, amount, chainId, message) +// Solidity: function withdrawAndCall(bytes receiver, uint256 amount, uint256 chainId, bytes message) returns() +func (_IGatewayZEVM *IGatewayZEVMSession) WithdrawAndCall0(receiver []byte, amount *big.Int, chainId *big.Int, message []byte) (*types.Transaction, error) { + return _IGatewayZEVM.Contract.WithdrawAndCall0(&_IGatewayZEVM.TransactOpts, receiver, amount, chainId, message) } -// WithdrawAndCall0 is a paid mutator transaction binding the contract method 0x80bd3d03. +// WithdrawAndCall0 is a paid mutator transaction binding the contract method 0xf41d7749. // -// Solidity: function withdrawAndCall(uint256 amount, uint256 chainId, bytes message) returns() -func (_IGatewayZEVM *IGatewayZEVMTransactorSession) WithdrawAndCall0(amount *big.Int, chainId *big.Int, message []byte) (*types.Transaction, error) { - return _IGatewayZEVM.Contract.WithdrawAndCall0(&_IGatewayZEVM.TransactOpts, amount, chainId, message) +// Solidity: function withdrawAndCall(bytes receiver, uint256 amount, uint256 chainId, bytes message) returns() +func (_IGatewayZEVM *IGatewayZEVMTransactorSession) WithdrawAndCall0(receiver []byte, amount *big.Int, chainId *big.Int, message []byte) (*types.Transaction, error) { + return _IGatewayZEVM.Contract.WithdrawAndCall0(&_IGatewayZEVM.TransactOpts, receiver, amount, chainId, message) } // IGatewayZEVMCallIterator is returned from FilterCall and is used to iterate over the raw logs and unpacked data for Call events raised by the IGatewayZEVM contract. diff --git a/v2/pkg/senderzevm.sol/senderzevm.go b/v2/pkg/senderzevm.sol/senderzevm.go index 611b4c5e..c7ff227c 100644 --- a/v2/pkg/senderzevm.sol/senderzevm.go +++ b/v2/pkg/senderzevm.sol/senderzevm.go @@ -32,7 +32,7 @@ var ( // SenderZEVMMetaData contains all meta data concerning the SenderZEVM contract. var SenderZEVMMetaData = &bind.MetaData{ ABI: "[{\"type\":\"constructor\",\"inputs\":[{\"name\":\"_gateway\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"callReceiver\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"chainId\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"str\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"num\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"flag\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"gateway\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"withdrawAndCallReceiver\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"zrc20\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"str\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"num\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"flag\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"error\",\"name\":\"ApprovalFailed\",\"inputs\":[]}]", - Bin: "0x6080604052348015600f57600080fd5b5060405161080c38038061080c833981016040819052602c916050565b600080546001600160a01b0319166001600160a01b0392909216919091179055607e565b600060208284031215606157600080fd5b81516001600160a01b0381168114607757600080fd5b9392505050565b61077f8061008d6000396000f3fe608060405234801561001057600080fd5b50600436106100415760003560e01c80630abd890514610046578063116191b61461005b578063865b36f6146100a4575b600080fd5b6100596100543660046104c4565b6100b7565b005b60005461007b9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b6100596100b236600461057f565b6102af565b60008383836040516024016100ce93929190610674565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe04d4f970000000000000000000000000000000000000000000000000000000017905260005490517f095ea7b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff91821660048201526024810189905291925086169063095ea7b3906044016020604051808303816000875af11580156101be573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101e2919061069e565b610218576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000546040517f7993c1e000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff90911690637993c1e090610274908a908a908a9087906004016106c2565b600060405180830381600087803b15801561028e57600080fd5b505af11580156102a2573d6000803e3d6000fd5b5050505050505050505050565b60008383836040516024016102c693929190610674565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe04d4f970000000000000000000000000000000000000000000000000000000017905260005490517f5d40e17800000000000000000000000000000000000000000000000000000000815291925073ffffffffffffffffffffffffffffffffffffffff1690635d40e1789061039690899089908690600401610714565b600060405180830381600087803b1580156103b057600080fd5b505af11580156103c4573d6000803e3d6000fd5b50505050505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600082601f83011261041057600080fd5b81356020830160008067ffffffffffffffff841115610431576104316103d0565b506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f85018116603f0116810181811067ffffffffffffffff8211171561047e5761047e6103d0565b60405283815290508082840187101561049657600080fd5b838360208301376000602085830101528094505050505092915050565b80151581146104c157600080fd5b50565b60008060008060008060c087890312156104dd57600080fd5b863567ffffffffffffffff8111156104f457600080fd5b61050089828a016103ff565b96505060208701359450604087013573ffffffffffffffffffffffffffffffffffffffff8116811461053157600080fd5b9350606087013567ffffffffffffffff81111561054d57600080fd5b61055989828a016103ff565b9350506080870135915060a0870135610571816104b3565b809150509295509295509295565b600080600080600060a0868803121561059757600080fd5b853567ffffffffffffffff8111156105ae57600080fd5b6105ba888289016103ff565b95505060208601359350604086013567ffffffffffffffff8111156105de57600080fd5b6105ea888289016103ff565b935050606086013591506080860135610602816104b3565b809150509295509295909350565b6000815180845260005b818110156106365760208185018101518683018201520161061a565b5060006020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b6060815260006106876060830186610610565b602083019490945250901515604090910152919050565b6000602082840312156106b057600080fd5b81516106bb816104b3565b9392505050565b6080815260006106d56080830187610610565b85602084015273ffffffffffffffffffffffffffffffffffffffff8516604084015282810360608401526107098185610610565b979650505050505050565b6060815260006107276060830186610610565b846020840152828103604084015261073f8185610610565b969550505050505056fea26469706673582212202d9e7d32ef6522050432c1694ddb8cfdc9122adb07ccb90fba239639e4abfd7c64736f6c634300081a0033", + Bin: "0x6080604052348015600f57600080fd5b5060405161080c38038061080c833981016040819052602c916050565b600080546001600160a01b0319166001600160a01b0392909216919091179055607e565b600060208284031215606157600080fd5b81516001600160a01b0381168114607757600080fd5b9392505050565b61077f8061008d6000396000f3fe608060405234801561001057600080fd5b50600436106100415760003560e01c80630abd890514610046578063116191b61461005b578063865b36f6146100a4575b600080fd5b6100596100543660046104c4565b6100b7565b005b60005461007b9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b6100596100b236600461057f565b6102af565b60008383836040516024016100ce93929190610674565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe04d4f970000000000000000000000000000000000000000000000000000000017905260005490517f095ea7b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff91821660048201526024810189905291925086169063095ea7b3906044016020604051808303816000875af11580156101be573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101e2919061069e565b610218576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000546040517f7993c1e000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff90911690637993c1e090610274908a908a908a9087906004016106c2565b600060405180830381600087803b15801561028e57600080fd5b505af11580156102a2573d6000803e3d6000fd5b5050505050505050505050565b60008383836040516024016102c693929190610674565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe04d4f970000000000000000000000000000000000000000000000000000000017905260005490517f5d40e17800000000000000000000000000000000000000000000000000000000815291925073ffffffffffffffffffffffffffffffffffffffff1690635d40e1789061039690899089908690600401610714565b600060405180830381600087803b1580156103b057600080fd5b505af11580156103c4573d6000803e3d6000fd5b50505050505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600082601f83011261041057600080fd5b81356020830160008067ffffffffffffffff841115610431576104316103d0565b506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f85018116603f0116810181811067ffffffffffffffff8211171561047e5761047e6103d0565b60405283815290508082840187101561049657600080fd5b838360208301376000602085830101528094505050505092915050565b80151581146104c157600080fd5b50565b60008060008060008060c087890312156104dd57600080fd5b863567ffffffffffffffff8111156104f457600080fd5b61050089828a016103ff565b96505060208701359450604087013573ffffffffffffffffffffffffffffffffffffffff8116811461053157600080fd5b9350606087013567ffffffffffffffff81111561054d57600080fd5b61055989828a016103ff565b9350506080870135915060a0870135610571816104b3565b809150509295509295509295565b600080600080600060a0868803121561059757600080fd5b853567ffffffffffffffff8111156105ae57600080fd5b6105ba888289016103ff565b95505060208601359350604086013567ffffffffffffffff8111156105de57600080fd5b6105ea888289016103ff565b935050606086013591506080860135610602816104b3565b809150509295509295909350565b6000815180845260005b818110156106365760208185018101518683018201520161061a565b5060006020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b6060815260006106876060830186610610565b602083019490945250901515604090910152919050565b6000602082840312156106b057600080fd5b81516106bb816104b3565b9392505050565b6080815260006106d56080830187610610565b85602084015273ffffffffffffffffffffffffffffffffffffffff8516604084015282810360608401526107098185610610565b979650505050505050565b6060815260006107276060830186610610565b846020840152828103604084015261073f8185610610565b969550505050505056fea2646970667358221220b01f70fc7d08faa150faba1d40368a8dfab02c60f0c4f8fa10ce583a32885b4d64736f6c634300081a0033", } // SenderZEVMABI is the input ABI used to generate the binding from. diff --git a/v2/pkg/zetaconnectornative.t.sol/zetaconnectornativetest.go b/v2/pkg/zetaconnectornative.t.sol/zetaconnectornativetest.go index a2e1b3c4..3e54fcd4 100644 --- a/v2/pkg/zetaconnectornative.t.sol/zetaconnectornativetest.go +++ b/v2/pkg/zetaconnectornative.t.sol/zetaconnectornativetest.go @@ -50,7 +50,7 @@ type StdInvariantFuzzSelector struct { // ZetaConnectorNativeTestMetaData contains all meta data concerning the ZetaConnectorNativeTest contract. var ZetaConnectorNativeTestMetaData = &bind.MetaData{ ABI: "[{\"type\":\"function\",\"name\":\"IS_TEST\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"PAUSER_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"WITHDRAWER_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeArtifacts\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedArtifacts_\",\"type\":\"string[]\",\"internalType\":\"string[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeContracts\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedContracts_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeSelectors\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedSelectors_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzSelector[]\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"selectors\",\"type\":\"bytes4[]\",\"internalType\":\"bytes4[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeSenders\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedSenders_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"failed\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"setUp\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"targetArtifactSelectors\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedArtifactSelectors_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzArtifactSelector[]\",\"components\":[{\"name\":\"artifact\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"selectors\",\"type\":\"bytes4[]\",\"internalType\":\"bytes4[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetArtifacts\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedArtifacts_\",\"type\":\"string[]\",\"internalType\":\"string[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetContracts\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedContracts_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetInterfaces\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedInterfaces_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzInterface[]\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"artifacts\",\"type\":\"string[]\",\"internalType\":\"string[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetSelectors\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedSelectors_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzSelector[]\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"selectors\",\"type\":\"bytes4[]\",\"internalType\":\"bytes4[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetSenders\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedSenders_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"testWithdraw\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawAndCallReceiveERC20\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawAndCallReceiveERC20FailsIfSenderIsNotWithdrawer\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawAndCallReceiveERC20Partial\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawAndCallReceiveNoParams\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawAndRevert\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawAndRevertFailsIfSenderIsNotWithdrawer\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawFailsIfSenderIsNotWithdrawer\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawTogglePause\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"event\",\"name\":\"Call\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"receiver\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Deposit\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"receiver\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"asset\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Executed\",\"inputs\":[{\"name\":\"destination\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ExecutedWithERC20\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedERC20\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"token\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"destination\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedNoParams\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedNonPayable\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"strs\",\"type\":\"string[]\",\"indexed\":false,\"internalType\":\"string[]\"},{\"name\":\"nums\",\"type\":\"uint256[]\",\"indexed\":false,\"internalType\":\"uint256[]\"},{\"name\":\"flag\",\"type\":\"bool\",\"indexed\":false,\"internalType\":\"bool\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedPayable\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"str\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"num\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"flag\",\"type\":\"bool\",\"indexed\":false,\"internalType\":\"bool\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedRevert\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Reverted\",\"inputs\":[{\"name\":\"destination\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RevertedWithERC20\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Withdraw\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"WithdrawAndCall\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"WithdrawAndRevert\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log\",\"inputs\":[{\"name\":\"\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_address\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_array\",\"inputs\":[{\"name\":\"val\",\"type\":\"uint256[]\",\"indexed\":false,\"internalType\":\"uint256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_array\",\"inputs\":[{\"name\":\"val\",\"type\":\"int256[]\",\"indexed\":false,\"internalType\":\"int256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_array\",\"inputs\":[{\"name\":\"val\",\"type\":\"address[]\",\"indexed\":false,\"internalType\":\"address[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_bytes\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_bytes32\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_int\",\"inputs\":[{\"name\":\"\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_address\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_array\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"uint256[]\",\"indexed\":false,\"internalType\":\"uint256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_array\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"int256[]\",\"indexed\":false,\"internalType\":\"int256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_array\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"address[]\",\"indexed\":false,\"internalType\":\"address[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_bytes\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_bytes32\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_decimal_int\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"},{\"name\":\"decimals\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_decimal_uint\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"decimals\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_int\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_string\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_uint\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_string\",\"inputs\":[{\"name\":\"\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_uint\",\"inputs\":[{\"name\":\"\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"logs\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"AccessControlUnauthorizedAccount\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"neededRole\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"type\":\"error\",\"name\":\"ApprovalFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ConnectorInitialized\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"CustodyInitialized\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"DepositFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"EnforcedPause\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ExecutionFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientERC20Amount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientETHAmount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NotWhitelistedInCustody\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZeroAddress\",\"inputs\":[]}]", - Bin: "0x6080604052600c8054600160ff199182168117909255601f80549091169091179055348015602c57600080fd5b5061e0808061003c6000396000f3fe608060405234801561001057600080fd5b50600436106101985760003560e01c8063b0464fdc116100e3578063dcf7d0371161008c578063e63ab1e911610066578063e63ab1e9146102ce578063fa7626d4146102f5578063fe574f841461030257600080fd5b8063dcf7d037146102b6578063de1cb76c146102be578063e20c9f71146102c657600080fd5b8063c1909972116100bd578063c19099721461029e578063ccb0e3f2146102a6578063d509b16c146102ae57600080fd5b8063b0464fdc14610276578063b5508aa91461027e578063ba414fa61461028657600080fd5b8063493465581161014557806385226c811161011f57806385226c811461021757806385f438c11461022c578063916a17c61461026157600080fd5b806349346558146101f257806366d9a9a0146101fa578063828320141461020f57600080fd5b80633cba0107116101765780633cba0107146101da5780633e5e3c23146101e25780633f7286f4146101ea57600080fd5b80630a9254e41461019d5780631ed7831c146101a75780632ade3880146101c5575b600080fd5b6101a561030a565b005b6101af610a70565b6040516101bc9190618259565b60405180910390f35b6101cd610ad2565b6040516101bc91906182f5565b6101a5610c14565b6101af6113ce565b6101af61142e565b6101a561148e565b610202611ad1565b6040516101bc919061845b565b6101a5611c53565b61021f611eac565b6040516101bc91906184f9565b6102537f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b6040519081526020016101bc565b610269611f7c565b6040516101bc9190618570565b610269612077565b61021f612172565b61028e612242565b60405190151581526020016101bc565b6101a5612316565b6101a5612581565b6101a56130ad565b6101a56130e9565b6101a5613790565b6101af613ddd565b6102537f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b601f5461028e9060ff1681565b6101a5613e3d565b602580547fffffffffffffffffffffffff000000000000000000000000000000000000000090811630179091556026805482166112341790556027805490911661567817905560405161035c9061816c565b604080825260049082018190527f7a6574610000000000000000000000000000000000000000000000000000000060608301526080602083018190528201527f5a4554410000000000000000000000000000000000000000000000000000000060a082015260c001604051809103906000f0801580156103e0573d6000803e3d6000fd5b50602480547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039283169081178255604080518082018252600e81527f4761746577617945564d2e736f6c0000000000000000000000000000000000006020820152602754602554925190861694810194909452604484019290925290921660648201526104d1919060840160408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fc0c53b8b0000000000000000000000000000000000000000000000000000000017905261405b565b601f80547fffffffffffffffffffffff0000000000000000000000000000000000000000ff166101006001600160a01b0393841681029190911791829055602080549190920483167fffffffffffffffffffffffff0000000000000000000000000000000000000000909116811790915560275460255460405192939182169291169061055d90618179565b6001600160a01b03938416815291831660208301529091166040820152606001604051809103906000f080158015610599573d6000803e3d6000fd5b50602280547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392831617905560205460245460275460255460405193851694928316939183169216906105f490618186565b6001600160a01b039485168152928416602084015290831660408301529091166060820152608001604051809103906000f080158015610638573d6000803e3d6000fd5b50602380547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039290921691909117905560405161067d90618193565b604051809103906000f080158015610699573d6000803e3d6000fd5b50602180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039283161790556027546040517fc88a5e6d00000000000000000000000000000000000000000000000000000000815291166004820152670de0b6b3a76400006024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c88a5e6d90604401600060405180830381600087803b15801561074557600080fd5b505af1158015610759573d6000803e3d6000fd5b50506025546040517f06447d560000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506306447d569150602401600060405180830381600087803b1580156107cf57600080fd5b505af11580156107e3573d6000803e3d6000fd5b50506020546022546040517fae7a3a6f0000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201529116925063ae7a3a6f9150602401600060405180830381600087803b15801561084957600080fd5b505af115801561085d573d6000803e3d6000fd5b50506020546023546040517f10188aef0000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152911692506310188aef9150602401600060405180830381600087803b1580156108c357600080fd5b505af11580156108d7573d6000803e3d6000fd5b505050507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b03166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561093957600080fd5b505af115801561094d573d6000803e3d6000fd5b5050602480546023546040517f40c10f190000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152624c4b40938101939093521692506340c10f199150604401600060405180830381600087803b1580156109be57600080fd5b505af11580156109d2573d6000803e3d6000fd5b50506027546040517fc88a5e6d0000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152670de0b6b3a76400006024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c88a5e6d9150604401600060405180830381600087803b158015610a5657600080fd5b505af1158015610a6a573d6000803e3d6000fd5b50505050565b60606016805480602002602001604051908101604052809291908181526020018280548015610ac857602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610aaa575b5050505050905090565b6060601e805480602002602001604051908101604052809291908181526020016000905b82821015610c0b57600084815260208082206040805180820182526002870290920180546001600160a01b03168352600181018054835181870281018701909452808452939591948681019491929084015b82821015610bf4578382906000526020600020018054610b6790618607565b80601f0160208091040260200160405190810160405280929190818152602001828054610b9390618607565b8015610be05780601f10610bb557610100808354040283529160200191610be0565b820191906000526020600020905b815481529060010190602001808311610bc357829003601f168201915b505050505081526020019060010190610b48565b505050508152505081526020019060010190610af6565b50505050905090565b60248054602654604051620186a09381018490526001600160a01b03928316604482015291166064820152600090819060840160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f357fc5a2000000000000000000000000000000000000000000000000000000001790526024805460265492516370a0823160e01b81526001600160a01b0393841660048201529394506000939216916370a082319101602060405180830381865afa158015610cef573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d139190618654565b9050610d2081600061407a565b602480546023546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa158015610d70573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d949190618654565b6020546040516001600160a01b0390911660248201526044810187905290915060009060640160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb0000000000000000000000000000000000000000000000000000000017905260245490517ff30c7ba3000000000000000000000000000000000000000000000000000000008152919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f30c7ba391610e77916001600160a01b039190911690600090869060040161866d565b600060405180830381600087803b158015610e9157600080fd5b505af1158015610ea5573d6000803e3d6000fd5b50506021546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b158015610f3757600080fd5b505af1158015610f4b573d6000803e3d6000fd5b505060208054602454602654604080516001600160a01b0394851681529485018d905291831684830152919091166060830152517f2b58128f24a9f59127cc5b5430d70542b22220f2d9adaa86e442b816ab98af609350908190036080019150a16023546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b15801561103a57600080fd5b505af115801561104e573d6000803e3d6000fd5b50506021546040516001600160a01b0390911692507f7772f56296d3a5202974a45c61c9188d844ab4d6eeb18c851e4b8d5384ca6ced91506110939089908890618695565b60405180910390a260275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156110f457600080fd5b505af1158015611108573d6000803e3d6000fd5b50506023546021546040517f5e3e9fef0000000000000000000000000000000000000000000000000000000081526001600160a01b039283169450635e3e9fef935061116092909116908a9089908b906004016186ae565b600060405180830381600087803b15801561117a57600080fd5b505af115801561118e573d6000803e3d6000fd5b5050602480546026546040516370a0823160e01b81526001600160a01b03918216600482015260009550911692506370a0823191015b602060405180830381865afa1580156111e1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112059190618654565b9050611211818861407a565b602480546023546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa158015611261573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112859190618654565b905061129a816112958a87618716565b61407a565b602480546020546021546040517fdd62ed3e0000000000000000000000000000000000000000000000000000000081526001600160a01b0392831660048201529082169381019390935260009291169063dd62ed3e90604401602060405180830381865afa158015611310573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113349190618654565b905061134181600061407a565b602480546020546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa158015611391573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113b59190618654565b90506113c281600061407a565b50505050505050505050565b60606018805480602002602001604051908101604052809291908181526020018280548015610ac8576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311610aaa575050505050905090565b60606017805480602002602001604051908101604052809291908181526020018280548015610ac8576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311610aaa575050505050905090565b604080516004808252602480830184526020830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f6ed70169000000000000000000000000000000000000000000000000000000001790525460265493516370a0823160e01b8152620186a0946000949385936001600160a01b03908116936370a082319361152f93921691016001600160a01b0391909116815260200190565b602060405180830381865afa15801561154c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115709190618654565b905061157d81600061407a565b602480546023546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa1580156115cd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115f19190618654565b6020546040516001600160a01b0390911660248201526044810187905290915060009060640160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb0000000000000000000000000000000000000000000000000000000017905260245490517ff30c7ba3000000000000000000000000000000000000000000000000000000008152919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f30c7ba3916116d4916001600160a01b039190911690600090869060040161866d565b600060405180830381600087803b1580156116ee57600080fd5b505af1158015611702573d6000803e3d6000fd5b50506021546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b15801561179457600080fd5b505af11580156117a8573d6000803e3d6000fd5b5050602080546040516001600160a01b0390911681527fbcaadb46b82a48af60b608f58959ae6b8310d1b0a0d094c2e9ec3208ed39f2a0935001905060405180910390a16023546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b15801561187a57600080fd5b505af115801561188e573d6000803e3d6000fd5b50506021546040516001600160a01b0390911692507f7772f56296d3a5202974a45c61c9188d844ab4d6eeb18c851e4b8d5384ca6ced91506118d39089908890618695565b60405180910390a260275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561193457600080fd5b505af1158015611948573d6000803e3d6000fd5b50506023546021546040517f5e3e9fef0000000000000000000000000000000000000000000000000000000081526001600160a01b039283169450635e3e9fef93506119a092909116908a9089908b906004016186ae565b600060405180830381600087803b1580156119ba57600080fd5b505af11580156119ce573d6000803e3d6000fd5b5050602480546026546040516370a0823160e01b81526001600160a01b03918216600482015260009550911692506370a082319101602060405180830381865afa158015611a20573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a449190618654565b9050611a5181600061407a565b602480546023546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa158015611aa1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ac59190618654565b905061129a818561407a565b6060601b805480602002602001604051908101604052809291908181526020016000905b82821015610c0b5783829060005260206000209060020201604051806040016040529081600082018054611b2890618607565b80601f0160208091040260200160405190810160405280929190818152602001828054611b5490618607565b8015611ba15780601f10611b7657610100808354040283529160200191611ba1565b820191906000526020600020905b815481529060010190602001808311611b8457829003601f168201915b5050505050815260200160018201805480602002602001604051908101604052809291908181526020018280548015611c3b57602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019060040190602082600301049283019260010382029150808411611be85790505b50505050508152505081526020019060010190611af5565b6040517f68656c6c6f0000000000000000000000000000000000000000000000000000006020820152620186a090600090819060250160408051808303601f190181529082905260255463ca669fa760e01b83526001600160a01b031660048301529150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015611cf057600080fd5b505af1158015611d04573d6000803e3d6000fd5b5050602554604080516001600160a01b0390921660248301527f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e460448084019190915281518084039091018152606490920181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb39250611def9190600401618729565b600060405180830381600087803b158015611e0957600080fd5b505af1158015611e1d573d6000803e3d6000fd5b50506023546021546040517f02d5c8990000000000000000000000000000000000000000000000000000000081526001600160a01b0392831694506302d5c8999350611e7592909116908790869088906004016186ae565b600060405180830381600087803b158015611e8f57600080fd5b505af1158015611ea3573d6000803e3d6000fd5b50505050505050565b6060601a805480602002602001604051908101604052809291908181526020016000905b82821015610c0b578382906000526020600020018054611eef90618607565b80601f0160208091040260200160405190810160405280929190818152602001828054611f1b90618607565b8015611f685780601f10611f3d57610100808354040283529160200191611f68565b820191906000526020600020905b815481529060010190602001808311611f4b57829003601f168201915b505050505081526020019060010190611ed0565b6060601d805480602002602001604051908101604052809291908181526020016000905b82821015610c0b5760008481526020908190206040805180820182526002860290920180546001600160a01b0316835260018101805483518187028101870190945280845293949193858301939283018282801561205f57602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168152602001906004019060208260030104928301926001038202915080841161200c5790505b50505050508152505081526020019060010190611fa0565b6060601c805480602002602001604051908101604052809291908181526020016000905b82821015610c0b5760008481526020908190206040805180820182526002860290920180546001600160a01b0316835260018101805483518187028101870190945280845293949193858301939283018282801561215a57602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190600401906020826003010492830192600103820291508084116121075790505b5050505050815250508152602001906001019061209b565b60606019805480602002602001604051908101604052809291908181526020016000905b82821015610c0b5783829060005260206000200180546121b590618607565b80601f01602080910402602001604051908101604052809291908181526020018280546121e190618607565b801561222e5780601f106122035761010080835404028352916020019161222e565b820191906000526020600020905b81548152906001019060200180831161221157829003601f168201915b505050505081526020019060010190612196565b60085460009060ff161561225a575060085460ff1690565b6040517f667f9d70000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d600482018190527f6661696c65640000000000000000000000000000000000000000000000000000602483015260009163667f9d7090604401602060405180830381865afa1580156122eb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061230f9190618654565b1415905090565b60248054602654604051620186a09381018490526001600160a01b03928316604482015291166064820152600090819060840160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f357fc5a200000000000000000000000000000000000000000000000000000000179052602554905163ca669fa760e01b81526001600160a01b039091166004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156123fc57600080fd5b505af1158015612410573d6000803e3d6000fd5b5050602554604080516001600160a01b0390921660248301527f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e460448084019190915281518084039091018152606490920181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb392506124fb9190600401618729565b600060405180830381600087803b15801561251557600080fd5b505af1158015612529573d6000803e3d6000fd5b50506023546021546040517f5e3e9fef0000000000000000000000000000000000000000000000000000000081526001600160a01b039283169450635e3e9fef9350611e7592909116908790869088906004016186ae565b60275460405163ca669fa760e01b81526001600160a01b039091166004820152620186a090600090737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156125e257600080fd5b505af11580156125f6573d6000803e3d6000fd5b5050602754604080516001600160a01b0390921660248301527f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a60448084019190915281518084039091018152606490920181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb392506126e19190600401618729565b600060405180830381600087803b1580156126fb57600080fd5b505af115801561270f573d6000803e3d6000fd5b50505050602360009054906101000a90046001600160a01b03166001600160a01b0316638456cb596040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561276357600080fd5b505af1158015612777573d6000803e3d6000fd5b505060275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b1580156127d457600080fd5b505af11580156127e8573d6000803e3d6000fd5b5050602754604080516001600160a01b0390921660248301527f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a60448084019190915281518084039091018152606490920181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb392506128d39190600401618729565b600060405180830381600087803b1580156128ed57600080fd5b505af1158015612901573d6000803e3d6000fd5b50505050602360009054906101000a90046001600160a01b03166001600160a01b0316633f4ba83a6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561295557600080fd5b505af1158015612969573d6000803e3d6000fd5b505060255460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b1580156129c657600080fd5b505af11580156129da573d6000803e3d6000fd5b50505050602360009054906101000a90046001600160a01b03166001600160a01b0316638456cb596040518163ffffffff1660e01b8152600401600060405180830381600087803b158015612a2e57600080fd5b505af1158015612a42573d6000803e3d6000fd5b50506040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fd93c0665000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b158015612acb57600080fd5b505af1158015612adf573d6000803e3d6000fd5b505060275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b158015612b3c57600080fd5b505af1158015612b50573d6000803e3d6000fd5b50506023546026546040517f106e62900000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260248101879052604481018690529116925063106e62909150606401600060405180830381600087803b158015612bc457600080fd5b505af1158015612bd8573d6000803e3d6000fd5b505060255460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b158015612c3557600080fd5b505af1158015612c49573d6000803e3d6000fd5b50505050602360009054906101000a90046001600160a01b03166001600160a01b0316633f4ba83a6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015612c9d57600080fd5b505af1158015612cb1573d6000803e3d6000fd5b5050602480546026546040516370a0823160e01b81526001600160a01b03918216600482015260009550911692506370a0823191015b602060405180830381865afa158015612d04573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d289190618654565b9050612d3581600061407a565b6026546040516001600160a01b0390911660248201526044810184905260009060640160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb0000000000000000000000000000000000000000000000000000000017905260245490517ff30c7ba3000000000000000000000000000000000000000000000000000000008152919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f30c7ba391612e15916001600160a01b039190911690600090869060040161866d565b600060405180830381600087803b158015612e2f57600080fd5b505af1158015612e43573d6000803e3d6000fd5b50506023546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b158015612ed557600080fd5b505af1158015612ee9573d6000803e3d6000fd5b50506026546040518781526001600160a01b0390911692507f884edad9ce6fa2440d8a54cc123490eb96d2768479d49ff9c7366125a9424364915060200160405180910390a260275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015612f8857600080fd5b505af1158015612f9c573d6000803e3d6000fd5b50506023546026546040517f106e62900000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260248101899052604481018890529116925063106e62909150606401600060405180830381600087803b15801561301057600080fd5b505af1158015613024573d6000803e3d6000fd5b5050602480546026546040516370a0823160e01b81526001600160a01b03918216600482015260009550911692506370a082319101602060405180830381865afa158015613076573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061309a9190618654565b90506130a6818661407a565b5050505050565b602480546026546040516370a0823160e01b81526001600160a01b039182166004820152620186a093600093849316916370a082319101612ce7565b60248054602654604051620186a09381018490526001600160a01b03928316604482015291166064820152600090819060840160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fc5131691000000000000000000000000000000000000000000000000000000001790526024805460265492516370a0823160e01b81526001600160a01b0393841660048201529394506000939216916370a082319101602060405180830381865afa1580156131c4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131e89190618654565b90506131f581600061407a565b602480546023546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa158015613245573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132699190618654565b6020546040516001600160a01b0390911660248201526044810187905290915060009060640160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb0000000000000000000000000000000000000000000000000000000017905260245490517ff30c7ba3000000000000000000000000000000000000000000000000000000008152919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f30c7ba39161334c916001600160a01b039190911690600090869060040161866d565b600060405180830381600087803b15801561336657600080fd5b505af115801561337a573d6000803e3d6000fd5b50506021546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b15801561340c57600080fd5b505af1158015613420573d6000803e3d6000fd5b50506020547f2b58128f24a9f59127cc5b5430d70542b22220f2d9adaa86e442b816ab98af6092506001600160a01b0316905061345e60028961873c565b602454602654604080516001600160a01b03958616815260208101949094529184168383015292909216606082015290519081900360800190a16023546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b15801561352657600080fd5b505af115801561353a573d6000803e3d6000fd5b50506021546040516001600160a01b0390911692507f7772f56296d3a5202974a45c61c9188d844ab4d6eeb18c851e4b8d5384ca6ced915061357f9089908890618695565b60405180910390a260275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156135e057600080fd5b505af11580156135f4573d6000803e3d6000fd5b50506023546021546040517f5e3e9fef0000000000000000000000000000000000000000000000000000000081526001600160a01b039283169450635e3e9fef935061364c92909116908a9089908b906004016186ae565b600060405180830381600087803b15801561366657600080fd5b505af115801561367a573d6000803e3d6000fd5b5050602480546026546040516370a0823160e01b81526001600160a01b03918216600482015260009550911692506370a082319101602060405180830381865afa1580156136cc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136f09190618654565b90506137018161129560028a61873c565b602480546023546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa158015613751573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137759190618654565b905061129a8161378660028b61873c565b6112959087618716565b6040517f68656c6c6f0000000000000000000000000000000000000000000000000000006020820152620186a090600090819060250160408051808303601f1901815290829052602480546021546370a0823160e01b85526001600160a01b0390811660048601529294506000939216916370a082319101602060405180830381865afa158015613825573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138499190618654565b905061385681600061407a565b602480546023546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa1580156138a6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138ca9190618654565b6020546040516001600160a01b0390911660248201526044810187905290915060009060640160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb0000000000000000000000000000000000000000000000000000000017905260245490517ff30c7ba3000000000000000000000000000000000000000000000000000000008152919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f30c7ba3916139ad916001600160a01b039190911690600090869060040161866d565b600060405180830381600087803b1580156139c757600080fd5b505af11580156139db573d6000803e3d6000fd5b50506021546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b158015613a6d57600080fd5b505af1158015613a81573d6000803e3d6000fd5b50506020546040517f0d3f65f00e631663aa85c96330b5c7a83bb29af3630c0063776f985edc3037aa9350613ac492506001600160a01b03909116908790618777565b60405180910390a16020546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b158015613b5a57600080fd5b505af1158015613b6e573d6000803e3d6000fd5b50506021546024546040516001600160a01b039283169450911691507f723fc7be2448075379e4fdf1e6bf5fead954d2668d2da05dcb44ccfec4beeda790613bb9908a908990618695565b60405180910390a36023546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b158015613c4f57600080fd5b505af1158015613c63573d6000803e3d6000fd5b50506021546040516001600160a01b0390911692507fba96f26bdda53eb8c8ba39045dfb4ff39753fbc7a6edcf250a88e75e78d102fe9150613ca89089908890618695565b60405180910390a260275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015613d0957600080fd5b505af1158015613d1d573d6000803e3d6000fd5b50506023546021546040517f02d5c8990000000000000000000000000000000000000000000000000000000081526001600160a01b0392831694506302d5c8999350613d7592909116908a9089908b906004016186ae565b600060405180830381600087803b158015613d8f57600080fd5b505af1158015613da3573d6000803e3d6000fd5b5050602480546021546040516370a0823160e01b81526001600160a01b03918216600482015260009550911692506370a0823191016111c4565b60606015805480602002602001604051908101604052809291908181526020018280548015610ac8576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311610aaa575050505050905090565b60255460405163ca669fa760e01b81526001600160a01b039091166004820152620186a090600090737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015613e9e57600080fd5b505af1158015613eb2573d6000803e3d6000fd5b5050602554604080516001600160a01b0390921660248301527f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e460448084019190915281518084039091018152606490920181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb39250613f9d9190600401618729565b600060405180830381600087803b158015613fb757600080fd5b505af1158015613fcb573d6000803e3d6000fd5b50506023546026546040517f106e62900000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260248101879052604481018690529116925063106e62909150606401600060405180830381600087803b15801561403f57600080fd5b505af1158015614053573d6000803e3d6000fd5b505050505050565b60006140656181a0565b6140708484836140f9565b9150505b92915050565b6040517f98296c540000000000000000000000000000000000000000000000000000000081526004810183905260248101829052737109709ecfa91a80626ff3989d68f67f5b1dd12d906398296c549060440160006040518083038186803b1580156140e557600080fd5b505afa158015614053573d6000803e3d6000fd5b6000806141068584614174565b90506141696040518060400160405280601d81526020017f4552433139363750726f78792e736f6c3a4552433139363750726f78790000008152508286604051602001614154929190618777565b60405160208183030381529060405285614180565b9150505b9392505050565b600061416d83836141ae565b60c081015151600090156141a45761419d84848460c001516141c9565b905061416d565b61419d848461436f565b60006141ba838361445a565b61416d83836020015184614180565b6000806141d461446a565b905060006141e2868361453d565b905060006141f982606001518360200151856149e3565b9050600061420983838989614bf5565b9050600061421682615a72565b602081015181519192509060030b1561428957898260400151604051602001614240929190618799565b60408051601f19818403018152908290527f08c379a000000000000000000000000000000000000000000000000000000000825261428091600401618729565b60405180910390fd5b60006142cc6040518060400160405280601581526020017f4465706c6f79656420746f20616464726573733a200000000000000000000000815250836001615c41565b6040517fc6ce059d000000000000000000000000000000000000000000000000000000008152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c6ce059d9061431f908490600401618729565b602060405180830381865afa15801561433c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614360919061881a565b9b9a5050505050505050505050565b6040517f8d1cc9250000000000000000000000000000000000000000000000000000000081526000908190737109709ecfa91a80626ff3989d68f67f5b1dd12d90638d1cc925906143c4908790600401618729565b600060405180830381865afa1580156143e1573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052614409919081019061892b565b905060006144378285604051602001614423929190618960565b604051602081830303815290604052615e41565b90506001600160a01b03811661407057848460405160200161424092919061898f565b61446682826000615e54565b5050565b604080518082018252600381527f6f75740000000000000000000000000000000000000000000000000000000000602082015290517fd145736c000000000000000000000000000000000000000000000000000000008152606091737109709ecfa91a80626ff3989d68f67f5b1dd12d91829063d145736c906144f1908490600401618a3a565b600060405180830381865afa15801561450e573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526145369190810190618a81565b9250505090565b61456f6040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b6000737109709ecfa91a80626ff3989d68f67f5b1dd12d90506145ba6040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b6145c385615f57565b602082015260006145d38661633c565b90506000836001600160a01b031663d930a0e66040518163ffffffff1660e01b8152600401600060405180830381865afa158015614615573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261463d9190810190618a81565b868385602001516040516020016146579493929190618aca565b60408051601f19818403018152908290527f60f9bb1100000000000000000000000000000000000000000000000000000000825291506000906001600160a01b038616906360f9bb11906146af908590600401618729565b600060405180830381865afa1580156146cc573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526146f49190810190618a81565b6040517fdb4235f60000000000000000000000000000000000000000000000000000000081529091506001600160a01b0386169063db4235f69061473c908490600401618bce565b602060405180830381865afa158015614759573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061477d9190618c20565b61479257816040516020016142409190618c42565b6040517f49c4fac80000000000000000000000000000000000000000000000000000000081526001600160a01b038616906349c4fac8906147d7908490600401618cd4565b600060405180830381865afa1580156147f4573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261481c9190810190618a81565b84526040517fdb4235f60000000000000000000000000000000000000000000000000000000081526001600160a01b0386169063db4235f690614863908490600401618d26565b602060405180830381865afa158015614880573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906148a49190618c20565b15614939576040517f49c4fac80000000000000000000000000000000000000000000000000000000081526001600160a01b038616906349c4fac8906148ee908490600401618d26565b600060405180830381865afa15801561490b573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526149339190810190618a81565b60408501525b846001600160a01b03166349c4fac882866000015160405160200161495e9190618d78565b6040516020818303038152906040526040518363ffffffff1660e01b815260040161498a929190618de4565b600060405180830381865afa1580156149a7573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526149cf9190810190618a81565b606085015250608083015250949350505050565b60408051600480825260a0820190925260609160009190816020015b60608152602001906001900390816149ff5790505090506040518060400160405280600481526020017f677265700000000000000000000000000000000000000000000000000000000081525081600081518110614a5f57614a5f618e09565b60200260200101819052506040518060400160405280600381526020017f2d726c000000000000000000000000000000000000000000000000000000000081525081600181518110614ab357614ab3618e09565b602002602001018190525084604051602001614acf9190618e38565b60405160208183030381529060405281600281518110614af157614af1618e09565b602002602001018190525082604051602001614b0d9190618ea4565b60405160208183030381529060405281600381518110614b2f57614b2f618e09565b60200260200101819052506000614b4582615a72565b602080820151604080518082018252600581527f2e6a736f6e0000000000000000000000000000000000000000000000000000008185019081528251808401845260008082529086015282518084019093529051825292810192909252919250614bd690604080518082018252600080825260209182015281518083019092528451825280850190820152906165bf565b614beb57856040516020016142409190618ee5565b9695505050505050565b60a0810151604080518082018252600080825260209182015281518083019092528251808352928101910152606090737109709ecfa91a80626ff3989d68f67f5b1dd12d9015614c45565b511590565b614db957826020015115614d01576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605860248201527f54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f742060448201527f62652075736564207768656e207468652060736b6970566572696679536f757260648201527f6365436f646560206f7074696f6e206973206074727565600000000000000000608482015260a401614280565b8260c0015115614db9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605360248201527f54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f742060448201527f62652075736564207768656e207468652060736b69704c6963656e736554797060648201527f6560206f7074696f6e2069732060747275656000000000000000000000000000608482015260a401614280565b6040805160ff8082526120008201909252600091816020015b6060815260200190600190039081614dd257905050905060006040518060400160405280600381526020017f6e70780000000000000000000000000000000000000000000000000000000000815250828280614e2d90618f76565b935060ff1681518110614e4257614e42618e09565b60200260200101819052506040518060400160405280600d81526020017f302e302e312d616c7068612e3700000000000000000000000000000000000000815250604051602001614e939190618f95565b604051602081830303815290604052828280614eae90618f76565b935060ff1681518110614ec357614ec3618e09565b60200260200101819052506040518060400160405280600681526020017f6465706c6f790000000000000000000000000000000000000000000000000000815250828280614f1090618f76565b935060ff1681518110614f2557614f25618e09565b60200260200101819052506040518060400160405280600e81526020017f2d2d636f6e74726163744e616d65000000000000000000000000000000000000815250828280614f7290618f76565b935060ff1681518110614f8757614f87618e09565b60200260200101819052508760200151828280614fa390618f76565b935060ff1681518110614fb857614fb8618e09565b60200260200101819052506040518060400160405280600e81526020017f2d2d636f6e74726163745061746800000000000000000000000000000000000081525082828061500590618f76565b935060ff168151811061501a5761501a618e09565b60209081029190910101528751828261503281618f76565b935060ff168151811061504757615047618e09565b60200260200101819052506040518060400160405280600981526020017f2d2d636861696e4964000000000000000000000000000000000000000000000081525082828061509490618f76565b935060ff16815181106150a9576150a9618e09565b60200260200101819052506150bd46616620565b82826150c881618f76565b935060ff16815181106150dd576150dd618e09565b60200260200101819052506040518060400160405280600f81526020017f2d2d6275696c64496e666f46696c65000000000000000000000000000000000081525082828061512a90618f76565b935060ff168151811061513f5761513f618e09565b60200260200101819052508682828061515790618f76565b935060ff168151811061516c5761516c618e09565b60209081029190910101528551156152935760408051808201909152601581527f2d2d636f6e7374727563746f7242797465636f64650000000000000000000000602082015282826151bd81618f76565b935060ff16815181106151d2576151d2618e09565b60209081029190910101526040517f71aad10d0000000000000000000000000000000000000000000000000000000081526001600160a01b038416906371aad10d90615222908990600401618729565b600060405180830381865afa15801561523f573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526152679190810190618a81565b828261527281618f76565b935060ff168151811061528757615287618e09565b60200260200101819052505b8460200151156153635760408051808201909152601281527f2d2d766572696679536f75726365436f64650000000000000000000000000000602082015282826152dc81618f76565b935060ff16815181106152f1576152f1618e09565b60200260200101819052506040518060400160405280600581526020017f66616c736500000000000000000000000000000000000000000000000000000081525082828061533e90618f76565b935060ff168151811061535357615353618e09565b602002602001018190525061552a565b61539b614c408660a0015160408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b61542e5760408051808201909152600d81527f2d2d6c6963656e73655479706500000000000000000000000000000000000000602082015282826153de81618f76565b935060ff16815181106153f3576153f3618e09565b60200260200101819052508460a001516040516020016154139190618e38565b60405160208183030381529060405282828061533e90618f76565b8460c0015115801561547157506040808901518151808301835260008082526020918201528251808401909352815183529081019082015261546f90511590565b155b1561552a5760408051808201909152600d81527f2d2d6c6963656e73655479706500000000000000000000000000000000000000602082015282826154b581618f76565b935060ff16815181106154ca576154ca618e09565b60200260200101819052506154de886166c0565b6040516020016154ee9190618e38565b60405160208183030381529060405282828061550990618f76565b935060ff168151811061551e5761551e618e09565b60200260200101819052505b6040808601518151808301835260008082526020918201528251808401909352815183529081019082015261555e90511590565b6155f35760408051808201909152600b81527f2d2d72656c617965724964000000000000000000000000000000000000000000602082015282826155a181618f76565b935060ff16815181106155b6576155b6618e09565b602002602001018190525084604001518282806155d290618f76565b935060ff16815181106155e7576155e7618e09565b60200260200101819052505b6060850151156157145760408051808201909152600681527f2d2d73616c7400000000000000000000000000000000000000000000000000006020820152828261563c81618f76565b935060ff168151811061565157615651618e09565b602090810291909101015260608501516040517fb11a19e800000000000000000000000000000000000000000000000000000000815260048101919091526001600160a01b0384169063b11a19e890602401600060405180830381865afa1580156156c0573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526156e89190810190618a81565b82826156f381618f76565b935060ff168151811061570857615708618e09565b60200260200101819052505b60e085015151156157bb5760408051808201909152600a81527f2d2d6761734c696d6974000000000000000000000000000000000000000000006020820152828261575e81618f76565b935060ff168151811061577357615773618e09565b602002602001018190525061578f8560e0015160000151616620565b828261579a81618f76565b935060ff16815181106157af576157af618e09565b60200260200101819052505b60e085015160200151156158655760408051808201909152600a81527f2d2d6761735072696365000000000000000000000000000000000000000000006020820152828261580881618f76565b935060ff168151811061581d5761581d618e09565b60200260200101819052506158398560e0015160200151616620565b828261584481618f76565b935060ff168151811061585957615859618e09565b60200260200101819052505b60e0850151604001511561590f5760408051808201909152600e81527f2d2d6d6178466565506572476173000000000000000000000000000000000000602082015282826158b281618f76565b935060ff16815181106158c7576158c7618e09565b60200260200101819052506158e38560e0015160400151616620565b82826158ee81618f76565b935060ff168151811061590357615903618e09565b60200260200101819052505b60e085015160600151156159b95760408051808201909152601681527f2d2d6d61785072696f72697479466565506572476173000000000000000000006020820152828261595c81618f76565b935060ff168151811061597157615971618e09565b602002602001018190525061598d8560e0015160600151616620565b828261599881618f76565b935060ff16815181106159ad576159ad618e09565b60200260200101819052505b60008160ff1667ffffffffffffffff8111156159d7576159d7618843565b604051908082528060200260200182016040528015615a0a57816020015b60608152602001906001900390816159f55790505b50905060005b8260ff168160ff161015615a6357838160ff1681518110615a3357615a33618e09565b6020026020010151828260ff1681518110615a5057615a50618e09565b6020908102919091010152600101615a10565b5093505050505b949350505050565b615a996040518060600160405280600060030b815260200160608152602001606081525090565b60408051808201825260048082527f6261736800000000000000000000000000000000000000000000000000000000602083015291517fd145736c000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d92600091849163d145736c91615b1f91869101619000565b600060405180830381865afa158015615b3c573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052615b649190810190618a81565b90506000615b7286836171af565b90506000846001600160a01b031663f45c1ce7836040518263ffffffff1660e01b8152600401615ba291906184f9565b6000604051808303816000875af1158015615bc1573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052615be99190810190619047565b805190915060030b15801590615c025750602081015151155b8015615c115750604081015151155b15614beb5781600081518110615c2957615c29618e09565b602002602001015160405160200161424091906190fd565b60606000615c768560408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600080825260209182015281518083019092528651825280870190820152909150615cad9082905b90617304565b15615e0a576000615d2a82615d2484615d1e615cf08a60408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6040805180820182526000808252602091820152815180830190925282518252918201519181019190915290565b9061732b565b9061738d565b604080518082018252600181527f0a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152909150615d8e908290617304565b15615df857604080518082018252600181527f0a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152615df5905b8290617412565b90505b615e0181617438565b9250505061416d565b8215615e235784846040516020016142409291906192e9565b505060408051602081019091526000815261416d565b509392505050565b6000808251602084016000f09392505050565b8160a0015115615e6357505050565b6000615e708484846174a1565b90506000615e7d82615a72565b602081015181519192509060030b158015615f195750604080518082018252600781527f535543434553530000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152615f1990604080518082018252600080825260209182015281518083019092528451825280850190820152615ca7565b15615f2657505050505050565b60408201515115615f465781604001516040516020016142409190619390565b8060405160200161424091906193ee565b60606000615f8c8360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600481527f2e736f6c0000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152909150615ff1905b82906165bf565b1561606057604080518082018252600481527f2e736f6c000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261416d9061605b908390617a3c565b617438565b604080518082018252600181527f3a00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526160c2905b8290617ac6565b60010361618f57604080518082018252600181527f3a000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261612890615dee565b50604080518082018252600181527f3a000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261416d9061605b905b8390617412565b604080518082018252600581527f2e6a736f6e000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526161ee90615fea565b1561632557604080518082018252600181527f2f00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820181905284518086019095529251845283015290616256908390617b60565b9050600081600183516162699190618716565b8151811061627957616279618e09565b6020026020010151905061631c61605b6162ef6040518060400160405280600581526020017f2e6a736f6e00000000000000000000000000000000000000000000000000000081525060408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b60408051808201825260008082526020918201528151808301909252855182528086019082015290617a3c565b95945050505050565b826040516020016142409190619459565b50919050565b606060006163718360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600481527f2e736f6c00000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201529091506163d390615fea565b156163e15761416d81617438565b604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616440906160bb565b6001036164aa57604080518082018252600181527f3a000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261416d9061605b90616188565b604080518082018252600581527f2e6a736f6e0000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261650990615fea565b1561632557604080518082018252600181527f2f00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820181905284518086019095529251845283015290616571908390617b60565b90506001815111156165ad57806002825161658c9190618716565b8151811061659c5761659c618e09565b602002602001015192505050919050565b50826040516020016142409190619459565b8051825160009111156165d457506000614074565b815183516020850151600092916165ea91619537565b6165f49190618716565b90508260200151810361660b576001915050614074565b82516020840151819020912014905092915050565b6060600061662d83617c05565b600101905060008167ffffffffffffffff81111561664d5761664d618843565b6040519080825280601f01601f191660200182016040528015616677576020820181803683370190505b5090508181016020015b600019017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a850494508461668157509392505050565b604081810151815180830183526000808252602091820181905283518085018552835181529282018383015283518085018552600a81527f554e4c4943454e534544000000000000000000000000000000000000000000008184019081528551808701875283815284019290925284518086019095525184529083015260609161674c905b8290617ce7565b1561678c57505060408051808201909152600481527f4e6f6e65000000000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600981527f556e6c6963656e73650000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526167eb90616745565b1561682b57505060408051808201909152600981527f556e6c6963656e736500000000000000000000000000000000000000000000006020820152919050565b604080518082018252600381527f4d495400000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261688a90616745565b156168ca57505060408051808201909152600381527f4d495400000000000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f47504c2d322e302d6f6e6c7900000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261692990616745565b8061698e5750604080518082018252601081527f47504c2d322e302d6f722d6c61746572000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261698e90616745565b156169ce57505060408051808201909152600981527f474e552047504c763200000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f47504c2d332e302d6f6e6c79000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616a2d90616745565b80616a925750604080518082018252601081527f47504c2d332e302d6f722d6c617465720000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616a9290616745565b15616ad257505060408051808201909152600981527f474e552047504c763300000000000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4c47504c2d322e312d6f6e6c790000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616b3190616745565b80616b965750604080518082018252601181527f4c47504c2d322e312d6f722d6c6174657200000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616b9690616745565b15616bd657505060408051808201909152600c81527f474e55204c47504c76322e3100000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4c47504c2d332e302d6f6e6c790000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616c3590616745565b80616c9a5750604080518082018252601181527f4c47504c2d332e302d6f722d6c6174657200000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616c9a90616745565b15616cda57505060408051808201909152600a81527f474e55204c47504c7633000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f4253442d322d436c61757365000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616d3990616745565b15616d7957505060408051808201909152600c81527f4253442d322d436c6175736500000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f4253442d332d436c61757365000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616dd890616745565b15616e1857505060408051808201909152600c81527f4253442d332d436c6175736500000000000000000000000000000000000000006020820152919050565b604080518082018252600781527f4d504c2d322e300000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616e7790616745565b15616eb757505060408051808201909152600781527f4d504c2d322e30000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600781527f4f534c2d332e300000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616f1690616745565b15616f5657505060408051808201909152600781527f4f534c2d332e30000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600a81527f4170616368652d322e300000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616fb590616745565b15616ff557505060408051808201909152600a81527f4170616368652d322e30000000000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4147504c2d332e302d6f6e6c79000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261705490616745565b806170b95750604080518082018252601181527f4147504c2d332e302d6f722d6c61746572000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526170b990616745565b156170f957505060408051808201909152600a81527f474e55204147504c7633000000000000000000000000000000000000000000006020820152919050565b604080518082018252600881527f4255534c2d312e310000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261715890616745565b1561719857505060408051808201909152600781527f42534c20312e31000000000000000000000000000000000000000000000000006020820152919050565b60408084015184519151614240929060200161954a565b60608060005b845181101561723a57818582815181106171d1576171d1618e09565b60200260200101516040516020016171ea929190618960565b6040516020818303038152906040529150600185516172099190618716565b8114617232578160405160200161722091906196b3565b60405160208183030381529060405291505b6001016171b5565b5060408051600380825260808201909252600091816020015b6060815260200190600190039081617253579050509050838160008151811061727e5761727e618e09565b60200260200101819052506040518060400160405280600281526020017f2d63000000000000000000000000000000000000000000000000000000000000815250816001815181106172d2576172d2618e09565b602002602001018190525081816002815181106172f1576172f1618e09565b6020908102919091010152949350505050565b60208083015183518351928401516000936173229291849190617cfb565b14159392505050565b6040805180820190915260008082526020820152600061735d8460000151856020015185600001518660200151617e0c565b905083602001518161736f9190618716565b8451859061737e908390618716565b90525060208401525090919050565b60408051808201909152600080825260208201528151835110156173b2575081614074565b60208083015190840151600191146173d95750815160208481015190840151829020919020145b801561740a578251845185906173f0908390618716565b9052508251602085018051617406908390619537565b9052505b509192915050565b6040805180820190915260008082526020820152617431838383617f2c565b5092915050565b60606000826000015167ffffffffffffffff81111561745957617459618843565b6040519080825280601f01601f191660200182016040528015617483576020820181803683370190505b50905060006020820190506174318185602001518660000151617fd7565b606060006174ad61446a565b6040805160ff808252612000820190925291925060009190816020015b60608152602001906001900390816174ca57905050905060006040518060400160405280600381526020017f6e7078000000000000000000000000000000000000000000000000000000000081525082828061752590618f76565b935060ff168151811061753a5761753a618e09565b60200260200101819052506040518060400160405280600781526020017f5e312e33322e330000000000000000000000000000000000000000000000000081525060405160200161758b91906196f4565b6040516020818303038152906040528282806175a690618f76565b935060ff16815181106175bb576175bb618e09565b60200260200101819052506040518060400160405280600881526020017f76616c696461746500000000000000000000000000000000000000000000000081525082828061760890618f76565b935060ff168151811061761d5761761d618e09565b6020026020010181905250826040516020016176399190618ea4565b60405160208183030381529060405282828061765490618f76565b935060ff168151811061766957617669618e09565b60200260200101819052506040518060400160405280600a81526020017f2d2d636f6e7472616374000000000000000000000000000000000000000000008152508282806176b690618f76565b935060ff16815181106176cb576176cb618e09565b60200260200101819052506176e08784618051565b82826176eb81618f76565b935060ff168151811061770057617700618e09565b6020908102919091010152855151156177ac5760408051808201909152600b81527f2d2d7265666572656e63650000000000000000000000000000000000000000006020820152828261775281618f76565b935060ff168151811061776757617767618e09565b6020026020010181905250617780866000015184618051565b828261778b81618f76565b935060ff16815181106177a0576177a0618e09565b60200260200101819052505b85608001511561781a5760408051808201909152601881527f2d2d756e73616665536b697053746f72616765436865636b0000000000000000602082015282826177f581618f76565b935060ff168151811061780a5761780a618e09565b6020026020010181905250617880565b84156178805760408051808201909152601281527f2d2d726571756972655265666572656e636500000000000000000000000000006020820152828261785f81618f76565b935060ff168151811061787457617874618e09565b60200260200101819052505b6040860151511561791c5760408051808201909152600d81527f2d2d756e73616665416c6c6f7700000000000000000000000000000000000000602082015282826178ca81618f76565b935060ff16815181106178df576178df618e09565b602002602001018190525085604001518282806178fb90618f76565b935060ff168151811061791057617910618e09565b60200260200101819052505b8560600151156179865760408051808201909152601481527f2d2d756e73616665416c6c6f7752656e616d65730000000000000000000000006020820152828261796581618f76565b935060ff168151811061797a5761797a618e09565b60200260200101819052505b60008160ff1667ffffffffffffffff8111156179a4576179a4618843565b6040519080825280602002602001820160405280156179d757816020015b60608152602001906001900390816179c25790505b50905060005b8260ff168160ff161015617a3057838160ff1681518110617a0057617a00618e09565b6020026020010151828260ff1681518110617a1d57617a1d618e09565b60209081029190910101526001016179dd565b50979650505050505050565b6040805180820190915260008082526020820152815183511015617a61575081614074565b81518351602085015160009291617a7791619537565b617a819190618716565b60208401519091506001908214617aa2575082516020840151819020908220145b8015617abd57835185518690617ab9908390618716565b9052505b50929392505050565b6000808260000151617aea8560000151866020015186600001518760200151617e0c565b617af49190619537565b90505b83516020850151617b089190619537565b81116174315781617b1881619739565b9250508260000151617b4f856020015183617b339190618716565b8651617b3f9190618716565b8386600001518760200151617e0c565b617b599190619537565b9050617af7565b60606000617b6e8484617ac6565b617b79906001619537565b67ffffffffffffffff811115617b9157617b91618843565b604051908082528060200260200182016040528015617bc457816020015b6060815260200190600190039081617baf5790505b50905060005b8151811015615e3957617be061605b8686617412565b828281518110617bf257617bf2618e09565b6020908102919091010152600101617bca565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310617c4e577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310617c7a576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc100008310617c9857662386f26fc10000830492506010015b6305f5e1008310617cb0576305f5e100830492506008015b6127108310617cc457612710830492506004015b60648310617cd6576064830492506002015b600a83106140745760010192915050565b6000617cf38383618091565b159392505050565b600080858411617e025760208411617dae5760008415617d46576001617d22866020618716565b617d2d906008619753565b617d38906002619851565b617d429190618716565b1990505b8351811685617d558989619537565b617d5f9190618716565b805190935082165b818114617d9957878411617d815787945050505050615a6a565b83617d8b8161985d565b945050828451169050617d67565b617da38785619537565b945050505050615a6a565b838320617dbb8588618716565b617dc59087619537565b91505b858210617e0057848220808203617ded57617de38684619537565b9350505050615a6a565b617df8600184618716565b925050617dc8565b505b5092949350505050565b60008381868511617f175760208511617ec65760008515617e58576001617e34876020618716565b617e3f906008619753565b617e4a906002619851565b617e549190618716565b1990505b84518116600087617e698b8b619537565b617e739190618716565b855190915083165b828114617eb857818610617ea057617e938b8b619537565b9650505050505050615a6a565b85617eaa81619739565b965050838651169050617e7b565b859650505050505050615a6a565b508383206000905b617ed88689618716565b8211617f1557858320808203617ef45783945050505050615a6a565b617eff600185619537565b9350508180617f0d90619739565b925050617ece565b505b617f218787619537565b979650505050505050565b60408051808201909152600080825260208201526000617f5e8560000151866020015186600001518760200151617e0c565b602080870180519186019190915251909150617f7a9082618716565b835284516020860151617f8d9190619537565b8103617f9c5760008552617fce565b83518351617faa9190619537565b85518690617fb9908390618716565b9052508351617fc89082619537565b60208601525b50909392505050565b6020811061800f5781518352617fee602084619537565b9250617ffb602083619537565b9150618008602082618716565b9050617fd7565b600019811561803e576001618025836020618716565b61803190610100619851565b61803b9190618716565b90505b9151835183169219169190911790915250565b6060600061805f848461453d565b805160208083015160405193945061807993909101619874565b60405160208183030381529060405291505092915050565b81518151600091908111156180a4575081515b6020808501519084015160005b8381101561815d578251825180821461812d57600019602087101561810c576001846180de896020618716565b6180e89190619537565b6180f3906008619753565b6180fe906002619851565b6181089190618716565b1990505b818116838216818103911461812a5797506140749650505050505050565b50505b618138602086619537565b9450618145602085619537565b935050506020816181569190619537565b90506180b1565b5084518651614beb91906198cc565b610c9f806198ed83390190565b6116fe8061a58c83390190565b6116638061bc8a83390190565b610d5e8061d2ed83390190565b6040518060e001604052806060815260200160608152602001606081526020016000151581526020016000151581526020016000151581526020016181e36181e8565b905290565b604051806101000160405280600015158152602001600015158152602001606081526020016000801916815260200160608152602001606081526020016000151581526020016181e36040518060800160405280600081526020016000815260200160008152602001600081525090565b602080825282518282018190526000918401906040840190835b8181101561829a5783516001600160a01b0316835260209384019390920191600101618273565b509095945050505050565b60005b838110156182c05781810151838201526020016182a8565b50506000910152565b600081518084526182e18160208601602086016182a5565b601f01601f19169290920160200192915050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b828110156183f1577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452815180516001600160a01b03168652602090810151604082880181905281519088018190529101906060600582901b88018101919088019060005b818110156183d7577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa08a85030183526183c18486516182c9565b6020958601959094509290920191600101618387565b50919750505060209485019492909201915060010161831d565b50929695505050505050565b600081518084526020840193506020830160005b828110156184515781517fffffffff0000000000000000000000000000000000000000000000000000000016865260209586019590910190600101618411565b5093949350505050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b828110156183f1577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc087860301845281518051604087526184c760408801826182c9565b90506020820151915086810360208801526184e281836183fd565b965050506020938401939190910190600101618483565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b828110156183f1577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc087860301845261855b8583516182c9565b94506020938401939190910190600101618521565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b828110156183f1577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc087860301845281516001600160a01b03815116865260208101519050604060208701526185f160408701826183fd565b9550506020938401939190910190600101618598565b600181811c9082168061861b57607f821691505b602082108103616336577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006020828403121561866657600080fd5b5051919050565b6001600160a01b038416815282602082015260606040820152600061631c60608301846182c9565b828152604060208201526000615a6a60408301846182c9565b6001600160a01b03851681528360208201526080604082015260006186d660808301856182c9565b905082606083015295945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b81810381811115614074576140746186e7565b60208152600061416d60208301846182c9565b600082618772577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b6001600160a01b0383168152604060208201526000615a6a60408301846182c9565b7f4661696c656420746f206465706c6f7920636f6e7472616374200000000000008152600083516187d181601a8501602088016182a5565b7f3a20000000000000000000000000000000000000000000000000000000000000601a91840191820152835161880e81601c8401602088016182a5565b01601c01949350505050565b60006020828403121561882c57600080fd5b81516001600160a01b038116811461416d57600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040516060810167ffffffffffffffff8111828210171561889557618895618843565b60405290565b60008067ffffffffffffffff8411156188b6576188b6618843565b50604051601f19601f85018116603f0116810181811067ffffffffffffffff821117156188e5576188e5618843565b6040528381529050808284018510156188fd57600080fd5b615e398460208301856182a5565b600082601f83011261891c57600080fd5b61416d8383516020850161889b565b60006020828403121561893d57600080fd5b815167ffffffffffffffff81111561895457600080fd5b6140708482850161890b565b600083516189728184602088016182a5565b8351908301906189868183602088016182a5565b01949350505050565b7f4661696c656420746f206465706c6f7920636f6e7472616374200000000000008152600083516189c781601a8501602088016182a5565b7f207573696e6720636f6e7374727563746f722064617461202200000000000000601a918401918201528351618a048160338401602088016182a5565b7f220000000000000000000000000000000000000000000000000000000000000060339290910191820152603401949350505050565b60408152600b60408201527f464f554e4452595f4f5554000000000000000000000000000000000000000000606082015260806020820152600061416d60808301846182c9565b600060208284031215618a9357600080fd5b815167ffffffffffffffff811115618aaa57600080fd5b8201601f81018413618abb57600080fd5b6140708482516020840161889b565b60008551618adc818460208a016182a5565b7f2f000000000000000000000000000000000000000000000000000000000000009083019081528551618b16816001840160208a016182a5565b7f2f00000000000000000000000000000000000000000000000000000000000000600192909101918201528451618b548160028401602089016182a5565b6001818301019150507f2f0000000000000000000000000000000000000000000000000000000000000060018201528351618b968160028401602088016182a5565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600292909101918201526007019695505050505050565b604081526000618be160408301846182c9565b8281036020840152600481527f2e6173740000000000000000000000000000000000000000000000000000000060208201526040810191505092915050565b600060208284031215618c3257600080fd5b8151801515811461416d57600080fd5b7f436f756c64206e6f742066696e642041535420696e2061727469666163742000815260008251618c7a81601f8501602087016182a5565b7f2e205365742060617374203d20747275656020696e20666f756e6472792e746f601f9390910192830152507f6d6c000000000000000000000000000000000000000000000000000000000000603f820152604101919050565b604081526000618ce760408301846182c9565b8281036020840152601181527f2e6173742e6162736f6c7574655061746800000000000000000000000000000060208201526040810191505092915050565b604081526000618d3960408301846182c9565b8281036020840152600c81527f2e6173742e6c6963656e7365000000000000000000000000000000000000000060208201526040810191505092915050565b7f2e6d657461646174612e736f75726365732e5b27000000000000000000000000815260008251618db08160148501602087016182a5565b7f275d2e6b656363616b32353600000000000000000000000000000000000000006014939091019283015250602001919050565b604081526000618df760408301856182c9565b828103602084015261416981856182c9565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f2200000000000000000000000000000000000000000000000000000000000000815260008251618e708160018501602087016182a5565b7f22000000000000000000000000000000000000000000000000000000000000006001939091019283015250600201919050565b60008251618eb68184602087016182a5565b7f2f6275696c642d696e666f000000000000000000000000000000000000000000920191825250600b01919050565b7f436f756c64206e6f742066696e64206275696c642d696e666f2066696c65207781527f697468206d61746368696e6720736f7572636520636f6465206861736820666f60208201527f7220636f6e747261637420000000000000000000000000000000000000000000604082015260008251618f6981604b8501602087016182a5565b91909101604b0192915050565b600060ff821660ff8103618f8c57618f8c6186e7565b60010192915050565b7f406f70656e7a657070656c696e2f646566656e6465722d6465706c6f792d636c81527f69656e742d636c69400000000000000000000000000000000000000000000000602082015260008251618ff38160298501602087016182a5565b9190910160290192915050565b60408152601660408201527f4f50454e5a455050454c494e5f424153485f5041544800000000000000000000606082015260806020820152600061416d60808301846182c9565b60006020828403121561905957600080fd5b815167ffffffffffffffff81111561907057600080fd5b82016060818503121561908257600080fd5b61908a618872565b81518060030b811461909b57600080fd5b8152602082015167ffffffffffffffff8111156190b757600080fd5b6190c38682850161890b565b602083015250604082015167ffffffffffffffff8111156190e357600080fd5b6190ef8682850161890b565b604083015250949350505050565b7f4661696c656420746f2072756e206261736820636f6d6d616e6420776974682081527f220000000000000000000000000000000000000000000000000000000000000060208201526000825161915b8160218501602087016182a5565b7f222e20496620796f7520617265207573696e672057696e646f77732c2073657460219390910192830152507f20746865204f50454e5a455050454c494e5f424153485f5041544820656e766960418201527f726f6e6d656e74207661726961626c6520746f207468652066756c6c7920717560618201527f616c69666965642070617468206f66207468652062617368206578656375746160818201527f626c652e20466f72206578616d706c652c20696620796f75206172652075736960a18201527f6e672047697420666f722057696e646f77732c206164642074686520666f6c6c60c18201527f6f77696e67206c696e6520696e20746865202e656e762066696c65206f66207960e18201527f6f75722070726f6a65637420287573696e6720666f727761726420736c6173686101018201527f6573293a0a4f50454e5a455050454c494e5f424153485f504154483d22433a2f6101218201527f50726f6772616d2046696c65732f4769742f62696e2f6261736822000000000061014182015261015c01919050565b7f4661696c656420746f2066696e64206c696e652077697468207072656669782081527f27000000000000000000000000000000000000000000000000000000000000006020820152600083516193478160218501602088016182a5565b7f2720696e206f75747075743a2000000000000000000000000000000000000000602191840191820152835161938481602e8401602088016182a5565b01602e01949350505050565b7f4661696c656420746f2072756e2075706772616465207361666574792076616c81527f69646174696f6e3a200000000000000000000000000000000000000000000000602082015260008251618ff38160298501602087016182a5565b7f55706772616465207361666574792076616c69646174696f6e206661696c656481527f3a0a00000000000000000000000000000000000000000000000000000000000060208201526000825161944c8160228501602087016182a5565b9190910160220192915050565b7f436f6e7472616374206e616d652000000000000000000000000000000000000081526000825161949181600e8501602087016182a5565b7f206d75737420626520696e2074686520666f726d6174204d79436f6e74726163600e9390910192830152507f742e736f6c3a4d79436f6e7472616374206f72204d79436f6e74726163742e73602e8201527f6f6c206f72206f75742f4d79436f6e74726163742e736f6c2f4d79436f6e7472604e8201527f6163742e6a736f6e000000000000000000000000000000000000000000000000606e820152607601919050565b80820180821115614074576140746186e7565b7f53504458206c6963656e7365206964656e7469666965722000000000000000008152600083516195828160188501602088016182a5565b7f20696e200000000000000000000000000000000000000000000000000000000060189184019182015283516195bf81601c8401602088016182a5565b7f20646f6573206e6f74206c6f6f6b206c696b65206120737570706f7274656420601c92909101918201527f6c6963656e736520666f7220626c6f636b206578706c6f726572207665726966603c8201527f69636174696f6e2e205573652074686520606c6963656e73655479706560206f605c8201527f7074696f6e20746f20737065636966792061206c6963656e736520747970652c607c8201527f206f7220736574207468652060736b69704c6963656e73655479706560206f70609c8201527f74696f6e20746f2060747275656020746f20736b69702e00000000000000000060bc82015260d301949350505050565b600082516196c58184602087016182a5565b7f2000000000000000000000000000000000000000000000000000000000000000920191825250600101919050565b7f406f70656e7a657070656c696e2f75706772616465732d636f7265400000000081526000825161972c81601c8501602087016182a5565b91909101601c0192915050565b6000600019820361974c5761974c6186e7565b5060010190565b8082028115828204841417614074576140746186e7565b6001815b60018411156197a557808504811115619789576197896186e7565b600184161561979757908102905b60019390931c92800261976e565b935093915050565b6000826197bc57506001614074565b816197c957506000614074565b81600181146197df57600281146197e957619805565b6001915050614074565b60ff8411156197fa576197fa6186e7565b50506001821b614074565b5060208310610133831016604e8410600b8410161715619828575081810a614074565b619835600019848461976a565b8060001904821115619849576198496186e7565b029392505050565b600061416d83836197ad565b60008161986c5761986c6186e7565b506000190190565b600083516198868184602088016182a5565b7f3a0000000000000000000000000000000000000000000000000000000000000090830190815283516198c08160018401602088016182a5565b01600101949350505050565b8181036000831280158383131683831282161715617431576174316186e756fe608060405234801561001057600080fd5b50604051610c9f380380610c9f83398101604081905261002f9161010d565b8181600361003d83826101ff565b50600461004a82826101ff565b50505050506102bd565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261007b57600080fd5b81516001600160401b0381111561009457610094610054565b604051601f8201601f19908116603f011681016001600160401b03811182821017156100c2576100c2610054565b6040528181528382016020018510156100da57600080fd5b60005b828110156100f9576020818601810151838301820152016100dd565b506000918101602001919091529392505050565b6000806040838503121561012057600080fd5b82516001600160401b0381111561013657600080fd5b6101428582860161006a565b602085015190935090506001600160401b0381111561016057600080fd5b61016c8582860161006a565b9150509250929050565b600181811c9082168061018a57607f821691505b6020821081036101aa57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156101fa57806000526020600020601f840160051c810160208510156101d75750805b601f840160051c820191505b818110156101f757600081556001016101e3565b50505b505050565b81516001600160401b0381111561021857610218610054565b61022c816102268454610176565b846101b0565b6020601f82116001811461026057600083156102485750848201515b600019600385901b1c1916600184901b1784556101f7565b600084815260208120601f198516915b828110156102905787850151825560209485019460019092019101610270565b50848210156102ae5786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b6109d3806102cc6000396000f3fe608060405234801561001057600080fd5b50600436106100be5760003560e01c806340c10f191161007657806395d89b411161005b57806395d89b4114610183578063a9059cbb1461018b578063dd62ed3e1461019e57600080fd5b806340c10f191461013857806370a082311461014d57600080fd5b806318160ddd116100a757806318160ddd1461010457806323b872dd14610116578063313ce5671461012957600080fd5b806306fdde03146100c3578063095ea7b3146100e1575b600080fd5b6100cb6101e4565b6040516100d891906107bf565b60405180910390f35b6100f46100ef366004610854565b610276565b60405190151581526020016100d8565b6002545b6040519081526020016100d8565b6100f461012436600461087e565b610290565b604051601281526020016100d8565b61014b610146366004610854565b6102b4565b005b61010861015b3660046108bb565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6100cb6102c2565b6100f4610199366004610854565b6102d1565b6101086101ac3660046108dd565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6060600380546101f390610910565b80601f016020809104026020016040519081016040528092919081815260200182805461021f90610910565b801561026c5780601f106102415761010080835404028352916020019161026c565b820191906000526020600020905b81548152906001019060200180831161024f57829003601f168201915b5050505050905090565b6000336102848185856102df565b60019150505b92915050565b60003361029e8582856102f1565b6102a98585856103c5565b506001949350505050565b6102be8282610470565b5050565b6060600480546101f390610910565b6000336102848185856103c5565b6102ec83838360016104cc565b505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146103bf57818110156103b0576040517ffb8f41b200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416600482015260248101829052604481018390526064015b60405180910390fd5b6103bf848484840360006104cc565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8316610415576040517f96c6fd1e000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff8216610465576040517fec442f05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b6102ec838383610614565b73ffffffffffffffffffffffffffffffffffffffff82166104c0576040517fec442f05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b6102be60008383610614565b73ffffffffffffffffffffffffffffffffffffffff841661051c576040517fe602df05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff831661056c576040517f94280d62000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260016020908152604080832093871683529290522082905580156103bf578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161060691815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff831661064c5780600260008282546106419190610963565b909155506106fe9050565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260208190526040902054818110156106d2576040517fe450d38c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8516600482015260248101829052604481018390526064016103a7565b73ffffffffffffffffffffffffffffffffffffffff841660009081526020819052604090209082900390555b73ffffffffffffffffffffffffffffffffffffffff821661072757600280548290039055610753565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090208054820190555b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516107b291815260200190565b60405180910390a3505050565b602081526000825180602084015260005b818110156107ed57602081860181015160408684010152016107d0565b5060006040828501015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011684010191505092915050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461084f57600080fd5b919050565b6000806040838503121561086757600080fd5b6108708361082b565b946020939093013593505050565b60008060006060848603121561089357600080fd5b61089c8461082b565b92506108aa6020850161082b565b929592945050506040919091013590565b6000602082840312156108cd57600080fd5b6108d68261082b565b9392505050565b600080604083850312156108f057600080fd5b6108f98361082b565b91506109076020840161082b565b90509250929050565b600181811c9082168061092457607f821691505b60208210810361095d577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b8082018082111561028a577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea26469706673582212207e804ca539d49155d2b6bc19268ce22f9f857027c75247d69fb0d56a089c93d464736f6c634300081a003360a060405234801561001057600080fd5b506040516116fe3803806116fe83398101604081905261002f916101e5565b60016000556002805460ff191690556001600160a01b038316158061005b57506001600160a01b038216155b8061006d57506001600160a01b038116155b1561008b5760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b0383166080526100a3600082610134565b506100ce7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a82610134565b506100f97f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e483610134565b506101126000805160206116de83398151915282610134565b5061012b6000805160206116de83398151915283610134565b50505050610228565b60008281526001602090815260408083206001600160a01b038516845290915281205460ff166101bf5760008381526001602081815260408084206001600160a01b0387168086529252808420805460ff19169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45060016101c3565b5060005b92915050565b80516001600160a01b03811681146101e057600080fd5b919050565b6000806000606084860312156101fa57600080fd5b610203846101c9565b9250610211602085016101c9565b915061021f604085016101c9565b90509250925092565b60805161147f61025f6000396000818161019e0152818161050001528181610562015281816108f70152610959015261147f6000f3fe608060405234801561001057600080fd5b506004361061016c5760003560e01c806385f438c1116100cd578063c8a0236211610081578063d936547e11610066578063d936547e14610355578063d9caed1214610378578063e63ab1e91461038b57600080fd5b8063c8a023621461032f578063d547741f1461034257600080fd5b80639a590427116100b25780639a590427146103015780639b19251a14610314578063a217fddf1461032757600080fd5b806385f438c11461029457806391d14854146102bb57600080fd5b806336568abe11610124578063570618e111610109578063570618e11461025a5780635c975abb146102815780638456cb591461028c57600080fd5b806336568abe1461023f5780633f4ba83a1461025257600080fd5b806321fc65f21161015557806321fc65f2146101e5578063248a9ca3146101fa5780632f2ff15d1461022c57600080fd5b806301ffc9a714610171578063116191b614610199575b600080fd5b61018461017f36600461118a565b6103b2565b60405190151581526020015b60405180910390f35b6101c07f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610190565b6101f86101f33660046111f5565b61044b565b005b61021e610208366004611292565b6000908152600160208190526040909120015490565b604051908152602001610190565b6101f861023a3660046112ab565b61064c565b6101f861024d3660046112ab565b610678565b6101f86106d6565b61021e7f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a81565b60025460ff16610184565b6101f861070b565b61021e7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b6101846102c93660046112ab565b600091825260016020908152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b6101f861030f3660046112d7565b61073d565b6101f86103223660046112d7565b6107be565b61021e600081565b6101f861033d3660046111f5565b610842565b6101f86103503660046112ab565b610a29565b6101846103633660046112d7565b60036020526000908152604090205460ff1681565b6101f86103863660046112f2565b610a4f565b61021e7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061044557507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b610453610b7b565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461047d81610bbe565b610485610bc8565b73ffffffffffffffffffffffffffffffffffffffff861660009081526003602052604090205460ff166104e4576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61052573ffffffffffffffffffffffffffffffffffffffff87167f000000000000000000000000000000000000000000000000000000000000000086610c07565b6040517f5131ab5900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690635131ab599061059f9089908990899089908990600401611378565b600060405180830381600087803b1580156105b957600080fd5b505af11580156105cd573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167f85b5be9cf454e05e0bddf49315178102227c312078eefa3c00294fb4d912ae4e868686604051610632939291906113d5565b60405180910390a3506106456001600055565b5050505050565b6000828152600160208190526040909120015461066881610bbe565b6106728383610c94565b50505050565b73ffffffffffffffffffffffffffffffffffffffff811633146106c7576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6106d18282610d41565b505050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61070081610bbe565b610708610de2565b50565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61073581610bbe565b610708610e41565b7f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a61076781610bbe565b73ffffffffffffffffffffffffffffffffffffffff8216600081815260036020526040808220805460ff19169055517f51085ddf9ebdded84b76e829eb58c4078e4b5bdf97d9a94723f336039da467919190a25050565b7f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a6107e881610bbe565b73ffffffffffffffffffffffffffffffffffffffff8216600081815260036020526040808220805460ff19166001179055517faab7954e9d246b167ef88aeddad35209ca2489d95a8aeb59e288d9b19fae5a549190a25050565b61084a610b7b565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461087481610bbe565b61087c610bc8565b73ffffffffffffffffffffffffffffffffffffffff861660009081526003602052604090205460ff166108db576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61091c73ffffffffffffffffffffffffffffffffffffffff87167f000000000000000000000000000000000000000000000000000000000000000086610c07565b6040517fb8969bd400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063b8969bd4906109969089908990899089908990600401611378565b600060405180830381600087803b1580156109b057600080fd5b505af11580156109c4573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fb9d4efa96044e5f5e03e696fa9ae2ff66911cc27e8a637c3627c75bc5b2241c8868686604051610632939291906113d5565b60008281526001602081905260409091200154610a4581610bbe565b6106728383610d41565b610a57610b7b565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e4610a8181610bbe565b610a89610bc8565b73ffffffffffffffffffffffffffffffffffffffff841660009081526003602052604090205460ff16610ae8576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610b0973ffffffffffffffffffffffffffffffffffffffff85168484610c07565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f9b1bfa7fa9ee420a16e124f794c35ac9f90472acc99140eb2f6447c714cad8eb84604051610b6891815260200190565b60405180910390a3506106d16001600055565b600260005403610bb7576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b6107088133610e7e565b60025460ff1615610c05576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6040805173ffffffffffffffffffffffffffffffffffffffff8416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb000000000000000000000000000000000000000000000000000000001790526106d1908490610f0f565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff16610d3957600083815260016020818152604080842073ffffffffffffffffffffffffffffffffffffffff87168086529252808420805460ff19169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a4506001610445565b506000610445565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff1615610d3957600083815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff86168085529252808320805460ff1916905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a4506001610445565b610dea610fa5565b6002805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b610e49610bc8565b6002805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258610e173390565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16610f0b576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82166004820152602481018390526044015b60405180910390fd5b5050565b6000610f3173ffffffffffffffffffffffffffffffffffffffff841683610fe1565b90508051600014158015610f56575080806020019051810190610f5491906113f8565b155b156106d1576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84166004820152602401610f02565b60025460ff16610c05576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6060610fef83836000610ff6565b9392505050565b606081471015611034576040517fcd786059000000000000000000000000000000000000000000000000000000008152306004820152602401610f02565b6000808573ffffffffffffffffffffffffffffffffffffffff16848660405161105d919061141a565b60006040518083038185875af1925050503d806000811461109a576040519150601f19603f3d011682016040523d82523d6000602084013e61109f565b606091505b50915091506110af8683836110b9565b9695505050505050565b6060826110ce576110c982611148565b610fef565b81511580156110f2575073ffffffffffffffffffffffffffffffffffffffff84163b155b15611141576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85166004820152602401610f02565b5080610fef565b8051156111585780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006020828403121561119c57600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610fef57600080fd5b803573ffffffffffffffffffffffffffffffffffffffff811681146111f057600080fd5b919050565b60008060008060006080868803121561120d57600080fd5b611216866111cc565b9450611224602087016111cc565b935060408601359250606086013567ffffffffffffffff81111561124757600080fd5b8601601f8101881361125857600080fd5b803567ffffffffffffffff81111561126f57600080fd5b88602082840101111561128157600080fd5b959894975092955050506020019190565b6000602082840312156112a457600080fd5b5035919050565b600080604083850312156112be57600080fd5b823591506112ce602084016111cc565b90509250929050565b6000602082840312156112e957600080fd5b610fef826111cc565b60008060006060848603121561130757600080fd5b611310846111cc565b925061131e602085016111cc565b929592945050506040919091013590565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff8616815273ffffffffffffffffffffffffffffffffffffffff851660208201528360408201526080606082015260006113ca60808301848661132f565b979650505050505050565b8381526040602082015260006113ef60408301848661132f565b95945050505050565b60006020828403121561140a57600080fd5b81518015158114610fef57600080fd5b6000825160005b8181101561143b5760208186018101518583015201611421565b50600092019182525091905056fea2646970667358221220dc54ce548a1f0bf8ba5e86cc53c6d822e55eee543451395733c659359bac8dd164736f6c634300081a00338619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a60c060405234801561001057600080fd5b5060405161166338038061166383398101604081905261002f9161021a565b60016000819055805460ff19169055838383836001600160a01b038416158061005f57506001600160a01b038316155b8061007157506001600160a01b038216155b8061008357506001600160a01b038116155b156100a15760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b03808516608052831660a0526100bf60008261014e565b506100ea7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e48361014e565b506101157f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb8361014e565b506101407f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a8261014e565b50505050505050505061026e565b60008281526002602090815260408083206001600160a01b038516845290915281205460ff166101f45760008381526002602090815260408083206001600160a01b03861684529091529020805460ff191660011790556101ac3390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45060016101f8565b5060005b92915050565b80516001600160a01b038116811461021557600080fd5b919050565b6000806000806080858703121561023057600080fd5b610239856101fe565b9350610247602086016101fe565b9250610255604086016101fe565b9150610263606086016101fe565b905092959194509250565b60805160a05161138a6102d9600039600081816101f701528181610474015281816105250152818161063f015281816107d30152818161088401526109520152600081816101ab01528181610496015281816104f8015281816107f50152610857015261138a6000f3fe608060405234801561001057600080fd5b50600436106101515760003560e01c80635c975abb116100cd57806391d1485411610081578063a783c78911610066578063a783c78914610326578063d547741f1461034d578063e63ab1e91461036057600080fd5b806391d14854146102d8578063a217fddf1461031e57600080fd5b8063743e0c9b116100b2578063743e0c9b146102965780638456cb59146102a957806385f438c1146102b157600080fd5b80635c975abb146102785780635e3e9fef1461028357600080fd5b806321e093b1116101245780632f2ff15d116101095780632f2ff15d1461024a57806336568abe1461025d5780633f4ba83a1461027057600080fd5b806321e093b1146101f2578063248a9ca31461021957600080fd5b806301ffc9a71461015657806302d5c8991461017e578063106e629014610193578063116191b6146101a6575b600080fd5b6101696101643660046110c5565b610387565b60405190151581526020015b60405180910390f35b61019161018c366004611130565b610420565b005b6101916101a13660046111c2565b6105eb565b6101cd7f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610175565b6101cd7f000000000000000000000000000000000000000000000000000000000000000081565b61023c6102273660046111f5565b60009081526002602052604090206001015490565b604051908152602001610175565b61019161025836600461120e565b6106c6565b61019161026b36600461120e565b6106f1565b61019161074a565b60015460ff16610169565b610191610291366004611130565b61077f565b6101916102a43660046111f5565b610930565b61019161097a565b61023c7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b6101696102e636600461120e565b600091825260026020908152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b61023c600081565b61023c7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb81565b61019161035b36600461120e565b6109ac565b61023c7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061041a57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b6104286109d1565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461045281610a14565b61045a610a1e565b6104bb73ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000167f000000000000000000000000000000000000000000000000000000000000000087610a5d565b6040517fb8969bd400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063b8969bd490610555907f0000000000000000000000000000000000000000000000000000000000000000908a908a908a908a90600401611283565b600060405180830381600087803b15801561056f57600080fd5b505af1158015610583573d6000803e3d6000fd5b505050508573ffffffffffffffffffffffffffffffffffffffff167fba96f26bdda53eb8c8ba39045dfb4ff39753fbc7a6edcf250a88e75e78d102fe8686866040516105d1939291906112e0565b60405180910390a2506105e46001600055565b5050505050565b6105f36109d1565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461061d81610a14565b610625610a1e565b61066673ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168585610a5d565b8373ffffffffffffffffffffffffffffffffffffffff167f884edad9ce6fa2440d8a54cc123490eb96d2768479d49ff9c7366125a9424364846040516106ae91815260200190565b60405180910390a2506106c16001600055565b505050565b6000828152600260205260409020600101546106e181610a14565b6106eb8383610ade565b50505050565b73ffffffffffffffffffffffffffffffffffffffff81163314610740576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6106c18282610bde565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61077481610a14565b61077c610c9d565b50565b6107876109d1565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e46107b181610a14565b6107b9610a1e565b61081a73ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000167f000000000000000000000000000000000000000000000000000000000000000087610a5d565b6040517f5131ab5900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690635131ab59906108b4907f0000000000000000000000000000000000000000000000000000000000000000908a908a908a908a90600401611283565b600060405180830381600087803b1580156108ce57600080fd5b505af11580156108e2573d6000803e3d6000fd5b505050508573ffffffffffffffffffffffffffffffffffffffff167f7772f56296d3a5202974a45c61c9188d844ab4d6eeb18c851e4b8d5384ca6ced8686866040516105d1939291906112e0565b610938610a1e565b61077c73ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016333084610d1a565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a6109a481610a14565b61077c610d60565b6000828152600260205260409020600101546109c781610a14565b6106eb8383610bde565b600260005403610a0d576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b61077c8133610db9565b60015460ff1615610a5b576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b60405173ffffffffffffffffffffffffffffffffffffffff8381166024830152604482018390526106c191859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050610e4a565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff16610bd657600083815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff86168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055610b743390565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a450600161041a565b50600061041a565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff1615610bd657600083815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8616808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a450600161041a565b610ca5610ee0565b600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b60405173ffffffffffffffffffffffffffffffffffffffff84811660248301528381166044830152606482018390526106eb9186918216906323b872dd90608401610a97565b610d68610a1e565b600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016811790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25833610cf0565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16610e46576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82166004820152602481018390526044015b60405180910390fd5b5050565b6000610e6c73ffffffffffffffffffffffffffffffffffffffff841683610f1c565b90508051600014158015610e91575080806020019051810190610e8f9190611303565b155b156106c1576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84166004820152602401610e3d565b60015460ff16610a5b576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6060610f2a83836000610f31565b9392505050565b606081471015610f6f576040517fcd786059000000000000000000000000000000000000000000000000000000008152306004820152602401610e3d565b6000808573ffffffffffffffffffffffffffffffffffffffff168486604051610f989190611325565b60006040518083038185875af1925050503d8060008114610fd5576040519150601f19603f3d011682016040523d82523d6000602084013e610fda565b606091505b5091509150610fea868383610ff4565b9695505050505050565b6060826110095761100482611083565b610f2a565b815115801561102d575073ffffffffffffffffffffffffffffffffffffffff84163b155b1561107c576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85166004820152602401610e3d565b5080610f2a565b8051156110935780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000602082840312156110d757600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610f2a57600080fd5b803573ffffffffffffffffffffffffffffffffffffffff8116811461112b57600080fd5b919050565b60008060008060006080868803121561114857600080fd5b61115186611107565b945060208601359350604086013567ffffffffffffffff81111561117457600080fd5b8601601f8101881361118557600080fd5b803567ffffffffffffffff81111561119c57600080fd5b8860208284010111156111ae57600080fd5b959894975060200195606001359392505050565b6000806000606084860312156111d757600080fd5b6111e084611107565b95602085013595506040909401359392505050565b60006020828403121561120757600080fd5b5035919050565b6000806040838503121561122157600080fd5b8235915061123160208401611107565b90509250929050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff8616815273ffffffffffffffffffffffffffffffffffffffff851660208201528360408201526080606082015260006112d560808301848661123a565b979650505050505050565b8381526040602082015260006112fa60408301848661123a565b95945050505050565b60006020828403121561131557600080fd5b81518015158114610f2a57600080fd5b6000825160005b81811015611346576020818601810151858301520161132c565b50600092019182525091905056fea264697066735822122055d09557e5c9ebfe94b17ac42f0790bf256cf4c257e31c46bc4dbb126e31fe1964736f6c634300081a00336080604052348015600f57600080fd5b506001600055610d3a806100246000396000f3fe6080604052600436106100635760003560e01c8063c513169111610040578063c5131691146100c1578063e04d4f97146100e1578063f05b6abf146100f457005b8063357fc5a21461006c5780636ed701691461008c5780638fcaa0b5146100a157005b3661006a57005b005b34801561007857600080fd5b5061006a6100873660046106c0565b610114565b34801561009857600080fd5b5061006a6101aa565b3480156100ad57600080fd5b5061006a6100bc3660046106fc565b6101df565b3480156100cd57600080fd5b5061006a6100dc3660046106c0565b61021e565b61006a6100ef366004610895565b6102f9565b34801561010057600080fd5b5061006a61010f366004610981565b61033d565b61011c610372565b61013e73ffffffffffffffffffffffffffffffffffffffff83163383866103b5565b604080513381526020810185905273ffffffffffffffffffffffffffffffffffffffff848116828401528316606082015290517f2b58128f24a9f59127cc5b5430d70542b22220f2d9adaa86e442b816ab98af609181900360800190a16101a56001600055565b505050565b6040513381527fbcaadb46b82a48af60b608f58959ae6b8310d1b0a0d094c2e9ec3208ed39f2a09060200160405180910390a1565b7f0d3f65f00e631663aa85c96330b5c7a83bb29af3630c0063776f985edc3037aa33838360405161021293929190610a6b565b60405180910390a15050565b610226610372565b6000610233600285610ad5565b90508060000361026f576040517f1f2a200500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61029173ffffffffffffffffffffffffffffffffffffffff84163384846103b5565b604080513381526020810183905273ffffffffffffffffffffffffffffffffffffffff858116828401528416606082015290517f2b58128f24a9f59127cc5b5430d70542b22220f2d9adaa86e442b816ab98af609181900360800190a1506101a56001600055565b7f1f1ff1f5fb41346850b2f5c04e6c767e2f1c8a525c5c0c5cdb60cdf3ca5f62fa3334858585604051610330959493929190610b7e565b60405180910390a1505050565b7f74a53cd528a921fca7dbdee62f86819051d3cc98f214951f4238e8843f20b146338484846040516103309493929190610c08565b6002600054036103ae576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b6040805173ffffffffffffffffffffffffffffffffffffffff85811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd0000000000000000000000000000000000000000000000000000000017905261044a908590610450565b50505050565b600061047273ffffffffffffffffffffffffffffffffffffffff8416836104eb565b905080516000141580156104975750808060200190518101906104959190610ccb565b155b156101a5576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff841660048201526024015b60405180910390fd5b60606104f983836000610500565b9392505050565b60608147101561053e576040517fcd7860590000000000000000000000000000000000000000000000000000000081523060048201526024016104e2565b6000808573ffffffffffffffffffffffffffffffffffffffff1684866040516105679190610ce8565b60006040518083038185875af1925050503d80600081146105a4576040519150601f19603f3d011682016040523d82523d6000602084013e6105a9565b606091505b50915091506105b98683836105c3565b9695505050505050565b6060826105d8576105d382610652565b6104f9565b81511580156105fc575073ffffffffffffffffffffffffffffffffffffffff84163b155b1561064b576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff851660048201526024016104e2565b50806104f9565b8051156106625780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50565b803573ffffffffffffffffffffffffffffffffffffffff811681146106bb57600080fd5b919050565b6000806000606084860312156106d557600080fd5b833592506106e560208501610697565b91506106f360408501610697565b90509250925092565b6000806020838503121561070f57600080fd5b823567ffffffffffffffff81111561072657600080fd5b8301601f8101851361073757600080fd5b803567ffffffffffffffff81111561074e57600080fd5b85602082840101111561076057600080fd5b6020919091019590945092505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156107e6576107e6610770565b604052919050565b600082601f8301126107ff57600080fd5b813567ffffffffffffffff81111561081957610819610770565b61084a60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8401160161079f565b81815284602083860101111561085f57600080fd5b816020850160208301376000918101602001919091529392505050565b801515811461069457600080fd5b80356106bb8161087c565b6000806000606084860312156108aa57600080fd5b833567ffffffffffffffff8111156108c157600080fd5b6108cd868287016107ee565b9350506020840135915060408401356108e58161087c565b809150509250925092565b600067ffffffffffffffff82111561090a5761090a610770565b5060051b60200190565b600082601f83011261092557600080fd5b8135610938610933826108f0565b61079f565b8082825260208201915060208360051b86010192508583111561095a57600080fd5b602085015b8381101561097757803583526020928301920161095f565b5095945050505050565b60008060006060848603121561099657600080fd5b833567ffffffffffffffff8111156109ad57600080fd5b8401601f810186136109be57600080fd5b80356109cc610933826108f0565b8082825260208201915060208360051b8501019250888311156109ee57600080fd5b602084015b83811015610a3057803567ffffffffffffffff811115610a1257600080fd5b610a218b6020838901016107ee565b845250602092830192016109f3565b509550505050602084013567ffffffffffffffff811115610a5057600080fd5b610a5c86828701610914565b9250506106f36040850161088a565b73ffffffffffffffffffffffffffffffffffffffff8416815260406020820152816040820152818360608301376000818301606090810191909152601f9092017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016010192915050565b600082610b0b577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60005b83811015610b2b578181015183820152602001610b13565b50506000910152565b60008151808452610b4c816020860160208601610b10565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b73ffffffffffffffffffffffffffffffffffffffff8616815284602082015260a060408201526000610bb360a0830186610b34565b6060830194909452509015156080909101529392505050565b600081518084526020840193506020830160005b82811015610bfe578151865260209586019590910190600101610be0565b5093949350505050565b60006080820173ffffffffffffffffffffffffffffffffffffffff871683526080602084015280865180835260a08501915060a08160051b86010192506020880160005b82811015610c9b577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60878603018452610c86858351610b34565b94506020938401939190910190600101610c4c565b505050508281036040840152610cb18186610bcc565b915050610cc2606083018415159052565b95945050505050565b600060208284031215610cdd57600080fd5b81516104f98161087c565b60008251610cfa818460208701610b10565b919091019291505056fea2646970667358221220556072e1abafc3c4063b8cce832228b4f309b93726aaa6a6dfab20cb880c6d1864736f6c634300081a0033a26469706673582212203a68549b278af3497992869afa233a123bfd11b2258f45bd8ad63acebf04336b64736f6c634300081a0033", + Bin: "0x6080604052600c8054600160ff199182168117909255601f80549091169091179055348015602c57600080fd5b5061e0808061003c6000396000f3fe608060405234801561001057600080fd5b50600436106101985760003560e01c8063b0464fdc116100e3578063dcf7d0371161008c578063e63ab1e911610066578063e63ab1e9146102ce578063fa7626d4146102f5578063fe574f841461030257600080fd5b8063dcf7d037146102b6578063de1cb76c146102be578063e20c9f71146102c657600080fd5b8063c1909972116100bd578063c19099721461029e578063ccb0e3f2146102a6578063d509b16c146102ae57600080fd5b8063b0464fdc14610276578063b5508aa91461027e578063ba414fa61461028657600080fd5b8063493465581161014557806385226c811161011f57806385226c811461021757806385f438c11461022c578063916a17c61461026157600080fd5b806349346558146101f257806366d9a9a0146101fa578063828320141461020f57600080fd5b80633cba0107116101765780633cba0107146101da5780633e5e3c23146101e25780633f7286f4146101ea57600080fd5b80630a9254e41461019d5780631ed7831c146101a75780632ade3880146101c5575b600080fd5b6101a561030a565b005b6101af610a70565b6040516101bc9190618259565b60405180910390f35b6101cd610ad2565b6040516101bc91906182f5565b6101a5610c14565b6101af6113ce565b6101af61142e565b6101a561148e565b610202611ad1565b6040516101bc919061845b565b6101a5611c53565b61021f611eac565b6040516101bc91906184f9565b6102537f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b6040519081526020016101bc565b610269611f7c565b6040516101bc9190618570565b610269612077565b61021f612172565b61028e612242565b60405190151581526020016101bc565b6101a5612316565b6101a5612581565b6101a56130ad565b6101a56130e9565b6101a5613790565b6101af613ddd565b6102537f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b601f5461028e9060ff1681565b6101a5613e3d565b602580547fffffffffffffffffffffffff000000000000000000000000000000000000000090811630179091556026805482166112341790556027805490911661567817905560405161035c9061816c565b604080825260049082018190527f7a6574610000000000000000000000000000000000000000000000000000000060608301526080602083018190528201527f5a4554410000000000000000000000000000000000000000000000000000000060a082015260c001604051809103906000f0801580156103e0573d6000803e3d6000fd5b50602480547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039283169081178255604080518082018252600e81527f4761746577617945564d2e736f6c0000000000000000000000000000000000006020820152602754602554925190861694810194909452604484019290925290921660648201526104d1919060840160408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fc0c53b8b0000000000000000000000000000000000000000000000000000000017905261405b565b601f80547fffffffffffffffffffffff0000000000000000000000000000000000000000ff166101006001600160a01b0393841681029190911791829055602080549190920483167fffffffffffffffffffffffff0000000000000000000000000000000000000000909116811790915560275460255460405192939182169291169061055d90618179565b6001600160a01b03938416815291831660208301529091166040820152606001604051809103906000f080158015610599573d6000803e3d6000fd5b50602280547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392831617905560205460245460275460255460405193851694928316939183169216906105f490618186565b6001600160a01b039485168152928416602084015290831660408301529091166060820152608001604051809103906000f080158015610638573d6000803e3d6000fd5b50602380547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039290921691909117905560405161067d90618193565b604051809103906000f080158015610699573d6000803e3d6000fd5b50602180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039283161790556027546040517fc88a5e6d00000000000000000000000000000000000000000000000000000000815291166004820152670de0b6b3a76400006024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c88a5e6d90604401600060405180830381600087803b15801561074557600080fd5b505af1158015610759573d6000803e3d6000fd5b50506025546040517f06447d560000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506306447d569150602401600060405180830381600087803b1580156107cf57600080fd5b505af11580156107e3573d6000803e3d6000fd5b50506020546022546040517fae7a3a6f0000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201529116925063ae7a3a6f9150602401600060405180830381600087803b15801561084957600080fd5b505af115801561085d573d6000803e3d6000fd5b50506020546023546040517f10188aef0000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152911692506310188aef9150602401600060405180830381600087803b1580156108c357600080fd5b505af11580156108d7573d6000803e3d6000fd5b505050507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b03166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561093957600080fd5b505af115801561094d573d6000803e3d6000fd5b5050602480546023546040517f40c10f190000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152624c4b40938101939093521692506340c10f199150604401600060405180830381600087803b1580156109be57600080fd5b505af11580156109d2573d6000803e3d6000fd5b50506027546040517fc88a5e6d0000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152670de0b6b3a76400006024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c88a5e6d9150604401600060405180830381600087803b158015610a5657600080fd5b505af1158015610a6a573d6000803e3d6000fd5b50505050565b60606016805480602002602001604051908101604052809291908181526020018280548015610ac857602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610aaa575b5050505050905090565b6060601e805480602002602001604051908101604052809291908181526020016000905b82821015610c0b57600084815260208082206040805180820182526002870290920180546001600160a01b03168352600181018054835181870281018701909452808452939591948681019491929084015b82821015610bf4578382906000526020600020018054610b6790618607565b80601f0160208091040260200160405190810160405280929190818152602001828054610b9390618607565b8015610be05780601f10610bb557610100808354040283529160200191610be0565b820191906000526020600020905b815481529060010190602001808311610bc357829003601f168201915b505050505081526020019060010190610b48565b505050508152505081526020019060010190610af6565b50505050905090565b60248054602654604051620186a09381018490526001600160a01b03928316604482015291166064820152600090819060840160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f357fc5a2000000000000000000000000000000000000000000000000000000001790526024805460265492516370a0823160e01b81526001600160a01b0393841660048201529394506000939216916370a082319101602060405180830381865afa158015610cef573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d139190618654565b9050610d2081600061407a565b602480546023546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa158015610d70573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d949190618654565b6020546040516001600160a01b0390911660248201526044810187905290915060009060640160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb0000000000000000000000000000000000000000000000000000000017905260245490517ff30c7ba3000000000000000000000000000000000000000000000000000000008152919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f30c7ba391610e77916001600160a01b039190911690600090869060040161866d565b600060405180830381600087803b158015610e9157600080fd5b505af1158015610ea5573d6000803e3d6000fd5b50506021546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b158015610f3757600080fd5b505af1158015610f4b573d6000803e3d6000fd5b505060208054602454602654604080516001600160a01b0394851681529485018d905291831684830152919091166060830152517f2b58128f24a9f59127cc5b5430d70542b22220f2d9adaa86e442b816ab98af609350908190036080019150a16023546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b15801561103a57600080fd5b505af115801561104e573d6000803e3d6000fd5b50506021546040516001600160a01b0390911692507f7772f56296d3a5202974a45c61c9188d844ab4d6eeb18c851e4b8d5384ca6ced91506110939089908890618695565b60405180910390a260275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156110f457600080fd5b505af1158015611108573d6000803e3d6000fd5b50506023546021546040517f5e3e9fef0000000000000000000000000000000000000000000000000000000081526001600160a01b039283169450635e3e9fef935061116092909116908a9089908b906004016186ae565b600060405180830381600087803b15801561117a57600080fd5b505af115801561118e573d6000803e3d6000fd5b5050602480546026546040516370a0823160e01b81526001600160a01b03918216600482015260009550911692506370a0823191015b602060405180830381865afa1580156111e1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112059190618654565b9050611211818861407a565b602480546023546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa158015611261573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112859190618654565b905061129a816112958a87618716565b61407a565b602480546020546021546040517fdd62ed3e0000000000000000000000000000000000000000000000000000000081526001600160a01b0392831660048201529082169381019390935260009291169063dd62ed3e90604401602060405180830381865afa158015611310573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113349190618654565b905061134181600061407a565b602480546020546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa158015611391573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113b59190618654565b90506113c281600061407a565b50505050505050505050565b60606018805480602002602001604051908101604052809291908181526020018280548015610ac8576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311610aaa575050505050905090565b60606017805480602002602001604051908101604052809291908181526020018280548015610ac8576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311610aaa575050505050905090565b604080516004808252602480830184526020830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f6ed70169000000000000000000000000000000000000000000000000000000001790525460265493516370a0823160e01b8152620186a0946000949385936001600160a01b03908116936370a082319361152f93921691016001600160a01b0391909116815260200190565b602060405180830381865afa15801561154c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115709190618654565b905061157d81600061407a565b602480546023546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa1580156115cd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115f19190618654565b6020546040516001600160a01b0390911660248201526044810187905290915060009060640160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb0000000000000000000000000000000000000000000000000000000017905260245490517ff30c7ba3000000000000000000000000000000000000000000000000000000008152919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f30c7ba3916116d4916001600160a01b039190911690600090869060040161866d565b600060405180830381600087803b1580156116ee57600080fd5b505af1158015611702573d6000803e3d6000fd5b50506021546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b15801561179457600080fd5b505af11580156117a8573d6000803e3d6000fd5b5050602080546040516001600160a01b0390911681527fbcaadb46b82a48af60b608f58959ae6b8310d1b0a0d094c2e9ec3208ed39f2a0935001905060405180910390a16023546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b15801561187a57600080fd5b505af115801561188e573d6000803e3d6000fd5b50506021546040516001600160a01b0390911692507f7772f56296d3a5202974a45c61c9188d844ab4d6eeb18c851e4b8d5384ca6ced91506118d39089908890618695565b60405180910390a260275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561193457600080fd5b505af1158015611948573d6000803e3d6000fd5b50506023546021546040517f5e3e9fef0000000000000000000000000000000000000000000000000000000081526001600160a01b039283169450635e3e9fef93506119a092909116908a9089908b906004016186ae565b600060405180830381600087803b1580156119ba57600080fd5b505af11580156119ce573d6000803e3d6000fd5b5050602480546026546040516370a0823160e01b81526001600160a01b03918216600482015260009550911692506370a082319101602060405180830381865afa158015611a20573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a449190618654565b9050611a5181600061407a565b602480546023546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa158015611aa1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ac59190618654565b905061129a818561407a565b6060601b805480602002602001604051908101604052809291908181526020016000905b82821015610c0b5783829060005260206000209060020201604051806040016040529081600082018054611b2890618607565b80601f0160208091040260200160405190810160405280929190818152602001828054611b5490618607565b8015611ba15780601f10611b7657610100808354040283529160200191611ba1565b820191906000526020600020905b815481529060010190602001808311611b8457829003601f168201915b5050505050815260200160018201805480602002602001604051908101604052809291908181526020018280548015611c3b57602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019060040190602082600301049283019260010382029150808411611be85790505b50505050508152505081526020019060010190611af5565b6040517f68656c6c6f0000000000000000000000000000000000000000000000000000006020820152620186a090600090819060250160408051808303601f190181529082905260255463ca669fa760e01b83526001600160a01b031660048301529150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015611cf057600080fd5b505af1158015611d04573d6000803e3d6000fd5b5050602554604080516001600160a01b0390921660248301527f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e460448084019190915281518084039091018152606490920181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb39250611def9190600401618729565b600060405180830381600087803b158015611e0957600080fd5b505af1158015611e1d573d6000803e3d6000fd5b50506023546021546040517f02d5c8990000000000000000000000000000000000000000000000000000000081526001600160a01b0392831694506302d5c8999350611e7592909116908790869088906004016186ae565b600060405180830381600087803b158015611e8f57600080fd5b505af1158015611ea3573d6000803e3d6000fd5b50505050505050565b6060601a805480602002602001604051908101604052809291908181526020016000905b82821015610c0b578382906000526020600020018054611eef90618607565b80601f0160208091040260200160405190810160405280929190818152602001828054611f1b90618607565b8015611f685780601f10611f3d57610100808354040283529160200191611f68565b820191906000526020600020905b815481529060010190602001808311611f4b57829003601f168201915b505050505081526020019060010190611ed0565b6060601d805480602002602001604051908101604052809291908181526020016000905b82821015610c0b5760008481526020908190206040805180820182526002860290920180546001600160a01b0316835260018101805483518187028101870190945280845293949193858301939283018282801561205f57602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168152602001906004019060208260030104928301926001038202915080841161200c5790505b50505050508152505081526020019060010190611fa0565b6060601c805480602002602001604051908101604052809291908181526020016000905b82821015610c0b5760008481526020908190206040805180820182526002860290920180546001600160a01b0316835260018101805483518187028101870190945280845293949193858301939283018282801561215a57602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190600401906020826003010492830192600103820291508084116121075790505b5050505050815250508152602001906001019061209b565b60606019805480602002602001604051908101604052809291908181526020016000905b82821015610c0b5783829060005260206000200180546121b590618607565b80601f01602080910402602001604051908101604052809291908181526020018280546121e190618607565b801561222e5780601f106122035761010080835404028352916020019161222e565b820191906000526020600020905b81548152906001019060200180831161221157829003601f168201915b505050505081526020019060010190612196565b60085460009060ff161561225a575060085460ff1690565b6040517f667f9d70000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d600482018190527f6661696c65640000000000000000000000000000000000000000000000000000602483015260009163667f9d7090604401602060405180830381865afa1580156122eb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061230f9190618654565b1415905090565b60248054602654604051620186a09381018490526001600160a01b03928316604482015291166064820152600090819060840160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f357fc5a200000000000000000000000000000000000000000000000000000000179052602554905163ca669fa760e01b81526001600160a01b039091166004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156123fc57600080fd5b505af1158015612410573d6000803e3d6000fd5b5050602554604080516001600160a01b0390921660248301527f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e460448084019190915281518084039091018152606490920181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb392506124fb9190600401618729565b600060405180830381600087803b15801561251557600080fd5b505af1158015612529573d6000803e3d6000fd5b50506023546021546040517f5e3e9fef0000000000000000000000000000000000000000000000000000000081526001600160a01b039283169450635e3e9fef9350611e7592909116908790869088906004016186ae565b60275460405163ca669fa760e01b81526001600160a01b039091166004820152620186a090600090737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156125e257600080fd5b505af11580156125f6573d6000803e3d6000fd5b5050602754604080516001600160a01b0390921660248301527f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a60448084019190915281518084039091018152606490920181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb392506126e19190600401618729565b600060405180830381600087803b1580156126fb57600080fd5b505af115801561270f573d6000803e3d6000fd5b50505050602360009054906101000a90046001600160a01b03166001600160a01b0316638456cb596040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561276357600080fd5b505af1158015612777573d6000803e3d6000fd5b505060275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b1580156127d457600080fd5b505af11580156127e8573d6000803e3d6000fd5b5050602754604080516001600160a01b0390921660248301527f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a60448084019190915281518084039091018152606490920181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb392506128d39190600401618729565b600060405180830381600087803b1580156128ed57600080fd5b505af1158015612901573d6000803e3d6000fd5b50505050602360009054906101000a90046001600160a01b03166001600160a01b0316633f4ba83a6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561295557600080fd5b505af1158015612969573d6000803e3d6000fd5b505060255460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b1580156129c657600080fd5b505af11580156129da573d6000803e3d6000fd5b50505050602360009054906101000a90046001600160a01b03166001600160a01b0316638456cb596040518163ffffffff1660e01b8152600401600060405180830381600087803b158015612a2e57600080fd5b505af1158015612a42573d6000803e3d6000fd5b50506040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fd93c0665000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b158015612acb57600080fd5b505af1158015612adf573d6000803e3d6000fd5b505060275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b158015612b3c57600080fd5b505af1158015612b50573d6000803e3d6000fd5b50506023546026546040517f106e62900000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260248101879052604481018690529116925063106e62909150606401600060405180830381600087803b158015612bc457600080fd5b505af1158015612bd8573d6000803e3d6000fd5b505060255460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b158015612c3557600080fd5b505af1158015612c49573d6000803e3d6000fd5b50505050602360009054906101000a90046001600160a01b03166001600160a01b0316633f4ba83a6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015612c9d57600080fd5b505af1158015612cb1573d6000803e3d6000fd5b5050602480546026546040516370a0823160e01b81526001600160a01b03918216600482015260009550911692506370a0823191015b602060405180830381865afa158015612d04573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d289190618654565b9050612d3581600061407a565b6026546040516001600160a01b0390911660248201526044810184905260009060640160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb0000000000000000000000000000000000000000000000000000000017905260245490517ff30c7ba3000000000000000000000000000000000000000000000000000000008152919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f30c7ba391612e15916001600160a01b039190911690600090869060040161866d565b600060405180830381600087803b158015612e2f57600080fd5b505af1158015612e43573d6000803e3d6000fd5b50506023546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b158015612ed557600080fd5b505af1158015612ee9573d6000803e3d6000fd5b50506026546040518781526001600160a01b0390911692507f884edad9ce6fa2440d8a54cc123490eb96d2768479d49ff9c7366125a9424364915060200160405180910390a260275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015612f8857600080fd5b505af1158015612f9c573d6000803e3d6000fd5b50506023546026546040517f106e62900000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260248101899052604481018890529116925063106e62909150606401600060405180830381600087803b15801561301057600080fd5b505af1158015613024573d6000803e3d6000fd5b5050602480546026546040516370a0823160e01b81526001600160a01b03918216600482015260009550911692506370a082319101602060405180830381865afa158015613076573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061309a9190618654565b90506130a6818661407a565b5050505050565b602480546026546040516370a0823160e01b81526001600160a01b039182166004820152620186a093600093849316916370a082319101612ce7565b60248054602654604051620186a09381018490526001600160a01b03928316604482015291166064820152600090819060840160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fc5131691000000000000000000000000000000000000000000000000000000001790526024805460265492516370a0823160e01b81526001600160a01b0393841660048201529394506000939216916370a082319101602060405180830381865afa1580156131c4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131e89190618654565b90506131f581600061407a565b602480546023546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa158015613245573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132699190618654565b6020546040516001600160a01b0390911660248201526044810187905290915060009060640160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb0000000000000000000000000000000000000000000000000000000017905260245490517ff30c7ba3000000000000000000000000000000000000000000000000000000008152919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f30c7ba39161334c916001600160a01b039190911690600090869060040161866d565b600060405180830381600087803b15801561336657600080fd5b505af115801561337a573d6000803e3d6000fd5b50506021546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b15801561340c57600080fd5b505af1158015613420573d6000803e3d6000fd5b50506020547f2b58128f24a9f59127cc5b5430d70542b22220f2d9adaa86e442b816ab98af6092506001600160a01b0316905061345e60028961873c565b602454602654604080516001600160a01b03958616815260208101949094529184168383015292909216606082015290519081900360800190a16023546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b15801561352657600080fd5b505af115801561353a573d6000803e3d6000fd5b50506021546040516001600160a01b0390911692507f7772f56296d3a5202974a45c61c9188d844ab4d6eeb18c851e4b8d5384ca6ced915061357f9089908890618695565b60405180910390a260275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156135e057600080fd5b505af11580156135f4573d6000803e3d6000fd5b50506023546021546040517f5e3e9fef0000000000000000000000000000000000000000000000000000000081526001600160a01b039283169450635e3e9fef935061364c92909116908a9089908b906004016186ae565b600060405180830381600087803b15801561366657600080fd5b505af115801561367a573d6000803e3d6000fd5b5050602480546026546040516370a0823160e01b81526001600160a01b03918216600482015260009550911692506370a082319101602060405180830381865afa1580156136cc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136f09190618654565b90506137018161129560028a61873c565b602480546023546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa158015613751573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137759190618654565b905061129a8161378660028b61873c565b6112959087618716565b6040517f68656c6c6f0000000000000000000000000000000000000000000000000000006020820152620186a090600090819060250160408051808303601f1901815290829052602480546021546370a0823160e01b85526001600160a01b0390811660048601529294506000939216916370a082319101602060405180830381865afa158015613825573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138499190618654565b905061385681600061407a565b602480546023546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa1580156138a6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138ca9190618654565b6020546040516001600160a01b0390911660248201526044810187905290915060009060640160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb0000000000000000000000000000000000000000000000000000000017905260245490517ff30c7ba3000000000000000000000000000000000000000000000000000000008152919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f30c7ba3916139ad916001600160a01b039190911690600090869060040161866d565b600060405180830381600087803b1580156139c757600080fd5b505af11580156139db573d6000803e3d6000fd5b50506021546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b158015613a6d57600080fd5b505af1158015613a81573d6000803e3d6000fd5b50506020546040517f0d3f65f00e631663aa85c96330b5c7a83bb29af3630c0063776f985edc3037aa9350613ac492506001600160a01b03909116908790618777565b60405180910390a16020546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b158015613b5a57600080fd5b505af1158015613b6e573d6000803e3d6000fd5b50506021546024546040516001600160a01b039283169450911691507f723fc7be2448075379e4fdf1e6bf5fead954d2668d2da05dcb44ccfec4beeda790613bb9908a908990618695565b60405180910390a36023546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b158015613c4f57600080fd5b505af1158015613c63573d6000803e3d6000fd5b50506021546040516001600160a01b0390911692507fba96f26bdda53eb8c8ba39045dfb4ff39753fbc7a6edcf250a88e75e78d102fe9150613ca89089908890618695565b60405180910390a260275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015613d0957600080fd5b505af1158015613d1d573d6000803e3d6000fd5b50506023546021546040517f02d5c8990000000000000000000000000000000000000000000000000000000081526001600160a01b0392831694506302d5c8999350613d7592909116908a9089908b906004016186ae565b600060405180830381600087803b158015613d8f57600080fd5b505af1158015613da3573d6000803e3d6000fd5b5050602480546021546040516370a0823160e01b81526001600160a01b03918216600482015260009550911692506370a0823191016111c4565b60606015805480602002602001604051908101604052809291908181526020018280548015610ac8576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311610aaa575050505050905090565b60255460405163ca669fa760e01b81526001600160a01b039091166004820152620186a090600090737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015613e9e57600080fd5b505af1158015613eb2573d6000803e3d6000fd5b5050602554604080516001600160a01b0390921660248301527f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e460448084019190915281518084039091018152606490920181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb39250613f9d9190600401618729565b600060405180830381600087803b158015613fb757600080fd5b505af1158015613fcb573d6000803e3d6000fd5b50506023546026546040517f106e62900000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260248101879052604481018690529116925063106e62909150606401600060405180830381600087803b15801561403f57600080fd5b505af1158015614053573d6000803e3d6000fd5b505050505050565b60006140656181a0565b6140708484836140f9565b9150505b92915050565b6040517f98296c540000000000000000000000000000000000000000000000000000000081526004810183905260248101829052737109709ecfa91a80626ff3989d68f67f5b1dd12d906398296c549060440160006040518083038186803b1580156140e557600080fd5b505afa158015614053573d6000803e3d6000fd5b6000806141068584614174565b90506141696040518060400160405280601d81526020017f4552433139363750726f78792e736f6c3a4552433139363750726f78790000008152508286604051602001614154929190618777565b60405160208183030381529060405285614180565b9150505b9392505050565b600061416d83836141ae565b60c081015151600090156141a45761419d84848460c001516141c9565b905061416d565b61419d848461436f565b60006141ba838361445a565b61416d83836020015184614180565b6000806141d461446a565b905060006141e2868361453d565b905060006141f982606001518360200151856149e3565b9050600061420983838989614bf5565b9050600061421682615a72565b602081015181519192509060030b1561428957898260400151604051602001614240929190618799565b60408051601f19818403018152908290527f08c379a000000000000000000000000000000000000000000000000000000000825261428091600401618729565b60405180910390fd5b60006142cc6040518060400160405280601581526020017f4465706c6f79656420746f20616464726573733a200000000000000000000000815250836001615c41565b6040517fc6ce059d000000000000000000000000000000000000000000000000000000008152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c6ce059d9061431f908490600401618729565b602060405180830381865afa15801561433c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614360919061881a565b9b9a5050505050505050505050565b6040517f8d1cc9250000000000000000000000000000000000000000000000000000000081526000908190737109709ecfa91a80626ff3989d68f67f5b1dd12d90638d1cc925906143c4908790600401618729565b600060405180830381865afa1580156143e1573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052614409919081019061892b565b905060006144378285604051602001614423929190618960565b604051602081830303815290604052615e41565b90506001600160a01b03811661407057848460405160200161424092919061898f565b61446682826000615e54565b5050565b604080518082018252600381527f6f75740000000000000000000000000000000000000000000000000000000000602082015290517fd145736c000000000000000000000000000000000000000000000000000000008152606091737109709ecfa91a80626ff3989d68f67f5b1dd12d91829063d145736c906144f1908490600401618a3a565b600060405180830381865afa15801561450e573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526145369190810190618a81565b9250505090565b61456f6040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b6000737109709ecfa91a80626ff3989d68f67f5b1dd12d90506145ba6040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b6145c385615f57565b602082015260006145d38661633c565b90506000836001600160a01b031663d930a0e66040518163ffffffff1660e01b8152600401600060405180830381865afa158015614615573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261463d9190810190618a81565b868385602001516040516020016146579493929190618aca565b60408051601f19818403018152908290527f60f9bb1100000000000000000000000000000000000000000000000000000000825291506000906001600160a01b038616906360f9bb11906146af908590600401618729565b600060405180830381865afa1580156146cc573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526146f49190810190618a81565b6040517fdb4235f60000000000000000000000000000000000000000000000000000000081529091506001600160a01b0386169063db4235f69061473c908490600401618bce565b602060405180830381865afa158015614759573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061477d9190618c20565b61479257816040516020016142409190618c42565b6040517f49c4fac80000000000000000000000000000000000000000000000000000000081526001600160a01b038616906349c4fac8906147d7908490600401618cd4565b600060405180830381865afa1580156147f4573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261481c9190810190618a81565b84526040517fdb4235f60000000000000000000000000000000000000000000000000000000081526001600160a01b0386169063db4235f690614863908490600401618d26565b602060405180830381865afa158015614880573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906148a49190618c20565b15614939576040517f49c4fac80000000000000000000000000000000000000000000000000000000081526001600160a01b038616906349c4fac8906148ee908490600401618d26565b600060405180830381865afa15801561490b573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526149339190810190618a81565b60408501525b846001600160a01b03166349c4fac882866000015160405160200161495e9190618d78565b6040516020818303038152906040526040518363ffffffff1660e01b815260040161498a929190618de4565b600060405180830381865afa1580156149a7573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526149cf9190810190618a81565b606085015250608083015250949350505050565b60408051600480825260a0820190925260609160009190816020015b60608152602001906001900390816149ff5790505090506040518060400160405280600481526020017f677265700000000000000000000000000000000000000000000000000000000081525081600081518110614a5f57614a5f618e09565b60200260200101819052506040518060400160405280600381526020017f2d726c000000000000000000000000000000000000000000000000000000000081525081600181518110614ab357614ab3618e09565b602002602001018190525084604051602001614acf9190618e38565b60405160208183030381529060405281600281518110614af157614af1618e09565b602002602001018190525082604051602001614b0d9190618ea4565b60405160208183030381529060405281600381518110614b2f57614b2f618e09565b60200260200101819052506000614b4582615a72565b602080820151604080518082018252600581527f2e6a736f6e0000000000000000000000000000000000000000000000000000008185019081528251808401845260008082529086015282518084019093529051825292810192909252919250614bd690604080518082018252600080825260209182015281518083019092528451825280850190820152906165bf565b614beb57856040516020016142409190618ee5565b9695505050505050565b60a0810151604080518082018252600080825260209182015281518083019092528251808352928101910152606090737109709ecfa91a80626ff3989d68f67f5b1dd12d9015614c45565b511590565b614db957826020015115614d01576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605860248201527f54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f742060448201527f62652075736564207768656e207468652060736b6970566572696679536f757260648201527f6365436f646560206f7074696f6e206973206074727565600000000000000000608482015260a401614280565b8260c0015115614db9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605360248201527f54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f742060448201527f62652075736564207768656e207468652060736b69704c6963656e736554797060648201527f6560206f7074696f6e2069732060747275656000000000000000000000000000608482015260a401614280565b6040805160ff8082526120008201909252600091816020015b6060815260200190600190039081614dd257905050905060006040518060400160405280600381526020017f6e70780000000000000000000000000000000000000000000000000000000000815250828280614e2d90618f76565b935060ff1681518110614e4257614e42618e09565b60200260200101819052506040518060400160405280600d81526020017f302e302e312d616c7068612e3700000000000000000000000000000000000000815250604051602001614e939190618f95565b604051602081830303815290604052828280614eae90618f76565b935060ff1681518110614ec357614ec3618e09565b60200260200101819052506040518060400160405280600681526020017f6465706c6f790000000000000000000000000000000000000000000000000000815250828280614f1090618f76565b935060ff1681518110614f2557614f25618e09565b60200260200101819052506040518060400160405280600e81526020017f2d2d636f6e74726163744e616d65000000000000000000000000000000000000815250828280614f7290618f76565b935060ff1681518110614f8757614f87618e09565b60200260200101819052508760200151828280614fa390618f76565b935060ff1681518110614fb857614fb8618e09565b60200260200101819052506040518060400160405280600e81526020017f2d2d636f6e74726163745061746800000000000000000000000000000000000081525082828061500590618f76565b935060ff168151811061501a5761501a618e09565b60209081029190910101528751828261503281618f76565b935060ff168151811061504757615047618e09565b60200260200101819052506040518060400160405280600981526020017f2d2d636861696e4964000000000000000000000000000000000000000000000081525082828061509490618f76565b935060ff16815181106150a9576150a9618e09565b60200260200101819052506150bd46616620565b82826150c881618f76565b935060ff16815181106150dd576150dd618e09565b60200260200101819052506040518060400160405280600f81526020017f2d2d6275696c64496e666f46696c65000000000000000000000000000000000081525082828061512a90618f76565b935060ff168151811061513f5761513f618e09565b60200260200101819052508682828061515790618f76565b935060ff168151811061516c5761516c618e09565b60209081029190910101528551156152935760408051808201909152601581527f2d2d636f6e7374727563746f7242797465636f64650000000000000000000000602082015282826151bd81618f76565b935060ff16815181106151d2576151d2618e09565b60209081029190910101526040517f71aad10d0000000000000000000000000000000000000000000000000000000081526001600160a01b038416906371aad10d90615222908990600401618729565b600060405180830381865afa15801561523f573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526152679190810190618a81565b828261527281618f76565b935060ff168151811061528757615287618e09565b60200260200101819052505b8460200151156153635760408051808201909152601281527f2d2d766572696679536f75726365436f64650000000000000000000000000000602082015282826152dc81618f76565b935060ff16815181106152f1576152f1618e09565b60200260200101819052506040518060400160405280600581526020017f66616c736500000000000000000000000000000000000000000000000000000081525082828061533e90618f76565b935060ff168151811061535357615353618e09565b602002602001018190525061552a565b61539b614c408660a0015160408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b61542e5760408051808201909152600d81527f2d2d6c6963656e73655479706500000000000000000000000000000000000000602082015282826153de81618f76565b935060ff16815181106153f3576153f3618e09565b60200260200101819052508460a001516040516020016154139190618e38565b60405160208183030381529060405282828061533e90618f76565b8460c0015115801561547157506040808901518151808301835260008082526020918201528251808401909352815183529081019082015261546f90511590565b155b1561552a5760408051808201909152600d81527f2d2d6c6963656e73655479706500000000000000000000000000000000000000602082015282826154b581618f76565b935060ff16815181106154ca576154ca618e09565b60200260200101819052506154de886166c0565b6040516020016154ee9190618e38565b60405160208183030381529060405282828061550990618f76565b935060ff168151811061551e5761551e618e09565b60200260200101819052505b6040808601518151808301835260008082526020918201528251808401909352815183529081019082015261555e90511590565b6155f35760408051808201909152600b81527f2d2d72656c617965724964000000000000000000000000000000000000000000602082015282826155a181618f76565b935060ff16815181106155b6576155b6618e09565b602002602001018190525084604001518282806155d290618f76565b935060ff16815181106155e7576155e7618e09565b60200260200101819052505b6060850151156157145760408051808201909152600681527f2d2d73616c7400000000000000000000000000000000000000000000000000006020820152828261563c81618f76565b935060ff168151811061565157615651618e09565b602090810291909101015260608501516040517fb11a19e800000000000000000000000000000000000000000000000000000000815260048101919091526001600160a01b0384169063b11a19e890602401600060405180830381865afa1580156156c0573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526156e89190810190618a81565b82826156f381618f76565b935060ff168151811061570857615708618e09565b60200260200101819052505b60e085015151156157bb5760408051808201909152600a81527f2d2d6761734c696d6974000000000000000000000000000000000000000000006020820152828261575e81618f76565b935060ff168151811061577357615773618e09565b602002602001018190525061578f8560e0015160000151616620565b828261579a81618f76565b935060ff16815181106157af576157af618e09565b60200260200101819052505b60e085015160200151156158655760408051808201909152600a81527f2d2d6761735072696365000000000000000000000000000000000000000000006020820152828261580881618f76565b935060ff168151811061581d5761581d618e09565b60200260200101819052506158398560e0015160200151616620565b828261584481618f76565b935060ff168151811061585957615859618e09565b60200260200101819052505b60e0850151604001511561590f5760408051808201909152600e81527f2d2d6d6178466565506572476173000000000000000000000000000000000000602082015282826158b281618f76565b935060ff16815181106158c7576158c7618e09565b60200260200101819052506158e38560e0015160400151616620565b82826158ee81618f76565b935060ff168151811061590357615903618e09565b60200260200101819052505b60e085015160600151156159b95760408051808201909152601681527f2d2d6d61785072696f72697479466565506572476173000000000000000000006020820152828261595c81618f76565b935060ff168151811061597157615971618e09565b602002602001018190525061598d8560e0015160600151616620565b828261599881618f76565b935060ff16815181106159ad576159ad618e09565b60200260200101819052505b60008160ff1667ffffffffffffffff8111156159d7576159d7618843565b604051908082528060200260200182016040528015615a0a57816020015b60608152602001906001900390816159f55790505b50905060005b8260ff168160ff161015615a6357838160ff1681518110615a3357615a33618e09565b6020026020010151828260ff1681518110615a5057615a50618e09565b6020908102919091010152600101615a10565b5093505050505b949350505050565b615a996040518060600160405280600060030b815260200160608152602001606081525090565b60408051808201825260048082527f6261736800000000000000000000000000000000000000000000000000000000602083015291517fd145736c000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d92600091849163d145736c91615b1f91869101619000565b600060405180830381865afa158015615b3c573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052615b649190810190618a81565b90506000615b7286836171af565b90506000846001600160a01b031663f45c1ce7836040518263ffffffff1660e01b8152600401615ba291906184f9565b6000604051808303816000875af1158015615bc1573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052615be99190810190619047565b805190915060030b15801590615c025750602081015151155b8015615c115750604081015151155b15614beb5781600081518110615c2957615c29618e09565b602002602001015160405160200161424091906190fd565b60606000615c768560408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600080825260209182015281518083019092528651825280870190820152909150615cad9082905b90617304565b15615e0a576000615d2a82615d2484615d1e615cf08a60408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6040805180820182526000808252602091820152815180830190925282518252918201519181019190915290565b9061732b565b9061738d565b604080518082018252600181527f0a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152909150615d8e908290617304565b15615df857604080518082018252600181527f0a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152615df5905b8290617412565b90505b615e0181617438565b9250505061416d565b8215615e235784846040516020016142409291906192e9565b505060408051602081019091526000815261416d565b509392505050565b6000808251602084016000f09392505050565b8160a0015115615e6357505050565b6000615e708484846174a1565b90506000615e7d82615a72565b602081015181519192509060030b158015615f195750604080518082018252600781527f535543434553530000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152615f1990604080518082018252600080825260209182015281518083019092528451825280850190820152615ca7565b15615f2657505050505050565b60408201515115615f465781604001516040516020016142409190619390565b8060405160200161424091906193ee565b60606000615f8c8360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600481527f2e736f6c0000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152909150615ff1905b82906165bf565b1561606057604080518082018252600481527f2e736f6c000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261416d9061605b908390617a3c565b617438565b604080518082018252600181527f3a00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526160c2905b8290617ac6565b60010361618f57604080518082018252600181527f3a000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261612890615dee565b50604080518082018252600181527f3a000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261416d9061605b905b8390617412565b604080518082018252600581527f2e6a736f6e000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526161ee90615fea565b1561632557604080518082018252600181527f2f00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820181905284518086019095529251845283015290616256908390617b60565b9050600081600183516162699190618716565b8151811061627957616279618e09565b6020026020010151905061631c61605b6162ef6040518060400160405280600581526020017f2e6a736f6e00000000000000000000000000000000000000000000000000000081525060408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b60408051808201825260008082526020918201528151808301909252855182528086019082015290617a3c565b95945050505050565b826040516020016142409190619459565b50919050565b606060006163718360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600481527f2e736f6c00000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201529091506163d390615fea565b156163e15761416d81617438565b604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616440906160bb565b6001036164aa57604080518082018252600181527f3a000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261416d9061605b90616188565b604080518082018252600581527f2e6a736f6e0000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261650990615fea565b1561632557604080518082018252600181527f2f00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820181905284518086019095529251845283015290616571908390617b60565b90506001815111156165ad57806002825161658c9190618716565b8151811061659c5761659c618e09565b602002602001015192505050919050565b50826040516020016142409190619459565b8051825160009111156165d457506000614074565b815183516020850151600092916165ea91619537565b6165f49190618716565b90508260200151810361660b576001915050614074565b82516020840151819020912014905092915050565b6060600061662d83617c05565b600101905060008167ffffffffffffffff81111561664d5761664d618843565b6040519080825280601f01601f191660200182016040528015616677576020820181803683370190505b5090508181016020015b600019017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a850494508461668157509392505050565b604081810151815180830183526000808252602091820181905283518085018552835181529282018383015283518085018552600a81527f554e4c4943454e534544000000000000000000000000000000000000000000008184019081528551808701875283815284019290925284518086019095525184529083015260609161674c905b8290617ce7565b1561678c57505060408051808201909152600481527f4e6f6e65000000000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600981527f556e6c6963656e73650000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526167eb90616745565b1561682b57505060408051808201909152600981527f556e6c6963656e736500000000000000000000000000000000000000000000006020820152919050565b604080518082018252600381527f4d495400000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261688a90616745565b156168ca57505060408051808201909152600381527f4d495400000000000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f47504c2d322e302d6f6e6c7900000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261692990616745565b8061698e5750604080518082018252601081527f47504c2d322e302d6f722d6c61746572000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261698e90616745565b156169ce57505060408051808201909152600981527f474e552047504c763200000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f47504c2d332e302d6f6e6c79000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616a2d90616745565b80616a925750604080518082018252601081527f47504c2d332e302d6f722d6c617465720000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616a9290616745565b15616ad257505060408051808201909152600981527f474e552047504c763300000000000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4c47504c2d322e312d6f6e6c790000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616b3190616745565b80616b965750604080518082018252601181527f4c47504c2d322e312d6f722d6c6174657200000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616b9690616745565b15616bd657505060408051808201909152600c81527f474e55204c47504c76322e3100000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4c47504c2d332e302d6f6e6c790000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616c3590616745565b80616c9a5750604080518082018252601181527f4c47504c2d332e302d6f722d6c6174657200000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616c9a90616745565b15616cda57505060408051808201909152600a81527f474e55204c47504c7633000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f4253442d322d436c61757365000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616d3990616745565b15616d7957505060408051808201909152600c81527f4253442d322d436c6175736500000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f4253442d332d436c61757365000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616dd890616745565b15616e1857505060408051808201909152600c81527f4253442d332d436c6175736500000000000000000000000000000000000000006020820152919050565b604080518082018252600781527f4d504c2d322e300000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616e7790616745565b15616eb757505060408051808201909152600781527f4d504c2d322e30000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600781527f4f534c2d332e300000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616f1690616745565b15616f5657505060408051808201909152600781527f4f534c2d332e30000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600a81527f4170616368652d322e300000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616fb590616745565b15616ff557505060408051808201909152600a81527f4170616368652d322e30000000000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4147504c2d332e302d6f6e6c79000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261705490616745565b806170b95750604080518082018252601181527f4147504c2d332e302d6f722d6c61746572000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526170b990616745565b156170f957505060408051808201909152600a81527f474e55204147504c7633000000000000000000000000000000000000000000006020820152919050565b604080518082018252600881527f4255534c2d312e310000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261715890616745565b1561719857505060408051808201909152600781527f42534c20312e31000000000000000000000000000000000000000000000000006020820152919050565b60408084015184519151614240929060200161954a565b60608060005b845181101561723a57818582815181106171d1576171d1618e09565b60200260200101516040516020016171ea929190618960565b6040516020818303038152906040529150600185516172099190618716565b8114617232578160405160200161722091906196b3565b60405160208183030381529060405291505b6001016171b5565b5060408051600380825260808201909252600091816020015b6060815260200190600190039081617253579050509050838160008151811061727e5761727e618e09565b60200260200101819052506040518060400160405280600281526020017f2d63000000000000000000000000000000000000000000000000000000000000815250816001815181106172d2576172d2618e09565b602002602001018190525081816002815181106172f1576172f1618e09565b6020908102919091010152949350505050565b60208083015183518351928401516000936173229291849190617cfb565b14159392505050565b6040805180820190915260008082526020820152600061735d8460000151856020015185600001518660200151617e0c565b905083602001518161736f9190618716565b8451859061737e908390618716565b90525060208401525090919050565b60408051808201909152600080825260208201528151835110156173b2575081614074565b60208083015190840151600191146173d95750815160208481015190840151829020919020145b801561740a578251845185906173f0908390618716565b9052508251602085018051617406908390619537565b9052505b509192915050565b6040805180820190915260008082526020820152617431838383617f2c565b5092915050565b60606000826000015167ffffffffffffffff81111561745957617459618843565b6040519080825280601f01601f191660200182016040528015617483576020820181803683370190505b50905060006020820190506174318185602001518660000151617fd7565b606060006174ad61446a565b6040805160ff808252612000820190925291925060009190816020015b60608152602001906001900390816174ca57905050905060006040518060400160405280600381526020017f6e7078000000000000000000000000000000000000000000000000000000000081525082828061752590618f76565b935060ff168151811061753a5761753a618e09565b60200260200101819052506040518060400160405280600781526020017f5e312e33322e330000000000000000000000000000000000000000000000000081525060405160200161758b91906196f4565b6040516020818303038152906040528282806175a690618f76565b935060ff16815181106175bb576175bb618e09565b60200260200101819052506040518060400160405280600881526020017f76616c696461746500000000000000000000000000000000000000000000000081525082828061760890618f76565b935060ff168151811061761d5761761d618e09565b6020026020010181905250826040516020016176399190618ea4565b60405160208183030381529060405282828061765490618f76565b935060ff168151811061766957617669618e09565b60200260200101819052506040518060400160405280600a81526020017f2d2d636f6e7472616374000000000000000000000000000000000000000000008152508282806176b690618f76565b935060ff16815181106176cb576176cb618e09565b60200260200101819052506176e08784618051565b82826176eb81618f76565b935060ff168151811061770057617700618e09565b6020908102919091010152855151156177ac5760408051808201909152600b81527f2d2d7265666572656e63650000000000000000000000000000000000000000006020820152828261775281618f76565b935060ff168151811061776757617767618e09565b6020026020010181905250617780866000015184618051565b828261778b81618f76565b935060ff16815181106177a0576177a0618e09565b60200260200101819052505b85608001511561781a5760408051808201909152601881527f2d2d756e73616665536b697053746f72616765436865636b0000000000000000602082015282826177f581618f76565b935060ff168151811061780a5761780a618e09565b6020026020010181905250617880565b84156178805760408051808201909152601281527f2d2d726571756972655265666572656e636500000000000000000000000000006020820152828261785f81618f76565b935060ff168151811061787457617874618e09565b60200260200101819052505b6040860151511561791c5760408051808201909152600d81527f2d2d756e73616665416c6c6f7700000000000000000000000000000000000000602082015282826178ca81618f76565b935060ff16815181106178df576178df618e09565b602002602001018190525085604001518282806178fb90618f76565b935060ff168151811061791057617910618e09565b60200260200101819052505b8560600151156179865760408051808201909152601481527f2d2d756e73616665416c6c6f7752656e616d65730000000000000000000000006020820152828261796581618f76565b935060ff168151811061797a5761797a618e09565b60200260200101819052505b60008160ff1667ffffffffffffffff8111156179a4576179a4618843565b6040519080825280602002602001820160405280156179d757816020015b60608152602001906001900390816179c25790505b50905060005b8260ff168160ff161015617a3057838160ff1681518110617a0057617a00618e09565b6020026020010151828260ff1681518110617a1d57617a1d618e09565b60209081029190910101526001016179dd565b50979650505050505050565b6040805180820190915260008082526020820152815183511015617a61575081614074565b81518351602085015160009291617a7791619537565b617a819190618716565b60208401519091506001908214617aa2575082516020840151819020908220145b8015617abd57835185518690617ab9908390618716565b9052505b50929392505050565b6000808260000151617aea8560000151866020015186600001518760200151617e0c565b617af49190619537565b90505b83516020850151617b089190619537565b81116174315781617b1881619739565b9250508260000151617b4f856020015183617b339190618716565b8651617b3f9190618716565b8386600001518760200151617e0c565b617b599190619537565b9050617af7565b60606000617b6e8484617ac6565b617b79906001619537565b67ffffffffffffffff811115617b9157617b91618843565b604051908082528060200260200182016040528015617bc457816020015b6060815260200190600190039081617baf5790505b50905060005b8151811015615e3957617be061605b8686617412565b828281518110617bf257617bf2618e09565b6020908102919091010152600101617bca565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310617c4e577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310617c7a576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc100008310617c9857662386f26fc10000830492506010015b6305f5e1008310617cb0576305f5e100830492506008015b6127108310617cc457612710830492506004015b60648310617cd6576064830492506002015b600a83106140745760010192915050565b6000617cf38383618091565b159392505050565b600080858411617e025760208411617dae5760008415617d46576001617d22866020618716565b617d2d906008619753565b617d38906002619851565b617d429190618716565b1990505b8351811685617d558989619537565b617d5f9190618716565b805190935082165b818114617d9957878411617d815787945050505050615a6a565b83617d8b8161985d565b945050828451169050617d67565b617da38785619537565b945050505050615a6a565b838320617dbb8588618716565b617dc59087619537565b91505b858210617e0057848220808203617ded57617de38684619537565b9350505050615a6a565b617df8600184618716565b925050617dc8565b505b5092949350505050565b60008381868511617f175760208511617ec65760008515617e58576001617e34876020618716565b617e3f906008619753565b617e4a906002619851565b617e549190618716565b1990505b84518116600087617e698b8b619537565b617e739190618716565b855190915083165b828114617eb857818610617ea057617e938b8b619537565b9650505050505050615a6a565b85617eaa81619739565b965050838651169050617e7b565b859650505050505050615a6a565b508383206000905b617ed88689618716565b8211617f1557858320808203617ef45783945050505050615a6a565b617eff600185619537565b9350508180617f0d90619739565b925050617ece565b505b617f218787619537565b979650505050505050565b60408051808201909152600080825260208201526000617f5e8560000151866020015186600001518760200151617e0c565b602080870180519186019190915251909150617f7a9082618716565b835284516020860151617f8d9190619537565b8103617f9c5760008552617fce565b83518351617faa9190619537565b85518690617fb9908390618716565b9052508351617fc89082619537565b60208601525b50909392505050565b6020811061800f5781518352617fee602084619537565b9250617ffb602083619537565b9150618008602082618716565b9050617fd7565b600019811561803e576001618025836020618716565b61803190610100619851565b61803b9190618716565b90505b9151835183169219169190911790915250565b6060600061805f848461453d565b805160208083015160405193945061807993909101619874565b60405160208183030381529060405291505092915050565b81518151600091908111156180a4575081515b6020808501519084015160005b8381101561815d578251825180821461812d57600019602087101561810c576001846180de896020618716565b6180e89190619537565b6180f3906008619753565b6180fe906002619851565b6181089190618716565b1990505b818116838216818103911461812a5797506140749650505050505050565b50505b618138602086619537565b9450618145602085619537565b935050506020816181569190619537565b90506180b1565b5084518651614beb91906198cc565b610c9f806198ed83390190565b6116fe8061a58c83390190565b6116638061bc8a83390190565b610d5e8061d2ed83390190565b6040518060e001604052806060815260200160608152602001606081526020016000151581526020016000151581526020016000151581526020016181e36181e8565b905290565b604051806101000160405280600015158152602001600015158152602001606081526020016000801916815260200160608152602001606081526020016000151581526020016181e36040518060800160405280600081526020016000815260200160008152602001600081525090565b602080825282518282018190526000918401906040840190835b8181101561829a5783516001600160a01b0316835260209384019390920191600101618273565b509095945050505050565b60005b838110156182c05781810151838201526020016182a8565b50506000910152565b600081518084526182e18160208601602086016182a5565b601f01601f19169290920160200192915050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b828110156183f1577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452815180516001600160a01b03168652602090810151604082880181905281519088018190529101906060600582901b88018101919088019060005b818110156183d7577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa08a85030183526183c18486516182c9565b6020958601959094509290920191600101618387565b50919750505060209485019492909201915060010161831d565b50929695505050505050565b600081518084526020840193506020830160005b828110156184515781517fffffffff0000000000000000000000000000000000000000000000000000000016865260209586019590910190600101618411565b5093949350505050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b828110156183f1577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc087860301845281518051604087526184c760408801826182c9565b90506020820151915086810360208801526184e281836183fd565b965050506020938401939190910190600101618483565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b828110156183f1577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc087860301845261855b8583516182c9565b94506020938401939190910190600101618521565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b828110156183f1577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc087860301845281516001600160a01b03815116865260208101519050604060208701526185f160408701826183fd565b9550506020938401939190910190600101618598565b600181811c9082168061861b57607f821691505b602082108103616336577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006020828403121561866657600080fd5b5051919050565b6001600160a01b038416815282602082015260606040820152600061631c60608301846182c9565b828152604060208201526000615a6a60408301846182c9565b6001600160a01b03851681528360208201526080604082015260006186d660808301856182c9565b905082606083015295945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b81810381811115614074576140746186e7565b60208152600061416d60208301846182c9565b600082618772577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b6001600160a01b0383168152604060208201526000615a6a60408301846182c9565b7f4661696c656420746f206465706c6f7920636f6e7472616374200000000000008152600083516187d181601a8501602088016182a5565b7f3a20000000000000000000000000000000000000000000000000000000000000601a91840191820152835161880e81601c8401602088016182a5565b01601c01949350505050565b60006020828403121561882c57600080fd5b81516001600160a01b038116811461416d57600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040516060810167ffffffffffffffff8111828210171561889557618895618843565b60405290565b60008067ffffffffffffffff8411156188b6576188b6618843565b50604051601f19601f85018116603f0116810181811067ffffffffffffffff821117156188e5576188e5618843565b6040528381529050808284018510156188fd57600080fd5b615e398460208301856182a5565b600082601f83011261891c57600080fd5b61416d8383516020850161889b565b60006020828403121561893d57600080fd5b815167ffffffffffffffff81111561895457600080fd5b6140708482850161890b565b600083516189728184602088016182a5565b8351908301906189868183602088016182a5565b01949350505050565b7f4661696c656420746f206465706c6f7920636f6e7472616374200000000000008152600083516189c781601a8501602088016182a5565b7f207573696e6720636f6e7374727563746f722064617461202200000000000000601a918401918201528351618a048160338401602088016182a5565b7f220000000000000000000000000000000000000000000000000000000000000060339290910191820152603401949350505050565b60408152600b60408201527f464f554e4452595f4f5554000000000000000000000000000000000000000000606082015260806020820152600061416d60808301846182c9565b600060208284031215618a9357600080fd5b815167ffffffffffffffff811115618aaa57600080fd5b8201601f81018413618abb57600080fd5b6140708482516020840161889b565b60008551618adc818460208a016182a5565b7f2f000000000000000000000000000000000000000000000000000000000000009083019081528551618b16816001840160208a016182a5565b7f2f00000000000000000000000000000000000000000000000000000000000000600192909101918201528451618b548160028401602089016182a5565b6001818301019150507f2f0000000000000000000000000000000000000000000000000000000000000060018201528351618b968160028401602088016182a5565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600292909101918201526007019695505050505050565b604081526000618be160408301846182c9565b8281036020840152600481527f2e6173740000000000000000000000000000000000000000000000000000000060208201526040810191505092915050565b600060208284031215618c3257600080fd5b8151801515811461416d57600080fd5b7f436f756c64206e6f742066696e642041535420696e2061727469666163742000815260008251618c7a81601f8501602087016182a5565b7f2e205365742060617374203d20747275656020696e20666f756e6472792e746f601f9390910192830152507f6d6c000000000000000000000000000000000000000000000000000000000000603f820152604101919050565b604081526000618ce760408301846182c9565b8281036020840152601181527f2e6173742e6162736f6c7574655061746800000000000000000000000000000060208201526040810191505092915050565b604081526000618d3960408301846182c9565b8281036020840152600c81527f2e6173742e6c6963656e7365000000000000000000000000000000000000000060208201526040810191505092915050565b7f2e6d657461646174612e736f75726365732e5b27000000000000000000000000815260008251618db08160148501602087016182a5565b7f275d2e6b656363616b32353600000000000000000000000000000000000000006014939091019283015250602001919050565b604081526000618df760408301856182c9565b828103602084015261416981856182c9565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f2200000000000000000000000000000000000000000000000000000000000000815260008251618e708160018501602087016182a5565b7f22000000000000000000000000000000000000000000000000000000000000006001939091019283015250600201919050565b60008251618eb68184602087016182a5565b7f2f6275696c642d696e666f000000000000000000000000000000000000000000920191825250600b01919050565b7f436f756c64206e6f742066696e64206275696c642d696e666f2066696c65207781527f697468206d61746368696e6720736f7572636520636f6465206861736820666f60208201527f7220636f6e747261637420000000000000000000000000000000000000000000604082015260008251618f6981604b8501602087016182a5565b91909101604b0192915050565b600060ff821660ff8103618f8c57618f8c6186e7565b60010192915050565b7f406f70656e7a657070656c696e2f646566656e6465722d6465706c6f792d636c81527f69656e742d636c69400000000000000000000000000000000000000000000000602082015260008251618ff38160298501602087016182a5565b9190910160290192915050565b60408152601660408201527f4f50454e5a455050454c494e5f424153485f5041544800000000000000000000606082015260806020820152600061416d60808301846182c9565b60006020828403121561905957600080fd5b815167ffffffffffffffff81111561907057600080fd5b82016060818503121561908257600080fd5b61908a618872565b81518060030b811461909b57600080fd5b8152602082015167ffffffffffffffff8111156190b757600080fd5b6190c38682850161890b565b602083015250604082015167ffffffffffffffff8111156190e357600080fd5b6190ef8682850161890b565b604083015250949350505050565b7f4661696c656420746f2072756e206261736820636f6d6d616e6420776974682081527f220000000000000000000000000000000000000000000000000000000000000060208201526000825161915b8160218501602087016182a5565b7f222e20496620796f7520617265207573696e672057696e646f77732c2073657460219390910192830152507f20746865204f50454e5a455050454c494e5f424153485f5041544820656e766960418201527f726f6e6d656e74207661726961626c6520746f207468652066756c6c7920717560618201527f616c69666965642070617468206f66207468652062617368206578656375746160818201527f626c652e20466f72206578616d706c652c20696620796f75206172652075736960a18201527f6e672047697420666f722057696e646f77732c206164642074686520666f6c6c60c18201527f6f77696e67206c696e6520696e20746865202e656e762066696c65206f66207960e18201527f6f75722070726f6a65637420287573696e6720666f727761726420736c6173686101018201527f6573293a0a4f50454e5a455050454c494e5f424153485f504154483d22433a2f6101218201527f50726f6772616d2046696c65732f4769742f62696e2f6261736822000000000061014182015261015c01919050565b7f4661696c656420746f2066696e64206c696e652077697468207072656669782081527f27000000000000000000000000000000000000000000000000000000000000006020820152600083516193478160218501602088016182a5565b7f2720696e206f75747075743a2000000000000000000000000000000000000000602191840191820152835161938481602e8401602088016182a5565b01602e01949350505050565b7f4661696c656420746f2072756e2075706772616465207361666574792076616c81527f69646174696f6e3a200000000000000000000000000000000000000000000000602082015260008251618ff38160298501602087016182a5565b7f55706772616465207361666574792076616c69646174696f6e206661696c656481527f3a0a00000000000000000000000000000000000000000000000000000000000060208201526000825161944c8160228501602087016182a5565b9190910160220192915050565b7f436f6e7472616374206e616d652000000000000000000000000000000000000081526000825161949181600e8501602087016182a5565b7f206d75737420626520696e2074686520666f726d6174204d79436f6e74726163600e9390910192830152507f742e736f6c3a4d79436f6e7472616374206f72204d79436f6e74726163742e73602e8201527f6f6c206f72206f75742f4d79436f6e74726163742e736f6c2f4d79436f6e7472604e8201527f6163742e6a736f6e000000000000000000000000000000000000000000000000606e820152607601919050565b80820180821115614074576140746186e7565b7f53504458206c6963656e7365206964656e7469666965722000000000000000008152600083516195828160188501602088016182a5565b7f20696e200000000000000000000000000000000000000000000000000000000060189184019182015283516195bf81601c8401602088016182a5565b7f20646f6573206e6f74206c6f6f6b206c696b65206120737570706f7274656420601c92909101918201527f6c6963656e736520666f7220626c6f636b206578706c6f726572207665726966603c8201527f69636174696f6e2e205573652074686520606c6963656e73655479706560206f605c8201527f7074696f6e20746f20737065636966792061206c6963656e736520747970652c607c8201527f206f7220736574207468652060736b69704c6963656e73655479706560206f70609c8201527f74696f6e20746f2060747275656020746f20736b69702e00000000000000000060bc82015260d301949350505050565b600082516196c58184602087016182a5565b7f2000000000000000000000000000000000000000000000000000000000000000920191825250600101919050565b7f406f70656e7a657070656c696e2f75706772616465732d636f7265400000000081526000825161972c81601c8501602087016182a5565b91909101601c0192915050565b6000600019820361974c5761974c6186e7565b5060010190565b8082028115828204841417614074576140746186e7565b6001815b60018411156197a557808504811115619789576197896186e7565b600184161561979757908102905b60019390931c92800261976e565b935093915050565b6000826197bc57506001614074565b816197c957506000614074565b81600181146197df57600281146197e957619805565b6001915050614074565b60ff8411156197fa576197fa6186e7565b50506001821b614074565b5060208310610133831016604e8410600b8410161715619828575081810a614074565b619835600019848461976a565b8060001904821115619849576198496186e7565b029392505050565b600061416d83836197ad565b60008161986c5761986c6186e7565b506000190190565b600083516198868184602088016182a5565b7f3a0000000000000000000000000000000000000000000000000000000000000090830190815283516198c08160018401602088016182a5565b01600101949350505050565b8181036000831280158383131683831282161715617431576174316186e756fe608060405234801561001057600080fd5b50604051610c9f380380610c9f83398101604081905261002f9161010d565b8181600361003d83826101ff565b50600461004a82826101ff565b50505050506102bd565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261007b57600080fd5b81516001600160401b0381111561009457610094610054565b604051601f8201601f19908116603f011681016001600160401b03811182821017156100c2576100c2610054565b6040528181528382016020018510156100da57600080fd5b60005b828110156100f9576020818601810151838301820152016100dd565b506000918101602001919091529392505050565b6000806040838503121561012057600080fd5b82516001600160401b0381111561013657600080fd5b6101428582860161006a565b602085015190935090506001600160401b0381111561016057600080fd5b61016c8582860161006a565b9150509250929050565b600181811c9082168061018a57607f821691505b6020821081036101aa57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156101fa57806000526020600020601f840160051c810160208510156101d75750805b601f840160051c820191505b818110156101f757600081556001016101e3565b50505b505050565b81516001600160401b0381111561021857610218610054565b61022c816102268454610176565b846101b0565b6020601f82116001811461026057600083156102485750848201515b600019600385901b1c1916600184901b1784556101f7565b600084815260208120601f198516915b828110156102905787850151825560209485019460019092019101610270565b50848210156102ae5786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b6109d3806102cc6000396000f3fe608060405234801561001057600080fd5b50600436106100be5760003560e01c806340c10f191161007657806395d89b411161005b57806395d89b4114610183578063a9059cbb1461018b578063dd62ed3e1461019e57600080fd5b806340c10f191461013857806370a082311461014d57600080fd5b806318160ddd116100a757806318160ddd1461010457806323b872dd14610116578063313ce5671461012957600080fd5b806306fdde03146100c3578063095ea7b3146100e1575b600080fd5b6100cb6101e4565b6040516100d891906107bf565b60405180910390f35b6100f46100ef366004610854565b610276565b60405190151581526020016100d8565b6002545b6040519081526020016100d8565b6100f461012436600461087e565b610290565b604051601281526020016100d8565b61014b610146366004610854565b6102b4565b005b61010861015b3660046108bb565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6100cb6102c2565b6100f4610199366004610854565b6102d1565b6101086101ac3660046108dd565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6060600380546101f390610910565b80601f016020809104026020016040519081016040528092919081815260200182805461021f90610910565b801561026c5780601f106102415761010080835404028352916020019161026c565b820191906000526020600020905b81548152906001019060200180831161024f57829003601f168201915b5050505050905090565b6000336102848185856102df565b60019150505b92915050565b60003361029e8582856102f1565b6102a98585856103c5565b506001949350505050565b6102be8282610470565b5050565b6060600480546101f390610910565b6000336102848185856103c5565b6102ec83838360016104cc565b505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146103bf57818110156103b0576040517ffb8f41b200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416600482015260248101829052604481018390526064015b60405180910390fd5b6103bf848484840360006104cc565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8316610415576040517f96c6fd1e000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff8216610465576040517fec442f05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b6102ec838383610614565b73ffffffffffffffffffffffffffffffffffffffff82166104c0576040517fec442f05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b6102be60008383610614565b73ffffffffffffffffffffffffffffffffffffffff841661051c576040517fe602df05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff831661056c576040517f94280d62000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260016020908152604080832093871683529290522082905580156103bf578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161060691815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff831661064c5780600260008282546106419190610963565b909155506106fe9050565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260208190526040902054818110156106d2576040517fe450d38c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8516600482015260248101829052604481018390526064016103a7565b73ffffffffffffffffffffffffffffffffffffffff841660009081526020819052604090209082900390555b73ffffffffffffffffffffffffffffffffffffffff821661072757600280548290039055610753565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090208054820190555b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516107b291815260200190565b60405180910390a3505050565b602081526000825180602084015260005b818110156107ed57602081860181015160408684010152016107d0565b5060006040828501015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011684010191505092915050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461084f57600080fd5b919050565b6000806040838503121561086757600080fd5b6108708361082b565b946020939093013593505050565b60008060006060848603121561089357600080fd5b61089c8461082b565b92506108aa6020850161082b565b929592945050506040919091013590565b6000602082840312156108cd57600080fd5b6108d68261082b565b9392505050565b600080604083850312156108f057600080fd5b6108f98361082b565b91506109076020840161082b565b90509250929050565b600181811c9082168061092457607f821691505b60208210810361095d577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b8082018082111561028a577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea26469706673582212207e804ca539d49155d2b6bc19268ce22f9f857027c75247d69fb0d56a089c93d464736f6c634300081a003360a060405234801561001057600080fd5b506040516116fe3803806116fe83398101604081905261002f916101e5565b60016000556002805460ff191690556001600160a01b038316158061005b57506001600160a01b038216155b8061006d57506001600160a01b038116155b1561008b5760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b0383166080526100a3600082610134565b506100ce7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a82610134565b506100f97f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e483610134565b506101126000805160206116de83398151915282610134565b5061012b6000805160206116de83398151915283610134565b50505050610228565b60008281526001602090815260408083206001600160a01b038516845290915281205460ff166101bf5760008381526001602081815260408084206001600160a01b0387168086529252808420805460ff19169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45060016101c3565b5060005b92915050565b80516001600160a01b03811681146101e057600080fd5b919050565b6000806000606084860312156101fa57600080fd5b610203846101c9565b9250610211602085016101c9565b915061021f604085016101c9565b90509250925092565b60805161147f61025f6000396000818161019e0152818161050001528181610562015281816108f70152610959015261147f6000f3fe608060405234801561001057600080fd5b506004361061016c5760003560e01c806385f438c1116100cd578063c8a0236211610081578063d936547e11610066578063d936547e14610355578063d9caed1214610378578063e63ab1e91461038b57600080fd5b8063c8a023621461032f578063d547741f1461034257600080fd5b80639a590427116100b25780639a590427146103015780639b19251a14610314578063a217fddf1461032757600080fd5b806385f438c11461029457806391d14854146102bb57600080fd5b806336568abe11610124578063570618e111610109578063570618e11461025a5780635c975abb146102815780638456cb591461028c57600080fd5b806336568abe1461023f5780633f4ba83a1461025257600080fd5b806321fc65f21161015557806321fc65f2146101e5578063248a9ca3146101fa5780632f2ff15d1461022c57600080fd5b806301ffc9a714610171578063116191b614610199575b600080fd5b61018461017f36600461118a565b6103b2565b60405190151581526020015b60405180910390f35b6101c07f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610190565b6101f86101f33660046111f5565b61044b565b005b61021e610208366004611292565b6000908152600160208190526040909120015490565b604051908152602001610190565b6101f861023a3660046112ab565b61064c565b6101f861024d3660046112ab565b610678565b6101f86106d6565b61021e7f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a81565b60025460ff16610184565b6101f861070b565b61021e7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b6101846102c93660046112ab565b600091825260016020908152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b6101f861030f3660046112d7565b61073d565b6101f86103223660046112d7565b6107be565b61021e600081565b6101f861033d3660046111f5565b610842565b6101f86103503660046112ab565b610a29565b6101846103633660046112d7565b60036020526000908152604090205460ff1681565b6101f86103863660046112f2565b610a4f565b61021e7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061044557507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b610453610b7b565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461047d81610bbe565b610485610bc8565b73ffffffffffffffffffffffffffffffffffffffff861660009081526003602052604090205460ff166104e4576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61052573ffffffffffffffffffffffffffffffffffffffff87167f000000000000000000000000000000000000000000000000000000000000000086610c07565b6040517f5131ab5900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690635131ab599061059f9089908990899089908990600401611378565b600060405180830381600087803b1580156105b957600080fd5b505af11580156105cd573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167f85b5be9cf454e05e0bddf49315178102227c312078eefa3c00294fb4d912ae4e868686604051610632939291906113d5565b60405180910390a3506106456001600055565b5050505050565b6000828152600160208190526040909120015461066881610bbe565b6106728383610c94565b50505050565b73ffffffffffffffffffffffffffffffffffffffff811633146106c7576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6106d18282610d41565b505050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61070081610bbe565b610708610de2565b50565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61073581610bbe565b610708610e41565b7f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a61076781610bbe565b73ffffffffffffffffffffffffffffffffffffffff8216600081815260036020526040808220805460ff19169055517f51085ddf9ebdded84b76e829eb58c4078e4b5bdf97d9a94723f336039da467919190a25050565b7f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a6107e881610bbe565b73ffffffffffffffffffffffffffffffffffffffff8216600081815260036020526040808220805460ff19166001179055517faab7954e9d246b167ef88aeddad35209ca2489d95a8aeb59e288d9b19fae5a549190a25050565b61084a610b7b565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461087481610bbe565b61087c610bc8565b73ffffffffffffffffffffffffffffffffffffffff861660009081526003602052604090205460ff166108db576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61091c73ffffffffffffffffffffffffffffffffffffffff87167f000000000000000000000000000000000000000000000000000000000000000086610c07565b6040517fb8969bd400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063b8969bd4906109969089908990899089908990600401611378565b600060405180830381600087803b1580156109b057600080fd5b505af11580156109c4573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fb9d4efa96044e5f5e03e696fa9ae2ff66911cc27e8a637c3627c75bc5b2241c8868686604051610632939291906113d5565b60008281526001602081905260409091200154610a4581610bbe565b6106728383610d41565b610a57610b7b565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e4610a8181610bbe565b610a89610bc8565b73ffffffffffffffffffffffffffffffffffffffff841660009081526003602052604090205460ff16610ae8576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610b0973ffffffffffffffffffffffffffffffffffffffff85168484610c07565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f9b1bfa7fa9ee420a16e124f794c35ac9f90472acc99140eb2f6447c714cad8eb84604051610b6891815260200190565b60405180910390a3506106d16001600055565b600260005403610bb7576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b6107088133610e7e565b60025460ff1615610c05576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6040805173ffffffffffffffffffffffffffffffffffffffff8416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb000000000000000000000000000000000000000000000000000000001790526106d1908490610f0f565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff16610d3957600083815260016020818152604080842073ffffffffffffffffffffffffffffffffffffffff87168086529252808420805460ff19169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a4506001610445565b506000610445565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff1615610d3957600083815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff86168085529252808320805460ff1916905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a4506001610445565b610dea610fa5565b6002805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b610e49610bc8565b6002805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258610e173390565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16610f0b576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82166004820152602481018390526044015b60405180910390fd5b5050565b6000610f3173ffffffffffffffffffffffffffffffffffffffff841683610fe1565b90508051600014158015610f56575080806020019051810190610f5491906113f8565b155b156106d1576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84166004820152602401610f02565b60025460ff16610c05576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6060610fef83836000610ff6565b9392505050565b606081471015611034576040517fcd786059000000000000000000000000000000000000000000000000000000008152306004820152602401610f02565b6000808573ffffffffffffffffffffffffffffffffffffffff16848660405161105d919061141a565b60006040518083038185875af1925050503d806000811461109a576040519150601f19603f3d011682016040523d82523d6000602084013e61109f565b606091505b50915091506110af8683836110b9565b9695505050505050565b6060826110ce576110c982611148565b610fef565b81511580156110f2575073ffffffffffffffffffffffffffffffffffffffff84163b155b15611141576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85166004820152602401610f02565b5080610fef565b8051156111585780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006020828403121561119c57600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610fef57600080fd5b803573ffffffffffffffffffffffffffffffffffffffff811681146111f057600080fd5b919050565b60008060008060006080868803121561120d57600080fd5b611216866111cc565b9450611224602087016111cc565b935060408601359250606086013567ffffffffffffffff81111561124757600080fd5b8601601f8101881361125857600080fd5b803567ffffffffffffffff81111561126f57600080fd5b88602082840101111561128157600080fd5b959894975092955050506020019190565b6000602082840312156112a457600080fd5b5035919050565b600080604083850312156112be57600080fd5b823591506112ce602084016111cc565b90509250929050565b6000602082840312156112e957600080fd5b610fef826111cc565b60008060006060848603121561130757600080fd5b611310846111cc565b925061131e602085016111cc565b929592945050506040919091013590565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff8616815273ffffffffffffffffffffffffffffffffffffffff851660208201528360408201526080606082015260006113ca60808301848661132f565b979650505050505050565b8381526040602082015260006113ef60408301848661132f565b95945050505050565b60006020828403121561140a57600080fd5b81518015158114610fef57600080fd5b6000825160005b8181101561143b5760208186018101518583015201611421565b50600092019182525091905056fea26469706673582212202f3991d39315b7c0e5ef6fd88336a0f791f8e1cce0a70cb66f2c4c9404215ae364736f6c634300081a00338619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a60c060405234801561001057600080fd5b5060405161166338038061166383398101604081905261002f9161021a565b60016000819055805460ff19169055838383836001600160a01b038416158061005f57506001600160a01b038316155b8061007157506001600160a01b038216155b8061008357506001600160a01b038116155b156100a15760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b03808516608052831660a0526100bf60008261014e565b506100ea7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e48361014e565b506101157f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb8361014e565b506101407f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a8261014e565b50505050505050505061026e565b60008281526002602090815260408083206001600160a01b038516845290915281205460ff166101f45760008381526002602090815260408083206001600160a01b03861684529091529020805460ff191660011790556101ac3390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45060016101f8565b5060005b92915050565b80516001600160a01b038116811461021557600080fd5b919050565b6000806000806080858703121561023057600080fd5b610239856101fe565b9350610247602086016101fe565b9250610255604086016101fe565b9150610263606086016101fe565b905092959194509250565b60805160a05161138a6102d9600039600081816101f701528181610474015281816105250152818161063f015281816107d30152818161088401526109520152600081816101ab01528181610496015281816104f8015281816107f50152610857015261138a6000f3fe608060405234801561001057600080fd5b50600436106101515760003560e01c80635c975abb116100cd57806391d1485411610081578063a783c78911610066578063a783c78914610326578063d547741f1461034d578063e63ab1e91461036057600080fd5b806391d14854146102d8578063a217fddf1461031e57600080fd5b8063743e0c9b116100b2578063743e0c9b146102965780638456cb59146102a957806385f438c1146102b157600080fd5b80635c975abb146102785780635e3e9fef1461028357600080fd5b806321e093b1116101245780632f2ff15d116101095780632f2ff15d1461024a57806336568abe1461025d5780633f4ba83a1461027057600080fd5b806321e093b1146101f2578063248a9ca31461021957600080fd5b806301ffc9a71461015657806302d5c8991461017e578063106e629014610193578063116191b6146101a6575b600080fd5b6101696101643660046110c5565b610387565b60405190151581526020015b60405180910390f35b61019161018c366004611130565b610420565b005b6101916101a13660046111c2565b6105eb565b6101cd7f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610175565b6101cd7f000000000000000000000000000000000000000000000000000000000000000081565b61023c6102273660046111f5565b60009081526002602052604090206001015490565b604051908152602001610175565b61019161025836600461120e565b6106c6565b61019161026b36600461120e565b6106f1565b61019161074a565b60015460ff16610169565b610191610291366004611130565b61077f565b6101916102a43660046111f5565b610930565b61019161097a565b61023c7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b6101696102e636600461120e565b600091825260026020908152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b61023c600081565b61023c7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb81565b61019161035b36600461120e565b6109ac565b61023c7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061041a57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b6104286109d1565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461045281610a14565b61045a610a1e565b6104bb73ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000167f000000000000000000000000000000000000000000000000000000000000000087610a5d565b6040517fb8969bd400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063b8969bd490610555907f0000000000000000000000000000000000000000000000000000000000000000908a908a908a908a90600401611283565b600060405180830381600087803b15801561056f57600080fd5b505af1158015610583573d6000803e3d6000fd5b505050508573ffffffffffffffffffffffffffffffffffffffff167fba96f26bdda53eb8c8ba39045dfb4ff39753fbc7a6edcf250a88e75e78d102fe8686866040516105d1939291906112e0565b60405180910390a2506105e46001600055565b5050505050565b6105f36109d1565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461061d81610a14565b610625610a1e565b61066673ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168585610a5d565b8373ffffffffffffffffffffffffffffffffffffffff167f884edad9ce6fa2440d8a54cc123490eb96d2768479d49ff9c7366125a9424364846040516106ae91815260200190565b60405180910390a2506106c16001600055565b505050565b6000828152600260205260409020600101546106e181610a14565b6106eb8383610ade565b50505050565b73ffffffffffffffffffffffffffffffffffffffff81163314610740576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6106c18282610bde565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61077481610a14565b61077c610c9d565b50565b6107876109d1565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e46107b181610a14565b6107b9610a1e565b61081a73ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000167f000000000000000000000000000000000000000000000000000000000000000087610a5d565b6040517f5131ab5900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690635131ab59906108b4907f0000000000000000000000000000000000000000000000000000000000000000908a908a908a908a90600401611283565b600060405180830381600087803b1580156108ce57600080fd5b505af11580156108e2573d6000803e3d6000fd5b505050508573ffffffffffffffffffffffffffffffffffffffff167f7772f56296d3a5202974a45c61c9188d844ab4d6eeb18c851e4b8d5384ca6ced8686866040516105d1939291906112e0565b610938610a1e565b61077c73ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016333084610d1a565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a6109a481610a14565b61077c610d60565b6000828152600260205260409020600101546109c781610a14565b6106eb8383610bde565b600260005403610a0d576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b61077c8133610db9565b60015460ff1615610a5b576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b60405173ffffffffffffffffffffffffffffffffffffffff8381166024830152604482018390526106c191859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050610e4a565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff16610bd657600083815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff86168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055610b743390565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a450600161041a565b50600061041a565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff1615610bd657600083815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8616808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a450600161041a565b610ca5610ee0565b600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b60405173ffffffffffffffffffffffffffffffffffffffff84811660248301528381166044830152606482018390526106eb9186918216906323b872dd90608401610a97565b610d68610a1e565b600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016811790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25833610cf0565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16610e46576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82166004820152602481018390526044015b60405180910390fd5b5050565b6000610e6c73ffffffffffffffffffffffffffffffffffffffff841683610f1c565b90508051600014158015610e91575080806020019051810190610e8f9190611303565b155b156106c1576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84166004820152602401610e3d565b60015460ff16610a5b576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6060610f2a83836000610f31565b9392505050565b606081471015610f6f576040517fcd786059000000000000000000000000000000000000000000000000000000008152306004820152602401610e3d565b6000808573ffffffffffffffffffffffffffffffffffffffff168486604051610f989190611325565b60006040518083038185875af1925050503d8060008114610fd5576040519150601f19603f3d011682016040523d82523d6000602084013e610fda565b606091505b5091509150610fea868383610ff4565b9695505050505050565b6060826110095761100482611083565b610f2a565b815115801561102d575073ffffffffffffffffffffffffffffffffffffffff84163b155b1561107c576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85166004820152602401610e3d565b5080610f2a565b8051156110935780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000602082840312156110d757600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610f2a57600080fd5b803573ffffffffffffffffffffffffffffffffffffffff8116811461112b57600080fd5b919050565b60008060008060006080868803121561114857600080fd5b61115186611107565b945060208601359350604086013567ffffffffffffffff81111561117457600080fd5b8601601f8101881361118557600080fd5b803567ffffffffffffffff81111561119c57600080fd5b8860208284010111156111ae57600080fd5b959894975060200195606001359392505050565b6000806000606084860312156111d757600080fd5b6111e084611107565b95602085013595506040909401359392505050565b60006020828403121561120757600080fd5b5035919050565b6000806040838503121561122157600080fd5b8235915061123160208401611107565b90509250929050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff8616815273ffffffffffffffffffffffffffffffffffffffff851660208201528360408201526080606082015260006112d560808301848661123a565b979650505050505050565b8381526040602082015260006112fa60408301848661123a565b95945050505050565b60006020828403121561131557600080fd5b81518015158114610f2a57600080fd5b6000825160005b81811015611346576020818601810151858301520161132c565b50600092019182525091905056fea264697066735822122055d09557e5c9ebfe94b17ac42f0790bf256cf4c257e31c46bc4dbb126e31fe1964736f6c634300081a00336080604052348015600f57600080fd5b506001600055610d3a806100246000396000f3fe6080604052600436106100635760003560e01c8063c513169111610040578063c5131691146100c1578063e04d4f97146100e1578063f05b6abf146100f457005b8063357fc5a21461006c5780636ed701691461008c5780638fcaa0b5146100a157005b3661006a57005b005b34801561007857600080fd5b5061006a6100873660046106c0565b610114565b34801561009857600080fd5b5061006a6101aa565b3480156100ad57600080fd5b5061006a6100bc3660046106fc565b6101df565b3480156100cd57600080fd5b5061006a6100dc3660046106c0565b61021e565b61006a6100ef366004610895565b6102f9565b34801561010057600080fd5b5061006a61010f366004610981565b61033d565b61011c610372565b61013e73ffffffffffffffffffffffffffffffffffffffff83163383866103b5565b604080513381526020810185905273ffffffffffffffffffffffffffffffffffffffff848116828401528316606082015290517f2b58128f24a9f59127cc5b5430d70542b22220f2d9adaa86e442b816ab98af609181900360800190a16101a56001600055565b505050565b6040513381527fbcaadb46b82a48af60b608f58959ae6b8310d1b0a0d094c2e9ec3208ed39f2a09060200160405180910390a1565b7f0d3f65f00e631663aa85c96330b5c7a83bb29af3630c0063776f985edc3037aa33838360405161021293929190610a6b565b60405180910390a15050565b610226610372565b6000610233600285610ad5565b90508060000361026f576040517f1f2a200500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61029173ffffffffffffffffffffffffffffffffffffffff84163384846103b5565b604080513381526020810183905273ffffffffffffffffffffffffffffffffffffffff858116828401528416606082015290517f2b58128f24a9f59127cc5b5430d70542b22220f2d9adaa86e442b816ab98af609181900360800190a1506101a56001600055565b7f1f1ff1f5fb41346850b2f5c04e6c767e2f1c8a525c5c0c5cdb60cdf3ca5f62fa3334858585604051610330959493929190610b7e565b60405180910390a1505050565b7f74a53cd528a921fca7dbdee62f86819051d3cc98f214951f4238e8843f20b146338484846040516103309493929190610c08565b6002600054036103ae576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b6040805173ffffffffffffffffffffffffffffffffffffffff85811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd0000000000000000000000000000000000000000000000000000000017905261044a908590610450565b50505050565b600061047273ffffffffffffffffffffffffffffffffffffffff8416836104eb565b905080516000141580156104975750808060200190518101906104959190610ccb565b155b156101a5576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff841660048201526024015b60405180910390fd5b60606104f983836000610500565b9392505050565b60608147101561053e576040517fcd7860590000000000000000000000000000000000000000000000000000000081523060048201526024016104e2565b6000808573ffffffffffffffffffffffffffffffffffffffff1684866040516105679190610ce8565b60006040518083038185875af1925050503d80600081146105a4576040519150601f19603f3d011682016040523d82523d6000602084013e6105a9565b606091505b50915091506105b98683836105c3565b9695505050505050565b6060826105d8576105d382610652565b6104f9565b81511580156105fc575073ffffffffffffffffffffffffffffffffffffffff84163b155b1561064b576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff851660048201526024016104e2565b50806104f9565b8051156106625780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50565b803573ffffffffffffffffffffffffffffffffffffffff811681146106bb57600080fd5b919050565b6000806000606084860312156106d557600080fd5b833592506106e560208501610697565b91506106f360408501610697565b90509250925092565b6000806020838503121561070f57600080fd5b823567ffffffffffffffff81111561072657600080fd5b8301601f8101851361073757600080fd5b803567ffffffffffffffff81111561074e57600080fd5b85602082840101111561076057600080fd5b6020919091019590945092505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156107e6576107e6610770565b604052919050565b600082601f8301126107ff57600080fd5b813567ffffffffffffffff81111561081957610819610770565b61084a60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8401160161079f565b81815284602083860101111561085f57600080fd5b816020850160208301376000918101602001919091529392505050565b801515811461069457600080fd5b80356106bb8161087c565b6000806000606084860312156108aa57600080fd5b833567ffffffffffffffff8111156108c157600080fd5b6108cd868287016107ee565b9350506020840135915060408401356108e58161087c565b809150509250925092565b600067ffffffffffffffff82111561090a5761090a610770565b5060051b60200190565b600082601f83011261092557600080fd5b8135610938610933826108f0565b61079f565b8082825260208201915060208360051b86010192508583111561095a57600080fd5b602085015b8381101561097757803583526020928301920161095f565b5095945050505050565b60008060006060848603121561099657600080fd5b833567ffffffffffffffff8111156109ad57600080fd5b8401601f810186136109be57600080fd5b80356109cc610933826108f0565b8082825260208201915060208360051b8501019250888311156109ee57600080fd5b602084015b83811015610a3057803567ffffffffffffffff811115610a1257600080fd5b610a218b6020838901016107ee565b845250602092830192016109f3565b509550505050602084013567ffffffffffffffff811115610a5057600080fd5b610a5c86828701610914565b9250506106f36040850161088a565b73ffffffffffffffffffffffffffffffffffffffff8416815260406020820152816040820152818360608301376000818301606090810191909152601f9092017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016010192915050565b600082610b0b577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60005b83811015610b2b578181015183820152602001610b13565b50506000910152565b60008151808452610b4c816020860160208601610b10565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b73ffffffffffffffffffffffffffffffffffffffff8616815284602082015260a060408201526000610bb360a0830186610b34565b6060830194909452509015156080909101529392505050565b600081518084526020840193506020830160005b82811015610bfe578151865260209586019590910190600101610be0565b5093949350505050565b60006080820173ffffffffffffffffffffffffffffffffffffffff871683526080602084015280865180835260a08501915060a08160051b86010192506020880160005b82811015610c9b577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60878603018452610c86858351610b34565b94506020938401939190910190600101610c4c565b505050508281036040840152610cb18186610bcc565b915050610cc2606083018415159052565b95945050505050565b600060208284031215610cdd57600080fd5b81516104f98161087c565b60008251610cfa818460208701610b10565b919091019291505056fea2646970667358221220556072e1abafc3c4063b8cce832228b4f309b93726aaa6a6dfab20cb880c6d1864736f6c634300081a0033a26469706673582212207fd3dd53b4e4fc13c46dd5b734ddb9ce0065ad2a3b15032ea2b78eec925112f564736f6c634300081a0033", } // ZetaConnectorNativeTestABI is the input ABI used to generate the binding from. diff --git a/v2/pkg/zetaconnectornonnative.t.sol/zetaconnectornonnativetest.go b/v2/pkg/zetaconnectornonnative.t.sol/zetaconnectornonnativetest.go index 6b3a0adb..eb587701 100644 --- a/v2/pkg/zetaconnectornonnative.t.sol/zetaconnectornonnativetest.go +++ b/v2/pkg/zetaconnectornonnative.t.sol/zetaconnectornonnativetest.go @@ -50,7 +50,7 @@ type StdInvariantFuzzSelector struct { // ZetaConnectorNonNativeTestMetaData contains all meta data concerning the ZetaConnectorNonNativeTest contract. var ZetaConnectorNonNativeTestMetaData = &bind.MetaData{ ABI: "[{\"type\":\"function\",\"name\":\"IS_TEST\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"PAUSER_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"TSS_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"WITHDRAWER_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeArtifacts\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedArtifacts_\",\"type\":\"string[]\",\"internalType\":\"string[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeContracts\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedContracts_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeSelectors\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedSelectors_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzSelector[]\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"selectors\",\"type\":\"bytes4[]\",\"internalType\":\"bytes4[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeSenders\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedSenders_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"failed\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"setUp\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"targetArtifactSelectors\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedArtifactSelectors_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzArtifactSelector[]\",\"components\":[{\"name\":\"artifact\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"selectors\",\"type\":\"bytes4[]\",\"internalType\":\"bytes4[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetArtifacts\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedArtifacts_\",\"type\":\"string[]\",\"internalType\":\"string[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetContracts\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedContracts_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetInterfaces\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedInterfaces_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzInterface[]\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"artifacts\",\"type\":\"string[]\",\"internalType\":\"string[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetSelectors\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedSelectors_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzSelector[]\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"selectors\",\"type\":\"bytes4[]\",\"internalType\":\"bytes4[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetSenders\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedSenders_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"testSexMaxSupplyFailsIfSenderIsNotTss\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdraw\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawAndCallFailsIfMaxSupplyIsReached\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawAndCallReceiveERC20\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawAndCallReceiveERC20FailsIfSenderIsNotWithdrawer\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawAndCallReceiveERC20Partial\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawAndCallReceiveNoParams\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawAndFailsIfMaxSupplyIsReached\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawAndRevert\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawAndRevertFailsIfMaxSupplyIsReached\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawAndRevertFailsIfSenderIsNotWithdrawer\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawFailsIfSenderIsNotWithdrawer\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawTogglePause\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"event\",\"name\":\"Call\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"receiver\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Deposit\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"receiver\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"asset\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Executed\",\"inputs\":[{\"name\":\"destination\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ExecutedWithERC20\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedERC20\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"token\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"destination\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedNoParams\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedNonPayable\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"strs\",\"type\":\"string[]\",\"indexed\":false,\"internalType\":\"string[]\"},{\"name\":\"nums\",\"type\":\"uint256[]\",\"indexed\":false,\"internalType\":\"uint256[]\"},{\"name\":\"flag\",\"type\":\"bool\",\"indexed\":false,\"internalType\":\"bool\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedPayable\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"str\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"num\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"flag\",\"type\":\"bool\",\"indexed\":false,\"internalType\":\"bool\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedRevert\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Reverted\",\"inputs\":[{\"name\":\"destination\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RevertedWithERC20\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Withdraw\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"WithdrawAndCall\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"WithdrawAndRevert\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log\",\"inputs\":[{\"name\":\"\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_address\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_array\",\"inputs\":[{\"name\":\"val\",\"type\":\"uint256[]\",\"indexed\":false,\"internalType\":\"uint256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_array\",\"inputs\":[{\"name\":\"val\",\"type\":\"int256[]\",\"indexed\":false,\"internalType\":\"int256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_array\",\"inputs\":[{\"name\":\"val\",\"type\":\"address[]\",\"indexed\":false,\"internalType\":\"address[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_bytes\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_bytes32\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_int\",\"inputs\":[{\"name\":\"\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_address\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_array\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"uint256[]\",\"indexed\":false,\"internalType\":\"uint256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_array\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"int256[]\",\"indexed\":false,\"internalType\":\"int256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_array\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"address[]\",\"indexed\":false,\"internalType\":\"address[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_bytes\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_bytes32\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_decimal_int\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"},{\"name\":\"decimals\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_decimal_uint\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"decimals\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_int\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_string\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_uint\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_string\",\"inputs\":[{\"name\":\"\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_uint\",\"inputs\":[{\"name\":\"\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"logs\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"AccessControlUnauthorizedAccount\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"neededRole\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"type\":\"error\",\"name\":\"ApprovalFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ConnectorInitialized\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"CustodyInitialized\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"DepositFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"EnforcedPause\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ExceedsMaxSupply\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ExecutionFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientERC20Amount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientETHAmount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NotWhitelistedInCustody\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZeroAddress\",\"inputs\":[]}]", - Bin: "0x6080604052600c8054600160ff199182168117909255601f80549091169091179055348015602c57600080fd5b5061f2228061003c6000396000f3fe608060405234801561001057600080fd5b50600436106101cf5760003560e01c8063a783c78911610104578063d509b16c116100a2578063e63ab1e911610071578063e63ab1e914610344578063fa7626d41461036b578063fdca905214610378578063fe574f841461038057600080fd5b8063d509b16c14610324578063dcf7d0371461032c578063de1cb76c14610334578063e20c9f711461033c57600080fd5b8063b5508aa9116100de578063b5508aa9146102f4578063ba414fa6146102fc578063c190997214610314578063ccb0e3f21461031c57600080fd5b8063a783c789146102bd578063aaf74192146102e4578063b0464fdc146102ec57600080fd5b80634934655811610171578063828320141161014b578063828320141461025657806385226c811461025e57806385f438c114610273578063916a17c6146102a857600080fd5b8063493465581461023157806366d9a9a0146102395780637db20efb1461024e57600080fd5b80632ade3880116101ad5780632ade3880146102045780633cba0107146102195780633e5e3c23146102215780633f7286f41461022957600080fd5b80630a9254e4146101d45780631ed7831c146101de5780632506ef03146101fc575b600080fd5b6101dc610388565b005b6101e6610a6e565b6040516101f39190618ec4565b60405180910390f35b6101dc610ad0565b61020c610d81565b6040516101f39190618f60565b6101dc610ec3565b6101e6611685565b6101e66116e5565b6101dc611745565b610241611d19565b6040516101f391906190c6565b6101dc611e9b565b6101dc61213a565b610266612393565b6040516101f39190619164565b61029a7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b6040519081526020016101f3565b6102b0612463565b6040516101f391906191db565b61029a7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb81565b6101dc61255e565b6102b06127ba565b6102666128b5565b610304612985565b60405190151581526020016101f3565b6101dc612a59565b6101dc612cc4565b6101dc6137f0565b6101dc613b45565b6101dc614173565b6101e661488f565b61029a7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b601f546103049060ff1681565b6101dc6148ef565b6101dc614ad9565b60258054307fffffffffffffffffffffffff000000000000000000000000000000000000000091821617909155602680546112349083161790556027805461567892168217905560405181906103dd90618dd7565b6001600160a01b03928316815291166020820152604001604051809103906000f080158015610410573d6000803e3d6000fd5b50602480547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039283169081178255604080518082018252600e81527f4761746577617945564d2e736f6c000000000000000000000000000000000000602082015260275460255492519086169481019490945260448401929092529092166064820152610501919060840160408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fc0c53b8b00000000000000000000000000000000000000000000000000000000179052614cc6565b601f80547fffffffffffffffffffffff0000000000000000000000000000000000000000ff166101006001600160a01b0393841681029190911791829055602080549190920483167fffffffffffffffffffffffff0000000000000000000000000000000000000000909116811790915560275460255460405192939182169291169061058d90618de4565b6001600160a01b03938416815291831660208301529091166040820152606001604051809103906000f0801580156105c9573d6000803e3d6000fd5b50602280547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03928316179055602054602454602754602554604051938516949283169391831692169061062490618df1565b6001600160a01b039485168152928416602084015290831660408301529091166060820152608001604051809103906000f080158015610668573d6000803e3d6000fd5b50602380547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392831617905560275460405163ca669fa760e01b815291166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156106ed57600080fd5b505af1158015610701573d6000803e3d6000fd5b5050602480546027546023546040517f15d57fd40000000000000000000000000000000000000000000000000000000081526001600160a01b039283166004820152908216938101939093521692506315d57fd49150604401600060405180830381600087803b15801561077457600080fd5b505af1158015610788573d6000803e3d6000fd5b5050505060405161079890618dfe565b604051809103906000f0801580156107b4573d6000803e3d6000fd5b50602180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039283161790556027546040517fc88a5e6d00000000000000000000000000000000000000000000000000000000815291166004820152670de0b6b3a76400006024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c88a5e6d90604401600060405180830381600087803b15801561086057600080fd5b505af1158015610874573d6000803e3d6000fd5b50506025546040517f06447d560000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506306447d569150602401600060405180830381600087803b1580156108ea57600080fd5b505af11580156108fe573d6000803e3d6000fd5b50506020546022546040517fae7a3a6f0000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201529116925063ae7a3a6f9150602401600060405180830381600087803b15801561096457600080fd5b505af1158015610978573d6000803e3d6000fd5b50506020546023546040517f10188aef0000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152911692506310188aef9150602401600060405180830381600087803b1580156109de57600080fd5b505af11580156109f2573d6000803e3d6000fd5b505050507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b03166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610a5457600080fd5b505af1158015610a68573d6000803e3d6000fd5b50505050565b60606016805480602002602001604051908101604052809291908181526020018280548015610ac657602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610aa8575b5050505050905090565b6040517f68656c6c6f0000000000000000000000000000000000000000000000000000006020820152620186a09060009060250160408051808303601f190181529082905260275463ca669fa760e01b83526001600160a01b031660048301529150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015610b6b57600080fd5b505af1158015610b7f573d6000803e3d6000fd5b50506023546040517f6f8b44b0000000000000000000000000000000000000000000000000000000008152600481018690526001600160a01b039091169250636f8b44b09150602401600060405180830381600087803b158015610be257600080fd5b505af1158015610bf6573d6000803e3d6000fd5b505060275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b158015610c5357600080fd5b505af1158015610c67573d6000803e3d6000fd5b50506040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fc30436e9000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b158015610cf057600080fd5b505af1158015610d04573d6000803e3d6000fd5b50506023546021546001600160a01b0391821693506302d5c899925016610d2c8560016192a1565b846040518463ffffffff1660e01b8152600401610d4b939291906192b4565b600060405180830381600087803b158015610d6557600080fd5b505af1158015610d79573d6000803e3d6000fd5b505050505050565b6060601e805480602002602001604051908101604052809291908181526020016000905b82821015610eba57600084815260208082206040805180820182526002870290920180546001600160a01b03168352600181018054835181870281018701909452808452939591948681019491929084015b82821015610ea3578382906000526020600020018054610e16906192ed565b80601f0160208091040260200160405190810160405280929190818152602001828054610e42906192ed565b8015610e8f5780601f10610e6457610100808354040283529160200191610e8f565b820191906000526020600020905b815481529060010190602001808311610e7257829003601f168201915b505050505081526020019060010190610df7565b505050508152505081526020019060010190610da5565b50505050905090565b60248054602654604051620186a09381018490526001600160a01b03928316604482015291166064820152600090819060840160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f357fc5a2000000000000000000000000000000000000000000000000000000001790526024805460265492516370a0823160e01b81526001600160a01b0393841660048201529394506000939216916370a082319101602060405180830381865afa158015610f9e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fc2919061933a565b9050610fcf816000614ce5565b602480546023546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa15801561101f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611043919061933a565b9050611050816000614ce5565b6020546040516001600160a01b039091166024820152604481018690526064810185905260009060840160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f1e458bee0000000000000000000000000000000000000000000000000000000017905260245490517ff30c7ba3000000000000000000000000000000000000000000000000000000008152919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f30c7ba391611137916001600160a01b0391909116906000908690600401619353565b600060405180830381600087803b15801561115157600080fd5b505af1158015611165573d6000803e3d6000fd5b50506021546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b1580156111f757600080fd5b505af115801561120b573d6000803e3d6000fd5b505060208054602454602654604080516001600160a01b0394851681529485018d905291831684830152919091166060830152517f2b58128f24a9f59127cc5b5430d70542b22220f2d9adaa86e442b816ab98af609350908190036080019150a16023546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b1580156112fa57600080fd5b505af115801561130e573d6000803e3d6000fd5b50506021546040516001600160a01b0390911692507f7772f56296d3a5202974a45c61c9188d844ab4d6eeb18c851e4b8d5384ca6ced9150611353908990889061937b565b60405180910390a260275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156113b457600080fd5b505af11580156113c8573d6000803e3d6000fd5b50506023546021546040517f5e3e9fef0000000000000000000000000000000000000000000000000000000081526001600160a01b039283169450635e3e9fef935061142092909116908a9089908b90600401619394565b600060405180830381600087803b15801561143a57600080fd5b505af115801561144e573d6000803e3d6000fd5b5050602480546026546040516370a0823160e01b81526001600160a01b03918216600482015260009550911692506370a082319101602060405180830381865afa1580156114a0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114c4919061933a565b90506114d08188614ce5565b602480546023546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa158015611520573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611544919061933a565b9050611551816000614ce5565b602480546020546021546040517fdd62ed3e0000000000000000000000000000000000000000000000000000000081526001600160a01b0392831660048201529082169381019390935260009291169063dd62ed3e90604401602060405180830381865afa1580156115c7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115eb919061933a565b90506115f8816000614ce5565b602480546020546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa158015611648573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061166c919061933a565b9050611679816000614ce5565b50505050505050505050565b60606018805480602002602001604051908101604052809291908181526020018280548015610ac6576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311610aa8575050505050905090565b60606017805480602002602001604051908101604052809291908181526020018280548015610ac6576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311610aa8575050505050905090565b604080516004808252602480830184526020830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f6ed70169000000000000000000000000000000000000000000000000000000001790525460265493516370a0823160e01b8152620186a0946000949385936001600160a01b03908116936370a08231936117e693921691016001600160a01b0391909116815260200190565b602060405180830381865afa158015611803573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611827919061933a565b9050611834816000614ce5565b602480546023546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa158015611884573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118a8919061933a565b90506118b5816000614ce5565b6020546040516001600160a01b039091166024820152604481018690526064810185905260009060840160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f1e458bee0000000000000000000000000000000000000000000000000000000017905260245490517ff30c7ba3000000000000000000000000000000000000000000000000000000008152919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f30c7ba39161199c916001600160a01b0391909116906000908690600401619353565b600060405180830381600087803b1580156119b657600080fd5b505af11580156119ca573d6000803e3d6000fd5b50506021546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b158015611a5c57600080fd5b505af1158015611a70573d6000803e3d6000fd5b5050602080546040516001600160a01b0390911681527fbcaadb46b82a48af60b608f58959ae6b8310d1b0a0d094c2e9ec3208ed39f2a0935001905060405180910390a16023546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b158015611b4257600080fd5b505af1158015611b56573d6000803e3d6000fd5b50506021546040516001600160a01b0390911692507f7772f56296d3a5202974a45c61c9188d844ab4d6eeb18c851e4b8d5384ca6ced9150611b9b908990889061937b565b60405180910390a260275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015611bfc57600080fd5b505af1158015611c10573d6000803e3d6000fd5b50506023546021546040517f5e3e9fef0000000000000000000000000000000000000000000000000000000081526001600160a01b039283169450635e3e9fef9350611c6892909116908a9089908b90600401619394565b600060405180830381600087803b158015611c8257600080fd5b505af1158015611c96573d6000803e3d6000fd5b5050602480546026546040516370a0823160e01b81526001600160a01b03918216600482015260009550911692506370a082319101602060405180830381865afa158015611ce8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d0c919061933a565b90506114d0816000614ce5565b6060601b805480602002602001604051908101604052809291908181526020016000905b82821015610eba5783829060005260206000209060020201604051806040016040529081600082018054611d70906192ed565b80601f0160208091040260200160405190810160405280929190818152602001828054611d9c906192ed565b8015611de95780601f10611dbe57610100808354040283529160200191611de9565b820191906000526020600020905b815481529060010190602001808311611dcc57829003601f168201915b5050505050815260200160018201805480602002602001604051908101604052809291908181526020018280548015611e8357602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019060040190602082600301049283019260010382029150808411611e305790505b50505050508152505081526020019060010190611d3d565b60275460405163ca669fa760e01b81526001600160a01b039091166004820152620186a090737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015611ef957600080fd5b505af1158015611f0d573d6000803e3d6000fd5b50506023546040517f6f8b44b0000000000000000000000000000000000000000000000000000000008152600481018590526001600160a01b039091169250636f8b44b09150602401600060405180830381600087803b158015611f7057600080fd5b505af1158015611f84573d6000803e3d6000fd5b505060275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b158015611fe157600080fd5b505af1158015611ff5573d6000803e3d6000fd5b50506040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fc30436e9000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b15801561207e57600080fd5b505af1158015612092573d6000803e3d6000fd5b50506023546021546001600160a01b03918216935063106e62909250166120ba8460016192a1565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b039092166004830152602482015260006044820152606401600060405180830381600087803b15801561211f57600080fd5b505af1158015612133573d6000803e3d6000fd5b5050505050565b6040517f68656c6c6f0000000000000000000000000000000000000000000000000000006020820152620186a090600090819060250160408051808303601f190181529082905260255463ca669fa760e01b83526001600160a01b031660048301529150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156121d757600080fd5b505af11580156121eb573d6000803e3d6000fd5b5050602554604080516001600160a01b0390921660248301527f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e460448084019190915281518084039091018152606490920181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb392506122d691906004016193cd565b600060405180830381600087803b1580156122f057600080fd5b505af1158015612304573d6000803e3d6000fd5b50506023546021546040517f02d5c8990000000000000000000000000000000000000000000000000000000081526001600160a01b0392831694506302d5c899935061235c9290911690879086908890600401619394565b600060405180830381600087803b15801561237657600080fd5b505af115801561238a573d6000803e3d6000fd5b50505050505050565b6060601a805480602002602001604051908101604052809291908181526020016000905b82821015610eba5783829060005260206000200180546123d6906192ed565b80601f0160208091040260200160405190810160405280929190818152602001828054612402906192ed565b801561244f5780601f106124245761010080835404028352916020019161244f565b820191906000526020600020905b81548152906001019060200180831161243257829003601f168201915b5050505050815260200190600101906123b7565b6060601d805480602002602001604051908101604052809291908181526020016000905b82821015610eba5760008481526020908190206040805180820182526002860290920180546001600160a01b0316835260018101805483518187028101870190945280845293949193858301939283018282801561254657602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190600401906020826003010492830192600103820291508084116124f35790505b50505050508152505081526020019060010190612487565b6040517f68656c6c6f0000000000000000000000000000000000000000000000000000006020820152620186a09060009060250160408051808303601f190181529082905260275463ca669fa760e01b83526001600160a01b031660048301529150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156125f957600080fd5b505af115801561260d573d6000803e3d6000fd5b50506023546040517f6f8b44b0000000000000000000000000000000000000000000000000000000008152600481018690526001600160a01b039091169250636f8b44b09150602401600060405180830381600087803b15801561267057600080fd5b505af1158015612684573d6000803e3d6000fd5b505060275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b1580156126e157600080fd5b505af11580156126f5573d6000803e3d6000fd5b50506040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fc30436e9000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b15801561277e57600080fd5b505af1158015612792573d6000803e3d6000fd5b50506023546021546001600160a01b039182169350635e3e9fef925016610d2c8560016192a1565b6060601c805480602002602001604051908101604052809291908181526020016000905b82821015610eba5760008481526020908190206040805180820182526002860290920180546001600160a01b0316835260018101805483518187028101870190945280845293949193858301939283018282801561289d57602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168152602001906004019060208260030104928301926001038202915080841161284a5790505b505050505081525050815260200190600101906127de565b60606019805480602002602001604051908101604052809291908181526020016000905b82821015610eba5783829060005260206000200180546128f8906192ed565b80601f0160208091040260200160405190810160405280929190818152602001828054612924906192ed565b80156129715780601f1061294657610100808354040283529160200191612971565b820191906000526020600020905b81548152906001019060200180831161295457829003601f168201915b5050505050815260200190600101906128d9565b60085460009060ff161561299d575060085460ff1690565b6040517f667f9d70000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d600482018190527f6661696c65640000000000000000000000000000000000000000000000000000602483015260009163667f9d7090604401602060405180830381865afa158015612a2e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a52919061933a565b1415905090565b60248054602654604051620186a09381018490526001600160a01b03928316604482015291166064820152600090819060840160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f357fc5a200000000000000000000000000000000000000000000000000000000179052602554905163ca669fa760e01b81526001600160a01b039091166004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015612b3f57600080fd5b505af1158015612b53573d6000803e3d6000fd5b5050602554604080516001600160a01b0390921660248301527f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e460448084019190915281518084039091018152606490920181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb39250612c3e91906004016193cd565b600060405180830381600087803b158015612c5857600080fd5b505af1158015612c6c573d6000803e3d6000fd5b50506023546021546040517f5e3e9fef0000000000000000000000000000000000000000000000000000000081526001600160a01b039283169450635e3e9fef935061235c9290911690879086908890600401619394565b60275460405163ca669fa760e01b81526001600160a01b039091166004820152620186a090600090737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015612d2557600080fd5b505af1158015612d39573d6000803e3d6000fd5b5050602754604080516001600160a01b0390921660248301527f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a60448084019190915281518084039091018152606490920181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb39250612e2491906004016193cd565b600060405180830381600087803b158015612e3e57600080fd5b505af1158015612e52573d6000803e3d6000fd5b50505050602360009054906101000a90046001600160a01b03166001600160a01b0316638456cb596040518163ffffffff1660e01b8152600401600060405180830381600087803b158015612ea657600080fd5b505af1158015612eba573d6000803e3d6000fd5b505060275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b158015612f1757600080fd5b505af1158015612f2b573d6000803e3d6000fd5b5050602754604080516001600160a01b0390921660248301527f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a60448084019190915281518084039091018152606490920181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb3925061301691906004016193cd565b600060405180830381600087803b15801561303057600080fd5b505af1158015613044573d6000803e3d6000fd5b50505050602360009054906101000a90046001600160a01b03166001600160a01b0316633f4ba83a6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561309857600080fd5b505af11580156130ac573d6000803e3d6000fd5b505060255460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b15801561310957600080fd5b505af115801561311d573d6000803e3d6000fd5b50505050602360009054906101000a90046001600160a01b03166001600160a01b0316638456cb596040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561317157600080fd5b505af1158015613185573d6000803e3d6000fd5b50506040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fd93c0665000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b15801561320e57600080fd5b505af1158015613222573d6000803e3d6000fd5b505060275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b15801561327f57600080fd5b505af1158015613293573d6000803e3d6000fd5b50506023546026546040517f106e62900000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260248101879052604481018690529116925063106e62909150606401600060405180830381600087803b15801561330757600080fd5b505af115801561331b573d6000803e3d6000fd5b505060255460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b15801561337857600080fd5b505af115801561338c573d6000803e3d6000fd5b50505050602360009054906101000a90046001600160a01b03166001600160a01b0316633f4ba83a6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156133e057600080fd5b505af11580156133f4573d6000803e3d6000fd5b5050602480546026546040516370a0823160e01b81526001600160a01b03918216600482015260009550911692506370a082319101602060405180830381865afa158015613446573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061346a919061933a565b9050613477816000614ce5565b6026546040516001600160a01b039091166024820152604481018490526064810183905260009060840160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f1e458bee0000000000000000000000000000000000000000000000000000000017905260245490517ff30c7ba3000000000000000000000000000000000000000000000000000000008152919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f30c7ba39161355e916001600160a01b0391909116906000908690600401619353565b600060405180830381600087803b15801561357857600080fd5b505af115801561358c573d6000803e3d6000fd5b50506023546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b15801561361e57600080fd5b505af1158015613632573d6000803e3d6000fd5b50506026546040518781526001600160a01b0390911692507f884edad9ce6fa2440d8a54cc123490eb96d2768479d49ff9c7366125a9424364915060200160405180910390a260275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156136d157600080fd5b505af11580156136e5573d6000803e3d6000fd5b50506023546026546040517f106e62900000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260248101899052604481018890529116925063106e629091506064015b600060405180830381600087803b15801561375a57600080fd5b505af115801561376e573d6000803e3d6000fd5b5050602480546026546040516370a0823160e01b81526001600160a01b03918216600482015260009550911692506370a082319101602060405180830381865afa1580156137c0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137e4919061933a565b90506121338186614ce5565b602480546026546040516370a0823160e01b81526001600160a01b039182166004820152620186a09360009392909216916370a082319101602060405180830381865afa158015613845573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613869919061933a565b9050613876816000614ce5565b6026546040516001600160a01b0390911660248201526044810183905260006064820181905290819060840160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f1e458bee0000000000000000000000000000000000000000000000000000000017905260245490517ff30c7ba3000000000000000000000000000000000000000000000000000000008152919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f30c7ba39161395f916001600160a01b0391909116906000908690600401619353565b600060405180830381600087803b15801561397957600080fd5b505af115801561398d573d6000803e3d6000fd5b50506023546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b158015613a1f57600080fd5b505af1158015613a33573d6000803e3d6000fd5b50506026546040518781526001600160a01b0390911692507f884edad9ce6fa2440d8a54cc123490eb96d2768479d49ff9c7366125a9424364915060200160405180910390a260275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015613ad257600080fd5b505af1158015613ae6573d6000803e3d6000fd5b50506023546026546040517f106e62900000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260248101899052604481018790529116925063106e62909150606401613740565b60248054602654604051620186a09381018490526001600160a01b03928316604482015291166064820152600090819060840160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fc5131691000000000000000000000000000000000000000000000000000000001790526024805460265492516370a0823160e01b81526001600160a01b0393841660048201529394506000939216916370a082319101602060405180830381865afa158015613c20573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613c44919061933a565b9050613c51816000614ce5565b602480546023546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa158015613ca1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613cc5919061933a565b9050613cd2816000614ce5565b6020546040516001600160a01b039091166024820152604481018690526064810185905260009060840160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f1e458bee0000000000000000000000000000000000000000000000000000000017905260245490517ff30c7ba3000000000000000000000000000000000000000000000000000000008152919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f30c7ba391613db9916001600160a01b0391909116906000908690600401619353565b600060405180830381600087803b158015613dd357600080fd5b505af1158015613de7573d6000803e3d6000fd5b50506021546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b158015613e7957600080fd5b505af1158015613e8d573d6000803e3d6000fd5b50506020547f2b58128f24a9f59127cc5b5430d70542b22220f2d9adaa86e442b816ab98af6092506001600160a01b03169050613ecb6002896193e0565b602454602654604080516001600160a01b03958616815260208101949094529184168383015292909216606082015290519081900360800190a16023546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b158015613f9357600080fd5b505af1158015613fa7573d6000803e3d6000fd5b50506021546040516001600160a01b0390911692507f7772f56296d3a5202974a45c61c9188d844ab4d6eeb18c851e4b8d5384ca6ced9150613fec908990889061937b565b60405180910390a260275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561404d57600080fd5b505af1158015614061573d6000803e3d6000fd5b50506023546021546040517f5e3e9fef0000000000000000000000000000000000000000000000000000000081526001600160a01b039283169450635e3e9fef93506140b992909116908a9089908b90600401619394565b600060405180830381600087803b1580156140d357600080fd5b505af11580156140e7573d6000803e3d6000fd5b5050602480546026546040516370a0823160e01b81526001600160a01b03918216600482015260009550911692506370a082319101602060405180830381865afa158015614139573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061415d919061933a565b90506114d08161416e60028a6193e0565b614ce5565b6040517f68656c6c6f0000000000000000000000000000000000000000000000000000006020820152620186a090600090819060250160408051808303601f1901815290829052602480546021546370a0823160e01b85526001600160a01b0390811660048601529294506000939216916370a082319101602060405180830381865afa158015614208573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061422c919061933a565b9050614239816000614ce5565b602480546023546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa158015614289573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906142ad919061933a565b6020546040516001600160a01b039091166024820152604481018790526064810186905290915060009060840160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f1e458bee0000000000000000000000000000000000000000000000000000000017905260245490517ff30c7ba3000000000000000000000000000000000000000000000000000000008152919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f30c7ba391614397916001600160a01b0391909116906000908690600401619353565b600060405180830381600087803b1580156143b157600080fd5b505af11580156143c5573d6000803e3d6000fd5b50506021546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b15801561445757600080fd5b505af115801561446b573d6000803e3d6000fd5b50506020546040517f0d3f65f00e631663aa85c96330b5c7a83bb29af3630c0063776f985edc3037aa93506144ae92506001600160a01b0390911690879061941b565b60405180910390a16020546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b15801561454457600080fd5b505af1158015614558573d6000803e3d6000fd5b50506021546024546040516001600160a01b039283169450911691507f723fc7be2448075379e4fdf1e6bf5fead954d2668d2da05dcb44ccfec4beeda7906145a3908a90899061937b565b60405180910390a36023546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b15801561463957600080fd5b505af115801561464d573d6000803e3d6000fd5b50506021546040516001600160a01b0390911692507fba96f26bdda53eb8c8ba39045dfb4ff39753fbc7a6edcf250a88e75e78d102fe9150614692908990889061937b565b60405180910390a260275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156146f357600080fd5b505af1158015614707573d6000803e3d6000fd5b50506023546021546040517f02d5c8990000000000000000000000000000000000000000000000000000000081526001600160a01b0392831694506302d5c899935061475f92909116908a9089908b90600401619394565b600060405180830381600087803b15801561477957600080fd5b505af115801561478d573d6000803e3d6000fd5b5050602480546021546040516370a0823160e01b81526001600160a01b03918216600482015260009550911692506370a082319101602060405180830381865afa1580156147df573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614803919061933a565b905061480f8188614ce5565b602480546023546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa15801561485f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614883919061933a565b90506115518185614ce5565b60606015805480602002602001604051908101604052809291908181526020018280548015610ac6576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311610aa8575050505050905090565b60255460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561494857600080fd5b505af115801561495c573d6000803e3d6000fd5b5050602554604080516001600160a01b0390921660248301527f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb60448084019190915281518084039091018152606490920181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb39250614a4791906004016193cd565b600060405180830381600087803b158015614a6157600080fd5b505af1158015614a75573d6000803e3d6000fd5b50506023546040517f6f8b44b000000000000000000000000000000000000000000000000000000000815261271060048201526001600160a01b039091169250636f8b44b09150602401600060405180830381600087803b158015610a5457600080fd5b60255460405163ca669fa760e01b81526001600160a01b039091166004820152620186a090600090737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015614b3a57600080fd5b505af1158015614b4e573d6000803e3d6000fd5b5050602554604080516001600160a01b0390921660248301527f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e460448084019190915281518084039091018152606490920181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb39250614c3991906004016193cd565b600060405180830381600087803b158015614c5357600080fd5b505af1158015614c67573d6000803e3d6000fd5b50506023546026546040517f106e62900000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260248101879052604481018690529116925063106e62909150606401610d4b565b6000614cd0618e0b565b614cdb848483614d64565b9150505b92915050565b6040517f98296c540000000000000000000000000000000000000000000000000000000081526004810183905260248101829052737109709ecfa91a80626ff3989d68f67f5b1dd12d906398296c549060440160006040518083038186803b158015614d5057600080fd5b505afa158015610d79573d6000803e3d6000fd5b600080614d718584614ddf565b9050614dd46040518060400160405280601d81526020017f4552433139363750726f78792e736f6c3a4552433139363750726f78790000008152508286604051602001614dbf92919061941b565b60405160208183030381529060405285614deb565b9150505b9392505050565b6000614dd88383614e19565b60c08101515160009015614e0f57614e0884848460c00151614e34565b9050614dd8565b614e088484614fda565b6000614e2583836150c5565b614dd883836020015184614deb565b600080614e3f6150d5565b90506000614e4d86836151a8565b90506000614e64826060015183602001518561564e565b90506000614e7483838989615860565b90506000614e81826166dd565b602081015181519192509060030b15614ef457898260400151604051602001614eab92919061943d565b60408051601f19818403018152908290527f08c379a0000000000000000000000000000000000000000000000000000000008252614eeb916004016193cd565b60405180910390fd5b6000614f376040518060400160405280601581526020017f4465706c6f79656420746f20616464726573733a2000000000000000000000008152508360016168ac565b6040517fc6ce059d000000000000000000000000000000000000000000000000000000008152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c6ce059d90614f8a9084906004016193cd565b602060405180830381865afa158015614fa7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614fcb91906194be565b9b9a5050505050505050505050565b6040517f8d1cc9250000000000000000000000000000000000000000000000000000000081526000908190737109709ecfa91a80626ff3989d68f67f5b1dd12d90638d1cc9259061502f9087906004016193cd565b600060405180830381865afa15801561504c573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261507491908101906195cf565b905060006150a2828560405160200161508e929190619604565b604051602081830303815290604052616aac565b90506001600160a01b038116614cdb578484604051602001614eab929190619633565b6150d182826000616abf565b5050565b604080518082018252600381527f6f75740000000000000000000000000000000000000000000000000000000000602082015290517fd145736c000000000000000000000000000000000000000000000000000000008152606091737109709ecfa91a80626ff3989d68f67f5b1dd12d91829063d145736c9061515c9084906004016196de565b600060405180830381865afa158015615179573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526151a19190810190619725565b9250505090565b6151da6040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b6000737109709ecfa91a80626ff3989d68f67f5b1dd12d90506152256040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b61522e85616bc2565b6020820152600061523e86616fa7565b90506000836001600160a01b031663d930a0e66040518163ffffffff1660e01b8152600401600060405180830381865afa158015615280573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526152a89190810190619725565b868385602001516040516020016152c2949392919061976e565b60408051601f19818403018152908290527f60f9bb1100000000000000000000000000000000000000000000000000000000825291506000906001600160a01b038616906360f9bb119061531a9085906004016193cd565b600060405180830381865afa158015615337573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261535f9190810190619725565b6040517fdb4235f60000000000000000000000000000000000000000000000000000000081529091506001600160a01b0386169063db4235f6906153a7908490600401619872565b602060405180830381865afa1580156153c4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906153e891906198c4565b6153fd5781604051602001614eab91906198e6565b6040517f49c4fac80000000000000000000000000000000000000000000000000000000081526001600160a01b038616906349c4fac890615442908490600401619978565b600060405180830381865afa15801561545f573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526154879190810190619725565b84526040517fdb4235f60000000000000000000000000000000000000000000000000000000081526001600160a01b0386169063db4235f6906154ce9084906004016199ca565b602060405180830381865afa1580156154eb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061550f91906198c4565b156155a4576040517f49c4fac80000000000000000000000000000000000000000000000000000000081526001600160a01b038616906349c4fac8906155599084906004016199ca565b600060405180830381865afa158015615576573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261559e9190810190619725565b60408501525b846001600160a01b03166349c4fac88286600001516040516020016155c99190619a1c565b6040516020818303038152906040526040518363ffffffff1660e01b81526004016155f5929190619a88565b600060405180830381865afa158015615612573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261563a9190810190619725565b606085015250608083015250949350505050565b60408051600480825260a0820190925260609160009190816020015b606081526020019060019003908161566a5790505090506040518060400160405280600481526020017f6772657000000000000000000000000000000000000000000000000000000000815250816000815181106156ca576156ca619aad565b60200260200101819052506040518060400160405280600381526020017f2d726c00000000000000000000000000000000000000000000000000000000008152508160018151811061571e5761571e619aad565b60200260200101819052508460405160200161573a9190619adc565b6040516020818303038152906040528160028151811061575c5761575c619aad565b6020026020010181905250826040516020016157789190619b48565b6040516020818303038152906040528160038151811061579a5761579a619aad565b602002602001018190525060006157b0826166dd565b602080820151604080518082018252600581527f2e6a736f6e0000000000000000000000000000000000000000000000000000008185019081528251808401845260008082529086015282518084019093529051825292810192909252919250615841906040805180820182526000808252602091820152815180830190925284518252808501908201529061722a565b6158565785604051602001614eab9190619b89565b9695505050505050565b60a0810151604080518082018252600080825260209182015281518083019092528251808352928101910152606090737109709ecfa91a80626ff3989d68f67f5b1dd12d90156158b0565b511590565b615a245782602001511561596c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605860248201527f54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f742060448201527f62652075736564207768656e207468652060736b6970566572696679536f757260648201527f6365436f646560206f7074696f6e206973206074727565600000000000000000608482015260a401614eeb565b8260c0015115615a24576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605360248201527f54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f742060448201527f62652075736564207768656e207468652060736b69704c6963656e736554797060648201527f6560206f7074696f6e2069732060747275656000000000000000000000000000608482015260a401614eeb565b6040805160ff8082526120008201909252600091816020015b6060815260200190600190039081615a3d57905050905060006040518060400160405280600381526020017f6e70780000000000000000000000000000000000000000000000000000000000815250828280615a9890619c1a565b935060ff1681518110615aad57615aad619aad565b60200260200101819052506040518060400160405280600d81526020017f302e302e312d616c7068612e3700000000000000000000000000000000000000815250604051602001615afe9190619c39565b604051602081830303815290604052828280615b1990619c1a565b935060ff1681518110615b2e57615b2e619aad565b60200260200101819052506040518060400160405280600681526020017f6465706c6f790000000000000000000000000000000000000000000000000000815250828280615b7b90619c1a565b935060ff1681518110615b9057615b90619aad565b60200260200101819052506040518060400160405280600e81526020017f2d2d636f6e74726163744e616d65000000000000000000000000000000000000815250828280615bdd90619c1a565b935060ff1681518110615bf257615bf2619aad565b60200260200101819052508760200151828280615c0e90619c1a565b935060ff1681518110615c2357615c23619aad565b60200260200101819052506040518060400160405280600e81526020017f2d2d636f6e747261637450617468000000000000000000000000000000000000815250828280615c7090619c1a565b935060ff1681518110615c8557615c85619aad565b602090810291909101015287518282615c9d81619c1a565b935060ff1681518110615cb257615cb2619aad565b60200260200101819052506040518060400160405280600981526020017f2d2d636861696e49640000000000000000000000000000000000000000000000815250828280615cff90619c1a565b935060ff1681518110615d1457615d14619aad565b6020026020010181905250615d284661728b565b8282615d3381619c1a565b935060ff1681518110615d4857615d48619aad565b60200260200101819052506040518060400160405280600f81526020017f2d2d6275696c64496e666f46696c650000000000000000000000000000000000815250828280615d9590619c1a565b935060ff1681518110615daa57615daa619aad565b602002602001018190525086828280615dc290619c1a565b935060ff1681518110615dd757615dd7619aad565b6020908102919091010152855115615efe5760408051808201909152601581527f2d2d636f6e7374727563746f7242797465636f6465000000000000000000000060208201528282615e2881619c1a565b935060ff1681518110615e3d57615e3d619aad565b60209081029190910101526040517f71aad10d0000000000000000000000000000000000000000000000000000000081526001600160a01b038416906371aad10d90615e8d9089906004016193cd565b600060405180830381865afa158015615eaa573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052615ed29190810190619725565b8282615edd81619c1a565b935060ff1681518110615ef257615ef2619aad565b60200260200101819052505b846020015115615fce5760408051808201909152601281527f2d2d766572696679536f75726365436f6465000000000000000000000000000060208201528282615f4781619c1a565b935060ff1681518110615f5c57615f5c619aad565b60200260200101819052506040518060400160405280600581526020017f66616c7365000000000000000000000000000000000000000000000000000000815250828280615fa990619c1a565b935060ff1681518110615fbe57615fbe619aad565b6020026020010181905250616195565b6160066158ab8660a0015160408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6160995760408051808201909152600d81527f2d2d6c6963656e736554797065000000000000000000000000000000000000006020820152828261604981619c1a565b935060ff168151811061605e5761605e619aad565b60200260200101819052508460a0015160405160200161607e9190619adc565b604051602081830303815290604052828280615fa990619c1a565b8460c001511580156160dc5750604080890151815180830183526000808252602091820152825180840190935281518352908101908201526160da90511590565b155b156161955760408051808201909152600d81527f2d2d6c6963656e736554797065000000000000000000000000000000000000006020820152828261612081619c1a565b935060ff168151811061613557616135619aad565b60200260200101819052506161498861732b565b6040516020016161599190619adc565b60405160208183030381529060405282828061617490619c1a565b935060ff168151811061618957616189619aad565b60200260200101819052505b604080860151815180830183526000808252602091820152825180840190935281518352908101908201526161c990511590565b61625e5760408051808201909152600b81527f2d2d72656c6179657249640000000000000000000000000000000000000000006020820152828261620c81619c1a565b935060ff168151811061622157616221619aad565b6020026020010181905250846040015182828061623d90619c1a565b935060ff168151811061625257616252619aad565b60200260200101819052505b60608501511561637f5760408051808201909152600681527f2d2d73616c740000000000000000000000000000000000000000000000000000602082015282826162a781619c1a565b935060ff16815181106162bc576162bc619aad565b602090810291909101015260608501516040517fb11a19e800000000000000000000000000000000000000000000000000000000815260048101919091526001600160a01b0384169063b11a19e890602401600060405180830381865afa15801561632b573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526163539190810190619725565b828261635e81619c1a565b935060ff168151811061637357616373619aad565b60200260200101819052505b60e085015151156164265760408051808201909152600a81527f2d2d6761734c696d697400000000000000000000000000000000000000000000602082015282826163c981619c1a565b935060ff16815181106163de576163de619aad565b60200260200101819052506163fa8560e001516000015161728b565b828261640581619c1a565b935060ff168151811061641a5761641a619aad565b60200260200101819052505b60e085015160200151156164d05760408051808201909152600a81527f2d2d6761735072696365000000000000000000000000000000000000000000006020820152828261647381619c1a565b935060ff168151811061648857616488619aad565b60200260200101819052506164a48560e001516020015161728b565b82826164af81619c1a565b935060ff16815181106164c4576164c4619aad565b60200260200101819052505b60e0850151604001511561657a5760408051808201909152600e81527f2d2d6d61784665655065724761730000000000000000000000000000000000006020820152828261651d81619c1a565b935060ff168151811061653257616532619aad565b602002602001018190525061654e8560e001516040015161728b565b828261655981619c1a565b935060ff168151811061656e5761656e619aad565b60200260200101819052505b60e085015160600151156166245760408051808201909152601681527f2d2d6d61785072696f7269747946656550657247617300000000000000000000602082015282826165c781619c1a565b935060ff16815181106165dc576165dc619aad565b60200260200101819052506165f88560e001516060015161728b565b828261660381619c1a565b935060ff168151811061661857616618619aad565b60200260200101819052505b60008160ff1667ffffffffffffffff811115616642576166426194e7565b60405190808252806020026020018201604052801561667557816020015b60608152602001906001900390816166605790505b50905060005b8260ff168160ff1610156166ce57838160ff168151811061669e5761669e619aad565b6020026020010151828260ff16815181106166bb576166bb619aad565b602090810291909101015260010161667b565b5093505050505b949350505050565b6167046040518060600160405280600060030b815260200160608152602001606081525090565b60408051808201825260048082527f6261736800000000000000000000000000000000000000000000000000000000602083015291517fd145736c000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d92600091849163d145736c9161678a91869101619ca4565b600060405180830381865afa1580156167a7573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526167cf9190810190619725565b905060006167dd8683617e1a565b90506000846001600160a01b031663f45c1ce7836040518263ffffffff1660e01b815260040161680d9190619164565b6000604051808303816000875af115801561682c573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526168549190810190619ceb565b805190915060030b1580159061686d5750602081015151155b801561687c5750604081015151155b15615856578160008151811061689457616894619aad565b6020026020010151604051602001614eab9190619da1565b606060006168e18560408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6040805180820182526000808252602091820152815180830190925286518252808701908201529091506169189082905b90617f6f565b15616a755760006169958261698f8461698961695b8a60408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6040805180820182526000808252602091820152815180830190925282518252918201519181019190915290565b90617f96565b90617ff8565b604080518082018252600181527f0a00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201529091506169f9908290617f6f565b15616a6357604080518082018252600181527f0a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616a60905b829061807d565b90505b616a6c816180a3565b92505050614dd8565b8215616a8e578484604051602001614eab929190619f8d565b5050604080516020810190915260008152614dd8565b509392505050565b6000808251602084016000f09392505050565b8160a0015115616ace57505050565b6000616adb84848461810c565b90506000616ae8826166dd565b602081015181519192509060030b158015616b845750604080518082018252600781527f535543434553530000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616b8490604080518082018252600080825260209182015281518083019092528451825280850190820152616912565b15616b9157505050505050565b60408201515115616bb1578160400151604051602001614eab919061a034565b80604051602001614eab919061a092565b60606000616bf78360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600481527f2e736f6c0000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152909150616c5c905b829061722a565b15616ccb57604080518082018252600481527f2e736f6c0000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152614dd890616cc69083906186a7565b6180a3565b604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616d2d905b8290618731565b600103616dfa57604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616d9390616a59565b50604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152614dd890616cc6905b839061807d565b604080518082018252600581527f2e6a736f6e00000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616e5990616c55565b15616f9057604080518082018252600181527f2f00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820181905284518086019095529251845283015290616ec19083906187cb565b905060008160018351616ed4919061a0fd565b81518110616ee457616ee4619aad565b60200260200101519050616f87616cc6616f5a6040518060400160405280600581526020017f2e6a736f6e00000000000000000000000000000000000000000000000000000081525060408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600080825260209182015281518083019092528551825280860190820152906186a7565b95945050505050565b82604051602001614eab919061a110565b50919050565b60606000616fdc8360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600481527f2e736f6c000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015290915061703e90616c55565b1561704c57614dd8816180a3565b604080518082018252600181527f3a00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526170ab90616d26565b60010361711557604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152614dd890616cc690616df3565b604080518082018252600581527f2e6a736f6e0000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261717490616c55565b15616f9057604080518082018252600181527f2f000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201819052845180860190955292518452830152906171dc9083906187cb565b90506001815111156172185780600282516171f7919061a0fd565b8151811061720757617207619aad565b602002602001015192505050919050565b5082604051602001614eab919061a110565b80518251600091111561723f57506000614cdf565b81518351602085015160009291617255916192a1565b61725f919061a0fd565b905082602001518103617276576001915050614cdf565b82516020840151819020912014905092915050565b6060600061729883618870565b600101905060008167ffffffffffffffff8111156172b8576172b86194e7565b6040519080825280601f01601f1916602001820160405280156172e2576020820181803683370190505b5090508181016020015b600019017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a85049450846172ec57509392505050565b604081810151815180830183526000808252602091820181905283518085018552835181529282018383015283518085018552600a81527f554e4c4943454e53454400000000000000000000000000000000000000000000818401908152855180870187528381528401929092528451808601909552518452908301526060916173b7905b8290618952565b156173f757505060408051808201909152600481527f4e6f6e65000000000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600981527f556e6c6963656e7365000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617456906173b0565b1561749657505060408051808201909152600981527f556e6c6963656e736500000000000000000000000000000000000000000000006020820152919050565b604080518082018252600381527f4d49540000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526174f5906173b0565b1561753557505060408051808201909152600381527f4d495400000000000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f47504c2d322e302d6f6e6c79000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617594906173b0565b806175f95750604080518082018252601081527f47504c2d322e302d6f722d6c6174657200000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526175f9906173b0565b1561763957505060408051808201909152600981527f474e552047504c763200000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f47504c2d332e302d6f6e6c79000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617698906173b0565b806176fd5750604080518082018252601081527f47504c2d332e302d6f722d6c6174657200000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526176fd906173b0565b1561773d57505060408051808201909152600981527f474e552047504c763300000000000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4c47504c2d322e312d6f6e6c79000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261779c906173b0565b806178015750604080518082018252601181527f4c47504c2d322e312d6f722d6c6174657200000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617801906173b0565b1561784157505060408051808201909152600c81527f474e55204c47504c76322e3100000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4c47504c2d332e302d6f6e6c7900000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526178a0906173b0565b806179055750604080518082018252601181527f4c47504c2d332e302d6f722d6c6174657200000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617905906173b0565b1561794557505060408051808201909152600a81527f474e55204c47504c7633000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f4253442d322d436c617573650000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526179a4906173b0565b156179e457505060408051808201909152600c81527f4253442d322d436c6175736500000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f4253442d332d436c61757365000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617a43906173b0565b15617a8357505060408051808201909152600c81527f4253442d332d436c6175736500000000000000000000000000000000000000006020820152919050565b604080518082018252600781527f4d504c2d322e300000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617ae2906173b0565b15617b2257505060408051808201909152600781527f4d504c2d322e30000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600781527f4f534c2d332e300000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617b81906173b0565b15617bc157505060408051808201909152600781527f4f534c2d332e30000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600a81527f4170616368652d322e300000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617c20906173b0565b15617c6057505060408051808201909152600a81527f4170616368652d322e30000000000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4147504c2d332e302d6f6e6c790000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617cbf906173b0565b80617d245750604080518082018252601181527f4147504c2d332e302d6f722d6c6174657200000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617d24906173b0565b15617d6457505060408051808201909152600a81527f474e55204147504c7633000000000000000000000000000000000000000000006020820152919050565b604080518082018252600881527f4255534c2d312e3100000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617dc3906173b0565b15617e0357505060408051808201909152600781527f42534c20312e31000000000000000000000000000000000000000000000000006020820152919050565b60408084015184519151614eab929060200161a1ee565b60608060005b8451811015617ea55781858281518110617e3c57617e3c619aad565b6020026020010151604051602001617e55929190619604565b604051602081830303815290604052915060018551617e74919061a0fd565b8114617e9d5781604051602001617e8b919061a357565b60405160208183030381529060405291505b600101617e20565b5060408051600380825260808201909252600091816020015b6060815260200190600190039081617ebe5790505090508381600081518110617ee957617ee9619aad565b60200260200101819052506040518060400160405280600281526020017f2d6300000000000000000000000000000000000000000000000000000000000081525081600181518110617f3d57617f3d619aad565b60200260200101819052508181600281518110617f5c57617f5c619aad565b6020908102919091010152949350505050565b6020808301518351835192840151600093617f8d9291849190618966565b14159392505050565b60408051808201909152600080825260208201526000617fc88460000151856020015185600001518660200151618a77565b9050836020015181617fda919061a0fd565b84518590617fe990839061a0fd565b90525060208401525090919050565b604080518082019091526000808252602082015281518351101561801d575081614cdf565b60208083015190840151600191146180445750815160208481015190840151829020919020145b80156180755782518451859061805b90839061a0fd565b90525082516020850180516180719083906192a1565b9052505b509192915050565b604080518082019091526000808252602082015261809c838383618b97565b5092915050565b60606000826000015167ffffffffffffffff8111156180c4576180c46194e7565b6040519080825280601f01601f1916602001820160405280156180ee576020820181803683370190505b509050600060208201905061809c8185602001518660000151618c42565b606060006181186150d5565b6040805160ff808252612000820190925291925060009190816020015b606081526020019060019003908161813557905050905060006040518060400160405280600381526020017f6e7078000000000000000000000000000000000000000000000000000000000081525082828061819090619c1a565b935060ff16815181106181a5576181a5619aad565b60200260200101819052506040518060400160405280600781526020017f5e312e33322e33000000000000000000000000000000000000000000000000008152506040516020016181f6919061a398565b60405160208183030381529060405282828061821190619c1a565b935060ff168151811061822657618226619aad565b60200260200101819052506040518060400160405280600881526020017f76616c696461746500000000000000000000000000000000000000000000000081525082828061827390619c1a565b935060ff168151811061828857618288619aad565b6020026020010181905250826040516020016182a49190619b48565b6040516020818303038152906040528282806182bf90619c1a565b935060ff16815181106182d4576182d4619aad565b60200260200101819052506040518060400160405280600a81526020017f2d2d636f6e74726163740000000000000000000000000000000000000000000081525082828061832190619c1a565b935060ff168151811061833657618336619aad565b602002602001018190525061834b8784618cbc565b828261835681619c1a565b935060ff168151811061836b5761836b619aad565b6020908102919091010152855151156184175760408051808201909152600b81527f2d2d7265666572656e6365000000000000000000000000000000000000000000602082015282826183bd81619c1a565b935060ff16815181106183d2576183d2619aad565b60200260200101819052506183eb866000015184618cbc565b82826183f681619c1a565b935060ff168151811061840b5761840b619aad565b60200260200101819052505b8560800151156184855760408051808201909152601881527f2d2d756e73616665536b697053746f72616765436865636b00000000000000006020820152828261846081619c1a565b935060ff168151811061847557618475619aad565b60200260200101819052506184eb565b84156184eb5760408051808201909152601281527f2d2d726571756972655265666572656e63650000000000000000000000000000602082015282826184ca81619c1a565b935060ff16815181106184df576184df619aad565b60200260200101819052505b604086015151156185875760408051808201909152600d81527f2d2d756e73616665416c6c6f77000000000000000000000000000000000000006020820152828261853581619c1a565b935060ff168151811061854a5761854a619aad565b6020026020010181905250856040015182828061856690619c1a565b935060ff168151811061857b5761857b619aad565b60200260200101819052505b8560600151156185f15760408051808201909152601481527f2d2d756e73616665416c6c6f7752656e616d6573000000000000000000000000602082015282826185d081619c1a565b935060ff16815181106185e5576185e5619aad565b60200260200101819052505b60008160ff1667ffffffffffffffff81111561860f5761860f6194e7565b60405190808252806020026020018201604052801561864257816020015b606081526020019060019003908161862d5790505b50905060005b8260ff168160ff16101561869b57838160ff168151811061866b5761866b619aad565b6020026020010151828260ff168151811061868857618688619aad565b6020908102919091010152600101618648565b50979650505050505050565b60408051808201909152600080825260208201528151835110156186cc575081614cdf565b815183516020850151600092916186e2916192a1565b6186ec919061a0fd565b6020840151909150600190821461870d575082516020840151819020908220145b80156187285783518551869061872490839061a0fd565b9052505b50929392505050565b60008082600001516187558560000151866020015186600001518760200151618a77565b61875f91906192a1565b90505b8351602085015161877391906192a1565b811161809c57816187838161a3dd565b92505082600001516187ba85602001518361879e919061a0fd565b86516187aa919061a0fd565b8386600001518760200151618a77565b6187c491906192a1565b9050618762565b606060006187d98484618731565b6187e49060016192a1565b67ffffffffffffffff8111156187fc576187fc6194e7565b60405190808252806020026020018201604052801561882f57816020015b606081526020019060019003908161881a5790505b50905060005b8151811015616aa45761884b616cc6868661807d565b82828151811061885d5761885d619aad565b6020908102919091010152600101618835565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f01000000000000000083106188b9577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef810000000083106188e5576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc10000831061890357662386f26fc10000830492506010015b6305f5e100831061891b576305f5e100830492506008015b612710831061892f57612710830492506004015b60648310618941576064830492506002015b600a8310614cdf5760010192915050565b600061895e8383618cfc565b159392505050565b600080858411618a6d5760208411618a1957600084156189b157600161898d86602061a0fd565b61899890600861a3f7565b6189a390600261a4f5565b6189ad919061a0fd565b1990505b83518116856189c089896192a1565b6189ca919061a0fd565b805190935082165b818114618a04578784116189ec57879450505050506166d5565b836189f68161a501565b9450508284511690506189d2565b618a0e87856192a1565b9450505050506166d5565b838320618a26858861a0fd565b618a3090876192a1565b91505b858210618a6b57848220808203618a5857618a4e86846192a1565b93505050506166d5565b618a6360018461a0fd565b925050618a33565b505b5092949350505050565b60008381868511618b825760208511618b315760008515618ac3576001618a9f87602061a0fd565b618aaa90600861a3f7565b618ab590600261a4f5565b618abf919061a0fd565b1990505b84518116600087618ad48b8b6192a1565b618ade919061a0fd565b855190915083165b828114618b2357818610618b0b57618afe8b8b6192a1565b96505050505050506166d5565b85618b158161a3dd565b965050838651169050618ae6565b8596505050505050506166d5565b508383206000905b618b43868961a0fd565b8211618b8057858320808203618b5f57839450505050506166d5565b618b6a6001856192a1565b9350508180618b789061a3dd565b925050618b39565b505b618b8c87876192a1565b979650505050505050565b60408051808201909152600080825260208201526000618bc98560000151866020015186600001518760200151618a77565b602080870180519186019190915251909150618be5908261a0fd565b835284516020860151618bf891906192a1565b8103618c075760008552618c39565b83518351618c1591906192a1565b85518690618c2490839061a0fd565b9052508351618c3390826192a1565b60208601525b50909392505050565b60208110618c7a5781518352618c596020846192a1565b9250618c666020836192a1565b9150618c7360208261a0fd565b9050618c42565b6000198115618ca9576001618c9083602061a0fd565b618c9c9061010061a4f5565b618ca6919061a0fd565b90505b9151835183169219169190911790915250565b60606000618cca84846151a8565b8051602080830151604051939450618ce49390910161a518565b60405160208183030381529060405291505092915050565b8151815160009190811115618d0f575081515b6020808501519084015160005b83811015618dc85782518251808214618d98576000196020871015618d7757600184618d4989602061a0fd565b618d5391906192a1565b618d5e90600861a3f7565b618d6990600261a4f5565b618d73919061a0fd565b1990505b8181168382168181039114618d95579750614cdf9650505050505050565b50505b618da36020866192a1565b9450618db06020856192a1565b93505050602081618dc191906192a1565b9050618d1c565b5084518651615856919061a570565b6112a68061a59183390190565b6116fe8061b83783390190565b61155a8061cf3583390190565b610d5e8061e48f83390190565b6040518060e00160405280606081526020016060815260200160608152602001600015158152602001600015158152602001600015158152602001618e4e618e53565b905290565b60405180610100016040528060001515815260200160001515815260200160608152602001600080191681526020016060815260200160608152602001600015158152602001618e4e6040518060800160405280600081526020016000815260200160008152602001600081525090565b602080825282518282018190526000918401906040840190835b81811015618f055783516001600160a01b0316835260209384019390920191600101618ede565b509095945050505050565b60005b83811015618f2b578181015183820152602001618f13565b50506000910152565b60008151808452618f4c816020860160208601618f10565b601f01601f19169290920160200192915050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b8281101561905c577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452815180516001600160a01b03168652602090810151604082880181905281519088018190529101906060600582901b88018101919088019060005b81811015619042577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa08a850301835261902c848651618f34565b6020958601959094509290920191600101618ff2565b509197505050602094850194929092019150600101618f88565b50929695505050505050565b600081518084526020840193506020830160005b828110156190bc5781517fffffffff000000000000000000000000000000000000000000000000000000001686526020958601959091019060010161907c565b5093949350505050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b8281101561905c577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc087860301845281518051604087526191326040880182618f34565b905060208201519150868103602088015261914d8183619068565b9650505060209384019391909101906001016190ee565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b8281101561905c577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08786030184526191c6858351618f34565b9450602093840193919091019060010161918c565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b8281101561905c577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc087860301845281516001600160a01b038151168652602081015190506040602087015261925c6040870182619068565b9550506020938401939190910190600101619203565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b80820180821115614cdf57614cdf619272565b6001600160a01b03841681528260208201526080604082015260006192dc6080830184618f34565b905060006060830152949350505050565b600181811c9082168061930157607f821691505b602082108103616fa1577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006020828403121561934c57600080fd5b5051919050565b6001600160a01b0384168152826020820152606060408201526000616f876060830184618f34565b8281526040602082015260006166d56040830184618f34565b6001600160a01b03851681528360208201526080604082015260006193bc6080830185618f34565b905082606083015295945050505050565b602081526000614dd86020830184618f34565b600082619416577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b6001600160a01b03831681526040602082015260006166d56040830184618f34565b7f4661696c656420746f206465706c6f7920636f6e74726163742000000000000081526000835161947581601a850160208801618f10565b7f3a20000000000000000000000000000000000000000000000000000000000000601a9184019182015283516194b281601c840160208801618f10565b01601c01949350505050565b6000602082840312156194d057600080fd5b81516001600160a01b0381168114614dd857600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040516060810167ffffffffffffffff81118282101715619539576195396194e7565b60405290565b60008067ffffffffffffffff84111561955a5761955a6194e7565b50604051601f19601f85018116603f0116810181811067ffffffffffffffff82111715619589576195896194e7565b6040528381529050808284018510156195a157600080fd5b616aa4846020830185618f10565b600082601f8301126195c057600080fd5b614dd88383516020850161953f565b6000602082840312156195e157600080fd5b815167ffffffffffffffff8111156195f857600080fd5b614cdb848285016195af565b60008351619616818460208801618f10565b83519083019061962a818360208801618f10565b01949350505050565b7f4661696c656420746f206465706c6f7920636f6e74726163742000000000000081526000835161966b81601a850160208801618f10565b7f207573696e6720636f6e7374727563746f722064617461202200000000000000601a9184019182015283516196a8816033840160208801618f10565b7f220000000000000000000000000000000000000000000000000000000000000060339290910191820152603401949350505050565b60408152600b60408201527f464f554e4452595f4f55540000000000000000000000000000000000000000006060820152608060208201526000614dd86080830184618f34565b60006020828403121561973757600080fd5b815167ffffffffffffffff81111561974e57600080fd5b8201601f8101841361975f57600080fd5b614cdb8482516020840161953f565b60008551619780818460208a01618f10565b7f2f0000000000000000000000000000000000000000000000000000000000000090830190815285516197ba816001840160208a01618f10565b7f2f000000000000000000000000000000000000000000000000000000000000006001929091019182015284516197f8816002840160208901618f10565b6001818301019150507f2f000000000000000000000000000000000000000000000000000000000000006001820152835161983a816002840160208801618f10565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600292909101918201526007019695505050505050565b6040815260006198856040830184618f34565b8281036020840152600481527f2e6173740000000000000000000000000000000000000000000000000000000060208201526040810191505092915050565b6000602082840312156198d657600080fd5b81518015158114614dd857600080fd5b7f436f756c64206e6f742066696e642041535420696e206172746966616374200081526000825161991e81601f850160208701618f10565b7f2e205365742060617374203d20747275656020696e20666f756e6472792e746f601f9390910192830152507f6d6c000000000000000000000000000000000000000000000000000000000000603f820152604101919050565b60408152600061998b6040830184618f34565b8281036020840152601181527f2e6173742e6162736f6c7574655061746800000000000000000000000000000060208201526040810191505092915050565b6040815260006199dd6040830184618f34565b8281036020840152600c81527f2e6173742e6c6963656e7365000000000000000000000000000000000000000060208201526040810191505092915050565b7f2e6d657461646174612e736f75726365732e5b27000000000000000000000000815260008251619a54816014850160208701618f10565b7f275d2e6b656363616b32353600000000000000000000000000000000000000006014939091019283015250602001919050565b604081526000619a9b6040830185618f34565b8281036020840152614dd48185618f34565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f2200000000000000000000000000000000000000000000000000000000000000815260008251619b14816001850160208701618f10565b7f22000000000000000000000000000000000000000000000000000000000000006001939091019283015250600201919050565b60008251619b5a818460208701618f10565b7f2f6275696c642d696e666f000000000000000000000000000000000000000000920191825250600b01919050565b7f436f756c64206e6f742066696e64206275696c642d696e666f2066696c65207781527f697468206d61746368696e6720736f7572636520636f6465206861736820666f60208201527f7220636f6e747261637420000000000000000000000000000000000000000000604082015260008251619c0d81604b850160208701618f10565b91909101604b0192915050565b600060ff821660ff8103619c3057619c30619272565b60010192915050565b7f406f70656e7a657070656c696e2f646566656e6465722d6465706c6f792d636c81527f69656e742d636c69400000000000000000000000000000000000000000000000602082015260008251619c97816029850160208701618f10565b9190910160290192915050565b60408152601660408201527f4f50454e5a455050454c494e5f424153485f50415448000000000000000000006060820152608060208201526000614dd86080830184618f34565b600060208284031215619cfd57600080fd5b815167ffffffffffffffff811115619d1457600080fd5b820160608185031215619d2657600080fd5b619d2e619516565b81518060030b8114619d3f57600080fd5b8152602082015167ffffffffffffffff811115619d5b57600080fd5b619d67868285016195af565b602083015250604082015167ffffffffffffffff811115619d8757600080fd5b619d93868285016195af565b604083015250949350505050565b7f4661696c656420746f2072756e206261736820636f6d6d616e6420776974682081527f2200000000000000000000000000000000000000000000000000000000000000602082015260008251619dff816021850160208701618f10565b7f222e20496620796f7520617265207573696e672057696e646f77732c2073657460219390910192830152507f20746865204f50454e5a455050454c494e5f424153485f5041544820656e766960418201527f726f6e6d656e74207661726961626c6520746f207468652066756c6c7920717560618201527f616c69666965642070617468206f66207468652062617368206578656375746160818201527f626c652e20466f72206578616d706c652c20696620796f75206172652075736960a18201527f6e672047697420666f722057696e646f77732c206164642074686520666f6c6c60c18201527f6f77696e67206c696e6520696e20746865202e656e762066696c65206f66207960e18201527f6f75722070726f6a65637420287573696e6720666f727761726420736c6173686101018201527f6573293a0a4f50454e5a455050454c494e5f424153485f504154483d22433a2f6101218201527f50726f6772616d2046696c65732f4769742f62696e2f6261736822000000000061014182015261015c01919050565b7f4661696c656420746f2066696e64206c696e652077697468207072656669782081527f2700000000000000000000000000000000000000000000000000000000000000602082015260008351619feb816021850160208801618f10565b7f2720696e206f75747075743a2000000000000000000000000000000000000000602191840191820152835161a02881602e840160208801618f10565b01602e01949350505050565b7f4661696c656420746f2072756e2075706772616465207361666574792076616c81527f69646174696f6e3a200000000000000000000000000000000000000000000000602082015260008251619c97816029850160208701618f10565b7f55706772616465207361666574792076616c69646174696f6e206661696c656481527f3a0a00000000000000000000000000000000000000000000000000000000000060208201526000825161a0f0816022850160208701618f10565b9190910160220192915050565b81810381811115614cdf57614cdf619272565b7f436f6e7472616374206e616d652000000000000000000000000000000000000081526000825161a14881600e850160208701618f10565b7f206d75737420626520696e2074686520666f726d6174204d79436f6e74726163600e9390910192830152507f742e736f6c3a4d79436f6e7472616374206f72204d79436f6e74726163742e73602e8201527f6f6c206f72206f75742f4d79436f6e74726163742e736f6c2f4d79436f6e7472604e8201527f6163742e6a736f6e000000000000000000000000000000000000000000000000606e820152607601919050565b7f53504458206c6963656e7365206964656e74696669657220000000000000000081526000835161a226816018850160208801618f10565b7f20696e2000000000000000000000000000000000000000000000000000000000601891840191820152835161a26381601c840160208801618f10565b7f20646f6573206e6f74206c6f6f6b206c696b65206120737570706f7274656420601c92909101918201527f6c6963656e736520666f7220626c6f636b206578706c6f726572207665726966603c8201527f69636174696f6e2e205573652074686520606c6963656e73655479706560206f605c8201527f7074696f6e20746f20737065636966792061206c6963656e736520747970652c607c8201527f206f7220736574207468652060736b69704c6963656e73655479706560206f70609c8201527f74696f6e20746f2060747275656020746f20736b69702e00000000000000000060bc82015260d301949350505050565b6000825161a369818460208701618f10565b7f2000000000000000000000000000000000000000000000000000000000000000920191825250600101919050565b7f406f70656e7a657070656c696e2f75706772616465732d636f7265400000000081526000825161a3d081601c850160208701618f10565b91909101601c0192915050565b6000600019820361a3f05761a3f0619272565b5060010190565b8082028115828204841417614cdf57614cdf619272565b6001815b600184111561a4495780850481111561a42d5761a42d619272565b600184161561a43b57908102905b60019390931c92800261a412565b935093915050565b60008261a46057506001614cdf565b8161a46d57506000614cdf565b816001811461a483576002811461a48d5761a4a9565b6001915050614cdf565b60ff84111561a49e5761a49e619272565b50506001821b614cdf565b5060208310610133831016604e8410600b841016171561a4cc575081810a614cdf565b61a4d9600019848461a40e565b806000190482111561a4ed5761a4ed619272565b029392505050565b6000614dd8838361a451565b60008161a5105761a510619272565b506000190190565b6000835161a52a818460208801618f10565b7f3a00000000000000000000000000000000000000000000000000000000000000908301908152835161a564816001840160208801618f10565b01600101949350505050565b818103600083128015838313168383128216171561809c5761809c61927256fe608060405234801561001057600080fd5b506040516112a63803806112a683398101604081905261002f91610110565b604051806040016040528060048152602001635a65746160e01b815250604051806040016040528060048152602001635a45544160e01b815250816003908161007891906101e2565b50600461008582826101e2565b5050506001600160a01b03821615806100a557506001600160a01b038116155b156100c35760405163e6c4247b60e01b815260040160405180910390fd5b600680546001600160a01b039384166001600160a01b031991821617909155600780549290931691161790556102a0565b80516001600160a01b038116811461010b57600080fd5b919050565b6000806040838503121561012357600080fd5b61012c836100f4565b915061013a602084016100f4565b90509250929050565b634e487b7160e01b600052604160045260246000fd5b600181811c9082168061016d57607f821691505b60208210810361018d57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156101dd57806000526020600020601f840160051c810160208510156101ba5750805b601f840160051c820191505b818110156101da57600081556001016101c6565b50505b505050565b81516001600160401b038111156101fb576101fb610143565b61020f816102098454610159565b84610193565b6020601f821160018114610243576000831561022b5750848201515b600019600385901b1c1916600184901b1784556101da565b600084815260208120601f198516915b828110156102735787850151825560209485019460019092019101610253565b50848210156102915786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b610ff7806102af6000396000f3fe608060405234801561001057600080fd5b506004361061011b5760003560e01c806342966c68116100b257806379cc679011610081578063a9059cbb11610066578063a9059cbb1461028e578063bff9662a146102a1578063dd62ed3e146102c157600080fd5b806379cc67901461027357806395d89b411461028657600080fd5b806342966c68146102025780635b1125911461021557806370a0823114610235578063779e3b631461026b57600080fd5b80631e458bee116100ee5780631e458bee1461018857806323b872dd1461019b578063313ce567146101ae578063328a01d0146101bd57600080fd5b806306fdde0314610120578063095ea7b31461013e57806315d57fd41461016157806318160ddd14610176575b600080fd5b610128610307565b6040516101359190610d97565b60405180910390f35b61015161014c366004610e2c565b610399565b6040519015158152602001610135565b61017461016f366004610e56565b6103b3565b005b6002545b604051908152602001610135565b610174610196366004610e89565b61057e565b6101516101a9366004610ebc565b610631565b60405160128152602001610135565b6007546101dd9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610135565b610174610210366004610ef9565b610655565b6006546101dd9073ffffffffffffffffffffffffffffffffffffffff1681565b61017a610243366004610f12565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b610174610662565b610174610281366004610e2c565b610786565b610128610837565b61015161029c366004610e2c565b610846565b6005546101dd9073ffffffffffffffffffffffffffffffffffffffff1681565b61017a6102cf366004610e56565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b60606003805461031690610f34565b80601f016020809104026020016040519081016040528092919081815260200182805461034290610f34565b801561038f5780601f106103645761010080835404028352916020019161038f565b820191906000526020600020905b81548152906001019060200180831161037257829003601f168201915b5050505050905090565b6000336103a7818585610854565b60019150505b92915050565b60075473ffffffffffffffffffffffffffffffffffffffff1633148015906103f3575060065473ffffffffffffffffffffffffffffffffffffffff163314155b15610431576040517fcdfcef970000000000000000000000000000000000000000000000000000000081523360048201526024015b60405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff82161580610468575073ffffffffffffffffffffffffffffffffffffffff8116155b1561049f576040517fe6c4247b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6006805473ffffffffffffffffffffffffffffffffffffffff8481167fffffffffffffffffffffffff0000000000000000000000000000000000000000928316811790935560058054918516919092161790556040805133815260208101929092527fe79965b5c67dcfb2cf5fe152715e4a7256cee62a3d5dd8484fd8a8539eb8beff910160405180910390a16040805133815273ffffffffffffffffffffffffffffffffffffffff831660208201527f1b9352454524a57a51f24f67dc66d898f616922cd1f7a12d73570ece12b1975c910160405180910390a15050565b60055473ffffffffffffffffffffffffffffffffffffffff1633146105d1576040517f3fe32fba000000000000000000000000000000000000000000000000000000008152336004820152602401610428565b6105db8383610866565b808373ffffffffffffffffffffffffffffffffffffffff167fc263b302aec62d29105026245f19e16f8e0137066ccd4a8bd941f716bd4096bb8460405161062491815260200190565b60405180910390a3505050565b60003361063f8582856108c6565b61064a858585610995565b506001949350505050565b61065f3382610a40565b50565b60075473ffffffffffffffffffffffffffffffffffffffff1633146106b5576040517fe700765e000000000000000000000000000000000000000000000000000000008152336004820152602401610428565b60065473ffffffffffffffffffffffffffffffffffffffff16610704576040517fe6c4247b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600654600780547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff90921691821790556040805133815260208101929092527f5104c9abdc7d111c2aeb4ce890ac70274a4be2ee83f46a62551be5e6ebc82dd0910160405180910390a1565b60055473ffffffffffffffffffffffffffffffffffffffff1633146107d9576040517f3fe32fba000000000000000000000000000000000000000000000000000000008152336004820152602401610428565b6107e38282610a9c565b8173ffffffffffffffffffffffffffffffffffffffff167f919f7e2092ffcc9d09f599be18d8152860b0c054df788a33bc549cdd9d0f15b18260405161082b91815260200190565b60405180910390a25050565b60606004805461031690610f34565b6000336103a7818585610995565b6108618383836001610ab1565b505050565b73ffffffffffffffffffffffffffffffffffffffff82166108b6576040517fec442f0500000000000000000000000000000000000000000000000000000000815260006004820152602401610428565b6108c260008383610bf9565b5050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811461098f5781811015610980576040517ffb8f41b200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff841660048201526024810182905260448101839052606401610428565b61098f84848484036000610ab1565b50505050565b73ffffffffffffffffffffffffffffffffffffffff83166109e5576040517f96c6fd1e00000000000000000000000000000000000000000000000000000000815260006004820152602401610428565b73ffffffffffffffffffffffffffffffffffffffff8216610a35576040517fec442f0500000000000000000000000000000000000000000000000000000000815260006004820152602401610428565b610861838383610bf9565b73ffffffffffffffffffffffffffffffffffffffff8216610a90576040517f96c6fd1e00000000000000000000000000000000000000000000000000000000815260006004820152602401610428565b6108c282600083610bf9565b610aa78233836108c6565b6108c28282610a40565b73ffffffffffffffffffffffffffffffffffffffff8416610b01576040517fe602df0500000000000000000000000000000000000000000000000000000000815260006004820152602401610428565b73ffffffffffffffffffffffffffffffffffffffff8316610b51576040517f94280d6200000000000000000000000000000000000000000000000000000000815260006004820152602401610428565b73ffffffffffffffffffffffffffffffffffffffff8085166000908152600160209081526040808320938716835292905220829055801561098f578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051610beb91815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff8316610c31578060026000828254610c269190610f87565b90915550610ce39050565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205481811015610cb7576040517fe450d38c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff851660048201526024810182905260448101839052606401610428565b73ffffffffffffffffffffffffffffffffffffffff841660009081526020819052604090209082900390555b73ffffffffffffffffffffffffffffffffffffffff8216610d0c57600280548290039055610d38565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090208054820190555b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161062491815260200190565b602081526000825180602084015260005b81811015610dc55760208186018101516040868401015201610da8565b5060006040828501015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011684010191505092915050565b803573ffffffffffffffffffffffffffffffffffffffff81168114610e2757600080fd5b919050565b60008060408385031215610e3f57600080fd5b610e4883610e03565b946020939093013593505050565b60008060408385031215610e6957600080fd5b610e7283610e03565b9150610e8060208401610e03565b90509250929050565b600080600060608486031215610e9e57600080fd5b610ea784610e03565b95602085013595506040909401359392505050565b600080600060608486031215610ed157600080fd5b610eda84610e03565b9250610ee860208501610e03565b929592945050506040919091013590565b600060208284031215610f0b57600080fd5b5035919050565b600060208284031215610f2457600080fd5b610f2d82610e03565b9392505050565b600181811c90821680610f4857607f821691505b602082108103610f81577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b808201808211156103ad577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea2646970667358221220085f01204b33dc17013c78c74fbca32a3da2c0b384ce7c8878c889551af28c6164736f6c634300081a003360a060405234801561001057600080fd5b506040516116fe3803806116fe83398101604081905261002f916101e5565b60016000556002805460ff191690556001600160a01b038316158061005b57506001600160a01b038216155b8061006d57506001600160a01b038116155b1561008b5760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b0383166080526100a3600082610134565b506100ce7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a82610134565b506100f97f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e483610134565b506101126000805160206116de83398151915282610134565b5061012b6000805160206116de83398151915283610134565b50505050610228565b60008281526001602090815260408083206001600160a01b038516845290915281205460ff166101bf5760008381526001602081815260408084206001600160a01b0387168086529252808420805460ff19169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45060016101c3565b5060005b92915050565b80516001600160a01b03811681146101e057600080fd5b919050565b6000806000606084860312156101fa57600080fd5b610203846101c9565b9250610211602085016101c9565b915061021f604085016101c9565b90509250925092565b60805161147f61025f6000396000818161019e0152818161050001528181610562015281816108f70152610959015261147f6000f3fe608060405234801561001057600080fd5b506004361061016c5760003560e01c806385f438c1116100cd578063c8a0236211610081578063d936547e11610066578063d936547e14610355578063d9caed1214610378578063e63ab1e91461038b57600080fd5b8063c8a023621461032f578063d547741f1461034257600080fd5b80639a590427116100b25780639a590427146103015780639b19251a14610314578063a217fddf1461032757600080fd5b806385f438c11461029457806391d14854146102bb57600080fd5b806336568abe11610124578063570618e111610109578063570618e11461025a5780635c975abb146102815780638456cb591461028c57600080fd5b806336568abe1461023f5780633f4ba83a1461025257600080fd5b806321fc65f21161015557806321fc65f2146101e5578063248a9ca3146101fa5780632f2ff15d1461022c57600080fd5b806301ffc9a714610171578063116191b614610199575b600080fd5b61018461017f36600461118a565b6103b2565b60405190151581526020015b60405180910390f35b6101c07f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610190565b6101f86101f33660046111f5565b61044b565b005b61021e610208366004611292565b6000908152600160208190526040909120015490565b604051908152602001610190565b6101f861023a3660046112ab565b61064c565b6101f861024d3660046112ab565b610678565b6101f86106d6565b61021e7f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a81565b60025460ff16610184565b6101f861070b565b61021e7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b6101846102c93660046112ab565b600091825260016020908152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b6101f861030f3660046112d7565b61073d565b6101f86103223660046112d7565b6107be565b61021e600081565b6101f861033d3660046111f5565b610842565b6101f86103503660046112ab565b610a29565b6101846103633660046112d7565b60036020526000908152604090205460ff1681565b6101f86103863660046112f2565b610a4f565b61021e7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061044557507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b610453610b7b565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461047d81610bbe565b610485610bc8565b73ffffffffffffffffffffffffffffffffffffffff861660009081526003602052604090205460ff166104e4576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61052573ffffffffffffffffffffffffffffffffffffffff87167f000000000000000000000000000000000000000000000000000000000000000086610c07565b6040517f5131ab5900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690635131ab599061059f9089908990899089908990600401611378565b600060405180830381600087803b1580156105b957600080fd5b505af11580156105cd573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167f85b5be9cf454e05e0bddf49315178102227c312078eefa3c00294fb4d912ae4e868686604051610632939291906113d5565b60405180910390a3506106456001600055565b5050505050565b6000828152600160208190526040909120015461066881610bbe565b6106728383610c94565b50505050565b73ffffffffffffffffffffffffffffffffffffffff811633146106c7576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6106d18282610d41565b505050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61070081610bbe565b610708610de2565b50565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61073581610bbe565b610708610e41565b7f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a61076781610bbe565b73ffffffffffffffffffffffffffffffffffffffff8216600081815260036020526040808220805460ff19169055517f51085ddf9ebdded84b76e829eb58c4078e4b5bdf97d9a94723f336039da467919190a25050565b7f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a6107e881610bbe565b73ffffffffffffffffffffffffffffffffffffffff8216600081815260036020526040808220805460ff19166001179055517faab7954e9d246b167ef88aeddad35209ca2489d95a8aeb59e288d9b19fae5a549190a25050565b61084a610b7b565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461087481610bbe565b61087c610bc8565b73ffffffffffffffffffffffffffffffffffffffff861660009081526003602052604090205460ff166108db576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61091c73ffffffffffffffffffffffffffffffffffffffff87167f000000000000000000000000000000000000000000000000000000000000000086610c07565b6040517fb8969bd400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063b8969bd4906109969089908990899089908990600401611378565b600060405180830381600087803b1580156109b057600080fd5b505af11580156109c4573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fb9d4efa96044e5f5e03e696fa9ae2ff66911cc27e8a637c3627c75bc5b2241c8868686604051610632939291906113d5565b60008281526001602081905260409091200154610a4581610bbe565b6106728383610d41565b610a57610b7b565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e4610a8181610bbe565b610a89610bc8565b73ffffffffffffffffffffffffffffffffffffffff841660009081526003602052604090205460ff16610ae8576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610b0973ffffffffffffffffffffffffffffffffffffffff85168484610c07565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f9b1bfa7fa9ee420a16e124f794c35ac9f90472acc99140eb2f6447c714cad8eb84604051610b6891815260200190565b60405180910390a3506106d16001600055565b600260005403610bb7576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b6107088133610e7e565b60025460ff1615610c05576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6040805173ffffffffffffffffffffffffffffffffffffffff8416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb000000000000000000000000000000000000000000000000000000001790526106d1908490610f0f565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff16610d3957600083815260016020818152604080842073ffffffffffffffffffffffffffffffffffffffff87168086529252808420805460ff19169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a4506001610445565b506000610445565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff1615610d3957600083815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff86168085529252808320805460ff1916905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a4506001610445565b610dea610fa5565b6002805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b610e49610bc8565b6002805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258610e173390565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16610f0b576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82166004820152602481018390526044015b60405180910390fd5b5050565b6000610f3173ffffffffffffffffffffffffffffffffffffffff841683610fe1565b90508051600014158015610f56575080806020019051810190610f5491906113f8565b155b156106d1576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84166004820152602401610f02565b60025460ff16610c05576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6060610fef83836000610ff6565b9392505050565b606081471015611034576040517fcd786059000000000000000000000000000000000000000000000000000000008152306004820152602401610f02565b6000808573ffffffffffffffffffffffffffffffffffffffff16848660405161105d919061141a565b60006040518083038185875af1925050503d806000811461109a576040519150601f19603f3d011682016040523d82523d6000602084013e61109f565b606091505b50915091506110af8683836110b9565b9695505050505050565b6060826110ce576110c982611148565b610fef565b81511580156110f2575073ffffffffffffffffffffffffffffffffffffffff84163b155b15611141576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85166004820152602401610f02565b5080610fef565b8051156111585780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006020828403121561119c57600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610fef57600080fd5b803573ffffffffffffffffffffffffffffffffffffffff811681146111f057600080fd5b919050565b60008060008060006080868803121561120d57600080fd5b611216866111cc565b9450611224602087016111cc565b935060408601359250606086013567ffffffffffffffff81111561124757600080fd5b8601601f8101881361125857600080fd5b803567ffffffffffffffff81111561126f57600080fd5b88602082840101111561128157600080fd5b959894975092955050506020019190565b6000602082840312156112a457600080fd5b5035919050565b600080604083850312156112be57600080fd5b823591506112ce602084016111cc565b90509250929050565b6000602082840312156112e957600080fd5b610fef826111cc565b60008060006060848603121561130757600080fd5b611310846111cc565b925061131e602085016111cc565b929592945050506040919091013590565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff8616815273ffffffffffffffffffffffffffffffffffffffff851660208201528360408201526080606082015260006113ca60808301848661132f565b979650505050505050565b8381526040602082015260006113ef60408301848661132f565b95945050505050565b60006020828403121561140a57600080fd5b81518015158114610fef57600080fd5b6000825160005b8181101561143b5760208186018101518583015201611421565b50600092019182525091905056fea2646970667358221220dc54ce548a1f0bf8ba5e86cc53c6d822e55eee543451395733c659359bac8dd164736f6c634300081a00338619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a60c060405260001960035534801561001657600080fd5b5060405161155a38038061155a83398101604081905261003591610220565b60016000819055805460ff19169055838383836001600160a01b038416158061006557506001600160a01b038316155b8061007757506001600160a01b038216155b8061008957506001600160a01b038116155b156100a75760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b03808516608052831660a0526100c5600082610154565b506100f07f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e483610154565b5061011b7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb83610154565b506101467f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a82610154565b505050505050505050610274565b60008281526002602090815260408083206001600160a01b038516845290915281205460ff166101fa5760008381526002602090815260408083206001600160a01b03861684529091529020805460ff191660011790556101b23390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45060016101fe565b5060005b92915050565b80516001600160a01b038116811461021b57600080fd5b919050565b6000806000806080858703121561023657600080fd5b61023f85610204565b935061024d60208601610204565b925061025b60408601610204565b915061026960608601610204565b905092959194509250565b60805160a0516112826102d86000396000818161021d01528181610531015281816108240152818161097b01528181610ad00152610bf20152600081816101d1015281816104a1015281816105040152818161079401526107f701526112826000f3fe608060405234801561001057600080fd5b50600436106101775760003560e01c80635e3e9fef116100d857806391d148541161008c578063d547741f11610066578063d547741f14610386578063d5abeb0114610399578063e63ab1e9146103a257600080fd5b806391d1485414610311578063a217fddf14610357578063a783c7891461035f57600080fd5b8063743e0c9b116100bd578063743e0c9b146102cf5780638456cb59146102e257806385f438c1146102ea57600080fd5b80635e3e9fef146102a95780636f8b44b0146102bc57600080fd5b8063248a9ca31161012f57806336568abe1161011457806336568abe146102835780633f4ba83a146102965780635c975abb1461029e57600080fd5b8063248a9ca31461023f5780632f2ff15d1461027057600080fd5b8063106e629011610160578063106e6290146101b9578063116191b6146101cc57806321e093b11461021857600080fd5b806301ffc9a71461017c57806302d5c899146101a4575b600080fd5b61018f61018a366004610fb4565b6103c9565b60405190151581526020015b60405180910390f35b6101b76101b2366004611026565b610462565b005b6101b76101c73660046110b8565b6105f7565b6101f37f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161019b565b6101f37f000000000000000000000000000000000000000000000000000000000000000081565b61026261024d3660046110eb565b60009081526002602052604090206001015490565b60405190815260200161019b565b6101b761027e366004611104565b61069c565b6101b7610291366004611104565b6106c7565b6101b7610720565b60015460ff1661018f565b6101b76102b7366004611026565b610755565b6101b76102ca3660046110eb565b6108d0565b6101b76102dd3660046110eb565b61093e565b6101b76109e8565b6102627f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b61018f61031f366004611104565b600091825260026020908152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b610262600081565b6102627f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb81565b6101b7610394366004611104565b610a1a565b61026260035481565b6102627f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061045c57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b61046a610a3f565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461049481610a82565b61049c610a8c565b6104c77f00000000000000000000000000000000000000000000000000000000000000008684610acb565b6040517fb8969bd400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063b8969bd490610561907f0000000000000000000000000000000000000000000000000000000000000000908a908a908a908a90600401611179565b600060405180830381600087803b15801561057b57600080fd5b505af115801561058f573d6000803e3d6000fd5b505050508573ffffffffffffffffffffffffffffffffffffffff167fba96f26bdda53eb8c8ba39045dfb4ff39753fbc7a6edcf250a88e75e78d102fe8686866040516105dd939291906111d6565b60405180910390a2506105f06001600055565b5050505050565b6105ff610a3f565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461062981610a82565b610631610a8c565b61063c848484610acb565b8373ffffffffffffffffffffffffffffffffffffffff167f884edad9ce6fa2440d8a54cc123490eb96d2768479d49ff9c7366125a94243648460405161068491815260200190565b60405180910390a2506106976001600055565b505050565b6000828152600260205260409020600101546106b781610a82565b6106c18383610c53565b50505050565b73ffffffffffffffffffffffffffffffffffffffff81163314610716576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6106978282610d53565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61074a81610a82565b610752610e12565b50565b61075d610a3f565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461078781610a82565b61078f610a8c565b6107ba7f00000000000000000000000000000000000000000000000000000000000000008684610acb565b6040517f5131ab5900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690635131ab5990610854907f0000000000000000000000000000000000000000000000000000000000000000908a908a908a908a90600401611179565b600060405180830381600087803b15801561086e57600080fd5b505af1158015610882573d6000803e3d6000fd5b505050508573ffffffffffffffffffffffffffffffffffffffff167f7772f56296d3a5202974a45c61c9188d844ab4d6eeb18c851e4b8d5384ca6ced8686866040516105dd939291906111d6565b7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb6108fa81610a82565b610902610a8c565b60038290556040518281527f7810bd47de260c3e9ee10061cf438099dd12256c79485f12f94dbccc981e806c9060200160405180910390a15050565b610946610a8c565b6040517f79cc6790000000000000000000000000000000000000000000000000000000008152336004820152602481018290527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16906379cc679090604401600060405180830381600087803b1580156109d457600080fd5b505af11580156105f0573d6000803e3d6000fd5b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610a1281610a82565b610752610e8f565b600082815260026020526040902060010154610a3581610a82565b6106c18383610d53565b600260005403610a7b576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b6107528133610ee8565b60015460ff1615610ac9576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6003547f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b39573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b5d91906111f9565b610b679084611212565b1115610b9f576040517fc30436e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f1e458bee00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff848116600483015260248201849052604482018390527f00000000000000000000000000000000000000000000000000000000000000001690631e458bee90606401600060405180830381600087803b158015610c3657600080fd5b505af1158015610c4a573d6000803e3d6000fd5b50505050505050565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff16610d4b57600083815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff86168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055610ce93390565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a450600161045c565b50600061045c565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff1615610d4b57600083815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8616808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a450600161045c565b610e1a610f78565b600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b610e97610a8c565b600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016811790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25833610e65565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16610f74576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff821660048201526024810183905260440160405180910390fd5b5050565b60015460ff16610ac9576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060208284031215610fc657600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610ff657600080fd5b9392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461102157600080fd5b919050565b60008060008060006080868803121561103e57600080fd5b61104786610ffd565b945060208601359350604086013567ffffffffffffffff81111561106a57600080fd5b8601601f8101881361107b57600080fd5b803567ffffffffffffffff81111561109257600080fd5b8860208284010111156110a457600080fd5b959894975060200195606001359392505050565b6000806000606084860312156110cd57600080fd5b6110d684610ffd565b95602085013595506040909401359392505050565b6000602082840312156110fd57600080fd5b5035919050565b6000806040838503121561111757600080fd5b8235915061112760208401610ffd565b90509250929050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff8616815273ffffffffffffffffffffffffffffffffffffffff851660208201528360408201526080606082015260006111cb608083018486611130565b979650505050505050565b8381526040602082015260006111f0604083018486611130565b95945050505050565b60006020828403121561120b57600080fd5b5051919050565b8082018082111561045c577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea2646970667358221220de5fa55e0ca79ea2f08903481d01ea00bbbf346b9cfba44e12a2dd6f3a6f2e8a64736f6c634300081a00336080604052348015600f57600080fd5b506001600055610d3a806100246000396000f3fe6080604052600436106100635760003560e01c8063c513169111610040578063c5131691146100c1578063e04d4f97146100e1578063f05b6abf146100f457005b8063357fc5a21461006c5780636ed701691461008c5780638fcaa0b5146100a157005b3661006a57005b005b34801561007857600080fd5b5061006a6100873660046106c0565b610114565b34801561009857600080fd5b5061006a6101aa565b3480156100ad57600080fd5b5061006a6100bc3660046106fc565b6101df565b3480156100cd57600080fd5b5061006a6100dc3660046106c0565b61021e565b61006a6100ef366004610895565b6102f9565b34801561010057600080fd5b5061006a61010f366004610981565b61033d565b61011c610372565b61013e73ffffffffffffffffffffffffffffffffffffffff83163383866103b5565b604080513381526020810185905273ffffffffffffffffffffffffffffffffffffffff848116828401528316606082015290517f2b58128f24a9f59127cc5b5430d70542b22220f2d9adaa86e442b816ab98af609181900360800190a16101a56001600055565b505050565b6040513381527fbcaadb46b82a48af60b608f58959ae6b8310d1b0a0d094c2e9ec3208ed39f2a09060200160405180910390a1565b7f0d3f65f00e631663aa85c96330b5c7a83bb29af3630c0063776f985edc3037aa33838360405161021293929190610a6b565b60405180910390a15050565b610226610372565b6000610233600285610ad5565b90508060000361026f576040517f1f2a200500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61029173ffffffffffffffffffffffffffffffffffffffff84163384846103b5565b604080513381526020810183905273ffffffffffffffffffffffffffffffffffffffff858116828401528416606082015290517f2b58128f24a9f59127cc5b5430d70542b22220f2d9adaa86e442b816ab98af609181900360800190a1506101a56001600055565b7f1f1ff1f5fb41346850b2f5c04e6c767e2f1c8a525c5c0c5cdb60cdf3ca5f62fa3334858585604051610330959493929190610b7e565b60405180910390a1505050565b7f74a53cd528a921fca7dbdee62f86819051d3cc98f214951f4238e8843f20b146338484846040516103309493929190610c08565b6002600054036103ae576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b6040805173ffffffffffffffffffffffffffffffffffffffff85811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd0000000000000000000000000000000000000000000000000000000017905261044a908590610450565b50505050565b600061047273ffffffffffffffffffffffffffffffffffffffff8416836104eb565b905080516000141580156104975750808060200190518101906104959190610ccb565b155b156101a5576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff841660048201526024015b60405180910390fd5b60606104f983836000610500565b9392505050565b60608147101561053e576040517fcd7860590000000000000000000000000000000000000000000000000000000081523060048201526024016104e2565b6000808573ffffffffffffffffffffffffffffffffffffffff1684866040516105679190610ce8565b60006040518083038185875af1925050503d80600081146105a4576040519150601f19603f3d011682016040523d82523d6000602084013e6105a9565b606091505b50915091506105b98683836105c3565b9695505050505050565b6060826105d8576105d382610652565b6104f9565b81511580156105fc575073ffffffffffffffffffffffffffffffffffffffff84163b155b1561064b576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff851660048201526024016104e2565b50806104f9565b8051156106625780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50565b803573ffffffffffffffffffffffffffffffffffffffff811681146106bb57600080fd5b919050565b6000806000606084860312156106d557600080fd5b833592506106e560208501610697565b91506106f360408501610697565b90509250925092565b6000806020838503121561070f57600080fd5b823567ffffffffffffffff81111561072657600080fd5b8301601f8101851361073757600080fd5b803567ffffffffffffffff81111561074e57600080fd5b85602082840101111561076057600080fd5b6020919091019590945092505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156107e6576107e6610770565b604052919050565b600082601f8301126107ff57600080fd5b813567ffffffffffffffff81111561081957610819610770565b61084a60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8401160161079f565b81815284602083860101111561085f57600080fd5b816020850160208301376000918101602001919091529392505050565b801515811461069457600080fd5b80356106bb8161087c565b6000806000606084860312156108aa57600080fd5b833567ffffffffffffffff8111156108c157600080fd5b6108cd868287016107ee565b9350506020840135915060408401356108e58161087c565b809150509250925092565b600067ffffffffffffffff82111561090a5761090a610770565b5060051b60200190565b600082601f83011261092557600080fd5b8135610938610933826108f0565b61079f565b8082825260208201915060208360051b86010192508583111561095a57600080fd5b602085015b8381101561097757803583526020928301920161095f565b5095945050505050565b60008060006060848603121561099657600080fd5b833567ffffffffffffffff8111156109ad57600080fd5b8401601f810186136109be57600080fd5b80356109cc610933826108f0565b8082825260208201915060208360051b8501019250888311156109ee57600080fd5b602084015b83811015610a3057803567ffffffffffffffff811115610a1257600080fd5b610a218b6020838901016107ee565b845250602092830192016109f3565b509550505050602084013567ffffffffffffffff811115610a5057600080fd5b610a5c86828701610914565b9250506106f36040850161088a565b73ffffffffffffffffffffffffffffffffffffffff8416815260406020820152816040820152818360608301376000818301606090810191909152601f9092017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016010192915050565b600082610b0b577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60005b83811015610b2b578181015183820152602001610b13565b50506000910152565b60008151808452610b4c816020860160208601610b10565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b73ffffffffffffffffffffffffffffffffffffffff8616815284602082015260a060408201526000610bb360a0830186610b34565b6060830194909452509015156080909101529392505050565b600081518084526020840193506020830160005b82811015610bfe578151865260209586019590910190600101610be0565b5093949350505050565b60006080820173ffffffffffffffffffffffffffffffffffffffff871683526080602084015280865180835260a08501915060a08160051b86010192506020880160005b82811015610c9b577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60878603018452610c86858351610b34565b94506020938401939190910190600101610c4c565b505050508281036040840152610cb18186610bcc565b915050610cc2606083018415159052565b95945050505050565b600060208284031215610cdd57600080fd5b81516104f98161087c565b60008251610cfa818460208701610b10565b919091019291505056fea2646970667358221220556072e1abafc3c4063b8cce832228b4f309b93726aaa6a6dfab20cb880c6d1864736f6c634300081a0033a26469706673582212208630e257501dbf0e417e076e931f5c705369be26151f5cfc9961cffc63c41d8164736f6c634300081a0033", + Bin: "0x6080604052600c8054600160ff199182168117909255601f80549091169091179055348015602c57600080fd5b5061f2228061003c6000396000f3fe608060405234801561001057600080fd5b50600436106101cf5760003560e01c8063a783c78911610104578063d509b16c116100a2578063e63ab1e911610071578063e63ab1e914610344578063fa7626d41461036b578063fdca905214610378578063fe574f841461038057600080fd5b8063d509b16c14610324578063dcf7d0371461032c578063de1cb76c14610334578063e20c9f711461033c57600080fd5b8063b5508aa9116100de578063b5508aa9146102f4578063ba414fa6146102fc578063c190997214610314578063ccb0e3f21461031c57600080fd5b8063a783c789146102bd578063aaf74192146102e4578063b0464fdc146102ec57600080fd5b80634934655811610171578063828320141161014b578063828320141461025657806385226c811461025e57806385f438c114610273578063916a17c6146102a857600080fd5b8063493465581461023157806366d9a9a0146102395780637db20efb1461024e57600080fd5b80632ade3880116101ad5780632ade3880146102045780633cba0107146102195780633e5e3c23146102215780633f7286f41461022957600080fd5b80630a9254e4146101d45780631ed7831c146101de5780632506ef03146101fc575b600080fd5b6101dc610388565b005b6101e6610a6e565b6040516101f39190618ec4565b60405180910390f35b6101dc610ad0565b61020c610d81565b6040516101f39190618f60565b6101dc610ec3565b6101e6611685565b6101e66116e5565b6101dc611745565b610241611d19565b6040516101f391906190c6565b6101dc611e9b565b6101dc61213a565b610266612393565b6040516101f39190619164565b61029a7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b6040519081526020016101f3565b6102b0612463565b6040516101f391906191db565b61029a7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb81565b6101dc61255e565b6102b06127ba565b6102666128b5565b610304612985565b60405190151581526020016101f3565b6101dc612a59565b6101dc612cc4565b6101dc6137f0565b6101dc613b45565b6101dc614173565b6101e661488f565b61029a7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b601f546103049060ff1681565b6101dc6148ef565b6101dc614ad9565b60258054307fffffffffffffffffffffffff000000000000000000000000000000000000000091821617909155602680546112349083161790556027805461567892168217905560405181906103dd90618dd7565b6001600160a01b03928316815291166020820152604001604051809103906000f080158015610410573d6000803e3d6000fd5b50602480547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039283169081178255604080518082018252600e81527f4761746577617945564d2e736f6c000000000000000000000000000000000000602082015260275460255492519086169481019490945260448401929092529092166064820152610501919060840160408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fc0c53b8b00000000000000000000000000000000000000000000000000000000179052614cc6565b601f80547fffffffffffffffffffffff0000000000000000000000000000000000000000ff166101006001600160a01b0393841681029190911791829055602080549190920483167fffffffffffffffffffffffff0000000000000000000000000000000000000000909116811790915560275460255460405192939182169291169061058d90618de4565b6001600160a01b03938416815291831660208301529091166040820152606001604051809103906000f0801580156105c9573d6000803e3d6000fd5b50602280547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03928316179055602054602454602754602554604051938516949283169391831692169061062490618df1565b6001600160a01b039485168152928416602084015290831660408301529091166060820152608001604051809103906000f080158015610668573d6000803e3d6000fd5b50602380547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392831617905560275460405163ca669fa760e01b815291166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156106ed57600080fd5b505af1158015610701573d6000803e3d6000fd5b5050602480546027546023546040517f15d57fd40000000000000000000000000000000000000000000000000000000081526001600160a01b039283166004820152908216938101939093521692506315d57fd49150604401600060405180830381600087803b15801561077457600080fd5b505af1158015610788573d6000803e3d6000fd5b5050505060405161079890618dfe565b604051809103906000f0801580156107b4573d6000803e3d6000fd5b50602180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039283161790556027546040517fc88a5e6d00000000000000000000000000000000000000000000000000000000815291166004820152670de0b6b3a76400006024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c88a5e6d90604401600060405180830381600087803b15801561086057600080fd5b505af1158015610874573d6000803e3d6000fd5b50506025546040517f06447d560000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506306447d569150602401600060405180830381600087803b1580156108ea57600080fd5b505af11580156108fe573d6000803e3d6000fd5b50506020546022546040517fae7a3a6f0000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201529116925063ae7a3a6f9150602401600060405180830381600087803b15801561096457600080fd5b505af1158015610978573d6000803e3d6000fd5b50506020546023546040517f10188aef0000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152911692506310188aef9150602401600060405180830381600087803b1580156109de57600080fd5b505af11580156109f2573d6000803e3d6000fd5b505050507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b03166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610a5457600080fd5b505af1158015610a68573d6000803e3d6000fd5b50505050565b60606016805480602002602001604051908101604052809291908181526020018280548015610ac657602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610aa8575b5050505050905090565b6040517f68656c6c6f0000000000000000000000000000000000000000000000000000006020820152620186a09060009060250160408051808303601f190181529082905260275463ca669fa760e01b83526001600160a01b031660048301529150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015610b6b57600080fd5b505af1158015610b7f573d6000803e3d6000fd5b50506023546040517f6f8b44b0000000000000000000000000000000000000000000000000000000008152600481018690526001600160a01b039091169250636f8b44b09150602401600060405180830381600087803b158015610be257600080fd5b505af1158015610bf6573d6000803e3d6000fd5b505060275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b158015610c5357600080fd5b505af1158015610c67573d6000803e3d6000fd5b50506040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fc30436e9000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b158015610cf057600080fd5b505af1158015610d04573d6000803e3d6000fd5b50506023546021546001600160a01b0391821693506302d5c899925016610d2c8560016192a1565b846040518463ffffffff1660e01b8152600401610d4b939291906192b4565b600060405180830381600087803b158015610d6557600080fd5b505af1158015610d79573d6000803e3d6000fd5b505050505050565b6060601e805480602002602001604051908101604052809291908181526020016000905b82821015610eba57600084815260208082206040805180820182526002870290920180546001600160a01b03168352600181018054835181870281018701909452808452939591948681019491929084015b82821015610ea3578382906000526020600020018054610e16906192ed565b80601f0160208091040260200160405190810160405280929190818152602001828054610e42906192ed565b8015610e8f5780601f10610e6457610100808354040283529160200191610e8f565b820191906000526020600020905b815481529060010190602001808311610e7257829003601f168201915b505050505081526020019060010190610df7565b505050508152505081526020019060010190610da5565b50505050905090565b60248054602654604051620186a09381018490526001600160a01b03928316604482015291166064820152600090819060840160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f357fc5a2000000000000000000000000000000000000000000000000000000001790526024805460265492516370a0823160e01b81526001600160a01b0393841660048201529394506000939216916370a082319101602060405180830381865afa158015610f9e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fc2919061933a565b9050610fcf816000614ce5565b602480546023546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa15801561101f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611043919061933a565b9050611050816000614ce5565b6020546040516001600160a01b039091166024820152604481018690526064810185905260009060840160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f1e458bee0000000000000000000000000000000000000000000000000000000017905260245490517ff30c7ba3000000000000000000000000000000000000000000000000000000008152919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f30c7ba391611137916001600160a01b0391909116906000908690600401619353565b600060405180830381600087803b15801561115157600080fd5b505af1158015611165573d6000803e3d6000fd5b50506021546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b1580156111f757600080fd5b505af115801561120b573d6000803e3d6000fd5b505060208054602454602654604080516001600160a01b0394851681529485018d905291831684830152919091166060830152517f2b58128f24a9f59127cc5b5430d70542b22220f2d9adaa86e442b816ab98af609350908190036080019150a16023546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b1580156112fa57600080fd5b505af115801561130e573d6000803e3d6000fd5b50506021546040516001600160a01b0390911692507f7772f56296d3a5202974a45c61c9188d844ab4d6eeb18c851e4b8d5384ca6ced9150611353908990889061937b565b60405180910390a260275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156113b457600080fd5b505af11580156113c8573d6000803e3d6000fd5b50506023546021546040517f5e3e9fef0000000000000000000000000000000000000000000000000000000081526001600160a01b039283169450635e3e9fef935061142092909116908a9089908b90600401619394565b600060405180830381600087803b15801561143a57600080fd5b505af115801561144e573d6000803e3d6000fd5b5050602480546026546040516370a0823160e01b81526001600160a01b03918216600482015260009550911692506370a082319101602060405180830381865afa1580156114a0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114c4919061933a565b90506114d08188614ce5565b602480546023546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa158015611520573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611544919061933a565b9050611551816000614ce5565b602480546020546021546040517fdd62ed3e0000000000000000000000000000000000000000000000000000000081526001600160a01b0392831660048201529082169381019390935260009291169063dd62ed3e90604401602060405180830381865afa1580156115c7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115eb919061933a565b90506115f8816000614ce5565b602480546020546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa158015611648573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061166c919061933a565b9050611679816000614ce5565b50505050505050505050565b60606018805480602002602001604051908101604052809291908181526020018280548015610ac6576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311610aa8575050505050905090565b60606017805480602002602001604051908101604052809291908181526020018280548015610ac6576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311610aa8575050505050905090565b604080516004808252602480830184526020830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f6ed70169000000000000000000000000000000000000000000000000000000001790525460265493516370a0823160e01b8152620186a0946000949385936001600160a01b03908116936370a08231936117e693921691016001600160a01b0391909116815260200190565b602060405180830381865afa158015611803573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611827919061933a565b9050611834816000614ce5565b602480546023546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa158015611884573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118a8919061933a565b90506118b5816000614ce5565b6020546040516001600160a01b039091166024820152604481018690526064810185905260009060840160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f1e458bee0000000000000000000000000000000000000000000000000000000017905260245490517ff30c7ba3000000000000000000000000000000000000000000000000000000008152919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f30c7ba39161199c916001600160a01b0391909116906000908690600401619353565b600060405180830381600087803b1580156119b657600080fd5b505af11580156119ca573d6000803e3d6000fd5b50506021546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b158015611a5c57600080fd5b505af1158015611a70573d6000803e3d6000fd5b5050602080546040516001600160a01b0390911681527fbcaadb46b82a48af60b608f58959ae6b8310d1b0a0d094c2e9ec3208ed39f2a0935001905060405180910390a16023546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b158015611b4257600080fd5b505af1158015611b56573d6000803e3d6000fd5b50506021546040516001600160a01b0390911692507f7772f56296d3a5202974a45c61c9188d844ab4d6eeb18c851e4b8d5384ca6ced9150611b9b908990889061937b565b60405180910390a260275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015611bfc57600080fd5b505af1158015611c10573d6000803e3d6000fd5b50506023546021546040517f5e3e9fef0000000000000000000000000000000000000000000000000000000081526001600160a01b039283169450635e3e9fef9350611c6892909116908a9089908b90600401619394565b600060405180830381600087803b158015611c8257600080fd5b505af1158015611c96573d6000803e3d6000fd5b5050602480546026546040516370a0823160e01b81526001600160a01b03918216600482015260009550911692506370a082319101602060405180830381865afa158015611ce8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d0c919061933a565b90506114d0816000614ce5565b6060601b805480602002602001604051908101604052809291908181526020016000905b82821015610eba5783829060005260206000209060020201604051806040016040529081600082018054611d70906192ed565b80601f0160208091040260200160405190810160405280929190818152602001828054611d9c906192ed565b8015611de95780601f10611dbe57610100808354040283529160200191611de9565b820191906000526020600020905b815481529060010190602001808311611dcc57829003601f168201915b5050505050815260200160018201805480602002602001604051908101604052809291908181526020018280548015611e8357602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019060040190602082600301049283019260010382029150808411611e305790505b50505050508152505081526020019060010190611d3d565b60275460405163ca669fa760e01b81526001600160a01b039091166004820152620186a090737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015611ef957600080fd5b505af1158015611f0d573d6000803e3d6000fd5b50506023546040517f6f8b44b0000000000000000000000000000000000000000000000000000000008152600481018590526001600160a01b039091169250636f8b44b09150602401600060405180830381600087803b158015611f7057600080fd5b505af1158015611f84573d6000803e3d6000fd5b505060275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b158015611fe157600080fd5b505af1158015611ff5573d6000803e3d6000fd5b50506040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fc30436e9000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b15801561207e57600080fd5b505af1158015612092573d6000803e3d6000fd5b50506023546021546001600160a01b03918216935063106e62909250166120ba8460016192a1565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b039092166004830152602482015260006044820152606401600060405180830381600087803b15801561211f57600080fd5b505af1158015612133573d6000803e3d6000fd5b5050505050565b6040517f68656c6c6f0000000000000000000000000000000000000000000000000000006020820152620186a090600090819060250160408051808303601f190181529082905260255463ca669fa760e01b83526001600160a01b031660048301529150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156121d757600080fd5b505af11580156121eb573d6000803e3d6000fd5b5050602554604080516001600160a01b0390921660248301527f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e460448084019190915281518084039091018152606490920181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb392506122d691906004016193cd565b600060405180830381600087803b1580156122f057600080fd5b505af1158015612304573d6000803e3d6000fd5b50506023546021546040517f02d5c8990000000000000000000000000000000000000000000000000000000081526001600160a01b0392831694506302d5c899935061235c9290911690879086908890600401619394565b600060405180830381600087803b15801561237657600080fd5b505af115801561238a573d6000803e3d6000fd5b50505050505050565b6060601a805480602002602001604051908101604052809291908181526020016000905b82821015610eba5783829060005260206000200180546123d6906192ed565b80601f0160208091040260200160405190810160405280929190818152602001828054612402906192ed565b801561244f5780601f106124245761010080835404028352916020019161244f565b820191906000526020600020905b81548152906001019060200180831161243257829003601f168201915b5050505050815260200190600101906123b7565b6060601d805480602002602001604051908101604052809291908181526020016000905b82821015610eba5760008481526020908190206040805180820182526002860290920180546001600160a01b0316835260018101805483518187028101870190945280845293949193858301939283018282801561254657602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190600401906020826003010492830192600103820291508084116124f35790505b50505050508152505081526020019060010190612487565b6040517f68656c6c6f0000000000000000000000000000000000000000000000000000006020820152620186a09060009060250160408051808303601f190181529082905260275463ca669fa760e01b83526001600160a01b031660048301529150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156125f957600080fd5b505af115801561260d573d6000803e3d6000fd5b50506023546040517f6f8b44b0000000000000000000000000000000000000000000000000000000008152600481018690526001600160a01b039091169250636f8b44b09150602401600060405180830381600087803b15801561267057600080fd5b505af1158015612684573d6000803e3d6000fd5b505060275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b1580156126e157600080fd5b505af11580156126f5573d6000803e3d6000fd5b50506040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fc30436e9000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b15801561277e57600080fd5b505af1158015612792573d6000803e3d6000fd5b50506023546021546001600160a01b039182169350635e3e9fef925016610d2c8560016192a1565b6060601c805480602002602001604051908101604052809291908181526020016000905b82821015610eba5760008481526020908190206040805180820182526002860290920180546001600160a01b0316835260018101805483518187028101870190945280845293949193858301939283018282801561289d57602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168152602001906004019060208260030104928301926001038202915080841161284a5790505b505050505081525050815260200190600101906127de565b60606019805480602002602001604051908101604052809291908181526020016000905b82821015610eba5783829060005260206000200180546128f8906192ed565b80601f0160208091040260200160405190810160405280929190818152602001828054612924906192ed565b80156129715780601f1061294657610100808354040283529160200191612971565b820191906000526020600020905b81548152906001019060200180831161295457829003601f168201915b5050505050815260200190600101906128d9565b60085460009060ff161561299d575060085460ff1690565b6040517f667f9d70000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d600482018190527f6661696c65640000000000000000000000000000000000000000000000000000602483015260009163667f9d7090604401602060405180830381865afa158015612a2e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a52919061933a565b1415905090565b60248054602654604051620186a09381018490526001600160a01b03928316604482015291166064820152600090819060840160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f357fc5a200000000000000000000000000000000000000000000000000000000179052602554905163ca669fa760e01b81526001600160a01b039091166004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015612b3f57600080fd5b505af1158015612b53573d6000803e3d6000fd5b5050602554604080516001600160a01b0390921660248301527f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e460448084019190915281518084039091018152606490920181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb39250612c3e91906004016193cd565b600060405180830381600087803b158015612c5857600080fd5b505af1158015612c6c573d6000803e3d6000fd5b50506023546021546040517f5e3e9fef0000000000000000000000000000000000000000000000000000000081526001600160a01b039283169450635e3e9fef935061235c9290911690879086908890600401619394565b60275460405163ca669fa760e01b81526001600160a01b039091166004820152620186a090600090737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015612d2557600080fd5b505af1158015612d39573d6000803e3d6000fd5b5050602754604080516001600160a01b0390921660248301527f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a60448084019190915281518084039091018152606490920181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb39250612e2491906004016193cd565b600060405180830381600087803b158015612e3e57600080fd5b505af1158015612e52573d6000803e3d6000fd5b50505050602360009054906101000a90046001600160a01b03166001600160a01b0316638456cb596040518163ffffffff1660e01b8152600401600060405180830381600087803b158015612ea657600080fd5b505af1158015612eba573d6000803e3d6000fd5b505060275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b158015612f1757600080fd5b505af1158015612f2b573d6000803e3d6000fd5b5050602754604080516001600160a01b0390921660248301527f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a60448084019190915281518084039091018152606490920181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb3925061301691906004016193cd565b600060405180830381600087803b15801561303057600080fd5b505af1158015613044573d6000803e3d6000fd5b50505050602360009054906101000a90046001600160a01b03166001600160a01b0316633f4ba83a6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561309857600080fd5b505af11580156130ac573d6000803e3d6000fd5b505060255460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b15801561310957600080fd5b505af115801561311d573d6000803e3d6000fd5b50505050602360009054906101000a90046001600160a01b03166001600160a01b0316638456cb596040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561317157600080fd5b505af1158015613185573d6000803e3d6000fd5b50506040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fd93c0665000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b15801561320e57600080fd5b505af1158015613222573d6000803e3d6000fd5b505060275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b15801561327f57600080fd5b505af1158015613293573d6000803e3d6000fd5b50506023546026546040517f106e62900000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260248101879052604481018690529116925063106e62909150606401600060405180830381600087803b15801561330757600080fd5b505af115801561331b573d6000803e3d6000fd5b505060255460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b15801561337857600080fd5b505af115801561338c573d6000803e3d6000fd5b50505050602360009054906101000a90046001600160a01b03166001600160a01b0316633f4ba83a6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156133e057600080fd5b505af11580156133f4573d6000803e3d6000fd5b5050602480546026546040516370a0823160e01b81526001600160a01b03918216600482015260009550911692506370a082319101602060405180830381865afa158015613446573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061346a919061933a565b9050613477816000614ce5565b6026546040516001600160a01b039091166024820152604481018490526064810183905260009060840160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f1e458bee0000000000000000000000000000000000000000000000000000000017905260245490517ff30c7ba3000000000000000000000000000000000000000000000000000000008152919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f30c7ba39161355e916001600160a01b0391909116906000908690600401619353565b600060405180830381600087803b15801561357857600080fd5b505af115801561358c573d6000803e3d6000fd5b50506023546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b15801561361e57600080fd5b505af1158015613632573d6000803e3d6000fd5b50506026546040518781526001600160a01b0390911692507f884edad9ce6fa2440d8a54cc123490eb96d2768479d49ff9c7366125a9424364915060200160405180910390a260275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156136d157600080fd5b505af11580156136e5573d6000803e3d6000fd5b50506023546026546040517f106e62900000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260248101899052604481018890529116925063106e629091506064015b600060405180830381600087803b15801561375a57600080fd5b505af115801561376e573d6000803e3d6000fd5b5050602480546026546040516370a0823160e01b81526001600160a01b03918216600482015260009550911692506370a082319101602060405180830381865afa1580156137c0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137e4919061933a565b90506121338186614ce5565b602480546026546040516370a0823160e01b81526001600160a01b039182166004820152620186a09360009392909216916370a082319101602060405180830381865afa158015613845573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613869919061933a565b9050613876816000614ce5565b6026546040516001600160a01b0390911660248201526044810183905260006064820181905290819060840160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f1e458bee0000000000000000000000000000000000000000000000000000000017905260245490517ff30c7ba3000000000000000000000000000000000000000000000000000000008152919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f30c7ba39161395f916001600160a01b0391909116906000908690600401619353565b600060405180830381600087803b15801561397957600080fd5b505af115801561398d573d6000803e3d6000fd5b50506023546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b158015613a1f57600080fd5b505af1158015613a33573d6000803e3d6000fd5b50506026546040518781526001600160a01b0390911692507f884edad9ce6fa2440d8a54cc123490eb96d2768479d49ff9c7366125a9424364915060200160405180910390a260275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015613ad257600080fd5b505af1158015613ae6573d6000803e3d6000fd5b50506023546026546040517f106e62900000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260248101899052604481018790529116925063106e62909150606401613740565b60248054602654604051620186a09381018490526001600160a01b03928316604482015291166064820152600090819060840160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fc5131691000000000000000000000000000000000000000000000000000000001790526024805460265492516370a0823160e01b81526001600160a01b0393841660048201529394506000939216916370a082319101602060405180830381865afa158015613c20573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613c44919061933a565b9050613c51816000614ce5565b602480546023546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa158015613ca1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613cc5919061933a565b9050613cd2816000614ce5565b6020546040516001600160a01b039091166024820152604481018690526064810185905260009060840160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f1e458bee0000000000000000000000000000000000000000000000000000000017905260245490517ff30c7ba3000000000000000000000000000000000000000000000000000000008152919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f30c7ba391613db9916001600160a01b0391909116906000908690600401619353565b600060405180830381600087803b158015613dd357600080fd5b505af1158015613de7573d6000803e3d6000fd5b50506021546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b158015613e7957600080fd5b505af1158015613e8d573d6000803e3d6000fd5b50506020547f2b58128f24a9f59127cc5b5430d70542b22220f2d9adaa86e442b816ab98af6092506001600160a01b03169050613ecb6002896193e0565b602454602654604080516001600160a01b03958616815260208101949094529184168383015292909216606082015290519081900360800190a16023546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b158015613f9357600080fd5b505af1158015613fa7573d6000803e3d6000fd5b50506021546040516001600160a01b0390911692507f7772f56296d3a5202974a45c61c9188d844ab4d6eeb18c851e4b8d5384ca6ced9150613fec908990889061937b565b60405180910390a260275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561404d57600080fd5b505af1158015614061573d6000803e3d6000fd5b50506023546021546040517f5e3e9fef0000000000000000000000000000000000000000000000000000000081526001600160a01b039283169450635e3e9fef93506140b992909116908a9089908b90600401619394565b600060405180830381600087803b1580156140d357600080fd5b505af11580156140e7573d6000803e3d6000fd5b5050602480546026546040516370a0823160e01b81526001600160a01b03918216600482015260009550911692506370a082319101602060405180830381865afa158015614139573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061415d919061933a565b90506114d08161416e60028a6193e0565b614ce5565b6040517f68656c6c6f0000000000000000000000000000000000000000000000000000006020820152620186a090600090819060250160408051808303601f1901815290829052602480546021546370a0823160e01b85526001600160a01b0390811660048601529294506000939216916370a082319101602060405180830381865afa158015614208573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061422c919061933a565b9050614239816000614ce5565b602480546023546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa158015614289573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906142ad919061933a565b6020546040516001600160a01b039091166024820152604481018790526064810186905290915060009060840160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f1e458bee0000000000000000000000000000000000000000000000000000000017905260245490517ff30c7ba3000000000000000000000000000000000000000000000000000000008152919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f30c7ba391614397916001600160a01b0391909116906000908690600401619353565b600060405180830381600087803b1580156143b157600080fd5b505af11580156143c5573d6000803e3d6000fd5b50506021546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b15801561445757600080fd5b505af115801561446b573d6000803e3d6000fd5b50506020546040517f0d3f65f00e631663aa85c96330b5c7a83bb29af3630c0063776f985edc3037aa93506144ae92506001600160a01b0390911690879061941b565b60405180910390a16020546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b15801561454457600080fd5b505af1158015614558573d6000803e3d6000fd5b50506021546024546040516001600160a01b039283169450911691507f723fc7be2448075379e4fdf1e6bf5fead954d2668d2da05dcb44ccfec4beeda7906145a3908a90899061937b565b60405180910390a36023546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b15801561463957600080fd5b505af115801561464d573d6000803e3d6000fd5b50506021546040516001600160a01b0390911692507fba96f26bdda53eb8c8ba39045dfb4ff39753fbc7a6edcf250a88e75e78d102fe9150614692908990889061937b565b60405180910390a260275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156146f357600080fd5b505af1158015614707573d6000803e3d6000fd5b50506023546021546040517f02d5c8990000000000000000000000000000000000000000000000000000000081526001600160a01b0392831694506302d5c899935061475f92909116908a9089908b90600401619394565b600060405180830381600087803b15801561477957600080fd5b505af115801561478d573d6000803e3d6000fd5b5050602480546021546040516370a0823160e01b81526001600160a01b03918216600482015260009550911692506370a082319101602060405180830381865afa1580156147df573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614803919061933a565b905061480f8188614ce5565b602480546023546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa15801561485f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614883919061933a565b90506115518185614ce5565b60606015805480602002602001604051908101604052809291908181526020018280548015610ac6576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311610aa8575050505050905090565b60255460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561494857600080fd5b505af115801561495c573d6000803e3d6000fd5b5050602554604080516001600160a01b0390921660248301527f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb60448084019190915281518084039091018152606490920181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb39250614a4791906004016193cd565b600060405180830381600087803b158015614a6157600080fd5b505af1158015614a75573d6000803e3d6000fd5b50506023546040517f6f8b44b000000000000000000000000000000000000000000000000000000000815261271060048201526001600160a01b039091169250636f8b44b09150602401600060405180830381600087803b158015610a5457600080fd5b60255460405163ca669fa760e01b81526001600160a01b039091166004820152620186a090600090737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015614b3a57600080fd5b505af1158015614b4e573d6000803e3d6000fd5b5050602554604080516001600160a01b0390921660248301527f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e460448084019190915281518084039091018152606490920181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb39250614c3991906004016193cd565b600060405180830381600087803b158015614c5357600080fd5b505af1158015614c67573d6000803e3d6000fd5b50506023546026546040517f106e62900000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260248101879052604481018690529116925063106e62909150606401610d4b565b6000614cd0618e0b565b614cdb848483614d64565b9150505b92915050565b6040517f98296c540000000000000000000000000000000000000000000000000000000081526004810183905260248101829052737109709ecfa91a80626ff3989d68f67f5b1dd12d906398296c549060440160006040518083038186803b158015614d5057600080fd5b505afa158015610d79573d6000803e3d6000fd5b600080614d718584614ddf565b9050614dd46040518060400160405280601d81526020017f4552433139363750726f78792e736f6c3a4552433139363750726f78790000008152508286604051602001614dbf92919061941b565b60405160208183030381529060405285614deb565b9150505b9392505050565b6000614dd88383614e19565b60c08101515160009015614e0f57614e0884848460c00151614e34565b9050614dd8565b614e088484614fda565b6000614e2583836150c5565b614dd883836020015184614deb565b600080614e3f6150d5565b90506000614e4d86836151a8565b90506000614e64826060015183602001518561564e565b90506000614e7483838989615860565b90506000614e81826166dd565b602081015181519192509060030b15614ef457898260400151604051602001614eab92919061943d565b60408051601f19818403018152908290527f08c379a0000000000000000000000000000000000000000000000000000000008252614eeb916004016193cd565b60405180910390fd5b6000614f376040518060400160405280601581526020017f4465706c6f79656420746f20616464726573733a2000000000000000000000008152508360016168ac565b6040517fc6ce059d000000000000000000000000000000000000000000000000000000008152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c6ce059d90614f8a9084906004016193cd565b602060405180830381865afa158015614fa7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614fcb91906194be565b9b9a5050505050505050505050565b6040517f8d1cc9250000000000000000000000000000000000000000000000000000000081526000908190737109709ecfa91a80626ff3989d68f67f5b1dd12d90638d1cc9259061502f9087906004016193cd565b600060405180830381865afa15801561504c573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261507491908101906195cf565b905060006150a2828560405160200161508e929190619604565b604051602081830303815290604052616aac565b90506001600160a01b038116614cdb578484604051602001614eab929190619633565b6150d182826000616abf565b5050565b604080518082018252600381527f6f75740000000000000000000000000000000000000000000000000000000000602082015290517fd145736c000000000000000000000000000000000000000000000000000000008152606091737109709ecfa91a80626ff3989d68f67f5b1dd12d91829063d145736c9061515c9084906004016196de565b600060405180830381865afa158015615179573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526151a19190810190619725565b9250505090565b6151da6040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b6000737109709ecfa91a80626ff3989d68f67f5b1dd12d90506152256040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b61522e85616bc2565b6020820152600061523e86616fa7565b90506000836001600160a01b031663d930a0e66040518163ffffffff1660e01b8152600401600060405180830381865afa158015615280573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526152a89190810190619725565b868385602001516040516020016152c2949392919061976e565b60408051601f19818403018152908290527f60f9bb1100000000000000000000000000000000000000000000000000000000825291506000906001600160a01b038616906360f9bb119061531a9085906004016193cd565b600060405180830381865afa158015615337573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261535f9190810190619725565b6040517fdb4235f60000000000000000000000000000000000000000000000000000000081529091506001600160a01b0386169063db4235f6906153a7908490600401619872565b602060405180830381865afa1580156153c4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906153e891906198c4565b6153fd5781604051602001614eab91906198e6565b6040517f49c4fac80000000000000000000000000000000000000000000000000000000081526001600160a01b038616906349c4fac890615442908490600401619978565b600060405180830381865afa15801561545f573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526154879190810190619725565b84526040517fdb4235f60000000000000000000000000000000000000000000000000000000081526001600160a01b0386169063db4235f6906154ce9084906004016199ca565b602060405180830381865afa1580156154eb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061550f91906198c4565b156155a4576040517f49c4fac80000000000000000000000000000000000000000000000000000000081526001600160a01b038616906349c4fac8906155599084906004016199ca565b600060405180830381865afa158015615576573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261559e9190810190619725565b60408501525b846001600160a01b03166349c4fac88286600001516040516020016155c99190619a1c565b6040516020818303038152906040526040518363ffffffff1660e01b81526004016155f5929190619a88565b600060405180830381865afa158015615612573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261563a9190810190619725565b606085015250608083015250949350505050565b60408051600480825260a0820190925260609160009190816020015b606081526020019060019003908161566a5790505090506040518060400160405280600481526020017f6772657000000000000000000000000000000000000000000000000000000000815250816000815181106156ca576156ca619aad565b60200260200101819052506040518060400160405280600381526020017f2d726c00000000000000000000000000000000000000000000000000000000008152508160018151811061571e5761571e619aad565b60200260200101819052508460405160200161573a9190619adc565b6040516020818303038152906040528160028151811061575c5761575c619aad565b6020026020010181905250826040516020016157789190619b48565b6040516020818303038152906040528160038151811061579a5761579a619aad565b602002602001018190525060006157b0826166dd565b602080820151604080518082018252600581527f2e6a736f6e0000000000000000000000000000000000000000000000000000008185019081528251808401845260008082529086015282518084019093529051825292810192909252919250615841906040805180820182526000808252602091820152815180830190925284518252808501908201529061722a565b6158565785604051602001614eab9190619b89565b9695505050505050565b60a0810151604080518082018252600080825260209182015281518083019092528251808352928101910152606090737109709ecfa91a80626ff3989d68f67f5b1dd12d90156158b0565b511590565b615a245782602001511561596c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605860248201527f54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f742060448201527f62652075736564207768656e207468652060736b6970566572696679536f757260648201527f6365436f646560206f7074696f6e206973206074727565600000000000000000608482015260a401614eeb565b8260c0015115615a24576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605360248201527f54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f742060448201527f62652075736564207768656e207468652060736b69704c6963656e736554797060648201527f6560206f7074696f6e2069732060747275656000000000000000000000000000608482015260a401614eeb565b6040805160ff8082526120008201909252600091816020015b6060815260200190600190039081615a3d57905050905060006040518060400160405280600381526020017f6e70780000000000000000000000000000000000000000000000000000000000815250828280615a9890619c1a565b935060ff1681518110615aad57615aad619aad565b60200260200101819052506040518060400160405280600d81526020017f302e302e312d616c7068612e3700000000000000000000000000000000000000815250604051602001615afe9190619c39565b604051602081830303815290604052828280615b1990619c1a565b935060ff1681518110615b2e57615b2e619aad565b60200260200101819052506040518060400160405280600681526020017f6465706c6f790000000000000000000000000000000000000000000000000000815250828280615b7b90619c1a565b935060ff1681518110615b9057615b90619aad565b60200260200101819052506040518060400160405280600e81526020017f2d2d636f6e74726163744e616d65000000000000000000000000000000000000815250828280615bdd90619c1a565b935060ff1681518110615bf257615bf2619aad565b60200260200101819052508760200151828280615c0e90619c1a565b935060ff1681518110615c2357615c23619aad565b60200260200101819052506040518060400160405280600e81526020017f2d2d636f6e747261637450617468000000000000000000000000000000000000815250828280615c7090619c1a565b935060ff1681518110615c8557615c85619aad565b602090810291909101015287518282615c9d81619c1a565b935060ff1681518110615cb257615cb2619aad565b60200260200101819052506040518060400160405280600981526020017f2d2d636861696e49640000000000000000000000000000000000000000000000815250828280615cff90619c1a565b935060ff1681518110615d1457615d14619aad565b6020026020010181905250615d284661728b565b8282615d3381619c1a565b935060ff1681518110615d4857615d48619aad565b60200260200101819052506040518060400160405280600f81526020017f2d2d6275696c64496e666f46696c650000000000000000000000000000000000815250828280615d9590619c1a565b935060ff1681518110615daa57615daa619aad565b602002602001018190525086828280615dc290619c1a565b935060ff1681518110615dd757615dd7619aad565b6020908102919091010152855115615efe5760408051808201909152601581527f2d2d636f6e7374727563746f7242797465636f6465000000000000000000000060208201528282615e2881619c1a565b935060ff1681518110615e3d57615e3d619aad565b60209081029190910101526040517f71aad10d0000000000000000000000000000000000000000000000000000000081526001600160a01b038416906371aad10d90615e8d9089906004016193cd565b600060405180830381865afa158015615eaa573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052615ed29190810190619725565b8282615edd81619c1a565b935060ff1681518110615ef257615ef2619aad565b60200260200101819052505b846020015115615fce5760408051808201909152601281527f2d2d766572696679536f75726365436f6465000000000000000000000000000060208201528282615f4781619c1a565b935060ff1681518110615f5c57615f5c619aad565b60200260200101819052506040518060400160405280600581526020017f66616c7365000000000000000000000000000000000000000000000000000000815250828280615fa990619c1a565b935060ff1681518110615fbe57615fbe619aad565b6020026020010181905250616195565b6160066158ab8660a0015160408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6160995760408051808201909152600d81527f2d2d6c6963656e736554797065000000000000000000000000000000000000006020820152828261604981619c1a565b935060ff168151811061605e5761605e619aad565b60200260200101819052508460a0015160405160200161607e9190619adc565b604051602081830303815290604052828280615fa990619c1a565b8460c001511580156160dc5750604080890151815180830183526000808252602091820152825180840190935281518352908101908201526160da90511590565b155b156161955760408051808201909152600d81527f2d2d6c6963656e736554797065000000000000000000000000000000000000006020820152828261612081619c1a565b935060ff168151811061613557616135619aad565b60200260200101819052506161498861732b565b6040516020016161599190619adc565b60405160208183030381529060405282828061617490619c1a565b935060ff168151811061618957616189619aad565b60200260200101819052505b604080860151815180830183526000808252602091820152825180840190935281518352908101908201526161c990511590565b61625e5760408051808201909152600b81527f2d2d72656c6179657249640000000000000000000000000000000000000000006020820152828261620c81619c1a565b935060ff168151811061622157616221619aad565b6020026020010181905250846040015182828061623d90619c1a565b935060ff168151811061625257616252619aad565b60200260200101819052505b60608501511561637f5760408051808201909152600681527f2d2d73616c740000000000000000000000000000000000000000000000000000602082015282826162a781619c1a565b935060ff16815181106162bc576162bc619aad565b602090810291909101015260608501516040517fb11a19e800000000000000000000000000000000000000000000000000000000815260048101919091526001600160a01b0384169063b11a19e890602401600060405180830381865afa15801561632b573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526163539190810190619725565b828261635e81619c1a565b935060ff168151811061637357616373619aad565b60200260200101819052505b60e085015151156164265760408051808201909152600a81527f2d2d6761734c696d697400000000000000000000000000000000000000000000602082015282826163c981619c1a565b935060ff16815181106163de576163de619aad565b60200260200101819052506163fa8560e001516000015161728b565b828261640581619c1a565b935060ff168151811061641a5761641a619aad565b60200260200101819052505b60e085015160200151156164d05760408051808201909152600a81527f2d2d6761735072696365000000000000000000000000000000000000000000006020820152828261647381619c1a565b935060ff168151811061648857616488619aad565b60200260200101819052506164a48560e001516020015161728b565b82826164af81619c1a565b935060ff16815181106164c4576164c4619aad565b60200260200101819052505b60e0850151604001511561657a5760408051808201909152600e81527f2d2d6d61784665655065724761730000000000000000000000000000000000006020820152828261651d81619c1a565b935060ff168151811061653257616532619aad565b602002602001018190525061654e8560e001516040015161728b565b828261655981619c1a565b935060ff168151811061656e5761656e619aad565b60200260200101819052505b60e085015160600151156166245760408051808201909152601681527f2d2d6d61785072696f7269747946656550657247617300000000000000000000602082015282826165c781619c1a565b935060ff16815181106165dc576165dc619aad565b60200260200101819052506165f88560e001516060015161728b565b828261660381619c1a565b935060ff168151811061661857616618619aad565b60200260200101819052505b60008160ff1667ffffffffffffffff811115616642576166426194e7565b60405190808252806020026020018201604052801561667557816020015b60608152602001906001900390816166605790505b50905060005b8260ff168160ff1610156166ce57838160ff168151811061669e5761669e619aad565b6020026020010151828260ff16815181106166bb576166bb619aad565b602090810291909101015260010161667b565b5093505050505b949350505050565b6167046040518060600160405280600060030b815260200160608152602001606081525090565b60408051808201825260048082527f6261736800000000000000000000000000000000000000000000000000000000602083015291517fd145736c000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d92600091849163d145736c9161678a91869101619ca4565b600060405180830381865afa1580156167a7573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526167cf9190810190619725565b905060006167dd8683617e1a565b90506000846001600160a01b031663f45c1ce7836040518263ffffffff1660e01b815260040161680d9190619164565b6000604051808303816000875af115801561682c573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526168549190810190619ceb565b805190915060030b1580159061686d5750602081015151155b801561687c5750604081015151155b15615856578160008151811061689457616894619aad565b6020026020010151604051602001614eab9190619da1565b606060006168e18560408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6040805180820182526000808252602091820152815180830190925286518252808701908201529091506169189082905b90617f6f565b15616a755760006169958261698f8461698961695b8a60408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6040805180820182526000808252602091820152815180830190925282518252918201519181019190915290565b90617f96565b90617ff8565b604080518082018252600181527f0a00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201529091506169f9908290617f6f565b15616a6357604080518082018252600181527f0a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616a60905b829061807d565b90505b616a6c816180a3565b92505050614dd8565b8215616a8e578484604051602001614eab929190619f8d565b5050604080516020810190915260008152614dd8565b509392505050565b6000808251602084016000f09392505050565b8160a0015115616ace57505050565b6000616adb84848461810c565b90506000616ae8826166dd565b602081015181519192509060030b158015616b845750604080518082018252600781527f535543434553530000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616b8490604080518082018252600080825260209182015281518083019092528451825280850190820152616912565b15616b9157505050505050565b60408201515115616bb1578160400151604051602001614eab919061a034565b80604051602001614eab919061a092565b60606000616bf78360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600481527f2e736f6c0000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152909150616c5c905b829061722a565b15616ccb57604080518082018252600481527f2e736f6c0000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152614dd890616cc69083906186a7565b6180a3565b604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616d2d905b8290618731565b600103616dfa57604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616d9390616a59565b50604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152614dd890616cc6905b839061807d565b604080518082018252600581527f2e6a736f6e00000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616e5990616c55565b15616f9057604080518082018252600181527f2f00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820181905284518086019095529251845283015290616ec19083906187cb565b905060008160018351616ed4919061a0fd565b81518110616ee457616ee4619aad565b60200260200101519050616f87616cc6616f5a6040518060400160405280600581526020017f2e6a736f6e00000000000000000000000000000000000000000000000000000081525060408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600080825260209182015281518083019092528551825280860190820152906186a7565b95945050505050565b82604051602001614eab919061a110565b50919050565b60606000616fdc8360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600481527f2e736f6c000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015290915061703e90616c55565b1561704c57614dd8816180a3565b604080518082018252600181527f3a00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526170ab90616d26565b60010361711557604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152614dd890616cc690616df3565b604080518082018252600581527f2e6a736f6e0000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261717490616c55565b15616f9057604080518082018252600181527f2f000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201819052845180860190955292518452830152906171dc9083906187cb565b90506001815111156172185780600282516171f7919061a0fd565b8151811061720757617207619aad565b602002602001015192505050919050565b5082604051602001614eab919061a110565b80518251600091111561723f57506000614cdf565b81518351602085015160009291617255916192a1565b61725f919061a0fd565b905082602001518103617276576001915050614cdf565b82516020840151819020912014905092915050565b6060600061729883618870565b600101905060008167ffffffffffffffff8111156172b8576172b86194e7565b6040519080825280601f01601f1916602001820160405280156172e2576020820181803683370190505b5090508181016020015b600019017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a85049450846172ec57509392505050565b604081810151815180830183526000808252602091820181905283518085018552835181529282018383015283518085018552600a81527f554e4c4943454e53454400000000000000000000000000000000000000000000818401908152855180870187528381528401929092528451808601909552518452908301526060916173b7905b8290618952565b156173f757505060408051808201909152600481527f4e6f6e65000000000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600981527f556e6c6963656e7365000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617456906173b0565b1561749657505060408051808201909152600981527f556e6c6963656e736500000000000000000000000000000000000000000000006020820152919050565b604080518082018252600381527f4d49540000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526174f5906173b0565b1561753557505060408051808201909152600381527f4d495400000000000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f47504c2d322e302d6f6e6c79000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617594906173b0565b806175f95750604080518082018252601081527f47504c2d322e302d6f722d6c6174657200000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526175f9906173b0565b1561763957505060408051808201909152600981527f474e552047504c763200000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f47504c2d332e302d6f6e6c79000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617698906173b0565b806176fd5750604080518082018252601081527f47504c2d332e302d6f722d6c6174657200000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526176fd906173b0565b1561773d57505060408051808201909152600981527f474e552047504c763300000000000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4c47504c2d322e312d6f6e6c79000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261779c906173b0565b806178015750604080518082018252601181527f4c47504c2d322e312d6f722d6c6174657200000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617801906173b0565b1561784157505060408051808201909152600c81527f474e55204c47504c76322e3100000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4c47504c2d332e302d6f6e6c7900000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526178a0906173b0565b806179055750604080518082018252601181527f4c47504c2d332e302d6f722d6c6174657200000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617905906173b0565b1561794557505060408051808201909152600a81527f474e55204c47504c7633000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f4253442d322d436c617573650000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526179a4906173b0565b156179e457505060408051808201909152600c81527f4253442d322d436c6175736500000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f4253442d332d436c61757365000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617a43906173b0565b15617a8357505060408051808201909152600c81527f4253442d332d436c6175736500000000000000000000000000000000000000006020820152919050565b604080518082018252600781527f4d504c2d322e300000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617ae2906173b0565b15617b2257505060408051808201909152600781527f4d504c2d322e30000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600781527f4f534c2d332e300000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617b81906173b0565b15617bc157505060408051808201909152600781527f4f534c2d332e30000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600a81527f4170616368652d322e300000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617c20906173b0565b15617c6057505060408051808201909152600a81527f4170616368652d322e30000000000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4147504c2d332e302d6f6e6c790000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617cbf906173b0565b80617d245750604080518082018252601181527f4147504c2d332e302d6f722d6c6174657200000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617d24906173b0565b15617d6457505060408051808201909152600a81527f474e55204147504c7633000000000000000000000000000000000000000000006020820152919050565b604080518082018252600881527f4255534c2d312e3100000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617dc3906173b0565b15617e0357505060408051808201909152600781527f42534c20312e31000000000000000000000000000000000000000000000000006020820152919050565b60408084015184519151614eab929060200161a1ee565b60608060005b8451811015617ea55781858281518110617e3c57617e3c619aad565b6020026020010151604051602001617e55929190619604565b604051602081830303815290604052915060018551617e74919061a0fd565b8114617e9d5781604051602001617e8b919061a357565b60405160208183030381529060405291505b600101617e20565b5060408051600380825260808201909252600091816020015b6060815260200190600190039081617ebe5790505090508381600081518110617ee957617ee9619aad565b60200260200101819052506040518060400160405280600281526020017f2d6300000000000000000000000000000000000000000000000000000000000081525081600181518110617f3d57617f3d619aad565b60200260200101819052508181600281518110617f5c57617f5c619aad565b6020908102919091010152949350505050565b6020808301518351835192840151600093617f8d9291849190618966565b14159392505050565b60408051808201909152600080825260208201526000617fc88460000151856020015185600001518660200151618a77565b9050836020015181617fda919061a0fd565b84518590617fe990839061a0fd565b90525060208401525090919050565b604080518082019091526000808252602082015281518351101561801d575081614cdf565b60208083015190840151600191146180445750815160208481015190840151829020919020145b80156180755782518451859061805b90839061a0fd565b90525082516020850180516180719083906192a1565b9052505b509192915050565b604080518082019091526000808252602082015261809c838383618b97565b5092915050565b60606000826000015167ffffffffffffffff8111156180c4576180c46194e7565b6040519080825280601f01601f1916602001820160405280156180ee576020820181803683370190505b509050600060208201905061809c8185602001518660000151618c42565b606060006181186150d5565b6040805160ff808252612000820190925291925060009190816020015b606081526020019060019003908161813557905050905060006040518060400160405280600381526020017f6e7078000000000000000000000000000000000000000000000000000000000081525082828061819090619c1a565b935060ff16815181106181a5576181a5619aad565b60200260200101819052506040518060400160405280600781526020017f5e312e33322e33000000000000000000000000000000000000000000000000008152506040516020016181f6919061a398565b60405160208183030381529060405282828061821190619c1a565b935060ff168151811061822657618226619aad565b60200260200101819052506040518060400160405280600881526020017f76616c696461746500000000000000000000000000000000000000000000000081525082828061827390619c1a565b935060ff168151811061828857618288619aad565b6020026020010181905250826040516020016182a49190619b48565b6040516020818303038152906040528282806182bf90619c1a565b935060ff16815181106182d4576182d4619aad565b60200260200101819052506040518060400160405280600a81526020017f2d2d636f6e74726163740000000000000000000000000000000000000000000081525082828061832190619c1a565b935060ff168151811061833657618336619aad565b602002602001018190525061834b8784618cbc565b828261835681619c1a565b935060ff168151811061836b5761836b619aad565b6020908102919091010152855151156184175760408051808201909152600b81527f2d2d7265666572656e6365000000000000000000000000000000000000000000602082015282826183bd81619c1a565b935060ff16815181106183d2576183d2619aad565b60200260200101819052506183eb866000015184618cbc565b82826183f681619c1a565b935060ff168151811061840b5761840b619aad565b60200260200101819052505b8560800151156184855760408051808201909152601881527f2d2d756e73616665536b697053746f72616765436865636b00000000000000006020820152828261846081619c1a565b935060ff168151811061847557618475619aad565b60200260200101819052506184eb565b84156184eb5760408051808201909152601281527f2d2d726571756972655265666572656e63650000000000000000000000000000602082015282826184ca81619c1a565b935060ff16815181106184df576184df619aad565b60200260200101819052505b604086015151156185875760408051808201909152600d81527f2d2d756e73616665416c6c6f77000000000000000000000000000000000000006020820152828261853581619c1a565b935060ff168151811061854a5761854a619aad565b6020026020010181905250856040015182828061856690619c1a565b935060ff168151811061857b5761857b619aad565b60200260200101819052505b8560600151156185f15760408051808201909152601481527f2d2d756e73616665416c6c6f7752656e616d6573000000000000000000000000602082015282826185d081619c1a565b935060ff16815181106185e5576185e5619aad565b60200260200101819052505b60008160ff1667ffffffffffffffff81111561860f5761860f6194e7565b60405190808252806020026020018201604052801561864257816020015b606081526020019060019003908161862d5790505b50905060005b8260ff168160ff16101561869b57838160ff168151811061866b5761866b619aad565b6020026020010151828260ff168151811061868857618688619aad565b6020908102919091010152600101618648565b50979650505050505050565b60408051808201909152600080825260208201528151835110156186cc575081614cdf565b815183516020850151600092916186e2916192a1565b6186ec919061a0fd565b6020840151909150600190821461870d575082516020840151819020908220145b80156187285783518551869061872490839061a0fd565b9052505b50929392505050565b60008082600001516187558560000151866020015186600001518760200151618a77565b61875f91906192a1565b90505b8351602085015161877391906192a1565b811161809c57816187838161a3dd565b92505082600001516187ba85602001518361879e919061a0fd565b86516187aa919061a0fd565b8386600001518760200151618a77565b6187c491906192a1565b9050618762565b606060006187d98484618731565b6187e49060016192a1565b67ffffffffffffffff8111156187fc576187fc6194e7565b60405190808252806020026020018201604052801561882f57816020015b606081526020019060019003908161881a5790505b50905060005b8151811015616aa45761884b616cc6868661807d565b82828151811061885d5761885d619aad565b6020908102919091010152600101618835565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f01000000000000000083106188b9577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef810000000083106188e5576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc10000831061890357662386f26fc10000830492506010015b6305f5e100831061891b576305f5e100830492506008015b612710831061892f57612710830492506004015b60648310618941576064830492506002015b600a8310614cdf5760010192915050565b600061895e8383618cfc565b159392505050565b600080858411618a6d5760208411618a1957600084156189b157600161898d86602061a0fd565b61899890600861a3f7565b6189a390600261a4f5565b6189ad919061a0fd565b1990505b83518116856189c089896192a1565b6189ca919061a0fd565b805190935082165b818114618a04578784116189ec57879450505050506166d5565b836189f68161a501565b9450508284511690506189d2565b618a0e87856192a1565b9450505050506166d5565b838320618a26858861a0fd565b618a3090876192a1565b91505b858210618a6b57848220808203618a5857618a4e86846192a1565b93505050506166d5565b618a6360018461a0fd565b925050618a33565b505b5092949350505050565b60008381868511618b825760208511618b315760008515618ac3576001618a9f87602061a0fd565b618aaa90600861a3f7565b618ab590600261a4f5565b618abf919061a0fd565b1990505b84518116600087618ad48b8b6192a1565b618ade919061a0fd565b855190915083165b828114618b2357818610618b0b57618afe8b8b6192a1565b96505050505050506166d5565b85618b158161a3dd565b965050838651169050618ae6565b8596505050505050506166d5565b508383206000905b618b43868961a0fd565b8211618b8057858320808203618b5f57839450505050506166d5565b618b6a6001856192a1565b9350508180618b789061a3dd565b925050618b39565b505b618b8c87876192a1565b979650505050505050565b60408051808201909152600080825260208201526000618bc98560000151866020015186600001518760200151618a77565b602080870180519186019190915251909150618be5908261a0fd565b835284516020860151618bf891906192a1565b8103618c075760008552618c39565b83518351618c1591906192a1565b85518690618c2490839061a0fd565b9052508351618c3390826192a1565b60208601525b50909392505050565b60208110618c7a5781518352618c596020846192a1565b9250618c666020836192a1565b9150618c7360208261a0fd565b9050618c42565b6000198115618ca9576001618c9083602061a0fd565b618c9c9061010061a4f5565b618ca6919061a0fd565b90505b9151835183169219169190911790915250565b60606000618cca84846151a8565b8051602080830151604051939450618ce49390910161a518565b60405160208183030381529060405291505092915050565b8151815160009190811115618d0f575081515b6020808501519084015160005b83811015618dc85782518251808214618d98576000196020871015618d7757600184618d4989602061a0fd565b618d5391906192a1565b618d5e90600861a3f7565b618d6990600261a4f5565b618d73919061a0fd565b1990505b8181168382168181039114618d95579750614cdf9650505050505050565b50505b618da36020866192a1565b9450618db06020856192a1565b93505050602081618dc191906192a1565b9050618d1c565b5084518651615856919061a570565b6112a68061a59183390190565b6116fe8061b83783390190565b61155a8061cf3583390190565b610d5e8061e48f83390190565b6040518060e00160405280606081526020016060815260200160608152602001600015158152602001600015158152602001600015158152602001618e4e618e53565b905290565b60405180610100016040528060001515815260200160001515815260200160608152602001600080191681526020016060815260200160608152602001600015158152602001618e4e6040518060800160405280600081526020016000815260200160008152602001600081525090565b602080825282518282018190526000918401906040840190835b81811015618f055783516001600160a01b0316835260209384019390920191600101618ede565b509095945050505050565b60005b83811015618f2b578181015183820152602001618f13565b50506000910152565b60008151808452618f4c816020860160208601618f10565b601f01601f19169290920160200192915050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b8281101561905c577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452815180516001600160a01b03168652602090810151604082880181905281519088018190529101906060600582901b88018101919088019060005b81811015619042577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa08a850301835261902c848651618f34565b6020958601959094509290920191600101618ff2565b509197505050602094850194929092019150600101618f88565b50929695505050505050565b600081518084526020840193506020830160005b828110156190bc5781517fffffffff000000000000000000000000000000000000000000000000000000001686526020958601959091019060010161907c565b5093949350505050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b8281101561905c577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc087860301845281518051604087526191326040880182618f34565b905060208201519150868103602088015261914d8183619068565b9650505060209384019391909101906001016190ee565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b8281101561905c577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08786030184526191c6858351618f34565b9450602093840193919091019060010161918c565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b8281101561905c577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc087860301845281516001600160a01b038151168652602081015190506040602087015261925c6040870182619068565b9550506020938401939190910190600101619203565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b80820180821115614cdf57614cdf619272565b6001600160a01b03841681528260208201526080604082015260006192dc6080830184618f34565b905060006060830152949350505050565b600181811c9082168061930157607f821691505b602082108103616fa1577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006020828403121561934c57600080fd5b5051919050565b6001600160a01b0384168152826020820152606060408201526000616f876060830184618f34565b8281526040602082015260006166d56040830184618f34565b6001600160a01b03851681528360208201526080604082015260006193bc6080830185618f34565b905082606083015295945050505050565b602081526000614dd86020830184618f34565b600082619416577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b6001600160a01b03831681526040602082015260006166d56040830184618f34565b7f4661696c656420746f206465706c6f7920636f6e74726163742000000000000081526000835161947581601a850160208801618f10565b7f3a20000000000000000000000000000000000000000000000000000000000000601a9184019182015283516194b281601c840160208801618f10565b01601c01949350505050565b6000602082840312156194d057600080fd5b81516001600160a01b0381168114614dd857600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040516060810167ffffffffffffffff81118282101715619539576195396194e7565b60405290565b60008067ffffffffffffffff84111561955a5761955a6194e7565b50604051601f19601f85018116603f0116810181811067ffffffffffffffff82111715619589576195896194e7565b6040528381529050808284018510156195a157600080fd5b616aa4846020830185618f10565b600082601f8301126195c057600080fd5b614dd88383516020850161953f565b6000602082840312156195e157600080fd5b815167ffffffffffffffff8111156195f857600080fd5b614cdb848285016195af565b60008351619616818460208801618f10565b83519083019061962a818360208801618f10565b01949350505050565b7f4661696c656420746f206465706c6f7920636f6e74726163742000000000000081526000835161966b81601a850160208801618f10565b7f207573696e6720636f6e7374727563746f722064617461202200000000000000601a9184019182015283516196a8816033840160208801618f10565b7f220000000000000000000000000000000000000000000000000000000000000060339290910191820152603401949350505050565b60408152600b60408201527f464f554e4452595f4f55540000000000000000000000000000000000000000006060820152608060208201526000614dd86080830184618f34565b60006020828403121561973757600080fd5b815167ffffffffffffffff81111561974e57600080fd5b8201601f8101841361975f57600080fd5b614cdb8482516020840161953f565b60008551619780818460208a01618f10565b7f2f0000000000000000000000000000000000000000000000000000000000000090830190815285516197ba816001840160208a01618f10565b7f2f000000000000000000000000000000000000000000000000000000000000006001929091019182015284516197f8816002840160208901618f10565b6001818301019150507f2f000000000000000000000000000000000000000000000000000000000000006001820152835161983a816002840160208801618f10565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600292909101918201526007019695505050505050565b6040815260006198856040830184618f34565b8281036020840152600481527f2e6173740000000000000000000000000000000000000000000000000000000060208201526040810191505092915050565b6000602082840312156198d657600080fd5b81518015158114614dd857600080fd5b7f436f756c64206e6f742066696e642041535420696e206172746966616374200081526000825161991e81601f850160208701618f10565b7f2e205365742060617374203d20747275656020696e20666f756e6472792e746f601f9390910192830152507f6d6c000000000000000000000000000000000000000000000000000000000000603f820152604101919050565b60408152600061998b6040830184618f34565b8281036020840152601181527f2e6173742e6162736f6c7574655061746800000000000000000000000000000060208201526040810191505092915050565b6040815260006199dd6040830184618f34565b8281036020840152600c81527f2e6173742e6c6963656e7365000000000000000000000000000000000000000060208201526040810191505092915050565b7f2e6d657461646174612e736f75726365732e5b27000000000000000000000000815260008251619a54816014850160208701618f10565b7f275d2e6b656363616b32353600000000000000000000000000000000000000006014939091019283015250602001919050565b604081526000619a9b6040830185618f34565b8281036020840152614dd48185618f34565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f2200000000000000000000000000000000000000000000000000000000000000815260008251619b14816001850160208701618f10565b7f22000000000000000000000000000000000000000000000000000000000000006001939091019283015250600201919050565b60008251619b5a818460208701618f10565b7f2f6275696c642d696e666f000000000000000000000000000000000000000000920191825250600b01919050565b7f436f756c64206e6f742066696e64206275696c642d696e666f2066696c65207781527f697468206d61746368696e6720736f7572636520636f6465206861736820666f60208201527f7220636f6e747261637420000000000000000000000000000000000000000000604082015260008251619c0d81604b850160208701618f10565b91909101604b0192915050565b600060ff821660ff8103619c3057619c30619272565b60010192915050565b7f406f70656e7a657070656c696e2f646566656e6465722d6465706c6f792d636c81527f69656e742d636c69400000000000000000000000000000000000000000000000602082015260008251619c97816029850160208701618f10565b9190910160290192915050565b60408152601660408201527f4f50454e5a455050454c494e5f424153485f50415448000000000000000000006060820152608060208201526000614dd86080830184618f34565b600060208284031215619cfd57600080fd5b815167ffffffffffffffff811115619d1457600080fd5b820160608185031215619d2657600080fd5b619d2e619516565b81518060030b8114619d3f57600080fd5b8152602082015167ffffffffffffffff811115619d5b57600080fd5b619d67868285016195af565b602083015250604082015167ffffffffffffffff811115619d8757600080fd5b619d93868285016195af565b604083015250949350505050565b7f4661696c656420746f2072756e206261736820636f6d6d616e6420776974682081527f2200000000000000000000000000000000000000000000000000000000000000602082015260008251619dff816021850160208701618f10565b7f222e20496620796f7520617265207573696e672057696e646f77732c2073657460219390910192830152507f20746865204f50454e5a455050454c494e5f424153485f5041544820656e766960418201527f726f6e6d656e74207661726961626c6520746f207468652066756c6c7920717560618201527f616c69666965642070617468206f66207468652062617368206578656375746160818201527f626c652e20466f72206578616d706c652c20696620796f75206172652075736960a18201527f6e672047697420666f722057696e646f77732c206164642074686520666f6c6c60c18201527f6f77696e67206c696e6520696e20746865202e656e762066696c65206f66207960e18201527f6f75722070726f6a65637420287573696e6720666f727761726420736c6173686101018201527f6573293a0a4f50454e5a455050454c494e5f424153485f504154483d22433a2f6101218201527f50726f6772616d2046696c65732f4769742f62696e2f6261736822000000000061014182015261015c01919050565b7f4661696c656420746f2066696e64206c696e652077697468207072656669782081527f2700000000000000000000000000000000000000000000000000000000000000602082015260008351619feb816021850160208801618f10565b7f2720696e206f75747075743a2000000000000000000000000000000000000000602191840191820152835161a02881602e840160208801618f10565b01602e01949350505050565b7f4661696c656420746f2072756e2075706772616465207361666574792076616c81527f69646174696f6e3a200000000000000000000000000000000000000000000000602082015260008251619c97816029850160208701618f10565b7f55706772616465207361666574792076616c69646174696f6e206661696c656481527f3a0a00000000000000000000000000000000000000000000000000000000000060208201526000825161a0f0816022850160208701618f10565b9190910160220192915050565b81810381811115614cdf57614cdf619272565b7f436f6e7472616374206e616d652000000000000000000000000000000000000081526000825161a14881600e850160208701618f10565b7f206d75737420626520696e2074686520666f726d6174204d79436f6e74726163600e9390910192830152507f742e736f6c3a4d79436f6e7472616374206f72204d79436f6e74726163742e73602e8201527f6f6c206f72206f75742f4d79436f6e74726163742e736f6c2f4d79436f6e7472604e8201527f6163742e6a736f6e000000000000000000000000000000000000000000000000606e820152607601919050565b7f53504458206c6963656e7365206964656e74696669657220000000000000000081526000835161a226816018850160208801618f10565b7f20696e2000000000000000000000000000000000000000000000000000000000601891840191820152835161a26381601c840160208801618f10565b7f20646f6573206e6f74206c6f6f6b206c696b65206120737570706f7274656420601c92909101918201527f6c6963656e736520666f7220626c6f636b206578706c6f726572207665726966603c8201527f69636174696f6e2e205573652074686520606c6963656e73655479706560206f605c8201527f7074696f6e20746f20737065636966792061206c6963656e736520747970652c607c8201527f206f7220736574207468652060736b69704c6963656e73655479706560206f70609c8201527f74696f6e20746f2060747275656020746f20736b69702e00000000000000000060bc82015260d301949350505050565b6000825161a369818460208701618f10565b7f2000000000000000000000000000000000000000000000000000000000000000920191825250600101919050565b7f406f70656e7a657070656c696e2f75706772616465732d636f7265400000000081526000825161a3d081601c850160208701618f10565b91909101601c0192915050565b6000600019820361a3f05761a3f0619272565b5060010190565b8082028115828204841417614cdf57614cdf619272565b6001815b600184111561a4495780850481111561a42d5761a42d619272565b600184161561a43b57908102905b60019390931c92800261a412565b935093915050565b60008261a46057506001614cdf565b8161a46d57506000614cdf565b816001811461a483576002811461a48d5761a4a9565b6001915050614cdf565b60ff84111561a49e5761a49e619272565b50506001821b614cdf565b5060208310610133831016604e8410600b841016171561a4cc575081810a614cdf565b61a4d9600019848461a40e565b806000190482111561a4ed5761a4ed619272565b029392505050565b6000614dd8838361a451565b60008161a5105761a510619272565b506000190190565b6000835161a52a818460208801618f10565b7f3a00000000000000000000000000000000000000000000000000000000000000908301908152835161a564816001840160208801618f10565b01600101949350505050565b818103600083128015838313168383128216171561809c5761809c61927256fe608060405234801561001057600080fd5b506040516112a63803806112a683398101604081905261002f91610110565b604051806040016040528060048152602001635a65746160e01b815250604051806040016040528060048152602001635a45544160e01b815250816003908161007891906101e2565b50600461008582826101e2565b5050506001600160a01b03821615806100a557506001600160a01b038116155b156100c35760405163e6c4247b60e01b815260040160405180910390fd5b600680546001600160a01b039384166001600160a01b031991821617909155600780549290931691161790556102a0565b80516001600160a01b038116811461010b57600080fd5b919050565b6000806040838503121561012357600080fd5b61012c836100f4565b915061013a602084016100f4565b90509250929050565b634e487b7160e01b600052604160045260246000fd5b600181811c9082168061016d57607f821691505b60208210810361018d57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156101dd57806000526020600020601f840160051c810160208510156101ba5750805b601f840160051c820191505b818110156101da57600081556001016101c6565b50505b505050565b81516001600160401b038111156101fb576101fb610143565b61020f816102098454610159565b84610193565b6020601f821160018114610243576000831561022b5750848201515b600019600385901b1c1916600184901b1784556101da565b600084815260208120601f198516915b828110156102735787850151825560209485019460019092019101610253565b50848210156102915786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b610ff7806102af6000396000f3fe608060405234801561001057600080fd5b506004361061011b5760003560e01c806342966c68116100b257806379cc679011610081578063a9059cbb11610066578063a9059cbb1461028e578063bff9662a146102a1578063dd62ed3e146102c157600080fd5b806379cc67901461027357806395d89b411461028657600080fd5b806342966c68146102025780635b1125911461021557806370a0823114610235578063779e3b631461026b57600080fd5b80631e458bee116100ee5780631e458bee1461018857806323b872dd1461019b578063313ce567146101ae578063328a01d0146101bd57600080fd5b806306fdde0314610120578063095ea7b31461013e57806315d57fd41461016157806318160ddd14610176575b600080fd5b610128610307565b6040516101359190610d97565b60405180910390f35b61015161014c366004610e2c565b610399565b6040519015158152602001610135565b61017461016f366004610e56565b6103b3565b005b6002545b604051908152602001610135565b610174610196366004610e89565b61057e565b6101516101a9366004610ebc565b610631565b60405160128152602001610135565b6007546101dd9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610135565b610174610210366004610ef9565b610655565b6006546101dd9073ffffffffffffffffffffffffffffffffffffffff1681565b61017a610243366004610f12565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b610174610662565b610174610281366004610e2c565b610786565b610128610837565b61015161029c366004610e2c565b610846565b6005546101dd9073ffffffffffffffffffffffffffffffffffffffff1681565b61017a6102cf366004610e56565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b60606003805461031690610f34565b80601f016020809104026020016040519081016040528092919081815260200182805461034290610f34565b801561038f5780601f106103645761010080835404028352916020019161038f565b820191906000526020600020905b81548152906001019060200180831161037257829003601f168201915b5050505050905090565b6000336103a7818585610854565b60019150505b92915050565b60075473ffffffffffffffffffffffffffffffffffffffff1633148015906103f3575060065473ffffffffffffffffffffffffffffffffffffffff163314155b15610431576040517fcdfcef970000000000000000000000000000000000000000000000000000000081523360048201526024015b60405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff82161580610468575073ffffffffffffffffffffffffffffffffffffffff8116155b1561049f576040517fe6c4247b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6006805473ffffffffffffffffffffffffffffffffffffffff8481167fffffffffffffffffffffffff0000000000000000000000000000000000000000928316811790935560058054918516919092161790556040805133815260208101929092527fe79965b5c67dcfb2cf5fe152715e4a7256cee62a3d5dd8484fd8a8539eb8beff910160405180910390a16040805133815273ffffffffffffffffffffffffffffffffffffffff831660208201527f1b9352454524a57a51f24f67dc66d898f616922cd1f7a12d73570ece12b1975c910160405180910390a15050565b60055473ffffffffffffffffffffffffffffffffffffffff1633146105d1576040517f3fe32fba000000000000000000000000000000000000000000000000000000008152336004820152602401610428565b6105db8383610866565b808373ffffffffffffffffffffffffffffffffffffffff167fc263b302aec62d29105026245f19e16f8e0137066ccd4a8bd941f716bd4096bb8460405161062491815260200190565b60405180910390a3505050565b60003361063f8582856108c6565b61064a858585610995565b506001949350505050565b61065f3382610a40565b50565b60075473ffffffffffffffffffffffffffffffffffffffff1633146106b5576040517fe700765e000000000000000000000000000000000000000000000000000000008152336004820152602401610428565b60065473ffffffffffffffffffffffffffffffffffffffff16610704576040517fe6c4247b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600654600780547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff90921691821790556040805133815260208101929092527f5104c9abdc7d111c2aeb4ce890ac70274a4be2ee83f46a62551be5e6ebc82dd0910160405180910390a1565b60055473ffffffffffffffffffffffffffffffffffffffff1633146107d9576040517f3fe32fba000000000000000000000000000000000000000000000000000000008152336004820152602401610428565b6107e38282610a9c565b8173ffffffffffffffffffffffffffffffffffffffff167f919f7e2092ffcc9d09f599be18d8152860b0c054df788a33bc549cdd9d0f15b18260405161082b91815260200190565b60405180910390a25050565b60606004805461031690610f34565b6000336103a7818585610995565b6108618383836001610ab1565b505050565b73ffffffffffffffffffffffffffffffffffffffff82166108b6576040517fec442f0500000000000000000000000000000000000000000000000000000000815260006004820152602401610428565b6108c260008383610bf9565b5050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811461098f5781811015610980576040517ffb8f41b200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff841660048201526024810182905260448101839052606401610428565b61098f84848484036000610ab1565b50505050565b73ffffffffffffffffffffffffffffffffffffffff83166109e5576040517f96c6fd1e00000000000000000000000000000000000000000000000000000000815260006004820152602401610428565b73ffffffffffffffffffffffffffffffffffffffff8216610a35576040517fec442f0500000000000000000000000000000000000000000000000000000000815260006004820152602401610428565b610861838383610bf9565b73ffffffffffffffffffffffffffffffffffffffff8216610a90576040517f96c6fd1e00000000000000000000000000000000000000000000000000000000815260006004820152602401610428565b6108c282600083610bf9565b610aa78233836108c6565b6108c28282610a40565b73ffffffffffffffffffffffffffffffffffffffff8416610b01576040517fe602df0500000000000000000000000000000000000000000000000000000000815260006004820152602401610428565b73ffffffffffffffffffffffffffffffffffffffff8316610b51576040517f94280d6200000000000000000000000000000000000000000000000000000000815260006004820152602401610428565b73ffffffffffffffffffffffffffffffffffffffff8085166000908152600160209081526040808320938716835292905220829055801561098f578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051610beb91815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff8316610c31578060026000828254610c269190610f87565b90915550610ce39050565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205481811015610cb7576040517fe450d38c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff851660048201526024810182905260448101839052606401610428565b73ffffffffffffffffffffffffffffffffffffffff841660009081526020819052604090209082900390555b73ffffffffffffffffffffffffffffffffffffffff8216610d0c57600280548290039055610d38565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090208054820190555b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161062491815260200190565b602081526000825180602084015260005b81811015610dc55760208186018101516040868401015201610da8565b5060006040828501015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011684010191505092915050565b803573ffffffffffffffffffffffffffffffffffffffff81168114610e2757600080fd5b919050565b60008060408385031215610e3f57600080fd5b610e4883610e03565b946020939093013593505050565b60008060408385031215610e6957600080fd5b610e7283610e03565b9150610e8060208401610e03565b90509250929050565b600080600060608486031215610e9e57600080fd5b610ea784610e03565b95602085013595506040909401359392505050565b600080600060608486031215610ed157600080fd5b610eda84610e03565b9250610ee860208501610e03565b929592945050506040919091013590565b600060208284031215610f0b57600080fd5b5035919050565b600060208284031215610f2457600080fd5b610f2d82610e03565b9392505050565b600181811c90821680610f4857607f821691505b602082108103610f81577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b808201808211156103ad577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea2646970667358221220085f01204b33dc17013c78c74fbca32a3da2c0b384ce7c8878c889551af28c6164736f6c634300081a003360a060405234801561001057600080fd5b506040516116fe3803806116fe83398101604081905261002f916101e5565b60016000556002805460ff191690556001600160a01b038316158061005b57506001600160a01b038216155b8061006d57506001600160a01b038116155b1561008b5760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b0383166080526100a3600082610134565b506100ce7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a82610134565b506100f97f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e483610134565b506101126000805160206116de83398151915282610134565b5061012b6000805160206116de83398151915283610134565b50505050610228565b60008281526001602090815260408083206001600160a01b038516845290915281205460ff166101bf5760008381526001602081815260408084206001600160a01b0387168086529252808420805460ff19169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45060016101c3565b5060005b92915050565b80516001600160a01b03811681146101e057600080fd5b919050565b6000806000606084860312156101fa57600080fd5b610203846101c9565b9250610211602085016101c9565b915061021f604085016101c9565b90509250925092565b60805161147f61025f6000396000818161019e0152818161050001528181610562015281816108f70152610959015261147f6000f3fe608060405234801561001057600080fd5b506004361061016c5760003560e01c806385f438c1116100cd578063c8a0236211610081578063d936547e11610066578063d936547e14610355578063d9caed1214610378578063e63ab1e91461038b57600080fd5b8063c8a023621461032f578063d547741f1461034257600080fd5b80639a590427116100b25780639a590427146103015780639b19251a14610314578063a217fddf1461032757600080fd5b806385f438c11461029457806391d14854146102bb57600080fd5b806336568abe11610124578063570618e111610109578063570618e11461025a5780635c975abb146102815780638456cb591461028c57600080fd5b806336568abe1461023f5780633f4ba83a1461025257600080fd5b806321fc65f21161015557806321fc65f2146101e5578063248a9ca3146101fa5780632f2ff15d1461022c57600080fd5b806301ffc9a714610171578063116191b614610199575b600080fd5b61018461017f36600461118a565b6103b2565b60405190151581526020015b60405180910390f35b6101c07f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610190565b6101f86101f33660046111f5565b61044b565b005b61021e610208366004611292565b6000908152600160208190526040909120015490565b604051908152602001610190565b6101f861023a3660046112ab565b61064c565b6101f861024d3660046112ab565b610678565b6101f86106d6565b61021e7f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a81565b60025460ff16610184565b6101f861070b565b61021e7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b6101846102c93660046112ab565b600091825260016020908152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b6101f861030f3660046112d7565b61073d565b6101f86103223660046112d7565b6107be565b61021e600081565b6101f861033d3660046111f5565b610842565b6101f86103503660046112ab565b610a29565b6101846103633660046112d7565b60036020526000908152604090205460ff1681565b6101f86103863660046112f2565b610a4f565b61021e7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061044557507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b610453610b7b565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461047d81610bbe565b610485610bc8565b73ffffffffffffffffffffffffffffffffffffffff861660009081526003602052604090205460ff166104e4576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61052573ffffffffffffffffffffffffffffffffffffffff87167f000000000000000000000000000000000000000000000000000000000000000086610c07565b6040517f5131ab5900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690635131ab599061059f9089908990899089908990600401611378565b600060405180830381600087803b1580156105b957600080fd5b505af11580156105cd573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167f85b5be9cf454e05e0bddf49315178102227c312078eefa3c00294fb4d912ae4e868686604051610632939291906113d5565b60405180910390a3506106456001600055565b5050505050565b6000828152600160208190526040909120015461066881610bbe565b6106728383610c94565b50505050565b73ffffffffffffffffffffffffffffffffffffffff811633146106c7576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6106d18282610d41565b505050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61070081610bbe565b610708610de2565b50565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61073581610bbe565b610708610e41565b7f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a61076781610bbe565b73ffffffffffffffffffffffffffffffffffffffff8216600081815260036020526040808220805460ff19169055517f51085ddf9ebdded84b76e829eb58c4078e4b5bdf97d9a94723f336039da467919190a25050565b7f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a6107e881610bbe565b73ffffffffffffffffffffffffffffffffffffffff8216600081815260036020526040808220805460ff19166001179055517faab7954e9d246b167ef88aeddad35209ca2489d95a8aeb59e288d9b19fae5a549190a25050565b61084a610b7b565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461087481610bbe565b61087c610bc8565b73ffffffffffffffffffffffffffffffffffffffff861660009081526003602052604090205460ff166108db576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61091c73ffffffffffffffffffffffffffffffffffffffff87167f000000000000000000000000000000000000000000000000000000000000000086610c07565b6040517fb8969bd400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063b8969bd4906109969089908990899089908990600401611378565b600060405180830381600087803b1580156109b057600080fd5b505af11580156109c4573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fb9d4efa96044e5f5e03e696fa9ae2ff66911cc27e8a637c3627c75bc5b2241c8868686604051610632939291906113d5565b60008281526001602081905260409091200154610a4581610bbe565b6106728383610d41565b610a57610b7b565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e4610a8181610bbe565b610a89610bc8565b73ffffffffffffffffffffffffffffffffffffffff841660009081526003602052604090205460ff16610ae8576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610b0973ffffffffffffffffffffffffffffffffffffffff85168484610c07565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f9b1bfa7fa9ee420a16e124f794c35ac9f90472acc99140eb2f6447c714cad8eb84604051610b6891815260200190565b60405180910390a3506106d16001600055565b600260005403610bb7576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b6107088133610e7e565b60025460ff1615610c05576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6040805173ffffffffffffffffffffffffffffffffffffffff8416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb000000000000000000000000000000000000000000000000000000001790526106d1908490610f0f565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff16610d3957600083815260016020818152604080842073ffffffffffffffffffffffffffffffffffffffff87168086529252808420805460ff19169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a4506001610445565b506000610445565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff1615610d3957600083815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff86168085529252808320805460ff1916905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a4506001610445565b610dea610fa5565b6002805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b610e49610bc8565b6002805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258610e173390565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16610f0b576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82166004820152602481018390526044015b60405180910390fd5b5050565b6000610f3173ffffffffffffffffffffffffffffffffffffffff841683610fe1565b90508051600014158015610f56575080806020019051810190610f5491906113f8565b155b156106d1576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84166004820152602401610f02565b60025460ff16610c05576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6060610fef83836000610ff6565b9392505050565b606081471015611034576040517fcd786059000000000000000000000000000000000000000000000000000000008152306004820152602401610f02565b6000808573ffffffffffffffffffffffffffffffffffffffff16848660405161105d919061141a565b60006040518083038185875af1925050503d806000811461109a576040519150601f19603f3d011682016040523d82523d6000602084013e61109f565b606091505b50915091506110af8683836110b9565b9695505050505050565b6060826110ce576110c982611148565b610fef565b81511580156110f2575073ffffffffffffffffffffffffffffffffffffffff84163b155b15611141576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85166004820152602401610f02565b5080610fef565b8051156111585780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006020828403121561119c57600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610fef57600080fd5b803573ffffffffffffffffffffffffffffffffffffffff811681146111f057600080fd5b919050565b60008060008060006080868803121561120d57600080fd5b611216866111cc565b9450611224602087016111cc565b935060408601359250606086013567ffffffffffffffff81111561124757600080fd5b8601601f8101881361125857600080fd5b803567ffffffffffffffff81111561126f57600080fd5b88602082840101111561128157600080fd5b959894975092955050506020019190565b6000602082840312156112a457600080fd5b5035919050565b600080604083850312156112be57600080fd5b823591506112ce602084016111cc565b90509250929050565b6000602082840312156112e957600080fd5b610fef826111cc565b60008060006060848603121561130757600080fd5b611310846111cc565b925061131e602085016111cc565b929592945050506040919091013590565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff8616815273ffffffffffffffffffffffffffffffffffffffff851660208201528360408201526080606082015260006113ca60808301848661132f565b979650505050505050565b8381526040602082015260006113ef60408301848661132f565b95945050505050565b60006020828403121561140a57600080fd5b81518015158114610fef57600080fd5b6000825160005b8181101561143b5760208186018101518583015201611421565b50600092019182525091905056fea26469706673582212202f3991d39315b7c0e5ef6fd88336a0f791f8e1cce0a70cb66f2c4c9404215ae364736f6c634300081a00338619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a60c060405260001960035534801561001657600080fd5b5060405161155a38038061155a83398101604081905261003591610220565b60016000819055805460ff19169055838383836001600160a01b038416158061006557506001600160a01b038316155b8061007757506001600160a01b038216155b8061008957506001600160a01b038116155b156100a75760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b03808516608052831660a0526100c5600082610154565b506100f07f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e483610154565b5061011b7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb83610154565b506101467f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a82610154565b505050505050505050610274565b60008281526002602090815260408083206001600160a01b038516845290915281205460ff166101fa5760008381526002602090815260408083206001600160a01b03861684529091529020805460ff191660011790556101b23390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45060016101fe565b5060005b92915050565b80516001600160a01b038116811461021b57600080fd5b919050565b6000806000806080858703121561023657600080fd5b61023f85610204565b935061024d60208601610204565b925061025b60408601610204565b915061026960608601610204565b905092959194509250565b60805160a0516112826102d86000396000818161021d01528181610531015281816108240152818161097b01528181610ad00152610bf20152600081816101d1015281816104a1015281816105040152818161079401526107f701526112826000f3fe608060405234801561001057600080fd5b50600436106101775760003560e01c80635e3e9fef116100d857806391d148541161008c578063d547741f11610066578063d547741f14610386578063d5abeb0114610399578063e63ab1e9146103a257600080fd5b806391d1485414610311578063a217fddf14610357578063a783c7891461035f57600080fd5b8063743e0c9b116100bd578063743e0c9b146102cf5780638456cb59146102e257806385f438c1146102ea57600080fd5b80635e3e9fef146102a95780636f8b44b0146102bc57600080fd5b8063248a9ca31161012f57806336568abe1161011457806336568abe146102835780633f4ba83a146102965780635c975abb1461029e57600080fd5b8063248a9ca31461023f5780632f2ff15d1461027057600080fd5b8063106e629011610160578063106e6290146101b9578063116191b6146101cc57806321e093b11461021857600080fd5b806301ffc9a71461017c57806302d5c899146101a4575b600080fd5b61018f61018a366004610fb4565b6103c9565b60405190151581526020015b60405180910390f35b6101b76101b2366004611026565b610462565b005b6101b76101c73660046110b8565b6105f7565b6101f37f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161019b565b6101f37f000000000000000000000000000000000000000000000000000000000000000081565b61026261024d3660046110eb565b60009081526002602052604090206001015490565b60405190815260200161019b565b6101b761027e366004611104565b61069c565b6101b7610291366004611104565b6106c7565b6101b7610720565b60015460ff1661018f565b6101b76102b7366004611026565b610755565b6101b76102ca3660046110eb565b6108d0565b6101b76102dd3660046110eb565b61093e565b6101b76109e8565b6102627f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b61018f61031f366004611104565b600091825260026020908152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b610262600081565b6102627f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb81565b6101b7610394366004611104565b610a1a565b61026260035481565b6102627f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061045c57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b61046a610a3f565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461049481610a82565b61049c610a8c565b6104c77f00000000000000000000000000000000000000000000000000000000000000008684610acb565b6040517fb8969bd400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063b8969bd490610561907f0000000000000000000000000000000000000000000000000000000000000000908a908a908a908a90600401611179565b600060405180830381600087803b15801561057b57600080fd5b505af115801561058f573d6000803e3d6000fd5b505050508573ffffffffffffffffffffffffffffffffffffffff167fba96f26bdda53eb8c8ba39045dfb4ff39753fbc7a6edcf250a88e75e78d102fe8686866040516105dd939291906111d6565b60405180910390a2506105f06001600055565b5050505050565b6105ff610a3f565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461062981610a82565b610631610a8c565b61063c848484610acb565b8373ffffffffffffffffffffffffffffffffffffffff167f884edad9ce6fa2440d8a54cc123490eb96d2768479d49ff9c7366125a94243648460405161068491815260200190565b60405180910390a2506106976001600055565b505050565b6000828152600260205260409020600101546106b781610a82565b6106c18383610c53565b50505050565b73ffffffffffffffffffffffffffffffffffffffff81163314610716576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6106978282610d53565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61074a81610a82565b610752610e12565b50565b61075d610a3f565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461078781610a82565b61078f610a8c565b6107ba7f00000000000000000000000000000000000000000000000000000000000000008684610acb565b6040517f5131ab5900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690635131ab5990610854907f0000000000000000000000000000000000000000000000000000000000000000908a908a908a908a90600401611179565b600060405180830381600087803b15801561086e57600080fd5b505af1158015610882573d6000803e3d6000fd5b505050508573ffffffffffffffffffffffffffffffffffffffff167f7772f56296d3a5202974a45c61c9188d844ab4d6eeb18c851e4b8d5384ca6ced8686866040516105dd939291906111d6565b7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb6108fa81610a82565b610902610a8c565b60038290556040518281527f7810bd47de260c3e9ee10061cf438099dd12256c79485f12f94dbccc981e806c9060200160405180910390a15050565b610946610a8c565b6040517f79cc6790000000000000000000000000000000000000000000000000000000008152336004820152602481018290527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16906379cc679090604401600060405180830381600087803b1580156109d457600080fd5b505af11580156105f0573d6000803e3d6000fd5b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610a1281610a82565b610752610e8f565b600082815260026020526040902060010154610a3581610a82565b6106c18383610d53565b600260005403610a7b576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b6107528133610ee8565b60015460ff1615610ac9576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6003547f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b39573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b5d91906111f9565b610b679084611212565b1115610b9f576040517fc30436e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f1e458bee00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff848116600483015260248201849052604482018390527f00000000000000000000000000000000000000000000000000000000000000001690631e458bee90606401600060405180830381600087803b158015610c3657600080fd5b505af1158015610c4a573d6000803e3d6000fd5b50505050505050565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff16610d4b57600083815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff86168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055610ce93390565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a450600161045c565b50600061045c565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff1615610d4b57600083815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8616808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a450600161045c565b610e1a610f78565b600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b610e97610a8c565b600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016811790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25833610e65565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16610f74576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff821660048201526024810183905260440160405180910390fd5b5050565b60015460ff16610ac9576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060208284031215610fc657600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610ff657600080fd5b9392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461102157600080fd5b919050565b60008060008060006080868803121561103e57600080fd5b61104786610ffd565b945060208601359350604086013567ffffffffffffffff81111561106a57600080fd5b8601601f8101881361107b57600080fd5b803567ffffffffffffffff81111561109257600080fd5b8860208284010111156110a457600080fd5b959894975060200195606001359392505050565b6000806000606084860312156110cd57600080fd5b6110d684610ffd565b95602085013595506040909401359392505050565b6000602082840312156110fd57600080fd5b5035919050565b6000806040838503121561111757600080fd5b8235915061112760208401610ffd565b90509250929050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff8616815273ffffffffffffffffffffffffffffffffffffffff851660208201528360408201526080606082015260006111cb608083018486611130565b979650505050505050565b8381526040602082015260006111f0604083018486611130565b95945050505050565b60006020828403121561120b57600080fd5b5051919050565b8082018082111561045c577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea2646970667358221220de5fa55e0ca79ea2f08903481d01ea00bbbf346b9cfba44e12a2dd6f3a6f2e8a64736f6c634300081a00336080604052348015600f57600080fd5b506001600055610d3a806100246000396000f3fe6080604052600436106100635760003560e01c8063c513169111610040578063c5131691146100c1578063e04d4f97146100e1578063f05b6abf146100f457005b8063357fc5a21461006c5780636ed701691461008c5780638fcaa0b5146100a157005b3661006a57005b005b34801561007857600080fd5b5061006a6100873660046106c0565b610114565b34801561009857600080fd5b5061006a6101aa565b3480156100ad57600080fd5b5061006a6100bc3660046106fc565b6101df565b3480156100cd57600080fd5b5061006a6100dc3660046106c0565b61021e565b61006a6100ef366004610895565b6102f9565b34801561010057600080fd5b5061006a61010f366004610981565b61033d565b61011c610372565b61013e73ffffffffffffffffffffffffffffffffffffffff83163383866103b5565b604080513381526020810185905273ffffffffffffffffffffffffffffffffffffffff848116828401528316606082015290517f2b58128f24a9f59127cc5b5430d70542b22220f2d9adaa86e442b816ab98af609181900360800190a16101a56001600055565b505050565b6040513381527fbcaadb46b82a48af60b608f58959ae6b8310d1b0a0d094c2e9ec3208ed39f2a09060200160405180910390a1565b7f0d3f65f00e631663aa85c96330b5c7a83bb29af3630c0063776f985edc3037aa33838360405161021293929190610a6b565b60405180910390a15050565b610226610372565b6000610233600285610ad5565b90508060000361026f576040517f1f2a200500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61029173ffffffffffffffffffffffffffffffffffffffff84163384846103b5565b604080513381526020810183905273ffffffffffffffffffffffffffffffffffffffff858116828401528416606082015290517f2b58128f24a9f59127cc5b5430d70542b22220f2d9adaa86e442b816ab98af609181900360800190a1506101a56001600055565b7f1f1ff1f5fb41346850b2f5c04e6c767e2f1c8a525c5c0c5cdb60cdf3ca5f62fa3334858585604051610330959493929190610b7e565b60405180910390a1505050565b7f74a53cd528a921fca7dbdee62f86819051d3cc98f214951f4238e8843f20b146338484846040516103309493929190610c08565b6002600054036103ae576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b6040805173ffffffffffffffffffffffffffffffffffffffff85811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd0000000000000000000000000000000000000000000000000000000017905261044a908590610450565b50505050565b600061047273ffffffffffffffffffffffffffffffffffffffff8416836104eb565b905080516000141580156104975750808060200190518101906104959190610ccb565b155b156101a5576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff841660048201526024015b60405180910390fd5b60606104f983836000610500565b9392505050565b60608147101561053e576040517fcd7860590000000000000000000000000000000000000000000000000000000081523060048201526024016104e2565b6000808573ffffffffffffffffffffffffffffffffffffffff1684866040516105679190610ce8565b60006040518083038185875af1925050503d80600081146105a4576040519150601f19603f3d011682016040523d82523d6000602084013e6105a9565b606091505b50915091506105b98683836105c3565b9695505050505050565b6060826105d8576105d382610652565b6104f9565b81511580156105fc575073ffffffffffffffffffffffffffffffffffffffff84163b155b1561064b576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff851660048201526024016104e2565b50806104f9565b8051156106625780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50565b803573ffffffffffffffffffffffffffffffffffffffff811681146106bb57600080fd5b919050565b6000806000606084860312156106d557600080fd5b833592506106e560208501610697565b91506106f360408501610697565b90509250925092565b6000806020838503121561070f57600080fd5b823567ffffffffffffffff81111561072657600080fd5b8301601f8101851361073757600080fd5b803567ffffffffffffffff81111561074e57600080fd5b85602082840101111561076057600080fd5b6020919091019590945092505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156107e6576107e6610770565b604052919050565b600082601f8301126107ff57600080fd5b813567ffffffffffffffff81111561081957610819610770565b61084a60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8401160161079f565b81815284602083860101111561085f57600080fd5b816020850160208301376000918101602001919091529392505050565b801515811461069457600080fd5b80356106bb8161087c565b6000806000606084860312156108aa57600080fd5b833567ffffffffffffffff8111156108c157600080fd5b6108cd868287016107ee565b9350506020840135915060408401356108e58161087c565b809150509250925092565b600067ffffffffffffffff82111561090a5761090a610770565b5060051b60200190565b600082601f83011261092557600080fd5b8135610938610933826108f0565b61079f565b8082825260208201915060208360051b86010192508583111561095a57600080fd5b602085015b8381101561097757803583526020928301920161095f565b5095945050505050565b60008060006060848603121561099657600080fd5b833567ffffffffffffffff8111156109ad57600080fd5b8401601f810186136109be57600080fd5b80356109cc610933826108f0565b8082825260208201915060208360051b8501019250888311156109ee57600080fd5b602084015b83811015610a3057803567ffffffffffffffff811115610a1257600080fd5b610a218b6020838901016107ee565b845250602092830192016109f3565b509550505050602084013567ffffffffffffffff811115610a5057600080fd5b610a5c86828701610914565b9250506106f36040850161088a565b73ffffffffffffffffffffffffffffffffffffffff8416815260406020820152816040820152818360608301376000818301606090810191909152601f9092017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016010192915050565b600082610b0b577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60005b83811015610b2b578181015183820152602001610b13565b50506000910152565b60008151808452610b4c816020860160208601610b10565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b73ffffffffffffffffffffffffffffffffffffffff8616815284602082015260a060408201526000610bb360a0830186610b34565b6060830194909452509015156080909101529392505050565b600081518084526020840193506020830160005b82811015610bfe578151865260209586019590910190600101610be0565b5093949350505050565b60006080820173ffffffffffffffffffffffffffffffffffffffff871683526080602084015280865180835260a08501915060a08160051b86010192506020880160005b82811015610c9b577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60878603018452610c86858351610b34565b94506020938401939190910190600101610c4c565b505050508281036040840152610cb18186610bcc565b915050610cc2606083018415159052565b95945050505050565b600060208284031215610cdd57600080fd5b81516104f98161087c565b60008251610cfa818460208701610b10565b919091019291505056fea2646970667358221220556072e1abafc3c4063b8cce832228b4f309b93726aaa6a6dfab20cb880c6d1864736f6c634300081a0033a26469706673582212206782ec51bb9a2af0eaeafe61b6920df40f98e750c862f19e59281dce11ce1da464736f6c634300081a0033", } // ZetaConnectorNonNativeTestABI is the input ABI used to generate the binding from. diff --git a/v2/pkg/zrc20.t.sol/zrc20test.go b/v2/pkg/zrc20.t.sol/zrc20test.go index 1c4d0595..3057c007 100644 --- a/v2/pkg/zrc20.t.sol/zrc20test.go +++ b/v2/pkg/zrc20.t.sol/zrc20test.go @@ -50,7 +50,7 @@ type StdInvariantFuzzSelector struct { // ZRC20TestMetaData contains all meta data concerning the ZRC20Test contract. var ZRC20TestMetaData = &bind.MetaData{ ABI: "[{\"type\":\"function\",\"name\":\"IS_TEST\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeArtifacts\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedArtifacts_\",\"type\":\"string[]\",\"internalType\":\"string[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeContracts\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedContracts_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeSelectors\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedSelectors_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzSelector[]\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"selectors\",\"type\":\"bytes4[]\",\"internalType\":\"bytes4[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeSenders\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedSenders_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"failed\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"setUp\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"targetArtifactSelectors\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedArtifactSelectors_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzArtifactSelector[]\",\"components\":[{\"name\":\"artifact\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"selectors\",\"type\":\"bytes4[]\",\"internalType\":\"bytes4[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetArtifacts\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedArtifacts_\",\"type\":\"string[]\",\"internalType\":\"string[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetContracts\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedContracts_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetInterfaces\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedInterfaces_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzInterface[]\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"artifacts\",\"type\":\"string[]\",\"internalType\":\"string[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetSelectors\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedSelectors_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzSelector[]\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"selectors\",\"type\":\"bytes4[]\",\"internalType\":\"bytes4[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetSenders\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedSenders_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"testApproveFailsIfRecipientIsZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testBurn\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testBurnFailsIfNoBalance\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDeposit\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositFailsIfRecipientIsZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositFailsIfSenderIsNotGateway\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testTransfer\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testTransferFailsIfNoBalance\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testTransferFailsIfRecipientIsZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testTransferFrom\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testTransferFromFailsIfNoAllowance\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testTransferFromFailsIfNoBalance\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testTransferFromFailsIfRecipientIsZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testTransferFromFailsIfSenderIsZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testUpdateGasLimit\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testUpdateGasLimitFailsIfSenderIsNotFungible\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testUpdateGatewayAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testUpdateGatewayAddressFailsIfSenderIsNotFungible\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testUpdateGatewayAddressFailsIfZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testUpdateProtocolFlatFee\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testUpdateProtocolFlatFeeFailsIfSenderIsNotFungible\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testUpdateSystemContractAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testUpdateSystemContractAddressFailsIfSenderIsNotFungible\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testUpdateSystemContractAddressFailsIfZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdraw\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawFailsIfNoAllowance\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawFailsIfNoBalance\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawGasFee\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawGasFeeFailsIfGasCoinNotSetForChainId\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawGasFeeFailsIfGasPriceNotSetForChainId\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testZRC20BasicInfo\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"event\",\"name\":\"log\",\"inputs\":[{\"name\":\"\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_address\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_array\",\"inputs\":[{\"name\":\"val\",\"type\":\"uint256[]\",\"indexed\":false,\"internalType\":\"uint256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_array\",\"inputs\":[{\"name\":\"val\",\"type\":\"int256[]\",\"indexed\":false,\"internalType\":\"int256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_array\",\"inputs\":[{\"name\":\"val\",\"type\":\"address[]\",\"indexed\":false,\"internalType\":\"address[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_bytes\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_bytes32\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_int\",\"inputs\":[{\"name\":\"\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_address\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_array\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"uint256[]\",\"indexed\":false,\"internalType\":\"uint256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_array\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"int256[]\",\"indexed\":false,\"internalType\":\"int256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_array\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"address[]\",\"indexed\":false,\"internalType\":\"address[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_bytes\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_bytes32\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_decimal_int\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"},{\"name\":\"decimals\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_decimal_uint\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"decimals\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_int\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_string\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_uint\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_string\",\"inputs\":[{\"name\":\"\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_uint\",\"inputs\":[{\"name\":\"\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"logs\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"CallerIsNotFungibleModule\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"GasFeeTransferFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidSender\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"LowAllowance\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"LowBalance\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZeroAddress\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZeroGasCoin\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZeroGasPrice\",\"inputs\":[]}]", - Bin: "0x6080604052600c8054600160ff199182168117909255601f80549091169091179055348015602c57600080fd5b5061df6a8061003c6000396000f3fe608060405234801561001057600080fd5b50600436106102f45760003560e01c80638ce7ef0511610191578063d27b0427116100e3578063dfbdf60011610097578063f1f87f4011610071578063f1f87f401461049d578063f2413096146104a5578063fa7626d4146104ad57600080fd5b8063dfbdf60014610485578063e13aba481461048d578063e20c9f711461049557600080fd5b8063d591221f116100c8578063d591221f1461046d578063d97136a214610475578063dcba486a1461047d57600080fd5b8063d27b04271461045d578063d509b16c1461046557600080fd5b8063b549984c11610145578063ba414fa61161011f578063ba414fa614610435578063d04cda981461044d578063d1fd32911461045557600080fd5b8063b549984c1461041d578063b5508aa914610425578063b79cad091461042d57600080fd5b8063a4aa6c7c11610176578063a4aa6c7c14610405578063ae9687dc1461040d578063b0464fdc1461041557600080fd5b80638ce7ef05146103e8578063916a17c6146103f057600080fd5b80634b6295091161024a57806366d9a9a0116101fe5780637f924c4e116101d85780637f924c4e146103c357806380326680146103cb57806385226c81146103d357600080fd5b806366d9a9a01461039e5780636ff45850146103b357806370557298146103bb57600080fd5b8063513999621161022f578063513999621461038657806358fdbbe01461038e5780635f01db7e1461039657600080fd5b80634b629509146103765780634cfc0aaa1461037e57600080fd5b806328438826116102ac5780633be9ec80116102865780633be9ec801461035e5780633e5e3c23146103665780633f7286f41461036e57600080fd5b806328438826146103395780632ade3880146103415780632f6254fc1461035657600080fd5b80630a9254e4116102dd5780630a9254e41461030b5780631142744e146103135780631ed7831c1461031b57600080fd5b80630393998b146102f95780630809dfef14610303575b600080fd5b6103016104ba565b005b6103016105bc565b61030161074a565b610301610e2c565b610323610f10565b6040516103309190619053565b60405180910390f35b610301610f72565b6103496111bd565b60405161033091906190ef565b6103016112ff565b610301611470565b61032361165d565b6103236116bd565b61030161171d565b6103016117f0565b6103016118c9565b610301611c46565b610301611d19565b6103a6611e86565b6040516103309190619255565b610301612008565b610301612218565b610301612468565b61030161268c565b6103db612760565b60405161033091906192f3565b610301612830565b6103f8612a30565b604051610330919061936a565b610301612b2b565b610301612ce0565b6103f8612f6d565b610301613068565b6103db61313a565b61030161320a565b61043d61359c565b6040519015158152602001610330565b610301613670565b6103016137b4565b6103016138f7565b610301613a3a565b6103016140ce565b6103016141b2565b610301614338565b6103016145bb565b6103016146fe565b6103236149a8565b610301614a08565b610301614b4e565b601f5461043d9060ff1681565b604051630618f58760e51b81527f2b2add3d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b15801561052657600080fd5b505af115801561053a573d6000803e3d6000fd5b5050601f546040517feddeb123000000000000000000000000000000000000000000000000000000008152600a60048201526101009091046001600160a01b0316925063eddeb12391506024015b600060405180830381600087803b1580156105a257600080fd5b505af11580156105b6573d6000803e3d6000fd5b50505050565b60225460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561061557600080fd5b505af1158015610629573d6000803e3d6000fd5b5050604051630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b15801561069957600080fd5b505af11580156106ad573d6000803e3d6000fd5b5050601f546040517f47e7ef2400000000000000000000000000000000000000000000000000000000815260006004820152620186a060248201526101009091046001600160a01b031692506347e7ef2491506044015b6020604051808303816000875af1158015610723573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107479190619401565b50565b602480547fffffffffffffffffffffffff000000000000000000000000000000000000000090811630179091556025805490911661123417905560405161079090618f73565b604051809103906000f0801580156107ac573d6000803e3d6000fd5b50602380547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03928316908117909155604080518082018252600f81527f476174657761795a45564d2e736f6c000000000000000000000000000000000060208201526024805492519081019390935292166044820152610890919060640160408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f485cc95500000000000000000000000000000000000000000000000000000000179052614daa565b602280546001600160a01b03929092167fffffffffffffffffffffffff00000000000000000000000000000000000000009283168117909155602180549092168117909155604080517f3ce4a5bc0000000000000000000000000000000000000000000000000000000081529051633ce4a5bc916004808201926020929091908290030181865afa158015610929573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061094d919061943f565b602680547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039290921691821790556040517f06447d560000000000000000000000000000000000000000000000000000000081526004810191909152737109709ecfa91a80626ff3989d68f67f5b1dd12d906306447d5690602401600060405180830381600087803b1580156109eb57600080fd5b505af11580156109ff573d6000803e3d6000fd5b505050506000806000604051610a1490618f80565b6001600160a01b03938416815291831660208301529091166040820152606001604051809103906000f080158015610a50573d6000803e3d6000fd5b50602080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03928316908117909155602154604051601293600193849360009391921690610aa690618f8d565b610ab59695949392919061945a565b604051809103906000f080158015610ad1573d6000803e3d6000fd5b50601f80547fffffffffffffffffffffff0000000000000000000000000000000000000000ff166101006001600160a01b03938416810291909117918290556020546040517fee2815ba00000000000000000000000000000000000000000000000000000000815260016004820152919092048316602482015291169063ee2815ba90604401600060405180830381600087803b158015610b7157600080fd5b505af1158015610b85573d6000803e3d6000fd5b50506020546040517fa7cb050700000000000000000000000000000000000000000000000000000000815260016004820181905260248201526001600160a01b03909116925063a7cb05079150604401600060405180830381600087803b158015610bef57600080fd5b505af1158015610c03573d6000803e3d6000fd5b50506026546040517fc88a5e6d0000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152633b9aca006024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c88a5e6d9150604401600060405180830381600087803b158015610c8357600080fd5b505af1158015610c97573d6000803e3d6000fd5b50506022546040517fc88a5e6d0000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152633b9aca006024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c88a5e6d9150604401600060405180830381600087803b158015610d1757600080fd5b505af1158015610d2b573d6000803e3d6000fd5b5050601f54602480546040517f47e7ef240000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620186a09281019290925261010090920490911692506347e7ef2491506044016020604051808303816000875af1158015610da9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dcd9190619401565b507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b03166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156105a257600080fd5b604051630618f58760e51b81527fddb5de5e000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b158015610e9857600080fd5b505af1158015610eac573d6000803e3d6000fd5b5050601f54602480546040517f47e7ef240000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620186a09281019290925261010090920490911692506347e7ef249150604401610704565b60606016805480602002602001604051908101604052809291908181526020018280548015610f6857602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610f4a575b5050505050905090565b601f546025546040516370a0823160e01b81526001600160a01b0391821660048201526000926101009004909116906370a0823190602401602060405180830381865afa158015610fc7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610feb919061954f565b9050610ff8600082614dc9565b601f54602480546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201526207a12092810183905291926101009004169063095ea7b3906044016020604051808303816000875af1158015611070573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110949190619401565b50604051630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b15801561110157600080fd5b505af1158015611115573d6000803e3d6000fd5b5050601f546025546040517f23b872dd000000000000000000000000000000000000000000000000000000008152600060048201526001600160a01b039182166024820152604481018690526101009092041692506323b872dd91506064015b6020604051808303816000875af1158015611194573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111b89190619401565b505050565b6060601e805480602002602001604051908101604052809291908181526020016000905b828210156112f657600084815260208082206040805180820182526002870290920180546001600160a01b03168352600181018054835181870281018701909452808452939591948681019491929084015b828210156112df57838290600052602060002001805461125290619568565b80601f016020809104026020016040519081016040528092919081815260200182805461127e90619568565b80156112cb5780601f106112a0576101008083540402835291602001916112cb565b820191906000526020600020905b8154815290600101906020018083116112ae57829003601f168201915b505050505081526020019060010190611233565b5050505081525050815260200190600101906111e1565b50505050905090565b60265460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561135857600080fd5b505af115801561136c573d6000803e3d6000fd5b5050601f546040517fc835d7cc00000000000000000000000000000000000000000000000000000000815261321160048201526101009091046001600160a01b0316925063c835d7cc9150602401600060405180830381600087803b1580156113d457600080fd5b505af11580156113e8573d6000803e3d6000fd5b5050505061146e601f60019054906101000a90046001600160a01b03166001600160a01b031663f2441b326040518163ffffffff1660e01b8152600401602060405180830381865afa158015611442573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611466919061943f565b613211614e51565b565b60265460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156114c957600080fd5b505af11580156114dd573d6000803e3d6000fd5b50506020546040517fa7cb050700000000000000000000000000000000000000000000000000000000815260016004820152600060248201526001600160a01b03909116925063a7cb05079150604401600060405180830381600087803b15801561154757600080fd5b505af115801561155b573d6000803e3d6000fd5b5050604051630618f58760e51b81527fe661aed0000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e091506024015b600060405180830381600087803b1580156115cc57600080fd5b505af11580156115e0573d6000803e3d6000fd5b50505050600080601f60019054906101000a90046001600160a01b03166001600160a01b031663d9eeebed6040518163ffffffff1660e01b81526004016040805180830381865afa158015611639573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105b691906195b5565b60606018805480602002602001604051908101604052809291908181526020018280548015610f68576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311610f4a575050505050905090565b60606017805480602002602001604051908101604052809291908181526020018280548015610f68576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311610f4a575050505050905090565b604051630618f58760e51b81527f2b2add3d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b15801561178957600080fd5b505af115801561179d573d6000803e3d6000fd5b5050601f546040517fccc7759900000000000000000000000000000000000000000000000000000000815261321160048201526101009091046001600160a01b0316925063ccc775999150602401610588565b604051630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b15801561185c57600080fd5b505af1158015611870573d6000803e3d6000fd5b5050601f546040517f095ea7b300000000000000000000000000000000000000000000000000000000815260006004820152600a60248201526101009091046001600160a01b0316925063095ea7b39150604401610704565b60265460405163ca669fa760e01b81526001600160a01b039091166004820152600a908190737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561192757600080fd5b505af115801561193b573d6000803e3d6000fd5b5050601f546040517ff687d12a000000000000000000000000000000000000000000000000000000008152600481018690526101009091046001600160a01b0316925063f687d12a9150602401600060405180830381600087803b1580156119a257600080fd5b505af11580156119b6573d6000803e3d6000fd5b505060265460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b158015611a1357600080fd5b505af1158015611a27573d6000803e3d6000fd5b5050601f546040517feddeb123000000000000000000000000000000000000000000000000000000008152600481018590526101009091046001600160a01b0316925063eddeb1239150602401600060405180830381600087803b158015611a8e57600080fd5b505af1158015611aa2573d6000803e3d6000fd5b5050601f546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526101009091046001600160a01b03166004820181905260006024830152925063095ea7b391506044016020604051808303816000875af1158015611b15573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b399190619401565b507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b031663f48448146040518163ffffffff1660e01b8152600401600060405180830381600087803b158015611b9857600080fd5b505af1158015611bac573d6000803e3d6000fd5b5050601f546025546040805160609290921b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000001660208301528051601481840301815260348301918290527fc7012626000000000000000000000000000000000000000000000000000000009091526001600160a01b0361010090930492909216935063c7012626925061117591906001906038016195e1565b604051630618f58760e51b81527f2b2add3d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b158015611cb257600080fd5b505af1158015611cc6573d6000803e3d6000fd5b5050601f546040517fc835d7cc00000000000000000000000000000000000000000000000000000000815261321160048201526101009091046001600160a01b0316925063c835d7cc9150602401610588565b60265460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015611d7257600080fd5b505af1158015611d86573d6000803e3d6000fd5b5050601f546040517ff687d12a000000000000000000000000000000000000000000000000000000008152600a60048201526101009091046001600160a01b0316925063f687d12a9150602401600060405180830381600087803b158015611ded57600080fd5b505af1158015611e01573d6000803e3d6000fd5b5050505061146e600a601f60019054906101000a90046001600160a01b03166001600160a01b031663091d27886040518163ffffffff1660e01b8152600401602060405180830381865afa158015611e5d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e81919061954f565b614dc9565b6060601b805480602002602001604051908101604052809291908181526020016000905b828210156112f65783829060005260206000209060020201604051806040016040529081600082018054611edd90619568565b80601f0160208091040260200160405190810160405280929190818152602001828054611f0990619568565b8015611f565780601f10611f2b57610100808354040283529160200191611f56565b820191906000526020600020905b815481529060010190602001808311611f3957829003601f168201915b5050505050815260200160018201805480602002602001604051908101604052809291908181526020018280548015611ff057602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019060040190602082600301049283019260010382029150808411611f9d5790505b50505050508152505081526020019060010190611eaa565b601f546025546040516370a0823160e01b81526001600160a01b0391821660048201526000926101009004909116906370a0823190602401602060405180830381865afa15801561205d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612081919061954f565b905061208e600082614dc9565b601f54602480546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201526207a12092810183905291926101009004169063095ea7b3906044016020604051808303816000875af1158015612106573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061212a9190619401565b50604051630618f58760e51b81527ffe382aa7000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b15801561219757600080fd5b505af11580156121ab573d6000803e3d6000fd5b5050601f54602480546025546040517f23b872dd0000000000000000000000000000000000000000000000000000000081526001600160a01b039283166004820152908216928101929092526044820186905261010090920490911692506323b872dd9150606401611175565b601f546025546040516370a0823160e01b81526001600160a01b0391821660048201526000926101009004909116906370a0823190602401602060405180830381865afa15801561226d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612291919061954f565b905061229e600082614dc9565b601f54602480546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015261c35092810183905291926101009004169063095ea7b3906044016020604051808303816000875af1158015612315573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123399190619401565b50601f54602480546025546040517f23b872dd0000000000000000000000000000000000000000000000000000000081526001600160a01b0392831660048201529082169281019290925260448201849052610100909204909116906323b872dd906064015b6020604051808303816000875af11580156123be573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123e29190619401565b50601f546025546040516370a0823160e01b81526001600160a01b0391821660048201526000926101009004909116906370a0823190602401602060405180830381865afa158015612438573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061245c919061954f565b90506111b88282614dc9565b6000601f60019054906101000a90046001600160a01b03166001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156124bd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124e1919061954f565b90506124f0620186a082614dc9565b60225460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561254957600080fd5b505af115801561255d573d6000803e3d6000fd5b5050601f54602480546040517f47e7ef240000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620186a09281019290925261010090920490911692506347e7ef2491506044016020604051808303816000875af11580156125db573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125ff9190619401565b506000601f60019054906101000a90046001600160a01b03166001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612655573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612679919061954f565b905061268862030d4082614dc9565b5050565b604051630618f58760e51b81527ffe382aa7000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b1580156126f857600080fd5b505af115801561270c573d6000803e3d6000fd5b5050601f546040517f42966c68000000000000000000000000000000000000000000000000000000008152620249f060048201526101009091046001600160a01b031692506342966c689150602401610704565b6060601a805480602002602001604051908101604052809291908181526020016000905b828210156112f65783829060005260206000200180546127a390619568565b80601f01602080910402602001604051908101604052809291908181526020018280546127cf90619568565b801561281c5780601f106127f15761010080835404028352916020019161281c565b820191906000526020600020905b8154815290600101906020018083116127ff57829003601f168201915b505050505081526020019060010190612784565b601f546025546040516370a0823160e01b81526001600160a01b0391821660048201526000926101009004909116906370a0823190602401602060405180830381865afa158015612885573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128a9919061954f565b90506128b6600082614dc9565b601f54602480546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201526207a12092810183905291926101009004169063095ea7b3906044016020604051808303816000875af115801561292e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129529190619401565b50604051630618f58760e51b81527ffe382aa7000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b1580156129bf57600080fd5b505af11580156129d3573d6000803e3d6000fd5b5050601f546025546040517fa9059cbb0000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201526024810186905261010090920416925063a9059cbb9150604401611175565b6060601d805480602002602001604051908101604052809291908181526020016000905b828210156112f65760008481526020908190206040805180820182526002860290920180546001600160a01b03168352600181018054835181870281018701909452808452939491938583019392830182828015612b1357602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019060040190602082600301049283019260010382029150808411612ac05790505b50505050508152505081526020019060010190612a54565b601f54602480546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201526207a12092810183905291926101009004169063095ea7b3906044016020604051808303816000875af1158015612ba3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612bc79190619401565b50604051630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b158015612c3457600080fd5b505af1158015612c48573d6000803e3d6000fd5b5050601f546040517fa9059cbb00000000000000000000000000000000000000000000000000000000815260006004820152602481018590526101009091046001600160a01b0316925063a9059cbb91506044015b6020604051808303816000875af1158015612cbc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126889190619401565b6000601f60019054906101000a90046001600160a01b03166001600160a01b03166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa158015612d35573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052612d5d91908101906196cb565b9050612d9e6040518060400160405280600581526020017f544f4b454e00000000000000000000000000000000000000000000000000000081525082614eb2565b6000601f60019054906101000a90046001600160a01b03166001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa158015612df3573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052612e1b91908101906196cb565b9050612e5c6040518060400160405280600381526020017f544b4e000000000000000000000000000000000000000000000000000000000081525082614eb2565b6000601f60019054906101000a90046001600160a01b03166001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015612eb1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ed59190619714565b9050612ee560128260ff16614dc9565b6000601f60019054906101000a90046001600160a01b03166001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612f3a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f5e919061954f565b90506105b6620186a082614dc9565b6060601c805480602002602001604051908101604052809291908181526020016000905b828210156112f65760008481526020908190206040805180820182526002860290920180546001600160a01b0316835260018101805483518187028101870190945280845293949193858301939283018282801561305057602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019060040190602082600301049283019260010382029150808411612ffd5790505b50505050508152505081526020019060010190612f91565b604051630618f58760e51b81527f2b2add3d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b1580156130d457600080fd5b505af11580156130e8573d6000803e3d6000fd5b5050601f546040517ff687d12a000000000000000000000000000000000000000000000000000000008152600a60048201526101009091046001600160a01b0316925063f687d12a9150602401610588565b60606019805480602002602001604051908101604052809291908181526020016000905b828210156112f657838290600052602060002001805461317d90619568565b80601f01602080910402602001604051908101604052809291908181526020018280546131a990619568565b80156131f65780601f106131cb576101008083540402835291602001916131f6565b820191906000526020600020905b8154815290600101906020018083116131d957829003601f168201915b50505050508152602001906001019061315e565b60265460405163ca669fa760e01b81526001600160a01b039091166004820152600a906305f5e10090737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561326c57600080fd5b505af1158015613280573d6000803e3d6000fd5b5050601f546040517ff687d12a000000000000000000000000000000000000000000000000000000008152600481018690526101009091046001600160a01b0316925063f687d12a9150602401600060405180830381600087803b1580156132e757600080fd5b505af11580156132fb573d6000803e3d6000fd5b505060265460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b15801561335857600080fd5b505af115801561336c573d6000803e3d6000fd5b5050601f546040517feddeb123000000000000000000000000000000000000000000000000000000008152600481018590526101009091046001600160a01b0316925063eddeb1239150602401600060405180830381600087803b1580156133d357600080fd5b505af11580156133e7573d6000803e3d6000fd5b5050601f546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526101009091046001600160a01b031660048201819052630bebc2006024830152925063095ea7b391506044016020604051808303816000875af115801561345d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134819190619401565b50604051630618f58760e51b81527ffe382aa7000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b1580156134ee57600080fd5b505af1158015613502573d6000803e3d6000fd5b5050601f546025546040805160609290921b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000001660208301528051601481840301815260348301918290527fc7012626000000000000000000000000000000000000000000000000000000009091526001600160a01b0361010090930492909216935063c7012626925061117591906064906038016195e1565b60085460009060ff16156135b4575060085460ff1690565b6040517f667f9d70000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d600482018190527f6661696c65640000000000000000000000000000000000000000000000000000602483015260009163667f9d7090604401602060405180830381865afa158015613645573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613669919061954f565b1415905090565b60265460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156136c957600080fd5b505af11580156136dd573d6000803e3d6000fd5b5050601f546040517feddeb123000000000000000000000000000000000000000000000000000000008152600a60048201526101009091046001600160a01b0316925063eddeb1239150602401600060405180830381600087803b15801561374457600080fd5b505af1158015613758573d6000803e3d6000fd5b5050505061146e600a601f60019054906101000a90046001600160a01b03166001600160a01b0316634d8943bb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611e5d573d6000803e3d6000fd5b60265460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561380d57600080fd5b505af1158015613821573d6000803e3d6000fd5b5050604051630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b15801561389157600080fd5b505af11580156138a5573d6000803e3d6000fd5b5050601f546040517fccc77599000000000000000000000000000000000000000000000000000000008152600060048201526101009091046001600160a01b0316925063ccc775999150602401610588565b60265460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561395057600080fd5b505af1158015613964573d6000803e3d6000fd5b5050604051630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b1580156139d457600080fd5b505af11580156139e8573d6000803e3d6000fd5b5050601f546040517fc835d7cc000000000000000000000000000000000000000000000000000000008152600060048201526101009091046001600160a01b0316925063c835d7cc9150602401610588565b60265460405163ca669fa760e01b81526001600160a01b039091166004820152600a908190737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015613a9857600080fd5b505af1158015613aac573d6000803e3d6000fd5b5050601f546040517ff687d12a000000000000000000000000000000000000000000000000000000008152600481018690526101009091046001600160a01b0316925063f687d12a9150602401600060405180830381600087803b158015613b1357600080fd5b505af1158015613b27573d6000803e3d6000fd5b505060265460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b158015613b8457600080fd5b505af1158015613b98573d6000803e3d6000fd5b5050601f546040517feddeb123000000000000000000000000000000000000000000000000000000008152600481018590526101009091046001600160a01b0316925063eddeb1239150602401600060405180830381600087803b158015613bff57600080fd5b505af1158015613c13573d6000803e3d6000fd5b5050601f54602480546040516370a0823160e01b81526001600160a01b039182166004820152600095506101009093041692506370a082319101602060405180830381865afa158015613c6a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613c8e919061954f565b9050613c9d620186a082614dc9565b6000601f60019054906101000a90046001600160a01b03166001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613cf2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613d16919061954f565b9050613d25620186a082614dc9565b601f546026546040516370a0823160e01b81526001600160a01b0391821660048201526000926101009004909116906370a0823190602401602060405180830381865afa158015613d7a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613d9e919061954f565b601f546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526101009091046001600160a01b03166004820181905261c350602483015291925063095ea7b3906044016020604051808303816000875af1158015613e10573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613e349190619401565b50601f546025546040805160609290921b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000001660208301528051601481840301815260348301918290527fc7012626000000000000000000000000000000000000000000000000000000009091526001600160a01b03610100909304929092169163c701262691613ecc919061c350906038016195e1565b6020604051808303816000875af1158015613eeb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613f0f9190619401565b50601f546026546040516370a0823160e01b81526001600160a01b0391821660048201526000926101009004909116906370a0823190602401602060405180830381865afa158015613f65573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613f89919061954f565b9050613fa985613f998885619766565b613fa39190619766565b82614dc9565b601f54602480546040516370a0823160e01b81526001600160a01b0391821660048201526000936101009004909116916370a082319101602060405180830381865afa158015613ffd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614021919061954f565b905061403d866140338961c350619779565b613fa39190619779565b6000601f60019054906101000a90046001600160a01b03166001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015614092573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906140b6919061954f565b90506140c461c35082614dc9565b5050505050505050565b601f546025546040516370a0823160e01b81526001600160a01b0391821660048201526000926101009004909116906370a0823190602401602060405180830381865afa158015614123573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614147919061954f565b9050614154600082614dc9565b601f546025546040517fa9059cbb0000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015261c350602482018190529261010090049091169063a9059cbb9060440161239f565b601f54602480546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201526207a12092810183905291926101009004169063095ea7b3906044016020604051808303816000875af115801561422a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061424e9190619401565b50604051630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b1580156142bb57600080fd5b505af11580156142cf573d6000803e3d6000fd5b5050601f54602480546040517f23b872dd0000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201526000928101929092526044820186905261010090920490911692506323b872dd9150606401612c9d565b60265460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561439157600080fd5b505af11580156143a5573d6000803e3d6000fd5b5050601f546040517ff687d12a000000000000000000000000000000000000000000000000000000008152600a6004820181905293508392506101009091046001600160a01b03169063f687d12a90602401600060405180830381600087803b15801561441157600080fd5b505af1158015614425573d6000803e3d6000fd5b505060265460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b15801561448257600080fd5b505af1158015614496573d6000803e3d6000fd5b5050601f546040517feddeb123000000000000000000000000000000000000000000000000000000008152600a60048201526101009091046001600160a01b0316925063eddeb1239150602401600060405180830381600087803b1580156144fd57600080fd5b505af1158015614511573d6000803e3d6000fd5b50505050600080601f60019054906101000a90046001600160a01b03166001600160a01b031663d9eeebed6040518163ffffffff1660e01b81526004016040805180830381865afa15801561456a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061458e91906195b5565b601f5491935091506145ae9061010090046001600160a01b031683614e51565b6105b6613fa38486619766565b60265460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561461457600080fd5b505af1158015614628573d6000803e3d6000fd5b5050601f546040517fccc7759900000000000000000000000000000000000000000000000000000000815261321160048201526101009091046001600160a01b0316925063ccc775999150602401600060405180830381600087803b15801561469057600080fd5b505af11580156146a4573d6000803e3d6000fd5b5050505061146e601f60019054906101000a90046001600160a01b03166001600160a01b0316638b851b956040518163ffffffff1660e01b8152600401602060405180830381865afa158015611442573d6000803e3d6000fd5b601f54602480546040516370a0823160e01b81526001600160a01b0391821660048201526000936101009004909116916370a082319101602060405180830381865afa158015614752573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614776919061954f565b9050614785620186a082614dc9565b6000601f60019054906101000a90046001600160a01b03166001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156147da573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906147fe919061954f565b905061480d620186a082614dc9565b601f546040517f42966c6800000000000000000000000000000000000000000000000000000000815261c35060048201526101009091046001600160a01b0316906342966c68906024016020604051808303816000875af1158015614876573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061489a9190619401565b50601f54602480546040516370a0823160e01b81526001600160a01b0391821660048201526000936101009004909116916370a082319101602060405180830381865afa1580156148ef573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614913919061954f565b905061492161c35082614dc9565b6000601f60019054906101000a90046001600160a01b03166001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015614976573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061499a919061954f565b90506105b661c35082614dc9565b60606015805480602002602001604051908101604052809291908181526020018280548015610f68576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311610f4a575050505050905090565b60265460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015614a6157600080fd5b505af1158015614a75573d6000803e3d6000fd5b50506020546040517fee2815ba00000000000000000000000000000000000000000000000000000000815260016004820152600060248201526001600160a01b03909116925063ee2815ba9150604401600060405180830381600087803b158015614adf57600080fd5b505af1158015614af3573d6000803e3d6000fd5b5050604051630618f58760e51b81527f78fff396000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e091506024016115b2565b601f546025546040516370a0823160e01b81526001600160a01b0391821660048201526000926101009004909116906370a0823190602401602060405180830381865afa158015614ba3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614bc7919061954f565b9050614bd4600082614dc9565b601f54602480546040517fdd62ed3e0000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201819052928101929092526000926101009004169063dd62ed3e90604401602060405180830381865afa158015614c4a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614c6e919061954f565b9050614c7b600082614dc9565b604051630618f58760e51b81527f10bad14700000000000000000000000000000000000000000000000000000000600482015261c35090737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b158015614ceb57600080fd5b505af1158015614cff573d6000803e3d6000fd5b5050601f54602480546025546040517f23b872dd0000000000000000000000000000000000000000000000000000000081526001600160a01b039283166004820152908216928101929092526044820186905261010090920490911692506323b872dd91506064016020604051808303816000875af1158015614d86573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105b69190619401565b6000614db4618f9a565b614dbf848483614f04565b9150505b92915050565b6040517f98296c540000000000000000000000000000000000000000000000000000000081526004810183905260248101829052737109709ecfa91a80626ff3989d68f67f5b1dd12d906398296c54906044015b60006040518083038186803b158015614e3557600080fd5b505afa158015614e49573d6000803e3d6000fd5b505050505050565b6040517f515361f60000000000000000000000000000000000000000000000000000000081526001600160a01b03808416600483015282166024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063515361f690604401614e1d565b6040517ff320d963000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063f320d96390614e1d908590859060040161978c565b600080614f118584614f7f565b9050614f746040518060400160405280601d81526020017f4552433139363750726f78792e736f6c3a4552433139363750726f78790000008152508286604051602001614f5f9291906197b1565b60405160208183030381529060405285614f8b565b9150505b9392505050565b6000614f788383614fb9565b60c08101515160009015614faf57614fa884848460c00151614fd4565b9050614f78565b614fa8848461517a565b6000614fc58383615265565b614f7883836020015184614f8b565b600080614fdf615271565b90506000614fed8683615344565b9050600061500482606001518360200151856157ea565b90506000615014838389896159fc565b9050600061502182616879565b602081015181519192509060030b156150945789826040015160405160200161504b9291906197d3565b60408051601f19818403018152908290527f08c379a000000000000000000000000000000000000000000000000000000000825261508b91600401619854565b60405180910390fd5b60006150d76040518060400160405280601581526020017f4465706c6f79656420746f20616464726573733a200000000000000000000000815250836001616a48565b6040517fc6ce059d000000000000000000000000000000000000000000000000000000008152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c6ce059d9061512a908490600401619854565b602060405180830381865afa158015615147573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061516b919061943f565b9b9a5050505050505050505050565b6040517f8d1cc9250000000000000000000000000000000000000000000000000000000081526000908190737109709ecfa91a80626ff3989d68f67f5b1dd12d90638d1cc925906151cf908790600401619854565b600060405180830381865afa1580156151ec573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526152149190810190619887565b90506000615242828560405160200161522e9291906198bc565b604051602081830303815290604052616c48565b90506001600160a01b038116614dbf57848460405160200161504b9291906198eb565b61268882826000616c5b565b604080518082018252600381527f6f75740000000000000000000000000000000000000000000000000000000000602082015290517fd145736c000000000000000000000000000000000000000000000000000000008152606091737109709ecfa91a80626ff3989d68f67f5b1dd12d91829063d145736c906152f8908490600401619996565b600060405180830381865afa158015615315573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261533d91908101906196cb565b9250505090565b6153766040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b6000737109709ecfa91a80626ff3989d68f67f5b1dd12d90506153c16040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b6153ca85616d5e565b602082015260006153da86617143565b90506000836001600160a01b031663d930a0e66040518163ffffffff1660e01b8152600401600060405180830381865afa15801561541c573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261544491908101906196cb565b8683856020015160405160200161545e94939291906199dd565b60408051601f19818403018152908290527f60f9bb1100000000000000000000000000000000000000000000000000000000825291506000906001600160a01b038616906360f9bb11906154b6908590600401619854565b600060405180830381865afa1580156154d3573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526154fb91908101906196cb565b6040517fdb4235f60000000000000000000000000000000000000000000000000000000081529091506001600160a01b0386169063db4235f690615543908490600401619ae1565b602060405180830381865afa158015615560573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906155849190619401565b615599578160405160200161504b9190619b33565b6040517f49c4fac80000000000000000000000000000000000000000000000000000000081526001600160a01b038616906349c4fac8906155de908490600401619bc5565b600060405180830381865afa1580156155fb573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261562391908101906196cb565b84526040517fdb4235f60000000000000000000000000000000000000000000000000000000081526001600160a01b0386169063db4235f69061566a908490600401619c17565b602060405180830381865afa158015615687573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906156ab9190619401565b15615740576040517f49c4fac80000000000000000000000000000000000000000000000000000000081526001600160a01b038616906349c4fac8906156f5908490600401619c17565b600060405180830381865afa158015615712573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261573a91908101906196cb565b60408501525b846001600160a01b03166349c4fac88286600001516040516020016157659190619c69565b6040516020818303038152906040526040518363ffffffff1660e01b815260040161579192919061978c565b600060405180830381865afa1580156157ae573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526157d691908101906196cb565b606085015250608083015250949350505050565b60408051600480825260a0820190925260609160009190816020015b60608152602001906001900390816158065790505090506040518060400160405280600481526020017f67726570000000000000000000000000000000000000000000000000000000008152508160008151811061586657615866619cd5565b60200260200101819052506040518060400160405280600381526020017f2d726c0000000000000000000000000000000000000000000000000000000000815250816001815181106158ba576158ba619cd5565b6020026020010181905250846040516020016158d69190619d04565b604051602081830303815290604052816002815181106158f8576158f8619cd5565b6020026020010181905250826040516020016159149190619d70565b6040516020818303038152906040528160038151811061593657615936619cd5565b6020026020010181905250600061594c82616879565b602080820151604080518082018252600581527f2e6a736f6e00000000000000000000000000000000000000000000000000000081850190815282518084018452600080825290860152825180840190935290518252928101929092529192506159dd90604080518082018252600080825260209182015281518083019092528451825280850190820152906173c6565b6159f2578560405160200161504b9190619db1565b9695505050505050565b60a0810151604080518082018252600080825260209182015281518083019092528251808352928101910152606090737109709ecfa91a80626ff3989d68f67f5b1dd12d9015615a4c565b511590565b615bc057826020015115615b08576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605860248201527f54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f742060448201527f62652075736564207768656e207468652060736b6970566572696679536f757260648201527f6365436f646560206f7074696f6e206973206074727565600000000000000000608482015260a40161508b565b8260c0015115615bc0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605360248201527f54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f742060448201527f62652075736564207768656e207468652060736b69704c6963656e736554797060648201527f6560206f7074696f6e2069732060747275656000000000000000000000000000608482015260a40161508b565b6040805160ff8082526120008201909252600091816020015b6060815260200190600190039081615bd957905050905060006040518060400160405280600381526020017f6e70780000000000000000000000000000000000000000000000000000000000815250828280615c3490619e42565b935060ff1681518110615c4957615c49619cd5565b60200260200101819052506040518060400160405280600d81526020017f302e302e312d616c7068612e3700000000000000000000000000000000000000815250604051602001615c9a9190619e61565b604051602081830303815290604052828280615cb590619e42565b935060ff1681518110615cca57615cca619cd5565b60200260200101819052506040518060400160405280600681526020017f6465706c6f790000000000000000000000000000000000000000000000000000815250828280615d1790619e42565b935060ff1681518110615d2c57615d2c619cd5565b60200260200101819052506040518060400160405280600e81526020017f2d2d636f6e74726163744e616d65000000000000000000000000000000000000815250828280615d7990619e42565b935060ff1681518110615d8e57615d8e619cd5565b60200260200101819052508760200151828280615daa90619e42565b935060ff1681518110615dbf57615dbf619cd5565b60200260200101819052506040518060400160405280600e81526020017f2d2d636f6e747261637450617468000000000000000000000000000000000000815250828280615e0c90619e42565b935060ff1681518110615e2157615e21619cd5565b602090810291909101015287518282615e3981619e42565b935060ff1681518110615e4e57615e4e619cd5565b60200260200101819052506040518060400160405280600981526020017f2d2d636861696e49640000000000000000000000000000000000000000000000815250828280615e9b90619e42565b935060ff1681518110615eb057615eb0619cd5565b6020026020010181905250615ec446617427565b8282615ecf81619e42565b935060ff1681518110615ee457615ee4619cd5565b60200260200101819052506040518060400160405280600f81526020017f2d2d6275696c64496e666f46696c650000000000000000000000000000000000815250828280615f3190619e42565b935060ff1681518110615f4657615f46619cd5565b602002602001018190525086828280615f5e90619e42565b935060ff1681518110615f7357615f73619cd5565b602090810291909101015285511561609a5760408051808201909152601581527f2d2d636f6e7374727563746f7242797465636f6465000000000000000000000060208201528282615fc481619e42565b935060ff1681518110615fd957615fd9619cd5565b60209081029190910101526040517f71aad10d0000000000000000000000000000000000000000000000000000000081526001600160a01b038416906371aad10d90616029908990600401619854565b600060405180830381865afa158015616046573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261606e91908101906196cb565b828261607981619e42565b935060ff168151811061608e5761608e619cd5565b60200260200101819052505b84602001511561616a5760408051808201909152601281527f2d2d766572696679536f75726365436f64650000000000000000000000000000602082015282826160e381619e42565b935060ff16815181106160f8576160f8619cd5565b60200260200101819052506040518060400160405280600581526020017f66616c736500000000000000000000000000000000000000000000000000000081525082828061614590619e42565b935060ff168151811061615a5761615a619cd5565b6020026020010181905250616331565b6161a2615a478660a0015160408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6162355760408051808201909152600d81527f2d2d6c6963656e73655479706500000000000000000000000000000000000000602082015282826161e581619e42565b935060ff16815181106161fa576161fa619cd5565b60200260200101819052508460a0015160405160200161621a9190619d04565b60405160208183030381529060405282828061614590619e42565b8460c0015115801561627857506040808901518151808301835260008082526020918201528251808401909352815183529081019082015261627690511590565b155b156163315760408051808201909152600d81527f2d2d6c6963656e73655479706500000000000000000000000000000000000000602082015282826162bc81619e42565b935060ff16815181106162d1576162d1619cd5565b60200260200101819052506162e5886174c7565b6040516020016162f59190619d04565b60405160208183030381529060405282828061631090619e42565b935060ff168151811061632557616325619cd5565b60200260200101819052505b6040808601518151808301835260008082526020918201528251808401909352815183529081019082015261636590511590565b6163fa5760408051808201909152600b81527f2d2d72656c617965724964000000000000000000000000000000000000000000602082015282826163a881619e42565b935060ff16815181106163bd576163bd619cd5565b602002602001018190525084604001518282806163d990619e42565b935060ff16815181106163ee576163ee619cd5565b60200260200101819052505b60608501511561651b5760408051808201909152600681527f2d2d73616c7400000000000000000000000000000000000000000000000000006020820152828261644381619e42565b935060ff168151811061645857616458619cd5565b602090810291909101015260608501516040517fb11a19e800000000000000000000000000000000000000000000000000000000815260048101919091526001600160a01b0384169063b11a19e890602401600060405180830381865afa1580156164c7573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526164ef91908101906196cb565b82826164fa81619e42565b935060ff168151811061650f5761650f619cd5565b60200260200101819052505b60e085015151156165c25760408051808201909152600a81527f2d2d6761734c696d6974000000000000000000000000000000000000000000006020820152828261656581619e42565b935060ff168151811061657a5761657a619cd5565b60200260200101819052506165968560e0015160000151617427565b82826165a181619e42565b935060ff16815181106165b6576165b6619cd5565b60200260200101819052505b60e0850151602001511561666c5760408051808201909152600a81527f2d2d6761735072696365000000000000000000000000000000000000000000006020820152828261660f81619e42565b935060ff168151811061662457616624619cd5565b60200260200101819052506166408560e0015160200151617427565b828261664b81619e42565b935060ff168151811061666057616660619cd5565b60200260200101819052505b60e085015160400151156167165760408051808201909152600e81527f2d2d6d6178466565506572476173000000000000000000000000000000000000602082015282826166b981619e42565b935060ff16815181106166ce576166ce619cd5565b60200260200101819052506166ea8560e0015160400151617427565b82826166f581619e42565b935060ff168151811061670a5761670a619cd5565b60200260200101819052505b60e085015160600151156167c05760408051808201909152601681527f2d2d6d61785072696f72697479466565506572476173000000000000000000006020820152828261676381619e42565b935060ff168151811061677857616778619cd5565b60200260200101819052506167948560e0015160600151617427565b828261679f81619e42565b935060ff16815181106167b4576167b4619cd5565b60200260200101819052505b60008160ff1667ffffffffffffffff8111156167de576167de619603565b60405190808252806020026020018201604052801561681157816020015b60608152602001906001900390816167fc5790505b50905060005b8260ff168160ff16101561686a57838160ff168151811061683a5761683a619cd5565b6020026020010151828260ff168151811061685757616857619cd5565b6020908102919091010152600101616817565b5093505050505b949350505050565b6168a06040518060600160405280600060030b815260200160608152602001606081525090565b60408051808201825260048082527f6261736800000000000000000000000000000000000000000000000000000000602083015291517fd145736c000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d92600091849163d145736c9161692691869101619ecc565b600060405180830381865afa158015616943573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261696b91908101906196cb565b905060006169798683617fb6565b90506000846001600160a01b031663f45c1ce7836040518263ffffffff1660e01b81526004016169a991906192f3565b6000604051808303816000875af11580156169c8573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526169f09190810190619f13565b805190915060030b15801590616a095750602081015151155b8015616a185750604081015151155b156159f25781600081518110616a3057616a30619cd5565b602002602001015160405160200161504b9190619fc9565b60606000616a7d8560408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600080825260209182015281518083019092528651825280870190820152909150616ab49082905b9061810b565b15616c11576000616b3182616b2b84616b25616af78a60408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6040805180820182526000808252602091820152815180830190925282518252918201519181019190915290565b90618132565b90618194565b604080518082018252600181527f0a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152909150616b9590829061810b565b15616bff57604080518082018252600181527f0a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616bfc905b8290618219565b90505b616c088161823f565b92505050614f78565b8215616c2a57848460405160200161504b92919061a1b5565b5050604080516020810190915260008152614f78565b509392505050565b6000808251602084016000f09392505050565b8160a0015115616c6a57505050565b6000616c778484846182a8565b90506000616c8482616879565b602081015181519192509060030b158015616d205750604080518082018252600781527f535543434553530000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616d2090604080518082018252600080825260209182015281518083019092528451825280850190820152616aae565b15616d2d57505050505050565b60408201515115616d4d57816040015160405160200161504b919061a25c565b8060405160200161504b919061a2ba565b60606000616d938360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600481527f2e736f6c0000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152909150616df8905b82906173c6565b15616e6757604080518082018252600481527f2e736f6c0000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152614f7890616e62908390618843565b61823f565b604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616ec9905b82906188cd565b600103616f9657604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616f2f90616bf5565b50604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152614f7890616e62905b8390618219565b604080518082018252600581527f2e6a736f6e00000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616ff590616df1565b1561712c57604080518082018252600181527f2f0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082018190528451808601909552925184528301529061705d908390618967565b9050600081600183516170709190619779565b8151811061708057617080619cd5565b60200260200101519050617123616e626170f66040518060400160405280600581526020017f2e6a736f6e00000000000000000000000000000000000000000000000000000081525060408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b60408051808201825260008082526020918201528151808301909252855182528086019082015290618843565b95945050505050565b8260405160200161504b919061a325565b50919050565b606060006171788360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600481527f2e736f6c00000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201529091506171da90616df1565b156171e857614f788161823f565b604080518082018252600181527f3a000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261724790616ec2565b6001036172b157604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152614f7890616e6290616f8f565b604080518082018252600581527f2e6a736f6e0000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261731090616df1565b1561712c57604080518082018252600181527f2f00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820181905284518086019095529251845283015290617378908390618967565b90506001815111156173b45780600282516173939190619779565b815181106173a3576173a3619cd5565b602002602001015192505050919050565b508260405160200161504b919061a325565b8051825160009111156173db57506000614dc3565b815183516020850151600092916173f191619766565b6173fb9190619779565b905082602001518103617412576001915050614dc3565b82516020840151819020912014905092915050565b6060600061743483618a0c565b600101905060008167ffffffffffffffff81111561745457617454619603565b6040519080825280601f01601f19166020018201604052801561747e576020820181803683370190505b5090508181016020015b600019017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a850494508461748857509392505050565b604081810151815180830183526000808252602091820181905283518085018552835181529282018383015283518085018552600a81527f554e4c4943454e5345440000000000000000000000000000000000000000000081840190815285518087018752838152840192909252845180860190955251845290830152606091617553905b8290618aee565b1561759357505060408051808201909152600481527f4e6f6e65000000000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600981527f556e6c6963656e73650000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526175f29061754c565b1561763257505060408051808201909152600981527f556e6c6963656e736500000000000000000000000000000000000000000000006020820152919050565b604080518082018252600381527f4d49540000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526176919061754c565b156176d157505060408051808201909152600381527f4d495400000000000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f47504c2d322e302d6f6e6c790000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526177309061754c565b806177955750604080518082018252601081527f47504c2d322e302d6f722d6c6174657200000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526177959061754c565b156177d557505060408051808201909152600981527f474e552047504c763200000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f47504c2d332e302d6f6e6c790000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526178349061754c565b806178995750604080518082018252601081527f47504c2d332e302d6f722d6c6174657200000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526178999061754c565b156178d957505060408051808201909152600981527f474e552047504c763300000000000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4c47504c2d322e312d6f6e6c7900000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526179389061754c565b8061799d5750604080518082018252601181527f4c47504c2d322e312d6f722d6c617465720000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261799d9061754c565b156179dd57505060408051808201909152600c81527f474e55204c47504c76322e3100000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4c47504c2d332e302d6f6e6c790000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617a3c9061754c565b80617aa15750604080518082018252601181527f4c47504c2d332e302d6f722d6c6174657200000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617aa19061754c565b15617ae157505060408051808201909152600a81527f474e55204c47504c7633000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f4253442d322d436c61757365000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617b409061754c565b15617b8057505060408051808201909152600c81527f4253442d322d436c6175736500000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f4253442d332d436c61757365000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617bdf9061754c565b15617c1f57505060408051808201909152600c81527f4253442d332d436c6175736500000000000000000000000000000000000000006020820152919050565b604080518082018252600781527f4d504c2d322e300000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617c7e9061754c565b15617cbe57505060408051808201909152600781527f4d504c2d322e30000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600781527f4f534c2d332e300000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617d1d9061754c565b15617d5d57505060408051808201909152600781527f4f534c2d332e30000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600a81527f4170616368652d322e300000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617dbc9061754c565b15617dfc57505060408051808201909152600a81527f4170616368652d322e30000000000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4147504c2d332e302d6f6e6c790000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617e5b9061754c565b80617ec05750604080518082018252601181527f4147504c2d332e302d6f722d6c6174657200000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617ec09061754c565b15617f0057505060408051808201909152600a81527f474e55204147504c7633000000000000000000000000000000000000000000006020820152919050565b604080518082018252600881527f4255534c2d312e3100000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617f5f9061754c565b15617f9f57505060408051808201909152600781527f42534c20312e31000000000000000000000000000000000000000000000000006020820152919050565b6040808401518451915161504b929060200161a403565b60608060005b84518110156180415781858281518110617fd857617fd8619cd5565b6020026020010151604051602001617ff19291906198bc565b6040516020818303038152906040529150600185516180109190619779565b81146180395781604051602001618027919061a56c565b60405160208183030381529060405291505b600101617fbc565b5060408051600380825260808201909252600091816020015b606081526020019060019003908161805a579050509050838160008151811061808557618085619cd5565b60200260200101819052506040518060400160405280600281526020017f2d63000000000000000000000000000000000000000000000000000000000000815250816001815181106180d9576180d9619cd5565b602002602001018190525081816002815181106180f8576180f8619cd5565b6020908102919091010152949350505050565b60208083015183518351928401516000936181299291849190618b02565b14159392505050565b604080518082019091526000808252602082015260006181648460000151856020015185600001518660200151618c13565b90508360200151816181769190619779565b84518590618185908390619779565b90525060208401525090919050565b60408051808201909152600080825260208201528151835110156181b9575081614dc3565b60208083015190840151600191146181e05750815160208481015190840151829020919020145b8015618211578251845185906181f7908390619779565b905250825160208501805161820d908390619766565b9052505b509192915050565b6040805180820190915260008082526020820152618238838383618d33565b5092915050565b60606000826000015167ffffffffffffffff81111561826057618260619603565b6040519080825280601f01601f19166020018201604052801561828a576020820181803683370190505b50905060006020820190506182388185602001518660000151618dde565b606060006182b4615271565b6040805160ff808252612000820190925291925060009190816020015b60608152602001906001900390816182d157905050905060006040518060400160405280600381526020017f6e7078000000000000000000000000000000000000000000000000000000000081525082828061832c90619e42565b935060ff168151811061834157618341619cd5565b60200260200101819052506040518060400160405280600781526020017f5e312e33322e3300000000000000000000000000000000000000000000000000815250604051602001618392919061a5ad565b6040516020818303038152906040528282806183ad90619e42565b935060ff16815181106183c2576183c2619cd5565b60200260200101819052506040518060400160405280600881526020017f76616c696461746500000000000000000000000000000000000000000000000081525082828061840f90619e42565b935060ff168151811061842457618424619cd5565b6020026020010181905250826040516020016184409190619d70565b60405160208183030381529060405282828061845b90619e42565b935060ff168151811061847057618470619cd5565b60200260200101819052506040518060400160405280600a81526020017f2d2d636f6e7472616374000000000000000000000000000000000000000000008152508282806184bd90619e42565b935060ff16815181106184d2576184d2619cd5565b60200260200101819052506184e78784618e58565b82826184f281619e42565b935060ff168151811061850757618507619cd5565b6020908102919091010152855151156185b35760408051808201909152600b81527f2d2d7265666572656e63650000000000000000000000000000000000000000006020820152828261855981619e42565b935060ff168151811061856e5761856e619cd5565b6020026020010181905250618587866000015184618e58565b828261859281619e42565b935060ff16815181106185a7576185a7619cd5565b60200260200101819052505b8560800151156186215760408051808201909152601881527f2d2d756e73616665536b697053746f72616765436865636b0000000000000000602082015282826185fc81619e42565b935060ff168151811061861157618611619cd5565b6020026020010181905250618687565b84156186875760408051808201909152601281527f2d2d726571756972655265666572656e636500000000000000000000000000006020820152828261866681619e42565b935060ff168151811061867b5761867b619cd5565b60200260200101819052505b604086015151156187235760408051808201909152600d81527f2d2d756e73616665416c6c6f7700000000000000000000000000000000000000602082015282826186d181619e42565b935060ff16815181106186e6576186e6619cd5565b6020026020010181905250856040015182828061870290619e42565b935060ff168151811061871757618717619cd5565b60200260200101819052505b85606001511561878d5760408051808201909152601481527f2d2d756e73616665416c6c6f7752656e616d65730000000000000000000000006020820152828261876c81619e42565b935060ff168151811061878157618781619cd5565b60200260200101819052505b60008160ff1667ffffffffffffffff8111156187ab576187ab619603565b6040519080825280602002602001820160405280156187de57816020015b60608152602001906001900390816187c95790505b50905060005b8260ff168160ff16101561883757838160ff168151811061880757618807619cd5565b6020026020010151828260ff168151811061882457618824619cd5565b60209081029190910101526001016187e4565b50979650505050505050565b6040805180820190915260008082526020820152815183511015618868575081614dc3565b8151835160208501516000929161887e91619766565b6188889190619779565b602084015190915060019082146188a9575082516020840151819020908220145b80156188c4578351855186906188c0908390619779565b9052505b50929392505050565b60008082600001516188f18560000151866020015186600001518760200151618c13565b6188fb9190619766565b90505b8351602085015161890f9190619766565b8111618238578161891f8161a5f2565b925050826000015161895685602001518361893a9190619779565b86516189469190619779565b8386600001518760200151618c13565b6189609190619766565b90506188fe565b6060600061897584846188cd565b618980906001619766565b67ffffffffffffffff81111561899857618998619603565b6040519080825280602002602001820160405280156189cb57816020015b60608152602001906001900390816189b65790505b50905060005b8151811015616c40576189e7616e628686618219565b8282815181106189f9576189f9619cd5565b60209081029190910101526001016189d1565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310618a55577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310618a81576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc100008310618a9f57662386f26fc10000830492506010015b6305f5e1008310618ab7576305f5e100830492506008015b6127108310618acb57612710830492506004015b60648310618add576064830492506002015b600a8310614dc35760010192915050565b6000618afa8383618e98565b159392505050565b600080858411618c095760208411618bb55760008415618b4d576001618b29866020619779565b618b3490600861a60c565b618b3f90600261a70a565b618b499190619779565b1990505b8351811685618b5c8989619766565b618b669190619779565b805190935082165b818114618ba057878411618b885787945050505050616871565b83618b928161a716565b945050828451169050618b6e565b618baa8785619766565b945050505050616871565b838320618bc28588619779565b618bcc9087619766565b91505b858210618c0757848220808203618bf457618bea8684619766565b9350505050616871565b618bff600184619779565b925050618bcf565b505b5092949350505050565b60008381868511618d1e5760208511618ccd5760008515618c5f576001618c3b876020619779565b618c4690600861a60c565b618c5190600261a70a565b618c5b9190619779565b1990505b84518116600087618c708b8b619766565b618c7a9190619779565b855190915083165b828114618cbf57818610618ca757618c9a8b8b619766565b9650505050505050616871565b85618cb18161a5f2565b965050838651169050618c82565b859650505050505050616871565b508383206000905b618cdf8689619779565b8211618d1c57858320808203618cfb5783945050505050616871565b618d06600185619766565b9350508180618d149061a5f2565b925050618cd5565b505b618d288787619766565b979650505050505050565b60408051808201909152600080825260208201526000618d658560000151866020015186600001518760200151618c13565b602080870180519186019190915251909150618d819082619779565b835284516020860151618d949190619766565b8103618da35760008552618dd5565b83518351618db19190619766565b85518690618dc0908390619779565b9052508351618dcf9082619766565b60208601525b50909392505050565b60208110618e165781518352618df5602084619766565b9250618e02602083619766565b9150618e0f602082619779565b9050618dde565b6000198115618e45576001618e2c836020619779565b618e389061010061a70a565b618e429190619779565b90505b9151835183169219169190911790915250565b60606000618e668484615344565b8051602080830151604051939450618e809390910161a72d565b60405160208183030381529060405291505092915050565b8151815160009190811115618eab575081515b6020808501519084015160005b83811015618f645782518251808214618f34576000196020871015618f1357600184618ee5896020619779565b618eef9190619766565b618efa90600861a60c565b618f0590600261a70a565b618f0f9190619779565b1990505b8181168382168181039114618f31579750614dc39650505050505050565b50505b618f3f602086619766565b9450618f4c602085619766565b93505050602081618f5d9190619766565b9050618eb8565b50845186516159f2919061a785565b610b678061a7a683390190565b61106f8061b30d83390190565b611bb98061c37c83390190565b6040518060e00160405280606081526020016060815260200160608152602001600015158152602001600015158152602001600015158152602001618fdd618fe2565b905290565b60405180610100016040528060001515815260200160001515815260200160608152602001600080191681526020016060815260200160608152602001600015158152602001618fdd6040518060800160405280600081526020016000815260200160008152602001600081525090565b602080825282518282018190526000918401906040840190835b818110156190945783516001600160a01b031683526020938401939092019160010161906d565b509095945050505050565b60005b838110156190ba5781810151838201526020016190a2565b50506000910152565b600081518084526190db81602086016020860161909f565b601f01601f19169290920160200192915050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b828110156191eb577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452815180516001600160a01b03168652602090810151604082880181905281519088018190529101906060600582901b88018101919088019060005b818110156191d1577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa08a85030183526191bb8486516190c3565b6020958601959094509290920191600101619181565b509197505050602094850194929092019150600101619117565b50929695505050505050565b600081518084526020840193506020830160005b8281101561924b5781517fffffffff000000000000000000000000000000000000000000000000000000001686526020958601959091019060010161920b565b5093949350505050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b828110156191eb577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc087860301845281518051604087526192c160408801826190c3565b90506020820151915086810360208801526192dc81836191f7565b96505050602093840193919091019060010161927d565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b828110156191eb577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08786030184526193558583516190c3565b9450602093840193919091019060010161931b565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b828110156191eb577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc087860301845281516001600160a01b03815116865260208101519050604060208701526193eb60408701826191f7565b9550506020938401939190910190600101619392565b60006020828403121561941357600080fd5b81518015158114614f7857600080fd5b80516001600160a01b038116811461943a57600080fd5b919050565b60006020828403121561945157600080fd5b614f7882619423565b610100815260056101008201527f544f4b454e000000000000000000000000000000000000000000000000000000610120820152610140602082015260036101408201527f544b4e000000000000000000000000000000000000000000000000000000000061016082015260006101808201905060ff8816604083015286606083015260038610619514577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b8560808301528460a083015261953560c08301856001600160a01b03169052565b6001600160a01b03831660e0830152979650505050505050565b60006020828403121561956157600080fd5b5051919050565b600181811c9082168061957c57607f821691505b60208210810361713d577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600080604083850312156195c857600080fd5b6195d183619423565b6020939093015192949293505050565b6040815260006195f460408301856190c3565b90508260208301529392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040516060810167ffffffffffffffff8111828210171561965557619655619603565b60405290565b60008067ffffffffffffffff84111561967657619676619603565b50604051601f19601f85018116603f0116810181811067ffffffffffffffff821117156196a5576196a5619603565b6040528381529050808284018510156196bd57600080fd5b616c4084602083018561909f565b6000602082840312156196dd57600080fd5b815167ffffffffffffffff8111156196f457600080fd5b8201601f8101841361970557600080fd5b614dbf8482516020840161965b565b60006020828403121561972657600080fd5b815160ff81168114614f7857600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b80820180821115614dc357614dc3619737565b81810381811115614dc357614dc3619737565b60408152600061979f60408301856190c3565b8281036020840152614f7481856190c3565b6001600160a01b038316815260406020820152600061687160408301846190c3565b7f4661696c656420746f206465706c6f7920636f6e74726163742000000000000081526000835161980b81601a85016020880161909f565b7f3a20000000000000000000000000000000000000000000000000000000000000601a91840191820152835161984881601c84016020880161909f565b01601c01949350505050565b602081526000614f7860208301846190c3565b600082601f83011261987857600080fd5b614f788383516020850161965b565b60006020828403121561989957600080fd5b815167ffffffffffffffff8111156198b057600080fd5b614dbf84828501619867565b600083516198ce81846020880161909f565b8351908301906198e281836020880161909f565b01949350505050565b7f4661696c656420746f206465706c6f7920636f6e74726163742000000000000081526000835161992381601a85016020880161909f565b7f207573696e6720636f6e7374727563746f722064617461202200000000000000601a91840191820152835161996081603384016020880161909f565b7f220000000000000000000000000000000000000000000000000000000000000060339290910191820152603401949350505050565b60408152600b60408201527f464f554e4452595f4f55540000000000000000000000000000000000000000006060820152608060208201526000614f7860808301846190c3565b600085516199ef818460208a0161909f565b7f2f000000000000000000000000000000000000000000000000000000000000009083019081528551619a29816001840160208a0161909f565b7f2f00000000000000000000000000000000000000000000000000000000000000600192909101918201528451619a6781600284016020890161909f565b6001818301019150507f2f0000000000000000000000000000000000000000000000000000000000000060018201528351619aa981600284016020880161909f565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600292909101918201526007019695505050505050565b604081526000619af460408301846190c3565b8281036020840152600481527f2e6173740000000000000000000000000000000000000000000000000000000060208201526040810191505092915050565b7f436f756c64206e6f742066696e642041535420696e2061727469666163742000815260008251619b6b81601f85016020870161909f565b7f2e205365742060617374203d20747275656020696e20666f756e6472792e746f601f9390910192830152507f6d6c000000000000000000000000000000000000000000000000000000000000603f820152604101919050565b604081526000619bd860408301846190c3565b8281036020840152601181527f2e6173742e6162736f6c7574655061746800000000000000000000000000000060208201526040810191505092915050565b604081526000619c2a60408301846190c3565b8281036020840152600c81527f2e6173742e6c6963656e7365000000000000000000000000000000000000000060208201526040810191505092915050565b7f2e6d657461646174612e736f75726365732e5b27000000000000000000000000815260008251619ca181601485016020870161909f565b7f275d2e6b656363616b32353600000000000000000000000000000000000000006014939091019283015250602001919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f2200000000000000000000000000000000000000000000000000000000000000815260008251619d3c81600185016020870161909f565b7f22000000000000000000000000000000000000000000000000000000000000006001939091019283015250600201919050565b60008251619d8281846020870161909f565b7f2f6275696c642d696e666f000000000000000000000000000000000000000000920191825250600b01919050565b7f436f756c64206e6f742066696e64206275696c642d696e666f2066696c65207781527f697468206d61746368696e6720736f7572636520636f6465206861736820666f60208201527f7220636f6e747261637420000000000000000000000000000000000000000000604082015260008251619e3581604b85016020870161909f565b91909101604b0192915050565b600060ff821660ff8103619e5857619e58619737565b60010192915050565b7f406f70656e7a657070656c696e2f646566656e6465722d6465706c6f792d636c81527f69656e742d636c69400000000000000000000000000000000000000000000000602082015260008251619ebf81602985016020870161909f565b9190910160290192915050565b60408152601660408201527f4f50454e5a455050454c494e5f424153485f50415448000000000000000000006060820152608060208201526000614f7860808301846190c3565b600060208284031215619f2557600080fd5b815167ffffffffffffffff811115619f3c57600080fd5b820160608185031215619f4e57600080fd5b619f56619632565b81518060030b8114619f6757600080fd5b8152602082015167ffffffffffffffff811115619f8357600080fd5b619f8f86828501619867565b602083015250604082015167ffffffffffffffff811115619faf57600080fd5b619fbb86828501619867565b604083015250949350505050565b7f4661696c656420746f2072756e206261736820636f6d6d616e6420776974682081527f220000000000000000000000000000000000000000000000000000000000000060208201526000825161a02781602185016020870161909f565b7f222e20496620796f7520617265207573696e672057696e646f77732c2073657460219390910192830152507f20746865204f50454e5a455050454c494e5f424153485f5041544820656e766960418201527f726f6e6d656e74207661726961626c6520746f207468652066756c6c7920717560618201527f616c69666965642070617468206f66207468652062617368206578656375746160818201527f626c652e20466f72206578616d706c652c20696620796f75206172652075736960a18201527f6e672047697420666f722057696e646f77732c206164642074686520666f6c6c60c18201527f6f77696e67206c696e6520696e20746865202e656e762066696c65206f66207960e18201527f6f75722070726f6a65637420287573696e6720666f727761726420736c6173686101018201527f6573293a0a4f50454e5a455050454c494e5f424153485f504154483d22433a2f6101218201527f50726f6772616d2046696c65732f4769742f62696e2f6261736822000000000061014182015261015c01919050565b7f4661696c656420746f2066696e64206c696e652077697468207072656669782081527f270000000000000000000000000000000000000000000000000000000000000060208201526000835161a21381602185016020880161909f565b7f2720696e206f75747075743a2000000000000000000000000000000000000000602191840191820152835161a25081602e84016020880161909f565b01602e01949350505050565b7f4661696c656420746f2072756e2075706772616465207361666574792076616c81527f69646174696f6e3a200000000000000000000000000000000000000000000000602082015260008251619ebf81602985016020870161909f565b7f55706772616465207361666574792076616c69646174696f6e206661696c656481527f3a0a00000000000000000000000000000000000000000000000000000000000060208201526000825161a31881602285016020870161909f565b9190910160220192915050565b7f436f6e7472616374206e616d652000000000000000000000000000000000000081526000825161a35d81600e85016020870161909f565b7f206d75737420626520696e2074686520666f726d6174204d79436f6e74726163600e9390910192830152507f742e736f6c3a4d79436f6e7472616374206f72204d79436f6e74726163742e73602e8201527f6f6c206f72206f75742f4d79436f6e74726163742e736f6c2f4d79436f6e7472604e8201527f6163742e6a736f6e000000000000000000000000000000000000000000000000606e820152607601919050565b7f53504458206c6963656e7365206964656e74696669657220000000000000000081526000835161a43b81601885016020880161909f565b7f20696e2000000000000000000000000000000000000000000000000000000000601891840191820152835161a47881601c84016020880161909f565b7f20646f6573206e6f74206c6f6f6b206c696b65206120737570706f7274656420601c92909101918201527f6c6963656e736520666f7220626c6f636b206578706c6f726572207665726966603c8201527f69636174696f6e2e205573652074686520606c6963656e73655479706560206f605c8201527f7074696f6e20746f20737065636966792061206c6963656e736520747970652c607c8201527f206f7220736574207468652060736b69704c6963656e73655479706560206f70609c8201527f74696f6e20746f2060747275656020746f20736b69702e00000000000000000060bc82015260d301949350505050565b6000825161a57e81846020870161909f565b7f2000000000000000000000000000000000000000000000000000000000000000920191825250600101919050565b7f406f70656e7a657070656c696e2f75706772616465732d636f7265400000000081526000825161a5e581601c85016020870161909f565b91909101601c0192915050565b6000600019820361a6055761a605619737565b5060010190565b8082028115828204841417614dc357614dc3619737565b6001815b600184111561a65e5780850481111561a6425761a642619737565b600184161561a65057908102905b60019390931c92800261a627565b935093915050565b60008261a67557506001614dc3565b8161a68257506000614dc3565b816001811461a698576002811461a6a25761a6be565b6001915050614dc3565b60ff84111561a6b35761a6b3619737565b50506001821b614dc3565b5060208310610133831016604e8410600b841016171561a6e1575081810a614dc3565b61a6ee600019848461a623565b806000190482111561a7025761a702619737565b029392505050565b6000614f78838361a666565b60008161a7255761a725619737565b506000190190565b6000835161a73f81846020880161909f565b7f3a00000000000000000000000000000000000000000000000000000000000000908301908152835161a77981600184016020880161909f565b01600101949350505050565b81810360008312801583831316838312821617156182385761823861973756fe60c0604052600d60809081526c2bb930b83832b21022ba3432b960991b60a05260009061002c9082610114565b506040805180820190915260048152630ae8aa8960e31b60208201526001906100559082610114565b506002805460ff1916601217905534801561006f57600080fd5b506101d2565b634e487b7160e01b600052604160045260246000fd5b600181811c9082168061009f57607f821691505b6020821081036100bf57634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111561010f57806000526020600020601f840160051c810160208510156100ec5750805b601f840160051c820191505b8181101561010c57600081556001016100f8565b50505b505050565b81516001600160401b0381111561012d5761012d610075565b6101418161013b845461008b565b846100c5565b6020601f821160018114610175576000831561015d5750848201515b600019600385901b1c1916600184901b17845561010c565b600084815260208120601f198516915b828110156101a55787850151825560209485019460019092019101610185565b50848210156101c35786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b610986806101e16000396000f3fe6080604052600436106100c05760003560e01c8063313ce56711610074578063a9059cbb1161004e578063a9059cbb146101fa578063d0e30db01461021a578063dd62ed3e1461022257600080fd5b8063313ce5671461018c57806370a08231146101b857806395d89b41146101e557600080fd5b806318160ddd116100a557806318160ddd1461012f57806323b872dd1461014c5780632e1a7d4d1461016c57600080fd5b806306fdde03146100d4578063095ea7b3146100ff57600080fd5b366100cf576100cd61025a565b005b600080fd5b3480156100e057600080fd5b506100e96102b5565b6040516100f69190610745565b60405180910390f35b34801561010b57600080fd5b5061011f61011a3660046107da565b610343565b60405190151581526020016100f6565b34801561013b57600080fd5b50475b6040519081526020016100f6565b34801561015857600080fd5b5061011f610167366004610804565b6103bd565b34801561017857600080fd5b506100cd610187366004610841565b610647565b34801561019857600080fd5b506002546101a69060ff1681565b60405160ff90911681526020016100f6565b3480156101c457600080fd5b5061013e6101d336600461085a565b60036020526000908152604090205481565b3480156101f157600080fd5b506100e9610724565b34801561020657600080fd5b5061011f6102153660046107da565b610731565b6100cd61025a565b34801561022e57600080fd5b5061013e61023d366004610875565b600460209081526000928352604080842090915290825290205481565b33600090815260036020526040812080543492906102799084906108d7565b909155505060405134815233907fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c9060200160405180910390a2565b600080546102c2906108ea565b80601f01602080910402602001604051908101604052809291908181526020018280546102ee906108ea565b801561033b5780601f106103105761010080835404028352916020019161033b565b820191906000526020600020905b81548152906001019060200180831161031e57829003601f168201915b505050505081565b33600081815260046020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925906103ab9086815260200190565b60405180910390a35060015b92915050565b73ffffffffffffffffffffffffffffffffffffffff831660009081526003602052604081205482111561042b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600060248201526044015b60405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff841633148015906104a1575073ffffffffffffffffffffffffffffffffffffffff841660009081526004602090815260408083203384529091529020547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff14155b156105605773ffffffffffffffffffffffffffffffffffffffff8416600090815260046020908152604080832033845290915290205482111561051a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526020600482015260006024820152604401610422565b73ffffffffffffffffffffffffffffffffffffffff841660009081526004602090815260408083203384529091528120805484929061055a90849061093d565b90915550505b73ffffffffffffffffffffffffffffffffffffffff84166000908152600360205260408120805484929061059590849061093d565b909155505073ffffffffffffffffffffffffffffffffffffffff8316600090815260036020526040812080548492906105cf9084906108d7565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161063591815260200190565b60405180910390a35060019392505050565b3360009081526003602052604090205481111561069a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526020600482015260006024820152604401610422565b33600090815260036020526040812080548392906106b990849061093d565b9091555050604051339082156108fc029083906000818181858888f193505050501580156106eb573d6000803e3d6000fd5b5060405181815233907f7fcf532c15f0a6db0bd6d0e038bea71d30d808c7d98cb3bf7268a95bf5081b659060200160405180910390a250565b600180546102c2906108ea565b600061073e3384846103bd565b9392505050565b602081526000825180602084015260005b818110156107735760208186018101516040868401015201610756565b5060006040828501015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011684010191505092915050565b803573ffffffffffffffffffffffffffffffffffffffff811681146107d557600080fd5b919050565b600080604083850312156107ed57600080fd5b6107f6836107b1565b946020939093013593505050565b60008060006060848603121561081957600080fd5b610822846107b1565b9250610830602085016107b1565b929592945050506040919091013590565b60006020828403121561085357600080fd5b5035919050565b60006020828403121561086c57600080fd5b61073e826107b1565b6000806040838503121561088857600080fd5b610891836107b1565b915061089f602084016107b1565b90509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b808201808211156103b7576103b76108a8565b600181811c908216806108fe57607f821691505b602082108103610937577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b818103818111156103b7576103b76108a856fea264697066735822122008d7fc4e09519c5dd9f356b03596f6829a151d0bc7682533f9ceab4e459f5ee264736f6c634300081a003360c060405234801561001057600080fd5b5060405161106f38038061106f83398101604081905261002f916100db565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461006357604051632b2add3d60e01b815260040160405180910390fd5b600380546001600160a01b0319166001600160a01b0385811691909117909155828116608052811660a0526040517f80699e81136d69cb8367ad52a994e25c722a86da654b561d0c14b61a777e7ac590600090a150505061011e565b80516001600160a01b03811681146100d657600080fd5b919050565b6000806000606084860312156100f057600080fd5b6100f9846100bf565b9250610107602085016100bf565b9150610115604085016100bf565b90509250925092565b60805160a051610f2561014a60003960006101e50152600081816102b9015261045b0152610f256000f3fe608060405234801561001057600080fd5b50600436106100f55760003560e01c806397770dff11610097578063c63585cc11610066578063c63585cc14610273578063d7fd7afb14610286578063d936a012146102b4578063ee2815ba146102db57600080fd5b806397770dff1461021a578063a7cb05071461022d578063c39aca3714610240578063c62178ac1461025357600080fd5b8063513a9c05116100d3578063513a9c051461018a578063569541b9146101c0578063842da36d146101e057806391dd645f1461020757600080fd5b80630be15547146100fa5780631f0e251b1461015a5780633ce4a5bc1461016f575b600080fd5b610130610108366004610bd1565b60016020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b61016d610168366004610c13565b6102ee565b005b61013073735b14bb79463307aacbed86daf3322b1e6226ab81565b610130610198366004610bd1565b60026020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b6003546101309073ffffffffffffffffffffffffffffffffffffffff1681565b6101307f000000000000000000000000000000000000000000000000000000000000000081565b61016d610215366004610c35565b610402565b61016d610228366004610c13565b610526565b61016d61023b366004610c61565b610633565b61016d61024e366004610c83565b6106ce565b6004546101309073ffffffffffffffffffffffffffffffffffffffff1681565b610130610281366004610d53565b6108cd565b6102a6610294366004610bd1565b60006020819052908152604090205481565b604051908152602001610151565b6101307f000000000000000000000000000000000000000000000000000000000000000081565b61016d6102e9366004610c35565b610a02565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461033b576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116610388576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600480547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527f3ade88e3922d64780e1bf4460d364c2970b69da813f9c0c07a1c187b5647636c906020015b60405180910390a150565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461044f576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600354600090610497907f00000000000000000000000000000000000000000000000000000000000000009073ffffffffffffffffffffffffffffffffffffffff16846108cd565b60008481526002602090815260409182902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff85169081179091558251878152918201529192507f0ecec485166da6139b13bb7e033e9446e2d35348e80ebf1180d4afe2dba1704e910160405180910390a1505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610573576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff81166105c0576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527fdba79d534382d1a8ae108e4c8ecb27c6ae42ab8b91d44eedf88bd329f3868d5e906020016103f7565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610680576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000828152602081815260409182902083905581518481529081018390527f49f492222906ac486c3c1401fa545626df1f0c0e5a77a05597ea2ed66af9850d91015b60405180910390a15050565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461071b576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff831673735b14bb79463307aacbed86daf3322b1e6226ab1480610768575073ffffffffffffffffffffffffffffffffffffffff831630145b1561079f576040517f82d5d76a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f47e7ef2400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152602482018690528616906347e7ef24906044016020604051808303816000875af1158015610814573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108389190610d96565b506040517fde43156e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84169063de43156e906108939089908990899088908890600401610e01565b600060405180830381600087803b1580156108ad57600080fd5b505af11580156108c1573d6000803e3d6000fd5b50505050505050505050565b60008060006108dc8585610ad3565b6040517fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606084811b8216602084015283901b16603482015291935091508690604801604051602081830303815290604052805190602001206040516020016109c29291907fff00000000000000000000000000000000000000000000000000000000000000815260609290921b7fffffffffffffffffffffffffffffffffffffffff00000000000000000000000016600183015260158201527f96e8ac4277198ff8b6f785478aa9a39f403cb768dd02cbee326c3e7da348845f603582015260550190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291905280516020909101209695505050505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610a4f576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008281526001602090815260409182902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff85169081179091558251858152918201527fd1b36d30f6248e97c473b4d1348ca164a4ef6759022f54a58ec200326c39c45d91016106c2565b6000808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603610b3b576040517fcb1e7cfe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1610610b75578284610b78565b83835b909250905073ffffffffffffffffffffffffffffffffffffffff8216610bca576040517f78b507da00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b9250929050565b600060208284031215610be357600080fd5b5035919050565b803573ffffffffffffffffffffffffffffffffffffffff81168114610c0e57600080fd5b919050565b600060208284031215610c2557600080fd5b610c2e82610bea565b9392505050565b60008060408385031215610c4857600080fd5b82359150610c5860208401610bea565b90509250929050565b60008060408385031215610c7457600080fd5b50508035926020909101359150565b60008060008060008060a08789031215610c9c57600080fd5b863567ffffffffffffffff811115610cb357600080fd5b87016060818a031215610cc557600080fd5b9550610cd360208801610bea565b945060408701359350610ce860608801610bea565b9250608087013567ffffffffffffffff811115610d0457600080fd5b8701601f81018913610d1557600080fd5b803567ffffffffffffffff811115610d2c57600080fd5b896020828401011115610d3e57600080fd5b60208201935080925050509295509295509295565b600080600060608486031215610d6857600080fd5b610d7184610bea565b9250610d7f60208501610bea565b9150610d8d60408501610bea565b90509250925092565b600060208284031215610da857600080fd5b81518015158114610c2e57600080fd5b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b60808152600086357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1883603018112610e3957600080fd5b870160208101903567ffffffffffffffff811115610e5657600080fd5b803603821315610e6557600080fd5b60606080850152610e7a60e085018284610db8565b91505073ffffffffffffffffffffffffffffffffffffffff610e9e60208a01610bea565b1660a0840152604088013560c084015273ffffffffffffffffffffffffffffffffffffffff871660208401528560408401528281036060840152610ee3818587610db8565b9897505050505050505056fea2646970667358221220431a07541a491b54259bdf8fcd05ade6751bfbbf0e72e605f27325b56d7d464f64736f6c634300081a003360e060405234801561001057600080fd5b50604051611bb9380380611bb983398101604081905261002f9161020e565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461006357604051632b2add3d60e01b815260040160405180910390fd5b6001600160a01b038216158061008057506001600160a01b038116155b1561009e5760405163d92e233d60e01b815260040160405180910390fd5b60066100aa8982610360565b5060076100b78882610360565b5060ff861660c05260808590528360028111156100d6576100d661041e565b60a08160028111156100ea576100ea61041e565b905250600192909255600080546001600160a01b039283166001600160a01b03199182161790915560088054929093169116179055506104349350505050565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261015157600080fd5b81516001600160401b0381111561016a5761016a61012a565b604051601f8201601f19908116603f011681016001600160401b03811182821017156101985761019861012a565b6040528181528382016020018510156101b057600080fd5b60005b828110156101cf576020818601810151838301820152016101b3565b506000918101602001919091529392505050565b8051600381106101f257600080fd5b919050565b80516001600160a01b03811681146101f257600080fd5b600080600080600080600080610100898b03121561022b57600080fd5b88516001600160401b0381111561024157600080fd5b61024d8b828c01610140565b60208b015190995090506001600160401b0381111561026b57600080fd5b6102778b828c01610140565b975050604089015160ff8116811461028e57600080fd5b60608a015190965094506102a460808a016101e3565b60a08a015190945092506102ba60c08a016101f7565b91506102c860e08a016101f7565b90509295985092959890939650565b600181811c908216806102eb57607f821691505b60208210810361030b57634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111561035b57806000526020600020601f840160051c810160208510156103385750805b601f840160051c820191505b818110156103585760008155600101610344565b50505b505050565b81516001600160401b038111156103795761037961012a565b61038d8161038784546102d7565b84610311565b6020601f8211600181146103c157600083156103a95750848201515b600019600385901b1c1916600184901b178455610358565b600084815260208120601f198516915b828110156103f157878501518255602094850194600190920191016103d1565b508482101561040f5786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b634e487b7160e01b600052602160045260246000fd5b60805160a05160c05161174861047160003960006102170152600061033a0152600081816102eb01528181610ad70152610bdd01526117486000f3fe608060405234801561001057600080fd5b50600436106101985760003560e01c80638b851b95116100e3578063ccc775991161008c578063eddeb12311610066578063eddeb12314610431578063f2441b3214610444578063f687d12a1461046457600080fd5b8063ccc77599146103a4578063d9eeebed146103b7578063dd62ed3e146103eb57600080fd5b8063a9059cbb116100bd578063a9059cbb14610369578063c70126261461037c578063c835d7cc1461038f57600080fd5b80638b851b951461030d57806395d89b411461032d578063a3413d031461033557600080fd5b80633ce4a5bc116101455780634d8943bb1161011f5780634d8943bb146102a757806370a08231146102b057806385e1f4d0146102e657600080fd5b80633ce4a5bc1461024157806342966c681461028157806347e7ef241461029457600080fd5b806318160ddd1161017657806318160ddd146101f557806323b872dd146101fd578063313ce5671461021057600080fd5b806306fdde031461019d578063091d2788146101bb578063095ea7b3146101d2575b600080fd5b6101a5610477565b6040516101b29190611327565b60405180910390f35b6101c460015481565b6040519081526020016101b2565b6101e56101e0366004611366565b610509565b60405190151581526020016101b2565b6005546101c4565b6101e561020b366004611392565b610520565b60405160ff7f00000000000000000000000000000000000000000000000000000000000000001681526020016101b2565b61025c73735b14bb79463307aacbed86daf3322b1e6226ab81565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101b2565b6101e561028f3660046113d3565b6105b7565b6101e56102a2366004611366565b6105cb565b6101c460025481565b6101c46102be3660046113ec565b73ffffffffffffffffffffffffffffffffffffffff1660009081526003602052604090205490565b6101c47f000000000000000000000000000000000000000000000000000000000000000081565b60085461025c9073ffffffffffffffffffffffffffffffffffffffff1681565b6101a561071f565b61035c7f000000000000000000000000000000000000000000000000000000000000000081565b6040516101b29190611409565b6101e5610377366004611366565b61072e565b6101e561038a366004611479565b61073b565b6103a261039d3660046113ec565b61088a565b005b6103a26103b23660046113ec565b61099e565b6103bf610aab565b6040805173ffffffffffffffffffffffffffffffffffffffff90931683526020830191909152016101b2565b6101c46103f9366004611571565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260046020908152604080832093909416825291909152205490565b6103a261043f3660046113d3565b610cc9565b60005461025c9073ffffffffffffffffffffffffffffffffffffffff1681565b6103a26104723660046113d3565b610d4b565b606060068054610486906115aa565b80601f01602080910402602001604051908101604052809291908181526020018280546104b2906115aa565b80156104ff5780601f106104d4576101008083540402835291602001916104ff565b820191906000526020600020905b8154815290600101906020018083116104e257829003601f168201915b5050505050905090565b6000610516338484610dcd565b5060015b92915050565b600061052d848484610ed6565b73ffffffffffffffffffffffffffffffffffffffff8416600090815260046020908152604080832033845290915290205482811015610598576040517f10bad14700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6105ac85336105a7868561162c565b610dcd565b506001949350505050565b60006105c33383611091565b506001919050565b60003373735b14bb79463307aacbed86daf3322b1e6226ab14801590610609575060005473ffffffffffffffffffffffffffffffffffffffff163314155b801561062d575060085473ffffffffffffffffffffffffffffffffffffffff163314155b15610664576040517fddb5de5e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61066e83836111d3565b6040517f735b14bb79463307aacbed86daf3322b1e6226ab000000000000000000000000602082015273ffffffffffffffffffffffffffffffffffffffff8416907f67fc7bdaed5b0ec550d8706b87d60568ab70c6b781263c70101d54cd1564aab390603401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529082905261070e91869061163f565b60405180910390a250600192915050565b606060078054610486906115aa565b6000610516338484610ed6565b6000806000610748610aab565b6040517f23b872dd00000000000000000000000000000000000000000000000000000000815233600482015273735b14bb79463307aacbed86daf3322b1e6226ab602482015260448101829052919350915073ffffffffffffffffffffffffffffffffffffffff8316906323b872dd906064016020604051808303816000875af11580156107da573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107fe9190611661565b610834576040517f0a7cd6d600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61083e3385611091565b60025460405133917f9ffbffc04a397460ee1dbe8c9503e098090567d6b7f4b3c02a8617d800b6d9559161087791899189918791611683565b60405180910390a2506001949350505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab146108d7576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116610924576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527fd55614e962c5fd6ece71614f6348d702468a997a394dd5e5c1677950226d97ae906020015b60405180910390a150565b3373735b14bb79463307aacbed86daf3322b1e6226ab146109eb576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116610a38576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600880547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527f88815d964e380677e86d817e7d65dea59cb7b4c3b5b7a0c8ec7ea4a74f90a38790602001610993565b600080546040517f0be155470000000000000000000000000000000000000000000000000000000081527f000000000000000000000000000000000000000000000000000000000000000060048201528291829173ffffffffffffffffffffffffffffffffffffffff90911690630be1554790602401602060405180830381865afa158015610b3e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b6291906116b2565b905073ffffffffffffffffffffffffffffffffffffffff8116610bb1576040517f78fff39600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080546040517fd7fd7afb0000000000000000000000000000000000000000000000000000000081527f0000000000000000000000000000000000000000000000000000000000000000600482015273ffffffffffffffffffffffffffffffffffffffff9091169063d7fd7afb90602401602060405180830381865afa158015610c40573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c6491906116cf565b905080600003610ca0576040517fe661aed000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060025460015483610cb391906116e8565b610cbd91906116ff565b92959294509192505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610d16576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60028190556040518181527fef13af88e424b5d15f49c77758542c1938b08b8b95b91ed0751f98ba99000d8f90602001610993565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610d98576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018190556040518181527fff5788270f43bfc1ca41c503606d2594aa3023a1a7547de403a3e2f146a4a80a90602001610993565b73ffffffffffffffffffffffffffffffffffffffff8316610e1a576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216610e67576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff83811660008181526004602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8316610f23576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216610f70576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff831660009081526003602052604090205481811015610fd0576040517ffe382aa700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610fda828261162c565b73ffffffffffffffffffffffffffffffffffffffff808616600090815260036020526040808220939093559085168152908120805484929061101d9084906116ff565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161108391815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff82166110de576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff82166000908152600360205260409020548181101561113e576040517ffe382aa700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611148828261162c565b73ffffffffffffffffffffffffffffffffffffffff84166000908152600360205260408120919091556005805484929061118390849061162c565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90602001610ec9565b73ffffffffffffffffffffffffffffffffffffffff8216611220576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b806005600082825461123291906116ff565b909155505073ffffffffffffffffffffffffffffffffffffffff82166000908152600360205260408120805483929061126c9084906116ff565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6000815180845260005b818110156112e9576020818501810151868301820152016112cd565b5060006020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b60208152600061133a60208301846112c3565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff8116811461136357600080fd5b50565b6000806040838503121561137957600080fd5b823561138481611341565b946020939093013593505050565b6000806000606084860312156113a757600080fd5b83356113b281611341565b925060208401356113c281611341565b929592945050506040919091013590565b6000602082840312156113e557600080fd5b5035919050565b6000602082840312156113fe57600080fd5b813561133a81611341565b6020810160038310611444577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000806040838503121561148c57600080fd5b823567ffffffffffffffff8111156114a357600080fd5b8301601f810185136114b457600080fd5b803567ffffffffffffffff8111156114ce576114ce61144a565b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8501160116810181811067ffffffffffffffff8211171561153a5761153a61144a565b60405281815282820160200187101561155257600080fd5b8160208401602083013760006020928201830152969401359450505050565b6000806040838503121561158457600080fd5b823561158f81611341565b9150602083013561159f81611341565b809150509250929050565b600181811c908216806115be57607f821691505b6020821081036115f7577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8181038181111561051a5761051a6115fd565b60408152600061165260408301856112c3565b90508260208301529392505050565b60006020828403121561167357600080fd5b8151801515811461133a57600080fd5b60808152600061169660808301876112c3565b6020830195909552506040810192909252606090910152919050565b6000602082840312156116c457600080fd5b815161133a81611341565b6000602082840312156116e157600080fd5b5051919050565b808202811582820484141761051a5761051a6115fd565b8082018082111561051a5761051a6115fd56fea26469706673582212204013e39523742118b3f2227e145ee7e48176ba6aebead33c596dca2acb59a74c64736f6c634300081a0033a2646970667358221220d8446b0a335ac34a74df999c6bbd30e7ea914a28392418f32d5e2a8c0b9d853164736f6c634300081a0033", + Bin: "0x6080604052600c8054600160ff199182168117909255601f80549091169091179055348015602c57600080fd5b5061df6a8061003c6000396000f3fe608060405234801561001057600080fd5b50600436106102f45760003560e01c80638ce7ef0511610191578063d27b0427116100e3578063dfbdf60011610097578063f1f87f4011610071578063f1f87f401461049d578063f2413096146104a5578063fa7626d4146104ad57600080fd5b8063dfbdf60014610485578063e13aba481461048d578063e20c9f711461049557600080fd5b8063d591221f116100c8578063d591221f1461046d578063d97136a214610475578063dcba486a1461047d57600080fd5b8063d27b04271461045d578063d509b16c1461046557600080fd5b8063b549984c11610145578063ba414fa61161011f578063ba414fa614610435578063d04cda981461044d578063d1fd32911461045557600080fd5b8063b549984c1461041d578063b5508aa914610425578063b79cad091461042d57600080fd5b8063a4aa6c7c11610176578063a4aa6c7c14610405578063ae9687dc1461040d578063b0464fdc1461041557600080fd5b80638ce7ef05146103e8578063916a17c6146103f057600080fd5b80634b6295091161024a57806366d9a9a0116101fe5780637f924c4e116101d85780637f924c4e146103c357806380326680146103cb57806385226c81146103d357600080fd5b806366d9a9a01461039e5780636ff45850146103b357806370557298146103bb57600080fd5b8063513999621161022f578063513999621461038657806358fdbbe01461038e5780635f01db7e1461039657600080fd5b80634b629509146103765780634cfc0aaa1461037e57600080fd5b806328438826116102ac5780633be9ec80116102865780633be9ec801461035e5780633e5e3c23146103665780633f7286f41461036e57600080fd5b806328438826146103395780632ade3880146103415780632f6254fc1461035657600080fd5b80630a9254e4116102dd5780630a9254e41461030b5780631142744e146103135780631ed7831c1461031b57600080fd5b80630393998b146102f95780630809dfef14610303575b600080fd5b6103016104ba565b005b6103016105bc565b61030161074a565b610301610e2c565b610323610f10565b6040516103309190619053565b60405180910390f35b610301610f72565b6103496111bd565b60405161033091906190ef565b6103016112ff565b610301611470565b61032361165d565b6103236116bd565b61030161171d565b6103016117f0565b6103016118c9565b610301611c46565b610301611d19565b6103a6611e86565b6040516103309190619255565b610301612008565b610301612218565b610301612468565b61030161268c565b6103db612760565b60405161033091906192f3565b610301612830565b6103f8612a30565b604051610330919061936a565b610301612b2b565b610301612ce0565b6103f8612f6d565b610301613068565b6103db61313a565b61030161320a565b61043d61359c565b6040519015158152602001610330565b610301613670565b6103016137b4565b6103016138f7565b610301613a3a565b6103016140ce565b6103016141b2565b610301614338565b6103016145bb565b6103016146fe565b6103236149a8565b610301614a08565b610301614b4e565b601f5461043d9060ff1681565b604051630618f58760e51b81527f2b2add3d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b15801561052657600080fd5b505af115801561053a573d6000803e3d6000fd5b5050601f546040517feddeb123000000000000000000000000000000000000000000000000000000008152600a60048201526101009091046001600160a01b0316925063eddeb12391506024015b600060405180830381600087803b1580156105a257600080fd5b505af11580156105b6573d6000803e3d6000fd5b50505050565b60225460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561061557600080fd5b505af1158015610629573d6000803e3d6000fd5b5050604051630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b15801561069957600080fd5b505af11580156106ad573d6000803e3d6000fd5b5050601f546040517f47e7ef2400000000000000000000000000000000000000000000000000000000815260006004820152620186a060248201526101009091046001600160a01b031692506347e7ef2491506044015b6020604051808303816000875af1158015610723573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107479190619401565b50565b602480547fffffffffffffffffffffffff000000000000000000000000000000000000000090811630179091556025805490911661123417905560405161079090618f73565b604051809103906000f0801580156107ac573d6000803e3d6000fd5b50602380547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03928316908117909155604080518082018252600f81527f476174657761795a45564d2e736f6c000000000000000000000000000000000060208201526024805492519081019390935292166044820152610890919060640160408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f485cc95500000000000000000000000000000000000000000000000000000000179052614daa565b602280546001600160a01b03929092167fffffffffffffffffffffffff00000000000000000000000000000000000000009283168117909155602180549092168117909155604080517f3ce4a5bc0000000000000000000000000000000000000000000000000000000081529051633ce4a5bc916004808201926020929091908290030181865afa158015610929573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061094d919061943f565b602680547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039290921691821790556040517f06447d560000000000000000000000000000000000000000000000000000000081526004810191909152737109709ecfa91a80626ff3989d68f67f5b1dd12d906306447d5690602401600060405180830381600087803b1580156109eb57600080fd5b505af11580156109ff573d6000803e3d6000fd5b505050506000806000604051610a1490618f80565b6001600160a01b03938416815291831660208301529091166040820152606001604051809103906000f080158015610a50573d6000803e3d6000fd5b50602080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03928316908117909155602154604051601293600193849360009391921690610aa690618f8d565b610ab59695949392919061945a565b604051809103906000f080158015610ad1573d6000803e3d6000fd5b50601f80547fffffffffffffffffffffff0000000000000000000000000000000000000000ff166101006001600160a01b03938416810291909117918290556020546040517fee2815ba00000000000000000000000000000000000000000000000000000000815260016004820152919092048316602482015291169063ee2815ba90604401600060405180830381600087803b158015610b7157600080fd5b505af1158015610b85573d6000803e3d6000fd5b50506020546040517fa7cb050700000000000000000000000000000000000000000000000000000000815260016004820181905260248201526001600160a01b03909116925063a7cb05079150604401600060405180830381600087803b158015610bef57600080fd5b505af1158015610c03573d6000803e3d6000fd5b50506026546040517fc88a5e6d0000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152633b9aca006024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c88a5e6d9150604401600060405180830381600087803b158015610c8357600080fd5b505af1158015610c97573d6000803e3d6000fd5b50506022546040517fc88a5e6d0000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152633b9aca006024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c88a5e6d9150604401600060405180830381600087803b158015610d1757600080fd5b505af1158015610d2b573d6000803e3d6000fd5b5050601f54602480546040517f47e7ef240000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620186a09281019290925261010090920490911692506347e7ef2491506044016020604051808303816000875af1158015610da9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dcd9190619401565b507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b03166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156105a257600080fd5b604051630618f58760e51b81527fddb5de5e000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b158015610e9857600080fd5b505af1158015610eac573d6000803e3d6000fd5b5050601f54602480546040517f47e7ef240000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620186a09281019290925261010090920490911692506347e7ef249150604401610704565b60606016805480602002602001604051908101604052809291908181526020018280548015610f6857602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610f4a575b5050505050905090565b601f546025546040516370a0823160e01b81526001600160a01b0391821660048201526000926101009004909116906370a0823190602401602060405180830381865afa158015610fc7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610feb919061954f565b9050610ff8600082614dc9565b601f54602480546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201526207a12092810183905291926101009004169063095ea7b3906044016020604051808303816000875af1158015611070573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110949190619401565b50604051630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b15801561110157600080fd5b505af1158015611115573d6000803e3d6000fd5b5050601f546025546040517f23b872dd000000000000000000000000000000000000000000000000000000008152600060048201526001600160a01b039182166024820152604481018690526101009092041692506323b872dd91506064015b6020604051808303816000875af1158015611194573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111b89190619401565b505050565b6060601e805480602002602001604051908101604052809291908181526020016000905b828210156112f657600084815260208082206040805180820182526002870290920180546001600160a01b03168352600181018054835181870281018701909452808452939591948681019491929084015b828210156112df57838290600052602060002001805461125290619568565b80601f016020809104026020016040519081016040528092919081815260200182805461127e90619568565b80156112cb5780601f106112a0576101008083540402835291602001916112cb565b820191906000526020600020905b8154815290600101906020018083116112ae57829003601f168201915b505050505081526020019060010190611233565b5050505081525050815260200190600101906111e1565b50505050905090565b60265460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561135857600080fd5b505af115801561136c573d6000803e3d6000fd5b5050601f546040517fc835d7cc00000000000000000000000000000000000000000000000000000000815261321160048201526101009091046001600160a01b0316925063c835d7cc9150602401600060405180830381600087803b1580156113d457600080fd5b505af11580156113e8573d6000803e3d6000fd5b5050505061146e601f60019054906101000a90046001600160a01b03166001600160a01b031663f2441b326040518163ffffffff1660e01b8152600401602060405180830381865afa158015611442573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611466919061943f565b613211614e51565b565b60265460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156114c957600080fd5b505af11580156114dd573d6000803e3d6000fd5b50506020546040517fa7cb050700000000000000000000000000000000000000000000000000000000815260016004820152600060248201526001600160a01b03909116925063a7cb05079150604401600060405180830381600087803b15801561154757600080fd5b505af115801561155b573d6000803e3d6000fd5b5050604051630618f58760e51b81527fe661aed0000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e091506024015b600060405180830381600087803b1580156115cc57600080fd5b505af11580156115e0573d6000803e3d6000fd5b50505050600080601f60019054906101000a90046001600160a01b03166001600160a01b031663d9eeebed6040518163ffffffff1660e01b81526004016040805180830381865afa158015611639573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105b691906195b5565b60606018805480602002602001604051908101604052809291908181526020018280548015610f68576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311610f4a575050505050905090565b60606017805480602002602001604051908101604052809291908181526020018280548015610f68576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311610f4a575050505050905090565b604051630618f58760e51b81527f2b2add3d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b15801561178957600080fd5b505af115801561179d573d6000803e3d6000fd5b5050601f546040517fccc7759900000000000000000000000000000000000000000000000000000000815261321160048201526101009091046001600160a01b0316925063ccc775999150602401610588565b604051630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b15801561185c57600080fd5b505af1158015611870573d6000803e3d6000fd5b5050601f546040517f095ea7b300000000000000000000000000000000000000000000000000000000815260006004820152600a60248201526101009091046001600160a01b0316925063095ea7b39150604401610704565b60265460405163ca669fa760e01b81526001600160a01b039091166004820152600a908190737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561192757600080fd5b505af115801561193b573d6000803e3d6000fd5b5050601f546040517ff687d12a000000000000000000000000000000000000000000000000000000008152600481018690526101009091046001600160a01b0316925063f687d12a9150602401600060405180830381600087803b1580156119a257600080fd5b505af11580156119b6573d6000803e3d6000fd5b505060265460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b158015611a1357600080fd5b505af1158015611a27573d6000803e3d6000fd5b5050601f546040517feddeb123000000000000000000000000000000000000000000000000000000008152600481018590526101009091046001600160a01b0316925063eddeb1239150602401600060405180830381600087803b158015611a8e57600080fd5b505af1158015611aa2573d6000803e3d6000fd5b5050601f546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526101009091046001600160a01b03166004820181905260006024830152925063095ea7b391506044016020604051808303816000875af1158015611b15573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b399190619401565b507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b031663f48448146040518163ffffffff1660e01b8152600401600060405180830381600087803b158015611b9857600080fd5b505af1158015611bac573d6000803e3d6000fd5b5050601f546025546040805160609290921b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000001660208301528051601481840301815260348301918290527fc7012626000000000000000000000000000000000000000000000000000000009091526001600160a01b0361010090930492909216935063c7012626925061117591906001906038016195e1565b604051630618f58760e51b81527f2b2add3d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b158015611cb257600080fd5b505af1158015611cc6573d6000803e3d6000fd5b5050601f546040517fc835d7cc00000000000000000000000000000000000000000000000000000000815261321160048201526101009091046001600160a01b0316925063c835d7cc9150602401610588565b60265460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015611d7257600080fd5b505af1158015611d86573d6000803e3d6000fd5b5050601f546040517ff687d12a000000000000000000000000000000000000000000000000000000008152600a60048201526101009091046001600160a01b0316925063f687d12a9150602401600060405180830381600087803b158015611ded57600080fd5b505af1158015611e01573d6000803e3d6000fd5b5050505061146e600a601f60019054906101000a90046001600160a01b03166001600160a01b031663091d27886040518163ffffffff1660e01b8152600401602060405180830381865afa158015611e5d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e81919061954f565b614dc9565b6060601b805480602002602001604051908101604052809291908181526020016000905b828210156112f65783829060005260206000209060020201604051806040016040529081600082018054611edd90619568565b80601f0160208091040260200160405190810160405280929190818152602001828054611f0990619568565b8015611f565780601f10611f2b57610100808354040283529160200191611f56565b820191906000526020600020905b815481529060010190602001808311611f3957829003601f168201915b5050505050815260200160018201805480602002602001604051908101604052809291908181526020018280548015611ff057602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019060040190602082600301049283019260010382029150808411611f9d5790505b50505050508152505081526020019060010190611eaa565b601f546025546040516370a0823160e01b81526001600160a01b0391821660048201526000926101009004909116906370a0823190602401602060405180830381865afa15801561205d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612081919061954f565b905061208e600082614dc9565b601f54602480546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201526207a12092810183905291926101009004169063095ea7b3906044016020604051808303816000875af1158015612106573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061212a9190619401565b50604051630618f58760e51b81527ffe382aa7000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b15801561219757600080fd5b505af11580156121ab573d6000803e3d6000fd5b5050601f54602480546025546040517f23b872dd0000000000000000000000000000000000000000000000000000000081526001600160a01b039283166004820152908216928101929092526044820186905261010090920490911692506323b872dd9150606401611175565b601f546025546040516370a0823160e01b81526001600160a01b0391821660048201526000926101009004909116906370a0823190602401602060405180830381865afa15801561226d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612291919061954f565b905061229e600082614dc9565b601f54602480546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015261c35092810183905291926101009004169063095ea7b3906044016020604051808303816000875af1158015612315573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123399190619401565b50601f54602480546025546040517f23b872dd0000000000000000000000000000000000000000000000000000000081526001600160a01b0392831660048201529082169281019290925260448201849052610100909204909116906323b872dd906064015b6020604051808303816000875af11580156123be573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123e29190619401565b50601f546025546040516370a0823160e01b81526001600160a01b0391821660048201526000926101009004909116906370a0823190602401602060405180830381865afa158015612438573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061245c919061954f565b90506111b88282614dc9565b6000601f60019054906101000a90046001600160a01b03166001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156124bd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124e1919061954f565b90506124f0620186a082614dc9565b60225460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561254957600080fd5b505af115801561255d573d6000803e3d6000fd5b5050601f54602480546040517f47e7ef240000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620186a09281019290925261010090920490911692506347e7ef2491506044016020604051808303816000875af11580156125db573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125ff9190619401565b506000601f60019054906101000a90046001600160a01b03166001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612655573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612679919061954f565b905061268862030d4082614dc9565b5050565b604051630618f58760e51b81527ffe382aa7000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b1580156126f857600080fd5b505af115801561270c573d6000803e3d6000fd5b5050601f546040517f42966c68000000000000000000000000000000000000000000000000000000008152620249f060048201526101009091046001600160a01b031692506342966c689150602401610704565b6060601a805480602002602001604051908101604052809291908181526020016000905b828210156112f65783829060005260206000200180546127a390619568565b80601f01602080910402602001604051908101604052809291908181526020018280546127cf90619568565b801561281c5780601f106127f15761010080835404028352916020019161281c565b820191906000526020600020905b8154815290600101906020018083116127ff57829003601f168201915b505050505081526020019060010190612784565b601f546025546040516370a0823160e01b81526001600160a01b0391821660048201526000926101009004909116906370a0823190602401602060405180830381865afa158015612885573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128a9919061954f565b90506128b6600082614dc9565b601f54602480546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201526207a12092810183905291926101009004169063095ea7b3906044016020604051808303816000875af115801561292e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129529190619401565b50604051630618f58760e51b81527ffe382aa7000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b1580156129bf57600080fd5b505af11580156129d3573d6000803e3d6000fd5b5050601f546025546040517fa9059cbb0000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201526024810186905261010090920416925063a9059cbb9150604401611175565b6060601d805480602002602001604051908101604052809291908181526020016000905b828210156112f65760008481526020908190206040805180820182526002860290920180546001600160a01b03168352600181018054835181870281018701909452808452939491938583019392830182828015612b1357602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019060040190602082600301049283019260010382029150808411612ac05790505b50505050508152505081526020019060010190612a54565b601f54602480546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201526207a12092810183905291926101009004169063095ea7b3906044016020604051808303816000875af1158015612ba3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612bc79190619401565b50604051630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b158015612c3457600080fd5b505af1158015612c48573d6000803e3d6000fd5b5050601f546040517fa9059cbb00000000000000000000000000000000000000000000000000000000815260006004820152602481018590526101009091046001600160a01b0316925063a9059cbb91506044015b6020604051808303816000875af1158015612cbc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126889190619401565b6000601f60019054906101000a90046001600160a01b03166001600160a01b03166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa158015612d35573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052612d5d91908101906196cb565b9050612d9e6040518060400160405280600581526020017f544f4b454e00000000000000000000000000000000000000000000000000000081525082614eb2565b6000601f60019054906101000a90046001600160a01b03166001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa158015612df3573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052612e1b91908101906196cb565b9050612e5c6040518060400160405280600381526020017f544b4e000000000000000000000000000000000000000000000000000000000081525082614eb2565b6000601f60019054906101000a90046001600160a01b03166001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015612eb1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ed59190619714565b9050612ee560128260ff16614dc9565b6000601f60019054906101000a90046001600160a01b03166001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612f3a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f5e919061954f565b90506105b6620186a082614dc9565b6060601c805480602002602001604051908101604052809291908181526020016000905b828210156112f65760008481526020908190206040805180820182526002860290920180546001600160a01b0316835260018101805483518187028101870190945280845293949193858301939283018282801561305057602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019060040190602082600301049283019260010382029150808411612ffd5790505b50505050508152505081526020019060010190612f91565b604051630618f58760e51b81527f2b2add3d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b1580156130d457600080fd5b505af11580156130e8573d6000803e3d6000fd5b5050601f546040517ff687d12a000000000000000000000000000000000000000000000000000000008152600a60048201526101009091046001600160a01b0316925063f687d12a9150602401610588565b60606019805480602002602001604051908101604052809291908181526020016000905b828210156112f657838290600052602060002001805461317d90619568565b80601f01602080910402602001604051908101604052809291908181526020018280546131a990619568565b80156131f65780601f106131cb576101008083540402835291602001916131f6565b820191906000526020600020905b8154815290600101906020018083116131d957829003601f168201915b50505050508152602001906001019061315e565b60265460405163ca669fa760e01b81526001600160a01b039091166004820152600a906305f5e10090737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561326c57600080fd5b505af1158015613280573d6000803e3d6000fd5b5050601f546040517ff687d12a000000000000000000000000000000000000000000000000000000008152600481018690526101009091046001600160a01b0316925063f687d12a9150602401600060405180830381600087803b1580156132e757600080fd5b505af11580156132fb573d6000803e3d6000fd5b505060265460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b15801561335857600080fd5b505af115801561336c573d6000803e3d6000fd5b5050601f546040517feddeb123000000000000000000000000000000000000000000000000000000008152600481018590526101009091046001600160a01b0316925063eddeb1239150602401600060405180830381600087803b1580156133d357600080fd5b505af11580156133e7573d6000803e3d6000fd5b5050601f546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526101009091046001600160a01b031660048201819052630bebc2006024830152925063095ea7b391506044016020604051808303816000875af115801561345d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134819190619401565b50604051630618f58760e51b81527ffe382aa7000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b1580156134ee57600080fd5b505af1158015613502573d6000803e3d6000fd5b5050601f546025546040805160609290921b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000001660208301528051601481840301815260348301918290527fc7012626000000000000000000000000000000000000000000000000000000009091526001600160a01b0361010090930492909216935063c7012626925061117591906064906038016195e1565b60085460009060ff16156135b4575060085460ff1690565b6040517f667f9d70000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d600482018190527f6661696c65640000000000000000000000000000000000000000000000000000602483015260009163667f9d7090604401602060405180830381865afa158015613645573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613669919061954f565b1415905090565b60265460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156136c957600080fd5b505af11580156136dd573d6000803e3d6000fd5b5050601f546040517feddeb123000000000000000000000000000000000000000000000000000000008152600a60048201526101009091046001600160a01b0316925063eddeb1239150602401600060405180830381600087803b15801561374457600080fd5b505af1158015613758573d6000803e3d6000fd5b5050505061146e600a601f60019054906101000a90046001600160a01b03166001600160a01b0316634d8943bb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611e5d573d6000803e3d6000fd5b60265460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561380d57600080fd5b505af1158015613821573d6000803e3d6000fd5b5050604051630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b15801561389157600080fd5b505af11580156138a5573d6000803e3d6000fd5b5050601f546040517fccc77599000000000000000000000000000000000000000000000000000000008152600060048201526101009091046001600160a01b0316925063ccc775999150602401610588565b60265460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561395057600080fd5b505af1158015613964573d6000803e3d6000fd5b5050604051630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b1580156139d457600080fd5b505af11580156139e8573d6000803e3d6000fd5b5050601f546040517fc835d7cc000000000000000000000000000000000000000000000000000000008152600060048201526101009091046001600160a01b0316925063c835d7cc9150602401610588565b60265460405163ca669fa760e01b81526001600160a01b039091166004820152600a908190737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015613a9857600080fd5b505af1158015613aac573d6000803e3d6000fd5b5050601f546040517ff687d12a000000000000000000000000000000000000000000000000000000008152600481018690526101009091046001600160a01b0316925063f687d12a9150602401600060405180830381600087803b158015613b1357600080fd5b505af1158015613b27573d6000803e3d6000fd5b505060265460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b158015613b8457600080fd5b505af1158015613b98573d6000803e3d6000fd5b5050601f546040517feddeb123000000000000000000000000000000000000000000000000000000008152600481018590526101009091046001600160a01b0316925063eddeb1239150602401600060405180830381600087803b158015613bff57600080fd5b505af1158015613c13573d6000803e3d6000fd5b5050601f54602480546040516370a0823160e01b81526001600160a01b039182166004820152600095506101009093041692506370a082319101602060405180830381865afa158015613c6a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613c8e919061954f565b9050613c9d620186a082614dc9565b6000601f60019054906101000a90046001600160a01b03166001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613cf2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613d16919061954f565b9050613d25620186a082614dc9565b601f546026546040516370a0823160e01b81526001600160a01b0391821660048201526000926101009004909116906370a0823190602401602060405180830381865afa158015613d7a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613d9e919061954f565b601f546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526101009091046001600160a01b03166004820181905261c350602483015291925063095ea7b3906044016020604051808303816000875af1158015613e10573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613e349190619401565b50601f546025546040805160609290921b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000001660208301528051601481840301815260348301918290527fc7012626000000000000000000000000000000000000000000000000000000009091526001600160a01b03610100909304929092169163c701262691613ecc919061c350906038016195e1565b6020604051808303816000875af1158015613eeb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613f0f9190619401565b50601f546026546040516370a0823160e01b81526001600160a01b0391821660048201526000926101009004909116906370a0823190602401602060405180830381865afa158015613f65573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613f89919061954f565b9050613fa985613f998885619766565b613fa39190619766565b82614dc9565b601f54602480546040516370a0823160e01b81526001600160a01b0391821660048201526000936101009004909116916370a082319101602060405180830381865afa158015613ffd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614021919061954f565b905061403d866140338961c350619779565b613fa39190619779565b6000601f60019054906101000a90046001600160a01b03166001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015614092573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906140b6919061954f565b90506140c461c35082614dc9565b5050505050505050565b601f546025546040516370a0823160e01b81526001600160a01b0391821660048201526000926101009004909116906370a0823190602401602060405180830381865afa158015614123573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614147919061954f565b9050614154600082614dc9565b601f546025546040517fa9059cbb0000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015261c350602482018190529261010090049091169063a9059cbb9060440161239f565b601f54602480546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201526207a12092810183905291926101009004169063095ea7b3906044016020604051808303816000875af115801561422a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061424e9190619401565b50604051630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b1580156142bb57600080fd5b505af11580156142cf573d6000803e3d6000fd5b5050601f54602480546040517f23b872dd0000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201526000928101929092526044820186905261010090920490911692506323b872dd9150606401612c9d565b60265460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561439157600080fd5b505af11580156143a5573d6000803e3d6000fd5b5050601f546040517ff687d12a000000000000000000000000000000000000000000000000000000008152600a6004820181905293508392506101009091046001600160a01b03169063f687d12a90602401600060405180830381600087803b15801561441157600080fd5b505af1158015614425573d6000803e3d6000fd5b505060265460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b15801561448257600080fd5b505af1158015614496573d6000803e3d6000fd5b5050601f546040517feddeb123000000000000000000000000000000000000000000000000000000008152600a60048201526101009091046001600160a01b0316925063eddeb1239150602401600060405180830381600087803b1580156144fd57600080fd5b505af1158015614511573d6000803e3d6000fd5b50505050600080601f60019054906101000a90046001600160a01b03166001600160a01b031663d9eeebed6040518163ffffffff1660e01b81526004016040805180830381865afa15801561456a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061458e91906195b5565b601f5491935091506145ae9061010090046001600160a01b031683614e51565b6105b6613fa38486619766565b60265460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561461457600080fd5b505af1158015614628573d6000803e3d6000fd5b5050601f546040517fccc7759900000000000000000000000000000000000000000000000000000000815261321160048201526101009091046001600160a01b0316925063ccc775999150602401600060405180830381600087803b15801561469057600080fd5b505af11580156146a4573d6000803e3d6000fd5b5050505061146e601f60019054906101000a90046001600160a01b03166001600160a01b0316638b851b956040518163ffffffff1660e01b8152600401602060405180830381865afa158015611442573d6000803e3d6000fd5b601f54602480546040516370a0823160e01b81526001600160a01b0391821660048201526000936101009004909116916370a082319101602060405180830381865afa158015614752573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614776919061954f565b9050614785620186a082614dc9565b6000601f60019054906101000a90046001600160a01b03166001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156147da573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906147fe919061954f565b905061480d620186a082614dc9565b601f546040517f42966c6800000000000000000000000000000000000000000000000000000000815261c35060048201526101009091046001600160a01b0316906342966c68906024016020604051808303816000875af1158015614876573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061489a9190619401565b50601f54602480546040516370a0823160e01b81526001600160a01b0391821660048201526000936101009004909116916370a082319101602060405180830381865afa1580156148ef573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614913919061954f565b905061492161c35082614dc9565b6000601f60019054906101000a90046001600160a01b03166001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015614976573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061499a919061954f565b90506105b661c35082614dc9565b60606015805480602002602001604051908101604052809291908181526020018280548015610f68576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311610f4a575050505050905090565b60265460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015614a6157600080fd5b505af1158015614a75573d6000803e3d6000fd5b50506020546040517fee2815ba00000000000000000000000000000000000000000000000000000000815260016004820152600060248201526001600160a01b03909116925063ee2815ba9150604401600060405180830381600087803b158015614adf57600080fd5b505af1158015614af3573d6000803e3d6000fd5b5050604051630618f58760e51b81527f78fff396000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e091506024016115b2565b601f546025546040516370a0823160e01b81526001600160a01b0391821660048201526000926101009004909116906370a0823190602401602060405180830381865afa158015614ba3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614bc7919061954f565b9050614bd4600082614dc9565b601f54602480546040517fdd62ed3e0000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201819052928101929092526000926101009004169063dd62ed3e90604401602060405180830381865afa158015614c4a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614c6e919061954f565b9050614c7b600082614dc9565b604051630618f58760e51b81527f10bad14700000000000000000000000000000000000000000000000000000000600482015261c35090737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b158015614ceb57600080fd5b505af1158015614cff573d6000803e3d6000fd5b5050601f54602480546025546040517f23b872dd0000000000000000000000000000000000000000000000000000000081526001600160a01b039283166004820152908216928101929092526044820186905261010090920490911692506323b872dd91506064016020604051808303816000875af1158015614d86573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105b69190619401565b6000614db4618f9a565b614dbf848483614f04565b9150505b92915050565b6040517f98296c540000000000000000000000000000000000000000000000000000000081526004810183905260248101829052737109709ecfa91a80626ff3989d68f67f5b1dd12d906398296c54906044015b60006040518083038186803b158015614e3557600080fd5b505afa158015614e49573d6000803e3d6000fd5b505050505050565b6040517f515361f60000000000000000000000000000000000000000000000000000000081526001600160a01b03808416600483015282166024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063515361f690604401614e1d565b6040517ff320d963000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063f320d96390614e1d908590859060040161978c565b600080614f118584614f7f565b9050614f746040518060400160405280601d81526020017f4552433139363750726f78792e736f6c3a4552433139363750726f78790000008152508286604051602001614f5f9291906197b1565b60405160208183030381529060405285614f8b565b9150505b9392505050565b6000614f788383614fb9565b60c08101515160009015614faf57614fa884848460c00151614fd4565b9050614f78565b614fa8848461517a565b6000614fc58383615265565b614f7883836020015184614f8b565b600080614fdf615271565b90506000614fed8683615344565b9050600061500482606001518360200151856157ea565b90506000615014838389896159fc565b9050600061502182616879565b602081015181519192509060030b156150945789826040015160405160200161504b9291906197d3565b60408051601f19818403018152908290527f08c379a000000000000000000000000000000000000000000000000000000000825261508b91600401619854565b60405180910390fd5b60006150d76040518060400160405280601581526020017f4465706c6f79656420746f20616464726573733a200000000000000000000000815250836001616a48565b6040517fc6ce059d000000000000000000000000000000000000000000000000000000008152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c6ce059d9061512a908490600401619854565b602060405180830381865afa158015615147573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061516b919061943f565b9b9a5050505050505050505050565b6040517f8d1cc9250000000000000000000000000000000000000000000000000000000081526000908190737109709ecfa91a80626ff3989d68f67f5b1dd12d90638d1cc925906151cf908790600401619854565b600060405180830381865afa1580156151ec573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526152149190810190619887565b90506000615242828560405160200161522e9291906198bc565b604051602081830303815290604052616c48565b90506001600160a01b038116614dbf57848460405160200161504b9291906198eb565b61268882826000616c5b565b604080518082018252600381527f6f75740000000000000000000000000000000000000000000000000000000000602082015290517fd145736c000000000000000000000000000000000000000000000000000000008152606091737109709ecfa91a80626ff3989d68f67f5b1dd12d91829063d145736c906152f8908490600401619996565b600060405180830381865afa158015615315573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261533d91908101906196cb565b9250505090565b6153766040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b6000737109709ecfa91a80626ff3989d68f67f5b1dd12d90506153c16040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b6153ca85616d5e565b602082015260006153da86617143565b90506000836001600160a01b031663d930a0e66040518163ffffffff1660e01b8152600401600060405180830381865afa15801561541c573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261544491908101906196cb565b8683856020015160405160200161545e94939291906199dd565b60408051601f19818403018152908290527f60f9bb1100000000000000000000000000000000000000000000000000000000825291506000906001600160a01b038616906360f9bb11906154b6908590600401619854565b600060405180830381865afa1580156154d3573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526154fb91908101906196cb565b6040517fdb4235f60000000000000000000000000000000000000000000000000000000081529091506001600160a01b0386169063db4235f690615543908490600401619ae1565b602060405180830381865afa158015615560573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906155849190619401565b615599578160405160200161504b9190619b33565b6040517f49c4fac80000000000000000000000000000000000000000000000000000000081526001600160a01b038616906349c4fac8906155de908490600401619bc5565b600060405180830381865afa1580156155fb573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261562391908101906196cb565b84526040517fdb4235f60000000000000000000000000000000000000000000000000000000081526001600160a01b0386169063db4235f69061566a908490600401619c17565b602060405180830381865afa158015615687573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906156ab9190619401565b15615740576040517f49c4fac80000000000000000000000000000000000000000000000000000000081526001600160a01b038616906349c4fac8906156f5908490600401619c17565b600060405180830381865afa158015615712573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261573a91908101906196cb565b60408501525b846001600160a01b03166349c4fac88286600001516040516020016157659190619c69565b6040516020818303038152906040526040518363ffffffff1660e01b815260040161579192919061978c565b600060405180830381865afa1580156157ae573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526157d691908101906196cb565b606085015250608083015250949350505050565b60408051600480825260a0820190925260609160009190816020015b60608152602001906001900390816158065790505090506040518060400160405280600481526020017f67726570000000000000000000000000000000000000000000000000000000008152508160008151811061586657615866619cd5565b60200260200101819052506040518060400160405280600381526020017f2d726c0000000000000000000000000000000000000000000000000000000000815250816001815181106158ba576158ba619cd5565b6020026020010181905250846040516020016158d69190619d04565b604051602081830303815290604052816002815181106158f8576158f8619cd5565b6020026020010181905250826040516020016159149190619d70565b6040516020818303038152906040528160038151811061593657615936619cd5565b6020026020010181905250600061594c82616879565b602080820151604080518082018252600581527f2e6a736f6e00000000000000000000000000000000000000000000000000000081850190815282518084018452600080825290860152825180840190935290518252928101929092529192506159dd90604080518082018252600080825260209182015281518083019092528451825280850190820152906173c6565b6159f2578560405160200161504b9190619db1565b9695505050505050565b60a0810151604080518082018252600080825260209182015281518083019092528251808352928101910152606090737109709ecfa91a80626ff3989d68f67f5b1dd12d9015615a4c565b511590565b615bc057826020015115615b08576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605860248201527f54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f742060448201527f62652075736564207768656e207468652060736b6970566572696679536f757260648201527f6365436f646560206f7074696f6e206973206074727565600000000000000000608482015260a40161508b565b8260c0015115615bc0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605360248201527f54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f742060448201527f62652075736564207768656e207468652060736b69704c6963656e736554797060648201527f6560206f7074696f6e2069732060747275656000000000000000000000000000608482015260a40161508b565b6040805160ff8082526120008201909252600091816020015b6060815260200190600190039081615bd957905050905060006040518060400160405280600381526020017f6e70780000000000000000000000000000000000000000000000000000000000815250828280615c3490619e42565b935060ff1681518110615c4957615c49619cd5565b60200260200101819052506040518060400160405280600d81526020017f302e302e312d616c7068612e3700000000000000000000000000000000000000815250604051602001615c9a9190619e61565b604051602081830303815290604052828280615cb590619e42565b935060ff1681518110615cca57615cca619cd5565b60200260200101819052506040518060400160405280600681526020017f6465706c6f790000000000000000000000000000000000000000000000000000815250828280615d1790619e42565b935060ff1681518110615d2c57615d2c619cd5565b60200260200101819052506040518060400160405280600e81526020017f2d2d636f6e74726163744e616d65000000000000000000000000000000000000815250828280615d7990619e42565b935060ff1681518110615d8e57615d8e619cd5565b60200260200101819052508760200151828280615daa90619e42565b935060ff1681518110615dbf57615dbf619cd5565b60200260200101819052506040518060400160405280600e81526020017f2d2d636f6e747261637450617468000000000000000000000000000000000000815250828280615e0c90619e42565b935060ff1681518110615e2157615e21619cd5565b602090810291909101015287518282615e3981619e42565b935060ff1681518110615e4e57615e4e619cd5565b60200260200101819052506040518060400160405280600981526020017f2d2d636861696e49640000000000000000000000000000000000000000000000815250828280615e9b90619e42565b935060ff1681518110615eb057615eb0619cd5565b6020026020010181905250615ec446617427565b8282615ecf81619e42565b935060ff1681518110615ee457615ee4619cd5565b60200260200101819052506040518060400160405280600f81526020017f2d2d6275696c64496e666f46696c650000000000000000000000000000000000815250828280615f3190619e42565b935060ff1681518110615f4657615f46619cd5565b602002602001018190525086828280615f5e90619e42565b935060ff1681518110615f7357615f73619cd5565b602090810291909101015285511561609a5760408051808201909152601581527f2d2d636f6e7374727563746f7242797465636f6465000000000000000000000060208201528282615fc481619e42565b935060ff1681518110615fd957615fd9619cd5565b60209081029190910101526040517f71aad10d0000000000000000000000000000000000000000000000000000000081526001600160a01b038416906371aad10d90616029908990600401619854565b600060405180830381865afa158015616046573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261606e91908101906196cb565b828261607981619e42565b935060ff168151811061608e5761608e619cd5565b60200260200101819052505b84602001511561616a5760408051808201909152601281527f2d2d766572696679536f75726365436f64650000000000000000000000000000602082015282826160e381619e42565b935060ff16815181106160f8576160f8619cd5565b60200260200101819052506040518060400160405280600581526020017f66616c736500000000000000000000000000000000000000000000000000000081525082828061614590619e42565b935060ff168151811061615a5761615a619cd5565b6020026020010181905250616331565b6161a2615a478660a0015160408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6162355760408051808201909152600d81527f2d2d6c6963656e73655479706500000000000000000000000000000000000000602082015282826161e581619e42565b935060ff16815181106161fa576161fa619cd5565b60200260200101819052508460a0015160405160200161621a9190619d04565b60405160208183030381529060405282828061614590619e42565b8460c0015115801561627857506040808901518151808301835260008082526020918201528251808401909352815183529081019082015261627690511590565b155b156163315760408051808201909152600d81527f2d2d6c6963656e73655479706500000000000000000000000000000000000000602082015282826162bc81619e42565b935060ff16815181106162d1576162d1619cd5565b60200260200101819052506162e5886174c7565b6040516020016162f59190619d04565b60405160208183030381529060405282828061631090619e42565b935060ff168151811061632557616325619cd5565b60200260200101819052505b6040808601518151808301835260008082526020918201528251808401909352815183529081019082015261636590511590565b6163fa5760408051808201909152600b81527f2d2d72656c617965724964000000000000000000000000000000000000000000602082015282826163a881619e42565b935060ff16815181106163bd576163bd619cd5565b602002602001018190525084604001518282806163d990619e42565b935060ff16815181106163ee576163ee619cd5565b60200260200101819052505b60608501511561651b5760408051808201909152600681527f2d2d73616c7400000000000000000000000000000000000000000000000000006020820152828261644381619e42565b935060ff168151811061645857616458619cd5565b602090810291909101015260608501516040517fb11a19e800000000000000000000000000000000000000000000000000000000815260048101919091526001600160a01b0384169063b11a19e890602401600060405180830381865afa1580156164c7573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526164ef91908101906196cb565b82826164fa81619e42565b935060ff168151811061650f5761650f619cd5565b60200260200101819052505b60e085015151156165c25760408051808201909152600a81527f2d2d6761734c696d6974000000000000000000000000000000000000000000006020820152828261656581619e42565b935060ff168151811061657a5761657a619cd5565b60200260200101819052506165968560e0015160000151617427565b82826165a181619e42565b935060ff16815181106165b6576165b6619cd5565b60200260200101819052505b60e0850151602001511561666c5760408051808201909152600a81527f2d2d6761735072696365000000000000000000000000000000000000000000006020820152828261660f81619e42565b935060ff168151811061662457616624619cd5565b60200260200101819052506166408560e0015160200151617427565b828261664b81619e42565b935060ff168151811061666057616660619cd5565b60200260200101819052505b60e085015160400151156167165760408051808201909152600e81527f2d2d6d6178466565506572476173000000000000000000000000000000000000602082015282826166b981619e42565b935060ff16815181106166ce576166ce619cd5565b60200260200101819052506166ea8560e0015160400151617427565b82826166f581619e42565b935060ff168151811061670a5761670a619cd5565b60200260200101819052505b60e085015160600151156167c05760408051808201909152601681527f2d2d6d61785072696f72697479466565506572476173000000000000000000006020820152828261676381619e42565b935060ff168151811061677857616778619cd5565b60200260200101819052506167948560e0015160600151617427565b828261679f81619e42565b935060ff16815181106167b4576167b4619cd5565b60200260200101819052505b60008160ff1667ffffffffffffffff8111156167de576167de619603565b60405190808252806020026020018201604052801561681157816020015b60608152602001906001900390816167fc5790505b50905060005b8260ff168160ff16101561686a57838160ff168151811061683a5761683a619cd5565b6020026020010151828260ff168151811061685757616857619cd5565b6020908102919091010152600101616817565b5093505050505b949350505050565b6168a06040518060600160405280600060030b815260200160608152602001606081525090565b60408051808201825260048082527f6261736800000000000000000000000000000000000000000000000000000000602083015291517fd145736c000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d92600091849163d145736c9161692691869101619ecc565b600060405180830381865afa158015616943573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261696b91908101906196cb565b905060006169798683617fb6565b90506000846001600160a01b031663f45c1ce7836040518263ffffffff1660e01b81526004016169a991906192f3565b6000604051808303816000875af11580156169c8573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526169f09190810190619f13565b805190915060030b15801590616a095750602081015151155b8015616a185750604081015151155b156159f25781600081518110616a3057616a30619cd5565b602002602001015160405160200161504b9190619fc9565b60606000616a7d8560408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600080825260209182015281518083019092528651825280870190820152909150616ab49082905b9061810b565b15616c11576000616b3182616b2b84616b25616af78a60408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6040805180820182526000808252602091820152815180830190925282518252918201519181019190915290565b90618132565b90618194565b604080518082018252600181527f0a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152909150616b9590829061810b565b15616bff57604080518082018252600181527f0a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616bfc905b8290618219565b90505b616c088161823f565b92505050614f78565b8215616c2a57848460405160200161504b92919061a1b5565b5050604080516020810190915260008152614f78565b509392505050565b6000808251602084016000f09392505050565b8160a0015115616c6a57505050565b6000616c778484846182a8565b90506000616c8482616879565b602081015181519192509060030b158015616d205750604080518082018252600781527f535543434553530000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616d2090604080518082018252600080825260209182015281518083019092528451825280850190820152616aae565b15616d2d57505050505050565b60408201515115616d4d57816040015160405160200161504b919061a25c565b8060405160200161504b919061a2ba565b60606000616d938360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600481527f2e736f6c0000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152909150616df8905b82906173c6565b15616e6757604080518082018252600481527f2e736f6c0000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152614f7890616e62908390618843565b61823f565b604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616ec9905b82906188cd565b600103616f9657604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616f2f90616bf5565b50604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152614f7890616e62905b8390618219565b604080518082018252600581527f2e6a736f6e00000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616ff590616df1565b1561712c57604080518082018252600181527f2f0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082018190528451808601909552925184528301529061705d908390618967565b9050600081600183516170709190619779565b8151811061708057617080619cd5565b60200260200101519050617123616e626170f66040518060400160405280600581526020017f2e6a736f6e00000000000000000000000000000000000000000000000000000081525060408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b60408051808201825260008082526020918201528151808301909252855182528086019082015290618843565b95945050505050565b8260405160200161504b919061a325565b50919050565b606060006171788360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600481527f2e736f6c00000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201529091506171da90616df1565b156171e857614f788161823f565b604080518082018252600181527f3a000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261724790616ec2565b6001036172b157604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152614f7890616e6290616f8f565b604080518082018252600581527f2e6a736f6e0000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261731090616df1565b1561712c57604080518082018252600181527f2f00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820181905284518086019095529251845283015290617378908390618967565b90506001815111156173b45780600282516173939190619779565b815181106173a3576173a3619cd5565b602002602001015192505050919050565b508260405160200161504b919061a325565b8051825160009111156173db57506000614dc3565b815183516020850151600092916173f191619766565b6173fb9190619779565b905082602001518103617412576001915050614dc3565b82516020840151819020912014905092915050565b6060600061743483618a0c565b600101905060008167ffffffffffffffff81111561745457617454619603565b6040519080825280601f01601f19166020018201604052801561747e576020820181803683370190505b5090508181016020015b600019017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a850494508461748857509392505050565b604081810151815180830183526000808252602091820181905283518085018552835181529282018383015283518085018552600a81527f554e4c4943454e5345440000000000000000000000000000000000000000000081840190815285518087018752838152840192909252845180860190955251845290830152606091617553905b8290618aee565b1561759357505060408051808201909152600481527f4e6f6e65000000000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600981527f556e6c6963656e73650000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526175f29061754c565b1561763257505060408051808201909152600981527f556e6c6963656e736500000000000000000000000000000000000000000000006020820152919050565b604080518082018252600381527f4d49540000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526176919061754c565b156176d157505060408051808201909152600381527f4d495400000000000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f47504c2d322e302d6f6e6c790000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526177309061754c565b806177955750604080518082018252601081527f47504c2d322e302d6f722d6c6174657200000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526177959061754c565b156177d557505060408051808201909152600981527f474e552047504c763200000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f47504c2d332e302d6f6e6c790000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526178349061754c565b806178995750604080518082018252601081527f47504c2d332e302d6f722d6c6174657200000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526178999061754c565b156178d957505060408051808201909152600981527f474e552047504c763300000000000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4c47504c2d322e312d6f6e6c7900000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526179389061754c565b8061799d5750604080518082018252601181527f4c47504c2d322e312d6f722d6c617465720000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261799d9061754c565b156179dd57505060408051808201909152600c81527f474e55204c47504c76322e3100000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4c47504c2d332e302d6f6e6c790000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617a3c9061754c565b80617aa15750604080518082018252601181527f4c47504c2d332e302d6f722d6c6174657200000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617aa19061754c565b15617ae157505060408051808201909152600a81527f474e55204c47504c7633000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f4253442d322d436c61757365000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617b409061754c565b15617b8057505060408051808201909152600c81527f4253442d322d436c6175736500000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f4253442d332d436c61757365000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617bdf9061754c565b15617c1f57505060408051808201909152600c81527f4253442d332d436c6175736500000000000000000000000000000000000000006020820152919050565b604080518082018252600781527f4d504c2d322e300000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617c7e9061754c565b15617cbe57505060408051808201909152600781527f4d504c2d322e30000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600781527f4f534c2d332e300000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617d1d9061754c565b15617d5d57505060408051808201909152600781527f4f534c2d332e30000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600a81527f4170616368652d322e300000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617dbc9061754c565b15617dfc57505060408051808201909152600a81527f4170616368652d322e30000000000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4147504c2d332e302d6f6e6c790000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617e5b9061754c565b80617ec05750604080518082018252601181527f4147504c2d332e302d6f722d6c6174657200000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617ec09061754c565b15617f0057505060408051808201909152600a81527f474e55204147504c7633000000000000000000000000000000000000000000006020820152919050565b604080518082018252600881527f4255534c2d312e3100000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617f5f9061754c565b15617f9f57505060408051808201909152600781527f42534c20312e31000000000000000000000000000000000000000000000000006020820152919050565b6040808401518451915161504b929060200161a403565b60608060005b84518110156180415781858281518110617fd857617fd8619cd5565b6020026020010151604051602001617ff19291906198bc565b6040516020818303038152906040529150600185516180109190619779565b81146180395781604051602001618027919061a56c565b60405160208183030381529060405291505b600101617fbc565b5060408051600380825260808201909252600091816020015b606081526020019060019003908161805a579050509050838160008151811061808557618085619cd5565b60200260200101819052506040518060400160405280600281526020017f2d63000000000000000000000000000000000000000000000000000000000000815250816001815181106180d9576180d9619cd5565b602002602001018190525081816002815181106180f8576180f8619cd5565b6020908102919091010152949350505050565b60208083015183518351928401516000936181299291849190618b02565b14159392505050565b604080518082019091526000808252602082015260006181648460000151856020015185600001518660200151618c13565b90508360200151816181769190619779565b84518590618185908390619779565b90525060208401525090919050565b60408051808201909152600080825260208201528151835110156181b9575081614dc3565b60208083015190840151600191146181e05750815160208481015190840151829020919020145b8015618211578251845185906181f7908390619779565b905250825160208501805161820d908390619766565b9052505b509192915050565b6040805180820190915260008082526020820152618238838383618d33565b5092915050565b60606000826000015167ffffffffffffffff81111561826057618260619603565b6040519080825280601f01601f19166020018201604052801561828a576020820181803683370190505b50905060006020820190506182388185602001518660000151618dde565b606060006182b4615271565b6040805160ff808252612000820190925291925060009190816020015b60608152602001906001900390816182d157905050905060006040518060400160405280600381526020017f6e7078000000000000000000000000000000000000000000000000000000000081525082828061832c90619e42565b935060ff168151811061834157618341619cd5565b60200260200101819052506040518060400160405280600781526020017f5e312e33322e3300000000000000000000000000000000000000000000000000815250604051602001618392919061a5ad565b6040516020818303038152906040528282806183ad90619e42565b935060ff16815181106183c2576183c2619cd5565b60200260200101819052506040518060400160405280600881526020017f76616c696461746500000000000000000000000000000000000000000000000081525082828061840f90619e42565b935060ff168151811061842457618424619cd5565b6020026020010181905250826040516020016184409190619d70565b60405160208183030381529060405282828061845b90619e42565b935060ff168151811061847057618470619cd5565b60200260200101819052506040518060400160405280600a81526020017f2d2d636f6e7472616374000000000000000000000000000000000000000000008152508282806184bd90619e42565b935060ff16815181106184d2576184d2619cd5565b60200260200101819052506184e78784618e58565b82826184f281619e42565b935060ff168151811061850757618507619cd5565b6020908102919091010152855151156185b35760408051808201909152600b81527f2d2d7265666572656e63650000000000000000000000000000000000000000006020820152828261855981619e42565b935060ff168151811061856e5761856e619cd5565b6020026020010181905250618587866000015184618e58565b828261859281619e42565b935060ff16815181106185a7576185a7619cd5565b60200260200101819052505b8560800151156186215760408051808201909152601881527f2d2d756e73616665536b697053746f72616765436865636b0000000000000000602082015282826185fc81619e42565b935060ff168151811061861157618611619cd5565b6020026020010181905250618687565b84156186875760408051808201909152601281527f2d2d726571756972655265666572656e636500000000000000000000000000006020820152828261866681619e42565b935060ff168151811061867b5761867b619cd5565b60200260200101819052505b604086015151156187235760408051808201909152600d81527f2d2d756e73616665416c6c6f7700000000000000000000000000000000000000602082015282826186d181619e42565b935060ff16815181106186e6576186e6619cd5565b6020026020010181905250856040015182828061870290619e42565b935060ff168151811061871757618717619cd5565b60200260200101819052505b85606001511561878d5760408051808201909152601481527f2d2d756e73616665416c6c6f7752656e616d65730000000000000000000000006020820152828261876c81619e42565b935060ff168151811061878157618781619cd5565b60200260200101819052505b60008160ff1667ffffffffffffffff8111156187ab576187ab619603565b6040519080825280602002602001820160405280156187de57816020015b60608152602001906001900390816187c95790505b50905060005b8260ff168160ff16101561883757838160ff168151811061880757618807619cd5565b6020026020010151828260ff168151811061882457618824619cd5565b60209081029190910101526001016187e4565b50979650505050505050565b6040805180820190915260008082526020820152815183511015618868575081614dc3565b8151835160208501516000929161887e91619766565b6188889190619779565b602084015190915060019082146188a9575082516020840151819020908220145b80156188c4578351855186906188c0908390619779565b9052505b50929392505050565b60008082600001516188f18560000151866020015186600001518760200151618c13565b6188fb9190619766565b90505b8351602085015161890f9190619766565b8111618238578161891f8161a5f2565b925050826000015161895685602001518361893a9190619779565b86516189469190619779565b8386600001518760200151618c13565b6189609190619766565b90506188fe565b6060600061897584846188cd565b618980906001619766565b67ffffffffffffffff81111561899857618998619603565b6040519080825280602002602001820160405280156189cb57816020015b60608152602001906001900390816189b65790505b50905060005b8151811015616c40576189e7616e628686618219565b8282815181106189f9576189f9619cd5565b60209081029190910101526001016189d1565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310618a55577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310618a81576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc100008310618a9f57662386f26fc10000830492506010015b6305f5e1008310618ab7576305f5e100830492506008015b6127108310618acb57612710830492506004015b60648310618add576064830492506002015b600a8310614dc35760010192915050565b6000618afa8383618e98565b159392505050565b600080858411618c095760208411618bb55760008415618b4d576001618b29866020619779565b618b3490600861a60c565b618b3f90600261a70a565b618b499190619779565b1990505b8351811685618b5c8989619766565b618b669190619779565b805190935082165b818114618ba057878411618b885787945050505050616871565b83618b928161a716565b945050828451169050618b6e565b618baa8785619766565b945050505050616871565b838320618bc28588619779565b618bcc9087619766565b91505b858210618c0757848220808203618bf457618bea8684619766565b9350505050616871565b618bff600184619779565b925050618bcf565b505b5092949350505050565b60008381868511618d1e5760208511618ccd5760008515618c5f576001618c3b876020619779565b618c4690600861a60c565b618c5190600261a70a565b618c5b9190619779565b1990505b84518116600087618c708b8b619766565b618c7a9190619779565b855190915083165b828114618cbf57818610618ca757618c9a8b8b619766565b9650505050505050616871565b85618cb18161a5f2565b965050838651169050618c82565b859650505050505050616871565b508383206000905b618cdf8689619779565b8211618d1c57858320808203618cfb5783945050505050616871565b618d06600185619766565b9350508180618d149061a5f2565b925050618cd5565b505b618d288787619766565b979650505050505050565b60408051808201909152600080825260208201526000618d658560000151866020015186600001518760200151618c13565b602080870180519186019190915251909150618d819082619779565b835284516020860151618d949190619766565b8103618da35760008552618dd5565b83518351618db19190619766565b85518690618dc0908390619779565b9052508351618dcf9082619766565b60208601525b50909392505050565b60208110618e165781518352618df5602084619766565b9250618e02602083619766565b9150618e0f602082619779565b9050618dde565b6000198115618e45576001618e2c836020619779565b618e389061010061a70a565b618e429190619779565b90505b9151835183169219169190911790915250565b60606000618e668484615344565b8051602080830151604051939450618e809390910161a72d565b60405160208183030381529060405291505092915050565b8151815160009190811115618eab575081515b6020808501519084015160005b83811015618f645782518251808214618f34576000196020871015618f1357600184618ee5896020619779565b618eef9190619766565b618efa90600861a60c565b618f0590600261a70a565b618f0f9190619779565b1990505b8181168382168181039114618f31579750614dc39650505050505050565b50505b618f3f602086619766565b9450618f4c602085619766565b93505050602081618f5d9190619766565b9050618eb8565b50845186516159f2919061a785565b610b678061a7a683390190565b61106f8061b30d83390190565b611bb98061c37c83390190565b6040518060e00160405280606081526020016060815260200160608152602001600015158152602001600015158152602001600015158152602001618fdd618fe2565b905290565b60405180610100016040528060001515815260200160001515815260200160608152602001600080191681526020016060815260200160608152602001600015158152602001618fdd6040518060800160405280600081526020016000815260200160008152602001600081525090565b602080825282518282018190526000918401906040840190835b818110156190945783516001600160a01b031683526020938401939092019160010161906d565b509095945050505050565b60005b838110156190ba5781810151838201526020016190a2565b50506000910152565b600081518084526190db81602086016020860161909f565b601f01601f19169290920160200192915050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b828110156191eb577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452815180516001600160a01b03168652602090810151604082880181905281519088018190529101906060600582901b88018101919088019060005b818110156191d1577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa08a85030183526191bb8486516190c3565b6020958601959094509290920191600101619181565b509197505050602094850194929092019150600101619117565b50929695505050505050565b600081518084526020840193506020830160005b8281101561924b5781517fffffffff000000000000000000000000000000000000000000000000000000001686526020958601959091019060010161920b565b5093949350505050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b828110156191eb577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc087860301845281518051604087526192c160408801826190c3565b90506020820151915086810360208801526192dc81836191f7565b96505050602093840193919091019060010161927d565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b828110156191eb577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08786030184526193558583516190c3565b9450602093840193919091019060010161931b565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b828110156191eb577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc087860301845281516001600160a01b03815116865260208101519050604060208701526193eb60408701826191f7565b9550506020938401939190910190600101619392565b60006020828403121561941357600080fd5b81518015158114614f7857600080fd5b80516001600160a01b038116811461943a57600080fd5b919050565b60006020828403121561945157600080fd5b614f7882619423565b610100815260056101008201527f544f4b454e000000000000000000000000000000000000000000000000000000610120820152610140602082015260036101408201527f544b4e000000000000000000000000000000000000000000000000000000000061016082015260006101808201905060ff8816604083015286606083015260038610619514577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b8560808301528460a083015261953560c08301856001600160a01b03169052565b6001600160a01b03831660e0830152979650505050505050565b60006020828403121561956157600080fd5b5051919050565b600181811c9082168061957c57607f821691505b60208210810361713d577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600080604083850312156195c857600080fd5b6195d183619423565b6020939093015192949293505050565b6040815260006195f460408301856190c3565b90508260208301529392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040516060810167ffffffffffffffff8111828210171561965557619655619603565b60405290565b60008067ffffffffffffffff84111561967657619676619603565b50604051601f19601f85018116603f0116810181811067ffffffffffffffff821117156196a5576196a5619603565b6040528381529050808284018510156196bd57600080fd5b616c4084602083018561909f565b6000602082840312156196dd57600080fd5b815167ffffffffffffffff8111156196f457600080fd5b8201601f8101841361970557600080fd5b614dbf8482516020840161965b565b60006020828403121561972657600080fd5b815160ff81168114614f7857600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b80820180821115614dc357614dc3619737565b81810381811115614dc357614dc3619737565b60408152600061979f60408301856190c3565b8281036020840152614f7481856190c3565b6001600160a01b038316815260406020820152600061687160408301846190c3565b7f4661696c656420746f206465706c6f7920636f6e74726163742000000000000081526000835161980b81601a85016020880161909f565b7f3a20000000000000000000000000000000000000000000000000000000000000601a91840191820152835161984881601c84016020880161909f565b01601c01949350505050565b602081526000614f7860208301846190c3565b600082601f83011261987857600080fd5b614f788383516020850161965b565b60006020828403121561989957600080fd5b815167ffffffffffffffff8111156198b057600080fd5b614dbf84828501619867565b600083516198ce81846020880161909f565b8351908301906198e281836020880161909f565b01949350505050565b7f4661696c656420746f206465706c6f7920636f6e74726163742000000000000081526000835161992381601a85016020880161909f565b7f207573696e6720636f6e7374727563746f722064617461202200000000000000601a91840191820152835161996081603384016020880161909f565b7f220000000000000000000000000000000000000000000000000000000000000060339290910191820152603401949350505050565b60408152600b60408201527f464f554e4452595f4f55540000000000000000000000000000000000000000006060820152608060208201526000614f7860808301846190c3565b600085516199ef818460208a0161909f565b7f2f000000000000000000000000000000000000000000000000000000000000009083019081528551619a29816001840160208a0161909f565b7f2f00000000000000000000000000000000000000000000000000000000000000600192909101918201528451619a6781600284016020890161909f565b6001818301019150507f2f0000000000000000000000000000000000000000000000000000000000000060018201528351619aa981600284016020880161909f565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600292909101918201526007019695505050505050565b604081526000619af460408301846190c3565b8281036020840152600481527f2e6173740000000000000000000000000000000000000000000000000000000060208201526040810191505092915050565b7f436f756c64206e6f742066696e642041535420696e2061727469666163742000815260008251619b6b81601f85016020870161909f565b7f2e205365742060617374203d20747275656020696e20666f756e6472792e746f601f9390910192830152507f6d6c000000000000000000000000000000000000000000000000000000000000603f820152604101919050565b604081526000619bd860408301846190c3565b8281036020840152601181527f2e6173742e6162736f6c7574655061746800000000000000000000000000000060208201526040810191505092915050565b604081526000619c2a60408301846190c3565b8281036020840152600c81527f2e6173742e6c6963656e7365000000000000000000000000000000000000000060208201526040810191505092915050565b7f2e6d657461646174612e736f75726365732e5b27000000000000000000000000815260008251619ca181601485016020870161909f565b7f275d2e6b656363616b32353600000000000000000000000000000000000000006014939091019283015250602001919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f2200000000000000000000000000000000000000000000000000000000000000815260008251619d3c81600185016020870161909f565b7f22000000000000000000000000000000000000000000000000000000000000006001939091019283015250600201919050565b60008251619d8281846020870161909f565b7f2f6275696c642d696e666f000000000000000000000000000000000000000000920191825250600b01919050565b7f436f756c64206e6f742066696e64206275696c642d696e666f2066696c65207781527f697468206d61746368696e6720736f7572636520636f6465206861736820666f60208201527f7220636f6e747261637420000000000000000000000000000000000000000000604082015260008251619e3581604b85016020870161909f565b91909101604b0192915050565b600060ff821660ff8103619e5857619e58619737565b60010192915050565b7f406f70656e7a657070656c696e2f646566656e6465722d6465706c6f792d636c81527f69656e742d636c69400000000000000000000000000000000000000000000000602082015260008251619ebf81602985016020870161909f565b9190910160290192915050565b60408152601660408201527f4f50454e5a455050454c494e5f424153485f50415448000000000000000000006060820152608060208201526000614f7860808301846190c3565b600060208284031215619f2557600080fd5b815167ffffffffffffffff811115619f3c57600080fd5b820160608185031215619f4e57600080fd5b619f56619632565b81518060030b8114619f6757600080fd5b8152602082015167ffffffffffffffff811115619f8357600080fd5b619f8f86828501619867565b602083015250604082015167ffffffffffffffff811115619faf57600080fd5b619fbb86828501619867565b604083015250949350505050565b7f4661696c656420746f2072756e206261736820636f6d6d616e6420776974682081527f220000000000000000000000000000000000000000000000000000000000000060208201526000825161a02781602185016020870161909f565b7f222e20496620796f7520617265207573696e672057696e646f77732c2073657460219390910192830152507f20746865204f50454e5a455050454c494e5f424153485f5041544820656e766960418201527f726f6e6d656e74207661726961626c6520746f207468652066756c6c7920717560618201527f616c69666965642070617468206f66207468652062617368206578656375746160818201527f626c652e20466f72206578616d706c652c20696620796f75206172652075736960a18201527f6e672047697420666f722057696e646f77732c206164642074686520666f6c6c60c18201527f6f77696e67206c696e6520696e20746865202e656e762066696c65206f66207960e18201527f6f75722070726f6a65637420287573696e6720666f727761726420736c6173686101018201527f6573293a0a4f50454e5a455050454c494e5f424153485f504154483d22433a2f6101218201527f50726f6772616d2046696c65732f4769742f62696e2f6261736822000000000061014182015261015c01919050565b7f4661696c656420746f2066696e64206c696e652077697468207072656669782081527f270000000000000000000000000000000000000000000000000000000000000060208201526000835161a21381602185016020880161909f565b7f2720696e206f75747075743a2000000000000000000000000000000000000000602191840191820152835161a25081602e84016020880161909f565b01602e01949350505050565b7f4661696c656420746f2072756e2075706772616465207361666574792076616c81527f69646174696f6e3a200000000000000000000000000000000000000000000000602082015260008251619ebf81602985016020870161909f565b7f55706772616465207361666574792076616c69646174696f6e206661696c656481527f3a0a00000000000000000000000000000000000000000000000000000000000060208201526000825161a31881602285016020870161909f565b9190910160220192915050565b7f436f6e7472616374206e616d652000000000000000000000000000000000000081526000825161a35d81600e85016020870161909f565b7f206d75737420626520696e2074686520666f726d6174204d79436f6e74726163600e9390910192830152507f742e736f6c3a4d79436f6e7472616374206f72204d79436f6e74726163742e73602e8201527f6f6c206f72206f75742f4d79436f6e74726163742e736f6c2f4d79436f6e7472604e8201527f6163742e6a736f6e000000000000000000000000000000000000000000000000606e820152607601919050565b7f53504458206c6963656e7365206964656e74696669657220000000000000000081526000835161a43b81601885016020880161909f565b7f20696e2000000000000000000000000000000000000000000000000000000000601891840191820152835161a47881601c84016020880161909f565b7f20646f6573206e6f74206c6f6f6b206c696b65206120737570706f7274656420601c92909101918201527f6c6963656e736520666f7220626c6f636b206578706c6f726572207665726966603c8201527f69636174696f6e2e205573652074686520606c6963656e73655479706560206f605c8201527f7074696f6e20746f20737065636966792061206c6963656e736520747970652c607c8201527f206f7220736574207468652060736b69704c6963656e73655479706560206f70609c8201527f74696f6e20746f2060747275656020746f20736b69702e00000000000000000060bc82015260d301949350505050565b6000825161a57e81846020870161909f565b7f2000000000000000000000000000000000000000000000000000000000000000920191825250600101919050565b7f406f70656e7a657070656c696e2f75706772616465732d636f7265400000000081526000825161a5e581601c85016020870161909f565b91909101601c0192915050565b6000600019820361a6055761a605619737565b5060010190565b8082028115828204841417614dc357614dc3619737565b6001815b600184111561a65e5780850481111561a6425761a642619737565b600184161561a65057908102905b60019390931c92800261a627565b935093915050565b60008261a67557506001614dc3565b8161a68257506000614dc3565b816001811461a698576002811461a6a25761a6be565b6001915050614dc3565b60ff84111561a6b35761a6b3619737565b50506001821b614dc3565b5060208310610133831016604e8410600b841016171561a6e1575081810a614dc3565b61a6ee600019848461a623565b806000190482111561a7025761a702619737565b029392505050565b6000614f78838361a666565b60008161a7255761a725619737565b506000190190565b6000835161a73f81846020880161909f565b7f3a00000000000000000000000000000000000000000000000000000000000000908301908152835161a77981600184016020880161909f565b01600101949350505050565b81810360008312801583831316838312821617156182385761823861973756fe60c0604052600d60809081526c2bb930b83832b21022ba3432b960991b60a05260009061002c9082610114565b506040805180820190915260048152630ae8aa8960e31b60208201526001906100559082610114565b506002805460ff1916601217905534801561006f57600080fd5b506101d2565b634e487b7160e01b600052604160045260246000fd5b600181811c9082168061009f57607f821691505b6020821081036100bf57634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111561010f57806000526020600020601f840160051c810160208510156100ec5750805b601f840160051c820191505b8181101561010c57600081556001016100f8565b50505b505050565b81516001600160401b0381111561012d5761012d610075565b6101418161013b845461008b565b846100c5565b6020601f821160018114610175576000831561015d5750848201515b600019600385901b1c1916600184901b17845561010c565b600084815260208120601f198516915b828110156101a55787850151825560209485019460019092019101610185565b50848210156101c35786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b610986806101e16000396000f3fe6080604052600436106100c05760003560e01c8063313ce56711610074578063a9059cbb1161004e578063a9059cbb146101fa578063d0e30db01461021a578063dd62ed3e1461022257600080fd5b8063313ce5671461018c57806370a08231146101b857806395d89b41146101e557600080fd5b806318160ddd116100a557806318160ddd1461012f57806323b872dd1461014c5780632e1a7d4d1461016c57600080fd5b806306fdde03146100d4578063095ea7b3146100ff57600080fd5b366100cf576100cd61025a565b005b600080fd5b3480156100e057600080fd5b506100e96102b5565b6040516100f69190610745565b60405180910390f35b34801561010b57600080fd5b5061011f61011a3660046107da565b610343565b60405190151581526020016100f6565b34801561013b57600080fd5b50475b6040519081526020016100f6565b34801561015857600080fd5b5061011f610167366004610804565b6103bd565b34801561017857600080fd5b506100cd610187366004610841565b610647565b34801561019857600080fd5b506002546101a69060ff1681565b60405160ff90911681526020016100f6565b3480156101c457600080fd5b5061013e6101d336600461085a565b60036020526000908152604090205481565b3480156101f157600080fd5b506100e9610724565b34801561020657600080fd5b5061011f6102153660046107da565b610731565b6100cd61025a565b34801561022e57600080fd5b5061013e61023d366004610875565b600460209081526000928352604080842090915290825290205481565b33600090815260036020526040812080543492906102799084906108d7565b909155505060405134815233907fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c9060200160405180910390a2565b600080546102c2906108ea565b80601f01602080910402602001604051908101604052809291908181526020018280546102ee906108ea565b801561033b5780601f106103105761010080835404028352916020019161033b565b820191906000526020600020905b81548152906001019060200180831161031e57829003601f168201915b505050505081565b33600081815260046020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925906103ab9086815260200190565b60405180910390a35060015b92915050565b73ffffffffffffffffffffffffffffffffffffffff831660009081526003602052604081205482111561042b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600060248201526044015b60405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff841633148015906104a1575073ffffffffffffffffffffffffffffffffffffffff841660009081526004602090815260408083203384529091529020547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff14155b156105605773ffffffffffffffffffffffffffffffffffffffff8416600090815260046020908152604080832033845290915290205482111561051a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526020600482015260006024820152604401610422565b73ffffffffffffffffffffffffffffffffffffffff841660009081526004602090815260408083203384529091528120805484929061055a90849061093d565b90915550505b73ffffffffffffffffffffffffffffffffffffffff84166000908152600360205260408120805484929061059590849061093d565b909155505073ffffffffffffffffffffffffffffffffffffffff8316600090815260036020526040812080548492906105cf9084906108d7565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161063591815260200190565b60405180910390a35060019392505050565b3360009081526003602052604090205481111561069a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526020600482015260006024820152604401610422565b33600090815260036020526040812080548392906106b990849061093d565b9091555050604051339082156108fc029083906000818181858888f193505050501580156106eb573d6000803e3d6000fd5b5060405181815233907f7fcf532c15f0a6db0bd6d0e038bea71d30d808c7d98cb3bf7268a95bf5081b659060200160405180910390a250565b600180546102c2906108ea565b600061073e3384846103bd565b9392505050565b602081526000825180602084015260005b818110156107735760208186018101516040868401015201610756565b5060006040828501015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011684010191505092915050565b803573ffffffffffffffffffffffffffffffffffffffff811681146107d557600080fd5b919050565b600080604083850312156107ed57600080fd5b6107f6836107b1565b946020939093013593505050565b60008060006060848603121561081957600080fd5b610822846107b1565b9250610830602085016107b1565b929592945050506040919091013590565b60006020828403121561085357600080fd5b5035919050565b60006020828403121561086c57600080fd5b61073e826107b1565b6000806040838503121561088857600080fd5b610891836107b1565b915061089f602084016107b1565b90509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b808201808211156103b7576103b76108a8565b600181811c908216806108fe57607f821691505b602082108103610937577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b818103818111156103b7576103b76108a856fea264697066735822122008d7fc4e09519c5dd9f356b03596f6829a151d0bc7682533f9ceab4e459f5ee264736f6c634300081a003360c060405234801561001057600080fd5b5060405161106f38038061106f83398101604081905261002f916100db565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461006357604051632b2add3d60e01b815260040160405180910390fd5b600380546001600160a01b0319166001600160a01b0385811691909117909155828116608052811660a0526040517f80699e81136d69cb8367ad52a994e25c722a86da654b561d0c14b61a777e7ac590600090a150505061011e565b80516001600160a01b03811681146100d657600080fd5b919050565b6000806000606084860312156100f057600080fd5b6100f9846100bf565b9250610107602085016100bf565b9150610115604085016100bf565b90509250925092565b60805160a051610f2561014a60003960006101e50152600081816102b9015261045b0152610f256000f3fe608060405234801561001057600080fd5b50600436106100f55760003560e01c806397770dff11610097578063c63585cc11610066578063c63585cc14610273578063d7fd7afb14610286578063d936a012146102b4578063ee2815ba146102db57600080fd5b806397770dff1461021a578063a7cb05071461022d578063c39aca3714610240578063c62178ac1461025357600080fd5b8063513a9c05116100d3578063513a9c051461018a578063569541b9146101c0578063842da36d146101e057806391dd645f1461020757600080fd5b80630be15547146100fa5780631f0e251b1461015a5780633ce4a5bc1461016f575b600080fd5b610130610108366004610bd1565b60016020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b61016d610168366004610c13565b6102ee565b005b61013073735b14bb79463307aacbed86daf3322b1e6226ab81565b610130610198366004610bd1565b60026020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b6003546101309073ffffffffffffffffffffffffffffffffffffffff1681565b6101307f000000000000000000000000000000000000000000000000000000000000000081565b61016d610215366004610c35565b610402565b61016d610228366004610c13565b610526565b61016d61023b366004610c61565b610633565b61016d61024e366004610c83565b6106ce565b6004546101309073ffffffffffffffffffffffffffffffffffffffff1681565b610130610281366004610d53565b6108cd565b6102a6610294366004610bd1565b60006020819052908152604090205481565b604051908152602001610151565b6101307f000000000000000000000000000000000000000000000000000000000000000081565b61016d6102e9366004610c35565b610a02565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461033b576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116610388576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600480547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527f3ade88e3922d64780e1bf4460d364c2970b69da813f9c0c07a1c187b5647636c906020015b60405180910390a150565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461044f576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600354600090610497907f00000000000000000000000000000000000000000000000000000000000000009073ffffffffffffffffffffffffffffffffffffffff16846108cd565b60008481526002602090815260409182902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff85169081179091558251878152918201529192507f0ecec485166da6139b13bb7e033e9446e2d35348e80ebf1180d4afe2dba1704e910160405180910390a1505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610573576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff81166105c0576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527fdba79d534382d1a8ae108e4c8ecb27c6ae42ab8b91d44eedf88bd329f3868d5e906020016103f7565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610680576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000828152602081815260409182902083905581518481529081018390527f49f492222906ac486c3c1401fa545626df1f0c0e5a77a05597ea2ed66af9850d91015b60405180910390a15050565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461071b576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff831673735b14bb79463307aacbed86daf3322b1e6226ab1480610768575073ffffffffffffffffffffffffffffffffffffffff831630145b1561079f576040517f82d5d76a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f47e7ef2400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152602482018690528616906347e7ef24906044016020604051808303816000875af1158015610814573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108389190610d96565b506040517fde43156e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84169063de43156e906108939089908990899088908890600401610e01565b600060405180830381600087803b1580156108ad57600080fd5b505af11580156108c1573d6000803e3d6000fd5b50505050505050505050565b60008060006108dc8585610ad3565b6040517fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606084811b8216602084015283901b16603482015291935091508690604801604051602081830303815290604052805190602001206040516020016109c29291907fff00000000000000000000000000000000000000000000000000000000000000815260609290921b7fffffffffffffffffffffffffffffffffffffffff00000000000000000000000016600183015260158201527f96e8ac4277198ff8b6f785478aa9a39f403cb768dd02cbee326c3e7da348845f603582015260550190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291905280516020909101209695505050505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610a4f576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008281526001602090815260409182902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff85169081179091558251858152918201527fd1b36d30f6248e97c473b4d1348ca164a4ef6759022f54a58ec200326c39c45d91016106c2565b6000808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603610b3b576040517fcb1e7cfe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1610610b75578284610b78565b83835b909250905073ffffffffffffffffffffffffffffffffffffffff8216610bca576040517f78b507da00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b9250929050565b600060208284031215610be357600080fd5b5035919050565b803573ffffffffffffffffffffffffffffffffffffffff81168114610c0e57600080fd5b919050565b600060208284031215610c2557600080fd5b610c2e82610bea565b9392505050565b60008060408385031215610c4857600080fd5b82359150610c5860208401610bea565b90509250929050565b60008060408385031215610c7457600080fd5b50508035926020909101359150565b60008060008060008060a08789031215610c9c57600080fd5b863567ffffffffffffffff811115610cb357600080fd5b87016060818a031215610cc557600080fd5b9550610cd360208801610bea565b945060408701359350610ce860608801610bea565b9250608087013567ffffffffffffffff811115610d0457600080fd5b8701601f81018913610d1557600080fd5b803567ffffffffffffffff811115610d2c57600080fd5b896020828401011115610d3e57600080fd5b60208201935080925050509295509295509295565b600080600060608486031215610d6857600080fd5b610d7184610bea565b9250610d7f60208501610bea565b9150610d8d60408501610bea565b90509250925092565b600060208284031215610da857600080fd5b81518015158114610c2e57600080fd5b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b60808152600086357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1883603018112610e3957600080fd5b870160208101903567ffffffffffffffff811115610e5657600080fd5b803603821315610e6557600080fd5b60606080850152610e7a60e085018284610db8565b91505073ffffffffffffffffffffffffffffffffffffffff610e9e60208a01610bea565b1660a0840152604088013560c084015273ffffffffffffffffffffffffffffffffffffffff871660208401528560408401528281036060840152610ee3818587610db8565b9897505050505050505056fea2646970667358221220431a07541a491b54259bdf8fcd05ade6751bfbbf0e72e605f27325b56d7d464f64736f6c634300081a003360e060405234801561001057600080fd5b50604051611bb9380380611bb983398101604081905261002f9161020e565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461006357604051632b2add3d60e01b815260040160405180910390fd5b6001600160a01b038216158061008057506001600160a01b038116155b1561009e5760405163d92e233d60e01b815260040160405180910390fd5b60066100aa8982610360565b5060076100b78882610360565b5060ff861660c05260808590528360028111156100d6576100d661041e565b60a08160028111156100ea576100ea61041e565b905250600192909255600080546001600160a01b039283166001600160a01b03199182161790915560088054929093169116179055506104349350505050565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261015157600080fd5b81516001600160401b0381111561016a5761016a61012a565b604051601f8201601f19908116603f011681016001600160401b03811182821017156101985761019861012a565b6040528181528382016020018510156101b057600080fd5b60005b828110156101cf576020818601810151838301820152016101b3565b506000918101602001919091529392505050565b8051600381106101f257600080fd5b919050565b80516001600160a01b03811681146101f257600080fd5b600080600080600080600080610100898b03121561022b57600080fd5b88516001600160401b0381111561024157600080fd5b61024d8b828c01610140565b60208b015190995090506001600160401b0381111561026b57600080fd5b6102778b828c01610140565b975050604089015160ff8116811461028e57600080fd5b60608a015190965094506102a460808a016101e3565b60a08a015190945092506102ba60c08a016101f7565b91506102c860e08a016101f7565b90509295985092959890939650565b600181811c908216806102eb57607f821691505b60208210810361030b57634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111561035b57806000526020600020601f840160051c810160208510156103385750805b601f840160051c820191505b818110156103585760008155600101610344565b50505b505050565b81516001600160401b038111156103795761037961012a565b61038d8161038784546102d7565b84610311565b6020601f8211600181146103c157600083156103a95750848201515b600019600385901b1c1916600184901b178455610358565b600084815260208120601f198516915b828110156103f157878501518255602094850194600190920191016103d1565b508482101561040f5786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b634e487b7160e01b600052602160045260246000fd5b60805160a05160c05161174861047160003960006102170152600061033a0152600081816102eb01528181610ad70152610bdd01526117486000f3fe608060405234801561001057600080fd5b50600436106101985760003560e01c80638b851b95116100e3578063ccc775991161008c578063eddeb12311610066578063eddeb12314610431578063f2441b3214610444578063f687d12a1461046457600080fd5b8063ccc77599146103a4578063d9eeebed146103b7578063dd62ed3e146103eb57600080fd5b8063a9059cbb116100bd578063a9059cbb14610369578063c70126261461037c578063c835d7cc1461038f57600080fd5b80638b851b951461030d57806395d89b411461032d578063a3413d031461033557600080fd5b80633ce4a5bc116101455780634d8943bb1161011f5780634d8943bb146102a757806370a08231146102b057806385e1f4d0146102e657600080fd5b80633ce4a5bc1461024157806342966c681461028157806347e7ef241461029457600080fd5b806318160ddd1161017657806318160ddd146101f557806323b872dd146101fd578063313ce5671461021057600080fd5b806306fdde031461019d578063091d2788146101bb578063095ea7b3146101d2575b600080fd5b6101a5610477565b6040516101b29190611327565b60405180910390f35b6101c460015481565b6040519081526020016101b2565b6101e56101e0366004611366565b610509565b60405190151581526020016101b2565b6005546101c4565b6101e561020b366004611392565b610520565b60405160ff7f00000000000000000000000000000000000000000000000000000000000000001681526020016101b2565b61025c73735b14bb79463307aacbed86daf3322b1e6226ab81565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101b2565b6101e561028f3660046113d3565b6105b7565b6101e56102a2366004611366565b6105cb565b6101c460025481565b6101c46102be3660046113ec565b73ffffffffffffffffffffffffffffffffffffffff1660009081526003602052604090205490565b6101c47f000000000000000000000000000000000000000000000000000000000000000081565b60085461025c9073ffffffffffffffffffffffffffffffffffffffff1681565b6101a561071f565b61035c7f000000000000000000000000000000000000000000000000000000000000000081565b6040516101b29190611409565b6101e5610377366004611366565b61072e565b6101e561038a366004611479565b61073b565b6103a261039d3660046113ec565b61088a565b005b6103a26103b23660046113ec565b61099e565b6103bf610aab565b6040805173ffffffffffffffffffffffffffffffffffffffff90931683526020830191909152016101b2565b6101c46103f9366004611571565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260046020908152604080832093909416825291909152205490565b6103a261043f3660046113d3565b610cc9565b60005461025c9073ffffffffffffffffffffffffffffffffffffffff1681565b6103a26104723660046113d3565b610d4b565b606060068054610486906115aa565b80601f01602080910402602001604051908101604052809291908181526020018280546104b2906115aa565b80156104ff5780601f106104d4576101008083540402835291602001916104ff565b820191906000526020600020905b8154815290600101906020018083116104e257829003601f168201915b5050505050905090565b6000610516338484610dcd565b5060015b92915050565b600061052d848484610ed6565b73ffffffffffffffffffffffffffffffffffffffff8416600090815260046020908152604080832033845290915290205482811015610598576040517f10bad14700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6105ac85336105a7868561162c565b610dcd565b506001949350505050565b60006105c33383611091565b506001919050565b60003373735b14bb79463307aacbed86daf3322b1e6226ab14801590610609575060005473ffffffffffffffffffffffffffffffffffffffff163314155b801561062d575060085473ffffffffffffffffffffffffffffffffffffffff163314155b15610664576040517fddb5de5e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61066e83836111d3565b6040517f735b14bb79463307aacbed86daf3322b1e6226ab000000000000000000000000602082015273ffffffffffffffffffffffffffffffffffffffff8416907f67fc7bdaed5b0ec550d8706b87d60568ab70c6b781263c70101d54cd1564aab390603401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529082905261070e91869061163f565b60405180910390a250600192915050565b606060078054610486906115aa565b6000610516338484610ed6565b6000806000610748610aab565b6040517f23b872dd00000000000000000000000000000000000000000000000000000000815233600482015273735b14bb79463307aacbed86daf3322b1e6226ab602482015260448101829052919350915073ffffffffffffffffffffffffffffffffffffffff8316906323b872dd906064016020604051808303816000875af11580156107da573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107fe9190611661565b610834576040517f0a7cd6d600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61083e3385611091565b60025460405133917f9ffbffc04a397460ee1dbe8c9503e098090567d6b7f4b3c02a8617d800b6d9559161087791899189918791611683565b60405180910390a2506001949350505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab146108d7576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116610924576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527fd55614e962c5fd6ece71614f6348d702468a997a394dd5e5c1677950226d97ae906020015b60405180910390a150565b3373735b14bb79463307aacbed86daf3322b1e6226ab146109eb576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116610a38576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600880547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527f88815d964e380677e86d817e7d65dea59cb7b4c3b5b7a0c8ec7ea4a74f90a38790602001610993565b600080546040517f0be155470000000000000000000000000000000000000000000000000000000081527f000000000000000000000000000000000000000000000000000000000000000060048201528291829173ffffffffffffffffffffffffffffffffffffffff90911690630be1554790602401602060405180830381865afa158015610b3e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b6291906116b2565b905073ffffffffffffffffffffffffffffffffffffffff8116610bb1576040517f78fff39600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080546040517fd7fd7afb0000000000000000000000000000000000000000000000000000000081527f0000000000000000000000000000000000000000000000000000000000000000600482015273ffffffffffffffffffffffffffffffffffffffff9091169063d7fd7afb90602401602060405180830381865afa158015610c40573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c6491906116cf565b905080600003610ca0576040517fe661aed000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060025460015483610cb391906116e8565b610cbd91906116ff565b92959294509192505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610d16576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60028190556040518181527fef13af88e424b5d15f49c77758542c1938b08b8b95b91ed0751f98ba99000d8f90602001610993565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610d98576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018190556040518181527fff5788270f43bfc1ca41c503606d2594aa3023a1a7547de403a3e2f146a4a80a90602001610993565b73ffffffffffffffffffffffffffffffffffffffff8316610e1a576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216610e67576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff83811660008181526004602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8316610f23576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216610f70576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff831660009081526003602052604090205481811015610fd0576040517ffe382aa700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610fda828261162c565b73ffffffffffffffffffffffffffffffffffffffff808616600090815260036020526040808220939093559085168152908120805484929061101d9084906116ff565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161108391815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff82166110de576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff82166000908152600360205260409020548181101561113e576040517ffe382aa700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611148828261162c565b73ffffffffffffffffffffffffffffffffffffffff84166000908152600360205260408120919091556005805484929061118390849061162c565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90602001610ec9565b73ffffffffffffffffffffffffffffffffffffffff8216611220576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b806005600082825461123291906116ff565b909155505073ffffffffffffffffffffffffffffffffffffffff82166000908152600360205260408120805483929061126c9084906116ff565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6000815180845260005b818110156112e9576020818501810151868301820152016112cd565b5060006020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b60208152600061133a60208301846112c3565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff8116811461136357600080fd5b50565b6000806040838503121561137957600080fd5b823561138481611341565b946020939093013593505050565b6000806000606084860312156113a757600080fd5b83356113b281611341565b925060208401356113c281611341565b929592945050506040919091013590565b6000602082840312156113e557600080fd5b5035919050565b6000602082840312156113fe57600080fd5b813561133a81611341565b6020810160038310611444577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000806040838503121561148c57600080fd5b823567ffffffffffffffff8111156114a357600080fd5b8301601f810185136114b457600080fd5b803567ffffffffffffffff8111156114ce576114ce61144a565b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8501160116810181811067ffffffffffffffff8211171561153a5761153a61144a565b60405281815282820160200187101561155257600080fd5b8160208401602083013760006020928201830152969401359450505050565b6000806040838503121561158457600080fd5b823561158f81611341565b9150602083013561159f81611341565b809150509250929050565b600181811c908216806115be57607f821691505b6020821081036115f7577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8181038181111561051a5761051a6115fd565b60408152600061165260408301856112c3565b90508260208301529392505050565b60006020828403121561167357600080fd5b8151801515811461133a57600080fd5b60808152600061169660808301876112c3565b6020830195909552506040810192909252606090910152919050565b6000602082840312156116c457600080fd5b815161133a81611341565b6000602082840312156116e157600080fd5b5051919050565b808202811582820484141761051a5761051a6115fd565b8082018082111561051a5761051a6115fd56fea26469706673582212204013e39523742118b3f2227e145ee7e48176ba6aebead33c596dca2acb59a74c64736f6c634300081a0033a2646970667358221220c370ed55411b90fefc859397ce7c31b5f1678af46f5ae3007a8a3a05e731387264736f6c634300081a0033", } // ZRC20TestABI is the input ABI used to generate the binding from. diff --git a/v2/src/zevm/GatewayZEVM.sol b/v2/src/zevm/GatewayZEVM.sol index 863783e2..8837b8e4 100644 --- a/v2/src/zevm/GatewayZEVM.sol +++ b/v2/src/zevm/GatewayZEVM.sol @@ -152,9 +152,7 @@ contract GatewayZEVM is if (amount == 0) revert InsufficientZetaAmount(); _transferZETA(amount, FUNGIBLE_MODULE_ADDRESS); - emit Withdrawal( - msg.sender, chainId, receiver, address(zetaToken), amount, 0, 0, "" - ); + emit Withdrawal(msg.sender, chainId, receiver, address(zetaToken), amount, 0, 0, ""); } /// @notice Withdraw ZETA tokens and call a smart contract on an external chain. @@ -176,9 +174,7 @@ contract GatewayZEVM is if (amount == 0) revert InsufficientZetaAmount(); _transferZETA(amount, FUNGIBLE_MODULE_ADDRESS); - emit Withdrawal( - msg.sender, chainId, receiver, address(zetaToken), amount, 0, 0, message - ); + emit Withdrawal(msg.sender, chainId, receiver, address(zetaToken), amount, 0, 0, message); } /// @notice Call a smart contract on an external chain without asset transfer. diff --git a/v2/typechain-types/GatewayZEVM.ts b/v2/typechain-types/GatewayZEVM.ts index 68d5989d..e6efcde8 100644 --- a/v2/typechain-types/GatewayZEVM.ts +++ b/v2/typechain-types/GatewayZEVM.ts @@ -74,9 +74,9 @@ export interface GatewayZEVMInterface extends Interface { | "unpause" | "upgradeToAndCall" | "withdraw(bytes,uint256,address)" - | "withdraw(uint256,uint256)" + | "withdraw(bytes,uint256,uint256)" | "withdrawAndCall(bytes,uint256,address,bytes)" - | "withdrawAndCall(uint256,uint256,bytes)" + | "withdrawAndCall(bytes,uint256,uint256,bytes)" | "zetaToken" ): FunctionFragment; @@ -193,16 +193,16 @@ export interface GatewayZEVMInterface extends Interface { values: [BytesLike, BigNumberish, AddressLike] ): string; encodeFunctionData( - functionFragment: "withdraw(uint256,uint256)", - values: [BigNumberish, BigNumberish] + functionFragment: "withdraw(bytes,uint256,uint256)", + values: [BytesLike, BigNumberish, BigNumberish] ): string; encodeFunctionData( functionFragment: "withdrawAndCall(bytes,uint256,address,bytes)", values: [BytesLike, BigNumberish, AddressLike, BytesLike] ): string; encodeFunctionData( - functionFragment: "withdrawAndCall(uint256,uint256,bytes)", - values: [BigNumberish, BigNumberish, BytesLike] + functionFragment: "withdrawAndCall(bytes,uint256,uint256,bytes)", + values: [BytesLike, BigNumberish, BigNumberish, BytesLike] ): string; encodeFunctionData(functionFragment: "zetaToken", values?: undefined): string; @@ -273,7 +273,7 @@ export interface GatewayZEVMInterface extends Interface { data: BytesLike ): Result; decodeFunctionResult( - functionFragment: "withdraw(uint256,uint256)", + functionFragment: "withdraw(bytes,uint256,uint256)", data: BytesLike ): Result; decodeFunctionResult( @@ -281,7 +281,7 @@ export interface GatewayZEVMInterface extends Interface { data: BytesLike ): Result; decodeFunctionResult( - functionFragment: "withdrawAndCall(uint256,uint256,bytes)", + functionFragment: "withdrawAndCall(bytes,uint256,uint256,bytes)", data: BytesLike ): Result; decodeFunctionResult(functionFragment: "zetaToken", data: BytesLike): Result; @@ -635,8 +635,8 @@ export interface GatewayZEVM extends BaseContract { "nonpayable" >; - "withdraw(uint256,uint256)": TypedContractMethod< - [amount: BigNumberish, chainId: BigNumberish], + "withdraw(bytes,uint256,uint256)": TypedContractMethod< + [receiver: BytesLike, amount: BigNumberish, chainId: BigNumberish], [void], "nonpayable" >; @@ -652,8 +652,13 @@ export interface GatewayZEVM extends BaseContract { "nonpayable" >; - "withdrawAndCall(uint256,uint256,bytes)": TypedContractMethod< - [amount: BigNumberish, chainId: BigNumberish, message: BytesLike], + "withdrawAndCall(bytes,uint256,uint256,bytes)": TypedContractMethod< + [ + receiver: BytesLike, + amount: BigNumberish, + chainId: BigNumberish, + message: BytesLike + ], [void], "nonpayable" >; @@ -822,9 +827,9 @@ export interface GatewayZEVM extends BaseContract { "nonpayable" >; getFunction( - nameOrSignature: "withdraw(uint256,uint256)" + nameOrSignature: "withdraw(bytes,uint256,uint256)" ): TypedContractMethod< - [amount: BigNumberish, chainId: BigNumberish], + [receiver: BytesLike, amount: BigNumberish, chainId: BigNumberish], [void], "nonpayable" >; @@ -841,9 +846,14 @@ export interface GatewayZEVM extends BaseContract { "nonpayable" >; getFunction( - nameOrSignature: "withdrawAndCall(uint256,uint256,bytes)" + nameOrSignature: "withdrawAndCall(bytes,uint256,uint256,bytes)" ): TypedContractMethod< - [amount: BigNumberish, chainId: BigNumberish, message: BytesLike], + [ + receiver: BytesLike, + amount: BigNumberish, + chainId: BigNumberish, + message: BytesLike + ], [void], "nonpayable" >; diff --git a/v2/typechain-types/IGatewayZEVM.sol/IGatewayZEVM.ts b/v2/typechain-types/IGatewayZEVM.sol/IGatewayZEVM.ts index 943b5654..07bb1e4d 100644 --- a/v2/typechain-types/IGatewayZEVM.sol/IGatewayZEVM.ts +++ b/v2/typechain-types/IGatewayZEVM.sol/IGatewayZEVM.ts @@ -58,9 +58,9 @@ export interface IGatewayZEVMInterface extends Interface { | "execute" | "executeRevert" | "withdraw(bytes,uint256,address)" - | "withdraw(uint256,uint256)" + | "withdraw(bytes,uint256,uint256)" | "withdrawAndCall(bytes,uint256,address,bytes)" - | "withdrawAndCall(uint256,uint256,bytes)" + | "withdrawAndCall(bytes,uint256,uint256,bytes)" ): FunctionFragment; getEvent(nameOrSignatureOrTopic: "Call" | "Withdrawal"): EventFragment; @@ -110,16 +110,16 @@ export interface IGatewayZEVMInterface extends Interface { values: [BytesLike, BigNumberish, AddressLike] ): string; encodeFunctionData( - functionFragment: "withdraw(uint256,uint256)", - values: [BigNumberish, BigNumberish] + functionFragment: "withdraw(bytes,uint256,uint256)", + values: [BytesLike, BigNumberish, BigNumberish] ): string; encodeFunctionData( functionFragment: "withdrawAndCall(bytes,uint256,address,bytes)", values: [BytesLike, BigNumberish, AddressLike, BytesLike] ): string; encodeFunctionData( - functionFragment: "withdrawAndCall(uint256,uint256,bytes)", - values: [BigNumberish, BigNumberish, BytesLike] + functionFragment: "withdrawAndCall(bytes,uint256,uint256,bytes)", + values: [BytesLike, BigNumberish, BigNumberish, BytesLike] ): string; decodeFunctionResult(functionFragment: "call", data: BytesLike): Result; @@ -146,7 +146,7 @@ export interface IGatewayZEVMInterface extends Interface { data: BytesLike ): Result; decodeFunctionResult( - functionFragment: "withdraw(uint256,uint256)", + functionFragment: "withdraw(bytes,uint256,uint256)", data: BytesLike ): Result; decodeFunctionResult( @@ -154,7 +154,7 @@ export interface IGatewayZEVMInterface extends Interface { data: BytesLike ): Result; decodeFunctionResult( - functionFragment: "withdrawAndCall(uint256,uint256,bytes)", + functionFragment: "withdrawAndCall(bytes,uint256,uint256,bytes)", data: BytesLike ): Result; } @@ -341,8 +341,8 @@ export interface IGatewayZEVM extends BaseContract { "nonpayable" >; - "withdraw(uint256,uint256)": TypedContractMethod< - [amount: BigNumberish, chainId: BigNumberish], + "withdraw(bytes,uint256,uint256)": TypedContractMethod< + [receiver: BytesLike, amount: BigNumberish, chainId: BigNumberish], [void], "nonpayable" >; @@ -358,8 +358,13 @@ export interface IGatewayZEVM extends BaseContract { "nonpayable" >; - "withdrawAndCall(uint256,uint256,bytes)": TypedContractMethod< - [amount: BigNumberish, chainId: BigNumberish, message: BytesLike], + "withdrawAndCall(bytes,uint256,uint256,bytes)": TypedContractMethod< + [ + receiver: BytesLike, + amount: BigNumberish, + chainId: BigNumberish, + message: BytesLike + ], [void], "nonpayable" >; @@ -454,9 +459,9 @@ export interface IGatewayZEVM extends BaseContract { "nonpayable" >; getFunction( - nameOrSignature: "withdraw(uint256,uint256)" + nameOrSignature: "withdraw(bytes,uint256,uint256)" ): TypedContractMethod< - [amount: BigNumberish, chainId: BigNumberish], + [receiver: BytesLike, amount: BigNumberish, chainId: BigNumberish], [void], "nonpayable" >; @@ -473,9 +478,14 @@ export interface IGatewayZEVM extends BaseContract { "nonpayable" >; getFunction( - nameOrSignature: "withdrawAndCall(uint256,uint256,bytes)" + nameOrSignature: "withdrawAndCall(bytes,uint256,uint256,bytes)" ): TypedContractMethod< - [amount: BigNumberish, chainId: BigNumberish, message: BytesLike], + [ + receiver: BytesLike, + amount: BigNumberish, + chainId: BigNumberish, + message: BytesLike + ], [void], "nonpayable" >; diff --git a/v2/typechain-types/factories/ERC20CustodyEchidnaTest__factory.ts b/v2/typechain-types/factories/ERC20CustodyEchidnaTest__factory.ts index 4c15b5d9..7d6531b3 100644 --- a/v2/typechain-types/factories/ERC20CustodyEchidnaTest__factory.ts +++ b/v2/typechain-types/factories/ERC20CustodyEchidnaTest__factory.ts @@ -702,7 +702,7 @@ const _abi = [ ] as const; const _bytecode = - "0x600580546001600160a01b03191633908117909155600e60a09081526d11d85d195dd85e5155934b9cdbdb60921b60c0526101049190915261012361012481905261014452606460e090815261016460405261010080516001600160e01b0390811663c0c53b8b60e01b1790915261007992919061029316565b600680546001600160a01b03929092166001600160a01b03199283168117909155600780549092161790553480156100b057600080fd5b5060075460055460016000556002805460ff191690556001600160a01b039182169116808215806100e857506001600160a01b038216155b806100fa57506001600160a01b038116155b156101185760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b0383166080526101306000826102b2565b5061015b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a826102b2565b506101867f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e4836102b2565b5061019f600080516020616dde833981519152826102b2565b506101b8600080516020616dde833981519152836102b2565b505050506040516101c89061383e565b60408082526004908201819052631d195cdd60e21b606083015260806020830181905282015263151154d560e21b60a082015260c001604051809103906000f08015801561021a573d6000803e3d6000fd5b50600480546001600160a01b0319166001600160a01b0392831617815560075460405163ae7a3a6f60e01b815230928101929092529091169063ae7a3a6f90602401600060405180830381600087803b15801561027657600080fd5b505af115801561028a573d6000803e3d6000fd5b505050506148bf565b600061029d61384b565b6102a8848483610345565b9150505b92915050565b60008281526001602090815260408083206001600160a01b038516845290915281205460ff1661033d5760008381526001602081815260408084206001600160a01b0387168086529252808420805460ff19169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45060016102ac565b5060006102ac565b60008061035285846103c1565b90506103b66040518060400160405280601d81526020017f4552433139363750726f78792e736f6c3a4552433139363750726f787900000081525082866040516020016103a0929190613954565b60408051601f19818403018152919052856103cd565b9150505b9392505050565b60006103ba8383610401565b60c081015151600090156103f7576103f084848460c0015161042260201b60201c565b90506103ba565b6103f0848461059b565b600061040d8383610668565b6103ba838360200151846103cd60201b60201c565b60008061042d610678565b9050600061043b8683610712565b905060006104588260600151836020015185610b3560201b60201c565b9050600061046883838989610cea565b9050600061047582611966565b602081015181519192509060030b156104ce5789826040015160405160200161049f929190613978565b60408051601f198184030181529082905262461bcd60e51b82526104c5916004016139de565b60405180910390fd5b60006105176040518060400160405280601581526020017f4465706c6f79656420746f20616464726573733a200000000000000000000000815250836001611afd60201b60201c565b60405163c6ce059d60e01b8152909150600080516020616dbe8339815191529063c6ce059d9061054b9084906004016139de565b602060405180830381865afa158015610568573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061058c91906139f1565b9b9a5050505050505050505050565b604051638d1cc92560e01b81526000908190600080516020616dbe83398151915290638d1cc925906105d19087906004016139de565b600060405180830381865afa1580156105ee573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526106169190810190613ae6565b905060006106458285604051602001610630929190613b1a565b60408051601f19818403018152919052611c9d565b90506001600160a01b0381166102a857848460405160200161049f929190613b49565b61067482826000611cb0565b5050565b60408051808201825260038152621bdd5d60ea1b602082015290516334515cdb60e21b8152606091600080516020616dbe83398151915291829063d145736c906106c6908490600401613bd8565b600060405180830381865afa1580156106e3573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261070b9190810190613c0d565b9250505090565b6107446040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b6000600080516020616dbe83398151915290506107896040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b61079285611d8a565b602082015260006107a286611fdf565b90506000836001600160a01b031663d930a0e66040518163ffffffff1660e01b8152600401600060405180830381865afa1580156107e4573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261080c9190810190613c0d565b868385602001516040516020016108269493929190613c55565b60408051601f19818403018152908290526360f9bb1160e01b825291506000906001600160a01b038616906360f9bb11906108659085906004016139de565b600060405180830381865afa158015610882573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526108aa9190810190613c0d565b604051636da11afb60e11b81529091506001600160a01b0386169063db4235f6906108d9908490600401613ced565b602060405180830381865afa1580156108f6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061091a9190613d26565b61092f578160405160200161049f9190613d48565b6040516309389f5960e31b81526001600160a01b038616906349c4fac89061095b908490600401613dbf565b600060405180830381865afa158015610978573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526109a09190810190613c0d565b8452604051636da11afb60e11b81526001600160a01b0386169063db4235f6906109ce908490600401613e05565b602060405180830381865afa1580156109eb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a0f9190613d26565b15610a8b576040516309389f5960e31b81526001600160a01b038616906349c4fac890610a40908490600401613e05565b600060405180830381865afa158015610a5d573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610a859190810190613c0d565b60408501525b846001600160a01b03166349c4fac8828660000151604051602001610ab09190613e46565b6040516020818303038152906040526040518363ffffffff1660e01b8152600401610adc929190613ea1565b600060405180830381865afa158015610af9573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610b219190810190613c0d565b606085015250608083015250949350505050565b60408051600480825260a0820190925260609160009190816020015b6060815260200190600190039081610b51579050509050604051806040016040528060048152602001630677265760e41b81525081600081518110610b9857610b98613ec6565b6020026020010181905250604051806040016040528060038152602001620b5c9b60ea1b81525081600181518110610bd257610bd2613ec6565b602002602001018190525084604051602001610bee9190613edc565b60405160208183030381529060405281600281518110610c1057610c10613ec6565b602002602001018190525082604051602001610c2c9190613f11565b60405160208183030381529060405281600381518110610c4e57610c4e613ec6565b60209081029190910101526000610c6482611966565b9050600081602001519050610ccb610c9e60405180604001604052806005815260200164173539b7b760d91b81525061216260201b60201c565b6040805180820182526000808252602091820152815180830190925284518252808501908201529061218f565b610ce0578560405160200161049f9190613f40565b9695505050505050565b60a0810151604080518082018252600080825260209182015281518083019092528251808352928101910152606090600080516020616dbe8339815191529015610d34565b511590565b610e5057826020015115610dc45760405162461bcd60e51b81526020600482015260586024820152600080516020616dfe83398151915260448201527f62652075736564207768656e207468652060736b6970566572696679536f757260648201527f6365436f646560206f7074696f6e206973206074727565600000000000000000608482015260a4016104c5565b8260c0015115610e505760405162461bcd60e51b81526020600482015260536024820152600080516020616dfe83398151915260448201527f62652075736564207768656e207468652060736b69704c6963656e736554797060648201527f6560206f7074696f6e2069732060747275656000000000000000000000000000608482015260a4016104c5565b6040805160ff8082526120008201909252600091816020015b6060815260200190600190039081610e695790505090506000604051806040016040528060038152602001620dce0f60eb1b815250828280610eaa90613fd5565b935060ff1681518110610ebf57610ebf613ec6565b60200260200101819052506040518060400160405280600d81526020016c302e302e312d616c7068612e3760981b815250604051602001610f009190613ff4565b604051602081830303815290604052828280610f1b90613fd5565b935060ff1681518110610f3057610f30613ec6565b6020026020010181905250604051806040016040528060068152602001656465706c6f7960d01b815250828280610f6690613fd5565b935060ff1681518110610f7b57610f7b613ec6565b60200260200101819052506040518060400160405280600e81526020016d2d2d636f6e74726163744e616d6560901b815250828280610fb990613fd5565b935060ff1681518110610fce57610fce613ec6565b60200260200101819052508760200151828280610fea90613fd5565b935060ff1681518110610fff57610fff613ec6565b60200260200101819052506040518060400160405280600e81526020016d05a5ac6dedce8e4c2c6e8a0c2e8d60931b81525082828061103d90613fd5565b935060ff168151811061105257611052613ec6565b60209081029190910101528751828261106a81613fd5565b935060ff168151811061107f5761107f613ec6565b6020026020010181905250604051806040016040528060098152602001680b4b58da185a5b925960ba1b8152508282806110b890613fd5565b935060ff16815181106110cd576110cd613ec6565b60209081029190910101526110e1466121f0565b82826110ec81613fd5565b935060ff168151811061110157611101613ec6565b60200260200101819052506040518060400160405280600f81526020016e2d2d6275696c64496e666f46696c6560881b81525082828061114090613fd5565b935060ff168151811061115557611155613ec6565b60200260200101819052508682828061116d90613fd5565b935060ff168151811061118257611182613ec6565b60209081029190910101528551156112905760408051808201909152601581527f2d2d636f6e7374727563746f7242797465636f64650000000000000000000000602082015282826111d381613fd5565b935060ff16815181106111e8576111e8613ec6565b60209081029190910101526040516371aad10d60e01b81526001600160a01b038416906371aad10d9061121f9089906004016139de565b600060405180830381865afa15801561123c573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526112649190810190613c0d565b828261126f81613fd5565b935060ff168151811061128457611284613ec6565b60200260200101819052505b84602001511561133d576040805180820190915260128152712d2d766572696679536f75726365436f646560701b602082015282826112ce81613fd5565b935060ff16815181106112e3576112e3613ec6565b60200260200101819052506040518060400160405280600581526020016466616c736560d81b81525082828061131890613fd5565b935060ff168151811061132d5761132d613ec6565b60200260200101819052506114a4565b611353610d2f8660a0015161216260201b60201c565b6113d65760408051808201909152600d81526c2d2d6c6963656e73655479706560981b6020820152828261138681613fd5565b935060ff168151811061139b5761139b613ec6565b60200260200101819052508460a001516040516020016113bb9190613edc565b60405160208183030381529060405282828061131890613fd5565b8460c001511580156113fb57506113f9610d2f896040015161216260201b60201c565b155b156114a45760408051808201909152600d81526c2d2d6c6963656e73655479706560981b6020820152828261142f81613fd5565b935060ff168151811061144457611444613ec6565b602090810291909101015261145888612282565b6040516020016114689190613edc565b60405160208183030381529060405282828061148390613fd5565b935060ff168151811061149857611498613ec6565b60200260200101819052505b6114ba610d2f866040015161216260201b60201c565b61153d5760408051808201909152600b81526a0b4b5c995b185e595c925960aa1b602082015282826114eb81613fd5565b935060ff168151811061150057611500613ec6565b6020026020010181905250846040015182828061151c90613fd5565b935060ff168151811061153157611531613ec6565b60200260200101819052505b60608501511561162e576040805180820190915260068152650b4b5cd85b1d60d21b6020820152828261156f81613fd5565b935060ff168151811061158457611584613ec6565b60209081029190910101526060850151604051631623433d60e31b815260048101919091526001600160a01b0384169063b11a19e890602401600060405180830381865afa1580156115da573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526116029190810190613c0d565b828261160d81613fd5565b935060ff168151811061162257611622613ec6565b60200260200101819052505b60e085015151156116c05760408051808201909152600a8152690b4b59d85cd31a5b5a5d60b21b6020820152828261166581613fd5565b935060ff168151811061167a5761167a613ec6565b602090810291909101015260e085015151611694906121f0565b828261169f81613fd5565b935060ff16815181106116b4576116b4613ec6565b60200260200101819052505b60e0850151602001511561175d5760408051808201909152600a8152692d2d676173507269636560b01b602082015282826116fa81613fd5565b935060ff168151811061170f5761170f613ec6565b60200260200101819052506117318560e00151602001516121f060201b60201c565b828261173c81613fd5565b935060ff168151811061175157611751613ec6565b60200260200101819052505b60e085015160400151156117fe5760408051808201909152600e81526d2d2d6d617846656550657247617360901b6020820152828261179b81613fd5565b935060ff16815181106117b0576117b0613ec6565b60200260200101819052506117d28560e00151604001516121f060201b60201c565b82826117dd81613fd5565b935060ff16815181106117f2576117f2613ec6565b60200260200101819052505b60e085015160600151156118ae5760408051808201909152601681527f2d2d6d61785072696f72697479466565506572476173000000000000000000006020820152828261184b81613fd5565b935060ff168151811061186057611860613ec6565b60200260200101819052506118828560e00151606001516121f060201b60201c565b828261188d81613fd5565b935060ff16815181106118a2576118a2613ec6565b60200260200101819052505b60008160ff166001600160401b038111156118cb576118cb613a1a565b6040519080825280602002602001820160405280156118fe57816020015b60608152602001906001900390816118e95790505b50905060005b8260ff168160ff16101561195757838160ff168151811061192757611927613ec6565b6020026020010151828260ff168151811061194457611944613ec6565b6020908102919091010152600101611904565b5093505050505b949350505050565b61198d6040518060600160405280600060030b815260200160608152602001606081525090565b6040805180820182526004808252630c4c2e6d60e31b602083015291516334515cdb60e21b8152600080516020616dbe83398151915292600091849163d145736c916119db9186910161404b565b600060405180830381865afa1580156119f8573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611a209190810190613c0d565b90506000611a2e8683612938565b90506000846001600160a01b031663f45c1ce7836040518263ffffffff1660e01b8152600401611a5e9190614092565b6000604051808303816000875af1158015611a7d573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611aa591908101906140f7565b805190915060030b15801590611abe5750602081015151155b8015611acd5750604081015151155b15610ce05781600081518110611ae557611ae5613ec6565b602002602001015160405160200161049f91906141aa565b60606000611b328560408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600080825260209182015281518083019092528651825280870190820152909150611b699082905b90612a72565b15611c66576000611be682611be081611bda611bac8a60408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6040805180820182526000808252602091820152815180830190925282518252918201519181019190915290565b90612a99565b90612af6565b9050611c1a611c13604051806040016040528060018152602001600560f91b81525061216260201b60201c565b8290612a72565b15611c5457611c51611c4a604051806040016040528060018152602001600560f91b81525061216260201b60201c565b8290612b7b565b90505b611c5d81612ba1565b925050506103ba565b8215611c7f57848460405160200161049f92919061437a565b50506040805160208101909152600081526103ba565b509392505050565b6000808251602084016000f09392505050565b8160a0015115611cbf57505050565b6000611ccc848484612c06565b90506000611cd982611966565b602081015181519192509060030b158015611d4c5750611d4c611d20604051806040016040528060078152602001665355434345535360c81b81525061216260201b60201c565b604080518082018252600080825260209182015281518083019092528451825280850190820152611b63565b15611d5957505050505050565b60408201515115611d7957816040015160405160200161049f91906143f5565b8060405160200161049f919061443f565b60606000611dbf8360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b9050611df6611def604051806040016040528060048152602001630b9cdbdb60e21b81525061216260201b60201c565b829061218f565b15611e38576103ba611e33611e2c604051806040016040528060048152602001630b9cdbdb60e21b81525061216260201b60201c565b8390613119565b612ba1565b611e6a611e63604051806040016040528060018152602001601d60f91b81525061216260201b60201c565b82906131a3565b600103611ed257611e9c611c4a604051806040016040528060018152602001601d60f91b81525061216260201b60201c565b506103ba611e33611ecb604051806040016040528060018152602001601d60f91b81525061216260201b60201c565b8390612b7b565b611f01611def60405180604001604052806005815260200164173539b7b760d91b81525061216260201b60201c565b15611fce576000611f3982611f34604051806040016040528060018152602001602f60f81b81525061216260201b60201c565b613238565b905060008160018351611f4c919061448f565b81518110611f5c57611f5c613ec6565b60200260200101519050611fc5611e33611f9860405180604001604052806005815260200164173539b7b760d91b81525061216260201b60201c565b60408051808201825260008082526020918201528151808301909252855182528086019082015290613119565b95945050505050565b8260405160200161049f91906144a2565b606060006120148360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b9050612044611def604051806040016040528060048152602001630b9cdbdb60e21b81525061216260201b60201c565b15612052576103ba81612ba1565b61207d611e63604051806040016040528060018152602001601d60f91b81525061216260201b60201c565b6001036120b2576103ba611e33611ecb604051806040016040528060018152602001601d60f91b81525061216260201b60201c565b6120e1611def60405180604001604052806005815260200164173539b7b760d91b81525061216260201b60201c565b15611fce57600061211482611f34604051806040016040528060018152602001602f60f81b81525061216260201b60201c565b905060018151111561215057806002825161212f919061448f565b8151811061213f5761213f613ec6565b602002602001015192505050919050565b508260405160200161049f91906144a2565b60408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b8051825160009111156121a4575060006102ac565b815183516020850151600092916121ba9161455c565b6121c4919061448f565b9050826020015181036121db5760019150506102ac565b82516020840151819020912014905092915050565b606060006121fd836132dc565b60010190506000816001600160401b0381111561221c5761221c613a1a565b6040519080825280601f01601f191660200182016040528015612246576020820181803683370190505b5090508181016020015b600019016f181899199a1a9b1b9c1cb0b131b232b360811b600a86061a8153600a850494508461225057509392505050565b60606000612299836040015161216260201b60201c565b90506122d66122cf6040518060400160405280600a8152602001691553931250d15394d15160b21b81525061216260201b60201c565b82906133be565b156122fd5750506040805180820190915260048152634e6f6e6560e01b6020820152919050565b6123306122cf60405180604001604052806009815260200168556e6c6963656e736560b81b81525061216260201b60201c565b1561235c575050604080518082019091526009815268556e6c6963656e736560b81b6020820152919050565b6123896122cf6040518060400160405280600381526020016213525560ea1b81525061216260201b60201c565b156123af57505060408051808201909152600381526213525560ea1b6020820152919050565b6123e56122cf6040518060400160405280600c81526020016b47504c2d322e302d6f6e6c7960a01b81525061216260201b60201c565b8061242557506124256122cf6040518060400160405280601081526020016f23a8261699171816b7b916b630ba32b960811b81525061216260201b60201c565b1561245157505060408051808201909152600981526823a72a9023a8263b1960b91b6020820152919050565b6124876122cf6040518060400160405280600c81526020016b47504c2d332e302d6f6e6c7960a01b81525061216260201b60201c565b806124c757506124c76122cf6040518060400160405280601081526020016f23a8261699971816b7b916b630ba32b960811b81525061216260201b60201c565b156124f3575050604080518082019091526009815268474e552047504c763360b81b6020820152919050565b61252a6122cf6040518060400160405280600d81526020016c4c47504c2d322e312d6f6e6c7960981b81525061216260201b60201c565b8061256b575061256b6122cf604051806040016040528060118152602001702623a8261699171896b7b916b630ba32b960791b81525061216260201b60201c565b1561259a57505060408051808201909152600c81526b474e55204c47504c76322e3160a01b6020820152919050565b6125d16122cf6040518060400160405280600d81526020016c4c47504c2d332e302d6f6e6c7960981b81525061216260201b60201c565b8061261257506126126122cf604051806040016040528060118152602001702623a8261699971816b7b916b630ba32b960791b81525061216260201b60201c565b1561263f57505060408051808201909152600a815269474e55204c47504c763360b01b6020820152919050565b6126756122cf6040518060400160405280600c81526020016b4253442d322d436c6175736560a01b81525061216260201b60201c565b156126a457505060408051808201909152600c81526b4253442d322d436c6175736560a01b6020820152919050565b6126da6122cf6040518060400160405280600c81526020016b4253442d332d436c6175736560a01b81525061216260201b60201c565b1561270957505060408051808201909152600c81526b4253442d332d436c6175736560a01b6020820152919050565b61273a6122cf6040518060400160405280600781526020016604d504c2d322e360cc1b81525061216260201b60201c565b1561276457505060408051808201909152600781526604d504c2d322e360cc1b6020820152919050565b6127956122cf6040518060400160405280600781526020016604f534c2d332e360cc1b81525061216260201b60201c565b156127bf57505060408051808201909152600781526604f534c2d332e360cc1b6020820152919050565b6127f36122cf6040518060400160405280600a81526020016904170616368652d322e360b41b81525061216260201b60201c565b1561282057505060408051808201909152600a81526904170616368652d322e360b41b6020820152919050565b6128576122cf6040518060400160405280600d81526020016c4147504c2d332e302d6f6e6c7960981b81525061216260201b60201c565b8061289857506128986122cf6040518060400160405280601181526020017020a3a8261699971816b7b916b630ba32b960791b81525061216260201b60201c565b156128c557505060408051808201909152600a815269474e55204147504c763360b01b6020820152919050565b6128f76122cf604051806040016040528060088152602001674255534c2d312e3160c01b81525061216260201b60201c565b1561292157505060408051808201909152600781526642534c20312e3160c81b6020820152919050565b6040808401518451915161049f929060200161456f565b60608060005b84518110156129c3578185828151811061295a5761295a613ec6565b6020026020010151604051602001612973929190613b1a565b604051602081830303815290604052915060018551612992919061448f565b81146129bb57816040516020016129a991906146bf565b60405160208183030381529060405291505b60010161293e565b5060408051600380825260808201909252600091816020015b60608152602001906001900390816129dc5790505090508381600081518110612a0757612a07613ec6565b6020026020010181905250604051806040016040528060028152602001612d6360f01b81525081600181518110612a4057612a40613ec6565b60200260200101819052508181600281518110612a5f57612a5f613ec6565b6020908102919091010152949350505050565b6020808301518351835192840151600093612a9092918491906133d2565b14159392505050565b6040805180820190915260008082526020808301829052845185820151855192860151612ac693906134e3565b9050836020015181612ad8919061448f565b84518590612ae790839061448f565b90525060208401525090919050565b6040805180820190915260008082526020820152815183511015612b1b5750816102ac565b6020808301519084015160019114612b425750815160208481015190840151829020919020145b8015612b7357825184518590612b5990839061448f565b9052508251602085018051612b6f90839061455c565b9052505b509192915050565b6040805180820190915260008082526020820152612b9a838383613603565b5092915050565b6060600082600001516001600160401b03811115612bc157612bc1613a1a565b6040519080825280601f01601f191660200182016040528015612beb576020820181803683370190505b50602084810151855192935090830191612b9a9183916136a9565b60606000612c12610678565b6040805160ff808252612000820190925291925060009190816020015b6060815260200190600190039081612c2f5790505090506000604051806040016040528060038152602001620dce0f60eb1b815250828280612c7090613fd5565b935060ff1681518110612c8557612c85613ec6565b6020026020010181905250604051806040016040528060078152602001665e312e33322e3360c81b815250604051602001612cc091906146e4565b604051602081830303815290604052828280612cdb90613fd5565b935060ff1681518110612cf057612cf0613ec6565b60200260200101819052506040518060400160405280600881526020016776616c696461746560c01b815250828280612d2890613fd5565b935060ff1681518110612d3d57612d3d613ec6565b602002602001018190525082604051602001612d599190613f11565b604051602081830303815290604052828280612d7490613fd5565b935060ff1681518110612d8957612d89613ec6565b60200260200101819052506040518060400160405280600a8152602001690b4b58dbdb9d1c9858dd60b21b815250828280612dc390613fd5565b935060ff1681518110612dd857612dd8613ec6565b6020908102919091010152612ded8784613723565b8282612df881613fd5565b935060ff1681518110612e0d57612e0d613ec6565b602090810291909101015285515115612ea55760408051808201909152600b81526a2d2d7265666572656e636560a81b60208201528282612e4d81613fd5565b935060ff1681518110612e6257612e62613ec6565b60209081029190910101528551612e799084613723565b8282612e8481613fd5565b935060ff1681518110612e9957612e99613ec6565b60200260200101819052505b856080015115612f135760408051808201909152601881527f2d2d756e73616665536b697053746f72616765436865636b000000000000000060208201528282612eee81613fd5565b935060ff1681518110612f0357612f03613ec6565b6020026020010181905250612f6e565b8415612f6e576040805180820190915260128152712d2d726571756972655265666572656e636560701b60208201528282612f4d81613fd5565b935060ff1681518110612f6257612f62613ec6565b60200260200101819052505b60408601515115612ffa5760408051808201909152600d81526c2d2d756e73616665416c6c6f7760981b60208201528282612fa881613fd5565b935060ff1681518110612fbd57612fbd613ec6565b60200260200101819052508560400151828280612fd990613fd5565b935060ff1681518110612fee57612fee613ec6565b60200260200101819052505b8560600151156130645760408051808201909152601481527f2d2d756e73616665416c6c6f7752656e616d65730000000000000000000000006020820152828261304381613fd5565b935060ff168151811061305857613058613ec6565b60200260200101819052505b60008160ff166001600160401b0381111561308157613081613a1a565b6040519080825280602002602001820160405280156130b457816020015b606081526020019060019003908161309f5790505b50905060005b8260ff168160ff16101561310d57838160ff16815181106130dd576130dd613ec6565b6020026020010151828260ff16815181106130fa576130fa613ec6565b60209081029190910101526001016130ba565b50979650505050505050565b604080518082019091526000808252602082015281518351101561313e5750816102ac565b815183516020850151600092916131549161455c565b61315e919061448f565b6020840151909150600190821461317f575082516020840151819020908220145b801561319a5783518551869061319690839061448f565b9052505b50929392505050565b8051825160208085015190840151600093849390926131c39284906134e3565b6131cd919061455c565b90505b835160208501516131e1919061455c565b8111612b9a57816131f181614729565b925050826000015161322785602001518361320c919061448f565b8651613218919061448f565b855160208701518591906134e3565b613231919061455c565b90506131d0565b6060600061324684846131a3565b61325190600161455c565b6001600160401b0381111561326857613268613a1a565b60405190808252806020026020018201604052801561329b57816020015b60608152602001906001900390816132865790505b50905060005b8151811015611c95576132b7611e338686612b7b565b8282815181106132c9576132c9613ec6565b60209081029190910101526001016132a1565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310613325577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310613351576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc10000831061336f57662386f26fc10000830492506010015b6305f5e1008310613387576305f5e100830492506008015b612710831061339b57612710830492506004015b606483106133ad576064830492506002015b600a83106102ac5760010192915050565b60006133ca8383613763565b159392505050565b6000808584116134d95760208411613485576000841561341d5760016133f986602061448f565b613404906008614742565b61340f906002614840565b613419919061448f565b1990505b835181168561342c898961455c565b613436919061448f565b805190935082165b81811461347057878411613458578794505050505061195e565b836134628161484c565b94505082845116905061343e565b61347a878561455c565b94505050505061195e565b838320613492858861448f565b61349c908761455c565b91505b8582106134d7578482208082036134c4576134ba868461455c565b935050505061195e565b6134cf60018461448f565b92505061349f565b505b5092949350505050565b600083818685116135ee576020851161359d576000851561352f57600161350b87602061448f565b613516906008614742565b613521906002614840565b61352b919061448f565b1990505b845181166000876135408b8b61455c565b61354a919061448f565b855190915083165b82811461358f578186106135775761356a8b8b61455c565b965050505050505061195e565b8561358181614729565b965050838651169050613552565b85965050505050505061195e565b508383206000905b6135af868961448f565b82116135ec578583208082036135cb578394505050505061195e565b6135d660018561455c565b93505081806135e490614729565b9250506135a5565b505b6135f8878761455c565b979650505050505050565b604080518082019091526000808252602080830182905285518682015186519287015161363093906134e3565b60208087018051918601919091525190915061364c908261448f565b83528451602086015161365f919061455c565b810361366e57600085526136a0565b8351835161367c919061455c565b8551869061368b90839061448f565b905250835161369a908261455c565b60208601525b50909392505050565b602081106136e157815183526136c060208461455c565b92506136cd60208361455c565b91506136da60208261448f565b90506136a9565b60001981156137105760016136f783602061448f565b61370390610100614840565b61370d919061448f565b90505b9151835183169219169190911790915250565b606060006137318484610712565b805160208083015160405193945061374b93909101614863565b60405160208183030381529060405291505092915050565b8151815160009190811115613776575081515b6020808501519084015160005b8381101561382f57825182518082146137ff5760001960208710156137de576001846137b089602061448f565b6137ba919061455c565b6137c5906008614742565b6137d0906002614840565b6137da919061448f565b1990505b81811683821681810391146137fc5797506102ac9650505050505050565b50505b61380a60208661455c565b945061381760208561455c565b93505050602081613828919061455c565b9050613783565b5084518651610ce0919061489f565b610c9f8061611f83390190565b6040518060e0016040528060608152602001606081526020016060815260200160001515815260200160001515815260200160001515815260200161388e613893565b905290565b6040518061010001604052806000151581526020016000151581526020016060815260200160008019168152602001606081526020016060815260200160001515815260200161388e6040518060800160405280600081526020016000815260200160008152602001600081525090565b60005b8381101561391f578181015183820152602001613907565b50506000910152565b60008151808452613940816020860160208601613904565b601f01601f19169290920160200192915050565b6001600160a01b038316815260406020820181905260009061195e90830184613928565b7f4661696c656420746f206465706c6f7920636f6e7472616374200000000000008152600083516139b081601a850160208801613904565b6101d160f51b601a9184019182015283516139d281601c840160208801613904565b01601c01949350505050565b6020815260006103ba6020830184613928565b600060208284031215613a0357600080fd5b81516001600160a01b03811681146103ba57600080fd5b634e487b7160e01b600052604160045260246000fd5b604051606081016001600160401b0381118282101715613a5257613a52613a1a565b60405290565b6000806001600160401b03841115613a7257613a72613a1a565b50604051601f19601f85018116603f011681018181106001600160401b0382111715613aa057613aa0613a1a565b604052838152905080828401851015613ab857600080fd5b611c95846020830185613904565b600082601f830112613ad757600080fd5b6103ba83835160208501613a58565b600060208284031215613af857600080fd5b81516001600160401b03811115613b0e57600080fd5b6102a884828501613ac6565b60008351613b2c818460208801613904565b835190830190613b40818360208801613904565b01949350505050565b7f4661696c656420746f206465706c6f7920636f6e747261637420000000000000815260008351613b8181601a850160208801613904565b7f207573696e6720636f6e7374727563746f722064617461202200000000000000601a918401918201528351613bbe816033840160208801613904565b601160f91b60339290910191820152603401949350505050565b60408152600b60408201526a1193d55391149657d3d55560aa1b60608201526080602082015260006103ba6080830184613928565b600060208284031215613c1f57600080fd5b81516001600160401b03811115613c3557600080fd5b8201601f81018413613c4657600080fd5b6102a884825160208401613a58565b60008551613c67818460208a01613904565b602f60f81b9083019081528551613c85816001840160208a01613904565b602f60f81b600192909101918201528451613ca7816002840160208901613904565b600181830101915050602f60f81b60018201528351613ccd816002840160208801613904565b64173539b7b760d91b600292909101918201526007019695505050505050565b604081526000613d006040830184613928565b828103602084015260048152630b985cdd60e21b60208201526040810191505092915050565b600060208284031215613d3857600080fd5b815180151581146103ba57600080fd5b7f436f756c64206e6f742066696e642041535420696e2061727469666163742000815260008251613d8081601f850160208701613904565b7f2e205365742060617374203d20747275656020696e20666f756e6472792e746f601f939091019283015250611b5b60f21b603f820152604101919050565b604081526000613dd26040830184613928565b8281036020840152601181527005cc2e6e85cc2c4e6ded8eae8caa0c2e8d607b1b60208201526040810191505092915050565b604081526000613e186040830184613928565b8281036020840152600c81526b2e6173742e6c6963656e736560a01b60208201526040810191505092915050565b7f2e6d657461646174612e736f75726365732e5b27000000000000000000000000815260008251613e7e816014850160208701613904565b6b13ae9735b2b1b1b0b5991a9b60a11b6014939091019283015250602001919050565b604081526000613eb46040830185613928565b82810360208401526103b68185613928565b634e487b7160e01b600052603260045260246000fd5b601160f91b81528151600090613ef9816001850160208701613904565b601160f91b6001939091019283015250600201919050565b60008251613f23818460208701613904565b6a2f6275696c642d696e666f60a81b920191825250600b01919050565b7f436f756c64206e6f742066696e64206275696c642d696e666f2066696c65207781527f697468206d61746368696e6720736f7572636520636f6465206861736820666f60208201526a0391031b7b73a3930b1ba160ad1b604082015260008251613fb281604b850160208701613904565b91909101604b0192915050565b634e487b7160e01b600052601160045260246000fd5b600060ff821660ff8103613feb57613feb613fbf565b60010192915050565b7f406f70656e7a657070656c696e2f646566656e6465722d6465706c6f792d636c81526801a595b9d0b58db1a560be1b60208201526000825161403e816029850160208701613904565b9190910160290192915050565b60408152601660408201527f4f50454e5a455050454c494e5f424153485f504154480000000000000000000060608201526080602082015260006103ba6080830184613928565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b828110156140eb57603f198786030184526140d6858351613928565b945060209384019391909101906001016140ba565b50929695505050505050565b60006020828403121561410957600080fd5b81516001600160401b0381111561411f57600080fd5b82016060818503121561413157600080fd5b614139613a30565b81518060030b811461414a57600080fd5b815260208201516001600160401b0381111561416557600080fd5b61417186828501613ac6565b60208301525060408201516001600160401b0381111561419057600080fd5b61419c86828501613ac6565b604083015250949350505050565b7f4661696c656420746f2072756e206261736820636f6d6d616e642077697468208152601160f91b6020820152600082516141ec816021850160208701613904565b7f222e20496620796f7520617265207573696e672057696e646f77732c2073657460219390910192830152507f20746865204f50454e5a455050454c494e5f424153485f5041544820656e766960418201527f726f6e6d656e74207661726961626c6520746f207468652066756c6c7920717560618201527f616c69666965642070617468206f66207468652062617368206578656375746160818201527f626c652e20466f72206578616d706c652c20696620796f75206172652075736960a18201527f6e672047697420666f722057696e646f77732c206164642074686520666f6c6c60c18201527f6f77696e67206c696e6520696e20746865202e656e762066696c65206f66207960e18201527f6f75722070726f6a65637420287573696e6720666f727761726420736c6173686101018201527f6573293a0a4f50454e5a455050454c494e5f424153485f504154483d22433a2f6101218201527f50726f6772616d2046696c65732f4769742f62696e2f6261736822000000000061014182015261015c01919050565b7f4661696c656420746f2066696e64206c696e65207769746820707265666978208152602760f81b6020820152600083516143bc816021850160208801613904565b6c0139034b71037baba383aba1d1609d1b60219184019182015283516143e981602e840160208801613904565b01602e01949350505050565b7f4661696c656420746f2072756e2075706772616465207361666574792076616c815268034b230ba34b7b71d160bd1b60208201526000825161403e816029850160208701613904565b7f55706772616465207361666574792076616c69646174696f6e206661696c65648152611d0560f11b602082015260008251614482816022850160208701613904565b9190910160220192915050565b818103818111156102ac576102ac613fbf565b6d021b7b73a3930b1ba103730b6b2960951b8152600082516144cb81600e850160208701613904565b7f206d75737420626520696e2074686520666f726d6174204d79436f6e74726163600e9390910192830152507f742e736f6c3a4d79436f6e7472616374206f72204d79436f6e74726163742e73602e8201527f6f6c206f72206f75742f4d79436f6e74726163742e736f6c2f4d79436f6e7472604e8201526730b1ba173539b7b760c11b606e820152607601919050565b808201808211156102ac576102ac613fbf565b7f53504458206c6963656e7365206964656e7469666965722000000000000000008152600083516145a7816018850160208801613904565b6301034b7160e51b60189184019182015283516145cb81601c840160208801613904565b7f20646f6573206e6f74206c6f6f6b206c696b65206120737570706f7274656420601c92909101918201527f6c6963656e736520666f7220626c6f636b206578706c6f726572207665726966603c8201527f69636174696f6e2e205573652074686520606c6963656e73655479706560206f605c8201527f7074696f6e20746f20737065636966792061206c6963656e736520747970652c607c8201527f206f7220736574207468652060736b69704c6963656e73655479706560206f70609c8201527f74696f6e20746f2060747275656020746f20736b69702e00000000000000000060bc82015260d301949350505050565b600082516146d1818460208701613904565b600160fd1b920191825250600101919050565b7f406f70656e7a657070656c696e2f75706772616465732d636f7265400000000081526000825161471c81601c850160208701613904565b91909101601c0192915050565b60006001820161473b5761473b613fbf565b5060010190565b80820281158282048414176102ac576102ac613fbf565b6001815b60018411156147945780850481111561477857614778613fbf565b600184161561478657908102905b60019390931c92800261475d565b935093915050565b6000826147ab575060016102ac565b816147b8575060006102ac565b81600181146147ce57600281146147d8576147f4565b60019150506102ac565b60ff8411156147e9576147e9613fbf565b50506001821b6102ac565b5060208310610133831016604e8410600b8410161715614817575081810a6102ac565b6148246000198484614759565b806000190482111561483857614838613fbf565b029392505050565b60006103ba838361479c565b60008161485b5761485b613fbf565b506000190190565b60008351614875818460208801613904565b601d60f91b9083019081528351614893816001840160208801613904565b01600101949350505050565b8181036000831280158383131683831282161715612b9a57612b9a613fbf565b6080516118226148fd600039600081816101bf01528181610574015281816105d60152818161093501528181610ba30152610c0501526118226000f3fe608060405234801561001057600080fd5b506004361061018d5760003560e01c806381100bf0116100e3578063a217fddf1161008c578063d936547e11610066578063d936547e146103c9578063d9caed12146103ec578063e63ab1e9146103ff57600080fd5b8063a217fddf1461039b578063c8a02362146103a3578063d547741f146103b657600080fd5b806391d14854116100bd57806391d148541461032f5780639a590427146103755780639b19251a1461038857600080fd5b806381100bf0146102e05780638456cb591461030057806385f438c11461030857600080fd5b806336568abe11610145578063570618e11161011f578063570618e11461029b5780635c975abb146102c25780636133b4bb146102cd57600080fd5b806336568abe146102605780633c2f05a8146102735780633f4ba83a1461029357600080fd5b806321fc65f21161017657806321fc65f214610206578063248a9ca31461021b5780632f2ff15d1461024d57600080fd5b806301ffc9a714610192578063116191b6146101ba575b600080fd5b6101a56101a0366004611436565b610426565b60405190151581526020015b60405180910390f35b6101e17f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101b1565b6102196102143660046114ea565b6104bf565b005b61023f610229366004611559565b6000908152600160208190526040909120015490565b6040519081526020016101b1565b61021961025b366004611572565b6106c0565b61021961026e366004611572565b6106ec565b6004546101e19073ffffffffffffffffffffffffffffffffffffffff1681565b61021961074a565b61023f7f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a81565b60025460ff166101a5565b6102196102db36600461159e565b61077f565b6005546101e19073ffffffffffffffffffffffffffffffffffffffff1681565b6102196109b7565b61023f7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b6101a561033d366004611572565b600091825260016020908152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b6102196103833660046115f8565b6109e9565b6102196103963660046115f8565b610a6a565b61023f600081565b6102196103b13660046114ea565b610aee565b6102196103c4366004611572565b610cd5565b6101a56103d73660046115f8565b60036020526000908152604090205460ff1681565b6102196103fa366004611613565b610cfb565b61023f7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b0000000000000000000000000000000000000000000000000000000014806104b957507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b6104c7610e27565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e46104f181610e6a565b6104f9610e74565b73ffffffffffffffffffffffffffffffffffffffff861660009081526003602052604090205460ff16610558576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61059973ffffffffffffffffffffffffffffffffffffffff87167f000000000000000000000000000000000000000000000000000000000000000086610eb3565b6040517f5131ab5900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690635131ab59906106139089908990899089908990600401611699565b600060405180830381600087803b15801561062d57600080fd5b505af1158015610641573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167f85b5be9cf454e05e0bddf49315178102227c312078eefa3c00294fb4d912ae4e8686866040516106a6939291906116f6565b60405180910390a3506106b96001600055565b5050505050565b600082815260016020819052604090912001546106dc81610e6a565b6106e68383610f40565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8116331461073b576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6107458282610fed565b505050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61077481610e6a565b61077c61108e565b50565b60045473ffffffffffffffffffffffffffffffffffffffff166340c10f19306107a9866005611719565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815273ffffffffffffffffffffffffffffffffffffffff90921660048301526024820152604401600060405180830381600087803b15801561081457600080fd5b505af1158015610828573d6000803e3d6000fd5b5050600480546007546040517fa9059cbb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff918216938101939093526005602484015216925063a9059cbb91506044016020604051808303816000875af11580156108a9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108cd9190611753565b506004546108f49073ffffffffffffffffffffffffffffffffffffffff16858585856104bf565b600480546040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116938201939093529116906370a0823190602401602060405180830381865afa158015610986573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109aa9190611775565b156106e6576106e661178e565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a6109e181610e6a565b61077c6110ed565b7f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a610a1381610e6a565b73ffffffffffffffffffffffffffffffffffffffff8216600081815260036020526040808220805460ff19169055517f51085ddf9ebdded84b76e829eb58c4078e4b5bdf97d9a94723f336039da467919190a25050565b7f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a610a9481610e6a565b73ffffffffffffffffffffffffffffffffffffffff8216600081815260036020526040808220805460ff19166001179055517faab7954e9d246b167ef88aeddad35209ca2489d95a8aeb59e288d9b19fae5a549190a25050565b610af6610e27565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e4610b2081610e6a565b610b28610e74565b73ffffffffffffffffffffffffffffffffffffffff861660009081526003602052604090205460ff16610b87576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610bc873ffffffffffffffffffffffffffffffffffffffff87167f000000000000000000000000000000000000000000000000000000000000000086610eb3565b6040517fb8969bd400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063b8969bd490610c429089908990899089908990600401611699565b600060405180830381600087803b158015610c5c57600080fd5b505af1158015610c70573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fb9d4efa96044e5f5e03e696fa9ae2ff66911cc27e8a637c3627c75bc5b2241c88686866040516106a6939291906116f6565b60008281526001602081905260409091200154610cf181610e6a565b6106e68383610fed565b610d03610e27565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e4610d2d81610e6a565b610d35610e74565b73ffffffffffffffffffffffffffffffffffffffff841660009081526003602052604090205460ff16610d94576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610db573ffffffffffffffffffffffffffffffffffffffff85168484610eb3565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f9b1bfa7fa9ee420a16e124f794c35ac9f90472acc99140eb2f6447c714cad8eb84604051610e1491815260200190565b60405180910390a3506107456001600055565b600260005403610e63576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b61077c813361112a565b60025460ff1615610eb1576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6040805173ffffffffffffffffffffffffffffffffffffffff8416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb000000000000000000000000000000000000000000000000000000001790526107459084906111bb565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff16610fe557600083815260016020818152604080842073ffffffffffffffffffffffffffffffffffffffff87168086529252808420805460ff19169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45060016104b9565b5060006104b9565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff1615610fe557600083815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff86168085529252808320805460ff1916905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45060016104b9565b611096611251565b6002805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b6110f5610e74565b6002805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586110c33390565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff166111b7576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82166004820152602481018390526044015b60405180910390fd5b5050565b60006111dd73ffffffffffffffffffffffffffffffffffffffff84168361128d565b905080516000141580156112025750808060200190518101906112009190611753565b155b15610745576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff841660048201526024016111ae565b60025460ff16610eb1576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606061129b838360006112a2565b9392505050565b6060814710156112e0576040517fcd7860590000000000000000000000000000000000000000000000000000000081523060048201526024016111ae565b6000808573ffffffffffffffffffffffffffffffffffffffff16848660405161130991906117bd565b60006040518083038185875af1925050503d8060008114611346576040519150601f19603f3d011682016040523d82523d6000602084013e61134b565b606091505b509150915061135b868383611365565b9695505050505050565b60608261137a57611375826113f4565b61129b565b815115801561139e575073ffffffffffffffffffffffffffffffffffffffff84163b155b156113ed576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff851660048201526024016111ae565b508061129b565b8051156114045780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006020828403121561144857600080fd5b81357fffffffff000000000000000000000000000000000000000000000000000000008116811461129b57600080fd5b803573ffffffffffffffffffffffffffffffffffffffff8116811461149c57600080fd5b919050565b60008083601f8401126114b357600080fd5b50813567ffffffffffffffff8111156114cb57600080fd5b6020830191508360208285010111156114e357600080fd5b9250929050565b60008060008060006080868803121561150257600080fd5b61150b86611478565b945061151960208701611478565b935060408601359250606086013567ffffffffffffffff81111561153c57600080fd5b611548888289016114a1565b969995985093965092949392505050565b60006020828403121561156b57600080fd5b5035919050565b6000806040838503121561158557600080fd5b8235915061159560208401611478565b90509250929050565b600080600080606085870312156115b457600080fd5b6115bd85611478565b935060208501359250604085013567ffffffffffffffff8111156115e057600080fd5b6115ec878288016114a1565b95989497509550505050565b60006020828403121561160a57600080fd5b61129b82611478565b60008060006060848603121561162857600080fd5b61163184611478565b925061163f60208501611478565b929592945050506040919091013590565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff8616815273ffffffffffffffffffffffffffffffffffffffff851660208201528360408201526080606082015260006116eb608083018486611650565b979650505050505050565b838152604060208201526000611710604083018486611650565b95945050505050565b808201808211156104b9577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006020828403121561176557600080fd5b8151801515811461129b57600080fd5b60006020828403121561178757600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b6000825160005b818110156117de57602081860181015185830152016117c4565b50600092019182525091905056fea264697066735822122077f2d215a4760682a6f757e5b5c49fde9ea29a3b2ef55d3e1c39d0779fbdec1164736f6c634300081a0033608060405234801561001057600080fd5b50604051610c9f380380610c9f83398101604081905261002f9161010d565b8181600361003d83826101ff565b50600461004a82826101ff565b50505050506102bd565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261007b57600080fd5b81516001600160401b0381111561009457610094610054565b604051601f8201601f19908116603f011681016001600160401b03811182821017156100c2576100c2610054565b6040528181528382016020018510156100da57600080fd5b60005b828110156100f9576020818601810151838301820152016100dd565b506000918101602001919091529392505050565b6000806040838503121561012057600080fd5b82516001600160401b0381111561013657600080fd5b6101428582860161006a565b602085015190935090506001600160401b0381111561016057600080fd5b61016c8582860161006a565b9150509250929050565b600181811c9082168061018a57607f821691505b6020821081036101aa57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156101fa57806000526020600020601f840160051c810160208510156101d75750805b601f840160051c820191505b818110156101f757600081556001016101e3565b50505b505050565b81516001600160401b0381111561021857610218610054565b61022c816102268454610176565b846101b0565b6020601f82116001811461026057600083156102485750848201515b600019600385901b1c1916600184901b1784556101f7565b600084815260208120601f198516915b828110156102905787850151825560209485019460019092019101610270565b50848210156102ae5786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b6109d3806102cc6000396000f3fe608060405234801561001057600080fd5b50600436106100be5760003560e01c806340c10f191161007657806395d89b411161005b57806395d89b4114610183578063a9059cbb1461018b578063dd62ed3e1461019e57600080fd5b806340c10f191461013857806370a082311461014d57600080fd5b806318160ddd116100a757806318160ddd1461010457806323b872dd14610116578063313ce5671461012957600080fd5b806306fdde03146100c3578063095ea7b3146100e1575b600080fd5b6100cb6101e4565b6040516100d891906107bf565b60405180910390f35b6100f46100ef366004610854565b610276565b60405190151581526020016100d8565b6002545b6040519081526020016100d8565b6100f461012436600461087e565b610290565b604051601281526020016100d8565b61014b610146366004610854565b6102b4565b005b61010861015b3660046108bb565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6100cb6102c2565b6100f4610199366004610854565b6102d1565b6101086101ac3660046108dd565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6060600380546101f390610910565b80601f016020809104026020016040519081016040528092919081815260200182805461021f90610910565b801561026c5780601f106102415761010080835404028352916020019161026c565b820191906000526020600020905b81548152906001019060200180831161024f57829003601f168201915b5050505050905090565b6000336102848185856102df565b60019150505b92915050565b60003361029e8582856102f1565b6102a98585856103c5565b506001949350505050565b6102be8282610470565b5050565b6060600480546101f390610910565b6000336102848185856103c5565b6102ec83838360016104cc565b505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146103bf57818110156103b0576040517ffb8f41b200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416600482015260248101829052604481018390526064015b60405180910390fd5b6103bf848484840360006104cc565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8316610415576040517f96c6fd1e000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff8216610465576040517fec442f05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b6102ec838383610614565b73ffffffffffffffffffffffffffffffffffffffff82166104c0576040517fec442f05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b6102be60008383610614565b73ffffffffffffffffffffffffffffffffffffffff841661051c576040517fe602df05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff831661056c576040517f94280d62000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260016020908152604080832093871683529290522082905580156103bf578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161060691815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff831661064c5780600260008282546106419190610963565b909155506106fe9050565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260208190526040902054818110156106d2576040517fe450d38c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8516600482015260248101829052604481018390526064016103a7565b73ffffffffffffffffffffffffffffffffffffffff841660009081526020819052604090209082900390555b73ffffffffffffffffffffffffffffffffffffffff821661072757600280548290039055610753565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090208054820190555b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516107b291815260200190565b60405180910390a3505050565b602081526000825180602084015260005b818110156107ed57602081860181015160408684010152016107d0565b5060006040828501015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011684010191505092915050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461084f57600080fd5b919050565b6000806040838503121561086757600080fd5b6108708361082b565b946020939093013593505050565b60008060006060848603121561089357600080fd5b61089c8461082b565b92506108aa6020850161082b565b929592945050506040919091013590565b6000602082840312156108cd57600080fd5b6108d68261082b565b9392505050565b600080604083850312156108f057600080fd5b6108f98361082b565b91506109076020840161082b565b90509250929050565b600181811c9082168061092457607f821691505b60208210810361095d577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b8082018082111561028a577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea26469706673582212207e804ca539d49155d2b6bc19268ce22f9f857027c75247d69fb0d56a089c93d464736f6c634300081a00330000000000000000000000007109709ecfa91a80626ff3989d68f67f5b1dd12d8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f7420"; + "0x600580546001600160a01b03191633908117909155600e60a09081526d11d85d195dd85e5155934b9cdbdb60921b60c0526101049190915261012361012481905261014452606460e090815261016460405261010080516001600160e01b0390811663c0c53b8b60e01b1790915261007992919061029316565b600680546001600160a01b03929092166001600160a01b03199283168117909155600780549092161790553480156100b057600080fd5b5060075460055460016000556002805460ff191690556001600160a01b039182169116808215806100e857506001600160a01b038216155b806100fa57506001600160a01b038116155b156101185760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b0383166080526101306000826102b2565b5061015b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a826102b2565b506101867f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e4836102b2565b5061019f600080516020616dde833981519152826102b2565b506101b8600080516020616dde833981519152836102b2565b505050506040516101c89061383e565b60408082526004908201819052631d195cdd60e21b606083015260806020830181905282015263151154d560e21b60a082015260c001604051809103906000f08015801561021a573d6000803e3d6000fd5b50600480546001600160a01b0319166001600160a01b0392831617815560075460405163ae7a3a6f60e01b815230928101929092529091169063ae7a3a6f90602401600060405180830381600087803b15801561027657600080fd5b505af115801561028a573d6000803e3d6000fd5b505050506148bf565b600061029d61384b565b6102a8848483610345565b9150505b92915050565b60008281526001602090815260408083206001600160a01b038516845290915281205460ff1661033d5760008381526001602081815260408084206001600160a01b0387168086529252808420805460ff19169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45060016102ac565b5060006102ac565b60008061035285846103c1565b90506103b66040518060400160405280601d81526020017f4552433139363750726f78792e736f6c3a4552433139363750726f787900000081525082866040516020016103a0929190613954565b60408051601f19818403018152919052856103cd565b9150505b9392505050565b60006103ba8383610401565b60c081015151600090156103f7576103f084848460c0015161042260201b60201c565b90506103ba565b6103f0848461059b565b600061040d8383610668565b6103ba838360200151846103cd60201b60201c565b60008061042d610678565b9050600061043b8683610712565b905060006104588260600151836020015185610b3560201b60201c565b9050600061046883838989610cea565b9050600061047582611966565b602081015181519192509060030b156104ce5789826040015160405160200161049f929190613978565b60408051601f198184030181529082905262461bcd60e51b82526104c5916004016139de565b60405180910390fd5b60006105176040518060400160405280601581526020017f4465706c6f79656420746f20616464726573733a200000000000000000000000815250836001611afd60201b60201c565b60405163c6ce059d60e01b8152909150600080516020616dbe8339815191529063c6ce059d9061054b9084906004016139de565b602060405180830381865afa158015610568573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061058c91906139f1565b9b9a5050505050505050505050565b604051638d1cc92560e01b81526000908190600080516020616dbe83398151915290638d1cc925906105d19087906004016139de565b600060405180830381865afa1580156105ee573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526106169190810190613ae6565b905060006106458285604051602001610630929190613b1a565b60408051601f19818403018152919052611c9d565b90506001600160a01b0381166102a857848460405160200161049f929190613b49565b61067482826000611cb0565b5050565b60408051808201825260038152621bdd5d60ea1b602082015290516334515cdb60e21b8152606091600080516020616dbe83398151915291829063d145736c906106c6908490600401613bd8565b600060405180830381865afa1580156106e3573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261070b9190810190613c0d565b9250505090565b6107446040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b6000600080516020616dbe83398151915290506107896040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b61079285611d8a565b602082015260006107a286611fdf565b90506000836001600160a01b031663d930a0e66040518163ffffffff1660e01b8152600401600060405180830381865afa1580156107e4573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261080c9190810190613c0d565b868385602001516040516020016108269493929190613c55565b60408051601f19818403018152908290526360f9bb1160e01b825291506000906001600160a01b038616906360f9bb11906108659085906004016139de565b600060405180830381865afa158015610882573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526108aa9190810190613c0d565b604051636da11afb60e11b81529091506001600160a01b0386169063db4235f6906108d9908490600401613ced565b602060405180830381865afa1580156108f6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061091a9190613d26565b61092f578160405160200161049f9190613d48565b6040516309389f5960e31b81526001600160a01b038616906349c4fac89061095b908490600401613dbf565b600060405180830381865afa158015610978573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526109a09190810190613c0d565b8452604051636da11afb60e11b81526001600160a01b0386169063db4235f6906109ce908490600401613e05565b602060405180830381865afa1580156109eb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a0f9190613d26565b15610a8b576040516309389f5960e31b81526001600160a01b038616906349c4fac890610a40908490600401613e05565b600060405180830381865afa158015610a5d573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610a859190810190613c0d565b60408501525b846001600160a01b03166349c4fac8828660000151604051602001610ab09190613e46565b6040516020818303038152906040526040518363ffffffff1660e01b8152600401610adc929190613ea1565b600060405180830381865afa158015610af9573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610b219190810190613c0d565b606085015250608083015250949350505050565b60408051600480825260a0820190925260609160009190816020015b6060815260200190600190039081610b51579050509050604051806040016040528060048152602001630677265760e41b81525081600081518110610b9857610b98613ec6565b6020026020010181905250604051806040016040528060038152602001620b5c9b60ea1b81525081600181518110610bd257610bd2613ec6565b602002602001018190525084604051602001610bee9190613edc565b60405160208183030381529060405281600281518110610c1057610c10613ec6565b602002602001018190525082604051602001610c2c9190613f11565b60405160208183030381529060405281600381518110610c4e57610c4e613ec6565b60209081029190910101526000610c6482611966565b9050600081602001519050610ccb610c9e60405180604001604052806005815260200164173539b7b760d91b81525061216260201b60201c565b6040805180820182526000808252602091820152815180830190925284518252808501908201529061218f565b610ce0578560405160200161049f9190613f40565b9695505050505050565b60a0810151604080518082018252600080825260209182015281518083019092528251808352928101910152606090600080516020616dbe8339815191529015610d34565b511590565b610e5057826020015115610dc45760405162461bcd60e51b81526020600482015260586024820152600080516020616dfe83398151915260448201527f62652075736564207768656e207468652060736b6970566572696679536f757260648201527f6365436f646560206f7074696f6e206973206074727565600000000000000000608482015260a4016104c5565b8260c0015115610e505760405162461bcd60e51b81526020600482015260536024820152600080516020616dfe83398151915260448201527f62652075736564207768656e207468652060736b69704c6963656e736554797060648201527f6560206f7074696f6e2069732060747275656000000000000000000000000000608482015260a4016104c5565b6040805160ff8082526120008201909252600091816020015b6060815260200190600190039081610e695790505090506000604051806040016040528060038152602001620dce0f60eb1b815250828280610eaa90613fd5565b935060ff1681518110610ebf57610ebf613ec6565b60200260200101819052506040518060400160405280600d81526020016c302e302e312d616c7068612e3760981b815250604051602001610f009190613ff4565b604051602081830303815290604052828280610f1b90613fd5565b935060ff1681518110610f3057610f30613ec6565b6020026020010181905250604051806040016040528060068152602001656465706c6f7960d01b815250828280610f6690613fd5565b935060ff1681518110610f7b57610f7b613ec6565b60200260200101819052506040518060400160405280600e81526020016d2d2d636f6e74726163744e616d6560901b815250828280610fb990613fd5565b935060ff1681518110610fce57610fce613ec6565b60200260200101819052508760200151828280610fea90613fd5565b935060ff1681518110610fff57610fff613ec6565b60200260200101819052506040518060400160405280600e81526020016d05a5ac6dedce8e4c2c6e8a0c2e8d60931b81525082828061103d90613fd5565b935060ff168151811061105257611052613ec6565b60209081029190910101528751828261106a81613fd5565b935060ff168151811061107f5761107f613ec6565b6020026020010181905250604051806040016040528060098152602001680b4b58da185a5b925960ba1b8152508282806110b890613fd5565b935060ff16815181106110cd576110cd613ec6565b60209081029190910101526110e1466121f0565b82826110ec81613fd5565b935060ff168151811061110157611101613ec6565b60200260200101819052506040518060400160405280600f81526020016e2d2d6275696c64496e666f46696c6560881b81525082828061114090613fd5565b935060ff168151811061115557611155613ec6565b60200260200101819052508682828061116d90613fd5565b935060ff168151811061118257611182613ec6565b60209081029190910101528551156112905760408051808201909152601581527f2d2d636f6e7374727563746f7242797465636f64650000000000000000000000602082015282826111d381613fd5565b935060ff16815181106111e8576111e8613ec6565b60209081029190910101526040516371aad10d60e01b81526001600160a01b038416906371aad10d9061121f9089906004016139de565b600060405180830381865afa15801561123c573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526112649190810190613c0d565b828261126f81613fd5565b935060ff168151811061128457611284613ec6565b60200260200101819052505b84602001511561133d576040805180820190915260128152712d2d766572696679536f75726365436f646560701b602082015282826112ce81613fd5565b935060ff16815181106112e3576112e3613ec6565b60200260200101819052506040518060400160405280600581526020016466616c736560d81b81525082828061131890613fd5565b935060ff168151811061132d5761132d613ec6565b60200260200101819052506114a4565b611353610d2f8660a0015161216260201b60201c565b6113d65760408051808201909152600d81526c2d2d6c6963656e73655479706560981b6020820152828261138681613fd5565b935060ff168151811061139b5761139b613ec6565b60200260200101819052508460a001516040516020016113bb9190613edc565b60405160208183030381529060405282828061131890613fd5565b8460c001511580156113fb57506113f9610d2f896040015161216260201b60201c565b155b156114a45760408051808201909152600d81526c2d2d6c6963656e73655479706560981b6020820152828261142f81613fd5565b935060ff168151811061144457611444613ec6565b602090810291909101015261145888612282565b6040516020016114689190613edc565b60405160208183030381529060405282828061148390613fd5565b935060ff168151811061149857611498613ec6565b60200260200101819052505b6114ba610d2f866040015161216260201b60201c565b61153d5760408051808201909152600b81526a0b4b5c995b185e595c925960aa1b602082015282826114eb81613fd5565b935060ff168151811061150057611500613ec6565b6020026020010181905250846040015182828061151c90613fd5565b935060ff168151811061153157611531613ec6565b60200260200101819052505b60608501511561162e576040805180820190915260068152650b4b5cd85b1d60d21b6020820152828261156f81613fd5565b935060ff168151811061158457611584613ec6565b60209081029190910101526060850151604051631623433d60e31b815260048101919091526001600160a01b0384169063b11a19e890602401600060405180830381865afa1580156115da573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526116029190810190613c0d565b828261160d81613fd5565b935060ff168151811061162257611622613ec6565b60200260200101819052505b60e085015151156116c05760408051808201909152600a8152690b4b59d85cd31a5b5a5d60b21b6020820152828261166581613fd5565b935060ff168151811061167a5761167a613ec6565b602090810291909101015260e085015151611694906121f0565b828261169f81613fd5565b935060ff16815181106116b4576116b4613ec6565b60200260200101819052505b60e0850151602001511561175d5760408051808201909152600a8152692d2d676173507269636560b01b602082015282826116fa81613fd5565b935060ff168151811061170f5761170f613ec6565b60200260200101819052506117318560e00151602001516121f060201b60201c565b828261173c81613fd5565b935060ff168151811061175157611751613ec6565b60200260200101819052505b60e085015160400151156117fe5760408051808201909152600e81526d2d2d6d617846656550657247617360901b6020820152828261179b81613fd5565b935060ff16815181106117b0576117b0613ec6565b60200260200101819052506117d28560e00151604001516121f060201b60201c565b82826117dd81613fd5565b935060ff16815181106117f2576117f2613ec6565b60200260200101819052505b60e085015160600151156118ae5760408051808201909152601681527f2d2d6d61785072696f72697479466565506572476173000000000000000000006020820152828261184b81613fd5565b935060ff168151811061186057611860613ec6565b60200260200101819052506118828560e00151606001516121f060201b60201c565b828261188d81613fd5565b935060ff16815181106118a2576118a2613ec6565b60200260200101819052505b60008160ff166001600160401b038111156118cb576118cb613a1a565b6040519080825280602002602001820160405280156118fe57816020015b60608152602001906001900390816118e95790505b50905060005b8260ff168160ff16101561195757838160ff168151811061192757611927613ec6565b6020026020010151828260ff168151811061194457611944613ec6565b6020908102919091010152600101611904565b5093505050505b949350505050565b61198d6040518060600160405280600060030b815260200160608152602001606081525090565b6040805180820182526004808252630c4c2e6d60e31b602083015291516334515cdb60e21b8152600080516020616dbe83398151915292600091849163d145736c916119db9186910161404b565b600060405180830381865afa1580156119f8573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611a209190810190613c0d565b90506000611a2e8683612938565b90506000846001600160a01b031663f45c1ce7836040518263ffffffff1660e01b8152600401611a5e9190614092565b6000604051808303816000875af1158015611a7d573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611aa591908101906140f7565b805190915060030b15801590611abe5750602081015151155b8015611acd5750604081015151155b15610ce05781600081518110611ae557611ae5613ec6565b602002602001015160405160200161049f91906141aa565b60606000611b328560408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600080825260209182015281518083019092528651825280870190820152909150611b699082905b90612a72565b15611c66576000611be682611be081611bda611bac8a60408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6040805180820182526000808252602091820152815180830190925282518252918201519181019190915290565b90612a99565b90612af6565b9050611c1a611c13604051806040016040528060018152602001600560f91b81525061216260201b60201c565b8290612a72565b15611c5457611c51611c4a604051806040016040528060018152602001600560f91b81525061216260201b60201c565b8290612b7b565b90505b611c5d81612ba1565b925050506103ba565b8215611c7f57848460405160200161049f92919061437a565b50506040805160208101909152600081526103ba565b509392505050565b6000808251602084016000f09392505050565b8160a0015115611cbf57505050565b6000611ccc848484612c06565b90506000611cd982611966565b602081015181519192509060030b158015611d4c5750611d4c611d20604051806040016040528060078152602001665355434345535360c81b81525061216260201b60201c565b604080518082018252600080825260209182015281518083019092528451825280850190820152611b63565b15611d5957505050505050565b60408201515115611d7957816040015160405160200161049f91906143f5565b8060405160200161049f919061443f565b60606000611dbf8360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b9050611df6611def604051806040016040528060048152602001630b9cdbdb60e21b81525061216260201b60201c565b829061218f565b15611e38576103ba611e33611e2c604051806040016040528060048152602001630b9cdbdb60e21b81525061216260201b60201c565b8390613119565b612ba1565b611e6a611e63604051806040016040528060018152602001601d60f91b81525061216260201b60201c565b82906131a3565b600103611ed257611e9c611c4a604051806040016040528060018152602001601d60f91b81525061216260201b60201c565b506103ba611e33611ecb604051806040016040528060018152602001601d60f91b81525061216260201b60201c565b8390612b7b565b611f01611def60405180604001604052806005815260200164173539b7b760d91b81525061216260201b60201c565b15611fce576000611f3982611f34604051806040016040528060018152602001602f60f81b81525061216260201b60201c565b613238565b905060008160018351611f4c919061448f565b81518110611f5c57611f5c613ec6565b60200260200101519050611fc5611e33611f9860405180604001604052806005815260200164173539b7b760d91b81525061216260201b60201c565b60408051808201825260008082526020918201528151808301909252855182528086019082015290613119565b95945050505050565b8260405160200161049f91906144a2565b606060006120148360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b9050612044611def604051806040016040528060048152602001630b9cdbdb60e21b81525061216260201b60201c565b15612052576103ba81612ba1565b61207d611e63604051806040016040528060018152602001601d60f91b81525061216260201b60201c565b6001036120b2576103ba611e33611ecb604051806040016040528060018152602001601d60f91b81525061216260201b60201c565b6120e1611def60405180604001604052806005815260200164173539b7b760d91b81525061216260201b60201c565b15611fce57600061211482611f34604051806040016040528060018152602001602f60f81b81525061216260201b60201c565b905060018151111561215057806002825161212f919061448f565b8151811061213f5761213f613ec6565b602002602001015192505050919050565b508260405160200161049f91906144a2565b60408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b8051825160009111156121a4575060006102ac565b815183516020850151600092916121ba9161455c565b6121c4919061448f565b9050826020015181036121db5760019150506102ac565b82516020840151819020912014905092915050565b606060006121fd836132dc565b60010190506000816001600160401b0381111561221c5761221c613a1a565b6040519080825280601f01601f191660200182016040528015612246576020820181803683370190505b5090508181016020015b600019016f181899199a1a9b1b9c1cb0b131b232b360811b600a86061a8153600a850494508461225057509392505050565b60606000612299836040015161216260201b60201c565b90506122d66122cf6040518060400160405280600a8152602001691553931250d15394d15160b21b81525061216260201b60201c565b82906133be565b156122fd5750506040805180820190915260048152634e6f6e6560e01b6020820152919050565b6123306122cf60405180604001604052806009815260200168556e6c6963656e736560b81b81525061216260201b60201c565b1561235c575050604080518082019091526009815268556e6c6963656e736560b81b6020820152919050565b6123896122cf6040518060400160405280600381526020016213525560ea1b81525061216260201b60201c565b156123af57505060408051808201909152600381526213525560ea1b6020820152919050565b6123e56122cf6040518060400160405280600c81526020016b47504c2d322e302d6f6e6c7960a01b81525061216260201b60201c565b8061242557506124256122cf6040518060400160405280601081526020016f23a8261699171816b7b916b630ba32b960811b81525061216260201b60201c565b1561245157505060408051808201909152600981526823a72a9023a8263b1960b91b6020820152919050565b6124876122cf6040518060400160405280600c81526020016b47504c2d332e302d6f6e6c7960a01b81525061216260201b60201c565b806124c757506124c76122cf6040518060400160405280601081526020016f23a8261699971816b7b916b630ba32b960811b81525061216260201b60201c565b156124f3575050604080518082019091526009815268474e552047504c763360b81b6020820152919050565b61252a6122cf6040518060400160405280600d81526020016c4c47504c2d322e312d6f6e6c7960981b81525061216260201b60201c565b8061256b575061256b6122cf604051806040016040528060118152602001702623a8261699171896b7b916b630ba32b960791b81525061216260201b60201c565b1561259a57505060408051808201909152600c81526b474e55204c47504c76322e3160a01b6020820152919050565b6125d16122cf6040518060400160405280600d81526020016c4c47504c2d332e302d6f6e6c7960981b81525061216260201b60201c565b8061261257506126126122cf604051806040016040528060118152602001702623a8261699971816b7b916b630ba32b960791b81525061216260201b60201c565b1561263f57505060408051808201909152600a815269474e55204c47504c763360b01b6020820152919050565b6126756122cf6040518060400160405280600c81526020016b4253442d322d436c6175736560a01b81525061216260201b60201c565b156126a457505060408051808201909152600c81526b4253442d322d436c6175736560a01b6020820152919050565b6126da6122cf6040518060400160405280600c81526020016b4253442d332d436c6175736560a01b81525061216260201b60201c565b1561270957505060408051808201909152600c81526b4253442d332d436c6175736560a01b6020820152919050565b61273a6122cf6040518060400160405280600781526020016604d504c2d322e360cc1b81525061216260201b60201c565b1561276457505060408051808201909152600781526604d504c2d322e360cc1b6020820152919050565b6127956122cf6040518060400160405280600781526020016604f534c2d332e360cc1b81525061216260201b60201c565b156127bf57505060408051808201909152600781526604f534c2d332e360cc1b6020820152919050565b6127f36122cf6040518060400160405280600a81526020016904170616368652d322e360b41b81525061216260201b60201c565b1561282057505060408051808201909152600a81526904170616368652d322e360b41b6020820152919050565b6128576122cf6040518060400160405280600d81526020016c4147504c2d332e302d6f6e6c7960981b81525061216260201b60201c565b8061289857506128986122cf6040518060400160405280601181526020017020a3a8261699971816b7b916b630ba32b960791b81525061216260201b60201c565b156128c557505060408051808201909152600a815269474e55204147504c763360b01b6020820152919050565b6128f76122cf604051806040016040528060088152602001674255534c2d312e3160c01b81525061216260201b60201c565b1561292157505060408051808201909152600781526642534c20312e3160c81b6020820152919050565b6040808401518451915161049f929060200161456f565b60608060005b84518110156129c3578185828151811061295a5761295a613ec6565b6020026020010151604051602001612973929190613b1a565b604051602081830303815290604052915060018551612992919061448f565b81146129bb57816040516020016129a991906146bf565b60405160208183030381529060405291505b60010161293e565b5060408051600380825260808201909252600091816020015b60608152602001906001900390816129dc5790505090508381600081518110612a0757612a07613ec6565b6020026020010181905250604051806040016040528060028152602001612d6360f01b81525081600181518110612a4057612a40613ec6565b60200260200101819052508181600281518110612a5f57612a5f613ec6565b6020908102919091010152949350505050565b6020808301518351835192840151600093612a9092918491906133d2565b14159392505050565b6040805180820190915260008082526020808301829052845185820151855192860151612ac693906134e3565b9050836020015181612ad8919061448f565b84518590612ae790839061448f565b90525060208401525090919050565b6040805180820190915260008082526020820152815183511015612b1b5750816102ac565b6020808301519084015160019114612b425750815160208481015190840151829020919020145b8015612b7357825184518590612b5990839061448f565b9052508251602085018051612b6f90839061455c565b9052505b509192915050565b6040805180820190915260008082526020820152612b9a838383613603565b5092915050565b6060600082600001516001600160401b03811115612bc157612bc1613a1a565b6040519080825280601f01601f191660200182016040528015612beb576020820181803683370190505b50602084810151855192935090830191612b9a9183916136a9565b60606000612c12610678565b6040805160ff808252612000820190925291925060009190816020015b6060815260200190600190039081612c2f5790505090506000604051806040016040528060038152602001620dce0f60eb1b815250828280612c7090613fd5565b935060ff1681518110612c8557612c85613ec6565b6020026020010181905250604051806040016040528060078152602001665e312e33322e3360c81b815250604051602001612cc091906146e4565b604051602081830303815290604052828280612cdb90613fd5565b935060ff1681518110612cf057612cf0613ec6565b60200260200101819052506040518060400160405280600881526020016776616c696461746560c01b815250828280612d2890613fd5565b935060ff1681518110612d3d57612d3d613ec6565b602002602001018190525082604051602001612d599190613f11565b604051602081830303815290604052828280612d7490613fd5565b935060ff1681518110612d8957612d89613ec6565b60200260200101819052506040518060400160405280600a8152602001690b4b58dbdb9d1c9858dd60b21b815250828280612dc390613fd5565b935060ff1681518110612dd857612dd8613ec6565b6020908102919091010152612ded8784613723565b8282612df881613fd5565b935060ff1681518110612e0d57612e0d613ec6565b602090810291909101015285515115612ea55760408051808201909152600b81526a2d2d7265666572656e636560a81b60208201528282612e4d81613fd5565b935060ff1681518110612e6257612e62613ec6565b60209081029190910101528551612e799084613723565b8282612e8481613fd5565b935060ff1681518110612e9957612e99613ec6565b60200260200101819052505b856080015115612f135760408051808201909152601881527f2d2d756e73616665536b697053746f72616765436865636b000000000000000060208201528282612eee81613fd5565b935060ff1681518110612f0357612f03613ec6565b6020026020010181905250612f6e565b8415612f6e576040805180820190915260128152712d2d726571756972655265666572656e636560701b60208201528282612f4d81613fd5565b935060ff1681518110612f6257612f62613ec6565b60200260200101819052505b60408601515115612ffa5760408051808201909152600d81526c2d2d756e73616665416c6c6f7760981b60208201528282612fa881613fd5565b935060ff1681518110612fbd57612fbd613ec6565b60200260200101819052508560400151828280612fd990613fd5565b935060ff1681518110612fee57612fee613ec6565b60200260200101819052505b8560600151156130645760408051808201909152601481527f2d2d756e73616665416c6c6f7752656e616d65730000000000000000000000006020820152828261304381613fd5565b935060ff168151811061305857613058613ec6565b60200260200101819052505b60008160ff166001600160401b0381111561308157613081613a1a565b6040519080825280602002602001820160405280156130b457816020015b606081526020019060019003908161309f5790505b50905060005b8260ff168160ff16101561310d57838160ff16815181106130dd576130dd613ec6565b6020026020010151828260ff16815181106130fa576130fa613ec6565b60209081029190910101526001016130ba565b50979650505050505050565b604080518082019091526000808252602082015281518351101561313e5750816102ac565b815183516020850151600092916131549161455c565b61315e919061448f565b6020840151909150600190821461317f575082516020840151819020908220145b801561319a5783518551869061319690839061448f565b9052505b50929392505050565b8051825160208085015190840151600093849390926131c39284906134e3565b6131cd919061455c565b90505b835160208501516131e1919061455c565b8111612b9a57816131f181614729565b925050826000015161322785602001518361320c919061448f565b8651613218919061448f565b855160208701518591906134e3565b613231919061455c565b90506131d0565b6060600061324684846131a3565b61325190600161455c565b6001600160401b0381111561326857613268613a1a565b60405190808252806020026020018201604052801561329b57816020015b60608152602001906001900390816132865790505b50905060005b8151811015611c95576132b7611e338686612b7b565b8282815181106132c9576132c9613ec6565b60209081029190910101526001016132a1565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310613325577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310613351576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc10000831061336f57662386f26fc10000830492506010015b6305f5e1008310613387576305f5e100830492506008015b612710831061339b57612710830492506004015b606483106133ad576064830492506002015b600a83106102ac5760010192915050565b60006133ca8383613763565b159392505050565b6000808584116134d95760208411613485576000841561341d5760016133f986602061448f565b613404906008614742565b61340f906002614840565b613419919061448f565b1990505b835181168561342c898961455c565b613436919061448f565b805190935082165b81811461347057878411613458578794505050505061195e565b836134628161484c565b94505082845116905061343e565b61347a878561455c565b94505050505061195e565b838320613492858861448f565b61349c908761455c565b91505b8582106134d7578482208082036134c4576134ba868461455c565b935050505061195e565b6134cf60018461448f565b92505061349f565b505b5092949350505050565b600083818685116135ee576020851161359d576000851561352f57600161350b87602061448f565b613516906008614742565b613521906002614840565b61352b919061448f565b1990505b845181166000876135408b8b61455c565b61354a919061448f565b855190915083165b82811461358f578186106135775761356a8b8b61455c565b965050505050505061195e565b8561358181614729565b965050838651169050613552565b85965050505050505061195e565b508383206000905b6135af868961448f565b82116135ec578583208082036135cb578394505050505061195e565b6135d660018561455c565b93505081806135e490614729565b9250506135a5565b505b6135f8878761455c565b979650505050505050565b604080518082019091526000808252602080830182905285518682015186519287015161363093906134e3565b60208087018051918601919091525190915061364c908261448f565b83528451602086015161365f919061455c565b810361366e57600085526136a0565b8351835161367c919061455c565b8551869061368b90839061448f565b905250835161369a908261455c565b60208601525b50909392505050565b602081106136e157815183526136c060208461455c565b92506136cd60208361455c565b91506136da60208261448f565b90506136a9565b60001981156137105760016136f783602061448f565b61370390610100614840565b61370d919061448f565b90505b9151835183169219169190911790915250565b606060006137318484610712565b805160208083015160405193945061374b93909101614863565b60405160208183030381529060405291505092915050565b8151815160009190811115613776575081515b6020808501519084015160005b8381101561382f57825182518082146137ff5760001960208710156137de576001846137b089602061448f565b6137ba919061455c565b6137c5906008614742565b6137d0906002614840565b6137da919061448f565b1990505b81811683821681810391146137fc5797506102ac9650505050505050565b50505b61380a60208661455c565b945061381760208561455c565b93505050602081613828919061455c565b9050613783565b5084518651610ce0919061489f565b610c9f8061611f83390190565b6040518060e0016040528060608152602001606081526020016060815260200160001515815260200160001515815260200160001515815260200161388e613893565b905290565b6040518061010001604052806000151581526020016000151581526020016060815260200160008019168152602001606081526020016060815260200160001515815260200161388e6040518060800160405280600081526020016000815260200160008152602001600081525090565b60005b8381101561391f578181015183820152602001613907565b50506000910152565b60008151808452613940816020860160208601613904565b601f01601f19169290920160200192915050565b6001600160a01b038316815260406020820181905260009061195e90830184613928565b7f4661696c656420746f206465706c6f7920636f6e7472616374200000000000008152600083516139b081601a850160208801613904565b6101d160f51b601a9184019182015283516139d281601c840160208801613904565b01601c01949350505050565b6020815260006103ba6020830184613928565b600060208284031215613a0357600080fd5b81516001600160a01b03811681146103ba57600080fd5b634e487b7160e01b600052604160045260246000fd5b604051606081016001600160401b0381118282101715613a5257613a52613a1a565b60405290565b6000806001600160401b03841115613a7257613a72613a1a565b50604051601f19601f85018116603f011681018181106001600160401b0382111715613aa057613aa0613a1a565b604052838152905080828401851015613ab857600080fd5b611c95846020830185613904565b600082601f830112613ad757600080fd5b6103ba83835160208501613a58565b600060208284031215613af857600080fd5b81516001600160401b03811115613b0e57600080fd5b6102a884828501613ac6565b60008351613b2c818460208801613904565b835190830190613b40818360208801613904565b01949350505050565b7f4661696c656420746f206465706c6f7920636f6e747261637420000000000000815260008351613b8181601a850160208801613904565b7f207573696e6720636f6e7374727563746f722064617461202200000000000000601a918401918201528351613bbe816033840160208801613904565b601160f91b60339290910191820152603401949350505050565b60408152600b60408201526a1193d55391149657d3d55560aa1b60608201526080602082015260006103ba6080830184613928565b600060208284031215613c1f57600080fd5b81516001600160401b03811115613c3557600080fd5b8201601f81018413613c4657600080fd5b6102a884825160208401613a58565b60008551613c67818460208a01613904565b602f60f81b9083019081528551613c85816001840160208a01613904565b602f60f81b600192909101918201528451613ca7816002840160208901613904565b600181830101915050602f60f81b60018201528351613ccd816002840160208801613904565b64173539b7b760d91b600292909101918201526007019695505050505050565b604081526000613d006040830184613928565b828103602084015260048152630b985cdd60e21b60208201526040810191505092915050565b600060208284031215613d3857600080fd5b815180151581146103ba57600080fd5b7f436f756c64206e6f742066696e642041535420696e2061727469666163742000815260008251613d8081601f850160208701613904565b7f2e205365742060617374203d20747275656020696e20666f756e6472792e746f601f939091019283015250611b5b60f21b603f820152604101919050565b604081526000613dd26040830184613928565b8281036020840152601181527005cc2e6e85cc2c4e6ded8eae8caa0c2e8d607b1b60208201526040810191505092915050565b604081526000613e186040830184613928565b8281036020840152600c81526b2e6173742e6c6963656e736560a01b60208201526040810191505092915050565b7f2e6d657461646174612e736f75726365732e5b27000000000000000000000000815260008251613e7e816014850160208701613904565b6b13ae9735b2b1b1b0b5991a9b60a11b6014939091019283015250602001919050565b604081526000613eb46040830185613928565b82810360208401526103b68185613928565b634e487b7160e01b600052603260045260246000fd5b601160f91b81528151600090613ef9816001850160208701613904565b601160f91b6001939091019283015250600201919050565b60008251613f23818460208701613904565b6a2f6275696c642d696e666f60a81b920191825250600b01919050565b7f436f756c64206e6f742066696e64206275696c642d696e666f2066696c65207781527f697468206d61746368696e6720736f7572636520636f6465206861736820666f60208201526a0391031b7b73a3930b1ba160ad1b604082015260008251613fb281604b850160208701613904565b91909101604b0192915050565b634e487b7160e01b600052601160045260246000fd5b600060ff821660ff8103613feb57613feb613fbf565b60010192915050565b7f406f70656e7a657070656c696e2f646566656e6465722d6465706c6f792d636c81526801a595b9d0b58db1a560be1b60208201526000825161403e816029850160208701613904565b9190910160290192915050565b60408152601660408201527f4f50454e5a455050454c494e5f424153485f504154480000000000000000000060608201526080602082015260006103ba6080830184613928565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b828110156140eb57603f198786030184526140d6858351613928565b945060209384019391909101906001016140ba565b50929695505050505050565b60006020828403121561410957600080fd5b81516001600160401b0381111561411f57600080fd5b82016060818503121561413157600080fd5b614139613a30565b81518060030b811461414a57600080fd5b815260208201516001600160401b0381111561416557600080fd5b61417186828501613ac6565b60208301525060408201516001600160401b0381111561419057600080fd5b61419c86828501613ac6565b604083015250949350505050565b7f4661696c656420746f2072756e206261736820636f6d6d616e642077697468208152601160f91b6020820152600082516141ec816021850160208701613904565b7f222e20496620796f7520617265207573696e672057696e646f77732c2073657460219390910192830152507f20746865204f50454e5a455050454c494e5f424153485f5041544820656e766960418201527f726f6e6d656e74207661726961626c6520746f207468652066756c6c7920717560618201527f616c69666965642070617468206f66207468652062617368206578656375746160818201527f626c652e20466f72206578616d706c652c20696620796f75206172652075736960a18201527f6e672047697420666f722057696e646f77732c206164642074686520666f6c6c60c18201527f6f77696e67206c696e6520696e20746865202e656e762066696c65206f66207960e18201527f6f75722070726f6a65637420287573696e6720666f727761726420736c6173686101018201527f6573293a0a4f50454e5a455050454c494e5f424153485f504154483d22433a2f6101218201527f50726f6772616d2046696c65732f4769742f62696e2f6261736822000000000061014182015261015c01919050565b7f4661696c656420746f2066696e64206c696e65207769746820707265666978208152602760f81b6020820152600083516143bc816021850160208801613904565b6c0139034b71037baba383aba1d1609d1b60219184019182015283516143e981602e840160208801613904565b01602e01949350505050565b7f4661696c656420746f2072756e2075706772616465207361666574792076616c815268034b230ba34b7b71d160bd1b60208201526000825161403e816029850160208701613904565b7f55706772616465207361666574792076616c69646174696f6e206661696c65648152611d0560f11b602082015260008251614482816022850160208701613904565b9190910160220192915050565b818103818111156102ac576102ac613fbf565b6d021b7b73a3930b1ba103730b6b2960951b8152600082516144cb81600e850160208701613904565b7f206d75737420626520696e2074686520666f726d6174204d79436f6e74726163600e9390910192830152507f742e736f6c3a4d79436f6e7472616374206f72204d79436f6e74726163742e73602e8201527f6f6c206f72206f75742f4d79436f6e74726163742e736f6c2f4d79436f6e7472604e8201526730b1ba173539b7b760c11b606e820152607601919050565b808201808211156102ac576102ac613fbf565b7f53504458206c6963656e7365206964656e7469666965722000000000000000008152600083516145a7816018850160208801613904565b6301034b7160e51b60189184019182015283516145cb81601c840160208801613904565b7f20646f6573206e6f74206c6f6f6b206c696b65206120737570706f7274656420601c92909101918201527f6c6963656e736520666f7220626c6f636b206578706c6f726572207665726966603c8201527f69636174696f6e2e205573652074686520606c6963656e73655479706560206f605c8201527f7074696f6e20746f20737065636966792061206c6963656e736520747970652c607c8201527f206f7220736574207468652060736b69704c6963656e73655479706560206f70609c8201527f74696f6e20746f2060747275656020746f20736b69702e00000000000000000060bc82015260d301949350505050565b600082516146d1818460208701613904565b600160fd1b920191825250600101919050565b7f406f70656e7a657070656c696e2f75706772616465732d636f7265400000000081526000825161471c81601c850160208701613904565b91909101601c0192915050565b60006001820161473b5761473b613fbf565b5060010190565b80820281158282048414176102ac576102ac613fbf565b6001815b60018411156147945780850481111561477857614778613fbf565b600184161561478657908102905b60019390931c92800261475d565b935093915050565b6000826147ab575060016102ac565b816147b8575060006102ac565b81600181146147ce57600281146147d8576147f4565b60019150506102ac565b60ff8411156147e9576147e9613fbf565b50506001821b6102ac565b5060208310610133831016604e8410600b8410161715614817575081810a6102ac565b6148246000198484614759565b806000190482111561483857614838613fbf565b029392505050565b60006103ba838361479c565b60008161485b5761485b613fbf565b506000190190565b60008351614875818460208801613904565b601d60f91b9083019081528351614893816001840160208801613904565b01600101949350505050565b8181036000831280158383131683831282161715612b9a57612b9a613fbf565b6080516118226148fd600039600081816101bf01528181610574015281816105d60152818161093501528181610ba30152610c0501526118226000f3fe608060405234801561001057600080fd5b506004361061018d5760003560e01c806381100bf0116100e3578063a217fddf1161008c578063d936547e11610066578063d936547e146103c9578063d9caed12146103ec578063e63ab1e9146103ff57600080fd5b8063a217fddf1461039b578063c8a02362146103a3578063d547741f146103b657600080fd5b806391d14854116100bd57806391d148541461032f5780639a590427146103755780639b19251a1461038857600080fd5b806381100bf0146102e05780638456cb591461030057806385f438c11461030857600080fd5b806336568abe11610145578063570618e11161011f578063570618e11461029b5780635c975abb146102c25780636133b4bb146102cd57600080fd5b806336568abe146102605780633c2f05a8146102735780633f4ba83a1461029357600080fd5b806321fc65f21161017657806321fc65f214610206578063248a9ca31461021b5780632f2ff15d1461024d57600080fd5b806301ffc9a714610192578063116191b6146101ba575b600080fd5b6101a56101a0366004611436565b610426565b60405190151581526020015b60405180910390f35b6101e17f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101b1565b6102196102143660046114ea565b6104bf565b005b61023f610229366004611559565b6000908152600160208190526040909120015490565b6040519081526020016101b1565b61021961025b366004611572565b6106c0565b61021961026e366004611572565b6106ec565b6004546101e19073ffffffffffffffffffffffffffffffffffffffff1681565b61021961074a565b61023f7f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a81565b60025460ff166101a5565b6102196102db36600461159e565b61077f565b6005546101e19073ffffffffffffffffffffffffffffffffffffffff1681565b6102196109b7565b61023f7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b6101a561033d366004611572565b600091825260016020908152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b6102196103833660046115f8565b6109e9565b6102196103963660046115f8565b610a6a565b61023f600081565b6102196103b13660046114ea565b610aee565b6102196103c4366004611572565b610cd5565b6101a56103d73660046115f8565b60036020526000908152604090205460ff1681565b6102196103fa366004611613565b610cfb565b61023f7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b0000000000000000000000000000000000000000000000000000000014806104b957507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b6104c7610e27565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e46104f181610e6a565b6104f9610e74565b73ffffffffffffffffffffffffffffffffffffffff861660009081526003602052604090205460ff16610558576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61059973ffffffffffffffffffffffffffffffffffffffff87167f000000000000000000000000000000000000000000000000000000000000000086610eb3565b6040517f5131ab5900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690635131ab59906106139089908990899089908990600401611699565b600060405180830381600087803b15801561062d57600080fd5b505af1158015610641573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167f85b5be9cf454e05e0bddf49315178102227c312078eefa3c00294fb4d912ae4e8686866040516106a6939291906116f6565b60405180910390a3506106b96001600055565b5050505050565b600082815260016020819052604090912001546106dc81610e6a565b6106e68383610f40565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8116331461073b576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6107458282610fed565b505050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61077481610e6a565b61077c61108e565b50565b60045473ffffffffffffffffffffffffffffffffffffffff166340c10f19306107a9866005611719565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815273ffffffffffffffffffffffffffffffffffffffff90921660048301526024820152604401600060405180830381600087803b15801561081457600080fd5b505af1158015610828573d6000803e3d6000fd5b5050600480546007546040517fa9059cbb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff918216938101939093526005602484015216925063a9059cbb91506044016020604051808303816000875af11580156108a9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108cd9190611753565b506004546108f49073ffffffffffffffffffffffffffffffffffffffff16858585856104bf565b600480546040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116938201939093529116906370a0823190602401602060405180830381865afa158015610986573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109aa9190611775565b156106e6576106e661178e565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a6109e181610e6a565b61077c6110ed565b7f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a610a1381610e6a565b73ffffffffffffffffffffffffffffffffffffffff8216600081815260036020526040808220805460ff19169055517f51085ddf9ebdded84b76e829eb58c4078e4b5bdf97d9a94723f336039da467919190a25050565b7f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a610a9481610e6a565b73ffffffffffffffffffffffffffffffffffffffff8216600081815260036020526040808220805460ff19166001179055517faab7954e9d246b167ef88aeddad35209ca2489d95a8aeb59e288d9b19fae5a549190a25050565b610af6610e27565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e4610b2081610e6a565b610b28610e74565b73ffffffffffffffffffffffffffffffffffffffff861660009081526003602052604090205460ff16610b87576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610bc873ffffffffffffffffffffffffffffffffffffffff87167f000000000000000000000000000000000000000000000000000000000000000086610eb3565b6040517fb8969bd400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063b8969bd490610c429089908990899089908990600401611699565b600060405180830381600087803b158015610c5c57600080fd5b505af1158015610c70573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fb9d4efa96044e5f5e03e696fa9ae2ff66911cc27e8a637c3627c75bc5b2241c88686866040516106a6939291906116f6565b60008281526001602081905260409091200154610cf181610e6a565b6106e68383610fed565b610d03610e27565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e4610d2d81610e6a565b610d35610e74565b73ffffffffffffffffffffffffffffffffffffffff841660009081526003602052604090205460ff16610d94576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610db573ffffffffffffffffffffffffffffffffffffffff85168484610eb3565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f9b1bfa7fa9ee420a16e124f794c35ac9f90472acc99140eb2f6447c714cad8eb84604051610e1491815260200190565b60405180910390a3506107456001600055565b600260005403610e63576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b61077c813361112a565b60025460ff1615610eb1576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6040805173ffffffffffffffffffffffffffffffffffffffff8416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb000000000000000000000000000000000000000000000000000000001790526107459084906111bb565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff16610fe557600083815260016020818152604080842073ffffffffffffffffffffffffffffffffffffffff87168086529252808420805460ff19169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45060016104b9565b5060006104b9565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff1615610fe557600083815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff86168085529252808320805460ff1916905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45060016104b9565b611096611251565b6002805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b6110f5610e74565b6002805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586110c33390565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff166111b7576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82166004820152602481018390526044015b60405180910390fd5b5050565b60006111dd73ffffffffffffffffffffffffffffffffffffffff84168361128d565b905080516000141580156112025750808060200190518101906112009190611753565b155b15610745576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff841660048201526024016111ae565b60025460ff16610eb1576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606061129b838360006112a2565b9392505050565b6060814710156112e0576040517fcd7860590000000000000000000000000000000000000000000000000000000081523060048201526024016111ae565b6000808573ffffffffffffffffffffffffffffffffffffffff16848660405161130991906117bd565b60006040518083038185875af1925050503d8060008114611346576040519150601f19603f3d011682016040523d82523d6000602084013e61134b565b606091505b509150915061135b868383611365565b9695505050505050565b60608261137a57611375826113f4565b61129b565b815115801561139e575073ffffffffffffffffffffffffffffffffffffffff84163b155b156113ed576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff851660048201526024016111ae565b508061129b565b8051156114045780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006020828403121561144857600080fd5b81357fffffffff000000000000000000000000000000000000000000000000000000008116811461129b57600080fd5b803573ffffffffffffffffffffffffffffffffffffffff8116811461149c57600080fd5b919050565b60008083601f8401126114b357600080fd5b50813567ffffffffffffffff8111156114cb57600080fd5b6020830191508360208285010111156114e357600080fd5b9250929050565b60008060008060006080868803121561150257600080fd5b61150b86611478565b945061151960208701611478565b935060408601359250606086013567ffffffffffffffff81111561153c57600080fd5b611548888289016114a1565b969995985093965092949392505050565b60006020828403121561156b57600080fd5b5035919050565b6000806040838503121561158557600080fd5b8235915061159560208401611478565b90509250929050565b600080600080606085870312156115b457600080fd5b6115bd85611478565b935060208501359250604085013567ffffffffffffffff8111156115e057600080fd5b6115ec878288016114a1565b95989497509550505050565b60006020828403121561160a57600080fd5b61129b82611478565b60008060006060848603121561162857600080fd5b61163184611478565b925061163f60208501611478565b929592945050506040919091013590565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff8616815273ffffffffffffffffffffffffffffffffffffffff851660208201528360408201526080606082015260006116eb608083018486611650565b979650505050505050565b838152604060208201526000611710604083018486611650565b95945050505050565b808201808211156104b9577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006020828403121561176557600080fd5b8151801515811461129b57600080fd5b60006020828403121561178757600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b6000825160005b818110156117de57602081860181015185830152016117c4565b50600092019182525091905056fea26469706673582212205ee3088cb72cdf6af276cb9438f26efb7aef2a16db8cbb4ac62af55114684a9c64736f6c634300081a0033608060405234801561001057600080fd5b50604051610c9f380380610c9f83398101604081905261002f9161010d565b8181600361003d83826101ff565b50600461004a82826101ff565b50505050506102bd565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261007b57600080fd5b81516001600160401b0381111561009457610094610054565b604051601f8201601f19908116603f011681016001600160401b03811182821017156100c2576100c2610054565b6040528181528382016020018510156100da57600080fd5b60005b828110156100f9576020818601810151838301820152016100dd565b506000918101602001919091529392505050565b6000806040838503121561012057600080fd5b82516001600160401b0381111561013657600080fd5b6101428582860161006a565b602085015190935090506001600160401b0381111561016057600080fd5b61016c8582860161006a565b9150509250929050565b600181811c9082168061018a57607f821691505b6020821081036101aa57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156101fa57806000526020600020601f840160051c810160208510156101d75750805b601f840160051c820191505b818110156101f757600081556001016101e3565b50505b505050565b81516001600160401b0381111561021857610218610054565b61022c816102268454610176565b846101b0565b6020601f82116001811461026057600083156102485750848201515b600019600385901b1c1916600184901b1784556101f7565b600084815260208120601f198516915b828110156102905787850151825560209485019460019092019101610270565b50848210156102ae5786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b6109d3806102cc6000396000f3fe608060405234801561001057600080fd5b50600436106100be5760003560e01c806340c10f191161007657806395d89b411161005b57806395d89b4114610183578063a9059cbb1461018b578063dd62ed3e1461019e57600080fd5b806340c10f191461013857806370a082311461014d57600080fd5b806318160ddd116100a757806318160ddd1461010457806323b872dd14610116578063313ce5671461012957600080fd5b806306fdde03146100c3578063095ea7b3146100e1575b600080fd5b6100cb6101e4565b6040516100d891906107bf565b60405180910390f35b6100f46100ef366004610854565b610276565b60405190151581526020016100d8565b6002545b6040519081526020016100d8565b6100f461012436600461087e565b610290565b604051601281526020016100d8565b61014b610146366004610854565b6102b4565b005b61010861015b3660046108bb565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6100cb6102c2565b6100f4610199366004610854565b6102d1565b6101086101ac3660046108dd565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6060600380546101f390610910565b80601f016020809104026020016040519081016040528092919081815260200182805461021f90610910565b801561026c5780601f106102415761010080835404028352916020019161026c565b820191906000526020600020905b81548152906001019060200180831161024f57829003601f168201915b5050505050905090565b6000336102848185856102df565b60019150505b92915050565b60003361029e8582856102f1565b6102a98585856103c5565b506001949350505050565b6102be8282610470565b5050565b6060600480546101f390610910565b6000336102848185856103c5565b6102ec83838360016104cc565b505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146103bf57818110156103b0576040517ffb8f41b200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416600482015260248101829052604481018390526064015b60405180910390fd5b6103bf848484840360006104cc565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8316610415576040517f96c6fd1e000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff8216610465576040517fec442f05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b6102ec838383610614565b73ffffffffffffffffffffffffffffffffffffffff82166104c0576040517fec442f05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b6102be60008383610614565b73ffffffffffffffffffffffffffffffffffffffff841661051c576040517fe602df05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff831661056c576040517f94280d62000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260016020908152604080832093871683529290522082905580156103bf578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161060691815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff831661064c5780600260008282546106419190610963565b909155506106fe9050565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260208190526040902054818110156106d2576040517fe450d38c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8516600482015260248101829052604481018390526064016103a7565b73ffffffffffffffffffffffffffffffffffffffff841660009081526020819052604090209082900390555b73ffffffffffffffffffffffffffffffffffffffff821661072757600280548290039055610753565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090208054820190555b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516107b291815260200190565b60405180910390a3505050565b602081526000825180602084015260005b818110156107ed57602081860181015160408684010152016107d0565b5060006040828501015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011684010191505092915050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461084f57600080fd5b919050565b6000806040838503121561086757600080fd5b6108708361082b565b946020939093013593505050565b60008060006060848603121561089357600080fd5b61089c8461082b565b92506108aa6020850161082b565b929592945050506040919091013590565b6000602082840312156108cd57600080fd5b6108d68261082b565b9392505050565b600080604083850312156108f057600080fd5b6108f98361082b565b91506109076020840161082b565b90509250929050565b600181811c9082168061092457607f821691505b60208210810361095d577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b8082018082111561028a577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea26469706673582212207e804ca539d49155d2b6bc19268ce22f9f857027c75247d69fb0d56a089c93d464736f6c634300081a00330000000000000000000000007109709ecfa91a80626ff3989d68f67f5b1dd12d8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f7420"; type ERC20CustodyEchidnaTestConstructorParams = | [signer?: Signer] diff --git a/v2/typechain-types/factories/ERC20Custody__factory.ts b/v2/typechain-types/factories/ERC20Custody__factory.ts index bffd156f..4c13785d 100644 --- a/v2/typechain-types/factories/ERC20Custody__factory.ts +++ b/v2/typechain-types/factories/ERC20Custody__factory.ts @@ -671,7 +671,7 @@ const _abi = [ ] as const; const _bytecode = - "0x60a060405234801561001057600080fd5b506040516116fe3803806116fe83398101604081905261002f916101e5565b60016000556002805460ff191690556001600160a01b038316158061005b57506001600160a01b038216155b8061006d57506001600160a01b038116155b1561008b5760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b0383166080526100a3600082610134565b506100ce7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a82610134565b506100f97f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e483610134565b506101126000805160206116de83398151915282610134565b5061012b6000805160206116de83398151915283610134565b50505050610228565b60008281526001602090815260408083206001600160a01b038516845290915281205460ff166101bf5760008381526001602081815260408084206001600160a01b0387168086529252808420805460ff19169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45060016101c3565b5060005b92915050565b80516001600160a01b03811681146101e057600080fd5b919050565b6000806000606084860312156101fa57600080fd5b610203846101c9565b9250610211602085016101c9565b915061021f604085016101c9565b90509250925092565b60805161147f61025f6000396000818161019e0152818161050001528181610562015281816108f70152610959015261147f6000f3fe608060405234801561001057600080fd5b506004361061016c5760003560e01c806385f438c1116100cd578063c8a0236211610081578063d936547e11610066578063d936547e14610355578063d9caed1214610378578063e63ab1e91461038b57600080fd5b8063c8a023621461032f578063d547741f1461034257600080fd5b80639a590427116100b25780639a590427146103015780639b19251a14610314578063a217fddf1461032757600080fd5b806385f438c11461029457806391d14854146102bb57600080fd5b806336568abe11610124578063570618e111610109578063570618e11461025a5780635c975abb146102815780638456cb591461028c57600080fd5b806336568abe1461023f5780633f4ba83a1461025257600080fd5b806321fc65f21161015557806321fc65f2146101e5578063248a9ca3146101fa5780632f2ff15d1461022c57600080fd5b806301ffc9a714610171578063116191b614610199575b600080fd5b61018461017f36600461118a565b6103b2565b60405190151581526020015b60405180910390f35b6101c07f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610190565b6101f86101f33660046111f5565b61044b565b005b61021e610208366004611292565b6000908152600160208190526040909120015490565b604051908152602001610190565b6101f861023a3660046112ab565b61064c565b6101f861024d3660046112ab565b610678565b6101f86106d6565b61021e7f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a81565b60025460ff16610184565b6101f861070b565b61021e7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b6101846102c93660046112ab565b600091825260016020908152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b6101f861030f3660046112d7565b61073d565b6101f86103223660046112d7565b6107be565b61021e600081565b6101f861033d3660046111f5565b610842565b6101f86103503660046112ab565b610a29565b6101846103633660046112d7565b60036020526000908152604090205460ff1681565b6101f86103863660046112f2565b610a4f565b61021e7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061044557507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b610453610b7b565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461047d81610bbe565b610485610bc8565b73ffffffffffffffffffffffffffffffffffffffff861660009081526003602052604090205460ff166104e4576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61052573ffffffffffffffffffffffffffffffffffffffff87167f000000000000000000000000000000000000000000000000000000000000000086610c07565b6040517f5131ab5900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690635131ab599061059f9089908990899089908990600401611378565b600060405180830381600087803b1580156105b957600080fd5b505af11580156105cd573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167f85b5be9cf454e05e0bddf49315178102227c312078eefa3c00294fb4d912ae4e868686604051610632939291906113d5565b60405180910390a3506106456001600055565b5050505050565b6000828152600160208190526040909120015461066881610bbe565b6106728383610c94565b50505050565b73ffffffffffffffffffffffffffffffffffffffff811633146106c7576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6106d18282610d41565b505050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61070081610bbe565b610708610de2565b50565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61073581610bbe565b610708610e41565b7f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a61076781610bbe565b73ffffffffffffffffffffffffffffffffffffffff8216600081815260036020526040808220805460ff19169055517f51085ddf9ebdded84b76e829eb58c4078e4b5bdf97d9a94723f336039da467919190a25050565b7f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a6107e881610bbe565b73ffffffffffffffffffffffffffffffffffffffff8216600081815260036020526040808220805460ff19166001179055517faab7954e9d246b167ef88aeddad35209ca2489d95a8aeb59e288d9b19fae5a549190a25050565b61084a610b7b565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461087481610bbe565b61087c610bc8565b73ffffffffffffffffffffffffffffffffffffffff861660009081526003602052604090205460ff166108db576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61091c73ffffffffffffffffffffffffffffffffffffffff87167f000000000000000000000000000000000000000000000000000000000000000086610c07565b6040517fb8969bd400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063b8969bd4906109969089908990899089908990600401611378565b600060405180830381600087803b1580156109b057600080fd5b505af11580156109c4573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fb9d4efa96044e5f5e03e696fa9ae2ff66911cc27e8a637c3627c75bc5b2241c8868686604051610632939291906113d5565b60008281526001602081905260409091200154610a4581610bbe565b6106728383610d41565b610a57610b7b565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e4610a8181610bbe565b610a89610bc8565b73ffffffffffffffffffffffffffffffffffffffff841660009081526003602052604090205460ff16610ae8576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610b0973ffffffffffffffffffffffffffffffffffffffff85168484610c07565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f9b1bfa7fa9ee420a16e124f794c35ac9f90472acc99140eb2f6447c714cad8eb84604051610b6891815260200190565b60405180910390a3506106d16001600055565b600260005403610bb7576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b6107088133610e7e565b60025460ff1615610c05576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6040805173ffffffffffffffffffffffffffffffffffffffff8416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb000000000000000000000000000000000000000000000000000000001790526106d1908490610f0f565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff16610d3957600083815260016020818152604080842073ffffffffffffffffffffffffffffffffffffffff87168086529252808420805460ff19169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a4506001610445565b506000610445565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff1615610d3957600083815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff86168085529252808320805460ff1916905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a4506001610445565b610dea610fa5565b6002805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b610e49610bc8565b6002805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258610e173390565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16610f0b576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82166004820152602481018390526044015b60405180910390fd5b5050565b6000610f3173ffffffffffffffffffffffffffffffffffffffff841683610fe1565b90508051600014158015610f56575080806020019051810190610f5491906113f8565b155b156106d1576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84166004820152602401610f02565b60025460ff16610c05576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6060610fef83836000610ff6565b9392505050565b606081471015611034576040517fcd786059000000000000000000000000000000000000000000000000000000008152306004820152602401610f02565b6000808573ffffffffffffffffffffffffffffffffffffffff16848660405161105d919061141a565b60006040518083038185875af1925050503d806000811461109a576040519150601f19603f3d011682016040523d82523d6000602084013e61109f565b606091505b50915091506110af8683836110b9565b9695505050505050565b6060826110ce576110c982611148565b610fef565b81511580156110f2575073ffffffffffffffffffffffffffffffffffffffff84163b155b15611141576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85166004820152602401610f02565b5080610fef565b8051156111585780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006020828403121561119c57600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610fef57600080fd5b803573ffffffffffffffffffffffffffffffffffffffff811681146111f057600080fd5b919050565b60008060008060006080868803121561120d57600080fd5b611216866111cc565b9450611224602087016111cc565b935060408601359250606086013567ffffffffffffffff81111561124757600080fd5b8601601f8101881361125857600080fd5b803567ffffffffffffffff81111561126f57600080fd5b88602082840101111561128157600080fd5b959894975092955050506020019190565b6000602082840312156112a457600080fd5b5035919050565b600080604083850312156112be57600080fd5b823591506112ce602084016111cc565b90509250929050565b6000602082840312156112e957600080fd5b610fef826111cc565b60008060006060848603121561130757600080fd5b611310846111cc565b925061131e602085016111cc565b929592945050506040919091013590565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff8616815273ffffffffffffffffffffffffffffffffffffffff851660208201528360408201526080606082015260006113ca60808301848661132f565b979650505050505050565b8381526040602082015260006113ef60408301848661132f565b95945050505050565b60006020828403121561140a57600080fd5b81518015158114610fef57600080fd5b6000825160005b8181101561143b5760208186018101518583015201611421565b50600092019182525091905056fea2646970667358221220dc54ce548a1f0bf8ba5e86cc53c6d822e55eee543451395733c659359bac8dd164736f6c634300081a00338619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a"; + "0x60a060405234801561001057600080fd5b506040516116fe3803806116fe83398101604081905261002f916101e5565b60016000556002805460ff191690556001600160a01b038316158061005b57506001600160a01b038216155b8061006d57506001600160a01b038116155b1561008b5760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b0383166080526100a3600082610134565b506100ce7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a82610134565b506100f97f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e483610134565b506101126000805160206116de83398151915282610134565b5061012b6000805160206116de83398151915283610134565b50505050610228565b60008281526001602090815260408083206001600160a01b038516845290915281205460ff166101bf5760008381526001602081815260408084206001600160a01b0387168086529252808420805460ff19169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45060016101c3565b5060005b92915050565b80516001600160a01b03811681146101e057600080fd5b919050565b6000806000606084860312156101fa57600080fd5b610203846101c9565b9250610211602085016101c9565b915061021f604085016101c9565b90509250925092565b60805161147f61025f6000396000818161019e0152818161050001528181610562015281816108f70152610959015261147f6000f3fe608060405234801561001057600080fd5b506004361061016c5760003560e01c806385f438c1116100cd578063c8a0236211610081578063d936547e11610066578063d936547e14610355578063d9caed1214610378578063e63ab1e91461038b57600080fd5b8063c8a023621461032f578063d547741f1461034257600080fd5b80639a590427116100b25780639a590427146103015780639b19251a14610314578063a217fddf1461032757600080fd5b806385f438c11461029457806391d14854146102bb57600080fd5b806336568abe11610124578063570618e111610109578063570618e11461025a5780635c975abb146102815780638456cb591461028c57600080fd5b806336568abe1461023f5780633f4ba83a1461025257600080fd5b806321fc65f21161015557806321fc65f2146101e5578063248a9ca3146101fa5780632f2ff15d1461022c57600080fd5b806301ffc9a714610171578063116191b614610199575b600080fd5b61018461017f36600461118a565b6103b2565b60405190151581526020015b60405180910390f35b6101c07f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610190565b6101f86101f33660046111f5565b61044b565b005b61021e610208366004611292565b6000908152600160208190526040909120015490565b604051908152602001610190565b6101f861023a3660046112ab565b61064c565b6101f861024d3660046112ab565b610678565b6101f86106d6565b61021e7f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a81565b60025460ff16610184565b6101f861070b565b61021e7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b6101846102c93660046112ab565b600091825260016020908152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b6101f861030f3660046112d7565b61073d565b6101f86103223660046112d7565b6107be565b61021e600081565b6101f861033d3660046111f5565b610842565b6101f86103503660046112ab565b610a29565b6101846103633660046112d7565b60036020526000908152604090205460ff1681565b6101f86103863660046112f2565b610a4f565b61021e7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061044557507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b610453610b7b565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461047d81610bbe565b610485610bc8565b73ffffffffffffffffffffffffffffffffffffffff861660009081526003602052604090205460ff166104e4576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61052573ffffffffffffffffffffffffffffffffffffffff87167f000000000000000000000000000000000000000000000000000000000000000086610c07565b6040517f5131ab5900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690635131ab599061059f9089908990899089908990600401611378565b600060405180830381600087803b1580156105b957600080fd5b505af11580156105cd573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167f85b5be9cf454e05e0bddf49315178102227c312078eefa3c00294fb4d912ae4e868686604051610632939291906113d5565b60405180910390a3506106456001600055565b5050505050565b6000828152600160208190526040909120015461066881610bbe565b6106728383610c94565b50505050565b73ffffffffffffffffffffffffffffffffffffffff811633146106c7576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6106d18282610d41565b505050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61070081610bbe565b610708610de2565b50565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61073581610bbe565b610708610e41565b7f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a61076781610bbe565b73ffffffffffffffffffffffffffffffffffffffff8216600081815260036020526040808220805460ff19169055517f51085ddf9ebdded84b76e829eb58c4078e4b5bdf97d9a94723f336039da467919190a25050565b7f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a6107e881610bbe565b73ffffffffffffffffffffffffffffffffffffffff8216600081815260036020526040808220805460ff19166001179055517faab7954e9d246b167ef88aeddad35209ca2489d95a8aeb59e288d9b19fae5a549190a25050565b61084a610b7b565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461087481610bbe565b61087c610bc8565b73ffffffffffffffffffffffffffffffffffffffff861660009081526003602052604090205460ff166108db576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61091c73ffffffffffffffffffffffffffffffffffffffff87167f000000000000000000000000000000000000000000000000000000000000000086610c07565b6040517fb8969bd400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063b8969bd4906109969089908990899089908990600401611378565b600060405180830381600087803b1580156109b057600080fd5b505af11580156109c4573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fb9d4efa96044e5f5e03e696fa9ae2ff66911cc27e8a637c3627c75bc5b2241c8868686604051610632939291906113d5565b60008281526001602081905260409091200154610a4581610bbe565b6106728383610d41565b610a57610b7b565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e4610a8181610bbe565b610a89610bc8565b73ffffffffffffffffffffffffffffffffffffffff841660009081526003602052604090205460ff16610ae8576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610b0973ffffffffffffffffffffffffffffffffffffffff85168484610c07565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f9b1bfa7fa9ee420a16e124f794c35ac9f90472acc99140eb2f6447c714cad8eb84604051610b6891815260200190565b60405180910390a3506106d16001600055565b600260005403610bb7576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b6107088133610e7e565b60025460ff1615610c05576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6040805173ffffffffffffffffffffffffffffffffffffffff8416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb000000000000000000000000000000000000000000000000000000001790526106d1908490610f0f565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff16610d3957600083815260016020818152604080842073ffffffffffffffffffffffffffffffffffffffff87168086529252808420805460ff19169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a4506001610445565b506000610445565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff1615610d3957600083815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff86168085529252808320805460ff1916905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a4506001610445565b610dea610fa5565b6002805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b610e49610bc8565b6002805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258610e173390565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16610f0b576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82166004820152602481018390526044015b60405180910390fd5b5050565b6000610f3173ffffffffffffffffffffffffffffffffffffffff841683610fe1565b90508051600014158015610f56575080806020019051810190610f5491906113f8565b155b156106d1576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84166004820152602401610f02565b60025460ff16610c05576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6060610fef83836000610ff6565b9392505050565b606081471015611034576040517fcd786059000000000000000000000000000000000000000000000000000000008152306004820152602401610f02565b6000808573ffffffffffffffffffffffffffffffffffffffff16848660405161105d919061141a565b60006040518083038185875af1925050503d806000811461109a576040519150601f19603f3d011682016040523d82523d6000602084013e61109f565b606091505b50915091506110af8683836110b9565b9695505050505050565b6060826110ce576110c982611148565b610fef565b81511580156110f2575073ffffffffffffffffffffffffffffffffffffffff84163b155b15611141576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85166004820152602401610f02565b5080610fef565b8051156111585780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006020828403121561119c57600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610fef57600080fd5b803573ffffffffffffffffffffffffffffffffffffffff811681146111f057600080fd5b919050565b60008060008060006080868803121561120d57600080fd5b611216866111cc565b9450611224602087016111cc565b935060408601359250606086013567ffffffffffffffff81111561124757600080fd5b8601601f8101881361125857600080fd5b803567ffffffffffffffff81111561126f57600080fd5b88602082840101111561128157600080fd5b959894975092955050506020019190565b6000602082840312156112a457600080fd5b5035919050565b600080604083850312156112be57600080fd5b823591506112ce602084016111cc565b90509250929050565b6000602082840312156112e957600080fd5b610fef826111cc565b60008060006060848603121561130757600080fd5b611310846111cc565b925061131e602085016111cc565b929592945050506040919091013590565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff8616815273ffffffffffffffffffffffffffffffffffffffff851660208201528360408201526080606082015260006113ca60808301848661132f565b979650505050505050565b8381526040602082015260006113ef60408301848661132f565b95945050505050565b60006020828403121561140a57600080fd5b81518015158114610fef57600080fd5b6000825160005b8181101561143b5760208186018101518583015201611421565b50600092019182525091905056fea26469706673582212202f3991d39315b7c0e5ef6fd88336a0f791f8e1cce0a70cb66f2c4c9404215ae364736f6c634300081a00338619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a"; type ERC20CustodyConstructorParams = | [signer?: Signer] diff --git a/v2/typechain-types/factories/GatewayEVMEchidnaTest__factory.ts b/v2/typechain-types/factories/GatewayEVMEchidnaTest__factory.ts index 635dde3d..7ff65d34 100644 --- a/v2/typechain-types/factories/GatewayEVMEchidnaTest__factory.ts +++ b/v2/typechain-types/factories/GatewayEVMEchidnaTest__factory.ts @@ -1072,7 +1072,7 @@ const _abi = [ ] as const; const _bytecode = - "0x60a060405230608052600580546001600160a01b0319163317905534801561002657600080fd5b5061002f610154565b600554600180546001600160a01b039092166001600160a01b031992831617905560028054610123921691909117905560405161006b90610206565b60408082526004908201819052631d195cdd60e21b606083015260806020830181905282015263151154d560e21b60a082015260c001604051809103906000f0801580156100bd573d6000803e3d6000fd5b50600480546001600160a01b0319166001600160a01b039283161790556001546040513092919091169082906100f290610213565b6001600160a01b03938416815291831660208301529091166040820152606001604051809103906000f08015801561012e573d6000803e3d6000fd5b50600080546001600160a01b0319166001600160a01b0392909216919091179055610220565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156101a45760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146102035780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b610c9f8061372c83390190565b6116fe806143cb83390190565b6080516134e3610249600039600081816120e20152818161210b015261259701526134e36000f3fe6080604052600436106102345760003560e01c80635c975abb11610138578063ad3cb1cc116100b0578063d547741f1161007f578063e63ab1e911610064578063e63ab1e9146106ff578063f340fa0114610733578063f45346dc1461074657600080fd5b8063d547741f146106bf578063dda79b75146106df57600080fd5b8063ad3cb1cc14610616578063ae7a3a6f1461065f578063b8969bd41461067f578063c0c53b8b1461069f57600080fd5b80638456cb591161010757806391d14854116100ec57806391d1485414610568578063a217fddf146105cd578063a783c789146105e257600080fd5b80638456cb59146105335780638c6f037f1461054857600080fd5b80635c975abb146104885780635d62c860146104bf5780636ab90f9b146104f357806381100bf01461051357600080fd5b806335c018db116101cb5780634f1ef2861161019a57806352d1902d1161017f57806352d1902d1461043357806357bec62f146104485780635b1125911461046857600080fd5b80634f1ef286146104005780635131ab591461041357600080fd5b806335c018db1461039857806336568abe146103ab5780633c2f05a8146103cb5780633f4ba83a146103eb57600080fd5b806321e093b11161020757806321e093b1146102d0578063248a9ca31461030857806329c59b5d146103655780632f2ff15d1461037857600080fd5b806301ffc9a71461023957806310188aef1461026e5780631b8b921d146102905780631cff79cd146102b0575b600080fd5b34801561024557600080fd5b50610259610254366004612ecd565b610766565b60405190151581526020015b60405180910390f35b34801561027a57600080fd5b5061028e610289366004612f2b565b6107ff565b005b34801561029c57600080fd5b5061028e6102ab366004612f8f565b6108f3565b6102c36102be366004612f8f565b61097e565b6040516102659190613050565b3480156102dc57600080fd5b506003546102f0906001600160a01b031681565b6040516001600160a01b039091168152602001610265565b34801561031457600080fd5b50610357610323366004613063565b60009081527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052604090206001015490565b604051908152602001610265565b61028e610373366004612f8f565b610a81565b34801561038457600080fd5b5061028e61039336600461307c565b610c14565b61028e6103a6366004612f8f565b610c5e565b3480156103b757600080fd5b5061028e6103c636600461307c565b610e4d565b3480156103d757600080fd5b506004546102f0906001600160a01b031681565b3480156103f757600080fd5b5061028e610e99565b61028e61040e3660046130d7565b610ece565b34801561041f57600080fd5b5061028e61042e3660046131de565b610eed565b34801561043f57600080fd5b50610357611206565b34801561045457600080fd5b506002546102f0906001600160a01b031681565b34801561047457600080fd5b506001546102f0906001600160a01b031681565b34801561049457600080fd5b507fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff16610259565b3480156104cb57600080fd5b506103577f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b981565b3480156104ff57600080fd5b5061028e61050e36600461324d565b611235565b34801561051f57600080fd5b506005546102f0906001600160a01b031681565b34801561053f57600080fd5b5061028e611360565b34801561055457600080fd5b5061028e6105633660046132a7565b611392565b34801561057457600080fd5b5061025961058336600461307c565b60009182527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408084206001600160a01b0393909316845291905290205460ff1690565b3480156105d957600080fd5b50610357600081565b3480156105ee57600080fd5b506103577f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb81565b34801561062257600080fd5b506102c36040518060400160405280600581526020017f352e302e3000000000000000000000000000000000000000000000000000000081525081565b34801561066b57600080fd5b5061028e61067a366004612f2b565b6114a8565b34801561068b57600080fd5b5061028e61069a3660046131de565b61159c565b3480156106ab57600080fd5b5061028e6106ba3660046132f9565b611755565b3480156106cb57600080fd5b5061028e6106da36600461307c565b611a0a565b3480156106eb57600080fd5b506000546102f0906001600160a01b031681565b34801561070b57600080fd5b506103577f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b61028e610741366004612f2b565b611a4e565b34801561075257600080fd5b5061028e61076136600461333c565b611be3565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b0000000000000000000000000000000000000000000000000000000014806107f957507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b600061080a81611cde565b6001600160a01b03821661084a576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002546001600160a01b03161561088d576040517f0c8dc01600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6108b77f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b983611ce8565b5050600280547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6108fb611dd5565b610903611e33565b826001600160a01b0316336001600160a01b03167f2a21062ee9199c2e205622999eeb7c3da73153674f36a0acd3f74fa6af67bde384846040516109489291906133b8565b60405180910390a361097960017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b505050565b60607f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb6109aa81611cde565b6109b2611dd5565b6109ba611e33565b6001600160a01b0385166109fa576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610a07868686611eda565b9050856001600160a01b03167fcaf938de11c367272220bfd1d2baa99ca46665e7bc4d85f00adb51b90fe1fa9f348787604051610a46939291906133d4565b60405180910390a29150610a7960017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b509392505050565b610a89611dd5565b610a91611e33565b34600003610acb576040517f7671265e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038316610b0b576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546040516000916001600160a01b03169034908381818185875af1925050503d8060008114610b58576040519150601f19603f3d011682016040523d82523d6000602084013e610b5d565b606091505b5050905080610b98576040517f79cacff100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b836001600160a01b0316336001600160a01b03167f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a43460008787604051610be294939291906133ee565b60405180910390a35061097960017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020526040902060010154610c4e81611cde565b610c588383611ce8565b50505050565b7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb610c8881611cde565b610c90611dd5565b610c98611e33565b6001600160a01b038416610cd8576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000846001600160a01b03163460405160006040518083038185875af1925050503d8060008114610d25576040519150601f19603f3d011682016040523d82523d6000602084013e610d2a565b606091505b5050905080610d65576040517facfdb44400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f8fcaa0b50000000000000000000000000000000000000000000000000000000081526001600160a01b03861690638fcaa0b590610dac90879087906004016133b8565b600060405180830381600087803b158015610dc657600080fd5b505af1158015610dda573d6000803e3d6000fd5b50505050846001600160a01b03167fd5d7616b1678354a0dea9d7e57e6a090bff5babe9f8d6381fdbad16e89ba311c348686604051610e1b939291906133d4565b60405180910390a250610c5860017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b6001600160a01b0381163314610e8f576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6109798282611f83565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610ec381611cde565b610ecb612047565b50565b610ed66120d7565b610edf826121a7565b610ee982826121b2565b5050565b7f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b9610f1781611cde565b610f1f611dd5565b610f27611e33565b83600003610f61576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038516610fa1576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610fab86866122d6565b610fe1576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b0386811660048301526024820186905287169063095ea7b3906044016020604051808303816000875af1158015611049573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061106d9190613417565b6110a3576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6110ae858484611eda565b506110b986866122d6565b6110ef576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201526000906001600160a01b038816906370a0823190602401602060405180830381865afa15801561114f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111739190613439565b90508015611185576111858782612366565b856001600160a01b0316876001600160a01b03167f29c40793bffd84cb810179f15d1ceec72bc7f0785514c668ba36645cf99b73828787876040516111cc939291906133d4565b60405180910390a3506111fe60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b505050505050565b600061121061258c565b507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc90565b600480546040517f40c10f190000000000000000000000000000000000000000000000000000000081523092810192909252602482018590526001600160a01b0316906340c10f1990604401600060405180830381600087803b15801561129b57600080fd5b505af11580156112af573d6000803e3d6000fd5b50506004546112cd92506001600160a01b0316905085858585610eed565b600480546040517f70a0823100000000000000000000000000000000000000000000000000000000815230928101929092526001600160a01b0316906370a0823190602401602060405180830381865afa15801561132f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113539190613439565b15610c5857610c58613452565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61138a81611cde565b610ecb6125ee565b61139a611dd5565b6113a2611e33565b836000036113dc576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03851661141c576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611427338486612667565b846001600160a01b0316336001600160a01b03167f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a48686868660405161147094939291906133ee565b60405180910390a36114a160017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b5050505050565b60006114b381611cde565b6001600160a01b0382166114f3576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000546001600160a01b031615611536576040517fb337f37800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6115607f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b983611ce8565b5050600080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b7f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b96115c681611cde565b6115ce611dd5565b6115d6611e33565b83600003611610576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038516611650576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6116646001600160a01b03871686866128ad565b6040517f8fcaa0b50000000000000000000000000000000000000000000000000000000081526001600160a01b03861690638fcaa0b5906116ab90869086906004016133b8565b600060405180830381600087803b1580156116c557600080fd5b505af11580156116d9573d6000803e3d6000fd5b50505050846001600160a01b0316866001600160a01b03167f723fc7be2448075379e4fdf1e6bf5fead954d2668d2da05dcb44ccfec4beeda7868686604051611724939291906133d4565b60405180910390a36111fe60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156117a05750825b905060008267ffffffffffffffff1660011480156117bd5750303b155b9050811580156117cb575080155b15611802576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84547fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000016600117855583156118635784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff16680100000000000000001785555b6001600160a01b038816158061188057506001600160a01b038716155b156118b7576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6118bf612921565b6118c7612929565b6118cf612921565b6118d7612939565b6118e2600087611ce8565b5061190d7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a87611ce8565b50600180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b038a1617905561196b7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb89611ce8565b50600380547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0389161790558315611a005784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b5050505050505050565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020526040902060010154611a4481611cde565b610c588383611f83565b611a56611dd5565b611a5e611e33565b34600003611a98576040517f7671265e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038116611ad8576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546040516000916001600160a01b03169034908381818185875af1925050503d8060008114611b25576040519150601f19603f3d011682016040523d82523d6000602084013e611b2a565b606091505b5050905080611b65576040517f79cacff100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60408051348152600060208201819052606082840181905282015290516001600160a01b0384169133917f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a49181900360800190a350610ecb60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b611beb611dd5565b611bf3611e33565b81600003611c2d576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038316611c6d576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611c78338284612667565b826001600160a01b0316336001600160a01b03167f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a484846040516109489291909182526001600160a01b0316602082015260606040820181905260009082015260800190565b610ecb8133612949565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff16611dcb576000848152602082815260408083206001600160a01b0387168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055611d813390565b6001600160a01b0316836001600160a01b0316857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a460019150506107f9565b60009150506107f9565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff1615611e31576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0080547ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01611eae576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60029055565b60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b6060600080856001600160a01b0316348686604051611efa929190613481565b60006040518083038185875af1925050503d8060008114611f37576040519150601f19603f3d011682016040523d82523d6000602084013e611f3c565b606091505b509150915081611f78576040517facfdb44400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b9150505b9392505050565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff1615611dcb576000848152602082815260408083206001600160a01b038716808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339287917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a460019150506107f9565b61204f6129d6565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001681557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a150565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148061217057507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166121647f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b6001600160a01b031614155b15611e31576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610ee981611cde565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa92505050801561222a575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820190925261222791810190613439565b60015b612270576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b03831660048201526024015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc81146122cc576040517faa1d49a400000000000000000000000000000000000000000000000000000000815260048101829052602401612267565b6109798383612a31565b6040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b038281166004830152600060248301819052919084169063095ea7b3906044016020604051808303816000875af1158015612342573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f7c9190613417565b6003546001600160a01b03908116908316036124b5576002546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152602481018390529083169063095ea7b3906044016020604051808303816000875af11580156123e8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061240c9190613417565b612442576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002546040517f743e0c9b000000000000000000000000000000000000000000000000000000008152600481018390526001600160a01b039091169063743e0c9b90602401600060405180830381600087803b1580156124a157600080fd5b505af11580156111fe573d6000803e3d6000fd5b6000546040517fd936547e0000000000000000000000000000000000000000000000000000000081526001600160a01b0384811660048301529091169063d936547e90602401602060405180830381865afa158015612518573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061253c9190613417565b612572576040517fac2175f100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600054610ee9906001600160a01b038481169116836128ad565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614611e31576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6125f6611dd5565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011781557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258336120b9565b6003546001600160a01b03908116908316036127d4576126926001600160a01b038316843084612a87565b6002546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152602481018390529083169063095ea7b3906044016020604051808303816000875af11580156126fe573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127229190613417565b612758576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002546040517f743e0c9b000000000000000000000000000000000000000000000000000000008152600481018390526001600160a01b039091169063743e0c9b90602401600060405180830381600087803b1580156127b757600080fd5b505af11580156127cb573d6000803e3d6000fd5b50505050505050565b6000546040517fd936547e0000000000000000000000000000000000000000000000000000000081526001600160a01b0384811660048301529091169063d936547e90602401602060405180830381865afa158015612837573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061285b9190613417565b612891576040517fac2175f100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600054610979906001600160a01b038481169186911684612a87565b6040516001600160a01b0383811660248301526044820183905261097991859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050612ac0565b611e31612b3c565b612931612b3c565b611e31612ba3565b612941612b3c565b611e31612bab565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408083206001600160a01b038516845290915290205460ff16610ee9576040517fe2517d3f0000000000000000000000000000000000000000000000000000000081526001600160a01b038216600482015260248101839052604401612267565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff16611e31576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612a3a82612bfc565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a2805115612a7f576109798282612ca4565b610ee9612d1a565b6040516001600160a01b038481166024830152838116604483015260648201839052610c589186918216906323b872dd906084016128da565b6000612ad56001600160a01b03841683612d52565b90508051600014158015612afa575080806020019051810190612af89190613417565b155b15610979576040517f5274afe70000000000000000000000000000000000000000000000000000000081526001600160a01b0384166004820152602401612267565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff16611e31576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611eb4612b3c565b612bb3612b3c565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055565b806001600160a01b03163b600003612c4b576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b0382166004820152602401612267565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6060600080846001600160a01b031684604051612cc19190613491565b600060405180830381855af49150503d8060008114612cfc576040519150601f19603f3d011682016040523d82523d6000602084013e612d01565b606091505b5091509150612d11858383612d60565b95945050505050565b3415611e31576040517fb398979f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6060611f7c83836000612dd5565b606082612d7557612d7082612e8b565b611f7c565b8151158015612d8c57506001600160a01b0384163b155b15612dce576040517f9996b3150000000000000000000000000000000000000000000000000000000081526001600160a01b0385166004820152602401612267565b5080611f7c565b606081471015612e13576040517fcd786059000000000000000000000000000000000000000000000000000000008152306004820152602401612267565b600080856001600160a01b03168486604051612e2f9190613491565b60006040518083038185875af1925050503d8060008114612e6c576040519150601f19603f3d011682016040523d82523d6000602084013e612e71565b606091505b5091509150612e81868383612d60565b9695505050505050565b805115612e9b5780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060208284031215612edf57600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114611f7c57600080fd5b80356001600160a01b0381168114612f2657600080fd5b919050565b600060208284031215612f3d57600080fd5b611f7c82612f0f565b60008083601f840112612f5857600080fd5b50813567ffffffffffffffff811115612f7057600080fd5b602083019150836020828501011115612f8857600080fd5b9250929050565b600080600060408486031215612fa457600080fd5b612fad84612f0f565b9250602084013567ffffffffffffffff811115612fc957600080fd5b612fd586828701612f46565b9497909650939450505050565b60005b83811015612ffd578181015183820152602001612fe5565b50506000910152565b6000815180845261301e816020860160208601612fe2565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000611f7c6020830184613006565b60006020828403121561307557600080fd5b5035919050565b6000806040838503121561308f57600080fd5b8235915061309f60208401612f0f565b90509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080604083850312156130ea57600080fd5b6130f383612f0f565b9150602083013567ffffffffffffffff81111561310f57600080fd5b8301601f8101851361312057600080fd5b803567ffffffffffffffff81111561313a5761313a6130a8565b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8501160116810181811067ffffffffffffffff821117156131a6576131a66130a8565b6040528181528282016020018710156131be57600080fd5b816020840160208301376000602083830101528093505050509250929050565b6000806000806000608086880312156131f657600080fd5b6131ff86612f0f565b945061320d60208701612f0f565b935060408601359250606086013567ffffffffffffffff81111561323057600080fd5b61323c88828901612f46565b969995985093965092949392505050565b6000806000806060858703121561326357600080fd5b61326c85612f0f565b935060208501359250604085013567ffffffffffffffff81111561328f57600080fd5b61329b87828801612f46565b95989497509550505050565b6000806000806000608086880312156132bf57600080fd5b6132c886612f0f565b9450602086013593506132dd60408701612f0f565b9250606086013567ffffffffffffffff81111561323057600080fd5b60008060006060848603121561330e57600080fd5b61331784612f0f565b925061332560208501612f0f565b915061333360408501612f0f565b90509250925092565b60008060006060848603121561335157600080fd5b61335a84612f0f565b92506020840135915061333360408501612f0f565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b6020815260006133cc60208301848661336f565b949350505050565b838152604060208201526000612d1160408301848661336f565b8481526001600160a01b0384166020820152606060408201526000612e8160608301848661336f565b60006020828403121561342957600080fd5b81518015158114611f7c57600080fd5b60006020828403121561344b57600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b8183823760009101908152919050565b600082516134a3818460208701612fe2565b919091019291505056fea2646970667358221220749992fc5d6c5f5fcb8a3202d9894526b754415bef831ad88ca3d85be39dad4a64736f6c634300081a0033608060405234801561001057600080fd5b50604051610c9f380380610c9f83398101604081905261002f9161010d565b8181600361003d83826101ff565b50600461004a82826101ff565b50505050506102bd565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261007b57600080fd5b81516001600160401b0381111561009457610094610054565b604051601f8201601f19908116603f011681016001600160401b03811182821017156100c2576100c2610054565b6040528181528382016020018510156100da57600080fd5b60005b828110156100f9576020818601810151838301820152016100dd565b506000918101602001919091529392505050565b6000806040838503121561012057600080fd5b82516001600160401b0381111561013657600080fd5b6101428582860161006a565b602085015190935090506001600160401b0381111561016057600080fd5b61016c8582860161006a565b9150509250929050565b600181811c9082168061018a57607f821691505b6020821081036101aa57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156101fa57806000526020600020601f840160051c810160208510156101d75750805b601f840160051c820191505b818110156101f757600081556001016101e3565b50505b505050565b81516001600160401b0381111561021857610218610054565b61022c816102268454610176565b846101b0565b6020601f82116001811461026057600083156102485750848201515b600019600385901b1c1916600184901b1784556101f7565b600084815260208120601f198516915b828110156102905787850151825560209485019460019092019101610270565b50848210156102ae5786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b6109d3806102cc6000396000f3fe608060405234801561001057600080fd5b50600436106100be5760003560e01c806340c10f191161007657806395d89b411161005b57806395d89b4114610183578063a9059cbb1461018b578063dd62ed3e1461019e57600080fd5b806340c10f191461013857806370a082311461014d57600080fd5b806318160ddd116100a757806318160ddd1461010457806323b872dd14610116578063313ce5671461012957600080fd5b806306fdde03146100c3578063095ea7b3146100e1575b600080fd5b6100cb6101e4565b6040516100d891906107bf565b60405180910390f35b6100f46100ef366004610854565b610276565b60405190151581526020016100d8565b6002545b6040519081526020016100d8565b6100f461012436600461087e565b610290565b604051601281526020016100d8565b61014b610146366004610854565b6102b4565b005b61010861015b3660046108bb565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6100cb6102c2565b6100f4610199366004610854565b6102d1565b6101086101ac3660046108dd565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6060600380546101f390610910565b80601f016020809104026020016040519081016040528092919081815260200182805461021f90610910565b801561026c5780601f106102415761010080835404028352916020019161026c565b820191906000526020600020905b81548152906001019060200180831161024f57829003601f168201915b5050505050905090565b6000336102848185856102df565b60019150505b92915050565b60003361029e8582856102f1565b6102a98585856103c5565b506001949350505050565b6102be8282610470565b5050565b6060600480546101f390610910565b6000336102848185856103c5565b6102ec83838360016104cc565b505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146103bf57818110156103b0576040517ffb8f41b200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416600482015260248101829052604481018390526064015b60405180910390fd5b6103bf848484840360006104cc565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8316610415576040517f96c6fd1e000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff8216610465576040517fec442f05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b6102ec838383610614565b73ffffffffffffffffffffffffffffffffffffffff82166104c0576040517fec442f05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b6102be60008383610614565b73ffffffffffffffffffffffffffffffffffffffff841661051c576040517fe602df05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff831661056c576040517f94280d62000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260016020908152604080832093871683529290522082905580156103bf578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161060691815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff831661064c5780600260008282546106419190610963565b909155506106fe9050565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260208190526040902054818110156106d2576040517fe450d38c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8516600482015260248101829052604481018390526064016103a7565b73ffffffffffffffffffffffffffffffffffffffff841660009081526020819052604090209082900390555b73ffffffffffffffffffffffffffffffffffffffff821661072757600280548290039055610753565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090208054820190555b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516107b291815260200190565b60405180910390a3505050565b602081526000825180602084015260005b818110156107ed57602081860181015160408684010152016107d0565b5060006040828501015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011684010191505092915050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461084f57600080fd5b919050565b6000806040838503121561086757600080fd5b6108708361082b565b946020939093013593505050565b60008060006060848603121561089357600080fd5b61089c8461082b565b92506108aa6020850161082b565b929592945050506040919091013590565b6000602082840312156108cd57600080fd5b6108d68261082b565b9392505050565b600080604083850312156108f057600080fd5b6108f98361082b565b91506109076020840161082b565b90509250929050565b600181811c9082168061092457607f821691505b60208210810361095d577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b8082018082111561028a577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea26469706673582212207e804ca539d49155d2b6bc19268ce22f9f857027c75247d69fb0d56a089c93d464736f6c634300081a003360a060405234801561001057600080fd5b506040516116fe3803806116fe83398101604081905261002f916101e5565b60016000556002805460ff191690556001600160a01b038316158061005b57506001600160a01b038216155b8061006d57506001600160a01b038116155b1561008b5760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b0383166080526100a3600082610134565b506100ce7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a82610134565b506100f97f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e483610134565b506101126000805160206116de83398151915282610134565b5061012b6000805160206116de83398151915283610134565b50505050610228565b60008281526001602090815260408083206001600160a01b038516845290915281205460ff166101bf5760008381526001602081815260408084206001600160a01b0387168086529252808420805460ff19169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45060016101c3565b5060005b92915050565b80516001600160a01b03811681146101e057600080fd5b919050565b6000806000606084860312156101fa57600080fd5b610203846101c9565b9250610211602085016101c9565b915061021f604085016101c9565b90509250925092565b60805161147f61025f6000396000818161019e0152818161050001528181610562015281816108f70152610959015261147f6000f3fe608060405234801561001057600080fd5b506004361061016c5760003560e01c806385f438c1116100cd578063c8a0236211610081578063d936547e11610066578063d936547e14610355578063d9caed1214610378578063e63ab1e91461038b57600080fd5b8063c8a023621461032f578063d547741f1461034257600080fd5b80639a590427116100b25780639a590427146103015780639b19251a14610314578063a217fddf1461032757600080fd5b806385f438c11461029457806391d14854146102bb57600080fd5b806336568abe11610124578063570618e111610109578063570618e11461025a5780635c975abb146102815780638456cb591461028c57600080fd5b806336568abe1461023f5780633f4ba83a1461025257600080fd5b806321fc65f21161015557806321fc65f2146101e5578063248a9ca3146101fa5780632f2ff15d1461022c57600080fd5b806301ffc9a714610171578063116191b614610199575b600080fd5b61018461017f36600461118a565b6103b2565b60405190151581526020015b60405180910390f35b6101c07f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610190565b6101f86101f33660046111f5565b61044b565b005b61021e610208366004611292565b6000908152600160208190526040909120015490565b604051908152602001610190565b6101f861023a3660046112ab565b61064c565b6101f861024d3660046112ab565b610678565b6101f86106d6565b61021e7f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a81565b60025460ff16610184565b6101f861070b565b61021e7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b6101846102c93660046112ab565b600091825260016020908152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b6101f861030f3660046112d7565b61073d565b6101f86103223660046112d7565b6107be565b61021e600081565b6101f861033d3660046111f5565b610842565b6101f86103503660046112ab565b610a29565b6101846103633660046112d7565b60036020526000908152604090205460ff1681565b6101f86103863660046112f2565b610a4f565b61021e7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061044557507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b610453610b7b565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461047d81610bbe565b610485610bc8565b73ffffffffffffffffffffffffffffffffffffffff861660009081526003602052604090205460ff166104e4576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61052573ffffffffffffffffffffffffffffffffffffffff87167f000000000000000000000000000000000000000000000000000000000000000086610c07565b6040517f5131ab5900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690635131ab599061059f9089908990899089908990600401611378565b600060405180830381600087803b1580156105b957600080fd5b505af11580156105cd573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167f85b5be9cf454e05e0bddf49315178102227c312078eefa3c00294fb4d912ae4e868686604051610632939291906113d5565b60405180910390a3506106456001600055565b5050505050565b6000828152600160208190526040909120015461066881610bbe565b6106728383610c94565b50505050565b73ffffffffffffffffffffffffffffffffffffffff811633146106c7576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6106d18282610d41565b505050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61070081610bbe565b610708610de2565b50565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61073581610bbe565b610708610e41565b7f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a61076781610bbe565b73ffffffffffffffffffffffffffffffffffffffff8216600081815260036020526040808220805460ff19169055517f51085ddf9ebdded84b76e829eb58c4078e4b5bdf97d9a94723f336039da467919190a25050565b7f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a6107e881610bbe565b73ffffffffffffffffffffffffffffffffffffffff8216600081815260036020526040808220805460ff19166001179055517faab7954e9d246b167ef88aeddad35209ca2489d95a8aeb59e288d9b19fae5a549190a25050565b61084a610b7b565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461087481610bbe565b61087c610bc8565b73ffffffffffffffffffffffffffffffffffffffff861660009081526003602052604090205460ff166108db576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61091c73ffffffffffffffffffffffffffffffffffffffff87167f000000000000000000000000000000000000000000000000000000000000000086610c07565b6040517fb8969bd400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063b8969bd4906109969089908990899089908990600401611378565b600060405180830381600087803b1580156109b057600080fd5b505af11580156109c4573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fb9d4efa96044e5f5e03e696fa9ae2ff66911cc27e8a637c3627c75bc5b2241c8868686604051610632939291906113d5565b60008281526001602081905260409091200154610a4581610bbe565b6106728383610d41565b610a57610b7b565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e4610a8181610bbe565b610a89610bc8565b73ffffffffffffffffffffffffffffffffffffffff841660009081526003602052604090205460ff16610ae8576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610b0973ffffffffffffffffffffffffffffffffffffffff85168484610c07565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f9b1bfa7fa9ee420a16e124f794c35ac9f90472acc99140eb2f6447c714cad8eb84604051610b6891815260200190565b60405180910390a3506106d16001600055565b600260005403610bb7576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b6107088133610e7e565b60025460ff1615610c05576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6040805173ffffffffffffffffffffffffffffffffffffffff8416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb000000000000000000000000000000000000000000000000000000001790526106d1908490610f0f565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff16610d3957600083815260016020818152604080842073ffffffffffffffffffffffffffffffffffffffff87168086529252808420805460ff19169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a4506001610445565b506000610445565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff1615610d3957600083815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff86168085529252808320805460ff1916905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a4506001610445565b610dea610fa5565b6002805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b610e49610bc8565b6002805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258610e173390565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16610f0b576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82166004820152602481018390526044015b60405180910390fd5b5050565b6000610f3173ffffffffffffffffffffffffffffffffffffffff841683610fe1565b90508051600014158015610f56575080806020019051810190610f5491906113f8565b155b156106d1576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84166004820152602401610f02565b60025460ff16610c05576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6060610fef83836000610ff6565b9392505050565b606081471015611034576040517fcd786059000000000000000000000000000000000000000000000000000000008152306004820152602401610f02565b6000808573ffffffffffffffffffffffffffffffffffffffff16848660405161105d919061141a565b60006040518083038185875af1925050503d806000811461109a576040519150601f19603f3d011682016040523d82523d6000602084013e61109f565b606091505b50915091506110af8683836110b9565b9695505050505050565b6060826110ce576110c982611148565b610fef565b81511580156110f2575073ffffffffffffffffffffffffffffffffffffffff84163b155b15611141576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85166004820152602401610f02565b5080610fef565b8051156111585780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006020828403121561119c57600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610fef57600080fd5b803573ffffffffffffffffffffffffffffffffffffffff811681146111f057600080fd5b919050565b60008060008060006080868803121561120d57600080fd5b611216866111cc565b9450611224602087016111cc565b935060408601359250606086013567ffffffffffffffff81111561124757600080fd5b8601601f8101881361125857600080fd5b803567ffffffffffffffff81111561126f57600080fd5b88602082840101111561128157600080fd5b959894975092955050506020019190565b6000602082840312156112a457600080fd5b5035919050565b600080604083850312156112be57600080fd5b823591506112ce602084016111cc565b90509250929050565b6000602082840312156112e957600080fd5b610fef826111cc565b60008060006060848603121561130757600080fd5b611310846111cc565b925061131e602085016111cc565b929592945050506040919091013590565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff8616815273ffffffffffffffffffffffffffffffffffffffff851660208201528360408201526080606082015260006113ca60808301848661132f565b979650505050505050565b8381526040602082015260006113ef60408301848661132f565b95945050505050565b60006020828403121561140a57600080fd5b81518015158114610fef57600080fd5b6000825160005b8181101561143b5760208186018101518583015201611421565b50600092019182525091905056fea2646970667358221220dc54ce548a1f0bf8ba5e86cc53c6d822e55eee543451395733c659359bac8dd164736f6c634300081a00338619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a"; + "0x60a060405230608052600580546001600160a01b0319163317905534801561002657600080fd5b5061002f610154565b600554600180546001600160a01b039092166001600160a01b031992831617905560028054610123921691909117905560405161006b90610206565b60408082526004908201819052631d195cdd60e21b606083015260806020830181905282015263151154d560e21b60a082015260c001604051809103906000f0801580156100bd573d6000803e3d6000fd5b50600480546001600160a01b0319166001600160a01b039283161790556001546040513092919091169082906100f290610213565b6001600160a01b03938416815291831660208301529091166040820152606001604051809103906000f08015801561012e573d6000803e3d6000fd5b50600080546001600160a01b0319166001600160a01b0392909216919091179055610220565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156101a45760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146102035780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b610c9f8061376c83390190565b6116fe8061440b83390190565b608051613523610249600039600081816121220152818161214b01526125d701526135236000f3fe6080604052600436106102345760003560e01c80635c975abb11610138578063ad3cb1cc116100b0578063d547741f1161007f578063e63ab1e911610064578063e63ab1e9146106ff578063f340fa0114610733578063f45346dc1461074657600080fd5b8063d547741f146106bf578063dda79b75146106df57600080fd5b8063ad3cb1cc14610616578063ae7a3a6f1461065f578063b8969bd41461067f578063c0c53b8b1461069f57600080fd5b80638456cb591161010757806391d14854116100ec57806391d1485414610568578063a217fddf146105cd578063a783c789146105e257600080fd5b80638456cb59146105335780638c6f037f1461054857600080fd5b80635c975abb146104885780635d62c860146104bf5780636ab90f9b146104f357806381100bf01461051357600080fd5b806335c018db116101cb5780634f1ef2861161019a57806352d1902d1161017f57806352d1902d1461043357806357bec62f146104485780635b1125911461046857600080fd5b80634f1ef286146104005780635131ab591461041357600080fd5b806335c018db1461039857806336568abe146103ab5780633c2f05a8146103cb5780633f4ba83a146103eb57600080fd5b806321e093b11161020757806321e093b1146102d0578063248a9ca31461030857806329c59b5d146103655780632f2ff15d1461037857600080fd5b806301ffc9a71461023957806310188aef1461026e5780631b8b921d146102905780631cff79cd146102b0575b600080fd5b34801561024557600080fd5b50610259610254366004612f0d565b610766565b60405190151581526020015b60405180910390f35b34801561027a57600080fd5b5061028e610289366004612f6b565b6107ff565b005b34801561029c57600080fd5b5061028e6102ab366004612fcf565b6108f3565b6102c36102be366004612fcf565b6109be565b6040516102659190613090565b3480156102dc57600080fd5b506003546102f0906001600160a01b031681565b6040516001600160a01b039091168152602001610265565b34801561031457600080fd5b506103576103233660046130a3565b60009081527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052604090206001015490565b604051908152602001610265565b61028e610373366004612fcf565b610ac1565b34801561038457600080fd5b5061028e6103933660046130bc565b610c54565b61028e6103a6366004612fcf565b610c9e565b3480156103b757600080fd5b5061028e6103c63660046130bc565b610e8d565b3480156103d757600080fd5b506004546102f0906001600160a01b031681565b3480156103f757600080fd5b5061028e610ed9565b61028e61040e366004613117565b610f0e565b34801561041f57600080fd5b5061028e61042e36600461321e565b610f2d565b34801561043f57600080fd5b50610357611246565b34801561045457600080fd5b506002546102f0906001600160a01b031681565b34801561047457600080fd5b506001546102f0906001600160a01b031681565b34801561049457600080fd5b507fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff16610259565b3480156104cb57600080fd5b506103577f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b981565b3480156104ff57600080fd5b5061028e61050e36600461328d565b611275565b34801561051f57600080fd5b506005546102f0906001600160a01b031681565b34801561053f57600080fd5b5061028e6113a0565b34801561055457600080fd5b5061028e6105633660046132e7565b6113d2565b34801561057457600080fd5b506102596105833660046130bc565b60009182527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408084206001600160a01b0393909316845291905290205460ff1690565b3480156105d957600080fd5b50610357600081565b3480156105ee57600080fd5b506103577f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb81565b34801561062257600080fd5b506102c36040518060400160405280600581526020017f352e302e3000000000000000000000000000000000000000000000000000000081525081565b34801561066b57600080fd5b5061028e61067a366004612f6b565b6114e8565b34801561068b57600080fd5b5061028e61069a36600461321e565b6115dc565b3480156106ab57600080fd5b5061028e6106ba366004613339565b611795565b3480156106cb57600080fd5b5061028e6106da3660046130bc565b611a4a565b3480156106eb57600080fd5b506000546102f0906001600160a01b031681565b34801561070b57600080fd5b506103577f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b61028e610741366004612f6b565b611a8e565b34801561075257600080fd5b5061028e61076136600461337c565b611c23565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b0000000000000000000000000000000000000000000000000000000014806107f957507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b600061080a81611d1e565b6001600160a01b03821661084a576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002546001600160a01b03161561088d576040517f0c8dc01600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6108b77f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b983611d28565b5050600280547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6108fb611e15565b610903611e73565b6001600160a01b038316610943576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b826001600160a01b0316336001600160a01b03167f2a21062ee9199c2e205622999eeb7c3da73153674f36a0acd3f74fa6af67bde384846040516109889291906133f8565b60405180910390a36109b960017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b505050565b60607f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb6109ea81611d1e565b6109f2611e15565b6109fa611e73565b6001600160a01b038516610a3a576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610a47868686611f1a565b9050856001600160a01b03167fcaf938de11c367272220bfd1d2baa99ca46665e7bc4d85f00adb51b90fe1fa9f348787604051610a8693929190613414565b60405180910390a29150610ab960017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b509392505050565b610ac9611e15565b610ad1611e73565b34600003610b0b576040517f7671265e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038316610b4b576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546040516000916001600160a01b03169034908381818185875af1925050503d8060008114610b98576040519150601f19603f3d011682016040523d82523d6000602084013e610b9d565b606091505b5050905080610bd8576040517f79cacff100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b836001600160a01b0316336001600160a01b03167f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a43460008787604051610c22949392919061342e565b60405180910390a3506109b960017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020526040902060010154610c8e81611d1e565b610c988383611d28565b50505050565b7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb610cc881611d1e565b610cd0611e15565b610cd8611e73565b6001600160a01b038416610d18576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000846001600160a01b03163460405160006040518083038185875af1925050503d8060008114610d65576040519150601f19603f3d011682016040523d82523d6000602084013e610d6a565b606091505b5050905080610da5576040517facfdb44400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f8fcaa0b50000000000000000000000000000000000000000000000000000000081526001600160a01b03861690638fcaa0b590610dec90879087906004016133f8565b600060405180830381600087803b158015610e0657600080fd5b505af1158015610e1a573d6000803e3d6000fd5b50505050846001600160a01b03167fd5d7616b1678354a0dea9d7e57e6a090bff5babe9f8d6381fdbad16e89ba311c348686604051610e5b93929190613414565b60405180910390a250610c9860017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b6001600160a01b0381163314610ecf576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6109b98282611fc3565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610f0381611d1e565b610f0b612087565b50565b610f16612117565b610f1f826121e7565b610f2982826121f2565b5050565b7f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b9610f5781611d1e565b610f5f611e15565b610f67611e73565b83600003610fa1576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038516610fe1576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610feb8686612316565b611021576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b0386811660048301526024820186905287169063095ea7b3906044016020604051808303816000875af1158015611089573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110ad9190613457565b6110e3576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6110ee858484611f1a565b506110f98686612316565b61112f576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201526000906001600160a01b038816906370a0823190602401602060405180830381865afa15801561118f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111b39190613479565b905080156111c5576111c587826123a6565b856001600160a01b0316876001600160a01b03167f29c40793bffd84cb810179f15d1ceec72bc7f0785514c668ba36645cf99b738287878760405161120c93929190613414565b60405180910390a35061123e60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b505050505050565b60006112506125cc565b507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc90565b600480546040517f40c10f190000000000000000000000000000000000000000000000000000000081523092810192909252602482018590526001600160a01b0316906340c10f1990604401600060405180830381600087803b1580156112db57600080fd5b505af11580156112ef573d6000803e3d6000fd5b505060045461130d92506001600160a01b0316905085858585610f2d565b600480546040517f70a0823100000000000000000000000000000000000000000000000000000000815230928101929092526001600160a01b0316906370a0823190602401602060405180830381865afa15801561136f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113939190613479565b15610c9857610c98613492565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a6113ca81611d1e565b610f0b61262e565b6113da611e15565b6113e2611e73565b8360000361141c576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03851661145c576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6114673384866126a7565b846001600160a01b0316336001600160a01b03167f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a4868686866040516114b0949392919061342e565b60405180910390a36114e160017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b5050505050565b60006114f381611d1e565b6001600160a01b038216611533576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000546001600160a01b031615611576576040517fb337f37800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6115a07f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b983611d28565b5050600080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b7f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b961160681611d1e565b61160e611e15565b611616611e73565b83600003611650576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038516611690576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6116a46001600160a01b03871686866128ed565b6040517f8fcaa0b50000000000000000000000000000000000000000000000000000000081526001600160a01b03861690638fcaa0b5906116eb90869086906004016133f8565b600060405180830381600087803b15801561170557600080fd5b505af1158015611719573d6000803e3d6000fd5b50505050846001600160a01b0316866001600160a01b03167f723fc7be2448075379e4fdf1e6bf5fead954d2668d2da05dcb44ccfec4beeda786868660405161176493929190613414565b60405180910390a361123e60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156117e05750825b905060008267ffffffffffffffff1660011480156117fd5750303b155b90508115801561180b575080155b15611842576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84547fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000016600117855583156118a35784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff16680100000000000000001785555b6001600160a01b03881615806118c057506001600160a01b038716155b156118f7576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6118ff612961565b611907612969565b61190f612961565b611917612979565b611922600087611d28565b5061194d7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a87611d28565b50600180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b038a161790556119ab7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb89611d28565b50600380547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0389161790558315611a405784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b5050505050505050565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020526040902060010154611a8481611d1e565b610c988383611fc3565b611a96611e15565b611a9e611e73565b34600003611ad8576040517f7671265e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038116611b18576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546040516000916001600160a01b03169034908381818185875af1925050503d8060008114611b65576040519150601f19603f3d011682016040523d82523d6000602084013e611b6a565b606091505b5050905080611ba5576040517f79cacff100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60408051348152600060208201819052606082840181905282015290516001600160a01b0384169133917f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a49181900360800190a350610f0b60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b611c2b611e15565b611c33611e73565b81600003611c6d576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038316611cad576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611cb83382846126a7565b826001600160a01b0316336001600160a01b03167f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a484846040516109889291909182526001600160a01b0316602082015260606040820181905260009082015260800190565b610f0b8133612989565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff16611e0b576000848152602082815260408083206001600160a01b0387168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055611dc13390565b6001600160a01b0316836001600160a01b0316857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a460019150506107f9565b60009150506107f9565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff1615611e71576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0080547ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01611eee576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60029055565b60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b6060600080856001600160a01b0316348686604051611f3a9291906134c1565b60006040518083038185875af1925050503d8060008114611f77576040519150601f19603f3d011682016040523d82523d6000602084013e611f7c565b606091505b509150915081611fb8576040517facfdb44400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b9150505b9392505050565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff1615611e0b576000848152602082815260408083206001600160a01b038716808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339287917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a460019150506107f9565b61208f612a16565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001681557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a150565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806121b057507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166121a47f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b6001600160a01b031614155b15611e71576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610f2981611d1e565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa92505050801561226a575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820190925261226791810190613479565b60015b6122b0576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b03831660048201526024015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc811461230c576040517faa1d49a4000000000000000000000000000000000000000000000000000000008152600481018290526024016122a7565b6109b98383612a71565b6040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b038281166004830152600060248301819052919084169063095ea7b3906044016020604051808303816000875af1158015612382573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fbc9190613457565b6003546001600160a01b03908116908316036124f5576002546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152602481018390529083169063095ea7b3906044016020604051808303816000875af1158015612428573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061244c9190613457565b612482576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002546040517f743e0c9b000000000000000000000000000000000000000000000000000000008152600481018390526001600160a01b039091169063743e0c9b90602401600060405180830381600087803b1580156124e157600080fd5b505af115801561123e573d6000803e3d6000fd5b6000546040517fd936547e0000000000000000000000000000000000000000000000000000000081526001600160a01b0384811660048301529091169063d936547e90602401602060405180830381865afa158015612558573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061257c9190613457565b6125b2576040517fac2175f100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600054610f29906001600160a01b038481169116836128ed565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614611e71576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612636611e15565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011781557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258336120f9565b6003546001600160a01b0390811690831603612814576126d26001600160a01b038316843084612ac7565b6002546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152602481018390529083169063095ea7b3906044016020604051808303816000875af115801561273e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127629190613457565b612798576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002546040517f743e0c9b000000000000000000000000000000000000000000000000000000008152600481018390526001600160a01b039091169063743e0c9b90602401600060405180830381600087803b1580156127f757600080fd5b505af115801561280b573d6000803e3d6000fd5b50505050505050565b6000546040517fd936547e0000000000000000000000000000000000000000000000000000000081526001600160a01b0384811660048301529091169063d936547e90602401602060405180830381865afa158015612877573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061289b9190613457565b6128d1576040517fac2175f100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000546109b9906001600160a01b038481169186911684612ac7565b6040516001600160a01b038381166024830152604482018390526109b991859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050612b00565b611e71612b7c565b612971612b7c565b611e71612be3565b612981612b7c565b611e71612beb565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408083206001600160a01b038516845290915290205460ff16610f29576040517fe2517d3f0000000000000000000000000000000000000000000000000000000081526001600160a01b0382166004820152602481018390526044016122a7565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff16611e71576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612a7a82612c3c565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a2805115612abf576109b98282612ce4565b610f29612d5a565b6040516001600160a01b038481166024830152838116604483015260648201839052610c989186918216906323b872dd9060840161291a565b6000612b156001600160a01b03841683612d92565b90508051600014158015612b3a575080806020019051810190612b389190613457565b155b156109b9576040517f5274afe70000000000000000000000000000000000000000000000000000000081526001600160a01b03841660048201526024016122a7565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff16611e71576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611ef4612b7c565b612bf3612b7c565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055565b806001600160a01b03163b600003612c8b576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b03821660048201526024016122a7565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6060600080846001600160a01b031684604051612d0191906134d1565b600060405180830381855af49150503d8060008114612d3c576040519150601f19603f3d011682016040523d82523d6000602084013e612d41565b606091505b5091509150612d51858383612da0565b95945050505050565b3415611e71576040517fb398979f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6060611fbc83836000612e15565b606082612db557612db082612ecb565b611fbc565b8151158015612dcc57506001600160a01b0384163b155b15612e0e576040517f9996b3150000000000000000000000000000000000000000000000000000000081526001600160a01b03851660048201526024016122a7565b5080611fbc565b606081471015612e53576040517fcd7860590000000000000000000000000000000000000000000000000000000081523060048201526024016122a7565b600080856001600160a01b03168486604051612e6f91906134d1565b60006040518083038185875af1925050503d8060008114612eac576040519150601f19603f3d011682016040523d82523d6000602084013e612eb1565b606091505b5091509150612ec1868383612da0565b9695505050505050565b805115612edb5780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060208284031215612f1f57600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114611fbc57600080fd5b80356001600160a01b0381168114612f6657600080fd5b919050565b600060208284031215612f7d57600080fd5b611fbc82612f4f565b60008083601f840112612f9857600080fd5b50813567ffffffffffffffff811115612fb057600080fd5b602083019150836020828501011115612fc857600080fd5b9250929050565b600080600060408486031215612fe457600080fd5b612fed84612f4f565b9250602084013567ffffffffffffffff81111561300957600080fd5b61301586828701612f86565b9497909650939450505050565b60005b8381101561303d578181015183820152602001613025565b50506000910152565b6000815180845261305e816020860160208601613022565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000611fbc6020830184613046565b6000602082840312156130b557600080fd5b5035919050565b600080604083850312156130cf57600080fd5b823591506130df60208401612f4f565b90509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000806040838503121561312a57600080fd5b61313383612f4f565b9150602083013567ffffffffffffffff81111561314f57600080fd5b8301601f8101851361316057600080fd5b803567ffffffffffffffff81111561317a5761317a6130e8565b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8501160116810181811067ffffffffffffffff821117156131e6576131e66130e8565b6040528181528282016020018710156131fe57600080fd5b816020840160208301376000602083830101528093505050509250929050565b60008060008060006080868803121561323657600080fd5b61323f86612f4f565b945061324d60208701612f4f565b935060408601359250606086013567ffffffffffffffff81111561327057600080fd5b61327c88828901612f86565b969995985093965092949392505050565b600080600080606085870312156132a357600080fd5b6132ac85612f4f565b935060208501359250604085013567ffffffffffffffff8111156132cf57600080fd5b6132db87828801612f86565b95989497509550505050565b6000806000806000608086880312156132ff57600080fd5b61330886612f4f565b94506020860135935061331d60408701612f4f565b9250606086013567ffffffffffffffff81111561327057600080fd5b60008060006060848603121561334e57600080fd5b61335784612f4f565b925061336560208501612f4f565b915061337360408501612f4f565b90509250925092565b60008060006060848603121561339157600080fd5b61339a84612f4f565b92506020840135915061337360408501612f4f565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b60208152600061340c6020830184866133af565b949350505050565b838152604060208201526000612d516040830184866133af565b8481526001600160a01b0384166020820152606060408201526000612ec16060830184866133af565b60006020828403121561346957600080fd5b81518015158114611fbc57600080fd5b60006020828403121561348b57600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b8183823760009101908152919050565b600082516134e3818460208701613022565b919091019291505056fea2646970667358221220d45ec3cba3622227dcd9c14b95d8558626955d38c71357f7fccb19bc65c6737564736f6c634300081a0033608060405234801561001057600080fd5b50604051610c9f380380610c9f83398101604081905261002f9161010d565b8181600361003d83826101ff565b50600461004a82826101ff565b50505050506102bd565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261007b57600080fd5b81516001600160401b0381111561009457610094610054565b604051601f8201601f19908116603f011681016001600160401b03811182821017156100c2576100c2610054565b6040528181528382016020018510156100da57600080fd5b60005b828110156100f9576020818601810151838301820152016100dd565b506000918101602001919091529392505050565b6000806040838503121561012057600080fd5b82516001600160401b0381111561013657600080fd5b6101428582860161006a565b602085015190935090506001600160401b0381111561016057600080fd5b61016c8582860161006a565b9150509250929050565b600181811c9082168061018a57607f821691505b6020821081036101aa57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156101fa57806000526020600020601f840160051c810160208510156101d75750805b601f840160051c820191505b818110156101f757600081556001016101e3565b50505b505050565b81516001600160401b0381111561021857610218610054565b61022c816102268454610176565b846101b0565b6020601f82116001811461026057600083156102485750848201515b600019600385901b1c1916600184901b1784556101f7565b600084815260208120601f198516915b828110156102905787850151825560209485019460019092019101610270565b50848210156102ae5786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b6109d3806102cc6000396000f3fe608060405234801561001057600080fd5b50600436106100be5760003560e01c806340c10f191161007657806395d89b411161005b57806395d89b4114610183578063a9059cbb1461018b578063dd62ed3e1461019e57600080fd5b806340c10f191461013857806370a082311461014d57600080fd5b806318160ddd116100a757806318160ddd1461010457806323b872dd14610116578063313ce5671461012957600080fd5b806306fdde03146100c3578063095ea7b3146100e1575b600080fd5b6100cb6101e4565b6040516100d891906107bf565b60405180910390f35b6100f46100ef366004610854565b610276565b60405190151581526020016100d8565b6002545b6040519081526020016100d8565b6100f461012436600461087e565b610290565b604051601281526020016100d8565b61014b610146366004610854565b6102b4565b005b61010861015b3660046108bb565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6100cb6102c2565b6100f4610199366004610854565b6102d1565b6101086101ac3660046108dd565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6060600380546101f390610910565b80601f016020809104026020016040519081016040528092919081815260200182805461021f90610910565b801561026c5780601f106102415761010080835404028352916020019161026c565b820191906000526020600020905b81548152906001019060200180831161024f57829003601f168201915b5050505050905090565b6000336102848185856102df565b60019150505b92915050565b60003361029e8582856102f1565b6102a98585856103c5565b506001949350505050565b6102be8282610470565b5050565b6060600480546101f390610910565b6000336102848185856103c5565b6102ec83838360016104cc565b505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146103bf57818110156103b0576040517ffb8f41b200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416600482015260248101829052604481018390526064015b60405180910390fd5b6103bf848484840360006104cc565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8316610415576040517f96c6fd1e000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff8216610465576040517fec442f05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b6102ec838383610614565b73ffffffffffffffffffffffffffffffffffffffff82166104c0576040517fec442f05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b6102be60008383610614565b73ffffffffffffffffffffffffffffffffffffffff841661051c576040517fe602df05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff831661056c576040517f94280d62000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260016020908152604080832093871683529290522082905580156103bf578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161060691815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff831661064c5780600260008282546106419190610963565b909155506106fe9050565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260208190526040902054818110156106d2576040517fe450d38c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8516600482015260248101829052604481018390526064016103a7565b73ffffffffffffffffffffffffffffffffffffffff841660009081526020819052604090209082900390555b73ffffffffffffffffffffffffffffffffffffffff821661072757600280548290039055610753565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090208054820190555b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516107b291815260200190565b60405180910390a3505050565b602081526000825180602084015260005b818110156107ed57602081860181015160408684010152016107d0565b5060006040828501015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011684010191505092915050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461084f57600080fd5b919050565b6000806040838503121561086757600080fd5b6108708361082b565b946020939093013593505050565b60008060006060848603121561089357600080fd5b61089c8461082b565b92506108aa6020850161082b565b929592945050506040919091013590565b6000602082840312156108cd57600080fd5b6108d68261082b565b9392505050565b600080604083850312156108f057600080fd5b6108f98361082b565b91506109076020840161082b565b90509250929050565b600181811c9082168061092457607f821691505b60208210810361095d577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b8082018082111561028a577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea26469706673582212207e804ca539d49155d2b6bc19268ce22f9f857027c75247d69fb0d56a089c93d464736f6c634300081a003360a060405234801561001057600080fd5b506040516116fe3803806116fe83398101604081905261002f916101e5565b60016000556002805460ff191690556001600160a01b038316158061005b57506001600160a01b038216155b8061006d57506001600160a01b038116155b1561008b5760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b0383166080526100a3600082610134565b506100ce7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a82610134565b506100f97f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e483610134565b506101126000805160206116de83398151915282610134565b5061012b6000805160206116de83398151915283610134565b50505050610228565b60008281526001602090815260408083206001600160a01b038516845290915281205460ff166101bf5760008381526001602081815260408084206001600160a01b0387168086529252808420805460ff19169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45060016101c3565b5060005b92915050565b80516001600160a01b03811681146101e057600080fd5b919050565b6000806000606084860312156101fa57600080fd5b610203846101c9565b9250610211602085016101c9565b915061021f604085016101c9565b90509250925092565b60805161147f61025f6000396000818161019e0152818161050001528181610562015281816108f70152610959015261147f6000f3fe608060405234801561001057600080fd5b506004361061016c5760003560e01c806385f438c1116100cd578063c8a0236211610081578063d936547e11610066578063d936547e14610355578063d9caed1214610378578063e63ab1e91461038b57600080fd5b8063c8a023621461032f578063d547741f1461034257600080fd5b80639a590427116100b25780639a590427146103015780639b19251a14610314578063a217fddf1461032757600080fd5b806385f438c11461029457806391d14854146102bb57600080fd5b806336568abe11610124578063570618e111610109578063570618e11461025a5780635c975abb146102815780638456cb591461028c57600080fd5b806336568abe1461023f5780633f4ba83a1461025257600080fd5b806321fc65f21161015557806321fc65f2146101e5578063248a9ca3146101fa5780632f2ff15d1461022c57600080fd5b806301ffc9a714610171578063116191b614610199575b600080fd5b61018461017f36600461118a565b6103b2565b60405190151581526020015b60405180910390f35b6101c07f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610190565b6101f86101f33660046111f5565b61044b565b005b61021e610208366004611292565b6000908152600160208190526040909120015490565b604051908152602001610190565b6101f861023a3660046112ab565b61064c565b6101f861024d3660046112ab565b610678565b6101f86106d6565b61021e7f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a81565b60025460ff16610184565b6101f861070b565b61021e7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b6101846102c93660046112ab565b600091825260016020908152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b6101f861030f3660046112d7565b61073d565b6101f86103223660046112d7565b6107be565b61021e600081565b6101f861033d3660046111f5565b610842565b6101f86103503660046112ab565b610a29565b6101846103633660046112d7565b60036020526000908152604090205460ff1681565b6101f86103863660046112f2565b610a4f565b61021e7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061044557507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b610453610b7b565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461047d81610bbe565b610485610bc8565b73ffffffffffffffffffffffffffffffffffffffff861660009081526003602052604090205460ff166104e4576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61052573ffffffffffffffffffffffffffffffffffffffff87167f000000000000000000000000000000000000000000000000000000000000000086610c07565b6040517f5131ab5900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690635131ab599061059f9089908990899089908990600401611378565b600060405180830381600087803b1580156105b957600080fd5b505af11580156105cd573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167f85b5be9cf454e05e0bddf49315178102227c312078eefa3c00294fb4d912ae4e868686604051610632939291906113d5565b60405180910390a3506106456001600055565b5050505050565b6000828152600160208190526040909120015461066881610bbe565b6106728383610c94565b50505050565b73ffffffffffffffffffffffffffffffffffffffff811633146106c7576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6106d18282610d41565b505050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61070081610bbe565b610708610de2565b50565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61073581610bbe565b610708610e41565b7f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a61076781610bbe565b73ffffffffffffffffffffffffffffffffffffffff8216600081815260036020526040808220805460ff19169055517f51085ddf9ebdded84b76e829eb58c4078e4b5bdf97d9a94723f336039da467919190a25050565b7f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a6107e881610bbe565b73ffffffffffffffffffffffffffffffffffffffff8216600081815260036020526040808220805460ff19166001179055517faab7954e9d246b167ef88aeddad35209ca2489d95a8aeb59e288d9b19fae5a549190a25050565b61084a610b7b565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461087481610bbe565b61087c610bc8565b73ffffffffffffffffffffffffffffffffffffffff861660009081526003602052604090205460ff166108db576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61091c73ffffffffffffffffffffffffffffffffffffffff87167f000000000000000000000000000000000000000000000000000000000000000086610c07565b6040517fb8969bd400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063b8969bd4906109969089908990899089908990600401611378565b600060405180830381600087803b1580156109b057600080fd5b505af11580156109c4573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fb9d4efa96044e5f5e03e696fa9ae2ff66911cc27e8a637c3627c75bc5b2241c8868686604051610632939291906113d5565b60008281526001602081905260409091200154610a4581610bbe565b6106728383610d41565b610a57610b7b565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e4610a8181610bbe565b610a89610bc8565b73ffffffffffffffffffffffffffffffffffffffff841660009081526003602052604090205460ff16610ae8576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610b0973ffffffffffffffffffffffffffffffffffffffff85168484610c07565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f9b1bfa7fa9ee420a16e124f794c35ac9f90472acc99140eb2f6447c714cad8eb84604051610b6891815260200190565b60405180910390a3506106d16001600055565b600260005403610bb7576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b6107088133610e7e565b60025460ff1615610c05576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6040805173ffffffffffffffffffffffffffffffffffffffff8416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb000000000000000000000000000000000000000000000000000000001790526106d1908490610f0f565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff16610d3957600083815260016020818152604080842073ffffffffffffffffffffffffffffffffffffffff87168086529252808420805460ff19169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a4506001610445565b506000610445565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff1615610d3957600083815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff86168085529252808320805460ff1916905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a4506001610445565b610dea610fa5565b6002805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b610e49610bc8565b6002805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258610e173390565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16610f0b576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82166004820152602481018390526044015b60405180910390fd5b5050565b6000610f3173ffffffffffffffffffffffffffffffffffffffff841683610fe1565b90508051600014158015610f56575080806020019051810190610f5491906113f8565b155b156106d1576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84166004820152602401610f02565b60025460ff16610c05576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6060610fef83836000610ff6565b9392505050565b606081471015611034576040517fcd786059000000000000000000000000000000000000000000000000000000008152306004820152602401610f02565b6000808573ffffffffffffffffffffffffffffffffffffffff16848660405161105d919061141a565b60006040518083038185875af1925050503d806000811461109a576040519150601f19603f3d011682016040523d82523d6000602084013e61109f565b606091505b50915091506110af8683836110b9565b9695505050505050565b6060826110ce576110c982611148565b610fef565b81511580156110f2575073ffffffffffffffffffffffffffffffffffffffff84163b155b15611141576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85166004820152602401610f02565b5080610fef565b8051156111585780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006020828403121561119c57600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610fef57600080fd5b803573ffffffffffffffffffffffffffffffffffffffff811681146111f057600080fd5b919050565b60008060008060006080868803121561120d57600080fd5b611216866111cc565b9450611224602087016111cc565b935060408601359250606086013567ffffffffffffffff81111561124757600080fd5b8601601f8101881361125857600080fd5b803567ffffffffffffffff81111561126f57600080fd5b88602082840101111561128157600080fd5b959894975092955050506020019190565b6000602082840312156112a457600080fd5b5035919050565b600080604083850312156112be57600080fd5b823591506112ce602084016111cc565b90509250929050565b6000602082840312156112e957600080fd5b610fef826111cc565b60008060006060848603121561130757600080fd5b611310846111cc565b925061131e602085016111cc565b929592945050506040919091013590565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff8616815273ffffffffffffffffffffffffffffffffffffffff851660208201528360408201526080606082015260006113ca60808301848661132f565b979650505050505050565b8381526040602082015260006113ef60408301848661132f565b95945050505050565b60006020828403121561140a57600080fd5b81518015158114610fef57600080fd5b6000825160005b8181101561143b5760208186018101518583015201611421565b50600092019182525091905056fea26469706673582212202f3991d39315b7c0e5ef6fd88336a0f791f8e1cce0a70cb66f2c4c9404215ae364736f6c634300081a00338619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a"; type GatewayEVMEchidnaTestConstructorParams = | [signer?: Signer] diff --git a/v2/typechain-types/factories/GatewayEVM__factory.ts b/v2/typechain-types/factories/GatewayEVM__factory.ts index ee0a1ace..b24e2824 100644 --- a/v2/typechain-types/factories/GatewayEVM__factory.ts +++ b/v2/typechain-types/factories/GatewayEVM__factory.ts @@ -1020,7 +1020,7 @@ const _abi = [ ] as const; const _bytecode = - "0x60a06040523060805234801561001457600080fd5b5061001d610022565b6100d4565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100725760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146100d15780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b60805161327e6100fd60003960008181611f0601528181611f2f01526123bb015261327e6000f3fe6080604052600436106101e35760003560e01c80635c975abb11610102578063ae7a3a6f11610095578063dda79b7511610064578063dda79b751461062e578063e63ab1e91461064e578063f340fa0114610682578063f45346dc1461069557600080fd5b8063ae7a3a6f146105ae578063b8969bd4146105ce578063c0c53b8b146105ee578063d547741f1461060e57600080fd5b806391d14854116100d157806391d14854146104b7578063a217fddf1461051c578063a783c78914610531578063ad3cb1cc1461056557600080fd5b80635c975abb146104175780635d62c8601461044e5780638456cb59146104825780638c6f037f1461049757600080fd5b806335c018db1161017a5780635131ab59116101495780635131ab59146103a257806352d1902d146103c257806357bec62f146103d75780635b112591146103f757600080fd5b806335c018db1461034757806336568abe1461035a5780633f4ba83a1461037a5780634f1ef2861461038f57600080fd5b806321e093b1116101b657806321e093b11461027f578063248a9ca3146102b757806329c59b5d146103145780632f2ff15d1461032757600080fd5b806301ffc9a7146101e857806310188aef1461021d5780631b8b921d1461023f5780631cff79cd1461025f575b600080fd5b3480156101f457600080fd5b50610208610203366004612cf1565b6106b5565b60405190151581526020015b60405180910390f35b34801561022957600080fd5b5061023d610238366004612d4f565b61074e565b005b34801561024b57600080fd5b5061023d61025a366004612db3565b610842565b61027261026d366004612db3565b6108cd565b6040516102149190612e74565b34801561028b57600080fd5b5060035461029f906001600160a01b031681565b6040516001600160a01b039091168152602001610214565b3480156102c357600080fd5b506103066102d2366004612e87565b60009081527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052604090206001015490565b604051908152602001610214565b61023d610322366004612db3565b6109d0565b34801561033357600080fd5b5061023d610342366004612ea0565b610b63565b61023d610355366004612db3565b610bad565b34801561036657600080fd5b5061023d610375366004612ea0565b610d9c565b34801561038657600080fd5b5061023d610de8565b61023d61039d366004612efb565b610e1d565b3480156103ae57600080fd5b5061023d6103bd366004613002565b610e3c565b3480156103ce57600080fd5b50610306611155565b3480156103e357600080fd5b5060025461029f906001600160a01b031681565b34801561040357600080fd5b5060015461029f906001600160a01b031681565b34801561042357600080fd5b507fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff16610208565b34801561045a57600080fd5b506103067f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b981565b34801561048e57600080fd5b5061023d611184565b3480156104a357600080fd5b5061023d6104b2366004613071565b6111b6565b3480156104c357600080fd5b506102086104d2366004612ea0565b60009182527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408084206001600160a01b0393909316845291905290205460ff1690565b34801561052857600080fd5b50610306600081565b34801561053d57600080fd5b506103067f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb81565b34801561057157600080fd5b506102726040518060400160405280600581526020017f352e302e3000000000000000000000000000000000000000000000000000000081525081565b3480156105ba57600080fd5b5061023d6105c9366004612d4f565b6112cc565b3480156105da57600080fd5b5061023d6105e9366004613002565b6113c0565b3480156105fa57600080fd5b5061023d6106093660046130c3565b611579565b34801561061a57600080fd5b5061023d610629366004612ea0565b61182e565b34801561063a57600080fd5b5060005461029f906001600160a01b031681565b34801561065a57600080fd5b506103067f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b61023d610690366004612d4f565b611872565b3480156106a157600080fd5b5061023d6106b0366004613106565b611a07565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061074857507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b600061075981611b02565b6001600160a01b038216610799576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002546001600160a01b0316156107dc576040517f0c8dc01600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6108067f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b983611b0c565b5050600280547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b61084a611bf9565b610852611c57565b826001600160a01b0316336001600160a01b03167f2a21062ee9199c2e205622999eeb7c3da73153674f36a0acd3f74fa6af67bde38484604051610897929190613182565b60405180910390a36108c860017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b505050565b60607f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb6108f981611b02565b610901611bf9565b610909611c57565b6001600160a01b038516610949576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610956868686611cfe565b9050856001600160a01b03167fcaf938de11c367272220bfd1d2baa99ca46665e7bc4d85f00adb51b90fe1fa9f3487876040516109959392919061319e565b60405180910390a291506109c860017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b509392505050565b6109d8611bf9565b6109e0611c57565b34600003610a1a576040517f7671265e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038316610a5a576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546040516000916001600160a01b03169034908381818185875af1925050503d8060008114610aa7576040519150601f19603f3d011682016040523d82523d6000602084013e610aac565b606091505b5050905080610ae7576040517f79cacff100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b836001600160a01b0316336001600160a01b03167f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a43460008787604051610b3194939291906131b8565b60405180910390a3506108c860017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020526040902060010154610b9d81611b02565b610ba78383611b0c565b50505050565b7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb610bd781611b02565b610bdf611bf9565b610be7611c57565b6001600160a01b038416610c27576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000846001600160a01b03163460405160006040518083038185875af1925050503d8060008114610c74576040519150601f19603f3d011682016040523d82523d6000602084013e610c79565b606091505b5050905080610cb4576040517facfdb44400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f8fcaa0b50000000000000000000000000000000000000000000000000000000081526001600160a01b03861690638fcaa0b590610cfb9087908790600401613182565b600060405180830381600087803b158015610d1557600080fd5b505af1158015610d29573d6000803e3d6000fd5b50505050846001600160a01b03167fd5d7616b1678354a0dea9d7e57e6a090bff5babe9f8d6381fdbad16e89ba311c348686604051610d6a9392919061319e565b60405180910390a250610ba760017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b6001600160a01b0381163314610dde576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6108c88282611da7565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610e1281611b02565b610e1a611e6b565b50565b610e25611efb565b610e2e82611fcb565b610e388282611fd6565b5050565b7f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b9610e6681611b02565b610e6e611bf9565b610e76611c57565b83600003610eb0576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038516610ef0576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610efa86866120fa565b610f30576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b0386811660048301526024820186905287169063095ea7b3906044016020604051808303816000875af1158015610f98573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fbc91906131e1565b610ff2576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610ffd858484611cfe565b5061100886866120fa565b61103e576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201526000906001600160a01b038816906370a0823190602401602060405180830381865afa15801561109e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110c29190613203565b905080156110d4576110d4878261218a565b856001600160a01b0316876001600160a01b03167f29c40793bffd84cb810179f15d1ceec72bc7f0785514c668ba36645cf99b738287878760405161111b9392919061319e565b60405180910390a35061114d60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b505050505050565b600061115f6123b0565b507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc90565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a6111ae81611b02565b610e1a612412565b6111be611bf9565b6111c6611c57565b83600003611200576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038516611240576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61124b33848661248b565b846001600160a01b0316336001600160a01b03167f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a48686868660405161129494939291906131b8565b60405180910390a36112c560017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b5050505050565b60006112d781611b02565b6001600160a01b038216611317576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000546001600160a01b03161561135a576040517fb337f37800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6113847f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b983611b0c565b5050600080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b7f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b96113ea81611b02565b6113f2611bf9565b6113fa611c57565b83600003611434576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038516611474576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6114886001600160a01b03871686866126d1565b6040517f8fcaa0b50000000000000000000000000000000000000000000000000000000081526001600160a01b03861690638fcaa0b5906114cf9086908690600401613182565b600060405180830381600087803b1580156114e957600080fd5b505af11580156114fd573d6000803e3d6000fd5b50505050846001600160a01b0316866001600160a01b03167f723fc7be2448075379e4fdf1e6bf5fead954d2668d2da05dcb44ccfec4beeda78686866040516115489392919061319e565b60405180910390a361114d60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156115c45750825b905060008267ffffffffffffffff1660011480156115e15750303b155b9050811580156115ef575080155b15611626576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84547fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000016600117855583156116875784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff16680100000000000000001785555b6001600160a01b03881615806116a457506001600160a01b038716155b156116db576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6116e3612745565b6116eb61274d565b6116f3612745565b6116fb61275d565b611706600087611b0c565b506117317f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a87611b0c565b50600180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b038a1617905561178f7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb89611b0c565b50600380547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03891617905583156118245784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b5050505050505050565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052604090206001015461186881611b02565b610ba78383611da7565b61187a611bf9565b611882611c57565b346000036118bc576040517f7671265e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b0381166118fc576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546040516000916001600160a01b03169034908381818185875af1925050503d8060008114611949576040519150601f19603f3d011682016040523d82523d6000602084013e61194e565b606091505b5050905080611989576040517f79cacff100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60408051348152600060208201819052606082840181905282015290516001600160a01b0384169133917f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a49181900360800190a350610e1a60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b611a0f611bf9565b611a17611c57565b81600003611a51576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038316611a91576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611a9c33828461248b565b826001600160a01b0316336001600160a01b03167f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a484846040516108979291909182526001600160a01b0316602082015260606040820181905260009082015260800190565b610e1a813361276d565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff16611bef576000848152602082815260408083206001600160a01b0387168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055611ba53390565b6001600160a01b0316836001600160a01b0316857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a46001915050610748565b6000915050610748565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff1615611c55576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0080547ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01611cd2576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60029055565b60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b6060600080856001600160a01b0316348686604051611d1e92919061321c565b60006040518083038185875af1925050503d8060008114611d5b576040519150601f19603f3d011682016040523d82523d6000602084013e611d60565b606091505b509150915081611d9c576040517facfdb44400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b9150505b9392505050565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff1615611bef576000848152602082815260408083206001600160a01b038716808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339287917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a46001915050610748565b611e736127fa565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001681557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a150565b306001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161480611f9457507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316611f887f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b6001600160a01b031614155b15611c55576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610e3881611b02565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa92505050801561204e575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820190925261204b91810190613203565b60015b612094576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b03831660048201526024015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc81146120f0576040517faa1d49a40000000000000000000000000000000000000000000000000000000081526004810182905260240161208b565b6108c88383612855565b6040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b038281166004830152600060248301819052919084169063095ea7b3906044016020604051808303816000875af1158015612166573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611da091906131e1565b6003546001600160a01b03908116908316036122d9576002546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152602481018390529083169063095ea7b3906044016020604051808303816000875af115801561220c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061223091906131e1565b612266576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002546040517f743e0c9b000000000000000000000000000000000000000000000000000000008152600481018390526001600160a01b039091169063743e0c9b90602401600060405180830381600087803b1580156122c557600080fd5b505af115801561114d573d6000803e3d6000fd5b6000546040517fd936547e0000000000000000000000000000000000000000000000000000000081526001600160a01b0384811660048301529091169063d936547e90602401602060405180830381865afa15801561233c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061236091906131e1565b612396576040517fac2175f100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600054610e38906001600160a01b038481169116836126d1565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614611c55576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61241a611bf9565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011781557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25833611edd565b6003546001600160a01b03908116908316036125f8576124b66001600160a01b0383168430846128ab565b6002546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152602481018390529083169063095ea7b3906044016020604051808303816000875af1158015612522573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061254691906131e1565b61257c576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002546040517f743e0c9b000000000000000000000000000000000000000000000000000000008152600481018390526001600160a01b039091169063743e0c9b90602401600060405180830381600087803b1580156125db57600080fd5b505af11580156125ef573d6000803e3d6000fd5b50505050505050565b6000546040517fd936547e0000000000000000000000000000000000000000000000000000000081526001600160a01b0384811660048301529091169063d936547e90602401602060405180830381865afa15801561265b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061267f91906131e1565b6126b5576040517fac2175f100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000546108c8906001600160a01b0384811691869116846128ab565b6040516001600160a01b038381166024830152604482018390526108c891859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506128e4565b611c55612960565b612755612960565b611c556129c7565b612765612960565b611c556129cf565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408083206001600160a01b038516845290915290205460ff16610e38576040517fe2517d3f0000000000000000000000000000000000000000000000000000000081526001600160a01b03821660048201526024810183905260440161208b565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff16611c55576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61285e82612a20565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a28051156128a3576108c88282612ac8565b610e38612b3e565b6040516001600160a01b038481166024830152838116604483015260648201839052610ba79186918216906323b872dd906084016126fe565b60006128f96001600160a01b03841683612b76565b9050805160001415801561291e57508080602001905181019061291c91906131e1565b155b156108c8576040517f5274afe70000000000000000000000000000000000000000000000000000000081526001600160a01b038416600482015260240161208b565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff16611c55576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611cd8612960565b6129d7612960565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055565b806001600160a01b03163b600003612a6f576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b038216600482015260240161208b565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6060600080846001600160a01b031684604051612ae5919061322c565b600060405180830381855af49150503d8060008114612b20576040519150601f19603f3d011682016040523d82523d6000602084013e612b25565b606091505b5091509150612b35858383612b84565b95945050505050565b3415611c55576040517fb398979f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6060611da083836000612bf9565b606082612b9957612b9482612caf565b611da0565b8151158015612bb057506001600160a01b0384163b155b15612bf2576040517f9996b3150000000000000000000000000000000000000000000000000000000081526001600160a01b038516600482015260240161208b565b5080611da0565b606081471015612c37576040517fcd78605900000000000000000000000000000000000000000000000000000000815230600482015260240161208b565b600080856001600160a01b03168486604051612c53919061322c565b60006040518083038185875af1925050503d8060008114612c90576040519150601f19603f3d011682016040523d82523d6000602084013e612c95565b606091505b5091509150612ca5868383612b84565b9695505050505050565b805115612cbf5780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060208284031215612d0357600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114611da057600080fd5b80356001600160a01b0381168114612d4a57600080fd5b919050565b600060208284031215612d6157600080fd5b611da082612d33565b60008083601f840112612d7c57600080fd5b50813567ffffffffffffffff811115612d9457600080fd5b602083019150836020828501011115612dac57600080fd5b9250929050565b600080600060408486031215612dc857600080fd5b612dd184612d33565b9250602084013567ffffffffffffffff811115612ded57600080fd5b612df986828701612d6a565b9497909650939450505050565b60005b83811015612e21578181015183820152602001612e09565b50506000910152565b60008151808452612e42816020860160208601612e06565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000611da06020830184612e2a565b600060208284031215612e9957600080fd5b5035919050565b60008060408385031215612eb357600080fd5b82359150612ec360208401612d33565b90509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60008060408385031215612f0e57600080fd5b612f1783612d33565b9150602083013567ffffffffffffffff811115612f3357600080fd5b8301601f81018513612f4457600080fd5b803567ffffffffffffffff811115612f5e57612f5e612ecc565b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8501160116810181811067ffffffffffffffff82111715612fca57612fca612ecc565b604052818152828201602001871015612fe257600080fd5b816020840160208301376000602083830101528093505050509250929050565b60008060008060006080868803121561301a57600080fd5b61302386612d33565b945061303160208701612d33565b935060408601359250606086013567ffffffffffffffff81111561305457600080fd5b61306088828901612d6a565b969995985093965092949392505050565b60008060008060006080868803121561308957600080fd5b61309286612d33565b9450602086013593506130a760408701612d33565b9250606086013567ffffffffffffffff81111561305457600080fd5b6000806000606084860312156130d857600080fd5b6130e184612d33565b92506130ef60208501612d33565b91506130fd60408501612d33565b90509250925092565b60008060006060848603121561311b57600080fd5b61312484612d33565b9250602084013591506130fd60408501612d33565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b602081526000613196602083018486613139565b949350505050565b838152604060208201526000612b35604083018486613139565b8481526001600160a01b0384166020820152606060408201526000612ca5606083018486613139565b6000602082840312156131f357600080fd5b81518015158114611da057600080fd5b60006020828403121561321557600080fd5b5051919050565b8183823760009101908152919050565b6000825161323e818460208701612e06565b919091019291505056fea26469706673582212200a52884ba895ee02e7bedb4efa2b0b5651b56a4a1ec71f83b2704f710c1e97c664736f6c634300081a0033"; + "0x60a06040523060805234801561001457600080fd5b5061001d610022565b6100d4565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100725760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146100d15780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b6080516132be6100fd60003960008181611f4601528181611f6f01526123fb01526132be6000f3fe6080604052600436106101e35760003560e01c80635c975abb11610102578063ae7a3a6f11610095578063dda79b7511610064578063dda79b751461062e578063e63ab1e91461064e578063f340fa0114610682578063f45346dc1461069557600080fd5b8063ae7a3a6f146105ae578063b8969bd4146105ce578063c0c53b8b146105ee578063d547741f1461060e57600080fd5b806391d14854116100d157806391d14854146104b7578063a217fddf1461051c578063a783c78914610531578063ad3cb1cc1461056557600080fd5b80635c975abb146104175780635d62c8601461044e5780638456cb59146104825780638c6f037f1461049757600080fd5b806335c018db1161017a5780635131ab59116101495780635131ab59146103a257806352d1902d146103c257806357bec62f146103d75780635b112591146103f757600080fd5b806335c018db1461034757806336568abe1461035a5780633f4ba83a1461037a5780634f1ef2861461038f57600080fd5b806321e093b1116101b657806321e093b11461027f578063248a9ca3146102b757806329c59b5d146103145780632f2ff15d1461032757600080fd5b806301ffc9a7146101e857806310188aef1461021d5780631b8b921d1461023f5780631cff79cd1461025f575b600080fd5b3480156101f457600080fd5b50610208610203366004612d31565b6106b5565b60405190151581526020015b60405180910390f35b34801561022957600080fd5b5061023d610238366004612d8f565b61074e565b005b34801561024b57600080fd5b5061023d61025a366004612df3565b610842565b61027261026d366004612df3565b61090d565b6040516102149190612eb4565b34801561028b57600080fd5b5060035461029f906001600160a01b031681565b6040516001600160a01b039091168152602001610214565b3480156102c357600080fd5b506103066102d2366004612ec7565b60009081527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052604090206001015490565b604051908152602001610214565b61023d610322366004612df3565b610a10565b34801561033357600080fd5b5061023d610342366004612ee0565b610ba3565b61023d610355366004612df3565b610bed565b34801561036657600080fd5b5061023d610375366004612ee0565b610ddc565b34801561038657600080fd5b5061023d610e28565b61023d61039d366004612f3b565b610e5d565b3480156103ae57600080fd5b5061023d6103bd366004613042565b610e7c565b3480156103ce57600080fd5b50610306611195565b3480156103e357600080fd5b5060025461029f906001600160a01b031681565b34801561040357600080fd5b5060015461029f906001600160a01b031681565b34801561042357600080fd5b507fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff16610208565b34801561045a57600080fd5b506103067f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b981565b34801561048e57600080fd5b5061023d6111c4565b3480156104a357600080fd5b5061023d6104b23660046130b1565b6111f6565b3480156104c357600080fd5b506102086104d2366004612ee0565b60009182527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408084206001600160a01b0393909316845291905290205460ff1690565b34801561052857600080fd5b50610306600081565b34801561053d57600080fd5b506103067f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb81565b34801561057157600080fd5b506102726040518060400160405280600581526020017f352e302e3000000000000000000000000000000000000000000000000000000081525081565b3480156105ba57600080fd5b5061023d6105c9366004612d8f565b61130c565b3480156105da57600080fd5b5061023d6105e9366004613042565b611400565b3480156105fa57600080fd5b5061023d610609366004613103565b6115b9565b34801561061a57600080fd5b5061023d610629366004612ee0565b61186e565b34801561063a57600080fd5b5060005461029f906001600160a01b031681565b34801561065a57600080fd5b506103067f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b61023d610690366004612d8f565b6118b2565b3480156106a157600080fd5b5061023d6106b0366004613146565b611a47565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061074857507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b600061075981611b42565b6001600160a01b038216610799576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002546001600160a01b0316156107dc576040517f0c8dc01600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6108067f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b983611b4c565b5050600280547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b61084a611c39565b610852611c97565b6001600160a01b038316610892576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b826001600160a01b0316336001600160a01b03167f2a21062ee9199c2e205622999eeb7c3da73153674f36a0acd3f74fa6af67bde384846040516108d79291906131c2565b60405180910390a361090860017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b505050565b60607f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb61093981611b42565b610941611c39565b610949611c97565b6001600160a01b038516610989576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610996868686611d3e565b9050856001600160a01b03167fcaf938de11c367272220bfd1d2baa99ca46665e7bc4d85f00adb51b90fe1fa9f3487876040516109d5939291906131de565b60405180910390a29150610a0860017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b509392505050565b610a18611c39565b610a20611c97565b34600003610a5a576040517f7671265e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038316610a9a576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546040516000916001600160a01b03169034908381818185875af1925050503d8060008114610ae7576040519150601f19603f3d011682016040523d82523d6000602084013e610aec565b606091505b5050905080610b27576040517f79cacff100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b836001600160a01b0316336001600160a01b03167f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a43460008787604051610b7194939291906131f8565b60405180910390a35061090860017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020526040902060010154610bdd81611b42565b610be78383611b4c565b50505050565b7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb610c1781611b42565b610c1f611c39565b610c27611c97565b6001600160a01b038416610c67576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000846001600160a01b03163460405160006040518083038185875af1925050503d8060008114610cb4576040519150601f19603f3d011682016040523d82523d6000602084013e610cb9565b606091505b5050905080610cf4576040517facfdb44400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f8fcaa0b50000000000000000000000000000000000000000000000000000000081526001600160a01b03861690638fcaa0b590610d3b90879087906004016131c2565b600060405180830381600087803b158015610d5557600080fd5b505af1158015610d69573d6000803e3d6000fd5b50505050846001600160a01b03167fd5d7616b1678354a0dea9d7e57e6a090bff5babe9f8d6381fdbad16e89ba311c348686604051610daa939291906131de565b60405180910390a250610be760017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b6001600160a01b0381163314610e1e576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6109088282611de7565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610e5281611b42565b610e5a611eab565b50565b610e65611f3b565b610e6e8261200b565b610e788282612016565b5050565b7f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b9610ea681611b42565b610eae611c39565b610eb6611c97565b83600003610ef0576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038516610f30576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610f3a868661213a565b610f70576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b0386811660048301526024820186905287169063095ea7b3906044016020604051808303816000875af1158015610fd8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ffc9190613221565b611032576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61103d858484611d3e565b50611048868661213a565b61107e576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201526000906001600160a01b038816906370a0823190602401602060405180830381865afa1580156110de573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111029190613243565b905080156111145761111487826121ca565b856001600160a01b0316876001600160a01b03167f29c40793bffd84cb810179f15d1ceec72bc7f0785514c668ba36645cf99b738287878760405161115b939291906131de565b60405180910390a35061118d60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b505050505050565b600061119f6123f0565b507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc90565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a6111ee81611b42565b610e5a612452565b6111fe611c39565b611206611c97565b83600003611240576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038516611280576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61128b3384866124cb565b846001600160a01b0316336001600160a01b03167f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a4868686866040516112d494939291906131f8565b60405180910390a361130560017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b5050505050565b600061131781611b42565b6001600160a01b038216611357576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000546001600160a01b03161561139a576040517fb337f37800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6113c47f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b983611b4c565b5050600080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b7f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b961142a81611b42565b611432611c39565b61143a611c97565b83600003611474576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b0385166114b4576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6114c86001600160a01b0387168686612711565b6040517f8fcaa0b50000000000000000000000000000000000000000000000000000000081526001600160a01b03861690638fcaa0b59061150f90869086906004016131c2565b600060405180830381600087803b15801561152957600080fd5b505af115801561153d573d6000803e3d6000fd5b50505050846001600160a01b0316866001600160a01b03167f723fc7be2448075379e4fdf1e6bf5fead954d2668d2da05dcb44ccfec4beeda7868686604051611588939291906131de565b60405180910390a361118d60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156116045750825b905060008267ffffffffffffffff1660011480156116215750303b155b90508115801561162f575080155b15611666576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84547fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000016600117855583156116c75784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff16680100000000000000001785555b6001600160a01b03881615806116e457506001600160a01b038716155b1561171b576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611723612785565b61172b61278d565b611733612785565b61173b61279d565b611746600087611b4c565b506117717f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a87611b4c565b50600180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b038a161790556117cf7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb89611b4c565b50600380547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03891617905583156118645784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b5050505050505050565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b62680060205260409020600101546118a881611b42565b610be78383611de7565b6118ba611c39565b6118c2611c97565b346000036118fc576040517f7671265e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03811661193c576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546040516000916001600160a01b03169034908381818185875af1925050503d8060008114611989576040519150601f19603f3d011682016040523d82523d6000602084013e61198e565b606091505b50509050806119c9576040517f79cacff100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60408051348152600060208201819052606082840181905282015290516001600160a01b0384169133917f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a49181900360800190a350610e5a60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b611a4f611c39565b611a57611c97565b81600003611a91576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038316611ad1576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611adc3382846124cb565b826001600160a01b0316336001600160a01b03167f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a484846040516108d79291909182526001600160a01b0316602082015260606040820181905260009082015260800190565b610e5a81336127ad565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff16611c2f576000848152602082815260408083206001600160a01b0387168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055611be53390565b6001600160a01b0316836001600160a01b0316857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a46001915050610748565b6000915050610748565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff1615611c95576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0080547ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01611d12576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60029055565b60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b6060600080856001600160a01b0316348686604051611d5e92919061325c565b60006040518083038185875af1925050503d8060008114611d9b576040519150601f19603f3d011682016040523d82523d6000602084013e611da0565b606091505b509150915081611ddc576040517facfdb44400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b9150505b9392505050565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff1615611c2f576000848152602082815260408083206001600160a01b038716808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339287917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a46001915050610748565b611eb361283a565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001681557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a150565b306001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161480611fd457507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316611fc87f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b6001600160a01b031614155b15611c95576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610e7881611b42565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa92505050801561208e575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820190925261208b91810190613243565b60015b6120d4576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b03831660048201526024015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8114612130576040517faa1d49a4000000000000000000000000000000000000000000000000000000008152600481018290526024016120cb565b6109088383612895565b6040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b038281166004830152600060248301819052919084169063095ea7b3906044016020604051808303816000875af11580156121a6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611de09190613221565b6003546001600160a01b0390811690831603612319576002546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152602481018390529083169063095ea7b3906044016020604051808303816000875af115801561224c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122709190613221565b6122a6576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002546040517f743e0c9b000000000000000000000000000000000000000000000000000000008152600481018390526001600160a01b039091169063743e0c9b90602401600060405180830381600087803b15801561230557600080fd5b505af115801561118d573d6000803e3d6000fd5b6000546040517fd936547e0000000000000000000000000000000000000000000000000000000081526001600160a01b0384811660048301529091169063d936547e90602401602060405180830381865afa15801561237c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123a09190613221565b6123d6576040517fac2175f100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600054610e78906001600160a01b03848116911683612711565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614611c95576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61245a611c39565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011781557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25833611f1d565b6003546001600160a01b0390811690831603612638576124f66001600160a01b0383168430846128eb565b6002546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152602481018390529083169063095ea7b3906044016020604051808303816000875af1158015612562573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125869190613221565b6125bc576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002546040517f743e0c9b000000000000000000000000000000000000000000000000000000008152600481018390526001600160a01b039091169063743e0c9b90602401600060405180830381600087803b15801561261b57600080fd5b505af115801561262f573d6000803e3d6000fd5b50505050505050565b6000546040517fd936547e0000000000000000000000000000000000000000000000000000000081526001600160a01b0384811660048301529091169063d936547e90602401602060405180830381865afa15801561269b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126bf9190613221565b6126f5576040517fac2175f100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600054610908906001600160a01b0384811691869116846128eb565b6040516001600160a01b0383811660248301526044820183905261090891859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050612924565b611c956129a0565b6127956129a0565b611c95612a07565b6127a56129a0565b611c95612a0f565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408083206001600160a01b038516845290915290205460ff16610e78576040517fe2517d3f0000000000000000000000000000000000000000000000000000000081526001600160a01b0382166004820152602481018390526044016120cb565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff16611c95576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61289e82612a60565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a28051156128e3576109088282612b08565b610e78612b7e565b6040516001600160a01b038481166024830152838116604483015260648201839052610be79186918216906323b872dd9060840161273e565b60006129396001600160a01b03841683612bb6565b9050805160001415801561295e57508080602001905181019061295c9190613221565b155b15610908576040517f5274afe70000000000000000000000000000000000000000000000000000000081526001600160a01b03841660048201526024016120cb565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff16611c95576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611d186129a0565b612a176129a0565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055565b806001600160a01b03163b600003612aaf576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b03821660048201526024016120cb565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6060600080846001600160a01b031684604051612b25919061326c565b600060405180830381855af49150503d8060008114612b60576040519150601f19603f3d011682016040523d82523d6000602084013e612b65565b606091505b5091509150612b75858383612bc4565b95945050505050565b3415611c95576040517fb398979f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6060611de083836000612c39565b606082612bd957612bd482612cef565b611de0565b8151158015612bf057506001600160a01b0384163b155b15612c32576040517f9996b3150000000000000000000000000000000000000000000000000000000081526001600160a01b03851660048201526024016120cb565b5080611de0565b606081471015612c77576040517fcd7860590000000000000000000000000000000000000000000000000000000081523060048201526024016120cb565b600080856001600160a01b03168486604051612c93919061326c565b60006040518083038185875af1925050503d8060008114612cd0576040519150601f19603f3d011682016040523d82523d6000602084013e612cd5565b606091505b5091509150612ce5868383612bc4565b9695505050505050565b805115612cff5780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060208284031215612d4357600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114611de057600080fd5b80356001600160a01b0381168114612d8a57600080fd5b919050565b600060208284031215612da157600080fd5b611de082612d73565b60008083601f840112612dbc57600080fd5b50813567ffffffffffffffff811115612dd457600080fd5b602083019150836020828501011115612dec57600080fd5b9250929050565b600080600060408486031215612e0857600080fd5b612e1184612d73565b9250602084013567ffffffffffffffff811115612e2d57600080fd5b612e3986828701612daa565b9497909650939450505050565b60005b83811015612e61578181015183820152602001612e49565b50506000910152565b60008151808452612e82816020860160208601612e46565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000611de06020830184612e6a565b600060208284031215612ed957600080fd5b5035919050565b60008060408385031215612ef357600080fd5b82359150612f0360208401612d73565b90509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60008060408385031215612f4e57600080fd5b612f5783612d73565b9150602083013567ffffffffffffffff811115612f7357600080fd5b8301601f81018513612f8457600080fd5b803567ffffffffffffffff811115612f9e57612f9e612f0c565b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8501160116810181811067ffffffffffffffff8211171561300a5761300a612f0c565b60405281815282820160200187101561302257600080fd5b816020840160208301376000602083830101528093505050509250929050565b60008060008060006080868803121561305a57600080fd5b61306386612d73565b945061307160208701612d73565b935060408601359250606086013567ffffffffffffffff81111561309457600080fd5b6130a088828901612daa565b969995985093965092949392505050565b6000806000806000608086880312156130c957600080fd5b6130d286612d73565b9450602086013593506130e760408701612d73565b9250606086013567ffffffffffffffff81111561309457600080fd5b60008060006060848603121561311857600080fd5b61312184612d73565b925061312f60208501612d73565b915061313d60408501612d73565b90509250925092565b60008060006060848603121561315b57600080fd5b61316484612d73565b92506020840135915061313d60408501612d73565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b6020815260006131d6602083018486613179565b949350505050565b838152604060208201526000612b75604083018486613179565b8481526001600160a01b0384166020820152606060408201526000612ce5606083018486613179565b60006020828403121561323357600080fd5b81518015158114611de057600080fd5b60006020828403121561325557600080fd5b5051919050565b8183823760009101908152919050565b6000825161327e818460208701612e46565b919091019291505056fea26469706673582212207502c72fde83b46f559fca91354376f4a808a2aefc289286688b1a9d18fa9f3f64736f6c634300081a0033"; type GatewayEVMConstructorParams = | [signer?: Signer] diff --git a/v2/typechain-types/factories/GatewayZEVM__factory.ts b/v2/typechain-types/factories/GatewayZEVM__factory.ts index dfc665b2..dfeb6407 100644 --- a/v2/typechain-types/factories/GatewayZEVM__factory.ts +++ b/v2/typechain-types/factories/GatewayZEVM__factory.ts @@ -583,6 +583,11 @@ const _abi = [ type: "function", name: "withdraw", inputs: [ + { + name: "receiver", + type: "bytes", + internalType: "bytes", + }, { name: "amount", type: "uint256", @@ -629,6 +634,11 @@ const _abi = [ type: "function", name: "withdrawAndCall", inputs: [ + { + name: "receiver", + type: "bytes", + internalType: "bytes", + }, { name: "amount", type: "uint256", @@ -1031,7 +1041,7 @@ const _abi = [ ] as const; const _bytecode = - "0x60a06040523060805234801561001457600080fd5b5061001d610022565b6100d4565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100725760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146100d15780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b6080516132346100fd600039600081816123650152818161238e015261254601526132346000f3fe6080604052600436106101bb5760003560e01c80635af65967116100ec578063a217fddf1161008a578063c39aca3711610064578063c39aca3714610600578063d547741f14610620578063e63ab1e914610640578063f45346dc1461067457600080fd5b8063a217fddf14610575578063ad3cb1cc1461058a578063bcf7f32b146105e057600080fd5b80637993c1e0116100c65780637993c1e0146104bb57806380bd3d03146104db5780638456cb59146104fb57806391d148541461051057600080fd5b80635af65967146104445780635c975abb146104645780635d40e1781461049b57600080fd5b806336568abe11610159578063441a3e7011610133578063441a3e70146103dc578063485cc955146103fc5780634f1ef2861461041c57806352d1902d1461042f57600080fd5b806336568abe1461037f5780633ce4a5bc1461039f5780633f4ba83a146103c757600080fd5b806321e093b11161019557806321e093b1146102aa578063248a9ca3146102e25780632f2ff15d1461033f578063309f50041461035f57600080fd5b806301ffc9a714610235578063135390f91461026a57806321501a951461028a57600080fd5b36610230576101c8610694565b6000546001600160a01b031633148015906101f757503373735b14bb79463307aacbed86daf3322b1e6226ab14155b1561022e576040517f229930b200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b005b600080fd5b34801561024157600080fd5b50610255610250366004612a24565b6106f2565b60405190151581526020015b60405180910390f35b34801561027657600080fd5b5061022e610285366004612b3a565b61078b565b34801561029657600080fd5b5061022e6102a5366004612bf6565b6108f9565b3480156102b657600080fd5b506000546102ca906001600160a01b031681565b6040516001600160a01b039091168152602001610261565b3480156102ee57600080fd5b506103316102fd366004612c82565b60009081527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052604090206001015490565b604051908152602001610261565b34801561034b57600080fd5b5061022e61035a366004612c9b565b610ac6565b34801561036b57600080fd5b5061022e61037a366004612ccb565b610b10565b34801561038b57600080fd5b5061022e61039a366004612c9b565b610c7a565b3480156103ab57600080fd5b506102ca73735b14bb79463307aacbed86daf3322b1e6226ab81565b3480156103d357600080fd5b5061022e610cc6565b3480156103e857600080fd5b5061022e6103f7366004612d69565b610cfb565b34801561040857600080fd5b5061022e610417366004612d8b565b610e18565b61022e61042a366004612db9565b61106e565b34801561043b57600080fd5b50610331611089565b34801561045057600080fd5b5061022e61045f366004612ccb565b6110b8565b34801561047057600080fd5b507fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff16610255565b3480156104a757600080fd5b5061022e6104b6366004612e09565b6112c7565b3480156104c757600080fd5b5061022e6104d6366004612e7e565b611381565b3480156104e757600080fd5b5061022e6104f6366004612eb9565b6114f5565b34801561050757600080fd5b5061022e6115e1565b34801561051c57600080fd5b5061025561052b366004612c9b565b60009182527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408084206001600160a01b0393909316845291905290205460ff1690565b34801561058157600080fd5b50610331600081565b34801561059657600080fd5b506105d36040518060400160405280600581526020017f352e302e3000000000000000000000000000000000000000000000000000000081525081565b6040516102619190612f44565b3480156105ec57600080fd5b5061022e6105fb366004612ccb565b611613565b34801561060c57600080fd5b5061022e61061b366004612ccb565b611743565b34801561062c57600080fd5b5061022e61063b366004612c9b565b611952565b34801561064c57600080fd5b506103317f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b34801561068057600080fd5b5061022e61068f366004612f57565b611996565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff16156106f0576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061078557507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b610793611ba5565b61079b610694565b82516000036107d6576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b81600003610810576040517f5d67094f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061081c8383611c26565b90506000336001600160a01b03167fde19dbe881cc0aeeb6e73ce19ac7b5ca695e6be8a076e3eb42292005a7fec1b586858786886001600160a01b0316634d8943bb6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561088d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108b19190612f8e565b6040516108c2959493929190612fa7565b60405180910390a3506108f460017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610946576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61094e610694565b6001600160a01b03831661098e576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b836000036109c8576040517f19c08f4900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03831673735b14bb79463307aacbed86daf3322b1e6226ab14806109fb57506001600160a01b03831630145b15610a32576040517f82d5d76a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610a3c8484611f19565b6000546040517fde43156e0000000000000000000000000000000000000000000000000000000081526001600160a01b038086169263de43156e92610a8d928a9216908990889088906004016130c6565b600060405180830381600087803b158015610aa757600080fd5b505af1158015610abb573d6000803e3d6000fd5b505050505050505050565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020526040902060010154610b00816120e7565b610b0a83836120f1565b50505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610b5d576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610b65610694565b6001600160a01b0385161580610b8257506001600160a01b038316155b15610bb9576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b83600003610bf3576040517f5d67094f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f69582bee0000000000000000000000000000000000000000000000000000000081526001600160a01b038416906369582bee90610c4090899089908990889088906004016130c6565b600060405180830381600087803b158015610c5a57600080fd5b505af1158015610c6e573d6000803e3d6000fd5b50505050505050505050565b6001600160a01b0381163314610cbc576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6108f482826121de565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610cf0816120e7565b610cf86122a2565b50565b610d03611ba5565b610d0b610694565b81600003610d45576040517f19c08f4900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610d638273735b14bb79463307aacbed86daf3322b1e6226ab611f19565b6040517f735b14bb79463307aacbed86daf3322b1e6226ab0000000000000000000000006020820152819033907fde19dbe881cc0aeeb6e73ce19ac7b5ca695e6be8a076e3eb42292005a7fec1b59060340160408051601f198184030181529082905260008054610de3936001600160a01b039091169189918190612fa7565b60405180910390a3610e1460017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b5050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff16600081158015610e635750825b905060008267ffffffffffffffff166001148015610e805750303b155b905081158015610e8e575080155b15610ec5576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001660011785558315610f265784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff16680100000000000000001785555b6001600160a01b0387161580610f4357506001600160a01b038616155b15610f7a576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610f82612332565b610f8a612332565b610f9261233a565b610f9a61234a565b610fa56000876120f1565b50610fd07f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a876120f1565b50600080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03891617905583156110655784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50505050505050565b61107661235a565b61107f8261242a565b610e148282612435565b600061109361253b565b507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc90565b3373735b14bb79463307aacbed86daf3322b1e6226ab14611105576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61110d610694565b6001600160a01b038516158061112a57506001600160a01b038316155b15611161576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8360000361119b576040517f5d67094f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03831673735b14bb79463307aacbed86daf3322b1e6226ab14806111ce57506001600160a01b03831630145b15611205576040517f82d5d76a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f47e7ef240000000000000000000000000000000000000000000000000000000081526001600160a01b038481166004830152602482018690528616906347e7ef24906044016020604051808303816000875af115801561126d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611291919061310d565b610bf3576040517f47d19fab00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6112cf611ba5565b6112d7610694565b8351600003611312576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b82336001600160a01b03167f5322ffbbf9261ff1f8138247942d2b03b28717141ef0a0dd080fc4be9c4e78d38685856040516113509392919061312f565b60405180910390a3610b0a60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b611389611ba5565b611391610694565b84516000036113cc576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b83600003611406576040517f5d67094f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006114128585611c26565b90506000336001600160a01b03167fde19dbe881cc0aeeb6e73ce19ac7b5ca695e6be8a076e3eb42292005a7fec1b5888789868a6001600160a01b0316634d8943bb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611483573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114a79190612f8e565b8a8a6040516114bc979695949392919061315f565b60405180910390a3506114ee60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b5050505050565b6114fd611ba5565b611505610694565b8360000361153f576040517f19c08f4900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61155d8473735b14bb79463307aacbed86daf3322b1e6226ab611f19565b6040517f735b14bb79463307aacbed86daf3322b1e6226ab0000000000000000000000006020820152839033907fde19dbe881cc0aeeb6e73ce19ac7b5ca695e6be8a076e3eb42292005a7fec1b59060340160408051601f198184030181529082905260008054611350936001600160a01b03909116918b9181908b908b9061315f565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61160b816120e7565b610cf861259d565b3373735b14bb79463307aacbed86daf3322b1e6226ab14611660576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611668610694565b6001600160a01b038516158061168557506001600160a01b038316155b156116bc576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b836000036116f6576040517f5d67094f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517fde43156e0000000000000000000000000000000000000000000000000000000081526001600160a01b0384169063de43156e90610c4090899089908990889088906004016130c6565b3373735b14bb79463307aacbed86daf3322b1e6226ab14611790576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611798610694565b6001600160a01b03851615806117b557506001600160a01b038316155b156117ec576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b83600003611826576040517f5d67094f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03831673735b14bb79463307aacbed86daf3322b1e6226ab148061185957506001600160a01b03831630145b15611890576040517f82d5d76a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f47e7ef240000000000000000000000000000000000000000000000000000000081526001600160a01b038481166004830152602482018690528616906347e7ef24906044016020604051808303816000875af11580156118f8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061191c919061310d565b6116f6576040517f47d19fab00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052604090206001015461198c816120e7565b610b0a83836121de565b3373735b14bb79463307aacbed86daf3322b1e6226ab146119e3576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6119eb610694565b6001600160a01b0383161580611a0857506001600160a01b038116155b15611a3f576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b81600003611a79576040517f5d67094f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03811673735b14bb79463307aacbed86daf3322b1e6226ab1480611aac57506001600160a01b03811630145b15611ae3576040517f82d5d76a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f47e7ef240000000000000000000000000000000000000000000000000000000081526001600160a01b038281166004830152602482018490528416906347e7ef24906044016020604051808303816000875af1158015611b4b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b6f919061310d565b6108f4576040517f47d19fab00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0080547ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01611c20576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60029055565b6000806000836001600160a01b031663d9eeebed6040518163ffffffff1660e01b81526004016040805180830381865afa158015611c68573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c8c91906131b4565b6040517f23b872dd00000000000000000000000000000000000000000000000000000000815233600482015273735b14bb79463307aacbed86daf3322b1e6226ab60248201526044810182905291935091506001600160a01b038316906323b872dd906064016020604051808303816000875af1158015611d11573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d35919061310d565b611d6b576040517f0a7cd6d600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f23b872dd000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018690526001600160a01b038516906323b872dd906064016020604051808303816000875af1158015611dd7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611dfb919061310d565b611e31576040517f4dd9ee8d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f42966c68000000000000000000000000000000000000000000000000000000008152600481018690526001600160a01b038516906342966c68906024016020604051808303816000875af1158015611e91573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611eb5919061310d565b611eeb576040517f2c77e05c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b949350505050565b60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b6000546040517f23b872dd000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018490526001600160a01b03909116906323b872dd906064016020604051808303816000875af1158015611f89573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fad919061310d565b611fe3576040517fc7ffc47b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000546040517f2e1a7d4d000000000000000000000000000000000000000000000000000000008152600481018490526001600160a01b0390911690632e1a7d4d90602401600060405180830381600087803b15801561204257600080fd5b505af1158015612056573d6000803e3d6000fd5b505050506000816001600160a01b03168360405160006040518083038185875af1925050503d80600081146120a7576040519150601f19603f3d011682016040523d82523d6000602084013e6120ac565b606091505b50509050806108f4576040517fc7ffc47b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610cf88133612616565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff166121d4576000848152602082815260408083206001600160a01b0387168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905561218a3390565b6001600160a01b0316836001600160a01b0316857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a46001915050610785565b6000915050610785565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff16156121d4576000848152602082815260408083206001600160a01b038716808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339287917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a46001915050610785565b6122aa6126a3565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001681557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a150565b6106f06126fe565b6123426126fe565b6106f0612765565b6123526126fe565b6106f06127b6565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806123f357507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166123e77f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b6001600160a01b031614155b156106f0576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610e14816120e7565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa92505050801561248f575060408051601f3d908101601f1916820190925261248c91810190612f8e565b60015b6124d5576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b03831660048201526024015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8114612531576040517faa1d49a4000000000000000000000000000000000000000000000000000000008152600481018290526024016124cc565b6108f483836127be565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146106f0576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6125a5610694565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011781557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25833612314565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408083206001600160a01b038516845290915290205460ff16610e14576040517fe2517d3f0000000000000000000000000000000000000000000000000000000081526001600160a01b0382166004820152602481018390526044016124cc565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff166106f0576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff166106f0576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61276d6126fe565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055565b611ef36126fe565b6127c782612814565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a280511561280c576108f482826128bc565b610e14612932565b806001600160a01b03163b600003612863576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b03821660048201526024016124cc565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6060600080846001600160a01b0316846040516128d991906131e2565b600060405180830381855af49150503d8060008114612914576040519150601f19603f3d011682016040523d82523d6000602084013e612919565b606091505b509150915061292985838361296a565b95945050505050565b34156106f0576040517fb398979f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60608261297f5761297a826129e2565b6129db565b815115801561299657506001600160a01b0384163b155b156129d8576040517f9996b3150000000000000000000000000000000000000000000000000000000081526001600160a01b03851660048201526024016124cc565b50805b9392505050565b8051156129f25780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060208284031215612a3657600080fd5b81357fffffffff00000000000000000000000000000000000000000000000000000000811681146129db57600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600082601f830112612aa657600080fd5b813567ffffffffffffffff811115612ac057612ac0612a66565b604051601f19603f601f19601f8501160116810181811067ffffffffffffffff82111715612af057612af0612a66565b604052818152838201602001851015612b0857600080fd5b816020850160208301376000918101602001919091529392505050565b6001600160a01b0381168114610cf857600080fd5b600080600060608486031215612b4f57600080fd5b833567ffffffffffffffff811115612b6657600080fd5b612b7286828701612a95565b935050602084013591506040840135612b8a81612b25565b809150509250925092565b600060608284031215612ba757600080fd5b50919050565b60008083601f840112612bbf57600080fd5b50813567ffffffffffffffff811115612bd757600080fd5b602083019150836020828501011115612bef57600080fd5b9250929050565b600080600080600060808688031215612c0e57600080fd5b853567ffffffffffffffff811115612c2557600080fd5b612c3188828901612b95565b955050602086013593506040860135612c4981612b25565b9250606086013567ffffffffffffffff811115612c6557600080fd5b612c7188828901612bad565b969995985093965092949392505050565b600060208284031215612c9457600080fd5b5035919050565b60008060408385031215612cae57600080fd5b823591506020830135612cc081612b25565b809150509250929050565b60008060008060008060a08789031215612ce457600080fd5b863567ffffffffffffffff811115612cfb57600080fd5b612d0789828a01612b95565b9650506020870135612d1881612b25565b9450604087013593506060870135612d2f81612b25565b9250608087013567ffffffffffffffff811115612d4b57600080fd5b612d5789828a01612bad565b979a9699509497509295939492505050565b60008060408385031215612d7c57600080fd5b50508035926020909101359150565b60008060408385031215612d9e57600080fd5b8235612da981612b25565b91506020830135612cc081612b25565b60008060408385031215612dcc57600080fd5b8235612dd781612b25565b9150602083013567ffffffffffffffff811115612df357600080fd5b612dff85828601612a95565b9150509250929050565b60008060008060608587031215612e1f57600080fd5b843567ffffffffffffffff811115612e3657600080fd5b612e4287828801612a95565b94505060208501359250604085013567ffffffffffffffff811115612e6657600080fd5b612e7287828801612bad565b95989497509550505050565b600080600080600060808688031215612e9657600080fd5b853567ffffffffffffffff811115612ead57600080fd5b612c3188828901612a95565b60008060008060608587031215612ecf57600080fd5b8435935060208501359250604085013567ffffffffffffffff811115612e6657600080fd5b60005b83811015612f0f578181015183820152602001612ef7565b50506000910152565b60008151808452612f30816020860160208601612ef4565b601f01601f19169290920160200192915050565b6020815260006129db6020830184612f18565b600080600060608486031215612f6c57600080fd5b8335612f7781612b25565b9250602084013591506040840135612b8a81612b25565b600060208284031215612fa057600080fd5b5051919050565b60c081526000612fba60c0830188612f18565b6001600160a01b038716602084015285604084015284606084015283608084015282810360a084015260008152602081019150509695505050505050565b818352818160208501375060006020828401015260006020601f19601f840116840101905092915050565b600081357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe183360301811261305757600080fd5b820160208101903567ffffffffffffffff81111561307457600080fd5b80360382131561308357600080fd5b60608552613095606086018284612ff8565b91505060208301356130a681612b25565b6001600160a01b0316602085015260409283013592909301919091525090565b6080815260006130d96080830188613023565b6001600160a01b03871660208401528560408401528281036060840152613101818587612ff8565b98975050505050505050565b60006020828403121561311f57600080fd5b815180151581146129db57600080fd5b6040815260006131426040830186612f18565b8281036020840152613155818587612ff8565b9695505050505050565b60c08152600061317260c083018a612f18565b6001600160a01b038916602084015287604084015286606084015285608084015282810360a08401526131a6818587612ff8565b9a9950505050505050505050565b600080604083850312156131c757600080fd5b82516131d281612b25565b6020939093015192949293505050565b600082516131f4818460208701612ef4565b919091019291505056fea2646970667358221220aa7781f02b83781fe8c9234fceb32e81bb1b35cbd84ec554f95cd1a565cec31964736f6c634300081a0033"; + "0x60a06040523060805234801561001457600080fd5b5061001d610022565b6100d4565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100725760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146100d15780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b60805161331b6100fd6000396000818161235f01528181612388015261255e015261331b6000f3fe6080604052600436106101bb5760003560e01c80635c975abb116100ec578063ad3cb1cc1161008a578063d547741f11610064578063d547741f14610600578063e63ab1e914610620578063f41d774914610654578063f45346dc1461067457600080fd5b8063ad3cb1cc1461056a578063bcf7f32b146105c0578063c39aca37146105e057600080fd5b80637993c1e0116100c65780637993c1e0146104bb5780638456cb59146104db57806391d14854146104f0578063a217fddf1461055557600080fd5b80635c975abb146104445780635d40e1781461047b578063737a9ed61461049b57600080fd5b806336568abe11610159578063485cc95511610133578063485cc955146103dc5780634f1ef286146103fc57806352d1902d1461040f5780635af659671461042457600080fd5b806336568abe1461037f5780633ce4a5bc1461039f5780633f4ba83a146103c757600080fd5b806321e093b11161019557806321e093b1146102aa578063248a9ca3146102e25780632f2ff15d1461033f578063309f50041461035f57600080fd5b806301ffc9a714610235578063135390f91461026a57806321501a951461028a57600080fd5b36610230576101c8610694565b6000546001600160a01b031633148015906101f757503373735b14bb79463307aacbed86daf3322b1e6226ab14155b1561022e576040517f229930b200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b005b600080fd5b34801561024157600080fd5b50610255610250366004612a3c565b6106f2565b60405190151581526020015b60405180910390f35b34801561027657600080fd5b5061022e610285366004612b8e565b61078b565b34801561029657600080fd5b5061022e6102a5366004612c4a565b6108f9565b3480156102b657600080fd5b506000546102ca906001600160a01b031681565b6040516001600160a01b039091168152602001610261565b3480156102ee57600080fd5b506103316102fd366004612cd6565b60009081527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052604090206001015490565b604051908152602001610261565b34801561034b57600080fd5b5061022e61035a366004612cef565b610ac6565b34801561036b57600080fd5b5061022e61037a366004612d1f565b610b10565b34801561038b57600080fd5b5061022e61039a366004612cef565b610c7a565b3480156103ab57600080fd5b506102ca73735b14bb79463307aacbed86daf3322b1e6226ab81565b3480156103d357600080fd5b5061022e610cc6565b3480156103e857600080fd5b5061022e6103f7366004612dbd565b610cfb565b61022e61040a366004612deb565b610f51565b34801561041b57600080fd5b50610331610f70565b34801561043057600080fd5b5061022e61043f366004612d1f565b610f9f565b34801561045057600080fd5b507fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff16610255565b34801561048757600080fd5b5061022e610496366004612e3b565b6111ae565b3480156104a757600080fd5b5061022e6104b6366004612eb0565b611268565b3480156104c757600080fd5b5061022e6104d6366004612efe565b611348565b3480156104e757600080fd5b5061022e6114bc565b3480156104fc57600080fd5b5061025561050b366004612cef565b60009182527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408084206001600160a01b0393909316845291905290205460ff1690565b34801561056157600080fd5b50610331600081565b34801561057657600080fd5b506105b36040518060400160405280600581526020017f352e302e3000000000000000000000000000000000000000000000000000000081525081565b6040516102619190612fa7565b3480156105cc57600080fd5b5061022e6105db366004612d1f565b6114ee565b3480156105ec57600080fd5b5061022e6105fb366004612d1f565b61161e565b34801561060c57600080fd5b5061022e61061b366004612cef565b61182d565b34801561062c57600080fd5b506103317f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b34801561066057600080fd5b5061022e61066f366004612fba565b611871565b34801561068057600080fd5b5061022e61068f366004613020565b611990565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff16156106f0576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061078557507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b610793611b9f565b61079b610694565b82516000036107d6576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b81600003610810576040517f5d67094f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061081c8383611c20565b90506000336001600160a01b03167fde19dbe881cc0aeeb6e73ce19ac7b5ca695e6be8a076e3eb42292005a7fec1b586858786886001600160a01b0316634d8943bb6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561088d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108b19190613057565b6040516108c2959493929190613070565b60405180910390a3506108f460017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610946576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61094e610694565b6001600160a01b03831661098e576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b836000036109c8576040517f19c08f4900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03831673735b14bb79463307aacbed86daf3322b1e6226ab14806109fb57506001600160a01b03831630145b15610a32576040517f82d5d76a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610a3c8484611f13565b6000546040517fde43156e0000000000000000000000000000000000000000000000000000000081526001600160a01b038086169263de43156e92610a8d928a9216908990889088906004016131ad565b600060405180830381600087803b158015610aa757600080fd5b505af1158015610abb573d6000803e3d6000fd5b505050505050505050565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020526040902060010154610b00816120e1565b610b0a83836120eb565b50505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610b5d576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610b65610694565b6001600160a01b0385161580610b8257506001600160a01b038316155b15610bb9576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b83600003610bf3576040517f5d67094f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f69582bee0000000000000000000000000000000000000000000000000000000081526001600160a01b038416906369582bee90610c4090899089908990889088906004016131ad565b600060405180830381600087803b158015610c5a57600080fd5b505af1158015610c6e573d6000803e3d6000fd5b50505050505050505050565b6001600160a01b0381163314610cbc576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6108f482826121d8565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610cf0816120e1565b610cf861229c565b50565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff16600081158015610d465750825b905060008267ffffffffffffffff166001148015610d635750303b155b905081158015610d71575080155b15610da8576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001660011785558315610e095784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff16680100000000000000001785555b6001600160a01b0387161580610e2657506001600160a01b038616155b15610e5d576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610e6561232c565b610e6d61232c565b610e75612334565b610e7d612344565b610e886000876120eb565b50610eb37f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a876120eb565b50600080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0389161790558315610f485784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50505050505050565b610f59612354565b610f6282612424565b610f6c828261242f565b5050565b6000610f7a612553565b507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc90565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610fec576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610ff4610694565b6001600160a01b038516158061101157506001600160a01b038316155b15611048576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b83600003611082576040517f5d67094f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03831673735b14bb79463307aacbed86daf3322b1e6226ab14806110b557506001600160a01b03831630145b156110ec576040517f82d5d76a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f47e7ef240000000000000000000000000000000000000000000000000000000081526001600160a01b038481166004830152602482018690528616906347e7ef24906044016020604051808303816000875af1158015611154573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061117891906131f4565b610bf3576040517f47d19fab00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6111b6611b9f565b6111be610694565b83516000036111f9576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b82336001600160a01b03167f5322ffbbf9261ff1f8138247942d2b03b28717141ef0a0dd080fc4be9c4e78d386858560405161123793929190613216565b60405180910390a3610b0a60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b611270611b9f565b611278610694565b816000036112b2576040517f19c08f4900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6112d08273735b14bb79463307aacbed86daf3322b1e6226ab611f13565b60008054604051839233927fde19dbe881cc0aeeb6e73ce19ac7b5ca695e6be8a076e3eb42292005a7fec1b5926113179289926001600160a01b0316918991908190613070565b60405180910390a36108f460017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b611350611b9f565b611358610694565b8451600003611393576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b836000036113cd576040517f5d67094f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006113d98585611c20565b90506000336001600160a01b03167fde19dbe881cc0aeeb6e73ce19ac7b5ca695e6be8a076e3eb42292005a7fec1b5888789868a6001600160a01b0316634d8943bb6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561144a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061146e9190613057565b8a8a6040516114839796959493929190613246565b60405180910390a3506114b560017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b5050505050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a6114e6816120e1565b610cf86125b5565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461153b576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611543610694565b6001600160a01b038516158061156057506001600160a01b038316155b15611597576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b836000036115d1576040517f5d67094f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517fde43156e0000000000000000000000000000000000000000000000000000000081526001600160a01b0384169063de43156e90610c4090899089908990889088906004016131ad565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461166b576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611673610694565b6001600160a01b038516158061169057506001600160a01b038316155b156116c7576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b83600003611701576040517f5d67094f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03831673735b14bb79463307aacbed86daf3322b1e6226ab148061173457506001600160a01b03831630145b1561176b576040517f82d5d76a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f47e7ef240000000000000000000000000000000000000000000000000000000081526001600160a01b038481166004830152602482018690528616906347e7ef24906044016020604051808303816000875af11580156117d3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117f791906131f4565b6115d1576040517f47d19fab00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020526040902060010154611867816120e1565b610b0a83836121d8565b611879611b9f565b611881610694565b84516000036118bc576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b836000036118f6576040517f19c08f4900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6119148473735b14bb79463307aacbed86daf3322b1e6226ab611f13565b60008054604051859233927fde19dbe881cc0aeeb6e73ce19ac7b5ca695e6be8a076e3eb42292005a7fec1b59261195f928b926001600160a01b0316918b919081908b908b90613246565b60405180910390a36114b560017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b3373735b14bb79463307aacbed86daf3322b1e6226ab146119dd576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6119e5610694565b6001600160a01b0383161580611a0257506001600160a01b038116155b15611a39576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b81600003611a73576040517f5d67094f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03811673735b14bb79463307aacbed86daf3322b1e6226ab1480611aa657506001600160a01b03811630145b15611add576040517f82d5d76a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f47e7ef240000000000000000000000000000000000000000000000000000000081526001600160a01b038281166004830152602482018490528416906347e7ef24906044016020604051808303816000875af1158015611b45573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b6991906131f4565b6108f4576040517f47d19fab00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0080547ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01611c1a576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60029055565b6000806000836001600160a01b031663d9eeebed6040518163ffffffff1660e01b81526004016040805180830381865afa158015611c62573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c86919061329b565b6040517f23b872dd00000000000000000000000000000000000000000000000000000000815233600482015273735b14bb79463307aacbed86daf3322b1e6226ab60248201526044810182905291935091506001600160a01b038316906323b872dd906064016020604051808303816000875af1158015611d0b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d2f91906131f4565b611d65576040517f0a7cd6d600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f23b872dd000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018690526001600160a01b038516906323b872dd906064016020604051808303816000875af1158015611dd1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611df591906131f4565b611e2b576040517f4dd9ee8d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f42966c68000000000000000000000000000000000000000000000000000000008152600481018690526001600160a01b038516906342966c68906024016020604051808303816000875af1158015611e8b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611eaf91906131f4565b611ee5576040517f2c77e05c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b949350505050565b60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b6000546040517f23b872dd000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018490526001600160a01b03909116906323b872dd906064016020604051808303816000875af1158015611f83573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fa791906131f4565b611fdd576040517fc7ffc47b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000546040517f2e1a7d4d000000000000000000000000000000000000000000000000000000008152600481018490526001600160a01b0390911690632e1a7d4d90602401600060405180830381600087803b15801561203c57600080fd5b505af1158015612050573d6000803e3d6000fd5b505050506000816001600160a01b03168360405160006040518083038185875af1925050503d80600081146120a1576040519150601f19603f3d011682016040523d82523d6000602084013e6120a6565b606091505b50509050806108f4576040517fc7ffc47b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610cf8813361262e565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff166121ce576000848152602082815260408083206001600160a01b0387168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790556121843390565b6001600160a01b0316836001600160a01b0316857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a46001915050610785565b6000915050610785565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff16156121ce576000848152602082815260408083206001600160a01b038716808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339287917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a46001915050610785565b6122a46126bb565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001681557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a150565b6106f0612716565b61233c612716565b6106f061277d565b61234c612716565b6106f06127ce565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806123ed57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166123e17f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b6001600160a01b031614155b156106f0576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610f6c816120e1565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156124a7575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682019092526124a491810190613057565b60015b6124ed576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b03831660048201526024015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8114612549576040517faa1d49a4000000000000000000000000000000000000000000000000000000008152600481018290526024016124e4565b6108f483836127d6565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146106f0576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6125bd610694565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011781557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2583361230e565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408083206001600160a01b038516845290915290205460ff16610f6c576040517fe2517d3f0000000000000000000000000000000000000000000000000000000081526001600160a01b0382166004820152602481018390526044016124e4565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff166106f0576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff166106f0576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612785612716565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055565b611eed612716565b6127df8261282c565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a2805115612824576108f482826128d4565b610f6c61294a565b806001600160a01b03163b60000361287b576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b03821660048201526024016124e4565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6060600080846001600160a01b0316846040516128f191906132c9565b600060405180830381855af49150503d806000811461292c576040519150601f19603f3d011682016040523d82523d6000602084013e612931565b606091505b5091509150612941858383612982565b95945050505050565b34156106f0576040517fb398979f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60608261299757612992826129fa565b6129f3565b81511580156129ae57506001600160a01b0384163b155b156129f0576040517f9996b3150000000000000000000000000000000000000000000000000000000081526001600160a01b03851660048201526024016124e4565b50805b9392505050565b805115612a0a5780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060208284031215612a4e57600080fd5b81357fffffffff00000000000000000000000000000000000000000000000000000000811681146129f357600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600082601f830112612abe57600080fd5b813567ffffffffffffffff811115612ad857612ad8612a7e565b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8501160116810181811067ffffffffffffffff82111715612b4457612b44612a7e565b604052818152838201602001851015612b5c57600080fd5b816020850160208301376000918101602001919091529392505050565b6001600160a01b0381168114610cf857600080fd5b600080600060608486031215612ba357600080fd5b833567ffffffffffffffff811115612bba57600080fd5b612bc686828701612aad565b935050602084013591506040840135612bde81612b79565b809150509250925092565b600060608284031215612bfb57600080fd5b50919050565b60008083601f840112612c1357600080fd5b50813567ffffffffffffffff811115612c2b57600080fd5b602083019150836020828501011115612c4357600080fd5b9250929050565b600080600080600060808688031215612c6257600080fd5b853567ffffffffffffffff811115612c7957600080fd5b612c8588828901612be9565b955050602086013593506040860135612c9d81612b79565b9250606086013567ffffffffffffffff811115612cb957600080fd5b612cc588828901612c01565b969995985093965092949392505050565b600060208284031215612ce857600080fd5b5035919050565b60008060408385031215612d0257600080fd5b823591506020830135612d1481612b79565b809150509250929050565b60008060008060008060a08789031215612d3857600080fd5b863567ffffffffffffffff811115612d4f57600080fd5b612d5b89828a01612be9565b9650506020870135612d6c81612b79565b9450604087013593506060870135612d8381612b79565b9250608087013567ffffffffffffffff811115612d9f57600080fd5b612dab89828a01612c01565b979a9699509497509295939492505050565b60008060408385031215612dd057600080fd5b8235612ddb81612b79565b91506020830135612d1481612b79565b60008060408385031215612dfe57600080fd5b8235612e0981612b79565b9150602083013567ffffffffffffffff811115612e2557600080fd5b612e3185828601612aad565b9150509250929050565b60008060008060608587031215612e5157600080fd5b843567ffffffffffffffff811115612e6857600080fd5b612e7487828801612aad565b94505060208501359250604085013567ffffffffffffffff811115612e9857600080fd5b612ea487828801612c01565b95989497509550505050565b600080600060608486031215612ec557600080fd5b833567ffffffffffffffff811115612edc57600080fd5b612ee886828701612aad565b9660208601359650604090950135949350505050565b600080600080600060808688031215612f1657600080fd5b853567ffffffffffffffff811115612f2d57600080fd5b612c8588828901612aad565b60005b83811015612f54578181015183820152602001612f3c565b50506000910152565b60008151808452612f75816020860160208601612f39565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006129f36020830184612f5d565b600080600080600060808688031215612fd257600080fd5b853567ffffffffffffffff811115612fe957600080fd5b612ff588828901612aad565b9550506020860135935060408601359250606086013567ffffffffffffffff811115612cb957600080fd5b60008060006060848603121561303557600080fd5b833561304081612b79565b9250602084013591506040840135612bde81612b79565b60006020828403121561306957600080fd5b5051919050565b60c08152600061308360c0830188612f5d565b6001600160a01b038716602084015285604084015284606084015283608084015282810360a084015260008152602081019150509695505050505050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b600081357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe183360301811261313e57600080fd5b820160208101903567ffffffffffffffff81111561315b57600080fd5b80360382131561316a57600080fd5b6060855261317c6060860182846130c1565b915050602083013561318d81612b79565b6001600160a01b0316602085015260409283013592909301919091525090565b6080815260006131c0608083018861310a565b6001600160a01b038716602084015285604084015282810360608401526131e88185876130c1565b98975050505050505050565b60006020828403121561320657600080fd5b815180151581146129f357600080fd5b6040815260006132296040830186612f5d565b828103602084015261323c8185876130c1565b9695505050505050565b60c08152600061325960c083018a612f5d565b6001600160a01b038916602084015287604084015286606084015285608084015282810360a084015261328d8185876130c1565b9a9950505050505050505050565b600080604083850312156132ae57600080fd5b82516132b981612b79565b6020939093015192949293505050565b600082516132db818460208701612f39565b919091019291505056fea26469706673582212200b8c15bf3d7fc3d43f6549db8e61ddd6e457ad02ec4a35fc95b81732bdaa45f164736f6c634300081a0033"; type GatewayZEVMConstructorParams = | [signer?: Signer] diff --git a/v2/typechain-types/factories/IGatewayZEVM.sol/IGatewayZEVM__factory.ts b/v2/typechain-types/factories/IGatewayZEVM.sol/IGatewayZEVM__factory.ts index 0c2196a4..1a01e18c 100644 --- a/v2/typechain-types/factories/IGatewayZEVM.sol/IGatewayZEVM__factory.ts +++ b/v2/typechain-types/factories/IGatewayZEVM.sol/IGatewayZEVM__factory.ts @@ -327,6 +327,11 @@ const _abi = [ type: "function", name: "withdraw", inputs: [ + { + name: "receiver", + type: "bytes", + internalType: "bytes", + }, { name: "amount", type: "uint256", @@ -373,6 +378,11 @@ const _abi = [ type: "function", name: "withdrawAndCall", inputs: [ + { + name: "receiver", + type: "bytes", + internalType: "bytes", + }, { name: "amount", type: "uint256", diff --git a/v2/typechain-types/factories/SenderZEVM__factory.ts b/v2/typechain-types/factories/SenderZEVM__factory.ts index 81033adf..b8da5005 100644 --- a/v2/typechain-types/factories/SenderZEVM__factory.ts +++ b/v2/typechain-types/factories/SenderZEVM__factory.ts @@ -120,7 +120,7 @@ const _abi = [ ] as const; const _bytecode = - "0x6080604052348015600f57600080fd5b5060405161080c38038061080c833981016040819052602c916050565b600080546001600160a01b0319166001600160a01b0392909216919091179055607e565b600060208284031215606157600080fd5b81516001600160a01b0381168114607757600080fd5b9392505050565b61077f8061008d6000396000f3fe608060405234801561001057600080fd5b50600436106100415760003560e01c80630abd890514610046578063116191b61461005b578063865b36f6146100a4575b600080fd5b6100596100543660046104c4565b6100b7565b005b60005461007b9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b6100596100b236600461057f565b6102af565b60008383836040516024016100ce93929190610674565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe04d4f970000000000000000000000000000000000000000000000000000000017905260005490517f095ea7b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff91821660048201526024810189905291925086169063095ea7b3906044016020604051808303816000875af11580156101be573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101e2919061069e565b610218576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000546040517f7993c1e000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff90911690637993c1e090610274908a908a908a9087906004016106c2565b600060405180830381600087803b15801561028e57600080fd5b505af11580156102a2573d6000803e3d6000fd5b5050505050505050505050565b60008383836040516024016102c693929190610674565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe04d4f970000000000000000000000000000000000000000000000000000000017905260005490517f5d40e17800000000000000000000000000000000000000000000000000000000815291925073ffffffffffffffffffffffffffffffffffffffff1690635d40e1789061039690899089908690600401610714565b600060405180830381600087803b1580156103b057600080fd5b505af11580156103c4573d6000803e3d6000fd5b50505050505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600082601f83011261041057600080fd5b81356020830160008067ffffffffffffffff841115610431576104316103d0565b506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f85018116603f0116810181811067ffffffffffffffff8211171561047e5761047e6103d0565b60405283815290508082840187101561049657600080fd5b838360208301376000602085830101528094505050505092915050565b80151581146104c157600080fd5b50565b60008060008060008060c087890312156104dd57600080fd5b863567ffffffffffffffff8111156104f457600080fd5b61050089828a016103ff565b96505060208701359450604087013573ffffffffffffffffffffffffffffffffffffffff8116811461053157600080fd5b9350606087013567ffffffffffffffff81111561054d57600080fd5b61055989828a016103ff565b9350506080870135915060a0870135610571816104b3565b809150509295509295509295565b600080600080600060a0868803121561059757600080fd5b853567ffffffffffffffff8111156105ae57600080fd5b6105ba888289016103ff565b95505060208601359350604086013567ffffffffffffffff8111156105de57600080fd5b6105ea888289016103ff565b935050606086013591506080860135610602816104b3565b809150509295509295909350565b6000815180845260005b818110156106365760208185018101518683018201520161061a565b5060006020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b6060815260006106876060830186610610565b602083019490945250901515604090910152919050565b6000602082840312156106b057600080fd5b81516106bb816104b3565b9392505050565b6080815260006106d56080830187610610565b85602084015273ffffffffffffffffffffffffffffffffffffffff8516604084015282810360608401526107098185610610565b979650505050505050565b6060815260006107276060830186610610565b846020840152828103604084015261073f8185610610565b969550505050505056fea26469706673582212202d9e7d32ef6522050432c1694ddb8cfdc9122adb07ccb90fba239639e4abfd7c64736f6c634300081a0033"; + "0x6080604052348015600f57600080fd5b5060405161080c38038061080c833981016040819052602c916050565b600080546001600160a01b0319166001600160a01b0392909216919091179055607e565b600060208284031215606157600080fd5b81516001600160a01b0381168114607757600080fd5b9392505050565b61077f8061008d6000396000f3fe608060405234801561001057600080fd5b50600436106100415760003560e01c80630abd890514610046578063116191b61461005b578063865b36f6146100a4575b600080fd5b6100596100543660046104c4565b6100b7565b005b60005461007b9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b6100596100b236600461057f565b6102af565b60008383836040516024016100ce93929190610674565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe04d4f970000000000000000000000000000000000000000000000000000000017905260005490517f095ea7b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff91821660048201526024810189905291925086169063095ea7b3906044016020604051808303816000875af11580156101be573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101e2919061069e565b610218576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000546040517f7993c1e000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff90911690637993c1e090610274908a908a908a9087906004016106c2565b600060405180830381600087803b15801561028e57600080fd5b505af11580156102a2573d6000803e3d6000fd5b5050505050505050505050565b60008383836040516024016102c693929190610674565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe04d4f970000000000000000000000000000000000000000000000000000000017905260005490517f5d40e17800000000000000000000000000000000000000000000000000000000815291925073ffffffffffffffffffffffffffffffffffffffff1690635d40e1789061039690899089908690600401610714565b600060405180830381600087803b1580156103b057600080fd5b505af11580156103c4573d6000803e3d6000fd5b50505050505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600082601f83011261041057600080fd5b81356020830160008067ffffffffffffffff841115610431576104316103d0565b506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f85018116603f0116810181811067ffffffffffffffff8211171561047e5761047e6103d0565b60405283815290508082840187101561049657600080fd5b838360208301376000602085830101528094505050505092915050565b80151581146104c157600080fd5b50565b60008060008060008060c087890312156104dd57600080fd5b863567ffffffffffffffff8111156104f457600080fd5b61050089828a016103ff565b96505060208701359450604087013573ffffffffffffffffffffffffffffffffffffffff8116811461053157600080fd5b9350606087013567ffffffffffffffff81111561054d57600080fd5b61055989828a016103ff565b9350506080870135915060a0870135610571816104b3565b809150509295509295509295565b600080600080600060a0868803121561059757600080fd5b853567ffffffffffffffff8111156105ae57600080fd5b6105ba888289016103ff565b95505060208601359350604086013567ffffffffffffffff8111156105de57600080fd5b6105ea888289016103ff565b935050606086013591506080860135610602816104b3565b809150509295509295909350565b6000815180845260005b818110156106365760208185018101518683018201520161061a565b5060006020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b6060815260006106876060830186610610565b602083019490945250901515604090910152919050565b6000602082840312156106b057600080fd5b81516106bb816104b3565b9392505050565b6080815260006106d56080830187610610565b85602084015273ffffffffffffffffffffffffffffffffffffffff8516604084015282810360608401526107098185610610565b979650505050505050565b6060815260006107276060830186610610565b846020840152828103604084015261073f8185610610565b969550505050505056fea2646970667358221220b01f70fc7d08faa150faba1d40368a8dfab02c60f0c4f8fa10ce583a32885b4d64736f6c634300081a0033"; type SenderZEVMConstructorParams = | [signer?: Signer] From 96e69ad85bef76f7aa4a00b28bf2eb89e897cd50 Mon Sep 17 00:00:00 2001 From: skosito Date: Fri, 9 Aug 2024 16:17:16 +0200 Subject: [PATCH 20/21] fixes --- v2/pkg/erc20custody.t.sol/erc20custodytest.go | 2 +- .../erc20custodyechidnatest.go | 2 +- v2/pkg/gatewayevm.sol/gatewayevm.go | 2 +- .../gatewayevm.t.sol/gatewayevminboundtest.go | 4 +- v2/pkg/gatewayevm.t.sol/gatewayevmtest.go | 2 +- .../gatewayevmechidnatest.go | 2 +- .../gatewayevmuupsupgradetest.go | 2 +- .../gatewayevmzevmtest.go | 2 +- v2/pkg/gatewayzevm.sol/gatewayzevm.go | 4 +- .../gatewayzevminboundtest.go | 67 ++-- .../gatewayzevmoutboundtest.go | 133 ++++---- v2/pkg/igatewayzevm.sol/igatewayzevm.go | 316 +----------------- v2/pkg/senderzevm.sol/senderzevm.go | 2 +- .../zetaconnectornativetest.go | 2 +- .../zetaconnectornonnativetest.go | 2 +- v2/pkg/zrc20.t.sol/zrc20test.go | 2 +- v2/src/zevm/interfaces/IGatewayZEVM.sol | 68 ---- v2/test/GatewayZEVM.t.sol | 64 +--- .../ERC20CustodyEchidnaTest__factory.ts | 2 +- .../GatewayEVMEchidnaTest__factory.ts | 2 +- .../factories/GatewayEVM__factory.ts | 2 +- .../factories/GatewayZEVM__factory.ts | 2 +- .../factories/SenderZEVM__factory.ts | 2 +- 23 files changed, 123 insertions(+), 565 deletions(-) diff --git a/v2/pkg/erc20custody.t.sol/erc20custodytest.go b/v2/pkg/erc20custody.t.sol/erc20custodytest.go index 9d6f33e0..34c8dc23 100644 --- a/v2/pkg/erc20custody.t.sol/erc20custodytest.go +++ b/v2/pkg/erc20custody.t.sol/erc20custodytest.go @@ -50,7 +50,7 @@ type StdInvariantFuzzSelector struct { // ERC20CustodyTestMetaData contains all meta data concerning the ERC20CustodyTest contract. var ERC20CustodyTestMetaData = &bind.MetaData{ ABI: "[{\"type\":\"function\",\"name\":\"ASSET_HANDLER_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"IS_TEST\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"PAUSER_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"TSS_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"WHITELISTER_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"WITHDRAWER_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeArtifacts\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedArtifacts_\",\"type\":\"string[]\",\"internalType\":\"string[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeContracts\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedContracts_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeSelectors\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedSelectors_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzSelector[]\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"selectors\",\"type\":\"bytes4[]\",\"internalType\":\"bytes4[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeSenders\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedSenders_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"failed\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"setUp\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"targetArtifactSelectors\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedArtifactSelectors_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzArtifactSelector[]\",\"components\":[{\"name\":\"artifact\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"selectors\",\"type\":\"bytes4[]\",\"internalType\":\"bytes4[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetArtifacts\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedArtifacts_\",\"type\":\"string[]\",\"internalType\":\"string[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetContracts\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedContracts_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetInterfaces\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedInterfaces_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzInterface[]\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"artifacts\",\"type\":\"string[]\",\"internalType\":\"string[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetSelectors\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedSelectors_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzSelector[]\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"selectors\",\"type\":\"bytes4[]\",\"internalType\":\"bytes4[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetSenders\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedSenders_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"testForwardCallToReceiveERC20PartialThroughCustody\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testForwardCallToReceiveERC20PartialThroughCustodyFailsIfAmountIs0\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testForwardCallToReceiveERC20PartialThroughCustodyFailsIfSenderIsNotWithdrawer\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testForwardCallToReceiveERC20ThroughCustody\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testForwardCallToReceiveERC20ThroughCustodyFailsIfAmountIs0\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testForwardCallToReceiveERC20ThroughCustodyFailsIfReceiverIsZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testForwardCallToReceiveERC20ThroughCustodyFailsIfSenderIsNotWithdrawer\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testForwardCallToReceiveERC20ThroughCustodyTogglePause\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testForwardCallToReceiveNoParamsThroughCustody\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testNewCustodyFailsIfAddressesAreZero\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testUnwhitelist\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testUnwhitelistFailsIfSenderIsNotWhitelister\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testUnwhitelistFailsIfZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWhitelist\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWhitelistFailsIfSenderIsNotWhitelister\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWhitelistFailsIfZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawAndCallFailsIfTokenIsNotWhitelisted\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawAndRevertFailsIfTokenIsNotWhitelisted\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawAndRevertThroughCustody\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawAndRevertThroughCustodyFailsIfAmountIs0\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawAndRevertThroughCustodyFailsIfReceiverIsZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawAndRevertThroughCustodyFailsIfSenderIsNotWithdrawer\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawFailsIfTokenIsNotWhitelisted\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawThroughCustody\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawThroughCustodyFailsIfSenderIsNotWithdrawer\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"event\",\"name\":\"Call\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"receiver\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Deposit\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"receiver\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"asset\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Executed\",\"inputs\":[{\"name\":\"destination\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ExecutedWithERC20\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedERC20\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"token\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"destination\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedNoParams\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedNonPayable\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"strs\",\"type\":\"string[]\",\"indexed\":false,\"internalType\":\"string[]\"},{\"name\":\"nums\",\"type\":\"uint256[]\",\"indexed\":false,\"internalType\":\"uint256[]\"},{\"name\":\"flag\",\"type\":\"bool\",\"indexed\":false,\"internalType\":\"bool\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedPayable\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"str\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"num\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"flag\",\"type\":\"bool\",\"indexed\":false,\"internalType\":\"bool\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedRevert\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Reverted\",\"inputs\":[{\"name\":\"destination\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RevertedWithERC20\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Unwhitelisted\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Whitelisted\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Withdraw\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"WithdrawAndCall\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"WithdrawAndRevert\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log\",\"inputs\":[{\"name\":\"\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_address\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_array\",\"inputs\":[{\"name\":\"val\",\"type\":\"uint256[]\",\"indexed\":false,\"internalType\":\"uint256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_array\",\"inputs\":[{\"name\":\"val\",\"type\":\"int256[]\",\"indexed\":false,\"internalType\":\"int256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_array\",\"inputs\":[{\"name\":\"val\",\"type\":\"address[]\",\"indexed\":false,\"internalType\":\"address[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_bytes\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_bytes32\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_int\",\"inputs\":[{\"name\":\"\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_address\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_array\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"uint256[]\",\"indexed\":false,\"internalType\":\"uint256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_array\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"int256[]\",\"indexed\":false,\"internalType\":\"int256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_array\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"address[]\",\"indexed\":false,\"internalType\":\"address[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_bytes\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_bytes32\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_decimal_int\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"},{\"name\":\"decimals\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_decimal_uint\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"decimals\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_int\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_string\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_uint\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_string\",\"inputs\":[{\"name\":\"\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_uint\",\"inputs\":[{\"name\":\"\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"logs\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"AccessControlUnauthorizedAccount\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"neededRole\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"type\":\"error\",\"name\":\"ApprovalFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ConnectorInitialized\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"CustodyInitialized\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"DepositFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"EnforcedPause\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ExecutionFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientERC20Amount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientETHAmount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NotWhitelisted\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NotWhitelistedInCustody\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZeroAddress\",\"inputs\":[]}]", - Bin: "0x6080604052600c8054600160ff199182168117909255601f80549091169091179055348015602c57600080fd5b5062010408806200003e6000396000f3fe608060405234801561001057600080fd5b50600436106102e95760003560e01c806385f438c111610191578063c713f827116100e3578063f0c8e7e011610097578063fa7626d411610071578063fa7626d414610533578063fb176c1214610540578063fe8e5f1b1461054857600080fd5b8063f0c8e7e01461051b578063f4221f0814610523578063fa2a70741461052b57600080fd5b8063e20c9f71116100c8578063e20c9f71146104e4578063e63ab1e9146104ec578063eb1ce7f91461051357600080fd5b8063c713f827146104d4578063cbd57e2f146104dc57600080fd5b8063a3f9d0e011610145578063b0464fdc1161011f578063b0464fdc146104ac578063b5508aa9146104b4578063ba414fa6146104bc57600080fd5b8063a3f9d0e014610475578063a4943deb1461047d578063a783c7891461048557600080fd5b8063916a17c611610176578063916a17c6146104505780639918c1c2146104655780639fc7fd551461046d57600080fd5b806385f438c1146104215780639158c6231461044857600080fd5b80633f7286f41161024a57806366d9a9a0116101fe5780637e91c50f116101d85780637e91c50f146103fc57806382c529921461040457806385226c811461040c57600080fd5b806366d9a9a0146103d75780636a621854146103ec57806371149c94146103f457600080fd5b806351ecdf3c1161022f57806351ecdf3c14610373578063570618e11461037b5780635d62c860146103b057600080fd5b80633f7286f4146103635780634b5838d21461036b57600080fd5b80632ade3880116102a15780633e5e3c23116102865780633e5e3c231461034b5780633e73ecb4146103535780633ee929231461035b57600080fd5b80632ade38801461032e5780632be6a1621461034357600080fd5b80631779672f116102d25780631779672f146103005780631ed7831c14610308578063284cb9291461032657600080fd5b80630a9254e4146102ee5780630eee72a9146102f8575b600080fd5b6102f6610550565b005b6102f6610e8f565b6102f6611134565b610310611285565b60405161031d919061a652565b60405180910390f35b6102f66112e7565b6103366115e4565b60405161031d919061a6ee565b6102f6611726565b6103106118e8565b6102f6611948565b6102f6611ed7565b610310611fa6565b6102f6612006565b6102f6612329565b6103a27f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a81565b60405190815260200161031d565b6103a27f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b981565b6103df6124fc565b60405161031d919061a854565b6102f661267e565b6102f661274a565b6102f6612fa0565b6102f661312a565b61041461339f565b60405161031d919061a8f2565b6103a27f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b6102f661346f565b61045861353d565b60405161031d919061a969565b6102f6613638565b6102f661394d565b6102f6613a1b565b6102f6614055565b6103a27f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb81565b61045861427a565b610414614375565b6104c4614445565b604051901515815260200161031d565b6102f6614519565b6102f66151ee565b6103106152af565b6103a27f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b6102f661530f565b6102f661541b565b6102f66155dd565b6102f6615847565b601f546104c49060ff1681565b6102f6615b3e565b6102f66161ee565b602680547fffffffffffffffffffffffff00000000000000000000000000000000000000009081163017909155602780548216611234179055602880549091166156781790556040516105a29061a561565b60408082526004908201527f746573740000000000000000000000000000000000000000000000000000000060608201526080602082018190526003908201527f54544b000000000000000000000000000000000000000000000000000000000060a082015260c001604051809103906000f080158015610627573d6000803e3d6000fd5b50602480547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039290921691909117905560405161066c9061a561565b604080825260049082018190527f7a6574610000000000000000000000000000000000000000000000000000000060608301526080602083018190528201527f5a4554410000000000000000000000000000000000000000000000000000000060a082015260c001604051809103906000f0801580156106f0573d6000803e3d6000fd5b50602580547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03928316908117909155604080518082018252600e81527f4761746577617945564d2e736f6c0000000000000000000000000000000000006020820152602854602654925190851660248201526044810193909352921660648201526107df919060840160408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fc0c53b8b000000000000000000000000000000000000000000000000000000001790526163f5565b601f80547fffffffffffffffffffffff0000000000000000000000000000000000000000ff166101006001600160a01b0393841681029190911791829055602080549190920483167fffffffffffffffffffffffff0000000000000000000000000000000000000000909116811790915560285460265460405192939182169291169061086b9061a56f565b6001600160a01b03938416815291831660208301529091166040820152606001604051809103906000f0801580156108a7573d6000803e3d6000fd5b50602280547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392831617905560205460255460285460265460405193851694928316939183169216906109029061a57d565b6001600160a01b039485168152928416602084015290831660408301529091166060820152608001604051809103906000f080158015610946573d6000803e3d6000fd5b50602380547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039290921691909117905560405161098b9061a58b565b604051809103906000f0801580156109a7573d6000803e3d6000fd5b50602180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039283161790556028546040517fc88a5e6d00000000000000000000000000000000000000000000000000000000815291166004820152670de0b6b3a76400006024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c88a5e6d90604401600060405180830381600087803b158015610a5357600080fd5b505af1158015610a67573d6000803e3d6000fd5b50506026546040517f06447d560000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506306447d569150602401600060405180830381600087803b158015610add57600080fd5b505af1158015610af1573d6000803e3d6000fd5b50506020546022546040517fae7a3a6f0000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201529116925063ae7a3a6f9150602401600060405180830381600087803b158015610b5757600080fd5b505af1158015610b6b573d6000803e3d6000fd5b50506020546023546040517f10188aef0000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152911692506310188aef9150602401600060405180830381600087803b158015610bd157600080fd5b505af1158015610be5573d6000803e3d6000fd5b5050602254602480546040517f9b19251a0000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015292169350639b19251a925001600060405180830381600087803b158015610c4a57600080fd5b505af1158015610c5e573d6000803e3d6000fd5b505050507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b03166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610cc057600080fd5b505af1158015610cd4573d6000803e3d6000fd5b5050602480546026546040517f40c10f190000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620f4240938101939093521692506340c10f199150604401600060405180830381600087803b158015610d4557600080fd5b505af1158015610d59573d6000803e3d6000fd5b5050602480546022546040517fa9059cbb0000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201526207a1209381019390935216925063a9059cbb91506044016020604051808303816000875af1158015610dcf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610df3919061aa00565b506028546040517fc88a5e6d0000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152670de0b6b3a76400006024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c88a5e6d906044015b600060405180830381600087803b158015610e7557600080fd5b505af1158015610e89573d6000803e3d6000fd5b50505050565b60248054602754604051620186a09381018490526001600160a01b0392831660448201529116606482015260009060840160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fc513169100000000000000000000000000000000000000000000000000000000179052602654905163ca669fa760e01b81526001600160a01b039091166004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa7906024015b600060405180830381600087803b158015610f7457600080fd5b505af1158015610f88573d6000803e3d6000fd5b5050602654604080516001600160a01b0390921660248301527f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e460448084019190915281518084039091018152606490920181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb39250611073919060040161aa22565b600060405180830381600087803b15801561108d57600080fd5b505af11580156110a1573d6000803e3d6000fd5b50506022546024546021546040517f21fc65f20000000000000000000000000000000000000000000000000000000081526001600160a01b0393841695506321fc65f294506110fe9392831692909116908790879060040161aa35565b600060405180830381600087803b15801561111857600080fd5b505af115801561112c573d6000803e3d6000fd5b505050505050565b6024805460275460405160009381018490526001600160a01b03928316604482015291166064820152819060840160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f357fc5a200000000000000000000000000000000000000000000000000000000179052602854905163ca669fa760e01b81526001600160a01b039091166004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa7906024015b600060405180830381600087803b15801561121657600080fd5b505af115801561122a573d6000803e3d6000fd5b5050604051630618f58760e51b81527f951e19ed000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401611073565b606060168054806020026020016040519081016040528092919081815260200182805480156112dd57602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116112bf575b5050505050905090565b6022546025546040517fd936547e0000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152600092919091169063d936547e90602401602060405180830381865afa158015611351573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611375919061aa00565b9050611382600082616414565b6022546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b15801561141057600080fd5b505af1158015611424573d6000803e3d6000fd5b50506025546040516001600160a01b0390911692507faab7954e9d246b167ef88aeddad35209ca2489d95a8aeb59e288d9b19fae5a549150600090a260265460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156114b957600080fd5b505af11580156114cd573d6000803e3d6000fd5b50506022546025546040517f9b19251a0000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015291169250639b19251a9150602401600060405180830381600087803b15801561153357600080fd5b505af1158015611547573d6000803e3d6000fd5b50506022546025546040517fd936547e0000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201529116925063d936547e9150602401602060405180830381865afa1580156115b0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115d4919061aa00565b90506115e1600182616414565b50565b6060601e805480602002602001604051908101604052809291908181526020016000905b8282101561171d57600084815260208082206040805180820182526002870290920180546001600160a01b03168352600181018054835181870281018701909452808452939591948681019491929084015b828210156117065783829060005260206000200180546116799061aa6c565b80601f01602080910402602001604051908101604052809291908181526020018280546116a59061aa6c565b80156116f25780601f106116c7576101008083540402835291602001916116f2565b820191906000526020600020905b8154815290600101906020018083116116d557829003601f168201915b50505050508152602001906001019061165a565b505050508152505081526020019060010190611608565b50505050905090565b60405163ca669fa760e01b81526101236004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561177457600080fd5b505af1158015611788573d6000803e3d6000fd5b50506040805161012360248201527f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a60448083019190915282518083039091018152606490910182526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f0000000000000000000000000000000000000000000000000000000017905290517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb39250611869919060040161aa22565b600060405180830381600087803b15801561188357600080fd5b505af1158015611897573d6000803e3d6000fd5b50506022546025546040517f9b19251a0000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015291169250639b19251a9150602401610e5b565b606060188054806020026020016040519081016040528092919081815260200182805480156112dd576020028201919060005260206000209081546001600160a01b031681526001909101906020018083116112bf575050505050905090565b602480546027546040516370a0823160e01b81526001600160a01b039182166004820152620186a09360009392909216916370a082319101602060405180830381865afa15801561199d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119c1919061aab9565b90506119ce816000616496565b602480546022546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa158015611a1e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a42919061aab9565b6027546040516001600160a01b0390911660248201526044810185905290915060009060640160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb0000000000000000000000000000000000000000000000000000000017905260245490517ff30c7ba3000000000000000000000000000000000000000000000000000000008152919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f30c7ba391611b25916001600160a01b039190911690600090869060040161aad2565b600060405180830381600087803b158015611b3f57600080fd5b505af1158015611b53573d6000803e3d6000fd5b50506022546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b158015611be557600080fd5b505af1158015611bf9573d6000803e3d6000fd5b50506027546024546040518881526001600160a01b039283169450911691507f9b1bfa7fa9ee420a16e124f794c35ac9f90472acc99140eb2f6447c714cad8eb9060200160405180910390a360285460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015611c9e57600080fd5b505af1158015611cb2573d6000803e3d6000fd5b5050602254602480546027546040517fd9caed120000000000000000000000000000000000000000000000000000000081526001600160a01b0392831660048201529082169281019290925260448201899052909116925063d9caed129150606401600060405180830381600087803b158015611d2e57600080fd5b505af1158015611d42573d6000803e3d6000fd5b5050602480546027546040516370a0823160e01b81526001600160a01b03918216600482015260009550911692506370a082319101602060405180830381865afa158015611d94573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611db8919061aab9565b9050611dc48186616496565b602480546022546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa158015611e14573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e38919061aab9565b9050611e4d81611e48888761ab29565b616496565b602480546020546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa158015611e9d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ec1919061aab9565b9050611ece816000616496565b50505050505050565b60248054602754604051620186a09381018490526001600160a01b0392831660448201529116606482015260009060840160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f357fc5a200000000000000000000000000000000000000000000000000000000179052602654905163ca669fa760e01b81526001600160a01b039091166004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401610f5a565b606060178054806020026020016040519081016040528092919081815260200182805480156112dd576020028201919060005260206000209081546001600160a01b031681526001909101906020018083116112bf575050505050905090565b604051630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b15801561207257600080fd5b505af1158015612086573d6000803e3d6000fd5b5050602854602654604051600094508493506001600160a01b0392831692909116906120b19061a56f565b6001600160a01b03938416815291831660208301529091166040820152606001604051809103906000f0801580156120ed573d6000803e3d6000fd5b50604051630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b15801561215d57600080fd5b505af1158015612171573d6000803e3d6000fd5b50506020546026546040516001600160a01b039283169450600093509116906121999061a56f565b6001600160a01b03938416815291831660208301529091166040820152606001604051809103906000f0801580156121d5573d6000803e3d6000fd5b50604051630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b15801561224557600080fd5b505af1158015612259573d6000803e3d6000fd5b50506020546028546040516001600160a01b039283169450911691506000906122819061a56f565b6001600160a01b03938416815291831660208301529091166040820152606001604051809103906000f0801580156122bd573d6000803e3d6000fd5b506020546028546026546040519394506001600160a01b03928316939183169216906122e89061a56f565b6001600160a01b03938416815291831660208301529091166040820152606001604051809103906000f080158015612324573d6000803e3d6000fd5b505050565b6024805460275460405160019381018490526001600160a01b0392831660448201529116606482015260009060840160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f357fc5a200000000000000000000000000000000000000000000000000000000179052602854905163ca669fa760e01b81526001600160a01b039091166004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561240b57600080fd5b505af115801561241f573d6000803e3d6000fd5b5050604051630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b15801561248f57600080fd5b505af11580156124a3573d6000803e3d6000fd5b50506022546024546040517f21fc65f20000000000000000000000000000000000000000000000000000000081526001600160a01b0392831694506321fc65f293506110fe92909116906000908790879060040161aa35565b6060601b805480602002602001604051908101604052809291908181526020016000905b8282101561171d57838290600052602060002090600202016040518060400160405290816000820180546125539061aa6c565b80601f016020809104026020016040519081016040528092919081815260200182805461257f9061aa6c565b80156125cc5780601f106125a1576101008083540402835291602001916125cc565b820191906000526020600020905b8154815290600101906020018083116125af57829003601f168201915b505050505081526020016001820180548060200260200160405190810160405280929190818152602001828054801561266657602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190600401906020826003010492830192600103820291508084116126135790505b50505050508152505081526020019060010190612520565b6024805460275460405160009381018490526001600160a01b03928316604482015291166064820152819060840160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fc513169100000000000000000000000000000000000000000000000000000000179052602854905163ca669fa760e01b81526001600160a01b039091166004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa7906024016111fc565b6040517f68656c6c6f0000000000000000000000000000000000000000000000000000006020820152620186a09060009060250160408051808303601f1901815290829052602480546021546370a0823160e01b85526001600160a01b0390811660048601529294506000939216916370a082319101602060405180830381865afa1580156127dd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612801919061aab9565b905061280e816000616496565b602480546022546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa15801561285e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612882919061aab9565b6020546040516001600160a01b0390911660248201526044810186905290915060009060640160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb0000000000000000000000000000000000000000000000000000000017905260245490517ff30c7ba3000000000000000000000000000000000000000000000000000000008152919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f30c7ba391612965916001600160a01b039190911690600090869060040161aad2565b600060405180830381600087803b15801561297f57600080fd5b505af1158015612993573d6000803e3d6000fd5b50506021546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b158015612a2557600080fd5b505af1158015612a39573d6000803e3d6000fd5b50506020546040517f0d3f65f00e631663aa85c96330b5c7a83bb29af3630c0063776f985edc3037aa9350612a7c92506001600160a01b0390911690879061ab3c565b60405180910390a16020546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b158015612b1257600080fd5b505af1158015612b26573d6000803e3d6000fd5b50506021546024546040516001600160a01b039283169450911691507f723fc7be2448075379e4fdf1e6bf5fead954d2668d2da05dcb44ccfec4beeda790612b71908990899061ab5e565b60405180910390a36022546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b158015612c0757600080fd5b505af1158015612c1b573d6000803e3d6000fd5b50506021546024546040516001600160a01b039283169450911691507fb9d4efa96044e5f5e03e696fa9ae2ff66911cc27e8a637c3627c75bc5b2241c890612c66908990899061ab5e565b60405180910390a360285460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015612cc757600080fd5b505af1158015612cdb573d6000803e3d6000fd5b50506022546024546021546040517fc8a023620000000000000000000000000000000000000000000000000000000081526001600160a01b03938416955063c8a023629450612d389392831692909116908a908a9060040161aa35565b600060405180830381600087803b158015612d5257600080fd5b505af1158015612d66573d6000803e3d6000fd5b5050602480546021546040516370a0823160e01b81526001600160a01b03918216600482015260009550911692506370a0823191015b602060405180830381865afa158015612db9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ddd919061aab9565b9050612de98187616496565b602480546022546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa158015612e39573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e5d919061aab9565b9050612e6d81611e48898761ab29565b602480546020546021546040517fdd62ed3e0000000000000000000000000000000000000000000000000000000081526001600160a01b0392831660048201529082169381019390935260009291169063dd62ed3e90604401602060405180830381865afa158015612ee3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f07919061aab9565b9050612f14816000616496565b602480546020546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa158015612f64573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f88919061aab9565b9050612f95816000616496565b505050505050505050565b6040517f68656c6c6f000000000000000000000000000000000000000000000000000000602082015260019060009060250160408051808303601f190181529082905260285463ca669fa760e01b83526001600160a01b031660048301529150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561303957600080fd5b505af115801561304d573d6000803e3d6000fd5b5050604051630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b1580156130bd57600080fd5b505af11580156130d1573d6000803e3d6000fd5b50506022546024546040517fc8a023620000000000000000000000000000000000000000000000000000000081526001600160a01b03928316945063c8a0236293506110fe92909116906000908790879060040161aa35565b6028546040517f06447d560000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906306447d5690602401600060405180830381600087803b15801561319c57600080fd5b505af11580156131b0573d6000803e3d6000fd5b5050602254602480546040517f9a5904270000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015292169350639a590427925001600060405180830381600087803b15801561321557600080fd5b505af1158015613229573d6000803e3d6000fd5b5050604051630618f58760e51b81527f584a7938000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b15801561329957600080fd5b505af11580156132ad573d6000803e3d6000fd5b5050602254602480546027546040517fd9caed120000000000000000000000000000000000000000000000000000000081526001600160a01b0392831660048201529082169281019290925260016044830152909116925063d9caed129150606401600060405180830381600087803b15801561332957600080fd5b505af115801561333d573d6000803e3d6000fd5b505050507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b03166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610e7557600080fd5b6060601a805480602002602001604051908101604052809291908181526020016000905b8282101561171d5783829060005260206000200180546133e29061aa6c565b80601f016020809104026020016040519081016040528092919081815260200182805461340e9061aa6c565b801561345b5780601f106134305761010080835404028352916020019161345b565b820191906000526020600020905b81548152906001019060200180831161343e57829003601f168201915b5050505050815260200190600101906133c3565b604051630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b1580156134db57600080fd5b505af11580156134ef573d6000803e3d6000fd5b50506022546040517f9a590427000000000000000000000000000000000000000000000000000000008152600060048201526001600160a01b039091169250639a5904279150602401610e5b565b6060601d805480602002602001604051908101604052809291908181526020016000905b8282101561171d5760008481526020908190206040805180820182526002860290920180546001600160a01b0316835260018101805483518187028101870190945280845293949193858301939283018282801561362057602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190600401906020826003010492830192600103820291508084116135cd5790505b50505050508152505081526020019060010190613561565b602480546027546040516001938101939093526001600160a01b03918216604484015216606482015260009060840160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f357fc5a20000000000000000000000000000000000000000000000000000000017905260285490517f06447d560000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d906306447d5690602401600060405180830381600087803b15801561373357600080fd5b505af1158015613747573d6000803e3d6000fd5b5050602254602480546040517f9a5904270000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015292169350639a590427925001600060405180830381600087803b1580156137ac57600080fd5b505af11580156137c0573d6000803e3d6000fd5b5050604051630618f58760e51b81527f584a7938000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b15801561383057600080fd5b505af1158015613844573d6000803e3d6000fd5b50506022546024546021546040517f21fc65f20000000000000000000000000000000000000000000000000000000081526001600160a01b0393841695506321fc65f294506138a2939283169290911690600190879060040161aa35565b600060405180830381600087803b1580156138bc57600080fd5b505af11580156138d0573d6000803e3d6000fd5b505050507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b03166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561393257600080fd5b505af1158015613946573d6000803e3d6000fd5b5050505050565b604051630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b1580156139b957600080fd5b505af11580156139cd573d6000803e3d6000fd5b50506022546040517f9b19251a000000000000000000000000000000000000000000000000000000008152600060048201526001600160a01b039091169250639b19251a9150602401610e5b565b604080516004808252602480830184526020830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f6ed7016900000000000000000000000000000000000000000000000000000000179052805460275494516370a0823160e01b81526001600160a01b0395861693810193909352620186a0946000939116916370a082319101602060405180830381865afa158015613ac5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613ae9919061aab9565b9050613af6816000616496565b602480546022546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa158015613b46573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b6a919061aab9565b6020546040516001600160a01b0390911660248201526044810186905290915060009060640160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb0000000000000000000000000000000000000000000000000000000017905260245490517ff30c7ba3000000000000000000000000000000000000000000000000000000008152919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f30c7ba391613c4d916001600160a01b039190911690600090869060040161aad2565b600060405180830381600087803b158015613c6757600080fd5b505af1158015613c7b573d6000803e3d6000fd5b50506021546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b158015613d0d57600080fd5b505af1158015613d21573d6000803e3d6000fd5b5050602080546040516001600160a01b0390911681527fbcaadb46b82a48af60b608f58959ae6b8310d1b0a0d094c2e9ec3208ed39f2a0935001905060405180910390a16022546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b158015613df357600080fd5b505af1158015613e07573d6000803e3d6000fd5b50506021546024546040516001600160a01b039283169450911691507f85b5be9cf454e05e0bddf49315178102227c312078eefa3c00294fb4d912ae4e90613e52908990899061ab5e565b60405180910390a360285460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015613eb357600080fd5b505af1158015613ec7573d6000803e3d6000fd5b50506022546024546021546040517f21fc65f20000000000000000000000000000000000000000000000000000000081526001600160a01b0393841695506321fc65f29450613f249392831692909116908a908a9060040161aa35565b600060405180830381600087803b158015613f3e57600080fd5b505af1158015613f52573d6000803e3d6000fd5b5050602480546027546040516370a0823160e01b81526001600160a01b03918216600482015260009550911692506370a082319101602060405180830381865afa158015613fa4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613fc8919061aab9565b9050613fd5816000616496565b602480546022546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa158015614025573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614049919061aab9565b9050612e6d8185616496565b6040517f68656c6c6f0000000000000000000000000000000000000000000000000000006020820152620186a09060009060250160408051808303601f190181529082905260265463ca669fa760e01b83526001600160a01b031660048301529150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156140f057600080fd5b505af1158015614104573d6000803e3d6000fd5b5050602654604080516001600160a01b0390921660248301527f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e460448084019190915281518084039091018152606490920181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb392506141ef919060040161aa22565b600060405180830381600087803b15801561420957600080fd5b505af115801561421d573d6000803e3d6000fd5b50506022546024546021546040517fc8a023620000000000000000000000000000000000000000000000000000000081526001600160a01b03938416955063c8a0236294506110fe9392831692909116908790879060040161aa35565b6060601c805480602002602001604051908101604052809291908181526020016000905b8282101561171d5760008481526020908190206040805180820182526002860290920180546001600160a01b0316835260018101805483518187028101870190945280845293949193858301939283018282801561435d57602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168152602001906004019060208260030104928301926001038202915080841161430a5790505b5050505050815250508152602001906001019061429e565b60606019805480602002602001604051908101604052809291908181526020016000905b8282101561171d5783829060005260206000200180546143b89061aa6c565b80601f01602080910402602001604051908101604052809291908181526020018280546143e49061aa6c565b80156144315780601f1061440657610100808354040283529160200191614431565b820191906000526020600020905b81548152906001019060200180831161441457829003601f168201915b505050505081526020019060010190614399565b60085460009060ff161561445d575060085460ff1690565b6040517f667f9d70000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d600482018190527f6661696c65640000000000000000000000000000000000000000000000000000602483015260009163667f9d7090604401602060405180830381865afa1580156144ee573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614512919061aab9565b1415905090565b60285460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561457257600080fd5b505af1158015614586573d6000803e3d6000fd5b5050602854604080516001600160a01b0390921660248301527f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a60448084019190915281518084039091018152606490920181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb39250614671919060040161aa22565b600060405180830381600087803b15801561468b57600080fd5b505af115801561469f573d6000803e3d6000fd5b50505050602260009054906101000a90046001600160a01b03166001600160a01b0316638456cb596040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156146f357600080fd5b505af1158015614707573d6000803e3d6000fd5b505060285460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b15801561476457600080fd5b505af1158015614778573d6000803e3d6000fd5b5050602854604080516001600160a01b0390921660248301527f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a60448084019190915281518084039091018152606490920181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb39250614863919060040161aa22565b600060405180830381600087803b15801561487d57600080fd5b505af1158015614891573d6000803e3d6000fd5b50505050602060009054906101000a90046001600160a01b03166001600160a01b0316633f4ba83a6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156148e557600080fd5b505af11580156148f9573d6000803e3d6000fd5b505060265460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b15801561495657600080fd5b505af115801561496a573d6000803e3d6000fd5b50505050602260009054906101000a90046001600160a01b03166001600160a01b0316638456cb596040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156149be57600080fd5b505af11580156149d2573d6000803e3d6000fd5b505060248054602754604051620186a09381018490526001600160a01b039283166044820152911660648201529092506000915060840160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f357fc5a20000000000000000000000000000000000000000000000000000000017905251630618f58760e51b81527fd93c0665000000000000000000000000000000000000000000000000000000006004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b158015614ace57600080fd5b505af1158015614ae2573d6000803e3d6000fd5b505060285460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b158015614b3f57600080fd5b505af1158015614b53573d6000803e3d6000fd5b50506022546024546021546040517f21fc65f20000000000000000000000000000000000000000000000000000000081526001600160a01b0393841695506321fc65f29450614bb09392831692909116908790879060040161aa35565b600060405180830381600087803b158015614bca57600080fd5b505af1158015614bde573d6000803e3d6000fd5b505060265460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b158015614c3b57600080fd5b505af1158015614c4f573d6000803e3d6000fd5b50505050602260009054906101000a90046001600160a01b03166001600160a01b0316633f4ba83a6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015614ca357600080fd5b505af1158015614cb7573d6000803e3d6000fd5b5050602480546027546040516370a0823160e01b81526001600160a01b03918216600482015260009550911692506370a0823191015b602060405180830381865afa158015614d0a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614d2e919061aab9565b9050614d3b816000616496565b602480546022546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa158015614d8b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614daf919061aab9565b6020546040516001600160a01b0390911660248201526044810186905290915060009060640160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb0000000000000000000000000000000000000000000000000000000017905260245490517ff30c7ba3000000000000000000000000000000000000000000000000000000008152919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f30c7ba391614e92916001600160a01b039190911690600090869060040161aad2565b600060405180830381600087803b158015614eac57600080fd5b505af1158015614ec0573d6000803e3d6000fd5b50506021546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b158015614f5257600080fd5b505af1158015614f66573d6000803e3d6000fd5b505060208054602454602754604080516001600160a01b0394851681529485018c905291831684830152919091166060830152517f2b58128f24a9f59127cc5b5430d70542b22220f2d9adaa86e442b816ab98af609350908190036080019150a16022546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b15801561505557600080fd5b505af1158015615069573d6000803e3d6000fd5b50506021546024546040516001600160a01b039283169450911691507f85b5be9cf454e05e0bddf49315178102227c312078eefa3c00294fb4d912ae4e906150b4908990899061ab5e565b60405180910390a360285460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561511557600080fd5b505af1158015615129573d6000803e3d6000fd5b50506022546024546021546040517f21fc65f20000000000000000000000000000000000000000000000000000000081526001600160a01b0393841695506321fc65f294506151869392831692909116908a908a9060040161aa35565b600060405180830381600087803b1580156151a057600080fd5b505af11580156151b4573d6000803e3d6000fd5b5050602480546027546040516370a0823160e01b81526001600160a01b03918216600482015260009550911692506370a082319101612d9c565b60248054602754604051620186a09381018490526001600160a01b0392831660448201529116606482015260009060840160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f357fc5a2000000000000000000000000000000000000000000000000000000001790526024805460275492516370a0823160e01b81526001600160a01b0393841660048201529394506000939216916370a082319101614ced565b606060158054806020026020016040519081016040528092919081815260200182805480156112dd576020028201919060005260206000209081546001600160a01b031681526001909101906020018083116112bf575050505050905090565b600080604051602001615345907f68656c6c6f000000000000000000000000000000000000000000000000000000815260050190565b60408051808303601f190181529082905260285463ca669fa760e01b83526001600160a01b031660048301529150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156153ac57600080fd5b505af11580156153c0573d6000803e3d6000fd5b5050604051630618f58760e51b81527f951e19ed000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e091506024016141ef565b60405163ca669fa760e01b81526101236004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561546957600080fd5b505af115801561547d573d6000803e3d6000fd5b50506040805161012360248201527f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a60448083019190915282518083039091018152606490910182526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f0000000000000000000000000000000000000000000000000000000017905290517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb3925061555e919060040161aa22565b600060405180830381600087803b15801561557857600080fd5b505af115801561558c573d6000803e3d6000fd5b50506022546025546040517f9a5904270000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015291169250639a5904279150602401610e5b565b602480546027546040516001938101939093526001600160a01b03918216604484015216606482015260009060840160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f357fc5a20000000000000000000000000000000000000000000000000000000017905260285490517f06447d560000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d906306447d5690602401600060405180830381600087803b1580156156d857600080fd5b505af11580156156ec573d6000803e3d6000fd5b5050602254602480546040517f9a5904270000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015292169350639a590427925001600060405180830381600087803b15801561575157600080fd5b505af1158015615765573d6000803e3d6000fd5b5050604051630618f58760e51b81527f584a7938000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b1580156157d557600080fd5b505af11580156157e9573d6000803e3d6000fd5b50506022546024546021546040517fc8a023620000000000000000000000000000000000000000000000000000000081526001600160a01b03938416955063c8a0236294506138a2939283169290911690600190879060040161aa35565b602254602480546040517fd936547e0000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152600093919091169163d936547e9101602060405180830381865afa1580156158b0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906158d4919061aa00565b90506158e1600182616414565b6022546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b15801561596f57600080fd5b505af1158015615983573d6000803e3d6000fd5b50506024546040516001600160a01b0390911692507f51085ddf9ebdded84b76e829eb58c4078e4b5bdf97d9a94723f336039da467919150600090a260265460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015615a1857600080fd5b505af1158015615a2c573d6000803e3d6000fd5b5050602254602480546040517f9a5904270000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015292169350639a590427925001600060405180830381600087803b158015615a9157600080fd5b505af1158015615aa5573d6000803e3d6000fd5b5050602254602480546040517fd936547e0000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201529216935063d936547e925001602060405180830381865afa158015615b0d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190615b31919061aa00565b90506115e1600082616414565b60248054602754604051620186a09381018490526001600160a01b0392831660448201529116606482015260009060840160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fc5131691000000000000000000000000000000000000000000000000000000001790526024805460275492516370a0823160e01b81526001600160a01b0393841660048201529394506000939216916370a082319101602060405180830381865afa158015615c17573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190615c3b919061aab9565b9050615c48816000616496565b602480546022546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa158015615c98573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190615cbc919061aab9565b6020546040516001600160a01b0390911660248201526044810186905290915060009060640160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb0000000000000000000000000000000000000000000000000000000017905260245490517ff30c7ba3000000000000000000000000000000000000000000000000000000008152919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f30c7ba391615d9f916001600160a01b039190911690600090869060040161aad2565b600060405180830381600087803b158015615db957600080fd5b505af1158015615dcd573d6000803e3d6000fd5b50506021546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b158015615e5f57600080fd5b505af1158015615e73573d6000803e3d6000fd5b50506020547f2b58128f24a9f59127cc5b5430d70542b22220f2d9adaa86e442b816ab98af6092506001600160a01b03169050615eb160028861ab77565b602454602754604080516001600160a01b03958616815260208101949094529184168383015292909216606082015290519081900360800190a16022546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b158015615f7957600080fd5b505af1158015615f8d573d6000803e3d6000fd5b50506021546024546040516001600160a01b039283169450911691507f85b5be9cf454e05e0bddf49315178102227c312078eefa3c00294fb4d912ae4e90615fd8908990899061ab5e565b60405180910390a360285460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561603957600080fd5b505af115801561604d573d6000803e3d6000fd5b50506022546024546021546040517f21fc65f20000000000000000000000000000000000000000000000000000000081526001600160a01b0393841695506321fc65f294506160aa9392831692909116908a908a9060040161aa35565b600060405180830381600087803b1580156160c457600080fd5b505af11580156160d8573d6000803e3d6000fd5b5050602480546027546040516370a0823160e01b81526001600160a01b03918216600482015260009550911692506370a082319101602060405180830381865afa15801561612a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061614e919061aab9565b905061615f81611e4860028961ab77565b602480546022546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa1580156161af573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906161d3919061aab9565b9050612e6d816161e460028a61ab77565b611e48908761ab29565b60265460405163ca669fa760e01b81526001600160a01b039091166004820152620186a090737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561624c57600080fd5b505af1158015616260573d6000803e3d6000fd5b5050602654604080516001600160a01b0390921660248301527f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e460448084019190915281518084039091018152606490920181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb3925061634b919060040161aa22565b600060405180830381600087803b15801561636557600080fd5b505af1158015616379573d6000803e3d6000fd5b5050602254602480546027546040517fd9caed120000000000000000000000000000000000000000000000000000000081526001600160a01b0392831660048201529082169281019290925260448201869052909116925063d9caed129150606401600060405180830381600087803b15801561393257600080fd5b60006163ff61a599565b61640a8484836164ee565b9150505b92915050565b6040517ff7fe347700000000000000000000000000000000000000000000000000000000815282151560048201528115156024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063f7fe3477906044015b60006040518083038186803b15801561648257600080fd5b505afa15801561112c573d6000803e3d6000fd5b6040517f98296c540000000000000000000000000000000000000000000000000000000081526004810183905260248101829052737109709ecfa91a80626ff3989d68f67f5b1dd12d906398296c549060440161646a565b6000806164fb8584616569565b905061655e6040518060400160405280601d81526020017f4552433139363750726f78792e736f6c3a4552433139363750726f7879000000815250828660405160200161654992919061ab3c565b60405160208183030381529060405285616575565b9150505b9392505050565b600061656283836165a3565b60c081015151600090156165995761659284848460c001516165be565b9050616562565b6165928484616764565b60006165af838361684f565b61656283836020015184616575565b6000806165c961685f565b905060006165d78683616932565b905060006165ee8260600151836020015185616dd8565b905060006165fe83838989616fea565b9050600061660b82617e67565b602081015181519192509060030b1561667e5789826040015160405160200161663592919061abb2565b60408051601f19818403018152908290527f08c379a00000000000000000000000000000000000000000000000000000000082526166759160040161aa22565b60405180910390fd5b60006166c16040518060400160405280601581526020017f4465706c6f79656420746f20616464726573733a200000000000000000000000815250836001618036565b6040517fc6ce059d000000000000000000000000000000000000000000000000000000008152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c6ce059d9061671490849060040161aa22565b602060405180830381865afa158015616731573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190616755919061ac33565b9b9a5050505050505050505050565b6040517f8d1cc9250000000000000000000000000000000000000000000000000000000081526000908190737109709ecfa91a80626ff3989d68f67f5b1dd12d90638d1cc925906167b990879060040161aa22565b600060405180830381865afa1580156167d6573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526167fe919081019061ad44565b9050600061682c828560405160200161681892919061ad79565b604051602081830303815290604052618236565b90506001600160a01b03811661640a57848460405160200161663592919061ada8565b61685b82826000618249565b5050565b604080518082018252600381527f6f75740000000000000000000000000000000000000000000000000000000000602082015290517fd145736c000000000000000000000000000000000000000000000000000000008152606091737109709ecfa91a80626ff3989d68f67f5b1dd12d91829063d145736c906168e690849060040161ae53565b600060405180830381865afa158015616903573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261692b919081019061ae9a565b9250505090565b6169646040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b6000737109709ecfa91a80626ff3989d68f67f5b1dd12d90506169af6040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b6169b88561834c565b602082015260006169c886618731565b90506000836001600160a01b031663d930a0e66040518163ffffffff1660e01b8152600401600060405180830381865afa158015616a0a573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052616a32919081019061ae9a565b86838560200151604051602001616a4c949392919061aee3565b60408051601f19818403018152908290527f60f9bb1100000000000000000000000000000000000000000000000000000000825291506000906001600160a01b038616906360f9bb1190616aa490859060040161aa22565b600060405180830381865afa158015616ac1573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052616ae9919081019061ae9a565b6040517fdb4235f60000000000000000000000000000000000000000000000000000000081529091506001600160a01b0386169063db4235f690616b3190849060040161afe7565b602060405180830381865afa158015616b4e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190616b72919061aa00565b616b875781604051602001616635919061b039565b6040517f49c4fac80000000000000000000000000000000000000000000000000000000081526001600160a01b038616906349c4fac890616bcc90849060040161b0cb565b600060405180830381865afa158015616be9573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052616c11919081019061ae9a565b84526040517fdb4235f60000000000000000000000000000000000000000000000000000000081526001600160a01b0386169063db4235f690616c5890849060040161b11d565b602060405180830381865afa158015616c75573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190616c99919061aa00565b15616d2e576040517f49c4fac80000000000000000000000000000000000000000000000000000000081526001600160a01b038616906349c4fac890616ce390849060040161b11d565b600060405180830381865afa158015616d00573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052616d28919081019061ae9a565b60408501525b846001600160a01b03166349c4fac8828660000151604051602001616d53919061b16f565b6040516020818303038152906040526040518363ffffffff1660e01b8152600401616d7f92919061b1db565b600060405180830381865afa158015616d9c573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052616dc4919081019061ae9a565b606085015250608083015250949350505050565b60408051600480825260a0820190925260609160009190816020015b6060815260200190600190039081616df45790505090506040518060400160405280600481526020017f677265700000000000000000000000000000000000000000000000000000000081525081600081518110616e5457616e5461b200565b60200260200101819052506040518060400160405280600381526020017f2d726c000000000000000000000000000000000000000000000000000000000081525081600181518110616ea857616ea861b200565b602002602001018190525084604051602001616ec4919061b22f565b60405160208183030381529060405281600281518110616ee657616ee661b200565b602002602001018190525082604051602001616f02919061b29b565b60405160208183030381529060405281600381518110616f2457616f2461b200565b60200260200101819052506000616f3a82617e67565b602080820151604080518082018252600581527f2e6a736f6e0000000000000000000000000000000000000000000000000000008185019081528251808401845260008082529086015282518084019093529051825292810192909252919250616fcb90604080518082018252600080825260209182015281518083019092528451825280850190820152906189b4565b616fe05785604051602001616635919061b2dc565b9695505050505050565b60a0810151604080518082018252600080825260209182015281518083019092528251808352928101910152606090737109709ecfa91a80626ff3989d68f67f5b1dd12d901561703a565b511590565b6171ae578260200151156170f6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605860248201527f54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f742060448201527f62652075736564207768656e207468652060736b6970566572696679536f757260648201527f6365436f646560206f7074696f6e206973206074727565600000000000000000608482015260a401616675565b8260c00151156171ae576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605360248201527f54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f742060448201527f62652075736564207768656e207468652060736b69704c6963656e736554797060648201527f6560206f7074696f6e2069732060747275656000000000000000000000000000608482015260a401616675565b6040805160ff8082526120008201909252600091816020015b60608152602001906001900390816171c757905050905060006040518060400160405280600381526020017f6e707800000000000000000000000000000000000000000000000000000000008152508282806172229061b36d565b935060ff16815181106172375761723761b200565b60200260200101819052506040518060400160405280600d81526020017f302e302e312d616c7068612e3700000000000000000000000000000000000000815250604051602001617288919061b38c565b6040516020818303038152906040528282806172a39061b36d565b935060ff16815181106172b8576172b861b200565b60200260200101819052506040518060400160405280600681526020017f6465706c6f7900000000000000000000000000000000000000000000000000008152508282806173059061b36d565b935060ff168151811061731a5761731a61b200565b60200260200101819052506040518060400160405280600e81526020017f2d2d636f6e74726163744e616d650000000000000000000000000000000000008152508282806173679061b36d565b935060ff168151811061737c5761737c61b200565b602002602001018190525087602001518282806173989061b36d565b935060ff16815181106173ad576173ad61b200565b60200260200101819052506040518060400160405280600e81526020017f2d2d636f6e7472616374506174680000000000000000000000000000000000008152508282806173fa9061b36d565b935060ff168151811061740f5761740f61b200565b6020908102919091010152875182826174278161b36d565b935060ff168151811061743c5761743c61b200565b60200260200101819052506040518060400160405280600981526020017f2d2d636861696e496400000000000000000000000000000000000000000000008152508282806174899061b36d565b935060ff168151811061749e5761749e61b200565b60200260200101819052506174b246618a15565b82826174bd8161b36d565b935060ff16815181106174d2576174d261b200565b60200260200101819052506040518060400160405280600f81526020017f2d2d6275696c64496e666f46696c65000000000000000000000000000000000081525082828061751f9061b36d565b935060ff16815181106175345761753461b200565b60200260200101819052508682828061754c9061b36d565b935060ff16815181106175615761756161b200565b60209081029190910101528551156176885760408051808201909152601581527f2d2d636f6e7374727563746f7242797465636f64650000000000000000000000602082015282826175b28161b36d565b935060ff16815181106175c7576175c761b200565b60209081029190910101526040517f71aad10d0000000000000000000000000000000000000000000000000000000081526001600160a01b038416906371aad10d9061761790899060040161aa22565b600060405180830381865afa158015617634573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261765c919081019061ae9a565b82826176678161b36d565b935060ff168151811061767c5761767c61b200565b60200260200101819052505b8460200151156177585760408051808201909152601281527f2d2d766572696679536f75726365436f64650000000000000000000000000000602082015282826176d18161b36d565b935060ff16815181106176e6576176e661b200565b60200260200101819052506040518060400160405280600581526020017f66616c73650000000000000000000000000000000000000000000000000000008152508282806177339061b36d565b935060ff16815181106177485761774861b200565b602002602001018190525061791f565b6177906170358660a0015160408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6178235760408051808201909152600d81527f2d2d6c6963656e73655479706500000000000000000000000000000000000000602082015282826177d38161b36d565b935060ff16815181106177e8576177e861b200565b60200260200101819052508460a00151604051602001617808919061b22f565b6040516020818303038152906040528282806177339061b36d565b8460c0015115801561786657506040808901518151808301835260008082526020918201528251808401909352815183529081019082015261786490511590565b155b1561791f5760408051808201909152600d81527f2d2d6c6963656e73655479706500000000000000000000000000000000000000602082015282826178aa8161b36d565b935060ff16815181106178bf576178bf61b200565b60200260200101819052506178d388618ab5565b6040516020016178e3919061b22f565b6040516020818303038152906040528282806178fe9061b36d565b935060ff16815181106179135761791361b200565b60200260200101819052505b6040808601518151808301835260008082526020918201528251808401909352815183529081019082015261795390511590565b6179e85760408051808201909152600b81527f2d2d72656c617965724964000000000000000000000000000000000000000000602082015282826179968161b36d565b935060ff16815181106179ab576179ab61b200565b602002602001018190525084604001518282806179c79061b36d565b935060ff16815181106179dc576179dc61b200565b60200260200101819052505b606085015115617b095760408051808201909152600681527f2d2d73616c74000000000000000000000000000000000000000000000000000060208201528282617a318161b36d565b935060ff1681518110617a4657617a4661b200565b602090810291909101015260608501516040517fb11a19e800000000000000000000000000000000000000000000000000000000815260048101919091526001600160a01b0384169063b11a19e890602401600060405180830381865afa158015617ab5573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052617add919081019061ae9a565b8282617ae88161b36d565b935060ff1681518110617afd57617afd61b200565b60200260200101819052505b60e08501515115617bb05760408051808201909152600a81527f2d2d6761734c696d69740000000000000000000000000000000000000000000060208201528282617b538161b36d565b935060ff1681518110617b6857617b6861b200565b6020026020010181905250617b848560e0015160000151618a15565b8282617b8f8161b36d565b935060ff1681518110617ba457617ba461b200565b60200260200101819052505b60e08501516020015115617c5a5760408051808201909152600a81527f2d2d67617350726963650000000000000000000000000000000000000000000060208201528282617bfd8161b36d565b935060ff1681518110617c1257617c1261b200565b6020026020010181905250617c2e8560e0015160200151618a15565b8282617c398161b36d565b935060ff1681518110617c4e57617c4e61b200565b60200260200101819052505b60e08501516040015115617d045760408051808201909152600e81527f2d2d6d617846656550657247617300000000000000000000000000000000000060208201528282617ca78161b36d565b935060ff1681518110617cbc57617cbc61b200565b6020026020010181905250617cd88560e0015160400151618a15565b8282617ce38161b36d565b935060ff1681518110617cf857617cf861b200565b60200260200101819052505b60e08501516060015115617dae5760408051808201909152601681527f2d2d6d61785072696f726974794665655065724761730000000000000000000060208201528282617d518161b36d565b935060ff1681518110617d6657617d6661b200565b6020026020010181905250617d828560e0015160600151618a15565b8282617d8d8161b36d565b935060ff1681518110617da257617da261b200565b60200260200101819052505b60008160ff1667ffffffffffffffff811115617dcc57617dcc61ac5c565b604051908082528060200260200182016040528015617dff57816020015b6060815260200190600190039081617dea5790505b50905060005b8260ff168160ff161015617e5857838160ff1681518110617e2857617e2861b200565b6020026020010151828260ff1681518110617e4557617e4561b200565b6020908102919091010152600101617e05565b5093505050505b949350505050565b617e8e6040518060600160405280600060030b815260200160608152602001606081525090565b60408051808201825260048082527f6261736800000000000000000000000000000000000000000000000000000000602083015291517fd145736c000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d92600091849163d145736c91617f149186910161b3f7565b600060405180830381865afa158015617f31573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052617f59919081019061ae9a565b90506000617f6786836195a4565b90506000846001600160a01b031663f45c1ce7836040518263ffffffff1660e01b8152600401617f97919061a8f2565b6000604051808303816000875af1158015617fb6573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052617fde919081019061b43e565b805190915060030b15801590617ff75750602081015151155b80156180065750604081015151155b15616fe0578160008151811061801e5761801e61b200565b6020026020010151604051602001616635919061b4f4565b6060600061806b8560408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6040805180820182526000808252602091820152815180830190925286518252808701908201529091506180a29082905b906196f9565b156181ff57600061811f82618119846181136180e58a60408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6040805180820182526000808252602091820152815180830190925282518252918201519181019190915290565b90619720565b90619782565b604080518082018252600181527f0a00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201529091506181839082906196f9565b156181ed57604080518082018252600181527f0a00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526181ea905b8290619807565b90505b6181f68161982d565b92505050616562565b821561821857848460405160200161663592919061b6e0565b5050604080516020810190915260008152616562565b509392505050565b6000808251602084016000f09392505050565b8160a001511561825857505050565b6000618265848484619896565b9050600061827282617e67565b602081015181519192509060030b15801561830e5750604080518082018252600781527f53554343455353000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261830e9060408051808201825260008082526020918201528151808301909252845182528085019082015261809c565b1561831b57505050505050565b6040820151511561833b578160400151604051602001616635919061b787565b80604051602001616635919061b7e5565b606060006183818360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600481527f2e736f6c00000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201529091506183e6905b82906189b4565b1561845557604080518082018252600481527f2e736f6c000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261656290618450908390619e31565b61982d565b604080518082018252600181527f3a00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526184b7905b8290619ebb565b60010361858457604080518082018252600181527f3a000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261851d906181e3565b50604080518082018252600181527f3a000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261656290618450905b8390619807565b604080518082018252600581527f2e6a736f6e000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526185e3906183df565b1561871a57604080518082018252600181527f2f0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082018190528451808601909552925184528301529061864b908390619f55565b90506000816001835161865e919061ab29565b8151811061866e5761866e61b200565b602002602001015190506187116184506186e46040518060400160405280600581526020017f2e6a736f6e00000000000000000000000000000000000000000000000000000081525060408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b60408051808201825260008082526020918201528151808301909252855182528086019082015290619e31565b95945050505050565b82604051602001616635919061b850565b50919050565b606060006187668360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600481527f2e736f6c00000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201529091506187c8906183df565b156187d6576165628161982d565b604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152618835906184b0565b60010361889f57604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616562906184509061857d565b604080518082018252600581527f2e6a736f6e000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526188fe906183df565b1561871a57604080518082018252600181527f2f00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820181905284518086019095529251845283015290618966908390619f55565b90506001815111156189a2578060028251618981919061ab29565b815181106189915761899161b200565b602002602001015192505050919050565b5082604051602001616635919061b850565b8051825160009111156189c95750600061640e565b815183516020850151600092916189df9161b92e565b6189e9919061ab29565b905082602001518103618a0057600191505061640e565b82516020840151819020912014905092915050565b60606000618a2283619ffa565b600101905060008167ffffffffffffffff811115618a4257618a4261ac5c565b6040519080825280601f01601f191660200182016040528015618a6c576020820181803683370190505b5090508181016020015b600019017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a8504945084618a7657509392505050565b604081810151815180830183526000808252602091820181905283518085018552835181529282018383015283518085018552600a81527f554e4c4943454e5345440000000000000000000000000000000000000000000081840190815285518087018752838152840192909252845180860190955251845290830152606091618b41905b829061a0dc565b15618b8157505060408051808201909152600481527f4e6f6e65000000000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600981527f556e6c6963656e7365000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152618be090618b3a565b15618c2057505060408051808201909152600981527f556e6c6963656e736500000000000000000000000000000000000000000000006020820152919050565b604080518082018252600381527f4d4954000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152618c7f90618b3a565b15618cbf57505060408051808201909152600381527f4d495400000000000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f47504c2d322e302d6f6e6c79000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152618d1e90618b3a565b80618d835750604080518082018252601081527f47504c2d322e302d6f722d6c617465720000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152618d8390618b3a565b15618dc357505060408051808201909152600981527f474e552047504c763200000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f47504c2d332e302d6f6e6c79000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152618e2290618b3a565b80618e875750604080518082018252601081527f47504c2d332e302d6f722d6c617465720000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152618e8790618b3a565b15618ec757505060408051808201909152600981527f474e552047504c763300000000000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4c47504c2d322e312d6f6e6c790000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152618f2690618b3a565b80618f8b5750604080518082018252601181527f4c47504c2d322e312d6f722d6c6174657200000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152618f8b90618b3a565b15618fcb57505060408051808201909152600c81527f474e55204c47504c76322e3100000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4c47504c2d332e302d6f6e6c79000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261902a90618b3a565b8061908f5750604080518082018252601181527f4c47504c2d332e302d6f722d6c617465720000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261908f90618b3a565b156190cf57505060408051808201909152600a81527f474e55204c47504c7633000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f4253442d322d436c6175736500000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261912e90618b3a565b1561916e57505060408051808201909152600c81527f4253442d322d436c6175736500000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f4253442d332d436c617573650000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526191cd90618b3a565b1561920d57505060408051808201909152600c81527f4253442d332d436c6175736500000000000000000000000000000000000000006020820152919050565b604080518082018252600781527f4d504c2d322e30000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261926c90618b3a565b156192ac57505060408051808201909152600781527f4d504c2d322e30000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600781527f4f534c2d332e30000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261930b90618b3a565b1561934b57505060408051808201909152600781527f4f534c2d332e30000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600a81527f4170616368652d322e3000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526193aa90618b3a565b156193ea57505060408051808201909152600a81527f4170616368652d322e30000000000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4147504c2d332e302d6f6e6c79000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261944990618b3a565b806194ae5750604080518082018252601181527f4147504c2d332e302d6f722d6c61746572000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526194ae90618b3a565b156194ee57505060408051808201909152600a81527f474e55204147504c7633000000000000000000000000000000000000000000006020820152919050565b604080518082018252600881527f4255534c2d312e310000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261954d90618b3a565b1561958d57505060408051808201909152600781527f42534c20312e31000000000000000000000000000000000000000000000000006020820152919050565b60408084015184519151616635929060200161b941565b60608060005b845181101561962f57818582815181106195c6576195c661b200565b60200260200101516040516020016195df92919061ad79565b6040516020818303038152906040529150600185516195fe919061ab29565b81146196275781604051602001619615919061baaa565b60405160208183030381529060405291505b6001016195aa565b5060408051600380825260808201909252600091816020015b606081526020019060019003908161964857905050905083816000815181106196735761967361b200565b60200260200101819052506040518060400160405280600281526020017f2d63000000000000000000000000000000000000000000000000000000000000815250816001815181106196c7576196c761b200565b602002602001018190525081816002815181106196e6576196e661b200565b6020908102919091010152949350505050565b6020808301518351835192840151600093619717929184919061a0f0565b14159392505050565b60408051808201909152600080825260208201526000619752846000015185602001518560000151866020015161a201565b9050836020015181619764919061ab29565b8451859061977390839061ab29565b90525060208401525090919050565b60408051808201909152600080825260208201528151835110156197a757508161640e565b60208083015190840151600191146197ce5750815160208481015190840151829020919020145b80156197ff578251845185906197e590839061ab29565b90525082516020850180516197fb90839061b92e565b9052505b509192915050565b604080518082019091526000808252602082015261982683838361a321565b5092915050565b60606000826000015167ffffffffffffffff81111561984e5761984e61ac5c565b6040519080825280601f01601f191660200182016040528015619878576020820181803683370190505b5090506000602082019050619826818560200151866000015161a3cc565b606060006198a261685f565b6040805160ff808252612000820190925291925060009190816020015b60608152602001906001900390816198bf57905050905060006040518060400160405280600381526020017f6e7078000000000000000000000000000000000000000000000000000000000081525082828061991a9061b36d565b935060ff168151811061992f5761992f61b200565b60200260200101819052506040518060400160405280600781526020017f5e312e33322e3300000000000000000000000000000000000000000000000000815250604051602001619980919061baeb565b60405160208183030381529060405282828061999b9061b36d565b935060ff16815181106199b0576199b061b200565b60200260200101819052506040518060400160405280600881526020017f76616c69646174650000000000000000000000000000000000000000000000008152508282806199fd9061b36d565b935060ff1681518110619a1257619a1261b200565b602002602001018190525082604051602001619a2e919061b29b565b604051602081830303815290604052828280619a499061b36d565b935060ff1681518110619a5e57619a5e61b200565b60200260200101819052506040518060400160405280600a81526020017f2d2d636f6e747261637400000000000000000000000000000000000000000000815250828280619aab9061b36d565b935060ff1681518110619ac057619ac061b200565b6020026020010181905250619ad5878461a446565b8282619ae08161b36d565b935060ff1681518110619af557619af561b200565b602090810291909101015285515115619ba15760408051808201909152600b81527f2d2d7265666572656e636500000000000000000000000000000000000000000060208201528282619b478161b36d565b935060ff1681518110619b5c57619b5c61b200565b6020026020010181905250619b7586600001518461a446565b8282619b808161b36d565b935060ff1681518110619b9557619b9561b200565b60200260200101819052505b856080015115619c0f5760408051808201909152601881527f2d2d756e73616665536b697053746f72616765436865636b000000000000000060208201528282619bea8161b36d565b935060ff1681518110619bff57619bff61b200565b6020026020010181905250619c75565b8415619c755760408051808201909152601281527f2d2d726571756972655265666572656e6365000000000000000000000000000060208201528282619c548161b36d565b935060ff1681518110619c6957619c6961b200565b60200260200101819052505b60408601515115619d115760408051808201909152600d81527f2d2d756e73616665416c6c6f770000000000000000000000000000000000000060208201528282619cbf8161b36d565b935060ff1681518110619cd457619cd461b200565b60200260200101819052508560400151828280619cf09061b36d565b935060ff1681518110619d0557619d0561b200565b60200260200101819052505b856060015115619d7b5760408051808201909152601481527f2d2d756e73616665416c6c6f7752656e616d657300000000000000000000000060208201528282619d5a8161b36d565b935060ff1681518110619d6f57619d6f61b200565b60200260200101819052505b60008160ff1667ffffffffffffffff811115619d9957619d9961ac5c565b604051908082528060200260200182016040528015619dcc57816020015b6060815260200190600190039081619db75790505b50905060005b8260ff168160ff161015619e2557838160ff1681518110619df557619df561b200565b6020026020010151828260ff1681518110619e1257619e1261b200565b6020908102919091010152600101619dd2565b50979650505050505050565b6040805180820190915260008082526020820152815183511015619e5657508161640e565b81518351602085015160009291619e6c9161b92e565b619e76919061ab29565b60208401519091506001908214619e97575082516020840151819020908220145b8015619eb257835185518690619eae90839061ab29565b9052505b50929392505050565b6000808260000151619edf856000015186602001518660000151876020015161a201565b619ee9919061b92e565b90505b83516020850151619efd919061b92e565b81116198265781619f0d8161bb30565b9250508260000151619f44856020015183619f28919061ab29565b8651619f34919061ab29565b838660000151876020015161a201565b619f4e919061b92e565b9050619eec565b60606000619f638484619ebb565b619f6e90600161b92e565b67ffffffffffffffff811115619f8657619f8661ac5c565b604051908082528060200260200182016040528015619fb957816020015b6060815260200190600190039081619fa45790505b50905060005b815181101561822e57619fd56184508686619807565b828281518110619fe757619fe761b200565b6020908102919091010152600101619fbf565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000831061a043577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef8100000000831061a06f576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc10000831061a08d57662386f26fc10000830492506010015b6305f5e100831061a0a5576305f5e100830492506008015b612710831061a0b957612710830492506004015b6064831061a0cb576064830492506002015b600a831061640e5760010192915050565b600061a0e8838361a486565b159392505050565b60008085841161a1f7576020841161a1a3576000841561a13b57600161a11786602061ab29565b61a12290600861bb4a565b61a12d90600261bc48565b61a137919061ab29565b1990505b835181168561a14a898961b92e565b61a154919061ab29565b805190935082165b81811461a18e5787841161a1765787945050505050617e5f565b8361a1808161bc54565b94505082845116905061a15c565b61a198878561b92e565b945050505050617e5f565b83832061a1b0858861ab29565b61a1ba908761b92e565b91505b85821061a1f55784822080820361a1e25761a1d8868461b92e565b9350505050617e5f565b61a1ed60018461ab29565b92505061a1bd565b505b5092949350505050565b6000838186851161a30c576020851161a2bb576000851561a24d57600161a22987602061ab29565b61a23490600861bb4a565b61a23f90600261bc48565b61a249919061ab29565b1990505b8451811660008761a25e8b8b61b92e565b61a268919061ab29565b855190915083165b82811461a2ad5781861061a2955761a2888b8b61b92e565b9650505050505050617e5f565b8561a29f8161bb30565b96505083865116905061a270565b859650505050505050617e5f565b508383206000905b61a2cd868961ab29565b821161a30a5785832080820361a2e95783945050505050617e5f565b61a2f460018561b92e565b935050818061a3029061bb30565b92505061a2c3565b505b61a316878761b92e565b979650505050505050565b6040805180820190915260008082526020820152600061a353856000015186602001518660000151876020015161a201565b60208087018051918601919091525190915061a36f908261ab29565b83528451602086015161a382919061b92e565b810361a391576000855261a3c3565b8351835161a39f919061b92e565b8551869061a3ae90839061ab29565b905250835161a3bd908261b92e565b60208601525b50909392505050565b6020811061a404578151835261a3e360208461b92e565b925061a3f060208361b92e565b915061a3fd60208261ab29565b905061a3cc565b600019811561a43357600161a41a83602061ab29565b61a4269061010061bc48565b61a430919061ab29565b90505b9151835183169219169190911790915250565b6060600061a4548484616932565b805160208083015160405193945061a46e9390910161bc6b565b60405160208183030381529060405291505092915050565b815181516000919081111561a499575081515b6020808501519084015160005b8381101561a552578251825180821461a52257600019602087101561a5015760018461a4d389602061ab29565b61a4dd919061b92e565b61a4e890600861bb4a565b61a4f390600261bc48565b61a4fd919061ab29565b1990505b818116838216818103911461a51f57975061640e9650505050505050565b50505b61a52d60208661b92e565b945061a53a60208561b92e565b9350505060208161a54b919061b92e565b905061a4a6565b5084518651616fe0919061bcc3565b610c9f806200bce483390190565b611798806200c98383390190565b61155a806200e11b83390190565b610d5e806200f67583390190565b6040518060e0016040528060608152602001606081526020016060815260200160001515815260200160001515815260200160001515815260200161a5dc61a5e1565b905290565b6040518061010001604052806000151581526020016000151581526020016060815260200160008019168152602001606081526020016060815260200160001515815260200161a5dc6040518060800160405280600081526020016000815260200160008152602001600081525090565b602080825282518282018190526000918401906040840190835b8181101561a6935783516001600160a01b031683526020938401939092019160010161a66c565b509095945050505050565b60005b8381101561a6b957818101518382015260200161a6a1565b50506000910152565b6000815180845261a6da81602086016020860161a69e565b601f01601f19169290920160200192915050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b8281101561a7ea577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452815180516001600160a01b03168652602090810151604082880181905281519088018190529101906060600582901b88018101919088019060005b8181101561a7d0577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa08a850301835261a7ba84865161a6c2565b602095860195909450929092019160010161a780565b50919750505060209485019492909201915060010161a716565b50929695505050505050565b600081518084526020840193506020830160005b8281101561a84a5781517fffffffff000000000000000000000000000000000000000000000000000000001686526020958601959091019060010161a80a565b5093949350505050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b8281101561a7ea577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452815180516040875261a8c0604088018261a6c2565b905060208201519150868103602088015261a8db818361a7f6565b96505050602093840193919091019060010161a87c565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b8281101561a7ea577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc087860301845261a95485835161a6c2565b9450602093840193919091019060010161a91a565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b8281101561a7ea577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc087860301845281516001600160a01b038151168652602081015190506040602087015261a9ea604087018261a7f6565b955050602093840193919091019060010161a991565b60006020828403121561aa1257600080fd5b8151801515811461656257600080fd5b602081526000616562602083018461a6c2565b6001600160a01b03851681526001600160a01b0384166020820152826040820152608060608201526000616fe0608083018461a6c2565b600181811c9082168061aa8057607f821691505b60208210810361872b577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006020828403121561aacb57600080fd5b5051919050565b6001600160a01b0384168152826020820152606060408201526000618711606083018461a6c2565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8181038181111561640e5761640e61aafa565b6001600160a01b0383168152604060208201526000617e5f604083018461a6c2565b828152604060208201526000617e5f604083018461a6c2565b60008261abad577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b7f4661696c656420746f206465706c6f7920636f6e74726163742000000000000081526000835161abea81601a85016020880161a69e565b7f3a20000000000000000000000000000000000000000000000000000000000000601a91840191820152835161ac2781601c84016020880161a69e565b01601c01949350505050565b60006020828403121561ac4557600080fd5b81516001600160a01b038116811461656257600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040516060810167ffffffffffffffff8111828210171561acae5761acae61ac5c565b60405290565b60008067ffffffffffffffff84111561accf5761accf61ac5c565b50604051601f19601f85018116603f0116810181811067ffffffffffffffff8211171561acfe5761acfe61ac5c565b60405283815290508082840185101561ad1657600080fd5b61822e84602083018561a69e565b600082601f83011261ad3557600080fd5b6165628383516020850161acb4565b60006020828403121561ad5657600080fd5b815167ffffffffffffffff81111561ad6d57600080fd5b61640a8482850161ad24565b6000835161ad8b81846020880161a69e565b83519083019061ad9f81836020880161a69e565b01949350505050565b7f4661696c656420746f206465706c6f7920636f6e74726163742000000000000081526000835161ade081601a85016020880161a69e565b7f207573696e6720636f6e7374727563746f722064617461202200000000000000601a91840191820152835161ae1d81603384016020880161a69e565b7f220000000000000000000000000000000000000000000000000000000000000060339290910191820152603401949350505050565b60408152600b60408201527f464f554e4452595f4f55540000000000000000000000000000000000000000006060820152608060208201526000616562608083018461a6c2565b60006020828403121561aeac57600080fd5b815167ffffffffffffffff81111561aec357600080fd5b8201601f8101841361aed457600080fd5b61640a8482516020840161acb4565b6000855161aef5818460208a0161a69e565b7f2f00000000000000000000000000000000000000000000000000000000000000908301908152855161af2f816001840160208a0161a69e565b7f2f0000000000000000000000000000000000000000000000000000000000000060019290910191820152845161af6d81600284016020890161a69e565b6001818301019150507f2f000000000000000000000000000000000000000000000000000000000000006001820152835161afaf81600284016020880161a69e565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600292909101918201526007019695505050505050565b60408152600061affa604083018461a6c2565b8281036020840152600481527f2e6173740000000000000000000000000000000000000000000000000000000060208201526040810191505092915050565b7f436f756c64206e6f742066696e642041535420696e206172746966616374200081526000825161b07181601f85016020870161a69e565b7f2e205365742060617374203d20747275656020696e20666f756e6472792e746f601f9390910192830152507f6d6c000000000000000000000000000000000000000000000000000000000000603f820152604101919050565b60408152600061b0de604083018461a6c2565b8281036020840152601181527f2e6173742e6162736f6c7574655061746800000000000000000000000000000060208201526040810191505092915050565b60408152600061b130604083018461a6c2565b8281036020840152600c81527f2e6173742e6c6963656e7365000000000000000000000000000000000000000060208201526040810191505092915050565b7f2e6d657461646174612e736f75726365732e5b2700000000000000000000000081526000825161b1a781601485016020870161a69e565b7f275d2e6b656363616b32353600000000000000000000000000000000000000006014939091019283015250602001919050565b60408152600061b1ee604083018561a6c2565b828103602084015261655e818561a6c2565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f220000000000000000000000000000000000000000000000000000000000000081526000825161b26781600185016020870161a69e565b7f22000000000000000000000000000000000000000000000000000000000000006001939091019283015250600201919050565b6000825161b2ad81846020870161a69e565b7f2f6275696c642d696e666f000000000000000000000000000000000000000000920191825250600b01919050565b7f436f756c64206e6f742066696e64206275696c642d696e666f2066696c65207781527f697468206d61746368696e6720736f7572636520636f6465206861736820666f60208201527f7220636f6e74726163742000000000000000000000000000000000000000000060408201526000825161b36081604b85016020870161a69e565b91909101604b0192915050565b600060ff821660ff810361b3835761b38361aafa565b60010192915050565b7f406f70656e7a657070656c696e2f646566656e6465722d6465706c6f792d636c81527f69656e742d636c6940000000000000000000000000000000000000000000000060208201526000825161b3ea81602985016020870161a69e565b9190910160290192915050565b60408152601660408201527f4f50454e5a455050454c494e5f424153485f50415448000000000000000000006060820152608060208201526000616562608083018461a6c2565b60006020828403121561b45057600080fd5b815167ffffffffffffffff81111561b46757600080fd5b82016060818503121561b47957600080fd5b61b48161ac8b565b81518060030b811461b49257600080fd5b8152602082015167ffffffffffffffff81111561b4ae57600080fd5b61b4ba8682850161ad24565b602083015250604082015167ffffffffffffffff81111561b4da57600080fd5b61b4e68682850161ad24565b604083015250949350505050565b7f4661696c656420746f2072756e206261736820636f6d6d616e6420776974682081527f220000000000000000000000000000000000000000000000000000000000000060208201526000825161b55281602185016020870161a69e565b7f222e20496620796f7520617265207573696e672057696e646f77732c2073657460219390910192830152507f20746865204f50454e5a455050454c494e5f424153485f5041544820656e766960418201527f726f6e6d656e74207661726961626c6520746f207468652066756c6c7920717560618201527f616c69666965642070617468206f66207468652062617368206578656375746160818201527f626c652e20466f72206578616d706c652c20696620796f75206172652075736960a18201527f6e672047697420666f722057696e646f77732c206164642074686520666f6c6c60c18201527f6f77696e67206c696e6520696e20746865202e656e762066696c65206f66207960e18201527f6f75722070726f6a65637420287573696e6720666f727761726420736c6173686101018201527f6573293a0a4f50454e5a455050454c494e5f424153485f504154483d22433a2f6101218201527f50726f6772616d2046696c65732f4769742f62696e2f6261736822000000000061014182015261015c01919050565b7f4661696c656420746f2066696e64206c696e652077697468207072656669782081527f270000000000000000000000000000000000000000000000000000000000000060208201526000835161b73e81602185016020880161a69e565b7f2720696e206f75747075743a2000000000000000000000000000000000000000602191840191820152835161b77b81602e84016020880161a69e565b01602e01949350505050565b7f4661696c656420746f2072756e2075706772616465207361666574792076616c81527f69646174696f6e3a20000000000000000000000000000000000000000000000060208201526000825161b3ea81602985016020870161a69e565b7f55706772616465207361666574792076616c69646174696f6e206661696c656481527f3a0a00000000000000000000000000000000000000000000000000000000000060208201526000825161b84381602285016020870161a69e565b9190910160220192915050565b7f436f6e7472616374206e616d652000000000000000000000000000000000000081526000825161b88881600e85016020870161a69e565b7f206d75737420626520696e2074686520666f726d6174204d79436f6e74726163600e9390910192830152507f742e736f6c3a4d79436f6e7472616374206f72204d79436f6e74726163742e73602e8201527f6f6c206f72206f75742f4d79436f6e74726163742e736f6c2f4d79436f6e7472604e8201527f6163742e6a736f6e000000000000000000000000000000000000000000000000606e820152607601919050565b8082018082111561640e5761640e61aafa565b7f53504458206c6963656e7365206964656e74696669657220000000000000000081526000835161b97981601885016020880161a69e565b7f20696e2000000000000000000000000000000000000000000000000000000000601891840191820152835161b9b681601c84016020880161a69e565b7f20646f6573206e6f74206c6f6f6b206c696b65206120737570706f7274656420601c92909101918201527f6c6963656e736520666f7220626c6f636b206578706c6f726572207665726966603c8201527f69636174696f6e2e205573652074686520606c6963656e73655479706560206f605c8201527f7074696f6e20746f20737065636966792061206c6963656e736520747970652c607c8201527f206f7220736574207468652060736b69704c6963656e73655479706560206f70609c8201527f74696f6e20746f2060747275656020746f20736b69702e00000000000000000060bc82015260d301949350505050565b6000825161babc81846020870161a69e565b7f2000000000000000000000000000000000000000000000000000000000000000920191825250600101919050565b7f406f70656e7a657070656c696e2f75706772616465732d636f7265400000000081526000825161bb2381601c85016020870161a69e565b91909101601c0192915050565b6000600019820361bb435761bb4361aafa565b5060010190565b808202811582820484141761640e5761640e61aafa565b6001815b600184111561bb9c5780850481111561bb805761bb8061aafa565b600184161561bb8e57908102905b60019390931c92800261bb65565b935093915050565b60008261bbb35750600161640e565b8161bbc05750600061640e565b816001811461bbd6576002811461bbe05761bbfc565b600191505061640e565b60ff84111561bbf15761bbf161aafa565b50506001821b61640e565b5060208310610133831016604e8410600b841016171561bc1f575081810a61640e565b61bc2c600019848461bb61565b806000190482111561bc405761bc4061aafa565b029392505050565b6000616562838361bba4565b60008161bc635761bc6361aafa565b506000190190565b6000835161bc7d81846020880161a69e565b7f3a00000000000000000000000000000000000000000000000000000000000000908301908152835161bcb781600184016020880161a69e565b01600101949350505050565b81810360008312801583831316838312821617156198265761982661aafa56fe608060405234801561001057600080fd5b50604051610c9f380380610c9f83398101604081905261002f9161010d565b8181600361003d83826101ff565b50600461004a82826101ff565b50505050506102bd565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261007b57600080fd5b81516001600160401b0381111561009457610094610054565b604051601f8201601f19908116603f011681016001600160401b03811182821017156100c2576100c2610054565b6040528181528382016020018510156100da57600080fd5b60005b828110156100f9576020818601810151838301820152016100dd565b506000918101602001919091529392505050565b6000806040838503121561012057600080fd5b82516001600160401b0381111561013657600080fd5b6101428582860161006a565b602085015190935090506001600160401b0381111561016057600080fd5b61016c8582860161006a565b9150509250929050565b600181811c9082168061018a57607f821691505b6020821081036101aa57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156101fa57806000526020600020601f840160051c810160208510156101d75750805b601f840160051c820191505b818110156101f757600081556001016101e3565b50505b505050565b81516001600160401b0381111561021857610218610054565b61022c816102268454610176565b846101b0565b6020601f82116001811461026057600083156102485750848201515b600019600385901b1c1916600184901b1784556101f7565b600084815260208120601f198516915b828110156102905787850151825560209485019460019092019101610270565b50848210156102ae5786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b6109d3806102cc6000396000f3fe608060405234801561001057600080fd5b50600436106100be5760003560e01c806340c10f191161007657806395d89b411161005b57806395d89b4114610183578063a9059cbb1461018b578063dd62ed3e1461019e57600080fd5b806340c10f191461013857806370a082311461014d57600080fd5b806318160ddd116100a757806318160ddd1461010457806323b872dd14610116578063313ce5671461012957600080fd5b806306fdde03146100c3578063095ea7b3146100e1575b600080fd5b6100cb6101e4565b6040516100d891906107bf565b60405180910390f35b6100f46100ef366004610854565b610276565b60405190151581526020016100d8565b6002545b6040519081526020016100d8565b6100f461012436600461087e565b610290565b604051601281526020016100d8565b61014b610146366004610854565b6102b4565b005b61010861015b3660046108bb565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6100cb6102c2565b6100f4610199366004610854565b6102d1565b6101086101ac3660046108dd565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6060600380546101f390610910565b80601f016020809104026020016040519081016040528092919081815260200182805461021f90610910565b801561026c5780601f106102415761010080835404028352916020019161026c565b820191906000526020600020905b81548152906001019060200180831161024f57829003601f168201915b5050505050905090565b6000336102848185856102df565b60019150505b92915050565b60003361029e8582856102f1565b6102a98585856103c5565b506001949350505050565b6102be8282610470565b5050565b6060600480546101f390610910565b6000336102848185856103c5565b6102ec83838360016104cc565b505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146103bf57818110156103b0576040517ffb8f41b200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416600482015260248101829052604481018390526064015b60405180910390fd5b6103bf848484840360006104cc565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8316610415576040517f96c6fd1e000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff8216610465576040517fec442f05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b6102ec838383610614565b73ffffffffffffffffffffffffffffffffffffffff82166104c0576040517fec442f05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b6102be60008383610614565b73ffffffffffffffffffffffffffffffffffffffff841661051c576040517fe602df05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff831661056c576040517f94280d62000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260016020908152604080832093871683529290522082905580156103bf578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161060691815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff831661064c5780600260008282546106419190610963565b909155506106fe9050565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260208190526040902054818110156106d2576040517fe450d38c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8516600482015260248101829052604481018390526064016103a7565b73ffffffffffffffffffffffffffffffffffffffff841660009081526020819052604090209082900390555b73ffffffffffffffffffffffffffffffffffffffff821661072757600280548290039055610753565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090208054820190555b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516107b291815260200190565b60405180910390a3505050565b602081526000825180602084015260005b818110156107ed57602081860181015160408684010152016107d0565b5060006040828501015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011684010191505092915050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461084f57600080fd5b919050565b6000806040838503121561086757600080fd5b6108708361082b565b946020939093013593505050565b60008060006060848603121561089357600080fd5b61089c8461082b565b92506108aa6020850161082b565b929592945050506040919091013590565b6000602082840312156108cd57600080fd5b6108d68261082b565b9392505050565b600080604083850312156108f057600080fd5b6108f98361082b565b91506109076020840161082b565b90509250929050565b600181811c9082168061092457607f821691505b60208210810361095d577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b8082018082111561028a577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea26469706673582212207e804ca539d49155d2b6bc19268ce22f9f857027c75247d69fb0d56a089c93d464736f6c634300081a003360a060405234801561001057600080fd5b5060405161179838038061179883398101604081905261002f916101e5565b60016000556002805460ff191690556001600160a01b038316158061005b57506001600160a01b038216155b8061006d57506001600160a01b038116155b1561008b5760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b0383166080526100a3600082610134565b506100ce7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a82610134565b506100f97f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e483610134565b5061011260008051602061177883398151915282610134565b5061012b60008051602061177883398151915283610134565b50505050610228565b60008281526001602090815260408083206001600160a01b038516845290915281205460ff166101bf5760008381526001602081815260408084206001600160a01b0387168086529252808420805460ff19169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45060016101c3565b5060005b92915050565b80516001600160a01b03811681146101e057600080fd5b919050565b6000806000606084860312156101fa57600080fd5b610203846101c9565b9250610211602085016101c9565b915061021f604085016101c9565b90509250925092565b60805161151961025f6000396000818161019e01528181610500015281816105620152818161099101526109f301526115196000f3fe608060405234801561001057600080fd5b506004361061016c5760003560e01c806385f438c1116100cd578063c8a0236211610081578063d936547e11610066578063d936547e14610355578063d9caed1214610378578063e63ab1e91461038b57600080fd5b8063c8a023621461032f578063d547741f1461034257600080fd5b80639a590427116100b25780639a590427146103015780639b19251a14610314578063a217fddf1461032757600080fd5b806385f438c11461029457806391d14854146102bb57600080fd5b806336568abe11610124578063570618e111610109578063570618e11461025a5780635c975abb146102815780638456cb591461028c57600080fd5b806336568abe1461023f5780633f4ba83a1461025257600080fd5b806321fc65f21161015557806321fc65f2146101e5578063248a9ca3146101fa5780632f2ff15d1461022c57600080fd5b806301ffc9a714610171578063116191b614610199575b600080fd5b61018461017f366004611224565b6103b2565b60405190151581526020015b60405180910390f35b6101c07f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610190565b6101f86101f336600461128f565b61044b565b005b61021e61020836600461132c565b6000908152600160208190526040909120015490565b604051908152602001610190565b6101f861023a366004611345565b61064c565b6101f861024d366004611345565b610678565b6101f86106d6565b61021e7f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a81565b60025460ff16610184565b6101f861070b565b61021e7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b6101846102c9366004611345565b600091825260016020908152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b6101f861030f366004611371565b61073d565b6101f8610322366004611371565b61080b565b61021e600081565b6101f861033d36600461128f565b6108dc565b6101f8610350366004611345565b610ac3565b610184610363366004611371565b60036020526000908152604090205460ff1681565b6101f861038636600461138c565b610ae9565b61021e7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061044557507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b610453610c15565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461047d81610c58565b610485610c62565b73ffffffffffffffffffffffffffffffffffffffff861660009081526003602052604090205460ff166104e4576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61052573ffffffffffffffffffffffffffffffffffffffff87167f000000000000000000000000000000000000000000000000000000000000000086610ca1565b6040517f5131ab5900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690635131ab599061059f9089908990899089908990600401611412565b600060405180830381600087803b1580156105b957600080fd5b505af11580156105cd573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167f85b5be9cf454e05e0bddf49315178102227c312078eefa3c00294fb4d912ae4e8686866040516106329392919061146f565b60405180910390a3506106456001600055565b5050505050565b6000828152600160208190526040909120015461066881610c58565b6106728383610d2e565b50505050565b73ffffffffffffffffffffffffffffffffffffffff811633146106c7576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6106d18282610ddb565b505050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61070081610c58565b610708610e7c565b50565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61073581610c58565b610708610edb565b7f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a61076781610c58565b73ffffffffffffffffffffffffffffffffffffffff82166107b4576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216600081815260036020526040808220805460ff19169055517f51085ddf9ebdded84b76e829eb58c4078e4b5bdf97d9a94723f336039da467919190a25050565b7f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a61083581610c58565b73ffffffffffffffffffffffffffffffffffffffff8216610882576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216600081815260036020526040808220805460ff19166001179055517faab7954e9d246b167ef88aeddad35209ca2489d95a8aeb59e288d9b19fae5a549190a25050565b6108e4610c15565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461090e81610c58565b610916610c62565b73ffffffffffffffffffffffffffffffffffffffff861660009081526003602052604090205460ff16610975576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6109b673ffffffffffffffffffffffffffffffffffffffff87167f000000000000000000000000000000000000000000000000000000000000000086610ca1565b6040517fb8969bd400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063b8969bd490610a309089908990899089908990600401611412565b600060405180830381600087803b158015610a4a57600080fd5b505af1158015610a5e573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fb9d4efa96044e5f5e03e696fa9ae2ff66911cc27e8a637c3627c75bc5b2241c88686866040516106329392919061146f565b60008281526001602081905260409091200154610adf81610c58565b6106728383610ddb565b610af1610c15565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e4610b1b81610c58565b610b23610c62565b73ffffffffffffffffffffffffffffffffffffffff841660009081526003602052604090205460ff16610b82576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610ba373ffffffffffffffffffffffffffffffffffffffff85168484610ca1565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f9b1bfa7fa9ee420a16e124f794c35ac9f90472acc99140eb2f6447c714cad8eb84604051610c0291815260200190565b60405180910390a3506106d16001600055565b600260005403610c51576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b6107088133610f18565b60025460ff1615610c9f576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6040805173ffffffffffffffffffffffffffffffffffffffff8416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb000000000000000000000000000000000000000000000000000000001790526106d1908490610fa9565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff16610dd357600083815260016020818152604080842073ffffffffffffffffffffffffffffffffffffffff87168086529252808420805460ff19169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a4506001610445565b506000610445565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff1615610dd357600083815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff86168085529252808320805460ff1916905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a4506001610445565b610e8461103f565b6002805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b610ee3610c62565b6002805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258610eb13390565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16610fa5576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82166004820152602481018390526044015b60405180910390fd5b5050565b6000610fcb73ffffffffffffffffffffffffffffffffffffffff84168361107b565b90508051600014158015610ff0575080806020019051810190610fee9190611492565b155b156106d1576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84166004820152602401610f9c565b60025460ff16610c9f576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606061108983836000611090565b9392505050565b6060814710156110ce576040517fcd786059000000000000000000000000000000000000000000000000000000008152306004820152602401610f9c565b6000808573ffffffffffffffffffffffffffffffffffffffff1684866040516110f791906114b4565b60006040518083038185875af1925050503d8060008114611134576040519150601f19603f3d011682016040523d82523d6000602084013e611139565b606091505b5091509150611149868383611153565b9695505050505050565b60608261116857611163826111e2565b611089565b815115801561118c575073ffffffffffffffffffffffffffffffffffffffff84163b155b156111db576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85166004820152602401610f9c565b5080611089565b8051156111f25780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006020828403121561123657600080fd5b81357fffffffff000000000000000000000000000000000000000000000000000000008116811461108957600080fd5b803573ffffffffffffffffffffffffffffffffffffffff8116811461128a57600080fd5b919050565b6000806000806000608086880312156112a757600080fd5b6112b086611266565b94506112be60208701611266565b935060408601359250606086013567ffffffffffffffff8111156112e157600080fd5b8601601f810188136112f257600080fd5b803567ffffffffffffffff81111561130957600080fd5b88602082840101111561131b57600080fd5b959894975092955050506020019190565b60006020828403121561133e57600080fd5b5035919050565b6000806040838503121561135857600080fd5b8235915061136860208401611266565b90509250929050565b60006020828403121561138357600080fd5b61108982611266565b6000806000606084860312156113a157600080fd5b6113aa84611266565b92506113b860208501611266565b929592945050506040919091013590565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff8616815273ffffffffffffffffffffffffffffffffffffffff851660208201528360408201526080606082015260006114646080830184866113c9565b979650505050505050565b8381526040602082015260006114896040830184866113c9565b95945050505050565b6000602082840312156114a457600080fd5b8151801515811461108957600080fd5b6000825160005b818110156114d557602081860181015185830152016114bb565b50600092019182525091905056fea26469706673582212207ea3ad4ba4a6d39c3be3cec464753448900300ac3b508b4000815de5b914c53064736f6c634300081a00338619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a60c060405260001960035534801561001657600080fd5b5060405161155a38038061155a83398101604081905261003591610220565b60016000819055805460ff19169055838383836001600160a01b038416158061006557506001600160a01b038316155b8061007757506001600160a01b038216155b8061008957506001600160a01b038116155b156100a75760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b03808516608052831660a0526100c5600082610154565b506100f07f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e483610154565b5061011b7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb83610154565b506101467f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a82610154565b505050505050505050610274565b60008281526002602090815260408083206001600160a01b038516845290915281205460ff166101fa5760008381526002602090815260408083206001600160a01b03861684529091529020805460ff191660011790556101b23390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45060016101fe565b5060005b92915050565b80516001600160a01b038116811461021b57600080fd5b919050565b6000806000806080858703121561023657600080fd5b61023f85610204565b935061024d60208601610204565b925061025b60408601610204565b915061026960608601610204565b905092959194509250565b60805160a0516112826102d86000396000818161021d01528181610531015281816108240152818161097b01528181610ad00152610bf20152600081816101d1015281816104a1015281816105040152818161079401526107f701526112826000f3fe608060405234801561001057600080fd5b50600436106101775760003560e01c80635e3e9fef116100d857806391d148541161008c578063d547741f11610066578063d547741f14610386578063d5abeb0114610399578063e63ab1e9146103a257600080fd5b806391d1485414610311578063a217fddf14610357578063a783c7891461035f57600080fd5b8063743e0c9b116100bd578063743e0c9b146102cf5780638456cb59146102e257806385f438c1146102ea57600080fd5b80635e3e9fef146102a95780636f8b44b0146102bc57600080fd5b8063248a9ca31161012f57806336568abe1161011457806336568abe146102835780633f4ba83a146102965780635c975abb1461029e57600080fd5b8063248a9ca31461023f5780632f2ff15d1461027057600080fd5b8063106e629011610160578063106e6290146101b9578063116191b6146101cc57806321e093b11461021857600080fd5b806301ffc9a71461017c57806302d5c899146101a4575b600080fd5b61018f61018a366004610fb4565b6103c9565b60405190151581526020015b60405180910390f35b6101b76101b2366004611026565b610462565b005b6101b76101c73660046110b8565b6105f7565b6101f37f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161019b565b6101f37f000000000000000000000000000000000000000000000000000000000000000081565b61026261024d3660046110eb565b60009081526002602052604090206001015490565b60405190815260200161019b565b6101b761027e366004611104565b61069c565b6101b7610291366004611104565b6106c7565b6101b7610720565b60015460ff1661018f565b6101b76102b7366004611026565b610755565b6101b76102ca3660046110eb565b6108d0565b6101b76102dd3660046110eb565b61093e565b6101b76109e8565b6102627f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b61018f61031f366004611104565b600091825260026020908152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b610262600081565b6102627f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb81565b6101b7610394366004611104565b610a1a565b61026260035481565b6102627f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061045c57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b61046a610a3f565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461049481610a82565b61049c610a8c565b6104c77f00000000000000000000000000000000000000000000000000000000000000008684610acb565b6040517fb8969bd400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063b8969bd490610561907f0000000000000000000000000000000000000000000000000000000000000000908a908a908a908a90600401611179565b600060405180830381600087803b15801561057b57600080fd5b505af115801561058f573d6000803e3d6000fd5b505050508573ffffffffffffffffffffffffffffffffffffffff167fba96f26bdda53eb8c8ba39045dfb4ff39753fbc7a6edcf250a88e75e78d102fe8686866040516105dd939291906111d6565b60405180910390a2506105f06001600055565b5050505050565b6105ff610a3f565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461062981610a82565b610631610a8c565b61063c848484610acb565b8373ffffffffffffffffffffffffffffffffffffffff167f884edad9ce6fa2440d8a54cc123490eb96d2768479d49ff9c7366125a94243648460405161068491815260200190565b60405180910390a2506106976001600055565b505050565b6000828152600260205260409020600101546106b781610a82565b6106c18383610c53565b50505050565b73ffffffffffffffffffffffffffffffffffffffff81163314610716576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6106978282610d53565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61074a81610a82565b610752610e12565b50565b61075d610a3f565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461078781610a82565b61078f610a8c565b6107ba7f00000000000000000000000000000000000000000000000000000000000000008684610acb565b6040517f5131ab5900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690635131ab5990610854907f0000000000000000000000000000000000000000000000000000000000000000908a908a908a908a90600401611179565b600060405180830381600087803b15801561086e57600080fd5b505af1158015610882573d6000803e3d6000fd5b505050508573ffffffffffffffffffffffffffffffffffffffff167f7772f56296d3a5202974a45c61c9188d844ab4d6eeb18c851e4b8d5384ca6ced8686866040516105dd939291906111d6565b7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb6108fa81610a82565b610902610a8c565b60038290556040518281527f7810bd47de260c3e9ee10061cf438099dd12256c79485f12f94dbccc981e806c9060200160405180910390a15050565b610946610a8c565b6040517f79cc6790000000000000000000000000000000000000000000000000000000008152336004820152602481018290527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16906379cc679090604401600060405180830381600087803b1580156109d457600080fd5b505af11580156105f0573d6000803e3d6000fd5b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610a1281610a82565b610752610e8f565b600082815260026020526040902060010154610a3581610a82565b6106c18383610d53565b600260005403610a7b576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b6107528133610ee8565b60015460ff1615610ac9576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6003547f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b39573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b5d91906111f9565b610b679084611212565b1115610b9f576040517fc30436e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f1e458bee00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff848116600483015260248201849052604482018390527f00000000000000000000000000000000000000000000000000000000000000001690631e458bee90606401600060405180830381600087803b158015610c3657600080fd5b505af1158015610c4a573d6000803e3d6000fd5b50505050505050565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff16610d4b57600083815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff86168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055610ce93390565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a450600161045c565b50600061045c565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff1615610d4b57600083815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8616808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a450600161045c565b610e1a610f78565b600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b610e97610a8c565b600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016811790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25833610e65565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16610f74576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff821660048201526024810183905260440160405180910390fd5b5050565b60015460ff16610ac9576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060208284031215610fc657600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610ff657600080fd5b9392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461102157600080fd5b919050565b60008060008060006080868803121561103e57600080fd5b61104786610ffd565b945060208601359350604086013567ffffffffffffffff81111561106a57600080fd5b8601601f8101881361107b57600080fd5b803567ffffffffffffffff81111561109257600080fd5b8860208284010111156110a457600080fd5b959894975060200195606001359392505050565b6000806000606084860312156110cd57600080fd5b6110d684610ffd565b95602085013595506040909401359392505050565b6000602082840312156110fd57600080fd5b5035919050565b6000806040838503121561111757600080fd5b8235915061112760208401610ffd565b90509250929050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff8616815273ffffffffffffffffffffffffffffffffffffffff851660208201528360408201526080606082015260006111cb608083018486611130565b979650505050505050565b8381526040602082015260006111f0604083018486611130565b95945050505050565b60006020828403121561120b57600080fd5b5051919050565b8082018082111561045c577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea2646970667358221220de5fa55e0ca79ea2f08903481d01ea00bbbf346b9cfba44e12a2dd6f3a6f2e8a64736f6c634300081a00336080604052348015600f57600080fd5b506001600055610d3a806100246000396000f3fe6080604052600436106100635760003560e01c8063c513169111610040578063c5131691146100c1578063e04d4f97146100e1578063f05b6abf146100f457005b8063357fc5a21461006c5780636ed701691461008c5780638fcaa0b5146100a157005b3661006a57005b005b34801561007857600080fd5b5061006a6100873660046106c0565b610114565b34801561009857600080fd5b5061006a6101aa565b3480156100ad57600080fd5b5061006a6100bc3660046106fc565b6101df565b3480156100cd57600080fd5b5061006a6100dc3660046106c0565b61021e565b61006a6100ef366004610895565b6102f9565b34801561010057600080fd5b5061006a61010f366004610981565b61033d565b61011c610372565b61013e73ffffffffffffffffffffffffffffffffffffffff83163383866103b5565b604080513381526020810185905273ffffffffffffffffffffffffffffffffffffffff848116828401528316606082015290517f2b58128f24a9f59127cc5b5430d70542b22220f2d9adaa86e442b816ab98af609181900360800190a16101a56001600055565b505050565b6040513381527fbcaadb46b82a48af60b608f58959ae6b8310d1b0a0d094c2e9ec3208ed39f2a09060200160405180910390a1565b7f0d3f65f00e631663aa85c96330b5c7a83bb29af3630c0063776f985edc3037aa33838360405161021293929190610a6b565b60405180910390a15050565b610226610372565b6000610233600285610ad5565b90508060000361026f576040517f1f2a200500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61029173ffffffffffffffffffffffffffffffffffffffff84163384846103b5565b604080513381526020810183905273ffffffffffffffffffffffffffffffffffffffff858116828401528416606082015290517f2b58128f24a9f59127cc5b5430d70542b22220f2d9adaa86e442b816ab98af609181900360800190a1506101a56001600055565b7f1f1ff1f5fb41346850b2f5c04e6c767e2f1c8a525c5c0c5cdb60cdf3ca5f62fa3334858585604051610330959493929190610b7e565b60405180910390a1505050565b7f74a53cd528a921fca7dbdee62f86819051d3cc98f214951f4238e8843f20b146338484846040516103309493929190610c08565b6002600054036103ae576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b6040805173ffffffffffffffffffffffffffffffffffffffff85811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd0000000000000000000000000000000000000000000000000000000017905261044a908590610450565b50505050565b600061047273ffffffffffffffffffffffffffffffffffffffff8416836104eb565b905080516000141580156104975750808060200190518101906104959190610ccb565b155b156101a5576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff841660048201526024015b60405180910390fd5b60606104f983836000610500565b9392505050565b60608147101561053e576040517fcd7860590000000000000000000000000000000000000000000000000000000081523060048201526024016104e2565b6000808573ffffffffffffffffffffffffffffffffffffffff1684866040516105679190610ce8565b60006040518083038185875af1925050503d80600081146105a4576040519150601f19603f3d011682016040523d82523d6000602084013e6105a9565b606091505b50915091506105b98683836105c3565b9695505050505050565b6060826105d8576105d382610652565b6104f9565b81511580156105fc575073ffffffffffffffffffffffffffffffffffffffff84163b155b1561064b576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff851660048201526024016104e2565b50806104f9565b8051156106625780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50565b803573ffffffffffffffffffffffffffffffffffffffff811681146106bb57600080fd5b919050565b6000806000606084860312156106d557600080fd5b833592506106e560208501610697565b91506106f360408501610697565b90509250925092565b6000806020838503121561070f57600080fd5b823567ffffffffffffffff81111561072657600080fd5b8301601f8101851361073757600080fd5b803567ffffffffffffffff81111561074e57600080fd5b85602082840101111561076057600080fd5b6020919091019590945092505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156107e6576107e6610770565b604052919050565b600082601f8301126107ff57600080fd5b813567ffffffffffffffff81111561081957610819610770565b61084a60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8401160161079f565b81815284602083860101111561085f57600080fd5b816020850160208301376000918101602001919091529392505050565b801515811461069457600080fd5b80356106bb8161087c565b6000806000606084860312156108aa57600080fd5b833567ffffffffffffffff8111156108c157600080fd5b6108cd868287016107ee565b9350506020840135915060408401356108e58161087c565b809150509250925092565b600067ffffffffffffffff82111561090a5761090a610770565b5060051b60200190565b600082601f83011261092557600080fd5b8135610938610933826108f0565b61079f565b8082825260208201915060208360051b86010192508583111561095a57600080fd5b602085015b8381101561097757803583526020928301920161095f565b5095945050505050565b60008060006060848603121561099657600080fd5b833567ffffffffffffffff8111156109ad57600080fd5b8401601f810186136109be57600080fd5b80356109cc610933826108f0565b8082825260208201915060208360051b8501019250888311156109ee57600080fd5b602084015b83811015610a3057803567ffffffffffffffff811115610a1257600080fd5b610a218b6020838901016107ee565b845250602092830192016109f3565b509550505050602084013567ffffffffffffffff811115610a5057600080fd5b610a5c86828701610914565b9250506106f36040850161088a565b73ffffffffffffffffffffffffffffffffffffffff8416815260406020820152816040820152818360608301376000818301606090810191909152601f9092017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016010192915050565b600082610b0b577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60005b83811015610b2b578181015183820152602001610b13565b50506000910152565b60008151808452610b4c816020860160208601610b10565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b73ffffffffffffffffffffffffffffffffffffffff8616815284602082015260a060408201526000610bb360a0830186610b34565b6060830194909452509015156080909101529392505050565b600081518084526020840193506020830160005b82811015610bfe578151865260209586019590910190600101610be0565b5093949350505050565b60006080820173ffffffffffffffffffffffffffffffffffffffff871683526080602084015280865180835260a08501915060a08160051b86010192506020880160005b82811015610c9b577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60878603018452610c86858351610b34565b94506020938401939190910190600101610c4c565b505050508281036040840152610cb18186610bcc565b915050610cc2606083018415159052565b95945050505050565b600060208284031215610cdd57600080fd5b81516104f98161087c565b60008251610cfa818460208701610b10565b919091019291505056fea2646970667358221220556072e1abafc3c4063b8cce832228b4f309b93726aaa6a6dfab20cb880c6d1864736f6c634300081a0033a264697066735822122081a2cfe1265613b381e5a564cbf5f5dfff23f468526343ea6db02bdd9d8bd3b464736f6c634300081a0033", + Bin: "0x6080604052600c8054600160ff199182168117909255601f80549091169091179055348015602c57600080fd5b5062010408806200003e6000396000f3fe608060405234801561001057600080fd5b50600436106102e95760003560e01c806385f438c111610191578063c713f827116100e3578063f0c8e7e011610097578063fa7626d411610071578063fa7626d414610533578063fb176c1214610540578063fe8e5f1b1461054857600080fd5b8063f0c8e7e01461051b578063f4221f0814610523578063fa2a70741461052b57600080fd5b8063e20c9f71116100c8578063e20c9f71146104e4578063e63ab1e9146104ec578063eb1ce7f91461051357600080fd5b8063c713f827146104d4578063cbd57e2f146104dc57600080fd5b8063a3f9d0e011610145578063b0464fdc1161011f578063b0464fdc146104ac578063b5508aa9146104b4578063ba414fa6146104bc57600080fd5b8063a3f9d0e014610475578063a4943deb1461047d578063a783c7891461048557600080fd5b8063916a17c611610176578063916a17c6146104505780639918c1c2146104655780639fc7fd551461046d57600080fd5b806385f438c1146104215780639158c6231461044857600080fd5b80633f7286f41161024a57806366d9a9a0116101fe5780637e91c50f116101d85780637e91c50f146103fc57806382c529921461040457806385226c811461040c57600080fd5b806366d9a9a0146103d75780636a621854146103ec57806371149c94146103f457600080fd5b806351ecdf3c1161022f57806351ecdf3c14610373578063570618e11461037b5780635d62c860146103b057600080fd5b80633f7286f4146103635780634b5838d21461036b57600080fd5b80632ade3880116102a15780633e5e3c23116102865780633e5e3c231461034b5780633e73ecb4146103535780633ee929231461035b57600080fd5b80632ade38801461032e5780632be6a1621461034357600080fd5b80631779672f116102d25780631779672f146103005780631ed7831c14610308578063284cb9291461032657600080fd5b80630a9254e4146102ee5780630eee72a9146102f8575b600080fd5b6102f6610550565b005b6102f6610e8f565b6102f6611134565b610310611285565b60405161031d919061a652565b60405180910390f35b6102f66112e7565b6103366115e4565b60405161031d919061a6ee565b6102f6611726565b6103106118e8565b6102f6611948565b6102f6611ed7565b610310611fa6565b6102f6612006565b6102f6612329565b6103a27f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a81565b60405190815260200161031d565b6103a27f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b981565b6103df6124fc565b60405161031d919061a854565b6102f661267e565b6102f661274a565b6102f6612fa0565b6102f661312a565b61041461339f565b60405161031d919061a8f2565b6103a27f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b6102f661346f565b61045861353d565b60405161031d919061a969565b6102f6613638565b6102f661394d565b6102f6613a1b565b6102f6614055565b6103a27f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb81565b61045861427a565b610414614375565b6104c4614445565b604051901515815260200161031d565b6102f6614519565b6102f66151ee565b6103106152af565b6103a27f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b6102f661530f565b6102f661541b565b6102f66155dd565b6102f6615847565b601f546104c49060ff1681565b6102f6615b3e565b6102f66161ee565b602680547fffffffffffffffffffffffff00000000000000000000000000000000000000009081163017909155602780548216611234179055602880549091166156781790556040516105a29061a561565b60408082526004908201527f746573740000000000000000000000000000000000000000000000000000000060608201526080602082018190526003908201527f54544b000000000000000000000000000000000000000000000000000000000060a082015260c001604051809103906000f080158015610627573d6000803e3d6000fd5b50602480547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039290921691909117905560405161066c9061a561565b604080825260049082018190527f7a6574610000000000000000000000000000000000000000000000000000000060608301526080602083018190528201527f5a4554410000000000000000000000000000000000000000000000000000000060a082015260c001604051809103906000f0801580156106f0573d6000803e3d6000fd5b50602580547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03928316908117909155604080518082018252600e81527f4761746577617945564d2e736f6c0000000000000000000000000000000000006020820152602854602654925190851660248201526044810193909352921660648201526107df919060840160408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fc0c53b8b000000000000000000000000000000000000000000000000000000001790526163f5565b601f80547fffffffffffffffffffffff0000000000000000000000000000000000000000ff166101006001600160a01b0393841681029190911791829055602080549190920483167fffffffffffffffffffffffff0000000000000000000000000000000000000000909116811790915560285460265460405192939182169291169061086b9061a56f565b6001600160a01b03938416815291831660208301529091166040820152606001604051809103906000f0801580156108a7573d6000803e3d6000fd5b50602280547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392831617905560205460255460285460265460405193851694928316939183169216906109029061a57d565b6001600160a01b039485168152928416602084015290831660408301529091166060820152608001604051809103906000f080158015610946573d6000803e3d6000fd5b50602380547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039290921691909117905560405161098b9061a58b565b604051809103906000f0801580156109a7573d6000803e3d6000fd5b50602180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039283161790556028546040517fc88a5e6d00000000000000000000000000000000000000000000000000000000815291166004820152670de0b6b3a76400006024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c88a5e6d90604401600060405180830381600087803b158015610a5357600080fd5b505af1158015610a67573d6000803e3d6000fd5b50506026546040517f06447d560000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506306447d569150602401600060405180830381600087803b158015610add57600080fd5b505af1158015610af1573d6000803e3d6000fd5b50506020546022546040517fae7a3a6f0000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201529116925063ae7a3a6f9150602401600060405180830381600087803b158015610b5757600080fd5b505af1158015610b6b573d6000803e3d6000fd5b50506020546023546040517f10188aef0000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152911692506310188aef9150602401600060405180830381600087803b158015610bd157600080fd5b505af1158015610be5573d6000803e3d6000fd5b5050602254602480546040517f9b19251a0000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015292169350639b19251a925001600060405180830381600087803b158015610c4a57600080fd5b505af1158015610c5e573d6000803e3d6000fd5b505050507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b03166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610cc057600080fd5b505af1158015610cd4573d6000803e3d6000fd5b5050602480546026546040517f40c10f190000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620f4240938101939093521692506340c10f199150604401600060405180830381600087803b158015610d4557600080fd5b505af1158015610d59573d6000803e3d6000fd5b5050602480546022546040517fa9059cbb0000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201526207a1209381019390935216925063a9059cbb91506044016020604051808303816000875af1158015610dcf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610df3919061aa00565b506028546040517fc88a5e6d0000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152670de0b6b3a76400006024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c88a5e6d906044015b600060405180830381600087803b158015610e7557600080fd5b505af1158015610e89573d6000803e3d6000fd5b50505050565b60248054602754604051620186a09381018490526001600160a01b0392831660448201529116606482015260009060840160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fc513169100000000000000000000000000000000000000000000000000000000179052602654905163ca669fa760e01b81526001600160a01b039091166004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa7906024015b600060405180830381600087803b158015610f7457600080fd5b505af1158015610f88573d6000803e3d6000fd5b5050602654604080516001600160a01b0390921660248301527f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e460448084019190915281518084039091018152606490920181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb39250611073919060040161aa22565b600060405180830381600087803b15801561108d57600080fd5b505af11580156110a1573d6000803e3d6000fd5b50506022546024546021546040517f21fc65f20000000000000000000000000000000000000000000000000000000081526001600160a01b0393841695506321fc65f294506110fe9392831692909116908790879060040161aa35565b600060405180830381600087803b15801561111857600080fd5b505af115801561112c573d6000803e3d6000fd5b505050505050565b6024805460275460405160009381018490526001600160a01b03928316604482015291166064820152819060840160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f357fc5a200000000000000000000000000000000000000000000000000000000179052602854905163ca669fa760e01b81526001600160a01b039091166004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa7906024015b600060405180830381600087803b15801561121657600080fd5b505af115801561122a573d6000803e3d6000fd5b5050604051630618f58760e51b81527f951e19ed000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401611073565b606060168054806020026020016040519081016040528092919081815260200182805480156112dd57602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116112bf575b5050505050905090565b6022546025546040517fd936547e0000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152600092919091169063d936547e90602401602060405180830381865afa158015611351573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611375919061aa00565b9050611382600082616414565b6022546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b15801561141057600080fd5b505af1158015611424573d6000803e3d6000fd5b50506025546040516001600160a01b0390911692507faab7954e9d246b167ef88aeddad35209ca2489d95a8aeb59e288d9b19fae5a549150600090a260265460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156114b957600080fd5b505af11580156114cd573d6000803e3d6000fd5b50506022546025546040517f9b19251a0000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015291169250639b19251a9150602401600060405180830381600087803b15801561153357600080fd5b505af1158015611547573d6000803e3d6000fd5b50506022546025546040517fd936547e0000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201529116925063d936547e9150602401602060405180830381865afa1580156115b0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115d4919061aa00565b90506115e1600182616414565b50565b6060601e805480602002602001604051908101604052809291908181526020016000905b8282101561171d57600084815260208082206040805180820182526002870290920180546001600160a01b03168352600181018054835181870281018701909452808452939591948681019491929084015b828210156117065783829060005260206000200180546116799061aa6c565b80601f01602080910402602001604051908101604052809291908181526020018280546116a59061aa6c565b80156116f25780601f106116c7576101008083540402835291602001916116f2565b820191906000526020600020905b8154815290600101906020018083116116d557829003601f168201915b50505050508152602001906001019061165a565b505050508152505081526020019060010190611608565b50505050905090565b60405163ca669fa760e01b81526101236004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561177457600080fd5b505af1158015611788573d6000803e3d6000fd5b50506040805161012360248201527f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a60448083019190915282518083039091018152606490910182526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f0000000000000000000000000000000000000000000000000000000017905290517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb39250611869919060040161aa22565b600060405180830381600087803b15801561188357600080fd5b505af1158015611897573d6000803e3d6000fd5b50506022546025546040517f9b19251a0000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015291169250639b19251a9150602401610e5b565b606060188054806020026020016040519081016040528092919081815260200182805480156112dd576020028201919060005260206000209081546001600160a01b031681526001909101906020018083116112bf575050505050905090565b602480546027546040516370a0823160e01b81526001600160a01b039182166004820152620186a09360009392909216916370a082319101602060405180830381865afa15801561199d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119c1919061aab9565b90506119ce816000616496565b602480546022546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa158015611a1e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a42919061aab9565b6027546040516001600160a01b0390911660248201526044810185905290915060009060640160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb0000000000000000000000000000000000000000000000000000000017905260245490517ff30c7ba3000000000000000000000000000000000000000000000000000000008152919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f30c7ba391611b25916001600160a01b039190911690600090869060040161aad2565b600060405180830381600087803b158015611b3f57600080fd5b505af1158015611b53573d6000803e3d6000fd5b50506022546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b158015611be557600080fd5b505af1158015611bf9573d6000803e3d6000fd5b50506027546024546040518881526001600160a01b039283169450911691507f9b1bfa7fa9ee420a16e124f794c35ac9f90472acc99140eb2f6447c714cad8eb9060200160405180910390a360285460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015611c9e57600080fd5b505af1158015611cb2573d6000803e3d6000fd5b5050602254602480546027546040517fd9caed120000000000000000000000000000000000000000000000000000000081526001600160a01b0392831660048201529082169281019290925260448201899052909116925063d9caed129150606401600060405180830381600087803b158015611d2e57600080fd5b505af1158015611d42573d6000803e3d6000fd5b5050602480546027546040516370a0823160e01b81526001600160a01b03918216600482015260009550911692506370a082319101602060405180830381865afa158015611d94573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611db8919061aab9565b9050611dc48186616496565b602480546022546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa158015611e14573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e38919061aab9565b9050611e4d81611e48888761ab29565b616496565b602480546020546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa158015611e9d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ec1919061aab9565b9050611ece816000616496565b50505050505050565b60248054602754604051620186a09381018490526001600160a01b0392831660448201529116606482015260009060840160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f357fc5a200000000000000000000000000000000000000000000000000000000179052602654905163ca669fa760e01b81526001600160a01b039091166004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401610f5a565b606060178054806020026020016040519081016040528092919081815260200182805480156112dd576020028201919060005260206000209081546001600160a01b031681526001909101906020018083116112bf575050505050905090565b604051630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b15801561207257600080fd5b505af1158015612086573d6000803e3d6000fd5b5050602854602654604051600094508493506001600160a01b0392831692909116906120b19061a56f565b6001600160a01b03938416815291831660208301529091166040820152606001604051809103906000f0801580156120ed573d6000803e3d6000fd5b50604051630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b15801561215d57600080fd5b505af1158015612171573d6000803e3d6000fd5b50506020546026546040516001600160a01b039283169450600093509116906121999061a56f565b6001600160a01b03938416815291831660208301529091166040820152606001604051809103906000f0801580156121d5573d6000803e3d6000fd5b50604051630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b15801561224557600080fd5b505af1158015612259573d6000803e3d6000fd5b50506020546028546040516001600160a01b039283169450911691506000906122819061a56f565b6001600160a01b03938416815291831660208301529091166040820152606001604051809103906000f0801580156122bd573d6000803e3d6000fd5b506020546028546026546040519394506001600160a01b03928316939183169216906122e89061a56f565b6001600160a01b03938416815291831660208301529091166040820152606001604051809103906000f080158015612324573d6000803e3d6000fd5b505050565b6024805460275460405160019381018490526001600160a01b0392831660448201529116606482015260009060840160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f357fc5a200000000000000000000000000000000000000000000000000000000179052602854905163ca669fa760e01b81526001600160a01b039091166004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561240b57600080fd5b505af115801561241f573d6000803e3d6000fd5b5050604051630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b15801561248f57600080fd5b505af11580156124a3573d6000803e3d6000fd5b50506022546024546040517f21fc65f20000000000000000000000000000000000000000000000000000000081526001600160a01b0392831694506321fc65f293506110fe92909116906000908790879060040161aa35565b6060601b805480602002602001604051908101604052809291908181526020016000905b8282101561171d57838290600052602060002090600202016040518060400160405290816000820180546125539061aa6c565b80601f016020809104026020016040519081016040528092919081815260200182805461257f9061aa6c565b80156125cc5780601f106125a1576101008083540402835291602001916125cc565b820191906000526020600020905b8154815290600101906020018083116125af57829003601f168201915b505050505081526020016001820180548060200260200160405190810160405280929190818152602001828054801561266657602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190600401906020826003010492830192600103820291508084116126135790505b50505050508152505081526020019060010190612520565b6024805460275460405160009381018490526001600160a01b03928316604482015291166064820152819060840160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fc513169100000000000000000000000000000000000000000000000000000000179052602854905163ca669fa760e01b81526001600160a01b039091166004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa7906024016111fc565b6040517f68656c6c6f0000000000000000000000000000000000000000000000000000006020820152620186a09060009060250160408051808303601f1901815290829052602480546021546370a0823160e01b85526001600160a01b0390811660048601529294506000939216916370a082319101602060405180830381865afa1580156127dd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612801919061aab9565b905061280e816000616496565b602480546022546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa15801561285e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612882919061aab9565b6020546040516001600160a01b0390911660248201526044810186905290915060009060640160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb0000000000000000000000000000000000000000000000000000000017905260245490517ff30c7ba3000000000000000000000000000000000000000000000000000000008152919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f30c7ba391612965916001600160a01b039190911690600090869060040161aad2565b600060405180830381600087803b15801561297f57600080fd5b505af1158015612993573d6000803e3d6000fd5b50506021546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b158015612a2557600080fd5b505af1158015612a39573d6000803e3d6000fd5b50506020546040517f0d3f65f00e631663aa85c96330b5c7a83bb29af3630c0063776f985edc3037aa9350612a7c92506001600160a01b0390911690879061ab3c565b60405180910390a16020546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b158015612b1257600080fd5b505af1158015612b26573d6000803e3d6000fd5b50506021546024546040516001600160a01b039283169450911691507f723fc7be2448075379e4fdf1e6bf5fead954d2668d2da05dcb44ccfec4beeda790612b71908990899061ab5e565b60405180910390a36022546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b158015612c0757600080fd5b505af1158015612c1b573d6000803e3d6000fd5b50506021546024546040516001600160a01b039283169450911691507fb9d4efa96044e5f5e03e696fa9ae2ff66911cc27e8a637c3627c75bc5b2241c890612c66908990899061ab5e565b60405180910390a360285460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015612cc757600080fd5b505af1158015612cdb573d6000803e3d6000fd5b50506022546024546021546040517fc8a023620000000000000000000000000000000000000000000000000000000081526001600160a01b03938416955063c8a023629450612d389392831692909116908a908a9060040161aa35565b600060405180830381600087803b158015612d5257600080fd5b505af1158015612d66573d6000803e3d6000fd5b5050602480546021546040516370a0823160e01b81526001600160a01b03918216600482015260009550911692506370a0823191015b602060405180830381865afa158015612db9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ddd919061aab9565b9050612de98187616496565b602480546022546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa158015612e39573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e5d919061aab9565b9050612e6d81611e48898761ab29565b602480546020546021546040517fdd62ed3e0000000000000000000000000000000000000000000000000000000081526001600160a01b0392831660048201529082169381019390935260009291169063dd62ed3e90604401602060405180830381865afa158015612ee3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f07919061aab9565b9050612f14816000616496565b602480546020546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa158015612f64573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f88919061aab9565b9050612f95816000616496565b505050505050505050565b6040517f68656c6c6f000000000000000000000000000000000000000000000000000000602082015260019060009060250160408051808303601f190181529082905260285463ca669fa760e01b83526001600160a01b031660048301529150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561303957600080fd5b505af115801561304d573d6000803e3d6000fd5b5050604051630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b1580156130bd57600080fd5b505af11580156130d1573d6000803e3d6000fd5b50506022546024546040517fc8a023620000000000000000000000000000000000000000000000000000000081526001600160a01b03928316945063c8a0236293506110fe92909116906000908790879060040161aa35565b6028546040517f06447d560000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906306447d5690602401600060405180830381600087803b15801561319c57600080fd5b505af11580156131b0573d6000803e3d6000fd5b5050602254602480546040517f9a5904270000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015292169350639a590427925001600060405180830381600087803b15801561321557600080fd5b505af1158015613229573d6000803e3d6000fd5b5050604051630618f58760e51b81527f584a7938000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b15801561329957600080fd5b505af11580156132ad573d6000803e3d6000fd5b5050602254602480546027546040517fd9caed120000000000000000000000000000000000000000000000000000000081526001600160a01b0392831660048201529082169281019290925260016044830152909116925063d9caed129150606401600060405180830381600087803b15801561332957600080fd5b505af115801561333d573d6000803e3d6000fd5b505050507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b03166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610e7557600080fd5b6060601a805480602002602001604051908101604052809291908181526020016000905b8282101561171d5783829060005260206000200180546133e29061aa6c565b80601f016020809104026020016040519081016040528092919081815260200182805461340e9061aa6c565b801561345b5780601f106134305761010080835404028352916020019161345b565b820191906000526020600020905b81548152906001019060200180831161343e57829003601f168201915b5050505050815260200190600101906133c3565b604051630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b1580156134db57600080fd5b505af11580156134ef573d6000803e3d6000fd5b50506022546040517f9a590427000000000000000000000000000000000000000000000000000000008152600060048201526001600160a01b039091169250639a5904279150602401610e5b565b6060601d805480602002602001604051908101604052809291908181526020016000905b8282101561171d5760008481526020908190206040805180820182526002860290920180546001600160a01b0316835260018101805483518187028101870190945280845293949193858301939283018282801561362057602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190600401906020826003010492830192600103820291508084116135cd5790505b50505050508152505081526020019060010190613561565b602480546027546040516001938101939093526001600160a01b03918216604484015216606482015260009060840160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f357fc5a20000000000000000000000000000000000000000000000000000000017905260285490517f06447d560000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d906306447d5690602401600060405180830381600087803b15801561373357600080fd5b505af1158015613747573d6000803e3d6000fd5b5050602254602480546040517f9a5904270000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015292169350639a590427925001600060405180830381600087803b1580156137ac57600080fd5b505af11580156137c0573d6000803e3d6000fd5b5050604051630618f58760e51b81527f584a7938000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b15801561383057600080fd5b505af1158015613844573d6000803e3d6000fd5b50506022546024546021546040517f21fc65f20000000000000000000000000000000000000000000000000000000081526001600160a01b0393841695506321fc65f294506138a2939283169290911690600190879060040161aa35565b600060405180830381600087803b1580156138bc57600080fd5b505af11580156138d0573d6000803e3d6000fd5b505050507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b03166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561393257600080fd5b505af1158015613946573d6000803e3d6000fd5b5050505050565b604051630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b1580156139b957600080fd5b505af11580156139cd573d6000803e3d6000fd5b50506022546040517f9b19251a000000000000000000000000000000000000000000000000000000008152600060048201526001600160a01b039091169250639b19251a9150602401610e5b565b604080516004808252602480830184526020830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f6ed7016900000000000000000000000000000000000000000000000000000000179052805460275494516370a0823160e01b81526001600160a01b0395861693810193909352620186a0946000939116916370a082319101602060405180830381865afa158015613ac5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613ae9919061aab9565b9050613af6816000616496565b602480546022546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa158015613b46573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b6a919061aab9565b6020546040516001600160a01b0390911660248201526044810186905290915060009060640160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb0000000000000000000000000000000000000000000000000000000017905260245490517ff30c7ba3000000000000000000000000000000000000000000000000000000008152919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f30c7ba391613c4d916001600160a01b039190911690600090869060040161aad2565b600060405180830381600087803b158015613c6757600080fd5b505af1158015613c7b573d6000803e3d6000fd5b50506021546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b158015613d0d57600080fd5b505af1158015613d21573d6000803e3d6000fd5b5050602080546040516001600160a01b0390911681527fbcaadb46b82a48af60b608f58959ae6b8310d1b0a0d094c2e9ec3208ed39f2a0935001905060405180910390a16022546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b158015613df357600080fd5b505af1158015613e07573d6000803e3d6000fd5b50506021546024546040516001600160a01b039283169450911691507f85b5be9cf454e05e0bddf49315178102227c312078eefa3c00294fb4d912ae4e90613e52908990899061ab5e565b60405180910390a360285460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015613eb357600080fd5b505af1158015613ec7573d6000803e3d6000fd5b50506022546024546021546040517f21fc65f20000000000000000000000000000000000000000000000000000000081526001600160a01b0393841695506321fc65f29450613f249392831692909116908a908a9060040161aa35565b600060405180830381600087803b158015613f3e57600080fd5b505af1158015613f52573d6000803e3d6000fd5b5050602480546027546040516370a0823160e01b81526001600160a01b03918216600482015260009550911692506370a082319101602060405180830381865afa158015613fa4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613fc8919061aab9565b9050613fd5816000616496565b602480546022546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa158015614025573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614049919061aab9565b9050612e6d8185616496565b6040517f68656c6c6f0000000000000000000000000000000000000000000000000000006020820152620186a09060009060250160408051808303601f190181529082905260265463ca669fa760e01b83526001600160a01b031660048301529150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156140f057600080fd5b505af1158015614104573d6000803e3d6000fd5b5050602654604080516001600160a01b0390921660248301527f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e460448084019190915281518084039091018152606490920181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb392506141ef919060040161aa22565b600060405180830381600087803b15801561420957600080fd5b505af115801561421d573d6000803e3d6000fd5b50506022546024546021546040517fc8a023620000000000000000000000000000000000000000000000000000000081526001600160a01b03938416955063c8a0236294506110fe9392831692909116908790879060040161aa35565b6060601c805480602002602001604051908101604052809291908181526020016000905b8282101561171d5760008481526020908190206040805180820182526002860290920180546001600160a01b0316835260018101805483518187028101870190945280845293949193858301939283018282801561435d57602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168152602001906004019060208260030104928301926001038202915080841161430a5790505b5050505050815250508152602001906001019061429e565b60606019805480602002602001604051908101604052809291908181526020016000905b8282101561171d5783829060005260206000200180546143b89061aa6c565b80601f01602080910402602001604051908101604052809291908181526020018280546143e49061aa6c565b80156144315780601f1061440657610100808354040283529160200191614431565b820191906000526020600020905b81548152906001019060200180831161441457829003601f168201915b505050505081526020019060010190614399565b60085460009060ff161561445d575060085460ff1690565b6040517f667f9d70000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d600482018190527f6661696c65640000000000000000000000000000000000000000000000000000602483015260009163667f9d7090604401602060405180830381865afa1580156144ee573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614512919061aab9565b1415905090565b60285460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561457257600080fd5b505af1158015614586573d6000803e3d6000fd5b5050602854604080516001600160a01b0390921660248301527f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a60448084019190915281518084039091018152606490920181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb39250614671919060040161aa22565b600060405180830381600087803b15801561468b57600080fd5b505af115801561469f573d6000803e3d6000fd5b50505050602260009054906101000a90046001600160a01b03166001600160a01b0316638456cb596040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156146f357600080fd5b505af1158015614707573d6000803e3d6000fd5b505060285460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b15801561476457600080fd5b505af1158015614778573d6000803e3d6000fd5b5050602854604080516001600160a01b0390921660248301527f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a60448084019190915281518084039091018152606490920181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb39250614863919060040161aa22565b600060405180830381600087803b15801561487d57600080fd5b505af1158015614891573d6000803e3d6000fd5b50505050602060009054906101000a90046001600160a01b03166001600160a01b0316633f4ba83a6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156148e557600080fd5b505af11580156148f9573d6000803e3d6000fd5b505060265460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b15801561495657600080fd5b505af115801561496a573d6000803e3d6000fd5b50505050602260009054906101000a90046001600160a01b03166001600160a01b0316638456cb596040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156149be57600080fd5b505af11580156149d2573d6000803e3d6000fd5b505060248054602754604051620186a09381018490526001600160a01b039283166044820152911660648201529092506000915060840160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f357fc5a20000000000000000000000000000000000000000000000000000000017905251630618f58760e51b81527fd93c0665000000000000000000000000000000000000000000000000000000006004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b158015614ace57600080fd5b505af1158015614ae2573d6000803e3d6000fd5b505060285460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b158015614b3f57600080fd5b505af1158015614b53573d6000803e3d6000fd5b50506022546024546021546040517f21fc65f20000000000000000000000000000000000000000000000000000000081526001600160a01b0393841695506321fc65f29450614bb09392831692909116908790879060040161aa35565b600060405180830381600087803b158015614bca57600080fd5b505af1158015614bde573d6000803e3d6000fd5b505060265460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b158015614c3b57600080fd5b505af1158015614c4f573d6000803e3d6000fd5b50505050602260009054906101000a90046001600160a01b03166001600160a01b0316633f4ba83a6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015614ca357600080fd5b505af1158015614cb7573d6000803e3d6000fd5b5050602480546027546040516370a0823160e01b81526001600160a01b03918216600482015260009550911692506370a0823191015b602060405180830381865afa158015614d0a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614d2e919061aab9565b9050614d3b816000616496565b602480546022546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa158015614d8b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614daf919061aab9565b6020546040516001600160a01b0390911660248201526044810186905290915060009060640160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb0000000000000000000000000000000000000000000000000000000017905260245490517ff30c7ba3000000000000000000000000000000000000000000000000000000008152919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f30c7ba391614e92916001600160a01b039190911690600090869060040161aad2565b600060405180830381600087803b158015614eac57600080fd5b505af1158015614ec0573d6000803e3d6000fd5b50506021546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b158015614f5257600080fd5b505af1158015614f66573d6000803e3d6000fd5b505060208054602454602754604080516001600160a01b0394851681529485018c905291831684830152919091166060830152517f2b58128f24a9f59127cc5b5430d70542b22220f2d9adaa86e442b816ab98af609350908190036080019150a16022546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b15801561505557600080fd5b505af1158015615069573d6000803e3d6000fd5b50506021546024546040516001600160a01b039283169450911691507f85b5be9cf454e05e0bddf49315178102227c312078eefa3c00294fb4d912ae4e906150b4908990899061ab5e565b60405180910390a360285460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561511557600080fd5b505af1158015615129573d6000803e3d6000fd5b50506022546024546021546040517f21fc65f20000000000000000000000000000000000000000000000000000000081526001600160a01b0393841695506321fc65f294506151869392831692909116908a908a9060040161aa35565b600060405180830381600087803b1580156151a057600080fd5b505af11580156151b4573d6000803e3d6000fd5b5050602480546027546040516370a0823160e01b81526001600160a01b03918216600482015260009550911692506370a082319101612d9c565b60248054602754604051620186a09381018490526001600160a01b0392831660448201529116606482015260009060840160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f357fc5a2000000000000000000000000000000000000000000000000000000001790526024805460275492516370a0823160e01b81526001600160a01b0393841660048201529394506000939216916370a082319101614ced565b606060158054806020026020016040519081016040528092919081815260200182805480156112dd576020028201919060005260206000209081546001600160a01b031681526001909101906020018083116112bf575050505050905090565b600080604051602001615345907f68656c6c6f000000000000000000000000000000000000000000000000000000815260050190565b60408051808303601f190181529082905260285463ca669fa760e01b83526001600160a01b031660048301529150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156153ac57600080fd5b505af11580156153c0573d6000803e3d6000fd5b5050604051630618f58760e51b81527f951e19ed000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e091506024016141ef565b60405163ca669fa760e01b81526101236004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561546957600080fd5b505af115801561547d573d6000803e3d6000fd5b50506040805161012360248201527f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a60448083019190915282518083039091018152606490910182526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f0000000000000000000000000000000000000000000000000000000017905290517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb3925061555e919060040161aa22565b600060405180830381600087803b15801561557857600080fd5b505af115801561558c573d6000803e3d6000fd5b50506022546025546040517f9a5904270000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015291169250639a5904279150602401610e5b565b602480546027546040516001938101939093526001600160a01b03918216604484015216606482015260009060840160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f357fc5a20000000000000000000000000000000000000000000000000000000017905260285490517f06447d560000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d906306447d5690602401600060405180830381600087803b1580156156d857600080fd5b505af11580156156ec573d6000803e3d6000fd5b5050602254602480546040517f9a5904270000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015292169350639a590427925001600060405180830381600087803b15801561575157600080fd5b505af1158015615765573d6000803e3d6000fd5b5050604051630618f58760e51b81527f584a7938000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b1580156157d557600080fd5b505af11580156157e9573d6000803e3d6000fd5b50506022546024546021546040517fc8a023620000000000000000000000000000000000000000000000000000000081526001600160a01b03938416955063c8a0236294506138a2939283169290911690600190879060040161aa35565b602254602480546040517fd936547e0000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152600093919091169163d936547e9101602060405180830381865afa1580156158b0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906158d4919061aa00565b90506158e1600182616414565b6022546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b15801561596f57600080fd5b505af1158015615983573d6000803e3d6000fd5b50506024546040516001600160a01b0390911692507f51085ddf9ebdded84b76e829eb58c4078e4b5bdf97d9a94723f336039da467919150600090a260265460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015615a1857600080fd5b505af1158015615a2c573d6000803e3d6000fd5b5050602254602480546040517f9a5904270000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015292169350639a590427925001600060405180830381600087803b158015615a9157600080fd5b505af1158015615aa5573d6000803e3d6000fd5b5050602254602480546040517fd936547e0000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201529216935063d936547e925001602060405180830381865afa158015615b0d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190615b31919061aa00565b90506115e1600082616414565b60248054602754604051620186a09381018490526001600160a01b0392831660448201529116606482015260009060840160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fc5131691000000000000000000000000000000000000000000000000000000001790526024805460275492516370a0823160e01b81526001600160a01b0393841660048201529394506000939216916370a082319101602060405180830381865afa158015615c17573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190615c3b919061aab9565b9050615c48816000616496565b602480546022546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa158015615c98573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190615cbc919061aab9565b6020546040516001600160a01b0390911660248201526044810186905290915060009060640160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb0000000000000000000000000000000000000000000000000000000017905260245490517ff30c7ba3000000000000000000000000000000000000000000000000000000008152919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f30c7ba391615d9f916001600160a01b039190911690600090869060040161aad2565b600060405180830381600087803b158015615db957600080fd5b505af1158015615dcd573d6000803e3d6000fd5b50506021546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b158015615e5f57600080fd5b505af1158015615e73573d6000803e3d6000fd5b50506020547f2b58128f24a9f59127cc5b5430d70542b22220f2d9adaa86e442b816ab98af6092506001600160a01b03169050615eb160028861ab77565b602454602754604080516001600160a01b03958616815260208101949094529184168383015292909216606082015290519081900360800190a16022546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b158015615f7957600080fd5b505af1158015615f8d573d6000803e3d6000fd5b50506021546024546040516001600160a01b039283169450911691507f85b5be9cf454e05e0bddf49315178102227c312078eefa3c00294fb4d912ae4e90615fd8908990899061ab5e565b60405180910390a360285460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561603957600080fd5b505af115801561604d573d6000803e3d6000fd5b50506022546024546021546040517f21fc65f20000000000000000000000000000000000000000000000000000000081526001600160a01b0393841695506321fc65f294506160aa9392831692909116908a908a9060040161aa35565b600060405180830381600087803b1580156160c457600080fd5b505af11580156160d8573d6000803e3d6000fd5b5050602480546027546040516370a0823160e01b81526001600160a01b03918216600482015260009550911692506370a082319101602060405180830381865afa15801561612a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061614e919061aab9565b905061615f81611e4860028961ab77565b602480546022546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa1580156161af573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906161d3919061aab9565b9050612e6d816161e460028a61ab77565b611e48908761ab29565b60265460405163ca669fa760e01b81526001600160a01b039091166004820152620186a090737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561624c57600080fd5b505af1158015616260573d6000803e3d6000fd5b5050602654604080516001600160a01b0390921660248301527f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e460448084019190915281518084039091018152606490920181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb3925061634b919060040161aa22565b600060405180830381600087803b15801561636557600080fd5b505af1158015616379573d6000803e3d6000fd5b5050602254602480546027546040517fd9caed120000000000000000000000000000000000000000000000000000000081526001600160a01b0392831660048201529082169281019290925260448201869052909116925063d9caed129150606401600060405180830381600087803b15801561393257600080fd5b60006163ff61a599565b61640a8484836164ee565b9150505b92915050565b6040517ff7fe347700000000000000000000000000000000000000000000000000000000815282151560048201528115156024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063f7fe3477906044015b60006040518083038186803b15801561648257600080fd5b505afa15801561112c573d6000803e3d6000fd5b6040517f98296c540000000000000000000000000000000000000000000000000000000081526004810183905260248101829052737109709ecfa91a80626ff3989d68f67f5b1dd12d906398296c549060440161646a565b6000806164fb8584616569565b905061655e6040518060400160405280601d81526020017f4552433139363750726f78792e736f6c3a4552433139363750726f7879000000815250828660405160200161654992919061ab3c565b60405160208183030381529060405285616575565b9150505b9392505050565b600061656283836165a3565b60c081015151600090156165995761659284848460c001516165be565b9050616562565b6165928484616764565b60006165af838361684f565b61656283836020015184616575565b6000806165c961685f565b905060006165d78683616932565b905060006165ee8260600151836020015185616dd8565b905060006165fe83838989616fea565b9050600061660b82617e67565b602081015181519192509060030b1561667e5789826040015160405160200161663592919061abb2565b60408051601f19818403018152908290527f08c379a00000000000000000000000000000000000000000000000000000000082526166759160040161aa22565b60405180910390fd5b60006166c16040518060400160405280601581526020017f4465706c6f79656420746f20616464726573733a200000000000000000000000815250836001618036565b6040517fc6ce059d000000000000000000000000000000000000000000000000000000008152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c6ce059d9061671490849060040161aa22565b602060405180830381865afa158015616731573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190616755919061ac33565b9b9a5050505050505050505050565b6040517f8d1cc9250000000000000000000000000000000000000000000000000000000081526000908190737109709ecfa91a80626ff3989d68f67f5b1dd12d90638d1cc925906167b990879060040161aa22565b600060405180830381865afa1580156167d6573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526167fe919081019061ad44565b9050600061682c828560405160200161681892919061ad79565b604051602081830303815290604052618236565b90506001600160a01b03811661640a57848460405160200161663592919061ada8565b61685b82826000618249565b5050565b604080518082018252600381527f6f75740000000000000000000000000000000000000000000000000000000000602082015290517fd145736c000000000000000000000000000000000000000000000000000000008152606091737109709ecfa91a80626ff3989d68f67f5b1dd12d91829063d145736c906168e690849060040161ae53565b600060405180830381865afa158015616903573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261692b919081019061ae9a565b9250505090565b6169646040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b6000737109709ecfa91a80626ff3989d68f67f5b1dd12d90506169af6040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b6169b88561834c565b602082015260006169c886618731565b90506000836001600160a01b031663d930a0e66040518163ffffffff1660e01b8152600401600060405180830381865afa158015616a0a573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052616a32919081019061ae9a565b86838560200151604051602001616a4c949392919061aee3565b60408051601f19818403018152908290527f60f9bb1100000000000000000000000000000000000000000000000000000000825291506000906001600160a01b038616906360f9bb1190616aa490859060040161aa22565b600060405180830381865afa158015616ac1573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052616ae9919081019061ae9a565b6040517fdb4235f60000000000000000000000000000000000000000000000000000000081529091506001600160a01b0386169063db4235f690616b3190849060040161afe7565b602060405180830381865afa158015616b4e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190616b72919061aa00565b616b875781604051602001616635919061b039565b6040517f49c4fac80000000000000000000000000000000000000000000000000000000081526001600160a01b038616906349c4fac890616bcc90849060040161b0cb565b600060405180830381865afa158015616be9573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052616c11919081019061ae9a565b84526040517fdb4235f60000000000000000000000000000000000000000000000000000000081526001600160a01b0386169063db4235f690616c5890849060040161b11d565b602060405180830381865afa158015616c75573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190616c99919061aa00565b15616d2e576040517f49c4fac80000000000000000000000000000000000000000000000000000000081526001600160a01b038616906349c4fac890616ce390849060040161b11d565b600060405180830381865afa158015616d00573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052616d28919081019061ae9a565b60408501525b846001600160a01b03166349c4fac8828660000151604051602001616d53919061b16f565b6040516020818303038152906040526040518363ffffffff1660e01b8152600401616d7f92919061b1db565b600060405180830381865afa158015616d9c573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052616dc4919081019061ae9a565b606085015250608083015250949350505050565b60408051600480825260a0820190925260609160009190816020015b6060815260200190600190039081616df45790505090506040518060400160405280600481526020017f677265700000000000000000000000000000000000000000000000000000000081525081600081518110616e5457616e5461b200565b60200260200101819052506040518060400160405280600381526020017f2d726c000000000000000000000000000000000000000000000000000000000081525081600181518110616ea857616ea861b200565b602002602001018190525084604051602001616ec4919061b22f565b60405160208183030381529060405281600281518110616ee657616ee661b200565b602002602001018190525082604051602001616f02919061b29b565b60405160208183030381529060405281600381518110616f2457616f2461b200565b60200260200101819052506000616f3a82617e67565b602080820151604080518082018252600581527f2e6a736f6e0000000000000000000000000000000000000000000000000000008185019081528251808401845260008082529086015282518084019093529051825292810192909252919250616fcb90604080518082018252600080825260209182015281518083019092528451825280850190820152906189b4565b616fe05785604051602001616635919061b2dc565b9695505050505050565b60a0810151604080518082018252600080825260209182015281518083019092528251808352928101910152606090737109709ecfa91a80626ff3989d68f67f5b1dd12d901561703a565b511590565b6171ae578260200151156170f6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605860248201527f54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f742060448201527f62652075736564207768656e207468652060736b6970566572696679536f757260648201527f6365436f646560206f7074696f6e206973206074727565600000000000000000608482015260a401616675565b8260c00151156171ae576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605360248201527f54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f742060448201527f62652075736564207768656e207468652060736b69704c6963656e736554797060648201527f6560206f7074696f6e2069732060747275656000000000000000000000000000608482015260a401616675565b6040805160ff8082526120008201909252600091816020015b60608152602001906001900390816171c757905050905060006040518060400160405280600381526020017f6e707800000000000000000000000000000000000000000000000000000000008152508282806172229061b36d565b935060ff16815181106172375761723761b200565b60200260200101819052506040518060400160405280600d81526020017f302e302e312d616c7068612e3700000000000000000000000000000000000000815250604051602001617288919061b38c565b6040516020818303038152906040528282806172a39061b36d565b935060ff16815181106172b8576172b861b200565b60200260200101819052506040518060400160405280600681526020017f6465706c6f7900000000000000000000000000000000000000000000000000008152508282806173059061b36d565b935060ff168151811061731a5761731a61b200565b60200260200101819052506040518060400160405280600e81526020017f2d2d636f6e74726163744e616d650000000000000000000000000000000000008152508282806173679061b36d565b935060ff168151811061737c5761737c61b200565b602002602001018190525087602001518282806173989061b36d565b935060ff16815181106173ad576173ad61b200565b60200260200101819052506040518060400160405280600e81526020017f2d2d636f6e7472616374506174680000000000000000000000000000000000008152508282806173fa9061b36d565b935060ff168151811061740f5761740f61b200565b6020908102919091010152875182826174278161b36d565b935060ff168151811061743c5761743c61b200565b60200260200101819052506040518060400160405280600981526020017f2d2d636861696e496400000000000000000000000000000000000000000000008152508282806174899061b36d565b935060ff168151811061749e5761749e61b200565b60200260200101819052506174b246618a15565b82826174bd8161b36d565b935060ff16815181106174d2576174d261b200565b60200260200101819052506040518060400160405280600f81526020017f2d2d6275696c64496e666f46696c65000000000000000000000000000000000081525082828061751f9061b36d565b935060ff16815181106175345761753461b200565b60200260200101819052508682828061754c9061b36d565b935060ff16815181106175615761756161b200565b60209081029190910101528551156176885760408051808201909152601581527f2d2d636f6e7374727563746f7242797465636f64650000000000000000000000602082015282826175b28161b36d565b935060ff16815181106175c7576175c761b200565b60209081029190910101526040517f71aad10d0000000000000000000000000000000000000000000000000000000081526001600160a01b038416906371aad10d9061761790899060040161aa22565b600060405180830381865afa158015617634573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261765c919081019061ae9a565b82826176678161b36d565b935060ff168151811061767c5761767c61b200565b60200260200101819052505b8460200151156177585760408051808201909152601281527f2d2d766572696679536f75726365436f64650000000000000000000000000000602082015282826176d18161b36d565b935060ff16815181106176e6576176e661b200565b60200260200101819052506040518060400160405280600581526020017f66616c73650000000000000000000000000000000000000000000000000000008152508282806177339061b36d565b935060ff16815181106177485761774861b200565b602002602001018190525061791f565b6177906170358660a0015160408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6178235760408051808201909152600d81527f2d2d6c6963656e73655479706500000000000000000000000000000000000000602082015282826177d38161b36d565b935060ff16815181106177e8576177e861b200565b60200260200101819052508460a00151604051602001617808919061b22f565b6040516020818303038152906040528282806177339061b36d565b8460c0015115801561786657506040808901518151808301835260008082526020918201528251808401909352815183529081019082015261786490511590565b155b1561791f5760408051808201909152600d81527f2d2d6c6963656e73655479706500000000000000000000000000000000000000602082015282826178aa8161b36d565b935060ff16815181106178bf576178bf61b200565b60200260200101819052506178d388618ab5565b6040516020016178e3919061b22f565b6040516020818303038152906040528282806178fe9061b36d565b935060ff16815181106179135761791361b200565b60200260200101819052505b6040808601518151808301835260008082526020918201528251808401909352815183529081019082015261795390511590565b6179e85760408051808201909152600b81527f2d2d72656c617965724964000000000000000000000000000000000000000000602082015282826179968161b36d565b935060ff16815181106179ab576179ab61b200565b602002602001018190525084604001518282806179c79061b36d565b935060ff16815181106179dc576179dc61b200565b60200260200101819052505b606085015115617b095760408051808201909152600681527f2d2d73616c74000000000000000000000000000000000000000000000000000060208201528282617a318161b36d565b935060ff1681518110617a4657617a4661b200565b602090810291909101015260608501516040517fb11a19e800000000000000000000000000000000000000000000000000000000815260048101919091526001600160a01b0384169063b11a19e890602401600060405180830381865afa158015617ab5573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052617add919081019061ae9a565b8282617ae88161b36d565b935060ff1681518110617afd57617afd61b200565b60200260200101819052505b60e08501515115617bb05760408051808201909152600a81527f2d2d6761734c696d69740000000000000000000000000000000000000000000060208201528282617b538161b36d565b935060ff1681518110617b6857617b6861b200565b6020026020010181905250617b848560e0015160000151618a15565b8282617b8f8161b36d565b935060ff1681518110617ba457617ba461b200565b60200260200101819052505b60e08501516020015115617c5a5760408051808201909152600a81527f2d2d67617350726963650000000000000000000000000000000000000000000060208201528282617bfd8161b36d565b935060ff1681518110617c1257617c1261b200565b6020026020010181905250617c2e8560e0015160200151618a15565b8282617c398161b36d565b935060ff1681518110617c4e57617c4e61b200565b60200260200101819052505b60e08501516040015115617d045760408051808201909152600e81527f2d2d6d617846656550657247617300000000000000000000000000000000000060208201528282617ca78161b36d565b935060ff1681518110617cbc57617cbc61b200565b6020026020010181905250617cd88560e0015160400151618a15565b8282617ce38161b36d565b935060ff1681518110617cf857617cf861b200565b60200260200101819052505b60e08501516060015115617dae5760408051808201909152601681527f2d2d6d61785072696f726974794665655065724761730000000000000000000060208201528282617d518161b36d565b935060ff1681518110617d6657617d6661b200565b6020026020010181905250617d828560e0015160600151618a15565b8282617d8d8161b36d565b935060ff1681518110617da257617da261b200565b60200260200101819052505b60008160ff1667ffffffffffffffff811115617dcc57617dcc61ac5c565b604051908082528060200260200182016040528015617dff57816020015b6060815260200190600190039081617dea5790505b50905060005b8260ff168160ff161015617e5857838160ff1681518110617e2857617e2861b200565b6020026020010151828260ff1681518110617e4557617e4561b200565b6020908102919091010152600101617e05565b5093505050505b949350505050565b617e8e6040518060600160405280600060030b815260200160608152602001606081525090565b60408051808201825260048082527f6261736800000000000000000000000000000000000000000000000000000000602083015291517fd145736c000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d92600091849163d145736c91617f149186910161b3f7565b600060405180830381865afa158015617f31573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052617f59919081019061ae9a565b90506000617f6786836195a4565b90506000846001600160a01b031663f45c1ce7836040518263ffffffff1660e01b8152600401617f97919061a8f2565b6000604051808303816000875af1158015617fb6573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052617fde919081019061b43e565b805190915060030b15801590617ff75750602081015151155b80156180065750604081015151155b15616fe0578160008151811061801e5761801e61b200565b6020026020010151604051602001616635919061b4f4565b6060600061806b8560408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6040805180820182526000808252602091820152815180830190925286518252808701908201529091506180a29082905b906196f9565b156181ff57600061811f82618119846181136180e58a60408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6040805180820182526000808252602091820152815180830190925282518252918201519181019190915290565b90619720565b90619782565b604080518082018252600181527f0a00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201529091506181839082906196f9565b156181ed57604080518082018252600181527f0a00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526181ea905b8290619807565b90505b6181f68161982d565b92505050616562565b821561821857848460405160200161663592919061b6e0565b5050604080516020810190915260008152616562565b509392505050565b6000808251602084016000f09392505050565b8160a001511561825857505050565b6000618265848484619896565b9050600061827282617e67565b602081015181519192509060030b15801561830e5750604080518082018252600781527f53554343455353000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261830e9060408051808201825260008082526020918201528151808301909252845182528085019082015261809c565b1561831b57505050505050565b6040820151511561833b578160400151604051602001616635919061b787565b80604051602001616635919061b7e5565b606060006183818360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600481527f2e736f6c00000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201529091506183e6905b82906189b4565b1561845557604080518082018252600481527f2e736f6c000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261656290618450908390619e31565b61982d565b604080518082018252600181527f3a00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526184b7905b8290619ebb565b60010361858457604080518082018252600181527f3a000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261851d906181e3565b50604080518082018252600181527f3a000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261656290618450905b8390619807565b604080518082018252600581527f2e6a736f6e000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526185e3906183df565b1561871a57604080518082018252600181527f2f0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082018190528451808601909552925184528301529061864b908390619f55565b90506000816001835161865e919061ab29565b8151811061866e5761866e61b200565b602002602001015190506187116184506186e46040518060400160405280600581526020017f2e6a736f6e00000000000000000000000000000000000000000000000000000081525060408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b60408051808201825260008082526020918201528151808301909252855182528086019082015290619e31565b95945050505050565b82604051602001616635919061b850565b50919050565b606060006187668360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600481527f2e736f6c00000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201529091506187c8906183df565b156187d6576165628161982d565b604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152618835906184b0565b60010361889f57604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616562906184509061857d565b604080518082018252600581527f2e6a736f6e000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526188fe906183df565b1561871a57604080518082018252600181527f2f00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820181905284518086019095529251845283015290618966908390619f55565b90506001815111156189a2578060028251618981919061ab29565b815181106189915761899161b200565b602002602001015192505050919050565b5082604051602001616635919061b850565b8051825160009111156189c95750600061640e565b815183516020850151600092916189df9161b92e565b6189e9919061ab29565b905082602001518103618a0057600191505061640e565b82516020840151819020912014905092915050565b60606000618a2283619ffa565b600101905060008167ffffffffffffffff811115618a4257618a4261ac5c565b6040519080825280601f01601f191660200182016040528015618a6c576020820181803683370190505b5090508181016020015b600019017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a8504945084618a7657509392505050565b604081810151815180830183526000808252602091820181905283518085018552835181529282018383015283518085018552600a81527f554e4c4943454e5345440000000000000000000000000000000000000000000081840190815285518087018752838152840192909252845180860190955251845290830152606091618b41905b829061a0dc565b15618b8157505060408051808201909152600481527f4e6f6e65000000000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600981527f556e6c6963656e7365000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152618be090618b3a565b15618c2057505060408051808201909152600981527f556e6c6963656e736500000000000000000000000000000000000000000000006020820152919050565b604080518082018252600381527f4d4954000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152618c7f90618b3a565b15618cbf57505060408051808201909152600381527f4d495400000000000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f47504c2d322e302d6f6e6c79000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152618d1e90618b3a565b80618d835750604080518082018252601081527f47504c2d322e302d6f722d6c617465720000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152618d8390618b3a565b15618dc357505060408051808201909152600981527f474e552047504c763200000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f47504c2d332e302d6f6e6c79000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152618e2290618b3a565b80618e875750604080518082018252601081527f47504c2d332e302d6f722d6c617465720000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152618e8790618b3a565b15618ec757505060408051808201909152600981527f474e552047504c763300000000000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4c47504c2d322e312d6f6e6c790000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152618f2690618b3a565b80618f8b5750604080518082018252601181527f4c47504c2d322e312d6f722d6c6174657200000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152618f8b90618b3a565b15618fcb57505060408051808201909152600c81527f474e55204c47504c76322e3100000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4c47504c2d332e302d6f6e6c79000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261902a90618b3a565b8061908f5750604080518082018252601181527f4c47504c2d332e302d6f722d6c617465720000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261908f90618b3a565b156190cf57505060408051808201909152600a81527f474e55204c47504c7633000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f4253442d322d436c6175736500000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261912e90618b3a565b1561916e57505060408051808201909152600c81527f4253442d322d436c6175736500000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f4253442d332d436c617573650000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526191cd90618b3a565b1561920d57505060408051808201909152600c81527f4253442d332d436c6175736500000000000000000000000000000000000000006020820152919050565b604080518082018252600781527f4d504c2d322e30000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261926c90618b3a565b156192ac57505060408051808201909152600781527f4d504c2d322e30000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600781527f4f534c2d332e30000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261930b90618b3a565b1561934b57505060408051808201909152600781527f4f534c2d332e30000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600a81527f4170616368652d322e3000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526193aa90618b3a565b156193ea57505060408051808201909152600a81527f4170616368652d322e30000000000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4147504c2d332e302d6f6e6c79000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261944990618b3a565b806194ae5750604080518082018252601181527f4147504c2d332e302d6f722d6c61746572000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526194ae90618b3a565b156194ee57505060408051808201909152600a81527f474e55204147504c7633000000000000000000000000000000000000000000006020820152919050565b604080518082018252600881527f4255534c2d312e310000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261954d90618b3a565b1561958d57505060408051808201909152600781527f42534c20312e31000000000000000000000000000000000000000000000000006020820152919050565b60408084015184519151616635929060200161b941565b60608060005b845181101561962f57818582815181106195c6576195c661b200565b60200260200101516040516020016195df92919061ad79565b6040516020818303038152906040529150600185516195fe919061ab29565b81146196275781604051602001619615919061baaa565b60405160208183030381529060405291505b6001016195aa565b5060408051600380825260808201909252600091816020015b606081526020019060019003908161964857905050905083816000815181106196735761967361b200565b60200260200101819052506040518060400160405280600281526020017f2d63000000000000000000000000000000000000000000000000000000000000815250816001815181106196c7576196c761b200565b602002602001018190525081816002815181106196e6576196e661b200565b6020908102919091010152949350505050565b6020808301518351835192840151600093619717929184919061a0f0565b14159392505050565b60408051808201909152600080825260208201526000619752846000015185602001518560000151866020015161a201565b9050836020015181619764919061ab29565b8451859061977390839061ab29565b90525060208401525090919050565b60408051808201909152600080825260208201528151835110156197a757508161640e565b60208083015190840151600191146197ce5750815160208481015190840151829020919020145b80156197ff578251845185906197e590839061ab29565b90525082516020850180516197fb90839061b92e565b9052505b509192915050565b604080518082019091526000808252602082015261982683838361a321565b5092915050565b60606000826000015167ffffffffffffffff81111561984e5761984e61ac5c565b6040519080825280601f01601f191660200182016040528015619878576020820181803683370190505b5090506000602082019050619826818560200151866000015161a3cc565b606060006198a261685f565b6040805160ff808252612000820190925291925060009190816020015b60608152602001906001900390816198bf57905050905060006040518060400160405280600381526020017f6e7078000000000000000000000000000000000000000000000000000000000081525082828061991a9061b36d565b935060ff168151811061992f5761992f61b200565b60200260200101819052506040518060400160405280600781526020017f5e312e33322e3300000000000000000000000000000000000000000000000000815250604051602001619980919061baeb565b60405160208183030381529060405282828061999b9061b36d565b935060ff16815181106199b0576199b061b200565b60200260200101819052506040518060400160405280600881526020017f76616c69646174650000000000000000000000000000000000000000000000008152508282806199fd9061b36d565b935060ff1681518110619a1257619a1261b200565b602002602001018190525082604051602001619a2e919061b29b565b604051602081830303815290604052828280619a499061b36d565b935060ff1681518110619a5e57619a5e61b200565b60200260200101819052506040518060400160405280600a81526020017f2d2d636f6e747261637400000000000000000000000000000000000000000000815250828280619aab9061b36d565b935060ff1681518110619ac057619ac061b200565b6020026020010181905250619ad5878461a446565b8282619ae08161b36d565b935060ff1681518110619af557619af561b200565b602090810291909101015285515115619ba15760408051808201909152600b81527f2d2d7265666572656e636500000000000000000000000000000000000000000060208201528282619b478161b36d565b935060ff1681518110619b5c57619b5c61b200565b6020026020010181905250619b7586600001518461a446565b8282619b808161b36d565b935060ff1681518110619b9557619b9561b200565b60200260200101819052505b856080015115619c0f5760408051808201909152601881527f2d2d756e73616665536b697053746f72616765436865636b000000000000000060208201528282619bea8161b36d565b935060ff1681518110619bff57619bff61b200565b6020026020010181905250619c75565b8415619c755760408051808201909152601281527f2d2d726571756972655265666572656e6365000000000000000000000000000060208201528282619c548161b36d565b935060ff1681518110619c6957619c6961b200565b60200260200101819052505b60408601515115619d115760408051808201909152600d81527f2d2d756e73616665416c6c6f770000000000000000000000000000000000000060208201528282619cbf8161b36d565b935060ff1681518110619cd457619cd461b200565b60200260200101819052508560400151828280619cf09061b36d565b935060ff1681518110619d0557619d0561b200565b60200260200101819052505b856060015115619d7b5760408051808201909152601481527f2d2d756e73616665416c6c6f7752656e616d657300000000000000000000000060208201528282619d5a8161b36d565b935060ff1681518110619d6f57619d6f61b200565b60200260200101819052505b60008160ff1667ffffffffffffffff811115619d9957619d9961ac5c565b604051908082528060200260200182016040528015619dcc57816020015b6060815260200190600190039081619db75790505b50905060005b8260ff168160ff161015619e2557838160ff1681518110619df557619df561b200565b6020026020010151828260ff1681518110619e1257619e1261b200565b6020908102919091010152600101619dd2565b50979650505050505050565b6040805180820190915260008082526020820152815183511015619e5657508161640e565b81518351602085015160009291619e6c9161b92e565b619e76919061ab29565b60208401519091506001908214619e97575082516020840151819020908220145b8015619eb257835185518690619eae90839061ab29565b9052505b50929392505050565b6000808260000151619edf856000015186602001518660000151876020015161a201565b619ee9919061b92e565b90505b83516020850151619efd919061b92e565b81116198265781619f0d8161bb30565b9250508260000151619f44856020015183619f28919061ab29565b8651619f34919061ab29565b838660000151876020015161a201565b619f4e919061b92e565b9050619eec565b60606000619f638484619ebb565b619f6e90600161b92e565b67ffffffffffffffff811115619f8657619f8661ac5c565b604051908082528060200260200182016040528015619fb957816020015b6060815260200190600190039081619fa45790505b50905060005b815181101561822e57619fd56184508686619807565b828281518110619fe757619fe761b200565b6020908102919091010152600101619fbf565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000831061a043577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef8100000000831061a06f576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc10000831061a08d57662386f26fc10000830492506010015b6305f5e100831061a0a5576305f5e100830492506008015b612710831061a0b957612710830492506004015b6064831061a0cb576064830492506002015b600a831061640e5760010192915050565b600061a0e8838361a486565b159392505050565b60008085841161a1f7576020841161a1a3576000841561a13b57600161a11786602061ab29565b61a12290600861bb4a565b61a12d90600261bc48565b61a137919061ab29565b1990505b835181168561a14a898961b92e565b61a154919061ab29565b805190935082165b81811461a18e5787841161a1765787945050505050617e5f565b8361a1808161bc54565b94505082845116905061a15c565b61a198878561b92e565b945050505050617e5f565b83832061a1b0858861ab29565b61a1ba908761b92e565b91505b85821061a1f55784822080820361a1e25761a1d8868461b92e565b9350505050617e5f565b61a1ed60018461ab29565b92505061a1bd565b505b5092949350505050565b6000838186851161a30c576020851161a2bb576000851561a24d57600161a22987602061ab29565b61a23490600861bb4a565b61a23f90600261bc48565b61a249919061ab29565b1990505b8451811660008761a25e8b8b61b92e565b61a268919061ab29565b855190915083165b82811461a2ad5781861061a2955761a2888b8b61b92e565b9650505050505050617e5f565b8561a29f8161bb30565b96505083865116905061a270565b859650505050505050617e5f565b508383206000905b61a2cd868961ab29565b821161a30a5785832080820361a2e95783945050505050617e5f565b61a2f460018561b92e565b935050818061a3029061bb30565b92505061a2c3565b505b61a316878761b92e565b979650505050505050565b6040805180820190915260008082526020820152600061a353856000015186602001518660000151876020015161a201565b60208087018051918601919091525190915061a36f908261ab29565b83528451602086015161a382919061b92e565b810361a391576000855261a3c3565b8351835161a39f919061b92e565b8551869061a3ae90839061ab29565b905250835161a3bd908261b92e565b60208601525b50909392505050565b6020811061a404578151835261a3e360208461b92e565b925061a3f060208361b92e565b915061a3fd60208261ab29565b905061a3cc565b600019811561a43357600161a41a83602061ab29565b61a4269061010061bc48565b61a430919061ab29565b90505b9151835183169219169190911790915250565b6060600061a4548484616932565b805160208083015160405193945061a46e9390910161bc6b565b60405160208183030381529060405291505092915050565b815181516000919081111561a499575081515b6020808501519084015160005b8381101561a552578251825180821461a52257600019602087101561a5015760018461a4d389602061ab29565b61a4dd919061b92e565b61a4e890600861bb4a565b61a4f390600261bc48565b61a4fd919061ab29565b1990505b818116838216818103911461a51f57975061640e9650505050505050565b50505b61a52d60208661b92e565b945061a53a60208561b92e565b9350505060208161a54b919061b92e565b905061a4a6565b5084518651616fe0919061bcc3565b610c9f806200bce483390190565b611798806200c98383390190565b61155a806200e11b83390190565b610d5e806200f67583390190565b6040518060e0016040528060608152602001606081526020016060815260200160001515815260200160001515815260200160001515815260200161a5dc61a5e1565b905290565b6040518061010001604052806000151581526020016000151581526020016060815260200160008019168152602001606081526020016060815260200160001515815260200161a5dc6040518060800160405280600081526020016000815260200160008152602001600081525090565b602080825282518282018190526000918401906040840190835b8181101561a6935783516001600160a01b031683526020938401939092019160010161a66c565b509095945050505050565b60005b8381101561a6b957818101518382015260200161a6a1565b50506000910152565b6000815180845261a6da81602086016020860161a69e565b601f01601f19169290920160200192915050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b8281101561a7ea577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452815180516001600160a01b03168652602090810151604082880181905281519088018190529101906060600582901b88018101919088019060005b8181101561a7d0577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa08a850301835261a7ba84865161a6c2565b602095860195909450929092019160010161a780565b50919750505060209485019492909201915060010161a716565b50929695505050505050565b600081518084526020840193506020830160005b8281101561a84a5781517fffffffff000000000000000000000000000000000000000000000000000000001686526020958601959091019060010161a80a565b5093949350505050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b8281101561a7ea577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452815180516040875261a8c0604088018261a6c2565b905060208201519150868103602088015261a8db818361a7f6565b96505050602093840193919091019060010161a87c565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b8281101561a7ea577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc087860301845261a95485835161a6c2565b9450602093840193919091019060010161a91a565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b8281101561a7ea577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc087860301845281516001600160a01b038151168652602081015190506040602087015261a9ea604087018261a7f6565b955050602093840193919091019060010161a991565b60006020828403121561aa1257600080fd5b8151801515811461656257600080fd5b602081526000616562602083018461a6c2565b6001600160a01b03851681526001600160a01b0384166020820152826040820152608060608201526000616fe0608083018461a6c2565b600181811c9082168061aa8057607f821691505b60208210810361872b577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006020828403121561aacb57600080fd5b5051919050565b6001600160a01b0384168152826020820152606060408201526000618711606083018461a6c2565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8181038181111561640e5761640e61aafa565b6001600160a01b0383168152604060208201526000617e5f604083018461a6c2565b828152604060208201526000617e5f604083018461a6c2565b60008261abad577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b7f4661696c656420746f206465706c6f7920636f6e74726163742000000000000081526000835161abea81601a85016020880161a69e565b7f3a20000000000000000000000000000000000000000000000000000000000000601a91840191820152835161ac2781601c84016020880161a69e565b01601c01949350505050565b60006020828403121561ac4557600080fd5b81516001600160a01b038116811461656257600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040516060810167ffffffffffffffff8111828210171561acae5761acae61ac5c565b60405290565b60008067ffffffffffffffff84111561accf5761accf61ac5c565b50604051601f19601f85018116603f0116810181811067ffffffffffffffff8211171561acfe5761acfe61ac5c565b60405283815290508082840185101561ad1657600080fd5b61822e84602083018561a69e565b600082601f83011261ad3557600080fd5b6165628383516020850161acb4565b60006020828403121561ad5657600080fd5b815167ffffffffffffffff81111561ad6d57600080fd5b61640a8482850161ad24565b6000835161ad8b81846020880161a69e565b83519083019061ad9f81836020880161a69e565b01949350505050565b7f4661696c656420746f206465706c6f7920636f6e74726163742000000000000081526000835161ade081601a85016020880161a69e565b7f207573696e6720636f6e7374727563746f722064617461202200000000000000601a91840191820152835161ae1d81603384016020880161a69e565b7f220000000000000000000000000000000000000000000000000000000000000060339290910191820152603401949350505050565b60408152600b60408201527f464f554e4452595f4f55540000000000000000000000000000000000000000006060820152608060208201526000616562608083018461a6c2565b60006020828403121561aeac57600080fd5b815167ffffffffffffffff81111561aec357600080fd5b8201601f8101841361aed457600080fd5b61640a8482516020840161acb4565b6000855161aef5818460208a0161a69e565b7f2f00000000000000000000000000000000000000000000000000000000000000908301908152855161af2f816001840160208a0161a69e565b7f2f0000000000000000000000000000000000000000000000000000000000000060019290910191820152845161af6d81600284016020890161a69e565b6001818301019150507f2f000000000000000000000000000000000000000000000000000000000000006001820152835161afaf81600284016020880161a69e565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600292909101918201526007019695505050505050565b60408152600061affa604083018461a6c2565b8281036020840152600481527f2e6173740000000000000000000000000000000000000000000000000000000060208201526040810191505092915050565b7f436f756c64206e6f742066696e642041535420696e206172746966616374200081526000825161b07181601f85016020870161a69e565b7f2e205365742060617374203d20747275656020696e20666f756e6472792e746f601f9390910192830152507f6d6c000000000000000000000000000000000000000000000000000000000000603f820152604101919050565b60408152600061b0de604083018461a6c2565b8281036020840152601181527f2e6173742e6162736f6c7574655061746800000000000000000000000000000060208201526040810191505092915050565b60408152600061b130604083018461a6c2565b8281036020840152600c81527f2e6173742e6c6963656e7365000000000000000000000000000000000000000060208201526040810191505092915050565b7f2e6d657461646174612e736f75726365732e5b2700000000000000000000000081526000825161b1a781601485016020870161a69e565b7f275d2e6b656363616b32353600000000000000000000000000000000000000006014939091019283015250602001919050565b60408152600061b1ee604083018561a6c2565b828103602084015261655e818561a6c2565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f220000000000000000000000000000000000000000000000000000000000000081526000825161b26781600185016020870161a69e565b7f22000000000000000000000000000000000000000000000000000000000000006001939091019283015250600201919050565b6000825161b2ad81846020870161a69e565b7f2f6275696c642d696e666f000000000000000000000000000000000000000000920191825250600b01919050565b7f436f756c64206e6f742066696e64206275696c642d696e666f2066696c65207781527f697468206d61746368696e6720736f7572636520636f6465206861736820666f60208201527f7220636f6e74726163742000000000000000000000000000000000000000000060408201526000825161b36081604b85016020870161a69e565b91909101604b0192915050565b600060ff821660ff810361b3835761b38361aafa565b60010192915050565b7f406f70656e7a657070656c696e2f646566656e6465722d6465706c6f792d636c81527f69656e742d636c6940000000000000000000000000000000000000000000000060208201526000825161b3ea81602985016020870161a69e565b9190910160290192915050565b60408152601660408201527f4f50454e5a455050454c494e5f424153485f50415448000000000000000000006060820152608060208201526000616562608083018461a6c2565b60006020828403121561b45057600080fd5b815167ffffffffffffffff81111561b46757600080fd5b82016060818503121561b47957600080fd5b61b48161ac8b565b81518060030b811461b49257600080fd5b8152602082015167ffffffffffffffff81111561b4ae57600080fd5b61b4ba8682850161ad24565b602083015250604082015167ffffffffffffffff81111561b4da57600080fd5b61b4e68682850161ad24565b604083015250949350505050565b7f4661696c656420746f2072756e206261736820636f6d6d616e6420776974682081527f220000000000000000000000000000000000000000000000000000000000000060208201526000825161b55281602185016020870161a69e565b7f222e20496620796f7520617265207573696e672057696e646f77732c2073657460219390910192830152507f20746865204f50454e5a455050454c494e5f424153485f5041544820656e766960418201527f726f6e6d656e74207661726961626c6520746f207468652066756c6c7920717560618201527f616c69666965642070617468206f66207468652062617368206578656375746160818201527f626c652e20466f72206578616d706c652c20696620796f75206172652075736960a18201527f6e672047697420666f722057696e646f77732c206164642074686520666f6c6c60c18201527f6f77696e67206c696e6520696e20746865202e656e762066696c65206f66207960e18201527f6f75722070726f6a65637420287573696e6720666f727761726420736c6173686101018201527f6573293a0a4f50454e5a455050454c494e5f424153485f504154483d22433a2f6101218201527f50726f6772616d2046696c65732f4769742f62696e2f6261736822000000000061014182015261015c01919050565b7f4661696c656420746f2066696e64206c696e652077697468207072656669782081527f270000000000000000000000000000000000000000000000000000000000000060208201526000835161b73e81602185016020880161a69e565b7f2720696e206f75747075743a2000000000000000000000000000000000000000602191840191820152835161b77b81602e84016020880161a69e565b01602e01949350505050565b7f4661696c656420746f2072756e2075706772616465207361666574792076616c81527f69646174696f6e3a20000000000000000000000000000000000000000000000060208201526000825161b3ea81602985016020870161a69e565b7f55706772616465207361666574792076616c69646174696f6e206661696c656481527f3a0a00000000000000000000000000000000000000000000000000000000000060208201526000825161b84381602285016020870161a69e565b9190910160220192915050565b7f436f6e7472616374206e616d652000000000000000000000000000000000000081526000825161b88881600e85016020870161a69e565b7f206d75737420626520696e2074686520666f726d6174204d79436f6e74726163600e9390910192830152507f742e736f6c3a4d79436f6e7472616374206f72204d79436f6e74726163742e73602e8201527f6f6c206f72206f75742f4d79436f6e74726163742e736f6c2f4d79436f6e7472604e8201527f6163742e6a736f6e000000000000000000000000000000000000000000000000606e820152607601919050565b8082018082111561640e5761640e61aafa565b7f53504458206c6963656e7365206964656e74696669657220000000000000000081526000835161b97981601885016020880161a69e565b7f20696e2000000000000000000000000000000000000000000000000000000000601891840191820152835161b9b681601c84016020880161a69e565b7f20646f6573206e6f74206c6f6f6b206c696b65206120737570706f7274656420601c92909101918201527f6c6963656e736520666f7220626c6f636b206578706c6f726572207665726966603c8201527f69636174696f6e2e205573652074686520606c6963656e73655479706560206f605c8201527f7074696f6e20746f20737065636966792061206c6963656e736520747970652c607c8201527f206f7220736574207468652060736b69704c6963656e73655479706560206f70609c8201527f74696f6e20746f2060747275656020746f20736b69702e00000000000000000060bc82015260d301949350505050565b6000825161babc81846020870161a69e565b7f2000000000000000000000000000000000000000000000000000000000000000920191825250600101919050565b7f406f70656e7a657070656c696e2f75706772616465732d636f7265400000000081526000825161bb2381601c85016020870161a69e565b91909101601c0192915050565b6000600019820361bb435761bb4361aafa565b5060010190565b808202811582820484141761640e5761640e61aafa565b6001815b600184111561bb9c5780850481111561bb805761bb8061aafa565b600184161561bb8e57908102905b60019390931c92800261bb65565b935093915050565b60008261bbb35750600161640e565b8161bbc05750600061640e565b816001811461bbd6576002811461bbe05761bbfc565b600191505061640e565b60ff84111561bbf15761bbf161aafa565b50506001821b61640e565b5060208310610133831016604e8410600b841016171561bc1f575081810a61640e565b61bc2c600019848461bb61565b806000190482111561bc405761bc4061aafa565b029392505050565b6000616562838361bba4565b60008161bc635761bc6361aafa565b506000190190565b6000835161bc7d81846020880161a69e565b7f3a00000000000000000000000000000000000000000000000000000000000000908301908152835161bcb781600184016020880161a69e565b01600101949350505050565b81810360008312801583831316838312821617156198265761982661aafa56fe608060405234801561001057600080fd5b50604051610c9f380380610c9f83398101604081905261002f9161010d565b8181600361003d83826101ff565b50600461004a82826101ff565b50505050506102bd565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261007b57600080fd5b81516001600160401b0381111561009457610094610054565b604051601f8201601f19908116603f011681016001600160401b03811182821017156100c2576100c2610054565b6040528181528382016020018510156100da57600080fd5b60005b828110156100f9576020818601810151838301820152016100dd565b506000918101602001919091529392505050565b6000806040838503121561012057600080fd5b82516001600160401b0381111561013657600080fd5b6101428582860161006a565b602085015190935090506001600160401b0381111561016057600080fd5b61016c8582860161006a565b9150509250929050565b600181811c9082168061018a57607f821691505b6020821081036101aa57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156101fa57806000526020600020601f840160051c810160208510156101d75750805b601f840160051c820191505b818110156101f757600081556001016101e3565b50505b505050565b81516001600160401b0381111561021857610218610054565b61022c816102268454610176565b846101b0565b6020601f82116001811461026057600083156102485750848201515b600019600385901b1c1916600184901b1784556101f7565b600084815260208120601f198516915b828110156102905787850151825560209485019460019092019101610270565b50848210156102ae5786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b6109d3806102cc6000396000f3fe608060405234801561001057600080fd5b50600436106100be5760003560e01c806340c10f191161007657806395d89b411161005b57806395d89b4114610183578063a9059cbb1461018b578063dd62ed3e1461019e57600080fd5b806340c10f191461013857806370a082311461014d57600080fd5b806318160ddd116100a757806318160ddd1461010457806323b872dd14610116578063313ce5671461012957600080fd5b806306fdde03146100c3578063095ea7b3146100e1575b600080fd5b6100cb6101e4565b6040516100d891906107bf565b60405180910390f35b6100f46100ef366004610854565b610276565b60405190151581526020016100d8565b6002545b6040519081526020016100d8565b6100f461012436600461087e565b610290565b604051601281526020016100d8565b61014b610146366004610854565b6102b4565b005b61010861015b3660046108bb565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6100cb6102c2565b6100f4610199366004610854565b6102d1565b6101086101ac3660046108dd565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6060600380546101f390610910565b80601f016020809104026020016040519081016040528092919081815260200182805461021f90610910565b801561026c5780601f106102415761010080835404028352916020019161026c565b820191906000526020600020905b81548152906001019060200180831161024f57829003601f168201915b5050505050905090565b6000336102848185856102df565b60019150505b92915050565b60003361029e8582856102f1565b6102a98585856103c5565b506001949350505050565b6102be8282610470565b5050565b6060600480546101f390610910565b6000336102848185856103c5565b6102ec83838360016104cc565b505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146103bf57818110156103b0576040517ffb8f41b200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416600482015260248101829052604481018390526064015b60405180910390fd5b6103bf848484840360006104cc565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8316610415576040517f96c6fd1e000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff8216610465576040517fec442f05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b6102ec838383610614565b73ffffffffffffffffffffffffffffffffffffffff82166104c0576040517fec442f05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b6102be60008383610614565b73ffffffffffffffffffffffffffffffffffffffff841661051c576040517fe602df05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff831661056c576040517f94280d62000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260016020908152604080832093871683529290522082905580156103bf578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161060691815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff831661064c5780600260008282546106419190610963565b909155506106fe9050565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260208190526040902054818110156106d2576040517fe450d38c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8516600482015260248101829052604481018390526064016103a7565b73ffffffffffffffffffffffffffffffffffffffff841660009081526020819052604090209082900390555b73ffffffffffffffffffffffffffffffffffffffff821661072757600280548290039055610753565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090208054820190555b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516107b291815260200190565b60405180910390a3505050565b602081526000825180602084015260005b818110156107ed57602081860181015160408684010152016107d0565b5060006040828501015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011684010191505092915050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461084f57600080fd5b919050565b6000806040838503121561086757600080fd5b6108708361082b565b946020939093013593505050565b60008060006060848603121561089357600080fd5b61089c8461082b565b92506108aa6020850161082b565b929592945050506040919091013590565b6000602082840312156108cd57600080fd5b6108d68261082b565b9392505050565b600080604083850312156108f057600080fd5b6108f98361082b565b91506109076020840161082b565b90509250929050565b600181811c9082168061092457607f821691505b60208210810361095d577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b8082018082111561028a577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea26469706673582212207e804ca539d49155d2b6bc19268ce22f9f857027c75247d69fb0d56a089c93d464736f6c634300081a003360a060405234801561001057600080fd5b5060405161179838038061179883398101604081905261002f916101e5565b60016000556002805460ff191690556001600160a01b038316158061005b57506001600160a01b038216155b8061006d57506001600160a01b038116155b1561008b5760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b0383166080526100a3600082610134565b506100ce7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a82610134565b506100f97f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e483610134565b5061011260008051602061177883398151915282610134565b5061012b60008051602061177883398151915283610134565b50505050610228565b60008281526001602090815260408083206001600160a01b038516845290915281205460ff166101bf5760008381526001602081815260408084206001600160a01b0387168086529252808420805460ff19169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45060016101c3565b5060005b92915050565b80516001600160a01b03811681146101e057600080fd5b919050565b6000806000606084860312156101fa57600080fd5b610203846101c9565b9250610211602085016101c9565b915061021f604085016101c9565b90509250925092565b60805161151961025f6000396000818161019e01528181610500015281816105620152818161099101526109f301526115196000f3fe608060405234801561001057600080fd5b506004361061016c5760003560e01c806385f438c1116100cd578063c8a0236211610081578063d936547e11610066578063d936547e14610355578063d9caed1214610378578063e63ab1e91461038b57600080fd5b8063c8a023621461032f578063d547741f1461034257600080fd5b80639a590427116100b25780639a590427146103015780639b19251a14610314578063a217fddf1461032757600080fd5b806385f438c11461029457806391d14854146102bb57600080fd5b806336568abe11610124578063570618e111610109578063570618e11461025a5780635c975abb146102815780638456cb591461028c57600080fd5b806336568abe1461023f5780633f4ba83a1461025257600080fd5b806321fc65f21161015557806321fc65f2146101e5578063248a9ca3146101fa5780632f2ff15d1461022c57600080fd5b806301ffc9a714610171578063116191b614610199575b600080fd5b61018461017f366004611224565b6103b2565b60405190151581526020015b60405180910390f35b6101c07f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610190565b6101f86101f336600461128f565b61044b565b005b61021e61020836600461132c565b6000908152600160208190526040909120015490565b604051908152602001610190565b6101f861023a366004611345565b61064c565b6101f861024d366004611345565b610678565b6101f86106d6565b61021e7f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a81565b60025460ff16610184565b6101f861070b565b61021e7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b6101846102c9366004611345565b600091825260016020908152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b6101f861030f366004611371565b61073d565b6101f8610322366004611371565b61080b565b61021e600081565b6101f861033d36600461128f565b6108dc565b6101f8610350366004611345565b610ac3565b610184610363366004611371565b60036020526000908152604090205460ff1681565b6101f861038636600461138c565b610ae9565b61021e7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061044557507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b610453610c15565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461047d81610c58565b610485610c62565b73ffffffffffffffffffffffffffffffffffffffff861660009081526003602052604090205460ff166104e4576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61052573ffffffffffffffffffffffffffffffffffffffff87167f000000000000000000000000000000000000000000000000000000000000000086610ca1565b6040517f5131ab5900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690635131ab599061059f9089908990899089908990600401611412565b600060405180830381600087803b1580156105b957600080fd5b505af11580156105cd573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167f85b5be9cf454e05e0bddf49315178102227c312078eefa3c00294fb4d912ae4e8686866040516106329392919061146f565b60405180910390a3506106456001600055565b5050505050565b6000828152600160208190526040909120015461066881610c58565b6106728383610d2e565b50505050565b73ffffffffffffffffffffffffffffffffffffffff811633146106c7576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6106d18282610ddb565b505050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61070081610c58565b610708610e7c565b50565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61073581610c58565b610708610edb565b7f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a61076781610c58565b73ffffffffffffffffffffffffffffffffffffffff82166107b4576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216600081815260036020526040808220805460ff19169055517f51085ddf9ebdded84b76e829eb58c4078e4b5bdf97d9a94723f336039da467919190a25050565b7f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a61083581610c58565b73ffffffffffffffffffffffffffffffffffffffff8216610882576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216600081815260036020526040808220805460ff19166001179055517faab7954e9d246b167ef88aeddad35209ca2489d95a8aeb59e288d9b19fae5a549190a25050565b6108e4610c15565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461090e81610c58565b610916610c62565b73ffffffffffffffffffffffffffffffffffffffff861660009081526003602052604090205460ff16610975576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6109b673ffffffffffffffffffffffffffffffffffffffff87167f000000000000000000000000000000000000000000000000000000000000000086610ca1565b6040517fb8969bd400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063b8969bd490610a309089908990899089908990600401611412565b600060405180830381600087803b158015610a4a57600080fd5b505af1158015610a5e573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fb9d4efa96044e5f5e03e696fa9ae2ff66911cc27e8a637c3627c75bc5b2241c88686866040516106329392919061146f565b60008281526001602081905260409091200154610adf81610c58565b6106728383610ddb565b610af1610c15565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e4610b1b81610c58565b610b23610c62565b73ffffffffffffffffffffffffffffffffffffffff841660009081526003602052604090205460ff16610b82576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610ba373ffffffffffffffffffffffffffffffffffffffff85168484610ca1565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f9b1bfa7fa9ee420a16e124f794c35ac9f90472acc99140eb2f6447c714cad8eb84604051610c0291815260200190565b60405180910390a3506106d16001600055565b600260005403610c51576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b6107088133610f18565b60025460ff1615610c9f576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6040805173ffffffffffffffffffffffffffffffffffffffff8416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb000000000000000000000000000000000000000000000000000000001790526106d1908490610fa9565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff16610dd357600083815260016020818152604080842073ffffffffffffffffffffffffffffffffffffffff87168086529252808420805460ff19169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a4506001610445565b506000610445565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff1615610dd357600083815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff86168085529252808320805460ff1916905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a4506001610445565b610e8461103f565b6002805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b610ee3610c62565b6002805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258610eb13390565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16610fa5576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82166004820152602481018390526044015b60405180910390fd5b5050565b6000610fcb73ffffffffffffffffffffffffffffffffffffffff84168361107b565b90508051600014158015610ff0575080806020019051810190610fee9190611492565b155b156106d1576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84166004820152602401610f9c565b60025460ff16610c9f576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606061108983836000611090565b9392505050565b6060814710156110ce576040517fcd786059000000000000000000000000000000000000000000000000000000008152306004820152602401610f9c565b6000808573ffffffffffffffffffffffffffffffffffffffff1684866040516110f791906114b4565b60006040518083038185875af1925050503d8060008114611134576040519150601f19603f3d011682016040523d82523d6000602084013e611139565b606091505b5091509150611149868383611153565b9695505050505050565b60608261116857611163826111e2565b611089565b815115801561118c575073ffffffffffffffffffffffffffffffffffffffff84163b155b156111db576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85166004820152602401610f9c565b5080611089565b8051156111f25780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006020828403121561123657600080fd5b81357fffffffff000000000000000000000000000000000000000000000000000000008116811461108957600080fd5b803573ffffffffffffffffffffffffffffffffffffffff8116811461128a57600080fd5b919050565b6000806000806000608086880312156112a757600080fd5b6112b086611266565b94506112be60208701611266565b935060408601359250606086013567ffffffffffffffff8111156112e157600080fd5b8601601f810188136112f257600080fd5b803567ffffffffffffffff81111561130957600080fd5b88602082840101111561131b57600080fd5b959894975092955050506020019190565b60006020828403121561133e57600080fd5b5035919050565b6000806040838503121561135857600080fd5b8235915061136860208401611266565b90509250929050565b60006020828403121561138357600080fd5b61108982611266565b6000806000606084860312156113a157600080fd5b6113aa84611266565b92506113b860208501611266565b929592945050506040919091013590565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff8616815273ffffffffffffffffffffffffffffffffffffffff851660208201528360408201526080606082015260006114646080830184866113c9565b979650505050505050565b8381526040602082015260006114896040830184866113c9565b95945050505050565b6000602082840312156114a457600080fd5b8151801515811461108957600080fd5b6000825160005b818110156114d557602081860181015185830152016114bb565b50600092019182525091905056fea26469706673582212207ea3ad4ba4a6d39c3be3cec464753448900300ac3b508b4000815de5b914c53064736f6c634300081a00338619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a60c060405260001960035534801561001657600080fd5b5060405161155a38038061155a83398101604081905261003591610220565b60016000819055805460ff19169055838383836001600160a01b038416158061006557506001600160a01b038316155b8061007757506001600160a01b038216155b8061008957506001600160a01b038116155b156100a75760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b03808516608052831660a0526100c5600082610154565b506100f07f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e483610154565b5061011b7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb83610154565b506101467f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a82610154565b505050505050505050610274565b60008281526002602090815260408083206001600160a01b038516845290915281205460ff166101fa5760008381526002602090815260408083206001600160a01b03861684529091529020805460ff191660011790556101b23390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45060016101fe565b5060005b92915050565b80516001600160a01b038116811461021b57600080fd5b919050565b6000806000806080858703121561023657600080fd5b61023f85610204565b935061024d60208601610204565b925061025b60408601610204565b915061026960608601610204565b905092959194509250565b60805160a0516112826102d86000396000818161021d01528181610531015281816108240152818161097b01528181610ad00152610bf20152600081816101d1015281816104a1015281816105040152818161079401526107f701526112826000f3fe608060405234801561001057600080fd5b50600436106101775760003560e01c80635e3e9fef116100d857806391d148541161008c578063d547741f11610066578063d547741f14610386578063d5abeb0114610399578063e63ab1e9146103a257600080fd5b806391d1485414610311578063a217fddf14610357578063a783c7891461035f57600080fd5b8063743e0c9b116100bd578063743e0c9b146102cf5780638456cb59146102e257806385f438c1146102ea57600080fd5b80635e3e9fef146102a95780636f8b44b0146102bc57600080fd5b8063248a9ca31161012f57806336568abe1161011457806336568abe146102835780633f4ba83a146102965780635c975abb1461029e57600080fd5b8063248a9ca31461023f5780632f2ff15d1461027057600080fd5b8063106e629011610160578063106e6290146101b9578063116191b6146101cc57806321e093b11461021857600080fd5b806301ffc9a71461017c57806302d5c899146101a4575b600080fd5b61018f61018a366004610fb4565b6103c9565b60405190151581526020015b60405180910390f35b6101b76101b2366004611026565b610462565b005b6101b76101c73660046110b8565b6105f7565b6101f37f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161019b565b6101f37f000000000000000000000000000000000000000000000000000000000000000081565b61026261024d3660046110eb565b60009081526002602052604090206001015490565b60405190815260200161019b565b6101b761027e366004611104565b61069c565b6101b7610291366004611104565b6106c7565b6101b7610720565b60015460ff1661018f565b6101b76102b7366004611026565b610755565b6101b76102ca3660046110eb565b6108d0565b6101b76102dd3660046110eb565b61093e565b6101b76109e8565b6102627f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b61018f61031f366004611104565b600091825260026020908152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b610262600081565b6102627f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb81565b6101b7610394366004611104565b610a1a565b61026260035481565b6102627f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061045c57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b61046a610a3f565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461049481610a82565b61049c610a8c565b6104c77f00000000000000000000000000000000000000000000000000000000000000008684610acb565b6040517fb8969bd400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063b8969bd490610561907f0000000000000000000000000000000000000000000000000000000000000000908a908a908a908a90600401611179565b600060405180830381600087803b15801561057b57600080fd5b505af115801561058f573d6000803e3d6000fd5b505050508573ffffffffffffffffffffffffffffffffffffffff167fba96f26bdda53eb8c8ba39045dfb4ff39753fbc7a6edcf250a88e75e78d102fe8686866040516105dd939291906111d6565b60405180910390a2506105f06001600055565b5050505050565b6105ff610a3f565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461062981610a82565b610631610a8c565b61063c848484610acb565b8373ffffffffffffffffffffffffffffffffffffffff167f884edad9ce6fa2440d8a54cc123490eb96d2768479d49ff9c7366125a94243648460405161068491815260200190565b60405180910390a2506106976001600055565b505050565b6000828152600260205260409020600101546106b781610a82565b6106c18383610c53565b50505050565b73ffffffffffffffffffffffffffffffffffffffff81163314610716576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6106978282610d53565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61074a81610a82565b610752610e12565b50565b61075d610a3f565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461078781610a82565b61078f610a8c565b6107ba7f00000000000000000000000000000000000000000000000000000000000000008684610acb565b6040517f5131ab5900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690635131ab5990610854907f0000000000000000000000000000000000000000000000000000000000000000908a908a908a908a90600401611179565b600060405180830381600087803b15801561086e57600080fd5b505af1158015610882573d6000803e3d6000fd5b505050508573ffffffffffffffffffffffffffffffffffffffff167f7772f56296d3a5202974a45c61c9188d844ab4d6eeb18c851e4b8d5384ca6ced8686866040516105dd939291906111d6565b7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb6108fa81610a82565b610902610a8c565b60038290556040518281527f7810bd47de260c3e9ee10061cf438099dd12256c79485f12f94dbccc981e806c9060200160405180910390a15050565b610946610a8c565b6040517f79cc6790000000000000000000000000000000000000000000000000000000008152336004820152602481018290527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16906379cc679090604401600060405180830381600087803b1580156109d457600080fd5b505af11580156105f0573d6000803e3d6000fd5b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610a1281610a82565b610752610e8f565b600082815260026020526040902060010154610a3581610a82565b6106c18383610d53565b600260005403610a7b576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b6107528133610ee8565b60015460ff1615610ac9576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6003547f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b39573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b5d91906111f9565b610b679084611212565b1115610b9f576040517fc30436e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f1e458bee00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff848116600483015260248201849052604482018390527f00000000000000000000000000000000000000000000000000000000000000001690631e458bee90606401600060405180830381600087803b158015610c3657600080fd5b505af1158015610c4a573d6000803e3d6000fd5b50505050505050565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff16610d4b57600083815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff86168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055610ce93390565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a450600161045c565b50600061045c565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff1615610d4b57600083815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8616808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a450600161045c565b610e1a610f78565b600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b610e97610a8c565b600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016811790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25833610e65565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16610f74576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff821660048201526024810183905260440160405180910390fd5b5050565b60015460ff16610ac9576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060208284031215610fc657600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610ff657600080fd5b9392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461102157600080fd5b919050565b60008060008060006080868803121561103e57600080fd5b61104786610ffd565b945060208601359350604086013567ffffffffffffffff81111561106a57600080fd5b8601601f8101881361107b57600080fd5b803567ffffffffffffffff81111561109257600080fd5b8860208284010111156110a457600080fd5b959894975060200195606001359392505050565b6000806000606084860312156110cd57600080fd5b6110d684610ffd565b95602085013595506040909401359392505050565b6000602082840312156110fd57600080fd5b5035919050565b6000806040838503121561111757600080fd5b8235915061112760208401610ffd565b90509250929050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff8616815273ffffffffffffffffffffffffffffffffffffffff851660208201528360408201526080606082015260006111cb608083018486611130565b979650505050505050565b8381526040602082015260006111f0604083018486611130565b95945050505050565b60006020828403121561120b57600080fd5b5051919050565b8082018082111561045c577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea2646970667358221220de5fa55e0ca79ea2f08903481d01ea00bbbf346b9cfba44e12a2dd6f3a6f2e8a64736f6c634300081a00336080604052348015600f57600080fd5b506001600055610d3a806100246000396000f3fe6080604052600436106100635760003560e01c8063c513169111610040578063c5131691146100c1578063e04d4f97146100e1578063f05b6abf146100f457005b8063357fc5a21461006c5780636ed701691461008c5780638fcaa0b5146100a157005b3661006a57005b005b34801561007857600080fd5b5061006a6100873660046106c0565b610114565b34801561009857600080fd5b5061006a6101aa565b3480156100ad57600080fd5b5061006a6100bc3660046106fc565b6101df565b3480156100cd57600080fd5b5061006a6100dc3660046106c0565b61021e565b61006a6100ef366004610895565b6102f9565b34801561010057600080fd5b5061006a61010f366004610981565b61033d565b61011c610372565b61013e73ffffffffffffffffffffffffffffffffffffffff83163383866103b5565b604080513381526020810185905273ffffffffffffffffffffffffffffffffffffffff848116828401528316606082015290517f2b58128f24a9f59127cc5b5430d70542b22220f2d9adaa86e442b816ab98af609181900360800190a16101a56001600055565b505050565b6040513381527fbcaadb46b82a48af60b608f58959ae6b8310d1b0a0d094c2e9ec3208ed39f2a09060200160405180910390a1565b7f0d3f65f00e631663aa85c96330b5c7a83bb29af3630c0063776f985edc3037aa33838360405161021293929190610a6b565b60405180910390a15050565b610226610372565b6000610233600285610ad5565b90508060000361026f576040517f1f2a200500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61029173ffffffffffffffffffffffffffffffffffffffff84163384846103b5565b604080513381526020810183905273ffffffffffffffffffffffffffffffffffffffff858116828401528416606082015290517f2b58128f24a9f59127cc5b5430d70542b22220f2d9adaa86e442b816ab98af609181900360800190a1506101a56001600055565b7f1f1ff1f5fb41346850b2f5c04e6c767e2f1c8a525c5c0c5cdb60cdf3ca5f62fa3334858585604051610330959493929190610b7e565b60405180910390a1505050565b7f74a53cd528a921fca7dbdee62f86819051d3cc98f214951f4238e8843f20b146338484846040516103309493929190610c08565b6002600054036103ae576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b6040805173ffffffffffffffffffffffffffffffffffffffff85811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd0000000000000000000000000000000000000000000000000000000017905261044a908590610450565b50505050565b600061047273ffffffffffffffffffffffffffffffffffffffff8416836104eb565b905080516000141580156104975750808060200190518101906104959190610ccb565b155b156101a5576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff841660048201526024015b60405180910390fd5b60606104f983836000610500565b9392505050565b60608147101561053e576040517fcd7860590000000000000000000000000000000000000000000000000000000081523060048201526024016104e2565b6000808573ffffffffffffffffffffffffffffffffffffffff1684866040516105679190610ce8565b60006040518083038185875af1925050503d80600081146105a4576040519150601f19603f3d011682016040523d82523d6000602084013e6105a9565b606091505b50915091506105b98683836105c3565b9695505050505050565b6060826105d8576105d382610652565b6104f9565b81511580156105fc575073ffffffffffffffffffffffffffffffffffffffff84163b155b1561064b576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff851660048201526024016104e2565b50806104f9565b8051156106625780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50565b803573ffffffffffffffffffffffffffffffffffffffff811681146106bb57600080fd5b919050565b6000806000606084860312156106d557600080fd5b833592506106e560208501610697565b91506106f360408501610697565b90509250925092565b6000806020838503121561070f57600080fd5b823567ffffffffffffffff81111561072657600080fd5b8301601f8101851361073757600080fd5b803567ffffffffffffffff81111561074e57600080fd5b85602082840101111561076057600080fd5b6020919091019590945092505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156107e6576107e6610770565b604052919050565b600082601f8301126107ff57600080fd5b813567ffffffffffffffff81111561081957610819610770565b61084a60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8401160161079f565b81815284602083860101111561085f57600080fd5b816020850160208301376000918101602001919091529392505050565b801515811461069457600080fd5b80356106bb8161087c565b6000806000606084860312156108aa57600080fd5b833567ffffffffffffffff8111156108c157600080fd5b6108cd868287016107ee565b9350506020840135915060408401356108e58161087c565b809150509250925092565b600067ffffffffffffffff82111561090a5761090a610770565b5060051b60200190565b600082601f83011261092557600080fd5b8135610938610933826108f0565b61079f565b8082825260208201915060208360051b86010192508583111561095a57600080fd5b602085015b8381101561097757803583526020928301920161095f565b5095945050505050565b60008060006060848603121561099657600080fd5b833567ffffffffffffffff8111156109ad57600080fd5b8401601f810186136109be57600080fd5b80356109cc610933826108f0565b8082825260208201915060208360051b8501019250888311156109ee57600080fd5b602084015b83811015610a3057803567ffffffffffffffff811115610a1257600080fd5b610a218b6020838901016107ee565b845250602092830192016109f3565b509550505050602084013567ffffffffffffffff811115610a5057600080fd5b610a5c86828701610914565b9250506106f36040850161088a565b73ffffffffffffffffffffffffffffffffffffffff8416815260406020820152816040820152818360608301376000818301606090810191909152601f9092017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016010192915050565b600082610b0b577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60005b83811015610b2b578181015183820152602001610b13565b50506000910152565b60008151808452610b4c816020860160208601610b10565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b73ffffffffffffffffffffffffffffffffffffffff8616815284602082015260a060408201526000610bb360a0830186610b34565b6060830194909452509015156080909101529392505050565b600081518084526020840193506020830160005b82811015610bfe578151865260209586019590910190600101610be0565b5093949350505050565b60006080820173ffffffffffffffffffffffffffffffffffffffff871683526080602084015280865180835260a08501915060a08160051b86010192506020880160005b82811015610c9b577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60878603018452610c86858351610b34565b94506020938401939190910190600101610c4c565b505050508281036040840152610cb18186610bcc565b915050610cc2606083018415159052565b95945050505050565b600060208284031215610cdd57600080fd5b81516104f98161087c565b60008251610cfa818460208701610b10565b919091019291505056fea2646970667358221220556072e1abafc3c4063b8cce832228b4f309b93726aaa6a6dfab20cb880c6d1864736f6c634300081a0033a26469706673582212205fb3b88670e2bc172c7e89d472ff1409dfa7d675d3f96db2e7a840cdc3d8419c64736f6c634300081a0033", } // ERC20CustodyTestABI is the input ABI used to generate the binding from. diff --git a/v2/pkg/erc20custodyechidnatest.sol/erc20custodyechidnatest.go b/v2/pkg/erc20custodyechidnatest.sol/erc20custodyechidnatest.go index b2ddac8e..4e46b68e 100644 --- a/v2/pkg/erc20custodyechidnatest.sol/erc20custodyechidnatest.go +++ b/v2/pkg/erc20custodyechidnatest.sol/erc20custodyechidnatest.go @@ -32,7 +32,7 @@ var ( // ERC20CustodyEchidnaTestMetaData contains all meta data concerning the ERC20CustodyEchidnaTest contract. var ERC20CustodyEchidnaTestMetaData = &bind.MetaData{ ABI: "[{\"type\":\"constructor\",\"inputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"DEFAULT_ADMIN_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"PAUSER_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"WHITELISTER_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"WITHDRAWER_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"echidnaCaller\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"gateway\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIGatewayEVM\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getRoleAdmin\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"grantRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"hasRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"pause\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"paused\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"renounceRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"callerConfirmation\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"revokeRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"supportsInterface\",\"inputs\":[{\"name\":\"interfaceId\",\"type\":\"bytes4\",\"internalType\":\"bytes4\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"testERC20\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractTestERC20\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"testWithdrawAndCall\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"unpause\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"unwhitelist\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"whitelist\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"whitelisted\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"withdraw\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"withdrawAndCall\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"withdrawAndRevert\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"event\",\"name\":\"Paused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleAdminChanged\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"previousAdminRole\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"newAdminRole\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleGranted\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleRevoked\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Unpaused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Unwhitelisted\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Whitelisted\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Withdraw\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"WithdrawAndCall\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"WithdrawAndRevert\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"AccessControlBadConfirmation\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"AccessControlUnauthorizedAccount\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"neededRole\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"type\":\"error\",\"name\":\"AddressEmptyCode\",\"inputs\":[{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"AddressInsufficientBalance\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"EnforcedPause\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ExpectedPause\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"FailedInnerCall\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NotWhitelisted\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ReentrancyGuardReentrantCall\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"SafeERC20FailedOperation\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"ZeroAddress\",\"inputs\":[]}]", - Bin: "0x600580546001600160a01b03191633908117909155600e60a09081526d11d85d195dd85e5155934b9cdbdb60921b60c0526101049190915261012361012481905261014452606460e090815261016460405261010080516001600160e01b0390811663c0c53b8b60e01b1790915261007992919061029316565b600680546001600160a01b03929092166001600160a01b03199283168117909155600780549092161790553480156100b057600080fd5b5060075460055460016000556002805460ff191690556001600160a01b039182169116808215806100e857506001600160a01b038216155b806100fa57506001600160a01b038116155b156101185760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b0383166080526101306000826102b2565b5061015b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a826102b2565b506101867f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e4836102b2565b5061019f600080516020616e78833981519152826102b2565b506101b8600080516020616e78833981519152836102b2565b505050506040516101c89061383e565b60408082526004908201819052631d195cdd60e21b606083015260806020830181905282015263151154d560e21b60a082015260c001604051809103906000f08015801561021a573d6000803e3d6000fd5b50600480546001600160a01b0319166001600160a01b0392831617815560075460405163ae7a3a6f60e01b815230928101929092529091169063ae7a3a6f90602401600060405180830381600087803b15801561027657600080fd5b505af115801561028a573d6000803e3d6000fd5b505050506148bf565b600061029d61384b565b6102a8848483610345565b9150505b92915050565b60008281526001602090815260408083206001600160a01b038516845290915281205460ff1661033d5760008381526001602081815260408084206001600160a01b0387168086529252808420805460ff19169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45060016102ac565b5060006102ac565b60008061035285846103c1565b90506103b66040518060400160405280601d81526020017f4552433139363750726f78792e736f6c3a4552433139363750726f787900000081525082866040516020016103a0929190613954565b60408051601f19818403018152919052856103cd565b9150505b9392505050565b60006103ba8383610401565b60c081015151600090156103f7576103f084848460c0015161042260201b60201c565b90506103ba565b6103f0848461059b565b600061040d8383610668565b6103ba838360200151846103cd60201b60201c565b60008061042d610678565b9050600061043b8683610712565b905060006104588260600151836020015185610b3560201b60201c565b9050600061046883838989610cea565b9050600061047582611966565b602081015181519192509060030b156104ce5789826040015160405160200161049f929190613978565b60408051601f198184030181529082905262461bcd60e51b82526104c5916004016139de565b60405180910390fd5b60006105176040518060400160405280601581526020017f4465706c6f79656420746f20616464726573733a200000000000000000000000815250836001611afd60201b60201c565b60405163c6ce059d60e01b8152909150600080516020616e588339815191529063c6ce059d9061054b9084906004016139de565b602060405180830381865afa158015610568573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061058c91906139f1565b9b9a5050505050505050505050565b604051638d1cc92560e01b81526000908190600080516020616e5883398151915290638d1cc925906105d19087906004016139de565b600060405180830381865afa1580156105ee573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526106169190810190613ae6565b905060006106458285604051602001610630929190613b1a565b60408051601f19818403018152919052611c9d565b90506001600160a01b0381166102a857848460405160200161049f929190613b49565b61067482826000611cb0565b5050565b60408051808201825260038152621bdd5d60ea1b602082015290516334515cdb60e21b8152606091600080516020616e5883398151915291829063d145736c906106c6908490600401613bd8565b600060405180830381865afa1580156106e3573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261070b9190810190613c0d565b9250505090565b6107446040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b6000600080516020616e5883398151915290506107896040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b61079285611d8a565b602082015260006107a286611fdf565b90506000836001600160a01b031663d930a0e66040518163ffffffff1660e01b8152600401600060405180830381865afa1580156107e4573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261080c9190810190613c0d565b868385602001516040516020016108269493929190613c55565b60408051601f19818403018152908290526360f9bb1160e01b825291506000906001600160a01b038616906360f9bb11906108659085906004016139de565b600060405180830381865afa158015610882573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526108aa9190810190613c0d565b604051636da11afb60e11b81529091506001600160a01b0386169063db4235f6906108d9908490600401613ced565b602060405180830381865afa1580156108f6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061091a9190613d26565b61092f578160405160200161049f9190613d48565b6040516309389f5960e31b81526001600160a01b038616906349c4fac89061095b908490600401613dbf565b600060405180830381865afa158015610978573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526109a09190810190613c0d565b8452604051636da11afb60e11b81526001600160a01b0386169063db4235f6906109ce908490600401613e05565b602060405180830381865afa1580156109eb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a0f9190613d26565b15610a8b576040516309389f5960e31b81526001600160a01b038616906349c4fac890610a40908490600401613e05565b600060405180830381865afa158015610a5d573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610a859190810190613c0d565b60408501525b846001600160a01b03166349c4fac8828660000151604051602001610ab09190613e46565b6040516020818303038152906040526040518363ffffffff1660e01b8152600401610adc929190613ea1565b600060405180830381865afa158015610af9573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610b219190810190613c0d565b606085015250608083015250949350505050565b60408051600480825260a0820190925260609160009190816020015b6060815260200190600190039081610b51579050509050604051806040016040528060048152602001630677265760e41b81525081600081518110610b9857610b98613ec6565b6020026020010181905250604051806040016040528060038152602001620b5c9b60ea1b81525081600181518110610bd257610bd2613ec6565b602002602001018190525084604051602001610bee9190613edc565b60405160208183030381529060405281600281518110610c1057610c10613ec6565b602002602001018190525082604051602001610c2c9190613f11565b60405160208183030381529060405281600381518110610c4e57610c4e613ec6565b60209081029190910101526000610c6482611966565b9050600081602001519050610ccb610c9e60405180604001604052806005815260200164173539b7b760d91b81525061216260201b60201c565b6040805180820182526000808252602091820152815180830190925284518252808501908201529061218f565b610ce0578560405160200161049f9190613f40565b9695505050505050565b60a0810151604080518082018252600080825260209182015281518083019092528251808352928101910152606090600080516020616e588339815191529015610d34565b511590565b610e5057826020015115610dc45760405162461bcd60e51b81526020600482015260586024820152600080516020616e9883398151915260448201527f62652075736564207768656e207468652060736b6970566572696679536f757260648201527f6365436f646560206f7074696f6e206973206074727565600000000000000000608482015260a4016104c5565b8260c0015115610e505760405162461bcd60e51b81526020600482015260536024820152600080516020616e9883398151915260448201527f62652075736564207768656e207468652060736b69704c6963656e736554797060648201527f6560206f7074696f6e2069732060747275656000000000000000000000000000608482015260a4016104c5565b6040805160ff8082526120008201909252600091816020015b6060815260200190600190039081610e695790505090506000604051806040016040528060038152602001620dce0f60eb1b815250828280610eaa90613fd5565b935060ff1681518110610ebf57610ebf613ec6565b60200260200101819052506040518060400160405280600d81526020016c302e302e312d616c7068612e3760981b815250604051602001610f009190613ff4565b604051602081830303815290604052828280610f1b90613fd5565b935060ff1681518110610f3057610f30613ec6565b6020026020010181905250604051806040016040528060068152602001656465706c6f7960d01b815250828280610f6690613fd5565b935060ff1681518110610f7b57610f7b613ec6565b60200260200101819052506040518060400160405280600e81526020016d2d2d636f6e74726163744e616d6560901b815250828280610fb990613fd5565b935060ff1681518110610fce57610fce613ec6565b60200260200101819052508760200151828280610fea90613fd5565b935060ff1681518110610fff57610fff613ec6565b60200260200101819052506040518060400160405280600e81526020016d05a5ac6dedce8e4c2c6e8a0c2e8d60931b81525082828061103d90613fd5565b935060ff168151811061105257611052613ec6565b60209081029190910101528751828261106a81613fd5565b935060ff168151811061107f5761107f613ec6565b6020026020010181905250604051806040016040528060098152602001680b4b58da185a5b925960ba1b8152508282806110b890613fd5565b935060ff16815181106110cd576110cd613ec6565b60209081029190910101526110e1466121f0565b82826110ec81613fd5565b935060ff168151811061110157611101613ec6565b60200260200101819052506040518060400160405280600f81526020016e2d2d6275696c64496e666f46696c6560881b81525082828061114090613fd5565b935060ff168151811061115557611155613ec6565b60200260200101819052508682828061116d90613fd5565b935060ff168151811061118257611182613ec6565b60209081029190910101528551156112905760408051808201909152601581527f2d2d636f6e7374727563746f7242797465636f64650000000000000000000000602082015282826111d381613fd5565b935060ff16815181106111e8576111e8613ec6565b60209081029190910101526040516371aad10d60e01b81526001600160a01b038416906371aad10d9061121f9089906004016139de565b600060405180830381865afa15801561123c573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526112649190810190613c0d565b828261126f81613fd5565b935060ff168151811061128457611284613ec6565b60200260200101819052505b84602001511561133d576040805180820190915260128152712d2d766572696679536f75726365436f646560701b602082015282826112ce81613fd5565b935060ff16815181106112e3576112e3613ec6565b60200260200101819052506040518060400160405280600581526020016466616c736560d81b81525082828061131890613fd5565b935060ff168151811061132d5761132d613ec6565b60200260200101819052506114a4565b611353610d2f8660a0015161216260201b60201c565b6113d65760408051808201909152600d81526c2d2d6c6963656e73655479706560981b6020820152828261138681613fd5565b935060ff168151811061139b5761139b613ec6565b60200260200101819052508460a001516040516020016113bb9190613edc565b60405160208183030381529060405282828061131890613fd5565b8460c001511580156113fb57506113f9610d2f896040015161216260201b60201c565b155b156114a45760408051808201909152600d81526c2d2d6c6963656e73655479706560981b6020820152828261142f81613fd5565b935060ff168151811061144457611444613ec6565b602090810291909101015261145888612282565b6040516020016114689190613edc565b60405160208183030381529060405282828061148390613fd5565b935060ff168151811061149857611498613ec6565b60200260200101819052505b6114ba610d2f866040015161216260201b60201c565b61153d5760408051808201909152600b81526a0b4b5c995b185e595c925960aa1b602082015282826114eb81613fd5565b935060ff168151811061150057611500613ec6565b6020026020010181905250846040015182828061151c90613fd5565b935060ff168151811061153157611531613ec6565b60200260200101819052505b60608501511561162e576040805180820190915260068152650b4b5cd85b1d60d21b6020820152828261156f81613fd5565b935060ff168151811061158457611584613ec6565b60209081029190910101526060850151604051631623433d60e31b815260048101919091526001600160a01b0384169063b11a19e890602401600060405180830381865afa1580156115da573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526116029190810190613c0d565b828261160d81613fd5565b935060ff168151811061162257611622613ec6565b60200260200101819052505b60e085015151156116c05760408051808201909152600a8152690b4b59d85cd31a5b5a5d60b21b6020820152828261166581613fd5565b935060ff168151811061167a5761167a613ec6565b602090810291909101015260e085015151611694906121f0565b828261169f81613fd5565b935060ff16815181106116b4576116b4613ec6565b60200260200101819052505b60e0850151602001511561175d5760408051808201909152600a8152692d2d676173507269636560b01b602082015282826116fa81613fd5565b935060ff168151811061170f5761170f613ec6565b60200260200101819052506117318560e00151602001516121f060201b60201c565b828261173c81613fd5565b935060ff168151811061175157611751613ec6565b60200260200101819052505b60e085015160400151156117fe5760408051808201909152600e81526d2d2d6d617846656550657247617360901b6020820152828261179b81613fd5565b935060ff16815181106117b0576117b0613ec6565b60200260200101819052506117d28560e00151604001516121f060201b60201c565b82826117dd81613fd5565b935060ff16815181106117f2576117f2613ec6565b60200260200101819052505b60e085015160600151156118ae5760408051808201909152601681527f2d2d6d61785072696f72697479466565506572476173000000000000000000006020820152828261184b81613fd5565b935060ff168151811061186057611860613ec6565b60200260200101819052506118828560e00151606001516121f060201b60201c565b828261188d81613fd5565b935060ff16815181106118a2576118a2613ec6565b60200260200101819052505b60008160ff166001600160401b038111156118cb576118cb613a1a565b6040519080825280602002602001820160405280156118fe57816020015b60608152602001906001900390816118e95790505b50905060005b8260ff168160ff16101561195757838160ff168151811061192757611927613ec6565b6020026020010151828260ff168151811061194457611944613ec6565b6020908102919091010152600101611904565b5093505050505b949350505050565b61198d6040518060600160405280600060030b815260200160608152602001606081525090565b6040805180820182526004808252630c4c2e6d60e31b602083015291516334515cdb60e21b8152600080516020616e5883398151915292600091849163d145736c916119db9186910161404b565b600060405180830381865afa1580156119f8573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611a209190810190613c0d565b90506000611a2e8683612938565b90506000846001600160a01b031663f45c1ce7836040518263ffffffff1660e01b8152600401611a5e9190614092565b6000604051808303816000875af1158015611a7d573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611aa591908101906140f7565b805190915060030b15801590611abe5750602081015151155b8015611acd5750604081015151155b15610ce05781600081518110611ae557611ae5613ec6565b602002602001015160405160200161049f91906141aa565b60606000611b328560408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600080825260209182015281518083019092528651825280870190820152909150611b699082905b90612a72565b15611c66576000611be682611be081611bda611bac8a60408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6040805180820182526000808252602091820152815180830190925282518252918201519181019190915290565b90612a99565b90612af6565b9050611c1a611c13604051806040016040528060018152602001600560f91b81525061216260201b60201c565b8290612a72565b15611c5457611c51611c4a604051806040016040528060018152602001600560f91b81525061216260201b60201c565b8290612b7b565b90505b611c5d81612ba1565b925050506103ba565b8215611c7f57848460405160200161049f92919061437a565b50506040805160208101909152600081526103ba565b509392505050565b6000808251602084016000f09392505050565b8160a0015115611cbf57505050565b6000611ccc848484612c06565b90506000611cd982611966565b602081015181519192509060030b158015611d4c5750611d4c611d20604051806040016040528060078152602001665355434345535360c81b81525061216260201b60201c565b604080518082018252600080825260209182015281518083019092528451825280850190820152611b63565b15611d5957505050505050565b60408201515115611d7957816040015160405160200161049f91906143f5565b8060405160200161049f919061443f565b60606000611dbf8360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b9050611df6611def604051806040016040528060048152602001630b9cdbdb60e21b81525061216260201b60201c565b829061218f565b15611e38576103ba611e33611e2c604051806040016040528060048152602001630b9cdbdb60e21b81525061216260201b60201c565b8390613119565b612ba1565b611e6a611e63604051806040016040528060018152602001601d60f91b81525061216260201b60201c565b82906131a3565b600103611ed257611e9c611c4a604051806040016040528060018152602001601d60f91b81525061216260201b60201c565b506103ba611e33611ecb604051806040016040528060018152602001601d60f91b81525061216260201b60201c565b8390612b7b565b611f01611def60405180604001604052806005815260200164173539b7b760d91b81525061216260201b60201c565b15611fce576000611f3982611f34604051806040016040528060018152602001602f60f81b81525061216260201b60201c565b613238565b905060008160018351611f4c919061448f565b81518110611f5c57611f5c613ec6565b60200260200101519050611fc5611e33611f9860405180604001604052806005815260200164173539b7b760d91b81525061216260201b60201c565b60408051808201825260008082526020918201528151808301909252855182528086019082015290613119565b95945050505050565b8260405160200161049f91906144a2565b606060006120148360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b9050612044611def604051806040016040528060048152602001630b9cdbdb60e21b81525061216260201b60201c565b15612052576103ba81612ba1565b61207d611e63604051806040016040528060018152602001601d60f91b81525061216260201b60201c565b6001036120b2576103ba611e33611ecb604051806040016040528060018152602001601d60f91b81525061216260201b60201c565b6120e1611def60405180604001604052806005815260200164173539b7b760d91b81525061216260201b60201c565b15611fce57600061211482611f34604051806040016040528060018152602001602f60f81b81525061216260201b60201c565b905060018151111561215057806002825161212f919061448f565b8151811061213f5761213f613ec6565b602002602001015192505050919050565b508260405160200161049f91906144a2565b60408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b8051825160009111156121a4575060006102ac565b815183516020850151600092916121ba9161455c565b6121c4919061448f565b9050826020015181036121db5760019150506102ac565b82516020840151819020912014905092915050565b606060006121fd836132dc565b60010190506000816001600160401b0381111561221c5761221c613a1a565b6040519080825280601f01601f191660200182016040528015612246576020820181803683370190505b5090508181016020015b600019016f181899199a1a9b1b9c1cb0b131b232b360811b600a86061a8153600a850494508461225057509392505050565b60606000612299836040015161216260201b60201c565b90506122d66122cf6040518060400160405280600a8152602001691553931250d15394d15160b21b81525061216260201b60201c565b82906133be565b156122fd5750506040805180820190915260048152634e6f6e6560e01b6020820152919050565b6123306122cf60405180604001604052806009815260200168556e6c6963656e736560b81b81525061216260201b60201c565b1561235c575050604080518082019091526009815268556e6c6963656e736560b81b6020820152919050565b6123896122cf6040518060400160405280600381526020016213525560ea1b81525061216260201b60201c565b156123af57505060408051808201909152600381526213525560ea1b6020820152919050565b6123e56122cf6040518060400160405280600c81526020016b47504c2d322e302d6f6e6c7960a01b81525061216260201b60201c565b8061242557506124256122cf6040518060400160405280601081526020016f23a8261699171816b7b916b630ba32b960811b81525061216260201b60201c565b1561245157505060408051808201909152600981526823a72a9023a8263b1960b91b6020820152919050565b6124876122cf6040518060400160405280600c81526020016b47504c2d332e302d6f6e6c7960a01b81525061216260201b60201c565b806124c757506124c76122cf6040518060400160405280601081526020016f23a8261699971816b7b916b630ba32b960811b81525061216260201b60201c565b156124f3575050604080518082019091526009815268474e552047504c763360b81b6020820152919050565b61252a6122cf6040518060400160405280600d81526020016c4c47504c2d322e312d6f6e6c7960981b81525061216260201b60201c565b8061256b575061256b6122cf604051806040016040528060118152602001702623a8261699171896b7b916b630ba32b960791b81525061216260201b60201c565b1561259a57505060408051808201909152600c81526b474e55204c47504c76322e3160a01b6020820152919050565b6125d16122cf6040518060400160405280600d81526020016c4c47504c2d332e302d6f6e6c7960981b81525061216260201b60201c565b8061261257506126126122cf604051806040016040528060118152602001702623a8261699971816b7b916b630ba32b960791b81525061216260201b60201c565b1561263f57505060408051808201909152600a815269474e55204c47504c763360b01b6020820152919050565b6126756122cf6040518060400160405280600c81526020016b4253442d322d436c6175736560a01b81525061216260201b60201c565b156126a457505060408051808201909152600c81526b4253442d322d436c6175736560a01b6020820152919050565b6126da6122cf6040518060400160405280600c81526020016b4253442d332d436c6175736560a01b81525061216260201b60201c565b1561270957505060408051808201909152600c81526b4253442d332d436c6175736560a01b6020820152919050565b61273a6122cf6040518060400160405280600781526020016604d504c2d322e360cc1b81525061216260201b60201c565b1561276457505060408051808201909152600781526604d504c2d322e360cc1b6020820152919050565b6127956122cf6040518060400160405280600781526020016604f534c2d332e360cc1b81525061216260201b60201c565b156127bf57505060408051808201909152600781526604f534c2d332e360cc1b6020820152919050565b6127f36122cf6040518060400160405280600a81526020016904170616368652d322e360b41b81525061216260201b60201c565b1561282057505060408051808201909152600a81526904170616368652d322e360b41b6020820152919050565b6128576122cf6040518060400160405280600d81526020016c4147504c2d332e302d6f6e6c7960981b81525061216260201b60201c565b8061289857506128986122cf6040518060400160405280601181526020017020a3a8261699971816b7b916b630ba32b960791b81525061216260201b60201c565b156128c557505060408051808201909152600a815269474e55204147504c763360b01b6020820152919050565b6128f76122cf604051806040016040528060088152602001674255534c2d312e3160c01b81525061216260201b60201c565b1561292157505060408051808201909152600781526642534c20312e3160c81b6020820152919050565b6040808401518451915161049f929060200161456f565b60608060005b84518110156129c3578185828151811061295a5761295a613ec6565b6020026020010151604051602001612973929190613b1a565b604051602081830303815290604052915060018551612992919061448f565b81146129bb57816040516020016129a991906146bf565b60405160208183030381529060405291505b60010161293e565b5060408051600380825260808201909252600091816020015b60608152602001906001900390816129dc5790505090508381600081518110612a0757612a07613ec6565b6020026020010181905250604051806040016040528060028152602001612d6360f01b81525081600181518110612a4057612a40613ec6565b60200260200101819052508181600281518110612a5f57612a5f613ec6565b6020908102919091010152949350505050565b6020808301518351835192840151600093612a9092918491906133d2565b14159392505050565b6040805180820190915260008082526020808301829052845185820151855192860151612ac693906134e3565b9050836020015181612ad8919061448f565b84518590612ae790839061448f565b90525060208401525090919050565b6040805180820190915260008082526020820152815183511015612b1b5750816102ac565b6020808301519084015160019114612b425750815160208481015190840151829020919020145b8015612b7357825184518590612b5990839061448f565b9052508251602085018051612b6f90839061455c565b9052505b509192915050565b6040805180820190915260008082526020820152612b9a838383613603565b5092915050565b6060600082600001516001600160401b03811115612bc157612bc1613a1a565b6040519080825280601f01601f191660200182016040528015612beb576020820181803683370190505b50602084810151855192935090830191612b9a9183916136a9565b60606000612c12610678565b6040805160ff808252612000820190925291925060009190816020015b6060815260200190600190039081612c2f5790505090506000604051806040016040528060038152602001620dce0f60eb1b815250828280612c7090613fd5565b935060ff1681518110612c8557612c85613ec6565b6020026020010181905250604051806040016040528060078152602001665e312e33322e3360c81b815250604051602001612cc091906146e4565b604051602081830303815290604052828280612cdb90613fd5565b935060ff1681518110612cf057612cf0613ec6565b60200260200101819052506040518060400160405280600881526020016776616c696461746560c01b815250828280612d2890613fd5565b935060ff1681518110612d3d57612d3d613ec6565b602002602001018190525082604051602001612d599190613f11565b604051602081830303815290604052828280612d7490613fd5565b935060ff1681518110612d8957612d89613ec6565b60200260200101819052506040518060400160405280600a8152602001690b4b58dbdb9d1c9858dd60b21b815250828280612dc390613fd5565b935060ff1681518110612dd857612dd8613ec6565b6020908102919091010152612ded8784613723565b8282612df881613fd5565b935060ff1681518110612e0d57612e0d613ec6565b602090810291909101015285515115612ea55760408051808201909152600b81526a2d2d7265666572656e636560a81b60208201528282612e4d81613fd5565b935060ff1681518110612e6257612e62613ec6565b60209081029190910101528551612e799084613723565b8282612e8481613fd5565b935060ff1681518110612e9957612e99613ec6565b60200260200101819052505b856080015115612f135760408051808201909152601881527f2d2d756e73616665536b697053746f72616765436865636b000000000000000060208201528282612eee81613fd5565b935060ff1681518110612f0357612f03613ec6565b6020026020010181905250612f6e565b8415612f6e576040805180820190915260128152712d2d726571756972655265666572656e636560701b60208201528282612f4d81613fd5565b935060ff1681518110612f6257612f62613ec6565b60200260200101819052505b60408601515115612ffa5760408051808201909152600d81526c2d2d756e73616665416c6c6f7760981b60208201528282612fa881613fd5565b935060ff1681518110612fbd57612fbd613ec6565b60200260200101819052508560400151828280612fd990613fd5565b935060ff1681518110612fee57612fee613ec6565b60200260200101819052505b8560600151156130645760408051808201909152601481527f2d2d756e73616665416c6c6f7752656e616d65730000000000000000000000006020820152828261304381613fd5565b935060ff168151811061305857613058613ec6565b60200260200101819052505b60008160ff166001600160401b0381111561308157613081613a1a565b6040519080825280602002602001820160405280156130b457816020015b606081526020019060019003908161309f5790505b50905060005b8260ff168160ff16101561310d57838160ff16815181106130dd576130dd613ec6565b6020026020010151828260ff16815181106130fa576130fa613ec6565b60209081029190910101526001016130ba565b50979650505050505050565b604080518082019091526000808252602082015281518351101561313e5750816102ac565b815183516020850151600092916131549161455c565b61315e919061448f565b6020840151909150600190821461317f575082516020840151819020908220145b801561319a5783518551869061319690839061448f565b9052505b50929392505050565b8051825160208085015190840151600093849390926131c39284906134e3565b6131cd919061455c565b90505b835160208501516131e1919061455c565b8111612b9a57816131f181614729565b925050826000015161322785602001518361320c919061448f565b8651613218919061448f565b855160208701518591906134e3565b613231919061455c565b90506131d0565b6060600061324684846131a3565b61325190600161455c565b6001600160401b0381111561326857613268613a1a565b60405190808252806020026020018201604052801561329b57816020015b60608152602001906001900390816132865790505b50905060005b8151811015611c95576132b7611e338686612b7b565b8282815181106132c9576132c9613ec6565b60209081029190910101526001016132a1565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310613325577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310613351576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc10000831061336f57662386f26fc10000830492506010015b6305f5e1008310613387576305f5e100830492506008015b612710831061339b57612710830492506004015b606483106133ad576064830492506002015b600a83106102ac5760010192915050565b60006133ca8383613763565b159392505050565b6000808584116134d95760208411613485576000841561341d5760016133f986602061448f565b613404906008614742565b61340f906002614840565b613419919061448f565b1990505b835181168561342c898961455c565b613436919061448f565b805190935082165b81811461347057878411613458578794505050505061195e565b836134628161484c565b94505082845116905061343e565b61347a878561455c565b94505050505061195e565b838320613492858861448f565b61349c908761455c565b91505b8582106134d7578482208082036134c4576134ba868461455c565b935050505061195e565b6134cf60018461448f565b92505061349f565b505b5092949350505050565b600083818685116135ee576020851161359d576000851561352f57600161350b87602061448f565b613516906008614742565b613521906002614840565b61352b919061448f565b1990505b845181166000876135408b8b61455c565b61354a919061448f565b855190915083165b82811461358f578186106135775761356a8b8b61455c565b965050505050505061195e565b8561358181614729565b965050838651169050613552565b85965050505050505061195e565b508383206000905b6135af868961448f565b82116135ec578583208082036135cb578394505050505061195e565b6135d660018561455c565b93505081806135e490614729565b9250506135a5565b505b6135f8878761455c565b979650505050505050565b604080518082019091526000808252602080830182905285518682015186519287015161363093906134e3565b60208087018051918601919091525190915061364c908261448f565b83528451602086015161365f919061455c565b810361366e57600085526136a0565b8351835161367c919061455c565b8551869061368b90839061448f565b905250835161369a908261455c565b60208601525b50909392505050565b602081106136e157815183526136c060208461455c565b92506136cd60208361455c565b91506136da60208261448f565b90506136a9565b60001981156137105760016136f783602061448f565b61370390610100614840565b61370d919061448f565b90505b9151835183169219169190911790915250565b606060006137318484610712565b805160208083015160405193945061374b93909101614863565b60405160208183030381529060405291505092915050565b8151815160009190811115613776575081515b6020808501519084015160005b8381101561382f57825182518082146137ff5760001960208710156137de576001846137b089602061448f565b6137ba919061455c565b6137c5906008614742565b6137d0906002614840565b6137da919061448f565b1990505b81811683821681810391146137fc5797506102ac9650505050505050565b50505b61380a60208661455c565b945061381760208561455c565b93505050602081613828919061455c565b9050613783565b5084518651610ce0919061489f565b610c9f806161b983390190565b6040518060e0016040528060608152602001606081526020016060815260200160001515815260200160001515815260200160001515815260200161388e613893565b905290565b6040518061010001604052806000151581526020016000151581526020016060815260200160008019168152602001606081526020016060815260200160001515815260200161388e6040518060800160405280600081526020016000815260200160008152602001600081525090565b60005b8381101561391f578181015183820152602001613907565b50506000910152565b60008151808452613940816020860160208601613904565b601f01601f19169290920160200192915050565b6001600160a01b038316815260406020820181905260009061195e90830184613928565b7f4661696c656420746f206465706c6f7920636f6e7472616374200000000000008152600083516139b081601a850160208801613904565b6101d160f51b601a9184019182015283516139d281601c840160208801613904565b01601c01949350505050565b6020815260006103ba6020830184613928565b600060208284031215613a0357600080fd5b81516001600160a01b03811681146103ba57600080fd5b634e487b7160e01b600052604160045260246000fd5b604051606081016001600160401b0381118282101715613a5257613a52613a1a565b60405290565b6000806001600160401b03841115613a7257613a72613a1a565b50604051601f19601f85018116603f011681018181106001600160401b0382111715613aa057613aa0613a1a565b604052838152905080828401851015613ab857600080fd5b611c95846020830185613904565b600082601f830112613ad757600080fd5b6103ba83835160208501613a58565b600060208284031215613af857600080fd5b81516001600160401b03811115613b0e57600080fd5b6102a884828501613ac6565b60008351613b2c818460208801613904565b835190830190613b40818360208801613904565b01949350505050565b7f4661696c656420746f206465706c6f7920636f6e747261637420000000000000815260008351613b8181601a850160208801613904565b7f207573696e6720636f6e7374727563746f722064617461202200000000000000601a918401918201528351613bbe816033840160208801613904565b601160f91b60339290910191820152603401949350505050565b60408152600b60408201526a1193d55391149657d3d55560aa1b60608201526080602082015260006103ba6080830184613928565b600060208284031215613c1f57600080fd5b81516001600160401b03811115613c3557600080fd5b8201601f81018413613c4657600080fd5b6102a884825160208401613a58565b60008551613c67818460208a01613904565b602f60f81b9083019081528551613c85816001840160208a01613904565b602f60f81b600192909101918201528451613ca7816002840160208901613904565b600181830101915050602f60f81b60018201528351613ccd816002840160208801613904565b64173539b7b760d91b600292909101918201526007019695505050505050565b604081526000613d006040830184613928565b828103602084015260048152630b985cdd60e21b60208201526040810191505092915050565b600060208284031215613d3857600080fd5b815180151581146103ba57600080fd5b7f436f756c64206e6f742066696e642041535420696e2061727469666163742000815260008251613d8081601f850160208701613904565b7f2e205365742060617374203d20747275656020696e20666f756e6472792e746f601f939091019283015250611b5b60f21b603f820152604101919050565b604081526000613dd26040830184613928565b8281036020840152601181527005cc2e6e85cc2c4e6ded8eae8caa0c2e8d607b1b60208201526040810191505092915050565b604081526000613e186040830184613928565b8281036020840152600c81526b2e6173742e6c6963656e736560a01b60208201526040810191505092915050565b7f2e6d657461646174612e736f75726365732e5b27000000000000000000000000815260008251613e7e816014850160208701613904565b6b13ae9735b2b1b1b0b5991a9b60a11b6014939091019283015250602001919050565b604081526000613eb46040830185613928565b82810360208401526103b68185613928565b634e487b7160e01b600052603260045260246000fd5b601160f91b81528151600090613ef9816001850160208701613904565b601160f91b6001939091019283015250600201919050565b60008251613f23818460208701613904565b6a2f6275696c642d696e666f60a81b920191825250600b01919050565b7f436f756c64206e6f742066696e64206275696c642d696e666f2066696c65207781527f697468206d61746368696e6720736f7572636520636f6465206861736820666f60208201526a0391031b7b73a3930b1ba160ad1b604082015260008251613fb281604b850160208701613904565b91909101604b0192915050565b634e487b7160e01b600052601160045260246000fd5b600060ff821660ff8103613feb57613feb613fbf565b60010192915050565b7f406f70656e7a657070656c696e2f646566656e6465722d6465706c6f792d636c81526801a595b9d0b58db1a560be1b60208201526000825161403e816029850160208701613904565b9190910160290192915050565b60408152601660408201527f4f50454e5a455050454c494e5f424153485f504154480000000000000000000060608201526080602082015260006103ba6080830184613928565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b828110156140eb57603f198786030184526140d6858351613928565b945060209384019391909101906001016140ba565b50929695505050505050565b60006020828403121561410957600080fd5b81516001600160401b0381111561411f57600080fd5b82016060818503121561413157600080fd5b614139613a30565b81518060030b811461414a57600080fd5b815260208201516001600160401b0381111561416557600080fd5b61417186828501613ac6565b60208301525060408201516001600160401b0381111561419057600080fd5b61419c86828501613ac6565b604083015250949350505050565b7f4661696c656420746f2072756e206261736820636f6d6d616e642077697468208152601160f91b6020820152600082516141ec816021850160208701613904565b7f222e20496620796f7520617265207573696e672057696e646f77732c2073657460219390910192830152507f20746865204f50454e5a455050454c494e5f424153485f5041544820656e766960418201527f726f6e6d656e74207661726961626c6520746f207468652066756c6c7920717560618201527f616c69666965642070617468206f66207468652062617368206578656375746160818201527f626c652e20466f72206578616d706c652c20696620796f75206172652075736960a18201527f6e672047697420666f722057696e646f77732c206164642074686520666f6c6c60c18201527f6f77696e67206c696e6520696e20746865202e656e762066696c65206f66207960e18201527f6f75722070726f6a65637420287573696e6720666f727761726420736c6173686101018201527f6573293a0a4f50454e5a455050454c494e5f424153485f504154483d22433a2f6101218201527f50726f6772616d2046696c65732f4769742f62696e2f6261736822000000000061014182015261015c01919050565b7f4661696c656420746f2066696e64206c696e65207769746820707265666978208152602760f81b6020820152600083516143bc816021850160208801613904565b6c0139034b71037baba383aba1d1609d1b60219184019182015283516143e981602e840160208801613904565b01602e01949350505050565b7f4661696c656420746f2072756e2075706772616465207361666574792076616c815268034b230ba34b7b71d160bd1b60208201526000825161403e816029850160208701613904565b7f55706772616465207361666574792076616c69646174696f6e206661696c65648152611d0560f11b602082015260008251614482816022850160208701613904565b9190910160220192915050565b818103818111156102ac576102ac613fbf565b6d021b7b73a3930b1ba103730b6b2960951b8152600082516144cb81600e850160208701613904565b7f206d75737420626520696e2074686520666f726d6174204d79436f6e74726163600e9390910192830152507f742e736f6c3a4d79436f6e7472616374206f72204d79436f6e74726163742e73602e8201527f6f6c206f72206f75742f4d79436f6e74726163742e736f6c2f4d79436f6e7472604e8201526730b1ba173539b7b760c11b606e820152607601919050565b808201808211156102ac576102ac613fbf565b7f53504458206c6963656e7365206964656e7469666965722000000000000000008152600083516145a7816018850160208801613904565b6301034b7160e51b60189184019182015283516145cb81601c840160208801613904565b7f20646f6573206e6f74206c6f6f6b206c696b65206120737570706f7274656420601c92909101918201527f6c6963656e736520666f7220626c6f636b206578706c6f726572207665726966603c8201527f69636174696f6e2e205573652074686520606c6963656e73655479706560206f605c8201527f7074696f6e20746f20737065636966792061206c6963656e736520747970652c607c8201527f206f7220736574207468652060736b69704c6963656e73655479706560206f70609c8201527f74696f6e20746f2060747275656020746f20736b69702e00000000000000000060bc82015260d301949350505050565b600082516146d1818460208701613904565b600160fd1b920191825250600101919050565b7f406f70656e7a657070656c696e2f75706772616465732d636f7265400000000081526000825161471c81601c850160208701613904565b91909101601c0192915050565b60006001820161473b5761473b613fbf565b5060010190565b80820281158282048414176102ac576102ac613fbf565b6001815b60018411156147945780850481111561477857614778613fbf565b600184161561478657908102905b60019390931c92800261475d565b935093915050565b6000826147ab575060016102ac565b816147b8575060006102ac565b81600181146147ce57600281146147d8576147f4565b60019150506102ac565b60ff8411156147e9576147e9613fbf565b50506001821b6102ac565b5060208310610133831016604e8410600b8410161715614817575081810a6102ac565b6148246000198484614759565b806000190482111561483857614838613fbf565b029392505050565b60006103ba838361479c565b60008161485b5761485b613fbf565b506000190190565b60008351614875818460208801613904565b601d60f91b9083019081528351614893816001840160208801613904565b01600101949350505050565b8181036000831280158383131683831282161715612b9a57612b9a613fbf565b6080516118bc6148fd600039600081816101bf01528181610574015281816105d60152818161093501528181610c3d0152610c9f01526118bc6000f3fe608060405234801561001057600080fd5b506004361061018d5760003560e01c806381100bf0116100e3578063a217fddf1161008c578063d936547e11610066578063d936547e146103c9578063d9caed12146103ec578063e63ab1e9146103ff57600080fd5b8063a217fddf1461039b578063c8a02362146103a3578063d547741f146103b657600080fd5b806391d14854116100bd57806391d148541461032f5780639a590427146103755780639b19251a1461038857600080fd5b806381100bf0146102e05780638456cb591461030057806385f438c11461030857600080fd5b806336568abe11610145578063570618e11161011f578063570618e11461029b5780635c975abb146102c25780636133b4bb146102cd57600080fd5b806336568abe146102605780633c2f05a8146102735780633f4ba83a1461029357600080fd5b806321fc65f21161017657806321fc65f214610206578063248a9ca31461021b5780632f2ff15d1461024d57600080fd5b806301ffc9a714610192578063116191b6146101ba575b600080fd5b6101a56101a03660046114d0565b610426565b60405190151581526020015b60405180910390f35b6101e17f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101b1565b610219610214366004611584565b6104bf565b005b61023f6102293660046115f3565b6000908152600160208190526040909120015490565b6040519081526020016101b1565b61021961025b36600461160c565b6106c0565b61021961026e36600461160c565b6106ec565b6004546101e19073ffffffffffffffffffffffffffffffffffffffff1681565b61021961074a565b61023f7f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a81565b60025460ff166101a5565b6102196102db366004611638565b61077f565b6005546101e19073ffffffffffffffffffffffffffffffffffffffff1681565b6102196109b7565b61023f7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b6101a561033d36600461160c565b600091825260016020908152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b610219610383366004611692565b6109e9565b610219610396366004611692565b610ab7565b61023f600081565b6102196103b1366004611584565b610b88565b6102196103c436600461160c565b610d6f565b6101a56103d7366004611692565b60036020526000908152604090205460ff1681565b6102196103fa3660046116ad565b610d95565b61023f7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b0000000000000000000000000000000000000000000000000000000014806104b957507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b6104c7610ec1565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e46104f181610f04565b6104f9610f0e565b73ffffffffffffffffffffffffffffffffffffffff861660009081526003602052604090205460ff16610558576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61059973ffffffffffffffffffffffffffffffffffffffff87167f000000000000000000000000000000000000000000000000000000000000000086610f4d565b6040517f5131ab5900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690635131ab59906106139089908990899089908990600401611733565b600060405180830381600087803b15801561062d57600080fd5b505af1158015610641573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167f85b5be9cf454e05e0bddf49315178102227c312078eefa3c00294fb4d912ae4e8686866040516106a693929190611790565b60405180910390a3506106b96001600055565b5050505050565b600082815260016020819052604090912001546106dc81610f04565b6106e68383610fda565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8116331461073b576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6107458282611087565b505050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61077481610f04565b61077c611128565b50565b60045473ffffffffffffffffffffffffffffffffffffffff166340c10f19306107a98660056117b3565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815273ffffffffffffffffffffffffffffffffffffffff90921660048301526024820152604401600060405180830381600087803b15801561081457600080fd5b505af1158015610828573d6000803e3d6000fd5b5050600480546007546040517fa9059cbb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff918216938101939093526005602484015216925063a9059cbb91506044016020604051808303816000875af11580156108a9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108cd91906117ed565b506004546108f49073ffffffffffffffffffffffffffffffffffffffff16858585856104bf565b600480546040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116938201939093529116906370a0823190602401602060405180830381865afa158015610986573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109aa919061180f565b156106e6576106e6611828565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a6109e181610f04565b61077c611187565b7f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a610a1381610f04565b73ffffffffffffffffffffffffffffffffffffffff8216610a60576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216600081815260036020526040808220805460ff19169055517f51085ddf9ebdded84b76e829eb58c4078e4b5bdf97d9a94723f336039da467919190a25050565b7f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a610ae181610f04565b73ffffffffffffffffffffffffffffffffffffffff8216610b2e576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216600081815260036020526040808220805460ff19166001179055517faab7954e9d246b167ef88aeddad35209ca2489d95a8aeb59e288d9b19fae5a549190a25050565b610b90610ec1565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e4610bba81610f04565b610bc2610f0e565b73ffffffffffffffffffffffffffffffffffffffff861660009081526003602052604090205460ff16610c21576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610c6273ffffffffffffffffffffffffffffffffffffffff87167f000000000000000000000000000000000000000000000000000000000000000086610f4d565b6040517fb8969bd400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063b8969bd490610cdc9089908990899089908990600401611733565b600060405180830381600087803b158015610cf657600080fd5b505af1158015610d0a573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fb9d4efa96044e5f5e03e696fa9ae2ff66911cc27e8a637c3627c75bc5b2241c88686866040516106a693929190611790565b60008281526001602081905260409091200154610d8b81610f04565b6106e68383611087565b610d9d610ec1565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e4610dc781610f04565b610dcf610f0e565b73ffffffffffffffffffffffffffffffffffffffff841660009081526003602052604090205460ff16610e2e576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610e4f73ffffffffffffffffffffffffffffffffffffffff85168484610f4d565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f9b1bfa7fa9ee420a16e124f794c35ac9f90472acc99140eb2f6447c714cad8eb84604051610eae91815260200190565b60405180910390a3506107456001600055565b600260005403610efd576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b61077c81336111c4565b60025460ff1615610f4b576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6040805173ffffffffffffffffffffffffffffffffffffffff8416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb00000000000000000000000000000000000000000000000000000000179052610745908490611255565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff1661107f57600083815260016020818152604080842073ffffffffffffffffffffffffffffffffffffffff87168086529252808420805460ff19169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45060016104b9565b5060006104b9565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff161561107f57600083815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff86168085529252808320805460ff1916905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45060016104b9565b6111306112eb565b6002805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b61118f610f0e565b6002805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25861115d3390565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16611251576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82166004820152602481018390526044015b60405180910390fd5b5050565b600061127773ffffffffffffffffffffffffffffffffffffffff841683611327565b9050805160001415801561129c57508080602001905181019061129a91906117ed565b155b15610745576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84166004820152602401611248565b60025460ff16610f4b576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60606113358383600061133c565b9392505050565b60608147101561137a576040517fcd786059000000000000000000000000000000000000000000000000000000008152306004820152602401611248565b6000808573ffffffffffffffffffffffffffffffffffffffff1684866040516113a39190611857565b60006040518083038185875af1925050503d80600081146113e0576040519150601f19603f3d011682016040523d82523d6000602084013e6113e5565b606091505b50915091506113f58683836113ff565b9695505050505050565b6060826114145761140f8261148e565b611335565b8151158015611438575073ffffffffffffffffffffffffffffffffffffffff84163b155b15611487576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85166004820152602401611248565b5080611335565b80511561149e5780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000602082840312156114e257600080fd5b81357fffffffff000000000000000000000000000000000000000000000000000000008116811461133557600080fd5b803573ffffffffffffffffffffffffffffffffffffffff8116811461153657600080fd5b919050565b60008083601f84011261154d57600080fd5b50813567ffffffffffffffff81111561156557600080fd5b60208301915083602082850101111561157d57600080fd5b9250929050565b60008060008060006080868803121561159c57600080fd5b6115a586611512565b94506115b360208701611512565b935060408601359250606086013567ffffffffffffffff8111156115d657600080fd5b6115e28882890161153b565b969995985093965092949392505050565b60006020828403121561160557600080fd5b5035919050565b6000806040838503121561161f57600080fd5b8235915061162f60208401611512565b90509250929050565b6000806000806060858703121561164e57600080fd5b61165785611512565b935060208501359250604085013567ffffffffffffffff81111561167a57600080fd5b6116868782880161153b565b95989497509550505050565b6000602082840312156116a457600080fd5b61133582611512565b6000806000606084860312156116c257600080fd5b6116cb84611512565b92506116d960208501611512565b929592945050506040919091013590565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff8616815273ffffffffffffffffffffffffffffffffffffffff851660208201528360408201526080606082015260006117856080830184866116ea565b979650505050505050565b8381526040602082015260006117aa6040830184866116ea565b95945050505050565b808201808211156104b9577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000602082840312156117ff57600080fd5b8151801515811461133557600080fd5b60006020828403121561182157600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b6000825160005b81811015611878576020818601810151858301520161185e565b50600092019182525091905056fea26469706673582212209842ee4b781cbb372c35d109149a76c8386d31c91ade0524aa412d9e5c4bedb064736f6c634300081a0033608060405234801561001057600080fd5b50604051610c9f380380610c9f83398101604081905261002f9161010d565b8181600361003d83826101ff565b50600461004a82826101ff565b50505050506102bd565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261007b57600080fd5b81516001600160401b0381111561009457610094610054565b604051601f8201601f19908116603f011681016001600160401b03811182821017156100c2576100c2610054565b6040528181528382016020018510156100da57600080fd5b60005b828110156100f9576020818601810151838301820152016100dd565b506000918101602001919091529392505050565b6000806040838503121561012057600080fd5b82516001600160401b0381111561013657600080fd5b6101428582860161006a565b602085015190935090506001600160401b0381111561016057600080fd5b61016c8582860161006a565b9150509250929050565b600181811c9082168061018a57607f821691505b6020821081036101aa57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156101fa57806000526020600020601f840160051c810160208510156101d75750805b601f840160051c820191505b818110156101f757600081556001016101e3565b50505b505050565b81516001600160401b0381111561021857610218610054565b61022c816102268454610176565b846101b0565b6020601f82116001811461026057600083156102485750848201515b600019600385901b1c1916600184901b1784556101f7565b600084815260208120601f198516915b828110156102905787850151825560209485019460019092019101610270565b50848210156102ae5786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b6109d3806102cc6000396000f3fe608060405234801561001057600080fd5b50600436106100be5760003560e01c806340c10f191161007657806395d89b411161005b57806395d89b4114610183578063a9059cbb1461018b578063dd62ed3e1461019e57600080fd5b806340c10f191461013857806370a082311461014d57600080fd5b806318160ddd116100a757806318160ddd1461010457806323b872dd14610116578063313ce5671461012957600080fd5b806306fdde03146100c3578063095ea7b3146100e1575b600080fd5b6100cb6101e4565b6040516100d891906107bf565b60405180910390f35b6100f46100ef366004610854565b610276565b60405190151581526020016100d8565b6002545b6040519081526020016100d8565b6100f461012436600461087e565b610290565b604051601281526020016100d8565b61014b610146366004610854565b6102b4565b005b61010861015b3660046108bb565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6100cb6102c2565b6100f4610199366004610854565b6102d1565b6101086101ac3660046108dd565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6060600380546101f390610910565b80601f016020809104026020016040519081016040528092919081815260200182805461021f90610910565b801561026c5780601f106102415761010080835404028352916020019161026c565b820191906000526020600020905b81548152906001019060200180831161024f57829003601f168201915b5050505050905090565b6000336102848185856102df565b60019150505b92915050565b60003361029e8582856102f1565b6102a98585856103c5565b506001949350505050565b6102be8282610470565b5050565b6060600480546101f390610910565b6000336102848185856103c5565b6102ec83838360016104cc565b505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146103bf57818110156103b0576040517ffb8f41b200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416600482015260248101829052604481018390526064015b60405180910390fd5b6103bf848484840360006104cc565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8316610415576040517f96c6fd1e000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff8216610465576040517fec442f05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b6102ec838383610614565b73ffffffffffffffffffffffffffffffffffffffff82166104c0576040517fec442f05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b6102be60008383610614565b73ffffffffffffffffffffffffffffffffffffffff841661051c576040517fe602df05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff831661056c576040517f94280d62000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260016020908152604080832093871683529290522082905580156103bf578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161060691815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff831661064c5780600260008282546106419190610963565b909155506106fe9050565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260208190526040902054818110156106d2576040517fe450d38c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8516600482015260248101829052604481018390526064016103a7565b73ffffffffffffffffffffffffffffffffffffffff841660009081526020819052604090209082900390555b73ffffffffffffffffffffffffffffffffffffffff821661072757600280548290039055610753565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090208054820190555b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516107b291815260200190565b60405180910390a3505050565b602081526000825180602084015260005b818110156107ed57602081860181015160408684010152016107d0565b5060006040828501015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011684010191505092915050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461084f57600080fd5b919050565b6000806040838503121561086757600080fd5b6108708361082b565b946020939093013593505050565b60008060006060848603121561089357600080fd5b61089c8461082b565b92506108aa6020850161082b565b929592945050506040919091013590565b6000602082840312156108cd57600080fd5b6108d68261082b565b9392505050565b600080604083850312156108f057600080fd5b6108f98361082b565b91506109076020840161082b565b90509250929050565b600181811c9082168061092457607f821691505b60208210810361095d577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b8082018082111561028a577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea26469706673582212207e804ca539d49155d2b6bc19268ce22f9f857027c75247d69fb0d56a089c93d464736f6c634300081a00330000000000000000000000007109709ecfa91a80626ff3989d68f67f5b1dd12d8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f7420", + Bin: "0x600580546001600160a01b03191633908117909155600e60a09081526d11d85d195dd85e5155934b9cdbdb60921b60c0526101049190915261012361012481905261014452606460e090815261016460405261010080516001600160e01b0390811663c0c53b8b60e01b1790915261007992919061029316565b600680546001600160a01b03929092166001600160a01b03199283168117909155600780549092161790553480156100b057600080fd5b5060075460055460016000556002805460ff191690556001600160a01b039182169116808215806100e857506001600160a01b038216155b806100fa57506001600160a01b038116155b156101185760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b0383166080526101306000826102b2565b5061015b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a826102b2565b506101867f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e4836102b2565b5061019f600080516020616e78833981519152826102b2565b506101b8600080516020616e78833981519152836102b2565b505050506040516101c89061383e565b60408082526004908201819052631d195cdd60e21b606083015260806020830181905282015263151154d560e21b60a082015260c001604051809103906000f08015801561021a573d6000803e3d6000fd5b50600480546001600160a01b0319166001600160a01b0392831617815560075460405163ae7a3a6f60e01b815230928101929092529091169063ae7a3a6f90602401600060405180830381600087803b15801561027657600080fd5b505af115801561028a573d6000803e3d6000fd5b505050506148bf565b600061029d61384b565b6102a8848483610345565b9150505b92915050565b60008281526001602090815260408083206001600160a01b038516845290915281205460ff1661033d5760008381526001602081815260408084206001600160a01b0387168086529252808420805460ff19169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45060016102ac565b5060006102ac565b60008061035285846103c1565b90506103b66040518060400160405280601d81526020017f4552433139363750726f78792e736f6c3a4552433139363750726f787900000081525082866040516020016103a0929190613954565b60408051601f19818403018152919052856103cd565b9150505b9392505050565b60006103ba8383610401565b60c081015151600090156103f7576103f084848460c0015161042260201b60201c565b90506103ba565b6103f0848461059b565b600061040d8383610668565b6103ba838360200151846103cd60201b60201c565b60008061042d610678565b9050600061043b8683610712565b905060006104588260600151836020015185610b3560201b60201c565b9050600061046883838989610cea565b9050600061047582611966565b602081015181519192509060030b156104ce5789826040015160405160200161049f929190613978565b60408051601f198184030181529082905262461bcd60e51b82526104c5916004016139de565b60405180910390fd5b60006105176040518060400160405280601581526020017f4465706c6f79656420746f20616464726573733a200000000000000000000000815250836001611afd60201b60201c565b60405163c6ce059d60e01b8152909150600080516020616e588339815191529063c6ce059d9061054b9084906004016139de565b602060405180830381865afa158015610568573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061058c91906139f1565b9b9a5050505050505050505050565b604051638d1cc92560e01b81526000908190600080516020616e5883398151915290638d1cc925906105d19087906004016139de565b600060405180830381865afa1580156105ee573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526106169190810190613ae6565b905060006106458285604051602001610630929190613b1a565b60408051601f19818403018152919052611c9d565b90506001600160a01b0381166102a857848460405160200161049f929190613b49565b61067482826000611cb0565b5050565b60408051808201825260038152621bdd5d60ea1b602082015290516334515cdb60e21b8152606091600080516020616e5883398151915291829063d145736c906106c6908490600401613bd8565b600060405180830381865afa1580156106e3573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261070b9190810190613c0d565b9250505090565b6107446040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b6000600080516020616e5883398151915290506107896040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b61079285611d8a565b602082015260006107a286611fdf565b90506000836001600160a01b031663d930a0e66040518163ffffffff1660e01b8152600401600060405180830381865afa1580156107e4573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261080c9190810190613c0d565b868385602001516040516020016108269493929190613c55565b60408051601f19818403018152908290526360f9bb1160e01b825291506000906001600160a01b038616906360f9bb11906108659085906004016139de565b600060405180830381865afa158015610882573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526108aa9190810190613c0d565b604051636da11afb60e11b81529091506001600160a01b0386169063db4235f6906108d9908490600401613ced565b602060405180830381865afa1580156108f6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061091a9190613d26565b61092f578160405160200161049f9190613d48565b6040516309389f5960e31b81526001600160a01b038616906349c4fac89061095b908490600401613dbf565b600060405180830381865afa158015610978573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526109a09190810190613c0d565b8452604051636da11afb60e11b81526001600160a01b0386169063db4235f6906109ce908490600401613e05565b602060405180830381865afa1580156109eb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a0f9190613d26565b15610a8b576040516309389f5960e31b81526001600160a01b038616906349c4fac890610a40908490600401613e05565b600060405180830381865afa158015610a5d573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610a859190810190613c0d565b60408501525b846001600160a01b03166349c4fac8828660000151604051602001610ab09190613e46565b6040516020818303038152906040526040518363ffffffff1660e01b8152600401610adc929190613ea1565b600060405180830381865afa158015610af9573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610b219190810190613c0d565b606085015250608083015250949350505050565b60408051600480825260a0820190925260609160009190816020015b6060815260200190600190039081610b51579050509050604051806040016040528060048152602001630677265760e41b81525081600081518110610b9857610b98613ec6565b6020026020010181905250604051806040016040528060038152602001620b5c9b60ea1b81525081600181518110610bd257610bd2613ec6565b602002602001018190525084604051602001610bee9190613edc565b60405160208183030381529060405281600281518110610c1057610c10613ec6565b602002602001018190525082604051602001610c2c9190613f11565b60405160208183030381529060405281600381518110610c4e57610c4e613ec6565b60209081029190910101526000610c6482611966565b9050600081602001519050610ccb610c9e60405180604001604052806005815260200164173539b7b760d91b81525061216260201b60201c565b6040805180820182526000808252602091820152815180830190925284518252808501908201529061218f565b610ce0578560405160200161049f9190613f40565b9695505050505050565b60a0810151604080518082018252600080825260209182015281518083019092528251808352928101910152606090600080516020616e588339815191529015610d34565b511590565b610e5057826020015115610dc45760405162461bcd60e51b81526020600482015260586024820152600080516020616e9883398151915260448201527f62652075736564207768656e207468652060736b6970566572696679536f757260648201527f6365436f646560206f7074696f6e206973206074727565600000000000000000608482015260a4016104c5565b8260c0015115610e505760405162461bcd60e51b81526020600482015260536024820152600080516020616e9883398151915260448201527f62652075736564207768656e207468652060736b69704c6963656e736554797060648201527f6560206f7074696f6e2069732060747275656000000000000000000000000000608482015260a4016104c5565b6040805160ff8082526120008201909252600091816020015b6060815260200190600190039081610e695790505090506000604051806040016040528060038152602001620dce0f60eb1b815250828280610eaa90613fd5565b935060ff1681518110610ebf57610ebf613ec6565b60200260200101819052506040518060400160405280600d81526020016c302e302e312d616c7068612e3760981b815250604051602001610f009190613ff4565b604051602081830303815290604052828280610f1b90613fd5565b935060ff1681518110610f3057610f30613ec6565b6020026020010181905250604051806040016040528060068152602001656465706c6f7960d01b815250828280610f6690613fd5565b935060ff1681518110610f7b57610f7b613ec6565b60200260200101819052506040518060400160405280600e81526020016d2d2d636f6e74726163744e616d6560901b815250828280610fb990613fd5565b935060ff1681518110610fce57610fce613ec6565b60200260200101819052508760200151828280610fea90613fd5565b935060ff1681518110610fff57610fff613ec6565b60200260200101819052506040518060400160405280600e81526020016d05a5ac6dedce8e4c2c6e8a0c2e8d60931b81525082828061103d90613fd5565b935060ff168151811061105257611052613ec6565b60209081029190910101528751828261106a81613fd5565b935060ff168151811061107f5761107f613ec6565b6020026020010181905250604051806040016040528060098152602001680b4b58da185a5b925960ba1b8152508282806110b890613fd5565b935060ff16815181106110cd576110cd613ec6565b60209081029190910101526110e1466121f0565b82826110ec81613fd5565b935060ff168151811061110157611101613ec6565b60200260200101819052506040518060400160405280600f81526020016e2d2d6275696c64496e666f46696c6560881b81525082828061114090613fd5565b935060ff168151811061115557611155613ec6565b60200260200101819052508682828061116d90613fd5565b935060ff168151811061118257611182613ec6565b60209081029190910101528551156112905760408051808201909152601581527f2d2d636f6e7374727563746f7242797465636f64650000000000000000000000602082015282826111d381613fd5565b935060ff16815181106111e8576111e8613ec6565b60209081029190910101526040516371aad10d60e01b81526001600160a01b038416906371aad10d9061121f9089906004016139de565b600060405180830381865afa15801561123c573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526112649190810190613c0d565b828261126f81613fd5565b935060ff168151811061128457611284613ec6565b60200260200101819052505b84602001511561133d576040805180820190915260128152712d2d766572696679536f75726365436f646560701b602082015282826112ce81613fd5565b935060ff16815181106112e3576112e3613ec6565b60200260200101819052506040518060400160405280600581526020016466616c736560d81b81525082828061131890613fd5565b935060ff168151811061132d5761132d613ec6565b60200260200101819052506114a4565b611353610d2f8660a0015161216260201b60201c565b6113d65760408051808201909152600d81526c2d2d6c6963656e73655479706560981b6020820152828261138681613fd5565b935060ff168151811061139b5761139b613ec6565b60200260200101819052508460a001516040516020016113bb9190613edc565b60405160208183030381529060405282828061131890613fd5565b8460c001511580156113fb57506113f9610d2f896040015161216260201b60201c565b155b156114a45760408051808201909152600d81526c2d2d6c6963656e73655479706560981b6020820152828261142f81613fd5565b935060ff168151811061144457611444613ec6565b602090810291909101015261145888612282565b6040516020016114689190613edc565b60405160208183030381529060405282828061148390613fd5565b935060ff168151811061149857611498613ec6565b60200260200101819052505b6114ba610d2f866040015161216260201b60201c565b61153d5760408051808201909152600b81526a0b4b5c995b185e595c925960aa1b602082015282826114eb81613fd5565b935060ff168151811061150057611500613ec6565b6020026020010181905250846040015182828061151c90613fd5565b935060ff168151811061153157611531613ec6565b60200260200101819052505b60608501511561162e576040805180820190915260068152650b4b5cd85b1d60d21b6020820152828261156f81613fd5565b935060ff168151811061158457611584613ec6565b60209081029190910101526060850151604051631623433d60e31b815260048101919091526001600160a01b0384169063b11a19e890602401600060405180830381865afa1580156115da573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526116029190810190613c0d565b828261160d81613fd5565b935060ff168151811061162257611622613ec6565b60200260200101819052505b60e085015151156116c05760408051808201909152600a8152690b4b59d85cd31a5b5a5d60b21b6020820152828261166581613fd5565b935060ff168151811061167a5761167a613ec6565b602090810291909101015260e085015151611694906121f0565b828261169f81613fd5565b935060ff16815181106116b4576116b4613ec6565b60200260200101819052505b60e0850151602001511561175d5760408051808201909152600a8152692d2d676173507269636560b01b602082015282826116fa81613fd5565b935060ff168151811061170f5761170f613ec6565b60200260200101819052506117318560e00151602001516121f060201b60201c565b828261173c81613fd5565b935060ff168151811061175157611751613ec6565b60200260200101819052505b60e085015160400151156117fe5760408051808201909152600e81526d2d2d6d617846656550657247617360901b6020820152828261179b81613fd5565b935060ff16815181106117b0576117b0613ec6565b60200260200101819052506117d28560e00151604001516121f060201b60201c565b82826117dd81613fd5565b935060ff16815181106117f2576117f2613ec6565b60200260200101819052505b60e085015160600151156118ae5760408051808201909152601681527f2d2d6d61785072696f72697479466565506572476173000000000000000000006020820152828261184b81613fd5565b935060ff168151811061186057611860613ec6565b60200260200101819052506118828560e00151606001516121f060201b60201c565b828261188d81613fd5565b935060ff16815181106118a2576118a2613ec6565b60200260200101819052505b60008160ff166001600160401b038111156118cb576118cb613a1a565b6040519080825280602002602001820160405280156118fe57816020015b60608152602001906001900390816118e95790505b50905060005b8260ff168160ff16101561195757838160ff168151811061192757611927613ec6565b6020026020010151828260ff168151811061194457611944613ec6565b6020908102919091010152600101611904565b5093505050505b949350505050565b61198d6040518060600160405280600060030b815260200160608152602001606081525090565b6040805180820182526004808252630c4c2e6d60e31b602083015291516334515cdb60e21b8152600080516020616e5883398151915292600091849163d145736c916119db9186910161404b565b600060405180830381865afa1580156119f8573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611a209190810190613c0d565b90506000611a2e8683612938565b90506000846001600160a01b031663f45c1ce7836040518263ffffffff1660e01b8152600401611a5e9190614092565b6000604051808303816000875af1158015611a7d573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611aa591908101906140f7565b805190915060030b15801590611abe5750602081015151155b8015611acd5750604081015151155b15610ce05781600081518110611ae557611ae5613ec6565b602002602001015160405160200161049f91906141aa565b60606000611b328560408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600080825260209182015281518083019092528651825280870190820152909150611b699082905b90612a72565b15611c66576000611be682611be081611bda611bac8a60408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6040805180820182526000808252602091820152815180830190925282518252918201519181019190915290565b90612a99565b90612af6565b9050611c1a611c13604051806040016040528060018152602001600560f91b81525061216260201b60201c565b8290612a72565b15611c5457611c51611c4a604051806040016040528060018152602001600560f91b81525061216260201b60201c565b8290612b7b565b90505b611c5d81612ba1565b925050506103ba565b8215611c7f57848460405160200161049f92919061437a565b50506040805160208101909152600081526103ba565b509392505050565b6000808251602084016000f09392505050565b8160a0015115611cbf57505050565b6000611ccc848484612c06565b90506000611cd982611966565b602081015181519192509060030b158015611d4c5750611d4c611d20604051806040016040528060078152602001665355434345535360c81b81525061216260201b60201c565b604080518082018252600080825260209182015281518083019092528451825280850190820152611b63565b15611d5957505050505050565b60408201515115611d7957816040015160405160200161049f91906143f5565b8060405160200161049f919061443f565b60606000611dbf8360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b9050611df6611def604051806040016040528060048152602001630b9cdbdb60e21b81525061216260201b60201c565b829061218f565b15611e38576103ba611e33611e2c604051806040016040528060048152602001630b9cdbdb60e21b81525061216260201b60201c565b8390613119565b612ba1565b611e6a611e63604051806040016040528060018152602001601d60f91b81525061216260201b60201c565b82906131a3565b600103611ed257611e9c611c4a604051806040016040528060018152602001601d60f91b81525061216260201b60201c565b506103ba611e33611ecb604051806040016040528060018152602001601d60f91b81525061216260201b60201c565b8390612b7b565b611f01611def60405180604001604052806005815260200164173539b7b760d91b81525061216260201b60201c565b15611fce576000611f3982611f34604051806040016040528060018152602001602f60f81b81525061216260201b60201c565b613238565b905060008160018351611f4c919061448f565b81518110611f5c57611f5c613ec6565b60200260200101519050611fc5611e33611f9860405180604001604052806005815260200164173539b7b760d91b81525061216260201b60201c565b60408051808201825260008082526020918201528151808301909252855182528086019082015290613119565b95945050505050565b8260405160200161049f91906144a2565b606060006120148360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b9050612044611def604051806040016040528060048152602001630b9cdbdb60e21b81525061216260201b60201c565b15612052576103ba81612ba1565b61207d611e63604051806040016040528060018152602001601d60f91b81525061216260201b60201c565b6001036120b2576103ba611e33611ecb604051806040016040528060018152602001601d60f91b81525061216260201b60201c565b6120e1611def60405180604001604052806005815260200164173539b7b760d91b81525061216260201b60201c565b15611fce57600061211482611f34604051806040016040528060018152602001602f60f81b81525061216260201b60201c565b905060018151111561215057806002825161212f919061448f565b8151811061213f5761213f613ec6565b602002602001015192505050919050565b508260405160200161049f91906144a2565b60408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b8051825160009111156121a4575060006102ac565b815183516020850151600092916121ba9161455c565b6121c4919061448f565b9050826020015181036121db5760019150506102ac565b82516020840151819020912014905092915050565b606060006121fd836132dc565b60010190506000816001600160401b0381111561221c5761221c613a1a565b6040519080825280601f01601f191660200182016040528015612246576020820181803683370190505b5090508181016020015b600019016f181899199a1a9b1b9c1cb0b131b232b360811b600a86061a8153600a850494508461225057509392505050565b60606000612299836040015161216260201b60201c565b90506122d66122cf6040518060400160405280600a8152602001691553931250d15394d15160b21b81525061216260201b60201c565b82906133be565b156122fd5750506040805180820190915260048152634e6f6e6560e01b6020820152919050565b6123306122cf60405180604001604052806009815260200168556e6c6963656e736560b81b81525061216260201b60201c565b1561235c575050604080518082019091526009815268556e6c6963656e736560b81b6020820152919050565b6123896122cf6040518060400160405280600381526020016213525560ea1b81525061216260201b60201c565b156123af57505060408051808201909152600381526213525560ea1b6020820152919050565b6123e56122cf6040518060400160405280600c81526020016b47504c2d322e302d6f6e6c7960a01b81525061216260201b60201c565b8061242557506124256122cf6040518060400160405280601081526020016f23a8261699171816b7b916b630ba32b960811b81525061216260201b60201c565b1561245157505060408051808201909152600981526823a72a9023a8263b1960b91b6020820152919050565b6124876122cf6040518060400160405280600c81526020016b47504c2d332e302d6f6e6c7960a01b81525061216260201b60201c565b806124c757506124c76122cf6040518060400160405280601081526020016f23a8261699971816b7b916b630ba32b960811b81525061216260201b60201c565b156124f3575050604080518082019091526009815268474e552047504c763360b81b6020820152919050565b61252a6122cf6040518060400160405280600d81526020016c4c47504c2d322e312d6f6e6c7960981b81525061216260201b60201c565b8061256b575061256b6122cf604051806040016040528060118152602001702623a8261699171896b7b916b630ba32b960791b81525061216260201b60201c565b1561259a57505060408051808201909152600c81526b474e55204c47504c76322e3160a01b6020820152919050565b6125d16122cf6040518060400160405280600d81526020016c4c47504c2d332e302d6f6e6c7960981b81525061216260201b60201c565b8061261257506126126122cf604051806040016040528060118152602001702623a8261699971816b7b916b630ba32b960791b81525061216260201b60201c565b1561263f57505060408051808201909152600a815269474e55204c47504c763360b01b6020820152919050565b6126756122cf6040518060400160405280600c81526020016b4253442d322d436c6175736560a01b81525061216260201b60201c565b156126a457505060408051808201909152600c81526b4253442d322d436c6175736560a01b6020820152919050565b6126da6122cf6040518060400160405280600c81526020016b4253442d332d436c6175736560a01b81525061216260201b60201c565b1561270957505060408051808201909152600c81526b4253442d332d436c6175736560a01b6020820152919050565b61273a6122cf6040518060400160405280600781526020016604d504c2d322e360cc1b81525061216260201b60201c565b1561276457505060408051808201909152600781526604d504c2d322e360cc1b6020820152919050565b6127956122cf6040518060400160405280600781526020016604f534c2d332e360cc1b81525061216260201b60201c565b156127bf57505060408051808201909152600781526604f534c2d332e360cc1b6020820152919050565b6127f36122cf6040518060400160405280600a81526020016904170616368652d322e360b41b81525061216260201b60201c565b1561282057505060408051808201909152600a81526904170616368652d322e360b41b6020820152919050565b6128576122cf6040518060400160405280600d81526020016c4147504c2d332e302d6f6e6c7960981b81525061216260201b60201c565b8061289857506128986122cf6040518060400160405280601181526020017020a3a8261699971816b7b916b630ba32b960791b81525061216260201b60201c565b156128c557505060408051808201909152600a815269474e55204147504c763360b01b6020820152919050565b6128f76122cf604051806040016040528060088152602001674255534c2d312e3160c01b81525061216260201b60201c565b1561292157505060408051808201909152600781526642534c20312e3160c81b6020820152919050565b6040808401518451915161049f929060200161456f565b60608060005b84518110156129c3578185828151811061295a5761295a613ec6565b6020026020010151604051602001612973929190613b1a565b604051602081830303815290604052915060018551612992919061448f565b81146129bb57816040516020016129a991906146bf565b60405160208183030381529060405291505b60010161293e565b5060408051600380825260808201909252600091816020015b60608152602001906001900390816129dc5790505090508381600081518110612a0757612a07613ec6565b6020026020010181905250604051806040016040528060028152602001612d6360f01b81525081600181518110612a4057612a40613ec6565b60200260200101819052508181600281518110612a5f57612a5f613ec6565b6020908102919091010152949350505050565b6020808301518351835192840151600093612a9092918491906133d2565b14159392505050565b6040805180820190915260008082526020808301829052845185820151855192860151612ac693906134e3565b9050836020015181612ad8919061448f565b84518590612ae790839061448f565b90525060208401525090919050565b6040805180820190915260008082526020820152815183511015612b1b5750816102ac565b6020808301519084015160019114612b425750815160208481015190840151829020919020145b8015612b7357825184518590612b5990839061448f565b9052508251602085018051612b6f90839061455c565b9052505b509192915050565b6040805180820190915260008082526020820152612b9a838383613603565b5092915050565b6060600082600001516001600160401b03811115612bc157612bc1613a1a565b6040519080825280601f01601f191660200182016040528015612beb576020820181803683370190505b50602084810151855192935090830191612b9a9183916136a9565b60606000612c12610678565b6040805160ff808252612000820190925291925060009190816020015b6060815260200190600190039081612c2f5790505090506000604051806040016040528060038152602001620dce0f60eb1b815250828280612c7090613fd5565b935060ff1681518110612c8557612c85613ec6565b6020026020010181905250604051806040016040528060078152602001665e312e33322e3360c81b815250604051602001612cc091906146e4565b604051602081830303815290604052828280612cdb90613fd5565b935060ff1681518110612cf057612cf0613ec6565b60200260200101819052506040518060400160405280600881526020016776616c696461746560c01b815250828280612d2890613fd5565b935060ff1681518110612d3d57612d3d613ec6565b602002602001018190525082604051602001612d599190613f11565b604051602081830303815290604052828280612d7490613fd5565b935060ff1681518110612d8957612d89613ec6565b60200260200101819052506040518060400160405280600a8152602001690b4b58dbdb9d1c9858dd60b21b815250828280612dc390613fd5565b935060ff1681518110612dd857612dd8613ec6565b6020908102919091010152612ded8784613723565b8282612df881613fd5565b935060ff1681518110612e0d57612e0d613ec6565b602090810291909101015285515115612ea55760408051808201909152600b81526a2d2d7265666572656e636560a81b60208201528282612e4d81613fd5565b935060ff1681518110612e6257612e62613ec6565b60209081029190910101528551612e799084613723565b8282612e8481613fd5565b935060ff1681518110612e9957612e99613ec6565b60200260200101819052505b856080015115612f135760408051808201909152601881527f2d2d756e73616665536b697053746f72616765436865636b000000000000000060208201528282612eee81613fd5565b935060ff1681518110612f0357612f03613ec6565b6020026020010181905250612f6e565b8415612f6e576040805180820190915260128152712d2d726571756972655265666572656e636560701b60208201528282612f4d81613fd5565b935060ff1681518110612f6257612f62613ec6565b60200260200101819052505b60408601515115612ffa5760408051808201909152600d81526c2d2d756e73616665416c6c6f7760981b60208201528282612fa881613fd5565b935060ff1681518110612fbd57612fbd613ec6565b60200260200101819052508560400151828280612fd990613fd5565b935060ff1681518110612fee57612fee613ec6565b60200260200101819052505b8560600151156130645760408051808201909152601481527f2d2d756e73616665416c6c6f7752656e616d65730000000000000000000000006020820152828261304381613fd5565b935060ff168151811061305857613058613ec6565b60200260200101819052505b60008160ff166001600160401b0381111561308157613081613a1a565b6040519080825280602002602001820160405280156130b457816020015b606081526020019060019003908161309f5790505b50905060005b8260ff168160ff16101561310d57838160ff16815181106130dd576130dd613ec6565b6020026020010151828260ff16815181106130fa576130fa613ec6565b60209081029190910101526001016130ba565b50979650505050505050565b604080518082019091526000808252602082015281518351101561313e5750816102ac565b815183516020850151600092916131549161455c565b61315e919061448f565b6020840151909150600190821461317f575082516020840151819020908220145b801561319a5783518551869061319690839061448f565b9052505b50929392505050565b8051825160208085015190840151600093849390926131c39284906134e3565b6131cd919061455c565b90505b835160208501516131e1919061455c565b8111612b9a57816131f181614729565b925050826000015161322785602001518361320c919061448f565b8651613218919061448f565b855160208701518591906134e3565b613231919061455c565b90506131d0565b6060600061324684846131a3565b61325190600161455c565b6001600160401b0381111561326857613268613a1a565b60405190808252806020026020018201604052801561329b57816020015b60608152602001906001900390816132865790505b50905060005b8151811015611c95576132b7611e338686612b7b565b8282815181106132c9576132c9613ec6565b60209081029190910101526001016132a1565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310613325577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310613351576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc10000831061336f57662386f26fc10000830492506010015b6305f5e1008310613387576305f5e100830492506008015b612710831061339b57612710830492506004015b606483106133ad576064830492506002015b600a83106102ac5760010192915050565b60006133ca8383613763565b159392505050565b6000808584116134d95760208411613485576000841561341d5760016133f986602061448f565b613404906008614742565b61340f906002614840565b613419919061448f565b1990505b835181168561342c898961455c565b613436919061448f565b805190935082165b81811461347057878411613458578794505050505061195e565b836134628161484c565b94505082845116905061343e565b61347a878561455c565b94505050505061195e565b838320613492858861448f565b61349c908761455c565b91505b8582106134d7578482208082036134c4576134ba868461455c565b935050505061195e565b6134cf60018461448f565b92505061349f565b505b5092949350505050565b600083818685116135ee576020851161359d576000851561352f57600161350b87602061448f565b613516906008614742565b613521906002614840565b61352b919061448f565b1990505b845181166000876135408b8b61455c565b61354a919061448f565b855190915083165b82811461358f578186106135775761356a8b8b61455c565b965050505050505061195e565b8561358181614729565b965050838651169050613552565b85965050505050505061195e565b508383206000905b6135af868961448f565b82116135ec578583208082036135cb578394505050505061195e565b6135d660018561455c565b93505081806135e490614729565b9250506135a5565b505b6135f8878761455c565b979650505050505050565b604080518082019091526000808252602080830182905285518682015186519287015161363093906134e3565b60208087018051918601919091525190915061364c908261448f565b83528451602086015161365f919061455c565b810361366e57600085526136a0565b8351835161367c919061455c565b8551869061368b90839061448f565b905250835161369a908261455c565b60208601525b50909392505050565b602081106136e157815183526136c060208461455c565b92506136cd60208361455c565b91506136da60208261448f565b90506136a9565b60001981156137105760016136f783602061448f565b61370390610100614840565b61370d919061448f565b90505b9151835183169219169190911790915250565b606060006137318484610712565b805160208083015160405193945061374b93909101614863565b60405160208183030381529060405291505092915050565b8151815160009190811115613776575081515b6020808501519084015160005b8381101561382f57825182518082146137ff5760001960208710156137de576001846137b089602061448f565b6137ba919061455c565b6137c5906008614742565b6137d0906002614840565b6137da919061448f565b1990505b81811683821681810391146137fc5797506102ac9650505050505050565b50505b61380a60208661455c565b945061381760208561455c565b93505050602081613828919061455c565b9050613783565b5084518651610ce0919061489f565b610c9f806161b983390190565b6040518060e0016040528060608152602001606081526020016060815260200160001515815260200160001515815260200160001515815260200161388e613893565b905290565b6040518061010001604052806000151581526020016000151581526020016060815260200160008019168152602001606081526020016060815260200160001515815260200161388e6040518060800160405280600081526020016000815260200160008152602001600081525090565b60005b8381101561391f578181015183820152602001613907565b50506000910152565b60008151808452613940816020860160208601613904565b601f01601f19169290920160200192915050565b6001600160a01b038316815260406020820181905260009061195e90830184613928565b7f4661696c656420746f206465706c6f7920636f6e7472616374200000000000008152600083516139b081601a850160208801613904565b6101d160f51b601a9184019182015283516139d281601c840160208801613904565b01601c01949350505050565b6020815260006103ba6020830184613928565b600060208284031215613a0357600080fd5b81516001600160a01b03811681146103ba57600080fd5b634e487b7160e01b600052604160045260246000fd5b604051606081016001600160401b0381118282101715613a5257613a52613a1a565b60405290565b6000806001600160401b03841115613a7257613a72613a1a565b50604051601f19601f85018116603f011681018181106001600160401b0382111715613aa057613aa0613a1a565b604052838152905080828401851015613ab857600080fd5b611c95846020830185613904565b600082601f830112613ad757600080fd5b6103ba83835160208501613a58565b600060208284031215613af857600080fd5b81516001600160401b03811115613b0e57600080fd5b6102a884828501613ac6565b60008351613b2c818460208801613904565b835190830190613b40818360208801613904565b01949350505050565b7f4661696c656420746f206465706c6f7920636f6e747261637420000000000000815260008351613b8181601a850160208801613904565b7f207573696e6720636f6e7374727563746f722064617461202200000000000000601a918401918201528351613bbe816033840160208801613904565b601160f91b60339290910191820152603401949350505050565b60408152600b60408201526a1193d55391149657d3d55560aa1b60608201526080602082015260006103ba6080830184613928565b600060208284031215613c1f57600080fd5b81516001600160401b03811115613c3557600080fd5b8201601f81018413613c4657600080fd5b6102a884825160208401613a58565b60008551613c67818460208a01613904565b602f60f81b9083019081528551613c85816001840160208a01613904565b602f60f81b600192909101918201528451613ca7816002840160208901613904565b600181830101915050602f60f81b60018201528351613ccd816002840160208801613904565b64173539b7b760d91b600292909101918201526007019695505050505050565b604081526000613d006040830184613928565b828103602084015260048152630b985cdd60e21b60208201526040810191505092915050565b600060208284031215613d3857600080fd5b815180151581146103ba57600080fd5b7f436f756c64206e6f742066696e642041535420696e2061727469666163742000815260008251613d8081601f850160208701613904565b7f2e205365742060617374203d20747275656020696e20666f756e6472792e746f601f939091019283015250611b5b60f21b603f820152604101919050565b604081526000613dd26040830184613928565b8281036020840152601181527005cc2e6e85cc2c4e6ded8eae8caa0c2e8d607b1b60208201526040810191505092915050565b604081526000613e186040830184613928565b8281036020840152600c81526b2e6173742e6c6963656e736560a01b60208201526040810191505092915050565b7f2e6d657461646174612e736f75726365732e5b27000000000000000000000000815260008251613e7e816014850160208701613904565b6b13ae9735b2b1b1b0b5991a9b60a11b6014939091019283015250602001919050565b604081526000613eb46040830185613928565b82810360208401526103b68185613928565b634e487b7160e01b600052603260045260246000fd5b601160f91b81528151600090613ef9816001850160208701613904565b601160f91b6001939091019283015250600201919050565b60008251613f23818460208701613904565b6a2f6275696c642d696e666f60a81b920191825250600b01919050565b7f436f756c64206e6f742066696e64206275696c642d696e666f2066696c65207781527f697468206d61746368696e6720736f7572636520636f6465206861736820666f60208201526a0391031b7b73a3930b1ba160ad1b604082015260008251613fb281604b850160208701613904565b91909101604b0192915050565b634e487b7160e01b600052601160045260246000fd5b600060ff821660ff8103613feb57613feb613fbf565b60010192915050565b7f406f70656e7a657070656c696e2f646566656e6465722d6465706c6f792d636c81526801a595b9d0b58db1a560be1b60208201526000825161403e816029850160208701613904565b9190910160290192915050565b60408152601660408201527f4f50454e5a455050454c494e5f424153485f504154480000000000000000000060608201526080602082015260006103ba6080830184613928565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b828110156140eb57603f198786030184526140d6858351613928565b945060209384019391909101906001016140ba565b50929695505050505050565b60006020828403121561410957600080fd5b81516001600160401b0381111561411f57600080fd5b82016060818503121561413157600080fd5b614139613a30565b81518060030b811461414a57600080fd5b815260208201516001600160401b0381111561416557600080fd5b61417186828501613ac6565b60208301525060408201516001600160401b0381111561419057600080fd5b61419c86828501613ac6565b604083015250949350505050565b7f4661696c656420746f2072756e206261736820636f6d6d616e642077697468208152601160f91b6020820152600082516141ec816021850160208701613904565b7f222e20496620796f7520617265207573696e672057696e646f77732c2073657460219390910192830152507f20746865204f50454e5a455050454c494e5f424153485f5041544820656e766960418201527f726f6e6d656e74207661726961626c6520746f207468652066756c6c7920717560618201527f616c69666965642070617468206f66207468652062617368206578656375746160818201527f626c652e20466f72206578616d706c652c20696620796f75206172652075736960a18201527f6e672047697420666f722057696e646f77732c206164642074686520666f6c6c60c18201527f6f77696e67206c696e6520696e20746865202e656e762066696c65206f66207960e18201527f6f75722070726f6a65637420287573696e6720666f727761726420736c6173686101018201527f6573293a0a4f50454e5a455050454c494e5f424153485f504154483d22433a2f6101218201527f50726f6772616d2046696c65732f4769742f62696e2f6261736822000000000061014182015261015c01919050565b7f4661696c656420746f2066696e64206c696e65207769746820707265666978208152602760f81b6020820152600083516143bc816021850160208801613904565b6c0139034b71037baba383aba1d1609d1b60219184019182015283516143e981602e840160208801613904565b01602e01949350505050565b7f4661696c656420746f2072756e2075706772616465207361666574792076616c815268034b230ba34b7b71d160bd1b60208201526000825161403e816029850160208701613904565b7f55706772616465207361666574792076616c69646174696f6e206661696c65648152611d0560f11b602082015260008251614482816022850160208701613904565b9190910160220192915050565b818103818111156102ac576102ac613fbf565b6d021b7b73a3930b1ba103730b6b2960951b8152600082516144cb81600e850160208701613904565b7f206d75737420626520696e2074686520666f726d6174204d79436f6e74726163600e9390910192830152507f742e736f6c3a4d79436f6e7472616374206f72204d79436f6e74726163742e73602e8201527f6f6c206f72206f75742f4d79436f6e74726163742e736f6c2f4d79436f6e7472604e8201526730b1ba173539b7b760c11b606e820152607601919050565b808201808211156102ac576102ac613fbf565b7f53504458206c6963656e7365206964656e7469666965722000000000000000008152600083516145a7816018850160208801613904565b6301034b7160e51b60189184019182015283516145cb81601c840160208801613904565b7f20646f6573206e6f74206c6f6f6b206c696b65206120737570706f7274656420601c92909101918201527f6c6963656e736520666f7220626c6f636b206578706c6f726572207665726966603c8201527f69636174696f6e2e205573652074686520606c6963656e73655479706560206f605c8201527f7074696f6e20746f20737065636966792061206c6963656e736520747970652c607c8201527f206f7220736574207468652060736b69704c6963656e73655479706560206f70609c8201527f74696f6e20746f2060747275656020746f20736b69702e00000000000000000060bc82015260d301949350505050565b600082516146d1818460208701613904565b600160fd1b920191825250600101919050565b7f406f70656e7a657070656c696e2f75706772616465732d636f7265400000000081526000825161471c81601c850160208701613904565b91909101601c0192915050565b60006001820161473b5761473b613fbf565b5060010190565b80820281158282048414176102ac576102ac613fbf565b6001815b60018411156147945780850481111561477857614778613fbf565b600184161561478657908102905b60019390931c92800261475d565b935093915050565b6000826147ab575060016102ac565b816147b8575060006102ac565b81600181146147ce57600281146147d8576147f4565b60019150506102ac565b60ff8411156147e9576147e9613fbf565b50506001821b6102ac565b5060208310610133831016604e8410600b8410161715614817575081810a6102ac565b6148246000198484614759565b806000190482111561483857614838613fbf565b029392505050565b60006103ba838361479c565b60008161485b5761485b613fbf565b506000190190565b60008351614875818460208801613904565b601d60f91b9083019081528351614893816001840160208801613904565b01600101949350505050565b8181036000831280158383131683831282161715612b9a57612b9a613fbf565b6080516118bc6148fd600039600081816101bf01528181610574015281816105d60152818161093501528181610c3d0152610c9f01526118bc6000f3fe608060405234801561001057600080fd5b506004361061018d5760003560e01c806381100bf0116100e3578063a217fddf1161008c578063d936547e11610066578063d936547e146103c9578063d9caed12146103ec578063e63ab1e9146103ff57600080fd5b8063a217fddf1461039b578063c8a02362146103a3578063d547741f146103b657600080fd5b806391d14854116100bd57806391d148541461032f5780639a590427146103755780639b19251a1461038857600080fd5b806381100bf0146102e05780638456cb591461030057806385f438c11461030857600080fd5b806336568abe11610145578063570618e11161011f578063570618e11461029b5780635c975abb146102c25780636133b4bb146102cd57600080fd5b806336568abe146102605780633c2f05a8146102735780633f4ba83a1461029357600080fd5b806321fc65f21161017657806321fc65f214610206578063248a9ca31461021b5780632f2ff15d1461024d57600080fd5b806301ffc9a714610192578063116191b6146101ba575b600080fd5b6101a56101a03660046114d0565b610426565b60405190151581526020015b60405180910390f35b6101e17f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101b1565b610219610214366004611584565b6104bf565b005b61023f6102293660046115f3565b6000908152600160208190526040909120015490565b6040519081526020016101b1565b61021961025b36600461160c565b6106c0565b61021961026e36600461160c565b6106ec565b6004546101e19073ffffffffffffffffffffffffffffffffffffffff1681565b61021961074a565b61023f7f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a81565b60025460ff166101a5565b6102196102db366004611638565b61077f565b6005546101e19073ffffffffffffffffffffffffffffffffffffffff1681565b6102196109b7565b61023f7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b6101a561033d36600461160c565b600091825260016020908152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b610219610383366004611692565b6109e9565b610219610396366004611692565b610ab7565b61023f600081565b6102196103b1366004611584565b610b88565b6102196103c436600461160c565b610d6f565b6101a56103d7366004611692565b60036020526000908152604090205460ff1681565b6102196103fa3660046116ad565b610d95565b61023f7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b0000000000000000000000000000000000000000000000000000000014806104b957507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b6104c7610ec1565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e46104f181610f04565b6104f9610f0e565b73ffffffffffffffffffffffffffffffffffffffff861660009081526003602052604090205460ff16610558576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61059973ffffffffffffffffffffffffffffffffffffffff87167f000000000000000000000000000000000000000000000000000000000000000086610f4d565b6040517f5131ab5900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690635131ab59906106139089908990899089908990600401611733565b600060405180830381600087803b15801561062d57600080fd5b505af1158015610641573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167f85b5be9cf454e05e0bddf49315178102227c312078eefa3c00294fb4d912ae4e8686866040516106a693929190611790565b60405180910390a3506106b96001600055565b5050505050565b600082815260016020819052604090912001546106dc81610f04565b6106e68383610fda565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8116331461073b576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6107458282611087565b505050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61077481610f04565b61077c611128565b50565b60045473ffffffffffffffffffffffffffffffffffffffff166340c10f19306107a98660056117b3565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815273ffffffffffffffffffffffffffffffffffffffff90921660048301526024820152604401600060405180830381600087803b15801561081457600080fd5b505af1158015610828573d6000803e3d6000fd5b5050600480546007546040517fa9059cbb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff918216938101939093526005602484015216925063a9059cbb91506044016020604051808303816000875af11580156108a9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108cd91906117ed565b506004546108f49073ffffffffffffffffffffffffffffffffffffffff16858585856104bf565b600480546040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116938201939093529116906370a0823190602401602060405180830381865afa158015610986573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109aa919061180f565b156106e6576106e6611828565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a6109e181610f04565b61077c611187565b7f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a610a1381610f04565b73ffffffffffffffffffffffffffffffffffffffff8216610a60576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216600081815260036020526040808220805460ff19169055517f51085ddf9ebdded84b76e829eb58c4078e4b5bdf97d9a94723f336039da467919190a25050565b7f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a610ae181610f04565b73ffffffffffffffffffffffffffffffffffffffff8216610b2e576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216600081815260036020526040808220805460ff19166001179055517faab7954e9d246b167ef88aeddad35209ca2489d95a8aeb59e288d9b19fae5a549190a25050565b610b90610ec1565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e4610bba81610f04565b610bc2610f0e565b73ffffffffffffffffffffffffffffffffffffffff861660009081526003602052604090205460ff16610c21576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610c6273ffffffffffffffffffffffffffffffffffffffff87167f000000000000000000000000000000000000000000000000000000000000000086610f4d565b6040517fb8969bd400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063b8969bd490610cdc9089908990899089908990600401611733565b600060405180830381600087803b158015610cf657600080fd5b505af1158015610d0a573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fb9d4efa96044e5f5e03e696fa9ae2ff66911cc27e8a637c3627c75bc5b2241c88686866040516106a693929190611790565b60008281526001602081905260409091200154610d8b81610f04565b6106e68383611087565b610d9d610ec1565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e4610dc781610f04565b610dcf610f0e565b73ffffffffffffffffffffffffffffffffffffffff841660009081526003602052604090205460ff16610e2e576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610e4f73ffffffffffffffffffffffffffffffffffffffff85168484610f4d565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f9b1bfa7fa9ee420a16e124f794c35ac9f90472acc99140eb2f6447c714cad8eb84604051610eae91815260200190565b60405180910390a3506107456001600055565b600260005403610efd576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b61077c81336111c4565b60025460ff1615610f4b576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6040805173ffffffffffffffffffffffffffffffffffffffff8416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb00000000000000000000000000000000000000000000000000000000179052610745908490611255565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff1661107f57600083815260016020818152604080842073ffffffffffffffffffffffffffffffffffffffff87168086529252808420805460ff19169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45060016104b9565b5060006104b9565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff161561107f57600083815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff86168085529252808320805460ff1916905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45060016104b9565b6111306112eb565b6002805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b61118f610f0e565b6002805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25861115d3390565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16611251576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82166004820152602481018390526044015b60405180910390fd5b5050565b600061127773ffffffffffffffffffffffffffffffffffffffff841683611327565b9050805160001415801561129c57508080602001905181019061129a91906117ed565b155b15610745576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84166004820152602401611248565b60025460ff16610f4b576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60606113358383600061133c565b9392505050565b60608147101561137a576040517fcd786059000000000000000000000000000000000000000000000000000000008152306004820152602401611248565b6000808573ffffffffffffffffffffffffffffffffffffffff1684866040516113a39190611857565b60006040518083038185875af1925050503d80600081146113e0576040519150601f19603f3d011682016040523d82523d6000602084013e6113e5565b606091505b50915091506113f58683836113ff565b9695505050505050565b6060826114145761140f8261148e565b611335565b8151158015611438575073ffffffffffffffffffffffffffffffffffffffff84163b155b15611487576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85166004820152602401611248565b5080611335565b80511561149e5780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000602082840312156114e257600080fd5b81357fffffffff000000000000000000000000000000000000000000000000000000008116811461133557600080fd5b803573ffffffffffffffffffffffffffffffffffffffff8116811461153657600080fd5b919050565b60008083601f84011261154d57600080fd5b50813567ffffffffffffffff81111561156557600080fd5b60208301915083602082850101111561157d57600080fd5b9250929050565b60008060008060006080868803121561159c57600080fd5b6115a586611512565b94506115b360208701611512565b935060408601359250606086013567ffffffffffffffff8111156115d657600080fd5b6115e28882890161153b565b969995985093965092949392505050565b60006020828403121561160557600080fd5b5035919050565b6000806040838503121561161f57600080fd5b8235915061162f60208401611512565b90509250929050565b6000806000806060858703121561164e57600080fd5b61165785611512565b935060208501359250604085013567ffffffffffffffff81111561167a57600080fd5b6116868782880161153b565b95989497509550505050565b6000602082840312156116a457600080fd5b61133582611512565b6000806000606084860312156116c257600080fd5b6116cb84611512565b92506116d960208501611512565b929592945050506040919091013590565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff8616815273ffffffffffffffffffffffffffffffffffffffff851660208201528360408201526080606082015260006117856080830184866116ea565b979650505050505050565b8381526040602082015260006117aa6040830184866116ea565b95945050505050565b808201808211156104b9577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000602082840312156117ff57600080fd5b8151801515811461133557600080fd5b60006020828403121561182157600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b6000825160005b81811015611878576020818601810151858301520161185e565b50600092019182525091905056fea2646970667358221220db3947d25671723c1d8ec4d609e6a44a0961b73d167c53dd39e75c57c61b15cf64736f6c634300081a0033608060405234801561001057600080fd5b50604051610c9f380380610c9f83398101604081905261002f9161010d565b8181600361003d83826101ff565b50600461004a82826101ff565b50505050506102bd565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261007b57600080fd5b81516001600160401b0381111561009457610094610054565b604051601f8201601f19908116603f011681016001600160401b03811182821017156100c2576100c2610054565b6040528181528382016020018510156100da57600080fd5b60005b828110156100f9576020818601810151838301820152016100dd565b506000918101602001919091529392505050565b6000806040838503121561012057600080fd5b82516001600160401b0381111561013657600080fd5b6101428582860161006a565b602085015190935090506001600160401b0381111561016057600080fd5b61016c8582860161006a565b9150509250929050565b600181811c9082168061018a57607f821691505b6020821081036101aa57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156101fa57806000526020600020601f840160051c810160208510156101d75750805b601f840160051c820191505b818110156101f757600081556001016101e3565b50505b505050565b81516001600160401b0381111561021857610218610054565b61022c816102268454610176565b846101b0565b6020601f82116001811461026057600083156102485750848201515b600019600385901b1c1916600184901b1784556101f7565b600084815260208120601f198516915b828110156102905787850151825560209485019460019092019101610270565b50848210156102ae5786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b6109d3806102cc6000396000f3fe608060405234801561001057600080fd5b50600436106100be5760003560e01c806340c10f191161007657806395d89b411161005b57806395d89b4114610183578063a9059cbb1461018b578063dd62ed3e1461019e57600080fd5b806340c10f191461013857806370a082311461014d57600080fd5b806318160ddd116100a757806318160ddd1461010457806323b872dd14610116578063313ce5671461012957600080fd5b806306fdde03146100c3578063095ea7b3146100e1575b600080fd5b6100cb6101e4565b6040516100d891906107bf565b60405180910390f35b6100f46100ef366004610854565b610276565b60405190151581526020016100d8565b6002545b6040519081526020016100d8565b6100f461012436600461087e565b610290565b604051601281526020016100d8565b61014b610146366004610854565b6102b4565b005b61010861015b3660046108bb565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6100cb6102c2565b6100f4610199366004610854565b6102d1565b6101086101ac3660046108dd565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6060600380546101f390610910565b80601f016020809104026020016040519081016040528092919081815260200182805461021f90610910565b801561026c5780601f106102415761010080835404028352916020019161026c565b820191906000526020600020905b81548152906001019060200180831161024f57829003601f168201915b5050505050905090565b6000336102848185856102df565b60019150505b92915050565b60003361029e8582856102f1565b6102a98585856103c5565b506001949350505050565b6102be8282610470565b5050565b6060600480546101f390610910565b6000336102848185856103c5565b6102ec83838360016104cc565b505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146103bf57818110156103b0576040517ffb8f41b200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416600482015260248101829052604481018390526064015b60405180910390fd5b6103bf848484840360006104cc565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8316610415576040517f96c6fd1e000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff8216610465576040517fec442f05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b6102ec838383610614565b73ffffffffffffffffffffffffffffffffffffffff82166104c0576040517fec442f05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b6102be60008383610614565b73ffffffffffffffffffffffffffffffffffffffff841661051c576040517fe602df05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff831661056c576040517f94280d62000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260016020908152604080832093871683529290522082905580156103bf578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161060691815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff831661064c5780600260008282546106419190610963565b909155506106fe9050565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260208190526040902054818110156106d2576040517fe450d38c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8516600482015260248101829052604481018390526064016103a7565b73ffffffffffffffffffffffffffffffffffffffff841660009081526020819052604090209082900390555b73ffffffffffffffffffffffffffffffffffffffff821661072757600280548290039055610753565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090208054820190555b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516107b291815260200190565b60405180910390a3505050565b602081526000825180602084015260005b818110156107ed57602081860181015160408684010152016107d0565b5060006040828501015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011684010191505092915050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461084f57600080fd5b919050565b6000806040838503121561086757600080fd5b6108708361082b565b946020939093013593505050565b60008060006060848603121561089357600080fd5b61089c8461082b565b92506108aa6020850161082b565b929592945050506040919091013590565b6000602082840312156108cd57600080fd5b6108d68261082b565b9392505050565b600080604083850312156108f057600080fd5b6108f98361082b565b91506109076020840161082b565b90509250929050565b600181811c9082168061092457607f821691505b60208210810361095d577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b8082018082111561028a577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea26469706673582212207e804ca539d49155d2b6bc19268ce22f9f857027c75247d69fb0d56a089c93d464736f6c634300081a00330000000000000000000000007109709ecfa91a80626ff3989d68f67f5b1dd12d8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f7420", } // ERC20CustodyEchidnaTestABI is the input ABI used to generate the binding from. diff --git a/v2/pkg/gatewayevm.sol/gatewayevm.go b/v2/pkg/gatewayevm.sol/gatewayevm.go index da456a3c..a306afdb 100644 --- a/v2/pkg/gatewayevm.sol/gatewayevm.go +++ b/v2/pkg/gatewayevm.sol/gatewayevm.go @@ -32,7 +32,7 @@ var ( // GatewayEVMMetaData contains all meta data concerning the GatewayEVM contract. var GatewayEVMMetaData = &bind.MetaData{ ABI: "[{\"type\":\"constructor\",\"inputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"ASSET_HANDLER_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"DEFAULT_ADMIN_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"PAUSER_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"TSS_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"UPGRADE_INTERFACE_VERSION\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"call\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"custody\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"deposit\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"deposit\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"depositAndCall\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"depositAndCall\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"execute\",\"inputs\":[{\"name\":\"destination\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"executeRevert\",\"inputs\":[{\"name\":\"destination\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"executeWithERC20\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"getRoleAdmin\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"grantRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"hasRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"initialize\",\"inputs\":[{\"name\":\"tssAddress_\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"zetaToken_\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"admin_\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"pause\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"paused\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"proxiableUUID\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"renounceRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"callerConfirmation\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"revertWithERC20\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"revokeRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setConnector\",\"inputs\":[{\"name\":\"zetaConnector_\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setCustody\",\"inputs\":[{\"name\":\"custody_\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"supportsInterface\",\"inputs\":[{\"name\":\"interfaceId\",\"type\":\"bytes4\",\"internalType\":\"bytes4\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"tssAddress\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"unpause\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"upgradeToAndCall\",\"inputs\":[{\"name\":\"newImplementation\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"zetaConnector\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"zetaToken\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"event\",\"name\":\"Call\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"receiver\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Deposit\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"receiver\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"asset\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Executed\",\"inputs\":[{\"name\":\"destination\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ExecutedWithERC20\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Initialized\",\"inputs\":[{\"name\":\"version\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Paused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Reverted\",\"inputs\":[{\"name\":\"destination\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RevertedWithERC20\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleAdminChanged\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"previousAdminRole\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"newAdminRole\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleGranted\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleRevoked\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Unpaused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Upgraded\",\"inputs\":[{\"name\":\"implementation\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"AccessControlBadConfirmation\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"AccessControlUnauthorizedAccount\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"neededRole\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"type\":\"error\",\"name\":\"AddressEmptyCode\",\"inputs\":[{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"AddressInsufficientBalance\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"ApprovalFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ConnectorInitialized\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"CustodyInitialized\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"DepositFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ERC1967InvalidImplementation\",\"inputs\":[{\"name\":\"implementation\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"ERC1967NonPayable\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"EnforcedPause\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ExecutionFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ExpectedPause\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"FailedInnerCall\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientERC20Amount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientETHAmount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidInitialization\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NotInitializing\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NotWhitelistedInCustody\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ReentrancyGuardReentrantCall\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"SafeERC20FailedOperation\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"UUPSUnauthorizedCallContext\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"UUPSUnsupportedProxiableUUID\",\"inputs\":[{\"name\":\"slot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"type\":\"error\",\"name\":\"ZeroAddress\",\"inputs\":[]}]", - Bin: "0x60a06040523060805234801561001457600080fd5b5061001d610022565b6100d4565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100725760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146100d15780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b60805161327e6100fd60003960008181611f0601528181611f2f01526123bb015261327e6000f3fe6080604052600436106101e35760003560e01c80635c975abb11610102578063ae7a3a6f11610095578063dda79b7511610064578063dda79b751461062e578063e63ab1e91461064e578063f340fa0114610682578063f45346dc1461069557600080fd5b8063ae7a3a6f146105ae578063b8969bd4146105ce578063c0c53b8b146105ee578063d547741f1461060e57600080fd5b806391d14854116100d157806391d14854146104b7578063a217fddf1461051c578063a783c78914610531578063ad3cb1cc1461056557600080fd5b80635c975abb146104175780635d62c8601461044e5780638456cb59146104825780638c6f037f1461049757600080fd5b806335c018db1161017a5780635131ab59116101495780635131ab59146103a257806352d1902d146103c257806357bec62f146103d75780635b112591146103f757600080fd5b806335c018db1461034757806336568abe1461035a5780633f4ba83a1461037a5780634f1ef2861461038f57600080fd5b806321e093b1116101b657806321e093b11461027f578063248a9ca3146102b757806329c59b5d146103145780632f2ff15d1461032757600080fd5b806301ffc9a7146101e857806310188aef1461021d5780631b8b921d1461023f5780631cff79cd1461025f575b600080fd5b3480156101f457600080fd5b50610208610203366004612cf1565b6106b5565b60405190151581526020015b60405180910390f35b34801561022957600080fd5b5061023d610238366004612d4f565b61074e565b005b34801561024b57600080fd5b5061023d61025a366004612db3565b610842565b61027261026d366004612db3565b6108cd565b6040516102149190612e74565b34801561028b57600080fd5b5060035461029f906001600160a01b031681565b6040516001600160a01b039091168152602001610214565b3480156102c357600080fd5b506103066102d2366004612e87565b60009081527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052604090206001015490565b604051908152602001610214565b61023d610322366004612db3565b6109d0565b34801561033357600080fd5b5061023d610342366004612ea0565b610b63565b61023d610355366004612db3565b610bad565b34801561036657600080fd5b5061023d610375366004612ea0565b610d9c565b34801561038657600080fd5b5061023d610de8565b61023d61039d366004612efb565b610e1d565b3480156103ae57600080fd5b5061023d6103bd366004613002565b610e3c565b3480156103ce57600080fd5b50610306611155565b3480156103e357600080fd5b5060025461029f906001600160a01b031681565b34801561040357600080fd5b5060015461029f906001600160a01b031681565b34801561042357600080fd5b507fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff16610208565b34801561045a57600080fd5b506103067f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b981565b34801561048e57600080fd5b5061023d611184565b3480156104a357600080fd5b5061023d6104b2366004613071565b6111b6565b3480156104c357600080fd5b506102086104d2366004612ea0565b60009182527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408084206001600160a01b0393909316845291905290205460ff1690565b34801561052857600080fd5b50610306600081565b34801561053d57600080fd5b506103067f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb81565b34801561057157600080fd5b506102726040518060400160405280600581526020017f352e302e3000000000000000000000000000000000000000000000000000000081525081565b3480156105ba57600080fd5b5061023d6105c9366004612d4f565b6112cc565b3480156105da57600080fd5b5061023d6105e9366004613002565b6113c0565b3480156105fa57600080fd5b5061023d6106093660046130c3565b611579565b34801561061a57600080fd5b5061023d610629366004612ea0565b61182e565b34801561063a57600080fd5b5060005461029f906001600160a01b031681565b34801561065a57600080fd5b506103067f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b61023d610690366004612d4f565b611872565b3480156106a157600080fd5b5061023d6106b0366004613106565b611a07565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061074857507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b600061075981611b02565b6001600160a01b038216610799576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002546001600160a01b0316156107dc576040517f0c8dc01600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6108067f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b983611b0c565b5050600280547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b61084a611bf9565b610852611c57565b826001600160a01b0316336001600160a01b03167f2a21062ee9199c2e205622999eeb7c3da73153674f36a0acd3f74fa6af67bde38484604051610897929190613182565b60405180910390a36108c860017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b505050565b60607f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb6108f981611b02565b610901611bf9565b610909611c57565b6001600160a01b038516610949576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610956868686611cfe565b9050856001600160a01b03167fcaf938de11c367272220bfd1d2baa99ca46665e7bc4d85f00adb51b90fe1fa9f3487876040516109959392919061319e565b60405180910390a291506109c860017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b509392505050565b6109d8611bf9565b6109e0611c57565b34600003610a1a576040517f7671265e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038316610a5a576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546040516000916001600160a01b03169034908381818185875af1925050503d8060008114610aa7576040519150601f19603f3d011682016040523d82523d6000602084013e610aac565b606091505b5050905080610ae7576040517f79cacff100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b836001600160a01b0316336001600160a01b03167f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a43460008787604051610b3194939291906131b8565b60405180910390a3506108c860017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020526040902060010154610b9d81611b02565b610ba78383611b0c565b50505050565b7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb610bd781611b02565b610bdf611bf9565b610be7611c57565b6001600160a01b038416610c27576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000846001600160a01b03163460405160006040518083038185875af1925050503d8060008114610c74576040519150601f19603f3d011682016040523d82523d6000602084013e610c79565b606091505b5050905080610cb4576040517facfdb44400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f8fcaa0b50000000000000000000000000000000000000000000000000000000081526001600160a01b03861690638fcaa0b590610cfb9087908790600401613182565b600060405180830381600087803b158015610d1557600080fd5b505af1158015610d29573d6000803e3d6000fd5b50505050846001600160a01b03167fd5d7616b1678354a0dea9d7e57e6a090bff5babe9f8d6381fdbad16e89ba311c348686604051610d6a9392919061319e565b60405180910390a250610ba760017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b6001600160a01b0381163314610dde576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6108c88282611da7565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610e1281611b02565b610e1a611e6b565b50565b610e25611efb565b610e2e82611fcb565b610e388282611fd6565b5050565b7f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b9610e6681611b02565b610e6e611bf9565b610e76611c57565b83600003610eb0576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038516610ef0576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610efa86866120fa565b610f30576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b0386811660048301526024820186905287169063095ea7b3906044016020604051808303816000875af1158015610f98573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fbc91906131e1565b610ff2576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610ffd858484611cfe565b5061100886866120fa565b61103e576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201526000906001600160a01b038816906370a0823190602401602060405180830381865afa15801561109e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110c29190613203565b905080156110d4576110d4878261218a565b856001600160a01b0316876001600160a01b03167f29c40793bffd84cb810179f15d1ceec72bc7f0785514c668ba36645cf99b738287878760405161111b9392919061319e565b60405180910390a35061114d60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b505050505050565b600061115f6123b0565b507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc90565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a6111ae81611b02565b610e1a612412565b6111be611bf9565b6111c6611c57565b83600003611200576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038516611240576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61124b33848661248b565b846001600160a01b0316336001600160a01b03167f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a48686868660405161129494939291906131b8565b60405180910390a36112c560017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b5050505050565b60006112d781611b02565b6001600160a01b038216611317576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000546001600160a01b03161561135a576040517fb337f37800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6113847f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b983611b0c565b5050600080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b7f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b96113ea81611b02565b6113f2611bf9565b6113fa611c57565b83600003611434576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038516611474576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6114886001600160a01b03871686866126d1565b6040517f8fcaa0b50000000000000000000000000000000000000000000000000000000081526001600160a01b03861690638fcaa0b5906114cf9086908690600401613182565b600060405180830381600087803b1580156114e957600080fd5b505af11580156114fd573d6000803e3d6000fd5b50505050846001600160a01b0316866001600160a01b03167f723fc7be2448075379e4fdf1e6bf5fead954d2668d2da05dcb44ccfec4beeda78686866040516115489392919061319e565b60405180910390a361114d60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156115c45750825b905060008267ffffffffffffffff1660011480156115e15750303b155b9050811580156115ef575080155b15611626576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84547fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000016600117855583156116875784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff16680100000000000000001785555b6001600160a01b03881615806116a457506001600160a01b038716155b156116db576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6116e3612745565b6116eb61274d565b6116f3612745565b6116fb61275d565b611706600087611b0c565b506117317f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a87611b0c565b50600180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b038a1617905561178f7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb89611b0c565b50600380547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03891617905583156118245784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b5050505050505050565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052604090206001015461186881611b02565b610ba78383611da7565b61187a611bf9565b611882611c57565b346000036118bc576040517f7671265e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b0381166118fc576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546040516000916001600160a01b03169034908381818185875af1925050503d8060008114611949576040519150601f19603f3d011682016040523d82523d6000602084013e61194e565b606091505b5050905080611989576040517f79cacff100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60408051348152600060208201819052606082840181905282015290516001600160a01b0384169133917f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a49181900360800190a350610e1a60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b611a0f611bf9565b611a17611c57565b81600003611a51576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038316611a91576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611a9c33828461248b565b826001600160a01b0316336001600160a01b03167f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a484846040516108979291909182526001600160a01b0316602082015260606040820181905260009082015260800190565b610e1a813361276d565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff16611bef576000848152602082815260408083206001600160a01b0387168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055611ba53390565b6001600160a01b0316836001600160a01b0316857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a46001915050610748565b6000915050610748565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff1615611c55576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0080547ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01611cd2576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60029055565b60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b6060600080856001600160a01b0316348686604051611d1e92919061321c565b60006040518083038185875af1925050503d8060008114611d5b576040519150601f19603f3d011682016040523d82523d6000602084013e611d60565b606091505b509150915081611d9c576040517facfdb44400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b9150505b9392505050565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff1615611bef576000848152602082815260408083206001600160a01b038716808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339287917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a46001915050610748565b611e736127fa565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001681557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a150565b306001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161480611f9457507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316611f887f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b6001600160a01b031614155b15611c55576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610e3881611b02565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa92505050801561204e575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820190925261204b91810190613203565b60015b612094576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b03831660048201526024015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc81146120f0576040517faa1d49a40000000000000000000000000000000000000000000000000000000081526004810182905260240161208b565b6108c88383612855565b6040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b038281166004830152600060248301819052919084169063095ea7b3906044016020604051808303816000875af1158015612166573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611da091906131e1565b6003546001600160a01b03908116908316036122d9576002546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152602481018390529083169063095ea7b3906044016020604051808303816000875af115801561220c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061223091906131e1565b612266576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002546040517f743e0c9b000000000000000000000000000000000000000000000000000000008152600481018390526001600160a01b039091169063743e0c9b90602401600060405180830381600087803b1580156122c557600080fd5b505af115801561114d573d6000803e3d6000fd5b6000546040517fd936547e0000000000000000000000000000000000000000000000000000000081526001600160a01b0384811660048301529091169063d936547e90602401602060405180830381865afa15801561233c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061236091906131e1565b612396576040517fac2175f100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600054610e38906001600160a01b038481169116836126d1565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614611c55576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61241a611bf9565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011781557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25833611edd565b6003546001600160a01b03908116908316036125f8576124b66001600160a01b0383168430846128ab565b6002546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152602481018390529083169063095ea7b3906044016020604051808303816000875af1158015612522573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061254691906131e1565b61257c576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002546040517f743e0c9b000000000000000000000000000000000000000000000000000000008152600481018390526001600160a01b039091169063743e0c9b90602401600060405180830381600087803b1580156125db57600080fd5b505af11580156125ef573d6000803e3d6000fd5b50505050505050565b6000546040517fd936547e0000000000000000000000000000000000000000000000000000000081526001600160a01b0384811660048301529091169063d936547e90602401602060405180830381865afa15801561265b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061267f91906131e1565b6126b5576040517fac2175f100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000546108c8906001600160a01b0384811691869116846128ab565b6040516001600160a01b038381166024830152604482018390526108c891859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506128e4565b611c55612960565b612755612960565b611c556129c7565b612765612960565b611c556129cf565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408083206001600160a01b038516845290915290205460ff16610e38576040517fe2517d3f0000000000000000000000000000000000000000000000000000000081526001600160a01b03821660048201526024810183905260440161208b565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff16611c55576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61285e82612a20565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a28051156128a3576108c88282612ac8565b610e38612b3e565b6040516001600160a01b038481166024830152838116604483015260648201839052610ba79186918216906323b872dd906084016126fe565b60006128f96001600160a01b03841683612b76565b9050805160001415801561291e57508080602001905181019061291c91906131e1565b155b156108c8576040517f5274afe70000000000000000000000000000000000000000000000000000000081526001600160a01b038416600482015260240161208b565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff16611c55576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611cd8612960565b6129d7612960565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055565b806001600160a01b03163b600003612a6f576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b038216600482015260240161208b565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6060600080846001600160a01b031684604051612ae5919061322c565b600060405180830381855af49150503d8060008114612b20576040519150601f19603f3d011682016040523d82523d6000602084013e612b25565b606091505b5091509150612b35858383612b84565b95945050505050565b3415611c55576040517fb398979f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6060611da083836000612bf9565b606082612b9957612b9482612caf565b611da0565b8151158015612bb057506001600160a01b0384163b155b15612bf2576040517f9996b3150000000000000000000000000000000000000000000000000000000081526001600160a01b038516600482015260240161208b565b5080611da0565b606081471015612c37576040517fcd78605900000000000000000000000000000000000000000000000000000000815230600482015260240161208b565b600080856001600160a01b03168486604051612c53919061322c565b60006040518083038185875af1925050503d8060008114612c90576040519150601f19603f3d011682016040523d82523d6000602084013e612c95565b606091505b5091509150612ca5868383612b84565b9695505050505050565b805115612cbf5780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060208284031215612d0357600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114611da057600080fd5b80356001600160a01b0381168114612d4a57600080fd5b919050565b600060208284031215612d6157600080fd5b611da082612d33565b60008083601f840112612d7c57600080fd5b50813567ffffffffffffffff811115612d9457600080fd5b602083019150836020828501011115612dac57600080fd5b9250929050565b600080600060408486031215612dc857600080fd5b612dd184612d33565b9250602084013567ffffffffffffffff811115612ded57600080fd5b612df986828701612d6a565b9497909650939450505050565b60005b83811015612e21578181015183820152602001612e09565b50506000910152565b60008151808452612e42816020860160208601612e06565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000611da06020830184612e2a565b600060208284031215612e9957600080fd5b5035919050565b60008060408385031215612eb357600080fd5b82359150612ec360208401612d33565b90509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60008060408385031215612f0e57600080fd5b612f1783612d33565b9150602083013567ffffffffffffffff811115612f3357600080fd5b8301601f81018513612f4457600080fd5b803567ffffffffffffffff811115612f5e57612f5e612ecc565b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8501160116810181811067ffffffffffffffff82111715612fca57612fca612ecc565b604052818152828201602001871015612fe257600080fd5b816020840160208301376000602083830101528093505050509250929050565b60008060008060006080868803121561301a57600080fd5b61302386612d33565b945061303160208701612d33565b935060408601359250606086013567ffffffffffffffff81111561305457600080fd5b61306088828901612d6a565b969995985093965092949392505050565b60008060008060006080868803121561308957600080fd5b61309286612d33565b9450602086013593506130a760408701612d33565b9250606086013567ffffffffffffffff81111561305457600080fd5b6000806000606084860312156130d857600080fd5b6130e184612d33565b92506130ef60208501612d33565b91506130fd60408501612d33565b90509250925092565b60008060006060848603121561311b57600080fd5b61312484612d33565b9250602084013591506130fd60408501612d33565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b602081526000613196602083018486613139565b949350505050565b838152604060208201526000612b35604083018486613139565b8481526001600160a01b0384166020820152606060408201526000612ca5606083018486613139565b6000602082840312156131f357600080fd5b81518015158114611da057600080fd5b60006020828403121561321557600080fd5b5051919050565b8183823760009101908152919050565b6000825161323e818460208701612e06565b919091019291505056fea2646970667358221220e0ac1d5f7d91ba60c2192455b07ceb7579f97f17519b91ea503f0986c351802164736f6c634300081a0033", + Bin: "0x60a06040523060805234801561001457600080fd5b5061001d610022565b6100d4565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100725760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146100d15780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b6080516132be6100fd60003960008181611f4601528181611f6f01526123fb01526132be6000f3fe6080604052600436106101e35760003560e01c80635c975abb11610102578063ae7a3a6f11610095578063dda79b7511610064578063dda79b751461062e578063e63ab1e91461064e578063f340fa0114610682578063f45346dc1461069557600080fd5b8063ae7a3a6f146105ae578063b8969bd4146105ce578063c0c53b8b146105ee578063d547741f1461060e57600080fd5b806391d14854116100d157806391d14854146104b7578063a217fddf1461051c578063a783c78914610531578063ad3cb1cc1461056557600080fd5b80635c975abb146104175780635d62c8601461044e5780638456cb59146104825780638c6f037f1461049757600080fd5b806335c018db1161017a5780635131ab59116101495780635131ab59146103a257806352d1902d146103c257806357bec62f146103d75780635b112591146103f757600080fd5b806335c018db1461034757806336568abe1461035a5780633f4ba83a1461037a5780634f1ef2861461038f57600080fd5b806321e093b1116101b657806321e093b11461027f578063248a9ca3146102b757806329c59b5d146103145780632f2ff15d1461032757600080fd5b806301ffc9a7146101e857806310188aef1461021d5780631b8b921d1461023f5780631cff79cd1461025f575b600080fd5b3480156101f457600080fd5b50610208610203366004612d31565b6106b5565b60405190151581526020015b60405180910390f35b34801561022957600080fd5b5061023d610238366004612d8f565b61074e565b005b34801561024b57600080fd5b5061023d61025a366004612df3565b610842565b61027261026d366004612df3565b61090d565b6040516102149190612eb4565b34801561028b57600080fd5b5060035461029f906001600160a01b031681565b6040516001600160a01b039091168152602001610214565b3480156102c357600080fd5b506103066102d2366004612ec7565b60009081527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052604090206001015490565b604051908152602001610214565b61023d610322366004612df3565b610a10565b34801561033357600080fd5b5061023d610342366004612ee0565b610ba3565b61023d610355366004612df3565b610bed565b34801561036657600080fd5b5061023d610375366004612ee0565b610ddc565b34801561038657600080fd5b5061023d610e28565b61023d61039d366004612f3b565b610e5d565b3480156103ae57600080fd5b5061023d6103bd366004613042565b610e7c565b3480156103ce57600080fd5b50610306611195565b3480156103e357600080fd5b5060025461029f906001600160a01b031681565b34801561040357600080fd5b5060015461029f906001600160a01b031681565b34801561042357600080fd5b507fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff16610208565b34801561045a57600080fd5b506103067f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b981565b34801561048e57600080fd5b5061023d6111c4565b3480156104a357600080fd5b5061023d6104b23660046130b1565b6111f6565b3480156104c357600080fd5b506102086104d2366004612ee0565b60009182527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408084206001600160a01b0393909316845291905290205460ff1690565b34801561052857600080fd5b50610306600081565b34801561053d57600080fd5b506103067f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb81565b34801561057157600080fd5b506102726040518060400160405280600581526020017f352e302e3000000000000000000000000000000000000000000000000000000081525081565b3480156105ba57600080fd5b5061023d6105c9366004612d8f565b61130c565b3480156105da57600080fd5b5061023d6105e9366004613042565b611400565b3480156105fa57600080fd5b5061023d610609366004613103565b6115b9565b34801561061a57600080fd5b5061023d610629366004612ee0565b61186e565b34801561063a57600080fd5b5060005461029f906001600160a01b031681565b34801561065a57600080fd5b506103067f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b61023d610690366004612d8f565b6118b2565b3480156106a157600080fd5b5061023d6106b0366004613146565b611a47565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061074857507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b600061075981611b42565b6001600160a01b038216610799576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002546001600160a01b0316156107dc576040517f0c8dc01600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6108067f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b983611b4c565b5050600280547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b61084a611c39565b610852611c97565b6001600160a01b038316610892576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b826001600160a01b0316336001600160a01b03167f2a21062ee9199c2e205622999eeb7c3da73153674f36a0acd3f74fa6af67bde384846040516108d79291906131c2565b60405180910390a361090860017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b505050565b60607f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb61093981611b42565b610941611c39565b610949611c97565b6001600160a01b038516610989576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610996868686611d3e565b9050856001600160a01b03167fcaf938de11c367272220bfd1d2baa99ca46665e7bc4d85f00adb51b90fe1fa9f3487876040516109d5939291906131de565b60405180910390a29150610a0860017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b509392505050565b610a18611c39565b610a20611c97565b34600003610a5a576040517f7671265e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038316610a9a576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546040516000916001600160a01b03169034908381818185875af1925050503d8060008114610ae7576040519150601f19603f3d011682016040523d82523d6000602084013e610aec565b606091505b5050905080610b27576040517f79cacff100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b836001600160a01b0316336001600160a01b03167f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a43460008787604051610b7194939291906131f8565b60405180910390a35061090860017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020526040902060010154610bdd81611b42565b610be78383611b4c565b50505050565b7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb610c1781611b42565b610c1f611c39565b610c27611c97565b6001600160a01b038416610c67576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000846001600160a01b03163460405160006040518083038185875af1925050503d8060008114610cb4576040519150601f19603f3d011682016040523d82523d6000602084013e610cb9565b606091505b5050905080610cf4576040517facfdb44400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f8fcaa0b50000000000000000000000000000000000000000000000000000000081526001600160a01b03861690638fcaa0b590610d3b90879087906004016131c2565b600060405180830381600087803b158015610d5557600080fd5b505af1158015610d69573d6000803e3d6000fd5b50505050846001600160a01b03167fd5d7616b1678354a0dea9d7e57e6a090bff5babe9f8d6381fdbad16e89ba311c348686604051610daa939291906131de565b60405180910390a250610be760017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b6001600160a01b0381163314610e1e576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6109088282611de7565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610e5281611b42565b610e5a611eab565b50565b610e65611f3b565b610e6e8261200b565b610e788282612016565b5050565b7f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b9610ea681611b42565b610eae611c39565b610eb6611c97565b83600003610ef0576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038516610f30576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610f3a868661213a565b610f70576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b0386811660048301526024820186905287169063095ea7b3906044016020604051808303816000875af1158015610fd8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ffc9190613221565b611032576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61103d858484611d3e565b50611048868661213a565b61107e576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201526000906001600160a01b038816906370a0823190602401602060405180830381865afa1580156110de573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111029190613243565b905080156111145761111487826121ca565b856001600160a01b0316876001600160a01b03167f29c40793bffd84cb810179f15d1ceec72bc7f0785514c668ba36645cf99b738287878760405161115b939291906131de565b60405180910390a35061118d60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b505050505050565b600061119f6123f0565b507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc90565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a6111ee81611b42565b610e5a612452565b6111fe611c39565b611206611c97565b83600003611240576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038516611280576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61128b3384866124cb565b846001600160a01b0316336001600160a01b03167f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a4868686866040516112d494939291906131f8565b60405180910390a361130560017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b5050505050565b600061131781611b42565b6001600160a01b038216611357576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000546001600160a01b03161561139a576040517fb337f37800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6113c47f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b983611b4c565b5050600080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b7f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b961142a81611b42565b611432611c39565b61143a611c97565b83600003611474576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b0385166114b4576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6114c86001600160a01b0387168686612711565b6040517f8fcaa0b50000000000000000000000000000000000000000000000000000000081526001600160a01b03861690638fcaa0b59061150f90869086906004016131c2565b600060405180830381600087803b15801561152957600080fd5b505af115801561153d573d6000803e3d6000fd5b50505050846001600160a01b0316866001600160a01b03167f723fc7be2448075379e4fdf1e6bf5fead954d2668d2da05dcb44ccfec4beeda7868686604051611588939291906131de565b60405180910390a361118d60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156116045750825b905060008267ffffffffffffffff1660011480156116215750303b155b90508115801561162f575080155b15611666576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84547fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000016600117855583156116c75784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff16680100000000000000001785555b6001600160a01b03881615806116e457506001600160a01b038716155b1561171b576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611723612785565b61172b61278d565b611733612785565b61173b61279d565b611746600087611b4c565b506117717f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a87611b4c565b50600180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b038a161790556117cf7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb89611b4c565b50600380547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03891617905583156118645784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b5050505050505050565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b62680060205260409020600101546118a881611b42565b610be78383611de7565b6118ba611c39565b6118c2611c97565b346000036118fc576040517f7671265e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03811661193c576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546040516000916001600160a01b03169034908381818185875af1925050503d8060008114611989576040519150601f19603f3d011682016040523d82523d6000602084013e61198e565b606091505b50509050806119c9576040517f79cacff100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60408051348152600060208201819052606082840181905282015290516001600160a01b0384169133917f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a49181900360800190a350610e5a60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b611a4f611c39565b611a57611c97565b81600003611a91576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038316611ad1576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611adc3382846124cb565b826001600160a01b0316336001600160a01b03167f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a484846040516108d79291909182526001600160a01b0316602082015260606040820181905260009082015260800190565b610e5a81336127ad565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff16611c2f576000848152602082815260408083206001600160a01b0387168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055611be53390565b6001600160a01b0316836001600160a01b0316857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a46001915050610748565b6000915050610748565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff1615611c95576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0080547ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01611d12576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60029055565b60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b6060600080856001600160a01b0316348686604051611d5e92919061325c565b60006040518083038185875af1925050503d8060008114611d9b576040519150601f19603f3d011682016040523d82523d6000602084013e611da0565b606091505b509150915081611ddc576040517facfdb44400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b9150505b9392505050565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff1615611c2f576000848152602082815260408083206001600160a01b038716808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339287917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a46001915050610748565b611eb361283a565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001681557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a150565b306001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161480611fd457507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316611fc87f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b6001600160a01b031614155b15611c95576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610e7881611b42565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa92505050801561208e575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820190925261208b91810190613243565b60015b6120d4576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b03831660048201526024015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8114612130576040517faa1d49a4000000000000000000000000000000000000000000000000000000008152600481018290526024016120cb565b6109088383612895565b6040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b038281166004830152600060248301819052919084169063095ea7b3906044016020604051808303816000875af11580156121a6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611de09190613221565b6003546001600160a01b0390811690831603612319576002546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152602481018390529083169063095ea7b3906044016020604051808303816000875af115801561224c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122709190613221565b6122a6576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002546040517f743e0c9b000000000000000000000000000000000000000000000000000000008152600481018390526001600160a01b039091169063743e0c9b90602401600060405180830381600087803b15801561230557600080fd5b505af115801561118d573d6000803e3d6000fd5b6000546040517fd936547e0000000000000000000000000000000000000000000000000000000081526001600160a01b0384811660048301529091169063d936547e90602401602060405180830381865afa15801561237c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123a09190613221565b6123d6576040517fac2175f100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600054610e78906001600160a01b03848116911683612711565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614611c95576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61245a611c39565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011781557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25833611f1d565b6003546001600160a01b0390811690831603612638576124f66001600160a01b0383168430846128eb565b6002546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152602481018390529083169063095ea7b3906044016020604051808303816000875af1158015612562573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125869190613221565b6125bc576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002546040517f743e0c9b000000000000000000000000000000000000000000000000000000008152600481018390526001600160a01b039091169063743e0c9b90602401600060405180830381600087803b15801561261b57600080fd5b505af115801561262f573d6000803e3d6000fd5b50505050505050565b6000546040517fd936547e0000000000000000000000000000000000000000000000000000000081526001600160a01b0384811660048301529091169063d936547e90602401602060405180830381865afa15801561269b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126bf9190613221565b6126f5576040517fac2175f100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600054610908906001600160a01b0384811691869116846128eb565b6040516001600160a01b0383811660248301526044820183905261090891859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050612924565b611c956129a0565b6127956129a0565b611c95612a07565b6127a56129a0565b611c95612a0f565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408083206001600160a01b038516845290915290205460ff16610e78576040517fe2517d3f0000000000000000000000000000000000000000000000000000000081526001600160a01b0382166004820152602481018390526044016120cb565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff16611c95576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61289e82612a60565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a28051156128e3576109088282612b08565b610e78612b7e565b6040516001600160a01b038481166024830152838116604483015260648201839052610be79186918216906323b872dd9060840161273e565b60006129396001600160a01b03841683612bb6565b9050805160001415801561295e57508080602001905181019061295c9190613221565b155b15610908576040517f5274afe70000000000000000000000000000000000000000000000000000000081526001600160a01b03841660048201526024016120cb565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff16611c95576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611d186129a0565b612a176129a0565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055565b806001600160a01b03163b600003612aaf576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b03821660048201526024016120cb565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6060600080846001600160a01b031684604051612b25919061326c565b600060405180830381855af49150503d8060008114612b60576040519150601f19603f3d011682016040523d82523d6000602084013e612b65565b606091505b5091509150612b75858383612bc4565b95945050505050565b3415611c95576040517fb398979f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6060611de083836000612c39565b606082612bd957612bd482612cef565b611de0565b8151158015612bf057506001600160a01b0384163b155b15612c32576040517f9996b3150000000000000000000000000000000000000000000000000000000081526001600160a01b03851660048201526024016120cb565b5080611de0565b606081471015612c77576040517fcd7860590000000000000000000000000000000000000000000000000000000081523060048201526024016120cb565b600080856001600160a01b03168486604051612c93919061326c565b60006040518083038185875af1925050503d8060008114612cd0576040519150601f19603f3d011682016040523d82523d6000602084013e612cd5565b606091505b5091509150612ce5868383612bc4565b9695505050505050565b805115612cff5780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060208284031215612d4357600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114611de057600080fd5b80356001600160a01b0381168114612d8a57600080fd5b919050565b600060208284031215612da157600080fd5b611de082612d73565b60008083601f840112612dbc57600080fd5b50813567ffffffffffffffff811115612dd457600080fd5b602083019150836020828501011115612dec57600080fd5b9250929050565b600080600060408486031215612e0857600080fd5b612e1184612d73565b9250602084013567ffffffffffffffff811115612e2d57600080fd5b612e3986828701612daa565b9497909650939450505050565b60005b83811015612e61578181015183820152602001612e49565b50506000910152565b60008151808452612e82816020860160208601612e46565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000611de06020830184612e6a565b600060208284031215612ed957600080fd5b5035919050565b60008060408385031215612ef357600080fd5b82359150612f0360208401612d73565b90509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60008060408385031215612f4e57600080fd5b612f5783612d73565b9150602083013567ffffffffffffffff811115612f7357600080fd5b8301601f81018513612f8457600080fd5b803567ffffffffffffffff811115612f9e57612f9e612f0c565b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8501160116810181811067ffffffffffffffff8211171561300a5761300a612f0c565b60405281815282820160200187101561302257600080fd5b816020840160208301376000602083830101528093505050509250929050565b60008060008060006080868803121561305a57600080fd5b61306386612d73565b945061307160208701612d73565b935060408601359250606086013567ffffffffffffffff81111561309457600080fd5b6130a088828901612daa565b969995985093965092949392505050565b6000806000806000608086880312156130c957600080fd5b6130d286612d73565b9450602086013593506130e760408701612d73565b9250606086013567ffffffffffffffff81111561309457600080fd5b60008060006060848603121561311857600080fd5b61312184612d73565b925061312f60208501612d73565b915061313d60408501612d73565b90509250925092565b60008060006060848603121561315b57600080fd5b61316484612d73565b92506020840135915061313d60408501612d73565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b6020815260006131d6602083018486613179565b949350505050565b838152604060208201526000612b75604083018486613179565b8481526001600160a01b0384166020820152606060408201526000612ce5606083018486613179565b60006020828403121561323357600080fd5b81518015158114611de057600080fd5b60006020828403121561325557600080fd5b5051919050565b8183823760009101908152919050565b6000825161327e818460208701612e46565b919091019291505056fea26469706673582212207502c72fde83b46f559fca91354376f4a808a2aefc289286688b1a9d18fa9f3f64736f6c634300081a0033", } // GatewayEVMABI is the input ABI used to generate the binding from. diff --git a/v2/pkg/gatewayevm.t.sol/gatewayevminboundtest.go b/v2/pkg/gatewayevm.t.sol/gatewayevminboundtest.go index e58bc9b4..e394ace8 100644 --- a/v2/pkg/gatewayevm.t.sol/gatewayevminboundtest.go +++ b/v2/pkg/gatewayevm.t.sol/gatewayevminboundtest.go @@ -49,8 +49,8 @@ type StdInvariantFuzzSelector struct { // GatewayEVMInboundTestMetaData contains all meta data concerning the GatewayEVMInboundTest contract. var GatewayEVMInboundTestMetaData = &bind.MetaData{ - ABI: "[{\"type\":\"function\",\"name\":\"IS_TEST\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeArtifacts\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedArtifacts_\",\"type\":\"string[]\",\"internalType\":\"string[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeContracts\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedContracts_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeSelectors\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedSelectors_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzSelector[]\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"selectors\",\"type\":\"bytes4[]\",\"internalType\":\"bytes4[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeSenders\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedSenders_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"failed\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"setUp\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"targetArtifactSelectors\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedArtifactSelectors_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzArtifactSelector[]\",\"components\":[{\"name\":\"artifact\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"selectors\",\"type\":\"bytes4[]\",\"internalType\":\"bytes4[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetArtifacts\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedArtifacts_\",\"type\":\"string[]\",\"internalType\":\"string[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetContracts\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedContracts_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetInterfaces\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedInterfaces_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzInterface[]\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"artifacts\",\"type\":\"string[]\",\"internalType\":\"string[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetSelectors\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedSelectors_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzSelector[]\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"selectors\",\"type\":\"bytes4[]\",\"internalType\":\"bytes4[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetSenders\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedSenders_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"testCallWithPayload\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositERC20ToCustody\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositERC20ToCustodyFailsIfTokenIsNotWhitelisted\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositERC20ToCustodyWithPayload\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositERC20ToCustodyWithPayloadFailsIfTokenIsNotWhitelisted\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositEthToTss\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositEthToTssWithPayload\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositZetaToConnector\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testFailDepositERC20ToCustodyIfAmountIs0\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testFailDepositERC20ToCustodyIfReceiverIsZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testFailDepositERC20ToCustodyWithPayloadIfAmountIs0\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testFailDepositERC20ToCustodyWithPayloadIfReceiverIsZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testFailDepositEthToTssIfAmountIs0\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testFailDepositEthToTssIfReceiverIsZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testFailDepositEthToTssWithPayloadIfAmountIs0\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testFailDepositEthToTssWithPayloadIfReceiverIsZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"event\",\"name\":\"Call\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"receiver\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Deposit\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"receiver\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"asset\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Executed\",\"inputs\":[{\"name\":\"destination\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ExecutedWithERC20\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedERC20\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"token\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"destination\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedNoParams\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedNonPayable\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"strs\",\"type\":\"string[]\",\"indexed\":false,\"internalType\":\"string[]\"},{\"name\":\"nums\",\"type\":\"uint256[]\",\"indexed\":false,\"internalType\":\"uint256[]\"},{\"name\":\"flag\",\"type\":\"bool\",\"indexed\":false,\"internalType\":\"bool\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedPayable\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"str\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"num\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"flag\",\"type\":\"bool\",\"indexed\":false,\"internalType\":\"bool\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedRevert\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Reverted\",\"inputs\":[{\"name\":\"destination\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RevertedWithERC20\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log\",\"inputs\":[{\"name\":\"\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_address\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_array\",\"inputs\":[{\"name\":\"val\",\"type\":\"uint256[]\",\"indexed\":false,\"internalType\":\"uint256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_array\",\"inputs\":[{\"name\":\"val\",\"type\":\"int256[]\",\"indexed\":false,\"internalType\":\"int256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_array\",\"inputs\":[{\"name\":\"val\",\"type\":\"address[]\",\"indexed\":false,\"internalType\":\"address[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_bytes\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_bytes32\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_int\",\"inputs\":[{\"name\":\"\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_address\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_array\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"uint256[]\",\"indexed\":false,\"internalType\":\"uint256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_array\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"int256[]\",\"indexed\":false,\"internalType\":\"int256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_array\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"address[]\",\"indexed\":false,\"internalType\":\"address[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_bytes\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_bytes32\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_decimal_int\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"},{\"name\":\"decimals\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_decimal_uint\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"decimals\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_int\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_string\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_uint\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_string\",\"inputs\":[{\"name\":\"\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_uint\",\"inputs\":[{\"name\":\"\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"logs\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"ApprovalFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ConnectorInitialized\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"CustodyInitialized\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"DepositFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ExecutionFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientERC20Amount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientETHAmount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NotWhitelistedInCustody\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZeroAddress\",\"inputs\":[]}]", - Bin: "0x6080604052600c8054600160ff199182168117909255601f80549091169091179055620f4240602855348015603357600080fd5b5061da88806100436000396000f3fe608060405234801561001057600080fd5b50600436106101cf5760003560e01c8063916a17c611610104578063bb93f11e116100a2578063e306a97811610071578063e306a978146102f8578063e85c5a0714610300578063f96c02df14610308578063fa7626d41461031057600080fd5b8063bb93f11e146102d8578063c13d738f146102e0578063d896e261146102e8578063e20c9f71146102f057600080fd5b8063b0464fdc116100de578063b0464fdc146102a8578063b2849063146102b0578063b5508aa9146102b8578063ba414fa6146102c057600080fd5b8063916a17c6146102835780639fd1e59714610298578063aa030c1c146102a057600080fd5b806330f7c04f116101715780636459542a1161014b5780636459542a1461024957806366d9a9a0146102515780637478fda01461026657806385226c811461026e57600080fd5b806330f7c04f146102315780633e5e3c23146102395780633f7286f41461024157600080fd5b80630a9254e4116101ad5780630a9254e4146101ee5780631806a9a5146101f65780631ed7831c146101fe5780632ade38801461021c57600080fd5b806305a898e2146101d457806306978ca3146101de5780630724d8e3146101e6575b600080fd5b6101dc61031d565b005b6101dc6104d1565b6101dc6105e3565b6101dc61079a565b6101dc611125565b61020661121f565b60405161021391906177de565b60405180910390f35b610224611281565b604051610213919061787a565b6101dc6113c3565b610206611830565b610206611890565b6101dc6118f0565b610259611ced565b60405161021391906179e0565b6101dc611e6f565b610276611fa2565b6040516102139190617a7e565b61028b612072565b6040516102139190617af5565b6101dc61216d565b6101dc612389565b61028b612540565b6101dc61263b565b6102766128d6565b6102c86129a6565b6040519015158152602001610213565b6101dc612a7a565b6101dc612bfa565b6101dc612da9565b610206612f21565b6101dc612f81565b6101dc61324d565b6101dc6134ce565b601f546102c89060ff1681565b6026546040516001600160a01b03909116602482015260019060009060440160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f84fae76000000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063f28dceb390610415906004016020808252600b908201527f5a65726f41646472657373000000000000000000000000000000000000000000604082015260600190565b600060405180830381600087803b15801561042f57600080fd5b505af1158015610443573d6000803e3d6000fd5b50506020546023546040517f8c6f037f0000000000000000000000000000000000000000000000000000000081526001600160a01b039283169450638c6f037f935061049b9260009288929116908790600401617b8c565b600060405180830381600087803b1580156104b557600080fd5b505af11580156104c9573d6000803e3d6000fd5b505050505050565b6040517ff28dceb300000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f496e73756666696369656e74455448416d6f756e7400000000000000000000006044820152600090737109709ecfa91a80626ff3989d68f67f5b1dd12d9063f28dceb390606401600060405180830381600087803b15801561056757600080fd5b505af115801561057b573d6000803e3d6000fd5b50506020546026546040517ff340fa010000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201529116925063f340fa01915083906024015b6000604051808303818588803b1580156104b557600080fd5b6027546020546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039182166084820152620186a092919091163190737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b15801561067f57600080fd5b505af1158015610693573d6000803e3d6000fd5b505060265460255460408051878152600060208201819052606082840181905282015290516001600160a01b0393841695509290911692507f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a4919081900360800190a36020546026546040517ff340fa010000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015291169063f340fa019084906024016000604051808303818588803b15801561075957600080fd5b505af115801561076d573d6000803e3d6000fd5b50506027546001600160a01b0316319250610795915061078f90508484617bf2565b826135e4565b505050565b602580547fffffffffffffffffffffffff00000000000000000000000000000000000000009081163017909155602680548216611234179055602780549091166156781790556040516107ec906176f1565b60408082526004908201527f746573740000000000000000000000000000000000000000000000000000000060608201526080602082018190526003908201527f54544b000000000000000000000000000000000000000000000000000000000060a082015260c001604051809103906000f080158015610871573d6000803e3d6000fd5b50602380547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392831617905560275460405191169081906108ba906176fe565b6001600160a01b03928316815291166020820152604001604051809103906000f0801580156108ed573d6000803e3d6000fd5b50602480547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039283169081178255604080518082018252600e81527f4761746577617945564d2e736f6c0000000000000000000000000000000000006020820152602754602554925190861694810194909452604484019290925290921660648201526109de919060840160408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fc0c53b8b00000000000000000000000000000000000000000000000000000000179052613663565b601f80547fffffffffffffffffffffff0000000000000000000000000000000000000000ff166101006001600160a01b0393841681029190911791829055602080549190920483167fffffffffffffffffffffffff00000000000000000000000000000000000000009091168117909155602754602554604051929391821692911690610a6a9061770b565b6001600160a01b03938416815291831660208301529091166040820152606001604051809103906000f080158015610aa6573d6000803e3d6000fd5b50602180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039283161790556020546024546027546025546040519385169492831693918316921690610b0190617718565b6001600160a01b039485168152928416602084015290831660408301529091166060820152608001604051809103906000f080158015610b45573d6000803e3d6000fd5b50602280547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039283161790556027546040517fca669fa700000000000000000000000000000000000000000000000000000000815291166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015610be357600080fd5b505af1158015610bf7573d6000803e3d6000fd5b5050602480546027546022546040517f15d57fd40000000000000000000000000000000000000000000000000000000081526001600160a01b039283166004820152908216938101939093521692506315d57fd49150604401600060405180830381600087803b158015610c6a57600080fd5b505af1158015610c7e573d6000803e3d6000fd5b50506027546040517fc88a5e6d0000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152670de0b6b3a76400006024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c88a5e6d9150604401600060405180830381600087803b158015610d0257600080fd5b505af1158015610d16573d6000803e3d6000fd5b50506025546040517f06447d560000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506306447d569150602401600060405180830381600087803b158015610d8c57600080fd5b505af1158015610da0573d6000803e3d6000fd5b50506020546021546040517fae7a3a6f0000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201529116925063ae7a3a6f9150602401600060405180830381600087803b158015610e0657600080fd5b505af1158015610e1a573d6000803e3d6000fd5b50506020546022546040517f10188aef0000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152911692506310188aef9150602401600060405180830381600087803b158015610e8057600080fd5b505af1158015610e94573d6000803e3d6000fd5b50506021546023546040517f9b19251a0000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015291169250639b19251a9150602401600060405180830381600087803b158015610efa57600080fd5b505af1158015610f0e573d6000803e3d6000fd5b505050507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b03166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610f7057600080fd5b505af1158015610f84573d6000803e3d6000fd5b50506023546025546028546040517f40c10f190000000000000000000000000000000000000000000000000000000081526001600160a01b0392831660048201526024810191909152911692506340c10f199150604401600060405180830381600087803b158015610ff557600080fd5b505af1158015611009573d6000803e3d6000fd5b50506027546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b15801561107f57600080fd5b505af1158015611093573d6000803e3d6000fd5b50506022546025546028546040517f106e62900000000000000000000000000000000000000000000000000000000081526001600160a01b0392831660048201526024810191909152600060448201529116925063106e62909150606401600060405180830381600087803b15801561110b57600080fd5b505af115801561111f573d6000803e3d6000fd5b50505050565b6040517ff28dceb300000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f5a65726f416464726573730000000000000000000000000000000000000000006044820152600190737109709ecfa91a80626ff3989d68f67f5b1dd12d9063f28dceb390606401600060405180830381600087803b1580156111bb57600080fd5b505af11580156111cf573d6000803e3d6000fd5b50506020546040517ff340fa01000000000000000000000000000000000000000000000000000000008152600060048201526001600160a01b03909116925063f340fa01915083906024016105ca565b6060601680548060200260200160405190810160405280929190818152602001828054801561127757602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311611259575b5050505050905090565b6060601e805480602002602001604051908101604052809291908181526020016000905b828210156113ba57600084815260208082206040805180820182526002870290920180546001600160a01b03168352600181018054835181870281018701909452808452939591948681019491929084015b828210156113a357838290600052602060002001805461131690617c05565b80601f016020809104026020016040519081016040528092919081815260200182805461134290617c05565b801561138f5780601f106113645761010080835404028352916020019161138f565b820191906000526020600020905b81548152906001019060200180831161137257829003601f168201915b5050505050815260200190600101906112f7565b5050505081525050815260200190600101906112a5565b50505050905090565b6023546021546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620186a09260009216906370a0823190602401602060405180830381865afa15801561142f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114539190617c52565b90506114606000826135e4565b6026546040516001600160a01b03909116602482015260009060440160408051601f19818403018152918152602080830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f84fae76000000000000000000000000000000000000000000000000000000000179052602354905491517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b03928316600482015260248101879052929350169063095ea7b3906044016020604051808303816000875af1158015611543573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115679190617c6b565b506020546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b1580156115f657600080fd5b505af115801561160a573d6000803e3d6000fd5b50506026546025546023546040516001600160a01b03938416955091831693507f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a49261165d928992909116908790617c8d565b60405180910390a36020546026546023546040517f8c6f037f0000000000000000000000000000000000000000000000000000000081526001600160a01b0393841693638c6f037f936116be93908216928992909116908790600401617b8c565b600060405180830381600087803b1580156116d857600080fd5b505af11580156116ec573d6000803e3d6000fd5b50506023546021546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260009450911691506370a0823190602401602060405180830381865afa158015611758573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061177c9190617c52565b905061178884826135e4565b6023546025546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260009291909116906370a0823190602401602060405180830381865afa1580156117f2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118169190617c52565b90506118298560285461078f9190617cb5565b5050505050565b60606018805480602002602001604051908101604052809291908181526020018280548015611277576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311611259575050505050905090565b60606017805480602002602001604051908101604052809291908181526020018280548015611277576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311611259575050505050905090565b6023546021546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620186a09260009216906370a0823190602401602060405180830381865afa15801561195c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119809190617c52565b905061198d6000826135e4565b6023546020546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201526024810185905291169063095ea7b3906044016020604051808303816000875af11580156119fb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a1f9190617c6b565b506020546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b158015611aae57600080fd5b505af1158015611ac2573d6000803e3d6000fd5b5050602654602554602354604080518881526001600160a01b039283166020820152606081830181905260009082015290519382169550911692507f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a4919081900360800190a36020546026546023546040517ff45346dc0000000000000000000000000000000000000000000000000000000081526001600160a01b03928316600482015260248101869052908216604482015291169063f45346dc90606401600060405180830381600087803b158015611b9c57600080fd5b505af1158015611bb0573d6000803e3d6000fd5b50506023546021546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260009450911691506370a0823190602401602060405180830381865afa158015611c1c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c409190617c52565b9050611c4c83826135e4565b6023546025546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260009291909116906370a0823190602401602060405180830381865afa158015611cb6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cda9190617c52565b905061111f8460285461078f9190617cb5565b6060601b805480602002602001604051908101604052809291908181526020016000905b828210156113ba5783829060005260206000209060020201604051806040016040529081600082018054611d4490617c05565b80601f0160208091040260200160405190810160405280929190818152602001828054611d7090617c05565b8015611dbd5780601f10611d9257610100808354040283529160200191611dbd565b820191906000526020600020905b815481529060010190602001808311611da057829003601f168201915b5050505050815260200160018201805480602002602001604051908101604052809291908181526020018280548015611e5757602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019060040190602082600301049283019260010382029150808411611e045790505b50505050508152505081526020019060010190611d11565b6040517ff28dceb300000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f5a65726f416464726573730000000000000000000000000000000000000000006044820152600190737109709ecfa91a80626ff3989d68f67f5b1dd12d9063f28dceb390606401600060405180830381600087803b158015611f0557600080fd5b505af1158015611f19573d6000803e3d6000fd5b50506020546023546040517ff45346dc00000000000000000000000000000000000000000000000000000000815260006004820152602481018690526001600160a01b0391821660448201529116925063f45346dc91506064015b600060405180830381600087803b158015611f8e57600080fd5b505af1158015611829573d6000803e3d6000fd5b6060601a805480602002602001604051908101604052809291908181526020016000905b828210156113ba578382906000526020600020018054611fe590617c05565b80601f016020809104026020016040519081016040528092919081815260200182805461201190617c05565b801561205e5780601f106120335761010080835404028352916020019161205e565b820191906000526020600020905b81548152906001019060200180831161204157829003601f168201915b505050505081526020019060010190611fc6565b6060601d805480602002602001604051908101604052809291908181526020016000905b828210156113ba5760008481526020908190206040805180820182526002860290920180546001600160a01b0316835260018101805483518187028101870190945280845293949193858301939283018282801561215557602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190600401906020826003010492830192600103820291508084116121025790505b50505050508152505081526020019060010190612096565b6027546026546040516001600160a01b039182166024820152620186a09291909116319060009060440160408051601f19818403018152918152602080830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f84fae760000000000000000000000000000000000000000000000000000000001790525490517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b15801561227e57600080fd5b505af1158015612292573d6000803e3d6000fd5b50506026546025546040516001600160a01b039283169450911691507f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a4906122e09087906000908790617c8d565b60405180910390a36020546026546040517f29c59b5d0000000000000000000000000000000000000000000000000000000081526001600160a01b03928316926329c59b5d92879261233a92909116908690600401617cc8565b6000604051808303818588803b15801561235357600080fd5b505af1158015612367573d6000803e3d6000fd5b50506027546001600160a01b031631925061111f915061078f90508585617bf2565b6026546040516001600160a01b03909116602482015260009060440160408051601f19818403018152918152602080830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f84fae760000000000000000000000000000000000000000000000000000000001790525490517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b15801561248c57600080fd5b505af11580156124a0573d6000803e3d6000fd5b50506026546025546040516001600160a01b039283169450911691507f2a21062ee9199c2e205622999eeb7c3da73153674f36a0acd3f74fa6af67bde3906124e9908590617cea565b60405180910390a36020546026546040517f1b8b921d0000000000000000000000000000000000000000000000000000000081526001600160a01b0392831692631b8b921d92611f74929116908590600401617cc8565b6060601c805480602002602001604051908101604052809291908181526020016000905b828210156113ba5760008481526020908190206040805180820182526002860290920180546001600160a01b0316835260018101805483518187028101870190945280845293949193858301939283018282801561262357602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190600401906020826003010492830192600103820291508084116125d05790505b50505050508152505081526020019060010190612564565b6023546020546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620186a06024820181905292919091169063095ea7b3906044016020604051808303816000875af11580156126b0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126d49190617c6b565b506025546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561274757600080fd5b505af115801561275b573d6000803e3d6000fd5b50506021546023546040517f9a5904270000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015291169250639a5904279150602401600060405180830381600087803b1580156127c157600080fd5b505af11580156127d5573d6000803e3d6000fd5b50506040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fac2175f1000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e091506024015b600060405180830381600087803b15801561285f57600080fd5b505af1158015612873573d6000803e3d6000fd5b50506020546026546023546040517ff45346dc0000000000000000000000000000000000000000000000000000000081526001600160a01b0392831660048201526024810187905290821660448201529116925063f45346dc9150606401611f74565b60606019805480602002602001604051908101604052809291908181526020016000905b828210156113ba57838290600052602060002001805461291990617c05565b80601f016020809104026020016040519081016040528092919081815260200182805461294590617c05565b80156129925780601f1061296757610100808354040283529160200191612992565b820191906000526020600020905b81548152906001019060200180831161297557829003601f168201915b5050505050815260200190600101906128fa565b60085460009060ff16156129be575060085460ff1690565b6040517f667f9d70000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d600482018190527f6661696c65640000000000000000000000000000000000000000000000000000602483015260009163667f9d7090604401602060405180830381865afa158015612a4f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a739190617c52565b1415905090565b6026546040516001600160a01b039091166024820152600090819060440160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f84fae76000000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063f28dceb390612b719060040160208082526017908201527f496e73756666696369656e744552433230416d6f756e74000000000000000000604082015260600190565b600060405180830381600087803b158015612b8b57600080fd5b505af1158015612b9f573d6000803e3d6000fd5b50506020546026546023546040517f8c6f037f0000000000000000000000000000000000000000000000000000000081526001600160a01b039384169550638c6f037f945061049b9392831692889216908790600401617b8c565b6026546040516001600160a01b039091166024820152600090819060440160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f84fae76000000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063f28dceb390612cf19060040160208082526015908201527f496e73756666696369656e74455448416d6f756e740000000000000000000000604082015260600190565b600060405180830381600087803b158015612d0b57600080fd5b505af1158015612d1f573d6000803e3d6000fd5b50506020546026546040517f29c59b5d0000000000000000000000000000000000000000000000000000000081526001600160a01b0392831694506329c59b5d93508692612d739216908690600401617cc8565b6000604051808303818588803b158015612d8c57600080fd5b505af1158015612da0573d6000803e3d6000fd5b50505050505050565b6026546040516001600160a01b03909116602482015260019060009060440160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f84fae76000000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063f28dceb390612ea1906004016020808252600b908201527f5a65726f41646472657373000000000000000000000000000000000000000000604082015260600190565b600060405180830381600087803b158015612ebb57600080fd5b505af1158015612ecf573d6000803e3d6000fd5b50506020546040517f29c59b5d0000000000000000000000000000000000000000000000000000000081526001600160a01b0390911692506329c59b5d91508490612d73906000908690600401617cc8565b60606015805480602002602001604051908101604052809291908181526020018280548015611277576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311611259575050505050905090565b602480546020546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620186a093810184905291169063095ea7b3906044016020604051808303816000875af1158015612ff3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130179190617c6b565b506020546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b1580156130a657600080fd5b505af11580156130ba573d6000803e3d6000fd5b5050602654602554602454604080518781526001600160a01b039283166020820152606081830181905260009082015290519382169550911692507f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a4919081900360800190a3602054602654602480546040517ff45346dc0000000000000000000000000000000000000000000000000000000081526001600160a01b0393841660048201529182018590528216604482015291169063f45346dc90606401600060405180830381600087803b15801561319357600080fd5b505af11580156131a7573d6000803e3d6000fd5b5050602480546025546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260009550911692506370a082319101602060405180830381865afa158015613212573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132369190617c52565b90506132498260285461078f9190617cb5565b5050565b6026546040516001600160a01b039091166024820152620186a09060009060440160408051601f19818403018152918152602080830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f84fae76000000000000000000000000000000000000000000000000000000000179052602354905491517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b03928316600482015260248101869052929350169063095ea7b3906044016020604051808303816000875af1158015613335573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133599190617c6b565b506025546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156133cc57600080fd5b505af11580156133e0573d6000803e3d6000fd5b50506021546023546040517f9a5904270000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015291169250639a5904279150602401600060405180830381600087803b15801561344657600080fd5b505af115801561345a573d6000803e3d6000fd5b50506040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fac2175f1000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401612b71565b6023546020546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260006024820181905292919091169063095ea7b3906044016020604051808303816000875af1158015613541573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135659190617c6b565b506040517ff28dceb300000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f496e73756666696369656e744552433230416d6f756e740000000000000000006044820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063f28dceb390606401612845565b6040517f98296c540000000000000000000000000000000000000000000000000000000081526004810183905260248101829052737109709ecfa91a80626ff3989d68f67f5b1dd12d906398296c549060440160006040518083038186803b15801561364f57600080fd5b505afa1580156104c9573d6000803e3d6000fd5b600061366d617725565b613678848483613682565b9150505b92915050565b60008061368f85846136fd565b90506136f26040518060400160405280601d81526020017f4552433139363750726f78792e736f6c3a4552433139363750726f787900000081525082866040516020016136dd929190617cc8565b60405160208183030381529060405285613709565b9150505b9392505050565b60006136f68383613737565b60c0810151516000901561372d5761372684848460c00151613752565b90506136f6565b61372684846138f8565b600061374383836139e3565b6136f683836020015184613709565b60008061375d6139ef565b9050600061376b8683613ac2565b905060006137828260600151836020015185613f68565b905060006137928383898961417a565b9050600061379f82614ff7565b602081015181519192509060030b15613812578982604001516040516020016137c9929190617cfd565b60408051601f19818403018152908290527f08c379a000000000000000000000000000000000000000000000000000000000825261380991600401617cea565b60405180910390fd5b60006138556040518060400160405280601581526020017f4465706c6f79656420746f20616464726573733a2000000000000000000000008152508360016151c6565b6040517fc6ce059d000000000000000000000000000000000000000000000000000000008152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c6ce059d906138a8908490600401617cea565b602060405180830381865afa1580156138c5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138e99190617d7e565b9b9a5050505050505050505050565b6040517f8d1cc9250000000000000000000000000000000000000000000000000000000081526000908190737109709ecfa91a80626ff3989d68f67f5b1dd12d90638d1cc9259061394d908790600401617cea565b600060405180830381865afa15801561396a573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526139929190810190617e8f565b905060006139c082856040516020016139ac929190617ec4565b6040516020818303038152906040526153c6565b90506001600160a01b0381166136785784846040516020016137c9929190617ef3565b613249828260006153d9565b604080518082018252600381527f6f75740000000000000000000000000000000000000000000000000000000000602082015290517fd145736c000000000000000000000000000000000000000000000000000000008152606091737109709ecfa91a80626ff3989d68f67f5b1dd12d91829063d145736c90613a76908490600401617f9e565b600060405180830381865afa158015613a93573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052613abb9190810190617fe5565b9250505090565b613af46040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b6000737109709ecfa91a80626ff3989d68f67f5b1dd12d9050613b3f6040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b613b48856154dc565b60208201526000613b58866158c1565b90506000836001600160a01b031663d930a0e66040518163ffffffff1660e01b8152600401600060405180830381865afa158015613b9a573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052613bc29190810190617fe5565b86838560200151604051602001613bdc949392919061802e565b60408051601f19818403018152908290527f60f9bb1100000000000000000000000000000000000000000000000000000000825291506000906001600160a01b038616906360f9bb1190613c34908590600401617cea565b600060405180830381865afa158015613c51573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052613c799190810190617fe5565b6040517fdb4235f60000000000000000000000000000000000000000000000000000000081529091506001600160a01b0386169063db4235f690613cc1908490600401618132565b602060405180830381865afa158015613cde573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613d029190617c6b565b613d1757816040516020016137c99190618184565b6040517f49c4fac80000000000000000000000000000000000000000000000000000000081526001600160a01b038616906349c4fac890613d5c908490600401618216565b600060405180830381865afa158015613d79573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052613da19190810190617fe5565b84526040517fdb4235f60000000000000000000000000000000000000000000000000000000081526001600160a01b0386169063db4235f690613de8908490600401618268565b602060405180830381865afa158015613e05573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613e299190617c6b565b15613ebe576040517f49c4fac80000000000000000000000000000000000000000000000000000000081526001600160a01b038616906349c4fac890613e73908490600401618268565b600060405180830381865afa158015613e90573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052613eb89190810190617fe5565b60408501525b846001600160a01b03166349c4fac8828660000151604051602001613ee391906182ba565b6040516020818303038152906040526040518363ffffffff1660e01b8152600401613f0f929190618326565b600060405180830381865afa158015613f2c573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052613f549190810190617fe5565b606085015250608083015250949350505050565b60408051600480825260a0820190925260609160009190816020015b6060815260200190600190039081613f845790505090506040518060400160405280600481526020017f677265700000000000000000000000000000000000000000000000000000000081525081600081518110613fe457613fe461834b565b60200260200101819052506040518060400160405280600381526020017f2d726c0000000000000000000000000000000000000000000000000000000000815250816001815181106140385761403861834b565b602002602001018190525084604051602001614054919061837a565b604051602081830303815290604052816002815181106140765761407661834b565b60200260200101819052508260405160200161409291906183e6565b604051602081830303815290604052816003815181106140b4576140b461834b565b602002602001018190525060006140ca82614ff7565b602080820151604080518082018252600581527f2e6a736f6e000000000000000000000000000000000000000000000000000000818501908152825180840184526000808252908601528251808401909352905182529281019290925291925061415b9060408051808201825260008082526020918201528151808301909252845182528085019082015290615b44565b61417057856040516020016137c99190618427565b9695505050505050565b60a0810151604080518082018252600080825260209182015281518083019092528251808352928101910152606090737109709ecfa91a80626ff3989d68f67f5b1dd12d90156141ca565b511590565b61433e57826020015115614286576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605860248201527f54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f742060448201527f62652075736564207768656e207468652060736b6970566572696679536f757260648201527f6365436f646560206f7074696f6e206973206074727565600000000000000000608482015260a401613809565b8260c001511561433e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605360248201527f54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f742060448201527f62652075736564207768656e207468652060736b69704c6963656e736554797060648201527f6560206f7074696f6e2069732060747275656000000000000000000000000000608482015260a401613809565b6040805160ff8082526120008201909252600091816020015b606081526020019060019003908161435757905050905060006040518060400160405280600381526020017f6e707800000000000000000000000000000000000000000000000000000000008152508282806143b2906184b8565b935060ff16815181106143c7576143c761834b565b60200260200101819052506040518060400160405280600d81526020017f302e302e312d616c7068612e370000000000000000000000000000000000000081525060405160200161441891906184d7565b604051602081830303815290604052828280614433906184b8565b935060ff16815181106144485761444861834b565b60200260200101819052506040518060400160405280600681526020017f6465706c6f790000000000000000000000000000000000000000000000000000815250828280614495906184b8565b935060ff16815181106144aa576144aa61834b565b60200260200101819052506040518060400160405280600e81526020017f2d2d636f6e74726163744e616d650000000000000000000000000000000000008152508282806144f7906184b8565b935060ff168151811061450c5761450c61834b565b60200260200101819052508760200151828280614528906184b8565b935060ff168151811061453d5761453d61834b565b60200260200101819052506040518060400160405280600e81526020017f2d2d636f6e74726163745061746800000000000000000000000000000000000081525082828061458a906184b8565b935060ff168151811061459f5761459f61834b565b6020908102919091010152875182826145b7816184b8565b935060ff16815181106145cc576145cc61834b565b60200260200101819052506040518060400160405280600981526020017f2d2d636861696e49640000000000000000000000000000000000000000000000815250828280614619906184b8565b935060ff168151811061462e5761462e61834b565b602002602001018190525061464246615ba5565b828261464d816184b8565b935060ff16815181106146625761466261834b565b60200260200101819052506040518060400160405280600f81526020017f2d2d6275696c64496e666f46696c6500000000000000000000000000000000008152508282806146af906184b8565b935060ff16815181106146c4576146c461834b565b6020026020010181905250868282806146dc906184b8565b935060ff16815181106146f1576146f161834b565b60209081029190910101528551156148185760408051808201909152601581527f2d2d636f6e7374727563746f7242797465636f6465000000000000000000000060208201528282614742816184b8565b935060ff16815181106147575761475761834b565b60209081029190910101526040517f71aad10d0000000000000000000000000000000000000000000000000000000081526001600160a01b038416906371aad10d906147a7908990600401617cea565b600060405180830381865afa1580156147c4573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526147ec9190810190617fe5565b82826147f7816184b8565b935060ff168151811061480c5761480c61834b565b60200260200101819052505b8460200151156148e85760408051808201909152601281527f2d2d766572696679536f75726365436f6465000000000000000000000000000060208201528282614861816184b8565b935060ff16815181106148765761487661834b565b60200260200101819052506040518060400160405280600581526020017f66616c73650000000000000000000000000000000000000000000000000000008152508282806148c3906184b8565b935060ff16815181106148d8576148d861834b565b6020026020010181905250614aaf565b6149206141c58660a0015160408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6149b35760408051808201909152600d81527f2d2d6c6963656e7365547970650000000000000000000000000000000000000060208201528282614963816184b8565b935060ff16815181106149785761497861834b565b60200260200101819052508460a00151604051602001614998919061837a565b6040516020818303038152906040528282806148c3906184b8565b8460c001511580156149f65750604080890151815180830183526000808252602091820152825180840190935281518352908101908201526149f490511590565b155b15614aaf5760408051808201909152600d81527f2d2d6c6963656e7365547970650000000000000000000000000000000000000060208201528282614a3a816184b8565b935060ff1681518110614a4f57614a4f61834b565b6020026020010181905250614a6388615c45565b604051602001614a73919061837a565b604051602081830303815290604052828280614a8e906184b8565b935060ff1681518110614aa357614aa361834b565b60200260200101819052505b60408086015181518083018352600080825260209182015282518084019093528151835290810190820152614ae390511590565b614b785760408051808201909152600b81527f2d2d72656c61796572496400000000000000000000000000000000000000000060208201528282614b26816184b8565b935060ff1681518110614b3b57614b3b61834b565b60200260200101819052508460400151828280614b57906184b8565b935060ff1681518110614b6c57614b6c61834b565b60200260200101819052505b606085015115614c995760408051808201909152600681527f2d2d73616c74000000000000000000000000000000000000000000000000000060208201528282614bc1816184b8565b935060ff1681518110614bd657614bd661834b565b602090810291909101015260608501516040517fb11a19e800000000000000000000000000000000000000000000000000000000815260048101919091526001600160a01b0384169063b11a19e890602401600060405180830381865afa158015614c45573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052614c6d9190810190617fe5565b8282614c78816184b8565b935060ff1681518110614c8d57614c8d61834b565b60200260200101819052505b60e08501515115614d405760408051808201909152600a81527f2d2d6761734c696d69740000000000000000000000000000000000000000000060208201528282614ce3816184b8565b935060ff1681518110614cf857614cf861834b565b6020026020010181905250614d148560e0015160000151615ba5565b8282614d1f816184b8565b935060ff1681518110614d3457614d3461834b565b60200260200101819052505b60e08501516020015115614dea5760408051808201909152600a81527f2d2d67617350726963650000000000000000000000000000000000000000000060208201528282614d8d816184b8565b935060ff1681518110614da257614da261834b565b6020026020010181905250614dbe8560e0015160200151615ba5565b8282614dc9816184b8565b935060ff1681518110614dde57614dde61834b565b60200260200101819052505b60e08501516040015115614e945760408051808201909152600e81527f2d2d6d617846656550657247617300000000000000000000000000000000000060208201528282614e37816184b8565b935060ff1681518110614e4c57614e4c61834b565b6020026020010181905250614e688560e0015160400151615ba5565b8282614e73816184b8565b935060ff1681518110614e8857614e8861834b565b60200260200101819052505b60e08501516060015115614f3e5760408051808201909152601681527f2d2d6d61785072696f726974794665655065724761730000000000000000000060208201528282614ee1816184b8565b935060ff1681518110614ef657614ef661834b565b6020026020010181905250614f128560e0015160600151615ba5565b8282614f1d816184b8565b935060ff1681518110614f3257614f3261834b565b60200260200101819052505b60008160ff1667ffffffffffffffff811115614f5c57614f5c617da7565b604051908082528060200260200182016040528015614f8f57816020015b6060815260200190600190039081614f7a5790505b50905060005b8260ff168160ff161015614fe857838160ff1681518110614fb857614fb861834b565b6020026020010151828260ff1681518110614fd557614fd561834b565b6020908102919091010152600101614f95565b5093505050505b949350505050565b61501e6040518060600160405280600060030b815260200160608152602001606081525090565b60408051808201825260048082527f6261736800000000000000000000000000000000000000000000000000000000602083015291517fd145736c000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d92600091849163d145736c916150a491869101618542565b600060405180830381865afa1580156150c1573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526150e99190810190617fe5565b905060006150f78683616734565b90506000846001600160a01b031663f45c1ce7836040518263ffffffff1660e01b81526004016151279190617a7e565b6000604051808303816000875af1158015615146573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261516e9190810190618589565b805190915060030b158015906151875750602081015151155b80156151965750604081015151155b1561417057816000815181106151ae576151ae61834b565b60200260200101516040516020016137c9919061863f565b606060006151fb8560408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6040805180820182526000808252602091820152815180830190925286518252808701908201529091506152329082905b90616889565b1561538f5760006152af826152a9846152a36152758a60408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6040805180820182526000808252602091820152815180830190925282518252918201519181019190915290565b906168b0565b90616912565b604080518082018252600181527f0a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152909150615313908290616889565b1561537d57604080518082018252600181527f0a000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261537a905b8290616997565b90505b615386816169bd565b925050506136f6565b82156153a85784846040516020016137c992919061882b565b50506040805160208101909152600081526136f6565b509392505050565b6000808251602084016000f09392505050565b8160a00151156153e857505050565b60006153f5848484616a26565b9050600061540282614ff7565b602081015181519192509060030b15801561549e5750604080518082018252600781527f53554343455353000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261549e9060408051808201825260008082526020918201528151808301909252845182528085019082015261522c565b156154ab57505050505050565b604082015151156154cb5781604001516040516020016137c991906188d2565b806040516020016137c99190618930565b606060006155118360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600481527f2e736f6c0000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152909150615576905b8290615b44565b156155e557604080518082018252600481527f2e736f6c00000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526136f6906155e0908390616fc1565b6169bd565b604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152615647905b829061704b565b60010361571457604080518082018252600181527f3a00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526156ad90615373565b50604080518082018252600181527f3a00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526136f6906155e0905b8390616997565b604080518082018252600581527f2e6a736f6e000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526157739061556f565b156158aa57604080518082018252600181527f2f000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201819052845180860190955292518452830152906157db9083906170e5565b9050600081600183516157ee9190617cb5565b815181106157fe576157fe61834b565b602002602001015190506158a16155e06158746040518060400160405280600581526020017f2e6a736f6e00000000000000000000000000000000000000000000000000000081525060408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b60408051808201825260008082526020918201528151808301909252855182528086019082015290616fc1565b95945050505050565b826040516020016137c9919061899b565b50919050565b606060006158f68360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600481527f2e736f6c00000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201529091506159589061556f565b15615966576136f6816169bd565b604080518082018252600181527f3a00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526159c590615640565b600103615a2f57604080518082018252600181527f3a00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526136f6906155e09061570d565b604080518082018252600581527f2e6a736f6e00000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152615a8e9061556f565b156158aa57604080518082018252600181527f2f00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820181905284518086019095529251845283015290615af69083906170e5565b9050600181511115615b32578060028251615b119190617cb5565b81518110615b2157615b2161834b565b602002602001015192505050919050565b50826040516020016137c9919061899b565b805182516000911115615b595750600061367c565b81518351602085015160009291615b6f91617bf2565b615b799190617cb5565b905082602001518103615b9057600191505061367c565b82516020840151819020912014905092915050565b60606000615bb28361718a565b600101905060008167ffffffffffffffff811115615bd257615bd2617da7565b6040519080825280601f01601f191660200182016040528015615bfc576020820181803683370190505b5090508181016020015b600019017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a8504945084615c0657509392505050565b604081810151815180830183526000808252602091820181905283518085018552835181529282018383015283518085018552600a81527f554e4c4943454e5345440000000000000000000000000000000000000000000081840190815285518087018752838152840192909252845180860190955251845290830152606091615cd1905b829061726c565b15615d1157505060408051808201909152600481527f4e6f6e65000000000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600981527f556e6c6963656e7365000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152615d7090615cca565b15615db057505060408051808201909152600981527f556e6c6963656e736500000000000000000000000000000000000000000000006020820152919050565b604080518082018252600381527f4d4954000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152615e0f90615cca565b15615e4f57505060408051808201909152600381527f4d495400000000000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f47504c2d322e302d6f6e6c79000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152615eae90615cca565b80615f135750604080518082018252601081527f47504c2d322e302d6f722d6c617465720000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152615f1390615cca565b15615f5357505060408051808201909152600981527f474e552047504c763200000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f47504c2d332e302d6f6e6c79000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152615fb290615cca565b806160175750604080518082018252601081527f47504c2d332e302d6f722d6c61746572000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261601790615cca565b1561605757505060408051808201909152600981527f474e552047504c763300000000000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4c47504c2d322e312d6f6e6c7900000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526160b690615cca565b8061611b5750604080518082018252601181527f4c47504c2d322e312d6f722d6c617465720000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261611b90615cca565b1561615b57505060408051808201909152600c81527f474e55204c47504c76322e3100000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4c47504c2d332e302d6f6e6c7900000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526161ba90615cca565b8061621f5750604080518082018252601181527f4c47504c2d332e302d6f722d6c617465720000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261621f90615cca565b1561625f57505060408051808201909152600a81527f474e55204c47504c7633000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f4253442d322d436c617573650000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526162be90615cca565b156162fe57505060408051808201909152600c81527f4253442d322d436c6175736500000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f4253442d332d436c6175736500000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261635d90615cca565b1561639d57505060408051808201909152600c81527f4253442d332d436c6175736500000000000000000000000000000000000000006020820152919050565b604080518082018252600781527f4d504c2d322e3000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526163fc90615cca565b1561643c57505060408051808201909152600781527f4d504c2d322e30000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600781527f4f534c2d332e30000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261649b90615cca565b156164db57505060408051808201909152600781527f4f534c2d332e30000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600a81527f4170616368652d322e30000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261653a90615cca565b1561657a57505060408051808201909152600a81527f4170616368652d322e30000000000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4147504c2d332e302d6f6e6c7900000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526165d990615cca565b8061663e5750604080518082018252601181527f4147504c2d332e302d6f722d6c617465720000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261663e90615cca565b1561667e57505060408051808201909152600a81527f474e55204147504c7633000000000000000000000000000000000000000000006020820152919050565b604080518082018252600881527f4255534c2d312e31000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526166dd90615cca565b1561671d57505060408051808201909152600781527f42534c20312e31000000000000000000000000000000000000000000000000006020820152919050565b604080840151845191516137c99290602001618a79565b60608060005b84518110156167bf57818582815181106167565761675661834b565b602002602001015160405160200161676f929190617ec4565b60405160208183030381529060405291506001855161678e9190617cb5565b81146167b757816040516020016167a59190618be2565b60405160208183030381529060405291505b60010161673a565b5060408051600380825260808201909252600091816020015b60608152602001906001900390816167d857905050905083816000815181106168035761680361834b565b60200260200101819052506040518060400160405280600281526020017f2d63000000000000000000000000000000000000000000000000000000000000815250816001815181106168575761685761834b565b602002602001018190525081816002815181106168765761687661834b565b6020908102919091010152949350505050565b60208083015183518351928401516000936168a79291849190617280565b14159392505050565b604080518082019091526000808252602082015260006168e28460000151856020015185600001518660200151617391565b90508360200151816168f49190617cb5565b84518590616903908390617cb5565b90525060208401525090919050565b604080518082019091526000808252602082015281518351101561693757508161367c565b602080830151908401516001911461695e5750815160208481015190840151829020919020145b801561698f57825184518590616975908390617cb5565b905250825160208501805161698b908390617bf2565b9052505b509192915050565b60408051808201909152600080825260208201526169b68383836174b1565b5092915050565b60606000826000015167ffffffffffffffff8111156169de576169de617da7565b6040519080825280601f01601f191660200182016040528015616a08576020820181803683370190505b50905060006020820190506169b6818560200151866000015161755c565b60606000616a326139ef565b6040805160ff808252612000820190925291925060009190816020015b6060815260200190600190039081616a4f57905050905060006040518060400160405280600381526020017f6e70780000000000000000000000000000000000000000000000000000000000815250828280616aaa906184b8565b935060ff1681518110616abf57616abf61834b565b60200260200101819052506040518060400160405280600781526020017f5e312e33322e3300000000000000000000000000000000000000000000000000815250604051602001616b109190618c23565b604051602081830303815290604052828280616b2b906184b8565b935060ff1681518110616b4057616b4061834b565b60200260200101819052506040518060400160405280600881526020017f76616c6964617465000000000000000000000000000000000000000000000000815250828280616b8d906184b8565b935060ff1681518110616ba257616ba261834b565b602002602001018190525082604051602001616bbe91906183e6565b604051602081830303815290604052828280616bd9906184b8565b935060ff1681518110616bee57616bee61834b565b60200260200101819052506040518060400160405280600a81526020017f2d2d636f6e747261637400000000000000000000000000000000000000000000815250828280616c3b906184b8565b935060ff1681518110616c5057616c5061834b565b6020026020010181905250616c6587846175d6565b8282616c70816184b8565b935060ff1681518110616c8557616c8561834b565b602090810291909101015285515115616d315760408051808201909152600b81527f2d2d7265666572656e636500000000000000000000000000000000000000000060208201528282616cd7816184b8565b935060ff1681518110616cec57616cec61834b565b6020026020010181905250616d058660000151846175d6565b8282616d10816184b8565b935060ff1681518110616d2557616d2561834b565b60200260200101819052505b856080015115616d9f5760408051808201909152601881527f2d2d756e73616665536b697053746f72616765436865636b000000000000000060208201528282616d7a816184b8565b935060ff1681518110616d8f57616d8f61834b565b6020026020010181905250616e05565b8415616e055760408051808201909152601281527f2d2d726571756972655265666572656e6365000000000000000000000000000060208201528282616de4816184b8565b935060ff1681518110616df957616df961834b565b60200260200101819052505b60408601515115616ea15760408051808201909152600d81527f2d2d756e73616665416c6c6f770000000000000000000000000000000000000060208201528282616e4f816184b8565b935060ff1681518110616e6457616e6461834b565b60200260200101819052508560400151828280616e80906184b8565b935060ff1681518110616e9557616e9561834b565b60200260200101819052505b856060015115616f0b5760408051808201909152601481527f2d2d756e73616665416c6c6f7752656e616d657300000000000000000000000060208201528282616eea816184b8565b935060ff1681518110616eff57616eff61834b565b60200260200101819052505b60008160ff1667ffffffffffffffff811115616f2957616f29617da7565b604051908082528060200260200182016040528015616f5c57816020015b6060815260200190600190039081616f475790505b50905060005b8260ff168160ff161015616fb557838160ff1681518110616f8557616f8561834b565b6020026020010151828260ff1681518110616fa257616fa261834b565b6020908102919091010152600101616f62565b50979650505050505050565b6040805180820190915260008082526020820152815183511015616fe657508161367c565b81518351602085015160009291616ffc91617bf2565b6170069190617cb5565b60208401519091506001908214617027575082516020840151819020908220145b80156170425783518551869061703e908390617cb5565b9052505b50929392505050565b600080826000015161706f8560000151866020015186600001518760200151617391565b6170799190617bf2565b90505b8351602085015161708d9190617bf2565b81116169b6578161709d81618c68565b92505082600001516170d48560200151836170b89190617cb5565b86516170c49190617cb5565b8386600001518760200151617391565b6170de9190617bf2565b905061707c565b606060006170f3848461704b565b6170fe906001617bf2565b67ffffffffffffffff81111561711657617116617da7565b60405190808252806020026020018201604052801561714957816020015b60608152602001906001900390816171345790505b50905060005b81518110156153be576171656155e08686616997565b8282815181106171775761717761834b565b602090810291909101015260010161714f565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f01000000000000000083106171d3577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef810000000083106171ff576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc10000831061721d57662386f26fc10000830492506010015b6305f5e1008310617235576305f5e100830492506008015b612710831061724957612710830492506004015b6064831061725b576064830492506002015b600a831061367c5760010192915050565b60006172788383617616565b159392505050565b600080858411617387576020841161733357600084156172cb5760016172a7866020617cb5565b6172b2906008618c82565b6172bd906002618d80565b6172c79190617cb5565b1990505b83518116856172da8989617bf2565b6172e49190617cb5565b805190935082165b81811461731e578784116173065787945050505050614fef565b8361731081618d8c565b9450508284511690506172ec565b6173288785617bf2565b945050505050614fef565b8383206173408588617cb5565b61734a9087617bf2565b91505b85821061738557848220808203617372576173688684617bf2565b9350505050614fef565b61737d600184617cb5565b92505061734d565b505b5092949350505050565b6000838186851161749c576020851161744b57600085156173dd5760016173b9876020617cb5565b6173c4906008618c82565b6173cf906002618d80565b6173d99190617cb5565b1990505b845181166000876173ee8b8b617bf2565b6173f89190617cb5565b855190915083165b82811461743d57818610617425576174188b8b617bf2565b9650505050505050614fef565b8561742f81618c68565b965050838651169050617400565b859650505050505050614fef565b508383206000905b61745d8689617cb5565b821161749a578583208082036174795783945050505050614fef565b617484600185617bf2565b935050818061749290618c68565b925050617453565b505b6174a68787617bf2565b979650505050505050565b604080518082019091526000808252602082015260006174e38560000151866020015186600001518760200151617391565b6020808701805191860191909152519091506174ff9082617cb5565b8352845160208601516175129190617bf2565b81036175215760008552617553565b8351835161752f9190617bf2565b8551869061753e908390617cb5565b905250835161754d9082617bf2565b60208601525b50909392505050565b602081106175945781518352617573602084617bf2565b9250617580602083617bf2565b915061758d602082617cb5565b905061755c565b60001981156175c35760016175aa836020617cb5565b6175b690610100618d80565b6175c09190617cb5565b90505b9151835183169219169190911790915250565b606060006175e48484613ac2565b80516020808301516040519394506175fe93909101618da3565b60405160208183030381529060405291505092915050565b8151815160009190811115617629575081515b6020808501519084015160005b838110156176e257825182518082146176b257600019602087101561769157600184617663896020617cb5565b61766d9190617bf2565b617678906008618c82565b617683906002618d80565b61768d9190617cb5565b1990505b81811683821681810391146176af57975061367c9650505050505050565b50505b6176bd602086617bf2565b94506176ca602085617bf2565b935050506020816176db9190617bf2565b9050617636565b50845186516141709190618dfb565b610c9f80618e1c83390190565b6112a680619abb83390190565b6117988061ad6183390190565b61155a8061c4f983390190565b6040518060e0016040528060608152602001606081526020016060815260200160001515815260200160001515815260200160001515815260200161776861776d565b905290565b604051806101000160405280600015158152602001600015158152602001606081526020016000801916815260200160608152602001606081526020016000151581526020016177686040518060800160405280600081526020016000815260200160008152602001600081525090565b602080825282518282018190526000918401906040840190835b8181101561781f5783516001600160a01b03168352602093840193909201916001016177f8565b509095945050505050565b60005b8381101561784557818101518382015260200161782d565b50506000910152565b6000815180845261786681602086016020860161782a565b601f01601f19169290920160200192915050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015617976577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452815180516001600160a01b03168652602090810151604082880181905281519088018190529101906060600582901b88018101919088019060005b8181101561795c577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa08a850301835261794684865161784e565b602095860195909450929092019160010161790c565b5091975050506020948501949290920191506001016178a2565b50929695505050505050565b600081518084526020840193506020830160005b828110156179d65781517fffffffff0000000000000000000000000000000000000000000000000000000016865260209586019590910190600101617996565b5093949350505050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015617976577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08786030184528151805160408752617a4c604088018261784e565b9050602082015191508681036020880152617a678183617982565b965050506020938401939190910190600101617a08565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015617976577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452617ae085835161784e565b94506020938401939190910190600101617aa6565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015617976577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc087860301845281516001600160a01b0381511686526020810151905060406020870152617b766040870182617982565b9550506020938401939190910190600101617b1d565b6001600160a01b03851681528360208201526001600160a01b0383166040820152608060608201526000614170608083018461784e565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8082018082111561367c5761367c617bc3565b600181811c90821680617c1957607f821691505b6020821081036158bb577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060208284031215617c6457600080fd5b5051919050565b600060208284031215617c7d57600080fd5b815180151581146136f657600080fd5b8381526001600160a01b03831660208201526060604082015260006158a1606083018461784e565b8181038181111561367c5761367c617bc3565b6001600160a01b0383168152604060208201526000614fef604083018461784e565b6020815260006136f6602083018461784e565b7f4661696c656420746f206465706c6f7920636f6e747261637420000000000000815260008351617d3581601a85016020880161782a565b7f3a20000000000000000000000000000000000000000000000000000000000000601a918401918201528351617d7281601c84016020880161782a565b01601c01949350505050565b600060208284031215617d9057600080fd5b81516001600160a01b03811681146136f657600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040516060810167ffffffffffffffff81118282101715617df957617df9617da7565b60405290565b60008067ffffffffffffffff841115617e1a57617e1a617da7565b50604051601f19601f85018116603f0116810181811067ffffffffffffffff82111715617e4957617e49617da7565b604052838152905080828401851015617e6157600080fd5b6153be84602083018561782a565b600082601f830112617e8057600080fd5b6136f683835160208501617dff565b600060208284031215617ea157600080fd5b815167ffffffffffffffff811115617eb857600080fd5b61367884828501617e6f565b60008351617ed681846020880161782a565b835190830190617eea81836020880161782a565b01949350505050565b7f4661696c656420746f206465706c6f7920636f6e747261637420000000000000815260008351617f2b81601a85016020880161782a565b7f207573696e6720636f6e7374727563746f722064617461202200000000000000601a918401918201528351617f6881603384016020880161782a565b7f220000000000000000000000000000000000000000000000000000000000000060339290910191820152603401949350505050565b60408152600b60408201527f464f554e4452595f4f555400000000000000000000000000000000000000000060608201526080602082015260006136f6608083018461784e565b600060208284031215617ff757600080fd5b815167ffffffffffffffff81111561800e57600080fd5b8201601f8101841361801f57600080fd5b61367884825160208401617dff565b60008551618040818460208a0161782a565b7f2f00000000000000000000000000000000000000000000000000000000000000908301908152855161807a816001840160208a0161782a565b7f2f000000000000000000000000000000000000000000000000000000000000006001929091019182015284516180b881600284016020890161782a565b6001818301019150507f2f00000000000000000000000000000000000000000000000000000000000000600182015283516180fa81600284016020880161782a565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600292909101918201526007019695505050505050565b604081526000618145604083018461784e565b8281036020840152600481527f2e6173740000000000000000000000000000000000000000000000000000000060208201526040810191505092915050565b7f436f756c64206e6f742066696e642041535420696e20617274696661637420008152600082516181bc81601f85016020870161782a565b7f2e205365742060617374203d20747275656020696e20666f756e6472792e746f601f9390910192830152507f6d6c000000000000000000000000000000000000000000000000000000000000603f820152604101919050565b604081526000618229604083018461784e565b8281036020840152601181527f2e6173742e6162736f6c7574655061746800000000000000000000000000000060208201526040810191505092915050565b60408152600061827b604083018461784e565b8281036020840152600c81527f2e6173742e6c6963656e7365000000000000000000000000000000000000000060208201526040810191505092915050565b7f2e6d657461646174612e736f75726365732e5b270000000000000000000000008152600082516182f281601485016020870161782a565b7f275d2e6b656363616b32353600000000000000000000000000000000000000006014939091019283015250602001919050565b604081526000618339604083018561784e565b82810360208401526136f2818561784e565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f22000000000000000000000000000000000000000000000000000000000000008152600082516183b281600185016020870161782a565b7f22000000000000000000000000000000000000000000000000000000000000006001939091019283015250600201919050565b600082516183f881846020870161782a565b7f2f6275696c642d696e666f000000000000000000000000000000000000000000920191825250600b01919050565b7f436f756c64206e6f742066696e64206275696c642d696e666f2066696c65207781527f697468206d61746368696e6720736f7572636520636f6465206861736820666f60208201527f7220636f6e7472616374200000000000000000000000000000000000000000006040820152600082516184ab81604b85016020870161782a565b91909101604b0192915050565b600060ff821660ff81036184ce576184ce617bc3565b60010192915050565b7f406f70656e7a657070656c696e2f646566656e6465722d6465706c6f792d636c81527f69656e742d636c6940000000000000000000000000000000000000000000000060208201526000825161853581602985016020870161782a565b9190910160290192915050565b60408152601660408201527f4f50454e5a455050454c494e5f424153485f504154480000000000000000000060608201526080602082015260006136f6608083018461784e565b60006020828403121561859b57600080fd5b815167ffffffffffffffff8111156185b257600080fd5b8201606081850312156185c457600080fd5b6185cc617dd6565b81518060030b81146185dd57600080fd5b8152602082015167ffffffffffffffff8111156185f957600080fd5b61860586828501617e6f565b602083015250604082015167ffffffffffffffff81111561862557600080fd5b61863186828501617e6f565b604083015250949350505050565b7f4661696c656420746f2072756e206261736820636f6d6d616e6420776974682081527f220000000000000000000000000000000000000000000000000000000000000060208201526000825161869d81602185016020870161782a565b7f222e20496620796f7520617265207573696e672057696e646f77732c2073657460219390910192830152507f20746865204f50454e5a455050454c494e5f424153485f5041544820656e766960418201527f726f6e6d656e74207661726961626c6520746f207468652066756c6c7920717560618201527f616c69666965642070617468206f66207468652062617368206578656375746160818201527f626c652e20466f72206578616d706c652c20696620796f75206172652075736960a18201527f6e672047697420666f722057696e646f77732c206164642074686520666f6c6c60c18201527f6f77696e67206c696e6520696e20746865202e656e762066696c65206f66207960e18201527f6f75722070726f6a65637420287573696e6720666f727761726420736c6173686101018201527f6573293a0a4f50454e5a455050454c494e5f424153485f504154483d22433a2f6101218201527f50726f6772616d2046696c65732f4769742f62696e2f6261736822000000000061014182015261015c01919050565b7f4661696c656420746f2066696e64206c696e652077697468207072656669782081527f270000000000000000000000000000000000000000000000000000000000000060208201526000835161888981602185016020880161782a565b7f2720696e206f75747075743a200000000000000000000000000000000000000060219184019182015283516188c681602e84016020880161782a565b01602e01949350505050565b7f4661696c656420746f2072756e2075706772616465207361666574792076616c81527f69646174696f6e3a20000000000000000000000000000000000000000000000060208201526000825161853581602985016020870161782a565b7f55706772616465207361666574792076616c69646174696f6e206661696c656481527f3a0a00000000000000000000000000000000000000000000000000000000000060208201526000825161898e81602285016020870161782a565b9190910160220192915050565b7f436f6e7472616374206e616d65200000000000000000000000000000000000008152600082516189d381600e85016020870161782a565b7f206d75737420626520696e2074686520666f726d6174204d79436f6e74726163600e9390910192830152507f742e736f6c3a4d79436f6e7472616374206f72204d79436f6e74726163742e73602e8201527f6f6c206f72206f75742f4d79436f6e74726163742e736f6c2f4d79436f6e7472604e8201527f6163742e6a736f6e000000000000000000000000000000000000000000000000606e820152607601919050565b7f53504458206c6963656e7365206964656e746966696572200000000000000000815260008351618ab181601885016020880161782a565b7f20696e20000000000000000000000000000000000000000000000000000000006018918401918201528351618aee81601c84016020880161782a565b7f20646f6573206e6f74206c6f6f6b206c696b65206120737570706f7274656420601c92909101918201527f6c6963656e736520666f7220626c6f636b206578706c6f726572207665726966603c8201527f69636174696f6e2e205573652074686520606c6963656e73655479706560206f605c8201527f7074696f6e20746f20737065636966792061206c6963656e736520747970652c607c8201527f206f7220736574207468652060736b69704c6963656e73655479706560206f70609c8201527f74696f6e20746f2060747275656020746f20736b69702e00000000000000000060bc82015260d301949350505050565b60008251618bf481846020870161782a565b7f2000000000000000000000000000000000000000000000000000000000000000920191825250600101919050565b7f406f70656e7a657070656c696e2f75706772616465732d636f72654000000000815260008251618c5b81601c85016020870161782a565b91909101601c0192915050565b60006000198203618c7b57618c7b617bc3565b5060010190565b808202811582820484141761367c5761367c617bc3565b6001815b6001841115618cd457808504811115618cb857618cb8617bc3565b6001841615618cc657908102905b60019390931c928002618c9d565b935093915050565b600082618ceb5750600161367c565b81618cf85750600061367c565b8160018114618d0e5760028114618d1857618d34565b600191505061367c565b60ff841115618d2957618d29617bc3565b50506001821b61367c565b5060208310610133831016604e8410600b8410161715618d57575081810a61367c565b618d646000198484618c99565b8060001904821115618d7857618d78617bc3565b029392505050565b60006136f68383618cdc565b600081618d9b57618d9b617bc3565b506000190190565b60008351618db581846020880161782a565b7f3a000000000000000000000000000000000000000000000000000000000000009083019081528351618def81600184016020880161782a565b01600101949350505050565b81810360008312801583831316838312821617156169b6576169b6617bc356fe608060405234801561001057600080fd5b50604051610c9f380380610c9f83398101604081905261002f9161010d565b8181600361003d83826101ff565b50600461004a82826101ff565b50505050506102bd565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261007b57600080fd5b81516001600160401b0381111561009457610094610054565b604051601f8201601f19908116603f011681016001600160401b03811182821017156100c2576100c2610054565b6040528181528382016020018510156100da57600080fd5b60005b828110156100f9576020818601810151838301820152016100dd565b506000918101602001919091529392505050565b6000806040838503121561012057600080fd5b82516001600160401b0381111561013657600080fd5b6101428582860161006a565b602085015190935090506001600160401b0381111561016057600080fd5b61016c8582860161006a565b9150509250929050565b600181811c9082168061018a57607f821691505b6020821081036101aa57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156101fa57806000526020600020601f840160051c810160208510156101d75750805b601f840160051c820191505b818110156101f757600081556001016101e3565b50505b505050565b81516001600160401b0381111561021857610218610054565b61022c816102268454610176565b846101b0565b6020601f82116001811461026057600083156102485750848201515b600019600385901b1c1916600184901b1784556101f7565b600084815260208120601f198516915b828110156102905787850151825560209485019460019092019101610270565b50848210156102ae5786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b6109d3806102cc6000396000f3fe608060405234801561001057600080fd5b50600436106100be5760003560e01c806340c10f191161007657806395d89b411161005b57806395d89b4114610183578063a9059cbb1461018b578063dd62ed3e1461019e57600080fd5b806340c10f191461013857806370a082311461014d57600080fd5b806318160ddd116100a757806318160ddd1461010457806323b872dd14610116578063313ce5671461012957600080fd5b806306fdde03146100c3578063095ea7b3146100e1575b600080fd5b6100cb6101e4565b6040516100d891906107bf565b60405180910390f35b6100f46100ef366004610854565b610276565b60405190151581526020016100d8565b6002545b6040519081526020016100d8565b6100f461012436600461087e565b610290565b604051601281526020016100d8565b61014b610146366004610854565b6102b4565b005b61010861015b3660046108bb565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6100cb6102c2565b6100f4610199366004610854565b6102d1565b6101086101ac3660046108dd565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6060600380546101f390610910565b80601f016020809104026020016040519081016040528092919081815260200182805461021f90610910565b801561026c5780601f106102415761010080835404028352916020019161026c565b820191906000526020600020905b81548152906001019060200180831161024f57829003601f168201915b5050505050905090565b6000336102848185856102df565b60019150505b92915050565b60003361029e8582856102f1565b6102a98585856103c5565b506001949350505050565b6102be8282610470565b5050565b6060600480546101f390610910565b6000336102848185856103c5565b6102ec83838360016104cc565b505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146103bf57818110156103b0576040517ffb8f41b200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416600482015260248101829052604481018390526064015b60405180910390fd5b6103bf848484840360006104cc565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8316610415576040517f96c6fd1e000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff8216610465576040517fec442f05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b6102ec838383610614565b73ffffffffffffffffffffffffffffffffffffffff82166104c0576040517fec442f05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b6102be60008383610614565b73ffffffffffffffffffffffffffffffffffffffff841661051c576040517fe602df05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff831661056c576040517f94280d62000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260016020908152604080832093871683529290522082905580156103bf578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161060691815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff831661064c5780600260008282546106419190610963565b909155506106fe9050565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260208190526040902054818110156106d2576040517fe450d38c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8516600482015260248101829052604481018390526064016103a7565b73ffffffffffffffffffffffffffffffffffffffff841660009081526020819052604090209082900390555b73ffffffffffffffffffffffffffffffffffffffff821661072757600280548290039055610753565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090208054820190555b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516107b291815260200190565b60405180910390a3505050565b602081526000825180602084015260005b818110156107ed57602081860181015160408684010152016107d0565b5060006040828501015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011684010191505092915050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461084f57600080fd5b919050565b6000806040838503121561086757600080fd5b6108708361082b565b946020939093013593505050565b60008060006060848603121561089357600080fd5b61089c8461082b565b92506108aa6020850161082b565b929592945050506040919091013590565b6000602082840312156108cd57600080fd5b6108d68261082b565b9392505050565b600080604083850312156108f057600080fd5b6108f98361082b565b91506109076020840161082b565b90509250929050565b600181811c9082168061092457607f821691505b60208210810361095d577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b8082018082111561028a577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea26469706673582212207e804ca539d49155d2b6bc19268ce22f9f857027c75247d69fb0d56a089c93d464736f6c634300081a0033608060405234801561001057600080fd5b506040516112a63803806112a683398101604081905261002f91610110565b604051806040016040528060048152602001635a65746160e01b815250604051806040016040528060048152602001635a45544160e01b815250816003908161007891906101e2565b50600461008582826101e2565b5050506001600160a01b03821615806100a557506001600160a01b038116155b156100c35760405163e6c4247b60e01b815260040160405180910390fd5b600680546001600160a01b039384166001600160a01b031991821617909155600780549290931691161790556102a0565b80516001600160a01b038116811461010b57600080fd5b919050565b6000806040838503121561012357600080fd5b61012c836100f4565b915061013a602084016100f4565b90509250929050565b634e487b7160e01b600052604160045260246000fd5b600181811c9082168061016d57607f821691505b60208210810361018d57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156101dd57806000526020600020601f840160051c810160208510156101ba5750805b601f840160051c820191505b818110156101da57600081556001016101c6565b50505b505050565b81516001600160401b038111156101fb576101fb610143565b61020f816102098454610159565b84610193565b6020601f821160018114610243576000831561022b5750848201515b600019600385901b1c1916600184901b1784556101da565b600084815260208120601f198516915b828110156102735787850151825560209485019460019092019101610253565b50848210156102915786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b610ff7806102af6000396000f3fe608060405234801561001057600080fd5b506004361061011b5760003560e01c806342966c68116100b257806379cc679011610081578063a9059cbb11610066578063a9059cbb1461028e578063bff9662a146102a1578063dd62ed3e146102c157600080fd5b806379cc67901461027357806395d89b411461028657600080fd5b806342966c68146102025780635b1125911461021557806370a0823114610235578063779e3b631461026b57600080fd5b80631e458bee116100ee5780631e458bee1461018857806323b872dd1461019b578063313ce567146101ae578063328a01d0146101bd57600080fd5b806306fdde0314610120578063095ea7b31461013e57806315d57fd41461016157806318160ddd14610176575b600080fd5b610128610307565b6040516101359190610d97565b60405180910390f35b61015161014c366004610e2c565b610399565b6040519015158152602001610135565b61017461016f366004610e56565b6103b3565b005b6002545b604051908152602001610135565b610174610196366004610e89565b61057e565b6101516101a9366004610ebc565b610631565b60405160128152602001610135565b6007546101dd9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610135565b610174610210366004610ef9565b610655565b6006546101dd9073ffffffffffffffffffffffffffffffffffffffff1681565b61017a610243366004610f12565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b610174610662565b610174610281366004610e2c565b610786565b610128610837565b61015161029c366004610e2c565b610846565b6005546101dd9073ffffffffffffffffffffffffffffffffffffffff1681565b61017a6102cf366004610e56565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b60606003805461031690610f34565b80601f016020809104026020016040519081016040528092919081815260200182805461034290610f34565b801561038f5780601f106103645761010080835404028352916020019161038f565b820191906000526020600020905b81548152906001019060200180831161037257829003601f168201915b5050505050905090565b6000336103a7818585610854565b60019150505b92915050565b60075473ffffffffffffffffffffffffffffffffffffffff1633148015906103f3575060065473ffffffffffffffffffffffffffffffffffffffff163314155b15610431576040517fcdfcef970000000000000000000000000000000000000000000000000000000081523360048201526024015b60405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff82161580610468575073ffffffffffffffffffffffffffffffffffffffff8116155b1561049f576040517fe6c4247b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6006805473ffffffffffffffffffffffffffffffffffffffff8481167fffffffffffffffffffffffff0000000000000000000000000000000000000000928316811790935560058054918516919092161790556040805133815260208101929092527fe79965b5c67dcfb2cf5fe152715e4a7256cee62a3d5dd8484fd8a8539eb8beff910160405180910390a16040805133815273ffffffffffffffffffffffffffffffffffffffff831660208201527f1b9352454524a57a51f24f67dc66d898f616922cd1f7a12d73570ece12b1975c910160405180910390a15050565b60055473ffffffffffffffffffffffffffffffffffffffff1633146105d1576040517f3fe32fba000000000000000000000000000000000000000000000000000000008152336004820152602401610428565b6105db8383610866565b808373ffffffffffffffffffffffffffffffffffffffff167fc263b302aec62d29105026245f19e16f8e0137066ccd4a8bd941f716bd4096bb8460405161062491815260200190565b60405180910390a3505050565b60003361063f8582856108c6565b61064a858585610995565b506001949350505050565b61065f3382610a40565b50565b60075473ffffffffffffffffffffffffffffffffffffffff1633146106b5576040517fe700765e000000000000000000000000000000000000000000000000000000008152336004820152602401610428565b60065473ffffffffffffffffffffffffffffffffffffffff16610704576040517fe6c4247b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600654600780547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff90921691821790556040805133815260208101929092527f5104c9abdc7d111c2aeb4ce890ac70274a4be2ee83f46a62551be5e6ebc82dd0910160405180910390a1565b60055473ffffffffffffffffffffffffffffffffffffffff1633146107d9576040517f3fe32fba000000000000000000000000000000000000000000000000000000008152336004820152602401610428565b6107e38282610a9c565b8173ffffffffffffffffffffffffffffffffffffffff167f919f7e2092ffcc9d09f599be18d8152860b0c054df788a33bc549cdd9d0f15b18260405161082b91815260200190565b60405180910390a25050565b60606004805461031690610f34565b6000336103a7818585610995565b6108618383836001610ab1565b505050565b73ffffffffffffffffffffffffffffffffffffffff82166108b6576040517fec442f0500000000000000000000000000000000000000000000000000000000815260006004820152602401610428565b6108c260008383610bf9565b5050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811461098f5781811015610980576040517ffb8f41b200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff841660048201526024810182905260448101839052606401610428565b61098f84848484036000610ab1565b50505050565b73ffffffffffffffffffffffffffffffffffffffff83166109e5576040517f96c6fd1e00000000000000000000000000000000000000000000000000000000815260006004820152602401610428565b73ffffffffffffffffffffffffffffffffffffffff8216610a35576040517fec442f0500000000000000000000000000000000000000000000000000000000815260006004820152602401610428565b610861838383610bf9565b73ffffffffffffffffffffffffffffffffffffffff8216610a90576040517f96c6fd1e00000000000000000000000000000000000000000000000000000000815260006004820152602401610428565b6108c282600083610bf9565b610aa78233836108c6565b6108c28282610a40565b73ffffffffffffffffffffffffffffffffffffffff8416610b01576040517fe602df0500000000000000000000000000000000000000000000000000000000815260006004820152602401610428565b73ffffffffffffffffffffffffffffffffffffffff8316610b51576040517f94280d6200000000000000000000000000000000000000000000000000000000815260006004820152602401610428565b73ffffffffffffffffffffffffffffffffffffffff8085166000908152600160209081526040808320938716835292905220829055801561098f578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051610beb91815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff8316610c31578060026000828254610c269190610f87565b90915550610ce39050565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205481811015610cb7576040517fe450d38c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff851660048201526024810182905260448101839052606401610428565b73ffffffffffffffffffffffffffffffffffffffff841660009081526020819052604090209082900390555b73ffffffffffffffffffffffffffffffffffffffff8216610d0c57600280548290039055610d38565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090208054820190555b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161062491815260200190565b602081526000825180602084015260005b81811015610dc55760208186018101516040868401015201610da8565b5060006040828501015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011684010191505092915050565b803573ffffffffffffffffffffffffffffffffffffffff81168114610e2757600080fd5b919050565b60008060408385031215610e3f57600080fd5b610e4883610e03565b946020939093013593505050565b60008060408385031215610e6957600080fd5b610e7283610e03565b9150610e8060208401610e03565b90509250929050565b600080600060608486031215610e9e57600080fd5b610ea784610e03565b95602085013595506040909401359392505050565b600080600060608486031215610ed157600080fd5b610eda84610e03565b9250610ee860208501610e03565b929592945050506040919091013590565b600060208284031215610f0b57600080fd5b5035919050565b600060208284031215610f2457600080fd5b610f2d82610e03565b9392505050565b600181811c90821680610f4857607f821691505b602082108103610f81577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b808201808211156103ad577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea2646970667358221220085f01204b33dc17013c78c74fbca32a3da2c0b384ce7c8878c889551af28c6164736f6c634300081a003360a060405234801561001057600080fd5b5060405161179838038061179883398101604081905261002f916101e5565b60016000556002805460ff191690556001600160a01b038316158061005b57506001600160a01b038216155b8061006d57506001600160a01b038116155b1561008b5760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b0383166080526100a3600082610134565b506100ce7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a82610134565b506100f97f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e483610134565b5061011260008051602061177883398151915282610134565b5061012b60008051602061177883398151915283610134565b50505050610228565b60008281526001602090815260408083206001600160a01b038516845290915281205460ff166101bf5760008381526001602081815260408084206001600160a01b0387168086529252808420805460ff19169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45060016101c3565b5060005b92915050565b80516001600160a01b03811681146101e057600080fd5b919050565b6000806000606084860312156101fa57600080fd5b610203846101c9565b9250610211602085016101c9565b915061021f604085016101c9565b90509250925092565b60805161151961025f6000396000818161019e01528181610500015281816105620152818161099101526109f301526115196000f3fe608060405234801561001057600080fd5b506004361061016c5760003560e01c806385f438c1116100cd578063c8a0236211610081578063d936547e11610066578063d936547e14610355578063d9caed1214610378578063e63ab1e91461038b57600080fd5b8063c8a023621461032f578063d547741f1461034257600080fd5b80639a590427116100b25780639a590427146103015780639b19251a14610314578063a217fddf1461032757600080fd5b806385f438c11461029457806391d14854146102bb57600080fd5b806336568abe11610124578063570618e111610109578063570618e11461025a5780635c975abb146102815780638456cb591461028c57600080fd5b806336568abe1461023f5780633f4ba83a1461025257600080fd5b806321fc65f21161015557806321fc65f2146101e5578063248a9ca3146101fa5780632f2ff15d1461022c57600080fd5b806301ffc9a714610171578063116191b614610199575b600080fd5b61018461017f366004611224565b6103b2565b60405190151581526020015b60405180910390f35b6101c07f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610190565b6101f86101f336600461128f565b61044b565b005b61021e61020836600461132c565b6000908152600160208190526040909120015490565b604051908152602001610190565b6101f861023a366004611345565b61064c565b6101f861024d366004611345565b610678565b6101f86106d6565b61021e7f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a81565b60025460ff16610184565b6101f861070b565b61021e7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b6101846102c9366004611345565b600091825260016020908152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b6101f861030f366004611371565b61073d565b6101f8610322366004611371565b61080b565b61021e600081565b6101f861033d36600461128f565b6108dc565b6101f8610350366004611345565b610ac3565b610184610363366004611371565b60036020526000908152604090205460ff1681565b6101f861038636600461138c565b610ae9565b61021e7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061044557507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b610453610c15565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461047d81610c58565b610485610c62565b73ffffffffffffffffffffffffffffffffffffffff861660009081526003602052604090205460ff166104e4576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61052573ffffffffffffffffffffffffffffffffffffffff87167f000000000000000000000000000000000000000000000000000000000000000086610ca1565b6040517f5131ab5900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690635131ab599061059f9089908990899089908990600401611412565b600060405180830381600087803b1580156105b957600080fd5b505af11580156105cd573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167f85b5be9cf454e05e0bddf49315178102227c312078eefa3c00294fb4d912ae4e8686866040516106329392919061146f565b60405180910390a3506106456001600055565b5050505050565b6000828152600160208190526040909120015461066881610c58565b6106728383610d2e565b50505050565b73ffffffffffffffffffffffffffffffffffffffff811633146106c7576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6106d18282610ddb565b505050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61070081610c58565b610708610e7c565b50565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61073581610c58565b610708610edb565b7f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a61076781610c58565b73ffffffffffffffffffffffffffffffffffffffff82166107b4576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216600081815260036020526040808220805460ff19169055517f51085ddf9ebdded84b76e829eb58c4078e4b5bdf97d9a94723f336039da467919190a25050565b7f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a61083581610c58565b73ffffffffffffffffffffffffffffffffffffffff8216610882576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216600081815260036020526040808220805460ff19166001179055517faab7954e9d246b167ef88aeddad35209ca2489d95a8aeb59e288d9b19fae5a549190a25050565b6108e4610c15565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461090e81610c58565b610916610c62565b73ffffffffffffffffffffffffffffffffffffffff861660009081526003602052604090205460ff16610975576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6109b673ffffffffffffffffffffffffffffffffffffffff87167f000000000000000000000000000000000000000000000000000000000000000086610ca1565b6040517fb8969bd400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063b8969bd490610a309089908990899089908990600401611412565b600060405180830381600087803b158015610a4a57600080fd5b505af1158015610a5e573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fb9d4efa96044e5f5e03e696fa9ae2ff66911cc27e8a637c3627c75bc5b2241c88686866040516106329392919061146f565b60008281526001602081905260409091200154610adf81610c58565b6106728383610ddb565b610af1610c15565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e4610b1b81610c58565b610b23610c62565b73ffffffffffffffffffffffffffffffffffffffff841660009081526003602052604090205460ff16610b82576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610ba373ffffffffffffffffffffffffffffffffffffffff85168484610ca1565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f9b1bfa7fa9ee420a16e124f794c35ac9f90472acc99140eb2f6447c714cad8eb84604051610c0291815260200190565b60405180910390a3506106d16001600055565b600260005403610c51576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b6107088133610f18565b60025460ff1615610c9f576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6040805173ffffffffffffffffffffffffffffffffffffffff8416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb000000000000000000000000000000000000000000000000000000001790526106d1908490610fa9565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff16610dd357600083815260016020818152604080842073ffffffffffffffffffffffffffffffffffffffff87168086529252808420805460ff19169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a4506001610445565b506000610445565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff1615610dd357600083815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff86168085529252808320805460ff1916905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a4506001610445565b610e8461103f565b6002805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b610ee3610c62565b6002805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258610eb13390565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16610fa5576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82166004820152602481018390526044015b60405180910390fd5b5050565b6000610fcb73ffffffffffffffffffffffffffffffffffffffff84168361107b565b90508051600014158015610ff0575080806020019051810190610fee9190611492565b155b156106d1576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84166004820152602401610f9c565b60025460ff16610c9f576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606061108983836000611090565b9392505050565b6060814710156110ce576040517fcd786059000000000000000000000000000000000000000000000000000000008152306004820152602401610f9c565b6000808573ffffffffffffffffffffffffffffffffffffffff1684866040516110f791906114b4565b60006040518083038185875af1925050503d8060008114611134576040519150601f19603f3d011682016040523d82523d6000602084013e611139565b606091505b5091509150611149868383611153565b9695505050505050565b60608261116857611163826111e2565b611089565b815115801561118c575073ffffffffffffffffffffffffffffffffffffffff84163b155b156111db576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85166004820152602401610f9c565b5080611089565b8051156111f25780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006020828403121561123657600080fd5b81357fffffffff000000000000000000000000000000000000000000000000000000008116811461108957600080fd5b803573ffffffffffffffffffffffffffffffffffffffff8116811461128a57600080fd5b919050565b6000806000806000608086880312156112a757600080fd5b6112b086611266565b94506112be60208701611266565b935060408601359250606086013567ffffffffffffffff8111156112e157600080fd5b8601601f810188136112f257600080fd5b803567ffffffffffffffff81111561130957600080fd5b88602082840101111561131b57600080fd5b959894975092955050506020019190565b60006020828403121561133e57600080fd5b5035919050565b6000806040838503121561135857600080fd5b8235915061136860208401611266565b90509250929050565b60006020828403121561138357600080fd5b61108982611266565b6000806000606084860312156113a157600080fd5b6113aa84611266565b92506113b860208501611266565b929592945050506040919091013590565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff8616815273ffffffffffffffffffffffffffffffffffffffff851660208201528360408201526080606082015260006114646080830184866113c9565b979650505050505050565b8381526040602082015260006114896040830184866113c9565b95945050505050565b6000602082840312156114a457600080fd5b8151801515811461108957600080fd5b6000825160005b818110156114d557602081860181015185830152016114bb565b50600092019182525091905056fea26469706673582212207ea3ad4ba4a6d39c3be3cec464753448900300ac3b508b4000815de5b914c53064736f6c634300081a00338619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a60c060405260001960035534801561001657600080fd5b5060405161155a38038061155a83398101604081905261003591610220565b60016000819055805460ff19169055838383836001600160a01b038416158061006557506001600160a01b038316155b8061007757506001600160a01b038216155b8061008957506001600160a01b038116155b156100a75760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b03808516608052831660a0526100c5600082610154565b506100f07f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e483610154565b5061011b7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb83610154565b506101467f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a82610154565b505050505050505050610274565b60008281526002602090815260408083206001600160a01b038516845290915281205460ff166101fa5760008381526002602090815260408083206001600160a01b03861684529091529020805460ff191660011790556101b23390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45060016101fe565b5060005b92915050565b80516001600160a01b038116811461021b57600080fd5b919050565b6000806000806080858703121561023657600080fd5b61023f85610204565b935061024d60208601610204565b925061025b60408601610204565b915061026960608601610204565b905092959194509250565b60805160a0516112826102d86000396000818161021d01528181610531015281816108240152818161097b01528181610ad00152610bf20152600081816101d1015281816104a1015281816105040152818161079401526107f701526112826000f3fe608060405234801561001057600080fd5b50600436106101775760003560e01c80635e3e9fef116100d857806391d148541161008c578063d547741f11610066578063d547741f14610386578063d5abeb0114610399578063e63ab1e9146103a257600080fd5b806391d1485414610311578063a217fddf14610357578063a783c7891461035f57600080fd5b8063743e0c9b116100bd578063743e0c9b146102cf5780638456cb59146102e257806385f438c1146102ea57600080fd5b80635e3e9fef146102a95780636f8b44b0146102bc57600080fd5b8063248a9ca31161012f57806336568abe1161011457806336568abe146102835780633f4ba83a146102965780635c975abb1461029e57600080fd5b8063248a9ca31461023f5780632f2ff15d1461027057600080fd5b8063106e629011610160578063106e6290146101b9578063116191b6146101cc57806321e093b11461021857600080fd5b806301ffc9a71461017c57806302d5c899146101a4575b600080fd5b61018f61018a366004610fb4565b6103c9565b60405190151581526020015b60405180910390f35b6101b76101b2366004611026565b610462565b005b6101b76101c73660046110b8565b6105f7565b6101f37f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161019b565b6101f37f000000000000000000000000000000000000000000000000000000000000000081565b61026261024d3660046110eb565b60009081526002602052604090206001015490565b60405190815260200161019b565b6101b761027e366004611104565b61069c565b6101b7610291366004611104565b6106c7565b6101b7610720565b60015460ff1661018f565b6101b76102b7366004611026565b610755565b6101b76102ca3660046110eb565b6108d0565b6101b76102dd3660046110eb565b61093e565b6101b76109e8565b6102627f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b61018f61031f366004611104565b600091825260026020908152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b610262600081565b6102627f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb81565b6101b7610394366004611104565b610a1a565b61026260035481565b6102627f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061045c57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b61046a610a3f565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461049481610a82565b61049c610a8c565b6104c77f00000000000000000000000000000000000000000000000000000000000000008684610acb565b6040517fb8969bd400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063b8969bd490610561907f0000000000000000000000000000000000000000000000000000000000000000908a908a908a908a90600401611179565b600060405180830381600087803b15801561057b57600080fd5b505af115801561058f573d6000803e3d6000fd5b505050508573ffffffffffffffffffffffffffffffffffffffff167fba96f26bdda53eb8c8ba39045dfb4ff39753fbc7a6edcf250a88e75e78d102fe8686866040516105dd939291906111d6565b60405180910390a2506105f06001600055565b5050505050565b6105ff610a3f565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461062981610a82565b610631610a8c565b61063c848484610acb565b8373ffffffffffffffffffffffffffffffffffffffff167f884edad9ce6fa2440d8a54cc123490eb96d2768479d49ff9c7366125a94243648460405161068491815260200190565b60405180910390a2506106976001600055565b505050565b6000828152600260205260409020600101546106b781610a82565b6106c18383610c53565b50505050565b73ffffffffffffffffffffffffffffffffffffffff81163314610716576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6106978282610d53565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61074a81610a82565b610752610e12565b50565b61075d610a3f565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461078781610a82565b61078f610a8c565b6107ba7f00000000000000000000000000000000000000000000000000000000000000008684610acb565b6040517f5131ab5900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690635131ab5990610854907f0000000000000000000000000000000000000000000000000000000000000000908a908a908a908a90600401611179565b600060405180830381600087803b15801561086e57600080fd5b505af1158015610882573d6000803e3d6000fd5b505050508573ffffffffffffffffffffffffffffffffffffffff167f7772f56296d3a5202974a45c61c9188d844ab4d6eeb18c851e4b8d5384ca6ced8686866040516105dd939291906111d6565b7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb6108fa81610a82565b610902610a8c565b60038290556040518281527f7810bd47de260c3e9ee10061cf438099dd12256c79485f12f94dbccc981e806c9060200160405180910390a15050565b610946610a8c565b6040517f79cc6790000000000000000000000000000000000000000000000000000000008152336004820152602481018290527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16906379cc679090604401600060405180830381600087803b1580156109d457600080fd5b505af11580156105f0573d6000803e3d6000fd5b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610a1281610a82565b610752610e8f565b600082815260026020526040902060010154610a3581610a82565b6106c18383610d53565b600260005403610a7b576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b6107528133610ee8565b60015460ff1615610ac9576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6003547f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b39573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b5d91906111f9565b610b679084611212565b1115610b9f576040517fc30436e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f1e458bee00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff848116600483015260248201849052604482018390527f00000000000000000000000000000000000000000000000000000000000000001690631e458bee90606401600060405180830381600087803b158015610c3657600080fd5b505af1158015610c4a573d6000803e3d6000fd5b50505050505050565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff16610d4b57600083815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff86168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055610ce93390565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a450600161045c565b50600061045c565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff1615610d4b57600083815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8616808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a450600161045c565b610e1a610f78565b600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b610e97610a8c565b600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016811790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25833610e65565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16610f74576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff821660048201526024810183905260440160405180910390fd5b5050565b60015460ff16610ac9576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060208284031215610fc657600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610ff657600080fd5b9392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461102157600080fd5b919050565b60008060008060006080868803121561103e57600080fd5b61104786610ffd565b945060208601359350604086013567ffffffffffffffff81111561106a57600080fd5b8601601f8101881361107b57600080fd5b803567ffffffffffffffff81111561109257600080fd5b8860208284010111156110a457600080fd5b959894975060200195606001359392505050565b6000806000606084860312156110cd57600080fd5b6110d684610ffd565b95602085013595506040909401359392505050565b6000602082840312156110fd57600080fd5b5035919050565b6000806040838503121561111757600080fd5b8235915061112760208401610ffd565b90509250929050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff8616815273ffffffffffffffffffffffffffffffffffffffff851660208201528360408201526080606082015260006111cb608083018486611130565b979650505050505050565b8381526040602082015260006111f0604083018486611130565b95945050505050565b60006020828403121561120b57600080fd5b5051919050565b8082018082111561045c577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea2646970667358221220de5fa55e0ca79ea2f08903481d01ea00bbbf346b9cfba44e12a2dd6f3a6f2e8a64736f6c634300081a0033a264697066735822122086b00c4c6e51d3da393e2ecce090f63781fa054cf8757487003ba979c9f430b164736f6c634300081a0033", + ABI: "[{\"type\":\"function\",\"name\":\"IS_TEST\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeArtifacts\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedArtifacts_\",\"type\":\"string[]\",\"internalType\":\"string[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeContracts\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedContracts_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeSelectors\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedSelectors_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzSelector[]\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"selectors\",\"type\":\"bytes4[]\",\"internalType\":\"bytes4[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeSenders\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedSenders_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"failed\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"setUp\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"targetArtifactSelectors\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedArtifactSelectors_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzArtifactSelector[]\",\"components\":[{\"name\":\"artifact\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"selectors\",\"type\":\"bytes4[]\",\"internalType\":\"bytes4[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetArtifacts\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedArtifacts_\",\"type\":\"string[]\",\"internalType\":\"string[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetContracts\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedContracts_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetInterfaces\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedInterfaces_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzInterface[]\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"artifacts\",\"type\":\"string[]\",\"internalType\":\"string[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetSelectors\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedSelectors_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzSelector[]\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"selectors\",\"type\":\"bytes4[]\",\"internalType\":\"bytes4[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetSenders\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedSenders_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"testCallWithPayload\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testCallWithPayloadFailsIfDestinationIsZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositERC20ToCustody\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositERC20ToCustodyFailsIfTokenIsNotWhitelisted\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositERC20ToCustodyWithPayload\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositERC20ToCustodyWithPayloadFailsIfTokenIsNotWhitelisted\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositEthToTss\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositEthToTssWithPayload\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositZetaToConnector\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testFailDepositERC20ToCustodyIfAmountIs0\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testFailDepositERC20ToCustodyIfReceiverIsZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testFailDepositERC20ToCustodyWithPayloadIfAmountIs0\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testFailDepositERC20ToCustodyWithPayloadIfReceiverIsZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testFailDepositEthToTssIfAmountIs0\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testFailDepositEthToTssIfReceiverIsZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testFailDepositEthToTssWithPayloadIfAmountIs0\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testFailDepositEthToTssWithPayloadIfReceiverIsZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"event\",\"name\":\"Call\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"receiver\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Deposit\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"receiver\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"asset\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Executed\",\"inputs\":[{\"name\":\"destination\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ExecutedWithERC20\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedERC20\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"token\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"destination\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedNoParams\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedNonPayable\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"strs\",\"type\":\"string[]\",\"indexed\":false,\"internalType\":\"string[]\"},{\"name\":\"nums\",\"type\":\"uint256[]\",\"indexed\":false,\"internalType\":\"uint256[]\"},{\"name\":\"flag\",\"type\":\"bool\",\"indexed\":false,\"internalType\":\"bool\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedPayable\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"str\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"num\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"flag\",\"type\":\"bool\",\"indexed\":false,\"internalType\":\"bool\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedRevert\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Reverted\",\"inputs\":[{\"name\":\"destination\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RevertedWithERC20\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log\",\"inputs\":[{\"name\":\"\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_address\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_array\",\"inputs\":[{\"name\":\"val\",\"type\":\"uint256[]\",\"indexed\":false,\"internalType\":\"uint256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_array\",\"inputs\":[{\"name\":\"val\",\"type\":\"int256[]\",\"indexed\":false,\"internalType\":\"int256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_array\",\"inputs\":[{\"name\":\"val\",\"type\":\"address[]\",\"indexed\":false,\"internalType\":\"address[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_bytes\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_bytes32\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_int\",\"inputs\":[{\"name\":\"\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_address\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_array\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"uint256[]\",\"indexed\":false,\"internalType\":\"uint256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_array\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"int256[]\",\"indexed\":false,\"internalType\":\"int256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_array\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"address[]\",\"indexed\":false,\"internalType\":\"address[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_bytes\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_bytes32\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_decimal_int\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"},{\"name\":\"decimals\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_decimal_uint\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"decimals\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_int\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_string\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_uint\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_string\",\"inputs\":[{\"name\":\"\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_uint\",\"inputs\":[{\"name\":\"\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"logs\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"ApprovalFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ConnectorInitialized\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"CustodyInitialized\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"DepositFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ExecutionFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientERC20Amount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientETHAmount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NotWhitelistedInCustody\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZeroAddress\",\"inputs\":[]}]", + Bin: "0x6080604052600c8054600160ff199182168117909255601f80549091169091179055620f4240602855348015603357600080fd5b5061dbfd806100436000396000f3fe608060405234801561001057600080fd5b50600436106101da5760003560e01c8063916a17c611610104578063bb93f11e116100a2578063e306a97811610071578063e306a9781461030b578063e85c5a0714610313578063f96c02df1461031b578063fa7626d41461032357600080fd5b8063bb93f11e146102eb578063c13d738f146102f3578063d896e261146102fb578063e20c9f711461030357600080fd5b8063b0464fdc116100de578063b0464fdc146102bb578063b2849063146102c3578063b5508aa9146102cb578063ba414fa6146102d357600080fd5b8063916a17c6146102965780639fd1e597146102ab578063aa030c1c146102b357600080fd5b806330f7c04f1161017c5780636459542a1161014b5780636459542a1461025c57806366d9a9a0146102645780637478fda01461027957806385226c811461028157600080fd5b806330f7c04f1461023c5780633e5e3c23146102445780633f7286f41461024c57806351da903d1461025457600080fd5b80630a9254e4116101b85780630a9254e4146101f95780631806a9a5146102015780631ed7831c146102095780632ade38801461022757600080fd5b806305a898e2146101df57806306978ca3146101e95780630724d8e3146101f1575b600080fd5b6101e7610330565b005b6101e76104e4565b6101e76105f6565b6101e76107ad565b6101e7611138565b610211611232565b60405161021e9190617953565b60405180910390f35b61022f611294565b60405161021e91906179ef565b6101e76113d6565b610211611843565b6102116118a3565b6101e7611903565b6101e7611a8f565b61026c611e8c565b60405161021e9190617b55565b6101e761200e565b610289612117565b60405161021e9190617bf3565b61029e6121e7565b60405161021e9190617c6a565b6101e76122e2565b6101e76124fe565b61029e6126b5565b6101e76127b0565b610289612a4b565b6102db612b1b565b604051901515815260200161021e565b6101e7612bef565b6101e7612d6f565b6101e7612f1e565b610211613096565b6101e76130f6565b6101e76133c2565b6101e7613643565b601f546102db9060ff1681565b6026546040516001600160a01b03909116602482015260019060009060440160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f84fae76000000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063f28dceb390610428906004016020808252600b908201527f5a65726f41646472657373000000000000000000000000000000000000000000604082015260600190565b600060405180830381600087803b15801561044257600080fd5b505af1158015610456573d6000803e3d6000fd5b50506020546023546040517f8c6f037f0000000000000000000000000000000000000000000000000000000081526001600160a01b039283169450638c6f037f93506104ae9260009288929116908790600401617d01565b600060405180830381600087803b1580156104c857600080fd5b505af11580156104dc573d6000803e3d6000fd5b505050505050565b6040517ff28dceb300000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f496e73756666696369656e74455448416d6f756e7400000000000000000000006044820152600090737109709ecfa91a80626ff3989d68f67f5b1dd12d9063f28dceb390606401600060405180830381600087803b15801561057a57600080fd5b505af115801561058e573d6000803e3d6000fd5b50506020546026546040517ff340fa010000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201529116925063f340fa01915083906024015b6000604051808303818588803b1580156104c857600080fd5b6027546020546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039182166084820152620186a092919091163190737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b15801561069257600080fd5b505af11580156106a6573d6000803e3d6000fd5b505060265460255460408051878152600060208201819052606082840181905282015290516001600160a01b0393841695509290911692507f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a4919081900360800190a36020546026546040517ff340fa010000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015291169063f340fa019084906024016000604051808303818588803b15801561076c57600080fd5b505af1158015610780573d6000803e3d6000fd5b50506027546001600160a01b03163192506107a891506107a290508484617d67565b82613759565b505050565b602580547fffffffffffffffffffffffff00000000000000000000000000000000000000009081163017909155602680548216611234179055602780549091166156781790556040516107ff90617866565b60408082526004908201527f746573740000000000000000000000000000000000000000000000000000000060608201526080602082018190526003908201527f54544b000000000000000000000000000000000000000000000000000000000060a082015260c001604051809103906000f080158015610884573d6000803e3d6000fd5b50602380547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392831617905560275460405191169081906108cd90617873565b6001600160a01b03928316815291166020820152604001604051809103906000f080158015610900573d6000803e3d6000fd5b50602480547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039283169081178255604080518082018252600e81527f4761746577617945564d2e736f6c0000000000000000000000000000000000006020820152602754602554925190861694810194909452604484019290925290921660648201526109f1919060840160408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fc0c53b8b000000000000000000000000000000000000000000000000000000001790526137d8565b601f80547fffffffffffffffffffffff0000000000000000000000000000000000000000ff166101006001600160a01b0393841681029190911791829055602080549190920483167fffffffffffffffffffffffff00000000000000000000000000000000000000009091168117909155602754602554604051929391821692911690610a7d90617880565b6001600160a01b03938416815291831660208301529091166040820152606001604051809103906000f080158015610ab9573d6000803e3d6000fd5b50602180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039283161790556020546024546027546025546040519385169492831693918316921690610b149061788d565b6001600160a01b039485168152928416602084015290831660408301529091166060820152608001604051809103906000f080158015610b58573d6000803e3d6000fd5b50602280547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039283161790556027546040517fca669fa700000000000000000000000000000000000000000000000000000000815291166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015610bf657600080fd5b505af1158015610c0a573d6000803e3d6000fd5b5050602480546027546022546040517f15d57fd40000000000000000000000000000000000000000000000000000000081526001600160a01b039283166004820152908216938101939093521692506315d57fd49150604401600060405180830381600087803b158015610c7d57600080fd5b505af1158015610c91573d6000803e3d6000fd5b50506027546040517fc88a5e6d0000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152670de0b6b3a76400006024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c88a5e6d9150604401600060405180830381600087803b158015610d1557600080fd5b505af1158015610d29573d6000803e3d6000fd5b50506025546040517f06447d560000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506306447d569150602401600060405180830381600087803b158015610d9f57600080fd5b505af1158015610db3573d6000803e3d6000fd5b50506020546021546040517fae7a3a6f0000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201529116925063ae7a3a6f9150602401600060405180830381600087803b158015610e1957600080fd5b505af1158015610e2d573d6000803e3d6000fd5b50506020546022546040517f10188aef0000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152911692506310188aef9150602401600060405180830381600087803b158015610e9357600080fd5b505af1158015610ea7573d6000803e3d6000fd5b50506021546023546040517f9b19251a0000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015291169250639b19251a9150602401600060405180830381600087803b158015610f0d57600080fd5b505af1158015610f21573d6000803e3d6000fd5b505050507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b03166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610f8357600080fd5b505af1158015610f97573d6000803e3d6000fd5b50506023546025546028546040517f40c10f190000000000000000000000000000000000000000000000000000000081526001600160a01b0392831660048201526024810191909152911692506340c10f199150604401600060405180830381600087803b15801561100857600080fd5b505af115801561101c573d6000803e3d6000fd5b50506027546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b15801561109257600080fd5b505af11580156110a6573d6000803e3d6000fd5b50506022546025546028546040517f106e62900000000000000000000000000000000000000000000000000000000081526001600160a01b0392831660048201526024810191909152600060448201529116925063106e62909150606401600060405180830381600087803b15801561111e57600080fd5b505af1158015611132573d6000803e3d6000fd5b50505050565b6040517ff28dceb300000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f5a65726f416464726573730000000000000000000000000000000000000000006044820152600190737109709ecfa91a80626ff3989d68f67f5b1dd12d9063f28dceb390606401600060405180830381600087803b1580156111ce57600080fd5b505af11580156111e2573d6000803e3d6000fd5b50506020546040517ff340fa01000000000000000000000000000000000000000000000000000000008152600060048201526001600160a01b03909116925063f340fa01915083906024016105dd565b6060601680548060200260200160405190810160405280929190818152602001828054801561128a57602002820191906000526020600020905b81546001600160a01b0316815260019091019060200180831161126c575b5050505050905090565b6060601e805480602002602001604051908101604052809291908181526020016000905b828210156113cd57600084815260208082206040805180820182526002870290920180546001600160a01b03168352600181018054835181870281018701909452808452939591948681019491929084015b828210156113b657838290600052602060002001805461132990617d7a565b80601f016020809104026020016040519081016040528092919081815260200182805461135590617d7a565b80156113a25780601f10611377576101008083540402835291602001916113a2565b820191906000526020600020905b81548152906001019060200180831161138557829003601f168201915b50505050508152602001906001019061130a565b5050505081525050815260200190600101906112b8565b50505050905090565b6023546021546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620186a09260009216906370a0823190602401602060405180830381865afa158015611442573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114669190617dc7565b9050611473600082613759565b6026546040516001600160a01b03909116602482015260009060440160408051601f19818403018152918152602080830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f84fae76000000000000000000000000000000000000000000000000000000000179052602354905491517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b03928316600482015260248101879052929350169063095ea7b3906044016020604051808303816000875af1158015611556573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061157a9190617de0565b506020546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b15801561160957600080fd5b505af115801561161d573d6000803e3d6000fd5b50506026546025546023546040516001600160a01b03938416955091831693507f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a492611670928992909116908790617e02565b60405180910390a36020546026546023546040517f8c6f037f0000000000000000000000000000000000000000000000000000000081526001600160a01b0393841693638c6f037f936116d193908216928992909116908790600401617d01565b600060405180830381600087803b1580156116eb57600080fd5b505af11580156116ff573d6000803e3d6000fd5b50506023546021546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260009450911691506370a0823190602401602060405180830381865afa15801561176b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061178f9190617dc7565b905061179b8482613759565b6023546025546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260009291909116906370a0823190602401602060405180830381865afa158015611805573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118299190617dc7565b905061183c856028546107a29190617e2a565b5050505050565b6060601880548060200260200160405190810160405280929190818152602001828054801561128a576020028201919060005260206000209081546001600160a01b0316815260019091019060200180831161126c575050505050905090565b6060601780548060200260200160405190810160405280929190818152602001828054801561128a576020028201919060005260206000209081546001600160a01b0316815260019091019060200180831161126c575050505050905090565b6026546040516001600160a01b03909116602482015260009060440160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f84fae76000000000000000000000000000000000000000000000000000000000179052517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fd92e233d000000000000000000000000000000000000000000000000000000006004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b1580156119fd57600080fd5b505af1158015611a11573d6000803e3d6000fd5b50506020546040517f1b8b921d0000000000000000000000000000000000000000000000000000000081526001600160a01b039091169250631b8b921d9150611a61906000908590600401617e3d565b600060405180830381600087803b158015611a7b57600080fd5b505af115801561183c573d6000803e3d6000fd5b6023546021546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620186a09260009216906370a0823190602401602060405180830381865afa158015611afb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b1f9190617dc7565b9050611b2c600082613759565b6023546020546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201526024810185905291169063095ea7b3906044016020604051808303816000875af1158015611b9a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bbe9190617de0565b506020546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b158015611c4d57600080fd5b505af1158015611c61573d6000803e3d6000fd5b5050602654602554602354604080518881526001600160a01b039283166020820152606081830181905260009082015290519382169550911692507f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a4919081900360800190a36020546026546023546040517ff45346dc0000000000000000000000000000000000000000000000000000000081526001600160a01b03928316600482015260248101869052908216604482015291169063f45346dc90606401600060405180830381600087803b158015611d3b57600080fd5b505af1158015611d4f573d6000803e3d6000fd5b50506023546021546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260009450911691506370a0823190602401602060405180830381865afa158015611dbb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ddf9190617dc7565b9050611deb8382613759565b6023546025546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260009291909116906370a0823190602401602060405180830381865afa158015611e55573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e799190617dc7565b9050611132846028546107a29190617e2a565b6060601b805480602002602001604051908101604052809291908181526020016000905b828210156113cd5783829060005260206000209060020201604051806040016040529081600082018054611ee390617d7a565b80601f0160208091040260200160405190810160405280929190818152602001828054611f0f90617d7a565b8015611f5c5780601f10611f3157610100808354040283529160200191611f5c565b820191906000526020600020905b815481529060010190602001808311611f3f57829003601f168201915b5050505050815260200160018201805480602002602001604051908101604052809291908181526020018280548015611ff657602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019060040190602082600301049283019260010382029150808411611fa35790505b50505050508152505081526020019060010190611eb0565b6040517ff28dceb300000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f5a65726f416464726573730000000000000000000000000000000000000000006044820152600190737109709ecfa91a80626ff3989d68f67f5b1dd12d9063f28dceb390606401600060405180830381600087803b1580156120a457600080fd5b505af11580156120b8573d6000803e3d6000fd5b50506020546023546040517ff45346dc00000000000000000000000000000000000000000000000000000000815260006004820152602481018690526001600160a01b0391821660448201529116925063f45346dc9150606401611a61565b6060601a805480602002602001604051908101604052809291908181526020016000905b828210156113cd57838290600052602060002001805461215a90617d7a565b80601f016020809104026020016040519081016040528092919081815260200182805461218690617d7a565b80156121d35780601f106121a8576101008083540402835291602001916121d3565b820191906000526020600020905b8154815290600101906020018083116121b657829003601f168201915b50505050508152602001906001019061213b565b6060601d805480602002602001604051908101604052809291908181526020016000905b828210156113cd5760008481526020908190206040805180820182526002860290920180546001600160a01b031683526001810180548351818702810187019094528084529394919385830193928301828280156122ca57602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190600401906020826003010492830192600103820291508084116122775790505b5050505050815250508152602001906001019061220b565b6027546026546040516001600160a01b039182166024820152620186a09291909116319060009060440160408051601f19818403018152918152602080830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f84fae760000000000000000000000000000000000000000000000000000000001790525490517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b1580156123f357600080fd5b505af1158015612407573d6000803e3d6000fd5b50506026546025546040516001600160a01b039283169450911691507f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a4906124559087906000908790617e02565b60405180910390a36020546026546040517f29c59b5d0000000000000000000000000000000000000000000000000000000081526001600160a01b03928316926329c59b5d9287926124af92909116908690600401617e3d565b6000604051808303818588803b1580156124c857600080fd5b505af11580156124dc573d6000803e3d6000fd5b50506027546001600160a01b031631925061113291506107a290508585617d67565b6026546040516001600160a01b03909116602482015260009060440160408051601f19818403018152918152602080830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f84fae760000000000000000000000000000000000000000000000000000000001790525490517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b15801561260157600080fd5b505af1158015612615573d6000803e3d6000fd5b50506026546025546040516001600160a01b039283169450911691507f2a21062ee9199c2e205622999eeb7c3da73153674f36a0acd3f74fa6af67bde39061265e908590617e5f565b60405180910390a36020546026546040517f1b8b921d0000000000000000000000000000000000000000000000000000000081526001600160a01b0392831692631b8b921d92611a61929116908590600401617e3d565b6060601c805480602002602001604051908101604052809291908181526020016000905b828210156113cd5760008481526020908190206040805180820182526002860290920180546001600160a01b0316835260018101805483518187028101870190945280845293949193858301939283018282801561279857602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190600401906020826003010492830192600103820291508084116127455790505b505050505081525050815260200190600101906126d9565b6023546020546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620186a06024820181905292919091169063095ea7b3906044016020604051808303816000875af1158015612825573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128499190617de0565b506025546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156128bc57600080fd5b505af11580156128d0573d6000803e3d6000fd5b50506021546023546040517f9a5904270000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015291169250639a5904279150602401600060405180830381600087803b15801561293657600080fd5b505af115801561294a573d6000803e3d6000fd5b50506040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fac2175f1000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e091506024015b600060405180830381600087803b1580156129d457600080fd5b505af11580156129e8573d6000803e3d6000fd5b50506020546026546023546040517ff45346dc0000000000000000000000000000000000000000000000000000000081526001600160a01b0392831660048201526024810187905290821660448201529116925063f45346dc9150606401611a61565b60606019805480602002602001604051908101604052809291908181526020016000905b828210156113cd578382906000526020600020018054612a8e90617d7a565b80601f0160208091040260200160405190810160405280929190818152602001828054612aba90617d7a565b8015612b075780601f10612adc57610100808354040283529160200191612b07565b820191906000526020600020905b815481529060010190602001808311612aea57829003601f168201915b505050505081526020019060010190612a6f565b60085460009060ff1615612b33575060085460ff1690565b6040517f667f9d70000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d600482018190527f6661696c65640000000000000000000000000000000000000000000000000000602483015260009163667f9d7090604401602060405180830381865afa158015612bc4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612be89190617dc7565b1415905090565b6026546040516001600160a01b039091166024820152600090819060440160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f84fae76000000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063f28dceb390612ce69060040160208082526017908201527f496e73756666696369656e744552433230416d6f756e74000000000000000000604082015260600190565b600060405180830381600087803b158015612d0057600080fd5b505af1158015612d14573d6000803e3d6000fd5b50506020546026546023546040517f8c6f037f0000000000000000000000000000000000000000000000000000000081526001600160a01b039384169550638c6f037f94506104ae9392831692889216908790600401617d01565b6026546040516001600160a01b039091166024820152600090819060440160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f84fae76000000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063f28dceb390612e669060040160208082526015908201527f496e73756666696369656e74455448416d6f756e740000000000000000000000604082015260600190565b600060405180830381600087803b158015612e8057600080fd5b505af1158015612e94573d6000803e3d6000fd5b50506020546026546040517f29c59b5d0000000000000000000000000000000000000000000000000000000081526001600160a01b0392831694506329c59b5d93508692612ee89216908690600401617e3d565b6000604051808303818588803b158015612f0157600080fd5b505af1158015612f15573d6000803e3d6000fd5b50505050505050565b6026546040516001600160a01b03909116602482015260019060009060440160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f84fae76000000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063f28dceb390613016906004016020808252600b908201527f5a65726f41646472657373000000000000000000000000000000000000000000604082015260600190565b600060405180830381600087803b15801561303057600080fd5b505af1158015613044573d6000803e3d6000fd5b50506020546040517f29c59b5d0000000000000000000000000000000000000000000000000000000081526001600160a01b0390911692506329c59b5d91508490612ee8906000908690600401617e3d565b6060601580548060200260200160405190810160405280929190818152602001828054801561128a576020028201919060005260206000209081546001600160a01b0316815260019091019060200180831161126c575050505050905090565b602480546020546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620186a093810184905291169063095ea7b3906044016020604051808303816000875af1158015613168573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061318c9190617de0565b506020546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b15801561321b57600080fd5b505af115801561322f573d6000803e3d6000fd5b5050602654602554602454604080518781526001600160a01b039283166020820152606081830181905260009082015290519382169550911692507f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a4919081900360800190a3602054602654602480546040517ff45346dc0000000000000000000000000000000000000000000000000000000081526001600160a01b0393841660048201529182018590528216604482015291169063f45346dc90606401600060405180830381600087803b15801561330857600080fd5b505af115801561331c573d6000803e3d6000fd5b5050602480546025546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260009550911692506370a082319101602060405180830381865afa158015613387573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133ab9190617dc7565b90506133be826028546107a29190617e2a565b5050565b6026546040516001600160a01b039091166024820152620186a09060009060440160408051601f19818403018152918152602080830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f84fae76000000000000000000000000000000000000000000000000000000000179052602354905491517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b03928316600482015260248101869052929350169063095ea7b3906044016020604051808303816000875af11580156134aa573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134ce9190617de0565b506025546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561354157600080fd5b505af1158015613555573d6000803e3d6000fd5b50506021546023546040517f9a5904270000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015291169250639a5904279150602401600060405180830381600087803b1580156135bb57600080fd5b505af11580156135cf573d6000803e3d6000fd5b50506040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fac2175f1000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401612ce6565b6023546020546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260006024820181905292919091169063095ea7b3906044016020604051808303816000875af11580156136b6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136da9190617de0565b506040517ff28dceb300000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f496e73756666696369656e744552433230416d6f756e740000000000000000006044820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063f28dceb3906064016129ba565b6040517f98296c540000000000000000000000000000000000000000000000000000000081526004810183905260248101829052737109709ecfa91a80626ff3989d68f67f5b1dd12d906398296c549060440160006040518083038186803b1580156137c457600080fd5b505afa1580156104dc573d6000803e3d6000fd5b60006137e261789a565b6137ed8484836137f7565b9150505b92915050565b6000806138048584613872565b90506138676040518060400160405280601d81526020017f4552433139363750726f78792e736f6c3a4552433139363750726f78790000008152508286604051602001613852929190617e3d565b6040516020818303038152906040528561387e565b9150505b9392505050565b600061386b83836138ac565b60c081015151600090156138a25761389b84848460c001516138c7565b905061386b565b61389b8484613a6d565b60006138b88383613b58565b61386b8383602001518461387e565b6000806138d2613b64565b905060006138e08683613c37565b905060006138f782606001518360200151856140dd565b90506000613907838389896142ef565b905060006139148261516c565b602081015181519192509060030b156139875789826040015160405160200161393e929190617e72565b60408051601f19818403018152908290527f08c379a000000000000000000000000000000000000000000000000000000000825261397e91600401617e5f565b60405180910390fd5b60006139ca6040518060400160405280601581526020017f4465706c6f79656420746f20616464726573733a20000000000000000000000081525083600161533b565b6040517fc6ce059d000000000000000000000000000000000000000000000000000000008152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c6ce059d90613a1d908490600401617e5f565b602060405180830381865afa158015613a3a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a5e9190617ef3565b9b9a5050505050505050505050565b6040517f8d1cc9250000000000000000000000000000000000000000000000000000000081526000908190737109709ecfa91a80626ff3989d68f67f5b1dd12d90638d1cc92590613ac2908790600401617e5f565b600060405180830381865afa158015613adf573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052613b079190810190618004565b90506000613b358285604051602001613b21929190618039565b60405160208183030381529060405261553b565b90506001600160a01b0381166137ed57848460405160200161393e929190618068565b6133be8282600061554e565b604080518082018252600381527f6f75740000000000000000000000000000000000000000000000000000000000602082015290517fd145736c000000000000000000000000000000000000000000000000000000008152606091737109709ecfa91a80626ff3989d68f67f5b1dd12d91829063d145736c90613beb908490600401618113565b600060405180830381865afa158015613c08573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052613c30919081019061815a565b9250505090565b613c696040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b6000737109709ecfa91a80626ff3989d68f67f5b1dd12d9050613cb46040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b613cbd85615651565b60208201526000613ccd86615a36565b90506000836001600160a01b031663d930a0e66040518163ffffffff1660e01b8152600401600060405180830381865afa158015613d0f573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052613d37919081019061815a565b86838560200151604051602001613d5194939291906181a3565b60408051601f19818403018152908290527f60f9bb1100000000000000000000000000000000000000000000000000000000825291506000906001600160a01b038616906360f9bb1190613da9908590600401617e5f565b600060405180830381865afa158015613dc6573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052613dee919081019061815a565b6040517fdb4235f60000000000000000000000000000000000000000000000000000000081529091506001600160a01b0386169063db4235f690613e369084906004016182a7565b602060405180830381865afa158015613e53573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613e779190617de0565b613e8c578160405160200161393e91906182f9565b6040517f49c4fac80000000000000000000000000000000000000000000000000000000081526001600160a01b038616906349c4fac890613ed190849060040161838b565b600060405180830381865afa158015613eee573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052613f16919081019061815a565b84526040517fdb4235f60000000000000000000000000000000000000000000000000000000081526001600160a01b0386169063db4235f690613f5d9084906004016183dd565b602060405180830381865afa158015613f7a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613f9e9190617de0565b15614033576040517f49c4fac80000000000000000000000000000000000000000000000000000000081526001600160a01b038616906349c4fac890613fe89084906004016183dd565b600060405180830381865afa158015614005573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261402d919081019061815a565b60408501525b846001600160a01b03166349c4fac8828660000151604051602001614058919061842f565b6040516020818303038152906040526040518363ffffffff1660e01b815260040161408492919061849b565b600060405180830381865afa1580156140a1573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526140c9919081019061815a565b606085015250608083015250949350505050565b60408051600480825260a0820190925260609160009190816020015b60608152602001906001900390816140f95790505090506040518060400160405280600481526020017f677265700000000000000000000000000000000000000000000000000000000081525081600081518110614159576141596184c0565b60200260200101819052506040518060400160405280600381526020017f2d726c0000000000000000000000000000000000000000000000000000000000815250816001815181106141ad576141ad6184c0565b6020026020010181905250846040516020016141c991906184ef565b604051602081830303815290604052816002815181106141eb576141eb6184c0565b602002602001018190525082604051602001614207919061855b565b60405160208183030381529060405281600381518110614229576142296184c0565b6020026020010181905250600061423f8261516c565b602080820151604080518082018252600581527f2e6a736f6e00000000000000000000000000000000000000000000000000000081850190815282518084018452600080825290860152825180840190935290518252928101929092529192506142d09060408051808201825260008082526020918201528151808301909252845182528085019082015290615cb9565b6142e5578560405160200161393e919061859c565b9695505050505050565b60a0810151604080518082018252600080825260209182015281518083019092528251808352928101910152606090737109709ecfa91a80626ff3989d68f67f5b1dd12d901561433f565b511590565b6144b3578260200151156143fb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605860248201527f54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f742060448201527f62652075736564207768656e207468652060736b6970566572696679536f757260648201527f6365436f646560206f7074696f6e206973206074727565600000000000000000608482015260a40161397e565b8260c00151156144b3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605360248201527f54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f742060448201527f62652075736564207768656e207468652060736b69704c6963656e736554797060648201527f6560206f7074696f6e2069732060747275656000000000000000000000000000608482015260a40161397e565b6040805160ff8082526120008201909252600091816020015b60608152602001906001900390816144cc57905050905060006040518060400160405280600381526020017f6e707800000000000000000000000000000000000000000000000000000000008152508282806145279061862d565b935060ff168151811061453c5761453c6184c0565b60200260200101819052506040518060400160405280600d81526020017f302e302e312d616c7068612e370000000000000000000000000000000000000081525060405160200161458d919061864c565b6040516020818303038152906040528282806145a89061862d565b935060ff16815181106145bd576145bd6184c0565b60200260200101819052506040518060400160405280600681526020017f6465706c6f79000000000000000000000000000000000000000000000000000081525082828061460a9061862d565b935060ff168151811061461f5761461f6184c0565b60200260200101819052506040518060400160405280600e81526020017f2d2d636f6e74726163744e616d6500000000000000000000000000000000000081525082828061466c9061862d565b935060ff1681518110614681576146816184c0565b6020026020010181905250876020015182828061469d9061862d565b935060ff16815181106146b2576146b26184c0565b60200260200101819052506040518060400160405280600e81526020017f2d2d636f6e7472616374506174680000000000000000000000000000000000008152508282806146ff9061862d565b935060ff1681518110614714576147146184c0565b60209081029190910101528751828261472c8161862d565b935060ff1681518110614741576147416184c0565b60200260200101819052506040518060400160405280600981526020017f2d2d636861696e4964000000000000000000000000000000000000000000000081525082828061478e9061862d565b935060ff16815181106147a3576147a36184c0565b60200260200101819052506147b746615d1a565b82826147c28161862d565b935060ff16815181106147d7576147d76184c0565b60200260200101819052506040518060400160405280600f81526020017f2d2d6275696c64496e666f46696c6500000000000000000000000000000000008152508282806148249061862d565b935060ff1681518110614839576148396184c0565b6020026020010181905250868282806148519061862d565b935060ff1681518110614866576148666184c0565b602090810291909101015285511561498d5760408051808201909152601581527f2d2d636f6e7374727563746f7242797465636f64650000000000000000000000602082015282826148b78161862d565b935060ff16815181106148cc576148cc6184c0565b60209081029190910101526040517f71aad10d0000000000000000000000000000000000000000000000000000000081526001600160a01b038416906371aad10d9061491c908990600401617e5f565b600060405180830381865afa158015614939573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052614961919081019061815a565b828261496c8161862d565b935060ff1681518110614981576149816184c0565b60200260200101819052505b846020015115614a5d5760408051808201909152601281527f2d2d766572696679536f75726365436f64650000000000000000000000000000602082015282826149d68161862d565b935060ff16815181106149eb576149eb6184c0565b60200260200101819052506040518060400160405280600581526020017f66616c7365000000000000000000000000000000000000000000000000000000815250828280614a389061862d565b935060ff1681518110614a4d57614a4d6184c0565b6020026020010181905250614c24565b614a9561433a8660a0015160408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b614b285760408051808201909152600d81527f2d2d6c6963656e7365547970650000000000000000000000000000000000000060208201528282614ad88161862d565b935060ff1681518110614aed57614aed6184c0565b60200260200101819052508460a00151604051602001614b0d91906184ef565b604051602081830303815290604052828280614a389061862d565b8460c00151158015614b6b575060408089015181518083018352600080825260209182015282518084019093528151835290810190820152614b6990511590565b155b15614c245760408051808201909152600d81527f2d2d6c6963656e7365547970650000000000000000000000000000000000000060208201528282614baf8161862d565b935060ff1681518110614bc457614bc46184c0565b6020026020010181905250614bd888615dba565b604051602001614be891906184ef565b604051602081830303815290604052828280614c039061862d565b935060ff1681518110614c1857614c186184c0565b60200260200101819052505b60408086015181518083018352600080825260209182015282518084019093528151835290810190820152614c5890511590565b614ced5760408051808201909152600b81527f2d2d72656c61796572496400000000000000000000000000000000000000000060208201528282614c9b8161862d565b935060ff1681518110614cb057614cb06184c0565b60200260200101819052508460400151828280614ccc9061862d565b935060ff1681518110614ce157614ce16184c0565b60200260200101819052505b606085015115614e0e5760408051808201909152600681527f2d2d73616c74000000000000000000000000000000000000000000000000000060208201528282614d368161862d565b935060ff1681518110614d4b57614d4b6184c0565b602090810291909101015260608501516040517fb11a19e800000000000000000000000000000000000000000000000000000000815260048101919091526001600160a01b0384169063b11a19e890602401600060405180830381865afa158015614dba573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052614de2919081019061815a565b8282614ded8161862d565b935060ff1681518110614e0257614e026184c0565b60200260200101819052505b60e08501515115614eb55760408051808201909152600a81527f2d2d6761734c696d69740000000000000000000000000000000000000000000060208201528282614e588161862d565b935060ff1681518110614e6d57614e6d6184c0565b6020026020010181905250614e898560e0015160000151615d1a565b8282614e948161862d565b935060ff1681518110614ea957614ea96184c0565b60200260200101819052505b60e08501516020015115614f5f5760408051808201909152600a81527f2d2d67617350726963650000000000000000000000000000000000000000000060208201528282614f028161862d565b935060ff1681518110614f1757614f176184c0565b6020026020010181905250614f338560e0015160200151615d1a565b8282614f3e8161862d565b935060ff1681518110614f5357614f536184c0565b60200260200101819052505b60e085015160400151156150095760408051808201909152600e81527f2d2d6d617846656550657247617300000000000000000000000000000000000060208201528282614fac8161862d565b935060ff1681518110614fc157614fc16184c0565b6020026020010181905250614fdd8560e0015160400151615d1a565b8282614fe88161862d565b935060ff1681518110614ffd57614ffd6184c0565b60200260200101819052505b60e085015160600151156150b35760408051808201909152601681527f2d2d6d61785072696f7269747946656550657247617300000000000000000000602082015282826150568161862d565b935060ff168151811061506b5761506b6184c0565b60200260200101819052506150878560e0015160600151615d1a565b82826150928161862d565b935060ff16815181106150a7576150a76184c0565b60200260200101819052505b60008160ff1667ffffffffffffffff8111156150d1576150d1617f1c565b60405190808252806020026020018201604052801561510457816020015b60608152602001906001900390816150ef5790505b50905060005b8260ff168160ff16101561515d57838160ff168151811061512d5761512d6184c0565b6020026020010151828260ff168151811061514a5761514a6184c0565b602090810291909101015260010161510a565b5093505050505b949350505050565b6151936040518060600160405280600060030b815260200160608152602001606081525090565b60408051808201825260048082527f6261736800000000000000000000000000000000000000000000000000000000602083015291517fd145736c000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d92600091849163d145736c91615219918691016186b7565b600060405180830381865afa158015615236573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261525e919081019061815a565b9050600061526c86836168a9565b90506000846001600160a01b031663f45c1ce7836040518263ffffffff1660e01b815260040161529c9190617bf3565b6000604051808303816000875af11580156152bb573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526152e391908101906186fe565b805190915060030b158015906152fc5750602081015151155b801561530b5750604081015151155b156142e55781600081518110615323576153236184c0565b602002602001015160405160200161393e91906187b4565b606060006153708560408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6040805180820182526000808252602091820152815180830190925286518252808701908201529091506153a79082905b906169fe565b156155045760006154248261541e846154186153ea8a60408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6040805180820182526000808252602091820152815180830190925282518252918201519181019190915290565b90616a25565b90616a87565b604080518082018252600181527f0a00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201529091506154889082906169fe565b156154f257604080518082018252600181527f0a00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526154ef905b8290616b0c565b90505b6154fb81616b32565b9250505061386b565b821561551d57848460405160200161393e9291906189a0565b505060408051602081019091526000815261386b565b509392505050565b6000808251602084016000f09392505050565b8160a001511561555d57505050565b600061556a848484616b9b565b905060006155778261516c565b602081015181519192509060030b1580156156135750604080518082018252600781527f535543434553530000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152615613906040805180820182526000808252602091820152815180830190925284518252808501908201526153a1565b1561562057505050505050565b6040820151511561564057816040015160405160200161393e9190618a47565b8060405160200161393e9190618aa5565b606060006156868360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600481527f2e736f6c00000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201529091506156eb905b8290615cb9565b1561575a57604080518082018252600481527f2e736f6c000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261386b90615755908390617136565b616b32565b604080518082018252600181527f3a00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526157bc905b82906171c0565b60010361588957604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152615822906154e8565b50604080518082018252600181527f3a000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261386b90615755905b8390616b0c565b604080518082018252600581527f2e6a736f6e000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526158e8906156e4565b15615a1f57604080518082018252600181527f2f0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082018190528451808601909552925184528301529061595090839061725a565b9050600081600183516159639190617e2a565b81518110615973576159736184c0565b60200260200101519050615a166157556159e96040518060400160405280600581526020017f2e6a736f6e00000000000000000000000000000000000000000000000000000081525060408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b60408051808201825260008082526020918201528151808301909252855182528086019082015290617136565b95945050505050565b8260405160200161393e9190618b10565b50919050565b60606000615a6b8360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600481527f2e736f6c0000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152909150615acd906156e4565b15615adb5761386b81616b32565b604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152615b3a906157b5565b600103615ba457604080518082018252600181527f3a000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261386b9061575590615882565b604080518082018252600581527f2e6a736f6e00000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152615c03906156e4565b15615a1f57604080518082018252600181527f2f00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820181905284518086019095529251845283015290615c6b90839061725a565b9050600181511115615ca7578060028251615c869190617e2a565b81518110615c9657615c966184c0565b602002602001015192505050919050565b508260405160200161393e9190618b10565b805182516000911115615cce575060006137f1565b81518351602085015160009291615ce491617d67565b615cee9190617e2a565b905082602001518103615d055760019150506137f1565b82516020840151819020912014905092915050565b60606000615d27836172ff565b600101905060008167ffffffffffffffff811115615d4757615d47617f1c565b6040519080825280601f01601f191660200182016040528015615d71576020820181803683370190505b5090508181016020015b600019017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a8504945084615d7b57509392505050565b604081810151815180830183526000808252602091820181905283518085018552835181529282018383015283518085018552600a81527f554e4c4943454e5345440000000000000000000000000000000000000000000081840190815285518087018752838152840192909252845180860190955251845290830152606091615e46905b82906173e1565b15615e8657505060408051808201909152600481527f4e6f6e65000000000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600981527f556e6c6963656e7365000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152615ee590615e3f565b15615f2557505060408051808201909152600981527f556e6c6963656e736500000000000000000000000000000000000000000000006020820152919050565b604080518082018252600381527f4d4954000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152615f8490615e3f565b15615fc457505060408051808201909152600381527f4d495400000000000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f47504c2d322e302d6f6e6c7900000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261602390615e3f565b806160885750604080518082018252601081527f47504c2d322e302d6f722d6c61746572000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261608890615e3f565b156160c857505060408051808201909152600981527f474e552047504c763200000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f47504c2d332e302d6f6e6c7900000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261612790615e3f565b8061618c5750604080518082018252601081527f47504c2d332e302d6f722d6c61746572000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261618c90615e3f565b156161cc57505060408051808201909152600981527f474e552047504c763300000000000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4c47504c2d322e312d6f6e6c79000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261622b90615e3f565b806162905750604080518082018252601181527f4c47504c2d322e312d6f722d6c617465720000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261629090615e3f565b156162d057505060408051808201909152600c81527f474e55204c47504c76322e3100000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4c47504c2d332e302d6f6e6c79000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261632f90615e3f565b806163945750604080518082018252601181527f4c47504c2d332e302d6f722d6c617465720000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261639490615e3f565b156163d457505060408051808201909152600a81527f474e55204c47504c7633000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f4253442d322d436c6175736500000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261643390615e3f565b1561647357505060408051808201909152600c81527f4253442d322d436c6175736500000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f4253442d332d436c617573650000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526164d290615e3f565b1561651257505060408051808201909152600c81527f4253442d332d436c6175736500000000000000000000000000000000000000006020820152919050565b604080518082018252600781527f4d504c2d322e30000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261657190615e3f565b156165b157505060408051808201909152600781527f4d504c2d322e30000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600781527f4f534c2d332e30000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261661090615e3f565b1561665057505060408051808201909152600781527f4f534c2d332e30000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600a81527f4170616368652d322e3000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526166af90615e3f565b156166ef57505060408051808201909152600a81527f4170616368652d322e30000000000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4147504c2d332e302d6f6e6c79000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261674e90615e3f565b806167b35750604080518082018252601181527f4147504c2d332e302d6f722d6c61746572000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526167b390615e3f565b156167f357505060408051808201909152600a81527f474e55204147504c7633000000000000000000000000000000000000000000006020820152919050565b604080518082018252600881527f4255534c2d312e310000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261685290615e3f565b1561689257505060408051808201909152600781527f42534c20312e31000000000000000000000000000000000000000000000000006020820152919050565b6040808401518451915161393e9290602001618bee565b60608060005b845181101561693457818582815181106168cb576168cb6184c0565b60200260200101516040516020016168e4929190618039565b6040516020818303038152906040529150600185516169039190617e2a565b811461692c578160405160200161691a9190618d57565b60405160208183030381529060405291505b6001016168af565b5060408051600380825260808201909252600091816020015b606081526020019060019003908161694d5790505090508381600081518110616978576169786184c0565b60200260200101819052506040518060400160405280600281526020017f2d63000000000000000000000000000000000000000000000000000000000000815250816001815181106169cc576169cc6184c0565b602002602001018190525081816002815181106169eb576169eb6184c0565b6020908102919091010152949350505050565b6020808301518351835192840151600093616a1c92918491906173f5565b14159392505050565b60408051808201909152600080825260208201526000616a578460000151856020015185600001518660200151617506565b9050836020015181616a699190617e2a565b84518590616a78908390617e2a565b90525060208401525090919050565b6040805180820190915260008082526020820152815183511015616aac5750816137f1565b6020808301519084015160019114616ad35750815160208481015190840151829020919020145b8015616b0457825184518590616aea908390617e2a565b9052508251602085018051616b00908390617d67565b9052505b509192915050565b6040805180820190915260008082526020820152616b2b838383617626565b5092915050565b60606000826000015167ffffffffffffffff811115616b5357616b53617f1c565b6040519080825280601f01601f191660200182016040528015616b7d576020820181803683370190505b5090506000602082019050616b2b81856020015186600001516176d1565b60606000616ba7613b64565b6040805160ff808252612000820190925291925060009190816020015b6060815260200190600190039081616bc457905050905060006040518060400160405280600381526020017f6e70780000000000000000000000000000000000000000000000000000000000815250828280616c1f9061862d565b935060ff1681518110616c3457616c346184c0565b60200260200101819052506040518060400160405280600781526020017f5e312e33322e3300000000000000000000000000000000000000000000000000815250604051602001616c859190618d98565b604051602081830303815290604052828280616ca09061862d565b935060ff1681518110616cb557616cb56184c0565b60200260200101819052506040518060400160405280600881526020017f76616c6964617465000000000000000000000000000000000000000000000000815250828280616d029061862d565b935060ff1681518110616d1757616d176184c0565b602002602001018190525082604051602001616d33919061855b565b604051602081830303815290604052828280616d4e9061862d565b935060ff1681518110616d6357616d636184c0565b60200260200101819052506040518060400160405280600a81526020017f2d2d636f6e747261637400000000000000000000000000000000000000000000815250828280616db09061862d565b935060ff1681518110616dc557616dc56184c0565b6020026020010181905250616dda878461774b565b8282616de58161862d565b935060ff1681518110616dfa57616dfa6184c0565b602090810291909101015285515115616ea65760408051808201909152600b81527f2d2d7265666572656e636500000000000000000000000000000000000000000060208201528282616e4c8161862d565b935060ff1681518110616e6157616e616184c0565b6020026020010181905250616e7a86600001518461774b565b8282616e858161862d565b935060ff1681518110616e9a57616e9a6184c0565b60200260200101819052505b856080015115616f145760408051808201909152601881527f2d2d756e73616665536b697053746f72616765436865636b000000000000000060208201528282616eef8161862d565b935060ff1681518110616f0457616f046184c0565b6020026020010181905250616f7a565b8415616f7a5760408051808201909152601281527f2d2d726571756972655265666572656e6365000000000000000000000000000060208201528282616f598161862d565b935060ff1681518110616f6e57616f6e6184c0565b60200260200101819052505b604086015151156170165760408051808201909152600d81527f2d2d756e73616665416c6c6f770000000000000000000000000000000000000060208201528282616fc48161862d565b935060ff1681518110616fd957616fd96184c0565b60200260200101819052508560400151828280616ff59061862d565b935060ff168151811061700a5761700a6184c0565b60200260200101819052505b8560600151156170805760408051808201909152601481527f2d2d756e73616665416c6c6f7752656e616d65730000000000000000000000006020820152828261705f8161862d565b935060ff1681518110617074576170746184c0565b60200260200101819052505b60008160ff1667ffffffffffffffff81111561709e5761709e617f1c565b6040519080825280602002602001820160405280156170d157816020015b60608152602001906001900390816170bc5790505b50905060005b8260ff168160ff16101561712a57838160ff16815181106170fa576170fa6184c0565b6020026020010151828260ff1681518110617117576171176184c0565b60209081029190910101526001016170d7565b50979650505050505050565b604080518082019091526000808252602082015281518351101561715b5750816137f1565b8151835160208501516000929161717191617d67565b61717b9190617e2a565b6020840151909150600190821461719c575082516020840151819020908220145b80156171b7578351855186906171b3908390617e2a565b9052505b50929392505050565b60008082600001516171e48560000151866020015186600001518760200151617506565b6171ee9190617d67565b90505b835160208501516172029190617d67565b8111616b2b578161721281618ddd565b925050826000015161724985602001518361722d9190617e2a565b86516172399190617e2a565b8386600001518760200151617506565b6172539190617d67565b90506171f1565b6060600061726884846171c0565b617273906001617d67565b67ffffffffffffffff81111561728b5761728b617f1c565b6040519080825280602002602001820160405280156172be57816020015b60608152602001906001900390816172a95790505b50905060005b8151811015615533576172da6157558686616b0c565b8282815181106172ec576172ec6184c0565b60209081029190910101526001016172c4565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310617348577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310617374576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc10000831061739257662386f26fc10000830492506010015b6305f5e10083106173aa576305f5e100830492506008015b61271083106173be57612710830492506004015b606483106173d0576064830492506002015b600a83106137f15760010192915050565b60006173ed838361778b565b159392505050565b6000808584116174fc57602084116174a8576000841561744057600161741c866020617e2a565b617427906008618df7565b617432906002618ef5565b61743c9190617e2a565b1990505b835181168561744f8989617d67565b6174599190617e2a565b805190935082165b8181146174935787841161747b5787945050505050615164565b8361748581618f01565b945050828451169050617461565b61749d8785617d67565b945050505050615164565b8383206174b58588617e2a565b6174bf9087617d67565b91505b8582106174fa578482208082036174e7576174dd8684617d67565b9350505050615164565b6174f2600184617e2a565b9250506174c2565b505b5092949350505050565b6000838186851161761157602085116175c0576000851561755257600161752e876020617e2a565b617539906008618df7565b617544906002618ef5565b61754e9190617e2a565b1990505b845181166000876175638b8b617d67565b61756d9190617e2a565b855190915083165b8281146175b25781861061759a5761758d8b8b617d67565b9650505050505050615164565b856175a481618ddd565b965050838651169050617575565b859650505050505050615164565b508383206000905b6175d28689617e2a565b821161760f578583208082036175ee5783945050505050615164565b6175f9600185617d67565b935050818061760790618ddd565b9250506175c8565b505b61761b8787617d67565b979650505050505050565b604080518082019091526000808252602082015260006176588560000151866020015186600001518760200151617506565b6020808701805191860191909152519091506176749082617e2a565b8352845160208601516176879190617d67565b810361769657600085526176c8565b835183516176a49190617d67565b855186906176b3908390617e2a565b90525083516176c29082617d67565b60208601525b50909392505050565b6020811061770957815183526176e8602084617d67565b92506176f5602083617d67565b9150617702602082617e2a565b90506176d1565b600019811561773857600161771f836020617e2a565b61772b90610100618ef5565b6177359190617e2a565b90505b9151835183169219169190911790915250565b606060006177598484613c37565b805160208083015160405193945061777393909101618f18565b60405160208183030381529060405291505092915050565b815181516000919081111561779e575081515b6020808501519084015160005b838110156178575782518251808214617827576000196020871015617806576001846177d8896020617e2a565b6177e29190617d67565b6177ed906008618df7565b6177f8906002618ef5565b6178029190617e2a565b1990505b81811683821681810391146178245797506137f19650505050505050565b50505b617832602086617d67565b945061783f602085617d67565b935050506020816178509190617d67565b90506177ab565b50845186516142e59190618f70565b610c9f80618f9183390190565b6112a680619c3083390190565b6117988061aed683390190565b61155a8061c66e83390190565b6040518060e001604052806060815260200160608152602001606081526020016000151581526020016000151581526020016000151581526020016178dd6178e2565b905290565b604051806101000160405280600015158152602001600015158152602001606081526020016000801916815260200160608152602001606081526020016000151581526020016178dd6040518060800160405280600081526020016000815260200160008152602001600081525090565b602080825282518282018190526000918401906040840190835b818110156179945783516001600160a01b031683526020938401939092019160010161796d565b509095945050505050565b60005b838110156179ba5781810151838201526020016179a2565b50506000910152565b600081518084526179db81602086016020860161799f565b601f01601f19169290920160200192915050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015617aeb577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452815180516001600160a01b03168652602090810151604082880181905281519088018190529101906060600582901b88018101919088019060005b81811015617ad1577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa08a8503018352617abb8486516179c3565b6020958601959094509290920191600101617a81565b509197505050602094850194929092019150600101617a17565b50929695505050505050565b600081518084526020840193506020830160005b82811015617b4b5781517fffffffff0000000000000000000000000000000000000000000000000000000016865260209586019590910190600101617b0b565b5093949350505050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015617aeb577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08786030184528151805160408752617bc160408801826179c3565b9050602082015191508681036020880152617bdc8183617af7565b965050506020938401939190910190600101617b7d565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015617aeb577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452617c558583516179c3565b94506020938401939190910190600101617c1b565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015617aeb577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc087860301845281516001600160a01b0381511686526020810151905060406020870152617ceb6040870182617af7565b9550506020938401939190910190600101617c92565b6001600160a01b03851681528360208201526001600160a01b03831660408201526080606082015260006142e560808301846179c3565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b808201808211156137f1576137f1617d38565b600181811c90821680617d8e57607f821691505b602082108103615a30577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060208284031215617dd957600080fd5b5051919050565b600060208284031215617df257600080fd5b8151801515811461386b57600080fd5b8381526001600160a01b0383166020820152606060408201526000615a1660608301846179c3565b818103818111156137f1576137f1617d38565b6001600160a01b038316815260406020820152600061516460408301846179c3565b60208152600061386b60208301846179c3565b7f4661696c656420746f206465706c6f7920636f6e747261637420000000000000815260008351617eaa81601a85016020880161799f565b7f3a20000000000000000000000000000000000000000000000000000000000000601a918401918201528351617ee781601c84016020880161799f565b01601c01949350505050565b600060208284031215617f0557600080fd5b81516001600160a01b038116811461386b57600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040516060810167ffffffffffffffff81118282101715617f6e57617f6e617f1c565b60405290565b60008067ffffffffffffffff841115617f8f57617f8f617f1c565b50604051601f19601f85018116603f0116810181811067ffffffffffffffff82111715617fbe57617fbe617f1c565b604052838152905080828401851015617fd657600080fd5b61553384602083018561799f565b600082601f830112617ff557600080fd5b61386b83835160208501617f74565b60006020828403121561801657600080fd5b815167ffffffffffffffff81111561802d57600080fd5b6137ed84828501617fe4565b6000835161804b81846020880161799f565b83519083019061805f81836020880161799f565b01949350505050565b7f4661696c656420746f206465706c6f7920636f6e7472616374200000000000008152600083516180a081601a85016020880161799f565b7f207573696e6720636f6e7374727563746f722064617461202200000000000000601a9184019182015283516180dd81603384016020880161799f565b7f220000000000000000000000000000000000000000000000000000000000000060339290910191820152603401949350505050565b60408152600b60408201527f464f554e4452595f4f5554000000000000000000000000000000000000000000606082015260806020820152600061386b60808301846179c3565b60006020828403121561816c57600080fd5b815167ffffffffffffffff81111561818357600080fd5b8201601f8101841361819457600080fd5b6137ed84825160208401617f74565b600085516181b5818460208a0161799f565b7f2f0000000000000000000000000000000000000000000000000000000000000090830190815285516181ef816001840160208a0161799f565b7f2f0000000000000000000000000000000000000000000000000000000000000060019290910191820152845161822d81600284016020890161799f565b6001818301019150507f2f000000000000000000000000000000000000000000000000000000000000006001820152835161826f81600284016020880161799f565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600292909101918201526007019695505050505050565b6040815260006182ba60408301846179c3565b8281036020840152600481527f2e6173740000000000000000000000000000000000000000000000000000000060208201526040810191505092915050565b7f436f756c64206e6f742066696e642041535420696e206172746966616374200081526000825161833181601f85016020870161799f565b7f2e205365742060617374203d20747275656020696e20666f756e6472792e746f601f9390910192830152507f6d6c000000000000000000000000000000000000000000000000000000000000603f820152604101919050565b60408152600061839e60408301846179c3565b8281036020840152601181527f2e6173742e6162736f6c7574655061746800000000000000000000000000000060208201526040810191505092915050565b6040815260006183f060408301846179c3565b8281036020840152600c81527f2e6173742e6c6963656e7365000000000000000000000000000000000000000060208201526040810191505092915050565b7f2e6d657461646174612e736f75726365732e5b2700000000000000000000000081526000825161846781601485016020870161799f565b7f275d2e6b656363616b32353600000000000000000000000000000000000000006014939091019283015250602001919050565b6040815260006184ae60408301856179c3565b828103602084015261386781856179c3565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f220000000000000000000000000000000000000000000000000000000000000081526000825161852781600185016020870161799f565b7f22000000000000000000000000000000000000000000000000000000000000006001939091019283015250600201919050565b6000825161856d81846020870161799f565b7f2f6275696c642d696e666f000000000000000000000000000000000000000000920191825250600b01919050565b7f436f756c64206e6f742066696e64206275696c642d696e666f2066696c65207781527f697468206d61746368696e6720736f7572636520636f6465206861736820666f60208201527f7220636f6e74726163742000000000000000000000000000000000000000000060408201526000825161862081604b85016020870161799f565b91909101604b0192915050565b600060ff821660ff810361864357618643617d38565b60010192915050565b7f406f70656e7a657070656c696e2f646566656e6465722d6465706c6f792d636c81527f69656e742d636c694000000000000000000000000000000000000000000000006020820152600082516186aa81602985016020870161799f565b9190910160290192915050565b60408152601660408201527f4f50454e5a455050454c494e5f424153485f5041544800000000000000000000606082015260806020820152600061386b60808301846179c3565b60006020828403121561871057600080fd5b815167ffffffffffffffff81111561872757600080fd5b82016060818503121561873957600080fd5b618741617f4b565b81518060030b811461875257600080fd5b8152602082015167ffffffffffffffff81111561876e57600080fd5b61877a86828501617fe4565b602083015250604082015167ffffffffffffffff81111561879a57600080fd5b6187a686828501617fe4565b604083015250949350505050565b7f4661696c656420746f2072756e206261736820636f6d6d616e6420776974682081527f220000000000000000000000000000000000000000000000000000000000000060208201526000825161881281602185016020870161799f565b7f222e20496620796f7520617265207573696e672057696e646f77732c2073657460219390910192830152507f20746865204f50454e5a455050454c494e5f424153485f5041544820656e766960418201527f726f6e6d656e74207661726961626c6520746f207468652066756c6c7920717560618201527f616c69666965642070617468206f66207468652062617368206578656375746160818201527f626c652e20466f72206578616d706c652c20696620796f75206172652075736960a18201527f6e672047697420666f722057696e646f77732c206164642074686520666f6c6c60c18201527f6f77696e67206c696e6520696e20746865202e656e762066696c65206f66207960e18201527f6f75722070726f6a65637420287573696e6720666f727761726420736c6173686101018201527f6573293a0a4f50454e5a455050454c494e5f424153485f504154483d22433a2f6101218201527f50726f6772616d2046696c65732f4769742f62696e2f6261736822000000000061014182015261015c01919050565b7f4661696c656420746f2066696e64206c696e652077697468207072656669782081527f27000000000000000000000000000000000000000000000000000000000000006020820152600083516189fe81602185016020880161799f565b7f2720696e206f75747075743a20000000000000000000000000000000000000006021918401918201528351618a3b81602e84016020880161799f565b01602e01949350505050565b7f4661696c656420746f2072756e2075706772616465207361666574792076616c81527f69646174696f6e3a2000000000000000000000000000000000000000000000006020820152600082516186aa81602985016020870161799f565b7f55706772616465207361666574792076616c69646174696f6e206661696c656481527f3a0a000000000000000000000000000000000000000000000000000000000000602082015260008251618b0381602285016020870161799f565b9190910160220192915050565b7f436f6e7472616374206e616d6520000000000000000000000000000000000000815260008251618b4881600e85016020870161799f565b7f206d75737420626520696e2074686520666f726d6174204d79436f6e74726163600e9390910192830152507f742e736f6c3a4d79436f6e7472616374206f72204d79436f6e74726163742e73602e8201527f6f6c206f72206f75742f4d79436f6e74726163742e736f6c2f4d79436f6e7472604e8201527f6163742e6a736f6e000000000000000000000000000000000000000000000000606e820152607601919050565b7f53504458206c6963656e7365206964656e746966696572200000000000000000815260008351618c2681601885016020880161799f565b7f20696e20000000000000000000000000000000000000000000000000000000006018918401918201528351618c6381601c84016020880161799f565b7f20646f6573206e6f74206c6f6f6b206c696b65206120737570706f7274656420601c92909101918201527f6c6963656e736520666f7220626c6f636b206578706c6f726572207665726966603c8201527f69636174696f6e2e205573652074686520606c6963656e73655479706560206f605c8201527f7074696f6e20746f20737065636966792061206c6963656e736520747970652c607c8201527f206f7220736574207468652060736b69704c6963656e73655479706560206f70609c8201527f74696f6e20746f2060747275656020746f20736b69702e00000000000000000060bc82015260d301949350505050565b60008251618d6981846020870161799f565b7f2000000000000000000000000000000000000000000000000000000000000000920191825250600101919050565b7f406f70656e7a657070656c696e2f75706772616465732d636f72654000000000815260008251618dd081601c85016020870161799f565b91909101601c0192915050565b60006000198203618df057618df0617d38565b5060010190565b80820281158282048414176137f1576137f1617d38565b6001815b6001841115618e4957808504811115618e2d57618e2d617d38565b6001841615618e3b57908102905b60019390931c928002618e12565b935093915050565b600082618e60575060016137f1565b81618e6d575060006137f1565b8160018114618e835760028114618e8d57618ea9565b60019150506137f1565b60ff841115618e9e57618e9e617d38565b50506001821b6137f1565b5060208310610133831016604e8410600b8410161715618ecc575081810a6137f1565b618ed96000198484618e0e565b8060001904821115618eed57618eed617d38565b029392505050565b600061386b8383618e51565b600081618f1057618f10617d38565b506000190190565b60008351618f2a81846020880161799f565b7f3a000000000000000000000000000000000000000000000000000000000000009083019081528351618f6481600184016020880161799f565b01600101949350505050565b8181036000831280158383131683831282161715616b2b57616b2b617d3856fe608060405234801561001057600080fd5b50604051610c9f380380610c9f83398101604081905261002f9161010d565b8181600361003d83826101ff565b50600461004a82826101ff565b50505050506102bd565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261007b57600080fd5b81516001600160401b0381111561009457610094610054565b604051601f8201601f19908116603f011681016001600160401b03811182821017156100c2576100c2610054565b6040528181528382016020018510156100da57600080fd5b60005b828110156100f9576020818601810151838301820152016100dd565b506000918101602001919091529392505050565b6000806040838503121561012057600080fd5b82516001600160401b0381111561013657600080fd5b6101428582860161006a565b602085015190935090506001600160401b0381111561016057600080fd5b61016c8582860161006a565b9150509250929050565b600181811c9082168061018a57607f821691505b6020821081036101aa57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156101fa57806000526020600020601f840160051c810160208510156101d75750805b601f840160051c820191505b818110156101f757600081556001016101e3565b50505b505050565b81516001600160401b0381111561021857610218610054565b61022c816102268454610176565b846101b0565b6020601f82116001811461026057600083156102485750848201515b600019600385901b1c1916600184901b1784556101f7565b600084815260208120601f198516915b828110156102905787850151825560209485019460019092019101610270565b50848210156102ae5786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b6109d3806102cc6000396000f3fe608060405234801561001057600080fd5b50600436106100be5760003560e01c806340c10f191161007657806395d89b411161005b57806395d89b4114610183578063a9059cbb1461018b578063dd62ed3e1461019e57600080fd5b806340c10f191461013857806370a082311461014d57600080fd5b806318160ddd116100a757806318160ddd1461010457806323b872dd14610116578063313ce5671461012957600080fd5b806306fdde03146100c3578063095ea7b3146100e1575b600080fd5b6100cb6101e4565b6040516100d891906107bf565b60405180910390f35b6100f46100ef366004610854565b610276565b60405190151581526020016100d8565b6002545b6040519081526020016100d8565b6100f461012436600461087e565b610290565b604051601281526020016100d8565b61014b610146366004610854565b6102b4565b005b61010861015b3660046108bb565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6100cb6102c2565b6100f4610199366004610854565b6102d1565b6101086101ac3660046108dd565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6060600380546101f390610910565b80601f016020809104026020016040519081016040528092919081815260200182805461021f90610910565b801561026c5780601f106102415761010080835404028352916020019161026c565b820191906000526020600020905b81548152906001019060200180831161024f57829003601f168201915b5050505050905090565b6000336102848185856102df565b60019150505b92915050565b60003361029e8582856102f1565b6102a98585856103c5565b506001949350505050565b6102be8282610470565b5050565b6060600480546101f390610910565b6000336102848185856103c5565b6102ec83838360016104cc565b505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146103bf57818110156103b0576040517ffb8f41b200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416600482015260248101829052604481018390526064015b60405180910390fd5b6103bf848484840360006104cc565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8316610415576040517f96c6fd1e000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff8216610465576040517fec442f05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b6102ec838383610614565b73ffffffffffffffffffffffffffffffffffffffff82166104c0576040517fec442f05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b6102be60008383610614565b73ffffffffffffffffffffffffffffffffffffffff841661051c576040517fe602df05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff831661056c576040517f94280d62000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260016020908152604080832093871683529290522082905580156103bf578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161060691815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff831661064c5780600260008282546106419190610963565b909155506106fe9050565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260208190526040902054818110156106d2576040517fe450d38c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8516600482015260248101829052604481018390526064016103a7565b73ffffffffffffffffffffffffffffffffffffffff841660009081526020819052604090209082900390555b73ffffffffffffffffffffffffffffffffffffffff821661072757600280548290039055610753565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090208054820190555b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516107b291815260200190565b60405180910390a3505050565b602081526000825180602084015260005b818110156107ed57602081860181015160408684010152016107d0565b5060006040828501015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011684010191505092915050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461084f57600080fd5b919050565b6000806040838503121561086757600080fd5b6108708361082b565b946020939093013593505050565b60008060006060848603121561089357600080fd5b61089c8461082b565b92506108aa6020850161082b565b929592945050506040919091013590565b6000602082840312156108cd57600080fd5b6108d68261082b565b9392505050565b600080604083850312156108f057600080fd5b6108f98361082b565b91506109076020840161082b565b90509250929050565b600181811c9082168061092457607f821691505b60208210810361095d577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b8082018082111561028a577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea26469706673582212207e804ca539d49155d2b6bc19268ce22f9f857027c75247d69fb0d56a089c93d464736f6c634300081a0033608060405234801561001057600080fd5b506040516112a63803806112a683398101604081905261002f91610110565b604051806040016040528060048152602001635a65746160e01b815250604051806040016040528060048152602001635a45544160e01b815250816003908161007891906101e2565b50600461008582826101e2565b5050506001600160a01b03821615806100a557506001600160a01b038116155b156100c35760405163e6c4247b60e01b815260040160405180910390fd5b600680546001600160a01b039384166001600160a01b031991821617909155600780549290931691161790556102a0565b80516001600160a01b038116811461010b57600080fd5b919050565b6000806040838503121561012357600080fd5b61012c836100f4565b915061013a602084016100f4565b90509250929050565b634e487b7160e01b600052604160045260246000fd5b600181811c9082168061016d57607f821691505b60208210810361018d57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156101dd57806000526020600020601f840160051c810160208510156101ba5750805b601f840160051c820191505b818110156101da57600081556001016101c6565b50505b505050565b81516001600160401b038111156101fb576101fb610143565b61020f816102098454610159565b84610193565b6020601f821160018114610243576000831561022b5750848201515b600019600385901b1c1916600184901b1784556101da565b600084815260208120601f198516915b828110156102735787850151825560209485019460019092019101610253565b50848210156102915786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b610ff7806102af6000396000f3fe608060405234801561001057600080fd5b506004361061011b5760003560e01c806342966c68116100b257806379cc679011610081578063a9059cbb11610066578063a9059cbb1461028e578063bff9662a146102a1578063dd62ed3e146102c157600080fd5b806379cc67901461027357806395d89b411461028657600080fd5b806342966c68146102025780635b1125911461021557806370a0823114610235578063779e3b631461026b57600080fd5b80631e458bee116100ee5780631e458bee1461018857806323b872dd1461019b578063313ce567146101ae578063328a01d0146101bd57600080fd5b806306fdde0314610120578063095ea7b31461013e57806315d57fd41461016157806318160ddd14610176575b600080fd5b610128610307565b6040516101359190610d97565b60405180910390f35b61015161014c366004610e2c565b610399565b6040519015158152602001610135565b61017461016f366004610e56565b6103b3565b005b6002545b604051908152602001610135565b610174610196366004610e89565b61057e565b6101516101a9366004610ebc565b610631565b60405160128152602001610135565b6007546101dd9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610135565b610174610210366004610ef9565b610655565b6006546101dd9073ffffffffffffffffffffffffffffffffffffffff1681565b61017a610243366004610f12565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b610174610662565b610174610281366004610e2c565b610786565b610128610837565b61015161029c366004610e2c565b610846565b6005546101dd9073ffffffffffffffffffffffffffffffffffffffff1681565b61017a6102cf366004610e56565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b60606003805461031690610f34565b80601f016020809104026020016040519081016040528092919081815260200182805461034290610f34565b801561038f5780601f106103645761010080835404028352916020019161038f565b820191906000526020600020905b81548152906001019060200180831161037257829003601f168201915b5050505050905090565b6000336103a7818585610854565b60019150505b92915050565b60075473ffffffffffffffffffffffffffffffffffffffff1633148015906103f3575060065473ffffffffffffffffffffffffffffffffffffffff163314155b15610431576040517fcdfcef970000000000000000000000000000000000000000000000000000000081523360048201526024015b60405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff82161580610468575073ffffffffffffffffffffffffffffffffffffffff8116155b1561049f576040517fe6c4247b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6006805473ffffffffffffffffffffffffffffffffffffffff8481167fffffffffffffffffffffffff0000000000000000000000000000000000000000928316811790935560058054918516919092161790556040805133815260208101929092527fe79965b5c67dcfb2cf5fe152715e4a7256cee62a3d5dd8484fd8a8539eb8beff910160405180910390a16040805133815273ffffffffffffffffffffffffffffffffffffffff831660208201527f1b9352454524a57a51f24f67dc66d898f616922cd1f7a12d73570ece12b1975c910160405180910390a15050565b60055473ffffffffffffffffffffffffffffffffffffffff1633146105d1576040517f3fe32fba000000000000000000000000000000000000000000000000000000008152336004820152602401610428565b6105db8383610866565b808373ffffffffffffffffffffffffffffffffffffffff167fc263b302aec62d29105026245f19e16f8e0137066ccd4a8bd941f716bd4096bb8460405161062491815260200190565b60405180910390a3505050565b60003361063f8582856108c6565b61064a858585610995565b506001949350505050565b61065f3382610a40565b50565b60075473ffffffffffffffffffffffffffffffffffffffff1633146106b5576040517fe700765e000000000000000000000000000000000000000000000000000000008152336004820152602401610428565b60065473ffffffffffffffffffffffffffffffffffffffff16610704576040517fe6c4247b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600654600780547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff90921691821790556040805133815260208101929092527f5104c9abdc7d111c2aeb4ce890ac70274a4be2ee83f46a62551be5e6ebc82dd0910160405180910390a1565b60055473ffffffffffffffffffffffffffffffffffffffff1633146107d9576040517f3fe32fba000000000000000000000000000000000000000000000000000000008152336004820152602401610428565b6107e38282610a9c565b8173ffffffffffffffffffffffffffffffffffffffff167f919f7e2092ffcc9d09f599be18d8152860b0c054df788a33bc549cdd9d0f15b18260405161082b91815260200190565b60405180910390a25050565b60606004805461031690610f34565b6000336103a7818585610995565b6108618383836001610ab1565b505050565b73ffffffffffffffffffffffffffffffffffffffff82166108b6576040517fec442f0500000000000000000000000000000000000000000000000000000000815260006004820152602401610428565b6108c260008383610bf9565b5050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811461098f5781811015610980576040517ffb8f41b200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff841660048201526024810182905260448101839052606401610428565b61098f84848484036000610ab1565b50505050565b73ffffffffffffffffffffffffffffffffffffffff83166109e5576040517f96c6fd1e00000000000000000000000000000000000000000000000000000000815260006004820152602401610428565b73ffffffffffffffffffffffffffffffffffffffff8216610a35576040517fec442f0500000000000000000000000000000000000000000000000000000000815260006004820152602401610428565b610861838383610bf9565b73ffffffffffffffffffffffffffffffffffffffff8216610a90576040517f96c6fd1e00000000000000000000000000000000000000000000000000000000815260006004820152602401610428565b6108c282600083610bf9565b610aa78233836108c6565b6108c28282610a40565b73ffffffffffffffffffffffffffffffffffffffff8416610b01576040517fe602df0500000000000000000000000000000000000000000000000000000000815260006004820152602401610428565b73ffffffffffffffffffffffffffffffffffffffff8316610b51576040517f94280d6200000000000000000000000000000000000000000000000000000000815260006004820152602401610428565b73ffffffffffffffffffffffffffffffffffffffff8085166000908152600160209081526040808320938716835292905220829055801561098f578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051610beb91815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff8316610c31578060026000828254610c269190610f87565b90915550610ce39050565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205481811015610cb7576040517fe450d38c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff851660048201526024810182905260448101839052606401610428565b73ffffffffffffffffffffffffffffffffffffffff841660009081526020819052604090209082900390555b73ffffffffffffffffffffffffffffffffffffffff8216610d0c57600280548290039055610d38565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090208054820190555b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161062491815260200190565b602081526000825180602084015260005b81811015610dc55760208186018101516040868401015201610da8565b5060006040828501015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011684010191505092915050565b803573ffffffffffffffffffffffffffffffffffffffff81168114610e2757600080fd5b919050565b60008060408385031215610e3f57600080fd5b610e4883610e03565b946020939093013593505050565b60008060408385031215610e6957600080fd5b610e7283610e03565b9150610e8060208401610e03565b90509250929050565b600080600060608486031215610e9e57600080fd5b610ea784610e03565b95602085013595506040909401359392505050565b600080600060608486031215610ed157600080fd5b610eda84610e03565b9250610ee860208501610e03565b929592945050506040919091013590565b600060208284031215610f0b57600080fd5b5035919050565b600060208284031215610f2457600080fd5b610f2d82610e03565b9392505050565b600181811c90821680610f4857607f821691505b602082108103610f81577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b808201808211156103ad577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea2646970667358221220085f01204b33dc17013c78c74fbca32a3da2c0b384ce7c8878c889551af28c6164736f6c634300081a003360a060405234801561001057600080fd5b5060405161179838038061179883398101604081905261002f916101e5565b60016000556002805460ff191690556001600160a01b038316158061005b57506001600160a01b038216155b8061006d57506001600160a01b038116155b1561008b5760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b0383166080526100a3600082610134565b506100ce7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a82610134565b506100f97f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e483610134565b5061011260008051602061177883398151915282610134565b5061012b60008051602061177883398151915283610134565b50505050610228565b60008281526001602090815260408083206001600160a01b038516845290915281205460ff166101bf5760008381526001602081815260408084206001600160a01b0387168086529252808420805460ff19169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45060016101c3565b5060005b92915050565b80516001600160a01b03811681146101e057600080fd5b919050565b6000806000606084860312156101fa57600080fd5b610203846101c9565b9250610211602085016101c9565b915061021f604085016101c9565b90509250925092565b60805161151961025f6000396000818161019e01528181610500015281816105620152818161099101526109f301526115196000f3fe608060405234801561001057600080fd5b506004361061016c5760003560e01c806385f438c1116100cd578063c8a0236211610081578063d936547e11610066578063d936547e14610355578063d9caed1214610378578063e63ab1e91461038b57600080fd5b8063c8a023621461032f578063d547741f1461034257600080fd5b80639a590427116100b25780639a590427146103015780639b19251a14610314578063a217fddf1461032757600080fd5b806385f438c11461029457806391d14854146102bb57600080fd5b806336568abe11610124578063570618e111610109578063570618e11461025a5780635c975abb146102815780638456cb591461028c57600080fd5b806336568abe1461023f5780633f4ba83a1461025257600080fd5b806321fc65f21161015557806321fc65f2146101e5578063248a9ca3146101fa5780632f2ff15d1461022c57600080fd5b806301ffc9a714610171578063116191b614610199575b600080fd5b61018461017f366004611224565b6103b2565b60405190151581526020015b60405180910390f35b6101c07f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610190565b6101f86101f336600461128f565b61044b565b005b61021e61020836600461132c565b6000908152600160208190526040909120015490565b604051908152602001610190565b6101f861023a366004611345565b61064c565b6101f861024d366004611345565b610678565b6101f86106d6565b61021e7f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a81565b60025460ff16610184565b6101f861070b565b61021e7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b6101846102c9366004611345565b600091825260016020908152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b6101f861030f366004611371565b61073d565b6101f8610322366004611371565b61080b565b61021e600081565b6101f861033d36600461128f565b6108dc565b6101f8610350366004611345565b610ac3565b610184610363366004611371565b60036020526000908152604090205460ff1681565b6101f861038636600461138c565b610ae9565b61021e7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061044557507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b610453610c15565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461047d81610c58565b610485610c62565b73ffffffffffffffffffffffffffffffffffffffff861660009081526003602052604090205460ff166104e4576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61052573ffffffffffffffffffffffffffffffffffffffff87167f000000000000000000000000000000000000000000000000000000000000000086610ca1565b6040517f5131ab5900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690635131ab599061059f9089908990899089908990600401611412565b600060405180830381600087803b1580156105b957600080fd5b505af11580156105cd573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167f85b5be9cf454e05e0bddf49315178102227c312078eefa3c00294fb4d912ae4e8686866040516106329392919061146f565b60405180910390a3506106456001600055565b5050505050565b6000828152600160208190526040909120015461066881610c58565b6106728383610d2e565b50505050565b73ffffffffffffffffffffffffffffffffffffffff811633146106c7576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6106d18282610ddb565b505050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61070081610c58565b610708610e7c565b50565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61073581610c58565b610708610edb565b7f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a61076781610c58565b73ffffffffffffffffffffffffffffffffffffffff82166107b4576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216600081815260036020526040808220805460ff19169055517f51085ddf9ebdded84b76e829eb58c4078e4b5bdf97d9a94723f336039da467919190a25050565b7f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a61083581610c58565b73ffffffffffffffffffffffffffffffffffffffff8216610882576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216600081815260036020526040808220805460ff19166001179055517faab7954e9d246b167ef88aeddad35209ca2489d95a8aeb59e288d9b19fae5a549190a25050565b6108e4610c15565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461090e81610c58565b610916610c62565b73ffffffffffffffffffffffffffffffffffffffff861660009081526003602052604090205460ff16610975576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6109b673ffffffffffffffffffffffffffffffffffffffff87167f000000000000000000000000000000000000000000000000000000000000000086610ca1565b6040517fb8969bd400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063b8969bd490610a309089908990899089908990600401611412565b600060405180830381600087803b158015610a4a57600080fd5b505af1158015610a5e573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fb9d4efa96044e5f5e03e696fa9ae2ff66911cc27e8a637c3627c75bc5b2241c88686866040516106329392919061146f565b60008281526001602081905260409091200154610adf81610c58565b6106728383610ddb565b610af1610c15565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e4610b1b81610c58565b610b23610c62565b73ffffffffffffffffffffffffffffffffffffffff841660009081526003602052604090205460ff16610b82576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610ba373ffffffffffffffffffffffffffffffffffffffff85168484610ca1565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f9b1bfa7fa9ee420a16e124f794c35ac9f90472acc99140eb2f6447c714cad8eb84604051610c0291815260200190565b60405180910390a3506106d16001600055565b600260005403610c51576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b6107088133610f18565b60025460ff1615610c9f576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6040805173ffffffffffffffffffffffffffffffffffffffff8416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb000000000000000000000000000000000000000000000000000000001790526106d1908490610fa9565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff16610dd357600083815260016020818152604080842073ffffffffffffffffffffffffffffffffffffffff87168086529252808420805460ff19169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a4506001610445565b506000610445565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff1615610dd357600083815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff86168085529252808320805460ff1916905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a4506001610445565b610e8461103f565b6002805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b610ee3610c62565b6002805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258610eb13390565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16610fa5576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82166004820152602481018390526044015b60405180910390fd5b5050565b6000610fcb73ffffffffffffffffffffffffffffffffffffffff84168361107b565b90508051600014158015610ff0575080806020019051810190610fee9190611492565b155b156106d1576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84166004820152602401610f9c565b60025460ff16610c9f576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606061108983836000611090565b9392505050565b6060814710156110ce576040517fcd786059000000000000000000000000000000000000000000000000000000008152306004820152602401610f9c565b6000808573ffffffffffffffffffffffffffffffffffffffff1684866040516110f791906114b4565b60006040518083038185875af1925050503d8060008114611134576040519150601f19603f3d011682016040523d82523d6000602084013e611139565b606091505b5091509150611149868383611153565b9695505050505050565b60608261116857611163826111e2565b611089565b815115801561118c575073ffffffffffffffffffffffffffffffffffffffff84163b155b156111db576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85166004820152602401610f9c565b5080611089565b8051156111f25780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006020828403121561123657600080fd5b81357fffffffff000000000000000000000000000000000000000000000000000000008116811461108957600080fd5b803573ffffffffffffffffffffffffffffffffffffffff8116811461128a57600080fd5b919050565b6000806000806000608086880312156112a757600080fd5b6112b086611266565b94506112be60208701611266565b935060408601359250606086013567ffffffffffffffff8111156112e157600080fd5b8601601f810188136112f257600080fd5b803567ffffffffffffffff81111561130957600080fd5b88602082840101111561131b57600080fd5b959894975092955050506020019190565b60006020828403121561133e57600080fd5b5035919050565b6000806040838503121561135857600080fd5b8235915061136860208401611266565b90509250929050565b60006020828403121561138357600080fd5b61108982611266565b6000806000606084860312156113a157600080fd5b6113aa84611266565b92506113b860208501611266565b929592945050506040919091013590565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff8616815273ffffffffffffffffffffffffffffffffffffffff851660208201528360408201526080606082015260006114646080830184866113c9565b979650505050505050565b8381526040602082015260006114896040830184866113c9565b95945050505050565b6000602082840312156114a457600080fd5b8151801515811461108957600080fd5b6000825160005b818110156114d557602081860181015185830152016114bb565b50600092019182525091905056fea26469706673582212207ea3ad4ba4a6d39c3be3cec464753448900300ac3b508b4000815de5b914c53064736f6c634300081a00338619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a60c060405260001960035534801561001657600080fd5b5060405161155a38038061155a83398101604081905261003591610220565b60016000819055805460ff19169055838383836001600160a01b038416158061006557506001600160a01b038316155b8061007757506001600160a01b038216155b8061008957506001600160a01b038116155b156100a75760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b03808516608052831660a0526100c5600082610154565b506100f07f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e483610154565b5061011b7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb83610154565b506101467f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a82610154565b505050505050505050610274565b60008281526002602090815260408083206001600160a01b038516845290915281205460ff166101fa5760008381526002602090815260408083206001600160a01b03861684529091529020805460ff191660011790556101b23390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45060016101fe565b5060005b92915050565b80516001600160a01b038116811461021b57600080fd5b919050565b6000806000806080858703121561023657600080fd5b61023f85610204565b935061024d60208601610204565b925061025b60408601610204565b915061026960608601610204565b905092959194509250565b60805160a0516112826102d86000396000818161021d01528181610531015281816108240152818161097b01528181610ad00152610bf20152600081816101d1015281816104a1015281816105040152818161079401526107f701526112826000f3fe608060405234801561001057600080fd5b50600436106101775760003560e01c80635e3e9fef116100d857806391d148541161008c578063d547741f11610066578063d547741f14610386578063d5abeb0114610399578063e63ab1e9146103a257600080fd5b806391d1485414610311578063a217fddf14610357578063a783c7891461035f57600080fd5b8063743e0c9b116100bd578063743e0c9b146102cf5780638456cb59146102e257806385f438c1146102ea57600080fd5b80635e3e9fef146102a95780636f8b44b0146102bc57600080fd5b8063248a9ca31161012f57806336568abe1161011457806336568abe146102835780633f4ba83a146102965780635c975abb1461029e57600080fd5b8063248a9ca31461023f5780632f2ff15d1461027057600080fd5b8063106e629011610160578063106e6290146101b9578063116191b6146101cc57806321e093b11461021857600080fd5b806301ffc9a71461017c57806302d5c899146101a4575b600080fd5b61018f61018a366004610fb4565b6103c9565b60405190151581526020015b60405180910390f35b6101b76101b2366004611026565b610462565b005b6101b76101c73660046110b8565b6105f7565b6101f37f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161019b565b6101f37f000000000000000000000000000000000000000000000000000000000000000081565b61026261024d3660046110eb565b60009081526002602052604090206001015490565b60405190815260200161019b565b6101b761027e366004611104565b61069c565b6101b7610291366004611104565b6106c7565b6101b7610720565b60015460ff1661018f565b6101b76102b7366004611026565b610755565b6101b76102ca3660046110eb565b6108d0565b6101b76102dd3660046110eb565b61093e565b6101b76109e8565b6102627f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b61018f61031f366004611104565b600091825260026020908152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b610262600081565b6102627f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb81565b6101b7610394366004611104565b610a1a565b61026260035481565b6102627f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061045c57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b61046a610a3f565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461049481610a82565b61049c610a8c565b6104c77f00000000000000000000000000000000000000000000000000000000000000008684610acb565b6040517fb8969bd400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063b8969bd490610561907f0000000000000000000000000000000000000000000000000000000000000000908a908a908a908a90600401611179565b600060405180830381600087803b15801561057b57600080fd5b505af115801561058f573d6000803e3d6000fd5b505050508573ffffffffffffffffffffffffffffffffffffffff167fba96f26bdda53eb8c8ba39045dfb4ff39753fbc7a6edcf250a88e75e78d102fe8686866040516105dd939291906111d6565b60405180910390a2506105f06001600055565b5050505050565b6105ff610a3f565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461062981610a82565b610631610a8c565b61063c848484610acb565b8373ffffffffffffffffffffffffffffffffffffffff167f884edad9ce6fa2440d8a54cc123490eb96d2768479d49ff9c7366125a94243648460405161068491815260200190565b60405180910390a2506106976001600055565b505050565b6000828152600260205260409020600101546106b781610a82565b6106c18383610c53565b50505050565b73ffffffffffffffffffffffffffffffffffffffff81163314610716576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6106978282610d53565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61074a81610a82565b610752610e12565b50565b61075d610a3f565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461078781610a82565b61078f610a8c565b6107ba7f00000000000000000000000000000000000000000000000000000000000000008684610acb565b6040517f5131ab5900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690635131ab5990610854907f0000000000000000000000000000000000000000000000000000000000000000908a908a908a908a90600401611179565b600060405180830381600087803b15801561086e57600080fd5b505af1158015610882573d6000803e3d6000fd5b505050508573ffffffffffffffffffffffffffffffffffffffff167f7772f56296d3a5202974a45c61c9188d844ab4d6eeb18c851e4b8d5384ca6ced8686866040516105dd939291906111d6565b7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb6108fa81610a82565b610902610a8c565b60038290556040518281527f7810bd47de260c3e9ee10061cf438099dd12256c79485f12f94dbccc981e806c9060200160405180910390a15050565b610946610a8c565b6040517f79cc6790000000000000000000000000000000000000000000000000000000008152336004820152602481018290527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16906379cc679090604401600060405180830381600087803b1580156109d457600080fd5b505af11580156105f0573d6000803e3d6000fd5b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610a1281610a82565b610752610e8f565b600082815260026020526040902060010154610a3581610a82565b6106c18383610d53565b600260005403610a7b576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b6107528133610ee8565b60015460ff1615610ac9576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6003547f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b39573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b5d91906111f9565b610b679084611212565b1115610b9f576040517fc30436e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f1e458bee00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff848116600483015260248201849052604482018390527f00000000000000000000000000000000000000000000000000000000000000001690631e458bee90606401600060405180830381600087803b158015610c3657600080fd5b505af1158015610c4a573d6000803e3d6000fd5b50505050505050565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff16610d4b57600083815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff86168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055610ce93390565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a450600161045c565b50600061045c565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff1615610d4b57600083815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8616808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a450600161045c565b610e1a610f78565b600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b610e97610a8c565b600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016811790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25833610e65565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16610f74576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff821660048201526024810183905260440160405180910390fd5b5050565b60015460ff16610ac9576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060208284031215610fc657600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610ff657600080fd5b9392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461102157600080fd5b919050565b60008060008060006080868803121561103e57600080fd5b61104786610ffd565b945060208601359350604086013567ffffffffffffffff81111561106a57600080fd5b8601601f8101881361107b57600080fd5b803567ffffffffffffffff81111561109257600080fd5b8860208284010111156110a457600080fd5b959894975060200195606001359392505050565b6000806000606084860312156110cd57600080fd5b6110d684610ffd565b95602085013595506040909401359392505050565b6000602082840312156110fd57600080fd5b5035919050565b6000806040838503121561111757600080fd5b8235915061112760208401610ffd565b90509250929050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff8616815273ffffffffffffffffffffffffffffffffffffffff851660208201528360408201526080606082015260006111cb608083018486611130565b979650505050505050565b8381526040602082015260006111f0604083018486611130565b95945050505050565b60006020828403121561120b57600080fd5b5051919050565b8082018082111561045c577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea2646970667358221220de5fa55e0ca79ea2f08903481d01ea00bbbf346b9cfba44e12a2dd6f3a6f2e8a64736f6c634300081a0033a2646970667358221220829f5589fc6ff8f3f193df6db41145c289a0623a28342c20ce54af9028fe01d464736f6c634300081a0033", } // GatewayEVMInboundTestABI is the input ABI used to generate the binding from. diff --git a/v2/pkg/gatewayevm.t.sol/gatewayevmtest.go b/v2/pkg/gatewayevm.t.sol/gatewayevmtest.go index 1f52cce2..8e1922f4 100644 --- a/v2/pkg/gatewayevm.t.sol/gatewayevmtest.go +++ b/v2/pkg/gatewayevm.t.sol/gatewayevmtest.go @@ -50,7 +50,7 @@ type StdInvariantFuzzSelector struct { // GatewayEVMTestMetaData contains all meta data concerning the GatewayEVMTest contract. var GatewayEVMTestMetaData = &bind.MetaData{ ABI: "[{\"type\":\"function\",\"name\":\"ASSET_HANDLER_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"DEFAULT_ADMIN_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"IS_TEST\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"PAUSER_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"TSS_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"WITHDRAWER_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeArtifacts\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedArtifacts_\",\"type\":\"string[]\",\"internalType\":\"string[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeContracts\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedContracts_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeSelectors\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedSelectors_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzSelector[]\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"selectors\",\"type\":\"bytes4[]\",\"internalType\":\"bytes4[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeSenders\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedSenders_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"failed\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"setUp\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"targetArtifactSelectors\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedArtifactSelectors_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzArtifactSelector[]\",\"components\":[{\"name\":\"artifact\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"selectors\",\"type\":\"bytes4[]\",\"internalType\":\"bytes4[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetArtifacts\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedArtifacts_\",\"type\":\"string[]\",\"internalType\":\"string[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetContracts\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedContracts_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetInterfaces\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedInterfaces_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzInterface[]\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"artifacts\",\"type\":\"string[]\",\"internalType\":\"string[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetSelectors\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedSelectors_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzSelector[]\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"selectors\",\"type\":\"bytes4[]\",\"internalType\":\"bytes4[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetSenders\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedSenders_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"testExecuteFailsIfDestinationIsZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testExecuteRevert\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testExecuteRevertFailsIfReceiverIsZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testExecuteRevertFailsIfSenderIsNotTSS\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testExecuteWithERC20FailsIfNotCustodyOrConnector\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testForwardCallToReceiveNoParams\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testForwardCallToReceiveNoParamsTogglePause\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testForwardCallToReceiveNonPayable\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testForwardCallToReceiveNonPayableFailsIfSenderIsNotTSS\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testForwardCallToReceivePayable\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testRevertWithERC20FailsIfNotCustodyOrConnector\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testSetConnectorFailsIfSenderIsNotAdmin\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testSetConnectorFailsIfSet\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testSetConnectorFailsIfZero\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testSetCustodyFailsIfSenderIsNotAdmin\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testSetCustodyFailsIfSet\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testSetCustodyFailsIfZero\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"event\",\"name\":\"Call\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"receiver\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Deposit\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"receiver\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"asset\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Executed\",\"inputs\":[{\"name\":\"destination\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ExecutedWithERC20\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedERC20\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"token\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"destination\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedNoParams\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedNonPayable\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"strs\",\"type\":\"string[]\",\"indexed\":false,\"internalType\":\"string[]\"},{\"name\":\"nums\",\"type\":\"uint256[]\",\"indexed\":false,\"internalType\":\"uint256[]\"},{\"name\":\"flag\",\"type\":\"bool\",\"indexed\":false,\"internalType\":\"bool\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedPayable\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"str\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"num\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"flag\",\"type\":\"bool\",\"indexed\":false,\"internalType\":\"bool\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedRevert\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Reverted\",\"inputs\":[{\"name\":\"destination\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RevertedWithERC20\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Unwhitelisted\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Whitelisted\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Withdraw\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"WithdrawAndCall\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"WithdrawAndRevert\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log\",\"inputs\":[{\"name\":\"\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_address\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_array\",\"inputs\":[{\"name\":\"val\",\"type\":\"uint256[]\",\"indexed\":false,\"internalType\":\"uint256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_array\",\"inputs\":[{\"name\":\"val\",\"type\":\"int256[]\",\"indexed\":false,\"internalType\":\"int256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_array\",\"inputs\":[{\"name\":\"val\",\"type\":\"address[]\",\"indexed\":false,\"internalType\":\"address[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_bytes\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_bytes32\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_int\",\"inputs\":[{\"name\":\"\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_address\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_array\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"uint256[]\",\"indexed\":false,\"internalType\":\"uint256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_array\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"int256[]\",\"indexed\":false,\"internalType\":\"int256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_array\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"address[]\",\"indexed\":false,\"internalType\":\"address[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_bytes\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_bytes32\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_decimal_int\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"},{\"name\":\"decimals\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_decimal_uint\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"decimals\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_int\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_string\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_uint\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_string\",\"inputs\":[{\"name\":\"\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_uint\",\"inputs\":[{\"name\":\"\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"logs\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"AccessControlUnauthorizedAccount\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"neededRole\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"type\":\"error\",\"name\":\"ApprovalFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ConnectorInitialized\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"CustodyInitialized\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"DepositFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"EnforcedPause\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ExecutionFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientERC20Amount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientETHAmount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NotWhitelistedInCustody\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZeroAddress\",\"inputs\":[]}]", - Bin: "0x6080604052600c8054600160ff199182168117909255601f80549091169091179055348015602c57600080fd5b5061f7ba8061003c6000396000f3fe608060405234801561001057600080fd5b50600436106102415760003560e01c8063a217fddf11610145578063cebad2a6116100bd578063e6afc7901161008c578063fa18c09b11610071578063fa18c09b1461042c578063fa7626d414610434578063fe7bdbb21461044157600080fd5b8063e6afc7901461041c578063f68bd1c01461042457600080fd5b8063cebad2a6146103dd578063dd51e82f146103e5578063e20c9f71146103ed578063e63ab1e9146103f557600080fd5b8063b124dbf511610114578063ba414fa6116100f9578063ba414fa6146103b5578063ccf20616146103cd578063ce5871e1146103d557600080fd5b8063b124dbf5146103a5578063b5508aa9146103ad57600080fd5b8063a217fddf14610366578063a56f7a4b1461036e578063a783c78914610376578063b0464fdc1461039d57600080fd5b806344671b94116101d85780637d7f772a116101a757806385226c811161018c57806385226c811461031557806385f438c11461032a578063916a17c61461035157600080fd5b80637d7f772a146103055780637ebf744f1461030d57600080fd5b806344671b94146102ab57806351010e49146102b35780635d62c860146102bb57806366d9a9a0146102f057600080fd5b80631ed7831c116102145780631ed7831c146102685780632ade3880146102865780633e5e3c231461029b5780633f7286f4146102a357600080fd5b806304b974f9146102465780630a9254e4146102505780631226c655146102585780631855c33714610260575b600080fd5b61024e610449565b005b61024e610656565b61024e610fb8565b61024e611129565b61027061129e565b60405161027d9190618684565b60405180910390f35b61028e611300565b60405161027d9190618720565b610270611442565b6102706114a2565b61024e611502565b61024e611881565b6102e27f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b981565b60405190815260200161027d565b6102f8611a5a565b60405161027d9190618886565b61024e611bdc565b61024e611f3f565b61031d6120b4565b60405161027d9190618980565b6102e27f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b610359612184565b60405161027d9190618993565b6102e2600081565b61024e61227f565b6102e27f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb81565b6103596123d1565b61024e6124cc565b61031d612770565b6103bd612840565b604051901515815260200161027d565b61024e612914565b61024e612a66565b61024e612bd7565b61024e612df8565b6102706135ed565b6102e27f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b61024e61364d565b61024e6138bb565b61024e613cb0565b601f546103bd9060ff1681565b61024e614008565b6040805160048082526024820183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f6ed7016900000000000000000000000000000000000000000000000000000000179052602854925163ca669fa760e01b81529192737109709ecfa91a80626ff3989d68f67f5b1dd12d9263ca669fa7926104f0926001600160a01b031691016001600160a01b0391909116815260200190565b600060405180830381600087803b15801561050a57600080fd5b505af115801561051e573d6000803e3d6000fd5b50506040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b1580156105a757600080fd5b505af11580156105bb573d6000803e3d6000fd5b50506020546040517f1cff79cd0000000000000000000000000000000000000000000000000000000081526001600160a01b039091169250631cff79cd915061060b906000908590600401618a2a565b6000604051808303816000875af115801561062a573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526106529190810190618b34565b5050565b602680547fffffffffffffffffffffffff00000000000000000000000000000000000000009081163017909155602780548216611234179055602880549091166156781790556040516106a89061858a565b60408082526004908201527f746573740000000000000000000000000000000000000000000000000000000060608201526080602082018190526003908201527f54544b000000000000000000000000000000000000000000000000000000000060a082015260c001604051809103906000f08015801561072d573d6000803e3d6000fd5b50602480547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03928316179055602854604051911690819061077690618597565b6001600160a01b03928316815291166020820152604001604051809103906000f0801580156107a9573d6000803e3d6000fd5b50602580547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03928316908117909155604080518082018252600e81527f4761746577617945564d2e736f6c000000000000000000000000000000000000602082015260285460265492519085166024820152604481019390935292166064820152610898919060840160408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fc0c53b8b0000000000000000000000000000000000000000000000000000000017905261447d565b601f80547fffffffffffffffffffffff0000000000000000000000000000000000000000ff166101006001600160a01b0393841681029190911791829055602080549190920483167fffffffffffffffffffffffff00000000000000000000000000000000000000009091168117909155602854602654604051929391821692911690610924906185a4565b6001600160a01b03938416815291831660208301529091166040820152606001604051809103906000f080158015610960573d6000803e3d6000fd5b50602280547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392831617905560205460255460285460265460405193851694928316939183169216906109bb906185b1565b6001600160a01b039485168152928416602084015290831660408301529091166060820152608001604051809103906000f0801580156109ff573d6000803e3d6000fd5b50602380547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392831617905560285460405163ca669fa760e01b815291166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015610a8457600080fd5b505af1158015610a98573d6000803e3d6000fd5b50506025546028546023546040517f15d57fd40000000000000000000000000000000000000000000000000000000081526001600160a01b0392831660048201529082166024820152911692506315d57fd49150604401600060405180830381600087803b158015610b0957600080fd5b505af1158015610b1d573d6000803e3d6000fd5b50505050604051610b2d906185be565b604051809103906000f080158015610b49573d6000803e3d6000fd5b50602180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039283161790556028546040517fc88a5e6d00000000000000000000000000000000000000000000000000000000815291166004820152670de0b6b3a76400006024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c88a5e6d90604401600060405180830381600087803b158015610bf557600080fd5b505af1158015610c09573d6000803e3d6000fd5b50506026546040517f06447d560000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506306447d569150602401600060405180830381600087803b158015610c7f57600080fd5b505af1158015610c93573d6000803e3d6000fd5b50506020546022546040517fae7a3a6f0000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201529116925063ae7a3a6f9150602401600060405180830381600087803b158015610cf957600080fd5b505af1158015610d0d573d6000803e3d6000fd5b50506020546023546040517f10188aef0000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152911692506310188aef9150602401600060405180830381600087803b158015610d7357600080fd5b505af1158015610d87573d6000803e3d6000fd5b505050507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b03166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610de957600080fd5b505af1158015610dfd573d6000803e3d6000fd5b5050602480546026546040517f40c10f190000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620f4240938101939093521692506340c10f199150604401600060405180830381600087803b158015610e6e57600080fd5b505af1158015610e82573d6000803e3d6000fd5b5050602480546022546040517fa9059cbb0000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201526207a1209381019390935216925063a9059cbb91506044016020604051808303816000875af1158015610ef8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f1c9190618b69565b506028546040517fc88a5e6d0000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152670de0b6b3a76400006024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c88a5e6d906044015b600060405180830381600087803b158015610f9e57600080fd5b505af1158015610fb2573d6000803e3d6000fd5b50505050565b6026546040517f06447d560000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906306447d5690602401600060405180830381600087803b15801561102a57600080fd5b505af115801561103e573d6000803e3d6000fd5b50506040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b1580156110c757600080fd5b505af11580156110db573d6000803e3d6000fd5b50506020546040517fae7a3a6f000000000000000000000000000000000000000000000000000000008152600060048201526001600160a01b03909116925063ae7a3a6f9150602401610f84565b6026546040517f06447d560000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906306447d5690602401600060405180830381600087803b15801561119b57600080fd5b505af11580156111af573d6000803e3d6000fd5b50506040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fb337f378000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e091506024015b600060405180830381600087803b15801561123957600080fd5b505af115801561124d573d6000803e3d6000fd5b50506020546022546040517fae7a3a6f0000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201529116925063ae7a3a6f9150602401610f84565b606060168054806020026020016040519081016040528092919081815260200182805480156112f657602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116112d8575b5050505050905090565b6060601e805480602002602001604051908101604052809291908181526020016000905b8282101561143957600084815260208082206040805180820182526002870290920180546001600160a01b03168352600181018054835181870281018701909452808452939591948681019491929084015b8282101561142257838290600052602060002001805461139590618b8b565b80601f01602080910402602001604051908101604052809291908181526020018280546113c190618b8b565b801561140e5780601f106113e35761010080835404028352916020019161140e565b820191906000526020600020905b8154815290600101906020018083116113f157829003601f168201915b505050505081526020019060010190611376565b505050508152505081526020019060010190611324565b50505050905090565b606060188054806020026020016040519081016040528092919081815260200182805480156112f6576020028201919060005260206000209081546001600160a01b031681526001909101906020018083116112d8575050505050905090565b606060178054806020026020016040519081016040528092919081815260200182805480156112f6576020028201919060005260206000209081546001600160a01b031681526001909101906020018083116112d8575050505050905090565b6040805160048082526024820183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f6ed701690000000000000000000000000000000000000000000000000000000017905260215492517ff30c7ba30000000000000000000000000000000000000000000000000000000081529192737109709ecfa91a80626ff3989d68f67f5b1dd12d9263f30c7ba3926115b8926001600160a01b031691600091879101618bd8565b600060405180830381600087803b1580156115d257600080fd5b505af11580156115e6573d6000803e3d6000fd5b50506021546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b15801561167857600080fd5b505af115801561168c573d6000803e3d6000fd5b5050602080546040516001600160a01b0390911681527fbcaadb46b82a48af60b608f58959ae6b8310d1b0a0d094c2e9ec3208ed39f2a0935001905060405180910390a16020546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b15801561175e57600080fd5b505af1158015611772573d6000803e3d6000fd5b50506021546040516001600160a01b0390911692507fcaf938de11c367272220bfd1d2baa99ca46665e7bc4d85f00adb51b90fe1fa9f91506117b8906000908590618c00565b60405180910390a260285460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561181957600080fd5b505af115801561182d573d6000803e3d6000fd5b50506020546021546040517f1cff79cd0000000000000000000000000000000000000000000000000000000081526001600160a01b039283169450631cff79cd935061060b92909116908590600401618a2a565b6040517f68656c6c6f0000000000000000000000000000000000000000000000000000006020820152670de0b6b3a76400009060009060250160408051808303601f190181529082905260285463ca669fa760e01b83526001600160a01b031660048301529150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561192157600080fd5b505af1158015611935573d6000803e3d6000fd5b50506040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b1580156119be57600080fd5b505af11580156119d2573d6000803e3d6000fd5b50506020546040517f35c018db0000000000000000000000000000000000000000000000000000000081526001600160a01b0390911692506335c018db91508490611a24906000908690600401618a2a565b6000604051808303818588803b158015611a3d57600080fd5b505af1158015611a51573d6000803e3d6000fd5b50505050505050565b6060601b805480602002602001604051908101604052809291908181526020016000905b828210156114395783829060005260206000209060020201604051806040016040529081600082018054611ab190618b8b565b80601f0160208091040260200160405190810160405280929190818152602001828054611add90618b8b565b8015611b2a5780601f10611aff57610100808354040283529160200191611b2a565b820191906000526020600020905b815481529060010190602001808311611b0d57829003601f168201915b5050505050815260200160018201805480602002602001604051908101604052809291908181526020018280548015611bc457602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019060040190602082600301049283019260010382029150808411611b715790505b50505050508152505081526020019060010190611a7e565b604080516001808252818301909252600091816020015b6060815260200190600190039081611bf35790505090506040518060400160405280600f81526020017f48656c6c6f2c20466f756e64727921000000000000000000000000000000000081525081600081518110611c5357611c53618c19565b6020908102919091010152604080516001808252818301909252600091816020016020820280368337019050509050602a81600081518110611c9757611c97618c19565b6020908102919091010152604051600190600090611cbd90859085908590602401618c7a565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167ff05b6abf00000000000000000000000000000000000000000000000000000000179052602654905163ca669fa760e01b81526001600160a01b039091166004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015611d7057600080fd5b505af1158015611d84573d6000803e3d6000fd5b5050602654604080516001600160a01b0390921660248301527f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb60448084019190915281518084039091018152606490920181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb39250611e6f9190600401618cb2565b600060405180830381600087803b158015611e8957600080fd5b505af1158015611e9d573d6000803e3d6000fd5b50506020546021546040517f1cff79cd0000000000000000000000000000000000000000000000000000000081526001600160a01b039283169450631cff79cd9350611ef192909116908590600401618a2a565b6000604051808303816000875af1158015611f10573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611f389190810190618b34565b5050505050565b6026546040517f06447d560000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906306447d5690602401600060405180830381600087803b158015611fb157600080fd5b505af1158015611fc5573d6000803e3d6000fd5b50506040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527f0c8dc016000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e091506024015b600060405180830381600087803b15801561204f57600080fd5b505af1158015612063573d6000803e3d6000fd5b50506020546023546040517f10188aef0000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152911692506310188aef9150602401610f84565b6060601a805480602002602001604051908101604052809291908181526020016000905b828210156114395783829060005260206000200180546120f790618b8b565b80601f016020809104026020016040519081016040528092919081815260200182805461212390618b8b565b80156121705780601f1061214557610100808354040283529160200191612170565b820191906000526020600020905b81548152906001019060200180831161215357829003601f168201915b5050505050815260200190600101906120d8565b6060601d805480602002602001604051908101604052809291908181526020016000905b828210156114395760008481526020908190206040805180820182526002860290920180546001600160a01b0316835260018101805483518187028101870190945280845293949193858301939283018282801561226757602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190600401906020826003010492830192600103820291508084116122145790505b505050505081525050815260200190600101906121a8565b6028546040517f06447d560000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906306447d5690602401600060405180830381600087803b1580156122f157600080fd5b505af1158015612305573d6000803e3d6000fd5b5050602854604080516001600160a01b039092166024830152600060448084019190915281518084039091018152606490920181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb3925061121f9190600401618cb2565b6060601c805480602002602001604051908101604052809291908181526020016000905b828210156114395760008481526020908190206040805180820182526002860290920180546001600160a01b031683526001810180548351818702810187019094528084529394919385830193928301828280156124b457602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190600401906020826003010492830192600103820291508084116124615790505b505050505081525050815260200190600101906123f5565b60248054602754604051620186a09381018490526001600160a01b0392831660448201529116606482015260009060840160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f357fc5a200000000000000000000000000000000000000000000000000000000179052602654905163ca669fa760e01b81526001600160a01b039091166004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156125b057600080fd5b505af11580156125c4573d6000803e3d6000fd5b5050602654604080516001600160a01b0390921660248301527f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b960448084019190915281518084039091018152606490920181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb392506126af9190600401618cb2565b600060405180830381600087803b1580156126c957600080fd5b505af11580156126dd573d6000803e3d6000fd5b50506020546024546027546040517fb8969bd40000000000000000000000000000000000000000000000000000000081526001600160a01b03938416955063b8969bd4945061273a93928316929091169087908790600401618cc5565b600060405180830381600087803b15801561275457600080fd5b505af1158015612768573d6000803e3d6000fd5b505050505050565b60606019805480602002602001604051908101604052809291908181526020016000905b828210156114395783829060005260206000200180546127b390618b8b565b80601f01602080910402602001604051908101604052809291908181526020018280546127df90618b8b565b801561282c5780601f106128015761010080835404028352916020019161282c565b820191906000526020600020905b81548152906001019060200180831161280f57829003601f168201915b505050505081526020019060010190612794565b60085460009060ff1615612858575060085460ff1690565b6040517f667f9d70000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d600482018190527f6661696c65640000000000000000000000000000000000000000000000000000602483015260009163667f9d7090604401602060405180830381865afa1580156128e9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061290d9190618cfc565b1415905090565b6028546040517f06447d560000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906306447d5690602401600060405180830381600087803b15801561298657600080fd5b505af115801561299a573d6000803e3d6000fd5b5050602854604080516001600160a01b039092166024830152600060448084019190915281518084039091018152606490920181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb392506120359190600401618cb2565b6026546040517f06447d560000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906306447d5690602401600060405180830381600087803b158015612ad857600080fd5b505af1158015612aec573d6000803e3d6000fd5b50506040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b158015612b7557600080fd5b505af1158015612b89573d6000803e3d6000fd5b50506020546040517f10188aef000000000000000000000000000000000000000000000000000000008152600060048201526001600160a01b0390911692506310188aef9150602401610f84565b6040517f68656c6c6f0000000000000000000000000000000000000000000000000000006020820152670de0b6b3a76400009060009060250160408051808303601f190181529082905260265463ca669fa760e01b83526001600160a01b031660048301529150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015612c7757600080fd5b505af1158015612c8b573d6000803e3d6000fd5b5050602654604080516001600160a01b0390921660248301527f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb60448084019190915281518084039091018152606490920181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb39250612d769190600401618cb2565b600060405180830381600087803b158015612d9057600080fd5b505af1158015612da4573d6000803e3d6000fd5b50506020546021546040517f35c018db0000000000000000000000000000000000000000000000000000000081526001600160a01b0392831694506335c018db93508692611a249216908690600401618a2a565b60285460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015612e5157600080fd5b505af1158015612e65573d6000803e3d6000fd5b5050602854604080516001600160a01b0390921660248301527f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a60448084019190915281518084039091018152606490920181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb39250612f509190600401618cb2565b600060405180830381600087803b158015612f6a57600080fd5b505af1158015612f7e573d6000803e3d6000fd5b50505050602060009054906101000a90046001600160a01b03166001600160a01b0316638456cb596040518163ffffffff1660e01b8152600401600060405180830381600087803b158015612fd257600080fd5b505af1158015612fe6573d6000803e3d6000fd5b505060285460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b15801561304357600080fd5b505af1158015613057573d6000803e3d6000fd5b5050602854604080516001600160a01b0390921660248301527f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a60448084019190915281518084039091018152606490920181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb392506131429190600401618cb2565b600060405180830381600087803b15801561315c57600080fd5b505af1158015613170573d6000803e3d6000fd5b50505050602060009054906101000a90046001600160a01b03166001600160a01b0316633f4ba83a6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156131c457600080fd5b505af11580156131d8573d6000803e3d6000fd5b505060265460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b15801561323557600080fd5b505af1158015613249573d6000803e3d6000fd5b50505050602060009054906101000a90046001600160a01b03166001600160a01b0316638456cb596040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561329d57600080fd5b505af11580156132b1573d6000803e3d6000fd5b5050604080516004808252602480830184526020830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f6ed701690000000000000000000000000000000000000000000000000000000017905292517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fd93c06650000000000000000000000000000000000000000000000000000000091810191909152909350737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09101600060405180830381600087803b15801561339357600080fd5b505af11580156133a7573d6000803e3d6000fd5b505060285460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b15801561340457600080fd5b505af1158015613418573d6000803e3d6000fd5b50506020546021546040517f1cff79cd0000000000000000000000000000000000000000000000000000000081526001600160a01b039283169450631cff79cd935061346c92909116908590600401618a2a565b6000604051808303816000875af115801561348b573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526134b39190810190618b34565b5060265460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561350d57600080fd5b505af1158015613521573d6000803e3d6000fd5b50505050602060009054906101000a90046001600160a01b03166001600160a01b0316633f4ba83a6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561357557600080fd5b505af1158015613589573d6000803e3d6000fd5b50506021546040517ff30c7ba3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f30c7ba392506115b8916001600160a01b0316906000908690600401618bd8565b606060158054806020026020016040519081016040528092919081815260200182805480156112f6576020028201919060005260206000209081546001600160a01b031681526001909101906020018083116112d8575050505050905090565b60248054602754604051620186a09381018490526001600160a01b0392831660448201529116606482015260009060840160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f357fc5a200000000000000000000000000000000000000000000000000000000179052602654905163ca669fa760e01b81526001600160a01b039091166004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561373157600080fd5b505af1158015613745573d6000803e3d6000fd5b5050602654604080516001600160a01b0390921660248301527f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b960448084019190915281518084039091018152606490920181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb392506138309190600401618cb2565b600060405180830381600087803b15801561384a57600080fd5b505af115801561385e573d6000803e3d6000fd5b50506020546024546027546040517f5131ab590000000000000000000000000000000000000000000000000000000081526001600160a01b039384169550635131ab59945061273a93928316929091169087908790600401618cc5565b604080516001808252818301909252600091816020015b60608152602001906001900390816138d25790505090506040518060400160405280600f81526020017f48656c6c6f2c20466f756e6472792100000000000000000000000000000000008152508160008151811061393257613932618c19565b6020908102919091010152604080516001808252818301909252600091816020016020820280368337019050509050602a8160008151811061397657613976618c19565b602090810291909101015260405160019060009061399c90859085908590602401618c7a565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167ff05b6abf0000000000000000000000000000000000000000000000000000000017905260215490517ff30c7ba3000000000000000000000000000000000000000000000000000000008152919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f30c7ba391613a59916001600160a01b0391909116906000908690600401618bd8565b600060405180830381600087803b158015613a7357600080fd5b505af1158015613a87573d6000803e3d6000fd5b50506021546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b158015613b1957600080fd5b505af1158015613b2d573d6000803e3d6000fd5b50506020546040517f74a53cd528a921fca7dbdee62f86819051d3cc98f214951f4238e8843f20b1469350613b7492506001600160a01b0390911690879087908790618d15565b60405180910390a16020546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b158015613c0a57600080fd5b505af1158015613c1e573d6000803e3d6000fd5b50506021546040516001600160a01b0390911692507fcaf938de11c367272220bfd1d2baa99ca46665e7bc4d85f00adb51b90fe1fa9f9150613c64906000908590618c00565b60405180910390a260285460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401611e6f565b604080517f68656c6c6f0000000000000000000000000000000000000000000000000000006020820152815160058183030181526025909101909152602154670de0b6b3a764000091906001600160a01b031631613d0f81600061449c565b6021546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b158015613d9d57600080fd5b505af1158015613db1573d6000803e3d6000fd5b50506020546040517f0d3f65f00e631663aa85c96330b5c7a83bb29af3630c0063776f985edc3037aa9350613df492506001600160a01b03909116908590618a2a565b60405180910390a16020546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b158015613e8a57600080fd5b505af1158015613e9e573d6000803e3d6000fd5b50506021546040516001600160a01b0390911692507fd5d7616b1678354a0dea9d7e57e6a090bff5babe9f8d6381fdbad16e89ba311c9150613eeb90670de0b6b3a7640000908690618c00565b60405180910390a260285460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015613f4c57600080fd5b505af1158015613f60573d6000803e3d6000fd5b50506020546021546040517f35c018db0000000000000000000000000000000000000000000000000000000081526001600160a01b0392831694506335c018db93508792613fb49216908790600401618a2a565b6000604051808303818588803b158015613fcd57600080fd5b505af1158015613fe1573d6000803e3d6000fd5b50506021546001600160a01b0316319250610fb29150829050670de0b6b3a764000061449c565b60408051808201909152600f81527f48656c6c6f2c20466f756e6472792100000000000000000000000000000000006020820152602154602a90600190670de0b6b3a764000090614065906000906001600160a01b03163161449c565b600084848460405160240161407c93929190618d5d565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe04d4f970000000000000000000000000000000000000000000000000000000017905260215490517ff30c7ba3000000000000000000000000000000000000000000000000000000008152919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f30c7ba391614140916001600160a01b039190911690670de0b6b3a7640000908690600401618bd8565b600060405180830381600087803b15801561415a57600080fd5b505af115801561416e573d6000803e3d6000fd5b50506021546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b15801561420057600080fd5b505af1158015614214573d6000803e3d6000fd5b50506020546040517f1f1ff1f5fb41346850b2f5c04e6c767e2f1c8a525c5c0c5cdb60cdf3ca5f62fa935061425d92506001600160a01b03909116908590899089908990618d87565b60405180910390a16020546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b1580156142f357600080fd5b505af1158015614307573d6000803e3d6000fd5b50506021546040516001600160a01b0390911692507fcaf938de11c367272220bfd1d2baa99ca46665e7bc4d85f00adb51b90fe1fa9f915061435490670de0b6b3a7640000908590618c00565b60405180910390a260285460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156143b557600080fd5b505af11580156143c9573d6000803e3d6000fd5b50506020546021546040517f1cff79cd0000000000000000000000000000000000000000000000000000000081526001600160a01b039283169450631cff79cd9350869261441d9216908690600401618a2a565b60006040518083038185885af115801561443b573d6000803e3d6000fd5b50505050506040513d6000823e601f3d908101601f191682016040526144649190810190618b34565b50602154611f389083906001600160a01b03163161449c565b60006144876185cb565b61449284848361451b565b9150505b92915050565b6040517f98296c540000000000000000000000000000000000000000000000000000000081526004810183905260248101829052737109709ecfa91a80626ff3989d68f67f5b1dd12d906398296c549060440160006040518083038186803b15801561450757600080fd5b505afa158015612768573d6000803e3d6000fd5b6000806145288584614596565b905061458b6040518060400160405280601d81526020017f4552433139363750726f78792e736f6c3a4552433139363750726f78790000008152508286604051602001614576929190618a2a565b604051602081830303815290604052856145a2565b9150505b9392505050565b600061458f83836145d0565b60c081015151600090156145c6576145bf84848460c001516145eb565b905061458f565b6145bf8484614791565b60006145dc838361487c565b61458f838360200151846145a2565b6000806145f6614888565b90506000614604868361495b565b9050600061461b8260600151836020015185614e01565b9050600061462b83838989615013565b9050600061463882615e90565b602081015181519192509060030b156146ab57898260400151604051602001614662929190618dc8565b60408051601f19818403018152908290527f08c379a00000000000000000000000000000000000000000000000000000000082526146a291600401618cb2565b60405180910390fd5b60006146ee6040518060400160405280601581526020017f4465706c6f79656420746f20616464726573733a20000000000000000000000081525083600161605f565b6040517fc6ce059d000000000000000000000000000000000000000000000000000000008152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c6ce059d90614741908490600401618cb2565b602060405180830381865afa15801561475e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906147829190618e49565b9b9a5050505050505050505050565b6040517f8d1cc9250000000000000000000000000000000000000000000000000000000081526000908190737109709ecfa91a80626ff3989d68f67f5b1dd12d90638d1cc925906147e6908790600401618cb2565b600060405180830381865afa158015614803573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261482b9190810190618b34565b905060006148598285604051602001614845929190618e72565b60405160208183030381529060405261625f565b90506001600160a01b038116614492578484604051602001614662929190618ea1565b61065282826000616272565b604080518082018252600381527f6f75740000000000000000000000000000000000000000000000000000000000602082015290517fd145736c000000000000000000000000000000000000000000000000000000008152606091737109709ecfa91a80626ff3989d68f67f5b1dd12d91829063d145736c9061490f908490600401618f4c565b600060405180830381865afa15801561492c573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526149549190810190618f93565b9250505090565b61498d6040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b6000737109709ecfa91a80626ff3989d68f67f5b1dd12d90506149d86040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b6149e185616375565b602082015260006149f18661675a565b90506000836001600160a01b031663d930a0e66040518163ffffffff1660e01b8152600401600060405180830381865afa158015614a33573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052614a5b9190810190618f93565b86838560200151604051602001614a759493929190618fdc565b60408051601f19818403018152908290527f60f9bb1100000000000000000000000000000000000000000000000000000000825291506000906001600160a01b038616906360f9bb1190614acd908590600401618cb2565b600060405180830381865afa158015614aea573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052614b129190810190618f93565b6040517fdb4235f60000000000000000000000000000000000000000000000000000000081529091506001600160a01b0386169063db4235f690614b5a9084906004016190e0565b602060405180830381865afa158015614b77573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614b9b9190618b69565b614bb057816040516020016146629190619132565b6040517f49c4fac80000000000000000000000000000000000000000000000000000000081526001600160a01b038616906349c4fac890614bf59084906004016191c4565b600060405180830381865afa158015614c12573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052614c3a9190810190618f93565b84526040517fdb4235f60000000000000000000000000000000000000000000000000000000081526001600160a01b0386169063db4235f690614c81908490600401619216565b602060405180830381865afa158015614c9e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614cc29190618b69565b15614d57576040517f49c4fac80000000000000000000000000000000000000000000000000000000081526001600160a01b038616906349c4fac890614d0c908490600401619216565b600060405180830381865afa158015614d29573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052614d519190810190618f93565b60408501525b846001600160a01b03166349c4fac8828660000151604051602001614d7c9190619268565b6040516020818303038152906040526040518363ffffffff1660e01b8152600401614da89291906192d4565b600060405180830381865afa158015614dc5573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052614ded9190810190618f93565b606085015250608083015250949350505050565b60408051600480825260a0820190925260609160009190816020015b6060815260200190600190039081614e1d5790505090506040518060400160405280600481526020017f677265700000000000000000000000000000000000000000000000000000000081525081600081518110614e7d57614e7d618c19565b60200260200101819052506040518060400160405280600381526020017f2d726c000000000000000000000000000000000000000000000000000000000081525081600181518110614ed157614ed1618c19565b602002602001018190525084604051602001614eed91906192f9565b60405160208183030381529060405281600281518110614f0f57614f0f618c19565b602002602001018190525082604051602001614f2b9190619365565b60405160208183030381529060405281600381518110614f4d57614f4d618c19565b60200260200101819052506000614f6382615e90565b602080820151604080518082018252600581527f2e6a736f6e0000000000000000000000000000000000000000000000000000008185019081528251808401845260008082529086015282518084019093529051825292810192909252919250614ff490604080518082018252600080825260209182015281518083019092528451825280850190820152906169dd565b615009578560405160200161466291906193a6565b9695505050505050565b60a0810151604080518082018252600080825260209182015281518083019092528251808352928101910152606090737109709ecfa91a80626ff3989d68f67f5b1dd12d9015615063565b511590565b6151d75782602001511561511f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605860248201527f54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f742060448201527f62652075736564207768656e207468652060736b6970566572696679536f757260648201527f6365436f646560206f7074696f6e206973206074727565600000000000000000608482015260a4016146a2565b8260c00151156151d7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605360248201527f54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f742060448201527f62652075736564207768656e207468652060736b69704c6963656e736554797060648201527f6560206f7074696f6e2069732060747275656000000000000000000000000000608482015260a4016146a2565b6040805160ff8082526120008201909252600091816020015b60608152602001906001900390816151f057905050905060006040518060400160405280600381526020017f6e7078000000000000000000000000000000000000000000000000000000000081525082828061524b90619466565b935060ff168151811061526057615260618c19565b60200260200101819052506040518060400160405280600d81526020017f302e302e312d616c7068612e37000000000000000000000000000000000000008152506040516020016152b19190619485565b6040516020818303038152906040528282806152cc90619466565b935060ff16815181106152e1576152e1618c19565b60200260200101819052506040518060400160405280600681526020017f6465706c6f79000000000000000000000000000000000000000000000000000081525082828061532e90619466565b935060ff168151811061534357615343618c19565b60200260200101819052506040518060400160405280600e81526020017f2d2d636f6e74726163744e616d6500000000000000000000000000000000000081525082828061539090619466565b935060ff16815181106153a5576153a5618c19565b602002602001018190525087602001518282806153c190619466565b935060ff16815181106153d6576153d6618c19565b60200260200101819052506040518060400160405280600e81526020017f2d2d636f6e74726163745061746800000000000000000000000000000000000081525082828061542390619466565b935060ff168151811061543857615438618c19565b60209081029190910101528751828261545081619466565b935060ff168151811061546557615465618c19565b60200260200101819052506040518060400160405280600981526020017f2d2d636861696e496400000000000000000000000000000000000000000000008152508282806154b290619466565b935060ff16815181106154c7576154c7618c19565b60200260200101819052506154db46616a3e565b82826154e681619466565b935060ff16815181106154fb576154fb618c19565b60200260200101819052506040518060400160405280600f81526020017f2d2d6275696c64496e666f46696c65000000000000000000000000000000000081525082828061554890619466565b935060ff168151811061555d5761555d618c19565b60200260200101819052508682828061557590619466565b935060ff168151811061558a5761558a618c19565b60209081029190910101528551156156b15760408051808201909152601581527f2d2d636f6e7374727563746f7242797465636f64650000000000000000000000602082015282826155db81619466565b935060ff16815181106155f0576155f0618c19565b60209081029190910101526040517f71aad10d0000000000000000000000000000000000000000000000000000000081526001600160a01b038416906371aad10d90615640908990600401618cb2565b600060405180830381865afa15801561565d573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526156859190810190618f93565b828261569081619466565b935060ff16815181106156a5576156a5618c19565b60200260200101819052505b8460200151156157815760408051808201909152601281527f2d2d766572696679536f75726365436f64650000000000000000000000000000602082015282826156fa81619466565b935060ff168151811061570f5761570f618c19565b60200260200101819052506040518060400160405280600581526020017f66616c736500000000000000000000000000000000000000000000000000000081525082828061575c90619466565b935060ff168151811061577157615771618c19565b6020026020010181905250615948565b6157b961505e8660a0015160408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b61584c5760408051808201909152600d81527f2d2d6c6963656e73655479706500000000000000000000000000000000000000602082015282826157fc81619466565b935060ff168151811061581157615811618c19565b60200260200101819052508460a0015160405160200161583191906192f9565b60405160208183030381529060405282828061575c90619466565b8460c0015115801561588f57506040808901518151808301835260008082526020918201528251808401909352815183529081019082015261588d90511590565b155b156159485760408051808201909152600d81527f2d2d6c6963656e73655479706500000000000000000000000000000000000000602082015282826158d381619466565b935060ff16815181106158e8576158e8618c19565b60200260200101819052506158fc88616ade565b60405160200161590c91906192f9565b60405160208183030381529060405282828061592790619466565b935060ff168151811061593c5761593c618c19565b60200260200101819052505b6040808601518151808301835260008082526020918201528251808401909352815183529081019082015261597c90511590565b615a115760408051808201909152600b81527f2d2d72656c617965724964000000000000000000000000000000000000000000602082015282826159bf81619466565b935060ff16815181106159d4576159d4618c19565b602002602001018190525084604001518282806159f090619466565b935060ff1681518110615a0557615a05618c19565b60200260200101819052505b606085015115615b325760408051808201909152600681527f2d2d73616c74000000000000000000000000000000000000000000000000000060208201528282615a5a81619466565b935060ff1681518110615a6f57615a6f618c19565b602090810291909101015260608501516040517fb11a19e800000000000000000000000000000000000000000000000000000000815260048101919091526001600160a01b0384169063b11a19e890602401600060405180830381865afa158015615ade573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052615b069190810190618f93565b8282615b1181619466565b935060ff1681518110615b2657615b26618c19565b60200260200101819052505b60e08501515115615bd95760408051808201909152600a81527f2d2d6761734c696d69740000000000000000000000000000000000000000000060208201528282615b7c81619466565b935060ff1681518110615b9157615b91618c19565b6020026020010181905250615bad8560e0015160000151616a3e565b8282615bb881619466565b935060ff1681518110615bcd57615bcd618c19565b60200260200101819052505b60e08501516020015115615c835760408051808201909152600a81527f2d2d67617350726963650000000000000000000000000000000000000000000060208201528282615c2681619466565b935060ff1681518110615c3b57615c3b618c19565b6020026020010181905250615c578560e0015160200151616a3e565b8282615c6281619466565b935060ff1681518110615c7757615c77618c19565b60200260200101819052505b60e08501516040015115615d2d5760408051808201909152600e81527f2d2d6d617846656550657247617300000000000000000000000000000000000060208201528282615cd081619466565b935060ff1681518110615ce557615ce5618c19565b6020026020010181905250615d018560e0015160400151616a3e565b8282615d0c81619466565b935060ff1681518110615d2157615d21618c19565b60200260200101819052505b60e08501516060015115615dd75760408051808201909152601681527f2d2d6d61785072696f726974794665655065724761730000000000000000000060208201528282615d7a81619466565b935060ff1681518110615d8f57615d8f618c19565b6020026020010181905250615dab8560e0015160600151616a3e565b8282615db681619466565b935060ff1681518110615dcb57615dcb618c19565b60200260200101819052505b60008160ff1667ffffffffffffffff811115615df557615df5618a4c565b604051908082528060200260200182016040528015615e2857816020015b6060815260200190600190039081615e135790505b50905060005b8260ff168160ff161015615e8157838160ff1681518110615e5157615e51618c19565b6020026020010151828260ff1681518110615e6e57615e6e618c19565b6020908102919091010152600101615e2e565b5093505050505b949350505050565b615eb76040518060600160405280600060030b815260200160608152602001606081525090565b60408051808201825260048082527f6261736800000000000000000000000000000000000000000000000000000000602083015291517fd145736c000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d92600091849163d145736c91615f3d918691016194f0565b600060405180830381865afa158015615f5a573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052615f829190810190618f93565b90506000615f9086836175cd565b90506000846001600160a01b031663f45c1ce7836040518263ffffffff1660e01b8152600401615fc09190618980565b6000604051808303816000875af1158015615fdf573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526160079190810190619537565b805190915060030b158015906160205750602081015151155b801561602f5750604081015151155b15615009578160008151811061604757616047618c19565b602002602001015160405160200161466291906195ed565b606060006160948560408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6040805180820182526000808252602091820152815180830190925286518252808701908201529091506160cb9082905b90617722565b15616228576000616148826161428461613c61610e8a60408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6040805180820182526000808252602091820152815180830190925282518252918201519181019190915290565b90617749565b906177ab565b604080518082018252600181527f0a00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201529091506161ac908290617722565b1561621657604080518082018252600181527f0a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616213905b8290617830565b90505b61621f81617856565b9250505061458f565b82156162415784846040516020016146629291906197d9565b505060408051602081019091526000815261458f565b509392505050565b6000808251602084016000f09392505050565b8160a001511561628157505050565b600061628e8484846178bf565b9050600061629b82615e90565b602081015181519192509060030b1580156163375750604080518082018252600781527f535543434553530000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616337906040805180820182526000808252602091820152815180830190925284518252808501908201526160c5565b1561634457505050505050565b604082015151156163645781604001516040516020016146629190619880565b8060405160200161466291906198de565b606060006163aa8360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600481527f2e736f6c000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015290915061640f905b82906169dd565b1561647e57604080518082018252600481527f2e736f6c000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261458f90616479908390617e5a565b617856565b604080518082018252600181527f3a00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526164e0905b8290617ee4565b6001036165ad57604080518082018252600181527f3a00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526165469061620c565b50604080518082018252600181527f3a000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261458f90616479905b8390617830565b604080518082018252600581527f2e6a736f6e0000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261660c90616408565b1561674357604080518082018252600181527f2f00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820181905284518086019095529251845283015290616674908390617f7e565b9050600081600183516166879190619949565b8151811061669757616697618c19565b6020026020010151905061673a61647961670d6040518060400160405280600581526020017f2e6a736f6e00000000000000000000000000000000000000000000000000000081525060408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b60408051808201825260008082526020918201528151808301909252855182528086019082015290617e5a565b95945050505050565b82604051602001614662919061995c565b50919050565b6060600061678f8360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600481527f2e736f6c00000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201529091506167f190616408565b156167ff5761458f81617856565b604080518082018252600181527f3a000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261685e906164d9565b6001036168c857604080518082018252600181527f3a000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261458f90616479906165a6565b604080518082018252600581527f2e6a736f6e0000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261692790616408565b1561674357604080518082018252600181527f2f0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082018190528451808601909552925184528301529061698f908390617f7e565b90506001815111156169cb5780600282516169aa9190619949565b815181106169ba576169ba618c19565b602002602001015192505050919050565b5082604051602001614662919061995c565b8051825160009111156169f257506000614496565b81518351602085015160009291616a0891619a3a565b616a129190619949565b905082602001518103616a29576001915050614496565b82516020840151819020912014905092915050565b60606000616a4b83618023565b600101905060008167ffffffffffffffff811115616a6b57616a6b618a4c565b6040519080825280601f01601f191660200182016040528015616a95576020820181803683370190505b5090508181016020015b600019017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a8504945084616a9f57509392505050565b604081810151815180830183526000808252602091820181905283518085018552835181529282018383015283518085018552600a81527f554e4c4943454e5345440000000000000000000000000000000000000000000081840190815285518087018752838152840192909252845180860190955251845290830152606091616b6a905b8290618105565b15616baa57505060408051808201909152600481527f4e6f6e65000000000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600981527f556e6c6963656e7365000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616c0990616b63565b15616c4957505060408051808201909152600981527f556e6c6963656e736500000000000000000000000000000000000000000000006020820152919050565b604080518082018252600381527f4d4954000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616ca890616b63565b15616ce857505060408051808201909152600381527f4d495400000000000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f47504c2d322e302d6f6e6c79000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616d4790616b63565b80616dac5750604080518082018252601081527f47504c2d322e302d6f722d6c617465720000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616dac90616b63565b15616dec57505060408051808201909152600981527f474e552047504c763200000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f47504c2d332e302d6f6e6c79000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616e4b90616b63565b80616eb05750604080518082018252601081527f47504c2d332e302d6f722d6c617465720000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616eb090616b63565b15616ef057505060408051808201909152600981527f474e552047504c763300000000000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4c47504c2d322e312d6f6e6c790000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616f4f90616b63565b80616fb45750604080518082018252601181527f4c47504c2d322e312d6f722d6c6174657200000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616fb490616b63565b15616ff457505060408051808201909152600c81527f474e55204c47504c76322e3100000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4c47504c2d332e302d6f6e6c79000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261705390616b63565b806170b85750604080518082018252601181527f4c47504c2d332e302d6f722d6c61746572000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526170b890616b63565b156170f857505060408051808201909152600a81527f474e55204c47504c7633000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f4253442d322d436c6175736500000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261715790616b63565b1561719757505060408051808201909152600c81527f4253442d322d436c6175736500000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f4253442d332d436c617573650000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526171f690616b63565b1561723657505060408051808201909152600c81527f4253442d332d436c6175736500000000000000000000000000000000000000006020820152919050565b604080518082018252600781527f4d504c2d322e30000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261729590616b63565b156172d557505060408051808201909152600781527f4d504c2d322e30000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600781527f4f534c2d332e30000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261733490616b63565b1561737457505060408051808201909152600781527f4f534c2d332e30000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600a81527f4170616368652d322e3000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526173d390616b63565b1561741357505060408051808201909152600a81527f4170616368652d322e30000000000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4147504c2d332e302d6f6e6c79000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261747290616b63565b806174d75750604080518082018252601181527f4147504c2d332e302d6f722d6c61746572000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526174d790616b63565b1561751757505060408051808201909152600a81527f474e55204147504c7633000000000000000000000000000000000000000000006020820152919050565b604080518082018252600881527f4255534c2d312e310000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261757690616b63565b156175b657505060408051808201909152600781527f42534c20312e31000000000000000000000000000000000000000000000000006020820152919050565b604080840151845191516146629290602001619a4d565b60608060005b845181101561765857818582815181106175ef576175ef618c19565b6020026020010151604051602001617608929190618e72565b6040516020818303038152906040529150600185516176279190619949565b8114617650578160405160200161763e9190619bb6565b60405160208183030381529060405291505b6001016175d3565b5060408051600380825260808201909252600091816020015b6060815260200190600190039081617671579050509050838160008151811061769c5761769c618c19565b60200260200101819052506040518060400160405280600281526020017f2d63000000000000000000000000000000000000000000000000000000000000815250816001815181106176f0576176f0618c19565b6020026020010181905250818160028151811061770f5761770f618c19565b6020908102919091010152949350505050565b60208083015183518351928401516000936177409291849190618119565b14159392505050565b6040805180820190915260008082526020820152600061777b846000015185602001518560000151866020015161822a565b905083602001518161778d9190619949565b8451859061779c908390619949565b90525060208401525090919050565b60408051808201909152600080825260208201528151835110156177d0575081614496565b60208083015190840151600191146177f75750815160208481015190840151829020919020145b80156178285782518451859061780e908390619949565b9052508251602085018051617824908390619a3a565b9052505b509192915050565b604080518082019091526000808252602082015261784f83838361834a565b5092915050565b60606000826000015167ffffffffffffffff81111561787757617877618a4c565b6040519080825280601f01601f1916602001820160405280156178a1576020820181803683370190505b509050600060208201905061784f81856020015186600001516183f5565b606060006178cb614888565b6040805160ff808252612000820190925291925060009190816020015b60608152602001906001900390816178e857905050905060006040518060400160405280600381526020017f6e7078000000000000000000000000000000000000000000000000000000000081525082828061794390619466565b935060ff168151811061795857617958618c19565b60200260200101819052506040518060400160405280600781526020017f5e312e33322e33000000000000000000000000000000000000000000000000008152506040516020016179a99190619bf7565b6040516020818303038152906040528282806179c490619466565b935060ff16815181106179d9576179d9618c19565b60200260200101819052506040518060400160405280600881526020017f76616c6964617465000000000000000000000000000000000000000000000000815250828280617a2690619466565b935060ff1681518110617a3b57617a3b618c19565b602002602001018190525082604051602001617a579190619365565b604051602081830303815290604052828280617a7290619466565b935060ff1681518110617a8757617a87618c19565b60200260200101819052506040518060400160405280600a81526020017f2d2d636f6e747261637400000000000000000000000000000000000000000000815250828280617ad490619466565b935060ff1681518110617ae957617ae9618c19565b6020026020010181905250617afe878461846f565b8282617b0981619466565b935060ff1681518110617b1e57617b1e618c19565b602090810291909101015285515115617bca5760408051808201909152600b81527f2d2d7265666572656e636500000000000000000000000000000000000000000060208201528282617b7081619466565b935060ff1681518110617b8557617b85618c19565b6020026020010181905250617b9e86600001518461846f565b8282617ba981619466565b935060ff1681518110617bbe57617bbe618c19565b60200260200101819052505b856080015115617c385760408051808201909152601881527f2d2d756e73616665536b697053746f72616765436865636b000000000000000060208201528282617c1381619466565b935060ff1681518110617c2857617c28618c19565b6020026020010181905250617c9e565b8415617c9e5760408051808201909152601281527f2d2d726571756972655265666572656e6365000000000000000000000000000060208201528282617c7d81619466565b935060ff1681518110617c9257617c92618c19565b60200260200101819052505b60408601515115617d3a5760408051808201909152600d81527f2d2d756e73616665416c6c6f770000000000000000000000000000000000000060208201528282617ce881619466565b935060ff1681518110617cfd57617cfd618c19565b60200260200101819052508560400151828280617d1990619466565b935060ff1681518110617d2e57617d2e618c19565b60200260200101819052505b856060015115617da45760408051808201909152601481527f2d2d756e73616665416c6c6f7752656e616d657300000000000000000000000060208201528282617d8381619466565b935060ff1681518110617d9857617d98618c19565b60200260200101819052505b60008160ff1667ffffffffffffffff811115617dc257617dc2618a4c565b604051908082528060200260200182016040528015617df557816020015b6060815260200190600190039081617de05790505b50905060005b8260ff168160ff161015617e4e57838160ff1681518110617e1e57617e1e618c19565b6020026020010151828260ff1681518110617e3b57617e3b618c19565b6020908102919091010152600101617dfb565b50979650505050505050565b6040805180820190915260008082526020820152815183511015617e7f575081614496565b81518351602085015160009291617e9591619a3a565b617e9f9190619949565b60208401519091506001908214617ec0575082516020840151819020908220145b8015617edb57835185518690617ed7908390619949565b9052505b50929392505050565b6000808260000151617f08856000015186602001518660000151876020015161822a565b617f129190619a3a565b90505b83516020850151617f269190619a3a565b811161784f5781617f3681619c3c565b9250508260000151617f6d856020015183617f519190619949565b8651617f5d9190619949565b838660000151876020015161822a565b617f779190619a3a565b9050617f15565b60606000617f8c8484617ee4565b617f97906001619a3a565b67ffffffffffffffff811115617faf57617faf618a4c565b604051908082528060200260200182016040528015617fe257816020015b6060815260200190600190039081617fcd5790505b50905060005b815181101561625757617ffe6164798686617830565b82828151811061801057618010618c19565b6020908102919091010152600101617fe8565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000831061806c577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310618098576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc1000083106180b657662386f26fc10000830492506010015b6305f5e10083106180ce576305f5e100830492506008015b61271083106180e257612710830492506004015b606483106180f4576064830492506002015b600a83106144965760010192915050565b600061811183836184af565b159392505050565b60008085841161822057602084116181cc5760008415618164576001618140866020619949565b61814b906008619c56565b618156906002619d54565b6181609190619949565b1990505b83518116856181738989619a3a565b61817d9190619949565b805190935082165b8181146181b75787841161819f5787945050505050615e88565b836181a981619d60565b945050828451169050618185565b6181c18785619a3a565b945050505050615e88565b8383206181d98588619949565b6181e39087619a3a565b91505b85821061821e5784822080820361820b576182018684619a3a565b9350505050615e88565b618216600184619949565b9250506181e6565b505b5092949350505050565b6000838186851161833557602085116182e45760008515618276576001618252876020619949565b61825d906008619c56565b618268906002619d54565b6182729190619949565b1990505b845181166000876182878b8b619a3a565b6182919190619949565b855190915083165b8281146182d6578186106182be576182b18b8b619a3a565b9650505050505050615e88565b856182c881619c3c565b965050838651169050618299565b859650505050505050615e88565b508383206000905b6182f68689619949565b8211618333578583208082036183125783945050505050615e88565b61831d600185619a3a565b935050818061832b90619c3c565b9250506182ec565b505b61833f8787619a3a565b979650505050505050565b6040805180820190915260008082526020820152600061837c856000015186602001518660000151876020015161822a565b6020808701805191860191909152519091506183989082619949565b8352845160208601516183ab9190619a3a565b81036183ba57600085526183ec565b835183516183c89190619a3a565b855186906183d7908390619949565b90525083516183e69082619a3a565b60208601525b50909392505050565b6020811061842d578151835261840c602084619a3a565b9250618419602083619a3a565b9150618426602082619949565b90506183f5565b600019811561845c576001618443836020619949565b61844f90610100619d54565b6184599190619949565b90505b9151835183169219169190911790915250565b6060600061847d848461495b565b805160208083015160405193945061849793909101619d77565b60405160208183030381529060405291505092915050565b81518151600091908111156184c2575081515b6020808501519084015160005b8381101561857b578251825180821461854b57600019602087101561852a576001846184fc896020619949565b6185069190619a3a565b618511906008619c56565b61851c906002619d54565b6185269190619949565b1990505b81811683821681810391146185485797506144969650505050505050565b50505b618556602086619a3a565b9450618563602085619a3a565b935050506020816185749190619a3a565b90506184cf565b50845186516150099190619dcf565b610c9f80619df083390190565b6112a68061aa8f83390190565b6117988061bd3583390190565b61155a8061d4cd83390190565b610d5e8061ea2783390190565b6040518060e0016040528060608152602001606081526020016060815260200160001515815260200160001515815260200160001515815260200161860e618613565b905290565b6040518061010001604052806000151581526020016000151581526020016060815260200160008019168152602001606081526020016060815260200160001515815260200161860e6040518060800160405280600081526020016000815260200160008152602001600081525090565b602080825282518282018190526000918401906040840190835b818110156186c55783516001600160a01b031683526020938401939092019160010161869e565b509095945050505050565b60005b838110156186eb5781810151838201526020016186d3565b50506000910152565b6000815180845261870c8160208601602086016186d0565b601f01601f19169290920160200192915050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b8281101561881c577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452815180516001600160a01b03168652602090810151604082880181905281519088018190529101906060600582901b88018101919088019060005b81811015618802577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa08a85030183526187ec8486516186f4565b60209586019590945092909201916001016187b2565b509197505050602094850194929092019150600101618748565b50929695505050505050565b600081518084526020840193506020830160005b8281101561887c5781517fffffffff000000000000000000000000000000000000000000000000000000001686526020958601959091019060010161883c565b5093949350505050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b8281101561881c577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc087860301845281518051604087526188f260408801826186f4565b905060208201519150868103602088015261890d8183618828565b9650505060209384019391909101906001016188ae565b600082825180855260208501945060208160051b8301016020850160005b8381101561897457601f1985840301885261895e8383516186f4565b6020988901989093509190910190600101618942565b50909695505050505050565b60208152600061458f6020830184618924565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b8281101561881c577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc087860301845281516001600160a01b0381511686526020810151905060406020870152618a146040870182618828565b95505060209384019391909101906001016189bb565b6001600160a01b0383168152604060208201526000615e8860408301846186f4565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040516060810167ffffffffffffffff81118282101715618a9e57618a9e618a4c565b60405290565b60008067ffffffffffffffff841115618abf57618abf618a4c565b50604051601f19601f85018116603f0116810181811067ffffffffffffffff82111715618aee57618aee618a4c565b604052838152905080828401851015618b0657600080fd5b6162578460208301856186d0565b600082601f830112618b2557600080fd5b61458f83835160208501618aa4565b600060208284031215618b4657600080fd5b815167ffffffffffffffff811115618b5d57600080fd5b61449284828501618b14565b600060208284031215618b7b57600080fd5b8151801515811461458f57600080fd5b600181811c90821680618b9f57607f821691505b602082108103616754577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6001600160a01b038416815282602082015260606040820152600061673a60608301846186f4565b828152604060208201526000615e8860408301846186f4565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081518084526020840193506020830160005b8281101561887c578151865260209586019590910190600101618c5c565b606081526000618c8d6060830186618924565b8281036020840152618c9f8186618c48565b9150508215156040830152949350505050565b60208152600061458f60208301846186f4565b6001600160a01b03851681526001600160a01b038416602082015282604082015260806060820152600061500960808301846186f4565b600060208284031215618d0e57600080fd5b5051919050565b6001600160a01b0385168152608060208201526000618d376080830186618924565b8281036040840152618d498186618c48565b915050821515606083015295945050505050565b606081526000618d7060608301866186f4565b602083019490945250901515604090910152919050565b6001600160a01b038616815284602082015260a060408201526000618daf60a08301866186f4565b6060830194909452509015156080909101529392505050565b7f4661696c656420746f206465706c6f7920636f6e747261637420000000000000815260008351618e0081601a8501602088016186d0565b7f3a20000000000000000000000000000000000000000000000000000000000000601a918401918201528351618e3d81601c8401602088016186d0565b01601c01949350505050565b600060208284031215618e5b57600080fd5b81516001600160a01b038116811461458f57600080fd5b60008351618e848184602088016186d0565b835190830190618e988183602088016186d0565b01949350505050565b7f4661696c656420746f206465706c6f7920636f6e747261637420000000000000815260008351618ed981601a8501602088016186d0565b7f207573696e6720636f6e7374727563746f722064617461202200000000000000601a918401918201528351618f168160338401602088016186d0565b7f220000000000000000000000000000000000000000000000000000000000000060339290910191820152603401949350505050565b60408152600b60408201527f464f554e4452595f4f5554000000000000000000000000000000000000000000606082015260806020820152600061458f60808301846186f4565b600060208284031215618fa557600080fd5b815167ffffffffffffffff811115618fbc57600080fd5b8201601f81018413618fcd57600080fd5b61449284825160208401618aa4565b60008551618fee818460208a016186d0565b7f2f000000000000000000000000000000000000000000000000000000000000009083019081528551619028816001840160208a016186d0565b7f2f000000000000000000000000000000000000000000000000000000000000006001929091019182015284516190668160028401602089016186d0565b6001818301019150507f2f00000000000000000000000000000000000000000000000000000000000000600182015283516190a88160028401602088016186d0565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600292909101918201526007019695505050505050565b6040815260006190f360408301846186f4565b8281036020840152600481527f2e6173740000000000000000000000000000000000000000000000000000000060208201526040810191505092915050565b7f436f756c64206e6f742066696e642041535420696e206172746966616374200081526000825161916a81601f8501602087016186d0565b7f2e205365742060617374203d20747275656020696e20666f756e6472792e746f601f9390910192830152507f6d6c000000000000000000000000000000000000000000000000000000000000603f820152604101919050565b6040815260006191d760408301846186f4565b8281036020840152601181527f2e6173742e6162736f6c7574655061746800000000000000000000000000000060208201526040810191505092915050565b60408152600061922960408301846186f4565b8281036020840152600c81527f2e6173742e6c6963656e7365000000000000000000000000000000000000000060208201526040810191505092915050565b7f2e6d657461646174612e736f75726365732e5b270000000000000000000000008152600082516192a08160148501602087016186d0565b7f275d2e6b656363616b32353600000000000000000000000000000000000000006014939091019283015250602001919050565b6040815260006192e760408301856186f4565b828103602084015261458b81856186f4565b7f22000000000000000000000000000000000000000000000000000000000000008152600082516193318160018501602087016186d0565b7f22000000000000000000000000000000000000000000000000000000000000006001939091019283015250600201919050565b600082516193778184602087016186d0565b7f2f6275696c642d696e666f000000000000000000000000000000000000000000920191825250600b01919050565b7f436f756c64206e6f742066696e64206275696c642d696e666f2066696c65207781527f697468206d61746368696e6720736f7572636520636f6465206861736820666f60208201527f7220636f6e74726163742000000000000000000000000000000000000000000060408201526000825161942a81604b8501602087016186d0565b91909101604b0192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600060ff821660ff810361947c5761947c619437565b60010192915050565b7f406f70656e7a657070656c696e2f646566656e6465722d6465706c6f792d636c81527f69656e742d636c694000000000000000000000000000000000000000000000006020820152600082516194e38160298501602087016186d0565b9190910160290192915050565b60408152601660408201527f4f50454e5a455050454c494e5f424153485f5041544800000000000000000000606082015260806020820152600061458f60808301846186f4565b60006020828403121561954957600080fd5b815167ffffffffffffffff81111561956057600080fd5b82016060818503121561957257600080fd5b61957a618a7b565b81518060030b811461958b57600080fd5b8152602082015167ffffffffffffffff8111156195a757600080fd5b6195b386828501618b14565b602083015250604082015167ffffffffffffffff8111156195d357600080fd5b6195df86828501618b14565b604083015250949350505050565b7f4661696c656420746f2072756e206261736820636f6d6d616e6420776974682081527f220000000000000000000000000000000000000000000000000000000000000060208201526000825161964b8160218501602087016186d0565b7f222e20496620796f7520617265207573696e672057696e646f77732c2073657460219390910192830152507f20746865204f50454e5a455050454c494e5f424153485f5041544820656e766960418201527f726f6e6d656e74207661726961626c6520746f207468652066756c6c7920717560618201527f616c69666965642070617468206f66207468652062617368206578656375746160818201527f626c652e20466f72206578616d706c652c20696620796f75206172652075736960a18201527f6e672047697420666f722057696e646f77732c206164642074686520666f6c6c60c18201527f6f77696e67206c696e6520696e20746865202e656e762066696c65206f66207960e18201527f6f75722070726f6a65637420287573696e6720666f727761726420736c6173686101018201527f6573293a0a4f50454e5a455050454c494e5f424153485f504154483d22433a2f6101218201527f50726f6772616d2046696c65732f4769742f62696e2f6261736822000000000061014182015261015c01919050565b7f4661696c656420746f2066696e64206c696e652077697468207072656669782081527f27000000000000000000000000000000000000000000000000000000000000006020820152600083516198378160218501602088016186d0565b7f2720696e206f75747075743a2000000000000000000000000000000000000000602191840191820152835161987481602e8401602088016186d0565b01602e01949350505050565b7f4661696c656420746f2072756e2075706772616465207361666574792076616c81527f69646174696f6e3a2000000000000000000000000000000000000000000000006020820152600082516194e38160298501602087016186d0565b7f55706772616465207361666574792076616c69646174696f6e206661696c656481527f3a0a00000000000000000000000000000000000000000000000000000000000060208201526000825161993c8160228501602087016186d0565b9190910160220192915050565b8181038181111561449657614496619437565b7f436f6e7472616374206e616d652000000000000000000000000000000000000081526000825161999481600e8501602087016186d0565b7f206d75737420626520696e2074686520666f726d6174204d79436f6e74726163600e9390910192830152507f742e736f6c3a4d79436f6e7472616374206f72204d79436f6e74726163742e73602e8201527f6f6c206f72206f75742f4d79436f6e74726163742e736f6c2f4d79436f6e7472604e8201527f6163742e6a736f6e000000000000000000000000000000000000000000000000606e820152607601919050565b8082018082111561449657614496619437565b7f53504458206c6963656e7365206964656e746966696572200000000000000000815260008351619a858160188501602088016186d0565b7f20696e20000000000000000000000000000000000000000000000000000000006018918401918201528351619ac281601c8401602088016186d0565b7f20646f6573206e6f74206c6f6f6b206c696b65206120737570706f7274656420601c92909101918201527f6c6963656e736520666f7220626c6f636b206578706c6f726572207665726966603c8201527f69636174696f6e2e205573652074686520606c6963656e73655479706560206f605c8201527f7074696f6e20746f20737065636966792061206c6963656e736520747970652c607c8201527f206f7220736574207468652060736b69704c6963656e73655479706560206f70609c8201527f74696f6e20746f2060747275656020746f20736b69702e00000000000000000060bc82015260d301949350505050565b60008251619bc88184602087016186d0565b7f2000000000000000000000000000000000000000000000000000000000000000920191825250600101919050565b7f406f70656e7a657070656c696e2f75706772616465732d636f72654000000000815260008251619c2f81601c8501602087016186d0565b91909101601c0192915050565b60006000198203619c4f57619c4f619437565b5060010190565b808202811582820484141761449657614496619437565b6001815b6001841115619ca857808504811115619c8c57619c8c619437565b6001841615619c9a57908102905b60019390931c928002619c71565b935093915050565b600082619cbf57506001614496565b81619ccc57506000614496565b8160018114619ce25760028114619cec57619d08565b6001915050614496565b60ff841115619cfd57619cfd619437565b50506001821b614496565b5060208310610133831016604e8410600b8410161715619d2b575081810a614496565b619d386000198484619c6d565b8060001904821115619d4c57619d4c619437565b029392505050565b600061458f8383619cb0565b600081619d6f57619d6f619437565b506000190190565b60008351619d898184602088016186d0565b7f3a000000000000000000000000000000000000000000000000000000000000009083019081528351619dc38160018401602088016186d0565b01600101949350505050565b818103600083128015838313168383128216171561784f5761784f61943756fe608060405234801561001057600080fd5b50604051610c9f380380610c9f83398101604081905261002f9161010d565b8181600361003d83826101ff565b50600461004a82826101ff565b50505050506102bd565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261007b57600080fd5b81516001600160401b0381111561009457610094610054565b604051601f8201601f19908116603f011681016001600160401b03811182821017156100c2576100c2610054565b6040528181528382016020018510156100da57600080fd5b60005b828110156100f9576020818601810151838301820152016100dd565b506000918101602001919091529392505050565b6000806040838503121561012057600080fd5b82516001600160401b0381111561013657600080fd5b6101428582860161006a565b602085015190935090506001600160401b0381111561016057600080fd5b61016c8582860161006a565b9150509250929050565b600181811c9082168061018a57607f821691505b6020821081036101aa57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156101fa57806000526020600020601f840160051c810160208510156101d75750805b601f840160051c820191505b818110156101f757600081556001016101e3565b50505b505050565b81516001600160401b0381111561021857610218610054565b61022c816102268454610176565b846101b0565b6020601f82116001811461026057600083156102485750848201515b600019600385901b1c1916600184901b1784556101f7565b600084815260208120601f198516915b828110156102905787850151825560209485019460019092019101610270565b50848210156102ae5786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b6109d3806102cc6000396000f3fe608060405234801561001057600080fd5b50600436106100be5760003560e01c806340c10f191161007657806395d89b411161005b57806395d89b4114610183578063a9059cbb1461018b578063dd62ed3e1461019e57600080fd5b806340c10f191461013857806370a082311461014d57600080fd5b806318160ddd116100a757806318160ddd1461010457806323b872dd14610116578063313ce5671461012957600080fd5b806306fdde03146100c3578063095ea7b3146100e1575b600080fd5b6100cb6101e4565b6040516100d891906107bf565b60405180910390f35b6100f46100ef366004610854565b610276565b60405190151581526020016100d8565b6002545b6040519081526020016100d8565b6100f461012436600461087e565b610290565b604051601281526020016100d8565b61014b610146366004610854565b6102b4565b005b61010861015b3660046108bb565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6100cb6102c2565b6100f4610199366004610854565b6102d1565b6101086101ac3660046108dd565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6060600380546101f390610910565b80601f016020809104026020016040519081016040528092919081815260200182805461021f90610910565b801561026c5780601f106102415761010080835404028352916020019161026c565b820191906000526020600020905b81548152906001019060200180831161024f57829003601f168201915b5050505050905090565b6000336102848185856102df565b60019150505b92915050565b60003361029e8582856102f1565b6102a98585856103c5565b506001949350505050565b6102be8282610470565b5050565b6060600480546101f390610910565b6000336102848185856103c5565b6102ec83838360016104cc565b505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146103bf57818110156103b0576040517ffb8f41b200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416600482015260248101829052604481018390526064015b60405180910390fd5b6103bf848484840360006104cc565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8316610415576040517f96c6fd1e000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff8216610465576040517fec442f05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b6102ec838383610614565b73ffffffffffffffffffffffffffffffffffffffff82166104c0576040517fec442f05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b6102be60008383610614565b73ffffffffffffffffffffffffffffffffffffffff841661051c576040517fe602df05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff831661056c576040517f94280d62000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260016020908152604080832093871683529290522082905580156103bf578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161060691815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff831661064c5780600260008282546106419190610963565b909155506106fe9050565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260208190526040902054818110156106d2576040517fe450d38c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8516600482015260248101829052604481018390526064016103a7565b73ffffffffffffffffffffffffffffffffffffffff841660009081526020819052604090209082900390555b73ffffffffffffffffffffffffffffffffffffffff821661072757600280548290039055610753565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090208054820190555b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516107b291815260200190565b60405180910390a3505050565b602081526000825180602084015260005b818110156107ed57602081860181015160408684010152016107d0565b5060006040828501015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011684010191505092915050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461084f57600080fd5b919050565b6000806040838503121561086757600080fd5b6108708361082b565b946020939093013593505050565b60008060006060848603121561089357600080fd5b61089c8461082b565b92506108aa6020850161082b565b929592945050506040919091013590565b6000602082840312156108cd57600080fd5b6108d68261082b565b9392505050565b600080604083850312156108f057600080fd5b6108f98361082b565b91506109076020840161082b565b90509250929050565b600181811c9082168061092457607f821691505b60208210810361095d577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b8082018082111561028a577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea26469706673582212207e804ca539d49155d2b6bc19268ce22f9f857027c75247d69fb0d56a089c93d464736f6c634300081a0033608060405234801561001057600080fd5b506040516112a63803806112a683398101604081905261002f91610110565b604051806040016040528060048152602001635a65746160e01b815250604051806040016040528060048152602001635a45544160e01b815250816003908161007891906101e2565b50600461008582826101e2565b5050506001600160a01b03821615806100a557506001600160a01b038116155b156100c35760405163e6c4247b60e01b815260040160405180910390fd5b600680546001600160a01b039384166001600160a01b031991821617909155600780549290931691161790556102a0565b80516001600160a01b038116811461010b57600080fd5b919050565b6000806040838503121561012357600080fd5b61012c836100f4565b915061013a602084016100f4565b90509250929050565b634e487b7160e01b600052604160045260246000fd5b600181811c9082168061016d57607f821691505b60208210810361018d57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156101dd57806000526020600020601f840160051c810160208510156101ba5750805b601f840160051c820191505b818110156101da57600081556001016101c6565b50505b505050565b81516001600160401b038111156101fb576101fb610143565b61020f816102098454610159565b84610193565b6020601f821160018114610243576000831561022b5750848201515b600019600385901b1c1916600184901b1784556101da565b600084815260208120601f198516915b828110156102735787850151825560209485019460019092019101610253565b50848210156102915786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b610ff7806102af6000396000f3fe608060405234801561001057600080fd5b506004361061011b5760003560e01c806342966c68116100b257806379cc679011610081578063a9059cbb11610066578063a9059cbb1461028e578063bff9662a146102a1578063dd62ed3e146102c157600080fd5b806379cc67901461027357806395d89b411461028657600080fd5b806342966c68146102025780635b1125911461021557806370a0823114610235578063779e3b631461026b57600080fd5b80631e458bee116100ee5780631e458bee1461018857806323b872dd1461019b578063313ce567146101ae578063328a01d0146101bd57600080fd5b806306fdde0314610120578063095ea7b31461013e57806315d57fd41461016157806318160ddd14610176575b600080fd5b610128610307565b6040516101359190610d97565b60405180910390f35b61015161014c366004610e2c565b610399565b6040519015158152602001610135565b61017461016f366004610e56565b6103b3565b005b6002545b604051908152602001610135565b610174610196366004610e89565b61057e565b6101516101a9366004610ebc565b610631565b60405160128152602001610135565b6007546101dd9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610135565b610174610210366004610ef9565b610655565b6006546101dd9073ffffffffffffffffffffffffffffffffffffffff1681565b61017a610243366004610f12565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b610174610662565b610174610281366004610e2c565b610786565b610128610837565b61015161029c366004610e2c565b610846565b6005546101dd9073ffffffffffffffffffffffffffffffffffffffff1681565b61017a6102cf366004610e56565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b60606003805461031690610f34565b80601f016020809104026020016040519081016040528092919081815260200182805461034290610f34565b801561038f5780601f106103645761010080835404028352916020019161038f565b820191906000526020600020905b81548152906001019060200180831161037257829003601f168201915b5050505050905090565b6000336103a7818585610854565b60019150505b92915050565b60075473ffffffffffffffffffffffffffffffffffffffff1633148015906103f3575060065473ffffffffffffffffffffffffffffffffffffffff163314155b15610431576040517fcdfcef970000000000000000000000000000000000000000000000000000000081523360048201526024015b60405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff82161580610468575073ffffffffffffffffffffffffffffffffffffffff8116155b1561049f576040517fe6c4247b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6006805473ffffffffffffffffffffffffffffffffffffffff8481167fffffffffffffffffffffffff0000000000000000000000000000000000000000928316811790935560058054918516919092161790556040805133815260208101929092527fe79965b5c67dcfb2cf5fe152715e4a7256cee62a3d5dd8484fd8a8539eb8beff910160405180910390a16040805133815273ffffffffffffffffffffffffffffffffffffffff831660208201527f1b9352454524a57a51f24f67dc66d898f616922cd1f7a12d73570ece12b1975c910160405180910390a15050565b60055473ffffffffffffffffffffffffffffffffffffffff1633146105d1576040517f3fe32fba000000000000000000000000000000000000000000000000000000008152336004820152602401610428565b6105db8383610866565b808373ffffffffffffffffffffffffffffffffffffffff167fc263b302aec62d29105026245f19e16f8e0137066ccd4a8bd941f716bd4096bb8460405161062491815260200190565b60405180910390a3505050565b60003361063f8582856108c6565b61064a858585610995565b506001949350505050565b61065f3382610a40565b50565b60075473ffffffffffffffffffffffffffffffffffffffff1633146106b5576040517fe700765e000000000000000000000000000000000000000000000000000000008152336004820152602401610428565b60065473ffffffffffffffffffffffffffffffffffffffff16610704576040517fe6c4247b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600654600780547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff90921691821790556040805133815260208101929092527f5104c9abdc7d111c2aeb4ce890ac70274a4be2ee83f46a62551be5e6ebc82dd0910160405180910390a1565b60055473ffffffffffffffffffffffffffffffffffffffff1633146107d9576040517f3fe32fba000000000000000000000000000000000000000000000000000000008152336004820152602401610428565b6107e38282610a9c565b8173ffffffffffffffffffffffffffffffffffffffff167f919f7e2092ffcc9d09f599be18d8152860b0c054df788a33bc549cdd9d0f15b18260405161082b91815260200190565b60405180910390a25050565b60606004805461031690610f34565b6000336103a7818585610995565b6108618383836001610ab1565b505050565b73ffffffffffffffffffffffffffffffffffffffff82166108b6576040517fec442f0500000000000000000000000000000000000000000000000000000000815260006004820152602401610428565b6108c260008383610bf9565b5050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811461098f5781811015610980576040517ffb8f41b200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff841660048201526024810182905260448101839052606401610428565b61098f84848484036000610ab1565b50505050565b73ffffffffffffffffffffffffffffffffffffffff83166109e5576040517f96c6fd1e00000000000000000000000000000000000000000000000000000000815260006004820152602401610428565b73ffffffffffffffffffffffffffffffffffffffff8216610a35576040517fec442f0500000000000000000000000000000000000000000000000000000000815260006004820152602401610428565b610861838383610bf9565b73ffffffffffffffffffffffffffffffffffffffff8216610a90576040517f96c6fd1e00000000000000000000000000000000000000000000000000000000815260006004820152602401610428565b6108c282600083610bf9565b610aa78233836108c6565b6108c28282610a40565b73ffffffffffffffffffffffffffffffffffffffff8416610b01576040517fe602df0500000000000000000000000000000000000000000000000000000000815260006004820152602401610428565b73ffffffffffffffffffffffffffffffffffffffff8316610b51576040517f94280d6200000000000000000000000000000000000000000000000000000000815260006004820152602401610428565b73ffffffffffffffffffffffffffffffffffffffff8085166000908152600160209081526040808320938716835292905220829055801561098f578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051610beb91815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff8316610c31578060026000828254610c269190610f87565b90915550610ce39050565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205481811015610cb7576040517fe450d38c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff851660048201526024810182905260448101839052606401610428565b73ffffffffffffffffffffffffffffffffffffffff841660009081526020819052604090209082900390555b73ffffffffffffffffffffffffffffffffffffffff8216610d0c57600280548290039055610d38565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090208054820190555b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161062491815260200190565b602081526000825180602084015260005b81811015610dc55760208186018101516040868401015201610da8565b5060006040828501015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011684010191505092915050565b803573ffffffffffffffffffffffffffffffffffffffff81168114610e2757600080fd5b919050565b60008060408385031215610e3f57600080fd5b610e4883610e03565b946020939093013593505050565b60008060408385031215610e6957600080fd5b610e7283610e03565b9150610e8060208401610e03565b90509250929050565b600080600060608486031215610e9e57600080fd5b610ea784610e03565b95602085013595506040909401359392505050565b600080600060608486031215610ed157600080fd5b610eda84610e03565b9250610ee860208501610e03565b929592945050506040919091013590565b600060208284031215610f0b57600080fd5b5035919050565b600060208284031215610f2457600080fd5b610f2d82610e03565b9392505050565b600181811c90821680610f4857607f821691505b602082108103610f81577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b808201808211156103ad577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea2646970667358221220085f01204b33dc17013c78c74fbca32a3da2c0b384ce7c8878c889551af28c6164736f6c634300081a003360a060405234801561001057600080fd5b5060405161179838038061179883398101604081905261002f916101e5565b60016000556002805460ff191690556001600160a01b038316158061005b57506001600160a01b038216155b8061006d57506001600160a01b038116155b1561008b5760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b0383166080526100a3600082610134565b506100ce7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a82610134565b506100f97f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e483610134565b5061011260008051602061177883398151915282610134565b5061012b60008051602061177883398151915283610134565b50505050610228565b60008281526001602090815260408083206001600160a01b038516845290915281205460ff166101bf5760008381526001602081815260408084206001600160a01b0387168086529252808420805460ff19169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45060016101c3565b5060005b92915050565b80516001600160a01b03811681146101e057600080fd5b919050565b6000806000606084860312156101fa57600080fd5b610203846101c9565b9250610211602085016101c9565b915061021f604085016101c9565b90509250925092565b60805161151961025f6000396000818161019e01528181610500015281816105620152818161099101526109f301526115196000f3fe608060405234801561001057600080fd5b506004361061016c5760003560e01c806385f438c1116100cd578063c8a0236211610081578063d936547e11610066578063d936547e14610355578063d9caed1214610378578063e63ab1e91461038b57600080fd5b8063c8a023621461032f578063d547741f1461034257600080fd5b80639a590427116100b25780639a590427146103015780639b19251a14610314578063a217fddf1461032757600080fd5b806385f438c11461029457806391d14854146102bb57600080fd5b806336568abe11610124578063570618e111610109578063570618e11461025a5780635c975abb146102815780638456cb591461028c57600080fd5b806336568abe1461023f5780633f4ba83a1461025257600080fd5b806321fc65f21161015557806321fc65f2146101e5578063248a9ca3146101fa5780632f2ff15d1461022c57600080fd5b806301ffc9a714610171578063116191b614610199575b600080fd5b61018461017f366004611224565b6103b2565b60405190151581526020015b60405180910390f35b6101c07f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610190565b6101f86101f336600461128f565b61044b565b005b61021e61020836600461132c565b6000908152600160208190526040909120015490565b604051908152602001610190565b6101f861023a366004611345565b61064c565b6101f861024d366004611345565b610678565b6101f86106d6565b61021e7f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a81565b60025460ff16610184565b6101f861070b565b61021e7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b6101846102c9366004611345565b600091825260016020908152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b6101f861030f366004611371565b61073d565b6101f8610322366004611371565b61080b565b61021e600081565b6101f861033d36600461128f565b6108dc565b6101f8610350366004611345565b610ac3565b610184610363366004611371565b60036020526000908152604090205460ff1681565b6101f861038636600461138c565b610ae9565b61021e7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061044557507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b610453610c15565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461047d81610c58565b610485610c62565b73ffffffffffffffffffffffffffffffffffffffff861660009081526003602052604090205460ff166104e4576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61052573ffffffffffffffffffffffffffffffffffffffff87167f000000000000000000000000000000000000000000000000000000000000000086610ca1565b6040517f5131ab5900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690635131ab599061059f9089908990899089908990600401611412565b600060405180830381600087803b1580156105b957600080fd5b505af11580156105cd573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167f85b5be9cf454e05e0bddf49315178102227c312078eefa3c00294fb4d912ae4e8686866040516106329392919061146f565b60405180910390a3506106456001600055565b5050505050565b6000828152600160208190526040909120015461066881610c58565b6106728383610d2e565b50505050565b73ffffffffffffffffffffffffffffffffffffffff811633146106c7576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6106d18282610ddb565b505050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61070081610c58565b610708610e7c565b50565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61073581610c58565b610708610edb565b7f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a61076781610c58565b73ffffffffffffffffffffffffffffffffffffffff82166107b4576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216600081815260036020526040808220805460ff19169055517f51085ddf9ebdded84b76e829eb58c4078e4b5bdf97d9a94723f336039da467919190a25050565b7f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a61083581610c58565b73ffffffffffffffffffffffffffffffffffffffff8216610882576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216600081815260036020526040808220805460ff19166001179055517faab7954e9d246b167ef88aeddad35209ca2489d95a8aeb59e288d9b19fae5a549190a25050565b6108e4610c15565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461090e81610c58565b610916610c62565b73ffffffffffffffffffffffffffffffffffffffff861660009081526003602052604090205460ff16610975576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6109b673ffffffffffffffffffffffffffffffffffffffff87167f000000000000000000000000000000000000000000000000000000000000000086610ca1565b6040517fb8969bd400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063b8969bd490610a309089908990899089908990600401611412565b600060405180830381600087803b158015610a4a57600080fd5b505af1158015610a5e573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fb9d4efa96044e5f5e03e696fa9ae2ff66911cc27e8a637c3627c75bc5b2241c88686866040516106329392919061146f565b60008281526001602081905260409091200154610adf81610c58565b6106728383610ddb565b610af1610c15565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e4610b1b81610c58565b610b23610c62565b73ffffffffffffffffffffffffffffffffffffffff841660009081526003602052604090205460ff16610b82576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610ba373ffffffffffffffffffffffffffffffffffffffff85168484610ca1565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f9b1bfa7fa9ee420a16e124f794c35ac9f90472acc99140eb2f6447c714cad8eb84604051610c0291815260200190565b60405180910390a3506106d16001600055565b600260005403610c51576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b6107088133610f18565b60025460ff1615610c9f576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6040805173ffffffffffffffffffffffffffffffffffffffff8416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb000000000000000000000000000000000000000000000000000000001790526106d1908490610fa9565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff16610dd357600083815260016020818152604080842073ffffffffffffffffffffffffffffffffffffffff87168086529252808420805460ff19169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a4506001610445565b506000610445565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff1615610dd357600083815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff86168085529252808320805460ff1916905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a4506001610445565b610e8461103f565b6002805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b610ee3610c62565b6002805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258610eb13390565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16610fa5576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82166004820152602481018390526044015b60405180910390fd5b5050565b6000610fcb73ffffffffffffffffffffffffffffffffffffffff84168361107b565b90508051600014158015610ff0575080806020019051810190610fee9190611492565b155b156106d1576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84166004820152602401610f9c565b60025460ff16610c9f576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606061108983836000611090565b9392505050565b6060814710156110ce576040517fcd786059000000000000000000000000000000000000000000000000000000008152306004820152602401610f9c565b6000808573ffffffffffffffffffffffffffffffffffffffff1684866040516110f791906114b4565b60006040518083038185875af1925050503d8060008114611134576040519150601f19603f3d011682016040523d82523d6000602084013e611139565b606091505b5091509150611149868383611153565b9695505050505050565b60608261116857611163826111e2565b611089565b815115801561118c575073ffffffffffffffffffffffffffffffffffffffff84163b155b156111db576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85166004820152602401610f9c565b5080611089565b8051156111f25780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006020828403121561123657600080fd5b81357fffffffff000000000000000000000000000000000000000000000000000000008116811461108957600080fd5b803573ffffffffffffffffffffffffffffffffffffffff8116811461128a57600080fd5b919050565b6000806000806000608086880312156112a757600080fd5b6112b086611266565b94506112be60208701611266565b935060408601359250606086013567ffffffffffffffff8111156112e157600080fd5b8601601f810188136112f257600080fd5b803567ffffffffffffffff81111561130957600080fd5b88602082840101111561131b57600080fd5b959894975092955050506020019190565b60006020828403121561133e57600080fd5b5035919050565b6000806040838503121561135857600080fd5b8235915061136860208401611266565b90509250929050565b60006020828403121561138357600080fd5b61108982611266565b6000806000606084860312156113a157600080fd5b6113aa84611266565b92506113b860208501611266565b929592945050506040919091013590565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff8616815273ffffffffffffffffffffffffffffffffffffffff851660208201528360408201526080606082015260006114646080830184866113c9565b979650505050505050565b8381526040602082015260006114896040830184866113c9565b95945050505050565b6000602082840312156114a457600080fd5b8151801515811461108957600080fd5b6000825160005b818110156114d557602081860181015185830152016114bb565b50600092019182525091905056fea26469706673582212207ea3ad4ba4a6d39c3be3cec464753448900300ac3b508b4000815de5b914c53064736f6c634300081a00338619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a60c060405260001960035534801561001657600080fd5b5060405161155a38038061155a83398101604081905261003591610220565b60016000819055805460ff19169055838383836001600160a01b038416158061006557506001600160a01b038316155b8061007757506001600160a01b038216155b8061008957506001600160a01b038116155b156100a75760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b03808516608052831660a0526100c5600082610154565b506100f07f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e483610154565b5061011b7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb83610154565b506101467f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a82610154565b505050505050505050610274565b60008281526002602090815260408083206001600160a01b038516845290915281205460ff166101fa5760008381526002602090815260408083206001600160a01b03861684529091529020805460ff191660011790556101b23390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45060016101fe565b5060005b92915050565b80516001600160a01b038116811461021b57600080fd5b919050565b6000806000806080858703121561023657600080fd5b61023f85610204565b935061024d60208601610204565b925061025b60408601610204565b915061026960608601610204565b905092959194509250565b60805160a0516112826102d86000396000818161021d01528181610531015281816108240152818161097b01528181610ad00152610bf20152600081816101d1015281816104a1015281816105040152818161079401526107f701526112826000f3fe608060405234801561001057600080fd5b50600436106101775760003560e01c80635e3e9fef116100d857806391d148541161008c578063d547741f11610066578063d547741f14610386578063d5abeb0114610399578063e63ab1e9146103a257600080fd5b806391d1485414610311578063a217fddf14610357578063a783c7891461035f57600080fd5b8063743e0c9b116100bd578063743e0c9b146102cf5780638456cb59146102e257806385f438c1146102ea57600080fd5b80635e3e9fef146102a95780636f8b44b0146102bc57600080fd5b8063248a9ca31161012f57806336568abe1161011457806336568abe146102835780633f4ba83a146102965780635c975abb1461029e57600080fd5b8063248a9ca31461023f5780632f2ff15d1461027057600080fd5b8063106e629011610160578063106e6290146101b9578063116191b6146101cc57806321e093b11461021857600080fd5b806301ffc9a71461017c57806302d5c899146101a4575b600080fd5b61018f61018a366004610fb4565b6103c9565b60405190151581526020015b60405180910390f35b6101b76101b2366004611026565b610462565b005b6101b76101c73660046110b8565b6105f7565b6101f37f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161019b565b6101f37f000000000000000000000000000000000000000000000000000000000000000081565b61026261024d3660046110eb565b60009081526002602052604090206001015490565b60405190815260200161019b565b6101b761027e366004611104565b61069c565b6101b7610291366004611104565b6106c7565b6101b7610720565b60015460ff1661018f565b6101b76102b7366004611026565b610755565b6101b76102ca3660046110eb565b6108d0565b6101b76102dd3660046110eb565b61093e565b6101b76109e8565b6102627f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b61018f61031f366004611104565b600091825260026020908152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b610262600081565b6102627f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb81565b6101b7610394366004611104565b610a1a565b61026260035481565b6102627f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061045c57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b61046a610a3f565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461049481610a82565b61049c610a8c565b6104c77f00000000000000000000000000000000000000000000000000000000000000008684610acb565b6040517fb8969bd400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063b8969bd490610561907f0000000000000000000000000000000000000000000000000000000000000000908a908a908a908a90600401611179565b600060405180830381600087803b15801561057b57600080fd5b505af115801561058f573d6000803e3d6000fd5b505050508573ffffffffffffffffffffffffffffffffffffffff167fba96f26bdda53eb8c8ba39045dfb4ff39753fbc7a6edcf250a88e75e78d102fe8686866040516105dd939291906111d6565b60405180910390a2506105f06001600055565b5050505050565b6105ff610a3f565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461062981610a82565b610631610a8c565b61063c848484610acb565b8373ffffffffffffffffffffffffffffffffffffffff167f884edad9ce6fa2440d8a54cc123490eb96d2768479d49ff9c7366125a94243648460405161068491815260200190565b60405180910390a2506106976001600055565b505050565b6000828152600260205260409020600101546106b781610a82565b6106c18383610c53565b50505050565b73ffffffffffffffffffffffffffffffffffffffff81163314610716576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6106978282610d53565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61074a81610a82565b610752610e12565b50565b61075d610a3f565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461078781610a82565b61078f610a8c565b6107ba7f00000000000000000000000000000000000000000000000000000000000000008684610acb565b6040517f5131ab5900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690635131ab5990610854907f0000000000000000000000000000000000000000000000000000000000000000908a908a908a908a90600401611179565b600060405180830381600087803b15801561086e57600080fd5b505af1158015610882573d6000803e3d6000fd5b505050508573ffffffffffffffffffffffffffffffffffffffff167f7772f56296d3a5202974a45c61c9188d844ab4d6eeb18c851e4b8d5384ca6ced8686866040516105dd939291906111d6565b7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb6108fa81610a82565b610902610a8c565b60038290556040518281527f7810bd47de260c3e9ee10061cf438099dd12256c79485f12f94dbccc981e806c9060200160405180910390a15050565b610946610a8c565b6040517f79cc6790000000000000000000000000000000000000000000000000000000008152336004820152602481018290527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16906379cc679090604401600060405180830381600087803b1580156109d457600080fd5b505af11580156105f0573d6000803e3d6000fd5b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610a1281610a82565b610752610e8f565b600082815260026020526040902060010154610a3581610a82565b6106c18383610d53565b600260005403610a7b576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b6107528133610ee8565b60015460ff1615610ac9576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6003547f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b39573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b5d91906111f9565b610b679084611212565b1115610b9f576040517fc30436e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f1e458bee00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff848116600483015260248201849052604482018390527f00000000000000000000000000000000000000000000000000000000000000001690631e458bee90606401600060405180830381600087803b158015610c3657600080fd5b505af1158015610c4a573d6000803e3d6000fd5b50505050505050565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff16610d4b57600083815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff86168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055610ce93390565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a450600161045c565b50600061045c565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff1615610d4b57600083815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8616808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a450600161045c565b610e1a610f78565b600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b610e97610a8c565b600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016811790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25833610e65565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16610f74576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff821660048201526024810183905260440160405180910390fd5b5050565b60015460ff16610ac9576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060208284031215610fc657600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610ff657600080fd5b9392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461102157600080fd5b919050565b60008060008060006080868803121561103e57600080fd5b61104786610ffd565b945060208601359350604086013567ffffffffffffffff81111561106a57600080fd5b8601601f8101881361107b57600080fd5b803567ffffffffffffffff81111561109257600080fd5b8860208284010111156110a457600080fd5b959894975060200195606001359392505050565b6000806000606084860312156110cd57600080fd5b6110d684610ffd565b95602085013595506040909401359392505050565b6000602082840312156110fd57600080fd5b5035919050565b6000806040838503121561111757600080fd5b8235915061112760208401610ffd565b90509250929050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff8616815273ffffffffffffffffffffffffffffffffffffffff851660208201528360408201526080606082015260006111cb608083018486611130565b979650505050505050565b8381526040602082015260006111f0604083018486611130565b95945050505050565b60006020828403121561120b57600080fd5b5051919050565b8082018082111561045c577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea2646970667358221220de5fa55e0ca79ea2f08903481d01ea00bbbf346b9cfba44e12a2dd6f3a6f2e8a64736f6c634300081a00336080604052348015600f57600080fd5b506001600055610d3a806100246000396000f3fe6080604052600436106100635760003560e01c8063c513169111610040578063c5131691146100c1578063e04d4f97146100e1578063f05b6abf146100f457005b8063357fc5a21461006c5780636ed701691461008c5780638fcaa0b5146100a157005b3661006a57005b005b34801561007857600080fd5b5061006a6100873660046106c0565b610114565b34801561009857600080fd5b5061006a6101aa565b3480156100ad57600080fd5b5061006a6100bc3660046106fc565b6101df565b3480156100cd57600080fd5b5061006a6100dc3660046106c0565b61021e565b61006a6100ef366004610895565b6102f9565b34801561010057600080fd5b5061006a61010f366004610981565b61033d565b61011c610372565b61013e73ffffffffffffffffffffffffffffffffffffffff83163383866103b5565b604080513381526020810185905273ffffffffffffffffffffffffffffffffffffffff848116828401528316606082015290517f2b58128f24a9f59127cc5b5430d70542b22220f2d9adaa86e442b816ab98af609181900360800190a16101a56001600055565b505050565b6040513381527fbcaadb46b82a48af60b608f58959ae6b8310d1b0a0d094c2e9ec3208ed39f2a09060200160405180910390a1565b7f0d3f65f00e631663aa85c96330b5c7a83bb29af3630c0063776f985edc3037aa33838360405161021293929190610a6b565b60405180910390a15050565b610226610372565b6000610233600285610ad5565b90508060000361026f576040517f1f2a200500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61029173ffffffffffffffffffffffffffffffffffffffff84163384846103b5565b604080513381526020810183905273ffffffffffffffffffffffffffffffffffffffff858116828401528416606082015290517f2b58128f24a9f59127cc5b5430d70542b22220f2d9adaa86e442b816ab98af609181900360800190a1506101a56001600055565b7f1f1ff1f5fb41346850b2f5c04e6c767e2f1c8a525c5c0c5cdb60cdf3ca5f62fa3334858585604051610330959493929190610b7e565b60405180910390a1505050565b7f74a53cd528a921fca7dbdee62f86819051d3cc98f214951f4238e8843f20b146338484846040516103309493929190610c08565b6002600054036103ae576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b6040805173ffffffffffffffffffffffffffffffffffffffff85811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd0000000000000000000000000000000000000000000000000000000017905261044a908590610450565b50505050565b600061047273ffffffffffffffffffffffffffffffffffffffff8416836104eb565b905080516000141580156104975750808060200190518101906104959190610ccb565b155b156101a5576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff841660048201526024015b60405180910390fd5b60606104f983836000610500565b9392505050565b60608147101561053e576040517fcd7860590000000000000000000000000000000000000000000000000000000081523060048201526024016104e2565b6000808573ffffffffffffffffffffffffffffffffffffffff1684866040516105679190610ce8565b60006040518083038185875af1925050503d80600081146105a4576040519150601f19603f3d011682016040523d82523d6000602084013e6105a9565b606091505b50915091506105b98683836105c3565b9695505050505050565b6060826105d8576105d382610652565b6104f9565b81511580156105fc575073ffffffffffffffffffffffffffffffffffffffff84163b155b1561064b576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff851660048201526024016104e2565b50806104f9565b8051156106625780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50565b803573ffffffffffffffffffffffffffffffffffffffff811681146106bb57600080fd5b919050565b6000806000606084860312156106d557600080fd5b833592506106e560208501610697565b91506106f360408501610697565b90509250925092565b6000806020838503121561070f57600080fd5b823567ffffffffffffffff81111561072657600080fd5b8301601f8101851361073757600080fd5b803567ffffffffffffffff81111561074e57600080fd5b85602082840101111561076057600080fd5b6020919091019590945092505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156107e6576107e6610770565b604052919050565b600082601f8301126107ff57600080fd5b813567ffffffffffffffff81111561081957610819610770565b61084a60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8401160161079f565b81815284602083860101111561085f57600080fd5b816020850160208301376000918101602001919091529392505050565b801515811461069457600080fd5b80356106bb8161087c565b6000806000606084860312156108aa57600080fd5b833567ffffffffffffffff8111156108c157600080fd5b6108cd868287016107ee565b9350506020840135915060408401356108e58161087c565b809150509250925092565b600067ffffffffffffffff82111561090a5761090a610770565b5060051b60200190565b600082601f83011261092557600080fd5b8135610938610933826108f0565b61079f565b8082825260208201915060208360051b86010192508583111561095a57600080fd5b602085015b8381101561097757803583526020928301920161095f565b5095945050505050565b60008060006060848603121561099657600080fd5b833567ffffffffffffffff8111156109ad57600080fd5b8401601f810186136109be57600080fd5b80356109cc610933826108f0565b8082825260208201915060208360051b8501019250888311156109ee57600080fd5b602084015b83811015610a3057803567ffffffffffffffff811115610a1257600080fd5b610a218b6020838901016107ee565b845250602092830192016109f3565b509550505050602084013567ffffffffffffffff811115610a5057600080fd5b610a5c86828701610914565b9250506106f36040850161088a565b73ffffffffffffffffffffffffffffffffffffffff8416815260406020820152816040820152818360608301376000818301606090810191909152601f9092017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016010192915050565b600082610b0b577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60005b83811015610b2b578181015183820152602001610b13565b50506000910152565b60008151808452610b4c816020860160208601610b10565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b73ffffffffffffffffffffffffffffffffffffffff8616815284602082015260a060408201526000610bb360a0830186610b34565b6060830194909452509015156080909101529392505050565b600081518084526020840193506020830160005b82811015610bfe578151865260209586019590910190600101610be0565b5093949350505050565b60006080820173ffffffffffffffffffffffffffffffffffffffff871683526080602084015280865180835260a08501915060a08160051b86010192506020880160005b82811015610c9b577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60878603018452610c86858351610b34565b94506020938401939190910190600101610c4c565b505050508281036040840152610cb18186610bcc565b915050610cc2606083018415159052565b95945050505050565b600060208284031215610cdd57600080fd5b81516104f98161087c565b60008251610cfa818460208701610b10565b919091019291505056fea2646970667358221220556072e1abafc3c4063b8cce832228b4f309b93726aaa6a6dfab20cb880c6d1864736f6c634300081a0033a264697066735822122032c8c63423200a3a7d44a392cd5b88f7e9a72017496728b242b5f1202f97c8cd64736f6c634300081a0033", + Bin: "0x6080604052600c8054600160ff199182168117909255601f80549091169091179055348015602c57600080fd5b5061f7ba8061003c6000396000f3fe608060405234801561001057600080fd5b50600436106102415760003560e01c8063a217fddf11610145578063cebad2a6116100bd578063e6afc7901161008c578063fa18c09b11610071578063fa18c09b1461042c578063fa7626d414610434578063fe7bdbb21461044157600080fd5b8063e6afc7901461041c578063f68bd1c01461042457600080fd5b8063cebad2a6146103dd578063dd51e82f146103e5578063e20c9f71146103ed578063e63ab1e9146103f557600080fd5b8063b124dbf511610114578063ba414fa6116100f9578063ba414fa6146103b5578063ccf20616146103cd578063ce5871e1146103d557600080fd5b8063b124dbf5146103a5578063b5508aa9146103ad57600080fd5b8063a217fddf14610366578063a56f7a4b1461036e578063a783c78914610376578063b0464fdc1461039d57600080fd5b806344671b94116101d85780637d7f772a116101a757806385226c811161018c57806385226c811461031557806385f438c11461032a578063916a17c61461035157600080fd5b80637d7f772a146103055780637ebf744f1461030d57600080fd5b806344671b94146102ab57806351010e49146102b35780635d62c860146102bb57806366d9a9a0146102f057600080fd5b80631ed7831c116102145780631ed7831c146102685780632ade3880146102865780633e5e3c231461029b5780633f7286f4146102a357600080fd5b806304b974f9146102465780630a9254e4146102505780631226c655146102585780631855c33714610260575b600080fd5b61024e610449565b005b61024e610656565b61024e610fb8565b61024e611129565b61027061129e565b60405161027d9190618684565b60405180910390f35b61028e611300565b60405161027d9190618720565b610270611442565b6102706114a2565b61024e611502565b61024e611881565b6102e27f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b981565b60405190815260200161027d565b6102f8611a5a565b60405161027d9190618886565b61024e611bdc565b61024e611f3f565b61031d6120b4565b60405161027d9190618980565b6102e27f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b610359612184565b60405161027d9190618993565b6102e2600081565b61024e61227f565b6102e27f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb81565b6103596123d1565b61024e6124cc565b61031d612770565b6103bd612840565b604051901515815260200161027d565b61024e612914565b61024e612a66565b61024e612bd7565b61024e612df8565b6102706135ed565b6102e27f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b61024e61364d565b61024e6138bb565b61024e613cb0565b601f546103bd9060ff1681565b61024e614008565b6040805160048082526024820183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f6ed7016900000000000000000000000000000000000000000000000000000000179052602854925163ca669fa760e01b81529192737109709ecfa91a80626ff3989d68f67f5b1dd12d9263ca669fa7926104f0926001600160a01b031691016001600160a01b0391909116815260200190565b600060405180830381600087803b15801561050a57600080fd5b505af115801561051e573d6000803e3d6000fd5b50506040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b1580156105a757600080fd5b505af11580156105bb573d6000803e3d6000fd5b50506020546040517f1cff79cd0000000000000000000000000000000000000000000000000000000081526001600160a01b039091169250631cff79cd915061060b906000908590600401618a2a565b6000604051808303816000875af115801561062a573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526106529190810190618b34565b5050565b602680547fffffffffffffffffffffffff00000000000000000000000000000000000000009081163017909155602780548216611234179055602880549091166156781790556040516106a89061858a565b60408082526004908201527f746573740000000000000000000000000000000000000000000000000000000060608201526080602082018190526003908201527f54544b000000000000000000000000000000000000000000000000000000000060a082015260c001604051809103906000f08015801561072d573d6000803e3d6000fd5b50602480547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03928316179055602854604051911690819061077690618597565b6001600160a01b03928316815291166020820152604001604051809103906000f0801580156107a9573d6000803e3d6000fd5b50602580547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03928316908117909155604080518082018252600e81527f4761746577617945564d2e736f6c000000000000000000000000000000000000602082015260285460265492519085166024820152604481019390935292166064820152610898919060840160408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fc0c53b8b0000000000000000000000000000000000000000000000000000000017905261447d565b601f80547fffffffffffffffffffffff0000000000000000000000000000000000000000ff166101006001600160a01b0393841681029190911791829055602080549190920483167fffffffffffffffffffffffff00000000000000000000000000000000000000009091168117909155602854602654604051929391821692911690610924906185a4565b6001600160a01b03938416815291831660208301529091166040820152606001604051809103906000f080158015610960573d6000803e3d6000fd5b50602280547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392831617905560205460255460285460265460405193851694928316939183169216906109bb906185b1565b6001600160a01b039485168152928416602084015290831660408301529091166060820152608001604051809103906000f0801580156109ff573d6000803e3d6000fd5b50602380547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392831617905560285460405163ca669fa760e01b815291166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015610a8457600080fd5b505af1158015610a98573d6000803e3d6000fd5b50506025546028546023546040517f15d57fd40000000000000000000000000000000000000000000000000000000081526001600160a01b0392831660048201529082166024820152911692506315d57fd49150604401600060405180830381600087803b158015610b0957600080fd5b505af1158015610b1d573d6000803e3d6000fd5b50505050604051610b2d906185be565b604051809103906000f080158015610b49573d6000803e3d6000fd5b50602180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039283161790556028546040517fc88a5e6d00000000000000000000000000000000000000000000000000000000815291166004820152670de0b6b3a76400006024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c88a5e6d90604401600060405180830381600087803b158015610bf557600080fd5b505af1158015610c09573d6000803e3d6000fd5b50506026546040517f06447d560000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506306447d569150602401600060405180830381600087803b158015610c7f57600080fd5b505af1158015610c93573d6000803e3d6000fd5b50506020546022546040517fae7a3a6f0000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201529116925063ae7a3a6f9150602401600060405180830381600087803b158015610cf957600080fd5b505af1158015610d0d573d6000803e3d6000fd5b50506020546023546040517f10188aef0000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152911692506310188aef9150602401600060405180830381600087803b158015610d7357600080fd5b505af1158015610d87573d6000803e3d6000fd5b505050507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b03166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610de957600080fd5b505af1158015610dfd573d6000803e3d6000fd5b5050602480546026546040517f40c10f190000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620f4240938101939093521692506340c10f199150604401600060405180830381600087803b158015610e6e57600080fd5b505af1158015610e82573d6000803e3d6000fd5b5050602480546022546040517fa9059cbb0000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201526207a1209381019390935216925063a9059cbb91506044016020604051808303816000875af1158015610ef8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f1c9190618b69565b506028546040517fc88a5e6d0000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152670de0b6b3a76400006024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c88a5e6d906044015b600060405180830381600087803b158015610f9e57600080fd5b505af1158015610fb2573d6000803e3d6000fd5b50505050565b6026546040517f06447d560000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906306447d5690602401600060405180830381600087803b15801561102a57600080fd5b505af115801561103e573d6000803e3d6000fd5b50506040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b1580156110c757600080fd5b505af11580156110db573d6000803e3d6000fd5b50506020546040517fae7a3a6f000000000000000000000000000000000000000000000000000000008152600060048201526001600160a01b03909116925063ae7a3a6f9150602401610f84565b6026546040517f06447d560000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906306447d5690602401600060405180830381600087803b15801561119b57600080fd5b505af11580156111af573d6000803e3d6000fd5b50506040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fb337f378000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e091506024015b600060405180830381600087803b15801561123957600080fd5b505af115801561124d573d6000803e3d6000fd5b50506020546022546040517fae7a3a6f0000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201529116925063ae7a3a6f9150602401610f84565b606060168054806020026020016040519081016040528092919081815260200182805480156112f657602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116112d8575b5050505050905090565b6060601e805480602002602001604051908101604052809291908181526020016000905b8282101561143957600084815260208082206040805180820182526002870290920180546001600160a01b03168352600181018054835181870281018701909452808452939591948681019491929084015b8282101561142257838290600052602060002001805461139590618b8b565b80601f01602080910402602001604051908101604052809291908181526020018280546113c190618b8b565b801561140e5780601f106113e35761010080835404028352916020019161140e565b820191906000526020600020905b8154815290600101906020018083116113f157829003601f168201915b505050505081526020019060010190611376565b505050508152505081526020019060010190611324565b50505050905090565b606060188054806020026020016040519081016040528092919081815260200182805480156112f6576020028201919060005260206000209081546001600160a01b031681526001909101906020018083116112d8575050505050905090565b606060178054806020026020016040519081016040528092919081815260200182805480156112f6576020028201919060005260206000209081546001600160a01b031681526001909101906020018083116112d8575050505050905090565b6040805160048082526024820183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f6ed701690000000000000000000000000000000000000000000000000000000017905260215492517ff30c7ba30000000000000000000000000000000000000000000000000000000081529192737109709ecfa91a80626ff3989d68f67f5b1dd12d9263f30c7ba3926115b8926001600160a01b031691600091879101618bd8565b600060405180830381600087803b1580156115d257600080fd5b505af11580156115e6573d6000803e3d6000fd5b50506021546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b15801561167857600080fd5b505af115801561168c573d6000803e3d6000fd5b5050602080546040516001600160a01b0390911681527fbcaadb46b82a48af60b608f58959ae6b8310d1b0a0d094c2e9ec3208ed39f2a0935001905060405180910390a16020546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b15801561175e57600080fd5b505af1158015611772573d6000803e3d6000fd5b50506021546040516001600160a01b0390911692507fcaf938de11c367272220bfd1d2baa99ca46665e7bc4d85f00adb51b90fe1fa9f91506117b8906000908590618c00565b60405180910390a260285460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561181957600080fd5b505af115801561182d573d6000803e3d6000fd5b50506020546021546040517f1cff79cd0000000000000000000000000000000000000000000000000000000081526001600160a01b039283169450631cff79cd935061060b92909116908590600401618a2a565b6040517f68656c6c6f0000000000000000000000000000000000000000000000000000006020820152670de0b6b3a76400009060009060250160408051808303601f190181529082905260285463ca669fa760e01b83526001600160a01b031660048301529150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561192157600080fd5b505af1158015611935573d6000803e3d6000fd5b50506040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b1580156119be57600080fd5b505af11580156119d2573d6000803e3d6000fd5b50506020546040517f35c018db0000000000000000000000000000000000000000000000000000000081526001600160a01b0390911692506335c018db91508490611a24906000908690600401618a2a565b6000604051808303818588803b158015611a3d57600080fd5b505af1158015611a51573d6000803e3d6000fd5b50505050505050565b6060601b805480602002602001604051908101604052809291908181526020016000905b828210156114395783829060005260206000209060020201604051806040016040529081600082018054611ab190618b8b565b80601f0160208091040260200160405190810160405280929190818152602001828054611add90618b8b565b8015611b2a5780601f10611aff57610100808354040283529160200191611b2a565b820191906000526020600020905b815481529060010190602001808311611b0d57829003601f168201915b5050505050815260200160018201805480602002602001604051908101604052809291908181526020018280548015611bc457602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019060040190602082600301049283019260010382029150808411611b715790505b50505050508152505081526020019060010190611a7e565b604080516001808252818301909252600091816020015b6060815260200190600190039081611bf35790505090506040518060400160405280600f81526020017f48656c6c6f2c20466f756e64727921000000000000000000000000000000000081525081600081518110611c5357611c53618c19565b6020908102919091010152604080516001808252818301909252600091816020016020820280368337019050509050602a81600081518110611c9757611c97618c19565b6020908102919091010152604051600190600090611cbd90859085908590602401618c7a565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167ff05b6abf00000000000000000000000000000000000000000000000000000000179052602654905163ca669fa760e01b81526001600160a01b039091166004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015611d7057600080fd5b505af1158015611d84573d6000803e3d6000fd5b5050602654604080516001600160a01b0390921660248301527f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb60448084019190915281518084039091018152606490920181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb39250611e6f9190600401618cb2565b600060405180830381600087803b158015611e8957600080fd5b505af1158015611e9d573d6000803e3d6000fd5b50506020546021546040517f1cff79cd0000000000000000000000000000000000000000000000000000000081526001600160a01b039283169450631cff79cd9350611ef192909116908590600401618a2a565b6000604051808303816000875af1158015611f10573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611f389190810190618b34565b5050505050565b6026546040517f06447d560000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906306447d5690602401600060405180830381600087803b158015611fb157600080fd5b505af1158015611fc5573d6000803e3d6000fd5b50506040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527f0c8dc016000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e091506024015b600060405180830381600087803b15801561204f57600080fd5b505af1158015612063573d6000803e3d6000fd5b50506020546023546040517f10188aef0000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152911692506310188aef9150602401610f84565b6060601a805480602002602001604051908101604052809291908181526020016000905b828210156114395783829060005260206000200180546120f790618b8b565b80601f016020809104026020016040519081016040528092919081815260200182805461212390618b8b565b80156121705780601f1061214557610100808354040283529160200191612170565b820191906000526020600020905b81548152906001019060200180831161215357829003601f168201915b5050505050815260200190600101906120d8565b6060601d805480602002602001604051908101604052809291908181526020016000905b828210156114395760008481526020908190206040805180820182526002860290920180546001600160a01b0316835260018101805483518187028101870190945280845293949193858301939283018282801561226757602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190600401906020826003010492830192600103820291508084116122145790505b505050505081525050815260200190600101906121a8565b6028546040517f06447d560000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906306447d5690602401600060405180830381600087803b1580156122f157600080fd5b505af1158015612305573d6000803e3d6000fd5b5050602854604080516001600160a01b039092166024830152600060448084019190915281518084039091018152606490920181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb3925061121f9190600401618cb2565b6060601c805480602002602001604051908101604052809291908181526020016000905b828210156114395760008481526020908190206040805180820182526002860290920180546001600160a01b031683526001810180548351818702810187019094528084529394919385830193928301828280156124b457602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190600401906020826003010492830192600103820291508084116124615790505b505050505081525050815260200190600101906123f5565b60248054602754604051620186a09381018490526001600160a01b0392831660448201529116606482015260009060840160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f357fc5a200000000000000000000000000000000000000000000000000000000179052602654905163ca669fa760e01b81526001600160a01b039091166004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156125b057600080fd5b505af11580156125c4573d6000803e3d6000fd5b5050602654604080516001600160a01b0390921660248301527f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b960448084019190915281518084039091018152606490920181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb392506126af9190600401618cb2565b600060405180830381600087803b1580156126c957600080fd5b505af11580156126dd573d6000803e3d6000fd5b50506020546024546027546040517fb8969bd40000000000000000000000000000000000000000000000000000000081526001600160a01b03938416955063b8969bd4945061273a93928316929091169087908790600401618cc5565b600060405180830381600087803b15801561275457600080fd5b505af1158015612768573d6000803e3d6000fd5b505050505050565b60606019805480602002602001604051908101604052809291908181526020016000905b828210156114395783829060005260206000200180546127b390618b8b565b80601f01602080910402602001604051908101604052809291908181526020018280546127df90618b8b565b801561282c5780601f106128015761010080835404028352916020019161282c565b820191906000526020600020905b81548152906001019060200180831161280f57829003601f168201915b505050505081526020019060010190612794565b60085460009060ff1615612858575060085460ff1690565b6040517f667f9d70000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d600482018190527f6661696c65640000000000000000000000000000000000000000000000000000602483015260009163667f9d7090604401602060405180830381865afa1580156128e9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061290d9190618cfc565b1415905090565b6028546040517f06447d560000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906306447d5690602401600060405180830381600087803b15801561298657600080fd5b505af115801561299a573d6000803e3d6000fd5b5050602854604080516001600160a01b039092166024830152600060448084019190915281518084039091018152606490920181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb392506120359190600401618cb2565b6026546040517f06447d560000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906306447d5690602401600060405180830381600087803b158015612ad857600080fd5b505af1158015612aec573d6000803e3d6000fd5b50506040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b158015612b7557600080fd5b505af1158015612b89573d6000803e3d6000fd5b50506020546040517f10188aef000000000000000000000000000000000000000000000000000000008152600060048201526001600160a01b0390911692506310188aef9150602401610f84565b6040517f68656c6c6f0000000000000000000000000000000000000000000000000000006020820152670de0b6b3a76400009060009060250160408051808303601f190181529082905260265463ca669fa760e01b83526001600160a01b031660048301529150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015612c7757600080fd5b505af1158015612c8b573d6000803e3d6000fd5b5050602654604080516001600160a01b0390921660248301527f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb60448084019190915281518084039091018152606490920181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb39250612d769190600401618cb2565b600060405180830381600087803b158015612d9057600080fd5b505af1158015612da4573d6000803e3d6000fd5b50506020546021546040517f35c018db0000000000000000000000000000000000000000000000000000000081526001600160a01b0392831694506335c018db93508692611a249216908690600401618a2a565b60285460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015612e5157600080fd5b505af1158015612e65573d6000803e3d6000fd5b5050602854604080516001600160a01b0390921660248301527f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a60448084019190915281518084039091018152606490920181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb39250612f509190600401618cb2565b600060405180830381600087803b158015612f6a57600080fd5b505af1158015612f7e573d6000803e3d6000fd5b50505050602060009054906101000a90046001600160a01b03166001600160a01b0316638456cb596040518163ffffffff1660e01b8152600401600060405180830381600087803b158015612fd257600080fd5b505af1158015612fe6573d6000803e3d6000fd5b505060285460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b15801561304357600080fd5b505af1158015613057573d6000803e3d6000fd5b5050602854604080516001600160a01b0390921660248301527f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a60448084019190915281518084039091018152606490920181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb392506131429190600401618cb2565b600060405180830381600087803b15801561315c57600080fd5b505af1158015613170573d6000803e3d6000fd5b50505050602060009054906101000a90046001600160a01b03166001600160a01b0316633f4ba83a6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156131c457600080fd5b505af11580156131d8573d6000803e3d6000fd5b505060265460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b15801561323557600080fd5b505af1158015613249573d6000803e3d6000fd5b50505050602060009054906101000a90046001600160a01b03166001600160a01b0316638456cb596040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561329d57600080fd5b505af11580156132b1573d6000803e3d6000fd5b5050604080516004808252602480830184526020830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f6ed701690000000000000000000000000000000000000000000000000000000017905292517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fd93c06650000000000000000000000000000000000000000000000000000000091810191909152909350737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09101600060405180830381600087803b15801561339357600080fd5b505af11580156133a7573d6000803e3d6000fd5b505060285460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b15801561340457600080fd5b505af1158015613418573d6000803e3d6000fd5b50506020546021546040517f1cff79cd0000000000000000000000000000000000000000000000000000000081526001600160a01b039283169450631cff79cd935061346c92909116908590600401618a2a565b6000604051808303816000875af115801561348b573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526134b39190810190618b34565b5060265460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561350d57600080fd5b505af1158015613521573d6000803e3d6000fd5b50505050602060009054906101000a90046001600160a01b03166001600160a01b0316633f4ba83a6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561357557600080fd5b505af1158015613589573d6000803e3d6000fd5b50506021546040517ff30c7ba3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f30c7ba392506115b8916001600160a01b0316906000908690600401618bd8565b606060158054806020026020016040519081016040528092919081815260200182805480156112f6576020028201919060005260206000209081546001600160a01b031681526001909101906020018083116112d8575050505050905090565b60248054602754604051620186a09381018490526001600160a01b0392831660448201529116606482015260009060840160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f357fc5a200000000000000000000000000000000000000000000000000000000179052602654905163ca669fa760e01b81526001600160a01b039091166004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561373157600080fd5b505af1158015613745573d6000803e3d6000fd5b5050602654604080516001600160a01b0390921660248301527f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b960448084019190915281518084039091018152606490920181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb392506138309190600401618cb2565b600060405180830381600087803b15801561384a57600080fd5b505af115801561385e573d6000803e3d6000fd5b50506020546024546027546040517f5131ab590000000000000000000000000000000000000000000000000000000081526001600160a01b039384169550635131ab59945061273a93928316929091169087908790600401618cc5565b604080516001808252818301909252600091816020015b60608152602001906001900390816138d25790505090506040518060400160405280600f81526020017f48656c6c6f2c20466f756e6472792100000000000000000000000000000000008152508160008151811061393257613932618c19565b6020908102919091010152604080516001808252818301909252600091816020016020820280368337019050509050602a8160008151811061397657613976618c19565b602090810291909101015260405160019060009061399c90859085908590602401618c7a565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167ff05b6abf0000000000000000000000000000000000000000000000000000000017905260215490517ff30c7ba3000000000000000000000000000000000000000000000000000000008152919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f30c7ba391613a59916001600160a01b0391909116906000908690600401618bd8565b600060405180830381600087803b158015613a7357600080fd5b505af1158015613a87573d6000803e3d6000fd5b50506021546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b158015613b1957600080fd5b505af1158015613b2d573d6000803e3d6000fd5b50506020546040517f74a53cd528a921fca7dbdee62f86819051d3cc98f214951f4238e8843f20b1469350613b7492506001600160a01b0390911690879087908790618d15565b60405180910390a16020546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b158015613c0a57600080fd5b505af1158015613c1e573d6000803e3d6000fd5b50506021546040516001600160a01b0390911692507fcaf938de11c367272220bfd1d2baa99ca46665e7bc4d85f00adb51b90fe1fa9f9150613c64906000908590618c00565b60405180910390a260285460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401611e6f565b604080517f68656c6c6f0000000000000000000000000000000000000000000000000000006020820152815160058183030181526025909101909152602154670de0b6b3a764000091906001600160a01b031631613d0f81600061449c565b6021546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b158015613d9d57600080fd5b505af1158015613db1573d6000803e3d6000fd5b50506020546040517f0d3f65f00e631663aa85c96330b5c7a83bb29af3630c0063776f985edc3037aa9350613df492506001600160a01b03909116908590618a2a565b60405180910390a16020546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b158015613e8a57600080fd5b505af1158015613e9e573d6000803e3d6000fd5b50506021546040516001600160a01b0390911692507fd5d7616b1678354a0dea9d7e57e6a090bff5babe9f8d6381fdbad16e89ba311c9150613eeb90670de0b6b3a7640000908690618c00565b60405180910390a260285460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015613f4c57600080fd5b505af1158015613f60573d6000803e3d6000fd5b50506020546021546040517f35c018db0000000000000000000000000000000000000000000000000000000081526001600160a01b0392831694506335c018db93508792613fb49216908790600401618a2a565b6000604051808303818588803b158015613fcd57600080fd5b505af1158015613fe1573d6000803e3d6000fd5b50506021546001600160a01b0316319250610fb29150829050670de0b6b3a764000061449c565b60408051808201909152600f81527f48656c6c6f2c20466f756e6472792100000000000000000000000000000000006020820152602154602a90600190670de0b6b3a764000090614065906000906001600160a01b03163161449c565b600084848460405160240161407c93929190618d5d565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe04d4f970000000000000000000000000000000000000000000000000000000017905260215490517ff30c7ba3000000000000000000000000000000000000000000000000000000008152919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f30c7ba391614140916001600160a01b039190911690670de0b6b3a7640000908690600401618bd8565b600060405180830381600087803b15801561415a57600080fd5b505af115801561416e573d6000803e3d6000fd5b50506021546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b15801561420057600080fd5b505af1158015614214573d6000803e3d6000fd5b50506020546040517f1f1ff1f5fb41346850b2f5c04e6c767e2f1c8a525c5c0c5cdb60cdf3ca5f62fa935061425d92506001600160a01b03909116908590899089908990618d87565b60405180910390a16020546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b1580156142f357600080fd5b505af1158015614307573d6000803e3d6000fd5b50506021546040516001600160a01b0390911692507fcaf938de11c367272220bfd1d2baa99ca46665e7bc4d85f00adb51b90fe1fa9f915061435490670de0b6b3a7640000908590618c00565b60405180910390a260285460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156143b557600080fd5b505af11580156143c9573d6000803e3d6000fd5b50506020546021546040517f1cff79cd0000000000000000000000000000000000000000000000000000000081526001600160a01b039283169450631cff79cd9350869261441d9216908690600401618a2a565b60006040518083038185885af115801561443b573d6000803e3d6000fd5b50505050506040513d6000823e601f3d908101601f191682016040526144649190810190618b34565b50602154611f389083906001600160a01b03163161449c565b60006144876185cb565b61449284848361451b565b9150505b92915050565b6040517f98296c540000000000000000000000000000000000000000000000000000000081526004810183905260248101829052737109709ecfa91a80626ff3989d68f67f5b1dd12d906398296c549060440160006040518083038186803b15801561450757600080fd5b505afa158015612768573d6000803e3d6000fd5b6000806145288584614596565b905061458b6040518060400160405280601d81526020017f4552433139363750726f78792e736f6c3a4552433139363750726f78790000008152508286604051602001614576929190618a2a565b604051602081830303815290604052856145a2565b9150505b9392505050565b600061458f83836145d0565b60c081015151600090156145c6576145bf84848460c001516145eb565b905061458f565b6145bf8484614791565b60006145dc838361487c565b61458f838360200151846145a2565b6000806145f6614888565b90506000614604868361495b565b9050600061461b8260600151836020015185614e01565b9050600061462b83838989615013565b9050600061463882615e90565b602081015181519192509060030b156146ab57898260400151604051602001614662929190618dc8565b60408051601f19818403018152908290527f08c379a00000000000000000000000000000000000000000000000000000000082526146a291600401618cb2565b60405180910390fd5b60006146ee6040518060400160405280601581526020017f4465706c6f79656420746f20616464726573733a20000000000000000000000081525083600161605f565b6040517fc6ce059d000000000000000000000000000000000000000000000000000000008152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c6ce059d90614741908490600401618cb2565b602060405180830381865afa15801561475e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906147829190618e49565b9b9a5050505050505050505050565b6040517f8d1cc9250000000000000000000000000000000000000000000000000000000081526000908190737109709ecfa91a80626ff3989d68f67f5b1dd12d90638d1cc925906147e6908790600401618cb2565b600060405180830381865afa158015614803573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261482b9190810190618b34565b905060006148598285604051602001614845929190618e72565b60405160208183030381529060405261625f565b90506001600160a01b038116614492578484604051602001614662929190618ea1565b61065282826000616272565b604080518082018252600381527f6f75740000000000000000000000000000000000000000000000000000000000602082015290517fd145736c000000000000000000000000000000000000000000000000000000008152606091737109709ecfa91a80626ff3989d68f67f5b1dd12d91829063d145736c9061490f908490600401618f4c565b600060405180830381865afa15801561492c573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526149549190810190618f93565b9250505090565b61498d6040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b6000737109709ecfa91a80626ff3989d68f67f5b1dd12d90506149d86040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b6149e185616375565b602082015260006149f18661675a565b90506000836001600160a01b031663d930a0e66040518163ffffffff1660e01b8152600401600060405180830381865afa158015614a33573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052614a5b9190810190618f93565b86838560200151604051602001614a759493929190618fdc565b60408051601f19818403018152908290527f60f9bb1100000000000000000000000000000000000000000000000000000000825291506000906001600160a01b038616906360f9bb1190614acd908590600401618cb2565b600060405180830381865afa158015614aea573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052614b129190810190618f93565b6040517fdb4235f60000000000000000000000000000000000000000000000000000000081529091506001600160a01b0386169063db4235f690614b5a9084906004016190e0565b602060405180830381865afa158015614b77573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614b9b9190618b69565b614bb057816040516020016146629190619132565b6040517f49c4fac80000000000000000000000000000000000000000000000000000000081526001600160a01b038616906349c4fac890614bf59084906004016191c4565b600060405180830381865afa158015614c12573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052614c3a9190810190618f93565b84526040517fdb4235f60000000000000000000000000000000000000000000000000000000081526001600160a01b0386169063db4235f690614c81908490600401619216565b602060405180830381865afa158015614c9e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614cc29190618b69565b15614d57576040517f49c4fac80000000000000000000000000000000000000000000000000000000081526001600160a01b038616906349c4fac890614d0c908490600401619216565b600060405180830381865afa158015614d29573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052614d519190810190618f93565b60408501525b846001600160a01b03166349c4fac8828660000151604051602001614d7c9190619268565b6040516020818303038152906040526040518363ffffffff1660e01b8152600401614da89291906192d4565b600060405180830381865afa158015614dc5573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052614ded9190810190618f93565b606085015250608083015250949350505050565b60408051600480825260a0820190925260609160009190816020015b6060815260200190600190039081614e1d5790505090506040518060400160405280600481526020017f677265700000000000000000000000000000000000000000000000000000000081525081600081518110614e7d57614e7d618c19565b60200260200101819052506040518060400160405280600381526020017f2d726c000000000000000000000000000000000000000000000000000000000081525081600181518110614ed157614ed1618c19565b602002602001018190525084604051602001614eed91906192f9565b60405160208183030381529060405281600281518110614f0f57614f0f618c19565b602002602001018190525082604051602001614f2b9190619365565b60405160208183030381529060405281600381518110614f4d57614f4d618c19565b60200260200101819052506000614f6382615e90565b602080820151604080518082018252600581527f2e6a736f6e0000000000000000000000000000000000000000000000000000008185019081528251808401845260008082529086015282518084019093529051825292810192909252919250614ff490604080518082018252600080825260209182015281518083019092528451825280850190820152906169dd565b615009578560405160200161466291906193a6565b9695505050505050565b60a0810151604080518082018252600080825260209182015281518083019092528251808352928101910152606090737109709ecfa91a80626ff3989d68f67f5b1dd12d9015615063565b511590565b6151d75782602001511561511f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605860248201527f54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f742060448201527f62652075736564207768656e207468652060736b6970566572696679536f757260648201527f6365436f646560206f7074696f6e206973206074727565600000000000000000608482015260a4016146a2565b8260c00151156151d7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605360248201527f54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f742060448201527f62652075736564207768656e207468652060736b69704c6963656e736554797060648201527f6560206f7074696f6e2069732060747275656000000000000000000000000000608482015260a4016146a2565b6040805160ff8082526120008201909252600091816020015b60608152602001906001900390816151f057905050905060006040518060400160405280600381526020017f6e7078000000000000000000000000000000000000000000000000000000000081525082828061524b90619466565b935060ff168151811061526057615260618c19565b60200260200101819052506040518060400160405280600d81526020017f302e302e312d616c7068612e37000000000000000000000000000000000000008152506040516020016152b19190619485565b6040516020818303038152906040528282806152cc90619466565b935060ff16815181106152e1576152e1618c19565b60200260200101819052506040518060400160405280600681526020017f6465706c6f79000000000000000000000000000000000000000000000000000081525082828061532e90619466565b935060ff168151811061534357615343618c19565b60200260200101819052506040518060400160405280600e81526020017f2d2d636f6e74726163744e616d6500000000000000000000000000000000000081525082828061539090619466565b935060ff16815181106153a5576153a5618c19565b602002602001018190525087602001518282806153c190619466565b935060ff16815181106153d6576153d6618c19565b60200260200101819052506040518060400160405280600e81526020017f2d2d636f6e74726163745061746800000000000000000000000000000000000081525082828061542390619466565b935060ff168151811061543857615438618c19565b60209081029190910101528751828261545081619466565b935060ff168151811061546557615465618c19565b60200260200101819052506040518060400160405280600981526020017f2d2d636861696e496400000000000000000000000000000000000000000000008152508282806154b290619466565b935060ff16815181106154c7576154c7618c19565b60200260200101819052506154db46616a3e565b82826154e681619466565b935060ff16815181106154fb576154fb618c19565b60200260200101819052506040518060400160405280600f81526020017f2d2d6275696c64496e666f46696c65000000000000000000000000000000000081525082828061554890619466565b935060ff168151811061555d5761555d618c19565b60200260200101819052508682828061557590619466565b935060ff168151811061558a5761558a618c19565b60209081029190910101528551156156b15760408051808201909152601581527f2d2d636f6e7374727563746f7242797465636f64650000000000000000000000602082015282826155db81619466565b935060ff16815181106155f0576155f0618c19565b60209081029190910101526040517f71aad10d0000000000000000000000000000000000000000000000000000000081526001600160a01b038416906371aad10d90615640908990600401618cb2565b600060405180830381865afa15801561565d573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526156859190810190618f93565b828261569081619466565b935060ff16815181106156a5576156a5618c19565b60200260200101819052505b8460200151156157815760408051808201909152601281527f2d2d766572696679536f75726365436f64650000000000000000000000000000602082015282826156fa81619466565b935060ff168151811061570f5761570f618c19565b60200260200101819052506040518060400160405280600581526020017f66616c736500000000000000000000000000000000000000000000000000000081525082828061575c90619466565b935060ff168151811061577157615771618c19565b6020026020010181905250615948565b6157b961505e8660a0015160408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b61584c5760408051808201909152600d81527f2d2d6c6963656e73655479706500000000000000000000000000000000000000602082015282826157fc81619466565b935060ff168151811061581157615811618c19565b60200260200101819052508460a0015160405160200161583191906192f9565b60405160208183030381529060405282828061575c90619466565b8460c0015115801561588f57506040808901518151808301835260008082526020918201528251808401909352815183529081019082015261588d90511590565b155b156159485760408051808201909152600d81527f2d2d6c6963656e73655479706500000000000000000000000000000000000000602082015282826158d381619466565b935060ff16815181106158e8576158e8618c19565b60200260200101819052506158fc88616ade565b60405160200161590c91906192f9565b60405160208183030381529060405282828061592790619466565b935060ff168151811061593c5761593c618c19565b60200260200101819052505b6040808601518151808301835260008082526020918201528251808401909352815183529081019082015261597c90511590565b615a115760408051808201909152600b81527f2d2d72656c617965724964000000000000000000000000000000000000000000602082015282826159bf81619466565b935060ff16815181106159d4576159d4618c19565b602002602001018190525084604001518282806159f090619466565b935060ff1681518110615a0557615a05618c19565b60200260200101819052505b606085015115615b325760408051808201909152600681527f2d2d73616c74000000000000000000000000000000000000000000000000000060208201528282615a5a81619466565b935060ff1681518110615a6f57615a6f618c19565b602090810291909101015260608501516040517fb11a19e800000000000000000000000000000000000000000000000000000000815260048101919091526001600160a01b0384169063b11a19e890602401600060405180830381865afa158015615ade573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052615b069190810190618f93565b8282615b1181619466565b935060ff1681518110615b2657615b26618c19565b60200260200101819052505b60e08501515115615bd95760408051808201909152600a81527f2d2d6761734c696d69740000000000000000000000000000000000000000000060208201528282615b7c81619466565b935060ff1681518110615b9157615b91618c19565b6020026020010181905250615bad8560e0015160000151616a3e565b8282615bb881619466565b935060ff1681518110615bcd57615bcd618c19565b60200260200101819052505b60e08501516020015115615c835760408051808201909152600a81527f2d2d67617350726963650000000000000000000000000000000000000000000060208201528282615c2681619466565b935060ff1681518110615c3b57615c3b618c19565b6020026020010181905250615c578560e0015160200151616a3e565b8282615c6281619466565b935060ff1681518110615c7757615c77618c19565b60200260200101819052505b60e08501516040015115615d2d5760408051808201909152600e81527f2d2d6d617846656550657247617300000000000000000000000000000000000060208201528282615cd081619466565b935060ff1681518110615ce557615ce5618c19565b6020026020010181905250615d018560e0015160400151616a3e565b8282615d0c81619466565b935060ff1681518110615d2157615d21618c19565b60200260200101819052505b60e08501516060015115615dd75760408051808201909152601681527f2d2d6d61785072696f726974794665655065724761730000000000000000000060208201528282615d7a81619466565b935060ff1681518110615d8f57615d8f618c19565b6020026020010181905250615dab8560e0015160600151616a3e565b8282615db681619466565b935060ff1681518110615dcb57615dcb618c19565b60200260200101819052505b60008160ff1667ffffffffffffffff811115615df557615df5618a4c565b604051908082528060200260200182016040528015615e2857816020015b6060815260200190600190039081615e135790505b50905060005b8260ff168160ff161015615e8157838160ff1681518110615e5157615e51618c19565b6020026020010151828260ff1681518110615e6e57615e6e618c19565b6020908102919091010152600101615e2e565b5093505050505b949350505050565b615eb76040518060600160405280600060030b815260200160608152602001606081525090565b60408051808201825260048082527f6261736800000000000000000000000000000000000000000000000000000000602083015291517fd145736c000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d92600091849163d145736c91615f3d918691016194f0565b600060405180830381865afa158015615f5a573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052615f829190810190618f93565b90506000615f9086836175cd565b90506000846001600160a01b031663f45c1ce7836040518263ffffffff1660e01b8152600401615fc09190618980565b6000604051808303816000875af1158015615fdf573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526160079190810190619537565b805190915060030b158015906160205750602081015151155b801561602f5750604081015151155b15615009578160008151811061604757616047618c19565b602002602001015160405160200161466291906195ed565b606060006160948560408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6040805180820182526000808252602091820152815180830190925286518252808701908201529091506160cb9082905b90617722565b15616228576000616148826161428461613c61610e8a60408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6040805180820182526000808252602091820152815180830190925282518252918201519181019190915290565b90617749565b906177ab565b604080518082018252600181527f0a00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201529091506161ac908290617722565b1561621657604080518082018252600181527f0a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616213905b8290617830565b90505b61621f81617856565b9250505061458f565b82156162415784846040516020016146629291906197d9565b505060408051602081019091526000815261458f565b509392505050565b6000808251602084016000f09392505050565b8160a001511561628157505050565b600061628e8484846178bf565b9050600061629b82615e90565b602081015181519192509060030b1580156163375750604080518082018252600781527f535543434553530000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616337906040805180820182526000808252602091820152815180830190925284518252808501908201526160c5565b1561634457505050505050565b604082015151156163645781604001516040516020016146629190619880565b8060405160200161466291906198de565b606060006163aa8360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600481527f2e736f6c000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015290915061640f905b82906169dd565b1561647e57604080518082018252600481527f2e736f6c000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261458f90616479908390617e5a565b617856565b604080518082018252600181527f3a00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526164e0905b8290617ee4565b6001036165ad57604080518082018252600181527f3a00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526165469061620c565b50604080518082018252600181527f3a000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261458f90616479905b8390617830565b604080518082018252600581527f2e6a736f6e0000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261660c90616408565b1561674357604080518082018252600181527f2f00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820181905284518086019095529251845283015290616674908390617f7e565b9050600081600183516166879190619949565b8151811061669757616697618c19565b6020026020010151905061673a61647961670d6040518060400160405280600581526020017f2e6a736f6e00000000000000000000000000000000000000000000000000000081525060408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b60408051808201825260008082526020918201528151808301909252855182528086019082015290617e5a565b95945050505050565b82604051602001614662919061995c565b50919050565b6060600061678f8360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600481527f2e736f6c00000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201529091506167f190616408565b156167ff5761458f81617856565b604080518082018252600181527f3a000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261685e906164d9565b6001036168c857604080518082018252600181527f3a000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261458f90616479906165a6565b604080518082018252600581527f2e6a736f6e0000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261692790616408565b1561674357604080518082018252600181527f2f0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082018190528451808601909552925184528301529061698f908390617f7e565b90506001815111156169cb5780600282516169aa9190619949565b815181106169ba576169ba618c19565b602002602001015192505050919050565b5082604051602001614662919061995c565b8051825160009111156169f257506000614496565b81518351602085015160009291616a0891619a3a565b616a129190619949565b905082602001518103616a29576001915050614496565b82516020840151819020912014905092915050565b60606000616a4b83618023565b600101905060008167ffffffffffffffff811115616a6b57616a6b618a4c565b6040519080825280601f01601f191660200182016040528015616a95576020820181803683370190505b5090508181016020015b600019017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a8504945084616a9f57509392505050565b604081810151815180830183526000808252602091820181905283518085018552835181529282018383015283518085018552600a81527f554e4c4943454e5345440000000000000000000000000000000000000000000081840190815285518087018752838152840192909252845180860190955251845290830152606091616b6a905b8290618105565b15616baa57505060408051808201909152600481527f4e6f6e65000000000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600981527f556e6c6963656e7365000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616c0990616b63565b15616c4957505060408051808201909152600981527f556e6c6963656e736500000000000000000000000000000000000000000000006020820152919050565b604080518082018252600381527f4d4954000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616ca890616b63565b15616ce857505060408051808201909152600381527f4d495400000000000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f47504c2d322e302d6f6e6c79000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616d4790616b63565b80616dac5750604080518082018252601081527f47504c2d322e302d6f722d6c617465720000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616dac90616b63565b15616dec57505060408051808201909152600981527f474e552047504c763200000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f47504c2d332e302d6f6e6c79000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616e4b90616b63565b80616eb05750604080518082018252601081527f47504c2d332e302d6f722d6c617465720000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616eb090616b63565b15616ef057505060408051808201909152600981527f474e552047504c763300000000000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4c47504c2d322e312d6f6e6c790000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616f4f90616b63565b80616fb45750604080518082018252601181527f4c47504c2d322e312d6f722d6c6174657200000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616fb490616b63565b15616ff457505060408051808201909152600c81527f474e55204c47504c76322e3100000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4c47504c2d332e302d6f6e6c79000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261705390616b63565b806170b85750604080518082018252601181527f4c47504c2d332e302d6f722d6c61746572000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526170b890616b63565b156170f857505060408051808201909152600a81527f474e55204c47504c7633000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f4253442d322d436c6175736500000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261715790616b63565b1561719757505060408051808201909152600c81527f4253442d322d436c6175736500000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f4253442d332d436c617573650000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526171f690616b63565b1561723657505060408051808201909152600c81527f4253442d332d436c6175736500000000000000000000000000000000000000006020820152919050565b604080518082018252600781527f4d504c2d322e30000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261729590616b63565b156172d557505060408051808201909152600781527f4d504c2d322e30000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600781527f4f534c2d332e30000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261733490616b63565b1561737457505060408051808201909152600781527f4f534c2d332e30000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600a81527f4170616368652d322e3000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526173d390616b63565b1561741357505060408051808201909152600a81527f4170616368652d322e30000000000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4147504c2d332e302d6f6e6c79000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261747290616b63565b806174d75750604080518082018252601181527f4147504c2d332e302d6f722d6c61746572000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526174d790616b63565b1561751757505060408051808201909152600a81527f474e55204147504c7633000000000000000000000000000000000000000000006020820152919050565b604080518082018252600881527f4255534c2d312e310000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261757690616b63565b156175b657505060408051808201909152600781527f42534c20312e31000000000000000000000000000000000000000000000000006020820152919050565b604080840151845191516146629290602001619a4d565b60608060005b845181101561765857818582815181106175ef576175ef618c19565b6020026020010151604051602001617608929190618e72565b6040516020818303038152906040529150600185516176279190619949565b8114617650578160405160200161763e9190619bb6565b60405160208183030381529060405291505b6001016175d3565b5060408051600380825260808201909252600091816020015b6060815260200190600190039081617671579050509050838160008151811061769c5761769c618c19565b60200260200101819052506040518060400160405280600281526020017f2d63000000000000000000000000000000000000000000000000000000000000815250816001815181106176f0576176f0618c19565b6020026020010181905250818160028151811061770f5761770f618c19565b6020908102919091010152949350505050565b60208083015183518351928401516000936177409291849190618119565b14159392505050565b6040805180820190915260008082526020820152600061777b846000015185602001518560000151866020015161822a565b905083602001518161778d9190619949565b8451859061779c908390619949565b90525060208401525090919050565b60408051808201909152600080825260208201528151835110156177d0575081614496565b60208083015190840151600191146177f75750815160208481015190840151829020919020145b80156178285782518451859061780e908390619949565b9052508251602085018051617824908390619a3a565b9052505b509192915050565b604080518082019091526000808252602082015261784f83838361834a565b5092915050565b60606000826000015167ffffffffffffffff81111561787757617877618a4c565b6040519080825280601f01601f1916602001820160405280156178a1576020820181803683370190505b509050600060208201905061784f81856020015186600001516183f5565b606060006178cb614888565b6040805160ff808252612000820190925291925060009190816020015b60608152602001906001900390816178e857905050905060006040518060400160405280600381526020017f6e7078000000000000000000000000000000000000000000000000000000000081525082828061794390619466565b935060ff168151811061795857617958618c19565b60200260200101819052506040518060400160405280600781526020017f5e312e33322e33000000000000000000000000000000000000000000000000008152506040516020016179a99190619bf7565b6040516020818303038152906040528282806179c490619466565b935060ff16815181106179d9576179d9618c19565b60200260200101819052506040518060400160405280600881526020017f76616c6964617465000000000000000000000000000000000000000000000000815250828280617a2690619466565b935060ff1681518110617a3b57617a3b618c19565b602002602001018190525082604051602001617a579190619365565b604051602081830303815290604052828280617a7290619466565b935060ff1681518110617a8757617a87618c19565b60200260200101819052506040518060400160405280600a81526020017f2d2d636f6e747261637400000000000000000000000000000000000000000000815250828280617ad490619466565b935060ff1681518110617ae957617ae9618c19565b6020026020010181905250617afe878461846f565b8282617b0981619466565b935060ff1681518110617b1e57617b1e618c19565b602090810291909101015285515115617bca5760408051808201909152600b81527f2d2d7265666572656e636500000000000000000000000000000000000000000060208201528282617b7081619466565b935060ff1681518110617b8557617b85618c19565b6020026020010181905250617b9e86600001518461846f565b8282617ba981619466565b935060ff1681518110617bbe57617bbe618c19565b60200260200101819052505b856080015115617c385760408051808201909152601881527f2d2d756e73616665536b697053746f72616765436865636b000000000000000060208201528282617c1381619466565b935060ff1681518110617c2857617c28618c19565b6020026020010181905250617c9e565b8415617c9e5760408051808201909152601281527f2d2d726571756972655265666572656e6365000000000000000000000000000060208201528282617c7d81619466565b935060ff1681518110617c9257617c92618c19565b60200260200101819052505b60408601515115617d3a5760408051808201909152600d81527f2d2d756e73616665416c6c6f770000000000000000000000000000000000000060208201528282617ce881619466565b935060ff1681518110617cfd57617cfd618c19565b60200260200101819052508560400151828280617d1990619466565b935060ff1681518110617d2e57617d2e618c19565b60200260200101819052505b856060015115617da45760408051808201909152601481527f2d2d756e73616665416c6c6f7752656e616d657300000000000000000000000060208201528282617d8381619466565b935060ff1681518110617d9857617d98618c19565b60200260200101819052505b60008160ff1667ffffffffffffffff811115617dc257617dc2618a4c565b604051908082528060200260200182016040528015617df557816020015b6060815260200190600190039081617de05790505b50905060005b8260ff168160ff161015617e4e57838160ff1681518110617e1e57617e1e618c19565b6020026020010151828260ff1681518110617e3b57617e3b618c19565b6020908102919091010152600101617dfb565b50979650505050505050565b6040805180820190915260008082526020820152815183511015617e7f575081614496565b81518351602085015160009291617e9591619a3a565b617e9f9190619949565b60208401519091506001908214617ec0575082516020840151819020908220145b8015617edb57835185518690617ed7908390619949565b9052505b50929392505050565b6000808260000151617f08856000015186602001518660000151876020015161822a565b617f129190619a3a565b90505b83516020850151617f269190619a3a565b811161784f5781617f3681619c3c565b9250508260000151617f6d856020015183617f519190619949565b8651617f5d9190619949565b838660000151876020015161822a565b617f779190619a3a565b9050617f15565b60606000617f8c8484617ee4565b617f97906001619a3a565b67ffffffffffffffff811115617faf57617faf618a4c565b604051908082528060200260200182016040528015617fe257816020015b6060815260200190600190039081617fcd5790505b50905060005b815181101561625757617ffe6164798686617830565b82828151811061801057618010618c19565b6020908102919091010152600101617fe8565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000831061806c577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310618098576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc1000083106180b657662386f26fc10000830492506010015b6305f5e10083106180ce576305f5e100830492506008015b61271083106180e257612710830492506004015b606483106180f4576064830492506002015b600a83106144965760010192915050565b600061811183836184af565b159392505050565b60008085841161822057602084116181cc5760008415618164576001618140866020619949565b61814b906008619c56565b618156906002619d54565b6181609190619949565b1990505b83518116856181738989619a3a565b61817d9190619949565b805190935082165b8181146181b75787841161819f5787945050505050615e88565b836181a981619d60565b945050828451169050618185565b6181c18785619a3a565b945050505050615e88565b8383206181d98588619949565b6181e39087619a3a565b91505b85821061821e5784822080820361820b576182018684619a3a565b9350505050615e88565b618216600184619949565b9250506181e6565b505b5092949350505050565b6000838186851161833557602085116182e45760008515618276576001618252876020619949565b61825d906008619c56565b618268906002619d54565b6182729190619949565b1990505b845181166000876182878b8b619a3a565b6182919190619949565b855190915083165b8281146182d6578186106182be576182b18b8b619a3a565b9650505050505050615e88565b856182c881619c3c565b965050838651169050618299565b859650505050505050615e88565b508383206000905b6182f68689619949565b8211618333578583208082036183125783945050505050615e88565b61831d600185619a3a565b935050818061832b90619c3c565b9250506182ec565b505b61833f8787619a3a565b979650505050505050565b6040805180820190915260008082526020820152600061837c856000015186602001518660000151876020015161822a565b6020808701805191860191909152519091506183989082619949565b8352845160208601516183ab9190619a3a565b81036183ba57600085526183ec565b835183516183c89190619a3a565b855186906183d7908390619949565b90525083516183e69082619a3a565b60208601525b50909392505050565b6020811061842d578151835261840c602084619a3a565b9250618419602083619a3a565b9150618426602082619949565b90506183f5565b600019811561845c576001618443836020619949565b61844f90610100619d54565b6184599190619949565b90505b9151835183169219169190911790915250565b6060600061847d848461495b565b805160208083015160405193945061849793909101619d77565b60405160208183030381529060405291505092915050565b81518151600091908111156184c2575081515b6020808501519084015160005b8381101561857b578251825180821461854b57600019602087101561852a576001846184fc896020619949565b6185069190619a3a565b618511906008619c56565b61851c906002619d54565b6185269190619949565b1990505b81811683821681810391146185485797506144969650505050505050565b50505b618556602086619a3a565b9450618563602085619a3a565b935050506020816185749190619a3a565b90506184cf565b50845186516150099190619dcf565b610c9f80619df083390190565b6112a68061aa8f83390190565b6117988061bd3583390190565b61155a8061d4cd83390190565b610d5e8061ea2783390190565b6040518060e0016040528060608152602001606081526020016060815260200160001515815260200160001515815260200160001515815260200161860e618613565b905290565b6040518061010001604052806000151581526020016000151581526020016060815260200160008019168152602001606081526020016060815260200160001515815260200161860e6040518060800160405280600081526020016000815260200160008152602001600081525090565b602080825282518282018190526000918401906040840190835b818110156186c55783516001600160a01b031683526020938401939092019160010161869e565b509095945050505050565b60005b838110156186eb5781810151838201526020016186d3565b50506000910152565b6000815180845261870c8160208601602086016186d0565b601f01601f19169290920160200192915050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b8281101561881c577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452815180516001600160a01b03168652602090810151604082880181905281519088018190529101906060600582901b88018101919088019060005b81811015618802577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa08a85030183526187ec8486516186f4565b60209586019590945092909201916001016187b2565b509197505050602094850194929092019150600101618748565b50929695505050505050565b600081518084526020840193506020830160005b8281101561887c5781517fffffffff000000000000000000000000000000000000000000000000000000001686526020958601959091019060010161883c565b5093949350505050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b8281101561881c577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc087860301845281518051604087526188f260408801826186f4565b905060208201519150868103602088015261890d8183618828565b9650505060209384019391909101906001016188ae565b600082825180855260208501945060208160051b8301016020850160005b8381101561897457601f1985840301885261895e8383516186f4565b6020988901989093509190910190600101618942565b50909695505050505050565b60208152600061458f6020830184618924565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b8281101561881c577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc087860301845281516001600160a01b0381511686526020810151905060406020870152618a146040870182618828565b95505060209384019391909101906001016189bb565b6001600160a01b0383168152604060208201526000615e8860408301846186f4565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040516060810167ffffffffffffffff81118282101715618a9e57618a9e618a4c565b60405290565b60008067ffffffffffffffff841115618abf57618abf618a4c565b50604051601f19601f85018116603f0116810181811067ffffffffffffffff82111715618aee57618aee618a4c565b604052838152905080828401851015618b0657600080fd5b6162578460208301856186d0565b600082601f830112618b2557600080fd5b61458f83835160208501618aa4565b600060208284031215618b4657600080fd5b815167ffffffffffffffff811115618b5d57600080fd5b61449284828501618b14565b600060208284031215618b7b57600080fd5b8151801515811461458f57600080fd5b600181811c90821680618b9f57607f821691505b602082108103616754577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6001600160a01b038416815282602082015260606040820152600061673a60608301846186f4565b828152604060208201526000615e8860408301846186f4565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081518084526020840193506020830160005b8281101561887c578151865260209586019590910190600101618c5c565b606081526000618c8d6060830186618924565b8281036020840152618c9f8186618c48565b9150508215156040830152949350505050565b60208152600061458f60208301846186f4565b6001600160a01b03851681526001600160a01b038416602082015282604082015260806060820152600061500960808301846186f4565b600060208284031215618d0e57600080fd5b5051919050565b6001600160a01b0385168152608060208201526000618d376080830186618924565b8281036040840152618d498186618c48565b915050821515606083015295945050505050565b606081526000618d7060608301866186f4565b602083019490945250901515604090910152919050565b6001600160a01b038616815284602082015260a060408201526000618daf60a08301866186f4565b6060830194909452509015156080909101529392505050565b7f4661696c656420746f206465706c6f7920636f6e747261637420000000000000815260008351618e0081601a8501602088016186d0565b7f3a20000000000000000000000000000000000000000000000000000000000000601a918401918201528351618e3d81601c8401602088016186d0565b01601c01949350505050565b600060208284031215618e5b57600080fd5b81516001600160a01b038116811461458f57600080fd5b60008351618e848184602088016186d0565b835190830190618e988183602088016186d0565b01949350505050565b7f4661696c656420746f206465706c6f7920636f6e747261637420000000000000815260008351618ed981601a8501602088016186d0565b7f207573696e6720636f6e7374727563746f722064617461202200000000000000601a918401918201528351618f168160338401602088016186d0565b7f220000000000000000000000000000000000000000000000000000000000000060339290910191820152603401949350505050565b60408152600b60408201527f464f554e4452595f4f5554000000000000000000000000000000000000000000606082015260806020820152600061458f60808301846186f4565b600060208284031215618fa557600080fd5b815167ffffffffffffffff811115618fbc57600080fd5b8201601f81018413618fcd57600080fd5b61449284825160208401618aa4565b60008551618fee818460208a016186d0565b7f2f000000000000000000000000000000000000000000000000000000000000009083019081528551619028816001840160208a016186d0565b7f2f000000000000000000000000000000000000000000000000000000000000006001929091019182015284516190668160028401602089016186d0565b6001818301019150507f2f00000000000000000000000000000000000000000000000000000000000000600182015283516190a88160028401602088016186d0565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600292909101918201526007019695505050505050565b6040815260006190f360408301846186f4565b8281036020840152600481527f2e6173740000000000000000000000000000000000000000000000000000000060208201526040810191505092915050565b7f436f756c64206e6f742066696e642041535420696e206172746966616374200081526000825161916a81601f8501602087016186d0565b7f2e205365742060617374203d20747275656020696e20666f756e6472792e746f601f9390910192830152507f6d6c000000000000000000000000000000000000000000000000000000000000603f820152604101919050565b6040815260006191d760408301846186f4565b8281036020840152601181527f2e6173742e6162736f6c7574655061746800000000000000000000000000000060208201526040810191505092915050565b60408152600061922960408301846186f4565b8281036020840152600c81527f2e6173742e6c6963656e7365000000000000000000000000000000000000000060208201526040810191505092915050565b7f2e6d657461646174612e736f75726365732e5b270000000000000000000000008152600082516192a08160148501602087016186d0565b7f275d2e6b656363616b32353600000000000000000000000000000000000000006014939091019283015250602001919050565b6040815260006192e760408301856186f4565b828103602084015261458b81856186f4565b7f22000000000000000000000000000000000000000000000000000000000000008152600082516193318160018501602087016186d0565b7f22000000000000000000000000000000000000000000000000000000000000006001939091019283015250600201919050565b600082516193778184602087016186d0565b7f2f6275696c642d696e666f000000000000000000000000000000000000000000920191825250600b01919050565b7f436f756c64206e6f742066696e64206275696c642d696e666f2066696c65207781527f697468206d61746368696e6720736f7572636520636f6465206861736820666f60208201527f7220636f6e74726163742000000000000000000000000000000000000000000060408201526000825161942a81604b8501602087016186d0565b91909101604b0192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600060ff821660ff810361947c5761947c619437565b60010192915050565b7f406f70656e7a657070656c696e2f646566656e6465722d6465706c6f792d636c81527f69656e742d636c694000000000000000000000000000000000000000000000006020820152600082516194e38160298501602087016186d0565b9190910160290192915050565b60408152601660408201527f4f50454e5a455050454c494e5f424153485f5041544800000000000000000000606082015260806020820152600061458f60808301846186f4565b60006020828403121561954957600080fd5b815167ffffffffffffffff81111561956057600080fd5b82016060818503121561957257600080fd5b61957a618a7b565b81518060030b811461958b57600080fd5b8152602082015167ffffffffffffffff8111156195a757600080fd5b6195b386828501618b14565b602083015250604082015167ffffffffffffffff8111156195d357600080fd5b6195df86828501618b14565b604083015250949350505050565b7f4661696c656420746f2072756e206261736820636f6d6d616e6420776974682081527f220000000000000000000000000000000000000000000000000000000000000060208201526000825161964b8160218501602087016186d0565b7f222e20496620796f7520617265207573696e672057696e646f77732c2073657460219390910192830152507f20746865204f50454e5a455050454c494e5f424153485f5041544820656e766960418201527f726f6e6d656e74207661726961626c6520746f207468652066756c6c7920717560618201527f616c69666965642070617468206f66207468652062617368206578656375746160818201527f626c652e20466f72206578616d706c652c20696620796f75206172652075736960a18201527f6e672047697420666f722057696e646f77732c206164642074686520666f6c6c60c18201527f6f77696e67206c696e6520696e20746865202e656e762066696c65206f66207960e18201527f6f75722070726f6a65637420287573696e6720666f727761726420736c6173686101018201527f6573293a0a4f50454e5a455050454c494e5f424153485f504154483d22433a2f6101218201527f50726f6772616d2046696c65732f4769742f62696e2f6261736822000000000061014182015261015c01919050565b7f4661696c656420746f2066696e64206c696e652077697468207072656669782081527f27000000000000000000000000000000000000000000000000000000000000006020820152600083516198378160218501602088016186d0565b7f2720696e206f75747075743a2000000000000000000000000000000000000000602191840191820152835161987481602e8401602088016186d0565b01602e01949350505050565b7f4661696c656420746f2072756e2075706772616465207361666574792076616c81527f69646174696f6e3a2000000000000000000000000000000000000000000000006020820152600082516194e38160298501602087016186d0565b7f55706772616465207361666574792076616c69646174696f6e206661696c656481527f3a0a00000000000000000000000000000000000000000000000000000000000060208201526000825161993c8160228501602087016186d0565b9190910160220192915050565b8181038181111561449657614496619437565b7f436f6e7472616374206e616d652000000000000000000000000000000000000081526000825161999481600e8501602087016186d0565b7f206d75737420626520696e2074686520666f726d6174204d79436f6e74726163600e9390910192830152507f742e736f6c3a4d79436f6e7472616374206f72204d79436f6e74726163742e73602e8201527f6f6c206f72206f75742f4d79436f6e74726163742e736f6c2f4d79436f6e7472604e8201527f6163742e6a736f6e000000000000000000000000000000000000000000000000606e820152607601919050565b8082018082111561449657614496619437565b7f53504458206c6963656e7365206964656e746966696572200000000000000000815260008351619a858160188501602088016186d0565b7f20696e20000000000000000000000000000000000000000000000000000000006018918401918201528351619ac281601c8401602088016186d0565b7f20646f6573206e6f74206c6f6f6b206c696b65206120737570706f7274656420601c92909101918201527f6c6963656e736520666f7220626c6f636b206578706c6f726572207665726966603c8201527f69636174696f6e2e205573652074686520606c6963656e73655479706560206f605c8201527f7074696f6e20746f20737065636966792061206c6963656e736520747970652c607c8201527f206f7220736574207468652060736b69704c6963656e73655479706560206f70609c8201527f74696f6e20746f2060747275656020746f20736b69702e00000000000000000060bc82015260d301949350505050565b60008251619bc88184602087016186d0565b7f2000000000000000000000000000000000000000000000000000000000000000920191825250600101919050565b7f406f70656e7a657070656c696e2f75706772616465732d636f72654000000000815260008251619c2f81601c8501602087016186d0565b91909101601c0192915050565b60006000198203619c4f57619c4f619437565b5060010190565b808202811582820484141761449657614496619437565b6001815b6001841115619ca857808504811115619c8c57619c8c619437565b6001841615619c9a57908102905b60019390931c928002619c71565b935093915050565b600082619cbf57506001614496565b81619ccc57506000614496565b8160018114619ce25760028114619cec57619d08565b6001915050614496565b60ff841115619cfd57619cfd619437565b50506001821b614496565b5060208310610133831016604e8410600b8410161715619d2b575081810a614496565b619d386000198484619c6d565b8060001904821115619d4c57619d4c619437565b029392505050565b600061458f8383619cb0565b600081619d6f57619d6f619437565b506000190190565b60008351619d898184602088016186d0565b7f3a000000000000000000000000000000000000000000000000000000000000009083019081528351619dc38160018401602088016186d0565b01600101949350505050565b818103600083128015838313168383128216171561784f5761784f61943756fe608060405234801561001057600080fd5b50604051610c9f380380610c9f83398101604081905261002f9161010d565b8181600361003d83826101ff565b50600461004a82826101ff565b50505050506102bd565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261007b57600080fd5b81516001600160401b0381111561009457610094610054565b604051601f8201601f19908116603f011681016001600160401b03811182821017156100c2576100c2610054565b6040528181528382016020018510156100da57600080fd5b60005b828110156100f9576020818601810151838301820152016100dd565b506000918101602001919091529392505050565b6000806040838503121561012057600080fd5b82516001600160401b0381111561013657600080fd5b6101428582860161006a565b602085015190935090506001600160401b0381111561016057600080fd5b61016c8582860161006a565b9150509250929050565b600181811c9082168061018a57607f821691505b6020821081036101aa57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156101fa57806000526020600020601f840160051c810160208510156101d75750805b601f840160051c820191505b818110156101f757600081556001016101e3565b50505b505050565b81516001600160401b0381111561021857610218610054565b61022c816102268454610176565b846101b0565b6020601f82116001811461026057600083156102485750848201515b600019600385901b1c1916600184901b1784556101f7565b600084815260208120601f198516915b828110156102905787850151825560209485019460019092019101610270565b50848210156102ae5786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b6109d3806102cc6000396000f3fe608060405234801561001057600080fd5b50600436106100be5760003560e01c806340c10f191161007657806395d89b411161005b57806395d89b4114610183578063a9059cbb1461018b578063dd62ed3e1461019e57600080fd5b806340c10f191461013857806370a082311461014d57600080fd5b806318160ddd116100a757806318160ddd1461010457806323b872dd14610116578063313ce5671461012957600080fd5b806306fdde03146100c3578063095ea7b3146100e1575b600080fd5b6100cb6101e4565b6040516100d891906107bf565b60405180910390f35b6100f46100ef366004610854565b610276565b60405190151581526020016100d8565b6002545b6040519081526020016100d8565b6100f461012436600461087e565b610290565b604051601281526020016100d8565b61014b610146366004610854565b6102b4565b005b61010861015b3660046108bb565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6100cb6102c2565b6100f4610199366004610854565b6102d1565b6101086101ac3660046108dd565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6060600380546101f390610910565b80601f016020809104026020016040519081016040528092919081815260200182805461021f90610910565b801561026c5780601f106102415761010080835404028352916020019161026c565b820191906000526020600020905b81548152906001019060200180831161024f57829003601f168201915b5050505050905090565b6000336102848185856102df565b60019150505b92915050565b60003361029e8582856102f1565b6102a98585856103c5565b506001949350505050565b6102be8282610470565b5050565b6060600480546101f390610910565b6000336102848185856103c5565b6102ec83838360016104cc565b505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146103bf57818110156103b0576040517ffb8f41b200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416600482015260248101829052604481018390526064015b60405180910390fd5b6103bf848484840360006104cc565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8316610415576040517f96c6fd1e000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff8216610465576040517fec442f05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b6102ec838383610614565b73ffffffffffffffffffffffffffffffffffffffff82166104c0576040517fec442f05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b6102be60008383610614565b73ffffffffffffffffffffffffffffffffffffffff841661051c576040517fe602df05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff831661056c576040517f94280d62000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260016020908152604080832093871683529290522082905580156103bf578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161060691815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff831661064c5780600260008282546106419190610963565b909155506106fe9050565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260208190526040902054818110156106d2576040517fe450d38c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8516600482015260248101829052604481018390526064016103a7565b73ffffffffffffffffffffffffffffffffffffffff841660009081526020819052604090209082900390555b73ffffffffffffffffffffffffffffffffffffffff821661072757600280548290039055610753565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090208054820190555b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516107b291815260200190565b60405180910390a3505050565b602081526000825180602084015260005b818110156107ed57602081860181015160408684010152016107d0565b5060006040828501015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011684010191505092915050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461084f57600080fd5b919050565b6000806040838503121561086757600080fd5b6108708361082b565b946020939093013593505050565b60008060006060848603121561089357600080fd5b61089c8461082b565b92506108aa6020850161082b565b929592945050506040919091013590565b6000602082840312156108cd57600080fd5b6108d68261082b565b9392505050565b600080604083850312156108f057600080fd5b6108f98361082b565b91506109076020840161082b565b90509250929050565b600181811c9082168061092457607f821691505b60208210810361095d577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b8082018082111561028a577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea26469706673582212207e804ca539d49155d2b6bc19268ce22f9f857027c75247d69fb0d56a089c93d464736f6c634300081a0033608060405234801561001057600080fd5b506040516112a63803806112a683398101604081905261002f91610110565b604051806040016040528060048152602001635a65746160e01b815250604051806040016040528060048152602001635a45544160e01b815250816003908161007891906101e2565b50600461008582826101e2565b5050506001600160a01b03821615806100a557506001600160a01b038116155b156100c35760405163e6c4247b60e01b815260040160405180910390fd5b600680546001600160a01b039384166001600160a01b031991821617909155600780549290931691161790556102a0565b80516001600160a01b038116811461010b57600080fd5b919050565b6000806040838503121561012357600080fd5b61012c836100f4565b915061013a602084016100f4565b90509250929050565b634e487b7160e01b600052604160045260246000fd5b600181811c9082168061016d57607f821691505b60208210810361018d57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156101dd57806000526020600020601f840160051c810160208510156101ba5750805b601f840160051c820191505b818110156101da57600081556001016101c6565b50505b505050565b81516001600160401b038111156101fb576101fb610143565b61020f816102098454610159565b84610193565b6020601f821160018114610243576000831561022b5750848201515b600019600385901b1c1916600184901b1784556101da565b600084815260208120601f198516915b828110156102735787850151825560209485019460019092019101610253565b50848210156102915786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b610ff7806102af6000396000f3fe608060405234801561001057600080fd5b506004361061011b5760003560e01c806342966c68116100b257806379cc679011610081578063a9059cbb11610066578063a9059cbb1461028e578063bff9662a146102a1578063dd62ed3e146102c157600080fd5b806379cc67901461027357806395d89b411461028657600080fd5b806342966c68146102025780635b1125911461021557806370a0823114610235578063779e3b631461026b57600080fd5b80631e458bee116100ee5780631e458bee1461018857806323b872dd1461019b578063313ce567146101ae578063328a01d0146101bd57600080fd5b806306fdde0314610120578063095ea7b31461013e57806315d57fd41461016157806318160ddd14610176575b600080fd5b610128610307565b6040516101359190610d97565b60405180910390f35b61015161014c366004610e2c565b610399565b6040519015158152602001610135565b61017461016f366004610e56565b6103b3565b005b6002545b604051908152602001610135565b610174610196366004610e89565b61057e565b6101516101a9366004610ebc565b610631565b60405160128152602001610135565b6007546101dd9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610135565b610174610210366004610ef9565b610655565b6006546101dd9073ffffffffffffffffffffffffffffffffffffffff1681565b61017a610243366004610f12565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b610174610662565b610174610281366004610e2c565b610786565b610128610837565b61015161029c366004610e2c565b610846565b6005546101dd9073ffffffffffffffffffffffffffffffffffffffff1681565b61017a6102cf366004610e56565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b60606003805461031690610f34565b80601f016020809104026020016040519081016040528092919081815260200182805461034290610f34565b801561038f5780601f106103645761010080835404028352916020019161038f565b820191906000526020600020905b81548152906001019060200180831161037257829003601f168201915b5050505050905090565b6000336103a7818585610854565b60019150505b92915050565b60075473ffffffffffffffffffffffffffffffffffffffff1633148015906103f3575060065473ffffffffffffffffffffffffffffffffffffffff163314155b15610431576040517fcdfcef970000000000000000000000000000000000000000000000000000000081523360048201526024015b60405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff82161580610468575073ffffffffffffffffffffffffffffffffffffffff8116155b1561049f576040517fe6c4247b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6006805473ffffffffffffffffffffffffffffffffffffffff8481167fffffffffffffffffffffffff0000000000000000000000000000000000000000928316811790935560058054918516919092161790556040805133815260208101929092527fe79965b5c67dcfb2cf5fe152715e4a7256cee62a3d5dd8484fd8a8539eb8beff910160405180910390a16040805133815273ffffffffffffffffffffffffffffffffffffffff831660208201527f1b9352454524a57a51f24f67dc66d898f616922cd1f7a12d73570ece12b1975c910160405180910390a15050565b60055473ffffffffffffffffffffffffffffffffffffffff1633146105d1576040517f3fe32fba000000000000000000000000000000000000000000000000000000008152336004820152602401610428565b6105db8383610866565b808373ffffffffffffffffffffffffffffffffffffffff167fc263b302aec62d29105026245f19e16f8e0137066ccd4a8bd941f716bd4096bb8460405161062491815260200190565b60405180910390a3505050565b60003361063f8582856108c6565b61064a858585610995565b506001949350505050565b61065f3382610a40565b50565b60075473ffffffffffffffffffffffffffffffffffffffff1633146106b5576040517fe700765e000000000000000000000000000000000000000000000000000000008152336004820152602401610428565b60065473ffffffffffffffffffffffffffffffffffffffff16610704576040517fe6c4247b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600654600780547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff90921691821790556040805133815260208101929092527f5104c9abdc7d111c2aeb4ce890ac70274a4be2ee83f46a62551be5e6ebc82dd0910160405180910390a1565b60055473ffffffffffffffffffffffffffffffffffffffff1633146107d9576040517f3fe32fba000000000000000000000000000000000000000000000000000000008152336004820152602401610428565b6107e38282610a9c565b8173ffffffffffffffffffffffffffffffffffffffff167f919f7e2092ffcc9d09f599be18d8152860b0c054df788a33bc549cdd9d0f15b18260405161082b91815260200190565b60405180910390a25050565b60606004805461031690610f34565b6000336103a7818585610995565b6108618383836001610ab1565b505050565b73ffffffffffffffffffffffffffffffffffffffff82166108b6576040517fec442f0500000000000000000000000000000000000000000000000000000000815260006004820152602401610428565b6108c260008383610bf9565b5050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811461098f5781811015610980576040517ffb8f41b200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff841660048201526024810182905260448101839052606401610428565b61098f84848484036000610ab1565b50505050565b73ffffffffffffffffffffffffffffffffffffffff83166109e5576040517f96c6fd1e00000000000000000000000000000000000000000000000000000000815260006004820152602401610428565b73ffffffffffffffffffffffffffffffffffffffff8216610a35576040517fec442f0500000000000000000000000000000000000000000000000000000000815260006004820152602401610428565b610861838383610bf9565b73ffffffffffffffffffffffffffffffffffffffff8216610a90576040517f96c6fd1e00000000000000000000000000000000000000000000000000000000815260006004820152602401610428565b6108c282600083610bf9565b610aa78233836108c6565b6108c28282610a40565b73ffffffffffffffffffffffffffffffffffffffff8416610b01576040517fe602df0500000000000000000000000000000000000000000000000000000000815260006004820152602401610428565b73ffffffffffffffffffffffffffffffffffffffff8316610b51576040517f94280d6200000000000000000000000000000000000000000000000000000000815260006004820152602401610428565b73ffffffffffffffffffffffffffffffffffffffff8085166000908152600160209081526040808320938716835292905220829055801561098f578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051610beb91815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff8316610c31578060026000828254610c269190610f87565b90915550610ce39050565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205481811015610cb7576040517fe450d38c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff851660048201526024810182905260448101839052606401610428565b73ffffffffffffffffffffffffffffffffffffffff841660009081526020819052604090209082900390555b73ffffffffffffffffffffffffffffffffffffffff8216610d0c57600280548290039055610d38565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090208054820190555b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161062491815260200190565b602081526000825180602084015260005b81811015610dc55760208186018101516040868401015201610da8565b5060006040828501015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011684010191505092915050565b803573ffffffffffffffffffffffffffffffffffffffff81168114610e2757600080fd5b919050565b60008060408385031215610e3f57600080fd5b610e4883610e03565b946020939093013593505050565b60008060408385031215610e6957600080fd5b610e7283610e03565b9150610e8060208401610e03565b90509250929050565b600080600060608486031215610e9e57600080fd5b610ea784610e03565b95602085013595506040909401359392505050565b600080600060608486031215610ed157600080fd5b610eda84610e03565b9250610ee860208501610e03565b929592945050506040919091013590565b600060208284031215610f0b57600080fd5b5035919050565b600060208284031215610f2457600080fd5b610f2d82610e03565b9392505050565b600181811c90821680610f4857607f821691505b602082108103610f81577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b808201808211156103ad577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea2646970667358221220085f01204b33dc17013c78c74fbca32a3da2c0b384ce7c8878c889551af28c6164736f6c634300081a003360a060405234801561001057600080fd5b5060405161179838038061179883398101604081905261002f916101e5565b60016000556002805460ff191690556001600160a01b038316158061005b57506001600160a01b038216155b8061006d57506001600160a01b038116155b1561008b5760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b0383166080526100a3600082610134565b506100ce7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a82610134565b506100f97f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e483610134565b5061011260008051602061177883398151915282610134565b5061012b60008051602061177883398151915283610134565b50505050610228565b60008281526001602090815260408083206001600160a01b038516845290915281205460ff166101bf5760008381526001602081815260408084206001600160a01b0387168086529252808420805460ff19169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45060016101c3565b5060005b92915050565b80516001600160a01b03811681146101e057600080fd5b919050565b6000806000606084860312156101fa57600080fd5b610203846101c9565b9250610211602085016101c9565b915061021f604085016101c9565b90509250925092565b60805161151961025f6000396000818161019e01528181610500015281816105620152818161099101526109f301526115196000f3fe608060405234801561001057600080fd5b506004361061016c5760003560e01c806385f438c1116100cd578063c8a0236211610081578063d936547e11610066578063d936547e14610355578063d9caed1214610378578063e63ab1e91461038b57600080fd5b8063c8a023621461032f578063d547741f1461034257600080fd5b80639a590427116100b25780639a590427146103015780639b19251a14610314578063a217fddf1461032757600080fd5b806385f438c11461029457806391d14854146102bb57600080fd5b806336568abe11610124578063570618e111610109578063570618e11461025a5780635c975abb146102815780638456cb591461028c57600080fd5b806336568abe1461023f5780633f4ba83a1461025257600080fd5b806321fc65f21161015557806321fc65f2146101e5578063248a9ca3146101fa5780632f2ff15d1461022c57600080fd5b806301ffc9a714610171578063116191b614610199575b600080fd5b61018461017f366004611224565b6103b2565b60405190151581526020015b60405180910390f35b6101c07f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610190565b6101f86101f336600461128f565b61044b565b005b61021e61020836600461132c565b6000908152600160208190526040909120015490565b604051908152602001610190565b6101f861023a366004611345565b61064c565b6101f861024d366004611345565b610678565b6101f86106d6565b61021e7f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a81565b60025460ff16610184565b6101f861070b565b61021e7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b6101846102c9366004611345565b600091825260016020908152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b6101f861030f366004611371565b61073d565b6101f8610322366004611371565b61080b565b61021e600081565b6101f861033d36600461128f565b6108dc565b6101f8610350366004611345565b610ac3565b610184610363366004611371565b60036020526000908152604090205460ff1681565b6101f861038636600461138c565b610ae9565b61021e7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061044557507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b610453610c15565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461047d81610c58565b610485610c62565b73ffffffffffffffffffffffffffffffffffffffff861660009081526003602052604090205460ff166104e4576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61052573ffffffffffffffffffffffffffffffffffffffff87167f000000000000000000000000000000000000000000000000000000000000000086610ca1565b6040517f5131ab5900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690635131ab599061059f9089908990899089908990600401611412565b600060405180830381600087803b1580156105b957600080fd5b505af11580156105cd573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167f85b5be9cf454e05e0bddf49315178102227c312078eefa3c00294fb4d912ae4e8686866040516106329392919061146f565b60405180910390a3506106456001600055565b5050505050565b6000828152600160208190526040909120015461066881610c58565b6106728383610d2e565b50505050565b73ffffffffffffffffffffffffffffffffffffffff811633146106c7576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6106d18282610ddb565b505050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61070081610c58565b610708610e7c565b50565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61073581610c58565b610708610edb565b7f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a61076781610c58565b73ffffffffffffffffffffffffffffffffffffffff82166107b4576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216600081815260036020526040808220805460ff19169055517f51085ddf9ebdded84b76e829eb58c4078e4b5bdf97d9a94723f336039da467919190a25050565b7f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a61083581610c58565b73ffffffffffffffffffffffffffffffffffffffff8216610882576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216600081815260036020526040808220805460ff19166001179055517faab7954e9d246b167ef88aeddad35209ca2489d95a8aeb59e288d9b19fae5a549190a25050565b6108e4610c15565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461090e81610c58565b610916610c62565b73ffffffffffffffffffffffffffffffffffffffff861660009081526003602052604090205460ff16610975576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6109b673ffffffffffffffffffffffffffffffffffffffff87167f000000000000000000000000000000000000000000000000000000000000000086610ca1565b6040517fb8969bd400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063b8969bd490610a309089908990899089908990600401611412565b600060405180830381600087803b158015610a4a57600080fd5b505af1158015610a5e573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fb9d4efa96044e5f5e03e696fa9ae2ff66911cc27e8a637c3627c75bc5b2241c88686866040516106329392919061146f565b60008281526001602081905260409091200154610adf81610c58565b6106728383610ddb565b610af1610c15565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e4610b1b81610c58565b610b23610c62565b73ffffffffffffffffffffffffffffffffffffffff841660009081526003602052604090205460ff16610b82576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610ba373ffffffffffffffffffffffffffffffffffffffff85168484610ca1565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f9b1bfa7fa9ee420a16e124f794c35ac9f90472acc99140eb2f6447c714cad8eb84604051610c0291815260200190565b60405180910390a3506106d16001600055565b600260005403610c51576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b6107088133610f18565b60025460ff1615610c9f576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6040805173ffffffffffffffffffffffffffffffffffffffff8416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb000000000000000000000000000000000000000000000000000000001790526106d1908490610fa9565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff16610dd357600083815260016020818152604080842073ffffffffffffffffffffffffffffffffffffffff87168086529252808420805460ff19169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a4506001610445565b506000610445565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff1615610dd357600083815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff86168085529252808320805460ff1916905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a4506001610445565b610e8461103f565b6002805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b610ee3610c62565b6002805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258610eb13390565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16610fa5576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82166004820152602481018390526044015b60405180910390fd5b5050565b6000610fcb73ffffffffffffffffffffffffffffffffffffffff84168361107b565b90508051600014158015610ff0575080806020019051810190610fee9190611492565b155b156106d1576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84166004820152602401610f9c565b60025460ff16610c9f576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606061108983836000611090565b9392505050565b6060814710156110ce576040517fcd786059000000000000000000000000000000000000000000000000000000008152306004820152602401610f9c565b6000808573ffffffffffffffffffffffffffffffffffffffff1684866040516110f791906114b4565b60006040518083038185875af1925050503d8060008114611134576040519150601f19603f3d011682016040523d82523d6000602084013e611139565b606091505b5091509150611149868383611153565b9695505050505050565b60608261116857611163826111e2565b611089565b815115801561118c575073ffffffffffffffffffffffffffffffffffffffff84163b155b156111db576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85166004820152602401610f9c565b5080611089565b8051156111f25780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006020828403121561123657600080fd5b81357fffffffff000000000000000000000000000000000000000000000000000000008116811461108957600080fd5b803573ffffffffffffffffffffffffffffffffffffffff8116811461128a57600080fd5b919050565b6000806000806000608086880312156112a757600080fd5b6112b086611266565b94506112be60208701611266565b935060408601359250606086013567ffffffffffffffff8111156112e157600080fd5b8601601f810188136112f257600080fd5b803567ffffffffffffffff81111561130957600080fd5b88602082840101111561131b57600080fd5b959894975092955050506020019190565b60006020828403121561133e57600080fd5b5035919050565b6000806040838503121561135857600080fd5b8235915061136860208401611266565b90509250929050565b60006020828403121561138357600080fd5b61108982611266565b6000806000606084860312156113a157600080fd5b6113aa84611266565b92506113b860208501611266565b929592945050506040919091013590565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff8616815273ffffffffffffffffffffffffffffffffffffffff851660208201528360408201526080606082015260006114646080830184866113c9565b979650505050505050565b8381526040602082015260006114896040830184866113c9565b95945050505050565b6000602082840312156114a457600080fd5b8151801515811461108957600080fd5b6000825160005b818110156114d557602081860181015185830152016114bb565b50600092019182525091905056fea26469706673582212207ea3ad4ba4a6d39c3be3cec464753448900300ac3b508b4000815de5b914c53064736f6c634300081a00338619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a60c060405260001960035534801561001657600080fd5b5060405161155a38038061155a83398101604081905261003591610220565b60016000819055805460ff19169055838383836001600160a01b038416158061006557506001600160a01b038316155b8061007757506001600160a01b038216155b8061008957506001600160a01b038116155b156100a75760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b03808516608052831660a0526100c5600082610154565b506100f07f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e483610154565b5061011b7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb83610154565b506101467f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a82610154565b505050505050505050610274565b60008281526002602090815260408083206001600160a01b038516845290915281205460ff166101fa5760008381526002602090815260408083206001600160a01b03861684529091529020805460ff191660011790556101b23390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45060016101fe565b5060005b92915050565b80516001600160a01b038116811461021b57600080fd5b919050565b6000806000806080858703121561023657600080fd5b61023f85610204565b935061024d60208601610204565b925061025b60408601610204565b915061026960608601610204565b905092959194509250565b60805160a0516112826102d86000396000818161021d01528181610531015281816108240152818161097b01528181610ad00152610bf20152600081816101d1015281816104a1015281816105040152818161079401526107f701526112826000f3fe608060405234801561001057600080fd5b50600436106101775760003560e01c80635e3e9fef116100d857806391d148541161008c578063d547741f11610066578063d547741f14610386578063d5abeb0114610399578063e63ab1e9146103a257600080fd5b806391d1485414610311578063a217fddf14610357578063a783c7891461035f57600080fd5b8063743e0c9b116100bd578063743e0c9b146102cf5780638456cb59146102e257806385f438c1146102ea57600080fd5b80635e3e9fef146102a95780636f8b44b0146102bc57600080fd5b8063248a9ca31161012f57806336568abe1161011457806336568abe146102835780633f4ba83a146102965780635c975abb1461029e57600080fd5b8063248a9ca31461023f5780632f2ff15d1461027057600080fd5b8063106e629011610160578063106e6290146101b9578063116191b6146101cc57806321e093b11461021857600080fd5b806301ffc9a71461017c57806302d5c899146101a4575b600080fd5b61018f61018a366004610fb4565b6103c9565b60405190151581526020015b60405180910390f35b6101b76101b2366004611026565b610462565b005b6101b76101c73660046110b8565b6105f7565b6101f37f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161019b565b6101f37f000000000000000000000000000000000000000000000000000000000000000081565b61026261024d3660046110eb565b60009081526002602052604090206001015490565b60405190815260200161019b565b6101b761027e366004611104565b61069c565b6101b7610291366004611104565b6106c7565b6101b7610720565b60015460ff1661018f565b6101b76102b7366004611026565b610755565b6101b76102ca3660046110eb565b6108d0565b6101b76102dd3660046110eb565b61093e565b6101b76109e8565b6102627f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b61018f61031f366004611104565b600091825260026020908152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b610262600081565b6102627f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb81565b6101b7610394366004611104565b610a1a565b61026260035481565b6102627f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061045c57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b61046a610a3f565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461049481610a82565b61049c610a8c565b6104c77f00000000000000000000000000000000000000000000000000000000000000008684610acb565b6040517fb8969bd400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063b8969bd490610561907f0000000000000000000000000000000000000000000000000000000000000000908a908a908a908a90600401611179565b600060405180830381600087803b15801561057b57600080fd5b505af115801561058f573d6000803e3d6000fd5b505050508573ffffffffffffffffffffffffffffffffffffffff167fba96f26bdda53eb8c8ba39045dfb4ff39753fbc7a6edcf250a88e75e78d102fe8686866040516105dd939291906111d6565b60405180910390a2506105f06001600055565b5050505050565b6105ff610a3f565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461062981610a82565b610631610a8c565b61063c848484610acb565b8373ffffffffffffffffffffffffffffffffffffffff167f884edad9ce6fa2440d8a54cc123490eb96d2768479d49ff9c7366125a94243648460405161068491815260200190565b60405180910390a2506106976001600055565b505050565b6000828152600260205260409020600101546106b781610a82565b6106c18383610c53565b50505050565b73ffffffffffffffffffffffffffffffffffffffff81163314610716576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6106978282610d53565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61074a81610a82565b610752610e12565b50565b61075d610a3f565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461078781610a82565b61078f610a8c565b6107ba7f00000000000000000000000000000000000000000000000000000000000000008684610acb565b6040517f5131ab5900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690635131ab5990610854907f0000000000000000000000000000000000000000000000000000000000000000908a908a908a908a90600401611179565b600060405180830381600087803b15801561086e57600080fd5b505af1158015610882573d6000803e3d6000fd5b505050508573ffffffffffffffffffffffffffffffffffffffff167f7772f56296d3a5202974a45c61c9188d844ab4d6eeb18c851e4b8d5384ca6ced8686866040516105dd939291906111d6565b7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb6108fa81610a82565b610902610a8c565b60038290556040518281527f7810bd47de260c3e9ee10061cf438099dd12256c79485f12f94dbccc981e806c9060200160405180910390a15050565b610946610a8c565b6040517f79cc6790000000000000000000000000000000000000000000000000000000008152336004820152602481018290527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16906379cc679090604401600060405180830381600087803b1580156109d457600080fd5b505af11580156105f0573d6000803e3d6000fd5b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610a1281610a82565b610752610e8f565b600082815260026020526040902060010154610a3581610a82565b6106c18383610d53565b600260005403610a7b576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b6107528133610ee8565b60015460ff1615610ac9576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6003547f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b39573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b5d91906111f9565b610b679084611212565b1115610b9f576040517fc30436e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f1e458bee00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff848116600483015260248201849052604482018390527f00000000000000000000000000000000000000000000000000000000000000001690631e458bee90606401600060405180830381600087803b158015610c3657600080fd5b505af1158015610c4a573d6000803e3d6000fd5b50505050505050565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff16610d4b57600083815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff86168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055610ce93390565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a450600161045c565b50600061045c565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff1615610d4b57600083815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8616808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a450600161045c565b610e1a610f78565b600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b610e97610a8c565b600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016811790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25833610e65565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16610f74576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff821660048201526024810183905260440160405180910390fd5b5050565b60015460ff16610ac9576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060208284031215610fc657600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610ff657600080fd5b9392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461102157600080fd5b919050565b60008060008060006080868803121561103e57600080fd5b61104786610ffd565b945060208601359350604086013567ffffffffffffffff81111561106a57600080fd5b8601601f8101881361107b57600080fd5b803567ffffffffffffffff81111561109257600080fd5b8860208284010111156110a457600080fd5b959894975060200195606001359392505050565b6000806000606084860312156110cd57600080fd5b6110d684610ffd565b95602085013595506040909401359392505050565b6000602082840312156110fd57600080fd5b5035919050565b6000806040838503121561111757600080fd5b8235915061112760208401610ffd565b90509250929050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff8616815273ffffffffffffffffffffffffffffffffffffffff851660208201528360408201526080606082015260006111cb608083018486611130565b979650505050505050565b8381526040602082015260006111f0604083018486611130565b95945050505050565b60006020828403121561120b57600080fd5b5051919050565b8082018082111561045c577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea2646970667358221220de5fa55e0ca79ea2f08903481d01ea00bbbf346b9cfba44e12a2dd6f3a6f2e8a64736f6c634300081a00336080604052348015600f57600080fd5b506001600055610d3a806100246000396000f3fe6080604052600436106100635760003560e01c8063c513169111610040578063c5131691146100c1578063e04d4f97146100e1578063f05b6abf146100f457005b8063357fc5a21461006c5780636ed701691461008c5780638fcaa0b5146100a157005b3661006a57005b005b34801561007857600080fd5b5061006a6100873660046106c0565b610114565b34801561009857600080fd5b5061006a6101aa565b3480156100ad57600080fd5b5061006a6100bc3660046106fc565b6101df565b3480156100cd57600080fd5b5061006a6100dc3660046106c0565b61021e565b61006a6100ef366004610895565b6102f9565b34801561010057600080fd5b5061006a61010f366004610981565b61033d565b61011c610372565b61013e73ffffffffffffffffffffffffffffffffffffffff83163383866103b5565b604080513381526020810185905273ffffffffffffffffffffffffffffffffffffffff848116828401528316606082015290517f2b58128f24a9f59127cc5b5430d70542b22220f2d9adaa86e442b816ab98af609181900360800190a16101a56001600055565b505050565b6040513381527fbcaadb46b82a48af60b608f58959ae6b8310d1b0a0d094c2e9ec3208ed39f2a09060200160405180910390a1565b7f0d3f65f00e631663aa85c96330b5c7a83bb29af3630c0063776f985edc3037aa33838360405161021293929190610a6b565b60405180910390a15050565b610226610372565b6000610233600285610ad5565b90508060000361026f576040517f1f2a200500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61029173ffffffffffffffffffffffffffffffffffffffff84163384846103b5565b604080513381526020810183905273ffffffffffffffffffffffffffffffffffffffff858116828401528416606082015290517f2b58128f24a9f59127cc5b5430d70542b22220f2d9adaa86e442b816ab98af609181900360800190a1506101a56001600055565b7f1f1ff1f5fb41346850b2f5c04e6c767e2f1c8a525c5c0c5cdb60cdf3ca5f62fa3334858585604051610330959493929190610b7e565b60405180910390a1505050565b7f74a53cd528a921fca7dbdee62f86819051d3cc98f214951f4238e8843f20b146338484846040516103309493929190610c08565b6002600054036103ae576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b6040805173ffffffffffffffffffffffffffffffffffffffff85811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd0000000000000000000000000000000000000000000000000000000017905261044a908590610450565b50505050565b600061047273ffffffffffffffffffffffffffffffffffffffff8416836104eb565b905080516000141580156104975750808060200190518101906104959190610ccb565b155b156101a5576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff841660048201526024015b60405180910390fd5b60606104f983836000610500565b9392505050565b60608147101561053e576040517fcd7860590000000000000000000000000000000000000000000000000000000081523060048201526024016104e2565b6000808573ffffffffffffffffffffffffffffffffffffffff1684866040516105679190610ce8565b60006040518083038185875af1925050503d80600081146105a4576040519150601f19603f3d011682016040523d82523d6000602084013e6105a9565b606091505b50915091506105b98683836105c3565b9695505050505050565b6060826105d8576105d382610652565b6104f9565b81511580156105fc575073ffffffffffffffffffffffffffffffffffffffff84163b155b1561064b576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff851660048201526024016104e2565b50806104f9565b8051156106625780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50565b803573ffffffffffffffffffffffffffffffffffffffff811681146106bb57600080fd5b919050565b6000806000606084860312156106d557600080fd5b833592506106e560208501610697565b91506106f360408501610697565b90509250925092565b6000806020838503121561070f57600080fd5b823567ffffffffffffffff81111561072657600080fd5b8301601f8101851361073757600080fd5b803567ffffffffffffffff81111561074e57600080fd5b85602082840101111561076057600080fd5b6020919091019590945092505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156107e6576107e6610770565b604052919050565b600082601f8301126107ff57600080fd5b813567ffffffffffffffff81111561081957610819610770565b61084a60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8401160161079f565b81815284602083860101111561085f57600080fd5b816020850160208301376000918101602001919091529392505050565b801515811461069457600080fd5b80356106bb8161087c565b6000806000606084860312156108aa57600080fd5b833567ffffffffffffffff8111156108c157600080fd5b6108cd868287016107ee565b9350506020840135915060408401356108e58161087c565b809150509250925092565b600067ffffffffffffffff82111561090a5761090a610770565b5060051b60200190565b600082601f83011261092557600080fd5b8135610938610933826108f0565b61079f565b8082825260208201915060208360051b86010192508583111561095a57600080fd5b602085015b8381101561097757803583526020928301920161095f565b5095945050505050565b60008060006060848603121561099657600080fd5b833567ffffffffffffffff8111156109ad57600080fd5b8401601f810186136109be57600080fd5b80356109cc610933826108f0565b8082825260208201915060208360051b8501019250888311156109ee57600080fd5b602084015b83811015610a3057803567ffffffffffffffff811115610a1257600080fd5b610a218b6020838901016107ee565b845250602092830192016109f3565b509550505050602084013567ffffffffffffffff811115610a5057600080fd5b610a5c86828701610914565b9250506106f36040850161088a565b73ffffffffffffffffffffffffffffffffffffffff8416815260406020820152816040820152818360608301376000818301606090810191909152601f9092017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016010192915050565b600082610b0b577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60005b83811015610b2b578181015183820152602001610b13565b50506000910152565b60008151808452610b4c816020860160208601610b10565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b73ffffffffffffffffffffffffffffffffffffffff8616815284602082015260a060408201526000610bb360a0830186610b34565b6060830194909452509015156080909101529392505050565b600081518084526020840193506020830160005b82811015610bfe578151865260209586019590910190600101610be0565b5093949350505050565b60006080820173ffffffffffffffffffffffffffffffffffffffff871683526080602084015280865180835260a08501915060a08160051b86010192506020880160005b82811015610c9b577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60878603018452610c86858351610b34565b94506020938401939190910190600101610c4c565b505050508281036040840152610cb18186610bcc565b915050610cc2606083018415159052565b95945050505050565b600060208284031215610cdd57600080fd5b81516104f98161087c565b60008251610cfa818460208701610b10565b919091019291505056fea2646970667358221220556072e1abafc3c4063b8cce832228b4f309b93726aaa6a6dfab20cb880c6d1864736f6c634300081a0033a26469706673582212200bcfa31d3a82043f85c16e0de0ff816b4aade1b90b755f394db7eef8da754c7f64736f6c634300081a0033", } // GatewayEVMTestABI is the input ABI used to generate the binding from. diff --git a/v2/pkg/gatewayevmechidnatest.sol/gatewayevmechidnatest.go b/v2/pkg/gatewayevmechidnatest.sol/gatewayevmechidnatest.go index cc4bc653..33ac6347 100644 --- a/v2/pkg/gatewayevmechidnatest.sol/gatewayevmechidnatest.go +++ b/v2/pkg/gatewayevmechidnatest.sol/gatewayevmechidnatest.go @@ -32,7 +32,7 @@ var ( // GatewayEVMEchidnaTestMetaData contains all meta data concerning the GatewayEVMEchidnaTest contract. var GatewayEVMEchidnaTestMetaData = &bind.MetaData{ ABI: "[{\"type\":\"constructor\",\"inputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"ASSET_HANDLER_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"DEFAULT_ADMIN_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"PAUSER_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"TSS_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"UPGRADE_INTERFACE_VERSION\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"call\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"custody\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"deposit\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"deposit\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"depositAndCall\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"depositAndCall\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"echidnaCaller\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"execute\",\"inputs\":[{\"name\":\"destination\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"executeRevert\",\"inputs\":[{\"name\":\"destination\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"executeWithERC20\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"getRoleAdmin\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"grantRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"hasRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"initialize\",\"inputs\":[{\"name\":\"tssAddress_\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"zetaToken_\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"admin_\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"pause\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"paused\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"proxiableUUID\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"renounceRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"callerConfirmation\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"revertWithERC20\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"revokeRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setConnector\",\"inputs\":[{\"name\":\"zetaConnector_\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setCustody\",\"inputs\":[{\"name\":\"custody_\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"supportsInterface\",\"inputs\":[{\"name\":\"interfaceId\",\"type\":\"bytes4\",\"internalType\":\"bytes4\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"testERC20\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractTestERC20\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"testExecuteWithERC20\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"tssAddress\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"unpause\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"upgradeToAndCall\",\"inputs\":[{\"name\":\"newImplementation\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"zetaConnector\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"zetaToken\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"event\",\"name\":\"Call\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"receiver\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Deposit\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"receiver\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"asset\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Executed\",\"inputs\":[{\"name\":\"destination\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ExecutedWithERC20\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Initialized\",\"inputs\":[{\"name\":\"version\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Paused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Reverted\",\"inputs\":[{\"name\":\"destination\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RevertedWithERC20\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleAdminChanged\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"previousAdminRole\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"newAdminRole\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleGranted\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleRevoked\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Unpaused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Upgraded\",\"inputs\":[{\"name\":\"implementation\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"AccessControlBadConfirmation\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"AccessControlUnauthorizedAccount\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"neededRole\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"type\":\"error\",\"name\":\"AddressEmptyCode\",\"inputs\":[{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"AddressInsufficientBalance\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"ApprovalFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ConnectorInitialized\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"CustodyInitialized\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"DepositFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ERC1967InvalidImplementation\",\"inputs\":[{\"name\":\"implementation\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"ERC1967NonPayable\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"EnforcedPause\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ExecutionFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ExpectedPause\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"FailedInnerCall\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientERC20Amount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientETHAmount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidInitialization\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NotInitializing\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NotWhitelistedInCustody\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ReentrancyGuardReentrantCall\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"SafeERC20FailedOperation\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"UUPSUnauthorizedCallContext\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"UUPSUnsupportedProxiableUUID\",\"inputs\":[{\"name\":\"slot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"type\":\"error\",\"name\":\"ZeroAddress\",\"inputs\":[]}]", - Bin: "0x60a060405230608052600580546001600160a01b0319163317905534801561002657600080fd5b5061002f610154565b600554600180546001600160a01b039092166001600160a01b031992831617905560028054610123921691909117905560405161006b90610206565b60408082526004908201819052631d195cdd60e21b606083015260806020830181905282015263151154d560e21b60a082015260c001604051809103906000f0801580156100bd573d6000803e3d6000fd5b50600480546001600160a01b0319166001600160a01b039283161790556001546040513092919091169082906100f290610213565b6001600160a01b03938416815291831660208301529091166040820152606001604051809103906000f08015801561012e573d6000803e3d6000fd5b50600080546001600160a01b0319166001600160a01b0392909216919091179055610220565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156101a45760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146102035780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b610c9f8061372c83390190565b611798806143cb83390190565b6080516134e3610249600039600081816120e20152818161210b015261259701526134e36000f3fe6080604052600436106102345760003560e01c80635c975abb11610138578063ad3cb1cc116100b0578063d547741f1161007f578063e63ab1e911610064578063e63ab1e9146106ff578063f340fa0114610733578063f45346dc1461074657600080fd5b8063d547741f146106bf578063dda79b75146106df57600080fd5b8063ad3cb1cc14610616578063ae7a3a6f1461065f578063b8969bd41461067f578063c0c53b8b1461069f57600080fd5b80638456cb591161010757806391d14854116100ec57806391d1485414610568578063a217fddf146105cd578063a783c789146105e257600080fd5b80638456cb59146105335780638c6f037f1461054857600080fd5b80635c975abb146104885780635d62c860146104bf5780636ab90f9b146104f357806381100bf01461051357600080fd5b806335c018db116101cb5780634f1ef2861161019a57806352d1902d1161017f57806352d1902d1461043357806357bec62f146104485780635b1125911461046857600080fd5b80634f1ef286146104005780635131ab591461041357600080fd5b806335c018db1461039857806336568abe146103ab5780633c2f05a8146103cb5780633f4ba83a146103eb57600080fd5b806321e093b11161020757806321e093b1146102d0578063248a9ca31461030857806329c59b5d146103655780632f2ff15d1461037857600080fd5b806301ffc9a71461023957806310188aef1461026e5780631b8b921d146102905780631cff79cd146102b0575b600080fd5b34801561024557600080fd5b50610259610254366004612ecd565b610766565b60405190151581526020015b60405180910390f35b34801561027a57600080fd5b5061028e610289366004612f2b565b6107ff565b005b34801561029c57600080fd5b5061028e6102ab366004612f8f565b6108f3565b6102c36102be366004612f8f565b61097e565b6040516102659190613050565b3480156102dc57600080fd5b506003546102f0906001600160a01b031681565b6040516001600160a01b039091168152602001610265565b34801561031457600080fd5b50610357610323366004613063565b60009081527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052604090206001015490565b604051908152602001610265565b61028e610373366004612f8f565b610a81565b34801561038457600080fd5b5061028e61039336600461307c565b610c14565b61028e6103a6366004612f8f565b610c5e565b3480156103b757600080fd5b5061028e6103c636600461307c565b610e4d565b3480156103d757600080fd5b506004546102f0906001600160a01b031681565b3480156103f757600080fd5b5061028e610e99565b61028e61040e3660046130d7565b610ece565b34801561041f57600080fd5b5061028e61042e3660046131de565b610eed565b34801561043f57600080fd5b50610357611206565b34801561045457600080fd5b506002546102f0906001600160a01b031681565b34801561047457600080fd5b506001546102f0906001600160a01b031681565b34801561049457600080fd5b507fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff16610259565b3480156104cb57600080fd5b506103577f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b981565b3480156104ff57600080fd5b5061028e61050e36600461324d565b611235565b34801561051f57600080fd5b506005546102f0906001600160a01b031681565b34801561053f57600080fd5b5061028e611360565b34801561055457600080fd5b5061028e6105633660046132a7565b611392565b34801561057457600080fd5b5061025961058336600461307c565b60009182527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408084206001600160a01b0393909316845291905290205460ff1690565b3480156105d957600080fd5b50610357600081565b3480156105ee57600080fd5b506103577f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb81565b34801561062257600080fd5b506102c36040518060400160405280600581526020017f352e302e3000000000000000000000000000000000000000000000000000000081525081565b34801561066b57600080fd5b5061028e61067a366004612f2b565b6114a8565b34801561068b57600080fd5b5061028e61069a3660046131de565b61159c565b3480156106ab57600080fd5b5061028e6106ba3660046132f9565b611755565b3480156106cb57600080fd5b5061028e6106da36600461307c565b611a0a565b3480156106eb57600080fd5b506000546102f0906001600160a01b031681565b34801561070b57600080fd5b506103577f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b61028e610741366004612f2b565b611a4e565b34801561075257600080fd5b5061028e61076136600461333c565b611be3565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b0000000000000000000000000000000000000000000000000000000014806107f957507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b600061080a81611cde565b6001600160a01b03821661084a576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002546001600160a01b03161561088d576040517f0c8dc01600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6108b77f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b983611ce8565b5050600280547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6108fb611dd5565b610903611e33565b826001600160a01b0316336001600160a01b03167f2a21062ee9199c2e205622999eeb7c3da73153674f36a0acd3f74fa6af67bde384846040516109489291906133b8565b60405180910390a361097960017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b505050565b60607f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb6109aa81611cde565b6109b2611dd5565b6109ba611e33565b6001600160a01b0385166109fa576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610a07868686611eda565b9050856001600160a01b03167fcaf938de11c367272220bfd1d2baa99ca46665e7bc4d85f00adb51b90fe1fa9f348787604051610a46939291906133d4565b60405180910390a29150610a7960017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b509392505050565b610a89611dd5565b610a91611e33565b34600003610acb576040517f7671265e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038316610b0b576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546040516000916001600160a01b03169034908381818185875af1925050503d8060008114610b58576040519150601f19603f3d011682016040523d82523d6000602084013e610b5d565b606091505b5050905080610b98576040517f79cacff100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b836001600160a01b0316336001600160a01b03167f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a43460008787604051610be294939291906133ee565b60405180910390a35061097960017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020526040902060010154610c4e81611cde565b610c588383611ce8565b50505050565b7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb610c8881611cde565b610c90611dd5565b610c98611e33565b6001600160a01b038416610cd8576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000846001600160a01b03163460405160006040518083038185875af1925050503d8060008114610d25576040519150601f19603f3d011682016040523d82523d6000602084013e610d2a565b606091505b5050905080610d65576040517facfdb44400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f8fcaa0b50000000000000000000000000000000000000000000000000000000081526001600160a01b03861690638fcaa0b590610dac90879087906004016133b8565b600060405180830381600087803b158015610dc657600080fd5b505af1158015610dda573d6000803e3d6000fd5b50505050846001600160a01b03167fd5d7616b1678354a0dea9d7e57e6a090bff5babe9f8d6381fdbad16e89ba311c348686604051610e1b939291906133d4565b60405180910390a250610c5860017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b6001600160a01b0381163314610e8f576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6109798282611f83565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610ec381611cde565b610ecb612047565b50565b610ed66120d7565b610edf826121a7565b610ee982826121b2565b5050565b7f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b9610f1781611cde565b610f1f611dd5565b610f27611e33565b83600003610f61576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038516610fa1576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610fab86866122d6565b610fe1576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b0386811660048301526024820186905287169063095ea7b3906044016020604051808303816000875af1158015611049573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061106d9190613417565b6110a3576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6110ae858484611eda565b506110b986866122d6565b6110ef576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201526000906001600160a01b038816906370a0823190602401602060405180830381865afa15801561114f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111739190613439565b90508015611185576111858782612366565b856001600160a01b0316876001600160a01b03167f29c40793bffd84cb810179f15d1ceec72bc7f0785514c668ba36645cf99b73828787876040516111cc939291906133d4565b60405180910390a3506111fe60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b505050505050565b600061121061258c565b507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc90565b600480546040517f40c10f190000000000000000000000000000000000000000000000000000000081523092810192909252602482018590526001600160a01b0316906340c10f1990604401600060405180830381600087803b15801561129b57600080fd5b505af11580156112af573d6000803e3d6000fd5b50506004546112cd92506001600160a01b0316905085858585610eed565b600480546040517f70a0823100000000000000000000000000000000000000000000000000000000815230928101929092526001600160a01b0316906370a0823190602401602060405180830381865afa15801561132f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113539190613439565b15610c5857610c58613452565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61138a81611cde565b610ecb6125ee565b61139a611dd5565b6113a2611e33565b836000036113dc576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03851661141c576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611427338486612667565b846001600160a01b0316336001600160a01b03167f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a48686868660405161147094939291906133ee565b60405180910390a36114a160017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b5050505050565b60006114b381611cde565b6001600160a01b0382166114f3576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000546001600160a01b031615611536576040517fb337f37800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6115607f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b983611ce8565b5050600080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b7f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b96115c681611cde565b6115ce611dd5565b6115d6611e33565b83600003611610576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038516611650576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6116646001600160a01b03871686866128ad565b6040517f8fcaa0b50000000000000000000000000000000000000000000000000000000081526001600160a01b03861690638fcaa0b5906116ab90869086906004016133b8565b600060405180830381600087803b1580156116c557600080fd5b505af11580156116d9573d6000803e3d6000fd5b50505050846001600160a01b0316866001600160a01b03167f723fc7be2448075379e4fdf1e6bf5fead954d2668d2da05dcb44ccfec4beeda7868686604051611724939291906133d4565b60405180910390a36111fe60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156117a05750825b905060008267ffffffffffffffff1660011480156117bd5750303b155b9050811580156117cb575080155b15611802576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84547fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000016600117855583156118635784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff16680100000000000000001785555b6001600160a01b038816158061188057506001600160a01b038716155b156118b7576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6118bf612921565b6118c7612929565b6118cf612921565b6118d7612939565b6118e2600087611ce8565b5061190d7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a87611ce8565b50600180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b038a1617905561196b7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb89611ce8565b50600380547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0389161790558315611a005784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b5050505050505050565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020526040902060010154611a4481611cde565b610c588383611f83565b611a56611dd5565b611a5e611e33565b34600003611a98576040517f7671265e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038116611ad8576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546040516000916001600160a01b03169034908381818185875af1925050503d8060008114611b25576040519150601f19603f3d011682016040523d82523d6000602084013e611b2a565b606091505b5050905080611b65576040517f79cacff100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60408051348152600060208201819052606082840181905282015290516001600160a01b0384169133917f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a49181900360800190a350610ecb60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b611beb611dd5565b611bf3611e33565b81600003611c2d576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038316611c6d576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611c78338284612667565b826001600160a01b0316336001600160a01b03167f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a484846040516109489291909182526001600160a01b0316602082015260606040820181905260009082015260800190565b610ecb8133612949565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff16611dcb576000848152602082815260408083206001600160a01b0387168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055611d813390565b6001600160a01b0316836001600160a01b0316857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a460019150506107f9565b60009150506107f9565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff1615611e31576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0080547ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01611eae576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60029055565b60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b6060600080856001600160a01b0316348686604051611efa929190613481565b60006040518083038185875af1925050503d8060008114611f37576040519150601f19603f3d011682016040523d82523d6000602084013e611f3c565b606091505b509150915081611f78576040517facfdb44400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b9150505b9392505050565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff1615611dcb576000848152602082815260408083206001600160a01b038716808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339287917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a460019150506107f9565b61204f6129d6565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001681557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a150565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148061217057507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166121647f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b6001600160a01b031614155b15611e31576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610ee981611cde565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa92505050801561222a575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820190925261222791810190613439565b60015b612270576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b03831660048201526024015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc81146122cc576040517faa1d49a400000000000000000000000000000000000000000000000000000000815260048101829052602401612267565b6109798383612a31565b6040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b038281166004830152600060248301819052919084169063095ea7b3906044016020604051808303816000875af1158015612342573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f7c9190613417565b6003546001600160a01b03908116908316036124b5576002546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152602481018390529083169063095ea7b3906044016020604051808303816000875af11580156123e8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061240c9190613417565b612442576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002546040517f743e0c9b000000000000000000000000000000000000000000000000000000008152600481018390526001600160a01b039091169063743e0c9b90602401600060405180830381600087803b1580156124a157600080fd5b505af11580156111fe573d6000803e3d6000fd5b6000546040517fd936547e0000000000000000000000000000000000000000000000000000000081526001600160a01b0384811660048301529091169063d936547e90602401602060405180830381865afa158015612518573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061253c9190613417565b612572576040517fac2175f100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600054610ee9906001600160a01b038481169116836128ad565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614611e31576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6125f6611dd5565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011781557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258336120b9565b6003546001600160a01b03908116908316036127d4576126926001600160a01b038316843084612a87565b6002546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152602481018390529083169063095ea7b3906044016020604051808303816000875af11580156126fe573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127229190613417565b612758576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002546040517f743e0c9b000000000000000000000000000000000000000000000000000000008152600481018390526001600160a01b039091169063743e0c9b90602401600060405180830381600087803b1580156127b757600080fd5b505af11580156127cb573d6000803e3d6000fd5b50505050505050565b6000546040517fd936547e0000000000000000000000000000000000000000000000000000000081526001600160a01b0384811660048301529091169063d936547e90602401602060405180830381865afa158015612837573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061285b9190613417565b612891576040517fac2175f100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600054610979906001600160a01b038481169186911684612a87565b6040516001600160a01b0383811660248301526044820183905261097991859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050612ac0565b611e31612b3c565b612931612b3c565b611e31612ba3565b612941612b3c565b611e31612bab565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408083206001600160a01b038516845290915290205460ff16610ee9576040517fe2517d3f0000000000000000000000000000000000000000000000000000000081526001600160a01b038216600482015260248101839052604401612267565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff16611e31576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612a3a82612bfc565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a2805115612a7f576109798282612ca4565b610ee9612d1a565b6040516001600160a01b038481166024830152838116604483015260648201839052610c589186918216906323b872dd906084016128da565b6000612ad56001600160a01b03841683612d52565b90508051600014158015612afa575080806020019051810190612af89190613417565b155b15610979576040517f5274afe70000000000000000000000000000000000000000000000000000000081526001600160a01b0384166004820152602401612267565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff16611e31576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611eb4612b3c565b612bb3612b3c565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055565b806001600160a01b03163b600003612c4b576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b0382166004820152602401612267565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6060600080846001600160a01b031684604051612cc19190613491565b600060405180830381855af49150503d8060008114612cfc576040519150601f19603f3d011682016040523d82523d6000602084013e612d01565b606091505b5091509150612d11858383612d60565b95945050505050565b3415611e31576040517fb398979f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6060611f7c83836000612dd5565b606082612d7557612d7082612e8b565b611f7c565b8151158015612d8c57506001600160a01b0384163b155b15612dce576040517f9996b3150000000000000000000000000000000000000000000000000000000081526001600160a01b0385166004820152602401612267565b5080611f7c565b606081471015612e13576040517fcd786059000000000000000000000000000000000000000000000000000000008152306004820152602401612267565b600080856001600160a01b03168486604051612e2f9190613491565b60006040518083038185875af1925050503d8060008114612e6c576040519150601f19603f3d011682016040523d82523d6000602084013e612e71565b606091505b5091509150612e81868383612d60565b9695505050505050565b805115612e9b5780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060208284031215612edf57600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114611f7c57600080fd5b80356001600160a01b0381168114612f2657600080fd5b919050565b600060208284031215612f3d57600080fd5b611f7c82612f0f565b60008083601f840112612f5857600080fd5b50813567ffffffffffffffff811115612f7057600080fd5b602083019150836020828501011115612f8857600080fd5b9250929050565b600080600060408486031215612fa457600080fd5b612fad84612f0f565b9250602084013567ffffffffffffffff811115612fc957600080fd5b612fd586828701612f46565b9497909650939450505050565b60005b83811015612ffd578181015183820152602001612fe5565b50506000910152565b6000815180845261301e816020860160208601612fe2565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000611f7c6020830184613006565b60006020828403121561307557600080fd5b5035919050565b6000806040838503121561308f57600080fd5b8235915061309f60208401612f0f565b90509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080604083850312156130ea57600080fd5b6130f383612f0f565b9150602083013567ffffffffffffffff81111561310f57600080fd5b8301601f8101851361312057600080fd5b803567ffffffffffffffff81111561313a5761313a6130a8565b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8501160116810181811067ffffffffffffffff821117156131a6576131a66130a8565b6040528181528282016020018710156131be57600080fd5b816020840160208301376000602083830101528093505050509250929050565b6000806000806000608086880312156131f657600080fd5b6131ff86612f0f565b945061320d60208701612f0f565b935060408601359250606086013567ffffffffffffffff81111561323057600080fd5b61323c88828901612f46565b969995985093965092949392505050565b6000806000806060858703121561326357600080fd5b61326c85612f0f565b935060208501359250604085013567ffffffffffffffff81111561328f57600080fd5b61329b87828801612f46565b95989497509550505050565b6000806000806000608086880312156132bf57600080fd5b6132c886612f0f565b9450602086013593506132dd60408701612f0f565b9250606086013567ffffffffffffffff81111561323057600080fd5b60008060006060848603121561330e57600080fd5b61331784612f0f565b925061332560208501612f0f565b915061333360408501612f0f565b90509250925092565b60008060006060848603121561335157600080fd5b61335a84612f0f565b92506020840135915061333360408501612f0f565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b6020815260006133cc60208301848661336f565b949350505050565b838152604060208201526000612d1160408301848661336f565b8481526001600160a01b0384166020820152606060408201526000612e8160608301848661336f565b60006020828403121561342957600080fd5b81518015158114611f7c57600080fd5b60006020828403121561344b57600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b8183823760009101908152919050565b600082516134a3818460208701612fe2565b919091019291505056fea26469706673582212201e79584ab68e03a1f6cb4a1f95946f390c00515ee3bc1325400b0627808dec4564736f6c634300081a0033608060405234801561001057600080fd5b50604051610c9f380380610c9f83398101604081905261002f9161010d565b8181600361003d83826101ff565b50600461004a82826101ff565b50505050506102bd565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261007b57600080fd5b81516001600160401b0381111561009457610094610054565b604051601f8201601f19908116603f011681016001600160401b03811182821017156100c2576100c2610054565b6040528181528382016020018510156100da57600080fd5b60005b828110156100f9576020818601810151838301820152016100dd565b506000918101602001919091529392505050565b6000806040838503121561012057600080fd5b82516001600160401b0381111561013657600080fd5b6101428582860161006a565b602085015190935090506001600160401b0381111561016057600080fd5b61016c8582860161006a565b9150509250929050565b600181811c9082168061018a57607f821691505b6020821081036101aa57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156101fa57806000526020600020601f840160051c810160208510156101d75750805b601f840160051c820191505b818110156101f757600081556001016101e3565b50505b505050565b81516001600160401b0381111561021857610218610054565b61022c816102268454610176565b846101b0565b6020601f82116001811461026057600083156102485750848201515b600019600385901b1c1916600184901b1784556101f7565b600084815260208120601f198516915b828110156102905787850151825560209485019460019092019101610270565b50848210156102ae5786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b6109d3806102cc6000396000f3fe608060405234801561001057600080fd5b50600436106100be5760003560e01c806340c10f191161007657806395d89b411161005b57806395d89b4114610183578063a9059cbb1461018b578063dd62ed3e1461019e57600080fd5b806340c10f191461013857806370a082311461014d57600080fd5b806318160ddd116100a757806318160ddd1461010457806323b872dd14610116578063313ce5671461012957600080fd5b806306fdde03146100c3578063095ea7b3146100e1575b600080fd5b6100cb6101e4565b6040516100d891906107bf565b60405180910390f35b6100f46100ef366004610854565b610276565b60405190151581526020016100d8565b6002545b6040519081526020016100d8565b6100f461012436600461087e565b610290565b604051601281526020016100d8565b61014b610146366004610854565b6102b4565b005b61010861015b3660046108bb565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6100cb6102c2565b6100f4610199366004610854565b6102d1565b6101086101ac3660046108dd565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6060600380546101f390610910565b80601f016020809104026020016040519081016040528092919081815260200182805461021f90610910565b801561026c5780601f106102415761010080835404028352916020019161026c565b820191906000526020600020905b81548152906001019060200180831161024f57829003601f168201915b5050505050905090565b6000336102848185856102df565b60019150505b92915050565b60003361029e8582856102f1565b6102a98585856103c5565b506001949350505050565b6102be8282610470565b5050565b6060600480546101f390610910565b6000336102848185856103c5565b6102ec83838360016104cc565b505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146103bf57818110156103b0576040517ffb8f41b200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416600482015260248101829052604481018390526064015b60405180910390fd5b6103bf848484840360006104cc565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8316610415576040517f96c6fd1e000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff8216610465576040517fec442f05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b6102ec838383610614565b73ffffffffffffffffffffffffffffffffffffffff82166104c0576040517fec442f05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b6102be60008383610614565b73ffffffffffffffffffffffffffffffffffffffff841661051c576040517fe602df05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff831661056c576040517f94280d62000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260016020908152604080832093871683529290522082905580156103bf578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161060691815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff831661064c5780600260008282546106419190610963565b909155506106fe9050565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260208190526040902054818110156106d2576040517fe450d38c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8516600482015260248101829052604481018390526064016103a7565b73ffffffffffffffffffffffffffffffffffffffff841660009081526020819052604090209082900390555b73ffffffffffffffffffffffffffffffffffffffff821661072757600280548290039055610753565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090208054820190555b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516107b291815260200190565b60405180910390a3505050565b602081526000825180602084015260005b818110156107ed57602081860181015160408684010152016107d0565b5060006040828501015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011684010191505092915050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461084f57600080fd5b919050565b6000806040838503121561086757600080fd5b6108708361082b565b946020939093013593505050565b60008060006060848603121561089357600080fd5b61089c8461082b565b92506108aa6020850161082b565b929592945050506040919091013590565b6000602082840312156108cd57600080fd5b6108d68261082b565b9392505050565b600080604083850312156108f057600080fd5b6108f98361082b565b91506109076020840161082b565b90509250929050565b600181811c9082168061092457607f821691505b60208210810361095d577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b8082018082111561028a577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea26469706673582212207e804ca539d49155d2b6bc19268ce22f9f857027c75247d69fb0d56a089c93d464736f6c634300081a003360a060405234801561001057600080fd5b5060405161179838038061179883398101604081905261002f916101e5565b60016000556002805460ff191690556001600160a01b038316158061005b57506001600160a01b038216155b8061006d57506001600160a01b038116155b1561008b5760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b0383166080526100a3600082610134565b506100ce7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a82610134565b506100f97f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e483610134565b5061011260008051602061177883398151915282610134565b5061012b60008051602061177883398151915283610134565b50505050610228565b60008281526001602090815260408083206001600160a01b038516845290915281205460ff166101bf5760008381526001602081815260408084206001600160a01b0387168086529252808420805460ff19169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45060016101c3565b5060005b92915050565b80516001600160a01b03811681146101e057600080fd5b919050565b6000806000606084860312156101fa57600080fd5b610203846101c9565b9250610211602085016101c9565b915061021f604085016101c9565b90509250925092565b60805161151961025f6000396000818161019e01528181610500015281816105620152818161099101526109f301526115196000f3fe608060405234801561001057600080fd5b506004361061016c5760003560e01c806385f438c1116100cd578063c8a0236211610081578063d936547e11610066578063d936547e14610355578063d9caed1214610378578063e63ab1e91461038b57600080fd5b8063c8a023621461032f578063d547741f1461034257600080fd5b80639a590427116100b25780639a590427146103015780639b19251a14610314578063a217fddf1461032757600080fd5b806385f438c11461029457806391d14854146102bb57600080fd5b806336568abe11610124578063570618e111610109578063570618e11461025a5780635c975abb146102815780638456cb591461028c57600080fd5b806336568abe1461023f5780633f4ba83a1461025257600080fd5b806321fc65f21161015557806321fc65f2146101e5578063248a9ca3146101fa5780632f2ff15d1461022c57600080fd5b806301ffc9a714610171578063116191b614610199575b600080fd5b61018461017f366004611224565b6103b2565b60405190151581526020015b60405180910390f35b6101c07f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610190565b6101f86101f336600461128f565b61044b565b005b61021e61020836600461132c565b6000908152600160208190526040909120015490565b604051908152602001610190565b6101f861023a366004611345565b61064c565b6101f861024d366004611345565b610678565b6101f86106d6565b61021e7f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a81565b60025460ff16610184565b6101f861070b565b61021e7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b6101846102c9366004611345565b600091825260016020908152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b6101f861030f366004611371565b61073d565b6101f8610322366004611371565b61080b565b61021e600081565b6101f861033d36600461128f565b6108dc565b6101f8610350366004611345565b610ac3565b610184610363366004611371565b60036020526000908152604090205460ff1681565b6101f861038636600461138c565b610ae9565b61021e7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061044557507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b610453610c15565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461047d81610c58565b610485610c62565b73ffffffffffffffffffffffffffffffffffffffff861660009081526003602052604090205460ff166104e4576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61052573ffffffffffffffffffffffffffffffffffffffff87167f000000000000000000000000000000000000000000000000000000000000000086610ca1565b6040517f5131ab5900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690635131ab599061059f9089908990899089908990600401611412565b600060405180830381600087803b1580156105b957600080fd5b505af11580156105cd573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167f85b5be9cf454e05e0bddf49315178102227c312078eefa3c00294fb4d912ae4e8686866040516106329392919061146f565b60405180910390a3506106456001600055565b5050505050565b6000828152600160208190526040909120015461066881610c58565b6106728383610d2e565b50505050565b73ffffffffffffffffffffffffffffffffffffffff811633146106c7576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6106d18282610ddb565b505050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61070081610c58565b610708610e7c565b50565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61073581610c58565b610708610edb565b7f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a61076781610c58565b73ffffffffffffffffffffffffffffffffffffffff82166107b4576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216600081815260036020526040808220805460ff19169055517f51085ddf9ebdded84b76e829eb58c4078e4b5bdf97d9a94723f336039da467919190a25050565b7f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a61083581610c58565b73ffffffffffffffffffffffffffffffffffffffff8216610882576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216600081815260036020526040808220805460ff19166001179055517faab7954e9d246b167ef88aeddad35209ca2489d95a8aeb59e288d9b19fae5a549190a25050565b6108e4610c15565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461090e81610c58565b610916610c62565b73ffffffffffffffffffffffffffffffffffffffff861660009081526003602052604090205460ff16610975576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6109b673ffffffffffffffffffffffffffffffffffffffff87167f000000000000000000000000000000000000000000000000000000000000000086610ca1565b6040517fb8969bd400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063b8969bd490610a309089908990899089908990600401611412565b600060405180830381600087803b158015610a4a57600080fd5b505af1158015610a5e573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fb9d4efa96044e5f5e03e696fa9ae2ff66911cc27e8a637c3627c75bc5b2241c88686866040516106329392919061146f565b60008281526001602081905260409091200154610adf81610c58565b6106728383610ddb565b610af1610c15565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e4610b1b81610c58565b610b23610c62565b73ffffffffffffffffffffffffffffffffffffffff841660009081526003602052604090205460ff16610b82576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610ba373ffffffffffffffffffffffffffffffffffffffff85168484610ca1565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f9b1bfa7fa9ee420a16e124f794c35ac9f90472acc99140eb2f6447c714cad8eb84604051610c0291815260200190565b60405180910390a3506106d16001600055565b600260005403610c51576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b6107088133610f18565b60025460ff1615610c9f576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6040805173ffffffffffffffffffffffffffffffffffffffff8416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb000000000000000000000000000000000000000000000000000000001790526106d1908490610fa9565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff16610dd357600083815260016020818152604080842073ffffffffffffffffffffffffffffffffffffffff87168086529252808420805460ff19169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a4506001610445565b506000610445565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff1615610dd357600083815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff86168085529252808320805460ff1916905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a4506001610445565b610e8461103f565b6002805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b610ee3610c62565b6002805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258610eb13390565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16610fa5576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82166004820152602481018390526044015b60405180910390fd5b5050565b6000610fcb73ffffffffffffffffffffffffffffffffffffffff84168361107b565b90508051600014158015610ff0575080806020019051810190610fee9190611492565b155b156106d1576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84166004820152602401610f9c565b60025460ff16610c9f576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606061108983836000611090565b9392505050565b6060814710156110ce576040517fcd786059000000000000000000000000000000000000000000000000000000008152306004820152602401610f9c565b6000808573ffffffffffffffffffffffffffffffffffffffff1684866040516110f791906114b4565b60006040518083038185875af1925050503d8060008114611134576040519150601f19603f3d011682016040523d82523d6000602084013e611139565b606091505b5091509150611149868383611153565b9695505050505050565b60608261116857611163826111e2565b611089565b815115801561118c575073ffffffffffffffffffffffffffffffffffffffff84163b155b156111db576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85166004820152602401610f9c565b5080611089565b8051156111f25780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006020828403121561123657600080fd5b81357fffffffff000000000000000000000000000000000000000000000000000000008116811461108957600080fd5b803573ffffffffffffffffffffffffffffffffffffffff8116811461128a57600080fd5b919050565b6000806000806000608086880312156112a757600080fd5b6112b086611266565b94506112be60208701611266565b935060408601359250606086013567ffffffffffffffff8111156112e157600080fd5b8601601f810188136112f257600080fd5b803567ffffffffffffffff81111561130957600080fd5b88602082840101111561131b57600080fd5b959894975092955050506020019190565b60006020828403121561133e57600080fd5b5035919050565b6000806040838503121561135857600080fd5b8235915061136860208401611266565b90509250929050565b60006020828403121561138357600080fd5b61108982611266565b6000806000606084860312156113a157600080fd5b6113aa84611266565b92506113b860208501611266565b929592945050506040919091013590565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff8616815273ffffffffffffffffffffffffffffffffffffffff851660208201528360408201526080606082015260006114646080830184866113c9565b979650505050505050565b8381526040602082015260006114896040830184866113c9565b95945050505050565b6000602082840312156114a457600080fd5b8151801515811461108957600080fd5b6000825160005b818110156114d557602081860181015185830152016114bb565b50600092019182525091905056fea26469706673582212207ea3ad4ba4a6d39c3be3cec464753448900300ac3b508b4000815de5b914c53064736f6c634300081a00338619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a", + Bin: "0x60a060405230608052600580546001600160a01b0319163317905534801561002657600080fd5b5061002f610154565b600554600180546001600160a01b039092166001600160a01b031992831617905560028054610123921691909117905560405161006b90610206565b60408082526004908201819052631d195cdd60e21b606083015260806020830181905282015263151154d560e21b60a082015260c001604051809103906000f0801580156100bd573d6000803e3d6000fd5b50600480546001600160a01b0319166001600160a01b039283161790556001546040513092919091169082906100f290610213565b6001600160a01b03938416815291831660208301529091166040820152606001604051809103906000f08015801561012e573d6000803e3d6000fd5b50600080546001600160a01b0319166001600160a01b0392909216919091179055610220565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156101a45760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146102035780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b610c9f8061376c83390190565b6117988061440b83390190565b608051613523610249600039600081816121220152818161214b01526125d701526135236000f3fe6080604052600436106102345760003560e01c80635c975abb11610138578063ad3cb1cc116100b0578063d547741f1161007f578063e63ab1e911610064578063e63ab1e9146106ff578063f340fa0114610733578063f45346dc1461074657600080fd5b8063d547741f146106bf578063dda79b75146106df57600080fd5b8063ad3cb1cc14610616578063ae7a3a6f1461065f578063b8969bd41461067f578063c0c53b8b1461069f57600080fd5b80638456cb591161010757806391d14854116100ec57806391d1485414610568578063a217fddf146105cd578063a783c789146105e257600080fd5b80638456cb59146105335780638c6f037f1461054857600080fd5b80635c975abb146104885780635d62c860146104bf5780636ab90f9b146104f357806381100bf01461051357600080fd5b806335c018db116101cb5780634f1ef2861161019a57806352d1902d1161017f57806352d1902d1461043357806357bec62f146104485780635b1125911461046857600080fd5b80634f1ef286146104005780635131ab591461041357600080fd5b806335c018db1461039857806336568abe146103ab5780633c2f05a8146103cb5780633f4ba83a146103eb57600080fd5b806321e093b11161020757806321e093b1146102d0578063248a9ca31461030857806329c59b5d146103655780632f2ff15d1461037857600080fd5b806301ffc9a71461023957806310188aef1461026e5780631b8b921d146102905780631cff79cd146102b0575b600080fd5b34801561024557600080fd5b50610259610254366004612f0d565b610766565b60405190151581526020015b60405180910390f35b34801561027a57600080fd5b5061028e610289366004612f6b565b6107ff565b005b34801561029c57600080fd5b5061028e6102ab366004612fcf565b6108f3565b6102c36102be366004612fcf565b6109be565b6040516102659190613090565b3480156102dc57600080fd5b506003546102f0906001600160a01b031681565b6040516001600160a01b039091168152602001610265565b34801561031457600080fd5b506103576103233660046130a3565b60009081527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052604090206001015490565b604051908152602001610265565b61028e610373366004612fcf565b610ac1565b34801561038457600080fd5b5061028e6103933660046130bc565b610c54565b61028e6103a6366004612fcf565b610c9e565b3480156103b757600080fd5b5061028e6103c63660046130bc565b610e8d565b3480156103d757600080fd5b506004546102f0906001600160a01b031681565b3480156103f757600080fd5b5061028e610ed9565b61028e61040e366004613117565b610f0e565b34801561041f57600080fd5b5061028e61042e36600461321e565b610f2d565b34801561043f57600080fd5b50610357611246565b34801561045457600080fd5b506002546102f0906001600160a01b031681565b34801561047457600080fd5b506001546102f0906001600160a01b031681565b34801561049457600080fd5b507fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff16610259565b3480156104cb57600080fd5b506103577f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b981565b3480156104ff57600080fd5b5061028e61050e36600461328d565b611275565b34801561051f57600080fd5b506005546102f0906001600160a01b031681565b34801561053f57600080fd5b5061028e6113a0565b34801561055457600080fd5b5061028e6105633660046132e7565b6113d2565b34801561057457600080fd5b506102596105833660046130bc565b60009182527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408084206001600160a01b0393909316845291905290205460ff1690565b3480156105d957600080fd5b50610357600081565b3480156105ee57600080fd5b506103577f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb81565b34801561062257600080fd5b506102c36040518060400160405280600581526020017f352e302e3000000000000000000000000000000000000000000000000000000081525081565b34801561066b57600080fd5b5061028e61067a366004612f6b565b6114e8565b34801561068b57600080fd5b5061028e61069a36600461321e565b6115dc565b3480156106ab57600080fd5b5061028e6106ba366004613339565b611795565b3480156106cb57600080fd5b5061028e6106da3660046130bc565b611a4a565b3480156106eb57600080fd5b506000546102f0906001600160a01b031681565b34801561070b57600080fd5b506103577f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b61028e610741366004612f6b565b611a8e565b34801561075257600080fd5b5061028e61076136600461337c565b611c23565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b0000000000000000000000000000000000000000000000000000000014806107f957507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b600061080a81611d1e565b6001600160a01b03821661084a576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002546001600160a01b03161561088d576040517f0c8dc01600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6108b77f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b983611d28565b5050600280547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6108fb611e15565b610903611e73565b6001600160a01b038316610943576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b826001600160a01b0316336001600160a01b03167f2a21062ee9199c2e205622999eeb7c3da73153674f36a0acd3f74fa6af67bde384846040516109889291906133f8565b60405180910390a36109b960017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b505050565b60607f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb6109ea81611d1e565b6109f2611e15565b6109fa611e73565b6001600160a01b038516610a3a576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610a47868686611f1a565b9050856001600160a01b03167fcaf938de11c367272220bfd1d2baa99ca46665e7bc4d85f00adb51b90fe1fa9f348787604051610a8693929190613414565b60405180910390a29150610ab960017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b509392505050565b610ac9611e15565b610ad1611e73565b34600003610b0b576040517f7671265e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038316610b4b576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546040516000916001600160a01b03169034908381818185875af1925050503d8060008114610b98576040519150601f19603f3d011682016040523d82523d6000602084013e610b9d565b606091505b5050905080610bd8576040517f79cacff100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b836001600160a01b0316336001600160a01b03167f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a43460008787604051610c22949392919061342e565b60405180910390a3506109b960017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020526040902060010154610c8e81611d1e565b610c988383611d28565b50505050565b7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb610cc881611d1e565b610cd0611e15565b610cd8611e73565b6001600160a01b038416610d18576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000846001600160a01b03163460405160006040518083038185875af1925050503d8060008114610d65576040519150601f19603f3d011682016040523d82523d6000602084013e610d6a565b606091505b5050905080610da5576040517facfdb44400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f8fcaa0b50000000000000000000000000000000000000000000000000000000081526001600160a01b03861690638fcaa0b590610dec90879087906004016133f8565b600060405180830381600087803b158015610e0657600080fd5b505af1158015610e1a573d6000803e3d6000fd5b50505050846001600160a01b03167fd5d7616b1678354a0dea9d7e57e6a090bff5babe9f8d6381fdbad16e89ba311c348686604051610e5b93929190613414565b60405180910390a250610c9860017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b6001600160a01b0381163314610ecf576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6109b98282611fc3565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610f0381611d1e565b610f0b612087565b50565b610f16612117565b610f1f826121e7565b610f2982826121f2565b5050565b7f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b9610f5781611d1e565b610f5f611e15565b610f67611e73565b83600003610fa1576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038516610fe1576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610feb8686612316565b611021576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b0386811660048301526024820186905287169063095ea7b3906044016020604051808303816000875af1158015611089573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110ad9190613457565b6110e3576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6110ee858484611f1a565b506110f98686612316565b61112f576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201526000906001600160a01b038816906370a0823190602401602060405180830381865afa15801561118f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111b39190613479565b905080156111c5576111c587826123a6565b856001600160a01b0316876001600160a01b03167f29c40793bffd84cb810179f15d1ceec72bc7f0785514c668ba36645cf99b738287878760405161120c93929190613414565b60405180910390a35061123e60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b505050505050565b60006112506125cc565b507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc90565b600480546040517f40c10f190000000000000000000000000000000000000000000000000000000081523092810192909252602482018590526001600160a01b0316906340c10f1990604401600060405180830381600087803b1580156112db57600080fd5b505af11580156112ef573d6000803e3d6000fd5b505060045461130d92506001600160a01b0316905085858585610f2d565b600480546040517f70a0823100000000000000000000000000000000000000000000000000000000815230928101929092526001600160a01b0316906370a0823190602401602060405180830381865afa15801561136f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113939190613479565b15610c9857610c98613492565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a6113ca81611d1e565b610f0b61262e565b6113da611e15565b6113e2611e73565b8360000361141c576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03851661145c576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6114673384866126a7565b846001600160a01b0316336001600160a01b03167f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a4868686866040516114b0949392919061342e565b60405180910390a36114e160017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b5050505050565b60006114f381611d1e565b6001600160a01b038216611533576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000546001600160a01b031615611576576040517fb337f37800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6115a07f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b983611d28565b5050600080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b7f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b961160681611d1e565b61160e611e15565b611616611e73565b83600003611650576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038516611690576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6116a46001600160a01b03871686866128ed565b6040517f8fcaa0b50000000000000000000000000000000000000000000000000000000081526001600160a01b03861690638fcaa0b5906116eb90869086906004016133f8565b600060405180830381600087803b15801561170557600080fd5b505af1158015611719573d6000803e3d6000fd5b50505050846001600160a01b0316866001600160a01b03167f723fc7be2448075379e4fdf1e6bf5fead954d2668d2da05dcb44ccfec4beeda786868660405161176493929190613414565b60405180910390a361123e60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156117e05750825b905060008267ffffffffffffffff1660011480156117fd5750303b155b90508115801561180b575080155b15611842576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84547fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000016600117855583156118a35784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff16680100000000000000001785555b6001600160a01b03881615806118c057506001600160a01b038716155b156118f7576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6118ff612961565b611907612969565b61190f612961565b611917612979565b611922600087611d28565b5061194d7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a87611d28565b50600180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b038a161790556119ab7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb89611d28565b50600380547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0389161790558315611a405784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b5050505050505050565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020526040902060010154611a8481611d1e565b610c988383611fc3565b611a96611e15565b611a9e611e73565b34600003611ad8576040517f7671265e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038116611b18576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546040516000916001600160a01b03169034908381818185875af1925050503d8060008114611b65576040519150601f19603f3d011682016040523d82523d6000602084013e611b6a565b606091505b5050905080611ba5576040517f79cacff100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60408051348152600060208201819052606082840181905282015290516001600160a01b0384169133917f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a49181900360800190a350610f0b60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b611c2b611e15565b611c33611e73565b81600003611c6d576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038316611cad576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611cb83382846126a7565b826001600160a01b0316336001600160a01b03167f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a484846040516109889291909182526001600160a01b0316602082015260606040820181905260009082015260800190565b610f0b8133612989565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff16611e0b576000848152602082815260408083206001600160a01b0387168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055611dc13390565b6001600160a01b0316836001600160a01b0316857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a460019150506107f9565b60009150506107f9565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff1615611e71576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0080547ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01611eee576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60029055565b60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b6060600080856001600160a01b0316348686604051611f3a9291906134c1565b60006040518083038185875af1925050503d8060008114611f77576040519150601f19603f3d011682016040523d82523d6000602084013e611f7c565b606091505b509150915081611fb8576040517facfdb44400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b9150505b9392505050565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff1615611e0b576000848152602082815260408083206001600160a01b038716808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339287917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a460019150506107f9565b61208f612a16565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001681557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a150565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806121b057507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166121a47f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b6001600160a01b031614155b15611e71576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610f2981611d1e565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa92505050801561226a575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820190925261226791810190613479565b60015b6122b0576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b03831660048201526024015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc811461230c576040517faa1d49a4000000000000000000000000000000000000000000000000000000008152600481018290526024016122a7565b6109b98383612a71565b6040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b038281166004830152600060248301819052919084169063095ea7b3906044016020604051808303816000875af1158015612382573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fbc9190613457565b6003546001600160a01b03908116908316036124f5576002546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152602481018390529083169063095ea7b3906044016020604051808303816000875af1158015612428573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061244c9190613457565b612482576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002546040517f743e0c9b000000000000000000000000000000000000000000000000000000008152600481018390526001600160a01b039091169063743e0c9b90602401600060405180830381600087803b1580156124e157600080fd5b505af115801561123e573d6000803e3d6000fd5b6000546040517fd936547e0000000000000000000000000000000000000000000000000000000081526001600160a01b0384811660048301529091169063d936547e90602401602060405180830381865afa158015612558573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061257c9190613457565b6125b2576040517fac2175f100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600054610f29906001600160a01b038481169116836128ed565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614611e71576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612636611e15565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011781557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258336120f9565b6003546001600160a01b0390811690831603612814576126d26001600160a01b038316843084612ac7565b6002546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152602481018390529083169063095ea7b3906044016020604051808303816000875af115801561273e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127629190613457565b612798576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002546040517f743e0c9b000000000000000000000000000000000000000000000000000000008152600481018390526001600160a01b039091169063743e0c9b90602401600060405180830381600087803b1580156127f757600080fd5b505af115801561280b573d6000803e3d6000fd5b50505050505050565b6000546040517fd936547e0000000000000000000000000000000000000000000000000000000081526001600160a01b0384811660048301529091169063d936547e90602401602060405180830381865afa158015612877573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061289b9190613457565b6128d1576040517fac2175f100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000546109b9906001600160a01b038481169186911684612ac7565b6040516001600160a01b038381166024830152604482018390526109b991859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050612b00565b611e71612b7c565b612971612b7c565b611e71612be3565b612981612b7c565b611e71612beb565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408083206001600160a01b038516845290915290205460ff16610f29576040517fe2517d3f0000000000000000000000000000000000000000000000000000000081526001600160a01b0382166004820152602481018390526044016122a7565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff16611e71576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612a7a82612c3c565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a2805115612abf576109b98282612ce4565b610f29612d5a565b6040516001600160a01b038481166024830152838116604483015260648201839052610c989186918216906323b872dd9060840161291a565b6000612b156001600160a01b03841683612d92565b90508051600014158015612b3a575080806020019051810190612b389190613457565b155b156109b9576040517f5274afe70000000000000000000000000000000000000000000000000000000081526001600160a01b03841660048201526024016122a7565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff16611e71576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611ef4612b7c565b612bf3612b7c565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055565b806001600160a01b03163b600003612c8b576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b03821660048201526024016122a7565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6060600080846001600160a01b031684604051612d0191906134d1565b600060405180830381855af49150503d8060008114612d3c576040519150601f19603f3d011682016040523d82523d6000602084013e612d41565b606091505b5091509150612d51858383612da0565b95945050505050565b3415611e71576040517fb398979f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6060611fbc83836000612e15565b606082612db557612db082612ecb565b611fbc565b8151158015612dcc57506001600160a01b0384163b155b15612e0e576040517f9996b3150000000000000000000000000000000000000000000000000000000081526001600160a01b03851660048201526024016122a7565b5080611fbc565b606081471015612e53576040517fcd7860590000000000000000000000000000000000000000000000000000000081523060048201526024016122a7565b600080856001600160a01b03168486604051612e6f91906134d1565b60006040518083038185875af1925050503d8060008114612eac576040519150601f19603f3d011682016040523d82523d6000602084013e612eb1565b606091505b5091509150612ec1868383612da0565b9695505050505050565b805115612edb5780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060208284031215612f1f57600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114611fbc57600080fd5b80356001600160a01b0381168114612f6657600080fd5b919050565b600060208284031215612f7d57600080fd5b611fbc82612f4f565b60008083601f840112612f9857600080fd5b50813567ffffffffffffffff811115612fb057600080fd5b602083019150836020828501011115612fc857600080fd5b9250929050565b600080600060408486031215612fe457600080fd5b612fed84612f4f565b9250602084013567ffffffffffffffff81111561300957600080fd5b61301586828701612f86565b9497909650939450505050565b60005b8381101561303d578181015183820152602001613025565b50506000910152565b6000815180845261305e816020860160208601613022565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000611fbc6020830184613046565b6000602082840312156130b557600080fd5b5035919050565b600080604083850312156130cf57600080fd5b823591506130df60208401612f4f565b90509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000806040838503121561312a57600080fd5b61313383612f4f565b9150602083013567ffffffffffffffff81111561314f57600080fd5b8301601f8101851361316057600080fd5b803567ffffffffffffffff81111561317a5761317a6130e8565b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8501160116810181811067ffffffffffffffff821117156131e6576131e66130e8565b6040528181528282016020018710156131fe57600080fd5b816020840160208301376000602083830101528093505050509250929050565b60008060008060006080868803121561323657600080fd5b61323f86612f4f565b945061324d60208701612f4f565b935060408601359250606086013567ffffffffffffffff81111561327057600080fd5b61327c88828901612f86565b969995985093965092949392505050565b600080600080606085870312156132a357600080fd5b6132ac85612f4f565b935060208501359250604085013567ffffffffffffffff8111156132cf57600080fd5b6132db87828801612f86565b95989497509550505050565b6000806000806000608086880312156132ff57600080fd5b61330886612f4f565b94506020860135935061331d60408701612f4f565b9250606086013567ffffffffffffffff81111561327057600080fd5b60008060006060848603121561334e57600080fd5b61335784612f4f565b925061336560208501612f4f565b915061337360408501612f4f565b90509250925092565b60008060006060848603121561339157600080fd5b61339a84612f4f565b92506020840135915061337360408501612f4f565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b60208152600061340c6020830184866133af565b949350505050565b838152604060208201526000612d516040830184866133af565b8481526001600160a01b0384166020820152606060408201526000612ec16060830184866133af565b60006020828403121561346957600080fd5b81518015158114611fbc57600080fd5b60006020828403121561348b57600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b8183823760009101908152919050565b600082516134e3818460208701613022565b919091019291505056fea26469706673582212203f4cfc4695a0460408bcfd19b26b817445cbe78cbdccf772504b10776428dcc264736f6c634300081a0033608060405234801561001057600080fd5b50604051610c9f380380610c9f83398101604081905261002f9161010d565b8181600361003d83826101ff565b50600461004a82826101ff565b50505050506102bd565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261007b57600080fd5b81516001600160401b0381111561009457610094610054565b604051601f8201601f19908116603f011681016001600160401b03811182821017156100c2576100c2610054565b6040528181528382016020018510156100da57600080fd5b60005b828110156100f9576020818601810151838301820152016100dd565b506000918101602001919091529392505050565b6000806040838503121561012057600080fd5b82516001600160401b0381111561013657600080fd5b6101428582860161006a565b602085015190935090506001600160401b0381111561016057600080fd5b61016c8582860161006a565b9150509250929050565b600181811c9082168061018a57607f821691505b6020821081036101aa57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156101fa57806000526020600020601f840160051c810160208510156101d75750805b601f840160051c820191505b818110156101f757600081556001016101e3565b50505b505050565b81516001600160401b0381111561021857610218610054565b61022c816102268454610176565b846101b0565b6020601f82116001811461026057600083156102485750848201515b600019600385901b1c1916600184901b1784556101f7565b600084815260208120601f198516915b828110156102905787850151825560209485019460019092019101610270565b50848210156102ae5786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b6109d3806102cc6000396000f3fe608060405234801561001057600080fd5b50600436106100be5760003560e01c806340c10f191161007657806395d89b411161005b57806395d89b4114610183578063a9059cbb1461018b578063dd62ed3e1461019e57600080fd5b806340c10f191461013857806370a082311461014d57600080fd5b806318160ddd116100a757806318160ddd1461010457806323b872dd14610116578063313ce5671461012957600080fd5b806306fdde03146100c3578063095ea7b3146100e1575b600080fd5b6100cb6101e4565b6040516100d891906107bf565b60405180910390f35b6100f46100ef366004610854565b610276565b60405190151581526020016100d8565b6002545b6040519081526020016100d8565b6100f461012436600461087e565b610290565b604051601281526020016100d8565b61014b610146366004610854565b6102b4565b005b61010861015b3660046108bb565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6100cb6102c2565b6100f4610199366004610854565b6102d1565b6101086101ac3660046108dd565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6060600380546101f390610910565b80601f016020809104026020016040519081016040528092919081815260200182805461021f90610910565b801561026c5780601f106102415761010080835404028352916020019161026c565b820191906000526020600020905b81548152906001019060200180831161024f57829003601f168201915b5050505050905090565b6000336102848185856102df565b60019150505b92915050565b60003361029e8582856102f1565b6102a98585856103c5565b506001949350505050565b6102be8282610470565b5050565b6060600480546101f390610910565b6000336102848185856103c5565b6102ec83838360016104cc565b505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146103bf57818110156103b0576040517ffb8f41b200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416600482015260248101829052604481018390526064015b60405180910390fd5b6103bf848484840360006104cc565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8316610415576040517f96c6fd1e000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff8216610465576040517fec442f05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b6102ec838383610614565b73ffffffffffffffffffffffffffffffffffffffff82166104c0576040517fec442f05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b6102be60008383610614565b73ffffffffffffffffffffffffffffffffffffffff841661051c576040517fe602df05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff831661056c576040517f94280d62000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260016020908152604080832093871683529290522082905580156103bf578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161060691815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff831661064c5780600260008282546106419190610963565b909155506106fe9050565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260208190526040902054818110156106d2576040517fe450d38c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8516600482015260248101829052604481018390526064016103a7565b73ffffffffffffffffffffffffffffffffffffffff841660009081526020819052604090209082900390555b73ffffffffffffffffffffffffffffffffffffffff821661072757600280548290039055610753565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090208054820190555b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516107b291815260200190565b60405180910390a3505050565b602081526000825180602084015260005b818110156107ed57602081860181015160408684010152016107d0565b5060006040828501015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011684010191505092915050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461084f57600080fd5b919050565b6000806040838503121561086757600080fd5b6108708361082b565b946020939093013593505050565b60008060006060848603121561089357600080fd5b61089c8461082b565b92506108aa6020850161082b565b929592945050506040919091013590565b6000602082840312156108cd57600080fd5b6108d68261082b565b9392505050565b600080604083850312156108f057600080fd5b6108f98361082b565b91506109076020840161082b565b90509250929050565b600181811c9082168061092457607f821691505b60208210810361095d577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b8082018082111561028a577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea26469706673582212207e804ca539d49155d2b6bc19268ce22f9f857027c75247d69fb0d56a089c93d464736f6c634300081a003360a060405234801561001057600080fd5b5060405161179838038061179883398101604081905261002f916101e5565b60016000556002805460ff191690556001600160a01b038316158061005b57506001600160a01b038216155b8061006d57506001600160a01b038116155b1561008b5760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b0383166080526100a3600082610134565b506100ce7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a82610134565b506100f97f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e483610134565b5061011260008051602061177883398151915282610134565b5061012b60008051602061177883398151915283610134565b50505050610228565b60008281526001602090815260408083206001600160a01b038516845290915281205460ff166101bf5760008381526001602081815260408084206001600160a01b0387168086529252808420805460ff19169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45060016101c3565b5060005b92915050565b80516001600160a01b03811681146101e057600080fd5b919050565b6000806000606084860312156101fa57600080fd5b610203846101c9565b9250610211602085016101c9565b915061021f604085016101c9565b90509250925092565b60805161151961025f6000396000818161019e01528181610500015281816105620152818161099101526109f301526115196000f3fe608060405234801561001057600080fd5b506004361061016c5760003560e01c806385f438c1116100cd578063c8a0236211610081578063d936547e11610066578063d936547e14610355578063d9caed1214610378578063e63ab1e91461038b57600080fd5b8063c8a023621461032f578063d547741f1461034257600080fd5b80639a590427116100b25780639a590427146103015780639b19251a14610314578063a217fddf1461032757600080fd5b806385f438c11461029457806391d14854146102bb57600080fd5b806336568abe11610124578063570618e111610109578063570618e11461025a5780635c975abb146102815780638456cb591461028c57600080fd5b806336568abe1461023f5780633f4ba83a1461025257600080fd5b806321fc65f21161015557806321fc65f2146101e5578063248a9ca3146101fa5780632f2ff15d1461022c57600080fd5b806301ffc9a714610171578063116191b614610199575b600080fd5b61018461017f366004611224565b6103b2565b60405190151581526020015b60405180910390f35b6101c07f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610190565b6101f86101f336600461128f565b61044b565b005b61021e61020836600461132c565b6000908152600160208190526040909120015490565b604051908152602001610190565b6101f861023a366004611345565b61064c565b6101f861024d366004611345565b610678565b6101f86106d6565b61021e7f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a81565b60025460ff16610184565b6101f861070b565b61021e7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b6101846102c9366004611345565b600091825260016020908152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b6101f861030f366004611371565b61073d565b6101f8610322366004611371565b61080b565b61021e600081565b6101f861033d36600461128f565b6108dc565b6101f8610350366004611345565b610ac3565b610184610363366004611371565b60036020526000908152604090205460ff1681565b6101f861038636600461138c565b610ae9565b61021e7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061044557507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b610453610c15565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461047d81610c58565b610485610c62565b73ffffffffffffffffffffffffffffffffffffffff861660009081526003602052604090205460ff166104e4576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61052573ffffffffffffffffffffffffffffffffffffffff87167f000000000000000000000000000000000000000000000000000000000000000086610ca1565b6040517f5131ab5900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690635131ab599061059f9089908990899089908990600401611412565b600060405180830381600087803b1580156105b957600080fd5b505af11580156105cd573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167f85b5be9cf454e05e0bddf49315178102227c312078eefa3c00294fb4d912ae4e8686866040516106329392919061146f565b60405180910390a3506106456001600055565b5050505050565b6000828152600160208190526040909120015461066881610c58565b6106728383610d2e565b50505050565b73ffffffffffffffffffffffffffffffffffffffff811633146106c7576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6106d18282610ddb565b505050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61070081610c58565b610708610e7c565b50565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61073581610c58565b610708610edb565b7f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a61076781610c58565b73ffffffffffffffffffffffffffffffffffffffff82166107b4576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216600081815260036020526040808220805460ff19169055517f51085ddf9ebdded84b76e829eb58c4078e4b5bdf97d9a94723f336039da467919190a25050565b7f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a61083581610c58565b73ffffffffffffffffffffffffffffffffffffffff8216610882576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216600081815260036020526040808220805460ff19166001179055517faab7954e9d246b167ef88aeddad35209ca2489d95a8aeb59e288d9b19fae5a549190a25050565b6108e4610c15565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461090e81610c58565b610916610c62565b73ffffffffffffffffffffffffffffffffffffffff861660009081526003602052604090205460ff16610975576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6109b673ffffffffffffffffffffffffffffffffffffffff87167f000000000000000000000000000000000000000000000000000000000000000086610ca1565b6040517fb8969bd400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063b8969bd490610a309089908990899089908990600401611412565b600060405180830381600087803b158015610a4a57600080fd5b505af1158015610a5e573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fb9d4efa96044e5f5e03e696fa9ae2ff66911cc27e8a637c3627c75bc5b2241c88686866040516106329392919061146f565b60008281526001602081905260409091200154610adf81610c58565b6106728383610ddb565b610af1610c15565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e4610b1b81610c58565b610b23610c62565b73ffffffffffffffffffffffffffffffffffffffff841660009081526003602052604090205460ff16610b82576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610ba373ffffffffffffffffffffffffffffffffffffffff85168484610ca1565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f9b1bfa7fa9ee420a16e124f794c35ac9f90472acc99140eb2f6447c714cad8eb84604051610c0291815260200190565b60405180910390a3506106d16001600055565b600260005403610c51576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b6107088133610f18565b60025460ff1615610c9f576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6040805173ffffffffffffffffffffffffffffffffffffffff8416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb000000000000000000000000000000000000000000000000000000001790526106d1908490610fa9565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff16610dd357600083815260016020818152604080842073ffffffffffffffffffffffffffffffffffffffff87168086529252808420805460ff19169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a4506001610445565b506000610445565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff1615610dd357600083815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff86168085529252808320805460ff1916905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a4506001610445565b610e8461103f565b6002805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b610ee3610c62565b6002805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258610eb13390565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16610fa5576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82166004820152602481018390526044015b60405180910390fd5b5050565b6000610fcb73ffffffffffffffffffffffffffffffffffffffff84168361107b565b90508051600014158015610ff0575080806020019051810190610fee9190611492565b155b156106d1576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84166004820152602401610f9c565b60025460ff16610c9f576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606061108983836000611090565b9392505050565b6060814710156110ce576040517fcd786059000000000000000000000000000000000000000000000000000000008152306004820152602401610f9c565b6000808573ffffffffffffffffffffffffffffffffffffffff1684866040516110f791906114b4565b60006040518083038185875af1925050503d8060008114611134576040519150601f19603f3d011682016040523d82523d6000602084013e611139565b606091505b5091509150611149868383611153565b9695505050505050565b60608261116857611163826111e2565b611089565b815115801561118c575073ffffffffffffffffffffffffffffffffffffffff84163b155b156111db576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85166004820152602401610f9c565b5080611089565b8051156111f25780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006020828403121561123657600080fd5b81357fffffffff000000000000000000000000000000000000000000000000000000008116811461108957600080fd5b803573ffffffffffffffffffffffffffffffffffffffff8116811461128a57600080fd5b919050565b6000806000806000608086880312156112a757600080fd5b6112b086611266565b94506112be60208701611266565b935060408601359250606086013567ffffffffffffffff8111156112e157600080fd5b8601601f810188136112f257600080fd5b803567ffffffffffffffff81111561130957600080fd5b88602082840101111561131b57600080fd5b959894975092955050506020019190565b60006020828403121561133e57600080fd5b5035919050565b6000806040838503121561135857600080fd5b8235915061136860208401611266565b90509250929050565b60006020828403121561138357600080fd5b61108982611266565b6000806000606084860312156113a157600080fd5b6113aa84611266565b92506113b860208501611266565b929592945050506040919091013590565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff8616815273ffffffffffffffffffffffffffffffffffffffff851660208201528360408201526080606082015260006114646080830184866113c9565b979650505050505050565b8381526040602082015260006114896040830184866113c9565b95945050505050565b6000602082840312156114a457600080fd5b8151801515811461108957600080fd5b6000825160005b818110156114d557602081860181015185830152016114bb565b50600092019182525091905056fea26469706673582212207ea3ad4ba4a6d39c3be3cec464753448900300ac3b508b4000815de5b914c53064736f6c634300081a00338619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a", } // GatewayEVMEchidnaTestABI is the input ABI used to generate the binding from. diff --git a/v2/pkg/gatewayevmupgrade.t.sol/gatewayevmuupsupgradetest.go b/v2/pkg/gatewayevmupgrade.t.sol/gatewayevmuupsupgradetest.go index 87bb904a..83e0e042 100644 --- a/v2/pkg/gatewayevmupgrade.t.sol/gatewayevmuupsupgradetest.go +++ b/v2/pkg/gatewayevmupgrade.t.sol/gatewayevmuupsupgradetest.go @@ -50,7 +50,7 @@ type StdInvariantFuzzSelector struct { // GatewayEVMUUPSUpgradeTestMetaData contains all meta data concerning the GatewayEVMUUPSUpgradeTest contract. var GatewayEVMUUPSUpgradeTestMetaData = &bind.MetaData{ ABI: "[{\"type\":\"function\",\"name\":\"IS_TEST\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeArtifacts\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedArtifacts_\",\"type\":\"string[]\",\"internalType\":\"string[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeContracts\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedContracts_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeSelectors\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedSelectors_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzSelector[]\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"selectors\",\"type\":\"bytes4[]\",\"internalType\":\"bytes4[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeSenders\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedSenders_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"failed\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"setUp\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"targetArtifactSelectors\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedArtifactSelectors_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzArtifactSelector[]\",\"components\":[{\"name\":\"artifact\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"selectors\",\"type\":\"bytes4[]\",\"internalType\":\"bytes4[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetArtifacts\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedArtifacts_\",\"type\":\"string[]\",\"internalType\":\"string[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetContracts\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedContracts_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetInterfaces\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedInterfaces_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzInterface[]\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"artifacts\",\"type\":\"string[]\",\"internalType\":\"string[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetSelectors\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedSelectors_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzSelector[]\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"selectors\",\"type\":\"bytes4[]\",\"internalType\":\"bytes4[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetSenders\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedSenders_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"testUpgradeAndForwardCallToReceivePayable\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"event\",\"name\":\"Call\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"receiver\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Deposit\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"receiver\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"asset\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Executed\",\"inputs\":[{\"name\":\"destination\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ExecutedV2\",\"inputs\":[{\"name\":\"destination\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ExecutedWithERC20\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedERC20\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"token\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"destination\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedNoParams\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedNonPayable\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"strs\",\"type\":\"string[]\",\"indexed\":false,\"internalType\":\"string[]\"},{\"name\":\"nums\",\"type\":\"uint256[]\",\"indexed\":false,\"internalType\":\"uint256[]\"},{\"name\":\"flag\",\"type\":\"bool\",\"indexed\":false,\"internalType\":\"bool\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedPayable\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"str\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"num\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"flag\",\"type\":\"bool\",\"indexed\":false,\"internalType\":\"bool\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedRevert\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Reverted\",\"inputs\":[{\"name\":\"destination\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RevertedWithERC20\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log\",\"inputs\":[{\"name\":\"\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_address\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_array\",\"inputs\":[{\"name\":\"val\",\"type\":\"uint256[]\",\"indexed\":false,\"internalType\":\"uint256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_array\",\"inputs\":[{\"name\":\"val\",\"type\":\"int256[]\",\"indexed\":false,\"internalType\":\"int256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_array\",\"inputs\":[{\"name\":\"val\",\"type\":\"address[]\",\"indexed\":false,\"internalType\":\"address[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_bytes\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_bytes32\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_int\",\"inputs\":[{\"name\":\"\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_address\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_array\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"uint256[]\",\"indexed\":false,\"internalType\":\"uint256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_array\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"int256[]\",\"indexed\":false,\"internalType\":\"int256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_array\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"address[]\",\"indexed\":false,\"internalType\":\"address[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_bytes\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_bytes32\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_decimal_int\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"},{\"name\":\"decimals\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_decimal_uint\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"decimals\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_int\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_string\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_uint\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_string\",\"inputs\":[{\"name\":\"\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_uint\",\"inputs\":[{\"name\":\"\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"logs\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"ApprovalFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ConnectorInitialized\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"CustodyInitialized\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"DepositFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ExecutionFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientERC20Amount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientETHAmount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NotWhitelistedInCustody\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZeroAddress\",\"inputs\":[]}]", - Bin: "0x6080604052600c8054600160ff199182168117909255601f80549091169091179055348015602c57600080fd5b5061c0078061003c6000396000f3fe608060405234801561001057600080fd5b50600436106100ea5760003560e01c806385226c811161008c578063b5508aa911610066578063b5508aa91461018b578063ba414fa614610193578063e20c9f71146101ab578063fa7626d4146101b357600080fd5b806385226c8114610159578063916a17c61461016e578063b0464fdc1461018357600080fd5b80633e5e3c23116100c85780633e5e3c231461012c5780633f7286f41461013457806366d9a9a01461013c5780637a380ebf1461015157600080fd5b80630a9254e4146100ef5780631ed7831c146100f95780632ade388014610117575b600080fd5b6100f76101c0565b005b610101610a85565b60405161010e919061620b565b60405180910390f35b61011f610ae7565b60405161010e91906162a7565b610101610c29565b610101610c89565b610144610ce9565b60405161010e919061640d565b6100f7610e6b565b61016161152d565b60405161010e91906164ab565b6101766115fd565b60405161010e9190616522565b6101766116f8565b6101616117f3565b61019b6118c3565b604051901515815260200161010e565b610101611997565b601f5461019b9060ff1681565b602680547fffffffffffffffffffffffff00000000000000000000000000000000000000009081163017909155602780548216611234179055602880549091166156781790556040516102129061611e565b60408082526004908201527f746573740000000000000000000000000000000000000000000000000000000060608201526080602082018190526003908201527f54544b000000000000000000000000000000000000000000000000000000000060a082015260c001604051809103906000f080158015610297573d6000803e3d6000fd5b50602480547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03929092169190911790556040516102dc9061611e565b604080825260049082018190527f7a6574610000000000000000000000000000000000000000000000000000000060608301526080602083018190528201527f5a4554410000000000000000000000000000000000000000000000000000000060a082015260c001604051809103906000f080158015610360573d6000803e3d6000fd5b50602580547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03928316908117909155604080518082018252600e81527f4761746577617945564d2e736f6c00000000000000000000000000000000000060208201526028546026549251908516602482015260448101939093529216606482015261044f919060840160408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fc0c53b8b000000000000000000000000000000000000000000000000000000001790526119f7565b601f80547fffffffffffffffffffffff0000000000000000000000000000000000000000ff166101006001600160a01b0393841681029190911791829055602080549190920483167fffffffffffffffffffffffff000000000000000000000000000000000000000090911681179091556028546026546040519293918216929116906104db9061612b565b6001600160a01b03938416815291831660208301529091166040820152606001604051809103906000f080158015610517573d6000803e3d6000fd5b50602280547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03928316179055602054602554602854602654604051938516949283169391831692169061057290616138565b6001600160a01b039485168152928416602084015290831660408301529091166060820152608001604051809103906000f0801580156105b6573d6000803e3d6000fd5b50602380547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03929092169190911790556040516105fb90616145565b604051809103906000f080158015610617573d6000803e3d6000fd5b50602180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039283161790556028546040517fc88a5e6d00000000000000000000000000000000000000000000000000000000815291166004820152670de0b6b3a76400006024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c88a5e6d90604401600060405180830381600087803b1580156106c357600080fd5b505af11580156106d7573d6000803e3d6000fd5b50506026546040517f06447d560000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506306447d569150602401600060405180830381600087803b15801561074d57600080fd5b505af1158015610761573d6000803e3d6000fd5b50506020546022546040517fae7a3a6f0000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201529116925063ae7a3a6f9150602401600060405180830381600087803b1580156107c757600080fd5b505af11580156107db573d6000803e3d6000fd5b50506020546023546040517f10188aef0000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152911692506310188aef9150602401600060405180830381600087803b15801561084157600080fd5b505af1158015610855573d6000803e3d6000fd5b505050507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b03166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156108b757600080fd5b505af11580156108cb573d6000803e3d6000fd5b5050602480546026546040517f40c10f190000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620f4240938101939093521692506340c10f199150604401600060405180830381600087803b15801561093c57600080fd5b505af1158015610950573d6000803e3d6000fd5b5050602480546022546040517fa9059cbb0000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201526207a1209381019390935216925063a9059cbb91506044016020604051808303816000875af11580156109c6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109ea91906165b9565b506028546040517fc88a5e6d0000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152670de0b6b3a76400006024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c88a5e6d90604401600060405180830381600087803b158015610a6b57600080fd5b505af1158015610a7f573d6000803e3d6000fd5b50505050565b60606016805480602002602001604051908101604052809291908181526020018280548015610add57602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610abf575b5050505050905090565b6060601e805480602002602001604051908101604052809291908181526020016000905b82821015610c2057600084815260208082206040805180820182526002870290920180546001600160a01b03168352600181018054835181870281018701909452808452939591948681019491929084015b82821015610c09578382906000526020600020018054610b7c906165db565b80601f0160208091040260200160405190810160405280929190818152602001828054610ba8906165db565b8015610bf55780601f10610bca57610100808354040283529160200191610bf5565b820191906000526020600020905b815481529060010190602001808311610bd857829003601f168201915b505050505081526020019060010190610b5d565b505050508152505081526020019060010190610b0b565b50505050905090565b60606018805480602002602001604051908101604052809291908181526020018280548015610add576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311610abf575050505050905090565b60606017805480602002602001604051908101604052809291908181526020018280548015610add576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311610abf575050505050905090565b6060601b805480602002602001604051908101604052809291908181526020016000905b82821015610c205783829060005260206000209060020201604051806040016040529081600082018054610d40906165db565b80601f0160208091040260200160405190810160405280929190818152602001828054610d6c906165db565b8015610db95780601f10610d8e57610100808354040283529160200191610db9565b820191906000526020600020905b815481529060010190602001808311610d9c57829003601f168201915b5050505050815260200160018201805480602002602001604051908101604052809291908181526020018280548015610e5357602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019060040190602082600301049283019260010382029150808411610e005790505b50505050508152505081526020019060010190610d0d565b60208054604080517fdda79b7500000000000000000000000000000000000000000000000000000000815290516000936001600160a01b039093169263dda79b7592600480820193918290030181865afa158015610ecd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ef19190616628565b60208054604080517f5b11259100000000000000000000000000000000000000000000000000000000815290519394506000936001600160a01b0390921692635b112591926004808401938290030181865afa158015610f55573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f799190616628565b604080518082018252600f81527f48656c6c6f2c20466f756e647279210000000000000000000000000000000000602080830191909152601f5483518085018552601981527f4761746577617945564d55706772616465546573742e736f6c00000000000000818401528451928301909452600082526026549495509193602a93600193670de0b6b3a764000093611023936001600160a01b036101009093048316939216611a16565b600084848460405160240161103a93929190616651565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe04d4f9700000000000000000000000000000000000000000000000000000000179052601f5460215491517ff30c7ba30000000000000000000000000000000000000000000000000000000081529293506001600160a01b03610100909104811692737109709ecfa91a80626ff3989d68f67f5b1dd12d9263f30c7ba392611100929116908790879060040161667b565b600060405180830381600087803b15801561111a57600080fd5b505af115801561112e573d6000803e3d6000fd5b50506021546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b1580156111c057600080fd5b505af11580156111d4573d6000803e3d6000fd5b50506020546040517f1f1ff1f5fb41346850b2f5c04e6c767e2f1c8a525c5c0c5cdb60cdf3ca5f62fa935061121d92506001600160a01b039091169086908a908a908a906166a3565b60405180910390a16020546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b1580156112b357600080fd5b505af11580156112c7573d6000803e3d6000fd5b50506021546040516001600160a01b0390911692507f373df382b9c587826f3de13f16d67f8d99f28ee947fc0924c6ef2d6d2c7e8546915061130c90869086906166e4565b60405180910390a26028546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561138657600080fd5b505af115801561139a573d6000803e3d6000fd5b50506021546040517f1cff79cd0000000000000000000000000000000000000000000000000000000081526001600160a01b038086169450631cff79cd935087926113ec9291169087906004016166fd565b60006040518083038185885af115801561140a573d6000803e3d6000fd5b50505050506040513d6000823e601f3d908101601f191682016040526114339190810190616807565b5060208054604080517fdda79b7500000000000000000000000000000000000000000000000000000000815290516114c0938c936001600160a01b03169263dda79b7592600480830193928290030181865afa158015611497573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114bb9190616628565b611a32565b60208054604080517f5b1125910000000000000000000000000000000000000000000000000000000081529051611523938b936001600160a01b031692635b11259192600480830193928290030181865afa158015611497573d6000803e3d6000fd5b5050505050505050565b6060601a805480602002602001604051908101604052809291908181526020016000905b82821015610c20578382906000526020600020018054611570906165db565b80601f016020809104026020016040519081016040528092919081815260200182805461159c906165db565b80156115e95780601f106115be576101008083540402835291602001916115e9565b820191906000526020600020905b8154815290600101906020018083116115cc57829003601f168201915b505050505081526020019060010190611551565b6060601d805480602002602001604051908101604052809291908181526020016000905b82821015610c205760008481526020908190206040805180820182526002860290920180546001600160a01b031683526001810180548351818702810187019094528084529394919385830193928301828280156116e057602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168152602001906004019060208260030104928301926001038202915080841161168d5790505b50505050508152505081526020019060010190611621565b6060601c805480602002602001604051908101604052809291908181526020016000905b82821015610c205760008481526020908190206040805180820182526002860290920180546001600160a01b031683526001810180548351818702810187019094528084529394919385830193928301828280156117db57602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190600401906020826003010492830192600103820291508084116117885790505b5050505050815250508152602001906001019061171c565b60606019805480602002602001604051908101604052809291908181526020016000905b82821015610c20578382906000526020600020018054611836906165db565b80601f0160208091040260200160405190810160405280929190818152602001828054611862906165db565b80156118af5780601f10611884576101008083540402835291602001916118af565b820191906000526020600020905b81548152906001019060200180831161189257829003601f168201915b505050505081526020019060010190611817565b60085460009060ff16156118db575060085460ff1690565b6040517f667f9d70000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d600482018190527f6661696c65640000000000000000000000000000000000000000000000000000602483015260009163667f9d7090604401602060405180830381865afa15801561196c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611990919061683c565b1415905090565b60606015805480602002602001604051908101604052809291908181526020018280548015610add576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311610abf575050505050905090565b6000611a01616152565b611a0c848483611ac2565b9150505b92915050565b611a1e616152565b611a2b8585858486611b3d565b5050505050565b6040517f515361f60000000000000000000000000000000000000000000000000000000081526001600160a01b03808416600483015282166024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063515361f69060440160006040518083038186803b158015611aa657600080fd5b505afa158015611aba573d6000803e3d6000fd5b505050505050565b600080611acf8584611c3e565b9050611b326040518060400160405280601d81526020017f4552433139363750726f78792e736f6c3a4552433139363750726f78790000008152508286604051602001611b1d9291906166fd565b60405160208183030381529060405285611c4a565b9150505b9392505050565b6040517f06447d560000000000000000000000000000000000000000000000000000000081526001600160a01b03821660048201528190737109709ecfa91a80626ff3989d68f67f5b1dd12d9081906306447d5690602401600060405180830381600087803b158015611baf57600080fd5b505af1925050508015611bc0575060015b611bd557611bd087878787611c78565b611c35565b611be187878787611c78565b806001600160a01b03166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015611c1c57600080fd5b505af1158015611c30573d6000803e3d6000fd5b505050505b50505050505050565b6000611b368383611c91565b60c08101515160009015611c6e57611c6784848460c00151611cac565b9050611b36565b611c678484611e52565b6000611c848483611f3d565b9050611a2b858285611f49565b6000611c9d8383612313565b611b3683836020015184611c4a565b600080611cb7612323565b90506000611cc586836123f6565b90506000611cdc826060015183602001518561289c565b90506000611cec83838989612aae565b90506000611cf98261392b565b602081015181519192509060030b15611d6c57898260400151604051602001611d23929190616855565b60408051601f19818403018152908290527f08c379a0000000000000000000000000000000000000000000000000000000008252611d63916004016168d6565b60405180910390fd5b6000611daf6040518060400160405280601581526020017f4465706c6f79656420746f20616464726573733a200000000000000000000000815250836001613afa565b6040517fc6ce059d000000000000000000000000000000000000000000000000000000008152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c6ce059d90611e029084906004016168d6565b602060405180830381865afa158015611e1f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e439190616628565b9b9a5050505050505050505050565b6040517f8d1cc9250000000000000000000000000000000000000000000000000000000081526000908190737109709ecfa91a80626ff3989d68f67f5b1dd12d90638d1cc92590611ea79087906004016168d6565b600060405180830381865afa158015611ec4573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611eec9190810190616807565b90506000611f1a8285604051602001611f069291906168e9565b604051602081830303815290604052613cfa565b90506001600160a01b038116611a0c578484604051602001611d23929190616918565b6000611c9d8383613d0d565b6040517f667f9d700000000000000000000000000000000000000000000000000000000081526001600160a01b03841660048201527fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61036024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d90600090829063667f9d7090604401602060405180830381865afa158015611fe5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612009919061683c565b9050806121b057600061201b86613d19565b604080518082018252600581527f352e302e30000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201529091506120a6905b60408051808201825260008082526020918201528151808301909252845182528085019082015290613e06565b806120b2575060008451115b15612135576040517f4f1ef2860000000000000000000000000000000000000000000000000000000081526001600160a01b03871690634f1ef286906120fe90889088906004016166fd565b600060405180830381600087803b15801561211857600080fd5b505af115801561212c573d6000803e3d6000fd5b505050506121aa565b6040517f3659cfe60000000000000000000000000000000000000000000000000000000081526001600160a01b038681166004830152871690633659cfe690602401600060405180830381600087803b15801561219157600080fd5b505af11580156121a5573d6000803e3d6000fd5b505050505b50611a2b565b8060006121bc82613d19565b604080518082018252600581527f352e302e300000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015290915061221e90612079565b8061222a575060008551115b156122af576040517f9623609d0000000000000000000000000000000000000000000000000000000081526001600160a01b03831690639623609d90612278908a908a908a906004016169c3565b600060405180830381600087803b15801561229257600080fd5b505af11580156122a6573d6000803e3d6000fd5b50505050611c35565b6040517f99a88ec40000000000000000000000000000000000000000000000000000000081526001600160a01b03888116600483015287811660248301528316906399a88ec490604401600060405180830381600087803b158015611c1c57600080fd5b61231f82826000613e1a565b5050565b604080518082018252600381527f6f75740000000000000000000000000000000000000000000000000000000000602082015290517fd145736c000000000000000000000000000000000000000000000000000000008152606091737109709ecfa91a80626ff3989d68f67f5b1dd12d91829063d145736c906123aa9084906004016169f4565b600060405180830381865afa1580156123c7573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526123ef9190810190616a3b565b9250505090565b6124286040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b6000737109709ecfa91a80626ff3989d68f67f5b1dd12d90506124736040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b61247c85613f1d565b6020820152600061248c86614302565b90506000836001600160a01b031663d930a0e66040518163ffffffff1660e01b8152600401600060405180830381865afa1580156124ce573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526124f69190810190616a3b565b868385602001516040516020016125109493929190616a84565b60408051601f19818403018152908290527f60f9bb1100000000000000000000000000000000000000000000000000000000825291506000906001600160a01b038616906360f9bb11906125689085906004016168d6565b600060405180830381865afa158015612585573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526125ad9190810190616a3b565b6040517fdb4235f60000000000000000000000000000000000000000000000000000000081529091506001600160a01b0386169063db4235f6906125f5908490600401616b88565b602060405180830381865afa158015612612573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061263691906165b9565b61264b5781604051602001611d239190616bda565b6040517f49c4fac80000000000000000000000000000000000000000000000000000000081526001600160a01b038616906349c4fac890612690908490600401616c6c565b600060405180830381865afa1580156126ad573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526126d59190810190616a3b565b84526040517fdb4235f60000000000000000000000000000000000000000000000000000000081526001600160a01b0386169063db4235f69061271c908490600401616cbe565b602060405180830381865afa158015612739573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061275d91906165b9565b156127f2576040517f49c4fac80000000000000000000000000000000000000000000000000000000081526001600160a01b038616906349c4fac8906127a7908490600401616cbe565b600060405180830381865afa1580156127c4573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526127ec9190810190616a3b565b60408501525b846001600160a01b03166349c4fac88286600001516040516020016128179190616d10565b6040516020818303038152906040526040518363ffffffff1660e01b8152600401612843929190616d7c565b600060405180830381865afa158015612860573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526128889190810190616a3b565b606085015250608083015250949350505050565b60408051600480825260a0820190925260609160009190816020015b60608152602001906001900390816128b85790505090506040518060400160405280600481526020017f67726570000000000000000000000000000000000000000000000000000000008152508160008151811061291857612918616da1565b60200260200101819052506040518060400160405280600381526020017f2d726c00000000000000000000000000000000000000000000000000000000008152508160018151811061296c5761296c616da1565b6020026020010181905250846040516020016129889190616dd0565b604051602081830303815290604052816002815181106129aa576129aa616da1565b6020026020010181905250826040516020016129c69190616e3c565b604051602081830303815290604052816003815181106129e8576129e8616da1565b602002602001018190525060006129fe8261392b565b602080820151604080518082018252600581527f2e6a736f6e0000000000000000000000000000000000000000000000000000008185019081528251808401845260008082529086015282518084019093529051825292810192909252919250612a8f9060408051808201825260008082526020918201528151808301909252845182528085019082015290614585565b612aa45785604051602001611d239190616e7d565b9695505050505050565b60a0810151604080518082018252600080825260209182015281518083019092528251808352928101910152606090737109709ecfa91a80626ff3989d68f67f5b1dd12d9015612afe565b511590565b612c7257826020015115612bba576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605860248201527f54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f742060448201527f62652075736564207768656e207468652060736b6970566572696679536f757260648201527f6365436f646560206f7074696f6e206973206074727565600000000000000000608482015260a401611d63565b8260c0015115612c72576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605360248201527f54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f742060448201527f62652075736564207768656e207468652060736b69704c6963656e736554797060648201527f6560206f7074696f6e2069732060747275656000000000000000000000000000608482015260a401611d63565b6040805160ff8082526120008201909252600091816020015b6060815260200190600190039081612c8b57905050905060006040518060400160405280600381526020017f6e70780000000000000000000000000000000000000000000000000000000000815250828280612ce690616f3d565b935060ff1681518110612cfb57612cfb616da1565b60200260200101819052506040518060400160405280600d81526020017f302e302e312d616c7068612e3700000000000000000000000000000000000000815250604051602001612d4c9190616f5c565b604051602081830303815290604052828280612d6790616f3d565b935060ff1681518110612d7c57612d7c616da1565b60200260200101819052506040518060400160405280600681526020017f6465706c6f790000000000000000000000000000000000000000000000000000815250828280612dc990616f3d565b935060ff1681518110612dde57612dde616da1565b60200260200101819052506040518060400160405280600e81526020017f2d2d636f6e74726163744e616d65000000000000000000000000000000000000815250828280612e2b90616f3d565b935060ff1681518110612e4057612e40616da1565b60200260200101819052508760200151828280612e5c90616f3d565b935060ff1681518110612e7157612e71616da1565b60200260200101819052506040518060400160405280600e81526020017f2d2d636f6e747261637450617468000000000000000000000000000000000000815250828280612ebe90616f3d565b935060ff1681518110612ed357612ed3616da1565b602090810291909101015287518282612eeb81616f3d565b935060ff1681518110612f0057612f00616da1565b60200260200101819052506040518060400160405280600981526020017f2d2d636861696e49640000000000000000000000000000000000000000000000815250828280612f4d90616f3d565b935060ff1681518110612f6257612f62616da1565b6020026020010181905250612f76466145e6565b8282612f8181616f3d565b935060ff1681518110612f9657612f96616da1565b60200260200101819052506040518060400160405280600f81526020017f2d2d6275696c64496e666f46696c650000000000000000000000000000000000815250828280612fe390616f3d565b935060ff1681518110612ff857612ff8616da1565b60200260200101819052508682828061301090616f3d565b935060ff168151811061302557613025616da1565b602090810291909101015285511561314c5760408051808201909152601581527f2d2d636f6e7374727563746f7242797465636f646500000000000000000000006020820152828261307681616f3d565b935060ff168151811061308b5761308b616da1565b60209081029190910101526040517f71aad10d0000000000000000000000000000000000000000000000000000000081526001600160a01b038416906371aad10d906130db9089906004016168d6565b600060405180830381865afa1580156130f8573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526131209190810190616a3b565b828261312b81616f3d565b935060ff168151811061314057613140616da1565b60200260200101819052505b84602001511561321c5760408051808201909152601281527f2d2d766572696679536f75726365436f646500000000000000000000000000006020820152828261319581616f3d565b935060ff16815181106131aa576131aa616da1565b60200260200101819052506040518060400160405280600581526020017f66616c73650000000000000000000000000000000000000000000000000000008152508282806131f790616f3d565b935060ff168151811061320c5761320c616da1565b60200260200101819052506133e3565b613254612af98660a0015160408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6132e75760408051808201909152600d81527f2d2d6c6963656e736554797065000000000000000000000000000000000000006020820152828261329781616f3d565b935060ff16815181106132ac576132ac616da1565b60200260200101819052508460a001516040516020016132cc9190616dd0565b6040516020818303038152906040528282806131f790616f3d565b8460c0015115801561332a57506040808901518151808301835260008082526020918201528251808401909352815183529081019082015261332890511590565b155b156133e35760408051808201909152600d81527f2d2d6c6963656e736554797065000000000000000000000000000000000000006020820152828261336e81616f3d565b935060ff168151811061338357613383616da1565b602002602001018190525061339788614686565b6040516020016133a79190616dd0565b6040516020818303038152906040528282806133c290616f3d565b935060ff16815181106133d7576133d7616da1565b60200260200101819052505b6040808601518151808301835260008082526020918201528251808401909352815183529081019082015261341790511590565b6134ac5760408051808201909152600b81527f2d2d72656c6179657249640000000000000000000000000000000000000000006020820152828261345a81616f3d565b935060ff168151811061346f5761346f616da1565b6020026020010181905250846040015182828061348b90616f3d565b935060ff16815181106134a0576134a0616da1565b60200260200101819052505b6060850151156135cd5760408051808201909152600681527f2d2d73616c740000000000000000000000000000000000000000000000000000602082015282826134f581616f3d565b935060ff168151811061350a5761350a616da1565b602090810291909101015260608501516040517fb11a19e800000000000000000000000000000000000000000000000000000000815260048101919091526001600160a01b0384169063b11a19e890602401600060405180830381865afa158015613579573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526135a19190810190616a3b565b82826135ac81616f3d565b935060ff16815181106135c1576135c1616da1565b60200260200101819052505b60e085015151156136745760408051808201909152600a81527f2d2d6761734c696d6974000000000000000000000000000000000000000000006020820152828261361781616f3d565b935060ff168151811061362c5761362c616da1565b60200260200101819052506136488560e00151600001516145e6565b828261365381616f3d565b935060ff168151811061366857613668616da1565b60200260200101819052505b60e0850151602001511561371e5760408051808201909152600a81527f2d2d676173507269636500000000000000000000000000000000000000000000602082015282826136c181616f3d565b935060ff16815181106136d6576136d6616da1565b60200260200101819052506136f28560e00151602001516145e6565b82826136fd81616f3d565b935060ff168151811061371257613712616da1565b60200260200101819052505b60e085015160400151156137c85760408051808201909152600e81527f2d2d6d61784665655065724761730000000000000000000000000000000000006020820152828261376b81616f3d565b935060ff168151811061378057613780616da1565b602002602001018190525061379c8560e00151604001516145e6565b82826137a781616f3d565b935060ff16815181106137bc576137bc616da1565b60200260200101819052505b60e085015160600151156138725760408051808201909152601681527f2d2d6d61785072696f72697479466565506572476173000000000000000000006020820152828261381581616f3d565b935060ff168151811061382a5761382a616da1565b60200260200101819052506138468560e00151606001516145e6565b828261385181616f3d565b935060ff168151811061386657613866616da1565b60200260200101819052505b60008160ff1667ffffffffffffffff8111156138905761389061671f565b6040519080825280602002602001820160405280156138c357816020015b60608152602001906001900390816138ae5790505b50905060005b8260ff168160ff16101561391c57838160ff16815181106138ec576138ec616da1565b6020026020010151828260ff168151811061390957613909616da1565b60209081029190910101526001016138c9565b5093505050505b949350505050565b6139526040518060600160405280600060030b815260200160608152602001606081525090565b60408051808201825260048082527f6261736800000000000000000000000000000000000000000000000000000000602083015291517fd145736c000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d92600091849163d145736c916139d891869101616fc7565b600060405180830381865afa1580156139f5573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052613a1d9190810190616a3b565b90506000613a2b8683615175565b90506000846001600160a01b031663f45c1ce7836040518263ffffffff1660e01b8152600401613a5b91906164ab565b6000604051808303816000875af1158015613a7a573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052613aa2919081019061700e565b805190915060030b15801590613abb5750602081015151155b8015613aca5750604081015151155b15612aa45781600081518110613ae257613ae2616da1565b6020026020010151604051602001611d2391906170c4565b60606000613b2f8560408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600080825260209182015281518083019092528651825280870190820152909150613b669082905b906152ca565b15613cc3576000613be382613bdd84613bd7613ba98a60408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6040805180820182526000808252602091820152815180830190925282518252918201519181019190915290565b906152f1565b90615353565b604080518082018252600181527f0a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152909150613c479082906152ca565b15613cb157604080518082018252600181527f0a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152613cae905b82906153d8565b90505b613cba816153fe565b92505050611b36565b8215613cdc578484604051602001611d239291906172b0565b5050604080516020810190915260008152611b36565b509392505050565b6000808251602084016000f09392505050565b61231f82826001613e1a565b60408051600481526024810182526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fad3cb1cc00000000000000000000000000000000000000000000000000000000179052905160609160009182916001600160a01b03861691613d8e9190617357565b6000604051808303816000865af19150503d8060008114613dcb576040519150601f19603f3d011682016040523d82523d6000602084013e613dd0565b606091505b50915091508115613def57808060200190518101906139239190616a3b565b505060408051602081019091526000815292915050565b6000613e128383615467565b159392505050565b8160a0015115613e2957505050565b6000613e36848484615542565b90506000613e438261392b565b602081015181519192509060030b158015613edf5750604080518082018252600781527f535543434553530000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152613edf90604080518082018252600080825260209182015281518083019092528451825280850190820152613b60565b15613eec57505050505050565b60408201515115613f0c578160400151604051602001611d239190617373565b80604051602001611d2391906173d1565b60606000613f528360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600481527f2e736f6c0000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152909150613fb7905b8290614585565b1561402657604080518082018252600481527f2e736f6c0000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152611b3690614021908390615add565b6153fe565b604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152614088905b8290615b67565b60010361415557604080518082018252600181527f3a00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526140ee90613ca7565b50604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152611b3690614021905b83906153d8565b604080518082018252600581527f2e6a736f6e000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526141b490613fb0565b156142eb57604080518082018252600181527f2f0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082018190528451808601909552925184528301529061421c908390615c01565b90506000816001835161422f919061743c565b8151811061423f5761423f616da1565b602002602001015190506142e26140216142b56040518060400160405280600581526020017f2e6a736f6e00000000000000000000000000000000000000000000000000000081525060408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b60408051808201825260008082526020918201528151808301909252855182528086019082015290615add565b95945050505050565b82604051602001611d23919061744f565b50919050565b606060006143378360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600481527f2e736f6c000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015290915061439990613fb0565b156143a757611b36816153fe565b604080518082018252600181527f3a000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261440690614081565b60010361447057604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152611b36906140219061414e565b604080518082018252600581527f2e6a736f6e000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526144cf90613fb0565b156142eb57604080518082018252600181527f2f00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820181905284518086019095529251845283015290614537908390615c01565b9050600181511115614573578060028251614552919061743c565b8151811061456257614562616da1565b602002602001015192505050919050565b5082604051602001611d23919061744f565b80518251600091111561459a57506000611a10565b815183516020850151600092916145b09161752d565b6145ba919061743c565b9050826020015181036145d1576001915050611a10565b82516020840151819020912014905092915050565b606060006145f383615ca6565b600101905060008167ffffffffffffffff8111156146135761461361671f565b6040519080825280601f01601f19166020018201604052801561463d576020820181803683370190505b5090508181016020015b600019017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a850494508461464757509392505050565b604081810151815180830183526000808252602091820181905283518085018552835181529282018383015283518085018552600a81527f554e4c4943454e5345440000000000000000000000000000000000000000000081840190815285518087018752838152840192909252845180860190955251845290830152606091614712905b8290613e06565b1561475257505060408051808201909152600481527f4e6f6e65000000000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600981527f556e6c6963656e73650000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526147b19061470b565b156147f157505060408051808201909152600981527f556e6c6963656e736500000000000000000000000000000000000000000000006020820152919050565b604080518082018252600381527f4d49540000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526148509061470b565b1561489057505060408051808201909152600381527f4d495400000000000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f47504c2d322e302d6f6e6c790000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526148ef9061470b565b806149545750604080518082018252601081527f47504c2d322e302d6f722d6c6174657200000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526149549061470b565b1561499457505060408051808201909152600981527f474e552047504c763200000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f47504c2d332e302d6f6e6c790000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526149f39061470b565b80614a585750604080518082018252601081527f47504c2d332e302d6f722d6c617465720000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152614a589061470b565b15614a9857505060408051808201909152600981527f474e552047504c763300000000000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4c47504c2d322e312d6f6e6c790000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152614af79061470b565b80614b5c5750604080518082018252601181527f4c47504c2d322e312d6f722d6c6174657200000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152614b5c9061470b565b15614b9c57505060408051808201909152600c81527f474e55204c47504c76322e3100000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4c47504c2d332e302d6f6e6c790000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152614bfb9061470b565b80614c605750604080518082018252601181527f4c47504c2d332e302d6f722d6c6174657200000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152614c609061470b565b15614ca057505060408051808201909152600a81527f474e55204c47504c7633000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f4253442d322d436c61757365000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152614cff9061470b565b15614d3f57505060408051808201909152600c81527f4253442d322d436c6175736500000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f4253442d332d436c61757365000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152614d9e9061470b565b15614dde57505060408051808201909152600c81527f4253442d332d436c6175736500000000000000000000000000000000000000006020820152919050565b604080518082018252600781527f4d504c2d322e300000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152614e3d9061470b565b15614e7d57505060408051808201909152600781527f4d504c2d322e30000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600781527f4f534c2d332e300000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152614edc9061470b565b15614f1c57505060408051808201909152600781527f4f534c2d332e30000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600a81527f4170616368652d322e300000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152614f7b9061470b565b15614fbb57505060408051808201909152600a81527f4170616368652d322e30000000000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4147504c2d332e302d6f6e6c79000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261501a9061470b565b8061507f5750604080518082018252601181527f4147504c2d332e302d6f722d6c617465720000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261507f9061470b565b156150bf57505060408051808201909152600a81527f474e55204147504c7633000000000000000000000000000000000000000000006020820152919050565b604080518082018252600881527f4255534c2d312e310000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261511e9061470b565b1561515e57505060408051808201909152600781527f42534c20312e31000000000000000000000000000000000000000000000000006020820152919050565b60408084015184519151611d239290602001617540565b60608060005b8451811015615200578185828151811061519757615197616da1565b60200260200101516040516020016151b09291906168e9565b6040516020818303038152906040529150600185516151cf919061743c565b81146151f857816040516020016151e691906176a9565b60405160208183030381529060405291505b60010161517b565b5060408051600380825260808201909252600091816020015b6060815260200190600190039081615219579050509050838160008151811061524457615244616da1565b60200260200101819052506040518060400160405280600281526020017f2d630000000000000000000000000000000000000000000000000000000000008152508160018151811061529857615298616da1565b602002602001018190525081816002815181106152b7576152b7616da1565b6020908102919091010152949350505050565b60208083015183518351928401516000936152e89291849190615d88565b14159392505050565b604080518082019091526000808252602082015260006153238460000151856020015185600001518660200151615e99565b9050836020015181615335919061743c565b8451859061534490839061743c565b90525060208401525090919050565b6040805180820190915260008082526020820152815183511015615378575081611a10565b602080830151908401516001911461539f5750815160208481015190840151829020919020145b80156153d0578251845185906153b690839061743c565b90525082516020850180516153cc90839061752d565b9052505b509192915050565b60408051808201909152600080825260208201526153f7838383615fb9565b5092915050565b60606000826000015167ffffffffffffffff81111561541f5761541f61671f565b6040519080825280601f01601f191660200182016040528015615449576020820181803683370190505b50905060006020820190506153f78185602001518660000151616064565b815181516000919081111561547a575081515b6020808501519084015160005b8381101561553357825182518082146155035760001960208710156154e2576001846154b489602061743c565b6154be919061752d565b6154c99060086176ea565b6154d49060026177e8565b6154de919061743c565b1990505b8181168382168181039114615500579750611a109650505050505050565b50505b61550e60208661752d565b945061551b60208561752d565b9350505060208161552c919061752d565b9050615487565b5084518651612aa491906177f4565b6060600061554e612323565b6040805160ff808252612000820190925291925060009190816020015b606081526020019060019003908161556b57905050905060006040518060400160405280600381526020017f6e707800000000000000000000000000000000000000000000000000000000008152508282806155c690616f3d565b935060ff16815181106155db576155db616da1565b60200260200101819052506040518060400160405280600781526020017f5e312e33322e330000000000000000000000000000000000000000000000000081525060405160200161562c9190617814565b60405160208183030381529060405282828061564790616f3d565b935060ff168151811061565c5761565c616da1565b60200260200101819052506040518060400160405280600881526020017f76616c69646174650000000000000000000000000000000000000000000000008152508282806156a990616f3d565b935060ff16815181106156be576156be616da1565b6020026020010181905250826040516020016156da9190616e3c565b6040516020818303038152906040528282806156f590616f3d565b935060ff168151811061570a5761570a616da1565b60200260200101819052506040518060400160405280600a81526020017f2d2d636f6e74726163740000000000000000000000000000000000000000000081525082828061575790616f3d565b935060ff168151811061576c5761576c616da1565b602002602001018190525061578187846160de565b828261578c81616f3d565b935060ff16815181106157a1576157a1616da1565b60209081029190910101528551511561584d5760408051808201909152600b81527f2d2d7265666572656e6365000000000000000000000000000000000000000000602082015282826157f381616f3d565b935060ff168151811061580857615808616da1565b60200260200101819052506158218660000151846160de565b828261582c81616f3d565b935060ff168151811061584157615841616da1565b60200260200101819052505b8560800151156158bb5760408051808201909152601881527f2d2d756e73616665536b697053746f72616765436865636b00000000000000006020820152828261589681616f3d565b935060ff16815181106158ab576158ab616da1565b6020026020010181905250615921565b84156159215760408051808201909152601281527f2d2d726571756972655265666572656e636500000000000000000000000000006020820152828261590081616f3d565b935060ff168151811061591557615915616da1565b60200260200101819052505b604086015151156159bd5760408051808201909152600d81527f2d2d756e73616665416c6c6f77000000000000000000000000000000000000006020820152828261596b81616f3d565b935060ff168151811061598057615980616da1565b6020026020010181905250856040015182828061599c90616f3d565b935060ff16815181106159b1576159b1616da1565b60200260200101819052505b856060015115615a275760408051808201909152601481527f2d2d756e73616665416c6c6f7752656e616d657300000000000000000000000060208201528282615a0681616f3d565b935060ff1681518110615a1b57615a1b616da1565b60200260200101819052505b60008160ff1667ffffffffffffffff811115615a4557615a4561671f565b604051908082528060200260200182016040528015615a7857816020015b6060815260200190600190039081615a635790505b50905060005b8260ff168160ff161015615ad157838160ff1681518110615aa157615aa1616da1565b6020026020010151828260ff1681518110615abe57615abe616da1565b6020908102919091010152600101615a7e565b50979650505050505050565b6040805180820190915260008082526020820152815183511015615b02575081611a10565b81518351602085015160009291615b189161752d565b615b22919061743c565b60208401519091506001908214615b43575082516020840151819020908220145b8015615b5e57835185518690615b5a90839061743c565b9052505b50929392505050565b6000808260000151615b8b8560000151866020015186600001518760200151615e99565b615b95919061752d565b90505b83516020850151615ba9919061752d565b81116153f75781615bb981617859565b9250508260000151615bf0856020015183615bd4919061743c565b8651615be0919061743c565b8386600001518760200151615e99565b615bfa919061752d565b9050615b98565b60606000615c0f8484615b67565b615c1a90600161752d565b67ffffffffffffffff811115615c3257615c3261671f565b604051908082528060200260200182016040528015615c6557816020015b6060815260200190600190039081615c505790505b50905060005b8151811015613cf257615c8161402186866153d8565b828281518110615c9357615c93616da1565b6020908102919091010152600101615c6b565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310615cef577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310615d1b576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc100008310615d3957662386f26fc10000830492506010015b6305f5e1008310615d51576305f5e100830492506008015b6127108310615d6557612710830492506004015b60648310615d77576064830492506002015b600a8310611a105760010192915050565b600080858411615e8f5760208411615e3b5760008415615dd3576001615daf86602061743c565b615dba9060086176ea565b615dc59060026177e8565b615dcf919061743c565b1990505b8351811685615de2898961752d565b615dec919061743c565b805190935082165b818114615e2657878411615e0e5787945050505050613923565b83615e1881617873565b945050828451169050615df4565b615e30878561752d565b945050505050613923565b838320615e48858861743c565b615e52908761752d565b91505b858210615e8d57848220808203615e7a57615e70868461752d565b9350505050613923565b615e8560018461743c565b925050615e55565b505b5092949350505050565b60008381868511615fa45760208511615f535760008515615ee5576001615ec187602061743c565b615ecc9060086176ea565b615ed79060026177e8565b615ee1919061743c565b1990505b84518116600087615ef68b8b61752d565b615f00919061743c565b855190915083165b828114615f4557818610615f2d57615f208b8b61752d565b9650505050505050613923565b85615f3781617859565b965050838651169050615f08565b859650505050505050613923565b508383206000905b615f65868961743c565b8211615fa257858320808203615f815783945050505050613923565b615f8c60018561752d565b9350508180615f9a90617859565b925050615f5b565b505b615fae878761752d565b979650505050505050565b60408051808201909152600080825260208201526000615feb8560000151866020015186600001518760200151615e99565b602080870180519186019190915251909150616007908261743c565b83528451602086015161601a919061752d565b8103616029576000855261605b565b83518351616037919061752d565b8551869061604690839061743c565b9052508351616055908261752d565b60208601525b50909392505050565b6020811061609c578151835261607b60208461752d565b925061608860208361752d565b915061609560208261743c565b9050616064565b60001981156160cb5760016160b283602061743c565b6160be906101006177e8565b6160c8919061743c565b90505b9151835183169219169190911790915250565b606060006160ec84846123f6565b80516020808301516040519394506161069390910161788a565b60405160208183030381529060405291505092915050565b610c9f806178e383390190565b6117988061858283390190565b61155a80619d1a83390190565b610d5e8061b27483390190565b6040518060e0016040528060608152602001606081526020016060815260200160001515815260200160001515815260200160001515815260200161619561619a565b905290565b604051806101000160405280600015158152602001600015158152602001606081526020016000801916815260200160608152602001606081526020016000151581526020016161956040518060800160405280600081526020016000815260200160008152602001600081525090565b602080825282518282018190526000918401906040840190835b8181101561624c5783516001600160a01b0316835260209384019390920191600101616225565b509095945050505050565b60005b8381101561627257818101518382015260200161625a565b50506000910152565b60008151808452616293816020860160208601616257565b601f01601f19169290920160200192915050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b828110156163a3577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452815180516001600160a01b03168652602090810151604082880181905281519088018190529101906060600582901b88018101919088019060005b81811015616389577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa08a850301835261637384865161627b565b6020958601959094509290920191600101616339565b5091975050506020948501949290920191506001016162cf565b50929695505050505050565b600081518084526020840193506020830160005b828110156164035781517fffffffff00000000000000000000000000000000000000000000000000000000168652602095860195909101906001016163c3565b5093949350505050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b828110156163a3577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08786030184528151805160408752616479604088018261627b565b905060208201519150868103602088015261649481836163af565b965050506020938401939190910190600101616435565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b828110156163a3577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc087860301845261650d85835161627b565b945060209384019391909101906001016164d3565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b828110156163a3577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc087860301845281516001600160a01b03815116865260208101519050604060208701526165a360408701826163af565b955050602093840193919091019060010161654a565b6000602082840312156165cb57600080fd5b81518015158114611b3657600080fd5b600181811c908216806165ef57607f821691505b6020821081036142fc577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006020828403121561663a57600080fd5b81516001600160a01b0381168114611b3657600080fd5b606081526000616664606083018661627b565b602083019490945250901515604090910152919050565b6001600160a01b03841681528260208201526060604082015260006142e2606083018461627b565b6001600160a01b038616815284602082015260a0604082015260006166cb60a083018661627b565b6060830194909452509015156080909101529392505050565b828152604060208201526000613923604083018461627b565b6001600160a01b0383168152604060208201526000613923604083018461627b565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040516060810167ffffffffffffffff811182821017156167715761677161671f565b60405290565b60008067ffffffffffffffff8411156167925761679261671f565b50604051601f19601f85018116603f0116810181811067ffffffffffffffff821117156167c1576167c161671f565b6040528381529050808284018510156167d957600080fd5b613cf2846020830185616257565b600082601f8301126167f857600080fd5b611b3683835160208501616777565b60006020828403121561681957600080fd5b815167ffffffffffffffff81111561683057600080fd5b611a0c848285016167e7565b60006020828403121561684e57600080fd5b5051919050565b7f4661696c656420746f206465706c6f7920636f6e74726163742000000000000081526000835161688d81601a850160208801616257565b7f3a20000000000000000000000000000000000000000000000000000000000000601a9184019182015283516168ca81601c840160208801616257565b01601c01949350505050565b602081526000611b36602083018461627b565b600083516168fb818460208801616257565b83519083019061690f818360208801616257565b01949350505050565b7f4661696c656420746f206465706c6f7920636f6e74726163742000000000000081526000835161695081601a850160208801616257565b7f207573696e6720636f6e7374727563746f722064617461202200000000000000601a91840191820152835161698d816033840160208801616257565b7f220000000000000000000000000000000000000000000000000000000000000060339290910191820152603401949350505050565b6001600160a01b03841681526001600160a01b03831660208201526060604082015260006142e2606083018461627b565b60408152600b60408201527f464f554e4452595f4f55540000000000000000000000000000000000000000006060820152608060208201526000611b36608083018461627b565b600060208284031215616a4d57600080fd5b815167ffffffffffffffff811115616a6457600080fd5b8201601f81018413616a7557600080fd5b611a0c84825160208401616777565b60008551616a96818460208a01616257565b7f2f000000000000000000000000000000000000000000000000000000000000009083019081528551616ad0816001840160208a01616257565b7f2f00000000000000000000000000000000000000000000000000000000000000600192909101918201528451616b0e816002840160208901616257565b6001818301019150507f2f0000000000000000000000000000000000000000000000000000000000000060018201528351616b50816002840160208801616257565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600292909101918201526007019695505050505050565b604081526000616b9b604083018461627b565b8281036020840152600481527f2e6173740000000000000000000000000000000000000000000000000000000060208201526040810191505092915050565b7f436f756c64206e6f742066696e642041535420696e2061727469666163742000815260008251616c1281601f850160208701616257565b7f2e205365742060617374203d20747275656020696e20666f756e6472792e746f601f9390910192830152507f6d6c000000000000000000000000000000000000000000000000000000000000603f820152604101919050565b604081526000616c7f604083018461627b565b8281036020840152601181527f2e6173742e6162736f6c7574655061746800000000000000000000000000000060208201526040810191505092915050565b604081526000616cd1604083018461627b565b8281036020840152600c81527f2e6173742e6c6963656e7365000000000000000000000000000000000000000060208201526040810191505092915050565b7f2e6d657461646174612e736f75726365732e5b27000000000000000000000000815260008251616d48816014850160208701616257565b7f275d2e6b656363616b32353600000000000000000000000000000000000000006014939091019283015250602001919050565b604081526000616d8f604083018561627b565b8281036020840152611b32818561627b565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f2200000000000000000000000000000000000000000000000000000000000000815260008251616e08816001850160208701616257565b7f22000000000000000000000000000000000000000000000000000000000000006001939091019283015250600201919050565b60008251616e4e818460208701616257565b7f2f6275696c642d696e666f000000000000000000000000000000000000000000920191825250600b01919050565b7f436f756c64206e6f742066696e64206275696c642d696e666f2066696c65207781527f697468206d61746368696e6720736f7572636520636f6465206861736820666f60208201527f7220636f6e747261637420000000000000000000000000000000000000000000604082015260008251616f0181604b850160208701616257565b91909101604b0192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600060ff821660ff8103616f5357616f53616f0e565b60010192915050565b7f406f70656e7a657070656c696e2f646566656e6465722d6465706c6f792d636c81527f69656e742d636c69400000000000000000000000000000000000000000000000602082015260008251616fba816029850160208701616257565b9190910160290192915050565b60408152601660408201527f4f50454e5a455050454c494e5f424153485f50415448000000000000000000006060820152608060208201526000611b36608083018461627b565b60006020828403121561702057600080fd5b815167ffffffffffffffff81111561703757600080fd5b82016060818503121561704957600080fd5b61705161674e565b81518060030b811461706257600080fd5b8152602082015167ffffffffffffffff81111561707e57600080fd5b61708a868285016167e7565b602083015250604082015167ffffffffffffffff8111156170aa57600080fd5b6170b6868285016167e7565b604083015250949350505050565b7f4661696c656420746f2072756e206261736820636f6d6d616e6420776974682081527f2200000000000000000000000000000000000000000000000000000000000000602082015260008251617122816021850160208701616257565b7f222e20496620796f7520617265207573696e672057696e646f77732c2073657460219390910192830152507f20746865204f50454e5a455050454c494e5f424153485f5041544820656e766960418201527f726f6e6d656e74207661726961626c6520746f207468652066756c6c7920717560618201527f616c69666965642070617468206f66207468652062617368206578656375746160818201527f626c652e20466f72206578616d706c652c20696620796f75206172652075736960a18201527f6e672047697420666f722057696e646f77732c206164642074686520666f6c6c60c18201527f6f77696e67206c696e6520696e20746865202e656e762066696c65206f66207960e18201527f6f75722070726f6a65637420287573696e6720666f727761726420736c6173686101018201527f6573293a0a4f50454e5a455050454c494e5f424153485f504154483d22433a2f6101218201527f50726f6772616d2046696c65732f4769742f62696e2f6261736822000000000061014182015261015c01919050565b7f4661696c656420746f2066696e64206c696e652077697468207072656669782081527f270000000000000000000000000000000000000000000000000000000000000060208201526000835161730e816021850160208801616257565b7f2720696e206f75747075743a2000000000000000000000000000000000000000602191840191820152835161734b81602e840160208801616257565b01602e01949350505050565b60008251617369818460208701616257565b9190910192915050565b7f4661696c656420746f2072756e2075706772616465207361666574792076616c81527f69646174696f6e3a200000000000000000000000000000000000000000000000602082015260008251616fba816029850160208701616257565b7f55706772616465207361666574792076616c69646174696f6e206661696c656481527f3a0a00000000000000000000000000000000000000000000000000000000000060208201526000825161742f816022850160208701616257565b9190910160220192915050565b81810381811115611a1057611a10616f0e565b7f436f6e7472616374206e616d652000000000000000000000000000000000000081526000825161748781600e850160208701616257565b7f206d75737420626520696e2074686520666f726d6174204d79436f6e74726163600e9390910192830152507f742e736f6c3a4d79436f6e7472616374206f72204d79436f6e74726163742e73602e8201527f6f6c206f72206f75742f4d79436f6e74726163742e736f6c2f4d79436f6e7472604e8201527f6163742e6a736f6e000000000000000000000000000000000000000000000000606e820152607601919050565b80820180821115611a1057611a10616f0e565b7f53504458206c6963656e7365206964656e746966696572200000000000000000815260008351617578816018850160208801616257565b7f20696e200000000000000000000000000000000000000000000000000000000060189184019182015283516175b581601c840160208801616257565b7f20646f6573206e6f74206c6f6f6b206c696b65206120737570706f7274656420601c92909101918201527f6c6963656e736520666f7220626c6f636b206578706c6f726572207665726966603c8201527f69636174696f6e2e205573652074686520606c6963656e73655479706560206f605c8201527f7074696f6e20746f20737065636966792061206c6963656e736520747970652c607c8201527f206f7220736574207468652060736b69704c6963656e73655479706560206f70609c8201527f74696f6e20746f2060747275656020746f20736b69702e00000000000000000060bc82015260d301949350505050565b600082516176bb818460208701616257565b7f2000000000000000000000000000000000000000000000000000000000000000920191825250600101919050565b8082028115828204841417611a1057611a10616f0e565b6001815b600184111561773c5780850481111561772057617720616f0e565b600184161561772e57908102905b60019390931c928002617705565b935093915050565b60008261775357506001611a10565b8161776057506000611a10565b816001811461777657600281146177805761779c565b6001915050611a10565b60ff84111561779157617791616f0e565b50506001821b611a10565b5060208310610133831016604e8410600b84101617156177bf575081810a611a10565b6177cc6000198484617701565b80600019048211156177e0576177e0616f0e565b029392505050565b6000611b368383617744565b81810360008312801583831316838312821617156153f7576153f7616f0e565b7f406f70656e7a657070656c696e2f75706772616465732d636f7265400000000081526000825161784c81601c850160208701616257565b91909101601c0192915050565b6000600019820361786c5761786c616f0e565b5060010190565b60008161788257617882616f0e565b506000190190565b6000835161789c818460208801616257565b7f3a0000000000000000000000000000000000000000000000000000000000000090830190815283516178d6816001840160208801616257565b0160010194935050505056fe608060405234801561001057600080fd5b50604051610c9f380380610c9f83398101604081905261002f9161010d565b8181600361003d83826101ff565b50600461004a82826101ff565b50505050506102bd565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261007b57600080fd5b81516001600160401b0381111561009457610094610054565b604051601f8201601f19908116603f011681016001600160401b03811182821017156100c2576100c2610054565b6040528181528382016020018510156100da57600080fd5b60005b828110156100f9576020818601810151838301820152016100dd565b506000918101602001919091529392505050565b6000806040838503121561012057600080fd5b82516001600160401b0381111561013657600080fd5b6101428582860161006a565b602085015190935090506001600160401b0381111561016057600080fd5b61016c8582860161006a565b9150509250929050565b600181811c9082168061018a57607f821691505b6020821081036101aa57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156101fa57806000526020600020601f840160051c810160208510156101d75750805b601f840160051c820191505b818110156101f757600081556001016101e3565b50505b505050565b81516001600160401b0381111561021857610218610054565b61022c816102268454610176565b846101b0565b6020601f82116001811461026057600083156102485750848201515b600019600385901b1c1916600184901b1784556101f7565b600084815260208120601f198516915b828110156102905787850151825560209485019460019092019101610270565b50848210156102ae5786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b6109d3806102cc6000396000f3fe608060405234801561001057600080fd5b50600436106100be5760003560e01c806340c10f191161007657806395d89b411161005b57806395d89b4114610183578063a9059cbb1461018b578063dd62ed3e1461019e57600080fd5b806340c10f191461013857806370a082311461014d57600080fd5b806318160ddd116100a757806318160ddd1461010457806323b872dd14610116578063313ce5671461012957600080fd5b806306fdde03146100c3578063095ea7b3146100e1575b600080fd5b6100cb6101e4565b6040516100d891906107bf565b60405180910390f35b6100f46100ef366004610854565b610276565b60405190151581526020016100d8565b6002545b6040519081526020016100d8565b6100f461012436600461087e565b610290565b604051601281526020016100d8565b61014b610146366004610854565b6102b4565b005b61010861015b3660046108bb565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6100cb6102c2565b6100f4610199366004610854565b6102d1565b6101086101ac3660046108dd565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6060600380546101f390610910565b80601f016020809104026020016040519081016040528092919081815260200182805461021f90610910565b801561026c5780601f106102415761010080835404028352916020019161026c565b820191906000526020600020905b81548152906001019060200180831161024f57829003601f168201915b5050505050905090565b6000336102848185856102df565b60019150505b92915050565b60003361029e8582856102f1565b6102a98585856103c5565b506001949350505050565b6102be8282610470565b5050565b6060600480546101f390610910565b6000336102848185856103c5565b6102ec83838360016104cc565b505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146103bf57818110156103b0576040517ffb8f41b200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416600482015260248101829052604481018390526064015b60405180910390fd5b6103bf848484840360006104cc565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8316610415576040517f96c6fd1e000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff8216610465576040517fec442f05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b6102ec838383610614565b73ffffffffffffffffffffffffffffffffffffffff82166104c0576040517fec442f05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b6102be60008383610614565b73ffffffffffffffffffffffffffffffffffffffff841661051c576040517fe602df05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff831661056c576040517f94280d62000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260016020908152604080832093871683529290522082905580156103bf578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161060691815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff831661064c5780600260008282546106419190610963565b909155506106fe9050565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260208190526040902054818110156106d2576040517fe450d38c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8516600482015260248101829052604481018390526064016103a7565b73ffffffffffffffffffffffffffffffffffffffff841660009081526020819052604090209082900390555b73ffffffffffffffffffffffffffffffffffffffff821661072757600280548290039055610753565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090208054820190555b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516107b291815260200190565b60405180910390a3505050565b602081526000825180602084015260005b818110156107ed57602081860181015160408684010152016107d0565b5060006040828501015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011684010191505092915050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461084f57600080fd5b919050565b6000806040838503121561086757600080fd5b6108708361082b565b946020939093013593505050565b60008060006060848603121561089357600080fd5b61089c8461082b565b92506108aa6020850161082b565b929592945050506040919091013590565b6000602082840312156108cd57600080fd5b6108d68261082b565b9392505050565b600080604083850312156108f057600080fd5b6108f98361082b565b91506109076020840161082b565b90509250929050565b600181811c9082168061092457607f821691505b60208210810361095d577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b8082018082111561028a577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea26469706673582212207e804ca539d49155d2b6bc19268ce22f9f857027c75247d69fb0d56a089c93d464736f6c634300081a003360a060405234801561001057600080fd5b5060405161179838038061179883398101604081905261002f916101e5565b60016000556002805460ff191690556001600160a01b038316158061005b57506001600160a01b038216155b8061006d57506001600160a01b038116155b1561008b5760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b0383166080526100a3600082610134565b506100ce7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a82610134565b506100f97f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e483610134565b5061011260008051602061177883398151915282610134565b5061012b60008051602061177883398151915283610134565b50505050610228565b60008281526001602090815260408083206001600160a01b038516845290915281205460ff166101bf5760008381526001602081815260408084206001600160a01b0387168086529252808420805460ff19169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45060016101c3565b5060005b92915050565b80516001600160a01b03811681146101e057600080fd5b919050565b6000806000606084860312156101fa57600080fd5b610203846101c9565b9250610211602085016101c9565b915061021f604085016101c9565b90509250925092565b60805161151961025f6000396000818161019e01528181610500015281816105620152818161099101526109f301526115196000f3fe608060405234801561001057600080fd5b506004361061016c5760003560e01c806385f438c1116100cd578063c8a0236211610081578063d936547e11610066578063d936547e14610355578063d9caed1214610378578063e63ab1e91461038b57600080fd5b8063c8a023621461032f578063d547741f1461034257600080fd5b80639a590427116100b25780639a590427146103015780639b19251a14610314578063a217fddf1461032757600080fd5b806385f438c11461029457806391d14854146102bb57600080fd5b806336568abe11610124578063570618e111610109578063570618e11461025a5780635c975abb146102815780638456cb591461028c57600080fd5b806336568abe1461023f5780633f4ba83a1461025257600080fd5b806321fc65f21161015557806321fc65f2146101e5578063248a9ca3146101fa5780632f2ff15d1461022c57600080fd5b806301ffc9a714610171578063116191b614610199575b600080fd5b61018461017f366004611224565b6103b2565b60405190151581526020015b60405180910390f35b6101c07f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610190565b6101f86101f336600461128f565b61044b565b005b61021e61020836600461132c565b6000908152600160208190526040909120015490565b604051908152602001610190565b6101f861023a366004611345565b61064c565b6101f861024d366004611345565b610678565b6101f86106d6565b61021e7f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a81565b60025460ff16610184565b6101f861070b565b61021e7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b6101846102c9366004611345565b600091825260016020908152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b6101f861030f366004611371565b61073d565b6101f8610322366004611371565b61080b565b61021e600081565b6101f861033d36600461128f565b6108dc565b6101f8610350366004611345565b610ac3565b610184610363366004611371565b60036020526000908152604090205460ff1681565b6101f861038636600461138c565b610ae9565b61021e7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061044557507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b610453610c15565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461047d81610c58565b610485610c62565b73ffffffffffffffffffffffffffffffffffffffff861660009081526003602052604090205460ff166104e4576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61052573ffffffffffffffffffffffffffffffffffffffff87167f000000000000000000000000000000000000000000000000000000000000000086610ca1565b6040517f5131ab5900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690635131ab599061059f9089908990899089908990600401611412565b600060405180830381600087803b1580156105b957600080fd5b505af11580156105cd573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167f85b5be9cf454e05e0bddf49315178102227c312078eefa3c00294fb4d912ae4e8686866040516106329392919061146f565b60405180910390a3506106456001600055565b5050505050565b6000828152600160208190526040909120015461066881610c58565b6106728383610d2e565b50505050565b73ffffffffffffffffffffffffffffffffffffffff811633146106c7576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6106d18282610ddb565b505050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61070081610c58565b610708610e7c565b50565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61073581610c58565b610708610edb565b7f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a61076781610c58565b73ffffffffffffffffffffffffffffffffffffffff82166107b4576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216600081815260036020526040808220805460ff19169055517f51085ddf9ebdded84b76e829eb58c4078e4b5bdf97d9a94723f336039da467919190a25050565b7f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a61083581610c58565b73ffffffffffffffffffffffffffffffffffffffff8216610882576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216600081815260036020526040808220805460ff19166001179055517faab7954e9d246b167ef88aeddad35209ca2489d95a8aeb59e288d9b19fae5a549190a25050565b6108e4610c15565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461090e81610c58565b610916610c62565b73ffffffffffffffffffffffffffffffffffffffff861660009081526003602052604090205460ff16610975576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6109b673ffffffffffffffffffffffffffffffffffffffff87167f000000000000000000000000000000000000000000000000000000000000000086610ca1565b6040517fb8969bd400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063b8969bd490610a309089908990899089908990600401611412565b600060405180830381600087803b158015610a4a57600080fd5b505af1158015610a5e573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fb9d4efa96044e5f5e03e696fa9ae2ff66911cc27e8a637c3627c75bc5b2241c88686866040516106329392919061146f565b60008281526001602081905260409091200154610adf81610c58565b6106728383610ddb565b610af1610c15565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e4610b1b81610c58565b610b23610c62565b73ffffffffffffffffffffffffffffffffffffffff841660009081526003602052604090205460ff16610b82576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610ba373ffffffffffffffffffffffffffffffffffffffff85168484610ca1565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f9b1bfa7fa9ee420a16e124f794c35ac9f90472acc99140eb2f6447c714cad8eb84604051610c0291815260200190565b60405180910390a3506106d16001600055565b600260005403610c51576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b6107088133610f18565b60025460ff1615610c9f576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6040805173ffffffffffffffffffffffffffffffffffffffff8416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb000000000000000000000000000000000000000000000000000000001790526106d1908490610fa9565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff16610dd357600083815260016020818152604080842073ffffffffffffffffffffffffffffffffffffffff87168086529252808420805460ff19169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a4506001610445565b506000610445565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff1615610dd357600083815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff86168085529252808320805460ff1916905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a4506001610445565b610e8461103f565b6002805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b610ee3610c62565b6002805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258610eb13390565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16610fa5576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82166004820152602481018390526044015b60405180910390fd5b5050565b6000610fcb73ffffffffffffffffffffffffffffffffffffffff84168361107b565b90508051600014158015610ff0575080806020019051810190610fee9190611492565b155b156106d1576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84166004820152602401610f9c565b60025460ff16610c9f576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606061108983836000611090565b9392505050565b6060814710156110ce576040517fcd786059000000000000000000000000000000000000000000000000000000008152306004820152602401610f9c565b6000808573ffffffffffffffffffffffffffffffffffffffff1684866040516110f791906114b4565b60006040518083038185875af1925050503d8060008114611134576040519150601f19603f3d011682016040523d82523d6000602084013e611139565b606091505b5091509150611149868383611153565b9695505050505050565b60608261116857611163826111e2565b611089565b815115801561118c575073ffffffffffffffffffffffffffffffffffffffff84163b155b156111db576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85166004820152602401610f9c565b5080611089565b8051156111f25780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006020828403121561123657600080fd5b81357fffffffff000000000000000000000000000000000000000000000000000000008116811461108957600080fd5b803573ffffffffffffffffffffffffffffffffffffffff8116811461128a57600080fd5b919050565b6000806000806000608086880312156112a757600080fd5b6112b086611266565b94506112be60208701611266565b935060408601359250606086013567ffffffffffffffff8111156112e157600080fd5b8601601f810188136112f257600080fd5b803567ffffffffffffffff81111561130957600080fd5b88602082840101111561131b57600080fd5b959894975092955050506020019190565b60006020828403121561133e57600080fd5b5035919050565b6000806040838503121561135857600080fd5b8235915061136860208401611266565b90509250929050565b60006020828403121561138357600080fd5b61108982611266565b6000806000606084860312156113a157600080fd5b6113aa84611266565b92506113b860208501611266565b929592945050506040919091013590565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff8616815273ffffffffffffffffffffffffffffffffffffffff851660208201528360408201526080606082015260006114646080830184866113c9565b979650505050505050565b8381526040602082015260006114896040830184866113c9565b95945050505050565b6000602082840312156114a457600080fd5b8151801515811461108957600080fd5b6000825160005b818110156114d557602081860181015185830152016114bb565b50600092019182525091905056fea26469706673582212207ea3ad4ba4a6d39c3be3cec464753448900300ac3b508b4000815de5b914c53064736f6c634300081a00338619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a60c060405260001960035534801561001657600080fd5b5060405161155a38038061155a83398101604081905261003591610220565b60016000819055805460ff19169055838383836001600160a01b038416158061006557506001600160a01b038316155b8061007757506001600160a01b038216155b8061008957506001600160a01b038116155b156100a75760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b03808516608052831660a0526100c5600082610154565b506100f07f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e483610154565b5061011b7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb83610154565b506101467f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a82610154565b505050505050505050610274565b60008281526002602090815260408083206001600160a01b038516845290915281205460ff166101fa5760008381526002602090815260408083206001600160a01b03861684529091529020805460ff191660011790556101b23390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45060016101fe565b5060005b92915050565b80516001600160a01b038116811461021b57600080fd5b919050565b6000806000806080858703121561023657600080fd5b61023f85610204565b935061024d60208601610204565b925061025b60408601610204565b915061026960608601610204565b905092959194509250565b60805160a0516112826102d86000396000818161021d01528181610531015281816108240152818161097b01528181610ad00152610bf20152600081816101d1015281816104a1015281816105040152818161079401526107f701526112826000f3fe608060405234801561001057600080fd5b50600436106101775760003560e01c80635e3e9fef116100d857806391d148541161008c578063d547741f11610066578063d547741f14610386578063d5abeb0114610399578063e63ab1e9146103a257600080fd5b806391d1485414610311578063a217fddf14610357578063a783c7891461035f57600080fd5b8063743e0c9b116100bd578063743e0c9b146102cf5780638456cb59146102e257806385f438c1146102ea57600080fd5b80635e3e9fef146102a95780636f8b44b0146102bc57600080fd5b8063248a9ca31161012f57806336568abe1161011457806336568abe146102835780633f4ba83a146102965780635c975abb1461029e57600080fd5b8063248a9ca31461023f5780632f2ff15d1461027057600080fd5b8063106e629011610160578063106e6290146101b9578063116191b6146101cc57806321e093b11461021857600080fd5b806301ffc9a71461017c57806302d5c899146101a4575b600080fd5b61018f61018a366004610fb4565b6103c9565b60405190151581526020015b60405180910390f35b6101b76101b2366004611026565b610462565b005b6101b76101c73660046110b8565b6105f7565b6101f37f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161019b565b6101f37f000000000000000000000000000000000000000000000000000000000000000081565b61026261024d3660046110eb565b60009081526002602052604090206001015490565b60405190815260200161019b565b6101b761027e366004611104565b61069c565b6101b7610291366004611104565b6106c7565b6101b7610720565b60015460ff1661018f565b6101b76102b7366004611026565b610755565b6101b76102ca3660046110eb565b6108d0565b6101b76102dd3660046110eb565b61093e565b6101b76109e8565b6102627f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b61018f61031f366004611104565b600091825260026020908152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b610262600081565b6102627f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb81565b6101b7610394366004611104565b610a1a565b61026260035481565b6102627f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061045c57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b61046a610a3f565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461049481610a82565b61049c610a8c565b6104c77f00000000000000000000000000000000000000000000000000000000000000008684610acb565b6040517fb8969bd400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063b8969bd490610561907f0000000000000000000000000000000000000000000000000000000000000000908a908a908a908a90600401611179565b600060405180830381600087803b15801561057b57600080fd5b505af115801561058f573d6000803e3d6000fd5b505050508573ffffffffffffffffffffffffffffffffffffffff167fba96f26bdda53eb8c8ba39045dfb4ff39753fbc7a6edcf250a88e75e78d102fe8686866040516105dd939291906111d6565b60405180910390a2506105f06001600055565b5050505050565b6105ff610a3f565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461062981610a82565b610631610a8c565b61063c848484610acb565b8373ffffffffffffffffffffffffffffffffffffffff167f884edad9ce6fa2440d8a54cc123490eb96d2768479d49ff9c7366125a94243648460405161068491815260200190565b60405180910390a2506106976001600055565b505050565b6000828152600260205260409020600101546106b781610a82565b6106c18383610c53565b50505050565b73ffffffffffffffffffffffffffffffffffffffff81163314610716576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6106978282610d53565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61074a81610a82565b610752610e12565b50565b61075d610a3f565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461078781610a82565b61078f610a8c565b6107ba7f00000000000000000000000000000000000000000000000000000000000000008684610acb565b6040517f5131ab5900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690635131ab5990610854907f0000000000000000000000000000000000000000000000000000000000000000908a908a908a908a90600401611179565b600060405180830381600087803b15801561086e57600080fd5b505af1158015610882573d6000803e3d6000fd5b505050508573ffffffffffffffffffffffffffffffffffffffff167f7772f56296d3a5202974a45c61c9188d844ab4d6eeb18c851e4b8d5384ca6ced8686866040516105dd939291906111d6565b7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb6108fa81610a82565b610902610a8c565b60038290556040518281527f7810bd47de260c3e9ee10061cf438099dd12256c79485f12f94dbccc981e806c9060200160405180910390a15050565b610946610a8c565b6040517f79cc6790000000000000000000000000000000000000000000000000000000008152336004820152602481018290527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16906379cc679090604401600060405180830381600087803b1580156109d457600080fd5b505af11580156105f0573d6000803e3d6000fd5b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610a1281610a82565b610752610e8f565b600082815260026020526040902060010154610a3581610a82565b6106c18383610d53565b600260005403610a7b576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b6107528133610ee8565b60015460ff1615610ac9576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6003547f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b39573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b5d91906111f9565b610b679084611212565b1115610b9f576040517fc30436e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f1e458bee00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff848116600483015260248201849052604482018390527f00000000000000000000000000000000000000000000000000000000000000001690631e458bee90606401600060405180830381600087803b158015610c3657600080fd5b505af1158015610c4a573d6000803e3d6000fd5b50505050505050565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff16610d4b57600083815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff86168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055610ce93390565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a450600161045c565b50600061045c565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff1615610d4b57600083815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8616808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a450600161045c565b610e1a610f78565b600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b610e97610a8c565b600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016811790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25833610e65565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16610f74576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff821660048201526024810183905260440160405180910390fd5b5050565b60015460ff16610ac9576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060208284031215610fc657600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610ff657600080fd5b9392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461102157600080fd5b919050565b60008060008060006080868803121561103e57600080fd5b61104786610ffd565b945060208601359350604086013567ffffffffffffffff81111561106a57600080fd5b8601601f8101881361107b57600080fd5b803567ffffffffffffffff81111561109257600080fd5b8860208284010111156110a457600080fd5b959894975060200195606001359392505050565b6000806000606084860312156110cd57600080fd5b6110d684610ffd565b95602085013595506040909401359392505050565b6000602082840312156110fd57600080fd5b5035919050565b6000806040838503121561111757600080fd5b8235915061112760208401610ffd565b90509250929050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff8616815273ffffffffffffffffffffffffffffffffffffffff851660208201528360408201526080606082015260006111cb608083018486611130565b979650505050505050565b8381526040602082015260006111f0604083018486611130565b95945050505050565b60006020828403121561120b57600080fd5b5051919050565b8082018082111561045c577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea2646970667358221220de5fa55e0ca79ea2f08903481d01ea00bbbf346b9cfba44e12a2dd6f3a6f2e8a64736f6c634300081a00336080604052348015600f57600080fd5b506001600055610d3a806100246000396000f3fe6080604052600436106100635760003560e01c8063c513169111610040578063c5131691146100c1578063e04d4f97146100e1578063f05b6abf146100f457005b8063357fc5a21461006c5780636ed701691461008c5780638fcaa0b5146100a157005b3661006a57005b005b34801561007857600080fd5b5061006a6100873660046106c0565b610114565b34801561009857600080fd5b5061006a6101aa565b3480156100ad57600080fd5b5061006a6100bc3660046106fc565b6101df565b3480156100cd57600080fd5b5061006a6100dc3660046106c0565b61021e565b61006a6100ef366004610895565b6102f9565b34801561010057600080fd5b5061006a61010f366004610981565b61033d565b61011c610372565b61013e73ffffffffffffffffffffffffffffffffffffffff83163383866103b5565b604080513381526020810185905273ffffffffffffffffffffffffffffffffffffffff848116828401528316606082015290517f2b58128f24a9f59127cc5b5430d70542b22220f2d9adaa86e442b816ab98af609181900360800190a16101a56001600055565b505050565b6040513381527fbcaadb46b82a48af60b608f58959ae6b8310d1b0a0d094c2e9ec3208ed39f2a09060200160405180910390a1565b7f0d3f65f00e631663aa85c96330b5c7a83bb29af3630c0063776f985edc3037aa33838360405161021293929190610a6b565b60405180910390a15050565b610226610372565b6000610233600285610ad5565b90508060000361026f576040517f1f2a200500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61029173ffffffffffffffffffffffffffffffffffffffff84163384846103b5565b604080513381526020810183905273ffffffffffffffffffffffffffffffffffffffff858116828401528416606082015290517f2b58128f24a9f59127cc5b5430d70542b22220f2d9adaa86e442b816ab98af609181900360800190a1506101a56001600055565b7f1f1ff1f5fb41346850b2f5c04e6c767e2f1c8a525c5c0c5cdb60cdf3ca5f62fa3334858585604051610330959493929190610b7e565b60405180910390a1505050565b7f74a53cd528a921fca7dbdee62f86819051d3cc98f214951f4238e8843f20b146338484846040516103309493929190610c08565b6002600054036103ae576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b6040805173ffffffffffffffffffffffffffffffffffffffff85811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd0000000000000000000000000000000000000000000000000000000017905261044a908590610450565b50505050565b600061047273ffffffffffffffffffffffffffffffffffffffff8416836104eb565b905080516000141580156104975750808060200190518101906104959190610ccb565b155b156101a5576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff841660048201526024015b60405180910390fd5b60606104f983836000610500565b9392505050565b60608147101561053e576040517fcd7860590000000000000000000000000000000000000000000000000000000081523060048201526024016104e2565b6000808573ffffffffffffffffffffffffffffffffffffffff1684866040516105679190610ce8565b60006040518083038185875af1925050503d80600081146105a4576040519150601f19603f3d011682016040523d82523d6000602084013e6105a9565b606091505b50915091506105b98683836105c3565b9695505050505050565b6060826105d8576105d382610652565b6104f9565b81511580156105fc575073ffffffffffffffffffffffffffffffffffffffff84163b155b1561064b576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff851660048201526024016104e2565b50806104f9565b8051156106625780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50565b803573ffffffffffffffffffffffffffffffffffffffff811681146106bb57600080fd5b919050565b6000806000606084860312156106d557600080fd5b833592506106e560208501610697565b91506106f360408501610697565b90509250925092565b6000806020838503121561070f57600080fd5b823567ffffffffffffffff81111561072657600080fd5b8301601f8101851361073757600080fd5b803567ffffffffffffffff81111561074e57600080fd5b85602082840101111561076057600080fd5b6020919091019590945092505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156107e6576107e6610770565b604052919050565b600082601f8301126107ff57600080fd5b813567ffffffffffffffff81111561081957610819610770565b61084a60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8401160161079f565b81815284602083860101111561085f57600080fd5b816020850160208301376000918101602001919091529392505050565b801515811461069457600080fd5b80356106bb8161087c565b6000806000606084860312156108aa57600080fd5b833567ffffffffffffffff8111156108c157600080fd5b6108cd868287016107ee565b9350506020840135915060408401356108e58161087c565b809150509250925092565b600067ffffffffffffffff82111561090a5761090a610770565b5060051b60200190565b600082601f83011261092557600080fd5b8135610938610933826108f0565b61079f565b8082825260208201915060208360051b86010192508583111561095a57600080fd5b602085015b8381101561097757803583526020928301920161095f565b5095945050505050565b60008060006060848603121561099657600080fd5b833567ffffffffffffffff8111156109ad57600080fd5b8401601f810186136109be57600080fd5b80356109cc610933826108f0565b8082825260208201915060208360051b8501019250888311156109ee57600080fd5b602084015b83811015610a3057803567ffffffffffffffff811115610a1257600080fd5b610a218b6020838901016107ee565b845250602092830192016109f3565b509550505050602084013567ffffffffffffffff811115610a5057600080fd5b610a5c86828701610914565b9250506106f36040850161088a565b73ffffffffffffffffffffffffffffffffffffffff8416815260406020820152816040820152818360608301376000818301606090810191909152601f9092017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016010192915050565b600082610b0b577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60005b83811015610b2b578181015183820152602001610b13565b50506000910152565b60008151808452610b4c816020860160208601610b10565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b73ffffffffffffffffffffffffffffffffffffffff8616815284602082015260a060408201526000610bb360a0830186610b34565b6060830194909452509015156080909101529392505050565b600081518084526020840193506020830160005b82811015610bfe578151865260209586019590910190600101610be0565b5093949350505050565b60006080820173ffffffffffffffffffffffffffffffffffffffff871683526080602084015280865180835260a08501915060a08160051b86010192506020880160005b82811015610c9b577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60878603018452610c86858351610b34565b94506020938401939190910190600101610c4c565b505050508281036040840152610cb18186610bcc565b915050610cc2606083018415159052565b95945050505050565b600060208284031215610cdd57600080fd5b81516104f98161087c565b60008251610cfa818460208701610b10565b919091019291505056fea2646970667358221220556072e1abafc3c4063b8cce832228b4f309b93726aaa6a6dfab20cb880c6d1864736f6c634300081a0033a2646970667358221220976c48d8a1f646ce5c530c76c100644726f093b904c581b3fe097de167debde764736f6c634300081a0033", + Bin: "0x6080604052600c8054600160ff199182168117909255601f80549091169091179055348015602c57600080fd5b5061c0078061003c6000396000f3fe608060405234801561001057600080fd5b50600436106100ea5760003560e01c806385226c811161008c578063b5508aa911610066578063b5508aa91461018b578063ba414fa614610193578063e20c9f71146101ab578063fa7626d4146101b357600080fd5b806385226c8114610159578063916a17c61461016e578063b0464fdc1461018357600080fd5b80633e5e3c23116100c85780633e5e3c231461012c5780633f7286f41461013457806366d9a9a01461013c5780637a380ebf1461015157600080fd5b80630a9254e4146100ef5780631ed7831c146100f95780632ade388014610117575b600080fd5b6100f76101c0565b005b610101610a85565b60405161010e919061620b565b60405180910390f35b61011f610ae7565b60405161010e91906162a7565b610101610c29565b610101610c89565b610144610ce9565b60405161010e919061640d565b6100f7610e6b565b61016161152d565b60405161010e91906164ab565b6101766115fd565b60405161010e9190616522565b6101766116f8565b6101616117f3565b61019b6118c3565b604051901515815260200161010e565b610101611997565b601f5461019b9060ff1681565b602680547fffffffffffffffffffffffff00000000000000000000000000000000000000009081163017909155602780548216611234179055602880549091166156781790556040516102129061611e565b60408082526004908201527f746573740000000000000000000000000000000000000000000000000000000060608201526080602082018190526003908201527f54544b000000000000000000000000000000000000000000000000000000000060a082015260c001604051809103906000f080158015610297573d6000803e3d6000fd5b50602480547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03929092169190911790556040516102dc9061611e565b604080825260049082018190527f7a6574610000000000000000000000000000000000000000000000000000000060608301526080602083018190528201527f5a4554410000000000000000000000000000000000000000000000000000000060a082015260c001604051809103906000f080158015610360573d6000803e3d6000fd5b50602580547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03928316908117909155604080518082018252600e81527f4761746577617945564d2e736f6c00000000000000000000000000000000000060208201526028546026549251908516602482015260448101939093529216606482015261044f919060840160408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fc0c53b8b000000000000000000000000000000000000000000000000000000001790526119f7565b601f80547fffffffffffffffffffffff0000000000000000000000000000000000000000ff166101006001600160a01b0393841681029190911791829055602080549190920483167fffffffffffffffffffffffff000000000000000000000000000000000000000090911681179091556028546026546040519293918216929116906104db9061612b565b6001600160a01b03938416815291831660208301529091166040820152606001604051809103906000f080158015610517573d6000803e3d6000fd5b50602280547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03928316179055602054602554602854602654604051938516949283169391831692169061057290616138565b6001600160a01b039485168152928416602084015290831660408301529091166060820152608001604051809103906000f0801580156105b6573d6000803e3d6000fd5b50602380547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03929092169190911790556040516105fb90616145565b604051809103906000f080158015610617573d6000803e3d6000fd5b50602180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039283161790556028546040517fc88a5e6d00000000000000000000000000000000000000000000000000000000815291166004820152670de0b6b3a76400006024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c88a5e6d90604401600060405180830381600087803b1580156106c357600080fd5b505af11580156106d7573d6000803e3d6000fd5b50506026546040517f06447d560000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506306447d569150602401600060405180830381600087803b15801561074d57600080fd5b505af1158015610761573d6000803e3d6000fd5b50506020546022546040517fae7a3a6f0000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201529116925063ae7a3a6f9150602401600060405180830381600087803b1580156107c757600080fd5b505af11580156107db573d6000803e3d6000fd5b50506020546023546040517f10188aef0000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152911692506310188aef9150602401600060405180830381600087803b15801561084157600080fd5b505af1158015610855573d6000803e3d6000fd5b505050507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b03166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156108b757600080fd5b505af11580156108cb573d6000803e3d6000fd5b5050602480546026546040517f40c10f190000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620f4240938101939093521692506340c10f199150604401600060405180830381600087803b15801561093c57600080fd5b505af1158015610950573d6000803e3d6000fd5b5050602480546022546040517fa9059cbb0000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201526207a1209381019390935216925063a9059cbb91506044016020604051808303816000875af11580156109c6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109ea91906165b9565b506028546040517fc88a5e6d0000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152670de0b6b3a76400006024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c88a5e6d90604401600060405180830381600087803b158015610a6b57600080fd5b505af1158015610a7f573d6000803e3d6000fd5b50505050565b60606016805480602002602001604051908101604052809291908181526020018280548015610add57602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610abf575b5050505050905090565b6060601e805480602002602001604051908101604052809291908181526020016000905b82821015610c2057600084815260208082206040805180820182526002870290920180546001600160a01b03168352600181018054835181870281018701909452808452939591948681019491929084015b82821015610c09578382906000526020600020018054610b7c906165db565b80601f0160208091040260200160405190810160405280929190818152602001828054610ba8906165db565b8015610bf55780601f10610bca57610100808354040283529160200191610bf5565b820191906000526020600020905b815481529060010190602001808311610bd857829003601f168201915b505050505081526020019060010190610b5d565b505050508152505081526020019060010190610b0b565b50505050905090565b60606018805480602002602001604051908101604052809291908181526020018280548015610add576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311610abf575050505050905090565b60606017805480602002602001604051908101604052809291908181526020018280548015610add576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311610abf575050505050905090565b6060601b805480602002602001604051908101604052809291908181526020016000905b82821015610c205783829060005260206000209060020201604051806040016040529081600082018054610d40906165db565b80601f0160208091040260200160405190810160405280929190818152602001828054610d6c906165db565b8015610db95780601f10610d8e57610100808354040283529160200191610db9565b820191906000526020600020905b815481529060010190602001808311610d9c57829003601f168201915b5050505050815260200160018201805480602002602001604051908101604052809291908181526020018280548015610e5357602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019060040190602082600301049283019260010382029150808411610e005790505b50505050508152505081526020019060010190610d0d565b60208054604080517fdda79b7500000000000000000000000000000000000000000000000000000000815290516000936001600160a01b039093169263dda79b7592600480820193918290030181865afa158015610ecd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ef19190616628565b60208054604080517f5b11259100000000000000000000000000000000000000000000000000000000815290519394506000936001600160a01b0390921692635b112591926004808401938290030181865afa158015610f55573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f799190616628565b604080518082018252600f81527f48656c6c6f2c20466f756e647279210000000000000000000000000000000000602080830191909152601f5483518085018552601981527f4761746577617945564d55706772616465546573742e736f6c00000000000000818401528451928301909452600082526026549495509193602a93600193670de0b6b3a764000093611023936001600160a01b036101009093048316939216611a16565b600084848460405160240161103a93929190616651565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe04d4f9700000000000000000000000000000000000000000000000000000000179052601f5460215491517ff30c7ba30000000000000000000000000000000000000000000000000000000081529293506001600160a01b03610100909104811692737109709ecfa91a80626ff3989d68f67f5b1dd12d9263f30c7ba392611100929116908790879060040161667b565b600060405180830381600087803b15801561111a57600080fd5b505af115801561112e573d6000803e3d6000fd5b50506021546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b1580156111c057600080fd5b505af11580156111d4573d6000803e3d6000fd5b50506020546040517f1f1ff1f5fb41346850b2f5c04e6c767e2f1c8a525c5c0c5cdb60cdf3ca5f62fa935061121d92506001600160a01b039091169086908a908a908a906166a3565b60405180910390a16020546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b1580156112b357600080fd5b505af11580156112c7573d6000803e3d6000fd5b50506021546040516001600160a01b0390911692507f373df382b9c587826f3de13f16d67f8d99f28ee947fc0924c6ef2d6d2c7e8546915061130c90869086906166e4565b60405180910390a26028546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561138657600080fd5b505af115801561139a573d6000803e3d6000fd5b50506021546040517f1cff79cd0000000000000000000000000000000000000000000000000000000081526001600160a01b038086169450631cff79cd935087926113ec9291169087906004016166fd565b60006040518083038185885af115801561140a573d6000803e3d6000fd5b50505050506040513d6000823e601f3d908101601f191682016040526114339190810190616807565b5060208054604080517fdda79b7500000000000000000000000000000000000000000000000000000000815290516114c0938c936001600160a01b03169263dda79b7592600480830193928290030181865afa158015611497573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114bb9190616628565b611a32565b60208054604080517f5b1125910000000000000000000000000000000000000000000000000000000081529051611523938b936001600160a01b031692635b11259192600480830193928290030181865afa158015611497573d6000803e3d6000fd5b5050505050505050565b6060601a805480602002602001604051908101604052809291908181526020016000905b82821015610c20578382906000526020600020018054611570906165db565b80601f016020809104026020016040519081016040528092919081815260200182805461159c906165db565b80156115e95780601f106115be576101008083540402835291602001916115e9565b820191906000526020600020905b8154815290600101906020018083116115cc57829003601f168201915b505050505081526020019060010190611551565b6060601d805480602002602001604051908101604052809291908181526020016000905b82821015610c205760008481526020908190206040805180820182526002860290920180546001600160a01b031683526001810180548351818702810187019094528084529394919385830193928301828280156116e057602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168152602001906004019060208260030104928301926001038202915080841161168d5790505b50505050508152505081526020019060010190611621565b6060601c805480602002602001604051908101604052809291908181526020016000905b82821015610c205760008481526020908190206040805180820182526002860290920180546001600160a01b031683526001810180548351818702810187019094528084529394919385830193928301828280156117db57602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190600401906020826003010492830192600103820291508084116117885790505b5050505050815250508152602001906001019061171c565b60606019805480602002602001604051908101604052809291908181526020016000905b82821015610c20578382906000526020600020018054611836906165db565b80601f0160208091040260200160405190810160405280929190818152602001828054611862906165db565b80156118af5780601f10611884576101008083540402835291602001916118af565b820191906000526020600020905b81548152906001019060200180831161189257829003601f168201915b505050505081526020019060010190611817565b60085460009060ff16156118db575060085460ff1690565b6040517f667f9d70000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d600482018190527f6661696c65640000000000000000000000000000000000000000000000000000602483015260009163667f9d7090604401602060405180830381865afa15801561196c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611990919061683c565b1415905090565b60606015805480602002602001604051908101604052809291908181526020018280548015610add576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311610abf575050505050905090565b6000611a01616152565b611a0c848483611ac2565b9150505b92915050565b611a1e616152565b611a2b8585858486611b3d565b5050505050565b6040517f515361f60000000000000000000000000000000000000000000000000000000081526001600160a01b03808416600483015282166024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063515361f69060440160006040518083038186803b158015611aa657600080fd5b505afa158015611aba573d6000803e3d6000fd5b505050505050565b600080611acf8584611c3e565b9050611b326040518060400160405280601d81526020017f4552433139363750726f78792e736f6c3a4552433139363750726f78790000008152508286604051602001611b1d9291906166fd565b60405160208183030381529060405285611c4a565b9150505b9392505050565b6040517f06447d560000000000000000000000000000000000000000000000000000000081526001600160a01b03821660048201528190737109709ecfa91a80626ff3989d68f67f5b1dd12d9081906306447d5690602401600060405180830381600087803b158015611baf57600080fd5b505af1925050508015611bc0575060015b611bd557611bd087878787611c78565b611c35565b611be187878787611c78565b806001600160a01b03166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015611c1c57600080fd5b505af1158015611c30573d6000803e3d6000fd5b505050505b50505050505050565b6000611b368383611c91565b60c08101515160009015611c6e57611c6784848460c00151611cac565b9050611b36565b611c678484611e52565b6000611c848483611f3d565b9050611a2b858285611f49565b6000611c9d8383612313565b611b3683836020015184611c4a565b600080611cb7612323565b90506000611cc586836123f6565b90506000611cdc826060015183602001518561289c565b90506000611cec83838989612aae565b90506000611cf98261392b565b602081015181519192509060030b15611d6c57898260400151604051602001611d23929190616855565b60408051601f19818403018152908290527f08c379a0000000000000000000000000000000000000000000000000000000008252611d63916004016168d6565b60405180910390fd5b6000611daf6040518060400160405280601581526020017f4465706c6f79656420746f20616464726573733a200000000000000000000000815250836001613afa565b6040517fc6ce059d000000000000000000000000000000000000000000000000000000008152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c6ce059d90611e029084906004016168d6565b602060405180830381865afa158015611e1f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e439190616628565b9b9a5050505050505050505050565b6040517f8d1cc9250000000000000000000000000000000000000000000000000000000081526000908190737109709ecfa91a80626ff3989d68f67f5b1dd12d90638d1cc92590611ea79087906004016168d6565b600060405180830381865afa158015611ec4573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611eec9190810190616807565b90506000611f1a8285604051602001611f069291906168e9565b604051602081830303815290604052613cfa565b90506001600160a01b038116611a0c578484604051602001611d23929190616918565b6000611c9d8383613d0d565b6040517f667f9d700000000000000000000000000000000000000000000000000000000081526001600160a01b03841660048201527fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61036024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d90600090829063667f9d7090604401602060405180830381865afa158015611fe5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612009919061683c565b9050806121b057600061201b86613d19565b604080518082018252600581527f352e302e30000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201529091506120a6905b60408051808201825260008082526020918201528151808301909252845182528085019082015290613e06565b806120b2575060008451115b15612135576040517f4f1ef2860000000000000000000000000000000000000000000000000000000081526001600160a01b03871690634f1ef286906120fe90889088906004016166fd565b600060405180830381600087803b15801561211857600080fd5b505af115801561212c573d6000803e3d6000fd5b505050506121aa565b6040517f3659cfe60000000000000000000000000000000000000000000000000000000081526001600160a01b038681166004830152871690633659cfe690602401600060405180830381600087803b15801561219157600080fd5b505af11580156121a5573d6000803e3d6000fd5b505050505b50611a2b565b8060006121bc82613d19565b604080518082018252600581527f352e302e300000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015290915061221e90612079565b8061222a575060008551115b156122af576040517f9623609d0000000000000000000000000000000000000000000000000000000081526001600160a01b03831690639623609d90612278908a908a908a906004016169c3565b600060405180830381600087803b15801561229257600080fd5b505af11580156122a6573d6000803e3d6000fd5b50505050611c35565b6040517f99a88ec40000000000000000000000000000000000000000000000000000000081526001600160a01b03888116600483015287811660248301528316906399a88ec490604401600060405180830381600087803b158015611c1c57600080fd5b61231f82826000613e1a565b5050565b604080518082018252600381527f6f75740000000000000000000000000000000000000000000000000000000000602082015290517fd145736c000000000000000000000000000000000000000000000000000000008152606091737109709ecfa91a80626ff3989d68f67f5b1dd12d91829063d145736c906123aa9084906004016169f4565b600060405180830381865afa1580156123c7573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526123ef9190810190616a3b565b9250505090565b6124286040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b6000737109709ecfa91a80626ff3989d68f67f5b1dd12d90506124736040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b61247c85613f1d565b6020820152600061248c86614302565b90506000836001600160a01b031663d930a0e66040518163ffffffff1660e01b8152600401600060405180830381865afa1580156124ce573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526124f69190810190616a3b565b868385602001516040516020016125109493929190616a84565b60408051601f19818403018152908290527f60f9bb1100000000000000000000000000000000000000000000000000000000825291506000906001600160a01b038616906360f9bb11906125689085906004016168d6565b600060405180830381865afa158015612585573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526125ad9190810190616a3b565b6040517fdb4235f60000000000000000000000000000000000000000000000000000000081529091506001600160a01b0386169063db4235f6906125f5908490600401616b88565b602060405180830381865afa158015612612573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061263691906165b9565b61264b5781604051602001611d239190616bda565b6040517f49c4fac80000000000000000000000000000000000000000000000000000000081526001600160a01b038616906349c4fac890612690908490600401616c6c565b600060405180830381865afa1580156126ad573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526126d59190810190616a3b565b84526040517fdb4235f60000000000000000000000000000000000000000000000000000000081526001600160a01b0386169063db4235f69061271c908490600401616cbe565b602060405180830381865afa158015612739573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061275d91906165b9565b156127f2576040517f49c4fac80000000000000000000000000000000000000000000000000000000081526001600160a01b038616906349c4fac8906127a7908490600401616cbe565b600060405180830381865afa1580156127c4573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526127ec9190810190616a3b565b60408501525b846001600160a01b03166349c4fac88286600001516040516020016128179190616d10565b6040516020818303038152906040526040518363ffffffff1660e01b8152600401612843929190616d7c565b600060405180830381865afa158015612860573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526128889190810190616a3b565b606085015250608083015250949350505050565b60408051600480825260a0820190925260609160009190816020015b60608152602001906001900390816128b85790505090506040518060400160405280600481526020017f67726570000000000000000000000000000000000000000000000000000000008152508160008151811061291857612918616da1565b60200260200101819052506040518060400160405280600381526020017f2d726c00000000000000000000000000000000000000000000000000000000008152508160018151811061296c5761296c616da1565b6020026020010181905250846040516020016129889190616dd0565b604051602081830303815290604052816002815181106129aa576129aa616da1565b6020026020010181905250826040516020016129c69190616e3c565b604051602081830303815290604052816003815181106129e8576129e8616da1565b602002602001018190525060006129fe8261392b565b602080820151604080518082018252600581527f2e6a736f6e0000000000000000000000000000000000000000000000000000008185019081528251808401845260008082529086015282518084019093529051825292810192909252919250612a8f9060408051808201825260008082526020918201528151808301909252845182528085019082015290614585565b612aa45785604051602001611d239190616e7d565b9695505050505050565b60a0810151604080518082018252600080825260209182015281518083019092528251808352928101910152606090737109709ecfa91a80626ff3989d68f67f5b1dd12d9015612afe565b511590565b612c7257826020015115612bba576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605860248201527f54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f742060448201527f62652075736564207768656e207468652060736b6970566572696679536f757260648201527f6365436f646560206f7074696f6e206973206074727565600000000000000000608482015260a401611d63565b8260c0015115612c72576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605360248201527f54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f742060448201527f62652075736564207768656e207468652060736b69704c6963656e736554797060648201527f6560206f7074696f6e2069732060747275656000000000000000000000000000608482015260a401611d63565b6040805160ff8082526120008201909252600091816020015b6060815260200190600190039081612c8b57905050905060006040518060400160405280600381526020017f6e70780000000000000000000000000000000000000000000000000000000000815250828280612ce690616f3d565b935060ff1681518110612cfb57612cfb616da1565b60200260200101819052506040518060400160405280600d81526020017f302e302e312d616c7068612e3700000000000000000000000000000000000000815250604051602001612d4c9190616f5c565b604051602081830303815290604052828280612d6790616f3d565b935060ff1681518110612d7c57612d7c616da1565b60200260200101819052506040518060400160405280600681526020017f6465706c6f790000000000000000000000000000000000000000000000000000815250828280612dc990616f3d565b935060ff1681518110612dde57612dde616da1565b60200260200101819052506040518060400160405280600e81526020017f2d2d636f6e74726163744e616d65000000000000000000000000000000000000815250828280612e2b90616f3d565b935060ff1681518110612e4057612e40616da1565b60200260200101819052508760200151828280612e5c90616f3d565b935060ff1681518110612e7157612e71616da1565b60200260200101819052506040518060400160405280600e81526020017f2d2d636f6e747261637450617468000000000000000000000000000000000000815250828280612ebe90616f3d565b935060ff1681518110612ed357612ed3616da1565b602090810291909101015287518282612eeb81616f3d565b935060ff1681518110612f0057612f00616da1565b60200260200101819052506040518060400160405280600981526020017f2d2d636861696e49640000000000000000000000000000000000000000000000815250828280612f4d90616f3d565b935060ff1681518110612f6257612f62616da1565b6020026020010181905250612f76466145e6565b8282612f8181616f3d565b935060ff1681518110612f9657612f96616da1565b60200260200101819052506040518060400160405280600f81526020017f2d2d6275696c64496e666f46696c650000000000000000000000000000000000815250828280612fe390616f3d565b935060ff1681518110612ff857612ff8616da1565b60200260200101819052508682828061301090616f3d565b935060ff168151811061302557613025616da1565b602090810291909101015285511561314c5760408051808201909152601581527f2d2d636f6e7374727563746f7242797465636f646500000000000000000000006020820152828261307681616f3d565b935060ff168151811061308b5761308b616da1565b60209081029190910101526040517f71aad10d0000000000000000000000000000000000000000000000000000000081526001600160a01b038416906371aad10d906130db9089906004016168d6565b600060405180830381865afa1580156130f8573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526131209190810190616a3b565b828261312b81616f3d565b935060ff168151811061314057613140616da1565b60200260200101819052505b84602001511561321c5760408051808201909152601281527f2d2d766572696679536f75726365436f646500000000000000000000000000006020820152828261319581616f3d565b935060ff16815181106131aa576131aa616da1565b60200260200101819052506040518060400160405280600581526020017f66616c73650000000000000000000000000000000000000000000000000000008152508282806131f790616f3d565b935060ff168151811061320c5761320c616da1565b60200260200101819052506133e3565b613254612af98660a0015160408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6132e75760408051808201909152600d81527f2d2d6c6963656e736554797065000000000000000000000000000000000000006020820152828261329781616f3d565b935060ff16815181106132ac576132ac616da1565b60200260200101819052508460a001516040516020016132cc9190616dd0565b6040516020818303038152906040528282806131f790616f3d565b8460c0015115801561332a57506040808901518151808301835260008082526020918201528251808401909352815183529081019082015261332890511590565b155b156133e35760408051808201909152600d81527f2d2d6c6963656e736554797065000000000000000000000000000000000000006020820152828261336e81616f3d565b935060ff168151811061338357613383616da1565b602002602001018190525061339788614686565b6040516020016133a79190616dd0565b6040516020818303038152906040528282806133c290616f3d565b935060ff16815181106133d7576133d7616da1565b60200260200101819052505b6040808601518151808301835260008082526020918201528251808401909352815183529081019082015261341790511590565b6134ac5760408051808201909152600b81527f2d2d72656c6179657249640000000000000000000000000000000000000000006020820152828261345a81616f3d565b935060ff168151811061346f5761346f616da1565b6020026020010181905250846040015182828061348b90616f3d565b935060ff16815181106134a0576134a0616da1565b60200260200101819052505b6060850151156135cd5760408051808201909152600681527f2d2d73616c740000000000000000000000000000000000000000000000000000602082015282826134f581616f3d565b935060ff168151811061350a5761350a616da1565b602090810291909101015260608501516040517fb11a19e800000000000000000000000000000000000000000000000000000000815260048101919091526001600160a01b0384169063b11a19e890602401600060405180830381865afa158015613579573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526135a19190810190616a3b565b82826135ac81616f3d565b935060ff16815181106135c1576135c1616da1565b60200260200101819052505b60e085015151156136745760408051808201909152600a81527f2d2d6761734c696d6974000000000000000000000000000000000000000000006020820152828261361781616f3d565b935060ff168151811061362c5761362c616da1565b60200260200101819052506136488560e00151600001516145e6565b828261365381616f3d565b935060ff168151811061366857613668616da1565b60200260200101819052505b60e0850151602001511561371e5760408051808201909152600a81527f2d2d676173507269636500000000000000000000000000000000000000000000602082015282826136c181616f3d565b935060ff16815181106136d6576136d6616da1565b60200260200101819052506136f28560e00151602001516145e6565b82826136fd81616f3d565b935060ff168151811061371257613712616da1565b60200260200101819052505b60e085015160400151156137c85760408051808201909152600e81527f2d2d6d61784665655065724761730000000000000000000000000000000000006020820152828261376b81616f3d565b935060ff168151811061378057613780616da1565b602002602001018190525061379c8560e00151604001516145e6565b82826137a781616f3d565b935060ff16815181106137bc576137bc616da1565b60200260200101819052505b60e085015160600151156138725760408051808201909152601681527f2d2d6d61785072696f72697479466565506572476173000000000000000000006020820152828261381581616f3d565b935060ff168151811061382a5761382a616da1565b60200260200101819052506138468560e00151606001516145e6565b828261385181616f3d565b935060ff168151811061386657613866616da1565b60200260200101819052505b60008160ff1667ffffffffffffffff8111156138905761389061671f565b6040519080825280602002602001820160405280156138c357816020015b60608152602001906001900390816138ae5790505b50905060005b8260ff168160ff16101561391c57838160ff16815181106138ec576138ec616da1565b6020026020010151828260ff168151811061390957613909616da1565b60209081029190910101526001016138c9565b5093505050505b949350505050565b6139526040518060600160405280600060030b815260200160608152602001606081525090565b60408051808201825260048082527f6261736800000000000000000000000000000000000000000000000000000000602083015291517fd145736c000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d92600091849163d145736c916139d891869101616fc7565b600060405180830381865afa1580156139f5573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052613a1d9190810190616a3b565b90506000613a2b8683615175565b90506000846001600160a01b031663f45c1ce7836040518263ffffffff1660e01b8152600401613a5b91906164ab565b6000604051808303816000875af1158015613a7a573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052613aa2919081019061700e565b805190915060030b15801590613abb5750602081015151155b8015613aca5750604081015151155b15612aa45781600081518110613ae257613ae2616da1565b6020026020010151604051602001611d2391906170c4565b60606000613b2f8560408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600080825260209182015281518083019092528651825280870190820152909150613b669082905b906152ca565b15613cc3576000613be382613bdd84613bd7613ba98a60408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6040805180820182526000808252602091820152815180830190925282518252918201519181019190915290565b906152f1565b90615353565b604080518082018252600181527f0a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152909150613c479082906152ca565b15613cb157604080518082018252600181527f0a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152613cae905b82906153d8565b90505b613cba816153fe565b92505050611b36565b8215613cdc578484604051602001611d239291906172b0565b5050604080516020810190915260008152611b36565b509392505050565b6000808251602084016000f09392505050565b61231f82826001613e1a565b60408051600481526024810182526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fad3cb1cc00000000000000000000000000000000000000000000000000000000179052905160609160009182916001600160a01b03861691613d8e9190617357565b6000604051808303816000865af19150503d8060008114613dcb576040519150601f19603f3d011682016040523d82523d6000602084013e613dd0565b606091505b50915091508115613def57808060200190518101906139239190616a3b565b505060408051602081019091526000815292915050565b6000613e128383615467565b159392505050565b8160a0015115613e2957505050565b6000613e36848484615542565b90506000613e438261392b565b602081015181519192509060030b158015613edf5750604080518082018252600781527f535543434553530000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152613edf90604080518082018252600080825260209182015281518083019092528451825280850190820152613b60565b15613eec57505050505050565b60408201515115613f0c578160400151604051602001611d239190617373565b80604051602001611d2391906173d1565b60606000613f528360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600481527f2e736f6c0000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152909150613fb7905b8290614585565b1561402657604080518082018252600481527f2e736f6c0000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152611b3690614021908390615add565b6153fe565b604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152614088905b8290615b67565b60010361415557604080518082018252600181527f3a00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526140ee90613ca7565b50604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152611b3690614021905b83906153d8565b604080518082018252600581527f2e6a736f6e000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526141b490613fb0565b156142eb57604080518082018252600181527f2f0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082018190528451808601909552925184528301529061421c908390615c01565b90506000816001835161422f919061743c565b8151811061423f5761423f616da1565b602002602001015190506142e26140216142b56040518060400160405280600581526020017f2e6a736f6e00000000000000000000000000000000000000000000000000000081525060408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b60408051808201825260008082526020918201528151808301909252855182528086019082015290615add565b95945050505050565b82604051602001611d23919061744f565b50919050565b606060006143378360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600481527f2e736f6c000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015290915061439990613fb0565b156143a757611b36816153fe565b604080518082018252600181527f3a000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261440690614081565b60010361447057604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152611b36906140219061414e565b604080518082018252600581527f2e6a736f6e000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526144cf90613fb0565b156142eb57604080518082018252600181527f2f00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820181905284518086019095529251845283015290614537908390615c01565b9050600181511115614573578060028251614552919061743c565b8151811061456257614562616da1565b602002602001015192505050919050565b5082604051602001611d23919061744f565b80518251600091111561459a57506000611a10565b815183516020850151600092916145b09161752d565b6145ba919061743c565b9050826020015181036145d1576001915050611a10565b82516020840151819020912014905092915050565b606060006145f383615ca6565b600101905060008167ffffffffffffffff8111156146135761461361671f565b6040519080825280601f01601f19166020018201604052801561463d576020820181803683370190505b5090508181016020015b600019017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a850494508461464757509392505050565b604081810151815180830183526000808252602091820181905283518085018552835181529282018383015283518085018552600a81527f554e4c4943454e5345440000000000000000000000000000000000000000000081840190815285518087018752838152840192909252845180860190955251845290830152606091614712905b8290613e06565b1561475257505060408051808201909152600481527f4e6f6e65000000000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600981527f556e6c6963656e73650000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526147b19061470b565b156147f157505060408051808201909152600981527f556e6c6963656e736500000000000000000000000000000000000000000000006020820152919050565b604080518082018252600381527f4d49540000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526148509061470b565b1561489057505060408051808201909152600381527f4d495400000000000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f47504c2d322e302d6f6e6c790000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526148ef9061470b565b806149545750604080518082018252601081527f47504c2d322e302d6f722d6c6174657200000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526149549061470b565b1561499457505060408051808201909152600981527f474e552047504c763200000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f47504c2d332e302d6f6e6c790000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526149f39061470b565b80614a585750604080518082018252601081527f47504c2d332e302d6f722d6c617465720000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152614a589061470b565b15614a9857505060408051808201909152600981527f474e552047504c763300000000000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4c47504c2d322e312d6f6e6c790000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152614af79061470b565b80614b5c5750604080518082018252601181527f4c47504c2d322e312d6f722d6c6174657200000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152614b5c9061470b565b15614b9c57505060408051808201909152600c81527f474e55204c47504c76322e3100000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4c47504c2d332e302d6f6e6c790000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152614bfb9061470b565b80614c605750604080518082018252601181527f4c47504c2d332e302d6f722d6c6174657200000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152614c609061470b565b15614ca057505060408051808201909152600a81527f474e55204c47504c7633000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f4253442d322d436c61757365000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152614cff9061470b565b15614d3f57505060408051808201909152600c81527f4253442d322d436c6175736500000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f4253442d332d436c61757365000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152614d9e9061470b565b15614dde57505060408051808201909152600c81527f4253442d332d436c6175736500000000000000000000000000000000000000006020820152919050565b604080518082018252600781527f4d504c2d322e300000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152614e3d9061470b565b15614e7d57505060408051808201909152600781527f4d504c2d322e30000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600781527f4f534c2d332e300000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152614edc9061470b565b15614f1c57505060408051808201909152600781527f4f534c2d332e30000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600a81527f4170616368652d322e300000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152614f7b9061470b565b15614fbb57505060408051808201909152600a81527f4170616368652d322e30000000000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4147504c2d332e302d6f6e6c79000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261501a9061470b565b8061507f5750604080518082018252601181527f4147504c2d332e302d6f722d6c617465720000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261507f9061470b565b156150bf57505060408051808201909152600a81527f474e55204147504c7633000000000000000000000000000000000000000000006020820152919050565b604080518082018252600881527f4255534c2d312e310000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261511e9061470b565b1561515e57505060408051808201909152600781527f42534c20312e31000000000000000000000000000000000000000000000000006020820152919050565b60408084015184519151611d239290602001617540565b60608060005b8451811015615200578185828151811061519757615197616da1565b60200260200101516040516020016151b09291906168e9565b6040516020818303038152906040529150600185516151cf919061743c565b81146151f857816040516020016151e691906176a9565b60405160208183030381529060405291505b60010161517b565b5060408051600380825260808201909252600091816020015b6060815260200190600190039081615219579050509050838160008151811061524457615244616da1565b60200260200101819052506040518060400160405280600281526020017f2d630000000000000000000000000000000000000000000000000000000000008152508160018151811061529857615298616da1565b602002602001018190525081816002815181106152b7576152b7616da1565b6020908102919091010152949350505050565b60208083015183518351928401516000936152e89291849190615d88565b14159392505050565b604080518082019091526000808252602082015260006153238460000151856020015185600001518660200151615e99565b9050836020015181615335919061743c565b8451859061534490839061743c565b90525060208401525090919050565b6040805180820190915260008082526020820152815183511015615378575081611a10565b602080830151908401516001911461539f5750815160208481015190840151829020919020145b80156153d0578251845185906153b690839061743c565b90525082516020850180516153cc90839061752d565b9052505b509192915050565b60408051808201909152600080825260208201526153f7838383615fb9565b5092915050565b60606000826000015167ffffffffffffffff81111561541f5761541f61671f565b6040519080825280601f01601f191660200182016040528015615449576020820181803683370190505b50905060006020820190506153f78185602001518660000151616064565b815181516000919081111561547a575081515b6020808501519084015160005b8381101561553357825182518082146155035760001960208710156154e2576001846154b489602061743c565b6154be919061752d565b6154c99060086176ea565b6154d49060026177e8565b6154de919061743c565b1990505b8181168382168181039114615500579750611a109650505050505050565b50505b61550e60208661752d565b945061551b60208561752d565b9350505060208161552c919061752d565b9050615487565b5084518651612aa491906177f4565b6060600061554e612323565b6040805160ff808252612000820190925291925060009190816020015b606081526020019060019003908161556b57905050905060006040518060400160405280600381526020017f6e707800000000000000000000000000000000000000000000000000000000008152508282806155c690616f3d565b935060ff16815181106155db576155db616da1565b60200260200101819052506040518060400160405280600781526020017f5e312e33322e330000000000000000000000000000000000000000000000000081525060405160200161562c9190617814565b60405160208183030381529060405282828061564790616f3d565b935060ff168151811061565c5761565c616da1565b60200260200101819052506040518060400160405280600881526020017f76616c69646174650000000000000000000000000000000000000000000000008152508282806156a990616f3d565b935060ff16815181106156be576156be616da1565b6020026020010181905250826040516020016156da9190616e3c565b6040516020818303038152906040528282806156f590616f3d565b935060ff168151811061570a5761570a616da1565b60200260200101819052506040518060400160405280600a81526020017f2d2d636f6e74726163740000000000000000000000000000000000000000000081525082828061575790616f3d565b935060ff168151811061576c5761576c616da1565b602002602001018190525061578187846160de565b828261578c81616f3d565b935060ff16815181106157a1576157a1616da1565b60209081029190910101528551511561584d5760408051808201909152600b81527f2d2d7265666572656e6365000000000000000000000000000000000000000000602082015282826157f381616f3d565b935060ff168151811061580857615808616da1565b60200260200101819052506158218660000151846160de565b828261582c81616f3d565b935060ff168151811061584157615841616da1565b60200260200101819052505b8560800151156158bb5760408051808201909152601881527f2d2d756e73616665536b697053746f72616765436865636b00000000000000006020820152828261589681616f3d565b935060ff16815181106158ab576158ab616da1565b6020026020010181905250615921565b84156159215760408051808201909152601281527f2d2d726571756972655265666572656e636500000000000000000000000000006020820152828261590081616f3d565b935060ff168151811061591557615915616da1565b60200260200101819052505b604086015151156159bd5760408051808201909152600d81527f2d2d756e73616665416c6c6f77000000000000000000000000000000000000006020820152828261596b81616f3d565b935060ff168151811061598057615980616da1565b6020026020010181905250856040015182828061599c90616f3d565b935060ff16815181106159b1576159b1616da1565b60200260200101819052505b856060015115615a275760408051808201909152601481527f2d2d756e73616665416c6c6f7752656e616d657300000000000000000000000060208201528282615a0681616f3d565b935060ff1681518110615a1b57615a1b616da1565b60200260200101819052505b60008160ff1667ffffffffffffffff811115615a4557615a4561671f565b604051908082528060200260200182016040528015615a7857816020015b6060815260200190600190039081615a635790505b50905060005b8260ff168160ff161015615ad157838160ff1681518110615aa157615aa1616da1565b6020026020010151828260ff1681518110615abe57615abe616da1565b6020908102919091010152600101615a7e565b50979650505050505050565b6040805180820190915260008082526020820152815183511015615b02575081611a10565b81518351602085015160009291615b189161752d565b615b22919061743c565b60208401519091506001908214615b43575082516020840151819020908220145b8015615b5e57835185518690615b5a90839061743c565b9052505b50929392505050565b6000808260000151615b8b8560000151866020015186600001518760200151615e99565b615b95919061752d565b90505b83516020850151615ba9919061752d565b81116153f75781615bb981617859565b9250508260000151615bf0856020015183615bd4919061743c565b8651615be0919061743c565b8386600001518760200151615e99565b615bfa919061752d565b9050615b98565b60606000615c0f8484615b67565b615c1a90600161752d565b67ffffffffffffffff811115615c3257615c3261671f565b604051908082528060200260200182016040528015615c6557816020015b6060815260200190600190039081615c505790505b50905060005b8151811015613cf257615c8161402186866153d8565b828281518110615c9357615c93616da1565b6020908102919091010152600101615c6b565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310615cef577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310615d1b576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc100008310615d3957662386f26fc10000830492506010015b6305f5e1008310615d51576305f5e100830492506008015b6127108310615d6557612710830492506004015b60648310615d77576064830492506002015b600a8310611a105760010192915050565b600080858411615e8f5760208411615e3b5760008415615dd3576001615daf86602061743c565b615dba9060086176ea565b615dc59060026177e8565b615dcf919061743c565b1990505b8351811685615de2898961752d565b615dec919061743c565b805190935082165b818114615e2657878411615e0e5787945050505050613923565b83615e1881617873565b945050828451169050615df4565b615e30878561752d565b945050505050613923565b838320615e48858861743c565b615e52908761752d565b91505b858210615e8d57848220808203615e7a57615e70868461752d565b9350505050613923565b615e8560018461743c565b925050615e55565b505b5092949350505050565b60008381868511615fa45760208511615f535760008515615ee5576001615ec187602061743c565b615ecc9060086176ea565b615ed79060026177e8565b615ee1919061743c565b1990505b84518116600087615ef68b8b61752d565b615f00919061743c565b855190915083165b828114615f4557818610615f2d57615f208b8b61752d565b9650505050505050613923565b85615f3781617859565b965050838651169050615f08565b859650505050505050613923565b508383206000905b615f65868961743c565b8211615fa257858320808203615f815783945050505050613923565b615f8c60018561752d565b9350508180615f9a90617859565b925050615f5b565b505b615fae878761752d565b979650505050505050565b60408051808201909152600080825260208201526000615feb8560000151866020015186600001518760200151615e99565b602080870180519186019190915251909150616007908261743c565b83528451602086015161601a919061752d565b8103616029576000855261605b565b83518351616037919061752d565b8551869061604690839061743c565b9052508351616055908261752d565b60208601525b50909392505050565b6020811061609c578151835261607b60208461752d565b925061608860208361752d565b915061609560208261743c565b9050616064565b60001981156160cb5760016160b283602061743c565b6160be906101006177e8565b6160c8919061743c565b90505b9151835183169219169190911790915250565b606060006160ec84846123f6565b80516020808301516040519394506161069390910161788a565b60405160208183030381529060405291505092915050565b610c9f806178e383390190565b6117988061858283390190565b61155a80619d1a83390190565b610d5e8061b27483390190565b6040518060e0016040528060608152602001606081526020016060815260200160001515815260200160001515815260200160001515815260200161619561619a565b905290565b604051806101000160405280600015158152602001600015158152602001606081526020016000801916815260200160608152602001606081526020016000151581526020016161956040518060800160405280600081526020016000815260200160008152602001600081525090565b602080825282518282018190526000918401906040840190835b8181101561624c5783516001600160a01b0316835260209384019390920191600101616225565b509095945050505050565b60005b8381101561627257818101518382015260200161625a565b50506000910152565b60008151808452616293816020860160208601616257565b601f01601f19169290920160200192915050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b828110156163a3577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452815180516001600160a01b03168652602090810151604082880181905281519088018190529101906060600582901b88018101919088019060005b81811015616389577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa08a850301835261637384865161627b565b6020958601959094509290920191600101616339565b5091975050506020948501949290920191506001016162cf565b50929695505050505050565b600081518084526020840193506020830160005b828110156164035781517fffffffff00000000000000000000000000000000000000000000000000000000168652602095860195909101906001016163c3565b5093949350505050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b828110156163a3577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08786030184528151805160408752616479604088018261627b565b905060208201519150868103602088015261649481836163af565b965050506020938401939190910190600101616435565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b828110156163a3577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc087860301845261650d85835161627b565b945060209384019391909101906001016164d3565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b828110156163a3577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc087860301845281516001600160a01b03815116865260208101519050604060208701526165a360408701826163af565b955050602093840193919091019060010161654a565b6000602082840312156165cb57600080fd5b81518015158114611b3657600080fd5b600181811c908216806165ef57607f821691505b6020821081036142fc577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006020828403121561663a57600080fd5b81516001600160a01b0381168114611b3657600080fd5b606081526000616664606083018661627b565b602083019490945250901515604090910152919050565b6001600160a01b03841681528260208201526060604082015260006142e2606083018461627b565b6001600160a01b038616815284602082015260a0604082015260006166cb60a083018661627b565b6060830194909452509015156080909101529392505050565b828152604060208201526000613923604083018461627b565b6001600160a01b0383168152604060208201526000613923604083018461627b565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040516060810167ffffffffffffffff811182821017156167715761677161671f565b60405290565b60008067ffffffffffffffff8411156167925761679261671f565b50604051601f19601f85018116603f0116810181811067ffffffffffffffff821117156167c1576167c161671f565b6040528381529050808284018510156167d957600080fd5b613cf2846020830185616257565b600082601f8301126167f857600080fd5b611b3683835160208501616777565b60006020828403121561681957600080fd5b815167ffffffffffffffff81111561683057600080fd5b611a0c848285016167e7565b60006020828403121561684e57600080fd5b5051919050565b7f4661696c656420746f206465706c6f7920636f6e74726163742000000000000081526000835161688d81601a850160208801616257565b7f3a20000000000000000000000000000000000000000000000000000000000000601a9184019182015283516168ca81601c840160208801616257565b01601c01949350505050565b602081526000611b36602083018461627b565b600083516168fb818460208801616257565b83519083019061690f818360208801616257565b01949350505050565b7f4661696c656420746f206465706c6f7920636f6e74726163742000000000000081526000835161695081601a850160208801616257565b7f207573696e6720636f6e7374727563746f722064617461202200000000000000601a91840191820152835161698d816033840160208801616257565b7f220000000000000000000000000000000000000000000000000000000000000060339290910191820152603401949350505050565b6001600160a01b03841681526001600160a01b03831660208201526060604082015260006142e2606083018461627b565b60408152600b60408201527f464f554e4452595f4f55540000000000000000000000000000000000000000006060820152608060208201526000611b36608083018461627b565b600060208284031215616a4d57600080fd5b815167ffffffffffffffff811115616a6457600080fd5b8201601f81018413616a7557600080fd5b611a0c84825160208401616777565b60008551616a96818460208a01616257565b7f2f000000000000000000000000000000000000000000000000000000000000009083019081528551616ad0816001840160208a01616257565b7f2f00000000000000000000000000000000000000000000000000000000000000600192909101918201528451616b0e816002840160208901616257565b6001818301019150507f2f0000000000000000000000000000000000000000000000000000000000000060018201528351616b50816002840160208801616257565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600292909101918201526007019695505050505050565b604081526000616b9b604083018461627b565b8281036020840152600481527f2e6173740000000000000000000000000000000000000000000000000000000060208201526040810191505092915050565b7f436f756c64206e6f742066696e642041535420696e2061727469666163742000815260008251616c1281601f850160208701616257565b7f2e205365742060617374203d20747275656020696e20666f756e6472792e746f601f9390910192830152507f6d6c000000000000000000000000000000000000000000000000000000000000603f820152604101919050565b604081526000616c7f604083018461627b565b8281036020840152601181527f2e6173742e6162736f6c7574655061746800000000000000000000000000000060208201526040810191505092915050565b604081526000616cd1604083018461627b565b8281036020840152600c81527f2e6173742e6c6963656e7365000000000000000000000000000000000000000060208201526040810191505092915050565b7f2e6d657461646174612e736f75726365732e5b27000000000000000000000000815260008251616d48816014850160208701616257565b7f275d2e6b656363616b32353600000000000000000000000000000000000000006014939091019283015250602001919050565b604081526000616d8f604083018561627b565b8281036020840152611b32818561627b565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f2200000000000000000000000000000000000000000000000000000000000000815260008251616e08816001850160208701616257565b7f22000000000000000000000000000000000000000000000000000000000000006001939091019283015250600201919050565b60008251616e4e818460208701616257565b7f2f6275696c642d696e666f000000000000000000000000000000000000000000920191825250600b01919050565b7f436f756c64206e6f742066696e64206275696c642d696e666f2066696c65207781527f697468206d61746368696e6720736f7572636520636f6465206861736820666f60208201527f7220636f6e747261637420000000000000000000000000000000000000000000604082015260008251616f0181604b850160208701616257565b91909101604b0192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600060ff821660ff8103616f5357616f53616f0e565b60010192915050565b7f406f70656e7a657070656c696e2f646566656e6465722d6465706c6f792d636c81527f69656e742d636c69400000000000000000000000000000000000000000000000602082015260008251616fba816029850160208701616257565b9190910160290192915050565b60408152601660408201527f4f50454e5a455050454c494e5f424153485f50415448000000000000000000006060820152608060208201526000611b36608083018461627b565b60006020828403121561702057600080fd5b815167ffffffffffffffff81111561703757600080fd5b82016060818503121561704957600080fd5b61705161674e565b81518060030b811461706257600080fd5b8152602082015167ffffffffffffffff81111561707e57600080fd5b61708a868285016167e7565b602083015250604082015167ffffffffffffffff8111156170aa57600080fd5b6170b6868285016167e7565b604083015250949350505050565b7f4661696c656420746f2072756e206261736820636f6d6d616e6420776974682081527f2200000000000000000000000000000000000000000000000000000000000000602082015260008251617122816021850160208701616257565b7f222e20496620796f7520617265207573696e672057696e646f77732c2073657460219390910192830152507f20746865204f50454e5a455050454c494e5f424153485f5041544820656e766960418201527f726f6e6d656e74207661726961626c6520746f207468652066756c6c7920717560618201527f616c69666965642070617468206f66207468652062617368206578656375746160818201527f626c652e20466f72206578616d706c652c20696620796f75206172652075736960a18201527f6e672047697420666f722057696e646f77732c206164642074686520666f6c6c60c18201527f6f77696e67206c696e6520696e20746865202e656e762066696c65206f66207960e18201527f6f75722070726f6a65637420287573696e6720666f727761726420736c6173686101018201527f6573293a0a4f50454e5a455050454c494e5f424153485f504154483d22433a2f6101218201527f50726f6772616d2046696c65732f4769742f62696e2f6261736822000000000061014182015261015c01919050565b7f4661696c656420746f2066696e64206c696e652077697468207072656669782081527f270000000000000000000000000000000000000000000000000000000000000060208201526000835161730e816021850160208801616257565b7f2720696e206f75747075743a2000000000000000000000000000000000000000602191840191820152835161734b81602e840160208801616257565b01602e01949350505050565b60008251617369818460208701616257565b9190910192915050565b7f4661696c656420746f2072756e2075706772616465207361666574792076616c81527f69646174696f6e3a200000000000000000000000000000000000000000000000602082015260008251616fba816029850160208701616257565b7f55706772616465207361666574792076616c69646174696f6e206661696c656481527f3a0a00000000000000000000000000000000000000000000000000000000000060208201526000825161742f816022850160208701616257565b9190910160220192915050565b81810381811115611a1057611a10616f0e565b7f436f6e7472616374206e616d652000000000000000000000000000000000000081526000825161748781600e850160208701616257565b7f206d75737420626520696e2074686520666f726d6174204d79436f6e74726163600e9390910192830152507f742e736f6c3a4d79436f6e7472616374206f72204d79436f6e74726163742e73602e8201527f6f6c206f72206f75742f4d79436f6e74726163742e736f6c2f4d79436f6e7472604e8201527f6163742e6a736f6e000000000000000000000000000000000000000000000000606e820152607601919050565b80820180821115611a1057611a10616f0e565b7f53504458206c6963656e7365206964656e746966696572200000000000000000815260008351617578816018850160208801616257565b7f20696e200000000000000000000000000000000000000000000000000000000060189184019182015283516175b581601c840160208801616257565b7f20646f6573206e6f74206c6f6f6b206c696b65206120737570706f7274656420601c92909101918201527f6c6963656e736520666f7220626c6f636b206578706c6f726572207665726966603c8201527f69636174696f6e2e205573652074686520606c6963656e73655479706560206f605c8201527f7074696f6e20746f20737065636966792061206c6963656e736520747970652c607c8201527f206f7220736574207468652060736b69704c6963656e73655479706560206f70609c8201527f74696f6e20746f2060747275656020746f20736b69702e00000000000000000060bc82015260d301949350505050565b600082516176bb818460208701616257565b7f2000000000000000000000000000000000000000000000000000000000000000920191825250600101919050565b8082028115828204841417611a1057611a10616f0e565b6001815b600184111561773c5780850481111561772057617720616f0e565b600184161561772e57908102905b60019390931c928002617705565b935093915050565b60008261775357506001611a10565b8161776057506000611a10565b816001811461777657600281146177805761779c565b6001915050611a10565b60ff84111561779157617791616f0e565b50506001821b611a10565b5060208310610133831016604e8410600b84101617156177bf575081810a611a10565b6177cc6000198484617701565b80600019048211156177e0576177e0616f0e565b029392505050565b6000611b368383617744565b81810360008312801583831316838312821617156153f7576153f7616f0e565b7f406f70656e7a657070656c696e2f75706772616465732d636f7265400000000081526000825161784c81601c850160208701616257565b91909101601c0192915050565b6000600019820361786c5761786c616f0e565b5060010190565b60008161788257617882616f0e565b506000190190565b6000835161789c818460208801616257565b7f3a0000000000000000000000000000000000000000000000000000000000000090830190815283516178d6816001840160208801616257565b0160010194935050505056fe608060405234801561001057600080fd5b50604051610c9f380380610c9f83398101604081905261002f9161010d565b8181600361003d83826101ff565b50600461004a82826101ff565b50505050506102bd565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261007b57600080fd5b81516001600160401b0381111561009457610094610054565b604051601f8201601f19908116603f011681016001600160401b03811182821017156100c2576100c2610054565b6040528181528382016020018510156100da57600080fd5b60005b828110156100f9576020818601810151838301820152016100dd565b506000918101602001919091529392505050565b6000806040838503121561012057600080fd5b82516001600160401b0381111561013657600080fd5b6101428582860161006a565b602085015190935090506001600160401b0381111561016057600080fd5b61016c8582860161006a565b9150509250929050565b600181811c9082168061018a57607f821691505b6020821081036101aa57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156101fa57806000526020600020601f840160051c810160208510156101d75750805b601f840160051c820191505b818110156101f757600081556001016101e3565b50505b505050565b81516001600160401b0381111561021857610218610054565b61022c816102268454610176565b846101b0565b6020601f82116001811461026057600083156102485750848201515b600019600385901b1c1916600184901b1784556101f7565b600084815260208120601f198516915b828110156102905787850151825560209485019460019092019101610270565b50848210156102ae5786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b6109d3806102cc6000396000f3fe608060405234801561001057600080fd5b50600436106100be5760003560e01c806340c10f191161007657806395d89b411161005b57806395d89b4114610183578063a9059cbb1461018b578063dd62ed3e1461019e57600080fd5b806340c10f191461013857806370a082311461014d57600080fd5b806318160ddd116100a757806318160ddd1461010457806323b872dd14610116578063313ce5671461012957600080fd5b806306fdde03146100c3578063095ea7b3146100e1575b600080fd5b6100cb6101e4565b6040516100d891906107bf565b60405180910390f35b6100f46100ef366004610854565b610276565b60405190151581526020016100d8565b6002545b6040519081526020016100d8565b6100f461012436600461087e565b610290565b604051601281526020016100d8565b61014b610146366004610854565b6102b4565b005b61010861015b3660046108bb565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6100cb6102c2565b6100f4610199366004610854565b6102d1565b6101086101ac3660046108dd565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6060600380546101f390610910565b80601f016020809104026020016040519081016040528092919081815260200182805461021f90610910565b801561026c5780601f106102415761010080835404028352916020019161026c565b820191906000526020600020905b81548152906001019060200180831161024f57829003601f168201915b5050505050905090565b6000336102848185856102df565b60019150505b92915050565b60003361029e8582856102f1565b6102a98585856103c5565b506001949350505050565b6102be8282610470565b5050565b6060600480546101f390610910565b6000336102848185856103c5565b6102ec83838360016104cc565b505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146103bf57818110156103b0576040517ffb8f41b200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416600482015260248101829052604481018390526064015b60405180910390fd5b6103bf848484840360006104cc565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8316610415576040517f96c6fd1e000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff8216610465576040517fec442f05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b6102ec838383610614565b73ffffffffffffffffffffffffffffffffffffffff82166104c0576040517fec442f05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b6102be60008383610614565b73ffffffffffffffffffffffffffffffffffffffff841661051c576040517fe602df05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff831661056c576040517f94280d62000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260016020908152604080832093871683529290522082905580156103bf578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161060691815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff831661064c5780600260008282546106419190610963565b909155506106fe9050565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260208190526040902054818110156106d2576040517fe450d38c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8516600482015260248101829052604481018390526064016103a7565b73ffffffffffffffffffffffffffffffffffffffff841660009081526020819052604090209082900390555b73ffffffffffffffffffffffffffffffffffffffff821661072757600280548290039055610753565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090208054820190555b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516107b291815260200190565b60405180910390a3505050565b602081526000825180602084015260005b818110156107ed57602081860181015160408684010152016107d0565b5060006040828501015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011684010191505092915050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461084f57600080fd5b919050565b6000806040838503121561086757600080fd5b6108708361082b565b946020939093013593505050565b60008060006060848603121561089357600080fd5b61089c8461082b565b92506108aa6020850161082b565b929592945050506040919091013590565b6000602082840312156108cd57600080fd5b6108d68261082b565b9392505050565b600080604083850312156108f057600080fd5b6108f98361082b565b91506109076020840161082b565b90509250929050565b600181811c9082168061092457607f821691505b60208210810361095d577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b8082018082111561028a577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea26469706673582212207e804ca539d49155d2b6bc19268ce22f9f857027c75247d69fb0d56a089c93d464736f6c634300081a003360a060405234801561001057600080fd5b5060405161179838038061179883398101604081905261002f916101e5565b60016000556002805460ff191690556001600160a01b038316158061005b57506001600160a01b038216155b8061006d57506001600160a01b038116155b1561008b5760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b0383166080526100a3600082610134565b506100ce7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a82610134565b506100f97f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e483610134565b5061011260008051602061177883398151915282610134565b5061012b60008051602061177883398151915283610134565b50505050610228565b60008281526001602090815260408083206001600160a01b038516845290915281205460ff166101bf5760008381526001602081815260408084206001600160a01b0387168086529252808420805460ff19169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45060016101c3565b5060005b92915050565b80516001600160a01b03811681146101e057600080fd5b919050565b6000806000606084860312156101fa57600080fd5b610203846101c9565b9250610211602085016101c9565b915061021f604085016101c9565b90509250925092565b60805161151961025f6000396000818161019e01528181610500015281816105620152818161099101526109f301526115196000f3fe608060405234801561001057600080fd5b506004361061016c5760003560e01c806385f438c1116100cd578063c8a0236211610081578063d936547e11610066578063d936547e14610355578063d9caed1214610378578063e63ab1e91461038b57600080fd5b8063c8a023621461032f578063d547741f1461034257600080fd5b80639a590427116100b25780639a590427146103015780639b19251a14610314578063a217fddf1461032757600080fd5b806385f438c11461029457806391d14854146102bb57600080fd5b806336568abe11610124578063570618e111610109578063570618e11461025a5780635c975abb146102815780638456cb591461028c57600080fd5b806336568abe1461023f5780633f4ba83a1461025257600080fd5b806321fc65f21161015557806321fc65f2146101e5578063248a9ca3146101fa5780632f2ff15d1461022c57600080fd5b806301ffc9a714610171578063116191b614610199575b600080fd5b61018461017f366004611224565b6103b2565b60405190151581526020015b60405180910390f35b6101c07f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610190565b6101f86101f336600461128f565b61044b565b005b61021e61020836600461132c565b6000908152600160208190526040909120015490565b604051908152602001610190565b6101f861023a366004611345565b61064c565b6101f861024d366004611345565b610678565b6101f86106d6565b61021e7f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a81565b60025460ff16610184565b6101f861070b565b61021e7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b6101846102c9366004611345565b600091825260016020908152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b6101f861030f366004611371565b61073d565b6101f8610322366004611371565b61080b565b61021e600081565b6101f861033d36600461128f565b6108dc565b6101f8610350366004611345565b610ac3565b610184610363366004611371565b60036020526000908152604090205460ff1681565b6101f861038636600461138c565b610ae9565b61021e7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061044557507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b610453610c15565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461047d81610c58565b610485610c62565b73ffffffffffffffffffffffffffffffffffffffff861660009081526003602052604090205460ff166104e4576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61052573ffffffffffffffffffffffffffffffffffffffff87167f000000000000000000000000000000000000000000000000000000000000000086610ca1565b6040517f5131ab5900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690635131ab599061059f9089908990899089908990600401611412565b600060405180830381600087803b1580156105b957600080fd5b505af11580156105cd573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167f85b5be9cf454e05e0bddf49315178102227c312078eefa3c00294fb4d912ae4e8686866040516106329392919061146f565b60405180910390a3506106456001600055565b5050505050565b6000828152600160208190526040909120015461066881610c58565b6106728383610d2e565b50505050565b73ffffffffffffffffffffffffffffffffffffffff811633146106c7576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6106d18282610ddb565b505050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61070081610c58565b610708610e7c565b50565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61073581610c58565b610708610edb565b7f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a61076781610c58565b73ffffffffffffffffffffffffffffffffffffffff82166107b4576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216600081815260036020526040808220805460ff19169055517f51085ddf9ebdded84b76e829eb58c4078e4b5bdf97d9a94723f336039da467919190a25050565b7f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a61083581610c58565b73ffffffffffffffffffffffffffffffffffffffff8216610882576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216600081815260036020526040808220805460ff19166001179055517faab7954e9d246b167ef88aeddad35209ca2489d95a8aeb59e288d9b19fae5a549190a25050565b6108e4610c15565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461090e81610c58565b610916610c62565b73ffffffffffffffffffffffffffffffffffffffff861660009081526003602052604090205460ff16610975576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6109b673ffffffffffffffffffffffffffffffffffffffff87167f000000000000000000000000000000000000000000000000000000000000000086610ca1565b6040517fb8969bd400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063b8969bd490610a309089908990899089908990600401611412565b600060405180830381600087803b158015610a4a57600080fd5b505af1158015610a5e573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fb9d4efa96044e5f5e03e696fa9ae2ff66911cc27e8a637c3627c75bc5b2241c88686866040516106329392919061146f565b60008281526001602081905260409091200154610adf81610c58565b6106728383610ddb565b610af1610c15565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e4610b1b81610c58565b610b23610c62565b73ffffffffffffffffffffffffffffffffffffffff841660009081526003602052604090205460ff16610b82576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610ba373ffffffffffffffffffffffffffffffffffffffff85168484610ca1565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f9b1bfa7fa9ee420a16e124f794c35ac9f90472acc99140eb2f6447c714cad8eb84604051610c0291815260200190565b60405180910390a3506106d16001600055565b600260005403610c51576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b6107088133610f18565b60025460ff1615610c9f576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6040805173ffffffffffffffffffffffffffffffffffffffff8416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb000000000000000000000000000000000000000000000000000000001790526106d1908490610fa9565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff16610dd357600083815260016020818152604080842073ffffffffffffffffffffffffffffffffffffffff87168086529252808420805460ff19169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a4506001610445565b506000610445565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff1615610dd357600083815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff86168085529252808320805460ff1916905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a4506001610445565b610e8461103f565b6002805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b610ee3610c62565b6002805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258610eb13390565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16610fa5576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82166004820152602481018390526044015b60405180910390fd5b5050565b6000610fcb73ffffffffffffffffffffffffffffffffffffffff84168361107b565b90508051600014158015610ff0575080806020019051810190610fee9190611492565b155b156106d1576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84166004820152602401610f9c565b60025460ff16610c9f576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606061108983836000611090565b9392505050565b6060814710156110ce576040517fcd786059000000000000000000000000000000000000000000000000000000008152306004820152602401610f9c565b6000808573ffffffffffffffffffffffffffffffffffffffff1684866040516110f791906114b4565b60006040518083038185875af1925050503d8060008114611134576040519150601f19603f3d011682016040523d82523d6000602084013e611139565b606091505b5091509150611149868383611153565b9695505050505050565b60608261116857611163826111e2565b611089565b815115801561118c575073ffffffffffffffffffffffffffffffffffffffff84163b155b156111db576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85166004820152602401610f9c565b5080611089565b8051156111f25780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006020828403121561123657600080fd5b81357fffffffff000000000000000000000000000000000000000000000000000000008116811461108957600080fd5b803573ffffffffffffffffffffffffffffffffffffffff8116811461128a57600080fd5b919050565b6000806000806000608086880312156112a757600080fd5b6112b086611266565b94506112be60208701611266565b935060408601359250606086013567ffffffffffffffff8111156112e157600080fd5b8601601f810188136112f257600080fd5b803567ffffffffffffffff81111561130957600080fd5b88602082840101111561131b57600080fd5b959894975092955050506020019190565b60006020828403121561133e57600080fd5b5035919050565b6000806040838503121561135857600080fd5b8235915061136860208401611266565b90509250929050565b60006020828403121561138357600080fd5b61108982611266565b6000806000606084860312156113a157600080fd5b6113aa84611266565b92506113b860208501611266565b929592945050506040919091013590565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff8616815273ffffffffffffffffffffffffffffffffffffffff851660208201528360408201526080606082015260006114646080830184866113c9565b979650505050505050565b8381526040602082015260006114896040830184866113c9565b95945050505050565b6000602082840312156114a457600080fd5b8151801515811461108957600080fd5b6000825160005b818110156114d557602081860181015185830152016114bb565b50600092019182525091905056fea26469706673582212207ea3ad4ba4a6d39c3be3cec464753448900300ac3b508b4000815de5b914c53064736f6c634300081a00338619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a60c060405260001960035534801561001657600080fd5b5060405161155a38038061155a83398101604081905261003591610220565b60016000819055805460ff19169055838383836001600160a01b038416158061006557506001600160a01b038316155b8061007757506001600160a01b038216155b8061008957506001600160a01b038116155b156100a75760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b03808516608052831660a0526100c5600082610154565b506100f07f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e483610154565b5061011b7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb83610154565b506101467f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a82610154565b505050505050505050610274565b60008281526002602090815260408083206001600160a01b038516845290915281205460ff166101fa5760008381526002602090815260408083206001600160a01b03861684529091529020805460ff191660011790556101b23390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45060016101fe565b5060005b92915050565b80516001600160a01b038116811461021b57600080fd5b919050565b6000806000806080858703121561023657600080fd5b61023f85610204565b935061024d60208601610204565b925061025b60408601610204565b915061026960608601610204565b905092959194509250565b60805160a0516112826102d86000396000818161021d01528181610531015281816108240152818161097b01528181610ad00152610bf20152600081816101d1015281816104a1015281816105040152818161079401526107f701526112826000f3fe608060405234801561001057600080fd5b50600436106101775760003560e01c80635e3e9fef116100d857806391d148541161008c578063d547741f11610066578063d547741f14610386578063d5abeb0114610399578063e63ab1e9146103a257600080fd5b806391d1485414610311578063a217fddf14610357578063a783c7891461035f57600080fd5b8063743e0c9b116100bd578063743e0c9b146102cf5780638456cb59146102e257806385f438c1146102ea57600080fd5b80635e3e9fef146102a95780636f8b44b0146102bc57600080fd5b8063248a9ca31161012f57806336568abe1161011457806336568abe146102835780633f4ba83a146102965780635c975abb1461029e57600080fd5b8063248a9ca31461023f5780632f2ff15d1461027057600080fd5b8063106e629011610160578063106e6290146101b9578063116191b6146101cc57806321e093b11461021857600080fd5b806301ffc9a71461017c57806302d5c899146101a4575b600080fd5b61018f61018a366004610fb4565b6103c9565b60405190151581526020015b60405180910390f35b6101b76101b2366004611026565b610462565b005b6101b76101c73660046110b8565b6105f7565b6101f37f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161019b565b6101f37f000000000000000000000000000000000000000000000000000000000000000081565b61026261024d3660046110eb565b60009081526002602052604090206001015490565b60405190815260200161019b565b6101b761027e366004611104565b61069c565b6101b7610291366004611104565b6106c7565b6101b7610720565b60015460ff1661018f565b6101b76102b7366004611026565b610755565b6101b76102ca3660046110eb565b6108d0565b6101b76102dd3660046110eb565b61093e565b6101b76109e8565b6102627f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b61018f61031f366004611104565b600091825260026020908152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b610262600081565b6102627f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb81565b6101b7610394366004611104565b610a1a565b61026260035481565b6102627f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061045c57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b61046a610a3f565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461049481610a82565b61049c610a8c565b6104c77f00000000000000000000000000000000000000000000000000000000000000008684610acb565b6040517fb8969bd400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063b8969bd490610561907f0000000000000000000000000000000000000000000000000000000000000000908a908a908a908a90600401611179565b600060405180830381600087803b15801561057b57600080fd5b505af115801561058f573d6000803e3d6000fd5b505050508573ffffffffffffffffffffffffffffffffffffffff167fba96f26bdda53eb8c8ba39045dfb4ff39753fbc7a6edcf250a88e75e78d102fe8686866040516105dd939291906111d6565b60405180910390a2506105f06001600055565b5050505050565b6105ff610a3f565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461062981610a82565b610631610a8c565b61063c848484610acb565b8373ffffffffffffffffffffffffffffffffffffffff167f884edad9ce6fa2440d8a54cc123490eb96d2768479d49ff9c7366125a94243648460405161068491815260200190565b60405180910390a2506106976001600055565b505050565b6000828152600260205260409020600101546106b781610a82565b6106c18383610c53565b50505050565b73ffffffffffffffffffffffffffffffffffffffff81163314610716576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6106978282610d53565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61074a81610a82565b610752610e12565b50565b61075d610a3f565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461078781610a82565b61078f610a8c565b6107ba7f00000000000000000000000000000000000000000000000000000000000000008684610acb565b6040517f5131ab5900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690635131ab5990610854907f0000000000000000000000000000000000000000000000000000000000000000908a908a908a908a90600401611179565b600060405180830381600087803b15801561086e57600080fd5b505af1158015610882573d6000803e3d6000fd5b505050508573ffffffffffffffffffffffffffffffffffffffff167f7772f56296d3a5202974a45c61c9188d844ab4d6eeb18c851e4b8d5384ca6ced8686866040516105dd939291906111d6565b7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb6108fa81610a82565b610902610a8c565b60038290556040518281527f7810bd47de260c3e9ee10061cf438099dd12256c79485f12f94dbccc981e806c9060200160405180910390a15050565b610946610a8c565b6040517f79cc6790000000000000000000000000000000000000000000000000000000008152336004820152602481018290527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16906379cc679090604401600060405180830381600087803b1580156109d457600080fd5b505af11580156105f0573d6000803e3d6000fd5b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610a1281610a82565b610752610e8f565b600082815260026020526040902060010154610a3581610a82565b6106c18383610d53565b600260005403610a7b576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b6107528133610ee8565b60015460ff1615610ac9576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6003547f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b39573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b5d91906111f9565b610b679084611212565b1115610b9f576040517fc30436e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f1e458bee00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff848116600483015260248201849052604482018390527f00000000000000000000000000000000000000000000000000000000000000001690631e458bee90606401600060405180830381600087803b158015610c3657600080fd5b505af1158015610c4a573d6000803e3d6000fd5b50505050505050565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff16610d4b57600083815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff86168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055610ce93390565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a450600161045c565b50600061045c565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff1615610d4b57600083815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8616808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a450600161045c565b610e1a610f78565b600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b610e97610a8c565b600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016811790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25833610e65565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16610f74576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff821660048201526024810183905260440160405180910390fd5b5050565b60015460ff16610ac9576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060208284031215610fc657600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610ff657600080fd5b9392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461102157600080fd5b919050565b60008060008060006080868803121561103e57600080fd5b61104786610ffd565b945060208601359350604086013567ffffffffffffffff81111561106a57600080fd5b8601601f8101881361107b57600080fd5b803567ffffffffffffffff81111561109257600080fd5b8860208284010111156110a457600080fd5b959894975060200195606001359392505050565b6000806000606084860312156110cd57600080fd5b6110d684610ffd565b95602085013595506040909401359392505050565b6000602082840312156110fd57600080fd5b5035919050565b6000806040838503121561111757600080fd5b8235915061112760208401610ffd565b90509250929050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff8616815273ffffffffffffffffffffffffffffffffffffffff851660208201528360408201526080606082015260006111cb608083018486611130565b979650505050505050565b8381526040602082015260006111f0604083018486611130565b95945050505050565b60006020828403121561120b57600080fd5b5051919050565b8082018082111561045c577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea2646970667358221220de5fa55e0ca79ea2f08903481d01ea00bbbf346b9cfba44e12a2dd6f3a6f2e8a64736f6c634300081a00336080604052348015600f57600080fd5b506001600055610d3a806100246000396000f3fe6080604052600436106100635760003560e01c8063c513169111610040578063c5131691146100c1578063e04d4f97146100e1578063f05b6abf146100f457005b8063357fc5a21461006c5780636ed701691461008c5780638fcaa0b5146100a157005b3661006a57005b005b34801561007857600080fd5b5061006a6100873660046106c0565b610114565b34801561009857600080fd5b5061006a6101aa565b3480156100ad57600080fd5b5061006a6100bc3660046106fc565b6101df565b3480156100cd57600080fd5b5061006a6100dc3660046106c0565b61021e565b61006a6100ef366004610895565b6102f9565b34801561010057600080fd5b5061006a61010f366004610981565b61033d565b61011c610372565b61013e73ffffffffffffffffffffffffffffffffffffffff83163383866103b5565b604080513381526020810185905273ffffffffffffffffffffffffffffffffffffffff848116828401528316606082015290517f2b58128f24a9f59127cc5b5430d70542b22220f2d9adaa86e442b816ab98af609181900360800190a16101a56001600055565b505050565b6040513381527fbcaadb46b82a48af60b608f58959ae6b8310d1b0a0d094c2e9ec3208ed39f2a09060200160405180910390a1565b7f0d3f65f00e631663aa85c96330b5c7a83bb29af3630c0063776f985edc3037aa33838360405161021293929190610a6b565b60405180910390a15050565b610226610372565b6000610233600285610ad5565b90508060000361026f576040517f1f2a200500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61029173ffffffffffffffffffffffffffffffffffffffff84163384846103b5565b604080513381526020810183905273ffffffffffffffffffffffffffffffffffffffff858116828401528416606082015290517f2b58128f24a9f59127cc5b5430d70542b22220f2d9adaa86e442b816ab98af609181900360800190a1506101a56001600055565b7f1f1ff1f5fb41346850b2f5c04e6c767e2f1c8a525c5c0c5cdb60cdf3ca5f62fa3334858585604051610330959493929190610b7e565b60405180910390a1505050565b7f74a53cd528a921fca7dbdee62f86819051d3cc98f214951f4238e8843f20b146338484846040516103309493929190610c08565b6002600054036103ae576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b6040805173ffffffffffffffffffffffffffffffffffffffff85811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd0000000000000000000000000000000000000000000000000000000017905261044a908590610450565b50505050565b600061047273ffffffffffffffffffffffffffffffffffffffff8416836104eb565b905080516000141580156104975750808060200190518101906104959190610ccb565b155b156101a5576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff841660048201526024015b60405180910390fd5b60606104f983836000610500565b9392505050565b60608147101561053e576040517fcd7860590000000000000000000000000000000000000000000000000000000081523060048201526024016104e2565b6000808573ffffffffffffffffffffffffffffffffffffffff1684866040516105679190610ce8565b60006040518083038185875af1925050503d80600081146105a4576040519150601f19603f3d011682016040523d82523d6000602084013e6105a9565b606091505b50915091506105b98683836105c3565b9695505050505050565b6060826105d8576105d382610652565b6104f9565b81511580156105fc575073ffffffffffffffffffffffffffffffffffffffff84163b155b1561064b576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff851660048201526024016104e2565b50806104f9565b8051156106625780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50565b803573ffffffffffffffffffffffffffffffffffffffff811681146106bb57600080fd5b919050565b6000806000606084860312156106d557600080fd5b833592506106e560208501610697565b91506106f360408501610697565b90509250925092565b6000806020838503121561070f57600080fd5b823567ffffffffffffffff81111561072657600080fd5b8301601f8101851361073757600080fd5b803567ffffffffffffffff81111561074e57600080fd5b85602082840101111561076057600080fd5b6020919091019590945092505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156107e6576107e6610770565b604052919050565b600082601f8301126107ff57600080fd5b813567ffffffffffffffff81111561081957610819610770565b61084a60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8401160161079f565b81815284602083860101111561085f57600080fd5b816020850160208301376000918101602001919091529392505050565b801515811461069457600080fd5b80356106bb8161087c565b6000806000606084860312156108aa57600080fd5b833567ffffffffffffffff8111156108c157600080fd5b6108cd868287016107ee565b9350506020840135915060408401356108e58161087c565b809150509250925092565b600067ffffffffffffffff82111561090a5761090a610770565b5060051b60200190565b600082601f83011261092557600080fd5b8135610938610933826108f0565b61079f565b8082825260208201915060208360051b86010192508583111561095a57600080fd5b602085015b8381101561097757803583526020928301920161095f565b5095945050505050565b60008060006060848603121561099657600080fd5b833567ffffffffffffffff8111156109ad57600080fd5b8401601f810186136109be57600080fd5b80356109cc610933826108f0565b8082825260208201915060208360051b8501019250888311156109ee57600080fd5b602084015b83811015610a3057803567ffffffffffffffff811115610a1257600080fd5b610a218b6020838901016107ee565b845250602092830192016109f3565b509550505050602084013567ffffffffffffffff811115610a5057600080fd5b610a5c86828701610914565b9250506106f36040850161088a565b73ffffffffffffffffffffffffffffffffffffffff8416815260406020820152816040820152818360608301376000818301606090810191909152601f9092017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016010192915050565b600082610b0b577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60005b83811015610b2b578181015183820152602001610b13565b50506000910152565b60008151808452610b4c816020860160208601610b10565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b73ffffffffffffffffffffffffffffffffffffffff8616815284602082015260a060408201526000610bb360a0830186610b34565b6060830194909452509015156080909101529392505050565b600081518084526020840193506020830160005b82811015610bfe578151865260209586019590910190600101610be0565b5093949350505050565b60006080820173ffffffffffffffffffffffffffffffffffffffff871683526080602084015280865180835260a08501915060a08160051b86010192506020880160005b82811015610c9b577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60878603018452610c86858351610b34565b94506020938401939190910190600101610c4c565b505050508281036040840152610cb18186610bcc565b915050610cc2606083018415159052565b95945050505050565b600060208284031215610cdd57600080fd5b81516104f98161087c565b60008251610cfa818460208701610b10565b919091019291505056fea2646970667358221220556072e1abafc3c4063b8cce832228b4f309b93726aaa6a6dfab20cb880c6d1864736f6c634300081a0033a2646970667358221220208a4f41b7153a2c540116af7d5c95f86f00ed3b6b433f0c017f48f90adf6f4364736f6c634300081a0033", } // GatewayEVMUUPSUpgradeTestABI is the input ABI used to generate the binding from. diff --git a/v2/pkg/gatewayevmzevm.t.sol/gatewayevmzevmtest.go b/v2/pkg/gatewayevmzevm.t.sol/gatewayevmzevmtest.go index 89ce7f00..92c0ea99 100644 --- a/v2/pkg/gatewayevmzevm.t.sol/gatewayevmzevmtest.go +++ b/v2/pkg/gatewayevmzevm.t.sol/gatewayevmzevmtest.go @@ -50,7 +50,7 @@ type StdInvariantFuzzSelector struct { // GatewayEVMZEVMTestMetaData contains all meta data concerning the GatewayEVMZEVMTest contract. var GatewayEVMZEVMTestMetaData = &bind.MetaData{ ABI: "[{\"type\":\"function\",\"name\":\"IS_TEST\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeArtifacts\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedArtifacts_\",\"type\":\"string[]\",\"internalType\":\"string[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeContracts\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedContracts_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeSelectors\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedSelectors_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzSelector[]\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"selectors\",\"type\":\"bytes4[]\",\"internalType\":\"bytes4[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeSenders\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedSenders_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"failed\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"setUp\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"targetArtifactSelectors\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedArtifactSelectors_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzArtifactSelector[]\",\"components\":[{\"name\":\"artifact\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"selectors\",\"type\":\"bytes4[]\",\"internalType\":\"bytes4[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetArtifacts\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedArtifacts_\",\"type\":\"string[]\",\"internalType\":\"string[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetContracts\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedContracts_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetInterfaces\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedInterfaces_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzInterface[]\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"artifacts\",\"type\":\"string[]\",\"internalType\":\"string[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetSelectors\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedSelectors_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzSelector[]\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"selectors\",\"type\":\"bytes4[]\",\"internalType\":\"bytes4[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetSenders\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedSenders_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"testCallReceiverEVMFromSenderZEVM\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testCallReceiverEVMFromZEVM\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawAndCallReceiverEVMFromSenderZEVM\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawAndCallReceiverEVMFromZEVM\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"event\",\"name\":\"Call\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"receiver\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Call\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"chainId\",\"type\":\"uint256\",\"indexed\":true,\"internalType\":\"uint256\"},{\"name\":\"receiver\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"message\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Deposit\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"receiver\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"asset\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Executed\",\"inputs\":[{\"name\":\"destination\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ExecutedWithERC20\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedERC20\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"token\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"destination\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedNoParams\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedNonPayable\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"strs\",\"type\":\"string[]\",\"indexed\":false,\"internalType\":\"string[]\"},{\"name\":\"nums\",\"type\":\"uint256[]\",\"indexed\":false,\"internalType\":\"uint256[]\"},{\"name\":\"flag\",\"type\":\"bool\",\"indexed\":false,\"internalType\":\"bool\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedPayable\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"str\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"num\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"flag\",\"type\":\"bool\",\"indexed\":false,\"internalType\":\"bool\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedRevert\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Reverted\",\"inputs\":[{\"name\":\"destination\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RevertedWithERC20\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Withdrawal\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"chainId\",\"type\":\"uint256\",\"indexed\":true,\"internalType\":\"uint256\"},{\"name\":\"receiver\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"zrc20\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"gasfee\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"protocolFlatFee\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"message\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log\",\"inputs\":[{\"name\":\"\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_address\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_array\",\"inputs\":[{\"name\":\"val\",\"type\":\"uint256[]\",\"indexed\":false,\"internalType\":\"uint256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_array\",\"inputs\":[{\"name\":\"val\",\"type\":\"int256[]\",\"indexed\":false,\"internalType\":\"int256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_array\",\"inputs\":[{\"name\":\"val\",\"type\":\"address[]\",\"indexed\":false,\"internalType\":\"address[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_bytes\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_bytes32\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_int\",\"inputs\":[{\"name\":\"\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_address\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_array\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"uint256[]\",\"indexed\":false,\"internalType\":\"uint256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_array\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"int256[]\",\"indexed\":false,\"internalType\":\"int256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_array\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"address[]\",\"indexed\":false,\"internalType\":\"address[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_bytes\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_bytes32\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_decimal_int\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"},{\"name\":\"decimals\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_decimal_uint\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"decimals\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_int\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_string\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_uint\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_string\",\"inputs\":[{\"name\":\"\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_uint\",\"inputs\":[{\"name\":\"\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"logs\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"ApprovalFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"CallerIsNotFungibleModule\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ConnectorInitialized\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"CustodyInitialized\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"DepositFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ExecutionFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"FailedZetaSent\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"GasFeeTransferFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientERC20Amount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientETHAmount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientZRC20Amount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientZetaAmount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidTarget\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NotWhitelistedInCustody\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OnlyWZETAOrFungible\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"WithdrawalFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZRC20BurnFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZRC20DepositFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZRC20TransferFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZeroAddress\",\"inputs\":[]}]", - Bin: "0x6080604052600c8054600160ff199182168117909255601f80549091169091179055348015602c57600080fd5b506201087d806200003e6000396000f3fe608060405234801561001057600080fd5b506004361061011b5760003560e01c806385226c81116100b2578063b5508aa911610081578063d7a525fc11610066578063d7a525fc146101ec578063e20c9f71146101f4578063fa7626d4146101fc57600080fd5b8063b5508aa9146101cc578063ba414fa6146101d457600080fd5b806385226c8114610192578063916a17c6146101a75780639683c695146101bc578063b0464fdc146101c457600080fd5b80633f7286f4116100ee5780633f7286f414610165578063524744131461016d57806366d9a9a0146101755780636ff15ccc1461018a57600080fd5b80630a9254e4146101205780631ed7831c1461012a5780632ade3880146101485780633e5e3c231461015d575b600080fd5b610128610209565b005b61013261118d565b60405161013f9190617944565b60405180910390f35b6101506111ef565b60405161013f91906179e0565b610132611331565b610132611391565b6101286113f1565b61017d611c4e565b60405161013f9190617b46565b610128611dd0565b61019a6125e8565b60405161013f9190617be4565b6101af6126b8565b60405161013f9190617c5b565b6101286127b3565b6101af612d2f565b61019a612e2a565b6101dc612efa565b604051901515815260200161013f565b610128612fce565b6101326136b0565b601f546101dc9060ff1681565b602680547fffffffffffffffffffffffff00000000000000000000000000000000000000009081163017909155602780548216611234179055602880548216615678179055602e805490911661432117905560405161026790617829565b60408082526004908201527f746573740000000000000000000000000000000000000000000000000000000060608201526080602082018190526003908201527f54544b000000000000000000000000000000000000000000000000000000000060a082015260c001604051809103906000f0801580156102ec573d6000803e3d6000fd5b50602380547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039290921691909117905560405161033190617829565b604080825260049082018190527f7a6574610000000000000000000000000000000000000000000000000000000060608301526080602083018190528201527f5a4554410000000000000000000000000000000000000000000000000000000060a082015260c001604051809103906000f0801580156103b5573d6000803e3d6000fd5b50602480547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039283169081178255604080518082018252600e81527f4761746577617945564d2e736f6c0000000000000000000000000000000000006020820152602854602654925190861694810194909452604484019290925290921660648201526104a6919060840160408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fc0c53b8b00000000000000000000000000000000000000000000000000000000179052613710565b601f80547fffffffffffffffffffffff0000000000000000000000000000000000000000ff166101006001600160a01b0393841681029190911791829055602080549190920483167fffffffffffffffffffffffff0000000000000000000000000000000000000000909116811790915560285460265460405192939182169291169061053290617837565b6001600160a01b03938416815291831660208301529091166040820152606001604051809103906000f08015801561056e573d6000803e3d6000fd5b50602180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392831617905560205460245460285460265460405193851694928316939183169216906105c990617845565b6001600160a01b039485168152928416602084015290831660408301529091166060820152608001604051809103906000f08015801561060d573d6000803e3d6000fd5b50602280547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039283161790556028546040517fc88a5e6d00000000000000000000000000000000000000000000000000000000815291166004820152670de0b6b3a76400006024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c88a5e6d90604401600060405180830381600087803b1580156106b957600080fd5b505af11580156106cd573d6000803e3d6000fd5b50506026546040517f06447d560000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506306447d569150602401600060405180830381600087803b15801561074357600080fd5b505af1158015610757573d6000803e3d6000fd5b50506020546021546040517fae7a3a6f0000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201529116925063ae7a3a6f9150602401600060405180830381600087803b1580156107bd57600080fd5b505af11580156107d1573d6000803e3d6000fd5b50506020546022546040517f10188aef0000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152911692506310188aef9150602401600060405180830381600087803b15801561083757600080fd5b505af115801561084b573d6000803e3d6000fd5b505050507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b03166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156108ad57600080fd5b505af11580156108c1573d6000803e3d6000fd5b50506023546026546040517f40c10f190000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620f42406024820152911692506340c10f199150604401600060405180830381600087803b15801561093057600080fd5b505af1158015610944573d6000803e3d6000fd5b50506023546021546040517fa9059cbb0000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201526207a12060248201529116925063a9059cbb91506044016020604051808303816000875af11580156109b8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109dc9190617cf2565b506040516109e990617853565b604051809103906000f080158015610a05573d6000803e3d6000fd5b50602580547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03928316179055604080518082018252600f81527f476174657761795a45564d2e736f6c0000000000000000000000000000000000602082015260248054602e54935190851691810191909152919092166044820152610aee919060640160408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f485cc95500000000000000000000000000000000000000000000000000000000179052613710565b602980546001600160a01b03929092167fffffffffffffffffffffffff00000000000000000000000000000000000000009283168117909155602a80549092168117909155604051610b3f90617861565b6001600160a01b039091168152602001604051809103906000f080158015610b6b573d6000803e3d6000fd5b50602b80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03929092169190911790556040517f06447d5600000000000000000000000000000000000000000000000000000000815273735b14bb79463307aacbed86daf3322b1e6226ab6004820181905290737109709ecfa91a80626ff3989d68f67f5b1dd12d906306447d5690602401600060405180830381600087803b158015610c2057600080fd5b505af1158015610c34573d6000803e3d6000fd5b505050506000806000604051610c499061786f565b6001600160a01b03938416815291831660208301529091166040820152606001604051809103906000f080158015610c85573d6000803e3d6000fd5b50602c80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03928316908117909155602a54604051601293600193600093849391921690610cdb9061787d565b610cea96959493929190617d14565b604051809103906000f080158015610d06573d6000803e3d6000fd5b50602d80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03928316908117909155602c546040517fee2815ba0000000000000000000000000000000000000000000000000000000081526001600482015260248101929092529091169063ee2815ba90604401600060405180830381600087803b158015610d9d57600080fd5b505af1158015610db1573d6000803e3d6000fd5b5050602c546040517fa7cb050700000000000000000000000000000000000000000000000000000000815260016004820181905260248201526001600160a01b03909116925063a7cb05079150604401600060405180830381600087803b158015610e1b57600080fd5b505af1158015610e2f573d6000803e3d6000fd5b5050602d54602e546040517f47e7ef240000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620f42406024820152911692506347e7ef2491506044016020604051808303816000875af1158015610ea3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ec79190617cf2565b50602d54602b546040517f47e7ef240000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620f424060248201529116906347e7ef24906044016020604051808303816000875af1158015610f38573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f5c9190617cf2565b507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b03166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610fbb57600080fd5b505af1158015610fcf573d6000803e3d6000fd5b5050602e546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b15801561104557600080fd5b505af1158015611059573d6000803e3d6000fd5b5050602d54602a546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620f424060248201529116925063095ea7b391506044016020604051808303816000875af11580156110cd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110f19190617cf2565b506028546040517fc88a5e6d0000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152670de0b6b3a76400006024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c88a5e6d90604401600060405180830381600087803b15801561117257600080fd5b505af1158015611186573d6000803e3d6000fd5b5050505050565b606060168054806020026020016040519081016040528092919081815260200182805480156111e557602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116111c7575b5050505050905090565b6060601e805480602002602001604051908101604052809291908181526020016000905b8282101561132857600084815260208082206040805180820182526002870290920180546001600160a01b03168352600181018054835181870281018701909452808452939591948681019491929084015b8282101561131157838290600052602060002001805461128490617e09565b80601f01602080910402602001604051908101604052809291908181526020018280546112b090617e09565b80156112fd5780601f106112d2576101008083540402835291602001916112fd565b820191906000526020600020905b8154815290600101906020018083116112e057829003601f168201915b505050505081526020019060010190611265565b505050508152505081526020019060010190611213565b50505050905090565b606060188054806020026020016040519081016040528092919081815260200182805480156111e5576020028201919060005260206000209081546001600160a01b031681526001909101906020018083116111c7575050505050905090565b606060178054806020026020016040519081016040528092919081815260200182805480156111e5576020028201919060005260206000209081546001600160a01b031681526001909101906020018083116111c7575050505050905090565b604080518082018252600681527f48656c6c6f2100000000000000000000000000000000000000000000000000006020820152602d54602b5492517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b0393841660048201529192602a92600192670de0b6b3a7640000926000929116906370a0823190602401602060405180830381865afa15801561149d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114c19190617e56565b6040519091506000907fe04d4f9700000000000000000000000000000000000000000000000000000000906114fe90889088908890602401617e6f565b60408051601f19818403018152918152602080830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909516949094179093526025549051919350600092611597926001600160a01b03909216910160609190911b6bffffffffffffffffffffffff1916815260140190565b60408051601f1981840301815290829052602d546115c892620f4240916001600160a01b0316908690602401617e99565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f7993c1e000000000000000000000000000000000000000000000000000000000179052602a5490517ff30c7ba3000000000000000000000000000000000000000000000000000000008152919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f30c7ba391611685916001600160a01b0391909116906000908690600401617ed8565b600060405180830381600087803b15801561169f57600080fd5b505af11580156116b3573d6000803e3d6000fd5b5050602e546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b15801561172957600080fd5b505af115801561173d573d6000803e3d6000fd5b5050602b5460255460405160609190911b6bffffffffffffffffffffffff191660208201526001600160a01b039091169250630abd8905915060340160408051601f1981840301815290829052602d547fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1683526117d792620f4240916001600160a01b0316908d908d908d90600401617f00565b600060405180830381600087803b1580156117f157600080fd5b505af1158015611805573d6000803e3d6000fd5b50506020546040517fc88a5e6d0000000000000000000000000000000000000000000000000000000081526001600160a01b03909116600482015260248101879052737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c88a5e6d9150604401600060405180830381600087803b15801561188257600080fd5b505af1158015611896573d6000803e3d6000fd5b50506025546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b15801561192857600080fd5b505af115801561193c573d6000803e3d6000fd5b50506020546040517f1f1ff1f5fb41346850b2f5c04e6c767e2f1c8a525c5c0c5cdb60cdf3ca5f62fa935061198592506001600160a01b039091169087908b908b908b90617f55565b60405180910390a16020546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b158015611a1b57600080fd5b505af1158015611a2f573d6000803e3d6000fd5b50506025546040516001600160a01b0390911692507fcaf938de11c367272220bfd1d2baa99ca46665e7bc4d85f00adb51b90fe1fa9f9150611a749087908690617f96565b60405180910390a26028546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015611aee57600080fd5b505af1158015611b02573d6000803e3d6000fd5b50506020546025546040517f1cff79cd0000000000000000000000000000000000000000000000000000000081526001600160a01b039283169450631cff79cd93508892611b569216908790600401617faf565b60006040518083038185885af1158015611b74573d6000803e3d6000fd5b50505050506040513d6000823e601f3d908101601f19168201604052611b9d91908101906180b9565b50602d54602b546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260009291909116906370a0823190602401602060405180830381865afa158015611c08573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c2c9190617e56565b9050611c4481611c3f620f42408761811d565b61372f565b5050505050505050565b6060601b805480602002602001604051908101604052809291908181526020016000905b828210156113285783829060005260206000209060020201604051806040016040529081600082018054611ca590617e09565b80601f0160208091040260200160405190810160405280929190818152602001828054611cd190617e09565b8015611d1e5780601f10611cf357610100808354040283529160200191611d1e565b820191906000526020600020905b815481529060010190602001808311611d0157829003601f168201915b5050505050815260200160018201805480602002602001604051908101604052809291908181526020018280548015611db857602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019060040190602082600301049283019260010382029150808411611d655790505b50505050508152505081526020019060010190611c72565b604080518082018252600681527f48656c6c6f21000000000000000000000000000000000000000000000000000060208201529051602a90600190670de0b6b3a7640000906000907fe04d4f970000000000000000000000000000000000000000000000000000000090611e4c90879087908790602401617e6f565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009490941693909317909252602a5491517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b0390921660848301529150737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b158015611f3b57600080fd5b505af1158015611f4f573d6000803e3d6000fd5b5050602e5460255460405160609190911b6bffffffffffffffffffffffff19166020820152600093506001600160a01b0390911691507fde19dbe881cc0aeeb6e73ce19ac7b5ca695e6be8a076e3eb42292005a7fec1b59060340160408051601f19818403018152828252602d547f4d8943bb000000000000000000000000000000000000000000000000000000008452915190926001600160a01b0390921691620f4240916000918491634d8943bb916004808201926020929091908290030181865afa158015612025573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120499190617e56565b8860405161205c96959493929190618130565b60405180910390a3602e546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156120d657600080fd5b505af11580156120ea573d6000803e3d6000fd5b5050602a5460255460405160609190911b6bffffffffffffffffffffffff191660208201526001600160a01b039091169250637993c1e0915060340160408051601f1981840301815290829052602d547fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16835261218092620f4240916001600160a01b0316908790600401618183565b600060405180830381600087803b15801561219a57600080fd5b505af11580156121ae573d6000803e3d6000fd5b5050602d54602e546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260009450911691506370a0823190602401602060405180830381865afa15801561221a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061223e9190617e56565b905061224b81600061372f565b6020546040517fc88a5e6d0000000000000000000000000000000000000000000000000000000081526001600160a01b03909116600482015260248101849052737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c88a5e6d90604401600060405180830381600087803b1580156122c457600080fd5b505af11580156122d8573d6000803e3d6000fd5b50506025546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b15801561236a57600080fd5b505af115801561237e573d6000803e3d6000fd5b50506020546040517f1f1ff1f5fb41346850b2f5c04e6c767e2f1c8a525c5c0c5cdb60cdf3ca5f62fa93506123c792506001600160a01b039091169086908a908a908a90617f55565b60405180910390a16020546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b15801561245d57600080fd5b505af1158015612471573d6000803e3d6000fd5b50506025546040516001600160a01b0390911692507fcaf938de11c367272220bfd1d2baa99ca46665e7bc4d85f00adb51b90fe1fa9f91506124b69086908690617f96565b60405180910390a26028546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561253057600080fd5b505af1158015612544573d6000803e3d6000fd5b50506020546025546040517f1cff79cd0000000000000000000000000000000000000000000000000000000081526001600160a01b039283169450631cff79cd935087926125989216908790600401617faf565b60006040518083038185885af11580156125b6573d6000803e3d6000fd5b50505050506040513d6000823e601f3d908101601f191682016040526125df91908101906180b9565b50505050505050565b6060601a805480602002602001604051908101604052809291908181526020016000905b8282101561132857838290600052602060002001805461262b90617e09565b80601f016020809104026020016040519081016040528092919081815260200182805461265790617e09565b80156126a45780601f10612679576101008083540402835291602001916126a4565b820191906000526020600020905b81548152906001019060200180831161268757829003601f168201915b50505050508152602001906001019061260c565b6060601d805480602002602001604051908101604052809291908181526020016000905b828210156113285760008481526020908190206040805180820182526002860290920180546001600160a01b0316835260018101805483518187028101870190945280845293949193858301939283018282801561279b57602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190600401906020826003010492830192600103820291508084116127485790505b505050505081525050815260200190600101906126dc565b604080518082018252600681527f48656c6c6f21000000000000000000000000000000000000000000000000000060208201529051602a90600190670de0b6b3a76400009082906000907fe04d4f97000000000000000000000000000000000000000000000000000000009061283190889088908690602401617e6f565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009490941693909317909252602e5491517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b0390921660048301529150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561290457600080fd5b505af1158015612918573d6000803e3d6000fd5b5050602a546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b1580156129aa57600080fd5b505af11580156129be573d6000803e3d6000fd5b5050602e5460255460405160609190911b6bffffffffffffffffffffffff191660208201528593506001600160a01b0390911691507f5322ffbbf9261ff1f8138247942d2b03b28717141ef0a0dd080fc4be9c4e78d39060340160408051601f1981840301815290829052612a349186906181bd565b60405180910390a3602a5460255460405160609190911b6bffffffffffffffffffffffff191660208201526001600160a01b0390911690635d40e1789060340160405160208183030381529060405284846040518463ffffffff1660e01b8152600401612aa3939291906181e2565b600060405180830381600087803b158015612abd57600080fd5b505af1158015612ad1573d6000803e3d6000fd5b50506020546040517fc88a5e6d0000000000000000000000000000000000000000000000000000000081526001600160a01b03909116600482015260248101869052737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c88a5e6d9150604401600060405180830381600087803b158015612b4e57600080fd5b505af1158015612b62573d6000803e3d6000fd5b50506020546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b158015612bf457600080fd5b505af1158015612c08573d6000803e3d6000fd5b50506025546040516001600160a01b0390911692507fcaf938de11c367272220bfd1d2baa99ca46665e7bc4d85f00adb51b90fe1fa9f9150612c4d9086908590617f96565b60405180910390a26028546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015612cc757600080fd5b505af1158015612cdb573d6000803e3d6000fd5b50506020546025546040517f1cff79cd0000000000000000000000000000000000000000000000000000000081526001600160a01b039283169450631cff79cd935087926125989216908690600401617faf565b6060601c805480602002602001604051908101604052809291908181526020016000905b828210156113285760008481526020908190206040805180820182526002860290920180546001600160a01b03168352600181018054835181870281018701909452808452939491938583019392830182828015612e1257602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019060040190602082600301049283019260010382029150808411612dbf5790505b50505050508152505081526020019060010190612d53565b60606019805480602002602001604051908101604052809291908181526020016000905b82821015611328578382906000526020600020018054612e6d90617e09565b80601f0160208091040260200160405190810160405280929190818152602001828054612e9990617e09565b8015612ee65780601f10612ebb57610100808354040283529160200191612ee6565b820191906000526020600020905b815481529060010190602001808311612ec957829003601f168201915b505050505081526020019060010190612e4e565b60085460009060ff1615612f12575060085460ff1690565b6040517f667f9d70000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d600482018190527f6661696c65640000000000000000000000000000000000000000000000000000602483015260009163667f9d7090604401602060405180830381865afa158015612fa3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612fc79190617e56565b1415905090565b604080518082018252600681527f48656c6c6f21000000000000000000000000000000000000000000000000000060208201529051602a90600190670de0b6b3a76400009082906000907fe04d4f97000000000000000000000000000000000000000000000000000000009061304c90889088908690602401617e6f565b60408051601f19818403018152918152602080830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009095169490941790935260255490519193506000926130e5926001600160a01b03909216910160609190911b6bffffffffffffffffffffffff1916815260140190565b60408051601f198184030181529082905261310691859085906024016181e2565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f5d40e17800000000000000000000000000000000000000000000000000000000179052602a5490517ff30c7ba3000000000000000000000000000000000000000000000000000000008152919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f30c7ba3916131c3916001600160a01b0391909116906000908690600401617ed8565b600060405180830381600087803b1580156131dd57600080fd5b505af11580156131f1573d6000803e3d6000fd5b5050602e546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b15801561326757600080fd5b505af115801561327b573d6000803e3d6000fd5b5050602b5460255460405160609190911b6bffffffffffffffffffffffff191660208201526001600160a01b03909116925063865b36f69150603401604051602081830303815290604052858a8a8a6040518663ffffffff1660e01b81526004016132ea95949392919061820d565b600060405180830381600087803b15801561330457600080fd5b505af1158015613318573d6000803e3d6000fd5b50506020546040517fc88a5e6d0000000000000000000000000000000000000000000000000000000081526001600160a01b03909116600482015260248101879052737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c88a5e6d9150604401600060405180830381600087803b15801561339557600080fd5b505af11580156133a9573d6000803e3d6000fd5b50506025546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b15801561343b57600080fd5b505af115801561344f573d6000803e3d6000fd5b50506020546040517f1f1ff1f5fb41346850b2f5c04e6c767e2f1c8a525c5c0c5cdb60cdf3ca5f62fa935061349892506001600160a01b039091169087908b908b908b90617f55565b60405180910390a16020546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b15801561352e57600080fd5b505af1158015613542573d6000803e3d6000fd5b50506025546040516001600160a01b0390911692507fcaf938de11c367272220bfd1d2baa99ca46665e7bc4d85f00adb51b90fe1fa9f91506135879087908690617f96565b60405180910390a26028546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561360157600080fd5b505af1158015613615573d6000803e3d6000fd5b50506020546025546040517f1cff79cd0000000000000000000000000000000000000000000000000000000081526001600160a01b039283169450631cff79cd935088926136699216908790600401617faf565b60006040518083038185885af1158015613687573d6000803e3d6000fd5b50505050506040513d6000823e601f3d908101601f19168201604052611c4491908101906180b9565b606060158054806020026020016040519081016040528092919081815260200182805480156111e5576020028201919060005260206000209081546001600160a01b031681526001909101906020018083116111c7575050505050905090565b600061371a61788b565b6137258484836137b6565b9150505b92915050565b6040517f98296c540000000000000000000000000000000000000000000000000000000081526004810183905260248101829052737109709ecfa91a80626ff3989d68f67f5b1dd12d906398296c549060440160006040518083038186803b15801561379a57600080fd5b505afa1580156137ae573d6000803e3d6000fd5b505050505050565b6000806137c38584613831565b90506138266040518060400160405280601d81526020017f4552433139363750726f78792e736f6c3a4552433139363750726f78790000008152508286604051602001613811929190617faf565b6040516020818303038152906040528561383d565b9150505b9392505050565b600061382a838361386b565b60c081015151600090156138615761385a84848460c00151613886565b905061382a565b61385a8484613a2c565b60006138778383613b17565b61382a8383602001518461383d565b600080613891613b27565b9050600061389f8683613bfa565b905060006138b682606001518360200151856140a0565b905060006138c6838389896142b2565b905060006138d38261512f565b602081015181519192509060030b15613946578982604001516040516020016138fd929190618252565b60408051601f19818403018152908290527f08c379a000000000000000000000000000000000000000000000000000000000825261393d916004016182d3565b60405180910390fd5b60006139896040518060400160405280601581526020017f4465706c6f79656420746f20616464726573733a2000000000000000000000008152508360016152fe565b6040517fc6ce059d000000000000000000000000000000000000000000000000000000008152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c6ce059d906139dc9084906004016182d3565b602060405180830381865afa1580156139f9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a1d91906182e6565b9b9a5050505050505050505050565b6040517f8d1cc9250000000000000000000000000000000000000000000000000000000081526000908190737109709ecfa91a80626ff3989d68f67f5b1dd12d90638d1cc92590613a819087906004016182d3565b600060405180830381865afa158015613a9e573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052613ac691908101906180b9565b90506000613af48285604051602001613ae092919061830f565b6040516020818303038152906040526154fe565b90506001600160a01b0381166137255784846040516020016138fd92919061833e565b613b2382826000615511565b5050565b604080518082018252600381527f6f75740000000000000000000000000000000000000000000000000000000000602082015290517fd145736c000000000000000000000000000000000000000000000000000000008152606091737109709ecfa91a80626ff3989d68f67f5b1dd12d91829063d145736c90613bae9084906004016183e9565b600060405180830381865afa158015613bcb573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052613bf39190810190618430565b9250505090565b613c2c6040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b6000737109709ecfa91a80626ff3989d68f67f5b1dd12d9050613c776040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b613c8085615614565b60208201526000613c90866159f9565b90506000836001600160a01b031663d930a0e66040518163ffffffff1660e01b8152600401600060405180830381865afa158015613cd2573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052613cfa9190810190618430565b86838560200151604051602001613d149493929190618479565b60408051601f19818403018152908290527f60f9bb1100000000000000000000000000000000000000000000000000000000825291506000906001600160a01b038616906360f9bb1190613d6c9085906004016182d3565b600060405180830381865afa158015613d89573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052613db19190810190618430565b6040517fdb4235f60000000000000000000000000000000000000000000000000000000081529091506001600160a01b0386169063db4235f690613df990849060040161857d565b602060405180830381865afa158015613e16573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613e3a9190617cf2565b613e4f57816040516020016138fd91906185cf565b6040517f49c4fac80000000000000000000000000000000000000000000000000000000081526001600160a01b038616906349c4fac890613e94908490600401618661565b600060405180830381865afa158015613eb1573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052613ed99190810190618430565b84526040517fdb4235f60000000000000000000000000000000000000000000000000000000081526001600160a01b0386169063db4235f690613f209084906004016186b3565b602060405180830381865afa158015613f3d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613f619190617cf2565b15613ff6576040517f49c4fac80000000000000000000000000000000000000000000000000000000081526001600160a01b038616906349c4fac890613fab9084906004016186b3565b600060405180830381865afa158015613fc8573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052613ff09190810190618430565b60408501525b846001600160a01b03166349c4fac882866000015160405160200161401b9190618705565b6040516020818303038152906040526040518363ffffffff1660e01b81526004016140479291906181bd565b600060405180830381865afa158015614064573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261408c9190810190618430565b606085015250608083015250949350505050565b60408051600480825260a0820190925260609160009190816020015b60608152602001906001900390816140bc5790505090506040518060400160405280600481526020017f67726570000000000000000000000000000000000000000000000000000000008152508160008151811061411c5761411c618771565b60200260200101819052506040518060400160405280600381526020017f2d726c00000000000000000000000000000000000000000000000000000000008152508160018151811061417057614170618771565b60200260200101819052508460405160200161418c91906187a0565b604051602081830303815290604052816002815181106141ae576141ae618771565b6020026020010181905250826040516020016141ca919061880c565b604051602081830303815290604052816003815181106141ec576141ec618771565b602002602001018190525060006142028261512f565b602080820151604080518082018252600581527f2e6a736f6e00000000000000000000000000000000000000000000000000000081850190815282518084018452600080825290860152825180840190935290518252928101929092529192506142939060408051808201825260008082526020918201528151808301909252845182528085019082015290615c7c565b6142a857856040516020016138fd919061884d565b9695505050505050565b60a0810151604080518082018252600080825260209182015281518083019092528251808352928101910152606090737109709ecfa91a80626ff3989d68f67f5b1dd12d9015614302565b511590565b614476578260200151156143be576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605860248201527f54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f742060448201527f62652075736564207768656e207468652060736b6970566572696679536f757260648201527f6365436f646560206f7074696f6e206973206074727565600000000000000000608482015260a40161393d565b8260c0015115614476576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605360248201527f54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f742060448201527f62652075736564207768656e207468652060736b69704c6963656e736554797060648201527f6560206f7074696f6e2069732060747275656000000000000000000000000000608482015260a40161393d565b6040805160ff8082526120008201909252600091816020015b606081526020019060019003908161448f57905050905060006040518060400160405280600381526020017f6e707800000000000000000000000000000000000000000000000000000000008152508282806144ea906188de565b935060ff16815181106144ff576144ff618771565b60200260200101819052506040518060400160405280600d81526020017f302e302e312d616c7068612e370000000000000000000000000000000000000081525060405160200161455091906188fd565b60405160208183030381529060405282828061456b906188de565b935060ff168151811061458057614580618771565b60200260200101819052506040518060400160405280600681526020017f6465706c6f7900000000000000000000000000000000000000000000000000008152508282806145cd906188de565b935060ff16815181106145e2576145e2618771565b60200260200101819052506040518060400160405280600e81526020017f2d2d636f6e74726163744e616d6500000000000000000000000000000000000081525082828061462f906188de565b935060ff168151811061464457614644618771565b60200260200101819052508760200151828280614660906188de565b935060ff168151811061467557614675618771565b60200260200101819052506040518060400160405280600e81526020017f2d2d636f6e7472616374506174680000000000000000000000000000000000008152508282806146c2906188de565b935060ff16815181106146d7576146d7618771565b6020908102919091010152875182826146ef816188de565b935060ff168151811061470457614704618771565b60200260200101819052506040518060400160405280600981526020017f2d2d636861696e49640000000000000000000000000000000000000000000000815250828280614751906188de565b935060ff168151811061476657614766618771565b602002602001018190525061477a46615cdd565b8282614785816188de565b935060ff168151811061479a5761479a618771565b60200260200101819052506040518060400160405280600f81526020017f2d2d6275696c64496e666f46696c6500000000000000000000000000000000008152508282806147e7906188de565b935060ff16815181106147fc576147fc618771565b602002602001018190525086828280614814906188de565b935060ff168151811061482957614829618771565b60209081029190910101528551156149505760408051808201909152601581527f2d2d636f6e7374727563746f7242797465636f646500000000000000000000006020820152828261487a816188de565b935060ff168151811061488f5761488f618771565b60209081029190910101526040517f71aad10d0000000000000000000000000000000000000000000000000000000081526001600160a01b038416906371aad10d906148df9089906004016182d3565b600060405180830381865afa1580156148fc573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526149249190810190618430565b828261492f816188de565b935060ff168151811061494457614944618771565b60200260200101819052505b846020015115614a205760408051808201909152601281527f2d2d766572696679536f75726365436f6465000000000000000000000000000060208201528282614999816188de565b935060ff16815181106149ae576149ae618771565b60200260200101819052506040518060400160405280600581526020017f66616c73650000000000000000000000000000000000000000000000000000008152508282806149fb906188de565b935060ff1681518110614a1057614a10618771565b6020026020010181905250614be7565b614a586142fd8660a0015160408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b614aeb5760408051808201909152600d81527f2d2d6c6963656e7365547970650000000000000000000000000000000000000060208201528282614a9b816188de565b935060ff1681518110614ab057614ab0618771565b60200260200101819052508460a00151604051602001614ad091906187a0565b6040516020818303038152906040528282806149fb906188de565b8460c00151158015614b2e575060408089015181518083018352600080825260209182015282518084019093528151835290810190820152614b2c90511590565b155b15614be75760408051808201909152600d81527f2d2d6c6963656e7365547970650000000000000000000000000000000000000060208201528282614b72816188de565b935060ff1681518110614b8757614b87618771565b6020026020010181905250614b9b88615d7d565b604051602001614bab91906187a0565b604051602081830303815290604052828280614bc6906188de565b935060ff1681518110614bdb57614bdb618771565b60200260200101819052505b60408086015181518083018352600080825260209182015282518084019093528151835290810190820152614c1b90511590565b614cb05760408051808201909152600b81527f2d2d72656c61796572496400000000000000000000000000000000000000000060208201528282614c5e816188de565b935060ff1681518110614c7357614c73618771565b60200260200101819052508460400151828280614c8f906188de565b935060ff1681518110614ca457614ca4618771565b60200260200101819052505b606085015115614dd15760408051808201909152600681527f2d2d73616c74000000000000000000000000000000000000000000000000000060208201528282614cf9816188de565b935060ff1681518110614d0e57614d0e618771565b602090810291909101015260608501516040517fb11a19e800000000000000000000000000000000000000000000000000000000815260048101919091526001600160a01b0384169063b11a19e890602401600060405180830381865afa158015614d7d573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052614da59190810190618430565b8282614db0816188de565b935060ff1681518110614dc557614dc5618771565b60200260200101819052505b60e08501515115614e785760408051808201909152600a81527f2d2d6761734c696d69740000000000000000000000000000000000000000000060208201528282614e1b816188de565b935060ff1681518110614e3057614e30618771565b6020026020010181905250614e4c8560e0015160000151615cdd565b8282614e57816188de565b935060ff1681518110614e6c57614e6c618771565b60200260200101819052505b60e08501516020015115614f225760408051808201909152600a81527f2d2d67617350726963650000000000000000000000000000000000000000000060208201528282614ec5816188de565b935060ff1681518110614eda57614eda618771565b6020026020010181905250614ef68560e0015160200151615cdd565b8282614f01816188de565b935060ff1681518110614f1657614f16618771565b60200260200101819052505b60e08501516040015115614fcc5760408051808201909152600e81527f2d2d6d617846656550657247617300000000000000000000000000000000000060208201528282614f6f816188de565b935060ff1681518110614f8457614f84618771565b6020026020010181905250614fa08560e0015160400151615cdd565b8282614fab816188de565b935060ff1681518110614fc057614fc0618771565b60200260200101819052505b60e085015160600151156150765760408051808201909152601681527f2d2d6d61785072696f726974794665655065724761730000000000000000000060208201528282615019816188de565b935060ff168151811061502e5761502e618771565b602002602001018190525061504a8560e0015160600151615cdd565b8282615055816188de565b935060ff168151811061506a5761506a618771565b60200260200101819052505b60008160ff1667ffffffffffffffff81111561509457615094617fd1565b6040519080825280602002602001820160405280156150c757816020015b60608152602001906001900390816150b25790505b50905060005b8260ff168160ff16101561512057838160ff16815181106150f0576150f0618771565b6020026020010151828260ff168151811061510d5761510d618771565b60209081029190910101526001016150cd565b5093505050505b949350505050565b6151566040518060600160405280600060030b815260200160608152602001606081525090565b60408051808201825260048082527f6261736800000000000000000000000000000000000000000000000000000000602083015291517fd145736c000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d92600091849163d145736c916151dc91869101618968565b600060405180830381865afa1580156151f9573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526152219190810190618430565b9050600061522f868361686c565b90506000846001600160a01b031663f45c1ce7836040518263ffffffff1660e01b815260040161525f9190617be4565b6000604051808303816000875af115801561527e573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526152a691908101906189af565b805190915060030b158015906152bf5750602081015151155b80156152ce5750604081015151155b156142a857816000815181106152e6576152e6618771565b60200260200101516040516020016138fd9190618a65565b606060006153338560408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b60408051808201825260008082526020918201528151808301909252865182528087019082015290915061536a9082905b906169c1565b156154c75760006153e7826153e1846153db6153ad8a60408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6040805180820182526000808252602091820152815180830190925282518252918201519181019190915290565b906169e8565b90616a4a565b604080518082018252600181527f0a000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015290915061544b9082906169c1565b156154b557604080518082018252600181527f0a00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526154b2905b8290616acf565b90505b6154be81616af5565b9250505061382a565b82156154e05784846040516020016138fd929190618c51565b505060408051602081019091526000815261382a565b509392505050565b6000808251602084016000f09392505050565b8160a001511561552057505050565b600061552d848484616b5e565b9050600061553a8261512f565b602081015181519192509060030b1580156155d65750604080518082018252600781527f5355434345535300000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526155d690604080518082018252600080825260209182015281518083019092528451825280850190820152615364565b156155e357505050505050565b604082015151156156035781604001516040516020016138fd9190618cf8565b806040516020016138fd9190618d56565b606060006156498360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600481527f2e736f6c00000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201529091506156ae905b8290615c7c565b1561571d57604080518082018252600481527f2e736f6c000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261382a906157189083906170f9565b616af5565b604080518082018252600181527f3a000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261577f905b8290617183565b60010361584c57604080518082018252600181527f3a00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526157e5906154ab565b50604080518082018252600181527f3a000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261382a90615718905b8390616acf565b604080518082018252600581527f2e6a736f6e000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526158ab906156a7565b156159e257604080518082018252600181527f2f0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082018190528451808601909552925184528301529061591390839061721d565b905060008160018351615926919061811d565b8151811061593657615936618771565b602002602001015190506159d96157186159ac6040518060400160405280600581526020017f2e6a736f6e00000000000000000000000000000000000000000000000000000081525060408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600080825260209182015281518083019092528551825280860190820152906170f9565b95945050505050565b826040516020016138fd9190618dc1565b50919050565b60606000615a2e8360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600481527f2e736f6c0000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152909150615a90906156a7565b15615a9e5761382a81616af5565b604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152615afd90615778565b600103615b6757604080518082018252600181527f3a000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261382a9061571890615845565b604080518082018252600581527f2e6a736f6e00000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152615bc6906156a7565b156159e257604080518082018252600181527f2f00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820181905284518086019095529251845283015290615c2e90839061721d565b9050600181511115615c6a578060028251615c49919061811d565b81518110615c5957615c59618771565b602002602001015192505050919050565b50826040516020016138fd9190618dc1565b805182516000911115615c9157506000613729565b81518351602085015160009291615ca791618e9f565b615cb1919061811d565b905082602001518103615cc8576001915050613729565b82516020840151819020912014905092915050565b60606000615cea836172c2565b600101905060008167ffffffffffffffff811115615d0a57615d0a617fd1565b6040519080825280601f01601f191660200182016040528015615d34576020820181803683370190505b5090508181016020015b600019017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a8504945084615d3e57509392505050565b604081810151815180830183526000808252602091820181905283518085018552835181529282018383015283518085018552600a81527f554e4c4943454e5345440000000000000000000000000000000000000000000081840190815285518087018752838152840192909252845180860190955251845290830152606091615e09905b82906173a4565b15615e4957505060408051808201909152600481527f4e6f6e65000000000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600981527f556e6c6963656e7365000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152615ea890615e02565b15615ee857505060408051808201909152600981527f556e6c6963656e736500000000000000000000000000000000000000000000006020820152919050565b604080518082018252600381527f4d4954000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152615f4790615e02565b15615f8757505060408051808201909152600381527f4d495400000000000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f47504c2d322e302d6f6e6c79000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152615fe690615e02565b8061604b5750604080518082018252601081527f47504c2d322e302d6f722d6c61746572000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261604b90615e02565b1561608b57505060408051808201909152600981527f474e552047504c763200000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f47504c2d332e302d6f6e6c790000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526160ea90615e02565b8061614f5750604080518082018252601081527f47504c2d332e302d6f722d6c61746572000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261614f90615e02565b1561618f57505060408051808201909152600981527f474e552047504c763300000000000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4c47504c2d322e312d6f6e6c7900000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526161ee90615e02565b806162535750604080518082018252601181527f4c47504c2d322e312d6f722d6c617465720000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261625390615e02565b1561629357505060408051808201909152600c81527f474e55204c47504c76322e3100000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4c47504c2d332e302d6f6e6c7900000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526162f290615e02565b806163575750604080518082018252601181527f4c47504c2d332e302d6f722d6c617465720000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261635790615e02565b1561639757505060408051808201909152600a81527f474e55204c47504c7633000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f4253442d322d436c617573650000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526163f690615e02565b1561643657505060408051808201909152600c81527f4253442d322d436c6175736500000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f4253442d332d436c6175736500000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261649590615e02565b156164d557505060408051808201909152600c81527f4253442d332d436c6175736500000000000000000000000000000000000000006020820152919050565b604080518082018252600781527f4d504c2d322e30000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261653490615e02565b1561657457505060408051808201909152600781527f4d504c2d322e30000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600781527f4f534c2d332e3000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526165d390615e02565b1561661357505060408051808201909152600781527f4f534c2d332e30000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600a81527f4170616368652d322e30000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261667290615e02565b156166b257505060408051808201909152600a81527f4170616368652d322e30000000000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4147504c2d332e302d6f6e6c79000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261671190615e02565b806167765750604080518082018252601181527f4147504c2d332e302d6f722d6c617465720000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261677690615e02565b156167b657505060408051808201909152600a81527f474e55204147504c7633000000000000000000000000000000000000000000006020820152919050565b604080518082018252600881527f4255534c2d312e310000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261681590615e02565b1561685557505060408051808201909152600781527f42534c20312e31000000000000000000000000000000000000000000000000006020820152919050565b604080840151845191516138fd9290602001618eb2565b60608060005b84518110156168f7578185828151811061688e5761688e618771565b60200260200101516040516020016168a792919061830f565b6040516020818303038152906040529150600185516168c6919061811d565b81146168ef57816040516020016168dd919061901b565b60405160208183030381529060405291505b600101616872565b5060408051600380825260808201909252600091816020015b6060815260200190600190039081616910579050509050838160008151811061693b5761693b618771565b60200260200101819052506040518060400160405280600281526020017f2d630000000000000000000000000000000000000000000000000000000000008152508160018151811061698f5761698f618771565b602002602001018190525081816002815181106169ae576169ae618771565b6020908102919091010152949350505050565b60208083015183518351928401516000936169df92918491906173b8565b14159392505050565b60408051808201909152600080825260208201526000616a1a84600001518560200151856000015186602001516174c9565b9050836020015181616a2c919061811d565b84518590616a3b90839061811d565b90525060208401525090919050565b6040805180820190915260008082526020820152815183511015616a6f575081613729565b6020808301519084015160019114616a965750815160208481015190840151829020919020145b8015616ac757825184518590616aad90839061811d565b9052508251602085018051616ac3908390618e9f565b9052505b509192915050565b6040805180820190915260008082526020820152616aee8383836175e9565b5092915050565b60606000826000015167ffffffffffffffff811115616b1657616b16617fd1565b6040519080825280601f01601f191660200182016040528015616b40576020820181803683370190505b5090506000602082019050616aee8185602001518660000151617694565b60606000616b6a613b27565b6040805160ff808252612000820190925291925060009190816020015b6060815260200190600190039081616b8757905050905060006040518060400160405280600381526020017f6e70780000000000000000000000000000000000000000000000000000000000815250828280616be2906188de565b935060ff1681518110616bf757616bf7618771565b60200260200101819052506040518060400160405280600781526020017f5e312e33322e3300000000000000000000000000000000000000000000000000815250604051602001616c48919061905c565b604051602081830303815290604052828280616c63906188de565b935060ff1681518110616c7857616c78618771565b60200260200101819052506040518060400160405280600881526020017f76616c6964617465000000000000000000000000000000000000000000000000815250828280616cc5906188de565b935060ff1681518110616cda57616cda618771565b602002602001018190525082604051602001616cf6919061880c565b604051602081830303815290604052828280616d11906188de565b935060ff1681518110616d2657616d26618771565b60200260200101819052506040518060400160405280600a81526020017f2d2d636f6e747261637400000000000000000000000000000000000000000000815250828280616d73906188de565b935060ff1681518110616d8857616d88618771565b6020026020010181905250616d9d878461770e565b8282616da8816188de565b935060ff1681518110616dbd57616dbd618771565b602090810291909101015285515115616e695760408051808201909152600b81527f2d2d7265666572656e636500000000000000000000000000000000000000000060208201528282616e0f816188de565b935060ff1681518110616e2457616e24618771565b6020026020010181905250616e3d86600001518461770e565b8282616e48816188de565b935060ff1681518110616e5d57616e5d618771565b60200260200101819052505b856080015115616ed75760408051808201909152601881527f2d2d756e73616665536b697053746f72616765436865636b000000000000000060208201528282616eb2816188de565b935060ff1681518110616ec757616ec7618771565b6020026020010181905250616f3d565b8415616f3d5760408051808201909152601281527f2d2d726571756972655265666572656e6365000000000000000000000000000060208201528282616f1c816188de565b935060ff1681518110616f3157616f31618771565b60200260200101819052505b60408601515115616fd95760408051808201909152600d81527f2d2d756e73616665416c6c6f770000000000000000000000000000000000000060208201528282616f87816188de565b935060ff1681518110616f9c57616f9c618771565b60200260200101819052508560400151828280616fb8906188de565b935060ff1681518110616fcd57616fcd618771565b60200260200101819052505b8560600151156170435760408051808201909152601481527f2d2d756e73616665416c6c6f7752656e616d657300000000000000000000000060208201528282617022816188de565b935060ff168151811061703757617037618771565b60200260200101819052505b60008160ff1667ffffffffffffffff81111561706157617061617fd1565b60405190808252806020026020018201604052801561709457816020015b606081526020019060019003908161707f5790505b50905060005b8260ff168160ff1610156170ed57838160ff16815181106170bd576170bd618771565b6020026020010151828260ff16815181106170da576170da618771565b602090810291909101015260010161709a565b50979650505050505050565b604080518082019091526000808252602082015281518351101561711e575081613729565b8151835160208501516000929161713491618e9f565b61713e919061811d565b6020840151909150600190821461715f575082516020840151819020908220145b801561717a5783518551869061717690839061811d565b9052505b50929392505050565b60008082600001516171a785600001518660200151866000015187602001516174c9565b6171b19190618e9f565b90505b835160208501516171c59190618e9f565b8111616aee57816171d5816190a1565b925050826000015161720c8560200151836171f0919061811d565b86516171fc919061811d565b83866000015187602001516174c9565b6172169190618e9f565b90506171b4565b6060600061722b8484617183565b617236906001618e9f565b67ffffffffffffffff81111561724e5761724e617fd1565b60405190808252806020026020018201604052801561728157816020015b606081526020019060019003908161726c5790505b50905060005b81518110156154f65761729d6157188686616acf565b8282815181106172af576172af618771565b6020908102919091010152600101617287565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000831061730b577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310617337576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc10000831061735557662386f26fc10000830492506010015b6305f5e100831061736d576305f5e100830492506008015b612710831061738157612710830492506004015b60648310617393576064830492506002015b600a83106137295760010192915050565b60006173b0838361774e565b159392505050565b6000808584116174bf576020841161746b57600084156174035760016173df86602061811d565b6173ea9060086190bb565b6173f59060026191b9565b6173ff919061811d565b1990505b83518116856174128989618e9f565b61741c919061811d565b805190935082165b8181146174565787841161743e5787945050505050615127565b83617448816191c5565b945050828451169050617424565b6174608785618e9f565b945050505050615127565b838320617478858861811d565b6174829087618e9f565b91505b8582106174bd578482208082036174aa576174a08684618e9f565b9350505050615127565b6174b560018461811d565b925050617485565b505b5092949350505050565b600083818685116175d4576020851161758357600085156175155760016174f187602061811d565b6174fc9060086190bb565b6175079060026191b9565b617511919061811d565b1990505b845181166000876175268b8b618e9f565b617530919061811d565b855190915083165b8281146175755781861061755d576175508b8b618e9f565b9650505050505050615127565b85617567816190a1565b965050838651169050617538565b859650505050505050615127565b508383206000905b617595868961811d565b82116175d2578583208082036175b15783945050505050615127565b6175bc600185618e9f565b93505081806175ca906190a1565b92505061758b565b505b6175de8787618e9f565b979650505050505050565b6040805180820190915260008082526020820152600061761b85600001518660200151866000015187602001516174c9565b602080870180519186019190915251909150617637908261811d565b83528451602086015161764a9190618e9f565b8103617659576000855261768b565b835183516176679190618e9f565b8551869061767690839061811d565b90525083516176859082618e9f565b60208601525b50909392505050565b602081106176cc57815183526176ab602084618e9f565b92506176b8602083618e9f565b91506176c560208261811d565b9050617694565b60001981156176fb5760016176e283602061811d565b6176ee906101006191b9565b6176f8919061811d565b90505b9151835183169219169190911790915250565b6060600061771c8484613bfa565b8051602080830151604051939450617736939091016191dc565b60405160208183030381529060405291505092915050565b8151815160009190811115617761575081515b6020808501519084015160005b8381101561781a57825182518082146177ea5760001960208710156177c95760018461779b89602061811d565b6177a59190618e9f565b6177b09060086190bb565b6177bb9060026191b9565b6177c5919061811d565b1990505b81811683821681810391146177e75797506137299650505050505050565b50505b6177f5602086618e9f565b9450617802602085618e9f565b935050506020816178139190618e9f565b905061776e565b50845186516142a89190619234565b610c9f806200925583390190565b6117988062009ef483390190565b61155a806200b68c83390190565b610d5e806200cbe683390190565b61080c806200d94483390190565b610b3f806200e15083390190565b611bb9806200ec8f83390190565b6040518060e001604052806060815260200160608152602001606081526020016000151581526020016000151581526020016000151581526020016178ce6178d3565b905290565b604051806101000160405280600015158152602001600015158152602001606081526020016000801916815260200160608152602001606081526020016000151581526020016178ce6040518060800160405280600081526020016000815260200160008152602001600081525090565b602080825282518282018190526000918401906040840190835b818110156179855783516001600160a01b031683526020938401939092019160010161795e565b509095945050505050565b60005b838110156179ab578181015183820152602001617993565b50506000910152565b600081518084526179cc816020860160208601617990565b601f01601f19169290920160200192915050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015617adc577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452815180516001600160a01b03168652602090810151604082880181905281519088018190529101906060600582901b88018101919088019060005b81811015617ac2577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa08a8503018352617aac8486516179b4565b6020958601959094509290920191600101617a72565b509197505050602094850194929092019150600101617a08565b50929695505050505050565b600081518084526020840193506020830160005b82811015617b3c5781517fffffffff0000000000000000000000000000000000000000000000000000000016865260209586019590910190600101617afc565b5093949350505050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015617adc577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08786030184528151805160408752617bb260408801826179b4565b9050602082015191508681036020880152617bcd8183617ae8565b965050506020938401939190910190600101617b6e565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015617adc577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452617c468583516179b4565b94506020938401939190910190600101617c0c565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015617adc577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc087860301845281516001600160a01b0381511686526020810151905060406020870152617cdc6040870182617ae8565b9550506020938401939190910190600101617c83565b600060208284031215617d0457600080fd5b8151801515811461382a57600080fd5b610100815260056101008201527f544f4b454e000000000000000000000000000000000000000000000000000000610120820152610140602082015260036101408201527f544b4e000000000000000000000000000000000000000000000000000000000061016082015260006101808201905060ff8816604083015286606083015260038610617dce577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b8560808301528460a0830152617def60c08301856001600160a01b03169052565b6001600160a01b03831660e0830152979650505050505050565b600181811c90821680617e1d57607f821691505b6020821081036159f3577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060208284031215617e6857600080fd5b5051919050565b606081526000617e8260608301866179b4565b602083019490945250901515604090910152919050565b608081526000617eac60808301876179b4565b62ffffff861660208401526001600160a01b038516604084015282810360608401526175de81856179b4565b6001600160a01b03841681528260208201526060604082015260006159d960608301846179b4565b60c081526000617f1360c08301896179b4565b8760208401526001600160a01b03871660408401528281036060840152617f3a81876179b4565b6080840195909552505090151560a090910152949350505050565b6001600160a01b038616815284602082015260a060408201526000617f7d60a08301866179b4565b6060830194909452509015156080909101529392505050565b82815260406020820152600061512760408301846179b4565b6001600160a01b038316815260406020820152600061512760408301846179b4565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040516060810167ffffffffffffffff8111828210171561802357618023617fd1565b60405290565b60008067ffffffffffffffff84111561804457618044617fd1565b50604051601f19601f85018116603f0116810181811067ffffffffffffffff8211171561807357618073617fd1565b60405283815290508082840185101561808b57600080fd5b6154f6846020830185617990565b600082601f8301126180aa57600080fd5b61382a83835160208501618029565b6000602082840312156180cb57600080fd5b815167ffffffffffffffff8111156180e257600080fd5b61372584828501618099565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b81810381811115613729576137296180ee565b60c08152600061814360c08301896179b4565b6001600160a01b038816602084015286604084015285606084015284608084015282810360a084015261817681856179b4565b9998505050505050505050565b60808152600061819660808301876179b4565b8560208401526001600160a01b038516604084015282810360608401526175de81856179b4565b6040815260006181d060408301856179b4565b828103602084015261382681856179b4565b6060815260006181f560608301866179b4565b84602084015282810360408401526142a881856179b4565b60a08152600061822060a08301886179b4565b866020840152828103604084015261823881876179b4565b606084019590955250509015156080909101529392505050565b7f4661696c656420746f206465706c6f7920636f6e74726163742000000000000081526000835161828a81601a850160208801617990565b7f3a20000000000000000000000000000000000000000000000000000000000000601a9184019182015283516182c781601c840160208801617990565b01601c01949350505050565b60208152600061382a60208301846179b4565b6000602082840312156182f857600080fd5b81516001600160a01b038116811461382a57600080fd5b60008351618321818460208801617990565b835190830190618335818360208801617990565b01949350505050565b7f4661696c656420746f206465706c6f7920636f6e74726163742000000000000081526000835161837681601a850160208801617990565b7f207573696e6720636f6e7374727563746f722064617461202200000000000000601a9184019182015283516183b3816033840160208801617990565b7f220000000000000000000000000000000000000000000000000000000000000060339290910191820152603401949350505050565b60408152600b60408201527f464f554e4452595f4f5554000000000000000000000000000000000000000000606082015260806020820152600061382a60808301846179b4565b60006020828403121561844257600080fd5b815167ffffffffffffffff81111561845957600080fd5b8201601f8101841361846a57600080fd5b61372584825160208401618029565b6000855161848b818460208a01617990565b7f2f0000000000000000000000000000000000000000000000000000000000000090830190815285516184c5816001840160208a01617990565b7f2f00000000000000000000000000000000000000000000000000000000000000600192909101918201528451618503816002840160208901617990565b6001818301019150507f2f0000000000000000000000000000000000000000000000000000000000000060018201528351618545816002840160208801617990565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600292909101918201526007019695505050505050565b60408152600061859060408301846179b4565b8281036020840152600481527f2e6173740000000000000000000000000000000000000000000000000000000060208201526040810191505092915050565b7f436f756c64206e6f742066696e642041535420696e206172746966616374200081526000825161860781601f850160208701617990565b7f2e205365742060617374203d20747275656020696e20666f756e6472792e746f601f9390910192830152507f6d6c000000000000000000000000000000000000000000000000000000000000603f820152604101919050565b60408152600061867460408301846179b4565b8281036020840152601181527f2e6173742e6162736f6c7574655061746800000000000000000000000000000060208201526040810191505092915050565b6040815260006186c660408301846179b4565b8281036020840152600c81527f2e6173742e6c6963656e7365000000000000000000000000000000000000000060208201526040810191505092915050565b7f2e6d657461646174612e736f75726365732e5b2700000000000000000000000081526000825161873d816014850160208701617990565b7f275d2e6b656363616b32353600000000000000000000000000000000000000006014939091019283015250602001919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f22000000000000000000000000000000000000000000000000000000000000008152600082516187d8816001850160208701617990565b7f22000000000000000000000000000000000000000000000000000000000000006001939091019283015250600201919050565b6000825161881e818460208701617990565b7f2f6275696c642d696e666f000000000000000000000000000000000000000000920191825250600b01919050565b7f436f756c64206e6f742066696e64206275696c642d696e666f2066696c65207781527f697468206d61746368696e6720736f7572636520636f6465206861736820666f60208201527f7220636f6e7472616374200000000000000000000000000000000000000000006040820152600082516188d181604b850160208701617990565b91909101604b0192915050565b600060ff821660ff81036188f4576188f46180ee565b60010192915050565b7f406f70656e7a657070656c696e2f646566656e6465722d6465706c6f792d636c81527f69656e742d636c6940000000000000000000000000000000000000000000000060208201526000825161895b816029850160208701617990565b9190910160290192915050565b60408152601660408201527f4f50454e5a455050454c494e5f424153485f5041544800000000000000000000606082015260806020820152600061382a60808301846179b4565b6000602082840312156189c157600080fd5b815167ffffffffffffffff8111156189d857600080fd5b8201606081850312156189ea57600080fd5b6189f2618000565b81518060030b8114618a0357600080fd5b8152602082015167ffffffffffffffff811115618a1f57600080fd5b618a2b86828501618099565b602083015250604082015167ffffffffffffffff811115618a4b57600080fd5b618a5786828501618099565b604083015250949350505050565b7f4661696c656420746f2072756e206261736820636f6d6d616e6420776974682081527f2200000000000000000000000000000000000000000000000000000000000000602082015260008251618ac3816021850160208701617990565b7f222e20496620796f7520617265207573696e672057696e646f77732c2073657460219390910192830152507f20746865204f50454e5a455050454c494e5f424153485f5041544820656e766960418201527f726f6e6d656e74207661726961626c6520746f207468652066756c6c7920717560618201527f616c69666965642070617468206f66207468652062617368206578656375746160818201527f626c652e20466f72206578616d706c652c20696620796f75206172652075736960a18201527f6e672047697420666f722057696e646f77732c206164642074686520666f6c6c60c18201527f6f77696e67206c696e6520696e20746865202e656e762066696c65206f66207960e18201527f6f75722070726f6a65637420287573696e6720666f727761726420736c6173686101018201527f6573293a0a4f50454e5a455050454c494e5f424153485f504154483d22433a2f6101218201527f50726f6772616d2046696c65732f4769742f62696e2f6261736822000000000061014182015261015c01919050565b7f4661696c656420746f2066696e64206c696e652077697468207072656669782081527f2700000000000000000000000000000000000000000000000000000000000000602082015260008351618caf816021850160208801617990565b7f2720696e206f75747075743a20000000000000000000000000000000000000006021918401918201528351618cec81602e840160208801617990565b01602e01949350505050565b7f4661696c656420746f2072756e2075706772616465207361666574792076616c81527f69646174696f6e3a20000000000000000000000000000000000000000000000060208201526000825161895b816029850160208701617990565b7f55706772616465207361666574792076616c69646174696f6e206661696c656481527f3a0a000000000000000000000000000000000000000000000000000000000000602082015260008251618db4816022850160208701617990565b9190910160220192915050565b7f436f6e7472616374206e616d6520000000000000000000000000000000000000815260008251618df981600e850160208701617990565b7f206d75737420626520696e2074686520666f726d6174204d79436f6e74726163600e9390910192830152507f742e736f6c3a4d79436f6e7472616374206f72204d79436f6e74726163742e73602e8201527f6f6c206f72206f75742f4d79436f6e74726163742e736f6c2f4d79436f6e7472604e8201527f6163742e6a736f6e000000000000000000000000000000000000000000000000606e820152607601919050565b80820180821115613729576137296180ee565b7f53504458206c6963656e7365206964656e746966696572200000000000000000815260008351618eea816018850160208801617990565b7f20696e20000000000000000000000000000000000000000000000000000000006018918401918201528351618f2781601c840160208801617990565b7f20646f6573206e6f74206c6f6f6b206c696b65206120737570706f7274656420601c92909101918201527f6c6963656e736520666f7220626c6f636b206578706c6f726572207665726966603c8201527f69636174696f6e2e205573652074686520606c6963656e73655479706560206f605c8201527f7074696f6e20746f20737065636966792061206c6963656e736520747970652c607c8201527f206f7220736574207468652060736b69704c6963656e73655479706560206f70609c8201527f74696f6e20746f2060747275656020746f20736b69702e00000000000000000060bc82015260d301949350505050565b6000825161902d818460208701617990565b7f2000000000000000000000000000000000000000000000000000000000000000920191825250600101919050565b7f406f70656e7a657070656c696e2f75706772616465732d636f7265400000000081526000825161909481601c850160208701617990565b91909101601c0192915050565b600060001982036190b4576190b46180ee565b5060010190565b8082028115828204841417613729576137296180ee565b6001815b600184111561910d578085048111156190f1576190f16180ee565b60018416156190ff57908102905b60019390931c9280026190d6565b935093915050565b60008261912457506001613729565b8161913157506000613729565b816001811461914757600281146191515761916d565b6001915050613729565b60ff841115619162576191626180ee565b50506001821b613729565b5060208310610133831016604e8410600b8410161715619190575081810a613729565b61919d60001984846190d2565b80600019048211156191b1576191b16180ee565b029392505050565b600061382a8383619115565b6000816191d4576191d46180ee565b506000190190565b600083516191ee818460208801617990565b7f3a000000000000000000000000000000000000000000000000000000000000009083019081528351619228816001840160208801617990565b01600101949350505050565b8181036000831280158383131683831282161715616aee57616aee6180ee56fe608060405234801561001057600080fd5b50604051610c9f380380610c9f83398101604081905261002f9161010d565b8181600361003d83826101ff565b50600461004a82826101ff565b50505050506102bd565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261007b57600080fd5b81516001600160401b0381111561009457610094610054565b604051601f8201601f19908116603f011681016001600160401b03811182821017156100c2576100c2610054565b6040528181528382016020018510156100da57600080fd5b60005b828110156100f9576020818601810151838301820152016100dd565b506000918101602001919091529392505050565b6000806040838503121561012057600080fd5b82516001600160401b0381111561013657600080fd5b6101428582860161006a565b602085015190935090506001600160401b0381111561016057600080fd5b61016c8582860161006a565b9150509250929050565b600181811c9082168061018a57607f821691505b6020821081036101aa57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156101fa57806000526020600020601f840160051c810160208510156101d75750805b601f840160051c820191505b818110156101f757600081556001016101e3565b50505b505050565b81516001600160401b0381111561021857610218610054565b61022c816102268454610176565b846101b0565b6020601f82116001811461026057600083156102485750848201515b600019600385901b1c1916600184901b1784556101f7565b600084815260208120601f198516915b828110156102905787850151825560209485019460019092019101610270565b50848210156102ae5786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b6109d3806102cc6000396000f3fe608060405234801561001057600080fd5b50600436106100be5760003560e01c806340c10f191161007657806395d89b411161005b57806395d89b4114610183578063a9059cbb1461018b578063dd62ed3e1461019e57600080fd5b806340c10f191461013857806370a082311461014d57600080fd5b806318160ddd116100a757806318160ddd1461010457806323b872dd14610116578063313ce5671461012957600080fd5b806306fdde03146100c3578063095ea7b3146100e1575b600080fd5b6100cb6101e4565b6040516100d891906107bf565b60405180910390f35b6100f46100ef366004610854565b610276565b60405190151581526020016100d8565b6002545b6040519081526020016100d8565b6100f461012436600461087e565b610290565b604051601281526020016100d8565b61014b610146366004610854565b6102b4565b005b61010861015b3660046108bb565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6100cb6102c2565b6100f4610199366004610854565b6102d1565b6101086101ac3660046108dd565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6060600380546101f390610910565b80601f016020809104026020016040519081016040528092919081815260200182805461021f90610910565b801561026c5780601f106102415761010080835404028352916020019161026c565b820191906000526020600020905b81548152906001019060200180831161024f57829003601f168201915b5050505050905090565b6000336102848185856102df565b60019150505b92915050565b60003361029e8582856102f1565b6102a98585856103c5565b506001949350505050565b6102be8282610470565b5050565b6060600480546101f390610910565b6000336102848185856103c5565b6102ec83838360016104cc565b505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146103bf57818110156103b0576040517ffb8f41b200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416600482015260248101829052604481018390526064015b60405180910390fd5b6103bf848484840360006104cc565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8316610415576040517f96c6fd1e000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff8216610465576040517fec442f05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b6102ec838383610614565b73ffffffffffffffffffffffffffffffffffffffff82166104c0576040517fec442f05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b6102be60008383610614565b73ffffffffffffffffffffffffffffffffffffffff841661051c576040517fe602df05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff831661056c576040517f94280d62000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260016020908152604080832093871683529290522082905580156103bf578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161060691815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff831661064c5780600260008282546106419190610963565b909155506106fe9050565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260208190526040902054818110156106d2576040517fe450d38c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8516600482015260248101829052604481018390526064016103a7565b73ffffffffffffffffffffffffffffffffffffffff841660009081526020819052604090209082900390555b73ffffffffffffffffffffffffffffffffffffffff821661072757600280548290039055610753565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090208054820190555b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516107b291815260200190565b60405180910390a3505050565b602081526000825180602084015260005b818110156107ed57602081860181015160408684010152016107d0565b5060006040828501015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011684010191505092915050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461084f57600080fd5b919050565b6000806040838503121561086757600080fd5b6108708361082b565b946020939093013593505050565b60008060006060848603121561089357600080fd5b61089c8461082b565b92506108aa6020850161082b565b929592945050506040919091013590565b6000602082840312156108cd57600080fd5b6108d68261082b565b9392505050565b600080604083850312156108f057600080fd5b6108f98361082b565b91506109076020840161082b565b90509250929050565b600181811c9082168061092457607f821691505b60208210810361095d577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b8082018082111561028a577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea26469706673582212207e804ca539d49155d2b6bc19268ce22f9f857027c75247d69fb0d56a089c93d464736f6c634300081a003360a060405234801561001057600080fd5b5060405161179838038061179883398101604081905261002f916101e5565b60016000556002805460ff191690556001600160a01b038316158061005b57506001600160a01b038216155b8061006d57506001600160a01b038116155b1561008b5760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b0383166080526100a3600082610134565b506100ce7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a82610134565b506100f97f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e483610134565b5061011260008051602061177883398151915282610134565b5061012b60008051602061177883398151915283610134565b50505050610228565b60008281526001602090815260408083206001600160a01b038516845290915281205460ff166101bf5760008381526001602081815260408084206001600160a01b0387168086529252808420805460ff19169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45060016101c3565b5060005b92915050565b80516001600160a01b03811681146101e057600080fd5b919050565b6000806000606084860312156101fa57600080fd5b610203846101c9565b9250610211602085016101c9565b915061021f604085016101c9565b90509250925092565b60805161151961025f6000396000818161019e01528181610500015281816105620152818161099101526109f301526115196000f3fe608060405234801561001057600080fd5b506004361061016c5760003560e01c806385f438c1116100cd578063c8a0236211610081578063d936547e11610066578063d936547e14610355578063d9caed1214610378578063e63ab1e91461038b57600080fd5b8063c8a023621461032f578063d547741f1461034257600080fd5b80639a590427116100b25780639a590427146103015780639b19251a14610314578063a217fddf1461032757600080fd5b806385f438c11461029457806391d14854146102bb57600080fd5b806336568abe11610124578063570618e111610109578063570618e11461025a5780635c975abb146102815780638456cb591461028c57600080fd5b806336568abe1461023f5780633f4ba83a1461025257600080fd5b806321fc65f21161015557806321fc65f2146101e5578063248a9ca3146101fa5780632f2ff15d1461022c57600080fd5b806301ffc9a714610171578063116191b614610199575b600080fd5b61018461017f366004611224565b6103b2565b60405190151581526020015b60405180910390f35b6101c07f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610190565b6101f86101f336600461128f565b61044b565b005b61021e61020836600461132c565b6000908152600160208190526040909120015490565b604051908152602001610190565b6101f861023a366004611345565b61064c565b6101f861024d366004611345565b610678565b6101f86106d6565b61021e7f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a81565b60025460ff16610184565b6101f861070b565b61021e7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b6101846102c9366004611345565b600091825260016020908152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b6101f861030f366004611371565b61073d565b6101f8610322366004611371565b61080b565b61021e600081565b6101f861033d36600461128f565b6108dc565b6101f8610350366004611345565b610ac3565b610184610363366004611371565b60036020526000908152604090205460ff1681565b6101f861038636600461138c565b610ae9565b61021e7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061044557507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b610453610c15565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461047d81610c58565b610485610c62565b73ffffffffffffffffffffffffffffffffffffffff861660009081526003602052604090205460ff166104e4576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61052573ffffffffffffffffffffffffffffffffffffffff87167f000000000000000000000000000000000000000000000000000000000000000086610ca1565b6040517f5131ab5900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690635131ab599061059f9089908990899089908990600401611412565b600060405180830381600087803b1580156105b957600080fd5b505af11580156105cd573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167f85b5be9cf454e05e0bddf49315178102227c312078eefa3c00294fb4d912ae4e8686866040516106329392919061146f565b60405180910390a3506106456001600055565b5050505050565b6000828152600160208190526040909120015461066881610c58565b6106728383610d2e565b50505050565b73ffffffffffffffffffffffffffffffffffffffff811633146106c7576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6106d18282610ddb565b505050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61070081610c58565b610708610e7c565b50565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61073581610c58565b610708610edb565b7f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a61076781610c58565b73ffffffffffffffffffffffffffffffffffffffff82166107b4576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216600081815260036020526040808220805460ff19169055517f51085ddf9ebdded84b76e829eb58c4078e4b5bdf97d9a94723f336039da467919190a25050565b7f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a61083581610c58565b73ffffffffffffffffffffffffffffffffffffffff8216610882576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216600081815260036020526040808220805460ff19166001179055517faab7954e9d246b167ef88aeddad35209ca2489d95a8aeb59e288d9b19fae5a549190a25050565b6108e4610c15565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461090e81610c58565b610916610c62565b73ffffffffffffffffffffffffffffffffffffffff861660009081526003602052604090205460ff16610975576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6109b673ffffffffffffffffffffffffffffffffffffffff87167f000000000000000000000000000000000000000000000000000000000000000086610ca1565b6040517fb8969bd400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063b8969bd490610a309089908990899089908990600401611412565b600060405180830381600087803b158015610a4a57600080fd5b505af1158015610a5e573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fb9d4efa96044e5f5e03e696fa9ae2ff66911cc27e8a637c3627c75bc5b2241c88686866040516106329392919061146f565b60008281526001602081905260409091200154610adf81610c58565b6106728383610ddb565b610af1610c15565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e4610b1b81610c58565b610b23610c62565b73ffffffffffffffffffffffffffffffffffffffff841660009081526003602052604090205460ff16610b82576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610ba373ffffffffffffffffffffffffffffffffffffffff85168484610ca1565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f9b1bfa7fa9ee420a16e124f794c35ac9f90472acc99140eb2f6447c714cad8eb84604051610c0291815260200190565b60405180910390a3506106d16001600055565b600260005403610c51576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b6107088133610f18565b60025460ff1615610c9f576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6040805173ffffffffffffffffffffffffffffffffffffffff8416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb000000000000000000000000000000000000000000000000000000001790526106d1908490610fa9565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff16610dd357600083815260016020818152604080842073ffffffffffffffffffffffffffffffffffffffff87168086529252808420805460ff19169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a4506001610445565b506000610445565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff1615610dd357600083815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff86168085529252808320805460ff1916905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a4506001610445565b610e8461103f565b6002805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b610ee3610c62565b6002805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258610eb13390565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16610fa5576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82166004820152602481018390526044015b60405180910390fd5b5050565b6000610fcb73ffffffffffffffffffffffffffffffffffffffff84168361107b565b90508051600014158015610ff0575080806020019051810190610fee9190611492565b155b156106d1576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84166004820152602401610f9c565b60025460ff16610c9f576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606061108983836000611090565b9392505050565b6060814710156110ce576040517fcd786059000000000000000000000000000000000000000000000000000000008152306004820152602401610f9c565b6000808573ffffffffffffffffffffffffffffffffffffffff1684866040516110f791906114b4565b60006040518083038185875af1925050503d8060008114611134576040519150601f19603f3d011682016040523d82523d6000602084013e611139565b606091505b5091509150611149868383611153565b9695505050505050565b60608261116857611163826111e2565b611089565b815115801561118c575073ffffffffffffffffffffffffffffffffffffffff84163b155b156111db576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85166004820152602401610f9c565b5080611089565b8051156111f25780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006020828403121561123657600080fd5b81357fffffffff000000000000000000000000000000000000000000000000000000008116811461108957600080fd5b803573ffffffffffffffffffffffffffffffffffffffff8116811461128a57600080fd5b919050565b6000806000806000608086880312156112a757600080fd5b6112b086611266565b94506112be60208701611266565b935060408601359250606086013567ffffffffffffffff8111156112e157600080fd5b8601601f810188136112f257600080fd5b803567ffffffffffffffff81111561130957600080fd5b88602082840101111561131b57600080fd5b959894975092955050506020019190565b60006020828403121561133e57600080fd5b5035919050565b6000806040838503121561135857600080fd5b8235915061136860208401611266565b90509250929050565b60006020828403121561138357600080fd5b61108982611266565b6000806000606084860312156113a157600080fd5b6113aa84611266565b92506113b860208501611266565b929592945050506040919091013590565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff8616815273ffffffffffffffffffffffffffffffffffffffff851660208201528360408201526080606082015260006114646080830184866113c9565b979650505050505050565b8381526040602082015260006114896040830184866113c9565b95945050505050565b6000602082840312156114a457600080fd5b8151801515811461108957600080fd5b6000825160005b818110156114d557602081860181015185830152016114bb565b50600092019182525091905056fea26469706673582212207ea3ad4ba4a6d39c3be3cec464753448900300ac3b508b4000815de5b914c53064736f6c634300081a00338619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a60c060405260001960035534801561001657600080fd5b5060405161155a38038061155a83398101604081905261003591610220565b60016000819055805460ff19169055838383836001600160a01b038416158061006557506001600160a01b038316155b8061007757506001600160a01b038216155b8061008957506001600160a01b038116155b156100a75760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b03808516608052831660a0526100c5600082610154565b506100f07f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e483610154565b5061011b7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb83610154565b506101467f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a82610154565b505050505050505050610274565b60008281526002602090815260408083206001600160a01b038516845290915281205460ff166101fa5760008381526002602090815260408083206001600160a01b03861684529091529020805460ff191660011790556101b23390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45060016101fe565b5060005b92915050565b80516001600160a01b038116811461021b57600080fd5b919050565b6000806000806080858703121561023657600080fd5b61023f85610204565b935061024d60208601610204565b925061025b60408601610204565b915061026960608601610204565b905092959194509250565b60805160a0516112826102d86000396000818161021d01528181610531015281816108240152818161097b01528181610ad00152610bf20152600081816101d1015281816104a1015281816105040152818161079401526107f701526112826000f3fe608060405234801561001057600080fd5b50600436106101775760003560e01c80635e3e9fef116100d857806391d148541161008c578063d547741f11610066578063d547741f14610386578063d5abeb0114610399578063e63ab1e9146103a257600080fd5b806391d1485414610311578063a217fddf14610357578063a783c7891461035f57600080fd5b8063743e0c9b116100bd578063743e0c9b146102cf5780638456cb59146102e257806385f438c1146102ea57600080fd5b80635e3e9fef146102a95780636f8b44b0146102bc57600080fd5b8063248a9ca31161012f57806336568abe1161011457806336568abe146102835780633f4ba83a146102965780635c975abb1461029e57600080fd5b8063248a9ca31461023f5780632f2ff15d1461027057600080fd5b8063106e629011610160578063106e6290146101b9578063116191b6146101cc57806321e093b11461021857600080fd5b806301ffc9a71461017c57806302d5c899146101a4575b600080fd5b61018f61018a366004610fb4565b6103c9565b60405190151581526020015b60405180910390f35b6101b76101b2366004611026565b610462565b005b6101b76101c73660046110b8565b6105f7565b6101f37f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161019b565b6101f37f000000000000000000000000000000000000000000000000000000000000000081565b61026261024d3660046110eb565b60009081526002602052604090206001015490565b60405190815260200161019b565b6101b761027e366004611104565b61069c565b6101b7610291366004611104565b6106c7565b6101b7610720565b60015460ff1661018f565b6101b76102b7366004611026565b610755565b6101b76102ca3660046110eb565b6108d0565b6101b76102dd3660046110eb565b61093e565b6101b76109e8565b6102627f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b61018f61031f366004611104565b600091825260026020908152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b610262600081565b6102627f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb81565b6101b7610394366004611104565b610a1a565b61026260035481565b6102627f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061045c57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b61046a610a3f565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461049481610a82565b61049c610a8c565b6104c77f00000000000000000000000000000000000000000000000000000000000000008684610acb565b6040517fb8969bd400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063b8969bd490610561907f0000000000000000000000000000000000000000000000000000000000000000908a908a908a908a90600401611179565b600060405180830381600087803b15801561057b57600080fd5b505af115801561058f573d6000803e3d6000fd5b505050508573ffffffffffffffffffffffffffffffffffffffff167fba96f26bdda53eb8c8ba39045dfb4ff39753fbc7a6edcf250a88e75e78d102fe8686866040516105dd939291906111d6565b60405180910390a2506105f06001600055565b5050505050565b6105ff610a3f565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461062981610a82565b610631610a8c565b61063c848484610acb565b8373ffffffffffffffffffffffffffffffffffffffff167f884edad9ce6fa2440d8a54cc123490eb96d2768479d49ff9c7366125a94243648460405161068491815260200190565b60405180910390a2506106976001600055565b505050565b6000828152600260205260409020600101546106b781610a82565b6106c18383610c53565b50505050565b73ffffffffffffffffffffffffffffffffffffffff81163314610716576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6106978282610d53565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61074a81610a82565b610752610e12565b50565b61075d610a3f565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461078781610a82565b61078f610a8c565b6107ba7f00000000000000000000000000000000000000000000000000000000000000008684610acb565b6040517f5131ab5900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690635131ab5990610854907f0000000000000000000000000000000000000000000000000000000000000000908a908a908a908a90600401611179565b600060405180830381600087803b15801561086e57600080fd5b505af1158015610882573d6000803e3d6000fd5b505050508573ffffffffffffffffffffffffffffffffffffffff167f7772f56296d3a5202974a45c61c9188d844ab4d6eeb18c851e4b8d5384ca6ced8686866040516105dd939291906111d6565b7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb6108fa81610a82565b610902610a8c565b60038290556040518281527f7810bd47de260c3e9ee10061cf438099dd12256c79485f12f94dbccc981e806c9060200160405180910390a15050565b610946610a8c565b6040517f79cc6790000000000000000000000000000000000000000000000000000000008152336004820152602481018290527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16906379cc679090604401600060405180830381600087803b1580156109d457600080fd5b505af11580156105f0573d6000803e3d6000fd5b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610a1281610a82565b610752610e8f565b600082815260026020526040902060010154610a3581610a82565b6106c18383610d53565b600260005403610a7b576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b6107528133610ee8565b60015460ff1615610ac9576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6003547f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b39573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b5d91906111f9565b610b679084611212565b1115610b9f576040517fc30436e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f1e458bee00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff848116600483015260248201849052604482018390527f00000000000000000000000000000000000000000000000000000000000000001690631e458bee90606401600060405180830381600087803b158015610c3657600080fd5b505af1158015610c4a573d6000803e3d6000fd5b50505050505050565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff16610d4b57600083815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff86168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055610ce93390565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a450600161045c565b50600061045c565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff1615610d4b57600083815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8616808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a450600161045c565b610e1a610f78565b600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b610e97610a8c565b600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016811790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25833610e65565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16610f74576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff821660048201526024810183905260440160405180910390fd5b5050565b60015460ff16610ac9576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060208284031215610fc657600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610ff657600080fd5b9392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461102157600080fd5b919050565b60008060008060006080868803121561103e57600080fd5b61104786610ffd565b945060208601359350604086013567ffffffffffffffff81111561106a57600080fd5b8601601f8101881361107b57600080fd5b803567ffffffffffffffff81111561109257600080fd5b8860208284010111156110a457600080fd5b959894975060200195606001359392505050565b6000806000606084860312156110cd57600080fd5b6110d684610ffd565b95602085013595506040909401359392505050565b6000602082840312156110fd57600080fd5b5035919050565b6000806040838503121561111757600080fd5b8235915061112760208401610ffd565b90509250929050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff8616815273ffffffffffffffffffffffffffffffffffffffff851660208201528360408201526080606082015260006111cb608083018486611130565b979650505050505050565b8381526040602082015260006111f0604083018486611130565b95945050505050565b60006020828403121561120b57600080fd5b5051919050565b8082018082111561045c577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea2646970667358221220de5fa55e0ca79ea2f08903481d01ea00bbbf346b9cfba44e12a2dd6f3a6f2e8a64736f6c634300081a00336080604052348015600f57600080fd5b506001600055610d3a806100246000396000f3fe6080604052600436106100635760003560e01c8063c513169111610040578063c5131691146100c1578063e04d4f97146100e1578063f05b6abf146100f457005b8063357fc5a21461006c5780636ed701691461008c5780638fcaa0b5146100a157005b3661006a57005b005b34801561007857600080fd5b5061006a6100873660046106c0565b610114565b34801561009857600080fd5b5061006a6101aa565b3480156100ad57600080fd5b5061006a6100bc3660046106fc565b6101df565b3480156100cd57600080fd5b5061006a6100dc3660046106c0565b61021e565b61006a6100ef366004610895565b6102f9565b34801561010057600080fd5b5061006a61010f366004610981565b61033d565b61011c610372565b61013e73ffffffffffffffffffffffffffffffffffffffff83163383866103b5565b604080513381526020810185905273ffffffffffffffffffffffffffffffffffffffff848116828401528316606082015290517f2b58128f24a9f59127cc5b5430d70542b22220f2d9adaa86e442b816ab98af609181900360800190a16101a56001600055565b505050565b6040513381527fbcaadb46b82a48af60b608f58959ae6b8310d1b0a0d094c2e9ec3208ed39f2a09060200160405180910390a1565b7f0d3f65f00e631663aa85c96330b5c7a83bb29af3630c0063776f985edc3037aa33838360405161021293929190610a6b565b60405180910390a15050565b610226610372565b6000610233600285610ad5565b90508060000361026f576040517f1f2a200500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61029173ffffffffffffffffffffffffffffffffffffffff84163384846103b5565b604080513381526020810183905273ffffffffffffffffffffffffffffffffffffffff858116828401528416606082015290517f2b58128f24a9f59127cc5b5430d70542b22220f2d9adaa86e442b816ab98af609181900360800190a1506101a56001600055565b7f1f1ff1f5fb41346850b2f5c04e6c767e2f1c8a525c5c0c5cdb60cdf3ca5f62fa3334858585604051610330959493929190610b7e565b60405180910390a1505050565b7f74a53cd528a921fca7dbdee62f86819051d3cc98f214951f4238e8843f20b146338484846040516103309493929190610c08565b6002600054036103ae576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b6040805173ffffffffffffffffffffffffffffffffffffffff85811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd0000000000000000000000000000000000000000000000000000000017905261044a908590610450565b50505050565b600061047273ffffffffffffffffffffffffffffffffffffffff8416836104eb565b905080516000141580156104975750808060200190518101906104959190610ccb565b155b156101a5576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff841660048201526024015b60405180910390fd5b60606104f983836000610500565b9392505050565b60608147101561053e576040517fcd7860590000000000000000000000000000000000000000000000000000000081523060048201526024016104e2565b6000808573ffffffffffffffffffffffffffffffffffffffff1684866040516105679190610ce8565b60006040518083038185875af1925050503d80600081146105a4576040519150601f19603f3d011682016040523d82523d6000602084013e6105a9565b606091505b50915091506105b98683836105c3565b9695505050505050565b6060826105d8576105d382610652565b6104f9565b81511580156105fc575073ffffffffffffffffffffffffffffffffffffffff84163b155b1561064b576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff851660048201526024016104e2565b50806104f9565b8051156106625780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50565b803573ffffffffffffffffffffffffffffffffffffffff811681146106bb57600080fd5b919050565b6000806000606084860312156106d557600080fd5b833592506106e560208501610697565b91506106f360408501610697565b90509250925092565b6000806020838503121561070f57600080fd5b823567ffffffffffffffff81111561072657600080fd5b8301601f8101851361073757600080fd5b803567ffffffffffffffff81111561074e57600080fd5b85602082840101111561076057600080fd5b6020919091019590945092505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156107e6576107e6610770565b604052919050565b600082601f8301126107ff57600080fd5b813567ffffffffffffffff81111561081957610819610770565b61084a60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8401160161079f565b81815284602083860101111561085f57600080fd5b816020850160208301376000918101602001919091529392505050565b801515811461069457600080fd5b80356106bb8161087c565b6000806000606084860312156108aa57600080fd5b833567ffffffffffffffff8111156108c157600080fd5b6108cd868287016107ee565b9350506020840135915060408401356108e58161087c565b809150509250925092565b600067ffffffffffffffff82111561090a5761090a610770565b5060051b60200190565b600082601f83011261092557600080fd5b8135610938610933826108f0565b61079f565b8082825260208201915060208360051b86010192508583111561095a57600080fd5b602085015b8381101561097757803583526020928301920161095f565b5095945050505050565b60008060006060848603121561099657600080fd5b833567ffffffffffffffff8111156109ad57600080fd5b8401601f810186136109be57600080fd5b80356109cc610933826108f0565b8082825260208201915060208360051b8501019250888311156109ee57600080fd5b602084015b83811015610a3057803567ffffffffffffffff811115610a1257600080fd5b610a218b6020838901016107ee565b845250602092830192016109f3565b509550505050602084013567ffffffffffffffff811115610a5057600080fd5b610a5c86828701610914565b9250506106f36040850161088a565b73ffffffffffffffffffffffffffffffffffffffff8416815260406020820152816040820152818360608301376000818301606090810191909152601f9092017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016010192915050565b600082610b0b577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60005b83811015610b2b578181015183820152602001610b13565b50506000910152565b60008151808452610b4c816020860160208601610b10565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b73ffffffffffffffffffffffffffffffffffffffff8616815284602082015260a060408201526000610bb360a0830186610b34565b6060830194909452509015156080909101529392505050565b600081518084526020840193506020830160005b82811015610bfe578151865260209586019590910190600101610be0565b5093949350505050565b60006080820173ffffffffffffffffffffffffffffffffffffffff871683526080602084015280865180835260a08501915060a08160051b86010192506020880160005b82811015610c9b577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60878603018452610c86858351610b34565b94506020938401939190910190600101610c4c565b505050508281036040840152610cb18186610bcc565b915050610cc2606083018415159052565b95945050505050565b600060208284031215610cdd57600080fd5b81516104f98161087c565b60008251610cfa818460208701610b10565b919091019291505056fea2646970667358221220556072e1abafc3c4063b8cce832228b4f309b93726aaa6a6dfab20cb880c6d1864736f6c634300081a00336080604052348015600f57600080fd5b5060405161080c38038061080c833981016040819052602c916050565b600080546001600160a01b0319166001600160a01b0392909216919091179055607e565b600060208284031215606157600080fd5b81516001600160a01b0381168114607757600080fd5b9392505050565b61077f8061008d6000396000f3fe608060405234801561001057600080fd5b50600436106100415760003560e01c80630abd890514610046578063116191b61461005b578063865b36f6146100a4575b600080fd5b6100596100543660046104c4565b6100b7565b005b60005461007b9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b6100596100b236600461057f565b6102af565b60008383836040516024016100ce93929190610674565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe04d4f970000000000000000000000000000000000000000000000000000000017905260005490517f095ea7b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff91821660048201526024810189905291925086169063095ea7b3906044016020604051808303816000875af11580156101be573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101e2919061069e565b610218576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000546040517f7993c1e000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff90911690637993c1e090610274908a908a908a9087906004016106c2565b600060405180830381600087803b15801561028e57600080fd5b505af11580156102a2573d6000803e3d6000fd5b5050505050505050505050565b60008383836040516024016102c693929190610674565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe04d4f970000000000000000000000000000000000000000000000000000000017905260005490517f5d40e17800000000000000000000000000000000000000000000000000000000815291925073ffffffffffffffffffffffffffffffffffffffff1690635d40e1789061039690899089908690600401610714565b600060405180830381600087803b1580156103b057600080fd5b505af11580156103c4573d6000803e3d6000fd5b50505050505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600082601f83011261041057600080fd5b81356020830160008067ffffffffffffffff841115610431576104316103d0565b506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f85018116603f0116810181811067ffffffffffffffff8211171561047e5761047e6103d0565b60405283815290508082840187101561049657600080fd5b838360208301376000602085830101528094505050505092915050565b80151581146104c157600080fd5b50565b60008060008060008060c087890312156104dd57600080fd5b863567ffffffffffffffff8111156104f457600080fd5b61050089828a016103ff565b96505060208701359450604087013573ffffffffffffffffffffffffffffffffffffffff8116811461053157600080fd5b9350606087013567ffffffffffffffff81111561054d57600080fd5b61055989828a016103ff565b9350506080870135915060a0870135610571816104b3565b809150509295509295509295565b600080600080600060a0868803121561059757600080fd5b853567ffffffffffffffff8111156105ae57600080fd5b6105ba888289016103ff565b95505060208601359350604086013567ffffffffffffffff8111156105de57600080fd5b6105ea888289016103ff565b935050606086013591506080860135610602816104b3565b809150509295509295909350565b6000815180845260005b818110156106365760208185018101518683018201520161061a565b5060006020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b6060815260006106876060830186610610565b602083019490945250901515604090910152919050565b6000602082840312156106b057600080fd5b81516106bb816104b3565b9392505050565b6080815260006106d56080830187610610565b85602084015273ffffffffffffffffffffffffffffffffffffffff8516604084015282810360608401526107098185610610565b979650505050505050565b6060815260006107276060830186610610565b846020840152828103604084015261073f8185610610565b969550505050505056fea26469706673582212209d22131b764d02d8f03ee38eaacde43686f4912b77276b56d25b86546826c23564736f6c634300081a0033608060405234801561001057600080fd5b50604051610b3f380380610b3f83398101604081905261002f916100b9565b600380546001600160a01b038086166001600160a01b0319928316179092556004805485841690831617905560058054928416929091169190911790556040517f80699e81136d69cb8367ad52a994e25c722a86da654b561d0c14b61a777e7ac590600090a15050506100fc565b80516001600160a01b03811681146100b457600080fd5b919050565b6000806000606084860312156100ce57600080fd5b6100d78461009d565b92506100e56020850161009d565b91506100f36040850161009d565b90509250925092565b610a348061010b6000396000f3fe608060405234801561001057600080fd5b50600436106100c95760003560e01c806397770dff11610081578063d7fd7afb1161005b578063d7fd7afb146101f2578063d936a01214610220578063ee2815ba1461024057600080fd5b806397770dff146101b9578063a7cb0507146101cc578063c63585cc146101df57600080fd5b8063513a9c05116100b2578063513a9c0514610143578063569541b914610179578063842da36d1461019957600080fd5b80630be15547146100ce5780633c669d551461012e575b600080fd5b6101046100dc36600461071e565b60016020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b61014161013c366004610760565b610253565b005b61010461015136600461071e565b60026020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b6003546101049073ffffffffffffffffffffffffffffffffffffffff1681565b6005546101049073ffffffffffffffffffffffffffffffffffffffff1681565b6101416101c73660046107fd565b6103a0565b6101416101da36600461081f565b610419565b6101046101ed366004610841565b610467565b61021261020036600461071e565b60006020819052908152604090205481565b604051908152602001610125565b6004546101049073ffffffffffffffffffffffffffffffffffffffff1681565b61014161024e366004610884565b61059c565b604080516080810182526000606082019081528152336020820152468183015290517fa9059cbb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff87811660048301526024820186905286169063a9059cbb906044016020604051808303816000875af11580156102e7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061030b91906108b0565b506040517fde43156e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff87169063de43156e90610366908490899089908990899060040161091b565b600060405180830381600087803b15801561038057600080fd5b505af1158015610394573d6000803e3d6000fd5b50505050505050505050565b600380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527fdba79d534382d1a8ae108e4c8ecb27c6ae42ab8b91d44eedf88bd329f3868d5e9060200160405180910390a150565b6000828152602081815260409182902083905581518481529081018390527f49f492222906ac486c3c1401fa545626df1f0c0e5a77a05597ea2ed66af9850d91015b60405180910390a15050565b60008060006104768585610620565b6040517fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606084811b8216602084015283901b166034820152919350915086906048016040516020818303038152906040528051906020012060405160200161055c9291907fff00000000000000000000000000000000000000000000000000000000000000815260609290921b7fffffffffffffffffffffffffffffffffffffffff00000000000000000000000016600183015260158201527f96e8ac4277198ff8b6f785478aa9a39f403cb768dd02cbee326c3e7da348845f603582015260550190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291905280516020909101209695505050505050565b60008281526001602090815260409182902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff85169081179091558251858152918201527fd1b36d30f6248e97c473b4d1348ca164a4ef6759022f54a58ec200326c39c45d910161045b565b6000808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603610688576040517fcb1e7cfe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16106106c25782846106c5565b83835b909250905073ffffffffffffffffffffffffffffffffffffffff8216610717576040517f78b507da00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b9250929050565b60006020828403121561073057600080fd5b5035919050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461075b57600080fd5b919050565b60008060008060006080868803121561077857600080fd5b61078186610737565b945061078f60208701610737565b935060408601359250606086013567ffffffffffffffff8111156107b257600080fd5b8601601f810188136107c357600080fd5b803567ffffffffffffffff8111156107da57600080fd5b8860208284010111156107ec57600080fd5b959894975092955050506020019190565b60006020828403121561080f57600080fd5b61081882610737565b9392505050565b6000806040838503121561083257600080fd5b50508035926020909101359150565b60008060006060848603121561085657600080fd5b61085f84610737565b925061086d60208501610737565b915061087b60408501610737565b90509250925092565b6000806040838503121561089757600080fd5b823591506108a760208401610737565b90509250929050565b6000602082840312156108c257600080fd5b8151801515811461081857600080fd5b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b60808152600086516060608084015280518060e085015260005b81811015610953576020818401810151610100878401015201610935565b5060008482016101000152602089015173ffffffffffffffffffffffffffffffffffffffff811660a0860152601f9091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168401915050604088015160c084015273ffffffffffffffffffffffffffffffffffffffff871660208401528560408401526101008382030160608401526109f2610100820185876108d2565b9897505050505050505056fea26469706673582212206b99774936066d66e673847cda232c1a8b90636b82cb2d9c47172da97ac4570a64736f6c634300081a003360e060405234801561001057600080fd5b50604051611bb9380380611bb983398101604081905261002f9161020e565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461006357604051632b2add3d60e01b815260040160405180910390fd5b6001600160a01b038216158061008057506001600160a01b038116155b1561009e5760405163d92e233d60e01b815260040160405180910390fd5b60066100aa8982610360565b5060076100b78882610360565b5060ff861660c05260808590528360028111156100d6576100d661041e565b60a08160028111156100ea576100ea61041e565b905250600192909255600080546001600160a01b039283166001600160a01b03199182161790915560088054929093169116179055506104349350505050565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261015157600080fd5b81516001600160401b0381111561016a5761016a61012a565b604051601f8201601f19908116603f011681016001600160401b03811182821017156101985761019861012a565b6040528181528382016020018510156101b057600080fd5b60005b828110156101cf576020818601810151838301820152016101b3565b506000918101602001919091529392505050565b8051600381106101f257600080fd5b919050565b80516001600160a01b03811681146101f257600080fd5b600080600080600080600080610100898b03121561022b57600080fd5b88516001600160401b0381111561024157600080fd5b61024d8b828c01610140565b60208b015190995090506001600160401b0381111561026b57600080fd5b6102778b828c01610140565b975050604089015160ff8116811461028e57600080fd5b60608a015190965094506102a460808a016101e3565b60a08a015190945092506102ba60c08a016101f7565b91506102c860e08a016101f7565b90509295985092959890939650565b600181811c908216806102eb57607f821691505b60208210810361030b57634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111561035b57806000526020600020601f840160051c810160208510156103385750805b601f840160051c820191505b818110156103585760008155600101610344565b50505b505050565b81516001600160401b038111156103795761037961012a565b61038d8161038784546102d7565b84610311565b6020601f8211600181146103c157600083156103a95750848201515b600019600385901b1c1916600184901b178455610358565b600084815260208120601f198516915b828110156103f157878501518255602094850194600190920191016103d1565b508482101561040f5786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b634e487b7160e01b600052602160045260246000fd5b60805160a05160c05161174861047160003960006102170152600061033a0152600081816102eb01528181610ad70152610bdd01526117486000f3fe608060405234801561001057600080fd5b50600436106101985760003560e01c80638b851b95116100e3578063ccc775991161008c578063eddeb12311610066578063eddeb12314610431578063f2441b3214610444578063f687d12a1461046457600080fd5b8063ccc77599146103a4578063d9eeebed146103b7578063dd62ed3e146103eb57600080fd5b8063a9059cbb116100bd578063a9059cbb14610369578063c70126261461037c578063c835d7cc1461038f57600080fd5b80638b851b951461030d57806395d89b411461032d578063a3413d031461033557600080fd5b80633ce4a5bc116101455780634d8943bb1161011f5780634d8943bb146102a757806370a08231146102b057806385e1f4d0146102e657600080fd5b80633ce4a5bc1461024157806342966c681461028157806347e7ef241461029457600080fd5b806318160ddd1161017657806318160ddd146101f557806323b872dd146101fd578063313ce5671461021057600080fd5b806306fdde031461019d578063091d2788146101bb578063095ea7b3146101d2575b600080fd5b6101a5610477565b6040516101b29190611327565b60405180910390f35b6101c460015481565b6040519081526020016101b2565b6101e56101e0366004611366565b610509565b60405190151581526020016101b2565b6005546101c4565b6101e561020b366004611392565b610520565b60405160ff7f00000000000000000000000000000000000000000000000000000000000000001681526020016101b2565b61025c73735b14bb79463307aacbed86daf3322b1e6226ab81565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101b2565b6101e561028f3660046113d3565b6105b7565b6101e56102a2366004611366565b6105cb565b6101c460025481565b6101c46102be3660046113ec565b73ffffffffffffffffffffffffffffffffffffffff1660009081526003602052604090205490565b6101c47f000000000000000000000000000000000000000000000000000000000000000081565b60085461025c9073ffffffffffffffffffffffffffffffffffffffff1681565b6101a561071f565b61035c7f000000000000000000000000000000000000000000000000000000000000000081565b6040516101b29190611409565b6101e5610377366004611366565b61072e565b6101e561038a366004611479565b61073b565b6103a261039d3660046113ec565b61088a565b005b6103a26103b23660046113ec565b61099e565b6103bf610aab565b6040805173ffffffffffffffffffffffffffffffffffffffff90931683526020830191909152016101b2565b6101c46103f9366004611571565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260046020908152604080832093909416825291909152205490565b6103a261043f3660046113d3565b610cc9565b60005461025c9073ffffffffffffffffffffffffffffffffffffffff1681565b6103a26104723660046113d3565b610d4b565b606060068054610486906115aa565b80601f01602080910402602001604051908101604052809291908181526020018280546104b2906115aa565b80156104ff5780601f106104d4576101008083540402835291602001916104ff565b820191906000526020600020905b8154815290600101906020018083116104e257829003601f168201915b5050505050905090565b6000610516338484610dcd565b5060015b92915050565b600061052d848484610ed6565b73ffffffffffffffffffffffffffffffffffffffff8416600090815260046020908152604080832033845290915290205482811015610598576040517f10bad14700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6105ac85336105a7868561162c565b610dcd565b506001949350505050565b60006105c33383611091565b506001919050565b60003373735b14bb79463307aacbed86daf3322b1e6226ab14801590610609575060005473ffffffffffffffffffffffffffffffffffffffff163314155b801561062d575060085473ffffffffffffffffffffffffffffffffffffffff163314155b15610664576040517fddb5de5e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61066e83836111d3565b6040517f735b14bb79463307aacbed86daf3322b1e6226ab000000000000000000000000602082015273ffffffffffffffffffffffffffffffffffffffff8416907f67fc7bdaed5b0ec550d8706b87d60568ab70c6b781263c70101d54cd1564aab390603401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529082905261070e91869061163f565b60405180910390a250600192915050565b606060078054610486906115aa565b6000610516338484610ed6565b6000806000610748610aab565b6040517f23b872dd00000000000000000000000000000000000000000000000000000000815233600482015273735b14bb79463307aacbed86daf3322b1e6226ab602482015260448101829052919350915073ffffffffffffffffffffffffffffffffffffffff8316906323b872dd906064016020604051808303816000875af11580156107da573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107fe9190611661565b610834576040517f0a7cd6d600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61083e3385611091565b60025460405133917f9ffbffc04a397460ee1dbe8c9503e098090567d6b7f4b3c02a8617d800b6d9559161087791899189918791611683565b60405180910390a2506001949350505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab146108d7576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116610924576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527fd55614e962c5fd6ece71614f6348d702468a997a394dd5e5c1677950226d97ae906020015b60405180910390a150565b3373735b14bb79463307aacbed86daf3322b1e6226ab146109eb576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116610a38576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600880547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527f88815d964e380677e86d817e7d65dea59cb7b4c3b5b7a0c8ec7ea4a74f90a38790602001610993565b600080546040517f0be155470000000000000000000000000000000000000000000000000000000081527f000000000000000000000000000000000000000000000000000000000000000060048201528291829173ffffffffffffffffffffffffffffffffffffffff90911690630be1554790602401602060405180830381865afa158015610b3e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b6291906116b2565b905073ffffffffffffffffffffffffffffffffffffffff8116610bb1576040517f78fff39600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080546040517fd7fd7afb0000000000000000000000000000000000000000000000000000000081527f0000000000000000000000000000000000000000000000000000000000000000600482015273ffffffffffffffffffffffffffffffffffffffff9091169063d7fd7afb90602401602060405180830381865afa158015610c40573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c6491906116cf565b905080600003610ca0576040517fe661aed000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060025460015483610cb391906116e8565b610cbd91906116ff565b92959294509192505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610d16576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60028190556040518181527fef13af88e424b5d15f49c77758542c1938b08b8b95b91ed0751f98ba99000d8f90602001610993565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610d98576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018190556040518181527fff5788270f43bfc1ca41c503606d2594aa3023a1a7547de403a3e2f146a4a80a90602001610993565b73ffffffffffffffffffffffffffffffffffffffff8316610e1a576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216610e67576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff83811660008181526004602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8316610f23576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216610f70576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff831660009081526003602052604090205481811015610fd0576040517ffe382aa700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610fda828261162c565b73ffffffffffffffffffffffffffffffffffffffff808616600090815260036020526040808220939093559085168152908120805484929061101d9084906116ff565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161108391815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff82166110de576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff82166000908152600360205260409020548181101561113e576040517ffe382aa700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611148828261162c565b73ffffffffffffffffffffffffffffffffffffffff84166000908152600360205260408120919091556005805484929061118390849061162c565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90602001610ec9565b73ffffffffffffffffffffffffffffffffffffffff8216611220576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b806005600082825461123291906116ff565b909155505073ffffffffffffffffffffffffffffffffffffffff82166000908152600360205260408120805483929061126c9084906116ff565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6000815180845260005b818110156112e9576020818501810151868301820152016112cd565b5060006020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b60208152600061133a60208301846112c3565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff8116811461136357600080fd5b50565b6000806040838503121561137957600080fd5b823561138481611341565b946020939093013593505050565b6000806000606084860312156113a757600080fd5b83356113b281611341565b925060208401356113c281611341565b929592945050506040919091013590565b6000602082840312156113e557600080fd5b5035919050565b6000602082840312156113fe57600080fd5b813561133a81611341565b6020810160038310611444577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000806040838503121561148c57600080fd5b823567ffffffffffffffff8111156114a357600080fd5b8301601f810185136114b457600080fd5b803567ffffffffffffffff8111156114ce576114ce61144a565b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8501160116810181811067ffffffffffffffff8211171561153a5761153a61144a565b60405281815282820160200187101561155257600080fd5b8160208401602083013760006020928201830152969401359450505050565b6000806040838503121561158457600080fd5b823561158f81611341565b9150602083013561159f81611341565b809150509250929050565b600181811c908216806115be57607f821691505b6020821081036115f7577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8181038181111561051a5761051a6115fd565b60408152600061165260408301856112c3565b90508260208301529392505050565b60006020828403121561167357600080fd5b8151801515811461133a57600080fd5b60808152600061169660808301876112c3565b6020830195909552506040810192909252606090910152919050565b6000602082840312156116c457600080fd5b815161133a81611341565b6000602082840312156116e157600080fd5b5051919050565b808202811582820484141761051a5761051a6115fd565b8082018082111561051a5761051a6115fd56fea26469706673582212204013e39523742118b3f2227e145ee7e48176ba6aebead33c596dca2acb59a74c64736f6c634300081a0033a26469706673582212209f520c1fa405c66d5098b368171b6391fe50d8b5590e5c12de817b376794026d64736f6c634300081a0033", + Bin: "0x6080604052600c8054600160ff199182168117909255601f80549091169091179055348015602c57600080fd5b506201087d806200003e6000396000f3fe608060405234801561001057600080fd5b506004361061011b5760003560e01c806385226c81116100b2578063b5508aa911610081578063d7a525fc11610066578063d7a525fc146101ec578063e20c9f71146101f4578063fa7626d4146101fc57600080fd5b8063b5508aa9146101cc578063ba414fa6146101d457600080fd5b806385226c8114610192578063916a17c6146101a75780639683c695146101bc578063b0464fdc146101c457600080fd5b80633f7286f4116100ee5780633f7286f414610165578063524744131461016d57806366d9a9a0146101755780636ff15ccc1461018a57600080fd5b80630a9254e4146101205780631ed7831c1461012a5780632ade3880146101485780633e5e3c231461015d575b600080fd5b610128610209565b005b61013261118d565b60405161013f9190617944565b60405180910390f35b6101506111ef565b60405161013f91906179e0565b610132611331565b610132611391565b6101286113f1565b61017d611c4e565b60405161013f9190617b46565b610128611dd0565b61019a6125e8565b60405161013f9190617be4565b6101af6126b8565b60405161013f9190617c5b565b6101286127b3565b6101af612d2f565b61019a612e2a565b6101dc612efa565b604051901515815260200161013f565b610128612fce565b6101326136b0565b601f546101dc9060ff1681565b602680547fffffffffffffffffffffffff00000000000000000000000000000000000000009081163017909155602780548216611234179055602880548216615678179055602e805490911661432117905560405161026790617829565b60408082526004908201527f746573740000000000000000000000000000000000000000000000000000000060608201526080602082018190526003908201527f54544b000000000000000000000000000000000000000000000000000000000060a082015260c001604051809103906000f0801580156102ec573d6000803e3d6000fd5b50602380547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039290921691909117905560405161033190617829565b604080825260049082018190527f7a6574610000000000000000000000000000000000000000000000000000000060608301526080602083018190528201527f5a4554410000000000000000000000000000000000000000000000000000000060a082015260c001604051809103906000f0801580156103b5573d6000803e3d6000fd5b50602480547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039283169081178255604080518082018252600e81527f4761746577617945564d2e736f6c0000000000000000000000000000000000006020820152602854602654925190861694810194909452604484019290925290921660648201526104a6919060840160408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fc0c53b8b00000000000000000000000000000000000000000000000000000000179052613710565b601f80547fffffffffffffffffffffff0000000000000000000000000000000000000000ff166101006001600160a01b0393841681029190911791829055602080549190920483167fffffffffffffffffffffffff0000000000000000000000000000000000000000909116811790915560285460265460405192939182169291169061053290617837565b6001600160a01b03938416815291831660208301529091166040820152606001604051809103906000f08015801561056e573d6000803e3d6000fd5b50602180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392831617905560205460245460285460265460405193851694928316939183169216906105c990617845565b6001600160a01b039485168152928416602084015290831660408301529091166060820152608001604051809103906000f08015801561060d573d6000803e3d6000fd5b50602280547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039283161790556028546040517fc88a5e6d00000000000000000000000000000000000000000000000000000000815291166004820152670de0b6b3a76400006024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c88a5e6d90604401600060405180830381600087803b1580156106b957600080fd5b505af11580156106cd573d6000803e3d6000fd5b50506026546040517f06447d560000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506306447d569150602401600060405180830381600087803b15801561074357600080fd5b505af1158015610757573d6000803e3d6000fd5b50506020546021546040517fae7a3a6f0000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201529116925063ae7a3a6f9150602401600060405180830381600087803b1580156107bd57600080fd5b505af11580156107d1573d6000803e3d6000fd5b50506020546022546040517f10188aef0000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152911692506310188aef9150602401600060405180830381600087803b15801561083757600080fd5b505af115801561084b573d6000803e3d6000fd5b505050507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b03166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156108ad57600080fd5b505af11580156108c1573d6000803e3d6000fd5b50506023546026546040517f40c10f190000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620f42406024820152911692506340c10f199150604401600060405180830381600087803b15801561093057600080fd5b505af1158015610944573d6000803e3d6000fd5b50506023546021546040517fa9059cbb0000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201526207a12060248201529116925063a9059cbb91506044016020604051808303816000875af11580156109b8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109dc9190617cf2565b506040516109e990617853565b604051809103906000f080158015610a05573d6000803e3d6000fd5b50602580547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03928316179055604080518082018252600f81527f476174657761795a45564d2e736f6c0000000000000000000000000000000000602082015260248054602e54935190851691810191909152919092166044820152610aee919060640160408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f485cc95500000000000000000000000000000000000000000000000000000000179052613710565b602980546001600160a01b03929092167fffffffffffffffffffffffff00000000000000000000000000000000000000009283168117909155602a80549092168117909155604051610b3f90617861565b6001600160a01b039091168152602001604051809103906000f080158015610b6b573d6000803e3d6000fd5b50602b80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03929092169190911790556040517f06447d5600000000000000000000000000000000000000000000000000000000815273735b14bb79463307aacbed86daf3322b1e6226ab6004820181905290737109709ecfa91a80626ff3989d68f67f5b1dd12d906306447d5690602401600060405180830381600087803b158015610c2057600080fd5b505af1158015610c34573d6000803e3d6000fd5b505050506000806000604051610c499061786f565b6001600160a01b03938416815291831660208301529091166040820152606001604051809103906000f080158015610c85573d6000803e3d6000fd5b50602c80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03928316908117909155602a54604051601293600193600093849391921690610cdb9061787d565b610cea96959493929190617d14565b604051809103906000f080158015610d06573d6000803e3d6000fd5b50602d80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03928316908117909155602c546040517fee2815ba0000000000000000000000000000000000000000000000000000000081526001600482015260248101929092529091169063ee2815ba90604401600060405180830381600087803b158015610d9d57600080fd5b505af1158015610db1573d6000803e3d6000fd5b5050602c546040517fa7cb050700000000000000000000000000000000000000000000000000000000815260016004820181905260248201526001600160a01b03909116925063a7cb05079150604401600060405180830381600087803b158015610e1b57600080fd5b505af1158015610e2f573d6000803e3d6000fd5b5050602d54602e546040517f47e7ef240000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620f42406024820152911692506347e7ef2491506044016020604051808303816000875af1158015610ea3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ec79190617cf2565b50602d54602b546040517f47e7ef240000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620f424060248201529116906347e7ef24906044016020604051808303816000875af1158015610f38573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f5c9190617cf2565b507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b03166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610fbb57600080fd5b505af1158015610fcf573d6000803e3d6000fd5b5050602e546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b15801561104557600080fd5b505af1158015611059573d6000803e3d6000fd5b5050602d54602a546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620f424060248201529116925063095ea7b391506044016020604051808303816000875af11580156110cd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110f19190617cf2565b506028546040517fc88a5e6d0000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152670de0b6b3a76400006024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c88a5e6d90604401600060405180830381600087803b15801561117257600080fd5b505af1158015611186573d6000803e3d6000fd5b5050505050565b606060168054806020026020016040519081016040528092919081815260200182805480156111e557602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116111c7575b5050505050905090565b6060601e805480602002602001604051908101604052809291908181526020016000905b8282101561132857600084815260208082206040805180820182526002870290920180546001600160a01b03168352600181018054835181870281018701909452808452939591948681019491929084015b8282101561131157838290600052602060002001805461128490617e09565b80601f01602080910402602001604051908101604052809291908181526020018280546112b090617e09565b80156112fd5780601f106112d2576101008083540402835291602001916112fd565b820191906000526020600020905b8154815290600101906020018083116112e057829003601f168201915b505050505081526020019060010190611265565b505050508152505081526020019060010190611213565b50505050905090565b606060188054806020026020016040519081016040528092919081815260200182805480156111e5576020028201919060005260206000209081546001600160a01b031681526001909101906020018083116111c7575050505050905090565b606060178054806020026020016040519081016040528092919081815260200182805480156111e5576020028201919060005260206000209081546001600160a01b031681526001909101906020018083116111c7575050505050905090565b604080518082018252600681527f48656c6c6f2100000000000000000000000000000000000000000000000000006020820152602d54602b5492517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b0393841660048201529192602a92600192670de0b6b3a7640000926000929116906370a0823190602401602060405180830381865afa15801561149d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114c19190617e56565b6040519091506000907fe04d4f9700000000000000000000000000000000000000000000000000000000906114fe90889088908890602401617e6f565b60408051601f19818403018152918152602080830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909516949094179093526025549051919350600092611597926001600160a01b03909216910160609190911b6bffffffffffffffffffffffff1916815260140190565b60408051601f1981840301815290829052602d546115c892620f4240916001600160a01b0316908690602401617e99565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f7993c1e000000000000000000000000000000000000000000000000000000000179052602a5490517ff30c7ba3000000000000000000000000000000000000000000000000000000008152919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f30c7ba391611685916001600160a01b0391909116906000908690600401617ed8565b600060405180830381600087803b15801561169f57600080fd5b505af11580156116b3573d6000803e3d6000fd5b5050602e546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b15801561172957600080fd5b505af115801561173d573d6000803e3d6000fd5b5050602b5460255460405160609190911b6bffffffffffffffffffffffff191660208201526001600160a01b039091169250630abd8905915060340160408051601f1981840301815290829052602d547fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1683526117d792620f4240916001600160a01b0316908d908d908d90600401617f00565b600060405180830381600087803b1580156117f157600080fd5b505af1158015611805573d6000803e3d6000fd5b50506020546040517fc88a5e6d0000000000000000000000000000000000000000000000000000000081526001600160a01b03909116600482015260248101879052737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c88a5e6d9150604401600060405180830381600087803b15801561188257600080fd5b505af1158015611896573d6000803e3d6000fd5b50506025546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b15801561192857600080fd5b505af115801561193c573d6000803e3d6000fd5b50506020546040517f1f1ff1f5fb41346850b2f5c04e6c767e2f1c8a525c5c0c5cdb60cdf3ca5f62fa935061198592506001600160a01b039091169087908b908b908b90617f55565b60405180910390a16020546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b158015611a1b57600080fd5b505af1158015611a2f573d6000803e3d6000fd5b50506025546040516001600160a01b0390911692507fcaf938de11c367272220bfd1d2baa99ca46665e7bc4d85f00adb51b90fe1fa9f9150611a749087908690617f96565b60405180910390a26028546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015611aee57600080fd5b505af1158015611b02573d6000803e3d6000fd5b50506020546025546040517f1cff79cd0000000000000000000000000000000000000000000000000000000081526001600160a01b039283169450631cff79cd93508892611b569216908790600401617faf565b60006040518083038185885af1158015611b74573d6000803e3d6000fd5b50505050506040513d6000823e601f3d908101601f19168201604052611b9d91908101906180b9565b50602d54602b546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260009291909116906370a0823190602401602060405180830381865afa158015611c08573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c2c9190617e56565b9050611c4481611c3f620f42408761811d565b61372f565b5050505050505050565b6060601b805480602002602001604051908101604052809291908181526020016000905b828210156113285783829060005260206000209060020201604051806040016040529081600082018054611ca590617e09565b80601f0160208091040260200160405190810160405280929190818152602001828054611cd190617e09565b8015611d1e5780601f10611cf357610100808354040283529160200191611d1e565b820191906000526020600020905b815481529060010190602001808311611d0157829003601f168201915b5050505050815260200160018201805480602002602001604051908101604052809291908181526020018280548015611db857602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019060040190602082600301049283019260010382029150808411611d655790505b50505050508152505081526020019060010190611c72565b604080518082018252600681527f48656c6c6f21000000000000000000000000000000000000000000000000000060208201529051602a90600190670de0b6b3a7640000906000907fe04d4f970000000000000000000000000000000000000000000000000000000090611e4c90879087908790602401617e6f565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009490941693909317909252602a5491517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b0390921660848301529150737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b158015611f3b57600080fd5b505af1158015611f4f573d6000803e3d6000fd5b5050602e5460255460405160609190911b6bffffffffffffffffffffffff19166020820152600093506001600160a01b0390911691507fde19dbe881cc0aeeb6e73ce19ac7b5ca695e6be8a076e3eb42292005a7fec1b59060340160408051601f19818403018152828252602d547f4d8943bb000000000000000000000000000000000000000000000000000000008452915190926001600160a01b0390921691620f4240916000918491634d8943bb916004808201926020929091908290030181865afa158015612025573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120499190617e56565b8860405161205c96959493929190618130565b60405180910390a3602e546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156120d657600080fd5b505af11580156120ea573d6000803e3d6000fd5b5050602a5460255460405160609190911b6bffffffffffffffffffffffff191660208201526001600160a01b039091169250637993c1e0915060340160408051601f1981840301815290829052602d547fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16835261218092620f4240916001600160a01b0316908790600401618183565b600060405180830381600087803b15801561219a57600080fd5b505af11580156121ae573d6000803e3d6000fd5b5050602d54602e546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260009450911691506370a0823190602401602060405180830381865afa15801561221a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061223e9190617e56565b905061224b81600061372f565b6020546040517fc88a5e6d0000000000000000000000000000000000000000000000000000000081526001600160a01b03909116600482015260248101849052737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c88a5e6d90604401600060405180830381600087803b1580156122c457600080fd5b505af11580156122d8573d6000803e3d6000fd5b50506025546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b15801561236a57600080fd5b505af115801561237e573d6000803e3d6000fd5b50506020546040517f1f1ff1f5fb41346850b2f5c04e6c767e2f1c8a525c5c0c5cdb60cdf3ca5f62fa93506123c792506001600160a01b039091169086908a908a908a90617f55565b60405180910390a16020546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b15801561245d57600080fd5b505af1158015612471573d6000803e3d6000fd5b50506025546040516001600160a01b0390911692507fcaf938de11c367272220bfd1d2baa99ca46665e7bc4d85f00adb51b90fe1fa9f91506124b69086908690617f96565b60405180910390a26028546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561253057600080fd5b505af1158015612544573d6000803e3d6000fd5b50506020546025546040517f1cff79cd0000000000000000000000000000000000000000000000000000000081526001600160a01b039283169450631cff79cd935087926125989216908790600401617faf565b60006040518083038185885af11580156125b6573d6000803e3d6000fd5b50505050506040513d6000823e601f3d908101601f191682016040526125df91908101906180b9565b50505050505050565b6060601a805480602002602001604051908101604052809291908181526020016000905b8282101561132857838290600052602060002001805461262b90617e09565b80601f016020809104026020016040519081016040528092919081815260200182805461265790617e09565b80156126a45780601f10612679576101008083540402835291602001916126a4565b820191906000526020600020905b81548152906001019060200180831161268757829003601f168201915b50505050508152602001906001019061260c565b6060601d805480602002602001604051908101604052809291908181526020016000905b828210156113285760008481526020908190206040805180820182526002860290920180546001600160a01b0316835260018101805483518187028101870190945280845293949193858301939283018282801561279b57602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190600401906020826003010492830192600103820291508084116127485790505b505050505081525050815260200190600101906126dc565b604080518082018252600681527f48656c6c6f21000000000000000000000000000000000000000000000000000060208201529051602a90600190670de0b6b3a76400009082906000907fe04d4f97000000000000000000000000000000000000000000000000000000009061283190889088908690602401617e6f565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009490941693909317909252602e5491517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b0390921660048301529150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561290457600080fd5b505af1158015612918573d6000803e3d6000fd5b5050602a546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b1580156129aa57600080fd5b505af11580156129be573d6000803e3d6000fd5b5050602e5460255460405160609190911b6bffffffffffffffffffffffff191660208201528593506001600160a01b0390911691507f5322ffbbf9261ff1f8138247942d2b03b28717141ef0a0dd080fc4be9c4e78d39060340160408051601f1981840301815290829052612a349186906181bd565b60405180910390a3602a5460255460405160609190911b6bffffffffffffffffffffffff191660208201526001600160a01b0390911690635d40e1789060340160405160208183030381529060405284846040518463ffffffff1660e01b8152600401612aa3939291906181e2565b600060405180830381600087803b158015612abd57600080fd5b505af1158015612ad1573d6000803e3d6000fd5b50506020546040517fc88a5e6d0000000000000000000000000000000000000000000000000000000081526001600160a01b03909116600482015260248101869052737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c88a5e6d9150604401600060405180830381600087803b158015612b4e57600080fd5b505af1158015612b62573d6000803e3d6000fd5b50506020546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b158015612bf457600080fd5b505af1158015612c08573d6000803e3d6000fd5b50506025546040516001600160a01b0390911692507fcaf938de11c367272220bfd1d2baa99ca46665e7bc4d85f00adb51b90fe1fa9f9150612c4d9086908590617f96565b60405180910390a26028546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015612cc757600080fd5b505af1158015612cdb573d6000803e3d6000fd5b50506020546025546040517f1cff79cd0000000000000000000000000000000000000000000000000000000081526001600160a01b039283169450631cff79cd935087926125989216908690600401617faf565b6060601c805480602002602001604051908101604052809291908181526020016000905b828210156113285760008481526020908190206040805180820182526002860290920180546001600160a01b03168352600181018054835181870281018701909452808452939491938583019392830182828015612e1257602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019060040190602082600301049283019260010382029150808411612dbf5790505b50505050508152505081526020019060010190612d53565b60606019805480602002602001604051908101604052809291908181526020016000905b82821015611328578382906000526020600020018054612e6d90617e09565b80601f0160208091040260200160405190810160405280929190818152602001828054612e9990617e09565b8015612ee65780601f10612ebb57610100808354040283529160200191612ee6565b820191906000526020600020905b815481529060010190602001808311612ec957829003601f168201915b505050505081526020019060010190612e4e565b60085460009060ff1615612f12575060085460ff1690565b6040517f667f9d70000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d600482018190527f6661696c65640000000000000000000000000000000000000000000000000000602483015260009163667f9d7090604401602060405180830381865afa158015612fa3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612fc79190617e56565b1415905090565b604080518082018252600681527f48656c6c6f21000000000000000000000000000000000000000000000000000060208201529051602a90600190670de0b6b3a76400009082906000907fe04d4f97000000000000000000000000000000000000000000000000000000009061304c90889088908690602401617e6f565b60408051601f19818403018152918152602080830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009095169490941790935260255490519193506000926130e5926001600160a01b03909216910160609190911b6bffffffffffffffffffffffff1916815260140190565b60408051601f198184030181529082905261310691859085906024016181e2565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f5d40e17800000000000000000000000000000000000000000000000000000000179052602a5490517ff30c7ba3000000000000000000000000000000000000000000000000000000008152919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f30c7ba3916131c3916001600160a01b0391909116906000908690600401617ed8565b600060405180830381600087803b1580156131dd57600080fd5b505af11580156131f1573d6000803e3d6000fd5b5050602e546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b15801561326757600080fd5b505af115801561327b573d6000803e3d6000fd5b5050602b5460255460405160609190911b6bffffffffffffffffffffffff191660208201526001600160a01b03909116925063865b36f69150603401604051602081830303815290604052858a8a8a6040518663ffffffff1660e01b81526004016132ea95949392919061820d565b600060405180830381600087803b15801561330457600080fd5b505af1158015613318573d6000803e3d6000fd5b50506020546040517fc88a5e6d0000000000000000000000000000000000000000000000000000000081526001600160a01b03909116600482015260248101879052737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c88a5e6d9150604401600060405180830381600087803b15801561339557600080fd5b505af11580156133a9573d6000803e3d6000fd5b50506025546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b15801561343b57600080fd5b505af115801561344f573d6000803e3d6000fd5b50506020546040517f1f1ff1f5fb41346850b2f5c04e6c767e2f1c8a525c5c0c5cdb60cdf3ca5f62fa935061349892506001600160a01b039091169087908b908b908b90617f55565b60405180910390a16020546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b15801561352e57600080fd5b505af1158015613542573d6000803e3d6000fd5b50506025546040516001600160a01b0390911692507fcaf938de11c367272220bfd1d2baa99ca46665e7bc4d85f00adb51b90fe1fa9f91506135879087908690617f96565b60405180910390a26028546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561360157600080fd5b505af1158015613615573d6000803e3d6000fd5b50506020546025546040517f1cff79cd0000000000000000000000000000000000000000000000000000000081526001600160a01b039283169450631cff79cd935088926136699216908790600401617faf565b60006040518083038185885af1158015613687573d6000803e3d6000fd5b50505050506040513d6000823e601f3d908101601f19168201604052611c4491908101906180b9565b606060158054806020026020016040519081016040528092919081815260200182805480156111e5576020028201919060005260206000209081546001600160a01b031681526001909101906020018083116111c7575050505050905090565b600061371a61788b565b6137258484836137b6565b9150505b92915050565b6040517f98296c540000000000000000000000000000000000000000000000000000000081526004810183905260248101829052737109709ecfa91a80626ff3989d68f67f5b1dd12d906398296c549060440160006040518083038186803b15801561379a57600080fd5b505afa1580156137ae573d6000803e3d6000fd5b505050505050565b6000806137c38584613831565b90506138266040518060400160405280601d81526020017f4552433139363750726f78792e736f6c3a4552433139363750726f78790000008152508286604051602001613811929190617faf565b6040516020818303038152906040528561383d565b9150505b9392505050565b600061382a838361386b565b60c081015151600090156138615761385a84848460c00151613886565b905061382a565b61385a8484613a2c565b60006138778383613b17565b61382a8383602001518461383d565b600080613891613b27565b9050600061389f8683613bfa565b905060006138b682606001518360200151856140a0565b905060006138c6838389896142b2565b905060006138d38261512f565b602081015181519192509060030b15613946578982604001516040516020016138fd929190618252565b60408051601f19818403018152908290527f08c379a000000000000000000000000000000000000000000000000000000000825261393d916004016182d3565b60405180910390fd5b60006139896040518060400160405280601581526020017f4465706c6f79656420746f20616464726573733a2000000000000000000000008152508360016152fe565b6040517fc6ce059d000000000000000000000000000000000000000000000000000000008152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c6ce059d906139dc9084906004016182d3565b602060405180830381865afa1580156139f9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a1d91906182e6565b9b9a5050505050505050505050565b6040517f8d1cc9250000000000000000000000000000000000000000000000000000000081526000908190737109709ecfa91a80626ff3989d68f67f5b1dd12d90638d1cc92590613a819087906004016182d3565b600060405180830381865afa158015613a9e573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052613ac691908101906180b9565b90506000613af48285604051602001613ae092919061830f565b6040516020818303038152906040526154fe565b90506001600160a01b0381166137255784846040516020016138fd92919061833e565b613b2382826000615511565b5050565b604080518082018252600381527f6f75740000000000000000000000000000000000000000000000000000000000602082015290517fd145736c000000000000000000000000000000000000000000000000000000008152606091737109709ecfa91a80626ff3989d68f67f5b1dd12d91829063d145736c90613bae9084906004016183e9565b600060405180830381865afa158015613bcb573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052613bf39190810190618430565b9250505090565b613c2c6040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b6000737109709ecfa91a80626ff3989d68f67f5b1dd12d9050613c776040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b613c8085615614565b60208201526000613c90866159f9565b90506000836001600160a01b031663d930a0e66040518163ffffffff1660e01b8152600401600060405180830381865afa158015613cd2573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052613cfa9190810190618430565b86838560200151604051602001613d149493929190618479565b60408051601f19818403018152908290527f60f9bb1100000000000000000000000000000000000000000000000000000000825291506000906001600160a01b038616906360f9bb1190613d6c9085906004016182d3565b600060405180830381865afa158015613d89573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052613db19190810190618430565b6040517fdb4235f60000000000000000000000000000000000000000000000000000000081529091506001600160a01b0386169063db4235f690613df990849060040161857d565b602060405180830381865afa158015613e16573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613e3a9190617cf2565b613e4f57816040516020016138fd91906185cf565b6040517f49c4fac80000000000000000000000000000000000000000000000000000000081526001600160a01b038616906349c4fac890613e94908490600401618661565b600060405180830381865afa158015613eb1573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052613ed99190810190618430565b84526040517fdb4235f60000000000000000000000000000000000000000000000000000000081526001600160a01b0386169063db4235f690613f209084906004016186b3565b602060405180830381865afa158015613f3d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613f619190617cf2565b15613ff6576040517f49c4fac80000000000000000000000000000000000000000000000000000000081526001600160a01b038616906349c4fac890613fab9084906004016186b3565b600060405180830381865afa158015613fc8573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052613ff09190810190618430565b60408501525b846001600160a01b03166349c4fac882866000015160405160200161401b9190618705565b6040516020818303038152906040526040518363ffffffff1660e01b81526004016140479291906181bd565b600060405180830381865afa158015614064573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261408c9190810190618430565b606085015250608083015250949350505050565b60408051600480825260a0820190925260609160009190816020015b60608152602001906001900390816140bc5790505090506040518060400160405280600481526020017f67726570000000000000000000000000000000000000000000000000000000008152508160008151811061411c5761411c618771565b60200260200101819052506040518060400160405280600381526020017f2d726c00000000000000000000000000000000000000000000000000000000008152508160018151811061417057614170618771565b60200260200101819052508460405160200161418c91906187a0565b604051602081830303815290604052816002815181106141ae576141ae618771565b6020026020010181905250826040516020016141ca919061880c565b604051602081830303815290604052816003815181106141ec576141ec618771565b602002602001018190525060006142028261512f565b602080820151604080518082018252600581527f2e6a736f6e00000000000000000000000000000000000000000000000000000081850190815282518084018452600080825290860152825180840190935290518252928101929092529192506142939060408051808201825260008082526020918201528151808301909252845182528085019082015290615c7c565b6142a857856040516020016138fd919061884d565b9695505050505050565b60a0810151604080518082018252600080825260209182015281518083019092528251808352928101910152606090737109709ecfa91a80626ff3989d68f67f5b1dd12d9015614302565b511590565b614476578260200151156143be576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605860248201527f54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f742060448201527f62652075736564207768656e207468652060736b6970566572696679536f757260648201527f6365436f646560206f7074696f6e206973206074727565600000000000000000608482015260a40161393d565b8260c0015115614476576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605360248201527f54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f742060448201527f62652075736564207768656e207468652060736b69704c6963656e736554797060648201527f6560206f7074696f6e2069732060747275656000000000000000000000000000608482015260a40161393d565b6040805160ff8082526120008201909252600091816020015b606081526020019060019003908161448f57905050905060006040518060400160405280600381526020017f6e707800000000000000000000000000000000000000000000000000000000008152508282806144ea906188de565b935060ff16815181106144ff576144ff618771565b60200260200101819052506040518060400160405280600d81526020017f302e302e312d616c7068612e370000000000000000000000000000000000000081525060405160200161455091906188fd565b60405160208183030381529060405282828061456b906188de565b935060ff168151811061458057614580618771565b60200260200101819052506040518060400160405280600681526020017f6465706c6f7900000000000000000000000000000000000000000000000000008152508282806145cd906188de565b935060ff16815181106145e2576145e2618771565b60200260200101819052506040518060400160405280600e81526020017f2d2d636f6e74726163744e616d6500000000000000000000000000000000000081525082828061462f906188de565b935060ff168151811061464457614644618771565b60200260200101819052508760200151828280614660906188de565b935060ff168151811061467557614675618771565b60200260200101819052506040518060400160405280600e81526020017f2d2d636f6e7472616374506174680000000000000000000000000000000000008152508282806146c2906188de565b935060ff16815181106146d7576146d7618771565b6020908102919091010152875182826146ef816188de565b935060ff168151811061470457614704618771565b60200260200101819052506040518060400160405280600981526020017f2d2d636861696e49640000000000000000000000000000000000000000000000815250828280614751906188de565b935060ff168151811061476657614766618771565b602002602001018190525061477a46615cdd565b8282614785816188de565b935060ff168151811061479a5761479a618771565b60200260200101819052506040518060400160405280600f81526020017f2d2d6275696c64496e666f46696c6500000000000000000000000000000000008152508282806147e7906188de565b935060ff16815181106147fc576147fc618771565b602002602001018190525086828280614814906188de565b935060ff168151811061482957614829618771565b60209081029190910101528551156149505760408051808201909152601581527f2d2d636f6e7374727563746f7242797465636f646500000000000000000000006020820152828261487a816188de565b935060ff168151811061488f5761488f618771565b60209081029190910101526040517f71aad10d0000000000000000000000000000000000000000000000000000000081526001600160a01b038416906371aad10d906148df9089906004016182d3565b600060405180830381865afa1580156148fc573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526149249190810190618430565b828261492f816188de565b935060ff168151811061494457614944618771565b60200260200101819052505b846020015115614a205760408051808201909152601281527f2d2d766572696679536f75726365436f6465000000000000000000000000000060208201528282614999816188de565b935060ff16815181106149ae576149ae618771565b60200260200101819052506040518060400160405280600581526020017f66616c73650000000000000000000000000000000000000000000000000000008152508282806149fb906188de565b935060ff1681518110614a1057614a10618771565b6020026020010181905250614be7565b614a586142fd8660a0015160408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b614aeb5760408051808201909152600d81527f2d2d6c6963656e7365547970650000000000000000000000000000000000000060208201528282614a9b816188de565b935060ff1681518110614ab057614ab0618771565b60200260200101819052508460a00151604051602001614ad091906187a0565b6040516020818303038152906040528282806149fb906188de565b8460c00151158015614b2e575060408089015181518083018352600080825260209182015282518084019093528151835290810190820152614b2c90511590565b155b15614be75760408051808201909152600d81527f2d2d6c6963656e7365547970650000000000000000000000000000000000000060208201528282614b72816188de565b935060ff1681518110614b8757614b87618771565b6020026020010181905250614b9b88615d7d565b604051602001614bab91906187a0565b604051602081830303815290604052828280614bc6906188de565b935060ff1681518110614bdb57614bdb618771565b60200260200101819052505b60408086015181518083018352600080825260209182015282518084019093528151835290810190820152614c1b90511590565b614cb05760408051808201909152600b81527f2d2d72656c61796572496400000000000000000000000000000000000000000060208201528282614c5e816188de565b935060ff1681518110614c7357614c73618771565b60200260200101819052508460400151828280614c8f906188de565b935060ff1681518110614ca457614ca4618771565b60200260200101819052505b606085015115614dd15760408051808201909152600681527f2d2d73616c74000000000000000000000000000000000000000000000000000060208201528282614cf9816188de565b935060ff1681518110614d0e57614d0e618771565b602090810291909101015260608501516040517fb11a19e800000000000000000000000000000000000000000000000000000000815260048101919091526001600160a01b0384169063b11a19e890602401600060405180830381865afa158015614d7d573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052614da59190810190618430565b8282614db0816188de565b935060ff1681518110614dc557614dc5618771565b60200260200101819052505b60e08501515115614e785760408051808201909152600a81527f2d2d6761734c696d69740000000000000000000000000000000000000000000060208201528282614e1b816188de565b935060ff1681518110614e3057614e30618771565b6020026020010181905250614e4c8560e0015160000151615cdd565b8282614e57816188de565b935060ff1681518110614e6c57614e6c618771565b60200260200101819052505b60e08501516020015115614f225760408051808201909152600a81527f2d2d67617350726963650000000000000000000000000000000000000000000060208201528282614ec5816188de565b935060ff1681518110614eda57614eda618771565b6020026020010181905250614ef68560e0015160200151615cdd565b8282614f01816188de565b935060ff1681518110614f1657614f16618771565b60200260200101819052505b60e08501516040015115614fcc5760408051808201909152600e81527f2d2d6d617846656550657247617300000000000000000000000000000000000060208201528282614f6f816188de565b935060ff1681518110614f8457614f84618771565b6020026020010181905250614fa08560e0015160400151615cdd565b8282614fab816188de565b935060ff1681518110614fc057614fc0618771565b60200260200101819052505b60e085015160600151156150765760408051808201909152601681527f2d2d6d61785072696f726974794665655065724761730000000000000000000060208201528282615019816188de565b935060ff168151811061502e5761502e618771565b602002602001018190525061504a8560e0015160600151615cdd565b8282615055816188de565b935060ff168151811061506a5761506a618771565b60200260200101819052505b60008160ff1667ffffffffffffffff81111561509457615094617fd1565b6040519080825280602002602001820160405280156150c757816020015b60608152602001906001900390816150b25790505b50905060005b8260ff168160ff16101561512057838160ff16815181106150f0576150f0618771565b6020026020010151828260ff168151811061510d5761510d618771565b60209081029190910101526001016150cd565b5093505050505b949350505050565b6151566040518060600160405280600060030b815260200160608152602001606081525090565b60408051808201825260048082527f6261736800000000000000000000000000000000000000000000000000000000602083015291517fd145736c000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d92600091849163d145736c916151dc91869101618968565b600060405180830381865afa1580156151f9573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526152219190810190618430565b9050600061522f868361686c565b90506000846001600160a01b031663f45c1ce7836040518263ffffffff1660e01b815260040161525f9190617be4565b6000604051808303816000875af115801561527e573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526152a691908101906189af565b805190915060030b158015906152bf5750602081015151155b80156152ce5750604081015151155b156142a857816000815181106152e6576152e6618771565b60200260200101516040516020016138fd9190618a65565b606060006153338560408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b60408051808201825260008082526020918201528151808301909252865182528087019082015290915061536a9082905b906169c1565b156154c75760006153e7826153e1846153db6153ad8a60408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6040805180820182526000808252602091820152815180830190925282518252918201519181019190915290565b906169e8565b90616a4a565b604080518082018252600181527f0a000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015290915061544b9082906169c1565b156154b557604080518082018252600181527f0a00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526154b2905b8290616acf565b90505b6154be81616af5565b9250505061382a565b82156154e05784846040516020016138fd929190618c51565b505060408051602081019091526000815261382a565b509392505050565b6000808251602084016000f09392505050565b8160a001511561552057505050565b600061552d848484616b5e565b9050600061553a8261512f565b602081015181519192509060030b1580156155d65750604080518082018252600781527f5355434345535300000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526155d690604080518082018252600080825260209182015281518083019092528451825280850190820152615364565b156155e357505050505050565b604082015151156156035781604001516040516020016138fd9190618cf8565b806040516020016138fd9190618d56565b606060006156498360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600481527f2e736f6c00000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201529091506156ae905b8290615c7c565b1561571d57604080518082018252600481527f2e736f6c000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261382a906157189083906170f9565b616af5565b604080518082018252600181527f3a000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261577f905b8290617183565b60010361584c57604080518082018252600181527f3a00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526157e5906154ab565b50604080518082018252600181527f3a000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261382a90615718905b8390616acf565b604080518082018252600581527f2e6a736f6e000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526158ab906156a7565b156159e257604080518082018252600181527f2f0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082018190528451808601909552925184528301529061591390839061721d565b905060008160018351615926919061811d565b8151811061593657615936618771565b602002602001015190506159d96157186159ac6040518060400160405280600581526020017f2e6a736f6e00000000000000000000000000000000000000000000000000000081525060408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600080825260209182015281518083019092528551825280860190820152906170f9565b95945050505050565b826040516020016138fd9190618dc1565b50919050565b60606000615a2e8360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600481527f2e736f6c0000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152909150615a90906156a7565b15615a9e5761382a81616af5565b604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152615afd90615778565b600103615b6757604080518082018252600181527f3a000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261382a9061571890615845565b604080518082018252600581527f2e6a736f6e00000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152615bc6906156a7565b156159e257604080518082018252600181527f2f00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820181905284518086019095529251845283015290615c2e90839061721d565b9050600181511115615c6a578060028251615c49919061811d565b81518110615c5957615c59618771565b602002602001015192505050919050565b50826040516020016138fd9190618dc1565b805182516000911115615c9157506000613729565b81518351602085015160009291615ca791618e9f565b615cb1919061811d565b905082602001518103615cc8576001915050613729565b82516020840151819020912014905092915050565b60606000615cea836172c2565b600101905060008167ffffffffffffffff811115615d0a57615d0a617fd1565b6040519080825280601f01601f191660200182016040528015615d34576020820181803683370190505b5090508181016020015b600019017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a8504945084615d3e57509392505050565b604081810151815180830183526000808252602091820181905283518085018552835181529282018383015283518085018552600a81527f554e4c4943454e5345440000000000000000000000000000000000000000000081840190815285518087018752838152840192909252845180860190955251845290830152606091615e09905b82906173a4565b15615e4957505060408051808201909152600481527f4e6f6e65000000000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600981527f556e6c6963656e7365000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152615ea890615e02565b15615ee857505060408051808201909152600981527f556e6c6963656e736500000000000000000000000000000000000000000000006020820152919050565b604080518082018252600381527f4d4954000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152615f4790615e02565b15615f8757505060408051808201909152600381527f4d495400000000000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f47504c2d322e302d6f6e6c79000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152615fe690615e02565b8061604b5750604080518082018252601081527f47504c2d322e302d6f722d6c61746572000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261604b90615e02565b1561608b57505060408051808201909152600981527f474e552047504c763200000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f47504c2d332e302d6f6e6c790000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526160ea90615e02565b8061614f5750604080518082018252601081527f47504c2d332e302d6f722d6c61746572000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261614f90615e02565b1561618f57505060408051808201909152600981527f474e552047504c763300000000000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4c47504c2d322e312d6f6e6c7900000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526161ee90615e02565b806162535750604080518082018252601181527f4c47504c2d322e312d6f722d6c617465720000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261625390615e02565b1561629357505060408051808201909152600c81527f474e55204c47504c76322e3100000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4c47504c2d332e302d6f6e6c7900000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526162f290615e02565b806163575750604080518082018252601181527f4c47504c2d332e302d6f722d6c617465720000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261635790615e02565b1561639757505060408051808201909152600a81527f474e55204c47504c7633000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f4253442d322d436c617573650000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526163f690615e02565b1561643657505060408051808201909152600c81527f4253442d322d436c6175736500000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f4253442d332d436c6175736500000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261649590615e02565b156164d557505060408051808201909152600c81527f4253442d332d436c6175736500000000000000000000000000000000000000006020820152919050565b604080518082018252600781527f4d504c2d322e30000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261653490615e02565b1561657457505060408051808201909152600781527f4d504c2d322e30000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600781527f4f534c2d332e3000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526165d390615e02565b1561661357505060408051808201909152600781527f4f534c2d332e30000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600a81527f4170616368652d322e30000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261667290615e02565b156166b257505060408051808201909152600a81527f4170616368652d322e30000000000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4147504c2d332e302d6f6e6c79000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261671190615e02565b806167765750604080518082018252601181527f4147504c2d332e302d6f722d6c617465720000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261677690615e02565b156167b657505060408051808201909152600a81527f474e55204147504c7633000000000000000000000000000000000000000000006020820152919050565b604080518082018252600881527f4255534c2d312e310000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261681590615e02565b1561685557505060408051808201909152600781527f42534c20312e31000000000000000000000000000000000000000000000000006020820152919050565b604080840151845191516138fd9290602001618eb2565b60608060005b84518110156168f7578185828151811061688e5761688e618771565b60200260200101516040516020016168a792919061830f565b6040516020818303038152906040529150600185516168c6919061811d565b81146168ef57816040516020016168dd919061901b565b60405160208183030381529060405291505b600101616872565b5060408051600380825260808201909252600091816020015b6060815260200190600190039081616910579050509050838160008151811061693b5761693b618771565b60200260200101819052506040518060400160405280600281526020017f2d630000000000000000000000000000000000000000000000000000000000008152508160018151811061698f5761698f618771565b602002602001018190525081816002815181106169ae576169ae618771565b6020908102919091010152949350505050565b60208083015183518351928401516000936169df92918491906173b8565b14159392505050565b60408051808201909152600080825260208201526000616a1a84600001518560200151856000015186602001516174c9565b9050836020015181616a2c919061811d565b84518590616a3b90839061811d565b90525060208401525090919050565b6040805180820190915260008082526020820152815183511015616a6f575081613729565b6020808301519084015160019114616a965750815160208481015190840151829020919020145b8015616ac757825184518590616aad90839061811d565b9052508251602085018051616ac3908390618e9f565b9052505b509192915050565b6040805180820190915260008082526020820152616aee8383836175e9565b5092915050565b60606000826000015167ffffffffffffffff811115616b1657616b16617fd1565b6040519080825280601f01601f191660200182016040528015616b40576020820181803683370190505b5090506000602082019050616aee8185602001518660000151617694565b60606000616b6a613b27565b6040805160ff808252612000820190925291925060009190816020015b6060815260200190600190039081616b8757905050905060006040518060400160405280600381526020017f6e70780000000000000000000000000000000000000000000000000000000000815250828280616be2906188de565b935060ff1681518110616bf757616bf7618771565b60200260200101819052506040518060400160405280600781526020017f5e312e33322e3300000000000000000000000000000000000000000000000000815250604051602001616c48919061905c565b604051602081830303815290604052828280616c63906188de565b935060ff1681518110616c7857616c78618771565b60200260200101819052506040518060400160405280600881526020017f76616c6964617465000000000000000000000000000000000000000000000000815250828280616cc5906188de565b935060ff1681518110616cda57616cda618771565b602002602001018190525082604051602001616cf6919061880c565b604051602081830303815290604052828280616d11906188de565b935060ff1681518110616d2657616d26618771565b60200260200101819052506040518060400160405280600a81526020017f2d2d636f6e747261637400000000000000000000000000000000000000000000815250828280616d73906188de565b935060ff1681518110616d8857616d88618771565b6020026020010181905250616d9d878461770e565b8282616da8816188de565b935060ff1681518110616dbd57616dbd618771565b602090810291909101015285515115616e695760408051808201909152600b81527f2d2d7265666572656e636500000000000000000000000000000000000000000060208201528282616e0f816188de565b935060ff1681518110616e2457616e24618771565b6020026020010181905250616e3d86600001518461770e565b8282616e48816188de565b935060ff1681518110616e5d57616e5d618771565b60200260200101819052505b856080015115616ed75760408051808201909152601881527f2d2d756e73616665536b697053746f72616765436865636b000000000000000060208201528282616eb2816188de565b935060ff1681518110616ec757616ec7618771565b6020026020010181905250616f3d565b8415616f3d5760408051808201909152601281527f2d2d726571756972655265666572656e6365000000000000000000000000000060208201528282616f1c816188de565b935060ff1681518110616f3157616f31618771565b60200260200101819052505b60408601515115616fd95760408051808201909152600d81527f2d2d756e73616665416c6c6f770000000000000000000000000000000000000060208201528282616f87816188de565b935060ff1681518110616f9c57616f9c618771565b60200260200101819052508560400151828280616fb8906188de565b935060ff1681518110616fcd57616fcd618771565b60200260200101819052505b8560600151156170435760408051808201909152601481527f2d2d756e73616665416c6c6f7752656e616d657300000000000000000000000060208201528282617022816188de565b935060ff168151811061703757617037618771565b60200260200101819052505b60008160ff1667ffffffffffffffff81111561706157617061617fd1565b60405190808252806020026020018201604052801561709457816020015b606081526020019060019003908161707f5790505b50905060005b8260ff168160ff1610156170ed57838160ff16815181106170bd576170bd618771565b6020026020010151828260ff16815181106170da576170da618771565b602090810291909101015260010161709a565b50979650505050505050565b604080518082019091526000808252602082015281518351101561711e575081613729565b8151835160208501516000929161713491618e9f565b61713e919061811d565b6020840151909150600190821461715f575082516020840151819020908220145b801561717a5783518551869061717690839061811d565b9052505b50929392505050565b60008082600001516171a785600001518660200151866000015187602001516174c9565b6171b19190618e9f565b90505b835160208501516171c59190618e9f565b8111616aee57816171d5816190a1565b925050826000015161720c8560200151836171f0919061811d565b86516171fc919061811d565b83866000015187602001516174c9565b6172169190618e9f565b90506171b4565b6060600061722b8484617183565b617236906001618e9f565b67ffffffffffffffff81111561724e5761724e617fd1565b60405190808252806020026020018201604052801561728157816020015b606081526020019060019003908161726c5790505b50905060005b81518110156154f65761729d6157188686616acf565b8282815181106172af576172af618771565b6020908102919091010152600101617287565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000831061730b577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310617337576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc10000831061735557662386f26fc10000830492506010015b6305f5e100831061736d576305f5e100830492506008015b612710831061738157612710830492506004015b60648310617393576064830492506002015b600a83106137295760010192915050565b60006173b0838361774e565b159392505050565b6000808584116174bf576020841161746b57600084156174035760016173df86602061811d565b6173ea9060086190bb565b6173f59060026191b9565b6173ff919061811d565b1990505b83518116856174128989618e9f565b61741c919061811d565b805190935082165b8181146174565787841161743e5787945050505050615127565b83617448816191c5565b945050828451169050617424565b6174608785618e9f565b945050505050615127565b838320617478858861811d565b6174829087618e9f565b91505b8582106174bd578482208082036174aa576174a08684618e9f565b9350505050615127565b6174b560018461811d565b925050617485565b505b5092949350505050565b600083818685116175d4576020851161758357600085156175155760016174f187602061811d565b6174fc9060086190bb565b6175079060026191b9565b617511919061811d565b1990505b845181166000876175268b8b618e9f565b617530919061811d565b855190915083165b8281146175755781861061755d576175508b8b618e9f565b9650505050505050615127565b85617567816190a1565b965050838651169050617538565b859650505050505050615127565b508383206000905b617595868961811d565b82116175d2578583208082036175b15783945050505050615127565b6175bc600185618e9f565b93505081806175ca906190a1565b92505061758b565b505b6175de8787618e9f565b979650505050505050565b6040805180820190915260008082526020820152600061761b85600001518660200151866000015187602001516174c9565b602080870180519186019190915251909150617637908261811d565b83528451602086015161764a9190618e9f565b8103617659576000855261768b565b835183516176679190618e9f565b8551869061767690839061811d565b90525083516176859082618e9f565b60208601525b50909392505050565b602081106176cc57815183526176ab602084618e9f565b92506176b8602083618e9f565b91506176c560208261811d565b9050617694565b60001981156176fb5760016176e283602061811d565b6176ee906101006191b9565b6176f8919061811d565b90505b9151835183169219169190911790915250565b6060600061771c8484613bfa565b8051602080830151604051939450617736939091016191dc565b60405160208183030381529060405291505092915050565b8151815160009190811115617761575081515b6020808501519084015160005b8381101561781a57825182518082146177ea5760001960208710156177c95760018461779b89602061811d565b6177a59190618e9f565b6177b09060086190bb565b6177bb9060026191b9565b6177c5919061811d565b1990505b81811683821681810391146177e75797506137299650505050505050565b50505b6177f5602086618e9f565b9450617802602085618e9f565b935050506020816178139190618e9f565b905061776e565b50845186516142a89190619234565b610c9f806200925583390190565b6117988062009ef483390190565b61155a806200b68c83390190565b610d5e806200cbe683390190565b61080c806200d94483390190565b610b3f806200e15083390190565b611bb9806200ec8f83390190565b6040518060e001604052806060815260200160608152602001606081526020016000151581526020016000151581526020016000151581526020016178ce6178d3565b905290565b604051806101000160405280600015158152602001600015158152602001606081526020016000801916815260200160608152602001606081526020016000151581526020016178ce6040518060800160405280600081526020016000815260200160008152602001600081525090565b602080825282518282018190526000918401906040840190835b818110156179855783516001600160a01b031683526020938401939092019160010161795e565b509095945050505050565b60005b838110156179ab578181015183820152602001617993565b50506000910152565b600081518084526179cc816020860160208601617990565b601f01601f19169290920160200192915050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015617adc577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452815180516001600160a01b03168652602090810151604082880181905281519088018190529101906060600582901b88018101919088019060005b81811015617ac2577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa08a8503018352617aac8486516179b4565b6020958601959094509290920191600101617a72565b509197505050602094850194929092019150600101617a08565b50929695505050505050565b600081518084526020840193506020830160005b82811015617b3c5781517fffffffff0000000000000000000000000000000000000000000000000000000016865260209586019590910190600101617afc565b5093949350505050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015617adc577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08786030184528151805160408752617bb260408801826179b4565b9050602082015191508681036020880152617bcd8183617ae8565b965050506020938401939190910190600101617b6e565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015617adc577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452617c468583516179b4565b94506020938401939190910190600101617c0c565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015617adc577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc087860301845281516001600160a01b0381511686526020810151905060406020870152617cdc6040870182617ae8565b9550506020938401939190910190600101617c83565b600060208284031215617d0457600080fd5b8151801515811461382a57600080fd5b610100815260056101008201527f544f4b454e000000000000000000000000000000000000000000000000000000610120820152610140602082015260036101408201527f544b4e000000000000000000000000000000000000000000000000000000000061016082015260006101808201905060ff8816604083015286606083015260038610617dce577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b8560808301528460a0830152617def60c08301856001600160a01b03169052565b6001600160a01b03831660e0830152979650505050505050565b600181811c90821680617e1d57607f821691505b6020821081036159f3577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060208284031215617e6857600080fd5b5051919050565b606081526000617e8260608301866179b4565b602083019490945250901515604090910152919050565b608081526000617eac60808301876179b4565b62ffffff861660208401526001600160a01b038516604084015282810360608401526175de81856179b4565b6001600160a01b03841681528260208201526060604082015260006159d960608301846179b4565b60c081526000617f1360c08301896179b4565b8760208401526001600160a01b03871660408401528281036060840152617f3a81876179b4565b6080840195909552505090151560a090910152949350505050565b6001600160a01b038616815284602082015260a060408201526000617f7d60a08301866179b4565b6060830194909452509015156080909101529392505050565b82815260406020820152600061512760408301846179b4565b6001600160a01b038316815260406020820152600061512760408301846179b4565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040516060810167ffffffffffffffff8111828210171561802357618023617fd1565b60405290565b60008067ffffffffffffffff84111561804457618044617fd1565b50604051601f19601f85018116603f0116810181811067ffffffffffffffff8211171561807357618073617fd1565b60405283815290508082840185101561808b57600080fd5b6154f6846020830185617990565b600082601f8301126180aa57600080fd5b61382a83835160208501618029565b6000602082840312156180cb57600080fd5b815167ffffffffffffffff8111156180e257600080fd5b61372584828501618099565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b81810381811115613729576137296180ee565b60c08152600061814360c08301896179b4565b6001600160a01b038816602084015286604084015285606084015284608084015282810360a084015261817681856179b4565b9998505050505050505050565b60808152600061819660808301876179b4565b8560208401526001600160a01b038516604084015282810360608401526175de81856179b4565b6040815260006181d060408301856179b4565b828103602084015261382681856179b4565b6060815260006181f560608301866179b4565b84602084015282810360408401526142a881856179b4565b60a08152600061822060a08301886179b4565b866020840152828103604084015261823881876179b4565b606084019590955250509015156080909101529392505050565b7f4661696c656420746f206465706c6f7920636f6e74726163742000000000000081526000835161828a81601a850160208801617990565b7f3a20000000000000000000000000000000000000000000000000000000000000601a9184019182015283516182c781601c840160208801617990565b01601c01949350505050565b60208152600061382a60208301846179b4565b6000602082840312156182f857600080fd5b81516001600160a01b038116811461382a57600080fd5b60008351618321818460208801617990565b835190830190618335818360208801617990565b01949350505050565b7f4661696c656420746f206465706c6f7920636f6e74726163742000000000000081526000835161837681601a850160208801617990565b7f207573696e6720636f6e7374727563746f722064617461202200000000000000601a9184019182015283516183b3816033840160208801617990565b7f220000000000000000000000000000000000000000000000000000000000000060339290910191820152603401949350505050565b60408152600b60408201527f464f554e4452595f4f5554000000000000000000000000000000000000000000606082015260806020820152600061382a60808301846179b4565b60006020828403121561844257600080fd5b815167ffffffffffffffff81111561845957600080fd5b8201601f8101841361846a57600080fd5b61372584825160208401618029565b6000855161848b818460208a01617990565b7f2f0000000000000000000000000000000000000000000000000000000000000090830190815285516184c5816001840160208a01617990565b7f2f00000000000000000000000000000000000000000000000000000000000000600192909101918201528451618503816002840160208901617990565b6001818301019150507f2f0000000000000000000000000000000000000000000000000000000000000060018201528351618545816002840160208801617990565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600292909101918201526007019695505050505050565b60408152600061859060408301846179b4565b8281036020840152600481527f2e6173740000000000000000000000000000000000000000000000000000000060208201526040810191505092915050565b7f436f756c64206e6f742066696e642041535420696e206172746966616374200081526000825161860781601f850160208701617990565b7f2e205365742060617374203d20747275656020696e20666f756e6472792e746f601f9390910192830152507f6d6c000000000000000000000000000000000000000000000000000000000000603f820152604101919050565b60408152600061867460408301846179b4565b8281036020840152601181527f2e6173742e6162736f6c7574655061746800000000000000000000000000000060208201526040810191505092915050565b6040815260006186c660408301846179b4565b8281036020840152600c81527f2e6173742e6c6963656e7365000000000000000000000000000000000000000060208201526040810191505092915050565b7f2e6d657461646174612e736f75726365732e5b2700000000000000000000000081526000825161873d816014850160208701617990565b7f275d2e6b656363616b32353600000000000000000000000000000000000000006014939091019283015250602001919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f22000000000000000000000000000000000000000000000000000000000000008152600082516187d8816001850160208701617990565b7f22000000000000000000000000000000000000000000000000000000000000006001939091019283015250600201919050565b6000825161881e818460208701617990565b7f2f6275696c642d696e666f000000000000000000000000000000000000000000920191825250600b01919050565b7f436f756c64206e6f742066696e64206275696c642d696e666f2066696c65207781527f697468206d61746368696e6720736f7572636520636f6465206861736820666f60208201527f7220636f6e7472616374200000000000000000000000000000000000000000006040820152600082516188d181604b850160208701617990565b91909101604b0192915050565b600060ff821660ff81036188f4576188f46180ee565b60010192915050565b7f406f70656e7a657070656c696e2f646566656e6465722d6465706c6f792d636c81527f69656e742d636c6940000000000000000000000000000000000000000000000060208201526000825161895b816029850160208701617990565b9190910160290192915050565b60408152601660408201527f4f50454e5a455050454c494e5f424153485f5041544800000000000000000000606082015260806020820152600061382a60808301846179b4565b6000602082840312156189c157600080fd5b815167ffffffffffffffff8111156189d857600080fd5b8201606081850312156189ea57600080fd5b6189f2618000565b81518060030b8114618a0357600080fd5b8152602082015167ffffffffffffffff811115618a1f57600080fd5b618a2b86828501618099565b602083015250604082015167ffffffffffffffff811115618a4b57600080fd5b618a5786828501618099565b604083015250949350505050565b7f4661696c656420746f2072756e206261736820636f6d6d616e6420776974682081527f2200000000000000000000000000000000000000000000000000000000000000602082015260008251618ac3816021850160208701617990565b7f222e20496620796f7520617265207573696e672057696e646f77732c2073657460219390910192830152507f20746865204f50454e5a455050454c494e5f424153485f5041544820656e766960418201527f726f6e6d656e74207661726961626c6520746f207468652066756c6c7920717560618201527f616c69666965642070617468206f66207468652062617368206578656375746160818201527f626c652e20466f72206578616d706c652c20696620796f75206172652075736960a18201527f6e672047697420666f722057696e646f77732c206164642074686520666f6c6c60c18201527f6f77696e67206c696e6520696e20746865202e656e762066696c65206f66207960e18201527f6f75722070726f6a65637420287573696e6720666f727761726420736c6173686101018201527f6573293a0a4f50454e5a455050454c494e5f424153485f504154483d22433a2f6101218201527f50726f6772616d2046696c65732f4769742f62696e2f6261736822000000000061014182015261015c01919050565b7f4661696c656420746f2066696e64206c696e652077697468207072656669782081527f2700000000000000000000000000000000000000000000000000000000000000602082015260008351618caf816021850160208801617990565b7f2720696e206f75747075743a20000000000000000000000000000000000000006021918401918201528351618cec81602e840160208801617990565b01602e01949350505050565b7f4661696c656420746f2072756e2075706772616465207361666574792076616c81527f69646174696f6e3a20000000000000000000000000000000000000000000000060208201526000825161895b816029850160208701617990565b7f55706772616465207361666574792076616c69646174696f6e206661696c656481527f3a0a000000000000000000000000000000000000000000000000000000000000602082015260008251618db4816022850160208701617990565b9190910160220192915050565b7f436f6e7472616374206e616d6520000000000000000000000000000000000000815260008251618df981600e850160208701617990565b7f206d75737420626520696e2074686520666f726d6174204d79436f6e74726163600e9390910192830152507f742e736f6c3a4d79436f6e7472616374206f72204d79436f6e74726163742e73602e8201527f6f6c206f72206f75742f4d79436f6e74726163742e736f6c2f4d79436f6e7472604e8201527f6163742e6a736f6e000000000000000000000000000000000000000000000000606e820152607601919050565b80820180821115613729576137296180ee565b7f53504458206c6963656e7365206964656e746966696572200000000000000000815260008351618eea816018850160208801617990565b7f20696e20000000000000000000000000000000000000000000000000000000006018918401918201528351618f2781601c840160208801617990565b7f20646f6573206e6f74206c6f6f6b206c696b65206120737570706f7274656420601c92909101918201527f6c6963656e736520666f7220626c6f636b206578706c6f726572207665726966603c8201527f69636174696f6e2e205573652074686520606c6963656e73655479706560206f605c8201527f7074696f6e20746f20737065636966792061206c6963656e736520747970652c607c8201527f206f7220736574207468652060736b69704c6963656e73655479706560206f70609c8201527f74696f6e20746f2060747275656020746f20736b69702e00000000000000000060bc82015260d301949350505050565b6000825161902d818460208701617990565b7f2000000000000000000000000000000000000000000000000000000000000000920191825250600101919050565b7f406f70656e7a657070656c696e2f75706772616465732d636f7265400000000081526000825161909481601c850160208701617990565b91909101601c0192915050565b600060001982036190b4576190b46180ee565b5060010190565b8082028115828204841417613729576137296180ee565b6001815b600184111561910d578085048111156190f1576190f16180ee565b60018416156190ff57908102905b60019390931c9280026190d6565b935093915050565b60008261912457506001613729565b8161913157506000613729565b816001811461914757600281146191515761916d565b6001915050613729565b60ff841115619162576191626180ee565b50506001821b613729565b5060208310610133831016604e8410600b8410161715619190575081810a613729565b61919d60001984846190d2565b80600019048211156191b1576191b16180ee565b029392505050565b600061382a8383619115565b6000816191d4576191d46180ee565b506000190190565b600083516191ee818460208801617990565b7f3a000000000000000000000000000000000000000000000000000000000000009083019081528351619228816001840160208801617990565b01600101949350505050565b8181036000831280158383131683831282161715616aee57616aee6180ee56fe608060405234801561001057600080fd5b50604051610c9f380380610c9f83398101604081905261002f9161010d565b8181600361003d83826101ff565b50600461004a82826101ff565b50505050506102bd565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261007b57600080fd5b81516001600160401b0381111561009457610094610054565b604051601f8201601f19908116603f011681016001600160401b03811182821017156100c2576100c2610054565b6040528181528382016020018510156100da57600080fd5b60005b828110156100f9576020818601810151838301820152016100dd565b506000918101602001919091529392505050565b6000806040838503121561012057600080fd5b82516001600160401b0381111561013657600080fd5b6101428582860161006a565b602085015190935090506001600160401b0381111561016057600080fd5b61016c8582860161006a565b9150509250929050565b600181811c9082168061018a57607f821691505b6020821081036101aa57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156101fa57806000526020600020601f840160051c810160208510156101d75750805b601f840160051c820191505b818110156101f757600081556001016101e3565b50505b505050565b81516001600160401b0381111561021857610218610054565b61022c816102268454610176565b846101b0565b6020601f82116001811461026057600083156102485750848201515b600019600385901b1c1916600184901b1784556101f7565b600084815260208120601f198516915b828110156102905787850151825560209485019460019092019101610270565b50848210156102ae5786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b6109d3806102cc6000396000f3fe608060405234801561001057600080fd5b50600436106100be5760003560e01c806340c10f191161007657806395d89b411161005b57806395d89b4114610183578063a9059cbb1461018b578063dd62ed3e1461019e57600080fd5b806340c10f191461013857806370a082311461014d57600080fd5b806318160ddd116100a757806318160ddd1461010457806323b872dd14610116578063313ce5671461012957600080fd5b806306fdde03146100c3578063095ea7b3146100e1575b600080fd5b6100cb6101e4565b6040516100d891906107bf565b60405180910390f35b6100f46100ef366004610854565b610276565b60405190151581526020016100d8565b6002545b6040519081526020016100d8565b6100f461012436600461087e565b610290565b604051601281526020016100d8565b61014b610146366004610854565b6102b4565b005b61010861015b3660046108bb565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6100cb6102c2565b6100f4610199366004610854565b6102d1565b6101086101ac3660046108dd565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6060600380546101f390610910565b80601f016020809104026020016040519081016040528092919081815260200182805461021f90610910565b801561026c5780601f106102415761010080835404028352916020019161026c565b820191906000526020600020905b81548152906001019060200180831161024f57829003601f168201915b5050505050905090565b6000336102848185856102df565b60019150505b92915050565b60003361029e8582856102f1565b6102a98585856103c5565b506001949350505050565b6102be8282610470565b5050565b6060600480546101f390610910565b6000336102848185856103c5565b6102ec83838360016104cc565b505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146103bf57818110156103b0576040517ffb8f41b200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416600482015260248101829052604481018390526064015b60405180910390fd5b6103bf848484840360006104cc565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8316610415576040517f96c6fd1e000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff8216610465576040517fec442f05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b6102ec838383610614565b73ffffffffffffffffffffffffffffffffffffffff82166104c0576040517fec442f05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b6102be60008383610614565b73ffffffffffffffffffffffffffffffffffffffff841661051c576040517fe602df05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff831661056c576040517f94280d62000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260016020908152604080832093871683529290522082905580156103bf578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161060691815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff831661064c5780600260008282546106419190610963565b909155506106fe9050565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260208190526040902054818110156106d2576040517fe450d38c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8516600482015260248101829052604481018390526064016103a7565b73ffffffffffffffffffffffffffffffffffffffff841660009081526020819052604090209082900390555b73ffffffffffffffffffffffffffffffffffffffff821661072757600280548290039055610753565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090208054820190555b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516107b291815260200190565b60405180910390a3505050565b602081526000825180602084015260005b818110156107ed57602081860181015160408684010152016107d0565b5060006040828501015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011684010191505092915050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461084f57600080fd5b919050565b6000806040838503121561086757600080fd5b6108708361082b565b946020939093013593505050565b60008060006060848603121561089357600080fd5b61089c8461082b565b92506108aa6020850161082b565b929592945050506040919091013590565b6000602082840312156108cd57600080fd5b6108d68261082b565b9392505050565b600080604083850312156108f057600080fd5b6108f98361082b565b91506109076020840161082b565b90509250929050565b600181811c9082168061092457607f821691505b60208210810361095d577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b8082018082111561028a577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea26469706673582212207e804ca539d49155d2b6bc19268ce22f9f857027c75247d69fb0d56a089c93d464736f6c634300081a003360a060405234801561001057600080fd5b5060405161179838038061179883398101604081905261002f916101e5565b60016000556002805460ff191690556001600160a01b038316158061005b57506001600160a01b038216155b8061006d57506001600160a01b038116155b1561008b5760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b0383166080526100a3600082610134565b506100ce7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a82610134565b506100f97f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e483610134565b5061011260008051602061177883398151915282610134565b5061012b60008051602061177883398151915283610134565b50505050610228565b60008281526001602090815260408083206001600160a01b038516845290915281205460ff166101bf5760008381526001602081815260408084206001600160a01b0387168086529252808420805460ff19169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45060016101c3565b5060005b92915050565b80516001600160a01b03811681146101e057600080fd5b919050565b6000806000606084860312156101fa57600080fd5b610203846101c9565b9250610211602085016101c9565b915061021f604085016101c9565b90509250925092565b60805161151961025f6000396000818161019e01528181610500015281816105620152818161099101526109f301526115196000f3fe608060405234801561001057600080fd5b506004361061016c5760003560e01c806385f438c1116100cd578063c8a0236211610081578063d936547e11610066578063d936547e14610355578063d9caed1214610378578063e63ab1e91461038b57600080fd5b8063c8a023621461032f578063d547741f1461034257600080fd5b80639a590427116100b25780639a590427146103015780639b19251a14610314578063a217fddf1461032757600080fd5b806385f438c11461029457806391d14854146102bb57600080fd5b806336568abe11610124578063570618e111610109578063570618e11461025a5780635c975abb146102815780638456cb591461028c57600080fd5b806336568abe1461023f5780633f4ba83a1461025257600080fd5b806321fc65f21161015557806321fc65f2146101e5578063248a9ca3146101fa5780632f2ff15d1461022c57600080fd5b806301ffc9a714610171578063116191b614610199575b600080fd5b61018461017f366004611224565b6103b2565b60405190151581526020015b60405180910390f35b6101c07f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610190565b6101f86101f336600461128f565b61044b565b005b61021e61020836600461132c565b6000908152600160208190526040909120015490565b604051908152602001610190565b6101f861023a366004611345565b61064c565b6101f861024d366004611345565b610678565b6101f86106d6565b61021e7f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a81565b60025460ff16610184565b6101f861070b565b61021e7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b6101846102c9366004611345565b600091825260016020908152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b6101f861030f366004611371565b61073d565b6101f8610322366004611371565b61080b565b61021e600081565b6101f861033d36600461128f565b6108dc565b6101f8610350366004611345565b610ac3565b610184610363366004611371565b60036020526000908152604090205460ff1681565b6101f861038636600461138c565b610ae9565b61021e7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061044557507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b610453610c15565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461047d81610c58565b610485610c62565b73ffffffffffffffffffffffffffffffffffffffff861660009081526003602052604090205460ff166104e4576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61052573ffffffffffffffffffffffffffffffffffffffff87167f000000000000000000000000000000000000000000000000000000000000000086610ca1565b6040517f5131ab5900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690635131ab599061059f9089908990899089908990600401611412565b600060405180830381600087803b1580156105b957600080fd5b505af11580156105cd573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167f85b5be9cf454e05e0bddf49315178102227c312078eefa3c00294fb4d912ae4e8686866040516106329392919061146f565b60405180910390a3506106456001600055565b5050505050565b6000828152600160208190526040909120015461066881610c58565b6106728383610d2e565b50505050565b73ffffffffffffffffffffffffffffffffffffffff811633146106c7576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6106d18282610ddb565b505050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61070081610c58565b610708610e7c565b50565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61073581610c58565b610708610edb565b7f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a61076781610c58565b73ffffffffffffffffffffffffffffffffffffffff82166107b4576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216600081815260036020526040808220805460ff19169055517f51085ddf9ebdded84b76e829eb58c4078e4b5bdf97d9a94723f336039da467919190a25050565b7f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a61083581610c58565b73ffffffffffffffffffffffffffffffffffffffff8216610882576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216600081815260036020526040808220805460ff19166001179055517faab7954e9d246b167ef88aeddad35209ca2489d95a8aeb59e288d9b19fae5a549190a25050565b6108e4610c15565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461090e81610c58565b610916610c62565b73ffffffffffffffffffffffffffffffffffffffff861660009081526003602052604090205460ff16610975576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6109b673ffffffffffffffffffffffffffffffffffffffff87167f000000000000000000000000000000000000000000000000000000000000000086610ca1565b6040517fb8969bd400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063b8969bd490610a309089908990899089908990600401611412565b600060405180830381600087803b158015610a4a57600080fd5b505af1158015610a5e573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fb9d4efa96044e5f5e03e696fa9ae2ff66911cc27e8a637c3627c75bc5b2241c88686866040516106329392919061146f565b60008281526001602081905260409091200154610adf81610c58565b6106728383610ddb565b610af1610c15565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e4610b1b81610c58565b610b23610c62565b73ffffffffffffffffffffffffffffffffffffffff841660009081526003602052604090205460ff16610b82576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610ba373ffffffffffffffffffffffffffffffffffffffff85168484610ca1565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f9b1bfa7fa9ee420a16e124f794c35ac9f90472acc99140eb2f6447c714cad8eb84604051610c0291815260200190565b60405180910390a3506106d16001600055565b600260005403610c51576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b6107088133610f18565b60025460ff1615610c9f576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6040805173ffffffffffffffffffffffffffffffffffffffff8416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb000000000000000000000000000000000000000000000000000000001790526106d1908490610fa9565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff16610dd357600083815260016020818152604080842073ffffffffffffffffffffffffffffffffffffffff87168086529252808420805460ff19169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a4506001610445565b506000610445565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff1615610dd357600083815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff86168085529252808320805460ff1916905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a4506001610445565b610e8461103f565b6002805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b610ee3610c62565b6002805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258610eb13390565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16610fa5576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82166004820152602481018390526044015b60405180910390fd5b5050565b6000610fcb73ffffffffffffffffffffffffffffffffffffffff84168361107b565b90508051600014158015610ff0575080806020019051810190610fee9190611492565b155b156106d1576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84166004820152602401610f9c565b60025460ff16610c9f576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606061108983836000611090565b9392505050565b6060814710156110ce576040517fcd786059000000000000000000000000000000000000000000000000000000008152306004820152602401610f9c565b6000808573ffffffffffffffffffffffffffffffffffffffff1684866040516110f791906114b4565b60006040518083038185875af1925050503d8060008114611134576040519150601f19603f3d011682016040523d82523d6000602084013e611139565b606091505b5091509150611149868383611153565b9695505050505050565b60608261116857611163826111e2565b611089565b815115801561118c575073ffffffffffffffffffffffffffffffffffffffff84163b155b156111db576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85166004820152602401610f9c565b5080611089565b8051156111f25780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006020828403121561123657600080fd5b81357fffffffff000000000000000000000000000000000000000000000000000000008116811461108957600080fd5b803573ffffffffffffffffffffffffffffffffffffffff8116811461128a57600080fd5b919050565b6000806000806000608086880312156112a757600080fd5b6112b086611266565b94506112be60208701611266565b935060408601359250606086013567ffffffffffffffff8111156112e157600080fd5b8601601f810188136112f257600080fd5b803567ffffffffffffffff81111561130957600080fd5b88602082840101111561131b57600080fd5b959894975092955050506020019190565b60006020828403121561133e57600080fd5b5035919050565b6000806040838503121561135857600080fd5b8235915061136860208401611266565b90509250929050565b60006020828403121561138357600080fd5b61108982611266565b6000806000606084860312156113a157600080fd5b6113aa84611266565b92506113b860208501611266565b929592945050506040919091013590565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff8616815273ffffffffffffffffffffffffffffffffffffffff851660208201528360408201526080606082015260006114646080830184866113c9565b979650505050505050565b8381526040602082015260006114896040830184866113c9565b95945050505050565b6000602082840312156114a457600080fd5b8151801515811461108957600080fd5b6000825160005b818110156114d557602081860181015185830152016114bb565b50600092019182525091905056fea26469706673582212207ea3ad4ba4a6d39c3be3cec464753448900300ac3b508b4000815de5b914c53064736f6c634300081a00338619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a60c060405260001960035534801561001657600080fd5b5060405161155a38038061155a83398101604081905261003591610220565b60016000819055805460ff19169055838383836001600160a01b038416158061006557506001600160a01b038316155b8061007757506001600160a01b038216155b8061008957506001600160a01b038116155b156100a75760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b03808516608052831660a0526100c5600082610154565b506100f07f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e483610154565b5061011b7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb83610154565b506101467f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a82610154565b505050505050505050610274565b60008281526002602090815260408083206001600160a01b038516845290915281205460ff166101fa5760008381526002602090815260408083206001600160a01b03861684529091529020805460ff191660011790556101b23390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45060016101fe565b5060005b92915050565b80516001600160a01b038116811461021b57600080fd5b919050565b6000806000806080858703121561023657600080fd5b61023f85610204565b935061024d60208601610204565b925061025b60408601610204565b915061026960608601610204565b905092959194509250565b60805160a0516112826102d86000396000818161021d01528181610531015281816108240152818161097b01528181610ad00152610bf20152600081816101d1015281816104a1015281816105040152818161079401526107f701526112826000f3fe608060405234801561001057600080fd5b50600436106101775760003560e01c80635e3e9fef116100d857806391d148541161008c578063d547741f11610066578063d547741f14610386578063d5abeb0114610399578063e63ab1e9146103a257600080fd5b806391d1485414610311578063a217fddf14610357578063a783c7891461035f57600080fd5b8063743e0c9b116100bd578063743e0c9b146102cf5780638456cb59146102e257806385f438c1146102ea57600080fd5b80635e3e9fef146102a95780636f8b44b0146102bc57600080fd5b8063248a9ca31161012f57806336568abe1161011457806336568abe146102835780633f4ba83a146102965780635c975abb1461029e57600080fd5b8063248a9ca31461023f5780632f2ff15d1461027057600080fd5b8063106e629011610160578063106e6290146101b9578063116191b6146101cc57806321e093b11461021857600080fd5b806301ffc9a71461017c57806302d5c899146101a4575b600080fd5b61018f61018a366004610fb4565b6103c9565b60405190151581526020015b60405180910390f35b6101b76101b2366004611026565b610462565b005b6101b76101c73660046110b8565b6105f7565b6101f37f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161019b565b6101f37f000000000000000000000000000000000000000000000000000000000000000081565b61026261024d3660046110eb565b60009081526002602052604090206001015490565b60405190815260200161019b565b6101b761027e366004611104565b61069c565b6101b7610291366004611104565b6106c7565b6101b7610720565b60015460ff1661018f565b6101b76102b7366004611026565b610755565b6101b76102ca3660046110eb565b6108d0565b6101b76102dd3660046110eb565b61093e565b6101b76109e8565b6102627f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b61018f61031f366004611104565b600091825260026020908152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b610262600081565b6102627f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb81565b6101b7610394366004611104565b610a1a565b61026260035481565b6102627f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061045c57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b61046a610a3f565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461049481610a82565b61049c610a8c565b6104c77f00000000000000000000000000000000000000000000000000000000000000008684610acb565b6040517fb8969bd400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063b8969bd490610561907f0000000000000000000000000000000000000000000000000000000000000000908a908a908a908a90600401611179565b600060405180830381600087803b15801561057b57600080fd5b505af115801561058f573d6000803e3d6000fd5b505050508573ffffffffffffffffffffffffffffffffffffffff167fba96f26bdda53eb8c8ba39045dfb4ff39753fbc7a6edcf250a88e75e78d102fe8686866040516105dd939291906111d6565b60405180910390a2506105f06001600055565b5050505050565b6105ff610a3f565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461062981610a82565b610631610a8c565b61063c848484610acb565b8373ffffffffffffffffffffffffffffffffffffffff167f884edad9ce6fa2440d8a54cc123490eb96d2768479d49ff9c7366125a94243648460405161068491815260200190565b60405180910390a2506106976001600055565b505050565b6000828152600260205260409020600101546106b781610a82565b6106c18383610c53565b50505050565b73ffffffffffffffffffffffffffffffffffffffff81163314610716576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6106978282610d53565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61074a81610a82565b610752610e12565b50565b61075d610a3f565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461078781610a82565b61078f610a8c565b6107ba7f00000000000000000000000000000000000000000000000000000000000000008684610acb565b6040517f5131ab5900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690635131ab5990610854907f0000000000000000000000000000000000000000000000000000000000000000908a908a908a908a90600401611179565b600060405180830381600087803b15801561086e57600080fd5b505af1158015610882573d6000803e3d6000fd5b505050508573ffffffffffffffffffffffffffffffffffffffff167f7772f56296d3a5202974a45c61c9188d844ab4d6eeb18c851e4b8d5384ca6ced8686866040516105dd939291906111d6565b7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb6108fa81610a82565b610902610a8c565b60038290556040518281527f7810bd47de260c3e9ee10061cf438099dd12256c79485f12f94dbccc981e806c9060200160405180910390a15050565b610946610a8c565b6040517f79cc6790000000000000000000000000000000000000000000000000000000008152336004820152602481018290527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16906379cc679090604401600060405180830381600087803b1580156109d457600080fd5b505af11580156105f0573d6000803e3d6000fd5b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610a1281610a82565b610752610e8f565b600082815260026020526040902060010154610a3581610a82565b6106c18383610d53565b600260005403610a7b576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b6107528133610ee8565b60015460ff1615610ac9576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6003547f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b39573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b5d91906111f9565b610b679084611212565b1115610b9f576040517fc30436e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f1e458bee00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff848116600483015260248201849052604482018390527f00000000000000000000000000000000000000000000000000000000000000001690631e458bee90606401600060405180830381600087803b158015610c3657600080fd5b505af1158015610c4a573d6000803e3d6000fd5b50505050505050565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff16610d4b57600083815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff86168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055610ce93390565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a450600161045c565b50600061045c565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff1615610d4b57600083815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8616808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a450600161045c565b610e1a610f78565b600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b610e97610a8c565b600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016811790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25833610e65565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16610f74576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff821660048201526024810183905260440160405180910390fd5b5050565b60015460ff16610ac9576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060208284031215610fc657600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610ff657600080fd5b9392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461102157600080fd5b919050565b60008060008060006080868803121561103e57600080fd5b61104786610ffd565b945060208601359350604086013567ffffffffffffffff81111561106a57600080fd5b8601601f8101881361107b57600080fd5b803567ffffffffffffffff81111561109257600080fd5b8860208284010111156110a457600080fd5b959894975060200195606001359392505050565b6000806000606084860312156110cd57600080fd5b6110d684610ffd565b95602085013595506040909401359392505050565b6000602082840312156110fd57600080fd5b5035919050565b6000806040838503121561111757600080fd5b8235915061112760208401610ffd565b90509250929050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff8616815273ffffffffffffffffffffffffffffffffffffffff851660208201528360408201526080606082015260006111cb608083018486611130565b979650505050505050565b8381526040602082015260006111f0604083018486611130565b95945050505050565b60006020828403121561120b57600080fd5b5051919050565b8082018082111561045c577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea2646970667358221220de5fa55e0ca79ea2f08903481d01ea00bbbf346b9cfba44e12a2dd6f3a6f2e8a64736f6c634300081a00336080604052348015600f57600080fd5b506001600055610d3a806100246000396000f3fe6080604052600436106100635760003560e01c8063c513169111610040578063c5131691146100c1578063e04d4f97146100e1578063f05b6abf146100f457005b8063357fc5a21461006c5780636ed701691461008c5780638fcaa0b5146100a157005b3661006a57005b005b34801561007857600080fd5b5061006a6100873660046106c0565b610114565b34801561009857600080fd5b5061006a6101aa565b3480156100ad57600080fd5b5061006a6100bc3660046106fc565b6101df565b3480156100cd57600080fd5b5061006a6100dc3660046106c0565b61021e565b61006a6100ef366004610895565b6102f9565b34801561010057600080fd5b5061006a61010f366004610981565b61033d565b61011c610372565b61013e73ffffffffffffffffffffffffffffffffffffffff83163383866103b5565b604080513381526020810185905273ffffffffffffffffffffffffffffffffffffffff848116828401528316606082015290517f2b58128f24a9f59127cc5b5430d70542b22220f2d9adaa86e442b816ab98af609181900360800190a16101a56001600055565b505050565b6040513381527fbcaadb46b82a48af60b608f58959ae6b8310d1b0a0d094c2e9ec3208ed39f2a09060200160405180910390a1565b7f0d3f65f00e631663aa85c96330b5c7a83bb29af3630c0063776f985edc3037aa33838360405161021293929190610a6b565b60405180910390a15050565b610226610372565b6000610233600285610ad5565b90508060000361026f576040517f1f2a200500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61029173ffffffffffffffffffffffffffffffffffffffff84163384846103b5565b604080513381526020810183905273ffffffffffffffffffffffffffffffffffffffff858116828401528416606082015290517f2b58128f24a9f59127cc5b5430d70542b22220f2d9adaa86e442b816ab98af609181900360800190a1506101a56001600055565b7f1f1ff1f5fb41346850b2f5c04e6c767e2f1c8a525c5c0c5cdb60cdf3ca5f62fa3334858585604051610330959493929190610b7e565b60405180910390a1505050565b7f74a53cd528a921fca7dbdee62f86819051d3cc98f214951f4238e8843f20b146338484846040516103309493929190610c08565b6002600054036103ae576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b6040805173ffffffffffffffffffffffffffffffffffffffff85811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd0000000000000000000000000000000000000000000000000000000017905261044a908590610450565b50505050565b600061047273ffffffffffffffffffffffffffffffffffffffff8416836104eb565b905080516000141580156104975750808060200190518101906104959190610ccb565b155b156101a5576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff841660048201526024015b60405180910390fd5b60606104f983836000610500565b9392505050565b60608147101561053e576040517fcd7860590000000000000000000000000000000000000000000000000000000081523060048201526024016104e2565b6000808573ffffffffffffffffffffffffffffffffffffffff1684866040516105679190610ce8565b60006040518083038185875af1925050503d80600081146105a4576040519150601f19603f3d011682016040523d82523d6000602084013e6105a9565b606091505b50915091506105b98683836105c3565b9695505050505050565b6060826105d8576105d382610652565b6104f9565b81511580156105fc575073ffffffffffffffffffffffffffffffffffffffff84163b155b1561064b576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff851660048201526024016104e2565b50806104f9565b8051156106625780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50565b803573ffffffffffffffffffffffffffffffffffffffff811681146106bb57600080fd5b919050565b6000806000606084860312156106d557600080fd5b833592506106e560208501610697565b91506106f360408501610697565b90509250925092565b6000806020838503121561070f57600080fd5b823567ffffffffffffffff81111561072657600080fd5b8301601f8101851361073757600080fd5b803567ffffffffffffffff81111561074e57600080fd5b85602082840101111561076057600080fd5b6020919091019590945092505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156107e6576107e6610770565b604052919050565b600082601f8301126107ff57600080fd5b813567ffffffffffffffff81111561081957610819610770565b61084a60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8401160161079f565b81815284602083860101111561085f57600080fd5b816020850160208301376000918101602001919091529392505050565b801515811461069457600080fd5b80356106bb8161087c565b6000806000606084860312156108aa57600080fd5b833567ffffffffffffffff8111156108c157600080fd5b6108cd868287016107ee565b9350506020840135915060408401356108e58161087c565b809150509250925092565b600067ffffffffffffffff82111561090a5761090a610770565b5060051b60200190565b600082601f83011261092557600080fd5b8135610938610933826108f0565b61079f565b8082825260208201915060208360051b86010192508583111561095a57600080fd5b602085015b8381101561097757803583526020928301920161095f565b5095945050505050565b60008060006060848603121561099657600080fd5b833567ffffffffffffffff8111156109ad57600080fd5b8401601f810186136109be57600080fd5b80356109cc610933826108f0565b8082825260208201915060208360051b8501019250888311156109ee57600080fd5b602084015b83811015610a3057803567ffffffffffffffff811115610a1257600080fd5b610a218b6020838901016107ee565b845250602092830192016109f3565b509550505050602084013567ffffffffffffffff811115610a5057600080fd5b610a5c86828701610914565b9250506106f36040850161088a565b73ffffffffffffffffffffffffffffffffffffffff8416815260406020820152816040820152818360608301376000818301606090810191909152601f9092017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016010192915050565b600082610b0b577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60005b83811015610b2b578181015183820152602001610b13565b50506000910152565b60008151808452610b4c816020860160208601610b10565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b73ffffffffffffffffffffffffffffffffffffffff8616815284602082015260a060408201526000610bb360a0830186610b34565b6060830194909452509015156080909101529392505050565b600081518084526020840193506020830160005b82811015610bfe578151865260209586019590910190600101610be0565b5093949350505050565b60006080820173ffffffffffffffffffffffffffffffffffffffff871683526080602084015280865180835260a08501915060a08160051b86010192506020880160005b82811015610c9b577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60878603018452610c86858351610b34565b94506020938401939190910190600101610c4c565b505050508281036040840152610cb18186610bcc565b915050610cc2606083018415159052565b95945050505050565b600060208284031215610cdd57600080fd5b81516104f98161087c565b60008251610cfa818460208701610b10565b919091019291505056fea2646970667358221220556072e1abafc3c4063b8cce832228b4f309b93726aaa6a6dfab20cb880c6d1864736f6c634300081a00336080604052348015600f57600080fd5b5060405161080c38038061080c833981016040819052602c916050565b600080546001600160a01b0319166001600160a01b0392909216919091179055607e565b600060208284031215606157600080fd5b81516001600160a01b0381168114607757600080fd5b9392505050565b61077f8061008d6000396000f3fe608060405234801561001057600080fd5b50600436106100415760003560e01c80630abd890514610046578063116191b61461005b578063865b36f6146100a4575b600080fd5b6100596100543660046104c4565b6100b7565b005b60005461007b9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b6100596100b236600461057f565b6102af565b60008383836040516024016100ce93929190610674565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe04d4f970000000000000000000000000000000000000000000000000000000017905260005490517f095ea7b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff91821660048201526024810189905291925086169063095ea7b3906044016020604051808303816000875af11580156101be573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101e2919061069e565b610218576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000546040517f7993c1e000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff90911690637993c1e090610274908a908a908a9087906004016106c2565b600060405180830381600087803b15801561028e57600080fd5b505af11580156102a2573d6000803e3d6000fd5b5050505050505050505050565b60008383836040516024016102c693929190610674565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe04d4f970000000000000000000000000000000000000000000000000000000017905260005490517f5d40e17800000000000000000000000000000000000000000000000000000000815291925073ffffffffffffffffffffffffffffffffffffffff1690635d40e1789061039690899089908690600401610714565b600060405180830381600087803b1580156103b057600080fd5b505af11580156103c4573d6000803e3d6000fd5b50505050505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600082601f83011261041057600080fd5b81356020830160008067ffffffffffffffff841115610431576104316103d0565b506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f85018116603f0116810181811067ffffffffffffffff8211171561047e5761047e6103d0565b60405283815290508082840187101561049657600080fd5b838360208301376000602085830101528094505050505092915050565b80151581146104c157600080fd5b50565b60008060008060008060c087890312156104dd57600080fd5b863567ffffffffffffffff8111156104f457600080fd5b61050089828a016103ff565b96505060208701359450604087013573ffffffffffffffffffffffffffffffffffffffff8116811461053157600080fd5b9350606087013567ffffffffffffffff81111561054d57600080fd5b61055989828a016103ff565b9350506080870135915060a0870135610571816104b3565b809150509295509295509295565b600080600080600060a0868803121561059757600080fd5b853567ffffffffffffffff8111156105ae57600080fd5b6105ba888289016103ff565b95505060208601359350604086013567ffffffffffffffff8111156105de57600080fd5b6105ea888289016103ff565b935050606086013591506080860135610602816104b3565b809150509295509295909350565b6000815180845260005b818110156106365760208185018101518683018201520161061a565b5060006020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b6060815260006106876060830186610610565b602083019490945250901515604090910152919050565b6000602082840312156106b057600080fd5b81516106bb816104b3565b9392505050565b6080815260006106d56080830187610610565b85602084015273ffffffffffffffffffffffffffffffffffffffff8516604084015282810360608401526107098185610610565b979650505050505050565b6060815260006107276060830186610610565b846020840152828103604084015261073f8185610610565b969550505050505056fea2646970667358221220913e9e4f584646fcff086caec1531d2f19fc055665166453bbf086af95b2e48464736f6c634300081a0033608060405234801561001057600080fd5b50604051610b3f380380610b3f83398101604081905261002f916100b9565b600380546001600160a01b038086166001600160a01b0319928316179092556004805485841690831617905560058054928416929091169190911790556040517f80699e81136d69cb8367ad52a994e25c722a86da654b561d0c14b61a777e7ac590600090a15050506100fc565b80516001600160a01b03811681146100b457600080fd5b919050565b6000806000606084860312156100ce57600080fd5b6100d78461009d565b92506100e56020850161009d565b91506100f36040850161009d565b90509250925092565b610a348061010b6000396000f3fe608060405234801561001057600080fd5b50600436106100c95760003560e01c806397770dff11610081578063d7fd7afb1161005b578063d7fd7afb146101f2578063d936a01214610220578063ee2815ba1461024057600080fd5b806397770dff146101b9578063a7cb0507146101cc578063c63585cc146101df57600080fd5b8063513a9c05116100b2578063513a9c0514610143578063569541b914610179578063842da36d1461019957600080fd5b80630be15547146100ce5780633c669d551461012e575b600080fd5b6101046100dc36600461071e565b60016020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b61014161013c366004610760565b610253565b005b61010461015136600461071e565b60026020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b6003546101049073ffffffffffffffffffffffffffffffffffffffff1681565b6005546101049073ffffffffffffffffffffffffffffffffffffffff1681565b6101416101c73660046107fd565b6103a0565b6101416101da36600461081f565b610419565b6101046101ed366004610841565b610467565b61021261020036600461071e565b60006020819052908152604090205481565b604051908152602001610125565b6004546101049073ffffffffffffffffffffffffffffffffffffffff1681565b61014161024e366004610884565b61059c565b604080516080810182526000606082019081528152336020820152468183015290517fa9059cbb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff87811660048301526024820186905286169063a9059cbb906044016020604051808303816000875af11580156102e7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061030b91906108b0565b506040517fde43156e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff87169063de43156e90610366908490899089908990899060040161091b565b600060405180830381600087803b15801561038057600080fd5b505af1158015610394573d6000803e3d6000fd5b50505050505050505050565b600380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527fdba79d534382d1a8ae108e4c8ecb27c6ae42ab8b91d44eedf88bd329f3868d5e9060200160405180910390a150565b6000828152602081815260409182902083905581518481529081018390527f49f492222906ac486c3c1401fa545626df1f0c0e5a77a05597ea2ed66af9850d91015b60405180910390a15050565b60008060006104768585610620565b6040517fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606084811b8216602084015283901b166034820152919350915086906048016040516020818303038152906040528051906020012060405160200161055c9291907fff00000000000000000000000000000000000000000000000000000000000000815260609290921b7fffffffffffffffffffffffffffffffffffffffff00000000000000000000000016600183015260158201527f96e8ac4277198ff8b6f785478aa9a39f403cb768dd02cbee326c3e7da348845f603582015260550190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291905280516020909101209695505050505050565b60008281526001602090815260409182902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff85169081179091558251858152918201527fd1b36d30f6248e97c473b4d1348ca164a4ef6759022f54a58ec200326c39c45d910161045b565b6000808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603610688576040517fcb1e7cfe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16106106c25782846106c5565b83835b909250905073ffffffffffffffffffffffffffffffffffffffff8216610717576040517f78b507da00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b9250929050565b60006020828403121561073057600080fd5b5035919050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461075b57600080fd5b919050565b60008060008060006080868803121561077857600080fd5b61078186610737565b945061078f60208701610737565b935060408601359250606086013567ffffffffffffffff8111156107b257600080fd5b8601601f810188136107c357600080fd5b803567ffffffffffffffff8111156107da57600080fd5b8860208284010111156107ec57600080fd5b959894975092955050506020019190565b60006020828403121561080f57600080fd5b61081882610737565b9392505050565b6000806040838503121561083257600080fd5b50508035926020909101359150565b60008060006060848603121561085657600080fd5b61085f84610737565b925061086d60208501610737565b915061087b60408501610737565b90509250925092565b6000806040838503121561089757600080fd5b823591506108a760208401610737565b90509250929050565b6000602082840312156108c257600080fd5b8151801515811461081857600080fd5b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b60808152600086516060608084015280518060e085015260005b81811015610953576020818401810151610100878401015201610935565b5060008482016101000152602089015173ffffffffffffffffffffffffffffffffffffffff811660a0860152601f9091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168401915050604088015160c084015273ffffffffffffffffffffffffffffffffffffffff871660208401528560408401526101008382030160608401526109f2610100820185876108d2565b9897505050505050505056fea26469706673582212206b99774936066d66e673847cda232c1a8b90636b82cb2d9c47172da97ac4570a64736f6c634300081a003360e060405234801561001057600080fd5b50604051611bb9380380611bb983398101604081905261002f9161020e565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461006357604051632b2add3d60e01b815260040160405180910390fd5b6001600160a01b038216158061008057506001600160a01b038116155b1561009e5760405163d92e233d60e01b815260040160405180910390fd5b60066100aa8982610360565b5060076100b78882610360565b5060ff861660c05260808590528360028111156100d6576100d661041e565b60a08160028111156100ea576100ea61041e565b905250600192909255600080546001600160a01b039283166001600160a01b03199182161790915560088054929093169116179055506104349350505050565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261015157600080fd5b81516001600160401b0381111561016a5761016a61012a565b604051601f8201601f19908116603f011681016001600160401b03811182821017156101985761019861012a565b6040528181528382016020018510156101b057600080fd5b60005b828110156101cf576020818601810151838301820152016101b3565b506000918101602001919091529392505050565b8051600381106101f257600080fd5b919050565b80516001600160a01b03811681146101f257600080fd5b600080600080600080600080610100898b03121561022b57600080fd5b88516001600160401b0381111561024157600080fd5b61024d8b828c01610140565b60208b015190995090506001600160401b0381111561026b57600080fd5b6102778b828c01610140565b975050604089015160ff8116811461028e57600080fd5b60608a015190965094506102a460808a016101e3565b60a08a015190945092506102ba60c08a016101f7565b91506102c860e08a016101f7565b90509295985092959890939650565b600181811c908216806102eb57607f821691505b60208210810361030b57634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111561035b57806000526020600020601f840160051c810160208510156103385750805b601f840160051c820191505b818110156103585760008155600101610344565b50505b505050565b81516001600160401b038111156103795761037961012a565b61038d8161038784546102d7565b84610311565b6020601f8211600181146103c157600083156103a95750848201515b600019600385901b1c1916600184901b178455610358565b600084815260208120601f198516915b828110156103f157878501518255602094850194600190920191016103d1565b508482101561040f5786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b634e487b7160e01b600052602160045260246000fd5b60805160a05160c05161174861047160003960006102170152600061033a0152600081816102eb01528181610ad70152610bdd01526117486000f3fe608060405234801561001057600080fd5b50600436106101985760003560e01c80638b851b95116100e3578063ccc775991161008c578063eddeb12311610066578063eddeb12314610431578063f2441b3214610444578063f687d12a1461046457600080fd5b8063ccc77599146103a4578063d9eeebed146103b7578063dd62ed3e146103eb57600080fd5b8063a9059cbb116100bd578063a9059cbb14610369578063c70126261461037c578063c835d7cc1461038f57600080fd5b80638b851b951461030d57806395d89b411461032d578063a3413d031461033557600080fd5b80633ce4a5bc116101455780634d8943bb1161011f5780634d8943bb146102a757806370a08231146102b057806385e1f4d0146102e657600080fd5b80633ce4a5bc1461024157806342966c681461028157806347e7ef241461029457600080fd5b806318160ddd1161017657806318160ddd146101f557806323b872dd146101fd578063313ce5671461021057600080fd5b806306fdde031461019d578063091d2788146101bb578063095ea7b3146101d2575b600080fd5b6101a5610477565b6040516101b29190611327565b60405180910390f35b6101c460015481565b6040519081526020016101b2565b6101e56101e0366004611366565b610509565b60405190151581526020016101b2565b6005546101c4565b6101e561020b366004611392565b610520565b60405160ff7f00000000000000000000000000000000000000000000000000000000000000001681526020016101b2565b61025c73735b14bb79463307aacbed86daf3322b1e6226ab81565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101b2565b6101e561028f3660046113d3565b6105b7565b6101e56102a2366004611366565b6105cb565b6101c460025481565b6101c46102be3660046113ec565b73ffffffffffffffffffffffffffffffffffffffff1660009081526003602052604090205490565b6101c47f000000000000000000000000000000000000000000000000000000000000000081565b60085461025c9073ffffffffffffffffffffffffffffffffffffffff1681565b6101a561071f565b61035c7f000000000000000000000000000000000000000000000000000000000000000081565b6040516101b29190611409565b6101e5610377366004611366565b61072e565b6101e561038a366004611479565b61073b565b6103a261039d3660046113ec565b61088a565b005b6103a26103b23660046113ec565b61099e565b6103bf610aab565b6040805173ffffffffffffffffffffffffffffffffffffffff90931683526020830191909152016101b2565b6101c46103f9366004611571565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260046020908152604080832093909416825291909152205490565b6103a261043f3660046113d3565b610cc9565b60005461025c9073ffffffffffffffffffffffffffffffffffffffff1681565b6103a26104723660046113d3565b610d4b565b606060068054610486906115aa565b80601f01602080910402602001604051908101604052809291908181526020018280546104b2906115aa565b80156104ff5780601f106104d4576101008083540402835291602001916104ff565b820191906000526020600020905b8154815290600101906020018083116104e257829003601f168201915b5050505050905090565b6000610516338484610dcd565b5060015b92915050565b600061052d848484610ed6565b73ffffffffffffffffffffffffffffffffffffffff8416600090815260046020908152604080832033845290915290205482811015610598576040517f10bad14700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6105ac85336105a7868561162c565b610dcd565b506001949350505050565b60006105c33383611091565b506001919050565b60003373735b14bb79463307aacbed86daf3322b1e6226ab14801590610609575060005473ffffffffffffffffffffffffffffffffffffffff163314155b801561062d575060085473ffffffffffffffffffffffffffffffffffffffff163314155b15610664576040517fddb5de5e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61066e83836111d3565b6040517f735b14bb79463307aacbed86daf3322b1e6226ab000000000000000000000000602082015273ffffffffffffffffffffffffffffffffffffffff8416907f67fc7bdaed5b0ec550d8706b87d60568ab70c6b781263c70101d54cd1564aab390603401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529082905261070e91869061163f565b60405180910390a250600192915050565b606060078054610486906115aa565b6000610516338484610ed6565b6000806000610748610aab565b6040517f23b872dd00000000000000000000000000000000000000000000000000000000815233600482015273735b14bb79463307aacbed86daf3322b1e6226ab602482015260448101829052919350915073ffffffffffffffffffffffffffffffffffffffff8316906323b872dd906064016020604051808303816000875af11580156107da573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107fe9190611661565b610834576040517f0a7cd6d600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61083e3385611091565b60025460405133917f9ffbffc04a397460ee1dbe8c9503e098090567d6b7f4b3c02a8617d800b6d9559161087791899189918791611683565b60405180910390a2506001949350505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab146108d7576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116610924576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527fd55614e962c5fd6ece71614f6348d702468a997a394dd5e5c1677950226d97ae906020015b60405180910390a150565b3373735b14bb79463307aacbed86daf3322b1e6226ab146109eb576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116610a38576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600880547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527f88815d964e380677e86d817e7d65dea59cb7b4c3b5b7a0c8ec7ea4a74f90a38790602001610993565b600080546040517f0be155470000000000000000000000000000000000000000000000000000000081527f000000000000000000000000000000000000000000000000000000000000000060048201528291829173ffffffffffffffffffffffffffffffffffffffff90911690630be1554790602401602060405180830381865afa158015610b3e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b6291906116b2565b905073ffffffffffffffffffffffffffffffffffffffff8116610bb1576040517f78fff39600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080546040517fd7fd7afb0000000000000000000000000000000000000000000000000000000081527f0000000000000000000000000000000000000000000000000000000000000000600482015273ffffffffffffffffffffffffffffffffffffffff9091169063d7fd7afb90602401602060405180830381865afa158015610c40573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c6491906116cf565b905080600003610ca0576040517fe661aed000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060025460015483610cb391906116e8565b610cbd91906116ff565b92959294509192505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610d16576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60028190556040518181527fef13af88e424b5d15f49c77758542c1938b08b8b95b91ed0751f98ba99000d8f90602001610993565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610d98576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018190556040518181527fff5788270f43bfc1ca41c503606d2594aa3023a1a7547de403a3e2f146a4a80a90602001610993565b73ffffffffffffffffffffffffffffffffffffffff8316610e1a576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216610e67576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff83811660008181526004602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8316610f23576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216610f70576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff831660009081526003602052604090205481811015610fd0576040517ffe382aa700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610fda828261162c565b73ffffffffffffffffffffffffffffffffffffffff808616600090815260036020526040808220939093559085168152908120805484929061101d9084906116ff565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161108391815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff82166110de576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff82166000908152600360205260409020548181101561113e576040517ffe382aa700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611148828261162c565b73ffffffffffffffffffffffffffffffffffffffff84166000908152600360205260408120919091556005805484929061118390849061162c565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90602001610ec9565b73ffffffffffffffffffffffffffffffffffffffff8216611220576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b806005600082825461123291906116ff565b909155505073ffffffffffffffffffffffffffffffffffffffff82166000908152600360205260408120805483929061126c9084906116ff565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6000815180845260005b818110156112e9576020818501810151868301820152016112cd565b5060006020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b60208152600061133a60208301846112c3565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff8116811461136357600080fd5b50565b6000806040838503121561137957600080fd5b823561138481611341565b946020939093013593505050565b6000806000606084860312156113a757600080fd5b83356113b281611341565b925060208401356113c281611341565b929592945050506040919091013590565b6000602082840312156113e557600080fd5b5035919050565b6000602082840312156113fe57600080fd5b813561133a81611341565b6020810160038310611444577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000806040838503121561148c57600080fd5b823567ffffffffffffffff8111156114a357600080fd5b8301601f810185136114b457600080fd5b803567ffffffffffffffff8111156114ce576114ce61144a565b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8501160116810181811067ffffffffffffffff8211171561153a5761153a61144a565b60405281815282820160200187101561155257600080fd5b8160208401602083013760006020928201830152969401359450505050565b6000806040838503121561158457600080fd5b823561158f81611341565b9150602083013561159f81611341565b809150509250929050565b600181811c908216806115be57607f821691505b6020821081036115f7577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8181038181111561051a5761051a6115fd565b60408152600061165260408301856112c3565b90508260208301529392505050565b60006020828403121561167357600080fd5b8151801515811461133a57600080fd5b60808152600061169660808301876112c3565b6020830195909552506040810192909252606090910152919050565b6000602082840312156116c457600080fd5b815161133a81611341565b6000602082840312156116e157600080fd5b5051919050565b808202811582820484141761051a5761051a6115fd565b8082018082111561051a5761051a6115fd56fea26469706673582212204013e39523742118b3f2227e145ee7e48176ba6aebead33c596dca2acb59a74c64736f6c634300081a0033a264697066735822122003782781d47b4f76226b530ac45c2cc9213ff1f5bff0016420b443dfc00db0a964736f6c634300081a0033", } // GatewayEVMZEVMTestABI is the input ABI used to generate the binding from. diff --git a/v2/pkg/gatewayzevm.sol/gatewayzevm.go b/v2/pkg/gatewayzevm.sol/gatewayzevm.go index bb34544d..2dfabce8 100644 --- a/v2/pkg/gatewayzevm.sol/gatewayzevm.go +++ b/v2/pkg/gatewayzevm.sol/gatewayzevm.go @@ -45,8 +45,8 @@ type ZContext struct { // GatewayZEVMMetaData contains all meta data concerning the GatewayZEVM contract. var GatewayZEVMMetaData = &bind.MetaData{ - ABI: "[{\"type\":\"constructor\",\"inputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"receive\",\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"DEFAULT_ADMIN_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"FUNGIBLE_MODULE_ADDRESS\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"PAUSER_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"UPGRADE_INTERFACE_VERSION\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"call\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"chainId\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"message\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"deposit\",\"inputs\":[{\"name\":\"zrc20\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"depositAndCall\",\"inputs\":[{\"name\":\"context\",\"type\":\"tuple\",\"internalType\":\"structzContext\",\"components\":[{\"name\":\"origin\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"sender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"chainID\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"message\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"depositAndCall\",\"inputs\":[{\"name\":\"context\",\"type\":\"tuple\",\"internalType\":\"structzContext\",\"components\":[{\"name\":\"origin\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"sender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"chainID\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"zrc20\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"message\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"depositAndRevert\",\"inputs\":[{\"name\":\"context\",\"type\":\"tuple\",\"internalType\":\"structrevertContext\",\"components\":[{\"name\":\"origin\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"sender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"chainID\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"zrc20\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"message\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"execute\",\"inputs\":[{\"name\":\"context\",\"type\":\"tuple\",\"internalType\":\"structzContext\",\"components\":[{\"name\":\"origin\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"sender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"chainID\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"zrc20\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"message\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"executeRevert\",\"inputs\":[{\"name\":\"context\",\"type\":\"tuple\",\"internalType\":\"structrevertContext\",\"components\":[{\"name\":\"origin\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"sender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"chainID\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"zrc20\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"message\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"getRoleAdmin\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"grantRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"hasRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"initialize\",\"inputs\":[{\"name\":\"zetaToken_\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"admin_\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"pause\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"paused\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"proxiableUUID\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"renounceRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"callerConfirmation\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"revokeRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"supportsInterface\",\"inputs\":[{\"name\":\"interfaceId\",\"type\":\"bytes4\",\"internalType\":\"bytes4\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"unpause\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"upgradeToAndCall\",\"inputs\":[{\"name\":\"newImplementation\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"withdraw\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"zrc20\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"withdraw\",\"inputs\":[{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"chainId\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"withdrawAndCall\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"zrc20\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"message\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"withdrawAndCall\",\"inputs\":[{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"chainId\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"message\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"zetaToken\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"event\",\"name\":\"Call\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"chainId\",\"type\":\"uint256\",\"indexed\":true,\"internalType\":\"uint256\"},{\"name\":\"receiver\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"message\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Initialized\",\"inputs\":[{\"name\":\"version\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Paused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleAdminChanged\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"previousAdminRole\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"newAdminRole\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleGranted\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleRevoked\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Unpaused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Upgraded\",\"inputs\":[{\"name\":\"implementation\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Withdrawal\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"chainId\",\"type\":\"uint256\",\"indexed\":true,\"internalType\":\"uint256\"},{\"name\":\"receiver\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"zrc20\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"gasfee\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"protocolFlatFee\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"message\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"AccessControlBadConfirmation\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"AccessControlUnauthorizedAccount\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"neededRole\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"type\":\"error\",\"name\":\"AddressEmptyCode\",\"inputs\":[{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"CallerIsNotFungibleModule\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ERC1967InvalidImplementation\",\"inputs\":[{\"name\":\"implementation\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"ERC1967NonPayable\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"EnforcedPause\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ExpectedPause\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"FailedInnerCall\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"FailedZetaSent\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"GasFeeTransferFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientZRC20Amount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientZetaAmount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidInitialization\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidTarget\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NotInitializing\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OnlyWZETAOrFungible\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ReentrancyGuardReentrantCall\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"UUPSUnauthorizedCallContext\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"UUPSUnsupportedProxiableUUID\",\"inputs\":[{\"name\":\"slot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"type\":\"error\",\"name\":\"WithdrawalFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZRC20BurnFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZRC20DepositFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZRC20TransferFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZeroAddress\",\"inputs\":[]}]", - Bin: "0x60a06040523060805234801561001457600080fd5b5061001d610022565b6100d4565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100725760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146100d15780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b6080516132346100fd600039600081816123650152818161238e015261254601526132346000f3fe6080604052600436106101bb5760003560e01c80635af65967116100ec578063a217fddf1161008a578063c39aca3711610064578063c39aca3714610600578063d547741f14610620578063e63ab1e914610640578063f45346dc1461067457600080fd5b8063a217fddf14610575578063ad3cb1cc1461058a578063bcf7f32b146105e057600080fd5b80637993c1e0116100c65780637993c1e0146104bb57806380bd3d03146104db5780638456cb59146104fb57806391d148541461051057600080fd5b80635af65967146104445780635c975abb146104645780635d40e1781461049b57600080fd5b806336568abe11610159578063441a3e7011610133578063441a3e70146103dc578063485cc955146103fc5780634f1ef2861461041c57806352d1902d1461042f57600080fd5b806336568abe1461037f5780633ce4a5bc1461039f5780633f4ba83a146103c757600080fd5b806321e093b11161019557806321e093b1146102aa578063248a9ca3146102e25780632f2ff15d1461033f578063309f50041461035f57600080fd5b806301ffc9a714610235578063135390f91461026a57806321501a951461028a57600080fd5b36610230576101c8610694565b6000546001600160a01b031633148015906101f757503373735b14bb79463307aacbed86daf3322b1e6226ab14155b1561022e576040517f229930b200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b005b600080fd5b34801561024157600080fd5b50610255610250366004612a24565b6106f2565b60405190151581526020015b60405180910390f35b34801561027657600080fd5b5061022e610285366004612b3a565b61078b565b34801561029657600080fd5b5061022e6102a5366004612bf6565b6108f9565b3480156102b657600080fd5b506000546102ca906001600160a01b031681565b6040516001600160a01b039091168152602001610261565b3480156102ee57600080fd5b506103316102fd366004612c82565b60009081527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052604090206001015490565b604051908152602001610261565b34801561034b57600080fd5b5061022e61035a366004612c9b565b610ac6565b34801561036b57600080fd5b5061022e61037a366004612ccb565b610b10565b34801561038b57600080fd5b5061022e61039a366004612c9b565b610c7a565b3480156103ab57600080fd5b506102ca73735b14bb79463307aacbed86daf3322b1e6226ab81565b3480156103d357600080fd5b5061022e610cc6565b3480156103e857600080fd5b5061022e6103f7366004612d69565b610cfb565b34801561040857600080fd5b5061022e610417366004612d8b565b610e18565b61022e61042a366004612db9565b61106e565b34801561043b57600080fd5b50610331611089565b34801561045057600080fd5b5061022e61045f366004612ccb565b6110b8565b34801561047057600080fd5b507fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff16610255565b3480156104a757600080fd5b5061022e6104b6366004612e09565b6112c7565b3480156104c757600080fd5b5061022e6104d6366004612e7e565b611381565b3480156104e757600080fd5b5061022e6104f6366004612eb9565b6114f5565b34801561050757600080fd5b5061022e6115e1565b34801561051c57600080fd5b5061025561052b366004612c9b565b60009182527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408084206001600160a01b0393909316845291905290205460ff1690565b34801561058157600080fd5b50610331600081565b34801561059657600080fd5b506105d36040518060400160405280600581526020017f352e302e3000000000000000000000000000000000000000000000000000000081525081565b6040516102619190612f44565b3480156105ec57600080fd5b5061022e6105fb366004612ccb565b611613565b34801561060c57600080fd5b5061022e61061b366004612ccb565b611743565b34801561062c57600080fd5b5061022e61063b366004612c9b565b611952565b34801561064c57600080fd5b506103317f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b34801561068057600080fd5b5061022e61068f366004612f57565b611996565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff16156106f0576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061078557507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b610793611ba5565b61079b610694565b82516000036107d6576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b81600003610810576040517f5d67094f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061081c8383611c26565b90506000336001600160a01b03167fde19dbe881cc0aeeb6e73ce19ac7b5ca695e6be8a076e3eb42292005a7fec1b586858786886001600160a01b0316634d8943bb6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561088d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108b19190612f8e565b6040516108c2959493929190612fa7565b60405180910390a3506108f460017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610946576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61094e610694565b6001600160a01b03831661098e576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b836000036109c8576040517f19c08f4900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03831673735b14bb79463307aacbed86daf3322b1e6226ab14806109fb57506001600160a01b03831630145b15610a32576040517f82d5d76a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610a3c8484611f19565b6000546040517fde43156e0000000000000000000000000000000000000000000000000000000081526001600160a01b038086169263de43156e92610a8d928a9216908990889088906004016130c6565b600060405180830381600087803b158015610aa757600080fd5b505af1158015610abb573d6000803e3d6000fd5b505050505050505050565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020526040902060010154610b00816120e7565b610b0a83836120f1565b50505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610b5d576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610b65610694565b6001600160a01b0385161580610b8257506001600160a01b038316155b15610bb9576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b83600003610bf3576040517f5d67094f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f69582bee0000000000000000000000000000000000000000000000000000000081526001600160a01b038416906369582bee90610c4090899089908990889088906004016130c6565b600060405180830381600087803b158015610c5a57600080fd5b505af1158015610c6e573d6000803e3d6000fd5b50505050505050505050565b6001600160a01b0381163314610cbc576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6108f482826121de565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610cf0816120e7565b610cf86122a2565b50565b610d03611ba5565b610d0b610694565b81600003610d45576040517f19c08f4900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610d638273735b14bb79463307aacbed86daf3322b1e6226ab611f19565b6040517f735b14bb79463307aacbed86daf3322b1e6226ab0000000000000000000000006020820152819033907fde19dbe881cc0aeeb6e73ce19ac7b5ca695e6be8a076e3eb42292005a7fec1b59060340160408051601f198184030181529082905260008054610de3936001600160a01b039091169189918190612fa7565b60405180910390a3610e1460017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b5050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff16600081158015610e635750825b905060008267ffffffffffffffff166001148015610e805750303b155b905081158015610e8e575080155b15610ec5576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001660011785558315610f265784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff16680100000000000000001785555b6001600160a01b0387161580610f4357506001600160a01b038616155b15610f7a576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610f82612332565b610f8a612332565b610f9261233a565b610f9a61234a565b610fa56000876120f1565b50610fd07f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a876120f1565b50600080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03891617905583156110655784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50505050505050565b61107661235a565b61107f8261242a565b610e148282612435565b600061109361253b565b507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc90565b3373735b14bb79463307aacbed86daf3322b1e6226ab14611105576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61110d610694565b6001600160a01b038516158061112a57506001600160a01b038316155b15611161576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8360000361119b576040517f5d67094f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03831673735b14bb79463307aacbed86daf3322b1e6226ab14806111ce57506001600160a01b03831630145b15611205576040517f82d5d76a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f47e7ef240000000000000000000000000000000000000000000000000000000081526001600160a01b038481166004830152602482018690528616906347e7ef24906044016020604051808303816000875af115801561126d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611291919061310d565b610bf3576040517f47d19fab00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6112cf611ba5565b6112d7610694565b8351600003611312576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b82336001600160a01b03167f5322ffbbf9261ff1f8138247942d2b03b28717141ef0a0dd080fc4be9c4e78d38685856040516113509392919061312f565b60405180910390a3610b0a60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b611389611ba5565b611391610694565b84516000036113cc576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b83600003611406576040517f5d67094f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006114128585611c26565b90506000336001600160a01b03167fde19dbe881cc0aeeb6e73ce19ac7b5ca695e6be8a076e3eb42292005a7fec1b5888789868a6001600160a01b0316634d8943bb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611483573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114a79190612f8e565b8a8a6040516114bc979695949392919061315f565b60405180910390a3506114ee60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b5050505050565b6114fd611ba5565b611505610694565b8360000361153f576040517f19c08f4900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61155d8473735b14bb79463307aacbed86daf3322b1e6226ab611f19565b6040517f735b14bb79463307aacbed86daf3322b1e6226ab0000000000000000000000006020820152839033907fde19dbe881cc0aeeb6e73ce19ac7b5ca695e6be8a076e3eb42292005a7fec1b59060340160408051601f198184030181529082905260008054611350936001600160a01b03909116918b9181908b908b9061315f565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61160b816120e7565b610cf861259d565b3373735b14bb79463307aacbed86daf3322b1e6226ab14611660576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611668610694565b6001600160a01b038516158061168557506001600160a01b038316155b156116bc576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b836000036116f6576040517f5d67094f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517fde43156e0000000000000000000000000000000000000000000000000000000081526001600160a01b0384169063de43156e90610c4090899089908990889088906004016130c6565b3373735b14bb79463307aacbed86daf3322b1e6226ab14611790576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611798610694565b6001600160a01b03851615806117b557506001600160a01b038316155b156117ec576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b83600003611826576040517f5d67094f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03831673735b14bb79463307aacbed86daf3322b1e6226ab148061185957506001600160a01b03831630145b15611890576040517f82d5d76a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f47e7ef240000000000000000000000000000000000000000000000000000000081526001600160a01b038481166004830152602482018690528616906347e7ef24906044016020604051808303816000875af11580156118f8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061191c919061310d565b6116f6576040517f47d19fab00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052604090206001015461198c816120e7565b610b0a83836121de565b3373735b14bb79463307aacbed86daf3322b1e6226ab146119e3576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6119eb610694565b6001600160a01b0383161580611a0857506001600160a01b038116155b15611a3f576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b81600003611a79576040517f5d67094f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03811673735b14bb79463307aacbed86daf3322b1e6226ab1480611aac57506001600160a01b03811630145b15611ae3576040517f82d5d76a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f47e7ef240000000000000000000000000000000000000000000000000000000081526001600160a01b038281166004830152602482018490528416906347e7ef24906044016020604051808303816000875af1158015611b4b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b6f919061310d565b6108f4576040517f47d19fab00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0080547ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01611c20576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60029055565b6000806000836001600160a01b031663d9eeebed6040518163ffffffff1660e01b81526004016040805180830381865afa158015611c68573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c8c91906131b4565b6040517f23b872dd00000000000000000000000000000000000000000000000000000000815233600482015273735b14bb79463307aacbed86daf3322b1e6226ab60248201526044810182905291935091506001600160a01b038316906323b872dd906064016020604051808303816000875af1158015611d11573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d35919061310d565b611d6b576040517f0a7cd6d600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f23b872dd000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018690526001600160a01b038516906323b872dd906064016020604051808303816000875af1158015611dd7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611dfb919061310d565b611e31576040517f4dd9ee8d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f42966c68000000000000000000000000000000000000000000000000000000008152600481018690526001600160a01b038516906342966c68906024016020604051808303816000875af1158015611e91573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611eb5919061310d565b611eeb576040517f2c77e05c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b949350505050565b60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b6000546040517f23b872dd000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018490526001600160a01b03909116906323b872dd906064016020604051808303816000875af1158015611f89573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fad919061310d565b611fe3576040517fc7ffc47b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000546040517f2e1a7d4d000000000000000000000000000000000000000000000000000000008152600481018490526001600160a01b0390911690632e1a7d4d90602401600060405180830381600087803b15801561204257600080fd5b505af1158015612056573d6000803e3d6000fd5b505050506000816001600160a01b03168360405160006040518083038185875af1925050503d80600081146120a7576040519150601f19603f3d011682016040523d82523d6000602084013e6120ac565b606091505b50509050806108f4576040517fc7ffc47b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610cf88133612616565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff166121d4576000848152602082815260408083206001600160a01b0387168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905561218a3390565b6001600160a01b0316836001600160a01b0316857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a46001915050610785565b6000915050610785565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff16156121d4576000848152602082815260408083206001600160a01b038716808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339287917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a46001915050610785565b6122aa6126a3565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001681557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a150565b6106f06126fe565b6123426126fe565b6106f0612765565b6123526126fe565b6106f06127b6565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806123f357507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166123e77f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b6001600160a01b031614155b156106f0576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610e14816120e7565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa92505050801561248f575060408051601f3d908101601f1916820190925261248c91810190612f8e565b60015b6124d5576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b03831660048201526024015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8114612531576040517faa1d49a4000000000000000000000000000000000000000000000000000000008152600481018290526024016124cc565b6108f483836127be565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146106f0576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6125a5610694565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011781557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25833612314565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408083206001600160a01b038516845290915290205460ff16610e14576040517fe2517d3f0000000000000000000000000000000000000000000000000000000081526001600160a01b0382166004820152602481018390526044016124cc565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff166106f0576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff166106f0576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61276d6126fe565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055565b611ef36126fe565b6127c782612814565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a280511561280c576108f482826128bc565b610e14612932565b806001600160a01b03163b600003612863576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b03821660048201526024016124cc565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6060600080846001600160a01b0316846040516128d991906131e2565b600060405180830381855af49150503d8060008114612914576040519150601f19603f3d011682016040523d82523d6000602084013e612919565b606091505b509150915061292985838361296a565b95945050505050565b34156106f0576040517fb398979f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60608261297f5761297a826129e2565b6129db565b815115801561299657506001600160a01b0384163b155b156129d8576040517f9996b3150000000000000000000000000000000000000000000000000000000081526001600160a01b03851660048201526024016124cc565b50805b9392505050565b8051156129f25780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060208284031215612a3657600080fd5b81357fffffffff00000000000000000000000000000000000000000000000000000000811681146129db57600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600082601f830112612aa657600080fd5b813567ffffffffffffffff811115612ac057612ac0612a66565b604051601f19603f601f19601f8501160116810181811067ffffffffffffffff82111715612af057612af0612a66565b604052818152838201602001851015612b0857600080fd5b816020850160208301376000918101602001919091529392505050565b6001600160a01b0381168114610cf857600080fd5b600080600060608486031215612b4f57600080fd5b833567ffffffffffffffff811115612b6657600080fd5b612b7286828701612a95565b935050602084013591506040840135612b8a81612b25565b809150509250925092565b600060608284031215612ba757600080fd5b50919050565b60008083601f840112612bbf57600080fd5b50813567ffffffffffffffff811115612bd757600080fd5b602083019150836020828501011115612bef57600080fd5b9250929050565b600080600080600060808688031215612c0e57600080fd5b853567ffffffffffffffff811115612c2557600080fd5b612c3188828901612b95565b955050602086013593506040860135612c4981612b25565b9250606086013567ffffffffffffffff811115612c6557600080fd5b612c7188828901612bad565b969995985093965092949392505050565b600060208284031215612c9457600080fd5b5035919050565b60008060408385031215612cae57600080fd5b823591506020830135612cc081612b25565b809150509250929050565b60008060008060008060a08789031215612ce457600080fd5b863567ffffffffffffffff811115612cfb57600080fd5b612d0789828a01612b95565b9650506020870135612d1881612b25565b9450604087013593506060870135612d2f81612b25565b9250608087013567ffffffffffffffff811115612d4b57600080fd5b612d5789828a01612bad565b979a9699509497509295939492505050565b60008060408385031215612d7c57600080fd5b50508035926020909101359150565b60008060408385031215612d9e57600080fd5b8235612da981612b25565b91506020830135612cc081612b25565b60008060408385031215612dcc57600080fd5b8235612dd781612b25565b9150602083013567ffffffffffffffff811115612df357600080fd5b612dff85828601612a95565b9150509250929050565b60008060008060608587031215612e1f57600080fd5b843567ffffffffffffffff811115612e3657600080fd5b612e4287828801612a95565b94505060208501359250604085013567ffffffffffffffff811115612e6657600080fd5b612e7287828801612bad565b95989497509550505050565b600080600080600060808688031215612e9657600080fd5b853567ffffffffffffffff811115612ead57600080fd5b612c3188828901612a95565b60008060008060608587031215612ecf57600080fd5b8435935060208501359250604085013567ffffffffffffffff811115612e6657600080fd5b60005b83811015612f0f578181015183820152602001612ef7565b50506000910152565b60008151808452612f30816020860160208601612ef4565b601f01601f19169290920160200192915050565b6020815260006129db6020830184612f18565b600080600060608486031215612f6c57600080fd5b8335612f7781612b25565b9250602084013591506040840135612b8a81612b25565b600060208284031215612fa057600080fd5b5051919050565b60c081526000612fba60c0830188612f18565b6001600160a01b038716602084015285604084015284606084015283608084015282810360a084015260008152602081019150509695505050505050565b818352818160208501375060006020828401015260006020601f19601f840116840101905092915050565b600081357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe183360301811261305757600080fd5b820160208101903567ffffffffffffffff81111561307457600080fd5b80360382131561308357600080fd5b60608552613095606086018284612ff8565b91505060208301356130a681612b25565b6001600160a01b0316602085015260409283013592909301919091525090565b6080815260006130d96080830188613023565b6001600160a01b03871660208401528560408401528281036060840152613101818587612ff8565b98975050505050505050565b60006020828403121561311f57600080fd5b815180151581146129db57600080fd5b6040815260006131426040830186612f18565b8281036020840152613155818587612ff8565b9695505050505050565b60c08152600061317260c083018a612f18565b6001600160a01b038916602084015287604084015286606084015285608084015282810360a08401526131a6818587612ff8565b9a9950505050505050505050565b600080604083850312156131c757600080fd5b82516131d281612b25565b6020939093015192949293505050565b600082516131f4818460208701612ef4565b919091019291505056fea2646970667358221220f26fdc524eee7a992599d556e1d6fe20b53d10feb0e3dcd636a9b9a4bb95fbe864736f6c634300081a0033", + ABI: "[{\"type\":\"constructor\",\"inputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"receive\",\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"DEFAULT_ADMIN_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"FUNGIBLE_MODULE_ADDRESS\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"PAUSER_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"UPGRADE_INTERFACE_VERSION\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"call\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"chainId\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"message\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"deposit\",\"inputs\":[{\"name\":\"zrc20\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"depositAndCall\",\"inputs\":[{\"name\":\"context\",\"type\":\"tuple\",\"internalType\":\"structzContext\",\"components\":[{\"name\":\"origin\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"sender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"chainID\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"message\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"depositAndCall\",\"inputs\":[{\"name\":\"context\",\"type\":\"tuple\",\"internalType\":\"structzContext\",\"components\":[{\"name\":\"origin\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"sender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"chainID\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"zrc20\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"message\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"depositAndRevert\",\"inputs\":[{\"name\":\"context\",\"type\":\"tuple\",\"internalType\":\"structrevertContext\",\"components\":[{\"name\":\"origin\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"sender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"chainID\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"zrc20\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"message\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"execute\",\"inputs\":[{\"name\":\"context\",\"type\":\"tuple\",\"internalType\":\"structzContext\",\"components\":[{\"name\":\"origin\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"sender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"chainID\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"zrc20\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"message\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"executeRevert\",\"inputs\":[{\"name\":\"context\",\"type\":\"tuple\",\"internalType\":\"structrevertContext\",\"components\":[{\"name\":\"origin\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"sender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"chainID\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"zrc20\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"message\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"getRoleAdmin\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"grantRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"hasRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"initialize\",\"inputs\":[{\"name\":\"zetaToken_\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"admin_\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"pause\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"paused\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"proxiableUUID\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"renounceRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"callerConfirmation\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"revokeRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"supportsInterface\",\"inputs\":[{\"name\":\"interfaceId\",\"type\":\"bytes4\",\"internalType\":\"bytes4\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"unpause\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"upgradeToAndCall\",\"inputs\":[{\"name\":\"newImplementation\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"withdraw\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"zrc20\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"withdraw\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"chainId\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"withdrawAndCall\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"zrc20\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"message\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"withdrawAndCall\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"chainId\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"message\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"zetaToken\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"event\",\"name\":\"Call\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"chainId\",\"type\":\"uint256\",\"indexed\":true,\"internalType\":\"uint256\"},{\"name\":\"receiver\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"message\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Initialized\",\"inputs\":[{\"name\":\"version\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Paused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleAdminChanged\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"previousAdminRole\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"newAdminRole\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleGranted\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleRevoked\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Unpaused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Upgraded\",\"inputs\":[{\"name\":\"implementation\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Withdrawal\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"chainId\",\"type\":\"uint256\",\"indexed\":true,\"internalType\":\"uint256\"},{\"name\":\"receiver\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"zrc20\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"gasfee\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"protocolFlatFee\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"message\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"AccessControlBadConfirmation\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"AccessControlUnauthorizedAccount\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"neededRole\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"type\":\"error\",\"name\":\"AddressEmptyCode\",\"inputs\":[{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"CallerIsNotFungibleModule\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ERC1967InvalidImplementation\",\"inputs\":[{\"name\":\"implementation\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"ERC1967NonPayable\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"EnforcedPause\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ExpectedPause\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"FailedInnerCall\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"FailedZetaSent\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"GasFeeTransferFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientZRC20Amount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientZetaAmount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidInitialization\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidTarget\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NotInitializing\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OnlyWZETAOrFungible\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ReentrancyGuardReentrantCall\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"UUPSUnauthorizedCallContext\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"UUPSUnsupportedProxiableUUID\",\"inputs\":[{\"name\":\"slot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"type\":\"error\",\"name\":\"WithdrawalFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZRC20BurnFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZRC20DepositFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZRC20TransferFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZeroAddress\",\"inputs\":[]}]", + Bin: "0x60a06040523060805234801561001457600080fd5b5061001d610022565b6100d4565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100725760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146100d15780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b60805161331b6100fd6000396000818161235f01528181612388015261255e015261331b6000f3fe6080604052600436106101bb5760003560e01c80635c975abb116100ec578063ad3cb1cc1161008a578063d547741f11610064578063d547741f14610600578063e63ab1e914610620578063f41d774914610654578063f45346dc1461067457600080fd5b8063ad3cb1cc1461056a578063bcf7f32b146105c0578063c39aca37146105e057600080fd5b80637993c1e0116100c65780637993c1e0146104bb5780638456cb59146104db57806391d14854146104f0578063a217fddf1461055557600080fd5b80635c975abb146104445780635d40e1781461047b578063737a9ed61461049b57600080fd5b806336568abe11610159578063485cc95511610133578063485cc955146103dc5780634f1ef286146103fc57806352d1902d1461040f5780635af659671461042457600080fd5b806336568abe1461037f5780633ce4a5bc1461039f5780633f4ba83a146103c757600080fd5b806321e093b11161019557806321e093b1146102aa578063248a9ca3146102e25780632f2ff15d1461033f578063309f50041461035f57600080fd5b806301ffc9a714610235578063135390f91461026a57806321501a951461028a57600080fd5b36610230576101c8610694565b6000546001600160a01b031633148015906101f757503373735b14bb79463307aacbed86daf3322b1e6226ab14155b1561022e576040517f229930b200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b005b600080fd5b34801561024157600080fd5b50610255610250366004612a3c565b6106f2565b60405190151581526020015b60405180910390f35b34801561027657600080fd5b5061022e610285366004612b8e565b61078b565b34801561029657600080fd5b5061022e6102a5366004612c4a565b6108f9565b3480156102b657600080fd5b506000546102ca906001600160a01b031681565b6040516001600160a01b039091168152602001610261565b3480156102ee57600080fd5b506103316102fd366004612cd6565b60009081527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052604090206001015490565b604051908152602001610261565b34801561034b57600080fd5b5061022e61035a366004612cef565b610ac6565b34801561036b57600080fd5b5061022e61037a366004612d1f565b610b10565b34801561038b57600080fd5b5061022e61039a366004612cef565b610c7a565b3480156103ab57600080fd5b506102ca73735b14bb79463307aacbed86daf3322b1e6226ab81565b3480156103d357600080fd5b5061022e610cc6565b3480156103e857600080fd5b5061022e6103f7366004612dbd565b610cfb565b61022e61040a366004612deb565b610f51565b34801561041b57600080fd5b50610331610f70565b34801561043057600080fd5b5061022e61043f366004612d1f565b610f9f565b34801561045057600080fd5b507fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff16610255565b34801561048757600080fd5b5061022e610496366004612e3b565b6111ae565b3480156104a757600080fd5b5061022e6104b6366004612eb0565b611268565b3480156104c757600080fd5b5061022e6104d6366004612efe565b611348565b3480156104e757600080fd5b5061022e6114bc565b3480156104fc57600080fd5b5061025561050b366004612cef565b60009182527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408084206001600160a01b0393909316845291905290205460ff1690565b34801561056157600080fd5b50610331600081565b34801561057657600080fd5b506105b36040518060400160405280600581526020017f352e302e3000000000000000000000000000000000000000000000000000000081525081565b6040516102619190612fa7565b3480156105cc57600080fd5b5061022e6105db366004612d1f565b6114ee565b3480156105ec57600080fd5b5061022e6105fb366004612d1f565b61161e565b34801561060c57600080fd5b5061022e61061b366004612cef565b61182d565b34801561062c57600080fd5b506103317f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b34801561066057600080fd5b5061022e61066f366004612fba565b611871565b34801561068057600080fd5b5061022e61068f366004613020565b611990565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff16156106f0576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061078557507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b610793611b9f565b61079b610694565b82516000036107d6576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b81600003610810576040517f5d67094f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061081c8383611c20565b90506000336001600160a01b03167fde19dbe881cc0aeeb6e73ce19ac7b5ca695e6be8a076e3eb42292005a7fec1b586858786886001600160a01b0316634d8943bb6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561088d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108b19190613057565b6040516108c2959493929190613070565b60405180910390a3506108f460017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610946576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61094e610694565b6001600160a01b03831661098e576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b836000036109c8576040517f19c08f4900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03831673735b14bb79463307aacbed86daf3322b1e6226ab14806109fb57506001600160a01b03831630145b15610a32576040517f82d5d76a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610a3c8484611f13565b6000546040517fde43156e0000000000000000000000000000000000000000000000000000000081526001600160a01b038086169263de43156e92610a8d928a9216908990889088906004016131ad565b600060405180830381600087803b158015610aa757600080fd5b505af1158015610abb573d6000803e3d6000fd5b505050505050505050565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020526040902060010154610b00816120e1565b610b0a83836120eb565b50505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610b5d576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610b65610694565b6001600160a01b0385161580610b8257506001600160a01b038316155b15610bb9576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b83600003610bf3576040517f5d67094f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f69582bee0000000000000000000000000000000000000000000000000000000081526001600160a01b038416906369582bee90610c4090899089908990889088906004016131ad565b600060405180830381600087803b158015610c5a57600080fd5b505af1158015610c6e573d6000803e3d6000fd5b50505050505050505050565b6001600160a01b0381163314610cbc576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6108f482826121d8565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610cf0816120e1565b610cf861229c565b50565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff16600081158015610d465750825b905060008267ffffffffffffffff166001148015610d635750303b155b905081158015610d71575080155b15610da8576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001660011785558315610e095784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff16680100000000000000001785555b6001600160a01b0387161580610e2657506001600160a01b038616155b15610e5d576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610e6561232c565b610e6d61232c565b610e75612334565b610e7d612344565b610e886000876120eb565b50610eb37f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a876120eb565b50600080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0389161790558315610f485784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50505050505050565b610f59612354565b610f6282612424565b610f6c828261242f565b5050565b6000610f7a612553565b507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc90565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610fec576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610ff4610694565b6001600160a01b038516158061101157506001600160a01b038316155b15611048576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b83600003611082576040517f5d67094f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03831673735b14bb79463307aacbed86daf3322b1e6226ab14806110b557506001600160a01b03831630145b156110ec576040517f82d5d76a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f47e7ef240000000000000000000000000000000000000000000000000000000081526001600160a01b038481166004830152602482018690528616906347e7ef24906044016020604051808303816000875af1158015611154573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061117891906131f4565b610bf3576040517f47d19fab00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6111b6611b9f565b6111be610694565b83516000036111f9576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b82336001600160a01b03167f5322ffbbf9261ff1f8138247942d2b03b28717141ef0a0dd080fc4be9c4e78d386858560405161123793929190613216565b60405180910390a3610b0a60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b611270611b9f565b611278610694565b816000036112b2576040517f19c08f4900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6112d08273735b14bb79463307aacbed86daf3322b1e6226ab611f13565b60008054604051839233927fde19dbe881cc0aeeb6e73ce19ac7b5ca695e6be8a076e3eb42292005a7fec1b5926113179289926001600160a01b0316918991908190613070565b60405180910390a36108f460017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b611350611b9f565b611358610694565b8451600003611393576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b836000036113cd576040517f5d67094f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006113d98585611c20565b90506000336001600160a01b03167fde19dbe881cc0aeeb6e73ce19ac7b5ca695e6be8a076e3eb42292005a7fec1b5888789868a6001600160a01b0316634d8943bb6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561144a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061146e9190613057565b8a8a6040516114839796959493929190613246565b60405180910390a3506114b560017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b5050505050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a6114e6816120e1565b610cf86125b5565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461153b576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611543610694565b6001600160a01b038516158061156057506001600160a01b038316155b15611597576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b836000036115d1576040517f5d67094f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517fde43156e0000000000000000000000000000000000000000000000000000000081526001600160a01b0384169063de43156e90610c4090899089908990889088906004016131ad565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461166b576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611673610694565b6001600160a01b038516158061169057506001600160a01b038316155b156116c7576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b83600003611701576040517f5d67094f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03831673735b14bb79463307aacbed86daf3322b1e6226ab148061173457506001600160a01b03831630145b1561176b576040517f82d5d76a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f47e7ef240000000000000000000000000000000000000000000000000000000081526001600160a01b038481166004830152602482018690528616906347e7ef24906044016020604051808303816000875af11580156117d3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117f791906131f4565b6115d1576040517f47d19fab00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020526040902060010154611867816120e1565b610b0a83836121d8565b611879611b9f565b611881610694565b84516000036118bc576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b836000036118f6576040517f19c08f4900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6119148473735b14bb79463307aacbed86daf3322b1e6226ab611f13565b60008054604051859233927fde19dbe881cc0aeeb6e73ce19ac7b5ca695e6be8a076e3eb42292005a7fec1b59261195f928b926001600160a01b0316918b919081908b908b90613246565b60405180910390a36114b560017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b3373735b14bb79463307aacbed86daf3322b1e6226ab146119dd576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6119e5610694565b6001600160a01b0383161580611a0257506001600160a01b038116155b15611a39576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b81600003611a73576040517f5d67094f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03811673735b14bb79463307aacbed86daf3322b1e6226ab1480611aa657506001600160a01b03811630145b15611add576040517f82d5d76a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f47e7ef240000000000000000000000000000000000000000000000000000000081526001600160a01b038281166004830152602482018490528416906347e7ef24906044016020604051808303816000875af1158015611b45573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b6991906131f4565b6108f4576040517f47d19fab00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0080547ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01611c1a576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60029055565b6000806000836001600160a01b031663d9eeebed6040518163ffffffff1660e01b81526004016040805180830381865afa158015611c62573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c86919061329b565b6040517f23b872dd00000000000000000000000000000000000000000000000000000000815233600482015273735b14bb79463307aacbed86daf3322b1e6226ab60248201526044810182905291935091506001600160a01b038316906323b872dd906064016020604051808303816000875af1158015611d0b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d2f91906131f4565b611d65576040517f0a7cd6d600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f23b872dd000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018690526001600160a01b038516906323b872dd906064016020604051808303816000875af1158015611dd1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611df591906131f4565b611e2b576040517f4dd9ee8d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f42966c68000000000000000000000000000000000000000000000000000000008152600481018690526001600160a01b038516906342966c68906024016020604051808303816000875af1158015611e8b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611eaf91906131f4565b611ee5576040517f2c77e05c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b949350505050565b60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b6000546040517f23b872dd000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018490526001600160a01b03909116906323b872dd906064016020604051808303816000875af1158015611f83573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fa791906131f4565b611fdd576040517fc7ffc47b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000546040517f2e1a7d4d000000000000000000000000000000000000000000000000000000008152600481018490526001600160a01b0390911690632e1a7d4d90602401600060405180830381600087803b15801561203c57600080fd5b505af1158015612050573d6000803e3d6000fd5b505050506000816001600160a01b03168360405160006040518083038185875af1925050503d80600081146120a1576040519150601f19603f3d011682016040523d82523d6000602084013e6120a6565b606091505b50509050806108f4576040517fc7ffc47b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610cf8813361262e565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff166121ce576000848152602082815260408083206001600160a01b0387168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790556121843390565b6001600160a01b0316836001600160a01b0316857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a46001915050610785565b6000915050610785565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff16156121ce576000848152602082815260408083206001600160a01b038716808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339287917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a46001915050610785565b6122a46126bb565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001681557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a150565b6106f0612716565b61233c612716565b6106f061277d565b61234c612716565b6106f06127ce565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806123ed57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166123e17f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b6001600160a01b031614155b156106f0576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610f6c816120e1565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156124a7575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682019092526124a491810190613057565b60015b6124ed576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b03831660048201526024015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8114612549576040517faa1d49a4000000000000000000000000000000000000000000000000000000008152600481018290526024016124e4565b6108f483836127d6565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146106f0576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6125bd610694565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011781557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2583361230e565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408083206001600160a01b038516845290915290205460ff16610f6c576040517fe2517d3f0000000000000000000000000000000000000000000000000000000081526001600160a01b0382166004820152602481018390526044016124e4565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff166106f0576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff166106f0576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612785612716565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055565b611eed612716565b6127df8261282c565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a2805115612824576108f482826128d4565b610f6c61294a565b806001600160a01b03163b60000361287b576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b03821660048201526024016124e4565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6060600080846001600160a01b0316846040516128f191906132c9565b600060405180830381855af49150503d806000811461292c576040519150601f19603f3d011682016040523d82523d6000602084013e612931565b606091505b5091509150612941858383612982565b95945050505050565b34156106f0576040517fb398979f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60608261299757612992826129fa565b6129f3565b81511580156129ae57506001600160a01b0384163b155b156129f0576040517f9996b3150000000000000000000000000000000000000000000000000000000081526001600160a01b03851660048201526024016124e4565b50805b9392505050565b805115612a0a5780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060208284031215612a4e57600080fd5b81357fffffffff00000000000000000000000000000000000000000000000000000000811681146129f357600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600082601f830112612abe57600080fd5b813567ffffffffffffffff811115612ad857612ad8612a7e565b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8501160116810181811067ffffffffffffffff82111715612b4457612b44612a7e565b604052818152838201602001851015612b5c57600080fd5b816020850160208301376000918101602001919091529392505050565b6001600160a01b0381168114610cf857600080fd5b600080600060608486031215612ba357600080fd5b833567ffffffffffffffff811115612bba57600080fd5b612bc686828701612aad565b935050602084013591506040840135612bde81612b79565b809150509250925092565b600060608284031215612bfb57600080fd5b50919050565b60008083601f840112612c1357600080fd5b50813567ffffffffffffffff811115612c2b57600080fd5b602083019150836020828501011115612c4357600080fd5b9250929050565b600080600080600060808688031215612c6257600080fd5b853567ffffffffffffffff811115612c7957600080fd5b612c8588828901612be9565b955050602086013593506040860135612c9d81612b79565b9250606086013567ffffffffffffffff811115612cb957600080fd5b612cc588828901612c01565b969995985093965092949392505050565b600060208284031215612ce857600080fd5b5035919050565b60008060408385031215612d0257600080fd5b823591506020830135612d1481612b79565b809150509250929050565b60008060008060008060a08789031215612d3857600080fd5b863567ffffffffffffffff811115612d4f57600080fd5b612d5b89828a01612be9565b9650506020870135612d6c81612b79565b9450604087013593506060870135612d8381612b79565b9250608087013567ffffffffffffffff811115612d9f57600080fd5b612dab89828a01612c01565b979a9699509497509295939492505050565b60008060408385031215612dd057600080fd5b8235612ddb81612b79565b91506020830135612d1481612b79565b60008060408385031215612dfe57600080fd5b8235612e0981612b79565b9150602083013567ffffffffffffffff811115612e2557600080fd5b612e3185828601612aad565b9150509250929050565b60008060008060608587031215612e5157600080fd5b843567ffffffffffffffff811115612e6857600080fd5b612e7487828801612aad565b94505060208501359250604085013567ffffffffffffffff811115612e9857600080fd5b612ea487828801612c01565b95989497509550505050565b600080600060608486031215612ec557600080fd5b833567ffffffffffffffff811115612edc57600080fd5b612ee886828701612aad565b9660208601359650604090950135949350505050565b600080600080600060808688031215612f1657600080fd5b853567ffffffffffffffff811115612f2d57600080fd5b612c8588828901612aad565b60005b83811015612f54578181015183820152602001612f3c565b50506000910152565b60008151808452612f75816020860160208601612f39565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006129f36020830184612f5d565b600080600080600060808688031215612fd257600080fd5b853567ffffffffffffffff811115612fe957600080fd5b612ff588828901612aad565b9550506020860135935060408601359250606086013567ffffffffffffffff811115612cb957600080fd5b60008060006060848603121561303557600080fd5b833561304081612b79565b9250602084013591506040840135612bde81612b79565b60006020828403121561306957600080fd5b5051919050565b60c08152600061308360c0830188612f5d565b6001600160a01b038716602084015285604084015284606084015283608084015282810360a084015260008152602081019150509695505050505050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b600081357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe183360301811261313e57600080fd5b820160208101903567ffffffffffffffff81111561315b57600080fd5b80360382131561316a57600080fd5b6060855261317c6060860182846130c1565b915050602083013561318d81612b79565b6001600160a01b0316602085015260409283013592909301919091525090565b6080815260006131c0608083018861310a565b6001600160a01b038716602084015285604084015282810360608401526131e88185876130c1565b98975050505050505050565b60006020828403121561320657600080fd5b815180151581146129f357600080fd5b6040815260006132296040830186612f5d565b828103602084015261323c8185876130c1565b9695505050505050565b60c08152600061325960c083018a612f5d565b6001600160a01b038916602084015287604084015286606084015285608084015282810360a084015261328d8185876130c1565b9a9950505050505050505050565b600080604083850312156132ae57600080fd5b82516132b981612b79565b6020939093015192949293505050565b600082516132db818460208701612f39565b919091019291505056fea264697066735822122074bd01c46a1890e26f7c08318fd774812c29e1ccd03d35d939069b787f010fb864736f6c634300081a0033", } // GatewayZEVMABI is the input ABI used to generate the binding from. diff --git a/v2/pkg/gatewayzevm.t.sol/gatewayzevminboundtest.go b/v2/pkg/gatewayzevm.t.sol/gatewayzevminboundtest.go index c4d5bc8c..6fc595eb 100644 --- a/v2/pkg/gatewayzevm.t.sol/gatewayzevminboundtest.go +++ b/v2/pkg/gatewayzevm.t.sol/gatewayzevminboundtest.go @@ -49,8 +49,8 @@ type StdInvariantFuzzSelector struct { // GatewayZEVMInboundTestMetaData contains all meta data concerning the GatewayZEVMInboundTest contract. var GatewayZEVMInboundTestMetaData = &bind.MetaData{ - ABI: "[{\"type\":\"function\",\"name\":\"IS_TEST\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeArtifacts\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedArtifacts_\",\"type\":\"string[]\",\"internalType\":\"string[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeContracts\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedContracts_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeSelectors\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedSelectors_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzSelector[]\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"selectors\",\"type\":\"bytes4[]\",\"internalType\":\"bytes4[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeSenders\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedSenders_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"failed\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"setUp\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"targetArtifactSelectors\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedArtifactSelectors_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzArtifactSelector[]\",\"components\":[{\"name\":\"artifact\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"selectors\",\"type\":\"bytes4[]\",\"internalType\":\"bytes4[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetArtifacts\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedArtifacts_\",\"type\":\"string[]\",\"internalType\":\"string[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetContracts\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedContracts_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetInterfaces\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedInterfaces_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzInterface[]\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"artifacts\",\"type\":\"string[]\",\"internalType\":\"string[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetSelectors\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedSelectors_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzSelector[]\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"selectors\",\"type\":\"bytes4[]\",\"internalType\":\"bytes4[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetSenders\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedSenders_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"testCall\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testCallFailsIfReceiverIsZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawAndCallZETAFailsIfAmountIsZero\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawAndCallZRC20FailsIfAmountIsZero\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawAndCallZRC20FailsIfReceiverIsZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawZETA\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawZETAFailsIfAmountIsZero\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawZETAFailsIfNoAllowance\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawZETAFailsIfNoBalance\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawZETAWithMessage\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawZETAWithMessageFailsIfNoAllowance\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawZRC20\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawZRC20FailsIfNoAllowance\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawZRC20FailsIfNoBalanceForGasFee\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawZRC20FailsIfNoBalanceForTransfer\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawZRC20FailsIfReceiverIsZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawZRC20FailsIsAmountIs0\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawZRC20WithMessage\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawZRC20WithMessageFailsIfNoAllowance\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"event\",\"name\":\"Call\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"chainId\",\"type\":\"uint256\",\"indexed\":true,\"internalType\":\"uint256\"},{\"name\":\"receiver\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"message\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Withdrawal\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"chainId\",\"type\":\"uint256\",\"indexed\":true,\"internalType\":\"uint256\"},{\"name\":\"receiver\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"zrc20\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"gasfee\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"protocolFlatFee\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"message\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log\",\"inputs\":[{\"name\":\"\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_address\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_array\",\"inputs\":[{\"name\":\"val\",\"type\":\"uint256[]\",\"indexed\":false,\"internalType\":\"uint256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_array\",\"inputs\":[{\"name\":\"val\",\"type\":\"int256[]\",\"indexed\":false,\"internalType\":\"int256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_array\",\"inputs\":[{\"name\":\"val\",\"type\":\"address[]\",\"indexed\":false,\"internalType\":\"address[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_bytes\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_bytes32\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_int\",\"inputs\":[{\"name\":\"\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_address\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_array\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"uint256[]\",\"indexed\":false,\"internalType\":\"uint256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_array\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"int256[]\",\"indexed\":false,\"internalType\":\"int256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_array\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"address[]\",\"indexed\":false,\"internalType\":\"address[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_bytes\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_bytes32\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_decimal_int\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"},{\"name\":\"decimals\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_decimal_uint\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"decimals\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_int\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_string\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_uint\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_string\",\"inputs\":[{\"name\":\"\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_uint\",\"inputs\":[{\"name\":\"\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"logs\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"CallerIsNotFungibleModule\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"FailedZetaSent\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"GasFeeTransferFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientZRC20Amount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientZetaAmount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidTarget\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"LowBalance\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OnlyWZETAOrFungible\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"WithdrawalFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZRC20BurnFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZRC20DepositFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZRC20TransferFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZeroAddress\",\"inputs\":[]}]", - Bin: "0x6080604052600c8054600160ff199182168117909255601f80549091169091179055348015602c57600080fd5b5061df248061003c6000396000f3fe608060405234801561001057600080fd5b50600436106101f05760003560e01c806383ababa91161010f578063ba9adeef116100a2578063ea37902f11610071578063ea37902f14610331578063fa7626d414610339578063fbc611c814610346578063fdad0ad01461034e57600080fd5b8063ba9adeef14610311578063ceccfab314610319578063dde7e96714610321578063e20c9f711461032957600080fd5b8063b5508aa9116100de578063b5508aa9146102e1578063b7f05836146102e9578063ba414fa6146102f1578063ba800c911461030957600080fd5b806383ababa9146102a757806385226c81146102af578063916a17c6146102c4578063b0464fdc146102d957600080fd5b806339cbb457116101875780635006fd80116101565780635006fd801461027a5780635d72228f146102825780636221b5091461028a57806366d9a9a01461029257600080fd5b806339cbb4571461025a5780633e5e3c23146102625780633f7286f41461026a578063423a58741461027257600080fd5b80631ed7831c116101c35780631ed7831c1461021757806321aeb18c146102355780632ade38801461023d57806336431b3f1461025257600080fd5b80630a9254e4146101f55780631238212c146101ff57806318a4cfdc146102075780631e63d2b91461020f575b600080fd5b6101fd610356565b005b6101fd610dc3565b6101fd61118c565b6101fd6115e1565b61021f6119cd565b60405161022c91906189f3565b60405180910390f35b6101fd611a2f565b610245611b33565b60405161022c9190618a8f565b6101fd611c75565b6101fd611e1b565b61021f611f83565b61021f611fe3565b6101fd612043565b6101fd6121a4565b6101fd61263b565b6101fd61298a565b61029a612b90565b60405161022c9190618bf5565b6101fd612d12565b6102b7612e0d565b60405161022c9190618c93565b6102cc612edd565b60405161022c9190618d0a565b6102cc612fd8565b6102b76130d3565b6101fd6131a3565b6102f96133e0565b604051901515815260200161022c565b6101fd6134b4565b6101fd6135e0565b6101fd613783565b6101fd613ab7565b61021f613ed7565b6101fd613f37565b601f546102f99060ff1681565b6101fd6142f3565b6101fd614666565b602580547fffffffffffffffffffffffff000000000000000000000000000000000000000090811630179091556026805490911661123417905560405161039c90618906565b604051809103906000f0801580156103b8573d6000803e3d6000fd5b50602280547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03928316908117909155604080518082018252600f81527f476174657761795a45564d2e736f6c00000000000000000000000000000000006020820152602554915160248101939093529216604482015261049c919060640160408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f485cc955000000000000000000000000000000000000000000000000000000001790526147f5565b601f80547fffffffffffffffffffffff0000000000000000000000000000000000000000ff166101006001600160a01b039384168102919091179182905560208054919092049092167fffffffffffffffffffffffff000000000000000000000000000000000000000090921682178155604080517f3ce4a5bc0000000000000000000000000000000000000000000000000000000081529051633ce4a5bc926004808401939192918290030181865afa15801561055e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105829190618da1565b602780547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03929092169190911790556040516105c690618913565b604051809103906000f0801580156105e2573d6000803e3d6000fd5b50602480547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039283161781556027546040517f06447d5600000000000000000000000000000000000000000000000000000000815292166004830152737109709ecfa91a80626ff3989d68f67f5b1dd12d916306447d569101600060405180830381600087803b15801561067e57600080fd5b505af1158015610692573d6000803e3d6000fd5b5050505060008060006040516106a790618920565b6001600160a01b03938416815291831660208301529091166040820152606001604051809103906000f0801580156106e3573d6000803e3d6000fd5b50602380547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039283169081179091556020546040516012936001938493600093919216906107399061892d565b61074896959493929190618dca565b604051809103906000f080158015610764573d6000803e3d6000fd5b50602180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039283169081179091556023546040517fee2815ba0000000000000000000000000000000000000000000000000000000081526001600482015260248101929092529091169063ee2815ba90604401600060405180830381600087803b1580156107fb57600080fd5b505af115801561080f573d6000803e3d6000fd5b50506023546040517fa7cb050700000000000000000000000000000000000000000000000000000000815260016004820181905260248201526001600160a01b03909116925063a7cb05079150604401600060405180830381600087803b15801561087957600080fd5b505af115801561088d573d6000803e3d6000fd5b50506027546040517fc88a5e6d0000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152633b9aca006024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c88a5e6d9150604401600060405180830381600087803b15801561090d57600080fd5b505af1158015610921573d6000803e3d6000fd5b50505050602260009054906101000a90046001600160a01b03166001600160a01b031663d0e30db0600a6040518263ffffffff1660e01b81526004016000604051808303818588803b15801561097657600080fd5b505af115801561098a573d6000803e3d6000fd5b50506022546020546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152600a60248201529116935063095ea7b3925060440190506020604051808303816000875af11580156109fe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a229190618ebf565b506021546025546040517f47e7ef240000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620186a060248201529116906347e7ef24906044016020604051808303816000875af1158015610a93573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ab79190618ebf565b507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b03166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610b1657600080fd5b505af1158015610b2a573d6000803e3d6000fd5b50506025546040517f06447d560000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506306447d569150602401600060405180830381600087803b158015610ba057600080fd5b505af1158015610bb4573d6000803e3d6000fd5b50506021546020546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620186a060248201529116925063095ea7b391506044016020604051808303816000875af1158015610c28573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c4c9190618ebf565b50602260009054906101000a90046001600160a01b03166001600160a01b031663d0e30db0600a6040518263ffffffff1660e01b81526004016000604051808303818588803b158015610c9e57600080fd5b505af1158015610cb2573d6000803e3d6000fd5b50506022546020546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152600a60248201529116935063095ea7b3925060440190506020604051808303816000875af1158015610d26573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d4a9190618ebf565b507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b03166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610da957600080fd5b505af1158015610dbd573d6000803e3d6000fd5b50505050565b6021546025546040516370a0823160e01b81526001600160a01b03918216600482015260019260009216906370a0823190602401602060405180830381865afa158015610e14573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e389190618ee1565b6025546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015610ead57600080fd5b505af1158015610ec1573d6000803e3d6000fd5b50506021546020546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152600060248201529116925063095ea7b391506044016020604051808303816000875af1158015610f33573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f579190618ebf565b506026546040516001600160a01b03909116602482015260009060440160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f84fae7600000000000000000000000000000000000000000000000000000000017905280517ff48448140000000000000000000000000000000000000000000000000000000081529051919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f48448149160048082019260009290919082900301818387803b15801561103357600080fd5b505af1158015611047573d6000803e3d6000fd5b50506020805460265460405160609190911b6bffffffffffffffffffffffff1916928101929092526001600160a01b03169250637993c1e0915060340160408051601f19818403018152908290526021547fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1683526110db9288916001600160a01b0316908790600401618efa565b600060405180830381600087803b1580156110f557600080fd5b505af1158015611109573d6000803e3d6000fd5b50506021546025546040516370a0823160e01b81526001600160a01b03918216600482015260009450911691506370a0823190602401602060405180830381865afa15801561115c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111809190618ee1565b9050610dbd8382614814565b6022546025546040516370a0823160e01b81526001600160a01b03918216600482015260019260009216906370a0823190602401602060405180830381865afa1580156111dd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112019190618ee1565b6022546020546040516370a0823160e01b81526001600160a01b0391821660048201529293506000929116906370a0823190602401602060405180830381865afa158015611253573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112779190618ee1565b6027546026546040516001600160a01b03918216602482015292935016319060009060440160408051601f19818403018152918152602080830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f84fae760000000000000000000000000000000000000000000000000000000001790525490517f81bad6f30000000000000000000000000000000000000000000000000000000081526001600482018190526024820181905260448201819052606482018190526001600160a01b03909216608482015291925090737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b15801561138657600080fd5b505af115801561139a573d6000803e3d6000fd5b505060255460275460405160609190911b6bffffffffffffffffffffffff191660208201528493506001600160a01b0390911691507fde19dbe881cc0aeeb6e73ce19ac7b5ca695e6be8a076e3eb42292005a7fec1b59060340160408051601f1981840301815290829052602254611426926001600160a01b03909116908c9060009081908b90618f34565b60405180910390a36020546040517f80bd3d030000000000000000000000000000000000000000000000000000000081526001600160a01b03909116906380bd3d039061147b90899085908790600401618f87565b600060405180830381600087803b15801561149557600080fd5b505af11580156114a9573d6000803e3d6000fd5b50506022546025546040516370a0823160e01b81526001600160a01b03918216600482015260009450911691506370a0823190602401602060405180830381865afa1580156114fc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115209190618ee1565b9050611536611530600188618fd5565b82614814565b6022546020546040516370a0823160e01b81526001600160a01b03918216600482015260009291909116906370a0823190602401602060405180830381865afa158015611587573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115ab9190618ee1565b90506115b78682614814565b6115d76115c5866001618fe8565b6027546001600160a01b031631614814565b5050505050505050565b6021546025546040516370a0823160e01b81526001600160a01b03918216600482015260019260009216906370a0823190602401602060405180830381865afa158015611632573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116569190618ee1565b6026546040516001600160a01b03909116602482015290915060009060440160408051601f19818403018152918152602080830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f84fae760000000000000000000000000000000000000000000000000000000001790525490517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b15801561175c57600080fd5b505af1158015611770573d6000803e3d6000fd5b505060255460265460405160609190911b6bffffffffffffffffffffffff19166020820152600093506001600160a01b0390911691507fde19dbe881cc0aeeb6e73ce19ac7b5ca695e6be8a076e3eb42292005a7fec1b59060340160408051601f198184030181528282526021547f4d8943bb000000000000000000000000000000000000000000000000000000008452915190926001600160a01b039092169189916000918491634d8943bb916004808201926020929091908290030181865afa158015611843573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118679190618ee1565b8860405161187a96959493929190618f34565b60405180910390a3602080546026546040516001600160a01b0392831693637993c1e0936118c29316910160609190911b6bffffffffffffffffffffffff1916815260140190565b60408051601f19818403018152908290526021547fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1683526119199288916001600160a01b0316908790600401618efa565b600060405180830381600087803b15801561193357600080fd5b505af1158015611947573d6000803e3d6000fd5b50506021546025546040516370a0823160e01b81526001600160a01b03918216600482015260009450911691506370a0823190602401602060405180830381865afa15801561199a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119be9190618ee1565b9050610dbd6115308585618fd5565b60606016805480602002602001604051908101604052809291908181526020018280548015611a2557602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311611a07575b5050505050905090565b6040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527f19c08f49000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b158015611ab457600080fd5b505af1158015611ac8573d6000803e3d6000fd5b50506020546040517f441a3e7000000000000000000000000000000000000000000000000000000000815260006004820152600160248201526001600160a01b03909116925063441a3e7091506044015b600060405180830381600087803b158015610da957600080fd5b6060601e805480602002602001604051908101604052809291908181526020016000905b82821015611c6c57600084815260208082206040805180820182526002870290920180546001600160a01b03168352600181018054835181870281018701909452808452939591948681019491929084015b82821015611c55578382906000526020600020018054611bc890618ffb565b80601f0160208091040260200160405190810160405280929190818152602001828054611bf490618ffb565b8015611c415780601f10611c1657610100808354040283529160200191611c41565b820191906000526020600020905b815481529060010190602001808311611c2457829003601f168201915b505050505081526020019060010190611ba9565b505050508152505081526020019060010190611b57565b50505050905090565b6026546040516001600160a01b03909116602482015260009060440160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f84fae76000000000000000000000000000000000000000000000000000000000179052517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fd92e233d000000000000000000000000000000000000000000000000000000006004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b158015611d6f57600080fd5b505af1158015611d83573d6000803e3d6000fd5b5050602080546040805160008152928301908190526021547f7993c1e0000000000000000000000000000000000000000000000000000000009091526001600160a01b039182169450637993c1e09350611de69291600191168660248401618efa565b600060405180830381600087803b158015611e0057600080fd5b505af1158015611e14573d6000803e3d6000fd5b5050505050565b6026546040516001600160a01b03909116602482015260009060440160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f84fae76000000000000000000000000000000000000000000000000000000000179052517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fd92e233d000000000000000000000000000000000000000000000000000000006004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b158015611f1557600080fd5b505af1158015611f29573d6000803e3d6000fd5b5050602080546040805160008152928301908190527f5d40e1780000000000000000000000000000000000000000000000000000000090526001600160a01b03169250635d40e1789150611de69060018560248301619048565b60606018805480602002602001604051908101604052809291908181526020018280548015611a25576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311611a07575050505050905090565b60606017805480602002602001604051908101604052809291908181526020018280548015611a25576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311611a07575050505050905090565b6026546040516001600160a01b03909116602482015260009060440160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f84fae76000000000000000000000000000000000000000000000000000000000179052517fc31eb0e00000000000000000000000000000000000000000000000000000000081527f19c08f49000000000000000000000000000000000000000000000000000000006004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b15801561213d57600080fd5b505af1158015612151573d6000803e3d6000fd5b50506020546040517f80bd3d030000000000000000000000000000000000000000000000000000000081526001600160a01b0390911692506380bd3d039150611de6906000906001908690600401618f87565b6022546025546040516370a0823160e01b81526001600160a01b03918216600482015260019260009216906370a0823190602401602060405180830381865afa1580156121f5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122199190618ee1565b6022546020546040516370a0823160e01b81526001600160a01b0391821660048201529293506000929116906370a0823190602401602060405180830381865afa15801561226b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061228f9190618ee1565b6027546026546040516001600160a01b03918216602482015292935016319060009060440160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f84fae7600000000000000000000000000000000000000000000000000000000017905260255490517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152909150600190737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561238357600080fd5b505af1158015612397573d6000803e3d6000fd5b50506022546020546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152600060248201529116925063095ea7b391506044016020604051808303816000875af1158015612409573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061242d9190618ebf565b507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b031663f48448146040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561248c57600080fd5b505af11580156124a0573d6000803e3d6000fd5b50506020546040517f80bd3d030000000000000000000000000000000000000000000000000000000081526001600160a01b0390911692506380bd3d0391506124f190899085908790600401618f87565b600060405180830381600087803b15801561250b57600080fd5b505af115801561251f573d6000803e3d6000fd5b50506022546025546040516370a0823160e01b81526001600160a01b03918216600482015260009450911691506370a0823190602401602060405180830381865afa158015612572573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125969190618ee1565b90506125a28682614814565b6022546020546040516370a0823160e01b81526001600160a01b03918216600482015260009291909116906370a0823190602401602060405180830381865afa1580156125f3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126179190618ee1565b90506126238682614814565b6027546115d79086906001600160a01b031631614814565b6021546025546040516370a0823160e01b81526001600160a01b03918216600482015260019260009216906370a0823190602401602060405180830381865afa15801561268c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126b09190618ee1565b6025546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561272557600080fd5b505af1158015612739573d6000803e3d6000fd5b50506021546020546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152600060248201529116925063095ea7b391506044016020604051808303816000875af11580156127ab573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127cf9190618ebf565b507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b031663f48448146040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561282e57600080fd5b505af1158015612842573d6000803e3d6000fd5b50506020805460265460405160609190911b6bffffffffffffffffffffffff1916928101929092526001600160a01b0316925063135390f9915060340160408051601f19818403018152908290526021547fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1683526128d49287916001600160a01b031690600401619073565b600060405180830381600087803b1580156128ee57600080fd5b505af1158015612902573d6000803e3d6000fd5b50506021546025546040516370a0823160e01b81526001600160a01b03918216600482015260009450911691506370a0823190602401602060405180830381865afa158015612955573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129799190618ee1565b90506129858282614814565b505050565b6022546025546040516370a0823160e01b81526001600160a01b03918216600482015260019260009216906370a0823190602401602060405180830381865afa1580156129db573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129ff9190618ee1565b6022546040517fa9059cbb0000000000000000000000000000000000000000000000000000000081526101236004820152602481018390529192506001600160a01b03169063a9059cbb906044016020604051808303816000875af1158015612a6c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a909190618ebf565b506000600190507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b031663f48448146040518163ffffffff1660e01b8152600401600060405180830381600087803b158015612af557600080fd5b505af1158015612b09573d6000803e3d6000fd5b50506020546040517f441a3e7000000000000000000000000000000000000000000000000000000000815260048101879052602481018590526001600160a01b03909116925063441a3e709150604401600060405180830381600087803b158015612b7357600080fd5b505af1158015612b87573d6000803e3d6000fd5b50505050505050565b6060601b805480602002602001604051908101604052809291908181526020016000905b82821015611c6c5783829060005260206000209060020201604051806040016040529081600082018054612be790618ffb565b80601f0160208091040260200160405190810160405280929190818152602001828054612c1390618ffb565b8015612c605780601f10612c3557610100808354040283529160200191612c60565b820191906000526020600020905b815481529060010190602001808311612c4357829003601f168201915b5050505050815260200160018201805480602002602001604051908101604052809291908181526020018280548015612cfa57602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019060040190602082600301049283019260010382029150808411612ca75790505b50505050508152505081526020019060010190612bb4565b6040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b158015612d9757600080fd5b505af1158015612dab573d6000803e3d6000fd5b5050602080546040805160008152928301908190526021547f135390f9000000000000000000000000000000000000000000000000000000009091526001600160a01b03918216945063135390f99350611b1992916001911660248301619073565b6060601a805480602002602001604051908101604052809291908181526020016000905b82821015611c6c578382906000526020600020018054612e5090618ffb565b80601f0160208091040260200160405190810160405280929190818152602001828054612e7c90618ffb565b8015612ec95780601f10612e9e57610100808354040283529160200191612ec9565b820191906000526020600020905b815481529060010190602001808311612eac57829003601f168201915b505050505081526020019060010190612e31565b6060601d805480602002602001604051908101604052809291908181526020016000905b82821015611c6c5760008481526020908190206040805180820182526002860290920180546001600160a01b03168352600181018054835181870281018701909452808452939491938583019392830182828015612fc057602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019060040190602082600301049283019260010382029150808411612f6d5790505b50505050508152505081526020019060010190612f01565b6060601c805480602002602001604051908101604052809291908181526020016000905b82821015611c6c5760008481526020908190206040805180820182526002860290920180546001600160a01b031683526001810180548351818702810187019094528084529394919385830193928301828280156130bb57602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190600401906020826003010492830192600103820291508084116130685790505b50505050508152505081526020019060010190612ffc565b60606019805480602002602001604051908101604052809291908181526020016000905b82821015611c6c57838290600052602060002001805461311690618ffb565b80601f016020809104026020016040519081016040528092919081815260200182805461314290618ffb565b801561318f5780601f106131645761010080835404028352916020019161318f565b820191906000526020600020905b81548152906001019060200180831161317257829003601f168201915b5050505050815260200190600101906130f7565b6026546040516001600160a01b03909116602482015260009060440160408051601f19818403018152918152602080830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f84fae760000000000000000000000000000000000000000000000000000000001790525490517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b1580156132a657600080fd5b505af11580156132ba573d6000803e3d6000fd5b505060255460265460405160609190911b6bffffffffffffffffffffffff19166020820152600193508392506001600160a01b03909116907f5322ffbbf9261ff1f8138247942d2b03b28717141ef0a0dd080fc4be9c4e78d39060340160408051601f19818403018152908290526133339187906190a5565b60405180910390a3602080546026546040516001600160a01b0392831693635d40e1789361337b9316910160609190911b6bffffffffffffffffffffffff1916815260140190565b60405160208183030381529060405283856040518463ffffffff1660e01b81526004016133aa93929190619048565b600060405180830381600087803b1580156133c457600080fd5b505af11580156133d8573d6000803e3d6000fd5b505050505050565b60085460009060ff16156133f8575060085460ff1690565b6040517f667f9d70000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d600482018190527f6661696c65640000000000000000000000000000000000000000000000000000602483015260009163667f9d7090604401602060405180830381865afa158015613489573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134ad9190618ee1565b1415905090565b6040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527f5d67094f000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b15801561353957600080fd5b505af115801561354d573d6000803e3d6000fd5b50506020805460265460405160609190911b6bffffffffffffffffffffffff1916928101929092526001600160a01b0316925063135390f9915060340160408051601f19818403018152908290526021547fffffffff0000000000000000000000000000000000000000000000000000000060e085901b168352611b19926000916001600160a01b031690600401619073565b6026546040516001600160a01b03909116602482015260009060440160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f84fae76000000000000000000000000000000000000000000000000000000000179052517fc31eb0e00000000000000000000000000000000000000000000000000000000081527f5d67094f000000000000000000000000000000000000000000000000000000006004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b1580156136da57600080fd5b505af11580156136ee573d6000803e3d6000fd5b50506020805460265460405160609190911b6bffffffffffffffffffffffff1916928101929092526001600160a01b03169250637993c1e0915060340160408051601f19818403018152908290526021547fffffffff0000000000000000000000000000000000000000000000000000000060e085901b168352611de6926000916001600160a01b0316908790600401618efa565b6021546025546040516370a0823160e01b81526001600160a01b03918216600482015260019260009216906370a0823190602401602060405180830381865afa1580156137d4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137f89190618ee1565b6021546040517fa9059cbb0000000000000000000000000000000000000000000000000000000081526101236004820152602481018390529192506001600160a01b03169063a9059cbb906044016020604051808303816000875af1158015613865573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138899190618ebf565b506027546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156138fc57600080fd5b505af1158015613910573d6000803e3d6000fd5b50506021546040517ff687d12a000000000000000000000000000000000000000000000000000000008152600a60048201526001600160a01b03909116925063f687d12a9150602401600060405180830381600087803b15801561397357600080fd5b505af1158015613987573d6000803e3d6000fd5b50506040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527ffe382aa7000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e091506024015b600060405180830381600087803b158015613a1157600080fd5b505af1158015613a25573d6000803e3d6000fd5b50506020805460265460405160609190911b6bffffffffffffffffffffffff1916928101929092526001600160a01b0316925063135390f9915060340160408051601f19818403018152908290526021547fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1683526133aa9287916001600160a01b031690600401619073565b6022546025546040516370a0823160e01b81526001600160a01b03918216600482015260019260009216906370a0823190602401602060405180830381865afa158015613b08573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b2c9190618ee1565b6022546020546040516370a0823160e01b81526001600160a01b0391821660048201529293506000929116906370a0823190602401602060405180830381865afa158015613b7e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613ba29190618ee1565b6027546025546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152929350163190600190737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015613c2057600080fd5b505af1158015613c34573d6000803e3d6000fd5b50506022546020546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152600060248201529116925063095ea7b391506044016020604051808303816000875af1158015613ca6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613cca9190618ebf565b507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b031663f48448146040518163ffffffff1660e01b8152600401600060405180830381600087803b158015613d2957600080fd5b505af1158015613d3d573d6000803e3d6000fd5b50506020546040517f441a3e7000000000000000000000000000000000000000000000000000000000815260048101899052602481018590526001600160a01b03909116925063441a3e709150604401600060405180830381600087803b158015613da757600080fd5b505af1158015613dbb573d6000803e3d6000fd5b50506022546025546040516370a0823160e01b81526001600160a01b03918216600482015260009450911691506370a0823190602401602060405180830381865afa158015613e0e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613e329190618ee1565b9050613e3e8582614814565b6022546020546040516370a0823160e01b81526001600160a01b03918216600482015260009291909116906370a0823190602401602060405180830381865afa158015613e8f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613eb39190618ee1565b9050613ebf8582614814565b602754612b879085906001600160a01b031631614814565b60606015805480602002602001604051908101604052809291908181526020018280548015611a25576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311611a07575050505050905090565b6022546025546040516370a0823160e01b81526001600160a01b03918216600482015260019260009216906370a0823190602401602060405180830381865afa158015613f88573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613fac9190618ee1565b6022546020546040516370a0823160e01b81526001600160a01b0391821660048201529293506000929116906370a0823190602401602060405180830381865afa158015613ffe573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906140229190618ee1565b6027546020546040517f81bad6f30000000000000000000000000000000000000000000000000000000081526001600482018190526024820181905260448201819052606482018190526001600160a01b0392831660848301529394509116319190737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b1580156140bd57600080fd5b505af11580156140d1573d6000803e3d6000fd5b505060255460275460405160609190911b6bffffffffffffffffffffffff191660208201528493506001600160a01b0390911691507fde19dbe881cc0aeeb6e73ce19ac7b5ca695e6be8a076e3eb42292005a7fec1b59060340160408051601f198184030181529082905260225461415b926001600160a01b03909116908b9060009081906190ca565b60405180910390a36020546040517f441a3e7000000000000000000000000000000000000000000000000000000000815260048101879052602481018390526001600160a01b039091169063441a3e7090604401600060405180830381600087803b1580156141c957600080fd5b505af11580156141dd573d6000803e3d6000fd5b50506022546025546040516370a0823160e01b81526001600160a01b03918216600482015260009450911691506370a0823190602401602060405180830381865afa158015614230573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906142549190618ee1565b9050614264611530600187618fd5565b6022546020546040516370a0823160e01b81526001600160a01b03918216600482015260009291909116906370a0823190602401602060405180830381865afa1580156142b5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906142d99190618ee1565b90506142e58582614814565b612b876115c5856001618fe8565b6021546025546040516370a0823160e01b81526001600160a01b03918216600482015260019260009216906370a0823190602401602060405180830381865afa158015614344573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906143689190618ee1565b6020546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b1580156143f957600080fd5b505af115801561440d573d6000803e3d6000fd5b505060255460265460405160609190911b6bffffffffffffffffffffffff19166020820152600093506001600160a01b0390911691507fde19dbe881cc0aeeb6e73ce19ac7b5ca695e6be8a076e3eb42292005a7fec1b59060340160408051601f198184030181528282526021547f4d8943bb000000000000000000000000000000000000000000000000000000008452915190926001600160a01b039092169188916000918491634d8943bb916004808201926020929091908290030181865afa1580156144e0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906145049190618ee1565b6040516145159594939291906190ca565b60405180910390a3602080546026546040516001600160a01b039283169363135390f99361455d9316910160609190911b6bffffffffffffffffffffffff1916815260140190565b60408051601f19818403018152908290526021547fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1683526145b29287916001600160a01b031690600401619073565b600060405180830381600087803b1580156145cc57600080fd5b505af11580156145e0573d6000803e3d6000fd5b50506021546025546040516370a0823160e01b81526001600160a01b03918216600482015260009450911691506370a0823190602401602060405180830381865afa158015614633573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906146579190618ee1565b90506129856115308484618fd5565b6021546025546040516370a0823160e01b81526001600160a01b03918216600482015260029260009216906370a0823190602401602060405180830381865afa1580156146b7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906146db9190618ee1565b6021549091506001600160a01b031663a9059cbb6101236146fd600185618fd5565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303816000875af1158015614760573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906147849190618ebf565b506040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527ffe382aa7000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e0906024016139f7565b60006147ff61893a565b61480a848483614893565b9150505b92915050565b6040517f98296c540000000000000000000000000000000000000000000000000000000081526004810183905260248101829052737109709ecfa91a80626ff3989d68f67f5b1dd12d906398296c549060440160006040518083038186803b15801561487f57600080fd5b505afa1580156133d8573d6000803e3d6000fd5b6000806148a0858461490e565b90506149036040518060400160405280601d81526020017f4552433139363750726f78792e736f6c3a4552433139363750726f787900000081525082866040516020016148ee92919061911b565b6040516020818303038152906040528561491a565b9150505b9392505050565b60006149078383614948565b60c0810151516000901561493e5761493784848460c00151614963565b9050614907565b6149378484614b09565b60006149548383614bf4565b6149078383602001518461491a565b60008061496e614c04565b9050600061497c8683614cd7565b90506000614993826060015183602001518561517d565b905060006149a38383898961538f565b905060006149b08261620c565b602081015181519192509060030b15614a23578982604001516040516020016149da92919061913d565b60408051601f19818403018152908290527f08c379a0000000000000000000000000000000000000000000000000000000008252614a1a916004016191be565b60405180910390fd5b6000614a666040518060400160405280601581526020017f4465706c6f79656420746f20616464726573733a2000000000000000000000008152508360016163db565b6040517fc6ce059d000000000000000000000000000000000000000000000000000000008152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c6ce059d90614ab99084906004016191be565b602060405180830381865afa158015614ad6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614afa9190618da1565b9b9a5050505050505050505050565b6040517f8d1cc9250000000000000000000000000000000000000000000000000000000081526000908190737109709ecfa91a80626ff3989d68f67f5b1dd12d90638d1cc92590614b5e9087906004016191be565b600060405180830381865afa158015614b7b573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052614ba391908101906192b9565b90506000614bd18285604051602001614bbd9291906192ee565b6040516020818303038152906040526165db565b90506001600160a01b03811661480a5784846040516020016149da92919061931d565b614c00828260006165ee565b5050565b604080518082018252600381527f6f75740000000000000000000000000000000000000000000000000000000000602082015290517fd145736c000000000000000000000000000000000000000000000000000000008152606091737109709ecfa91a80626ff3989d68f67f5b1dd12d91829063d145736c90614c8b9084906004016193c8565b600060405180830381865afa158015614ca8573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052614cd0919081019061940f565b9250505090565b614d096040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b6000737109709ecfa91a80626ff3989d68f67f5b1dd12d9050614d546040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b614d5d856166f1565b60208201526000614d6d86616ad6565b90506000836001600160a01b031663d930a0e66040518163ffffffff1660e01b8152600401600060405180830381865afa158015614daf573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052614dd7919081019061940f565b86838560200151604051602001614df19493929190619458565b60408051601f19818403018152908290527f60f9bb1100000000000000000000000000000000000000000000000000000000825291506000906001600160a01b038616906360f9bb1190614e499085906004016191be565b600060405180830381865afa158015614e66573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052614e8e919081019061940f565b6040517fdb4235f60000000000000000000000000000000000000000000000000000000081529091506001600160a01b0386169063db4235f690614ed690849060040161955c565b602060405180830381865afa158015614ef3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614f179190618ebf565b614f2c57816040516020016149da91906195ae565b6040517f49c4fac80000000000000000000000000000000000000000000000000000000081526001600160a01b038616906349c4fac890614f71908490600401619640565b600060405180830381865afa158015614f8e573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052614fb6919081019061940f565b84526040517fdb4235f60000000000000000000000000000000000000000000000000000000081526001600160a01b0386169063db4235f690614ffd908490600401619692565b602060405180830381865afa15801561501a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061503e9190618ebf565b156150d3576040517f49c4fac80000000000000000000000000000000000000000000000000000000081526001600160a01b038616906349c4fac890615088908490600401619692565b600060405180830381865afa1580156150a5573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526150cd919081019061940f565b60408501525b846001600160a01b03166349c4fac88286600001516040516020016150f891906196e4565b6040516020818303038152906040526040518363ffffffff1660e01b81526004016151249291906190a5565b600060405180830381865afa158015615141573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052615169919081019061940f565b606085015250608083015250949350505050565b60408051600480825260a0820190925260609160009190816020015b60608152602001906001900390816151995790505090506040518060400160405280600481526020017f6772657000000000000000000000000000000000000000000000000000000000815250816000815181106151f9576151f9619750565b60200260200101819052506040518060400160405280600381526020017f2d726c00000000000000000000000000000000000000000000000000000000008152508160018151811061524d5761524d619750565b602002602001018190525084604051602001615269919061977f565b6040516020818303038152906040528160028151811061528b5761528b619750565b6020026020010181905250826040516020016152a791906197eb565b604051602081830303815290604052816003815181106152c9576152c9619750565b602002602001018190525060006152df8261620c565b602080820151604080518082018252600581527f2e6a736f6e00000000000000000000000000000000000000000000000000000081850190815282518084018452600080825290860152825180840190935290518252928101929092529192506153709060408051808201825260008082526020918201528151808301909252845182528085019082015290616d59565b61538557856040516020016149da919061982c565b9695505050505050565b60a0810151604080518082018252600080825260209182015281518083019092528251808352928101910152606090737109709ecfa91a80626ff3989d68f67f5b1dd12d90156153df565b511590565b6155535782602001511561549b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605860248201527f54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f742060448201527f62652075736564207768656e207468652060736b6970566572696679536f757260648201527f6365436f646560206f7074696f6e206973206074727565600000000000000000608482015260a401614a1a565b8260c0015115615553576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605360248201527f54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f742060448201527f62652075736564207768656e207468652060736b69704c6963656e736554797060648201527f6560206f7074696f6e2069732060747275656000000000000000000000000000608482015260a401614a1a565b6040805160ff8082526120008201909252600091816020015b606081526020019060019003908161556c57905050905060006040518060400160405280600381526020017f6e707800000000000000000000000000000000000000000000000000000000008152508282806155c7906198bd565b935060ff16815181106155dc576155dc619750565b60200260200101819052506040518060400160405280600d81526020017f302e302e312d616c7068612e370000000000000000000000000000000000000081525060405160200161562d91906198dc565b604051602081830303815290604052828280615648906198bd565b935060ff168151811061565d5761565d619750565b60200260200101819052506040518060400160405280600681526020017f6465706c6f7900000000000000000000000000000000000000000000000000008152508282806156aa906198bd565b935060ff16815181106156bf576156bf619750565b60200260200101819052506040518060400160405280600e81526020017f2d2d636f6e74726163744e616d6500000000000000000000000000000000000081525082828061570c906198bd565b935060ff168151811061572157615721619750565b6020026020010181905250876020015182828061573d906198bd565b935060ff168151811061575257615752619750565b60200260200101819052506040518060400160405280600e81526020017f2d2d636f6e74726163745061746800000000000000000000000000000000000081525082828061579f906198bd565b935060ff16815181106157b4576157b4619750565b6020908102919091010152875182826157cc816198bd565b935060ff16815181106157e1576157e1619750565b60200260200101819052506040518060400160405280600981526020017f2d2d636861696e4964000000000000000000000000000000000000000000000081525082828061582e906198bd565b935060ff168151811061584357615843619750565b602002602001018190525061585746616dba565b8282615862816198bd565b935060ff168151811061587757615877619750565b60200260200101819052506040518060400160405280600f81526020017f2d2d6275696c64496e666f46696c6500000000000000000000000000000000008152508282806158c4906198bd565b935060ff16815181106158d9576158d9619750565b6020026020010181905250868282806158f1906198bd565b935060ff168151811061590657615906619750565b6020908102919091010152855115615a2d5760408051808201909152601581527f2d2d636f6e7374727563746f7242797465636f6465000000000000000000000060208201528282615957816198bd565b935060ff168151811061596c5761596c619750565b60209081029190910101526040517f71aad10d0000000000000000000000000000000000000000000000000000000081526001600160a01b038416906371aad10d906159bc9089906004016191be565b600060405180830381865afa1580156159d9573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052615a01919081019061940f565b8282615a0c816198bd565b935060ff1681518110615a2157615a21619750565b60200260200101819052505b846020015115615afd5760408051808201909152601281527f2d2d766572696679536f75726365436f6465000000000000000000000000000060208201528282615a76816198bd565b935060ff1681518110615a8b57615a8b619750565b60200260200101819052506040518060400160405280600581526020017f66616c7365000000000000000000000000000000000000000000000000000000815250828280615ad8906198bd565b935060ff1681518110615aed57615aed619750565b6020026020010181905250615cc4565b615b356153da8660a0015160408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b615bc85760408051808201909152600d81527f2d2d6c6963656e7365547970650000000000000000000000000000000000000060208201528282615b78816198bd565b935060ff1681518110615b8d57615b8d619750565b60200260200101819052508460a00151604051602001615bad919061977f565b604051602081830303815290604052828280615ad8906198bd565b8460c00151158015615c0b575060408089015181518083018352600080825260209182015282518084019093528151835290810190820152615c0990511590565b155b15615cc45760408051808201909152600d81527f2d2d6c6963656e7365547970650000000000000000000000000000000000000060208201528282615c4f816198bd565b935060ff1681518110615c6457615c64619750565b6020026020010181905250615c7888616e5a565b604051602001615c88919061977f565b604051602081830303815290604052828280615ca3906198bd565b935060ff1681518110615cb857615cb8619750565b60200260200101819052505b60408086015181518083018352600080825260209182015282518084019093528151835290810190820152615cf890511590565b615d8d5760408051808201909152600b81527f2d2d72656c61796572496400000000000000000000000000000000000000000060208201528282615d3b816198bd565b935060ff1681518110615d5057615d50619750565b60200260200101819052508460400151828280615d6c906198bd565b935060ff1681518110615d8157615d81619750565b60200260200101819052505b606085015115615eae5760408051808201909152600681527f2d2d73616c74000000000000000000000000000000000000000000000000000060208201528282615dd6816198bd565b935060ff1681518110615deb57615deb619750565b602090810291909101015260608501516040517fb11a19e800000000000000000000000000000000000000000000000000000000815260048101919091526001600160a01b0384169063b11a19e890602401600060405180830381865afa158015615e5a573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052615e82919081019061940f565b8282615e8d816198bd565b935060ff1681518110615ea257615ea2619750565b60200260200101819052505b60e08501515115615f555760408051808201909152600a81527f2d2d6761734c696d69740000000000000000000000000000000000000000000060208201528282615ef8816198bd565b935060ff1681518110615f0d57615f0d619750565b6020026020010181905250615f298560e0015160000151616dba565b8282615f34816198bd565b935060ff1681518110615f4957615f49619750565b60200260200101819052505b60e08501516020015115615fff5760408051808201909152600a81527f2d2d67617350726963650000000000000000000000000000000000000000000060208201528282615fa2816198bd565b935060ff1681518110615fb757615fb7619750565b6020026020010181905250615fd38560e0015160200151616dba565b8282615fde816198bd565b935060ff1681518110615ff357615ff3619750565b60200260200101819052505b60e085015160400151156160a95760408051808201909152600e81527f2d2d6d61784665655065724761730000000000000000000000000000000000006020820152828261604c816198bd565b935060ff168151811061606157616061619750565b602002602001018190525061607d8560e0015160400151616dba565b8282616088816198bd565b935060ff168151811061609d5761609d619750565b60200260200101819052505b60e085015160600151156161535760408051808201909152601681527f2d2d6d61785072696f7269747946656550657247617300000000000000000000602082015282826160f6816198bd565b935060ff168151811061610b5761610b619750565b60200260200101819052506161278560e0015160600151616dba565b8282616132816198bd565b935060ff168151811061614757616147619750565b60200260200101819052505b60008160ff1667ffffffffffffffff811115616171576161716191d1565b6040519080825280602002602001820160405280156161a457816020015b606081526020019060019003908161618f5790505b50905060005b8260ff168160ff1610156161fd57838160ff16815181106161cd576161cd619750565b6020026020010151828260ff16815181106161ea576161ea619750565b60209081029190910101526001016161aa565b5093505050505b949350505050565b6162336040518060600160405280600060030b815260200160608152602001606081525090565b60408051808201825260048082527f6261736800000000000000000000000000000000000000000000000000000000602083015291517fd145736c000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d92600091849163d145736c916162b991869101619947565b600060405180830381865afa1580156162d6573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526162fe919081019061940f565b9050600061630c8683617949565b90506000846001600160a01b031663f45c1ce7836040518263ffffffff1660e01b815260040161633c9190618c93565b6000604051808303816000875af115801561635b573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052616383919081019061998e565b805190915060030b1580159061639c5750602081015151155b80156163ab5750604081015151155b1561538557816000815181106163c3576163c3619750565b60200260200101516040516020016149da9190619a44565b606060006164108560408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6040805180820182526000808252602091820152815180830190925286518252808701908201529091506164479082905b90617a9e565b156165a45760006164c4826164be846164b861648a8a60408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6040805180820182526000808252602091820152815180830190925282518252918201519181019190915290565b90617ac5565b90617b27565b604080518082018252600181527f0a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152909150616528908290617a9e565b1561659257604080518082018252600181527f0a000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261658f905b8290617bac565b90505b61659b81617bd2565b92505050614907565b82156165bd5784846040516020016149da929190619c30565b5050604080516020810190915260008152614907565b509392505050565b6000808251602084016000f09392505050565b8160a00151156165fd57505050565b600061660a848484617c3b565b905060006166178261620c565b602081015181519192509060030b1580156166b35750604080518082018252600781527f5355434345535300000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526166b390604080518082018252600080825260209182015281518083019092528451825280850190820152616441565b156166c057505050505050565b604082015151156166e05781604001516040516020016149da9190619cd7565b806040516020016149da9190619d35565b606060006167268360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600481527f2e736f6c000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015290915061678b905b8290616d59565b156167fa57604080518082018252600481527f2e736f6c0000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152614907906167f59083906181d6565b617bd2565b604080518082018252600181527f3a000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261685c905b8290618260565b60010361692957604080518082018252600181527f3a00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526168c290616588565b50604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152614907906167f5905b8390617bac565b604080518082018252600581527f2e6a736f6e0000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261698890616784565b15616abf57604080518082018252600181527f2f000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201819052845180860190955292518452830152906169f09083906182fa565b905060008160018351616a039190618fd5565b81518110616a1357616a13619750565b60200260200101519050616ab66167f5616a896040518060400160405280600581526020017f2e6a736f6e00000000000000000000000000000000000000000000000000000081525060408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600080825260209182015281518083019092528551825280860190820152906181d6565b95945050505050565b826040516020016149da9190619da0565b50919050565b60606000616b0b8360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600481527f2e736f6c0000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152909150616b6d90616784565b15616b7b5761490781617bd2565b604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616bda90616855565b600103616c4457604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152614907906167f590616922565b604080518082018252600581527f2e6a736f6e00000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616ca390616784565b15616abf57604080518082018252600181527f2f00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820181905284518086019095529251845283015290616d0b9083906182fa565b9050600181511115616d47578060028251616d269190618fd5565b81518110616d3657616d36619750565b602002602001015192505050919050565b50826040516020016149da9190619da0565b805182516000911115616d6e5750600061480e565b81518351602085015160009291616d8491618fe8565b616d8e9190618fd5565b905082602001518103616da557600191505061480e565b82516020840151819020912014905092915050565b60606000616dc78361839f565b600101905060008167ffffffffffffffff811115616de757616de76191d1565b6040519080825280601f01601f191660200182016040528015616e11576020820181803683370190505b5090508181016020015b600019017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a8504945084616e1b57509392505050565b604081810151815180830183526000808252602091820181905283518085018552835181529282018383015283518085018552600a81527f554e4c4943454e5345440000000000000000000000000000000000000000000081840190815285518087018752838152840192909252845180860190955251845290830152606091616ee6905b8290618481565b15616f2657505060408051808201909152600481527f4e6f6e65000000000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600981527f556e6c6963656e7365000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616f8590616edf565b15616fc557505060408051808201909152600981527f556e6c6963656e736500000000000000000000000000000000000000000000006020820152919050565b604080518082018252600381527f4d495400000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261702490616edf565b1561706457505060408051808201909152600381527f4d495400000000000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f47504c2d322e302d6f6e6c790000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526170c390616edf565b806171285750604080518082018252601081527f47504c2d322e302d6f722d6c61746572000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261712890616edf565b1561716857505060408051808201909152600981527f474e552047504c763200000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f47504c2d332e302d6f6e6c790000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526171c790616edf565b8061722c5750604080518082018252601081527f47504c2d332e302d6f722d6c61746572000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261722c90616edf565b1561726c57505060408051808201909152600981527f474e552047504c763300000000000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4c47504c2d322e312d6f6e6c7900000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526172cb90616edf565b806173305750604080518082018252601181527f4c47504c2d322e312d6f722d6c617465720000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261733090616edf565b1561737057505060408051808201909152600c81527f474e55204c47504c76322e3100000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4c47504c2d332e302d6f6e6c7900000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526173cf90616edf565b806174345750604080518082018252601181527f4c47504c2d332e302d6f722d6c617465720000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261743490616edf565b1561747457505060408051808201909152600a81527f474e55204c47504c7633000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f4253442d322d436c617573650000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526174d390616edf565b1561751357505060408051808201909152600c81527f4253442d322d436c6175736500000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f4253442d332d436c6175736500000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261757290616edf565b156175b257505060408051808201909152600c81527f4253442d332d436c6175736500000000000000000000000000000000000000006020820152919050565b604080518082018252600781527f4d504c2d322e30000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261761190616edf565b1561765157505060408051808201909152600781527f4d504c2d322e30000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600781527f4f534c2d332e3000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526176b090616edf565b156176f057505060408051808201909152600781527f4f534c2d332e30000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600a81527f4170616368652d322e30000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261774f90616edf565b1561778f57505060408051808201909152600a81527f4170616368652d322e30000000000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4147504c2d332e302d6f6e6c7900000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526177ee90616edf565b806178535750604080518082018252601181527f4147504c2d332e302d6f722d6c617465720000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261785390616edf565b1561789357505060408051808201909152600a81527f474e55204147504c7633000000000000000000000000000000000000000000006020820152919050565b604080518082018252600881527f4255534c2d312e31000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526178f290616edf565b1561793257505060408051808201909152600781527f42534c20312e31000000000000000000000000000000000000000000000000006020820152919050565b604080840151845191516149da9290602001619e7e565b60608060005b84518110156179d4578185828151811061796b5761796b619750565b60200260200101516040516020016179849291906192ee565b6040516020818303038152906040529150600185516179a39190618fd5565b81146179cc57816040516020016179ba9190619fe7565b60405160208183030381529060405291505b60010161794f565b5060408051600380825260808201909252600091816020015b60608152602001906001900390816179ed5790505090508381600081518110617a1857617a18619750565b60200260200101819052506040518060400160405280600281526020017f2d6300000000000000000000000000000000000000000000000000000000000081525081600181518110617a6c57617a6c619750565b60200260200101819052508181600281518110617a8b57617a8b619750565b6020908102919091010152949350505050565b6020808301518351835192840151600093617abc9291849190618495565b14159392505050565b60408051808201909152600080825260208201526000617af784600001518560200151856000015186602001516185a6565b9050836020015181617b099190618fd5565b84518590617b18908390618fd5565b90525060208401525090919050565b6040805180820190915260008082526020820152815183511015617b4c57508161480e565b6020808301519084015160019114617b735750815160208481015190840151829020919020145b8015617ba457825184518590617b8a908390618fd5565b9052508251602085018051617ba0908390618fe8565b9052505b509192915050565b6040805180820190915260008082526020820152617bcb8383836186c6565b5092915050565b60606000826000015167ffffffffffffffff811115617bf357617bf36191d1565b6040519080825280601f01601f191660200182016040528015617c1d576020820181803683370190505b5090506000602082019050617bcb8185602001518660000151618771565b60606000617c47614c04565b6040805160ff808252612000820190925291925060009190816020015b6060815260200190600190039081617c6457905050905060006040518060400160405280600381526020017f6e70780000000000000000000000000000000000000000000000000000000000815250828280617cbf906198bd565b935060ff1681518110617cd457617cd4619750565b60200260200101819052506040518060400160405280600781526020017f5e312e33322e3300000000000000000000000000000000000000000000000000815250604051602001617d25919061a028565b604051602081830303815290604052828280617d40906198bd565b935060ff1681518110617d5557617d55619750565b60200260200101819052506040518060400160405280600881526020017f76616c6964617465000000000000000000000000000000000000000000000000815250828280617da2906198bd565b935060ff1681518110617db757617db7619750565b602002602001018190525082604051602001617dd391906197eb565b604051602081830303815290604052828280617dee906198bd565b935060ff1681518110617e0357617e03619750565b60200260200101819052506040518060400160405280600a81526020017f2d2d636f6e747261637400000000000000000000000000000000000000000000815250828280617e50906198bd565b935060ff1681518110617e6557617e65619750565b6020026020010181905250617e7a87846187eb565b8282617e85816198bd565b935060ff1681518110617e9a57617e9a619750565b602090810291909101015285515115617f465760408051808201909152600b81527f2d2d7265666572656e636500000000000000000000000000000000000000000060208201528282617eec816198bd565b935060ff1681518110617f0157617f01619750565b6020026020010181905250617f1a8660000151846187eb565b8282617f25816198bd565b935060ff1681518110617f3a57617f3a619750565b60200260200101819052505b856080015115617fb45760408051808201909152601881527f2d2d756e73616665536b697053746f72616765436865636b000000000000000060208201528282617f8f816198bd565b935060ff1681518110617fa457617fa4619750565b602002602001018190525061801a565b841561801a5760408051808201909152601281527f2d2d726571756972655265666572656e6365000000000000000000000000000060208201528282617ff9816198bd565b935060ff168151811061800e5761800e619750565b60200260200101819052505b604086015151156180b65760408051808201909152600d81527f2d2d756e73616665416c6c6f770000000000000000000000000000000000000060208201528282618064816198bd565b935060ff168151811061807957618079619750565b60200260200101819052508560400151828280618095906198bd565b935060ff16815181106180aa576180aa619750565b60200260200101819052505b8560600151156181205760408051808201909152601481527f2d2d756e73616665416c6c6f7752656e616d6573000000000000000000000000602082015282826180ff816198bd565b935060ff168151811061811457618114619750565b60200260200101819052505b60008160ff1667ffffffffffffffff81111561813e5761813e6191d1565b60405190808252806020026020018201604052801561817157816020015b606081526020019060019003908161815c5790505b50905060005b8260ff168160ff1610156181ca57838160ff168151811061819a5761819a619750565b6020026020010151828260ff16815181106181b7576181b7619750565b6020908102919091010152600101618177565b50979650505050505050565b60408051808201909152600080825260208201528151835110156181fb57508161480e565b8151835160208501516000929161821191618fe8565b61821b9190618fd5565b6020840151909150600190821461823c575082516020840151819020908220145b801561825757835185518690618253908390618fd5565b9052505b50929392505050565b600080826000015161828485600001518660200151866000015187602001516185a6565b61828e9190618fe8565b90505b835160208501516182a29190618fe8565b8111617bcb57816182b28161a06d565b92505082600001516182e98560200151836182cd9190618fd5565b86516182d99190618fd5565b83866000015187602001516185a6565b6182f39190618fe8565b9050618291565b606060006183088484618260565b618313906001618fe8565b67ffffffffffffffff81111561832b5761832b6191d1565b60405190808252806020026020018201604052801561835e57816020015b60608152602001906001900390816183495790505b50905060005b81518110156165d35761837a6167f58686617bac565b82828151811061838c5761838c619750565b6020908102919091010152600101618364565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f01000000000000000083106183e8577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310618414576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc10000831061843257662386f26fc10000830492506010015b6305f5e100831061844a576305f5e100830492506008015b612710831061845e57612710830492506004015b60648310618470576064830492506002015b600a831061480e5760010192915050565b600061848d838361882b565b159392505050565b60008085841161859c576020841161854857600084156184e05760016184bc866020618fd5565b6184c790600861a087565b6184d290600261a185565b6184dc9190618fd5565b1990505b83518116856184ef8989618fe8565b6184f99190618fd5565b805190935082165b8181146185335787841161851b5787945050505050616204565b836185258161a191565b945050828451169050618501565b61853d8785618fe8565b945050505050616204565b8383206185558588618fd5565b61855f9087618fe8565b91505b85821061859a578482208082036185875761857d8684618fe8565b9350505050616204565b618592600184618fd5565b925050618562565b505b5092949350505050565b600083818685116186b1576020851161866057600085156185f25760016185ce876020618fd5565b6185d990600861a087565b6185e490600261a185565b6185ee9190618fd5565b1990505b845181166000876186038b8b618fe8565b61860d9190618fd5565b855190915083165b8281146186525781861061863a5761862d8b8b618fe8565b9650505050505050616204565b856186448161a06d565b965050838651169050618615565b859650505050505050616204565b508383206000905b6186728689618fd5565b82116186af5785832080820361868e5783945050505050616204565b618699600185618fe8565b93505081806186a79061a06d565b925050618668565b505b6186bb8787618fe8565b979650505050505050565b604080518082019091526000808252602082015260006186f885600001518660200151866000015187602001516185a6565b6020808701805191860191909152519091506187149082618fd5565b8352845160208601516187279190618fe8565b81036187365760008552618768565b835183516187449190618fe8565b85518690618753908390618fd5565b90525083516187629082618fe8565b60208601525b50909392505050565b602081106187a95781518352618788602084618fe8565b9250618795602083618fe8565b91506187a2602082618fd5565b9050618771565b60001981156187d85760016187bf836020618fd5565b6187cb9061010061a185565b6187d59190618fd5565b90505b9151835183169219169190911790915250565b606060006187f98484614cd7565b80516020808301516040519394506188139390910161a1a8565b60405160208183030381529060405291505092915050565b815181516000919081111561883e575081515b6020808501519084015160005b838110156188f757825182518082146188c75760001960208710156188a657600184618878896020618fd5565b6188829190618fe8565b61888d90600861a087565b61889890600261a185565b6188a29190618fd5565b1990505b81811683821681810391146188c457975061480e9650505050505050565b50505b6188d2602086618fe8565b94506188df602085618fe8565b935050506020816188f09190618fe8565b905061884b565b5084518651615385919061a200565b610b678061a22183390190565b61053f8061ad8883390190565b61106f8061b2c783390190565b611bb98061c33683390190565b6040518060e0016040528060608152602001606081526020016060815260200160001515815260200160001515815260200160001515815260200161897d618982565b905290565b6040518061010001604052806000151581526020016000151581526020016060815260200160008019168152602001606081526020016060815260200160001515815260200161897d6040518060800160405280600081526020016000815260200160008152602001600081525090565b602080825282518282018190526000918401906040840190835b81811015618a345783516001600160a01b0316835260209384019390920191600101618a0d565b509095945050505050565b60005b83811015618a5a578181015183820152602001618a42565b50506000910152565b60008151808452618a7b816020860160208601618a3f565b601f01601f19169290920160200192915050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015618b8b577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452815180516001600160a01b03168652602090810151604082880181905281519088018190529101906060600582901b88018101919088019060005b81811015618b71577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa08a8503018352618b5b848651618a63565b6020958601959094509290920191600101618b21565b509197505050602094850194929092019150600101618ab7565b50929695505050505050565b600081518084526020840193506020830160005b82811015618beb5781517fffffffff0000000000000000000000000000000000000000000000000000000016865260209586019590910190600101618bab565b5093949350505050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015618b8b577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08786030184528151805160408752618c616040880182618a63565b9050602082015191508681036020880152618c7c8183618b97565b965050506020938401939190910190600101618c1d565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015618b8b577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452618cf5858351618a63565b94506020938401939190910190600101618cbb565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015618b8b577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc087860301845281516001600160a01b0381511686526020810151905060406020870152618d8b6040870182618b97565b9550506020938401939190910190600101618d32565b600060208284031215618db357600080fd5b81516001600160a01b038116811461490757600080fd5b610100815260056101008201527f544f4b454e000000000000000000000000000000000000000000000000000000610120820152610140602082015260036101408201527f544b4e000000000000000000000000000000000000000000000000000000000061016082015260006101808201905060ff8816604083015286606083015260038610618e84577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b8560808301528460a0830152618ea560c08301856001600160a01b03169052565b6001600160a01b03831660e0830152979650505050505050565b600060208284031215618ed157600080fd5b8151801515811461490757600080fd5b600060208284031215618ef357600080fd5b5051919050565b608081526000618f0d6080830187618a63565b8560208401526001600160a01b038516604084015282810360608401526186bb8185618a63565b60c081526000618f4760c0830189618a63565b6001600160a01b038816602084015286604084015285606084015284608084015282810360a0840152618f7a8185618a63565b9998505050505050505050565b838152826020820152606060408201526000616ab66060830184618a63565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8181038181111561480e5761480e618fa6565b8082018082111561480e5761480e618fa6565b600181811c9082168061900f57607f821691505b602082108103616ad0577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60608152600061905b6060830186618a63565b84602084015282810360408401526153858185618a63565b6060815260006190866060830186618a63565b90508360208301526001600160a01b0383166040830152949350505050565b6040815260006190b86040830185618a63565b82810360208401526149038185618a63565b60c0815260006190dd60c0830188618a63565b6001600160a01b038716602084015285604084015284606084015283608084015282810360a084015260008152602081019150509695505050505050565b6001600160a01b03831681526040602082015260006162046040830184618a63565b7f4661696c656420746f206465706c6f7920636f6e74726163742000000000000081526000835161917581601a850160208801618a3f565b7f3a20000000000000000000000000000000000000000000000000000000000000601a9184019182015283516191b281601c840160208801618a3f565b01601c01949350505050565b6020815260006149076020830184618a63565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040516060810167ffffffffffffffff81118282101715619223576192236191d1565b60405290565b60008067ffffffffffffffff841115619244576192446191d1565b50604051601f19601f85018116603f0116810181811067ffffffffffffffff82111715619273576192736191d1565b60405283815290508082840185101561928b57600080fd5b6165d3846020830185618a3f565b600082601f8301126192aa57600080fd5b61490783835160208501619229565b6000602082840312156192cb57600080fd5b815167ffffffffffffffff8111156192e257600080fd5b61480a84828501619299565b60008351619300818460208801618a3f565b835190830190619314818360208801618a3f565b01949350505050565b7f4661696c656420746f206465706c6f7920636f6e74726163742000000000000081526000835161935581601a850160208801618a3f565b7f207573696e6720636f6e7374727563746f722064617461202200000000000000601a918401918201528351619392816033840160208801618a3f565b7f220000000000000000000000000000000000000000000000000000000000000060339290910191820152603401949350505050565b60408152600b60408201527f464f554e4452595f4f555400000000000000000000000000000000000000000060608201526080602082015260006149076080830184618a63565b60006020828403121561942157600080fd5b815167ffffffffffffffff81111561943857600080fd5b8201601f8101841361944957600080fd5b61480a84825160208401619229565b6000855161946a818460208a01618a3f565b7f2f0000000000000000000000000000000000000000000000000000000000000090830190815285516194a4816001840160208a01618a3f565b7f2f000000000000000000000000000000000000000000000000000000000000006001929091019182015284516194e2816002840160208901618a3f565b6001818301019150507f2f0000000000000000000000000000000000000000000000000000000000000060018201528351619524816002840160208801618a3f565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600292909101918201526007019695505050505050565b60408152600061956f6040830184618a63565b8281036020840152600481527f2e6173740000000000000000000000000000000000000000000000000000000060208201526040810191505092915050565b7f436f756c64206e6f742066696e642041535420696e20617274696661637420008152600082516195e681601f850160208701618a3f565b7f2e205365742060617374203d20747275656020696e20666f756e6472792e746f601f9390910192830152507f6d6c000000000000000000000000000000000000000000000000000000000000603f820152604101919050565b6040815260006196536040830184618a63565b8281036020840152601181527f2e6173742e6162736f6c7574655061746800000000000000000000000000000060208201526040810191505092915050565b6040815260006196a56040830184618a63565b8281036020840152600c81527f2e6173742e6c6963656e7365000000000000000000000000000000000000000060208201526040810191505092915050565b7f2e6d657461646174612e736f75726365732e5b2700000000000000000000000081526000825161971c816014850160208701618a3f565b7f275d2e6b656363616b32353600000000000000000000000000000000000000006014939091019283015250602001919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f22000000000000000000000000000000000000000000000000000000000000008152600082516197b7816001850160208701618a3f565b7f22000000000000000000000000000000000000000000000000000000000000006001939091019283015250600201919050565b600082516197fd818460208701618a3f565b7f2f6275696c642d696e666f000000000000000000000000000000000000000000920191825250600b01919050565b7f436f756c64206e6f742066696e64206275696c642d696e666f2066696c65207781527f697468206d61746368696e6720736f7572636520636f6465206861736820666f60208201527f7220636f6e7472616374200000000000000000000000000000000000000000006040820152600082516198b081604b850160208701618a3f565b91909101604b0192915050565b600060ff821660ff81036198d3576198d3618fa6565b60010192915050565b7f406f70656e7a657070656c696e2f646566656e6465722d6465706c6f792d636c81527f69656e742d636c6940000000000000000000000000000000000000000000000060208201526000825161993a816029850160208701618a3f565b9190910160290192915050565b60408152601660408201527f4f50454e5a455050454c494e5f424153485f504154480000000000000000000060608201526080602082015260006149076080830184618a63565b6000602082840312156199a057600080fd5b815167ffffffffffffffff8111156199b757600080fd5b8201606081850312156199c957600080fd5b6199d1619200565b81518060030b81146199e257600080fd5b8152602082015167ffffffffffffffff8111156199fe57600080fd5b619a0a86828501619299565b602083015250604082015167ffffffffffffffff811115619a2a57600080fd5b619a3686828501619299565b604083015250949350505050565b7f4661696c656420746f2072756e206261736820636f6d6d616e6420776974682081527f2200000000000000000000000000000000000000000000000000000000000000602082015260008251619aa2816021850160208701618a3f565b7f222e20496620796f7520617265207573696e672057696e646f77732c2073657460219390910192830152507f20746865204f50454e5a455050454c494e5f424153485f5041544820656e766960418201527f726f6e6d656e74207661726961626c6520746f207468652066756c6c7920717560618201527f616c69666965642070617468206f66207468652062617368206578656375746160818201527f626c652e20466f72206578616d706c652c20696620796f75206172652075736960a18201527f6e672047697420666f722057696e646f77732c206164642074686520666f6c6c60c18201527f6f77696e67206c696e6520696e20746865202e656e762066696c65206f66207960e18201527f6f75722070726f6a65637420287573696e6720666f727761726420736c6173686101018201527f6573293a0a4f50454e5a455050454c494e5f424153485f504154483d22433a2f6101218201527f50726f6772616d2046696c65732f4769742f62696e2f6261736822000000000061014182015261015c01919050565b7f4661696c656420746f2066696e64206c696e652077697468207072656669782081527f2700000000000000000000000000000000000000000000000000000000000000602082015260008351619c8e816021850160208801618a3f565b7f2720696e206f75747075743a20000000000000000000000000000000000000006021918401918201528351619ccb81602e840160208801618a3f565b01602e01949350505050565b7f4661696c656420746f2072756e2075706772616465207361666574792076616c81527f69646174696f6e3a20000000000000000000000000000000000000000000000060208201526000825161993a816029850160208701618a3f565b7f55706772616465207361666574792076616c69646174696f6e206661696c656481527f3a0a000000000000000000000000000000000000000000000000000000000000602082015260008251619d93816022850160208701618a3f565b9190910160220192915050565b7f436f6e7472616374206e616d6520000000000000000000000000000000000000815260008251619dd881600e850160208701618a3f565b7f206d75737420626520696e2074686520666f726d6174204d79436f6e74726163600e9390910192830152507f742e736f6c3a4d79436f6e7472616374206f72204d79436f6e74726163742e73602e8201527f6f6c206f72206f75742f4d79436f6e74726163742e736f6c2f4d79436f6e7472604e8201527f6163742e6a736f6e000000000000000000000000000000000000000000000000606e820152607601919050565b7f53504458206c6963656e7365206964656e746966696572200000000000000000815260008351619eb6816018850160208801618a3f565b7f20696e20000000000000000000000000000000000000000000000000000000006018918401918201528351619ef381601c840160208801618a3f565b7f20646f6573206e6f74206c6f6f6b206c696b65206120737570706f7274656420601c92909101918201527f6c6963656e736520666f7220626c6f636b206578706c6f726572207665726966603c8201527f69636174696f6e2e205573652074686520606c6963656e73655479706560206f605c8201527f7074696f6e20746f20737065636966792061206c6963656e736520747970652c607c8201527f206f7220736574207468652060736b69704c6963656e73655479706560206f70609c8201527f74696f6e20746f2060747275656020746f20736b69702e00000000000000000060bc82015260d301949350505050565b60008251619ff9818460208701618a3f565b7f2000000000000000000000000000000000000000000000000000000000000000920191825250600101919050565b7f406f70656e7a657070656c696e2f75706772616465732d636f7265400000000081526000825161a06081601c850160208701618a3f565b91909101601c0192915050565b6000600019820361a0805761a080618fa6565b5060010190565b808202811582820484141761480e5761480e618fa6565b6001815b600184111561a0d95780850481111561a0bd5761a0bd618fa6565b600184161561a0cb57908102905b60019390931c92800261a0a2565b935093915050565b60008261a0f05750600161480e565b8161a0fd5750600061480e565b816001811461a113576002811461a11d5761a139565b600191505061480e565b60ff84111561a12e5761a12e618fa6565b50506001821b61480e565b5060208310610133831016604e8410600b841016171561a15c575081810a61480e565b61a169600019848461a09e565b806000190482111561a17d5761a17d618fa6565b029392505050565b6000614907838361a0e1565b60008161a1a05761a1a0618fa6565b506000190190565b6000835161a1ba818460208801618a3f565b7f3a00000000000000000000000000000000000000000000000000000000000000908301908152835161a1f4816001840160208801618a3f565b01600101949350505050565b8181036000831280158383131683831282161715617bcb57617bcb618fa656fe60c0604052600d60809081526c2bb930b83832b21022ba3432b960991b60a05260009061002c9082610114565b506040805180820190915260048152630ae8aa8960e31b60208201526001906100559082610114565b506002805460ff1916601217905534801561006f57600080fd5b506101d2565b634e487b7160e01b600052604160045260246000fd5b600181811c9082168061009f57607f821691505b6020821081036100bf57634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111561010f57806000526020600020601f840160051c810160208510156100ec5750805b601f840160051c820191505b8181101561010c57600081556001016100f8565b50505b505050565b81516001600160401b0381111561012d5761012d610075565b6101418161013b845461008b565b846100c5565b6020601f821160018114610175576000831561015d5750848201515b600019600385901b1c1916600184901b17845561010c565b600084815260208120601f198516915b828110156101a55787850151825560209485019460019092019101610185565b50848210156101c35786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b610986806101e16000396000f3fe6080604052600436106100c05760003560e01c8063313ce56711610074578063a9059cbb1161004e578063a9059cbb146101fa578063d0e30db01461021a578063dd62ed3e1461022257600080fd5b8063313ce5671461018c57806370a08231146101b857806395d89b41146101e557600080fd5b806318160ddd116100a557806318160ddd1461012f57806323b872dd1461014c5780632e1a7d4d1461016c57600080fd5b806306fdde03146100d4578063095ea7b3146100ff57600080fd5b366100cf576100cd61025a565b005b600080fd5b3480156100e057600080fd5b506100e96102b5565b6040516100f69190610745565b60405180910390f35b34801561010b57600080fd5b5061011f61011a3660046107da565b610343565b60405190151581526020016100f6565b34801561013b57600080fd5b50475b6040519081526020016100f6565b34801561015857600080fd5b5061011f610167366004610804565b6103bd565b34801561017857600080fd5b506100cd610187366004610841565b610647565b34801561019857600080fd5b506002546101a69060ff1681565b60405160ff90911681526020016100f6565b3480156101c457600080fd5b5061013e6101d336600461085a565b60036020526000908152604090205481565b3480156101f157600080fd5b506100e9610724565b34801561020657600080fd5b5061011f6102153660046107da565b610731565b6100cd61025a565b34801561022e57600080fd5b5061013e61023d366004610875565b600460209081526000928352604080842090915290825290205481565b33600090815260036020526040812080543492906102799084906108d7565b909155505060405134815233907fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c9060200160405180910390a2565b600080546102c2906108ea565b80601f01602080910402602001604051908101604052809291908181526020018280546102ee906108ea565b801561033b5780601f106103105761010080835404028352916020019161033b565b820191906000526020600020905b81548152906001019060200180831161031e57829003601f168201915b505050505081565b33600081815260046020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925906103ab9086815260200190565b60405180910390a35060015b92915050565b73ffffffffffffffffffffffffffffffffffffffff831660009081526003602052604081205482111561042b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600060248201526044015b60405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff841633148015906104a1575073ffffffffffffffffffffffffffffffffffffffff841660009081526004602090815260408083203384529091529020547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff14155b156105605773ffffffffffffffffffffffffffffffffffffffff8416600090815260046020908152604080832033845290915290205482111561051a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526020600482015260006024820152604401610422565b73ffffffffffffffffffffffffffffffffffffffff841660009081526004602090815260408083203384529091528120805484929061055a90849061093d565b90915550505b73ffffffffffffffffffffffffffffffffffffffff84166000908152600360205260408120805484929061059590849061093d565b909155505073ffffffffffffffffffffffffffffffffffffffff8316600090815260036020526040812080548492906105cf9084906108d7565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161063591815260200190565b60405180910390a35060019392505050565b3360009081526003602052604090205481111561069a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526020600482015260006024820152604401610422565b33600090815260036020526040812080548392906106b990849061093d565b9091555050604051339082156108fc029083906000818181858888f193505050501580156106eb573d6000803e3d6000fd5b5060405181815233907f7fcf532c15f0a6db0bd6d0e038bea71d30d808c7d98cb3bf7268a95bf5081b659060200160405180910390a250565b600180546102c2906108ea565b600061073e3384846103bd565b9392505050565b602081526000825180602084015260005b818110156107735760208186018101516040868401015201610756565b5060006040828501015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011684010191505092915050565b803573ffffffffffffffffffffffffffffffffffffffff811681146107d557600080fd5b919050565b600080604083850312156107ed57600080fd5b6107f6836107b1565b946020939093013593505050565b60008060006060848603121561081957600080fd5b610822846107b1565b9250610830602085016107b1565b929592945050506040919091013590565b60006020828403121561085357600080fd5b5035919050565b60006020828403121561086c57600080fd5b61073e826107b1565b6000806040838503121561088857600080fd5b610891836107b1565b915061089f602084016107b1565b90509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b808201808211156103b7576103b76108a8565b600181811c908216806108fe57607f821691505b602082108103610937577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b818103818111156103b7576103b76108a856fea264697066735822122008d7fc4e09519c5dd9f356b03596f6829a151d0bc7682533f9ceab4e459f5ee264736f6c634300081a00336080604052348015600f57600080fd5b506105208061001f6000396000f3fe60806040526004361061002a5760003560e01c806369582bee14610033578063de43156e1461005357005b3661003157005b005b34801561003f57600080fd5b5061003161004e3660046101ba565b610073565b34801561005f57600080fd5b5061003161006e3660046101ba565b6100ee565b6060811561008a5761008782840184610273565b90505b7ffdc887992b033668833927e252058e468fac0b6bd196d520f09c61b740e999486100b58780610369565b6100c560408a0160208b016103ce565b896040013533866040516100de969594939291906103f0565b60405180910390a1505050505050565b606081156101055761010282840184610273565b90505b7fcdc8ee677dc5ebe680fb18cebda5e26ba5ea1f0ba504a47e2a9a2ecb476dc98e6100b58780610369565b60006060828403121561014257600080fd5b50919050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461016c57600080fd5b919050565b60008083601f84011261018357600080fd5b50813567ffffffffffffffff81111561019b57600080fd5b6020830191508360208285010111156101b357600080fd5b9250929050565b6000806000806000608086880312156101d257600080fd5b853567ffffffffffffffff8111156101e957600080fd5b6101f588828901610130565b95505061020460208701610148565b935060408601359250606086013567ffffffffffffffff81111561022757600080fd5b61023388828901610171565b969995985093965092949392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60006020828403121561028557600080fd5b813567ffffffffffffffff81111561029c57600080fd5b8201601f810184136102ad57600080fd5b803567ffffffffffffffff8111156102c7576102c7610244565b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8501160116810181811067ffffffffffffffff8211171561033357610333610244565b60405281815282820160200186101561034b57600080fd5b81602084016020830137600091810160200191909152949350505050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261039e57600080fd5b83018035915067ffffffffffffffff8211156103b957600080fd5b6020019150368190038213156101b357600080fd5b6000602082840312156103e057600080fd5b6103e982610148565b9392505050565b60a081528560a0820152858760c0830137600060c0878301015260007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f880116820173ffffffffffffffffffffffffffffffffffffffff8716602084015285604084015273ffffffffffffffffffffffffffffffffffffffff8516606084015260c083820301608084015283518060c083015260005b818110156104a557602081870181015184830160e0015201610488565b50600060e0838301810191909152601f9091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016909101019897505050505050505056fea2646970667358221220b5ac4aa023957e7bc2aaba2c22840cdbf052fb679bd912caa0c8614a69afc7b164736f6c634300081a003360c060405234801561001057600080fd5b5060405161106f38038061106f83398101604081905261002f916100db565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461006357604051632b2add3d60e01b815260040160405180910390fd5b600380546001600160a01b0319166001600160a01b0385811691909117909155828116608052811660a0526040517f80699e81136d69cb8367ad52a994e25c722a86da654b561d0c14b61a777e7ac590600090a150505061011e565b80516001600160a01b03811681146100d657600080fd5b919050565b6000806000606084860312156100f057600080fd5b6100f9846100bf565b9250610107602085016100bf565b9150610115604085016100bf565b90509250925092565b60805160a051610f2561014a60003960006101e50152600081816102b9015261045b0152610f256000f3fe608060405234801561001057600080fd5b50600436106100f55760003560e01c806397770dff11610097578063c63585cc11610066578063c63585cc14610273578063d7fd7afb14610286578063d936a012146102b4578063ee2815ba146102db57600080fd5b806397770dff1461021a578063a7cb05071461022d578063c39aca3714610240578063c62178ac1461025357600080fd5b8063513a9c05116100d3578063513a9c051461018a578063569541b9146101c0578063842da36d146101e057806391dd645f1461020757600080fd5b80630be15547146100fa5780631f0e251b1461015a5780633ce4a5bc1461016f575b600080fd5b610130610108366004610bd1565b60016020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b61016d610168366004610c13565b6102ee565b005b61013073735b14bb79463307aacbed86daf3322b1e6226ab81565b610130610198366004610bd1565b60026020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b6003546101309073ffffffffffffffffffffffffffffffffffffffff1681565b6101307f000000000000000000000000000000000000000000000000000000000000000081565b61016d610215366004610c35565b610402565b61016d610228366004610c13565b610526565b61016d61023b366004610c61565b610633565b61016d61024e366004610c83565b6106ce565b6004546101309073ffffffffffffffffffffffffffffffffffffffff1681565b610130610281366004610d53565b6108cd565b6102a6610294366004610bd1565b60006020819052908152604090205481565b604051908152602001610151565b6101307f000000000000000000000000000000000000000000000000000000000000000081565b61016d6102e9366004610c35565b610a02565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461033b576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116610388576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600480547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527f3ade88e3922d64780e1bf4460d364c2970b69da813f9c0c07a1c187b5647636c906020015b60405180910390a150565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461044f576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600354600090610497907f00000000000000000000000000000000000000000000000000000000000000009073ffffffffffffffffffffffffffffffffffffffff16846108cd565b60008481526002602090815260409182902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff85169081179091558251878152918201529192507f0ecec485166da6139b13bb7e033e9446e2d35348e80ebf1180d4afe2dba1704e910160405180910390a1505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610573576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff81166105c0576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527fdba79d534382d1a8ae108e4c8ecb27c6ae42ab8b91d44eedf88bd329f3868d5e906020016103f7565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610680576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000828152602081815260409182902083905581518481529081018390527f49f492222906ac486c3c1401fa545626df1f0c0e5a77a05597ea2ed66af9850d91015b60405180910390a15050565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461071b576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff831673735b14bb79463307aacbed86daf3322b1e6226ab1480610768575073ffffffffffffffffffffffffffffffffffffffff831630145b1561079f576040517f82d5d76a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f47e7ef2400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152602482018690528616906347e7ef24906044016020604051808303816000875af1158015610814573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108389190610d96565b506040517fde43156e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84169063de43156e906108939089908990899088908890600401610e01565b600060405180830381600087803b1580156108ad57600080fd5b505af11580156108c1573d6000803e3d6000fd5b50505050505050505050565b60008060006108dc8585610ad3565b6040517fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606084811b8216602084015283901b16603482015291935091508690604801604051602081830303815290604052805190602001206040516020016109c29291907fff00000000000000000000000000000000000000000000000000000000000000815260609290921b7fffffffffffffffffffffffffffffffffffffffff00000000000000000000000016600183015260158201527f96e8ac4277198ff8b6f785478aa9a39f403cb768dd02cbee326c3e7da348845f603582015260550190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291905280516020909101209695505050505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610a4f576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008281526001602090815260409182902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff85169081179091558251858152918201527fd1b36d30f6248e97c473b4d1348ca164a4ef6759022f54a58ec200326c39c45d91016106c2565b6000808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603610b3b576040517fcb1e7cfe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1610610b75578284610b78565b83835b909250905073ffffffffffffffffffffffffffffffffffffffff8216610bca576040517f78b507da00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b9250929050565b600060208284031215610be357600080fd5b5035919050565b803573ffffffffffffffffffffffffffffffffffffffff81168114610c0e57600080fd5b919050565b600060208284031215610c2557600080fd5b610c2e82610bea565b9392505050565b60008060408385031215610c4857600080fd5b82359150610c5860208401610bea565b90509250929050565b60008060408385031215610c7457600080fd5b50508035926020909101359150565b60008060008060008060a08789031215610c9c57600080fd5b863567ffffffffffffffff811115610cb357600080fd5b87016060818a031215610cc557600080fd5b9550610cd360208801610bea565b945060408701359350610ce860608801610bea565b9250608087013567ffffffffffffffff811115610d0457600080fd5b8701601f81018913610d1557600080fd5b803567ffffffffffffffff811115610d2c57600080fd5b896020828401011115610d3e57600080fd5b60208201935080925050509295509295509295565b600080600060608486031215610d6857600080fd5b610d7184610bea565b9250610d7f60208501610bea565b9150610d8d60408501610bea565b90509250925092565b600060208284031215610da857600080fd5b81518015158114610c2e57600080fd5b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b60808152600086357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1883603018112610e3957600080fd5b870160208101903567ffffffffffffffff811115610e5657600080fd5b803603821315610e6557600080fd5b60606080850152610e7a60e085018284610db8565b91505073ffffffffffffffffffffffffffffffffffffffff610e9e60208a01610bea565b1660a0840152604088013560c084015273ffffffffffffffffffffffffffffffffffffffff871660208401528560408401528281036060840152610ee3818587610db8565b9897505050505050505056fea2646970667358221220fea45cb058045b493e646c8b9505ea080ab95fd7ed4498b922d179cf1abec08e64736f6c634300081a003360e060405234801561001057600080fd5b50604051611bb9380380611bb983398101604081905261002f9161020e565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461006357604051632b2add3d60e01b815260040160405180910390fd5b6001600160a01b038216158061008057506001600160a01b038116155b1561009e5760405163d92e233d60e01b815260040160405180910390fd5b60066100aa8982610360565b5060076100b78882610360565b5060ff861660c05260808590528360028111156100d6576100d661041e565b60a08160028111156100ea576100ea61041e565b905250600192909255600080546001600160a01b039283166001600160a01b03199182161790915560088054929093169116179055506104349350505050565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261015157600080fd5b81516001600160401b0381111561016a5761016a61012a565b604051601f8201601f19908116603f011681016001600160401b03811182821017156101985761019861012a565b6040528181528382016020018510156101b057600080fd5b60005b828110156101cf576020818601810151838301820152016101b3565b506000918101602001919091529392505050565b8051600381106101f257600080fd5b919050565b80516001600160a01b03811681146101f257600080fd5b600080600080600080600080610100898b03121561022b57600080fd5b88516001600160401b0381111561024157600080fd5b61024d8b828c01610140565b60208b015190995090506001600160401b0381111561026b57600080fd5b6102778b828c01610140565b975050604089015160ff8116811461028e57600080fd5b60608a015190965094506102a460808a016101e3565b60a08a015190945092506102ba60c08a016101f7565b91506102c860e08a016101f7565b90509295985092959890939650565b600181811c908216806102eb57607f821691505b60208210810361030b57634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111561035b57806000526020600020601f840160051c810160208510156103385750805b601f840160051c820191505b818110156103585760008155600101610344565b50505b505050565b81516001600160401b038111156103795761037961012a565b61038d8161038784546102d7565b84610311565b6020601f8211600181146103c157600083156103a95750848201515b600019600385901b1c1916600184901b178455610358565b600084815260208120601f198516915b828110156103f157878501518255602094850194600190920191016103d1565b508482101561040f5786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b634e487b7160e01b600052602160045260246000fd5b60805160a05160c05161174861047160003960006102170152600061033a0152600081816102eb01528181610ad70152610bdd01526117486000f3fe608060405234801561001057600080fd5b50600436106101985760003560e01c80638b851b95116100e3578063ccc775991161008c578063eddeb12311610066578063eddeb12314610431578063f2441b3214610444578063f687d12a1461046457600080fd5b8063ccc77599146103a4578063d9eeebed146103b7578063dd62ed3e146103eb57600080fd5b8063a9059cbb116100bd578063a9059cbb14610369578063c70126261461037c578063c835d7cc1461038f57600080fd5b80638b851b951461030d57806395d89b411461032d578063a3413d031461033557600080fd5b80633ce4a5bc116101455780634d8943bb1161011f5780634d8943bb146102a757806370a08231146102b057806385e1f4d0146102e657600080fd5b80633ce4a5bc1461024157806342966c681461028157806347e7ef241461029457600080fd5b806318160ddd1161017657806318160ddd146101f557806323b872dd146101fd578063313ce5671461021057600080fd5b806306fdde031461019d578063091d2788146101bb578063095ea7b3146101d2575b600080fd5b6101a5610477565b6040516101b29190611327565b60405180910390f35b6101c460015481565b6040519081526020016101b2565b6101e56101e0366004611366565b610509565b60405190151581526020016101b2565b6005546101c4565b6101e561020b366004611392565b610520565b60405160ff7f00000000000000000000000000000000000000000000000000000000000000001681526020016101b2565b61025c73735b14bb79463307aacbed86daf3322b1e6226ab81565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101b2565b6101e561028f3660046113d3565b6105b7565b6101e56102a2366004611366565b6105cb565b6101c460025481565b6101c46102be3660046113ec565b73ffffffffffffffffffffffffffffffffffffffff1660009081526003602052604090205490565b6101c47f000000000000000000000000000000000000000000000000000000000000000081565b60085461025c9073ffffffffffffffffffffffffffffffffffffffff1681565b6101a561071f565b61035c7f000000000000000000000000000000000000000000000000000000000000000081565b6040516101b29190611409565b6101e5610377366004611366565b61072e565b6101e561038a366004611479565b61073b565b6103a261039d3660046113ec565b61088a565b005b6103a26103b23660046113ec565b61099e565b6103bf610aab565b6040805173ffffffffffffffffffffffffffffffffffffffff90931683526020830191909152016101b2565b6101c46103f9366004611571565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260046020908152604080832093909416825291909152205490565b6103a261043f3660046113d3565b610cc9565b60005461025c9073ffffffffffffffffffffffffffffffffffffffff1681565b6103a26104723660046113d3565b610d4b565b606060068054610486906115aa565b80601f01602080910402602001604051908101604052809291908181526020018280546104b2906115aa565b80156104ff5780601f106104d4576101008083540402835291602001916104ff565b820191906000526020600020905b8154815290600101906020018083116104e257829003601f168201915b5050505050905090565b6000610516338484610dcd565b5060015b92915050565b600061052d848484610ed6565b73ffffffffffffffffffffffffffffffffffffffff8416600090815260046020908152604080832033845290915290205482811015610598576040517f10bad14700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6105ac85336105a7868561162c565b610dcd565b506001949350505050565b60006105c33383611091565b506001919050565b60003373735b14bb79463307aacbed86daf3322b1e6226ab14801590610609575060005473ffffffffffffffffffffffffffffffffffffffff163314155b801561062d575060085473ffffffffffffffffffffffffffffffffffffffff163314155b15610664576040517fddb5de5e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61066e83836111d3565b6040517f735b14bb79463307aacbed86daf3322b1e6226ab000000000000000000000000602082015273ffffffffffffffffffffffffffffffffffffffff8416907f67fc7bdaed5b0ec550d8706b87d60568ab70c6b781263c70101d54cd1564aab390603401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529082905261070e91869061163f565b60405180910390a250600192915050565b606060078054610486906115aa565b6000610516338484610ed6565b6000806000610748610aab565b6040517f23b872dd00000000000000000000000000000000000000000000000000000000815233600482015273735b14bb79463307aacbed86daf3322b1e6226ab602482015260448101829052919350915073ffffffffffffffffffffffffffffffffffffffff8316906323b872dd906064016020604051808303816000875af11580156107da573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107fe9190611661565b610834576040517f0a7cd6d600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61083e3385611091565b60025460405133917f9ffbffc04a397460ee1dbe8c9503e098090567d6b7f4b3c02a8617d800b6d9559161087791899189918791611683565b60405180910390a2506001949350505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab146108d7576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116610924576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527fd55614e962c5fd6ece71614f6348d702468a997a394dd5e5c1677950226d97ae906020015b60405180910390a150565b3373735b14bb79463307aacbed86daf3322b1e6226ab146109eb576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116610a38576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600880547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527f88815d964e380677e86d817e7d65dea59cb7b4c3b5b7a0c8ec7ea4a74f90a38790602001610993565b600080546040517f0be155470000000000000000000000000000000000000000000000000000000081527f000000000000000000000000000000000000000000000000000000000000000060048201528291829173ffffffffffffffffffffffffffffffffffffffff90911690630be1554790602401602060405180830381865afa158015610b3e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b6291906116b2565b905073ffffffffffffffffffffffffffffffffffffffff8116610bb1576040517f78fff39600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080546040517fd7fd7afb0000000000000000000000000000000000000000000000000000000081527f0000000000000000000000000000000000000000000000000000000000000000600482015273ffffffffffffffffffffffffffffffffffffffff9091169063d7fd7afb90602401602060405180830381865afa158015610c40573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c6491906116cf565b905080600003610ca0576040517fe661aed000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060025460015483610cb391906116e8565b610cbd91906116ff565b92959294509192505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610d16576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60028190556040518181527fef13af88e424b5d15f49c77758542c1938b08b8b95b91ed0751f98ba99000d8f90602001610993565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610d98576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018190556040518181527fff5788270f43bfc1ca41c503606d2594aa3023a1a7547de403a3e2f146a4a80a90602001610993565b73ffffffffffffffffffffffffffffffffffffffff8316610e1a576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216610e67576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff83811660008181526004602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8316610f23576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216610f70576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff831660009081526003602052604090205481811015610fd0576040517ffe382aa700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610fda828261162c565b73ffffffffffffffffffffffffffffffffffffffff808616600090815260036020526040808220939093559085168152908120805484929061101d9084906116ff565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161108391815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff82166110de576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff82166000908152600360205260409020548181101561113e576040517ffe382aa700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611148828261162c565b73ffffffffffffffffffffffffffffffffffffffff84166000908152600360205260408120919091556005805484929061118390849061162c565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90602001610ec9565b73ffffffffffffffffffffffffffffffffffffffff8216611220576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b806005600082825461123291906116ff565b909155505073ffffffffffffffffffffffffffffffffffffffff82166000908152600360205260408120805483929061126c9084906116ff565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6000815180845260005b818110156112e9576020818501810151868301820152016112cd565b5060006020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b60208152600061133a60208301846112c3565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff8116811461136357600080fd5b50565b6000806040838503121561137957600080fd5b823561138481611341565b946020939093013593505050565b6000806000606084860312156113a757600080fd5b83356113b281611341565b925060208401356113c281611341565b929592945050506040919091013590565b6000602082840312156113e557600080fd5b5035919050565b6000602082840312156113fe57600080fd5b813561133a81611341565b6020810160038310611444577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000806040838503121561148c57600080fd5b823567ffffffffffffffff8111156114a357600080fd5b8301601f810185136114b457600080fd5b803567ffffffffffffffff8111156114ce576114ce61144a565b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8501160116810181811067ffffffffffffffff8211171561153a5761153a61144a565b60405281815282820160200187101561155257600080fd5b8160208401602083013760006020928201830152969401359450505050565b6000806040838503121561158457600080fd5b823561158f81611341565b9150602083013561159f81611341565b809150509250929050565b600181811c908216806115be57607f821691505b6020821081036115f7577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8181038181111561051a5761051a6115fd565b60408152600061165260408301856112c3565b90508260208301529392505050565b60006020828403121561167357600080fd5b8151801515811461133a57600080fd5b60808152600061169660808301876112c3565b6020830195909552506040810192909252606090910152919050565b6000602082840312156116c457600080fd5b815161133a81611341565b6000602082840312156116e157600080fd5b5051919050565b808202811582820484141761051a5761051a6115fd565b8082018082111561051a5761051a6115fd56fea26469706673582212204013e39523742118b3f2227e145ee7e48176ba6aebead33c596dca2acb59a74c64736f6c634300081a0033a2646970667358221220f99ca1f170180f9431c7cd6030cbc796f102b9274f857ae0f4e0842efcb31d9164736f6c634300081a0033", + ABI: "[{\"type\":\"function\",\"name\":\"IS_TEST\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeArtifacts\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedArtifacts_\",\"type\":\"string[]\",\"internalType\":\"string[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeContracts\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedContracts_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeSelectors\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedSelectors_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzSelector[]\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"selectors\",\"type\":\"bytes4[]\",\"internalType\":\"bytes4[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeSenders\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedSenders_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"failed\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"setUp\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"targetArtifactSelectors\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedArtifactSelectors_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzArtifactSelector[]\",\"components\":[{\"name\":\"artifact\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"selectors\",\"type\":\"bytes4[]\",\"internalType\":\"bytes4[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetArtifacts\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedArtifacts_\",\"type\":\"string[]\",\"internalType\":\"string[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetContracts\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedContracts_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetInterfaces\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedInterfaces_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzInterface[]\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"artifacts\",\"type\":\"string[]\",\"internalType\":\"string[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetSelectors\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedSelectors_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzSelector[]\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"selectors\",\"type\":\"bytes4[]\",\"internalType\":\"bytes4[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetSenders\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedSenders_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"testCall\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testCallFailsIfReceiverIsZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawAndCallZRC20FailsIfAmountIsZero\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawAndCallZRC20FailsIfReceiverIsZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawAndcallZETAFailsIfAmountIsReceiverIsZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawAndcallZETAFailsIfAmountIsZero\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawZETA\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawZETAFailsIfAmountIsZero\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawZETAFailsIfNoAllowance\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawZETAFailsIfNoBalance\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawZETAWithMessage\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawZETAWithMessageFailsIfNoAllowance\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawZRC20\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawZRC20FailsIfNoAllowance\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawZRC20FailsIfNoBalanceForGasFee\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawZRC20FailsIfNoBalanceForTransfer\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawZRC20FailsIfReceiverIsZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawZRC20FailsIsAmountIs0\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawZRC20WithMessage\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawZRC20WithMessageFailsIfNoAllowance\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"event\",\"name\":\"Call\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"chainId\",\"type\":\"uint256\",\"indexed\":true,\"internalType\":\"uint256\"},{\"name\":\"receiver\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"message\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Withdrawal\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"chainId\",\"type\":\"uint256\",\"indexed\":true,\"internalType\":\"uint256\"},{\"name\":\"receiver\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"zrc20\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"gasfee\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"protocolFlatFee\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"message\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log\",\"inputs\":[{\"name\":\"\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_address\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_array\",\"inputs\":[{\"name\":\"val\",\"type\":\"uint256[]\",\"indexed\":false,\"internalType\":\"uint256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_array\",\"inputs\":[{\"name\":\"val\",\"type\":\"int256[]\",\"indexed\":false,\"internalType\":\"int256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_array\",\"inputs\":[{\"name\":\"val\",\"type\":\"address[]\",\"indexed\":false,\"internalType\":\"address[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_bytes\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_bytes32\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_int\",\"inputs\":[{\"name\":\"\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_address\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_array\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"uint256[]\",\"indexed\":false,\"internalType\":\"uint256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_array\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"int256[]\",\"indexed\":false,\"internalType\":\"int256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_array\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"address[]\",\"indexed\":false,\"internalType\":\"address[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_bytes\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_bytes32\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_decimal_int\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"},{\"name\":\"decimals\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_decimal_uint\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"decimals\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_int\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_string\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_uint\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_string\",\"inputs\":[{\"name\":\"\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_uint\",\"inputs\":[{\"name\":\"\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"logs\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"CallerIsNotFungibleModule\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"FailedZetaSent\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"GasFeeTransferFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientZRC20Amount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientZetaAmount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidTarget\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"LowBalance\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OnlyWZETAOrFungible\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"WithdrawalFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZRC20BurnFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZRC20DepositFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZRC20TransferFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZeroAddress\",\"inputs\":[]}]", + Bin: "0x6080604052600c8054600160ff199182168117909255601f80549091169091179055348015602c57600080fd5b5061e1bd8061003c6000396000f3fe608060405234801561001057600080fd5b506004361061020b5760003560e01c806385226c811161012a578063ba9adeef116100bd578063e20c9f711161008c578063fa7626d411610071578063fa7626d41461035c578063fbc611c814610369578063fdad0ad01461037157600080fd5b8063e20c9f711461034c578063ea37902f1461035457600080fd5b8063ba9adeef1461032c578063bcc52b9a14610334578063ceccfab31461033c578063dde7e9671461034457600080fd5b8063b5508aa9116100f9578063b5508aa9146102fc578063b7f0583614610304578063ba414fa61461030c578063ba800c911461032457600080fd5b806385226c81146102c2578063916a17c6146102d757806395c379c1146102ec578063b0464fdc146102f457600080fd5b806339cbb457116101a25780635d72228f116101715780635d72228f146102955780636221b5091461029d57806366d9a9a0146102a557806383ababa9146102ba57600080fd5b806339cbb457146102755780633e5e3c231461027d5780633f7286f4146102855780635006fd801461028d57600080fd5b80631ed7831c116101de5780631ed7831c1461023257806321aeb18c146102505780632ade38801461025857806336431b3f1461026d57600080fd5b80630a9254e4146102105780631238212c1461021a57806318a4cfdc146102225780631e63d2b91461022a575b600080fd5b610218610379565b005b610218610de6565b6102186111af565b610218611628565b61023a611a14565b6040516102479190618c55565b60405180910390f35b610218611a76565b610260611b97565b6040516102479190618cf1565b610218611cd9565b610218611e7f565b61023a611fe7565b61023a612047565b6102186120a7565b61021861255b565b6102186128aa565b6102ad612acc565b6040516102479190618e57565b610218612c4e565b6102ca612d49565b6040516102479190618ef5565b6102df612e19565b6040516102479190618f6c565b610218612f14565b6102df61307d565b6102ca613178565b610218613248565b610314613485565b6040519015158152602001610247565b610218613559565b610218613685565b610218613828565b6102186139a6565b610218613cda565b61023a614116565b610218614176565b601f546103149060ff1681565b610218614555565b6102186148c8565b602580547fffffffffffffffffffffffff00000000000000000000000000000000000000009081163017909155602680549091166112341790556040516103bf90618b68565b604051809103906000f0801580156103db573d6000803e3d6000fd5b50602280547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03928316908117909155604080518082018252600f81527f476174657761795a45564d2e736f6c0000000000000000000000000000000000602082015260255491516024810193909352921660448201526104bf919060640160408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f485cc95500000000000000000000000000000000000000000000000000000000179052614a57565b601f80547fffffffffffffffffffffff0000000000000000000000000000000000000000ff166101006001600160a01b039384168102919091179182905560208054919092049092167fffffffffffffffffffffffff000000000000000000000000000000000000000090921682178155604080517f3ce4a5bc0000000000000000000000000000000000000000000000000000000081529051633ce4a5bc926004808401939192918290030181865afa158015610581573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105a59190619003565b602780547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03929092169190911790556040516105e990618b75565b604051809103906000f080158015610605573d6000803e3d6000fd5b50602480547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039283161781556027546040517f06447d5600000000000000000000000000000000000000000000000000000000815292166004830152737109709ecfa91a80626ff3989d68f67f5b1dd12d916306447d569101600060405180830381600087803b1580156106a157600080fd5b505af11580156106b5573d6000803e3d6000fd5b5050505060008060006040516106ca90618b82565b6001600160a01b03938416815291831660208301529091166040820152606001604051809103906000f080158015610706573d6000803e3d6000fd5b50602380547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392831690811790915560205460405160129360019384936000939192169061075c90618b8f565b61076b9695949392919061902c565b604051809103906000f080158015610787573d6000803e3d6000fd5b50602180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039283169081179091556023546040517fee2815ba0000000000000000000000000000000000000000000000000000000081526001600482015260248101929092529091169063ee2815ba90604401600060405180830381600087803b15801561081e57600080fd5b505af1158015610832573d6000803e3d6000fd5b50506023546040517fa7cb050700000000000000000000000000000000000000000000000000000000815260016004820181905260248201526001600160a01b03909116925063a7cb05079150604401600060405180830381600087803b15801561089c57600080fd5b505af11580156108b0573d6000803e3d6000fd5b50506027546040517fc88a5e6d0000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152633b9aca006024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c88a5e6d9150604401600060405180830381600087803b15801561093057600080fd5b505af1158015610944573d6000803e3d6000fd5b50505050602260009054906101000a90046001600160a01b03166001600160a01b031663d0e30db0600a6040518263ffffffff1660e01b81526004016000604051808303818588803b15801561099957600080fd5b505af11580156109ad573d6000803e3d6000fd5b50506022546020546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152600a60248201529116935063095ea7b3925060440190506020604051808303816000875af1158015610a21573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a459190619121565b506021546025546040517f47e7ef240000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620186a060248201529116906347e7ef24906044016020604051808303816000875af1158015610ab6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ada9190619121565b507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b03166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610b3957600080fd5b505af1158015610b4d573d6000803e3d6000fd5b50506025546040517f06447d560000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506306447d569150602401600060405180830381600087803b158015610bc357600080fd5b505af1158015610bd7573d6000803e3d6000fd5b50506021546020546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620186a060248201529116925063095ea7b391506044016020604051808303816000875af1158015610c4b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c6f9190619121565b50602260009054906101000a90046001600160a01b03166001600160a01b031663d0e30db0600a6040518263ffffffff1660e01b81526004016000604051808303818588803b158015610cc157600080fd5b505af1158015610cd5573d6000803e3d6000fd5b50506022546020546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152600a60248201529116935063095ea7b3925060440190506020604051808303816000875af1158015610d49573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d6d9190619121565b507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b03166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610dcc57600080fd5b505af1158015610de0573d6000803e3d6000fd5b50505050565b6021546025546040516370a0823160e01b81526001600160a01b03918216600482015260019260009216906370a0823190602401602060405180830381865afa158015610e37573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e5b9190619143565b6025546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015610ed057600080fd5b505af1158015610ee4573d6000803e3d6000fd5b50506021546020546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152600060248201529116925063095ea7b391506044016020604051808303816000875af1158015610f56573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f7a9190619121565b506026546040516001600160a01b03909116602482015260009060440160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f84fae7600000000000000000000000000000000000000000000000000000000017905280517ff48448140000000000000000000000000000000000000000000000000000000081529051919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f48448149160048082019260009290919082900301818387803b15801561105657600080fd5b505af115801561106a573d6000803e3d6000fd5b50506020805460265460405160609190911b6bffffffffffffffffffffffff1916928101929092526001600160a01b03169250637993c1e0915060340160408051601f19818403018152908290526021547fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1683526110fe9288916001600160a01b031690879060040161915c565b600060405180830381600087803b15801561111857600080fd5b505af115801561112c573d6000803e3d6000fd5b50506021546025546040516370a0823160e01b81526001600160a01b03918216600482015260009450911691506370a0823190602401602060405180830381865afa15801561117f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111a39190619143565b9050610de08382614a76565b6022546025546040516370a0823160e01b81526001600160a01b03918216600482015260019260009216906370a0823190602401602060405180830381865afa158015611200573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112249190619143565b6022546020546040516370a0823160e01b81526001600160a01b0391821660048201529293506000929116906370a0823190602401602060405180830381865afa158015611276573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061129a9190619143565b6027546026546040516001600160a01b03918216602482015292935016319060009060440160408051601f19818403018152918152602080830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f84fae760000000000000000000000000000000000000000000000000000000001790525490517f81bad6f30000000000000000000000000000000000000000000000000000000081526001600482018190526024820181905260448201819052606482018190526001600160a01b03909216608482015291925090737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b1580156113a957600080fd5b505af11580156113bd573d6000803e3d6000fd5b505060255460265460405160609190911b6bffffffffffffffffffffffff191660208201528493506001600160a01b0390911691507fde19dbe881cc0aeeb6e73ce19ac7b5ca695e6be8a076e3eb42292005a7fec1b59060340160408051601f1981840301815290829052602254611449926001600160a01b03909116908c9060009081908b90619196565b60405180910390a3602080546026546040516001600160a01b039283169363f41d7749936114919316910160609190911b6bffffffffffffffffffffffff1916815260140190565b6040516020818303038152906040528884866040518563ffffffff1660e01b81526004016114c294939291906191e9565b600060405180830381600087803b1580156114dc57600080fd5b505af11580156114f0573d6000803e3d6000fd5b50506022546025546040516370a0823160e01b81526001600160a01b03918216600482015260009450911691506370a0823190602401602060405180830381865afa158015611543573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115679190619143565b905061157d611577600188619249565b82614a76565b6022546020546040516370a0823160e01b81526001600160a01b03918216600482015260009291909116906370a0823190602401602060405180830381865afa1580156115ce573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115f29190619143565b90506115fe8682614a76565b61161e61160c86600161925c565b6027546001600160a01b031631614a76565b5050505050505050565b6021546025546040516370a0823160e01b81526001600160a01b03918216600482015260019260009216906370a0823190602401602060405180830381865afa158015611679573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061169d9190619143565b6026546040516001600160a01b03909116602482015290915060009060440160408051601f19818403018152918152602080830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f84fae760000000000000000000000000000000000000000000000000000000001790525490517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b1580156117a357600080fd5b505af11580156117b7573d6000803e3d6000fd5b505060255460265460405160609190911b6bffffffffffffffffffffffff19166020820152600093506001600160a01b0390911691507fde19dbe881cc0aeeb6e73ce19ac7b5ca695e6be8a076e3eb42292005a7fec1b59060340160408051601f198184030181528282526021547f4d8943bb000000000000000000000000000000000000000000000000000000008452915190926001600160a01b039092169189916000918491634d8943bb916004808201926020929091908290030181865afa15801561188a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118ae9190619143565b886040516118c196959493929190619196565b60405180910390a3602080546026546040516001600160a01b0392831693637993c1e0936119099316910160609190911b6bffffffffffffffffffffffff1916815260140190565b60408051601f19818403018152908290526021547fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1683526119609288916001600160a01b031690879060040161915c565b600060405180830381600087803b15801561197a57600080fd5b505af115801561198e573d6000803e3d6000fd5b50506021546025546040516370a0823160e01b81526001600160a01b03918216600482015260009450911691506370a0823190602401602060405180830381865afa1580156119e1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a059190619143565b9050610de06115778585619249565b60606016805480602002602001604051908101604052809291908181526020018280548015611a6c57602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311611a4e575b5050505050905090565b6040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527f19c08f49000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b158015611afb57600080fd5b505af1158015611b0f573d6000803e3d6000fd5b50506020805460265460405160609190911b6bffffffffffffffffffffffff1916928101929092526001600160a01b0316925063737a9ed69150603401604051602081830303815290604052600060016040518463ffffffff1660e01b8152600401611b7d9392919061926f565b600060405180830381600087803b158015610dcc57600080fd5b6060601e805480602002602001604051908101604052809291908181526020016000905b82821015611cd057600084815260208082206040805180820182526002870290920180546001600160a01b03168352600181018054835181870281018701909452808452939591948681019491929084015b82821015611cb9578382906000526020600020018054611c2c90619294565b80601f0160208091040260200160405190810160405280929190818152602001828054611c5890619294565b8015611ca55780601f10611c7a57610100808354040283529160200191611ca5565b820191906000526020600020905b815481529060010190602001808311611c8857829003601f168201915b505050505081526020019060010190611c0d565b505050508152505081526020019060010190611bbb565b50505050905090565b6026546040516001600160a01b03909116602482015260009060440160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f84fae76000000000000000000000000000000000000000000000000000000000179052517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fd92e233d000000000000000000000000000000000000000000000000000000006004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b158015611dd357600080fd5b505af1158015611de7573d6000803e3d6000fd5b5050602080546040805160008152928301908190526021547f7993c1e0000000000000000000000000000000000000000000000000000000009091526001600160a01b039182169450637993c1e09350611e4a929160019116866024840161915c565b600060405180830381600087803b158015611e6457600080fd5b505af1158015611e78573d6000803e3d6000fd5b5050505050565b6026546040516001600160a01b03909116602482015260009060440160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f84fae76000000000000000000000000000000000000000000000000000000000179052517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fd92e233d000000000000000000000000000000000000000000000000000000006004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b158015611f7957600080fd5b505af1158015611f8d573d6000803e3d6000fd5b5050602080546040805160008152928301908190527f5d40e1780000000000000000000000000000000000000000000000000000000090526001600160a01b03169250635d40e1789150611e4a90600185602483016192e1565b60606018805480602002602001604051908101604052809291908181526020018280548015611a6c576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311611a4e575050505050905090565b60606017805480602002602001604051908101604052809291908181526020018280548015611a6c576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311611a4e575050505050905090565b6022546025546040516370a0823160e01b81526001600160a01b03918216600482015260019260009216906370a0823190602401602060405180830381865afa1580156120f8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061211c9190619143565b6022546020546040516370a0823160e01b81526001600160a01b0391821660048201529293506000929116906370a0823190602401602060405180830381865afa15801561216e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121929190619143565b6027546026546040516001600160a01b03918216602482015292935016319060009060440160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f84fae7600000000000000000000000000000000000000000000000000000000017905260255490517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152909150600190737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561228657600080fd5b505af115801561229a573d6000803e3d6000fd5b50506022546020546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152600060248201529116925063095ea7b391506044016020604051808303816000875af115801561230c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123309190619121565b507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b031663f48448146040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561238f57600080fd5b505af11580156123a3573d6000803e3d6000fd5b50506020805460265460405160609190911b6bffffffffffffffffffffffff1916928101929092526001600160a01b0316925063f41d774991506034016040516020818303038152906040528884866040518563ffffffff1660e01b815260040161241194939291906191e9565b600060405180830381600087803b15801561242b57600080fd5b505af115801561243f573d6000803e3d6000fd5b50506022546025546040516370a0823160e01b81526001600160a01b03918216600482015260009450911691506370a0823190602401602060405180830381865afa158015612492573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124b69190619143565b90506124c28682614a76565b6022546020546040516370a0823160e01b81526001600160a01b03918216600482015260009291909116906370a0823190602401602060405180830381865afa158015612513573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125379190619143565b90506125438682614a76565b60275461161e9086906001600160a01b031631614a76565b6021546025546040516370a0823160e01b81526001600160a01b03918216600482015260019260009216906370a0823190602401602060405180830381865afa1580156125ac573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125d09190619143565b6025546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561264557600080fd5b505af1158015612659573d6000803e3d6000fd5b50506021546020546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152600060248201529116925063095ea7b391506044016020604051808303816000875af11580156126cb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126ef9190619121565b507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b031663f48448146040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561274e57600080fd5b505af1158015612762573d6000803e3d6000fd5b50506020805460265460405160609190911b6bffffffffffffffffffffffff1916928101929092526001600160a01b0316925063135390f9915060340160408051601f19818403018152908290526021547fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1683526127f49287916001600160a01b03169060040161930c565b600060405180830381600087803b15801561280e57600080fd5b505af1158015612822573d6000803e3d6000fd5b50506021546025546040516370a0823160e01b81526001600160a01b03918216600482015260009450911691506370a0823190602401602060405180830381865afa158015612875573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128999190619143565b90506128a58282614a76565b505050565b6022546025546040516370a0823160e01b81526001600160a01b03918216600482015260019260009216906370a0823190602401602060405180830381865afa1580156128fb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061291f9190619143565b6022546040517fa9059cbb0000000000000000000000000000000000000000000000000000000081526101236004820152602481018390529192506001600160a01b03169063a9059cbb906044016020604051808303816000875af115801561298c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129b09190619121565b506000600190507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b031663f48448146040518163ffffffff1660e01b8152600401600060405180830381600087803b158015612a1557600080fd5b505af1158015612a29573d6000803e3d6000fd5b50506020805460265460405160609190911b6bffffffffffffffffffffffff1916928101929092526001600160a01b0316925063737a9ed6915060340160405160208183030381529060405285846040518463ffffffff1660e01b8152600401612a959392919061926f565b600060405180830381600087803b158015612aaf57600080fd5b505af1158015612ac3573d6000803e3d6000fd5b50505050505050565b6060601b805480602002602001604051908101604052809291908181526020016000905b82821015611cd05783829060005260206000209060020201604051806040016040529081600082018054612b2390619294565b80601f0160208091040260200160405190810160405280929190818152602001828054612b4f90619294565b8015612b9c5780601f10612b7157610100808354040283529160200191612b9c565b820191906000526020600020905b815481529060010190602001808311612b7f57829003601f168201915b5050505050815260200160018201805480602002602001604051908101604052809291908181526020018280548015612c3657602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019060040190602082600301049283019260010382029150808411612be35790505b50505050508152505081526020019060010190612af0565b6040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b158015612cd357600080fd5b505af1158015612ce7573d6000803e3d6000fd5b5050602080546040805160008152928301908190526021547f135390f9000000000000000000000000000000000000000000000000000000009091526001600160a01b03918216945063135390f99350611b7d9291600191166024830161930c565b6060601a805480602002602001604051908101604052809291908181526020016000905b82821015611cd0578382906000526020600020018054612d8c90619294565b80601f0160208091040260200160405190810160405280929190818152602001828054612db890619294565b8015612e055780601f10612dda57610100808354040283529160200191612e05565b820191906000526020600020905b815481529060010190602001808311612de857829003601f168201915b505050505081526020019060010190612d6d565b6060601d805480602002602001604051908101604052809291908181526020016000905b82821015611cd05760008481526020908190206040805180820182526002860290920180546001600160a01b03168352600181018054835181870281018701909452808452939491938583019392830182828015612efc57602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019060040190602082600301049283019260010382029150808411612ea95790505b50505050508152505081526020019060010190612e3d565b6026546040516001600160a01b03909116602482015260009060440160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f84fae76000000000000000000000000000000000000000000000000000000000179052517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fd92e233d000000000000000000000000000000000000000000000000000000006004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b15801561300e57600080fd5b505af1158015613022573d6000803e3d6000fd5b5050602080546040805160008152928301908190527ff41d77490000000000000000000000000000000000000000000000000000000090526001600160a01b0316925063f41d77499150611e4a9060018086602484016191e9565b6060601c805480602002602001604051908101604052809291908181526020016000905b82821015611cd05760008481526020908190206040805180820182526002860290920180546001600160a01b0316835260018101805483518187028101870190945280845293949193858301939283018282801561316057602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168152602001906004019060208260030104928301926001038202915080841161310d5790505b505050505081525050815260200190600101906130a1565b60606019805480602002602001604051908101604052809291908181526020016000905b82821015611cd05783829060005260206000200180546131bb90619294565b80601f01602080910402602001604051908101604052809291908181526020018280546131e790619294565b80156132345780601f1061320957610100808354040283529160200191613234565b820191906000526020600020905b81548152906001019060200180831161321757829003601f168201915b50505050508152602001906001019061319c565b6026546040516001600160a01b03909116602482015260009060440160408051601f19818403018152918152602080830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f84fae760000000000000000000000000000000000000000000000000000000001790525490517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b15801561334b57600080fd5b505af115801561335f573d6000803e3d6000fd5b505060255460265460405160609190911b6bffffffffffffffffffffffff19166020820152600193508392506001600160a01b03909116907f5322ffbbf9261ff1f8138247942d2b03b28717141ef0a0dd080fc4be9c4e78d39060340160408051601f19818403018152908290526133d891879061933e565b60405180910390a3602080546026546040516001600160a01b0392831693635d40e178936134209316910160609190911b6bffffffffffffffffffffffff1916815260140190565b60405160208183030381529060405283856040518463ffffffff1660e01b815260040161344f939291906192e1565b600060405180830381600087803b15801561346957600080fd5b505af115801561347d573d6000803e3d6000fd5b505050505050565b60085460009060ff161561349d575060085460ff1690565b6040517f667f9d70000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d600482018190527f6661696c65640000000000000000000000000000000000000000000000000000602483015260009163667f9d7090604401602060405180830381865afa15801561352e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135529190619143565b1415905090565b6040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527f5d67094f000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b1580156135de57600080fd5b505af11580156135f2573d6000803e3d6000fd5b50506020805460265460405160609190911b6bffffffffffffffffffffffff1916928101929092526001600160a01b0316925063135390f9915060340160408051601f19818403018152908290526021547fffffffff0000000000000000000000000000000000000000000000000000000060e085901b168352611b7d926000916001600160a01b03169060040161930c565b6026546040516001600160a01b03909116602482015260009060440160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f84fae76000000000000000000000000000000000000000000000000000000000179052517fc31eb0e00000000000000000000000000000000000000000000000000000000081527f5d67094f000000000000000000000000000000000000000000000000000000006004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b15801561377f57600080fd5b505af1158015613793573d6000803e3d6000fd5b50506020805460265460405160609190911b6bffffffffffffffffffffffff1916928101929092526001600160a01b03169250637993c1e0915060340160408051601f19818403018152908290526021547fffffffff0000000000000000000000000000000000000000000000000000000060e085901b168352611e4a926000916001600160a01b031690879060040161915c565b6026546040516001600160a01b03909116602482015260009060440160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f84fae76000000000000000000000000000000000000000000000000000000000179052517fc31eb0e00000000000000000000000000000000000000000000000000000000081527f19c08f49000000000000000000000000000000000000000000000000000000006004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b15801561392257600080fd5b505af1158015613936573d6000803e3d6000fd5b50506020805460265460405160609190911b6bffffffffffffffffffffffff1916928101929092526001600160a01b0316925063f41d7749915060340160405160208183030381529060405260006001856040518563ffffffff1660e01b8152600401611e4a94939291906191e9565b6021546025546040516370a0823160e01b81526001600160a01b03918216600482015260019260009216906370a0823190602401602060405180830381865afa1580156139f7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a1b9190619143565b6021546040517fa9059cbb0000000000000000000000000000000000000000000000000000000081526101236004820152602481018390529192506001600160a01b03169063a9059cbb906044016020604051808303816000875af1158015613a88573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613aac9190619121565b506027546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015613b1f57600080fd5b505af1158015613b33573d6000803e3d6000fd5b50506021546040517ff687d12a000000000000000000000000000000000000000000000000000000008152600a60048201526001600160a01b03909116925063f687d12a9150602401600060405180830381600087803b158015613b9657600080fd5b505af1158015613baa573d6000803e3d6000fd5b50506040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527ffe382aa7000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e091506024015b600060405180830381600087803b158015613c3457600080fd5b505af1158015613c48573d6000803e3d6000fd5b50506020805460265460405160609190911b6bffffffffffffffffffffffff1916928101929092526001600160a01b0316925063135390f9915060340160408051601f19818403018152908290526021547fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16835261344f9287916001600160a01b03169060040161930c565b6022546025546040516370a0823160e01b81526001600160a01b03918216600482015260019260009216906370a0823190602401602060405180830381865afa158015613d2b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613d4f9190619143565b6022546020546040516370a0823160e01b81526001600160a01b0391821660048201529293506000929116906370a0823190602401602060405180830381865afa158015613da1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613dc59190619143565b6027546025546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152929350163190600190737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015613e4357600080fd5b505af1158015613e57573d6000803e3d6000fd5b50506022546020546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152600060248201529116925063095ea7b391506044016020604051808303816000875af1158015613ec9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613eed9190619121565b507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b031663f48448146040518163ffffffff1660e01b8152600401600060405180830381600087803b158015613f4c57600080fd5b505af1158015613f60573d6000803e3d6000fd5b50506020805460265460405160609190911b6bffffffffffffffffffffffff1916928101929092526001600160a01b0316925063737a9ed6915060340160405160208183030381529060405287846040518463ffffffff1660e01b8152600401613fcc9392919061926f565b600060405180830381600087803b158015613fe657600080fd5b505af1158015613ffa573d6000803e3d6000fd5b50506022546025546040516370a0823160e01b81526001600160a01b03918216600482015260009450911691506370a0823190602401602060405180830381865afa15801561404d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906140719190619143565b905061407d8582614a76565b6022546020546040516370a0823160e01b81526001600160a01b03918216600482015260009291909116906370a0823190602401602060405180830381865afa1580156140ce573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906140f29190619143565b90506140fe8582614a76565b602754612ac39085906001600160a01b031631614a76565b60606015805480602002602001604051908101604052809291908181526020018280548015611a6c576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311611a4e575050505050905090565b6022546025546040516370a0823160e01b81526001600160a01b03918216600482015260019260009216906370a0823190602401602060405180830381865afa1580156141c7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906141eb9190619143565b6022546020546040516370a0823160e01b81526001600160a01b0391821660048201529293506000929116906370a0823190602401602060405180830381865afa15801561423d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906142619190619143565b6027546020546040517f81bad6f30000000000000000000000000000000000000000000000000000000081526001600482018190526024820181905260448201819052606482018190526001600160a01b0392831660848301529394509116319190737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b1580156142fc57600080fd5b505af1158015614310573d6000803e3d6000fd5b505060255460265460405160609190911b6bffffffffffffffffffffffff191660208201528493506001600160a01b0390911691507fde19dbe881cc0aeeb6e73ce19ac7b5ca695e6be8a076e3eb42292005a7fec1b59060340160408051601f198184030181529082905260225461439a926001600160a01b03909116908b906000908190619363565b60405180910390a3602080546026546040516001600160a01b039283169363737a9ed6936143e29316910160609190911b6bffffffffffffffffffffffff1916815260140190565b60405160208183030381529060405287846040518463ffffffff1660e01b81526004016144119392919061926f565b600060405180830381600087803b15801561442b57600080fd5b505af115801561443f573d6000803e3d6000fd5b50506022546025546040516370a0823160e01b81526001600160a01b03918216600482015260009450911691506370a0823190602401602060405180830381865afa158015614492573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906144b69190619143565b90506144c6611577600187619249565b6022546020546040516370a0823160e01b81526001600160a01b03918216600482015260009291909116906370a0823190602401602060405180830381865afa158015614517573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061453b9190619143565b90506145478582614a76565b612ac361160c85600161925c565b6021546025546040516370a0823160e01b81526001600160a01b03918216600482015260019260009216906370a0823190602401602060405180830381865afa1580156145a6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906145ca9190619143565b6020546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b15801561465b57600080fd5b505af115801561466f573d6000803e3d6000fd5b505060255460265460405160609190911b6bffffffffffffffffffffffff19166020820152600093506001600160a01b0390911691507fde19dbe881cc0aeeb6e73ce19ac7b5ca695e6be8a076e3eb42292005a7fec1b59060340160408051601f198184030181528282526021547f4d8943bb000000000000000000000000000000000000000000000000000000008452915190926001600160a01b039092169188916000918491634d8943bb916004808201926020929091908290030181865afa158015614742573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906147669190619143565b604051614777959493929190619363565b60405180910390a3602080546026546040516001600160a01b039283169363135390f9936147bf9316910160609190911b6bffffffffffffffffffffffff1916815260140190565b60408051601f19818403018152908290526021547fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1683526148149287916001600160a01b03169060040161930c565b600060405180830381600087803b15801561482e57600080fd5b505af1158015614842573d6000803e3d6000fd5b50506021546025546040516370a0823160e01b81526001600160a01b03918216600482015260009450911691506370a0823190602401602060405180830381865afa158015614895573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906148b99190619143565b90506128a56115778484619249565b6021546025546040516370a0823160e01b81526001600160a01b03918216600482015260029260009216906370a0823190602401602060405180830381865afa158015614919573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061493d9190619143565b6021549091506001600160a01b031663a9059cbb61012361495f600185619249565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303816000875af11580156149c2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906149e69190619121565b506040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527ffe382aa7000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401613c1a565b6000614a61618b9c565b614a6c848483614af5565b9150505b92915050565b6040517f98296c540000000000000000000000000000000000000000000000000000000081526004810183905260248101829052737109709ecfa91a80626ff3989d68f67f5b1dd12d906398296c549060440160006040518083038186803b158015614ae157600080fd5b505afa15801561347d573d6000803e3d6000fd5b600080614b028584614b70565b9050614b656040518060400160405280601d81526020017f4552433139363750726f78792e736f6c3a4552433139363750726f78790000008152508286604051602001614b509291906193b4565b60405160208183030381529060405285614b7c565b9150505b9392505050565b6000614b698383614baa565b60c08101515160009015614ba057614b9984848460c00151614bc5565b9050614b69565b614b998484614d6b565b6000614bb68383614e56565b614b6983836020015184614b7c565b600080614bd0614e66565b90506000614bde8683614f39565b90506000614bf582606001518360200151856153df565b90506000614c05838389896155f1565b90506000614c128261646e565b602081015181519192509060030b15614c8557898260400151604051602001614c3c9291906193d6565b60408051601f19818403018152908290527f08c379a0000000000000000000000000000000000000000000000000000000008252614c7c91600401619457565b60405180910390fd5b6000614cc86040518060400160405280601581526020017f4465706c6f79656420746f20616464726573733a20000000000000000000000081525083600161663d565b6040517fc6ce059d000000000000000000000000000000000000000000000000000000008152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c6ce059d90614d1b908490600401619457565b602060405180830381865afa158015614d38573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614d5c9190619003565b9b9a5050505050505050505050565b6040517f8d1cc9250000000000000000000000000000000000000000000000000000000081526000908190737109709ecfa91a80626ff3989d68f67f5b1dd12d90638d1cc92590614dc0908790600401619457565b600060405180830381865afa158015614ddd573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052614e059190810190619552565b90506000614e338285604051602001614e1f929190619587565b60405160208183030381529060405261683d565b90506001600160a01b038116614a6c578484604051602001614c3c9291906195b6565b614e6282826000616850565b5050565b604080518082018252600381527f6f75740000000000000000000000000000000000000000000000000000000000602082015290517fd145736c000000000000000000000000000000000000000000000000000000008152606091737109709ecfa91a80626ff3989d68f67f5b1dd12d91829063d145736c90614eed908490600401619661565b600060405180830381865afa158015614f0a573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052614f3291908101906196a8565b9250505090565b614f6b6040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b6000737109709ecfa91a80626ff3989d68f67f5b1dd12d9050614fb66040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b614fbf85616953565b60208201526000614fcf86616d38565b90506000836001600160a01b031663d930a0e66040518163ffffffff1660e01b8152600401600060405180830381865afa158015615011573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261503991908101906196a8565b8683856020015160405160200161505394939291906196f1565b60408051601f19818403018152908290527f60f9bb1100000000000000000000000000000000000000000000000000000000825291506000906001600160a01b038616906360f9bb11906150ab908590600401619457565b600060405180830381865afa1580156150c8573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526150f091908101906196a8565b6040517fdb4235f60000000000000000000000000000000000000000000000000000000081529091506001600160a01b0386169063db4235f6906151389084906004016197f5565b602060405180830381865afa158015615155573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906151799190619121565b61518e5781604051602001614c3c9190619847565b6040517f49c4fac80000000000000000000000000000000000000000000000000000000081526001600160a01b038616906349c4fac8906151d39084906004016198d9565b600060405180830381865afa1580156151f0573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261521891908101906196a8565b84526040517fdb4235f60000000000000000000000000000000000000000000000000000000081526001600160a01b0386169063db4235f69061525f90849060040161992b565b602060405180830381865afa15801561527c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906152a09190619121565b15615335576040517f49c4fac80000000000000000000000000000000000000000000000000000000081526001600160a01b038616906349c4fac8906152ea90849060040161992b565b600060405180830381865afa158015615307573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261532f91908101906196a8565b60408501525b846001600160a01b03166349c4fac882866000015160405160200161535a919061997d565b6040516020818303038152906040526040518363ffffffff1660e01b815260040161538692919061933e565b600060405180830381865afa1580156153a3573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526153cb91908101906196a8565b606085015250608083015250949350505050565b60408051600480825260a0820190925260609160009190816020015b60608152602001906001900390816153fb5790505090506040518060400160405280600481526020017f67726570000000000000000000000000000000000000000000000000000000008152508160008151811061545b5761545b6199e9565b60200260200101819052506040518060400160405280600381526020017f2d726c0000000000000000000000000000000000000000000000000000000000815250816001815181106154af576154af6199e9565b6020026020010181905250846040516020016154cb9190619a18565b604051602081830303815290604052816002815181106154ed576154ed6199e9565b6020026020010181905250826040516020016155099190619a84565b6040516020818303038152906040528160038151811061552b5761552b6199e9565b602002602001018190525060006155418261646e565b602080820151604080518082018252600581527f2e6a736f6e00000000000000000000000000000000000000000000000000000081850190815282518084018452600080825290860152825180840190935290518252928101929092529192506155d29060408051808201825260008082526020918201528151808301909252845182528085019082015290616fbb565b6155e75785604051602001614c3c9190619ac5565b9695505050505050565b60a0810151604080518082018252600080825260209182015281518083019092528251808352928101910152606090737109709ecfa91a80626ff3989d68f67f5b1dd12d9015615641565b511590565b6157b5578260200151156156fd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605860248201527f54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f742060448201527f62652075736564207768656e207468652060736b6970566572696679536f757260648201527f6365436f646560206f7074696f6e206973206074727565600000000000000000608482015260a401614c7c565b8260c00151156157b5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605360248201527f54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f742060448201527f62652075736564207768656e207468652060736b69704c6963656e736554797060648201527f6560206f7074696f6e2069732060747275656000000000000000000000000000608482015260a401614c7c565b6040805160ff8082526120008201909252600091816020015b60608152602001906001900390816157ce57905050905060006040518060400160405280600381526020017f6e7078000000000000000000000000000000000000000000000000000000000081525082828061582990619b56565b935060ff168151811061583e5761583e6199e9565b60200260200101819052506040518060400160405280600d81526020017f302e302e312d616c7068612e370000000000000000000000000000000000000081525060405160200161588f9190619b75565b6040516020818303038152906040528282806158aa90619b56565b935060ff16815181106158bf576158bf6199e9565b60200260200101819052506040518060400160405280600681526020017f6465706c6f79000000000000000000000000000000000000000000000000000081525082828061590c90619b56565b935060ff1681518110615921576159216199e9565b60200260200101819052506040518060400160405280600e81526020017f2d2d636f6e74726163744e616d6500000000000000000000000000000000000081525082828061596e90619b56565b935060ff1681518110615983576159836199e9565b6020026020010181905250876020015182828061599f90619b56565b935060ff16815181106159b4576159b46199e9565b60200260200101819052506040518060400160405280600e81526020017f2d2d636f6e747261637450617468000000000000000000000000000000000000815250828280615a0190619b56565b935060ff1681518110615a1657615a166199e9565b602090810291909101015287518282615a2e81619b56565b935060ff1681518110615a4357615a436199e9565b60200260200101819052506040518060400160405280600981526020017f2d2d636861696e49640000000000000000000000000000000000000000000000815250828280615a9090619b56565b935060ff1681518110615aa557615aa56199e9565b6020026020010181905250615ab94661701c565b8282615ac481619b56565b935060ff1681518110615ad957615ad96199e9565b60200260200101819052506040518060400160405280600f81526020017f2d2d6275696c64496e666f46696c650000000000000000000000000000000000815250828280615b2690619b56565b935060ff1681518110615b3b57615b3b6199e9565b602002602001018190525086828280615b5390619b56565b935060ff1681518110615b6857615b686199e9565b6020908102919091010152855115615c8f5760408051808201909152601581527f2d2d636f6e7374727563746f7242797465636f6465000000000000000000000060208201528282615bb981619b56565b935060ff1681518110615bce57615bce6199e9565b60209081029190910101526040517f71aad10d0000000000000000000000000000000000000000000000000000000081526001600160a01b038416906371aad10d90615c1e908990600401619457565b600060405180830381865afa158015615c3b573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052615c6391908101906196a8565b8282615c6e81619b56565b935060ff1681518110615c8357615c836199e9565b60200260200101819052505b846020015115615d5f5760408051808201909152601281527f2d2d766572696679536f75726365436f6465000000000000000000000000000060208201528282615cd881619b56565b935060ff1681518110615ced57615ced6199e9565b60200260200101819052506040518060400160405280600581526020017f66616c7365000000000000000000000000000000000000000000000000000000815250828280615d3a90619b56565b935060ff1681518110615d4f57615d4f6199e9565b6020026020010181905250615f26565b615d9761563c8660a0015160408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b615e2a5760408051808201909152600d81527f2d2d6c6963656e7365547970650000000000000000000000000000000000000060208201528282615dda81619b56565b935060ff1681518110615def57615def6199e9565b60200260200101819052508460a00151604051602001615e0f9190619a18565b604051602081830303815290604052828280615d3a90619b56565b8460c00151158015615e6d575060408089015181518083018352600080825260209182015282518084019093528151835290810190820152615e6b90511590565b155b15615f265760408051808201909152600d81527f2d2d6c6963656e7365547970650000000000000000000000000000000000000060208201528282615eb181619b56565b935060ff1681518110615ec657615ec66199e9565b6020026020010181905250615eda886170bc565b604051602001615eea9190619a18565b604051602081830303815290604052828280615f0590619b56565b935060ff1681518110615f1a57615f1a6199e9565b60200260200101819052505b60408086015181518083018352600080825260209182015282518084019093528151835290810190820152615f5a90511590565b615fef5760408051808201909152600b81527f2d2d72656c61796572496400000000000000000000000000000000000000000060208201528282615f9d81619b56565b935060ff1681518110615fb257615fb26199e9565b60200260200101819052508460400151828280615fce90619b56565b935060ff1681518110615fe357615fe36199e9565b60200260200101819052505b6060850151156161105760408051808201909152600681527f2d2d73616c7400000000000000000000000000000000000000000000000000006020820152828261603881619b56565b935060ff168151811061604d5761604d6199e9565b602090810291909101015260608501516040517fb11a19e800000000000000000000000000000000000000000000000000000000815260048101919091526001600160a01b0384169063b11a19e890602401600060405180830381865afa1580156160bc573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526160e491908101906196a8565b82826160ef81619b56565b935060ff1681518110616104576161046199e9565b60200260200101819052505b60e085015151156161b75760408051808201909152600a81527f2d2d6761734c696d6974000000000000000000000000000000000000000000006020820152828261615a81619b56565b935060ff168151811061616f5761616f6199e9565b602002602001018190525061618b8560e001516000015161701c565b828261619681619b56565b935060ff16815181106161ab576161ab6199e9565b60200260200101819052505b60e085015160200151156162615760408051808201909152600a81527f2d2d6761735072696365000000000000000000000000000000000000000000006020820152828261620481619b56565b935060ff1681518110616219576162196199e9565b60200260200101819052506162358560e001516020015161701c565b828261624081619b56565b935060ff1681518110616255576162556199e9565b60200260200101819052505b60e0850151604001511561630b5760408051808201909152600e81527f2d2d6d6178466565506572476173000000000000000000000000000000000000602082015282826162ae81619b56565b935060ff16815181106162c3576162c36199e9565b60200260200101819052506162df8560e001516040015161701c565b82826162ea81619b56565b935060ff16815181106162ff576162ff6199e9565b60200260200101819052505b60e085015160600151156163b55760408051808201909152601681527f2d2d6d61785072696f72697479466565506572476173000000000000000000006020820152828261635881619b56565b935060ff168151811061636d5761636d6199e9565b60200260200101819052506163898560e001516060015161701c565b828261639481619b56565b935060ff16815181106163a9576163a96199e9565b60200260200101819052505b60008160ff1667ffffffffffffffff8111156163d3576163d361946a565b60405190808252806020026020018201604052801561640657816020015b60608152602001906001900390816163f15790505b50905060005b8260ff168160ff16101561645f57838160ff168151811061642f5761642f6199e9565b6020026020010151828260ff168151811061644c5761644c6199e9565b602090810291909101015260010161640c565b5093505050505b949350505050565b6164956040518060600160405280600060030b815260200160608152602001606081525090565b60408051808201825260048082527f6261736800000000000000000000000000000000000000000000000000000000602083015291517fd145736c000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d92600091849163d145736c9161651b91869101619be0565b600060405180830381865afa158015616538573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261656091908101906196a8565b9050600061656e8683617bab565b90506000846001600160a01b031663f45c1ce7836040518263ffffffff1660e01b815260040161659e9190618ef5565b6000604051808303816000875af11580156165bd573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526165e59190810190619c27565b805190915060030b158015906165fe5750602081015151155b801561660d5750604081015151155b156155e75781600081518110616625576166256199e9565b6020026020010151604051602001614c3c9190619cdd565b606060006166728560408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6040805180820182526000808252602091820152815180830190925286518252808701908201529091506166a99082905b90617d00565b15616806576000616726826167208461671a6166ec8a60408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6040805180820182526000808252602091820152815180830190925282518252918201519181019190915290565b90617d27565b90617d89565b604080518082018252600181527f0a000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015290915061678a908290617d00565b156167f457604080518082018252600181527f0a00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526167f1905b8290617e0e565b90505b6167fd81617e34565b92505050614b69565b821561681f578484604051602001614c3c929190619ec9565b5050604080516020810190915260008152614b69565b509392505050565b6000808251602084016000f09392505050565b8160a001511561685f57505050565b600061686c848484617e9d565b905060006168798261646e565b602081015181519192509060030b1580156169155750604080518082018252600781527f535543434553530000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616915906040805180820182526000808252602091820152815180830190925284518252808501908201526166a3565b1561692257505050505050565b60408201515115616942578160400151604051602001614c3c9190619f70565b80604051602001614c3c9190619fce565b606060006169888360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600481527f2e736f6c00000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201529091506169ed905b8290616fbb565b15616a5c57604080518082018252600481527f2e736f6c0000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152614b6990616a57908390618438565b617e34565b604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616abe905b82906184c2565b600103616b8b57604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616b24906167ea565b50604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152614b6990616a57905b8390617e0e565b604080518082018252600581527f2e6a736f6e00000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616bea906169e6565b15616d2157604080518082018252600181527f2f00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820181905284518086019095529251845283015290616c5290839061855c565b905060008160018351616c659190619249565b81518110616c7557616c756199e9565b60200260200101519050616d18616a57616ceb6040518060400160405280600581526020017f2e6a736f6e00000000000000000000000000000000000000000000000000000081525060408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b60408051808201825260008082526020918201528151808301909252855182528086019082015290618438565b95945050505050565b82604051602001614c3c919061a039565b50919050565b60606000616d6d8360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600481527f2e736f6c0000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152909150616dcf906169e6565b15616ddd57614b6981617e34565b604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616e3c90616ab7565b600103616ea657604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152614b6990616a5790616b84565b604080518082018252600581527f2e6a736f6e00000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616f05906169e6565b15616d2157604080518082018252600181527f2f00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820181905284518086019095529251845283015290616f6d90839061855c565b9050600181511115616fa9578060028251616f889190619249565b81518110616f9857616f986199e9565b602002602001015192505050919050565b5082604051602001614c3c919061a039565b805182516000911115616fd057506000614a70565b81518351602085015160009291616fe69161925c565b616ff09190619249565b905082602001518103617007576001915050614a70565b82516020840151819020912014905092915050565b6060600061702983618601565b600101905060008167ffffffffffffffff8111156170495761704961946a565b6040519080825280601f01601f191660200182016040528015617073576020820181803683370190505b5090508181016020015b600019017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a850494508461707d57509392505050565b604081810151815180830183526000808252602091820181905283518085018552835181529282018383015283518085018552600a81527f554e4c4943454e5345440000000000000000000000000000000000000000000081840190815285518087018752838152840192909252845180860190955251845290830152606091617148905b82906186e3565b1561718857505060408051808201909152600481527f4e6f6e65000000000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600981527f556e6c6963656e73650000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526171e790617141565b1561722757505060408051808201909152600981527f556e6c6963656e736500000000000000000000000000000000000000000000006020820152919050565b604080518082018252600381527f4d495400000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261728690617141565b156172c657505060408051808201909152600381527f4d495400000000000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f47504c2d322e302d6f6e6c7900000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261732590617141565b8061738a5750604080518082018252601081527f47504c2d322e302d6f722d6c61746572000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261738a90617141565b156173ca57505060408051808201909152600981527f474e552047504c763200000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f47504c2d332e302d6f6e6c7900000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261742990617141565b8061748e5750604080518082018252601081527f47504c2d332e302d6f722d6c61746572000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261748e90617141565b156174ce57505060408051808201909152600981527f474e552047504c763300000000000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4c47504c2d322e312d6f6e6c79000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261752d90617141565b806175925750604080518082018252601181527f4c47504c2d322e312d6f722d6c617465720000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261759290617141565b156175d257505060408051808201909152600c81527f474e55204c47504c76322e3100000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4c47504c2d332e302d6f6e6c79000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261763190617141565b806176965750604080518082018252601181527f4c47504c2d332e302d6f722d6c617465720000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261769690617141565b156176d657505060408051808201909152600a81527f474e55204c47504c7633000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f4253442d322d436c6175736500000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261773590617141565b1561777557505060408051808201909152600c81527f4253442d322d436c6175736500000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f4253442d332d436c617573650000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526177d490617141565b1561781457505060408051808201909152600c81527f4253442d332d436c6175736500000000000000000000000000000000000000006020820152919050565b604080518082018252600781527f4d504c2d322e30000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261787390617141565b156178b357505060408051808201909152600781527f4d504c2d322e30000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600781527f4f534c2d332e30000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261791290617141565b1561795257505060408051808201909152600781527f4f534c2d332e30000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600a81527f4170616368652d322e3000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526179b190617141565b156179f157505060408051808201909152600a81527f4170616368652d322e30000000000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4147504c2d332e302d6f6e6c790000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617a5090617141565b80617ab55750604080518082018252601181527f4147504c2d332e302d6f722d6c6174657200000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617ab590617141565b15617af557505060408051808201909152600a81527f474e55204147504c7633000000000000000000000000000000000000000000006020820152919050565b604080518082018252600881527f4255534c2d312e3100000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617b5490617141565b15617b9457505060408051808201909152600781527f42534c20312e31000000000000000000000000000000000000000000000000006020820152919050565b60408084015184519151614c3c929060200161a117565b60608060005b8451811015617c365781858281518110617bcd57617bcd6199e9565b6020026020010151604051602001617be6929190619587565b604051602081830303815290604052915060018551617c059190619249565b8114617c2e5781604051602001617c1c919061a280565b60405160208183030381529060405291505b600101617bb1565b5060408051600380825260808201909252600091816020015b6060815260200190600190039081617c4f5790505090508381600081518110617c7a57617c7a6199e9565b60200260200101819052506040518060400160405280600281526020017f2d6300000000000000000000000000000000000000000000000000000000000081525081600181518110617cce57617cce6199e9565b60200260200101819052508181600281518110617ced57617ced6199e9565b6020908102919091010152949350505050565b6020808301518351835192840151600093617d1e92918491906186f7565b14159392505050565b60408051808201909152600080825260208201526000617d598460000151856020015185600001518660200151618808565b9050836020015181617d6b9190619249565b84518590617d7a908390619249565b90525060208401525090919050565b6040805180820190915260008082526020820152815183511015617dae575081614a70565b6020808301519084015160019114617dd55750815160208481015190840151829020919020145b8015617e0657825184518590617dec908390619249565b9052508251602085018051617e0290839061925c565b9052505b509192915050565b6040805180820190915260008082526020820152617e2d838383618928565b5092915050565b60606000826000015167ffffffffffffffff811115617e5557617e5561946a565b6040519080825280601f01601f191660200182016040528015617e7f576020820181803683370190505b5090506000602082019050617e2d81856020015186600001516189d3565b60606000617ea9614e66565b6040805160ff808252612000820190925291925060009190816020015b6060815260200190600190039081617ec657905050905060006040518060400160405280600381526020017f6e70780000000000000000000000000000000000000000000000000000000000815250828280617f2190619b56565b935060ff1681518110617f3657617f366199e9565b60200260200101819052506040518060400160405280600781526020017f5e312e33322e3300000000000000000000000000000000000000000000000000815250604051602001617f87919061a2c1565b604051602081830303815290604052828280617fa290619b56565b935060ff1681518110617fb757617fb76199e9565b60200260200101819052506040518060400160405280600881526020017f76616c696461746500000000000000000000000000000000000000000000000081525082828061800490619b56565b935060ff1681518110618019576180196199e9565b6020026020010181905250826040516020016180359190619a84565b60405160208183030381529060405282828061805090619b56565b935060ff1681518110618065576180656199e9565b60200260200101819052506040518060400160405280600a81526020017f2d2d636f6e7472616374000000000000000000000000000000000000000000008152508282806180b290619b56565b935060ff16815181106180c7576180c76199e9565b60200260200101819052506180dc8784618a4d565b82826180e781619b56565b935060ff16815181106180fc576180fc6199e9565b6020908102919091010152855151156181a85760408051808201909152600b81527f2d2d7265666572656e63650000000000000000000000000000000000000000006020820152828261814e81619b56565b935060ff1681518110618163576181636199e9565b602002602001018190525061817c866000015184618a4d565b828261818781619b56565b935060ff168151811061819c5761819c6199e9565b60200260200101819052505b8560800151156182165760408051808201909152601881527f2d2d756e73616665536b697053746f72616765436865636b0000000000000000602082015282826181f181619b56565b935060ff1681518110618206576182066199e9565b602002602001018190525061827c565b841561827c5760408051808201909152601281527f2d2d726571756972655265666572656e636500000000000000000000000000006020820152828261825b81619b56565b935060ff1681518110618270576182706199e9565b60200260200101819052505b604086015151156183185760408051808201909152600d81527f2d2d756e73616665416c6c6f7700000000000000000000000000000000000000602082015282826182c681619b56565b935060ff16815181106182db576182db6199e9565b602002602001018190525085604001518282806182f790619b56565b935060ff168151811061830c5761830c6199e9565b60200260200101819052505b8560600151156183825760408051808201909152601481527f2d2d756e73616665416c6c6f7752656e616d65730000000000000000000000006020820152828261836181619b56565b935060ff1681518110618376576183766199e9565b60200260200101819052505b60008160ff1667ffffffffffffffff8111156183a0576183a061946a565b6040519080825280602002602001820160405280156183d357816020015b60608152602001906001900390816183be5790505b50905060005b8260ff168160ff16101561842c57838160ff16815181106183fc576183fc6199e9565b6020026020010151828260ff1681518110618419576184196199e9565b60209081029190910101526001016183d9565b50979650505050505050565b604080518082019091526000808252602082015281518351101561845d575081614a70565b815183516020850151600092916184739161925c565b61847d9190619249565b6020840151909150600190821461849e575082516020840151819020908220145b80156184b9578351855186906184b5908390619249565b9052505b50929392505050565b60008082600001516184e68560000151866020015186600001518760200151618808565b6184f0919061925c565b90505b83516020850151618504919061925c565b8111617e2d57816185148161a306565b925050826000015161854b85602001518361852f9190619249565b865161853b9190619249565b8386600001518760200151618808565b618555919061925c565b90506184f3565b6060600061856a84846184c2565b61857590600161925c565b67ffffffffffffffff81111561858d5761858d61946a565b6040519080825280602002602001820160405280156185c057816020015b60608152602001906001900390816185ab5790505b50905060005b8151811015616835576185dc616a578686617e0e565b8282815181106185ee576185ee6199e9565b60209081029190910101526001016185c6565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000831061864a577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310618676576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc10000831061869457662386f26fc10000830492506010015b6305f5e10083106186ac576305f5e100830492506008015b61271083106186c057612710830492506004015b606483106186d2576064830492506002015b600a8310614a705760010192915050565b60006186ef8383618a8d565b159392505050565b6000808584116187fe57602084116187aa576000841561874257600161871e866020619249565b61872990600861a320565b61873490600261a41e565b61873e9190619249565b1990505b8351811685618751898961925c565b61875b9190619249565b805190935082165b8181146187955787841161877d5787945050505050616466565b836187878161a42a565b945050828451169050618763565b61879f878561925c565b945050505050616466565b8383206187b78588619249565b6187c1908761925c565b91505b8582106187fc578482208082036187e9576187df868461925c565b9350505050616466565b6187f4600184619249565b9250506187c4565b505b5092949350505050565b6000838186851161891357602085116188c25760008515618854576001618830876020619249565b61883b90600861a320565b61884690600261a41e565b6188509190619249565b1990505b845181166000876188658b8b61925c565b61886f9190619249565b855190915083165b8281146188b45781861061889c5761888f8b8b61925c565b9650505050505050616466565b856188a68161a306565b965050838651169050618877565b859650505050505050616466565b508383206000905b6188d48689619249565b8211618911578583208082036188f05783945050505050616466565b6188fb60018561925c565b93505081806189099061a306565b9250506188ca565b505b61891d878761925c565b979650505050505050565b6040805180820190915260008082526020820152600061895a8560000151866020015186600001518760200151618808565b6020808701805191860191909152519091506189769082619249565b835284516020860151618989919061925c565b810361899857600085526189ca565b835183516189a6919061925c565b855186906189b5908390619249565b90525083516189c4908261925c565b60208601525b50909392505050565b60208110618a0b57815183526189ea60208461925c565b92506189f760208361925c565b9150618a04602082619249565b90506189d3565b6000198115618a3a576001618a21836020619249565b618a2d9061010061a41e565b618a379190619249565b90505b9151835183169219169190911790915250565b60606000618a5b8484614f39565b8051602080830151604051939450618a759390910161a441565b60405160208183030381529060405291505092915050565b8151815160009190811115618aa0575081515b6020808501519084015160005b83811015618b595782518251808214618b29576000196020871015618b0857600184618ada896020619249565b618ae4919061925c565b618aef90600861a320565b618afa90600261a41e565b618b049190619249565b1990505b8181168382168181039114618b26579750614a709650505050505050565b50505b618b3460208661925c565b9450618b4160208561925c565b93505050602081618b52919061925c565b9050618aad565b50845186516155e7919061a499565b610b678061a4ba83390190565b61053f8061b02183390190565b61106f8061b56083390190565b611bb98061c5cf83390190565b6040518060e00160405280606081526020016060815260200160608152602001600015158152602001600015158152602001600015158152602001618bdf618be4565b905290565b60405180610100016040528060001515815260200160001515815260200160608152602001600080191681526020016060815260200160608152602001600015158152602001618bdf6040518060800160405280600081526020016000815260200160008152602001600081525090565b602080825282518282018190526000918401906040840190835b81811015618c965783516001600160a01b0316835260209384019390920191600101618c6f565b509095945050505050565b60005b83811015618cbc578181015183820152602001618ca4565b50506000910152565b60008151808452618cdd816020860160208601618ca1565b601f01601f19169290920160200192915050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015618ded577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452815180516001600160a01b03168652602090810151604082880181905281519088018190529101906060600582901b88018101919088019060005b81811015618dd3577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa08a8503018352618dbd848651618cc5565b6020958601959094509290920191600101618d83565b509197505050602094850194929092019150600101618d19565b50929695505050505050565b600081518084526020840193506020830160005b82811015618e4d5781517fffffffff0000000000000000000000000000000000000000000000000000000016865260209586019590910190600101618e0d565b5093949350505050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015618ded577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08786030184528151805160408752618ec36040880182618cc5565b9050602082015191508681036020880152618ede8183618df9565b965050506020938401939190910190600101618e7f565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015618ded577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452618f57858351618cc5565b94506020938401939190910190600101618f1d565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015618ded577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc087860301845281516001600160a01b0381511686526020810151905060406020870152618fed6040870182618df9565b9550506020938401939190910190600101618f94565b60006020828403121561901557600080fd5b81516001600160a01b0381168114614b6957600080fd5b610100815260056101008201527f544f4b454e000000000000000000000000000000000000000000000000000000610120820152610140602082015260036101408201527f544b4e000000000000000000000000000000000000000000000000000000000061016082015260006101808201905060ff88166040830152866060830152600386106190e6577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b8560808301528460a083015261910760c08301856001600160a01b03169052565b6001600160a01b03831660e0830152979650505050505050565b60006020828403121561913357600080fd5b81518015158114614b6957600080fd5b60006020828403121561915557600080fd5b5051919050565b60808152600061916f6080830187618cc5565b8560208401526001600160a01b0385166040840152828103606084015261891d8185618cc5565b60c0815260006191a960c0830189618cc5565b6001600160a01b038816602084015286604084015285606084015284608084015282810360a08401526191dc8185618cc5565b9998505050505050505050565b6080815260006191fc6080830187618cc5565b856020840152846040840152828103606084015261891d8185618cc5565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b81810381811115614a7057614a7061921a565b80820180821115614a7057614a7061921a565b6060815260006192826060830186618cc5565b60208301949094525060400152919050565b600181811c908216806192a857607f821691505b602082108103616d32577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6060815260006192f46060830186618cc5565b84602084015282810360408401526155e78185618cc5565b60608152600061931f6060830186618cc5565b90508360208301526001600160a01b0383166040830152949350505050565b6040815260006193516040830185618cc5565b8281036020840152614b658185618cc5565b60c08152600061937660c0830188618cc5565b6001600160a01b038716602084015285604084015284606084015283608084015282810360a084015260008152602081019150509695505050505050565b6001600160a01b03831681526040602082015260006164666040830184618cc5565b7f4661696c656420746f206465706c6f7920636f6e74726163742000000000000081526000835161940e81601a850160208801618ca1565b7f3a20000000000000000000000000000000000000000000000000000000000000601a91840191820152835161944b81601c840160208801618ca1565b01601c01949350505050565b602081526000614b696020830184618cc5565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040516060810167ffffffffffffffff811182821017156194bc576194bc61946a565b60405290565b60008067ffffffffffffffff8411156194dd576194dd61946a565b50604051601f19601f85018116603f0116810181811067ffffffffffffffff8211171561950c5761950c61946a565b60405283815290508082840185101561952457600080fd5b616835846020830185618ca1565b600082601f83011261954357600080fd5b614b69838351602085016194c2565b60006020828403121561956457600080fd5b815167ffffffffffffffff81111561957b57600080fd5b614a6c84828501619532565b60008351619599818460208801618ca1565b8351908301906195ad818360208801618ca1565b01949350505050565b7f4661696c656420746f206465706c6f7920636f6e7472616374200000000000008152600083516195ee81601a850160208801618ca1565b7f207573696e6720636f6e7374727563746f722064617461202200000000000000601a91840191820152835161962b816033840160208801618ca1565b7f220000000000000000000000000000000000000000000000000000000000000060339290910191820152603401949350505050565b60408152600b60408201527f464f554e4452595f4f55540000000000000000000000000000000000000000006060820152608060208201526000614b696080830184618cc5565b6000602082840312156196ba57600080fd5b815167ffffffffffffffff8111156196d157600080fd5b8201601f810184136196e257600080fd5b614a6c848251602084016194c2565b60008551619703818460208a01618ca1565b7f2f00000000000000000000000000000000000000000000000000000000000000908301908152855161973d816001840160208a01618ca1565b7f2f0000000000000000000000000000000000000000000000000000000000000060019290910191820152845161977b816002840160208901618ca1565b6001818301019150507f2f00000000000000000000000000000000000000000000000000000000000000600182015283516197bd816002840160208801618ca1565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600292909101918201526007019695505050505050565b6040815260006198086040830184618cc5565b8281036020840152600481527f2e6173740000000000000000000000000000000000000000000000000000000060208201526040810191505092915050565b7f436f756c64206e6f742066696e642041535420696e206172746966616374200081526000825161987f81601f850160208701618ca1565b7f2e205365742060617374203d20747275656020696e20666f756e6472792e746f601f9390910192830152507f6d6c000000000000000000000000000000000000000000000000000000000000603f820152604101919050565b6040815260006198ec6040830184618cc5565b8281036020840152601181527f2e6173742e6162736f6c7574655061746800000000000000000000000000000060208201526040810191505092915050565b60408152600061993e6040830184618cc5565b8281036020840152600c81527f2e6173742e6c6963656e7365000000000000000000000000000000000000000060208201526040810191505092915050565b7f2e6d657461646174612e736f75726365732e5b270000000000000000000000008152600082516199b5816014850160208701618ca1565b7f275d2e6b656363616b32353600000000000000000000000000000000000000006014939091019283015250602001919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f2200000000000000000000000000000000000000000000000000000000000000815260008251619a50816001850160208701618ca1565b7f22000000000000000000000000000000000000000000000000000000000000006001939091019283015250600201919050565b60008251619a96818460208701618ca1565b7f2f6275696c642d696e666f000000000000000000000000000000000000000000920191825250600b01919050565b7f436f756c64206e6f742066696e64206275696c642d696e666f2066696c65207781527f697468206d61746368696e6720736f7572636520636f6465206861736820666f60208201527f7220636f6e747261637420000000000000000000000000000000000000000000604082015260008251619b4981604b850160208701618ca1565b91909101604b0192915050565b600060ff821660ff8103619b6c57619b6c61921a565b60010192915050565b7f406f70656e7a657070656c696e2f646566656e6465722d6465706c6f792d636c81527f69656e742d636c69400000000000000000000000000000000000000000000000602082015260008251619bd3816029850160208701618ca1565b9190910160290192915050565b60408152601660408201527f4f50454e5a455050454c494e5f424153485f50415448000000000000000000006060820152608060208201526000614b696080830184618cc5565b600060208284031215619c3957600080fd5b815167ffffffffffffffff811115619c5057600080fd5b820160608185031215619c6257600080fd5b619c6a619499565b81518060030b8114619c7b57600080fd5b8152602082015167ffffffffffffffff811115619c9757600080fd5b619ca386828501619532565b602083015250604082015167ffffffffffffffff811115619cc357600080fd5b619ccf86828501619532565b604083015250949350505050565b7f4661696c656420746f2072756e206261736820636f6d6d616e6420776974682081527f2200000000000000000000000000000000000000000000000000000000000000602082015260008251619d3b816021850160208701618ca1565b7f222e20496620796f7520617265207573696e672057696e646f77732c2073657460219390910192830152507f20746865204f50454e5a455050454c494e5f424153485f5041544820656e766960418201527f726f6e6d656e74207661726961626c6520746f207468652066756c6c7920717560618201527f616c69666965642070617468206f66207468652062617368206578656375746160818201527f626c652e20466f72206578616d706c652c20696620796f75206172652075736960a18201527f6e672047697420666f722057696e646f77732c206164642074686520666f6c6c60c18201527f6f77696e67206c696e6520696e20746865202e656e762066696c65206f66207960e18201527f6f75722070726f6a65637420287573696e6720666f727761726420736c6173686101018201527f6573293a0a4f50454e5a455050454c494e5f424153485f504154483d22433a2f6101218201527f50726f6772616d2046696c65732f4769742f62696e2f6261736822000000000061014182015261015c01919050565b7f4661696c656420746f2066696e64206c696e652077697468207072656669782081527f2700000000000000000000000000000000000000000000000000000000000000602082015260008351619f27816021850160208801618ca1565b7f2720696e206f75747075743a20000000000000000000000000000000000000006021918401918201528351619f6481602e840160208801618ca1565b01602e01949350505050565b7f4661696c656420746f2072756e2075706772616465207361666574792076616c81527f69646174696f6e3a200000000000000000000000000000000000000000000000602082015260008251619bd3816029850160208701618ca1565b7f55706772616465207361666574792076616c69646174696f6e206661696c656481527f3a0a00000000000000000000000000000000000000000000000000000000000060208201526000825161a02c816022850160208701618ca1565b9190910160220192915050565b7f436f6e7472616374206e616d652000000000000000000000000000000000000081526000825161a07181600e850160208701618ca1565b7f206d75737420626520696e2074686520666f726d6174204d79436f6e74726163600e9390910192830152507f742e736f6c3a4d79436f6e7472616374206f72204d79436f6e74726163742e73602e8201527f6f6c206f72206f75742f4d79436f6e74726163742e736f6c2f4d79436f6e7472604e8201527f6163742e6a736f6e000000000000000000000000000000000000000000000000606e820152607601919050565b7f53504458206c6963656e7365206964656e74696669657220000000000000000081526000835161a14f816018850160208801618ca1565b7f20696e2000000000000000000000000000000000000000000000000000000000601891840191820152835161a18c81601c840160208801618ca1565b7f20646f6573206e6f74206c6f6f6b206c696b65206120737570706f7274656420601c92909101918201527f6c6963656e736520666f7220626c6f636b206578706c6f726572207665726966603c8201527f69636174696f6e2e205573652074686520606c6963656e73655479706560206f605c8201527f7074696f6e20746f20737065636966792061206c6963656e736520747970652c607c8201527f206f7220736574207468652060736b69704c6963656e73655479706560206f70609c8201527f74696f6e20746f2060747275656020746f20736b69702e00000000000000000060bc82015260d301949350505050565b6000825161a292818460208701618ca1565b7f2000000000000000000000000000000000000000000000000000000000000000920191825250600101919050565b7f406f70656e7a657070656c696e2f75706772616465732d636f7265400000000081526000825161a2f981601c850160208701618ca1565b91909101601c0192915050565b6000600019820361a3195761a31961921a565b5060010190565b8082028115828204841417614a7057614a7061921a565b6001815b600184111561a3725780850481111561a3565761a35661921a565b600184161561a36457908102905b60019390931c92800261a33b565b935093915050565b60008261a38957506001614a70565b8161a39657506000614a70565b816001811461a3ac576002811461a3b65761a3d2565b6001915050614a70565b60ff84111561a3c75761a3c761921a565b50506001821b614a70565b5060208310610133831016604e8410600b841016171561a3f5575081810a614a70565b61a402600019848461a337565b806000190482111561a4165761a41661921a565b029392505050565b6000614b69838361a37a565b60008161a4395761a43961921a565b506000190190565b6000835161a453818460208801618ca1565b7f3a00000000000000000000000000000000000000000000000000000000000000908301908152835161a48d816001840160208801618ca1565b01600101949350505050565b8181036000831280158383131683831282161715617e2d57617e2d61921a56fe60c0604052600d60809081526c2bb930b83832b21022ba3432b960991b60a05260009061002c9082610114565b506040805180820190915260048152630ae8aa8960e31b60208201526001906100559082610114565b506002805460ff1916601217905534801561006f57600080fd5b506101d2565b634e487b7160e01b600052604160045260246000fd5b600181811c9082168061009f57607f821691505b6020821081036100bf57634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111561010f57806000526020600020601f840160051c810160208510156100ec5750805b601f840160051c820191505b8181101561010c57600081556001016100f8565b50505b505050565b81516001600160401b0381111561012d5761012d610075565b6101418161013b845461008b565b846100c5565b6020601f821160018114610175576000831561015d5750848201515b600019600385901b1c1916600184901b17845561010c565b600084815260208120601f198516915b828110156101a55787850151825560209485019460019092019101610185565b50848210156101c35786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b610986806101e16000396000f3fe6080604052600436106100c05760003560e01c8063313ce56711610074578063a9059cbb1161004e578063a9059cbb146101fa578063d0e30db01461021a578063dd62ed3e1461022257600080fd5b8063313ce5671461018c57806370a08231146101b857806395d89b41146101e557600080fd5b806318160ddd116100a557806318160ddd1461012f57806323b872dd1461014c5780632e1a7d4d1461016c57600080fd5b806306fdde03146100d4578063095ea7b3146100ff57600080fd5b366100cf576100cd61025a565b005b600080fd5b3480156100e057600080fd5b506100e96102b5565b6040516100f69190610745565b60405180910390f35b34801561010b57600080fd5b5061011f61011a3660046107da565b610343565b60405190151581526020016100f6565b34801561013b57600080fd5b50475b6040519081526020016100f6565b34801561015857600080fd5b5061011f610167366004610804565b6103bd565b34801561017857600080fd5b506100cd610187366004610841565b610647565b34801561019857600080fd5b506002546101a69060ff1681565b60405160ff90911681526020016100f6565b3480156101c457600080fd5b5061013e6101d336600461085a565b60036020526000908152604090205481565b3480156101f157600080fd5b506100e9610724565b34801561020657600080fd5b5061011f6102153660046107da565b610731565b6100cd61025a565b34801561022e57600080fd5b5061013e61023d366004610875565b600460209081526000928352604080842090915290825290205481565b33600090815260036020526040812080543492906102799084906108d7565b909155505060405134815233907fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c9060200160405180910390a2565b600080546102c2906108ea565b80601f01602080910402602001604051908101604052809291908181526020018280546102ee906108ea565b801561033b5780601f106103105761010080835404028352916020019161033b565b820191906000526020600020905b81548152906001019060200180831161031e57829003601f168201915b505050505081565b33600081815260046020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925906103ab9086815260200190565b60405180910390a35060015b92915050565b73ffffffffffffffffffffffffffffffffffffffff831660009081526003602052604081205482111561042b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600060248201526044015b60405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff841633148015906104a1575073ffffffffffffffffffffffffffffffffffffffff841660009081526004602090815260408083203384529091529020547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff14155b156105605773ffffffffffffffffffffffffffffffffffffffff8416600090815260046020908152604080832033845290915290205482111561051a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526020600482015260006024820152604401610422565b73ffffffffffffffffffffffffffffffffffffffff841660009081526004602090815260408083203384529091528120805484929061055a90849061093d565b90915550505b73ffffffffffffffffffffffffffffffffffffffff84166000908152600360205260408120805484929061059590849061093d565b909155505073ffffffffffffffffffffffffffffffffffffffff8316600090815260036020526040812080548492906105cf9084906108d7565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161063591815260200190565b60405180910390a35060019392505050565b3360009081526003602052604090205481111561069a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526020600482015260006024820152604401610422565b33600090815260036020526040812080548392906106b990849061093d565b9091555050604051339082156108fc029083906000818181858888f193505050501580156106eb573d6000803e3d6000fd5b5060405181815233907f7fcf532c15f0a6db0bd6d0e038bea71d30d808c7d98cb3bf7268a95bf5081b659060200160405180910390a250565b600180546102c2906108ea565b600061073e3384846103bd565b9392505050565b602081526000825180602084015260005b818110156107735760208186018101516040868401015201610756565b5060006040828501015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011684010191505092915050565b803573ffffffffffffffffffffffffffffffffffffffff811681146107d557600080fd5b919050565b600080604083850312156107ed57600080fd5b6107f6836107b1565b946020939093013593505050565b60008060006060848603121561081957600080fd5b610822846107b1565b9250610830602085016107b1565b929592945050506040919091013590565b60006020828403121561085357600080fd5b5035919050565b60006020828403121561086c57600080fd5b61073e826107b1565b6000806040838503121561088857600080fd5b610891836107b1565b915061089f602084016107b1565b90509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b808201808211156103b7576103b76108a8565b600181811c908216806108fe57607f821691505b602082108103610937577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b818103818111156103b7576103b76108a856fea264697066735822122008d7fc4e09519c5dd9f356b03596f6829a151d0bc7682533f9ceab4e459f5ee264736f6c634300081a00336080604052348015600f57600080fd5b506105208061001f6000396000f3fe60806040526004361061002a5760003560e01c806369582bee14610033578063de43156e1461005357005b3661003157005b005b34801561003f57600080fd5b5061003161004e3660046101ba565b610073565b34801561005f57600080fd5b5061003161006e3660046101ba565b6100ee565b6060811561008a5761008782840184610273565b90505b7ffdc887992b033668833927e252058e468fac0b6bd196d520f09c61b740e999486100b58780610369565b6100c560408a0160208b016103ce565b896040013533866040516100de969594939291906103f0565b60405180910390a1505050505050565b606081156101055761010282840184610273565b90505b7fcdc8ee677dc5ebe680fb18cebda5e26ba5ea1f0ba504a47e2a9a2ecb476dc98e6100b58780610369565b60006060828403121561014257600080fd5b50919050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461016c57600080fd5b919050565b60008083601f84011261018357600080fd5b50813567ffffffffffffffff81111561019b57600080fd5b6020830191508360208285010111156101b357600080fd5b9250929050565b6000806000806000608086880312156101d257600080fd5b853567ffffffffffffffff8111156101e957600080fd5b6101f588828901610130565b95505061020460208701610148565b935060408601359250606086013567ffffffffffffffff81111561022757600080fd5b61023388828901610171565b969995985093965092949392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60006020828403121561028557600080fd5b813567ffffffffffffffff81111561029c57600080fd5b8201601f810184136102ad57600080fd5b803567ffffffffffffffff8111156102c7576102c7610244565b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8501160116810181811067ffffffffffffffff8211171561033357610333610244565b60405281815282820160200186101561034b57600080fd5b81602084016020830137600091810160200191909152949350505050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261039e57600080fd5b83018035915067ffffffffffffffff8211156103b957600080fd5b6020019150368190038213156101b357600080fd5b6000602082840312156103e057600080fd5b6103e982610148565b9392505050565b60a081528560a0820152858760c0830137600060c0878301015260007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f880116820173ffffffffffffffffffffffffffffffffffffffff8716602084015285604084015273ffffffffffffffffffffffffffffffffffffffff8516606084015260c083820301608084015283518060c083015260005b818110156104a557602081870181015184830160e0015201610488565b50600060e0838301810191909152601f9091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016909101019897505050505050505056fea2646970667358221220b5ac4aa023957e7bc2aaba2c22840cdbf052fb679bd912caa0c8614a69afc7b164736f6c634300081a003360c060405234801561001057600080fd5b5060405161106f38038061106f83398101604081905261002f916100db565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461006357604051632b2add3d60e01b815260040160405180910390fd5b600380546001600160a01b0319166001600160a01b0385811691909117909155828116608052811660a0526040517f80699e81136d69cb8367ad52a994e25c722a86da654b561d0c14b61a777e7ac590600090a150505061011e565b80516001600160a01b03811681146100d657600080fd5b919050565b6000806000606084860312156100f057600080fd5b6100f9846100bf565b9250610107602085016100bf565b9150610115604085016100bf565b90509250925092565b60805160a051610f2561014a60003960006101e50152600081816102b9015261045b0152610f256000f3fe608060405234801561001057600080fd5b50600436106100f55760003560e01c806397770dff11610097578063c63585cc11610066578063c63585cc14610273578063d7fd7afb14610286578063d936a012146102b4578063ee2815ba146102db57600080fd5b806397770dff1461021a578063a7cb05071461022d578063c39aca3714610240578063c62178ac1461025357600080fd5b8063513a9c05116100d3578063513a9c051461018a578063569541b9146101c0578063842da36d146101e057806391dd645f1461020757600080fd5b80630be15547146100fa5780631f0e251b1461015a5780633ce4a5bc1461016f575b600080fd5b610130610108366004610bd1565b60016020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b61016d610168366004610c13565b6102ee565b005b61013073735b14bb79463307aacbed86daf3322b1e6226ab81565b610130610198366004610bd1565b60026020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b6003546101309073ffffffffffffffffffffffffffffffffffffffff1681565b6101307f000000000000000000000000000000000000000000000000000000000000000081565b61016d610215366004610c35565b610402565b61016d610228366004610c13565b610526565b61016d61023b366004610c61565b610633565b61016d61024e366004610c83565b6106ce565b6004546101309073ffffffffffffffffffffffffffffffffffffffff1681565b610130610281366004610d53565b6108cd565b6102a6610294366004610bd1565b60006020819052908152604090205481565b604051908152602001610151565b6101307f000000000000000000000000000000000000000000000000000000000000000081565b61016d6102e9366004610c35565b610a02565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461033b576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116610388576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600480547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527f3ade88e3922d64780e1bf4460d364c2970b69da813f9c0c07a1c187b5647636c906020015b60405180910390a150565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461044f576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600354600090610497907f00000000000000000000000000000000000000000000000000000000000000009073ffffffffffffffffffffffffffffffffffffffff16846108cd565b60008481526002602090815260409182902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff85169081179091558251878152918201529192507f0ecec485166da6139b13bb7e033e9446e2d35348e80ebf1180d4afe2dba1704e910160405180910390a1505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610573576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff81166105c0576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527fdba79d534382d1a8ae108e4c8ecb27c6ae42ab8b91d44eedf88bd329f3868d5e906020016103f7565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610680576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000828152602081815260409182902083905581518481529081018390527f49f492222906ac486c3c1401fa545626df1f0c0e5a77a05597ea2ed66af9850d91015b60405180910390a15050565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461071b576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff831673735b14bb79463307aacbed86daf3322b1e6226ab1480610768575073ffffffffffffffffffffffffffffffffffffffff831630145b1561079f576040517f82d5d76a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f47e7ef2400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152602482018690528616906347e7ef24906044016020604051808303816000875af1158015610814573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108389190610d96565b506040517fde43156e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84169063de43156e906108939089908990899088908890600401610e01565b600060405180830381600087803b1580156108ad57600080fd5b505af11580156108c1573d6000803e3d6000fd5b50505050505050505050565b60008060006108dc8585610ad3565b6040517fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606084811b8216602084015283901b16603482015291935091508690604801604051602081830303815290604052805190602001206040516020016109c29291907fff00000000000000000000000000000000000000000000000000000000000000815260609290921b7fffffffffffffffffffffffffffffffffffffffff00000000000000000000000016600183015260158201527f96e8ac4277198ff8b6f785478aa9a39f403cb768dd02cbee326c3e7da348845f603582015260550190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291905280516020909101209695505050505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610a4f576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008281526001602090815260409182902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff85169081179091558251858152918201527fd1b36d30f6248e97c473b4d1348ca164a4ef6759022f54a58ec200326c39c45d91016106c2565b6000808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603610b3b576040517fcb1e7cfe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1610610b75578284610b78565b83835b909250905073ffffffffffffffffffffffffffffffffffffffff8216610bca576040517f78b507da00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b9250929050565b600060208284031215610be357600080fd5b5035919050565b803573ffffffffffffffffffffffffffffffffffffffff81168114610c0e57600080fd5b919050565b600060208284031215610c2557600080fd5b610c2e82610bea565b9392505050565b60008060408385031215610c4857600080fd5b82359150610c5860208401610bea565b90509250929050565b60008060408385031215610c7457600080fd5b50508035926020909101359150565b60008060008060008060a08789031215610c9c57600080fd5b863567ffffffffffffffff811115610cb357600080fd5b87016060818a031215610cc557600080fd5b9550610cd360208801610bea565b945060408701359350610ce860608801610bea565b9250608087013567ffffffffffffffff811115610d0457600080fd5b8701601f81018913610d1557600080fd5b803567ffffffffffffffff811115610d2c57600080fd5b896020828401011115610d3e57600080fd5b60208201935080925050509295509295509295565b600080600060608486031215610d6857600080fd5b610d7184610bea565b9250610d7f60208501610bea565b9150610d8d60408501610bea565b90509250925092565b600060208284031215610da857600080fd5b81518015158114610c2e57600080fd5b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b60808152600086357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1883603018112610e3957600080fd5b870160208101903567ffffffffffffffff811115610e5657600080fd5b803603821315610e6557600080fd5b60606080850152610e7a60e085018284610db8565b91505073ffffffffffffffffffffffffffffffffffffffff610e9e60208a01610bea565b1660a0840152604088013560c084015273ffffffffffffffffffffffffffffffffffffffff871660208401528560408401528281036060840152610ee3818587610db8565b9897505050505050505056fea2646970667358221220fea45cb058045b493e646c8b9505ea080ab95fd7ed4498b922d179cf1abec08e64736f6c634300081a003360e060405234801561001057600080fd5b50604051611bb9380380611bb983398101604081905261002f9161020e565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461006357604051632b2add3d60e01b815260040160405180910390fd5b6001600160a01b038216158061008057506001600160a01b038116155b1561009e5760405163d92e233d60e01b815260040160405180910390fd5b60066100aa8982610360565b5060076100b78882610360565b5060ff861660c05260808590528360028111156100d6576100d661041e565b60a08160028111156100ea576100ea61041e565b905250600192909255600080546001600160a01b039283166001600160a01b03199182161790915560088054929093169116179055506104349350505050565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261015157600080fd5b81516001600160401b0381111561016a5761016a61012a565b604051601f8201601f19908116603f011681016001600160401b03811182821017156101985761019861012a565b6040528181528382016020018510156101b057600080fd5b60005b828110156101cf576020818601810151838301820152016101b3565b506000918101602001919091529392505050565b8051600381106101f257600080fd5b919050565b80516001600160a01b03811681146101f257600080fd5b600080600080600080600080610100898b03121561022b57600080fd5b88516001600160401b0381111561024157600080fd5b61024d8b828c01610140565b60208b015190995090506001600160401b0381111561026b57600080fd5b6102778b828c01610140565b975050604089015160ff8116811461028e57600080fd5b60608a015190965094506102a460808a016101e3565b60a08a015190945092506102ba60c08a016101f7565b91506102c860e08a016101f7565b90509295985092959890939650565b600181811c908216806102eb57607f821691505b60208210810361030b57634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111561035b57806000526020600020601f840160051c810160208510156103385750805b601f840160051c820191505b818110156103585760008155600101610344565b50505b505050565b81516001600160401b038111156103795761037961012a565b61038d8161038784546102d7565b84610311565b6020601f8211600181146103c157600083156103a95750848201515b600019600385901b1c1916600184901b178455610358565b600084815260208120601f198516915b828110156103f157878501518255602094850194600190920191016103d1565b508482101561040f5786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b634e487b7160e01b600052602160045260246000fd5b60805160a05160c05161174861047160003960006102170152600061033a0152600081816102eb01528181610ad70152610bdd01526117486000f3fe608060405234801561001057600080fd5b50600436106101985760003560e01c80638b851b95116100e3578063ccc775991161008c578063eddeb12311610066578063eddeb12314610431578063f2441b3214610444578063f687d12a1461046457600080fd5b8063ccc77599146103a4578063d9eeebed146103b7578063dd62ed3e146103eb57600080fd5b8063a9059cbb116100bd578063a9059cbb14610369578063c70126261461037c578063c835d7cc1461038f57600080fd5b80638b851b951461030d57806395d89b411461032d578063a3413d031461033557600080fd5b80633ce4a5bc116101455780634d8943bb1161011f5780634d8943bb146102a757806370a08231146102b057806385e1f4d0146102e657600080fd5b80633ce4a5bc1461024157806342966c681461028157806347e7ef241461029457600080fd5b806318160ddd1161017657806318160ddd146101f557806323b872dd146101fd578063313ce5671461021057600080fd5b806306fdde031461019d578063091d2788146101bb578063095ea7b3146101d2575b600080fd5b6101a5610477565b6040516101b29190611327565b60405180910390f35b6101c460015481565b6040519081526020016101b2565b6101e56101e0366004611366565b610509565b60405190151581526020016101b2565b6005546101c4565b6101e561020b366004611392565b610520565b60405160ff7f00000000000000000000000000000000000000000000000000000000000000001681526020016101b2565b61025c73735b14bb79463307aacbed86daf3322b1e6226ab81565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101b2565b6101e561028f3660046113d3565b6105b7565b6101e56102a2366004611366565b6105cb565b6101c460025481565b6101c46102be3660046113ec565b73ffffffffffffffffffffffffffffffffffffffff1660009081526003602052604090205490565b6101c47f000000000000000000000000000000000000000000000000000000000000000081565b60085461025c9073ffffffffffffffffffffffffffffffffffffffff1681565b6101a561071f565b61035c7f000000000000000000000000000000000000000000000000000000000000000081565b6040516101b29190611409565b6101e5610377366004611366565b61072e565b6101e561038a366004611479565b61073b565b6103a261039d3660046113ec565b61088a565b005b6103a26103b23660046113ec565b61099e565b6103bf610aab565b6040805173ffffffffffffffffffffffffffffffffffffffff90931683526020830191909152016101b2565b6101c46103f9366004611571565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260046020908152604080832093909416825291909152205490565b6103a261043f3660046113d3565b610cc9565b60005461025c9073ffffffffffffffffffffffffffffffffffffffff1681565b6103a26104723660046113d3565b610d4b565b606060068054610486906115aa565b80601f01602080910402602001604051908101604052809291908181526020018280546104b2906115aa565b80156104ff5780601f106104d4576101008083540402835291602001916104ff565b820191906000526020600020905b8154815290600101906020018083116104e257829003601f168201915b5050505050905090565b6000610516338484610dcd565b5060015b92915050565b600061052d848484610ed6565b73ffffffffffffffffffffffffffffffffffffffff8416600090815260046020908152604080832033845290915290205482811015610598576040517f10bad14700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6105ac85336105a7868561162c565b610dcd565b506001949350505050565b60006105c33383611091565b506001919050565b60003373735b14bb79463307aacbed86daf3322b1e6226ab14801590610609575060005473ffffffffffffffffffffffffffffffffffffffff163314155b801561062d575060085473ffffffffffffffffffffffffffffffffffffffff163314155b15610664576040517fddb5de5e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61066e83836111d3565b6040517f735b14bb79463307aacbed86daf3322b1e6226ab000000000000000000000000602082015273ffffffffffffffffffffffffffffffffffffffff8416907f67fc7bdaed5b0ec550d8706b87d60568ab70c6b781263c70101d54cd1564aab390603401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529082905261070e91869061163f565b60405180910390a250600192915050565b606060078054610486906115aa565b6000610516338484610ed6565b6000806000610748610aab565b6040517f23b872dd00000000000000000000000000000000000000000000000000000000815233600482015273735b14bb79463307aacbed86daf3322b1e6226ab602482015260448101829052919350915073ffffffffffffffffffffffffffffffffffffffff8316906323b872dd906064016020604051808303816000875af11580156107da573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107fe9190611661565b610834576040517f0a7cd6d600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61083e3385611091565b60025460405133917f9ffbffc04a397460ee1dbe8c9503e098090567d6b7f4b3c02a8617d800b6d9559161087791899189918791611683565b60405180910390a2506001949350505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab146108d7576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116610924576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527fd55614e962c5fd6ece71614f6348d702468a997a394dd5e5c1677950226d97ae906020015b60405180910390a150565b3373735b14bb79463307aacbed86daf3322b1e6226ab146109eb576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116610a38576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600880547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527f88815d964e380677e86d817e7d65dea59cb7b4c3b5b7a0c8ec7ea4a74f90a38790602001610993565b600080546040517f0be155470000000000000000000000000000000000000000000000000000000081527f000000000000000000000000000000000000000000000000000000000000000060048201528291829173ffffffffffffffffffffffffffffffffffffffff90911690630be1554790602401602060405180830381865afa158015610b3e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b6291906116b2565b905073ffffffffffffffffffffffffffffffffffffffff8116610bb1576040517f78fff39600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080546040517fd7fd7afb0000000000000000000000000000000000000000000000000000000081527f0000000000000000000000000000000000000000000000000000000000000000600482015273ffffffffffffffffffffffffffffffffffffffff9091169063d7fd7afb90602401602060405180830381865afa158015610c40573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c6491906116cf565b905080600003610ca0576040517fe661aed000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060025460015483610cb391906116e8565b610cbd91906116ff565b92959294509192505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610d16576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60028190556040518181527fef13af88e424b5d15f49c77758542c1938b08b8b95b91ed0751f98ba99000d8f90602001610993565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610d98576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018190556040518181527fff5788270f43bfc1ca41c503606d2594aa3023a1a7547de403a3e2f146a4a80a90602001610993565b73ffffffffffffffffffffffffffffffffffffffff8316610e1a576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216610e67576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff83811660008181526004602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8316610f23576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216610f70576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff831660009081526003602052604090205481811015610fd0576040517ffe382aa700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610fda828261162c565b73ffffffffffffffffffffffffffffffffffffffff808616600090815260036020526040808220939093559085168152908120805484929061101d9084906116ff565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161108391815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff82166110de576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff82166000908152600360205260409020548181101561113e576040517ffe382aa700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611148828261162c565b73ffffffffffffffffffffffffffffffffffffffff84166000908152600360205260408120919091556005805484929061118390849061162c565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90602001610ec9565b73ffffffffffffffffffffffffffffffffffffffff8216611220576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b806005600082825461123291906116ff565b909155505073ffffffffffffffffffffffffffffffffffffffff82166000908152600360205260408120805483929061126c9084906116ff565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6000815180845260005b818110156112e9576020818501810151868301820152016112cd565b5060006020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b60208152600061133a60208301846112c3565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff8116811461136357600080fd5b50565b6000806040838503121561137957600080fd5b823561138481611341565b946020939093013593505050565b6000806000606084860312156113a757600080fd5b83356113b281611341565b925060208401356113c281611341565b929592945050506040919091013590565b6000602082840312156113e557600080fd5b5035919050565b6000602082840312156113fe57600080fd5b813561133a81611341565b6020810160038310611444577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000806040838503121561148c57600080fd5b823567ffffffffffffffff8111156114a357600080fd5b8301601f810185136114b457600080fd5b803567ffffffffffffffff8111156114ce576114ce61144a565b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8501160116810181811067ffffffffffffffff8211171561153a5761153a61144a565b60405281815282820160200187101561155257600080fd5b8160208401602083013760006020928201830152969401359450505050565b6000806040838503121561158457600080fd5b823561158f81611341565b9150602083013561159f81611341565b809150509250929050565b600181811c908216806115be57607f821691505b6020821081036115f7577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8181038181111561051a5761051a6115fd565b60408152600061165260408301856112c3565b90508260208301529392505050565b60006020828403121561167357600080fd5b8151801515811461133a57600080fd5b60808152600061169660808301876112c3565b6020830195909552506040810192909252606090910152919050565b6000602082840312156116c457600080fd5b815161133a81611341565b6000602082840312156116e157600080fd5b5051919050565b808202811582820484141761051a5761051a6115fd565b8082018082111561051a5761051a6115fd56fea26469706673582212204013e39523742118b3f2227e145ee7e48176ba6aebead33c596dca2acb59a74c64736f6c634300081a0033a264697066735822122067decc36d8b1edb726774e2fb44b162d21e3b4bf4a180f8771c64c03ca08c05664736f6c634300081a0033", } // GatewayZEVMInboundTestABI is the input ABI used to generate the binding from. @@ -655,27 +655,6 @@ func (_GatewayZEVMInboundTest *GatewayZEVMInboundTestTransactorSession) TestCall return _GatewayZEVMInboundTest.Contract.TestCallFailsIfReceiverIsZeroAddress(&_GatewayZEVMInboundTest.TransactOpts) } -// TestWithdrawAndCallZETAFailsIfAmountIsZero is a paid mutator transaction binding the contract method 0x423a5874. -// -// Solidity: function testWithdrawAndCallZETAFailsIfAmountIsZero() returns() -func (_GatewayZEVMInboundTest *GatewayZEVMInboundTestTransactor) TestWithdrawAndCallZETAFailsIfAmountIsZero(opts *bind.TransactOpts) (*types.Transaction, error) { - return _GatewayZEVMInboundTest.contract.Transact(opts, "testWithdrawAndCallZETAFailsIfAmountIsZero") -} - -// TestWithdrawAndCallZETAFailsIfAmountIsZero is a paid mutator transaction binding the contract method 0x423a5874. -// -// Solidity: function testWithdrawAndCallZETAFailsIfAmountIsZero() returns() -func (_GatewayZEVMInboundTest *GatewayZEVMInboundTestSession) TestWithdrawAndCallZETAFailsIfAmountIsZero() (*types.Transaction, error) { - return _GatewayZEVMInboundTest.Contract.TestWithdrawAndCallZETAFailsIfAmountIsZero(&_GatewayZEVMInboundTest.TransactOpts) -} - -// TestWithdrawAndCallZETAFailsIfAmountIsZero is a paid mutator transaction binding the contract method 0x423a5874. -// -// Solidity: function testWithdrawAndCallZETAFailsIfAmountIsZero() returns() -func (_GatewayZEVMInboundTest *GatewayZEVMInboundTestTransactorSession) TestWithdrawAndCallZETAFailsIfAmountIsZero() (*types.Transaction, error) { - return _GatewayZEVMInboundTest.Contract.TestWithdrawAndCallZETAFailsIfAmountIsZero(&_GatewayZEVMInboundTest.TransactOpts) -} - // TestWithdrawAndCallZRC20FailsIfAmountIsZero is a paid mutator transaction binding the contract method 0xba9adeef. // // Solidity: function testWithdrawAndCallZRC20FailsIfAmountIsZero() returns() @@ -718,6 +697,48 @@ func (_GatewayZEVMInboundTest *GatewayZEVMInboundTestTransactorSession) TestWith return _GatewayZEVMInboundTest.Contract.TestWithdrawAndCallZRC20FailsIfReceiverIsZeroAddress(&_GatewayZEVMInboundTest.TransactOpts) } +// TestWithdrawAndcallZETAFailsIfAmountIsReceiverIsZeroAddress is a paid mutator transaction binding the contract method 0x95c379c1. +// +// Solidity: function testWithdrawAndcallZETAFailsIfAmountIsReceiverIsZeroAddress() returns() +func (_GatewayZEVMInboundTest *GatewayZEVMInboundTestTransactor) TestWithdrawAndcallZETAFailsIfAmountIsReceiverIsZeroAddress(opts *bind.TransactOpts) (*types.Transaction, error) { + return _GatewayZEVMInboundTest.contract.Transact(opts, "testWithdrawAndcallZETAFailsIfAmountIsReceiverIsZeroAddress") +} + +// TestWithdrawAndcallZETAFailsIfAmountIsReceiverIsZeroAddress is a paid mutator transaction binding the contract method 0x95c379c1. +// +// Solidity: function testWithdrawAndcallZETAFailsIfAmountIsReceiverIsZeroAddress() returns() +func (_GatewayZEVMInboundTest *GatewayZEVMInboundTestSession) TestWithdrawAndcallZETAFailsIfAmountIsReceiverIsZeroAddress() (*types.Transaction, error) { + return _GatewayZEVMInboundTest.Contract.TestWithdrawAndcallZETAFailsIfAmountIsReceiverIsZeroAddress(&_GatewayZEVMInboundTest.TransactOpts) +} + +// TestWithdrawAndcallZETAFailsIfAmountIsReceiverIsZeroAddress is a paid mutator transaction binding the contract method 0x95c379c1. +// +// Solidity: function testWithdrawAndcallZETAFailsIfAmountIsReceiverIsZeroAddress() returns() +func (_GatewayZEVMInboundTest *GatewayZEVMInboundTestTransactorSession) TestWithdrawAndcallZETAFailsIfAmountIsReceiverIsZeroAddress() (*types.Transaction, error) { + return _GatewayZEVMInboundTest.Contract.TestWithdrawAndcallZETAFailsIfAmountIsReceiverIsZeroAddress(&_GatewayZEVMInboundTest.TransactOpts) +} + +// TestWithdrawAndcallZETAFailsIfAmountIsZero is a paid mutator transaction binding the contract method 0xbcc52b9a. +// +// Solidity: function testWithdrawAndcallZETAFailsIfAmountIsZero() returns() +func (_GatewayZEVMInboundTest *GatewayZEVMInboundTestTransactor) TestWithdrawAndcallZETAFailsIfAmountIsZero(opts *bind.TransactOpts) (*types.Transaction, error) { + return _GatewayZEVMInboundTest.contract.Transact(opts, "testWithdrawAndcallZETAFailsIfAmountIsZero") +} + +// TestWithdrawAndcallZETAFailsIfAmountIsZero is a paid mutator transaction binding the contract method 0xbcc52b9a. +// +// Solidity: function testWithdrawAndcallZETAFailsIfAmountIsZero() returns() +func (_GatewayZEVMInboundTest *GatewayZEVMInboundTestSession) TestWithdrawAndcallZETAFailsIfAmountIsZero() (*types.Transaction, error) { + return _GatewayZEVMInboundTest.Contract.TestWithdrawAndcallZETAFailsIfAmountIsZero(&_GatewayZEVMInboundTest.TransactOpts) +} + +// TestWithdrawAndcallZETAFailsIfAmountIsZero is a paid mutator transaction binding the contract method 0xbcc52b9a. +// +// Solidity: function testWithdrawAndcallZETAFailsIfAmountIsZero() returns() +func (_GatewayZEVMInboundTest *GatewayZEVMInboundTestTransactorSession) TestWithdrawAndcallZETAFailsIfAmountIsZero() (*types.Transaction, error) { + return _GatewayZEVMInboundTest.Contract.TestWithdrawAndcallZETAFailsIfAmountIsZero(&_GatewayZEVMInboundTest.TransactOpts) +} + // TestWithdrawZETA is a paid mutator transaction binding the contract method 0xea37902f. // // Solidity: function testWithdrawZETA() returns() diff --git a/v2/pkg/gatewayzevm.t.sol/gatewayzevmoutboundtest.go b/v2/pkg/gatewayzevm.t.sol/gatewayzevmoutboundtest.go index 98a63dd5..03c9e8ce 100644 --- a/v2/pkg/gatewayzevm.t.sol/gatewayzevmoutboundtest.go +++ b/v2/pkg/gatewayzevm.t.sol/gatewayzevmoutboundtest.go @@ -49,8 +49,8 @@ type StdInvariantFuzzSelector struct { // GatewayZEVMOutboundTestMetaData contains all meta data concerning the GatewayZEVMOutboundTest contract. var GatewayZEVMOutboundTestMetaData = &bind.MetaData{ - ABI: "[{\"type\":\"function\",\"name\":\"IS_TEST\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"PAUSER_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeArtifacts\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedArtifacts_\",\"type\":\"string[]\",\"internalType\":\"string[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeContracts\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedContracts_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeSelectors\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedSelectors_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzSelector[]\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"selectors\",\"type\":\"bytes4[]\",\"internalType\":\"bytes4[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeSenders\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedSenders_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"failed\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"setUp\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"targetArtifactSelectors\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedArtifactSelectors_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzArtifactSelector[]\",\"components\":[{\"name\":\"artifact\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"selectors\",\"type\":\"bytes4[]\",\"internalType\":\"bytes4[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetArtifacts\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedArtifacts_\",\"type\":\"string[]\",\"internalType\":\"string[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetContracts\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedContracts_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetInterfaces\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedInterfaces_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzInterface[]\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"artifacts\",\"type\":\"string[]\",\"internalType\":\"string[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetSelectors\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedSelectors_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzSelector[]\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"selectors\",\"type\":\"bytes4[]\",\"internalType\":\"bytes4[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetSenders\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedSenders_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"testDeposit\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositAndRevertZRC20AndCallUniversalContract\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositAndRevertZRC20AndCallUniversalContractFailsITargetIsFungibleModule\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositAndRevertZRC20AndCallUniversalContractFailsITargetIsGateway\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositAndRevertZRC20AndCallUniversalContractFailsIfAmountIsZero\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositAndRevertZRC20AndCallUniversalContractFailsIfSenderIsNotFungibleModule\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositAndRevertZRC20AndCallUniversalContractFailsIfTargetIsZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositAndRevertZRC20AndCallUniversalContractFailsIfZRC20IsZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositFailsIfAmountIs0\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositFailsIfSenderNotFungibleModule\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositFailsIfTargetIsFungibleModule\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositFailsIfTargetIsGateway\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositFailsIfTargetIsZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositFailsIfZRC20IsZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositTogglePause\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositZETAAndCallUniversal\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositZETAAndCallUniversalContract\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositZETAAndCallUniversalContractFailsIfSenderIsNotFungibleModule\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositZETAAndCallUniversalContractFailsIfTargetIsAmountIsZero\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositZETAAndCallUniversalContractFailsIfTargetIsFungibleModule\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositZETAAndCallUniversalContractFailsIfTargetIsGateway\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositZETAAndCallUniversalContractFailsIfTargetIsZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositZRC20AndCallUniversalContract\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositZRC20AndCallUniversalContractFailsIfAmountIsZero\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositZRC20AndCallUniversalContractFailsIfSenderIsNotFungibleModule\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositZRC20AndCallUniversalContractFailsIfTargetIsZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositZRC20AndCallUniversalContractFailsIfZRC20IsZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositZRC20AndCallUniversalContractIfTargetIsFungibleModule\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositZRC20AndCallUniversalContractIfTargetIsGateway\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testExecuteFailsIfAmountIsZero\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testExecuteFailsIfTargetIsZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testExecuteFailsIfZRC20IsZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testExecuteRevertUniversalContract\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testExecuteRevertUniversalContractFailsIfAmountIsZero\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testExecuteRevertUniversalContractFailsIfTargetIsZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testExecuteRevertUniversalContractFailsIfZRC20IsZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testExecuteRevertUniversalContractFailsIfZrc20IsZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testExecuteRevertUniversalContractIfSenderIsNotFungibleModule\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testExecuteUniversalContract\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testExecuteUniversalContractFailsIfSenderIsNotFungibleModule\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testExecuteUniversalContractFailsIfZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"event\",\"name\":\"Call\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"chainId\",\"type\":\"uint256\",\"indexed\":true,\"internalType\":\"uint256\"},{\"name\":\"receiver\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"message\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ContextData\",\"inputs\":[{\"name\":\"origin\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"chainID\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"msgSender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"message\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ContextDataRevert\",\"inputs\":[{\"name\":\"origin\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"chainID\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"msgSender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"message\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Withdrawal\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"chainId\",\"type\":\"uint256\",\"indexed\":true,\"internalType\":\"uint256\"},{\"name\":\"receiver\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"zrc20\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"gasfee\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"protocolFlatFee\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"message\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log\",\"inputs\":[{\"name\":\"\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_address\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_array\",\"inputs\":[{\"name\":\"val\",\"type\":\"uint256[]\",\"indexed\":false,\"internalType\":\"uint256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_array\",\"inputs\":[{\"name\":\"val\",\"type\":\"int256[]\",\"indexed\":false,\"internalType\":\"int256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_array\",\"inputs\":[{\"name\":\"val\",\"type\":\"address[]\",\"indexed\":false,\"internalType\":\"address[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_bytes\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_bytes32\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_int\",\"inputs\":[{\"name\":\"\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_address\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_array\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"uint256[]\",\"indexed\":false,\"internalType\":\"uint256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_array\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"int256[]\",\"indexed\":false,\"internalType\":\"int256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_array\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"address[]\",\"indexed\":false,\"internalType\":\"address[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_bytes\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_bytes32\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_decimal_int\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"},{\"name\":\"decimals\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_decimal_uint\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"decimals\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_int\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_string\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_uint\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_string\",\"inputs\":[{\"name\":\"\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_uint\",\"inputs\":[{\"name\":\"\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"logs\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"AccessControlUnauthorizedAccount\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"neededRole\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"type\":\"error\",\"name\":\"CallerIsNotFungibleModule\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"EnforcedPause\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"FailedZetaSent\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"GasFeeTransferFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientZRC20Amount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientZetaAmount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidTarget\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OnlyWZETAOrFungible\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"WithdrawalFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZRC20BurnFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZRC20DepositFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZRC20TransferFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZeroAddress\",\"inputs\":[]}]", - Bin: "0x6080604052600c8054600160ff199182168117909255601f80549091169091179055348015602c57600080fd5b506201002e806200003e6000396000f3fe608060405234801561001057600080fd5b506004361061036d5760003560e01c8063828d267c116101d3578063ba414fa611610104578063e20c9f71116100a2578063ec294d9f1161007c578063ec294d9f14610583578063ef2b53941461058b578063fa7626d414610593578063fb339a1c146105a057600080fd5b8063e20c9f711461053e578063e63ab1e914610546578063eab7674e1461057b57600080fd5b8063d9978513116100de578063d99785131461051e578063d9a4fa1614610526578063df881f6c1461052e578063e09bc6591461053657600080fd5b8063ba414fa6146104f6578063c7b388b11461050e578063c8814d2e1461051657600080fd5b80639c9acd5d11610171578063a40b515b1161014b578063a40b515b146104d6578063b0464fdc146104de578063b5508aa9146104e6578063b8f2b821146104ee57600080fd5b80639c9acd5d146104be5780639ca37e92146104c6578063a0b2c7b1146104ce57600080fd5b8063916a17c6116101ad578063916a17c61461049157806396d9d876146104a657806397f7661f146104ae578063996b7675146104b657600080fd5b8063828d267c1461046c57806385226c8114610474578063884660a31461048957600080fd5b80633f7286f4116102ad5780635cec7db51161024b578063671b91e211610225578063671b91e21461044c5780636efa04b5146104545780637cec29b01461045c5780637f924c4e1461046457600080fd5b80635cec7db51461042f5780635d19c0491461041757806366d9a9a01461043757600080fd5b80634b9324b6116102875780634b9324b61461041757806351336fb01461041f57806358c9987f146104275780635b4c90e1146103c257600080fd5b80633f7286f4146103ff57806344b2a40b1461040757806348f4fd071461040f57600080fd5b80632468bc0f1161031a5780632fa381f4116102f45780632fa381f4146103df578063339bd828146103e75780633ab5b199146103ef5780633e5e3c23146103f757600080fd5b80632468bc0f146103ba5780632948df41146103c25780632ade3880146103ca57600080fd5b8063198d5ca41161034b578063198d5ca41461038c5780631c785a14146103945780631ed7831c1461039c57600080fd5b8063084fafab146103725780630a9254e41461037c57806314b7a6da14610384575b600080fd5b61037a6105a8565b005b61037a610851565b61037a6112be565b61037a611424565b61037a6116ac565b6103a4611fc3565b6040516103b1919061aae0565b60405180910390f35b61037a612025565b61037a6124f0565b6103d26126a3565b6040516103b1919061ab7c565b61037a6127e5565b61037a6129d7565b61037a612b88565b6103a4612d39565b6103a4612d99565b61037a612df9565b61037a612f81565b61037a613134565b61037a6132e7565b61037a6134a0565b61037a613655565b61043f61380c565b6040516103b1919061ace2565b61037a61398e565b61037a613b4c565b61037a613ef0565b61037a614163565b61037a61419c565b61047c61447f565b6040516103b1919061ad80565b61037a61454f565b610499614842565b6040516103b1919061adf7565b61037a61493d565b61037a614a90565b61037a614c3c565b61037a614d90565b61037a614ee0565b61037a615017565b61037a6151d2565b610499615387565b61047c615482565b61037a615552565b6104fe615710565b60405190151581526020016103b1565b61037a6157e4565b61037a6159a2565b61037a615b53565b61037a615c8a565b61037a615e48565b61037a615ffd565b6103a46161b6565b61056d7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b6040519081526020016103b1565b61037a616216565b61037a6163cb565b61037a61657a565b601f546104fe9060ff1681565b61037a61672b565b60006040516020016105b99061ae8e565b60408051601f19818403018152606080840190925260205490911b6bffffffffffffffffffffffff191660808301529150600090806094810160408051808303601f190181529181529082526027546001600160a01b03908116602084015260019282018390526024805492517f81bad6f300000000000000000000000000000000000000000000000000000000815260048101859052908101849052604481018490526064810193909352166084820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b1580156106a757600080fd5b505af11580156106bb573d6000803e3d6000fd5b5050602080546040517ffdc887992b033668833927e252058e468fac0b6bd196d520f09c61b740e99948945061071693506001600160a01b03909116910160609190911b6bffffffffffffffffffffffff1916815260140190565b60408051601f1981840301815290829052602754602054610747936001600160a01b0392831692600192169061aecb565b60405180910390a160275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa7906024015b600060405180830381600087803b1580156107a957600080fd5b505af11580156107bd573d6000803e3d6000fd5b50506020546021546024546040517f309f50040000000000000000000000000000000000000000000000000000000081526001600160a01b03938416955063309f5004945061081b938793811692600192911690899060040161af7c565b600060405180830381600087803b15801561083557600080fd5b505af1158015610849573d6000803e3d6000fd5b505050505050565b602580547fffffffffffffffffffffffff00000000000000000000000000000000000000009081163017909155602680549091166112341790556040516108979061a9ef565b604051809103906000f0801580156108b3573d6000803e3d6000fd5b50602280547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03928316908117909155604080518082018252600f81527f476174657761795a45564d2e736f6c000000000000000000000000000000000060208201526025549151602481019390935292166044820152610997919060640160408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f485cc955000000000000000000000000000000000000000000000000000000001790526168de565b601f80547fffffffffffffffffffffff0000000000000000000000000000000000000000ff166101006001600160a01b039384168102919091179182905560208054919092049092167fffffffffffffffffffffffff000000000000000000000000000000000000000090921682178155604080517f3ce4a5bc0000000000000000000000000000000000000000000000000000000081529051633ce4a5bc926004808401939192918290030181865afa158015610a59573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a7d919061afd1565b602780547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055604051610ac19061a9fd565b604051809103906000f080158015610add573d6000803e3d6000fd5b50602480547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039283161781556027546040517f06447d5600000000000000000000000000000000000000000000000000000000815292166004830152737109709ecfa91a80626ff3989d68f67f5b1dd12d916306447d569101600060405180830381600087803b158015610b7957600080fd5b505af1158015610b8d573d6000803e3d6000fd5b505050506000806000604051610ba29061aa0b565b6001600160a01b03938416815291831660208301529091166040820152606001604051809103906000f080158015610bde573d6000803e3d6000fd5b50602380547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03928316908117909155602054604051601293600193849360009391921690610c349061aa19565b610c439695949392919061affa565b604051809103906000f080158015610c5f573d6000803e3d6000fd5b50602180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039283169081179091556023546040517fee2815ba0000000000000000000000000000000000000000000000000000000081526001600482015260248101929092529091169063ee2815ba90604401600060405180830381600087803b158015610cf657600080fd5b505af1158015610d0a573d6000803e3d6000fd5b50506023546040517fa7cb050700000000000000000000000000000000000000000000000000000000815260016004820181905260248201526001600160a01b03909116925063a7cb05079150604401600060405180830381600087803b158015610d7457600080fd5b505af1158015610d88573d6000803e3d6000fd5b50506027546040517fc88a5e6d0000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152633b9aca006024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c88a5e6d9150604401600060405180830381600087803b158015610e0857600080fd5b505af1158015610e1c573d6000803e3d6000fd5b50505050602260009054906101000a90046001600160a01b03166001600160a01b031663d0e30db0600a6040518263ffffffff1660e01b81526004016000604051808303818588803b158015610e7157600080fd5b505af1158015610e85573d6000803e3d6000fd5b50506022546020546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152600a60248201529116935063095ea7b3925060440190506020604051808303816000875af1158015610ef9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f1d919061b0e9565b506021546025546040517f47e7ef240000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620186a060248201529116906347e7ef24906044016020604051808303816000875af1158015610f8e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fb2919061b0e9565b507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b03166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561101157600080fd5b505af1158015611025573d6000803e3d6000fd5b50506025546040517f06447d560000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506306447d569150602401600060405180830381600087803b15801561109b57600080fd5b505af11580156110af573d6000803e3d6000fd5b50506021546020546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620186a060248201529116925063095ea7b391506044016020604051808303816000875af1158015611123573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611147919061b0e9565b50602260009054906101000a90046001600160a01b03166001600160a01b031663d0e30db0600a6040518263ffffffff1660e01b81526004016000604051808303818588803b15801561119957600080fd5b505af11580156111ad573d6000803e3d6000fd5b50506022546020546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152600a60248201529116935063095ea7b3925060440190506020604051808303816000875af1158015611221573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611245919061b0e9565b507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b03166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156112a457600080fd5b505af11580156112b8573d6000803e3d6000fd5b50505050565b60275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561131757600080fd5b505af115801561132b573d6000803e3d6000fd5b5050604051630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b15801561139b57600080fd5b505af11580156113af573d6000803e3d6000fd5b50506020546021546040517ff45346dc0000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260016024820152600060448201529116925063f45346dc91506064015b600060405180830381600087803b1580156112a457600080fd5b6021546026546040516370a0823160e01b81526001600160a01b03918216600482015260019260009216906370a0823190602401602060405180830381865afa158015611475573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611499919061b10b565b90506114a66000826168fd565b60255460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156114ff57600080fd5b505af1158015611513573d6000803e3d6000fd5b5050604051630618f58760e51b81527f2b2add3d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b15801561158357600080fd5b505af1158015611597573d6000803e3d6000fd5b50506020546021546026546040517ff45346dc0000000000000000000000000000000000000000000000000000000081526001600160a01b0392831660048201526024810188905290821660448201529116925063f45346dc9150606401600060405180830381600087803b15801561160f57600080fd5b505af1158015611623573d6000803e3d6000fd5b50506021546026546040516370a0823160e01b81526001600160a01b03918216600482015260009450911691506370a0823190602401602060405180830381865afa158015611676573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061169a919061b10b565b90506116a76000826168fd565b505050565b60275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561170557600080fd5b505af1158015611719573d6000803e3d6000fd5b5050602754604080516001600160a01b0390921660248301527f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a60448084019190915281518084039091018152606490920181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb39250611804919060040161b124565b600060405180830381600087803b15801561181e57600080fd5b505af1158015611832573d6000803e3d6000fd5b50505050602060009054906101000a90046001600160a01b03166001600160a01b0316638456cb596040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561188657600080fd5b505af115801561189a573d6000803e3d6000fd5b505060275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b1580156118f757600080fd5b505af115801561190b573d6000803e3d6000fd5b5050602754604080516001600160a01b0390921660248301527f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a60448084019190915281518084039091018152606490920181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb392506119f6919060040161b124565b600060405180830381600087803b158015611a1057600080fd5b505af1158015611a24573d6000803e3d6000fd5b50505050602060009054906101000a90046001600160a01b03166001600160a01b0316633f4ba83a6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015611a7857600080fd5b505af1158015611a8c573d6000803e3d6000fd5b505060255460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b158015611ae957600080fd5b505af1158015611afd573d6000803e3d6000fd5b50505050602060009054906101000a90046001600160a01b03166001600160a01b0316638456cb596040518163ffffffff1660e01b8152600401600060405180830381600087803b158015611b5157600080fd5b505af1158015611b65573d6000803e3d6000fd5b5050604051630618f58760e51b81527fd93c066500000000000000000000000000000000000000000000000000000000600482015260019250737109709ecfa91a80626ff3989d68f67f5b1dd12d915063c31eb0e090602401600060405180830381600087803b158015611bd857600080fd5b505af1158015611bec573d6000803e3d6000fd5b505060275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b158015611c4957600080fd5b505af1158015611c5d573d6000803e3d6000fd5b50506020546021546026546040517ff45346dc0000000000000000000000000000000000000000000000000000000081526001600160a01b0392831660048201526024810187905290821660448201529116925063f45346dc9150606401600060405180830381600087803b158015611cd557600080fd5b505af1158015611ce9573d6000803e3d6000fd5b505060255460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b158015611d4657600080fd5b505af1158015611d5a573d6000803e3d6000fd5b50505050602060009054906101000a90046001600160a01b03166001600160a01b0316633f4ba83a6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015611dae57600080fd5b505af1158015611dc2573d6000803e3d6000fd5b50506021546026546040516370a0823160e01b81526001600160a01b03918216600482015260009450911691506370a08231906024015b602060405180830381865afa158015611e16573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e3a919061b10b565b9050611e476000826168fd565b60275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015611ea057600080fd5b505af1158015611eb4573d6000803e3d6000fd5b50506020546021546026546040517ff45346dc0000000000000000000000000000000000000000000000000000000081526001600160a01b0392831660048201526024810188905290821660448201529116925063f45346dc9150606401600060405180830381600087803b158015611f2c57600080fd5b505af1158015611f40573d6000803e3d6000fd5b50506021546026546040516370a0823160e01b81526001600160a01b03918216600482015260009450911691506370a0823190602401602060405180830381865afa158015611f93573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fb7919061b10b565b90506116a783826168fd565b6060601680548060200260200160405190810160405280929190818152602001828054801561201b57602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311611ffd575b5050505050905090565b6022546027546040516370a0823160e01b81526001600160a01b03918216600482015260019260009216906370a0823190602401602060405180830381865afa158015612076573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061209a919061b10b565b6022546020546040516370a0823160e01b81526001600160a01b0391821660048201529293506000929116906370a0823190602401602060405180830381865afa1580156120ec573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612110919061b10b565b6024546040519192506001600160a01b031631906000906121339060200161ae8e565b60408051601f19818403018152606080840190925260205490911b6bffffffffffffffffffffffff191660808301529150600090806094810160408051808303601f190181529181529082526027546001600160a01b03908116602084015260019282018390526024805492517f81bad6f300000000000000000000000000000000000000000000000000000000815260048101859052908101849052604481018490526064810193909352166084820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b15801561222157600080fd5b505af1158015612235573d6000803e3d6000fd5b5050602080546040517fcdc8ee677dc5ebe680fb18cebda5e26ba5ea1f0ba504a47e2a9a2ecb476dc98e945061229093506001600160a01b03909116910160609190911b6bffffffffffffffffffffffff1916815260140190565b60408051601f19818403018152908290526027546020546122c0936001600160a01b03928316928c92169061aecb565b60405180910390a160275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561232157600080fd5b505af1158015612335573d6000803e3d6000fd5b50506020546024546040517f21501a950000000000000000000000000000000000000000000000000000000081526001600160a01b0392831694506321501a95935061238c9286928c92911690889060040161b137565b600060405180830381600087803b1580156123a657600080fd5b505af11580156123ba573d6000803e3d6000fd5b50506022546027546040516370a0823160e01b81526001600160a01b03918216600482015260009450911691506370a0823190602401602060405180830381865afa15801561240d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612431919061b10b565b9050612446612440888861b1a0565b826168fd565b6022546020546040516370a0823160e01b81526001600160a01b03918216600482015260009291909116906370a0823190602401602060405180830381865afa158015612497573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124bb919061b10b565b90506124c786826168fd565b6124e66124d4898761b1b3565b6024546001600160a01b0316316168fd565b5050505050505050565b60006040516020016125019061ae8e565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401819052600184840152825163ca669fa760e01b815260048101919091529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163ca669fa791602480830192600092919082900301818387803b1580156125af57600080fd5b505af11580156125c3573d6000803e3d6000fd5b5050604051630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b15801561263357600080fd5b505af1158015612647573d6000803e3d6000fd5b50506020546024546040517fbcf7f32b0000000000000000000000000000000000000000000000000000000081526001600160a01b03928316945063bcf7f32b935061081b92869260009260019290911690899060040161af7c565b6060601e805480602002602001604051908101604052809291908181526020016000905b828210156127dc57600084815260208082206040805180820182526002870290920180546001600160a01b03168352600181018054835181870281018701909452808452939591948681019491929084015b828210156127c55783829060005260206000200180546127389061b1c6565b80601f01602080910402602001604051908101604052809291908181526020018280546127649061b1c6565b80156127b15780601f10612786576101008083540402835291602001916127b1565b820191906000526020600020905b81548152906001019060200180831161279457829003601f168201915b505050505081526020019060010190612719565b5050505081525050815260200190600101906126c7565b50505050905090565b6040516001906000906127fa9060200161ae8e565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401526001838301528151630618f58760e51b81527f2b2add3d0000000000000000000000000000000000000000000000000000000060048201529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163c31eb0e091602480830192600092919082900301818387803b1580156128c457600080fd5b505af11580156128d8573d6000803e3d6000fd5b505060255460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b15801561293557600080fd5b505af1158015612949573d6000803e3d6000fd5b50506020546024546040517f21501a950000000000000000000000000000000000000000000000000000000081526001600160a01b0392831694506321501a9593506129a09286928992911690889060040161b137565b600060405180830381600087803b1580156129ba57600080fd5b505af11580156129ce573d6000803e3d6000fd5b50505050505050565b60006040516020016129e89061ae8e565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401819052600184840152825163ca669fa760e01b815260048101919091529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163ca669fa791602480830192600092919082900301818387803b158015612a9657600080fd5b505af1158015612aaa573d6000803e3d6000fd5b5050604051630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b158015612b1a57600080fd5b505af1158015612b2e573d6000803e3d6000fd5b50506020546021546040517f5af659670000000000000000000000000000000000000000000000000000000081526001600160a01b039283169450635af65967935061081b9286921690600190600090899060040161af7c565b6000604051602001612b999061ae8e565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401819052600184840152825163ca669fa760e01b815260048101919091529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163ca669fa791602480830192600092919082900301818387803b158015612c4757600080fd5b505af1158015612c5b573d6000803e3d6000fd5b5050604051630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b158015612ccb57600080fd5b505af1158015612cdf573d6000803e3d6000fd5b50506020546021546040517fbcf7f32b0000000000000000000000000000000000000000000000000000000081526001600160a01b03928316945063bcf7f32b935061081b9286921690600190600090899060040161af7c565b6060601880548060200260200160405190810160405280929190818152602001828054801561201b576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311611ffd575050505050905090565b6060601780548060200260200160405190810160405280929190818152602001828054801561201b576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311611ffd575050505050905090565b60275460405163ca669fa760e01b81526001600160a01b039091166004820152600190737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015612e5557600080fd5b505af1158015612e69573d6000803e3d6000fd5b5050604051630618f58760e51b81527f82d5d76a000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b158015612ed957600080fd5b505af1158015612eed573d6000803e3d6000fd5b50506020546021546027546040517ff45346dc0000000000000000000000000000000000000000000000000000000081526001600160a01b0392831660048201526024810187905290821660448201529116925063f45346dc91506064015b600060405180830381600087803b158015612f6657600080fd5b505af1158015612f7a573d6000803e3d6000fd5b5050505050565b6000604051602001612f929061ae8e565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401819052600184840152825163ca669fa760e01b815260048101919091529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163ca669fa791602480830192600092919082900301818387803b15801561304057600080fd5b505af1158015613054573d6000803e3d6000fd5b5050604051630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b1580156130c457600080fd5b505af11580156130d8573d6000803e3d6000fd5b50506020546024546040517f5af659670000000000000000000000000000000000000000000000000000000081526001600160a01b039283169450635af65967935061081b92869260009260019290911690899060040161af7c565b60006040516020016131459061ae8e565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401819052600184840152825163ca669fa760e01b815260048101919091529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163ca669fa791602480830192600092919082900301818387803b1580156131f357600080fd5b505af1158015613207573d6000803e3d6000fd5b5050604051630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b15801561327757600080fd5b505af115801561328b573d6000803e3d6000fd5b50506020546024546040517f309f50040000000000000000000000000000000000000000000000000000000081526001600160a01b03928316945063309f5004935061081b92869260009260019290911690899060040161af7c565b60006040516020016132f89061ae8e565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401526001838301528151630618f58760e51b81527f82d5d76a0000000000000000000000000000000000000000000000000000000060048201529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163c31eb0e091602480830192600092919082900301818387803b1580156133c257600080fd5b505af11580156133d6573d6000803e3d6000fd5b505060275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b15801561343357600080fd5b505af1158015613447573d6000803e3d6000fd5b50506020546021546040517f5af659670000000000000000000000000000000000000000000000000000000081526001600160a01b039283169450635af65967935061081b92869216906001908690899060040161af7c565b60006040516020016134b19061ae8e565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401819052600184840152825163ca669fa760e01b815260048101919091529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163ca669fa791602480830192600092919082900301818387803b15801561355f57600080fd5b505af1158015613573573d6000803e3d6000fd5b5050604051630618f58760e51b81527f5d67094f000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b1580156135e357600080fd5b505af11580156135f7573d6000803e3d6000fd5b50506020546021546024546040517fc39aca370000000000000000000000000000000000000000000000000000000081526001600160a01b03938416955063c39aca37945061081b938793811692600092911690899060040161af7c565b60405160019060009061366a9060200161ae8e565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401526001838301528151630618f58760e51b81527f82d5d76a0000000000000000000000000000000000000000000000000000000060048201529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163c31eb0e091602480830192600092919082900301818387803b15801561373457600080fd5b505af1158015613748573d6000803e3d6000fd5b505060275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b1580156137a557600080fd5b505af11580156137b9573d6000803e3d6000fd5b50506020546040517f21501a950000000000000000000000000000000000000000000000000000000081526001600160a01b0390911692506321501a9591506129a090849087908590889060040161b137565b6060601b805480602002602001604051908101604052809291908181526020016000905b828210156127dc57838290600052602060002090600202016040518060400160405290816000820180546138639061b1c6565b80601f016020809104026020016040519081016040528092919081815260200182805461388f9061b1c6565b80156138dc5780601f106138b1576101008083540402835291602001916138dc565b820191906000526020600020905b8154815290600101906020018083116138bf57829003601f168201915b505050505081526020016001820180548060200260200160405190810160405280929190818152602001828054801561397657602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190600401906020826003010492830192600103820291508084116139235790505b50505050508152505081526020019060010190613830565b600060405160200161399f9061ae8e565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401526001838301528151630618f58760e51b81527f2b2add3d0000000000000000000000000000000000000000000000000000000060048201529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163c31eb0e091602480830192600092919082900301818387803b158015613a6957600080fd5b505af1158015613a7d573d6000803e3d6000fd5b505060255460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b158015613ada57600080fd5b505af1158015613aee573d6000803e3d6000fd5b50506020546021546024546040517f5af659670000000000000000000000000000000000000000000000000000000081526001600160a01b039384169550635af65967945061081b938793811692600192911690899060040161af7c565b602154602480546040516370a0823160e01b81526001600160a01b03918216600482015260009391909116916370a082319101602060405180830381865afa158015613b9c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613bc0919061b10b565b9050613bcd6000826168fd565b6000604051602001613bde9061ae8e565b60408051601f19818403018152606080840190925260205490911b6bffffffffffffffffffffffff191660808301529150600090806094810160408051808303601f190181529181529082526027546001600160a01b03908116602084015260019282018390526024805492517f81bad6f300000000000000000000000000000000000000000000000000000000815260048101859052908101849052604481018490526064810193909352166084820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b158015613ccc57600080fd5b505af1158015613ce0573d6000803e3d6000fd5b5050602080546040517fcdc8ee677dc5ebe680fb18cebda5e26ba5ea1f0ba504a47e2a9a2ecb476dc98e9450613d3b93506001600160a01b03909116910160609190911b6bffffffffffffffffffffffff1916815260140190565b60408051601f1981840301815290829052602754602054613d6c936001600160a01b0392831692600192169061aecb565b60405180910390a160275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015613dcd57600080fd5b505af1158015613de1573d6000803e3d6000fd5b50506020546021546024546040517fc39aca370000000000000000000000000000000000000000000000000000000081526001600160a01b03938416955063c39aca379450613e3f938793811692600192911690899060040161af7c565b600060405180830381600087803b158015613e5957600080fd5b505af1158015613e6d573d6000803e3d6000fd5b5050602154602480546040516370a0823160e01b81526001600160a01b03918216600482015260009550921692506370a082319101602060405180830381865afa158015613ebf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613ee3919061b10b565b90506112b86001826168fd565b6000604051602001613f019061ae8e565b60408051601f19818403018152606080840190925260205490911b6bffffffffffffffffffffffff191660808301529150600090806094810160408051808303601f190181529181529082526027546001600160a01b03908116602084015260019282018390526024805492517f81bad6f300000000000000000000000000000000000000000000000000000000815260048101859052908101849052604481018490526064810193909352166084820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b158015613fef57600080fd5b505af1158015614003573d6000803e3d6000fd5b5050602080546040517fcdc8ee677dc5ebe680fb18cebda5e26ba5ea1f0ba504a47e2a9a2ecb476dc98e945061405e93506001600160a01b03909116910160609190911b6bffffffffffffffffffffffff1916815260140190565b60408051601f198184030181529082905260275460205461408f936001600160a01b0392831692600192169061aecb565b60405180910390a160275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa7906024015b600060405180830381600087803b1580156140f157600080fd5b505af1158015614105573d6000803e3d6000fd5b50506020546021546024546040517fbcf7f32b0000000000000000000000000000000000000000000000000000000081526001600160a01b03938416955063bcf7f32b945061081b938793811692600192911690899060040161af7c565b6021546026546040516370a0823160e01b81526001600160a01b03918216600482015260019260009216906370a0823190602401611df9565b6022546027546040516370a0823160e01b81526001600160a01b03918216600482015260019260009216906370a0823190602401602060405180830381865afa1580156141ed573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614211919061b10b565b6022546020546040516370a0823160e01b81526001600160a01b0391821660048201529293506000929116906370a0823190602401602060405180830381865afa158015614263573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614287919061b10b565b6024546040519192506001600160a01b031631906000906142aa9060200161ae8e565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401819052600184840152825163ca669fa760e01b815260048101919091529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163ca669fa791602480830192600092919082900301818387803b15801561435857600080fd5b505af115801561436c573d6000803e3d6000fd5b5050604051630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b1580156143dc57600080fd5b505af11580156143f0573d6000803e3d6000fd5b50506020546040517f21501a950000000000000000000000000000000000000000000000000000000081526001600160a01b0390911692506321501a959150614445908490600190600090889060040161b137565b600060405180830381600087803b15801561445f57600080fd5b505af1158015614473573d6000803e3d6000fd5b50505050505050505050565b6060601a805480602002602001604051908101604052809291908181526020016000905b828210156127dc5783829060005260206000200180546144c29061b1c6565b80601f01602080910402602001604051908101604052809291908181526020018280546144ee9061b1c6565b801561453b5780601f106145105761010080835404028352916020019161453b565b820191906000526020600020905b81548152906001019060200180831161451e57829003601f168201915b5050505050815260200190600101906144a3565b602154602480546040516370a0823160e01b81526001600160a01b03918216600482015260009391909116916370a082319101602060405180830381865afa15801561459f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906145c3919061b10b565b90506145d06000826168fd565b60006040516020016145e19061ae8e565b60408051601f19818403018152606080840190925260205490911b6bffffffffffffffffffffffff191660808301529150600090806094810160408051808303601f190181529181529082526027546001600160a01b03908116602084015260019282018390526024805492517f81bad6f300000000000000000000000000000000000000000000000000000000815260048101859052908101849052604481018490526064810193909352166084820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b1580156146cf57600080fd5b505af11580156146e3573d6000803e3d6000fd5b5050602080546040517ffdc887992b033668833927e252058e468fac0b6bd196d520f09c61b740e99948945061473e93506001600160a01b03909116910160609190911b6bffffffffffffffffffffffff1916815260140190565b60408051601f198184030181529082905260275460205461476f936001600160a01b0392831692600192169061aecb565b60405180910390a160275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156147d057600080fd5b505af11580156147e4573d6000803e3d6000fd5b50506020546021546024546040517f5af659670000000000000000000000000000000000000000000000000000000081526001600160a01b039384169550635af659679450613e3f938793811692600192911690899060040161af7c565b6060601d805480602002602001604051908101604052809291908181526020016000905b828210156127dc5760008481526020908190206040805180820182526002860290920180546001600160a01b0316835260018101805483518187028101870190945280845293949193858301939283018282801561492557602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190600401906020826003010492830192600103820291508084116148d25790505b50505050508152505081526020019060010190614866565b60275460405163ca669fa760e01b81526001600160a01b039091166004820152600190737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561499957600080fd5b505af11580156149ad573d6000803e3d6000fd5b5050604051630618f58760e51b81527f82d5d76a000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b158015614a1d57600080fd5b505af1158015614a31573d6000803e3d6000fd5b50506020546021546040517ff45346dc0000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260248101869052911660448201819052925063f45346dc9150606401612f4c565b6000604051602001614aa19061ae8e565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401819052600184840152825163ca669fa760e01b815260048101919091529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163ca669fa791602480830192600092919082900301818387803b158015614b4f57600080fd5b505af1158015614b63573d6000803e3d6000fd5b5050604051630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b158015614bd357600080fd5b505af1158015614be7573d6000803e3d6000fd5b50506020546040517f21501a950000000000000000000000000000000000000000000000000000000081526001600160a01b0390911692506321501a95915061081b908490600190600090889060040161b137565b60275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015614c9557600080fd5b505af1158015614ca9573d6000803e3d6000fd5b5050604051630618f58760e51b81527f5d67094f000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b158015614d1957600080fd5b505af1158015614d2d573d6000803e3d6000fd5b50506020546021546026546040517ff45346dc0000000000000000000000000000000000000000000000000000000081526001600160a01b0392831660048201526000602482015290821660448201529116925063f45346dc915060640161140a565b60275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015614de957600080fd5b505af1158015614dfd573d6000803e3d6000fd5b5050604051630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b158015614e6d57600080fd5b505af1158015614e81573d6000803e3d6000fd5b50506020546026546040517ff45346dc00000000000000000000000000000000000000000000000000000000815260006004820152600160248201526001600160a01b0391821660448201529116925063f45346dc915060640161140a565b6000604051602001614ef19061ae8e565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401526001838301528151630618f58760e51b81527f2b2add3d0000000000000000000000000000000000000000000000000000000060048201529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163c31eb0e091602480830192600092919082900301818387803b158015614fbb57600080fd5b505af1158015614fcf573d6000803e3d6000fd5b505060255460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa791506024016140d7565b60405160019060009061502c9060200161ae8e565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401526001838301528151630618f58760e51b81527f82d5d76a0000000000000000000000000000000000000000000000000000000060048201529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163c31eb0e091602480830192600092919082900301818387803b1580156150f657600080fd5b505af115801561510a573d6000803e3d6000fd5b505060275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b15801561516757600080fd5b505af115801561517b573d6000803e3d6000fd5b50506020546027546040517f21501a950000000000000000000000000000000000000000000000000000000081526001600160a01b0392831694506321501a9593506129a09286928992911690889060040161b137565b60006040516020016151e39061ae8e565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401819052600184840152825163ca669fa760e01b815260048101919091529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163ca669fa791602480830192600092919082900301818387803b15801561529157600080fd5b505af11580156152a5573d6000803e3d6000fd5b5050604051630618f58760e51b81527f5d67094f000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b15801561531557600080fd5b505af1158015615329573d6000803e3d6000fd5b50506020546021546024546040517f309f50040000000000000000000000000000000000000000000000000000000081526001600160a01b03938416955063309f5004945061081b938793811692600092911690899060040161af7c565b6060601c805480602002602001604051908101604052809291908181526020016000905b828210156127dc5760008481526020908190206040805180820182526002860290920180546001600160a01b0316835260018101805483518187028101870190945280845293949193858301939283018282801561546a57602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190600401906020826003010492830192600103820291508084116154175790505b505050505081525050815260200190600101906153ab565b60606019805480602002602001604051908101604052809291908181526020016000905b828210156127dc5783829060005260206000200180546154c59061b1c6565b80601f01602080910402602001604051908101604052809291908181526020018280546154f19061b1c6565b801561553e5780601f106155135761010080835404028352916020019161553e565b820191906000526020600020905b81548152906001019060200180831161552157829003601f168201915b5050505050815260200190600101906154a6565b60006040516020016155639061ae8e565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401526001838301528151630618f58760e51b81527f82d5d76a0000000000000000000000000000000000000000000000000000000060048201529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163c31eb0e091602480830192600092919082900301818387803b15801561562d57600080fd5b505af1158015615641573d6000803e3d6000fd5b505060275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b15801561569e57600080fd5b505af11580156156b2573d6000803e3d6000fd5b50506020546021546027546040517f5af659670000000000000000000000000000000000000000000000000000000081526001600160a01b039384169550635af65967945061081b938793811692600192911690899060040161af7c565b60085460009060ff1615615728575060085460ff1690565b6040517f667f9d70000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d600482018190527f6661696c65640000000000000000000000000000000000000000000000000000602483015260009163667f9d7090604401602060405180830381865afa1580156157b9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906157dd919061b10b565b1415905090565b60006040516020016157f59061ae8e565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401526001838301528151630618f58760e51b81527f2b2add3d0000000000000000000000000000000000000000000000000000000060048201529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163c31eb0e091602480830192600092919082900301818387803b1580156158bf57600080fd5b505af11580156158d3573d6000803e3d6000fd5b505060255460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b15801561593057600080fd5b505af1158015615944573d6000803e3d6000fd5b50506020546021546024546040517fc39aca370000000000000000000000000000000000000000000000000000000081526001600160a01b03938416955063c39aca37945061081b938793811692600192911690899060040161af7c565b60006040516020016159b39061ae8e565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401819052600184840152825163ca669fa760e01b815260048101919091529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163ca669fa791602480830192600092919082900301818387803b158015615a6157600080fd5b505af1158015615a75573d6000803e3d6000fd5b5050604051630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b158015615ae557600080fd5b505af1158015615af9573d6000803e3d6000fd5b50506020546021546040517f309f50040000000000000000000000000000000000000000000000000000000081526001600160a01b03928316945063309f5004935061081b9286921690600190600090899060040161af7c565b6000604051602001615b649061ae8e565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401526001838301528151630618f58760e51b81527f2b2add3d0000000000000000000000000000000000000000000000000000000060048201529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163c31eb0e091602480830192600092919082900301818387803b158015615c2e57600080fd5b505af1158015615c42573d6000803e3d6000fd5b505060255460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa7915060240161078f565b6000604051602001615c9b9061ae8e565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401526001838301528151630618f58760e51b81527f82d5d76a0000000000000000000000000000000000000000000000000000000060048201529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163c31eb0e091602480830192600092919082900301818387803b158015615d6557600080fd5b505af1158015615d79573d6000803e3d6000fd5b505060275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b158015615dd657600080fd5b505af1158015615dea573d6000803e3d6000fd5b50506020546021546027546040517fc39aca370000000000000000000000000000000000000000000000000000000081526001600160a01b03938416955063c39aca37945061081b938793811692600192911690899060040161af7c565b6000604051602001615e599061ae8e565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401819052600184840152825163ca669fa760e01b815260048101919091529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163ca669fa791602480830192600092919082900301818387803b158015615f0757600080fd5b505af1158015615f1b573d6000803e3d6000fd5b5050604051630618f58760e51b81527f5d67094f000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b158015615f8b57600080fd5b505af1158015615f9f573d6000803e3d6000fd5b50506020546021546024546040517fbcf7f32b0000000000000000000000000000000000000000000000000000000081526001600160a01b03938416955063bcf7f32b945061081b938793811692600092911690899060040161af7c565b600060405160200161600e9061ae8e565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401526001838301528151630618f58760e51b81527f82d5d76a0000000000000000000000000000000000000000000000000000000060048201529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163c31eb0e091602480830192600092919082900301818387803b1580156160d857600080fd5b505af11580156160ec573d6000803e3d6000fd5b505060275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b15801561614957600080fd5b505af115801561615d573d6000803e3d6000fd5b50506020546021546040517fc39aca370000000000000000000000000000000000000000000000000000000081526001600160a01b03928316945063c39aca37935061081b92869216906001908690899060040161af7c565b6060601580548060200260200160405190810160405280929190818152602001828054801561201b576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311611ffd575050505050905090565b60006040516020016162279061ae8e565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401819052600184840152825163ca669fa760e01b815260048101919091529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163ca669fa791602480830192600092919082900301818387803b1580156162d557600080fd5b505af11580156162e9573d6000803e3d6000fd5b5050604051630618f58760e51b81527f5d67094f000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b15801561635957600080fd5b505af115801561636d573d6000803e3d6000fd5b50506020546021546024546040517f5af659670000000000000000000000000000000000000000000000000000000081526001600160a01b039384169550635af65967945061081b938793811692600092911690899060040161af7c565b60006040516020016163dc9061ae8e565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401819052600184840152825163ca669fa760e01b815260048101919091529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163ca669fa791602480830192600092919082900301818387803b15801561648a57600080fd5b505af115801561649e573d6000803e3d6000fd5b5050604051630618f58760e51b81527f19c08f49000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b15801561650e57600080fd5b505af1158015616522573d6000803e3d6000fd5b50506020546021546040517f21501a950000000000000000000000000000000000000000000000000000000081526001600160a01b0392831694506321501a95935061081b928692600092911690889060040161b137565b600060405160200161658b9061ae8e565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401819052600184840152825163ca669fa760e01b815260048101919091529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163ca669fa791602480830192600092919082900301818387803b15801561663957600080fd5b505af115801561664d573d6000803e3d6000fd5b5050604051630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b1580156166bd57600080fd5b505af11580156166d1573d6000803e3d6000fd5b50506020546021546040517fc39aca370000000000000000000000000000000000000000000000000000000081526001600160a01b03928316945063c39aca37935061081b9286921690600190600090899060040161af7c565b600060405160200161673c9061ae8e565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401819052600184840152825163ca669fa760e01b815260048101919091529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163ca669fa791602480830192600092919082900301818387803b1580156167ea57600080fd5b505af11580156167fe573d6000803e3d6000fd5b5050604051630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b15801561686e57600080fd5b505af1158015616882573d6000803e3d6000fd5b50506020546024546040517fc39aca370000000000000000000000000000000000000000000000000000000081526001600160a01b03928316945063c39aca37935061081b92869260009260019290911690899060040161af7c565b60006168e861aa27565b6168f384848361697c565b9150505b92915050565b6040517f98296c540000000000000000000000000000000000000000000000000000000081526004810183905260248101829052737109709ecfa91a80626ff3989d68f67f5b1dd12d906398296c549060440160006040518083038186803b15801561696857600080fd5b505afa158015610849573d6000803e3d6000fd5b60008061698985846169f7565b90506169ec6040518060400160405280601d81526020017f4552433139363750726f78792e736f6c3a4552433139363750726f787900000081525082866040516020016169d792919061b213565b60405160208183030381529060405285616a03565b9150505b9392505050565b60006169f08383616a31565b60c08101515160009015616a2757616a2084848460c00151616a4c565b90506169f0565b616a208484616bf2565b6000616a3d8383616cdd565b6169f083836020015184616a03565b600080616a57616ced565b90506000616a658683616dc0565b90506000616a7c8260600151836020015185617266565b90506000616a8c83838989617478565b90506000616a99826182f5565b602081015181519192509060030b15616b0c57898260400151604051602001616ac392919061b235565b60408051601f19818403018152908290527f08c379a0000000000000000000000000000000000000000000000000000000008252616b039160040161b124565b60405180910390fd5b6000616b4f6040518060400160405280601581526020017f4465706c6f79656420746f20616464726573733a2000000000000000000000008152508360016184c4565b6040517fc6ce059d000000000000000000000000000000000000000000000000000000008152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c6ce059d90616ba290849060040161b124565b602060405180830381865afa158015616bbf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190616be3919061afd1565b9b9a5050505050505050505050565b6040517f8d1cc9250000000000000000000000000000000000000000000000000000000081526000908190737109709ecfa91a80626ff3989d68f67f5b1dd12d90638d1cc92590616c4790879060040161b124565b600060405180830381865afa158015616c64573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052616c8c919081019061b39e565b90506000616cba8285604051602001616ca692919061b3d3565b6040516020818303038152906040526186c4565b90506001600160a01b0381166168f3578484604051602001616ac392919061b402565b616ce9828260006186d7565b5050565b604080518082018252600381527f6f75740000000000000000000000000000000000000000000000000000000000602082015290517fd145736c000000000000000000000000000000000000000000000000000000008152606091737109709ecfa91a80626ff3989d68f67f5b1dd12d91829063d145736c90616d7490849060040161b4ad565b600060405180830381865afa158015616d91573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052616db9919081019061b4f4565b9250505090565b616df26040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b6000737109709ecfa91a80626ff3989d68f67f5b1dd12d9050616e3d6040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b616e46856187da565b60208201526000616e5686618bbf565b90506000836001600160a01b031663d930a0e66040518163ffffffff1660e01b8152600401600060405180830381865afa158015616e98573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052616ec0919081019061b4f4565b86838560200151604051602001616eda949392919061b53d565b60408051601f19818403018152908290527f60f9bb1100000000000000000000000000000000000000000000000000000000825291506000906001600160a01b038616906360f9bb1190616f3290859060040161b124565b600060405180830381865afa158015616f4f573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052616f77919081019061b4f4565b6040517fdb4235f60000000000000000000000000000000000000000000000000000000081529091506001600160a01b0386169063db4235f690616fbf90849060040161b641565b602060405180830381865afa158015616fdc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190617000919061b0e9565b6170155781604051602001616ac3919061b693565b6040517f49c4fac80000000000000000000000000000000000000000000000000000000081526001600160a01b038616906349c4fac89061705a90849060040161b725565b600060405180830381865afa158015617077573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261709f919081019061b4f4565b84526040517fdb4235f60000000000000000000000000000000000000000000000000000000081526001600160a01b0386169063db4235f6906170e690849060040161b777565b602060405180830381865afa158015617103573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190617127919061b0e9565b156171bc576040517f49c4fac80000000000000000000000000000000000000000000000000000000081526001600160a01b038616906349c4fac89061717190849060040161b777565b600060405180830381865afa15801561718e573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526171b6919081019061b4f4565b60408501525b846001600160a01b03166349c4fac88286600001516040516020016171e1919061b7c9565b6040516020818303038152906040526040518363ffffffff1660e01b815260040161720d92919061b835565b600060405180830381865afa15801561722a573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052617252919081019061b4f4565b606085015250608083015250949350505050565b60408051600480825260a0820190925260609160009190816020015b60608152602001906001900390816172825790505090506040518060400160405280600481526020017f6772657000000000000000000000000000000000000000000000000000000000815250816000815181106172e2576172e261b85a565b60200260200101819052506040518060400160405280600381526020017f2d726c0000000000000000000000000000000000000000000000000000000000815250816001815181106173365761733661b85a565b602002602001018190525084604051602001617352919061b889565b604051602081830303815290604052816002815181106173745761737461b85a565b602002602001018190525082604051602001617390919061b8f5565b604051602081830303815290604052816003815181106173b2576173b261b85a565b602002602001018190525060006173c8826182f5565b602080820151604080518082018252600581527f2e6a736f6e00000000000000000000000000000000000000000000000000000081850190815282518084018452600080825290860152825180840190935290518252928101929092529192506174599060408051808201825260008082526020918201528151808301909252845182528085019082015290618e42565b61746e5785604051602001616ac3919061b936565b9695505050505050565b60a0810151604080518082018252600080825260209182015281518083019092528251808352928101910152606090737109709ecfa91a80626ff3989d68f67f5b1dd12d90156174c8565b511590565b61763c57826020015115617584576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605860248201527f54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f742060448201527f62652075736564207768656e207468652060736b6970566572696679536f757260648201527f6365436f646560206f7074696f6e206973206074727565600000000000000000608482015260a401616b03565b8260c001511561763c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605360248201527f54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f742060448201527f62652075736564207768656e207468652060736b69704c6963656e736554797060648201527f6560206f7074696f6e2069732060747275656000000000000000000000000000608482015260a401616b03565b6040805160ff8082526120008201909252600091816020015b606081526020019060019003908161765557905050905060006040518060400160405280600381526020017f6e707800000000000000000000000000000000000000000000000000000000008152508282806176b09061b9c7565b935060ff16815181106176c5576176c561b85a565b60200260200101819052506040518060400160405280600d81526020017f302e302e312d616c7068612e3700000000000000000000000000000000000000815250604051602001617716919061b9e6565b6040516020818303038152906040528282806177319061b9c7565b935060ff16815181106177465761774661b85a565b60200260200101819052506040518060400160405280600681526020017f6465706c6f7900000000000000000000000000000000000000000000000000008152508282806177939061b9c7565b935060ff16815181106177a8576177a861b85a565b60200260200101819052506040518060400160405280600e81526020017f2d2d636f6e74726163744e616d650000000000000000000000000000000000008152508282806177f59061b9c7565b935060ff168151811061780a5761780a61b85a565b602002602001018190525087602001518282806178269061b9c7565b935060ff168151811061783b5761783b61b85a565b60200260200101819052506040518060400160405280600e81526020017f2d2d636f6e7472616374506174680000000000000000000000000000000000008152508282806178889061b9c7565b935060ff168151811061789d5761789d61b85a565b6020908102919091010152875182826178b58161b9c7565b935060ff16815181106178ca576178ca61b85a565b60200260200101819052506040518060400160405280600981526020017f2d2d636861696e496400000000000000000000000000000000000000000000008152508282806179179061b9c7565b935060ff168151811061792c5761792c61b85a565b602002602001018190525061794046618ea3565b828261794b8161b9c7565b935060ff16815181106179605761796061b85a565b60200260200101819052506040518060400160405280600f81526020017f2d2d6275696c64496e666f46696c6500000000000000000000000000000000008152508282806179ad9061b9c7565b935060ff16815181106179c2576179c261b85a565b6020026020010181905250868282806179da9061b9c7565b935060ff16815181106179ef576179ef61b85a565b6020908102919091010152855115617b165760408051808201909152601581527f2d2d636f6e7374727563746f7242797465636f6465000000000000000000000060208201528282617a408161b9c7565b935060ff1681518110617a5557617a5561b85a565b60209081029190910101526040517f71aad10d0000000000000000000000000000000000000000000000000000000081526001600160a01b038416906371aad10d90617aa590899060040161b124565b600060405180830381865afa158015617ac2573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052617aea919081019061b4f4565b8282617af58161b9c7565b935060ff1681518110617b0a57617b0a61b85a565b60200260200101819052505b846020015115617be65760408051808201909152601281527f2d2d766572696679536f75726365436f6465000000000000000000000000000060208201528282617b5f8161b9c7565b935060ff1681518110617b7457617b7461b85a565b60200260200101819052506040518060400160405280600581526020017f66616c7365000000000000000000000000000000000000000000000000000000815250828280617bc19061b9c7565b935060ff1681518110617bd657617bd661b85a565b6020026020010181905250617dad565b617c1e6174c38660a0015160408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b617cb15760408051808201909152600d81527f2d2d6c6963656e7365547970650000000000000000000000000000000000000060208201528282617c618161b9c7565b935060ff1681518110617c7657617c7661b85a565b60200260200101819052508460a00151604051602001617c96919061b889565b604051602081830303815290604052828280617bc19061b9c7565b8460c00151158015617cf4575060408089015181518083018352600080825260209182015282518084019093528151835290810190820152617cf290511590565b155b15617dad5760408051808201909152600d81527f2d2d6c6963656e7365547970650000000000000000000000000000000000000060208201528282617d388161b9c7565b935060ff1681518110617d4d57617d4d61b85a565b6020026020010181905250617d6188618f43565b604051602001617d71919061b889565b604051602081830303815290604052828280617d8c9061b9c7565b935060ff1681518110617da157617da161b85a565b60200260200101819052505b60408086015181518083018352600080825260209182015282518084019093528151835290810190820152617de190511590565b617e765760408051808201909152600b81527f2d2d72656c61796572496400000000000000000000000000000000000000000060208201528282617e248161b9c7565b935060ff1681518110617e3957617e3961b85a565b60200260200101819052508460400151828280617e559061b9c7565b935060ff1681518110617e6a57617e6a61b85a565b60200260200101819052505b606085015115617f975760408051808201909152600681527f2d2d73616c74000000000000000000000000000000000000000000000000000060208201528282617ebf8161b9c7565b935060ff1681518110617ed457617ed461b85a565b602090810291909101015260608501516040517fb11a19e800000000000000000000000000000000000000000000000000000000815260048101919091526001600160a01b0384169063b11a19e890602401600060405180830381865afa158015617f43573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052617f6b919081019061b4f4565b8282617f768161b9c7565b935060ff1681518110617f8b57617f8b61b85a565b60200260200101819052505b60e0850151511561803e5760408051808201909152600a81527f2d2d6761734c696d69740000000000000000000000000000000000000000000060208201528282617fe18161b9c7565b935060ff1681518110617ff657617ff661b85a565b60200260200101819052506180128560e0015160000151618ea3565b828261801d8161b9c7565b935060ff16815181106180325761803261b85a565b60200260200101819052505b60e085015160200151156180e85760408051808201909152600a81527f2d2d6761735072696365000000000000000000000000000000000000000000006020820152828261808b8161b9c7565b935060ff16815181106180a0576180a061b85a565b60200260200101819052506180bc8560e0015160200151618ea3565b82826180c78161b9c7565b935060ff16815181106180dc576180dc61b85a565b60200260200101819052505b60e085015160400151156181925760408051808201909152600e81527f2d2d6d6178466565506572476173000000000000000000000000000000000000602082015282826181358161b9c7565b935060ff168151811061814a5761814a61b85a565b60200260200101819052506181668560e0015160400151618ea3565b82826181718161b9c7565b935060ff16815181106181865761818661b85a565b60200260200101819052505b60e0850151606001511561823c5760408051808201909152601681527f2d2d6d61785072696f7269747946656550657247617300000000000000000000602082015282826181df8161b9c7565b935060ff16815181106181f4576181f461b85a565b60200260200101819052506182108560e0015160600151618ea3565b828261821b8161b9c7565b935060ff16815181106182305761823061b85a565b60200260200101819052505b60008160ff1667ffffffffffffffff81111561825a5761825a61b2b6565b60405190808252806020026020018201604052801561828d57816020015b60608152602001906001900390816182785790505b50905060005b8260ff168160ff1610156182e657838160ff16815181106182b6576182b661b85a565b6020026020010151828260ff16815181106182d3576182d361b85a565b6020908102919091010152600101618293565b5093505050505b949350505050565b61831c6040518060600160405280600060030b815260200160608152602001606081525090565b60408051808201825260048082527f6261736800000000000000000000000000000000000000000000000000000000602083015291517fd145736c000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d92600091849163d145736c916183a29186910161ba51565b600060405180830381865afa1580156183bf573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526183e7919081019061b4f4565b905060006183f58683619a32565b90506000846001600160a01b031663f45c1ce7836040518263ffffffff1660e01b8152600401618425919061ad80565b6000604051808303816000875af1158015618444573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261846c919081019061ba98565b805190915060030b158015906184855750602081015151155b80156184945750604081015151155b1561746e57816000815181106184ac576184ac61b85a565b6020026020010151604051602001616ac3919061bb4e565b606060006184f98560408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6040805180820182526000808252602091820152815180830190925286518252808701908201529091506185309082905b90619b87565b1561868d5760006185ad826185a7846185a16185738a60408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6040805180820182526000808252602091820152815180830190925282518252918201519181019190915290565b90619bae565b90619c10565b604080518082018252600181527f0a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152909150618611908290619b87565b1561867b57604080518082018252600181527f0a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152618678905b8290619c95565b90505b61868481619cbb565b925050506169f0565b82156186a6578484604051602001616ac392919061bd3a565b50506040805160208101909152600081526169f0565b509392505050565b6000808251602084016000f09392505050565b8160a00151156186e657505050565b60006186f3848484619d24565b90506000618700826182f5565b602081015181519192509060030b15801561879c5750604080518082018252600781527f53554343455353000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261879c9060408051808201825260008082526020918201528151808301909252845182528085019082015261852a565b156187a957505050505050565b604082015151156187c9578160400151604051602001616ac3919061bde1565b80604051602001616ac3919061be3f565b6060600061880f8360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600481527f2e736f6c0000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152909150618874905b8290618e42565b156188e357604080518082018252600481527f2e736f6c00000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526169f0906188de90839061a2bf565b619cbb565b604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152618945905b829061a349565b600103618a1257604080518082018252600181527f3a00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526189ab90618671565b50604080518082018252600181527f3a00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526169f0906188de905b8390619c95565b604080518082018252600581527f2e6a736f6e00000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152618a719061886d565b15618ba857604080518082018252600181527f2f00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820181905284518086019095529251845283015290618ad990839061a3e3565b905060008160018351618aec919061b1a0565b81518110618afc57618afc61b85a565b60200260200101519050618b9f6188de618b726040518060400160405280600581526020017f2e6a736f6e00000000000000000000000000000000000000000000000000000081525060408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6040805180820182526000808252602091820152815180830190925285518252808601908201529061a2bf565b95945050505050565b82604051602001616ac3919061beaa565b50919050565b60606000618bf48360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600481527f2e736f6c0000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152909150618c569061886d565b15618c64576169f081619cbb565b604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152618cc39061893e565b600103618d2d57604080518082018252600181527f3a00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526169f0906188de90618a0b565b604080518082018252600581527f2e6a736f6e00000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152618d8c9061886d565b15618ba857604080518082018252600181527f2f00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820181905284518086019095529251845283015290618df490839061a3e3565b9050600181511115618e30578060028251618e0f919061b1a0565b81518110618e1f57618e1f61b85a565b602002602001015192505050919050565b5082604051602001616ac3919061beaa565b805182516000911115618e57575060006168f7565b81518351602085015160009291618e6d9161b1b3565b618e77919061b1a0565b905082602001518103618e8e5760019150506168f7565b82516020840151819020912014905092915050565b60606000618eb08361a488565b600101905060008167ffffffffffffffff811115618ed057618ed061b2b6565b6040519080825280601f01601f191660200182016040528015618efa576020820181803683370190505b5090508181016020015b600019017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a8504945084618f0457509392505050565b604081810151815180830183526000808252602091820181905283518085018552835181529282018383015283518085018552600a81527f554e4c4943454e5345440000000000000000000000000000000000000000000081840190815285518087018752838152840192909252845180860190955251845290830152606091618fcf905b829061a56a565b1561900f57505060408051808201909152600481527f4e6f6e65000000000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600981527f556e6c6963656e736500000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261906e90618fc8565b156190ae57505060408051808201909152600981527f556e6c6963656e736500000000000000000000000000000000000000000000006020820152919050565b604080518082018252600381527f4d495400000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261910d90618fc8565b1561914d57505060408051808201909152600381527f4d495400000000000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f47504c2d322e302d6f6e6c790000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526191ac90618fc8565b806192115750604080518082018252601081527f47504c2d322e302d6f722d6c61746572000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261921190618fc8565b1561925157505060408051808201909152600981527f474e552047504c763200000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f47504c2d332e302d6f6e6c790000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526192b090618fc8565b806193155750604080518082018252601081527f47504c2d332e302d6f722d6c61746572000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261931590618fc8565b1561935557505060408051808201909152600981527f474e552047504c763300000000000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4c47504c2d322e312d6f6e6c7900000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526193b490618fc8565b806194195750604080518082018252601181527f4c47504c2d322e312d6f722d6c617465720000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261941990618fc8565b1561945957505060408051808201909152600c81527f474e55204c47504c76322e3100000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4c47504c2d332e302d6f6e6c7900000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526194b890618fc8565b8061951d5750604080518082018252601181527f4c47504c2d332e302d6f722d6c617465720000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261951d90618fc8565b1561955d57505060408051808201909152600a81527f474e55204c47504c7633000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f4253442d322d436c617573650000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526195bc90618fc8565b156195fc57505060408051808201909152600c81527f4253442d322d436c6175736500000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f4253442d332d436c6175736500000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261965b90618fc8565b1561969b57505060408051808201909152600c81527f4253442d332d436c6175736500000000000000000000000000000000000000006020820152919050565b604080518082018252600781527f4d504c2d322e3000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526196fa90618fc8565b1561973a57505060408051808201909152600781527f4d504c2d322e30000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600781527f4f534c2d332e30000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261979990618fc8565b156197d957505060408051808201909152600781527f4f534c2d332e30000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600a81527f4170616368652d322e30000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261983890618fc8565b1561987857505060408051808201909152600a81527f4170616368652d322e30000000000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4147504c2d332e302d6f6e6c7900000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526198d790618fc8565b8061993c5750604080518082018252601181527f4147504c2d332e302d6f722d6c617465720000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261993c90618fc8565b1561997c57505060408051808201909152600a81527f474e55204147504c7633000000000000000000000000000000000000000000006020820152919050565b604080518082018252600881527f4255534c2d312e31000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526199db90618fc8565b15619a1b57505060408051808201909152600781527f42534c20312e31000000000000000000000000000000000000000000000000006020820152919050565b60408084015184519151616ac3929060200161bf88565b60608060005b8451811015619abd5781858281518110619a5457619a5461b85a565b6020026020010151604051602001619a6d92919061b3d3565b604051602081830303815290604052915060018551619a8c919061b1a0565b8114619ab55781604051602001619aa3919061c0f1565b60405160208183030381529060405291505b600101619a38565b5060408051600380825260808201909252600091816020015b6060815260200190600190039081619ad65790505090508381600081518110619b0157619b0161b85a565b60200260200101819052506040518060400160405280600281526020017f2d6300000000000000000000000000000000000000000000000000000000000081525081600181518110619b5557619b5561b85a565b60200260200101819052508181600281518110619b7457619b7461b85a565b6020908102919091010152949350505050565b6020808301518351835192840151600093619ba5929184919061a57e565b14159392505050565b60408051808201909152600080825260208201526000619be0846000015185602001518560000151866020015161a68f565b9050836020015181619bf2919061b1a0565b84518590619c0190839061b1a0565b90525060208401525090919050565b6040805180820190915260008082526020820152815183511015619c355750816168f7565b6020808301519084015160019114619c5c5750815160208481015190840151829020919020145b8015619c8d57825184518590619c7390839061b1a0565b9052508251602085018051619c8990839061b1b3565b9052505b509192915050565b6040805180820190915260008082526020820152619cb483838361a7af565b5092915050565b60606000826000015167ffffffffffffffff811115619cdc57619cdc61b2b6565b6040519080825280601f01601f191660200182016040528015619d06576020820181803683370190505b5090506000602082019050619cb4818560200151866000015161a85a565b60606000619d30616ced565b6040805160ff808252612000820190925291925060009190816020015b6060815260200190600190039081619d4d57905050905060006040518060400160405280600381526020017f6e70780000000000000000000000000000000000000000000000000000000000815250828280619da89061b9c7565b935060ff1681518110619dbd57619dbd61b85a565b60200260200101819052506040518060400160405280600781526020017f5e312e33322e3300000000000000000000000000000000000000000000000000815250604051602001619e0e919061c132565b604051602081830303815290604052828280619e299061b9c7565b935060ff1681518110619e3e57619e3e61b85a565b60200260200101819052506040518060400160405280600881526020017f76616c6964617465000000000000000000000000000000000000000000000000815250828280619e8b9061b9c7565b935060ff1681518110619ea057619ea061b85a565b602002602001018190525082604051602001619ebc919061b8f5565b604051602081830303815290604052828280619ed79061b9c7565b935060ff1681518110619eec57619eec61b85a565b60200260200101819052506040518060400160405280600a81526020017f2d2d636f6e747261637400000000000000000000000000000000000000000000815250828280619f399061b9c7565b935060ff1681518110619f4e57619f4e61b85a565b6020026020010181905250619f63878461a8d4565b8282619f6e8161b9c7565b935060ff1681518110619f8357619f8361b85a565b60209081029190910101528551511561a02f5760408051808201909152600b81527f2d2d7265666572656e636500000000000000000000000000000000000000000060208201528282619fd58161b9c7565b935060ff1681518110619fea57619fea61b85a565b602002602001018190525061a00386600001518461a8d4565b828261a00e8161b9c7565b935060ff168151811061a0235761a02361b85a565b60200260200101819052505b85608001511561a09d5760408051808201909152601881527f2d2d756e73616665536b697053746f72616765436865636b00000000000000006020820152828261a0788161b9c7565b935060ff168151811061a08d5761a08d61b85a565b602002602001018190525061a103565b841561a1035760408051808201909152601281527f2d2d726571756972655265666572656e636500000000000000000000000000006020820152828261a0e28161b9c7565b935060ff168151811061a0f75761a0f761b85a565b60200260200101819052505b6040860151511561a19f5760408051808201909152600d81527f2d2d756e73616665416c6c6f77000000000000000000000000000000000000006020820152828261a14d8161b9c7565b935060ff168151811061a1625761a16261b85a565b6020026020010181905250856040015182828061a17e9061b9c7565b935060ff168151811061a1935761a19361b85a565b60200260200101819052505b85606001511561a2095760408051808201909152601481527f2d2d756e73616665416c6c6f7752656e616d65730000000000000000000000006020820152828261a1e88161b9c7565b935060ff168151811061a1fd5761a1fd61b85a565b60200260200101819052505b60008160ff1667ffffffffffffffff81111561a2275761a22761b2b6565b60405190808252806020026020018201604052801561a25a57816020015b606081526020019060019003908161a2455790505b50905060005b8260ff168160ff16101561a2b357838160ff168151811061a2835761a28361b85a565b6020026020010151828260ff168151811061a2a05761a2a061b85a565b602090810291909101015260010161a260565b50979650505050505050565b604080518082019091526000808252602082015281518351101561a2e45750816168f7565b8151835160208501516000929161a2fa9161b1b3565b61a304919061b1a0565b6020840151909150600190821461a325575082516020840151819020908220145b801561a3405783518551869061a33c90839061b1a0565b9052505b50929392505050565b600080826000015161a36d856000015186602001518660000151876020015161a68f565b61a377919061b1b3565b90505b8351602085015161a38b919061b1b3565b8111619cb4578161a39b8161c177565b925050826000015161a3d285602001518361a3b6919061b1a0565b865161a3c2919061b1a0565b838660000151876020015161a68f565b61a3dc919061b1b3565b905061a37a565b6060600061a3f1848461a349565b61a3fc90600161b1b3565b67ffffffffffffffff81111561a4145761a41461b2b6565b60405190808252806020026020018201604052801561a44757816020015b606081526020019060019003908161a4325790505b50905060005b81518110156186bc5761a4636188de8686619c95565b82828151811061a4755761a47561b85a565b602090810291909101015260010161a44d565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000831061a4d1577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef8100000000831061a4fd576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc10000831061a51b57662386f26fc10000830492506010015b6305f5e100831061a533576305f5e100830492506008015b612710831061a54757612710830492506004015b6064831061a559576064830492506002015b600a83106168f75760010192915050565b600061a576838361a914565b159392505050565b60008085841161a685576020841161a631576000841561a5c957600161a5a586602061b1a0565b61a5b090600861c191565b61a5bb90600261c28f565b61a5c5919061b1a0565b1990505b835181168561a5d8898961b1b3565b61a5e2919061b1a0565b805190935082165b81811461a61c5787841161a60457879450505050506182ed565b8361a60e8161c29b565b94505082845116905061a5ea565b61a626878561b1b3565b9450505050506182ed565b83832061a63e858861b1a0565b61a648908761b1b3565b91505b85821061a6835784822080820361a6705761a666868461b1b3565b93505050506182ed565b61a67b60018461b1a0565b92505061a64b565b505b5092949350505050565b6000838186851161a79a576020851161a749576000851561a6db57600161a6b787602061b1a0565b61a6c290600861c191565b61a6cd90600261c28f565b61a6d7919061b1a0565b1990505b8451811660008761a6ec8b8b61b1b3565b61a6f6919061b1a0565b855190915083165b82811461a73b5781861061a7235761a7168b8b61b1b3565b96505050505050506182ed565b8561a72d8161c177565b96505083865116905061a6fe565b8596505050505050506182ed565b508383206000905b61a75b868961b1a0565b821161a7985785832080820361a77757839450505050506182ed565b61a78260018561b1b3565b935050818061a7909061c177565b92505061a751565b505b61a7a4878761b1b3565b979650505050505050565b6040805180820190915260008082526020820152600061a7e1856000015186602001518660000151876020015161a68f565b60208087018051918601919091525190915061a7fd908261b1a0565b83528451602086015161a810919061b1b3565b810361a81f576000855261a851565b8351835161a82d919061b1b3565b8551869061a83c90839061b1a0565b905250835161a84b908261b1b3565b60208601525b50909392505050565b6020811061a892578151835261a87160208461b1b3565b925061a87e60208361b1b3565b915061a88b60208261b1a0565b905061a85a565b600019811561a8c157600161a8a883602061b1a0565b61a8b49061010061c28f565b61a8be919061b1a0565b90505b9151835183169219169190911790915250565b6060600061a8e28484616dc0565b805160208083015160405193945061a8fc9390910161c2b2565b60405160208183030381529060405291505092915050565b815181516000919081111561a927575081515b6020808501519084015160005b8381101561a9e0578251825180821461a9b057600019602087101561a98f5760018461a96189602061b1a0565b61a96b919061b1b3565b61a97690600861c191565b61a98190600261c28f565b61a98b919061b1a0565b1990505b818116838216818103911461a9ad5797506168f79650505050505050565b50505b61a9bb60208661b1b3565b945061a9c860208561b1b3565b9350505060208161a9d9919061b1b3565b905061a934565b508451865161746e919061c30a565b610b67806200c32b83390190565b61053f806200ce9283390190565b61106f806200d3d183390190565b611bb9806200e44083390190565b6040518060e0016040528060608152602001606081526020016060815260200160001515815260200160001515815260200160001515815260200161aa6a61aa6f565b905290565b6040518061010001604052806000151581526020016000151581526020016060815260200160008019168152602001606081526020016060815260200160001515815260200161aa6a6040518060800160405280600081526020016000815260200160008152602001600081525090565b602080825282518282018190526000918401906040840190835b8181101561ab215783516001600160a01b031683526020938401939092019160010161aafa565b509095945050505050565b60005b8381101561ab4757818101518382015260200161ab2f565b50506000910152565b6000815180845261ab6881602086016020860161ab2c565b601f01601f19169290920160200192915050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b8281101561ac78577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452815180516001600160a01b03168652602090810151604082880181905281519088018190529101906060600582901b88018101919088019060005b8181101561ac5e577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa08a850301835261ac4884865161ab50565b602095860195909450929092019160010161ac0e565b50919750505060209485019492909201915060010161aba4565b50929695505050505050565b600081518084526020840193506020830160005b8281101561acd85781517fffffffff000000000000000000000000000000000000000000000000000000001686526020958601959091019060010161ac98565b5093949350505050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b8281101561ac78577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452815180516040875261ad4e604088018261ab50565b905060208201519150868103602088015261ad69818361ac84565b96505050602093840193919091019060010161ad0a565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b8281101561ac78577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc087860301845261ade285835161ab50565b9450602093840193919091019060010161ada8565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b8281101561ac78577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc087860301845281516001600160a01b038151168652602081015190506040602087015261ae78604087018261ac84565b955050602093840193919091019060010161ae1f565b6020815260006168f760208301600581527f68656c6c6f000000000000000000000000000000000000000000000000000000602082015260400190565b60a08152600061aede60a083018761ab50565b6001600160a01b03861660208401528460408401526001600160a01b0384166060840152828103608084015261a7a481600581527f68656c6c6f000000000000000000000000000000000000000000000000000000602082015260400190565b600081516060845261af53606085018261ab50565b90506001600160a01b036020840151166020850152604083015160408501528091505092915050565b60a08152600061af8f60a083018861af3e565b6001600160a01b03871660208401528560408401526001600160a01b0385166060840152828103608084015261afc5818561ab50565b98975050505050505050565b60006020828403121561afe357600080fd5b81516001600160a01b03811681146169f057600080fd5b610100815260056101008201527f544f4b454e000000000000000000000000000000000000000000000000000000610120820152610140602082015260036101408201527f544b4e000000000000000000000000000000000000000000000000000000000061016082015260006101808201905060ff881660408301528660608301526003861061b0b4577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b8560808301528460a083015261b0d560c08301856001600160a01b03169052565b6001600160a01b03831660e083015261a7a4565b60006020828403121561b0fb57600080fd5b815180151581146169f057600080fd5b60006020828403121561b11d57600080fd5b5051919050565b6020815260006169f0602083018461ab50565b60808152600061b14a608083018761af3e565b8560208401526001600160a01b0385166040840152828103606084015261a7a4818561ab50565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b818103818111156168f7576168f761b171565b808201808211156168f7576168f761b171565b600181811c9082168061b1da57607f821691505b602082108103618bb9577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6001600160a01b03831681526040602082015260006182ed604083018461ab50565b7f4661696c656420746f206465706c6f7920636f6e74726163742000000000000081526000835161b26d81601a85016020880161ab2c565b7f3a20000000000000000000000000000000000000000000000000000000000000601a91840191820152835161b2aa81601c84016020880161ab2c565b01601c01949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040516060810167ffffffffffffffff8111828210171561b3085761b30861b2b6565b60405290565b60008067ffffffffffffffff84111561b3295761b32961b2b6565b50604051601f19601f85018116603f0116810181811067ffffffffffffffff8211171561b3585761b35861b2b6565b60405283815290508082840185101561b37057600080fd5b6186bc84602083018561ab2c565b600082601f83011261b38f57600080fd5b6169f08383516020850161b30e565b60006020828403121561b3b057600080fd5b815167ffffffffffffffff81111561b3c757600080fd5b6168f38482850161b37e565b6000835161b3e581846020880161ab2c565b83519083019061b3f981836020880161ab2c565b01949350505050565b7f4661696c656420746f206465706c6f7920636f6e74726163742000000000000081526000835161b43a81601a85016020880161ab2c565b7f207573696e6720636f6e7374727563746f722064617461202200000000000000601a91840191820152835161b47781603384016020880161ab2c565b7f220000000000000000000000000000000000000000000000000000000000000060339290910191820152603401949350505050565b60408152600b60408201527f464f554e4452595f4f555400000000000000000000000000000000000000000060608201526080602082015260006169f0608083018461ab50565b60006020828403121561b50657600080fd5b815167ffffffffffffffff81111561b51d57600080fd5b8201601f8101841361b52e57600080fd5b6168f38482516020840161b30e565b6000855161b54f818460208a0161ab2c565b7f2f00000000000000000000000000000000000000000000000000000000000000908301908152855161b589816001840160208a0161ab2c565b7f2f0000000000000000000000000000000000000000000000000000000000000060019290910191820152845161b5c781600284016020890161ab2c565b6001818301019150507f2f000000000000000000000000000000000000000000000000000000000000006001820152835161b60981600284016020880161ab2c565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600292909101918201526007019695505050505050565b60408152600061b654604083018461ab50565b8281036020840152600481527f2e6173740000000000000000000000000000000000000000000000000000000060208201526040810191505092915050565b7f436f756c64206e6f742066696e642041535420696e206172746966616374200081526000825161b6cb81601f85016020870161ab2c565b7f2e205365742060617374203d20747275656020696e20666f756e6472792e746f601f9390910192830152507f6d6c000000000000000000000000000000000000000000000000000000000000603f820152604101919050565b60408152600061b738604083018461ab50565b8281036020840152601181527f2e6173742e6162736f6c7574655061746800000000000000000000000000000060208201526040810191505092915050565b60408152600061b78a604083018461ab50565b8281036020840152600c81527f2e6173742e6c6963656e7365000000000000000000000000000000000000000060208201526040810191505092915050565b7f2e6d657461646174612e736f75726365732e5b2700000000000000000000000081526000825161b80181601485016020870161ab2c565b7f275d2e6b656363616b32353600000000000000000000000000000000000000006014939091019283015250602001919050565b60408152600061b848604083018561ab50565b82810360208401526169ec818561ab50565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f220000000000000000000000000000000000000000000000000000000000000081526000825161b8c181600185016020870161ab2c565b7f22000000000000000000000000000000000000000000000000000000000000006001939091019283015250600201919050565b6000825161b90781846020870161ab2c565b7f2f6275696c642d696e666f000000000000000000000000000000000000000000920191825250600b01919050565b7f436f756c64206e6f742066696e64206275696c642d696e666f2066696c65207781527f697468206d61746368696e6720736f7572636520636f6465206861736820666f60208201527f7220636f6e74726163742000000000000000000000000000000000000000000060408201526000825161b9ba81604b85016020870161ab2c565b91909101604b0192915050565b600060ff821660ff810361b9dd5761b9dd61b171565b60010192915050565b7f406f70656e7a657070656c696e2f646566656e6465722d6465706c6f792d636c81527f69656e742d636c6940000000000000000000000000000000000000000000000060208201526000825161ba4481602985016020870161ab2c565b9190910160290192915050565b60408152601660408201527f4f50454e5a455050454c494e5f424153485f504154480000000000000000000060608201526080602082015260006169f0608083018461ab50565b60006020828403121561baaa57600080fd5b815167ffffffffffffffff81111561bac157600080fd5b82016060818503121561bad357600080fd5b61badb61b2e5565b81518060030b811461baec57600080fd5b8152602082015167ffffffffffffffff81111561bb0857600080fd5b61bb148682850161b37e565b602083015250604082015167ffffffffffffffff81111561bb3457600080fd5b61bb408682850161b37e565b604083015250949350505050565b7f4661696c656420746f2072756e206261736820636f6d6d616e6420776974682081527f220000000000000000000000000000000000000000000000000000000000000060208201526000825161bbac81602185016020870161ab2c565b7f222e20496620796f7520617265207573696e672057696e646f77732c2073657460219390910192830152507f20746865204f50454e5a455050454c494e5f424153485f5041544820656e766960418201527f726f6e6d656e74207661726961626c6520746f207468652066756c6c7920717560618201527f616c69666965642070617468206f66207468652062617368206578656375746160818201527f626c652e20466f72206578616d706c652c20696620796f75206172652075736960a18201527f6e672047697420666f722057696e646f77732c206164642074686520666f6c6c60c18201527f6f77696e67206c696e6520696e20746865202e656e762066696c65206f66207960e18201527f6f75722070726f6a65637420287573696e6720666f727761726420736c6173686101018201527f6573293a0a4f50454e5a455050454c494e5f424153485f504154483d22433a2f6101218201527f50726f6772616d2046696c65732f4769742f62696e2f6261736822000000000061014182015261015c01919050565b7f4661696c656420746f2066696e64206c696e652077697468207072656669782081527f270000000000000000000000000000000000000000000000000000000000000060208201526000835161bd9881602185016020880161ab2c565b7f2720696e206f75747075743a2000000000000000000000000000000000000000602191840191820152835161bdd581602e84016020880161ab2c565b01602e01949350505050565b7f4661696c656420746f2072756e2075706772616465207361666574792076616c81527f69646174696f6e3a20000000000000000000000000000000000000000000000060208201526000825161ba4481602985016020870161ab2c565b7f55706772616465207361666574792076616c69646174696f6e206661696c656481527f3a0a00000000000000000000000000000000000000000000000000000000000060208201526000825161be9d81602285016020870161ab2c565b9190910160220192915050565b7f436f6e7472616374206e616d652000000000000000000000000000000000000081526000825161bee281600e85016020870161ab2c565b7f206d75737420626520696e2074686520666f726d6174204d79436f6e74726163600e9390910192830152507f742e736f6c3a4d79436f6e7472616374206f72204d79436f6e74726163742e73602e8201527f6f6c206f72206f75742f4d79436f6e74726163742e736f6c2f4d79436f6e7472604e8201527f6163742e6a736f6e000000000000000000000000000000000000000000000000606e820152607601919050565b7f53504458206c6963656e7365206964656e74696669657220000000000000000081526000835161bfc081601885016020880161ab2c565b7f20696e2000000000000000000000000000000000000000000000000000000000601891840191820152835161bffd81601c84016020880161ab2c565b7f20646f6573206e6f74206c6f6f6b206c696b65206120737570706f7274656420601c92909101918201527f6c6963656e736520666f7220626c6f636b206578706c6f726572207665726966603c8201527f69636174696f6e2e205573652074686520606c6963656e73655479706560206f605c8201527f7074696f6e20746f20737065636966792061206c6963656e736520747970652c607c8201527f206f7220736574207468652060736b69704c6963656e73655479706560206f70609c8201527f74696f6e20746f2060747275656020746f20736b69702e00000000000000000060bc82015260d301949350505050565b6000825161c10381846020870161ab2c565b7f2000000000000000000000000000000000000000000000000000000000000000920191825250600101919050565b7f406f70656e7a657070656c696e2f75706772616465732d636f7265400000000081526000825161c16a81601c85016020870161ab2c565b91909101601c0192915050565b6000600019820361c18a5761c18a61b171565b5060010190565b80820281158282048414176168f7576168f761b171565b6001815b600184111561c1e35780850481111561c1c75761c1c761b171565b600184161561c1d557908102905b60019390931c92800261c1ac565b935093915050565b60008261c1fa575060016168f7565b8161c207575060006168f7565b816001811461c21d576002811461c2275761c243565b60019150506168f7565b60ff84111561c2385761c23861b171565b50506001821b6168f7565b5060208310610133831016604e8410600b841016171561c266575081810a6168f7565b61c273600019848461c1a8565b806000190482111561c2875761c28761b171565b029392505050565b60006169f0838361c1eb565b60008161c2aa5761c2aa61b171565b506000190190565b6000835161c2c481846020880161ab2c565b7f3a00000000000000000000000000000000000000000000000000000000000000908301908152835161c2fe81600184016020880161ab2c565b01600101949350505050565b8181036000831280158383131683831282161715619cb457619cb461b17156fe60c0604052600d60809081526c2bb930b83832b21022ba3432b960991b60a05260009061002c9082610114565b506040805180820190915260048152630ae8aa8960e31b60208201526001906100559082610114565b506002805460ff1916601217905534801561006f57600080fd5b506101d2565b634e487b7160e01b600052604160045260246000fd5b600181811c9082168061009f57607f821691505b6020821081036100bf57634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111561010f57806000526020600020601f840160051c810160208510156100ec5750805b601f840160051c820191505b8181101561010c57600081556001016100f8565b50505b505050565b81516001600160401b0381111561012d5761012d610075565b6101418161013b845461008b565b846100c5565b6020601f821160018114610175576000831561015d5750848201515b600019600385901b1c1916600184901b17845561010c565b600084815260208120601f198516915b828110156101a55787850151825560209485019460019092019101610185565b50848210156101c35786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b610986806101e16000396000f3fe6080604052600436106100c05760003560e01c8063313ce56711610074578063a9059cbb1161004e578063a9059cbb146101fa578063d0e30db01461021a578063dd62ed3e1461022257600080fd5b8063313ce5671461018c57806370a08231146101b857806395d89b41146101e557600080fd5b806318160ddd116100a557806318160ddd1461012f57806323b872dd1461014c5780632e1a7d4d1461016c57600080fd5b806306fdde03146100d4578063095ea7b3146100ff57600080fd5b366100cf576100cd61025a565b005b600080fd5b3480156100e057600080fd5b506100e96102b5565b6040516100f69190610745565b60405180910390f35b34801561010b57600080fd5b5061011f61011a3660046107da565b610343565b60405190151581526020016100f6565b34801561013b57600080fd5b50475b6040519081526020016100f6565b34801561015857600080fd5b5061011f610167366004610804565b6103bd565b34801561017857600080fd5b506100cd610187366004610841565b610647565b34801561019857600080fd5b506002546101a69060ff1681565b60405160ff90911681526020016100f6565b3480156101c457600080fd5b5061013e6101d336600461085a565b60036020526000908152604090205481565b3480156101f157600080fd5b506100e9610724565b34801561020657600080fd5b5061011f6102153660046107da565b610731565b6100cd61025a565b34801561022e57600080fd5b5061013e61023d366004610875565b600460209081526000928352604080842090915290825290205481565b33600090815260036020526040812080543492906102799084906108d7565b909155505060405134815233907fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c9060200160405180910390a2565b600080546102c2906108ea565b80601f01602080910402602001604051908101604052809291908181526020018280546102ee906108ea565b801561033b5780601f106103105761010080835404028352916020019161033b565b820191906000526020600020905b81548152906001019060200180831161031e57829003601f168201915b505050505081565b33600081815260046020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925906103ab9086815260200190565b60405180910390a35060015b92915050565b73ffffffffffffffffffffffffffffffffffffffff831660009081526003602052604081205482111561042b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600060248201526044015b60405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff841633148015906104a1575073ffffffffffffffffffffffffffffffffffffffff841660009081526004602090815260408083203384529091529020547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff14155b156105605773ffffffffffffffffffffffffffffffffffffffff8416600090815260046020908152604080832033845290915290205482111561051a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526020600482015260006024820152604401610422565b73ffffffffffffffffffffffffffffffffffffffff841660009081526004602090815260408083203384529091528120805484929061055a90849061093d565b90915550505b73ffffffffffffffffffffffffffffffffffffffff84166000908152600360205260408120805484929061059590849061093d565b909155505073ffffffffffffffffffffffffffffffffffffffff8316600090815260036020526040812080548492906105cf9084906108d7565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161063591815260200190565b60405180910390a35060019392505050565b3360009081526003602052604090205481111561069a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526020600482015260006024820152604401610422565b33600090815260036020526040812080548392906106b990849061093d565b9091555050604051339082156108fc029083906000818181858888f193505050501580156106eb573d6000803e3d6000fd5b5060405181815233907f7fcf532c15f0a6db0bd6d0e038bea71d30d808c7d98cb3bf7268a95bf5081b659060200160405180910390a250565b600180546102c2906108ea565b600061073e3384846103bd565b9392505050565b602081526000825180602084015260005b818110156107735760208186018101516040868401015201610756565b5060006040828501015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011684010191505092915050565b803573ffffffffffffffffffffffffffffffffffffffff811681146107d557600080fd5b919050565b600080604083850312156107ed57600080fd5b6107f6836107b1565b946020939093013593505050565b60008060006060848603121561081957600080fd5b610822846107b1565b9250610830602085016107b1565b929592945050506040919091013590565b60006020828403121561085357600080fd5b5035919050565b60006020828403121561086c57600080fd5b61073e826107b1565b6000806040838503121561088857600080fd5b610891836107b1565b915061089f602084016107b1565b90509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b808201808211156103b7576103b76108a8565b600181811c908216806108fe57607f821691505b602082108103610937577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b818103818111156103b7576103b76108a856fea264697066735822122008d7fc4e09519c5dd9f356b03596f6829a151d0bc7682533f9ceab4e459f5ee264736f6c634300081a00336080604052348015600f57600080fd5b506105208061001f6000396000f3fe60806040526004361061002a5760003560e01c806369582bee14610033578063de43156e1461005357005b3661003157005b005b34801561003f57600080fd5b5061003161004e3660046101ba565b610073565b34801561005f57600080fd5b5061003161006e3660046101ba565b6100ee565b6060811561008a5761008782840184610273565b90505b7ffdc887992b033668833927e252058e468fac0b6bd196d520f09c61b740e999486100b58780610369565b6100c560408a0160208b016103ce565b896040013533866040516100de969594939291906103f0565b60405180910390a1505050505050565b606081156101055761010282840184610273565b90505b7fcdc8ee677dc5ebe680fb18cebda5e26ba5ea1f0ba504a47e2a9a2ecb476dc98e6100b58780610369565b60006060828403121561014257600080fd5b50919050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461016c57600080fd5b919050565b60008083601f84011261018357600080fd5b50813567ffffffffffffffff81111561019b57600080fd5b6020830191508360208285010111156101b357600080fd5b9250929050565b6000806000806000608086880312156101d257600080fd5b853567ffffffffffffffff8111156101e957600080fd5b6101f588828901610130565b95505061020460208701610148565b935060408601359250606086013567ffffffffffffffff81111561022757600080fd5b61023388828901610171565b969995985093965092949392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60006020828403121561028557600080fd5b813567ffffffffffffffff81111561029c57600080fd5b8201601f810184136102ad57600080fd5b803567ffffffffffffffff8111156102c7576102c7610244565b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8501160116810181811067ffffffffffffffff8211171561033357610333610244565b60405281815282820160200186101561034b57600080fd5b81602084016020830137600091810160200191909152949350505050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261039e57600080fd5b83018035915067ffffffffffffffff8211156103b957600080fd5b6020019150368190038213156101b357600080fd5b6000602082840312156103e057600080fd5b6103e982610148565b9392505050565b60a081528560a0820152858760c0830137600060c0878301015260007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f880116820173ffffffffffffffffffffffffffffffffffffffff8716602084015285604084015273ffffffffffffffffffffffffffffffffffffffff8516606084015260c083820301608084015283518060c083015260005b818110156104a557602081870181015184830160e0015201610488565b50600060e0838301810191909152601f9091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016909101019897505050505050505056fea2646970667358221220b5ac4aa023957e7bc2aaba2c22840cdbf052fb679bd912caa0c8614a69afc7b164736f6c634300081a003360c060405234801561001057600080fd5b5060405161106f38038061106f83398101604081905261002f916100db565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461006357604051632b2add3d60e01b815260040160405180910390fd5b600380546001600160a01b0319166001600160a01b0385811691909117909155828116608052811660a0526040517f80699e81136d69cb8367ad52a994e25c722a86da654b561d0c14b61a777e7ac590600090a150505061011e565b80516001600160a01b03811681146100d657600080fd5b919050565b6000806000606084860312156100f057600080fd5b6100f9846100bf565b9250610107602085016100bf565b9150610115604085016100bf565b90509250925092565b60805160a051610f2561014a60003960006101e50152600081816102b9015261045b0152610f256000f3fe608060405234801561001057600080fd5b50600436106100f55760003560e01c806397770dff11610097578063c63585cc11610066578063c63585cc14610273578063d7fd7afb14610286578063d936a012146102b4578063ee2815ba146102db57600080fd5b806397770dff1461021a578063a7cb05071461022d578063c39aca3714610240578063c62178ac1461025357600080fd5b8063513a9c05116100d3578063513a9c051461018a578063569541b9146101c0578063842da36d146101e057806391dd645f1461020757600080fd5b80630be15547146100fa5780631f0e251b1461015a5780633ce4a5bc1461016f575b600080fd5b610130610108366004610bd1565b60016020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b61016d610168366004610c13565b6102ee565b005b61013073735b14bb79463307aacbed86daf3322b1e6226ab81565b610130610198366004610bd1565b60026020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b6003546101309073ffffffffffffffffffffffffffffffffffffffff1681565b6101307f000000000000000000000000000000000000000000000000000000000000000081565b61016d610215366004610c35565b610402565b61016d610228366004610c13565b610526565b61016d61023b366004610c61565b610633565b61016d61024e366004610c83565b6106ce565b6004546101309073ffffffffffffffffffffffffffffffffffffffff1681565b610130610281366004610d53565b6108cd565b6102a6610294366004610bd1565b60006020819052908152604090205481565b604051908152602001610151565b6101307f000000000000000000000000000000000000000000000000000000000000000081565b61016d6102e9366004610c35565b610a02565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461033b576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116610388576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600480547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527f3ade88e3922d64780e1bf4460d364c2970b69da813f9c0c07a1c187b5647636c906020015b60405180910390a150565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461044f576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600354600090610497907f00000000000000000000000000000000000000000000000000000000000000009073ffffffffffffffffffffffffffffffffffffffff16846108cd565b60008481526002602090815260409182902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff85169081179091558251878152918201529192507f0ecec485166da6139b13bb7e033e9446e2d35348e80ebf1180d4afe2dba1704e910160405180910390a1505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610573576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff81166105c0576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527fdba79d534382d1a8ae108e4c8ecb27c6ae42ab8b91d44eedf88bd329f3868d5e906020016103f7565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610680576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000828152602081815260409182902083905581518481529081018390527f49f492222906ac486c3c1401fa545626df1f0c0e5a77a05597ea2ed66af9850d91015b60405180910390a15050565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461071b576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff831673735b14bb79463307aacbed86daf3322b1e6226ab1480610768575073ffffffffffffffffffffffffffffffffffffffff831630145b1561079f576040517f82d5d76a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f47e7ef2400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152602482018690528616906347e7ef24906044016020604051808303816000875af1158015610814573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108389190610d96565b506040517fde43156e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84169063de43156e906108939089908990899088908890600401610e01565b600060405180830381600087803b1580156108ad57600080fd5b505af11580156108c1573d6000803e3d6000fd5b50505050505050505050565b60008060006108dc8585610ad3565b6040517fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606084811b8216602084015283901b16603482015291935091508690604801604051602081830303815290604052805190602001206040516020016109c29291907fff00000000000000000000000000000000000000000000000000000000000000815260609290921b7fffffffffffffffffffffffffffffffffffffffff00000000000000000000000016600183015260158201527f96e8ac4277198ff8b6f785478aa9a39f403cb768dd02cbee326c3e7da348845f603582015260550190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291905280516020909101209695505050505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610a4f576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008281526001602090815260409182902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff85169081179091558251858152918201527fd1b36d30f6248e97c473b4d1348ca164a4ef6759022f54a58ec200326c39c45d91016106c2565b6000808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603610b3b576040517fcb1e7cfe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1610610b75578284610b78565b83835b909250905073ffffffffffffffffffffffffffffffffffffffff8216610bca576040517f78b507da00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b9250929050565b600060208284031215610be357600080fd5b5035919050565b803573ffffffffffffffffffffffffffffffffffffffff81168114610c0e57600080fd5b919050565b600060208284031215610c2557600080fd5b610c2e82610bea565b9392505050565b60008060408385031215610c4857600080fd5b82359150610c5860208401610bea565b90509250929050565b60008060408385031215610c7457600080fd5b50508035926020909101359150565b60008060008060008060a08789031215610c9c57600080fd5b863567ffffffffffffffff811115610cb357600080fd5b87016060818a031215610cc557600080fd5b9550610cd360208801610bea565b945060408701359350610ce860608801610bea565b9250608087013567ffffffffffffffff811115610d0457600080fd5b8701601f81018913610d1557600080fd5b803567ffffffffffffffff811115610d2c57600080fd5b896020828401011115610d3e57600080fd5b60208201935080925050509295509295509295565b600080600060608486031215610d6857600080fd5b610d7184610bea565b9250610d7f60208501610bea565b9150610d8d60408501610bea565b90509250925092565b600060208284031215610da857600080fd5b81518015158114610c2e57600080fd5b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b60808152600086357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1883603018112610e3957600080fd5b870160208101903567ffffffffffffffff811115610e5657600080fd5b803603821315610e6557600080fd5b60606080850152610e7a60e085018284610db8565b91505073ffffffffffffffffffffffffffffffffffffffff610e9e60208a01610bea565b1660a0840152604088013560c084015273ffffffffffffffffffffffffffffffffffffffff871660208401528560408401528281036060840152610ee3818587610db8565b9897505050505050505056fea2646970667358221220fea45cb058045b493e646c8b9505ea080ab95fd7ed4498b922d179cf1abec08e64736f6c634300081a003360e060405234801561001057600080fd5b50604051611bb9380380611bb983398101604081905261002f9161020e565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461006357604051632b2add3d60e01b815260040160405180910390fd5b6001600160a01b038216158061008057506001600160a01b038116155b1561009e5760405163d92e233d60e01b815260040160405180910390fd5b60066100aa8982610360565b5060076100b78882610360565b5060ff861660c05260808590528360028111156100d6576100d661041e565b60a08160028111156100ea576100ea61041e565b905250600192909255600080546001600160a01b039283166001600160a01b03199182161790915560088054929093169116179055506104349350505050565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261015157600080fd5b81516001600160401b0381111561016a5761016a61012a565b604051601f8201601f19908116603f011681016001600160401b03811182821017156101985761019861012a565b6040528181528382016020018510156101b057600080fd5b60005b828110156101cf576020818601810151838301820152016101b3565b506000918101602001919091529392505050565b8051600381106101f257600080fd5b919050565b80516001600160a01b03811681146101f257600080fd5b600080600080600080600080610100898b03121561022b57600080fd5b88516001600160401b0381111561024157600080fd5b61024d8b828c01610140565b60208b015190995090506001600160401b0381111561026b57600080fd5b6102778b828c01610140565b975050604089015160ff8116811461028e57600080fd5b60608a015190965094506102a460808a016101e3565b60a08a015190945092506102ba60c08a016101f7565b91506102c860e08a016101f7565b90509295985092959890939650565b600181811c908216806102eb57607f821691505b60208210810361030b57634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111561035b57806000526020600020601f840160051c810160208510156103385750805b601f840160051c820191505b818110156103585760008155600101610344565b50505b505050565b81516001600160401b038111156103795761037961012a565b61038d8161038784546102d7565b84610311565b6020601f8211600181146103c157600083156103a95750848201515b600019600385901b1c1916600184901b178455610358565b600084815260208120601f198516915b828110156103f157878501518255602094850194600190920191016103d1565b508482101561040f5786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b634e487b7160e01b600052602160045260246000fd5b60805160a05160c05161174861047160003960006102170152600061033a0152600081816102eb01528181610ad70152610bdd01526117486000f3fe608060405234801561001057600080fd5b50600436106101985760003560e01c80638b851b95116100e3578063ccc775991161008c578063eddeb12311610066578063eddeb12314610431578063f2441b3214610444578063f687d12a1461046457600080fd5b8063ccc77599146103a4578063d9eeebed146103b7578063dd62ed3e146103eb57600080fd5b8063a9059cbb116100bd578063a9059cbb14610369578063c70126261461037c578063c835d7cc1461038f57600080fd5b80638b851b951461030d57806395d89b411461032d578063a3413d031461033557600080fd5b80633ce4a5bc116101455780634d8943bb1161011f5780634d8943bb146102a757806370a08231146102b057806385e1f4d0146102e657600080fd5b80633ce4a5bc1461024157806342966c681461028157806347e7ef241461029457600080fd5b806318160ddd1161017657806318160ddd146101f557806323b872dd146101fd578063313ce5671461021057600080fd5b806306fdde031461019d578063091d2788146101bb578063095ea7b3146101d2575b600080fd5b6101a5610477565b6040516101b29190611327565b60405180910390f35b6101c460015481565b6040519081526020016101b2565b6101e56101e0366004611366565b610509565b60405190151581526020016101b2565b6005546101c4565b6101e561020b366004611392565b610520565b60405160ff7f00000000000000000000000000000000000000000000000000000000000000001681526020016101b2565b61025c73735b14bb79463307aacbed86daf3322b1e6226ab81565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101b2565b6101e561028f3660046113d3565b6105b7565b6101e56102a2366004611366565b6105cb565b6101c460025481565b6101c46102be3660046113ec565b73ffffffffffffffffffffffffffffffffffffffff1660009081526003602052604090205490565b6101c47f000000000000000000000000000000000000000000000000000000000000000081565b60085461025c9073ffffffffffffffffffffffffffffffffffffffff1681565b6101a561071f565b61035c7f000000000000000000000000000000000000000000000000000000000000000081565b6040516101b29190611409565b6101e5610377366004611366565b61072e565b6101e561038a366004611479565b61073b565b6103a261039d3660046113ec565b61088a565b005b6103a26103b23660046113ec565b61099e565b6103bf610aab565b6040805173ffffffffffffffffffffffffffffffffffffffff90931683526020830191909152016101b2565b6101c46103f9366004611571565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260046020908152604080832093909416825291909152205490565b6103a261043f3660046113d3565b610cc9565b60005461025c9073ffffffffffffffffffffffffffffffffffffffff1681565b6103a26104723660046113d3565b610d4b565b606060068054610486906115aa565b80601f01602080910402602001604051908101604052809291908181526020018280546104b2906115aa565b80156104ff5780601f106104d4576101008083540402835291602001916104ff565b820191906000526020600020905b8154815290600101906020018083116104e257829003601f168201915b5050505050905090565b6000610516338484610dcd565b5060015b92915050565b600061052d848484610ed6565b73ffffffffffffffffffffffffffffffffffffffff8416600090815260046020908152604080832033845290915290205482811015610598576040517f10bad14700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6105ac85336105a7868561162c565b610dcd565b506001949350505050565b60006105c33383611091565b506001919050565b60003373735b14bb79463307aacbed86daf3322b1e6226ab14801590610609575060005473ffffffffffffffffffffffffffffffffffffffff163314155b801561062d575060085473ffffffffffffffffffffffffffffffffffffffff163314155b15610664576040517fddb5de5e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61066e83836111d3565b6040517f735b14bb79463307aacbed86daf3322b1e6226ab000000000000000000000000602082015273ffffffffffffffffffffffffffffffffffffffff8416907f67fc7bdaed5b0ec550d8706b87d60568ab70c6b781263c70101d54cd1564aab390603401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529082905261070e91869061163f565b60405180910390a250600192915050565b606060078054610486906115aa565b6000610516338484610ed6565b6000806000610748610aab565b6040517f23b872dd00000000000000000000000000000000000000000000000000000000815233600482015273735b14bb79463307aacbed86daf3322b1e6226ab602482015260448101829052919350915073ffffffffffffffffffffffffffffffffffffffff8316906323b872dd906064016020604051808303816000875af11580156107da573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107fe9190611661565b610834576040517f0a7cd6d600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61083e3385611091565b60025460405133917f9ffbffc04a397460ee1dbe8c9503e098090567d6b7f4b3c02a8617d800b6d9559161087791899189918791611683565b60405180910390a2506001949350505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab146108d7576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116610924576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527fd55614e962c5fd6ece71614f6348d702468a997a394dd5e5c1677950226d97ae906020015b60405180910390a150565b3373735b14bb79463307aacbed86daf3322b1e6226ab146109eb576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116610a38576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600880547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527f88815d964e380677e86d817e7d65dea59cb7b4c3b5b7a0c8ec7ea4a74f90a38790602001610993565b600080546040517f0be155470000000000000000000000000000000000000000000000000000000081527f000000000000000000000000000000000000000000000000000000000000000060048201528291829173ffffffffffffffffffffffffffffffffffffffff90911690630be1554790602401602060405180830381865afa158015610b3e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b6291906116b2565b905073ffffffffffffffffffffffffffffffffffffffff8116610bb1576040517f78fff39600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080546040517fd7fd7afb0000000000000000000000000000000000000000000000000000000081527f0000000000000000000000000000000000000000000000000000000000000000600482015273ffffffffffffffffffffffffffffffffffffffff9091169063d7fd7afb90602401602060405180830381865afa158015610c40573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c6491906116cf565b905080600003610ca0576040517fe661aed000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060025460015483610cb391906116e8565b610cbd91906116ff565b92959294509192505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610d16576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60028190556040518181527fef13af88e424b5d15f49c77758542c1938b08b8b95b91ed0751f98ba99000d8f90602001610993565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610d98576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018190556040518181527fff5788270f43bfc1ca41c503606d2594aa3023a1a7547de403a3e2f146a4a80a90602001610993565b73ffffffffffffffffffffffffffffffffffffffff8316610e1a576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216610e67576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff83811660008181526004602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8316610f23576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216610f70576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff831660009081526003602052604090205481811015610fd0576040517ffe382aa700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610fda828261162c565b73ffffffffffffffffffffffffffffffffffffffff808616600090815260036020526040808220939093559085168152908120805484929061101d9084906116ff565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161108391815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff82166110de576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff82166000908152600360205260409020548181101561113e576040517ffe382aa700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611148828261162c565b73ffffffffffffffffffffffffffffffffffffffff84166000908152600360205260408120919091556005805484929061118390849061162c565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90602001610ec9565b73ffffffffffffffffffffffffffffffffffffffff8216611220576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b806005600082825461123291906116ff565b909155505073ffffffffffffffffffffffffffffffffffffffff82166000908152600360205260408120805483929061126c9084906116ff565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6000815180845260005b818110156112e9576020818501810151868301820152016112cd565b5060006020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b60208152600061133a60208301846112c3565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff8116811461136357600080fd5b50565b6000806040838503121561137957600080fd5b823561138481611341565b946020939093013593505050565b6000806000606084860312156113a757600080fd5b83356113b281611341565b925060208401356113c281611341565b929592945050506040919091013590565b6000602082840312156113e557600080fd5b5035919050565b6000602082840312156113fe57600080fd5b813561133a81611341565b6020810160038310611444577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000806040838503121561148c57600080fd5b823567ffffffffffffffff8111156114a357600080fd5b8301601f810185136114b457600080fd5b803567ffffffffffffffff8111156114ce576114ce61144a565b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8501160116810181811067ffffffffffffffff8211171561153a5761153a61144a565b60405281815282820160200187101561155257600080fd5b8160208401602083013760006020928201830152969401359450505050565b6000806040838503121561158457600080fd5b823561158f81611341565b9150602083013561159f81611341565b809150509250929050565b600181811c908216806115be57607f821691505b6020821081036115f7577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8181038181111561051a5761051a6115fd565b60408152600061165260408301856112c3565b90508260208301529392505050565b60006020828403121561167357600080fd5b8151801515811461133a57600080fd5b60808152600061169660808301876112c3565b6020830195909552506040810192909252606090910152919050565b6000602082840312156116c457600080fd5b815161133a81611341565b6000602082840312156116e157600080fd5b5051919050565b808202811582820484141761051a5761051a6115fd565b8082018082111561051a5761051a6115fd56fea26469706673582212204013e39523742118b3f2227e145ee7e48176ba6aebead33c596dca2acb59a74c64736f6c634300081a0033a2646970667358221220334475972158595e49cc40408c81acce727b0822402b521864a526f63bb30d1664736f6c634300081a0033", + ABI: "[{\"type\":\"function\",\"name\":\"IS_TEST\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"PAUSER_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeArtifacts\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedArtifacts_\",\"type\":\"string[]\",\"internalType\":\"string[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeContracts\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedContracts_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeSelectors\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedSelectors_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzSelector[]\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"selectors\",\"type\":\"bytes4[]\",\"internalType\":\"bytes4[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeSenders\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedSenders_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"failed\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"setUp\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"targetArtifactSelectors\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedArtifactSelectors_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzArtifactSelector[]\",\"components\":[{\"name\":\"artifact\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"selectors\",\"type\":\"bytes4[]\",\"internalType\":\"bytes4[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetArtifacts\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedArtifacts_\",\"type\":\"string[]\",\"internalType\":\"string[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetContracts\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedContracts_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetInterfaces\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedInterfaces_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzInterface[]\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"artifacts\",\"type\":\"string[]\",\"internalType\":\"string[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetSelectors\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedSelectors_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzSelector[]\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"selectors\",\"type\":\"bytes4[]\",\"internalType\":\"bytes4[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetSenders\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedSenders_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"testDeposit\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositAndRevertZRC20AndCallUniversalContract\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositAndRevertZRC20AndCallUniversalContractFailsITargetIsFungibleModule\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositAndRevertZRC20AndCallUniversalContractFailsITargetIsGateway\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositAndRevertZRC20AndCallUniversalContractFailsIfAmountIsZero\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositAndRevertZRC20AndCallUniversalContractFailsIfSenderIsNotFungibleModule\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositAndRevertZRC20AndCallUniversalContractFailsIfTargetIsZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositAndRevertZRC20AndCallUniversalContractFailsIfZRC20IsZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositFailsIfAmountIs0\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositFailsIfSenderNotFungibleModule\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositFailsIfTargetIsFungibleModule\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositFailsIfTargetIsGateway\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositFailsIfTargetIsZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositFailsIfZRC20IsZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositTogglePause\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositZETAAndCallUniversal\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositZETAAndCallUniversalContract\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositZETAAndCallUniversalContractFailsIfSenderIsNotFungibleModule\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositZETAAndCallUniversalContractFailsIfTargetIsAmountIsZero\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositZETAAndCallUniversalContractFailsIfTargetIsFungibleModule\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositZETAAndCallUniversalContractFailsIfTargetIsGateway\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositZETAAndCallUniversalContractFailsIfTargetIsZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositZETAAndCallUniversalContractFailsIfZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositZRC20AndCallUniversalContract\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositZRC20AndCallUniversalContractFailsIfAmountIsZero\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositZRC20AndCallUniversalContractFailsIfSenderIsNotFungibleModule\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositZRC20AndCallUniversalContractFailsIfTargetIsZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositZRC20AndCallUniversalContractFailsIfZRC20IsZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositZRC20AndCallUniversalContractIfTargetIsFungibleModule\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositZRC20AndCallUniversalContractIfTargetIsGateway\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testExecuteFailsIfAmountIsZero\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testExecuteFailsIfTargetIsZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testExecuteFailsIfZrc20IsZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testExecuteRevertUniversalContract\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testExecuteRevertUniversalContractFailsIfAmountIsZero\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testExecuteRevertUniversalContractFailsIfTargetIsZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testExecuteRevertUniversalContractFailsIfZRC20IsZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testExecuteRevertUniversalContractFailsIfZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testExecuteRevertUniversalContractFailsIfZrc20IsZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testExecuteRevertUniversalContractIfSenderIsNotFungibleModule\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testExecuteUniversalContract\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testExecuteUniversalContractFailsIfSenderIsNotFungibleModule\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testExecuteUniversalContractFailsIfZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"event\",\"name\":\"Call\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"chainId\",\"type\":\"uint256\",\"indexed\":true,\"internalType\":\"uint256\"},{\"name\":\"receiver\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"message\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ContextData\",\"inputs\":[{\"name\":\"origin\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"chainID\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"msgSender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"message\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ContextDataRevert\",\"inputs\":[{\"name\":\"origin\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"chainID\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"msgSender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"message\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Withdrawal\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"chainId\",\"type\":\"uint256\",\"indexed\":true,\"internalType\":\"uint256\"},{\"name\":\"receiver\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"zrc20\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"gasfee\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"protocolFlatFee\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"message\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log\",\"inputs\":[{\"name\":\"\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_address\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_array\",\"inputs\":[{\"name\":\"val\",\"type\":\"uint256[]\",\"indexed\":false,\"internalType\":\"uint256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_array\",\"inputs\":[{\"name\":\"val\",\"type\":\"int256[]\",\"indexed\":false,\"internalType\":\"int256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_array\",\"inputs\":[{\"name\":\"val\",\"type\":\"address[]\",\"indexed\":false,\"internalType\":\"address[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_bytes\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_bytes32\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_int\",\"inputs\":[{\"name\":\"\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_address\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_array\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"uint256[]\",\"indexed\":false,\"internalType\":\"uint256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_array\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"int256[]\",\"indexed\":false,\"internalType\":\"int256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_array\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"address[]\",\"indexed\":false,\"internalType\":\"address[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_bytes\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_bytes32\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_decimal_int\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"},{\"name\":\"decimals\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_decimal_uint\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"decimals\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_int\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_string\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_uint\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_string\",\"inputs\":[{\"name\":\"\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_uint\",\"inputs\":[{\"name\":\"\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"logs\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"AccessControlUnauthorizedAccount\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"neededRole\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"type\":\"error\",\"name\":\"CallerIsNotFungibleModule\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"EnforcedPause\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"FailedZetaSent\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"GasFeeTransferFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientZRC20Amount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientZetaAmount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidTarget\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OnlyWZETAOrFungible\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"WithdrawalFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZRC20BurnFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZRC20DepositFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZRC20TransferFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZeroAddress\",\"inputs\":[]}]", + Bin: "0x6080604052600c8054600160ff199182168117909255601f80549091169091179055348015602c57600080fd5b5062010044806200003e6000396000f3fe608060405234801561001057600080fd5b50600436106103835760003560e01c8063828d267c116101de578063b936be8c1161010f578063e09bc659116100ad578063ec294d9f1161007c578063ec294d9f14610599578063ef2b5394146105a1578063fa7626d4146105a9578063fb339a1c146105b657600080fd5b8063e09bc6591461054c578063e20c9f7114610554578063e63ab1e91461055c578063eab7674e1461059157600080fd5b8063c8814d2e116100e9578063c8814d2e1461052c578063d997851314610534578063d9a4fa161461053c578063df881f6c1461054457600080fd5b8063b936be8c14610482578063ba414fa61461050c578063c7b388b11461052457600080fd5b80639c9acd5d1161017c578063a40b515b11610156578063a40b515b146104ec578063b0464fdc146104f4578063b5508aa9146104fc578063b8f2b8211461050457600080fd5b80639c9acd5d146104d45780639ca37e92146104dc578063a0b2c7b1146104e457600080fd5b8063916a17c6116101b8578063916a17c6146104a757806396d9d876146104bc57806397f7661f146104c4578063996b7675146104cc57600080fd5b8063828d267c1461048257806385226c811461048a578063884660a31461049f57600080fd5b80633f7286f4116102b85780635cec7db511610256578063671b91e211610230578063671b91e2146104625780636efa04b51461046a5780637cec29b0146104725780637f924c4e1461047a57600080fd5b80635cec7db5146104455780635d19c049146103a257806366d9a9a01461044d57600080fd5b80634b9324b6116102925780634b9324b6146103a257806351336fb01461043557806358c9987f1461043d5780635b4c90e11461039257600080fd5b80633f7286f41461041d57806344b2a40b1461042557806348f4fd071461042d57600080fd5b80631ed7831c116103255780632fa381f4116102ff5780632fa381f4146103fd578063339bd828146104055780633ab5b1991461040d5780633e5e3c231461041557600080fd5b80631ed7831c146103c25780632468bc0f146103e05780632ade3880146103e857600080fd5b80630bfc4e4a116103615780630bfc4e4a146103a257806314b7a6da146103aa578063198d5ca4146103b25780631c785a14146103ba57600080fd5b8063084fafab1461038857806309f92c1f146103925780630a9254e41461039a575b600080fd5b6103906105be565b005b610390610867565b610390610a1a565b610390611487565b61039061163a565b6103906117a0565b610390611a28565b6103ca61233f565b6040516103d7919061aaf6565b60405180910390f35b6103906123a1565b6103f061286c565b6040516103d7919061ab92565b6103906129ae565b610390612ba0565b610390612d51565b6103ca612f02565b6103ca612f62565b610390612fc2565b61039061314a565b6103906132fd565b6103906134b6565b61039061366b565b610455613822565b6040516103d7919061acf8565b6103906139a4565b610390613b62565b610390613f06565b610390614179565b6103906141b2565b610492614495565b6040516103d7919061ad96565b610390614565565b6104af614858565b6040516103d7919061ae0d565b610390614953565b610390614aa6565b610390614c52565b610390614da6565b610390614ef6565b61039061502d565b6103906151e8565b6104af61539d565b610492615498565b610390615568565b610514615726565b60405190151581526020016103d7565b6103906157fa565b6103906159b8565b610390615b69565b610390615ca0565b610390615e5e565b610390616013565b6103ca6161cc565b6105837f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b6040519081526020016103d7565b61039061622c565b6103906163e1565b610390616590565b601f546105149060ff1681565b610390616741565b60006040516020016105cf9061aea4565b60408051601f19818403018152606080840190925260205490911b6bffffffffffffffffffffffff191660808301529150600090806094810160408051808303601f190181529181529082526027546001600160a01b03908116602084015260019282018390526024805492517f81bad6f300000000000000000000000000000000000000000000000000000000815260048101859052908101849052604481018490526064810193909352166084820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b1580156106bd57600080fd5b505af11580156106d1573d6000803e3d6000fd5b5050602080546040517ffdc887992b033668833927e252058e468fac0b6bd196d520f09c61b740e99948945061072c93506001600160a01b03909116910160609190911b6bffffffffffffffffffffffff1916815260140190565b60408051601f198184030181529082905260275460205461075d936001600160a01b0392831692600192169061aee1565b60405180910390a160275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa7906024015b600060405180830381600087803b1580156107bf57600080fd5b505af11580156107d3573d6000803e3d6000fd5b50506020546021546024546040517f309f50040000000000000000000000000000000000000000000000000000000081526001600160a01b03938416955063309f50049450610831938793811692600192911690899060040161af92565b600060405180830381600087803b15801561084b57600080fd5b505af115801561085f573d6000803e3d6000fd5b505050505050565b60006040516020016108789061aea4565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401819052600184840152825163ca669fa760e01b815260048101919091529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163ca669fa791602480830192600092919082900301818387803b15801561092657600080fd5b505af115801561093a573d6000803e3d6000fd5b5050604051630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b1580156109aa57600080fd5b505af11580156109be573d6000803e3d6000fd5b50506020546024546040517fbcf7f32b0000000000000000000000000000000000000000000000000000000081526001600160a01b03928316945063bcf7f32b935061083192869260009260019290911690899060040161af92565b602580547fffffffffffffffffffffffff0000000000000000000000000000000000000000908116301790915560268054909116611234179055604051610a609061aa05565b604051809103906000f080158015610a7c573d6000803e3d6000fd5b50602280547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03928316908117909155604080518082018252600f81527f476174657761795a45564d2e736f6c000000000000000000000000000000000060208201526025549151602481019390935292166044820152610b60919060640160408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f485cc955000000000000000000000000000000000000000000000000000000001790526168f4565b601f80547fffffffffffffffffffffff0000000000000000000000000000000000000000ff166101006001600160a01b039384168102919091179182905560208054919092049092167fffffffffffffffffffffffff000000000000000000000000000000000000000090921682178155604080517f3ce4a5bc0000000000000000000000000000000000000000000000000000000081529051633ce4a5bc926004808401939192918290030181865afa158015610c22573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c46919061afe7565b602780547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055604051610c8a9061aa13565b604051809103906000f080158015610ca6573d6000803e3d6000fd5b50602480547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039283161781556027546040517f06447d5600000000000000000000000000000000000000000000000000000000815292166004830152737109709ecfa91a80626ff3989d68f67f5b1dd12d916306447d569101600060405180830381600087803b158015610d4257600080fd5b505af1158015610d56573d6000803e3d6000fd5b505050506000806000604051610d6b9061aa21565b6001600160a01b03938416815291831660208301529091166040820152606001604051809103906000f080158015610da7573d6000803e3d6000fd5b50602380547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03928316908117909155602054604051601293600193849360009391921690610dfd9061aa2f565b610e0c9695949392919061b010565b604051809103906000f080158015610e28573d6000803e3d6000fd5b50602180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039283169081179091556023546040517fee2815ba0000000000000000000000000000000000000000000000000000000081526001600482015260248101929092529091169063ee2815ba90604401600060405180830381600087803b158015610ebf57600080fd5b505af1158015610ed3573d6000803e3d6000fd5b50506023546040517fa7cb050700000000000000000000000000000000000000000000000000000000815260016004820181905260248201526001600160a01b03909116925063a7cb05079150604401600060405180830381600087803b158015610f3d57600080fd5b505af1158015610f51573d6000803e3d6000fd5b50506027546040517fc88a5e6d0000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152633b9aca006024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c88a5e6d9150604401600060405180830381600087803b158015610fd157600080fd5b505af1158015610fe5573d6000803e3d6000fd5b50505050602260009054906101000a90046001600160a01b03166001600160a01b031663d0e30db0600a6040518263ffffffff1660e01b81526004016000604051808303818588803b15801561103a57600080fd5b505af115801561104e573d6000803e3d6000fd5b50506022546020546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152600a60248201529116935063095ea7b3925060440190506020604051808303816000875af11580156110c2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110e6919061b0ff565b506021546025546040517f47e7ef240000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620186a060248201529116906347e7ef24906044016020604051808303816000875af1158015611157573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061117b919061b0ff565b507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b03166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156111da57600080fd5b505af11580156111ee573d6000803e3d6000fd5b50506025546040517f06447d560000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506306447d569150602401600060405180830381600087803b15801561126457600080fd5b505af1158015611278573d6000803e3d6000fd5b50506021546020546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620186a060248201529116925063095ea7b391506044016020604051808303816000875af11580156112ec573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611310919061b0ff565b50602260009054906101000a90046001600160a01b03166001600160a01b031663d0e30db0600a6040518263ffffffff1660e01b81526004016000604051808303818588803b15801561136257600080fd5b505af1158015611376573d6000803e3d6000fd5b50506022546020546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152600a60248201529116935063095ea7b3925060440190506020604051808303816000875af11580156113ea573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061140e919061b0ff565b507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b03166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561146d57600080fd5b505af1158015611481573d6000803e3d6000fd5b50505050565b60006040516020016114989061aea4565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401819052600184840152825163ca669fa760e01b815260048101919091529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163ca669fa791602480830192600092919082900301818387803b15801561154657600080fd5b505af115801561155a573d6000803e3d6000fd5b5050604051630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b1580156115ca57600080fd5b505af11580156115de573d6000803e3d6000fd5b50506020546024546040517f309f50040000000000000000000000000000000000000000000000000000000081526001600160a01b03928316945063309f5004935061083192869260009260019290911690899060040161af92565b60275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561169357600080fd5b505af11580156116a7573d6000803e3d6000fd5b5050604051630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b15801561171757600080fd5b505af115801561172b573d6000803e3d6000fd5b50506020546021546040517ff45346dc0000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260016024820152600060448201529116925063f45346dc91506064015b600060405180830381600087803b15801561146d57600080fd5b6021546026546040516370a0823160e01b81526001600160a01b03918216600482015260019260009216906370a0823190602401602060405180830381865afa1580156117f1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611815919061b121565b9050611822600082616913565b60255460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561187b57600080fd5b505af115801561188f573d6000803e3d6000fd5b5050604051630618f58760e51b81527f2b2add3d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b1580156118ff57600080fd5b505af1158015611913573d6000803e3d6000fd5b50506020546021546026546040517ff45346dc0000000000000000000000000000000000000000000000000000000081526001600160a01b0392831660048201526024810188905290821660448201529116925063f45346dc9150606401600060405180830381600087803b15801561198b57600080fd5b505af115801561199f573d6000803e3d6000fd5b50506021546026546040516370a0823160e01b81526001600160a01b03918216600482015260009450911691506370a0823190602401602060405180830381865afa1580156119f2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a16919061b121565b9050611a23600082616913565b505050565b60275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015611a8157600080fd5b505af1158015611a95573d6000803e3d6000fd5b5050602754604080516001600160a01b0390921660248301527f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a60448084019190915281518084039091018152606490920181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb39250611b80919060040161b13a565b600060405180830381600087803b158015611b9a57600080fd5b505af1158015611bae573d6000803e3d6000fd5b50505050602060009054906101000a90046001600160a01b03166001600160a01b0316638456cb596040518163ffffffff1660e01b8152600401600060405180830381600087803b158015611c0257600080fd5b505af1158015611c16573d6000803e3d6000fd5b505060275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b158015611c7357600080fd5b505af1158015611c87573d6000803e3d6000fd5b5050602754604080516001600160a01b0390921660248301527f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a60448084019190915281518084039091018152606490920181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb39250611d72919060040161b13a565b600060405180830381600087803b158015611d8c57600080fd5b505af1158015611da0573d6000803e3d6000fd5b50505050602060009054906101000a90046001600160a01b03166001600160a01b0316633f4ba83a6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015611df457600080fd5b505af1158015611e08573d6000803e3d6000fd5b505060255460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b158015611e6557600080fd5b505af1158015611e79573d6000803e3d6000fd5b50505050602060009054906101000a90046001600160a01b03166001600160a01b0316638456cb596040518163ffffffff1660e01b8152600401600060405180830381600087803b158015611ecd57600080fd5b505af1158015611ee1573d6000803e3d6000fd5b5050604051630618f58760e51b81527fd93c066500000000000000000000000000000000000000000000000000000000600482015260019250737109709ecfa91a80626ff3989d68f67f5b1dd12d915063c31eb0e090602401600060405180830381600087803b158015611f5457600080fd5b505af1158015611f68573d6000803e3d6000fd5b505060275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b158015611fc557600080fd5b505af1158015611fd9573d6000803e3d6000fd5b50506020546021546026546040517ff45346dc0000000000000000000000000000000000000000000000000000000081526001600160a01b0392831660048201526024810187905290821660448201529116925063f45346dc9150606401600060405180830381600087803b15801561205157600080fd5b505af1158015612065573d6000803e3d6000fd5b505060255460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b1580156120c257600080fd5b505af11580156120d6573d6000803e3d6000fd5b50505050602060009054906101000a90046001600160a01b03166001600160a01b0316633f4ba83a6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561212a57600080fd5b505af115801561213e573d6000803e3d6000fd5b50506021546026546040516370a0823160e01b81526001600160a01b03918216600482015260009450911691506370a08231906024015b602060405180830381865afa158015612192573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121b6919061b121565b90506121c3600082616913565b60275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561221c57600080fd5b505af1158015612230573d6000803e3d6000fd5b50506020546021546026546040517ff45346dc0000000000000000000000000000000000000000000000000000000081526001600160a01b0392831660048201526024810188905290821660448201529116925063f45346dc9150606401600060405180830381600087803b1580156122a857600080fd5b505af11580156122bc573d6000803e3d6000fd5b50506021546026546040516370a0823160e01b81526001600160a01b03918216600482015260009450911691506370a0823190602401602060405180830381865afa15801561230f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612333919061b121565b9050611a238382616913565b6060601680548060200260200160405190810160405280929190818152602001828054801561239757602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311612379575b5050505050905090565b6022546027546040516370a0823160e01b81526001600160a01b03918216600482015260019260009216906370a0823190602401602060405180830381865afa1580156123f2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612416919061b121565b6022546020546040516370a0823160e01b81526001600160a01b0391821660048201529293506000929116906370a0823190602401602060405180830381865afa158015612468573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061248c919061b121565b6024546040519192506001600160a01b031631906000906124af9060200161aea4565b60408051601f19818403018152606080840190925260205490911b6bffffffffffffffffffffffff191660808301529150600090806094810160408051808303601f190181529181529082526027546001600160a01b03908116602084015260019282018390526024805492517f81bad6f300000000000000000000000000000000000000000000000000000000815260048101859052908101849052604481018490526064810193909352166084820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b15801561259d57600080fd5b505af11580156125b1573d6000803e3d6000fd5b5050602080546040517fcdc8ee677dc5ebe680fb18cebda5e26ba5ea1f0ba504a47e2a9a2ecb476dc98e945061260c93506001600160a01b03909116910160609190911b6bffffffffffffffffffffffff1916815260140190565b60408051601f198184030181529082905260275460205461263c936001600160a01b03928316928c92169061aee1565b60405180910390a160275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561269d57600080fd5b505af11580156126b1573d6000803e3d6000fd5b50506020546024546040517f21501a950000000000000000000000000000000000000000000000000000000081526001600160a01b0392831694506321501a9593506127089286928c92911690889060040161b14d565b600060405180830381600087803b15801561272257600080fd5b505af1158015612736573d6000803e3d6000fd5b50506022546027546040516370a0823160e01b81526001600160a01b03918216600482015260009450911691506370a0823190602401602060405180830381865afa158015612789573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127ad919061b121565b90506127c26127bc888861b1b6565b82616913565b6022546020546040516370a0823160e01b81526001600160a01b03918216600482015260009291909116906370a0823190602401602060405180830381865afa158015612813573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612837919061b121565b90506128438682616913565b612862612850898761b1c9565b6024546001600160a01b031631616913565b5050505050505050565b6060601e805480602002602001604051908101604052809291908181526020016000905b828210156129a557600084815260208082206040805180820182526002870290920180546001600160a01b03168352600181018054835181870281018701909452808452939591948681019491929084015b8282101561298e5783829060005260206000200180546129019061b1dc565b80601f016020809104026020016040519081016040528092919081815260200182805461292d9061b1dc565b801561297a5780601f1061294f5761010080835404028352916020019161297a565b820191906000526020600020905b81548152906001019060200180831161295d57829003601f168201915b5050505050815260200190600101906128e2565b505050508152505081526020019060010190612890565b50505050905090565b6040516001906000906129c39060200161aea4565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401526001838301528151630618f58760e51b81527f2b2add3d0000000000000000000000000000000000000000000000000000000060048201529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163c31eb0e091602480830192600092919082900301818387803b158015612a8d57600080fd5b505af1158015612aa1573d6000803e3d6000fd5b505060255460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b158015612afe57600080fd5b505af1158015612b12573d6000803e3d6000fd5b50506020546024546040517f21501a950000000000000000000000000000000000000000000000000000000081526001600160a01b0392831694506321501a959350612b699286928992911690889060040161b14d565b600060405180830381600087803b158015612b8357600080fd5b505af1158015612b97573d6000803e3d6000fd5b50505050505050565b6000604051602001612bb19061aea4565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401819052600184840152825163ca669fa760e01b815260048101919091529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163ca669fa791602480830192600092919082900301818387803b158015612c5f57600080fd5b505af1158015612c73573d6000803e3d6000fd5b5050604051630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b158015612ce357600080fd5b505af1158015612cf7573d6000803e3d6000fd5b50506020546021546040517f5af659670000000000000000000000000000000000000000000000000000000081526001600160a01b039283169450635af6596793506108319286921690600190600090899060040161af92565b6000604051602001612d629061aea4565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401819052600184840152825163ca669fa760e01b815260048101919091529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163ca669fa791602480830192600092919082900301818387803b158015612e1057600080fd5b505af1158015612e24573d6000803e3d6000fd5b5050604051630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b158015612e9457600080fd5b505af1158015612ea8573d6000803e3d6000fd5b50506020546021546040517fbcf7f32b0000000000000000000000000000000000000000000000000000000081526001600160a01b03928316945063bcf7f32b93506108319286921690600190600090899060040161af92565b60606018805480602002602001604051908101604052809291908181526020018280548015612397576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311612379575050505050905090565b60606017805480602002602001604051908101604052809291908181526020018280548015612397576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311612379575050505050905090565b60275460405163ca669fa760e01b81526001600160a01b039091166004820152600190737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561301e57600080fd5b505af1158015613032573d6000803e3d6000fd5b5050604051630618f58760e51b81527f82d5d76a000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b1580156130a257600080fd5b505af11580156130b6573d6000803e3d6000fd5b50506020546021546027546040517ff45346dc0000000000000000000000000000000000000000000000000000000081526001600160a01b0392831660048201526024810187905290821660448201529116925063f45346dc91506064015b600060405180830381600087803b15801561312f57600080fd5b505af1158015613143573d6000803e3d6000fd5b5050505050565b600060405160200161315b9061aea4565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401819052600184840152825163ca669fa760e01b815260048101919091529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163ca669fa791602480830192600092919082900301818387803b15801561320957600080fd5b505af115801561321d573d6000803e3d6000fd5b5050604051630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b15801561328d57600080fd5b505af11580156132a1573d6000803e3d6000fd5b50506020546024546040517f5af659670000000000000000000000000000000000000000000000000000000081526001600160a01b039283169450635af65967935061083192869260009260019290911690899060040161af92565b600060405160200161330e9061aea4565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401526001838301528151630618f58760e51b81527f82d5d76a0000000000000000000000000000000000000000000000000000000060048201529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163c31eb0e091602480830192600092919082900301818387803b1580156133d857600080fd5b505af11580156133ec573d6000803e3d6000fd5b505060275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b15801561344957600080fd5b505af115801561345d573d6000803e3d6000fd5b50506020546021546040517f5af659670000000000000000000000000000000000000000000000000000000081526001600160a01b039283169450635af65967935061083192869216906001908690899060040161af92565b60006040516020016134c79061aea4565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401819052600184840152825163ca669fa760e01b815260048101919091529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163ca669fa791602480830192600092919082900301818387803b15801561357557600080fd5b505af1158015613589573d6000803e3d6000fd5b5050604051630618f58760e51b81527f5d67094f000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b1580156135f957600080fd5b505af115801561360d573d6000803e3d6000fd5b50506020546021546024546040517fc39aca370000000000000000000000000000000000000000000000000000000081526001600160a01b03938416955063c39aca379450610831938793811692600092911690899060040161af92565b6040516001906000906136809060200161aea4565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401526001838301528151630618f58760e51b81527f82d5d76a0000000000000000000000000000000000000000000000000000000060048201529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163c31eb0e091602480830192600092919082900301818387803b15801561374a57600080fd5b505af115801561375e573d6000803e3d6000fd5b505060275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b1580156137bb57600080fd5b505af11580156137cf573d6000803e3d6000fd5b50506020546040517f21501a950000000000000000000000000000000000000000000000000000000081526001600160a01b0390911692506321501a959150612b6990849087908590889060040161b14d565b6060601b805480602002602001604051908101604052809291908181526020016000905b828210156129a557838290600052602060002090600202016040518060400160405290816000820180546138799061b1dc565b80601f01602080910402602001604051908101604052809291908181526020018280546138a59061b1dc565b80156138f25780601f106138c7576101008083540402835291602001916138f2565b820191906000526020600020905b8154815290600101906020018083116138d557829003601f168201915b505050505081526020016001820180548060200260200160405190810160405280929190818152602001828054801561398c57602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190600401906020826003010492830192600103820291508084116139395790505b50505050508152505081526020019060010190613846565b60006040516020016139b59061aea4565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401526001838301528151630618f58760e51b81527f2b2add3d0000000000000000000000000000000000000000000000000000000060048201529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163c31eb0e091602480830192600092919082900301818387803b158015613a7f57600080fd5b505af1158015613a93573d6000803e3d6000fd5b505060255460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b158015613af057600080fd5b505af1158015613b04573d6000803e3d6000fd5b50506020546021546024546040517f5af659670000000000000000000000000000000000000000000000000000000081526001600160a01b039384169550635af659679450610831938793811692600192911690899060040161af92565b602154602480546040516370a0823160e01b81526001600160a01b03918216600482015260009391909116916370a082319101602060405180830381865afa158015613bb2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613bd6919061b121565b9050613be3600082616913565b6000604051602001613bf49061aea4565b60408051601f19818403018152606080840190925260205490911b6bffffffffffffffffffffffff191660808301529150600090806094810160408051808303601f190181529181529082526027546001600160a01b03908116602084015260019282018390526024805492517f81bad6f300000000000000000000000000000000000000000000000000000000815260048101859052908101849052604481018490526064810193909352166084820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b158015613ce257600080fd5b505af1158015613cf6573d6000803e3d6000fd5b5050602080546040517fcdc8ee677dc5ebe680fb18cebda5e26ba5ea1f0ba504a47e2a9a2ecb476dc98e9450613d5193506001600160a01b03909116910160609190911b6bffffffffffffffffffffffff1916815260140190565b60408051601f1981840301815290829052602754602054613d82936001600160a01b0392831692600192169061aee1565b60405180910390a160275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015613de357600080fd5b505af1158015613df7573d6000803e3d6000fd5b50506020546021546024546040517fc39aca370000000000000000000000000000000000000000000000000000000081526001600160a01b03938416955063c39aca379450613e55938793811692600192911690899060040161af92565b600060405180830381600087803b158015613e6f57600080fd5b505af1158015613e83573d6000803e3d6000fd5b5050602154602480546040516370a0823160e01b81526001600160a01b03918216600482015260009550921692506370a082319101602060405180830381865afa158015613ed5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613ef9919061b121565b9050611481600182616913565b6000604051602001613f179061aea4565b60408051601f19818403018152606080840190925260205490911b6bffffffffffffffffffffffff191660808301529150600090806094810160408051808303601f190181529181529082526027546001600160a01b03908116602084015260019282018390526024805492517f81bad6f300000000000000000000000000000000000000000000000000000000815260048101859052908101849052604481018490526064810193909352166084820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b15801561400557600080fd5b505af1158015614019573d6000803e3d6000fd5b5050602080546040517fcdc8ee677dc5ebe680fb18cebda5e26ba5ea1f0ba504a47e2a9a2ecb476dc98e945061407493506001600160a01b03909116910160609190911b6bffffffffffffffffffffffff1916815260140190565b60408051601f19818403018152908290526027546020546140a5936001600160a01b0392831692600192169061aee1565b60405180910390a160275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa7906024015b600060405180830381600087803b15801561410757600080fd5b505af115801561411b573d6000803e3d6000fd5b50506020546021546024546040517fbcf7f32b0000000000000000000000000000000000000000000000000000000081526001600160a01b03938416955063bcf7f32b9450610831938793811692600192911690899060040161af92565b6021546026546040516370a0823160e01b81526001600160a01b03918216600482015260019260009216906370a0823190602401612175565b6022546027546040516370a0823160e01b81526001600160a01b03918216600482015260019260009216906370a0823190602401602060405180830381865afa158015614203573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614227919061b121565b6022546020546040516370a0823160e01b81526001600160a01b0391821660048201529293506000929116906370a0823190602401602060405180830381865afa158015614279573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061429d919061b121565b6024546040519192506001600160a01b031631906000906142c09060200161aea4565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401819052600184840152825163ca669fa760e01b815260048101919091529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163ca669fa791602480830192600092919082900301818387803b15801561436e57600080fd5b505af1158015614382573d6000803e3d6000fd5b5050604051630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b1580156143f257600080fd5b505af1158015614406573d6000803e3d6000fd5b50506020546040517f21501a950000000000000000000000000000000000000000000000000000000081526001600160a01b0390911692506321501a95915061445b908490600190600090889060040161b14d565b600060405180830381600087803b15801561447557600080fd5b505af1158015614489573d6000803e3d6000fd5b50505050505050505050565b6060601a805480602002602001604051908101604052809291908181526020016000905b828210156129a55783829060005260206000200180546144d89061b1dc565b80601f01602080910402602001604051908101604052809291908181526020018280546145049061b1dc565b80156145515780601f1061452657610100808354040283529160200191614551565b820191906000526020600020905b81548152906001019060200180831161453457829003601f168201915b5050505050815260200190600101906144b9565b602154602480546040516370a0823160e01b81526001600160a01b03918216600482015260009391909116916370a082319101602060405180830381865afa1580156145b5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906145d9919061b121565b90506145e6600082616913565b60006040516020016145f79061aea4565b60408051601f19818403018152606080840190925260205490911b6bffffffffffffffffffffffff191660808301529150600090806094810160408051808303601f190181529181529082526027546001600160a01b03908116602084015260019282018390526024805492517f81bad6f300000000000000000000000000000000000000000000000000000000815260048101859052908101849052604481018490526064810193909352166084820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b1580156146e557600080fd5b505af11580156146f9573d6000803e3d6000fd5b5050602080546040517ffdc887992b033668833927e252058e468fac0b6bd196d520f09c61b740e99948945061475493506001600160a01b03909116910160609190911b6bffffffffffffffffffffffff1916815260140190565b60408051601f1981840301815290829052602754602054614785936001600160a01b0392831692600192169061aee1565b60405180910390a160275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156147e657600080fd5b505af11580156147fa573d6000803e3d6000fd5b50506020546021546024546040517f5af659670000000000000000000000000000000000000000000000000000000081526001600160a01b039384169550635af659679450613e55938793811692600192911690899060040161af92565b6060601d805480602002602001604051908101604052809291908181526020016000905b828210156129a55760008481526020908190206040805180820182526002860290920180546001600160a01b0316835260018101805483518187028101870190945280845293949193858301939283018282801561493b57602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190600401906020826003010492830192600103820291508084116148e85790505b5050505050815250508152602001906001019061487c565b60275460405163ca669fa760e01b81526001600160a01b039091166004820152600190737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156149af57600080fd5b505af11580156149c3573d6000803e3d6000fd5b5050604051630618f58760e51b81527f82d5d76a000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b158015614a3357600080fd5b505af1158015614a47573d6000803e3d6000fd5b50506020546021546040517ff45346dc0000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260248101869052911660448201819052925063f45346dc9150606401613115565b6000604051602001614ab79061aea4565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401819052600184840152825163ca669fa760e01b815260048101919091529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163ca669fa791602480830192600092919082900301818387803b158015614b6557600080fd5b505af1158015614b79573d6000803e3d6000fd5b5050604051630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b158015614be957600080fd5b505af1158015614bfd573d6000803e3d6000fd5b50506020546040517f21501a950000000000000000000000000000000000000000000000000000000081526001600160a01b0390911692506321501a959150610831908490600190600090889060040161b14d565b60275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015614cab57600080fd5b505af1158015614cbf573d6000803e3d6000fd5b5050604051630618f58760e51b81527f5d67094f000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b158015614d2f57600080fd5b505af1158015614d43573d6000803e3d6000fd5b50506020546021546026546040517ff45346dc0000000000000000000000000000000000000000000000000000000081526001600160a01b0392831660048201526000602482015290821660448201529116925063f45346dc9150606401611786565b60275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015614dff57600080fd5b505af1158015614e13573d6000803e3d6000fd5b5050604051630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b158015614e8357600080fd5b505af1158015614e97573d6000803e3d6000fd5b50506020546026546040517ff45346dc00000000000000000000000000000000000000000000000000000000815260006004820152600160248201526001600160a01b0391821660448201529116925063f45346dc9150606401611786565b6000604051602001614f079061aea4565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401526001838301528151630618f58760e51b81527f2b2add3d0000000000000000000000000000000000000000000000000000000060048201529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163c31eb0e091602480830192600092919082900301818387803b158015614fd157600080fd5b505af1158015614fe5573d6000803e3d6000fd5b505060255460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa791506024016140ed565b6040516001906000906150429060200161aea4565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401526001838301528151630618f58760e51b81527f82d5d76a0000000000000000000000000000000000000000000000000000000060048201529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163c31eb0e091602480830192600092919082900301818387803b15801561510c57600080fd5b505af1158015615120573d6000803e3d6000fd5b505060275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b15801561517d57600080fd5b505af1158015615191573d6000803e3d6000fd5b50506020546027546040517f21501a950000000000000000000000000000000000000000000000000000000081526001600160a01b0392831694506321501a959350612b699286928992911690889060040161b14d565b60006040516020016151f99061aea4565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401819052600184840152825163ca669fa760e01b815260048101919091529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163ca669fa791602480830192600092919082900301818387803b1580156152a757600080fd5b505af11580156152bb573d6000803e3d6000fd5b5050604051630618f58760e51b81527f5d67094f000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b15801561532b57600080fd5b505af115801561533f573d6000803e3d6000fd5b50506020546021546024546040517f309f50040000000000000000000000000000000000000000000000000000000081526001600160a01b03938416955063309f50049450610831938793811692600092911690899060040161af92565b6060601c805480602002602001604051908101604052809291908181526020016000905b828210156129a55760008481526020908190206040805180820182526002860290920180546001600160a01b0316835260018101805483518187028101870190945280845293949193858301939283018282801561548057602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168152602001906004019060208260030104928301926001038202915080841161542d5790505b505050505081525050815260200190600101906153c1565b60606019805480602002602001604051908101604052809291908181526020016000905b828210156129a55783829060005260206000200180546154db9061b1dc565b80601f01602080910402602001604051908101604052809291908181526020018280546155079061b1dc565b80156155545780601f1061552957610100808354040283529160200191615554565b820191906000526020600020905b81548152906001019060200180831161553757829003601f168201915b5050505050815260200190600101906154bc565b60006040516020016155799061aea4565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401526001838301528151630618f58760e51b81527f82d5d76a0000000000000000000000000000000000000000000000000000000060048201529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163c31eb0e091602480830192600092919082900301818387803b15801561564357600080fd5b505af1158015615657573d6000803e3d6000fd5b505060275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b1580156156b457600080fd5b505af11580156156c8573d6000803e3d6000fd5b50506020546021546027546040517f5af659670000000000000000000000000000000000000000000000000000000081526001600160a01b039384169550635af659679450610831938793811692600192911690899060040161af92565b60085460009060ff161561573e575060085460ff1690565b6040517f667f9d70000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d600482018190527f6661696c65640000000000000000000000000000000000000000000000000000602483015260009163667f9d7090604401602060405180830381865afa1580156157cf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906157f3919061b121565b1415905090565b600060405160200161580b9061aea4565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401526001838301528151630618f58760e51b81527f2b2add3d0000000000000000000000000000000000000000000000000000000060048201529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163c31eb0e091602480830192600092919082900301818387803b1580156158d557600080fd5b505af11580156158e9573d6000803e3d6000fd5b505060255460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b15801561594657600080fd5b505af115801561595a573d6000803e3d6000fd5b50506020546021546024546040517fc39aca370000000000000000000000000000000000000000000000000000000081526001600160a01b03938416955063c39aca379450610831938793811692600192911690899060040161af92565b60006040516020016159c99061aea4565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401819052600184840152825163ca669fa760e01b815260048101919091529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163ca669fa791602480830192600092919082900301818387803b158015615a7757600080fd5b505af1158015615a8b573d6000803e3d6000fd5b5050604051630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b158015615afb57600080fd5b505af1158015615b0f573d6000803e3d6000fd5b50506020546021546040517f309f50040000000000000000000000000000000000000000000000000000000081526001600160a01b03928316945063309f500493506108319286921690600190600090899060040161af92565b6000604051602001615b7a9061aea4565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401526001838301528151630618f58760e51b81527f2b2add3d0000000000000000000000000000000000000000000000000000000060048201529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163c31eb0e091602480830192600092919082900301818387803b158015615c4457600080fd5b505af1158015615c58573d6000803e3d6000fd5b505060255460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa791506024016107a5565b6000604051602001615cb19061aea4565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401526001838301528151630618f58760e51b81527f82d5d76a0000000000000000000000000000000000000000000000000000000060048201529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163c31eb0e091602480830192600092919082900301818387803b158015615d7b57600080fd5b505af1158015615d8f573d6000803e3d6000fd5b505060275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b158015615dec57600080fd5b505af1158015615e00573d6000803e3d6000fd5b50506020546021546027546040517fc39aca370000000000000000000000000000000000000000000000000000000081526001600160a01b03938416955063c39aca379450610831938793811692600192911690899060040161af92565b6000604051602001615e6f9061aea4565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401819052600184840152825163ca669fa760e01b815260048101919091529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163ca669fa791602480830192600092919082900301818387803b158015615f1d57600080fd5b505af1158015615f31573d6000803e3d6000fd5b5050604051630618f58760e51b81527f5d67094f000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b158015615fa157600080fd5b505af1158015615fb5573d6000803e3d6000fd5b50506020546021546024546040517fbcf7f32b0000000000000000000000000000000000000000000000000000000081526001600160a01b03938416955063bcf7f32b9450610831938793811692600092911690899060040161af92565b60006040516020016160249061aea4565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401526001838301528151630618f58760e51b81527f82d5d76a0000000000000000000000000000000000000000000000000000000060048201529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163c31eb0e091602480830192600092919082900301818387803b1580156160ee57600080fd5b505af1158015616102573d6000803e3d6000fd5b505060275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b15801561615f57600080fd5b505af1158015616173573d6000803e3d6000fd5b50506020546021546040517fc39aca370000000000000000000000000000000000000000000000000000000081526001600160a01b03928316945063c39aca37935061083192869216906001908690899060040161af92565b60606015805480602002602001604051908101604052809291908181526020018280548015612397576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311612379575050505050905090565b600060405160200161623d9061aea4565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401819052600184840152825163ca669fa760e01b815260048101919091529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163ca669fa791602480830192600092919082900301818387803b1580156162eb57600080fd5b505af11580156162ff573d6000803e3d6000fd5b5050604051630618f58760e51b81527f5d67094f000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b15801561636f57600080fd5b505af1158015616383573d6000803e3d6000fd5b50506020546021546024546040517f5af659670000000000000000000000000000000000000000000000000000000081526001600160a01b039384169550635af659679450610831938793811692600092911690899060040161af92565b60006040516020016163f29061aea4565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401819052600184840152825163ca669fa760e01b815260048101919091529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163ca669fa791602480830192600092919082900301818387803b1580156164a057600080fd5b505af11580156164b4573d6000803e3d6000fd5b5050604051630618f58760e51b81527f19c08f49000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b15801561652457600080fd5b505af1158015616538573d6000803e3d6000fd5b50506020546021546040517f21501a950000000000000000000000000000000000000000000000000000000081526001600160a01b0392831694506321501a959350610831928692600092911690889060040161b14d565b60006040516020016165a19061aea4565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401819052600184840152825163ca669fa760e01b815260048101919091529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163ca669fa791602480830192600092919082900301818387803b15801561664f57600080fd5b505af1158015616663573d6000803e3d6000fd5b5050604051630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b1580156166d357600080fd5b505af11580156166e7573d6000803e3d6000fd5b50506020546021546040517fc39aca370000000000000000000000000000000000000000000000000000000081526001600160a01b03928316945063c39aca3793506108319286921690600190600090899060040161af92565b60006040516020016167529061aea4565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401819052600184840152825163ca669fa760e01b815260048101919091529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163ca669fa791602480830192600092919082900301818387803b15801561680057600080fd5b505af1158015616814573d6000803e3d6000fd5b5050604051630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b15801561688457600080fd5b505af1158015616898573d6000803e3d6000fd5b50506020546024546040517fc39aca370000000000000000000000000000000000000000000000000000000081526001600160a01b03928316945063c39aca37935061083192869260009260019290911690899060040161af92565b60006168fe61aa3d565b616909848483616992565b9150505b92915050565b6040517f98296c540000000000000000000000000000000000000000000000000000000081526004810183905260248101829052737109709ecfa91a80626ff3989d68f67f5b1dd12d906398296c549060440160006040518083038186803b15801561697e57600080fd5b505afa15801561085f573d6000803e3d6000fd5b60008061699f8584616a0d565b9050616a026040518060400160405280601d81526020017f4552433139363750726f78792e736f6c3a4552433139363750726f787900000081525082866040516020016169ed92919061b229565b60405160208183030381529060405285616a19565b9150505b9392505050565b6000616a068383616a47565b60c08101515160009015616a3d57616a3684848460c00151616a62565b9050616a06565b616a368484616c08565b6000616a538383616cf3565b616a0683836020015184616a19565b600080616a6d616d03565b90506000616a7b8683616dd6565b90506000616a92826060015183602001518561727c565b90506000616aa28383898961748e565b90506000616aaf8261830b565b602081015181519192509060030b15616b2257898260400151604051602001616ad992919061b24b565b60408051601f19818403018152908290527f08c379a0000000000000000000000000000000000000000000000000000000008252616b199160040161b13a565b60405180910390fd5b6000616b656040518060400160405280601581526020017f4465706c6f79656420746f20616464726573733a2000000000000000000000008152508360016184da565b6040517fc6ce059d000000000000000000000000000000000000000000000000000000008152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c6ce059d90616bb890849060040161b13a565b602060405180830381865afa158015616bd5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190616bf9919061afe7565b9b9a5050505050505050505050565b6040517f8d1cc9250000000000000000000000000000000000000000000000000000000081526000908190737109709ecfa91a80626ff3989d68f67f5b1dd12d90638d1cc92590616c5d90879060040161b13a565b600060405180830381865afa158015616c7a573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052616ca2919081019061b3b4565b90506000616cd08285604051602001616cbc92919061b3e9565b6040516020818303038152906040526186da565b90506001600160a01b038116616909578484604051602001616ad992919061b418565b616cff828260006186ed565b5050565b604080518082018252600381527f6f75740000000000000000000000000000000000000000000000000000000000602082015290517fd145736c000000000000000000000000000000000000000000000000000000008152606091737109709ecfa91a80626ff3989d68f67f5b1dd12d91829063d145736c90616d8a90849060040161b4c3565b600060405180830381865afa158015616da7573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052616dcf919081019061b50a565b9250505090565b616e086040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b6000737109709ecfa91a80626ff3989d68f67f5b1dd12d9050616e536040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b616e5c856187f0565b60208201526000616e6c86618bd5565b90506000836001600160a01b031663d930a0e66040518163ffffffff1660e01b8152600401600060405180830381865afa158015616eae573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052616ed6919081019061b50a565b86838560200151604051602001616ef0949392919061b553565b60408051601f19818403018152908290527f60f9bb1100000000000000000000000000000000000000000000000000000000825291506000906001600160a01b038616906360f9bb1190616f4890859060040161b13a565b600060405180830381865afa158015616f65573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052616f8d919081019061b50a565b6040517fdb4235f60000000000000000000000000000000000000000000000000000000081529091506001600160a01b0386169063db4235f690616fd590849060040161b657565b602060405180830381865afa158015616ff2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190617016919061b0ff565b61702b5781604051602001616ad9919061b6a9565b6040517f49c4fac80000000000000000000000000000000000000000000000000000000081526001600160a01b038616906349c4fac89061707090849060040161b73b565b600060405180830381865afa15801561708d573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526170b5919081019061b50a565b84526040517fdb4235f60000000000000000000000000000000000000000000000000000000081526001600160a01b0386169063db4235f6906170fc90849060040161b78d565b602060405180830381865afa158015617119573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061713d919061b0ff565b156171d2576040517f49c4fac80000000000000000000000000000000000000000000000000000000081526001600160a01b038616906349c4fac89061718790849060040161b78d565b600060405180830381865afa1580156171a4573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526171cc919081019061b50a565b60408501525b846001600160a01b03166349c4fac88286600001516040516020016171f7919061b7df565b6040516020818303038152906040526040518363ffffffff1660e01b815260040161722392919061b84b565b600060405180830381865afa158015617240573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052617268919081019061b50a565b606085015250608083015250949350505050565b60408051600480825260a0820190925260609160009190816020015b60608152602001906001900390816172985790505090506040518060400160405280600481526020017f6772657000000000000000000000000000000000000000000000000000000000815250816000815181106172f8576172f861b870565b60200260200101819052506040518060400160405280600381526020017f2d726c00000000000000000000000000000000000000000000000000000000008152508160018151811061734c5761734c61b870565b602002602001018190525084604051602001617368919061b89f565b6040516020818303038152906040528160028151811061738a5761738a61b870565b6020026020010181905250826040516020016173a6919061b90b565b604051602081830303815290604052816003815181106173c8576173c861b870565b602002602001018190525060006173de8261830b565b602080820151604080518082018252600581527f2e6a736f6e000000000000000000000000000000000000000000000000000000818501908152825180840184526000808252908601528251808401909352905182529281019290925291925061746f9060408051808201825260008082526020918201528151808301909252845182528085019082015290618e58565b6174845785604051602001616ad9919061b94c565b9695505050505050565b60a0810151604080518082018252600080825260209182015281518083019092528251808352928101910152606090737109709ecfa91a80626ff3989d68f67f5b1dd12d90156174de565b511590565b6176525782602001511561759a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605860248201527f54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f742060448201527f62652075736564207768656e207468652060736b6970566572696679536f757260648201527f6365436f646560206f7074696f6e206973206074727565600000000000000000608482015260a401616b19565b8260c0015115617652576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605360248201527f54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f742060448201527f62652075736564207768656e207468652060736b69704c6963656e736554797060648201527f6560206f7074696f6e2069732060747275656000000000000000000000000000608482015260a401616b19565b6040805160ff8082526120008201909252600091816020015b606081526020019060019003908161766b57905050905060006040518060400160405280600381526020017f6e707800000000000000000000000000000000000000000000000000000000008152508282806176c69061b9dd565b935060ff16815181106176db576176db61b870565b60200260200101819052506040518060400160405280600d81526020017f302e302e312d616c7068612e370000000000000000000000000000000000000081525060405160200161772c919061b9fc565b6040516020818303038152906040528282806177479061b9dd565b935060ff168151811061775c5761775c61b870565b60200260200101819052506040518060400160405280600681526020017f6465706c6f7900000000000000000000000000000000000000000000000000008152508282806177a99061b9dd565b935060ff16815181106177be576177be61b870565b60200260200101819052506040518060400160405280600e81526020017f2d2d636f6e74726163744e616d6500000000000000000000000000000000000081525082828061780b9061b9dd565b935060ff16815181106178205761782061b870565b6020026020010181905250876020015182828061783c9061b9dd565b935060ff16815181106178515761785161b870565b60200260200101819052506040518060400160405280600e81526020017f2d2d636f6e74726163745061746800000000000000000000000000000000000081525082828061789e9061b9dd565b935060ff16815181106178b3576178b361b870565b6020908102919091010152875182826178cb8161b9dd565b935060ff16815181106178e0576178e061b870565b60200260200101819052506040518060400160405280600981526020017f2d2d636861696e4964000000000000000000000000000000000000000000000081525082828061792d9061b9dd565b935060ff16815181106179425761794261b870565b602002602001018190525061795646618eb9565b82826179618161b9dd565b935060ff16815181106179765761797661b870565b60200260200101819052506040518060400160405280600f81526020017f2d2d6275696c64496e666f46696c6500000000000000000000000000000000008152508282806179c39061b9dd565b935060ff16815181106179d8576179d861b870565b6020026020010181905250868282806179f09061b9dd565b935060ff1681518110617a0557617a0561b870565b6020908102919091010152855115617b2c5760408051808201909152601581527f2d2d636f6e7374727563746f7242797465636f6465000000000000000000000060208201528282617a568161b9dd565b935060ff1681518110617a6b57617a6b61b870565b60209081029190910101526040517f71aad10d0000000000000000000000000000000000000000000000000000000081526001600160a01b038416906371aad10d90617abb90899060040161b13a565b600060405180830381865afa158015617ad8573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052617b00919081019061b50a565b8282617b0b8161b9dd565b935060ff1681518110617b2057617b2061b870565b60200260200101819052505b846020015115617bfc5760408051808201909152601281527f2d2d766572696679536f75726365436f6465000000000000000000000000000060208201528282617b758161b9dd565b935060ff1681518110617b8a57617b8a61b870565b60200260200101819052506040518060400160405280600581526020017f66616c7365000000000000000000000000000000000000000000000000000000815250828280617bd79061b9dd565b935060ff1681518110617bec57617bec61b870565b6020026020010181905250617dc3565b617c346174d98660a0015160408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b617cc75760408051808201909152600d81527f2d2d6c6963656e7365547970650000000000000000000000000000000000000060208201528282617c778161b9dd565b935060ff1681518110617c8c57617c8c61b870565b60200260200101819052508460a00151604051602001617cac919061b89f565b604051602081830303815290604052828280617bd79061b9dd565b8460c00151158015617d0a575060408089015181518083018352600080825260209182015282518084019093528151835290810190820152617d0890511590565b155b15617dc35760408051808201909152600d81527f2d2d6c6963656e7365547970650000000000000000000000000000000000000060208201528282617d4e8161b9dd565b935060ff1681518110617d6357617d6361b870565b6020026020010181905250617d7788618f59565b604051602001617d87919061b89f565b604051602081830303815290604052828280617da29061b9dd565b935060ff1681518110617db757617db761b870565b60200260200101819052505b60408086015181518083018352600080825260209182015282518084019093528151835290810190820152617df790511590565b617e8c5760408051808201909152600b81527f2d2d72656c61796572496400000000000000000000000000000000000000000060208201528282617e3a8161b9dd565b935060ff1681518110617e4f57617e4f61b870565b60200260200101819052508460400151828280617e6b9061b9dd565b935060ff1681518110617e8057617e8061b870565b60200260200101819052505b606085015115617fad5760408051808201909152600681527f2d2d73616c74000000000000000000000000000000000000000000000000000060208201528282617ed58161b9dd565b935060ff1681518110617eea57617eea61b870565b602090810291909101015260608501516040517fb11a19e800000000000000000000000000000000000000000000000000000000815260048101919091526001600160a01b0384169063b11a19e890602401600060405180830381865afa158015617f59573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052617f81919081019061b50a565b8282617f8c8161b9dd565b935060ff1681518110617fa157617fa161b870565b60200260200101819052505b60e085015151156180545760408051808201909152600a81527f2d2d6761734c696d69740000000000000000000000000000000000000000000060208201528282617ff78161b9dd565b935060ff168151811061800c5761800c61b870565b60200260200101819052506180288560e0015160000151618eb9565b82826180338161b9dd565b935060ff16815181106180485761804861b870565b60200260200101819052505b60e085015160200151156180fe5760408051808201909152600a81527f2d2d676173507269636500000000000000000000000000000000000000000000602082015282826180a18161b9dd565b935060ff16815181106180b6576180b661b870565b60200260200101819052506180d28560e0015160200151618eb9565b82826180dd8161b9dd565b935060ff16815181106180f2576180f261b870565b60200260200101819052505b60e085015160400151156181a85760408051808201909152600e81527f2d2d6d61784665655065724761730000000000000000000000000000000000006020820152828261814b8161b9dd565b935060ff16815181106181605761816061b870565b602002602001018190525061817c8560e0015160400151618eb9565b82826181878161b9dd565b935060ff168151811061819c5761819c61b870565b60200260200101819052505b60e085015160600151156182525760408051808201909152601681527f2d2d6d61785072696f7269747946656550657247617300000000000000000000602082015282826181f58161b9dd565b935060ff168151811061820a5761820a61b870565b60200260200101819052506182268560e0015160600151618eb9565b82826182318161b9dd565b935060ff16815181106182465761824661b870565b60200260200101819052505b60008160ff1667ffffffffffffffff8111156182705761827061b2cc565b6040519080825280602002602001820160405280156182a357816020015b606081526020019060019003908161828e5790505b50905060005b8260ff168160ff1610156182fc57838160ff16815181106182cc576182cc61b870565b6020026020010151828260ff16815181106182e9576182e961b870565b60209081029190910101526001016182a9565b5093505050505b949350505050565b6183326040518060600160405280600060030b815260200160608152602001606081525090565b60408051808201825260048082527f6261736800000000000000000000000000000000000000000000000000000000602083015291517fd145736c000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d92600091849163d145736c916183b89186910161ba67565b600060405180830381865afa1580156183d5573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526183fd919081019061b50a565b9050600061840b8683619a48565b90506000846001600160a01b031663f45c1ce7836040518263ffffffff1660e01b815260040161843b919061ad96565b6000604051808303816000875af115801561845a573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052618482919081019061baae565b805190915060030b1580159061849b5750602081015151155b80156184aa5750604081015151155b1561748457816000815181106184c2576184c261b870565b6020026020010151604051602001616ad9919061bb64565b6060600061850f8560408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6040805180820182526000808252602091820152815180830190925286518252808701908201529091506185469082905b90619b9d565b156186a35760006185c3826185bd846185b76185898a60408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6040805180820182526000808252602091820152815180830190925282518252918201519181019190915290565b90619bc4565b90619c26565b604080518082018252600181527f0a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152909150618627908290619b9d565b1561869157604080518082018252600181527f0a000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261868e905b8290619cab565b90505b61869a81619cd1565b92505050616a06565b82156186bc578484604051602001616ad992919061bd50565b5050604080516020810190915260008152616a06565b509392505050565b6000808251602084016000f09392505050565b8160a00151156186fc57505050565b6000618709848484619d3a565b905060006187168261830b565b602081015181519192509060030b1580156187b25750604080518082018252600781527f5355434345535300000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526187b290604080518082018252600080825260209182015281518083019092528451825280850190820152618540565b156187bf57505050505050565b604082015151156187df578160400151604051602001616ad9919061bdf7565b80604051602001616ad9919061be55565b606060006188258360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600481527f2e736f6c000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015290915061888a905b8290618e58565b156188f957604080518082018252600481527f2e736f6c0000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616a06906188f490839061a2d5565b619cd1565b604080518082018252600181527f3a000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261895b905b829061a35f565b600103618a2857604080518082018252600181527f3a00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526189c190618687565b50604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616a06906188f4905b8390619cab565b604080518082018252600581527f2e6a736f6e00000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152618a8790618883565b15618bbe57604080518082018252600181527f2f00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820181905284518086019095529251845283015290618aef90839061a3f9565b905060008160018351618b02919061b1b6565b81518110618b1257618b1261b870565b60200260200101519050618bb56188f4618b886040518060400160405280600581526020017f2e6a736f6e00000000000000000000000000000000000000000000000000000081525060408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6040805180820182526000808252602091820152815180830190925285518252808601908201529061a2d5565b95945050505050565b82604051602001616ad9919061bec0565b50919050565b60606000618c0a8360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600481527f2e736f6c0000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152909150618c6c90618883565b15618c7a57616a0681619cd1565b604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152618cd990618954565b600103618d4357604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616a06906188f490618a21565b604080518082018252600581527f2e6a736f6e00000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152618da290618883565b15618bbe57604080518082018252600181527f2f00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820181905284518086019095529251845283015290618e0a90839061a3f9565b9050600181511115618e46578060028251618e25919061b1b6565b81518110618e3557618e3561b870565b602002602001015192505050919050565b5082604051602001616ad9919061bec0565b805182516000911115618e6d5750600061690d565b81518351602085015160009291618e839161b1c9565b618e8d919061b1b6565b905082602001518103618ea457600191505061690d565b82516020840151819020912014905092915050565b60606000618ec68361a49e565b600101905060008167ffffffffffffffff811115618ee657618ee661b2cc565b6040519080825280601f01601f191660200182016040528015618f10576020820181803683370190505b5090508181016020015b600019017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a8504945084618f1a57509392505050565b604081810151815180830183526000808252602091820181905283518085018552835181529282018383015283518085018552600a81527f554e4c4943454e5345440000000000000000000000000000000000000000000081840190815285518087018752838152840192909252845180860190955251845290830152606091618fe5905b829061a580565b1561902557505060408051808201909152600481527f4e6f6e65000000000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600981527f556e6c6963656e736500000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261908490618fde565b156190c457505060408051808201909152600981527f556e6c6963656e736500000000000000000000000000000000000000000000006020820152919050565b604080518082018252600381527f4d495400000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261912390618fde565b1561916357505060408051808201909152600381527f4d495400000000000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f47504c2d322e302d6f6e6c790000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526191c290618fde565b806192275750604080518082018252601081527f47504c2d322e302d6f722d6c61746572000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261922790618fde565b1561926757505060408051808201909152600981527f474e552047504c763200000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f47504c2d332e302d6f6e6c790000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526192c690618fde565b8061932b5750604080518082018252601081527f47504c2d332e302d6f722d6c61746572000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261932b90618fde565b1561936b57505060408051808201909152600981527f474e552047504c763300000000000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4c47504c2d322e312d6f6e6c7900000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526193ca90618fde565b8061942f5750604080518082018252601181527f4c47504c2d322e312d6f722d6c617465720000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261942f90618fde565b1561946f57505060408051808201909152600c81527f474e55204c47504c76322e3100000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4c47504c2d332e302d6f6e6c7900000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526194ce90618fde565b806195335750604080518082018252601181527f4c47504c2d332e302d6f722d6c617465720000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261953390618fde565b1561957357505060408051808201909152600a81527f474e55204c47504c7633000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f4253442d322d436c617573650000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526195d290618fde565b1561961257505060408051808201909152600c81527f4253442d322d436c6175736500000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f4253442d332d436c6175736500000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261967190618fde565b156196b157505060408051808201909152600c81527f4253442d332d436c6175736500000000000000000000000000000000000000006020820152919050565b604080518082018252600781527f4d504c2d322e30000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261971090618fde565b1561975057505060408051808201909152600781527f4d504c2d322e30000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600781527f4f534c2d332e3000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526197af90618fde565b156197ef57505060408051808201909152600781527f4f534c2d332e30000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600a81527f4170616368652d322e30000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261984e90618fde565b1561988e57505060408051808201909152600a81527f4170616368652d322e30000000000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4147504c2d332e302d6f6e6c7900000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526198ed90618fde565b806199525750604080518082018252601181527f4147504c2d332e302d6f722d6c617465720000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261995290618fde565b1561999257505060408051808201909152600a81527f474e55204147504c7633000000000000000000000000000000000000000000006020820152919050565b604080518082018252600881527f4255534c2d312e31000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526199f190618fde565b15619a3157505060408051808201909152600781527f42534c20312e31000000000000000000000000000000000000000000000000006020820152919050565b60408084015184519151616ad9929060200161bf9e565b60608060005b8451811015619ad35781858281518110619a6a57619a6a61b870565b6020026020010151604051602001619a8392919061b3e9565b604051602081830303815290604052915060018551619aa2919061b1b6565b8114619acb5781604051602001619ab9919061c107565b60405160208183030381529060405291505b600101619a4e565b5060408051600380825260808201909252600091816020015b6060815260200190600190039081619aec5790505090508381600081518110619b1757619b1761b870565b60200260200101819052506040518060400160405280600281526020017f2d6300000000000000000000000000000000000000000000000000000000000081525081600181518110619b6b57619b6b61b870565b60200260200101819052508181600281518110619b8a57619b8a61b870565b6020908102919091010152949350505050565b6020808301518351835192840151600093619bbb929184919061a594565b14159392505050565b60408051808201909152600080825260208201526000619bf6846000015185602001518560000151866020015161a6a5565b9050836020015181619c08919061b1b6565b84518590619c1790839061b1b6565b90525060208401525090919050565b6040805180820190915260008082526020820152815183511015619c4b57508161690d565b6020808301519084015160019114619c725750815160208481015190840151829020919020145b8015619ca357825184518590619c8990839061b1b6565b9052508251602085018051619c9f90839061b1c9565b9052505b509192915050565b6040805180820190915260008082526020820152619cca83838361a7c5565b5092915050565b60606000826000015167ffffffffffffffff811115619cf257619cf261b2cc565b6040519080825280601f01601f191660200182016040528015619d1c576020820181803683370190505b5090506000602082019050619cca818560200151866000015161a870565b60606000619d46616d03565b6040805160ff808252612000820190925291925060009190816020015b6060815260200190600190039081619d6357905050905060006040518060400160405280600381526020017f6e70780000000000000000000000000000000000000000000000000000000000815250828280619dbe9061b9dd565b935060ff1681518110619dd357619dd361b870565b60200260200101819052506040518060400160405280600781526020017f5e312e33322e3300000000000000000000000000000000000000000000000000815250604051602001619e24919061c148565b604051602081830303815290604052828280619e3f9061b9dd565b935060ff1681518110619e5457619e5461b870565b60200260200101819052506040518060400160405280600881526020017f76616c6964617465000000000000000000000000000000000000000000000000815250828280619ea19061b9dd565b935060ff1681518110619eb657619eb661b870565b602002602001018190525082604051602001619ed2919061b90b565b604051602081830303815290604052828280619eed9061b9dd565b935060ff1681518110619f0257619f0261b870565b60200260200101819052506040518060400160405280600a81526020017f2d2d636f6e747261637400000000000000000000000000000000000000000000815250828280619f4f9061b9dd565b935060ff1681518110619f6457619f6461b870565b6020026020010181905250619f79878461a8ea565b8282619f848161b9dd565b935060ff1681518110619f9957619f9961b870565b60209081029190910101528551511561a0455760408051808201909152600b81527f2d2d7265666572656e636500000000000000000000000000000000000000000060208201528282619feb8161b9dd565b935060ff168151811061a0005761a00061b870565b602002602001018190525061a01986600001518461a8ea565b828261a0248161b9dd565b935060ff168151811061a0395761a03961b870565b60200260200101819052505b85608001511561a0b35760408051808201909152601881527f2d2d756e73616665536b697053746f72616765436865636b00000000000000006020820152828261a08e8161b9dd565b935060ff168151811061a0a35761a0a361b870565b602002602001018190525061a119565b841561a1195760408051808201909152601281527f2d2d726571756972655265666572656e636500000000000000000000000000006020820152828261a0f88161b9dd565b935060ff168151811061a10d5761a10d61b870565b60200260200101819052505b6040860151511561a1b55760408051808201909152600d81527f2d2d756e73616665416c6c6f77000000000000000000000000000000000000006020820152828261a1638161b9dd565b935060ff168151811061a1785761a17861b870565b6020026020010181905250856040015182828061a1949061b9dd565b935060ff168151811061a1a95761a1a961b870565b60200260200101819052505b85606001511561a21f5760408051808201909152601481527f2d2d756e73616665416c6c6f7752656e616d65730000000000000000000000006020820152828261a1fe8161b9dd565b935060ff168151811061a2135761a21361b870565b60200260200101819052505b60008160ff1667ffffffffffffffff81111561a23d5761a23d61b2cc565b60405190808252806020026020018201604052801561a27057816020015b606081526020019060019003908161a25b5790505b50905060005b8260ff168160ff16101561a2c957838160ff168151811061a2995761a29961b870565b6020026020010151828260ff168151811061a2b65761a2b661b870565b602090810291909101015260010161a276565b50979650505050505050565b604080518082019091526000808252602082015281518351101561a2fa57508161690d565b8151835160208501516000929161a3109161b1c9565b61a31a919061b1b6565b6020840151909150600190821461a33b575082516020840151819020908220145b801561a3565783518551869061a35290839061b1b6565b9052505b50929392505050565b600080826000015161a383856000015186602001518660000151876020015161a6a5565b61a38d919061b1c9565b90505b8351602085015161a3a1919061b1c9565b8111619cca578161a3b18161c18d565b925050826000015161a3e885602001518361a3cc919061b1b6565b865161a3d8919061b1b6565b838660000151876020015161a6a5565b61a3f2919061b1c9565b905061a390565b6060600061a407848461a35f565b61a41290600161b1c9565b67ffffffffffffffff81111561a42a5761a42a61b2cc565b60405190808252806020026020018201604052801561a45d57816020015b606081526020019060019003908161a4485790505b50905060005b81518110156186d25761a4796188f48686619cab565b82828151811061a48b5761a48b61b870565b602090810291909101015260010161a463565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000831061a4e7577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef8100000000831061a513576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc10000831061a53157662386f26fc10000830492506010015b6305f5e100831061a549576305f5e100830492506008015b612710831061a55d57612710830492506004015b6064831061a56f576064830492506002015b600a831061690d5760010192915050565b600061a58c838361a92a565b159392505050565b60008085841161a69b576020841161a647576000841561a5df57600161a5bb86602061b1b6565b61a5c690600861c1a7565b61a5d190600261c2a5565b61a5db919061b1b6565b1990505b835181168561a5ee898961b1c9565b61a5f8919061b1b6565b805190935082165b81811461a6325787841161a61a5787945050505050618303565b8361a6248161c2b1565b94505082845116905061a600565b61a63c878561b1c9565b945050505050618303565b83832061a654858861b1b6565b61a65e908761b1c9565b91505b85821061a6995784822080820361a6865761a67c868461b1c9565b9350505050618303565b61a69160018461b1b6565b92505061a661565b505b5092949350505050565b6000838186851161a7b0576020851161a75f576000851561a6f157600161a6cd87602061b1b6565b61a6d890600861c1a7565b61a6e390600261c2a5565b61a6ed919061b1b6565b1990505b8451811660008761a7028b8b61b1c9565b61a70c919061b1b6565b855190915083165b82811461a7515781861061a7395761a72c8b8b61b1c9565b9650505050505050618303565b8561a7438161c18d565b96505083865116905061a714565b859650505050505050618303565b508383206000905b61a771868961b1b6565b821161a7ae5785832080820361a78d5783945050505050618303565b61a79860018561b1c9565b935050818061a7a69061c18d565b92505061a767565b505b61a7ba878761b1c9565b979650505050505050565b6040805180820190915260008082526020820152600061a7f7856000015186602001518660000151876020015161a6a5565b60208087018051918601919091525190915061a813908261b1b6565b83528451602086015161a826919061b1c9565b810361a835576000855261a867565b8351835161a843919061b1c9565b8551869061a85290839061b1b6565b905250835161a861908261b1c9565b60208601525b50909392505050565b6020811061a8a8578151835261a88760208461b1c9565b925061a89460208361b1c9565b915061a8a160208261b1b6565b905061a870565b600019811561a8d757600161a8be83602061b1b6565b61a8ca9061010061c2a5565b61a8d4919061b1b6565b90505b9151835183169219169190911790915250565b6060600061a8f88484616dd6565b805160208083015160405193945061a9129390910161c2c8565b60405160208183030381529060405291505092915050565b815181516000919081111561a93d575081515b6020808501519084015160005b8381101561a9f6578251825180821461a9c657600019602087101561a9a55760018461a97789602061b1b6565b61a981919061b1c9565b61a98c90600861c1a7565b61a99790600261c2a5565b61a9a1919061b1b6565b1990505b818116838216818103911461a9c357975061690d9650505050505050565b50505b61a9d160208661b1c9565b945061a9de60208561b1c9565b9350505060208161a9ef919061b1c9565b905061a94a565b5084518651617484919061c320565b610b67806200c34183390190565b61053f806200cea883390190565b61106f806200d3e783390190565b611bb9806200e45683390190565b6040518060e0016040528060608152602001606081526020016060815260200160001515815260200160001515815260200160001515815260200161aa8061aa85565b905290565b6040518061010001604052806000151581526020016000151581526020016060815260200160008019168152602001606081526020016060815260200160001515815260200161aa806040518060800160405280600081526020016000815260200160008152602001600081525090565b602080825282518282018190526000918401906040840190835b8181101561ab375783516001600160a01b031683526020938401939092019160010161ab10565b509095945050505050565b60005b8381101561ab5d57818101518382015260200161ab45565b50506000910152565b6000815180845261ab7e81602086016020860161ab42565b601f01601f19169290920160200192915050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b8281101561ac8e577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452815180516001600160a01b03168652602090810151604082880181905281519088018190529101906060600582901b88018101919088019060005b8181101561ac74577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa08a850301835261ac5e84865161ab66565b602095860195909450929092019160010161ac24565b50919750505060209485019492909201915060010161abba565b50929695505050505050565b600081518084526020840193506020830160005b8281101561acee5781517fffffffff000000000000000000000000000000000000000000000000000000001686526020958601959091019060010161acae565b5093949350505050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b8281101561ac8e577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452815180516040875261ad64604088018261ab66565b905060208201519150868103602088015261ad7f818361ac9a565b96505050602093840193919091019060010161ad20565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b8281101561ac8e577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc087860301845261adf885835161ab66565b9450602093840193919091019060010161adbe565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b8281101561ac8e577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc087860301845281516001600160a01b038151168652602081015190506040602087015261ae8e604087018261ac9a565b955050602093840193919091019060010161ae35565b60208152600061690d60208301600581527f68656c6c6f000000000000000000000000000000000000000000000000000000602082015260400190565b60a08152600061aef460a083018761ab66565b6001600160a01b03861660208401528460408401526001600160a01b0384166060840152828103608084015261a7ba81600581527f68656c6c6f000000000000000000000000000000000000000000000000000000602082015260400190565b600081516060845261af69606085018261ab66565b90506001600160a01b036020840151166020850152604083015160408501528091505092915050565b60a08152600061afa560a083018861af54565b6001600160a01b03871660208401528560408401526001600160a01b0385166060840152828103608084015261afdb818561ab66565b98975050505050505050565b60006020828403121561aff957600080fd5b81516001600160a01b0381168114616a0657600080fd5b610100815260056101008201527f544f4b454e000000000000000000000000000000000000000000000000000000610120820152610140602082015260036101408201527f544b4e000000000000000000000000000000000000000000000000000000000061016082015260006101808201905060ff881660408301528660608301526003861061b0ca577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b8560808301528460a083015261b0eb60c08301856001600160a01b03169052565b6001600160a01b03831660e083015261a7ba565b60006020828403121561b11157600080fd5b81518015158114616a0657600080fd5b60006020828403121561b13357600080fd5b5051919050565b602081526000616a06602083018461ab66565b60808152600061b160608083018761af54565b8560208401526001600160a01b0385166040840152828103606084015261a7ba818561ab66565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8181038181111561690d5761690d61b187565b8082018082111561690d5761690d61b187565b600181811c9082168061b1f057607f821691505b602082108103618bcf577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6001600160a01b0383168152604060208201526000618303604083018461ab66565b7f4661696c656420746f206465706c6f7920636f6e74726163742000000000000081526000835161b28381601a85016020880161ab42565b7f3a20000000000000000000000000000000000000000000000000000000000000601a91840191820152835161b2c081601c84016020880161ab42565b01601c01949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040516060810167ffffffffffffffff8111828210171561b31e5761b31e61b2cc565b60405290565b60008067ffffffffffffffff84111561b33f5761b33f61b2cc565b50604051601f19601f85018116603f0116810181811067ffffffffffffffff8211171561b36e5761b36e61b2cc565b60405283815290508082840185101561b38657600080fd5b6186d284602083018561ab42565b600082601f83011261b3a557600080fd5b616a068383516020850161b324565b60006020828403121561b3c657600080fd5b815167ffffffffffffffff81111561b3dd57600080fd5b6169098482850161b394565b6000835161b3fb81846020880161ab42565b83519083019061b40f81836020880161ab42565b01949350505050565b7f4661696c656420746f206465706c6f7920636f6e74726163742000000000000081526000835161b45081601a85016020880161ab42565b7f207573696e6720636f6e7374727563746f722064617461202200000000000000601a91840191820152835161b48d81603384016020880161ab42565b7f220000000000000000000000000000000000000000000000000000000000000060339290910191820152603401949350505050565b60408152600b60408201527f464f554e4452595f4f55540000000000000000000000000000000000000000006060820152608060208201526000616a06608083018461ab66565b60006020828403121561b51c57600080fd5b815167ffffffffffffffff81111561b53357600080fd5b8201601f8101841361b54457600080fd5b6169098482516020840161b324565b6000855161b565818460208a0161ab42565b7f2f00000000000000000000000000000000000000000000000000000000000000908301908152855161b59f816001840160208a0161ab42565b7f2f0000000000000000000000000000000000000000000000000000000000000060019290910191820152845161b5dd81600284016020890161ab42565b6001818301019150507f2f000000000000000000000000000000000000000000000000000000000000006001820152835161b61f81600284016020880161ab42565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600292909101918201526007019695505050505050565b60408152600061b66a604083018461ab66565b8281036020840152600481527f2e6173740000000000000000000000000000000000000000000000000000000060208201526040810191505092915050565b7f436f756c64206e6f742066696e642041535420696e206172746966616374200081526000825161b6e181601f85016020870161ab42565b7f2e205365742060617374203d20747275656020696e20666f756e6472792e746f601f9390910192830152507f6d6c000000000000000000000000000000000000000000000000000000000000603f820152604101919050565b60408152600061b74e604083018461ab66565b8281036020840152601181527f2e6173742e6162736f6c7574655061746800000000000000000000000000000060208201526040810191505092915050565b60408152600061b7a0604083018461ab66565b8281036020840152600c81527f2e6173742e6c6963656e7365000000000000000000000000000000000000000060208201526040810191505092915050565b7f2e6d657461646174612e736f75726365732e5b2700000000000000000000000081526000825161b81781601485016020870161ab42565b7f275d2e6b656363616b32353600000000000000000000000000000000000000006014939091019283015250602001919050565b60408152600061b85e604083018561ab66565b8281036020840152616a02818561ab66565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f220000000000000000000000000000000000000000000000000000000000000081526000825161b8d781600185016020870161ab42565b7f22000000000000000000000000000000000000000000000000000000000000006001939091019283015250600201919050565b6000825161b91d81846020870161ab42565b7f2f6275696c642d696e666f000000000000000000000000000000000000000000920191825250600b01919050565b7f436f756c64206e6f742066696e64206275696c642d696e666f2066696c65207781527f697468206d61746368696e6720736f7572636520636f6465206861736820666f60208201527f7220636f6e74726163742000000000000000000000000000000000000000000060408201526000825161b9d081604b85016020870161ab42565b91909101604b0192915050565b600060ff821660ff810361b9f35761b9f361b187565b60010192915050565b7f406f70656e7a657070656c696e2f646566656e6465722d6465706c6f792d636c81527f69656e742d636c6940000000000000000000000000000000000000000000000060208201526000825161ba5a81602985016020870161ab42565b9190910160290192915050565b60408152601660408201527f4f50454e5a455050454c494e5f424153485f50415448000000000000000000006060820152608060208201526000616a06608083018461ab66565b60006020828403121561bac057600080fd5b815167ffffffffffffffff81111561bad757600080fd5b82016060818503121561bae957600080fd5b61baf161b2fb565b81518060030b811461bb0257600080fd5b8152602082015167ffffffffffffffff81111561bb1e57600080fd5b61bb2a8682850161b394565b602083015250604082015167ffffffffffffffff81111561bb4a57600080fd5b61bb568682850161b394565b604083015250949350505050565b7f4661696c656420746f2072756e206261736820636f6d6d616e6420776974682081527f220000000000000000000000000000000000000000000000000000000000000060208201526000825161bbc281602185016020870161ab42565b7f222e20496620796f7520617265207573696e672057696e646f77732c2073657460219390910192830152507f20746865204f50454e5a455050454c494e5f424153485f5041544820656e766960418201527f726f6e6d656e74207661726961626c6520746f207468652066756c6c7920717560618201527f616c69666965642070617468206f66207468652062617368206578656375746160818201527f626c652e20466f72206578616d706c652c20696620796f75206172652075736960a18201527f6e672047697420666f722057696e646f77732c206164642074686520666f6c6c60c18201527f6f77696e67206c696e6520696e20746865202e656e762066696c65206f66207960e18201527f6f75722070726f6a65637420287573696e6720666f727761726420736c6173686101018201527f6573293a0a4f50454e5a455050454c494e5f424153485f504154483d22433a2f6101218201527f50726f6772616d2046696c65732f4769742f62696e2f6261736822000000000061014182015261015c01919050565b7f4661696c656420746f2066696e64206c696e652077697468207072656669782081527f270000000000000000000000000000000000000000000000000000000000000060208201526000835161bdae81602185016020880161ab42565b7f2720696e206f75747075743a2000000000000000000000000000000000000000602191840191820152835161bdeb81602e84016020880161ab42565b01602e01949350505050565b7f4661696c656420746f2072756e2075706772616465207361666574792076616c81527f69646174696f6e3a20000000000000000000000000000000000000000000000060208201526000825161ba5a81602985016020870161ab42565b7f55706772616465207361666574792076616c69646174696f6e206661696c656481527f3a0a00000000000000000000000000000000000000000000000000000000000060208201526000825161beb381602285016020870161ab42565b9190910160220192915050565b7f436f6e7472616374206e616d652000000000000000000000000000000000000081526000825161bef881600e85016020870161ab42565b7f206d75737420626520696e2074686520666f726d6174204d79436f6e74726163600e9390910192830152507f742e736f6c3a4d79436f6e7472616374206f72204d79436f6e74726163742e73602e8201527f6f6c206f72206f75742f4d79436f6e74726163742e736f6c2f4d79436f6e7472604e8201527f6163742e6a736f6e000000000000000000000000000000000000000000000000606e820152607601919050565b7f53504458206c6963656e7365206964656e74696669657220000000000000000081526000835161bfd681601885016020880161ab42565b7f20696e2000000000000000000000000000000000000000000000000000000000601891840191820152835161c01381601c84016020880161ab42565b7f20646f6573206e6f74206c6f6f6b206c696b65206120737570706f7274656420601c92909101918201527f6c6963656e736520666f7220626c6f636b206578706c6f726572207665726966603c8201527f69636174696f6e2e205573652074686520606c6963656e73655479706560206f605c8201527f7074696f6e20746f20737065636966792061206c6963656e736520747970652c607c8201527f206f7220736574207468652060736b69704c6963656e73655479706560206f70609c8201527f74696f6e20746f2060747275656020746f20736b69702e00000000000000000060bc82015260d301949350505050565b6000825161c11981846020870161ab42565b7f2000000000000000000000000000000000000000000000000000000000000000920191825250600101919050565b7f406f70656e7a657070656c696e2f75706772616465732d636f7265400000000081526000825161c18081601c85016020870161ab42565b91909101601c0192915050565b6000600019820361c1a05761c1a061b187565b5060010190565b808202811582820484141761690d5761690d61b187565b6001815b600184111561c1f95780850481111561c1dd5761c1dd61b187565b600184161561c1eb57908102905b60019390931c92800261c1c2565b935093915050565b60008261c2105750600161690d565b8161c21d5750600061690d565b816001811461c233576002811461c23d5761c259565b600191505061690d565b60ff84111561c24e5761c24e61b187565b50506001821b61690d565b5060208310610133831016604e8410600b841016171561c27c575081810a61690d565b61c289600019848461c1be565b806000190482111561c29d5761c29d61b187565b029392505050565b6000616a06838361c201565b60008161c2c05761c2c061b187565b506000190190565b6000835161c2da81846020880161ab42565b7f3a00000000000000000000000000000000000000000000000000000000000000908301908152835161c31481600184016020880161ab42565b01600101949350505050565b8181036000831280158383131683831282161715619cca57619cca61b18756fe60c0604052600d60809081526c2bb930b83832b21022ba3432b960991b60a05260009061002c9082610114565b506040805180820190915260048152630ae8aa8960e31b60208201526001906100559082610114565b506002805460ff1916601217905534801561006f57600080fd5b506101d2565b634e487b7160e01b600052604160045260246000fd5b600181811c9082168061009f57607f821691505b6020821081036100bf57634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111561010f57806000526020600020601f840160051c810160208510156100ec5750805b601f840160051c820191505b8181101561010c57600081556001016100f8565b50505b505050565b81516001600160401b0381111561012d5761012d610075565b6101418161013b845461008b565b846100c5565b6020601f821160018114610175576000831561015d5750848201515b600019600385901b1c1916600184901b17845561010c565b600084815260208120601f198516915b828110156101a55787850151825560209485019460019092019101610185565b50848210156101c35786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b610986806101e16000396000f3fe6080604052600436106100c05760003560e01c8063313ce56711610074578063a9059cbb1161004e578063a9059cbb146101fa578063d0e30db01461021a578063dd62ed3e1461022257600080fd5b8063313ce5671461018c57806370a08231146101b857806395d89b41146101e557600080fd5b806318160ddd116100a557806318160ddd1461012f57806323b872dd1461014c5780632e1a7d4d1461016c57600080fd5b806306fdde03146100d4578063095ea7b3146100ff57600080fd5b366100cf576100cd61025a565b005b600080fd5b3480156100e057600080fd5b506100e96102b5565b6040516100f69190610745565b60405180910390f35b34801561010b57600080fd5b5061011f61011a3660046107da565b610343565b60405190151581526020016100f6565b34801561013b57600080fd5b50475b6040519081526020016100f6565b34801561015857600080fd5b5061011f610167366004610804565b6103bd565b34801561017857600080fd5b506100cd610187366004610841565b610647565b34801561019857600080fd5b506002546101a69060ff1681565b60405160ff90911681526020016100f6565b3480156101c457600080fd5b5061013e6101d336600461085a565b60036020526000908152604090205481565b3480156101f157600080fd5b506100e9610724565b34801561020657600080fd5b5061011f6102153660046107da565b610731565b6100cd61025a565b34801561022e57600080fd5b5061013e61023d366004610875565b600460209081526000928352604080842090915290825290205481565b33600090815260036020526040812080543492906102799084906108d7565b909155505060405134815233907fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c9060200160405180910390a2565b600080546102c2906108ea565b80601f01602080910402602001604051908101604052809291908181526020018280546102ee906108ea565b801561033b5780601f106103105761010080835404028352916020019161033b565b820191906000526020600020905b81548152906001019060200180831161031e57829003601f168201915b505050505081565b33600081815260046020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925906103ab9086815260200190565b60405180910390a35060015b92915050565b73ffffffffffffffffffffffffffffffffffffffff831660009081526003602052604081205482111561042b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600060248201526044015b60405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff841633148015906104a1575073ffffffffffffffffffffffffffffffffffffffff841660009081526004602090815260408083203384529091529020547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff14155b156105605773ffffffffffffffffffffffffffffffffffffffff8416600090815260046020908152604080832033845290915290205482111561051a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526020600482015260006024820152604401610422565b73ffffffffffffffffffffffffffffffffffffffff841660009081526004602090815260408083203384529091528120805484929061055a90849061093d565b90915550505b73ffffffffffffffffffffffffffffffffffffffff84166000908152600360205260408120805484929061059590849061093d565b909155505073ffffffffffffffffffffffffffffffffffffffff8316600090815260036020526040812080548492906105cf9084906108d7565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161063591815260200190565b60405180910390a35060019392505050565b3360009081526003602052604090205481111561069a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526020600482015260006024820152604401610422565b33600090815260036020526040812080548392906106b990849061093d565b9091555050604051339082156108fc029083906000818181858888f193505050501580156106eb573d6000803e3d6000fd5b5060405181815233907f7fcf532c15f0a6db0bd6d0e038bea71d30d808c7d98cb3bf7268a95bf5081b659060200160405180910390a250565b600180546102c2906108ea565b600061073e3384846103bd565b9392505050565b602081526000825180602084015260005b818110156107735760208186018101516040868401015201610756565b5060006040828501015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011684010191505092915050565b803573ffffffffffffffffffffffffffffffffffffffff811681146107d557600080fd5b919050565b600080604083850312156107ed57600080fd5b6107f6836107b1565b946020939093013593505050565b60008060006060848603121561081957600080fd5b610822846107b1565b9250610830602085016107b1565b929592945050506040919091013590565b60006020828403121561085357600080fd5b5035919050565b60006020828403121561086c57600080fd5b61073e826107b1565b6000806040838503121561088857600080fd5b610891836107b1565b915061089f602084016107b1565b90509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b808201808211156103b7576103b76108a8565b600181811c908216806108fe57607f821691505b602082108103610937577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b818103818111156103b7576103b76108a856fea264697066735822122008d7fc4e09519c5dd9f356b03596f6829a151d0bc7682533f9ceab4e459f5ee264736f6c634300081a00336080604052348015600f57600080fd5b506105208061001f6000396000f3fe60806040526004361061002a5760003560e01c806369582bee14610033578063de43156e1461005357005b3661003157005b005b34801561003f57600080fd5b5061003161004e3660046101ba565b610073565b34801561005f57600080fd5b5061003161006e3660046101ba565b6100ee565b6060811561008a5761008782840184610273565b90505b7ffdc887992b033668833927e252058e468fac0b6bd196d520f09c61b740e999486100b58780610369565b6100c560408a0160208b016103ce565b896040013533866040516100de969594939291906103f0565b60405180910390a1505050505050565b606081156101055761010282840184610273565b90505b7fcdc8ee677dc5ebe680fb18cebda5e26ba5ea1f0ba504a47e2a9a2ecb476dc98e6100b58780610369565b60006060828403121561014257600080fd5b50919050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461016c57600080fd5b919050565b60008083601f84011261018357600080fd5b50813567ffffffffffffffff81111561019b57600080fd5b6020830191508360208285010111156101b357600080fd5b9250929050565b6000806000806000608086880312156101d257600080fd5b853567ffffffffffffffff8111156101e957600080fd5b6101f588828901610130565b95505061020460208701610148565b935060408601359250606086013567ffffffffffffffff81111561022757600080fd5b61023388828901610171565b969995985093965092949392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60006020828403121561028557600080fd5b813567ffffffffffffffff81111561029c57600080fd5b8201601f810184136102ad57600080fd5b803567ffffffffffffffff8111156102c7576102c7610244565b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8501160116810181811067ffffffffffffffff8211171561033357610333610244565b60405281815282820160200186101561034b57600080fd5b81602084016020830137600091810160200191909152949350505050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261039e57600080fd5b83018035915067ffffffffffffffff8211156103b957600080fd5b6020019150368190038213156101b357600080fd5b6000602082840312156103e057600080fd5b6103e982610148565b9392505050565b60a081528560a0820152858760c0830137600060c0878301015260007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f880116820173ffffffffffffffffffffffffffffffffffffffff8716602084015285604084015273ffffffffffffffffffffffffffffffffffffffff8516606084015260c083820301608084015283518060c083015260005b818110156104a557602081870181015184830160e0015201610488565b50600060e0838301810191909152601f9091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016909101019897505050505050505056fea2646970667358221220b5ac4aa023957e7bc2aaba2c22840cdbf052fb679bd912caa0c8614a69afc7b164736f6c634300081a003360c060405234801561001057600080fd5b5060405161106f38038061106f83398101604081905261002f916100db565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461006357604051632b2add3d60e01b815260040160405180910390fd5b600380546001600160a01b0319166001600160a01b0385811691909117909155828116608052811660a0526040517f80699e81136d69cb8367ad52a994e25c722a86da654b561d0c14b61a777e7ac590600090a150505061011e565b80516001600160a01b03811681146100d657600080fd5b919050565b6000806000606084860312156100f057600080fd5b6100f9846100bf565b9250610107602085016100bf565b9150610115604085016100bf565b90509250925092565b60805160a051610f2561014a60003960006101e50152600081816102b9015261045b0152610f256000f3fe608060405234801561001057600080fd5b50600436106100f55760003560e01c806397770dff11610097578063c63585cc11610066578063c63585cc14610273578063d7fd7afb14610286578063d936a012146102b4578063ee2815ba146102db57600080fd5b806397770dff1461021a578063a7cb05071461022d578063c39aca3714610240578063c62178ac1461025357600080fd5b8063513a9c05116100d3578063513a9c051461018a578063569541b9146101c0578063842da36d146101e057806391dd645f1461020757600080fd5b80630be15547146100fa5780631f0e251b1461015a5780633ce4a5bc1461016f575b600080fd5b610130610108366004610bd1565b60016020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b61016d610168366004610c13565b6102ee565b005b61013073735b14bb79463307aacbed86daf3322b1e6226ab81565b610130610198366004610bd1565b60026020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b6003546101309073ffffffffffffffffffffffffffffffffffffffff1681565b6101307f000000000000000000000000000000000000000000000000000000000000000081565b61016d610215366004610c35565b610402565b61016d610228366004610c13565b610526565b61016d61023b366004610c61565b610633565b61016d61024e366004610c83565b6106ce565b6004546101309073ffffffffffffffffffffffffffffffffffffffff1681565b610130610281366004610d53565b6108cd565b6102a6610294366004610bd1565b60006020819052908152604090205481565b604051908152602001610151565b6101307f000000000000000000000000000000000000000000000000000000000000000081565b61016d6102e9366004610c35565b610a02565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461033b576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116610388576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600480547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527f3ade88e3922d64780e1bf4460d364c2970b69da813f9c0c07a1c187b5647636c906020015b60405180910390a150565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461044f576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600354600090610497907f00000000000000000000000000000000000000000000000000000000000000009073ffffffffffffffffffffffffffffffffffffffff16846108cd565b60008481526002602090815260409182902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff85169081179091558251878152918201529192507f0ecec485166da6139b13bb7e033e9446e2d35348e80ebf1180d4afe2dba1704e910160405180910390a1505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610573576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff81166105c0576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527fdba79d534382d1a8ae108e4c8ecb27c6ae42ab8b91d44eedf88bd329f3868d5e906020016103f7565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610680576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000828152602081815260409182902083905581518481529081018390527f49f492222906ac486c3c1401fa545626df1f0c0e5a77a05597ea2ed66af9850d91015b60405180910390a15050565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461071b576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff831673735b14bb79463307aacbed86daf3322b1e6226ab1480610768575073ffffffffffffffffffffffffffffffffffffffff831630145b1561079f576040517f82d5d76a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f47e7ef2400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152602482018690528616906347e7ef24906044016020604051808303816000875af1158015610814573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108389190610d96565b506040517fde43156e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84169063de43156e906108939089908990899088908890600401610e01565b600060405180830381600087803b1580156108ad57600080fd5b505af11580156108c1573d6000803e3d6000fd5b50505050505050505050565b60008060006108dc8585610ad3565b6040517fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606084811b8216602084015283901b16603482015291935091508690604801604051602081830303815290604052805190602001206040516020016109c29291907fff00000000000000000000000000000000000000000000000000000000000000815260609290921b7fffffffffffffffffffffffffffffffffffffffff00000000000000000000000016600183015260158201527f96e8ac4277198ff8b6f785478aa9a39f403cb768dd02cbee326c3e7da348845f603582015260550190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291905280516020909101209695505050505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610a4f576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008281526001602090815260409182902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff85169081179091558251858152918201527fd1b36d30f6248e97c473b4d1348ca164a4ef6759022f54a58ec200326c39c45d91016106c2565b6000808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603610b3b576040517fcb1e7cfe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1610610b75578284610b78565b83835b909250905073ffffffffffffffffffffffffffffffffffffffff8216610bca576040517f78b507da00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b9250929050565b600060208284031215610be357600080fd5b5035919050565b803573ffffffffffffffffffffffffffffffffffffffff81168114610c0e57600080fd5b919050565b600060208284031215610c2557600080fd5b610c2e82610bea565b9392505050565b60008060408385031215610c4857600080fd5b82359150610c5860208401610bea565b90509250929050565b60008060408385031215610c7457600080fd5b50508035926020909101359150565b60008060008060008060a08789031215610c9c57600080fd5b863567ffffffffffffffff811115610cb357600080fd5b87016060818a031215610cc557600080fd5b9550610cd360208801610bea565b945060408701359350610ce860608801610bea565b9250608087013567ffffffffffffffff811115610d0457600080fd5b8701601f81018913610d1557600080fd5b803567ffffffffffffffff811115610d2c57600080fd5b896020828401011115610d3e57600080fd5b60208201935080925050509295509295509295565b600080600060608486031215610d6857600080fd5b610d7184610bea565b9250610d7f60208501610bea565b9150610d8d60408501610bea565b90509250925092565b600060208284031215610da857600080fd5b81518015158114610c2e57600080fd5b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b60808152600086357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1883603018112610e3957600080fd5b870160208101903567ffffffffffffffff811115610e5657600080fd5b803603821315610e6557600080fd5b60606080850152610e7a60e085018284610db8565b91505073ffffffffffffffffffffffffffffffffffffffff610e9e60208a01610bea565b1660a0840152604088013560c084015273ffffffffffffffffffffffffffffffffffffffff871660208401528560408401528281036060840152610ee3818587610db8565b9897505050505050505056fea2646970667358221220fea45cb058045b493e646c8b9505ea080ab95fd7ed4498b922d179cf1abec08e64736f6c634300081a003360e060405234801561001057600080fd5b50604051611bb9380380611bb983398101604081905261002f9161020e565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461006357604051632b2add3d60e01b815260040160405180910390fd5b6001600160a01b038216158061008057506001600160a01b038116155b1561009e5760405163d92e233d60e01b815260040160405180910390fd5b60066100aa8982610360565b5060076100b78882610360565b5060ff861660c05260808590528360028111156100d6576100d661041e565b60a08160028111156100ea576100ea61041e565b905250600192909255600080546001600160a01b039283166001600160a01b03199182161790915560088054929093169116179055506104349350505050565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261015157600080fd5b81516001600160401b0381111561016a5761016a61012a565b604051601f8201601f19908116603f011681016001600160401b03811182821017156101985761019861012a565b6040528181528382016020018510156101b057600080fd5b60005b828110156101cf576020818601810151838301820152016101b3565b506000918101602001919091529392505050565b8051600381106101f257600080fd5b919050565b80516001600160a01b03811681146101f257600080fd5b600080600080600080600080610100898b03121561022b57600080fd5b88516001600160401b0381111561024157600080fd5b61024d8b828c01610140565b60208b015190995090506001600160401b0381111561026b57600080fd5b6102778b828c01610140565b975050604089015160ff8116811461028e57600080fd5b60608a015190965094506102a460808a016101e3565b60a08a015190945092506102ba60c08a016101f7565b91506102c860e08a016101f7565b90509295985092959890939650565b600181811c908216806102eb57607f821691505b60208210810361030b57634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111561035b57806000526020600020601f840160051c810160208510156103385750805b601f840160051c820191505b818110156103585760008155600101610344565b50505b505050565b81516001600160401b038111156103795761037961012a565b61038d8161038784546102d7565b84610311565b6020601f8211600181146103c157600083156103a95750848201515b600019600385901b1c1916600184901b178455610358565b600084815260208120601f198516915b828110156103f157878501518255602094850194600190920191016103d1565b508482101561040f5786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b634e487b7160e01b600052602160045260246000fd5b60805160a05160c05161174861047160003960006102170152600061033a0152600081816102eb01528181610ad70152610bdd01526117486000f3fe608060405234801561001057600080fd5b50600436106101985760003560e01c80638b851b95116100e3578063ccc775991161008c578063eddeb12311610066578063eddeb12314610431578063f2441b3214610444578063f687d12a1461046457600080fd5b8063ccc77599146103a4578063d9eeebed146103b7578063dd62ed3e146103eb57600080fd5b8063a9059cbb116100bd578063a9059cbb14610369578063c70126261461037c578063c835d7cc1461038f57600080fd5b80638b851b951461030d57806395d89b411461032d578063a3413d031461033557600080fd5b80633ce4a5bc116101455780634d8943bb1161011f5780634d8943bb146102a757806370a08231146102b057806385e1f4d0146102e657600080fd5b80633ce4a5bc1461024157806342966c681461028157806347e7ef241461029457600080fd5b806318160ddd1161017657806318160ddd146101f557806323b872dd146101fd578063313ce5671461021057600080fd5b806306fdde031461019d578063091d2788146101bb578063095ea7b3146101d2575b600080fd5b6101a5610477565b6040516101b29190611327565b60405180910390f35b6101c460015481565b6040519081526020016101b2565b6101e56101e0366004611366565b610509565b60405190151581526020016101b2565b6005546101c4565b6101e561020b366004611392565b610520565b60405160ff7f00000000000000000000000000000000000000000000000000000000000000001681526020016101b2565b61025c73735b14bb79463307aacbed86daf3322b1e6226ab81565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101b2565b6101e561028f3660046113d3565b6105b7565b6101e56102a2366004611366565b6105cb565b6101c460025481565b6101c46102be3660046113ec565b73ffffffffffffffffffffffffffffffffffffffff1660009081526003602052604090205490565b6101c47f000000000000000000000000000000000000000000000000000000000000000081565b60085461025c9073ffffffffffffffffffffffffffffffffffffffff1681565b6101a561071f565b61035c7f000000000000000000000000000000000000000000000000000000000000000081565b6040516101b29190611409565b6101e5610377366004611366565b61072e565b6101e561038a366004611479565b61073b565b6103a261039d3660046113ec565b61088a565b005b6103a26103b23660046113ec565b61099e565b6103bf610aab565b6040805173ffffffffffffffffffffffffffffffffffffffff90931683526020830191909152016101b2565b6101c46103f9366004611571565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260046020908152604080832093909416825291909152205490565b6103a261043f3660046113d3565b610cc9565b60005461025c9073ffffffffffffffffffffffffffffffffffffffff1681565b6103a26104723660046113d3565b610d4b565b606060068054610486906115aa565b80601f01602080910402602001604051908101604052809291908181526020018280546104b2906115aa565b80156104ff5780601f106104d4576101008083540402835291602001916104ff565b820191906000526020600020905b8154815290600101906020018083116104e257829003601f168201915b5050505050905090565b6000610516338484610dcd565b5060015b92915050565b600061052d848484610ed6565b73ffffffffffffffffffffffffffffffffffffffff8416600090815260046020908152604080832033845290915290205482811015610598576040517f10bad14700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6105ac85336105a7868561162c565b610dcd565b506001949350505050565b60006105c33383611091565b506001919050565b60003373735b14bb79463307aacbed86daf3322b1e6226ab14801590610609575060005473ffffffffffffffffffffffffffffffffffffffff163314155b801561062d575060085473ffffffffffffffffffffffffffffffffffffffff163314155b15610664576040517fddb5de5e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61066e83836111d3565b6040517f735b14bb79463307aacbed86daf3322b1e6226ab000000000000000000000000602082015273ffffffffffffffffffffffffffffffffffffffff8416907f67fc7bdaed5b0ec550d8706b87d60568ab70c6b781263c70101d54cd1564aab390603401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529082905261070e91869061163f565b60405180910390a250600192915050565b606060078054610486906115aa565b6000610516338484610ed6565b6000806000610748610aab565b6040517f23b872dd00000000000000000000000000000000000000000000000000000000815233600482015273735b14bb79463307aacbed86daf3322b1e6226ab602482015260448101829052919350915073ffffffffffffffffffffffffffffffffffffffff8316906323b872dd906064016020604051808303816000875af11580156107da573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107fe9190611661565b610834576040517f0a7cd6d600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61083e3385611091565b60025460405133917f9ffbffc04a397460ee1dbe8c9503e098090567d6b7f4b3c02a8617d800b6d9559161087791899189918791611683565b60405180910390a2506001949350505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab146108d7576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116610924576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527fd55614e962c5fd6ece71614f6348d702468a997a394dd5e5c1677950226d97ae906020015b60405180910390a150565b3373735b14bb79463307aacbed86daf3322b1e6226ab146109eb576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116610a38576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600880547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527f88815d964e380677e86d817e7d65dea59cb7b4c3b5b7a0c8ec7ea4a74f90a38790602001610993565b600080546040517f0be155470000000000000000000000000000000000000000000000000000000081527f000000000000000000000000000000000000000000000000000000000000000060048201528291829173ffffffffffffffffffffffffffffffffffffffff90911690630be1554790602401602060405180830381865afa158015610b3e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b6291906116b2565b905073ffffffffffffffffffffffffffffffffffffffff8116610bb1576040517f78fff39600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080546040517fd7fd7afb0000000000000000000000000000000000000000000000000000000081527f0000000000000000000000000000000000000000000000000000000000000000600482015273ffffffffffffffffffffffffffffffffffffffff9091169063d7fd7afb90602401602060405180830381865afa158015610c40573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c6491906116cf565b905080600003610ca0576040517fe661aed000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060025460015483610cb391906116e8565b610cbd91906116ff565b92959294509192505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610d16576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60028190556040518181527fef13af88e424b5d15f49c77758542c1938b08b8b95b91ed0751f98ba99000d8f90602001610993565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610d98576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018190556040518181527fff5788270f43bfc1ca41c503606d2594aa3023a1a7547de403a3e2f146a4a80a90602001610993565b73ffffffffffffffffffffffffffffffffffffffff8316610e1a576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216610e67576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff83811660008181526004602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8316610f23576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216610f70576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff831660009081526003602052604090205481811015610fd0576040517ffe382aa700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610fda828261162c565b73ffffffffffffffffffffffffffffffffffffffff808616600090815260036020526040808220939093559085168152908120805484929061101d9084906116ff565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161108391815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff82166110de576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff82166000908152600360205260409020548181101561113e576040517ffe382aa700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611148828261162c565b73ffffffffffffffffffffffffffffffffffffffff84166000908152600360205260408120919091556005805484929061118390849061162c565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90602001610ec9565b73ffffffffffffffffffffffffffffffffffffffff8216611220576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b806005600082825461123291906116ff565b909155505073ffffffffffffffffffffffffffffffffffffffff82166000908152600360205260408120805483929061126c9084906116ff565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6000815180845260005b818110156112e9576020818501810151868301820152016112cd565b5060006020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b60208152600061133a60208301846112c3565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff8116811461136357600080fd5b50565b6000806040838503121561137957600080fd5b823561138481611341565b946020939093013593505050565b6000806000606084860312156113a757600080fd5b83356113b281611341565b925060208401356113c281611341565b929592945050506040919091013590565b6000602082840312156113e557600080fd5b5035919050565b6000602082840312156113fe57600080fd5b813561133a81611341565b6020810160038310611444577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000806040838503121561148c57600080fd5b823567ffffffffffffffff8111156114a357600080fd5b8301601f810185136114b457600080fd5b803567ffffffffffffffff8111156114ce576114ce61144a565b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8501160116810181811067ffffffffffffffff8211171561153a5761153a61144a565b60405281815282820160200187101561155257600080fd5b8160208401602083013760006020928201830152969401359450505050565b6000806040838503121561158457600080fd5b823561158f81611341565b9150602083013561159f81611341565b809150509250929050565b600181811c908216806115be57607f821691505b6020821081036115f7577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8181038181111561051a5761051a6115fd565b60408152600061165260408301856112c3565b90508260208301529392505050565b60006020828403121561167357600080fd5b8151801515811461133a57600080fd5b60808152600061169660808301876112c3565b6020830195909552506040810192909252606090910152919050565b6000602082840312156116c457600080fd5b815161133a81611341565b6000602082840312156116e157600080fd5b5051919050565b808202811582820484141761051a5761051a6115fd565b8082018082111561051a5761051a6115fd56fea26469706673582212204013e39523742118b3f2227e145ee7e48176ba6aebead33c596dca2acb59a74c64736f6c634300081a0033a2646970667358221220f34efb5d5c19f227364e9c898da9fc460e2d15c184f81d9e52c198a6b8479c7464736f6c634300081a0033", } // GatewayZEVMOutboundTestABI is the input ABI used to generate the binding from. @@ -833,69 +833,6 @@ func (_GatewayZEVMOutboundTest *GatewayZEVMOutboundTestTransactorSession) TestDe return _GatewayZEVMOutboundTest.Contract.TestDepositFailsIfAmountIs0(&_GatewayZEVMOutboundTest.TransactOpts) } -// TestDepositAndRevertZRC20AndCallZContractFailsIfTargetIsZeroAddress is a paid mutator transaction binding the contract method 0xfc6734eb. -// -// Solidity: function testDepositAndRevertZRC20AndCallZContractFailsIfTargetIsZeroAddress() returns() -func (_GatewayZEVMOutboundTest *GatewayZEVMOutboundTestTransactor) TestDepositAndRevertZRC20AndCallZContractFailsIfTargetIsZeroAddress(opts *bind.TransactOpts) (*types.Transaction, error) { - return _GatewayZEVMOutboundTest.contract.Transact(opts, "testDepositAndRevertZRC20AndCallZContractFailsIfTargetIsZeroAddress") -} - -// TestDepositAndRevertZRC20AndCallZContractFailsIfTargetIsZeroAddress is a paid mutator transaction binding the contract method 0xfc6734eb. -// -// Solidity: function testDepositAndRevertZRC20AndCallZContractFailsIfTargetIsZeroAddress() returns() -func (_GatewayZEVMOutboundTest *GatewayZEVMOutboundTestSession) TestDepositAndRevertZRC20AndCallZContractFailsIfTargetIsZeroAddress() (*types.Transaction, error) { - return _GatewayZEVMOutboundTest.Contract.TestDepositAndRevertZRC20AndCallZContractFailsIfTargetIsZeroAddress(&_GatewayZEVMOutboundTest.TransactOpts) -} - -// TestDepositAndRevertZRC20AndCallZContractFailsIfTargetIsZeroAddress is a paid mutator transaction binding the contract method 0xfc6734eb. -// -// Solidity: function testDepositAndRevertZRC20AndCallZContractFailsIfTargetIsZeroAddress() returns() -func (_GatewayZEVMOutboundTest *GatewayZEVMOutboundTestTransactorSession) TestDepositAndRevertZRC20AndCallZContractFailsIfTargetIsZeroAddress() (*types.Transaction, error) { - return _GatewayZEVMOutboundTest.Contract.TestDepositAndRevertZRC20AndCallZContractFailsIfTargetIsZeroAddress(&_GatewayZEVMOutboundTest.TransactOpts) -} - -// TestDepositAndRevertZRC20AndCallZContractFailsIfZrc20IsZeroAddress is a paid mutator transaction binding the contract method 0x55ea9351. -// -// Solidity: function testDepositAndRevertZRC20AndCallZContractFailsIfZrc20IsZeroAddress() returns() -func (_GatewayZEVMOutboundTest *GatewayZEVMOutboundTestTransactor) TestDepositAndRevertZRC20AndCallZContractFailsIfZrc20IsZeroAddress(opts *bind.TransactOpts) (*types.Transaction, error) { - return _GatewayZEVMOutboundTest.contract.Transact(opts, "testDepositAndRevertZRC20AndCallZContractFailsIfZrc20IsZeroAddress") -} - -// TestDepositAndRevertZRC20AndCallZContractFailsIfZrc20IsZeroAddress is a paid mutator transaction binding the contract method 0x55ea9351. -// -// Solidity: function testDepositAndRevertZRC20AndCallZContractFailsIfZrc20IsZeroAddress() returns() -func (_GatewayZEVMOutboundTest *GatewayZEVMOutboundTestSession) TestDepositAndRevertZRC20AndCallZContractFailsIfZrc20IsZeroAddress() (*types.Transaction, error) { - return _GatewayZEVMOutboundTest.Contract.TestDepositAndRevertZRC20AndCallZContractFailsIfZrc20IsZeroAddress(&_GatewayZEVMOutboundTest.TransactOpts) -} - -// TestDepositAndRevertZRC20AndCallZContractFailsIfZrc20IsZeroAddress is a paid mutator transaction binding the contract method 0x55ea9351. -// -// Solidity: function testDepositAndRevertZRC20AndCallZContractFailsIfZrc20IsZeroAddress() returns() -func (_GatewayZEVMOutboundTest *GatewayZEVMOutboundTestTransactorSession) TestDepositAndRevertZRC20AndCallZContractFailsIfZrc20IsZeroAddress() (*types.Transaction, error) { - return _GatewayZEVMOutboundTest.Contract.TestDepositAndRevertZRC20AndCallZContractFailsIfZrc20IsZeroAddress(&_GatewayZEVMOutboundTest.TransactOpts) -} - -// TestDepositFailsIfAmountIs0 is a paid mutator transaction binding the contract method 0x996b7675. -// -// Solidity: function testDepositFailsIfAmountIs0() returns() -func (_GatewayZEVMOutboundTest *GatewayZEVMOutboundTestTransactor) TestDepositFailsIfAmountIs0(opts *bind.TransactOpts) (*types.Transaction, error) { - return _GatewayZEVMOutboundTest.contract.Transact(opts, "testDepositFailsIfAmountIs0") -} - -// TestDepositFailsIfAmountIs0 is a paid mutator transaction binding the contract method 0x996b7675. -// -// Solidity: function testDepositFailsIfAmountIs0() returns() -func (_GatewayZEVMOutboundTest *GatewayZEVMOutboundTestSession) TestDepositFailsIfAmountIs0() (*types.Transaction, error) { - return _GatewayZEVMOutboundTest.Contract.TestDepositFailsIfAmountIs0(&_GatewayZEVMOutboundTest.TransactOpts) -} - -// TestDepositFailsIfAmountIs0 is a paid mutator transaction binding the contract method 0x996b7675. -// -// Solidity: function testDepositFailsIfAmountIs0() returns() -func (_GatewayZEVMOutboundTest *GatewayZEVMOutboundTestTransactorSession) TestDepositFailsIfAmountIs0() (*types.Transaction, error) { - return _GatewayZEVMOutboundTest.Contract.TestDepositFailsIfAmountIs0(&_GatewayZEVMOutboundTest.TransactOpts) -} - // TestDepositFailsIfSenderNotFungibleModule is a paid mutator transaction binding the contract method 0x198d5ca4. // // Solidity: function testDepositFailsIfSenderNotFungibleModule() returns() @@ -1169,6 +1106,27 @@ func (_GatewayZEVMOutboundTest *GatewayZEVMOutboundTestTransactorSession) TestDe return _GatewayZEVMOutboundTest.Contract.TestDepositZETAAndCallUniversalContractFailsIfTargetIsZeroAddress(&_GatewayZEVMOutboundTest.TransactOpts) } +// TestDepositZETAAndCallUniversalContractFailsIfZeroAddress is a paid mutator transaction binding the contract method 0xb936be8c. +// +// Solidity: function testDepositZETAAndCallUniversalContractFailsIfZeroAddress() returns() +func (_GatewayZEVMOutboundTest *GatewayZEVMOutboundTestTransactor) TestDepositZETAAndCallUniversalContractFailsIfZeroAddress(opts *bind.TransactOpts) (*types.Transaction, error) { + return _GatewayZEVMOutboundTest.contract.Transact(opts, "testDepositZETAAndCallUniversalContractFailsIfZeroAddress") +} + +// TestDepositZETAAndCallUniversalContractFailsIfZeroAddress is a paid mutator transaction binding the contract method 0xb936be8c. +// +// Solidity: function testDepositZETAAndCallUniversalContractFailsIfZeroAddress() returns() +func (_GatewayZEVMOutboundTest *GatewayZEVMOutboundTestSession) TestDepositZETAAndCallUniversalContractFailsIfZeroAddress() (*types.Transaction, error) { + return _GatewayZEVMOutboundTest.Contract.TestDepositZETAAndCallUniversalContractFailsIfZeroAddress(&_GatewayZEVMOutboundTest.TransactOpts) +} + +// TestDepositZETAAndCallUniversalContractFailsIfZeroAddress is a paid mutator transaction binding the contract method 0xb936be8c. +// +// Solidity: function testDepositZETAAndCallUniversalContractFailsIfZeroAddress() returns() +func (_GatewayZEVMOutboundTest *GatewayZEVMOutboundTestTransactorSession) TestDepositZETAAndCallUniversalContractFailsIfZeroAddress() (*types.Transaction, error) { + return _GatewayZEVMOutboundTest.Contract.TestDepositZETAAndCallUniversalContractFailsIfZeroAddress(&_GatewayZEVMOutboundTest.TransactOpts) +} + // TestDepositZRC20AndCallUniversalContract is a paid mutator transaction binding the contract method 0x6efa04b5. // // Solidity: function testDepositZRC20AndCallUniversalContract() returns() @@ -1358,25 +1316,25 @@ func (_GatewayZEVMOutboundTest *GatewayZEVMOutboundTestTransactorSession) TestEx return _GatewayZEVMOutboundTest.Contract.TestExecuteFailsIfTargetIsZeroAddress(&_GatewayZEVMOutboundTest.TransactOpts) } -// TestExecuteFailsIfZRC20IsZeroAddress is a paid mutator transaction binding the contract method 0x2948df41. +// TestExecuteFailsIfZrc20IsZeroAddress is a paid mutator transaction binding the contract method 0x09f92c1f. // -// Solidity: function testExecuteFailsIfZRC20IsZeroAddress() returns() -func (_GatewayZEVMOutboundTest *GatewayZEVMOutboundTestTransactor) TestExecuteFailsIfZRC20IsZeroAddress(opts *bind.TransactOpts) (*types.Transaction, error) { - return _GatewayZEVMOutboundTest.contract.Transact(opts, "testExecuteFailsIfZRC20IsZeroAddress") +// Solidity: function testExecuteFailsIfZrc20IsZeroAddress() returns() +func (_GatewayZEVMOutboundTest *GatewayZEVMOutboundTestTransactor) TestExecuteFailsIfZrc20IsZeroAddress(opts *bind.TransactOpts) (*types.Transaction, error) { + return _GatewayZEVMOutboundTest.contract.Transact(opts, "testExecuteFailsIfZrc20IsZeroAddress") } -// TestExecuteFailsIfZRC20IsZeroAddress is a paid mutator transaction binding the contract method 0x2948df41. +// TestExecuteFailsIfZrc20IsZeroAddress is a paid mutator transaction binding the contract method 0x09f92c1f. // -// Solidity: function testExecuteFailsIfZRC20IsZeroAddress() returns() -func (_GatewayZEVMOutboundTest *GatewayZEVMOutboundTestSession) TestExecuteFailsIfZRC20IsZeroAddress() (*types.Transaction, error) { - return _GatewayZEVMOutboundTest.Contract.TestExecuteFailsIfZRC20IsZeroAddress(&_GatewayZEVMOutboundTest.TransactOpts) +// Solidity: function testExecuteFailsIfZrc20IsZeroAddress() returns() +func (_GatewayZEVMOutboundTest *GatewayZEVMOutboundTestSession) TestExecuteFailsIfZrc20IsZeroAddress() (*types.Transaction, error) { + return _GatewayZEVMOutboundTest.Contract.TestExecuteFailsIfZrc20IsZeroAddress(&_GatewayZEVMOutboundTest.TransactOpts) } -// TestExecuteFailsIfZRC20IsZeroAddress is a paid mutator transaction binding the contract method 0x2948df41. +// TestExecuteFailsIfZrc20IsZeroAddress is a paid mutator transaction binding the contract method 0x09f92c1f. // -// Solidity: function testExecuteFailsIfZRC20IsZeroAddress() returns() -func (_GatewayZEVMOutboundTest *GatewayZEVMOutboundTestTransactorSession) TestExecuteFailsIfZRC20IsZeroAddress() (*types.Transaction, error) { - return _GatewayZEVMOutboundTest.Contract.TestExecuteFailsIfZRC20IsZeroAddress(&_GatewayZEVMOutboundTest.TransactOpts) +// Solidity: function testExecuteFailsIfZrc20IsZeroAddress() returns() +func (_GatewayZEVMOutboundTest *GatewayZEVMOutboundTestTransactorSession) TestExecuteFailsIfZrc20IsZeroAddress() (*types.Transaction, error) { + return _GatewayZEVMOutboundTest.Contract.TestExecuteFailsIfZrc20IsZeroAddress(&_GatewayZEVMOutboundTest.TransactOpts) } // TestExecuteRevertUniversalContract is a paid mutator transaction binding the contract method 0x084fafab. @@ -1463,6 +1421,27 @@ func (_GatewayZEVMOutboundTest *GatewayZEVMOutboundTestTransactorSession) TestEx return _GatewayZEVMOutboundTest.Contract.TestExecuteRevertUniversalContractFailsIfZRC20IsZeroAddress(&_GatewayZEVMOutboundTest.TransactOpts) } +// TestExecuteRevertUniversalContractFailsIfZeroAddress is a paid mutator transaction binding the contract method 0x0bfc4e4a. +// +// Solidity: function testExecuteRevertUniversalContractFailsIfZeroAddress() returns() +func (_GatewayZEVMOutboundTest *GatewayZEVMOutboundTestTransactor) TestExecuteRevertUniversalContractFailsIfZeroAddress(opts *bind.TransactOpts) (*types.Transaction, error) { + return _GatewayZEVMOutboundTest.contract.Transact(opts, "testExecuteRevertUniversalContractFailsIfZeroAddress") +} + +// TestExecuteRevertUniversalContractFailsIfZeroAddress is a paid mutator transaction binding the contract method 0x0bfc4e4a. +// +// Solidity: function testExecuteRevertUniversalContractFailsIfZeroAddress() returns() +func (_GatewayZEVMOutboundTest *GatewayZEVMOutboundTestSession) TestExecuteRevertUniversalContractFailsIfZeroAddress() (*types.Transaction, error) { + return _GatewayZEVMOutboundTest.Contract.TestExecuteRevertUniversalContractFailsIfZeroAddress(&_GatewayZEVMOutboundTest.TransactOpts) +} + +// TestExecuteRevertUniversalContractFailsIfZeroAddress is a paid mutator transaction binding the contract method 0x0bfc4e4a. +// +// Solidity: function testExecuteRevertUniversalContractFailsIfZeroAddress() returns() +func (_GatewayZEVMOutboundTest *GatewayZEVMOutboundTestTransactorSession) TestExecuteRevertUniversalContractFailsIfZeroAddress() (*types.Transaction, error) { + return _GatewayZEVMOutboundTest.Contract.TestExecuteRevertUniversalContractFailsIfZeroAddress(&_GatewayZEVMOutboundTest.TransactOpts) +} + // TestExecuteRevertUniversalContractFailsIfZrc20IsZeroAddress is a paid mutator transaction binding the contract method 0x4b9324b6. // // Solidity: function testExecuteRevertUniversalContractFailsIfZrc20IsZeroAddress() returns() diff --git a/v2/pkg/igatewayzevm.sol/igatewayzevm.go b/v2/pkg/igatewayzevm.sol/igatewayzevm.go index 603f6e07..28e5b4e1 100644 --- a/v2/pkg/igatewayzevm.sol/igatewayzevm.go +++ b/v2/pkg/igatewayzevm.sol/igatewayzevm.go @@ -45,7 +45,7 @@ type ZContext struct { // IGatewayZEVMMetaData contains all meta data concerning the IGatewayZEVM contract. var IGatewayZEVMMetaData = &bind.MetaData{ - ABI: "[{\"type\":\"function\",\"name\":\"call\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"chainId\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"message\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"deposit\",\"inputs\":[{\"name\":\"zrc20\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"depositAndCall\",\"inputs\":[{\"name\":\"context\",\"type\":\"tuple\",\"internalType\":\"structzContext\",\"components\":[{\"name\":\"origin\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"sender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"chainID\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"message\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"depositAndCall\",\"inputs\":[{\"name\":\"context\",\"type\":\"tuple\",\"internalType\":\"structzContext\",\"components\":[{\"name\":\"origin\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"sender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"chainID\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"zrc20\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"message\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"depositAndRevert\",\"inputs\":[{\"name\":\"context\",\"type\":\"tuple\",\"internalType\":\"structrevertContext\",\"components\":[{\"name\":\"origin\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"sender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"chainID\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"zrc20\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"message\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"execute\",\"inputs\":[{\"name\":\"context\",\"type\":\"tuple\",\"internalType\":\"structzContext\",\"components\":[{\"name\":\"origin\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"sender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"chainID\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"zrc20\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"message\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"executeRevert\",\"inputs\":[{\"name\":\"context\",\"type\":\"tuple\",\"internalType\":\"structrevertContext\",\"components\":[{\"name\":\"origin\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"sender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"chainID\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"zrc20\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"message\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"withdraw\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"zrc20\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"withdraw\",\"inputs\":[{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"chainId\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"withdrawAndCall\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"zrc20\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"message\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"withdrawAndCall\",\"inputs\":[{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"chainId\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"message\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"event\",\"name\":\"Call\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"chainId\",\"type\":\"uint256\",\"indexed\":true,\"internalType\":\"uint256\"},{\"name\":\"receiver\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"message\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Withdrawal\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"chainId\",\"type\":\"uint256\",\"indexed\":true,\"internalType\":\"uint256\"},{\"name\":\"receiver\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"zrc20\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"gasfee\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"protocolFlatFee\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"message\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"CallerIsNotFungibleModule\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"FailedZetaSent\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"GasFeeTransferFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientZRC20Amount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientZetaAmount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidTarget\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OnlyWZETAOrFungible\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"WithdrawalFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZRC20BurnFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZRC20DepositFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZRC20TransferFailed\",\"inputs\":[]}]", + ABI: "[{\"type\":\"function\",\"name\":\"call\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"chainId\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"message\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"deposit\",\"inputs\":[{\"name\":\"zrc20\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"depositAndCall\",\"inputs\":[{\"name\":\"context\",\"type\":\"tuple\",\"internalType\":\"structzContext\",\"components\":[{\"name\":\"origin\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"sender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"chainID\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"message\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"depositAndCall\",\"inputs\":[{\"name\":\"context\",\"type\":\"tuple\",\"internalType\":\"structzContext\",\"components\":[{\"name\":\"origin\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"sender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"chainID\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"zrc20\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"message\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"depositAndRevert\",\"inputs\":[{\"name\":\"context\",\"type\":\"tuple\",\"internalType\":\"structrevertContext\",\"components\":[{\"name\":\"origin\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"sender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"chainID\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"zrc20\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"message\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"execute\",\"inputs\":[{\"name\":\"context\",\"type\":\"tuple\",\"internalType\":\"structzContext\",\"components\":[{\"name\":\"origin\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"sender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"chainID\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"zrc20\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"message\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"executeRevert\",\"inputs\":[{\"name\":\"context\",\"type\":\"tuple\",\"internalType\":\"structrevertContext\",\"components\":[{\"name\":\"origin\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"sender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"chainID\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"zrc20\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"message\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"withdraw\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"zrc20\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"withdraw\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"chainId\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"withdrawAndCall\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"zrc20\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"message\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"withdrawAndCall\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"chainId\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"message\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"event\",\"name\":\"Call\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"chainId\",\"type\":\"uint256\",\"indexed\":true,\"internalType\":\"uint256\"},{\"name\":\"receiver\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"message\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Withdrawal\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"chainId\",\"type\":\"uint256\",\"indexed\":true,\"internalType\":\"uint256\"},{\"name\":\"receiver\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"zrc20\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"gasfee\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"protocolFlatFee\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"message\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"CallerIsNotFungibleModule\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"FailedZetaSent\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"GasFeeTransferFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientZRC20Amount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientZetaAmount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidTarget\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OnlyWZETAOrFungible\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"WithdrawalFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZRC20BurnFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZRC20DepositFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZRC20TransferFailed\",\"inputs\":[]}]", } // IGatewayZEVMABI is the input ABI used to generate the binding from. @@ -738,317 +738,3 @@ func (_IGatewayZEVM *IGatewayZEVMFilterer) ParseWithdrawal(log types.Log) (*IGat event.Raw = log return event, nil } - -// IGatewayZEVMCallIterator is returned from FilterCall and is used to iterate over the raw logs and unpacked data for Call events raised by the IGatewayZEVM contract. -type IGatewayZEVMCallIterator struct { - Event *IGatewayZEVMCall // Event containing the contract specifics and raw log - - contract *bind.BoundContract // Generic contract to use for unpacking event data - event string // Event name to use for unpacking event data - - logs chan types.Log // Log channel receiving the found contract events - sub ethereum.Subscription // Subscription for errors, completion and termination - done bool // Whether the subscription completed delivering logs - fail error // Occurred error to stop iteration -} - -// Next advances the iterator to the subsequent event, returning whether there -// are any more events found. In case of a retrieval or parsing error, false is -// returned and Error() can be queried for the exact failure. -func (it *IGatewayZEVMCallIterator) Next() bool { - // If the iterator failed, stop iterating - if it.fail != nil { - return false - } - // If the iterator completed, deliver directly whatever's available - if it.done { - select { - case log := <-it.logs: - it.Event = new(IGatewayZEVMCall) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - default: - return false - } - } - // Iterator still in progress, wait for either a data or an error event - select { - case log := <-it.logs: - it.Event = new(IGatewayZEVMCall) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - case err := <-it.sub.Err(): - it.done = true - it.fail = err - return it.Next() - } -} - -// Error returns any retrieval or parsing error occurred during filtering. -func (it *IGatewayZEVMCallIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *IGatewayZEVMCallIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// IGatewayZEVMCall represents a Call event raised by the IGatewayZEVM contract. -type IGatewayZEVMCall struct { - Sender common.Address - ChainId *big.Int - Receiver []byte - Message []byte - Raw types.Log // Blockchain specific contextual infos -} - -// FilterCall is a free log retrieval operation binding the contract event 0x5322ffbbf9261ff1f8138247942d2b03b28717141ef0a0dd080fc4be9c4e78d3. -// -// Solidity: event Call(address indexed sender, uint256 indexed chainId, bytes receiver, bytes message) -func (_IGatewayZEVM *IGatewayZEVMFilterer) FilterCall(opts *bind.FilterOpts, sender []common.Address, chainId []*big.Int) (*IGatewayZEVMCallIterator, error) { - - var senderRule []interface{} - for _, senderItem := range sender { - senderRule = append(senderRule, senderItem) - } - var chainIdRule []interface{} - for _, chainIdItem := range chainId { - chainIdRule = append(chainIdRule, chainIdItem) - } - - logs, sub, err := _IGatewayZEVM.contract.FilterLogs(opts, "Call", senderRule, chainIdRule) - if err != nil { - return nil, err - } - return &IGatewayZEVMCallIterator{contract: _IGatewayZEVM.contract, event: "Call", logs: logs, sub: sub}, nil -} - -// WatchCall is a free log subscription operation binding the contract event 0x5322ffbbf9261ff1f8138247942d2b03b28717141ef0a0dd080fc4be9c4e78d3. -// -// Solidity: event Call(address indexed sender, uint256 indexed chainId, bytes receiver, bytes message) -func (_IGatewayZEVM *IGatewayZEVMFilterer) WatchCall(opts *bind.WatchOpts, sink chan<- *IGatewayZEVMCall, sender []common.Address, chainId []*big.Int) (event.Subscription, error) { - - var senderRule []interface{} - for _, senderItem := range sender { - senderRule = append(senderRule, senderItem) - } - var chainIdRule []interface{} - for _, chainIdItem := range chainId { - chainIdRule = append(chainIdRule, chainIdItem) - } - - logs, sub, err := _IGatewayZEVM.contract.WatchLogs(opts, "Call", senderRule, chainIdRule) - if err != nil { - return nil, err - } - return event.NewSubscription(func(quit <-chan struct{}) error { - defer sub.Unsubscribe() - for { - select { - case log := <-logs: - // New log arrived, parse the event and forward to the user - event := new(IGatewayZEVMCall) - if err := _IGatewayZEVM.contract.UnpackLog(event, "Call", log); err != nil { - return err - } - event.Raw = log - - select { - case sink <- event: - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - } - }), nil -} - -// ParseCall is a log parse operation binding the contract event 0x5322ffbbf9261ff1f8138247942d2b03b28717141ef0a0dd080fc4be9c4e78d3. -// -// Solidity: event Call(address indexed sender, uint256 indexed chainId, bytes receiver, bytes message) -func (_IGatewayZEVM *IGatewayZEVMFilterer) ParseCall(log types.Log) (*IGatewayZEVMCall, error) { - event := new(IGatewayZEVMCall) - if err := _IGatewayZEVM.contract.UnpackLog(event, "Call", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// IGatewayZEVMWithdrawalIterator is returned from FilterWithdrawal and is used to iterate over the raw logs and unpacked data for Withdrawal events raised by the IGatewayZEVM contract. -type IGatewayZEVMWithdrawalIterator struct { - Event *IGatewayZEVMWithdrawal // Event containing the contract specifics and raw log - - contract *bind.BoundContract // Generic contract to use for unpacking event data - event string // Event name to use for unpacking event data - - logs chan types.Log // Log channel receiving the found contract events - sub ethereum.Subscription // Subscription for errors, completion and termination - done bool // Whether the subscription completed delivering logs - fail error // Occurred error to stop iteration -} - -// Next advances the iterator to the subsequent event, returning whether there -// are any more events found. In case of a retrieval or parsing error, false is -// returned and Error() can be queried for the exact failure. -func (it *IGatewayZEVMWithdrawalIterator) Next() bool { - // If the iterator failed, stop iterating - if it.fail != nil { - return false - } - // If the iterator completed, deliver directly whatever's available - if it.done { - select { - case log := <-it.logs: - it.Event = new(IGatewayZEVMWithdrawal) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - default: - return false - } - } - // Iterator still in progress, wait for either a data or an error event - select { - case log := <-it.logs: - it.Event = new(IGatewayZEVMWithdrawal) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - case err := <-it.sub.Err(): - it.done = true - it.fail = err - return it.Next() - } -} - -// Error returns any retrieval or parsing error occurred during filtering. -func (it *IGatewayZEVMWithdrawalIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *IGatewayZEVMWithdrawalIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// IGatewayZEVMWithdrawal represents a Withdrawal event raised by the IGatewayZEVM contract. -type IGatewayZEVMWithdrawal struct { - Sender common.Address - ChainId *big.Int - Receiver []byte - Zrc20 common.Address - Value *big.Int - Gasfee *big.Int - ProtocolFlatFee *big.Int - Message []byte - Raw types.Log // Blockchain specific contextual infos -} - -// FilterWithdrawal is a free log retrieval operation binding the contract event 0xde19dbe881cc0aeeb6e73ce19ac7b5ca695e6be8a076e3eb42292005a7fec1b5. -// -// Solidity: event Withdrawal(address indexed sender, uint256 indexed chainId, bytes receiver, address zrc20, uint256 value, uint256 gasfee, uint256 protocolFlatFee, bytes message) -func (_IGatewayZEVM *IGatewayZEVMFilterer) FilterWithdrawal(opts *bind.FilterOpts, sender []common.Address, chainId []*big.Int) (*IGatewayZEVMWithdrawalIterator, error) { - - var senderRule []interface{} - for _, senderItem := range sender { - senderRule = append(senderRule, senderItem) - } - var chainIdRule []interface{} - for _, chainIdItem := range chainId { - chainIdRule = append(chainIdRule, chainIdItem) - } - - logs, sub, err := _IGatewayZEVM.contract.FilterLogs(opts, "Withdrawal", senderRule, chainIdRule) - if err != nil { - return nil, err - } - return &IGatewayZEVMWithdrawalIterator{contract: _IGatewayZEVM.contract, event: "Withdrawal", logs: logs, sub: sub}, nil -} - -// WatchWithdrawal is a free log subscription operation binding the contract event 0xde19dbe881cc0aeeb6e73ce19ac7b5ca695e6be8a076e3eb42292005a7fec1b5. -// -// Solidity: event Withdrawal(address indexed sender, uint256 indexed chainId, bytes receiver, address zrc20, uint256 value, uint256 gasfee, uint256 protocolFlatFee, bytes message) -func (_IGatewayZEVM *IGatewayZEVMFilterer) WatchWithdrawal(opts *bind.WatchOpts, sink chan<- *IGatewayZEVMWithdrawal, sender []common.Address, chainId []*big.Int) (event.Subscription, error) { - - var senderRule []interface{} - for _, senderItem := range sender { - senderRule = append(senderRule, senderItem) - } - var chainIdRule []interface{} - for _, chainIdItem := range chainId { - chainIdRule = append(chainIdRule, chainIdItem) - } - - logs, sub, err := _IGatewayZEVM.contract.WatchLogs(opts, "Withdrawal", senderRule, chainIdRule) - if err != nil { - return nil, err - } - return event.NewSubscription(func(quit <-chan struct{}) error { - defer sub.Unsubscribe() - for { - select { - case log := <-logs: - // New log arrived, parse the event and forward to the user - event := new(IGatewayZEVMWithdrawal) - if err := _IGatewayZEVM.contract.UnpackLog(event, "Withdrawal", log); err != nil { - return err - } - event.Raw = log - - select { - case sink <- event: - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - } - }), nil -} - -// ParseWithdrawal is a log parse operation binding the contract event 0xde19dbe881cc0aeeb6e73ce19ac7b5ca695e6be8a076e3eb42292005a7fec1b5. -// -// Solidity: event Withdrawal(address indexed sender, uint256 indexed chainId, bytes receiver, address zrc20, uint256 value, uint256 gasfee, uint256 protocolFlatFee, bytes message) -func (_IGatewayZEVM *IGatewayZEVMFilterer) ParseWithdrawal(log types.Log) (*IGatewayZEVMWithdrawal, error) { - event := new(IGatewayZEVMWithdrawal) - if err := _IGatewayZEVM.contract.UnpackLog(event, "Withdrawal", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} diff --git a/v2/pkg/senderzevm.sol/senderzevm.go b/v2/pkg/senderzevm.sol/senderzevm.go index 59257af6..9caa5b67 100644 --- a/v2/pkg/senderzevm.sol/senderzevm.go +++ b/v2/pkg/senderzevm.sol/senderzevm.go @@ -32,7 +32,7 @@ var ( // SenderZEVMMetaData contains all meta data concerning the SenderZEVM contract. var SenderZEVMMetaData = &bind.MetaData{ ABI: "[{\"type\":\"constructor\",\"inputs\":[{\"name\":\"_gateway\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"callReceiver\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"chainId\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"str\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"num\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"flag\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"gateway\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"withdrawAndCallReceiver\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"zrc20\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"str\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"num\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"flag\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"error\",\"name\":\"ApprovalFailed\",\"inputs\":[]}]", - Bin: "0x6080604052348015600f57600080fd5b5060405161080c38038061080c833981016040819052602c916050565b600080546001600160a01b0319166001600160a01b0392909216919091179055607e565b600060208284031215606157600080fd5b81516001600160a01b0381168114607757600080fd5b9392505050565b61077f8061008d6000396000f3fe608060405234801561001057600080fd5b50600436106100415760003560e01c80630abd890514610046578063116191b61461005b578063865b36f6146100a4575b600080fd5b6100596100543660046104c4565b6100b7565b005b60005461007b9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b6100596100b236600461057f565b6102af565b60008383836040516024016100ce93929190610674565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe04d4f970000000000000000000000000000000000000000000000000000000017905260005490517f095ea7b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff91821660048201526024810189905291925086169063095ea7b3906044016020604051808303816000875af11580156101be573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101e2919061069e565b610218576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000546040517f7993c1e000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff90911690637993c1e090610274908a908a908a9087906004016106c2565b600060405180830381600087803b15801561028e57600080fd5b505af11580156102a2573d6000803e3d6000fd5b5050505050505050505050565b60008383836040516024016102c693929190610674565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe04d4f970000000000000000000000000000000000000000000000000000000017905260005490517f5d40e17800000000000000000000000000000000000000000000000000000000815291925073ffffffffffffffffffffffffffffffffffffffff1690635d40e1789061039690899089908690600401610714565b600060405180830381600087803b1580156103b057600080fd5b505af11580156103c4573d6000803e3d6000fd5b50505050505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600082601f83011261041057600080fd5b81356020830160008067ffffffffffffffff841115610431576104316103d0565b506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f85018116603f0116810181811067ffffffffffffffff8211171561047e5761047e6103d0565b60405283815290508082840187101561049657600080fd5b838360208301376000602085830101528094505050505092915050565b80151581146104c157600080fd5b50565b60008060008060008060c087890312156104dd57600080fd5b863567ffffffffffffffff8111156104f457600080fd5b61050089828a016103ff565b96505060208701359450604087013573ffffffffffffffffffffffffffffffffffffffff8116811461053157600080fd5b9350606087013567ffffffffffffffff81111561054d57600080fd5b61055989828a016103ff565b9350506080870135915060a0870135610571816104b3565b809150509295509295509295565b600080600080600060a0868803121561059757600080fd5b853567ffffffffffffffff8111156105ae57600080fd5b6105ba888289016103ff565b95505060208601359350604086013567ffffffffffffffff8111156105de57600080fd5b6105ea888289016103ff565b935050606086013591506080860135610602816104b3565b809150509295509295909350565b6000815180845260005b818110156106365760208185018101518683018201520161061a565b5060006020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b6060815260006106876060830186610610565b602083019490945250901515604090910152919050565b6000602082840312156106b057600080fd5b81516106bb816104b3565b9392505050565b6080815260006106d56080830187610610565b85602084015273ffffffffffffffffffffffffffffffffffffffff8516604084015282810360608401526107098185610610565b979650505050505050565b6060815260006107276060830186610610565b846020840152828103604084015261073f8185610610565b969550505050505056fea26469706673582212209d22131b764d02d8f03ee38eaacde43686f4912b77276b56d25b86546826c23564736f6c634300081a0033", + Bin: "0x6080604052348015600f57600080fd5b5060405161080c38038061080c833981016040819052602c916050565b600080546001600160a01b0319166001600160a01b0392909216919091179055607e565b600060208284031215606157600080fd5b81516001600160a01b0381168114607757600080fd5b9392505050565b61077f8061008d6000396000f3fe608060405234801561001057600080fd5b50600436106100415760003560e01c80630abd890514610046578063116191b61461005b578063865b36f6146100a4575b600080fd5b6100596100543660046104c4565b6100b7565b005b60005461007b9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b6100596100b236600461057f565b6102af565b60008383836040516024016100ce93929190610674565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe04d4f970000000000000000000000000000000000000000000000000000000017905260005490517f095ea7b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff91821660048201526024810189905291925086169063095ea7b3906044016020604051808303816000875af11580156101be573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101e2919061069e565b610218576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000546040517f7993c1e000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff90911690637993c1e090610274908a908a908a9087906004016106c2565b600060405180830381600087803b15801561028e57600080fd5b505af11580156102a2573d6000803e3d6000fd5b5050505050505050505050565b60008383836040516024016102c693929190610674565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe04d4f970000000000000000000000000000000000000000000000000000000017905260005490517f5d40e17800000000000000000000000000000000000000000000000000000000815291925073ffffffffffffffffffffffffffffffffffffffff1690635d40e1789061039690899089908690600401610714565b600060405180830381600087803b1580156103b057600080fd5b505af11580156103c4573d6000803e3d6000fd5b50505050505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600082601f83011261041057600080fd5b81356020830160008067ffffffffffffffff841115610431576104316103d0565b506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f85018116603f0116810181811067ffffffffffffffff8211171561047e5761047e6103d0565b60405283815290508082840187101561049657600080fd5b838360208301376000602085830101528094505050505092915050565b80151581146104c157600080fd5b50565b60008060008060008060c087890312156104dd57600080fd5b863567ffffffffffffffff8111156104f457600080fd5b61050089828a016103ff565b96505060208701359450604087013573ffffffffffffffffffffffffffffffffffffffff8116811461053157600080fd5b9350606087013567ffffffffffffffff81111561054d57600080fd5b61055989828a016103ff565b9350506080870135915060a0870135610571816104b3565b809150509295509295509295565b600080600080600060a0868803121561059757600080fd5b853567ffffffffffffffff8111156105ae57600080fd5b6105ba888289016103ff565b95505060208601359350604086013567ffffffffffffffff8111156105de57600080fd5b6105ea888289016103ff565b935050606086013591506080860135610602816104b3565b809150509295509295909350565b6000815180845260005b818110156106365760208185018101518683018201520161061a565b5060006020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b6060815260006106876060830186610610565b602083019490945250901515604090910152919050565b6000602082840312156106b057600080fd5b81516106bb816104b3565b9392505050565b6080815260006106d56080830187610610565b85602084015273ffffffffffffffffffffffffffffffffffffffff8516604084015282810360608401526107098185610610565b979650505050505050565b6060815260006107276060830186610610565b846020840152828103604084015261073f8185610610565b969550505050505056fea2646970667358221220913e9e4f584646fcff086caec1531d2f19fc055665166453bbf086af95b2e48464736f6c634300081a0033", } // SenderZEVMABI is the input ABI used to generate the binding from. diff --git a/v2/pkg/zetaconnectornative.t.sol/zetaconnectornativetest.go b/v2/pkg/zetaconnectornative.t.sol/zetaconnectornativetest.go index 354496d9..0f3d69d6 100644 --- a/v2/pkg/zetaconnectornative.t.sol/zetaconnectornativetest.go +++ b/v2/pkg/zetaconnectornative.t.sol/zetaconnectornativetest.go @@ -50,7 +50,7 @@ type StdInvariantFuzzSelector struct { // ZetaConnectorNativeTestMetaData contains all meta data concerning the ZetaConnectorNativeTest contract. var ZetaConnectorNativeTestMetaData = &bind.MetaData{ ABI: "[{\"type\":\"function\",\"name\":\"IS_TEST\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"PAUSER_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"WITHDRAWER_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeArtifacts\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedArtifacts_\",\"type\":\"string[]\",\"internalType\":\"string[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeContracts\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedContracts_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeSelectors\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedSelectors_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzSelector[]\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"selectors\",\"type\":\"bytes4[]\",\"internalType\":\"bytes4[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeSenders\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedSenders_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"failed\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"setUp\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"targetArtifactSelectors\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedArtifactSelectors_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzArtifactSelector[]\",\"components\":[{\"name\":\"artifact\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"selectors\",\"type\":\"bytes4[]\",\"internalType\":\"bytes4[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetArtifacts\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedArtifacts_\",\"type\":\"string[]\",\"internalType\":\"string[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetContracts\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedContracts_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetInterfaces\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedInterfaces_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzInterface[]\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"artifacts\",\"type\":\"string[]\",\"internalType\":\"string[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetSelectors\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedSelectors_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzSelector[]\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"selectors\",\"type\":\"bytes4[]\",\"internalType\":\"bytes4[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetSenders\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedSenders_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"testWithdraw\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawAndCallReceiveERC20\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawAndCallReceiveERC20FailsIfSenderIsNotWithdrawer\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawAndCallReceiveERC20Partial\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawAndCallReceiveNoParams\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawAndRevert\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawAndRevertFailsIfSenderIsNotWithdrawer\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawFailsIfSenderIsNotWithdrawer\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawTogglePause\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"event\",\"name\":\"Call\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"receiver\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Deposit\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"receiver\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"asset\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Executed\",\"inputs\":[{\"name\":\"destination\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ExecutedWithERC20\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedERC20\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"token\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"destination\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedNoParams\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedNonPayable\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"strs\",\"type\":\"string[]\",\"indexed\":false,\"internalType\":\"string[]\"},{\"name\":\"nums\",\"type\":\"uint256[]\",\"indexed\":false,\"internalType\":\"uint256[]\"},{\"name\":\"flag\",\"type\":\"bool\",\"indexed\":false,\"internalType\":\"bool\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedPayable\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"str\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"num\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"flag\",\"type\":\"bool\",\"indexed\":false,\"internalType\":\"bool\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedRevert\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Reverted\",\"inputs\":[{\"name\":\"destination\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RevertedWithERC20\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Withdraw\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"WithdrawAndCall\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"WithdrawAndRevert\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log\",\"inputs\":[{\"name\":\"\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_address\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_array\",\"inputs\":[{\"name\":\"val\",\"type\":\"uint256[]\",\"indexed\":false,\"internalType\":\"uint256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_array\",\"inputs\":[{\"name\":\"val\",\"type\":\"int256[]\",\"indexed\":false,\"internalType\":\"int256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_array\",\"inputs\":[{\"name\":\"val\",\"type\":\"address[]\",\"indexed\":false,\"internalType\":\"address[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_bytes\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_bytes32\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_int\",\"inputs\":[{\"name\":\"\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_address\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_array\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"uint256[]\",\"indexed\":false,\"internalType\":\"uint256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_array\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"int256[]\",\"indexed\":false,\"internalType\":\"int256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_array\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"address[]\",\"indexed\":false,\"internalType\":\"address[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_bytes\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_bytes32\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_decimal_int\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"},{\"name\":\"decimals\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_decimal_uint\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"decimals\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_int\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_string\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_uint\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_string\",\"inputs\":[{\"name\":\"\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_uint\",\"inputs\":[{\"name\":\"\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"logs\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"AccessControlUnauthorizedAccount\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"neededRole\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"type\":\"error\",\"name\":\"ApprovalFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ConnectorInitialized\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"CustodyInitialized\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"DepositFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"EnforcedPause\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ExecutionFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientERC20Amount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientETHAmount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NotWhitelistedInCustody\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZeroAddress\",\"inputs\":[]}]", - Bin: "0x6080604052600c8054600160ff199182168117909255601f80549091169091179055348015602c57600080fd5b5061e11a8061003c6000396000f3fe608060405234801561001057600080fd5b50600436106101985760003560e01c8063b0464fdc116100e3578063dcf7d0371161008c578063e63ab1e911610066578063e63ab1e9146102ce578063fa7626d4146102f5578063fe574f841461030257600080fd5b8063dcf7d037146102b6578063de1cb76c146102be578063e20c9f71146102c657600080fd5b8063c1909972116100bd578063c19099721461029e578063ccb0e3f2146102a6578063d509b16c146102ae57600080fd5b8063b0464fdc14610276578063b5508aa91461027e578063ba414fa61461028657600080fd5b8063493465581161014557806385226c811161011f57806385226c811461021757806385f438c11461022c578063916a17c61461026157600080fd5b806349346558146101f257806366d9a9a0146101fa578063828320141461020f57600080fd5b80633cba0107116101765780633cba0107146101da5780633e5e3c23146101e25780633f7286f4146101ea57600080fd5b80630a9254e41461019d5780631ed7831c146101a75780632ade3880146101c5575b600080fd5b6101a561030a565b005b6101af610a70565b6040516101bc9190618259565b60405180910390f35b6101cd610ad2565b6040516101bc91906182f5565b6101a5610c14565b6101af6113ce565b6101af61142e565b6101a561148e565b610202611ad1565b6040516101bc919061845b565b6101a5611c53565b61021f611eac565b6040516101bc91906184f9565b6102537f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b6040519081526020016101bc565b610269611f7c565b6040516101bc9190618570565b610269612077565b61021f612172565b61028e612242565b60405190151581526020016101bc565b6101a5612316565b6101a5612581565b6101a56130ad565b6101a56130e9565b6101a5613790565b6101af613ddd565b6102537f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b601f5461028e9060ff1681565b6101a5613e3d565b602580547fffffffffffffffffffffffff000000000000000000000000000000000000000090811630179091556026805482166112341790556027805490911661567817905560405161035c9061816c565b604080825260049082018190527f7a6574610000000000000000000000000000000000000000000000000000000060608301526080602083018190528201527f5a4554410000000000000000000000000000000000000000000000000000000060a082015260c001604051809103906000f0801580156103e0573d6000803e3d6000fd5b50602480547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039283169081178255604080518082018252600e81527f4761746577617945564d2e736f6c0000000000000000000000000000000000006020820152602754602554925190861694810194909452604484019290925290921660648201526104d1919060840160408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fc0c53b8b0000000000000000000000000000000000000000000000000000000017905261405b565b601f80547fffffffffffffffffffffff0000000000000000000000000000000000000000ff166101006001600160a01b0393841681029190911791829055602080549190920483167fffffffffffffffffffffffff0000000000000000000000000000000000000000909116811790915560275460255460405192939182169291169061055d90618179565b6001600160a01b03938416815291831660208301529091166040820152606001604051809103906000f080158015610599573d6000803e3d6000fd5b50602280547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392831617905560205460245460275460255460405193851694928316939183169216906105f490618186565b6001600160a01b039485168152928416602084015290831660408301529091166060820152608001604051809103906000f080158015610638573d6000803e3d6000fd5b50602380547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039290921691909117905560405161067d90618193565b604051809103906000f080158015610699573d6000803e3d6000fd5b50602180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039283161790556027546040517fc88a5e6d00000000000000000000000000000000000000000000000000000000815291166004820152670de0b6b3a76400006024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c88a5e6d90604401600060405180830381600087803b15801561074557600080fd5b505af1158015610759573d6000803e3d6000fd5b50506025546040517f06447d560000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506306447d569150602401600060405180830381600087803b1580156107cf57600080fd5b505af11580156107e3573d6000803e3d6000fd5b50506020546022546040517fae7a3a6f0000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201529116925063ae7a3a6f9150602401600060405180830381600087803b15801561084957600080fd5b505af115801561085d573d6000803e3d6000fd5b50506020546023546040517f10188aef0000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152911692506310188aef9150602401600060405180830381600087803b1580156108c357600080fd5b505af11580156108d7573d6000803e3d6000fd5b505050507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b03166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561093957600080fd5b505af115801561094d573d6000803e3d6000fd5b5050602480546023546040517f40c10f190000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152624c4b40938101939093521692506340c10f199150604401600060405180830381600087803b1580156109be57600080fd5b505af11580156109d2573d6000803e3d6000fd5b50506027546040517fc88a5e6d0000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152670de0b6b3a76400006024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c88a5e6d9150604401600060405180830381600087803b158015610a5657600080fd5b505af1158015610a6a573d6000803e3d6000fd5b50505050565b60606016805480602002602001604051908101604052809291908181526020018280548015610ac857602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610aaa575b5050505050905090565b6060601e805480602002602001604051908101604052809291908181526020016000905b82821015610c0b57600084815260208082206040805180820182526002870290920180546001600160a01b03168352600181018054835181870281018701909452808452939591948681019491929084015b82821015610bf4578382906000526020600020018054610b6790618607565b80601f0160208091040260200160405190810160405280929190818152602001828054610b9390618607565b8015610be05780601f10610bb557610100808354040283529160200191610be0565b820191906000526020600020905b815481529060010190602001808311610bc357829003601f168201915b505050505081526020019060010190610b48565b505050508152505081526020019060010190610af6565b50505050905090565b60248054602654604051620186a09381018490526001600160a01b03928316604482015291166064820152600090819060840160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f357fc5a2000000000000000000000000000000000000000000000000000000001790526024805460265492516370a0823160e01b81526001600160a01b0393841660048201529394506000939216916370a082319101602060405180830381865afa158015610cef573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d139190618654565b9050610d2081600061407a565b602480546023546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa158015610d70573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d949190618654565b6020546040516001600160a01b0390911660248201526044810187905290915060009060640160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb0000000000000000000000000000000000000000000000000000000017905260245490517ff30c7ba3000000000000000000000000000000000000000000000000000000008152919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f30c7ba391610e77916001600160a01b039190911690600090869060040161866d565b600060405180830381600087803b158015610e9157600080fd5b505af1158015610ea5573d6000803e3d6000fd5b50506021546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b158015610f3757600080fd5b505af1158015610f4b573d6000803e3d6000fd5b505060208054602454602654604080516001600160a01b0394851681529485018d905291831684830152919091166060830152517f2b58128f24a9f59127cc5b5430d70542b22220f2d9adaa86e442b816ab98af609350908190036080019150a16023546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b15801561103a57600080fd5b505af115801561104e573d6000803e3d6000fd5b50506021546040516001600160a01b0390911692507f7772f56296d3a5202974a45c61c9188d844ab4d6eeb18c851e4b8d5384ca6ced91506110939089908890618695565b60405180910390a260275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156110f457600080fd5b505af1158015611108573d6000803e3d6000fd5b50506023546021546040517f5e3e9fef0000000000000000000000000000000000000000000000000000000081526001600160a01b039283169450635e3e9fef935061116092909116908a9089908b906004016186ae565b600060405180830381600087803b15801561117a57600080fd5b505af115801561118e573d6000803e3d6000fd5b5050602480546026546040516370a0823160e01b81526001600160a01b03918216600482015260009550911692506370a0823191015b602060405180830381865afa1580156111e1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112059190618654565b9050611211818861407a565b602480546023546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa158015611261573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112859190618654565b905061129a816112958a87618716565b61407a565b602480546020546021546040517fdd62ed3e0000000000000000000000000000000000000000000000000000000081526001600160a01b0392831660048201529082169381019390935260009291169063dd62ed3e90604401602060405180830381865afa158015611310573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113349190618654565b905061134181600061407a565b602480546020546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa158015611391573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113b59190618654565b90506113c281600061407a565b50505050505050505050565b60606018805480602002602001604051908101604052809291908181526020018280548015610ac8576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311610aaa575050505050905090565b60606017805480602002602001604051908101604052809291908181526020018280548015610ac8576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311610aaa575050505050905090565b604080516004808252602480830184526020830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f6ed70169000000000000000000000000000000000000000000000000000000001790525460265493516370a0823160e01b8152620186a0946000949385936001600160a01b03908116936370a082319361152f93921691016001600160a01b0391909116815260200190565b602060405180830381865afa15801561154c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115709190618654565b905061157d81600061407a565b602480546023546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa1580156115cd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115f19190618654565b6020546040516001600160a01b0390911660248201526044810187905290915060009060640160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb0000000000000000000000000000000000000000000000000000000017905260245490517ff30c7ba3000000000000000000000000000000000000000000000000000000008152919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f30c7ba3916116d4916001600160a01b039190911690600090869060040161866d565b600060405180830381600087803b1580156116ee57600080fd5b505af1158015611702573d6000803e3d6000fd5b50506021546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b15801561179457600080fd5b505af11580156117a8573d6000803e3d6000fd5b5050602080546040516001600160a01b0390911681527fbcaadb46b82a48af60b608f58959ae6b8310d1b0a0d094c2e9ec3208ed39f2a0935001905060405180910390a16023546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b15801561187a57600080fd5b505af115801561188e573d6000803e3d6000fd5b50506021546040516001600160a01b0390911692507f7772f56296d3a5202974a45c61c9188d844ab4d6eeb18c851e4b8d5384ca6ced91506118d39089908890618695565b60405180910390a260275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561193457600080fd5b505af1158015611948573d6000803e3d6000fd5b50506023546021546040517f5e3e9fef0000000000000000000000000000000000000000000000000000000081526001600160a01b039283169450635e3e9fef93506119a092909116908a9089908b906004016186ae565b600060405180830381600087803b1580156119ba57600080fd5b505af11580156119ce573d6000803e3d6000fd5b5050602480546026546040516370a0823160e01b81526001600160a01b03918216600482015260009550911692506370a082319101602060405180830381865afa158015611a20573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a449190618654565b9050611a5181600061407a565b602480546023546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa158015611aa1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ac59190618654565b905061129a818561407a565b6060601b805480602002602001604051908101604052809291908181526020016000905b82821015610c0b5783829060005260206000209060020201604051806040016040529081600082018054611b2890618607565b80601f0160208091040260200160405190810160405280929190818152602001828054611b5490618607565b8015611ba15780601f10611b7657610100808354040283529160200191611ba1565b820191906000526020600020905b815481529060010190602001808311611b8457829003601f168201915b5050505050815260200160018201805480602002602001604051908101604052809291908181526020018280548015611c3b57602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019060040190602082600301049283019260010382029150808411611be85790505b50505050508152505081526020019060010190611af5565b6040517f68656c6c6f0000000000000000000000000000000000000000000000000000006020820152620186a090600090819060250160408051808303601f190181529082905260255463ca669fa760e01b83526001600160a01b031660048301529150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015611cf057600080fd5b505af1158015611d04573d6000803e3d6000fd5b5050602554604080516001600160a01b0390921660248301527f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e460448084019190915281518084039091018152606490920181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb39250611def9190600401618729565b600060405180830381600087803b158015611e0957600080fd5b505af1158015611e1d573d6000803e3d6000fd5b50506023546021546040517f02d5c8990000000000000000000000000000000000000000000000000000000081526001600160a01b0392831694506302d5c8999350611e7592909116908790869088906004016186ae565b600060405180830381600087803b158015611e8f57600080fd5b505af1158015611ea3573d6000803e3d6000fd5b50505050505050565b6060601a805480602002602001604051908101604052809291908181526020016000905b82821015610c0b578382906000526020600020018054611eef90618607565b80601f0160208091040260200160405190810160405280929190818152602001828054611f1b90618607565b8015611f685780601f10611f3d57610100808354040283529160200191611f68565b820191906000526020600020905b815481529060010190602001808311611f4b57829003601f168201915b505050505081526020019060010190611ed0565b6060601d805480602002602001604051908101604052809291908181526020016000905b82821015610c0b5760008481526020908190206040805180820182526002860290920180546001600160a01b0316835260018101805483518187028101870190945280845293949193858301939283018282801561205f57602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168152602001906004019060208260030104928301926001038202915080841161200c5790505b50505050508152505081526020019060010190611fa0565b6060601c805480602002602001604051908101604052809291908181526020016000905b82821015610c0b5760008481526020908190206040805180820182526002860290920180546001600160a01b0316835260018101805483518187028101870190945280845293949193858301939283018282801561215a57602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190600401906020826003010492830192600103820291508084116121075790505b5050505050815250508152602001906001019061209b565b60606019805480602002602001604051908101604052809291908181526020016000905b82821015610c0b5783829060005260206000200180546121b590618607565b80601f01602080910402602001604051908101604052809291908181526020018280546121e190618607565b801561222e5780601f106122035761010080835404028352916020019161222e565b820191906000526020600020905b81548152906001019060200180831161221157829003601f168201915b505050505081526020019060010190612196565b60085460009060ff161561225a575060085460ff1690565b6040517f667f9d70000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d600482018190527f6661696c65640000000000000000000000000000000000000000000000000000602483015260009163667f9d7090604401602060405180830381865afa1580156122eb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061230f9190618654565b1415905090565b60248054602654604051620186a09381018490526001600160a01b03928316604482015291166064820152600090819060840160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f357fc5a200000000000000000000000000000000000000000000000000000000179052602554905163ca669fa760e01b81526001600160a01b039091166004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156123fc57600080fd5b505af1158015612410573d6000803e3d6000fd5b5050602554604080516001600160a01b0390921660248301527f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e460448084019190915281518084039091018152606490920181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb392506124fb9190600401618729565b600060405180830381600087803b15801561251557600080fd5b505af1158015612529573d6000803e3d6000fd5b50506023546021546040517f5e3e9fef0000000000000000000000000000000000000000000000000000000081526001600160a01b039283169450635e3e9fef9350611e7592909116908790869088906004016186ae565b60275460405163ca669fa760e01b81526001600160a01b039091166004820152620186a090600090737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156125e257600080fd5b505af11580156125f6573d6000803e3d6000fd5b5050602754604080516001600160a01b0390921660248301527f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a60448084019190915281518084039091018152606490920181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb392506126e19190600401618729565b600060405180830381600087803b1580156126fb57600080fd5b505af115801561270f573d6000803e3d6000fd5b50505050602360009054906101000a90046001600160a01b03166001600160a01b0316638456cb596040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561276357600080fd5b505af1158015612777573d6000803e3d6000fd5b505060275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b1580156127d457600080fd5b505af11580156127e8573d6000803e3d6000fd5b5050602754604080516001600160a01b0390921660248301527f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a60448084019190915281518084039091018152606490920181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb392506128d39190600401618729565b600060405180830381600087803b1580156128ed57600080fd5b505af1158015612901573d6000803e3d6000fd5b50505050602360009054906101000a90046001600160a01b03166001600160a01b0316633f4ba83a6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561295557600080fd5b505af1158015612969573d6000803e3d6000fd5b505060255460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b1580156129c657600080fd5b505af11580156129da573d6000803e3d6000fd5b50505050602360009054906101000a90046001600160a01b03166001600160a01b0316638456cb596040518163ffffffff1660e01b8152600401600060405180830381600087803b158015612a2e57600080fd5b505af1158015612a42573d6000803e3d6000fd5b50506040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fd93c0665000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b158015612acb57600080fd5b505af1158015612adf573d6000803e3d6000fd5b505060275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b158015612b3c57600080fd5b505af1158015612b50573d6000803e3d6000fd5b50506023546026546040517f106e62900000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260248101879052604481018690529116925063106e62909150606401600060405180830381600087803b158015612bc457600080fd5b505af1158015612bd8573d6000803e3d6000fd5b505060255460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b158015612c3557600080fd5b505af1158015612c49573d6000803e3d6000fd5b50505050602360009054906101000a90046001600160a01b03166001600160a01b0316633f4ba83a6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015612c9d57600080fd5b505af1158015612cb1573d6000803e3d6000fd5b5050602480546026546040516370a0823160e01b81526001600160a01b03918216600482015260009550911692506370a0823191015b602060405180830381865afa158015612d04573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d289190618654565b9050612d3581600061407a565b6026546040516001600160a01b0390911660248201526044810184905260009060640160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb0000000000000000000000000000000000000000000000000000000017905260245490517ff30c7ba3000000000000000000000000000000000000000000000000000000008152919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f30c7ba391612e15916001600160a01b039190911690600090869060040161866d565b600060405180830381600087803b158015612e2f57600080fd5b505af1158015612e43573d6000803e3d6000fd5b50506023546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b158015612ed557600080fd5b505af1158015612ee9573d6000803e3d6000fd5b50506026546040518781526001600160a01b0390911692507f884edad9ce6fa2440d8a54cc123490eb96d2768479d49ff9c7366125a9424364915060200160405180910390a260275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015612f8857600080fd5b505af1158015612f9c573d6000803e3d6000fd5b50506023546026546040517f106e62900000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260248101899052604481018890529116925063106e62909150606401600060405180830381600087803b15801561301057600080fd5b505af1158015613024573d6000803e3d6000fd5b5050602480546026546040516370a0823160e01b81526001600160a01b03918216600482015260009550911692506370a082319101602060405180830381865afa158015613076573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061309a9190618654565b90506130a6818661407a565b5050505050565b602480546026546040516370a0823160e01b81526001600160a01b039182166004820152620186a093600093849316916370a082319101612ce7565b60248054602654604051620186a09381018490526001600160a01b03928316604482015291166064820152600090819060840160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fc5131691000000000000000000000000000000000000000000000000000000001790526024805460265492516370a0823160e01b81526001600160a01b0393841660048201529394506000939216916370a082319101602060405180830381865afa1580156131c4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131e89190618654565b90506131f581600061407a565b602480546023546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa158015613245573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132699190618654565b6020546040516001600160a01b0390911660248201526044810187905290915060009060640160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb0000000000000000000000000000000000000000000000000000000017905260245490517ff30c7ba3000000000000000000000000000000000000000000000000000000008152919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f30c7ba39161334c916001600160a01b039190911690600090869060040161866d565b600060405180830381600087803b15801561336657600080fd5b505af115801561337a573d6000803e3d6000fd5b50506021546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b15801561340c57600080fd5b505af1158015613420573d6000803e3d6000fd5b50506020547f2b58128f24a9f59127cc5b5430d70542b22220f2d9adaa86e442b816ab98af6092506001600160a01b0316905061345e60028961873c565b602454602654604080516001600160a01b03958616815260208101949094529184168383015292909216606082015290519081900360800190a16023546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b15801561352657600080fd5b505af115801561353a573d6000803e3d6000fd5b50506021546040516001600160a01b0390911692507f7772f56296d3a5202974a45c61c9188d844ab4d6eeb18c851e4b8d5384ca6ced915061357f9089908890618695565b60405180910390a260275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156135e057600080fd5b505af11580156135f4573d6000803e3d6000fd5b50506023546021546040517f5e3e9fef0000000000000000000000000000000000000000000000000000000081526001600160a01b039283169450635e3e9fef935061364c92909116908a9089908b906004016186ae565b600060405180830381600087803b15801561366657600080fd5b505af115801561367a573d6000803e3d6000fd5b5050602480546026546040516370a0823160e01b81526001600160a01b03918216600482015260009550911692506370a082319101602060405180830381865afa1580156136cc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136f09190618654565b90506137018161129560028a61873c565b602480546023546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa158015613751573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137759190618654565b905061129a8161378660028b61873c565b6112959087618716565b6040517f68656c6c6f0000000000000000000000000000000000000000000000000000006020820152620186a090600090819060250160408051808303601f1901815290829052602480546021546370a0823160e01b85526001600160a01b0390811660048601529294506000939216916370a082319101602060405180830381865afa158015613825573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138499190618654565b905061385681600061407a565b602480546023546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa1580156138a6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138ca9190618654565b6020546040516001600160a01b0390911660248201526044810187905290915060009060640160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb0000000000000000000000000000000000000000000000000000000017905260245490517ff30c7ba3000000000000000000000000000000000000000000000000000000008152919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f30c7ba3916139ad916001600160a01b039190911690600090869060040161866d565b600060405180830381600087803b1580156139c757600080fd5b505af11580156139db573d6000803e3d6000fd5b50506021546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b158015613a6d57600080fd5b505af1158015613a81573d6000803e3d6000fd5b50506020546040517f0d3f65f00e631663aa85c96330b5c7a83bb29af3630c0063776f985edc3037aa9350613ac492506001600160a01b03909116908790618777565b60405180910390a16020546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b158015613b5a57600080fd5b505af1158015613b6e573d6000803e3d6000fd5b50506021546024546040516001600160a01b039283169450911691507f723fc7be2448075379e4fdf1e6bf5fead954d2668d2da05dcb44ccfec4beeda790613bb9908a908990618695565b60405180910390a36023546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b158015613c4f57600080fd5b505af1158015613c63573d6000803e3d6000fd5b50506021546040516001600160a01b0390911692507fba96f26bdda53eb8c8ba39045dfb4ff39753fbc7a6edcf250a88e75e78d102fe9150613ca89089908890618695565b60405180910390a260275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015613d0957600080fd5b505af1158015613d1d573d6000803e3d6000fd5b50506023546021546040517f02d5c8990000000000000000000000000000000000000000000000000000000081526001600160a01b0392831694506302d5c8999350613d7592909116908a9089908b906004016186ae565b600060405180830381600087803b158015613d8f57600080fd5b505af1158015613da3573d6000803e3d6000fd5b5050602480546021546040516370a0823160e01b81526001600160a01b03918216600482015260009550911692506370a0823191016111c4565b60606015805480602002602001604051908101604052809291908181526020018280548015610ac8576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311610aaa575050505050905090565b60255460405163ca669fa760e01b81526001600160a01b039091166004820152620186a090600090737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015613e9e57600080fd5b505af1158015613eb2573d6000803e3d6000fd5b5050602554604080516001600160a01b0390921660248301527f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e460448084019190915281518084039091018152606490920181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb39250613f9d9190600401618729565b600060405180830381600087803b158015613fb757600080fd5b505af1158015613fcb573d6000803e3d6000fd5b50506023546026546040517f106e62900000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260248101879052604481018690529116925063106e62909150606401600060405180830381600087803b15801561403f57600080fd5b505af1158015614053573d6000803e3d6000fd5b505050505050565b60006140656181a0565b6140708484836140f9565b9150505b92915050565b6040517f98296c540000000000000000000000000000000000000000000000000000000081526004810183905260248101829052737109709ecfa91a80626ff3989d68f67f5b1dd12d906398296c549060440160006040518083038186803b1580156140e557600080fd5b505afa158015614053573d6000803e3d6000fd5b6000806141068584614174565b90506141696040518060400160405280601d81526020017f4552433139363750726f78792e736f6c3a4552433139363750726f78790000008152508286604051602001614154929190618777565b60405160208183030381529060405285614180565b9150505b9392505050565b600061416d83836141ae565b60c081015151600090156141a45761419d84848460c001516141c9565b905061416d565b61419d848461436f565b60006141ba838361445a565b61416d83836020015184614180565b6000806141d461446a565b905060006141e2868361453d565b905060006141f982606001518360200151856149e3565b9050600061420983838989614bf5565b9050600061421682615a72565b602081015181519192509060030b1561428957898260400151604051602001614240929190618799565b60408051601f19818403018152908290527f08c379a000000000000000000000000000000000000000000000000000000000825261428091600401618729565b60405180910390fd5b60006142cc6040518060400160405280601581526020017f4465706c6f79656420746f20616464726573733a200000000000000000000000815250836001615c41565b6040517fc6ce059d000000000000000000000000000000000000000000000000000000008152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c6ce059d9061431f908490600401618729565b602060405180830381865afa15801561433c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614360919061881a565b9b9a5050505050505050505050565b6040517f8d1cc9250000000000000000000000000000000000000000000000000000000081526000908190737109709ecfa91a80626ff3989d68f67f5b1dd12d90638d1cc925906143c4908790600401618729565b600060405180830381865afa1580156143e1573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052614409919081019061892b565b905060006144378285604051602001614423929190618960565b604051602081830303815290604052615e41565b90506001600160a01b03811661407057848460405160200161424092919061898f565b61446682826000615e54565b5050565b604080518082018252600381527f6f75740000000000000000000000000000000000000000000000000000000000602082015290517fd145736c000000000000000000000000000000000000000000000000000000008152606091737109709ecfa91a80626ff3989d68f67f5b1dd12d91829063d145736c906144f1908490600401618a3a565b600060405180830381865afa15801561450e573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526145369190810190618a81565b9250505090565b61456f6040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b6000737109709ecfa91a80626ff3989d68f67f5b1dd12d90506145ba6040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b6145c385615f57565b602082015260006145d38661633c565b90506000836001600160a01b031663d930a0e66040518163ffffffff1660e01b8152600401600060405180830381865afa158015614615573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261463d9190810190618a81565b868385602001516040516020016146579493929190618aca565b60408051601f19818403018152908290527f60f9bb1100000000000000000000000000000000000000000000000000000000825291506000906001600160a01b038616906360f9bb11906146af908590600401618729565b600060405180830381865afa1580156146cc573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526146f49190810190618a81565b6040517fdb4235f60000000000000000000000000000000000000000000000000000000081529091506001600160a01b0386169063db4235f69061473c908490600401618bce565b602060405180830381865afa158015614759573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061477d9190618c20565b61479257816040516020016142409190618c42565b6040517f49c4fac80000000000000000000000000000000000000000000000000000000081526001600160a01b038616906349c4fac8906147d7908490600401618cd4565b600060405180830381865afa1580156147f4573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261481c9190810190618a81565b84526040517fdb4235f60000000000000000000000000000000000000000000000000000000081526001600160a01b0386169063db4235f690614863908490600401618d26565b602060405180830381865afa158015614880573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906148a49190618c20565b15614939576040517f49c4fac80000000000000000000000000000000000000000000000000000000081526001600160a01b038616906349c4fac8906148ee908490600401618d26565b600060405180830381865afa15801561490b573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526149339190810190618a81565b60408501525b846001600160a01b03166349c4fac882866000015160405160200161495e9190618d78565b6040516020818303038152906040526040518363ffffffff1660e01b815260040161498a929190618de4565b600060405180830381865afa1580156149a7573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526149cf9190810190618a81565b606085015250608083015250949350505050565b60408051600480825260a0820190925260609160009190816020015b60608152602001906001900390816149ff5790505090506040518060400160405280600481526020017f677265700000000000000000000000000000000000000000000000000000000081525081600081518110614a5f57614a5f618e09565b60200260200101819052506040518060400160405280600381526020017f2d726c000000000000000000000000000000000000000000000000000000000081525081600181518110614ab357614ab3618e09565b602002602001018190525084604051602001614acf9190618e38565b60405160208183030381529060405281600281518110614af157614af1618e09565b602002602001018190525082604051602001614b0d9190618ea4565b60405160208183030381529060405281600381518110614b2f57614b2f618e09565b60200260200101819052506000614b4582615a72565b602080820151604080518082018252600581527f2e6a736f6e0000000000000000000000000000000000000000000000000000008185019081528251808401845260008082529086015282518084019093529051825292810192909252919250614bd690604080518082018252600080825260209182015281518083019092528451825280850190820152906165bf565b614beb57856040516020016142409190618ee5565b9695505050505050565b60a0810151604080518082018252600080825260209182015281518083019092528251808352928101910152606090737109709ecfa91a80626ff3989d68f67f5b1dd12d9015614c45565b511590565b614db957826020015115614d01576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605860248201527f54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f742060448201527f62652075736564207768656e207468652060736b6970566572696679536f757260648201527f6365436f646560206f7074696f6e206973206074727565600000000000000000608482015260a401614280565b8260c0015115614db9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605360248201527f54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f742060448201527f62652075736564207768656e207468652060736b69704c6963656e736554797060648201527f6560206f7074696f6e2069732060747275656000000000000000000000000000608482015260a401614280565b6040805160ff8082526120008201909252600091816020015b6060815260200190600190039081614dd257905050905060006040518060400160405280600381526020017f6e70780000000000000000000000000000000000000000000000000000000000815250828280614e2d90618f76565b935060ff1681518110614e4257614e42618e09565b60200260200101819052506040518060400160405280600d81526020017f302e302e312d616c7068612e3700000000000000000000000000000000000000815250604051602001614e939190618f95565b604051602081830303815290604052828280614eae90618f76565b935060ff1681518110614ec357614ec3618e09565b60200260200101819052506040518060400160405280600681526020017f6465706c6f790000000000000000000000000000000000000000000000000000815250828280614f1090618f76565b935060ff1681518110614f2557614f25618e09565b60200260200101819052506040518060400160405280600e81526020017f2d2d636f6e74726163744e616d65000000000000000000000000000000000000815250828280614f7290618f76565b935060ff1681518110614f8757614f87618e09565b60200260200101819052508760200151828280614fa390618f76565b935060ff1681518110614fb857614fb8618e09565b60200260200101819052506040518060400160405280600e81526020017f2d2d636f6e74726163745061746800000000000000000000000000000000000081525082828061500590618f76565b935060ff168151811061501a5761501a618e09565b60209081029190910101528751828261503281618f76565b935060ff168151811061504757615047618e09565b60200260200101819052506040518060400160405280600981526020017f2d2d636861696e4964000000000000000000000000000000000000000000000081525082828061509490618f76565b935060ff16815181106150a9576150a9618e09565b60200260200101819052506150bd46616620565b82826150c881618f76565b935060ff16815181106150dd576150dd618e09565b60200260200101819052506040518060400160405280600f81526020017f2d2d6275696c64496e666f46696c65000000000000000000000000000000000081525082828061512a90618f76565b935060ff168151811061513f5761513f618e09565b60200260200101819052508682828061515790618f76565b935060ff168151811061516c5761516c618e09565b60209081029190910101528551156152935760408051808201909152601581527f2d2d636f6e7374727563746f7242797465636f64650000000000000000000000602082015282826151bd81618f76565b935060ff16815181106151d2576151d2618e09565b60209081029190910101526040517f71aad10d0000000000000000000000000000000000000000000000000000000081526001600160a01b038416906371aad10d90615222908990600401618729565b600060405180830381865afa15801561523f573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526152679190810190618a81565b828261527281618f76565b935060ff168151811061528757615287618e09565b60200260200101819052505b8460200151156153635760408051808201909152601281527f2d2d766572696679536f75726365436f64650000000000000000000000000000602082015282826152dc81618f76565b935060ff16815181106152f1576152f1618e09565b60200260200101819052506040518060400160405280600581526020017f66616c736500000000000000000000000000000000000000000000000000000081525082828061533e90618f76565b935060ff168151811061535357615353618e09565b602002602001018190525061552a565b61539b614c408660a0015160408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b61542e5760408051808201909152600d81527f2d2d6c6963656e73655479706500000000000000000000000000000000000000602082015282826153de81618f76565b935060ff16815181106153f3576153f3618e09565b60200260200101819052508460a001516040516020016154139190618e38565b60405160208183030381529060405282828061533e90618f76565b8460c0015115801561547157506040808901518151808301835260008082526020918201528251808401909352815183529081019082015261546f90511590565b155b1561552a5760408051808201909152600d81527f2d2d6c6963656e73655479706500000000000000000000000000000000000000602082015282826154b581618f76565b935060ff16815181106154ca576154ca618e09565b60200260200101819052506154de886166c0565b6040516020016154ee9190618e38565b60405160208183030381529060405282828061550990618f76565b935060ff168151811061551e5761551e618e09565b60200260200101819052505b6040808601518151808301835260008082526020918201528251808401909352815183529081019082015261555e90511590565b6155f35760408051808201909152600b81527f2d2d72656c617965724964000000000000000000000000000000000000000000602082015282826155a181618f76565b935060ff16815181106155b6576155b6618e09565b602002602001018190525084604001518282806155d290618f76565b935060ff16815181106155e7576155e7618e09565b60200260200101819052505b6060850151156157145760408051808201909152600681527f2d2d73616c7400000000000000000000000000000000000000000000000000006020820152828261563c81618f76565b935060ff168151811061565157615651618e09565b602090810291909101015260608501516040517fb11a19e800000000000000000000000000000000000000000000000000000000815260048101919091526001600160a01b0384169063b11a19e890602401600060405180830381865afa1580156156c0573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526156e89190810190618a81565b82826156f381618f76565b935060ff168151811061570857615708618e09565b60200260200101819052505b60e085015151156157bb5760408051808201909152600a81527f2d2d6761734c696d6974000000000000000000000000000000000000000000006020820152828261575e81618f76565b935060ff168151811061577357615773618e09565b602002602001018190525061578f8560e0015160000151616620565b828261579a81618f76565b935060ff16815181106157af576157af618e09565b60200260200101819052505b60e085015160200151156158655760408051808201909152600a81527f2d2d6761735072696365000000000000000000000000000000000000000000006020820152828261580881618f76565b935060ff168151811061581d5761581d618e09565b60200260200101819052506158398560e0015160200151616620565b828261584481618f76565b935060ff168151811061585957615859618e09565b60200260200101819052505b60e0850151604001511561590f5760408051808201909152600e81527f2d2d6d6178466565506572476173000000000000000000000000000000000000602082015282826158b281618f76565b935060ff16815181106158c7576158c7618e09565b60200260200101819052506158e38560e0015160400151616620565b82826158ee81618f76565b935060ff168151811061590357615903618e09565b60200260200101819052505b60e085015160600151156159b95760408051808201909152601681527f2d2d6d61785072696f72697479466565506572476173000000000000000000006020820152828261595c81618f76565b935060ff168151811061597157615971618e09565b602002602001018190525061598d8560e0015160600151616620565b828261599881618f76565b935060ff16815181106159ad576159ad618e09565b60200260200101819052505b60008160ff1667ffffffffffffffff8111156159d7576159d7618843565b604051908082528060200260200182016040528015615a0a57816020015b60608152602001906001900390816159f55790505b50905060005b8260ff168160ff161015615a6357838160ff1681518110615a3357615a33618e09565b6020026020010151828260ff1681518110615a5057615a50618e09565b6020908102919091010152600101615a10565b5093505050505b949350505050565b615a996040518060600160405280600060030b815260200160608152602001606081525090565b60408051808201825260048082527f6261736800000000000000000000000000000000000000000000000000000000602083015291517fd145736c000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d92600091849163d145736c91615b1f91869101619000565b600060405180830381865afa158015615b3c573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052615b649190810190618a81565b90506000615b7286836171af565b90506000846001600160a01b031663f45c1ce7836040518263ffffffff1660e01b8152600401615ba291906184f9565b6000604051808303816000875af1158015615bc1573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052615be99190810190619047565b805190915060030b15801590615c025750602081015151155b8015615c115750604081015151155b15614beb5781600081518110615c2957615c29618e09565b602002602001015160405160200161424091906190fd565b60606000615c768560408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600080825260209182015281518083019092528651825280870190820152909150615cad9082905b90617304565b15615e0a576000615d2a82615d2484615d1e615cf08a60408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6040805180820182526000808252602091820152815180830190925282518252918201519181019190915290565b9061732b565b9061738d565b604080518082018252600181527f0a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152909150615d8e908290617304565b15615df857604080518082018252600181527f0a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152615df5905b8290617412565b90505b615e0181617438565b9250505061416d565b8215615e235784846040516020016142409291906192e9565b505060408051602081019091526000815261416d565b509392505050565b6000808251602084016000f09392505050565b8160a0015115615e6357505050565b6000615e708484846174a1565b90506000615e7d82615a72565b602081015181519192509060030b158015615f195750604080518082018252600781527f535543434553530000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152615f1990604080518082018252600080825260209182015281518083019092528451825280850190820152615ca7565b15615f2657505050505050565b60408201515115615f465781604001516040516020016142409190619390565b8060405160200161424091906193ee565b60606000615f8c8360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600481527f2e736f6c0000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152909150615ff1905b82906165bf565b1561606057604080518082018252600481527f2e736f6c000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261416d9061605b908390617a3c565b617438565b604080518082018252600181527f3a00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526160c2905b8290617ac6565b60010361618f57604080518082018252600181527f3a000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261612890615dee565b50604080518082018252600181527f3a000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261416d9061605b905b8390617412565b604080518082018252600581527f2e6a736f6e000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526161ee90615fea565b1561632557604080518082018252600181527f2f00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820181905284518086019095529251845283015290616256908390617b60565b9050600081600183516162699190618716565b8151811061627957616279618e09565b6020026020010151905061631c61605b6162ef6040518060400160405280600581526020017f2e6a736f6e00000000000000000000000000000000000000000000000000000081525060408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b60408051808201825260008082526020918201528151808301909252855182528086019082015290617a3c565b95945050505050565b826040516020016142409190619459565b50919050565b606060006163718360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600481527f2e736f6c00000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201529091506163d390615fea565b156163e15761416d81617438565b604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616440906160bb565b6001036164aa57604080518082018252600181527f3a000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261416d9061605b90616188565b604080518082018252600581527f2e6a736f6e0000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261650990615fea565b1561632557604080518082018252600181527f2f00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820181905284518086019095529251845283015290616571908390617b60565b90506001815111156165ad57806002825161658c9190618716565b8151811061659c5761659c618e09565b602002602001015192505050919050565b50826040516020016142409190619459565b8051825160009111156165d457506000614074565b815183516020850151600092916165ea91619537565b6165f49190618716565b90508260200151810361660b576001915050614074565b82516020840151819020912014905092915050565b6060600061662d83617c05565b600101905060008167ffffffffffffffff81111561664d5761664d618843565b6040519080825280601f01601f191660200182016040528015616677576020820181803683370190505b5090508181016020015b600019017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a850494508461668157509392505050565b604081810151815180830183526000808252602091820181905283518085018552835181529282018383015283518085018552600a81527f554e4c4943454e534544000000000000000000000000000000000000000000008184019081528551808701875283815284019290925284518086019095525184529083015260609161674c905b8290617ce7565b1561678c57505060408051808201909152600481527f4e6f6e65000000000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600981527f556e6c6963656e73650000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526167eb90616745565b1561682b57505060408051808201909152600981527f556e6c6963656e736500000000000000000000000000000000000000000000006020820152919050565b604080518082018252600381527f4d495400000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261688a90616745565b156168ca57505060408051808201909152600381527f4d495400000000000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f47504c2d322e302d6f6e6c7900000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261692990616745565b8061698e5750604080518082018252601081527f47504c2d322e302d6f722d6c61746572000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261698e90616745565b156169ce57505060408051808201909152600981527f474e552047504c763200000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f47504c2d332e302d6f6e6c79000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616a2d90616745565b80616a925750604080518082018252601081527f47504c2d332e302d6f722d6c617465720000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616a9290616745565b15616ad257505060408051808201909152600981527f474e552047504c763300000000000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4c47504c2d322e312d6f6e6c790000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616b3190616745565b80616b965750604080518082018252601181527f4c47504c2d322e312d6f722d6c6174657200000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616b9690616745565b15616bd657505060408051808201909152600c81527f474e55204c47504c76322e3100000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4c47504c2d332e302d6f6e6c790000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616c3590616745565b80616c9a5750604080518082018252601181527f4c47504c2d332e302d6f722d6c6174657200000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616c9a90616745565b15616cda57505060408051808201909152600a81527f474e55204c47504c7633000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f4253442d322d436c61757365000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616d3990616745565b15616d7957505060408051808201909152600c81527f4253442d322d436c6175736500000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f4253442d332d436c61757365000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616dd890616745565b15616e1857505060408051808201909152600c81527f4253442d332d436c6175736500000000000000000000000000000000000000006020820152919050565b604080518082018252600781527f4d504c2d322e300000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616e7790616745565b15616eb757505060408051808201909152600781527f4d504c2d322e30000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600781527f4f534c2d332e300000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616f1690616745565b15616f5657505060408051808201909152600781527f4f534c2d332e30000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600a81527f4170616368652d322e300000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616fb590616745565b15616ff557505060408051808201909152600a81527f4170616368652d322e30000000000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4147504c2d332e302d6f6e6c79000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261705490616745565b806170b95750604080518082018252601181527f4147504c2d332e302d6f722d6c61746572000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526170b990616745565b156170f957505060408051808201909152600a81527f474e55204147504c7633000000000000000000000000000000000000000000006020820152919050565b604080518082018252600881527f4255534c2d312e310000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261715890616745565b1561719857505060408051808201909152600781527f42534c20312e31000000000000000000000000000000000000000000000000006020820152919050565b60408084015184519151614240929060200161954a565b60608060005b845181101561723a57818582815181106171d1576171d1618e09565b60200260200101516040516020016171ea929190618960565b6040516020818303038152906040529150600185516172099190618716565b8114617232578160405160200161722091906196b3565b60405160208183030381529060405291505b6001016171b5565b5060408051600380825260808201909252600091816020015b6060815260200190600190039081617253579050509050838160008151811061727e5761727e618e09565b60200260200101819052506040518060400160405280600281526020017f2d63000000000000000000000000000000000000000000000000000000000000815250816001815181106172d2576172d2618e09565b602002602001018190525081816002815181106172f1576172f1618e09565b6020908102919091010152949350505050565b60208083015183518351928401516000936173229291849190617cfb565b14159392505050565b6040805180820190915260008082526020820152600061735d8460000151856020015185600001518660200151617e0c565b905083602001518161736f9190618716565b8451859061737e908390618716565b90525060208401525090919050565b60408051808201909152600080825260208201528151835110156173b2575081614074565b60208083015190840151600191146173d95750815160208481015190840151829020919020145b801561740a578251845185906173f0908390618716565b9052508251602085018051617406908390619537565b9052505b509192915050565b6040805180820190915260008082526020820152617431838383617f2c565b5092915050565b60606000826000015167ffffffffffffffff81111561745957617459618843565b6040519080825280601f01601f191660200182016040528015617483576020820181803683370190505b50905060006020820190506174318185602001518660000151617fd7565b606060006174ad61446a565b6040805160ff808252612000820190925291925060009190816020015b60608152602001906001900390816174ca57905050905060006040518060400160405280600381526020017f6e7078000000000000000000000000000000000000000000000000000000000081525082828061752590618f76565b935060ff168151811061753a5761753a618e09565b60200260200101819052506040518060400160405280600781526020017f5e312e33322e330000000000000000000000000000000000000000000000000081525060405160200161758b91906196f4565b6040516020818303038152906040528282806175a690618f76565b935060ff16815181106175bb576175bb618e09565b60200260200101819052506040518060400160405280600881526020017f76616c696461746500000000000000000000000000000000000000000000000081525082828061760890618f76565b935060ff168151811061761d5761761d618e09565b6020026020010181905250826040516020016176399190618ea4565b60405160208183030381529060405282828061765490618f76565b935060ff168151811061766957617669618e09565b60200260200101819052506040518060400160405280600a81526020017f2d2d636f6e7472616374000000000000000000000000000000000000000000008152508282806176b690618f76565b935060ff16815181106176cb576176cb618e09565b60200260200101819052506176e08784618051565b82826176eb81618f76565b935060ff168151811061770057617700618e09565b6020908102919091010152855151156177ac5760408051808201909152600b81527f2d2d7265666572656e63650000000000000000000000000000000000000000006020820152828261775281618f76565b935060ff168151811061776757617767618e09565b6020026020010181905250617780866000015184618051565b828261778b81618f76565b935060ff16815181106177a0576177a0618e09565b60200260200101819052505b85608001511561781a5760408051808201909152601881527f2d2d756e73616665536b697053746f72616765436865636b0000000000000000602082015282826177f581618f76565b935060ff168151811061780a5761780a618e09565b6020026020010181905250617880565b84156178805760408051808201909152601281527f2d2d726571756972655265666572656e636500000000000000000000000000006020820152828261785f81618f76565b935060ff168151811061787457617874618e09565b60200260200101819052505b6040860151511561791c5760408051808201909152600d81527f2d2d756e73616665416c6c6f7700000000000000000000000000000000000000602082015282826178ca81618f76565b935060ff16815181106178df576178df618e09565b602002602001018190525085604001518282806178fb90618f76565b935060ff168151811061791057617910618e09565b60200260200101819052505b8560600151156179865760408051808201909152601481527f2d2d756e73616665416c6c6f7752656e616d65730000000000000000000000006020820152828261796581618f76565b935060ff168151811061797a5761797a618e09565b60200260200101819052505b60008160ff1667ffffffffffffffff8111156179a4576179a4618843565b6040519080825280602002602001820160405280156179d757816020015b60608152602001906001900390816179c25790505b50905060005b8260ff168160ff161015617a3057838160ff1681518110617a0057617a00618e09565b6020026020010151828260ff1681518110617a1d57617a1d618e09565b60209081029190910101526001016179dd565b50979650505050505050565b6040805180820190915260008082526020820152815183511015617a61575081614074565b81518351602085015160009291617a7791619537565b617a819190618716565b60208401519091506001908214617aa2575082516020840151819020908220145b8015617abd57835185518690617ab9908390618716565b9052505b50929392505050565b6000808260000151617aea8560000151866020015186600001518760200151617e0c565b617af49190619537565b90505b83516020850151617b089190619537565b81116174315781617b1881619739565b9250508260000151617b4f856020015183617b339190618716565b8651617b3f9190618716565b8386600001518760200151617e0c565b617b599190619537565b9050617af7565b60606000617b6e8484617ac6565b617b79906001619537565b67ffffffffffffffff811115617b9157617b91618843565b604051908082528060200260200182016040528015617bc457816020015b6060815260200190600190039081617baf5790505b50905060005b8151811015615e3957617be061605b8686617412565b828281518110617bf257617bf2618e09565b6020908102919091010152600101617bca565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310617c4e577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310617c7a576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc100008310617c9857662386f26fc10000830492506010015b6305f5e1008310617cb0576305f5e100830492506008015b6127108310617cc457612710830492506004015b60648310617cd6576064830492506002015b600a83106140745760010192915050565b6000617cf38383618091565b159392505050565b600080858411617e025760208411617dae5760008415617d46576001617d22866020618716565b617d2d906008619753565b617d38906002619851565b617d429190618716565b1990505b8351811685617d558989619537565b617d5f9190618716565b805190935082165b818114617d9957878411617d815787945050505050615a6a565b83617d8b8161985d565b945050828451169050617d67565b617da38785619537565b945050505050615a6a565b838320617dbb8588618716565b617dc59087619537565b91505b858210617e0057848220808203617ded57617de38684619537565b9350505050615a6a565b617df8600184618716565b925050617dc8565b505b5092949350505050565b60008381868511617f175760208511617ec65760008515617e58576001617e34876020618716565b617e3f906008619753565b617e4a906002619851565b617e549190618716565b1990505b84518116600087617e698b8b619537565b617e739190618716565b855190915083165b828114617eb857818610617ea057617e938b8b619537565b9650505050505050615a6a565b85617eaa81619739565b965050838651169050617e7b565b859650505050505050615a6a565b508383206000905b617ed88689618716565b8211617f1557858320808203617ef45783945050505050615a6a565b617eff600185619537565b9350508180617f0d90619739565b925050617ece565b505b617f218787619537565b979650505050505050565b60408051808201909152600080825260208201526000617f5e8560000151866020015186600001518760200151617e0c565b602080870180519186019190915251909150617f7a9082618716565b835284516020860151617f8d9190619537565b8103617f9c5760008552617fce565b83518351617faa9190619537565b85518690617fb9908390618716565b9052508351617fc89082619537565b60208601525b50909392505050565b6020811061800f5781518352617fee602084619537565b9250617ffb602083619537565b9150618008602082618716565b9050617fd7565b600019811561803e576001618025836020618716565b61803190610100619851565b61803b9190618716565b90505b9151835183169219169190911790915250565b6060600061805f848461453d565b805160208083015160405193945061807993909101619874565b60405160208183030381529060405291505092915050565b81518151600091908111156180a4575081515b6020808501519084015160005b8381101561815d578251825180821461812d57600019602087101561810c576001846180de896020618716565b6180e89190619537565b6180f3906008619753565b6180fe906002619851565b6181089190618716565b1990505b818116838216818103911461812a5797506140749650505050505050565b50505b618138602086619537565b9450618145602085619537565b935050506020816181569190619537565b90506180b1565b5084518651614beb91906198cc565b610c9f806198ed83390190565b6117988061a58c83390190565b6116638061bd2483390190565b610d5e8061d38783390190565b6040518060e001604052806060815260200160608152602001606081526020016000151581526020016000151581526020016000151581526020016181e36181e8565b905290565b604051806101000160405280600015158152602001600015158152602001606081526020016000801916815260200160608152602001606081526020016000151581526020016181e36040518060800160405280600081526020016000815260200160008152602001600081525090565b602080825282518282018190526000918401906040840190835b8181101561829a5783516001600160a01b0316835260209384019390920191600101618273565b509095945050505050565b60005b838110156182c05781810151838201526020016182a8565b50506000910152565b600081518084526182e18160208601602086016182a5565b601f01601f19169290920160200192915050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b828110156183f1577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452815180516001600160a01b03168652602090810151604082880181905281519088018190529101906060600582901b88018101919088019060005b818110156183d7577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa08a85030183526183c18486516182c9565b6020958601959094509290920191600101618387565b50919750505060209485019492909201915060010161831d565b50929695505050505050565b600081518084526020840193506020830160005b828110156184515781517fffffffff0000000000000000000000000000000000000000000000000000000016865260209586019590910190600101618411565b5093949350505050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b828110156183f1577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc087860301845281518051604087526184c760408801826182c9565b90506020820151915086810360208801526184e281836183fd565b965050506020938401939190910190600101618483565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b828110156183f1577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc087860301845261855b8583516182c9565b94506020938401939190910190600101618521565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b828110156183f1577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc087860301845281516001600160a01b03815116865260208101519050604060208701526185f160408701826183fd565b9550506020938401939190910190600101618598565b600181811c9082168061861b57607f821691505b602082108103616336577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006020828403121561866657600080fd5b5051919050565b6001600160a01b038416815282602082015260606040820152600061631c60608301846182c9565b828152604060208201526000615a6a60408301846182c9565b6001600160a01b03851681528360208201526080604082015260006186d660808301856182c9565b905082606083015295945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b81810381811115614074576140746186e7565b60208152600061416d60208301846182c9565b600082618772577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b6001600160a01b0383168152604060208201526000615a6a60408301846182c9565b7f4661696c656420746f206465706c6f7920636f6e7472616374200000000000008152600083516187d181601a8501602088016182a5565b7f3a20000000000000000000000000000000000000000000000000000000000000601a91840191820152835161880e81601c8401602088016182a5565b01601c01949350505050565b60006020828403121561882c57600080fd5b81516001600160a01b038116811461416d57600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040516060810167ffffffffffffffff8111828210171561889557618895618843565b60405290565b60008067ffffffffffffffff8411156188b6576188b6618843565b50604051601f19601f85018116603f0116810181811067ffffffffffffffff821117156188e5576188e5618843565b6040528381529050808284018510156188fd57600080fd5b615e398460208301856182a5565b600082601f83011261891c57600080fd5b61416d8383516020850161889b565b60006020828403121561893d57600080fd5b815167ffffffffffffffff81111561895457600080fd5b6140708482850161890b565b600083516189728184602088016182a5565b8351908301906189868183602088016182a5565b01949350505050565b7f4661696c656420746f206465706c6f7920636f6e7472616374200000000000008152600083516189c781601a8501602088016182a5565b7f207573696e6720636f6e7374727563746f722064617461202200000000000000601a918401918201528351618a048160338401602088016182a5565b7f220000000000000000000000000000000000000000000000000000000000000060339290910191820152603401949350505050565b60408152600b60408201527f464f554e4452595f4f5554000000000000000000000000000000000000000000606082015260806020820152600061416d60808301846182c9565b600060208284031215618a9357600080fd5b815167ffffffffffffffff811115618aaa57600080fd5b8201601f81018413618abb57600080fd5b6140708482516020840161889b565b60008551618adc818460208a016182a5565b7f2f000000000000000000000000000000000000000000000000000000000000009083019081528551618b16816001840160208a016182a5565b7f2f00000000000000000000000000000000000000000000000000000000000000600192909101918201528451618b548160028401602089016182a5565b6001818301019150507f2f0000000000000000000000000000000000000000000000000000000000000060018201528351618b968160028401602088016182a5565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600292909101918201526007019695505050505050565b604081526000618be160408301846182c9565b8281036020840152600481527f2e6173740000000000000000000000000000000000000000000000000000000060208201526040810191505092915050565b600060208284031215618c3257600080fd5b8151801515811461416d57600080fd5b7f436f756c64206e6f742066696e642041535420696e2061727469666163742000815260008251618c7a81601f8501602087016182a5565b7f2e205365742060617374203d20747275656020696e20666f756e6472792e746f601f9390910192830152507f6d6c000000000000000000000000000000000000000000000000000000000000603f820152604101919050565b604081526000618ce760408301846182c9565b8281036020840152601181527f2e6173742e6162736f6c7574655061746800000000000000000000000000000060208201526040810191505092915050565b604081526000618d3960408301846182c9565b8281036020840152600c81527f2e6173742e6c6963656e7365000000000000000000000000000000000000000060208201526040810191505092915050565b7f2e6d657461646174612e736f75726365732e5b27000000000000000000000000815260008251618db08160148501602087016182a5565b7f275d2e6b656363616b32353600000000000000000000000000000000000000006014939091019283015250602001919050565b604081526000618df760408301856182c9565b828103602084015261416981856182c9565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f2200000000000000000000000000000000000000000000000000000000000000815260008251618e708160018501602087016182a5565b7f22000000000000000000000000000000000000000000000000000000000000006001939091019283015250600201919050565b60008251618eb68184602087016182a5565b7f2f6275696c642d696e666f000000000000000000000000000000000000000000920191825250600b01919050565b7f436f756c64206e6f742066696e64206275696c642d696e666f2066696c65207781527f697468206d61746368696e6720736f7572636520636f6465206861736820666f60208201527f7220636f6e747261637420000000000000000000000000000000000000000000604082015260008251618f6981604b8501602087016182a5565b91909101604b0192915050565b600060ff821660ff8103618f8c57618f8c6186e7565b60010192915050565b7f406f70656e7a657070656c696e2f646566656e6465722d6465706c6f792d636c81527f69656e742d636c69400000000000000000000000000000000000000000000000602082015260008251618ff38160298501602087016182a5565b9190910160290192915050565b60408152601660408201527f4f50454e5a455050454c494e5f424153485f5041544800000000000000000000606082015260806020820152600061416d60808301846182c9565b60006020828403121561905957600080fd5b815167ffffffffffffffff81111561907057600080fd5b82016060818503121561908257600080fd5b61908a618872565b81518060030b811461909b57600080fd5b8152602082015167ffffffffffffffff8111156190b757600080fd5b6190c38682850161890b565b602083015250604082015167ffffffffffffffff8111156190e357600080fd5b6190ef8682850161890b565b604083015250949350505050565b7f4661696c656420746f2072756e206261736820636f6d6d616e6420776974682081527f220000000000000000000000000000000000000000000000000000000000000060208201526000825161915b8160218501602087016182a5565b7f222e20496620796f7520617265207573696e672057696e646f77732c2073657460219390910192830152507f20746865204f50454e5a455050454c494e5f424153485f5041544820656e766960418201527f726f6e6d656e74207661726961626c6520746f207468652066756c6c7920717560618201527f616c69666965642070617468206f66207468652062617368206578656375746160818201527f626c652e20466f72206578616d706c652c20696620796f75206172652075736960a18201527f6e672047697420666f722057696e646f77732c206164642074686520666f6c6c60c18201527f6f77696e67206c696e6520696e20746865202e656e762066696c65206f66207960e18201527f6f75722070726f6a65637420287573696e6720666f727761726420736c6173686101018201527f6573293a0a4f50454e5a455050454c494e5f424153485f504154483d22433a2f6101218201527f50726f6772616d2046696c65732f4769742f62696e2f6261736822000000000061014182015261015c01919050565b7f4661696c656420746f2066696e64206c696e652077697468207072656669782081527f27000000000000000000000000000000000000000000000000000000000000006020820152600083516193478160218501602088016182a5565b7f2720696e206f75747075743a2000000000000000000000000000000000000000602191840191820152835161938481602e8401602088016182a5565b01602e01949350505050565b7f4661696c656420746f2072756e2075706772616465207361666574792076616c81527f69646174696f6e3a200000000000000000000000000000000000000000000000602082015260008251618ff38160298501602087016182a5565b7f55706772616465207361666574792076616c69646174696f6e206661696c656481527f3a0a00000000000000000000000000000000000000000000000000000000000060208201526000825161944c8160228501602087016182a5565b9190910160220192915050565b7f436f6e7472616374206e616d652000000000000000000000000000000000000081526000825161949181600e8501602087016182a5565b7f206d75737420626520696e2074686520666f726d6174204d79436f6e74726163600e9390910192830152507f742e736f6c3a4d79436f6e7472616374206f72204d79436f6e74726163742e73602e8201527f6f6c206f72206f75742f4d79436f6e74726163742e736f6c2f4d79436f6e7472604e8201527f6163742e6a736f6e000000000000000000000000000000000000000000000000606e820152607601919050565b80820180821115614074576140746186e7565b7f53504458206c6963656e7365206964656e7469666965722000000000000000008152600083516195828160188501602088016182a5565b7f20696e200000000000000000000000000000000000000000000000000000000060189184019182015283516195bf81601c8401602088016182a5565b7f20646f6573206e6f74206c6f6f6b206c696b65206120737570706f7274656420601c92909101918201527f6c6963656e736520666f7220626c6f636b206578706c6f726572207665726966603c8201527f69636174696f6e2e205573652074686520606c6963656e73655479706560206f605c8201527f7074696f6e20746f20737065636966792061206c6963656e736520747970652c607c8201527f206f7220736574207468652060736b69704c6963656e73655479706560206f70609c8201527f74696f6e20746f2060747275656020746f20736b69702e00000000000000000060bc82015260d301949350505050565b600082516196c58184602087016182a5565b7f2000000000000000000000000000000000000000000000000000000000000000920191825250600101919050565b7f406f70656e7a657070656c696e2f75706772616465732d636f7265400000000081526000825161972c81601c8501602087016182a5565b91909101601c0192915050565b6000600019820361974c5761974c6186e7565b5060010190565b8082028115828204841417614074576140746186e7565b6001815b60018411156197a557808504811115619789576197896186e7565b600184161561979757908102905b60019390931c92800261976e565b935093915050565b6000826197bc57506001614074565b816197c957506000614074565b81600181146197df57600281146197e957619805565b6001915050614074565b60ff8411156197fa576197fa6186e7565b50506001821b614074565b5060208310610133831016604e8410600b8410161715619828575081810a614074565b619835600019848461976a565b8060001904821115619849576198496186e7565b029392505050565b600061416d83836197ad565b60008161986c5761986c6186e7565b506000190190565b600083516198868184602088016182a5565b7f3a0000000000000000000000000000000000000000000000000000000000000090830190815283516198c08160018401602088016182a5565b01600101949350505050565b8181036000831280158383131683831282161715617431576174316186e756fe608060405234801561001057600080fd5b50604051610c9f380380610c9f83398101604081905261002f9161010d565b8181600361003d83826101ff565b50600461004a82826101ff565b50505050506102bd565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261007b57600080fd5b81516001600160401b0381111561009457610094610054565b604051601f8201601f19908116603f011681016001600160401b03811182821017156100c2576100c2610054565b6040528181528382016020018510156100da57600080fd5b60005b828110156100f9576020818601810151838301820152016100dd565b506000918101602001919091529392505050565b6000806040838503121561012057600080fd5b82516001600160401b0381111561013657600080fd5b6101428582860161006a565b602085015190935090506001600160401b0381111561016057600080fd5b61016c8582860161006a565b9150509250929050565b600181811c9082168061018a57607f821691505b6020821081036101aa57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156101fa57806000526020600020601f840160051c810160208510156101d75750805b601f840160051c820191505b818110156101f757600081556001016101e3565b50505b505050565b81516001600160401b0381111561021857610218610054565b61022c816102268454610176565b846101b0565b6020601f82116001811461026057600083156102485750848201515b600019600385901b1c1916600184901b1784556101f7565b600084815260208120601f198516915b828110156102905787850151825560209485019460019092019101610270565b50848210156102ae5786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b6109d3806102cc6000396000f3fe608060405234801561001057600080fd5b50600436106100be5760003560e01c806340c10f191161007657806395d89b411161005b57806395d89b4114610183578063a9059cbb1461018b578063dd62ed3e1461019e57600080fd5b806340c10f191461013857806370a082311461014d57600080fd5b806318160ddd116100a757806318160ddd1461010457806323b872dd14610116578063313ce5671461012957600080fd5b806306fdde03146100c3578063095ea7b3146100e1575b600080fd5b6100cb6101e4565b6040516100d891906107bf565b60405180910390f35b6100f46100ef366004610854565b610276565b60405190151581526020016100d8565b6002545b6040519081526020016100d8565b6100f461012436600461087e565b610290565b604051601281526020016100d8565b61014b610146366004610854565b6102b4565b005b61010861015b3660046108bb565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6100cb6102c2565b6100f4610199366004610854565b6102d1565b6101086101ac3660046108dd565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6060600380546101f390610910565b80601f016020809104026020016040519081016040528092919081815260200182805461021f90610910565b801561026c5780601f106102415761010080835404028352916020019161026c565b820191906000526020600020905b81548152906001019060200180831161024f57829003601f168201915b5050505050905090565b6000336102848185856102df565b60019150505b92915050565b60003361029e8582856102f1565b6102a98585856103c5565b506001949350505050565b6102be8282610470565b5050565b6060600480546101f390610910565b6000336102848185856103c5565b6102ec83838360016104cc565b505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146103bf57818110156103b0576040517ffb8f41b200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416600482015260248101829052604481018390526064015b60405180910390fd5b6103bf848484840360006104cc565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8316610415576040517f96c6fd1e000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff8216610465576040517fec442f05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b6102ec838383610614565b73ffffffffffffffffffffffffffffffffffffffff82166104c0576040517fec442f05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b6102be60008383610614565b73ffffffffffffffffffffffffffffffffffffffff841661051c576040517fe602df05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff831661056c576040517f94280d62000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260016020908152604080832093871683529290522082905580156103bf578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161060691815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff831661064c5780600260008282546106419190610963565b909155506106fe9050565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260208190526040902054818110156106d2576040517fe450d38c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8516600482015260248101829052604481018390526064016103a7565b73ffffffffffffffffffffffffffffffffffffffff841660009081526020819052604090209082900390555b73ffffffffffffffffffffffffffffffffffffffff821661072757600280548290039055610753565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090208054820190555b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516107b291815260200190565b60405180910390a3505050565b602081526000825180602084015260005b818110156107ed57602081860181015160408684010152016107d0565b5060006040828501015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011684010191505092915050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461084f57600080fd5b919050565b6000806040838503121561086757600080fd5b6108708361082b565b946020939093013593505050565b60008060006060848603121561089357600080fd5b61089c8461082b565b92506108aa6020850161082b565b929592945050506040919091013590565b6000602082840312156108cd57600080fd5b6108d68261082b565b9392505050565b600080604083850312156108f057600080fd5b6108f98361082b565b91506109076020840161082b565b90509250929050565b600181811c9082168061092457607f821691505b60208210810361095d577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b8082018082111561028a577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea26469706673582212207e804ca539d49155d2b6bc19268ce22f9f857027c75247d69fb0d56a089c93d464736f6c634300081a003360a060405234801561001057600080fd5b5060405161179838038061179883398101604081905261002f916101e5565b60016000556002805460ff191690556001600160a01b038316158061005b57506001600160a01b038216155b8061006d57506001600160a01b038116155b1561008b5760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b0383166080526100a3600082610134565b506100ce7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a82610134565b506100f97f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e483610134565b5061011260008051602061177883398151915282610134565b5061012b60008051602061177883398151915283610134565b50505050610228565b60008281526001602090815260408083206001600160a01b038516845290915281205460ff166101bf5760008381526001602081815260408084206001600160a01b0387168086529252808420805460ff19169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45060016101c3565b5060005b92915050565b80516001600160a01b03811681146101e057600080fd5b919050565b6000806000606084860312156101fa57600080fd5b610203846101c9565b9250610211602085016101c9565b915061021f604085016101c9565b90509250925092565b60805161151961025f6000396000818161019e01528181610500015281816105620152818161099101526109f301526115196000f3fe608060405234801561001057600080fd5b506004361061016c5760003560e01c806385f438c1116100cd578063c8a0236211610081578063d936547e11610066578063d936547e14610355578063d9caed1214610378578063e63ab1e91461038b57600080fd5b8063c8a023621461032f578063d547741f1461034257600080fd5b80639a590427116100b25780639a590427146103015780639b19251a14610314578063a217fddf1461032757600080fd5b806385f438c11461029457806391d14854146102bb57600080fd5b806336568abe11610124578063570618e111610109578063570618e11461025a5780635c975abb146102815780638456cb591461028c57600080fd5b806336568abe1461023f5780633f4ba83a1461025257600080fd5b806321fc65f21161015557806321fc65f2146101e5578063248a9ca3146101fa5780632f2ff15d1461022c57600080fd5b806301ffc9a714610171578063116191b614610199575b600080fd5b61018461017f366004611224565b6103b2565b60405190151581526020015b60405180910390f35b6101c07f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610190565b6101f86101f336600461128f565b61044b565b005b61021e61020836600461132c565b6000908152600160208190526040909120015490565b604051908152602001610190565b6101f861023a366004611345565b61064c565b6101f861024d366004611345565b610678565b6101f86106d6565b61021e7f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a81565b60025460ff16610184565b6101f861070b565b61021e7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b6101846102c9366004611345565b600091825260016020908152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b6101f861030f366004611371565b61073d565b6101f8610322366004611371565b61080b565b61021e600081565b6101f861033d36600461128f565b6108dc565b6101f8610350366004611345565b610ac3565b610184610363366004611371565b60036020526000908152604090205460ff1681565b6101f861038636600461138c565b610ae9565b61021e7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061044557507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b610453610c15565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461047d81610c58565b610485610c62565b73ffffffffffffffffffffffffffffffffffffffff861660009081526003602052604090205460ff166104e4576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61052573ffffffffffffffffffffffffffffffffffffffff87167f000000000000000000000000000000000000000000000000000000000000000086610ca1565b6040517f5131ab5900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690635131ab599061059f9089908990899089908990600401611412565b600060405180830381600087803b1580156105b957600080fd5b505af11580156105cd573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167f85b5be9cf454e05e0bddf49315178102227c312078eefa3c00294fb4d912ae4e8686866040516106329392919061146f565b60405180910390a3506106456001600055565b5050505050565b6000828152600160208190526040909120015461066881610c58565b6106728383610d2e565b50505050565b73ffffffffffffffffffffffffffffffffffffffff811633146106c7576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6106d18282610ddb565b505050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61070081610c58565b610708610e7c565b50565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61073581610c58565b610708610edb565b7f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a61076781610c58565b73ffffffffffffffffffffffffffffffffffffffff82166107b4576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216600081815260036020526040808220805460ff19169055517f51085ddf9ebdded84b76e829eb58c4078e4b5bdf97d9a94723f336039da467919190a25050565b7f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a61083581610c58565b73ffffffffffffffffffffffffffffffffffffffff8216610882576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216600081815260036020526040808220805460ff19166001179055517faab7954e9d246b167ef88aeddad35209ca2489d95a8aeb59e288d9b19fae5a549190a25050565b6108e4610c15565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461090e81610c58565b610916610c62565b73ffffffffffffffffffffffffffffffffffffffff861660009081526003602052604090205460ff16610975576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6109b673ffffffffffffffffffffffffffffffffffffffff87167f000000000000000000000000000000000000000000000000000000000000000086610ca1565b6040517fb8969bd400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063b8969bd490610a309089908990899089908990600401611412565b600060405180830381600087803b158015610a4a57600080fd5b505af1158015610a5e573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fb9d4efa96044e5f5e03e696fa9ae2ff66911cc27e8a637c3627c75bc5b2241c88686866040516106329392919061146f565b60008281526001602081905260409091200154610adf81610c58565b6106728383610ddb565b610af1610c15565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e4610b1b81610c58565b610b23610c62565b73ffffffffffffffffffffffffffffffffffffffff841660009081526003602052604090205460ff16610b82576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610ba373ffffffffffffffffffffffffffffffffffffffff85168484610ca1565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f9b1bfa7fa9ee420a16e124f794c35ac9f90472acc99140eb2f6447c714cad8eb84604051610c0291815260200190565b60405180910390a3506106d16001600055565b600260005403610c51576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b6107088133610f18565b60025460ff1615610c9f576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6040805173ffffffffffffffffffffffffffffffffffffffff8416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb000000000000000000000000000000000000000000000000000000001790526106d1908490610fa9565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff16610dd357600083815260016020818152604080842073ffffffffffffffffffffffffffffffffffffffff87168086529252808420805460ff19169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a4506001610445565b506000610445565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff1615610dd357600083815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff86168085529252808320805460ff1916905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a4506001610445565b610e8461103f565b6002805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b610ee3610c62565b6002805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258610eb13390565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16610fa5576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82166004820152602481018390526044015b60405180910390fd5b5050565b6000610fcb73ffffffffffffffffffffffffffffffffffffffff84168361107b565b90508051600014158015610ff0575080806020019051810190610fee9190611492565b155b156106d1576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84166004820152602401610f9c565b60025460ff16610c9f576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606061108983836000611090565b9392505050565b6060814710156110ce576040517fcd786059000000000000000000000000000000000000000000000000000000008152306004820152602401610f9c565b6000808573ffffffffffffffffffffffffffffffffffffffff1684866040516110f791906114b4565b60006040518083038185875af1925050503d8060008114611134576040519150601f19603f3d011682016040523d82523d6000602084013e611139565b606091505b5091509150611149868383611153565b9695505050505050565b60608261116857611163826111e2565b611089565b815115801561118c575073ffffffffffffffffffffffffffffffffffffffff84163b155b156111db576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85166004820152602401610f9c565b5080611089565b8051156111f25780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006020828403121561123657600080fd5b81357fffffffff000000000000000000000000000000000000000000000000000000008116811461108957600080fd5b803573ffffffffffffffffffffffffffffffffffffffff8116811461128a57600080fd5b919050565b6000806000806000608086880312156112a757600080fd5b6112b086611266565b94506112be60208701611266565b935060408601359250606086013567ffffffffffffffff8111156112e157600080fd5b8601601f810188136112f257600080fd5b803567ffffffffffffffff81111561130957600080fd5b88602082840101111561131b57600080fd5b959894975092955050506020019190565b60006020828403121561133e57600080fd5b5035919050565b6000806040838503121561135857600080fd5b8235915061136860208401611266565b90509250929050565b60006020828403121561138357600080fd5b61108982611266565b6000806000606084860312156113a157600080fd5b6113aa84611266565b92506113b860208501611266565b929592945050506040919091013590565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff8616815273ffffffffffffffffffffffffffffffffffffffff851660208201528360408201526080606082015260006114646080830184866113c9565b979650505050505050565b8381526040602082015260006114896040830184866113c9565b95945050505050565b6000602082840312156114a457600080fd5b8151801515811461108957600080fd5b6000825160005b818110156114d557602081860181015185830152016114bb565b50600092019182525091905056fea26469706673582212207ea3ad4ba4a6d39c3be3cec464753448900300ac3b508b4000815de5b914c53064736f6c634300081a00338619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a60c060405234801561001057600080fd5b5060405161166338038061166383398101604081905261002f9161021a565b60016000819055805460ff19169055838383836001600160a01b038416158061005f57506001600160a01b038316155b8061007157506001600160a01b038216155b8061008357506001600160a01b038116155b156100a15760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b03808516608052831660a0526100bf60008261014e565b506100ea7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e48361014e565b506101157f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb8361014e565b506101407f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a8261014e565b50505050505050505061026e565b60008281526002602090815260408083206001600160a01b038516845290915281205460ff166101f45760008381526002602090815260408083206001600160a01b03861684529091529020805460ff191660011790556101ac3390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45060016101f8565b5060005b92915050565b80516001600160a01b038116811461021557600080fd5b919050565b6000806000806080858703121561023057600080fd5b610239856101fe565b9350610247602086016101fe565b9250610255604086016101fe565b9150610263606086016101fe565b905092959194509250565b60805160a05161138a6102d9600039600081816101f701528181610474015281816105250152818161063f015281816107d30152818161088401526109520152600081816101ab01528181610496015281816104f8015281816107f50152610857015261138a6000f3fe608060405234801561001057600080fd5b50600436106101515760003560e01c80635c975abb116100cd57806391d1485411610081578063a783c78911610066578063a783c78914610326578063d547741f1461034d578063e63ab1e91461036057600080fd5b806391d14854146102d8578063a217fddf1461031e57600080fd5b8063743e0c9b116100b2578063743e0c9b146102965780638456cb59146102a957806385f438c1146102b157600080fd5b80635c975abb146102785780635e3e9fef1461028357600080fd5b806321e093b1116101245780632f2ff15d116101095780632f2ff15d1461024a57806336568abe1461025d5780633f4ba83a1461027057600080fd5b806321e093b1146101f2578063248a9ca31461021957600080fd5b806301ffc9a71461015657806302d5c8991461017e578063106e629014610193578063116191b6146101a6575b600080fd5b6101696101643660046110c5565b610387565b60405190151581526020015b60405180910390f35b61019161018c366004611130565b610420565b005b6101916101a13660046111c2565b6105eb565b6101cd7f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610175565b6101cd7f000000000000000000000000000000000000000000000000000000000000000081565b61023c6102273660046111f5565b60009081526002602052604090206001015490565b604051908152602001610175565b61019161025836600461120e565b6106c6565b61019161026b36600461120e565b6106f1565b61019161074a565b60015460ff16610169565b610191610291366004611130565b61077f565b6101916102a43660046111f5565b610930565b61019161097a565b61023c7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b6101696102e636600461120e565b600091825260026020908152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b61023c600081565b61023c7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb81565b61019161035b36600461120e565b6109ac565b61023c7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061041a57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b6104286109d1565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461045281610a14565b61045a610a1e565b6104bb73ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000167f000000000000000000000000000000000000000000000000000000000000000087610a5d565b6040517fb8969bd400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063b8969bd490610555907f0000000000000000000000000000000000000000000000000000000000000000908a908a908a908a90600401611283565b600060405180830381600087803b15801561056f57600080fd5b505af1158015610583573d6000803e3d6000fd5b505050508573ffffffffffffffffffffffffffffffffffffffff167fba96f26bdda53eb8c8ba39045dfb4ff39753fbc7a6edcf250a88e75e78d102fe8686866040516105d1939291906112e0565b60405180910390a2506105e46001600055565b5050505050565b6105f36109d1565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461061d81610a14565b610625610a1e565b61066673ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168585610a5d565b8373ffffffffffffffffffffffffffffffffffffffff167f884edad9ce6fa2440d8a54cc123490eb96d2768479d49ff9c7366125a9424364846040516106ae91815260200190565b60405180910390a2506106c16001600055565b505050565b6000828152600260205260409020600101546106e181610a14565b6106eb8383610ade565b50505050565b73ffffffffffffffffffffffffffffffffffffffff81163314610740576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6106c18282610bde565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61077481610a14565b61077c610c9d565b50565b6107876109d1565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e46107b181610a14565b6107b9610a1e565b61081a73ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000167f000000000000000000000000000000000000000000000000000000000000000087610a5d565b6040517f5131ab5900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690635131ab59906108b4907f0000000000000000000000000000000000000000000000000000000000000000908a908a908a908a90600401611283565b600060405180830381600087803b1580156108ce57600080fd5b505af11580156108e2573d6000803e3d6000fd5b505050508573ffffffffffffffffffffffffffffffffffffffff167f7772f56296d3a5202974a45c61c9188d844ab4d6eeb18c851e4b8d5384ca6ced8686866040516105d1939291906112e0565b610938610a1e565b61077c73ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016333084610d1a565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a6109a481610a14565b61077c610d60565b6000828152600260205260409020600101546109c781610a14565b6106eb8383610bde565b600260005403610a0d576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b61077c8133610db9565b60015460ff1615610a5b576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b60405173ffffffffffffffffffffffffffffffffffffffff8381166024830152604482018390526106c191859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050610e4a565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff16610bd657600083815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff86168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055610b743390565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a450600161041a565b50600061041a565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff1615610bd657600083815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8616808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a450600161041a565b610ca5610ee0565b600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b60405173ffffffffffffffffffffffffffffffffffffffff84811660248301528381166044830152606482018390526106eb9186918216906323b872dd90608401610a97565b610d68610a1e565b600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016811790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25833610cf0565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16610e46576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82166004820152602481018390526044015b60405180910390fd5b5050565b6000610e6c73ffffffffffffffffffffffffffffffffffffffff841683610f1c565b90508051600014158015610e91575080806020019051810190610e8f9190611303565b155b156106c1576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84166004820152602401610e3d565b60015460ff16610a5b576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6060610f2a83836000610f31565b9392505050565b606081471015610f6f576040517fcd786059000000000000000000000000000000000000000000000000000000008152306004820152602401610e3d565b6000808573ffffffffffffffffffffffffffffffffffffffff168486604051610f989190611325565b60006040518083038185875af1925050503d8060008114610fd5576040519150601f19603f3d011682016040523d82523d6000602084013e610fda565b606091505b5091509150610fea868383610ff4565b9695505050505050565b6060826110095761100482611083565b610f2a565b815115801561102d575073ffffffffffffffffffffffffffffffffffffffff84163b155b1561107c576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85166004820152602401610e3d565b5080610f2a565b8051156110935780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000602082840312156110d757600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610f2a57600080fd5b803573ffffffffffffffffffffffffffffffffffffffff8116811461112b57600080fd5b919050565b60008060008060006080868803121561114857600080fd5b61115186611107565b945060208601359350604086013567ffffffffffffffff81111561117457600080fd5b8601601f8101881361118557600080fd5b803567ffffffffffffffff81111561119c57600080fd5b8860208284010111156111ae57600080fd5b959894975060200195606001359392505050565b6000806000606084860312156111d757600080fd5b6111e084611107565b95602085013595506040909401359392505050565b60006020828403121561120757600080fd5b5035919050565b6000806040838503121561122157600080fd5b8235915061123160208401611107565b90509250929050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff8616815273ffffffffffffffffffffffffffffffffffffffff851660208201528360408201526080606082015260006112d560808301848661123a565b979650505050505050565b8381526040602082015260006112fa60408301848661123a565b95945050505050565b60006020828403121561131557600080fd5b81518015158114610f2a57600080fd5b6000825160005b81811015611346576020818601810151858301520161132c565b50600092019182525091905056fea264697066735822122055d09557e5c9ebfe94b17ac42f0790bf256cf4c257e31c46bc4dbb126e31fe1964736f6c634300081a00336080604052348015600f57600080fd5b506001600055610d3a806100246000396000f3fe6080604052600436106100635760003560e01c8063c513169111610040578063c5131691146100c1578063e04d4f97146100e1578063f05b6abf146100f457005b8063357fc5a21461006c5780636ed701691461008c5780638fcaa0b5146100a157005b3661006a57005b005b34801561007857600080fd5b5061006a6100873660046106c0565b610114565b34801561009857600080fd5b5061006a6101aa565b3480156100ad57600080fd5b5061006a6100bc3660046106fc565b6101df565b3480156100cd57600080fd5b5061006a6100dc3660046106c0565b61021e565b61006a6100ef366004610895565b6102f9565b34801561010057600080fd5b5061006a61010f366004610981565b61033d565b61011c610372565b61013e73ffffffffffffffffffffffffffffffffffffffff83163383866103b5565b604080513381526020810185905273ffffffffffffffffffffffffffffffffffffffff848116828401528316606082015290517f2b58128f24a9f59127cc5b5430d70542b22220f2d9adaa86e442b816ab98af609181900360800190a16101a56001600055565b505050565b6040513381527fbcaadb46b82a48af60b608f58959ae6b8310d1b0a0d094c2e9ec3208ed39f2a09060200160405180910390a1565b7f0d3f65f00e631663aa85c96330b5c7a83bb29af3630c0063776f985edc3037aa33838360405161021293929190610a6b565b60405180910390a15050565b610226610372565b6000610233600285610ad5565b90508060000361026f576040517f1f2a200500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61029173ffffffffffffffffffffffffffffffffffffffff84163384846103b5565b604080513381526020810183905273ffffffffffffffffffffffffffffffffffffffff858116828401528416606082015290517f2b58128f24a9f59127cc5b5430d70542b22220f2d9adaa86e442b816ab98af609181900360800190a1506101a56001600055565b7f1f1ff1f5fb41346850b2f5c04e6c767e2f1c8a525c5c0c5cdb60cdf3ca5f62fa3334858585604051610330959493929190610b7e565b60405180910390a1505050565b7f74a53cd528a921fca7dbdee62f86819051d3cc98f214951f4238e8843f20b146338484846040516103309493929190610c08565b6002600054036103ae576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b6040805173ffffffffffffffffffffffffffffffffffffffff85811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd0000000000000000000000000000000000000000000000000000000017905261044a908590610450565b50505050565b600061047273ffffffffffffffffffffffffffffffffffffffff8416836104eb565b905080516000141580156104975750808060200190518101906104959190610ccb565b155b156101a5576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff841660048201526024015b60405180910390fd5b60606104f983836000610500565b9392505050565b60608147101561053e576040517fcd7860590000000000000000000000000000000000000000000000000000000081523060048201526024016104e2565b6000808573ffffffffffffffffffffffffffffffffffffffff1684866040516105679190610ce8565b60006040518083038185875af1925050503d80600081146105a4576040519150601f19603f3d011682016040523d82523d6000602084013e6105a9565b606091505b50915091506105b98683836105c3565b9695505050505050565b6060826105d8576105d382610652565b6104f9565b81511580156105fc575073ffffffffffffffffffffffffffffffffffffffff84163b155b1561064b576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff851660048201526024016104e2565b50806104f9565b8051156106625780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50565b803573ffffffffffffffffffffffffffffffffffffffff811681146106bb57600080fd5b919050565b6000806000606084860312156106d557600080fd5b833592506106e560208501610697565b91506106f360408501610697565b90509250925092565b6000806020838503121561070f57600080fd5b823567ffffffffffffffff81111561072657600080fd5b8301601f8101851361073757600080fd5b803567ffffffffffffffff81111561074e57600080fd5b85602082840101111561076057600080fd5b6020919091019590945092505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156107e6576107e6610770565b604052919050565b600082601f8301126107ff57600080fd5b813567ffffffffffffffff81111561081957610819610770565b61084a60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8401160161079f565b81815284602083860101111561085f57600080fd5b816020850160208301376000918101602001919091529392505050565b801515811461069457600080fd5b80356106bb8161087c565b6000806000606084860312156108aa57600080fd5b833567ffffffffffffffff8111156108c157600080fd5b6108cd868287016107ee565b9350506020840135915060408401356108e58161087c565b809150509250925092565b600067ffffffffffffffff82111561090a5761090a610770565b5060051b60200190565b600082601f83011261092557600080fd5b8135610938610933826108f0565b61079f565b8082825260208201915060208360051b86010192508583111561095a57600080fd5b602085015b8381101561097757803583526020928301920161095f565b5095945050505050565b60008060006060848603121561099657600080fd5b833567ffffffffffffffff8111156109ad57600080fd5b8401601f810186136109be57600080fd5b80356109cc610933826108f0565b8082825260208201915060208360051b8501019250888311156109ee57600080fd5b602084015b83811015610a3057803567ffffffffffffffff811115610a1257600080fd5b610a218b6020838901016107ee565b845250602092830192016109f3565b509550505050602084013567ffffffffffffffff811115610a5057600080fd5b610a5c86828701610914565b9250506106f36040850161088a565b73ffffffffffffffffffffffffffffffffffffffff8416815260406020820152816040820152818360608301376000818301606090810191909152601f9092017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016010192915050565b600082610b0b577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60005b83811015610b2b578181015183820152602001610b13565b50506000910152565b60008151808452610b4c816020860160208601610b10565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b73ffffffffffffffffffffffffffffffffffffffff8616815284602082015260a060408201526000610bb360a0830186610b34565b6060830194909452509015156080909101529392505050565b600081518084526020840193506020830160005b82811015610bfe578151865260209586019590910190600101610be0565b5093949350505050565b60006080820173ffffffffffffffffffffffffffffffffffffffff871683526080602084015280865180835260a08501915060a08160051b86010192506020880160005b82811015610c9b577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60878603018452610c86858351610b34565b94506020938401939190910190600101610c4c565b505050508281036040840152610cb18186610bcc565b915050610cc2606083018415159052565b95945050505050565b600060208284031215610cdd57600080fd5b81516104f98161087c565b60008251610cfa818460208701610b10565b919091019291505056fea2646970667358221220556072e1abafc3c4063b8cce832228b4f309b93726aaa6a6dfab20cb880c6d1864736f6c634300081a0033a2646970667358221220fdea18ed010ccecdad184e0b08a4a13c9e1417d8f620d5dfb8b16f77c92569ca64736f6c634300081a0033", + Bin: "0x6080604052600c8054600160ff199182168117909255601f80549091169091179055348015602c57600080fd5b5061e11a8061003c6000396000f3fe608060405234801561001057600080fd5b50600436106101985760003560e01c8063b0464fdc116100e3578063dcf7d0371161008c578063e63ab1e911610066578063e63ab1e9146102ce578063fa7626d4146102f5578063fe574f841461030257600080fd5b8063dcf7d037146102b6578063de1cb76c146102be578063e20c9f71146102c657600080fd5b8063c1909972116100bd578063c19099721461029e578063ccb0e3f2146102a6578063d509b16c146102ae57600080fd5b8063b0464fdc14610276578063b5508aa91461027e578063ba414fa61461028657600080fd5b8063493465581161014557806385226c811161011f57806385226c811461021757806385f438c11461022c578063916a17c61461026157600080fd5b806349346558146101f257806366d9a9a0146101fa578063828320141461020f57600080fd5b80633cba0107116101765780633cba0107146101da5780633e5e3c23146101e25780633f7286f4146101ea57600080fd5b80630a9254e41461019d5780631ed7831c146101a75780632ade3880146101c5575b600080fd5b6101a561030a565b005b6101af610a70565b6040516101bc9190618259565b60405180910390f35b6101cd610ad2565b6040516101bc91906182f5565b6101a5610c14565b6101af6113ce565b6101af61142e565b6101a561148e565b610202611ad1565b6040516101bc919061845b565b6101a5611c53565b61021f611eac565b6040516101bc91906184f9565b6102537f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b6040519081526020016101bc565b610269611f7c565b6040516101bc9190618570565b610269612077565b61021f612172565b61028e612242565b60405190151581526020016101bc565b6101a5612316565b6101a5612581565b6101a56130ad565b6101a56130e9565b6101a5613790565b6101af613ddd565b6102537f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b601f5461028e9060ff1681565b6101a5613e3d565b602580547fffffffffffffffffffffffff000000000000000000000000000000000000000090811630179091556026805482166112341790556027805490911661567817905560405161035c9061816c565b604080825260049082018190527f7a6574610000000000000000000000000000000000000000000000000000000060608301526080602083018190528201527f5a4554410000000000000000000000000000000000000000000000000000000060a082015260c001604051809103906000f0801580156103e0573d6000803e3d6000fd5b50602480547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039283169081178255604080518082018252600e81527f4761746577617945564d2e736f6c0000000000000000000000000000000000006020820152602754602554925190861694810194909452604484019290925290921660648201526104d1919060840160408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fc0c53b8b0000000000000000000000000000000000000000000000000000000017905261405b565b601f80547fffffffffffffffffffffff0000000000000000000000000000000000000000ff166101006001600160a01b0393841681029190911791829055602080549190920483167fffffffffffffffffffffffff0000000000000000000000000000000000000000909116811790915560275460255460405192939182169291169061055d90618179565b6001600160a01b03938416815291831660208301529091166040820152606001604051809103906000f080158015610599573d6000803e3d6000fd5b50602280547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392831617905560205460245460275460255460405193851694928316939183169216906105f490618186565b6001600160a01b039485168152928416602084015290831660408301529091166060820152608001604051809103906000f080158015610638573d6000803e3d6000fd5b50602380547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039290921691909117905560405161067d90618193565b604051809103906000f080158015610699573d6000803e3d6000fd5b50602180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039283161790556027546040517fc88a5e6d00000000000000000000000000000000000000000000000000000000815291166004820152670de0b6b3a76400006024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c88a5e6d90604401600060405180830381600087803b15801561074557600080fd5b505af1158015610759573d6000803e3d6000fd5b50506025546040517f06447d560000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506306447d569150602401600060405180830381600087803b1580156107cf57600080fd5b505af11580156107e3573d6000803e3d6000fd5b50506020546022546040517fae7a3a6f0000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201529116925063ae7a3a6f9150602401600060405180830381600087803b15801561084957600080fd5b505af115801561085d573d6000803e3d6000fd5b50506020546023546040517f10188aef0000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152911692506310188aef9150602401600060405180830381600087803b1580156108c357600080fd5b505af11580156108d7573d6000803e3d6000fd5b505050507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b03166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561093957600080fd5b505af115801561094d573d6000803e3d6000fd5b5050602480546023546040517f40c10f190000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152624c4b40938101939093521692506340c10f199150604401600060405180830381600087803b1580156109be57600080fd5b505af11580156109d2573d6000803e3d6000fd5b50506027546040517fc88a5e6d0000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152670de0b6b3a76400006024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c88a5e6d9150604401600060405180830381600087803b158015610a5657600080fd5b505af1158015610a6a573d6000803e3d6000fd5b50505050565b60606016805480602002602001604051908101604052809291908181526020018280548015610ac857602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610aaa575b5050505050905090565b6060601e805480602002602001604051908101604052809291908181526020016000905b82821015610c0b57600084815260208082206040805180820182526002870290920180546001600160a01b03168352600181018054835181870281018701909452808452939591948681019491929084015b82821015610bf4578382906000526020600020018054610b6790618607565b80601f0160208091040260200160405190810160405280929190818152602001828054610b9390618607565b8015610be05780601f10610bb557610100808354040283529160200191610be0565b820191906000526020600020905b815481529060010190602001808311610bc357829003601f168201915b505050505081526020019060010190610b48565b505050508152505081526020019060010190610af6565b50505050905090565b60248054602654604051620186a09381018490526001600160a01b03928316604482015291166064820152600090819060840160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f357fc5a2000000000000000000000000000000000000000000000000000000001790526024805460265492516370a0823160e01b81526001600160a01b0393841660048201529394506000939216916370a082319101602060405180830381865afa158015610cef573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d139190618654565b9050610d2081600061407a565b602480546023546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa158015610d70573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d949190618654565b6020546040516001600160a01b0390911660248201526044810187905290915060009060640160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb0000000000000000000000000000000000000000000000000000000017905260245490517ff30c7ba3000000000000000000000000000000000000000000000000000000008152919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f30c7ba391610e77916001600160a01b039190911690600090869060040161866d565b600060405180830381600087803b158015610e9157600080fd5b505af1158015610ea5573d6000803e3d6000fd5b50506021546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b158015610f3757600080fd5b505af1158015610f4b573d6000803e3d6000fd5b505060208054602454602654604080516001600160a01b0394851681529485018d905291831684830152919091166060830152517f2b58128f24a9f59127cc5b5430d70542b22220f2d9adaa86e442b816ab98af609350908190036080019150a16023546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b15801561103a57600080fd5b505af115801561104e573d6000803e3d6000fd5b50506021546040516001600160a01b0390911692507f7772f56296d3a5202974a45c61c9188d844ab4d6eeb18c851e4b8d5384ca6ced91506110939089908890618695565b60405180910390a260275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156110f457600080fd5b505af1158015611108573d6000803e3d6000fd5b50506023546021546040517f5e3e9fef0000000000000000000000000000000000000000000000000000000081526001600160a01b039283169450635e3e9fef935061116092909116908a9089908b906004016186ae565b600060405180830381600087803b15801561117a57600080fd5b505af115801561118e573d6000803e3d6000fd5b5050602480546026546040516370a0823160e01b81526001600160a01b03918216600482015260009550911692506370a0823191015b602060405180830381865afa1580156111e1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112059190618654565b9050611211818861407a565b602480546023546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa158015611261573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112859190618654565b905061129a816112958a87618716565b61407a565b602480546020546021546040517fdd62ed3e0000000000000000000000000000000000000000000000000000000081526001600160a01b0392831660048201529082169381019390935260009291169063dd62ed3e90604401602060405180830381865afa158015611310573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113349190618654565b905061134181600061407a565b602480546020546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa158015611391573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113b59190618654565b90506113c281600061407a565b50505050505050505050565b60606018805480602002602001604051908101604052809291908181526020018280548015610ac8576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311610aaa575050505050905090565b60606017805480602002602001604051908101604052809291908181526020018280548015610ac8576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311610aaa575050505050905090565b604080516004808252602480830184526020830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f6ed70169000000000000000000000000000000000000000000000000000000001790525460265493516370a0823160e01b8152620186a0946000949385936001600160a01b03908116936370a082319361152f93921691016001600160a01b0391909116815260200190565b602060405180830381865afa15801561154c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115709190618654565b905061157d81600061407a565b602480546023546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa1580156115cd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115f19190618654565b6020546040516001600160a01b0390911660248201526044810187905290915060009060640160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb0000000000000000000000000000000000000000000000000000000017905260245490517ff30c7ba3000000000000000000000000000000000000000000000000000000008152919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f30c7ba3916116d4916001600160a01b039190911690600090869060040161866d565b600060405180830381600087803b1580156116ee57600080fd5b505af1158015611702573d6000803e3d6000fd5b50506021546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b15801561179457600080fd5b505af11580156117a8573d6000803e3d6000fd5b5050602080546040516001600160a01b0390911681527fbcaadb46b82a48af60b608f58959ae6b8310d1b0a0d094c2e9ec3208ed39f2a0935001905060405180910390a16023546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b15801561187a57600080fd5b505af115801561188e573d6000803e3d6000fd5b50506021546040516001600160a01b0390911692507f7772f56296d3a5202974a45c61c9188d844ab4d6eeb18c851e4b8d5384ca6ced91506118d39089908890618695565b60405180910390a260275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561193457600080fd5b505af1158015611948573d6000803e3d6000fd5b50506023546021546040517f5e3e9fef0000000000000000000000000000000000000000000000000000000081526001600160a01b039283169450635e3e9fef93506119a092909116908a9089908b906004016186ae565b600060405180830381600087803b1580156119ba57600080fd5b505af11580156119ce573d6000803e3d6000fd5b5050602480546026546040516370a0823160e01b81526001600160a01b03918216600482015260009550911692506370a082319101602060405180830381865afa158015611a20573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a449190618654565b9050611a5181600061407a565b602480546023546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa158015611aa1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ac59190618654565b905061129a818561407a565b6060601b805480602002602001604051908101604052809291908181526020016000905b82821015610c0b5783829060005260206000209060020201604051806040016040529081600082018054611b2890618607565b80601f0160208091040260200160405190810160405280929190818152602001828054611b5490618607565b8015611ba15780601f10611b7657610100808354040283529160200191611ba1565b820191906000526020600020905b815481529060010190602001808311611b8457829003601f168201915b5050505050815260200160018201805480602002602001604051908101604052809291908181526020018280548015611c3b57602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019060040190602082600301049283019260010382029150808411611be85790505b50505050508152505081526020019060010190611af5565b6040517f68656c6c6f0000000000000000000000000000000000000000000000000000006020820152620186a090600090819060250160408051808303601f190181529082905260255463ca669fa760e01b83526001600160a01b031660048301529150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015611cf057600080fd5b505af1158015611d04573d6000803e3d6000fd5b5050602554604080516001600160a01b0390921660248301527f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e460448084019190915281518084039091018152606490920181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb39250611def9190600401618729565b600060405180830381600087803b158015611e0957600080fd5b505af1158015611e1d573d6000803e3d6000fd5b50506023546021546040517f02d5c8990000000000000000000000000000000000000000000000000000000081526001600160a01b0392831694506302d5c8999350611e7592909116908790869088906004016186ae565b600060405180830381600087803b158015611e8f57600080fd5b505af1158015611ea3573d6000803e3d6000fd5b50505050505050565b6060601a805480602002602001604051908101604052809291908181526020016000905b82821015610c0b578382906000526020600020018054611eef90618607565b80601f0160208091040260200160405190810160405280929190818152602001828054611f1b90618607565b8015611f685780601f10611f3d57610100808354040283529160200191611f68565b820191906000526020600020905b815481529060010190602001808311611f4b57829003601f168201915b505050505081526020019060010190611ed0565b6060601d805480602002602001604051908101604052809291908181526020016000905b82821015610c0b5760008481526020908190206040805180820182526002860290920180546001600160a01b0316835260018101805483518187028101870190945280845293949193858301939283018282801561205f57602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168152602001906004019060208260030104928301926001038202915080841161200c5790505b50505050508152505081526020019060010190611fa0565b6060601c805480602002602001604051908101604052809291908181526020016000905b82821015610c0b5760008481526020908190206040805180820182526002860290920180546001600160a01b0316835260018101805483518187028101870190945280845293949193858301939283018282801561215a57602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190600401906020826003010492830192600103820291508084116121075790505b5050505050815250508152602001906001019061209b565b60606019805480602002602001604051908101604052809291908181526020016000905b82821015610c0b5783829060005260206000200180546121b590618607565b80601f01602080910402602001604051908101604052809291908181526020018280546121e190618607565b801561222e5780601f106122035761010080835404028352916020019161222e565b820191906000526020600020905b81548152906001019060200180831161221157829003601f168201915b505050505081526020019060010190612196565b60085460009060ff161561225a575060085460ff1690565b6040517f667f9d70000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d600482018190527f6661696c65640000000000000000000000000000000000000000000000000000602483015260009163667f9d7090604401602060405180830381865afa1580156122eb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061230f9190618654565b1415905090565b60248054602654604051620186a09381018490526001600160a01b03928316604482015291166064820152600090819060840160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f357fc5a200000000000000000000000000000000000000000000000000000000179052602554905163ca669fa760e01b81526001600160a01b039091166004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156123fc57600080fd5b505af1158015612410573d6000803e3d6000fd5b5050602554604080516001600160a01b0390921660248301527f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e460448084019190915281518084039091018152606490920181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb392506124fb9190600401618729565b600060405180830381600087803b15801561251557600080fd5b505af1158015612529573d6000803e3d6000fd5b50506023546021546040517f5e3e9fef0000000000000000000000000000000000000000000000000000000081526001600160a01b039283169450635e3e9fef9350611e7592909116908790869088906004016186ae565b60275460405163ca669fa760e01b81526001600160a01b039091166004820152620186a090600090737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156125e257600080fd5b505af11580156125f6573d6000803e3d6000fd5b5050602754604080516001600160a01b0390921660248301527f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a60448084019190915281518084039091018152606490920181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb392506126e19190600401618729565b600060405180830381600087803b1580156126fb57600080fd5b505af115801561270f573d6000803e3d6000fd5b50505050602360009054906101000a90046001600160a01b03166001600160a01b0316638456cb596040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561276357600080fd5b505af1158015612777573d6000803e3d6000fd5b505060275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b1580156127d457600080fd5b505af11580156127e8573d6000803e3d6000fd5b5050602754604080516001600160a01b0390921660248301527f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a60448084019190915281518084039091018152606490920181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb392506128d39190600401618729565b600060405180830381600087803b1580156128ed57600080fd5b505af1158015612901573d6000803e3d6000fd5b50505050602360009054906101000a90046001600160a01b03166001600160a01b0316633f4ba83a6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561295557600080fd5b505af1158015612969573d6000803e3d6000fd5b505060255460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b1580156129c657600080fd5b505af11580156129da573d6000803e3d6000fd5b50505050602360009054906101000a90046001600160a01b03166001600160a01b0316638456cb596040518163ffffffff1660e01b8152600401600060405180830381600087803b158015612a2e57600080fd5b505af1158015612a42573d6000803e3d6000fd5b50506040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fd93c0665000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b158015612acb57600080fd5b505af1158015612adf573d6000803e3d6000fd5b505060275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b158015612b3c57600080fd5b505af1158015612b50573d6000803e3d6000fd5b50506023546026546040517f106e62900000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260248101879052604481018690529116925063106e62909150606401600060405180830381600087803b158015612bc457600080fd5b505af1158015612bd8573d6000803e3d6000fd5b505060255460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b158015612c3557600080fd5b505af1158015612c49573d6000803e3d6000fd5b50505050602360009054906101000a90046001600160a01b03166001600160a01b0316633f4ba83a6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015612c9d57600080fd5b505af1158015612cb1573d6000803e3d6000fd5b5050602480546026546040516370a0823160e01b81526001600160a01b03918216600482015260009550911692506370a0823191015b602060405180830381865afa158015612d04573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d289190618654565b9050612d3581600061407a565b6026546040516001600160a01b0390911660248201526044810184905260009060640160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb0000000000000000000000000000000000000000000000000000000017905260245490517ff30c7ba3000000000000000000000000000000000000000000000000000000008152919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f30c7ba391612e15916001600160a01b039190911690600090869060040161866d565b600060405180830381600087803b158015612e2f57600080fd5b505af1158015612e43573d6000803e3d6000fd5b50506023546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b158015612ed557600080fd5b505af1158015612ee9573d6000803e3d6000fd5b50506026546040518781526001600160a01b0390911692507f884edad9ce6fa2440d8a54cc123490eb96d2768479d49ff9c7366125a9424364915060200160405180910390a260275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015612f8857600080fd5b505af1158015612f9c573d6000803e3d6000fd5b50506023546026546040517f106e62900000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260248101899052604481018890529116925063106e62909150606401600060405180830381600087803b15801561301057600080fd5b505af1158015613024573d6000803e3d6000fd5b5050602480546026546040516370a0823160e01b81526001600160a01b03918216600482015260009550911692506370a082319101602060405180830381865afa158015613076573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061309a9190618654565b90506130a6818661407a565b5050505050565b602480546026546040516370a0823160e01b81526001600160a01b039182166004820152620186a093600093849316916370a082319101612ce7565b60248054602654604051620186a09381018490526001600160a01b03928316604482015291166064820152600090819060840160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fc5131691000000000000000000000000000000000000000000000000000000001790526024805460265492516370a0823160e01b81526001600160a01b0393841660048201529394506000939216916370a082319101602060405180830381865afa1580156131c4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131e89190618654565b90506131f581600061407a565b602480546023546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa158015613245573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132699190618654565b6020546040516001600160a01b0390911660248201526044810187905290915060009060640160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb0000000000000000000000000000000000000000000000000000000017905260245490517ff30c7ba3000000000000000000000000000000000000000000000000000000008152919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f30c7ba39161334c916001600160a01b039190911690600090869060040161866d565b600060405180830381600087803b15801561336657600080fd5b505af115801561337a573d6000803e3d6000fd5b50506021546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b15801561340c57600080fd5b505af1158015613420573d6000803e3d6000fd5b50506020547f2b58128f24a9f59127cc5b5430d70542b22220f2d9adaa86e442b816ab98af6092506001600160a01b0316905061345e60028961873c565b602454602654604080516001600160a01b03958616815260208101949094529184168383015292909216606082015290519081900360800190a16023546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b15801561352657600080fd5b505af115801561353a573d6000803e3d6000fd5b50506021546040516001600160a01b0390911692507f7772f56296d3a5202974a45c61c9188d844ab4d6eeb18c851e4b8d5384ca6ced915061357f9089908890618695565b60405180910390a260275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156135e057600080fd5b505af11580156135f4573d6000803e3d6000fd5b50506023546021546040517f5e3e9fef0000000000000000000000000000000000000000000000000000000081526001600160a01b039283169450635e3e9fef935061364c92909116908a9089908b906004016186ae565b600060405180830381600087803b15801561366657600080fd5b505af115801561367a573d6000803e3d6000fd5b5050602480546026546040516370a0823160e01b81526001600160a01b03918216600482015260009550911692506370a082319101602060405180830381865afa1580156136cc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136f09190618654565b90506137018161129560028a61873c565b602480546023546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa158015613751573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137759190618654565b905061129a8161378660028b61873c565b6112959087618716565b6040517f68656c6c6f0000000000000000000000000000000000000000000000000000006020820152620186a090600090819060250160408051808303601f1901815290829052602480546021546370a0823160e01b85526001600160a01b0390811660048601529294506000939216916370a082319101602060405180830381865afa158015613825573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138499190618654565b905061385681600061407a565b602480546023546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa1580156138a6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138ca9190618654565b6020546040516001600160a01b0390911660248201526044810187905290915060009060640160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb0000000000000000000000000000000000000000000000000000000017905260245490517ff30c7ba3000000000000000000000000000000000000000000000000000000008152919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f30c7ba3916139ad916001600160a01b039190911690600090869060040161866d565b600060405180830381600087803b1580156139c757600080fd5b505af11580156139db573d6000803e3d6000fd5b50506021546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b158015613a6d57600080fd5b505af1158015613a81573d6000803e3d6000fd5b50506020546040517f0d3f65f00e631663aa85c96330b5c7a83bb29af3630c0063776f985edc3037aa9350613ac492506001600160a01b03909116908790618777565b60405180910390a16020546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b158015613b5a57600080fd5b505af1158015613b6e573d6000803e3d6000fd5b50506021546024546040516001600160a01b039283169450911691507f723fc7be2448075379e4fdf1e6bf5fead954d2668d2da05dcb44ccfec4beeda790613bb9908a908990618695565b60405180910390a36023546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b158015613c4f57600080fd5b505af1158015613c63573d6000803e3d6000fd5b50506021546040516001600160a01b0390911692507fba96f26bdda53eb8c8ba39045dfb4ff39753fbc7a6edcf250a88e75e78d102fe9150613ca89089908890618695565b60405180910390a260275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015613d0957600080fd5b505af1158015613d1d573d6000803e3d6000fd5b50506023546021546040517f02d5c8990000000000000000000000000000000000000000000000000000000081526001600160a01b0392831694506302d5c8999350613d7592909116908a9089908b906004016186ae565b600060405180830381600087803b158015613d8f57600080fd5b505af1158015613da3573d6000803e3d6000fd5b5050602480546021546040516370a0823160e01b81526001600160a01b03918216600482015260009550911692506370a0823191016111c4565b60606015805480602002602001604051908101604052809291908181526020018280548015610ac8576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311610aaa575050505050905090565b60255460405163ca669fa760e01b81526001600160a01b039091166004820152620186a090600090737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015613e9e57600080fd5b505af1158015613eb2573d6000803e3d6000fd5b5050602554604080516001600160a01b0390921660248301527f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e460448084019190915281518084039091018152606490920181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb39250613f9d9190600401618729565b600060405180830381600087803b158015613fb757600080fd5b505af1158015613fcb573d6000803e3d6000fd5b50506023546026546040517f106e62900000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260248101879052604481018690529116925063106e62909150606401600060405180830381600087803b15801561403f57600080fd5b505af1158015614053573d6000803e3d6000fd5b505050505050565b60006140656181a0565b6140708484836140f9565b9150505b92915050565b6040517f98296c540000000000000000000000000000000000000000000000000000000081526004810183905260248101829052737109709ecfa91a80626ff3989d68f67f5b1dd12d906398296c549060440160006040518083038186803b1580156140e557600080fd5b505afa158015614053573d6000803e3d6000fd5b6000806141068584614174565b90506141696040518060400160405280601d81526020017f4552433139363750726f78792e736f6c3a4552433139363750726f78790000008152508286604051602001614154929190618777565b60405160208183030381529060405285614180565b9150505b9392505050565b600061416d83836141ae565b60c081015151600090156141a45761419d84848460c001516141c9565b905061416d565b61419d848461436f565b60006141ba838361445a565b61416d83836020015184614180565b6000806141d461446a565b905060006141e2868361453d565b905060006141f982606001518360200151856149e3565b9050600061420983838989614bf5565b9050600061421682615a72565b602081015181519192509060030b1561428957898260400151604051602001614240929190618799565b60408051601f19818403018152908290527f08c379a000000000000000000000000000000000000000000000000000000000825261428091600401618729565b60405180910390fd5b60006142cc6040518060400160405280601581526020017f4465706c6f79656420746f20616464726573733a200000000000000000000000815250836001615c41565b6040517fc6ce059d000000000000000000000000000000000000000000000000000000008152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c6ce059d9061431f908490600401618729565b602060405180830381865afa15801561433c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614360919061881a565b9b9a5050505050505050505050565b6040517f8d1cc9250000000000000000000000000000000000000000000000000000000081526000908190737109709ecfa91a80626ff3989d68f67f5b1dd12d90638d1cc925906143c4908790600401618729565b600060405180830381865afa1580156143e1573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052614409919081019061892b565b905060006144378285604051602001614423929190618960565b604051602081830303815290604052615e41565b90506001600160a01b03811661407057848460405160200161424092919061898f565b61446682826000615e54565b5050565b604080518082018252600381527f6f75740000000000000000000000000000000000000000000000000000000000602082015290517fd145736c000000000000000000000000000000000000000000000000000000008152606091737109709ecfa91a80626ff3989d68f67f5b1dd12d91829063d145736c906144f1908490600401618a3a565b600060405180830381865afa15801561450e573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526145369190810190618a81565b9250505090565b61456f6040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b6000737109709ecfa91a80626ff3989d68f67f5b1dd12d90506145ba6040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b6145c385615f57565b602082015260006145d38661633c565b90506000836001600160a01b031663d930a0e66040518163ffffffff1660e01b8152600401600060405180830381865afa158015614615573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261463d9190810190618a81565b868385602001516040516020016146579493929190618aca565b60408051601f19818403018152908290527f60f9bb1100000000000000000000000000000000000000000000000000000000825291506000906001600160a01b038616906360f9bb11906146af908590600401618729565b600060405180830381865afa1580156146cc573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526146f49190810190618a81565b6040517fdb4235f60000000000000000000000000000000000000000000000000000000081529091506001600160a01b0386169063db4235f69061473c908490600401618bce565b602060405180830381865afa158015614759573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061477d9190618c20565b61479257816040516020016142409190618c42565b6040517f49c4fac80000000000000000000000000000000000000000000000000000000081526001600160a01b038616906349c4fac8906147d7908490600401618cd4565b600060405180830381865afa1580156147f4573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261481c9190810190618a81565b84526040517fdb4235f60000000000000000000000000000000000000000000000000000000081526001600160a01b0386169063db4235f690614863908490600401618d26565b602060405180830381865afa158015614880573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906148a49190618c20565b15614939576040517f49c4fac80000000000000000000000000000000000000000000000000000000081526001600160a01b038616906349c4fac8906148ee908490600401618d26565b600060405180830381865afa15801561490b573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526149339190810190618a81565b60408501525b846001600160a01b03166349c4fac882866000015160405160200161495e9190618d78565b6040516020818303038152906040526040518363ffffffff1660e01b815260040161498a929190618de4565b600060405180830381865afa1580156149a7573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526149cf9190810190618a81565b606085015250608083015250949350505050565b60408051600480825260a0820190925260609160009190816020015b60608152602001906001900390816149ff5790505090506040518060400160405280600481526020017f677265700000000000000000000000000000000000000000000000000000000081525081600081518110614a5f57614a5f618e09565b60200260200101819052506040518060400160405280600381526020017f2d726c000000000000000000000000000000000000000000000000000000000081525081600181518110614ab357614ab3618e09565b602002602001018190525084604051602001614acf9190618e38565b60405160208183030381529060405281600281518110614af157614af1618e09565b602002602001018190525082604051602001614b0d9190618ea4565b60405160208183030381529060405281600381518110614b2f57614b2f618e09565b60200260200101819052506000614b4582615a72565b602080820151604080518082018252600581527f2e6a736f6e0000000000000000000000000000000000000000000000000000008185019081528251808401845260008082529086015282518084019093529051825292810192909252919250614bd690604080518082018252600080825260209182015281518083019092528451825280850190820152906165bf565b614beb57856040516020016142409190618ee5565b9695505050505050565b60a0810151604080518082018252600080825260209182015281518083019092528251808352928101910152606090737109709ecfa91a80626ff3989d68f67f5b1dd12d9015614c45565b511590565b614db957826020015115614d01576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605860248201527f54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f742060448201527f62652075736564207768656e207468652060736b6970566572696679536f757260648201527f6365436f646560206f7074696f6e206973206074727565600000000000000000608482015260a401614280565b8260c0015115614db9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605360248201527f54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f742060448201527f62652075736564207768656e207468652060736b69704c6963656e736554797060648201527f6560206f7074696f6e2069732060747275656000000000000000000000000000608482015260a401614280565b6040805160ff8082526120008201909252600091816020015b6060815260200190600190039081614dd257905050905060006040518060400160405280600381526020017f6e70780000000000000000000000000000000000000000000000000000000000815250828280614e2d90618f76565b935060ff1681518110614e4257614e42618e09565b60200260200101819052506040518060400160405280600d81526020017f302e302e312d616c7068612e3700000000000000000000000000000000000000815250604051602001614e939190618f95565b604051602081830303815290604052828280614eae90618f76565b935060ff1681518110614ec357614ec3618e09565b60200260200101819052506040518060400160405280600681526020017f6465706c6f790000000000000000000000000000000000000000000000000000815250828280614f1090618f76565b935060ff1681518110614f2557614f25618e09565b60200260200101819052506040518060400160405280600e81526020017f2d2d636f6e74726163744e616d65000000000000000000000000000000000000815250828280614f7290618f76565b935060ff1681518110614f8757614f87618e09565b60200260200101819052508760200151828280614fa390618f76565b935060ff1681518110614fb857614fb8618e09565b60200260200101819052506040518060400160405280600e81526020017f2d2d636f6e74726163745061746800000000000000000000000000000000000081525082828061500590618f76565b935060ff168151811061501a5761501a618e09565b60209081029190910101528751828261503281618f76565b935060ff168151811061504757615047618e09565b60200260200101819052506040518060400160405280600981526020017f2d2d636861696e4964000000000000000000000000000000000000000000000081525082828061509490618f76565b935060ff16815181106150a9576150a9618e09565b60200260200101819052506150bd46616620565b82826150c881618f76565b935060ff16815181106150dd576150dd618e09565b60200260200101819052506040518060400160405280600f81526020017f2d2d6275696c64496e666f46696c65000000000000000000000000000000000081525082828061512a90618f76565b935060ff168151811061513f5761513f618e09565b60200260200101819052508682828061515790618f76565b935060ff168151811061516c5761516c618e09565b60209081029190910101528551156152935760408051808201909152601581527f2d2d636f6e7374727563746f7242797465636f64650000000000000000000000602082015282826151bd81618f76565b935060ff16815181106151d2576151d2618e09565b60209081029190910101526040517f71aad10d0000000000000000000000000000000000000000000000000000000081526001600160a01b038416906371aad10d90615222908990600401618729565b600060405180830381865afa15801561523f573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526152679190810190618a81565b828261527281618f76565b935060ff168151811061528757615287618e09565b60200260200101819052505b8460200151156153635760408051808201909152601281527f2d2d766572696679536f75726365436f64650000000000000000000000000000602082015282826152dc81618f76565b935060ff16815181106152f1576152f1618e09565b60200260200101819052506040518060400160405280600581526020017f66616c736500000000000000000000000000000000000000000000000000000081525082828061533e90618f76565b935060ff168151811061535357615353618e09565b602002602001018190525061552a565b61539b614c408660a0015160408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b61542e5760408051808201909152600d81527f2d2d6c6963656e73655479706500000000000000000000000000000000000000602082015282826153de81618f76565b935060ff16815181106153f3576153f3618e09565b60200260200101819052508460a001516040516020016154139190618e38565b60405160208183030381529060405282828061533e90618f76565b8460c0015115801561547157506040808901518151808301835260008082526020918201528251808401909352815183529081019082015261546f90511590565b155b1561552a5760408051808201909152600d81527f2d2d6c6963656e73655479706500000000000000000000000000000000000000602082015282826154b581618f76565b935060ff16815181106154ca576154ca618e09565b60200260200101819052506154de886166c0565b6040516020016154ee9190618e38565b60405160208183030381529060405282828061550990618f76565b935060ff168151811061551e5761551e618e09565b60200260200101819052505b6040808601518151808301835260008082526020918201528251808401909352815183529081019082015261555e90511590565b6155f35760408051808201909152600b81527f2d2d72656c617965724964000000000000000000000000000000000000000000602082015282826155a181618f76565b935060ff16815181106155b6576155b6618e09565b602002602001018190525084604001518282806155d290618f76565b935060ff16815181106155e7576155e7618e09565b60200260200101819052505b6060850151156157145760408051808201909152600681527f2d2d73616c7400000000000000000000000000000000000000000000000000006020820152828261563c81618f76565b935060ff168151811061565157615651618e09565b602090810291909101015260608501516040517fb11a19e800000000000000000000000000000000000000000000000000000000815260048101919091526001600160a01b0384169063b11a19e890602401600060405180830381865afa1580156156c0573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526156e89190810190618a81565b82826156f381618f76565b935060ff168151811061570857615708618e09565b60200260200101819052505b60e085015151156157bb5760408051808201909152600a81527f2d2d6761734c696d6974000000000000000000000000000000000000000000006020820152828261575e81618f76565b935060ff168151811061577357615773618e09565b602002602001018190525061578f8560e0015160000151616620565b828261579a81618f76565b935060ff16815181106157af576157af618e09565b60200260200101819052505b60e085015160200151156158655760408051808201909152600a81527f2d2d6761735072696365000000000000000000000000000000000000000000006020820152828261580881618f76565b935060ff168151811061581d5761581d618e09565b60200260200101819052506158398560e0015160200151616620565b828261584481618f76565b935060ff168151811061585957615859618e09565b60200260200101819052505b60e0850151604001511561590f5760408051808201909152600e81527f2d2d6d6178466565506572476173000000000000000000000000000000000000602082015282826158b281618f76565b935060ff16815181106158c7576158c7618e09565b60200260200101819052506158e38560e0015160400151616620565b82826158ee81618f76565b935060ff168151811061590357615903618e09565b60200260200101819052505b60e085015160600151156159b95760408051808201909152601681527f2d2d6d61785072696f72697479466565506572476173000000000000000000006020820152828261595c81618f76565b935060ff168151811061597157615971618e09565b602002602001018190525061598d8560e0015160600151616620565b828261599881618f76565b935060ff16815181106159ad576159ad618e09565b60200260200101819052505b60008160ff1667ffffffffffffffff8111156159d7576159d7618843565b604051908082528060200260200182016040528015615a0a57816020015b60608152602001906001900390816159f55790505b50905060005b8260ff168160ff161015615a6357838160ff1681518110615a3357615a33618e09565b6020026020010151828260ff1681518110615a5057615a50618e09565b6020908102919091010152600101615a10565b5093505050505b949350505050565b615a996040518060600160405280600060030b815260200160608152602001606081525090565b60408051808201825260048082527f6261736800000000000000000000000000000000000000000000000000000000602083015291517fd145736c000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d92600091849163d145736c91615b1f91869101619000565b600060405180830381865afa158015615b3c573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052615b649190810190618a81565b90506000615b7286836171af565b90506000846001600160a01b031663f45c1ce7836040518263ffffffff1660e01b8152600401615ba291906184f9565b6000604051808303816000875af1158015615bc1573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052615be99190810190619047565b805190915060030b15801590615c025750602081015151155b8015615c115750604081015151155b15614beb5781600081518110615c2957615c29618e09565b602002602001015160405160200161424091906190fd565b60606000615c768560408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600080825260209182015281518083019092528651825280870190820152909150615cad9082905b90617304565b15615e0a576000615d2a82615d2484615d1e615cf08a60408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6040805180820182526000808252602091820152815180830190925282518252918201519181019190915290565b9061732b565b9061738d565b604080518082018252600181527f0a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152909150615d8e908290617304565b15615df857604080518082018252600181527f0a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152615df5905b8290617412565b90505b615e0181617438565b9250505061416d565b8215615e235784846040516020016142409291906192e9565b505060408051602081019091526000815261416d565b509392505050565b6000808251602084016000f09392505050565b8160a0015115615e6357505050565b6000615e708484846174a1565b90506000615e7d82615a72565b602081015181519192509060030b158015615f195750604080518082018252600781527f535543434553530000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152615f1990604080518082018252600080825260209182015281518083019092528451825280850190820152615ca7565b15615f2657505050505050565b60408201515115615f465781604001516040516020016142409190619390565b8060405160200161424091906193ee565b60606000615f8c8360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600481527f2e736f6c0000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152909150615ff1905b82906165bf565b1561606057604080518082018252600481527f2e736f6c000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261416d9061605b908390617a3c565b617438565b604080518082018252600181527f3a00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526160c2905b8290617ac6565b60010361618f57604080518082018252600181527f3a000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261612890615dee565b50604080518082018252600181527f3a000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261416d9061605b905b8390617412565b604080518082018252600581527f2e6a736f6e000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526161ee90615fea565b1561632557604080518082018252600181527f2f00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820181905284518086019095529251845283015290616256908390617b60565b9050600081600183516162699190618716565b8151811061627957616279618e09565b6020026020010151905061631c61605b6162ef6040518060400160405280600581526020017f2e6a736f6e00000000000000000000000000000000000000000000000000000081525060408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b60408051808201825260008082526020918201528151808301909252855182528086019082015290617a3c565b95945050505050565b826040516020016142409190619459565b50919050565b606060006163718360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600481527f2e736f6c00000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201529091506163d390615fea565b156163e15761416d81617438565b604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616440906160bb565b6001036164aa57604080518082018252600181527f3a000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261416d9061605b90616188565b604080518082018252600581527f2e6a736f6e0000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261650990615fea565b1561632557604080518082018252600181527f2f00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820181905284518086019095529251845283015290616571908390617b60565b90506001815111156165ad57806002825161658c9190618716565b8151811061659c5761659c618e09565b602002602001015192505050919050565b50826040516020016142409190619459565b8051825160009111156165d457506000614074565b815183516020850151600092916165ea91619537565b6165f49190618716565b90508260200151810361660b576001915050614074565b82516020840151819020912014905092915050565b6060600061662d83617c05565b600101905060008167ffffffffffffffff81111561664d5761664d618843565b6040519080825280601f01601f191660200182016040528015616677576020820181803683370190505b5090508181016020015b600019017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a850494508461668157509392505050565b604081810151815180830183526000808252602091820181905283518085018552835181529282018383015283518085018552600a81527f554e4c4943454e534544000000000000000000000000000000000000000000008184019081528551808701875283815284019290925284518086019095525184529083015260609161674c905b8290617ce7565b1561678c57505060408051808201909152600481527f4e6f6e65000000000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600981527f556e6c6963656e73650000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526167eb90616745565b1561682b57505060408051808201909152600981527f556e6c6963656e736500000000000000000000000000000000000000000000006020820152919050565b604080518082018252600381527f4d495400000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261688a90616745565b156168ca57505060408051808201909152600381527f4d495400000000000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f47504c2d322e302d6f6e6c7900000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261692990616745565b8061698e5750604080518082018252601081527f47504c2d322e302d6f722d6c61746572000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261698e90616745565b156169ce57505060408051808201909152600981527f474e552047504c763200000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f47504c2d332e302d6f6e6c79000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616a2d90616745565b80616a925750604080518082018252601081527f47504c2d332e302d6f722d6c617465720000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616a9290616745565b15616ad257505060408051808201909152600981527f474e552047504c763300000000000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4c47504c2d322e312d6f6e6c790000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616b3190616745565b80616b965750604080518082018252601181527f4c47504c2d322e312d6f722d6c6174657200000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616b9690616745565b15616bd657505060408051808201909152600c81527f474e55204c47504c76322e3100000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4c47504c2d332e302d6f6e6c790000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616c3590616745565b80616c9a5750604080518082018252601181527f4c47504c2d332e302d6f722d6c6174657200000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616c9a90616745565b15616cda57505060408051808201909152600a81527f474e55204c47504c7633000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f4253442d322d436c61757365000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616d3990616745565b15616d7957505060408051808201909152600c81527f4253442d322d436c6175736500000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f4253442d332d436c61757365000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616dd890616745565b15616e1857505060408051808201909152600c81527f4253442d332d436c6175736500000000000000000000000000000000000000006020820152919050565b604080518082018252600781527f4d504c2d322e300000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616e7790616745565b15616eb757505060408051808201909152600781527f4d504c2d322e30000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600781527f4f534c2d332e300000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616f1690616745565b15616f5657505060408051808201909152600781527f4f534c2d332e30000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600a81527f4170616368652d322e300000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616fb590616745565b15616ff557505060408051808201909152600a81527f4170616368652d322e30000000000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4147504c2d332e302d6f6e6c79000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261705490616745565b806170b95750604080518082018252601181527f4147504c2d332e302d6f722d6c61746572000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526170b990616745565b156170f957505060408051808201909152600a81527f474e55204147504c7633000000000000000000000000000000000000000000006020820152919050565b604080518082018252600881527f4255534c2d312e310000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261715890616745565b1561719857505060408051808201909152600781527f42534c20312e31000000000000000000000000000000000000000000000000006020820152919050565b60408084015184519151614240929060200161954a565b60608060005b845181101561723a57818582815181106171d1576171d1618e09565b60200260200101516040516020016171ea929190618960565b6040516020818303038152906040529150600185516172099190618716565b8114617232578160405160200161722091906196b3565b60405160208183030381529060405291505b6001016171b5565b5060408051600380825260808201909252600091816020015b6060815260200190600190039081617253579050509050838160008151811061727e5761727e618e09565b60200260200101819052506040518060400160405280600281526020017f2d63000000000000000000000000000000000000000000000000000000000000815250816001815181106172d2576172d2618e09565b602002602001018190525081816002815181106172f1576172f1618e09565b6020908102919091010152949350505050565b60208083015183518351928401516000936173229291849190617cfb565b14159392505050565b6040805180820190915260008082526020820152600061735d8460000151856020015185600001518660200151617e0c565b905083602001518161736f9190618716565b8451859061737e908390618716565b90525060208401525090919050565b60408051808201909152600080825260208201528151835110156173b2575081614074565b60208083015190840151600191146173d95750815160208481015190840151829020919020145b801561740a578251845185906173f0908390618716565b9052508251602085018051617406908390619537565b9052505b509192915050565b6040805180820190915260008082526020820152617431838383617f2c565b5092915050565b60606000826000015167ffffffffffffffff81111561745957617459618843565b6040519080825280601f01601f191660200182016040528015617483576020820181803683370190505b50905060006020820190506174318185602001518660000151617fd7565b606060006174ad61446a565b6040805160ff808252612000820190925291925060009190816020015b60608152602001906001900390816174ca57905050905060006040518060400160405280600381526020017f6e7078000000000000000000000000000000000000000000000000000000000081525082828061752590618f76565b935060ff168151811061753a5761753a618e09565b60200260200101819052506040518060400160405280600781526020017f5e312e33322e330000000000000000000000000000000000000000000000000081525060405160200161758b91906196f4565b6040516020818303038152906040528282806175a690618f76565b935060ff16815181106175bb576175bb618e09565b60200260200101819052506040518060400160405280600881526020017f76616c696461746500000000000000000000000000000000000000000000000081525082828061760890618f76565b935060ff168151811061761d5761761d618e09565b6020026020010181905250826040516020016176399190618ea4565b60405160208183030381529060405282828061765490618f76565b935060ff168151811061766957617669618e09565b60200260200101819052506040518060400160405280600a81526020017f2d2d636f6e7472616374000000000000000000000000000000000000000000008152508282806176b690618f76565b935060ff16815181106176cb576176cb618e09565b60200260200101819052506176e08784618051565b82826176eb81618f76565b935060ff168151811061770057617700618e09565b6020908102919091010152855151156177ac5760408051808201909152600b81527f2d2d7265666572656e63650000000000000000000000000000000000000000006020820152828261775281618f76565b935060ff168151811061776757617767618e09565b6020026020010181905250617780866000015184618051565b828261778b81618f76565b935060ff16815181106177a0576177a0618e09565b60200260200101819052505b85608001511561781a5760408051808201909152601881527f2d2d756e73616665536b697053746f72616765436865636b0000000000000000602082015282826177f581618f76565b935060ff168151811061780a5761780a618e09565b6020026020010181905250617880565b84156178805760408051808201909152601281527f2d2d726571756972655265666572656e636500000000000000000000000000006020820152828261785f81618f76565b935060ff168151811061787457617874618e09565b60200260200101819052505b6040860151511561791c5760408051808201909152600d81527f2d2d756e73616665416c6c6f7700000000000000000000000000000000000000602082015282826178ca81618f76565b935060ff16815181106178df576178df618e09565b602002602001018190525085604001518282806178fb90618f76565b935060ff168151811061791057617910618e09565b60200260200101819052505b8560600151156179865760408051808201909152601481527f2d2d756e73616665416c6c6f7752656e616d65730000000000000000000000006020820152828261796581618f76565b935060ff168151811061797a5761797a618e09565b60200260200101819052505b60008160ff1667ffffffffffffffff8111156179a4576179a4618843565b6040519080825280602002602001820160405280156179d757816020015b60608152602001906001900390816179c25790505b50905060005b8260ff168160ff161015617a3057838160ff1681518110617a0057617a00618e09565b6020026020010151828260ff1681518110617a1d57617a1d618e09565b60209081029190910101526001016179dd565b50979650505050505050565b6040805180820190915260008082526020820152815183511015617a61575081614074565b81518351602085015160009291617a7791619537565b617a819190618716565b60208401519091506001908214617aa2575082516020840151819020908220145b8015617abd57835185518690617ab9908390618716565b9052505b50929392505050565b6000808260000151617aea8560000151866020015186600001518760200151617e0c565b617af49190619537565b90505b83516020850151617b089190619537565b81116174315781617b1881619739565b9250508260000151617b4f856020015183617b339190618716565b8651617b3f9190618716565b8386600001518760200151617e0c565b617b599190619537565b9050617af7565b60606000617b6e8484617ac6565b617b79906001619537565b67ffffffffffffffff811115617b9157617b91618843565b604051908082528060200260200182016040528015617bc457816020015b6060815260200190600190039081617baf5790505b50905060005b8151811015615e3957617be061605b8686617412565b828281518110617bf257617bf2618e09565b6020908102919091010152600101617bca565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310617c4e577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310617c7a576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc100008310617c9857662386f26fc10000830492506010015b6305f5e1008310617cb0576305f5e100830492506008015b6127108310617cc457612710830492506004015b60648310617cd6576064830492506002015b600a83106140745760010192915050565b6000617cf38383618091565b159392505050565b600080858411617e025760208411617dae5760008415617d46576001617d22866020618716565b617d2d906008619753565b617d38906002619851565b617d429190618716565b1990505b8351811685617d558989619537565b617d5f9190618716565b805190935082165b818114617d9957878411617d815787945050505050615a6a565b83617d8b8161985d565b945050828451169050617d67565b617da38785619537565b945050505050615a6a565b838320617dbb8588618716565b617dc59087619537565b91505b858210617e0057848220808203617ded57617de38684619537565b9350505050615a6a565b617df8600184618716565b925050617dc8565b505b5092949350505050565b60008381868511617f175760208511617ec65760008515617e58576001617e34876020618716565b617e3f906008619753565b617e4a906002619851565b617e549190618716565b1990505b84518116600087617e698b8b619537565b617e739190618716565b855190915083165b828114617eb857818610617ea057617e938b8b619537565b9650505050505050615a6a565b85617eaa81619739565b965050838651169050617e7b565b859650505050505050615a6a565b508383206000905b617ed88689618716565b8211617f1557858320808203617ef45783945050505050615a6a565b617eff600185619537565b9350508180617f0d90619739565b925050617ece565b505b617f218787619537565b979650505050505050565b60408051808201909152600080825260208201526000617f5e8560000151866020015186600001518760200151617e0c565b602080870180519186019190915251909150617f7a9082618716565b835284516020860151617f8d9190619537565b8103617f9c5760008552617fce565b83518351617faa9190619537565b85518690617fb9908390618716565b9052508351617fc89082619537565b60208601525b50909392505050565b6020811061800f5781518352617fee602084619537565b9250617ffb602083619537565b9150618008602082618716565b9050617fd7565b600019811561803e576001618025836020618716565b61803190610100619851565b61803b9190618716565b90505b9151835183169219169190911790915250565b6060600061805f848461453d565b805160208083015160405193945061807993909101619874565b60405160208183030381529060405291505092915050565b81518151600091908111156180a4575081515b6020808501519084015160005b8381101561815d578251825180821461812d57600019602087101561810c576001846180de896020618716565b6180e89190619537565b6180f3906008619753565b6180fe906002619851565b6181089190618716565b1990505b818116838216818103911461812a5797506140749650505050505050565b50505b618138602086619537565b9450618145602085619537565b935050506020816181569190619537565b90506180b1565b5084518651614beb91906198cc565b610c9f806198ed83390190565b6117988061a58c83390190565b6116638061bd2483390190565b610d5e8061d38783390190565b6040518060e001604052806060815260200160608152602001606081526020016000151581526020016000151581526020016000151581526020016181e36181e8565b905290565b604051806101000160405280600015158152602001600015158152602001606081526020016000801916815260200160608152602001606081526020016000151581526020016181e36040518060800160405280600081526020016000815260200160008152602001600081525090565b602080825282518282018190526000918401906040840190835b8181101561829a5783516001600160a01b0316835260209384019390920191600101618273565b509095945050505050565b60005b838110156182c05781810151838201526020016182a8565b50506000910152565b600081518084526182e18160208601602086016182a5565b601f01601f19169290920160200192915050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b828110156183f1577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452815180516001600160a01b03168652602090810151604082880181905281519088018190529101906060600582901b88018101919088019060005b818110156183d7577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa08a85030183526183c18486516182c9565b6020958601959094509290920191600101618387565b50919750505060209485019492909201915060010161831d565b50929695505050505050565b600081518084526020840193506020830160005b828110156184515781517fffffffff0000000000000000000000000000000000000000000000000000000016865260209586019590910190600101618411565b5093949350505050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b828110156183f1577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc087860301845281518051604087526184c760408801826182c9565b90506020820151915086810360208801526184e281836183fd565b965050506020938401939190910190600101618483565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b828110156183f1577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc087860301845261855b8583516182c9565b94506020938401939190910190600101618521565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b828110156183f1577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc087860301845281516001600160a01b03815116865260208101519050604060208701526185f160408701826183fd565b9550506020938401939190910190600101618598565b600181811c9082168061861b57607f821691505b602082108103616336577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006020828403121561866657600080fd5b5051919050565b6001600160a01b038416815282602082015260606040820152600061631c60608301846182c9565b828152604060208201526000615a6a60408301846182c9565b6001600160a01b03851681528360208201526080604082015260006186d660808301856182c9565b905082606083015295945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b81810381811115614074576140746186e7565b60208152600061416d60208301846182c9565b600082618772577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b6001600160a01b0383168152604060208201526000615a6a60408301846182c9565b7f4661696c656420746f206465706c6f7920636f6e7472616374200000000000008152600083516187d181601a8501602088016182a5565b7f3a20000000000000000000000000000000000000000000000000000000000000601a91840191820152835161880e81601c8401602088016182a5565b01601c01949350505050565b60006020828403121561882c57600080fd5b81516001600160a01b038116811461416d57600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040516060810167ffffffffffffffff8111828210171561889557618895618843565b60405290565b60008067ffffffffffffffff8411156188b6576188b6618843565b50604051601f19601f85018116603f0116810181811067ffffffffffffffff821117156188e5576188e5618843565b6040528381529050808284018510156188fd57600080fd5b615e398460208301856182a5565b600082601f83011261891c57600080fd5b61416d8383516020850161889b565b60006020828403121561893d57600080fd5b815167ffffffffffffffff81111561895457600080fd5b6140708482850161890b565b600083516189728184602088016182a5565b8351908301906189868183602088016182a5565b01949350505050565b7f4661696c656420746f206465706c6f7920636f6e7472616374200000000000008152600083516189c781601a8501602088016182a5565b7f207573696e6720636f6e7374727563746f722064617461202200000000000000601a918401918201528351618a048160338401602088016182a5565b7f220000000000000000000000000000000000000000000000000000000000000060339290910191820152603401949350505050565b60408152600b60408201527f464f554e4452595f4f5554000000000000000000000000000000000000000000606082015260806020820152600061416d60808301846182c9565b600060208284031215618a9357600080fd5b815167ffffffffffffffff811115618aaa57600080fd5b8201601f81018413618abb57600080fd5b6140708482516020840161889b565b60008551618adc818460208a016182a5565b7f2f000000000000000000000000000000000000000000000000000000000000009083019081528551618b16816001840160208a016182a5565b7f2f00000000000000000000000000000000000000000000000000000000000000600192909101918201528451618b548160028401602089016182a5565b6001818301019150507f2f0000000000000000000000000000000000000000000000000000000000000060018201528351618b968160028401602088016182a5565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600292909101918201526007019695505050505050565b604081526000618be160408301846182c9565b8281036020840152600481527f2e6173740000000000000000000000000000000000000000000000000000000060208201526040810191505092915050565b600060208284031215618c3257600080fd5b8151801515811461416d57600080fd5b7f436f756c64206e6f742066696e642041535420696e2061727469666163742000815260008251618c7a81601f8501602087016182a5565b7f2e205365742060617374203d20747275656020696e20666f756e6472792e746f601f9390910192830152507f6d6c000000000000000000000000000000000000000000000000000000000000603f820152604101919050565b604081526000618ce760408301846182c9565b8281036020840152601181527f2e6173742e6162736f6c7574655061746800000000000000000000000000000060208201526040810191505092915050565b604081526000618d3960408301846182c9565b8281036020840152600c81527f2e6173742e6c6963656e7365000000000000000000000000000000000000000060208201526040810191505092915050565b7f2e6d657461646174612e736f75726365732e5b27000000000000000000000000815260008251618db08160148501602087016182a5565b7f275d2e6b656363616b32353600000000000000000000000000000000000000006014939091019283015250602001919050565b604081526000618df760408301856182c9565b828103602084015261416981856182c9565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f2200000000000000000000000000000000000000000000000000000000000000815260008251618e708160018501602087016182a5565b7f22000000000000000000000000000000000000000000000000000000000000006001939091019283015250600201919050565b60008251618eb68184602087016182a5565b7f2f6275696c642d696e666f000000000000000000000000000000000000000000920191825250600b01919050565b7f436f756c64206e6f742066696e64206275696c642d696e666f2066696c65207781527f697468206d61746368696e6720736f7572636520636f6465206861736820666f60208201527f7220636f6e747261637420000000000000000000000000000000000000000000604082015260008251618f6981604b8501602087016182a5565b91909101604b0192915050565b600060ff821660ff8103618f8c57618f8c6186e7565b60010192915050565b7f406f70656e7a657070656c696e2f646566656e6465722d6465706c6f792d636c81527f69656e742d636c69400000000000000000000000000000000000000000000000602082015260008251618ff38160298501602087016182a5565b9190910160290192915050565b60408152601660408201527f4f50454e5a455050454c494e5f424153485f5041544800000000000000000000606082015260806020820152600061416d60808301846182c9565b60006020828403121561905957600080fd5b815167ffffffffffffffff81111561907057600080fd5b82016060818503121561908257600080fd5b61908a618872565b81518060030b811461909b57600080fd5b8152602082015167ffffffffffffffff8111156190b757600080fd5b6190c38682850161890b565b602083015250604082015167ffffffffffffffff8111156190e357600080fd5b6190ef8682850161890b565b604083015250949350505050565b7f4661696c656420746f2072756e206261736820636f6d6d616e6420776974682081527f220000000000000000000000000000000000000000000000000000000000000060208201526000825161915b8160218501602087016182a5565b7f222e20496620796f7520617265207573696e672057696e646f77732c2073657460219390910192830152507f20746865204f50454e5a455050454c494e5f424153485f5041544820656e766960418201527f726f6e6d656e74207661726961626c6520746f207468652066756c6c7920717560618201527f616c69666965642070617468206f66207468652062617368206578656375746160818201527f626c652e20466f72206578616d706c652c20696620796f75206172652075736960a18201527f6e672047697420666f722057696e646f77732c206164642074686520666f6c6c60c18201527f6f77696e67206c696e6520696e20746865202e656e762066696c65206f66207960e18201527f6f75722070726f6a65637420287573696e6720666f727761726420736c6173686101018201527f6573293a0a4f50454e5a455050454c494e5f424153485f504154483d22433a2f6101218201527f50726f6772616d2046696c65732f4769742f62696e2f6261736822000000000061014182015261015c01919050565b7f4661696c656420746f2066696e64206c696e652077697468207072656669782081527f27000000000000000000000000000000000000000000000000000000000000006020820152600083516193478160218501602088016182a5565b7f2720696e206f75747075743a2000000000000000000000000000000000000000602191840191820152835161938481602e8401602088016182a5565b01602e01949350505050565b7f4661696c656420746f2072756e2075706772616465207361666574792076616c81527f69646174696f6e3a200000000000000000000000000000000000000000000000602082015260008251618ff38160298501602087016182a5565b7f55706772616465207361666574792076616c69646174696f6e206661696c656481527f3a0a00000000000000000000000000000000000000000000000000000000000060208201526000825161944c8160228501602087016182a5565b9190910160220192915050565b7f436f6e7472616374206e616d652000000000000000000000000000000000000081526000825161949181600e8501602087016182a5565b7f206d75737420626520696e2074686520666f726d6174204d79436f6e74726163600e9390910192830152507f742e736f6c3a4d79436f6e7472616374206f72204d79436f6e74726163742e73602e8201527f6f6c206f72206f75742f4d79436f6e74726163742e736f6c2f4d79436f6e7472604e8201527f6163742e6a736f6e000000000000000000000000000000000000000000000000606e820152607601919050565b80820180821115614074576140746186e7565b7f53504458206c6963656e7365206964656e7469666965722000000000000000008152600083516195828160188501602088016182a5565b7f20696e200000000000000000000000000000000000000000000000000000000060189184019182015283516195bf81601c8401602088016182a5565b7f20646f6573206e6f74206c6f6f6b206c696b65206120737570706f7274656420601c92909101918201527f6c6963656e736520666f7220626c6f636b206578706c6f726572207665726966603c8201527f69636174696f6e2e205573652074686520606c6963656e73655479706560206f605c8201527f7074696f6e20746f20737065636966792061206c6963656e736520747970652c607c8201527f206f7220736574207468652060736b69704c6963656e73655479706560206f70609c8201527f74696f6e20746f2060747275656020746f20736b69702e00000000000000000060bc82015260d301949350505050565b600082516196c58184602087016182a5565b7f2000000000000000000000000000000000000000000000000000000000000000920191825250600101919050565b7f406f70656e7a657070656c696e2f75706772616465732d636f7265400000000081526000825161972c81601c8501602087016182a5565b91909101601c0192915050565b6000600019820361974c5761974c6186e7565b5060010190565b8082028115828204841417614074576140746186e7565b6001815b60018411156197a557808504811115619789576197896186e7565b600184161561979757908102905b60019390931c92800261976e565b935093915050565b6000826197bc57506001614074565b816197c957506000614074565b81600181146197df57600281146197e957619805565b6001915050614074565b60ff8411156197fa576197fa6186e7565b50506001821b614074565b5060208310610133831016604e8410600b8410161715619828575081810a614074565b619835600019848461976a565b8060001904821115619849576198496186e7565b029392505050565b600061416d83836197ad565b60008161986c5761986c6186e7565b506000190190565b600083516198868184602088016182a5565b7f3a0000000000000000000000000000000000000000000000000000000000000090830190815283516198c08160018401602088016182a5565b01600101949350505050565b8181036000831280158383131683831282161715617431576174316186e756fe608060405234801561001057600080fd5b50604051610c9f380380610c9f83398101604081905261002f9161010d565b8181600361003d83826101ff565b50600461004a82826101ff565b50505050506102bd565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261007b57600080fd5b81516001600160401b0381111561009457610094610054565b604051601f8201601f19908116603f011681016001600160401b03811182821017156100c2576100c2610054565b6040528181528382016020018510156100da57600080fd5b60005b828110156100f9576020818601810151838301820152016100dd565b506000918101602001919091529392505050565b6000806040838503121561012057600080fd5b82516001600160401b0381111561013657600080fd5b6101428582860161006a565b602085015190935090506001600160401b0381111561016057600080fd5b61016c8582860161006a565b9150509250929050565b600181811c9082168061018a57607f821691505b6020821081036101aa57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156101fa57806000526020600020601f840160051c810160208510156101d75750805b601f840160051c820191505b818110156101f757600081556001016101e3565b50505b505050565b81516001600160401b0381111561021857610218610054565b61022c816102268454610176565b846101b0565b6020601f82116001811461026057600083156102485750848201515b600019600385901b1c1916600184901b1784556101f7565b600084815260208120601f198516915b828110156102905787850151825560209485019460019092019101610270565b50848210156102ae5786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b6109d3806102cc6000396000f3fe608060405234801561001057600080fd5b50600436106100be5760003560e01c806340c10f191161007657806395d89b411161005b57806395d89b4114610183578063a9059cbb1461018b578063dd62ed3e1461019e57600080fd5b806340c10f191461013857806370a082311461014d57600080fd5b806318160ddd116100a757806318160ddd1461010457806323b872dd14610116578063313ce5671461012957600080fd5b806306fdde03146100c3578063095ea7b3146100e1575b600080fd5b6100cb6101e4565b6040516100d891906107bf565b60405180910390f35b6100f46100ef366004610854565b610276565b60405190151581526020016100d8565b6002545b6040519081526020016100d8565b6100f461012436600461087e565b610290565b604051601281526020016100d8565b61014b610146366004610854565b6102b4565b005b61010861015b3660046108bb565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6100cb6102c2565b6100f4610199366004610854565b6102d1565b6101086101ac3660046108dd565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6060600380546101f390610910565b80601f016020809104026020016040519081016040528092919081815260200182805461021f90610910565b801561026c5780601f106102415761010080835404028352916020019161026c565b820191906000526020600020905b81548152906001019060200180831161024f57829003601f168201915b5050505050905090565b6000336102848185856102df565b60019150505b92915050565b60003361029e8582856102f1565b6102a98585856103c5565b506001949350505050565b6102be8282610470565b5050565b6060600480546101f390610910565b6000336102848185856103c5565b6102ec83838360016104cc565b505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146103bf57818110156103b0576040517ffb8f41b200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416600482015260248101829052604481018390526064015b60405180910390fd5b6103bf848484840360006104cc565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8316610415576040517f96c6fd1e000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff8216610465576040517fec442f05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b6102ec838383610614565b73ffffffffffffffffffffffffffffffffffffffff82166104c0576040517fec442f05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b6102be60008383610614565b73ffffffffffffffffffffffffffffffffffffffff841661051c576040517fe602df05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff831661056c576040517f94280d62000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260016020908152604080832093871683529290522082905580156103bf578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161060691815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff831661064c5780600260008282546106419190610963565b909155506106fe9050565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260208190526040902054818110156106d2576040517fe450d38c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8516600482015260248101829052604481018390526064016103a7565b73ffffffffffffffffffffffffffffffffffffffff841660009081526020819052604090209082900390555b73ffffffffffffffffffffffffffffffffffffffff821661072757600280548290039055610753565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090208054820190555b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516107b291815260200190565b60405180910390a3505050565b602081526000825180602084015260005b818110156107ed57602081860181015160408684010152016107d0565b5060006040828501015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011684010191505092915050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461084f57600080fd5b919050565b6000806040838503121561086757600080fd5b6108708361082b565b946020939093013593505050565b60008060006060848603121561089357600080fd5b61089c8461082b565b92506108aa6020850161082b565b929592945050506040919091013590565b6000602082840312156108cd57600080fd5b6108d68261082b565b9392505050565b600080604083850312156108f057600080fd5b6108f98361082b565b91506109076020840161082b565b90509250929050565b600181811c9082168061092457607f821691505b60208210810361095d577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b8082018082111561028a577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea26469706673582212207e804ca539d49155d2b6bc19268ce22f9f857027c75247d69fb0d56a089c93d464736f6c634300081a003360a060405234801561001057600080fd5b5060405161179838038061179883398101604081905261002f916101e5565b60016000556002805460ff191690556001600160a01b038316158061005b57506001600160a01b038216155b8061006d57506001600160a01b038116155b1561008b5760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b0383166080526100a3600082610134565b506100ce7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a82610134565b506100f97f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e483610134565b5061011260008051602061177883398151915282610134565b5061012b60008051602061177883398151915283610134565b50505050610228565b60008281526001602090815260408083206001600160a01b038516845290915281205460ff166101bf5760008381526001602081815260408084206001600160a01b0387168086529252808420805460ff19169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45060016101c3565b5060005b92915050565b80516001600160a01b03811681146101e057600080fd5b919050565b6000806000606084860312156101fa57600080fd5b610203846101c9565b9250610211602085016101c9565b915061021f604085016101c9565b90509250925092565b60805161151961025f6000396000818161019e01528181610500015281816105620152818161099101526109f301526115196000f3fe608060405234801561001057600080fd5b506004361061016c5760003560e01c806385f438c1116100cd578063c8a0236211610081578063d936547e11610066578063d936547e14610355578063d9caed1214610378578063e63ab1e91461038b57600080fd5b8063c8a023621461032f578063d547741f1461034257600080fd5b80639a590427116100b25780639a590427146103015780639b19251a14610314578063a217fddf1461032757600080fd5b806385f438c11461029457806391d14854146102bb57600080fd5b806336568abe11610124578063570618e111610109578063570618e11461025a5780635c975abb146102815780638456cb591461028c57600080fd5b806336568abe1461023f5780633f4ba83a1461025257600080fd5b806321fc65f21161015557806321fc65f2146101e5578063248a9ca3146101fa5780632f2ff15d1461022c57600080fd5b806301ffc9a714610171578063116191b614610199575b600080fd5b61018461017f366004611224565b6103b2565b60405190151581526020015b60405180910390f35b6101c07f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610190565b6101f86101f336600461128f565b61044b565b005b61021e61020836600461132c565b6000908152600160208190526040909120015490565b604051908152602001610190565b6101f861023a366004611345565b61064c565b6101f861024d366004611345565b610678565b6101f86106d6565b61021e7f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a81565b60025460ff16610184565b6101f861070b565b61021e7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b6101846102c9366004611345565b600091825260016020908152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b6101f861030f366004611371565b61073d565b6101f8610322366004611371565b61080b565b61021e600081565b6101f861033d36600461128f565b6108dc565b6101f8610350366004611345565b610ac3565b610184610363366004611371565b60036020526000908152604090205460ff1681565b6101f861038636600461138c565b610ae9565b61021e7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061044557507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b610453610c15565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461047d81610c58565b610485610c62565b73ffffffffffffffffffffffffffffffffffffffff861660009081526003602052604090205460ff166104e4576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61052573ffffffffffffffffffffffffffffffffffffffff87167f000000000000000000000000000000000000000000000000000000000000000086610ca1565b6040517f5131ab5900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690635131ab599061059f9089908990899089908990600401611412565b600060405180830381600087803b1580156105b957600080fd5b505af11580156105cd573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167f85b5be9cf454e05e0bddf49315178102227c312078eefa3c00294fb4d912ae4e8686866040516106329392919061146f565b60405180910390a3506106456001600055565b5050505050565b6000828152600160208190526040909120015461066881610c58565b6106728383610d2e565b50505050565b73ffffffffffffffffffffffffffffffffffffffff811633146106c7576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6106d18282610ddb565b505050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61070081610c58565b610708610e7c565b50565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61073581610c58565b610708610edb565b7f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a61076781610c58565b73ffffffffffffffffffffffffffffffffffffffff82166107b4576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216600081815260036020526040808220805460ff19169055517f51085ddf9ebdded84b76e829eb58c4078e4b5bdf97d9a94723f336039da467919190a25050565b7f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a61083581610c58565b73ffffffffffffffffffffffffffffffffffffffff8216610882576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216600081815260036020526040808220805460ff19166001179055517faab7954e9d246b167ef88aeddad35209ca2489d95a8aeb59e288d9b19fae5a549190a25050565b6108e4610c15565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461090e81610c58565b610916610c62565b73ffffffffffffffffffffffffffffffffffffffff861660009081526003602052604090205460ff16610975576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6109b673ffffffffffffffffffffffffffffffffffffffff87167f000000000000000000000000000000000000000000000000000000000000000086610ca1565b6040517fb8969bd400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063b8969bd490610a309089908990899089908990600401611412565b600060405180830381600087803b158015610a4a57600080fd5b505af1158015610a5e573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fb9d4efa96044e5f5e03e696fa9ae2ff66911cc27e8a637c3627c75bc5b2241c88686866040516106329392919061146f565b60008281526001602081905260409091200154610adf81610c58565b6106728383610ddb565b610af1610c15565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e4610b1b81610c58565b610b23610c62565b73ffffffffffffffffffffffffffffffffffffffff841660009081526003602052604090205460ff16610b82576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610ba373ffffffffffffffffffffffffffffffffffffffff85168484610ca1565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f9b1bfa7fa9ee420a16e124f794c35ac9f90472acc99140eb2f6447c714cad8eb84604051610c0291815260200190565b60405180910390a3506106d16001600055565b600260005403610c51576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b6107088133610f18565b60025460ff1615610c9f576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6040805173ffffffffffffffffffffffffffffffffffffffff8416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb000000000000000000000000000000000000000000000000000000001790526106d1908490610fa9565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff16610dd357600083815260016020818152604080842073ffffffffffffffffffffffffffffffffffffffff87168086529252808420805460ff19169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a4506001610445565b506000610445565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff1615610dd357600083815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff86168085529252808320805460ff1916905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a4506001610445565b610e8461103f565b6002805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b610ee3610c62565b6002805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258610eb13390565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16610fa5576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82166004820152602481018390526044015b60405180910390fd5b5050565b6000610fcb73ffffffffffffffffffffffffffffffffffffffff84168361107b565b90508051600014158015610ff0575080806020019051810190610fee9190611492565b155b156106d1576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84166004820152602401610f9c565b60025460ff16610c9f576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606061108983836000611090565b9392505050565b6060814710156110ce576040517fcd786059000000000000000000000000000000000000000000000000000000008152306004820152602401610f9c565b6000808573ffffffffffffffffffffffffffffffffffffffff1684866040516110f791906114b4565b60006040518083038185875af1925050503d8060008114611134576040519150601f19603f3d011682016040523d82523d6000602084013e611139565b606091505b5091509150611149868383611153565b9695505050505050565b60608261116857611163826111e2565b611089565b815115801561118c575073ffffffffffffffffffffffffffffffffffffffff84163b155b156111db576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85166004820152602401610f9c565b5080611089565b8051156111f25780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006020828403121561123657600080fd5b81357fffffffff000000000000000000000000000000000000000000000000000000008116811461108957600080fd5b803573ffffffffffffffffffffffffffffffffffffffff8116811461128a57600080fd5b919050565b6000806000806000608086880312156112a757600080fd5b6112b086611266565b94506112be60208701611266565b935060408601359250606086013567ffffffffffffffff8111156112e157600080fd5b8601601f810188136112f257600080fd5b803567ffffffffffffffff81111561130957600080fd5b88602082840101111561131b57600080fd5b959894975092955050506020019190565b60006020828403121561133e57600080fd5b5035919050565b6000806040838503121561135857600080fd5b8235915061136860208401611266565b90509250929050565b60006020828403121561138357600080fd5b61108982611266565b6000806000606084860312156113a157600080fd5b6113aa84611266565b92506113b860208501611266565b929592945050506040919091013590565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff8616815273ffffffffffffffffffffffffffffffffffffffff851660208201528360408201526080606082015260006114646080830184866113c9565b979650505050505050565b8381526040602082015260006114896040830184866113c9565b95945050505050565b6000602082840312156114a457600080fd5b8151801515811461108957600080fd5b6000825160005b818110156114d557602081860181015185830152016114bb565b50600092019182525091905056fea26469706673582212207ea3ad4ba4a6d39c3be3cec464753448900300ac3b508b4000815de5b914c53064736f6c634300081a00338619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a60c060405234801561001057600080fd5b5060405161166338038061166383398101604081905261002f9161021a565b60016000819055805460ff19169055838383836001600160a01b038416158061005f57506001600160a01b038316155b8061007157506001600160a01b038216155b8061008357506001600160a01b038116155b156100a15760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b03808516608052831660a0526100bf60008261014e565b506100ea7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e48361014e565b506101157f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb8361014e565b506101407f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a8261014e565b50505050505050505061026e565b60008281526002602090815260408083206001600160a01b038516845290915281205460ff166101f45760008381526002602090815260408083206001600160a01b03861684529091529020805460ff191660011790556101ac3390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45060016101f8565b5060005b92915050565b80516001600160a01b038116811461021557600080fd5b919050565b6000806000806080858703121561023057600080fd5b610239856101fe565b9350610247602086016101fe565b9250610255604086016101fe565b9150610263606086016101fe565b905092959194509250565b60805160a05161138a6102d9600039600081816101f701528181610474015281816105250152818161063f015281816107d30152818161088401526109520152600081816101ab01528181610496015281816104f8015281816107f50152610857015261138a6000f3fe608060405234801561001057600080fd5b50600436106101515760003560e01c80635c975abb116100cd57806391d1485411610081578063a783c78911610066578063a783c78914610326578063d547741f1461034d578063e63ab1e91461036057600080fd5b806391d14854146102d8578063a217fddf1461031e57600080fd5b8063743e0c9b116100b2578063743e0c9b146102965780638456cb59146102a957806385f438c1146102b157600080fd5b80635c975abb146102785780635e3e9fef1461028357600080fd5b806321e093b1116101245780632f2ff15d116101095780632f2ff15d1461024a57806336568abe1461025d5780633f4ba83a1461027057600080fd5b806321e093b1146101f2578063248a9ca31461021957600080fd5b806301ffc9a71461015657806302d5c8991461017e578063106e629014610193578063116191b6146101a6575b600080fd5b6101696101643660046110c5565b610387565b60405190151581526020015b60405180910390f35b61019161018c366004611130565b610420565b005b6101916101a13660046111c2565b6105eb565b6101cd7f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610175565b6101cd7f000000000000000000000000000000000000000000000000000000000000000081565b61023c6102273660046111f5565b60009081526002602052604090206001015490565b604051908152602001610175565b61019161025836600461120e565b6106c6565b61019161026b36600461120e565b6106f1565b61019161074a565b60015460ff16610169565b610191610291366004611130565b61077f565b6101916102a43660046111f5565b610930565b61019161097a565b61023c7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b6101696102e636600461120e565b600091825260026020908152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b61023c600081565b61023c7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb81565b61019161035b36600461120e565b6109ac565b61023c7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061041a57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b6104286109d1565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461045281610a14565b61045a610a1e565b6104bb73ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000167f000000000000000000000000000000000000000000000000000000000000000087610a5d565b6040517fb8969bd400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063b8969bd490610555907f0000000000000000000000000000000000000000000000000000000000000000908a908a908a908a90600401611283565b600060405180830381600087803b15801561056f57600080fd5b505af1158015610583573d6000803e3d6000fd5b505050508573ffffffffffffffffffffffffffffffffffffffff167fba96f26bdda53eb8c8ba39045dfb4ff39753fbc7a6edcf250a88e75e78d102fe8686866040516105d1939291906112e0565b60405180910390a2506105e46001600055565b5050505050565b6105f36109d1565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461061d81610a14565b610625610a1e565b61066673ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168585610a5d565b8373ffffffffffffffffffffffffffffffffffffffff167f884edad9ce6fa2440d8a54cc123490eb96d2768479d49ff9c7366125a9424364846040516106ae91815260200190565b60405180910390a2506106c16001600055565b505050565b6000828152600260205260409020600101546106e181610a14565b6106eb8383610ade565b50505050565b73ffffffffffffffffffffffffffffffffffffffff81163314610740576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6106c18282610bde565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61077481610a14565b61077c610c9d565b50565b6107876109d1565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e46107b181610a14565b6107b9610a1e565b61081a73ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000167f000000000000000000000000000000000000000000000000000000000000000087610a5d565b6040517f5131ab5900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690635131ab59906108b4907f0000000000000000000000000000000000000000000000000000000000000000908a908a908a908a90600401611283565b600060405180830381600087803b1580156108ce57600080fd5b505af11580156108e2573d6000803e3d6000fd5b505050508573ffffffffffffffffffffffffffffffffffffffff167f7772f56296d3a5202974a45c61c9188d844ab4d6eeb18c851e4b8d5384ca6ced8686866040516105d1939291906112e0565b610938610a1e565b61077c73ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016333084610d1a565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a6109a481610a14565b61077c610d60565b6000828152600260205260409020600101546109c781610a14565b6106eb8383610bde565b600260005403610a0d576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b61077c8133610db9565b60015460ff1615610a5b576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b60405173ffffffffffffffffffffffffffffffffffffffff8381166024830152604482018390526106c191859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050610e4a565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff16610bd657600083815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff86168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055610b743390565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a450600161041a565b50600061041a565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff1615610bd657600083815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8616808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a450600161041a565b610ca5610ee0565b600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b60405173ffffffffffffffffffffffffffffffffffffffff84811660248301528381166044830152606482018390526106eb9186918216906323b872dd90608401610a97565b610d68610a1e565b600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016811790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25833610cf0565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16610e46576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82166004820152602481018390526044015b60405180910390fd5b5050565b6000610e6c73ffffffffffffffffffffffffffffffffffffffff841683610f1c565b90508051600014158015610e91575080806020019051810190610e8f9190611303565b155b156106c1576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84166004820152602401610e3d565b60015460ff16610a5b576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6060610f2a83836000610f31565b9392505050565b606081471015610f6f576040517fcd786059000000000000000000000000000000000000000000000000000000008152306004820152602401610e3d565b6000808573ffffffffffffffffffffffffffffffffffffffff168486604051610f989190611325565b60006040518083038185875af1925050503d8060008114610fd5576040519150601f19603f3d011682016040523d82523d6000602084013e610fda565b606091505b5091509150610fea868383610ff4565b9695505050505050565b6060826110095761100482611083565b610f2a565b815115801561102d575073ffffffffffffffffffffffffffffffffffffffff84163b155b1561107c576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85166004820152602401610e3d565b5080610f2a565b8051156110935780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000602082840312156110d757600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610f2a57600080fd5b803573ffffffffffffffffffffffffffffffffffffffff8116811461112b57600080fd5b919050565b60008060008060006080868803121561114857600080fd5b61115186611107565b945060208601359350604086013567ffffffffffffffff81111561117457600080fd5b8601601f8101881361118557600080fd5b803567ffffffffffffffff81111561119c57600080fd5b8860208284010111156111ae57600080fd5b959894975060200195606001359392505050565b6000806000606084860312156111d757600080fd5b6111e084611107565b95602085013595506040909401359392505050565b60006020828403121561120757600080fd5b5035919050565b6000806040838503121561122157600080fd5b8235915061123160208401611107565b90509250929050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff8616815273ffffffffffffffffffffffffffffffffffffffff851660208201528360408201526080606082015260006112d560808301848661123a565b979650505050505050565b8381526040602082015260006112fa60408301848661123a565b95945050505050565b60006020828403121561131557600080fd5b81518015158114610f2a57600080fd5b6000825160005b81811015611346576020818601810151858301520161132c565b50600092019182525091905056fea264697066735822122055d09557e5c9ebfe94b17ac42f0790bf256cf4c257e31c46bc4dbb126e31fe1964736f6c634300081a00336080604052348015600f57600080fd5b506001600055610d3a806100246000396000f3fe6080604052600436106100635760003560e01c8063c513169111610040578063c5131691146100c1578063e04d4f97146100e1578063f05b6abf146100f457005b8063357fc5a21461006c5780636ed701691461008c5780638fcaa0b5146100a157005b3661006a57005b005b34801561007857600080fd5b5061006a6100873660046106c0565b610114565b34801561009857600080fd5b5061006a6101aa565b3480156100ad57600080fd5b5061006a6100bc3660046106fc565b6101df565b3480156100cd57600080fd5b5061006a6100dc3660046106c0565b61021e565b61006a6100ef366004610895565b6102f9565b34801561010057600080fd5b5061006a61010f366004610981565b61033d565b61011c610372565b61013e73ffffffffffffffffffffffffffffffffffffffff83163383866103b5565b604080513381526020810185905273ffffffffffffffffffffffffffffffffffffffff848116828401528316606082015290517f2b58128f24a9f59127cc5b5430d70542b22220f2d9adaa86e442b816ab98af609181900360800190a16101a56001600055565b505050565b6040513381527fbcaadb46b82a48af60b608f58959ae6b8310d1b0a0d094c2e9ec3208ed39f2a09060200160405180910390a1565b7f0d3f65f00e631663aa85c96330b5c7a83bb29af3630c0063776f985edc3037aa33838360405161021293929190610a6b565b60405180910390a15050565b610226610372565b6000610233600285610ad5565b90508060000361026f576040517f1f2a200500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61029173ffffffffffffffffffffffffffffffffffffffff84163384846103b5565b604080513381526020810183905273ffffffffffffffffffffffffffffffffffffffff858116828401528416606082015290517f2b58128f24a9f59127cc5b5430d70542b22220f2d9adaa86e442b816ab98af609181900360800190a1506101a56001600055565b7f1f1ff1f5fb41346850b2f5c04e6c767e2f1c8a525c5c0c5cdb60cdf3ca5f62fa3334858585604051610330959493929190610b7e565b60405180910390a1505050565b7f74a53cd528a921fca7dbdee62f86819051d3cc98f214951f4238e8843f20b146338484846040516103309493929190610c08565b6002600054036103ae576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b6040805173ffffffffffffffffffffffffffffffffffffffff85811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd0000000000000000000000000000000000000000000000000000000017905261044a908590610450565b50505050565b600061047273ffffffffffffffffffffffffffffffffffffffff8416836104eb565b905080516000141580156104975750808060200190518101906104959190610ccb565b155b156101a5576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff841660048201526024015b60405180910390fd5b60606104f983836000610500565b9392505050565b60608147101561053e576040517fcd7860590000000000000000000000000000000000000000000000000000000081523060048201526024016104e2565b6000808573ffffffffffffffffffffffffffffffffffffffff1684866040516105679190610ce8565b60006040518083038185875af1925050503d80600081146105a4576040519150601f19603f3d011682016040523d82523d6000602084013e6105a9565b606091505b50915091506105b98683836105c3565b9695505050505050565b6060826105d8576105d382610652565b6104f9565b81511580156105fc575073ffffffffffffffffffffffffffffffffffffffff84163b155b1561064b576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff851660048201526024016104e2565b50806104f9565b8051156106625780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50565b803573ffffffffffffffffffffffffffffffffffffffff811681146106bb57600080fd5b919050565b6000806000606084860312156106d557600080fd5b833592506106e560208501610697565b91506106f360408501610697565b90509250925092565b6000806020838503121561070f57600080fd5b823567ffffffffffffffff81111561072657600080fd5b8301601f8101851361073757600080fd5b803567ffffffffffffffff81111561074e57600080fd5b85602082840101111561076057600080fd5b6020919091019590945092505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156107e6576107e6610770565b604052919050565b600082601f8301126107ff57600080fd5b813567ffffffffffffffff81111561081957610819610770565b61084a60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8401160161079f565b81815284602083860101111561085f57600080fd5b816020850160208301376000918101602001919091529392505050565b801515811461069457600080fd5b80356106bb8161087c565b6000806000606084860312156108aa57600080fd5b833567ffffffffffffffff8111156108c157600080fd5b6108cd868287016107ee565b9350506020840135915060408401356108e58161087c565b809150509250925092565b600067ffffffffffffffff82111561090a5761090a610770565b5060051b60200190565b600082601f83011261092557600080fd5b8135610938610933826108f0565b61079f565b8082825260208201915060208360051b86010192508583111561095a57600080fd5b602085015b8381101561097757803583526020928301920161095f565b5095945050505050565b60008060006060848603121561099657600080fd5b833567ffffffffffffffff8111156109ad57600080fd5b8401601f810186136109be57600080fd5b80356109cc610933826108f0565b8082825260208201915060208360051b8501019250888311156109ee57600080fd5b602084015b83811015610a3057803567ffffffffffffffff811115610a1257600080fd5b610a218b6020838901016107ee565b845250602092830192016109f3565b509550505050602084013567ffffffffffffffff811115610a5057600080fd5b610a5c86828701610914565b9250506106f36040850161088a565b73ffffffffffffffffffffffffffffffffffffffff8416815260406020820152816040820152818360608301376000818301606090810191909152601f9092017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016010192915050565b600082610b0b577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60005b83811015610b2b578181015183820152602001610b13565b50506000910152565b60008151808452610b4c816020860160208601610b10565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b73ffffffffffffffffffffffffffffffffffffffff8616815284602082015260a060408201526000610bb360a0830186610b34565b6060830194909452509015156080909101529392505050565b600081518084526020840193506020830160005b82811015610bfe578151865260209586019590910190600101610be0565b5093949350505050565b60006080820173ffffffffffffffffffffffffffffffffffffffff871683526080602084015280865180835260a08501915060a08160051b86010192506020880160005b82811015610c9b577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60878603018452610c86858351610b34565b94506020938401939190910190600101610c4c565b505050508281036040840152610cb18186610bcc565b915050610cc2606083018415159052565b95945050505050565b600060208284031215610cdd57600080fd5b81516104f98161087c565b60008251610cfa818460208701610b10565b919091019291505056fea2646970667358221220556072e1abafc3c4063b8cce832228b4f309b93726aaa6a6dfab20cb880c6d1864736f6c634300081a0033a26469706673582212201ba12d7c8859be25a95bf54ad55080232347284f8b89a2ab4ad5b383e9b757a464736f6c634300081a0033", } // ZetaConnectorNativeTestABI is the input ABI used to generate the binding from. diff --git a/v2/pkg/zetaconnectornonnative.t.sol/zetaconnectornonnativetest.go b/v2/pkg/zetaconnectornonnative.t.sol/zetaconnectornonnativetest.go index b3391b06..51a318e6 100644 --- a/v2/pkg/zetaconnectornonnative.t.sol/zetaconnectornonnativetest.go +++ b/v2/pkg/zetaconnectornonnative.t.sol/zetaconnectornonnativetest.go @@ -50,7 +50,7 @@ type StdInvariantFuzzSelector struct { // ZetaConnectorNonNativeTestMetaData contains all meta data concerning the ZetaConnectorNonNativeTest contract. var ZetaConnectorNonNativeTestMetaData = &bind.MetaData{ ABI: "[{\"type\":\"function\",\"name\":\"IS_TEST\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"PAUSER_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"TSS_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"WITHDRAWER_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeArtifacts\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedArtifacts_\",\"type\":\"string[]\",\"internalType\":\"string[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeContracts\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedContracts_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeSelectors\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedSelectors_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzSelector[]\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"selectors\",\"type\":\"bytes4[]\",\"internalType\":\"bytes4[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeSenders\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedSenders_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"failed\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"setUp\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"targetArtifactSelectors\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedArtifactSelectors_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzArtifactSelector[]\",\"components\":[{\"name\":\"artifact\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"selectors\",\"type\":\"bytes4[]\",\"internalType\":\"bytes4[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetArtifacts\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedArtifacts_\",\"type\":\"string[]\",\"internalType\":\"string[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetContracts\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedContracts_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetInterfaces\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedInterfaces_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzInterface[]\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"artifacts\",\"type\":\"string[]\",\"internalType\":\"string[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetSelectors\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedSelectors_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzSelector[]\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"selectors\",\"type\":\"bytes4[]\",\"internalType\":\"bytes4[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetSenders\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedSenders_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"testSexMaxSupplyFailsIfSenderIsNotTss\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdraw\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawAndCallFailsIfMaxSupplyIsReached\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawAndCallReceiveERC20\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawAndCallReceiveERC20FailsIfSenderIsNotWithdrawer\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawAndCallReceiveERC20Partial\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawAndCallReceiveNoParams\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawAndFailsIfMaxSupplyIsReached\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawAndRevert\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawAndRevertFailsIfMaxSupplyIsReached\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawAndRevertFailsIfSenderIsNotWithdrawer\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawFailsIfSenderIsNotWithdrawer\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawTogglePause\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"event\",\"name\":\"Call\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"receiver\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Deposit\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"receiver\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"asset\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Executed\",\"inputs\":[{\"name\":\"destination\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ExecutedWithERC20\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedERC20\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"token\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"destination\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedNoParams\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedNonPayable\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"strs\",\"type\":\"string[]\",\"indexed\":false,\"internalType\":\"string[]\"},{\"name\":\"nums\",\"type\":\"uint256[]\",\"indexed\":false,\"internalType\":\"uint256[]\"},{\"name\":\"flag\",\"type\":\"bool\",\"indexed\":false,\"internalType\":\"bool\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedPayable\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"str\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"num\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"flag\",\"type\":\"bool\",\"indexed\":false,\"internalType\":\"bool\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedRevert\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Reverted\",\"inputs\":[{\"name\":\"destination\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RevertedWithERC20\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Withdraw\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"WithdrawAndCall\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"WithdrawAndRevert\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log\",\"inputs\":[{\"name\":\"\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_address\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_array\",\"inputs\":[{\"name\":\"val\",\"type\":\"uint256[]\",\"indexed\":false,\"internalType\":\"uint256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_array\",\"inputs\":[{\"name\":\"val\",\"type\":\"int256[]\",\"indexed\":false,\"internalType\":\"int256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_array\",\"inputs\":[{\"name\":\"val\",\"type\":\"address[]\",\"indexed\":false,\"internalType\":\"address[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_bytes\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_bytes32\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_int\",\"inputs\":[{\"name\":\"\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_address\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_array\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"uint256[]\",\"indexed\":false,\"internalType\":\"uint256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_array\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"int256[]\",\"indexed\":false,\"internalType\":\"int256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_array\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"address[]\",\"indexed\":false,\"internalType\":\"address[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_bytes\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_bytes32\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_decimal_int\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"},{\"name\":\"decimals\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_decimal_uint\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"decimals\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_int\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_string\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_uint\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_string\",\"inputs\":[{\"name\":\"\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_uint\",\"inputs\":[{\"name\":\"\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"logs\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"AccessControlUnauthorizedAccount\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"neededRole\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"type\":\"error\",\"name\":\"ApprovalFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ConnectorInitialized\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"CustodyInitialized\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"DepositFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"EnforcedPause\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ExceedsMaxSupply\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ExecutionFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientERC20Amount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientETHAmount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NotWhitelistedInCustody\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZeroAddress\",\"inputs\":[]}]", - Bin: "0x6080604052600c8054600160ff199182168117909255601f80549091169091179055348015602c57600080fd5b5061f2bc8061003c6000396000f3fe608060405234801561001057600080fd5b50600436106101cf5760003560e01c8063a783c78911610104578063d509b16c116100a2578063e63ab1e911610071578063e63ab1e914610344578063fa7626d41461036b578063fdca905214610378578063fe574f841461038057600080fd5b8063d509b16c14610324578063dcf7d0371461032c578063de1cb76c14610334578063e20c9f711461033c57600080fd5b8063b5508aa9116100de578063b5508aa9146102f4578063ba414fa6146102fc578063c190997214610314578063ccb0e3f21461031c57600080fd5b8063a783c789146102bd578063aaf74192146102e4578063b0464fdc146102ec57600080fd5b80634934655811610171578063828320141161014b578063828320141461025657806385226c811461025e57806385f438c114610273578063916a17c6146102a857600080fd5b8063493465581461023157806366d9a9a0146102395780637db20efb1461024e57600080fd5b80632ade3880116101ad5780632ade3880146102045780633cba0107146102195780633e5e3c23146102215780633f7286f41461022957600080fd5b80630a9254e4146101d45780631ed7831c146101de5780632506ef03146101fc575b600080fd5b6101dc610388565b005b6101e6610a6e565b6040516101f39190618ec4565b60405180910390f35b6101dc610ad0565b61020c610d81565b6040516101f39190618f60565b6101dc610ec3565b6101e6611685565b6101e66116e5565b6101dc611745565b610241611d19565b6040516101f391906190c6565b6101dc611e9b565b6101dc61213a565b610266612393565b6040516101f39190619164565b61029a7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b6040519081526020016101f3565b6102b0612463565b6040516101f391906191db565b61029a7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb81565b6101dc61255e565b6102b06127ba565b6102666128b5565b610304612985565b60405190151581526020016101f3565b6101dc612a59565b6101dc612cc4565b6101dc6137f0565b6101dc613b45565b6101dc614173565b6101e661488f565b61029a7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b601f546103049060ff1681565b6101dc6148ef565b6101dc614ad9565b60258054307fffffffffffffffffffffffff000000000000000000000000000000000000000091821617909155602680546112349083161790556027805461567892168217905560405181906103dd90618dd7565b6001600160a01b03928316815291166020820152604001604051809103906000f080158015610410573d6000803e3d6000fd5b50602480547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039283169081178255604080518082018252600e81527f4761746577617945564d2e736f6c000000000000000000000000000000000000602082015260275460255492519086169481019490945260448401929092529092166064820152610501919060840160408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fc0c53b8b00000000000000000000000000000000000000000000000000000000179052614cc6565b601f80547fffffffffffffffffffffff0000000000000000000000000000000000000000ff166101006001600160a01b0393841681029190911791829055602080549190920483167fffffffffffffffffffffffff0000000000000000000000000000000000000000909116811790915560275460255460405192939182169291169061058d90618de4565b6001600160a01b03938416815291831660208301529091166040820152606001604051809103906000f0801580156105c9573d6000803e3d6000fd5b50602280547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03928316179055602054602454602754602554604051938516949283169391831692169061062490618df1565b6001600160a01b039485168152928416602084015290831660408301529091166060820152608001604051809103906000f080158015610668573d6000803e3d6000fd5b50602380547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392831617905560275460405163ca669fa760e01b815291166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156106ed57600080fd5b505af1158015610701573d6000803e3d6000fd5b5050602480546027546023546040517f15d57fd40000000000000000000000000000000000000000000000000000000081526001600160a01b039283166004820152908216938101939093521692506315d57fd49150604401600060405180830381600087803b15801561077457600080fd5b505af1158015610788573d6000803e3d6000fd5b5050505060405161079890618dfe565b604051809103906000f0801580156107b4573d6000803e3d6000fd5b50602180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039283161790556027546040517fc88a5e6d00000000000000000000000000000000000000000000000000000000815291166004820152670de0b6b3a76400006024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c88a5e6d90604401600060405180830381600087803b15801561086057600080fd5b505af1158015610874573d6000803e3d6000fd5b50506025546040517f06447d560000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506306447d569150602401600060405180830381600087803b1580156108ea57600080fd5b505af11580156108fe573d6000803e3d6000fd5b50506020546022546040517fae7a3a6f0000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201529116925063ae7a3a6f9150602401600060405180830381600087803b15801561096457600080fd5b505af1158015610978573d6000803e3d6000fd5b50506020546023546040517f10188aef0000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152911692506310188aef9150602401600060405180830381600087803b1580156109de57600080fd5b505af11580156109f2573d6000803e3d6000fd5b505050507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b03166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610a5457600080fd5b505af1158015610a68573d6000803e3d6000fd5b50505050565b60606016805480602002602001604051908101604052809291908181526020018280548015610ac657602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610aa8575b5050505050905090565b6040517f68656c6c6f0000000000000000000000000000000000000000000000000000006020820152620186a09060009060250160408051808303601f190181529082905260275463ca669fa760e01b83526001600160a01b031660048301529150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015610b6b57600080fd5b505af1158015610b7f573d6000803e3d6000fd5b50506023546040517f6f8b44b0000000000000000000000000000000000000000000000000000000008152600481018690526001600160a01b039091169250636f8b44b09150602401600060405180830381600087803b158015610be257600080fd5b505af1158015610bf6573d6000803e3d6000fd5b505060275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b158015610c5357600080fd5b505af1158015610c67573d6000803e3d6000fd5b50506040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fc30436e9000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b158015610cf057600080fd5b505af1158015610d04573d6000803e3d6000fd5b50506023546021546001600160a01b0391821693506302d5c899925016610d2c8560016192a1565b846040518463ffffffff1660e01b8152600401610d4b939291906192b4565b600060405180830381600087803b158015610d6557600080fd5b505af1158015610d79573d6000803e3d6000fd5b505050505050565b6060601e805480602002602001604051908101604052809291908181526020016000905b82821015610eba57600084815260208082206040805180820182526002870290920180546001600160a01b03168352600181018054835181870281018701909452808452939591948681019491929084015b82821015610ea3578382906000526020600020018054610e16906192ed565b80601f0160208091040260200160405190810160405280929190818152602001828054610e42906192ed565b8015610e8f5780601f10610e6457610100808354040283529160200191610e8f565b820191906000526020600020905b815481529060010190602001808311610e7257829003601f168201915b505050505081526020019060010190610df7565b505050508152505081526020019060010190610da5565b50505050905090565b60248054602654604051620186a09381018490526001600160a01b03928316604482015291166064820152600090819060840160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f357fc5a2000000000000000000000000000000000000000000000000000000001790526024805460265492516370a0823160e01b81526001600160a01b0393841660048201529394506000939216916370a082319101602060405180830381865afa158015610f9e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fc2919061933a565b9050610fcf816000614ce5565b602480546023546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa15801561101f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611043919061933a565b9050611050816000614ce5565b6020546040516001600160a01b039091166024820152604481018690526064810185905260009060840160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f1e458bee0000000000000000000000000000000000000000000000000000000017905260245490517ff30c7ba3000000000000000000000000000000000000000000000000000000008152919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f30c7ba391611137916001600160a01b0391909116906000908690600401619353565b600060405180830381600087803b15801561115157600080fd5b505af1158015611165573d6000803e3d6000fd5b50506021546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b1580156111f757600080fd5b505af115801561120b573d6000803e3d6000fd5b505060208054602454602654604080516001600160a01b0394851681529485018d905291831684830152919091166060830152517f2b58128f24a9f59127cc5b5430d70542b22220f2d9adaa86e442b816ab98af609350908190036080019150a16023546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b1580156112fa57600080fd5b505af115801561130e573d6000803e3d6000fd5b50506021546040516001600160a01b0390911692507f7772f56296d3a5202974a45c61c9188d844ab4d6eeb18c851e4b8d5384ca6ced9150611353908990889061937b565b60405180910390a260275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156113b457600080fd5b505af11580156113c8573d6000803e3d6000fd5b50506023546021546040517f5e3e9fef0000000000000000000000000000000000000000000000000000000081526001600160a01b039283169450635e3e9fef935061142092909116908a9089908b90600401619394565b600060405180830381600087803b15801561143a57600080fd5b505af115801561144e573d6000803e3d6000fd5b5050602480546026546040516370a0823160e01b81526001600160a01b03918216600482015260009550911692506370a082319101602060405180830381865afa1580156114a0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114c4919061933a565b90506114d08188614ce5565b602480546023546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa158015611520573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611544919061933a565b9050611551816000614ce5565b602480546020546021546040517fdd62ed3e0000000000000000000000000000000000000000000000000000000081526001600160a01b0392831660048201529082169381019390935260009291169063dd62ed3e90604401602060405180830381865afa1580156115c7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115eb919061933a565b90506115f8816000614ce5565b602480546020546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa158015611648573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061166c919061933a565b9050611679816000614ce5565b50505050505050505050565b60606018805480602002602001604051908101604052809291908181526020018280548015610ac6576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311610aa8575050505050905090565b60606017805480602002602001604051908101604052809291908181526020018280548015610ac6576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311610aa8575050505050905090565b604080516004808252602480830184526020830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f6ed70169000000000000000000000000000000000000000000000000000000001790525460265493516370a0823160e01b8152620186a0946000949385936001600160a01b03908116936370a08231936117e693921691016001600160a01b0391909116815260200190565b602060405180830381865afa158015611803573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611827919061933a565b9050611834816000614ce5565b602480546023546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa158015611884573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118a8919061933a565b90506118b5816000614ce5565b6020546040516001600160a01b039091166024820152604481018690526064810185905260009060840160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f1e458bee0000000000000000000000000000000000000000000000000000000017905260245490517ff30c7ba3000000000000000000000000000000000000000000000000000000008152919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f30c7ba39161199c916001600160a01b0391909116906000908690600401619353565b600060405180830381600087803b1580156119b657600080fd5b505af11580156119ca573d6000803e3d6000fd5b50506021546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b158015611a5c57600080fd5b505af1158015611a70573d6000803e3d6000fd5b5050602080546040516001600160a01b0390911681527fbcaadb46b82a48af60b608f58959ae6b8310d1b0a0d094c2e9ec3208ed39f2a0935001905060405180910390a16023546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b158015611b4257600080fd5b505af1158015611b56573d6000803e3d6000fd5b50506021546040516001600160a01b0390911692507f7772f56296d3a5202974a45c61c9188d844ab4d6eeb18c851e4b8d5384ca6ced9150611b9b908990889061937b565b60405180910390a260275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015611bfc57600080fd5b505af1158015611c10573d6000803e3d6000fd5b50506023546021546040517f5e3e9fef0000000000000000000000000000000000000000000000000000000081526001600160a01b039283169450635e3e9fef9350611c6892909116908a9089908b90600401619394565b600060405180830381600087803b158015611c8257600080fd5b505af1158015611c96573d6000803e3d6000fd5b5050602480546026546040516370a0823160e01b81526001600160a01b03918216600482015260009550911692506370a082319101602060405180830381865afa158015611ce8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d0c919061933a565b90506114d0816000614ce5565b6060601b805480602002602001604051908101604052809291908181526020016000905b82821015610eba5783829060005260206000209060020201604051806040016040529081600082018054611d70906192ed565b80601f0160208091040260200160405190810160405280929190818152602001828054611d9c906192ed565b8015611de95780601f10611dbe57610100808354040283529160200191611de9565b820191906000526020600020905b815481529060010190602001808311611dcc57829003601f168201915b5050505050815260200160018201805480602002602001604051908101604052809291908181526020018280548015611e8357602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019060040190602082600301049283019260010382029150808411611e305790505b50505050508152505081526020019060010190611d3d565b60275460405163ca669fa760e01b81526001600160a01b039091166004820152620186a090737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015611ef957600080fd5b505af1158015611f0d573d6000803e3d6000fd5b50506023546040517f6f8b44b0000000000000000000000000000000000000000000000000000000008152600481018590526001600160a01b039091169250636f8b44b09150602401600060405180830381600087803b158015611f7057600080fd5b505af1158015611f84573d6000803e3d6000fd5b505060275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b158015611fe157600080fd5b505af1158015611ff5573d6000803e3d6000fd5b50506040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fc30436e9000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b15801561207e57600080fd5b505af1158015612092573d6000803e3d6000fd5b50506023546021546001600160a01b03918216935063106e62909250166120ba8460016192a1565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b039092166004830152602482015260006044820152606401600060405180830381600087803b15801561211f57600080fd5b505af1158015612133573d6000803e3d6000fd5b5050505050565b6040517f68656c6c6f0000000000000000000000000000000000000000000000000000006020820152620186a090600090819060250160408051808303601f190181529082905260255463ca669fa760e01b83526001600160a01b031660048301529150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156121d757600080fd5b505af11580156121eb573d6000803e3d6000fd5b5050602554604080516001600160a01b0390921660248301527f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e460448084019190915281518084039091018152606490920181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb392506122d691906004016193cd565b600060405180830381600087803b1580156122f057600080fd5b505af1158015612304573d6000803e3d6000fd5b50506023546021546040517f02d5c8990000000000000000000000000000000000000000000000000000000081526001600160a01b0392831694506302d5c899935061235c9290911690879086908890600401619394565b600060405180830381600087803b15801561237657600080fd5b505af115801561238a573d6000803e3d6000fd5b50505050505050565b6060601a805480602002602001604051908101604052809291908181526020016000905b82821015610eba5783829060005260206000200180546123d6906192ed565b80601f0160208091040260200160405190810160405280929190818152602001828054612402906192ed565b801561244f5780601f106124245761010080835404028352916020019161244f565b820191906000526020600020905b81548152906001019060200180831161243257829003601f168201915b5050505050815260200190600101906123b7565b6060601d805480602002602001604051908101604052809291908181526020016000905b82821015610eba5760008481526020908190206040805180820182526002860290920180546001600160a01b0316835260018101805483518187028101870190945280845293949193858301939283018282801561254657602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190600401906020826003010492830192600103820291508084116124f35790505b50505050508152505081526020019060010190612487565b6040517f68656c6c6f0000000000000000000000000000000000000000000000000000006020820152620186a09060009060250160408051808303601f190181529082905260275463ca669fa760e01b83526001600160a01b031660048301529150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156125f957600080fd5b505af115801561260d573d6000803e3d6000fd5b50506023546040517f6f8b44b0000000000000000000000000000000000000000000000000000000008152600481018690526001600160a01b039091169250636f8b44b09150602401600060405180830381600087803b15801561267057600080fd5b505af1158015612684573d6000803e3d6000fd5b505060275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b1580156126e157600080fd5b505af11580156126f5573d6000803e3d6000fd5b50506040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fc30436e9000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b15801561277e57600080fd5b505af1158015612792573d6000803e3d6000fd5b50506023546021546001600160a01b039182169350635e3e9fef925016610d2c8560016192a1565b6060601c805480602002602001604051908101604052809291908181526020016000905b82821015610eba5760008481526020908190206040805180820182526002860290920180546001600160a01b0316835260018101805483518187028101870190945280845293949193858301939283018282801561289d57602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168152602001906004019060208260030104928301926001038202915080841161284a5790505b505050505081525050815260200190600101906127de565b60606019805480602002602001604051908101604052809291908181526020016000905b82821015610eba5783829060005260206000200180546128f8906192ed565b80601f0160208091040260200160405190810160405280929190818152602001828054612924906192ed565b80156129715780601f1061294657610100808354040283529160200191612971565b820191906000526020600020905b81548152906001019060200180831161295457829003601f168201915b5050505050815260200190600101906128d9565b60085460009060ff161561299d575060085460ff1690565b6040517f667f9d70000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d600482018190527f6661696c65640000000000000000000000000000000000000000000000000000602483015260009163667f9d7090604401602060405180830381865afa158015612a2e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a52919061933a565b1415905090565b60248054602654604051620186a09381018490526001600160a01b03928316604482015291166064820152600090819060840160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f357fc5a200000000000000000000000000000000000000000000000000000000179052602554905163ca669fa760e01b81526001600160a01b039091166004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015612b3f57600080fd5b505af1158015612b53573d6000803e3d6000fd5b5050602554604080516001600160a01b0390921660248301527f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e460448084019190915281518084039091018152606490920181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb39250612c3e91906004016193cd565b600060405180830381600087803b158015612c5857600080fd5b505af1158015612c6c573d6000803e3d6000fd5b50506023546021546040517f5e3e9fef0000000000000000000000000000000000000000000000000000000081526001600160a01b039283169450635e3e9fef935061235c9290911690879086908890600401619394565b60275460405163ca669fa760e01b81526001600160a01b039091166004820152620186a090600090737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015612d2557600080fd5b505af1158015612d39573d6000803e3d6000fd5b5050602754604080516001600160a01b0390921660248301527f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a60448084019190915281518084039091018152606490920181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb39250612e2491906004016193cd565b600060405180830381600087803b158015612e3e57600080fd5b505af1158015612e52573d6000803e3d6000fd5b50505050602360009054906101000a90046001600160a01b03166001600160a01b0316638456cb596040518163ffffffff1660e01b8152600401600060405180830381600087803b158015612ea657600080fd5b505af1158015612eba573d6000803e3d6000fd5b505060275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b158015612f1757600080fd5b505af1158015612f2b573d6000803e3d6000fd5b5050602754604080516001600160a01b0390921660248301527f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a60448084019190915281518084039091018152606490920181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb3925061301691906004016193cd565b600060405180830381600087803b15801561303057600080fd5b505af1158015613044573d6000803e3d6000fd5b50505050602360009054906101000a90046001600160a01b03166001600160a01b0316633f4ba83a6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561309857600080fd5b505af11580156130ac573d6000803e3d6000fd5b505060255460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b15801561310957600080fd5b505af115801561311d573d6000803e3d6000fd5b50505050602360009054906101000a90046001600160a01b03166001600160a01b0316638456cb596040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561317157600080fd5b505af1158015613185573d6000803e3d6000fd5b50506040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fd93c0665000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b15801561320e57600080fd5b505af1158015613222573d6000803e3d6000fd5b505060275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b15801561327f57600080fd5b505af1158015613293573d6000803e3d6000fd5b50506023546026546040517f106e62900000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260248101879052604481018690529116925063106e62909150606401600060405180830381600087803b15801561330757600080fd5b505af115801561331b573d6000803e3d6000fd5b505060255460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b15801561337857600080fd5b505af115801561338c573d6000803e3d6000fd5b50505050602360009054906101000a90046001600160a01b03166001600160a01b0316633f4ba83a6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156133e057600080fd5b505af11580156133f4573d6000803e3d6000fd5b5050602480546026546040516370a0823160e01b81526001600160a01b03918216600482015260009550911692506370a082319101602060405180830381865afa158015613446573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061346a919061933a565b9050613477816000614ce5565b6026546040516001600160a01b039091166024820152604481018490526064810183905260009060840160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f1e458bee0000000000000000000000000000000000000000000000000000000017905260245490517ff30c7ba3000000000000000000000000000000000000000000000000000000008152919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f30c7ba39161355e916001600160a01b0391909116906000908690600401619353565b600060405180830381600087803b15801561357857600080fd5b505af115801561358c573d6000803e3d6000fd5b50506023546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b15801561361e57600080fd5b505af1158015613632573d6000803e3d6000fd5b50506026546040518781526001600160a01b0390911692507f884edad9ce6fa2440d8a54cc123490eb96d2768479d49ff9c7366125a9424364915060200160405180910390a260275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156136d157600080fd5b505af11580156136e5573d6000803e3d6000fd5b50506023546026546040517f106e62900000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260248101899052604481018890529116925063106e629091506064015b600060405180830381600087803b15801561375a57600080fd5b505af115801561376e573d6000803e3d6000fd5b5050602480546026546040516370a0823160e01b81526001600160a01b03918216600482015260009550911692506370a082319101602060405180830381865afa1580156137c0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137e4919061933a565b90506121338186614ce5565b602480546026546040516370a0823160e01b81526001600160a01b039182166004820152620186a09360009392909216916370a082319101602060405180830381865afa158015613845573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613869919061933a565b9050613876816000614ce5565b6026546040516001600160a01b0390911660248201526044810183905260006064820181905290819060840160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f1e458bee0000000000000000000000000000000000000000000000000000000017905260245490517ff30c7ba3000000000000000000000000000000000000000000000000000000008152919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f30c7ba39161395f916001600160a01b0391909116906000908690600401619353565b600060405180830381600087803b15801561397957600080fd5b505af115801561398d573d6000803e3d6000fd5b50506023546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b158015613a1f57600080fd5b505af1158015613a33573d6000803e3d6000fd5b50506026546040518781526001600160a01b0390911692507f884edad9ce6fa2440d8a54cc123490eb96d2768479d49ff9c7366125a9424364915060200160405180910390a260275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015613ad257600080fd5b505af1158015613ae6573d6000803e3d6000fd5b50506023546026546040517f106e62900000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260248101899052604481018790529116925063106e62909150606401613740565b60248054602654604051620186a09381018490526001600160a01b03928316604482015291166064820152600090819060840160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fc5131691000000000000000000000000000000000000000000000000000000001790526024805460265492516370a0823160e01b81526001600160a01b0393841660048201529394506000939216916370a082319101602060405180830381865afa158015613c20573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613c44919061933a565b9050613c51816000614ce5565b602480546023546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa158015613ca1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613cc5919061933a565b9050613cd2816000614ce5565b6020546040516001600160a01b039091166024820152604481018690526064810185905260009060840160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f1e458bee0000000000000000000000000000000000000000000000000000000017905260245490517ff30c7ba3000000000000000000000000000000000000000000000000000000008152919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f30c7ba391613db9916001600160a01b0391909116906000908690600401619353565b600060405180830381600087803b158015613dd357600080fd5b505af1158015613de7573d6000803e3d6000fd5b50506021546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b158015613e7957600080fd5b505af1158015613e8d573d6000803e3d6000fd5b50506020547f2b58128f24a9f59127cc5b5430d70542b22220f2d9adaa86e442b816ab98af6092506001600160a01b03169050613ecb6002896193e0565b602454602654604080516001600160a01b03958616815260208101949094529184168383015292909216606082015290519081900360800190a16023546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b158015613f9357600080fd5b505af1158015613fa7573d6000803e3d6000fd5b50506021546040516001600160a01b0390911692507f7772f56296d3a5202974a45c61c9188d844ab4d6eeb18c851e4b8d5384ca6ced9150613fec908990889061937b565b60405180910390a260275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561404d57600080fd5b505af1158015614061573d6000803e3d6000fd5b50506023546021546040517f5e3e9fef0000000000000000000000000000000000000000000000000000000081526001600160a01b039283169450635e3e9fef93506140b992909116908a9089908b90600401619394565b600060405180830381600087803b1580156140d357600080fd5b505af11580156140e7573d6000803e3d6000fd5b5050602480546026546040516370a0823160e01b81526001600160a01b03918216600482015260009550911692506370a082319101602060405180830381865afa158015614139573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061415d919061933a565b90506114d08161416e60028a6193e0565b614ce5565b6040517f68656c6c6f0000000000000000000000000000000000000000000000000000006020820152620186a090600090819060250160408051808303601f1901815290829052602480546021546370a0823160e01b85526001600160a01b0390811660048601529294506000939216916370a082319101602060405180830381865afa158015614208573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061422c919061933a565b9050614239816000614ce5565b602480546023546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa158015614289573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906142ad919061933a565b6020546040516001600160a01b039091166024820152604481018790526064810186905290915060009060840160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f1e458bee0000000000000000000000000000000000000000000000000000000017905260245490517ff30c7ba3000000000000000000000000000000000000000000000000000000008152919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f30c7ba391614397916001600160a01b0391909116906000908690600401619353565b600060405180830381600087803b1580156143b157600080fd5b505af11580156143c5573d6000803e3d6000fd5b50506021546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b15801561445757600080fd5b505af115801561446b573d6000803e3d6000fd5b50506020546040517f0d3f65f00e631663aa85c96330b5c7a83bb29af3630c0063776f985edc3037aa93506144ae92506001600160a01b0390911690879061941b565b60405180910390a16020546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b15801561454457600080fd5b505af1158015614558573d6000803e3d6000fd5b50506021546024546040516001600160a01b039283169450911691507f723fc7be2448075379e4fdf1e6bf5fead954d2668d2da05dcb44ccfec4beeda7906145a3908a90899061937b565b60405180910390a36023546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b15801561463957600080fd5b505af115801561464d573d6000803e3d6000fd5b50506021546040516001600160a01b0390911692507fba96f26bdda53eb8c8ba39045dfb4ff39753fbc7a6edcf250a88e75e78d102fe9150614692908990889061937b565b60405180910390a260275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156146f357600080fd5b505af1158015614707573d6000803e3d6000fd5b50506023546021546040517f02d5c8990000000000000000000000000000000000000000000000000000000081526001600160a01b0392831694506302d5c899935061475f92909116908a9089908b90600401619394565b600060405180830381600087803b15801561477957600080fd5b505af115801561478d573d6000803e3d6000fd5b5050602480546021546040516370a0823160e01b81526001600160a01b03918216600482015260009550911692506370a082319101602060405180830381865afa1580156147df573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614803919061933a565b905061480f8188614ce5565b602480546023546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa15801561485f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614883919061933a565b90506115518185614ce5565b60606015805480602002602001604051908101604052809291908181526020018280548015610ac6576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311610aa8575050505050905090565b60255460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561494857600080fd5b505af115801561495c573d6000803e3d6000fd5b5050602554604080516001600160a01b0390921660248301527f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb60448084019190915281518084039091018152606490920181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb39250614a4791906004016193cd565b600060405180830381600087803b158015614a6157600080fd5b505af1158015614a75573d6000803e3d6000fd5b50506023546040517f6f8b44b000000000000000000000000000000000000000000000000000000000815261271060048201526001600160a01b039091169250636f8b44b09150602401600060405180830381600087803b158015610a5457600080fd5b60255460405163ca669fa760e01b81526001600160a01b039091166004820152620186a090600090737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015614b3a57600080fd5b505af1158015614b4e573d6000803e3d6000fd5b5050602554604080516001600160a01b0390921660248301527f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e460448084019190915281518084039091018152606490920181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb39250614c3991906004016193cd565b600060405180830381600087803b158015614c5357600080fd5b505af1158015614c67573d6000803e3d6000fd5b50506023546026546040517f106e62900000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260248101879052604481018690529116925063106e62909150606401610d4b565b6000614cd0618e0b565b614cdb848483614d64565b9150505b92915050565b6040517f98296c540000000000000000000000000000000000000000000000000000000081526004810183905260248101829052737109709ecfa91a80626ff3989d68f67f5b1dd12d906398296c549060440160006040518083038186803b158015614d5057600080fd5b505afa158015610d79573d6000803e3d6000fd5b600080614d718584614ddf565b9050614dd46040518060400160405280601d81526020017f4552433139363750726f78792e736f6c3a4552433139363750726f78790000008152508286604051602001614dbf92919061941b565b60405160208183030381529060405285614deb565b9150505b9392505050565b6000614dd88383614e19565b60c08101515160009015614e0f57614e0884848460c00151614e34565b9050614dd8565b614e088484614fda565b6000614e2583836150c5565b614dd883836020015184614deb565b600080614e3f6150d5565b90506000614e4d86836151a8565b90506000614e64826060015183602001518561564e565b90506000614e7483838989615860565b90506000614e81826166dd565b602081015181519192509060030b15614ef457898260400151604051602001614eab92919061943d565b60408051601f19818403018152908290527f08c379a0000000000000000000000000000000000000000000000000000000008252614eeb916004016193cd565b60405180910390fd5b6000614f376040518060400160405280601581526020017f4465706c6f79656420746f20616464726573733a2000000000000000000000008152508360016168ac565b6040517fc6ce059d000000000000000000000000000000000000000000000000000000008152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c6ce059d90614f8a9084906004016193cd565b602060405180830381865afa158015614fa7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614fcb91906194be565b9b9a5050505050505050505050565b6040517f8d1cc9250000000000000000000000000000000000000000000000000000000081526000908190737109709ecfa91a80626ff3989d68f67f5b1dd12d90638d1cc9259061502f9087906004016193cd565b600060405180830381865afa15801561504c573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261507491908101906195cf565b905060006150a2828560405160200161508e929190619604565b604051602081830303815290604052616aac565b90506001600160a01b038116614cdb578484604051602001614eab929190619633565b6150d182826000616abf565b5050565b604080518082018252600381527f6f75740000000000000000000000000000000000000000000000000000000000602082015290517fd145736c000000000000000000000000000000000000000000000000000000008152606091737109709ecfa91a80626ff3989d68f67f5b1dd12d91829063d145736c9061515c9084906004016196de565b600060405180830381865afa158015615179573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526151a19190810190619725565b9250505090565b6151da6040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b6000737109709ecfa91a80626ff3989d68f67f5b1dd12d90506152256040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b61522e85616bc2565b6020820152600061523e86616fa7565b90506000836001600160a01b031663d930a0e66040518163ffffffff1660e01b8152600401600060405180830381865afa158015615280573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526152a89190810190619725565b868385602001516040516020016152c2949392919061976e565b60408051601f19818403018152908290527f60f9bb1100000000000000000000000000000000000000000000000000000000825291506000906001600160a01b038616906360f9bb119061531a9085906004016193cd565b600060405180830381865afa158015615337573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261535f9190810190619725565b6040517fdb4235f60000000000000000000000000000000000000000000000000000000081529091506001600160a01b0386169063db4235f6906153a7908490600401619872565b602060405180830381865afa1580156153c4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906153e891906198c4565b6153fd5781604051602001614eab91906198e6565b6040517f49c4fac80000000000000000000000000000000000000000000000000000000081526001600160a01b038616906349c4fac890615442908490600401619978565b600060405180830381865afa15801561545f573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526154879190810190619725565b84526040517fdb4235f60000000000000000000000000000000000000000000000000000000081526001600160a01b0386169063db4235f6906154ce9084906004016199ca565b602060405180830381865afa1580156154eb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061550f91906198c4565b156155a4576040517f49c4fac80000000000000000000000000000000000000000000000000000000081526001600160a01b038616906349c4fac8906155599084906004016199ca565b600060405180830381865afa158015615576573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261559e9190810190619725565b60408501525b846001600160a01b03166349c4fac88286600001516040516020016155c99190619a1c565b6040516020818303038152906040526040518363ffffffff1660e01b81526004016155f5929190619a88565b600060405180830381865afa158015615612573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261563a9190810190619725565b606085015250608083015250949350505050565b60408051600480825260a0820190925260609160009190816020015b606081526020019060019003908161566a5790505090506040518060400160405280600481526020017f6772657000000000000000000000000000000000000000000000000000000000815250816000815181106156ca576156ca619aad565b60200260200101819052506040518060400160405280600381526020017f2d726c00000000000000000000000000000000000000000000000000000000008152508160018151811061571e5761571e619aad565b60200260200101819052508460405160200161573a9190619adc565b6040516020818303038152906040528160028151811061575c5761575c619aad565b6020026020010181905250826040516020016157789190619b48565b6040516020818303038152906040528160038151811061579a5761579a619aad565b602002602001018190525060006157b0826166dd565b602080820151604080518082018252600581527f2e6a736f6e0000000000000000000000000000000000000000000000000000008185019081528251808401845260008082529086015282518084019093529051825292810192909252919250615841906040805180820182526000808252602091820152815180830190925284518252808501908201529061722a565b6158565785604051602001614eab9190619b89565b9695505050505050565b60a0810151604080518082018252600080825260209182015281518083019092528251808352928101910152606090737109709ecfa91a80626ff3989d68f67f5b1dd12d90156158b0565b511590565b615a245782602001511561596c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605860248201527f54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f742060448201527f62652075736564207768656e207468652060736b6970566572696679536f757260648201527f6365436f646560206f7074696f6e206973206074727565600000000000000000608482015260a401614eeb565b8260c0015115615a24576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605360248201527f54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f742060448201527f62652075736564207768656e207468652060736b69704c6963656e736554797060648201527f6560206f7074696f6e2069732060747275656000000000000000000000000000608482015260a401614eeb565b6040805160ff8082526120008201909252600091816020015b6060815260200190600190039081615a3d57905050905060006040518060400160405280600381526020017f6e70780000000000000000000000000000000000000000000000000000000000815250828280615a9890619c1a565b935060ff1681518110615aad57615aad619aad565b60200260200101819052506040518060400160405280600d81526020017f302e302e312d616c7068612e3700000000000000000000000000000000000000815250604051602001615afe9190619c39565b604051602081830303815290604052828280615b1990619c1a565b935060ff1681518110615b2e57615b2e619aad565b60200260200101819052506040518060400160405280600681526020017f6465706c6f790000000000000000000000000000000000000000000000000000815250828280615b7b90619c1a565b935060ff1681518110615b9057615b90619aad565b60200260200101819052506040518060400160405280600e81526020017f2d2d636f6e74726163744e616d65000000000000000000000000000000000000815250828280615bdd90619c1a565b935060ff1681518110615bf257615bf2619aad565b60200260200101819052508760200151828280615c0e90619c1a565b935060ff1681518110615c2357615c23619aad565b60200260200101819052506040518060400160405280600e81526020017f2d2d636f6e747261637450617468000000000000000000000000000000000000815250828280615c7090619c1a565b935060ff1681518110615c8557615c85619aad565b602090810291909101015287518282615c9d81619c1a565b935060ff1681518110615cb257615cb2619aad565b60200260200101819052506040518060400160405280600981526020017f2d2d636861696e49640000000000000000000000000000000000000000000000815250828280615cff90619c1a565b935060ff1681518110615d1457615d14619aad565b6020026020010181905250615d284661728b565b8282615d3381619c1a565b935060ff1681518110615d4857615d48619aad565b60200260200101819052506040518060400160405280600f81526020017f2d2d6275696c64496e666f46696c650000000000000000000000000000000000815250828280615d9590619c1a565b935060ff1681518110615daa57615daa619aad565b602002602001018190525086828280615dc290619c1a565b935060ff1681518110615dd757615dd7619aad565b6020908102919091010152855115615efe5760408051808201909152601581527f2d2d636f6e7374727563746f7242797465636f6465000000000000000000000060208201528282615e2881619c1a565b935060ff1681518110615e3d57615e3d619aad565b60209081029190910101526040517f71aad10d0000000000000000000000000000000000000000000000000000000081526001600160a01b038416906371aad10d90615e8d9089906004016193cd565b600060405180830381865afa158015615eaa573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052615ed29190810190619725565b8282615edd81619c1a565b935060ff1681518110615ef257615ef2619aad565b60200260200101819052505b846020015115615fce5760408051808201909152601281527f2d2d766572696679536f75726365436f6465000000000000000000000000000060208201528282615f4781619c1a565b935060ff1681518110615f5c57615f5c619aad565b60200260200101819052506040518060400160405280600581526020017f66616c7365000000000000000000000000000000000000000000000000000000815250828280615fa990619c1a565b935060ff1681518110615fbe57615fbe619aad565b6020026020010181905250616195565b6160066158ab8660a0015160408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6160995760408051808201909152600d81527f2d2d6c6963656e736554797065000000000000000000000000000000000000006020820152828261604981619c1a565b935060ff168151811061605e5761605e619aad565b60200260200101819052508460a0015160405160200161607e9190619adc565b604051602081830303815290604052828280615fa990619c1a565b8460c001511580156160dc5750604080890151815180830183526000808252602091820152825180840190935281518352908101908201526160da90511590565b155b156161955760408051808201909152600d81527f2d2d6c6963656e736554797065000000000000000000000000000000000000006020820152828261612081619c1a565b935060ff168151811061613557616135619aad565b60200260200101819052506161498861732b565b6040516020016161599190619adc565b60405160208183030381529060405282828061617490619c1a565b935060ff168151811061618957616189619aad565b60200260200101819052505b604080860151815180830183526000808252602091820152825180840190935281518352908101908201526161c990511590565b61625e5760408051808201909152600b81527f2d2d72656c6179657249640000000000000000000000000000000000000000006020820152828261620c81619c1a565b935060ff168151811061622157616221619aad565b6020026020010181905250846040015182828061623d90619c1a565b935060ff168151811061625257616252619aad565b60200260200101819052505b60608501511561637f5760408051808201909152600681527f2d2d73616c740000000000000000000000000000000000000000000000000000602082015282826162a781619c1a565b935060ff16815181106162bc576162bc619aad565b602090810291909101015260608501516040517fb11a19e800000000000000000000000000000000000000000000000000000000815260048101919091526001600160a01b0384169063b11a19e890602401600060405180830381865afa15801561632b573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526163539190810190619725565b828261635e81619c1a565b935060ff168151811061637357616373619aad565b60200260200101819052505b60e085015151156164265760408051808201909152600a81527f2d2d6761734c696d697400000000000000000000000000000000000000000000602082015282826163c981619c1a565b935060ff16815181106163de576163de619aad565b60200260200101819052506163fa8560e001516000015161728b565b828261640581619c1a565b935060ff168151811061641a5761641a619aad565b60200260200101819052505b60e085015160200151156164d05760408051808201909152600a81527f2d2d6761735072696365000000000000000000000000000000000000000000006020820152828261647381619c1a565b935060ff168151811061648857616488619aad565b60200260200101819052506164a48560e001516020015161728b565b82826164af81619c1a565b935060ff16815181106164c4576164c4619aad565b60200260200101819052505b60e0850151604001511561657a5760408051808201909152600e81527f2d2d6d61784665655065724761730000000000000000000000000000000000006020820152828261651d81619c1a565b935060ff168151811061653257616532619aad565b602002602001018190525061654e8560e001516040015161728b565b828261655981619c1a565b935060ff168151811061656e5761656e619aad565b60200260200101819052505b60e085015160600151156166245760408051808201909152601681527f2d2d6d61785072696f7269747946656550657247617300000000000000000000602082015282826165c781619c1a565b935060ff16815181106165dc576165dc619aad565b60200260200101819052506165f88560e001516060015161728b565b828261660381619c1a565b935060ff168151811061661857616618619aad565b60200260200101819052505b60008160ff1667ffffffffffffffff811115616642576166426194e7565b60405190808252806020026020018201604052801561667557816020015b60608152602001906001900390816166605790505b50905060005b8260ff168160ff1610156166ce57838160ff168151811061669e5761669e619aad565b6020026020010151828260ff16815181106166bb576166bb619aad565b602090810291909101015260010161667b565b5093505050505b949350505050565b6167046040518060600160405280600060030b815260200160608152602001606081525090565b60408051808201825260048082527f6261736800000000000000000000000000000000000000000000000000000000602083015291517fd145736c000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d92600091849163d145736c9161678a91869101619ca4565b600060405180830381865afa1580156167a7573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526167cf9190810190619725565b905060006167dd8683617e1a565b90506000846001600160a01b031663f45c1ce7836040518263ffffffff1660e01b815260040161680d9190619164565b6000604051808303816000875af115801561682c573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526168549190810190619ceb565b805190915060030b1580159061686d5750602081015151155b801561687c5750604081015151155b15615856578160008151811061689457616894619aad565b6020026020010151604051602001614eab9190619da1565b606060006168e18560408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6040805180820182526000808252602091820152815180830190925286518252808701908201529091506169189082905b90617f6f565b15616a755760006169958261698f8461698961695b8a60408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6040805180820182526000808252602091820152815180830190925282518252918201519181019190915290565b90617f96565b90617ff8565b604080518082018252600181527f0a00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201529091506169f9908290617f6f565b15616a6357604080518082018252600181527f0a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616a60905b829061807d565b90505b616a6c816180a3565b92505050614dd8565b8215616a8e578484604051602001614eab929190619f8d565b5050604080516020810190915260008152614dd8565b509392505050565b6000808251602084016000f09392505050565b8160a0015115616ace57505050565b6000616adb84848461810c565b90506000616ae8826166dd565b602081015181519192509060030b158015616b845750604080518082018252600781527f535543434553530000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616b8490604080518082018252600080825260209182015281518083019092528451825280850190820152616912565b15616b9157505050505050565b60408201515115616bb1578160400151604051602001614eab919061a034565b80604051602001614eab919061a092565b60606000616bf78360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600481527f2e736f6c0000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152909150616c5c905b829061722a565b15616ccb57604080518082018252600481527f2e736f6c0000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152614dd890616cc69083906186a7565b6180a3565b604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616d2d905b8290618731565b600103616dfa57604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616d9390616a59565b50604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152614dd890616cc6905b839061807d565b604080518082018252600581527f2e6a736f6e00000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616e5990616c55565b15616f9057604080518082018252600181527f2f00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820181905284518086019095529251845283015290616ec19083906187cb565b905060008160018351616ed4919061a0fd565b81518110616ee457616ee4619aad565b60200260200101519050616f87616cc6616f5a6040518060400160405280600581526020017f2e6a736f6e00000000000000000000000000000000000000000000000000000081525060408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600080825260209182015281518083019092528551825280860190820152906186a7565b95945050505050565b82604051602001614eab919061a110565b50919050565b60606000616fdc8360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600481527f2e736f6c000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015290915061703e90616c55565b1561704c57614dd8816180a3565b604080518082018252600181527f3a00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526170ab90616d26565b60010361711557604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152614dd890616cc690616df3565b604080518082018252600581527f2e6a736f6e0000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261717490616c55565b15616f9057604080518082018252600181527f2f000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201819052845180860190955292518452830152906171dc9083906187cb565b90506001815111156172185780600282516171f7919061a0fd565b8151811061720757617207619aad565b602002602001015192505050919050565b5082604051602001614eab919061a110565b80518251600091111561723f57506000614cdf565b81518351602085015160009291617255916192a1565b61725f919061a0fd565b905082602001518103617276576001915050614cdf565b82516020840151819020912014905092915050565b6060600061729883618870565b600101905060008167ffffffffffffffff8111156172b8576172b86194e7565b6040519080825280601f01601f1916602001820160405280156172e2576020820181803683370190505b5090508181016020015b600019017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a85049450846172ec57509392505050565b604081810151815180830183526000808252602091820181905283518085018552835181529282018383015283518085018552600a81527f554e4c4943454e53454400000000000000000000000000000000000000000000818401908152855180870187528381528401929092528451808601909552518452908301526060916173b7905b8290618952565b156173f757505060408051808201909152600481527f4e6f6e65000000000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600981527f556e6c6963656e7365000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617456906173b0565b1561749657505060408051808201909152600981527f556e6c6963656e736500000000000000000000000000000000000000000000006020820152919050565b604080518082018252600381527f4d49540000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526174f5906173b0565b1561753557505060408051808201909152600381527f4d495400000000000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f47504c2d322e302d6f6e6c79000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617594906173b0565b806175f95750604080518082018252601081527f47504c2d322e302d6f722d6c6174657200000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526175f9906173b0565b1561763957505060408051808201909152600981527f474e552047504c763200000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f47504c2d332e302d6f6e6c79000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617698906173b0565b806176fd5750604080518082018252601081527f47504c2d332e302d6f722d6c6174657200000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526176fd906173b0565b1561773d57505060408051808201909152600981527f474e552047504c763300000000000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4c47504c2d322e312d6f6e6c79000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261779c906173b0565b806178015750604080518082018252601181527f4c47504c2d322e312d6f722d6c6174657200000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617801906173b0565b1561784157505060408051808201909152600c81527f474e55204c47504c76322e3100000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4c47504c2d332e302d6f6e6c7900000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526178a0906173b0565b806179055750604080518082018252601181527f4c47504c2d332e302d6f722d6c6174657200000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617905906173b0565b1561794557505060408051808201909152600a81527f474e55204c47504c7633000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f4253442d322d436c617573650000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526179a4906173b0565b156179e457505060408051808201909152600c81527f4253442d322d436c6175736500000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f4253442d332d436c61757365000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617a43906173b0565b15617a8357505060408051808201909152600c81527f4253442d332d436c6175736500000000000000000000000000000000000000006020820152919050565b604080518082018252600781527f4d504c2d322e300000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617ae2906173b0565b15617b2257505060408051808201909152600781527f4d504c2d322e30000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600781527f4f534c2d332e300000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617b81906173b0565b15617bc157505060408051808201909152600781527f4f534c2d332e30000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600a81527f4170616368652d322e300000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617c20906173b0565b15617c6057505060408051808201909152600a81527f4170616368652d322e30000000000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4147504c2d332e302d6f6e6c790000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617cbf906173b0565b80617d245750604080518082018252601181527f4147504c2d332e302d6f722d6c6174657200000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617d24906173b0565b15617d6457505060408051808201909152600a81527f474e55204147504c7633000000000000000000000000000000000000000000006020820152919050565b604080518082018252600881527f4255534c2d312e3100000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617dc3906173b0565b15617e0357505060408051808201909152600781527f42534c20312e31000000000000000000000000000000000000000000000000006020820152919050565b60408084015184519151614eab929060200161a1ee565b60608060005b8451811015617ea55781858281518110617e3c57617e3c619aad565b6020026020010151604051602001617e55929190619604565b604051602081830303815290604052915060018551617e74919061a0fd565b8114617e9d5781604051602001617e8b919061a357565b60405160208183030381529060405291505b600101617e20565b5060408051600380825260808201909252600091816020015b6060815260200190600190039081617ebe5790505090508381600081518110617ee957617ee9619aad565b60200260200101819052506040518060400160405280600281526020017f2d6300000000000000000000000000000000000000000000000000000000000081525081600181518110617f3d57617f3d619aad565b60200260200101819052508181600281518110617f5c57617f5c619aad565b6020908102919091010152949350505050565b6020808301518351835192840151600093617f8d9291849190618966565b14159392505050565b60408051808201909152600080825260208201526000617fc88460000151856020015185600001518660200151618a77565b9050836020015181617fda919061a0fd565b84518590617fe990839061a0fd565b90525060208401525090919050565b604080518082019091526000808252602082015281518351101561801d575081614cdf565b60208083015190840151600191146180445750815160208481015190840151829020919020145b80156180755782518451859061805b90839061a0fd565b90525082516020850180516180719083906192a1565b9052505b509192915050565b604080518082019091526000808252602082015261809c838383618b97565b5092915050565b60606000826000015167ffffffffffffffff8111156180c4576180c46194e7565b6040519080825280601f01601f1916602001820160405280156180ee576020820181803683370190505b509050600060208201905061809c8185602001518660000151618c42565b606060006181186150d5565b6040805160ff808252612000820190925291925060009190816020015b606081526020019060019003908161813557905050905060006040518060400160405280600381526020017f6e7078000000000000000000000000000000000000000000000000000000000081525082828061819090619c1a565b935060ff16815181106181a5576181a5619aad565b60200260200101819052506040518060400160405280600781526020017f5e312e33322e33000000000000000000000000000000000000000000000000008152506040516020016181f6919061a398565b60405160208183030381529060405282828061821190619c1a565b935060ff168151811061822657618226619aad565b60200260200101819052506040518060400160405280600881526020017f76616c696461746500000000000000000000000000000000000000000000000081525082828061827390619c1a565b935060ff168151811061828857618288619aad565b6020026020010181905250826040516020016182a49190619b48565b6040516020818303038152906040528282806182bf90619c1a565b935060ff16815181106182d4576182d4619aad565b60200260200101819052506040518060400160405280600a81526020017f2d2d636f6e74726163740000000000000000000000000000000000000000000081525082828061832190619c1a565b935060ff168151811061833657618336619aad565b602002602001018190525061834b8784618cbc565b828261835681619c1a565b935060ff168151811061836b5761836b619aad565b6020908102919091010152855151156184175760408051808201909152600b81527f2d2d7265666572656e6365000000000000000000000000000000000000000000602082015282826183bd81619c1a565b935060ff16815181106183d2576183d2619aad565b60200260200101819052506183eb866000015184618cbc565b82826183f681619c1a565b935060ff168151811061840b5761840b619aad565b60200260200101819052505b8560800151156184855760408051808201909152601881527f2d2d756e73616665536b697053746f72616765436865636b00000000000000006020820152828261846081619c1a565b935060ff168151811061847557618475619aad565b60200260200101819052506184eb565b84156184eb5760408051808201909152601281527f2d2d726571756972655265666572656e63650000000000000000000000000000602082015282826184ca81619c1a565b935060ff16815181106184df576184df619aad565b60200260200101819052505b604086015151156185875760408051808201909152600d81527f2d2d756e73616665416c6c6f77000000000000000000000000000000000000006020820152828261853581619c1a565b935060ff168151811061854a5761854a619aad565b6020026020010181905250856040015182828061856690619c1a565b935060ff168151811061857b5761857b619aad565b60200260200101819052505b8560600151156185f15760408051808201909152601481527f2d2d756e73616665416c6c6f7752656e616d6573000000000000000000000000602082015282826185d081619c1a565b935060ff16815181106185e5576185e5619aad565b60200260200101819052505b60008160ff1667ffffffffffffffff81111561860f5761860f6194e7565b60405190808252806020026020018201604052801561864257816020015b606081526020019060019003908161862d5790505b50905060005b8260ff168160ff16101561869b57838160ff168151811061866b5761866b619aad565b6020026020010151828260ff168151811061868857618688619aad565b6020908102919091010152600101618648565b50979650505050505050565b60408051808201909152600080825260208201528151835110156186cc575081614cdf565b815183516020850151600092916186e2916192a1565b6186ec919061a0fd565b6020840151909150600190821461870d575082516020840151819020908220145b80156187285783518551869061872490839061a0fd565b9052505b50929392505050565b60008082600001516187558560000151866020015186600001518760200151618a77565b61875f91906192a1565b90505b8351602085015161877391906192a1565b811161809c57816187838161a3dd565b92505082600001516187ba85602001518361879e919061a0fd565b86516187aa919061a0fd565b8386600001518760200151618a77565b6187c491906192a1565b9050618762565b606060006187d98484618731565b6187e49060016192a1565b67ffffffffffffffff8111156187fc576187fc6194e7565b60405190808252806020026020018201604052801561882f57816020015b606081526020019060019003908161881a5790505b50905060005b8151811015616aa45761884b616cc6868661807d565b82828151811061885d5761885d619aad565b6020908102919091010152600101618835565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f01000000000000000083106188b9577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef810000000083106188e5576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc10000831061890357662386f26fc10000830492506010015b6305f5e100831061891b576305f5e100830492506008015b612710831061892f57612710830492506004015b60648310618941576064830492506002015b600a8310614cdf5760010192915050565b600061895e8383618cfc565b159392505050565b600080858411618a6d5760208411618a1957600084156189b157600161898d86602061a0fd565b61899890600861a3f7565b6189a390600261a4f5565b6189ad919061a0fd565b1990505b83518116856189c089896192a1565b6189ca919061a0fd565b805190935082165b818114618a04578784116189ec57879450505050506166d5565b836189f68161a501565b9450508284511690506189d2565b618a0e87856192a1565b9450505050506166d5565b838320618a26858861a0fd565b618a3090876192a1565b91505b858210618a6b57848220808203618a5857618a4e86846192a1565b93505050506166d5565b618a6360018461a0fd565b925050618a33565b505b5092949350505050565b60008381868511618b825760208511618b315760008515618ac3576001618a9f87602061a0fd565b618aaa90600861a3f7565b618ab590600261a4f5565b618abf919061a0fd565b1990505b84518116600087618ad48b8b6192a1565b618ade919061a0fd565b855190915083165b828114618b2357818610618b0b57618afe8b8b6192a1565b96505050505050506166d5565b85618b158161a3dd565b965050838651169050618ae6565b8596505050505050506166d5565b508383206000905b618b43868961a0fd565b8211618b8057858320808203618b5f57839450505050506166d5565b618b6a6001856192a1565b9350508180618b789061a3dd565b925050618b39565b505b618b8c87876192a1565b979650505050505050565b60408051808201909152600080825260208201526000618bc98560000151866020015186600001518760200151618a77565b602080870180519186019190915251909150618be5908261a0fd565b835284516020860151618bf891906192a1565b8103618c075760008552618c39565b83518351618c1591906192a1565b85518690618c2490839061a0fd565b9052508351618c3390826192a1565b60208601525b50909392505050565b60208110618c7a5781518352618c596020846192a1565b9250618c666020836192a1565b9150618c7360208261a0fd565b9050618c42565b6000198115618ca9576001618c9083602061a0fd565b618c9c9061010061a4f5565b618ca6919061a0fd565b90505b9151835183169219169190911790915250565b60606000618cca84846151a8565b8051602080830151604051939450618ce49390910161a518565b60405160208183030381529060405291505092915050565b8151815160009190811115618d0f575081515b6020808501519084015160005b83811015618dc85782518251808214618d98576000196020871015618d7757600184618d4989602061a0fd565b618d5391906192a1565b618d5e90600861a3f7565b618d6990600261a4f5565b618d73919061a0fd565b1990505b8181168382168181039114618d95579750614cdf9650505050505050565b50505b618da36020866192a1565b9450618db06020856192a1565b93505050602081618dc191906192a1565b9050618d1c565b5084518651615856919061a570565b6112a68061a59183390190565b6117988061b83783390190565b61155a8061cfcf83390190565b610d5e8061e52983390190565b6040518060e00160405280606081526020016060815260200160608152602001600015158152602001600015158152602001600015158152602001618e4e618e53565b905290565b60405180610100016040528060001515815260200160001515815260200160608152602001600080191681526020016060815260200160608152602001600015158152602001618e4e6040518060800160405280600081526020016000815260200160008152602001600081525090565b602080825282518282018190526000918401906040840190835b81811015618f055783516001600160a01b0316835260209384019390920191600101618ede565b509095945050505050565b60005b83811015618f2b578181015183820152602001618f13565b50506000910152565b60008151808452618f4c816020860160208601618f10565b601f01601f19169290920160200192915050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b8281101561905c577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452815180516001600160a01b03168652602090810151604082880181905281519088018190529101906060600582901b88018101919088019060005b81811015619042577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa08a850301835261902c848651618f34565b6020958601959094509290920191600101618ff2565b509197505050602094850194929092019150600101618f88565b50929695505050505050565b600081518084526020840193506020830160005b828110156190bc5781517fffffffff000000000000000000000000000000000000000000000000000000001686526020958601959091019060010161907c565b5093949350505050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b8281101561905c577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc087860301845281518051604087526191326040880182618f34565b905060208201519150868103602088015261914d8183619068565b9650505060209384019391909101906001016190ee565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b8281101561905c577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08786030184526191c6858351618f34565b9450602093840193919091019060010161918c565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b8281101561905c577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc087860301845281516001600160a01b038151168652602081015190506040602087015261925c6040870182619068565b9550506020938401939190910190600101619203565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b80820180821115614cdf57614cdf619272565b6001600160a01b03841681528260208201526080604082015260006192dc6080830184618f34565b905060006060830152949350505050565b600181811c9082168061930157607f821691505b602082108103616fa1577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006020828403121561934c57600080fd5b5051919050565b6001600160a01b0384168152826020820152606060408201526000616f876060830184618f34565b8281526040602082015260006166d56040830184618f34565b6001600160a01b03851681528360208201526080604082015260006193bc6080830185618f34565b905082606083015295945050505050565b602081526000614dd86020830184618f34565b600082619416577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b6001600160a01b03831681526040602082015260006166d56040830184618f34565b7f4661696c656420746f206465706c6f7920636f6e74726163742000000000000081526000835161947581601a850160208801618f10565b7f3a20000000000000000000000000000000000000000000000000000000000000601a9184019182015283516194b281601c840160208801618f10565b01601c01949350505050565b6000602082840312156194d057600080fd5b81516001600160a01b0381168114614dd857600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040516060810167ffffffffffffffff81118282101715619539576195396194e7565b60405290565b60008067ffffffffffffffff84111561955a5761955a6194e7565b50604051601f19601f85018116603f0116810181811067ffffffffffffffff82111715619589576195896194e7565b6040528381529050808284018510156195a157600080fd5b616aa4846020830185618f10565b600082601f8301126195c057600080fd5b614dd88383516020850161953f565b6000602082840312156195e157600080fd5b815167ffffffffffffffff8111156195f857600080fd5b614cdb848285016195af565b60008351619616818460208801618f10565b83519083019061962a818360208801618f10565b01949350505050565b7f4661696c656420746f206465706c6f7920636f6e74726163742000000000000081526000835161966b81601a850160208801618f10565b7f207573696e6720636f6e7374727563746f722064617461202200000000000000601a9184019182015283516196a8816033840160208801618f10565b7f220000000000000000000000000000000000000000000000000000000000000060339290910191820152603401949350505050565b60408152600b60408201527f464f554e4452595f4f55540000000000000000000000000000000000000000006060820152608060208201526000614dd86080830184618f34565b60006020828403121561973757600080fd5b815167ffffffffffffffff81111561974e57600080fd5b8201601f8101841361975f57600080fd5b614cdb8482516020840161953f565b60008551619780818460208a01618f10565b7f2f0000000000000000000000000000000000000000000000000000000000000090830190815285516197ba816001840160208a01618f10565b7f2f000000000000000000000000000000000000000000000000000000000000006001929091019182015284516197f8816002840160208901618f10565b6001818301019150507f2f000000000000000000000000000000000000000000000000000000000000006001820152835161983a816002840160208801618f10565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600292909101918201526007019695505050505050565b6040815260006198856040830184618f34565b8281036020840152600481527f2e6173740000000000000000000000000000000000000000000000000000000060208201526040810191505092915050565b6000602082840312156198d657600080fd5b81518015158114614dd857600080fd5b7f436f756c64206e6f742066696e642041535420696e206172746966616374200081526000825161991e81601f850160208701618f10565b7f2e205365742060617374203d20747275656020696e20666f756e6472792e746f601f9390910192830152507f6d6c000000000000000000000000000000000000000000000000000000000000603f820152604101919050565b60408152600061998b6040830184618f34565b8281036020840152601181527f2e6173742e6162736f6c7574655061746800000000000000000000000000000060208201526040810191505092915050565b6040815260006199dd6040830184618f34565b8281036020840152600c81527f2e6173742e6c6963656e7365000000000000000000000000000000000000000060208201526040810191505092915050565b7f2e6d657461646174612e736f75726365732e5b27000000000000000000000000815260008251619a54816014850160208701618f10565b7f275d2e6b656363616b32353600000000000000000000000000000000000000006014939091019283015250602001919050565b604081526000619a9b6040830185618f34565b8281036020840152614dd48185618f34565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f2200000000000000000000000000000000000000000000000000000000000000815260008251619b14816001850160208701618f10565b7f22000000000000000000000000000000000000000000000000000000000000006001939091019283015250600201919050565b60008251619b5a818460208701618f10565b7f2f6275696c642d696e666f000000000000000000000000000000000000000000920191825250600b01919050565b7f436f756c64206e6f742066696e64206275696c642d696e666f2066696c65207781527f697468206d61746368696e6720736f7572636520636f6465206861736820666f60208201527f7220636f6e747261637420000000000000000000000000000000000000000000604082015260008251619c0d81604b850160208701618f10565b91909101604b0192915050565b600060ff821660ff8103619c3057619c30619272565b60010192915050565b7f406f70656e7a657070656c696e2f646566656e6465722d6465706c6f792d636c81527f69656e742d636c69400000000000000000000000000000000000000000000000602082015260008251619c97816029850160208701618f10565b9190910160290192915050565b60408152601660408201527f4f50454e5a455050454c494e5f424153485f50415448000000000000000000006060820152608060208201526000614dd86080830184618f34565b600060208284031215619cfd57600080fd5b815167ffffffffffffffff811115619d1457600080fd5b820160608185031215619d2657600080fd5b619d2e619516565b81518060030b8114619d3f57600080fd5b8152602082015167ffffffffffffffff811115619d5b57600080fd5b619d67868285016195af565b602083015250604082015167ffffffffffffffff811115619d8757600080fd5b619d93868285016195af565b604083015250949350505050565b7f4661696c656420746f2072756e206261736820636f6d6d616e6420776974682081527f2200000000000000000000000000000000000000000000000000000000000000602082015260008251619dff816021850160208701618f10565b7f222e20496620796f7520617265207573696e672057696e646f77732c2073657460219390910192830152507f20746865204f50454e5a455050454c494e5f424153485f5041544820656e766960418201527f726f6e6d656e74207661726961626c6520746f207468652066756c6c7920717560618201527f616c69666965642070617468206f66207468652062617368206578656375746160818201527f626c652e20466f72206578616d706c652c20696620796f75206172652075736960a18201527f6e672047697420666f722057696e646f77732c206164642074686520666f6c6c60c18201527f6f77696e67206c696e6520696e20746865202e656e762066696c65206f66207960e18201527f6f75722070726f6a65637420287573696e6720666f727761726420736c6173686101018201527f6573293a0a4f50454e5a455050454c494e5f424153485f504154483d22433a2f6101218201527f50726f6772616d2046696c65732f4769742f62696e2f6261736822000000000061014182015261015c01919050565b7f4661696c656420746f2066696e64206c696e652077697468207072656669782081527f2700000000000000000000000000000000000000000000000000000000000000602082015260008351619feb816021850160208801618f10565b7f2720696e206f75747075743a2000000000000000000000000000000000000000602191840191820152835161a02881602e840160208801618f10565b01602e01949350505050565b7f4661696c656420746f2072756e2075706772616465207361666574792076616c81527f69646174696f6e3a200000000000000000000000000000000000000000000000602082015260008251619c97816029850160208701618f10565b7f55706772616465207361666574792076616c69646174696f6e206661696c656481527f3a0a00000000000000000000000000000000000000000000000000000000000060208201526000825161a0f0816022850160208701618f10565b9190910160220192915050565b81810381811115614cdf57614cdf619272565b7f436f6e7472616374206e616d652000000000000000000000000000000000000081526000825161a14881600e850160208701618f10565b7f206d75737420626520696e2074686520666f726d6174204d79436f6e74726163600e9390910192830152507f742e736f6c3a4d79436f6e7472616374206f72204d79436f6e74726163742e73602e8201527f6f6c206f72206f75742f4d79436f6e74726163742e736f6c2f4d79436f6e7472604e8201527f6163742e6a736f6e000000000000000000000000000000000000000000000000606e820152607601919050565b7f53504458206c6963656e7365206964656e74696669657220000000000000000081526000835161a226816018850160208801618f10565b7f20696e2000000000000000000000000000000000000000000000000000000000601891840191820152835161a26381601c840160208801618f10565b7f20646f6573206e6f74206c6f6f6b206c696b65206120737570706f7274656420601c92909101918201527f6c6963656e736520666f7220626c6f636b206578706c6f726572207665726966603c8201527f69636174696f6e2e205573652074686520606c6963656e73655479706560206f605c8201527f7074696f6e20746f20737065636966792061206c6963656e736520747970652c607c8201527f206f7220736574207468652060736b69704c6963656e73655479706560206f70609c8201527f74696f6e20746f2060747275656020746f20736b69702e00000000000000000060bc82015260d301949350505050565b6000825161a369818460208701618f10565b7f2000000000000000000000000000000000000000000000000000000000000000920191825250600101919050565b7f406f70656e7a657070656c696e2f75706772616465732d636f7265400000000081526000825161a3d081601c850160208701618f10565b91909101601c0192915050565b6000600019820361a3f05761a3f0619272565b5060010190565b8082028115828204841417614cdf57614cdf619272565b6001815b600184111561a4495780850481111561a42d5761a42d619272565b600184161561a43b57908102905b60019390931c92800261a412565b935093915050565b60008261a46057506001614cdf565b8161a46d57506000614cdf565b816001811461a483576002811461a48d5761a4a9565b6001915050614cdf565b60ff84111561a49e5761a49e619272565b50506001821b614cdf565b5060208310610133831016604e8410600b841016171561a4cc575081810a614cdf565b61a4d9600019848461a40e565b806000190482111561a4ed5761a4ed619272565b029392505050565b6000614dd8838361a451565b60008161a5105761a510619272565b506000190190565b6000835161a52a818460208801618f10565b7f3a00000000000000000000000000000000000000000000000000000000000000908301908152835161a564816001840160208801618f10565b01600101949350505050565b818103600083128015838313168383128216171561809c5761809c61927256fe608060405234801561001057600080fd5b506040516112a63803806112a683398101604081905261002f91610110565b604051806040016040528060048152602001635a65746160e01b815250604051806040016040528060048152602001635a45544160e01b815250816003908161007891906101e2565b50600461008582826101e2565b5050506001600160a01b03821615806100a557506001600160a01b038116155b156100c35760405163e6c4247b60e01b815260040160405180910390fd5b600680546001600160a01b039384166001600160a01b031991821617909155600780549290931691161790556102a0565b80516001600160a01b038116811461010b57600080fd5b919050565b6000806040838503121561012357600080fd5b61012c836100f4565b915061013a602084016100f4565b90509250929050565b634e487b7160e01b600052604160045260246000fd5b600181811c9082168061016d57607f821691505b60208210810361018d57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156101dd57806000526020600020601f840160051c810160208510156101ba5750805b601f840160051c820191505b818110156101da57600081556001016101c6565b50505b505050565b81516001600160401b038111156101fb576101fb610143565b61020f816102098454610159565b84610193565b6020601f821160018114610243576000831561022b5750848201515b600019600385901b1c1916600184901b1784556101da565b600084815260208120601f198516915b828110156102735787850151825560209485019460019092019101610253565b50848210156102915786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b610ff7806102af6000396000f3fe608060405234801561001057600080fd5b506004361061011b5760003560e01c806342966c68116100b257806379cc679011610081578063a9059cbb11610066578063a9059cbb1461028e578063bff9662a146102a1578063dd62ed3e146102c157600080fd5b806379cc67901461027357806395d89b411461028657600080fd5b806342966c68146102025780635b1125911461021557806370a0823114610235578063779e3b631461026b57600080fd5b80631e458bee116100ee5780631e458bee1461018857806323b872dd1461019b578063313ce567146101ae578063328a01d0146101bd57600080fd5b806306fdde0314610120578063095ea7b31461013e57806315d57fd41461016157806318160ddd14610176575b600080fd5b610128610307565b6040516101359190610d97565b60405180910390f35b61015161014c366004610e2c565b610399565b6040519015158152602001610135565b61017461016f366004610e56565b6103b3565b005b6002545b604051908152602001610135565b610174610196366004610e89565b61057e565b6101516101a9366004610ebc565b610631565b60405160128152602001610135565b6007546101dd9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610135565b610174610210366004610ef9565b610655565b6006546101dd9073ffffffffffffffffffffffffffffffffffffffff1681565b61017a610243366004610f12565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b610174610662565b610174610281366004610e2c565b610786565b610128610837565b61015161029c366004610e2c565b610846565b6005546101dd9073ffffffffffffffffffffffffffffffffffffffff1681565b61017a6102cf366004610e56565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b60606003805461031690610f34565b80601f016020809104026020016040519081016040528092919081815260200182805461034290610f34565b801561038f5780601f106103645761010080835404028352916020019161038f565b820191906000526020600020905b81548152906001019060200180831161037257829003601f168201915b5050505050905090565b6000336103a7818585610854565b60019150505b92915050565b60075473ffffffffffffffffffffffffffffffffffffffff1633148015906103f3575060065473ffffffffffffffffffffffffffffffffffffffff163314155b15610431576040517fcdfcef970000000000000000000000000000000000000000000000000000000081523360048201526024015b60405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff82161580610468575073ffffffffffffffffffffffffffffffffffffffff8116155b1561049f576040517fe6c4247b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6006805473ffffffffffffffffffffffffffffffffffffffff8481167fffffffffffffffffffffffff0000000000000000000000000000000000000000928316811790935560058054918516919092161790556040805133815260208101929092527fe79965b5c67dcfb2cf5fe152715e4a7256cee62a3d5dd8484fd8a8539eb8beff910160405180910390a16040805133815273ffffffffffffffffffffffffffffffffffffffff831660208201527f1b9352454524a57a51f24f67dc66d898f616922cd1f7a12d73570ece12b1975c910160405180910390a15050565b60055473ffffffffffffffffffffffffffffffffffffffff1633146105d1576040517f3fe32fba000000000000000000000000000000000000000000000000000000008152336004820152602401610428565b6105db8383610866565b808373ffffffffffffffffffffffffffffffffffffffff167fc263b302aec62d29105026245f19e16f8e0137066ccd4a8bd941f716bd4096bb8460405161062491815260200190565b60405180910390a3505050565b60003361063f8582856108c6565b61064a858585610995565b506001949350505050565b61065f3382610a40565b50565b60075473ffffffffffffffffffffffffffffffffffffffff1633146106b5576040517fe700765e000000000000000000000000000000000000000000000000000000008152336004820152602401610428565b60065473ffffffffffffffffffffffffffffffffffffffff16610704576040517fe6c4247b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600654600780547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff90921691821790556040805133815260208101929092527f5104c9abdc7d111c2aeb4ce890ac70274a4be2ee83f46a62551be5e6ebc82dd0910160405180910390a1565b60055473ffffffffffffffffffffffffffffffffffffffff1633146107d9576040517f3fe32fba000000000000000000000000000000000000000000000000000000008152336004820152602401610428565b6107e38282610a9c565b8173ffffffffffffffffffffffffffffffffffffffff167f919f7e2092ffcc9d09f599be18d8152860b0c054df788a33bc549cdd9d0f15b18260405161082b91815260200190565b60405180910390a25050565b60606004805461031690610f34565b6000336103a7818585610995565b6108618383836001610ab1565b505050565b73ffffffffffffffffffffffffffffffffffffffff82166108b6576040517fec442f0500000000000000000000000000000000000000000000000000000000815260006004820152602401610428565b6108c260008383610bf9565b5050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811461098f5781811015610980576040517ffb8f41b200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff841660048201526024810182905260448101839052606401610428565b61098f84848484036000610ab1565b50505050565b73ffffffffffffffffffffffffffffffffffffffff83166109e5576040517f96c6fd1e00000000000000000000000000000000000000000000000000000000815260006004820152602401610428565b73ffffffffffffffffffffffffffffffffffffffff8216610a35576040517fec442f0500000000000000000000000000000000000000000000000000000000815260006004820152602401610428565b610861838383610bf9565b73ffffffffffffffffffffffffffffffffffffffff8216610a90576040517f96c6fd1e00000000000000000000000000000000000000000000000000000000815260006004820152602401610428565b6108c282600083610bf9565b610aa78233836108c6565b6108c28282610a40565b73ffffffffffffffffffffffffffffffffffffffff8416610b01576040517fe602df0500000000000000000000000000000000000000000000000000000000815260006004820152602401610428565b73ffffffffffffffffffffffffffffffffffffffff8316610b51576040517f94280d6200000000000000000000000000000000000000000000000000000000815260006004820152602401610428565b73ffffffffffffffffffffffffffffffffffffffff8085166000908152600160209081526040808320938716835292905220829055801561098f578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051610beb91815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff8316610c31578060026000828254610c269190610f87565b90915550610ce39050565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205481811015610cb7576040517fe450d38c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff851660048201526024810182905260448101839052606401610428565b73ffffffffffffffffffffffffffffffffffffffff841660009081526020819052604090209082900390555b73ffffffffffffffffffffffffffffffffffffffff8216610d0c57600280548290039055610d38565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090208054820190555b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161062491815260200190565b602081526000825180602084015260005b81811015610dc55760208186018101516040868401015201610da8565b5060006040828501015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011684010191505092915050565b803573ffffffffffffffffffffffffffffffffffffffff81168114610e2757600080fd5b919050565b60008060408385031215610e3f57600080fd5b610e4883610e03565b946020939093013593505050565b60008060408385031215610e6957600080fd5b610e7283610e03565b9150610e8060208401610e03565b90509250929050565b600080600060608486031215610e9e57600080fd5b610ea784610e03565b95602085013595506040909401359392505050565b600080600060608486031215610ed157600080fd5b610eda84610e03565b9250610ee860208501610e03565b929592945050506040919091013590565b600060208284031215610f0b57600080fd5b5035919050565b600060208284031215610f2457600080fd5b610f2d82610e03565b9392505050565b600181811c90821680610f4857607f821691505b602082108103610f81577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b808201808211156103ad577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea2646970667358221220085f01204b33dc17013c78c74fbca32a3da2c0b384ce7c8878c889551af28c6164736f6c634300081a003360a060405234801561001057600080fd5b5060405161179838038061179883398101604081905261002f916101e5565b60016000556002805460ff191690556001600160a01b038316158061005b57506001600160a01b038216155b8061006d57506001600160a01b038116155b1561008b5760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b0383166080526100a3600082610134565b506100ce7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a82610134565b506100f97f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e483610134565b5061011260008051602061177883398151915282610134565b5061012b60008051602061177883398151915283610134565b50505050610228565b60008281526001602090815260408083206001600160a01b038516845290915281205460ff166101bf5760008381526001602081815260408084206001600160a01b0387168086529252808420805460ff19169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45060016101c3565b5060005b92915050565b80516001600160a01b03811681146101e057600080fd5b919050565b6000806000606084860312156101fa57600080fd5b610203846101c9565b9250610211602085016101c9565b915061021f604085016101c9565b90509250925092565b60805161151961025f6000396000818161019e01528181610500015281816105620152818161099101526109f301526115196000f3fe608060405234801561001057600080fd5b506004361061016c5760003560e01c806385f438c1116100cd578063c8a0236211610081578063d936547e11610066578063d936547e14610355578063d9caed1214610378578063e63ab1e91461038b57600080fd5b8063c8a023621461032f578063d547741f1461034257600080fd5b80639a590427116100b25780639a590427146103015780639b19251a14610314578063a217fddf1461032757600080fd5b806385f438c11461029457806391d14854146102bb57600080fd5b806336568abe11610124578063570618e111610109578063570618e11461025a5780635c975abb146102815780638456cb591461028c57600080fd5b806336568abe1461023f5780633f4ba83a1461025257600080fd5b806321fc65f21161015557806321fc65f2146101e5578063248a9ca3146101fa5780632f2ff15d1461022c57600080fd5b806301ffc9a714610171578063116191b614610199575b600080fd5b61018461017f366004611224565b6103b2565b60405190151581526020015b60405180910390f35b6101c07f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610190565b6101f86101f336600461128f565b61044b565b005b61021e61020836600461132c565b6000908152600160208190526040909120015490565b604051908152602001610190565b6101f861023a366004611345565b61064c565b6101f861024d366004611345565b610678565b6101f86106d6565b61021e7f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a81565b60025460ff16610184565b6101f861070b565b61021e7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b6101846102c9366004611345565b600091825260016020908152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b6101f861030f366004611371565b61073d565b6101f8610322366004611371565b61080b565b61021e600081565b6101f861033d36600461128f565b6108dc565b6101f8610350366004611345565b610ac3565b610184610363366004611371565b60036020526000908152604090205460ff1681565b6101f861038636600461138c565b610ae9565b61021e7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061044557507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b610453610c15565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461047d81610c58565b610485610c62565b73ffffffffffffffffffffffffffffffffffffffff861660009081526003602052604090205460ff166104e4576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61052573ffffffffffffffffffffffffffffffffffffffff87167f000000000000000000000000000000000000000000000000000000000000000086610ca1565b6040517f5131ab5900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690635131ab599061059f9089908990899089908990600401611412565b600060405180830381600087803b1580156105b957600080fd5b505af11580156105cd573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167f85b5be9cf454e05e0bddf49315178102227c312078eefa3c00294fb4d912ae4e8686866040516106329392919061146f565b60405180910390a3506106456001600055565b5050505050565b6000828152600160208190526040909120015461066881610c58565b6106728383610d2e565b50505050565b73ffffffffffffffffffffffffffffffffffffffff811633146106c7576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6106d18282610ddb565b505050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61070081610c58565b610708610e7c565b50565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61073581610c58565b610708610edb565b7f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a61076781610c58565b73ffffffffffffffffffffffffffffffffffffffff82166107b4576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216600081815260036020526040808220805460ff19169055517f51085ddf9ebdded84b76e829eb58c4078e4b5bdf97d9a94723f336039da467919190a25050565b7f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a61083581610c58565b73ffffffffffffffffffffffffffffffffffffffff8216610882576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216600081815260036020526040808220805460ff19166001179055517faab7954e9d246b167ef88aeddad35209ca2489d95a8aeb59e288d9b19fae5a549190a25050565b6108e4610c15565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461090e81610c58565b610916610c62565b73ffffffffffffffffffffffffffffffffffffffff861660009081526003602052604090205460ff16610975576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6109b673ffffffffffffffffffffffffffffffffffffffff87167f000000000000000000000000000000000000000000000000000000000000000086610ca1565b6040517fb8969bd400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063b8969bd490610a309089908990899089908990600401611412565b600060405180830381600087803b158015610a4a57600080fd5b505af1158015610a5e573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fb9d4efa96044e5f5e03e696fa9ae2ff66911cc27e8a637c3627c75bc5b2241c88686866040516106329392919061146f565b60008281526001602081905260409091200154610adf81610c58565b6106728383610ddb565b610af1610c15565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e4610b1b81610c58565b610b23610c62565b73ffffffffffffffffffffffffffffffffffffffff841660009081526003602052604090205460ff16610b82576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610ba373ffffffffffffffffffffffffffffffffffffffff85168484610ca1565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f9b1bfa7fa9ee420a16e124f794c35ac9f90472acc99140eb2f6447c714cad8eb84604051610c0291815260200190565b60405180910390a3506106d16001600055565b600260005403610c51576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b6107088133610f18565b60025460ff1615610c9f576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6040805173ffffffffffffffffffffffffffffffffffffffff8416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb000000000000000000000000000000000000000000000000000000001790526106d1908490610fa9565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff16610dd357600083815260016020818152604080842073ffffffffffffffffffffffffffffffffffffffff87168086529252808420805460ff19169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a4506001610445565b506000610445565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff1615610dd357600083815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff86168085529252808320805460ff1916905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a4506001610445565b610e8461103f565b6002805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b610ee3610c62565b6002805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258610eb13390565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16610fa5576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82166004820152602481018390526044015b60405180910390fd5b5050565b6000610fcb73ffffffffffffffffffffffffffffffffffffffff84168361107b565b90508051600014158015610ff0575080806020019051810190610fee9190611492565b155b156106d1576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84166004820152602401610f9c565b60025460ff16610c9f576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606061108983836000611090565b9392505050565b6060814710156110ce576040517fcd786059000000000000000000000000000000000000000000000000000000008152306004820152602401610f9c565b6000808573ffffffffffffffffffffffffffffffffffffffff1684866040516110f791906114b4565b60006040518083038185875af1925050503d8060008114611134576040519150601f19603f3d011682016040523d82523d6000602084013e611139565b606091505b5091509150611149868383611153565b9695505050505050565b60608261116857611163826111e2565b611089565b815115801561118c575073ffffffffffffffffffffffffffffffffffffffff84163b155b156111db576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85166004820152602401610f9c565b5080611089565b8051156111f25780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006020828403121561123657600080fd5b81357fffffffff000000000000000000000000000000000000000000000000000000008116811461108957600080fd5b803573ffffffffffffffffffffffffffffffffffffffff8116811461128a57600080fd5b919050565b6000806000806000608086880312156112a757600080fd5b6112b086611266565b94506112be60208701611266565b935060408601359250606086013567ffffffffffffffff8111156112e157600080fd5b8601601f810188136112f257600080fd5b803567ffffffffffffffff81111561130957600080fd5b88602082840101111561131b57600080fd5b959894975092955050506020019190565b60006020828403121561133e57600080fd5b5035919050565b6000806040838503121561135857600080fd5b8235915061136860208401611266565b90509250929050565b60006020828403121561138357600080fd5b61108982611266565b6000806000606084860312156113a157600080fd5b6113aa84611266565b92506113b860208501611266565b929592945050506040919091013590565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff8616815273ffffffffffffffffffffffffffffffffffffffff851660208201528360408201526080606082015260006114646080830184866113c9565b979650505050505050565b8381526040602082015260006114896040830184866113c9565b95945050505050565b6000602082840312156114a457600080fd5b8151801515811461108957600080fd5b6000825160005b818110156114d557602081860181015185830152016114bb565b50600092019182525091905056fea26469706673582212207ea3ad4ba4a6d39c3be3cec464753448900300ac3b508b4000815de5b914c53064736f6c634300081a00338619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a60c060405260001960035534801561001657600080fd5b5060405161155a38038061155a83398101604081905261003591610220565b60016000819055805460ff19169055838383836001600160a01b038416158061006557506001600160a01b038316155b8061007757506001600160a01b038216155b8061008957506001600160a01b038116155b156100a75760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b03808516608052831660a0526100c5600082610154565b506100f07f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e483610154565b5061011b7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb83610154565b506101467f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a82610154565b505050505050505050610274565b60008281526002602090815260408083206001600160a01b038516845290915281205460ff166101fa5760008381526002602090815260408083206001600160a01b03861684529091529020805460ff191660011790556101b23390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45060016101fe565b5060005b92915050565b80516001600160a01b038116811461021b57600080fd5b919050565b6000806000806080858703121561023657600080fd5b61023f85610204565b935061024d60208601610204565b925061025b60408601610204565b915061026960608601610204565b905092959194509250565b60805160a0516112826102d86000396000818161021d01528181610531015281816108240152818161097b01528181610ad00152610bf20152600081816101d1015281816104a1015281816105040152818161079401526107f701526112826000f3fe608060405234801561001057600080fd5b50600436106101775760003560e01c80635e3e9fef116100d857806391d148541161008c578063d547741f11610066578063d547741f14610386578063d5abeb0114610399578063e63ab1e9146103a257600080fd5b806391d1485414610311578063a217fddf14610357578063a783c7891461035f57600080fd5b8063743e0c9b116100bd578063743e0c9b146102cf5780638456cb59146102e257806385f438c1146102ea57600080fd5b80635e3e9fef146102a95780636f8b44b0146102bc57600080fd5b8063248a9ca31161012f57806336568abe1161011457806336568abe146102835780633f4ba83a146102965780635c975abb1461029e57600080fd5b8063248a9ca31461023f5780632f2ff15d1461027057600080fd5b8063106e629011610160578063106e6290146101b9578063116191b6146101cc57806321e093b11461021857600080fd5b806301ffc9a71461017c57806302d5c899146101a4575b600080fd5b61018f61018a366004610fb4565b6103c9565b60405190151581526020015b60405180910390f35b6101b76101b2366004611026565b610462565b005b6101b76101c73660046110b8565b6105f7565b6101f37f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161019b565b6101f37f000000000000000000000000000000000000000000000000000000000000000081565b61026261024d3660046110eb565b60009081526002602052604090206001015490565b60405190815260200161019b565b6101b761027e366004611104565b61069c565b6101b7610291366004611104565b6106c7565b6101b7610720565b60015460ff1661018f565b6101b76102b7366004611026565b610755565b6101b76102ca3660046110eb565b6108d0565b6101b76102dd3660046110eb565b61093e565b6101b76109e8565b6102627f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b61018f61031f366004611104565b600091825260026020908152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b610262600081565b6102627f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb81565b6101b7610394366004611104565b610a1a565b61026260035481565b6102627f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061045c57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b61046a610a3f565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461049481610a82565b61049c610a8c565b6104c77f00000000000000000000000000000000000000000000000000000000000000008684610acb565b6040517fb8969bd400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063b8969bd490610561907f0000000000000000000000000000000000000000000000000000000000000000908a908a908a908a90600401611179565b600060405180830381600087803b15801561057b57600080fd5b505af115801561058f573d6000803e3d6000fd5b505050508573ffffffffffffffffffffffffffffffffffffffff167fba96f26bdda53eb8c8ba39045dfb4ff39753fbc7a6edcf250a88e75e78d102fe8686866040516105dd939291906111d6565b60405180910390a2506105f06001600055565b5050505050565b6105ff610a3f565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461062981610a82565b610631610a8c565b61063c848484610acb565b8373ffffffffffffffffffffffffffffffffffffffff167f884edad9ce6fa2440d8a54cc123490eb96d2768479d49ff9c7366125a94243648460405161068491815260200190565b60405180910390a2506106976001600055565b505050565b6000828152600260205260409020600101546106b781610a82565b6106c18383610c53565b50505050565b73ffffffffffffffffffffffffffffffffffffffff81163314610716576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6106978282610d53565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61074a81610a82565b610752610e12565b50565b61075d610a3f565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461078781610a82565b61078f610a8c565b6107ba7f00000000000000000000000000000000000000000000000000000000000000008684610acb565b6040517f5131ab5900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690635131ab5990610854907f0000000000000000000000000000000000000000000000000000000000000000908a908a908a908a90600401611179565b600060405180830381600087803b15801561086e57600080fd5b505af1158015610882573d6000803e3d6000fd5b505050508573ffffffffffffffffffffffffffffffffffffffff167f7772f56296d3a5202974a45c61c9188d844ab4d6eeb18c851e4b8d5384ca6ced8686866040516105dd939291906111d6565b7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb6108fa81610a82565b610902610a8c565b60038290556040518281527f7810bd47de260c3e9ee10061cf438099dd12256c79485f12f94dbccc981e806c9060200160405180910390a15050565b610946610a8c565b6040517f79cc6790000000000000000000000000000000000000000000000000000000008152336004820152602481018290527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16906379cc679090604401600060405180830381600087803b1580156109d457600080fd5b505af11580156105f0573d6000803e3d6000fd5b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610a1281610a82565b610752610e8f565b600082815260026020526040902060010154610a3581610a82565b6106c18383610d53565b600260005403610a7b576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b6107528133610ee8565b60015460ff1615610ac9576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6003547f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b39573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b5d91906111f9565b610b679084611212565b1115610b9f576040517fc30436e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f1e458bee00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff848116600483015260248201849052604482018390527f00000000000000000000000000000000000000000000000000000000000000001690631e458bee90606401600060405180830381600087803b158015610c3657600080fd5b505af1158015610c4a573d6000803e3d6000fd5b50505050505050565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff16610d4b57600083815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff86168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055610ce93390565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a450600161045c565b50600061045c565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff1615610d4b57600083815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8616808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a450600161045c565b610e1a610f78565b600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b610e97610a8c565b600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016811790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25833610e65565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16610f74576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff821660048201526024810183905260440160405180910390fd5b5050565b60015460ff16610ac9576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060208284031215610fc657600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610ff657600080fd5b9392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461102157600080fd5b919050565b60008060008060006080868803121561103e57600080fd5b61104786610ffd565b945060208601359350604086013567ffffffffffffffff81111561106a57600080fd5b8601601f8101881361107b57600080fd5b803567ffffffffffffffff81111561109257600080fd5b8860208284010111156110a457600080fd5b959894975060200195606001359392505050565b6000806000606084860312156110cd57600080fd5b6110d684610ffd565b95602085013595506040909401359392505050565b6000602082840312156110fd57600080fd5b5035919050565b6000806040838503121561111757600080fd5b8235915061112760208401610ffd565b90509250929050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff8616815273ffffffffffffffffffffffffffffffffffffffff851660208201528360408201526080606082015260006111cb608083018486611130565b979650505050505050565b8381526040602082015260006111f0604083018486611130565b95945050505050565b60006020828403121561120b57600080fd5b5051919050565b8082018082111561045c577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea2646970667358221220de5fa55e0ca79ea2f08903481d01ea00bbbf346b9cfba44e12a2dd6f3a6f2e8a64736f6c634300081a00336080604052348015600f57600080fd5b506001600055610d3a806100246000396000f3fe6080604052600436106100635760003560e01c8063c513169111610040578063c5131691146100c1578063e04d4f97146100e1578063f05b6abf146100f457005b8063357fc5a21461006c5780636ed701691461008c5780638fcaa0b5146100a157005b3661006a57005b005b34801561007857600080fd5b5061006a6100873660046106c0565b610114565b34801561009857600080fd5b5061006a6101aa565b3480156100ad57600080fd5b5061006a6100bc3660046106fc565b6101df565b3480156100cd57600080fd5b5061006a6100dc3660046106c0565b61021e565b61006a6100ef366004610895565b6102f9565b34801561010057600080fd5b5061006a61010f366004610981565b61033d565b61011c610372565b61013e73ffffffffffffffffffffffffffffffffffffffff83163383866103b5565b604080513381526020810185905273ffffffffffffffffffffffffffffffffffffffff848116828401528316606082015290517f2b58128f24a9f59127cc5b5430d70542b22220f2d9adaa86e442b816ab98af609181900360800190a16101a56001600055565b505050565b6040513381527fbcaadb46b82a48af60b608f58959ae6b8310d1b0a0d094c2e9ec3208ed39f2a09060200160405180910390a1565b7f0d3f65f00e631663aa85c96330b5c7a83bb29af3630c0063776f985edc3037aa33838360405161021293929190610a6b565b60405180910390a15050565b610226610372565b6000610233600285610ad5565b90508060000361026f576040517f1f2a200500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61029173ffffffffffffffffffffffffffffffffffffffff84163384846103b5565b604080513381526020810183905273ffffffffffffffffffffffffffffffffffffffff858116828401528416606082015290517f2b58128f24a9f59127cc5b5430d70542b22220f2d9adaa86e442b816ab98af609181900360800190a1506101a56001600055565b7f1f1ff1f5fb41346850b2f5c04e6c767e2f1c8a525c5c0c5cdb60cdf3ca5f62fa3334858585604051610330959493929190610b7e565b60405180910390a1505050565b7f74a53cd528a921fca7dbdee62f86819051d3cc98f214951f4238e8843f20b146338484846040516103309493929190610c08565b6002600054036103ae576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b6040805173ffffffffffffffffffffffffffffffffffffffff85811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd0000000000000000000000000000000000000000000000000000000017905261044a908590610450565b50505050565b600061047273ffffffffffffffffffffffffffffffffffffffff8416836104eb565b905080516000141580156104975750808060200190518101906104959190610ccb565b155b156101a5576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff841660048201526024015b60405180910390fd5b60606104f983836000610500565b9392505050565b60608147101561053e576040517fcd7860590000000000000000000000000000000000000000000000000000000081523060048201526024016104e2565b6000808573ffffffffffffffffffffffffffffffffffffffff1684866040516105679190610ce8565b60006040518083038185875af1925050503d80600081146105a4576040519150601f19603f3d011682016040523d82523d6000602084013e6105a9565b606091505b50915091506105b98683836105c3565b9695505050505050565b6060826105d8576105d382610652565b6104f9565b81511580156105fc575073ffffffffffffffffffffffffffffffffffffffff84163b155b1561064b576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff851660048201526024016104e2565b50806104f9565b8051156106625780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50565b803573ffffffffffffffffffffffffffffffffffffffff811681146106bb57600080fd5b919050565b6000806000606084860312156106d557600080fd5b833592506106e560208501610697565b91506106f360408501610697565b90509250925092565b6000806020838503121561070f57600080fd5b823567ffffffffffffffff81111561072657600080fd5b8301601f8101851361073757600080fd5b803567ffffffffffffffff81111561074e57600080fd5b85602082840101111561076057600080fd5b6020919091019590945092505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156107e6576107e6610770565b604052919050565b600082601f8301126107ff57600080fd5b813567ffffffffffffffff81111561081957610819610770565b61084a60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8401160161079f565b81815284602083860101111561085f57600080fd5b816020850160208301376000918101602001919091529392505050565b801515811461069457600080fd5b80356106bb8161087c565b6000806000606084860312156108aa57600080fd5b833567ffffffffffffffff8111156108c157600080fd5b6108cd868287016107ee565b9350506020840135915060408401356108e58161087c565b809150509250925092565b600067ffffffffffffffff82111561090a5761090a610770565b5060051b60200190565b600082601f83011261092557600080fd5b8135610938610933826108f0565b61079f565b8082825260208201915060208360051b86010192508583111561095a57600080fd5b602085015b8381101561097757803583526020928301920161095f565b5095945050505050565b60008060006060848603121561099657600080fd5b833567ffffffffffffffff8111156109ad57600080fd5b8401601f810186136109be57600080fd5b80356109cc610933826108f0565b8082825260208201915060208360051b8501019250888311156109ee57600080fd5b602084015b83811015610a3057803567ffffffffffffffff811115610a1257600080fd5b610a218b6020838901016107ee565b845250602092830192016109f3565b509550505050602084013567ffffffffffffffff811115610a5057600080fd5b610a5c86828701610914565b9250506106f36040850161088a565b73ffffffffffffffffffffffffffffffffffffffff8416815260406020820152816040820152818360608301376000818301606090810191909152601f9092017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016010192915050565b600082610b0b577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60005b83811015610b2b578181015183820152602001610b13565b50506000910152565b60008151808452610b4c816020860160208601610b10565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b73ffffffffffffffffffffffffffffffffffffffff8616815284602082015260a060408201526000610bb360a0830186610b34565b6060830194909452509015156080909101529392505050565b600081518084526020840193506020830160005b82811015610bfe578151865260209586019590910190600101610be0565b5093949350505050565b60006080820173ffffffffffffffffffffffffffffffffffffffff871683526080602084015280865180835260a08501915060a08160051b86010192506020880160005b82811015610c9b577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60878603018452610c86858351610b34565b94506020938401939190910190600101610c4c565b505050508281036040840152610cb18186610bcc565b915050610cc2606083018415159052565b95945050505050565b600060208284031215610cdd57600080fd5b81516104f98161087c565b60008251610cfa818460208701610b10565b919091019291505056fea2646970667358221220556072e1abafc3c4063b8cce832228b4f309b93726aaa6a6dfab20cb880c6d1864736f6c634300081a0033a2646970667358221220e8fa6ed3c204f700b02b700eb0f45f9ba284040b18b01f59f33e42b11c19d27c64736f6c634300081a0033", + Bin: "0x6080604052600c8054600160ff199182168117909255601f80549091169091179055348015602c57600080fd5b5061f2bc8061003c6000396000f3fe608060405234801561001057600080fd5b50600436106101cf5760003560e01c8063a783c78911610104578063d509b16c116100a2578063e63ab1e911610071578063e63ab1e914610344578063fa7626d41461036b578063fdca905214610378578063fe574f841461038057600080fd5b8063d509b16c14610324578063dcf7d0371461032c578063de1cb76c14610334578063e20c9f711461033c57600080fd5b8063b5508aa9116100de578063b5508aa9146102f4578063ba414fa6146102fc578063c190997214610314578063ccb0e3f21461031c57600080fd5b8063a783c789146102bd578063aaf74192146102e4578063b0464fdc146102ec57600080fd5b80634934655811610171578063828320141161014b578063828320141461025657806385226c811461025e57806385f438c114610273578063916a17c6146102a857600080fd5b8063493465581461023157806366d9a9a0146102395780637db20efb1461024e57600080fd5b80632ade3880116101ad5780632ade3880146102045780633cba0107146102195780633e5e3c23146102215780633f7286f41461022957600080fd5b80630a9254e4146101d45780631ed7831c146101de5780632506ef03146101fc575b600080fd5b6101dc610388565b005b6101e6610a6e565b6040516101f39190618ec4565b60405180910390f35b6101dc610ad0565b61020c610d81565b6040516101f39190618f60565b6101dc610ec3565b6101e6611685565b6101e66116e5565b6101dc611745565b610241611d19565b6040516101f391906190c6565b6101dc611e9b565b6101dc61213a565b610266612393565b6040516101f39190619164565b61029a7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b6040519081526020016101f3565b6102b0612463565b6040516101f391906191db565b61029a7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb81565b6101dc61255e565b6102b06127ba565b6102666128b5565b610304612985565b60405190151581526020016101f3565b6101dc612a59565b6101dc612cc4565b6101dc6137f0565b6101dc613b45565b6101dc614173565b6101e661488f565b61029a7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b601f546103049060ff1681565b6101dc6148ef565b6101dc614ad9565b60258054307fffffffffffffffffffffffff000000000000000000000000000000000000000091821617909155602680546112349083161790556027805461567892168217905560405181906103dd90618dd7565b6001600160a01b03928316815291166020820152604001604051809103906000f080158015610410573d6000803e3d6000fd5b50602480547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039283169081178255604080518082018252600e81527f4761746577617945564d2e736f6c000000000000000000000000000000000000602082015260275460255492519086169481019490945260448401929092529092166064820152610501919060840160408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fc0c53b8b00000000000000000000000000000000000000000000000000000000179052614cc6565b601f80547fffffffffffffffffffffff0000000000000000000000000000000000000000ff166101006001600160a01b0393841681029190911791829055602080549190920483167fffffffffffffffffffffffff0000000000000000000000000000000000000000909116811790915560275460255460405192939182169291169061058d90618de4565b6001600160a01b03938416815291831660208301529091166040820152606001604051809103906000f0801580156105c9573d6000803e3d6000fd5b50602280547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03928316179055602054602454602754602554604051938516949283169391831692169061062490618df1565b6001600160a01b039485168152928416602084015290831660408301529091166060820152608001604051809103906000f080158015610668573d6000803e3d6000fd5b50602380547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392831617905560275460405163ca669fa760e01b815291166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156106ed57600080fd5b505af1158015610701573d6000803e3d6000fd5b5050602480546027546023546040517f15d57fd40000000000000000000000000000000000000000000000000000000081526001600160a01b039283166004820152908216938101939093521692506315d57fd49150604401600060405180830381600087803b15801561077457600080fd5b505af1158015610788573d6000803e3d6000fd5b5050505060405161079890618dfe565b604051809103906000f0801580156107b4573d6000803e3d6000fd5b50602180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039283161790556027546040517fc88a5e6d00000000000000000000000000000000000000000000000000000000815291166004820152670de0b6b3a76400006024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c88a5e6d90604401600060405180830381600087803b15801561086057600080fd5b505af1158015610874573d6000803e3d6000fd5b50506025546040517f06447d560000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506306447d569150602401600060405180830381600087803b1580156108ea57600080fd5b505af11580156108fe573d6000803e3d6000fd5b50506020546022546040517fae7a3a6f0000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201529116925063ae7a3a6f9150602401600060405180830381600087803b15801561096457600080fd5b505af1158015610978573d6000803e3d6000fd5b50506020546023546040517f10188aef0000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152911692506310188aef9150602401600060405180830381600087803b1580156109de57600080fd5b505af11580156109f2573d6000803e3d6000fd5b505050507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b03166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610a5457600080fd5b505af1158015610a68573d6000803e3d6000fd5b50505050565b60606016805480602002602001604051908101604052809291908181526020018280548015610ac657602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610aa8575b5050505050905090565b6040517f68656c6c6f0000000000000000000000000000000000000000000000000000006020820152620186a09060009060250160408051808303601f190181529082905260275463ca669fa760e01b83526001600160a01b031660048301529150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015610b6b57600080fd5b505af1158015610b7f573d6000803e3d6000fd5b50506023546040517f6f8b44b0000000000000000000000000000000000000000000000000000000008152600481018690526001600160a01b039091169250636f8b44b09150602401600060405180830381600087803b158015610be257600080fd5b505af1158015610bf6573d6000803e3d6000fd5b505060275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b158015610c5357600080fd5b505af1158015610c67573d6000803e3d6000fd5b50506040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fc30436e9000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b158015610cf057600080fd5b505af1158015610d04573d6000803e3d6000fd5b50506023546021546001600160a01b0391821693506302d5c899925016610d2c8560016192a1565b846040518463ffffffff1660e01b8152600401610d4b939291906192b4565b600060405180830381600087803b158015610d6557600080fd5b505af1158015610d79573d6000803e3d6000fd5b505050505050565b6060601e805480602002602001604051908101604052809291908181526020016000905b82821015610eba57600084815260208082206040805180820182526002870290920180546001600160a01b03168352600181018054835181870281018701909452808452939591948681019491929084015b82821015610ea3578382906000526020600020018054610e16906192ed565b80601f0160208091040260200160405190810160405280929190818152602001828054610e42906192ed565b8015610e8f5780601f10610e6457610100808354040283529160200191610e8f565b820191906000526020600020905b815481529060010190602001808311610e7257829003601f168201915b505050505081526020019060010190610df7565b505050508152505081526020019060010190610da5565b50505050905090565b60248054602654604051620186a09381018490526001600160a01b03928316604482015291166064820152600090819060840160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f357fc5a2000000000000000000000000000000000000000000000000000000001790526024805460265492516370a0823160e01b81526001600160a01b0393841660048201529394506000939216916370a082319101602060405180830381865afa158015610f9e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fc2919061933a565b9050610fcf816000614ce5565b602480546023546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa15801561101f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611043919061933a565b9050611050816000614ce5565b6020546040516001600160a01b039091166024820152604481018690526064810185905260009060840160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f1e458bee0000000000000000000000000000000000000000000000000000000017905260245490517ff30c7ba3000000000000000000000000000000000000000000000000000000008152919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f30c7ba391611137916001600160a01b0391909116906000908690600401619353565b600060405180830381600087803b15801561115157600080fd5b505af1158015611165573d6000803e3d6000fd5b50506021546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b1580156111f757600080fd5b505af115801561120b573d6000803e3d6000fd5b505060208054602454602654604080516001600160a01b0394851681529485018d905291831684830152919091166060830152517f2b58128f24a9f59127cc5b5430d70542b22220f2d9adaa86e442b816ab98af609350908190036080019150a16023546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b1580156112fa57600080fd5b505af115801561130e573d6000803e3d6000fd5b50506021546040516001600160a01b0390911692507f7772f56296d3a5202974a45c61c9188d844ab4d6eeb18c851e4b8d5384ca6ced9150611353908990889061937b565b60405180910390a260275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156113b457600080fd5b505af11580156113c8573d6000803e3d6000fd5b50506023546021546040517f5e3e9fef0000000000000000000000000000000000000000000000000000000081526001600160a01b039283169450635e3e9fef935061142092909116908a9089908b90600401619394565b600060405180830381600087803b15801561143a57600080fd5b505af115801561144e573d6000803e3d6000fd5b5050602480546026546040516370a0823160e01b81526001600160a01b03918216600482015260009550911692506370a082319101602060405180830381865afa1580156114a0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114c4919061933a565b90506114d08188614ce5565b602480546023546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa158015611520573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611544919061933a565b9050611551816000614ce5565b602480546020546021546040517fdd62ed3e0000000000000000000000000000000000000000000000000000000081526001600160a01b0392831660048201529082169381019390935260009291169063dd62ed3e90604401602060405180830381865afa1580156115c7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115eb919061933a565b90506115f8816000614ce5565b602480546020546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa158015611648573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061166c919061933a565b9050611679816000614ce5565b50505050505050505050565b60606018805480602002602001604051908101604052809291908181526020018280548015610ac6576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311610aa8575050505050905090565b60606017805480602002602001604051908101604052809291908181526020018280548015610ac6576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311610aa8575050505050905090565b604080516004808252602480830184526020830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f6ed70169000000000000000000000000000000000000000000000000000000001790525460265493516370a0823160e01b8152620186a0946000949385936001600160a01b03908116936370a08231936117e693921691016001600160a01b0391909116815260200190565b602060405180830381865afa158015611803573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611827919061933a565b9050611834816000614ce5565b602480546023546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa158015611884573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118a8919061933a565b90506118b5816000614ce5565b6020546040516001600160a01b039091166024820152604481018690526064810185905260009060840160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f1e458bee0000000000000000000000000000000000000000000000000000000017905260245490517ff30c7ba3000000000000000000000000000000000000000000000000000000008152919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f30c7ba39161199c916001600160a01b0391909116906000908690600401619353565b600060405180830381600087803b1580156119b657600080fd5b505af11580156119ca573d6000803e3d6000fd5b50506021546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b158015611a5c57600080fd5b505af1158015611a70573d6000803e3d6000fd5b5050602080546040516001600160a01b0390911681527fbcaadb46b82a48af60b608f58959ae6b8310d1b0a0d094c2e9ec3208ed39f2a0935001905060405180910390a16023546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b158015611b4257600080fd5b505af1158015611b56573d6000803e3d6000fd5b50506021546040516001600160a01b0390911692507f7772f56296d3a5202974a45c61c9188d844ab4d6eeb18c851e4b8d5384ca6ced9150611b9b908990889061937b565b60405180910390a260275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015611bfc57600080fd5b505af1158015611c10573d6000803e3d6000fd5b50506023546021546040517f5e3e9fef0000000000000000000000000000000000000000000000000000000081526001600160a01b039283169450635e3e9fef9350611c6892909116908a9089908b90600401619394565b600060405180830381600087803b158015611c8257600080fd5b505af1158015611c96573d6000803e3d6000fd5b5050602480546026546040516370a0823160e01b81526001600160a01b03918216600482015260009550911692506370a082319101602060405180830381865afa158015611ce8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d0c919061933a565b90506114d0816000614ce5565b6060601b805480602002602001604051908101604052809291908181526020016000905b82821015610eba5783829060005260206000209060020201604051806040016040529081600082018054611d70906192ed565b80601f0160208091040260200160405190810160405280929190818152602001828054611d9c906192ed565b8015611de95780601f10611dbe57610100808354040283529160200191611de9565b820191906000526020600020905b815481529060010190602001808311611dcc57829003601f168201915b5050505050815260200160018201805480602002602001604051908101604052809291908181526020018280548015611e8357602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019060040190602082600301049283019260010382029150808411611e305790505b50505050508152505081526020019060010190611d3d565b60275460405163ca669fa760e01b81526001600160a01b039091166004820152620186a090737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015611ef957600080fd5b505af1158015611f0d573d6000803e3d6000fd5b50506023546040517f6f8b44b0000000000000000000000000000000000000000000000000000000008152600481018590526001600160a01b039091169250636f8b44b09150602401600060405180830381600087803b158015611f7057600080fd5b505af1158015611f84573d6000803e3d6000fd5b505060275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b158015611fe157600080fd5b505af1158015611ff5573d6000803e3d6000fd5b50506040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fc30436e9000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b15801561207e57600080fd5b505af1158015612092573d6000803e3d6000fd5b50506023546021546001600160a01b03918216935063106e62909250166120ba8460016192a1565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b039092166004830152602482015260006044820152606401600060405180830381600087803b15801561211f57600080fd5b505af1158015612133573d6000803e3d6000fd5b5050505050565b6040517f68656c6c6f0000000000000000000000000000000000000000000000000000006020820152620186a090600090819060250160408051808303601f190181529082905260255463ca669fa760e01b83526001600160a01b031660048301529150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156121d757600080fd5b505af11580156121eb573d6000803e3d6000fd5b5050602554604080516001600160a01b0390921660248301527f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e460448084019190915281518084039091018152606490920181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb392506122d691906004016193cd565b600060405180830381600087803b1580156122f057600080fd5b505af1158015612304573d6000803e3d6000fd5b50506023546021546040517f02d5c8990000000000000000000000000000000000000000000000000000000081526001600160a01b0392831694506302d5c899935061235c9290911690879086908890600401619394565b600060405180830381600087803b15801561237657600080fd5b505af115801561238a573d6000803e3d6000fd5b50505050505050565b6060601a805480602002602001604051908101604052809291908181526020016000905b82821015610eba5783829060005260206000200180546123d6906192ed565b80601f0160208091040260200160405190810160405280929190818152602001828054612402906192ed565b801561244f5780601f106124245761010080835404028352916020019161244f565b820191906000526020600020905b81548152906001019060200180831161243257829003601f168201915b5050505050815260200190600101906123b7565b6060601d805480602002602001604051908101604052809291908181526020016000905b82821015610eba5760008481526020908190206040805180820182526002860290920180546001600160a01b0316835260018101805483518187028101870190945280845293949193858301939283018282801561254657602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190600401906020826003010492830192600103820291508084116124f35790505b50505050508152505081526020019060010190612487565b6040517f68656c6c6f0000000000000000000000000000000000000000000000000000006020820152620186a09060009060250160408051808303601f190181529082905260275463ca669fa760e01b83526001600160a01b031660048301529150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156125f957600080fd5b505af115801561260d573d6000803e3d6000fd5b50506023546040517f6f8b44b0000000000000000000000000000000000000000000000000000000008152600481018690526001600160a01b039091169250636f8b44b09150602401600060405180830381600087803b15801561267057600080fd5b505af1158015612684573d6000803e3d6000fd5b505060275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b1580156126e157600080fd5b505af11580156126f5573d6000803e3d6000fd5b50506040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fc30436e9000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b15801561277e57600080fd5b505af1158015612792573d6000803e3d6000fd5b50506023546021546001600160a01b039182169350635e3e9fef925016610d2c8560016192a1565b6060601c805480602002602001604051908101604052809291908181526020016000905b82821015610eba5760008481526020908190206040805180820182526002860290920180546001600160a01b0316835260018101805483518187028101870190945280845293949193858301939283018282801561289d57602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168152602001906004019060208260030104928301926001038202915080841161284a5790505b505050505081525050815260200190600101906127de565b60606019805480602002602001604051908101604052809291908181526020016000905b82821015610eba5783829060005260206000200180546128f8906192ed565b80601f0160208091040260200160405190810160405280929190818152602001828054612924906192ed565b80156129715780601f1061294657610100808354040283529160200191612971565b820191906000526020600020905b81548152906001019060200180831161295457829003601f168201915b5050505050815260200190600101906128d9565b60085460009060ff161561299d575060085460ff1690565b6040517f667f9d70000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d600482018190527f6661696c65640000000000000000000000000000000000000000000000000000602483015260009163667f9d7090604401602060405180830381865afa158015612a2e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a52919061933a565b1415905090565b60248054602654604051620186a09381018490526001600160a01b03928316604482015291166064820152600090819060840160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f357fc5a200000000000000000000000000000000000000000000000000000000179052602554905163ca669fa760e01b81526001600160a01b039091166004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015612b3f57600080fd5b505af1158015612b53573d6000803e3d6000fd5b5050602554604080516001600160a01b0390921660248301527f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e460448084019190915281518084039091018152606490920181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb39250612c3e91906004016193cd565b600060405180830381600087803b158015612c5857600080fd5b505af1158015612c6c573d6000803e3d6000fd5b50506023546021546040517f5e3e9fef0000000000000000000000000000000000000000000000000000000081526001600160a01b039283169450635e3e9fef935061235c9290911690879086908890600401619394565b60275460405163ca669fa760e01b81526001600160a01b039091166004820152620186a090600090737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015612d2557600080fd5b505af1158015612d39573d6000803e3d6000fd5b5050602754604080516001600160a01b0390921660248301527f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a60448084019190915281518084039091018152606490920181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb39250612e2491906004016193cd565b600060405180830381600087803b158015612e3e57600080fd5b505af1158015612e52573d6000803e3d6000fd5b50505050602360009054906101000a90046001600160a01b03166001600160a01b0316638456cb596040518163ffffffff1660e01b8152600401600060405180830381600087803b158015612ea657600080fd5b505af1158015612eba573d6000803e3d6000fd5b505060275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b158015612f1757600080fd5b505af1158015612f2b573d6000803e3d6000fd5b5050602754604080516001600160a01b0390921660248301527f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a60448084019190915281518084039091018152606490920181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb3925061301691906004016193cd565b600060405180830381600087803b15801561303057600080fd5b505af1158015613044573d6000803e3d6000fd5b50505050602360009054906101000a90046001600160a01b03166001600160a01b0316633f4ba83a6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561309857600080fd5b505af11580156130ac573d6000803e3d6000fd5b505060255460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b15801561310957600080fd5b505af115801561311d573d6000803e3d6000fd5b50505050602360009054906101000a90046001600160a01b03166001600160a01b0316638456cb596040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561317157600080fd5b505af1158015613185573d6000803e3d6000fd5b50506040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fd93c0665000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b15801561320e57600080fd5b505af1158015613222573d6000803e3d6000fd5b505060275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b15801561327f57600080fd5b505af1158015613293573d6000803e3d6000fd5b50506023546026546040517f106e62900000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260248101879052604481018690529116925063106e62909150606401600060405180830381600087803b15801561330757600080fd5b505af115801561331b573d6000803e3d6000fd5b505060255460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b15801561337857600080fd5b505af115801561338c573d6000803e3d6000fd5b50505050602360009054906101000a90046001600160a01b03166001600160a01b0316633f4ba83a6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156133e057600080fd5b505af11580156133f4573d6000803e3d6000fd5b5050602480546026546040516370a0823160e01b81526001600160a01b03918216600482015260009550911692506370a082319101602060405180830381865afa158015613446573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061346a919061933a565b9050613477816000614ce5565b6026546040516001600160a01b039091166024820152604481018490526064810183905260009060840160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f1e458bee0000000000000000000000000000000000000000000000000000000017905260245490517ff30c7ba3000000000000000000000000000000000000000000000000000000008152919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f30c7ba39161355e916001600160a01b0391909116906000908690600401619353565b600060405180830381600087803b15801561357857600080fd5b505af115801561358c573d6000803e3d6000fd5b50506023546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b15801561361e57600080fd5b505af1158015613632573d6000803e3d6000fd5b50506026546040518781526001600160a01b0390911692507f884edad9ce6fa2440d8a54cc123490eb96d2768479d49ff9c7366125a9424364915060200160405180910390a260275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156136d157600080fd5b505af11580156136e5573d6000803e3d6000fd5b50506023546026546040517f106e62900000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260248101899052604481018890529116925063106e629091506064015b600060405180830381600087803b15801561375a57600080fd5b505af115801561376e573d6000803e3d6000fd5b5050602480546026546040516370a0823160e01b81526001600160a01b03918216600482015260009550911692506370a082319101602060405180830381865afa1580156137c0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137e4919061933a565b90506121338186614ce5565b602480546026546040516370a0823160e01b81526001600160a01b039182166004820152620186a09360009392909216916370a082319101602060405180830381865afa158015613845573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613869919061933a565b9050613876816000614ce5565b6026546040516001600160a01b0390911660248201526044810183905260006064820181905290819060840160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f1e458bee0000000000000000000000000000000000000000000000000000000017905260245490517ff30c7ba3000000000000000000000000000000000000000000000000000000008152919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f30c7ba39161395f916001600160a01b0391909116906000908690600401619353565b600060405180830381600087803b15801561397957600080fd5b505af115801561398d573d6000803e3d6000fd5b50506023546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b158015613a1f57600080fd5b505af1158015613a33573d6000803e3d6000fd5b50506026546040518781526001600160a01b0390911692507f884edad9ce6fa2440d8a54cc123490eb96d2768479d49ff9c7366125a9424364915060200160405180910390a260275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015613ad257600080fd5b505af1158015613ae6573d6000803e3d6000fd5b50506023546026546040517f106e62900000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260248101899052604481018790529116925063106e62909150606401613740565b60248054602654604051620186a09381018490526001600160a01b03928316604482015291166064820152600090819060840160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fc5131691000000000000000000000000000000000000000000000000000000001790526024805460265492516370a0823160e01b81526001600160a01b0393841660048201529394506000939216916370a082319101602060405180830381865afa158015613c20573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613c44919061933a565b9050613c51816000614ce5565b602480546023546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa158015613ca1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613cc5919061933a565b9050613cd2816000614ce5565b6020546040516001600160a01b039091166024820152604481018690526064810185905260009060840160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f1e458bee0000000000000000000000000000000000000000000000000000000017905260245490517ff30c7ba3000000000000000000000000000000000000000000000000000000008152919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f30c7ba391613db9916001600160a01b0391909116906000908690600401619353565b600060405180830381600087803b158015613dd357600080fd5b505af1158015613de7573d6000803e3d6000fd5b50506021546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b158015613e7957600080fd5b505af1158015613e8d573d6000803e3d6000fd5b50506020547f2b58128f24a9f59127cc5b5430d70542b22220f2d9adaa86e442b816ab98af6092506001600160a01b03169050613ecb6002896193e0565b602454602654604080516001600160a01b03958616815260208101949094529184168383015292909216606082015290519081900360800190a16023546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b158015613f9357600080fd5b505af1158015613fa7573d6000803e3d6000fd5b50506021546040516001600160a01b0390911692507f7772f56296d3a5202974a45c61c9188d844ab4d6eeb18c851e4b8d5384ca6ced9150613fec908990889061937b565b60405180910390a260275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561404d57600080fd5b505af1158015614061573d6000803e3d6000fd5b50506023546021546040517f5e3e9fef0000000000000000000000000000000000000000000000000000000081526001600160a01b039283169450635e3e9fef93506140b992909116908a9089908b90600401619394565b600060405180830381600087803b1580156140d357600080fd5b505af11580156140e7573d6000803e3d6000fd5b5050602480546026546040516370a0823160e01b81526001600160a01b03918216600482015260009550911692506370a082319101602060405180830381865afa158015614139573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061415d919061933a565b90506114d08161416e60028a6193e0565b614ce5565b6040517f68656c6c6f0000000000000000000000000000000000000000000000000000006020820152620186a090600090819060250160408051808303601f1901815290829052602480546021546370a0823160e01b85526001600160a01b0390811660048601529294506000939216916370a082319101602060405180830381865afa158015614208573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061422c919061933a565b9050614239816000614ce5565b602480546023546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa158015614289573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906142ad919061933a565b6020546040516001600160a01b039091166024820152604481018790526064810186905290915060009060840160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f1e458bee0000000000000000000000000000000000000000000000000000000017905260245490517ff30c7ba3000000000000000000000000000000000000000000000000000000008152919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f30c7ba391614397916001600160a01b0391909116906000908690600401619353565b600060405180830381600087803b1580156143b157600080fd5b505af11580156143c5573d6000803e3d6000fd5b50506021546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b15801561445757600080fd5b505af115801561446b573d6000803e3d6000fd5b50506020546040517f0d3f65f00e631663aa85c96330b5c7a83bb29af3630c0063776f985edc3037aa93506144ae92506001600160a01b0390911690879061941b565b60405180910390a16020546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b15801561454457600080fd5b505af1158015614558573d6000803e3d6000fd5b50506021546024546040516001600160a01b039283169450911691507f723fc7be2448075379e4fdf1e6bf5fead954d2668d2da05dcb44ccfec4beeda7906145a3908a90899061937b565b60405180910390a36023546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b15801561463957600080fd5b505af115801561464d573d6000803e3d6000fd5b50506021546040516001600160a01b0390911692507fba96f26bdda53eb8c8ba39045dfb4ff39753fbc7a6edcf250a88e75e78d102fe9150614692908990889061937b565b60405180910390a260275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156146f357600080fd5b505af1158015614707573d6000803e3d6000fd5b50506023546021546040517f02d5c8990000000000000000000000000000000000000000000000000000000081526001600160a01b0392831694506302d5c899935061475f92909116908a9089908b90600401619394565b600060405180830381600087803b15801561477957600080fd5b505af115801561478d573d6000803e3d6000fd5b5050602480546021546040516370a0823160e01b81526001600160a01b03918216600482015260009550911692506370a082319101602060405180830381865afa1580156147df573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614803919061933a565b905061480f8188614ce5565b602480546023546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa15801561485f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614883919061933a565b90506115518185614ce5565b60606015805480602002602001604051908101604052809291908181526020018280548015610ac6576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311610aa8575050505050905090565b60255460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561494857600080fd5b505af115801561495c573d6000803e3d6000fd5b5050602554604080516001600160a01b0390921660248301527f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb60448084019190915281518084039091018152606490920181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb39250614a4791906004016193cd565b600060405180830381600087803b158015614a6157600080fd5b505af1158015614a75573d6000803e3d6000fd5b50506023546040517f6f8b44b000000000000000000000000000000000000000000000000000000000815261271060048201526001600160a01b039091169250636f8b44b09150602401600060405180830381600087803b158015610a5457600080fd5b60255460405163ca669fa760e01b81526001600160a01b039091166004820152620186a090600090737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015614b3a57600080fd5b505af1158015614b4e573d6000803e3d6000fd5b5050602554604080516001600160a01b0390921660248301527f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e460448084019190915281518084039091018152606490920181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb39250614c3991906004016193cd565b600060405180830381600087803b158015614c5357600080fd5b505af1158015614c67573d6000803e3d6000fd5b50506023546026546040517f106e62900000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260248101879052604481018690529116925063106e62909150606401610d4b565b6000614cd0618e0b565b614cdb848483614d64565b9150505b92915050565b6040517f98296c540000000000000000000000000000000000000000000000000000000081526004810183905260248101829052737109709ecfa91a80626ff3989d68f67f5b1dd12d906398296c549060440160006040518083038186803b158015614d5057600080fd5b505afa158015610d79573d6000803e3d6000fd5b600080614d718584614ddf565b9050614dd46040518060400160405280601d81526020017f4552433139363750726f78792e736f6c3a4552433139363750726f78790000008152508286604051602001614dbf92919061941b565b60405160208183030381529060405285614deb565b9150505b9392505050565b6000614dd88383614e19565b60c08101515160009015614e0f57614e0884848460c00151614e34565b9050614dd8565b614e088484614fda565b6000614e2583836150c5565b614dd883836020015184614deb565b600080614e3f6150d5565b90506000614e4d86836151a8565b90506000614e64826060015183602001518561564e565b90506000614e7483838989615860565b90506000614e81826166dd565b602081015181519192509060030b15614ef457898260400151604051602001614eab92919061943d565b60408051601f19818403018152908290527f08c379a0000000000000000000000000000000000000000000000000000000008252614eeb916004016193cd565b60405180910390fd5b6000614f376040518060400160405280601581526020017f4465706c6f79656420746f20616464726573733a2000000000000000000000008152508360016168ac565b6040517fc6ce059d000000000000000000000000000000000000000000000000000000008152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c6ce059d90614f8a9084906004016193cd565b602060405180830381865afa158015614fa7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614fcb91906194be565b9b9a5050505050505050505050565b6040517f8d1cc9250000000000000000000000000000000000000000000000000000000081526000908190737109709ecfa91a80626ff3989d68f67f5b1dd12d90638d1cc9259061502f9087906004016193cd565b600060405180830381865afa15801561504c573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261507491908101906195cf565b905060006150a2828560405160200161508e929190619604565b604051602081830303815290604052616aac565b90506001600160a01b038116614cdb578484604051602001614eab929190619633565b6150d182826000616abf565b5050565b604080518082018252600381527f6f75740000000000000000000000000000000000000000000000000000000000602082015290517fd145736c000000000000000000000000000000000000000000000000000000008152606091737109709ecfa91a80626ff3989d68f67f5b1dd12d91829063d145736c9061515c9084906004016196de565b600060405180830381865afa158015615179573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526151a19190810190619725565b9250505090565b6151da6040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b6000737109709ecfa91a80626ff3989d68f67f5b1dd12d90506152256040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b61522e85616bc2565b6020820152600061523e86616fa7565b90506000836001600160a01b031663d930a0e66040518163ffffffff1660e01b8152600401600060405180830381865afa158015615280573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526152a89190810190619725565b868385602001516040516020016152c2949392919061976e565b60408051601f19818403018152908290527f60f9bb1100000000000000000000000000000000000000000000000000000000825291506000906001600160a01b038616906360f9bb119061531a9085906004016193cd565b600060405180830381865afa158015615337573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261535f9190810190619725565b6040517fdb4235f60000000000000000000000000000000000000000000000000000000081529091506001600160a01b0386169063db4235f6906153a7908490600401619872565b602060405180830381865afa1580156153c4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906153e891906198c4565b6153fd5781604051602001614eab91906198e6565b6040517f49c4fac80000000000000000000000000000000000000000000000000000000081526001600160a01b038616906349c4fac890615442908490600401619978565b600060405180830381865afa15801561545f573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526154879190810190619725565b84526040517fdb4235f60000000000000000000000000000000000000000000000000000000081526001600160a01b0386169063db4235f6906154ce9084906004016199ca565b602060405180830381865afa1580156154eb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061550f91906198c4565b156155a4576040517f49c4fac80000000000000000000000000000000000000000000000000000000081526001600160a01b038616906349c4fac8906155599084906004016199ca565b600060405180830381865afa158015615576573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261559e9190810190619725565b60408501525b846001600160a01b03166349c4fac88286600001516040516020016155c99190619a1c565b6040516020818303038152906040526040518363ffffffff1660e01b81526004016155f5929190619a88565b600060405180830381865afa158015615612573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261563a9190810190619725565b606085015250608083015250949350505050565b60408051600480825260a0820190925260609160009190816020015b606081526020019060019003908161566a5790505090506040518060400160405280600481526020017f6772657000000000000000000000000000000000000000000000000000000000815250816000815181106156ca576156ca619aad565b60200260200101819052506040518060400160405280600381526020017f2d726c00000000000000000000000000000000000000000000000000000000008152508160018151811061571e5761571e619aad565b60200260200101819052508460405160200161573a9190619adc565b6040516020818303038152906040528160028151811061575c5761575c619aad565b6020026020010181905250826040516020016157789190619b48565b6040516020818303038152906040528160038151811061579a5761579a619aad565b602002602001018190525060006157b0826166dd565b602080820151604080518082018252600581527f2e6a736f6e0000000000000000000000000000000000000000000000000000008185019081528251808401845260008082529086015282518084019093529051825292810192909252919250615841906040805180820182526000808252602091820152815180830190925284518252808501908201529061722a565b6158565785604051602001614eab9190619b89565b9695505050505050565b60a0810151604080518082018252600080825260209182015281518083019092528251808352928101910152606090737109709ecfa91a80626ff3989d68f67f5b1dd12d90156158b0565b511590565b615a245782602001511561596c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605860248201527f54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f742060448201527f62652075736564207768656e207468652060736b6970566572696679536f757260648201527f6365436f646560206f7074696f6e206973206074727565600000000000000000608482015260a401614eeb565b8260c0015115615a24576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605360248201527f54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f742060448201527f62652075736564207768656e207468652060736b69704c6963656e736554797060648201527f6560206f7074696f6e2069732060747275656000000000000000000000000000608482015260a401614eeb565b6040805160ff8082526120008201909252600091816020015b6060815260200190600190039081615a3d57905050905060006040518060400160405280600381526020017f6e70780000000000000000000000000000000000000000000000000000000000815250828280615a9890619c1a565b935060ff1681518110615aad57615aad619aad565b60200260200101819052506040518060400160405280600d81526020017f302e302e312d616c7068612e3700000000000000000000000000000000000000815250604051602001615afe9190619c39565b604051602081830303815290604052828280615b1990619c1a565b935060ff1681518110615b2e57615b2e619aad565b60200260200101819052506040518060400160405280600681526020017f6465706c6f790000000000000000000000000000000000000000000000000000815250828280615b7b90619c1a565b935060ff1681518110615b9057615b90619aad565b60200260200101819052506040518060400160405280600e81526020017f2d2d636f6e74726163744e616d65000000000000000000000000000000000000815250828280615bdd90619c1a565b935060ff1681518110615bf257615bf2619aad565b60200260200101819052508760200151828280615c0e90619c1a565b935060ff1681518110615c2357615c23619aad565b60200260200101819052506040518060400160405280600e81526020017f2d2d636f6e747261637450617468000000000000000000000000000000000000815250828280615c7090619c1a565b935060ff1681518110615c8557615c85619aad565b602090810291909101015287518282615c9d81619c1a565b935060ff1681518110615cb257615cb2619aad565b60200260200101819052506040518060400160405280600981526020017f2d2d636861696e49640000000000000000000000000000000000000000000000815250828280615cff90619c1a565b935060ff1681518110615d1457615d14619aad565b6020026020010181905250615d284661728b565b8282615d3381619c1a565b935060ff1681518110615d4857615d48619aad565b60200260200101819052506040518060400160405280600f81526020017f2d2d6275696c64496e666f46696c650000000000000000000000000000000000815250828280615d9590619c1a565b935060ff1681518110615daa57615daa619aad565b602002602001018190525086828280615dc290619c1a565b935060ff1681518110615dd757615dd7619aad565b6020908102919091010152855115615efe5760408051808201909152601581527f2d2d636f6e7374727563746f7242797465636f6465000000000000000000000060208201528282615e2881619c1a565b935060ff1681518110615e3d57615e3d619aad565b60209081029190910101526040517f71aad10d0000000000000000000000000000000000000000000000000000000081526001600160a01b038416906371aad10d90615e8d9089906004016193cd565b600060405180830381865afa158015615eaa573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052615ed29190810190619725565b8282615edd81619c1a565b935060ff1681518110615ef257615ef2619aad565b60200260200101819052505b846020015115615fce5760408051808201909152601281527f2d2d766572696679536f75726365436f6465000000000000000000000000000060208201528282615f4781619c1a565b935060ff1681518110615f5c57615f5c619aad565b60200260200101819052506040518060400160405280600581526020017f66616c7365000000000000000000000000000000000000000000000000000000815250828280615fa990619c1a565b935060ff1681518110615fbe57615fbe619aad565b6020026020010181905250616195565b6160066158ab8660a0015160408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6160995760408051808201909152600d81527f2d2d6c6963656e736554797065000000000000000000000000000000000000006020820152828261604981619c1a565b935060ff168151811061605e5761605e619aad565b60200260200101819052508460a0015160405160200161607e9190619adc565b604051602081830303815290604052828280615fa990619c1a565b8460c001511580156160dc5750604080890151815180830183526000808252602091820152825180840190935281518352908101908201526160da90511590565b155b156161955760408051808201909152600d81527f2d2d6c6963656e736554797065000000000000000000000000000000000000006020820152828261612081619c1a565b935060ff168151811061613557616135619aad565b60200260200101819052506161498861732b565b6040516020016161599190619adc565b60405160208183030381529060405282828061617490619c1a565b935060ff168151811061618957616189619aad565b60200260200101819052505b604080860151815180830183526000808252602091820152825180840190935281518352908101908201526161c990511590565b61625e5760408051808201909152600b81527f2d2d72656c6179657249640000000000000000000000000000000000000000006020820152828261620c81619c1a565b935060ff168151811061622157616221619aad565b6020026020010181905250846040015182828061623d90619c1a565b935060ff168151811061625257616252619aad565b60200260200101819052505b60608501511561637f5760408051808201909152600681527f2d2d73616c740000000000000000000000000000000000000000000000000000602082015282826162a781619c1a565b935060ff16815181106162bc576162bc619aad565b602090810291909101015260608501516040517fb11a19e800000000000000000000000000000000000000000000000000000000815260048101919091526001600160a01b0384169063b11a19e890602401600060405180830381865afa15801561632b573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526163539190810190619725565b828261635e81619c1a565b935060ff168151811061637357616373619aad565b60200260200101819052505b60e085015151156164265760408051808201909152600a81527f2d2d6761734c696d697400000000000000000000000000000000000000000000602082015282826163c981619c1a565b935060ff16815181106163de576163de619aad565b60200260200101819052506163fa8560e001516000015161728b565b828261640581619c1a565b935060ff168151811061641a5761641a619aad565b60200260200101819052505b60e085015160200151156164d05760408051808201909152600a81527f2d2d6761735072696365000000000000000000000000000000000000000000006020820152828261647381619c1a565b935060ff168151811061648857616488619aad565b60200260200101819052506164a48560e001516020015161728b565b82826164af81619c1a565b935060ff16815181106164c4576164c4619aad565b60200260200101819052505b60e0850151604001511561657a5760408051808201909152600e81527f2d2d6d61784665655065724761730000000000000000000000000000000000006020820152828261651d81619c1a565b935060ff168151811061653257616532619aad565b602002602001018190525061654e8560e001516040015161728b565b828261655981619c1a565b935060ff168151811061656e5761656e619aad565b60200260200101819052505b60e085015160600151156166245760408051808201909152601681527f2d2d6d61785072696f7269747946656550657247617300000000000000000000602082015282826165c781619c1a565b935060ff16815181106165dc576165dc619aad565b60200260200101819052506165f88560e001516060015161728b565b828261660381619c1a565b935060ff168151811061661857616618619aad565b60200260200101819052505b60008160ff1667ffffffffffffffff811115616642576166426194e7565b60405190808252806020026020018201604052801561667557816020015b60608152602001906001900390816166605790505b50905060005b8260ff168160ff1610156166ce57838160ff168151811061669e5761669e619aad565b6020026020010151828260ff16815181106166bb576166bb619aad565b602090810291909101015260010161667b565b5093505050505b949350505050565b6167046040518060600160405280600060030b815260200160608152602001606081525090565b60408051808201825260048082527f6261736800000000000000000000000000000000000000000000000000000000602083015291517fd145736c000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d92600091849163d145736c9161678a91869101619ca4565b600060405180830381865afa1580156167a7573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526167cf9190810190619725565b905060006167dd8683617e1a565b90506000846001600160a01b031663f45c1ce7836040518263ffffffff1660e01b815260040161680d9190619164565b6000604051808303816000875af115801561682c573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526168549190810190619ceb565b805190915060030b1580159061686d5750602081015151155b801561687c5750604081015151155b15615856578160008151811061689457616894619aad565b6020026020010151604051602001614eab9190619da1565b606060006168e18560408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6040805180820182526000808252602091820152815180830190925286518252808701908201529091506169189082905b90617f6f565b15616a755760006169958261698f8461698961695b8a60408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6040805180820182526000808252602091820152815180830190925282518252918201519181019190915290565b90617f96565b90617ff8565b604080518082018252600181527f0a00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201529091506169f9908290617f6f565b15616a6357604080518082018252600181527f0a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616a60905b829061807d565b90505b616a6c816180a3565b92505050614dd8565b8215616a8e578484604051602001614eab929190619f8d565b5050604080516020810190915260008152614dd8565b509392505050565b6000808251602084016000f09392505050565b8160a0015115616ace57505050565b6000616adb84848461810c565b90506000616ae8826166dd565b602081015181519192509060030b158015616b845750604080518082018252600781527f535543434553530000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616b8490604080518082018252600080825260209182015281518083019092528451825280850190820152616912565b15616b9157505050505050565b60408201515115616bb1578160400151604051602001614eab919061a034565b80604051602001614eab919061a092565b60606000616bf78360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600481527f2e736f6c0000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152909150616c5c905b829061722a565b15616ccb57604080518082018252600481527f2e736f6c0000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152614dd890616cc69083906186a7565b6180a3565b604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616d2d905b8290618731565b600103616dfa57604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616d9390616a59565b50604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152614dd890616cc6905b839061807d565b604080518082018252600581527f2e6a736f6e00000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616e5990616c55565b15616f9057604080518082018252600181527f2f00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820181905284518086019095529251845283015290616ec19083906187cb565b905060008160018351616ed4919061a0fd565b81518110616ee457616ee4619aad565b60200260200101519050616f87616cc6616f5a6040518060400160405280600581526020017f2e6a736f6e00000000000000000000000000000000000000000000000000000081525060408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600080825260209182015281518083019092528551825280860190820152906186a7565b95945050505050565b82604051602001614eab919061a110565b50919050565b60606000616fdc8360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600481527f2e736f6c000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015290915061703e90616c55565b1561704c57614dd8816180a3565b604080518082018252600181527f3a00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526170ab90616d26565b60010361711557604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152614dd890616cc690616df3565b604080518082018252600581527f2e6a736f6e0000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261717490616c55565b15616f9057604080518082018252600181527f2f000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201819052845180860190955292518452830152906171dc9083906187cb565b90506001815111156172185780600282516171f7919061a0fd565b8151811061720757617207619aad565b602002602001015192505050919050565b5082604051602001614eab919061a110565b80518251600091111561723f57506000614cdf565b81518351602085015160009291617255916192a1565b61725f919061a0fd565b905082602001518103617276576001915050614cdf565b82516020840151819020912014905092915050565b6060600061729883618870565b600101905060008167ffffffffffffffff8111156172b8576172b86194e7565b6040519080825280601f01601f1916602001820160405280156172e2576020820181803683370190505b5090508181016020015b600019017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a85049450846172ec57509392505050565b604081810151815180830183526000808252602091820181905283518085018552835181529282018383015283518085018552600a81527f554e4c4943454e53454400000000000000000000000000000000000000000000818401908152855180870187528381528401929092528451808601909552518452908301526060916173b7905b8290618952565b156173f757505060408051808201909152600481527f4e6f6e65000000000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600981527f556e6c6963656e7365000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617456906173b0565b1561749657505060408051808201909152600981527f556e6c6963656e736500000000000000000000000000000000000000000000006020820152919050565b604080518082018252600381527f4d49540000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526174f5906173b0565b1561753557505060408051808201909152600381527f4d495400000000000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f47504c2d322e302d6f6e6c79000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617594906173b0565b806175f95750604080518082018252601081527f47504c2d322e302d6f722d6c6174657200000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526175f9906173b0565b1561763957505060408051808201909152600981527f474e552047504c763200000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f47504c2d332e302d6f6e6c79000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617698906173b0565b806176fd5750604080518082018252601081527f47504c2d332e302d6f722d6c6174657200000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526176fd906173b0565b1561773d57505060408051808201909152600981527f474e552047504c763300000000000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4c47504c2d322e312d6f6e6c79000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261779c906173b0565b806178015750604080518082018252601181527f4c47504c2d322e312d6f722d6c6174657200000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617801906173b0565b1561784157505060408051808201909152600c81527f474e55204c47504c76322e3100000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4c47504c2d332e302d6f6e6c7900000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526178a0906173b0565b806179055750604080518082018252601181527f4c47504c2d332e302d6f722d6c6174657200000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617905906173b0565b1561794557505060408051808201909152600a81527f474e55204c47504c7633000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f4253442d322d436c617573650000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526179a4906173b0565b156179e457505060408051808201909152600c81527f4253442d322d436c6175736500000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f4253442d332d436c61757365000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617a43906173b0565b15617a8357505060408051808201909152600c81527f4253442d332d436c6175736500000000000000000000000000000000000000006020820152919050565b604080518082018252600781527f4d504c2d322e300000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617ae2906173b0565b15617b2257505060408051808201909152600781527f4d504c2d322e30000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600781527f4f534c2d332e300000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617b81906173b0565b15617bc157505060408051808201909152600781527f4f534c2d332e30000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600a81527f4170616368652d322e300000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617c20906173b0565b15617c6057505060408051808201909152600a81527f4170616368652d322e30000000000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4147504c2d332e302d6f6e6c790000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617cbf906173b0565b80617d245750604080518082018252601181527f4147504c2d332e302d6f722d6c6174657200000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617d24906173b0565b15617d6457505060408051808201909152600a81527f474e55204147504c7633000000000000000000000000000000000000000000006020820152919050565b604080518082018252600881527f4255534c2d312e3100000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617dc3906173b0565b15617e0357505060408051808201909152600781527f42534c20312e31000000000000000000000000000000000000000000000000006020820152919050565b60408084015184519151614eab929060200161a1ee565b60608060005b8451811015617ea55781858281518110617e3c57617e3c619aad565b6020026020010151604051602001617e55929190619604565b604051602081830303815290604052915060018551617e74919061a0fd565b8114617e9d5781604051602001617e8b919061a357565b60405160208183030381529060405291505b600101617e20565b5060408051600380825260808201909252600091816020015b6060815260200190600190039081617ebe5790505090508381600081518110617ee957617ee9619aad565b60200260200101819052506040518060400160405280600281526020017f2d6300000000000000000000000000000000000000000000000000000000000081525081600181518110617f3d57617f3d619aad565b60200260200101819052508181600281518110617f5c57617f5c619aad565b6020908102919091010152949350505050565b6020808301518351835192840151600093617f8d9291849190618966565b14159392505050565b60408051808201909152600080825260208201526000617fc88460000151856020015185600001518660200151618a77565b9050836020015181617fda919061a0fd565b84518590617fe990839061a0fd565b90525060208401525090919050565b604080518082019091526000808252602082015281518351101561801d575081614cdf565b60208083015190840151600191146180445750815160208481015190840151829020919020145b80156180755782518451859061805b90839061a0fd565b90525082516020850180516180719083906192a1565b9052505b509192915050565b604080518082019091526000808252602082015261809c838383618b97565b5092915050565b60606000826000015167ffffffffffffffff8111156180c4576180c46194e7565b6040519080825280601f01601f1916602001820160405280156180ee576020820181803683370190505b509050600060208201905061809c8185602001518660000151618c42565b606060006181186150d5565b6040805160ff808252612000820190925291925060009190816020015b606081526020019060019003908161813557905050905060006040518060400160405280600381526020017f6e7078000000000000000000000000000000000000000000000000000000000081525082828061819090619c1a565b935060ff16815181106181a5576181a5619aad565b60200260200101819052506040518060400160405280600781526020017f5e312e33322e33000000000000000000000000000000000000000000000000008152506040516020016181f6919061a398565b60405160208183030381529060405282828061821190619c1a565b935060ff168151811061822657618226619aad565b60200260200101819052506040518060400160405280600881526020017f76616c696461746500000000000000000000000000000000000000000000000081525082828061827390619c1a565b935060ff168151811061828857618288619aad565b6020026020010181905250826040516020016182a49190619b48565b6040516020818303038152906040528282806182bf90619c1a565b935060ff16815181106182d4576182d4619aad565b60200260200101819052506040518060400160405280600a81526020017f2d2d636f6e74726163740000000000000000000000000000000000000000000081525082828061832190619c1a565b935060ff168151811061833657618336619aad565b602002602001018190525061834b8784618cbc565b828261835681619c1a565b935060ff168151811061836b5761836b619aad565b6020908102919091010152855151156184175760408051808201909152600b81527f2d2d7265666572656e6365000000000000000000000000000000000000000000602082015282826183bd81619c1a565b935060ff16815181106183d2576183d2619aad565b60200260200101819052506183eb866000015184618cbc565b82826183f681619c1a565b935060ff168151811061840b5761840b619aad565b60200260200101819052505b8560800151156184855760408051808201909152601881527f2d2d756e73616665536b697053746f72616765436865636b00000000000000006020820152828261846081619c1a565b935060ff168151811061847557618475619aad565b60200260200101819052506184eb565b84156184eb5760408051808201909152601281527f2d2d726571756972655265666572656e63650000000000000000000000000000602082015282826184ca81619c1a565b935060ff16815181106184df576184df619aad565b60200260200101819052505b604086015151156185875760408051808201909152600d81527f2d2d756e73616665416c6c6f77000000000000000000000000000000000000006020820152828261853581619c1a565b935060ff168151811061854a5761854a619aad565b6020026020010181905250856040015182828061856690619c1a565b935060ff168151811061857b5761857b619aad565b60200260200101819052505b8560600151156185f15760408051808201909152601481527f2d2d756e73616665416c6c6f7752656e616d6573000000000000000000000000602082015282826185d081619c1a565b935060ff16815181106185e5576185e5619aad565b60200260200101819052505b60008160ff1667ffffffffffffffff81111561860f5761860f6194e7565b60405190808252806020026020018201604052801561864257816020015b606081526020019060019003908161862d5790505b50905060005b8260ff168160ff16101561869b57838160ff168151811061866b5761866b619aad565b6020026020010151828260ff168151811061868857618688619aad565b6020908102919091010152600101618648565b50979650505050505050565b60408051808201909152600080825260208201528151835110156186cc575081614cdf565b815183516020850151600092916186e2916192a1565b6186ec919061a0fd565b6020840151909150600190821461870d575082516020840151819020908220145b80156187285783518551869061872490839061a0fd565b9052505b50929392505050565b60008082600001516187558560000151866020015186600001518760200151618a77565b61875f91906192a1565b90505b8351602085015161877391906192a1565b811161809c57816187838161a3dd565b92505082600001516187ba85602001518361879e919061a0fd565b86516187aa919061a0fd565b8386600001518760200151618a77565b6187c491906192a1565b9050618762565b606060006187d98484618731565b6187e49060016192a1565b67ffffffffffffffff8111156187fc576187fc6194e7565b60405190808252806020026020018201604052801561882f57816020015b606081526020019060019003908161881a5790505b50905060005b8151811015616aa45761884b616cc6868661807d565b82828151811061885d5761885d619aad565b6020908102919091010152600101618835565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f01000000000000000083106188b9577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef810000000083106188e5576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc10000831061890357662386f26fc10000830492506010015b6305f5e100831061891b576305f5e100830492506008015b612710831061892f57612710830492506004015b60648310618941576064830492506002015b600a8310614cdf5760010192915050565b600061895e8383618cfc565b159392505050565b600080858411618a6d5760208411618a1957600084156189b157600161898d86602061a0fd565b61899890600861a3f7565b6189a390600261a4f5565b6189ad919061a0fd565b1990505b83518116856189c089896192a1565b6189ca919061a0fd565b805190935082165b818114618a04578784116189ec57879450505050506166d5565b836189f68161a501565b9450508284511690506189d2565b618a0e87856192a1565b9450505050506166d5565b838320618a26858861a0fd565b618a3090876192a1565b91505b858210618a6b57848220808203618a5857618a4e86846192a1565b93505050506166d5565b618a6360018461a0fd565b925050618a33565b505b5092949350505050565b60008381868511618b825760208511618b315760008515618ac3576001618a9f87602061a0fd565b618aaa90600861a3f7565b618ab590600261a4f5565b618abf919061a0fd565b1990505b84518116600087618ad48b8b6192a1565b618ade919061a0fd565b855190915083165b828114618b2357818610618b0b57618afe8b8b6192a1565b96505050505050506166d5565b85618b158161a3dd565b965050838651169050618ae6565b8596505050505050506166d5565b508383206000905b618b43868961a0fd565b8211618b8057858320808203618b5f57839450505050506166d5565b618b6a6001856192a1565b9350508180618b789061a3dd565b925050618b39565b505b618b8c87876192a1565b979650505050505050565b60408051808201909152600080825260208201526000618bc98560000151866020015186600001518760200151618a77565b602080870180519186019190915251909150618be5908261a0fd565b835284516020860151618bf891906192a1565b8103618c075760008552618c39565b83518351618c1591906192a1565b85518690618c2490839061a0fd565b9052508351618c3390826192a1565b60208601525b50909392505050565b60208110618c7a5781518352618c596020846192a1565b9250618c666020836192a1565b9150618c7360208261a0fd565b9050618c42565b6000198115618ca9576001618c9083602061a0fd565b618c9c9061010061a4f5565b618ca6919061a0fd565b90505b9151835183169219169190911790915250565b60606000618cca84846151a8565b8051602080830151604051939450618ce49390910161a518565b60405160208183030381529060405291505092915050565b8151815160009190811115618d0f575081515b6020808501519084015160005b83811015618dc85782518251808214618d98576000196020871015618d7757600184618d4989602061a0fd565b618d5391906192a1565b618d5e90600861a3f7565b618d6990600261a4f5565b618d73919061a0fd565b1990505b8181168382168181039114618d95579750614cdf9650505050505050565b50505b618da36020866192a1565b9450618db06020856192a1565b93505050602081618dc191906192a1565b9050618d1c565b5084518651615856919061a570565b6112a68061a59183390190565b6117988061b83783390190565b61155a8061cfcf83390190565b610d5e8061e52983390190565b6040518060e00160405280606081526020016060815260200160608152602001600015158152602001600015158152602001600015158152602001618e4e618e53565b905290565b60405180610100016040528060001515815260200160001515815260200160608152602001600080191681526020016060815260200160608152602001600015158152602001618e4e6040518060800160405280600081526020016000815260200160008152602001600081525090565b602080825282518282018190526000918401906040840190835b81811015618f055783516001600160a01b0316835260209384019390920191600101618ede565b509095945050505050565b60005b83811015618f2b578181015183820152602001618f13565b50506000910152565b60008151808452618f4c816020860160208601618f10565b601f01601f19169290920160200192915050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b8281101561905c577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452815180516001600160a01b03168652602090810151604082880181905281519088018190529101906060600582901b88018101919088019060005b81811015619042577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa08a850301835261902c848651618f34565b6020958601959094509290920191600101618ff2565b509197505050602094850194929092019150600101618f88565b50929695505050505050565b600081518084526020840193506020830160005b828110156190bc5781517fffffffff000000000000000000000000000000000000000000000000000000001686526020958601959091019060010161907c565b5093949350505050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b8281101561905c577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc087860301845281518051604087526191326040880182618f34565b905060208201519150868103602088015261914d8183619068565b9650505060209384019391909101906001016190ee565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b8281101561905c577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08786030184526191c6858351618f34565b9450602093840193919091019060010161918c565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b8281101561905c577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc087860301845281516001600160a01b038151168652602081015190506040602087015261925c6040870182619068565b9550506020938401939190910190600101619203565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b80820180821115614cdf57614cdf619272565b6001600160a01b03841681528260208201526080604082015260006192dc6080830184618f34565b905060006060830152949350505050565b600181811c9082168061930157607f821691505b602082108103616fa1577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006020828403121561934c57600080fd5b5051919050565b6001600160a01b0384168152826020820152606060408201526000616f876060830184618f34565b8281526040602082015260006166d56040830184618f34565b6001600160a01b03851681528360208201526080604082015260006193bc6080830185618f34565b905082606083015295945050505050565b602081526000614dd86020830184618f34565b600082619416577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b6001600160a01b03831681526040602082015260006166d56040830184618f34565b7f4661696c656420746f206465706c6f7920636f6e74726163742000000000000081526000835161947581601a850160208801618f10565b7f3a20000000000000000000000000000000000000000000000000000000000000601a9184019182015283516194b281601c840160208801618f10565b01601c01949350505050565b6000602082840312156194d057600080fd5b81516001600160a01b0381168114614dd857600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040516060810167ffffffffffffffff81118282101715619539576195396194e7565b60405290565b60008067ffffffffffffffff84111561955a5761955a6194e7565b50604051601f19601f85018116603f0116810181811067ffffffffffffffff82111715619589576195896194e7565b6040528381529050808284018510156195a157600080fd5b616aa4846020830185618f10565b600082601f8301126195c057600080fd5b614dd88383516020850161953f565b6000602082840312156195e157600080fd5b815167ffffffffffffffff8111156195f857600080fd5b614cdb848285016195af565b60008351619616818460208801618f10565b83519083019061962a818360208801618f10565b01949350505050565b7f4661696c656420746f206465706c6f7920636f6e74726163742000000000000081526000835161966b81601a850160208801618f10565b7f207573696e6720636f6e7374727563746f722064617461202200000000000000601a9184019182015283516196a8816033840160208801618f10565b7f220000000000000000000000000000000000000000000000000000000000000060339290910191820152603401949350505050565b60408152600b60408201527f464f554e4452595f4f55540000000000000000000000000000000000000000006060820152608060208201526000614dd86080830184618f34565b60006020828403121561973757600080fd5b815167ffffffffffffffff81111561974e57600080fd5b8201601f8101841361975f57600080fd5b614cdb8482516020840161953f565b60008551619780818460208a01618f10565b7f2f0000000000000000000000000000000000000000000000000000000000000090830190815285516197ba816001840160208a01618f10565b7f2f000000000000000000000000000000000000000000000000000000000000006001929091019182015284516197f8816002840160208901618f10565b6001818301019150507f2f000000000000000000000000000000000000000000000000000000000000006001820152835161983a816002840160208801618f10565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600292909101918201526007019695505050505050565b6040815260006198856040830184618f34565b8281036020840152600481527f2e6173740000000000000000000000000000000000000000000000000000000060208201526040810191505092915050565b6000602082840312156198d657600080fd5b81518015158114614dd857600080fd5b7f436f756c64206e6f742066696e642041535420696e206172746966616374200081526000825161991e81601f850160208701618f10565b7f2e205365742060617374203d20747275656020696e20666f756e6472792e746f601f9390910192830152507f6d6c000000000000000000000000000000000000000000000000000000000000603f820152604101919050565b60408152600061998b6040830184618f34565b8281036020840152601181527f2e6173742e6162736f6c7574655061746800000000000000000000000000000060208201526040810191505092915050565b6040815260006199dd6040830184618f34565b8281036020840152600c81527f2e6173742e6c6963656e7365000000000000000000000000000000000000000060208201526040810191505092915050565b7f2e6d657461646174612e736f75726365732e5b27000000000000000000000000815260008251619a54816014850160208701618f10565b7f275d2e6b656363616b32353600000000000000000000000000000000000000006014939091019283015250602001919050565b604081526000619a9b6040830185618f34565b8281036020840152614dd48185618f34565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f2200000000000000000000000000000000000000000000000000000000000000815260008251619b14816001850160208701618f10565b7f22000000000000000000000000000000000000000000000000000000000000006001939091019283015250600201919050565b60008251619b5a818460208701618f10565b7f2f6275696c642d696e666f000000000000000000000000000000000000000000920191825250600b01919050565b7f436f756c64206e6f742066696e64206275696c642d696e666f2066696c65207781527f697468206d61746368696e6720736f7572636520636f6465206861736820666f60208201527f7220636f6e747261637420000000000000000000000000000000000000000000604082015260008251619c0d81604b850160208701618f10565b91909101604b0192915050565b600060ff821660ff8103619c3057619c30619272565b60010192915050565b7f406f70656e7a657070656c696e2f646566656e6465722d6465706c6f792d636c81527f69656e742d636c69400000000000000000000000000000000000000000000000602082015260008251619c97816029850160208701618f10565b9190910160290192915050565b60408152601660408201527f4f50454e5a455050454c494e5f424153485f50415448000000000000000000006060820152608060208201526000614dd86080830184618f34565b600060208284031215619cfd57600080fd5b815167ffffffffffffffff811115619d1457600080fd5b820160608185031215619d2657600080fd5b619d2e619516565b81518060030b8114619d3f57600080fd5b8152602082015167ffffffffffffffff811115619d5b57600080fd5b619d67868285016195af565b602083015250604082015167ffffffffffffffff811115619d8757600080fd5b619d93868285016195af565b604083015250949350505050565b7f4661696c656420746f2072756e206261736820636f6d6d616e6420776974682081527f2200000000000000000000000000000000000000000000000000000000000000602082015260008251619dff816021850160208701618f10565b7f222e20496620796f7520617265207573696e672057696e646f77732c2073657460219390910192830152507f20746865204f50454e5a455050454c494e5f424153485f5041544820656e766960418201527f726f6e6d656e74207661726961626c6520746f207468652066756c6c7920717560618201527f616c69666965642070617468206f66207468652062617368206578656375746160818201527f626c652e20466f72206578616d706c652c20696620796f75206172652075736960a18201527f6e672047697420666f722057696e646f77732c206164642074686520666f6c6c60c18201527f6f77696e67206c696e6520696e20746865202e656e762066696c65206f66207960e18201527f6f75722070726f6a65637420287573696e6720666f727761726420736c6173686101018201527f6573293a0a4f50454e5a455050454c494e5f424153485f504154483d22433a2f6101218201527f50726f6772616d2046696c65732f4769742f62696e2f6261736822000000000061014182015261015c01919050565b7f4661696c656420746f2066696e64206c696e652077697468207072656669782081527f2700000000000000000000000000000000000000000000000000000000000000602082015260008351619feb816021850160208801618f10565b7f2720696e206f75747075743a2000000000000000000000000000000000000000602191840191820152835161a02881602e840160208801618f10565b01602e01949350505050565b7f4661696c656420746f2072756e2075706772616465207361666574792076616c81527f69646174696f6e3a200000000000000000000000000000000000000000000000602082015260008251619c97816029850160208701618f10565b7f55706772616465207361666574792076616c69646174696f6e206661696c656481527f3a0a00000000000000000000000000000000000000000000000000000000000060208201526000825161a0f0816022850160208701618f10565b9190910160220192915050565b81810381811115614cdf57614cdf619272565b7f436f6e7472616374206e616d652000000000000000000000000000000000000081526000825161a14881600e850160208701618f10565b7f206d75737420626520696e2074686520666f726d6174204d79436f6e74726163600e9390910192830152507f742e736f6c3a4d79436f6e7472616374206f72204d79436f6e74726163742e73602e8201527f6f6c206f72206f75742f4d79436f6e74726163742e736f6c2f4d79436f6e7472604e8201527f6163742e6a736f6e000000000000000000000000000000000000000000000000606e820152607601919050565b7f53504458206c6963656e7365206964656e74696669657220000000000000000081526000835161a226816018850160208801618f10565b7f20696e2000000000000000000000000000000000000000000000000000000000601891840191820152835161a26381601c840160208801618f10565b7f20646f6573206e6f74206c6f6f6b206c696b65206120737570706f7274656420601c92909101918201527f6c6963656e736520666f7220626c6f636b206578706c6f726572207665726966603c8201527f69636174696f6e2e205573652074686520606c6963656e73655479706560206f605c8201527f7074696f6e20746f20737065636966792061206c6963656e736520747970652c607c8201527f206f7220736574207468652060736b69704c6963656e73655479706560206f70609c8201527f74696f6e20746f2060747275656020746f20736b69702e00000000000000000060bc82015260d301949350505050565b6000825161a369818460208701618f10565b7f2000000000000000000000000000000000000000000000000000000000000000920191825250600101919050565b7f406f70656e7a657070656c696e2f75706772616465732d636f7265400000000081526000825161a3d081601c850160208701618f10565b91909101601c0192915050565b6000600019820361a3f05761a3f0619272565b5060010190565b8082028115828204841417614cdf57614cdf619272565b6001815b600184111561a4495780850481111561a42d5761a42d619272565b600184161561a43b57908102905b60019390931c92800261a412565b935093915050565b60008261a46057506001614cdf565b8161a46d57506000614cdf565b816001811461a483576002811461a48d5761a4a9565b6001915050614cdf565b60ff84111561a49e5761a49e619272565b50506001821b614cdf565b5060208310610133831016604e8410600b841016171561a4cc575081810a614cdf565b61a4d9600019848461a40e565b806000190482111561a4ed5761a4ed619272565b029392505050565b6000614dd8838361a451565b60008161a5105761a510619272565b506000190190565b6000835161a52a818460208801618f10565b7f3a00000000000000000000000000000000000000000000000000000000000000908301908152835161a564816001840160208801618f10565b01600101949350505050565b818103600083128015838313168383128216171561809c5761809c61927256fe608060405234801561001057600080fd5b506040516112a63803806112a683398101604081905261002f91610110565b604051806040016040528060048152602001635a65746160e01b815250604051806040016040528060048152602001635a45544160e01b815250816003908161007891906101e2565b50600461008582826101e2565b5050506001600160a01b03821615806100a557506001600160a01b038116155b156100c35760405163e6c4247b60e01b815260040160405180910390fd5b600680546001600160a01b039384166001600160a01b031991821617909155600780549290931691161790556102a0565b80516001600160a01b038116811461010b57600080fd5b919050565b6000806040838503121561012357600080fd5b61012c836100f4565b915061013a602084016100f4565b90509250929050565b634e487b7160e01b600052604160045260246000fd5b600181811c9082168061016d57607f821691505b60208210810361018d57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156101dd57806000526020600020601f840160051c810160208510156101ba5750805b601f840160051c820191505b818110156101da57600081556001016101c6565b50505b505050565b81516001600160401b038111156101fb576101fb610143565b61020f816102098454610159565b84610193565b6020601f821160018114610243576000831561022b5750848201515b600019600385901b1c1916600184901b1784556101da565b600084815260208120601f198516915b828110156102735787850151825560209485019460019092019101610253565b50848210156102915786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b610ff7806102af6000396000f3fe608060405234801561001057600080fd5b506004361061011b5760003560e01c806342966c68116100b257806379cc679011610081578063a9059cbb11610066578063a9059cbb1461028e578063bff9662a146102a1578063dd62ed3e146102c157600080fd5b806379cc67901461027357806395d89b411461028657600080fd5b806342966c68146102025780635b1125911461021557806370a0823114610235578063779e3b631461026b57600080fd5b80631e458bee116100ee5780631e458bee1461018857806323b872dd1461019b578063313ce567146101ae578063328a01d0146101bd57600080fd5b806306fdde0314610120578063095ea7b31461013e57806315d57fd41461016157806318160ddd14610176575b600080fd5b610128610307565b6040516101359190610d97565b60405180910390f35b61015161014c366004610e2c565b610399565b6040519015158152602001610135565b61017461016f366004610e56565b6103b3565b005b6002545b604051908152602001610135565b610174610196366004610e89565b61057e565b6101516101a9366004610ebc565b610631565b60405160128152602001610135565b6007546101dd9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610135565b610174610210366004610ef9565b610655565b6006546101dd9073ffffffffffffffffffffffffffffffffffffffff1681565b61017a610243366004610f12565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b610174610662565b610174610281366004610e2c565b610786565b610128610837565b61015161029c366004610e2c565b610846565b6005546101dd9073ffffffffffffffffffffffffffffffffffffffff1681565b61017a6102cf366004610e56565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b60606003805461031690610f34565b80601f016020809104026020016040519081016040528092919081815260200182805461034290610f34565b801561038f5780601f106103645761010080835404028352916020019161038f565b820191906000526020600020905b81548152906001019060200180831161037257829003601f168201915b5050505050905090565b6000336103a7818585610854565b60019150505b92915050565b60075473ffffffffffffffffffffffffffffffffffffffff1633148015906103f3575060065473ffffffffffffffffffffffffffffffffffffffff163314155b15610431576040517fcdfcef970000000000000000000000000000000000000000000000000000000081523360048201526024015b60405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff82161580610468575073ffffffffffffffffffffffffffffffffffffffff8116155b1561049f576040517fe6c4247b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6006805473ffffffffffffffffffffffffffffffffffffffff8481167fffffffffffffffffffffffff0000000000000000000000000000000000000000928316811790935560058054918516919092161790556040805133815260208101929092527fe79965b5c67dcfb2cf5fe152715e4a7256cee62a3d5dd8484fd8a8539eb8beff910160405180910390a16040805133815273ffffffffffffffffffffffffffffffffffffffff831660208201527f1b9352454524a57a51f24f67dc66d898f616922cd1f7a12d73570ece12b1975c910160405180910390a15050565b60055473ffffffffffffffffffffffffffffffffffffffff1633146105d1576040517f3fe32fba000000000000000000000000000000000000000000000000000000008152336004820152602401610428565b6105db8383610866565b808373ffffffffffffffffffffffffffffffffffffffff167fc263b302aec62d29105026245f19e16f8e0137066ccd4a8bd941f716bd4096bb8460405161062491815260200190565b60405180910390a3505050565b60003361063f8582856108c6565b61064a858585610995565b506001949350505050565b61065f3382610a40565b50565b60075473ffffffffffffffffffffffffffffffffffffffff1633146106b5576040517fe700765e000000000000000000000000000000000000000000000000000000008152336004820152602401610428565b60065473ffffffffffffffffffffffffffffffffffffffff16610704576040517fe6c4247b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600654600780547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff90921691821790556040805133815260208101929092527f5104c9abdc7d111c2aeb4ce890ac70274a4be2ee83f46a62551be5e6ebc82dd0910160405180910390a1565b60055473ffffffffffffffffffffffffffffffffffffffff1633146107d9576040517f3fe32fba000000000000000000000000000000000000000000000000000000008152336004820152602401610428565b6107e38282610a9c565b8173ffffffffffffffffffffffffffffffffffffffff167f919f7e2092ffcc9d09f599be18d8152860b0c054df788a33bc549cdd9d0f15b18260405161082b91815260200190565b60405180910390a25050565b60606004805461031690610f34565b6000336103a7818585610995565b6108618383836001610ab1565b505050565b73ffffffffffffffffffffffffffffffffffffffff82166108b6576040517fec442f0500000000000000000000000000000000000000000000000000000000815260006004820152602401610428565b6108c260008383610bf9565b5050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811461098f5781811015610980576040517ffb8f41b200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff841660048201526024810182905260448101839052606401610428565b61098f84848484036000610ab1565b50505050565b73ffffffffffffffffffffffffffffffffffffffff83166109e5576040517f96c6fd1e00000000000000000000000000000000000000000000000000000000815260006004820152602401610428565b73ffffffffffffffffffffffffffffffffffffffff8216610a35576040517fec442f0500000000000000000000000000000000000000000000000000000000815260006004820152602401610428565b610861838383610bf9565b73ffffffffffffffffffffffffffffffffffffffff8216610a90576040517f96c6fd1e00000000000000000000000000000000000000000000000000000000815260006004820152602401610428565b6108c282600083610bf9565b610aa78233836108c6565b6108c28282610a40565b73ffffffffffffffffffffffffffffffffffffffff8416610b01576040517fe602df0500000000000000000000000000000000000000000000000000000000815260006004820152602401610428565b73ffffffffffffffffffffffffffffffffffffffff8316610b51576040517f94280d6200000000000000000000000000000000000000000000000000000000815260006004820152602401610428565b73ffffffffffffffffffffffffffffffffffffffff8085166000908152600160209081526040808320938716835292905220829055801561098f578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051610beb91815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff8316610c31578060026000828254610c269190610f87565b90915550610ce39050565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205481811015610cb7576040517fe450d38c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff851660048201526024810182905260448101839052606401610428565b73ffffffffffffffffffffffffffffffffffffffff841660009081526020819052604090209082900390555b73ffffffffffffffffffffffffffffffffffffffff8216610d0c57600280548290039055610d38565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090208054820190555b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161062491815260200190565b602081526000825180602084015260005b81811015610dc55760208186018101516040868401015201610da8565b5060006040828501015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011684010191505092915050565b803573ffffffffffffffffffffffffffffffffffffffff81168114610e2757600080fd5b919050565b60008060408385031215610e3f57600080fd5b610e4883610e03565b946020939093013593505050565b60008060408385031215610e6957600080fd5b610e7283610e03565b9150610e8060208401610e03565b90509250929050565b600080600060608486031215610e9e57600080fd5b610ea784610e03565b95602085013595506040909401359392505050565b600080600060608486031215610ed157600080fd5b610eda84610e03565b9250610ee860208501610e03565b929592945050506040919091013590565b600060208284031215610f0b57600080fd5b5035919050565b600060208284031215610f2457600080fd5b610f2d82610e03565b9392505050565b600181811c90821680610f4857607f821691505b602082108103610f81577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b808201808211156103ad577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea2646970667358221220085f01204b33dc17013c78c74fbca32a3da2c0b384ce7c8878c889551af28c6164736f6c634300081a003360a060405234801561001057600080fd5b5060405161179838038061179883398101604081905261002f916101e5565b60016000556002805460ff191690556001600160a01b038316158061005b57506001600160a01b038216155b8061006d57506001600160a01b038116155b1561008b5760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b0383166080526100a3600082610134565b506100ce7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a82610134565b506100f97f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e483610134565b5061011260008051602061177883398151915282610134565b5061012b60008051602061177883398151915283610134565b50505050610228565b60008281526001602090815260408083206001600160a01b038516845290915281205460ff166101bf5760008381526001602081815260408084206001600160a01b0387168086529252808420805460ff19169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45060016101c3565b5060005b92915050565b80516001600160a01b03811681146101e057600080fd5b919050565b6000806000606084860312156101fa57600080fd5b610203846101c9565b9250610211602085016101c9565b915061021f604085016101c9565b90509250925092565b60805161151961025f6000396000818161019e01528181610500015281816105620152818161099101526109f301526115196000f3fe608060405234801561001057600080fd5b506004361061016c5760003560e01c806385f438c1116100cd578063c8a0236211610081578063d936547e11610066578063d936547e14610355578063d9caed1214610378578063e63ab1e91461038b57600080fd5b8063c8a023621461032f578063d547741f1461034257600080fd5b80639a590427116100b25780639a590427146103015780639b19251a14610314578063a217fddf1461032757600080fd5b806385f438c11461029457806391d14854146102bb57600080fd5b806336568abe11610124578063570618e111610109578063570618e11461025a5780635c975abb146102815780638456cb591461028c57600080fd5b806336568abe1461023f5780633f4ba83a1461025257600080fd5b806321fc65f21161015557806321fc65f2146101e5578063248a9ca3146101fa5780632f2ff15d1461022c57600080fd5b806301ffc9a714610171578063116191b614610199575b600080fd5b61018461017f366004611224565b6103b2565b60405190151581526020015b60405180910390f35b6101c07f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610190565b6101f86101f336600461128f565b61044b565b005b61021e61020836600461132c565b6000908152600160208190526040909120015490565b604051908152602001610190565b6101f861023a366004611345565b61064c565b6101f861024d366004611345565b610678565b6101f86106d6565b61021e7f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a81565b60025460ff16610184565b6101f861070b565b61021e7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b6101846102c9366004611345565b600091825260016020908152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b6101f861030f366004611371565b61073d565b6101f8610322366004611371565b61080b565b61021e600081565b6101f861033d36600461128f565b6108dc565b6101f8610350366004611345565b610ac3565b610184610363366004611371565b60036020526000908152604090205460ff1681565b6101f861038636600461138c565b610ae9565b61021e7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061044557507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b610453610c15565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461047d81610c58565b610485610c62565b73ffffffffffffffffffffffffffffffffffffffff861660009081526003602052604090205460ff166104e4576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61052573ffffffffffffffffffffffffffffffffffffffff87167f000000000000000000000000000000000000000000000000000000000000000086610ca1565b6040517f5131ab5900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690635131ab599061059f9089908990899089908990600401611412565b600060405180830381600087803b1580156105b957600080fd5b505af11580156105cd573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167f85b5be9cf454e05e0bddf49315178102227c312078eefa3c00294fb4d912ae4e8686866040516106329392919061146f565b60405180910390a3506106456001600055565b5050505050565b6000828152600160208190526040909120015461066881610c58565b6106728383610d2e565b50505050565b73ffffffffffffffffffffffffffffffffffffffff811633146106c7576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6106d18282610ddb565b505050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61070081610c58565b610708610e7c565b50565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61073581610c58565b610708610edb565b7f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a61076781610c58565b73ffffffffffffffffffffffffffffffffffffffff82166107b4576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216600081815260036020526040808220805460ff19169055517f51085ddf9ebdded84b76e829eb58c4078e4b5bdf97d9a94723f336039da467919190a25050565b7f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a61083581610c58565b73ffffffffffffffffffffffffffffffffffffffff8216610882576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216600081815260036020526040808220805460ff19166001179055517faab7954e9d246b167ef88aeddad35209ca2489d95a8aeb59e288d9b19fae5a549190a25050565b6108e4610c15565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461090e81610c58565b610916610c62565b73ffffffffffffffffffffffffffffffffffffffff861660009081526003602052604090205460ff16610975576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6109b673ffffffffffffffffffffffffffffffffffffffff87167f000000000000000000000000000000000000000000000000000000000000000086610ca1565b6040517fb8969bd400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063b8969bd490610a309089908990899089908990600401611412565b600060405180830381600087803b158015610a4a57600080fd5b505af1158015610a5e573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fb9d4efa96044e5f5e03e696fa9ae2ff66911cc27e8a637c3627c75bc5b2241c88686866040516106329392919061146f565b60008281526001602081905260409091200154610adf81610c58565b6106728383610ddb565b610af1610c15565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e4610b1b81610c58565b610b23610c62565b73ffffffffffffffffffffffffffffffffffffffff841660009081526003602052604090205460ff16610b82576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610ba373ffffffffffffffffffffffffffffffffffffffff85168484610ca1565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f9b1bfa7fa9ee420a16e124f794c35ac9f90472acc99140eb2f6447c714cad8eb84604051610c0291815260200190565b60405180910390a3506106d16001600055565b600260005403610c51576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b6107088133610f18565b60025460ff1615610c9f576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6040805173ffffffffffffffffffffffffffffffffffffffff8416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb000000000000000000000000000000000000000000000000000000001790526106d1908490610fa9565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff16610dd357600083815260016020818152604080842073ffffffffffffffffffffffffffffffffffffffff87168086529252808420805460ff19169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a4506001610445565b506000610445565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff1615610dd357600083815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff86168085529252808320805460ff1916905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a4506001610445565b610e8461103f565b6002805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b610ee3610c62565b6002805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258610eb13390565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16610fa5576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82166004820152602481018390526044015b60405180910390fd5b5050565b6000610fcb73ffffffffffffffffffffffffffffffffffffffff84168361107b565b90508051600014158015610ff0575080806020019051810190610fee9190611492565b155b156106d1576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84166004820152602401610f9c565b60025460ff16610c9f576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606061108983836000611090565b9392505050565b6060814710156110ce576040517fcd786059000000000000000000000000000000000000000000000000000000008152306004820152602401610f9c565b6000808573ffffffffffffffffffffffffffffffffffffffff1684866040516110f791906114b4565b60006040518083038185875af1925050503d8060008114611134576040519150601f19603f3d011682016040523d82523d6000602084013e611139565b606091505b5091509150611149868383611153565b9695505050505050565b60608261116857611163826111e2565b611089565b815115801561118c575073ffffffffffffffffffffffffffffffffffffffff84163b155b156111db576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85166004820152602401610f9c565b5080611089565b8051156111f25780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006020828403121561123657600080fd5b81357fffffffff000000000000000000000000000000000000000000000000000000008116811461108957600080fd5b803573ffffffffffffffffffffffffffffffffffffffff8116811461128a57600080fd5b919050565b6000806000806000608086880312156112a757600080fd5b6112b086611266565b94506112be60208701611266565b935060408601359250606086013567ffffffffffffffff8111156112e157600080fd5b8601601f810188136112f257600080fd5b803567ffffffffffffffff81111561130957600080fd5b88602082840101111561131b57600080fd5b959894975092955050506020019190565b60006020828403121561133e57600080fd5b5035919050565b6000806040838503121561135857600080fd5b8235915061136860208401611266565b90509250929050565b60006020828403121561138357600080fd5b61108982611266565b6000806000606084860312156113a157600080fd5b6113aa84611266565b92506113b860208501611266565b929592945050506040919091013590565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff8616815273ffffffffffffffffffffffffffffffffffffffff851660208201528360408201526080606082015260006114646080830184866113c9565b979650505050505050565b8381526040602082015260006114896040830184866113c9565b95945050505050565b6000602082840312156114a457600080fd5b8151801515811461108957600080fd5b6000825160005b818110156114d557602081860181015185830152016114bb565b50600092019182525091905056fea26469706673582212207ea3ad4ba4a6d39c3be3cec464753448900300ac3b508b4000815de5b914c53064736f6c634300081a00338619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a60c060405260001960035534801561001657600080fd5b5060405161155a38038061155a83398101604081905261003591610220565b60016000819055805460ff19169055838383836001600160a01b038416158061006557506001600160a01b038316155b8061007757506001600160a01b038216155b8061008957506001600160a01b038116155b156100a75760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b03808516608052831660a0526100c5600082610154565b506100f07f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e483610154565b5061011b7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb83610154565b506101467f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a82610154565b505050505050505050610274565b60008281526002602090815260408083206001600160a01b038516845290915281205460ff166101fa5760008381526002602090815260408083206001600160a01b03861684529091529020805460ff191660011790556101b23390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45060016101fe565b5060005b92915050565b80516001600160a01b038116811461021b57600080fd5b919050565b6000806000806080858703121561023657600080fd5b61023f85610204565b935061024d60208601610204565b925061025b60408601610204565b915061026960608601610204565b905092959194509250565b60805160a0516112826102d86000396000818161021d01528181610531015281816108240152818161097b01528181610ad00152610bf20152600081816101d1015281816104a1015281816105040152818161079401526107f701526112826000f3fe608060405234801561001057600080fd5b50600436106101775760003560e01c80635e3e9fef116100d857806391d148541161008c578063d547741f11610066578063d547741f14610386578063d5abeb0114610399578063e63ab1e9146103a257600080fd5b806391d1485414610311578063a217fddf14610357578063a783c7891461035f57600080fd5b8063743e0c9b116100bd578063743e0c9b146102cf5780638456cb59146102e257806385f438c1146102ea57600080fd5b80635e3e9fef146102a95780636f8b44b0146102bc57600080fd5b8063248a9ca31161012f57806336568abe1161011457806336568abe146102835780633f4ba83a146102965780635c975abb1461029e57600080fd5b8063248a9ca31461023f5780632f2ff15d1461027057600080fd5b8063106e629011610160578063106e6290146101b9578063116191b6146101cc57806321e093b11461021857600080fd5b806301ffc9a71461017c57806302d5c899146101a4575b600080fd5b61018f61018a366004610fb4565b6103c9565b60405190151581526020015b60405180910390f35b6101b76101b2366004611026565b610462565b005b6101b76101c73660046110b8565b6105f7565b6101f37f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161019b565b6101f37f000000000000000000000000000000000000000000000000000000000000000081565b61026261024d3660046110eb565b60009081526002602052604090206001015490565b60405190815260200161019b565b6101b761027e366004611104565b61069c565b6101b7610291366004611104565b6106c7565b6101b7610720565b60015460ff1661018f565b6101b76102b7366004611026565b610755565b6101b76102ca3660046110eb565b6108d0565b6101b76102dd3660046110eb565b61093e565b6101b76109e8565b6102627f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b61018f61031f366004611104565b600091825260026020908152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b610262600081565b6102627f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb81565b6101b7610394366004611104565b610a1a565b61026260035481565b6102627f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061045c57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b61046a610a3f565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461049481610a82565b61049c610a8c565b6104c77f00000000000000000000000000000000000000000000000000000000000000008684610acb565b6040517fb8969bd400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063b8969bd490610561907f0000000000000000000000000000000000000000000000000000000000000000908a908a908a908a90600401611179565b600060405180830381600087803b15801561057b57600080fd5b505af115801561058f573d6000803e3d6000fd5b505050508573ffffffffffffffffffffffffffffffffffffffff167fba96f26bdda53eb8c8ba39045dfb4ff39753fbc7a6edcf250a88e75e78d102fe8686866040516105dd939291906111d6565b60405180910390a2506105f06001600055565b5050505050565b6105ff610a3f565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461062981610a82565b610631610a8c565b61063c848484610acb565b8373ffffffffffffffffffffffffffffffffffffffff167f884edad9ce6fa2440d8a54cc123490eb96d2768479d49ff9c7366125a94243648460405161068491815260200190565b60405180910390a2506106976001600055565b505050565b6000828152600260205260409020600101546106b781610a82565b6106c18383610c53565b50505050565b73ffffffffffffffffffffffffffffffffffffffff81163314610716576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6106978282610d53565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61074a81610a82565b610752610e12565b50565b61075d610a3f565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461078781610a82565b61078f610a8c565b6107ba7f00000000000000000000000000000000000000000000000000000000000000008684610acb565b6040517f5131ab5900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690635131ab5990610854907f0000000000000000000000000000000000000000000000000000000000000000908a908a908a908a90600401611179565b600060405180830381600087803b15801561086e57600080fd5b505af1158015610882573d6000803e3d6000fd5b505050508573ffffffffffffffffffffffffffffffffffffffff167f7772f56296d3a5202974a45c61c9188d844ab4d6eeb18c851e4b8d5384ca6ced8686866040516105dd939291906111d6565b7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb6108fa81610a82565b610902610a8c565b60038290556040518281527f7810bd47de260c3e9ee10061cf438099dd12256c79485f12f94dbccc981e806c9060200160405180910390a15050565b610946610a8c565b6040517f79cc6790000000000000000000000000000000000000000000000000000000008152336004820152602481018290527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16906379cc679090604401600060405180830381600087803b1580156109d457600080fd5b505af11580156105f0573d6000803e3d6000fd5b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610a1281610a82565b610752610e8f565b600082815260026020526040902060010154610a3581610a82565b6106c18383610d53565b600260005403610a7b576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b6107528133610ee8565b60015460ff1615610ac9576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6003547f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b39573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b5d91906111f9565b610b679084611212565b1115610b9f576040517fc30436e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f1e458bee00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff848116600483015260248201849052604482018390527f00000000000000000000000000000000000000000000000000000000000000001690631e458bee90606401600060405180830381600087803b158015610c3657600080fd5b505af1158015610c4a573d6000803e3d6000fd5b50505050505050565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff16610d4b57600083815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff86168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055610ce93390565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a450600161045c565b50600061045c565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff1615610d4b57600083815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8616808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a450600161045c565b610e1a610f78565b600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b610e97610a8c565b600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016811790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25833610e65565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16610f74576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff821660048201526024810183905260440160405180910390fd5b5050565b60015460ff16610ac9576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060208284031215610fc657600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610ff657600080fd5b9392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461102157600080fd5b919050565b60008060008060006080868803121561103e57600080fd5b61104786610ffd565b945060208601359350604086013567ffffffffffffffff81111561106a57600080fd5b8601601f8101881361107b57600080fd5b803567ffffffffffffffff81111561109257600080fd5b8860208284010111156110a457600080fd5b959894975060200195606001359392505050565b6000806000606084860312156110cd57600080fd5b6110d684610ffd565b95602085013595506040909401359392505050565b6000602082840312156110fd57600080fd5b5035919050565b6000806040838503121561111757600080fd5b8235915061112760208401610ffd565b90509250929050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff8616815273ffffffffffffffffffffffffffffffffffffffff851660208201528360408201526080606082015260006111cb608083018486611130565b979650505050505050565b8381526040602082015260006111f0604083018486611130565b95945050505050565b60006020828403121561120b57600080fd5b5051919050565b8082018082111561045c577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea2646970667358221220de5fa55e0ca79ea2f08903481d01ea00bbbf346b9cfba44e12a2dd6f3a6f2e8a64736f6c634300081a00336080604052348015600f57600080fd5b506001600055610d3a806100246000396000f3fe6080604052600436106100635760003560e01c8063c513169111610040578063c5131691146100c1578063e04d4f97146100e1578063f05b6abf146100f457005b8063357fc5a21461006c5780636ed701691461008c5780638fcaa0b5146100a157005b3661006a57005b005b34801561007857600080fd5b5061006a6100873660046106c0565b610114565b34801561009857600080fd5b5061006a6101aa565b3480156100ad57600080fd5b5061006a6100bc3660046106fc565b6101df565b3480156100cd57600080fd5b5061006a6100dc3660046106c0565b61021e565b61006a6100ef366004610895565b6102f9565b34801561010057600080fd5b5061006a61010f366004610981565b61033d565b61011c610372565b61013e73ffffffffffffffffffffffffffffffffffffffff83163383866103b5565b604080513381526020810185905273ffffffffffffffffffffffffffffffffffffffff848116828401528316606082015290517f2b58128f24a9f59127cc5b5430d70542b22220f2d9adaa86e442b816ab98af609181900360800190a16101a56001600055565b505050565b6040513381527fbcaadb46b82a48af60b608f58959ae6b8310d1b0a0d094c2e9ec3208ed39f2a09060200160405180910390a1565b7f0d3f65f00e631663aa85c96330b5c7a83bb29af3630c0063776f985edc3037aa33838360405161021293929190610a6b565b60405180910390a15050565b610226610372565b6000610233600285610ad5565b90508060000361026f576040517f1f2a200500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61029173ffffffffffffffffffffffffffffffffffffffff84163384846103b5565b604080513381526020810183905273ffffffffffffffffffffffffffffffffffffffff858116828401528416606082015290517f2b58128f24a9f59127cc5b5430d70542b22220f2d9adaa86e442b816ab98af609181900360800190a1506101a56001600055565b7f1f1ff1f5fb41346850b2f5c04e6c767e2f1c8a525c5c0c5cdb60cdf3ca5f62fa3334858585604051610330959493929190610b7e565b60405180910390a1505050565b7f74a53cd528a921fca7dbdee62f86819051d3cc98f214951f4238e8843f20b146338484846040516103309493929190610c08565b6002600054036103ae576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b6040805173ffffffffffffffffffffffffffffffffffffffff85811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd0000000000000000000000000000000000000000000000000000000017905261044a908590610450565b50505050565b600061047273ffffffffffffffffffffffffffffffffffffffff8416836104eb565b905080516000141580156104975750808060200190518101906104959190610ccb565b155b156101a5576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff841660048201526024015b60405180910390fd5b60606104f983836000610500565b9392505050565b60608147101561053e576040517fcd7860590000000000000000000000000000000000000000000000000000000081523060048201526024016104e2565b6000808573ffffffffffffffffffffffffffffffffffffffff1684866040516105679190610ce8565b60006040518083038185875af1925050503d80600081146105a4576040519150601f19603f3d011682016040523d82523d6000602084013e6105a9565b606091505b50915091506105b98683836105c3565b9695505050505050565b6060826105d8576105d382610652565b6104f9565b81511580156105fc575073ffffffffffffffffffffffffffffffffffffffff84163b155b1561064b576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff851660048201526024016104e2565b50806104f9565b8051156106625780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50565b803573ffffffffffffffffffffffffffffffffffffffff811681146106bb57600080fd5b919050565b6000806000606084860312156106d557600080fd5b833592506106e560208501610697565b91506106f360408501610697565b90509250925092565b6000806020838503121561070f57600080fd5b823567ffffffffffffffff81111561072657600080fd5b8301601f8101851361073757600080fd5b803567ffffffffffffffff81111561074e57600080fd5b85602082840101111561076057600080fd5b6020919091019590945092505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156107e6576107e6610770565b604052919050565b600082601f8301126107ff57600080fd5b813567ffffffffffffffff81111561081957610819610770565b61084a60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8401160161079f565b81815284602083860101111561085f57600080fd5b816020850160208301376000918101602001919091529392505050565b801515811461069457600080fd5b80356106bb8161087c565b6000806000606084860312156108aa57600080fd5b833567ffffffffffffffff8111156108c157600080fd5b6108cd868287016107ee565b9350506020840135915060408401356108e58161087c565b809150509250925092565b600067ffffffffffffffff82111561090a5761090a610770565b5060051b60200190565b600082601f83011261092557600080fd5b8135610938610933826108f0565b61079f565b8082825260208201915060208360051b86010192508583111561095a57600080fd5b602085015b8381101561097757803583526020928301920161095f565b5095945050505050565b60008060006060848603121561099657600080fd5b833567ffffffffffffffff8111156109ad57600080fd5b8401601f810186136109be57600080fd5b80356109cc610933826108f0565b8082825260208201915060208360051b8501019250888311156109ee57600080fd5b602084015b83811015610a3057803567ffffffffffffffff811115610a1257600080fd5b610a218b6020838901016107ee565b845250602092830192016109f3565b509550505050602084013567ffffffffffffffff811115610a5057600080fd5b610a5c86828701610914565b9250506106f36040850161088a565b73ffffffffffffffffffffffffffffffffffffffff8416815260406020820152816040820152818360608301376000818301606090810191909152601f9092017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016010192915050565b600082610b0b577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60005b83811015610b2b578181015183820152602001610b13565b50506000910152565b60008151808452610b4c816020860160208601610b10565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b73ffffffffffffffffffffffffffffffffffffffff8616815284602082015260a060408201526000610bb360a0830186610b34565b6060830194909452509015156080909101529392505050565b600081518084526020840193506020830160005b82811015610bfe578151865260209586019590910190600101610be0565b5093949350505050565b60006080820173ffffffffffffffffffffffffffffffffffffffff871683526080602084015280865180835260a08501915060a08160051b86010192506020880160005b82811015610c9b577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60878603018452610c86858351610b34565b94506020938401939190910190600101610c4c565b505050508281036040840152610cb18186610bcc565b915050610cc2606083018415159052565b95945050505050565b600060208284031215610cdd57600080fd5b81516104f98161087c565b60008251610cfa818460208701610b10565b919091019291505056fea2646970667358221220556072e1abafc3c4063b8cce832228b4f309b93726aaa6a6dfab20cb880c6d1864736f6c634300081a0033a264697066735822122019a3e780284440ff15bfc0b0ad7f58048b268d386f68f104e4342a9c0326c1e964736f6c634300081a0033", } // ZetaConnectorNonNativeTestABI is the input ABI used to generate the binding from. diff --git a/v2/pkg/zrc20.t.sol/zrc20test.go b/v2/pkg/zrc20.t.sol/zrc20test.go index e32b0119..99c42180 100644 --- a/v2/pkg/zrc20.t.sol/zrc20test.go +++ b/v2/pkg/zrc20.t.sol/zrc20test.go @@ -50,7 +50,7 @@ type StdInvariantFuzzSelector struct { // ZRC20TestMetaData contains all meta data concerning the ZRC20Test contract. var ZRC20TestMetaData = &bind.MetaData{ ABI: "[{\"type\":\"function\",\"name\":\"IS_TEST\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeArtifacts\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedArtifacts_\",\"type\":\"string[]\",\"internalType\":\"string[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeContracts\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedContracts_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeSelectors\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedSelectors_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzSelector[]\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"selectors\",\"type\":\"bytes4[]\",\"internalType\":\"bytes4[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeSenders\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedSenders_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"failed\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"setUp\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"targetArtifactSelectors\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedArtifactSelectors_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzArtifactSelector[]\",\"components\":[{\"name\":\"artifact\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"selectors\",\"type\":\"bytes4[]\",\"internalType\":\"bytes4[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetArtifacts\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedArtifacts_\",\"type\":\"string[]\",\"internalType\":\"string[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetContracts\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedContracts_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetInterfaces\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedInterfaces_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzInterface[]\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"artifacts\",\"type\":\"string[]\",\"internalType\":\"string[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetSelectors\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedSelectors_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzSelector[]\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"selectors\",\"type\":\"bytes4[]\",\"internalType\":\"bytes4[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetSenders\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedSenders_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"testApproveFailsIfRecipientIsZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testBurn\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testBurnFailsIfNoBalance\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDeposit\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositFailsIfRecipientIsZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositFailsIfSenderIsNotGateway\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testTransfer\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testTransferFailsIfNoBalance\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testTransferFailsIfRecipientIsZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testTransferFrom\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testTransferFromFailsIfNoAllowance\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testTransferFromFailsIfNoBalance\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testTransferFromFailsIfRecipientIsZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testTransferFromFailsIfSenderIsZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testUpdateGasLimit\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testUpdateGasLimitFailsIfSenderIsNotFungible\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testUpdateGatewayAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testUpdateGatewayAddressFailsIfSenderIsNotFungible\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testUpdateGatewayAddressFailsIfZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testUpdateProtocolFlatFee\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testUpdateProtocolFlatFeeFailsIfSenderIsNotFungible\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testUpdateSystemContractAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testUpdateSystemContractAddressFailsIfSenderIsNotFungible\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testUpdateSystemContractAddressFailsIfZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdraw\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawFailsIfNoAllowance\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawFailsIfNoBalance\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawGasFee\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawGasFeeFailsIfGasCoinNotSetForChainId\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawGasFeeFailsIfGasPriceNotSetForChainId\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testZRC20BasicInfo\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"event\",\"name\":\"log\",\"inputs\":[{\"name\":\"\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_address\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_array\",\"inputs\":[{\"name\":\"val\",\"type\":\"uint256[]\",\"indexed\":false,\"internalType\":\"uint256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_array\",\"inputs\":[{\"name\":\"val\",\"type\":\"int256[]\",\"indexed\":false,\"internalType\":\"int256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_array\",\"inputs\":[{\"name\":\"val\",\"type\":\"address[]\",\"indexed\":false,\"internalType\":\"address[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_bytes\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_bytes32\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_int\",\"inputs\":[{\"name\":\"\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_address\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_array\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"uint256[]\",\"indexed\":false,\"internalType\":\"uint256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_array\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"int256[]\",\"indexed\":false,\"internalType\":\"int256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_array\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"address[]\",\"indexed\":false,\"internalType\":\"address[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_bytes\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_bytes32\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_decimal_int\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"},{\"name\":\"decimals\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_decimal_uint\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"decimals\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_int\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_string\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_uint\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_string\",\"inputs\":[{\"name\":\"\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_uint\",\"inputs\":[{\"name\":\"\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"logs\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"CallerIsNotFungibleModule\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"GasFeeTransferFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidSender\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"LowAllowance\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"LowBalance\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZeroAddress\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZeroGasCoin\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZeroGasPrice\",\"inputs\":[]}]", - Bin: "0x6080604052600c8054600160ff199182168117909255601f80549091169091179055348015602c57600080fd5b5061df6a8061003c6000396000f3fe608060405234801561001057600080fd5b50600436106102f45760003560e01c80638ce7ef0511610191578063d27b0427116100e3578063dfbdf60011610097578063f1f87f4011610071578063f1f87f401461049d578063f2413096146104a5578063fa7626d4146104ad57600080fd5b8063dfbdf60014610485578063e13aba481461048d578063e20c9f711461049557600080fd5b8063d591221f116100c8578063d591221f1461046d578063d97136a214610475578063dcba486a1461047d57600080fd5b8063d27b04271461045d578063d509b16c1461046557600080fd5b8063b549984c11610145578063ba414fa61161011f578063ba414fa614610435578063d04cda981461044d578063d1fd32911461045557600080fd5b8063b549984c1461041d578063b5508aa914610425578063b79cad091461042d57600080fd5b8063a4aa6c7c11610176578063a4aa6c7c14610405578063ae9687dc1461040d578063b0464fdc1461041557600080fd5b80638ce7ef05146103e8578063916a17c6146103f057600080fd5b80634b6295091161024a57806366d9a9a0116101fe5780637f924c4e116101d85780637f924c4e146103c357806380326680146103cb57806385226c81146103d357600080fd5b806366d9a9a01461039e5780636ff45850146103b357806370557298146103bb57600080fd5b8063513999621161022f578063513999621461038657806358fdbbe01461038e5780635f01db7e1461039657600080fd5b80634b629509146103765780634cfc0aaa1461037e57600080fd5b806328438826116102ac5780633be9ec80116102865780633be9ec801461035e5780633e5e3c23146103665780633f7286f41461036e57600080fd5b806328438826146103395780632ade3880146103415780632f6254fc1461035657600080fd5b80630a9254e4116102dd5780630a9254e41461030b5780631142744e146103135780631ed7831c1461031b57600080fd5b80630393998b146102f95780630809dfef14610303575b600080fd5b6103016104ba565b005b6103016105bc565b61030161074a565b610301610e2c565b610323610f10565b6040516103309190619053565b60405180910390f35b610301610f72565b6103496111bd565b60405161033091906190ef565b6103016112ff565b610301611470565b61032361165d565b6103236116bd565b61030161171d565b6103016117f0565b6103016118c9565b610301611c46565b610301611d19565b6103a6611e86565b6040516103309190619255565b610301612008565b610301612218565b610301612468565b61030161268c565b6103db612760565b60405161033091906192f3565b610301612830565b6103f8612a30565b604051610330919061936a565b610301612b2b565b610301612ce0565b6103f8612f6d565b610301613068565b6103db61313a565b61030161320a565b61043d61359c565b6040519015158152602001610330565b610301613670565b6103016137b4565b6103016138f7565b610301613a3a565b6103016140ce565b6103016141b2565b610301614338565b6103016145bb565b6103016146fe565b6103236149a8565b610301614a08565b610301614b4e565b601f5461043d9060ff1681565b604051630618f58760e51b81527f2b2add3d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b15801561052657600080fd5b505af115801561053a573d6000803e3d6000fd5b5050601f546040517feddeb123000000000000000000000000000000000000000000000000000000008152600a60048201526101009091046001600160a01b0316925063eddeb12391506024015b600060405180830381600087803b1580156105a257600080fd5b505af11580156105b6573d6000803e3d6000fd5b50505050565b60225460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561061557600080fd5b505af1158015610629573d6000803e3d6000fd5b5050604051630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b15801561069957600080fd5b505af11580156106ad573d6000803e3d6000fd5b5050601f546040517f47e7ef2400000000000000000000000000000000000000000000000000000000815260006004820152620186a060248201526101009091046001600160a01b031692506347e7ef2491506044015b6020604051808303816000875af1158015610723573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107479190619401565b50565b602480547fffffffffffffffffffffffff000000000000000000000000000000000000000090811630179091556025805490911661123417905560405161079090618f73565b604051809103906000f0801580156107ac573d6000803e3d6000fd5b50602380547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03928316908117909155604080518082018252600f81527f476174657761795a45564d2e736f6c000000000000000000000000000000000060208201526024805492519081019390935292166044820152610890919060640160408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f485cc95500000000000000000000000000000000000000000000000000000000179052614daa565b602280546001600160a01b03929092167fffffffffffffffffffffffff00000000000000000000000000000000000000009283168117909155602180549092168117909155604080517f3ce4a5bc0000000000000000000000000000000000000000000000000000000081529051633ce4a5bc916004808201926020929091908290030181865afa158015610929573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061094d919061943f565b602680547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039290921691821790556040517f06447d560000000000000000000000000000000000000000000000000000000081526004810191909152737109709ecfa91a80626ff3989d68f67f5b1dd12d906306447d5690602401600060405180830381600087803b1580156109eb57600080fd5b505af11580156109ff573d6000803e3d6000fd5b505050506000806000604051610a1490618f80565b6001600160a01b03938416815291831660208301529091166040820152606001604051809103906000f080158015610a50573d6000803e3d6000fd5b50602080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03928316908117909155602154604051601293600193849360009391921690610aa690618f8d565b610ab59695949392919061945a565b604051809103906000f080158015610ad1573d6000803e3d6000fd5b50601f80547fffffffffffffffffffffff0000000000000000000000000000000000000000ff166101006001600160a01b03938416810291909117918290556020546040517fee2815ba00000000000000000000000000000000000000000000000000000000815260016004820152919092048316602482015291169063ee2815ba90604401600060405180830381600087803b158015610b7157600080fd5b505af1158015610b85573d6000803e3d6000fd5b50506020546040517fa7cb050700000000000000000000000000000000000000000000000000000000815260016004820181905260248201526001600160a01b03909116925063a7cb05079150604401600060405180830381600087803b158015610bef57600080fd5b505af1158015610c03573d6000803e3d6000fd5b50506026546040517fc88a5e6d0000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152633b9aca006024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c88a5e6d9150604401600060405180830381600087803b158015610c8357600080fd5b505af1158015610c97573d6000803e3d6000fd5b50506022546040517fc88a5e6d0000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152633b9aca006024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c88a5e6d9150604401600060405180830381600087803b158015610d1757600080fd5b505af1158015610d2b573d6000803e3d6000fd5b5050601f54602480546040517f47e7ef240000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620186a09281019290925261010090920490911692506347e7ef2491506044016020604051808303816000875af1158015610da9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dcd9190619401565b507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b03166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156105a257600080fd5b604051630618f58760e51b81527fddb5de5e000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b158015610e9857600080fd5b505af1158015610eac573d6000803e3d6000fd5b5050601f54602480546040517f47e7ef240000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620186a09281019290925261010090920490911692506347e7ef249150604401610704565b60606016805480602002602001604051908101604052809291908181526020018280548015610f6857602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610f4a575b5050505050905090565b601f546025546040516370a0823160e01b81526001600160a01b0391821660048201526000926101009004909116906370a0823190602401602060405180830381865afa158015610fc7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610feb919061954f565b9050610ff8600082614dc9565b601f54602480546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201526207a12092810183905291926101009004169063095ea7b3906044016020604051808303816000875af1158015611070573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110949190619401565b50604051630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b15801561110157600080fd5b505af1158015611115573d6000803e3d6000fd5b5050601f546025546040517f23b872dd000000000000000000000000000000000000000000000000000000008152600060048201526001600160a01b039182166024820152604481018690526101009092041692506323b872dd91506064015b6020604051808303816000875af1158015611194573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111b89190619401565b505050565b6060601e805480602002602001604051908101604052809291908181526020016000905b828210156112f657600084815260208082206040805180820182526002870290920180546001600160a01b03168352600181018054835181870281018701909452808452939591948681019491929084015b828210156112df57838290600052602060002001805461125290619568565b80601f016020809104026020016040519081016040528092919081815260200182805461127e90619568565b80156112cb5780601f106112a0576101008083540402835291602001916112cb565b820191906000526020600020905b8154815290600101906020018083116112ae57829003601f168201915b505050505081526020019060010190611233565b5050505081525050815260200190600101906111e1565b50505050905090565b60265460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561135857600080fd5b505af115801561136c573d6000803e3d6000fd5b5050601f546040517fc835d7cc00000000000000000000000000000000000000000000000000000000815261321160048201526101009091046001600160a01b0316925063c835d7cc9150602401600060405180830381600087803b1580156113d457600080fd5b505af11580156113e8573d6000803e3d6000fd5b5050505061146e601f60019054906101000a90046001600160a01b03166001600160a01b031663f2441b326040518163ffffffff1660e01b8152600401602060405180830381865afa158015611442573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611466919061943f565b613211614e51565b565b60265460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156114c957600080fd5b505af11580156114dd573d6000803e3d6000fd5b50506020546040517fa7cb050700000000000000000000000000000000000000000000000000000000815260016004820152600060248201526001600160a01b03909116925063a7cb05079150604401600060405180830381600087803b15801561154757600080fd5b505af115801561155b573d6000803e3d6000fd5b5050604051630618f58760e51b81527fe661aed0000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e091506024015b600060405180830381600087803b1580156115cc57600080fd5b505af11580156115e0573d6000803e3d6000fd5b50505050600080601f60019054906101000a90046001600160a01b03166001600160a01b031663d9eeebed6040518163ffffffff1660e01b81526004016040805180830381865afa158015611639573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105b691906195b5565b60606018805480602002602001604051908101604052809291908181526020018280548015610f68576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311610f4a575050505050905090565b60606017805480602002602001604051908101604052809291908181526020018280548015610f68576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311610f4a575050505050905090565b604051630618f58760e51b81527f2b2add3d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b15801561178957600080fd5b505af115801561179d573d6000803e3d6000fd5b5050601f546040517fccc7759900000000000000000000000000000000000000000000000000000000815261321160048201526101009091046001600160a01b0316925063ccc775999150602401610588565b604051630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b15801561185c57600080fd5b505af1158015611870573d6000803e3d6000fd5b5050601f546040517f095ea7b300000000000000000000000000000000000000000000000000000000815260006004820152600a60248201526101009091046001600160a01b0316925063095ea7b39150604401610704565b60265460405163ca669fa760e01b81526001600160a01b039091166004820152600a908190737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561192757600080fd5b505af115801561193b573d6000803e3d6000fd5b5050601f546040517ff687d12a000000000000000000000000000000000000000000000000000000008152600481018690526101009091046001600160a01b0316925063f687d12a9150602401600060405180830381600087803b1580156119a257600080fd5b505af11580156119b6573d6000803e3d6000fd5b505060265460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b158015611a1357600080fd5b505af1158015611a27573d6000803e3d6000fd5b5050601f546040517feddeb123000000000000000000000000000000000000000000000000000000008152600481018590526101009091046001600160a01b0316925063eddeb1239150602401600060405180830381600087803b158015611a8e57600080fd5b505af1158015611aa2573d6000803e3d6000fd5b5050601f546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526101009091046001600160a01b03166004820181905260006024830152925063095ea7b391506044016020604051808303816000875af1158015611b15573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b399190619401565b507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b031663f48448146040518163ffffffff1660e01b8152600401600060405180830381600087803b158015611b9857600080fd5b505af1158015611bac573d6000803e3d6000fd5b5050601f546025546040805160609290921b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000001660208301528051601481840301815260348301918290527fc7012626000000000000000000000000000000000000000000000000000000009091526001600160a01b0361010090930492909216935063c7012626925061117591906001906038016195e1565b604051630618f58760e51b81527f2b2add3d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b158015611cb257600080fd5b505af1158015611cc6573d6000803e3d6000fd5b5050601f546040517fc835d7cc00000000000000000000000000000000000000000000000000000000815261321160048201526101009091046001600160a01b0316925063c835d7cc9150602401610588565b60265460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015611d7257600080fd5b505af1158015611d86573d6000803e3d6000fd5b5050601f546040517ff687d12a000000000000000000000000000000000000000000000000000000008152600a60048201526101009091046001600160a01b0316925063f687d12a9150602401600060405180830381600087803b158015611ded57600080fd5b505af1158015611e01573d6000803e3d6000fd5b5050505061146e600a601f60019054906101000a90046001600160a01b03166001600160a01b031663091d27886040518163ffffffff1660e01b8152600401602060405180830381865afa158015611e5d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e81919061954f565b614dc9565b6060601b805480602002602001604051908101604052809291908181526020016000905b828210156112f65783829060005260206000209060020201604051806040016040529081600082018054611edd90619568565b80601f0160208091040260200160405190810160405280929190818152602001828054611f0990619568565b8015611f565780601f10611f2b57610100808354040283529160200191611f56565b820191906000526020600020905b815481529060010190602001808311611f3957829003601f168201915b5050505050815260200160018201805480602002602001604051908101604052809291908181526020018280548015611ff057602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019060040190602082600301049283019260010382029150808411611f9d5790505b50505050508152505081526020019060010190611eaa565b601f546025546040516370a0823160e01b81526001600160a01b0391821660048201526000926101009004909116906370a0823190602401602060405180830381865afa15801561205d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612081919061954f565b905061208e600082614dc9565b601f54602480546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201526207a12092810183905291926101009004169063095ea7b3906044016020604051808303816000875af1158015612106573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061212a9190619401565b50604051630618f58760e51b81527ffe382aa7000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b15801561219757600080fd5b505af11580156121ab573d6000803e3d6000fd5b5050601f54602480546025546040517f23b872dd0000000000000000000000000000000000000000000000000000000081526001600160a01b039283166004820152908216928101929092526044820186905261010090920490911692506323b872dd9150606401611175565b601f546025546040516370a0823160e01b81526001600160a01b0391821660048201526000926101009004909116906370a0823190602401602060405180830381865afa15801561226d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612291919061954f565b905061229e600082614dc9565b601f54602480546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015261c35092810183905291926101009004169063095ea7b3906044016020604051808303816000875af1158015612315573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123399190619401565b50601f54602480546025546040517f23b872dd0000000000000000000000000000000000000000000000000000000081526001600160a01b0392831660048201529082169281019290925260448201849052610100909204909116906323b872dd906064015b6020604051808303816000875af11580156123be573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123e29190619401565b50601f546025546040516370a0823160e01b81526001600160a01b0391821660048201526000926101009004909116906370a0823190602401602060405180830381865afa158015612438573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061245c919061954f565b90506111b88282614dc9565b6000601f60019054906101000a90046001600160a01b03166001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156124bd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124e1919061954f565b90506124f0620186a082614dc9565b60225460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561254957600080fd5b505af115801561255d573d6000803e3d6000fd5b5050601f54602480546040517f47e7ef240000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620186a09281019290925261010090920490911692506347e7ef2491506044016020604051808303816000875af11580156125db573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125ff9190619401565b506000601f60019054906101000a90046001600160a01b03166001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612655573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612679919061954f565b905061268862030d4082614dc9565b5050565b604051630618f58760e51b81527ffe382aa7000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b1580156126f857600080fd5b505af115801561270c573d6000803e3d6000fd5b5050601f546040517f42966c68000000000000000000000000000000000000000000000000000000008152620249f060048201526101009091046001600160a01b031692506342966c689150602401610704565b6060601a805480602002602001604051908101604052809291908181526020016000905b828210156112f65783829060005260206000200180546127a390619568565b80601f01602080910402602001604051908101604052809291908181526020018280546127cf90619568565b801561281c5780601f106127f15761010080835404028352916020019161281c565b820191906000526020600020905b8154815290600101906020018083116127ff57829003601f168201915b505050505081526020019060010190612784565b601f546025546040516370a0823160e01b81526001600160a01b0391821660048201526000926101009004909116906370a0823190602401602060405180830381865afa158015612885573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128a9919061954f565b90506128b6600082614dc9565b601f54602480546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201526207a12092810183905291926101009004169063095ea7b3906044016020604051808303816000875af115801561292e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129529190619401565b50604051630618f58760e51b81527ffe382aa7000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b1580156129bf57600080fd5b505af11580156129d3573d6000803e3d6000fd5b5050601f546025546040517fa9059cbb0000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201526024810186905261010090920416925063a9059cbb9150604401611175565b6060601d805480602002602001604051908101604052809291908181526020016000905b828210156112f65760008481526020908190206040805180820182526002860290920180546001600160a01b03168352600181018054835181870281018701909452808452939491938583019392830182828015612b1357602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019060040190602082600301049283019260010382029150808411612ac05790505b50505050508152505081526020019060010190612a54565b601f54602480546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201526207a12092810183905291926101009004169063095ea7b3906044016020604051808303816000875af1158015612ba3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612bc79190619401565b50604051630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b158015612c3457600080fd5b505af1158015612c48573d6000803e3d6000fd5b5050601f546040517fa9059cbb00000000000000000000000000000000000000000000000000000000815260006004820152602481018590526101009091046001600160a01b0316925063a9059cbb91506044015b6020604051808303816000875af1158015612cbc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126889190619401565b6000601f60019054906101000a90046001600160a01b03166001600160a01b03166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa158015612d35573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052612d5d91908101906196cb565b9050612d9e6040518060400160405280600581526020017f544f4b454e00000000000000000000000000000000000000000000000000000081525082614eb2565b6000601f60019054906101000a90046001600160a01b03166001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa158015612df3573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052612e1b91908101906196cb565b9050612e5c6040518060400160405280600381526020017f544b4e000000000000000000000000000000000000000000000000000000000081525082614eb2565b6000601f60019054906101000a90046001600160a01b03166001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015612eb1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ed59190619714565b9050612ee560128260ff16614dc9565b6000601f60019054906101000a90046001600160a01b03166001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612f3a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f5e919061954f565b90506105b6620186a082614dc9565b6060601c805480602002602001604051908101604052809291908181526020016000905b828210156112f65760008481526020908190206040805180820182526002860290920180546001600160a01b0316835260018101805483518187028101870190945280845293949193858301939283018282801561305057602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019060040190602082600301049283019260010382029150808411612ffd5790505b50505050508152505081526020019060010190612f91565b604051630618f58760e51b81527f2b2add3d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b1580156130d457600080fd5b505af11580156130e8573d6000803e3d6000fd5b5050601f546040517ff687d12a000000000000000000000000000000000000000000000000000000008152600a60048201526101009091046001600160a01b0316925063f687d12a9150602401610588565b60606019805480602002602001604051908101604052809291908181526020016000905b828210156112f657838290600052602060002001805461317d90619568565b80601f01602080910402602001604051908101604052809291908181526020018280546131a990619568565b80156131f65780601f106131cb576101008083540402835291602001916131f6565b820191906000526020600020905b8154815290600101906020018083116131d957829003601f168201915b50505050508152602001906001019061315e565b60265460405163ca669fa760e01b81526001600160a01b039091166004820152600a906305f5e10090737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561326c57600080fd5b505af1158015613280573d6000803e3d6000fd5b5050601f546040517ff687d12a000000000000000000000000000000000000000000000000000000008152600481018690526101009091046001600160a01b0316925063f687d12a9150602401600060405180830381600087803b1580156132e757600080fd5b505af11580156132fb573d6000803e3d6000fd5b505060265460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b15801561335857600080fd5b505af115801561336c573d6000803e3d6000fd5b5050601f546040517feddeb123000000000000000000000000000000000000000000000000000000008152600481018590526101009091046001600160a01b0316925063eddeb1239150602401600060405180830381600087803b1580156133d357600080fd5b505af11580156133e7573d6000803e3d6000fd5b5050601f546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526101009091046001600160a01b031660048201819052630bebc2006024830152925063095ea7b391506044016020604051808303816000875af115801561345d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134819190619401565b50604051630618f58760e51b81527ffe382aa7000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b1580156134ee57600080fd5b505af1158015613502573d6000803e3d6000fd5b5050601f546025546040805160609290921b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000001660208301528051601481840301815260348301918290527fc7012626000000000000000000000000000000000000000000000000000000009091526001600160a01b0361010090930492909216935063c7012626925061117591906064906038016195e1565b60085460009060ff16156135b4575060085460ff1690565b6040517f667f9d70000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d600482018190527f6661696c65640000000000000000000000000000000000000000000000000000602483015260009163667f9d7090604401602060405180830381865afa158015613645573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613669919061954f565b1415905090565b60265460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156136c957600080fd5b505af11580156136dd573d6000803e3d6000fd5b5050601f546040517feddeb123000000000000000000000000000000000000000000000000000000008152600a60048201526101009091046001600160a01b0316925063eddeb1239150602401600060405180830381600087803b15801561374457600080fd5b505af1158015613758573d6000803e3d6000fd5b5050505061146e600a601f60019054906101000a90046001600160a01b03166001600160a01b0316634d8943bb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611e5d573d6000803e3d6000fd5b60265460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561380d57600080fd5b505af1158015613821573d6000803e3d6000fd5b5050604051630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b15801561389157600080fd5b505af11580156138a5573d6000803e3d6000fd5b5050601f546040517fccc77599000000000000000000000000000000000000000000000000000000008152600060048201526101009091046001600160a01b0316925063ccc775999150602401610588565b60265460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561395057600080fd5b505af1158015613964573d6000803e3d6000fd5b5050604051630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b1580156139d457600080fd5b505af11580156139e8573d6000803e3d6000fd5b5050601f546040517fc835d7cc000000000000000000000000000000000000000000000000000000008152600060048201526101009091046001600160a01b0316925063c835d7cc9150602401610588565b60265460405163ca669fa760e01b81526001600160a01b039091166004820152600a908190737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015613a9857600080fd5b505af1158015613aac573d6000803e3d6000fd5b5050601f546040517ff687d12a000000000000000000000000000000000000000000000000000000008152600481018690526101009091046001600160a01b0316925063f687d12a9150602401600060405180830381600087803b158015613b1357600080fd5b505af1158015613b27573d6000803e3d6000fd5b505060265460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b158015613b8457600080fd5b505af1158015613b98573d6000803e3d6000fd5b5050601f546040517feddeb123000000000000000000000000000000000000000000000000000000008152600481018590526101009091046001600160a01b0316925063eddeb1239150602401600060405180830381600087803b158015613bff57600080fd5b505af1158015613c13573d6000803e3d6000fd5b5050601f54602480546040516370a0823160e01b81526001600160a01b039182166004820152600095506101009093041692506370a082319101602060405180830381865afa158015613c6a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613c8e919061954f565b9050613c9d620186a082614dc9565b6000601f60019054906101000a90046001600160a01b03166001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613cf2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613d16919061954f565b9050613d25620186a082614dc9565b601f546026546040516370a0823160e01b81526001600160a01b0391821660048201526000926101009004909116906370a0823190602401602060405180830381865afa158015613d7a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613d9e919061954f565b601f546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526101009091046001600160a01b03166004820181905261c350602483015291925063095ea7b3906044016020604051808303816000875af1158015613e10573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613e349190619401565b50601f546025546040805160609290921b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000001660208301528051601481840301815260348301918290527fc7012626000000000000000000000000000000000000000000000000000000009091526001600160a01b03610100909304929092169163c701262691613ecc919061c350906038016195e1565b6020604051808303816000875af1158015613eeb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613f0f9190619401565b50601f546026546040516370a0823160e01b81526001600160a01b0391821660048201526000926101009004909116906370a0823190602401602060405180830381865afa158015613f65573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613f89919061954f565b9050613fa985613f998885619766565b613fa39190619766565b82614dc9565b601f54602480546040516370a0823160e01b81526001600160a01b0391821660048201526000936101009004909116916370a082319101602060405180830381865afa158015613ffd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614021919061954f565b905061403d866140338961c350619779565b613fa39190619779565b6000601f60019054906101000a90046001600160a01b03166001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015614092573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906140b6919061954f565b90506140c461c35082614dc9565b5050505050505050565b601f546025546040516370a0823160e01b81526001600160a01b0391821660048201526000926101009004909116906370a0823190602401602060405180830381865afa158015614123573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614147919061954f565b9050614154600082614dc9565b601f546025546040517fa9059cbb0000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015261c350602482018190529261010090049091169063a9059cbb9060440161239f565b601f54602480546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201526207a12092810183905291926101009004169063095ea7b3906044016020604051808303816000875af115801561422a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061424e9190619401565b50604051630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b1580156142bb57600080fd5b505af11580156142cf573d6000803e3d6000fd5b5050601f54602480546040517f23b872dd0000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201526000928101929092526044820186905261010090920490911692506323b872dd9150606401612c9d565b60265460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561439157600080fd5b505af11580156143a5573d6000803e3d6000fd5b5050601f546040517ff687d12a000000000000000000000000000000000000000000000000000000008152600a6004820181905293508392506101009091046001600160a01b03169063f687d12a90602401600060405180830381600087803b15801561441157600080fd5b505af1158015614425573d6000803e3d6000fd5b505060265460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b15801561448257600080fd5b505af1158015614496573d6000803e3d6000fd5b5050601f546040517feddeb123000000000000000000000000000000000000000000000000000000008152600a60048201526101009091046001600160a01b0316925063eddeb1239150602401600060405180830381600087803b1580156144fd57600080fd5b505af1158015614511573d6000803e3d6000fd5b50505050600080601f60019054906101000a90046001600160a01b03166001600160a01b031663d9eeebed6040518163ffffffff1660e01b81526004016040805180830381865afa15801561456a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061458e91906195b5565b601f5491935091506145ae9061010090046001600160a01b031683614e51565b6105b6613fa38486619766565b60265460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561461457600080fd5b505af1158015614628573d6000803e3d6000fd5b5050601f546040517fccc7759900000000000000000000000000000000000000000000000000000000815261321160048201526101009091046001600160a01b0316925063ccc775999150602401600060405180830381600087803b15801561469057600080fd5b505af11580156146a4573d6000803e3d6000fd5b5050505061146e601f60019054906101000a90046001600160a01b03166001600160a01b0316638b851b956040518163ffffffff1660e01b8152600401602060405180830381865afa158015611442573d6000803e3d6000fd5b601f54602480546040516370a0823160e01b81526001600160a01b0391821660048201526000936101009004909116916370a082319101602060405180830381865afa158015614752573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614776919061954f565b9050614785620186a082614dc9565b6000601f60019054906101000a90046001600160a01b03166001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156147da573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906147fe919061954f565b905061480d620186a082614dc9565b601f546040517f42966c6800000000000000000000000000000000000000000000000000000000815261c35060048201526101009091046001600160a01b0316906342966c68906024016020604051808303816000875af1158015614876573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061489a9190619401565b50601f54602480546040516370a0823160e01b81526001600160a01b0391821660048201526000936101009004909116916370a082319101602060405180830381865afa1580156148ef573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614913919061954f565b905061492161c35082614dc9565b6000601f60019054906101000a90046001600160a01b03166001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015614976573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061499a919061954f565b90506105b661c35082614dc9565b60606015805480602002602001604051908101604052809291908181526020018280548015610f68576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311610f4a575050505050905090565b60265460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015614a6157600080fd5b505af1158015614a75573d6000803e3d6000fd5b50506020546040517fee2815ba00000000000000000000000000000000000000000000000000000000815260016004820152600060248201526001600160a01b03909116925063ee2815ba9150604401600060405180830381600087803b158015614adf57600080fd5b505af1158015614af3573d6000803e3d6000fd5b5050604051630618f58760e51b81527f78fff396000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e091506024016115b2565b601f546025546040516370a0823160e01b81526001600160a01b0391821660048201526000926101009004909116906370a0823190602401602060405180830381865afa158015614ba3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614bc7919061954f565b9050614bd4600082614dc9565b601f54602480546040517fdd62ed3e0000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201819052928101929092526000926101009004169063dd62ed3e90604401602060405180830381865afa158015614c4a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614c6e919061954f565b9050614c7b600082614dc9565b604051630618f58760e51b81527f10bad14700000000000000000000000000000000000000000000000000000000600482015261c35090737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b158015614ceb57600080fd5b505af1158015614cff573d6000803e3d6000fd5b5050601f54602480546025546040517f23b872dd0000000000000000000000000000000000000000000000000000000081526001600160a01b039283166004820152908216928101929092526044820186905261010090920490911692506323b872dd91506064016020604051808303816000875af1158015614d86573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105b69190619401565b6000614db4618f9a565b614dbf848483614f04565b9150505b92915050565b6040517f98296c540000000000000000000000000000000000000000000000000000000081526004810183905260248101829052737109709ecfa91a80626ff3989d68f67f5b1dd12d906398296c54906044015b60006040518083038186803b158015614e3557600080fd5b505afa158015614e49573d6000803e3d6000fd5b505050505050565b6040517f515361f60000000000000000000000000000000000000000000000000000000081526001600160a01b03808416600483015282166024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063515361f690604401614e1d565b6040517ff320d963000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063f320d96390614e1d908590859060040161978c565b600080614f118584614f7f565b9050614f746040518060400160405280601d81526020017f4552433139363750726f78792e736f6c3a4552433139363750726f78790000008152508286604051602001614f5f9291906197b1565b60405160208183030381529060405285614f8b565b9150505b9392505050565b6000614f788383614fb9565b60c08101515160009015614faf57614fa884848460c00151614fd4565b9050614f78565b614fa8848461517a565b6000614fc58383615265565b614f7883836020015184614f8b565b600080614fdf615271565b90506000614fed8683615344565b9050600061500482606001518360200151856157ea565b90506000615014838389896159fc565b9050600061502182616879565b602081015181519192509060030b156150945789826040015160405160200161504b9291906197d3565b60408051601f19818403018152908290527f08c379a000000000000000000000000000000000000000000000000000000000825261508b91600401619854565b60405180910390fd5b60006150d76040518060400160405280601581526020017f4465706c6f79656420746f20616464726573733a200000000000000000000000815250836001616a48565b6040517fc6ce059d000000000000000000000000000000000000000000000000000000008152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c6ce059d9061512a908490600401619854565b602060405180830381865afa158015615147573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061516b919061943f565b9b9a5050505050505050505050565b6040517f8d1cc9250000000000000000000000000000000000000000000000000000000081526000908190737109709ecfa91a80626ff3989d68f67f5b1dd12d90638d1cc925906151cf908790600401619854565b600060405180830381865afa1580156151ec573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526152149190810190619887565b90506000615242828560405160200161522e9291906198bc565b604051602081830303815290604052616c48565b90506001600160a01b038116614dbf57848460405160200161504b9291906198eb565b61268882826000616c5b565b604080518082018252600381527f6f75740000000000000000000000000000000000000000000000000000000000602082015290517fd145736c000000000000000000000000000000000000000000000000000000008152606091737109709ecfa91a80626ff3989d68f67f5b1dd12d91829063d145736c906152f8908490600401619996565b600060405180830381865afa158015615315573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261533d91908101906196cb565b9250505090565b6153766040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b6000737109709ecfa91a80626ff3989d68f67f5b1dd12d90506153c16040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b6153ca85616d5e565b602082015260006153da86617143565b90506000836001600160a01b031663d930a0e66040518163ffffffff1660e01b8152600401600060405180830381865afa15801561541c573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261544491908101906196cb565b8683856020015160405160200161545e94939291906199dd565b60408051601f19818403018152908290527f60f9bb1100000000000000000000000000000000000000000000000000000000825291506000906001600160a01b038616906360f9bb11906154b6908590600401619854565b600060405180830381865afa1580156154d3573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526154fb91908101906196cb565b6040517fdb4235f60000000000000000000000000000000000000000000000000000000081529091506001600160a01b0386169063db4235f690615543908490600401619ae1565b602060405180830381865afa158015615560573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906155849190619401565b615599578160405160200161504b9190619b33565b6040517f49c4fac80000000000000000000000000000000000000000000000000000000081526001600160a01b038616906349c4fac8906155de908490600401619bc5565b600060405180830381865afa1580156155fb573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261562391908101906196cb565b84526040517fdb4235f60000000000000000000000000000000000000000000000000000000081526001600160a01b0386169063db4235f69061566a908490600401619c17565b602060405180830381865afa158015615687573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906156ab9190619401565b15615740576040517f49c4fac80000000000000000000000000000000000000000000000000000000081526001600160a01b038616906349c4fac8906156f5908490600401619c17565b600060405180830381865afa158015615712573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261573a91908101906196cb565b60408501525b846001600160a01b03166349c4fac88286600001516040516020016157659190619c69565b6040516020818303038152906040526040518363ffffffff1660e01b815260040161579192919061978c565b600060405180830381865afa1580156157ae573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526157d691908101906196cb565b606085015250608083015250949350505050565b60408051600480825260a0820190925260609160009190816020015b60608152602001906001900390816158065790505090506040518060400160405280600481526020017f67726570000000000000000000000000000000000000000000000000000000008152508160008151811061586657615866619cd5565b60200260200101819052506040518060400160405280600381526020017f2d726c0000000000000000000000000000000000000000000000000000000000815250816001815181106158ba576158ba619cd5565b6020026020010181905250846040516020016158d69190619d04565b604051602081830303815290604052816002815181106158f8576158f8619cd5565b6020026020010181905250826040516020016159149190619d70565b6040516020818303038152906040528160038151811061593657615936619cd5565b6020026020010181905250600061594c82616879565b602080820151604080518082018252600581527f2e6a736f6e00000000000000000000000000000000000000000000000000000081850190815282518084018452600080825290860152825180840190935290518252928101929092529192506159dd90604080518082018252600080825260209182015281518083019092528451825280850190820152906173c6565b6159f2578560405160200161504b9190619db1565b9695505050505050565b60a0810151604080518082018252600080825260209182015281518083019092528251808352928101910152606090737109709ecfa91a80626ff3989d68f67f5b1dd12d9015615a4c565b511590565b615bc057826020015115615b08576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605860248201527f54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f742060448201527f62652075736564207768656e207468652060736b6970566572696679536f757260648201527f6365436f646560206f7074696f6e206973206074727565600000000000000000608482015260a40161508b565b8260c0015115615bc0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605360248201527f54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f742060448201527f62652075736564207768656e207468652060736b69704c6963656e736554797060648201527f6560206f7074696f6e2069732060747275656000000000000000000000000000608482015260a40161508b565b6040805160ff8082526120008201909252600091816020015b6060815260200190600190039081615bd957905050905060006040518060400160405280600381526020017f6e70780000000000000000000000000000000000000000000000000000000000815250828280615c3490619e42565b935060ff1681518110615c4957615c49619cd5565b60200260200101819052506040518060400160405280600d81526020017f302e302e312d616c7068612e3700000000000000000000000000000000000000815250604051602001615c9a9190619e61565b604051602081830303815290604052828280615cb590619e42565b935060ff1681518110615cca57615cca619cd5565b60200260200101819052506040518060400160405280600681526020017f6465706c6f790000000000000000000000000000000000000000000000000000815250828280615d1790619e42565b935060ff1681518110615d2c57615d2c619cd5565b60200260200101819052506040518060400160405280600e81526020017f2d2d636f6e74726163744e616d65000000000000000000000000000000000000815250828280615d7990619e42565b935060ff1681518110615d8e57615d8e619cd5565b60200260200101819052508760200151828280615daa90619e42565b935060ff1681518110615dbf57615dbf619cd5565b60200260200101819052506040518060400160405280600e81526020017f2d2d636f6e747261637450617468000000000000000000000000000000000000815250828280615e0c90619e42565b935060ff1681518110615e2157615e21619cd5565b602090810291909101015287518282615e3981619e42565b935060ff1681518110615e4e57615e4e619cd5565b60200260200101819052506040518060400160405280600981526020017f2d2d636861696e49640000000000000000000000000000000000000000000000815250828280615e9b90619e42565b935060ff1681518110615eb057615eb0619cd5565b6020026020010181905250615ec446617427565b8282615ecf81619e42565b935060ff1681518110615ee457615ee4619cd5565b60200260200101819052506040518060400160405280600f81526020017f2d2d6275696c64496e666f46696c650000000000000000000000000000000000815250828280615f3190619e42565b935060ff1681518110615f4657615f46619cd5565b602002602001018190525086828280615f5e90619e42565b935060ff1681518110615f7357615f73619cd5565b602090810291909101015285511561609a5760408051808201909152601581527f2d2d636f6e7374727563746f7242797465636f6465000000000000000000000060208201528282615fc481619e42565b935060ff1681518110615fd957615fd9619cd5565b60209081029190910101526040517f71aad10d0000000000000000000000000000000000000000000000000000000081526001600160a01b038416906371aad10d90616029908990600401619854565b600060405180830381865afa158015616046573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261606e91908101906196cb565b828261607981619e42565b935060ff168151811061608e5761608e619cd5565b60200260200101819052505b84602001511561616a5760408051808201909152601281527f2d2d766572696679536f75726365436f64650000000000000000000000000000602082015282826160e381619e42565b935060ff16815181106160f8576160f8619cd5565b60200260200101819052506040518060400160405280600581526020017f66616c736500000000000000000000000000000000000000000000000000000081525082828061614590619e42565b935060ff168151811061615a5761615a619cd5565b6020026020010181905250616331565b6161a2615a478660a0015160408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6162355760408051808201909152600d81527f2d2d6c6963656e73655479706500000000000000000000000000000000000000602082015282826161e581619e42565b935060ff16815181106161fa576161fa619cd5565b60200260200101819052508460a0015160405160200161621a9190619d04565b60405160208183030381529060405282828061614590619e42565b8460c0015115801561627857506040808901518151808301835260008082526020918201528251808401909352815183529081019082015261627690511590565b155b156163315760408051808201909152600d81527f2d2d6c6963656e73655479706500000000000000000000000000000000000000602082015282826162bc81619e42565b935060ff16815181106162d1576162d1619cd5565b60200260200101819052506162e5886174c7565b6040516020016162f59190619d04565b60405160208183030381529060405282828061631090619e42565b935060ff168151811061632557616325619cd5565b60200260200101819052505b6040808601518151808301835260008082526020918201528251808401909352815183529081019082015261636590511590565b6163fa5760408051808201909152600b81527f2d2d72656c617965724964000000000000000000000000000000000000000000602082015282826163a881619e42565b935060ff16815181106163bd576163bd619cd5565b602002602001018190525084604001518282806163d990619e42565b935060ff16815181106163ee576163ee619cd5565b60200260200101819052505b60608501511561651b5760408051808201909152600681527f2d2d73616c7400000000000000000000000000000000000000000000000000006020820152828261644381619e42565b935060ff168151811061645857616458619cd5565b602090810291909101015260608501516040517fb11a19e800000000000000000000000000000000000000000000000000000000815260048101919091526001600160a01b0384169063b11a19e890602401600060405180830381865afa1580156164c7573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526164ef91908101906196cb565b82826164fa81619e42565b935060ff168151811061650f5761650f619cd5565b60200260200101819052505b60e085015151156165c25760408051808201909152600a81527f2d2d6761734c696d6974000000000000000000000000000000000000000000006020820152828261656581619e42565b935060ff168151811061657a5761657a619cd5565b60200260200101819052506165968560e0015160000151617427565b82826165a181619e42565b935060ff16815181106165b6576165b6619cd5565b60200260200101819052505b60e0850151602001511561666c5760408051808201909152600a81527f2d2d6761735072696365000000000000000000000000000000000000000000006020820152828261660f81619e42565b935060ff168151811061662457616624619cd5565b60200260200101819052506166408560e0015160200151617427565b828261664b81619e42565b935060ff168151811061666057616660619cd5565b60200260200101819052505b60e085015160400151156167165760408051808201909152600e81527f2d2d6d6178466565506572476173000000000000000000000000000000000000602082015282826166b981619e42565b935060ff16815181106166ce576166ce619cd5565b60200260200101819052506166ea8560e0015160400151617427565b82826166f581619e42565b935060ff168151811061670a5761670a619cd5565b60200260200101819052505b60e085015160600151156167c05760408051808201909152601681527f2d2d6d61785072696f72697479466565506572476173000000000000000000006020820152828261676381619e42565b935060ff168151811061677857616778619cd5565b60200260200101819052506167948560e0015160600151617427565b828261679f81619e42565b935060ff16815181106167b4576167b4619cd5565b60200260200101819052505b60008160ff1667ffffffffffffffff8111156167de576167de619603565b60405190808252806020026020018201604052801561681157816020015b60608152602001906001900390816167fc5790505b50905060005b8260ff168160ff16101561686a57838160ff168151811061683a5761683a619cd5565b6020026020010151828260ff168151811061685757616857619cd5565b6020908102919091010152600101616817565b5093505050505b949350505050565b6168a06040518060600160405280600060030b815260200160608152602001606081525090565b60408051808201825260048082527f6261736800000000000000000000000000000000000000000000000000000000602083015291517fd145736c000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d92600091849163d145736c9161692691869101619ecc565b600060405180830381865afa158015616943573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261696b91908101906196cb565b905060006169798683617fb6565b90506000846001600160a01b031663f45c1ce7836040518263ffffffff1660e01b81526004016169a991906192f3565b6000604051808303816000875af11580156169c8573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526169f09190810190619f13565b805190915060030b15801590616a095750602081015151155b8015616a185750604081015151155b156159f25781600081518110616a3057616a30619cd5565b602002602001015160405160200161504b9190619fc9565b60606000616a7d8560408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600080825260209182015281518083019092528651825280870190820152909150616ab49082905b9061810b565b15616c11576000616b3182616b2b84616b25616af78a60408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6040805180820182526000808252602091820152815180830190925282518252918201519181019190915290565b90618132565b90618194565b604080518082018252600181527f0a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152909150616b9590829061810b565b15616bff57604080518082018252600181527f0a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616bfc905b8290618219565b90505b616c088161823f565b92505050614f78565b8215616c2a57848460405160200161504b92919061a1b5565b5050604080516020810190915260008152614f78565b509392505050565b6000808251602084016000f09392505050565b8160a0015115616c6a57505050565b6000616c778484846182a8565b90506000616c8482616879565b602081015181519192509060030b158015616d205750604080518082018252600781527f535543434553530000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616d2090604080518082018252600080825260209182015281518083019092528451825280850190820152616aae565b15616d2d57505050505050565b60408201515115616d4d57816040015160405160200161504b919061a25c565b8060405160200161504b919061a2ba565b60606000616d938360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600481527f2e736f6c0000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152909150616df8905b82906173c6565b15616e6757604080518082018252600481527f2e736f6c0000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152614f7890616e62908390618843565b61823f565b604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616ec9905b82906188cd565b600103616f9657604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616f2f90616bf5565b50604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152614f7890616e62905b8390618219565b604080518082018252600581527f2e6a736f6e00000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616ff590616df1565b1561712c57604080518082018252600181527f2f0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082018190528451808601909552925184528301529061705d908390618967565b9050600081600183516170709190619779565b8151811061708057617080619cd5565b60200260200101519050617123616e626170f66040518060400160405280600581526020017f2e6a736f6e00000000000000000000000000000000000000000000000000000081525060408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b60408051808201825260008082526020918201528151808301909252855182528086019082015290618843565b95945050505050565b8260405160200161504b919061a325565b50919050565b606060006171788360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600481527f2e736f6c00000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201529091506171da90616df1565b156171e857614f788161823f565b604080518082018252600181527f3a000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261724790616ec2565b6001036172b157604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152614f7890616e6290616f8f565b604080518082018252600581527f2e6a736f6e0000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261731090616df1565b1561712c57604080518082018252600181527f2f00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820181905284518086019095529251845283015290617378908390618967565b90506001815111156173b45780600282516173939190619779565b815181106173a3576173a3619cd5565b602002602001015192505050919050565b508260405160200161504b919061a325565b8051825160009111156173db57506000614dc3565b815183516020850151600092916173f191619766565b6173fb9190619779565b905082602001518103617412576001915050614dc3565b82516020840151819020912014905092915050565b6060600061743483618a0c565b600101905060008167ffffffffffffffff81111561745457617454619603565b6040519080825280601f01601f19166020018201604052801561747e576020820181803683370190505b5090508181016020015b600019017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a850494508461748857509392505050565b604081810151815180830183526000808252602091820181905283518085018552835181529282018383015283518085018552600a81527f554e4c4943454e5345440000000000000000000000000000000000000000000081840190815285518087018752838152840192909252845180860190955251845290830152606091617553905b8290618aee565b1561759357505060408051808201909152600481527f4e6f6e65000000000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600981527f556e6c6963656e73650000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526175f29061754c565b1561763257505060408051808201909152600981527f556e6c6963656e736500000000000000000000000000000000000000000000006020820152919050565b604080518082018252600381527f4d49540000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526176919061754c565b156176d157505060408051808201909152600381527f4d495400000000000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f47504c2d322e302d6f6e6c790000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526177309061754c565b806177955750604080518082018252601081527f47504c2d322e302d6f722d6c6174657200000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526177959061754c565b156177d557505060408051808201909152600981527f474e552047504c763200000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f47504c2d332e302d6f6e6c790000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526178349061754c565b806178995750604080518082018252601081527f47504c2d332e302d6f722d6c6174657200000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526178999061754c565b156178d957505060408051808201909152600981527f474e552047504c763300000000000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4c47504c2d322e312d6f6e6c7900000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526179389061754c565b8061799d5750604080518082018252601181527f4c47504c2d322e312d6f722d6c617465720000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261799d9061754c565b156179dd57505060408051808201909152600c81527f474e55204c47504c76322e3100000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4c47504c2d332e302d6f6e6c790000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617a3c9061754c565b80617aa15750604080518082018252601181527f4c47504c2d332e302d6f722d6c6174657200000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617aa19061754c565b15617ae157505060408051808201909152600a81527f474e55204c47504c7633000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f4253442d322d436c61757365000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617b409061754c565b15617b8057505060408051808201909152600c81527f4253442d322d436c6175736500000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f4253442d332d436c61757365000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617bdf9061754c565b15617c1f57505060408051808201909152600c81527f4253442d332d436c6175736500000000000000000000000000000000000000006020820152919050565b604080518082018252600781527f4d504c2d322e300000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617c7e9061754c565b15617cbe57505060408051808201909152600781527f4d504c2d322e30000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600781527f4f534c2d332e300000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617d1d9061754c565b15617d5d57505060408051808201909152600781527f4f534c2d332e30000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600a81527f4170616368652d322e300000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617dbc9061754c565b15617dfc57505060408051808201909152600a81527f4170616368652d322e30000000000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4147504c2d332e302d6f6e6c790000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617e5b9061754c565b80617ec05750604080518082018252601181527f4147504c2d332e302d6f722d6c6174657200000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617ec09061754c565b15617f0057505060408051808201909152600a81527f474e55204147504c7633000000000000000000000000000000000000000000006020820152919050565b604080518082018252600881527f4255534c2d312e3100000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617f5f9061754c565b15617f9f57505060408051808201909152600781527f42534c20312e31000000000000000000000000000000000000000000000000006020820152919050565b6040808401518451915161504b929060200161a403565b60608060005b84518110156180415781858281518110617fd857617fd8619cd5565b6020026020010151604051602001617ff19291906198bc565b6040516020818303038152906040529150600185516180109190619779565b81146180395781604051602001618027919061a56c565b60405160208183030381529060405291505b600101617fbc565b5060408051600380825260808201909252600091816020015b606081526020019060019003908161805a579050509050838160008151811061808557618085619cd5565b60200260200101819052506040518060400160405280600281526020017f2d63000000000000000000000000000000000000000000000000000000000000815250816001815181106180d9576180d9619cd5565b602002602001018190525081816002815181106180f8576180f8619cd5565b6020908102919091010152949350505050565b60208083015183518351928401516000936181299291849190618b02565b14159392505050565b604080518082019091526000808252602082015260006181648460000151856020015185600001518660200151618c13565b90508360200151816181769190619779565b84518590618185908390619779565b90525060208401525090919050565b60408051808201909152600080825260208201528151835110156181b9575081614dc3565b60208083015190840151600191146181e05750815160208481015190840151829020919020145b8015618211578251845185906181f7908390619779565b905250825160208501805161820d908390619766565b9052505b509192915050565b6040805180820190915260008082526020820152618238838383618d33565b5092915050565b60606000826000015167ffffffffffffffff81111561826057618260619603565b6040519080825280601f01601f19166020018201604052801561828a576020820181803683370190505b50905060006020820190506182388185602001518660000151618dde565b606060006182b4615271565b6040805160ff808252612000820190925291925060009190816020015b60608152602001906001900390816182d157905050905060006040518060400160405280600381526020017f6e7078000000000000000000000000000000000000000000000000000000000081525082828061832c90619e42565b935060ff168151811061834157618341619cd5565b60200260200101819052506040518060400160405280600781526020017f5e312e33322e3300000000000000000000000000000000000000000000000000815250604051602001618392919061a5ad565b6040516020818303038152906040528282806183ad90619e42565b935060ff16815181106183c2576183c2619cd5565b60200260200101819052506040518060400160405280600881526020017f76616c696461746500000000000000000000000000000000000000000000000081525082828061840f90619e42565b935060ff168151811061842457618424619cd5565b6020026020010181905250826040516020016184409190619d70565b60405160208183030381529060405282828061845b90619e42565b935060ff168151811061847057618470619cd5565b60200260200101819052506040518060400160405280600a81526020017f2d2d636f6e7472616374000000000000000000000000000000000000000000008152508282806184bd90619e42565b935060ff16815181106184d2576184d2619cd5565b60200260200101819052506184e78784618e58565b82826184f281619e42565b935060ff168151811061850757618507619cd5565b6020908102919091010152855151156185b35760408051808201909152600b81527f2d2d7265666572656e63650000000000000000000000000000000000000000006020820152828261855981619e42565b935060ff168151811061856e5761856e619cd5565b6020026020010181905250618587866000015184618e58565b828261859281619e42565b935060ff16815181106185a7576185a7619cd5565b60200260200101819052505b8560800151156186215760408051808201909152601881527f2d2d756e73616665536b697053746f72616765436865636b0000000000000000602082015282826185fc81619e42565b935060ff168151811061861157618611619cd5565b6020026020010181905250618687565b84156186875760408051808201909152601281527f2d2d726571756972655265666572656e636500000000000000000000000000006020820152828261866681619e42565b935060ff168151811061867b5761867b619cd5565b60200260200101819052505b604086015151156187235760408051808201909152600d81527f2d2d756e73616665416c6c6f7700000000000000000000000000000000000000602082015282826186d181619e42565b935060ff16815181106186e6576186e6619cd5565b6020026020010181905250856040015182828061870290619e42565b935060ff168151811061871757618717619cd5565b60200260200101819052505b85606001511561878d5760408051808201909152601481527f2d2d756e73616665416c6c6f7752656e616d65730000000000000000000000006020820152828261876c81619e42565b935060ff168151811061878157618781619cd5565b60200260200101819052505b60008160ff1667ffffffffffffffff8111156187ab576187ab619603565b6040519080825280602002602001820160405280156187de57816020015b60608152602001906001900390816187c95790505b50905060005b8260ff168160ff16101561883757838160ff168151811061880757618807619cd5565b6020026020010151828260ff168151811061882457618824619cd5565b60209081029190910101526001016187e4565b50979650505050505050565b6040805180820190915260008082526020820152815183511015618868575081614dc3565b8151835160208501516000929161887e91619766565b6188889190619779565b602084015190915060019082146188a9575082516020840151819020908220145b80156188c4578351855186906188c0908390619779565b9052505b50929392505050565b60008082600001516188f18560000151866020015186600001518760200151618c13565b6188fb9190619766565b90505b8351602085015161890f9190619766565b8111618238578161891f8161a5f2565b925050826000015161895685602001518361893a9190619779565b86516189469190619779565b8386600001518760200151618c13565b6189609190619766565b90506188fe565b6060600061897584846188cd565b618980906001619766565b67ffffffffffffffff81111561899857618998619603565b6040519080825280602002602001820160405280156189cb57816020015b60608152602001906001900390816189b65790505b50905060005b8151811015616c40576189e7616e628686618219565b8282815181106189f9576189f9619cd5565b60209081029190910101526001016189d1565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310618a55577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310618a81576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc100008310618a9f57662386f26fc10000830492506010015b6305f5e1008310618ab7576305f5e100830492506008015b6127108310618acb57612710830492506004015b60648310618add576064830492506002015b600a8310614dc35760010192915050565b6000618afa8383618e98565b159392505050565b600080858411618c095760208411618bb55760008415618b4d576001618b29866020619779565b618b3490600861a60c565b618b3f90600261a70a565b618b499190619779565b1990505b8351811685618b5c8989619766565b618b669190619779565b805190935082165b818114618ba057878411618b885787945050505050616871565b83618b928161a716565b945050828451169050618b6e565b618baa8785619766565b945050505050616871565b838320618bc28588619779565b618bcc9087619766565b91505b858210618c0757848220808203618bf457618bea8684619766565b9350505050616871565b618bff600184619779565b925050618bcf565b505b5092949350505050565b60008381868511618d1e5760208511618ccd5760008515618c5f576001618c3b876020619779565b618c4690600861a60c565b618c5190600261a70a565b618c5b9190619779565b1990505b84518116600087618c708b8b619766565b618c7a9190619779565b855190915083165b828114618cbf57818610618ca757618c9a8b8b619766565b9650505050505050616871565b85618cb18161a5f2565b965050838651169050618c82565b859650505050505050616871565b508383206000905b618cdf8689619779565b8211618d1c57858320808203618cfb5783945050505050616871565b618d06600185619766565b9350508180618d149061a5f2565b925050618cd5565b505b618d288787619766565b979650505050505050565b60408051808201909152600080825260208201526000618d658560000151866020015186600001518760200151618c13565b602080870180519186019190915251909150618d819082619779565b835284516020860151618d949190619766565b8103618da35760008552618dd5565b83518351618db19190619766565b85518690618dc0908390619779565b9052508351618dcf9082619766565b60208601525b50909392505050565b60208110618e165781518352618df5602084619766565b9250618e02602083619766565b9150618e0f602082619779565b9050618dde565b6000198115618e45576001618e2c836020619779565b618e389061010061a70a565b618e429190619779565b90505b9151835183169219169190911790915250565b60606000618e668484615344565b8051602080830151604051939450618e809390910161a72d565b60405160208183030381529060405291505092915050565b8151815160009190811115618eab575081515b6020808501519084015160005b83811015618f645782518251808214618f34576000196020871015618f1357600184618ee5896020619779565b618eef9190619766565b618efa90600861a60c565b618f0590600261a70a565b618f0f9190619779565b1990505b8181168382168181039114618f31579750614dc39650505050505050565b50505b618f3f602086619766565b9450618f4c602085619766565b93505050602081618f5d9190619766565b9050618eb8565b50845186516159f2919061a785565b610b678061a7a683390190565b61106f8061b30d83390190565b611bb98061c37c83390190565b6040518060e00160405280606081526020016060815260200160608152602001600015158152602001600015158152602001600015158152602001618fdd618fe2565b905290565b60405180610100016040528060001515815260200160001515815260200160608152602001600080191681526020016060815260200160608152602001600015158152602001618fdd6040518060800160405280600081526020016000815260200160008152602001600081525090565b602080825282518282018190526000918401906040840190835b818110156190945783516001600160a01b031683526020938401939092019160010161906d565b509095945050505050565b60005b838110156190ba5781810151838201526020016190a2565b50506000910152565b600081518084526190db81602086016020860161909f565b601f01601f19169290920160200192915050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b828110156191eb577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452815180516001600160a01b03168652602090810151604082880181905281519088018190529101906060600582901b88018101919088019060005b818110156191d1577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa08a85030183526191bb8486516190c3565b6020958601959094509290920191600101619181565b509197505050602094850194929092019150600101619117565b50929695505050505050565b600081518084526020840193506020830160005b8281101561924b5781517fffffffff000000000000000000000000000000000000000000000000000000001686526020958601959091019060010161920b565b5093949350505050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b828110156191eb577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc087860301845281518051604087526192c160408801826190c3565b90506020820151915086810360208801526192dc81836191f7565b96505050602093840193919091019060010161927d565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b828110156191eb577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08786030184526193558583516190c3565b9450602093840193919091019060010161931b565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b828110156191eb577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc087860301845281516001600160a01b03815116865260208101519050604060208701526193eb60408701826191f7565b9550506020938401939190910190600101619392565b60006020828403121561941357600080fd5b81518015158114614f7857600080fd5b80516001600160a01b038116811461943a57600080fd5b919050565b60006020828403121561945157600080fd5b614f7882619423565b610100815260056101008201527f544f4b454e000000000000000000000000000000000000000000000000000000610120820152610140602082015260036101408201527f544b4e000000000000000000000000000000000000000000000000000000000061016082015260006101808201905060ff8816604083015286606083015260038610619514577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b8560808301528460a083015261953560c08301856001600160a01b03169052565b6001600160a01b03831660e0830152979650505050505050565b60006020828403121561956157600080fd5b5051919050565b600181811c9082168061957c57607f821691505b60208210810361713d577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600080604083850312156195c857600080fd5b6195d183619423565b6020939093015192949293505050565b6040815260006195f460408301856190c3565b90508260208301529392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040516060810167ffffffffffffffff8111828210171561965557619655619603565b60405290565b60008067ffffffffffffffff84111561967657619676619603565b50604051601f19601f85018116603f0116810181811067ffffffffffffffff821117156196a5576196a5619603565b6040528381529050808284018510156196bd57600080fd5b616c4084602083018561909f565b6000602082840312156196dd57600080fd5b815167ffffffffffffffff8111156196f457600080fd5b8201601f8101841361970557600080fd5b614dbf8482516020840161965b565b60006020828403121561972657600080fd5b815160ff81168114614f7857600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b80820180821115614dc357614dc3619737565b81810381811115614dc357614dc3619737565b60408152600061979f60408301856190c3565b8281036020840152614f7481856190c3565b6001600160a01b038316815260406020820152600061687160408301846190c3565b7f4661696c656420746f206465706c6f7920636f6e74726163742000000000000081526000835161980b81601a85016020880161909f565b7f3a20000000000000000000000000000000000000000000000000000000000000601a91840191820152835161984881601c84016020880161909f565b01601c01949350505050565b602081526000614f7860208301846190c3565b600082601f83011261987857600080fd5b614f788383516020850161965b565b60006020828403121561989957600080fd5b815167ffffffffffffffff8111156198b057600080fd5b614dbf84828501619867565b600083516198ce81846020880161909f565b8351908301906198e281836020880161909f565b01949350505050565b7f4661696c656420746f206465706c6f7920636f6e74726163742000000000000081526000835161992381601a85016020880161909f565b7f207573696e6720636f6e7374727563746f722064617461202200000000000000601a91840191820152835161996081603384016020880161909f565b7f220000000000000000000000000000000000000000000000000000000000000060339290910191820152603401949350505050565b60408152600b60408201527f464f554e4452595f4f55540000000000000000000000000000000000000000006060820152608060208201526000614f7860808301846190c3565b600085516199ef818460208a0161909f565b7f2f000000000000000000000000000000000000000000000000000000000000009083019081528551619a29816001840160208a0161909f565b7f2f00000000000000000000000000000000000000000000000000000000000000600192909101918201528451619a6781600284016020890161909f565b6001818301019150507f2f0000000000000000000000000000000000000000000000000000000000000060018201528351619aa981600284016020880161909f565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600292909101918201526007019695505050505050565b604081526000619af460408301846190c3565b8281036020840152600481527f2e6173740000000000000000000000000000000000000000000000000000000060208201526040810191505092915050565b7f436f756c64206e6f742066696e642041535420696e2061727469666163742000815260008251619b6b81601f85016020870161909f565b7f2e205365742060617374203d20747275656020696e20666f756e6472792e746f601f9390910192830152507f6d6c000000000000000000000000000000000000000000000000000000000000603f820152604101919050565b604081526000619bd860408301846190c3565b8281036020840152601181527f2e6173742e6162736f6c7574655061746800000000000000000000000000000060208201526040810191505092915050565b604081526000619c2a60408301846190c3565b8281036020840152600c81527f2e6173742e6c6963656e7365000000000000000000000000000000000000000060208201526040810191505092915050565b7f2e6d657461646174612e736f75726365732e5b27000000000000000000000000815260008251619ca181601485016020870161909f565b7f275d2e6b656363616b32353600000000000000000000000000000000000000006014939091019283015250602001919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f2200000000000000000000000000000000000000000000000000000000000000815260008251619d3c81600185016020870161909f565b7f22000000000000000000000000000000000000000000000000000000000000006001939091019283015250600201919050565b60008251619d8281846020870161909f565b7f2f6275696c642d696e666f000000000000000000000000000000000000000000920191825250600b01919050565b7f436f756c64206e6f742066696e64206275696c642d696e666f2066696c65207781527f697468206d61746368696e6720736f7572636520636f6465206861736820666f60208201527f7220636f6e747261637420000000000000000000000000000000000000000000604082015260008251619e3581604b85016020870161909f565b91909101604b0192915050565b600060ff821660ff8103619e5857619e58619737565b60010192915050565b7f406f70656e7a657070656c696e2f646566656e6465722d6465706c6f792d636c81527f69656e742d636c69400000000000000000000000000000000000000000000000602082015260008251619ebf81602985016020870161909f565b9190910160290192915050565b60408152601660408201527f4f50454e5a455050454c494e5f424153485f50415448000000000000000000006060820152608060208201526000614f7860808301846190c3565b600060208284031215619f2557600080fd5b815167ffffffffffffffff811115619f3c57600080fd5b820160608185031215619f4e57600080fd5b619f56619632565b81518060030b8114619f6757600080fd5b8152602082015167ffffffffffffffff811115619f8357600080fd5b619f8f86828501619867565b602083015250604082015167ffffffffffffffff811115619faf57600080fd5b619fbb86828501619867565b604083015250949350505050565b7f4661696c656420746f2072756e206261736820636f6d6d616e6420776974682081527f220000000000000000000000000000000000000000000000000000000000000060208201526000825161a02781602185016020870161909f565b7f222e20496620796f7520617265207573696e672057696e646f77732c2073657460219390910192830152507f20746865204f50454e5a455050454c494e5f424153485f5041544820656e766960418201527f726f6e6d656e74207661726961626c6520746f207468652066756c6c7920717560618201527f616c69666965642070617468206f66207468652062617368206578656375746160818201527f626c652e20466f72206578616d706c652c20696620796f75206172652075736960a18201527f6e672047697420666f722057696e646f77732c206164642074686520666f6c6c60c18201527f6f77696e67206c696e6520696e20746865202e656e762066696c65206f66207960e18201527f6f75722070726f6a65637420287573696e6720666f727761726420736c6173686101018201527f6573293a0a4f50454e5a455050454c494e5f424153485f504154483d22433a2f6101218201527f50726f6772616d2046696c65732f4769742f62696e2f6261736822000000000061014182015261015c01919050565b7f4661696c656420746f2066696e64206c696e652077697468207072656669782081527f270000000000000000000000000000000000000000000000000000000000000060208201526000835161a21381602185016020880161909f565b7f2720696e206f75747075743a2000000000000000000000000000000000000000602191840191820152835161a25081602e84016020880161909f565b01602e01949350505050565b7f4661696c656420746f2072756e2075706772616465207361666574792076616c81527f69646174696f6e3a200000000000000000000000000000000000000000000000602082015260008251619ebf81602985016020870161909f565b7f55706772616465207361666574792076616c69646174696f6e206661696c656481527f3a0a00000000000000000000000000000000000000000000000000000000000060208201526000825161a31881602285016020870161909f565b9190910160220192915050565b7f436f6e7472616374206e616d652000000000000000000000000000000000000081526000825161a35d81600e85016020870161909f565b7f206d75737420626520696e2074686520666f726d6174204d79436f6e74726163600e9390910192830152507f742e736f6c3a4d79436f6e7472616374206f72204d79436f6e74726163742e73602e8201527f6f6c206f72206f75742f4d79436f6e74726163742e736f6c2f4d79436f6e7472604e8201527f6163742e6a736f6e000000000000000000000000000000000000000000000000606e820152607601919050565b7f53504458206c6963656e7365206964656e74696669657220000000000000000081526000835161a43b81601885016020880161909f565b7f20696e2000000000000000000000000000000000000000000000000000000000601891840191820152835161a47881601c84016020880161909f565b7f20646f6573206e6f74206c6f6f6b206c696b65206120737570706f7274656420601c92909101918201527f6c6963656e736520666f7220626c6f636b206578706c6f726572207665726966603c8201527f69636174696f6e2e205573652074686520606c6963656e73655479706560206f605c8201527f7074696f6e20746f20737065636966792061206c6963656e736520747970652c607c8201527f206f7220736574207468652060736b69704c6963656e73655479706560206f70609c8201527f74696f6e20746f2060747275656020746f20736b69702e00000000000000000060bc82015260d301949350505050565b6000825161a57e81846020870161909f565b7f2000000000000000000000000000000000000000000000000000000000000000920191825250600101919050565b7f406f70656e7a657070656c696e2f75706772616465732d636f7265400000000081526000825161a5e581601c85016020870161909f565b91909101601c0192915050565b6000600019820361a6055761a605619737565b5060010190565b8082028115828204841417614dc357614dc3619737565b6001815b600184111561a65e5780850481111561a6425761a642619737565b600184161561a65057908102905b60019390931c92800261a627565b935093915050565b60008261a67557506001614dc3565b8161a68257506000614dc3565b816001811461a698576002811461a6a25761a6be565b6001915050614dc3565b60ff84111561a6b35761a6b3619737565b50506001821b614dc3565b5060208310610133831016604e8410600b841016171561a6e1575081810a614dc3565b61a6ee600019848461a623565b806000190482111561a7025761a702619737565b029392505050565b6000614f78838361a666565b60008161a7255761a725619737565b506000190190565b6000835161a73f81846020880161909f565b7f3a00000000000000000000000000000000000000000000000000000000000000908301908152835161a77981600184016020880161909f565b01600101949350505050565b81810360008312801583831316838312821617156182385761823861973756fe60c0604052600d60809081526c2bb930b83832b21022ba3432b960991b60a05260009061002c9082610114565b506040805180820190915260048152630ae8aa8960e31b60208201526001906100559082610114565b506002805460ff1916601217905534801561006f57600080fd5b506101d2565b634e487b7160e01b600052604160045260246000fd5b600181811c9082168061009f57607f821691505b6020821081036100bf57634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111561010f57806000526020600020601f840160051c810160208510156100ec5750805b601f840160051c820191505b8181101561010c57600081556001016100f8565b50505b505050565b81516001600160401b0381111561012d5761012d610075565b6101418161013b845461008b565b846100c5565b6020601f821160018114610175576000831561015d5750848201515b600019600385901b1c1916600184901b17845561010c565b600084815260208120601f198516915b828110156101a55787850151825560209485019460019092019101610185565b50848210156101c35786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b610986806101e16000396000f3fe6080604052600436106100c05760003560e01c8063313ce56711610074578063a9059cbb1161004e578063a9059cbb146101fa578063d0e30db01461021a578063dd62ed3e1461022257600080fd5b8063313ce5671461018c57806370a08231146101b857806395d89b41146101e557600080fd5b806318160ddd116100a557806318160ddd1461012f57806323b872dd1461014c5780632e1a7d4d1461016c57600080fd5b806306fdde03146100d4578063095ea7b3146100ff57600080fd5b366100cf576100cd61025a565b005b600080fd5b3480156100e057600080fd5b506100e96102b5565b6040516100f69190610745565b60405180910390f35b34801561010b57600080fd5b5061011f61011a3660046107da565b610343565b60405190151581526020016100f6565b34801561013b57600080fd5b50475b6040519081526020016100f6565b34801561015857600080fd5b5061011f610167366004610804565b6103bd565b34801561017857600080fd5b506100cd610187366004610841565b610647565b34801561019857600080fd5b506002546101a69060ff1681565b60405160ff90911681526020016100f6565b3480156101c457600080fd5b5061013e6101d336600461085a565b60036020526000908152604090205481565b3480156101f157600080fd5b506100e9610724565b34801561020657600080fd5b5061011f6102153660046107da565b610731565b6100cd61025a565b34801561022e57600080fd5b5061013e61023d366004610875565b600460209081526000928352604080842090915290825290205481565b33600090815260036020526040812080543492906102799084906108d7565b909155505060405134815233907fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c9060200160405180910390a2565b600080546102c2906108ea565b80601f01602080910402602001604051908101604052809291908181526020018280546102ee906108ea565b801561033b5780601f106103105761010080835404028352916020019161033b565b820191906000526020600020905b81548152906001019060200180831161031e57829003601f168201915b505050505081565b33600081815260046020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925906103ab9086815260200190565b60405180910390a35060015b92915050565b73ffffffffffffffffffffffffffffffffffffffff831660009081526003602052604081205482111561042b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600060248201526044015b60405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff841633148015906104a1575073ffffffffffffffffffffffffffffffffffffffff841660009081526004602090815260408083203384529091529020547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff14155b156105605773ffffffffffffffffffffffffffffffffffffffff8416600090815260046020908152604080832033845290915290205482111561051a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526020600482015260006024820152604401610422565b73ffffffffffffffffffffffffffffffffffffffff841660009081526004602090815260408083203384529091528120805484929061055a90849061093d565b90915550505b73ffffffffffffffffffffffffffffffffffffffff84166000908152600360205260408120805484929061059590849061093d565b909155505073ffffffffffffffffffffffffffffffffffffffff8316600090815260036020526040812080548492906105cf9084906108d7565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161063591815260200190565b60405180910390a35060019392505050565b3360009081526003602052604090205481111561069a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526020600482015260006024820152604401610422565b33600090815260036020526040812080548392906106b990849061093d565b9091555050604051339082156108fc029083906000818181858888f193505050501580156106eb573d6000803e3d6000fd5b5060405181815233907f7fcf532c15f0a6db0bd6d0e038bea71d30d808c7d98cb3bf7268a95bf5081b659060200160405180910390a250565b600180546102c2906108ea565b600061073e3384846103bd565b9392505050565b602081526000825180602084015260005b818110156107735760208186018101516040868401015201610756565b5060006040828501015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011684010191505092915050565b803573ffffffffffffffffffffffffffffffffffffffff811681146107d557600080fd5b919050565b600080604083850312156107ed57600080fd5b6107f6836107b1565b946020939093013593505050565b60008060006060848603121561081957600080fd5b610822846107b1565b9250610830602085016107b1565b929592945050506040919091013590565b60006020828403121561085357600080fd5b5035919050565b60006020828403121561086c57600080fd5b61073e826107b1565b6000806040838503121561088857600080fd5b610891836107b1565b915061089f602084016107b1565b90509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b808201808211156103b7576103b76108a8565b600181811c908216806108fe57607f821691505b602082108103610937577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b818103818111156103b7576103b76108a856fea264697066735822122008d7fc4e09519c5dd9f356b03596f6829a151d0bc7682533f9ceab4e459f5ee264736f6c634300081a003360c060405234801561001057600080fd5b5060405161106f38038061106f83398101604081905261002f916100db565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461006357604051632b2add3d60e01b815260040160405180910390fd5b600380546001600160a01b0319166001600160a01b0385811691909117909155828116608052811660a0526040517f80699e81136d69cb8367ad52a994e25c722a86da654b561d0c14b61a777e7ac590600090a150505061011e565b80516001600160a01b03811681146100d657600080fd5b919050565b6000806000606084860312156100f057600080fd5b6100f9846100bf565b9250610107602085016100bf565b9150610115604085016100bf565b90509250925092565b60805160a051610f2561014a60003960006101e50152600081816102b9015261045b0152610f256000f3fe608060405234801561001057600080fd5b50600436106100f55760003560e01c806397770dff11610097578063c63585cc11610066578063c63585cc14610273578063d7fd7afb14610286578063d936a012146102b4578063ee2815ba146102db57600080fd5b806397770dff1461021a578063a7cb05071461022d578063c39aca3714610240578063c62178ac1461025357600080fd5b8063513a9c05116100d3578063513a9c051461018a578063569541b9146101c0578063842da36d146101e057806391dd645f1461020757600080fd5b80630be15547146100fa5780631f0e251b1461015a5780633ce4a5bc1461016f575b600080fd5b610130610108366004610bd1565b60016020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b61016d610168366004610c13565b6102ee565b005b61013073735b14bb79463307aacbed86daf3322b1e6226ab81565b610130610198366004610bd1565b60026020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b6003546101309073ffffffffffffffffffffffffffffffffffffffff1681565b6101307f000000000000000000000000000000000000000000000000000000000000000081565b61016d610215366004610c35565b610402565b61016d610228366004610c13565b610526565b61016d61023b366004610c61565b610633565b61016d61024e366004610c83565b6106ce565b6004546101309073ffffffffffffffffffffffffffffffffffffffff1681565b610130610281366004610d53565b6108cd565b6102a6610294366004610bd1565b60006020819052908152604090205481565b604051908152602001610151565b6101307f000000000000000000000000000000000000000000000000000000000000000081565b61016d6102e9366004610c35565b610a02565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461033b576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116610388576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600480547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527f3ade88e3922d64780e1bf4460d364c2970b69da813f9c0c07a1c187b5647636c906020015b60405180910390a150565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461044f576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600354600090610497907f00000000000000000000000000000000000000000000000000000000000000009073ffffffffffffffffffffffffffffffffffffffff16846108cd565b60008481526002602090815260409182902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff85169081179091558251878152918201529192507f0ecec485166da6139b13bb7e033e9446e2d35348e80ebf1180d4afe2dba1704e910160405180910390a1505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610573576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff81166105c0576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527fdba79d534382d1a8ae108e4c8ecb27c6ae42ab8b91d44eedf88bd329f3868d5e906020016103f7565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610680576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000828152602081815260409182902083905581518481529081018390527f49f492222906ac486c3c1401fa545626df1f0c0e5a77a05597ea2ed66af9850d91015b60405180910390a15050565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461071b576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff831673735b14bb79463307aacbed86daf3322b1e6226ab1480610768575073ffffffffffffffffffffffffffffffffffffffff831630145b1561079f576040517f82d5d76a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f47e7ef2400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152602482018690528616906347e7ef24906044016020604051808303816000875af1158015610814573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108389190610d96565b506040517fde43156e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84169063de43156e906108939089908990899088908890600401610e01565b600060405180830381600087803b1580156108ad57600080fd5b505af11580156108c1573d6000803e3d6000fd5b50505050505050505050565b60008060006108dc8585610ad3565b6040517fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606084811b8216602084015283901b16603482015291935091508690604801604051602081830303815290604052805190602001206040516020016109c29291907fff00000000000000000000000000000000000000000000000000000000000000815260609290921b7fffffffffffffffffffffffffffffffffffffffff00000000000000000000000016600183015260158201527f96e8ac4277198ff8b6f785478aa9a39f403cb768dd02cbee326c3e7da348845f603582015260550190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291905280516020909101209695505050505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610a4f576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008281526001602090815260409182902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff85169081179091558251858152918201527fd1b36d30f6248e97c473b4d1348ca164a4ef6759022f54a58ec200326c39c45d91016106c2565b6000808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603610b3b576040517fcb1e7cfe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1610610b75578284610b78565b83835b909250905073ffffffffffffffffffffffffffffffffffffffff8216610bca576040517f78b507da00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b9250929050565b600060208284031215610be357600080fd5b5035919050565b803573ffffffffffffffffffffffffffffffffffffffff81168114610c0e57600080fd5b919050565b600060208284031215610c2557600080fd5b610c2e82610bea565b9392505050565b60008060408385031215610c4857600080fd5b82359150610c5860208401610bea565b90509250929050565b60008060408385031215610c7457600080fd5b50508035926020909101359150565b60008060008060008060a08789031215610c9c57600080fd5b863567ffffffffffffffff811115610cb357600080fd5b87016060818a031215610cc557600080fd5b9550610cd360208801610bea565b945060408701359350610ce860608801610bea565b9250608087013567ffffffffffffffff811115610d0457600080fd5b8701601f81018913610d1557600080fd5b803567ffffffffffffffff811115610d2c57600080fd5b896020828401011115610d3e57600080fd5b60208201935080925050509295509295509295565b600080600060608486031215610d6857600080fd5b610d7184610bea565b9250610d7f60208501610bea565b9150610d8d60408501610bea565b90509250925092565b600060208284031215610da857600080fd5b81518015158114610c2e57600080fd5b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b60808152600086357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1883603018112610e3957600080fd5b870160208101903567ffffffffffffffff811115610e5657600080fd5b803603821315610e6557600080fd5b60606080850152610e7a60e085018284610db8565b91505073ffffffffffffffffffffffffffffffffffffffff610e9e60208a01610bea565b1660a0840152604088013560c084015273ffffffffffffffffffffffffffffffffffffffff871660208401528560408401528281036060840152610ee3818587610db8565b9897505050505050505056fea2646970667358221220fea45cb058045b493e646c8b9505ea080ab95fd7ed4498b922d179cf1abec08e64736f6c634300081a003360e060405234801561001057600080fd5b50604051611bb9380380611bb983398101604081905261002f9161020e565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461006357604051632b2add3d60e01b815260040160405180910390fd5b6001600160a01b038216158061008057506001600160a01b038116155b1561009e5760405163d92e233d60e01b815260040160405180910390fd5b60066100aa8982610360565b5060076100b78882610360565b5060ff861660c05260808590528360028111156100d6576100d661041e565b60a08160028111156100ea576100ea61041e565b905250600192909255600080546001600160a01b039283166001600160a01b03199182161790915560088054929093169116179055506104349350505050565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261015157600080fd5b81516001600160401b0381111561016a5761016a61012a565b604051601f8201601f19908116603f011681016001600160401b03811182821017156101985761019861012a565b6040528181528382016020018510156101b057600080fd5b60005b828110156101cf576020818601810151838301820152016101b3565b506000918101602001919091529392505050565b8051600381106101f257600080fd5b919050565b80516001600160a01b03811681146101f257600080fd5b600080600080600080600080610100898b03121561022b57600080fd5b88516001600160401b0381111561024157600080fd5b61024d8b828c01610140565b60208b015190995090506001600160401b0381111561026b57600080fd5b6102778b828c01610140565b975050604089015160ff8116811461028e57600080fd5b60608a015190965094506102a460808a016101e3565b60a08a015190945092506102ba60c08a016101f7565b91506102c860e08a016101f7565b90509295985092959890939650565b600181811c908216806102eb57607f821691505b60208210810361030b57634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111561035b57806000526020600020601f840160051c810160208510156103385750805b601f840160051c820191505b818110156103585760008155600101610344565b50505b505050565b81516001600160401b038111156103795761037961012a565b61038d8161038784546102d7565b84610311565b6020601f8211600181146103c157600083156103a95750848201515b600019600385901b1c1916600184901b178455610358565b600084815260208120601f198516915b828110156103f157878501518255602094850194600190920191016103d1565b508482101561040f5786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b634e487b7160e01b600052602160045260246000fd5b60805160a05160c05161174861047160003960006102170152600061033a0152600081816102eb01528181610ad70152610bdd01526117486000f3fe608060405234801561001057600080fd5b50600436106101985760003560e01c80638b851b95116100e3578063ccc775991161008c578063eddeb12311610066578063eddeb12314610431578063f2441b3214610444578063f687d12a1461046457600080fd5b8063ccc77599146103a4578063d9eeebed146103b7578063dd62ed3e146103eb57600080fd5b8063a9059cbb116100bd578063a9059cbb14610369578063c70126261461037c578063c835d7cc1461038f57600080fd5b80638b851b951461030d57806395d89b411461032d578063a3413d031461033557600080fd5b80633ce4a5bc116101455780634d8943bb1161011f5780634d8943bb146102a757806370a08231146102b057806385e1f4d0146102e657600080fd5b80633ce4a5bc1461024157806342966c681461028157806347e7ef241461029457600080fd5b806318160ddd1161017657806318160ddd146101f557806323b872dd146101fd578063313ce5671461021057600080fd5b806306fdde031461019d578063091d2788146101bb578063095ea7b3146101d2575b600080fd5b6101a5610477565b6040516101b29190611327565b60405180910390f35b6101c460015481565b6040519081526020016101b2565b6101e56101e0366004611366565b610509565b60405190151581526020016101b2565b6005546101c4565b6101e561020b366004611392565b610520565b60405160ff7f00000000000000000000000000000000000000000000000000000000000000001681526020016101b2565b61025c73735b14bb79463307aacbed86daf3322b1e6226ab81565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101b2565b6101e561028f3660046113d3565b6105b7565b6101e56102a2366004611366565b6105cb565b6101c460025481565b6101c46102be3660046113ec565b73ffffffffffffffffffffffffffffffffffffffff1660009081526003602052604090205490565b6101c47f000000000000000000000000000000000000000000000000000000000000000081565b60085461025c9073ffffffffffffffffffffffffffffffffffffffff1681565b6101a561071f565b61035c7f000000000000000000000000000000000000000000000000000000000000000081565b6040516101b29190611409565b6101e5610377366004611366565b61072e565b6101e561038a366004611479565b61073b565b6103a261039d3660046113ec565b61088a565b005b6103a26103b23660046113ec565b61099e565b6103bf610aab565b6040805173ffffffffffffffffffffffffffffffffffffffff90931683526020830191909152016101b2565b6101c46103f9366004611571565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260046020908152604080832093909416825291909152205490565b6103a261043f3660046113d3565b610cc9565b60005461025c9073ffffffffffffffffffffffffffffffffffffffff1681565b6103a26104723660046113d3565b610d4b565b606060068054610486906115aa565b80601f01602080910402602001604051908101604052809291908181526020018280546104b2906115aa565b80156104ff5780601f106104d4576101008083540402835291602001916104ff565b820191906000526020600020905b8154815290600101906020018083116104e257829003601f168201915b5050505050905090565b6000610516338484610dcd565b5060015b92915050565b600061052d848484610ed6565b73ffffffffffffffffffffffffffffffffffffffff8416600090815260046020908152604080832033845290915290205482811015610598576040517f10bad14700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6105ac85336105a7868561162c565b610dcd565b506001949350505050565b60006105c33383611091565b506001919050565b60003373735b14bb79463307aacbed86daf3322b1e6226ab14801590610609575060005473ffffffffffffffffffffffffffffffffffffffff163314155b801561062d575060085473ffffffffffffffffffffffffffffffffffffffff163314155b15610664576040517fddb5de5e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61066e83836111d3565b6040517f735b14bb79463307aacbed86daf3322b1e6226ab000000000000000000000000602082015273ffffffffffffffffffffffffffffffffffffffff8416907f67fc7bdaed5b0ec550d8706b87d60568ab70c6b781263c70101d54cd1564aab390603401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529082905261070e91869061163f565b60405180910390a250600192915050565b606060078054610486906115aa565b6000610516338484610ed6565b6000806000610748610aab565b6040517f23b872dd00000000000000000000000000000000000000000000000000000000815233600482015273735b14bb79463307aacbed86daf3322b1e6226ab602482015260448101829052919350915073ffffffffffffffffffffffffffffffffffffffff8316906323b872dd906064016020604051808303816000875af11580156107da573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107fe9190611661565b610834576040517f0a7cd6d600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61083e3385611091565b60025460405133917f9ffbffc04a397460ee1dbe8c9503e098090567d6b7f4b3c02a8617d800b6d9559161087791899189918791611683565b60405180910390a2506001949350505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab146108d7576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116610924576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527fd55614e962c5fd6ece71614f6348d702468a997a394dd5e5c1677950226d97ae906020015b60405180910390a150565b3373735b14bb79463307aacbed86daf3322b1e6226ab146109eb576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116610a38576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600880547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527f88815d964e380677e86d817e7d65dea59cb7b4c3b5b7a0c8ec7ea4a74f90a38790602001610993565b600080546040517f0be155470000000000000000000000000000000000000000000000000000000081527f000000000000000000000000000000000000000000000000000000000000000060048201528291829173ffffffffffffffffffffffffffffffffffffffff90911690630be1554790602401602060405180830381865afa158015610b3e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b6291906116b2565b905073ffffffffffffffffffffffffffffffffffffffff8116610bb1576040517f78fff39600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080546040517fd7fd7afb0000000000000000000000000000000000000000000000000000000081527f0000000000000000000000000000000000000000000000000000000000000000600482015273ffffffffffffffffffffffffffffffffffffffff9091169063d7fd7afb90602401602060405180830381865afa158015610c40573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c6491906116cf565b905080600003610ca0576040517fe661aed000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060025460015483610cb391906116e8565b610cbd91906116ff565b92959294509192505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610d16576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60028190556040518181527fef13af88e424b5d15f49c77758542c1938b08b8b95b91ed0751f98ba99000d8f90602001610993565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610d98576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018190556040518181527fff5788270f43bfc1ca41c503606d2594aa3023a1a7547de403a3e2f146a4a80a90602001610993565b73ffffffffffffffffffffffffffffffffffffffff8316610e1a576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216610e67576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff83811660008181526004602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8316610f23576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216610f70576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff831660009081526003602052604090205481811015610fd0576040517ffe382aa700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610fda828261162c565b73ffffffffffffffffffffffffffffffffffffffff808616600090815260036020526040808220939093559085168152908120805484929061101d9084906116ff565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161108391815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff82166110de576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff82166000908152600360205260409020548181101561113e576040517ffe382aa700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611148828261162c565b73ffffffffffffffffffffffffffffffffffffffff84166000908152600360205260408120919091556005805484929061118390849061162c565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90602001610ec9565b73ffffffffffffffffffffffffffffffffffffffff8216611220576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b806005600082825461123291906116ff565b909155505073ffffffffffffffffffffffffffffffffffffffff82166000908152600360205260408120805483929061126c9084906116ff565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6000815180845260005b818110156112e9576020818501810151868301820152016112cd565b5060006020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b60208152600061133a60208301846112c3565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff8116811461136357600080fd5b50565b6000806040838503121561137957600080fd5b823561138481611341565b946020939093013593505050565b6000806000606084860312156113a757600080fd5b83356113b281611341565b925060208401356113c281611341565b929592945050506040919091013590565b6000602082840312156113e557600080fd5b5035919050565b6000602082840312156113fe57600080fd5b813561133a81611341565b6020810160038310611444577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000806040838503121561148c57600080fd5b823567ffffffffffffffff8111156114a357600080fd5b8301601f810185136114b457600080fd5b803567ffffffffffffffff8111156114ce576114ce61144a565b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8501160116810181811067ffffffffffffffff8211171561153a5761153a61144a565b60405281815282820160200187101561155257600080fd5b8160208401602083013760006020928201830152969401359450505050565b6000806040838503121561158457600080fd5b823561158f81611341565b9150602083013561159f81611341565b809150509250929050565b600181811c908216806115be57607f821691505b6020821081036115f7577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8181038181111561051a5761051a6115fd565b60408152600061165260408301856112c3565b90508260208301529392505050565b60006020828403121561167357600080fd5b8151801515811461133a57600080fd5b60808152600061169660808301876112c3565b6020830195909552506040810192909252606090910152919050565b6000602082840312156116c457600080fd5b815161133a81611341565b6000602082840312156116e157600080fd5b5051919050565b808202811582820484141761051a5761051a6115fd565b8082018082111561051a5761051a6115fd56fea26469706673582212204013e39523742118b3f2227e145ee7e48176ba6aebead33c596dca2acb59a74c64736f6c634300081a0033a26469706673582212202eff699725ecf2c357000339994ef6cd606d9de44ffb7e9c2439d124a0d6993364736f6c634300081a0033", + Bin: "0x6080604052600c8054600160ff199182168117909255601f80549091169091179055348015602c57600080fd5b5061df6a8061003c6000396000f3fe608060405234801561001057600080fd5b50600436106102f45760003560e01c80638ce7ef0511610191578063d27b0427116100e3578063dfbdf60011610097578063f1f87f4011610071578063f1f87f401461049d578063f2413096146104a5578063fa7626d4146104ad57600080fd5b8063dfbdf60014610485578063e13aba481461048d578063e20c9f711461049557600080fd5b8063d591221f116100c8578063d591221f1461046d578063d97136a214610475578063dcba486a1461047d57600080fd5b8063d27b04271461045d578063d509b16c1461046557600080fd5b8063b549984c11610145578063ba414fa61161011f578063ba414fa614610435578063d04cda981461044d578063d1fd32911461045557600080fd5b8063b549984c1461041d578063b5508aa914610425578063b79cad091461042d57600080fd5b8063a4aa6c7c11610176578063a4aa6c7c14610405578063ae9687dc1461040d578063b0464fdc1461041557600080fd5b80638ce7ef05146103e8578063916a17c6146103f057600080fd5b80634b6295091161024a57806366d9a9a0116101fe5780637f924c4e116101d85780637f924c4e146103c357806380326680146103cb57806385226c81146103d357600080fd5b806366d9a9a01461039e5780636ff45850146103b357806370557298146103bb57600080fd5b8063513999621161022f578063513999621461038657806358fdbbe01461038e5780635f01db7e1461039657600080fd5b80634b629509146103765780634cfc0aaa1461037e57600080fd5b806328438826116102ac5780633be9ec80116102865780633be9ec801461035e5780633e5e3c23146103665780633f7286f41461036e57600080fd5b806328438826146103395780632ade3880146103415780632f6254fc1461035657600080fd5b80630a9254e4116102dd5780630a9254e41461030b5780631142744e146103135780631ed7831c1461031b57600080fd5b80630393998b146102f95780630809dfef14610303575b600080fd5b6103016104ba565b005b6103016105bc565b61030161074a565b610301610e2c565b610323610f10565b6040516103309190619053565b60405180910390f35b610301610f72565b6103496111bd565b60405161033091906190ef565b6103016112ff565b610301611470565b61032361165d565b6103236116bd565b61030161171d565b6103016117f0565b6103016118c9565b610301611c46565b610301611d19565b6103a6611e86565b6040516103309190619255565b610301612008565b610301612218565b610301612468565b61030161268c565b6103db612760565b60405161033091906192f3565b610301612830565b6103f8612a30565b604051610330919061936a565b610301612b2b565b610301612ce0565b6103f8612f6d565b610301613068565b6103db61313a565b61030161320a565b61043d61359c565b6040519015158152602001610330565b610301613670565b6103016137b4565b6103016138f7565b610301613a3a565b6103016140ce565b6103016141b2565b610301614338565b6103016145bb565b6103016146fe565b6103236149a8565b610301614a08565b610301614b4e565b601f5461043d9060ff1681565b604051630618f58760e51b81527f2b2add3d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b15801561052657600080fd5b505af115801561053a573d6000803e3d6000fd5b5050601f546040517feddeb123000000000000000000000000000000000000000000000000000000008152600a60048201526101009091046001600160a01b0316925063eddeb12391506024015b600060405180830381600087803b1580156105a257600080fd5b505af11580156105b6573d6000803e3d6000fd5b50505050565b60225460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561061557600080fd5b505af1158015610629573d6000803e3d6000fd5b5050604051630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b15801561069957600080fd5b505af11580156106ad573d6000803e3d6000fd5b5050601f546040517f47e7ef2400000000000000000000000000000000000000000000000000000000815260006004820152620186a060248201526101009091046001600160a01b031692506347e7ef2491506044015b6020604051808303816000875af1158015610723573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107479190619401565b50565b602480547fffffffffffffffffffffffff000000000000000000000000000000000000000090811630179091556025805490911661123417905560405161079090618f73565b604051809103906000f0801580156107ac573d6000803e3d6000fd5b50602380547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03928316908117909155604080518082018252600f81527f476174657761795a45564d2e736f6c000000000000000000000000000000000060208201526024805492519081019390935292166044820152610890919060640160408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f485cc95500000000000000000000000000000000000000000000000000000000179052614daa565b602280546001600160a01b03929092167fffffffffffffffffffffffff00000000000000000000000000000000000000009283168117909155602180549092168117909155604080517f3ce4a5bc0000000000000000000000000000000000000000000000000000000081529051633ce4a5bc916004808201926020929091908290030181865afa158015610929573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061094d919061943f565b602680547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039290921691821790556040517f06447d560000000000000000000000000000000000000000000000000000000081526004810191909152737109709ecfa91a80626ff3989d68f67f5b1dd12d906306447d5690602401600060405180830381600087803b1580156109eb57600080fd5b505af11580156109ff573d6000803e3d6000fd5b505050506000806000604051610a1490618f80565b6001600160a01b03938416815291831660208301529091166040820152606001604051809103906000f080158015610a50573d6000803e3d6000fd5b50602080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03928316908117909155602154604051601293600193849360009391921690610aa690618f8d565b610ab59695949392919061945a565b604051809103906000f080158015610ad1573d6000803e3d6000fd5b50601f80547fffffffffffffffffffffff0000000000000000000000000000000000000000ff166101006001600160a01b03938416810291909117918290556020546040517fee2815ba00000000000000000000000000000000000000000000000000000000815260016004820152919092048316602482015291169063ee2815ba90604401600060405180830381600087803b158015610b7157600080fd5b505af1158015610b85573d6000803e3d6000fd5b50506020546040517fa7cb050700000000000000000000000000000000000000000000000000000000815260016004820181905260248201526001600160a01b03909116925063a7cb05079150604401600060405180830381600087803b158015610bef57600080fd5b505af1158015610c03573d6000803e3d6000fd5b50506026546040517fc88a5e6d0000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152633b9aca006024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c88a5e6d9150604401600060405180830381600087803b158015610c8357600080fd5b505af1158015610c97573d6000803e3d6000fd5b50506022546040517fc88a5e6d0000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152633b9aca006024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c88a5e6d9150604401600060405180830381600087803b158015610d1757600080fd5b505af1158015610d2b573d6000803e3d6000fd5b5050601f54602480546040517f47e7ef240000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620186a09281019290925261010090920490911692506347e7ef2491506044016020604051808303816000875af1158015610da9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dcd9190619401565b507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b03166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156105a257600080fd5b604051630618f58760e51b81527fddb5de5e000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b158015610e9857600080fd5b505af1158015610eac573d6000803e3d6000fd5b5050601f54602480546040517f47e7ef240000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620186a09281019290925261010090920490911692506347e7ef249150604401610704565b60606016805480602002602001604051908101604052809291908181526020018280548015610f6857602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610f4a575b5050505050905090565b601f546025546040516370a0823160e01b81526001600160a01b0391821660048201526000926101009004909116906370a0823190602401602060405180830381865afa158015610fc7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610feb919061954f565b9050610ff8600082614dc9565b601f54602480546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201526207a12092810183905291926101009004169063095ea7b3906044016020604051808303816000875af1158015611070573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110949190619401565b50604051630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b15801561110157600080fd5b505af1158015611115573d6000803e3d6000fd5b5050601f546025546040517f23b872dd000000000000000000000000000000000000000000000000000000008152600060048201526001600160a01b039182166024820152604481018690526101009092041692506323b872dd91506064015b6020604051808303816000875af1158015611194573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111b89190619401565b505050565b6060601e805480602002602001604051908101604052809291908181526020016000905b828210156112f657600084815260208082206040805180820182526002870290920180546001600160a01b03168352600181018054835181870281018701909452808452939591948681019491929084015b828210156112df57838290600052602060002001805461125290619568565b80601f016020809104026020016040519081016040528092919081815260200182805461127e90619568565b80156112cb5780601f106112a0576101008083540402835291602001916112cb565b820191906000526020600020905b8154815290600101906020018083116112ae57829003601f168201915b505050505081526020019060010190611233565b5050505081525050815260200190600101906111e1565b50505050905090565b60265460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561135857600080fd5b505af115801561136c573d6000803e3d6000fd5b5050601f546040517fc835d7cc00000000000000000000000000000000000000000000000000000000815261321160048201526101009091046001600160a01b0316925063c835d7cc9150602401600060405180830381600087803b1580156113d457600080fd5b505af11580156113e8573d6000803e3d6000fd5b5050505061146e601f60019054906101000a90046001600160a01b03166001600160a01b031663f2441b326040518163ffffffff1660e01b8152600401602060405180830381865afa158015611442573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611466919061943f565b613211614e51565b565b60265460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156114c957600080fd5b505af11580156114dd573d6000803e3d6000fd5b50506020546040517fa7cb050700000000000000000000000000000000000000000000000000000000815260016004820152600060248201526001600160a01b03909116925063a7cb05079150604401600060405180830381600087803b15801561154757600080fd5b505af115801561155b573d6000803e3d6000fd5b5050604051630618f58760e51b81527fe661aed0000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e091506024015b600060405180830381600087803b1580156115cc57600080fd5b505af11580156115e0573d6000803e3d6000fd5b50505050600080601f60019054906101000a90046001600160a01b03166001600160a01b031663d9eeebed6040518163ffffffff1660e01b81526004016040805180830381865afa158015611639573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105b691906195b5565b60606018805480602002602001604051908101604052809291908181526020018280548015610f68576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311610f4a575050505050905090565b60606017805480602002602001604051908101604052809291908181526020018280548015610f68576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311610f4a575050505050905090565b604051630618f58760e51b81527f2b2add3d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b15801561178957600080fd5b505af115801561179d573d6000803e3d6000fd5b5050601f546040517fccc7759900000000000000000000000000000000000000000000000000000000815261321160048201526101009091046001600160a01b0316925063ccc775999150602401610588565b604051630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b15801561185c57600080fd5b505af1158015611870573d6000803e3d6000fd5b5050601f546040517f095ea7b300000000000000000000000000000000000000000000000000000000815260006004820152600a60248201526101009091046001600160a01b0316925063095ea7b39150604401610704565b60265460405163ca669fa760e01b81526001600160a01b039091166004820152600a908190737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561192757600080fd5b505af115801561193b573d6000803e3d6000fd5b5050601f546040517ff687d12a000000000000000000000000000000000000000000000000000000008152600481018690526101009091046001600160a01b0316925063f687d12a9150602401600060405180830381600087803b1580156119a257600080fd5b505af11580156119b6573d6000803e3d6000fd5b505060265460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b158015611a1357600080fd5b505af1158015611a27573d6000803e3d6000fd5b5050601f546040517feddeb123000000000000000000000000000000000000000000000000000000008152600481018590526101009091046001600160a01b0316925063eddeb1239150602401600060405180830381600087803b158015611a8e57600080fd5b505af1158015611aa2573d6000803e3d6000fd5b5050601f546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526101009091046001600160a01b03166004820181905260006024830152925063095ea7b391506044016020604051808303816000875af1158015611b15573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b399190619401565b507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b031663f48448146040518163ffffffff1660e01b8152600401600060405180830381600087803b158015611b9857600080fd5b505af1158015611bac573d6000803e3d6000fd5b5050601f546025546040805160609290921b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000001660208301528051601481840301815260348301918290527fc7012626000000000000000000000000000000000000000000000000000000009091526001600160a01b0361010090930492909216935063c7012626925061117591906001906038016195e1565b604051630618f58760e51b81527f2b2add3d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b158015611cb257600080fd5b505af1158015611cc6573d6000803e3d6000fd5b5050601f546040517fc835d7cc00000000000000000000000000000000000000000000000000000000815261321160048201526101009091046001600160a01b0316925063c835d7cc9150602401610588565b60265460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015611d7257600080fd5b505af1158015611d86573d6000803e3d6000fd5b5050601f546040517ff687d12a000000000000000000000000000000000000000000000000000000008152600a60048201526101009091046001600160a01b0316925063f687d12a9150602401600060405180830381600087803b158015611ded57600080fd5b505af1158015611e01573d6000803e3d6000fd5b5050505061146e600a601f60019054906101000a90046001600160a01b03166001600160a01b031663091d27886040518163ffffffff1660e01b8152600401602060405180830381865afa158015611e5d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e81919061954f565b614dc9565b6060601b805480602002602001604051908101604052809291908181526020016000905b828210156112f65783829060005260206000209060020201604051806040016040529081600082018054611edd90619568565b80601f0160208091040260200160405190810160405280929190818152602001828054611f0990619568565b8015611f565780601f10611f2b57610100808354040283529160200191611f56565b820191906000526020600020905b815481529060010190602001808311611f3957829003601f168201915b5050505050815260200160018201805480602002602001604051908101604052809291908181526020018280548015611ff057602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019060040190602082600301049283019260010382029150808411611f9d5790505b50505050508152505081526020019060010190611eaa565b601f546025546040516370a0823160e01b81526001600160a01b0391821660048201526000926101009004909116906370a0823190602401602060405180830381865afa15801561205d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612081919061954f565b905061208e600082614dc9565b601f54602480546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201526207a12092810183905291926101009004169063095ea7b3906044016020604051808303816000875af1158015612106573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061212a9190619401565b50604051630618f58760e51b81527ffe382aa7000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b15801561219757600080fd5b505af11580156121ab573d6000803e3d6000fd5b5050601f54602480546025546040517f23b872dd0000000000000000000000000000000000000000000000000000000081526001600160a01b039283166004820152908216928101929092526044820186905261010090920490911692506323b872dd9150606401611175565b601f546025546040516370a0823160e01b81526001600160a01b0391821660048201526000926101009004909116906370a0823190602401602060405180830381865afa15801561226d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612291919061954f565b905061229e600082614dc9565b601f54602480546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015261c35092810183905291926101009004169063095ea7b3906044016020604051808303816000875af1158015612315573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123399190619401565b50601f54602480546025546040517f23b872dd0000000000000000000000000000000000000000000000000000000081526001600160a01b0392831660048201529082169281019290925260448201849052610100909204909116906323b872dd906064015b6020604051808303816000875af11580156123be573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123e29190619401565b50601f546025546040516370a0823160e01b81526001600160a01b0391821660048201526000926101009004909116906370a0823190602401602060405180830381865afa158015612438573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061245c919061954f565b90506111b88282614dc9565b6000601f60019054906101000a90046001600160a01b03166001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156124bd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124e1919061954f565b90506124f0620186a082614dc9565b60225460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561254957600080fd5b505af115801561255d573d6000803e3d6000fd5b5050601f54602480546040517f47e7ef240000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620186a09281019290925261010090920490911692506347e7ef2491506044016020604051808303816000875af11580156125db573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125ff9190619401565b506000601f60019054906101000a90046001600160a01b03166001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612655573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612679919061954f565b905061268862030d4082614dc9565b5050565b604051630618f58760e51b81527ffe382aa7000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b1580156126f857600080fd5b505af115801561270c573d6000803e3d6000fd5b5050601f546040517f42966c68000000000000000000000000000000000000000000000000000000008152620249f060048201526101009091046001600160a01b031692506342966c689150602401610704565b6060601a805480602002602001604051908101604052809291908181526020016000905b828210156112f65783829060005260206000200180546127a390619568565b80601f01602080910402602001604051908101604052809291908181526020018280546127cf90619568565b801561281c5780601f106127f15761010080835404028352916020019161281c565b820191906000526020600020905b8154815290600101906020018083116127ff57829003601f168201915b505050505081526020019060010190612784565b601f546025546040516370a0823160e01b81526001600160a01b0391821660048201526000926101009004909116906370a0823190602401602060405180830381865afa158015612885573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128a9919061954f565b90506128b6600082614dc9565b601f54602480546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201526207a12092810183905291926101009004169063095ea7b3906044016020604051808303816000875af115801561292e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129529190619401565b50604051630618f58760e51b81527ffe382aa7000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b1580156129bf57600080fd5b505af11580156129d3573d6000803e3d6000fd5b5050601f546025546040517fa9059cbb0000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201526024810186905261010090920416925063a9059cbb9150604401611175565b6060601d805480602002602001604051908101604052809291908181526020016000905b828210156112f65760008481526020908190206040805180820182526002860290920180546001600160a01b03168352600181018054835181870281018701909452808452939491938583019392830182828015612b1357602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019060040190602082600301049283019260010382029150808411612ac05790505b50505050508152505081526020019060010190612a54565b601f54602480546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201526207a12092810183905291926101009004169063095ea7b3906044016020604051808303816000875af1158015612ba3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612bc79190619401565b50604051630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b158015612c3457600080fd5b505af1158015612c48573d6000803e3d6000fd5b5050601f546040517fa9059cbb00000000000000000000000000000000000000000000000000000000815260006004820152602481018590526101009091046001600160a01b0316925063a9059cbb91506044015b6020604051808303816000875af1158015612cbc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126889190619401565b6000601f60019054906101000a90046001600160a01b03166001600160a01b03166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa158015612d35573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052612d5d91908101906196cb565b9050612d9e6040518060400160405280600581526020017f544f4b454e00000000000000000000000000000000000000000000000000000081525082614eb2565b6000601f60019054906101000a90046001600160a01b03166001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa158015612df3573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052612e1b91908101906196cb565b9050612e5c6040518060400160405280600381526020017f544b4e000000000000000000000000000000000000000000000000000000000081525082614eb2565b6000601f60019054906101000a90046001600160a01b03166001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015612eb1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ed59190619714565b9050612ee560128260ff16614dc9565b6000601f60019054906101000a90046001600160a01b03166001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612f3a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f5e919061954f565b90506105b6620186a082614dc9565b6060601c805480602002602001604051908101604052809291908181526020016000905b828210156112f65760008481526020908190206040805180820182526002860290920180546001600160a01b0316835260018101805483518187028101870190945280845293949193858301939283018282801561305057602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019060040190602082600301049283019260010382029150808411612ffd5790505b50505050508152505081526020019060010190612f91565b604051630618f58760e51b81527f2b2add3d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b1580156130d457600080fd5b505af11580156130e8573d6000803e3d6000fd5b5050601f546040517ff687d12a000000000000000000000000000000000000000000000000000000008152600a60048201526101009091046001600160a01b0316925063f687d12a9150602401610588565b60606019805480602002602001604051908101604052809291908181526020016000905b828210156112f657838290600052602060002001805461317d90619568565b80601f01602080910402602001604051908101604052809291908181526020018280546131a990619568565b80156131f65780601f106131cb576101008083540402835291602001916131f6565b820191906000526020600020905b8154815290600101906020018083116131d957829003601f168201915b50505050508152602001906001019061315e565b60265460405163ca669fa760e01b81526001600160a01b039091166004820152600a906305f5e10090737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561326c57600080fd5b505af1158015613280573d6000803e3d6000fd5b5050601f546040517ff687d12a000000000000000000000000000000000000000000000000000000008152600481018690526101009091046001600160a01b0316925063f687d12a9150602401600060405180830381600087803b1580156132e757600080fd5b505af11580156132fb573d6000803e3d6000fd5b505060265460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b15801561335857600080fd5b505af115801561336c573d6000803e3d6000fd5b5050601f546040517feddeb123000000000000000000000000000000000000000000000000000000008152600481018590526101009091046001600160a01b0316925063eddeb1239150602401600060405180830381600087803b1580156133d357600080fd5b505af11580156133e7573d6000803e3d6000fd5b5050601f546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526101009091046001600160a01b031660048201819052630bebc2006024830152925063095ea7b391506044016020604051808303816000875af115801561345d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134819190619401565b50604051630618f58760e51b81527ffe382aa7000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b1580156134ee57600080fd5b505af1158015613502573d6000803e3d6000fd5b5050601f546025546040805160609290921b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000001660208301528051601481840301815260348301918290527fc7012626000000000000000000000000000000000000000000000000000000009091526001600160a01b0361010090930492909216935063c7012626925061117591906064906038016195e1565b60085460009060ff16156135b4575060085460ff1690565b6040517f667f9d70000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d600482018190527f6661696c65640000000000000000000000000000000000000000000000000000602483015260009163667f9d7090604401602060405180830381865afa158015613645573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613669919061954f565b1415905090565b60265460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156136c957600080fd5b505af11580156136dd573d6000803e3d6000fd5b5050601f546040517feddeb123000000000000000000000000000000000000000000000000000000008152600a60048201526101009091046001600160a01b0316925063eddeb1239150602401600060405180830381600087803b15801561374457600080fd5b505af1158015613758573d6000803e3d6000fd5b5050505061146e600a601f60019054906101000a90046001600160a01b03166001600160a01b0316634d8943bb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611e5d573d6000803e3d6000fd5b60265460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561380d57600080fd5b505af1158015613821573d6000803e3d6000fd5b5050604051630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b15801561389157600080fd5b505af11580156138a5573d6000803e3d6000fd5b5050601f546040517fccc77599000000000000000000000000000000000000000000000000000000008152600060048201526101009091046001600160a01b0316925063ccc775999150602401610588565b60265460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561395057600080fd5b505af1158015613964573d6000803e3d6000fd5b5050604051630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b1580156139d457600080fd5b505af11580156139e8573d6000803e3d6000fd5b5050601f546040517fc835d7cc000000000000000000000000000000000000000000000000000000008152600060048201526101009091046001600160a01b0316925063c835d7cc9150602401610588565b60265460405163ca669fa760e01b81526001600160a01b039091166004820152600a908190737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015613a9857600080fd5b505af1158015613aac573d6000803e3d6000fd5b5050601f546040517ff687d12a000000000000000000000000000000000000000000000000000000008152600481018690526101009091046001600160a01b0316925063f687d12a9150602401600060405180830381600087803b158015613b1357600080fd5b505af1158015613b27573d6000803e3d6000fd5b505060265460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b158015613b8457600080fd5b505af1158015613b98573d6000803e3d6000fd5b5050601f546040517feddeb123000000000000000000000000000000000000000000000000000000008152600481018590526101009091046001600160a01b0316925063eddeb1239150602401600060405180830381600087803b158015613bff57600080fd5b505af1158015613c13573d6000803e3d6000fd5b5050601f54602480546040516370a0823160e01b81526001600160a01b039182166004820152600095506101009093041692506370a082319101602060405180830381865afa158015613c6a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613c8e919061954f565b9050613c9d620186a082614dc9565b6000601f60019054906101000a90046001600160a01b03166001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613cf2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613d16919061954f565b9050613d25620186a082614dc9565b601f546026546040516370a0823160e01b81526001600160a01b0391821660048201526000926101009004909116906370a0823190602401602060405180830381865afa158015613d7a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613d9e919061954f565b601f546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526101009091046001600160a01b03166004820181905261c350602483015291925063095ea7b3906044016020604051808303816000875af1158015613e10573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613e349190619401565b50601f546025546040805160609290921b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000001660208301528051601481840301815260348301918290527fc7012626000000000000000000000000000000000000000000000000000000009091526001600160a01b03610100909304929092169163c701262691613ecc919061c350906038016195e1565b6020604051808303816000875af1158015613eeb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613f0f9190619401565b50601f546026546040516370a0823160e01b81526001600160a01b0391821660048201526000926101009004909116906370a0823190602401602060405180830381865afa158015613f65573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613f89919061954f565b9050613fa985613f998885619766565b613fa39190619766565b82614dc9565b601f54602480546040516370a0823160e01b81526001600160a01b0391821660048201526000936101009004909116916370a082319101602060405180830381865afa158015613ffd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614021919061954f565b905061403d866140338961c350619779565b613fa39190619779565b6000601f60019054906101000a90046001600160a01b03166001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015614092573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906140b6919061954f565b90506140c461c35082614dc9565b5050505050505050565b601f546025546040516370a0823160e01b81526001600160a01b0391821660048201526000926101009004909116906370a0823190602401602060405180830381865afa158015614123573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614147919061954f565b9050614154600082614dc9565b601f546025546040517fa9059cbb0000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015261c350602482018190529261010090049091169063a9059cbb9060440161239f565b601f54602480546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201526207a12092810183905291926101009004169063095ea7b3906044016020604051808303816000875af115801561422a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061424e9190619401565b50604051630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b1580156142bb57600080fd5b505af11580156142cf573d6000803e3d6000fd5b5050601f54602480546040517f23b872dd0000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201526000928101929092526044820186905261010090920490911692506323b872dd9150606401612c9d565b60265460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561439157600080fd5b505af11580156143a5573d6000803e3d6000fd5b5050601f546040517ff687d12a000000000000000000000000000000000000000000000000000000008152600a6004820181905293508392506101009091046001600160a01b03169063f687d12a90602401600060405180830381600087803b15801561441157600080fd5b505af1158015614425573d6000803e3d6000fd5b505060265460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b15801561448257600080fd5b505af1158015614496573d6000803e3d6000fd5b5050601f546040517feddeb123000000000000000000000000000000000000000000000000000000008152600a60048201526101009091046001600160a01b0316925063eddeb1239150602401600060405180830381600087803b1580156144fd57600080fd5b505af1158015614511573d6000803e3d6000fd5b50505050600080601f60019054906101000a90046001600160a01b03166001600160a01b031663d9eeebed6040518163ffffffff1660e01b81526004016040805180830381865afa15801561456a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061458e91906195b5565b601f5491935091506145ae9061010090046001600160a01b031683614e51565b6105b6613fa38486619766565b60265460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561461457600080fd5b505af1158015614628573d6000803e3d6000fd5b5050601f546040517fccc7759900000000000000000000000000000000000000000000000000000000815261321160048201526101009091046001600160a01b0316925063ccc775999150602401600060405180830381600087803b15801561469057600080fd5b505af11580156146a4573d6000803e3d6000fd5b5050505061146e601f60019054906101000a90046001600160a01b03166001600160a01b0316638b851b956040518163ffffffff1660e01b8152600401602060405180830381865afa158015611442573d6000803e3d6000fd5b601f54602480546040516370a0823160e01b81526001600160a01b0391821660048201526000936101009004909116916370a082319101602060405180830381865afa158015614752573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614776919061954f565b9050614785620186a082614dc9565b6000601f60019054906101000a90046001600160a01b03166001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156147da573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906147fe919061954f565b905061480d620186a082614dc9565b601f546040517f42966c6800000000000000000000000000000000000000000000000000000000815261c35060048201526101009091046001600160a01b0316906342966c68906024016020604051808303816000875af1158015614876573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061489a9190619401565b50601f54602480546040516370a0823160e01b81526001600160a01b0391821660048201526000936101009004909116916370a082319101602060405180830381865afa1580156148ef573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614913919061954f565b905061492161c35082614dc9565b6000601f60019054906101000a90046001600160a01b03166001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015614976573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061499a919061954f565b90506105b661c35082614dc9565b60606015805480602002602001604051908101604052809291908181526020018280548015610f68576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311610f4a575050505050905090565b60265460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015614a6157600080fd5b505af1158015614a75573d6000803e3d6000fd5b50506020546040517fee2815ba00000000000000000000000000000000000000000000000000000000815260016004820152600060248201526001600160a01b03909116925063ee2815ba9150604401600060405180830381600087803b158015614adf57600080fd5b505af1158015614af3573d6000803e3d6000fd5b5050604051630618f58760e51b81527f78fff396000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e091506024016115b2565b601f546025546040516370a0823160e01b81526001600160a01b0391821660048201526000926101009004909116906370a0823190602401602060405180830381865afa158015614ba3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614bc7919061954f565b9050614bd4600082614dc9565b601f54602480546040517fdd62ed3e0000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201819052928101929092526000926101009004169063dd62ed3e90604401602060405180830381865afa158015614c4a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614c6e919061954f565b9050614c7b600082614dc9565b604051630618f58760e51b81527f10bad14700000000000000000000000000000000000000000000000000000000600482015261c35090737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b158015614ceb57600080fd5b505af1158015614cff573d6000803e3d6000fd5b5050601f54602480546025546040517f23b872dd0000000000000000000000000000000000000000000000000000000081526001600160a01b039283166004820152908216928101929092526044820186905261010090920490911692506323b872dd91506064016020604051808303816000875af1158015614d86573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105b69190619401565b6000614db4618f9a565b614dbf848483614f04565b9150505b92915050565b6040517f98296c540000000000000000000000000000000000000000000000000000000081526004810183905260248101829052737109709ecfa91a80626ff3989d68f67f5b1dd12d906398296c54906044015b60006040518083038186803b158015614e3557600080fd5b505afa158015614e49573d6000803e3d6000fd5b505050505050565b6040517f515361f60000000000000000000000000000000000000000000000000000000081526001600160a01b03808416600483015282166024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063515361f690604401614e1d565b6040517ff320d963000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063f320d96390614e1d908590859060040161978c565b600080614f118584614f7f565b9050614f746040518060400160405280601d81526020017f4552433139363750726f78792e736f6c3a4552433139363750726f78790000008152508286604051602001614f5f9291906197b1565b60405160208183030381529060405285614f8b565b9150505b9392505050565b6000614f788383614fb9565b60c08101515160009015614faf57614fa884848460c00151614fd4565b9050614f78565b614fa8848461517a565b6000614fc58383615265565b614f7883836020015184614f8b565b600080614fdf615271565b90506000614fed8683615344565b9050600061500482606001518360200151856157ea565b90506000615014838389896159fc565b9050600061502182616879565b602081015181519192509060030b156150945789826040015160405160200161504b9291906197d3565b60408051601f19818403018152908290527f08c379a000000000000000000000000000000000000000000000000000000000825261508b91600401619854565b60405180910390fd5b60006150d76040518060400160405280601581526020017f4465706c6f79656420746f20616464726573733a200000000000000000000000815250836001616a48565b6040517fc6ce059d000000000000000000000000000000000000000000000000000000008152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c6ce059d9061512a908490600401619854565b602060405180830381865afa158015615147573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061516b919061943f565b9b9a5050505050505050505050565b6040517f8d1cc9250000000000000000000000000000000000000000000000000000000081526000908190737109709ecfa91a80626ff3989d68f67f5b1dd12d90638d1cc925906151cf908790600401619854565b600060405180830381865afa1580156151ec573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526152149190810190619887565b90506000615242828560405160200161522e9291906198bc565b604051602081830303815290604052616c48565b90506001600160a01b038116614dbf57848460405160200161504b9291906198eb565b61268882826000616c5b565b604080518082018252600381527f6f75740000000000000000000000000000000000000000000000000000000000602082015290517fd145736c000000000000000000000000000000000000000000000000000000008152606091737109709ecfa91a80626ff3989d68f67f5b1dd12d91829063d145736c906152f8908490600401619996565b600060405180830381865afa158015615315573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261533d91908101906196cb565b9250505090565b6153766040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b6000737109709ecfa91a80626ff3989d68f67f5b1dd12d90506153c16040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b6153ca85616d5e565b602082015260006153da86617143565b90506000836001600160a01b031663d930a0e66040518163ffffffff1660e01b8152600401600060405180830381865afa15801561541c573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261544491908101906196cb565b8683856020015160405160200161545e94939291906199dd565b60408051601f19818403018152908290527f60f9bb1100000000000000000000000000000000000000000000000000000000825291506000906001600160a01b038616906360f9bb11906154b6908590600401619854565b600060405180830381865afa1580156154d3573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526154fb91908101906196cb565b6040517fdb4235f60000000000000000000000000000000000000000000000000000000081529091506001600160a01b0386169063db4235f690615543908490600401619ae1565b602060405180830381865afa158015615560573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906155849190619401565b615599578160405160200161504b9190619b33565b6040517f49c4fac80000000000000000000000000000000000000000000000000000000081526001600160a01b038616906349c4fac8906155de908490600401619bc5565b600060405180830381865afa1580156155fb573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261562391908101906196cb565b84526040517fdb4235f60000000000000000000000000000000000000000000000000000000081526001600160a01b0386169063db4235f69061566a908490600401619c17565b602060405180830381865afa158015615687573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906156ab9190619401565b15615740576040517f49c4fac80000000000000000000000000000000000000000000000000000000081526001600160a01b038616906349c4fac8906156f5908490600401619c17565b600060405180830381865afa158015615712573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261573a91908101906196cb565b60408501525b846001600160a01b03166349c4fac88286600001516040516020016157659190619c69565b6040516020818303038152906040526040518363ffffffff1660e01b815260040161579192919061978c565b600060405180830381865afa1580156157ae573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526157d691908101906196cb565b606085015250608083015250949350505050565b60408051600480825260a0820190925260609160009190816020015b60608152602001906001900390816158065790505090506040518060400160405280600481526020017f67726570000000000000000000000000000000000000000000000000000000008152508160008151811061586657615866619cd5565b60200260200101819052506040518060400160405280600381526020017f2d726c0000000000000000000000000000000000000000000000000000000000815250816001815181106158ba576158ba619cd5565b6020026020010181905250846040516020016158d69190619d04565b604051602081830303815290604052816002815181106158f8576158f8619cd5565b6020026020010181905250826040516020016159149190619d70565b6040516020818303038152906040528160038151811061593657615936619cd5565b6020026020010181905250600061594c82616879565b602080820151604080518082018252600581527f2e6a736f6e00000000000000000000000000000000000000000000000000000081850190815282518084018452600080825290860152825180840190935290518252928101929092529192506159dd90604080518082018252600080825260209182015281518083019092528451825280850190820152906173c6565b6159f2578560405160200161504b9190619db1565b9695505050505050565b60a0810151604080518082018252600080825260209182015281518083019092528251808352928101910152606090737109709ecfa91a80626ff3989d68f67f5b1dd12d9015615a4c565b511590565b615bc057826020015115615b08576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605860248201527f54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f742060448201527f62652075736564207768656e207468652060736b6970566572696679536f757260648201527f6365436f646560206f7074696f6e206973206074727565600000000000000000608482015260a40161508b565b8260c0015115615bc0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605360248201527f54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f742060448201527f62652075736564207768656e207468652060736b69704c6963656e736554797060648201527f6560206f7074696f6e2069732060747275656000000000000000000000000000608482015260a40161508b565b6040805160ff8082526120008201909252600091816020015b6060815260200190600190039081615bd957905050905060006040518060400160405280600381526020017f6e70780000000000000000000000000000000000000000000000000000000000815250828280615c3490619e42565b935060ff1681518110615c4957615c49619cd5565b60200260200101819052506040518060400160405280600d81526020017f302e302e312d616c7068612e3700000000000000000000000000000000000000815250604051602001615c9a9190619e61565b604051602081830303815290604052828280615cb590619e42565b935060ff1681518110615cca57615cca619cd5565b60200260200101819052506040518060400160405280600681526020017f6465706c6f790000000000000000000000000000000000000000000000000000815250828280615d1790619e42565b935060ff1681518110615d2c57615d2c619cd5565b60200260200101819052506040518060400160405280600e81526020017f2d2d636f6e74726163744e616d65000000000000000000000000000000000000815250828280615d7990619e42565b935060ff1681518110615d8e57615d8e619cd5565b60200260200101819052508760200151828280615daa90619e42565b935060ff1681518110615dbf57615dbf619cd5565b60200260200101819052506040518060400160405280600e81526020017f2d2d636f6e747261637450617468000000000000000000000000000000000000815250828280615e0c90619e42565b935060ff1681518110615e2157615e21619cd5565b602090810291909101015287518282615e3981619e42565b935060ff1681518110615e4e57615e4e619cd5565b60200260200101819052506040518060400160405280600981526020017f2d2d636861696e49640000000000000000000000000000000000000000000000815250828280615e9b90619e42565b935060ff1681518110615eb057615eb0619cd5565b6020026020010181905250615ec446617427565b8282615ecf81619e42565b935060ff1681518110615ee457615ee4619cd5565b60200260200101819052506040518060400160405280600f81526020017f2d2d6275696c64496e666f46696c650000000000000000000000000000000000815250828280615f3190619e42565b935060ff1681518110615f4657615f46619cd5565b602002602001018190525086828280615f5e90619e42565b935060ff1681518110615f7357615f73619cd5565b602090810291909101015285511561609a5760408051808201909152601581527f2d2d636f6e7374727563746f7242797465636f6465000000000000000000000060208201528282615fc481619e42565b935060ff1681518110615fd957615fd9619cd5565b60209081029190910101526040517f71aad10d0000000000000000000000000000000000000000000000000000000081526001600160a01b038416906371aad10d90616029908990600401619854565b600060405180830381865afa158015616046573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261606e91908101906196cb565b828261607981619e42565b935060ff168151811061608e5761608e619cd5565b60200260200101819052505b84602001511561616a5760408051808201909152601281527f2d2d766572696679536f75726365436f64650000000000000000000000000000602082015282826160e381619e42565b935060ff16815181106160f8576160f8619cd5565b60200260200101819052506040518060400160405280600581526020017f66616c736500000000000000000000000000000000000000000000000000000081525082828061614590619e42565b935060ff168151811061615a5761615a619cd5565b6020026020010181905250616331565b6161a2615a478660a0015160408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6162355760408051808201909152600d81527f2d2d6c6963656e73655479706500000000000000000000000000000000000000602082015282826161e581619e42565b935060ff16815181106161fa576161fa619cd5565b60200260200101819052508460a0015160405160200161621a9190619d04565b60405160208183030381529060405282828061614590619e42565b8460c0015115801561627857506040808901518151808301835260008082526020918201528251808401909352815183529081019082015261627690511590565b155b156163315760408051808201909152600d81527f2d2d6c6963656e73655479706500000000000000000000000000000000000000602082015282826162bc81619e42565b935060ff16815181106162d1576162d1619cd5565b60200260200101819052506162e5886174c7565b6040516020016162f59190619d04565b60405160208183030381529060405282828061631090619e42565b935060ff168151811061632557616325619cd5565b60200260200101819052505b6040808601518151808301835260008082526020918201528251808401909352815183529081019082015261636590511590565b6163fa5760408051808201909152600b81527f2d2d72656c617965724964000000000000000000000000000000000000000000602082015282826163a881619e42565b935060ff16815181106163bd576163bd619cd5565b602002602001018190525084604001518282806163d990619e42565b935060ff16815181106163ee576163ee619cd5565b60200260200101819052505b60608501511561651b5760408051808201909152600681527f2d2d73616c7400000000000000000000000000000000000000000000000000006020820152828261644381619e42565b935060ff168151811061645857616458619cd5565b602090810291909101015260608501516040517fb11a19e800000000000000000000000000000000000000000000000000000000815260048101919091526001600160a01b0384169063b11a19e890602401600060405180830381865afa1580156164c7573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526164ef91908101906196cb565b82826164fa81619e42565b935060ff168151811061650f5761650f619cd5565b60200260200101819052505b60e085015151156165c25760408051808201909152600a81527f2d2d6761734c696d6974000000000000000000000000000000000000000000006020820152828261656581619e42565b935060ff168151811061657a5761657a619cd5565b60200260200101819052506165968560e0015160000151617427565b82826165a181619e42565b935060ff16815181106165b6576165b6619cd5565b60200260200101819052505b60e0850151602001511561666c5760408051808201909152600a81527f2d2d6761735072696365000000000000000000000000000000000000000000006020820152828261660f81619e42565b935060ff168151811061662457616624619cd5565b60200260200101819052506166408560e0015160200151617427565b828261664b81619e42565b935060ff168151811061666057616660619cd5565b60200260200101819052505b60e085015160400151156167165760408051808201909152600e81527f2d2d6d6178466565506572476173000000000000000000000000000000000000602082015282826166b981619e42565b935060ff16815181106166ce576166ce619cd5565b60200260200101819052506166ea8560e0015160400151617427565b82826166f581619e42565b935060ff168151811061670a5761670a619cd5565b60200260200101819052505b60e085015160600151156167c05760408051808201909152601681527f2d2d6d61785072696f72697479466565506572476173000000000000000000006020820152828261676381619e42565b935060ff168151811061677857616778619cd5565b60200260200101819052506167948560e0015160600151617427565b828261679f81619e42565b935060ff16815181106167b4576167b4619cd5565b60200260200101819052505b60008160ff1667ffffffffffffffff8111156167de576167de619603565b60405190808252806020026020018201604052801561681157816020015b60608152602001906001900390816167fc5790505b50905060005b8260ff168160ff16101561686a57838160ff168151811061683a5761683a619cd5565b6020026020010151828260ff168151811061685757616857619cd5565b6020908102919091010152600101616817565b5093505050505b949350505050565b6168a06040518060600160405280600060030b815260200160608152602001606081525090565b60408051808201825260048082527f6261736800000000000000000000000000000000000000000000000000000000602083015291517fd145736c000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d92600091849163d145736c9161692691869101619ecc565b600060405180830381865afa158015616943573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261696b91908101906196cb565b905060006169798683617fb6565b90506000846001600160a01b031663f45c1ce7836040518263ffffffff1660e01b81526004016169a991906192f3565b6000604051808303816000875af11580156169c8573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526169f09190810190619f13565b805190915060030b15801590616a095750602081015151155b8015616a185750604081015151155b156159f25781600081518110616a3057616a30619cd5565b602002602001015160405160200161504b9190619fc9565b60606000616a7d8560408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600080825260209182015281518083019092528651825280870190820152909150616ab49082905b9061810b565b15616c11576000616b3182616b2b84616b25616af78a60408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6040805180820182526000808252602091820152815180830190925282518252918201519181019190915290565b90618132565b90618194565b604080518082018252600181527f0a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152909150616b9590829061810b565b15616bff57604080518082018252600181527f0a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616bfc905b8290618219565b90505b616c088161823f565b92505050614f78565b8215616c2a57848460405160200161504b92919061a1b5565b5050604080516020810190915260008152614f78565b509392505050565b6000808251602084016000f09392505050565b8160a0015115616c6a57505050565b6000616c778484846182a8565b90506000616c8482616879565b602081015181519192509060030b158015616d205750604080518082018252600781527f535543434553530000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616d2090604080518082018252600080825260209182015281518083019092528451825280850190820152616aae565b15616d2d57505050505050565b60408201515115616d4d57816040015160405160200161504b919061a25c565b8060405160200161504b919061a2ba565b60606000616d938360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600481527f2e736f6c0000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152909150616df8905b82906173c6565b15616e6757604080518082018252600481527f2e736f6c0000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152614f7890616e62908390618843565b61823f565b604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616ec9905b82906188cd565b600103616f9657604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616f2f90616bf5565b50604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152614f7890616e62905b8390618219565b604080518082018252600581527f2e6a736f6e00000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616ff590616df1565b1561712c57604080518082018252600181527f2f0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082018190528451808601909552925184528301529061705d908390618967565b9050600081600183516170709190619779565b8151811061708057617080619cd5565b60200260200101519050617123616e626170f66040518060400160405280600581526020017f2e6a736f6e00000000000000000000000000000000000000000000000000000081525060408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b60408051808201825260008082526020918201528151808301909252855182528086019082015290618843565b95945050505050565b8260405160200161504b919061a325565b50919050565b606060006171788360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600481527f2e736f6c00000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201529091506171da90616df1565b156171e857614f788161823f565b604080518082018252600181527f3a000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261724790616ec2565b6001036172b157604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152614f7890616e6290616f8f565b604080518082018252600581527f2e6a736f6e0000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261731090616df1565b1561712c57604080518082018252600181527f2f00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820181905284518086019095529251845283015290617378908390618967565b90506001815111156173b45780600282516173939190619779565b815181106173a3576173a3619cd5565b602002602001015192505050919050565b508260405160200161504b919061a325565b8051825160009111156173db57506000614dc3565b815183516020850151600092916173f191619766565b6173fb9190619779565b905082602001518103617412576001915050614dc3565b82516020840151819020912014905092915050565b6060600061743483618a0c565b600101905060008167ffffffffffffffff81111561745457617454619603565b6040519080825280601f01601f19166020018201604052801561747e576020820181803683370190505b5090508181016020015b600019017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a850494508461748857509392505050565b604081810151815180830183526000808252602091820181905283518085018552835181529282018383015283518085018552600a81527f554e4c4943454e5345440000000000000000000000000000000000000000000081840190815285518087018752838152840192909252845180860190955251845290830152606091617553905b8290618aee565b1561759357505060408051808201909152600481527f4e6f6e65000000000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600981527f556e6c6963656e73650000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526175f29061754c565b1561763257505060408051808201909152600981527f556e6c6963656e736500000000000000000000000000000000000000000000006020820152919050565b604080518082018252600381527f4d49540000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526176919061754c565b156176d157505060408051808201909152600381527f4d495400000000000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f47504c2d322e302d6f6e6c790000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526177309061754c565b806177955750604080518082018252601081527f47504c2d322e302d6f722d6c6174657200000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526177959061754c565b156177d557505060408051808201909152600981527f474e552047504c763200000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f47504c2d332e302d6f6e6c790000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526178349061754c565b806178995750604080518082018252601081527f47504c2d332e302d6f722d6c6174657200000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526178999061754c565b156178d957505060408051808201909152600981527f474e552047504c763300000000000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4c47504c2d322e312d6f6e6c7900000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526179389061754c565b8061799d5750604080518082018252601181527f4c47504c2d322e312d6f722d6c617465720000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261799d9061754c565b156179dd57505060408051808201909152600c81527f474e55204c47504c76322e3100000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4c47504c2d332e302d6f6e6c790000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617a3c9061754c565b80617aa15750604080518082018252601181527f4c47504c2d332e302d6f722d6c6174657200000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617aa19061754c565b15617ae157505060408051808201909152600a81527f474e55204c47504c7633000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f4253442d322d436c61757365000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617b409061754c565b15617b8057505060408051808201909152600c81527f4253442d322d436c6175736500000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f4253442d332d436c61757365000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617bdf9061754c565b15617c1f57505060408051808201909152600c81527f4253442d332d436c6175736500000000000000000000000000000000000000006020820152919050565b604080518082018252600781527f4d504c2d322e300000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617c7e9061754c565b15617cbe57505060408051808201909152600781527f4d504c2d322e30000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600781527f4f534c2d332e300000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617d1d9061754c565b15617d5d57505060408051808201909152600781527f4f534c2d332e30000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600a81527f4170616368652d322e300000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617dbc9061754c565b15617dfc57505060408051808201909152600a81527f4170616368652d322e30000000000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4147504c2d332e302d6f6e6c790000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617e5b9061754c565b80617ec05750604080518082018252601181527f4147504c2d332e302d6f722d6c6174657200000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617ec09061754c565b15617f0057505060408051808201909152600a81527f474e55204147504c7633000000000000000000000000000000000000000000006020820152919050565b604080518082018252600881527f4255534c2d312e3100000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617f5f9061754c565b15617f9f57505060408051808201909152600781527f42534c20312e31000000000000000000000000000000000000000000000000006020820152919050565b6040808401518451915161504b929060200161a403565b60608060005b84518110156180415781858281518110617fd857617fd8619cd5565b6020026020010151604051602001617ff19291906198bc565b6040516020818303038152906040529150600185516180109190619779565b81146180395781604051602001618027919061a56c565b60405160208183030381529060405291505b600101617fbc565b5060408051600380825260808201909252600091816020015b606081526020019060019003908161805a579050509050838160008151811061808557618085619cd5565b60200260200101819052506040518060400160405280600281526020017f2d63000000000000000000000000000000000000000000000000000000000000815250816001815181106180d9576180d9619cd5565b602002602001018190525081816002815181106180f8576180f8619cd5565b6020908102919091010152949350505050565b60208083015183518351928401516000936181299291849190618b02565b14159392505050565b604080518082019091526000808252602082015260006181648460000151856020015185600001518660200151618c13565b90508360200151816181769190619779565b84518590618185908390619779565b90525060208401525090919050565b60408051808201909152600080825260208201528151835110156181b9575081614dc3565b60208083015190840151600191146181e05750815160208481015190840151829020919020145b8015618211578251845185906181f7908390619779565b905250825160208501805161820d908390619766565b9052505b509192915050565b6040805180820190915260008082526020820152618238838383618d33565b5092915050565b60606000826000015167ffffffffffffffff81111561826057618260619603565b6040519080825280601f01601f19166020018201604052801561828a576020820181803683370190505b50905060006020820190506182388185602001518660000151618dde565b606060006182b4615271565b6040805160ff808252612000820190925291925060009190816020015b60608152602001906001900390816182d157905050905060006040518060400160405280600381526020017f6e7078000000000000000000000000000000000000000000000000000000000081525082828061832c90619e42565b935060ff168151811061834157618341619cd5565b60200260200101819052506040518060400160405280600781526020017f5e312e33322e3300000000000000000000000000000000000000000000000000815250604051602001618392919061a5ad565b6040516020818303038152906040528282806183ad90619e42565b935060ff16815181106183c2576183c2619cd5565b60200260200101819052506040518060400160405280600881526020017f76616c696461746500000000000000000000000000000000000000000000000081525082828061840f90619e42565b935060ff168151811061842457618424619cd5565b6020026020010181905250826040516020016184409190619d70565b60405160208183030381529060405282828061845b90619e42565b935060ff168151811061847057618470619cd5565b60200260200101819052506040518060400160405280600a81526020017f2d2d636f6e7472616374000000000000000000000000000000000000000000008152508282806184bd90619e42565b935060ff16815181106184d2576184d2619cd5565b60200260200101819052506184e78784618e58565b82826184f281619e42565b935060ff168151811061850757618507619cd5565b6020908102919091010152855151156185b35760408051808201909152600b81527f2d2d7265666572656e63650000000000000000000000000000000000000000006020820152828261855981619e42565b935060ff168151811061856e5761856e619cd5565b6020026020010181905250618587866000015184618e58565b828261859281619e42565b935060ff16815181106185a7576185a7619cd5565b60200260200101819052505b8560800151156186215760408051808201909152601881527f2d2d756e73616665536b697053746f72616765436865636b0000000000000000602082015282826185fc81619e42565b935060ff168151811061861157618611619cd5565b6020026020010181905250618687565b84156186875760408051808201909152601281527f2d2d726571756972655265666572656e636500000000000000000000000000006020820152828261866681619e42565b935060ff168151811061867b5761867b619cd5565b60200260200101819052505b604086015151156187235760408051808201909152600d81527f2d2d756e73616665416c6c6f7700000000000000000000000000000000000000602082015282826186d181619e42565b935060ff16815181106186e6576186e6619cd5565b6020026020010181905250856040015182828061870290619e42565b935060ff168151811061871757618717619cd5565b60200260200101819052505b85606001511561878d5760408051808201909152601481527f2d2d756e73616665416c6c6f7752656e616d65730000000000000000000000006020820152828261876c81619e42565b935060ff168151811061878157618781619cd5565b60200260200101819052505b60008160ff1667ffffffffffffffff8111156187ab576187ab619603565b6040519080825280602002602001820160405280156187de57816020015b60608152602001906001900390816187c95790505b50905060005b8260ff168160ff16101561883757838160ff168151811061880757618807619cd5565b6020026020010151828260ff168151811061882457618824619cd5565b60209081029190910101526001016187e4565b50979650505050505050565b6040805180820190915260008082526020820152815183511015618868575081614dc3565b8151835160208501516000929161887e91619766565b6188889190619779565b602084015190915060019082146188a9575082516020840151819020908220145b80156188c4578351855186906188c0908390619779565b9052505b50929392505050565b60008082600001516188f18560000151866020015186600001518760200151618c13565b6188fb9190619766565b90505b8351602085015161890f9190619766565b8111618238578161891f8161a5f2565b925050826000015161895685602001518361893a9190619779565b86516189469190619779565b8386600001518760200151618c13565b6189609190619766565b90506188fe565b6060600061897584846188cd565b618980906001619766565b67ffffffffffffffff81111561899857618998619603565b6040519080825280602002602001820160405280156189cb57816020015b60608152602001906001900390816189b65790505b50905060005b8151811015616c40576189e7616e628686618219565b8282815181106189f9576189f9619cd5565b60209081029190910101526001016189d1565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310618a55577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310618a81576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc100008310618a9f57662386f26fc10000830492506010015b6305f5e1008310618ab7576305f5e100830492506008015b6127108310618acb57612710830492506004015b60648310618add576064830492506002015b600a8310614dc35760010192915050565b6000618afa8383618e98565b159392505050565b600080858411618c095760208411618bb55760008415618b4d576001618b29866020619779565b618b3490600861a60c565b618b3f90600261a70a565b618b499190619779565b1990505b8351811685618b5c8989619766565b618b669190619779565b805190935082165b818114618ba057878411618b885787945050505050616871565b83618b928161a716565b945050828451169050618b6e565b618baa8785619766565b945050505050616871565b838320618bc28588619779565b618bcc9087619766565b91505b858210618c0757848220808203618bf457618bea8684619766565b9350505050616871565b618bff600184619779565b925050618bcf565b505b5092949350505050565b60008381868511618d1e5760208511618ccd5760008515618c5f576001618c3b876020619779565b618c4690600861a60c565b618c5190600261a70a565b618c5b9190619779565b1990505b84518116600087618c708b8b619766565b618c7a9190619779565b855190915083165b828114618cbf57818610618ca757618c9a8b8b619766565b9650505050505050616871565b85618cb18161a5f2565b965050838651169050618c82565b859650505050505050616871565b508383206000905b618cdf8689619779565b8211618d1c57858320808203618cfb5783945050505050616871565b618d06600185619766565b9350508180618d149061a5f2565b925050618cd5565b505b618d288787619766565b979650505050505050565b60408051808201909152600080825260208201526000618d658560000151866020015186600001518760200151618c13565b602080870180519186019190915251909150618d819082619779565b835284516020860151618d949190619766565b8103618da35760008552618dd5565b83518351618db19190619766565b85518690618dc0908390619779565b9052508351618dcf9082619766565b60208601525b50909392505050565b60208110618e165781518352618df5602084619766565b9250618e02602083619766565b9150618e0f602082619779565b9050618dde565b6000198115618e45576001618e2c836020619779565b618e389061010061a70a565b618e429190619779565b90505b9151835183169219169190911790915250565b60606000618e668484615344565b8051602080830151604051939450618e809390910161a72d565b60405160208183030381529060405291505092915050565b8151815160009190811115618eab575081515b6020808501519084015160005b83811015618f645782518251808214618f34576000196020871015618f1357600184618ee5896020619779565b618eef9190619766565b618efa90600861a60c565b618f0590600261a70a565b618f0f9190619779565b1990505b8181168382168181039114618f31579750614dc39650505050505050565b50505b618f3f602086619766565b9450618f4c602085619766565b93505050602081618f5d9190619766565b9050618eb8565b50845186516159f2919061a785565b610b678061a7a683390190565b61106f8061b30d83390190565b611bb98061c37c83390190565b6040518060e00160405280606081526020016060815260200160608152602001600015158152602001600015158152602001600015158152602001618fdd618fe2565b905290565b60405180610100016040528060001515815260200160001515815260200160608152602001600080191681526020016060815260200160608152602001600015158152602001618fdd6040518060800160405280600081526020016000815260200160008152602001600081525090565b602080825282518282018190526000918401906040840190835b818110156190945783516001600160a01b031683526020938401939092019160010161906d565b509095945050505050565b60005b838110156190ba5781810151838201526020016190a2565b50506000910152565b600081518084526190db81602086016020860161909f565b601f01601f19169290920160200192915050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b828110156191eb577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452815180516001600160a01b03168652602090810151604082880181905281519088018190529101906060600582901b88018101919088019060005b818110156191d1577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa08a85030183526191bb8486516190c3565b6020958601959094509290920191600101619181565b509197505050602094850194929092019150600101619117565b50929695505050505050565b600081518084526020840193506020830160005b8281101561924b5781517fffffffff000000000000000000000000000000000000000000000000000000001686526020958601959091019060010161920b565b5093949350505050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b828110156191eb577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc087860301845281518051604087526192c160408801826190c3565b90506020820151915086810360208801526192dc81836191f7565b96505050602093840193919091019060010161927d565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b828110156191eb577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08786030184526193558583516190c3565b9450602093840193919091019060010161931b565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b828110156191eb577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc087860301845281516001600160a01b03815116865260208101519050604060208701526193eb60408701826191f7565b9550506020938401939190910190600101619392565b60006020828403121561941357600080fd5b81518015158114614f7857600080fd5b80516001600160a01b038116811461943a57600080fd5b919050565b60006020828403121561945157600080fd5b614f7882619423565b610100815260056101008201527f544f4b454e000000000000000000000000000000000000000000000000000000610120820152610140602082015260036101408201527f544b4e000000000000000000000000000000000000000000000000000000000061016082015260006101808201905060ff8816604083015286606083015260038610619514577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b8560808301528460a083015261953560c08301856001600160a01b03169052565b6001600160a01b03831660e0830152979650505050505050565b60006020828403121561956157600080fd5b5051919050565b600181811c9082168061957c57607f821691505b60208210810361713d577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600080604083850312156195c857600080fd5b6195d183619423565b6020939093015192949293505050565b6040815260006195f460408301856190c3565b90508260208301529392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040516060810167ffffffffffffffff8111828210171561965557619655619603565b60405290565b60008067ffffffffffffffff84111561967657619676619603565b50604051601f19601f85018116603f0116810181811067ffffffffffffffff821117156196a5576196a5619603565b6040528381529050808284018510156196bd57600080fd5b616c4084602083018561909f565b6000602082840312156196dd57600080fd5b815167ffffffffffffffff8111156196f457600080fd5b8201601f8101841361970557600080fd5b614dbf8482516020840161965b565b60006020828403121561972657600080fd5b815160ff81168114614f7857600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b80820180821115614dc357614dc3619737565b81810381811115614dc357614dc3619737565b60408152600061979f60408301856190c3565b8281036020840152614f7481856190c3565b6001600160a01b038316815260406020820152600061687160408301846190c3565b7f4661696c656420746f206465706c6f7920636f6e74726163742000000000000081526000835161980b81601a85016020880161909f565b7f3a20000000000000000000000000000000000000000000000000000000000000601a91840191820152835161984881601c84016020880161909f565b01601c01949350505050565b602081526000614f7860208301846190c3565b600082601f83011261987857600080fd5b614f788383516020850161965b565b60006020828403121561989957600080fd5b815167ffffffffffffffff8111156198b057600080fd5b614dbf84828501619867565b600083516198ce81846020880161909f565b8351908301906198e281836020880161909f565b01949350505050565b7f4661696c656420746f206465706c6f7920636f6e74726163742000000000000081526000835161992381601a85016020880161909f565b7f207573696e6720636f6e7374727563746f722064617461202200000000000000601a91840191820152835161996081603384016020880161909f565b7f220000000000000000000000000000000000000000000000000000000000000060339290910191820152603401949350505050565b60408152600b60408201527f464f554e4452595f4f55540000000000000000000000000000000000000000006060820152608060208201526000614f7860808301846190c3565b600085516199ef818460208a0161909f565b7f2f000000000000000000000000000000000000000000000000000000000000009083019081528551619a29816001840160208a0161909f565b7f2f00000000000000000000000000000000000000000000000000000000000000600192909101918201528451619a6781600284016020890161909f565b6001818301019150507f2f0000000000000000000000000000000000000000000000000000000000000060018201528351619aa981600284016020880161909f565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600292909101918201526007019695505050505050565b604081526000619af460408301846190c3565b8281036020840152600481527f2e6173740000000000000000000000000000000000000000000000000000000060208201526040810191505092915050565b7f436f756c64206e6f742066696e642041535420696e2061727469666163742000815260008251619b6b81601f85016020870161909f565b7f2e205365742060617374203d20747275656020696e20666f756e6472792e746f601f9390910192830152507f6d6c000000000000000000000000000000000000000000000000000000000000603f820152604101919050565b604081526000619bd860408301846190c3565b8281036020840152601181527f2e6173742e6162736f6c7574655061746800000000000000000000000000000060208201526040810191505092915050565b604081526000619c2a60408301846190c3565b8281036020840152600c81527f2e6173742e6c6963656e7365000000000000000000000000000000000000000060208201526040810191505092915050565b7f2e6d657461646174612e736f75726365732e5b27000000000000000000000000815260008251619ca181601485016020870161909f565b7f275d2e6b656363616b32353600000000000000000000000000000000000000006014939091019283015250602001919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f2200000000000000000000000000000000000000000000000000000000000000815260008251619d3c81600185016020870161909f565b7f22000000000000000000000000000000000000000000000000000000000000006001939091019283015250600201919050565b60008251619d8281846020870161909f565b7f2f6275696c642d696e666f000000000000000000000000000000000000000000920191825250600b01919050565b7f436f756c64206e6f742066696e64206275696c642d696e666f2066696c65207781527f697468206d61746368696e6720736f7572636520636f6465206861736820666f60208201527f7220636f6e747261637420000000000000000000000000000000000000000000604082015260008251619e3581604b85016020870161909f565b91909101604b0192915050565b600060ff821660ff8103619e5857619e58619737565b60010192915050565b7f406f70656e7a657070656c696e2f646566656e6465722d6465706c6f792d636c81527f69656e742d636c69400000000000000000000000000000000000000000000000602082015260008251619ebf81602985016020870161909f565b9190910160290192915050565b60408152601660408201527f4f50454e5a455050454c494e5f424153485f50415448000000000000000000006060820152608060208201526000614f7860808301846190c3565b600060208284031215619f2557600080fd5b815167ffffffffffffffff811115619f3c57600080fd5b820160608185031215619f4e57600080fd5b619f56619632565b81518060030b8114619f6757600080fd5b8152602082015167ffffffffffffffff811115619f8357600080fd5b619f8f86828501619867565b602083015250604082015167ffffffffffffffff811115619faf57600080fd5b619fbb86828501619867565b604083015250949350505050565b7f4661696c656420746f2072756e206261736820636f6d6d616e6420776974682081527f220000000000000000000000000000000000000000000000000000000000000060208201526000825161a02781602185016020870161909f565b7f222e20496620796f7520617265207573696e672057696e646f77732c2073657460219390910192830152507f20746865204f50454e5a455050454c494e5f424153485f5041544820656e766960418201527f726f6e6d656e74207661726961626c6520746f207468652066756c6c7920717560618201527f616c69666965642070617468206f66207468652062617368206578656375746160818201527f626c652e20466f72206578616d706c652c20696620796f75206172652075736960a18201527f6e672047697420666f722057696e646f77732c206164642074686520666f6c6c60c18201527f6f77696e67206c696e6520696e20746865202e656e762066696c65206f66207960e18201527f6f75722070726f6a65637420287573696e6720666f727761726420736c6173686101018201527f6573293a0a4f50454e5a455050454c494e5f424153485f504154483d22433a2f6101218201527f50726f6772616d2046696c65732f4769742f62696e2f6261736822000000000061014182015261015c01919050565b7f4661696c656420746f2066696e64206c696e652077697468207072656669782081527f270000000000000000000000000000000000000000000000000000000000000060208201526000835161a21381602185016020880161909f565b7f2720696e206f75747075743a2000000000000000000000000000000000000000602191840191820152835161a25081602e84016020880161909f565b01602e01949350505050565b7f4661696c656420746f2072756e2075706772616465207361666574792076616c81527f69646174696f6e3a200000000000000000000000000000000000000000000000602082015260008251619ebf81602985016020870161909f565b7f55706772616465207361666574792076616c69646174696f6e206661696c656481527f3a0a00000000000000000000000000000000000000000000000000000000000060208201526000825161a31881602285016020870161909f565b9190910160220192915050565b7f436f6e7472616374206e616d652000000000000000000000000000000000000081526000825161a35d81600e85016020870161909f565b7f206d75737420626520696e2074686520666f726d6174204d79436f6e74726163600e9390910192830152507f742e736f6c3a4d79436f6e7472616374206f72204d79436f6e74726163742e73602e8201527f6f6c206f72206f75742f4d79436f6e74726163742e736f6c2f4d79436f6e7472604e8201527f6163742e6a736f6e000000000000000000000000000000000000000000000000606e820152607601919050565b7f53504458206c6963656e7365206964656e74696669657220000000000000000081526000835161a43b81601885016020880161909f565b7f20696e2000000000000000000000000000000000000000000000000000000000601891840191820152835161a47881601c84016020880161909f565b7f20646f6573206e6f74206c6f6f6b206c696b65206120737570706f7274656420601c92909101918201527f6c6963656e736520666f7220626c6f636b206578706c6f726572207665726966603c8201527f69636174696f6e2e205573652074686520606c6963656e73655479706560206f605c8201527f7074696f6e20746f20737065636966792061206c6963656e736520747970652c607c8201527f206f7220736574207468652060736b69704c6963656e73655479706560206f70609c8201527f74696f6e20746f2060747275656020746f20736b69702e00000000000000000060bc82015260d301949350505050565b6000825161a57e81846020870161909f565b7f2000000000000000000000000000000000000000000000000000000000000000920191825250600101919050565b7f406f70656e7a657070656c696e2f75706772616465732d636f7265400000000081526000825161a5e581601c85016020870161909f565b91909101601c0192915050565b6000600019820361a6055761a605619737565b5060010190565b8082028115828204841417614dc357614dc3619737565b6001815b600184111561a65e5780850481111561a6425761a642619737565b600184161561a65057908102905b60019390931c92800261a627565b935093915050565b60008261a67557506001614dc3565b8161a68257506000614dc3565b816001811461a698576002811461a6a25761a6be565b6001915050614dc3565b60ff84111561a6b35761a6b3619737565b50506001821b614dc3565b5060208310610133831016604e8410600b841016171561a6e1575081810a614dc3565b61a6ee600019848461a623565b806000190482111561a7025761a702619737565b029392505050565b6000614f78838361a666565b60008161a7255761a725619737565b506000190190565b6000835161a73f81846020880161909f565b7f3a00000000000000000000000000000000000000000000000000000000000000908301908152835161a77981600184016020880161909f565b01600101949350505050565b81810360008312801583831316838312821617156182385761823861973756fe60c0604052600d60809081526c2bb930b83832b21022ba3432b960991b60a05260009061002c9082610114565b506040805180820190915260048152630ae8aa8960e31b60208201526001906100559082610114565b506002805460ff1916601217905534801561006f57600080fd5b506101d2565b634e487b7160e01b600052604160045260246000fd5b600181811c9082168061009f57607f821691505b6020821081036100bf57634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111561010f57806000526020600020601f840160051c810160208510156100ec5750805b601f840160051c820191505b8181101561010c57600081556001016100f8565b50505b505050565b81516001600160401b0381111561012d5761012d610075565b6101418161013b845461008b565b846100c5565b6020601f821160018114610175576000831561015d5750848201515b600019600385901b1c1916600184901b17845561010c565b600084815260208120601f198516915b828110156101a55787850151825560209485019460019092019101610185565b50848210156101c35786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b610986806101e16000396000f3fe6080604052600436106100c05760003560e01c8063313ce56711610074578063a9059cbb1161004e578063a9059cbb146101fa578063d0e30db01461021a578063dd62ed3e1461022257600080fd5b8063313ce5671461018c57806370a08231146101b857806395d89b41146101e557600080fd5b806318160ddd116100a557806318160ddd1461012f57806323b872dd1461014c5780632e1a7d4d1461016c57600080fd5b806306fdde03146100d4578063095ea7b3146100ff57600080fd5b366100cf576100cd61025a565b005b600080fd5b3480156100e057600080fd5b506100e96102b5565b6040516100f69190610745565b60405180910390f35b34801561010b57600080fd5b5061011f61011a3660046107da565b610343565b60405190151581526020016100f6565b34801561013b57600080fd5b50475b6040519081526020016100f6565b34801561015857600080fd5b5061011f610167366004610804565b6103bd565b34801561017857600080fd5b506100cd610187366004610841565b610647565b34801561019857600080fd5b506002546101a69060ff1681565b60405160ff90911681526020016100f6565b3480156101c457600080fd5b5061013e6101d336600461085a565b60036020526000908152604090205481565b3480156101f157600080fd5b506100e9610724565b34801561020657600080fd5b5061011f6102153660046107da565b610731565b6100cd61025a565b34801561022e57600080fd5b5061013e61023d366004610875565b600460209081526000928352604080842090915290825290205481565b33600090815260036020526040812080543492906102799084906108d7565b909155505060405134815233907fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c9060200160405180910390a2565b600080546102c2906108ea565b80601f01602080910402602001604051908101604052809291908181526020018280546102ee906108ea565b801561033b5780601f106103105761010080835404028352916020019161033b565b820191906000526020600020905b81548152906001019060200180831161031e57829003601f168201915b505050505081565b33600081815260046020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925906103ab9086815260200190565b60405180910390a35060015b92915050565b73ffffffffffffffffffffffffffffffffffffffff831660009081526003602052604081205482111561042b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600060248201526044015b60405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff841633148015906104a1575073ffffffffffffffffffffffffffffffffffffffff841660009081526004602090815260408083203384529091529020547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff14155b156105605773ffffffffffffffffffffffffffffffffffffffff8416600090815260046020908152604080832033845290915290205482111561051a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526020600482015260006024820152604401610422565b73ffffffffffffffffffffffffffffffffffffffff841660009081526004602090815260408083203384529091528120805484929061055a90849061093d565b90915550505b73ffffffffffffffffffffffffffffffffffffffff84166000908152600360205260408120805484929061059590849061093d565b909155505073ffffffffffffffffffffffffffffffffffffffff8316600090815260036020526040812080548492906105cf9084906108d7565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161063591815260200190565b60405180910390a35060019392505050565b3360009081526003602052604090205481111561069a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526020600482015260006024820152604401610422565b33600090815260036020526040812080548392906106b990849061093d565b9091555050604051339082156108fc029083906000818181858888f193505050501580156106eb573d6000803e3d6000fd5b5060405181815233907f7fcf532c15f0a6db0bd6d0e038bea71d30d808c7d98cb3bf7268a95bf5081b659060200160405180910390a250565b600180546102c2906108ea565b600061073e3384846103bd565b9392505050565b602081526000825180602084015260005b818110156107735760208186018101516040868401015201610756565b5060006040828501015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011684010191505092915050565b803573ffffffffffffffffffffffffffffffffffffffff811681146107d557600080fd5b919050565b600080604083850312156107ed57600080fd5b6107f6836107b1565b946020939093013593505050565b60008060006060848603121561081957600080fd5b610822846107b1565b9250610830602085016107b1565b929592945050506040919091013590565b60006020828403121561085357600080fd5b5035919050565b60006020828403121561086c57600080fd5b61073e826107b1565b6000806040838503121561088857600080fd5b610891836107b1565b915061089f602084016107b1565b90509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b808201808211156103b7576103b76108a8565b600181811c908216806108fe57607f821691505b602082108103610937577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b818103818111156103b7576103b76108a856fea264697066735822122008d7fc4e09519c5dd9f356b03596f6829a151d0bc7682533f9ceab4e459f5ee264736f6c634300081a003360c060405234801561001057600080fd5b5060405161106f38038061106f83398101604081905261002f916100db565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461006357604051632b2add3d60e01b815260040160405180910390fd5b600380546001600160a01b0319166001600160a01b0385811691909117909155828116608052811660a0526040517f80699e81136d69cb8367ad52a994e25c722a86da654b561d0c14b61a777e7ac590600090a150505061011e565b80516001600160a01b03811681146100d657600080fd5b919050565b6000806000606084860312156100f057600080fd5b6100f9846100bf565b9250610107602085016100bf565b9150610115604085016100bf565b90509250925092565b60805160a051610f2561014a60003960006101e50152600081816102b9015261045b0152610f256000f3fe608060405234801561001057600080fd5b50600436106100f55760003560e01c806397770dff11610097578063c63585cc11610066578063c63585cc14610273578063d7fd7afb14610286578063d936a012146102b4578063ee2815ba146102db57600080fd5b806397770dff1461021a578063a7cb05071461022d578063c39aca3714610240578063c62178ac1461025357600080fd5b8063513a9c05116100d3578063513a9c051461018a578063569541b9146101c0578063842da36d146101e057806391dd645f1461020757600080fd5b80630be15547146100fa5780631f0e251b1461015a5780633ce4a5bc1461016f575b600080fd5b610130610108366004610bd1565b60016020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b61016d610168366004610c13565b6102ee565b005b61013073735b14bb79463307aacbed86daf3322b1e6226ab81565b610130610198366004610bd1565b60026020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b6003546101309073ffffffffffffffffffffffffffffffffffffffff1681565b6101307f000000000000000000000000000000000000000000000000000000000000000081565b61016d610215366004610c35565b610402565b61016d610228366004610c13565b610526565b61016d61023b366004610c61565b610633565b61016d61024e366004610c83565b6106ce565b6004546101309073ffffffffffffffffffffffffffffffffffffffff1681565b610130610281366004610d53565b6108cd565b6102a6610294366004610bd1565b60006020819052908152604090205481565b604051908152602001610151565b6101307f000000000000000000000000000000000000000000000000000000000000000081565b61016d6102e9366004610c35565b610a02565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461033b576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116610388576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600480547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527f3ade88e3922d64780e1bf4460d364c2970b69da813f9c0c07a1c187b5647636c906020015b60405180910390a150565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461044f576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600354600090610497907f00000000000000000000000000000000000000000000000000000000000000009073ffffffffffffffffffffffffffffffffffffffff16846108cd565b60008481526002602090815260409182902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff85169081179091558251878152918201529192507f0ecec485166da6139b13bb7e033e9446e2d35348e80ebf1180d4afe2dba1704e910160405180910390a1505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610573576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff81166105c0576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527fdba79d534382d1a8ae108e4c8ecb27c6ae42ab8b91d44eedf88bd329f3868d5e906020016103f7565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610680576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000828152602081815260409182902083905581518481529081018390527f49f492222906ac486c3c1401fa545626df1f0c0e5a77a05597ea2ed66af9850d91015b60405180910390a15050565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461071b576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff831673735b14bb79463307aacbed86daf3322b1e6226ab1480610768575073ffffffffffffffffffffffffffffffffffffffff831630145b1561079f576040517f82d5d76a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f47e7ef2400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152602482018690528616906347e7ef24906044016020604051808303816000875af1158015610814573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108389190610d96565b506040517fde43156e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84169063de43156e906108939089908990899088908890600401610e01565b600060405180830381600087803b1580156108ad57600080fd5b505af11580156108c1573d6000803e3d6000fd5b50505050505050505050565b60008060006108dc8585610ad3565b6040517fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606084811b8216602084015283901b16603482015291935091508690604801604051602081830303815290604052805190602001206040516020016109c29291907fff00000000000000000000000000000000000000000000000000000000000000815260609290921b7fffffffffffffffffffffffffffffffffffffffff00000000000000000000000016600183015260158201527f96e8ac4277198ff8b6f785478aa9a39f403cb768dd02cbee326c3e7da348845f603582015260550190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291905280516020909101209695505050505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610a4f576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008281526001602090815260409182902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff85169081179091558251858152918201527fd1b36d30f6248e97c473b4d1348ca164a4ef6759022f54a58ec200326c39c45d91016106c2565b6000808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603610b3b576040517fcb1e7cfe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1610610b75578284610b78565b83835b909250905073ffffffffffffffffffffffffffffffffffffffff8216610bca576040517f78b507da00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b9250929050565b600060208284031215610be357600080fd5b5035919050565b803573ffffffffffffffffffffffffffffffffffffffff81168114610c0e57600080fd5b919050565b600060208284031215610c2557600080fd5b610c2e82610bea565b9392505050565b60008060408385031215610c4857600080fd5b82359150610c5860208401610bea565b90509250929050565b60008060408385031215610c7457600080fd5b50508035926020909101359150565b60008060008060008060a08789031215610c9c57600080fd5b863567ffffffffffffffff811115610cb357600080fd5b87016060818a031215610cc557600080fd5b9550610cd360208801610bea565b945060408701359350610ce860608801610bea565b9250608087013567ffffffffffffffff811115610d0457600080fd5b8701601f81018913610d1557600080fd5b803567ffffffffffffffff811115610d2c57600080fd5b896020828401011115610d3e57600080fd5b60208201935080925050509295509295509295565b600080600060608486031215610d6857600080fd5b610d7184610bea565b9250610d7f60208501610bea565b9150610d8d60408501610bea565b90509250925092565b600060208284031215610da857600080fd5b81518015158114610c2e57600080fd5b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b60808152600086357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1883603018112610e3957600080fd5b870160208101903567ffffffffffffffff811115610e5657600080fd5b803603821315610e6557600080fd5b60606080850152610e7a60e085018284610db8565b91505073ffffffffffffffffffffffffffffffffffffffff610e9e60208a01610bea565b1660a0840152604088013560c084015273ffffffffffffffffffffffffffffffffffffffff871660208401528560408401528281036060840152610ee3818587610db8565b9897505050505050505056fea2646970667358221220fea45cb058045b493e646c8b9505ea080ab95fd7ed4498b922d179cf1abec08e64736f6c634300081a003360e060405234801561001057600080fd5b50604051611bb9380380611bb983398101604081905261002f9161020e565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461006357604051632b2add3d60e01b815260040160405180910390fd5b6001600160a01b038216158061008057506001600160a01b038116155b1561009e5760405163d92e233d60e01b815260040160405180910390fd5b60066100aa8982610360565b5060076100b78882610360565b5060ff861660c05260808590528360028111156100d6576100d661041e565b60a08160028111156100ea576100ea61041e565b905250600192909255600080546001600160a01b039283166001600160a01b03199182161790915560088054929093169116179055506104349350505050565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261015157600080fd5b81516001600160401b0381111561016a5761016a61012a565b604051601f8201601f19908116603f011681016001600160401b03811182821017156101985761019861012a565b6040528181528382016020018510156101b057600080fd5b60005b828110156101cf576020818601810151838301820152016101b3565b506000918101602001919091529392505050565b8051600381106101f257600080fd5b919050565b80516001600160a01b03811681146101f257600080fd5b600080600080600080600080610100898b03121561022b57600080fd5b88516001600160401b0381111561024157600080fd5b61024d8b828c01610140565b60208b015190995090506001600160401b0381111561026b57600080fd5b6102778b828c01610140565b975050604089015160ff8116811461028e57600080fd5b60608a015190965094506102a460808a016101e3565b60a08a015190945092506102ba60c08a016101f7565b91506102c860e08a016101f7565b90509295985092959890939650565b600181811c908216806102eb57607f821691505b60208210810361030b57634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111561035b57806000526020600020601f840160051c810160208510156103385750805b601f840160051c820191505b818110156103585760008155600101610344565b50505b505050565b81516001600160401b038111156103795761037961012a565b61038d8161038784546102d7565b84610311565b6020601f8211600181146103c157600083156103a95750848201515b600019600385901b1c1916600184901b178455610358565b600084815260208120601f198516915b828110156103f157878501518255602094850194600190920191016103d1565b508482101561040f5786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b634e487b7160e01b600052602160045260246000fd5b60805160a05160c05161174861047160003960006102170152600061033a0152600081816102eb01528181610ad70152610bdd01526117486000f3fe608060405234801561001057600080fd5b50600436106101985760003560e01c80638b851b95116100e3578063ccc775991161008c578063eddeb12311610066578063eddeb12314610431578063f2441b3214610444578063f687d12a1461046457600080fd5b8063ccc77599146103a4578063d9eeebed146103b7578063dd62ed3e146103eb57600080fd5b8063a9059cbb116100bd578063a9059cbb14610369578063c70126261461037c578063c835d7cc1461038f57600080fd5b80638b851b951461030d57806395d89b411461032d578063a3413d031461033557600080fd5b80633ce4a5bc116101455780634d8943bb1161011f5780634d8943bb146102a757806370a08231146102b057806385e1f4d0146102e657600080fd5b80633ce4a5bc1461024157806342966c681461028157806347e7ef241461029457600080fd5b806318160ddd1161017657806318160ddd146101f557806323b872dd146101fd578063313ce5671461021057600080fd5b806306fdde031461019d578063091d2788146101bb578063095ea7b3146101d2575b600080fd5b6101a5610477565b6040516101b29190611327565b60405180910390f35b6101c460015481565b6040519081526020016101b2565b6101e56101e0366004611366565b610509565b60405190151581526020016101b2565b6005546101c4565b6101e561020b366004611392565b610520565b60405160ff7f00000000000000000000000000000000000000000000000000000000000000001681526020016101b2565b61025c73735b14bb79463307aacbed86daf3322b1e6226ab81565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101b2565b6101e561028f3660046113d3565b6105b7565b6101e56102a2366004611366565b6105cb565b6101c460025481565b6101c46102be3660046113ec565b73ffffffffffffffffffffffffffffffffffffffff1660009081526003602052604090205490565b6101c47f000000000000000000000000000000000000000000000000000000000000000081565b60085461025c9073ffffffffffffffffffffffffffffffffffffffff1681565b6101a561071f565b61035c7f000000000000000000000000000000000000000000000000000000000000000081565b6040516101b29190611409565b6101e5610377366004611366565b61072e565b6101e561038a366004611479565b61073b565b6103a261039d3660046113ec565b61088a565b005b6103a26103b23660046113ec565b61099e565b6103bf610aab565b6040805173ffffffffffffffffffffffffffffffffffffffff90931683526020830191909152016101b2565b6101c46103f9366004611571565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260046020908152604080832093909416825291909152205490565b6103a261043f3660046113d3565b610cc9565b60005461025c9073ffffffffffffffffffffffffffffffffffffffff1681565b6103a26104723660046113d3565b610d4b565b606060068054610486906115aa565b80601f01602080910402602001604051908101604052809291908181526020018280546104b2906115aa565b80156104ff5780601f106104d4576101008083540402835291602001916104ff565b820191906000526020600020905b8154815290600101906020018083116104e257829003601f168201915b5050505050905090565b6000610516338484610dcd565b5060015b92915050565b600061052d848484610ed6565b73ffffffffffffffffffffffffffffffffffffffff8416600090815260046020908152604080832033845290915290205482811015610598576040517f10bad14700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6105ac85336105a7868561162c565b610dcd565b506001949350505050565b60006105c33383611091565b506001919050565b60003373735b14bb79463307aacbed86daf3322b1e6226ab14801590610609575060005473ffffffffffffffffffffffffffffffffffffffff163314155b801561062d575060085473ffffffffffffffffffffffffffffffffffffffff163314155b15610664576040517fddb5de5e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61066e83836111d3565b6040517f735b14bb79463307aacbed86daf3322b1e6226ab000000000000000000000000602082015273ffffffffffffffffffffffffffffffffffffffff8416907f67fc7bdaed5b0ec550d8706b87d60568ab70c6b781263c70101d54cd1564aab390603401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529082905261070e91869061163f565b60405180910390a250600192915050565b606060078054610486906115aa565b6000610516338484610ed6565b6000806000610748610aab565b6040517f23b872dd00000000000000000000000000000000000000000000000000000000815233600482015273735b14bb79463307aacbed86daf3322b1e6226ab602482015260448101829052919350915073ffffffffffffffffffffffffffffffffffffffff8316906323b872dd906064016020604051808303816000875af11580156107da573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107fe9190611661565b610834576040517f0a7cd6d600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61083e3385611091565b60025460405133917f9ffbffc04a397460ee1dbe8c9503e098090567d6b7f4b3c02a8617d800b6d9559161087791899189918791611683565b60405180910390a2506001949350505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab146108d7576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116610924576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527fd55614e962c5fd6ece71614f6348d702468a997a394dd5e5c1677950226d97ae906020015b60405180910390a150565b3373735b14bb79463307aacbed86daf3322b1e6226ab146109eb576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116610a38576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600880547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527f88815d964e380677e86d817e7d65dea59cb7b4c3b5b7a0c8ec7ea4a74f90a38790602001610993565b600080546040517f0be155470000000000000000000000000000000000000000000000000000000081527f000000000000000000000000000000000000000000000000000000000000000060048201528291829173ffffffffffffffffffffffffffffffffffffffff90911690630be1554790602401602060405180830381865afa158015610b3e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b6291906116b2565b905073ffffffffffffffffffffffffffffffffffffffff8116610bb1576040517f78fff39600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080546040517fd7fd7afb0000000000000000000000000000000000000000000000000000000081527f0000000000000000000000000000000000000000000000000000000000000000600482015273ffffffffffffffffffffffffffffffffffffffff9091169063d7fd7afb90602401602060405180830381865afa158015610c40573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c6491906116cf565b905080600003610ca0576040517fe661aed000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060025460015483610cb391906116e8565b610cbd91906116ff565b92959294509192505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610d16576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60028190556040518181527fef13af88e424b5d15f49c77758542c1938b08b8b95b91ed0751f98ba99000d8f90602001610993565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610d98576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018190556040518181527fff5788270f43bfc1ca41c503606d2594aa3023a1a7547de403a3e2f146a4a80a90602001610993565b73ffffffffffffffffffffffffffffffffffffffff8316610e1a576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216610e67576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff83811660008181526004602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8316610f23576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216610f70576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff831660009081526003602052604090205481811015610fd0576040517ffe382aa700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610fda828261162c565b73ffffffffffffffffffffffffffffffffffffffff808616600090815260036020526040808220939093559085168152908120805484929061101d9084906116ff565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161108391815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff82166110de576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff82166000908152600360205260409020548181101561113e576040517ffe382aa700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611148828261162c565b73ffffffffffffffffffffffffffffffffffffffff84166000908152600360205260408120919091556005805484929061118390849061162c565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90602001610ec9565b73ffffffffffffffffffffffffffffffffffffffff8216611220576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b806005600082825461123291906116ff565b909155505073ffffffffffffffffffffffffffffffffffffffff82166000908152600360205260408120805483929061126c9084906116ff565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6000815180845260005b818110156112e9576020818501810151868301820152016112cd565b5060006020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b60208152600061133a60208301846112c3565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff8116811461136357600080fd5b50565b6000806040838503121561137957600080fd5b823561138481611341565b946020939093013593505050565b6000806000606084860312156113a757600080fd5b83356113b281611341565b925060208401356113c281611341565b929592945050506040919091013590565b6000602082840312156113e557600080fd5b5035919050565b6000602082840312156113fe57600080fd5b813561133a81611341565b6020810160038310611444577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000806040838503121561148c57600080fd5b823567ffffffffffffffff8111156114a357600080fd5b8301601f810185136114b457600080fd5b803567ffffffffffffffff8111156114ce576114ce61144a565b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8501160116810181811067ffffffffffffffff8211171561153a5761153a61144a565b60405281815282820160200187101561155257600080fd5b8160208401602083013760006020928201830152969401359450505050565b6000806040838503121561158457600080fd5b823561158f81611341565b9150602083013561159f81611341565b809150509250929050565b600181811c908216806115be57607f821691505b6020821081036115f7577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8181038181111561051a5761051a6115fd565b60408152600061165260408301856112c3565b90508260208301529392505050565b60006020828403121561167357600080fd5b8151801515811461133a57600080fd5b60808152600061169660808301876112c3565b6020830195909552506040810192909252606090910152919050565b6000602082840312156116c457600080fd5b815161133a81611341565b6000602082840312156116e157600080fd5b5051919050565b808202811582820484141761051a5761051a6115fd565b8082018082111561051a5761051a6115fd56fea26469706673582212204013e39523742118b3f2227e145ee7e48176ba6aebead33c596dca2acb59a74c64736f6c634300081a0033a2646970667358221220dff427f912b969cfd1b043c733f6768d29cf07b74c928801e2e0f2c552d0209964736f6c634300081a0033", } // ZRC20TestABI is the input ABI used to generate the binding from. diff --git a/v2/src/zevm/interfaces/IGatewayZEVM.sol b/v2/src/zevm/interfaces/IGatewayZEVM.sol index 004e6501..b804368e 100644 --- a/v2/src/zevm/interfaces/IGatewayZEVM.sol +++ b/v2/src/zevm/interfaces/IGatewayZEVM.sol @@ -71,74 +71,6 @@ interface IGatewayZEVMErrors { error OnlyWZETAOrFungible(); } -/// @title IGatewayZEVMEvents -/// @notice Interface for the events emitted by the GatewayZEVM contract. -interface IGatewayZEVMEvents { - /// @notice Emitted when a cross-chain call is made. - /// @param sender The address of the sender. - /// @param chainId Chain id of external chain. - /// @param receiver The receiver address on the external chain. - /// @param message The calldata passed to the contract call. - event Call(address indexed sender, uint256 indexed chainId, bytes receiver, bytes message); - - /// @notice Emitted when a withdrawal is made. - /// @param sender The address from which the tokens are withdrawn. - /// @param chainId Chain id of external chain. - /// @param receiver The receiver address on the external chain. - /// @param zrc20 The address of the ZRC20 token. - /// @param value The amount of tokens withdrawn. - /// @param gasfee The gas fee for the withdrawal. - /// @param protocolFlatFee The protocol flat fee for the withdrawal. - /// @param message The calldata passed to the contract call. - event Withdrawal( - address indexed sender, - uint256 indexed chainId, - bytes receiver, - address zrc20, - uint256 value, - uint256 gasfee, - uint256 protocolFlatFee, - bytes message - ); -} - -/// @title IGatewayZEVMErrors -/// @notice Interface for the errors used in the GatewayZEVM contract. -interface IGatewayZEVMErrors { - /// @notice Error indicating a withdrawal failure. - error WithdrawalFailed(); - - /// @notice Error indicating an insufficient ZRC20 token amount. - error InsufficientZRC20Amount(); - - /// @notice Error indicating an insufficient zeta amount. - error InsufficientZetaAmount(); - - /// @notice Error indicating a failure to burn ZRC20 tokens. - error ZRC20BurnFailed(); - - /// @notice Error indicating a failure to transfer ZRC20 tokens. - error ZRC20TransferFailed(); - - /// @notice Error indicating a failure to deposit ZRC20 tokens. - error ZRC20DepositFailed(); - - /// @notice Error indicating a failure to transfer gas fee. - error GasFeeTransferFailed(); - - /// @notice Error indicating that the caller is not the Fungible module. - error CallerIsNotFungibleModule(); - - /// @notice Error indicating an invalid target address. - error InvalidTarget(); - - /// @notice Error indicating a failure to send ZETA tokens. - error FailedZetaSent(); - - /// @notice Error indicating that only WZETA or the Fungible module can call the function. - error OnlyWZETAOrFungible(); -} - /// @title IGatewayZEVM /// @notice Interface for the GatewayZEVM contract. /// @dev Defines functions for cross-chain interactions and token handling. diff --git a/v2/test/GatewayZEVM.t.sol b/v2/test/GatewayZEVM.t.sol index f21e1960..5790a7b4 100644 --- a/v2/test/GatewayZEVM.t.sol +++ b/v2/test/GatewayZEVM.t.sol @@ -456,36 +456,6 @@ contract GatewayZEVMOutboundTest is Test, IGatewayZEVMEvents, IGatewayZEVMErrors gateway.execute(context, address(0), 1, address(testUniversalContract), message); } - function testExecuteFailsIfTargetIsZeroAddress() public { - bytes memory message = abi.encode("hello"); - zContext memory context = - zContext({ origin: abi.encodePacked(address(gateway)), sender: fungibleModule, chainID: 1 }); - - vm.prank(fungibleModule); - vm.expectRevert(ZeroAddress.selector); - gateway.execute(context, address(zrc20), 1, address(0), message); - } - - function testExecuteFailsIfAmountIsZero() public { - bytes memory message = abi.encode("hello"); - zContext memory context = - zContext({ origin: abi.encodePacked(address(gateway)), sender: fungibleModule, chainID: 1 }); - - vm.prank(fungibleModule); - vm.expectRevert(InsufficientZRC20Amount.selector); - gateway.execute(context, address(zrc20), 0, address(testUniversalContract), message); - } - - function testExecuteUniversalContract() public { - bytes memory message = abi.encode("hello"); - zContext memory context = - zContext({ origin: abi.encodePacked(address(gateway)), sender: fungibleModule, chainID: 1 }); - - vm.prank(fungibleModule); - vm.expectRevert(ZeroAddress.selector); - gateway.execute(context, address(0), 1, address(testUniversalContract), message); - } - function testExecuteFailsIfAmountIsZero() public { bytes memory message = abi.encode("hello"); zContext memory context = @@ -567,7 +537,7 @@ contract GatewayZEVMOutboundTest is Test, IGatewayZEVMEvents, IGatewayZEVMErrors gateway.executeRevert(context, address(zrc20), 0, address(testUniversalContract), message); } - function testExecuteRevertUniversalContract() public { + function testExecuteRevertUniversalContractFailsIfZeroAddress() public { bytes memory message = abi.encode("hello"); revertContext memory context = revertContext({ origin: abi.encodePacked(address(gateway)), sender: fungibleModule, chainID: 1 }); @@ -577,16 +547,6 @@ contract GatewayZEVMOutboundTest is Test, IGatewayZEVMEvents, IGatewayZEVMErrors gateway.executeRevert(context, address(0), 1, address(testUniversalContract), message); } - function testExecuteRevertUniversalContractFailsIfAmountIsZero() public { - bytes memory message = abi.encode("hello"); - revertContext memory context = - revertContext({ origin: abi.encodePacked(address(gateway)), sender: fungibleModule, chainID: 1 }); - - vm.prank(fungibleModule); - vm.expectRevert(InsufficientZRC20Amount.selector); - gateway.executeRevert(context, address(zrc20), 0, address(testUniversalContract), message); - } - function testExecuteRevertUniversalContractFailsIfZRC20IsZeroAddress() public { bytes memory message = abi.encode("hello"); revertContext memory context = @@ -597,16 +557,6 @@ contract GatewayZEVMOutboundTest is Test, IGatewayZEVMEvents, IGatewayZEVMErrors gateway.executeRevert(context, address(0), 1, address(testUniversalContract), message); } - function testExecuteRevertUniversalContractFailsIfTargetIsZeroAddress() public { - bytes memory message = abi.encode("hello"); - revertContext memory context = - revertContext({ origin: abi.encodePacked(address(gateway)), sender: fungibleModule, chainID: 1 }); - - vm.prank(fungibleModule); - vm.expectRevert(ZeroAddress.selector); - gateway.executeRevert(context, address(zrc20), 1, address(0), message); - } - function testExecuteRevertUniversalContract() public { bytes memory message = abi.encode("hello"); revertContext memory context = @@ -802,7 +752,7 @@ contract GatewayZEVMOutboundTest is Test, IGatewayZEVMEvents, IGatewayZEVMErrors gateway.depositAndCall(context, 0, address(zrc20), message); } - function testDepositZETAAndCallUniversalContract() public { + function testDepositZETAAndCallUniversalContractFailsIfZeroAddress() public { uint256 amount = 1; uint256 fungibleBalanceBefore = zetaToken.balanceOf(fungibleModule); uint256 gatewayBalanceBefore = zetaToken.balanceOf(address(gateway)); @@ -816,16 +766,6 @@ contract GatewayZEVMOutboundTest is Test, IGatewayZEVMEvents, IGatewayZEVMErrors gateway.depositAndCall(context, 1, address(0), message); } - function testDepositZETAAndCallUniversalContractFailsIfTargetIsAmountIsZero() public { - bytes memory message = abi.encode("hello"); - zContext memory context = - zContext({ origin: abi.encodePacked(address(gateway)), sender: fungibleModule, chainID: 1 }); - - vm.prank(fungibleModule); - vm.expectRevert(InsufficientZetaAmount.selector); - gateway.depositAndCall(context, 0, address(zrc20), message); - } - function testDepositZETAAndCallUniversal() public { uint256 amount = 1; uint256 fungibleBalanceBefore = zetaToken.balanceOf(fungibleModule); diff --git a/v2/typechain-types/factories/ERC20CustodyEchidnaTest__factory.ts b/v2/typechain-types/factories/ERC20CustodyEchidnaTest__factory.ts index 61713012..7a11f657 100644 --- a/v2/typechain-types/factories/ERC20CustodyEchidnaTest__factory.ts +++ b/v2/typechain-types/factories/ERC20CustodyEchidnaTest__factory.ts @@ -702,7 +702,7 @@ const _abi = [ ] as const; const _bytecode = - "0x600580546001600160a01b03191633908117909155600e60a09081526d11d85d195dd85e5155934b9cdbdb60921b60c0526101049190915261012361012481905261014452606460e090815261016460405261010080516001600160e01b0390811663c0c53b8b60e01b1790915261007992919061029316565b600680546001600160a01b03929092166001600160a01b03199283168117909155600780549092161790553480156100b057600080fd5b5060075460055460016000556002805460ff191690556001600160a01b039182169116808215806100e857506001600160a01b038216155b806100fa57506001600160a01b038116155b156101185760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b0383166080526101306000826102b2565b5061015b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a826102b2565b506101867f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e4836102b2565b5061019f600080516020616e78833981519152826102b2565b506101b8600080516020616e78833981519152836102b2565b505050506040516101c89061383e565b60408082526004908201819052631d195cdd60e21b606083015260806020830181905282015263151154d560e21b60a082015260c001604051809103906000f08015801561021a573d6000803e3d6000fd5b50600480546001600160a01b0319166001600160a01b0392831617815560075460405163ae7a3a6f60e01b815230928101929092529091169063ae7a3a6f90602401600060405180830381600087803b15801561027657600080fd5b505af115801561028a573d6000803e3d6000fd5b505050506148bf565b600061029d61384b565b6102a8848483610345565b9150505b92915050565b60008281526001602090815260408083206001600160a01b038516845290915281205460ff1661033d5760008381526001602081815260408084206001600160a01b0387168086529252808420805460ff19169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45060016102ac565b5060006102ac565b60008061035285846103c1565b90506103b66040518060400160405280601d81526020017f4552433139363750726f78792e736f6c3a4552433139363750726f787900000081525082866040516020016103a0929190613954565b60408051601f19818403018152919052856103cd565b9150505b9392505050565b60006103ba8383610401565b60c081015151600090156103f7576103f084848460c0015161042260201b60201c565b90506103ba565b6103f0848461059b565b600061040d8383610668565b6103ba838360200151846103cd60201b60201c565b60008061042d610678565b9050600061043b8683610712565b905060006104588260600151836020015185610b3560201b60201c565b9050600061046883838989610cea565b9050600061047582611966565b602081015181519192509060030b156104ce5789826040015160405160200161049f929190613978565b60408051601f198184030181529082905262461bcd60e51b82526104c5916004016139de565b60405180910390fd5b60006105176040518060400160405280601581526020017f4465706c6f79656420746f20616464726573733a200000000000000000000000815250836001611afd60201b60201c565b60405163c6ce059d60e01b8152909150600080516020616e588339815191529063c6ce059d9061054b9084906004016139de565b602060405180830381865afa158015610568573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061058c91906139f1565b9b9a5050505050505050505050565b604051638d1cc92560e01b81526000908190600080516020616e5883398151915290638d1cc925906105d19087906004016139de565b600060405180830381865afa1580156105ee573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526106169190810190613ae6565b905060006106458285604051602001610630929190613b1a565b60408051601f19818403018152919052611c9d565b90506001600160a01b0381166102a857848460405160200161049f929190613b49565b61067482826000611cb0565b5050565b60408051808201825260038152621bdd5d60ea1b602082015290516334515cdb60e21b8152606091600080516020616e5883398151915291829063d145736c906106c6908490600401613bd8565b600060405180830381865afa1580156106e3573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261070b9190810190613c0d565b9250505090565b6107446040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b6000600080516020616e5883398151915290506107896040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b61079285611d8a565b602082015260006107a286611fdf565b90506000836001600160a01b031663d930a0e66040518163ffffffff1660e01b8152600401600060405180830381865afa1580156107e4573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261080c9190810190613c0d565b868385602001516040516020016108269493929190613c55565b60408051601f19818403018152908290526360f9bb1160e01b825291506000906001600160a01b038616906360f9bb11906108659085906004016139de565b600060405180830381865afa158015610882573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526108aa9190810190613c0d565b604051636da11afb60e11b81529091506001600160a01b0386169063db4235f6906108d9908490600401613ced565b602060405180830381865afa1580156108f6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061091a9190613d26565b61092f578160405160200161049f9190613d48565b6040516309389f5960e31b81526001600160a01b038616906349c4fac89061095b908490600401613dbf565b600060405180830381865afa158015610978573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526109a09190810190613c0d565b8452604051636da11afb60e11b81526001600160a01b0386169063db4235f6906109ce908490600401613e05565b602060405180830381865afa1580156109eb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a0f9190613d26565b15610a8b576040516309389f5960e31b81526001600160a01b038616906349c4fac890610a40908490600401613e05565b600060405180830381865afa158015610a5d573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610a859190810190613c0d565b60408501525b846001600160a01b03166349c4fac8828660000151604051602001610ab09190613e46565b6040516020818303038152906040526040518363ffffffff1660e01b8152600401610adc929190613ea1565b600060405180830381865afa158015610af9573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610b219190810190613c0d565b606085015250608083015250949350505050565b60408051600480825260a0820190925260609160009190816020015b6060815260200190600190039081610b51579050509050604051806040016040528060048152602001630677265760e41b81525081600081518110610b9857610b98613ec6565b6020026020010181905250604051806040016040528060038152602001620b5c9b60ea1b81525081600181518110610bd257610bd2613ec6565b602002602001018190525084604051602001610bee9190613edc565b60405160208183030381529060405281600281518110610c1057610c10613ec6565b602002602001018190525082604051602001610c2c9190613f11565b60405160208183030381529060405281600381518110610c4e57610c4e613ec6565b60209081029190910101526000610c6482611966565b9050600081602001519050610ccb610c9e60405180604001604052806005815260200164173539b7b760d91b81525061216260201b60201c565b6040805180820182526000808252602091820152815180830190925284518252808501908201529061218f565b610ce0578560405160200161049f9190613f40565b9695505050505050565b60a0810151604080518082018252600080825260209182015281518083019092528251808352928101910152606090600080516020616e588339815191529015610d34565b511590565b610e5057826020015115610dc45760405162461bcd60e51b81526020600482015260586024820152600080516020616e9883398151915260448201527f62652075736564207768656e207468652060736b6970566572696679536f757260648201527f6365436f646560206f7074696f6e206973206074727565600000000000000000608482015260a4016104c5565b8260c0015115610e505760405162461bcd60e51b81526020600482015260536024820152600080516020616e9883398151915260448201527f62652075736564207768656e207468652060736b69704c6963656e736554797060648201527f6560206f7074696f6e2069732060747275656000000000000000000000000000608482015260a4016104c5565b6040805160ff8082526120008201909252600091816020015b6060815260200190600190039081610e695790505090506000604051806040016040528060038152602001620dce0f60eb1b815250828280610eaa90613fd5565b935060ff1681518110610ebf57610ebf613ec6565b60200260200101819052506040518060400160405280600d81526020016c302e302e312d616c7068612e3760981b815250604051602001610f009190613ff4565b604051602081830303815290604052828280610f1b90613fd5565b935060ff1681518110610f3057610f30613ec6565b6020026020010181905250604051806040016040528060068152602001656465706c6f7960d01b815250828280610f6690613fd5565b935060ff1681518110610f7b57610f7b613ec6565b60200260200101819052506040518060400160405280600e81526020016d2d2d636f6e74726163744e616d6560901b815250828280610fb990613fd5565b935060ff1681518110610fce57610fce613ec6565b60200260200101819052508760200151828280610fea90613fd5565b935060ff1681518110610fff57610fff613ec6565b60200260200101819052506040518060400160405280600e81526020016d05a5ac6dedce8e4c2c6e8a0c2e8d60931b81525082828061103d90613fd5565b935060ff168151811061105257611052613ec6565b60209081029190910101528751828261106a81613fd5565b935060ff168151811061107f5761107f613ec6565b6020026020010181905250604051806040016040528060098152602001680b4b58da185a5b925960ba1b8152508282806110b890613fd5565b935060ff16815181106110cd576110cd613ec6565b60209081029190910101526110e1466121f0565b82826110ec81613fd5565b935060ff168151811061110157611101613ec6565b60200260200101819052506040518060400160405280600f81526020016e2d2d6275696c64496e666f46696c6560881b81525082828061114090613fd5565b935060ff168151811061115557611155613ec6565b60200260200101819052508682828061116d90613fd5565b935060ff168151811061118257611182613ec6565b60209081029190910101528551156112905760408051808201909152601581527f2d2d636f6e7374727563746f7242797465636f64650000000000000000000000602082015282826111d381613fd5565b935060ff16815181106111e8576111e8613ec6565b60209081029190910101526040516371aad10d60e01b81526001600160a01b038416906371aad10d9061121f9089906004016139de565b600060405180830381865afa15801561123c573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526112649190810190613c0d565b828261126f81613fd5565b935060ff168151811061128457611284613ec6565b60200260200101819052505b84602001511561133d576040805180820190915260128152712d2d766572696679536f75726365436f646560701b602082015282826112ce81613fd5565b935060ff16815181106112e3576112e3613ec6565b60200260200101819052506040518060400160405280600581526020016466616c736560d81b81525082828061131890613fd5565b935060ff168151811061132d5761132d613ec6565b60200260200101819052506114a4565b611353610d2f8660a0015161216260201b60201c565b6113d65760408051808201909152600d81526c2d2d6c6963656e73655479706560981b6020820152828261138681613fd5565b935060ff168151811061139b5761139b613ec6565b60200260200101819052508460a001516040516020016113bb9190613edc565b60405160208183030381529060405282828061131890613fd5565b8460c001511580156113fb57506113f9610d2f896040015161216260201b60201c565b155b156114a45760408051808201909152600d81526c2d2d6c6963656e73655479706560981b6020820152828261142f81613fd5565b935060ff168151811061144457611444613ec6565b602090810291909101015261145888612282565b6040516020016114689190613edc565b60405160208183030381529060405282828061148390613fd5565b935060ff168151811061149857611498613ec6565b60200260200101819052505b6114ba610d2f866040015161216260201b60201c565b61153d5760408051808201909152600b81526a0b4b5c995b185e595c925960aa1b602082015282826114eb81613fd5565b935060ff168151811061150057611500613ec6565b6020026020010181905250846040015182828061151c90613fd5565b935060ff168151811061153157611531613ec6565b60200260200101819052505b60608501511561162e576040805180820190915260068152650b4b5cd85b1d60d21b6020820152828261156f81613fd5565b935060ff168151811061158457611584613ec6565b60209081029190910101526060850151604051631623433d60e31b815260048101919091526001600160a01b0384169063b11a19e890602401600060405180830381865afa1580156115da573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526116029190810190613c0d565b828261160d81613fd5565b935060ff168151811061162257611622613ec6565b60200260200101819052505b60e085015151156116c05760408051808201909152600a8152690b4b59d85cd31a5b5a5d60b21b6020820152828261166581613fd5565b935060ff168151811061167a5761167a613ec6565b602090810291909101015260e085015151611694906121f0565b828261169f81613fd5565b935060ff16815181106116b4576116b4613ec6565b60200260200101819052505b60e0850151602001511561175d5760408051808201909152600a8152692d2d676173507269636560b01b602082015282826116fa81613fd5565b935060ff168151811061170f5761170f613ec6565b60200260200101819052506117318560e00151602001516121f060201b60201c565b828261173c81613fd5565b935060ff168151811061175157611751613ec6565b60200260200101819052505b60e085015160400151156117fe5760408051808201909152600e81526d2d2d6d617846656550657247617360901b6020820152828261179b81613fd5565b935060ff16815181106117b0576117b0613ec6565b60200260200101819052506117d28560e00151604001516121f060201b60201c565b82826117dd81613fd5565b935060ff16815181106117f2576117f2613ec6565b60200260200101819052505b60e085015160600151156118ae5760408051808201909152601681527f2d2d6d61785072696f72697479466565506572476173000000000000000000006020820152828261184b81613fd5565b935060ff168151811061186057611860613ec6565b60200260200101819052506118828560e00151606001516121f060201b60201c565b828261188d81613fd5565b935060ff16815181106118a2576118a2613ec6565b60200260200101819052505b60008160ff166001600160401b038111156118cb576118cb613a1a565b6040519080825280602002602001820160405280156118fe57816020015b60608152602001906001900390816118e95790505b50905060005b8260ff168160ff16101561195757838160ff168151811061192757611927613ec6565b6020026020010151828260ff168151811061194457611944613ec6565b6020908102919091010152600101611904565b5093505050505b949350505050565b61198d6040518060600160405280600060030b815260200160608152602001606081525090565b6040805180820182526004808252630c4c2e6d60e31b602083015291516334515cdb60e21b8152600080516020616e5883398151915292600091849163d145736c916119db9186910161404b565b600060405180830381865afa1580156119f8573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611a209190810190613c0d565b90506000611a2e8683612938565b90506000846001600160a01b031663f45c1ce7836040518263ffffffff1660e01b8152600401611a5e9190614092565b6000604051808303816000875af1158015611a7d573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611aa591908101906140f7565b805190915060030b15801590611abe5750602081015151155b8015611acd5750604081015151155b15610ce05781600081518110611ae557611ae5613ec6565b602002602001015160405160200161049f91906141aa565b60606000611b328560408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600080825260209182015281518083019092528651825280870190820152909150611b699082905b90612a72565b15611c66576000611be682611be081611bda611bac8a60408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6040805180820182526000808252602091820152815180830190925282518252918201519181019190915290565b90612a99565b90612af6565b9050611c1a611c13604051806040016040528060018152602001600560f91b81525061216260201b60201c565b8290612a72565b15611c5457611c51611c4a604051806040016040528060018152602001600560f91b81525061216260201b60201c565b8290612b7b565b90505b611c5d81612ba1565b925050506103ba565b8215611c7f57848460405160200161049f92919061437a565b50506040805160208101909152600081526103ba565b509392505050565b6000808251602084016000f09392505050565b8160a0015115611cbf57505050565b6000611ccc848484612c06565b90506000611cd982611966565b602081015181519192509060030b158015611d4c5750611d4c611d20604051806040016040528060078152602001665355434345535360c81b81525061216260201b60201c565b604080518082018252600080825260209182015281518083019092528451825280850190820152611b63565b15611d5957505050505050565b60408201515115611d7957816040015160405160200161049f91906143f5565b8060405160200161049f919061443f565b60606000611dbf8360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b9050611df6611def604051806040016040528060048152602001630b9cdbdb60e21b81525061216260201b60201c565b829061218f565b15611e38576103ba611e33611e2c604051806040016040528060048152602001630b9cdbdb60e21b81525061216260201b60201c565b8390613119565b612ba1565b611e6a611e63604051806040016040528060018152602001601d60f91b81525061216260201b60201c565b82906131a3565b600103611ed257611e9c611c4a604051806040016040528060018152602001601d60f91b81525061216260201b60201c565b506103ba611e33611ecb604051806040016040528060018152602001601d60f91b81525061216260201b60201c565b8390612b7b565b611f01611def60405180604001604052806005815260200164173539b7b760d91b81525061216260201b60201c565b15611fce576000611f3982611f34604051806040016040528060018152602001602f60f81b81525061216260201b60201c565b613238565b905060008160018351611f4c919061448f565b81518110611f5c57611f5c613ec6565b60200260200101519050611fc5611e33611f9860405180604001604052806005815260200164173539b7b760d91b81525061216260201b60201c565b60408051808201825260008082526020918201528151808301909252855182528086019082015290613119565b95945050505050565b8260405160200161049f91906144a2565b606060006120148360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b9050612044611def604051806040016040528060048152602001630b9cdbdb60e21b81525061216260201b60201c565b15612052576103ba81612ba1565b61207d611e63604051806040016040528060018152602001601d60f91b81525061216260201b60201c565b6001036120b2576103ba611e33611ecb604051806040016040528060018152602001601d60f91b81525061216260201b60201c565b6120e1611def60405180604001604052806005815260200164173539b7b760d91b81525061216260201b60201c565b15611fce57600061211482611f34604051806040016040528060018152602001602f60f81b81525061216260201b60201c565b905060018151111561215057806002825161212f919061448f565b8151811061213f5761213f613ec6565b602002602001015192505050919050565b508260405160200161049f91906144a2565b60408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b8051825160009111156121a4575060006102ac565b815183516020850151600092916121ba9161455c565b6121c4919061448f565b9050826020015181036121db5760019150506102ac565b82516020840151819020912014905092915050565b606060006121fd836132dc565b60010190506000816001600160401b0381111561221c5761221c613a1a565b6040519080825280601f01601f191660200182016040528015612246576020820181803683370190505b5090508181016020015b600019016f181899199a1a9b1b9c1cb0b131b232b360811b600a86061a8153600a850494508461225057509392505050565b60606000612299836040015161216260201b60201c565b90506122d66122cf6040518060400160405280600a8152602001691553931250d15394d15160b21b81525061216260201b60201c565b82906133be565b156122fd5750506040805180820190915260048152634e6f6e6560e01b6020820152919050565b6123306122cf60405180604001604052806009815260200168556e6c6963656e736560b81b81525061216260201b60201c565b1561235c575050604080518082019091526009815268556e6c6963656e736560b81b6020820152919050565b6123896122cf6040518060400160405280600381526020016213525560ea1b81525061216260201b60201c565b156123af57505060408051808201909152600381526213525560ea1b6020820152919050565b6123e56122cf6040518060400160405280600c81526020016b47504c2d322e302d6f6e6c7960a01b81525061216260201b60201c565b8061242557506124256122cf6040518060400160405280601081526020016f23a8261699171816b7b916b630ba32b960811b81525061216260201b60201c565b1561245157505060408051808201909152600981526823a72a9023a8263b1960b91b6020820152919050565b6124876122cf6040518060400160405280600c81526020016b47504c2d332e302d6f6e6c7960a01b81525061216260201b60201c565b806124c757506124c76122cf6040518060400160405280601081526020016f23a8261699971816b7b916b630ba32b960811b81525061216260201b60201c565b156124f3575050604080518082019091526009815268474e552047504c763360b81b6020820152919050565b61252a6122cf6040518060400160405280600d81526020016c4c47504c2d322e312d6f6e6c7960981b81525061216260201b60201c565b8061256b575061256b6122cf604051806040016040528060118152602001702623a8261699171896b7b916b630ba32b960791b81525061216260201b60201c565b1561259a57505060408051808201909152600c81526b474e55204c47504c76322e3160a01b6020820152919050565b6125d16122cf6040518060400160405280600d81526020016c4c47504c2d332e302d6f6e6c7960981b81525061216260201b60201c565b8061261257506126126122cf604051806040016040528060118152602001702623a8261699971816b7b916b630ba32b960791b81525061216260201b60201c565b1561263f57505060408051808201909152600a815269474e55204c47504c763360b01b6020820152919050565b6126756122cf6040518060400160405280600c81526020016b4253442d322d436c6175736560a01b81525061216260201b60201c565b156126a457505060408051808201909152600c81526b4253442d322d436c6175736560a01b6020820152919050565b6126da6122cf6040518060400160405280600c81526020016b4253442d332d436c6175736560a01b81525061216260201b60201c565b1561270957505060408051808201909152600c81526b4253442d332d436c6175736560a01b6020820152919050565b61273a6122cf6040518060400160405280600781526020016604d504c2d322e360cc1b81525061216260201b60201c565b1561276457505060408051808201909152600781526604d504c2d322e360cc1b6020820152919050565b6127956122cf6040518060400160405280600781526020016604f534c2d332e360cc1b81525061216260201b60201c565b156127bf57505060408051808201909152600781526604f534c2d332e360cc1b6020820152919050565b6127f36122cf6040518060400160405280600a81526020016904170616368652d322e360b41b81525061216260201b60201c565b1561282057505060408051808201909152600a81526904170616368652d322e360b41b6020820152919050565b6128576122cf6040518060400160405280600d81526020016c4147504c2d332e302d6f6e6c7960981b81525061216260201b60201c565b8061289857506128986122cf6040518060400160405280601181526020017020a3a8261699971816b7b916b630ba32b960791b81525061216260201b60201c565b156128c557505060408051808201909152600a815269474e55204147504c763360b01b6020820152919050565b6128f76122cf604051806040016040528060088152602001674255534c2d312e3160c01b81525061216260201b60201c565b1561292157505060408051808201909152600781526642534c20312e3160c81b6020820152919050565b6040808401518451915161049f929060200161456f565b60608060005b84518110156129c3578185828151811061295a5761295a613ec6565b6020026020010151604051602001612973929190613b1a565b604051602081830303815290604052915060018551612992919061448f565b81146129bb57816040516020016129a991906146bf565b60405160208183030381529060405291505b60010161293e565b5060408051600380825260808201909252600091816020015b60608152602001906001900390816129dc5790505090508381600081518110612a0757612a07613ec6565b6020026020010181905250604051806040016040528060028152602001612d6360f01b81525081600181518110612a4057612a40613ec6565b60200260200101819052508181600281518110612a5f57612a5f613ec6565b6020908102919091010152949350505050565b6020808301518351835192840151600093612a9092918491906133d2565b14159392505050565b6040805180820190915260008082526020808301829052845185820151855192860151612ac693906134e3565b9050836020015181612ad8919061448f565b84518590612ae790839061448f565b90525060208401525090919050565b6040805180820190915260008082526020820152815183511015612b1b5750816102ac565b6020808301519084015160019114612b425750815160208481015190840151829020919020145b8015612b7357825184518590612b5990839061448f565b9052508251602085018051612b6f90839061455c565b9052505b509192915050565b6040805180820190915260008082526020820152612b9a838383613603565b5092915050565b6060600082600001516001600160401b03811115612bc157612bc1613a1a565b6040519080825280601f01601f191660200182016040528015612beb576020820181803683370190505b50602084810151855192935090830191612b9a9183916136a9565b60606000612c12610678565b6040805160ff808252612000820190925291925060009190816020015b6060815260200190600190039081612c2f5790505090506000604051806040016040528060038152602001620dce0f60eb1b815250828280612c7090613fd5565b935060ff1681518110612c8557612c85613ec6565b6020026020010181905250604051806040016040528060078152602001665e312e33322e3360c81b815250604051602001612cc091906146e4565b604051602081830303815290604052828280612cdb90613fd5565b935060ff1681518110612cf057612cf0613ec6565b60200260200101819052506040518060400160405280600881526020016776616c696461746560c01b815250828280612d2890613fd5565b935060ff1681518110612d3d57612d3d613ec6565b602002602001018190525082604051602001612d599190613f11565b604051602081830303815290604052828280612d7490613fd5565b935060ff1681518110612d8957612d89613ec6565b60200260200101819052506040518060400160405280600a8152602001690b4b58dbdb9d1c9858dd60b21b815250828280612dc390613fd5565b935060ff1681518110612dd857612dd8613ec6565b6020908102919091010152612ded8784613723565b8282612df881613fd5565b935060ff1681518110612e0d57612e0d613ec6565b602090810291909101015285515115612ea55760408051808201909152600b81526a2d2d7265666572656e636560a81b60208201528282612e4d81613fd5565b935060ff1681518110612e6257612e62613ec6565b60209081029190910101528551612e799084613723565b8282612e8481613fd5565b935060ff1681518110612e9957612e99613ec6565b60200260200101819052505b856080015115612f135760408051808201909152601881527f2d2d756e73616665536b697053746f72616765436865636b000000000000000060208201528282612eee81613fd5565b935060ff1681518110612f0357612f03613ec6565b6020026020010181905250612f6e565b8415612f6e576040805180820190915260128152712d2d726571756972655265666572656e636560701b60208201528282612f4d81613fd5565b935060ff1681518110612f6257612f62613ec6565b60200260200101819052505b60408601515115612ffa5760408051808201909152600d81526c2d2d756e73616665416c6c6f7760981b60208201528282612fa881613fd5565b935060ff1681518110612fbd57612fbd613ec6565b60200260200101819052508560400151828280612fd990613fd5565b935060ff1681518110612fee57612fee613ec6565b60200260200101819052505b8560600151156130645760408051808201909152601481527f2d2d756e73616665416c6c6f7752656e616d65730000000000000000000000006020820152828261304381613fd5565b935060ff168151811061305857613058613ec6565b60200260200101819052505b60008160ff166001600160401b0381111561308157613081613a1a565b6040519080825280602002602001820160405280156130b457816020015b606081526020019060019003908161309f5790505b50905060005b8260ff168160ff16101561310d57838160ff16815181106130dd576130dd613ec6565b6020026020010151828260ff16815181106130fa576130fa613ec6565b60209081029190910101526001016130ba565b50979650505050505050565b604080518082019091526000808252602082015281518351101561313e5750816102ac565b815183516020850151600092916131549161455c565b61315e919061448f565b6020840151909150600190821461317f575082516020840151819020908220145b801561319a5783518551869061319690839061448f565b9052505b50929392505050565b8051825160208085015190840151600093849390926131c39284906134e3565b6131cd919061455c565b90505b835160208501516131e1919061455c565b8111612b9a57816131f181614729565b925050826000015161322785602001518361320c919061448f565b8651613218919061448f565b855160208701518591906134e3565b613231919061455c565b90506131d0565b6060600061324684846131a3565b61325190600161455c565b6001600160401b0381111561326857613268613a1a565b60405190808252806020026020018201604052801561329b57816020015b60608152602001906001900390816132865790505b50905060005b8151811015611c95576132b7611e338686612b7b565b8282815181106132c9576132c9613ec6565b60209081029190910101526001016132a1565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310613325577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310613351576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc10000831061336f57662386f26fc10000830492506010015b6305f5e1008310613387576305f5e100830492506008015b612710831061339b57612710830492506004015b606483106133ad576064830492506002015b600a83106102ac5760010192915050565b60006133ca8383613763565b159392505050565b6000808584116134d95760208411613485576000841561341d5760016133f986602061448f565b613404906008614742565b61340f906002614840565b613419919061448f565b1990505b835181168561342c898961455c565b613436919061448f565b805190935082165b81811461347057878411613458578794505050505061195e565b836134628161484c565b94505082845116905061343e565b61347a878561455c565b94505050505061195e565b838320613492858861448f565b61349c908761455c565b91505b8582106134d7578482208082036134c4576134ba868461455c565b935050505061195e565b6134cf60018461448f565b92505061349f565b505b5092949350505050565b600083818685116135ee576020851161359d576000851561352f57600161350b87602061448f565b613516906008614742565b613521906002614840565b61352b919061448f565b1990505b845181166000876135408b8b61455c565b61354a919061448f565b855190915083165b82811461358f578186106135775761356a8b8b61455c565b965050505050505061195e565b8561358181614729565b965050838651169050613552565b85965050505050505061195e565b508383206000905b6135af868961448f565b82116135ec578583208082036135cb578394505050505061195e565b6135d660018561455c565b93505081806135e490614729565b9250506135a5565b505b6135f8878761455c565b979650505050505050565b604080518082019091526000808252602080830182905285518682015186519287015161363093906134e3565b60208087018051918601919091525190915061364c908261448f565b83528451602086015161365f919061455c565b810361366e57600085526136a0565b8351835161367c919061455c565b8551869061368b90839061448f565b905250835161369a908261455c565b60208601525b50909392505050565b602081106136e157815183526136c060208461455c565b92506136cd60208361455c565b91506136da60208261448f565b90506136a9565b60001981156137105760016136f783602061448f565b61370390610100614840565b61370d919061448f565b90505b9151835183169219169190911790915250565b606060006137318484610712565b805160208083015160405193945061374b93909101614863565b60405160208183030381529060405291505092915050565b8151815160009190811115613776575081515b6020808501519084015160005b8381101561382f57825182518082146137ff5760001960208710156137de576001846137b089602061448f565b6137ba919061455c565b6137c5906008614742565b6137d0906002614840565b6137da919061448f565b1990505b81811683821681810391146137fc5797506102ac9650505050505050565b50505b61380a60208661455c565b945061381760208561455c565b93505050602081613828919061455c565b9050613783565b5084518651610ce0919061489f565b610c9f806161b983390190565b6040518060e0016040528060608152602001606081526020016060815260200160001515815260200160001515815260200160001515815260200161388e613893565b905290565b6040518061010001604052806000151581526020016000151581526020016060815260200160008019168152602001606081526020016060815260200160001515815260200161388e6040518060800160405280600081526020016000815260200160008152602001600081525090565b60005b8381101561391f578181015183820152602001613907565b50506000910152565b60008151808452613940816020860160208601613904565b601f01601f19169290920160200192915050565b6001600160a01b038316815260406020820181905260009061195e90830184613928565b7f4661696c656420746f206465706c6f7920636f6e7472616374200000000000008152600083516139b081601a850160208801613904565b6101d160f51b601a9184019182015283516139d281601c840160208801613904565b01601c01949350505050565b6020815260006103ba6020830184613928565b600060208284031215613a0357600080fd5b81516001600160a01b03811681146103ba57600080fd5b634e487b7160e01b600052604160045260246000fd5b604051606081016001600160401b0381118282101715613a5257613a52613a1a565b60405290565b6000806001600160401b03841115613a7257613a72613a1a565b50604051601f19601f85018116603f011681018181106001600160401b0382111715613aa057613aa0613a1a565b604052838152905080828401851015613ab857600080fd5b611c95846020830185613904565b600082601f830112613ad757600080fd5b6103ba83835160208501613a58565b600060208284031215613af857600080fd5b81516001600160401b03811115613b0e57600080fd5b6102a884828501613ac6565b60008351613b2c818460208801613904565b835190830190613b40818360208801613904565b01949350505050565b7f4661696c656420746f206465706c6f7920636f6e747261637420000000000000815260008351613b8181601a850160208801613904565b7f207573696e6720636f6e7374727563746f722064617461202200000000000000601a918401918201528351613bbe816033840160208801613904565b601160f91b60339290910191820152603401949350505050565b60408152600b60408201526a1193d55391149657d3d55560aa1b60608201526080602082015260006103ba6080830184613928565b600060208284031215613c1f57600080fd5b81516001600160401b03811115613c3557600080fd5b8201601f81018413613c4657600080fd5b6102a884825160208401613a58565b60008551613c67818460208a01613904565b602f60f81b9083019081528551613c85816001840160208a01613904565b602f60f81b600192909101918201528451613ca7816002840160208901613904565b600181830101915050602f60f81b60018201528351613ccd816002840160208801613904565b64173539b7b760d91b600292909101918201526007019695505050505050565b604081526000613d006040830184613928565b828103602084015260048152630b985cdd60e21b60208201526040810191505092915050565b600060208284031215613d3857600080fd5b815180151581146103ba57600080fd5b7f436f756c64206e6f742066696e642041535420696e2061727469666163742000815260008251613d8081601f850160208701613904565b7f2e205365742060617374203d20747275656020696e20666f756e6472792e746f601f939091019283015250611b5b60f21b603f820152604101919050565b604081526000613dd26040830184613928565b8281036020840152601181527005cc2e6e85cc2c4e6ded8eae8caa0c2e8d607b1b60208201526040810191505092915050565b604081526000613e186040830184613928565b8281036020840152600c81526b2e6173742e6c6963656e736560a01b60208201526040810191505092915050565b7f2e6d657461646174612e736f75726365732e5b27000000000000000000000000815260008251613e7e816014850160208701613904565b6b13ae9735b2b1b1b0b5991a9b60a11b6014939091019283015250602001919050565b604081526000613eb46040830185613928565b82810360208401526103b68185613928565b634e487b7160e01b600052603260045260246000fd5b601160f91b81528151600090613ef9816001850160208701613904565b601160f91b6001939091019283015250600201919050565b60008251613f23818460208701613904565b6a2f6275696c642d696e666f60a81b920191825250600b01919050565b7f436f756c64206e6f742066696e64206275696c642d696e666f2066696c65207781527f697468206d61746368696e6720736f7572636520636f6465206861736820666f60208201526a0391031b7b73a3930b1ba160ad1b604082015260008251613fb281604b850160208701613904565b91909101604b0192915050565b634e487b7160e01b600052601160045260246000fd5b600060ff821660ff8103613feb57613feb613fbf565b60010192915050565b7f406f70656e7a657070656c696e2f646566656e6465722d6465706c6f792d636c81526801a595b9d0b58db1a560be1b60208201526000825161403e816029850160208701613904565b9190910160290192915050565b60408152601660408201527f4f50454e5a455050454c494e5f424153485f504154480000000000000000000060608201526080602082015260006103ba6080830184613928565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b828110156140eb57603f198786030184526140d6858351613928565b945060209384019391909101906001016140ba565b50929695505050505050565b60006020828403121561410957600080fd5b81516001600160401b0381111561411f57600080fd5b82016060818503121561413157600080fd5b614139613a30565b81518060030b811461414a57600080fd5b815260208201516001600160401b0381111561416557600080fd5b61417186828501613ac6565b60208301525060408201516001600160401b0381111561419057600080fd5b61419c86828501613ac6565b604083015250949350505050565b7f4661696c656420746f2072756e206261736820636f6d6d616e642077697468208152601160f91b6020820152600082516141ec816021850160208701613904565b7f222e20496620796f7520617265207573696e672057696e646f77732c2073657460219390910192830152507f20746865204f50454e5a455050454c494e5f424153485f5041544820656e766960418201527f726f6e6d656e74207661726961626c6520746f207468652066756c6c7920717560618201527f616c69666965642070617468206f66207468652062617368206578656375746160818201527f626c652e20466f72206578616d706c652c20696620796f75206172652075736960a18201527f6e672047697420666f722057696e646f77732c206164642074686520666f6c6c60c18201527f6f77696e67206c696e6520696e20746865202e656e762066696c65206f66207960e18201527f6f75722070726f6a65637420287573696e6720666f727761726420736c6173686101018201527f6573293a0a4f50454e5a455050454c494e5f424153485f504154483d22433a2f6101218201527f50726f6772616d2046696c65732f4769742f62696e2f6261736822000000000061014182015261015c01919050565b7f4661696c656420746f2066696e64206c696e65207769746820707265666978208152602760f81b6020820152600083516143bc816021850160208801613904565b6c0139034b71037baba383aba1d1609d1b60219184019182015283516143e981602e840160208801613904565b01602e01949350505050565b7f4661696c656420746f2072756e2075706772616465207361666574792076616c815268034b230ba34b7b71d160bd1b60208201526000825161403e816029850160208701613904565b7f55706772616465207361666574792076616c69646174696f6e206661696c65648152611d0560f11b602082015260008251614482816022850160208701613904565b9190910160220192915050565b818103818111156102ac576102ac613fbf565b6d021b7b73a3930b1ba103730b6b2960951b8152600082516144cb81600e850160208701613904565b7f206d75737420626520696e2074686520666f726d6174204d79436f6e74726163600e9390910192830152507f742e736f6c3a4d79436f6e7472616374206f72204d79436f6e74726163742e73602e8201527f6f6c206f72206f75742f4d79436f6e74726163742e736f6c2f4d79436f6e7472604e8201526730b1ba173539b7b760c11b606e820152607601919050565b808201808211156102ac576102ac613fbf565b7f53504458206c6963656e7365206964656e7469666965722000000000000000008152600083516145a7816018850160208801613904565b6301034b7160e51b60189184019182015283516145cb81601c840160208801613904565b7f20646f6573206e6f74206c6f6f6b206c696b65206120737570706f7274656420601c92909101918201527f6c6963656e736520666f7220626c6f636b206578706c6f726572207665726966603c8201527f69636174696f6e2e205573652074686520606c6963656e73655479706560206f605c8201527f7074696f6e20746f20737065636966792061206c6963656e736520747970652c607c8201527f206f7220736574207468652060736b69704c6963656e73655479706560206f70609c8201527f74696f6e20746f2060747275656020746f20736b69702e00000000000000000060bc82015260d301949350505050565b600082516146d1818460208701613904565b600160fd1b920191825250600101919050565b7f406f70656e7a657070656c696e2f75706772616465732d636f7265400000000081526000825161471c81601c850160208701613904565b91909101601c0192915050565b60006001820161473b5761473b613fbf565b5060010190565b80820281158282048414176102ac576102ac613fbf565b6001815b60018411156147945780850481111561477857614778613fbf565b600184161561478657908102905b60019390931c92800261475d565b935093915050565b6000826147ab575060016102ac565b816147b8575060006102ac565b81600181146147ce57600281146147d8576147f4565b60019150506102ac565b60ff8411156147e9576147e9613fbf565b50506001821b6102ac565b5060208310610133831016604e8410600b8410161715614817575081810a6102ac565b6148246000198484614759565b806000190482111561483857614838613fbf565b029392505050565b60006103ba838361479c565b60008161485b5761485b613fbf565b506000190190565b60008351614875818460208801613904565b601d60f91b9083019081528351614893816001840160208801613904565b01600101949350505050565b8181036000831280158383131683831282161715612b9a57612b9a613fbf565b6080516118bc6148fd600039600081816101bf01528181610574015281816105d60152818161093501528181610c3d0152610c9f01526118bc6000f3fe608060405234801561001057600080fd5b506004361061018d5760003560e01c806381100bf0116100e3578063a217fddf1161008c578063d936547e11610066578063d936547e146103c9578063d9caed12146103ec578063e63ab1e9146103ff57600080fd5b8063a217fddf1461039b578063c8a02362146103a3578063d547741f146103b657600080fd5b806391d14854116100bd57806391d148541461032f5780639a590427146103755780639b19251a1461038857600080fd5b806381100bf0146102e05780638456cb591461030057806385f438c11461030857600080fd5b806336568abe11610145578063570618e11161011f578063570618e11461029b5780635c975abb146102c25780636133b4bb146102cd57600080fd5b806336568abe146102605780633c2f05a8146102735780633f4ba83a1461029357600080fd5b806321fc65f21161017657806321fc65f214610206578063248a9ca31461021b5780632f2ff15d1461024d57600080fd5b806301ffc9a714610192578063116191b6146101ba575b600080fd5b6101a56101a03660046114d0565b610426565b60405190151581526020015b60405180910390f35b6101e17f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101b1565b610219610214366004611584565b6104bf565b005b61023f6102293660046115f3565b6000908152600160208190526040909120015490565b6040519081526020016101b1565b61021961025b36600461160c565b6106c0565b61021961026e36600461160c565b6106ec565b6004546101e19073ffffffffffffffffffffffffffffffffffffffff1681565b61021961074a565b61023f7f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a81565b60025460ff166101a5565b6102196102db366004611638565b61077f565b6005546101e19073ffffffffffffffffffffffffffffffffffffffff1681565b6102196109b7565b61023f7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b6101a561033d36600461160c565b600091825260016020908152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b610219610383366004611692565b6109e9565b610219610396366004611692565b610ab7565b61023f600081565b6102196103b1366004611584565b610b88565b6102196103c436600461160c565b610d6f565b6101a56103d7366004611692565b60036020526000908152604090205460ff1681565b6102196103fa3660046116ad565b610d95565b61023f7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b0000000000000000000000000000000000000000000000000000000014806104b957507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b6104c7610ec1565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e46104f181610f04565b6104f9610f0e565b73ffffffffffffffffffffffffffffffffffffffff861660009081526003602052604090205460ff16610558576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61059973ffffffffffffffffffffffffffffffffffffffff87167f000000000000000000000000000000000000000000000000000000000000000086610f4d565b6040517f5131ab5900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690635131ab59906106139089908990899089908990600401611733565b600060405180830381600087803b15801561062d57600080fd5b505af1158015610641573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167f85b5be9cf454e05e0bddf49315178102227c312078eefa3c00294fb4d912ae4e8686866040516106a693929190611790565b60405180910390a3506106b96001600055565b5050505050565b600082815260016020819052604090912001546106dc81610f04565b6106e68383610fda565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8116331461073b576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6107458282611087565b505050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61077481610f04565b61077c611128565b50565b60045473ffffffffffffffffffffffffffffffffffffffff166340c10f19306107a98660056117b3565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815273ffffffffffffffffffffffffffffffffffffffff90921660048301526024820152604401600060405180830381600087803b15801561081457600080fd5b505af1158015610828573d6000803e3d6000fd5b5050600480546007546040517fa9059cbb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff918216938101939093526005602484015216925063a9059cbb91506044016020604051808303816000875af11580156108a9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108cd91906117ed565b506004546108f49073ffffffffffffffffffffffffffffffffffffffff16858585856104bf565b600480546040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116938201939093529116906370a0823190602401602060405180830381865afa158015610986573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109aa919061180f565b156106e6576106e6611828565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a6109e181610f04565b61077c611187565b7f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a610a1381610f04565b73ffffffffffffffffffffffffffffffffffffffff8216610a60576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216600081815260036020526040808220805460ff19169055517f51085ddf9ebdded84b76e829eb58c4078e4b5bdf97d9a94723f336039da467919190a25050565b7f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a610ae181610f04565b73ffffffffffffffffffffffffffffffffffffffff8216610b2e576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216600081815260036020526040808220805460ff19166001179055517faab7954e9d246b167ef88aeddad35209ca2489d95a8aeb59e288d9b19fae5a549190a25050565b610b90610ec1565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e4610bba81610f04565b610bc2610f0e565b73ffffffffffffffffffffffffffffffffffffffff861660009081526003602052604090205460ff16610c21576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610c6273ffffffffffffffffffffffffffffffffffffffff87167f000000000000000000000000000000000000000000000000000000000000000086610f4d565b6040517fb8969bd400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063b8969bd490610cdc9089908990899089908990600401611733565b600060405180830381600087803b158015610cf657600080fd5b505af1158015610d0a573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fb9d4efa96044e5f5e03e696fa9ae2ff66911cc27e8a637c3627c75bc5b2241c88686866040516106a693929190611790565b60008281526001602081905260409091200154610d8b81610f04565b6106e68383611087565b610d9d610ec1565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e4610dc781610f04565b610dcf610f0e565b73ffffffffffffffffffffffffffffffffffffffff841660009081526003602052604090205460ff16610e2e576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610e4f73ffffffffffffffffffffffffffffffffffffffff85168484610f4d565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f9b1bfa7fa9ee420a16e124f794c35ac9f90472acc99140eb2f6447c714cad8eb84604051610eae91815260200190565b60405180910390a3506107456001600055565b600260005403610efd576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b61077c81336111c4565b60025460ff1615610f4b576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6040805173ffffffffffffffffffffffffffffffffffffffff8416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb00000000000000000000000000000000000000000000000000000000179052610745908490611255565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff1661107f57600083815260016020818152604080842073ffffffffffffffffffffffffffffffffffffffff87168086529252808420805460ff19169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45060016104b9565b5060006104b9565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff161561107f57600083815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff86168085529252808320805460ff1916905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45060016104b9565b6111306112eb565b6002805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b61118f610f0e565b6002805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25861115d3390565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16611251576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82166004820152602481018390526044015b60405180910390fd5b5050565b600061127773ffffffffffffffffffffffffffffffffffffffff841683611327565b9050805160001415801561129c57508080602001905181019061129a91906117ed565b155b15610745576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84166004820152602401611248565b60025460ff16610f4b576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60606113358383600061133c565b9392505050565b60608147101561137a576040517fcd786059000000000000000000000000000000000000000000000000000000008152306004820152602401611248565b6000808573ffffffffffffffffffffffffffffffffffffffff1684866040516113a39190611857565b60006040518083038185875af1925050503d80600081146113e0576040519150601f19603f3d011682016040523d82523d6000602084013e6113e5565b606091505b50915091506113f58683836113ff565b9695505050505050565b6060826114145761140f8261148e565b611335565b8151158015611438575073ffffffffffffffffffffffffffffffffffffffff84163b155b15611487576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85166004820152602401611248565b5080611335565b80511561149e5780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000602082840312156114e257600080fd5b81357fffffffff000000000000000000000000000000000000000000000000000000008116811461133557600080fd5b803573ffffffffffffffffffffffffffffffffffffffff8116811461153657600080fd5b919050565b60008083601f84011261154d57600080fd5b50813567ffffffffffffffff81111561156557600080fd5b60208301915083602082850101111561157d57600080fd5b9250929050565b60008060008060006080868803121561159c57600080fd5b6115a586611512565b94506115b360208701611512565b935060408601359250606086013567ffffffffffffffff8111156115d657600080fd5b6115e28882890161153b565b969995985093965092949392505050565b60006020828403121561160557600080fd5b5035919050565b6000806040838503121561161f57600080fd5b8235915061162f60208401611512565b90509250929050565b6000806000806060858703121561164e57600080fd5b61165785611512565b935060208501359250604085013567ffffffffffffffff81111561167a57600080fd5b6116868782880161153b565b95989497509550505050565b6000602082840312156116a457600080fd5b61133582611512565b6000806000606084860312156116c257600080fd5b6116cb84611512565b92506116d960208501611512565b929592945050506040919091013590565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff8616815273ffffffffffffffffffffffffffffffffffffffff851660208201528360408201526080606082015260006117856080830184866116ea565b979650505050505050565b8381526040602082015260006117aa6040830184866116ea565b95945050505050565b808201808211156104b9577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000602082840312156117ff57600080fd5b8151801515811461133557600080fd5b60006020828403121561182157600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b6000825160005b81811015611878576020818601810151858301520161185e565b50600092019182525091905056fea26469706673582212209842ee4b781cbb372c35d109149a76c8386d31c91ade0524aa412d9e5c4bedb064736f6c634300081a0033608060405234801561001057600080fd5b50604051610c9f380380610c9f83398101604081905261002f9161010d565b8181600361003d83826101ff565b50600461004a82826101ff565b50505050506102bd565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261007b57600080fd5b81516001600160401b0381111561009457610094610054565b604051601f8201601f19908116603f011681016001600160401b03811182821017156100c2576100c2610054565b6040528181528382016020018510156100da57600080fd5b60005b828110156100f9576020818601810151838301820152016100dd565b506000918101602001919091529392505050565b6000806040838503121561012057600080fd5b82516001600160401b0381111561013657600080fd5b6101428582860161006a565b602085015190935090506001600160401b0381111561016057600080fd5b61016c8582860161006a565b9150509250929050565b600181811c9082168061018a57607f821691505b6020821081036101aa57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156101fa57806000526020600020601f840160051c810160208510156101d75750805b601f840160051c820191505b818110156101f757600081556001016101e3565b50505b505050565b81516001600160401b0381111561021857610218610054565b61022c816102268454610176565b846101b0565b6020601f82116001811461026057600083156102485750848201515b600019600385901b1c1916600184901b1784556101f7565b600084815260208120601f198516915b828110156102905787850151825560209485019460019092019101610270565b50848210156102ae5786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b6109d3806102cc6000396000f3fe608060405234801561001057600080fd5b50600436106100be5760003560e01c806340c10f191161007657806395d89b411161005b57806395d89b4114610183578063a9059cbb1461018b578063dd62ed3e1461019e57600080fd5b806340c10f191461013857806370a082311461014d57600080fd5b806318160ddd116100a757806318160ddd1461010457806323b872dd14610116578063313ce5671461012957600080fd5b806306fdde03146100c3578063095ea7b3146100e1575b600080fd5b6100cb6101e4565b6040516100d891906107bf565b60405180910390f35b6100f46100ef366004610854565b610276565b60405190151581526020016100d8565b6002545b6040519081526020016100d8565b6100f461012436600461087e565b610290565b604051601281526020016100d8565b61014b610146366004610854565b6102b4565b005b61010861015b3660046108bb565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6100cb6102c2565b6100f4610199366004610854565b6102d1565b6101086101ac3660046108dd565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6060600380546101f390610910565b80601f016020809104026020016040519081016040528092919081815260200182805461021f90610910565b801561026c5780601f106102415761010080835404028352916020019161026c565b820191906000526020600020905b81548152906001019060200180831161024f57829003601f168201915b5050505050905090565b6000336102848185856102df565b60019150505b92915050565b60003361029e8582856102f1565b6102a98585856103c5565b506001949350505050565b6102be8282610470565b5050565b6060600480546101f390610910565b6000336102848185856103c5565b6102ec83838360016104cc565b505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146103bf57818110156103b0576040517ffb8f41b200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416600482015260248101829052604481018390526064015b60405180910390fd5b6103bf848484840360006104cc565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8316610415576040517f96c6fd1e000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff8216610465576040517fec442f05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b6102ec838383610614565b73ffffffffffffffffffffffffffffffffffffffff82166104c0576040517fec442f05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b6102be60008383610614565b73ffffffffffffffffffffffffffffffffffffffff841661051c576040517fe602df05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff831661056c576040517f94280d62000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260016020908152604080832093871683529290522082905580156103bf578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161060691815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff831661064c5780600260008282546106419190610963565b909155506106fe9050565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260208190526040902054818110156106d2576040517fe450d38c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8516600482015260248101829052604481018390526064016103a7565b73ffffffffffffffffffffffffffffffffffffffff841660009081526020819052604090209082900390555b73ffffffffffffffffffffffffffffffffffffffff821661072757600280548290039055610753565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090208054820190555b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516107b291815260200190565b60405180910390a3505050565b602081526000825180602084015260005b818110156107ed57602081860181015160408684010152016107d0565b5060006040828501015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011684010191505092915050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461084f57600080fd5b919050565b6000806040838503121561086757600080fd5b6108708361082b565b946020939093013593505050565b60008060006060848603121561089357600080fd5b61089c8461082b565b92506108aa6020850161082b565b929592945050506040919091013590565b6000602082840312156108cd57600080fd5b6108d68261082b565b9392505050565b600080604083850312156108f057600080fd5b6108f98361082b565b91506109076020840161082b565b90509250929050565b600181811c9082168061092457607f821691505b60208210810361095d577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b8082018082111561028a577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea26469706673582212207e804ca539d49155d2b6bc19268ce22f9f857027c75247d69fb0d56a089c93d464736f6c634300081a00330000000000000000000000007109709ecfa91a80626ff3989d68f67f5b1dd12d8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f7420"; + "0x600580546001600160a01b03191633908117909155600e60a09081526d11d85d195dd85e5155934b9cdbdb60921b60c0526101049190915261012361012481905261014452606460e090815261016460405261010080516001600160e01b0390811663c0c53b8b60e01b1790915261007992919061029316565b600680546001600160a01b03929092166001600160a01b03199283168117909155600780549092161790553480156100b057600080fd5b5060075460055460016000556002805460ff191690556001600160a01b039182169116808215806100e857506001600160a01b038216155b806100fa57506001600160a01b038116155b156101185760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b0383166080526101306000826102b2565b5061015b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a826102b2565b506101867f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e4836102b2565b5061019f600080516020616e78833981519152826102b2565b506101b8600080516020616e78833981519152836102b2565b505050506040516101c89061383e565b60408082526004908201819052631d195cdd60e21b606083015260806020830181905282015263151154d560e21b60a082015260c001604051809103906000f08015801561021a573d6000803e3d6000fd5b50600480546001600160a01b0319166001600160a01b0392831617815560075460405163ae7a3a6f60e01b815230928101929092529091169063ae7a3a6f90602401600060405180830381600087803b15801561027657600080fd5b505af115801561028a573d6000803e3d6000fd5b505050506148bf565b600061029d61384b565b6102a8848483610345565b9150505b92915050565b60008281526001602090815260408083206001600160a01b038516845290915281205460ff1661033d5760008381526001602081815260408084206001600160a01b0387168086529252808420805460ff19169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45060016102ac565b5060006102ac565b60008061035285846103c1565b90506103b66040518060400160405280601d81526020017f4552433139363750726f78792e736f6c3a4552433139363750726f787900000081525082866040516020016103a0929190613954565b60408051601f19818403018152919052856103cd565b9150505b9392505050565b60006103ba8383610401565b60c081015151600090156103f7576103f084848460c0015161042260201b60201c565b90506103ba565b6103f0848461059b565b600061040d8383610668565b6103ba838360200151846103cd60201b60201c565b60008061042d610678565b9050600061043b8683610712565b905060006104588260600151836020015185610b3560201b60201c565b9050600061046883838989610cea565b9050600061047582611966565b602081015181519192509060030b156104ce5789826040015160405160200161049f929190613978565b60408051601f198184030181529082905262461bcd60e51b82526104c5916004016139de565b60405180910390fd5b60006105176040518060400160405280601581526020017f4465706c6f79656420746f20616464726573733a200000000000000000000000815250836001611afd60201b60201c565b60405163c6ce059d60e01b8152909150600080516020616e588339815191529063c6ce059d9061054b9084906004016139de565b602060405180830381865afa158015610568573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061058c91906139f1565b9b9a5050505050505050505050565b604051638d1cc92560e01b81526000908190600080516020616e5883398151915290638d1cc925906105d19087906004016139de565b600060405180830381865afa1580156105ee573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526106169190810190613ae6565b905060006106458285604051602001610630929190613b1a565b60408051601f19818403018152919052611c9d565b90506001600160a01b0381166102a857848460405160200161049f929190613b49565b61067482826000611cb0565b5050565b60408051808201825260038152621bdd5d60ea1b602082015290516334515cdb60e21b8152606091600080516020616e5883398151915291829063d145736c906106c6908490600401613bd8565b600060405180830381865afa1580156106e3573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261070b9190810190613c0d565b9250505090565b6107446040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b6000600080516020616e5883398151915290506107896040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b61079285611d8a565b602082015260006107a286611fdf565b90506000836001600160a01b031663d930a0e66040518163ffffffff1660e01b8152600401600060405180830381865afa1580156107e4573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261080c9190810190613c0d565b868385602001516040516020016108269493929190613c55565b60408051601f19818403018152908290526360f9bb1160e01b825291506000906001600160a01b038616906360f9bb11906108659085906004016139de565b600060405180830381865afa158015610882573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526108aa9190810190613c0d565b604051636da11afb60e11b81529091506001600160a01b0386169063db4235f6906108d9908490600401613ced565b602060405180830381865afa1580156108f6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061091a9190613d26565b61092f578160405160200161049f9190613d48565b6040516309389f5960e31b81526001600160a01b038616906349c4fac89061095b908490600401613dbf565b600060405180830381865afa158015610978573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526109a09190810190613c0d565b8452604051636da11afb60e11b81526001600160a01b0386169063db4235f6906109ce908490600401613e05565b602060405180830381865afa1580156109eb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a0f9190613d26565b15610a8b576040516309389f5960e31b81526001600160a01b038616906349c4fac890610a40908490600401613e05565b600060405180830381865afa158015610a5d573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610a859190810190613c0d565b60408501525b846001600160a01b03166349c4fac8828660000151604051602001610ab09190613e46565b6040516020818303038152906040526040518363ffffffff1660e01b8152600401610adc929190613ea1565b600060405180830381865afa158015610af9573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610b219190810190613c0d565b606085015250608083015250949350505050565b60408051600480825260a0820190925260609160009190816020015b6060815260200190600190039081610b51579050509050604051806040016040528060048152602001630677265760e41b81525081600081518110610b9857610b98613ec6565b6020026020010181905250604051806040016040528060038152602001620b5c9b60ea1b81525081600181518110610bd257610bd2613ec6565b602002602001018190525084604051602001610bee9190613edc565b60405160208183030381529060405281600281518110610c1057610c10613ec6565b602002602001018190525082604051602001610c2c9190613f11565b60405160208183030381529060405281600381518110610c4e57610c4e613ec6565b60209081029190910101526000610c6482611966565b9050600081602001519050610ccb610c9e60405180604001604052806005815260200164173539b7b760d91b81525061216260201b60201c565b6040805180820182526000808252602091820152815180830190925284518252808501908201529061218f565b610ce0578560405160200161049f9190613f40565b9695505050505050565b60a0810151604080518082018252600080825260209182015281518083019092528251808352928101910152606090600080516020616e588339815191529015610d34565b511590565b610e5057826020015115610dc45760405162461bcd60e51b81526020600482015260586024820152600080516020616e9883398151915260448201527f62652075736564207768656e207468652060736b6970566572696679536f757260648201527f6365436f646560206f7074696f6e206973206074727565600000000000000000608482015260a4016104c5565b8260c0015115610e505760405162461bcd60e51b81526020600482015260536024820152600080516020616e9883398151915260448201527f62652075736564207768656e207468652060736b69704c6963656e736554797060648201527f6560206f7074696f6e2069732060747275656000000000000000000000000000608482015260a4016104c5565b6040805160ff8082526120008201909252600091816020015b6060815260200190600190039081610e695790505090506000604051806040016040528060038152602001620dce0f60eb1b815250828280610eaa90613fd5565b935060ff1681518110610ebf57610ebf613ec6565b60200260200101819052506040518060400160405280600d81526020016c302e302e312d616c7068612e3760981b815250604051602001610f009190613ff4565b604051602081830303815290604052828280610f1b90613fd5565b935060ff1681518110610f3057610f30613ec6565b6020026020010181905250604051806040016040528060068152602001656465706c6f7960d01b815250828280610f6690613fd5565b935060ff1681518110610f7b57610f7b613ec6565b60200260200101819052506040518060400160405280600e81526020016d2d2d636f6e74726163744e616d6560901b815250828280610fb990613fd5565b935060ff1681518110610fce57610fce613ec6565b60200260200101819052508760200151828280610fea90613fd5565b935060ff1681518110610fff57610fff613ec6565b60200260200101819052506040518060400160405280600e81526020016d05a5ac6dedce8e4c2c6e8a0c2e8d60931b81525082828061103d90613fd5565b935060ff168151811061105257611052613ec6565b60209081029190910101528751828261106a81613fd5565b935060ff168151811061107f5761107f613ec6565b6020026020010181905250604051806040016040528060098152602001680b4b58da185a5b925960ba1b8152508282806110b890613fd5565b935060ff16815181106110cd576110cd613ec6565b60209081029190910101526110e1466121f0565b82826110ec81613fd5565b935060ff168151811061110157611101613ec6565b60200260200101819052506040518060400160405280600f81526020016e2d2d6275696c64496e666f46696c6560881b81525082828061114090613fd5565b935060ff168151811061115557611155613ec6565b60200260200101819052508682828061116d90613fd5565b935060ff168151811061118257611182613ec6565b60209081029190910101528551156112905760408051808201909152601581527f2d2d636f6e7374727563746f7242797465636f64650000000000000000000000602082015282826111d381613fd5565b935060ff16815181106111e8576111e8613ec6565b60209081029190910101526040516371aad10d60e01b81526001600160a01b038416906371aad10d9061121f9089906004016139de565b600060405180830381865afa15801561123c573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526112649190810190613c0d565b828261126f81613fd5565b935060ff168151811061128457611284613ec6565b60200260200101819052505b84602001511561133d576040805180820190915260128152712d2d766572696679536f75726365436f646560701b602082015282826112ce81613fd5565b935060ff16815181106112e3576112e3613ec6565b60200260200101819052506040518060400160405280600581526020016466616c736560d81b81525082828061131890613fd5565b935060ff168151811061132d5761132d613ec6565b60200260200101819052506114a4565b611353610d2f8660a0015161216260201b60201c565b6113d65760408051808201909152600d81526c2d2d6c6963656e73655479706560981b6020820152828261138681613fd5565b935060ff168151811061139b5761139b613ec6565b60200260200101819052508460a001516040516020016113bb9190613edc565b60405160208183030381529060405282828061131890613fd5565b8460c001511580156113fb57506113f9610d2f896040015161216260201b60201c565b155b156114a45760408051808201909152600d81526c2d2d6c6963656e73655479706560981b6020820152828261142f81613fd5565b935060ff168151811061144457611444613ec6565b602090810291909101015261145888612282565b6040516020016114689190613edc565b60405160208183030381529060405282828061148390613fd5565b935060ff168151811061149857611498613ec6565b60200260200101819052505b6114ba610d2f866040015161216260201b60201c565b61153d5760408051808201909152600b81526a0b4b5c995b185e595c925960aa1b602082015282826114eb81613fd5565b935060ff168151811061150057611500613ec6565b6020026020010181905250846040015182828061151c90613fd5565b935060ff168151811061153157611531613ec6565b60200260200101819052505b60608501511561162e576040805180820190915260068152650b4b5cd85b1d60d21b6020820152828261156f81613fd5565b935060ff168151811061158457611584613ec6565b60209081029190910101526060850151604051631623433d60e31b815260048101919091526001600160a01b0384169063b11a19e890602401600060405180830381865afa1580156115da573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526116029190810190613c0d565b828261160d81613fd5565b935060ff168151811061162257611622613ec6565b60200260200101819052505b60e085015151156116c05760408051808201909152600a8152690b4b59d85cd31a5b5a5d60b21b6020820152828261166581613fd5565b935060ff168151811061167a5761167a613ec6565b602090810291909101015260e085015151611694906121f0565b828261169f81613fd5565b935060ff16815181106116b4576116b4613ec6565b60200260200101819052505b60e0850151602001511561175d5760408051808201909152600a8152692d2d676173507269636560b01b602082015282826116fa81613fd5565b935060ff168151811061170f5761170f613ec6565b60200260200101819052506117318560e00151602001516121f060201b60201c565b828261173c81613fd5565b935060ff168151811061175157611751613ec6565b60200260200101819052505b60e085015160400151156117fe5760408051808201909152600e81526d2d2d6d617846656550657247617360901b6020820152828261179b81613fd5565b935060ff16815181106117b0576117b0613ec6565b60200260200101819052506117d28560e00151604001516121f060201b60201c565b82826117dd81613fd5565b935060ff16815181106117f2576117f2613ec6565b60200260200101819052505b60e085015160600151156118ae5760408051808201909152601681527f2d2d6d61785072696f72697479466565506572476173000000000000000000006020820152828261184b81613fd5565b935060ff168151811061186057611860613ec6565b60200260200101819052506118828560e00151606001516121f060201b60201c565b828261188d81613fd5565b935060ff16815181106118a2576118a2613ec6565b60200260200101819052505b60008160ff166001600160401b038111156118cb576118cb613a1a565b6040519080825280602002602001820160405280156118fe57816020015b60608152602001906001900390816118e95790505b50905060005b8260ff168160ff16101561195757838160ff168151811061192757611927613ec6565b6020026020010151828260ff168151811061194457611944613ec6565b6020908102919091010152600101611904565b5093505050505b949350505050565b61198d6040518060600160405280600060030b815260200160608152602001606081525090565b6040805180820182526004808252630c4c2e6d60e31b602083015291516334515cdb60e21b8152600080516020616e5883398151915292600091849163d145736c916119db9186910161404b565b600060405180830381865afa1580156119f8573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611a209190810190613c0d565b90506000611a2e8683612938565b90506000846001600160a01b031663f45c1ce7836040518263ffffffff1660e01b8152600401611a5e9190614092565b6000604051808303816000875af1158015611a7d573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611aa591908101906140f7565b805190915060030b15801590611abe5750602081015151155b8015611acd5750604081015151155b15610ce05781600081518110611ae557611ae5613ec6565b602002602001015160405160200161049f91906141aa565b60606000611b328560408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600080825260209182015281518083019092528651825280870190820152909150611b699082905b90612a72565b15611c66576000611be682611be081611bda611bac8a60408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6040805180820182526000808252602091820152815180830190925282518252918201519181019190915290565b90612a99565b90612af6565b9050611c1a611c13604051806040016040528060018152602001600560f91b81525061216260201b60201c565b8290612a72565b15611c5457611c51611c4a604051806040016040528060018152602001600560f91b81525061216260201b60201c565b8290612b7b565b90505b611c5d81612ba1565b925050506103ba565b8215611c7f57848460405160200161049f92919061437a565b50506040805160208101909152600081526103ba565b509392505050565b6000808251602084016000f09392505050565b8160a0015115611cbf57505050565b6000611ccc848484612c06565b90506000611cd982611966565b602081015181519192509060030b158015611d4c5750611d4c611d20604051806040016040528060078152602001665355434345535360c81b81525061216260201b60201c565b604080518082018252600080825260209182015281518083019092528451825280850190820152611b63565b15611d5957505050505050565b60408201515115611d7957816040015160405160200161049f91906143f5565b8060405160200161049f919061443f565b60606000611dbf8360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b9050611df6611def604051806040016040528060048152602001630b9cdbdb60e21b81525061216260201b60201c565b829061218f565b15611e38576103ba611e33611e2c604051806040016040528060048152602001630b9cdbdb60e21b81525061216260201b60201c565b8390613119565b612ba1565b611e6a611e63604051806040016040528060018152602001601d60f91b81525061216260201b60201c565b82906131a3565b600103611ed257611e9c611c4a604051806040016040528060018152602001601d60f91b81525061216260201b60201c565b506103ba611e33611ecb604051806040016040528060018152602001601d60f91b81525061216260201b60201c565b8390612b7b565b611f01611def60405180604001604052806005815260200164173539b7b760d91b81525061216260201b60201c565b15611fce576000611f3982611f34604051806040016040528060018152602001602f60f81b81525061216260201b60201c565b613238565b905060008160018351611f4c919061448f565b81518110611f5c57611f5c613ec6565b60200260200101519050611fc5611e33611f9860405180604001604052806005815260200164173539b7b760d91b81525061216260201b60201c565b60408051808201825260008082526020918201528151808301909252855182528086019082015290613119565b95945050505050565b8260405160200161049f91906144a2565b606060006120148360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b9050612044611def604051806040016040528060048152602001630b9cdbdb60e21b81525061216260201b60201c565b15612052576103ba81612ba1565b61207d611e63604051806040016040528060018152602001601d60f91b81525061216260201b60201c565b6001036120b2576103ba611e33611ecb604051806040016040528060018152602001601d60f91b81525061216260201b60201c565b6120e1611def60405180604001604052806005815260200164173539b7b760d91b81525061216260201b60201c565b15611fce57600061211482611f34604051806040016040528060018152602001602f60f81b81525061216260201b60201c565b905060018151111561215057806002825161212f919061448f565b8151811061213f5761213f613ec6565b602002602001015192505050919050565b508260405160200161049f91906144a2565b60408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b8051825160009111156121a4575060006102ac565b815183516020850151600092916121ba9161455c565b6121c4919061448f565b9050826020015181036121db5760019150506102ac565b82516020840151819020912014905092915050565b606060006121fd836132dc565b60010190506000816001600160401b0381111561221c5761221c613a1a565b6040519080825280601f01601f191660200182016040528015612246576020820181803683370190505b5090508181016020015b600019016f181899199a1a9b1b9c1cb0b131b232b360811b600a86061a8153600a850494508461225057509392505050565b60606000612299836040015161216260201b60201c565b90506122d66122cf6040518060400160405280600a8152602001691553931250d15394d15160b21b81525061216260201b60201c565b82906133be565b156122fd5750506040805180820190915260048152634e6f6e6560e01b6020820152919050565b6123306122cf60405180604001604052806009815260200168556e6c6963656e736560b81b81525061216260201b60201c565b1561235c575050604080518082019091526009815268556e6c6963656e736560b81b6020820152919050565b6123896122cf6040518060400160405280600381526020016213525560ea1b81525061216260201b60201c565b156123af57505060408051808201909152600381526213525560ea1b6020820152919050565b6123e56122cf6040518060400160405280600c81526020016b47504c2d322e302d6f6e6c7960a01b81525061216260201b60201c565b8061242557506124256122cf6040518060400160405280601081526020016f23a8261699171816b7b916b630ba32b960811b81525061216260201b60201c565b1561245157505060408051808201909152600981526823a72a9023a8263b1960b91b6020820152919050565b6124876122cf6040518060400160405280600c81526020016b47504c2d332e302d6f6e6c7960a01b81525061216260201b60201c565b806124c757506124c76122cf6040518060400160405280601081526020016f23a8261699971816b7b916b630ba32b960811b81525061216260201b60201c565b156124f3575050604080518082019091526009815268474e552047504c763360b81b6020820152919050565b61252a6122cf6040518060400160405280600d81526020016c4c47504c2d322e312d6f6e6c7960981b81525061216260201b60201c565b8061256b575061256b6122cf604051806040016040528060118152602001702623a8261699171896b7b916b630ba32b960791b81525061216260201b60201c565b1561259a57505060408051808201909152600c81526b474e55204c47504c76322e3160a01b6020820152919050565b6125d16122cf6040518060400160405280600d81526020016c4c47504c2d332e302d6f6e6c7960981b81525061216260201b60201c565b8061261257506126126122cf604051806040016040528060118152602001702623a8261699971816b7b916b630ba32b960791b81525061216260201b60201c565b1561263f57505060408051808201909152600a815269474e55204c47504c763360b01b6020820152919050565b6126756122cf6040518060400160405280600c81526020016b4253442d322d436c6175736560a01b81525061216260201b60201c565b156126a457505060408051808201909152600c81526b4253442d322d436c6175736560a01b6020820152919050565b6126da6122cf6040518060400160405280600c81526020016b4253442d332d436c6175736560a01b81525061216260201b60201c565b1561270957505060408051808201909152600c81526b4253442d332d436c6175736560a01b6020820152919050565b61273a6122cf6040518060400160405280600781526020016604d504c2d322e360cc1b81525061216260201b60201c565b1561276457505060408051808201909152600781526604d504c2d322e360cc1b6020820152919050565b6127956122cf6040518060400160405280600781526020016604f534c2d332e360cc1b81525061216260201b60201c565b156127bf57505060408051808201909152600781526604f534c2d332e360cc1b6020820152919050565b6127f36122cf6040518060400160405280600a81526020016904170616368652d322e360b41b81525061216260201b60201c565b1561282057505060408051808201909152600a81526904170616368652d322e360b41b6020820152919050565b6128576122cf6040518060400160405280600d81526020016c4147504c2d332e302d6f6e6c7960981b81525061216260201b60201c565b8061289857506128986122cf6040518060400160405280601181526020017020a3a8261699971816b7b916b630ba32b960791b81525061216260201b60201c565b156128c557505060408051808201909152600a815269474e55204147504c763360b01b6020820152919050565b6128f76122cf604051806040016040528060088152602001674255534c2d312e3160c01b81525061216260201b60201c565b1561292157505060408051808201909152600781526642534c20312e3160c81b6020820152919050565b6040808401518451915161049f929060200161456f565b60608060005b84518110156129c3578185828151811061295a5761295a613ec6565b6020026020010151604051602001612973929190613b1a565b604051602081830303815290604052915060018551612992919061448f565b81146129bb57816040516020016129a991906146bf565b60405160208183030381529060405291505b60010161293e565b5060408051600380825260808201909252600091816020015b60608152602001906001900390816129dc5790505090508381600081518110612a0757612a07613ec6565b6020026020010181905250604051806040016040528060028152602001612d6360f01b81525081600181518110612a4057612a40613ec6565b60200260200101819052508181600281518110612a5f57612a5f613ec6565b6020908102919091010152949350505050565b6020808301518351835192840151600093612a9092918491906133d2565b14159392505050565b6040805180820190915260008082526020808301829052845185820151855192860151612ac693906134e3565b9050836020015181612ad8919061448f565b84518590612ae790839061448f565b90525060208401525090919050565b6040805180820190915260008082526020820152815183511015612b1b5750816102ac565b6020808301519084015160019114612b425750815160208481015190840151829020919020145b8015612b7357825184518590612b5990839061448f565b9052508251602085018051612b6f90839061455c565b9052505b509192915050565b6040805180820190915260008082526020820152612b9a838383613603565b5092915050565b6060600082600001516001600160401b03811115612bc157612bc1613a1a565b6040519080825280601f01601f191660200182016040528015612beb576020820181803683370190505b50602084810151855192935090830191612b9a9183916136a9565b60606000612c12610678565b6040805160ff808252612000820190925291925060009190816020015b6060815260200190600190039081612c2f5790505090506000604051806040016040528060038152602001620dce0f60eb1b815250828280612c7090613fd5565b935060ff1681518110612c8557612c85613ec6565b6020026020010181905250604051806040016040528060078152602001665e312e33322e3360c81b815250604051602001612cc091906146e4565b604051602081830303815290604052828280612cdb90613fd5565b935060ff1681518110612cf057612cf0613ec6565b60200260200101819052506040518060400160405280600881526020016776616c696461746560c01b815250828280612d2890613fd5565b935060ff1681518110612d3d57612d3d613ec6565b602002602001018190525082604051602001612d599190613f11565b604051602081830303815290604052828280612d7490613fd5565b935060ff1681518110612d8957612d89613ec6565b60200260200101819052506040518060400160405280600a8152602001690b4b58dbdb9d1c9858dd60b21b815250828280612dc390613fd5565b935060ff1681518110612dd857612dd8613ec6565b6020908102919091010152612ded8784613723565b8282612df881613fd5565b935060ff1681518110612e0d57612e0d613ec6565b602090810291909101015285515115612ea55760408051808201909152600b81526a2d2d7265666572656e636560a81b60208201528282612e4d81613fd5565b935060ff1681518110612e6257612e62613ec6565b60209081029190910101528551612e799084613723565b8282612e8481613fd5565b935060ff1681518110612e9957612e99613ec6565b60200260200101819052505b856080015115612f135760408051808201909152601881527f2d2d756e73616665536b697053746f72616765436865636b000000000000000060208201528282612eee81613fd5565b935060ff1681518110612f0357612f03613ec6565b6020026020010181905250612f6e565b8415612f6e576040805180820190915260128152712d2d726571756972655265666572656e636560701b60208201528282612f4d81613fd5565b935060ff1681518110612f6257612f62613ec6565b60200260200101819052505b60408601515115612ffa5760408051808201909152600d81526c2d2d756e73616665416c6c6f7760981b60208201528282612fa881613fd5565b935060ff1681518110612fbd57612fbd613ec6565b60200260200101819052508560400151828280612fd990613fd5565b935060ff1681518110612fee57612fee613ec6565b60200260200101819052505b8560600151156130645760408051808201909152601481527f2d2d756e73616665416c6c6f7752656e616d65730000000000000000000000006020820152828261304381613fd5565b935060ff168151811061305857613058613ec6565b60200260200101819052505b60008160ff166001600160401b0381111561308157613081613a1a565b6040519080825280602002602001820160405280156130b457816020015b606081526020019060019003908161309f5790505b50905060005b8260ff168160ff16101561310d57838160ff16815181106130dd576130dd613ec6565b6020026020010151828260ff16815181106130fa576130fa613ec6565b60209081029190910101526001016130ba565b50979650505050505050565b604080518082019091526000808252602082015281518351101561313e5750816102ac565b815183516020850151600092916131549161455c565b61315e919061448f565b6020840151909150600190821461317f575082516020840151819020908220145b801561319a5783518551869061319690839061448f565b9052505b50929392505050565b8051825160208085015190840151600093849390926131c39284906134e3565b6131cd919061455c565b90505b835160208501516131e1919061455c565b8111612b9a57816131f181614729565b925050826000015161322785602001518361320c919061448f565b8651613218919061448f565b855160208701518591906134e3565b613231919061455c565b90506131d0565b6060600061324684846131a3565b61325190600161455c565b6001600160401b0381111561326857613268613a1a565b60405190808252806020026020018201604052801561329b57816020015b60608152602001906001900390816132865790505b50905060005b8151811015611c95576132b7611e338686612b7b565b8282815181106132c9576132c9613ec6565b60209081029190910101526001016132a1565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310613325577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310613351576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc10000831061336f57662386f26fc10000830492506010015b6305f5e1008310613387576305f5e100830492506008015b612710831061339b57612710830492506004015b606483106133ad576064830492506002015b600a83106102ac5760010192915050565b60006133ca8383613763565b159392505050565b6000808584116134d95760208411613485576000841561341d5760016133f986602061448f565b613404906008614742565b61340f906002614840565b613419919061448f565b1990505b835181168561342c898961455c565b613436919061448f565b805190935082165b81811461347057878411613458578794505050505061195e565b836134628161484c565b94505082845116905061343e565b61347a878561455c565b94505050505061195e565b838320613492858861448f565b61349c908761455c565b91505b8582106134d7578482208082036134c4576134ba868461455c565b935050505061195e565b6134cf60018461448f565b92505061349f565b505b5092949350505050565b600083818685116135ee576020851161359d576000851561352f57600161350b87602061448f565b613516906008614742565b613521906002614840565b61352b919061448f565b1990505b845181166000876135408b8b61455c565b61354a919061448f565b855190915083165b82811461358f578186106135775761356a8b8b61455c565b965050505050505061195e565b8561358181614729565b965050838651169050613552565b85965050505050505061195e565b508383206000905b6135af868961448f565b82116135ec578583208082036135cb578394505050505061195e565b6135d660018561455c565b93505081806135e490614729565b9250506135a5565b505b6135f8878761455c565b979650505050505050565b604080518082019091526000808252602080830182905285518682015186519287015161363093906134e3565b60208087018051918601919091525190915061364c908261448f565b83528451602086015161365f919061455c565b810361366e57600085526136a0565b8351835161367c919061455c565b8551869061368b90839061448f565b905250835161369a908261455c565b60208601525b50909392505050565b602081106136e157815183526136c060208461455c565b92506136cd60208361455c565b91506136da60208261448f565b90506136a9565b60001981156137105760016136f783602061448f565b61370390610100614840565b61370d919061448f565b90505b9151835183169219169190911790915250565b606060006137318484610712565b805160208083015160405193945061374b93909101614863565b60405160208183030381529060405291505092915050565b8151815160009190811115613776575081515b6020808501519084015160005b8381101561382f57825182518082146137ff5760001960208710156137de576001846137b089602061448f565b6137ba919061455c565b6137c5906008614742565b6137d0906002614840565b6137da919061448f565b1990505b81811683821681810391146137fc5797506102ac9650505050505050565b50505b61380a60208661455c565b945061381760208561455c565b93505050602081613828919061455c565b9050613783565b5084518651610ce0919061489f565b610c9f806161b983390190565b6040518060e0016040528060608152602001606081526020016060815260200160001515815260200160001515815260200160001515815260200161388e613893565b905290565b6040518061010001604052806000151581526020016000151581526020016060815260200160008019168152602001606081526020016060815260200160001515815260200161388e6040518060800160405280600081526020016000815260200160008152602001600081525090565b60005b8381101561391f578181015183820152602001613907565b50506000910152565b60008151808452613940816020860160208601613904565b601f01601f19169290920160200192915050565b6001600160a01b038316815260406020820181905260009061195e90830184613928565b7f4661696c656420746f206465706c6f7920636f6e7472616374200000000000008152600083516139b081601a850160208801613904565b6101d160f51b601a9184019182015283516139d281601c840160208801613904565b01601c01949350505050565b6020815260006103ba6020830184613928565b600060208284031215613a0357600080fd5b81516001600160a01b03811681146103ba57600080fd5b634e487b7160e01b600052604160045260246000fd5b604051606081016001600160401b0381118282101715613a5257613a52613a1a565b60405290565b6000806001600160401b03841115613a7257613a72613a1a565b50604051601f19601f85018116603f011681018181106001600160401b0382111715613aa057613aa0613a1a565b604052838152905080828401851015613ab857600080fd5b611c95846020830185613904565b600082601f830112613ad757600080fd5b6103ba83835160208501613a58565b600060208284031215613af857600080fd5b81516001600160401b03811115613b0e57600080fd5b6102a884828501613ac6565b60008351613b2c818460208801613904565b835190830190613b40818360208801613904565b01949350505050565b7f4661696c656420746f206465706c6f7920636f6e747261637420000000000000815260008351613b8181601a850160208801613904565b7f207573696e6720636f6e7374727563746f722064617461202200000000000000601a918401918201528351613bbe816033840160208801613904565b601160f91b60339290910191820152603401949350505050565b60408152600b60408201526a1193d55391149657d3d55560aa1b60608201526080602082015260006103ba6080830184613928565b600060208284031215613c1f57600080fd5b81516001600160401b03811115613c3557600080fd5b8201601f81018413613c4657600080fd5b6102a884825160208401613a58565b60008551613c67818460208a01613904565b602f60f81b9083019081528551613c85816001840160208a01613904565b602f60f81b600192909101918201528451613ca7816002840160208901613904565b600181830101915050602f60f81b60018201528351613ccd816002840160208801613904565b64173539b7b760d91b600292909101918201526007019695505050505050565b604081526000613d006040830184613928565b828103602084015260048152630b985cdd60e21b60208201526040810191505092915050565b600060208284031215613d3857600080fd5b815180151581146103ba57600080fd5b7f436f756c64206e6f742066696e642041535420696e2061727469666163742000815260008251613d8081601f850160208701613904565b7f2e205365742060617374203d20747275656020696e20666f756e6472792e746f601f939091019283015250611b5b60f21b603f820152604101919050565b604081526000613dd26040830184613928565b8281036020840152601181527005cc2e6e85cc2c4e6ded8eae8caa0c2e8d607b1b60208201526040810191505092915050565b604081526000613e186040830184613928565b8281036020840152600c81526b2e6173742e6c6963656e736560a01b60208201526040810191505092915050565b7f2e6d657461646174612e736f75726365732e5b27000000000000000000000000815260008251613e7e816014850160208701613904565b6b13ae9735b2b1b1b0b5991a9b60a11b6014939091019283015250602001919050565b604081526000613eb46040830185613928565b82810360208401526103b68185613928565b634e487b7160e01b600052603260045260246000fd5b601160f91b81528151600090613ef9816001850160208701613904565b601160f91b6001939091019283015250600201919050565b60008251613f23818460208701613904565b6a2f6275696c642d696e666f60a81b920191825250600b01919050565b7f436f756c64206e6f742066696e64206275696c642d696e666f2066696c65207781527f697468206d61746368696e6720736f7572636520636f6465206861736820666f60208201526a0391031b7b73a3930b1ba160ad1b604082015260008251613fb281604b850160208701613904565b91909101604b0192915050565b634e487b7160e01b600052601160045260246000fd5b600060ff821660ff8103613feb57613feb613fbf565b60010192915050565b7f406f70656e7a657070656c696e2f646566656e6465722d6465706c6f792d636c81526801a595b9d0b58db1a560be1b60208201526000825161403e816029850160208701613904565b9190910160290192915050565b60408152601660408201527f4f50454e5a455050454c494e5f424153485f504154480000000000000000000060608201526080602082015260006103ba6080830184613928565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b828110156140eb57603f198786030184526140d6858351613928565b945060209384019391909101906001016140ba565b50929695505050505050565b60006020828403121561410957600080fd5b81516001600160401b0381111561411f57600080fd5b82016060818503121561413157600080fd5b614139613a30565b81518060030b811461414a57600080fd5b815260208201516001600160401b0381111561416557600080fd5b61417186828501613ac6565b60208301525060408201516001600160401b0381111561419057600080fd5b61419c86828501613ac6565b604083015250949350505050565b7f4661696c656420746f2072756e206261736820636f6d6d616e642077697468208152601160f91b6020820152600082516141ec816021850160208701613904565b7f222e20496620796f7520617265207573696e672057696e646f77732c2073657460219390910192830152507f20746865204f50454e5a455050454c494e5f424153485f5041544820656e766960418201527f726f6e6d656e74207661726961626c6520746f207468652066756c6c7920717560618201527f616c69666965642070617468206f66207468652062617368206578656375746160818201527f626c652e20466f72206578616d706c652c20696620796f75206172652075736960a18201527f6e672047697420666f722057696e646f77732c206164642074686520666f6c6c60c18201527f6f77696e67206c696e6520696e20746865202e656e762066696c65206f66207960e18201527f6f75722070726f6a65637420287573696e6720666f727761726420736c6173686101018201527f6573293a0a4f50454e5a455050454c494e5f424153485f504154483d22433a2f6101218201527f50726f6772616d2046696c65732f4769742f62696e2f6261736822000000000061014182015261015c01919050565b7f4661696c656420746f2066696e64206c696e65207769746820707265666978208152602760f81b6020820152600083516143bc816021850160208801613904565b6c0139034b71037baba383aba1d1609d1b60219184019182015283516143e981602e840160208801613904565b01602e01949350505050565b7f4661696c656420746f2072756e2075706772616465207361666574792076616c815268034b230ba34b7b71d160bd1b60208201526000825161403e816029850160208701613904565b7f55706772616465207361666574792076616c69646174696f6e206661696c65648152611d0560f11b602082015260008251614482816022850160208701613904565b9190910160220192915050565b818103818111156102ac576102ac613fbf565b6d021b7b73a3930b1ba103730b6b2960951b8152600082516144cb81600e850160208701613904565b7f206d75737420626520696e2074686520666f726d6174204d79436f6e74726163600e9390910192830152507f742e736f6c3a4d79436f6e7472616374206f72204d79436f6e74726163742e73602e8201527f6f6c206f72206f75742f4d79436f6e74726163742e736f6c2f4d79436f6e7472604e8201526730b1ba173539b7b760c11b606e820152607601919050565b808201808211156102ac576102ac613fbf565b7f53504458206c6963656e7365206964656e7469666965722000000000000000008152600083516145a7816018850160208801613904565b6301034b7160e51b60189184019182015283516145cb81601c840160208801613904565b7f20646f6573206e6f74206c6f6f6b206c696b65206120737570706f7274656420601c92909101918201527f6c6963656e736520666f7220626c6f636b206578706c6f726572207665726966603c8201527f69636174696f6e2e205573652074686520606c6963656e73655479706560206f605c8201527f7074696f6e20746f20737065636966792061206c6963656e736520747970652c607c8201527f206f7220736574207468652060736b69704c6963656e73655479706560206f70609c8201527f74696f6e20746f2060747275656020746f20736b69702e00000000000000000060bc82015260d301949350505050565b600082516146d1818460208701613904565b600160fd1b920191825250600101919050565b7f406f70656e7a657070656c696e2f75706772616465732d636f7265400000000081526000825161471c81601c850160208701613904565b91909101601c0192915050565b60006001820161473b5761473b613fbf565b5060010190565b80820281158282048414176102ac576102ac613fbf565b6001815b60018411156147945780850481111561477857614778613fbf565b600184161561478657908102905b60019390931c92800261475d565b935093915050565b6000826147ab575060016102ac565b816147b8575060006102ac565b81600181146147ce57600281146147d8576147f4565b60019150506102ac565b60ff8411156147e9576147e9613fbf565b50506001821b6102ac565b5060208310610133831016604e8410600b8410161715614817575081810a6102ac565b6148246000198484614759565b806000190482111561483857614838613fbf565b029392505050565b60006103ba838361479c565b60008161485b5761485b613fbf565b506000190190565b60008351614875818460208801613904565b601d60f91b9083019081528351614893816001840160208801613904565b01600101949350505050565b8181036000831280158383131683831282161715612b9a57612b9a613fbf565b6080516118bc6148fd600039600081816101bf01528181610574015281816105d60152818161093501528181610c3d0152610c9f01526118bc6000f3fe608060405234801561001057600080fd5b506004361061018d5760003560e01c806381100bf0116100e3578063a217fddf1161008c578063d936547e11610066578063d936547e146103c9578063d9caed12146103ec578063e63ab1e9146103ff57600080fd5b8063a217fddf1461039b578063c8a02362146103a3578063d547741f146103b657600080fd5b806391d14854116100bd57806391d148541461032f5780639a590427146103755780639b19251a1461038857600080fd5b806381100bf0146102e05780638456cb591461030057806385f438c11461030857600080fd5b806336568abe11610145578063570618e11161011f578063570618e11461029b5780635c975abb146102c25780636133b4bb146102cd57600080fd5b806336568abe146102605780633c2f05a8146102735780633f4ba83a1461029357600080fd5b806321fc65f21161017657806321fc65f214610206578063248a9ca31461021b5780632f2ff15d1461024d57600080fd5b806301ffc9a714610192578063116191b6146101ba575b600080fd5b6101a56101a03660046114d0565b610426565b60405190151581526020015b60405180910390f35b6101e17f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101b1565b610219610214366004611584565b6104bf565b005b61023f6102293660046115f3565b6000908152600160208190526040909120015490565b6040519081526020016101b1565b61021961025b36600461160c565b6106c0565b61021961026e36600461160c565b6106ec565b6004546101e19073ffffffffffffffffffffffffffffffffffffffff1681565b61021961074a565b61023f7f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a81565b60025460ff166101a5565b6102196102db366004611638565b61077f565b6005546101e19073ffffffffffffffffffffffffffffffffffffffff1681565b6102196109b7565b61023f7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b6101a561033d36600461160c565b600091825260016020908152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b610219610383366004611692565b6109e9565b610219610396366004611692565b610ab7565b61023f600081565b6102196103b1366004611584565b610b88565b6102196103c436600461160c565b610d6f565b6101a56103d7366004611692565b60036020526000908152604090205460ff1681565b6102196103fa3660046116ad565b610d95565b61023f7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b0000000000000000000000000000000000000000000000000000000014806104b957507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b6104c7610ec1565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e46104f181610f04565b6104f9610f0e565b73ffffffffffffffffffffffffffffffffffffffff861660009081526003602052604090205460ff16610558576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61059973ffffffffffffffffffffffffffffffffffffffff87167f000000000000000000000000000000000000000000000000000000000000000086610f4d565b6040517f5131ab5900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690635131ab59906106139089908990899089908990600401611733565b600060405180830381600087803b15801561062d57600080fd5b505af1158015610641573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167f85b5be9cf454e05e0bddf49315178102227c312078eefa3c00294fb4d912ae4e8686866040516106a693929190611790565b60405180910390a3506106b96001600055565b5050505050565b600082815260016020819052604090912001546106dc81610f04565b6106e68383610fda565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8116331461073b576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6107458282611087565b505050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61077481610f04565b61077c611128565b50565b60045473ffffffffffffffffffffffffffffffffffffffff166340c10f19306107a98660056117b3565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815273ffffffffffffffffffffffffffffffffffffffff90921660048301526024820152604401600060405180830381600087803b15801561081457600080fd5b505af1158015610828573d6000803e3d6000fd5b5050600480546007546040517fa9059cbb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff918216938101939093526005602484015216925063a9059cbb91506044016020604051808303816000875af11580156108a9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108cd91906117ed565b506004546108f49073ffffffffffffffffffffffffffffffffffffffff16858585856104bf565b600480546040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116938201939093529116906370a0823190602401602060405180830381865afa158015610986573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109aa919061180f565b156106e6576106e6611828565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a6109e181610f04565b61077c611187565b7f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a610a1381610f04565b73ffffffffffffffffffffffffffffffffffffffff8216610a60576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216600081815260036020526040808220805460ff19169055517f51085ddf9ebdded84b76e829eb58c4078e4b5bdf97d9a94723f336039da467919190a25050565b7f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a610ae181610f04565b73ffffffffffffffffffffffffffffffffffffffff8216610b2e576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216600081815260036020526040808220805460ff19166001179055517faab7954e9d246b167ef88aeddad35209ca2489d95a8aeb59e288d9b19fae5a549190a25050565b610b90610ec1565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e4610bba81610f04565b610bc2610f0e565b73ffffffffffffffffffffffffffffffffffffffff861660009081526003602052604090205460ff16610c21576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610c6273ffffffffffffffffffffffffffffffffffffffff87167f000000000000000000000000000000000000000000000000000000000000000086610f4d565b6040517fb8969bd400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063b8969bd490610cdc9089908990899089908990600401611733565b600060405180830381600087803b158015610cf657600080fd5b505af1158015610d0a573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fb9d4efa96044e5f5e03e696fa9ae2ff66911cc27e8a637c3627c75bc5b2241c88686866040516106a693929190611790565b60008281526001602081905260409091200154610d8b81610f04565b6106e68383611087565b610d9d610ec1565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e4610dc781610f04565b610dcf610f0e565b73ffffffffffffffffffffffffffffffffffffffff841660009081526003602052604090205460ff16610e2e576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610e4f73ffffffffffffffffffffffffffffffffffffffff85168484610f4d565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f9b1bfa7fa9ee420a16e124f794c35ac9f90472acc99140eb2f6447c714cad8eb84604051610eae91815260200190565b60405180910390a3506107456001600055565b600260005403610efd576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b61077c81336111c4565b60025460ff1615610f4b576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6040805173ffffffffffffffffffffffffffffffffffffffff8416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb00000000000000000000000000000000000000000000000000000000179052610745908490611255565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff1661107f57600083815260016020818152604080842073ffffffffffffffffffffffffffffffffffffffff87168086529252808420805460ff19169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45060016104b9565b5060006104b9565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff161561107f57600083815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff86168085529252808320805460ff1916905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45060016104b9565b6111306112eb565b6002805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b61118f610f0e565b6002805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25861115d3390565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16611251576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82166004820152602481018390526044015b60405180910390fd5b5050565b600061127773ffffffffffffffffffffffffffffffffffffffff841683611327565b9050805160001415801561129c57508080602001905181019061129a91906117ed565b155b15610745576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84166004820152602401611248565b60025460ff16610f4b576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60606113358383600061133c565b9392505050565b60608147101561137a576040517fcd786059000000000000000000000000000000000000000000000000000000008152306004820152602401611248565b6000808573ffffffffffffffffffffffffffffffffffffffff1684866040516113a39190611857565b60006040518083038185875af1925050503d80600081146113e0576040519150601f19603f3d011682016040523d82523d6000602084013e6113e5565b606091505b50915091506113f58683836113ff565b9695505050505050565b6060826114145761140f8261148e565b611335565b8151158015611438575073ffffffffffffffffffffffffffffffffffffffff84163b155b15611487576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85166004820152602401611248565b5080611335565b80511561149e5780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000602082840312156114e257600080fd5b81357fffffffff000000000000000000000000000000000000000000000000000000008116811461133557600080fd5b803573ffffffffffffffffffffffffffffffffffffffff8116811461153657600080fd5b919050565b60008083601f84011261154d57600080fd5b50813567ffffffffffffffff81111561156557600080fd5b60208301915083602082850101111561157d57600080fd5b9250929050565b60008060008060006080868803121561159c57600080fd5b6115a586611512565b94506115b360208701611512565b935060408601359250606086013567ffffffffffffffff8111156115d657600080fd5b6115e28882890161153b565b969995985093965092949392505050565b60006020828403121561160557600080fd5b5035919050565b6000806040838503121561161f57600080fd5b8235915061162f60208401611512565b90509250929050565b6000806000806060858703121561164e57600080fd5b61165785611512565b935060208501359250604085013567ffffffffffffffff81111561167a57600080fd5b6116868782880161153b565b95989497509550505050565b6000602082840312156116a457600080fd5b61133582611512565b6000806000606084860312156116c257600080fd5b6116cb84611512565b92506116d960208501611512565b929592945050506040919091013590565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff8616815273ffffffffffffffffffffffffffffffffffffffff851660208201528360408201526080606082015260006117856080830184866116ea565b979650505050505050565b8381526040602082015260006117aa6040830184866116ea565b95945050505050565b808201808211156104b9577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000602082840312156117ff57600080fd5b8151801515811461133557600080fd5b60006020828403121561182157600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b6000825160005b81811015611878576020818601810151858301520161185e565b50600092019182525091905056fea2646970667358221220db3947d25671723c1d8ec4d609e6a44a0961b73d167c53dd39e75c57c61b15cf64736f6c634300081a0033608060405234801561001057600080fd5b50604051610c9f380380610c9f83398101604081905261002f9161010d565b8181600361003d83826101ff565b50600461004a82826101ff565b50505050506102bd565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261007b57600080fd5b81516001600160401b0381111561009457610094610054565b604051601f8201601f19908116603f011681016001600160401b03811182821017156100c2576100c2610054565b6040528181528382016020018510156100da57600080fd5b60005b828110156100f9576020818601810151838301820152016100dd565b506000918101602001919091529392505050565b6000806040838503121561012057600080fd5b82516001600160401b0381111561013657600080fd5b6101428582860161006a565b602085015190935090506001600160401b0381111561016057600080fd5b61016c8582860161006a565b9150509250929050565b600181811c9082168061018a57607f821691505b6020821081036101aa57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156101fa57806000526020600020601f840160051c810160208510156101d75750805b601f840160051c820191505b818110156101f757600081556001016101e3565b50505b505050565b81516001600160401b0381111561021857610218610054565b61022c816102268454610176565b846101b0565b6020601f82116001811461026057600083156102485750848201515b600019600385901b1c1916600184901b1784556101f7565b600084815260208120601f198516915b828110156102905787850151825560209485019460019092019101610270565b50848210156102ae5786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b6109d3806102cc6000396000f3fe608060405234801561001057600080fd5b50600436106100be5760003560e01c806340c10f191161007657806395d89b411161005b57806395d89b4114610183578063a9059cbb1461018b578063dd62ed3e1461019e57600080fd5b806340c10f191461013857806370a082311461014d57600080fd5b806318160ddd116100a757806318160ddd1461010457806323b872dd14610116578063313ce5671461012957600080fd5b806306fdde03146100c3578063095ea7b3146100e1575b600080fd5b6100cb6101e4565b6040516100d891906107bf565b60405180910390f35b6100f46100ef366004610854565b610276565b60405190151581526020016100d8565b6002545b6040519081526020016100d8565b6100f461012436600461087e565b610290565b604051601281526020016100d8565b61014b610146366004610854565b6102b4565b005b61010861015b3660046108bb565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6100cb6102c2565b6100f4610199366004610854565b6102d1565b6101086101ac3660046108dd565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6060600380546101f390610910565b80601f016020809104026020016040519081016040528092919081815260200182805461021f90610910565b801561026c5780601f106102415761010080835404028352916020019161026c565b820191906000526020600020905b81548152906001019060200180831161024f57829003601f168201915b5050505050905090565b6000336102848185856102df565b60019150505b92915050565b60003361029e8582856102f1565b6102a98585856103c5565b506001949350505050565b6102be8282610470565b5050565b6060600480546101f390610910565b6000336102848185856103c5565b6102ec83838360016104cc565b505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146103bf57818110156103b0576040517ffb8f41b200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416600482015260248101829052604481018390526064015b60405180910390fd5b6103bf848484840360006104cc565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8316610415576040517f96c6fd1e000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff8216610465576040517fec442f05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b6102ec838383610614565b73ffffffffffffffffffffffffffffffffffffffff82166104c0576040517fec442f05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b6102be60008383610614565b73ffffffffffffffffffffffffffffffffffffffff841661051c576040517fe602df05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff831661056c576040517f94280d62000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260016020908152604080832093871683529290522082905580156103bf578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161060691815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff831661064c5780600260008282546106419190610963565b909155506106fe9050565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260208190526040902054818110156106d2576040517fe450d38c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8516600482015260248101829052604481018390526064016103a7565b73ffffffffffffffffffffffffffffffffffffffff841660009081526020819052604090209082900390555b73ffffffffffffffffffffffffffffffffffffffff821661072757600280548290039055610753565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090208054820190555b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516107b291815260200190565b60405180910390a3505050565b602081526000825180602084015260005b818110156107ed57602081860181015160408684010152016107d0565b5060006040828501015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011684010191505092915050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461084f57600080fd5b919050565b6000806040838503121561086757600080fd5b6108708361082b565b946020939093013593505050565b60008060006060848603121561089357600080fd5b61089c8461082b565b92506108aa6020850161082b565b929592945050506040919091013590565b6000602082840312156108cd57600080fd5b6108d68261082b565b9392505050565b600080604083850312156108f057600080fd5b6108f98361082b565b91506109076020840161082b565b90509250929050565b600181811c9082168061092457607f821691505b60208210810361095d577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b8082018082111561028a577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea26469706673582212207e804ca539d49155d2b6bc19268ce22f9f857027c75247d69fb0d56a089c93d464736f6c634300081a00330000000000000000000000007109709ecfa91a80626ff3989d68f67f5b1dd12d8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f7420"; type ERC20CustodyEchidnaTestConstructorParams = | [signer?: Signer] diff --git a/v2/typechain-types/factories/GatewayEVMEchidnaTest__factory.ts b/v2/typechain-types/factories/GatewayEVMEchidnaTest__factory.ts index e7712e85..a656aa21 100644 --- a/v2/typechain-types/factories/GatewayEVMEchidnaTest__factory.ts +++ b/v2/typechain-types/factories/GatewayEVMEchidnaTest__factory.ts @@ -1072,7 +1072,7 @@ const _abi = [ ] as const; const _bytecode = - "0x60a060405230608052600580546001600160a01b0319163317905534801561002657600080fd5b5061002f610154565b600554600180546001600160a01b039092166001600160a01b031992831617905560028054610123921691909117905560405161006b90610206565b60408082526004908201819052631d195cdd60e21b606083015260806020830181905282015263151154d560e21b60a082015260c001604051809103906000f0801580156100bd573d6000803e3d6000fd5b50600480546001600160a01b0319166001600160a01b039283161790556001546040513092919091169082906100f290610213565b6001600160a01b03938416815291831660208301529091166040820152606001604051809103906000f08015801561012e573d6000803e3d6000fd5b50600080546001600160a01b0319166001600160a01b0392909216919091179055610220565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156101a45760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146102035780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b610c9f8061372c83390190565b611798806143cb83390190565b6080516134e3610249600039600081816120e20152818161210b015261259701526134e36000f3fe6080604052600436106102345760003560e01c80635c975abb11610138578063ad3cb1cc116100b0578063d547741f1161007f578063e63ab1e911610064578063e63ab1e9146106ff578063f340fa0114610733578063f45346dc1461074657600080fd5b8063d547741f146106bf578063dda79b75146106df57600080fd5b8063ad3cb1cc14610616578063ae7a3a6f1461065f578063b8969bd41461067f578063c0c53b8b1461069f57600080fd5b80638456cb591161010757806391d14854116100ec57806391d1485414610568578063a217fddf146105cd578063a783c789146105e257600080fd5b80638456cb59146105335780638c6f037f1461054857600080fd5b80635c975abb146104885780635d62c860146104bf5780636ab90f9b146104f357806381100bf01461051357600080fd5b806335c018db116101cb5780634f1ef2861161019a57806352d1902d1161017f57806352d1902d1461043357806357bec62f146104485780635b1125911461046857600080fd5b80634f1ef286146104005780635131ab591461041357600080fd5b806335c018db1461039857806336568abe146103ab5780633c2f05a8146103cb5780633f4ba83a146103eb57600080fd5b806321e093b11161020757806321e093b1146102d0578063248a9ca31461030857806329c59b5d146103655780632f2ff15d1461037857600080fd5b806301ffc9a71461023957806310188aef1461026e5780631b8b921d146102905780631cff79cd146102b0575b600080fd5b34801561024557600080fd5b50610259610254366004612ecd565b610766565b60405190151581526020015b60405180910390f35b34801561027a57600080fd5b5061028e610289366004612f2b565b6107ff565b005b34801561029c57600080fd5b5061028e6102ab366004612f8f565b6108f3565b6102c36102be366004612f8f565b61097e565b6040516102659190613050565b3480156102dc57600080fd5b506003546102f0906001600160a01b031681565b6040516001600160a01b039091168152602001610265565b34801561031457600080fd5b50610357610323366004613063565b60009081527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052604090206001015490565b604051908152602001610265565b61028e610373366004612f8f565b610a81565b34801561038457600080fd5b5061028e61039336600461307c565b610c14565b61028e6103a6366004612f8f565b610c5e565b3480156103b757600080fd5b5061028e6103c636600461307c565b610e4d565b3480156103d757600080fd5b506004546102f0906001600160a01b031681565b3480156103f757600080fd5b5061028e610e99565b61028e61040e3660046130d7565b610ece565b34801561041f57600080fd5b5061028e61042e3660046131de565b610eed565b34801561043f57600080fd5b50610357611206565b34801561045457600080fd5b506002546102f0906001600160a01b031681565b34801561047457600080fd5b506001546102f0906001600160a01b031681565b34801561049457600080fd5b507fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff16610259565b3480156104cb57600080fd5b506103577f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b981565b3480156104ff57600080fd5b5061028e61050e36600461324d565b611235565b34801561051f57600080fd5b506005546102f0906001600160a01b031681565b34801561053f57600080fd5b5061028e611360565b34801561055457600080fd5b5061028e6105633660046132a7565b611392565b34801561057457600080fd5b5061025961058336600461307c565b60009182527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408084206001600160a01b0393909316845291905290205460ff1690565b3480156105d957600080fd5b50610357600081565b3480156105ee57600080fd5b506103577f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb81565b34801561062257600080fd5b506102c36040518060400160405280600581526020017f352e302e3000000000000000000000000000000000000000000000000000000081525081565b34801561066b57600080fd5b5061028e61067a366004612f2b565b6114a8565b34801561068b57600080fd5b5061028e61069a3660046131de565b61159c565b3480156106ab57600080fd5b5061028e6106ba3660046132f9565b611755565b3480156106cb57600080fd5b5061028e6106da36600461307c565b611a0a565b3480156106eb57600080fd5b506000546102f0906001600160a01b031681565b34801561070b57600080fd5b506103577f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b61028e610741366004612f2b565b611a4e565b34801561075257600080fd5b5061028e61076136600461333c565b611be3565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b0000000000000000000000000000000000000000000000000000000014806107f957507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b600061080a81611cde565b6001600160a01b03821661084a576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002546001600160a01b03161561088d576040517f0c8dc01600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6108b77f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b983611ce8565b5050600280547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6108fb611dd5565b610903611e33565b826001600160a01b0316336001600160a01b03167f2a21062ee9199c2e205622999eeb7c3da73153674f36a0acd3f74fa6af67bde384846040516109489291906133b8565b60405180910390a361097960017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b505050565b60607f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb6109aa81611cde565b6109b2611dd5565b6109ba611e33565b6001600160a01b0385166109fa576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610a07868686611eda565b9050856001600160a01b03167fcaf938de11c367272220bfd1d2baa99ca46665e7bc4d85f00adb51b90fe1fa9f348787604051610a46939291906133d4565b60405180910390a29150610a7960017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b509392505050565b610a89611dd5565b610a91611e33565b34600003610acb576040517f7671265e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038316610b0b576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546040516000916001600160a01b03169034908381818185875af1925050503d8060008114610b58576040519150601f19603f3d011682016040523d82523d6000602084013e610b5d565b606091505b5050905080610b98576040517f79cacff100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b836001600160a01b0316336001600160a01b03167f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a43460008787604051610be294939291906133ee565b60405180910390a35061097960017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020526040902060010154610c4e81611cde565b610c588383611ce8565b50505050565b7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb610c8881611cde565b610c90611dd5565b610c98611e33565b6001600160a01b038416610cd8576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000846001600160a01b03163460405160006040518083038185875af1925050503d8060008114610d25576040519150601f19603f3d011682016040523d82523d6000602084013e610d2a565b606091505b5050905080610d65576040517facfdb44400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f8fcaa0b50000000000000000000000000000000000000000000000000000000081526001600160a01b03861690638fcaa0b590610dac90879087906004016133b8565b600060405180830381600087803b158015610dc657600080fd5b505af1158015610dda573d6000803e3d6000fd5b50505050846001600160a01b03167fd5d7616b1678354a0dea9d7e57e6a090bff5babe9f8d6381fdbad16e89ba311c348686604051610e1b939291906133d4565b60405180910390a250610c5860017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b6001600160a01b0381163314610e8f576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6109798282611f83565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610ec381611cde565b610ecb612047565b50565b610ed66120d7565b610edf826121a7565b610ee982826121b2565b5050565b7f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b9610f1781611cde565b610f1f611dd5565b610f27611e33565b83600003610f61576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038516610fa1576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610fab86866122d6565b610fe1576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b0386811660048301526024820186905287169063095ea7b3906044016020604051808303816000875af1158015611049573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061106d9190613417565b6110a3576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6110ae858484611eda565b506110b986866122d6565b6110ef576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201526000906001600160a01b038816906370a0823190602401602060405180830381865afa15801561114f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111739190613439565b90508015611185576111858782612366565b856001600160a01b0316876001600160a01b03167f29c40793bffd84cb810179f15d1ceec72bc7f0785514c668ba36645cf99b73828787876040516111cc939291906133d4565b60405180910390a3506111fe60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b505050505050565b600061121061258c565b507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc90565b600480546040517f40c10f190000000000000000000000000000000000000000000000000000000081523092810192909252602482018590526001600160a01b0316906340c10f1990604401600060405180830381600087803b15801561129b57600080fd5b505af11580156112af573d6000803e3d6000fd5b50506004546112cd92506001600160a01b0316905085858585610eed565b600480546040517f70a0823100000000000000000000000000000000000000000000000000000000815230928101929092526001600160a01b0316906370a0823190602401602060405180830381865afa15801561132f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113539190613439565b15610c5857610c58613452565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61138a81611cde565b610ecb6125ee565b61139a611dd5565b6113a2611e33565b836000036113dc576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03851661141c576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611427338486612667565b846001600160a01b0316336001600160a01b03167f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a48686868660405161147094939291906133ee565b60405180910390a36114a160017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b5050505050565b60006114b381611cde565b6001600160a01b0382166114f3576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000546001600160a01b031615611536576040517fb337f37800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6115607f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b983611ce8565b5050600080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b7f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b96115c681611cde565b6115ce611dd5565b6115d6611e33565b83600003611610576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038516611650576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6116646001600160a01b03871686866128ad565b6040517f8fcaa0b50000000000000000000000000000000000000000000000000000000081526001600160a01b03861690638fcaa0b5906116ab90869086906004016133b8565b600060405180830381600087803b1580156116c557600080fd5b505af11580156116d9573d6000803e3d6000fd5b50505050846001600160a01b0316866001600160a01b03167f723fc7be2448075379e4fdf1e6bf5fead954d2668d2da05dcb44ccfec4beeda7868686604051611724939291906133d4565b60405180910390a36111fe60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156117a05750825b905060008267ffffffffffffffff1660011480156117bd5750303b155b9050811580156117cb575080155b15611802576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84547fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000016600117855583156118635784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff16680100000000000000001785555b6001600160a01b038816158061188057506001600160a01b038716155b156118b7576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6118bf612921565b6118c7612929565b6118cf612921565b6118d7612939565b6118e2600087611ce8565b5061190d7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a87611ce8565b50600180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b038a1617905561196b7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb89611ce8565b50600380547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0389161790558315611a005784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b5050505050505050565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020526040902060010154611a4481611cde565b610c588383611f83565b611a56611dd5565b611a5e611e33565b34600003611a98576040517f7671265e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038116611ad8576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546040516000916001600160a01b03169034908381818185875af1925050503d8060008114611b25576040519150601f19603f3d011682016040523d82523d6000602084013e611b2a565b606091505b5050905080611b65576040517f79cacff100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60408051348152600060208201819052606082840181905282015290516001600160a01b0384169133917f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a49181900360800190a350610ecb60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b611beb611dd5565b611bf3611e33565b81600003611c2d576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038316611c6d576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611c78338284612667565b826001600160a01b0316336001600160a01b03167f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a484846040516109489291909182526001600160a01b0316602082015260606040820181905260009082015260800190565b610ecb8133612949565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff16611dcb576000848152602082815260408083206001600160a01b0387168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055611d813390565b6001600160a01b0316836001600160a01b0316857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a460019150506107f9565b60009150506107f9565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff1615611e31576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0080547ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01611eae576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60029055565b60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b6060600080856001600160a01b0316348686604051611efa929190613481565b60006040518083038185875af1925050503d8060008114611f37576040519150601f19603f3d011682016040523d82523d6000602084013e611f3c565b606091505b509150915081611f78576040517facfdb44400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b9150505b9392505050565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff1615611dcb576000848152602082815260408083206001600160a01b038716808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339287917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a460019150506107f9565b61204f6129d6565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001681557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a150565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148061217057507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166121647f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b6001600160a01b031614155b15611e31576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610ee981611cde565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa92505050801561222a575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820190925261222791810190613439565b60015b612270576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b03831660048201526024015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc81146122cc576040517faa1d49a400000000000000000000000000000000000000000000000000000000815260048101829052602401612267565b6109798383612a31565b6040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b038281166004830152600060248301819052919084169063095ea7b3906044016020604051808303816000875af1158015612342573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f7c9190613417565b6003546001600160a01b03908116908316036124b5576002546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152602481018390529083169063095ea7b3906044016020604051808303816000875af11580156123e8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061240c9190613417565b612442576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002546040517f743e0c9b000000000000000000000000000000000000000000000000000000008152600481018390526001600160a01b039091169063743e0c9b90602401600060405180830381600087803b1580156124a157600080fd5b505af11580156111fe573d6000803e3d6000fd5b6000546040517fd936547e0000000000000000000000000000000000000000000000000000000081526001600160a01b0384811660048301529091169063d936547e90602401602060405180830381865afa158015612518573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061253c9190613417565b612572576040517fac2175f100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600054610ee9906001600160a01b038481169116836128ad565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614611e31576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6125f6611dd5565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011781557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258336120b9565b6003546001600160a01b03908116908316036127d4576126926001600160a01b038316843084612a87565b6002546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152602481018390529083169063095ea7b3906044016020604051808303816000875af11580156126fe573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127229190613417565b612758576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002546040517f743e0c9b000000000000000000000000000000000000000000000000000000008152600481018390526001600160a01b039091169063743e0c9b90602401600060405180830381600087803b1580156127b757600080fd5b505af11580156127cb573d6000803e3d6000fd5b50505050505050565b6000546040517fd936547e0000000000000000000000000000000000000000000000000000000081526001600160a01b0384811660048301529091169063d936547e90602401602060405180830381865afa158015612837573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061285b9190613417565b612891576040517fac2175f100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600054610979906001600160a01b038481169186911684612a87565b6040516001600160a01b0383811660248301526044820183905261097991859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050612ac0565b611e31612b3c565b612931612b3c565b611e31612ba3565b612941612b3c565b611e31612bab565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408083206001600160a01b038516845290915290205460ff16610ee9576040517fe2517d3f0000000000000000000000000000000000000000000000000000000081526001600160a01b038216600482015260248101839052604401612267565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff16611e31576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612a3a82612bfc565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a2805115612a7f576109798282612ca4565b610ee9612d1a565b6040516001600160a01b038481166024830152838116604483015260648201839052610c589186918216906323b872dd906084016128da565b6000612ad56001600160a01b03841683612d52565b90508051600014158015612afa575080806020019051810190612af89190613417565b155b15610979576040517f5274afe70000000000000000000000000000000000000000000000000000000081526001600160a01b0384166004820152602401612267565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff16611e31576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611eb4612b3c565b612bb3612b3c565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055565b806001600160a01b03163b600003612c4b576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b0382166004820152602401612267565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6060600080846001600160a01b031684604051612cc19190613491565b600060405180830381855af49150503d8060008114612cfc576040519150601f19603f3d011682016040523d82523d6000602084013e612d01565b606091505b5091509150612d11858383612d60565b95945050505050565b3415611e31576040517fb398979f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6060611f7c83836000612dd5565b606082612d7557612d7082612e8b565b611f7c565b8151158015612d8c57506001600160a01b0384163b155b15612dce576040517f9996b3150000000000000000000000000000000000000000000000000000000081526001600160a01b0385166004820152602401612267565b5080611f7c565b606081471015612e13576040517fcd786059000000000000000000000000000000000000000000000000000000008152306004820152602401612267565b600080856001600160a01b03168486604051612e2f9190613491565b60006040518083038185875af1925050503d8060008114612e6c576040519150601f19603f3d011682016040523d82523d6000602084013e612e71565b606091505b5091509150612e81868383612d60565b9695505050505050565b805115612e9b5780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060208284031215612edf57600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114611f7c57600080fd5b80356001600160a01b0381168114612f2657600080fd5b919050565b600060208284031215612f3d57600080fd5b611f7c82612f0f565b60008083601f840112612f5857600080fd5b50813567ffffffffffffffff811115612f7057600080fd5b602083019150836020828501011115612f8857600080fd5b9250929050565b600080600060408486031215612fa457600080fd5b612fad84612f0f565b9250602084013567ffffffffffffffff811115612fc957600080fd5b612fd586828701612f46565b9497909650939450505050565b60005b83811015612ffd578181015183820152602001612fe5565b50506000910152565b6000815180845261301e816020860160208601612fe2565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000611f7c6020830184613006565b60006020828403121561307557600080fd5b5035919050565b6000806040838503121561308f57600080fd5b8235915061309f60208401612f0f565b90509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080604083850312156130ea57600080fd5b6130f383612f0f565b9150602083013567ffffffffffffffff81111561310f57600080fd5b8301601f8101851361312057600080fd5b803567ffffffffffffffff81111561313a5761313a6130a8565b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8501160116810181811067ffffffffffffffff821117156131a6576131a66130a8565b6040528181528282016020018710156131be57600080fd5b816020840160208301376000602083830101528093505050509250929050565b6000806000806000608086880312156131f657600080fd5b6131ff86612f0f565b945061320d60208701612f0f565b935060408601359250606086013567ffffffffffffffff81111561323057600080fd5b61323c88828901612f46565b969995985093965092949392505050565b6000806000806060858703121561326357600080fd5b61326c85612f0f565b935060208501359250604085013567ffffffffffffffff81111561328f57600080fd5b61329b87828801612f46565b95989497509550505050565b6000806000806000608086880312156132bf57600080fd5b6132c886612f0f565b9450602086013593506132dd60408701612f0f565b9250606086013567ffffffffffffffff81111561323057600080fd5b60008060006060848603121561330e57600080fd5b61331784612f0f565b925061332560208501612f0f565b915061333360408501612f0f565b90509250925092565b60008060006060848603121561335157600080fd5b61335a84612f0f565b92506020840135915061333360408501612f0f565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b6020815260006133cc60208301848661336f565b949350505050565b838152604060208201526000612d1160408301848661336f565b8481526001600160a01b0384166020820152606060408201526000612e8160608301848661336f565b60006020828403121561342957600080fd5b81518015158114611f7c57600080fd5b60006020828403121561344b57600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b8183823760009101908152919050565b600082516134a3818460208701612fe2565b919091019291505056fea26469706673582212201e79584ab68e03a1f6cb4a1f95946f390c00515ee3bc1325400b0627808dec4564736f6c634300081a0033608060405234801561001057600080fd5b50604051610c9f380380610c9f83398101604081905261002f9161010d565b8181600361003d83826101ff565b50600461004a82826101ff565b50505050506102bd565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261007b57600080fd5b81516001600160401b0381111561009457610094610054565b604051601f8201601f19908116603f011681016001600160401b03811182821017156100c2576100c2610054565b6040528181528382016020018510156100da57600080fd5b60005b828110156100f9576020818601810151838301820152016100dd565b506000918101602001919091529392505050565b6000806040838503121561012057600080fd5b82516001600160401b0381111561013657600080fd5b6101428582860161006a565b602085015190935090506001600160401b0381111561016057600080fd5b61016c8582860161006a565b9150509250929050565b600181811c9082168061018a57607f821691505b6020821081036101aa57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156101fa57806000526020600020601f840160051c810160208510156101d75750805b601f840160051c820191505b818110156101f757600081556001016101e3565b50505b505050565b81516001600160401b0381111561021857610218610054565b61022c816102268454610176565b846101b0565b6020601f82116001811461026057600083156102485750848201515b600019600385901b1c1916600184901b1784556101f7565b600084815260208120601f198516915b828110156102905787850151825560209485019460019092019101610270565b50848210156102ae5786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b6109d3806102cc6000396000f3fe608060405234801561001057600080fd5b50600436106100be5760003560e01c806340c10f191161007657806395d89b411161005b57806395d89b4114610183578063a9059cbb1461018b578063dd62ed3e1461019e57600080fd5b806340c10f191461013857806370a082311461014d57600080fd5b806318160ddd116100a757806318160ddd1461010457806323b872dd14610116578063313ce5671461012957600080fd5b806306fdde03146100c3578063095ea7b3146100e1575b600080fd5b6100cb6101e4565b6040516100d891906107bf565b60405180910390f35b6100f46100ef366004610854565b610276565b60405190151581526020016100d8565b6002545b6040519081526020016100d8565b6100f461012436600461087e565b610290565b604051601281526020016100d8565b61014b610146366004610854565b6102b4565b005b61010861015b3660046108bb565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6100cb6102c2565b6100f4610199366004610854565b6102d1565b6101086101ac3660046108dd565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6060600380546101f390610910565b80601f016020809104026020016040519081016040528092919081815260200182805461021f90610910565b801561026c5780601f106102415761010080835404028352916020019161026c565b820191906000526020600020905b81548152906001019060200180831161024f57829003601f168201915b5050505050905090565b6000336102848185856102df565b60019150505b92915050565b60003361029e8582856102f1565b6102a98585856103c5565b506001949350505050565b6102be8282610470565b5050565b6060600480546101f390610910565b6000336102848185856103c5565b6102ec83838360016104cc565b505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146103bf57818110156103b0576040517ffb8f41b200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416600482015260248101829052604481018390526064015b60405180910390fd5b6103bf848484840360006104cc565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8316610415576040517f96c6fd1e000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff8216610465576040517fec442f05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b6102ec838383610614565b73ffffffffffffffffffffffffffffffffffffffff82166104c0576040517fec442f05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b6102be60008383610614565b73ffffffffffffffffffffffffffffffffffffffff841661051c576040517fe602df05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff831661056c576040517f94280d62000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260016020908152604080832093871683529290522082905580156103bf578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161060691815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff831661064c5780600260008282546106419190610963565b909155506106fe9050565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260208190526040902054818110156106d2576040517fe450d38c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8516600482015260248101829052604481018390526064016103a7565b73ffffffffffffffffffffffffffffffffffffffff841660009081526020819052604090209082900390555b73ffffffffffffffffffffffffffffffffffffffff821661072757600280548290039055610753565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090208054820190555b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516107b291815260200190565b60405180910390a3505050565b602081526000825180602084015260005b818110156107ed57602081860181015160408684010152016107d0565b5060006040828501015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011684010191505092915050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461084f57600080fd5b919050565b6000806040838503121561086757600080fd5b6108708361082b565b946020939093013593505050565b60008060006060848603121561089357600080fd5b61089c8461082b565b92506108aa6020850161082b565b929592945050506040919091013590565b6000602082840312156108cd57600080fd5b6108d68261082b565b9392505050565b600080604083850312156108f057600080fd5b6108f98361082b565b91506109076020840161082b565b90509250929050565b600181811c9082168061092457607f821691505b60208210810361095d577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b8082018082111561028a577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea26469706673582212207e804ca539d49155d2b6bc19268ce22f9f857027c75247d69fb0d56a089c93d464736f6c634300081a003360a060405234801561001057600080fd5b5060405161179838038061179883398101604081905261002f916101e5565b60016000556002805460ff191690556001600160a01b038316158061005b57506001600160a01b038216155b8061006d57506001600160a01b038116155b1561008b5760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b0383166080526100a3600082610134565b506100ce7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a82610134565b506100f97f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e483610134565b5061011260008051602061177883398151915282610134565b5061012b60008051602061177883398151915283610134565b50505050610228565b60008281526001602090815260408083206001600160a01b038516845290915281205460ff166101bf5760008381526001602081815260408084206001600160a01b0387168086529252808420805460ff19169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45060016101c3565b5060005b92915050565b80516001600160a01b03811681146101e057600080fd5b919050565b6000806000606084860312156101fa57600080fd5b610203846101c9565b9250610211602085016101c9565b915061021f604085016101c9565b90509250925092565b60805161151961025f6000396000818161019e01528181610500015281816105620152818161099101526109f301526115196000f3fe608060405234801561001057600080fd5b506004361061016c5760003560e01c806385f438c1116100cd578063c8a0236211610081578063d936547e11610066578063d936547e14610355578063d9caed1214610378578063e63ab1e91461038b57600080fd5b8063c8a023621461032f578063d547741f1461034257600080fd5b80639a590427116100b25780639a590427146103015780639b19251a14610314578063a217fddf1461032757600080fd5b806385f438c11461029457806391d14854146102bb57600080fd5b806336568abe11610124578063570618e111610109578063570618e11461025a5780635c975abb146102815780638456cb591461028c57600080fd5b806336568abe1461023f5780633f4ba83a1461025257600080fd5b806321fc65f21161015557806321fc65f2146101e5578063248a9ca3146101fa5780632f2ff15d1461022c57600080fd5b806301ffc9a714610171578063116191b614610199575b600080fd5b61018461017f366004611224565b6103b2565b60405190151581526020015b60405180910390f35b6101c07f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610190565b6101f86101f336600461128f565b61044b565b005b61021e61020836600461132c565b6000908152600160208190526040909120015490565b604051908152602001610190565b6101f861023a366004611345565b61064c565b6101f861024d366004611345565b610678565b6101f86106d6565b61021e7f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a81565b60025460ff16610184565b6101f861070b565b61021e7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b6101846102c9366004611345565b600091825260016020908152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b6101f861030f366004611371565b61073d565b6101f8610322366004611371565b61080b565b61021e600081565b6101f861033d36600461128f565b6108dc565b6101f8610350366004611345565b610ac3565b610184610363366004611371565b60036020526000908152604090205460ff1681565b6101f861038636600461138c565b610ae9565b61021e7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061044557507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b610453610c15565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461047d81610c58565b610485610c62565b73ffffffffffffffffffffffffffffffffffffffff861660009081526003602052604090205460ff166104e4576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61052573ffffffffffffffffffffffffffffffffffffffff87167f000000000000000000000000000000000000000000000000000000000000000086610ca1565b6040517f5131ab5900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690635131ab599061059f9089908990899089908990600401611412565b600060405180830381600087803b1580156105b957600080fd5b505af11580156105cd573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167f85b5be9cf454e05e0bddf49315178102227c312078eefa3c00294fb4d912ae4e8686866040516106329392919061146f565b60405180910390a3506106456001600055565b5050505050565b6000828152600160208190526040909120015461066881610c58565b6106728383610d2e565b50505050565b73ffffffffffffffffffffffffffffffffffffffff811633146106c7576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6106d18282610ddb565b505050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61070081610c58565b610708610e7c565b50565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61073581610c58565b610708610edb565b7f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a61076781610c58565b73ffffffffffffffffffffffffffffffffffffffff82166107b4576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216600081815260036020526040808220805460ff19169055517f51085ddf9ebdded84b76e829eb58c4078e4b5bdf97d9a94723f336039da467919190a25050565b7f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a61083581610c58565b73ffffffffffffffffffffffffffffffffffffffff8216610882576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216600081815260036020526040808220805460ff19166001179055517faab7954e9d246b167ef88aeddad35209ca2489d95a8aeb59e288d9b19fae5a549190a25050565b6108e4610c15565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461090e81610c58565b610916610c62565b73ffffffffffffffffffffffffffffffffffffffff861660009081526003602052604090205460ff16610975576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6109b673ffffffffffffffffffffffffffffffffffffffff87167f000000000000000000000000000000000000000000000000000000000000000086610ca1565b6040517fb8969bd400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063b8969bd490610a309089908990899089908990600401611412565b600060405180830381600087803b158015610a4a57600080fd5b505af1158015610a5e573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fb9d4efa96044e5f5e03e696fa9ae2ff66911cc27e8a637c3627c75bc5b2241c88686866040516106329392919061146f565b60008281526001602081905260409091200154610adf81610c58565b6106728383610ddb565b610af1610c15565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e4610b1b81610c58565b610b23610c62565b73ffffffffffffffffffffffffffffffffffffffff841660009081526003602052604090205460ff16610b82576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610ba373ffffffffffffffffffffffffffffffffffffffff85168484610ca1565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f9b1bfa7fa9ee420a16e124f794c35ac9f90472acc99140eb2f6447c714cad8eb84604051610c0291815260200190565b60405180910390a3506106d16001600055565b600260005403610c51576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b6107088133610f18565b60025460ff1615610c9f576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6040805173ffffffffffffffffffffffffffffffffffffffff8416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb000000000000000000000000000000000000000000000000000000001790526106d1908490610fa9565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff16610dd357600083815260016020818152604080842073ffffffffffffffffffffffffffffffffffffffff87168086529252808420805460ff19169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a4506001610445565b506000610445565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff1615610dd357600083815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff86168085529252808320805460ff1916905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a4506001610445565b610e8461103f565b6002805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b610ee3610c62565b6002805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258610eb13390565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16610fa5576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82166004820152602481018390526044015b60405180910390fd5b5050565b6000610fcb73ffffffffffffffffffffffffffffffffffffffff84168361107b565b90508051600014158015610ff0575080806020019051810190610fee9190611492565b155b156106d1576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84166004820152602401610f9c565b60025460ff16610c9f576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606061108983836000611090565b9392505050565b6060814710156110ce576040517fcd786059000000000000000000000000000000000000000000000000000000008152306004820152602401610f9c565b6000808573ffffffffffffffffffffffffffffffffffffffff1684866040516110f791906114b4565b60006040518083038185875af1925050503d8060008114611134576040519150601f19603f3d011682016040523d82523d6000602084013e611139565b606091505b5091509150611149868383611153565b9695505050505050565b60608261116857611163826111e2565b611089565b815115801561118c575073ffffffffffffffffffffffffffffffffffffffff84163b155b156111db576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85166004820152602401610f9c565b5080611089565b8051156111f25780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006020828403121561123657600080fd5b81357fffffffff000000000000000000000000000000000000000000000000000000008116811461108957600080fd5b803573ffffffffffffffffffffffffffffffffffffffff8116811461128a57600080fd5b919050565b6000806000806000608086880312156112a757600080fd5b6112b086611266565b94506112be60208701611266565b935060408601359250606086013567ffffffffffffffff8111156112e157600080fd5b8601601f810188136112f257600080fd5b803567ffffffffffffffff81111561130957600080fd5b88602082840101111561131b57600080fd5b959894975092955050506020019190565b60006020828403121561133e57600080fd5b5035919050565b6000806040838503121561135857600080fd5b8235915061136860208401611266565b90509250929050565b60006020828403121561138357600080fd5b61108982611266565b6000806000606084860312156113a157600080fd5b6113aa84611266565b92506113b860208501611266565b929592945050506040919091013590565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff8616815273ffffffffffffffffffffffffffffffffffffffff851660208201528360408201526080606082015260006114646080830184866113c9565b979650505050505050565b8381526040602082015260006114896040830184866113c9565b95945050505050565b6000602082840312156114a457600080fd5b8151801515811461108957600080fd5b6000825160005b818110156114d557602081860181015185830152016114bb565b50600092019182525091905056fea26469706673582212207ea3ad4ba4a6d39c3be3cec464753448900300ac3b508b4000815de5b914c53064736f6c634300081a00338619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a"; + "0x60a060405230608052600580546001600160a01b0319163317905534801561002657600080fd5b5061002f610154565b600554600180546001600160a01b039092166001600160a01b031992831617905560028054610123921691909117905560405161006b90610206565b60408082526004908201819052631d195cdd60e21b606083015260806020830181905282015263151154d560e21b60a082015260c001604051809103906000f0801580156100bd573d6000803e3d6000fd5b50600480546001600160a01b0319166001600160a01b039283161790556001546040513092919091169082906100f290610213565b6001600160a01b03938416815291831660208301529091166040820152606001604051809103906000f08015801561012e573d6000803e3d6000fd5b50600080546001600160a01b0319166001600160a01b0392909216919091179055610220565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156101a45760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146102035780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b610c9f8061376c83390190565b6117988061440b83390190565b608051613523610249600039600081816121220152818161214b01526125d701526135236000f3fe6080604052600436106102345760003560e01c80635c975abb11610138578063ad3cb1cc116100b0578063d547741f1161007f578063e63ab1e911610064578063e63ab1e9146106ff578063f340fa0114610733578063f45346dc1461074657600080fd5b8063d547741f146106bf578063dda79b75146106df57600080fd5b8063ad3cb1cc14610616578063ae7a3a6f1461065f578063b8969bd41461067f578063c0c53b8b1461069f57600080fd5b80638456cb591161010757806391d14854116100ec57806391d1485414610568578063a217fddf146105cd578063a783c789146105e257600080fd5b80638456cb59146105335780638c6f037f1461054857600080fd5b80635c975abb146104885780635d62c860146104bf5780636ab90f9b146104f357806381100bf01461051357600080fd5b806335c018db116101cb5780634f1ef2861161019a57806352d1902d1161017f57806352d1902d1461043357806357bec62f146104485780635b1125911461046857600080fd5b80634f1ef286146104005780635131ab591461041357600080fd5b806335c018db1461039857806336568abe146103ab5780633c2f05a8146103cb5780633f4ba83a146103eb57600080fd5b806321e093b11161020757806321e093b1146102d0578063248a9ca31461030857806329c59b5d146103655780632f2ff15d1461037857600080fd5b806301ffc9a71461023957806310188aef1461026e5780631b8b921d146102905780631cff79cd146102b0575b600080fd5b34801561024557600080fd5b50610259610254366004612f0d565b610766565b60405190151581526020015b60405180910390f35b34801561027a57600080fd5b5061028e610289366004612f6b565b6107ff565b005b34801561029c57600080fd5b5061028e6102ab366004612fcf565b6108f3565b6102c36102be366004612fcf565b6109be565b6040516102659190613090565b3480156102dc57600080fd5b506003546102f0906001600160a01b031681565b6040516001600160a01b039091168152602001610265565b34801561031457600080fd5b506103576103233660046130a3565b60009081527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052604090206001015490565b604051908152602001610265565b61028e610373366004612fcf565b610ac1565b34801561038457600080fd5b5061028e6103933660046130bc565b610c54565b61028e6103a6366004612fcf565b610c9e565b3480156103b757600080fd5b5061028e6103c63660046130bc565b610e8d565b3480156103d757600080fd5b506004546102f0906001600160a01b031681565b3480156103f757600080fd5b5061028e610ed9565b61028e61040e366004613117565b610f0e565b34801561041f57600080fd5b5061028e61042e36600461321e565b610f2d565b34801561043f57600080fd5b50610357611246565b34801561045457600080fd5b506002546102f0906001600160a01b031681565b34801561047457600080fd5b506001546102f0906001600160a01b031681565b34801561049457600080fd5b507fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff16610259565b3480156104cb57600080fd5b506103577f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b981565b3480156104ff57600080fd5b5061028e61050e36600461328d565b611275565b34801561051f57600080fd5b506005546102f0906001600160a01b031681565b34801561053f57600080fd5b5061028e6113a0565b34801561055457600080fd5b5061028e6105633660046132e7565b6113d2565b34801561057457600080fd5b506102596105833660046130bc565b60009182527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408084206001600160a01b0393909316845291905290205460ff1690565b3480156105d957600080fd5b50610357600081565b3480156105ee57600080fd5b506103577f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb81565b34801561062257600080fd5b506102c36040518060400160405280600581526020017f352e302e3000000000000000000000000000000000000000000000000000000081525081565b34801561066b57600080fd5b5061028e61067a366004612f6b565b6114e8565b34801561068b57600080fd5b5061028e61069a36600461321e565b6115dc565b3480156106ab57600080fd5b5061028e6106ba366004613339565b611795565b3480156106cb57600080fd5b5061028e6106da3660046130bc565b611a4a565b3480156106eb57600080fd5b506000546102f0906001600160a01b031681565b34801561070b57600080fd5b506103577f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b61028e610741366004612f6b565b611a8e565b34801561075257600080fd5b5061028e61076136600461337c565b611c23565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b0000000000000000000000000000000000000000000000000000000014806107f957507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b600061080a81611d1e565b6001600160a01b03821661084a576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002546001600160a01b03161561088d576040517f0c8dc01600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6108b77f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b983611d28565b5050600280547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6108fb611e15565b610903611e73565b6001600160a01b038316610943576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b826001600160a01b0316336001600160a01b03167f2a21062ee9199c2e205622999eeb7c3da73153674f36a0acd3f74fa6af67bde384846040516109889291906133f8565b60405180910390a36109b960017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b505050565b60607f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb6109ea81611d1e565b6109f2611e15565b6109fa611e73565b6001600160a01b038516610a3a576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610a47868686611f1a565b9050856001600160a01b03167fcaf938de11c367272220bfd1d2baa99ca46665e7bc4d85f00adb51b90fe1fa9f348787604051610a8693929190613414565b60405180910390a29150610ab960017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b509392505050565b610ac9611e15565b610ad1611e73565b34600003610b0b576040517f7671265e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038316610b4b576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546040516000916001600160a01b03169034908381818185875af1925050503d8060008114610b98576040519150601f19603f3d011682016040523d82523d6000602084013e610b9d565b606091505b5050905080610bd8576040517f79cacff100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b836001600160a01b0316336001600160a01b03167f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a43460008787604051610c22949392919061342e565b60405180910390a3506109b960017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020526040902060010154610c8e81611d1e565b610c988383611d28565b50505050565b7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb610cc881611d1e565b610cd0611e15565b610cd8611e73565b6001600160a01b038416610d18576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000846001600160a01b03163460405160006040518083038185875af1925050503d8060008114610d65576040519150601f19603f3d011682016040523d82523d6000602084013e610d6a565b606091505b5050905080610da5576040517facfdb44400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f8fcaa0b50000000000000000000000000000000000000000000000000000000081526001600160a01b03861690638fcaa0b590610dec90879087906004016133f8565b600060405180830381600087803b158015610e0657600080fd5b505af1158015610e1a573d6000803e3d6000fd5b50505050846001600160a01b03167fd5d7616b1678354a0dea9d7e57e6a090bff5babe9f8d6381fdbad16e89ba311c348686604051610e5b93929190613414565b60405180910390a250610c9860017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b6001600160a01b0381163314610ecf576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6109b98282611fc3565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610f0381611d1e565b610f0b612087565b50565b610f16612117565b610f1f826121e7565b610f2982826121f2565b5050565b7f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b9610f5781611d1e565b610f5f611e15565b610f67611e73565b83600003610fa1576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038516610fe1576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610feb8686612316565b611021576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b0386811660048301526024820186905287169063095ea7b3906044016020604051808303816000875af1158015611089573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110ad9190613457565b6110e3576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6110ee858484611f1a565b506110f98686612316565b61112f576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201526000906001600160a01b038816906370a0823190602401602060405180830381865afa15801561118f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111b39190613479565b905080156111c5576111c587826123a6565b856001600160a01b0316876001600160a01b03167f29c40793bffd84cb810179f15d1ceec72bc7f0785514c668ba36645cf99b738287878760405161120c93929190613414565b60405180910390a35061123e60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b505050505050565b60006112506125cc565b507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc90565b600480546040517f40c10f190000000000000000000000000000000000000000000000000000000081523092810192909252602482018590526001600160a01b0316906340c10f1990604401600060405180830381600087803b1580156112db57600080fd5b505af11580156112ef573d6000803e3d6000fd5b505060045461130d92506001600160a01b0316905085858585610f2d565b600480546040517f70a0823100000000000000000000000000000000000000000000000000000000815230928101929092526001600160a01b0316906370a0823190602401602060405180830381865afa15801561136f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113939190613479565b15610c9857610c98613492565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a6113ca81611d1e565b610f0b61262e565b6113da611e15565b6113e2611e73565b8360000361141c576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03851661145c576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6114673384866126a7565b846001600160a01b0316336001600160a01b03167f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a4868686866040516114b0949392919061342e565b60405180910390a36114e160017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b5050505050565b60006114f381611d1e565b6001600160a01b038216611533576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000546001600160a01b031615611576576040517fb337f37800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6115a07f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b983611d28565b5050600080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b7f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b961160681611d1e565b61160e611e15565b611616611e73565b83600003611650576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038516611690576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6116a46001600160a01b03871686866128ed565b6040517f8fcaa0b50000000000000000000000000000000000000000000000000000000081526001600160a01b03861690638fcaa0b5906116eb90869086906004016133f8565b600060405180830381600087803b15801561170557600080fd5b505af1158015611719573d6000803e3d6000fd5b50505050846001600160a01b0316866001600160a01b03167f723fc7be2448075379e4fdf1e6bf5fead954d2668d2da05dcb44ccfec4beeda786868660405161176493929190613414565b60405180910390a361123e60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156117e05750825b905060008267ffffffffffffffff1660011480156117fd5750303b155b90508115801561180b575080155b15611842576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84547fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000016600117855583156118a35784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff16680100000000000000001785555b6001600160a01b03881615806118c057506001600160a01b038716155b156118f7576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6118ff612961565b611907612969565b61190f612961565b611917612979565b611922600087611d28565b5061194d7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a87611d28565b50600180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b038a161790556119ab7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb89611d28565b50600380547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0389161790558315611a405784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b5050505050505050565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020526040902060010154611a8481611d1e565b610c988383611fc3565b611a96611e15565b611a9e611e73565b34600003611ad8576040517f7671265e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038116611b18576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546040516000916001600160a01b03169034908381818185875af1925050503d8060008114611b65576040519150601f19603f3d011682016040523d82523d6000602084013e611b6a565b606091505b5050905080611ba5576040517f79cacff100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60408051348152600060208201819052606082840181905282015290516001600160a01b0384169133917f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a49181900360800190a350610f0b60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b611c2b611e15565b611c33611e73565b81600003611c6d576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038316611cad576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611cb83382846126a7565b826001600160a01b0316336001600160a01b03167f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a484846040516109889291909182526001600160a01b0316602082015260606040820181905260009082015260800190565b610f0b8133612989565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff16611e0b576000848152602082815260408083206001600160a01b0387168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055611dc13390565b6001600160a01b0316836001600160a01b0316857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a460019150506107f9565b60009150506107f9565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff1615611e71576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0080547ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01611eee576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60029055565b60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b6060600080856001600160a01b0316348686604051611f3a9291906134c1565b60006040518083038185875af1925050503d8060008114611f77576040519150601f19603f3d011682016040523d82523d6000602084013e611f7c565b606091505b509150915081611fb8576040517facfdb44400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b9150505b9392505050565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff1615611e0b576000848152602082815260408083206001600160a01b038716808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339287917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a460019150506107f9565b61208f612a16565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001681557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a150565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806121b057507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166121a47f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b6001600160a01b031614155b15611e71576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610f2981611d1e565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa92505050801561226a575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820190925261226791810190613479565b60015b6122b0576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b03831660048201526024015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc811461230c576040517faa1d49a4000000000000000000000000000000000000000000000000000000008152600481018290526024016122a7565b6109b98383612a71565b6040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b038281166004830152600060248301819052919084169063095ea7b3906044016020604051808303816000875af1158015612382573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fbc9190613457565b6003546001600160a01b03908116908316036124f5576002546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152602481018390529083169063095ea7b3906044016020604051808303816000875af1158015612428573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061244c9190613457565b612482576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002546040517f743e0c9b000000000000000000000000000000000000000000000000000000008152600481018390526001600160a01b039091169063743e0c9b90602401600060405180830381600087803b1580156124e157600080fd5b505af115801561123e573d6000803e3d6000fd5b6000546040517fd936547e0000000000000000000000000000000000000000000000000000000081526001600160a01b0384811660048301529091169063d936547e90602401602060405180830381865afa158015612558573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061257c9190613457565b6125b2576040517fac2175f100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600054610f29906001600160a01b038481169116836128ed565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614611e71576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612636611e15565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011781557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258336120f9565b6003546001600160a01b0390811690831603612814576126d26001600160a01b038316843084612ac7565b6002546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152602481018390529083169063095ea7b3906044016020604051808303816000875af115801561273e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127629190613457565b612798576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002546040517f743e0c9b000000000000000000000000000000000000000000000000000000008152600481018390526001600160a01b039091169063743e0c9b90602401600060405180830381600087803b1580156127f757600080fd5b505af115801561280b573d6000803e3d6000fd5b50505050505050565b6000546040517fd936547e0000000000000000000000000000000000000000000000000000000081526001600160a01b0384811660048301529091169063d936547e90602401602060405180830381865afa158015612877573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061289b9190613457565b6128d1576040517fac2175f100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000546109b9906001600160a01b038481169186911684612ac7565b6040516001600160a01b038381166024830152604482018390526109b991859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050612b00565b611e71612b7c565b612971612b7c565b611e71612be3565b612981612b7c565b611e71612beb565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408083206001600160a01b038516845290915290205460ff16610f29576040517fe2517d3f0000000000000000000000000000000000000000000000000000000081526001600160a01b0382166004820152602481018390526044016122a7565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff16611e71576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612a7a82612c3c565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a2805115612abf576109b98282612ce4565b610f29612d5a565b6040516001600160a01b038481166024830152838116604483015260648201839052610c989186918216906323b872dd9060840161291a565b6000612b156001600160a01b03841683612d92565b90508051600014158015612b3a575080806020019051810190612b389190613457565b155b156109b9576040517f5274afe70000000000000000000000000000000000000000000000000000000081526001600160a01b03841660048201526024016122a7565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff16611e71576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611ef4612b7c565b612bf3612b7c565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055565b806001600160a01b03163b600003612c8b576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b03821660048201526024016122a7565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6060600080846001600160a01b031684604051612d0191906134d1565b600060405180830381855af49150503d8060008114612d3c576040519150601f19603f3d011682016040523d82523d6000602084013e612d41565b606091505b5091509150612d51858383612da0565b95945050505050565b3415611e71576040517fb398979f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6060611fbc83836000612e15565b606082612db557612db082612ecb565b611fbc565b8151158015612dcc57506001600160a01b0384163b155b15612e0e576040517f9996b3150000000000000000000000000000000000000000000000000000000081526001600160a01b03851660048201526024016122a7565b5080611fbc565b606081471015612e53576040517fcd7860590000000000000000000000000000000000000000000000000000000081523060048201526024016122a7565b600080856001600160a01b03168486604051612e6f91906134d1565b60006040518083038185875af1925050503d8060008114612eac576040519150601f19603f3d011682016040523d82523d6000602084013e612eb1565b606091505b5091509150612ec1868383612da0565b9695505050505050565b805115612edb5780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060208284031215612f1f57600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114611fbc57600080fd5b80356001600160a01b0381168114612f6657600080fd5b919050565b600060208284031215612f7d57600080fd5b611fbc82612f4f565b60008083601f840112612f9857600080fd5b50813567ffffffffffffffff811115612fb057600080fd5b602083019150836020828501011115612fc857600080fd5b9250929050565b600080600060408486031215612fe457600080fd5b612fed84612f4f565b9250602084013567ffffffffffffffff81111561300957600080fd5b61301586828701612f86565b9497909650939450505050565b60005b8381101561303d578181015183820152602001613025565b50506000910152565b6000815180845261305e816020860160208601613022565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000611fbc6020830184613046565b6000602082840312156130b557600080fd5b5035919050565b600080604083850312156130cf57600080fd5b823591506130df60208401612f4f565b90509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000806040838503121561312a57600080fd5b61313383612f4f565b9150602083013567ffffffffffffffff81111561314f57600080fd5b8301601f8101851361316057600080fd5b803567ffffffffffffffff81111561317a5761317a6130e8565b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8501160116810181811067ffffffffffffffff821117156131e6576131e66130e8565b6040528181528282016020018710156131fe57600080fd5b816020840160208301376000602083830101528093505050509250929050565b60008060008060006080868803121561323657600080fd5b61323f86612f4f565b945061324d60208701612f4f565b935060408601359250606086013567ffffffffffffffff81111561327057600080fd5b61327c88828901612f86565b969995985093965092949392505050565b600080600080606085870312156132a357600080fd5b6132ac85612f4f565b935060208501359250604085013567ffffffffffffffff8111156132cf57600080fd5b6132db87828801612f86565b95989497509550505050565b6000806000806000608086880312156132ff57600080fd5b61330886612f4f565b94506020860135935061331d60408701612f4f565b9250606086013567ffffffffffffffff81111561327057600080fd5b60008060006060848603121561334e57600080fd5b61335784612f4f565b925061336560208501612f4f565b915061337360408501612f4f565b90509250925092565b60008060006060848603121561339157600080fd5b61339a84612f4f565b92506020840135915061337360408501612f4f565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b60208152600061340c6020830184866133af565b949350505050565b838152604060208201526000612d516040830184866133af565b8481526001600160a01b0384166020820152606060408201526000612ec16060830184866133af565b60006020828403121561346957600080fd5b81518015158114611fbc57600080fd5b60006020828403121561348b57600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b8183823760009101908152919050565b600082516134e3818460208701613022565b919091019291505056fea26469706673582212203f4cfc4695a0460408bcfd19b26b817445cbe78cbdccf772504b10776428dcc264736f6c634300081a0033608060405234801561001057600080fd5b50604051610c9f380380610c9f83398101604081905261002f9161010d565b8181600361003d83826101ff565b50600461004a82826101ff565b50505050506102bd565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261007b57600080fd5b81516001600160401b0381111561009457610094610054565b604051601f8201601f19908116603f011681016001600160401b03811182821017156100c2576100c2610054565b6040528181528382016020018510156100da57600080fd5b60005b828110156100f9576020818601810151838301820152016100dd565b506000918101602001919091529392505050565b6000806040838503121561012057600080fd5b82516001600160401b0381111561013657600080fd5b6101428582860161006a565b602085015190935090506001600160401b0381111561016057600080fd5b61016c8582860161006a565b9150509250929050565b600181811c9082168061018a57607f821691505b6020821081036101aa57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156101fa57806000526020600020601f840160051c810160208510156101d75750805b601f840160051c820191505b818110156101f757600081556001016101e3565b50505b505050565b81516001600160401b0381111561021857610218610054565b61022c816102268454610176565b846101b0565b6020601f82116001811461026057600083156102485750848201515b600019600385901b1c1916600184901b1784556101f7565b600084815260208120601f198516915b828110156102905787850151825560209485019460019092019101610270565b50848210156102ae5786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b6109d3806102cc6000396000f3fe608060405234801561001057600080fd5b50600436106100be5760003560e01c806340c10f191161007657806395d89b411161005b57806395d89b4114610183578063a9059cbb1461018b578063dd62ed3e1461019e57600080fd5b806340c10f191461013857806370a082311461014d57600080fd5b806318160ddd116100a757806318160ddd1461010457806323b872dd14610116578063313ce5671461012957600080fd5b806306fdde03146100c3578063095ea7b3146100e1575b600080fd5b6100cb6101e4565b6040516100d891906107bf565b60405180910390f35b6100f46100ef366004610854565b610276565b60405190151581526020016100d8565b6002545b6040519081526020016100d8565b6100f461012436600461087e565b610290565b604051601281526020016100d8565b61014b610146366004610854565b6102b4565b005b61010861015b3660046108bb565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6100cb6102c2565b6100f4610199366004610854565b6102d1565b6101086101ac3660046108dd565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6060600380546101f390610910565b80601f016020809104026020016040519081016040528092919081815260200182805461021f90610910565b801561026c5780601f106102415761010080835404028352916020019161026c565b820191906000526020600020905b81548152906001019060200180831161024f57829003601f168201915b5050505050905090565b6000336102848185856102df565b60019150505b92915050565b60003361029e8582856102f1565b6102a98585856103c5565b506001949350505050565b6102be8282610470565b5050565b6060600480546101f390610910565b6000336102848185856103c5565b6102ec83838360016104cc565b505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146103bf57818110156103b0576040517ffb8f41b200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416600482015260248101829052604481018390526064015b60405180910390fd5b6103bf848484840360006104cc565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8316610415576040517f96c6fd1e000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff8216610465576040517fec442f05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b6102ec838383610614565b73ffffffffffffffffffffffffffffffffffffffff82166104c0576040517fec442f05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b6102be60008383610614565b73ffffffffffffffffffffffffffffffffffffffff841661051c576040517fe602df05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff831661056c576040517f94280d62000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260016020908152604080832093871683529290522082905580156103bf578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161060691815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff831661064c5780600260008282546106419190610963565b909155506106fe9050565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260208190526040902054818110156106d2576040517fe450d38c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8516600482015260248101829052604481018390526064016103a7565b73ffffffffffffffffffffffffffffffffffffffff841660009081526020819052604090209082900390555b73ffffffffffffffffffffffffffffffffffffffff821661072757600280548290039055610753565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090208054820190555b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516107b291815260200190565b60405180910390a3505050565b602081526000825180602084015260005b818110156107ed57602081860181015160408684010152016107d0565b5060006040828501015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011684010191505092915050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461084f57600080fd5b919050565b6000806040838503121561086757600080fd5b6108708361082b565b946020939093013593505050565b60008060006060848603121561089357600080fd5b61089c8461082b565b92506108aa6020850161082b565b929592945050506040919091013590565b6000602082840312156108cd57600080fd5b6108d68261082b565b9392505050565b600080604083850312156108f057600080fd5b6108f98361082b565b91506109076020840161082b565b90509250929050565b600181811c9082168061092457607f821691505b60208210810361095d577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b8082018082111561028a577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea26469706673582212207e804ca539d49155d2b6bc19268ce22f9f857027c75247d69fb0d56a089c93d464736f6c634300081a003360a060405234801561001057600080fd5b5060405161179838038061179883398101604081905261002f916101e5565b60016000556002805460ff191690556001600160a01b038316158061005b57506001600160a01b038216155b8061006d57506001600160a01b038116155b1561008b5760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b0383166080526100a3600082610134565b506100ce7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a82610134565b506100f97f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e483610134565b5061011260008051602061177883398151915282610134565b5061012b60008051602061177883398151915283610134565b50505050610228565b60008281526001602090815260408083206001600160a01b038516845290915281205460ff166101bf5760008381526001602081815260408084206001600160a01b0387168086529252808420805460ff19169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45060016101c3565b5060005b92915050565b80516001600160a01b03811681146101e057600080fd5b919050565b6000806000606084860312156101fa57600080fd5b610203846101c9565b9250610211602085016101c9565b915061021f604085016101c9565b90509250925092565b60805161151961025f6000396000818161019e01528181610500015281816105620152818161099101526109f301526115196000f3fe608060405234801561001057600080fd5b506004361061016c5760003560e01c806385f438c1116100cd578063c8a0236211610081578063d936547e11610066578063d936547e14610355578063d9caed1214610378578063e63ab1e91461038b57600080fd5b8063c8a023621461032f578063d547741f1461034257600080fd5b80639a590427116100b25780639a590427146103015780639b19251a14610314578063a217fddf1461032757600080fd5b806385f438c11461029457806391d14854146102bb57600080fd5b806336568abe11610124578063570618e111610109578063570618e11461025a5780635c975abb146102815780638456cb591461028c57600080fd5b806336568abe1461023f5780633f4ba83a1461025257600080fd5b806321fc65f21161015557806321fc65f2146101e5578063248a9ca3146101fa5780632f2ff15d1461022c57600080fd5b806301ffc9a714610171578063116191b614610199575b600080fd5b61018461017f366004611224565b6103b2565b60405190151581526020015b60405180910390f35b6101c07f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610190565b6101f86101f336600461128f565b61044b565b005b61021e61020836600461132c565b6000908152600160208190526040909120015490565b604051908152602001610190565b6101f861023a366004611345565b61064c565b6101f861024d366004611345565b610678565b6101f86106d6565b61021e7f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a81565b60025460ff16610184565b6101f861070b565b61021e7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b6101846102c9366004611345565b600091825260016020908152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b6101f861030f366004611371565b61073d565b6101f8610322366004611371565b61080b565b61021e600081565b6101f861033d36600461128f565b6108dc565b6101f8610350366004611345565b610ac3565b610184610363366004611371565b60036020526000908152604090205460ff1681565b6101f861038636600461138c565b610ae9565b61021e7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061044557507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b610453610c15565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461047d81610c58565b610485610c62565b73ffffffffffffffffffffffffffffffffffffffff861660009081526003602052604090205460ff166104e4576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61052573ffffffffffffffffffffffffffffffffffffffff87167f000000000000000000000000000000000000000000000000000000000000000086610ca1565b6040517f5131ab5900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690635131ab599061059f9089908990899089908990600401611412565b600060405180830381600087803b1580156105b957600080fd5b505af11580156105cd573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167f85b5be9cf454e05e0bddf49315178102227c312078eefa3c00294fb4d912ae4e8686866040516106329392919061146f565b60405180910390a3506106456001600055565b5050505050565b6000828152600160208190526040909120015461066881610c58565b6106728383610d2e565b50505050565b73ffffffffffffffffffffffffffffffffffffffff811633146106c7576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6106d18282610ddb565b505050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61070081610c58565b610708610e7c565b50565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61073581610c58565b610708610edb565b7f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a61076781610c58565b73ffffffffffffffffffffffffffffffffffffffff82166107b4576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216600081815260036020526040808220805460ff19169055517f51085ddf9ebdded84b76e829eb58c4078e4b5bdf97d9a94723f336039da467919190a25050565b7f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a61083581610c58565b73ffffffffffffffffffffffffffffffffffffffff8216610882576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216600081815260036020526040808220805460ff19166001179055517faab7954e9d246b167ef88aeddad35209ca2489d95a8aeb59e288d9b19fae5a549190a25050565b6108e4610c15565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461090e81610c58565b610916610c62565b73ffffffffffffffffffffffffffffffffffffffff861660009081526003602052604090205460ff16610975576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6109b673ffffffffffffffffffffffffffffffffffffffff87167f000000000000000000000000000000000000000000000000000000000000000086610ca1565b6040517fb8969bd400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063b8969bd490610a309089908990899089908990600401611412565b600060405180830381600087803b158015610a4a57600080fd5b505af1158015610a5e573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fb9d4efa96044e5f5e03e696fa9ae2ff66911cc27e8a637c3627c75bc5b2241c88686866040516106329392919061146f565b60008281526001602081905260409091200154610adf81610c58565b6106728383610ddb565b610af1610c15565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e4610b1b81610c58565b610b23610c62565b73ffffffffffffffffffffffffffffffffffffffff841660009081526003602052604090205460ff16610b82576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610ba373ffffffffffffffffffffffffffffffffffffffff85168484610ca1565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f9b1bfa7fa9ee420a16e124f794c35ac9f90472acc99140eb2f6447c714cad8eb84604051610c0291815260200190565b60405180910390a3506106d16001600055565b600260005403610c51576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b6107088133610f18565b60025460ff1615610c9f576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6040805173ffffffffffffffffffffffffffffffffffffffff8416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb000000000000000000000000000000000000000000000000000000001790526106d1908490610fa9565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff16610dd357600083815260016020818152604080842073ffffffffffffffffffffffffffffffffffffffff87168086529252808420805460ff19169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a4506001610445565b506000610445565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff1615610dd357600083815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff86168085529252808320805460ff1916905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a4506001610445565b610e8461103f565b6002805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b610ee3610c62565b6002805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258610eb13390565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16610fa5576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82166004820152602481018390526044015b60405180910390fd5b5050565b6000610fcb73ffffffffffffffffffffffffffffffffffffffff84168361107b565b90508051600014158015610ff0575080806020019051810190610fee9190611492565b155b156106d1576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84166004820152602401610f9c565b60025460ff16610c9f576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606061108983836000611090565b9392505050565b6060814710156110ce576040517fcd786059000000000000000000000000000000000000000000000000000000008152306004820152602401610f9c565b6000808573ffffffffffffffffffffffffffffffffffffffff1684866040516110f791906114b4565b60006040518083038185875af1925050503d8060008114611134576040519150601f19603f3d011682016040523d82523d6000602084013e611139565b606091505b5091509150611149868383611153565b9695505050505050565b60608261116857611163826111e2565b611089565b815115801561118c575073ffffffffffffffffffffffffffffffffffffffff84163b155b156111db576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85166004820152602401610f9c565b5080611089565b8051156111f25780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006020828403121561123657600080fd5b81357fffffffff000000000000000000000000000000000000000000000000000000008116811461108957600080fd5b803573ffffffffffffffffffffffffffffffffffffffff8116811461128a57600080fd5b919050565b6000806000806000608086880312156112a757600080fd5b6112b086611266565b94506112be60208701611266565b935060408601359250606086013567ffffffffffffffff8111156112e157600080fd5b8601601f810188136112f257600080fd5b803567ffffffffffffffff81111561130957600080fd5b88602082840101111561131b57600080fd5b959894975092955050506020019190565b60006020828403121561133e57600080fd5b5035919050565b6000806040838503121561135857600080fd5b8235915061136860208401611266565b90509250929050565b60006020828403121561138357600080fd5b61108982611266565b6000806000606084860312156113a157600080fd5b6113aa84611266565b92506113b860208501611266565b929592945050506040919091013590565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff8616815273ffffffffffffffffffffffffffffffffffffffff851660208201528360408201526080606082015260006114646080830184866113c9565b979650505050505050565b8381526040602082015260006114896040830184866113c9565b95945050505050565b6000602082840312156114a457600080fd5b8151801515811461108957600080fd5b6000825160005b818110156114d557602081860181015185830152016114bb565b50600092019182525091905056fea26469706673582212207ea3ad4ba4a6d39c3be3cec464753448900300ac3b508b4000815de5b914c53064736f6c634300081a00338619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a"; type GatewayEVMEchidnaTestConstructorParams = | [signer?: Signer] diff --git a/v2/typechain-types/factories/GatewayEVM__factory.ts b/v2/typechain-types/factories/GatewayEVM__factory.ts index 54155021..b24e2824 100644 --- a/v2/typechain-types/factories/GatewayEVM__factory.ts +++ b/v2/typechain-types/factories/GatewayEVM__factory.ts @@ -1020,7 +1020,7 @@ const _abi = [ ] as const; const _bytecode = - "0x60a06040523060805234801561001457600080fd5b5061001d610022565b6100d4565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100725760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146100d15780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b60805161327e6100fd60003960008181611f0601528181611f2f01526123bb015261327e6000f3fe6080604052600436106101e35760003560e01c80635c975abb11610102578063ae7a3a6f11610095578063dda79b7511610064578063dda79b751461062e578063e63ab1e91461064e578063f340fa0114610682578063f45346dc1461069557600080fd5b8063ae7a3a6f146105ae578063b8969bd4146105ce578063c0c53b8b146105ee578063d547741f1461060e57600080fd5b806391d14854116100d157806391d14854146104b7578063a217fddf1461051c578063a783c78914610531578063ad3cb1cc1461056557600080fd5b80635c975abb146104175780635d62c8601461044e5780638456cb59146104825780638c6f037f1461049757600080fd5b806335c018db1161017a5780635131ab59116101495780635131ab59146103a257806352d1902d146103c257806357bec62f146103d75780635b112591146103f757600080fd5b806335c018db1461034757806336568abe1461035a5780633f4ba83a1461037a5780634f1ef2861461038f57600080fd5b806321e093b1116101b657806321e093b11461027f578063248a9ca3146102b757806329c59b5d146103145780632f2ff15d1461032757600080fd5b806301ffc9a7146101e857806310188aef1461021d5780631b8b921d1461023f5780631cff79cd1461025f575b600080fd5b3480156101f457600080fd5b50610208610203366004612cf1565b6106b5565b60405190151581526020015b60405180910390f35b34801561022957600080fd5b5061023d610238366004612d4f565b61074e565b005b34801561024b57600080fd5b5061023d61025a366004612db3565b610842565b61027261026d366004612db3565b6108cd565b6040516102149190612e74565b34801561028b57600080fd5b5060035461029f906001600160a01b031681565b6040516001600160a01b039091168152602001610214565b3480156102c357600080fd5b506103066102d2366004612e87565b60009081527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052604090206001015490565b604051908152602001610214565b61023d610322366004612db3565b6109d0565b34801561033357600080fd5b5061023d610342366004612ea0565b610b63565b61023d610355366004612db3565b610bad565b34801561036657600080fd5b5061023d610375366004612ea0565b610d9c565b34801561038657600080fd5b5061023d610de8565b61023d61039d366004612efb565b610e1d565b3480156103ae57600080fd5b5061023d6103bd366004613002565b610e3c565b3480156103ce57600080fd5b50610306611155565b3480156103e357600080fd5b5060025461029f906001600160a01b031681565b34801561040357600080fd5b5060015461029f906001600160a01b031681565b34801561042357600080fd5b507fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff16610208565b34801561045a57600080fd5b506103067f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b981565b34801561048e57600080fd5b5061023d611184565b3480156104a357600080fd5b5061023d6104b2366004613071565b6111b6565b3480156104c357600080fd5b506102086104d2366004612ea0565b60009182527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408084206001600160a01b0393909316845291905290205460ff1690565b34801561052857600080fd5b50610306600081565b34801561053d57600080fd5b506103067f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb81565b34801561057157600080fd5b506102726040518060400160405280600581526020017f352e302e3000000000000000000000000000000000000000000000000000000081525081565b3480156105ba57600080fd5b5061023d6105c9366004612d4f565b6112cc565b3480156105da57600080fd5b5061023d6105e9366004613002565b6113c0565b3480156105fa57600080fd5b5061023d6106093660046130c3565b611579565b34801561061a57600080fd5b5061023d610629366004612ea0565b61182e565b34801561063a57600080fd5b5060005461029f906001600160a01b031681565b34801561065a57600080fd5b506103067f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b61023d610690366004612d4f565b611872565b3480156106a157600080fd5b5061023d6106b0366004613106565b611a07565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061074857507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b600061075981611b02565b6001600160a01b038216610799576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002546001600160a01b0316156107dc576040517f0c8dc01600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6108067f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b983611b0c565b5050600280547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b61084a611bf9565b610852611c57565b826001600160a01b0316336001600160a01b03167f2a21062ee9199c2e205622999eeb7c3da73153674f36a0acd3f74fa6af67bde38484604051610897929190613182565b60405180910390a36108c860017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b505050565b60607f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb6108f981611b02565b610901611bf9565b610909611c57565b6001600160a01b038516610949576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610956868686611cfe565b9050856001600160a01b03167fcaf938de11c367272220bfd1d2baa99ca46665e7bc4d85f00adb51b90fe1fa9f3487876040516109959392919061319e565b60405180910390a291506109c860017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b509392505050565b6109d8611bf9565b6109e0611c57565b34600003610a1a576040517f7671265e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038316610a5a576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546040516000916001600160a01b03169034908381818185875af1925050503d8060008114610aa7576040519150601f19603f3d011682016040523d82523d6000602084013e610aac565b606091505b5050905080610ae7576040517f79cacff100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b836001600160a01b0316336001600160a01b03167f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a43460008787604051610b3194939291906131b8565b60405180910390a3506108c860017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020526040902060010154610b9d81611b02565b610ba78383611b0c565b50505050565b7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb610bd781611b02565b610bdf611bf9565b610be7611c57565b6001600160a01b038416610c27576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000846001600160a01b03163460405160006040518083038185875af1925050503d8060008114610c74576040519150601f19603f3d011682016040523d82523d6000602084013e610c79565b606091505b5050905080610cb4576040517facfdb44400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f8fcaa0b50000000000000000000000000000000000000000000000000000000081526001600160a01b03861690638fcaa0b590610cfb9087908790600401613182565b600060405180830381600087803b158015610d1557600080fd5b505af1158015610d29573d6000803e3d6000fd5b50505050846001600160a01b03167fd5d7616b1678354a0dea9d7e57e6a090bff5babe9f8d6381fdbad16e89ba311c348686604051610d6a9392919061319e565b60405180910390a250610ba760017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b6001600160a01b0381163314610dde576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6108c88282611da7565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610e1281611b02565b610e1a611e6b565b50565b610e25611efb565b610e2e82611fcb565b610e388282611fd6565b5050565b7f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b9610e6681611b02565b610e6e611bf9565b610e76611c57565b83600003610eb0576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038516610ef0576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610efa86866120fa565b610f30576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b0386811660048301526024820186905287169063095ea7b3906044016020604051808303816000875af1158015610f98573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fbc91906131e1565b610ff2576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610ffd858484611cfe565b5061100886866120fa565b61103e576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201526000906001600160a01b038816906370a0823190602401602060405180830381865afa15801561109e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110c29190613203565b905080156110d4576110d4878261218a565b856001600160a01b0316876001600160a01b03167f29c40793bffd84cb810179f15d1ceec72bc7f0785514c668ba36645cf99b738287878760405161111b9392919061319e565b60405180910390a35061114d60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b505050505050565b600061115f6123b0565b507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc90565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a6111ae81611b02565b610e1a612412565b6111be611bf9565b6111c6611c57565b83600003611200576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038516611240576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61124b33848661248b565b846001600160a01b0316336001600160a01b03167f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a48686868660405161129494939291906131b8565b60405180910390a36112c560017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b5050505050565b60006112d781611b02565b6001600160a01b038216611317576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000546001600160a01b03161561135a576040517fb337f37800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6113847f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b983611b0c565b5050600080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b7f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b96113ea81611b02565b6113f2611bf9565b6113fa611c57565b83600003611434576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038516611474576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6114886001600160a01b03871686866126d1565b6040517f8fcaa0b50000000000000000000000000000000000000000000000000000000081526001600160a01b03861690638fcaa0b5906114cf9086908690600401613182565b600060405180830381600087803b1580156114e957600080fd5b505af11580156114fd573d6000803e3d6000fd5b50505050846001600160a01b0316866001600160a01b03167f723fc7be2448075379e4fdf1e6bf5fead954d2668d2da05dcb44ccfec4beeda78686866040516115489392919061319e565b60405180910390a361114d60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156115c45750825b905060008267ffffffffffffffff1660011480156115e15750303b155b9050811580156115ef575080155b15611626576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84547fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000016600117855583156116875784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff16680100000000000000001785555b6001600160a01b03881615806116a457506001600160a01b038716155b156116db576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6116e3612745565b6116eb61274d565b6116f3612745565b6116fb61275d565b611706600087611b0c565b506117317f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a87611b0c565b50600180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b038a1617905561178f7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb89611b0c565b50600380547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03891617905583156118245784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b5050505050505050565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052604090206001015461186881611b02565b610ba78383611da7565b61187a611bf9565b611882611c57565b346000036118bc576040517f7671265e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b0381166118fc576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546040516000916001600160a01b03169034908381818185875af1925050503d8060008114611949576040519150601f19603f3d011682016040523d82523d6000602084013e61194e565b606091505b5050905080611989576040517f79cacff100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60408051348152600060208201819052606082840181905282015290516001600160a01b0384169133917f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a49181900360800190a350610e1a60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b611a0f611bf9565b611a17611c57565b81600003611a51576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038316611a91576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611a9c33828461248b565b826001600160a01b0316336001600160a01b03167f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a484846040516108979291909182526001600160a01b0316602082015260606040820181905260009082015260800190565b610e1a813361276d565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff16611bef576000848152602082815260408083206001600160a01b0387168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055611ba53390565b6001600160a01b0316836001600160a01b0316857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a46001915050610748565b6000915050610748565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff1615611c55576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0080547ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01611cd2576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60029055565b60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b6060600080856001600160a01b0316348686604051611d1e92919061321c565b60006040518083038185875af1925050503d8060008114611d5b576040519150601f19603f3d011682016040523d82523d6000602084013e611d60565b606091505b509150915081611d9c576040517facfdb44400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b9150505b9392505050565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff1615611bef576000848152602082815260408083206001600160a01b038716808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339287917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a46001915050610748565b611e736127fa565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001681557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a150565b306001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161480611f9457507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316611f887f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b6001600160a01b031614155b15611c55576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610e3881611b02565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa92505050801561204e575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820190925261204b91810190613203565b60015b612094576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b03831660048201526024015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc81146120f0576040517faa1d49a40000000000000000000000000000000000000000000000000000000081526004810182905260240161208b565b6108c88383612855565b6040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b038281166004830152600060248301819052919084169063095ea7b3906044016020604051808303816000875af1158015612166573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611da091906131e1565b6003546001600160a01b03908116908316036122d9576002546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152602481018390529083169063095ea7b3906044016020604051808303816000875af115801561220c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061223091906131e1565b612266576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002546040517f743e0c9b000000000000000000000000000000000000000000000000000000008152600481018390526001600160a01b039091169063743e0c9b90602401600060405180830381600087803b1580156122c557600080fd5b505af115801561114d573d6000803e3d6000fd5b6000546040517fd936547e0000000000000000000000000000000000000000000000000000000081526001600160a01b0384811660048301529091169063d936547e90602401602060405180830381865afa15801561233c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061236091906131e1565b612396576040517fac2175f100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600054610e38906001600160a01b038481169116836126d1565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614611c55576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61241a611bf9565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011781557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25833611edd565b6003546001600160a01b03908116908316036125f8576124b66001600160a01b0383168430846128ab565b6002546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152602481018390529083169063095ea7b3906044016020604051808303816000875af1158015612522573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061254691906131e1565b61257c576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002546040517f743e0c9b000000000000000000000000000000000000000000000000000000008152600481018390526001600160a01b039091169063743e0c9b90602401600060405180830381600087803b1580156125db57600080fd5b505af11580156125ef573d6000803e3d6000fd5b50505050505050565b6000546040517fd936547e0000000000000000000000000000000000000000000000000000000081526001600160a01b0384811660048301529091169063d936547e90602401602060405180830381865afa15801561265b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061267f91906131e1565b6126b5576040517fac2175f100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000546108c8906001600160a01b0384811691869116846128ab565b6040516001600160a01b038381166024830152604482018390526108c891859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506128e4565b611c55612960565b612755612960565b611c556129c7565b612765612960565b611c556129cf565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408083206001600160a01b038516845290915290205460ff16610e38576040517fe2517d3f0000000000000000000000000000000000000000000000000000000081526001600160a01b03821660048201526024810183905260440161208b565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff16611c55576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61285e82612a20565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a28051156128a3576108c88282612ac8565b610e38612b3e565b6040516001600160a01b038481166024830152838116604483015260648201839052610ba79186918216906323b872dd906084016126fe565b60006128f96001600160a01b03841683612b76565b9050805160001415801561291e57508080602001905181019061291c91906131e1565b155b156108c8576040517f5274afe70000000000000000000000000000000000000000000000000000000081526001600160a01b038416600482015260240161208b565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff16611c55576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611cd8612960565b6129d7612960565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055565b806001600160a01b03163b600003612a6f576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b038216600482015260240161208b565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6060600080846001600160a01b031684604051612ae5919061322c565b600060405180830381855af49150503d8060008114612b20576040519150601f19603f3d011682016040523d82523d6000602084013e612b25565b606091505b5091509150612b35858383612b84565b95945050505050565b3415611c55576040517fb398979f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6060611da083836000612bf9565b606082612b9957612b9482612caf565b611da0565b8151158015612bb057506001600160a01b0384163b155b15612bf2576040517f9996b3150000000000000000000000000000000000000000000000000000000081526001600160a01b038516600482015260240161208b565b5080611da0565b606081471015612c37576040517fcd78605900000000000000000000000000000000000000000000000000000000815230600482015260240161208b565b600080856001600160a01b03168486604051612c53919061322c565b60006040518083038185875af1925050503d8060008114612c90576040519150601f19603f3d011682016040523d82523d6000602084013e612c95565b606091505b5091509150612ca5868383612b84565b9695505050505050565b805115612cbf5780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060208284031215612d0357600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114611da057600080fd5b80356001600160a01b0381168114612d4a57600080fd5b919050565b600060208284031215612d6157600080fd5b611da082612d33565b60008083601f840112612d7c57600080fd5b50813567ffffffffffffffff811115612d9457600080fd5b602083019150836020828501011115612dac57600080fd5b9250929050565b600080600060408486031215612dc857600080fd5b612dd184612d33565b9250602084013567ffffffffffffffff811115612ded57600080fd5b612df986828701612d6a565b9497909650939450505050565b60005b83811015612e21578181015183820152602001612e09565b50506000910152565b60008151808452612e42816020860160208601612e06565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000611da06020830184612e2a565b600060208284031215612e9957600080fd5b5035919050565b60008060408385031215612eb357600080fd5b82359150612ec360208401612d33565b90509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60008060408385031215612f0e57600080fd5b612f1783612d33565b9150602083013567ffffffffffffffff811115612f3357600080fd5b8301601f81018513612f4457600080fd5b803567ffffffffffffffff811115612f5e57612f5e612ecc565b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8501160116810181811067ffffffffffffffff82111715612fca57612fca612ecc565b604052818152828201602001871015612fe257600080fd5b816020840160208301376000602083830101528093505050509250929050565b60008060008060006080868803121561301a57600080fd5b61302386612d33565b945061303160208701612d33565b935060408601359250606086013567ffffffffffffffff81111561305457600080fd5b61306088828901612d6a565b969995985093965092949392505050565b60008060008060006080868803121561308957600080fd5b61309286612d33565b9450602086013593506130a760408701612d33565b9250606086013567ffffffffffffffff81111561305457600080fd5b6000806000606084860312156130d857600080fd5b6130e184612d33565b92506130ef60208501612d33565b91506130fd60408501612d33565b90509250925092565b60008060006060848603121561311b57600080fd5b61312484612d33565b9250602084013591506130fd60408501612d33565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b602081526000613196602083018486613139565b949350505050565b838152604060208201526000612b35604083018486613139565b8481526001600160a01b0384166020820152606060408201526000612ca5606083018486613139565b6000602082840312156131f357600080fd5b81518015158114611da057600080fd5b60006020828403121561321557600080fd5b5051919050565b8183823760009101908152919050565b6000825161323e818460208701612e06565b919091019291505056fea2646970667358221220e0ac1d5f7d91ba60c2192455b07ceb7579f97f17519b91ea503f0986c351802164736f6c634300081a0033"; + "0x60a06040523060805234801561001457600080fd5b5061001d610022565b6100d4565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100725760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146100d15780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b6080516132be6100fd60003960008181611f4601528181611f6f01526123fb01526132be6000f3fe6080604052600436106101e35760003560e01c80635c975abb11610102578063ae7a3a6f11610095578063dda79b7511610064578063dda79b751461062e578063e63ab1e91461064e578063f340fa0114610682578063f45346dc1461069557600080fd5b8063ae7a3a6f146105ae578063b8969bd4146105ce578063c0c53b8b146105ee578063d547741f1461060e57600080fd5b806391d14854116100d157806391d14854146104b7578063a217fddf1461051c578063a783c78914610531578063ad3cb1cc1461056557600080fd5b80635c975abb146104175780635d62c8601461044e5780638456cb59146104825780638c6f037f1461049757600080fd5b806335c018db1161017a5780635131ab59116101495780635131ab59146103a257806352d1902d146103c257806357bec62f146103d75780635b112591146103f757600080fd5b806335c018db1461034757806336568abe1461035a5780633f4ba83a1461037a5780634f1ef2861461038f57600080fd5b806321e093b1116101b657806321e093b11461027f578063248a9ca3146102b757806329c59b5d146103145780632f2ff15d1461032757600080fd5b806301ffc9a7146101e857806310188aef1461021d5780631b8b921d1461023f5780631cff79cd1461025f575b600080fd5b3480156101f457600080fd5b50610208610203366004612d31565b6106b5565b60405190151581526020015b60405180910390f35b34801561022957600080fd5b5061023d610238366004612d8f565b61074e565b005b34801561024b57600080fd5b5061023d61025a366004612df3565b610842565b61027261026d366004612df3565b61090d565b6040516102149190612eb4565b34801561028b57600080fd5b5060035461029f906001600160a01b031681565b6040516001600160a01b039091168152602001610214565b3480156102c357600080fd5b506103066102d2366004612ec7565b60009081527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052604090206001015490565b604051908152602001610214565b61023d610322366004612df3565b610a10565b34801561033357600080fd5b5061023d610342366004612ee0565b610ba3565b61023d610355366004612df3565b610bed565b34801561036657600080fd5b5061023d610375366004612ee0565b610ddc565b34801561038657600080fd5b5061023d610e28565b61023d61039d366004612f3b565b610e5d565b3480156103ae57600080fd5b5061023d6103bd366004613042565b610e7c565b3480156103ce57600080fd5b50610306611195565b3480156103e357600080fd5b5060025461029f906001600160a01b031681565b34801561040357600080fd5b5060015461029f906001600160a01b031681565b34801561042357600080fd5b507fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff16610208565b34801561045a57600080fd5b506103067f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b981565b34801561048e57600080fd5b5061023d6111c4565b3480156104a357600080fd5b5061023d6104b23660046130b1565b6111f6565b3480156104c357600080fd5b506102086104d2366004612ee0565b60009182527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408084206001600160a01b0393909316845291905290205460ff1690565b34801561052857600080fd5b50610306600081565b34801561053d57600080fd5b506103067f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb81565b34801561057157600080fd5b506102726040518060400160405280600581526020017f352e302e3000000000000000000000000000000000000000000000000000000081525081565b3480156105ba57600080fd5b5061023d6105c9366004612d8f565b61130c565b3480156105da57600080fd5b5061023d6105e9366004613042565b611400565b3480156105fa57600080fd5b5061023d610609366004613103565b6115b9565b34801561061a57600080fd5b5061023d610629366004612ee0565b61186e565b34801561063a57600080fd5b5060005461029f906001600160a01b031681565b34801561065a57600080fd5b506103067f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b61023d610690366004612d8f565b6118b2565b3480156106a157600080fd5b5061023d6106b0366004613146565b611a47565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061074857507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b600061075981611b42565b6001600160a01b038216610799576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002546001600160a01b0316156107dc576040517f0c8dc01600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6108067f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b983611b4c565b5050600280547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b61084a611c39565b610852611c97565b6001600160a01b038316610892576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b826001600160a01b0316336001600160a01b03167f2a21062ee9199c2e205622999eeb7c3da73153674f36a0acd3f74fa6af67bde384846040516108d79291906131c2565b60405180910390a361090860017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b505050565b60607f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb61093981611b42565b610941611c39565b610949611c97565b6001600160a01b038516610989576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610996868686611d3e565b9050856001600160a01b03167fcaf938de11c367272220bfd1d2baa99ca46665e7bc4d85f00adb51b90fe1fa9f3487876040516109d5939291906131de565b60405180910390a29150610a0860017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b509392505050565b610a18611c39565b610a20611c97565b34600003610a5a576040517f7671265e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038316610a9a576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546040516000916001600160a01b03169034908381818185875af1925050503d8060008114610ae7576040519150601f19603f3d011682016040523d82523d6000602084013e610aec565b606091505b5050905080610b27576040517f79cacff100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b836001600160a01b0316336001600160a01b03167f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a43460008787604051610b7194939291906131f8565b60405180910390a35061090860017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020526040902060010154610bdd81611b42565b610be78383611b4c565b50505050565b7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb610c1781611b42565b610c1f611c39565b610c27611c97565b6001600160a01b038416610c67576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000846001600160a01b03163460405160006040518083038185875af1925050503d8060008114610cb4576040519150601f19603f3d011682016040523d82523d6000602084013e610cb9565b606091505b5050905080610cf4576040517facfdb44400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f8fcaa0b50000000000000000000000000000000000000000000000000000000081526001600160a01b03861690638fcaa0b590610d3b90879087906004016131c2565b600060405180830381600087803b158015610d5557600080fd5b505af1158015610d69573d6000803e3d6000fd5b50505050846001600160a01b03167fd5d7616b1678354a0dea9d7e57e6a090bff5babe9f8d6381fdbad16e89ba311c348686604051610daa939291906131de565b60405180910390a250610be760017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b6001600160a01b0381163314610e1e576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6109088282611de7565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610e5281611b42565b610e5a611eab565b50565b610e65611f3b565b610e6e8261200b565b610e788282612016565b5050565b7f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b9610ea681611b42565b610eae611c39565b610eb6611c97565b83600003610ef0576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038516610f30576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610f3a868661213a565b610f70576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b0386811660048301526024820186905287169063095ea7b3906044016020604051808303816000875af1158015610fd8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ffc9190613221565b611032576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61103d858484611d3e565b50611048868661213a565b61107e576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201526000906001600160a01b038816906370a0823190602401602060405180830381865afa1580156110de573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111029190613243565b905080156111145761111487826121ca565b856001600160a01b0316876001600160a01b03167f29c40793bffd84cb810179f15d1ceec72bc7f0785514c668ba36645cf99b738287878760405161115b939291906131de565b60405180910390a35061118d60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b505050505050565b600061119f6123f0565b507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc90565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a6111ee81611b42565b610e5a612452565b6111fe611c39565b611206611c97565b83600003611240576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038516611280576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61128b3384866124cb565b846001600160a01b0316336001600160a01b03167f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a4868686866040516112d494939291906131f8565b60405180910390a361130560017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b5050505050565b600061131781611b42565b6001600160a01b038216611357576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000546001600160a01b03161561139a576040517fb337f37800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6113c47f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b983611b4c565b5050600080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b7f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b961142a81611b42565b611432611c39565b61143a611c97565b83600003611474576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b0385166114b4576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6114c86001600160a01b0387168686612711565b6040517f8fcaa0b50000000000000000000000000000000000000000000000000000000081526001600160a01b03861690638fcaa0b59061150f90869086906004016131c2565b600060405180830381600087803b15801561152957600080fd5b505af115801561153d573d6000803e3d6000fd5b50505050846001600160a01b0316866001600160a01b03167f723fc7be2448075379e4fdf1e6bf5fead954d2668d2da05dcb44ccfec4beeda7868686604051611588939291906131de565b60405180910390a361118d60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156116045750825b905060008267ffffffffffffffff1660011480156116215750303b155b90508115801561162f575080155b15611666576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84547fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000016600117855583156116c75784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff16680100000000000000001785555b6001600160a01b03881615806116e457506001600160a01b038716155b1561171b576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611723612785565b61172b61278d565b611733612785565b61173b61279d565b611746600087611b4c565b506117717f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a87611b4c565b50600180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b038a161790556117cf7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb89611b4c565b50600380547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03891617905583156118645784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b5050505050505050565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b62680060205260409020600101546118a881611b42565b610be78383611de7565b6118ba611c39565b6118c2611c97565b346000036118fc576040517f7671265e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03811661193c576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546040516000916001600160a01b03169034908381818185875af1925050503d8060008114611989576040519150601f19603f3d011682016040523d82523d6000602084013e61198e565b606091505b50509050806119c9576040517f79cacff100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60408051348152600060208201819052606082840181905282015290516001600160a01b0384169133917f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a49181900360800190a350610e5a60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b611a4f611c39565b611a57611c97565b81600003611a91576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038316611ad1576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611adc3382846124cb565b826001600160a01b0316336001600160a01b03167f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a484846040516108d79291909182526001600160a01b0316602082015260606040820181905260009082015260800190565b610e5a81336127ad565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff16611c2f576000848152602082815260408083206001600160a01b0387168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055611be53390565b6001600160a01b0316836001600160a01b0316857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a46001915050610748565b6000915050610748565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff1615611c95576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0080547ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01611d12576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60029055565b60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b6060600080856001600160a01b0316348686604051611d5e92919061325c565b60006040518083038185875af1925050503d8060008114611d9b576040519150601f19603f3d011682016040523d82523d6000602084013e611da0565b606091505b509150915081611ddc576040517facfdb44400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b9150505b9392505050565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff1615611c2f576000848152602082815260408083206001600160a01b038716808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339287917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a46001915050610748565b611eb361283a565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001681557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a150565b306001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161480611fd457507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316611fc87f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b6001600160a01b031614155b15611c95576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610e7881611b42565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa92505050801561208e575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820190925261208b91810190613243565b60015b6120d4576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b03831660048201526024015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8114612130576040517faa1d49a4000000000000000000000000000000000000000000000000000000008152600481018290526024016120cb565b6109088383612895565b6040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b038281166004830152600060248301819052919084169063095ea7b3906044016020604051808303816000875af11580156121a6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611de09190613221565b6003546001600160a01b0390811690831603612319576002546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152602481018390529083169063095ea7b3906044016020604051808303816000875af115801561224c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122709190613221565b6122a6576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002546040517f743e0c9b000000000000000000000000000000000000000000000000000000008152600481018390526001600160a01b039091169063743e0c9b90602401600060405180830381600087803b15801561230557600080fd5b505af115801561118d573d6000803e3d6000fd5b6000546040517fd936547e0000000000000000000000000000000000000000000000000000000081526001600160a01b0384811660048301529091169063d936547e90602401602060405180830381865afa15801561237c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123a09190613221565b6123d6576040517fac2175f100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600054610e78906001600160a01b03848116911683612711565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614611c95576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61245a611c39565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011781557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25833611f1d565b6003546001600160a01b0390811690831603612638576124f66001600160a01b0383168430846128eb565b6002546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152602481018390529083169063095ea7b3906044016020604051808303816000875af1158015612562573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125869190613221565b6125bc576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002546040517f743e0c9b000000000000000000000000000000000000000000000000000000008152600481018390526001600160a01b039091169063743e0c9b90602401600060405180830381600087803b15801561261b57600080fd5b505af115801561262f573d6000803e3d6000fd5b50505050505050565b6000546040517fd936547e0000000000000000000000000000000000000000000000000000000081526001600160a01b0384811660048301529091169063d936547e90602401602060405180830381865afa15801561269b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126bf9190613221565b6126f5576040517fac2175f100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600054610908906001600160a01b0384811691869116846128eb565b6040516001600160a01b0383811660248301526044820183905261090891859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050612924565b611c956129a0565b6127956129a0565b611c95612a07565b6127a56129a0565b611c95612a0f565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408083206001600160a01b038516845290915290205460ff16610e78576040517fe2517d3f0000000000000000000000000000000000000000000000000000000081526001600160a01b0382166004820152602481018390526044016120cb565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff16611c95576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61289e82612a60565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a28051156128e3576109088282612b08565b610e78612b7e565b6040516001600160a01b038481166024830152838116604483015260648201839052610be79186918216906323b872dd9060840161273e565b60006129396001600160a01b03841683612bb6565b9050805160001415801561295e57508080602001905181019061295c9190613221565b155b15610908576040517f5274afe70000000000000000000000000000000000000000000000000000000081526001600160a01b03841660048201526024016120cb565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff16611c95576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611d186129a0565b612a176129a0565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055565b806001600160a01b03163b600003612aaf576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b03821660048201526024016120cb565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6060600080846001600160a01b031684604051612b25919061326c565b600060405180830381855af49150503d8060008114612b60576040519150601f19603f3d011682016040523d82523d6000602084013e612b65565b606091505b5091509150612b75858383612bc4565b95945050505050565b3415611c95576040517fb398979f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6060611de083836000612c39565b606082612bd957612bd482612cef565b611de0565b8151158015612bf057506001600160a01b0384163b155b15612c32576040517f9996b3150000000000000000000000000000000000000000000000000000000081526001600160a01b03851660048201526024016120cb565b5080611de0565b606081471015612c77576040517fcd7860590000000000000000000000000000000000000000000000000000000081523060048201526024016120cb565b600080856001600160a01b03168486604051612c93919061326c565b60006040518083038185875af1925050503d8060008114612cd0576040519150601f19603f3d011682016040523d82523d6000602084013e612cd5565b606091505b5091509150612ce5868383612bc4565b9695505050505050565b805115612cff5780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060208284031215612d4357600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114611de057600080fd5b80356001600160a01b0381168114612d8a57600080fd5b919050565b600060208284031215612da157600080fd5b611de082612d73565b60008083601f840112612dbc57600080fd5b50813567ffffffffffffffff811115612dd457600080fd5b602083019150836020828501011115612dec57600080fd5b9250929050565b600080600060408486031215612e0857600080fd5b612e1184612d73565b9250602084013567ffffffffffffffff811115612e2d57600080fd5b612e3986828701612daa565b9497909650939450505050565b60005b83811015612e61578181015183820152602001612e49565b50506000910152565b60008151808452612e82816020860160208601612e46565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000611de06020830184612e6a565b600060208284031215612ed957600080fd5b5035919050565b60008060408385031215612ef357600080fd5b82359150612f0360208401612d73565b90509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60008060408385031215612f4e57600080fd5b612f5783612d73565b9150602083013567ffffffffffffffff811115612f7357600080fd5b8301601f81018513612f8457600080fd5b803567ffffffffffffffff811115612f9e57612f9e612f0c565b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8501160116810181811067ffffffffffffffff8211171561300a5761300a612f0c565b60405281815282820160200187101561302257600080fd5b816020840160208301376000602083830101528093505050509250929050565b60008060008060006080868803121561305a57600080fd5b61306386612d73565b945061307160208701612d73565b935060408601359250606086013567ffffffffffffffff81111561309457600080fd5b6130a088828901612daa565b969995985093965092949392505050565b6000806000806000608086880312156130c957600080fd5b6130d286612d73565b9450602086013593506130e760408701612d73565b9250606086013567ffffffffffffffff81111561309457600080fd5b60008060006060848603121561311857600080fd5b61312184612d73565b925061312f60208501612d73565b915061313d60408501612d73565b90509250925092565b60008060006060848603121561315b57600080fd5b61316484612d73565b92506020840135915061313d60408501612d73565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b6020815260006131d6602083018486613179565b949350505050565b838152604060208201526000612b75604083018486613179565b8481526001600160a01b0384166020820152606060408201526000612ce5606083018486613179565b60006020828403121561323357600080fd5b81518015158114611de057600080fd5b60006020828403121561325557600080fd5b5051919050565b8183823760009101908152919050565b6000825161327e818460208701612e46565b919091019291505056fea26469706673582212207502c72fde83b46f559fca91354376f4a808a2aefc289286688b1a9d18fa9f3f64736f6c634300081a0033"; type GatewayEVMConstructorParams = | [signer?: Signer] diff --git a/v2/typechain-types/factories/GatewayZEVM__factory.ts b/v2/typechain-types/factories/GatewayZEVM__factory.ts index fb0c27d7..1a840e20 100644 --- a/v2/typechain-types/factories/GatewayZEVM__factory.ts +++ b/v2/typechain-types/factories/GatewayZEVM__factory.ts @@ -1041,7 +1041,7 @@ const _abi = [ ] as const; const _bytecode = - "0x60a06040523060805234801561001457600080fd5b5061001d610022565b6100d4565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100725760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146100d15780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b6080516132346100fd600039600081816123650152818161238e015261254601526132346000f3fe6080604052600436106101bb5760003560e01c80635af65967116100ec578063a217fddf1161008a578063c39aca3711610064578063c39aca3714610600578063d547741f14610620578063e63ab1e914610640578063f45346dc1461067457600080fd5b8063a217fddf14610575578063ad3cb1cc1461058a578063bcf7f32b146105e057600080fd5b80637993c1e0116100c65780637993c1e0146104bb57806380bd3d03146104db5780638456cb59146104fb57806391d148541461051057600080fd5b80635af65967146104445780635c975abb146104645780635d40e1781461049b57600080fd5b806336568abe11610159578063441a3e7011610133578063441a3e70146103dc578063485cc955146103fc5780634f1ef2861461041c57806352d1902d1461042f57600080fd5b806336568abe1461037f5780633ce4a5bc1461039f5780633f4ba83a146103c757600080fd5b806321e093b11161019557806321e093b1146102aa578063248a9ca3146102e25780632f2ff15d1461033f578063309f50041461035f57600080fd5b806301ffc9a714610235578063135390f91461026a57806321501a951461028a57600080fd5b36610230576101c8610694565b6000546001600160a01b031633148015906101f757503373735b14bb79463307aacbed86daf3322b1e6226ab14155b1561022e576040517f229930b200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b005b600080fd5b34801561024157600080fd5b50610255610250366004612a24565b6106f2565b60405190151581526020015b60405180910390f35b34801561027657600080fd5b5061022e610285366004612b3a565b61078b565b34801561029657600080fd5b5061022e6102a5366004612bf6565b6108f9565b3480156102b657600080fd5b506000546102ca906001600160a01b031681565b6040516001600160a01b039091168152602001610261565b3480156102ee57600080fd5b506103316102fd366004612c82565b60009081527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052604090206001015490565b604051908152602001610261565b34801561034b57600080fd5b5061022e61035a366004612c9b565b610ac6565b34801561036b57600080fd5b5061022e61037a366004612ccb565b610b10565b34801561038b57600080fd5b5061022e61039a366004612c9b565b610c7a565b3480156103ab57600080fd5b506102ca73735b14bb79463307aacbed86daf3322b1e6226ab81565b3480156103d357600080fd5b5061022e610cc6565b3480156103e857600080fd5b5061022e6103f7366004612d69565b610cfb565b34801561040857600080fd5b5061022e610417366004612d8b565b610e18565b61022e61042a366004612db9565b61106e565b34801561043b57600080fd5b50610331611089565b34801561045057600080fd5b5061022e61045f366004612ccb565b6110b8565b34801561047057600080fd5b507fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff16610255565b3480156104a757600080fd5b5061022e6104b6366004612e09565b6112c7565b3480156104c757600080fd5b5061022e6104d6366004612e7e565b611381565b3480156104e757600080fd5b5061022e6104f6366004612eb9565b6114f5565b34801561050757600080fd5b5061022e6115e1565b34801561051c57600080fd5b5061025561052b366004612c9b565b60009182527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408084206001600160a01b0393909316845291905290205460ff1690565b34801561058157600080fd5b50610331600081565b34801561059657600080fd5b506105d36040518060400160405280600581526020017f352e302e3000000000000000000000000000000000000000000000000000000081525081565b6040516102619190612f44565b3480156105ec57600080fd5b5061022e6105fb366004612ccb565b611613565b34801561060c57600080fd5b5061022e61061b366004612ccb565b611743565b34801561062c57600080fd5b5061022e61063b366004612c9b565b611952565b34801561064c57600080fd5b506103317f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b34801561068057600080fd5b5061022e61068f366004612f57565b611996565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff16156106f0576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061078557507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b610793611ba5565b61079b610694565b82516000036107d6576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b81600003610810576040517f5d67094f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061081c8383611c26565b90506000336001600160a01b03167fde19dbe881cc0aeeb6e73ce19ac7b5ca695e6be8a076e3eb42292005a7fec1b586858786886001600160a01b0316634d8943bb6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561088d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108b19190612f8e565b6040516108c2959493929190612fa7565b60405180910390a3506108f460017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610946576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61094e610694565b6001600160a01b03831661098e576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b836000036109c8576040517f19c08f4900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03831673735b14bb79463307aacbed86daf3322b1e6226ab14806109fb57506001600160a01b03831630145b15610a32576040517f82d5d76a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610a3c8484611f19565b6000546040517fde43156e0000000000000000000000000000000000000000000000000000000081526001600160a01b038086169263de43156e92610a8d928a9216908990889088906004016130c6565b600060405180830381600087803b158015610aa757600080fd5b505af1158015610abb573d6000803e3d6000fd5b505050505050505050565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020526040902060010154610b00816120e7565b610b0a83836120f1565b50505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610b5d576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610b65610694565b6001600160a01b0385161580610b8257506001600160a01b038316155b15610bb9576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b83600003610bf3576040517f5d67094f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f69582bee0000000000000000000000000000000000000000000000000000000081526001600160a01b038416906369582bee90610c4090899089908990889088906004016130c6565b600060405180830381600087803b158015610c5a57600080fd5b505af1158015610c6e573d6000803e3d6000fd5b50505050505050505050565b6001600160a01b0381163314610cbc576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6108f482826121de565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610cf0816120e7565b610cf86122a2565b50565b610d03611ba5565b610d0b610694565b81600003610d45576040517f19c08f4900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610d638273735b14bb79463307aacbed86daf3322b1e6226ab611f19565b6040517f735b14bb79463307aacbed86daf3322b1e6226ab0000000000000000000000006020820152819033907fde19dbe881cc0aeeb6e73ce19ac7b5ca695e6be8a076e3eb42292005a7fec1b59060340160408051601f198184030181529082905260008054610de3936001600160a01b039091169189918190612fa7565b60405180910390a3610e1460017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b5050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff16600081158015610e635750825b905060008267ffffffffffffffff166001148015610e805750303b155b905081158015610e8e575080155b15610ec5576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001660011785558315610f265784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff16680100000000000000001785555b6001600160a01b0387161580610f4357506001600160a01b038616155b15610f7a576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610f82612332565b610f8a612332565b610f9261233a565b610f9a61234a565b610fa56000876120f1565b50610fd07f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a876120f1565b50600080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03891617905583156110655784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50505050505050565b61107661235a565b61107f8261242a565b610e148282612435565b600061109361253b565b507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc90565b3373735b14bb79463307aacbed86daf3322b1e6226ab14611105576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61110d610694565b6001600160a01b038516158061112a57506001600160a01b038316155b15611161576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8360000361119b576040517f5d67094f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03831673735b14bb79463307aacbed86daf3322b1e6226ab14806111ce57506001600160a01b03831630145b15611205576040517f82d5d76a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f47e7ef240000000000000000000000000000000000000000000000000000000081526001600160a01b038481166004830152602482018690528616906347e7ef24906044016020604051808303816000875af115801561126d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611291919061310d565b610bf3576040517f47d19fab00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6112cf611ba5565b6112d7610694565b8351600003611312576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b82336001600160a01b03167f5322ffbbf9261ff1f8138247942d2b03b28717141ef0a0dd080fc4be9c4e78d38685856040516113509392919061312f565b60405180910390a3610b0a60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b611389611ba5565b611391610694565b84516000036113cc576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b83600003611406576040517f5d67094f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006114128585611c26565b90506000336001600160a01b03167fde19dbe881cc0aeeb6e73ce19ac7b5ca695e6be8a076e3eb42292005a7fec1b5888789868a6001600160a01b0316634d8943bb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611483573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114a79190612f8e565b8a8a6040516114bc979695949392919061315f565b60405180910390a3506114ee60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b5050505050565b6114fd611ba5565b611505610694565b8360000361153f576040517f19c08f4900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61155d8473735b14bb79463307aacbed86daf3322b1e6226ab611f19565b6040517f735b14bb79463307aacbed86daf3322b1e6226ab0000000000000000000000006020820152839033907fde19dbe881cc0aeeb6e73ce19ac7b5ca695e6be8a076e3eb42292005a7fec1b59060340160408051601f198184030181529082905260008054611350936001600160a01b03909116918b9181908b908b9061315f565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61160b816120e7565b610cf861259d565b3373735b14bb79463307aacbed86daf3322b1e6226ab14611660576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611668610694565b6001600160a01b038516158061168557506001600160a01b038316155b156116bc576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b836000036116f6576040517f5d67094f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517fde43156e0000000000000000000000000000000000000000000000000000000081526001600160a01b0384169063de43156e90610c4090899089908990889088906004016130c6565b3373735b14bb79463307aacbed86daf3322b1e6226ab14611790576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611798610694565b6001600160a01b03851615806117b557506001600160a01b038316155b156117ec576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b83600003611826576040517f5d67094f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03831673735b14bb79463307aacbed86daf3322b1e6226ab148061185957506001600160a01b03831630145b15611890576040517f82d5d76a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f47e7ef240000000000000000000000000000000000000000000000000000000081526001600160a01b038481166004830152602482018690528616906347e7ef24906044016020604051808303816000875af11580156118f8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061191c919061310d565b6116f6576040517f47d19fab00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052604090206001015461198c816120e7565b610b0a83836121de565b3373735b14bb79463307aacbed86daf3322b1e6226ab146119e3576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6119eb610694565b6001600160a01b0383161580611a0857506001600160a01b038116155b15611a3f576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b81600003611a79576040517f5d67094f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03811673735b14bb79463307aacbed86daf3322b1e6226ab1480611aac57506001600160a01b03811630145b15611ae3576040517f82d5d76a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f47e7ef240000000000000000000000000000000000000000000000000000000081526001600160a01b038281166004830152602482018490528416906347e7ef24906044016020604051808303816000875af1158015611b4b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b6f919061310d565b6108f4576040517f47d19fab00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0080547ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01611c20576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60029055565b6000806000836001600160a01b031663d9eeebed6040518163ffffffff1660e01b81526004016040805180830381865afa158015611c68573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c8c91906131b4565b6040517f23b872dd00000000000000000000000000000000000000000000000000000000815233600482015273735b14bb79463307aacbed86daf3322b1e6226ab60248201526044810182905291935091506001600160a01b038316906323b872dd906064016020604051808303816000875af1158015611d11573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d35919061310d565b611d6b576040517f0a7cd6d600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f23b872dd000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018690526001600160a01b038516906323b872dd906064016020604051808303816000875af1158015611dd7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611dfb919061310d565b611e31576040517f4dd9ee8d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f42966c68000000000000000000000000000000000000000000000000000000008152600481018690526001600160a01b038516906342966c68906024016020604051808303816000875af1158015611e91573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611eb5919061310d565b611eeb576040517f2c77e05c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b949350505050565b60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b6000546040517f23b872dd000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018490526001600160a01b03909116906323b872dd906064016020604051808303816000875af1158015611f89573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fad919061310d565b611fe3576040517fc7ffc47b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000546040517f2e1a7d4d000000000000000000000000000000000000000000000000000000008152600481018490526001600160a01b0390911690632e1a7d4d90602401600060405180830381600087803b15801561204257600080fd5b505af1158015612056573d6000803e3d6000fd5b505050506000816001600160a01b03168360405160006040518083038185875af1925050503d80600081146120a7576040519150601f19603f3d011682016040523d82523d6000602084013e6120ac565b606091505b50509050806108f4576040517fc7ffc47b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610cf88133612616565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff166121d4576000848152602082815260408083206001600160a01b0387168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905561218a3390565b6001600160a01b0316836001600160a01b0316857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a46001915050610785565b6000915050610785565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff16156121d4576000848152602082815260408083206001600160a01b038716808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339287917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a46001915050610785565b6122aa6126a3565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001681557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a150565b6106f06126fe565b6123426126fe565b6106f0612765565b6123526126fe565b6106f06127b6565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806123f357507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166123e77f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b6001600160a01b031614155b156106f0576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610e14816120e7565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa92505050801561248f575060408051601f3d908101601f1916820190925261248c91810190612f8e565b60015b6124d5576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b03831660048201526024015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8114612531576040517faa1d49a4000000000000000000000000000000000000000000000000000000008152600481018290526024016124cc565b6108f483836127be565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146106f0576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6125a5610694565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011781557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25833612314565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408083206001600160a01b038516845290915290205460ff16610e14576040517fe2517d3f0000000000000000000000000000000000000000000000000000000081526001600160a01b0382166004820152602481018390526044016124cc565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff166106f0576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff166106f0576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61276d6126fe565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055565b611ef36126fe565b6127c782612814565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a280511561280c576108f482826128bc565b610e14612932565b806001600160a01b03163b600003612863576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b03821660048201526024016124cc565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6060600080846001600160a01b0316846040516128d991906131e2565b600060405180830381855af49150503d8060008114612914576040519150601f19603f3d011682016040523d82523d6000602084013e612919565b606091505b509150915061292985838361296a565b95945050505050565b34156106f0576040517fb398979f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60608261297f5761297a826129e2565b6129db565b815115801561299657506001600160a01b0384163b155b156129d8576040517f9996b3150000000000000000000000000000000000000000000000000000000081526001600160a01b03851660048201526024016124cc565b50805b9392505050565b8051156129f25780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060208284031215612a3657600080fd5b81357fffffffff00000000000000000000000000000000000000000000000000000000811681146129db57600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600082601f830112612aa657600080fd5b813567ffffffffffffffff811115612ac057612ac0612a66565b604051601f19603f601f19601f8501160116810181811067ffffffffffffffff82111715612af057612af0612a66565b604052818152838201602001851015612b0857600080fd5b816020850160208301376000918101602001919091529392505050565b6001600160a01b0381168114610cf857600080fd5b600080600060608486031215612b4f57600080fd5b833567ffffffffffffffff811115612b6657600080fd5b612b7286828701612a95565b935050602084013591506040840135612b8a81612b25565b809150509250925092565b600060608284031215612ba757600080fd5b50919050565b60008083601f840112612bbf57600080fd5b50813567ffffffffffffffff811115612bd757600080fd5b602083019150836020828501011115612bef57600080fd5b9250929050565b600080600080600060808688031215612c0e57600080fd5b853567ffffffffffffffff811115612c2557600080fd5b612c3188828901612b95565b955050602086013593506040860135612c4981612b25565b9250606086013567ffffffffffffffff811115612c6557600080fd5b612c7188828901612bad565b969995985093965092949392505050565b600060208284031215612c9457600080fd5b5035919050565b60008060408385031215612cae57600080fd5b823591506020830135612cc081612b25565b809150509250929050565b60008060008060008060a08789031215612ce457600080fd5b863567ffffffffffffffff811115612cfb57600080fd5b612d0789828a01612b95565b9650506020870135612d1881612b25565b9450604087013593506060870135612d2f81612b25565b9250608087013567ffffffffffffffff811115612d4b57600080fd5b612d5789828a01612bad565b979a9699509497509295939492505050565b60008060408385031215612d7c57600080fd5b50508035926020909101359150565b60008060408385031215612d9e57600080fd5b8235612da981612b25565b91506020830135612cc081612b25565b60008060408385031215612dcc57600080fd5b8235612dd781612b25565b9150602083013567ffffffffffffffff811115612df357600080fd5b612dff85828601612a95565b9150509250929050565b60008060008060608587031215612e1f57600080fd5b843567ffffffffffffffff811115612e3657600080fd5b612e4287828801612a95565b94505060208501359250604085013567ffffffffffffffff811115612e6657600080fd5b612e7287828801612bad565b95989497509550505050565b600080600080600060808688031215612e9657600080fd5b853567ffffffffffffffff811115612ead57600080fd5b612c3188828901612a95565b60008060008060608587031215612ecf57600080fd5b8435935060208501359250604085013567ffffffffffffffff811115612e6657600080fd5b60005b83811015612f0f578181015183820152602001612ef7565b50506000910152565b60008151808452612f30816020860160208601612ef4565b601f01601f19169290920160200192915050565b6020815260006129db6020830184612f18565b600080600060608486031215612f6c57600080fd5b8335612f7781612b25565b9250602084013591506040840135612b8a81612b25565b600060208284031215612fa057600080fd5b5051919050565b60c081526000612fba60c0830188612f18565b6001600160a01b038716602084015285604084015284606084015283608084015282810360a084015260008152602081019150509695505050505050565b818352818160208501375060006020828401015260006020601f19601f840116840101905092915050565b600081357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe183360301811261305757600080fd5b820160208101903567ffffffffffffffff81111561307457600080fd5b80360382131561308357600080fd5b60608552613095606086018284612ff8565b91505060208301356130a681612b25565b6001600160a01b0316602085015260409283013592909301919091525090565b6080815260006130d96080830188613023565b6001600160a01b03871660208401528560408401528281036060840152613101818587612ff8565b98975050505050505050565b60006020828403121561311f57600080fd5b815180151581146129db57600080fd5b6040815260006131426040830186612f18565b8281036020840152613155818587612ff8565b9695505050505050565b60c08152600061317260c083018a612f18565b6001600160a01b038916602084015287604084015286606084015285608084015282810360a08401526131a6818587612ff8565b9a9950505050505050505050565b600080604083850312156131c757600080fd5b82516131d281612b25565b6020939093015192949293505050565b600082516131f4818460208701612ef4565b919091019291505056fea2646970667358221220f26fdc524eee7a992599d556e1d6fe20b53d10feb0e3dcd636a9b9a4bb95fbe864736f6c634300081a0033"; + "0x60a06040523060805234801561001457600080fd5b5061001d610022565b6100d4565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100725760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146100d15780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b60805161331b6100fd6000396000818161235f01528181612388015261255e015261331b6000f3fe6080604052600436106101bb5760003560e01c80635c975abb116100ec578063ad3cb1cc1161008a578063d547741f11610064578063d547741f14610600578063e63ab1e914610620578063f41d774914610654578063f45346dc1461067457600080fd5b8063ad3cb1cc1461056a578063bcf7f32b146105c0578063c39aca37146105e057600080fd5b80637993c1e0116100c65780637993c1e0146104bb5780638456cb59146104db57806391d14854146104f0578063a217fddf1461055557600080fd5b80635c975abb146104445780635d40e1781461047b578063737a9ed61461049b57600080fd5b806336568abe11610159578063485cc95511610133578063485cc955146103dc5780634f1ef286146103fc57806352d1902d1461040f5780635af659671461042457600080fd5b806336568abe1461037f5780633ce4a5bc1461039f5780633f4ba83a146103c757600080fd5b806321e093b11161019557806321e093b1146102aa578063248a9ca3146102e25780632f2ff15d1461033f578063309f50041461035f57600080fd5b806301ffc9a714610235578063135390f91461026a57806321501a951461028a57600080fd5b36610230576101c8610694565b6000546001600160a01b031633148015906101f757503373735b14bb79463307aacbed86daf3322b1e6226ab14155b1561022e576040517f229930b200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b005b600080fd5b34801561024157600080fd5b50610255610250366004612a3c565b6106f2565b60405190151581526020015b60405180910390f35b34801561027657600080fd5b5061022e610285366004612b8e565b61078b565b34801561029657600080fd5b5061022e6102a5366004612c4a565b6108f9565b3480156102b657600080fd5b506000546102ca906001600160a01b031681565b6040516001600160a01b039091168152602001610261565b3480156102ee57600080fd5b506103316102fd366004612cd6565b60009081527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052604090206001015490565b604051908152602001610261565b34801561034b57600080fd5b5061022e61035a366004612cef565b610ac6565b34801561036b57600080fd5b5061022e61037a366004612d1f565b610b10565b34801561038b57600080fd5b5061022e61039a366004612cef565b610c7a565b3480156103ab57600080fd5b506102ca73735b14bb79463307aacbed86daf3322b1e6226ab81565b3480156103d357600080fd5b5061022e610cc6565b3480156103e857600080fd5b5061022e6103f7366004612dbd565b610cfb565b61022e61040a366004612deb565b610f51565b34801561041b57600080fd5b50610331610f70565b34801561043057600080fd5b5061022e61043f366004612d1f565b610f9f565b34801561045057600080fd5b507fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff16610255565b34801561048757600080fd5b5061022e610496366004612e3b565b6111ae565b3480156104a757600080fd5b5061022e6104b6366004612eb0565b611268565b3480156104c757600080fd5b5061022e6104d6366004612efe565b611348565b3480156104e757600080fd5b5061022e6114bc565b3480156104fc57600080fd5b5061025561050b366004612cef565b60009182527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408084206001600160a01b0393909316845291905290205460ff1690565b34801561056157600080fd5b50610331600081565b34801561057657600080fd5b506105b36040518060400160405280600581526020017f352e302e3000000000000000000000000000000000000000000000000000000081525081565b6040516102619190612fa7565b3480156105cc57600080fd5b5061022e6105db366004612d1f565b6114ee565b3480156105ec57600080fd5b5061022e6105fb366004612d1f565b61161e565b34801561060c57600080fd5b5061022e61061b366004612cef565b61182d565b34801561062c57600080fd5b506103317f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b34801561066057600080fd5b5061022e61066f366004612fba565b611871565b34801561068057600080fd5b5061022e61068f366004613020565b611990565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff16156106f0576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061078557507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b610793611b9f565b61079b610694565b82516000036107d6576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b81600003610810576040517f5d67094f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061081c8383611c20565b90506000336001600160a01b03167fde19dbe881cc0aeeb6e73ce19ac7b5ca695e6be8a076e3eb42292005a7fec1b586858786886001600160a01b0316634d8943bb6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561088d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108b19190613057565b6040516108c2959493929190613070565b60405180910390a3506108f460017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610946576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61094e610694565b6001600160a01b03831661098e576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b836000036109c8576040517f19c08f4900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03831673735b14bb79463307aacbed86daf3322b1e6226ab14806109fb57506001600160a01b03831630145b15610a32576040517f82d5d76a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610a3c8484611f13565b6000546040517fde43156e0000000000000000000000000000000000000000000000000000000081526001600160a01b038086169263de43156e92610a8d928a9216908990889088906004016131ad565b600060405180830381600087803b158015610aa757600080fd5b505af1158015610abb573d6000803e3d6000fd5b505050505050505050565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020526040902060010154610b00816120e1565b610b0a83836120eb565b50505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610b5d576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610b65610694565b6001600160a01b0385161580610b8257506001600160a01b038316155b15610bb9576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b83600003610bf3576040517f5d67094f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f69582bee0000000000000000000000000000000000000000000000000000000081526001600160a01b038416906369582bee90610c4090899089908990889088906004016131ad565b600060405180830381600087803b158015610c5a57600080fd5b505af1158015610c6e573d6000803e3d6000fd5b50505050505050505050565b6001600160a01b0381163314610cbc576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6108f482826121d8565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610cf0816120e1565b610cf861229c565b50565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff16600081158015610d465750825b905060008267ffffffffffffffff166001148015610d635750303b155b905081158015610d71575080155b15610da8576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001660011785558315610e095784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff16680100000000000000001785555b6001600160a01b0387161580610e2657506001600160a01b038616155b15610e5d576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610e6561232c565b610e6d61232c565b610e75612334565b610e7d612344565b610e886000876120eb565b50610eb37f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a876120eb565b50600080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0389161790558315610f485784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50505050505050565b610f59612354565b610f6282612424565b610f6c828261242f565b5050565b6000610f7a612553565b507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc90565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610fec576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610ff4610694565b6001600160a01b038516158061101157506001600160a01b038316155b15611048576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b83600003611082576040517f5d67094f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03831673735b14bb79463307aacbed86daf3322b1e6226ab14806110b557506001600160a01b03831630145b156110ec576040517f82d5d76a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f47e7ef240000000000000000000000000000000000000000000000000000000081526001600160a01b038481166004830152602482018690528616906347e7ef24906044016020604051808303816000875af1158015611154573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061117891906131f4565b610bf3576040517f47d19fab00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6111b6611b9f565b6111be610694565b83516000036111f9576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b82336001600160a01b03167f5322ffbbf9261ff1f8138247942d2b03b28717141ef0a0dd080fc4be9c4e78d386858560405161123793929190613216565b60405180910390a3610b0a60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b611270611b9f565b611278610694565b816000036112b2576040517f19c08f4900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6112d08273735b14bb79463307aacbed86daf3322b1e6226ab611f13565b60008054604051839233927fde19dbe881cc0aeeb6e73ce19ac7b5ca695e6be8a076e3eb42292005a7fec1b5926113179289926001600160a01b0316918991908190613070565b60405180910390a36108f460017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b611350611b9f565b611358610694565b8451600003611393576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b836000036113cd576040517f5d67094f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006113d98585611c20565b90506000336001600160a01b03167fde19dbe881cc0aeeb6e73ce19ac7b5ca695e6be8a076e3eb42292005a7fec1b5888789868a6001600160a01b0316634d8943bb6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561144a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061146e9190613057565b8a8a6040516114839796959493929190613246565b60405180910390a3506114b560017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b5050505050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a6114e6816120e1565b610cf86125b5565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461153b576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611543610694565b6001600160a01b038516158061156057506001600160a01b038316155b15611597576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b836000036115d1576040517f5d67094f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517fde43156e0000000000000000000000000000000000000000000000000000000081526001600160a01b0384169063de43156e90610c4090899089908990889088906004016131ad565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461166b576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611673610694565b6001600160a01b038516158061169057506001600160a01b038316155b156116c7576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b83600003611701576040517f5d67094f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03831673735b14bb79463307aacbed86daf3322b1e6226ab148061173457506001600160a01b03831630145b1561176b576040517f82d5d76a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f47e7ef240000000000000000000000000000000000000000000000000000000081526001600160a01b038481166004830152602482018690528616906347e7ef24906044016020604051808303816000875af11580156117d3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117f791906131f4565b6115d1576040517f47d19fab00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020526040902060010154611867816120e1565b610b0a83836121d8565b611879611b9f565b611881610694565b84516000036118bc576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b836000036118f6576040517f19c08f4900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6119148473735b14bb79463307aacbed86daf3322b1e6226ab611f13565b60008054604051859233927fde19dbe881cc0aeeb6e73ce19ac7b5ca695e6be8a076e3eb42292005a7fec1b59261195f928b926001600160a01b0316918b919081908b908b90613246565b60405180910390a36114b560017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b3373735b14bb79463307aacbed86daf3322b1e6226ab146119dd576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6119e5610694565b6001600160a01b0383161580611a0257506001600160a01b038116155b15611a39576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b81600003611a73576040517f5d67094f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03811673735b14bb79463307aacbed86daf3322b1e6226ab1480611aa657506001600160a01b03811630145b15611add576040517f82d5d76a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f47e7ef240000000000000000000000000000000000000000000000000000000081526001600160a01b038281166004830152602482018490528416906347e7ef24906044016020604051808303816000875af1158015611b45573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b6991906131f4565b6108f4576040517f47d19fab00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0080547ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01611c1a576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60029055565b6000806000836001600160a01b031663d9eeebed6040518163ffffffff1660e01b81526004016040805180830381865afa158015611c62573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c86919061329b565b6040517f23b872dd00000000000000000000000000000000000000000000000000000000815233600482015273735b14bb79463307aacbed86daf3322b1e6226ab60248201526044810182905291935091506001600160a01b038316906323b872dd906064016020604051808303816000875af1158015611d0b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d2f91906131f4565b611d65576040517f0a7cd6d600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f23b872dd000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018690526001600160a01b038516906323b872dd906064016020604051808303816000875af1158015611dd1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611df591906131f4565b611e2b576040517f4dd9ee8d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f42966c68000000000000000000000000000000000000000000000000000000008152600481018690526001600160a01b038516906342966c68906024016020604051808303816000875af1158015611e8b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611eaf91906131f4565b611ee5576040517f2c77e05c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b949350505050565b60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b6000546040517f23b872dd000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018490526001600160a01b03909116906323b872dd906064016020604051808303816000875af1158015611f83573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fa791906131f4565b611fdd576040517fc7ffc47b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000546040517f2e1a7d4d000000000000000000000000000000000000000000000000000000008152600481018490526001600160a01b0390911690632e1a7d4d90602401600060405180830381600087803b15801561203c57600080fd5b505af1158015612050573d6000803e3d6000fd5b505050506000816001600160a01b03168360405160006040518083038185875af1925050503d80600081146120a1576040519150601f19603f3d011682016040523d82523d6000602084013e6120a6565b606091505b50509050806108f4576040517fc7ffc47b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610cf8813361262e565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff166121ce576000848152602082815260408083206001600160a01b0387168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790556121843390565b6001600160a01b0316836001600160a01b0316857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a46001915050610785565b6000915050610785565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff16156121ce576000848152602082815260408083206001600160a01b038716808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339287917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a46001915050610785565b6122a46126bb565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001681557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a150565b6106f0612716565b61233c612716565b6106f061277d565b61234c612716565b6106f06127ce565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806123ed57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166123e17f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b6001600160a01b031614155b156106f0576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610f6c816120e1565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156124a7575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682019092526124a491810190613057565b60015b6124ed576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b03831660048201526024015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8114612549576040517faa1d49a4000000000000000000000000000000000000000000000000000000008152600481018290526024016124e4565b6108f483836127d6565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146106f0576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6125bd610694565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011781557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2583361230e565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408083206001600160a01b038516845290915290205460ff16610f6c576040517fe2517d3f0000000000000000000000000000000000000000000000000000000081526001600160a01b0382166004820152602481018390526044016124e4565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff166106f0576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff166106f0576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612785612716565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055565b611eed612716565b6127df8261282c565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a2805115612824576108f482826128d4565b610f6c61294a565b806001600160a01b03163b60000361287b576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b03821660048201526024016124e4565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6060600080846001600160a01b0316846040516128f191906132c9565b600060405180830381855af49150503d806000811461292c576040519150601f19603f3d011682016040523d82523d6000602084013e612931565b606091505b5091509150612941858383612982565b95945050505050565b34156106f0576040517fb398979f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60608261299757612992826129fa565b6129f3565b81511580156129ae57506001600160a01b0384163b155b156129f0576040517f9996b3150000000000000000000000000000000000000000000000000000000081526001600160a01b03851660048201526024016124e4565b50805b9392505050565b805115612a0a5780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060208284031215612a4e57600080fd5b81357fffffffff00000000000000000000000000000000000000000000000000000000811681146129f357600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600082601f830112612abe57600080fd5b813567ffffffffffffffff811115612ad857612ad8612a7e565b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8501160116810181811067ffffffffffffffff82111715612b4457612b44612a7e565b604052818152838201602001851015612b5c57600080fd5b816020850160208301376000918101602001919091529392505050565b6001600160a01b0381168114610cf857600080fd5b600080600060608486031215612ba357600080fd5b833567ffffffffffffffff811115612bba57600080fd5b612bc686828701612aad565b935050602084013591506040840135612bde81612b79565b809150509250925092565b600060608284031215612bfb57600080fd5b50919050565b60008083601f840112612c1357600080fd5b50813567ffffffffffffffff811115612c2b57600080fd5b602083019150836020828501011115612c4357600080fd5b9250929050565b600080600080600060808688031215612c6257600080fd5b853567ffffffffffffffff811115612c7957600080fd5b612c8588828901612be9565b955050602086013593506040860135612c9d81612b79565b9250606086013567ffffffffffffffff811115612cb957600080fd5b612cc588828901612c01565b969995985093965092949392505050565b600060208284031215612ce857600080fd5b5035919050565b60008060408385031215612d0257600080fd5b823591506020830135612d1481612b79565b809150509250929050565b60008060008060008060a08789031215612d3857600080fd5b863567ffffffffffffffff811115612d4f57600080fd5b612d5b89828a01612be9565b9650506020870135612d6c81612b79565b9450604087013593506060870135612d8381612b79565b9250608087013567ffffffffffffffff811115612d9f57600080fd5b612dab89828a01612c01565b979a9699509497509295939492505050565b60008060408385031215612dd057600080fd5b8235612ddb81612b79565b91506020830135612d1481612b79565b60008060408385031215612dfe57600080fd5b8235612e0981612b79565b9150602083013567ffffffffffffffff811115612e2557600080fd5b612e3185828601612aad565b9150509250929050565b60008060008060608587031215612e5157600080fd5b843567ffffffffffffffff811115612e6857600080fd5b612e7487828801612aad565b94505060208501359250604085013567ffffffffffffffff811115612e9857600080fd5b612ea487828801612c01565b95989497509550505050565b600080600060608486031215612ec557600080fd5b833567ffffffffffffffff811115612edc57600080fd5b612ee886828701612aad565b9660208601359650604090950135949350505050565b600080600080600060808688031215612f1657600080fd5b853567ffffffffffffffff811115612f2d57600080fd5b612c8588828901612aad565b60005b83811015612f54578181015183820152602001612f3c565b50506000910152565b60008151808452612f75816020860160208601612f39565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006129f36020830184612f5d565b600080600080600060808688031215612fd257600080fd5b853567ffffffffffffffff811115612fe957600080fd5b612ff588828901612aad565b9550506020860135935060408601359250606086013567ffffffffffffffff811115612cb957600080fd5b60008060006060848603121561303557600080fd5b833561304081612b79565b9250602084013591506040840135612bde81612b79565b60006020828403121561306957600080fd5b5051919050565b60c08152600061308360c0830188612f5d565b6001600160a01b038716602084015285604084015284606084015283608084015282810360a084015260008152602081019150509695505050505050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b600081357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe183360301811261313e57600080fd5b820160208101903567ffffffffffffffff81111561315b57600080fd5b80360382131561316a57600080fd5b6060855261317c6060860182846130c1565b915050602083013561318d81612b79565b6001600160a01b0316602085015260409283013592909301919091525090565b6080815260006131c0608083018861310a565b6001600160a01b038716602084015285604084015282810360608401526131e88185876130c1565b98975050505050505050565b60006020828403121561320657600080fd5b815180151581146129f357600080fd5b6040815260006132296040830186612f5d565b828103602084015261323c8185876130c1565b9695505050505050565b60c08152600061325960c083018a612f5d565b6001600160a01b038916602084015287604084015286606084015285608084015282810360a084015261328d8185876130c1565b9a9950505050505050505050565b600080604083850312156132ae57600080fd5b82516132b981612b79565b6020939093015192949293505050565b600082516132db818460208701612f39565b919091019291505056fea264697066735822122074bd01c46a1890e26f7c08318fd774812c29e1ccd03d35d939069b787f010fb864736f6c634300081a0033"; type GatewayZEVMConstructorParams = | [signer?: Signer] diff --git a/v2/typechain-types/factories/SenderZEVM__factory.ts b/v2/typechain-types/factories/SenderZEVM__factory.ts index 27369e33..96ef39ca 100644 --- a/v2/typechain-types/factories/SenderZEVM__factory.ts +++ b/v2/typechain-types/factories/SenderZEVM__factory.ts @@ -120,7 +120,7 @@ const _abi = [ ] as const; const _bytecode = - "0x6080604052348015600f57600080fd5b5060405161080c38038061080c833981016040819052602c916050565b600080546001600160a01b0319166001600160a01b0392909216919091179055607e565b600060208284031215606157600080fd5b81516001600160a01b0381168114607757600080fd5b9392505050565b61077f8061008d6000396000f3fe608060405234801561001057600080fd5b50600436106100415760003560e01c80630abd890514610046578063116191b61461005b578063865b36f6146100a4575b600080fd5b6100596100543660046104c4565b6100b7565b005b60005461007b9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b6100596100b236600461057f565b6102af565b60008383836040516024016100ce93929190610674565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe04d4f970000000000000000000000000000000000000000000000000000000017905260005490517f095ea7b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff91821660048201526024810189905291925086169063095ea7b3906044016020604051808303816000875af11580156101be573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101e2919061069e565b610218576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000546040517f7993c1e000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff90911690637993c1e090610274908a908a908a9087906004016106c2565b600060405180830381600087803b15801561028e57600080fd5b505af11580156102a2573d6000803e3d6000fd5b5050505050505050505050565b60008383836040516024016102c693929190610674565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe04d4f970000000000000000000000000000000000000000000000000000000017905260005490517f5d40e17800000000000000000000000000000000000000000000000000000000815291925073ffffffffffffffffffffffffffffffffffffffff1690635d40e1789061039690899089908690600401610714565b600060405180830381600087803b1580156103b057600080fd5b505af11580156103c4573d6000803e3d6000fd5b50505050505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600082601f83011261041057600080fd5b81356020830160008067ffffffffffffffff841115610431576104316103d0565b506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f85018116603f0116810181811067ffffffffffffffff8211171561047e5761047e6103d0565b60405283815290508082840187101561049657600080fd5b838360208301376000602085830101528094505050505092915050565b80151581146104c157600080fd5b50565b60008060008060008060c087890312156104dd57600080fd5b863567ffffffffffffffff8111156104f457600080fd5b61050089828a016103ff565b96505060208701359450604087013573ffffffffffffffffffffffffffffffffffffffff8116811461053157600080fd5b9350606087013567ffffffffffffffff81111561054d57600080fd5b61055989828a016103ff565b9350506080870135915060a0870135610571816104b3565b809150509295509295509295565b600080600080600060a0868803121561059757600080fd5b853567ffffffffffffffff8111156105ae57600080fd5b6105ba888289016103ff565b95505060208601359350604086013567ffffffffffffffff8111156105de57600080fd5b6105ea888289016103ff565b935050606086013591506080860135610602816104b3565b809150509295509295909350565b6000815180845260005b818110156106365760208185018101518683018201520161061a565b5060006020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b6060815260006106876060830186610610565b602083019490945250901515604090910152919050565b6000602082840312156106b057600080fd5b81516106bb816104b3565b9392505050565b6080815260006106d56080830187610610565b85602084015273ffffffffffffffffffffffffffffffffffffffff8516604084015282810360608401526107098185610610565b979650505050505050565b6060815260006107276060830186610610565b846020840152828103604084015261073f8185610610565b969550505050505056fea26469706673582212209d22131b764d02d8f03ee38eaacde43686f4912b77276b56d25b86546826c23564736f6c634300081a0033"; + "0x6080604052348015600f57600080fd5b5060405161080c38038061080c833981016040819052602c916050565b600080546001600160a01b0319166001600160a01b0392909216919091179055607e565b600060208284031215606157600080fd5b81516001600160a01b0381168114607757600080fd5b9392505050565b61077f8061008d6000396000f3fe608060405234801561001057600080fd5b50600436106100415760003560e01c80630abd890514610046578063116191b61461005b578063865b36f6146100a4575b600080fd5b6100596100543660046104c4565b6100b7565b005b60005461007b9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b6100596100b236600461057f565b6102af565b60008383836040516024016100ce93929190610674565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe04d4f970000000000000000000000000000000000000000000000000000000017905260005490517f095ea7b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff91821660048201526024810189905291925086169063095ea7b3906044016020604051808303816000875af11580156101be573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101e2919061069e565b610218576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000546040517f7993c1e000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff90911690637993c1e090610274908a908a908a9087906004016106c2565b600060405180830381600087803b15801561028e57600080fd5b505af11580156102a2573d6000803e3d6000fd5b5050505050505050505050565b60008383836040516024016102c693929190610674565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe04d4f970000000000000000000000000000000000000000000000000000000017905260005490517f5d40e17800000000000000000000000000000000000000000000000000000000815291925073ffffffffffffffffffffffffffffffffffffffff1690635d40e1789061039690899089908690600401610714565b600060405180830381600087803b1580156103b057600080fd5b505af11580156103c4573d6000803e3d6000fd5b50505050505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600082601f83011261041057600080fd5b81356020830160008067ffffffffffffffff841115610431576104316103d0565b506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f85018116603f0116810181811067ffffffffffffffff8211171561047e5761047e6103d0565b60405283815290508082840187101561049657600080fd5b838360208301376000602085830101528094505050505092915050565b80151581146104c157600080fd5b50565b60008060008060008060c087890312156104dd57600080fd5b863567ffffffffffffffff8111156104f457600080fd5b61050089828a016103ff565b96505060208701359450604087013573ffffffffffffffffffffffffffffffffffffffff8116811461053157600080fd5b9350606087013567ffffffffffffffff81111561054d57600080fd5b61055989828a016103ff565b9350506080870135915060a0870135610571816104b3565b809150509295509295509295565b600080600080600060a0868803121561059757600080fd5b853567ffffffffffffffff8111156105ae57600080fd5b6105ba888289016103ff565b95505060208601359350604086013567ffffffffffffffff8111156105de57600080fd5b6105ea888289016103ff565b935050606086013591506080860135610602816104b3565b809150509295509295909350565b6000815180845260005b818110156106365760208185018101518683018201520161061a565b5060006020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b6060815260006106876060830186610610565b602083019490945250901515604090910152919050565b6000602082840312156106b057600080fd5b81516106bb816104b3565b9392505050565b6080815260006106d56080830187610610565b85602084015273ffffffffffffffffffffffffffffffffffffffff8516604084015282810360608401526107098185610610565b979650505050505050565b6060815260006107276060830186610610565b846020840152828103604084015261073f8185610610565b969550505050505056fea2646970667358221220913e9e4f584646fcff086caec1531d2f19fc055665166453bbf086af95b2e48464736f6c634300081a0033"; type SenderZEVMConstructorParams = | [signer?: Signer] From 3768305d8b67d845b8a9ef59f39ca76de14eb16b Mon Sep 17 00:00:00 2001 From: skosito Date: Fri, 9 Aug 2024 16:29:00 +0200 Subject: [PATCH 21/21] generate --- .../gatewayevmzevmtest.go | 2 +- v2/pkg/gatewayzevm.sol/gatewayzevm.go | 2 +- .../gatewayzevminboundtest.go | 109 +++++++++++------- .../gatewayzevmoutboundtest.go | 28 ++--- v2/pkg/zrc20.t.sol/zrc20test.go | 2 +- v2/src/zevm/GatewayZEVM.sol | 1 + v2/test/GatewayZEVM.t.sol | 11 +- .../factories/GatewayZEVM__factory.ts | 2 +- 8 files changed, 92 insertions(+), 65 deletions(-) diff --git a/v2/pkg/gatewayevmzevm.t.sol/gatewayevmzevmtest.go b/v2/pkg/gatewayevmzevm.t.sol/gatewayevmzevmtest.go index 92c0ea99..cbef7a8f 100644 --- a/v2/pkg/gatewayevmzevm.t.sol/gatewayevmzevmtest.go +++ b/v2/pkg/gatewayevmzevm.t.sol/gatewayevmzevmtest.go @@ -50,7 +50,7 @@ type StdInvariantFuzzSelector struct { // GatewayEVMZEVMTestMetaData contains all meta data concerning the GatewayEVMZEVMTest contract. var GatewayEVMZEVMTestMetaData = &bind.MetaData{ ABI: "[{\"type\":\"function\",\"name\":\"IS_TEST\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeArtifacts\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedArtifacts_\",\"type\":\"string[]\",\"internalType\":\"string[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeContracts\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedContracts_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeSelectors\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedSelectors_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzSelector[]\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"selectors\",\"type\":\"bytes4[]\",\"internalType\":\"bytes4[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeSenders\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedSenders_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"failed\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"setUp\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"targetArtifactSelectors\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedArtifactSelectors_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzArtifactSelector[]\",\"components\":[{\"name\":\"artifact\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"selectors\",\"type\":\"bytes4[]\",\"internalType\":\"bytes4[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetArtifacts\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedArtifacts_\",\"type\":\"string[]\",\"internalType\":\"string[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetContracts\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedContracts_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetInterfaces\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedInterfaces_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzInterface[]\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"artifacts\",\"type\":\"string[]\",\"internalType\":\"string[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetSelectors\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedSelectors_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzSelector[]\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"selectors\",\"type\":\"bytes4[]\",\"internalType\":\"bytes4[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetSenders\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedSenders_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"testCallReceiverEVMFromSenderZEVM\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testCallReceiverEVMFromZEVM\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawAndCallReceiverEVMFromSenderZEVM\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawAndCallReceiverEVMFromZEVM\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"event\",\"name\":\"Call\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"receiver\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Call\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"chainId\",\"type\":\"uint256\",\"indexed\":true,\"internalType\":\"uint256\"},{\"name\":\"receiver\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"message\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Deposit\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"receiver\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"asset\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Executed\",\"inputs\":[{\"name\":\"destination\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ExecutedWithERC20\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedERC20\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"token\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"destination\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedNoParams\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedNonPayable\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"strs\",\"type\":\"string[]\",\"indexed\":false,\"internalType\":\"string[]\"},{\"name\":\"nums\",\"type\":\"uint256[]\",\"indexed\":false,\"internalType\":\"uint256[]\"},{\"name\":\"flag\",\"type\":\"bool\",\"indexed\":false,\"internalType\":\"bool\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedPayable\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"str\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"num\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"flag\",\"type\":\"bool\",\"indexed\":false,\"internalType\":\"bool\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedRevert\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Reverted\",\"inputs\":[{\"name\":\"destination\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RevertedWithERC20\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Withdrawal\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"chainId\",\"type\":\"uint256\",\"indexed\":true,\"internalType\":\"uint256\"},{\"name\":\"receiver\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"zrc20\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"gasfee\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"protocolFlatFee\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"message\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log\",\"inputs\":[{\"name\":\"\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_address\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_array\",\"inputs\":[{\"name\":\"val\",\"type\":\"uint256[]\",\"indexed\":false,\"internalType\":\"uint256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_array\",\"inputs\":[{\"name\":\"val\",\"type\":\"int256[]\",\"indexed\":false,\"internalType\":\"int256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_array\",\"inputs\":[{\"name\":\"val\",\"type\":\"address[]\",\"indexed\":false,\"internalType\":\"address[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_bytes\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_bytes32\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_int\",\"inputs\":[{\"name\":\"\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_address\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_array\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"uint256[]\",\"indexed\":false,\"internalType\":\"uint256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_array\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"int256[]\",\"indexed\":false,\"internalType\":\"int256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_array\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"address[]\",\"indexed\":false,\"internalType\":\"address[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_bytes\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_bytes32\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_decimal_int\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"},{\"name\":\"decimals\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_decimal_uint\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"decimals\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_int\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_string\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_uint\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_string\",\"inputs\":[{\"name\":\"\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_uint\",\"inputs\":[{\"name\":\"\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"logs\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"ApprovalFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"CallerIsNotFungibleModule\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ConnectorInitialized\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"CustodyInitialized\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"DepositFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ExecutionFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"FailedZetaSent\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"GasFeeTransferFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientERC20Amount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientETHAmount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientZRC20Amount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientZetaAmount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidTarget\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NotWhitelistedInCustody\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OnlyWZETAOrFungible\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"WithdrawalFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZRC20BurnFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZRC20DepositFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZRC20TransferFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZeroAddress\",\"inputs\":[]}]", - Bin: "0x6080604052600c8054600160ff199182168117909255601f80549091169091179055348015602c57600080fd5b506201087d806200003e6000396000f3fe608060405234801561001057600080fd5b506004361061011b5760003560e01c806385226c81116100b2578063b5508aa911610081578063d7a525fc11610066578063d7a525fc146101ec578063e20c9f71146101f4578063fa7626d4146101fc57600080fd5b8063b5508aa9146101cc578063ba414fa6146101d457600080fd5b806385226c8114610192578063916a17c6146101a75780639683c695146101bc578063b0464fdc146101c457600080fd5b80633f7286f4116100ee5780633f7286f414610165578063524744131461016d57806366d9a9a0146101755780636ff15ccc1461018a57600080fd5b80630a9254e4146101205780631ed7831c1461012a5780632ade3880146101485780633e5e3c231461015d575b600080fd5b610128610209565b005b61013261118d565b60405161013f9190617944565b60405180910390f35b6101506111ef565b60405161013f91906179e0565b610132611331565b610132611391565b6101286113f1565b61017d611c4e565b60405161013f9190617b46565b610128611dd0565b61019a6125e8565b60405161013f9190617be4565b6101af6126b8565b60405161013f9190617c5b565b6101286127b3565b6101af612d2f565b61019a612e2a565b6101dc612efa565b604051901515815260200161013f565b610128612fce565b6101326136b0565b601f546101dc9060ff1681565b602680547fffffffffffffffffffffffff00000000000000000000000000000000000000009081163017909155602780548216611234179055602880548216615678179055602e805490911661432117905560405161026790617829565b60408082526004908201527f746573740000000000000000000000000000000000000000000000000000000060608201526080602082018190526003908201527f54544b000000000000000000000000000000000000000000000000000000000060a082015260c001604051809103906000f0801580156102ec573d6000803e3d6000fd5b50602380547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039290921691909117905560405161033190617829565b604080825260049082018190527f7a6574610000000000000000000000000000000000000000000000000000000060608301526080602083018190528201527f5a4554410000000000000000000000000000000000000000000000000000000060a082015260c001604051809103906000f0801580156103b5573d6000803e3d6000fd5b50602480547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039283169081178255604080518082018252600e81527f4761746577617945564d2e736f6c0000000000000000000000000000000000006020820152602854602654925190861694810194909452604484019290925290921660648201526104a6919060840160408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fc0c53b8b00000000000000000000000000000000000000000000000000000000179052613710565b601f80547fffffffffffffffffffffff0000000000000000000000000000000000000000ff166101006001600160a01b0393841681029190911791829055602080549190920483167fffffffffffffffffffffffff0000000000000000000000000000000000000000909116811790915560285460265460405192939182169291169061053290617837565b6001600160a01b03938416815291831660208301529091166040820152606001604051809103906000f08015801561056e573d6000803e3d6000fd5b50602180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392831617905560205460245460285460265460405193851694928316939183169216906105c990617845565b6001600160a01b039485168152928416602084015290831660408301529091166060820152608001604051809103906000f08015801561060d573d6000803e3d6000fd5b50602280547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039283161790556028546040517fc88a5e6d00000000000000000000000000000000000000000000000000000000815291166004820152670de0b6b3a76400006024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c88a5e6d90604401600060405180830381600087803b1580156106b957600080fd5b505af11580156106cd573d6000803e3d6000fd5b50506026546040517f06447d560000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506306447d569150602401600060405180830381600087803b15801561074357600080fd5b505af1158015610757573d6000803e3d6000fd5b50506020546021546040517fae7a3a6f0000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201529116925063ae7a3a6f9150602401600060405180830381600087803b1580156107bd57600080fd5b505af11580156107d1573d6000803e3d6000fd5b50506020546022546040517f10188aef0000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152911692506310188aef9150602401600060405180830381600087803b15801561083757600080fd5b505af115801561084b573d6000803e3d6000fd5b505050507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b03166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156108ad57600080fd5b505af11580156108c1573d6000803e3d6000fd5b50506023546026546040517f40c10f190000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620f42406024820152911692506340c10f199150604401600060405180830381600087803b15801561093057600080fd5b505af1158015610944573d6000803e3d6000fd5b50506023546021546040517fa9059cbb0000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201526207a12060248201529116925063a9059cbb91506044016020604051808303816000875af11580156109b8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109dc9190617cf2565b506040516109e990617853565b604051809103906000f080158015610a05573d6000803e3d6000fd5b50602580547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03928316179055604080518082018252600f81527f476174657761795a45564d2e736f6c0000000000000000000000000000000000602082015260248054602e54935190851691810191909152919092166044820152610aee919060640160408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f485cc95500000000000000000000000000000000000000000000000000000000179052613710565b602980546001600160a01b03929092167fffffffffffffffffffffffff00000000000000000000000000000000000000009283168117909155602a80549092168117909155604051610b3f90617861565b6001600160a01b039091168152602001604051809103906000f080158015610b6b573d6000803e3d6000fd5b50602b80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03929092169190911790556040517f06447d5600000000000000000000000000000000000000000000000000000000815273735b14bb79463307aacbed86daf3322b1e6226ab6004820181905290737109709ecfa91a80626ff3989d68f67f5b1dd12d906306447d5690602401600060405180830381600087803b158015610c2057600080fd5b505af1158015610c34573d6000803e3d6000fd5b505050506000806000604051610c499061786f565b6001600160a01b03938416815291831660208301529091166040820152606001604051809103906000f080158015610c85573d6000803e3d6000fd5b50602c80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03928316908117909155602a54604051601293600193600093849391921690610cdb9061787d565b610cea96959493929190617d14565b604051809103906000f080158015610d06573d6000803e3d6000fd5b50602d80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03928316908117909155602c546040517fee2815ba0000000000000000000000000000000000000000000000000000000081526001600482015260248101929092529091169063ee2815ba90604401600060405180830381600087803b158015610d9d57600080fd5b505af1158015610db1573d6000803e3d6000fd5b5050602c546040517fa7cb050700000000000000000000000000000000000000000000000000000000815260016004820181905260248201526001600160a01b03909116925063a7cb05079150604401600060405180830381600087803b158015610e1b57600080fd5b505af1158015610e2f573d6000803e3d6000fd5b5050602d54602e546040517f47e7ef240000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620f42406024820152911692506347e7ef2491506044016020604051808303816000875af1158015610ea3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ec79190617cf2565b50602d54602b546040517f47e7ef240000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620f424060248201529116906347e7ef24906044016020604051808303816000875af1158015610f38573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f5c9190617cf2565b507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b03166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610fbb57600080fd5b505af1158015610fcf573d6000803e3d6000fd5b5050602e546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b15801561104557600080fd5b505af1158015611059573d6000803e3d6000fd5b5050602d54602a546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620f424060248201529116925063095ea7b391506044016020604051808303816000875af11580156110cd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110f19190617cf2565b506028546040517fc88a5e6d0000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152670de0b6b3a76400006024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c88a5e6d90604401600060405180830381600087803b15801561117257600080fd5b505af1158015611186573d6000803e3d6000fd5b5050505050565b606060168054806020026020016040519081016040528092919081815260200182805480156111e557602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116111c7575b5050505050905090565b6060601e805480602002602001604051908101604052809291908181526020016000905b8282101561132857600084815260208082206040805180820182526002870290920180546001600160a01b03168352600181018054835181870281018701909452808452939591948681019491929084015b8282101561131157838290600052602060002001805461128490617e09565b80601f01602080910402602001604051908101604052809291908181526020018280546112b090617e09565b80156112fd5780601f106112d2576101008083540402835291602001916112fd565b820191906000526020600020905b8154815290600101906020018083116112e057829003601f168201915b505050505081526020019060010190611265565b505050508152505081526020019060010190611213565b50505050905090565b606060188054806020026020016040519081016040528092919081815260200182805480156111e5576020028201919060005260206000209081546001600160a01b031681526001909101906020018083116111c7575050505050905090565b606060178054806020026020016040519081016040528092919081815260200182805480156111e5576020028201919060005260206000209081546001600160a01b031681526001909101906020018083116111c7575050505050905090565b604080518082018252600681527f48656c6c6f2100000000000000000000000000000000000000000000000000006020820152602d54602b5492517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b0393841660048201529192602a92600192670de0b6b3a7640000926000929116906370a0823190602401602060405180830381865afa15801561149d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114c19190617e56565b6040519091506000907fe04d4f9700000000000000000000000000000000000000000000000000000000906114fe90889088908890602401617e6f565b60408051601f19818403018152918152602080830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909516949094179093526025549051919350600092611597926001600160a01b03909216910160609190911b6bffffffffffffffffffffffff1916815260140190565b60408051601f1981840301815290829052602d546115c892620f4240916001600160a01b0316908690602401617e99565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f7993c1e000000000000000000000000000000000000000000000000000000000179052602a5490517ff30c7ba3000000000000000000000000000000000000000000000000000000008152919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f30c7ba391611685916001600160a01b0391909116906000908690600401617ed8565b600060405180830381600087803b15801561169f57600080fd5b505af11580156116b3573d6000803e3d6000fd5b5050602e546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b15801561172957600080fd5b505af115801561173d573d6000803e3d6000fd5b5050602b5460255460405160609190911b6bffffffffffffffffffffffff191660208201526001600160a01b039091169250630abd8905915060340160408051601f1981840301815290829052602d547fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1683526117d792620f4240916001600160a01b0316908d908d908d90600401617f00565b600060405180830381600087803b1580156117f157600080fd5b505af1158015611805573d6000803e3d6000fd5b50506020546040517fc88a5e6d0000000000000000000000000000000000000000000000000000000081526001600160a01b03909116600482015260248101879052737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c88a5e6d9150604401600060405180830381600087803b15801561188257600080fd5b505af1158015611896573d6000803e3d6000fd5b50506025546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b15801561192857600080fd5b505af115801561193c573d6000803e3d6000fd5b50506020546040517f1f1ff1f5fb41346850b2f5c04e6c767e2f1c8a525c5c0c5cdb60cdf3ca5f62fa935061198592506001600160a01b039091169087908b908b908b90617f55565b60405180910390a16020546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b158015611a1b57600080fd5b505af1158015611a2f573d6000803e3d6000fd5b50506025546040516001600160a01b0390911692507fcaf938de11c367272220bfd1d2baa99ca46665e7bc4d85f00adb51b90fe1fa9f9150611a749087908690617f96565b60405180910390a26028546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015611aee57600080fd5b505af1158015611b02573d6000803e3d6000fd5b50506020546025546040517f1cff79cd0000000000000000000000000000000000000000000000000000000081526001600160a01b039283169450631cff79cd93508892611b569216908790600401617faf565b60006040518083038185885af1158015611b74573d6000803e3d6000fd5b50505050506040513d6000823e601f3d908101601f19168201604052611b9d91908101906180b9565b50602d54602b546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260009291909116906370a0823190602401602060405180830381865afa158015611c08573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c2c9190617e56565b9050611c4481611c3f620f42408761811d565b61372f565b5050505050505050565b6060601b805480602002602001604051908101604052809291908181526020016000905b828210156113285783829060005260206000209060020201604051806040016040529081600082018054611ca590617e09565b80601f0160208091040260200160405190810160405280929190818152602001828054611cd190617e09565b8015611d1e5780601f10611cf357610100808354040283529160200191611d1e565b820191906000526020600020905b815481529060010190602001808311611d0157829003601f168201915b5050505050815260200160018201805480602002602001604051908101604052809291908181526020018280548015611db857602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019060040190602082600301049283019260010382029150808411611d655790505b50505050508152505081526020019060010190611c72565b604080518082018252600681527f48656c6c6f21000000000000000000000000000000000000000000000000000060208201529051602a90600190670de0b6b3a7640000906000907fe04d4f970000000000000000000000000000000000000000000000000000000090611e4c90879087908790602401617e6f565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009490941693909317909252602a5491517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b0390921660848301529150737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b158015611f3b57600080fd5b505af1158015611f4f573d6000803e3d6000fd5b5050602e5460255460405160609190911b6bffffffffffffffffffffffff19166020820152600093506001600160a01b0390911691507fde19dbe881cc0aeeb6e73ce19ac7b5ca695e6be8a076e3eb42292005a7fec1b59060340160408051601f19818403018152828252602d547f4d8943bb000000000000000000000000000000000000000000000000000000008452915190926001600160a01b0390921691620f4240916000918491634d8943bb916004808201926020929091908290030181865afa158015612025573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120499190617e56565b8860405161205c96959493929190618130565b60405180910390a3602e546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156120d657600080fd5b505af11580156120ea573d6000803e3d6000fd5b5050602a5460255460405160609190911b6bffffffffffffffffffffffff191660208201526001600160a01b039091169250637993c1e0915060340160408051601f1981840301815290829052602d547fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16835261218092620f4240916001600160a01b0316908790600401618183565b600060405180830381600087803b15801561219a57600080fd5b505af11580156121ae573d6000803e3d6000fd5b5050602d54602e546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260009450911691506370a0823190602401602060405180830381865afa15801561221a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061223e9190617e56565b905061224b81600061372f565b6020546040517fc88a5e6d0000000000000000000000000000000000000000000000000000000081526001600160a01b03909116600482015260248101849052737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c88a5e6d90604401600060405180830381600087803b1580156122c457600080fd5b505af11580156122d8573d6000803e3d6000fd5b50506025546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b15801561236a57600080fd5b505af115801561237e573d6000803e3d6000fd5b50506020546040517f1f1ff1f5fb41346850b2f5c04e6c767e2f1c8a525c5c0c5cdb60cdf3ca5f62fa93506123c792506001600160a01b039091169086908a908a908a90617f55565b60405180910390a16020546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b15801561245d57600080fd5b505af1158015612471573d6000803e3d6000fd5b50506025546040516001600160a01b0390911692507fcaf938de11c367272220bfd1d2baa99ca46665e7bc4d85f00adb51b90fe1fa9f91506124b69086908690617f96565b60405180910390a26028546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561253057600080fd5b505af1158015612544573d6000803e3d6000fd5b50506020546025546040517f1cff79cd0000000000000000000000000000000000000000000000000000000081526001600160a01b039283169450631cff79cd935087926125989216908790600401617faf565b60006040518083038185885af11580156125b6573d6000803e3d6000fd5b50505050506040513d6000823e601f3d908101601f191682016040526125df91908101906180b9565b50505050505050565b6060601a805480602002602001604051908101604052809291908181526020016000905b8282101561132857838290600052602060002001805461262b90617e09565b80601f016020809104026020016040519081016040528092919081815260200182805461265790617e09565b80156126a45780601f10612679576101008083540402835291602001916126a4565b820191906000526020600020905b81548152906001019060200180831161268757829003601f168201915b50505050508152602001906001019061260c565b6060601d805480602002602001604051908101604052809291908181526020016000905b828210156113285760008481526020908190206040805180820182526002860290920180546001600160a01b0316835260018101805483518187028101870190945280845293949193858301939283018282801561279b57602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190600401906020826003010492830192600103820291508084116127485790505b505050505081525050815260200190600101906126dc565b604080518082018252600681527f48656c6c6f21000000000000000000000000000000000000000000000000000060208201529051602a90600190670de0b6b3a76400009082906000907fe04d4f97000000000000000000000000000000000000000000000000000000009061283190889088908690602401617e6f565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009490941693909317909252602e5491517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b0390921660048301529150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561290457600080fd5b505af1158015612918573d6000803e3d6000fd5b5050602a546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b1580156129aa57600080fd5b505af11580156129be573d6000803e3d6000fd5b5050602e5460255460405160609190911b6bffffffffffffffffffffffff191660208201528593506001600160a01b0390911691507f5322ffbbf9261ff1f8138247942d2b03b28717141ef0a0dd080fc4be9c4e78d39060340160408051601f1981840301815290829052612a349186906181bd565b60405180910390a3602a5460255460405160609190911b6bffffffffffffffffffffffff191660208201526001600160a01b0390911690635d40e1789060340160405160208183030381529060405284846040518463ffffffff1660e01b8152600401612aa3939291906181e2565b600060405180830381600087803b158015612abd57600080fd5b505af1158015612ad1573d6000803e3d6000fd5b50506020546040517fc88a5e6d0000000000000000000000000000000000000000000000000000000081526001600160a01b03909116600482015260248101869052737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c88a5e6d9150604401600060405180830381600087803b158015612b4e57600080fd5b505af1158015612b62573d6000803e3d6000fd5b50506020546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b158015612bf457600080fd5b505af1158015612c08573d6000803e3d6000fd5b50506025546040516001600160a01b0390911692507fcaf938de11c367272220bfd1d2baa99ca46665e7bc4d85f00adb51b90fe1fa9f9150612c4d9086908590617f96565b60405180910390a26028546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015612cc757600080fd5b505af1158015612cdb573d6000803e3d6000fd5b50506020546025546040517f1cff79cd0000000000000000000000000000000000000000000000000000000081526001600160a01b039283169450631cff79cd935087926125989216908690600401617faf565b6060601c805480602002602001604051908101604052809291908181526020016000905b828210156113285760008481526020908190206040805180820182526002860290920180546001600160a01b03168352600181018054835181870281018701909452808452939491938583019392830182828015612e1257602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019060040190602082600301049283019260010382029150808411612dbf5790505b50505050508152505081526020019060010190612d53565b60606019805480602002602001604051908101604052809291908181526020016000905b82821015611328578382906000526020600020018054612e6d90617e09565b80601f0160208091040260200160405190810160405280929190818152602001828054612e9990617e09565b8015612ee65780601f10612ebb57610100808354040283529160200191612ee6565b820191906000526020600020905b815481529060010190602001808311612ec957829003601f168201915b505050505081526020019060010190612e4e565b60085460009060ff1615612f12575060085460ff1690565b6040517f667f9d70000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d600482018190527f6661696c65640000000000000000000000000000000000000000000000000000602483015260009163667f9d7090604401602060405180830381865afa158015612fa3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612fc79190617e56565b1415905090565b604080518082018252600681527f48656c6c6f21000000000000000000000000000000000000000000000000000060208201529051602a90600190670de0b6b3a76400009082906000907fe04d4f97000000000000000000000000000000000000000000000000000000009061304c90889088908690602401617e6f565b60408051601f19818403018152918152602080830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009095169490941790935260255490519193506000926130e5926001600160a01b03909216910160609190911b6bffffffffffffffffffffffff1916815260140190565b60408051601f198184030181529082905261310691859085906024016181e2565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f5d40e17800000000000000000000000000000000000000000000000000000000179052602a5490517ff30c7ba3000000000000000000000000000000000000000000000000000000008152919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f30c7ba3916131c3916001600160a01b0391909116906000908690600401617ed8565b600060405180830381600087803b1580156131dd57600080fd5b505af11580156131f1573d6000803e3d6000fd5b5050602e546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b15801561326757600080fd5b505af115801561327b573d6000803e3d6000fd5b5050602b5460255460405160609190911b6bffffffffffffffffffffffff191660208201526001600160a01b03909116925063865b36f69150603401604051602081830303815290604052858a8a8a6040518663ffffffff1660e01b81526004016132ea95949392919061820d565b600060405180830381600087803b15801561330457600080fd5b505af1158015613318573d6000803e3d6000fd5b50506020546040517fc88a5e6d0000000000000000000000000000000000000000000000000000000081526001600160a01b03909116600482015260248101879052737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c88a5e6d9150604401600060405180830381600087803b15801561339557600080fd5b505af11580156133a9573d6000803e3d6000fd5b50506025546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b15801561343b57600080fd5b505af115801561344f573d6000803e3d6000fd5b50506020546040517f1f1ff1f5fb41346850b2f5c04e6c767e2f1c8a525c5c0c5cdb60cdf3ca5f62fa935061349892506001600160a01b039091169087908b908b908b90617f55565b60405180910390a16020546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b15801561352e57600080fd5b505af1158015613542573d6000803e3d6000fd5b50506025546040516001600160a01b0390911692507fcaf938de11c367272220bfd1d2baa99ca46665e7bc4d85f00adb51b90fe1fa9f91506135879087908690617f96565b60405180910390a26028546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561360157600080fd5b505af1158015613615573d6000803e3d6000fd5b50506020546025546040517f1cff79cd0000000000000000000000000000000000000000000000000000000081526001600160a01b039283169450631cff79cd935088926136699216908790600401617faf565b60006040518083038185885af1158015613687573d6000803e3d6000fd5b50505050506040513d6000823e601f3d908101601f19168201604052611c4491908101906180b9565b606060158054806020026020016040519081016040528092919081815260200182805480156111e5576020028201919060005260206000209081546001600160a01b031681526001909101906020018083116111c7575050505050905090565b600061371a61788b565b6137258484836137b6565b9150505b92915050565b6040517f98296c540000000000000000000000000000000000000000000000000000000081526004810183905260248101829052737109709ecfa91a80626ff3989d68f67f5b1dd12d906398296c549060440160006040518083038186803b15801561379a57600080fd5b505afa1580156137ae573d6000803e3d6000fd5b505050505050565b6000806137c38584613831565b90506138266040518060400160405280601d81526020017f4552433139363750726f78792e736f6c3a4552433139363750726f78790000008152508286604051602001613811929190617faf565b6040516020818303038152906040528561383d565b9150505b9392505050565b600061382a838361386b565b60c081015151600090156138615761385a84848460c00151613886565b905061382a565b61385a8484613a2c565b60006138778383613b17565b61382a8383602001518461383d565b600080613891613b27565b9050600061389f8683613bfa565b905060006138b682606001518360200151856140a0565b905060006138c6838389896142b2565b905060006138d38261512f565b602081015181519192509060030b15613946578982604001516040516020016138fd929190618252565b60408051601f19818403018152908290527f08c379a000000000000000000000000000000000000000000000000000000000825261393d916004016182d3565b60405180910390fd5b60006139896040518060400160405280601581526020017f4465706c6f79656420746f20616464726573733a2000000000000000000000008152508360016152fe565b6040517fc6ce059d000000000000000000000000000000000000000000000000000000008152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c6ce059d906139dc9084906004016182d3565b602060405180830381865afa1580156139f9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a1d91906182e6565b9b9a5050505050505050505050565b6040517f8d1cc9250000000000000000000000000000000000000000000000000000000081526000908190737109709ecfa91a80626ff3989d68f67f5b1dd12d90638d1cc92590613a819087906004016182d3565b600060405180830381865afa158015613a9e573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052613ac691908101906180b9565b90506000613af48285604051602001613ae092919061830f565b6040516020818303038152906040526154fe565b90506001600160a01b0381166137255784846040516020016138fd92919061833e565b613b2382826000615511565b5050565b604080518082018252600381527f6f75740000000000000000000000000000000000000000000000000000000000602082015290517fd145736c000000000000000000000000000000000000000000000000000000008152606091737109709ecfa91a80626ff3989d68f67f5b1dd12d91829063d145736c90613bae9084906004016183e9565b600060405180830381865afa158015613bcb573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052613bf39190810190618430565b9250505090565b613c2c6040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b6000737109709ecfa91a80626ff3989d68f67f5b1dd12d9050613c776040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b613c8085615614565b60208201526000613c90866159f9565b90506000836001600160a01b031663d930a0e66040518163ffffffff1660e01b8152600401600060405180830381865afa158015613cd2573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052613cfa9190810190618430565b86838560200151604051602001613d149493929190618479565b60408051601f19818403018152908290527f60f9bb1100000000000000000000000000000000000000000000000000000000825291506000906001600160a01b038616906360f9bb1190613d6c9085906004016182d3565b600060405180830381865afa158015613d89573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052613db19190810190618430565b6040517fdb4235f60000000000000000000000000000000000000000000000000000000081529091506001600160a01b0386169063db4235f690613df990849060040161857d565b602060405180830381865afa158015613e16573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613e3a9190617cf2565b613e4f57816040516020016138fd91906185cf565b6040517f49c4fac80000000000000000000000000000000000000000000000000000000081526001600160a01b038616906349c4fac890613e94908490600401618661565b600060405180830381865afa158015613eb1573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052613ed99190810190618430565b84526040517fdb4235f60000000000000000000000000000000000000000000000000000000081526001600160a01b0386169063db4235f690613f209084906004016186b3565b602060405180830381865afa158015613f3d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613f619190617cf2565b15613ff6576040517f49c4fac80000000000000000000000000000000000000000000000000000000081526001600160a01b038616906349c4fac890613fab9084906004016186b3565b600060405180830381865afa158015613fc8573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052613ff09190810190618430565b60408501525b846001600160a01b03166349c4fac882866000015160405160200161401b9190618705565b6040516020818303038152906040526040518363ffffffff1660e01b81526004016140479291906181bd565b600060405180830381865afa158015614064573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261408c9190810190618430565b606085015250608083015250949350505050565b60408051600480825260a0820190925260609160009190816020015b60608152602001906001900390816140bc5790505090506040518060400160405280600481526020017f67726570000000000000000000000000000000000000000000000000000000008152508160008151811061411c5761411c618771565b60200260200101819052506040518060400160405280600381526020017f2d726c00000000000000000000000000000000000000000000000000000000008152508160018151811061417057614170618771565b60200260200101819052508460405160200161418c91906187a0565b604051602081830303815290604052816002815181106141ae576141ae618771565b6020026020010181905250826040516020016141ca919061880c565b604051602081830303815290604052816003815181106141ec576141ec618771565b602002602001018190525060006142028261512f565b602080820151604080518082018252600581527f2e6a736f6e00000000000000000000000000000000000000000000000000000081850190815282518084018452600080825290860152825180840190935290518252928101929092529192506142939060408051808201825260008082526020918201528151808301909252845182528085019082015290615c7c565b6142a857856040516020016138fd919061884d565b9695505050505050565b60a0810151604080518082018252600080825260209182015281518083019092528251808352928101910152606090737109709ecfa91a80626ff3989d68f67f5b1dd12d9015614302565b511590565b614476578260200151156143be576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605860248201527f54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f742060448201527f62652075736564207768656e207468652060736b6970566572696679536f757260648201527f6365436f646560206f7074696f6e206973206074727565600000000000000000608482015260a40161393d565b8260c0015115614476576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605360248201527f54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f742060448201527f62652075736564207768656e207468652060736b69704c6963656e736554797060648201527f6560206f7074696f6e2069732060747275656000000000000000000000000000608482015260a40161393d565b6040805160ff8082526120008201909252600091816020015b606081526020019060019003908161448f57905050905060006040518060400160405280600381526020017f6e707800000000000000000000000000000000000000000000000000000000008152508282806144ea906188de565b935060ff16815181106144ff576144ff618771565b60200260200101819052506040518060400160405280600d81526020017f302e302e312d616c7068612e370000000000000000000000000000000000000081525060405160200161455091906188fd565b60405160208183030381529060405282828061456b906188de565b935060ff168151811061458057614580618771565b60200260200101819052506040518060400160405280600681526020017f6465706c6f7900000000000000000000000000000000000000000000000000008152508282806145cd906188de565b935060ff16815181106145e2576145e2618771565b60200260200101819052506040518060400160405280600e81526020017f2d2d636f6e74726163744e616d6500000000000000000000000000000000000081525082828061462f906188de565b935060ff168151811061464457614644618771565b60200260200101819052508760200151828280614660906188de565b935060ff168151811061467557614675618771565b60200260200101819052506040518060400160405280600e81526020017f2d2d636f6e7472616374506174680000000000000000000000000000000000008152508282806146c2906188de565b935060ff16815181106146d7576146d7618771565b6020908102919091010152875182826146ef816188de565b935060ff168151811061470457614704618771565b60200260200101819052506040518060400160405280600981526020017f2d2d636861696e49640000000000000000000000000000000000000000000000815250828280614751906188de565b935060ff168151811061476657614766618771565b602002602001018190525061477a46615cdd565b8282614785816188de565b935060ff168151811061479a5761479a618771565b60200260200101819052506040518060400160405280600f81526020017f2d2d6275696c64496e666f46696c6500000000000000000000000000000000008152508282806147e7906188de565b935060ff16815181106147fc576147fc618771565b602002602001018190525086828280614814906188de565b935060ff168151811061482957614829618771565b60209081029190910101528551156149505760408051808201909152601581527f2d2d636f6e7374727563746f7242797465636f646500000000000000000000006020820152828261487a816188de565b935060ff168151811061488f5761488f618771565b60209081029190910101526040517f71aad10d0000000000000000000000000000000000000000000000000000000081526001600160a01b038416906371aad10d906148df9089906004016182d3565b600060405180830381865afa1580156148fc573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526149249190810190618430565b828261492f816188de565b935060ff168151811061494457614944618771565b60200260200101819052505b846020015115614a205760408051808201909152601281527f2d2d766572696679536f75726365436f6465000000000000000000000000000060208201528282614999816188de565b935060ff16815181106149ae576149ae618771565b60200260200101819052506040518060400160405280600581526020017f66616c73650000000000000000000000000000000000000000000000000000008152508282806149fb906188de565b935060ff1681518110614a1057614a10618771565b6020026020010181905250614be7565b614a586142fd8660a0015160408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b614aeb5760408051808201909152600d81527f2d2d6c6963656e7365547970650000000000000000000000000000000000000060208201528282614a9b816188de565b935060ff1681518110614ab057614ab0618771565b60200260200101819052508460a00151604051602001614ad091906187a0565b6040516020818303038152906040528282806149fb906188de565b8460c00151158015614b2e575060408089015181518083018352600080825260209182015282518084019093528151835290810190820152614b2c90511590565b155b15614be75760408051808201909152600d81527f2d2d6c6963656e7365547970650000000000000000000000000000000000000060208201528282614b72816188de565b935060ff1681518110614b8757614b87618771565b6020026020010181905250614b9b88615d7d565b604051602001614bab91906187a0565b604051602081830303815290604052828280614bc6906188de565b935060ff1681518110614bdb57614bdb618771565b60200260200101819052505b60408086015181518083018352600080825260209182015282518084019093528151835290810190820152614c1b90511590565b614cb05760408051808201909152600b81527f2d2d72656c61796572496400000000000000000000000000000000000000000060208201528282614c5e816188de565b935060ff1681518110614c7357614c73618771565b60200260200101819052508460400151828280614c8f906188de565b935060ff1681518110614ca457614ca4618771565b60200260200101819052505b606085015115614dd15760408051808201909152600681527f2d2d73616c74000000000000000000000000000000000000000000000000000060208201528282614cf9816188de565b935060ff1681518110614d0e57614d0e618771565b602090810291909101015260608501516040517fb11a19e800000000000000000000000000000000000000000000000000000000815260048101919091526001600160a01b0384169063b11a19e890602401600060405180830381865afa158015614d7d573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052614da59190810190618430565b8282614db0816188de565b935060ff1681518110614dc557614dc5618771565b60200260200101819052505b60e08501515115614e785760408051808201909152600a81527f2d2d6761734c696d69740000000000000000000000000000000000000000000060208201528282614e1b816188de565b935060ff1681518110614e3057614e30618771565b6020026020010181905250614e4c8560e0015160000151615cdd565b8282614e57816188de565b935060ff1681518110614e6c57614e6c618771565b60200260200101819052505b60e08501516020015115614f225760408051808201909152600a81527f2d2d67617350726963650000000000000000000000000000000000000000000060208201528282614ec5816188de565b935060ff1681518110614eda57614eda618771565b6020026020010181905250614ef68560e0015160200151615cdd565b8282614f01816188de565b935060ff1681518110614f1657614f16618771565b60200260200101819052505b60e08501516040015115614fcc5760408051808201909152600e81527f2d2d6d617846656550657247617300000000000000000000000000000000000060208201528282614f6f816188de565b935060ff1681518110614f8457614f84618771565b6020026020010181905250614fa08560e0015160400151615cdd565b8282614fab816188de565b935060ff1681518110614fc057614fc0618771565b60200260200101819052505b60e085015160600151156150765760408051808201909152601681527f2d2d6d61785072696f726974794665655065724761730000000000000000000060208201528282615019816188de565b935060ff168151811061502e5761502e618771565b602002602001018190525061504a8560e0015160600151615cdd565b8282615055816188de565b935060ff168151811061506a5761506a618771565b60200260200101819052505b60008160ff1667ffffffffffffffff81111561509457615094617fd1565b6040519080825280602002602001820160405280156150c757816020015b60608152602001906001900390816150b25790505b50905060005b8260ff168160ff16101561512057838160ff16815181106150f0576150f0618771565b6020026020010151828260ff168151811061510d5761510d618771565b60209081029190910101526001016150cd565b5093505050505b949350505050565b6151566040518060600160405280600060030b815260200160608152602001606081525090565b60408051808201825260048082527f6261736800000000000000000000000000000000000000000000000000000000602083015291517fd145736c000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d92600091849163d145736c916151dc91869101618968565b600060405180830381865afa1580156151f9573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526152219190810190618430565b9050600061522f868361686c565b90506000846001600160a01b031663f45c1ce7836040518263ffffffff1660e01b815260040161525f9190617be4565b6000604051808303816000875af115801561527e573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526152a691908101906189af565b805190915060030b158015906152bf5750602081015151155b80156152ce5750604081015151155b156142a857816000815181106152e6576152e6618771565b60200260200101516040516020016138fd9190618a65565b606060006153338560408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b60408051808201825260008082526020918201528151808301909252865182528087019082015290915061536a9082905b906169c1565b156154c75760006153e7826153e1846153db6153ad8a60408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6040805180820182526000808252602091820152815180830190925282518252918201519181019190915290565b906169e8565b90616a4a565b604080518082018252600181527f0a000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015290915061544b9082906169c1565b156154b557604080518082018252600181527f0a00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526154b2905b8290616acf565b90505b6154be81616af5565b9250505061382a565b82156154e05784846040516020016138fd929190618c51565b505060408051602081019091526000815261382a565b509392505050565b6000808251602084016000f09392505050565b8160a001511561552057505050565b600061552d848484616b5e565b9050600061553a8261512f565b602081015181519192509060030b1580156155d65750604080518082018252600781527f5355434345535300000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526155d690604080518082018252600080825260209182015281518083019092528451825280850190820152615364565b156155e357505050505050565b604082015151156156035781604001516040516020016138fd9190618cf8565b806040516020016138fd9190618d56565b606060006156498360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600481527f2e736f6c00000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201529091506156ae905b8290615c7c565b1561571d57604080518082018252600481527f2e736f6c000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261382a906157189083906170f9565b616af5565b604080518082018252600181527f3a000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261577f905b8290617183565b60010361584c57604080518082018252600181527f3a00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526157e5906154ab565b50604080518082018252600181527f3a000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261382a90615718905b8390616acf565b604080518082018252600581527f2e6a736f6e000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526158ab906156a7565b156159e257604080518082018252600181527f2f0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082018190528451808601909552925184528301529061591390839061721d565b905060008160018351615926919061811d565b8151811061593657615936618771565b602002602001015190506159d96157186159ac6040518060400160405280600581526020017f2e6a736f6e00000000000000000000000000000000000000000000000000000081525060408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600080825260209182015281518083019092528551825280860190820152906170f9565b95945050505050565b826040516020016138fd9190618dc1565b50919050565b60606000615a2e8360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600481527f2e736f6c0000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152909150615a90906156a7565b15615a9e5761382a81616af5565b604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152615afd90615778565b600103615b6757604080518082018252600181527f3a000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261382a9061571890615845565b604080518082018252600581527f2e6a736f6e00000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152615bc6906156a7565b156159e257604080518082018252600181527f2f00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820181905284518086019095529251845283015290615c2e90839061721d565b9050600181511115615c6a578060028251615c49919061811d565b81518110615c5957615c59618771565b602002602001015192505050919050565b50826040516020016138fd9190618dc1565b805182516000911115615c9157506000613729565b81518351602085015160009291615ca791618e9f565b615cb1919061811d565b905082602001518103615cc8576001915050613729565b82516020840151819020912014905092915050565b60606000615cea836172c2565b600101905060008167ffffffffffffffff811115615d0a57615d0a617fd1565b6040519080825280601f01601f191660200182016040528015615d34576020820181803683370190505b5090508181016020015b600019017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a8504945084615d3e57509392505050565b604081810151815180830183526000808252602091820181905283518085018552835181529282018383015283518085018552600a81527f554e4c4943454e5345440000000000000000000000000000000000000000000081840190815285518087018752838152840192909252845180860190955251845290830152606091615e09905b82906173a4565b15615e4957505060408051808201909152600481527f4e6f6e65000000000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600981527f556e6c6963656e7365000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152615ea890615e02565b15615ee857505060408051808201909152600981527f556e6c6963656e736500000000000000000000000000000000000000000000006020820152919050565b604080518082018252600381527f4d4954000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152615f4790615e02565b15615f8757505060408051808201909152600381527f4d495400000000000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f47504c2d322e302d6f6e6c79000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152615fe690615e02565b8061604b5750604080518082018252601081527f47504c2d322e302d6f722d6c61746572000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261604b90615e02565b1561608b57505060408051808201909152600981527f474e552047504c763200000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f47504c2d332e302d6f6e6c790000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526160ea90615e02565b8061614f5750604080518082018252601081527f47504c2d332e302d6f722d6c61746572000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261614f90615e02565b1561618f57505060408051808201909152600981527f474e552047504c763300000000000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4c47504c2d322e312d6f6e6c7900000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526161ee90615e02565b806162535750604080518082018252601181527f4c47504c2d322e312d6f722d6c617465720000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261625390615e02565b1561629357505060408051808201909152600c81527f474e55204c47504c76322e3100000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4c47504c2d332e302d6f6e6c7900000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526162f290615e02565b806163575750604080518082018252601181527f4c47504c2d332e302d6f722d6c617465720000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261635790615e02565b1561639757505060408051808201909152600a81527f474e55204c47504c7633000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f4253442d322d436c617573650000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526163f690615e02565b1561643657505060408051808201909152600c81527f4253442d322d436c6175736500000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f4253442d332d436c6175736500000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261649590615e02565b156164d557505060408051808201909152600c81527f4253442d332d436c6175736500000000000000000000000000000000000000006020820152919050565b604080518082018252600781527f4d504c2d322e30000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261653490615e02565b1561657457505060408051808201909152600781527f4d504c2d322e30000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600781527f4f534c2d332e3000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526165d390615e02565b1561661357505060408051808201909152600781527f4f534c2d332e30000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600a81527f4170616368652d322e30000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261667290615e02565b156166b257505060408051808201909152600a81527f4170616368652d322e30000000000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4147504c2d332e302d6f6e6c79000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261671190615e02565b806167765750604080518082018252601181527f4147504c2d332e302d6f722d6c617465720000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261677690615e02565b156167b657505060408051808201909152600a81527f474e55204147504c7633000000000000000000000000000000000000000000006020820152919050565b604080518082018252600881527f4255534c2d312e310000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261681590615e02565b1561685557505060408051808201909152600781527f42534c20312e31000000000000000000000000000000000000000000000000006020820152919050565b604080840151845191516138fd9290602001618eb2565b60608060005b84518110156168f7578185828151811061688e5761688e618771565b60200260200101516040516020016168a792919061830f565b6040516020818303038152906040529150600185516168c6919061811d565b81146168ef57816040516020016168dd919061901b565b60405160208183030381529060405291505b600101616872565b5060408051600380825260808201909252600091816020015b6060815260200190600190039081616910579050509050838160008151811061693b5761693b618771565b60200260200101819052506040518060400160405280600281526020017f2d630000000000000000000000000000000000000000000000000000000000008152508160018151811061698f5761698f618771565b602002602001018190525081816002815181106169ae576169ae618771565b6020908102919091010152949350505050565b60208083015183518351928401516000936169df92918491906173b8565b14159392505050565b60408051808201909152600080825260208201526000616a1a84600001518560200151856000015186602001516174c9565b9050836020015181616a2c919061811d565b84518590616a3b90839061811d565b90525060208401525090919050565b6040805180820190915260008082526020820152815183511015616a6f575081613729565b6020808301519084015160019114616a965750815160208481015190840151829020919020145b8015616ac757825184518590616aad90839061811d565b9052508251602085018051616ac3908390618e9f565b9052505b509192915050565b6040805180820190915260008082526020820152616aee8383836175e9565b5092915050565b60606000826000015167ffffffffffffffff811115616b1657616b16617fd1565b6040519080825280601f01601f191660200182016040528015616b40576020820181803683370190505b5090506000602082019050616aee8185602001518660000151617694565b60606000616b6a613b27565b6040805160ff808252612000820190925291925060009190816020015b6060815260200190600190039081616b8757905050905060006040518060400160405280600381526020017f6e70780000000000000000000000000000000000000000000000000000000000815250828280616be2906188de565b935060ff1681518110616bf757616bf7618771565b60200260200101819052506040518060400160405280600781526020017f5e312e33322e3300000000000000000000000000000000000000000000000000815250604051602001616c48919061905c565b604051602081830303815290604052828280616c63906188de565b935060ff1681518110616c7857616c78618771565b60200260200101819052506040518060400160405280600881526020017f76616c6964617465000000000000000000000000000000000000000000000000815250828280616cc5906188de565b935060ff1681518110616cda57616cda618771565b602002602001018190525082604051602001616cf6919061880c565b604051602081830303815290604052828280616d11906188de565b935060ff1681518110616d2657616d26618771565b60200260200101819052506040518060400160405280600a81526020017f2d2d636f6e747261637400000000000000000000000000000000000000000000815250828280616d73906188de565b935060ff1681518110616d8857616d88618771565b6020026020010181905250616d9d878461770e565b8282616da8816188de565b935060ff1681518110616dbd57616dbd618771565b602090810291909101015285515115616e695760408051808201909152600b81527f2d2d7265666572656e636500000000000000000000000000000000000000000060208201528282616e0f816188de565b935060ff1681518110616e2457616e24618771565b6020026020010181905250616e3d86600001518461770e565b8282616e48816188de565b935060ff1681518110616e5d57616e5d618771565b60200260200101819052505b856080015115616ed75760408051808201909152601881527f2d2d756e73616665536b697053746f72616765436865636b000000000000000060208201528282616eb2816188de565b935060ff1681518110616ec757616ec7618771565b6020026020010181905250616f3d565b8415616f3d5760408051808201909152601281527f2d2d726571756972655265666572656e6365000000000000000000000000000060208201528282616f1c816188de565b935060ff1681518110616f3157616f31618771565b60200260200101819052505b60408601515115616fd95760408051808201909152600d81527f2d2d756e73616665416c6c6f770000000000000000000000000000000000000060208201528282616f87816188de565b935060ff1681518110616f9c57616f9c618771565b60200260200101819052508560400151828280616fb8906188de565b935060ff1681518110616fcd57616fcd618771565b60200260200101819052505b8560600151156170435760408051808201909152601481527f2d2d756e73616665416c6c6f7752656e616d657300000000000000000000000060208201528282617022816188de565b935060ff168151811061703757617037618771565b60200260200101819052505b60008160ff1667ffffffffffffffff81111561706157617061617fd1565b60405190808252806020026020018201604052801561709457816020015b606081526020019060019003908161707f5790505b50905060005b8260ff168160ff1610156170ed57838160ff16815181106170bd576170bd618771565b6020026020010151828260ff16815181106170da576170da618771565b602090810291909101015260010161709a565b50979650505050505050565b604080518082019091526000808252602082015281518351101561711e575081613729565b8151835160208501516000929161713491618e9f565b61713e919061811d565b6020840151909150600190821461715f575082516020840151819020908220145b801561717a5783518551869061717690839061811d565b9052505b50929392505050565b60008082600001516171a785600001518660200151866000015187602001516174c9565b6171b19190618e9f565b90505b835160208501516171c59190618e9f565b8111616aee57816171d5816190a1565b925050826000015161720c8560200151836171f0919061811d565b86516171fc919061811d565b83866000015187602001516174c9565b6172169190618e9f565b90506171b4565b6060600061722b8484617183565b617236906001618e9f565b67ffffffffffffffff81111561724e5761724e617fd1565b60405190808252806020026020018201604052801561728157816020015b606081526020019060019003908161726c5790505b50905060005b81518110156154f65761729d6157188686616acf565b8282815181106172af576172af618771565b6020908102919091010152600101617287565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000831061730b577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310617337576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc10000831061735557662386f26fc10000830492506010015b6305f5e100831061736d576305f5e100830492506008015b612710831061738157612710830492506004015b60648310617393576064830492506002015b600a83106137295760010192915050565b60006173b0838361774e565b159392505050565b6000808584116174bf576020841161746b57600084156174035760016173df86602061811d565b6173ea9060086190bb565b6173f59060026191b9565b6173ff919061811d565b1990505b83518116856174128989618e9f565b61741c919061811d565b805190935082165b8181146174565787841161743e5787945050505050615127565b83617448816191c5565b945050828451169050617424565b6174608785618e9f565b945050505050615127565b838320617478858861811d565b6174829087618e9f565b91505b8582106174bd578482208082036174aa576174a08684618e9f565b9350505050615127565b6174b560018461811d565b925050617485565b505b5092949350505050565b600083818685116175d4576020851161758357600085156175155760016174f187602061811d565b6174fc9060086190bb565b6175079060026191b9565b617511919061811d565b1990505b845181166000876175268b8b618e9f565b617530919061811d565b855190915083165b8281146175755781861061755d576175508b8b618e9f565b9650505050505050615127565b85617567816190a1565b965050838651169050617538565b859650505050505050615127565b508383206000905b617595868961811d565b82116175d2578583208082036175b15783945050505050615127565b6175bc600185618e9f565b93505081806175ca906190a1565b92505061758b565b505b6175de8787618e9f565b979650505050505050565b6040805180820190915260008082526020820152600061761b85600001518660200151866000015187602001516174c9565b602080870180519186019190915251909150617637908261811d565b83528451602086015161764a9190618e9f565b8103617659576000855261768b565b835183516176679190618e9f565b8551869061767690839061811d565b90525083516176859082618e9f565b60208601525b50909392505050565b602081106176cc57815183526176ab602084618e9f565b92506176b8602083618e9f565b91506176c560208261811d565b9050617694565b60001981156176fb5760016176e283602061811d565b6176ee906101006191b9565b6176f8919061811d565b90505b9151835183169219169190911790915250565b6060600061771c8484613bfa565b8051602080830151604051939450617736939091016191dc565b60405160208183030381529060405291505092915050565b8151815160009190811115617761575081515b6020808501519084015160005b8381101561781a57825182518082146177ea5760001960208710156177c95760018461779b89602061811d565b6177a59190618e9f565b6177b09060086190bb565b6177bb9060026191b9565b6177c5919061811d565b1990505b81811683821681810391146177e75797506137299650505050505050565b50505b6177f5602086618e9f565b9450617802602085618e9f565b935050506020816178139190618e9f565b905061776e565b50845186516142a89190619234565b610c9f806200925583390190565b6117988062009ef483390190565b61155a806200b68c83390190565b610d5e806200cbe683390190565b61080c806200d94483390190565b610b3f806200e15083390190565b611bb9806200ec8f83390190565b6040518060e001604052806060815260200160608152602001606081526020016000151581526020016000151581526020016000151581526020016178ce6178d3565b905290565b604051806101000160405280600015158152602001600015158152602001606081526020016000801916815260200160608152602001606081526020016000151581526020016178ce6040518060800160405280600081526020016000815260200160008152602001600081525090565b602080825282518282018190526000918401906040840190835b818110156179855783516001600160a01b031683526020938401939092019160010161795e565b509095945050505050565b60005b838110156179ab578181015183820152602001617993565b50506000910152565b600081518084526179cc816020860160208601617990565b601f01601f19169290920160200192915050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015617adc577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452815180516001600160a01b03168652602090810151604082880181905281519088018190529101906060600582901b88018101919088019060005b81811015617ac2577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa08a8503018352617aac8486516179b4565b6020958601959094509290920191600101617a72565b509197505050602094850194929092019150600101617a08565b50929695505050505050565b600081518084526020840193506020830160005b82811015617b3c5781517fffffffff0000000000000000000000000000000000000000000000000000000016865260209586019590910190600101617afc565b5093949350505050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015617adc577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08786030184528151805160408752617bb260408801826179b4565b9050602082015191508681036020880152617bcd8183617ae8565b965050506020938401939190910190600101617b6e565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015617adc577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452617c468583516179b4565b94506020938401939190910190600101617c0c565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015617adc577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc087860301845281516001600160a01b0381511686526020810151905060406020870152617cdc6040870182617ae8565b9550506020938401939190910190600101617c83565b600060208284031215617d0457600080fd5b8151801515811461382a57600080fd5b610100815260056101008201527f544f4b454e000000000000000000000000000000000000000000000000000000610120820152610140602082015260036101408201527f544b4e000000000000000000000000000000000000000000000000000000000061016082015260006101808201905060ff8816604083015286606083015260038610617dce577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b8560808301528460a0830152617def60c08301856001600160a01b03169052565b6001600160a01b03831660e0830152979650505050505050565b600181811c90821680617e1d57607f821691505b6020821081036159f3577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060208284031215617e6857600080fd5b5051919050565b606081526000617e8260608301866179b4565b602083019490945250901515604090910152919050565b608081526000617eac60808301876179b4565b62ffffff861660208401526001600160a01b038516604084015282810360608401526175de81856179b4565b6001600160a01b03841681528260208201526060604082015260006159d960608301846179b4565b60c081526000617f1360c08301896179b4565b8760208401526001600160a01b03871660408401528281036060840152617f3a81876179b4565b6080840195909552505090151560a090910152949350505050565b6001600160a01b038616815284602082015260a060408201526000617f7d60a08301866179b4565b6060830194909452509015156080909101529392505050565b82815260406020820152600061512760408301846179b4565b6001600160a01b038316815260406020820152600061512760408301846179b4565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040516060810167ffffffffffffffff8111828210171561802357618023617fd1565b60405290565b60008067ffffffffffffffff84111561804457618044617fd1565b50604051601f19601f85018116603f0116810181811067ffffffffffffffff8211171561807357618073617fd1565b60405283815290508082840185101561808b57600080fd5b6154f6846020830185617990565b600082601f8301126180aa57600080fd5b61382a83835160208501618029565b6000602082840312156180cb57600080fd5b815167ffffffffffffffff8111156180e257600080fd5b61372584828501618099565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b81810381811115613729576137296180ee565b60c08152600061814360c08301896179b4565b6001600160a01b038816602084015286604084015285606084015284608084015282810360a084015261817681856179b4565b9998505050505050505050565b60808152600061819660808301876179b4565b8560208401526001600160a01b038516604084015282810360608401526175de81856179b4565b6040815260006181d060408301856179b4565b828103602084015261382681856179b4565b6060815260006181f560608301866179b4565b84602084015282810360408401526142a881856179b4565b60a08152600061822060a08301886179b4565b866020840152828103604084015261823881876179b4565b606084019590955250509015156080909101529392505050565b7f4661696c656420746f206465706c6f7920636f6e74726163742000000000000081526000835161828a81601a850160208801617990565b7f3a20000000000000000000000000000000000000000000000000000000000000601a9184019182015283516182c781601c840160208801617990565b01601c01949350505050565b60208152600061382a60208301846179b4565b6000602082840312156182f857600080fd5b81516001600160a01b038116811461382a57600080fd5b60008351618321818460208801617990565b835190830190618335818360208801617990565b01949350505050565b7f4661696c656420746f206465706c6f7920636f6e74726163742000000000000081526000835161837681601a850160208801617990565b7f207573696e6720636f6e7374727563746f722064617461202200000000000000601a9184019182015283516183b3816033840160208801617990565b7f220000000000000000000000000000000000000000000000000000000000000060339290910191820152603401949350505050565b60408152600b60408201527f464f554e4452595f4f5554000000000000000000000000000000000000000000606082015260806020820152600061382a60808301846179b4565b60006020828403121561844257600080fd5b815167ffffffffffffffff81111561845957600080fd5b8201601f8101841361846a57600080fd5b61372584825160208401618029565b6000855161848b818460208a01617990565b7f2f0000000000000000000000000000000000000000000000000000000000000090830190815285516184c5816001840160208a01617990565b7f2f00000000000000000000000000000000000000000000000000000000000000600192909101918201528451618503816002840160208901617990565b6001818301019150507f2f0000000000000000000000000000000000000000000000000000000000000060018201528351618545816002840160208801617990565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600292909101918201526007019695505050505050565b60408152600061859060408301846179b4565b8281036020840152600481527f2e6173740000000000000000000000000000000000000000000000000000000060208201526040810191505092915050565b7f436f756c64206e6f742066696e642041535420696e206172746966616374200081526000825161860781601f850160208701617990565b7f2e205365742060617374203d20747275656020696e20666f756e6472792e746f601f9390910192830152507f6d6c000000000000000000000000000000000000000000000000000000000000603f820152604101919050565b60408152600061867460408301846179b4565b8281036020840152601181527f2e6173742e6162736f6c7574655061746800000000000000000000000000000060208201526040810191505092915050565b6040815260006186c660408301846179b4565b8281036020840152600c81527f2e6173742e6c6963656e7365000000000000000000000000000000000000000060208201526040810191505092915050565b7f2e6d657461646174612e736f75726365732e5b2700000000000000000000000081526000825161873d816014850160208701617990565b7f275d2e6b656363616b32353600000000000000000000000000000000000000006014939091019283015250602001919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f22000000000000000000000000000000000000000000000000000000000000008152600082516187d8816001850160208701617990565b7f22000000000000000000000000000000000000000000000000000000000000006001939091019283015250600201919050565b6000825161881e818460208701617990565b7f2f6275696c642d696e666f000000000000000000000000000000000000000000920191825250600b01919050565b7f436f756c64206e6f742066696e64206275696c642d696e666f2066696c65207781527f697468206d61746368696e6720736f7572636520636f6465206861736820666f60208201527f7220636f6e7472616374200000000000000000000000000000000000000000006040820152600082516188d181604b850160208701617990565b91909101604b0192915050565b600060ff821660ff81036188f4576188f46180ee565b60010192915050565b7f406f70656e7a657070656c696e2f646566656e6465722d6465706c6f792d636c81527f69656e742d636c6940000000000000000000000000000000000000000000000060208201526000825161895b816029850160208701617990565b9190910160290192915050565b60408152601660408201527f4f50454e5a455050454c494e5f424153485f5041544800000000000000000000606082015260806020820152600061382a60808301846179b4565b6000602082840312156189c157600080fd5b815167ffffffffffffffff8111156189d857600080fd5b8201606081850312156189ea57600080fd5b6189f2618000565b81518060030b8114618a0357600080fd5b8152602082015167ffffffffffffffff811115618a1f57600080fd5b618a2b86828501618099565b602083015250604082015167ffffffffffffffff811115618a4b57600080fd5b618a5786828501618099565b604083015250949350505050565b7f4661696c656420746f2072756e206261736820636f6d6d616e6420776974682081527f2200000000000000000000000000000000000000000000000000000000000000602082015260008251618ac3816021850160208701617990565b7f222e20496620796f7520617265207573696e672057696e646f77732c2073657460219390910192830152507f20746865204f50454e5a455050454c494e5f424153485f5041544820656e766960418201527f726f6e6d656e74207661726961626c6520746f207468652066756c6c7920717560618201527f616c69666965642070617468206f66207468652062617368206578656375746160818201527f626c652e20466f72206578616d706c652c20696620796f75206172652075736960a18201527f6e672047697420666f722057696e646f77732c206164642074686520666f6c6c60c18201527f6f77696e67206c696e6520696e20746865202e656e762066696c65206f66207960e18201527f6f75722070726f6a65637420287573696e6720666f727761726420736c6173686101018201527f6573293a0a4f50454e5a455050454c494e5f424153485f504154483d22433a2f6101218201527f50726f6772616d2046696c65732f4769742f62696e2f6261736822000000000061014182015261015c01919050565b7f4661696c656420746f2066696e64206c696e652077697468207072656669782081527f2700000000000000000000000000000000000000000000000000000000000000602082015260008351618caf816021850160208801617990565b7f2720696e206f75747075743a20000000000000000000000000000000000000006021918401918201528351618cec81602e840160208801617990565b01602e01949350505050565b7f4661696c656420746f2072756e2075706772616465207361666574792076616c81527f69646174696f6e3a20000000000000000000000000000000000000000000000060208201526000825161895b816029850160208701617990565b7f55706772616465207361666574792076616c69646174696f6e206661696c656481527f3a0a000000000000000000000000000000000000000000000000000000000000602082015260008251618db4816022850160208701617990565b9190910160220192915050565b7f436f6e7472616374206e616d6520000000000000000000000000000000000000815260008251618df981600e850160208701617990565b7f206d75737420626520696e2074686520666f726d6174204d79436f6e74726163600e9390910192830152507f742e736f6c3a4d79436f6e7472616374206f72204d79436f6e74726163742e73602e8201527f6f6c206f72206f75742f4d79436f6e74726163742e736f6c2f4d79436f6e7472604e8201527f6163742e6a736f6e000000000000000000000000000000000000000000000000606e820152607601919050565b80820180821115613729576137296180ee565b7f53504458206c6963656e7365206964656e746966696572200000000000000000815260008351618eea816018850160208801617990565b7f20696e20000000000000000000000000000000000000000000000000000000006018918401918201528351618f2781601c840160208801617990565b7f20646f6573206e6f74206c6f6f6b206c696b65206120737570706f7274656420601c92909101918201527f6c6963656e736520666f7220626c6f636b206578706c6f726572207665726966603c8201527f69636174696f6e2e205573652074686520606c6963656e73655479706560206f605c8201527f7074696f6e20746f20737065636966792061206c6963656e736520747970652c607c8201527f206f7220736574207468652060736b69704c6963656e73655479706560206f70609c8201527f74696f6e20746f2060747275656020746f20736b69702e00000000000000000060bc82015260d301949350505050565b6000825161902d818460208701617990565b7f2000000000000000000000000000000000000000000000000000000000000000920191825250600101919050565b7f406f70656e7a657070656c696e2f75706772616465732d636f7265400000000081526000825161909481601c850160208701617990565b91909101601c0192915050565b600060001982036190b4576190b46180ee565b5060010190565b8082028115828204841417613729576137296180ee565b6001815b600184111561910d578085048111156190f1576190f16180ee565b60018416156190ff57908102905b60019390931c9280026190d6565b935093915050565b60008261912457506001613729565b8161913157506000613729565b816001811461914757600281146191515761916d565b6001915050613729565b60ff841115619162576191626180ee565b50506001821b613729565b5060208310610133831016604e8410600b8410161715619190575081810a613729565b61919d60001984846190d2565b80600019048211156191b1576191b16180ee565b029392505050565b600061382a8383619115565b6000816191d4576191d46180ee565b506000190190565b600083516191ee818460208801617990565b7f3a000000000000000000000000000000000000000000000000000000000000009083019081528351619228816001840160208801617990565b01600101949350505050565b8181036000831280158383131683831282161715616aee57616aee6180ee56fe608060405234801561001057600080fd5b50604051610c9f380380610c9f83398101604081905261002f9161010d565b8181600361003d83826101ff565b50600461004a82826101ff565b50505050506102bd565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261007b57600080fd5b81516001600160401b0381111561009457610094610054565b604051601f8201601f19908116603f011681016001600160401b03811182821017156100c2576100c2610054565b6040528181528382016020018510156100da57600080fd5b60005b828110156100f9576020818601810151838301820152016100dd565b506000918101602001919091529392505050565b6000806040838503121561012057600080fd5b82516001600160401b0381111561013657600080fd5b6101428582860161006a565b602085015190935090506001600160401b0381111561016057600080fd5b61016c8582860161006a565b9150509250929050565b600181811c9082168061018a57607f821691505b6020821081036101aa57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156101fa57806000526020600020601f840160051c810160208510156101d75750805b601f840160051c820191505b818110156101f757600081556001016101e3565b50505b505050565b81516001600160401b0381111561021857610218610054565b61022c816102268454610176565b846101b0565b6020601f82116001811461026057600083156102485750848201515b600019600385901b1c1916600184901b1784556101f7565b600084815260208120601f198516915b828110156102905787850151825560209485019460019092019101610270565b50848210156102ae5786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b6109d3806102cc6000396000f3fe608060405234801561001057600080fd5b50600436106100be5760003560e01c806340c10f191161007657806395d89b411161005b57806395d89b4114610183578063a9059cbb1461018b578063dd62ed3e1461019e57600080fd5b806340c10f191461013857806370a082311461014d57600080fd5b806318160ddd116100a757806318160ddd1461010457806323b872dd14610116578063313ce5671461012957600080fd5b806306fdde03146100c3578063095ea7b3146100e1575b600080fd5b6100cb6101e4565b6040516100d891906107bf565b60405180910390f35b6100f46100ef366004610854565b610276565b60405190151581526020016100d8565b6002545b6040519081526020016100d8565b6100f461012436600461087e565b610290565b604051601281526020016100d8565b61014b610146366004610854565b6102b4565b005b61010861015b3660046108bb565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6100cb6102c2565b6100f4610199366004610854565b6102d1565b6101086101ac3660046108dd565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6060600380546101f390610910565b80601f016020809104026020016040519081016040528092919081815260200182805461021f90610910565b801561026c5780601f106102415761010080835404028352916020019161026c565b820191906000526020600020905b81548152906001019060200180831161024f57829003601f168201915b5050505050905090565b6000336102848185856102df565b60019150505b92915050565b60003361029e8582856102f1565b6102a98585856103c5565b506001949350505050565b6102be8282610470565b5050565b6060600480546101f390610910565b6000336102848185856103c5565b6102ec83838360016104cc565b505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146103bf57818110156103b0576040517ffb8f41b200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416600482015260248101829052604481018390526064015b60405180910390fd5b6103bf848484840360006104cc565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8316610415576040517f96c6fd1e000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff8216610465576040517fec442f05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b6102ec838383610614565b73ffffffffffffffffffffffffffffffffffffffff82166104c0576040517fec442f05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b6102be60008383610614565b73ffffffffffffffffffffffffffffffffffffffff841661051c576040517fe602df05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff831661056c576040517f94280d62000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260016020908152604080832093871683529290522082905580156103bf578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161060691815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff831661064c5780600260008282546106419190610963565b909155506106fe9050565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260208190526040902054818110156106d2576040517fe450d38c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8516600482015260248101829052604481018390526064016103a7565b73ffffffffffffffffffffffffffffffffffffffff841660009081526020819052604090209082900390555b73ffffffffffffffffffffffffffffffffffffffff821661072757600280548290039055610753565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090208054820190555b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516107b291815260200190565b60405180910390a3505050565b602081526000825180602084015260005b818110156107ed57602081860181015160408684010152016107d0565b5060006040828501015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011684010191505092915050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461084f57600080fd5b919050565b6000806040838503121561086757600080fd5b6108708361082b565b946020939093013593505050565b60008060006060848603121561089357600080fd5b61089c8461082b565b92506108aa6020850161082b565b929592945050506040919091013590565b6000602082840312156108cd57600080fd5b6108d68261082b565b9392505050565b600080604083850312156108f057600080fd5b6108f98361082b565b91506109076020840161082b565b90509250929050565b600181811c9082168061092457607f821691505b60208210810361095d577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b8082018082111561028a577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea26469706673582212207e804ca539d49155d2b6bc19268ce22f9f857027c75247d69fb0d56a089c93d464736f6c634300081a003360a060405234801561001057600080fd5b5060405161179838038061179883398101604081905261002f916101e5565b60016000556002805460ff191690556001600160a01b038316158061005b57506001600160a01b038216155b8061006d57506001600160a01b038116155b1561008b5760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b0383166080526100a3600082610134565b506100ce7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a82610134565b506100f97f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e483610134565b5061011260008051602061177883398151915282610134565b5061012b60008051602061177883398151915283610134565b50505050610228565b60008281526001602090815260408083206001600160a01b038516845290915281205460ff166101bf5760008381526001602081815260408084206001600160a01b0387168086529252808420805460ff19169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45060016101c3565b5060005b92915050565b80516001600160a01b03811681146101e057600080fd5b919050565b6000806000606084860312156101fa57600080fd5b610203846101c9565b9250610211602085016101c9565b915061021f604085016101c9565b90509250925092565b60805161151961025f6000396000818161019e01528181610500015281816105620152818161099101526109f301526115196000f3fe608060405234801561001057600080fd5b506004361061016c5760003560e01c806385f438c1116100cd578063c8a0236211610081578063d936547e11610066578063d936547e14610355578063d9caed1214610378578063e63ab1e91461038b57600080fd5b8063c8a023621461032f578063d547741f1461034257600080fd5b80639a590427116100b25780639a590427146103015780639b19251a14610314578063a217fddf1461032757600080fd5b806385f438c11461029457806391d14854146102bb57600080fd5b806336568abe11610124578063570618e111610109578063570618e11461025a5780635c975abb146102815780638456cb591461028c57600080fd5b806336568abe1461023f5780633f4ba83a1461025257600080fd5b806321fc65f21161015557806321fc65f2146101e5578063248a9ca3146101fa5780632f2ff15d1461022c57600080fd5b806301ffc9a714610171578063116191b614610199575b600080fd5b61018461017f366004611224565b6103b2565b60405190151581526020015b60405180910390f35b6101c07f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610190565b6101f86101f336600461128f565b61044b565b005b61021e61020836600461132c565b6000908152600160208190526040909120015490565b604051908152602001610190565b6101f861023a366004611345565b61064c565b6101f861024d366004611345565b610678565b6101f86106d6565b61021e7f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a81565b60025460ff16610184565b6101f861070b565b61021e7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b6101846102c9366004611345565b600091825260016020908152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b6101f861030f366004611371565b61073d565b6101f8610322366004611371565b61080b565b61021e600081565b6101f861033d36600461128f565b6108dc565b6101f8610350366004611345565b610ac3565b610184610363366004611371565b60036020526000908152604090205460ff1681565b6101f861038636600461138c565b610ae9565b61021e7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061044557507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b610453610c15565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461047d81610c58565b610485610c62565b73ffffffffffffffffffffffffffffffffffffffff861660009081526003602052604090205460ff166104e4576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61052573ffffffffffffffffffffffffffffffffffffffff87167f000000000000000000000000000000000000000000000000000000000000000086610ca1565b6040517f5131ab5900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690635131ab599061059f9089908990899089908990600401611412565b600060405180830381600087803b1580156105b957600080fd5b505af11580156105cd573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167f85b5be9cf454e05e0bddf49315178102227c312078eefa3c00294fb4d912ae4e8686866040516106329392919061146f565b60405180910390a3506106456001600055565b5050505050565b6000828152600160208190526040909120015461066881610c58565b6106728383610d2e565b50505050565b73ffffffffffffffffffffffffffffffffffffffff811633146106c7576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6106d18282610ddb565b505050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61070081610c58565b610708610e7c565b50565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61073581610c58565b610708610edb565b7f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a61076781610c58565b73ffffffffffffffffffffffffffffffffffffffff82166107b4576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216600081815260036020526040808220805460ff19169055517f51085ddf9ebdded84b76e829eb58c4078e4b5bdf97d9a94723f336039da467919190a25050565b7f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a61083581610c58565b73ffffffffffffffffffffffffffffffffffffffff8216610882576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216600081815260036020526040808220805460ff19166001179055517faab7954e9d246b167ef88aeddad35209ca2489d95a8aeb59e288d9b19fae5a549190a25050565b6108e4610c15565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461090e81610c58565b610916610c62565b73ffffffffffffffffffffffffffffffffffffffff861660009081526003602052604090205460ff16610975576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6109b673ffffffffffffffffffffffffffffffffffffffff87167f000000000000000000000000000000000000000000000000000000000000000086610ca1565b6040517fb8969bd400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063b8969bd490610a309089908990899089908990600401611412565b600060405180830381600087803b158015610a4a57600080fd5b505af1158015610a5e573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fb9d4efa96044e5f5e03e696fa9ae2ff66911cc27e8a637c3627c75bc5b2241c88686866040516106329392919061146f565b60008281526001602081905260409091200154610adf81610c58565b6106728383610ddb565b610af1610c15565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e4610b1b81610c58565b610b23610c62565b73ffffffffffffffffffffffffffffffffffffffff841660009081526003602052604090205460ff16610b82576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610ba373ffffffffffffffffffffffffffffffffffffffff85168484610ca1565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f9b1bfa7fa9ee420a16e124f794c35ac9f90472acc99140eb2f6447c714cad8eb84604051610c0291815260200190565b60405180910390a3506106d16001600055565b600260005403610c51576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b6107088133610f18565b60025460ff1615610c9f576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6040805173ffffffffffffffffffffffffffffffffffffffff8416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb000000000000000000000000000000000000000000000000000000001790526106d1908490610fa9565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff16610dd357600083815260016020818152604080842073ffffffffffffffffffffffffffffffffffffffff87168086529252808420805460ff19169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a4506001610445565b506000610445565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff1615610dd357600083815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff86168085529252808320805460ff1916905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a4506001610445565b610e8461103f565b6002805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b610ee3610c62565b6002805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258610eb13390565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16610fa5576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82166004820152602481018390526044015b60405180910390fd5b5050565b6000610fcb73ffffffffffffffffffffffffffffffffffffffff84168361107b565b90508051600014158015610ff0575080806020019051810190610fee9190611492565b155b156106d1576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84166004820152602401610f9c565b60025460ff16610c9f576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606061108983836000611090565b9392505050565b6060814710156110ce576040517fcd786059000000000000000000000000000000000000000000000000000000008152306004820152602401610f9c565b6000808573ffffffffffffffffffffffffffffffffffffffff1684866040516110f791906114b4565b60006040518083038185875af1925050503d8060008114611134576040519150601f19603f3d011682016040523d82523d6000602084013e611139565b606091505b5091509150611149868383611153565b9695505050505050565b60608261116857611163826111e2565b611089565b815115801561118c575073ffffffffffffffffffffffffffffffffffffffff84163b155b156111db576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85166004820152602401610f9c565b5080611089565b8051156111f25780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006020828403121561123657600080fd5b81357fffffffff000000000000000000000000000000000000000000000000000000008116811461108957600080fd5b803573ffffffffffffffffffffffffffffffffffffffff8116811461128a57600080fd5b919050565b6000806000806000608086880312156112a757600080fd5b6112b086611266565b94506112be60208701611266565b935060408601359250606086013567ffffffffffffffff8111156112e157600080fd5b8601601f810188136112f257600080fd5b803567ffffffffffffffff81111561130957600080fd5b88602082840101111561131b57600080fd5b959894975092955050506020019190565b60006020828403121561133e57600080fd5b5035919050565b6000806040838503121561135857600080fd5b8235915061136860208401611266565b90509250929050565b60006020828403121561138357600080fd5b61108982611266565b6000806000606084860312156113a157600080fd5b6113aa84611266565b92506113b860208501611266565b929592945050506040919091013590565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff8616815273ffffffffffffffffffffffffffffffffffffffff851660208201528360408201526080606082015260006114646080830184866113c9565b979650505050505050565b8381526040602082015260006114896040830184866113c9565b95945050505050565b6000602082840312156114a457600080fd5b8151801515811461108957600080fd5b6000825160005b818110156114d557602081860181015185830152016114bb565b50600092019182525091905056fea26469706673582212207ea3ad4ba4a6d39c3be3cec464753448900300ac3b508b4000815de5b914c53064736f6c634300081a00338619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a60c060405260001960035534801561001657600080fd5b5060405161155a38038061155a83398101604081905261003591610220565b60016000819055805460ff19169055838383836001600160a01b038416158061006557506001600160a01b038316155b8061007757506001600160a01b038216155b8061008957506001600160a01b038116155b156100a75760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b03808516608052831660a0526100c5600082610154565b506100f07f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e483610154565b5061011b7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb83610154565b506101467f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a82610154565b505050505050505050610274565b60008281526002602090815260408083206001600160a01b038516845290915281205460ff166101fa5760008381526002602090815260408083206001600160a01b03861684529091529020805460ff191660011790556101b23390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45060016101fe565b5060005b92915050565b80516001600160a01b038116811461021b57600080fd5b919050565b6000806000806080858703121561023657600080fd5b61023f85610204565b935061024d60208601610204565b925061025b60408601610204565b915061026960608601610204565b905092959194509250565b60805160a0516112826102d86000396000818161021d01528181610531015281816108240152818161097b01528181610ad00152610bf20152600081816101d1015281816104a1015281816105040152818161079401526107f701526112826000f3fe608060405234801561001057600080fd5b50600436106101775760003560e01c80635e3e9fef116100d857806391d148541161008c578063d547741f11610066578063d547741f14610386578063d5abeb0114610399578063e63ab1e9146103a257600080fd5b806391d1485414610311578063a217fddf14610357578063a783c7891461035f57600080fd5b8063743e0c9b116100bd578063743e0c9b146102cf5780638456cb59146102e257806385f438c1146102ea57600080fd5b80635e3e9fef146102a95780636f8b44b0146102bc57600080fd5b8063248a9ca31161012f57806336568abe1161011457806336568abe146102835780633f4ba83a146102965780635c975abb1461029e57600080fd5b8063248a9ca31461023f5780632f2ff15d1461027057600080fd5b8063106e629011610160578063106e6290146101b9578063116191b6146101cc57806321e093b11461021857600080fd5b806301ffc9a71461017c57806302d5c899146101a4575b600080fd5b61018f61018a366004610fb4565b6103c9565b60405190151581526020015b60405180910390f35b6101b76101b2366004611026565b610462565b005b6101b76101c73660046110b8565b6105f7565b6101f37f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161019b565b6101f37f000000000000000000000000000000000000000000000000000000000000000081565b61026261024d3660046110eb565b60009081526002602052604090206001015490565b60405190815260200161019b565b6101b761027e366004611104565b61069c565b6101b7610291366004611104565b6106c7565b6101b7610720565b60015460ff1661018f565b6101b76102b7366004611026565b610755565b6101b76102ca3660046110eb565b6108d0565b6101b76102dd3660046110eb565b61093e565b6101b76109e8565b6102627f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b61018f61031f366004611104565b600091825260026020908152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b610262600081565b6102627f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb81565b6101b7610394366004611104565b610a1a565b61026260035481565b6102627f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061045c57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b61046a610a3f565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461049481610a82565b61049c610a8c565b6104c77f00000000000000000000000000000000000000000000000000000000000000008684610acb565b6040517fb8969bd400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063b8969bd490610561907f0000000000000000000000000000000000000000000000000000000000000000908a908a908a908a90600401611179565b600060405180830381600087803b15801561057b57600080fd5b505af115801561058f573d6000803e3d6000fd5b505050508573ffffffffffffffffffffffffffffffffffffffff167fba96f26bdda53eb8c8ba39045dfb4ff39753fbc7a6edcf250a88e75e78d102fe8686866040516105dd939291906111d6565b60405180910390a2506105f06001600055565b5050505050565b6105ff610a3f565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461062981610a82565b610631610a8c565b61063c848484610acb565b8373ffffffffffffffffffffffffffffffffffffffff167f884edad9ce6fa2440d8a54cc123490eb96d2768479d49ff9c7366125a94243648460405161068491815260200190565b60405180910390a2506106976001600055565b505050565b6000828152600260205260409020600101546106b781610a82565b6106c18383610c53565b50505050565b73ffffffffffffffffffffffffffffffffffffffff81163314610716576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6106978282610d53565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61074a81610a82565b610752610e12565b50565b61075d610a3f565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461078781610a82565b61078f610a8c565b6107ba7f00000000000000000000000000000000000000000000000000000000000000008684610acb565b6040517f5131ab5900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690635131ab5990610854907f0000000000000000000000000000000000000000000000000000000000000000908a908a908a908a90600401611179565b600060405180830381600087803b15801561086e57600080fd5b505af1158015610882573d6000803e3d6000fd5b505050508573ffffffffffffffffffffffffffffffffffffffff167f7772f56296d3a5202974a45c61c9188d844ab4d6eeb18c851e4b8d5384ca6ced8686866040516105dd939291906111d6565b7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb6108fa81610a82565b610902610a8c565b60038290556040518281527f7810bd47de260c3e9ee10061cf438099dd12256c79485f12f94dbccc981e806c9060200160405180910390a15050565b610946610a8c565b6040517f79cc6790000000000000000000000000000000000000000000000000000000008152336004820152602481018290527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16906379cc679090604401600060405180830381600087803b1580156109d457600080fd5b505af11580156105f0573d6000803e3d6000fd5b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610a1281610a82565b610752610e8f565b600082815260026020526040902060010154610a3581610a82565b6106c18383610d53565b600260005403610a7b576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b6107528133610ee8565b60015460ff1615610ac9576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6003547f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b39573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b5d91906111f9565b610b679084611212565b1115610b9f576040517fc30436e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f1e458bee00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff848116600483015260248201849052604482018390527f00000000000000000000000000000000000000000000000000000000000000001690631e458bee90606401600060405180830381600087803b158015610c3657600080fd5b505af1158015610c4a573d6000803e3d6000fd5b50505050505050565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff16610d4b57600083815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff86168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055610ce93390565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a450600161045c565b50600061045c565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff1615610d4b57600083815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8616808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a450600161045c565b610e1a610f78565b600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b610e97610a8c565b600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016811790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25833610e65565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16610f74576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff821660048201526024810183905260440160405180910390fd5b5050565b60015460ff16610ac9576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060208284031215610fc657600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610ff657600080fd5b9392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461102157600080fd5b919050565b60008060008060006080868803121561103e57600080fd5b61104786610ffd565b945060208601359350604086013567ffffffffffffffff81111561106a57600080fd5b8601601f8101881361107b57600080fd5b803567ffffffffffffffff81111561109257600080fd5b8860208284010111156110a457600080fd5b959894975060200195606001359392505050565b6000806000606084860312156110cd57600080fd5b6110d684610ffd565b95602085013595506040909401359392505050565b6000602082840312156110fd57600080fd5b5035919050565b6000806040838503121561111757600080fd5b8235915061112760208401610ffd565b90509250929050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff8616815273ffffffffffffffffffffffffffffffffffffffff851660208201528360408201526080606082015260006111cb608083018486611130565b979650505050505050565b8381526040602082015260006111f0604083018486611130565b95945050505050565b60006020828403121561120b57600080fd5b5051919050565b8082018082111561045c577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea2646970667358221220de5fa55e0ca79ea2f08903481d01ea00bbbf346b9cfba44e12a2dd6f3a6f2e8a64736f6c634300081a00336080604052348015600f57600080fd5b506001600055610d3a806100246000396000f3fe6080604052600436106100635760003560e01c8063c513169111610040578063c5131691146100c1578063e04d4f97146100e1578063f05b6abf146100f457005b8063357fc5a21461006c5780636ed701691461008c5780638fcaa0b5146100a157005b3661006a57005b005b34801561007857600080fd5b5061006a6100873660046106c0565b610114565b34801561009857600080fd5b5061006a6101aa565b3480156100ad57600080fd5b5061006a6100bc3660046106fc565b6101df565b3480156100cd57600080fd5b5061006a6100dc3660046106c0565b61021e565b61006a6100ef366004610895565b6102f9565b34801561010057600080fd5b5061006a61010f366004610981565b61033d565b61011c610372565b61013e73ffffffffffffffffffffffffffffffffffffffff83163383866103b5565b604080513381526020810185905273ffffffffffffffffffffffffffffffffffffffff848116828401528316606082015290517f2b58128f24a9f59127cc5b5430d70542b22220f2d9adaa86e442b816ab98af609181900360800190a16101a56001600055565b505050565b6040513381527fbcaadb46b82a48af60b608f58959ae6b8310d1b0a0d094c2e9ec3208ed39f2a09060200160405180910390a1565b7f0d3f65f00e631663aa85c96330b5c7a83bb29af3630c0063776f985edc3037aa33838360405161021293929190610a6b565b60405180910390a15050565b610226610372565b6000610233600285610ad5565b90508060000361026f576040517f1f2a200500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61029173ffffffffffffffffffffffffffffffffffffffff84163384846103b5565b604080513381526020810183905273ffffffffffffffffffffffffffffffffffffffff858116828401528416606082015290517f2b58128f24a9f59127cc5b5430d70542b22220f2d9adaa86e442b816ab98af609181900360800190a1506101a56001600055565b7f1f1ff1f5fb41346850b2f5c04e6c767e2f1c8a525c5c0c5cdb60cdf3ca5f62fa3334858585604051610330959493929190610b7e565b60405180910390a1505050565b7f74a53cd528a921fca7dbdee62f86819051d3cc98f214951f4238e8843f20b146338484846040516103309493929190610c08565b6002600054036103ae576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b6040805173ffffffffffffffffffffffffffffffffffffffff85811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd0000000000000000000000000000000000000000000000000000000017905261044a908590610450565b50505050565b600061047273ffffffffffffffffffffffffffffffffffffffff8416836104eb565b905080516000141580156104975750808060200190518101906104959190610ccb565b155b156101a5576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff841660048201526024015b60405180910390fd5b60606104f983836000610500565b9392505050565b60608147101561053e576040517fcd7860590000000000000000000000000000000000000000000000000000000081523060048201526024016104e2565b6000808573ffffffffffffffffffffffffffffffffffffffff1684866040516105679190610ce8565b60006040518083038185875af1925050503d80600081146105a4576040519150601f19603f3d011682016040523d82523d6000602084013e6105a9565b606091505b50915091506105b98683836105c3565b9695505050505050565b6060826105d8576105d382610652565b6104f9565b81511580156105fc575073ffffffffffffffffffffffffffffffffffffffff84163b155b1561064b576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff851660048201526024016104e2565b50806104f9565b8051156106625780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50565b803573ffffffffffffffffffffffffffffffffffffffff811681146106bb57600080fd5b919050565b6000806000606084860312156106d557600080fd5b833592506106e560208501610697565b91506106f360408501610697565b90509250925092565b6000806020838503121561070f57600080fd5b823567ffffffffffffffff81111561072657600080fd5b8301601f8101851361073757600080fd5b803567ffffffffffffffff81111561074e57600080fd5b85602082840101111561076057600080fd5b6020919091019590945092505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156107e6576107e6610770565b604052919050565b600082601f8301126107ff57600080fd5b813567ffffffffffffffff81111561081957610819610770565b61084a60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8401160161079f565b81815284602083860101111561085f57600080fd5b816020850160208301376000918101602001919091529392505050565b801515811461069457600080fd5b80356106bb8161087c565b6000806000606084860312156108aa57600080fd5b833567ffffffffffffffff8111156108c157600080fd5b6108cd868287016107ee565b9350506020840135915060408401356108e58161087c565b809150509250925092565b600067ffffffffffffffff82111561090a5761090a610770565b5060051b60200190565b600082601f83011261092557600080fd5b8135610938610933826108f0565b61079f565b8082825260208201915060208360051b86010192508583111561095a57600080fd5b602085015b8381101561097757803583526020928301920161095f565b5095945050505050565b60008060006060848603121561099657600080fd5b833567ffffffffffffffff8111156109ad57600080fd5b8401601f810186136109be57600080fd5b80356109cc610933826108f0565b8082825260208201915060208360051b8501019250888311156109ee57600080fd5b602084015b83811015610a3057803567ffffffffffffffff811115610a1257600080fd5b610a218b6020838901016107ee565b845250602092830192016109f3565b509550505050602084013567ffffffffffffffff811115610a5057600080fd5b610a5c86828701610914565b9250506106f36040850161088a565b73ffffffffffffffffffffffffffffffffffffffff8416815260406020820152816040820152818360608301376000818301606090810191909152601f9092017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016010192915050565b600082610b0b577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60005b83811015610b2b578181015183820152602001610b13565b50506000910152565b60008151808452610b4c816020860160208601610b10565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b73ffffffffffffffffffffffffffffffffffffffff8616815284602082015260a060408201526000610bb360a0830186610b34565b6060830194909452509015156080909101529392505050565b600081518084526020840193506020830160005b82811015610bfe578151865260209586019590910190600101610be0565b5093949350505050565b60006080820173ffffffffffffffffffffffffffffffffffffffff871683526080602084015280865180835260a08501915060a08160051b86010192506020880160005b82811015610c9b577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60878603018452610c86858351610b34565b94506020938401939190910190600101610c4c565b505050508281036040840152610cb18186610bcc565b915050610cc2606083018415159052565b95945050505050565b600060208284031215610cdd57600080fd5b81516104f98161087c565b60008251610cfa818460208701610b10565b919091019291505056fea2646970667358221220556072e1abafc3c4063b8cce832228b4f309b93726aaa6a6dfab20cb880c6d1864736f6c634300081a00336080604052348015600f57600080fd5b5060405161080c38038061080c833981016040819052602c916050565b600080546001600160a01b0319166001600160a01b0392909216919091179055607e565b600060208284031215606157600080fd5b81516001600160a01b0381168114607757600080fd5b9392505050565b61077f8061008d6000396000f3fe608060405234801561001057600080fd5b50600436106100415760003560e01c80630abd890514610046578063116191b61461005b578063865b36f6146100a4575b600080fd5b6100596100543660046104c4565b6100b7565b005b60005461007b9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b6100596100b236600461057f565b6102af565b60008383836040516024016100ce93929190610674565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe04d4f970000000000000000000000000000000000000000000000000000000017905260005490517f095ea7b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff91821660048201526024810189905291925086169063095ea7b3906044016020604051808303816000875af11580156101be573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101e2919061069e565b610218576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000546040517f7993c1e000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff90911690637993c1e090610274908a908a908a9087906004016106c2565b600060405180830381600087803b15801561028e57600080fd5b505af11580156102a2573d6000803e3d6000fd5b5050505050505050505050565b60008383836040516024016102c693929190610674565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe04d4f970000000000000000000000000000000000000000000000000000000017905260005490517f5d40e17800000000000000000000000000000000000000000000000000000000815291925073ffffffffffffffffffffffffffffffffffffffff1690635d40e1789061039690899089908690600401610714565b600060405180830381600087803b1580156103b057600080fd5b505af11580156103c4573d6000803e3d6000fd5b50505050505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600082601f83011261041057600080fd5b81356020830160008067ffffffffffffffff841115610431576104316103d0565b506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f85018116603f0116810181811067ffffffffffffffff8211171561047e5761047e6103d0565b60405283815290508082840187101561049657600080fd5b838360208301376000602085830101528094505050505092915050565b80151581146104c157600080fd5b50565b60008060008060008060c087890312156104dd57600080fd5b863567ffffffffffffffff8111156104f457600080fd5b61050089828a016103ff565b96505060208701359450604087013573ffffffffffffffffffffffffffffffffffffffff8116811461053157600080fd5b9350606087013567ffffffffffffffff81111561054d57600080fd5b61055989828a016103ff565b9350506080870135915060a0870135610571816104b3565b809150509295509295509295565b600080600080600060a0868803121561059757600080fd5b853567ffffffffffffffff8111156105ae57600080fd5b6105ba888289016103ff565b95505060208601359350604086013567ffffffffffffffff8111156105de57600080fd5b6105ea888289016103ff565b935050606086013591506080860135610602816104b3565b809150509295509295909350565b6000815180845260005b818110156106365760208185018101518683018201520161061a565b5060006020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b6060815260006106876060830186610610565b602083019490945250901515604090910152919050565b6000602082840312156106b057600080fd5b81516106bb816104b3565b9392505050565b6080815260006106d56080830187610610565b85602084015273ffffffffffffffffffffffffffffffffffffffff8516604084015282810360608401526107098185610610565b979650505050505050565b6060815260006107276060830186610610565b846020840152828103604084015261073f8185610610565b969550505050505056fea2646970667358221220913e9e4f584646fcff086caec1531d2f19fc055665166453bbf086af95b2e48464736f6c634300081a0033608060405234801561001057600080fd5b50604051610b3f380380610b3f83398101604081905261002f916100b9565b600380546001600160a01b038086166001600160a01b0319928316179092556004805485841690831617905560058054928416929091169190911790556040517f80699e81136d69cb8367ad52a994e25c722a86da654b561d0c14b61a777e7ac590600090a15050506100fc565b80516001600160a01b03811681146100b457600080fd5b919050565b6000806000606084860312156100ce57600080fd5b6100d78461009d565b92506100e56020850161009d565b91506100f36040850161009d565b90509250925092565b610a348061010b6000396000f3fe608060405234801561001057600080fd5b50600436106100c95760003560e01c806397770dff11610081578063d7fd7afb1161005b578063d7fd7afb146101f2578063d936a01214610220578063ee2815ba1461024057600080fd5b806397770dff146101b9578063a7cb0507146101cc578063c63585cc146101df57600080fd5b8063513a9c05116100b2578063513a9c0514610143578063569541b914610179578063842da36d1461019957600080fd5b80630be15547146100ce5780633c669d551461012e575b600080fd5b6101046100dc36600461071e565b60016020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b61014161013c366004610760565b610253565b005b61010461015136600461071e565b60026020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b6003546101049073ffffffffffffffffffffffffffffffffffffffff1681565b6005546101049073ffffffffffffffffffffffffffffffffffffffff1681565b6101416101c73660046107fd565b6103a0565b6101416101da36600461081f565b610419565b6101046101ed366004610841565b610467565b61021261020036600461071e565b60006020819052908152604090205481565b604051908152602001610125565b6004546101049073ffffffffffffffffffffffffffffffffffffffff1681565b61014161024e366004610884565b61059c565b604080516080810182526000606082019081528152336020820152468183015290517fa9059cbb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff87811660048301526024820186905286169063a9059cbb906044016020604051808303816000875af11580156102e7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061030b91906108b0565b506040517fde43156e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff87169063de43156e90610366908490899089908990899060040161091b565b600060405180830381600087803b15801561038057600080fd5b505af1158015610394573d6000803e3d6000fd5b50505050505050505050565b600380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527fdba79d534382d1a8ae108e4c8ecb27c6ae42ab8b91d44eedf88bd329f3868d5e9060200160405180910390a150565b6000828152602081815260409182902083905581518481529081018390527f49f492222906ac486c3c1401fa545626df1f0c0e5a77a05597ea2ed66af9850d91015b60405180910390a15050565b60008060006104768585610620565b6040517fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606084811b8216602084015283901b166034820152919350915086906048016040516020818303038152906040528051906020012060405160200161055c9291907fff00000000000000000000000000000000000000000000000000000000000000815260609290921b7fffffffffffffffffffffffffffffffffffffffff00000000000000000000000016600183015260158201527f96e8ac4277198ff8b6f785478aa9a39f403cb768dd02cbee326c3e7da348845f603582015260550190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291905280516020909101209695505050505050565b60008281526001602090815260409182902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff85169081179091558251858152918201527fd1b36d30f6248e97c473b4d1348ca164a4ef6759022f54a58ec200326c39c45d910161045b565b6000808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603610688576040517fcb1e7cfe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16106106c25782846106c5565b83835b909250905073ffffffffffffffffffffffffffffffffffffffff8216610717576040517f78b507da00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b9250929050565b60006020828403121561073057600080fd5b5035919050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461075b57600080fd5b919050565b60008060008060006080868803121561077857600080fd5b61078186610737565b945061078f60208701610737565b935060408601359250606086013567ffffffffffffffff8111156107b257600080fd5b8601601f810188136107c357600080fd5b803567ffffffffffffffff8111156107da57600080fd5b8860208284010111156107ec57600080fd5b959894975092955050506020019190565b60006020828403121561080f57600080fd5b61081882610737565b9392505050565b6000806040838503121561083257600080fd5b50508035926020909101359150565b60008060006060848603121561085657600080fd5b61085f84610737565b925061086d60208501610737565b915061087b60408501610737565b90509250925092565b6000806040838503121561089757600080fd5b823591506108a760208401610737565b90509250929050565b6000602082840312156108c257600080fd5b8151801515811461081857600080fd5b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b60808152600086516060608084015280518060e085015260005b81811015610953576020818401810151610100878401015201610935565b5060008482016101000152602089015173ffffffffffffffffffffffffffffffffffffffff811660a0860152601f9091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168401915050604088015160c084015273ffffffffffffffffffffffffffffffffffffffff871660208401528560408401526101008382030160608401526109f2610100820185876108d2565b9897505050505050505056fea26469706673582212206b99774936066d66e673847cda232c1a8b90636b82cb2d9c47172da97ac4570a64736f6c634300081a003360e060405234801561001057600080fd5b50604051611bb9380380611bb983398101604081905261002f9161020e565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461006357604051632b2add3d60e01b815260040160405180910390fd5b6001600160a01b038216158061008057506001600160a01b038116155b1561009e5760405163d92e233d60e01b815260040160405180910390fd5b60066100aa8982610360565b5060076100b78882610360565b5060ff861660c05260808590528360028111156100d6576100d661041e565b60a08160028111156100ea576100ea61041e565b905250600192909255600080546001600160a01b039283166001600160a01b03199182161790915560088054929093169116179055506104349350505050565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261015157600080fd5b81516001600160401b0381111561016a5761016a61012a565b604051601f8201601f19908116603f011681016001600160401b03811182821017156101985761019861012a565b6040528181528382016020018510156101b057600080fd5b60005b828110156101cf576020818601810151838301820152016101b3565b506000918101602001919091529392505050565b8051600381106101f257600080fd5b919050565b80516001600160a01b03811681146101f257600080fd5b600080600080600080600080610100898b03121561022b57600080fd5b88516001600160401b0381111561024157600080fd5b61024d8b828c01610140565b60208b015190995090506001600160401b0381111561026b57600080fd5b6102778b828c01610140565b975050604089015160ff8116811461028e57600080fd5b60608a015190965094506102a460808a016101e3565b60a08a015190945092506102ba60c08a016101f7565b91506102c860e08a016101f7565b90509295985092959890939650565b600181811c908216806102eb57607f821691505b60208210810361030b57634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111561035b57806000526020600020601f840160051c810160208510156103385750805b601f840160051c820191505b818110156103585760008155600101610344565b50505b505050565b81516001600160401b038111156103795761037961012a565b61038d8161038784546102d7565b84610311565b6020601f8211600181146103c157600083156103a95750848201515b600019600385901b1c1916600184901b178455610358565b600084815260208120601f198516915b828110156103f157878501518255602094850194600190920191016103d1565b508482101561040f5786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b634e487b7160e01b600052602160045260246000fd5b60805160a05160c05161174861047160003960006102170152600061033a0152600081816102eb01528181610ad70152610bdd01526117486000f3fe608060405234801561001057600080fd5b50600436106101985760003560e01c80638b851b95116100e3578063ccc775991161008c578063eddeb12311610066578063eddeb12314610431578063f2441b3214610444578063f687d12a1461046457600080fd5b8063ccc77599146103a4578063d9eeebed146103b7578063dd62ed3e146103eb57600080fd5b8063a9059cbb116100bd578063a9059cbb14610369578063c70126261461037c578063c835d7cc1461038f57600080fd5b80638b851b951461030d57806395d89b411461032d578063a3413d031461033557600080fd5b80633ce4a5bc116101455780634d8943bb1161011f5780634d8943bb146102a757806370a08231146102b057806385e1f4d0146102e657600080fd5b80633ce4a5bc1461024157806342966c681461028157806347e7ef241461029457600080fd5b806318160ddd1161017657806318160ddd146101f557806323b872dd146101fd578063313ce5671461021057600080fd5b806306fdde031461019d578063091d2788146101bb578063095ea7b3146101d2575b600080fd5b6101a5610477565b6040516101b29190611327565b60405180910390f35b6101c460015481565b6040519081526020016101b2565b6101e56101e0366004611366565b610509565b60405190151581526020016101b2565b6005546101c4565b6101e561020b366004611392565b610520565b60405160ff7f00000000000000000000000000000000000000000000000000000000000000001681526020016101b2565b61025c73735b14bb79463307aacbed86daf3322b1e6226ab81565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101b2565b6101e561028f3660046113d3565b6105b7565b6101e56102a2366004611366565b6105cb565b6101c460025481565b6101c46102be3660046113ec565b73ffffffffffffffffffffffffffffffffffffffff1660009081526003602052604090205490565b6101c47f000000000000000000000000000000000000000000000000000000000000000081565b60085461025c9073ffffffffffffffffffffffffffffffffffffffff1681565b6101a561071f565b61035c7f000000000000000000000000000000000000000000000000000000000000000081565b6040516101b29190611409565b6101e5610377366004611366565b61072e565b6101e561038a366004611479565b61073b565b6103a261039d3660046113ec565b61088a565b005b6103a26103b23660046113ec565b61099e565b6103bf610aab565b6040805173ffffffffffffffffffffffffffffffffffffffff90931683526020830191909152016101b2565b6101c46103f9366004611571565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260046020908152604080832093909416825291909152205490565b6103a261043f3660046113d3565b610cc9565b60005461025c9073ffffffffffffffffffffffffffffffffffffffff1681565b6103a26104723660046113d3565b610d4b565b606060068054610486906115aa565b80601f01602080910402602001604051908101604052809291908181526020018280546104b2906115aa565b80156104ff5780601f106104d4576101008083540402835291602001916104ff565b820191906000526020600020905b8154815290600101906020018083116104e257829003601f168201915b5050505050905090565b6000610516338484610dcd565b5060015b92915050565b600061052d848484610ed6565b73ffffffffffffffffffffffffffffffffffffffff8416600090815260046020908152604080832033845290915290205482811015610598576040517f10bad14700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6105ac85336105a7868561162c565b610dcd565b506001949350505050565b60006105c33383611091565b506001919050565b60003373735b14bb79463307aacbed86daf3322b1e6226ab14801590610609575060005473ffffffffffffffffffffffffffffffffffffffff163314155b801561062d575060085473ffffffffffffffffffffffffffffffffffffffff163314155b15610664576040517fddb5de5e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61066e83836111d3565b6040517f735b14bb79463307aacbed86daf3322b1e6226ab000000000000000000000000602082015273ffffffffffffffffffffffffffffffffffffffff8416907f67fc7bdaed5b0ec550d8706b87d60568ab70c6b781263c70101d54cd1564aab390603401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529082905261070e91869061163f565b60405180910390a250600192915050565b606060078054610486906115aa565b6000610516338484610ed6565b6000806000610748610aab565b6040517f23b872dd00000000000000000000000000000000000000000000000000000000815233600482015273735b14bb79463307aacbed86daf3322b1e6226ab602482015260448101829052919350915073ffffffffffffffffffffffffffffffffffffffff8316906323b872dd906064016020604051808303816000875af11580156107da573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107fe9190611661565b610834576040517f0a7cd6d600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61083e3385611091565b60025460405133917f9ffbffc04a397460ee1dbe8c9503e098090567d6b7f4b3c02a8617d800b6d9559161087791899189918791611683565b60405180910390a2506001949350505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab146108d7576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116610924576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527fd55614e962c5fd6ece71614f6348d702468a997a394dd5e5c1677950226d97ae906020015b60405180910390a150565b3373735b14bb79463307aacbed86daf3322b1e6226ab146109eb576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116610a38576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600880547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527f88815d964e380677e86d817e7d65dea59cb7b4c3b5b7a0c8ec7ea4a74f90a38790602001610993565b600080546040517f0be155470000000000000000000000000000000000000000000000000000000081527f000000000000000000000000000000000000000000000000000000000000000060048201528291829173ffffffffffffffffffffffffffffffffffffffff90911690630be1554790602401602060405180830381865afa158015610b3e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b6291906116b2565b905073ffffffffffffffffffffffffffffffffffffffff8116610bb1576040517f78fff39600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080546040517fd7fd7afb0000000000000000000000000000000000000000000000000000000081527f0000000000000000000000000000000000000000000000000000000000000000600482015273ffffffffffffffffffffffffffffffffffffffff9091169063d7fd7afb90602401602060405180830381865afa158015610c40573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c6491906116cf565b905080600003610ca0576040517fe661aed000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060025460015483610cb391906116e8565b610cbd91906116ff565b92959294509192505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610d16576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60028190556040518181527fef13af88e424b5d15f49c77758542c1938b08b8b95b91ed0751f98ba99000d8f90602001610993565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610d98576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018190556040518181527fff5788270f43bfc1ca41c503606d2594aa3023a1a7547de403a3e2f146a4a80a90602001610993565b73ffffffffffffffffffffffffffffffffffffffff8316610e1a576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216610e67576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff83811660008181526004602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8316610f23576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216610f70576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff831660009081526003602052604090205481811015610fd0576040517ffe382aa700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610fda828261162c565b73ffffffffffffffffffffffffffffffffffffffff808616600090815260036020526040808220939093559085168152908120805484929061101d9084906116ff565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161108391815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff82166110de576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff82166000908152600360205260409020548181101561113e576040517ffe382aa700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611148828261162c565b73ffffffffffffffffffffffffffffffffffffffff84166000908152600360205260408120919091556005805484929061118390849061162c565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90602001610ec9565b73ffffffffffffffffffffffffffffffffffffffff8216611220576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b806005600082825461123291906116ff565b909155505073ffffffffffffffffffffffffffffffffffffffff82166000908152600360205260408120805483929061126c9084906116ff565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6000815180845260005b818110156112e9576020818501810151868301820152016112cd565b5060006020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b60208152600061133a60208301846112c3565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff8116811461136357600080fd5b50565b6000806040838503121561137957600080fd5b823561138481611341565b946020939093013593505050565b6000806000606084860312156113a757600080fd5b83356113b281611341565b925060208401356113c281611341565b929592945050506040919091013590565b6000602082840312156113e557600080fd5b5035919050565b6000602082840312156113fe57600080fd5b813561133a81611341565b6020810160038310611444577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000806040838503121561148c57600080fd5b823567ffffffffffffffff8111156114a357600080fd5b8301601f810185136114b457600080fd5b803567ffffffffffffffff8111156114ce576114ce61144a565b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8501160116810181811067ffffffffffffffff8211171561153a5761153a61144a565b60405281815282820160200187101561155257600080fd5b8160208401602083013760006020928201830152969401359450505050565b6000806040838503121561158457600080fd5b823561158f81611341565b9150602083013561159f81611341565b809150509250929050565b600181811c908216806115be57607f821691505b6020821081036115f7577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8181038181111561051a5761051a6115fd565b60408152600061165260408301856112c3565b90508260208301529392505050565b60006020828403121561167357600080fd5b8151801515811461133a57600080fd5b60808152600061169660808301876112c3565b6020830195909552506040810192909252606090910152919050565b6000602082840312156116c457600080fd5b815161133a81611341565b6000602082840312156116e157600080fd5b5051919050565b808202811582820484141761051a5761051a6115fd565b8082018082111561051a5761051a6115fd56fea26469706673582212204013e39523742118b3f2227e145ee7e48176ba6aebead33c596dca2acb59a74c64736f6c634300081a0033a264697066735822122003782781d47b4f76226b530ac45c2cc9213ff1f5bff0016420b443dfc00db0a964736f6c634300081a0033", + Bin: "0x6080604052600c8054600160ff199182168117909255601f80549091169091179055348015602c57600080fd5b506201087d806200003e6000396000f3fe608060405234801561001057600080fd5b506004361061011b5760003560e01c806385226c81116100b2578063b5508aa911610081578063d7a525fc11610066578063d7a525fc146101ec578063e20c9f71146101f4578063fa7626d4146101fc57600080fd5b8063b5508aa9146101cc578063ba414fa6146101d457600080fd5b806385226c8114610192578063916a17c6146101a75780639683c695146101bc578063b0464fdc146101c457600080fd5b80633f7286f4116100ee5780633f7286f414610165578063524744131461016d57806366d9a9a0146101755780636ff15ccc1461018a57600080fd5b80630a9254e4146101205780631ed7831c1461012a5780632ade3880146101485780633e5e3c231461015d575b600080fd5b610128610209565b005b61013261118d565b60405161013f9190617944565b60405180910390f35b6101506111ef565b60405161013f91906179e0565b610132611331565b610132611391565b6101286113f1565b61017d611c4e565b60405161013f9190617b46565b610128611dd0565b61019a6125e8565b60405161013f9190617be4565b6101af6126b8565b60405161013f9190617c5b565b6101286127b3565b6101af612d2f565b61019a612e2a565b6101dc612efa565b604051901515815260200161013f565b610128612fce565b6101326136b0565b601f546101dc9060ff1681565b602680547fffffffffffffffffffffffff00000000000000000000000000000000000000009081163017909155602780548216611234179055602880548216615678179055602e805490911661432117905560405161026790617829565b60408082526004908201527f746573740000000000000000000000000000000000000000000000000000000060608201526080602082018190526003908201527f54544b000000000000000000000000000000000000000000000000000000000060a082015260c001604051809103906000f0801580156102ec573d6000803e3d6000fd5b50602380547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039290921691909117905560405161033190617829565b604080825260049082018190527f7a6574610000000000000000000000000000000000000000000000000000000060608301526080602083018190528201527f5a4554410000000000000000000000000000000000000000000000000000000060a082015260c001604051809103906000f0801580156103b5573d6000803e3d6000fd5b50602480547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039283169081178255604080518082018252600e81527f4761746577617945564d2e736f6c0000000000000000000000000000000000006020820152602854602654925190861694810194909452604484019290925290921660648201526104a6919060840160408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fc0c53b8b00000000000000000000000000000000000000000000000000000000179052613710565b601f80547fffffffffffffffffffffff0000000000000000000000000000000000000000ff166101006001600160a01b0393841681029190911791829055602080549190920483167fffffffffffffffffffffffff0000000000000000000000000000000000000000909116811790915560285460265460405192939182169291169061053290617837565b6001600160a01b03938416815291831660208301529091166040820152606001604051809103906000f08015801561056e573d6000803e3d6000fd5b50602180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392831617905560205460245460285460265460405193851694928316939183169216906105c990617845565b6001600160a01b039485168152928416602084015290831660408301529091166060820152608001604051809103906000f08015801561060d573d6000803e3d6000fd5b50602280547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039283161790556028546040517fc88a5e6d00000000000000000000000000000000000000000000000000000000815291166004820152670de0b6b3a76400006024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c88a5e6d90604401600060405180830381600087803b1580156106b957600080fd5b505af11580156106cd573d6000803e3d6000fd5b50506026546040517f06447d560000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506306447d569150602401600060405180830381600087803b15801561074357600080fd5b505af1158015610757573d6000803e3d6000fd5b50506020546021546040517fae7a3a6f0000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201529116925063ae7a3a6f9150602401600060405180830381600087803b1580156107bd57600080fd5b505af11580156107d1573d6000803e3d6000fd5b50506020546022546040517f10188aef0000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152911692506310188aef9150602401600060405180830381600087803b15801561083757600080fd5b505af115801561084b573d6000803e3d6000fd5b505050507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b03166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156108ad57600080fd5b505af11580156108c1573d6000803e3d6000fd5b50506023546026546040517f40c10f190000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620f42406024820152911692506340c10f199150604401600060405180830381600087803b15801561093057600080fd5b505af1158015610944573d6000803e3d6000fd5b50506023546021546040517fa9059cbb0000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201526207a12060248201529116925063a9059cbb91506044016020604051808303816000875af11580156109b8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109dc9190617cf2565b506040516109e990617853565b604051809103906000f080158015610a05573d6000803e3d6000fd5b50602580547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03928316179055604080518082018252600f81527f476174657761795a45564d2e736f6c0000000000000000000000000000000000602082015260248054602e54935190851691810191909152919092166044820152610aee919060640160408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f485cc95500000000000000000000000000000000000000000000000000000000179052613710565b602980546001600160a01b03929092167fffffffffffffffffffffffff00000000000000000000000000000000000000009283168117909155602a80549092168117909155604051610b3f90617861565b6001600160a01b039091168152602001604051809103906000f080158015610b6b573d6000803e3d6000fd5b50602b80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03929092169190911790556040517f06447d5600000000000000000000000000000000000000000000000000000000815273735b14bb79463307aacbed86daf3322b1e6226ab6004820181905290737109709ecfa91a80626ff3989d68f67f5b1dd12d906306447d5690602401600060405180830381600087803b158015610c2057600080fd5b505af1158015610c34573d6000803e3d6000fd5b505050506000806000604051610c499061786f565b6001600160a01b03938416815291831660208301529091166040820152606001604051809103906000f080158015610c85573d6000803e3d6000fd5b50602c80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03928316908117909155602a54604051601293600193600093849391921690610cdb9061787d565b610cea96959493929190617d14565b604051809103906000f080158015610d06573d6000803e3d6000fd5b50602d80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03928316908117909155602c546040517fee2815ba0000000000000000000000000000000000000000000000000000000081526001600482015260248101929092529091169063ee2815ba90604401600060405180830381600087803b158015610d9d57600080fd5b505af1158015610db1573d6000803e3d6000fd5b5050602c546040517fa7cb050700000000000000000000000000000000000000000000000000000000815260016004820181905260248201526001600160a01b03909116925063a7cb05079150604401600060405180830381600087803b158015610e1b57600080fd5b505af1158015610e2f573d6000803e3d6000fd5b5050602d54602e546040517f47e7ef240000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620f42406024820152911692506347e7ef2491506044016020604051808303816000875af1158015610ea3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ec79190617cf2565b50602d54602b546040517f47e7ef240000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620f424060248201529116906347e7ef24906044016020604051808303816000875af1158015610f38573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f5c9190617cf2565b507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b03166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610fbb57600080fd5b505af1158015610fcf573d6000803e3d6000fd5b5050602e546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b15801561104557600080fd5b505af1158015611059573d6000803e3d6000fd5b5050602d54602a546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620f424060248201529116925063095ea7b391506044016020604051808303816000875af11580156110cd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110f19190617cf2565b506028546040517fc88a5e6d0000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152670de0b6b3a76400006024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c88a5e6d90604401600060405180830381600087803b15801561117257600080fd5b505af1158015611186573d6000803e3d6000fd5b5050505050565b606060168054806020026020016040519081016040528092919081815260200182805480156111e557602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116111c7575b5050505050905090565b6060601e805480602002602001604051908101604052809291908181526020016000905b8282101561132857600084815260208082206040805180820182526002870290920180546001600160a01b03168352600181018054835181870281018701909452808452939591948681019491929084015b8282101561131157838290600052602060002001805461128490617e09565b80601f01602080910402602001604051908101604052809291908181526020018280546112b090617e09565b80156112fd5780601f106112d2576101008083540402835291602001916112fd565b820191906000526020600020905b8154815290600101906020018083116112e057829003601f168201915b505050505081526020019060010190611265565b505050508152505081526020019060010190611213565b50505050905090565b606060188054806020026020016040519081016040528092919081815260200182805480156111e5576020028201919060005260206000209081546001600160a01b031681526001909101906020018083116111c7575050505050905090565b606060178054806020026020016040519081016040528092919081815260200182805480156111e5576020028201919060005260206000209081546001600160a01b031681526001909101906020018083116111c7575050505050905090565b604080518082018252600681527f48656c6c6f2100000000000000000000000000000000000000000000000000006020820152602d54602b5492517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b0393841660048201529192602a92600192670de0b6b3a7640000926000929116906370a0823190602401602060405180830381865afa15801561149d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114c19190617e56565b6040519091506000907fe04d4f9700000000000000000000000000000000000000000000000000000000906114fe90889088908890602401617e6f565b60408051601f19818403018152918152602080830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909516949094179093526025549051919350600092611597926001600160a01b03909216910160609190911b6bffffffffffffffffffffffff1916815260140190565b60408051601f1981840301815290829052602d546115c892620f4240916001600160a01b0316908690602401617e99565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f7993c1e000000000000000000000000000000000000000000000000000000000179052602a5490517ff30c7ba3000000000000000000000000000000000000000000000000000000008152919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f30c7ba391611685916001600160a01b0391909116906000908690600401617ed8565b600060405180830381600087803b15801561169f57600080fd5b505af11580156116b3573d6000803e3d6000fd5b5050602e546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b15801561172957600080fd5b505af115801561173d573d6000803e3d6000fd5b5050602b5460255460405160609190911b6bffffffffffffffffffffffff191660208201526001600160a01b039091169250630abd8905915060340160408051601f1981840301815290829052602d547fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1683526117d792620f4240916001600160a01b0316908d908d908d90600401617f00565b600060405180830381600087803b1580156117f157600080fd5b505af1158015611805573d6000803e3d6000fd5b50506020546040517fc88a5e6d0000000000000000000000000000000000000000000000000000000081526001600160a01b03909116600482015260248101879052737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c88a5e6d9150604401600060405180830381600087803b15801561188257600080fd5b505af1158015611896573d6000803e3d6000fd5b50506025546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b15801561192857600080fd5b505af115801561193c573d6000803e3d6000fd5b50506020546040517f1f1ff1f5fb41346850b2f5c04e6c767e2f1c8a525c5c0c5cdb60cdf3ca5f62fa935061198592506001600160a01b039091169087908b908b908b90617f55565b60405180910390a16020546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b158015611a1b57600080fd5b505af1158015611a2f573d6000803e3d6000fd5b50506025546040516001600160a01b0390911692507fcaf938de11c367272220bfd1d2baa99ca46665e7bc4d85f00adb51b90fe1fa9f9150611a749087908690617f96565b60405180910390a26028546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015611aee57600080fd5b505af1158015611b02573d6000803e3d6000fd5b50506020546025546040517f1cff79cd0000000000000000000000000000000000000000000000000000000081526001600160a01b039283169450631cff79cd93508892611b569216908790600401617faf565b60006040518083038185885af1158015611b74573d6000803e3d6000fd5b50505050506040513d6000823e601f3d908101601f19168201604052611b9d91908101906180b9565b50602d54602b546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260009291909116906370a0823190602401602060405180830381865afa158015611c08573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c2c9190617e56565b9050611c4481611c3f620f42408761811d565b61372f565b5050505050505050565b6060601b805480602002602001604051908101604052809291908181526020016000905b828210156113285783829060005260206000209060020201604051806040016040529081600082018054611ca590617e09565b80601f0160208091040260200160405190810160405280929190818152602001828054611cd190617e09565b8015611d1e5780601f10611cf357610100808354040283529160200191611d1e565b820191906000526020600020905b815481529060010190602001808311611d0157829003601f168201915b5050505050815260200160018201805480602002602001604051908101604052809291908181526020018280548015611db857602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019060040190602082600301049283019260010382029150808411611d655790505b50505050508152505081526020019060010190611c72565b604080518082018252600681527f48656c6c6f21000000000000000000000000000000000000000000000000000060208201529051602a90600190670de0b6b3a7640000906000907fe04d4f970000000000000000000000000000000000000000000000000000000090611e4c90879087908790602401617e6f565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009490941693909317909252602a5491517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b0390921660848301529150737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b158015611f3b57600080fd5b505af1158015611f4f573d6000803e3d6000fd5b5050602e5460255460405160609190911b6bffffffffffffffffffffffff19166020820152600093506001600160a01b0390911691507fde19dbe881cc0aeeb6e73ce19ac7b5ca695e6be8a076e3eb42292005a7fec1b59060340160408051601f19818403018152828252602d547f4d8943bb000000000000000000000000000000000000000000000000000000008452915190926001600160a01b0390921691620f4240916000918491634d8943bb916004808201926020929091908290030181865afa158015612025573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120499190617e56565b8860405161205c96959493929190618130565b60405180910390a3602e546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156120d657600080fd5b505af11580156120ea573d6000803e3d6000fd5b5050602a5460255460405160609190911b6bffffffffffffffffffffffff191660208201526001600160a01b039091169250637993c1e0915060340160408051601f1981840301815290829052602d547fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16835261218092620f4240916001600160a01b0316908790600401618183565b600060405180830381600087803b15801561219a57600080fd5b505af11580156121ae573d6000803e3d6000fd5b5050602d54602e546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260009450911691506370a0823190602401602060405180830381865afa15801561221a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061223e9190617e56565b905061224b81600061372f565b6020546040517fc88a5e6d0000000000000000000000000000000000000000000000000000000081526001600160a01b03909116600482015260248101849052737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c88a5e6d90604401600060405180830381600087803b1580156122c457600080fd5b505af11580156122d8573d6000803e3d6000fd5b50506025546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b15801561236a57600080fd5b505af115801561237e573d6000803e3d6000fd5b50506020546040517f1f1ff1f5fb41346850b2f5c04e6c767e2f1c8a525c5c0c5cdb60cdf3ca5f62fa93506123c792506001600160a01b039091169086908a908a908a90617f55565b60405180910390a16020546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b15801561245d57600080fd5b505af1158015612471573d6000803e3d6000fd5b50506025546040516001600160a01b0390911692507fcaf938de11c367272220bfd1d2baa99ca46665e7bc4d85f00adb51b90fe1fa9f91506124b69086908690617f96565b60405180910390a26028546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561253057600080fd5b505af1158015612544573d6000803e3d6000fd5b50506020546025546040517f1cff79cd0000000000000000000000000000000000000000000000000000000081526001600160a01b039283169450631cff79cd935087926125989216908790600401617faf565b60006040518083038185885af11580156125b6573d6000803e3d6000fd5b50505050506040513d6000823e601f3d908101601f191682016040526125df91908101906180b9565b50505050505050565b6060601a805480602002602001604051908101604052809291908181526020016000905b8282101561132857838290600052602060002001805461262b90617e09565b80601f016020809104026020016040519081016040528092919081815260200182805461265790617e09565b80156126a45780601f10612679576101008083540402835291602001916126a4565b820191906000526020600020905b81548152906001019060200180831161268757829003601f168201915b50505050508152602001906001019061260c565b6060601d805480602002602001604051908101604052809291908181526020016000905b828210156113285760008481526020908190206040805180820182526002860290920180546001600160a01b0316835260018101805483518187028101870190945280845293949193858301939283018282801561279b57602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190600401906020826003010492830192600103820291508084116127485790505b505050505081525050815260200190600101906126dc565b604080518082018252600681527f48656c6c6f21000000000000000000000000000000000000000000000000000060208201529051602a90600190670de0b6b3a76400009082906000907fe04d4f97000000000000000000000000000000000000000000000000000000009061283190889088908690602401617e6f565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009490941693909317909252602e5491517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b0390921660048301529150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561290457600080fd5b505af1158015612918573d6000803e3d6000fd5b5050602a546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b1580156129aa57600080fd5b505af11580156129be573d6000803e3d6000fd5b5050602e5460255460405160609190911b6bffffffffffffffffffffffff191660208201528593506001600160a01b0390911691507f5322ffbbf9261ff1f8138247942d2b03b28717141ef0a0dd080fc4be9c4e78d39060340160408051601f1981840301815290829052612a349186906181bd565b60405180910390a3602a5460255460405160609190911b6bffffffffffffffffffffffff191660208201526001600160a01b0390911690635d40e1789060340160405160208183030381529060405284846040518463ffffffff1660e01b8152600401612aa3939291906181e2565b600060405180830381600087803b158015612abd57600080fd5b505af1158015612ad1573d6000803e3d6000fd5b50506020546040517fc88a5e6d0000000000000000000000000000000000000000000000000000000081526001600160a01b03909116600482015260248101869052737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c88a5e6d9150604401600060405180830381600087803b158015612b4e57600080fd5b505af1158015612b62573d6000803e3d6000fd5b50506020546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b158015612bf457600080fd5b505af1158015612c08573d6000803e3d6000fd5b50506025546040516001600160a01b0390911692507fcaf938de11c367272220bfd1d2baa99ca46665e7bc4d85f00adb51b90fe1fa9f9150612c4d9086908590617f96565b60405180910390a26028546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015612cc757600080fd5b505af1158015612cdb573d6000803e3d6000fd5b50506020546025546040517f1cff79cd0000000000000000000000000000000000000000000000000000000081526001600160a01b039283169450631cff79cd935087926125989216908690600401617faf565b6060601c805480602002602001604051908101604052809291908181526020016000905b828210156113285760008481526020908190206040805180820182526002860290920180546001600160a01b03168352600181018054835181870281018701909452808452939491938583019392830182828015612e1257602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019060040190602082600301049283019260010382029150808411612dbf5790505b50505050508152505081526020019060010190612d53565b60606019805480602002602001604051908101604052809291908181526020016000905b82821015611328578382906000526020600020018054612e6d90617e09565b80601f0160208091040260200160405190810160405280929190818152602001828054612e9990617e09565b8015612ee65780601f10612ebb57610100808354040283529160200191612ee6565b820191906000526020600020905b815481529060010190602001808311612ec957829003601f168201915b505050505081526020019060010190612e4e565b60085460009060ff1615612f12575060085460ff1690565b6040517f667f9d70000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d600482018190527f6661696c65640000000000000000000000000000000000000000000000000000602483015260009163667f9d7090604401602060405180830381865afa158015612fa3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612fc79190617e56565b1415905090565b604080518082018252600681527f48656c6c6f21000000000000000000000000000000000000000000000000000060208201529051602a90600190670de0b6b3a76400009082906000907fe04d4f97000000000000000000000000000000000000000000000000000000009061304c90889088908690602401617e6f565b60408051601f19818403018152918152602080830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009095169490941790935260255490519193506000926130e5926001600160a01b03909216910160609190911b6bffffffffffffffffffffffff1916815260140190565b60408051601f198184030181529082905261310691859085906024016181e2565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f5d40e17800000000000000000000000000000000000000000000000000000000179052602a5490517ff30c7ba3000000000000000000000000000000000000000000000000000000008152919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f30c7ba3916131c3916001600160a01b0391909116906000908690600401617ed8565b600060405180830381600087803b1580156131dd57600080fd5b505af11580156131f1573d6000803e3d6000fd5b5050602e546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b15801561326757600080fd5b505af115801561327b573d6000803e3d6000fd5b5050602b5460255460405160609190911b6bffffffffffffffffffffffff191660208201526001600160a01b03909116925063865b36f69150603401604051602081830303815290604052858a8a8a6040518663ffffffff1660e01b81526004016132ea95949392919061820d565b600060405180830381600087803b15801561330457600080fd5b505af1158015613318573d6000803e3d6000fd5b50506020546040517fc88a5e6d0000000000000000000000000000000000000000000000000000000081526001600160a01b03909116600482015260248101879052737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c88a5e6d9150604401600060405180830381600087803b15801561339557600080fd5b505af11580156133a9573d6000803e3d6000fd5b50506025546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b15801561343b57600080fd5b505af115801561344f573d6000803e3d6000fd5b50506020546040517f1f1ff1f5fb41346850b2f5c04e6c767e2f1c8a525c5c0c5cdb60cdf3ca5f62fa935061349892506001600160a01b039091169087908b908b908b90617f55565b60405180910390a16020546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b15801561352e57600080fd5b505af1158015613542573d6000803e3d6000fd5b50506025546040516001600160a01b0390911692507fcaf938de11c367272220bfd1d2baa99ca46665e7bc4d85f00adb51b90fe1fa9f91506135879087908690617f96565b60405180910390a26028546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561360157600080fd5b505af1158015613615573d6000803e3d6000fd5b50506020546025546040517f1cff79cd0000000000000000000000000000000000000000000000000000000081526001600160a01b039283169450631cff79cd935088926136699216908790600401617faf565b60006040518083038185885af1158015613687573d6000803e3d6000fd5b50505050506040513d6000823e601f3d908101601f19168201604052611c4491908101906180b9565b606060158054806020026020016040519081016040528092919081815260200182805480156111e5576020028201919060005260206000209081546001600160a01b031681526001909101906020018083116111c7575050505050905090565b600061371a61788b565b6137258484836137b6565b9150505b92915050565b6040517f98296c540000000000000000000000000000000000000000000000000000000081526004810183905260248101829052737109709ecfa91a80626ff3989d68f67f5b1dd12d906398296c549060440160006040518083038186803b15801561379a57600080fd5b505afa1580156137ae573d6000803e3d6000fd5b505050505050565b6000806137c38584613831565b90506138266040518060400160405280601d81526020017f4552433139363750726f78792e736f6c3a4552433139363750726f78790000008152508286604051602001613811929190617faf565b6040516020818303038152906040528561383d565b9150505b9392505050565b600061382a838361386b565b60c081015151600090156138615761385a84848460c00151613886565b905061382a565b61385a8484613a2c565b60006138778383613b17565b61382a8383602001518461383d565b600080613891613b27565b9050600061389f8683613bfa565b905060006138b682606001518360200151856140a0565b905060006138c6838389896142b2565b905060006138d38261512f565b602081015181519192509060030b15613946578982604001516040516020016138fd929190618252565b60408051601f19818403018152908290527f08c379a000000000000000000000000000000000000000000000000000000000825261393d916004016182d3565b60405180910390fd5b60006139896040518060400160405280601581526020017f4465706c6f79656420746f20616464726573733a2000000000000000000000008152508360016152fe565b6040517fc6ce059d000000000000000000000000000000000000000000000000000000008152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c6ce059d906139dc9084906004016182d3565b602060405180830381865afa1580156139f9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a1d91906182e6565b9b9a5050505050505050505050565b6040517f8d1cc9250000000000000000000000000000000000000000000000000000000081526000908190737109709ecfa91a80626ff3989d68f67f5b1dd12d90638d1cc92590613a819087906004016182d3565b600060405180830381865afa158015613a9e573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052613ac691908101906180b9565b90506000613af48285604051602001613ae092919061830f565b6040516020818303038152906040526154fe565b90506001600160a01b0381166137255784846040516020016138fd92919061833e565b613b2382826000615511565b5050565b604080518082018252600381527f6f75740000000000000000000000000000000000000000000000000000000000602082015290517fd145736c000000000000000000000000000000000000000000000000000000008152606091737109709ecfa91a80626ff3989d68f67f5b1dd12d91829063d145736c90613bae9084906004016183e9565b600060405180830381865afa158015613bcb573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052613bf39190810190618430565b9250505090565b613c2c6040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b6000737109709ecfa91a80626ff3989d68f67f5b1dd12d9050613c776040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b613c8085615614565b60208201526000613c90866159f9565b90506000836001600160a01b031663d930a0e66040518163ffffffff1660e01b8152600401600060405180830381865afa158015613cd2573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052613cfa9190810190618430565b86838560200151604051602001613d149493929190618479565b60408051601f19818403018152908290527f60f9bb1100000000000000000000000000000000000000000000000000000000825291506000906001600160a01b038616906360f9bb1190613d6c9085906004016182d3565b600060405180830381865afa158015613d89573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052613db19190810190618430565b6040517fdb4235f60000000000000000000000000000000000000000000000000000000081529091506001600160a01b0386169063db4235f690613df990849060040161857d565b602060405180830381865afa158015613e16573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613e3a9190617cf2565b613e4f57816040516020016138fd91906185cf565b6040517f49c4fac80000000000000000000000000000000000000000000000000000000081526001600160a01b038616906349c4fac890613e94908490600401618661565b600060405180830381865afa158015613eb1573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052613ed99190810190618430565b84526040517fdb4235f60000000000000000000000000000000000000000000000000000000081526001600160a01b0386169063db4235f690613f209084906004016186b3565b602060405180830381865afa158015613f3d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613f619190617cf2565b15613ff6576040517f49c4fac80000000000000000000000000000000000000000000000000000000081526001600160a01b038616906349c4fac890613fab9084906004016186b3565b600060405180830381865afa158015613fc8573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052613ff09190810190618430565b60408501525b846001600160a01b03166349c4fac882866000015160405160200161401b9190618705565b6040516020818303038152906040526040518363ffffffff1660e01b81526004016140479291906181bd565b600060405180830381865afa158015614064573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261408c9190810190618430565b606085015250608083015250949350505050565b60408051600480825260a0820190925260609160009190816020015b60608152602001906001900390816140bc5790505090506040518060400160405280600481526020017f67726570000000000000000000000000000000000000000000000000000000008152508160008151811061411c5761411c618771565b60200260200101819052506040518060400160405280600381526020017f2d726c00000000000000000000000000000000000000000000000000000000008152508160018151811061417057614170618771565b60200260200101819052508460405160200161418c91906187a0565b604051602081830303815290604052816002815181106141ae576141ae618771565b6020026020010181905250826040516020016141ca919061880c565b604051602081830303815290604052816003815181106141ec576141ec618771565b602002602001018190525060006142028261512f565b602080820151604080518082018252600581527f2e6a736f6e00000000000000000000000000000000000000000000000000000081850190815282518084018452600080825290860152825180840190935290518252928101929092529192506142939060408051808201825260008082526020918201528151808301909252845182528085019082015290615c7c565b6142a857856040516020016138fd919061884d565b9695505050505050565b60a0810151604080518082018252600080825260209182015281518083019092528251808352928101910152606090737109709ecfa91a80626ff3989d68f67f5b1dd12d9015614302565b511590565b614476578260200151156143be576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605860248201527f54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f742060448201527f62652075736564207768656e207468652060736b6970566572696679536f757260648201527f6365436f646560206f7074696f6e206973206074727565600000000000000000608482015260a40161393d565b8260c0015115614476576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605360248201527f54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f742060448201527f62652075736564207768656e207468652060736b69704c6963656e736554797060648201527f6560206f7074696f6e2069732060747275656000000000000000000000000000608482015260a40161393d565b6040805160ff8082526120008201909252600091816020015b606081526020019060019003908161448f57905050905060006040518060400160405280600381526020017f6e707800000000000000000000000000000000000000000000000000000000008152508282806144ea906188de565b935060ff16815181106144ff576144ff618771565b60200260200101819052506040518060400160405280600d81526020017f302e302e312d616c7068612e370000000000000000000000000000000000000081525060405160200161455091906188fd565b60405160208183030381529060405282828061456b906188de565b935060ff168151811061458057614580618771565b60200260200101819052506040518060400160405280600681526020017f6465706c6f7900000000000000000000000000000000000000000000000000008152508282806145cd906188de565b935060ff16815181106145e2576145e2618771565b60200260200101819052506040518060400160405280600e81526020017f2d2d636f6e74726163744e616d6500000000000000000000000000000000000081525082828061462f906188de565b935060ff168151811061464457614644618771565b60200260200101819052508760200151828280614660906188de565b935060ff168151811061467557614675618771565b60200260200101819052506040518060400160405280600e81526020017f2d2d636f6e7472616374506174680000000000000000000000000000000000008152508282806146c2906188de565b935060ff16815181106146d7576146d7618771565b6020908102919091010152875182826146ef816188de565b935060ff168151811061470457614704618771565b60200260200101819052506040518060400160405280600981526020017f2d2d636861696e49640000000000000000000000000000000000000000000000815250828280614751906188de565b935060ff168151811061476657614766618771565b602002602001018190525061477a46615cdd565b8282614785816188de565b935060ff168151811061479a5761479a618771565b60200260200101819052506040518060400160405280600f81526020017f2d2d6275696c64496e666f46696c6500000000000000000000000000000000008152508282806147e7906188de565b935060ff16815181106147fc576147fc618771565b602002602001018190525086828280614814906188de565b935060ff168151811061482957614829618771565b60209081029190910101528551156149505760408051808201909152601581527f2d2d636f6e7374727563746f7242797465636f646500000000000000000000006020820152828261487a816188de565b935060ff168151811061488f5761488f618771565b60209081029190910101526040517f71aad10d0000000000000000000000000000000000000000000000000000000081526001600160a01b038416906371aad10d906148df9089906004016182d3565b600060405180830381865afa1580156148fc573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526149249190810190618430565b828261492f816188de565b935060ff168151811061494457614944618771565b60200260200101819052505b846020015115614a205760408051808201909152601281527f2d2d766572696679536f75726365436f6465000000000000000000000000000060208201528282614999816188de565b935060ff16815181106149ae576149ae618771565b60200260200101819052506040518060400160405280600581526020017f66616c73650000000000000000000000000000000000000000000000000000008152508282806149fb906188de565b935060ff1681518110614a1057614a10618771565b6020026020010181905250614be7565b614a586142fd8660a0015160408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b614aeb5760408051808201909152600d81527f2d2d6c6963656e7365547970650000000000000000000000000000000000000060208201528282614a9b816188de565b935060ff1681518110614ab057614ab0618771565b60200260200101819052508460a00151604051602001614ad091906187a0565b6040516020818303038152906040528282806149fb906188de565b8460c00151158015614b2e575060408089015181518083018352600080825260209182015282518084019093528151835290810190820152614b2c90511590565b155b15614be75760408051808201909152600d81527f2d2d6c6963656e7365547970650000000000000000000000000000000000000060208201528282614b72816188de565b935060ff1681518110614b8757614b87618771565b6020026020010181905250614b9b88615d7d565b604051602001614bab91906187a0565b604051602081830303815290604052828280614bc6906188de565b935060ff1681518110614bdb57614bdb618771565b60200260200101819052505b60408086015181518083018352600080825260209182015282518084019093528151835290810190820152614c1b90511590565b614cb05760408051808201909152600b81527f2d2d72656c61796572496400000000000000000000000000000000000000000060208201528282614c5e816188de565b935060ff1681518110614c7357614c73618771565b60200260200101819052508460400151828280614c8f906188de565b935060ff1681518110614ca457614ca4618771565b60200260200101819052505b606085015115614dd15760408051808201909152600681527f2d2d73616c74000000000000000000000000000000000000000000000000000060208201528282614cf9816188de565b935060ff1681518110614d0e57614d0e618771565b602090810291909101015260608501516040517fb11a19e800000000000000000000000000000000000000000000000000000000815260048101919091526001600160a01b0384169063b11a19e890602401600060405180830381865afa158015614d7d573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052614da59190810190618430565b8282614db0816188de565b935060ff1681518110614dc557614dc5618771565b60200260200101819052505b60e08501515115614e785760408051808201909152600a81527f2d2d6761734c696d69740000000000000000000000000000000000000000000060208201528282614e1b816188de565b935060ff1681518110614e3057614e30618771565b6020026020010181905250614e4c8560e0015160000151615cdd565b8282614e57816188de565b935060ff1681518110614e6c57614e6c618771565b60200260200101819052505b60e08501516020015115614f225760408051808201909152600a81527f2d2d67617350726963650000000000000000000000000000000000000000000060208201528282614ec5816188de565b935060ff1681518110614eda57614eda618771565b6020026020010181905250614ef68560e0015160200151615cdd565b8282614f01816188de565b935060ff1681518110614f1657614f16618771565b60200260200101819052505b60e08501516040015115614fcc5760408051808201909152600e81527f2d2d6d617846656550657247617300000000000000000000000000000000000060208201528282614f6f816188de565b935060ff1681518110614f8457614f84618771565b6020026020010181905250614fa08560e0015160400151615cdd565b8282614fab816188de565b935060ff1681518110614fc057614fc0618771565b60200260200101819052505b60e085015160600151156150765760408051808201909152601681527f2d2d6d61785072696f726974794665655065724761730000000000000000000060208201528282615019816188de565b935060ff168151811061502e5761502e618771565b602002602001018190525061504a8560e0015160600151615cdd565b8282615055816188de565b935060ff168151811061506a5761506a618771565b60200260200101819052505b60008160ff1667ffffffffffffffff81111561509457615094617fd1565b6040519080825280602002602001820160405280156150c757816020015b60608152602001906001900390816150b25790505b50905060005b8260ff168160ff16101561512057838160ff16815181106150f0576150f0618771565b6020026020010151828260ff168151811061510d5761510d618771565b60209081029190910101526001016150cd565b5093505050505b949350505050565b6151566040518060600160405280600060030b815260200160608152602001606081525090565b60408051808201825260048082527f6261736800000000000000000000000000000000000000000000000000000000602083015291517fd145736c000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d92600091849163d145736c916151dc91869101618968565b600060405180830381865afa1580156151f9573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526152219190810190618430565b9050600061522f868361686c565b90506000846001600160a01b031663f45c1ce7836040518263ffffffff1660e01b815260040161525f9190617be4565b6000604051808303816000875af115801561527e573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526152a691908101906189af565b805190915060030b158015906152bf5750602081015151155b80156152ce5750604081015151155b156142a857816000815181106152e6576152e6618771565b60200260200101516040516020016138fd9190618a65565b606060006153338560408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b60408051808201825260008082526020918201528151808301909252865182528087019082015290915061536a9082905b906169c1565b156154c75760006153e7826153e1846153db6153ad8a60408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6040805180820182526000808252602091820152815180830190925282518252918201519181019190915290565b906169e8565b90616a4a565b604080518082018252600181527f0a000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015290915061544b9082906169c1565b156154b557604080518082018252600181527f0a00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526154b2905b8290616acf565b90505b6154be81616af5565b9250505061382a565b82156154e05784846040516020016138fd929190618c51565b505060408051602081019091526000815261382a565b509392505050565b6000808251602084016000f09392505050565b8160a001511561552057505050565b600061552d848484616b5e565b9050600061553a8261512f565b602081015181519192509060030b1580156155d65750604080518082018252600781527f5355434345535300000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526155d690604080518082018252600080825260209182015281518083019092528451825280850190820152615364565b156155e357505050505050565b604082015151156156035781604001516040516020016138fd9190618cf8565b806040516020016138fd9190618d56565b606060006156498360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600481527f2e736f6c00000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201529091506156ae905b8290615c7c565b1561571d57604080518082018252600481527f2e736f6c000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261382a906157189083906170f9565b616af5565b604080518082018252600181527f3a000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261577f905b8290617183565b60010361584c57604080518082018252600181527f3a00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526157e5906154ab565b50604080518082018252600181527f3a000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261382a90615718905b8390616acf565b604080518082018252600581527f2e6a736f6e000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526158ab906156a7565b156159e257604080518082018252600181527f2f0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082018190528451808601909552925184528301529061591390839061721d565b905060008160018351615926919061811d565b8151811061593657615936618771565b602002602001015190506159d96157186159ac6040518060400160405280600581526020017f2e6a736f6e00000000000000000000000000000000000000000000000000000081525060408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600080825260209182015281518083019092528551825280860190820152906170f9565b95945050505050565b826040516020016138fd9190618dc1565b50919050565b60606000615a2e8360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600481527f2e736f6c0000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152909150615a90906156a7565b15615a9e5761382a81616af5565b604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152615afd90615778565b600103615b6757604080518082018252600181527f3a000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261382a9061571890615845565b604080518082018252600581527f2e6a736f6e00000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152615bc6906156a7565b156159e257604080518082018252600181527f2f00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820181905284518086019095529251845283015290615c2e90839061721d565b9050600181511115615c6a578060028251615c49919061811d565b81518110615c5957615c59618771565b602002602001015192505050919050565b50826040516020016138fd9190618dc1565b805182516000911115615c9157506000613729565b81518351602085015160009291615ca791618e9f565b615cb1919061811d565b905082602001518103615cc8576001915050613729565b82516020840151819020912014905092915050565b60606000615cea836172c2565b600101905060008167ffffffffffffffff811115615d0a57615d0a617fd1565b6040519080825280601f01601f191660200182016040528015615d34576020820181803683370190505b5090508181016020015b600019017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a8504945084615d3e57509392505050565b604081810151815180830183526000808252602091820181905283518085018552835181529282018383015283518085018552600a81527f554e4c4943454e5345440000000000000000000000000000000000000000000081840190815285518087018752838152840192909252845180860190955251845290830152606091615e09905b82906173a4565b15615e4957505060408051808201909152600481527f4e6f6e65000000000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600981527f556e6c6963656e7365000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152615ea890615e02565b15615ee857505060408051808201909152600981527f556e6c6963656e736500000000000000000000000000000000000000000000006020820152919050565b604080518082018252600381527f4d4954000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152615f4790615e02565b15615f8757505060408051808201909152600381527f4d495400000000000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f47504c2d322e302d6f6e6c79000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152615fe690615e02565b8061604b5750604080518082018252601081527f47504c2d322e302d6f722d6c61746572000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261604b90615e02565b1561608b57505060408051808201909152600981527f474e552047504c763200000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f47504c2d332e302d6f6e6c790000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526160ea90615e02565b8061614f5750604080518082018252601081527f47504c2d332e302d6f722d6c61746572000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261614f90615e02565b1561618f57505060408051808201909152600981527f474e552047504c763300000000000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4c47504c2d322e312d6f6e6c7900000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526161ee90615e02565b806162535750604080518082018252601181527f4c47504c2d322e312d6f722d6c617465720000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261625390615e02565b1561629357505060408051808201909152600c81527f474e55204c47504c76322e3100000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4c47504c2d332e302d6f6e6c7900000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526162f290615e02565b806163575750604080518082018252601181527f4c47504c2d332e302d6f722d6c617465720000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261635790615e02565b1561639757505060408051808201909152600a81527f474e55204c47504c7633000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f4253442d322d436c617573650000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526163f690615e02565b1561643657505060408051808201909152600c81527f4253442d322d436c6175736500000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f4253442d332d436c6175736500000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261649590615e02565b156164d557505060408051808201909152600c81527f4253442d332d436c6175736500000000000000000000000000000000000000006020820152919050565b604080518082018252600781527f4d504c2d322e30000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261653490615e02565b1561657457505060408051808201909152600781527f4d504c2d322e30000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600781527f4f534c2d332e3000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526165d390615e02565b1561661357505060408051808201909152600781527f4f534c2d332e30000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600a81527f4170616368652d322e30000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261667290615e02565b156166b257505060408051808201909152600a81527f4170616368652d322e30000000000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4147504c2d332e302d6f6e6c79000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261671190615e02565b806167765750604080518082018252601181527f4147504c2d332e302d6f722d6c617465720000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261677690615e02565b156167b657505060408051808201909152600a81527f474e55204147504c7633000000000000000000000000000000000000000000006020820152919050565b604080518082018252600881527f4255534c2d312e310000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261681590615e02565b1561685557505060408051808201909152600781527f42534c20312e31000000000000000000000000000000000000000000000000006020820152919050565b604080840151845191516138fd9290602001618eb2565b60608060005b84518110156168f7578185828151811061688e5761688e618771565b60200260200101516040516020016168a792919061830f565b6040516020818303038152906040529150600185516168c6919061811d565b81146168ef57816040516020016168dd919061901b565b60405160208183030381529060405291505b600101616872565b5060408051600380825260808201909252600091816020015b6060815260200190600190039081616910579050509050838160008151811061693b5761693b618771565b60200260200101819052506040518060400160405280600281526020017f2d630000000000000000000000000000000000000000000000000000000000008152508160018151811061698f5761698f618771565b602002602001018190525081816002815181106169ae576169ae618771565b6020908102919091010152949350505050565b60208083015183518351928401516000936169df92918491906173b8565b14159392505050565b60408051808201909152600080825260208201526000616a1a84600001518560200151856000015186602001516174c9565b9050836020015181616a2c919061811d565b84518590616a3b90839061811d565b90525060208401525090919050565b6040805180820190915260008082526020820152815183511015616a6f575081613729565b6020808301519084015160019114616a965750815160208481015190840151829020919020145b8015616ac757825184518590616aad90839061811d565b9052508251602085018051616ac3908390618e9f565b9052505b509192915050565b6040805180820190915260008082526020820152616aee8383836175e9565b5092915050565b60606000826000015167ffffffffffffffff811115616b1657616b16617fd1565b6040519080825280601f01601f191660200182016040528015616b40576020820181803683370190505b5090506000602082019050616aee8185602001518660000151617694565b60606000616b6a613b27565b6040805160ff808252612000820190925291925060009190816020015b6060815260200190600190039081616b8757905050905060006040518060400160405280600381526020017f6e70780000000000000000000000000000000000000000000000000000000000815250828280616be2906188de565b935060ff1681518110616bf757616bf7618771565b60200260200101819052506040518060400160405280600781526020017f5e312e33322e3300000000000000000000000000000000000000000000000000815250604051602001616c48919061905c565b604051602081830303815290604052828280616c63906188de565b935060ff1681518110616c7857616c78618771565b60200260200101819052506040518060400160405280600881526020017f76616c6964617465000000000000000000000000000000000000000000000000815250828280616cc5906188de565b935060ff1681518110616cda57616cda618771565b602002602001018190525082604051602001616cf6919061880c565b604051602081830303815290604052828280616d11906188de565b935060ff1681518110616d2657616d26618771565b60200260200101819052506040518060400160405280600a81526020017f2d2d636f6e747261637400000000000000000000000000000000000000000000815250828280616d73906188de565b935060ff1681518110616d8857616d88618771565b6020026020010181905250616d9d878461770e565b8282616da8816188de565b935060ff1681518110616dbd57616dbd618771565b602090810291909101015285515115616e695760408051808201909152600b81527f2d2d7265666572656e636500000000000000000000000000000000000000000060208201528282616e0f816188de565b935060ff1681518110616e2457616e24618771565b6020026020010181905250616e3d86600001518461770e565b8282616e48816188de565b935060ff1681518110616e5d57616e5d618771565b60200260200101819052505b856080015115616ed75760408051808201909152601881527f2d2d756e73616665536b697053746f72616765436865636b000000000000000060208201528282616eb2816188de565b935060ff1681518110616ec757616ec7618771565b6020026020010181905250616f3d565b8415616f3d5760408051808201909152601281527f2d2d726571756972655265666572656e6365000000000000000000000000000060208201528282616f1c816188de565b935060ff1681518110616f3157616f31618771565b60200260200101819052505b60408601515115616fd95760408051808201909152600d81527f2d2d756e73616665416c6c6f770000000000000000000000000000000000000060208201528282616f87816188de565b935060ff1681518110616f9c57616f9c618771565b60200260200101819052508560400151828280616fb8906188de565b935060ff1681518110616fcd57616fcd618771565b60200260200101819052505b8560600151156170435760408051808201909152601481527f2d2d756e73616665416c6c6f7752656e616d657300000000000000000000000060208201528282617022816188de565b935060ff168151811061703757617037618771565b60200260200101819052505b60008160ff1667ffffffffffffffff81111561706157617061617fd1565b60405190808252806020026020018201604052801561709457816020015b606081526020019060019003908161707f5790505b50905060005b8260ff168160ff1610156170ed57838160ff16815181106170bd576170bd618771565b6020026020010151828260ff16815181106170da576170da618771565b602090810291909101015260010161709a565b50979650505050505050565b604080518082019091526000808252602082015281518351101561711e575081613729565b8151835160208501516000929161713491618e9f565b61713e919061811d565b6020840151909150600190821461715f575082516020840151819020908220145b801561717a5783518551869061717690839061811d565b9052505b50929392505050565b60008082600001516171a785600001518660200151866000015187602001516174c9565b6171b19190618e9f565b90505b835160208501516171c59190618e9f565b8111616aee57816171d5816190a1565b925050826000015161720c8560200151836171f0919061811d565b86516171fc919061811d565b83866000015187602001516174c9565b6172169190618e9f565b90506171b4565b6060600061722b8484617183565b617236906001618e9f565b67ffffffffffffffff81111561724e5761724e617fd1565b60405190808252806020026020018201604052801561728157816020015b606081526020019060019003908161726c5790505b50905060005b81518110156154f65761729d6157188686616acf565b8282815181106172af576172af618771565b6020908102919091010152600101617287565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000831061730b577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310617337576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc10000831061735557662386f26fc10000830492506010015b6305f5e100831061736d576305f5e100830492506008015b612710831061738157612710830492506004015b60648310617393576064830492506002015b600a83106137295760010192915050565b60006173b0838361774e565b159392505050565b6000808584116174bf576020841161746b57600084156174035760016173df86602061811d565b6173ea9060086190bb565b6173f59060026191b9565b6173ff919061811d565b1990505b83518116856174128989618e9f565b61741c919061811d565b805190935082165b8181146174565787841161743e5787945050505050615127565b83617448816191c5565b945050828451169050617424565b6174608785618e9f565b945050505050615127565b838320617478858861811d565b6174829087618e9f565b91505b8582106174bd578482208082036174aa576174a08684618e9f565b9350505050615127565b6174b560018461811d565b925050617485565b505b5092949350505050565b600083818685116175d4576020851161758357600085156175155760016174f187602061811d565b6174fc9060086190bb565b6175079060026191b9565b617511919061811d565b1990505b845181166000876175268b8b618e9f565b617530919061811d565b855190915083165b8281146175755781861061755d576175508b8b618e9f565b9650505050505050615127565b85617567816190a1565b965050838651169050617538565b859650505050505050615127565b508383206000905b617595868961811d565b82116175d2578583208082036175b15783945050505050615127565b6175bc600185618e9f565b93505081806175ca906190a1565b92505061758b565b505b6175de8787618e9f565b979650505050505050565b6040805180820190915260008082526020820152600061761b85600001518660200151866000015187602001516174c9565b602080870180519186019190915251909150617637908261811d565b83528451602086015161764a9190618e9f565b8103617659576000855261768b565b835183516176679190618e9f565b8551869061767690839061811d565b90525083516176859082618e9f565b60208601525b50909392505050565b602081106176cc57815183526176ab602084618e9f565b92506176b8602083618e9f565b91506176c560208261811d565b9050617694565b60001981156176fb5760016176e283602061811d565b6176ee906101006191b9565b6176f8919061811d565b90505b9151835183169219169190911790915250565b6060600061771c8484613bfa565b8051602080830151604051939450617736939091016191dc565b60405160208183030381529060405291505092915050565b8151815160009190811115617761575081515b6020808501519084015160005b8381101561781a57825182518082146177ea5760001960208710156177c95760018461779b89602061811d565b6177a59190618e9f565b6177b09060086190bb565b6177bb9060026191b9565b6177c5919061811d565b1990505b81811683821681810391146177e75797506137299650505050505050565b50505b6177f5602086618e9f565b9450617802602085618e9f565b935050506020816178139190618e9f565b905061776e565b50845186516142a89190619234565b610c9f806200925583390190565b6117988062009ef483390190565b61155a806200b68c83390190565b610d5e806200cbe683390190565b61080c806200d94483390190565b610b3f806200e15083390190565b611bb9806200ec8f83390190565b6040518060e001604052806060815260200160608152602001606081526020016000151581526020016000151581526020016000151581526020016178ce6178d3565b905290565b604051806101000160405280600015158152602001600015158152602001606081526020016000801916815260200160608152602001606081526020016000151581526020016178ce6040518060800160405280600081526020016000815260200160008152602001600081525090565b602080825282518282018190526000918401906040840190835b818110156179855783516001600160a01b031683526020938401939092019160010161795e565b509095945050505050565b60005b838110156179ab578181015183820152602001617993565b50506000910152565b600081518084526179cc816020860160208601617990565b601f01601f19169290920160200192915050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015617adc577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452815180516001600160a01b03168652602090810151604082880181905281519088018190529101906060600582901b88018101919088019060005b81811015617ac2577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa08a8503018352617aac8486516179b4565b6020958601959094509290920191600101617a72565b509197505050602094850194929092019150600101617a08565b50929695505050505050565b600081518084526020840193506020830160005b82811015617b3c5781517fffffffff0000000000000000000000000000000000000000000000000000000016865260209586019590910190600101617afc565b5093949350505050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015617adc577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08786030184528151805160408752617bb260408801826179b4565b9050602082015191508681036020880152617bcd8183617ae8565b965050506020938401939190910190600101617b6e565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015617adc577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452617c468583516179b4565b94506020938401939190910190600101617c0c565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015617adc577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc087860301845281516001600160a01b0381511686526020810151905060406020870152617cdc6040870182617ae8565b9550506020938401939190910190600101617c83565b600060208284031215617d0457600080fd5b8151801515811461382a57600080fd5b610100815260056101008201527f544f4b454e000000000000000000000000000000000000000000000000000000610120820152610140602082015260036101408201527f544b4e000000000000000000000000000000000000000000000000000000000061016082015260006101808201905060ff8816604083015286606083015260038610617dce577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b8560808301528460a0830152617def60c08301856001600160a01b03169052565b6001600160a01b03831660e0830152979650505050505050565b600181811c90821680617e1d57607f821691505b6020821081036159f3577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060208284031215617e6857600080fd5b5051919050565b606081526000617e8260608301866179b4565b602083019490945250901515604090910152919050565b608081526000617eac60808301876179b4565b62ffffff861660208401526001600160a01b038516604084015282810360608401526175de81856179b4565b6001600160a01b03841681528260208201526060604082015260006159d960608301846179b4565b60c081526000617f1360c08301896179b4565b8760208401526001600160a01b03871660408401528281036060840152617f3a81876179b4565b6080840195909552505090151560a090910152949350505050565b6001600160a01b038616815284602082015260a060408201526000617f7d60a08301866179b4565b6060830194909452509015156080909101529392505050565b82815260406020820152600061512760408301846179b4565b6001600160a01b038316815260406020820152600061512760408301846179b4565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040516060810167ffffffffffffffff8111828210171561802357618023617fd1565b60405290565b60008067ffffffffffffffff84111561804457618044617fd1565b50604051601f19601f85018116603f0116810181811067ffffffffffffffff8211171561807357618073617fd1565b60405283815290508082840185101561808b57600080fd5b6154f6846020830185617990565b600082601f8301126180aa57600080fd5b61382a83835160208501618029565b6000602082840312156180cb57600080fd5b815167ffffffffffffffff8111156180e257600080fd5b61372584828501618099565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b81810381811115613729576137296180ee565b60c08152600061814360c08301896179b4565b6001600160a01b038816602084015286604084015285606084015284608084015282810360a084015261817681856179b4565b9998505050505050505050565b60808152600061819660808301876179b4565b8560208401526001600160a01b038516604084015282810360608401526175de81856179b4565b6040815260006181d060408301856179b4565b828103602084015261382681856179b4565b6060815260006181f560608301866179b4565b84602084015282810360408401526142a881856179b4565b60a08152600061822060a08301886179b4565b866020840152828103604084015261823881876179b4565b606084019590955250509015156080909101529392505050565b7f4661696c656420746f206465706c6f7920636f6e74726163742000000000000081526000835161828a81601a850160208801617990565b7f3a20000000000000000000000000000000000000000000000000000000000000601a9184019182015283516182c781601c840160208801617990565b01601c01949350505050565b60208152600061382a60208301846179b4565b6000602082840312156182f857600080fd5b81516001600160a01b038116811461382a57600080fd5b60008351618321818460208801617990565b835190830190618335818360208801617990565b01949350505050565b7f4661696c656420746f206465706c6f7920636f6e74726163742000000000000081526000835161837681601a850160208801617990565b7f207573696e6720636f6e7374727563746f722064617461202200000000000000601a9184019182015283516183b3816033840160208801617990565b7f220000000000000000000000000000000000000000000000000000000000000060339290910191820152603401949350505050565b60408152600b60408201527f464f554e4452595f4f5554000000000000000000000000000000000000000000606082015260806020820152600061382a60808301846179b4565b60006020828403121561844257600080fd5b815167ffffffffffffffff81111561845957600080fd5b8201601f8101841361846a57600080fd5b61372584825160208401618029565b6000855161848b818460208a01617990565b7f2f0000000000000000000000000000000000000000000000000000000000000090830190815285516184c5816001840160208a01617990565b7f2f00000000000000000000000000000000000000000000000000000000000000600192909101918201528451618503816002840160208901617990565b6001818301019150507f2f0000000000000000000000000000000000000000000000000000000000000060018201528351618545816002840160208801617990565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600292909101918201526007019695505050505050565b60408152600061859060408301846179b4565b8281036020840152600481527f2e6173740000000000000000000000000000000000000000000000000000000060208201526040810191505092915050565b7f436f756c64206e6f742066696e642041535420696e206172746966616374200081526000825161860781601f850160208701617990565b7f2e205365742060617374203d20747275656020696e20666f756e6472792e746f601f9390910192830152507f6d6c000000000000000000000000000000000000000000000000000000000000603f820152604101919050565b60408152600061867460408301846179b4565b8281036020840152601181527f2e6173742e6162736f6c7574655061746800000000000000000000000000000060208201526040810191505092915050565b6040815260006186c660408301846179b4565b8281036020840152600c81527f2e6173742e6c6963656e7365000000000000000000000000000000000000000060208201526040810191505092915050565b7f2e6d657461646174612e736f75726365732e5b2700000000000000000000000081526000825161873d816014850160208701617990565b7f275d2e6b656363616b32353600000000000000000000000000000000000000006014939091019283015250602001919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f22000000000000000000000000000000000000000000000000000000000000008152600082516187d8816001850160208701617990565b7f22000000000000000000000000000000000000000000000000000000000000006001939091019283015250600201919050565b6000825161881e818460208701617990565b7f2f6275696c642d696e666f000000000000000000000000000000000000000000920191825250600b01919050565b7f436f756c64206e6f742066696e64206275696c642d696e666f2066696c65207781527f697468206d61746368696e6720736f7572636520636f6465206861736820666f60208201527f7220636f6e7472616374200000000000000000000000000000000000000000006040820152600082516188d181604b850160208701617990565b91909101604b0192915050565b600060ff821660ff81036188f4576188f46180ee565b60010192915050565b7f406f70656e7a657070656c696e2f646566656e6465722d6465706c6f792d636c81527f69656e742d636c6940000000000000000000000000000000000000000000000060208201526000825161895b816029850160208701617990565b9190910160290192915050565b60408152601660408201527f4f50454e5a455050454c494e5f424153485f5041544800000000000000000000606082015260806020820152600061382a60808301846179b4565b6000602082840312156189c157600080fd5b815167ffffffffffffffff8111156189d857600080fd5b8201606081850312156189ea57600080fd5b6189f2618000565b81518060030b8114618a0357600080fd5b8152602082015167ffffffffffffffff811115618a1f57600080fd5b618a2b86828501618099565b602083015250604082015167ffffffffffffffff811115618a4b57600080fd5b618a5786828501618099565b604083015250949350505050565b7f4661696c656420746f2072756e206261736820636f6d6d616e6420776974682081527f2200000000000000000000000000000000000000000000000000000000000000602082015260008251618ac3816021850160208701617990565b7f222e20496620796f7520617265207573696e672057696e646f77732c2073657460219390910192830152507f20746865204f50454e5a455050454c494e5f424153485f5041544820656e766960418201527f726f6e6d656e74207661726961626c6520746f207468652066756c6c7920717560618201527f616c69666965642070617468206f66207468652062617368206578656375746160818201527f626c652e20466f72206578616d706c652c20696620796f75206172652075736960a18201527f6e672047697420666f722057696e646f77732c206164642074686520666f6c6c60c18201527f6f77696e67206c696e6520696e20746865202e656e762066696c65206f66207960e18201527f6f75722070726f6a65637420287573696e6720666f727761726420736c6173686101018201527f6573293a0a4f50454e5a455050454c494e5f424153485f504154483d22433a2f6101218201527f50726f6772616d2046696c65732f4769742f62696e2f6261736822000000000061014182015261015c01919050565b7f4661696c656420746f2066696e64206c696e652077697468207072656669782081527f2700000000000000000000000000000000000000000000000000000000000000602082015260008351618caf816021850160208801617990565b7f2720696e206f75747075743a20000000000000000000000000000000000000006021918401918201528351618cec81602e840160208801617990565b01602e01949350505050565b7f4661696c656420746f2072756e2075706772616465207361666574792076616c81527f69646174696f6e3a20000000000000000000000000000000000000000000000060208201526000825161895b816029850160208701617990565b7f55706772616465207361666574792076616c69646174696f6e206661696c656481527f3a0a000000000000000000000000000000000000000000000000000000000000602082015260008251618db4816022850160208701617990565b9190910160220192915050565b7f436f6e7472616374206e616d6520000000000000000000000000000000000000815260008251618df981600e850160208701617990565b7f206d75737420626520696e2074686520666f726d6174204d79436f6e74726163600e9390910192830152507f742e736f6c3a4d79436f6e7472616374206f72204d79436f6e74726163742e73602e8201527f6f6c206f72206f75742f4d79436f6e74726163742e736f6c2f4d79436f6e7472604e8201527f6163742e6a736f6e000000000000000000000000000000000000000000000000606e820152607601919050565b80820180821115613729576137296180ee565b7f53504458206c6963656e7365206964656e746966696572200000000000000000815260008351618eea816018850160208801617990565b7f20696e20000000000000000000000000000000000000000000000000000000006018918401918201528351618f2781601c840160208801617990565b7f20646f6573206e6f74206c6f6f6b206c696b65206120737570706f7274656420601c92909101918201527f6c6963656e736520666f7220626c6f636b206578706c6f726572207665726966603c8201527f69636174696f6e2e205573652074686520606c6963656e73655479706560206f605c8201527f7074696f6e20746f20737065636966792061206c6963656e736520747970652c607c8201527f206f7220736574207468652060736b69704c6963656e73655479706560206f70609c8201527f74696f6e20746f2060747275656020746f20736b69702e00000000000000000060bc82015260d301949350505050565b6000825161902d818460208701617990565b7f2000000000000000000000000000000000000000000000000000000000000000920191825250600101919050565b7f406f70656e7a657070656c696e2f75706772616465732d636f7265400000000081526000825161909481601c850160208701617990565b91909101601c0192915050565b600060001982036190b4576190b46180ee565b5060010190565b8082028115828204841417613729576137296180ee565b6001815b600184111561910d578085048111156190f1576190f16180ee565b60018416156190ff57908102905b60019390931c9280026190d6565b935093915050565b60008261912457506001613729565b8161913157506000613729565b816001811461914757600281146191515761916d565b6001915050613729565b60ff841115619162576191626180ee565b50506001821b613729565b5060208310610133831016604e8410600b8410161715619190575081810a613729565b61919d60001984846190d2565b80600019048211156191b1576191b16180ee565b029392505050565b600061382a8383619115565b6000816191d4576191d46180ee565b506000190190565b600083516191ee818460208801617990565b7f3a000000000000000000000000000000000000000000000000000000000000009083019081528351619228816001840160208801617990565b01600101949350505050565b8181036000831280158383131683831282161715616aee57616aee6180ee56fe608060405234801561001057600080fd5b50604051610c9f380380610c9f83398101604081905261002f9161010d565b8181600361003d83826101ff565b50600461004a82826101ff565b50505050506102bd565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261007b57600080fd5b81516001600160401b0381111561009457610094610054565b604051601f8201601f19908116603f011681016001600160401b03811182821017156100c2576100c2610054565b6040528181528382016020018510156100da57600080fd5b60005b828110156100f9576020818601810151838301820152016100dd565b506000918101602001919091529392505050565b6000806040838503121561012057600080fd5b82516001600160401b0381111561013657600080fd5b6101428582860161006a565b602085015190935090506001600160401b0381111561016057600080fd5b61016c8582860161006a565b9150509250929050565b600181811c9082168061018a57607f821691505b6020821081036101aa57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156101fa57806000526020600020601f840160051c810160208510156101d75750805b601f840160051c820191505b818110156101f757600081556001016101e3565b50505b505050565b81516001600160401b0381111561021857610218610054565b61022c816102268454610176565b846101b0565b6020601f82116001811461026057600083156102485750848201515b600019600385901b1c1916600184901b1784556101f7565b600084815260208120601f198516915b828110156102905787850151825560209485019460019092019101610270565b50848210156102ae5786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b6109d3806102cc6000396000f3fe608060405234801561001057600080fd5b50600436106100be5760003560e01c806340c10f191161007657806395d89b411161005b57806395d89b4114610183578063a9059cbb1461018b578063dd62ed3e1461019e57600080fd5b806340c10f191461013857806370a082311461014d57600080fd5b806318160ddd116100a757806318160ddd1461010457806323b872dd14610116578063313ce5671461012957600080fd5b806306fdde03146100c3578063095ea7b3146100e1575b600080fd5b6100cb6101e4565b6040516100d891906107bf565b60405180910390f35b6100f46100ef366004610854565b610276565b60405190151581526020016100d8565b6002545b6040519081526020016100d8565b6100f461012436600461087e565b610290565b604051601281526020016100d8565b61014b610146366004610854565b6102b4565b005b61010861015b3660046108bb565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6100cb6102c2565b6100f4610199366004610854565b6102d1565b6101086101ac3660046108dd565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6060600380546101f390610910565b80601f016020809104026020016040519081016040528092919081815260200182805461021f90610910565b801561026c5780601f106102415761010080835404028352916020019161026c565b820191906000526020600020905b81548152906001019060200180831161024f57829003601f168201915b5050505050905090565b6000336102848185856102df565b60019150505b92915050565b60003361029e8582856102f1565b6102a98585856103c5565b506001949350505050565b6102be8282610470565b5050565b6060600480546101f390610910565b6000336102848185856103c5565b6102ec83838360016104cc565b505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146103bf57818110156103b0576040517ffb8f41b200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416600482015260248101829052604481018390526064015b60405180910390fd5b6103bf848484840360006104cc565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8316610415576040517f96c6fd1e000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff8216610465576040517fec442f05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b6102ec838383610614565b73ffffffffffffffffffffffffffffffffffffffff82166104c0576040517fec442f05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b6102be60008383610614565b73ffffffffffffffffffffffffffffffffffffffff841661051c576040517fe602df05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff831661056c576040517f94280d62000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260016020908152604080832093871683529290522082905580156103bf578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161060691815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff831661064c5780600260008282546106419190610963565b909155506106fe9050565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260208190526040902054818110156106d2576040517fe450d38c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8516600482015260248101829052604481018390526064016103a7565b73ffffffffffffffffffffffffffffffffffffffff841660009081526020819052604090209082900390555b73ffffffffffffffffffffffffffffffffffffffff821661072757600280548290039055610753565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090208054820190555b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516107b291815260200190565b60405180910390a3505050565b602081526000825180602084015260005b818110156107ed57602081860181015160408684010152016107d0565b5060006040828501015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011684010191505092915050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461084f57600080fd5b919050565b6000806040838503121561086757600080fd5b6108708361082b565b946020939093013593505050565b60008060006060848603121561089357600080fd5b61089c8461082b565b92506108aa6020850161082b565b929592945050506040919091013590565b6000602082840312156108cd57600080fd5b6108d68261082b565b9392505050565b600080604083850312156108f057600080fd5b6108f98361082b565b91506109076020840161082b565b90509250929050565b600181811c9082168061092457607f821691505b60208210810361095d577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b8082018082111561028a577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea26469706673582212207e804ca539d49155d2b6bc19268ce22f9f857027c75247d69fb0d56a089c93d464736f6c634300081a003360a060405234801561001057600080fd5b5060405161179838038061179883398101604081905261002f916101e5565b60016000556002805460ff191690556001600160a01b038316158061005b57506001600160a01b038216155b8061006d57506001600160a01b038116155b1561008b5760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b0383166080526100a3600082610134565b506100ce7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a82610134565b506100f97f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e483610134565b5061011260008051602061177883398151915282610134565b5061012b60008051602061177883398151915283610134565b50505050610228565b60008281526001602090815260408083206001600160a01b038516845290915281205460ff166101bf5760008381526001602081815260408084206001600160a01b0387168086529252808420805460ff19169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45060016101c3565b5060005b92915050565b80516001600160a01b03811681146101e057600080fd5b919050565b6000806000606084860312156101fa57600080fd5b610203846101c9565b9250610211602085016101c9565b915061021f604085016101c9565b90509250925092565b60805161151961025f6000396000818161019e01528181610500015281816105620152818161099101526109f301526115196000f3fe608060405234801561001057600080fd5b506004361061016c5760003560e01c806385f438c1116100cd578063c8a0236211610081578063d936547e11610066578063d936547e14610355578063d9caed1214610378578063e63ab1e91461038b57600080fd5b8063c8a023621461032f578063d547741f1461034257600080fd5b80639a590427116100b25780639a590427146103015780639b19251a14610314578063a217fddf1461032757600080fd5b806385f438c11461029457806391d14854146102bb57600080fd5b806336568abe11610124578063570618e111610109578063570618e11461025a5780635c975abb146102815780638456cb591461028c57600080fd5b806336568abe1461023f5780633f4ba83a1461025257600080fd5b806321fc65f21161015557806321fc65f2146101e5578063248a9ca3146101fa5780632f2ff15d1461022c57600080fd5b806301ffc9a714610171578063116191b614610199575b600080fd5b61018461017f366004611224565b6103b2565b60405190151581526020015b60405180910390f35b6101c07f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610190565b6101f86101f336600461128f565b61044b565b005b61021e61020836600461132c565b6000908152600160208190526040909120015490565b604051908152602001610190565b6101f861023a366004611345565b61064c565b6101f861024d366004611345565b610678565b6101f86106d6565b61021e7f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a81565b60025460ff16610184565b6101f861070b565b61021e7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b6101846102c9366004611345565b600091825260016020908152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b6101f861030f366004611371565b61073d565b6101f8610322366004611371565b61080b565b61021e600081565b6101f861033d36600461128f565b6108dc565b6101f8610350366004611345565b610ac3565b610184610363366004611371565b60036020526000908152604090205460ff1681565b6101f861038636600461138c565b610ae9565b61021e7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061044557507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b610453610c15565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461047d81610c58565b610485610c62565b73ffffffffffffffffffffffffffffffffffffffff861660009081526003602052604090205460ff166104e4576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61052573ffffffffffffffffffffffffffffffffffffffff87167f000000000000000000000000000000000000000000000000000000000000000086610ca1565b6040517f5131ab5900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690635131ab599061059f9089908990899089908990600401611412565b600060405180830381600087803b1580156105b957600080fd5b505af11580156105cd573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167f85b5be9cf454e05e0bddf49315178102227c312078eefa3c00294fb4d912ae4e8686866040516106329392919061146f565b60405180910390a3506106456001600055565b5050505050565b6000828152600160208190526040909120015461066881610c58565b6106728383610d2e565b50505050565b73ffffffffffffffffffffffffffffffffffffffff811633146106c7576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6106d18282610ddb565b505050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61070081610c58565b610708610e7c565b50565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61073581610c58565b610708610edb565b7f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a61076781610c58565b73ffffffffffffffffffffffffffffffffffffffff82166107b4576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216600081815260036020526040808220805460ff19169055517f51085ddf9ebdded84b76e829eb58c4078e4b5bdf97d9a94723f336039da467919190a25050565b7f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a61083581610c58565b73ffffffffffffffffffffffffffffffffffffffff8216610882576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216600081815260036020526040808220805460ff19166001179055517faab7954e9d246b167ef88aeddad35209ca2489d95a8aeb59e288d9b19fae5a549190a25050565b6108e4610c15565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461090e81610c58565b610916610c62565b73ffffffffffffffffffffffffffffffffffffffff861660009081526003602052604090205460ff16610975576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6109b673ffffffffffffffffffffffffffffffffffffffff87167f000000000000000000000000000000000000000000000000000000000000000086610ca1565b6040517fb8969bd400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063b8969bd490610a309089908990899089908990600401611412565b600060405180830381600087803b158015610a4a57600080fd5b505af1158015610a5e573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fb9d4efa96044e5f5e03e696fa9ae2ff66911cc27e8a637c3627c75bc5b2241c88686866040516106329392919061146f565b60008281526001602081905260409091200154610adf81610c58565b6106728383610ddb565b610af1610c15565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e4610b1b81610c58565b610b23610c62565b73ffffffffffffffffffffffffffffffffffffffff841660009081526003602052604090205460ff16610b82576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610ba373ffffffffffffffffffffffffffffffffffffffff85168484610ca1565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f9b1bfa7fa9ee420a16e124f794c35ac9f90472acc99140eb2f6447c714cad8eb84604051610c0291815260200190565b60405180910390a3506106d16001600055565b600260005403610c51576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b6107088133610f18565b60025460ff1615610c9f576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6040805173ffffffffffffffffffffffffffffffffffffffff8416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb000000000000000000000000000000000000000000000000000000001790526106d1908490610fa9565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff16610dd357600083815260016020818152604080842073ffffffffffffffffffffffffffffffffffffffff87168086529252808420805460ff19169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a4506001610445565b506000610445565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff1615610dd357600083815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff86168085529252808320805460ff1916905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a4506001610445565b610e8461103f565b6002805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b610ee3610c62565b6002805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258610eb13390565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16610fa5576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82166004820152602481018390526044015b60405180910390fd5b5050565b6000610fcb73ffffffffffffffffffffffffffffffffffffffff84168361107b565b90508051600014158015610ff0575080806020019051810190610fee9190611492565b155b156106d1576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84166004820152602401610f9c565b60025460ff16610c9f576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606061108983836000611090565b9392505050565b6060814710156110ce576040517fcd786059000000000000000000000000000000000000000000000000000000008152306004820152602401610f9c565b6000808573ffffffffffffffffffffffffffffffffffffffff1684866040516110f791906114b4565b60006040518083038185875af1925050503d8060008114611134576040519150601f19603f3d011682016040523d82523d6000602084013e611139565b606091505b5091509150611149868383611153565b9695505050505050565b60608261116857611163826111e2565b611089565b815115801561118c575073ffffffffffffffffffffffffffffffffffffffff84163b155b156111db576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85166004820152602401610f9c565b5080611089565b8051156111f25780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006020828403121561123657600080fd5b81357fffffffff000000000000000000000000000000000000000000000000000000008116811461108957600080fd5b803573ffffffffffffffffffffffffffffffffffffffff8116811461128a57600080fd5b919050565b6000806000806000608086880312156112a757600080fd5b6112b086611266565b94506112be60208701611266565b935060408601359250606086013567ffffffffffffffff8111156112e157600080fd5b8601601f810188136112f257600080fd5b803567ffffffffffffffff81111561130957600080fd5b88602082840101111561131b57600080fd5b959894975092955050506020019190565b60006020828403121561133e57600080fd5b5035919050565b6000806040838503121561135857600080fd5b8235915061136860208401611266565b90509250929050565b60006020828403121561138357600080fd5b61108982611266565b6000806000606084860312156113a157600080fd5b6113aa84611266565b92506113b860208501611266565b929592945050506040919091013590565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff8616815273ffffffffffffffffffffffffffffffffffffffff851660208201528360408201526080606082015260006114646080830184866113c9565b979650505050505050565b8381526040602082015260006114896040830184866113c9565b95945050505050565b6000602082840312156114a457600080fd5b8151801515811461108957600080fd5b6000825160005b818110156114d557602081860181015185830152016114bb565b50600092019182525091905056fea26469706673582212207ea3ad4ba4a6d39c3be3cec464753448900300ac3b508b4000815de5b914c53064736f6c634300081a00338619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a60c060405260001960035534801561001657600080fd5b5060405161155a38038061155a83398101604081905261003591610220565b60016000819055805460ff19169055838383836001600160a01b038416158061006557506001600160a01b038316155b8061007757506001600160a01b038216155b8061008957506001600160a01b038116155b156100a75760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b03808516608052831660a0526100c5600082610154565b506100f07f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e483610154565b5061011b7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb83610154565b506101467f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a82610154565b505050505050505050610274565b60008281526002602090815260408083206001600160a01b038516845290915281205460ff166101fa5760008381526002602090815260408083206001600160a01b03861684529091529020805460ff191660011790556101b23390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45060016101fe565b5060005b92915050565b80516001600160a01b038116811461021b57600080fd5b919050565b6000806000806080858703121561023657600080fd5b61023f85610204565b935061024d60208601610204565b925061025b60408601610204565b915061026960608601610204565b905092959194509250565b60805160a0516112826102d86000396000818161021d01528181610531015281816108240152818161097b01528181610ad00152610bf20152600081816101d1015281816104a1015281816105040152818161079401526107f701526112826000f3fe608060405234801561001057600080fd5b50600436106101775760003560e01c80635e3e9fef116100d857806391d148541161008c578063d547741f11610066578063d547741f14610386578063d5abeb0114610399578063e63ab1e9146103a257600080fd5b806391d1485414610311578063a217fddf14610357578063a783c7891461035f57600080fd5b8063743e0c9b116100bd578063743e0c9b146102cf5780638456cb59146102e257806385f438c1146102ea57600080fd5b80635e3e9fef146102a95780636f8b44b0146102bc57600080fd5b8063248a9ca31161012f57806336568abe1161011457806336568abe146102835780633f4ba83a146102965780635c975abb1461029e57600080fd5b8063248a9ca31461023f5780632f2ff15d1461027057600080fd5b8063106e629011610160578063106e6290146101b9578063116191b6146101cc57806321e093b11461021857600080fd5b806301ffc9a71461017c57806302d5c899146101a4575b600080fd5b61018f61018a366004610fb4565b6103c9565b60405190151581526020015b60405180910390f35b6101b76101b2366004611026565b610462565b005b6101b76101c73660046110b8565b6105f7565b6101f37f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161019b565b6101f37f000000000000000000000000000000000000000000000000000000000000000081565b61026261024d3660046110eb565b60009081526002602052604090206001015490565b60405190815260200161019b565b6101b761027e366004611104565b61069c565b6101b7610291366004611104565b6106c7565b6101b7610720565b60015460ff1661018f565b6101b76102b7366004611026565b610755565b6101b76102ca3660046110eb565b6108d0565b6101b76102dd3660046110eb565b61093e565b6101b76109e8565b6102627f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b61018f61031f366004611104565b600091825260026020908152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b610262600081565b6102627f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb81565b6101b7610394366004611104565b610a1a565b61026260035481565b6102627f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061045c57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b61046a610a3f565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461049481610a82565b61049c610a8c565b6104c77f00000000000000000000000000000000000000000000000000000000000000008684610acb565b6040517fb8969bd400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063b8969bd490610561907f0000000000000000000000000000000000000000000000000000000000000000908a908a908a908a90600401611179565b600060405180830381600087803b15801561057b57600080fd5b505af115801561058f573d6000803e3d6000fd5b505050508573ffffffffffffffffffffffffffffffffffffffff167fba96f26bdda53eb8c8ba39045dfb4ff39753fbc7a6edcf250a88e75e78d102fe8686866040516105dd939291906111d6565b60405180910390a2506105f06001600055565b5050505050565b6105ff610a3f565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461062981610a82565b610631610a8c565b61063c848484610acb565b8373ffffffffffffffffffffffffffffffffffffffff167f884edad9ce6fa2440d8a54cc123490eb96d2768479d49ff9c7366125a94243648460405161068491815260200190565b60405180910390a2506106976001600055565b505050565b6000828152600260205260409020600101546106b781610a82565b6106c18383610c53565b50505050565b73ffffffffffffffffffffffffffffffffffffffff81163314610716576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6106978282610d53565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61074a81610a82565b610752610e12565b50565b61075d610a3f565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461078781610a82565b61078f610a8c565b6107ba7f00000000000000000000000000000000000000000000000000000000000000008684610acb565b6040517f5131ab5900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690635131ab5990610854907f0000000000000000000000000000000000000000000000000000000000000000908a908a908a908a90600401611179565b600060405180830381600087803b15801561086e57600080fd5b505af1158015610882573d6000803e3d6000fd5b505050508573ffffffffffffffffffffffffffffffffffffffff167f7772f56296d3a5202974a45c61c9188d844ab4d6eeb18c851e4b8d5384ca6ced8686866040516105dd939291906111d6565b7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb6108fa81610a82565b610902610a8c565b60038290556040518281527f7810bd47de260c3e9ee10061cf438099dd12256c79485f12f94dbccc981e806c9060200160405180910390a15050565b610946610a8c565b6040517f79cc6790000000000000000000000000000000000000000000000000000000008152336004820152602481018290527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16906379cc679090604401600060405180830381600087803b1580156109d457600080fd5b505af11580156105f0573d6000803e3d6000fd5b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610a1281610a82565b610752610e8f565b600082815260026020526040902060010154610a3581610a82565b6106c18383610d53565b600260005403610a7b576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b6107528133610ee8565b60015460ff1615610ac9576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6003547f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b39573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b5d91906111f9565b610b679084611212565b1115610b9f576040517fc30436e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f1e458bee00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff848116600483015260248201849052604482018390527f00000000000000000000000000000000000000000000000000000000000000001690631e458bee90606401600060405180830381600087803b158015610c3657600080fd5b505af1158015610c4a573d6000803e3d6000fd5b50505050505050565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff16610d4b57600083815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff86168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055610ce93390565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a450600161045c565b50600061045c565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff1615610d4b57600083815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8616808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a450600161045c565b610e1a610f78565b600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b610e97610a8c565b600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016811790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25833610e65565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16610f74576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff821660048201526024810183905260440160405180910390fd5b5050565b60015460ff16610ac9576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060208284031215610fc657600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610ff657600080fd5b9392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461102157600080fd5b919050565b60008060008060006080868803121561103e57600080fd5b61104786610ffd565b945060208601359350604086013567ffffffffffffffff81111561106a57600080fd5b8601601f8101881361107b57600080fd5b803567ffffffffffffffff81111561109257600080fd5b8860208284010111156110a457600080fd5b959894975060200195606001359392505050565b6000806000606084860312156110cd57600080fd5b6110d684610ffd565b95602085013595506040909401359392505050565b6000602082840312156110fd57600080fd5b5035919050565b6000806040838503121561111757600080fd5b8235915061112760208401610ffd565b90509250929050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff8616815273ffffffffffffffffffffffffffffffffffffffff851660208201528360408201526080606082015260006111cb608083018486611130565b979650505050505050565b8381526040602082015260006111f0604083018486611130565b95945050505050565b60006020828403121561120b57600080fd5b5051919050565b8082018082111561045c577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea2646970667358221220de5fa55e0ca79ea2f08903481d01ea00bbbf346b9cfba44e12a2dd6f3a6f2e8a64736f6c634300081a00336080604052348015600f57600080fd5b506001600055610d3a806100246000396000f3fe6080604052600436106100635760003560e01c8063c513169111610040578063c5131691146100c1578063e04d4f97146100e1578063f05b6abf146100f457005b8063357fc5a21461006c5780636ed701691461008c5780638fcaa0b5146100a157005b3661006a57005b005b34801561007857600080fd5b5061006a6100873660046106c0565b610114565b34801561009857600080fd5b5061006a6101aa565b3480156100ad57600080fd5b5061006a6100bc3660046106fc565b6101df565b3480156100cd57600080fd5b5061006a6100dc3660046106c0565b61021e565b61006a6100ef366004610895565b6102f9565b34801561010057600080fd5b5061006a61010f366004610981565b61033d565b61011c610372565b61013e73ffffffffffffffffffffffffffffffffffffffff83163383866103b5565b604080513381526020810185905273ffffffffffffffffffffffffffffffffffffffff848116828401528316606082015290517f2b58128f24a9f59127cc5b5430d70542b22220f2d9adaa86e442b816ab98af609181900360800190a16101a56001600055565b505050565b6040513381527fbcaadb46b82a48af60b608f58959ae6b8310d1b0a0d094c2e9ec3208ed39f2a09060200160405180910390a1565b7f0d3f65f00e631663aa85c96330b5c7a83bb29af3630c0063776f985edc3037aa33838360405161021293929190610a6b565b60405180910390a15050565b610226610372565b6000610233600285610ad5565b90508060000361026f576040517f1f2a200500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61029173ffffffffffffffffffffffffffffffffffffffff84163384846103b5565b604080513381526020810183905273ffffffffffffffffffffffffffffffffffffffff858116828401528416606082015290517f2b58128f24a9f59127cc5b5430d70542b22220f2d9adaa86e442b816ab98af609181900360800190a1506101a56001600055565b7f1f1ff1f5fb41346850b2f5c04e6c767e2f1c8a525c5c0c5cdb60cdf3ca5f62fa3334858585604051610330959493929190610b7e565b60405180910390a1505050565b7f74a53cd528a921fca7dbdee62f86819051d3cc98f214951f4238e8843f20b146338484846040516103309493929190610c08565b6002600054036103ae576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b6040805173ffffffffffffffffffffffffffffffffffffffff85811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd0000000000000000000000000000000000000000000000000000000017905261044a908590610450565b50505050565b600061047273ffffffffffffffffffffffffffffffffffffffff8416836104eb565b905080516000141580156104975750808060200190518101906104959190610ccb565b155b156101a5576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff841660048201526024015b60405180910390fd5b60606104f983836000610500565b9392505050565b60608147101561053e576040517fcd7860590000000000000000000000000000000000000000000000000000000081523060048201526024016104e2565b6000808573ffffffffffffffffffffffffffffffffffffffff1684866040516105679190610ce8565b60006040518083038185875af1925050503d80600081146105a4576040519150601f19603f3d011682016040523d82523d6000602084013e6105a9565b606091505b50915091506105b98683836105c3565b9695505050505050565b6060826105d8576105d382610652565b6104f9565b81511580156105fc575073ffffffffffffffffffffffffffffffffffffffff84163b155b1561064b576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff851660048201526024016104e2565b50806104f9565b8051156106625780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50565b803573ffffffffffffffffffffffffffffffffffffffff811681146106bb57600080fd5b919050565b6000806000606084860312156106d557600080fd5b833592506106e560208501610697565b91506106f360408501610697565b90509250925092565b6000806020838503121561070f57600080fd5b823567ffffffffffffffff81111561072657600080fd5b8301601f8101851361073757600080fd5b803567ffffffffffffffff81111561074e57600080fd5b85602082840101111561076057600080fd5b6020919091019590945092505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156107e6576107e6610770565b604052919050565b600082601f8301126107ff57600080fd5b813567ffffffffffffffff81111561081957610819610770565b61084a60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8401160161079f565b81815284602083860101111561085f57600080fd5b816020850160208301376000918101602001919091529392505050565b801515811461069457600080fd5b80356106bb8161087c565b6000806000606084860312156108aa57600080fd5b833567ffffffffffffffff8111156108c157600080fd5b6108cd868287016107ee565b9350506020840135915060408401356108e58161087c565b809150509250925092565b600067ffffffffffffffff82111561090a5761090a610770565b5060051b60200190565b600082601f83011261092557600080fd5b8135610938610933826108f0565b61079f565b8082825260208201915060208360051b86010192508583111561095a57600080fd5b602085015b8381101561097757803583526020928301920161095f565b5095945050505050565b60008060006060848603121561099657600080fd5b833567ffffffffffffffff8111156109ad57600080fd5b8401601f810186136109be57600080fd5b80356109cc610933826108f0565b8082825260208201915060208360051b8501019250888311156109ee57600080fd5b602084015b83811015610a3057803567ffffffffffffffff811115610a1257600080fd5b610a218b6020838901016107ee565b845250602092830192016109f3565b509550505050602084013567ffffffffffffffff811115610a5057600080fd5b610a5c86828701610914565b9250506106f36040850161088a565b73ffffffffffffffffffffffffffffffffffffffff8416815260406020820152816040820152818360608301376000818301606090810191909152601f9092017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016010192915050565b600082610b0b577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60005b83811015610b2b578181015183820152602001610b13565b50506000910152565b60008151808452610b4c816020860160208601610b10565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b73ffffffffffffffffffffffffffffffffffffffff8616815284602082015260a060408201526000610bb360a0830186610b34565b6060830194909452509015156080909101529392505050565b600081518084526020840193506020830160005b82811015610bfe578151865260209586019590910190600101610be0565b5093949350505050565b60006080820173ffffffffffffffffffffffffffffffffffffffff871683526080602084015280865180835260a08501915060a08160051b86010192506020880160005b82811015610c9b577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60878603018452610c86858351610b34565b94506020938401939190910190600101610c4c565b505050508281036040840152610cb18186610bcc565b915050610cc2606083018415159052565b95945050505050565b600060208284031215610cdd57600080fd5b81516104f98161087c565b60008251610cfa818460208701610b10565b919091019291505056fea2646970667358221220556072e1abafc3c4063b8cce832228b4f309b93726aaa6a6dfab20cb880c6d1864736f6c634300081a00336080604052348015600f57600080fd5b5060405161080c38038061080c833981016040819052602c916050565b600080546001600160a01b0319166001600160a01b0392909216919091179055607e565b600060208284031215606157600080fd5b81516001600160a01b0381168114607757600080fd5b9392505050565b61077f8061008d6000396000f3fe608060405234801561001057600080fd5b50600436106100415760003560e01c80630abd890514610046578063116191b61461005b578063865b36f6146100a4575b600080fd5b6100596100543660046104c4565b6100b7565b005b60005461007b9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b6100596100b236600461057f565b6102af565b60008383836040516024016100ce93929190610674565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe04d4f970000000000000000000000000000000000000000000000000000000017905260005490517f095ea7b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff91821660048201526024810189905291925086169063095ea7b3906044016020604051808303816000875af11580156101be573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101e2919061069e565b610218576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000546040517f7993c1e000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff90911690637993c1e090610274908a908a908a9087906004016106c2565b600060405180830381600087803b15801561028e57600080fd5b505af11580156102a2573d6000803e3d6000fd5b5050505050505050505050565b60008383836040516024016102c693929190610674565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe04d4f970000000000000000000000000000000000000000000000000000000017905260005490517f5d40e17800000000000000000000000000000000000000000000000000000000815291925073ffffffffffffffffffffffffffffffffffffffff1690635d40e1789061039690899089908690600401610714565b600060405180830381600087803b1580156103b057600080fd5b505af11580156103c4573d6000803e3d6000fd5b50505050505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600082601f83011261041057600080fd5b81356020830160008067ffffffffffffffff841115610431576104316103d0565b506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f85018116603f0116810181811067ffffffffffffffff8211171561047e5761047e6103d0565b60405283815290508082840187101561049657600080fd5b838360208301376000602085830101528094505050505092915050565b80151581146104c157600080fd5b50565b60008060008060008060c087890312156104dd57600080fd5b863567ffffffffffffffff8111156104f457600080fd5b61050089828a016103ff565b96505060208701359450604087013573ffffffffffffffffffffffffffffffffffffffff8116811461053157600080fd5b9350606087013567ffffffffffffffff81111561054d57600080fd5b61055989828a016103ff565b9350506080870135915060a0870135610571816104b3565b809150509295509295509295565b600080600080600060a0868803121561059757600080fd5b853567ffffffffffffffff8111156105ae57600080fd5b6105ba888289016103ff565b95505060208601359350604086013567ffffffffffffffff8111156105de57600080fd5b6105ea888289016103ff565b935050606086013591506080860135610602816104b3565b809150509295509295909350565b6000815180845260005b818110156106365760208185018101518683018201520161061a565b5060006020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b6060815260006106876060830186610610565b602083019490945250901515604090910152919050565b6000602082840312156106b057600080fd5b81516106bb816104b3565b9392505050565b6080815260006106d56080830187610610565b85602084015273ffffffffffffffffffffffffffffffffffffffff8516604084015282810360608401526107098185610610565b979650505050505050565b6060815260006107276060830186610610565b846020840152828103604084015261073f8185610610565b969550505050505056fea2646970667358221220913e9e4f584646fcff086caec1531d2f19fc055665166453bbf086af95b2e48464736f6c634300081a0033608060405234801561001057600080fd5b50604051610b3f380380610b3f83398101604081905261002f916100b9565b600380546001600160a01b038086166001600160a01b0319928316179092556004805485841690831617905560058054928416929091169190911790556040517f80699e81136d69cb8367ad52a994e25c722a86da654b561d0c14b61a777e7ac590600090a15050506100fc565b80516001600160a01b03811681146100b457600080fd5b919050565b6000806000606084860312156100ce57600080fd5b6100d78461009d565b92506100e56020850161009d565b91506100f36040850161009d565b90509250925092565b610a348061010b6000396000f3fe608060405234801561001057600080fd5b50600436106100c95760003560e01c806397770dff11610081578063d7fd7afb1161005b578063d7fd7afb146101f2578063d936a01214610220578063ee2815ba1461024057600080fd5b806397770dff146101b9578063a7cb0507146101cc578063c63585cc146101df57600080fd5b8063513a9c05116100b2578063513a9c0514610143578063569541b914610179578063842da36d1461019957600080fd5b80630be15547146100ce5780633c669d551461012e575b600080fd5b6101046100dc36600461071e565b60016020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b61014161013c366004610760565b610253565b005b61010461015136600461071e565b60026020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b6003546101049073ffffffffffffffffffffffffffffffffffffffff1681565b6005546101049073ffffffffffffffffffffffffffffffffffffffff1681565b6101416101c73660046107fd565b6103a0565b6101416101da36600461081f565b610419565b6101046101ed366004610841565b610467565b61021261020036600461071e565b60006020819052908152604090205481565b604051908152602001610125565b6004546101049073ffffffffffffffffffffffffffffffffffffffff1681565b61014161024e366004610884565b61059c565b604080516080810182526000606082019081528152336020820152468183015290517fa9059cbb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff87811660048301526024820186905286169063a9059cbb906044016020604051808303816000875af11580156102e7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061030b91906108b0565b506040517fde43156e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff87169063de43156e90610366908490899089908990899060040161091b565b600060405180830381600087803b15801561038057600080fd5b505af1158015610394573d6000803e3d6000fd5b50505050505050505050565b600380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527fdba79d534382d1a8ae108e4c8ecb27c6ae42ab8b91d44eedf88bd329f3868d5e9060200160405180910390a150565b6000828152602081815260409182902083905581518481529081018390527f49f492222906ac486c3c1401fa545626df1f0c0e5a77a05597ea2ed66af9850d91015b60405180910390a15050565b60008060006104768585610620565b6040517fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606084811b8216602084015283901b166034820152919350915086906048016040516020818303038152906040528051906020012060405160200161055c9291907fff00000000000000000000000000000000000000000000000000000000000000815260609290921b7fffffffffffffffffffffffffffffffffffffffff00000000000000000000000016600183015260158201527f96e8ac4277198ff8b6f785478aa9a39f403cb768dd02cbee326c3e7da348845f603582015260550190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291905280516020909101209695505050505050565b60008281526001602090815260409182902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff85169081179091558251858152918201527fd1b36d30f6248e97c473b4d1348ca164a4ef6759022f54a58ec200326c39c45d910161045b565b6000808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603610688576040517fcb1e7cfe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16106106c25782846106c5565b83835b909250905073ffffffffffffffffffffffffffffffffffffffff8216610717576040517f78b507da00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b9250929050565b60006020828403121561073057600080fd5b5035919050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461075b57600080fd5b919050565b60008060008060006080868803121561077857600080fd5b61078186610737565b945061078f60208701610737565b935060408601359250606086013567ffffffffffffffff8111156107b257600080fd5b8601601f810188136107c357600080fd5b803567ffffffffffffffff8111156107da57600080fd5b8860208284010111156107ec57600080fd5b959894975092955050506020019190565b60006020828403121561080f57600080fd5b61081882610737565b9392505050565b6000806040838503121561083257600080fd5b50508035926020909101359150565b60008060006060848603121561085657600080fd5b61085f84610737565b925061086d60208501610737565b915061087b60408501610737565b90509250925092565b6000806040838503121561089757600080fd5b823591506108a760208401610737565b90509250929050565b6000602082840312156108c257600080fd5b8151801515811461081857600080fd5b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b60808152600086516060608084015280518060e085015260005b81811015610953576020818401810151610100878401015201610935565b5060008482016101000152602089015173ffffffffffffffffffffffffffffffffffffffff811660a0860152601f9091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168401915050604088015160c084015273ffffffffffffffffffffffffffffffffffffffff871660208401528560408401526101008382030160608401526109f2610100820185876108d2565b9897505050505050505056fea26469706673582212206b99774936066d66e673847cda232c1a8b90636b82cb2d9c47172da97ac4570a64736f6c634300081a003360e060405234801561001057600080fd5b50604051611bb9380380611bb983398101604081905261002f9161020e565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461006357604051632b2add3d60e01b815260040160405180910390fd5b6001600160a01b038216158061008057506001600160a01b038116155b1561009e5760405163d92e233d60e01b815260040160405180910390fd5b60066100aa8982610360565b5060076100b78882610360565b5060ff861660c05260808590528360028111156100d6576100d661041e565b60a08160028111156100ea576100ea61041e565b905250600192909255600080546001600160a01b039283166001600160a01b03199182161790915560088054929093169116179055506104349350505050565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261015157600080fd5b81516001600160401b0381111561016a5761016a61012a565b604051601f8201601f19908116603f011681016001600160401b03811182821017156101985761019861012a565b6040528181528382016020018510156101b057600080fd5b60005b828110156101cf576020818601810151838301820152016101b3565b506000918101602001919091529392505050565b8051600381106101f257600080fd5b919050565b80516001600160a01b03811681146101f257600080fd5b600080600080600080600080610100898b03121561022b57600080fd5b88516001600160401b0381111561024157600080fd5b61024d8b828c01610140565b60208b015190995090506001600160401b0381111561026b57600080fd5b6102778b828c01610140565b975050604089015160ff8116811461028e57600080fd5b60608a015190965094506102a460808a016101e3565b60a08a015190945092506102ba60c08a016101f7565b91506102c860e08a016101f7565b90509295985092959890939650565b600181811c908216806102eb57607f821691505b60208210810361030b57634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111561035b57806000526020600020601f840160051c810160208510156103385750805b601f840160051c820191505b818110156103585760008155600101610344565b50505b505050565b81516001600160401b038111156103795761037961012a565b61038d8161038784546102d7565b84610311565b6020601f8211600181146103c157600083156103a95750848201515b600019600385901b1c1916600184901b178455610358565b600084815260208120601f198516915b828110156103f157878501518255602094850194600190920191016103d1565b508482101561040f5786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b634e487b7160e01b600052602160045260246000fd5b60805160a05160c05161174861047160003960006102170152600061033a0152600081816102eb01528181610ad70152610bdd01526117486000f3fe608060405234801561001057600080fd5b50600436106101985760003560e01c80638b851b95116100e3578063ccc775991161008c578063eddeb12311610066578063eddeb12314610431578063f2441b3214610444578063f687d12a1461046457600080fd5b8063ccc77599146103a4578063d9eeebed146103b7578063dd62ed3e146103eb57600080fd5b8063a9059cbb116100bd578063a9059cbb14610369578063c70126261461037c578063c835d7cc1461038f57600080fd5b80638b851b951461030d57806395d89b411461032d578063a3413d031461033557600080fd5b80633ce4a5bc116101455780634d8943bb1161011f5780634d8943bb146102a757806370a08231146102b057806385e1f4d0146102e657600080fd5b80633ce4a5bc1461024157806342966c681461028157806347e7ef241461029457600080fd5b806318160ddd1161017657806318160ddd146101f557806323b872dd146101fd578063313ce5671461021057600080fd5b806306fdde031461019d578063091d2788146101bb578063095ea7b3146101d2575b600080fd5b6101a5610477565b6040516101b29190611327565b60405180910390f35b6101c460015481565b6040519081526020016101b2565b6101e56101e0366004611366565b610509565b60405190151581526020016101b2565b6005546101c4565b6101e561020b366004611392565b610520565b60405160ff7f00000000000000000000000000000000000000000000000000000000000000001681526020016101b2565b61025c73735b14bb79463307aacbed86daf3322b1e6226ab81565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101b2565b6101e561028f3660046113d3565b6105b7565b6101e56102a2366004611366565b6105cb565b6101c460025481565b6101c46102be3660046113ec565b73ffffffffffffffffffffffffffffffffffffffff1660009081526003602052604090205490565b6101c47f000000000000000000000000000000000000000000000000000000000000000081565b60085461025c9073ffffffffffffffffffffffffffffffffffffffff1681565b6101a561071f565b61035c7f000000000000000000000000000000000000000000000000000000000000000081565b6040516101b29190611409565b6101e5610377366004611366565b61072e565b6101e561038a366004611479565b61073b565b6103a261039d3660046113ec565b61088a565b005b6103a26103b23660046113ec565b61099e565b6103bf610aab565b6040805173ffffffffffffffffffffffffffffffffffffffff90931683526020830191909152016101b2565b6101c46103f9366004611571565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260046020908152604080832093909416825291909152205490565b6103a261043f3660046113d3565b610cc9565b60005461025c9073ffffffffffffffffffffffffffffffffffffffff1681565b6103a26104723660046113d3565b610d4b565b606060068054610486906115aa565b80601f01602080910402602001604051908101604052809291908181526020018280546104b2906115aa565b80156104ff5780601f106104d4576101008083540402835291602001916104ff565b820191906000526020600020905b8154815290600101906020018083116104e257829003601f168201915b5050505050905090565b6000610516338484610dcd565b5060015b92915050565b600061052d848484610ed6565b73ffffffffffffffffffffffffffffffffffffffff8416600090815260046020908152604080832033845290915290205482811015610598576040517f10bad14700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6105ac85336105a7868561162c565b610dcd565b506001949350505050565b60006105c33383611091565b506001919050565b60003373735b14bb79463307aacbed86daf3322b1e6226ab14801590610609575060005473ffffffffffffffffffffffffffffffffffffffff163314155b801561062d575060085473ffffffffffffffffffffffffffffffffffffffff163314155b15610664576040517fddb5de5e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61066e83836111d3565b6040517f735b14bb79463307aacbed86daf3322b1e6226ab000000000000000000000000602082015273ffffffffffffffffffffffffffffffffffffffff8416907f67fc7bdaed5b0ec550d8706b87d60568ab70c6b781263c70101d54cd1564aab390603401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529082905261070e91869061163f565b60405180910390a250600192915050565b606060078054610486906115aa565b6000610516338484610ed6565b6000806000610748610aab565b6040517f23b872dd00000000000000000000000000000000000000000000000000000000815233600482015273735b14bb79463307aacbed86daf3322b1e6226ab602482015260448101829052919350915073ffffffffffffffffffffffffffffffffffffffff8316906323b872dd906064016020604051808303816000875af11580156107da573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107fe9190611661565b610834576040517f0a7cd6d600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61083e3385611091565b60025460405133917f9ffbffc04a397460ee1dbe8c9503e098090567d6b7f4b3c02a8617d800b6d9559161087791899189918791611683565b60405180910390a2506001949350505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab146108d7576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116610924576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527fd55614e962c5fd6ece71614f6348d702468a997a394dd5e5c1677950226d97ae906020015b60405180910390a150565b3373735b14bb79463307aacbed86daf3322b1e6226ab146109eb576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116610a38576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600880547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527f88815d964e380677e86d817e7d65dea59cb7b4c3b5b7a0c8ec7ea4a74f90a38790602001610993565b600080546040517f0be155470000000000000000000000000000000000000000000000000000000081527f000000000000000000000000000000000000000000000000000000000000000060048201528291829173ffffffffffffffffffffffffffffffffffffffff90911690630be1554790602401602060405180830381865afa158015610b3e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b6291906116b2565b905073ffffffffffffffffffffffffffffffffffffffff8116610bb1576040517f78fff39600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080546040517fd7fd7afb0000000000000000000000000000000000000000000000000000000081527f0000000000000000000000000000000000000000000000000000000000000000600482015273ffffffffffffffffffffffffffffffffffffffff9091169063d7fd7afb90602401602060405180830381865afa158015610c40573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c6491906116cf565b905080600003610ca0576040517fe661aed000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060025460015483610cb391906116e8565b610cbd91906116ff565b92959294509192505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610d16576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60028190556040518181527fef13af88e424b5d15f49c77758542c1938b08b8b95b91ed0751f98ba99000d8f90602001610993565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610d98576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018190556040518181527fff5788270f43bfc1ca41c503606d2594aa3023a1a7547de403a3e2f146a4a80a90602001610993565b73ffffffffffffffffffffffffffffffffffffffff8316610e1a576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216610e67576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff83811660008181526004602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8316610f23576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216610f70576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff831660009081526003602052604090205481811015610fd0576040517ffe382aa700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610fda828261162c565b73ffffffffffffffffffffffffffffffffffffffff808616600090815260036020526040808220939093559085168152908120805484929061101d9084906116ff565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161108391815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff82166110de576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff82166000908152600360205260409020548181101561113e576040517ffe382aa700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611148828261162c565b73ffffffffffffffffffffffffffffffffffffffff84166000908152600360205260408120919091556005805484929061118390849061162c565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90602001610ec9565b73ffffffffffffffffffffffffffffffffffffffff8216611220576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b806005600082825461123291906116ff565b909155505073ffffffffffffffffffffffffffffffffffffffff82166000908152600360205260408120805483929061126c9084906116ff565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6000815180845260005b818110156112e9576020818501810151868301820152016112cd565b5060006020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b60208152600061133a60208301846112c3565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff8116811461136357600080fd5b50565b6000806040838503121561137957600080fd5b823561138481611341565b946020939093013593505050565b6000806000606084860312156113a757600080fd5b83356113b281611341565b925060208401356113c281611341565b929592945050506040919091013590565b6000602082840312156113e557600080fd5b5035919050565b6000602082840312156113fe57600080fd5b813561133a81611341565b6020810160038310611444577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000806040838503121561148c57600080fd5b823567ffffffffffffffff8111156114a357600080fd5b8301601f810185136114b457600080fd5b803567ffffffffffffffff8111156114ce576114ce61144a565b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8501160116810181811067ffffffffffffffff8211171561153a5761153a61144a565b60405281815282820160200187101561155257600080fd5b8160208401602083013760006020928201830152969401359450505050565b6000806040838503121561158457600080fd5b823561158f81611341565b9150602083013561159f81611341565b809150509250929050565b600181811c908216806115be57607f821691505b6020821081036115f7577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8181038181111561051a5761051a6115fd565b60408152600061165260408301856112c3565b90508260208301529392505050565b60006020828403121561167357600080fd5b8151801515811461133a57600080fd5b60808152600061169660808301876112c3565b6020830195909552506040810192909252606090910152919050565b6000602082840312156116c457600080fd5b815161133a81611341565b6000602082840312156116e157600080fd5b5051919050565b808202811582820484141761051a5761051a6115fd565b8082018082111561051a5761051a6115fd56fea26469706673582212204013e39523742118b3f2227e145ee7e48176ba6aebead33c596dca2acb59a74c64736f6c634300081a0033a26469706673582212202ac7c88c34852292040c665f23af6639837b3a9b5f39f11695869b88d4c90d5564736f6c634300081a0033", } // GatewayEVMZEVMTestABI is the input ABI used to generate the binding from. diff --git a/v2/pkg/gatewayzevm.sol/gatewayzevm.go b/v2/pkg/gatewayzevm.sol/gatewayzevm.go index 2dfabce8..f7b6b8b6 100644 --- a/v2/pkg/gatewayzevm.sol/gatewayzevm.go +++ b/v2/pkg/gatewayzevm.sol/gatewayzevm.go @@ -46,7 +46,7 @@ type ZContext struct { // GatewayZEVMMetaData contains all meta data concerning the GatewayZEVM contract. var GatewayZEVMMetaData = &bind.MetaData{ ABI: "[{\"type\":\"constructor\",\"inputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"receive\",\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"DEFAULT_ADMIN_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"FUNGIBLE_MODULE_ADDRESS\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"PAUSER_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"UPGRADE_INTERFACE_VERSION\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"call\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"chainId\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"message\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"deposit\",\"inputs\":[{\"name\":\"zrc20\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"depositAndCall\",\"inputs\":[{\"name\":\"context\",\"type\":\"tuple\",\"internalType\":\"structzContext\",\"components\":[{\"name\":\"origin\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"sender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"chainID\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"message\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"depositAndCall\",\"inputs\":[{\"name\":\"context\",\"type\":\"tuple\",\"internalType\":\"structzContext\",\"components\":[{\"name\":\"origin\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"sender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"chainID\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"zrc20\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"message\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"depositAndRevert\",\"inputs\":[{\"name\":\"context\",\"type\":\"tuple\",\"internalType\":\"structrevertContext\",\"components\":[{\"name\":\"origin\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"sender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"chainID\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"zrc20\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"message\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"execute\",\"inputs\":[{\"name\":\"context\",\"type\":\"tuple\",\"internalType\":\"structzContext\",\"components\":[{\"name\":\"origin\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"sender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"chainID\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"zrc20\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"message\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"executeRevert\",\"inputs\":[{\"name\":\"context\",\"type\":\"tuple\",\"internalType\":\"structrevertContext\",\"components\":[{\"name\":\"origin\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"sender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"chainID\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"zrc20\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"message\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"getRoleAdmin\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"grantRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"hasRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"initialize\",\"inputs\":[{\"name\":\"zetaToken_\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"admin_\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"pause\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"paused\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"proxiableUUID\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"renounceRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"callerConfirmation\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"revokeRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"supportsInterface\",\"inputs\":[{\"name\":\"interfaceId\",\"type\":\"bytes4\",\"internalType\":\"bytes4\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"unpause\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"upgradeToAndCall\",\"inputs\":[{\"name\":\"newImplementation\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"withdraw\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"zrc20\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"withdraw\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"chainId\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"withdrawAndCall\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"zrc20\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"message\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"withdrawAndCall\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"chainId\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"message\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"zetaToken\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"event\",\"name\":\"Call\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"chainId\",\"type\":\"uint256\",\"indexed\":true,\"internalType\":\"uint256\"},{\"name\":\"receiver\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"message\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Initialized\",\"inputs\":[{\"name\":\"version\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Paused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleAdminChanged\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"previousAdminRole\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"newAdminRole\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleGranted\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleRevoked\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Unpaused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Upgraded\",\"inputs\":[{\"name\":\"implementation\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Withdrawal\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"chainId\",\"type\":\"uint256\",\"indexed\":true,\"internalType\":\"uint256\"},{\"name\":\"receiver\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"zrc20\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"gasfee\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"protocolFlatFee\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"message\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"AccessControlBadConfirmation\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"AccessControlUnauthorizedAccount\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"neededRole\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"type\":\"error\",\"name\":\"AddressEmptyCode\",\"inputs\":[{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"CallerIsNotFungibleModule\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ERC1967InvalidImplementation\",\"inputs\":[{\"name\":\"implementation\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"ERC1967NonPayable\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"EnforcedPause\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ExpectedPause\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"FailedInnerCall\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"FailedZetaSent\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"GasFeeTransferFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientZRC20Amount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientZetaAmount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidInitialization\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidTarget\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NotInitializing\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OnlyWZETAOrFungible\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ReentrancyGuardReentrantCall\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"UUPSUnauthorizedCallContext\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"UUPSUnsupportedProxiableUUID\",\"inputs\":[{\"name\":\"slot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"type\":\"error\",\"name\":\"WithdrawalFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZRC20BurnFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZRC20DepositFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZRC20TransferFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZeroAddress\",\"inputs\":[]}]", - Bin: "0x60a06040523060805234801561001457600080fd5b5061001d610022565b6100d4565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100725760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146100d15780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b60805161331b6100fd6000396000818161235f01528181612388015261255e015261331b6000f3fe6080604052600436106101bb5760003560e01c80635c975abb116100ec578063ad3cb1cc1161008a578063d547741f11610064578063d547741f14610600578063e63ab1e914610620578063f41d774914610654578063f45346dc1461067457600080fd5b8063ad3cb1cc1461056a578063bcf7f32b146105c0578063c39aca37146105e057600080fd5b80637993c1e0116100c65780637993c1e0146104bb5780638456cb59146104db57806391d14854146104f0578063a217fddf1461055557600080fd5b80635c975abb146104445780635d40e1781461047b578063737a9ed61461049b57600080fd5b806336568abe11610159578063485cc95511610133578063485cc955146103dc5780634f1ef286146103fc57806352d1902d1461040f5780635af659671461042457600080fd5b806336568abe1461037f5780633ce4a5bc1461039f5780633f4ba83a146103c757600080fd5b806321e093b11161019557806321e093b1146102aa578063248a9ca3146102e25780632f2ff15d1461033f578063309f50041461035f57600080fd5b806301ffc9a714610235578063135390f91461026a57806321501a951461028a57600080fd5b36610230576101c8610694565b6000546001600160a01b031633148015906101f757503373735b14bb79463307aacbed86daf3322b1e6226ab14155b1561022e576040517f229930b200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b005b600080fd5b34801561024157600080fd5b50610255610250366004612a3c565b6106f2565b60405190151581526020015b60405180910390f35b34801561027657600080fd5b5061022e610285366004612b8e565b61078b565b34801561029657600080fd5b5061022e6102a5366004612c4a565b6108f9565b3480156102b657600080fd5b506000546102ca906001600160a01b031681565b6040516001600160a01b039091168152602001610261565b3480156102ee57600080fd5b506103316102fd366004612cd6565b60009081527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052604090206001015490565b604051908152602001610261565b34801561034b57600080fd5b5061022e61035a366004612cef565b610ac6565b34801561036b57600080fd5b5061022e61037a366004612d1f565b610b10565b34801561038b57600080fd5b5061022e61039a366004612cef565b610c7a565b3480156103ab57600080fd5b506102ca73735b14bb79463307aacbed86daf3322b1e6226ab81565b3480156103d357600080fd5b5061022e610cc6565b3480156103e857600080fd5b5061022e6103f7366004612dbd565b610cfb565b61022e61040a366004612deb565b610f51565b34801561041b57600080fd5b50610331610f70565b34801561043057600080fd5b5061022e61043f366004612d1f565b610f9f565b34801561045057600080fd5b507fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff16610255565b34801561048757600080fd5b5061022e610496366004612e3b565b6111ae565b3480156104a757600080fd5b5061022e6104b6366004612eb0565b611268565b3480156104c757600080fd5b5061022e6104d6366004612efe565b611348565b3480156104e757600080fd5b5061022e6114bc565b3480156104fc57600080fd5b5061025561050b366004612cef565b60009182527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408084206001600160a01b0393909316845291905290205460ff1690565b34801561056157600080fd5b50610331600081565b34801561057657600080fd5b506105b36040518060400160405280600581526020017f352e302e3000000000000000000000000000000000000000000000000000000081525081565b6040516102619190612fa7565b3480156105cc57600080fd5b5061022e6105db366004612d1f565b6114ee565b3480156105ec57600080fd5b5061022e6105fb366004612d1f565b61161e565b34801561060c57600080fd5b5061022e61061b366004612cef565b61182d565b34801561062c57600080fd5b506103317f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b34801561066057600080fd5b5061022e61066f366004612fba565b611871565b34801561068057600080fd5b5061022e61068f366004613020565b611990565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff16156106f0576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061078557507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b610793611b9f565b61079b610694565b82516000036107d6576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b81600003610810576040517f5d67094f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061081c8383611c20565b90506000336001600160a01b03167fde19dbe881cc0aeeb6e73ce19ac7b5ca695e6be8a076e3eb42292005a7fec1b586858786886001600160a01b0316634d8943bb6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561088d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108b19190613057565b6040516108c2959493929190613070565b60405180910390a3506108f460017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610946576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61094e610694565b6001600160a01b03831661098e576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b836000036109c8576040517f19c08f4900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03831673735b14bb79463307aacbed86daf3322b1e6226ab14806109fb57506001600160a01b03831630145b15610a32576040517f82d5d76a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610a3c8484611f13565b6000546040517fde43156e0000000000000000000000000000000000000000000000000000000081526001600160a01b038086169263de43156e92610a8d928a9216908990889088906004016131ad565b600060405180830381600087803b158015610aa757600080fd5b505af1158015610abb573d6000803e3d6000fd5b505050505050505050565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020526040902060010154610b00816120e1565b610b0a83836120eb565b50505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610b5d576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610b65610694565b6001600160a01b0385161580610b8257506001600160a01b038316155b15610bb9576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b83600003610bf3576040517f5d67094f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f69582bee0000000000000000000000000000000000000000000000000000000081526001600160a01b038416906369582bee90610c4090899089908990889088906004016131ad565b600060405180830381600087803b158015610c5a57600080fd5b505af1158015610c6e573d6000803e3d6000fd5b50505050505050505050565b6001600160a01b0381163314610cbc576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6108f482826121d8565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610cf0816120e1565b610cf861229c565b50565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff16600081158015610d465750825b905060008267ffffffffffffffff166001148015610d635750303b155b905081158015610d71575080155b15610da8576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001660011785558315610e095784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff16680100000000000000001785555b6001600160a01b0387161580610e2657506001600160a01b038616155b15610e5d576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610e6561232c565b610e6d61232c565b610e75612334565b610e7d612344565b610e886000876120eb565b50610eb37f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a876120eb565b50600080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0389161790558315610f485784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50505050505050565b610f59612354565b610f6282612424565b610f6c828261242f565b5050565b6000610f7a612553565b507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc90565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610fec576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610ff4610694565b6001600160a01b038516158061101157506001600160a01b038316155b15611048576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b83600003611082576040517f5d67094f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03831673735b14bb79463307aacbed86daf3322b1e6226ab14806110b557506001600160a01b03831630145b156110ec576040517f82d5d76a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f47e7ef240000000000000000000000000000000000000000000000000000000081526001600160a01b038481166004830152602482018690528616906347e7ef24906044016020604051808303816000875af1158015611154573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061117891906131f4565b610bf3576040517f47d19fab00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6111b6611b9f565b6111be610694565b83516000036111f9576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b82336001600160a01b03167f5322ffbbf9261ff1f8138247942d2b03b28717141ef0a0dd080fc4be9c4e78d386858560405161123793929190613216565b60405180910390a3610b0a60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b611270611b9f565b611278610694565b816000036112b2576040517f19c08f4900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6112d08273735b14bb79463307aacbed86daf3322b1e6226ab611f13565b60008054604051839233927fde19dbe881cc0aeeb6e73ce19ac7b5ca695e6be8a076e3eb42292005a7fec1b5926113179289926001600160a01b0316918991908190613070565b60405180910390a36108f460017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b611350611b9f565b611358610694565b8451600003611393576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b836000036113cd576040517f5d67094f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006113d98585611c20565b90506000336001600160a01b03167fde19dbe881cc0aeeb6e73ce19ac7b5ca695e6be8a076e3eb42292005a7fec1b5888789868a6001600160a01b0316634d8943bb6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561144a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061146e9190613057565b8a8a6040516114839796959493929190613246565b60405180910390a3506114b560017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b5050505050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a6114e6816120e1565b610cf86125b5565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461153b576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611543610694565b6001600160a01b038516158061156057506001600160a01b038316155b15611597576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b836000036115d1576040517f5d67094f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517fde43156e0000000000000000000000000000000000000000000000000000000081526001600160a01b0384169063de43156e90610c4090899089908990889088906004016131ad565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461166b576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611673610694565b6001600160a01b038516158061169057506001600160a01b038316155b156116c7576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b83600003611701576040517f5d67094f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03831673735b14bb79463307aacbed86daf3322b1e6226ab148061173457506001600160a01b03831630145b1561176b576040517f82d5d76a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f47e7ef240000000000000000000000000000000000000000000000000000000081526001600160a01b038481166004830152602482018690528616906347e7ef24906044016020604051808303816000875af11580156117d3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117f791906131f4565b6115d1576040517f47d19fab00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020526040902060010154611867816120e1565b610b0a83836121d8565b611879611b9f565b611881610694565b84516000036118bc576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b836000036118f6576040517f19c08f4900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6119148473735b14bb79463307aacbed86daf3322b1e6226ab611f13565b60008054604051859233927fde19dbe881cc0aeeb6e73ce19ac7b5ca695e6be8a076e3eb42292005a7fec1b59261195f928b926001600160a01b0316918b919081908b908b90613246565b60405180910390a36114b560017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b3373735b14bb79463307aacbed86daf3322b1e6226ab146119dd576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6119e5610694565b6001600160a01b0383161580611a0257506001600160a01b038116155b15611a39576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b81600003611a73576040517f5d67094f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03811673735b14bb79463307aacbed86daf3322b1e6226ab1480611aa657506001600160a01b03811630145b15611add576040517f82d5d76a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f47e7ef240000000000000000000000000000000000000000000000000000000081526001600160a01b038281166004830152602482018490528416906347e7ef24906044016020604051808303816000875af1158015611b45573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b6991906131f4565b6108f4576040517f47d19fab00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0080547ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01611c1a576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60029055565b6000806000836001600160a01b031663d9eeebed6040518163ffffffff1660e01b81526004016040805180830381865afa158015611c62573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c86919061329b565b6040517f23b872dd00000000000000000000000000000000000000000000000000000000815233600482015273735b14bb79463307aacbed86daf3322b1e6226ab60248201526044810182905291935091506001600160a01b038316906323b872dd906064016020604051808303816000875af1158015611d0b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d2f91906131f4565b611d65576040517f0a7cd6d600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f23b872dd000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018690526001600160a01b038516906323b872dd906064016020604051808303816000875af1158015611dd1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611df591906131f4565b611e2b576040517f4dd9ee8d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f42966c68000000000000000000000000000000000000000000000000000000008152600481018690526001600160a01b038516906342966c68906024016020604051808303816000875af1158015611e8b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611eaf91906131f4565b611ee5576040517f2c77e05c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b949350505050565b60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b6000546040517f23b872dd000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018490526001600160a01b03909116906323b872dd906064016020604051808303816000875af1158015611f83573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fa791906131f4565b611fdd576040517fc7ffc47b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000546040517f2e1a7d4d000000000000000000000000000000000000000000000000000000008152600481018490526001600160a01b0390911690632e1a7d4d90602401600060405180830381600087803b15801561203c57600080fd5b505af1158015612050573d6000803e3d6000fd5b505050506000816001600160a01b03168360405160006040518083038185875af1925050503d80600081146120a1576040519150601f19603f3d011682016040523d82523d6000602084013e6120a6565b606091505b50509050806108f4576040517fc7ffc47b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610cf8813361262e565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff166121ce576000848152602082815260408083206001600160a01b0387168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790556121843390565b6001600160a01b0316836001600160a01b0316857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a46001915050610785565b6000915050610785565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff16156121ce576000848152602082815260408083206001600160a01b038716808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339287917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a46001915050610785565b6122a46126bb565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001681557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a150565b6106f0612716565b61233c612716565b6106f061277d565b61234c612716565b6106f06127ce565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806123ed57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166123e17f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b6001600160a01b031614155b156106f0576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610f6c816120e1565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156124a7575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682019092526124a491810190613057565b60015b6124ed576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b03831660048201526024015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8114612549576040517faa1d49a4000000000000000000000000000000000000000000000000000000008152600481018290526024016124e4565b6108f483836127d6565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146106f0576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6125bd610694565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011781557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2583361230e565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408083206001600160a01b038516845290915290205460ff16610f6c576040517fe2517d3f0000000000000000000000000000000000000000000000000000000081526001600160a01b0382166004820152602481018390526044016124e4565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff166106f0576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff166106f0576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612785612716565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055565b611eed612716565b6127df8261282c565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a2805115612824576108f482826128d4565b610f6c61294a565b806001600160a01b03163b60000361287b576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b03821660048201526024016124e4565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6060600080846001600160a01b0316846040516128f191906132c9565b600060405180830381855af49150503d806000811461292c576040519150601f19603f3d011682016040523d82523d6000602084013e612931565b606091505b5091509150612941858383612982565b95945050505050565b34156106f0576040517fb398979f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60608261299757612992826129fa565b6129f3565b81511580156129ae57506001600160a01b0384163b155b156129f0576040517f9996b3150000000000000000000000000000000000000000000000000000000081526001600160a01b03851660048201526024016124e4565b50805b9392505050565b805115612a0a5780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060208284031215612a4e57600080fd5b81357fffffffff00000000000000000000000000000000000000000000000000000000811681146129f357600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600082601f830112612abe57600080fd5b813567ffffffffffffffff811115612ad857612ad8612a7e565b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8501160116810181811067ffffffffffffffff82111715612b4457612b44612a7e565b604052818152838201602001851015612b5c57600080fd5b816020850160208301376000918101602001919091529392505050565b6001600160a01b0381168114610cf857600080fd5b600080600060608486031215612ba357600080fd5b833567ffffffffffffffff811115612bba57600080fd5b612bc686828701612aad565b935050602084013591506040840135612bde81612b79565b809150509250925092565b600060608284031215612bfb57600080fd5b50919050565b60008083601f840112612c1357600080fd5b50813567ffffffffffffffff811115612c2b57600080fd5b602083019150836020828501011115612c4357600080fd5b9250929050565b600080600080600060808688031215612c6257600080fd5b853567ffffffffffffffff811115612c7957600080fd5b612c8588828901612be9565b955050602086013593506040860135612c9d81612b79565b9250606086013567ffffffffffffffff811115612cb957600080fd5b612cc588828901612c01565b969995985093965092949392505050565b600060208284031215612ce857600080fd5b5035919050565b60008060408385031215612d0257600080fd5b823591506020830135612d1481612b79565b809150509250929050565b60008060008060008060a08789031215612d3857600080fd5b863567ffffffffffffffff811115612d4f57600080fd5b612d5b89828a01612be9565b9650506020870135612d6c81612b79565b9450604087013593506060870135612d8381612b79565b9250608087013567ffffffffffffffff811115612d9f57600080fd5b612dab89828a01612c01565b979a9699509497509295939492505050565b60008060408385031215612dd057600080fd5b8235612ddb81612b79565b91506020830135612d1481612b79565b60008060408385031215612dfe57600080fd5b8235612e0981612b79565b9150602083013567ffffffffffffffff811115612e2557600080fd5b612e3185828601612aad565b9150509250929050565b60008060008060608587031215612e5157600080fd5b843567ffffffffffffffff811115612e6857600080fd5b612e7487828801612aad565b94505060208501359250604085013567ffffffffffffffff811115612e9857600080fd5b612ea487828801612c01565b95989497509550505050565b600080600060608486031215612ec557600080fd5b833567ffffffffffffffff811115612edc57600080fd5b612ee886828701612aad565b9660208601359650604090950135949350505050565b600080600080600060808688031215612f1657600080fd5b853567ffffffffffffffff811115612f2d57600080fd5b612c8588828901612aad565b60005b83811015612f54578181015183820152602001612f3c565b50506000910152565b60008151808452612f75816020860160208601612f39565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006129f36020830184612f5d565b600080600080600060808688031215612fd257600080fd5b853567ffffffffffffffff811115612fe957600080fd5b612ff588828901612aad565b9550506020860135935060408601359250606086013567ffffffffffffffff811115612cb957600080fd5b60008060006060848603121561303557600080fd5b833561304081612b79565b9250602084013591506040840135612bde81612b79565b60006020828403121561306957600080fd5b5051919050565b60c08152600061308360c0830188612f5d565b6001600160a01b038716602084015285604084015284606084015283608084015282810360a084015260008152602081019150509695505050505050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b600081357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe183360301811261313e57600080fd5b820160208101903567ffffffffffffffff81111561315b57600080fd5b80360382131561316a57600080fd5b6060855261317c6060860182846130c1565b915050602083013561318d81612b79565b6001600160a01b0316602085015260409283013592909301919091525090565b6080815260006131c0608083018861310a565b6001600160a01b038716602084015285604084015282810360608401526131e88185876130c1565b98975050505050505050565b60006020828403121561320657600080fd5b815180151581146129f357600080fd5b6040815260006132296040830186612f5d565b828103602084015261323c8185876130c1565b9695505050505050565b60c08152600061325960c083018a612f5d565b6001600160a01b038916602084015287604084015286606084015285608084015282810360a084015261328d8185876130c1565b9a9950505050505050505050565b600080604083850312156132ae57600080fd5b82516132b981612b79565b6020939093015192949293505050565b600082516132db818460208701612f39565b919091019291505056fea264697066735822122074bd01c46a1890e26f7c08318fd774812c29e1ccd03d35d939069b787f010fb864736f6c634300081a0033", + Bin: "0x60a06040523060805234801561001457600080fd5b5061001d610022565b6100d4565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100725760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146100d15780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b6080516133566100fd6000396000818161239a015281816123c3015261259901526133566000f3fe6080604052600436106101bb5760003560e01c80635c975abb116100ec578063ad3cb1cc1161008a578063d547741f11610064578063d547741f14610600578063e63ab1e914610620578063f41d774914610654578063f45346dc1461067457600080fd5b8063ad3cb1cc1461056a578063bcf7f32b146105c0578063c39aca37146105e057600080fd5b80637993c1e0116100c65780637993c1e0146104bb5780638456cb59146104db57806391d14854146104f0578063a217fddf1461055557600080fd5b80635c975abb146104445780635d40e1781461047b578063737a9ed61461049b57600080fd5b806336568abe11610159578063485cc95511610133578063485cc955146103dc5780634f1ef286146103fc57806352d1902d1461040f5780635af659671461042457600080fd5b806336568abe1461037f5780633ce4a5bc1461039f5780633f4ba83a146103c757600080fd5b806321e093b11161019557806321e093b1146102aa578063248a9ca3146102e25780632f2ff15d1461033f578063309f50041461035f57600080fd5b806301ffc9a714610235578063135390f91461026a57806321501a951461028a57600080fd5b36610230576101c8610694565b6000546001600160a01b031633148015906101f757503373735b14bb79463307aacbed86daf3322b1e6226ab14155b1561022e576040517f229930b200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b005b600080fd5b34801561024157600080fd5b50610255610250366004612a77565b6106f2565b60405190151581526020015b60405180910390f35b34801561027657600080fd5b5061022e610285366004612bc9565b61078b565b34801561029657600080fd5b5061022e6102a5366004612c85565b6108f9565b3480156102b657600080fd5b506000546102ca906001600160a01b031681565b6040516001600160a01b039091168152602001610261565b3480156102ee57600080fd5b506103316102fd366004612d11565b60009081527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052604090206001015490565b604051908152602001610261565b34801561034b57600080fd5b5061022e61035a366004612d2a565b610ac6565b34801561036b57600080fd5b5061022e61037a366004612d5a565b610b10565b34801561038b57600080fd5b5061022e61039a366004612d2a565b610c7a565b3480156103ab57600080fd5b506102ca73735b14bb79463307aacbed86daf3322b1e6226ab81565b3480156103d357600080fd5b5061022e610cc6565b3480156103e857600080fd5b5061022e6103f7366004612df8565b610cfb565b61022e61040a366004612e26565b610f51565b34801561041b57600080fd5b50610331610f70565b34801561043057600080fd5b5061022e61043f366004612d5a565b610f9f565b34801561045057600080fd5b507fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff16610255565b34801561048757600080fd5b5061022e610496366004612e76565b6111ae565b3480156104a757600080fd5b5061022e6104b6366004612eeb565b611268565b3480156104c757600080fd5b5061022e6104d6366004612f39565b611383565b3480156104e757600080fd5b5061022e6114f7565b3480156104fc57600080fd5b5061025561050b366004612d2a565b60009182527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408084206001600160a01b0393909316845291905290205460ff1690565b34801561056157600080fd5b50610331600081565b34801561057657600080fd5b506105b36040518060400160405280600581526020017f352e302e3000000000000000000000000000000000000000000000000000000081525081565b6040516102619190612fe2565b3480156105cc57600080fd5b5061022e6105db366004612d5a565b611529565b3480156105ec57600080fd5b5061022e6105fb366004612d5a565b611659565b34801561060c57600080fd5b5061022e61061b366004612d2a565b611868565b34801561062c57600080fd5b506103317f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b34801561066057600080fd5b5061022e61066f366004612ff5565b6118ac565b34801561068057600080fd5b5061022e61068f36600461305b565b6119cb565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff16156106f0576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061078557507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b610793611bda565b61079b610694565b82516000036107d6576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b81600003610810576040517f5d67094f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061081c8383611c5b565b90506000336001600160a01b03167fde19dbe881cc0aeeb6e73ce19ac7b5ca695e6be8a076e3eb42292005a7fec1b586858786886001600160a01b0316634d8943bb6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561088d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108b19190613092565b6040516108c29594939291906130ab565b60405180910390a3506108f460017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610946576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61094e610694565b6001600160a01b03831661098e576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b836000036109c8576040517f19c08f4900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03831673735b14bb79463307aacbed86daf3322b1e6226ab14806109fb57506001600160a01b03831630145b15610a32576040517f82d5d76a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610a3c8484611f4e565b6000546040517fde43156e0000000000000000000000000000000000000000000000000000000081526001600160a01b038086169263de43156e92610a8d928a9216908990889088906004016131e8565b600060405180830381600087803b158015610aa757600080fd5b505af1158015610abb573d6000803e3d6000fd5b505050505050505050565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020526040902060010154610b008161211c565b610b0a8383612126565b50505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610b5d576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610b65610694565b6001600160a01b0385161580610b8257506001600160a01b038316155b15610bb9576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b83600003610bf3576040517f5d67094f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f69582bee0000000000000000000000000000000000000000000000000000000081526001600160a01b038416906369582bee90610c4090899089908990889088906004016131e8565b600060405180830381600087803b158015610c5a57600080fd5b505af1158015610c6e573d6000803e3d6000fd5b50505050505050505050565b6001600160a01b0381163314610cbc576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6108f48282612213565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610cf08161211c565b610cf86122d7565b50565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff16600081158015610d465750825b905060008267ffffffffffffffff166001148015610d635750303b155b905081158015610d71575080155b15610da8576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001660011785558315610e095784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff16680100000000000000001785555b6001600160a01b0387161580610e2657506001600160a01b038616155b15610e5d576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610e65612367565b610e6d612367565b610e7561236f565b610e7d61237f565b610e88600087612126565b50610eb37f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a87612126565b50600080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0389161790558315610f485784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50505050505050565b610f5961238f565b610f628261245f565b610f6c828261246a565b5050565b6000610f7a61258e565b507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc90565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610fec576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610ff4610694565b6001600160a01b038516158061101157506001600160a01b038316155b15611048576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b83600003611082576040517f5d67094f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03831673735b14bb79463307aacbed86daf3322b1e6226ab14806110b557506001600160a01b03831630145b156110ec576040517f82d5d76a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f47e7ef240000000000000000000000000000000000000000000000000000000081526001600160a01b038481166004830152602482018690528616906347e7ef24906044016020604051808303816000875af1158015611154573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611178919061322f565b610bf3576040517f47d19fab00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6111b6611bda565b6111be610694565b83516000036111f9576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b82336001600160a01b03167f5322ffbbf9261ff1f8138247942d2b03b28717141ef0a0dd080fc4be9c4e78d386858560405161123793929190613251565b60405180910390a3610b0a60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b611270611bda565b611278610694565b82516000036112b3576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b816000036112ed576040517f19c08f4900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61130b8273735b14bb79463307aacbed86daf3322b1e6226ab611f4e565b60008054604051839233927fde19dbe881cc0aeeb6e73ce19ac7b5ca695e6be8a076e3eb42292005a7fec1b5926113529289926001600160a01b03169189919081906130ab565b60405180910390a36108f460017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b61138b611bda565b611393610694565b84516000036113ce576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b83600003611408576040517f5d67094f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006114148585611c5b565b90506000336001600160a01b03167fde19dbe881cc0aeeb6e73ce19ac7b5ca695e6be8a076e3eb42292005a7fec1b5888789868a6001600160a01b0316634d8943bb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611485573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114a99190613092565b8a8a6040516114be9796959493929190613281565b60405180910390a3506114f060017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b5050505050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a6115218161211c565b610cf86125f0565b3373735b14bb79463307aacbed86daf3322b1e6226ab14611576576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61157e610694565b6001600160a01b038516158061159b57506001600160a01b038316155b156115d2576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8360000361160c576040517f5d67094f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517fde43156e0000000000000000000000000000000000000000000000000000000081526001600160a01b0384169063de43156e90610c4090899089908990889088906004016131e8565b3373735b14bb79463307aacbed86daf3322b1e6226ab146116a6576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6116ae610694565b6001600160a01b03851615806116cb57506001600160a01b038316155b15611702576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8360000361173c576040517f5d67094f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03831673735b14bb79463307aacbed86daf3322b1e6226ab148061176f57506001600160a01b03831630145b156117a6576040517f82d5d76a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f47e7ef240000000000000000000000000000000000000000000000000000000081526001600160a01b038481166004830152602482018690528616906347e7ef24906044016020604051808303816000875af115801561180e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611832919061322f565b61160c576040517f47d19fab00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b62680060205260409020600101546118a28161211c565b610b0a8383612213565b6118b4611bda565b6118bc610694565b84516000036118f7576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b83600003611931576040517f19c08f4900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61194f8473735b14bb79463307aacbed86daf3322b1e6226ab611f4e565b60008054604051859233927fde19dbe881cc0aeeb6e73ce19ac7b5ca695e6be8a076e3eb42292005a7fec1b59261199a928b926001600160a01b0316918b919081908b908b90613281565b60405180910390a36114f060017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b3373735b14bb79463307aacbed86daf3322b1e6226ab14611a18576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611a20610694565b6001600160a01b0383161580611a3d57506001600160a01b038116155b15611a74576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b81600003611aae576040517f5d67094f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03811673735b14bb79463307aacbed86daf3322b1e6226ab1480611ae157506001600160a01b03811630145b15611b18576040517f82d5d76a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f47e7ef240000000000000000000000000000000000000000000000000000000081526001600160a01b038281166004830152602482018490528416906347e7ef24906044016020604051808303816000875af1158015611b80573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ba4919061322f565b6108f4576040517f47d19fab00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0080547ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01611c55576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60029055565b6000806000836001600160a01b031663d9eeebed6040518163ffffffff1660e01b81526004016040805180830381865afa158015611c9d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cc191906132d6565b6040517f23b872dd00000000000000000000000000000000000000000000000000000000815233600482015273735b14bb79463307aacbed86daf3322b1e6226ab60248201526044810182905291935091506001600160a01b038316906323b872dd906064016020604051808303816000875af1158015611d46573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d6a919061322f565b611da0576040517f0a7cd6d600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f23b872dd000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018690526001600160a01b038516906323b872dd906064016020604051808303816000875af1158015611e0c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e30919061322f565b611e66576040517f4dd9ee8d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f42966c68000000000000000000000000000000000000000000000000000000008152600481018690526001600160a01b038516906342966c68906024016020604051808303816000875af1158015611ec6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611eea919061322f565b611f20576040517f2c77e05c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b949350505050565b60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b6000546040517f23b872dd000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018490526001600160a01b03909116906323b872dd906064016020604051808303816000875af1158015611fbe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fe2919061322f565b612018576040517fc7ffc47b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000546040517f2e1a7d4d000000000000000000000000000000000000000000000000000000008152600481018490526001600160a01b0390911690632e1a7d4d90602401600060405180830381600087803b15801561207757600080fd5b505af115801561208b573d6000803e3d6000fd5b505050506000816001600160a01b03168360405160006040518083038185875af1925050503d80600081146120dc576040519150601f19603f3d011682016040523d82523d6000602084013e6120e1565b606091505b50509050806108f4576040517fc7ffc47b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610cf88133612669565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff16612209576000848152602082815260408083206001600160a01b0387168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790556121bf3390565b6001600160a01b0316836001600160a01b0316857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a46001915050610785565b6000915050610785565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff1615612209576000848152602082815260408083206001600160a01b038716808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339287917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a46001915050610785565b6122df6126f6565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001681557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a150565b6106f0612751565b612377612751565b6106f06127b8565b612387612751565b6106f0612809565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148061242857507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031661241c7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b6001600160a01b031614155b156106f0576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610f6c8161211c565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156124e2575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682019092526124df91810190613092565b60015b612528576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b03831660048201526024015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8114612584576040517faa1d49a40000000000000000000000000000000000000000000000000000000081526004810182905260240161251f565b6108f48383612811565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146106f0576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6125f8610694565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011781557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25833612349565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408083206001600160a01b038516845290915290205460ff16610f6c576040517fe2517d3f0000000000000000000000000000000000000000000000000000000081526001600160a01b03821660048201526024810183905260440161251f565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff166106f0576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff166106f0576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6127c0612751565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055565b611f28612751565b61281a82612867565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a280511561285f576108f4828261290f565b610f6c612985565b806001600160a01b03163b6000036128b6576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b038216600482015260240161251f565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6060600080846001600160a01b03168460405161292c9190613304565b600060405180830381855af49150503d8060008114612967576040519150601f19603f3d011682016040523d82523d6000602084013e61296c565b606091505b509150915061297c8583836129bd565b95945050505050565b34156106f0576040517fb398979f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6060826129d2576129cd82612a35565b612a2e565b81511580156129e957506001600160a01b0384163b155b15612a2b576040517f9996b3150000000000000000000000000000000000000000000000000000000081526001600160a01b038516600482015260240161251f565b50805b9392505050565b805115612a455780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060208284031215612a8957600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114612a2e57600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600082601f830112612af957600080fd5b813567ffffffffffffffff811115612b1357612b13612ab9565b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8501160116810181811067ffffffffffffffff82111715612b7f57612b7f612ab9565b604052818152838201602001851015612b9757600080fd5b816020850160208301376000918101602001919091529392505050565b6001600160a01b0381168114610cf857600080fd5b600080600060608486031215612bde57600080fd5b833567ffffffffffffffff811115612bf557600080fd5b612c0186828701612ae8565b935050602084013591506040840135612c1981612bb4565b809150509250925092565b600060608284031215612c3657600080fd5b50919050565b60008083601f840112612c4e57600080fd5b50813567ffffffffffffffff811115612c6657600080fd5b602083019150836020828501011115612c7e57600080fd5b9250929050565b600080600080600060808688031215612c9d57600080fd5b853567ffffffffffffffff811115612cb457600080fd5b612cc088828901612c24565b955050602086013593506040860135612cd881612bb4565b9250606086013567ffffffffffffffff811115612cf457600080fd5b612d0088828901612c3c565b969995985093965092949392505050565b600060208284031215612d2357600080fd5b5035919050565b60008060408385031215612d3d57600080fd5b823591506020830135612d4f81612bb4565b809150509250929050565b60008060008060008060a08789031215612d7357600080fd5b863567ffffffffffffffff811115612d8a57600080fd5b612d9689828a01612c24565b9650506020870135612da781612bb4565b9450604087013593506060870135612dbe81612bb4565b9250608087013567ffffffffffffffff811115612dda57600080fd5b612de689828a01612c3c565b979a9699509497509295939492505050565b60008060408385031215612e0b57600080fd5b8235612e1681612bb4565b91506020830135612d4f81612bb4565b60008060408385031215612e3957600080fd5b8235612e4481612bb4565b9150602083013567ffffffffffffffff811115612e6057600080fd5b612e6c85828601612ae8565b9150509250929050565b60008060008060608587031215612e8c57600080fd5b843567ffffffffffffffff811115612ea357600080fd5b612eaf87828801612ae8565b94505060208501359250604085013567ffffffffffffffff811115612ed357600080fd5b612edf87828801612c3c565b95989497509550505050565b600080600060608486031215612f0057600080fd5b833567ffffffffffffffff811115612f1757600080fd5b612f2386828701612ae8565b9660208601359650604090950135949350505050565b600080600080600060808688031215612f5157600080fd5b853567ffffffffffffffff811115612f6857600080fd5b612cc088828901612ae8565b60005b83811015612f8f578181015183820152602001612f77565b50506000910152565b60008151808452612fb0816020860160208601612f74565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000612a2e6020830184612f98565b60008060008060006080868803121561300d57600080fd5b853567ffffffffffffffff81111561302457600080fd5b61303088828901612ae8565b9550506020860135935060408601359250606086013567ffffffffffffffff811115612cf457600080fd5b60008060006060848603121561307057600080fd5b833561307b81612bb4565b9250602084013591506040840135612c1981612bb4565b6000602082840312156130a457600080fd5b5051919050565b60c0815260006130be60c0830188612f98565b6001600160a01b038716602084015285604084015284606084015283608084015282810360a084015260008152602081019150509695505050505050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b600081357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe183360301811261317957600080fd5b820160208101903567ffffffffffffffff81111561319657600080fd5b8036038213156131a557600080fd5b606085526131b76060860182846130fc565b91505060208301356131c881612bb4565b6001600160a01b0316602085015260409283013592909301919091525090565b6080815260006131fb6080830188613145565b6001600160a01b038716602084015285604084015282810360608401526132238185876130fc565b98975050505050505050565b60006020828403121561324157600080fd5b81518015158114612a2e57600080fd5b6040815260006132646040830186612f98565b82810360208401526132778185876130fc565b9695505050505050565b60c08152600061329460c083018a612f98565b6001600160a01b038916602084015287604084015286606084015285608084015282810360a08401526132c88185876130fc565b9a9950505050505050505050565b600080604083850312156132e957600080fd5b82516132f481612bb4565b6020939093015192949293505050565b60008251613316818460208701612f74565b919091019291505056fea26469706673582212200e1dd6867841bb437442203fb5923a96a958e18ecd874d78d2b77dc1e3acfe1264736f6c634300081a0033", } // GatewayZEVMABI is the input ABI used to generate the binding from. diff --git a/v2/pkg/gatewayzevm.t.sol/gatewayzevminboundtest.go b/v2/pkg/gatewayzevm.t.sol/gatewayzevminboundtest.go index 6fc595eb..98b2717d 100644 --- a/v2/pkg/gatewayzevm.t.sol/gatewayzevminboundtest.go +++ b/v2/pkg/gatewayzevm.t.sol/gatewayzevminboundtest.go @@ -49,8 +49,8 @@ type StdInvariantFuzzSelector struct { // GatewayZEVMInboundTestMetaData contains all meta data concerning the GatewayZEVMInboundTest contract. var GatewayZEVMInboundTestMetaData = &bind.MetaData{ - ABI: "[{\"type\":\"function\",\"name\":\"IS_TEST\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeArtifacts\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedArtifacts_\",\"type\":\"string[]\",\"internalType\":\"string[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeContracts\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedContracts_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeSelectors\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedSelectors_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzSelector[]\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"selectors\",\"type\":\"bytes4[]\",\"internalType\":\"bytes4[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeSenders\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedSenders_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"failed\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"setUp\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"targetArtifactSelectors\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedArtifactSelectors_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzArtifactSelector[]\",\"components\":[{\"name\":\"artifact\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"selectors\",\"type\":\"bytes4[]\",\"internalType\":\"bytes4[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetArtifacts\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedArtifacts_\",\"type\":\"string[]\",\"internalType\":\"string[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetContracts\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedContracts_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetInterfaces\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedInterfaces_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzInterface[]\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"artifacts\",\"type\":\"string[]\",\"internalType\":\"string[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetSelectors\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedSelectors_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzSelector[]\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"selectors\",\"type\":\"bytes4[]\",\"internalType\":\"bytes4[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetSenders\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedSenders_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"testCall\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testCallFailsIfReceiverIsZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawAndCallZRC20FailsIfAmountIsZero\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawAndCallZRC20FailsIfReceiverIsZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawAndcallZETAFailsIfAmountIsReceiverIsZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawAndcallZETAFailsIfAmountIsZero\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawZETA\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawZETAFailsIfAmountIsZero\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawZETAFailsIfNoAllowance\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawZETAFailsIfNoBalance\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawZETAWithMessage\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawZETAWithMessageFailsIfNoAllowance\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawZRC20\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawZRC20FailsIfNoAllowance\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawZRC20FailsIfNoBalanceForGasFee\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawZRC20FailsIfNoBalanceForTransfer\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawZRC20FailsIfReceiverIsZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawZRC20FailsIsAmountIs0\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawZRC20WithMessage\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawZRC20WithMessageFailsIfNoAllowance\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"event\",\"name\":\"Call\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"chainId\",\"type\":\"uint256\",\"indexed\":true,\"internalType\":\"uint256\"},{\"name\":\"receiver\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"message\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Withdrawal\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"chainId\",\"type\":\"uint256\",\"indexed\":true,\"internalType\":\"uint256\"},{\"name\":\"receiver\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"zrc20\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"gasfee\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"protocolFlatFee\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"message\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log\",\"inputs\":[{\"name\":\"\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_address\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_array\",\"inputs\":[{\"name\":\"val\",\"type\":\"uint256[]\",\"indexed\":false,\"internalType\":\"uint256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_array\",\"inputs\":[{\"name\":\"val\",\"type\":\"int256[]\",\"indexed\":false,\"internalType\":\"int256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_array\",\"inputs\":[{\"name\":\"val\",\"type\":\"address[]\",\"indexed\":false,\"internalType\":\"address[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_bytes\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_bytes32\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_int\",\"inputs\":[{\"name\":\"\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_address\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_array\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"uint256[]\",\"indexed\":false,\"internalType\":\"uint256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_array\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"int256[]\",\"indexed\":false,\"internalType\":\"int256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_array\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"address[]\",\"indexed\":false,\"internalType\":\"address[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_bytes\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_bytes32\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_decimal_int\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"},{\"name\":\"decimals\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_decimal_uint\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"decimals\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_int\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_string\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_uint\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_string\",\"inputs\":[{\"name\":\"\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_uint\",\"inputs\":[{\"name\":\"\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"logs\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"CallerIsNotFungibleModule\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"FailedZetaSent\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"GasFeeTransferFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientZRC20Amount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientZetaAmount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidTarget\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"LowBalance\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OnlyWZETAOrFungible\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"WithdrawalFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZRC20BurnFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZRC20DepositFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZRC20TransferFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZeroAddress\",\"inputs\":[]}]", - Bin: "0x6080604052600c8054600160ff199182168117909255601f80549091169091179055348015602c57600080fd5b5061e1bd8061003c6000396000f3fe608060405234801561001057600080fd5b506004361061020b5760003560e01c806385226c811161012a578063ba9adeef116100bd578063e20c9f711161008c578063fa7626d411610071578063fa7626d41461035c578063fbc611c814610369578063fdad0ad01461037157600080fd5b8063e20c9f711461034c578063ea37902f1461035457600080fd5b8063ba9adeef1461032c578063bcc52b9a14610334578063ceccfab31461033c578063dde7e9671461034457600080fd5b8063b5508aa9116100f9578063b5508aa9146102fc578063b7f0583614610304578063ba414fa61461030c578063ba800c911461032457600080fd5b806385226c81146102c2578063916a17c6146102d757806395c379c1146102ec578063b0464fdc146102f457600080fd5b806339cbb457116101a25780635d72228f116101715780635d72228f146102955780636221b5091461029d57806366d9a9a0146102a557806383ababa9146102ba57600080fd5b806339cbb457146102755780633e5e3c231461027d5780633f7286f4146102855780635006fd801461028d57600080fd5b80631ed7831c116101de5780631ed7831c1461023257806321aeb18c146102505780632ade38801461025857806336431b3f1461026d57600080fd5b80630a9254e4146102105780631238212c1461021a57806318a4cfdc146102225780631e63d2b91461022a575b600080fd5b610218610379565b005b610218610de6565b6102186111af565b610218611628565b61023a611a14565b6040516102479190618c55565b60405180910390f35b610218611a76565b610260611b97565b6040516102479190618cf1565b610218611cd9565b610218611e7f565b61023a611fe7565b61023a612047565b6102186120a7565b61021861255b565b6102186128aa565b6102ad612acc565b6040516102479190618e57565b610218612c4e565b6102ca612d49565b6040516102479190618ef5565b6102df612e19565b6040516102479190618f6c565b610218612f14565b6102df61307d565b6102ca613178565b610218613248565b610314613485565b6040519015158152602001610247565b610218613559565b610218613685565b610218613828565b6102186139a6565b610218613cda565b61023a614116565b610218614176565b601f546103149060ff1681565b610218614555565b6102186148c8565b602580547fffffffffffffffffffffffff00000000000000000000000000000000000000009081163017909155602680549091166112341790556040516103bf90618b68565b604051809103906000f0801580156103db573d6000803e3d6000fd5b50602280547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03928316908117909155604080518082018252600f81527f476174657761795a45564d2e736f6c0000000000000000000000000000000000602082015260255491516024810193909352921660448201526104bf919060640160408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f485cc95500000000000000000000000000000000000000000000000000000000179052614a57565b601f80547fffffffffffffffffffffff0000000000000000000000000000000000000000ff166101006001600160a01b039384168102919091179182905560208054919092049092167fffffffffffffffffffffffff000000000000000000000000000000000000000090921682178155604080517f3ce4a5bc0000000000000000000000000000000000000000000000000000000081529051633ce4a5bc926004808401939192918290030181865afa158015610581573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105a59190619003565b602780547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03929092169190911790556040516105e990618b75565b604051809103906000f080158015610605573d6000803e3d6000fd5b50602480547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039283161781556027546040517f06447d5600000000000000000000000000000000000000000000000000000000815292166004830152737109709ecfa91a80626ff3989d68f67f5b1dd12d916306447d569101600060405180830381600087803b1580156106a157600080fd5b505af11580156106b5573d6000803e3d6000fd5b5050505060008060006040516106ca90618b82565b6001600160a01b03938416815291831660208301529091166040820152606001604051809103906000f080158015610706573d6000803e3d6000fd5b50602380547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392831690811790915560205460405160129360019384936000939192169061075c90618b8f565b61076b9695949392919061902c565b604051809103906000f080158015610787573d6000803e3d6000fd5b50602180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039283169081179091556023546040517fee2815ba0000000000000000000000000000000000000000000000000000000081526001600482015260248101929092529091169063ee2815ba90604401600060405180830381600087803b15801561081e57600080fd5b505af1158015610832573d6000803e3d6000fd5b50506023546040517fa7cb050700000000000000000000000000000000000000000000000000000000815260016004820181905260248201526001600160a01b03909116925063a7cb05079150604401600060405180830381600087803b15801561089c57600080fd5b505af11580156108b0573d6000803e3d6000fd5b50506027546040517fc88a5e6d0000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152633b9aca006024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c88a5e6d9150604401600060405180830381600087803b15801561093057600080fd5b505af1158015610944573d6000803e3d6000fd5b50505050602260009054906101000a90046001600160a01b03166001600160a01b031663d0e30db0600a6040518263ffffffff1660e01b81526004016000604051808303818588803b15801561099957600080fd5b505af11580156109ad573d6000803e3d6000fd5b50506022546020546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152600a60248201529116935063095ea7b3925060440190506020604051808303816000875af1158015610a21573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a459190619121565b506021546025546040517f47e7ef240000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620186a060248201529116906347e7ef24906044016020604051808303816000875af1158015610ab6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ada9190619121565b507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b03166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610b3957600080fd5b505af1158015610b4d573d6000803e3d6000fd5b50506025546040517f06447d560000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506306447d569150602401600060405180830381600087803b158015610bc357600080fd5b505af1158015610bd7573d6000803e3d6000fd5b50506021546020546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620186a060248201529116925063095ea7b391506044016020604051808303816000875af1158015610c4b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c6f9190619121565b50602260009054906101000a90046001600160a01b03166001600160a01b031663d0e30db0600a6040518263ffffffff1660e01b81526004016000604051808303818588803b158015610cc157600080fd5b505af1158015610cd5573d6000803e3d6000fd5b50506022546020546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152600a60248201529116935063095ea7b3925060440190506020604051808303816000875af1158015610d49573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d6d9190619121565b507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b03166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610dcc57600080fd5b505af1158015610de0573d6000803e3d6000fd5b50505050565b6021546025546040516370a0823160e01b81526001600160a01b03918216600482015260019260009216906370a0823190602401602060405180830381865afa158015610e37573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e5b9190619143565b6025546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015610ed057600080fd5b505af1158015610ee4573d6000803e3d6000fd5b50506021546020546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152600060248201529116925063095ea7b391506044016020604051808303816000875af1158015610f56573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f7a9190619121565b506026546040516001600160a01b03909116602482015260009060440160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f84fae7600000000000000000000000000000000000000000000000000000000017905280517ff48448140000000000000000000000000000000000000000000000000000000081529051919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f48448149160048082019260009290919082900301818387803b15801561105657600080fd5b505af115801561106a573d6000803e3d6000fd5b50506020805460265460405160609190911b6bffffffffffffffffffffffff1916928101929092526001600160a01b03169250637993c1e0915060340160408051601f19818403018152908290526021547fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1683526110fe9288916001600160a01b031690879060040161915c565b600060405180830381600087803b15801561111857600080fd5b505af115801561112c573d6000803e3d6000fd5b50506021546025546040516370a0823160e01b81526001600160a01b03918216600482015260009450911691506370a0823190602401602060405180830381865afa15801561117f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111a39190619143565b9050610de08382614a76565b6022546025546040516370a0823160e01b81526001600160a01b03918216600482015260019260009216906370a0823190602401602060405180830381865afa158015611200573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112249190619143565b6022546020546040516370a0823160e01b81526001600160a01b0391821660048201529293506000929116906370a0823190602401602060405180830381865afa158015611276573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061129a9190619143565b6027546026546040516001600160a01b03918216602482015292935016319060009060440160408051601f19818403018152918152602080830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f84fae760000000000000000000000000000000000000000000000000000000001790525490517f81bad6f30000000000000000000000000000000000000000000000000000000081526001600482018190526024820181905260448201819052606482018190526001600160a01b03909216608482015291925090737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b1580156113a957600080fd5b505af11580156113bd573d6000803e3d6000fd5b505060255460265460405160609190911b6bffffffffffffffffffffffff191660208201528493506001600160a01b0390911691507fde19dbe881cc0aeeb6e73ce19ac7b5ca695e6be8a076e3eb42292005a7fec1b59060340160408051601f1981840301815290829052602254611449926001600160a01b03909116908c9060009081908b90619196565b60405180910390a3602080546026546040516001600160a01b039283169363f41d7749936114919316910160609190911b6bffffffffffffffffffffffff1916815260140190565b6040516020818303038152906040528884866040518563ffffffff1660e01b81526004016114c294939291906191e9565b600060405180830381600087803b1580156114dc57600080fd5b505af11580156114f0573d6000803e3d6000fd5b50506022546025546040516370a0823160e01b81526001600160a01b03918216600482015260009450911691506370a0823190602401602060405180830381865afa158015611543573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115679190619143565b905061157d611577600188619249565b82614a76565b6022546020546040516370a0823160e01b81526001600160a01b03918216600482015260009291909116906370a0823190602401602060405180830381865afa1580156115ce573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115f29190619143565b90506115fe8682614a76565b61161e61160c86600161925c565b6027546001600160a01b031631614a76565b5050505050505050565b6021546025546040516370a0823160e01b81526001600160a01b03918216600482015260019260009216906370a0823190602401602060405180830381865afa158015611679573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061169d9190619143565b6026546040516001600160a01b03909116602482015290915060009060440160408051601f19818403018152918152602080830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f84fae760000000000000000000000000000000000000000000000000000000001790525490517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b1580156117a357600080fd5b505af11580156117b7573d6000803e3d6000fd5b505060255460265460405160609190911b6bffffffffffffffffffffffff19166020820152600093506001600160a01b0390911691507fde19dbe881cc0aeeb6e73ce19ac7b5ca695e6be8a076e3eb42292005a7fec1b59060340160408051601f198184030181528282526021547f4d8943bb000000000000000000000000000000000000000000000000000000008452915190926001600160a01b039092169189916000918491634d8943bb916004808201926020929091908290030181865afa15801561188a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118ae9190619143565b886040516118c196959493929190619196565b60405180910390a3602080546026546040516001600160a01b0392831693637993c1e0936119099316910160609190911b6bffffffffffffffffffffffff1916815260140190565b60408051601f19818403018152908290526021547fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1683526119609288916001600160a01b031690879060040161915c565b600060405180830381600087803b15801561197a57600080fd5b505af115801561198e573d6000803e3d6000fd5b50506021546025546040516370a0823160e01b81526001600160a01b03918216600482015260009450911691506370a0823190602401602060405180830381865afa1580156119e1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a059190619143565b9050610de06115778585619249565b60606016805480602002602001604051908101604052809291908181526020018280548015611a6c57602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311611a4e575b5050505050905090565b6040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527f19c08f49000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b158015611afb57600080fd5b505af1158015611b0f573d6000803e3d6000fd5b50506020805460265460405160609190911b6bffffffffffffffffffffffff1916928101929092526001600160a01b0316925063737a9ed69150603401604051602081830303815290604052600060016040518463ffffffff1660e01b8152600401611b7d9392919061926f565b600060405180830381600087803b158015610dcc57600080fd5b6060601e805480602002602001604051908101604052809291908181526020016000905b82821015611cd057600084815260208082206040805180820182526002870290920180546001600160a01b03168352600181018054835181870281018701909452808452939591948681019491929084015b82821015611cb9578382906000526020600020018054611c2c90619294565b80601f0160208091040260200160405190810160405280929190818152602001828054611c5890619294565b8015611ca55780601f10611c7a57610100808354040283529160200191611ca5565b820191906000526020600020905b815481529060010190602001808311611c8857829003601f168201915b505050505081526020019060010190611c0d565b505050508152505081526020019060010190611bbb565b50505050905090565b6026546040516001600160a01b03909116602482015260009060440160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f84fae76000000000000000000000000000000000000000000000000000000000179052517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fd92e233d000000000000000000000000000000000000000000000000000000006004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b158015611dd357600080fd5b505af1158015611de7573d6000803e3d6000fd5b5050602080546040805160008152928301908190526021547f7993c1e0000000000000000000000000000000000000000000000000000000009091526001600160a01b039182169450637993c1e09350611e4a929160019116866024840161915c565b600060405180830381600087803b158015611e6457600080fd5b505af1158015611e78573d6000803e3d6000fd5b5050505050565b6026546040516001600160a01b03909116602482015260009060440160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f84fae76000000000000000000000000000000000000000000000000000000000179052517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fd92e233d000000000000000000000000000000000000000000000000000000006004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b158015611f7957600080fd5b505af1158015611f8d573d6000803e3d6000fd5b5050602080546040805160008152928301908190527f5d40e1780000000000000000000000000000000000000000000000000000000090526001600160a01b03169250635d40e1789150611e4a90600185602483016192e1565b60606018805480602002602001604051908101604052809291908181526020018280548015611a6c576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311611a4e575050505050905090565b60606017805480602002602001604051908101604052809291908181526020018280548015611a6c576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311611a4e575050505050905090565b6022546025546040516370a0823160e01b81526001600160a01b03918216600482015260019260009216906370a0823190602401602060405180830381865afa1580156120f8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061211c9190619143565b6022546020546040516370a0823160e01b81526001600160a01b0391821660048201529293506000929116906370a0823190602401602060405180830381865afa15801561216e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121929190619143565b6027546026546040516001600160a01b03918216602482015292935016319060009060440160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f84fae7600000000000000000000000000000000000000000000000000000000017905260255490517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152909150600190737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561228657600080fd5b505af115801561229a573d6000803e3d6000fd5b50506022546020546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152600060248201529116925063095ea7b391506044016020604051808303816000875af115801561230c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123309190619121565b507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b031663f48448146040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561238f57600080fd5b505af11580156123a3573d6000803e3d6000fd5b50506020805460265460405160609190911b6bffffffffffffffffffffffff1916928101929092526001600160a01b0316925063f41d774991506034016040516020818303038152906040528884866040518563ffffffff1660e01b815260040161241194939291906191e9565b600060405180830381600087803b15801561242b57600080fd5b505af115801561243f573d6000803e3d6000fd5b50506022546025546040516370a0823160e01b81526001600160a01b03918216600482015260009450911691506370a0823190602401602060405180830381865afa158015612492573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124b69190619143565b90506124c28682614a76565b6022546020546040516370a0823160e01b81526001600160a01b03918216600482015260009291909116906370a0823190602401602060405180830381865afa158015612513573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125379190619143565b90506125438682614a76565b60275461161e9086906001600160a01b031631614a76565b6021546025546040516370a0823160e01b81526001600160a01b03918216600482015260019260009216906370a0823190602401602060405180830381865afa1580156125ac573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125d09190619143565b6025546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561264557600080fd5b505af1158015612659573d6000803e3d6000fd5b50506021546020546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152600060248201529116925063095ea7b391506044016020604051808303816000875af11580156126cb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126ef9190619121565b507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b031663f48448146040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561274e57600080fd5b505af1158015612762573d6000803e3d6000fd5b50506020805460265460405160609190911b6bffffffffffffffffffffffff1916928101929092526001600160a01b0316925063135390f9915060340160408051601f19818403018152908290526021547fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1683526127f49287916001600160a01b03169060040161930c565b600060405180830381600087803b15801561280e57600080fd5b505af1158015612822573d6000803e3d6000fd5b50506021546025546040516370a0823160e01b81526001600160a01b03918216600482015260009450911691506370a0823190602401602060405180830381865afa158015612875573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128999190619143565b90506128a58282614a76565b505050565b6022546025546040516370a0823160e01b81526001600160a01b03918216600482015260019260009216906370a0823190602401602060405180830381865afa1580156128fb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061291f9190619143565b6022546040517fa9059cbb0000000000000000000000000000000000000000000000000000000081526101236004820152602481018390529192506001600160a01b03169063a9059cbb906044016020604051808303816000875af115801561298c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129b09190619121565b506000600190507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b031663f48448146040518163ffffffff1660e01b8152600401600060405180830381600087803b158015612a1557600080fd5b505af1158015612a29573d6000803e3d6000fd5b50506020805460265460405160609190911b6bffffffffffffffffffffffff1916928101929092526001600160a01b0316925063737a9ed6915060340160405160208183030381529060405285846040518463ffffffff1660e01b8152600401612a959392919061926f565b600060405180830381600087803b158015612aaf57600080fd5b505af1158015612ac3573d6000803e3d6000fd5b50505050505050565b6060601b805480602002602001604051908101604052809291908181526020016000905b82821015611cd05783829060005260206000209060020201604051806040016040529081600082018054612b2390619294565b80601f0160208091040260200160405190810160405280929190818152602001828054612b4f90619294565b8015612b9c5780601f10612b7157610100808354040283529160200191612b9c565b820191906000526020600020905b815481529060010190602001808311612b7f57829003601f168201915b5050505050815260200160018201805480602002602001604051908101604052809291908181526020018280548015612c3657602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019060040190602082600301049283019260010382029150808411612be35790505b50505050508152505081526020019060010190612af0565b6040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b158015612cd357600080fd5b505af1158015612ce7573d6000803e3d6000fd5b5050602080546040805160008152928301908190526021547f135390f9000000000000000000000000000000000000000000000000000000009091526001600160a01b03918216945063135390f99350611b7d9291600191166024830161930c565b6060601a805480602002602001604051908101604052809291908181526020016000905b82821015611cd0578382906000526020600020018054612d8c90619294565b80601f0160208091040260200160405190810160405280929190818152602001828054612db890619294565b8015612e055780601f10612dda57610100808354040283529160200191612e05565b820191906000526020600020905b815481529060010190602001808311612de857829003601f168201915b505050505081526020019060010190612d6d565b6060601d805480602002602001604051908101604052809291908181526020016000905b82821015611cd05760008481526020908190206040805180820182526002860290920180546001600160a01b03168352600181018054835181870281018701909452808452939491938583019392830182828015612efc57602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019060040190602082600301049283019260010382029150808411612ea95790505b50505050508152505081526020019060010190612e3d565b6026546040516001600160a01b03909116602482015260009060440160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f84fae76000000000000000000000000000000000000000000000000000000000179052517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fd92e233d000000000000000000000000000000000000000000000000000000006004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b15801561300e57600080fd5b505af1158015613022573d6000803e3d6000fd5b5050602080546040805160008152928301908190527ff41d77490000000000000000000000000000000000000000000000000000000090526001600160a01b0316925063f41d77499150611e4a9060018086602484016191e9565b6060601c805480602002602001604051908101604052809291908181526020016000905b82821015611cd05760008481526020908190206040805180820182526002860290920180546001600160a01b0316835260018101805483518187028101870190945280845293949193858301939283018282801561316057602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168152602001906004019060208260030104928301926001038202915080841161310d5790505b505050505081525050815260200190600101906130a1565b60606019805480602002602001604051908101604052809291908181526020016000905b82821015611cd05783829060005260206000200180546131bb90619294565b80601f01602080910402602001604051908101604052809291908181526020018280546131e790619294565b80156132345780601f1061320957610100808354040283529160200191613234565b820191906000526020600020905b81548152906001019060200180831161321757829003601f168201915b50505050508152602001906001019061319c565b6026546040516001600160a01b03909116602482015260009060440160408051601f19818403018152918152602080830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f84fae760000000000000000000000000000000000000000000000000000000001790525490517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b15801561334b57600080fd5b505af115801561335f573d6000803e3d6000fd5b505060255460265460405160609190911b6bffffffffffffffffffffffff19166020820152600193508392506001600160a01b03909116907f5322ffbbf9261ff1f8138247942d2b03b28717141ef0a0dd080fc4be9c4e78d39060340160408051601f19818403018152908290526133d891879061933e565b60405180910390a3602080546026546040516001600160a01b0392831693635d40e178936134209316910160609190911b6bffffffffffffffffffffffff1916815260140190565b60405160208183030381529060405283856040518463ffffffff1660e01b815260040161344f939291906192e1565b600060405180830381600087803b15801561346957600080fd5b505af115801561347d573d6000803e3d6000fd5b505050505050565b60085460009060ff161561349d575060085460ff1690565b6040517f667f9d70000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d600482018190527f6661696c65640000000000000000000000000000000000000000000000000000602483015260009163667f9d7090604401602060405180830381865afa15801561352e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135529190619143565b1415905090565b6040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527f5d67094f000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b1580156135de57600080fd5b505af11580156135f2573d6000803e3d6000fd5b50506020805460265460405160609190911b6bffffffffffffffffffffffff1916928101929092526001600160a01b0316925063135390f9915060340160408051601f19818403018152908290526021547fffffffff0000000000000000000000000000000000000000000000000000000060e085901b168352611b7d926000916001600160a01b03169060040161930c565b6026546040516001600160a01b03909116602482015260009060440160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f84fae76000000000000000000000000000000000000000000000000000000000179052517fc31eb0e00000000000000000000000000000000000000000000000000000000081527f5d67094f000000000000000000000000000000000000000000000000000000006004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b15801561377f57600080fd5b505af1158015613793573d6000803e3d6000fd5b50506020805460265460405160609190911b6bffffffffffffffffffffffff1916928101929092526001600160a01b03169250637993c1e0915060340160408051601f19818403018152908290526021547fffffffff0000000000000000000000000000000000000000000000000000000060e085901b168352611e4a926000916001600160a01b031690879060040161915c565b6026546040516001600160a01b03909116602482015260009060440160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f84fae76000000000000000000000000000000000000000000000000000000000179052517fc31eb0e00000000000000000000000000000000000000000000000000000000081527f19c08f49000000000000000000000000000000000000000000000000000000006004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b15801561392257600080fd5b505af1158015613936573d6000803e3d6000fd5b50506020805460265460405160609190911b6bffffffffffffffffffffffff1916928101929092526001600160a01b0316925063f41d7749915060340160405160208183030381529060405260006001856040518563ffffffff1660e01b8152600401611e4a94939291906191e9565b6021546025546040516370a0823160e01b81526001600160a01b03918216600482015260019260009216906370a0823190602401602060405180830381865afa1580156139f7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a1b9190619143565b6021546040517fa9059cbb0000000000000000000000000000000000000000000000000000000081526101236004820152602481018390529192506001600160a01b03169063a9059cbb906044016020604051808303816000875af1158015613a88573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613aac9190619121565b506027546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015613b1f57600080fd5b505af1158015613b33573d6000803e3d6000fd5b50506021546040517ff687d12a000000000000000000000000000000000000000000000000000000008152600a60048201526001600160a01b03909116925063f687d12a9150602401600060405180830381600087803b158015613b9657600080fd5b505af1158015613baa573d6000803e3d6000fd5b50506040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527ffe382aa7000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e091506024015b600060405180830381600087803b158015613c3457600080fd5b505af1158015613c48573d6000803e3d6000fd5b50506020805460265460405160609190911b6bffffffffffffffffffffffff1916928101929092526001600160a01b0316925063135390f9915060340160408051601f19818403018152908290526021547fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16835261344f9287916001600160a01b03169060040161930c565b6022546025546040516370a0823160e01b81526001600160a01b03918216600482015260019260009216906370a0823190602401602060405180830381865afa158015613d2b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613d4f9190619143565b6022546020546040516370a0823160e01b81526001600160a01b0391821660048201529293506000929116906370a0823190602401602060405180830381865afa158015613da1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613dc59190619143565b6027546025546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152929350163190600190737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015613e4357600080fd5b505af1158015613e57573d6000803e3d6000fd5b50506022546020546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152600060248201529116925063095ea7b391506044016020604051808303816000875af1158015613ec9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613eed9190619121565b507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b031663f48448146040518163ffffffff1660e01b8152600401600060405180830381600087803b158015613f4c57600080fd5b505af1158015613f60573d6000803e3d6000fd5b50506020805460265460405160609190911b6bffffffffffffffffffffffff1916928101929092526001600160a01b0316925063737a9ed6915060340160405160208183030381529060405287846040518463ffffffff1660e01b8152600401613fcc9392919061926f565b600060405180830381600087803b158015613fe657600080fd5b505af1158015613ffa573d6000803e3d6000fd5b50506022546025546040516370a0823160e01b81526001600160a01b03918216600482015260009450911691506370a0823190602401602060405180830381865afa15801561404d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906140719190619143565b905061407d8582614a76565b6022546020546040516370a0823160e01b81526001600160a01b03918216600482015260009291909116906370a0823190602401602060405180830381865afa1580156140ce573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906140f29190619143565b90506140fe8582614a76565b602754612ac39085906001600160a01b031631614a76565b60606015805480602002602001604051908101604052809291908181526020018280548015611a6c576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311611a4e575050505050905090565b6022546025546040516370a0823160e01b81526001600160a01b03918216600482015260019260009216906370a0823190602401602060405180830381865afa1580156141c7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906141eb9190619143565b6022546020546040516370a0823160e01b81526001600160a01b0391821660048201529293506000929116906370a0823190602401602060405180830381865afa15801561423d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906142619190619143565b6027546020546040517f81bad6f30000000000000000000000000000000000000000000000000000000081526001600482018190526024820181905260448201819052606482018190526001600160a01b0392831660848301529394509116319190737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b1580156142fc57600080fd5b505af1158015614310573d6000803e3d6000fd5b505060255460265460405160609190911b6bffffffffffffffffffffffff191660208201528493506001600160a01b0390911691507fde19dbe881cc0aeeb6e73ce19ac7b5ca695e6be8a076e3eb42292005a7fec1b59060340160408051601f198184030181529082905260225461439a926001600160a01b03909116908b906000908190619363565b60405180910390a3602080546026546040516001600160a01b039283169363737a9ed6936143e29316910160609190911b6bffffffffffffffffffffffff1916815260140190565b60405160208183030381529060405287846040518463ffffffff1660e01b81526004016144119392919061926f565b600060405180830381600087803b15801561442b57600080fd5b505af115801561443f573d6000803e3d6000fd5b50506022546025546040516370a0823160e01b81526001600160a01b03918216600482015260009450911691506370a0823190602401602060405180830381865afa158015614492573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906144b69190619143565b90506144c6611577600187619249565b6022546020546040516370a0823160e01b81526001600160a01b03918216600482015260009291909116906370a0823190602401602060405180830381865afa158015614517573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061453b9190619143565b90506145478582614a76565b612ac361160c85600161925c565b6021546025546040516370a0823160e01b81526001600160a01b03918216600482015260019260009216906370a0823190602401602060405180830381865afa1580156145a6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906145ca9190619143565b6020546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b15801561465b57600080fd5b505af115801561466f573d6000803e3d6000fd5b505060255460265460405160609190911b6bffffffffffffffffffffffff19166020820152600093506001600160a01b0390911691507fde19dbe881cc0aeeb6e73ce19ac7b5ca695e6be8a076e3eb42292005a7fec1b59060340160408051601f198184030181528282526021547f4d8943bb000000000000000000000000000000000000000000000000000000008452915190926001600160a01b039092169188916000918491634d8943bb916004808201926020929091908290030181865afa158015614742573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906147669190619143565b604051614777959493929190619363565b60405180910390a3602080546026546040516001600160a01b039283169363135390f9936147bf9316910160609190911b6bffffffffffffffffffffffff1916815260140190565b60408051601f19818403018152908290526021547fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1683526148149287916001600160a01b03169060040161930c565b600060405180830381600087803b15801561482e57600080fd5b505af1158015614842573d6000803e3d6000fd5b50506021546025546040516370a0823160e01b81526001600160a01b03918216600482015260009450911691506370a0823190602401602060405180830381865afa158015614895573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906148b99190619143565b90506128a56115778484619249565b6021546025546040516370a0823160e01b81526001600160a01b03918216600482015260029260009216906370a0823190602401602060405180830381865afa158015614919573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061493d9190619143565b6021549091506001600160a01b031663a9059cbb61012361495f600185619249565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303816000875af11580156149c2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906149e69190619121565b506040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527ffe382aa7000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401613c1a565b6000614a61618b9c565b614a6c848483614af5565b9150505b92915050565b6040517f98296c540000000000000000000000000000000000000000000000000000000081526004810183905260248101829052737109709ecfa91a80626ff3989d68f67f5b1dd12d906398296c549060440160006040518083038186803b158015614ae157600080fd5b505afa15801561347d573d6000803e3d6000fd5b600080614b028584614b70565b9050614b656040518060400160405280601d81526020017f4552433139363750726f78792e736f6c3a4552433139363750726f78790000008152508286604051602001614b509291906193b4565b60405160208183030381529060405285614b7c565b9150505b9392505050565b6000614b698383614baa565b60c08101515160009015614ba057614b9984848460c00151614bc5565b9050614b69565b614b998484614d6b565b6000614bb68383614e56565b614b6983836020015184614b7c565b600080614bd0614e66565b90506000614bde8683614f39565b90506000614bf582606001518360200151856153df565b90506000614c05838389896155f1565b90506000614c128261646e565b602081015181519192509060030b15614c8557898260400151604051602001614c3c9291906193d6565b60408051601f19818403018152908290527f08c379a0000000000000000000000000000000000000000000000000000000008252614c7c91600401619457565b60405180910390fd5b6000614cc86040518060400160405280601581526020017f4465706c6f79656420746f20616464726573733a20000000000000000000000081525083600161663d565b6040517fc6ce059d000000000000000000000000000000000000000000000000000000008152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c6ce059d90614d1b908490600401619457565b602060405180830381865afa158015614d38573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614d5c9190619003565b9b9a5050505050505050505050565b6040517f8d1cc9250000000000000000000000000000000000000000000000000000000081526000908190737109709ecfa91a80626ff3989d68f67f5b1dd12d90638d1cc92590614dc0908790600401619457565b600060405180830381865afa158015614ddd573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052614e059190810190619552565b90506000614e338285604051602001614e1f929190619587565b60405160208183030381529060405261683d565b90506001600160a01b038116614a6c578484604051602001614c3c9291906195b6565b614e6282826000616850565b5050565b604080518082018252600381527f6f75740000000000000000000000000000000000000000000000000000000000602082015290517fd145736c000000000000000000000000000000000000000000000000000000008152606091737109709ecfa91a80626ff3989d68f67f5b1dd12d91829063d145736c90614eed908490600401619661565b600060405180830381865afa158015614f0a573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052614f3291908101906196a8565b9250505090565b614f6b6040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b6000737109709ecfa91a80626ff3989d68f67f5b1dd12d9050614fb66040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b614fbf85616953565b60208201526000614fcf86616d38565b90506000836001600160a01b031663d930a0e66040518163ffffffff1660e01b8152600401600060405180830381865afa158015615011573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261503991908101906196a8565b8683856020015160405160200161505394939291906196f1565b60408051601f19818403018152908290527f60f9bb1100000000000000000000000000000000000000000000000000000000825291506000906001600160a01b038616906360f9bb11906150ab908590600401619457565b600060405180830381865afa1580156150c8573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526150f091908101906196a8565b6040517fdb4235f60000000000000000000000000000000000000000000000000000000081529091506001600160a01b0386169063db4235f6906151389084906004016197f5565b602060405180830381865afa158015615155573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906151799190619121565b61518e5781604051602001614c3c9190619847565b6040517f49c4fac80000000000000000000000000000000000000000000000000000000081526001600160a01b038616906349c4fac8906151d39084906004016198d9565b600060405180830381865afa1580156151f0573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261521891908101906196a8565b84526040517fdb4235f60000000000000000000000000000000000000000000000000000000081526001600160a01b0386169063db4235f69061525f90849060040161992b565b602060405180830381865afa15801561527c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906152a09190619121565b15615335576040517f49c4fac80000000000000000000000000000000000000000000000000000000081526001600160a01b038616906349c4fac8906152ea90849060040161992b565b600060405180830381865afa158015615307573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261532f91908101906196a8565b60408501525b846001600160a01b03166349c4fac882866000015160405160200161535a919061997d565b6040516020818303038152906040526040518363ffffffff1660e01b815260040161538692919061933e565b600060405180830381865afa1580156153a3573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526153cb91908101906196a8565b606085015250608083015250949350505050565b60408051600480825260a0820190925260609160009190816020015b60608152602001906001900390816153fb5790505090506040518060400160405280600481526020017f67726570000000000000000000000000000000000000000000000000000000008152508160008151811061545b5761545b6199e9565b60200260200101819052506040518060400160405280600381526020017f2d726c0000000000000000000000000000000000000000000000000000000000815250816001815181106154af576154af6199e9565b6020026020010181905250846040516020016154cb9190619a18565b604051602081830303815290604052816002815181106154ed576154ed6199e9565b6020026020010181905250826040516020016155099190619a84565b6040516020818303038152906040528160038151811061552b5761552b6199e9565b602002602001018190525060006155418261646e565b602080820151604080518082018252600581527f2e6a736f6e00000000000000000000000000000000000000000000000000000081850190815282518084018452600080825290860152825180840190935290518252928101929092529192506155d29060408051808201825260008082526020918201528151808301909252845182528085019082015290616fbb565b6155e75785604051602001614c3c9190619ac5565b9695505050505050565b60a0810151604080518082018252600080825260209182015281518083019092528251808352928101910152606090737109709ecfa91a80626ff3989d68f67f5b1dd12d9015615641565b511590565b6157b5578260200151156156fd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605860248201527f54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f742060448201527f62652075736564207768656e207468652060736b6970566572696679536f757260648201527f6365436f646560206f7074696f6e206973206074727565600000000000000000608482015260a401614c7c565b8260c00151156157b5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605360248201527f54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f742060448201527f62652075736564207768656e207468652060736b69704c6963656e736554797060648201527f6560206f7074696f6e2069732060747275656000000000000000000000000000608482015260a401614c7c565b6040805160ff8082526120008201909252600091816020015b60608152602001906001900390816157ce57905050905060006040518060400160405280600381526020017f6e7078000000000000000000000000000000000000000000000000000000000081525082828061582990619b56565b935060ff168151811061583e5761583e6199e9565b60200260200101819052506040518060400160405280600d81526020017f302e302e312d616c7068612e370000000000000000000000000000000000000081525060405160200161588f9190619b75565b6040516020818303038152906040528282806158aa90619b56565b935060ff16815181106158bf576158bf6199e9565b60200260200101819052506040518060400160405280600681526020017f6465706c6f79000000000000000000000000000000000000000000000000000081525082828061590c90619b56565b935060ff1681518110615921576159216199e9565b60200260200101819052506040518060400160405280600e81526020017f2d2d636f6e74726163744e616d6500000000000000000000000000000000000081525082828061596e90619b56565b935060ff1681518110615983576159836199e9565b6020026020010181905250876020015182828061599f90619b56565b935060ff16815181106159b4576159b46199e9565b60200260200101819052506040518060400160405280600e81526020017f2d2d636f6e747261637450617468000000000000000000000000000000000000815250828280615a0190619b56565b935060ff1681518110615a1657615a166199e9565b602090810291909101015287518282615a2e81619b56565b935060ff1681518110615a4357615a436199e9565b60200260200101819052506040518060400160405280600981526020017f2d2d636861696e49640000000000000000000000000000000000000000000000815250828280615a9090619b56565b935060ff1681518110615aa557615aa56199e9565b6020026020010181905250615ab94661701c565b8282615ac481619b56565b935060ff1681518110615ad957615ad96199e9565b60200260200101819052506040518060400160405280600f81526020017f2d2d6275696c64496e666f46696c650000000000000000000000000000000000815250828280615b2690619b56565b935060ff1681518110615b3b57615b3b6199e9565b602002602001018190525086828280615b5390619b56565b935060ff1681518110615b6857615b686199e9565b6020908102919091010152855115615c8f5760408051808201909152601581527f2d2d636f6e7374727563746f7242797465636f6465000000000000000000000060208201528282615bb981619b56565b935060ff1681518110615bce57615bce6199e9565b60209081029190910101526040517f71aad10d0000000000000000000000000000000000000000000000000000000081526001600160a01b038416906371aad10d90615c1e908990600401619457565b600060405180830381865afa158015615c3b573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052615c6391908101906196a8565b8282615c6e81619b56565b935060ff1681518110615c8357615c836199e9565b60200260200101819052505b846020015115615d5f5760408051808201909152601281527f2d2d766572696679536f75726365436f6465000000000000000000000000000060208201528282615cd881619b56565b935060ff1681518110615ced57615ced6199e9565b60200260200101819052506040518060400160405280600581526020017f66616c7365000000000000000000000000000000000000000000000000000000815250828280615d3a90619b56565b935060ff1681518110615d4f57615d4f6199e9565b6020026020010181905250615f26565b615d9761563c8660a0015160408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b615e2a5760408051808201909152600d81527f2d2d6c6963656e7365547970650000000000000000000000000000000000000060208201528282615dda81619b56565b935060ff1681518110615def57615def6199e9565b60200260200101819052508460a00151604051602001615e0f9190619a18565b604051602081830303815290604052828280615d3a90619b56565b8460c00151158015615e6d575060408089015181518083018352600080825260209182015282518084019093528151835290810190820152615e6b90511590565b155b15615f265760408051808201909152600d81527f2d2d6c6963656e7365547970650000000000000000000000000000000000000060208201528282615eb181619b56565b935060ff1681518110615ec657615ec66199e9565b6020026020010181905250615eda886170bc565b604051602001615eea9190619a18565b604051602081830303815290604052828280615f0590619b56565b935060ff1681518110615f1a57615f1a6199e9565b60200260200101819052505b60408086015181518083018352600080825260209182015282518084019093528151835290810190820152615f5a90511590565b615fef5760408051808201909152600b81527f2d2d72656c61796572496400000000000000000000000000000000000000000060208201528282615f9d81619b56565b935060ff1681518110615fb257615fb26199e9565b60200260200101819052508460400151828280615fce90619b56565b935060ff1681518110615fe357615fe36199e9565b60200260200101819052505b6060850151156161105760408051808201909152600681527f2d2d73616c7400000000000000000000000000000000000000000000000000006020820152828261603881619b56565b935060ff168151811061604d5761604d6199e9565b602090810291909101015260608501516040517fb11a19e800000000000000000000000000000000000000000000000000000000815260048101919091526001600160a01b0384169063b11a19e890602401600060405180830381865afa1580156160bc573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526160e491908101906196a8565b82826160ef81619b56565b935060ff1681518110616104576161046199e9565b60200260200101819052505b60e085015151156161b75760408051808201909152600a81527f2d2d6761734c696d6974000000000000000000000000000000000000000000006020820152828261615a81619b56565b935060ff168151811061616f5761616f6199e9565b602002602001018190525061618b8560e001516000015161701c565b828261619681619b56565b935060ff16815181106161ab576161ab6199e9565b60200260200101819052505b60e085015160200151156162615760408051808201909152600a81527f2d2d6761735072696365000000000000000000000000000000000000000000006020820152828261620481619b56565b935060ff1681518110616219576162196199e9565b60200260200101819052506162358560e001516020015161701c565b828261624081619b56565b935060ff1681518110616255576162556199e9565b60200260200101819052505b60e0850151604001511561630b5760408051808201909152600e81527f2d2d6d6178466565506572476173000000000000000000000000000000000000602082015282826162ae81619b56565b935060ff16815181106162c3576162c36199e9565b60200260200101819052506162df8560e001516040015161701c565b82826162ea81619b56565b935060ff16815181106162ff576162ff6199e9565b60200260200101819052505b60e085015160600151156163b55760408051808201909152601681527f2d2d6d61785072696f72697479466565506572476173000000000000000000006020820152828261635881619b56565b935060ff168151811061636d5761636d6199e9565b60200260200101819052506163898560e001516060015161701c565b828261639481619b56565b935060ff16815181106163a9576163a96199e9565b60200260200101819052505b60008160ff1667ffffffffffffffff8111156163d3576163d361946a565b60405190808252806020026020018201604052801561640657816020015b60608152602001906001900390816163f15790505b50905060005b8260ff168160ff16101561645f57838160ff168151811061642f5761642f6199e9565b6020026020010151828260ff168151811061644c5761644c6199e9565b602090810291909101015260010161640c565b5093505050505b949350505050565b6164956040518060600160405280600060030b815260200160608152602001606081525090565b60408051808201825260048082527f6261736800000000000000000000000000000000000000000000000000000000602083015291517fd145736c000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d92600091849163d145736c9161651b91869101619be0565b600060405180830381865afa158015616538573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261656091908101906196a8565b9050600061656e8683617bab565b90506000846001600160a01b031663f45c1ce7836040518263ffffffff1660e01b815260040161659e9190618ef5565b6000604051808303816000875af11580156165bd573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526165e59190810190619c27565b805190915060030b158015906165fe5750602081015151155b801561660d5750604081015151155b156155e75781600081518110616625576166256199e9565b6020026020010151604051602001614c3c9190619cdd565b606060006166728560408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6040805180820182526000808252602091820152815180830190925286518252808701908201529091506166a99082905b90617d00565b15616806576000616726826167208461671a6166ec8a60408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6040805180820182526000808252602091820152815180830190925282518252918201519181019190915290565b90617d27565b90617d89565b604080518082018252600181527f0a000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015290915061678a908290617d00565b156167f457604080518082018252600181527f0a00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526167f1905b8290617e0e565b90505b6167fd81617e34565b92505050614b69565b821561681f578484604051602001614c3c929190619ec9565b5050604080516020810190915260008152614b69565b509392505050565b6000808251602084016000f09392505050565b8160a001511561685f57505050565b600061686c848484617e9d565b905060006168798261646e565b602081015181519192509060030b1580156169155750604080518082018252600781527f535543434553530000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616915906040805180820182526000808252602091820152815180830190925284518252808501908201526166a3565b1561692257505050505050565b60408201515115616942578160400151604051602001614c3c9190619f70565b80604051602001614c3c9190619fce565b606060006169888360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600481527f2e736f6c00000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201529091506169ed905b8290616fbb565b15616a5c57604080518082018252600481527f2e736f6c0000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152614b6990616a57908390618438565b617e34565b604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616abe905b82906184c2565b600103616b8b57604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616b24906167ea565b50604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152614b6990616a57905b8390617e0e565b604080518082018252600581527f2e6a736f6e00000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616bea906169e6565b15616d2157604080518082018252600181527f2f00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820181905284518086019095529251845283015290616c5290839061855c565b905060008160018351616c659190619249565b81518110616c7557616c756199e9565b60200260200101519050616d18616a57616ceb6040518060400160405280600581526020017f2e6a736f6e00000000000000000000000000000000000000000000000000000081525060408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b60408051808201825260008082526020918201528151808301909252855182528086019082015290618438565b95945050505050565b82604051602001614c3c919061a039565b50919050565b60606000616d6d8360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600481527f2e736f6c0000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152909150616dcf906169e6565b15616ddd57614b6981617e34565b604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616e3c90616ab7565b600103616ea657604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152614b6990616a5790616b84565b604080518082018252600581527f2e6a736f6e00000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616f05906169e6565b15616d2157604080518082018252600181527f2f00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820181905284518086019095529251845283015290616f6d90839061855c565b9050600181511115616fa9578060028251616f889190619249565b81518110616f9857616f986199e9565b602002602001015192505050919050565b5082604051602001614c3c919061a039565b805182516000911115616fd057506000614a70565b81518351602085015160009291616fe69161925c565b616ff09190619249565b905082602001518103617007576001915050614a70565b82516020840151819020912014905092915050565b6060600061702983618601565b600101905060008167ffffffffffffffff8111156170495761704961946a565b6040519080825280601f01601f191660200182016040528015617073576020820181803683370190505b5090508181016020015b600019017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a850494508461707d57509392505050565b604081810151815180830183526000808252602091820181905283518085018552835181529282018383015283518085018552600a81527f554e4c4943454e5345440000000000000000000000000000000000000000000081840190815285518087018752838152840192909252845180860190955251845290830152606091617148905b82906186e3565b1561718857505060408051808201909152600481527f4e6f6e65000000000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600981527f556e6c6963656e73650000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526171e790617141565b1561722757505060408051808201909152600981527f556e6c6963656e736500000000000000000000000000000000000000000000006020820152919050565b604080518082018252600381527f4d495400000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261728690617141565b156172c657505060408051808201909152600381527f4d495400000000000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f47504c2d322e302d6f6e6c7900000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261732590617141565b8061738a5750604080518082018252601081527f47504c2d322e302d6f722d6c61746572000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261738a90617141565b156173ca57505060408051808201909152600981527f474e552047504c763200000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f47504c2d332e302d6f6e6c7900000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261742990617141565b8061748e5750604080518082018252601081527f47504c2d332e302d6f722d6c61746572000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261748e90617141565b156174ce57505060408051808201909152600981527f474e552047504c763300000000000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4c47504c2d322e312d6f6e6c79000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261752d90617141565b806175925750604080518082018252601181527f4c47504c2d322e312d6f722d6c617465720000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261759290617141565b156175d257505060408051808201909152600c81527f474e55204c47504c76322e3100000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4c47504c2d332e302d6f6e6c79000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261763190617141565b806176965750604080518082018252601181527f4c47504c2d332e302d6f722d6c617465720000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261769690617141565b156176d657505060408051808201909152600a81527f474e55204c47504c7633000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f4253442d322d436c6175736500000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261773590617141565b1561777557505060408051808201909152600c81527f4253442d322d436c6175736500000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f4253442d332d436c617573650000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526177d490617141565b1561781457505060408051808201909152600c81527f4253442d332d436c6175736500000000000000000000000000000000000000006020820152919050565b604080518082018252600781527f4d504c2d322e30000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261787390617141565b156178b357505060408051808201909152600781527f4d504c2d322e30000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600781527f4f534c2d332e30000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261791290617141565b1561795257505060408051808201909152600781527f4f534c2d332e30000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600a81527f4170616368652d322e3000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526179b190617141565b156179f157505060408051808201909152600a81527f4170616368652d322e30000000000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4147504c2d332e302d6f6e6c790000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617a5090617141565b80617ab55750604080518082018252601181527f4147504c2d332e302d6f722d6c6174657200000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617ab590617141565b15617af557505060408051808201909152600a81527f474e55204147504c7633000000000000000000000000000000000000000000006020820152919050565b604080518082018252600881527f4255534c2d312e3100000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617b5490617141565b15617b9457505060408051808201909152600781527f42534c20312e31000000000000000000000000000000000000000000000000006020820152919050565b60408084015184519151614c3c929060200161a117565b60608060005b8451811015617c365781858281518110617bcd57617bcd6199e9565b6020026020010151604051602001617be6929190619587565b604051602081830303815290604052915060018551617c059190619249565b8114617c2e5781604051602001617c1c919061a280565b60405160208183030381529060405291505b600101617bb1565b5060408051600380825260808201909252600091816020015b6060815260200190600190039081617c4f5790505090508381600081518110617c7a57617c7a6199e9565b60200260200101819052506040518060400160405280600281526020017f2d6300000000000000000000000000000000000000000000000000000000000081525081600181518110617cce57617cce6199e9565b60200260200101819052508181600281518110617ced57617ced6199e9565b6020908102919091010152949350505050565b6020808301518351835192840151600093617d1e92918491906186f7565b14159392505050565b60408051808201909152600080825260208201526000617d598460000151856020015185600001518660200151618808565b9050836020015181617d6b9190619249565b84518590617d7a908390619249565b90525060208401525090919050565b6040805180820190915260008082526020820152815183511015617dae575081614a70565b6020808301519084015160019114617dd55750815160208481015190840151829020919020145b8015617e0657825184518590617dec908390619249565b9052508251602085018051617e0290839061925c565b9052505b509192915050565b6040805180820190915260008082526020820152617e2d838383618928565b5092915050565b60606000826000015167ffffffffffffffff811115617e5557617e5561946a565b6040519080825280601f01601f191660200182016040528015617e7f576020820181803683370190505b5090506000602082019050617e2d81856020015186600001516189d3565b60606000617ea9614e66565b6040805160ff808252612000820190925291925060009190816020015b6060815260200190600190039081617ec657905050905060006040518060400160405280600381526020017f6e70780000000000000000000000000000000000000000000000000000000000815250828280617f2190619b56565b935060ff1681518110617f3657617f366199e9565b60200260200101819052506040518060400160405280600781526020017f5e312e33322e3300000000000000000000000000000000000000000000000000815250604051602001617f87919061a2c1565b604051602081830303815290604052828280617fa290619b56565b935060ff1681518110617fb757617fb76199e9565b60200260200101819052506040518060400160405280600881526020017f76616c696461746500000000000000000000000000000000000000000000000081525082828061800490619b56565b935060ff1681518110618019576180196199e9565b6020026020010181905250826040516020016180359190619a84565b60405160208183030381529060405282828061805090619b56565b935060ff1681518110618065576180656199e9565b60200260200101819052506040518060400160405280600a81526020017f2d2d636f6e7472616374000000000000000000000000000000000000000000008152508282806180b290619b56565b935060ff16815181106180c7576180c76199e9565b60200260200101819052506180dc8784618a4d565b82826180e781619b56565b935060ff16815181106180fc576180fc6199e9565b6020908102919091010152855151156181a85760408051808201909152600b81527f2d2d7265666572656e63650000000000000000000000000000000000000000006020820152828261814e81619b56565b935060ff1681518110618163576181636199e9565b602002602001018190525061817c866000015184618a4d565b828261818781619b56565b935060ff168151811061819c5761819c6199e9565b60200260200101819052505b8560800151156182165760408051808201909152601881527f2d2d756e73616665536b697053746f72616765436865636b0000000000000000602082015282826181f181619b56565b935060ff1681518110618206576182066199e9565b602002602001018190525061827c565b841561827c5760408051808201909152601281527f2d2d726571756972655265666572656e636500000000000000000000000000006020820152828261825b81619b56565b935060ff1681518110618270576182706199e9565b60200260200101819052505b604086015151156183185760408051808201909152600d81527f2d2d756e73616665416c6c6f7700000000000000000000000000000000000000602082015282826182c681619b56565b935060ff16815181106182db576182db6199e9565b602002602001018190525085604001518282806182f790619b56565b935060ff168151811061830c5761830c6199e9565b60200260200101819052505b8560600151156183825760408051808201909152601481527f2d2d756e73616665416c6c6f7752656e616d65730000000000000000000000006020820152828261836181619b56565b935060ff1681518110618376576183766199e9565b60200260200101819052505b60008160ff1667ffffffffffffffff8111156183a0576183a061946a565b6040519080825280602002602001820160405280156183d357816020015b60608152602001906001900390816183be5790505b50905060005b8260ff168160ff16101561842c57838160ff16815181106183fc576183fc6199e9565b6020026020010151828260ff1681518110618419576184196199e9565b60209081029190910101526001016183d9565b50979650505050505050565b604080518082019091526000808252602082015281518351101561845d575081614a70565b815183516020850151600092916184739161925c565b61847d9190619249565b6020840151909150600190821461849e575082516020840151819020908220145b80156184b9578351855186906184b5908390619249565b9052505b50929392505050565b60008082600001516184e68560000151866020015186600001518760200151618808565b6184f0919061925c565b90505b83516020850151618504919061925c565b8111617e2d57816185148161a306565b925050826000015161854b85602001518361852f9190619249565b865161853b9190619249565b8386600001518760200151618808565b618555919061925c565b90506184f3565b6060600061856a84846184c2565b61857590600161925c565b67ffffffffffffffff81111561858d5761858d61946a565b6040519080825280602002602001820160405280156185c057816020015b60608152602001906001900390816185ab5790505b50905060005b8151811015616835576185dc616a578686617e0e565b8282815181106185ee576185ee6199e9565b60209081029190910101526001016185c6565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000831061864a577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310618676576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc10000831061869457662386f26fc10000830492506010015b6305f5e10083106186ac576305f5e100830492506008015b61271083106186c057612710830492506004015b606483106186d2576064830492506002015b600a8310614a705760010192915050565b60006186ef8383618a8d565b159392505050565b6000808584116187fe57602084116187aa576000841561874257600161871e866020619249565b61872990600861a320565b61873490600261a41e565b61873e9190619249565b1990505b8351811685618751898961925c565b61875b9190619249565b805190935082165b8181146187955787841161877d5787945050505050616466565b836187878161a42a565b945050828451169050618763565b61879f878561925c565b945050505050616466565b8383206187b78588619249565b6187c1908761925c565b91505b8582106187fc578482208082036187e9576187df868461925c565b9350505050616466565b6187f4600184619249565b9250506187c4565b505b5092949350505050565b6000838186851161891357602085116188c25760008515618854576001618830876020619249565b61883b90600861a320565b61884690600261a41e565b6188509190619249565b1990505b845181166000876188658b8b61925c565b61886f9190619249565b855190915083165b8281146188b45781861061889c5761888f8b8b61925c565b9650505050505050616466565b856188a68161a306565b965050838651169050618877565b859650505050505050616466565b508383206000905b6188d48689619249565b8211618911578583208082036188f05783945050505050616466565b6188fb60018561925c565b93505081806189099061a306565b9250506188ca565b505b61891d878761925c565b979650505050505050565b6040805180820190915260008082526020820152600061895a8560000151866020015186600001518760200151618808565b6020808701805191860191909152519091506189769082619249565b835284516020860151618989919061925c565b810361899857600085526189ca565b835183516189a6919061925c565b855186906189b5908390619249565b90525083516189c4908261925c565b60208601525b50909392505050565b60208110618a0b57815183526189ea60208461925c565b92506189f760208361925c565b9150618a04602082619249565b90506189d3565b6000198115618a3a576001618a21836020619249565b618a2d9061010061a41e565b618a379190619249565b90505b9151835183169219169190911790915250565b60606000618a5b8484614f39565b8051602080830151604051939450618a759390910161a441565b60405160208183030381529060405291505092915050565b8151815160009190811115618aa0575081515b6020808501519084015160005b83811015618b595782518251808214618b29576000196020871015618b0857600184618ada896020619249565b618ae4919061925c565b618aef90600861a320565b618afa90600261a41e565b618b049190619249565b1990505b8181168382168181039114618b26579750614a709650505050505050565b50505b618b3460208661925c565b9450618b4160208561925c565b93505050602081618b52919061925c565b9050618aad565b50845186516155e7919061a499565b610b678061a4ba83390190565b61053f8061b02183390190565b61106f8061b56083390190565b611bb98061c5cf83390190565b6040518060e00160405280606081526020016060815260200160608152602001600015158152602001600015158152602001600015158152602001618bdf618be4565b905290565b60405180610100016040528060001515815260200160001515815260200160608152602001600080191681526020016060815260200160608152602001600015158152602001618bdf6040518060800160405280600081526020016000815260200160008152602001600081525090565b602080825282518282018190526000918401906040840190835b81811015618c965783516001600160a01b0316835260209384019390920191600101618c6f565b509095945050505050565b60005b83811015618cbc578181015183820152602001618ca4565b50506000910152565b60008151808452618cdd816020860160208601618ca1565b601f01601f19169290920160200192915050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015618ded577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452815180516001600160a01b03168652602090810151604082880181905281519088018190529101906060600582901b88018101919088019060005b81811015618dd3577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa08a8503018352618dbd848651618cc5565b6020958601959094509290920191600101618d83565b509197505050602094850194929092019150600101618d19565b50929695505050505050565b600081518084526020840193506020830160005b82811015618e4d5781517fffffffff0000000000000000000000000000000000000000000000000000000016865260209586019590910190600101618e0d565b5093949350505050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015618ded577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08786030184528151805160408752618ec36040880182618cc5565b9050602082015191508681036020880152618ede8183618df9565b965050506020938401939190910190600101618e7f565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015618ded577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452618f57858351618cc5565b94506020938401939190910190600101618f1d565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015618ded577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc087860301845281516001600160a01b0381511686526020810151905060406020870152618fed6040870182618df9565b9550506020938401939190910190600101618f94565b60006020828403121561901557600080fd5b81516001600160a01b0381168114614b6957600080fd5b610100815260056101008201527f544f4b454e000000000000000000000000000000000000000000000000000000610120820152610140602082015260036101408201527f544b4e000000000000000000000000000000000000000000000000000000000061016082015260006101808201905060ff88166040830152866060830152600386106190e6577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b8560808301528460a083015261910760c08301856001600160a01b03169052565b6001600160a01b03831660e0830152979650505050505050565b60006020828403121561913357600080fd5b81518015158114614b6957600080fd5b60006020828403121561915557600080fd5b5051919050565b60808152600061916f6080830187618cc5565b8560208401526001600160a01b0385166040840152828103606084015261891d8185618cc5565b60c0815260006191a960c0830189618cc5565b6001600160a01b038816602084015286604084015285606084015284608084015282810360a08401526191dc8185618cc5565b9998505050505050505050565b6080815260006191fc6080830187618cc5565b856020840152846040840152828103606084015261891d8185618cc5565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b81810381811115614a7057614a7061921a565b80820180821115614a7057614a7061921a565b6060815260006192826060830186618cc5565b60208301949094525060400152919050565b600181811c908216806192a857607f821691505b602082108103616d32577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6060815260006192f46060830186618cc5565b84602084015282810360408401526155e78185618cc5565b60608152600061931f6060830186618cc5565b90508360208301526001600160a01b0383166040830152949350505050565b6040815260006193516040830185618cc5565b8281036020840152614b658185618cc5565b60c08152600061937660c0830188618cc5565b6001600160a01b038716602084015285604084015284606084015283608084015282810360a084015260008152602081019150509695505050505050565b6001600160a01b03831681526040602082015260006164666040830184618cc5565b7f4661696c656420746f206465706c6f7920636f6e74726163742000000000000081526000835161940e81601a850160208801618ca1565b7f3a20000000000000000000000000000000000000000000000000000000000000601a91840191820152835161944b81601c840160208801618ca1565b01601c01949350505050565b602081526000614b696020830184618cc5565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040516060810167ffffffffffffffff811182821017156194bc576194bc61946a565b60405290565b60008067ffffffffffffffff8411156194dd576194dd61946a565b50604051601f19601f85018116603f0116810181811067ffffffffffffffff8211171561950c5761950c61946a565b60405283815290508082840185101561952457600080fd5b616835846020830185618ca1565b600082601f83011261954357600080fd5b614b69838351602085016194c2565b60006020828403121561956457600080fd5b815167ffffffffffffffff81111561957b57600080fd5b614a6c84828501619532565b60008351619599818460208801618ca1565b8351908301906195ad818360208801618ca1565b01949350505050565b7f4661696c656420746f206465706c6f7920636f6e7472616374200000000000008152600083516195ee81601a850160208801618ca1565b7f207573696e6720636f6e7374727563746f722064617461202200000000000000601a91840191820152835161962b816033840160208801618ca1565b7f220000000000000000000000000000000000000000000000000000000000000060339290910191820152603401949350505050565b60408152600b60408201527f464f554e4452595f4f55540000000000000000000000000000000000000000006060820152608060208201526000614b696080830184618cc5565b6000602082840312156196ba57600080fd5b815167ffffffffffffffff8111156196d157600080fd5b8201601f810184136196e257600080fd5b614a6c848251602084016194c2565b60008551619703818460208a01618ca1565b7f2f00000000000000000000000000000000000000000000000000000000000000908301908152855161973d816001840160208a01618ca1565b7f2f0000000000000000000000000000000000000000000000000000000000000060019290910191820152845161977b816002840160208901618ca1565b6001818301019150507f2f00000000000000000000000000000000000000000000000000000000000000600182015283516197bd816002840160208801618ca1565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600292909101918201526007019695505050505050565b6040815260006198086040830184618cc5565b8281036020840152600481527f2e6173740000000000000000000000000000000000000000000000000000000060208201526040810191505092915050565b7f436f756c64206e6f742066696e642041535420696e206172746966616374200081526000825161987f81601f850160208701618ca1565b7f2e205365742060617374203d20747275656020696e20666f756e6472792e746f601f9390910192830152507f6d6c000000000000000000000000000000000000000000000000000000000000603f820152604101919050565b6040815260006198ec6040830184618cc5565b8281036020840152601181527f2e6173742e6162736f6c7574655061746800000000000000000000000000000060208201526040810191505092915050565b60408152600061993e6040830184618cc5565b8281036020840152600c81527f2e6173742e6c6963656e7365000000000000000000000000000000000000000060208201526040810191505092915050565b7f2e6d657461646174612e736f75726365732e5b270000000000000000000000008152600082516199b5816014850160208701618ca1565b7f275d2e6b656363616b32353600000000000000000000000000000000000000006014939091019283015250602001919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f2200000000000000000000000000000000000000000000000000000000000000815260008251619a50816001850160208701618ca1565b7f22000000000000000000000000000000000000000000000000000000000000006001939091019283015250600201919050565b60008251619a96818460208701618ca1565b7f2f6275696c642d696e666f000000000000000000000000000000000000000000920191825250600b01919050565b7f436f756c64206e6f742066696e64206275696c642d696e666f2066696c65207781527f697468206d61746368696e6720736f7572636520636f6465206861736820666f60208201527f7220636f6e747261637420000000000000000000000000000000000000000000604082015260008251619b4981604b850160208701618ca1565b91909101604b0192915050565b600060ff821660ff8103619b6c57619b6c61921a565b60010192915050565b7f406f70656e7a657070656c696e2f646566656e6465722d6465706c6f792d636c81527f69656e742d636c69400000000000000000000000000000000000000000000000602082015260008251619bd3816029850160208701618ca1565b9190910160290192915050565b60408152601660408201527f4f50454e5a455050454c494e5f424153485f50415448000000000000000000006060820152608060208201526000614b696080830184618cc5565b600060208284031215619c3957600080fd5b815167ffffffffffffffff811115619c5057600080fd5b820160608185031215619c6257600080fd5b619c6a619499565b81518060030b8114619c7b57600080fd5b8152602082015167ffffffffffffffff811115619c9757600080fd5b619ca386828501619532565b602083015250604082015167ffffffffffffffff811115619cc357600080fd5b619ccf86828501619532565b604083015250949350505050565b7f4661696c656420746f2072756e206261736820636f6d6d616e6420776974682081527f2200000000000000000000000000000000000000000000000000000000000000602082015260008251619d3b816021850160208701618ca1565b7f222e20496620796f7520617265207573696e672057696e646f77732c2073657460219390910192830152507f20746865204f50454e5a455050454c494e5f424153485f5041544820656e766960418201527f726f6e6d656e74207661726961626c6520746f207468652066756c6c7920717560618201527f616c69666965642070617468206f66207468652062617368206578656375746160818201527f626c652e20466f72206578616d706c652c20696620796f75206172652075736960a18201527f6e672047697420666f722057696e646f77732c206164642074686520666f6c6c60c18201527f6f77696e67206c696e6520696e20746865202e656e762066696c65206f66207960e18201527f6f75722070726f6a65637420287573696e6720666f727761726420736c6173686101018201527f6573293a0a4f50454e5a455050454c494e5f424153485f504154483d22433a2f6101218201527f50726f6772616d2046696c65732f4769742f62696e2f6261736822000000000061014182015261015c01919050565b7f4661696c656420746f2066696e64206c696e652077697468207072656669782081527f2700000000000000000000000000000000000000000000000000000000000000602082015260008351619f27816021850160208801618ca1565b7f2720696e206f75747075743a20000000000000000000000000000000000000006021918401918201528351619f6481602e840160208801618ca1565b01602e01949350505050565b7f4661696c656420746f2072756e2075706772616465207361666574792076616c81527f69646174696f6e3a200000000000000000000000000000000000000000000000602082015260008251619bd3816029850160208701618ca1565b7f55706772616465207361666574792076616c69646174696f6e206661696c656481527f3a0a00000000000000000000000000000000000000000000000000000000000060208201526000825161a02c816022850160208701618ca1565b9190910160220192915050565b7f436f6e7472616374206e616d652000000000000000000000000000000000000081526000825161a07181600e850160208701618ca1565b7f206d75737420626520696e2074686520666f726d6174204d79436f6e74726163600e9390910192830152507f742e736f6c3a4d79436f6e7472616374206f72204d79436f6e74726163742e73602e8201527f6f6c206f72206f75742f4d79436f6e74726163742e736f6c2f4d79436f6e7472604e8201527f6163742e6a736f6e000000000000000000000000000000000000000000000000606e820152607601919050565b7f53504458206c6963656e7365206964656e74696669657220000000000000000081526000835161a14f816018850160208801618ca1565b7f20696e2000000000000000000000000000000000000000000000000000000000601891840191820152835161a18c81601c840160208801618ca1565b7f20646f6573206e6f74206c6f6f6b206c696b65206120737570706f7274656420601c92909101918201527f6c6963656e736520666f7220626c6f636b206578706c6f726572207665726966603c8201527f69636174696f6e2e205573652074686520606c6963656e73655479706560206f605c8201527f7074696f6e20746f20737065636966792061206c6963656e736520747970652c607c8201527f206f7220736574207468652060736b69704c6963656e73655479706560206f70609c8201527f74696f6e20746f2060747275656020746f20736b69702e00000000000000000060bc82015260d301949350505050565b6000825161a292818460208701618ca1565b7f2000000000000000000000000000000000000000000000000000000000000000920191825250600101919050565b7f406f70656e7a657070656c696e2f75706772616465732d636f7265400000000081526000825161a2f981601c850160208701618ca1565b91909101601c0192915050565b6000600019820361a3195761a31961921a565b5060010190565b8082028115828204841417614a7057614a7061921a565b6001815b600184111561a3725780850481111561a3565761a35661921a565b600184161561a36457908102905b60019390931c92800261a33b565b935093915050565b60008261a38957506001614a70565b8161a39657506000614a70565b816001811461a3ac576002811461a3b65761a3d2565b6001915050614a70565b60ff84111561a3c75761a3c761921a565b50506001821b614a70565b5060208310610133831016604e8410600b841016171561a3f5575081810a614a70565b61a402600019848461a337565b806000190482111561a4165761a41661921a565b029392505050565b6000614b69838361a37a565b60008161a4395761a43961921a565b506000190190565b6000835161a453818460208801618ca1565b7f3a00000000000000000000000000000000000000000000000000000000000000908301908152835161a48d816001840160208801618ca1565b01600101949350505050565b8181036000831280158383131683831282161715617e2d57617e2d61921a56fe60c0604052600d60809081526c2bb930b83832b21022ba3432b960991b60a05260009061002c9082610114565b506040805180820190915260048152630ae8aa8960e31b60208201526001906100559082610114565b506002805460ff1916601217905534801561006f57600080fd5b506101d2565b634e487b7160e01b600052604160045260246000fd5b600181811c9082168061009f57607f821691505b6020821081036100bf57634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111561010f57806000526020600020601f840160051c810160208510156100ec5750805b601f840160051c820191505b8181101561010c57600081556001016100f8565b50505b505050565b81516001600160401b0381111561012d5761012d610075565b6101418161013b845461008b565b846100c5565b6020601f821160018114610175576000831561015d5750848201515b600019600385901b1c1916600184901b17845561010c565b600084815260208120601f198516915b828110156101a55787850151825560209485019460019092019101610185565b50848210156101c35786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b610986806101e16000396000f3fe6080604052600436106100c05760003560e01c8063313ce56711610074578063a9059cbb1161004e578063a9059cbb146101fa578063d0e30db01461021a578063dd62ed3e1461022257600080fd5b8063313ce5671461018c57806370a08231146101b857806395d89b41146101e557600080fd5b806318160ddd116100a557806318160ddd1461012f57806323b872dd1461014c5780632e1a7d4d1461016c57600080fd5b806306fdde03146100d4578063095ea7b3146100ff57600080fd5b366100cf576100cd61025a565b005b600080fd5b3480156100e057600080fd5b506100e96102b5565b6040516100f69190610745565b60405180910390f35b34801561010b57600080fd5b5061011f61011a3660046107da565b610343565b60405190151581526020016100f6565b34801561013b57600080fd5b50475b6040519081526020016100f6565b34801561015857600080fd5b5061011f610167366004610804565b6103bd565b34801561017857600080fd5b506100cd610187366004610841565b610647565b34801561019857600080fd5b506002546101a69060ff1681565b60405160ff90911681526020016100f6565b3480156101c457600080fd5b5061013e6101d336600461085a565b60036020526000908152604090205481565b3480156101f157600080fd5b506100e9610724565b34801561020657600080fd5b5061011f6102153660046107da565b610731565b6100cd61025a565b34801561022e57600080fd5b5061013e61023d366004610875565b600460209081526000928352604080842090915290825290205481565b33600090815260036020526040812080543492906102799084906108d7565b909155505060405134815233907fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c9060200160405180910390a2565b600080546102c2906108ea565b80601f01602080910402602001604051908101604052809291908181526020018280546102ee906108ea565b801561033b5780601f106103105761010080835404028352916020019161033b565b820191906000526020600020905b81548152906001019060200180831161031e57829003601f168201915b505050505081565b33600081815260046020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925906103ab9086815260200190565b60405180910390a35060015b92915050565b73ffffffffffffffffffffffffffffffffffffffff831660009081526003602052604081205482111561042b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600060248201526044015b60405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff841633148015906104a1575073ffffffffffffffffffffffffffffffffffffffff841660009081526004602090815260408083203384529091529020547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff14155b156105605773ffffffffffffffffffffffffffffffffffffffff8416600090815260046020908152604080832033845290915290205482111561051a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526020600482015260006024820152604401610422565b73ffffffffffffffffffffffffffffffffffffffff841660009081526004602090815260408083203384529091528120805484929061055a90849061093d565b90915550505b73ffffffffffffffffffffffffffffffffffffffff84166000908152600360205260408120805484929061059590849061093d565b909155505073ffffffffffffffffffffffffffffffffffffffff8316600090815260036020526040812080548492906105cf9084906108d7565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161063591815260200190565b60405180910390a35060019392505050565b3360009081526003602052604090205481111561069a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526020600482015260006024820152604401610422565b33600090815260036020526040812080548392906106b990849061093d565b9091555050604051339082156108fc029083906000818181858888f193505050501580156106eb573d6000803e3d6000fd5b5060405181815233907f7fcf532c15f0a6db0bd6d0e038bea71d30d808c7d98cb3bf7268a95bf5081b659060200160405180910390a250565b600180546102c2906108ea565b600061073e3384846103bd565b9392505050565b602081526000825180602084015260005b818110156107735760208186018101516040868401015201610756565b5060006040828501015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011684010191505092915050565b803573ffffffffffffffffffffffffffffffffffffffff811681146107d557600080fd5b919050565b600080604083850312156107ed57600080fd5b6107f6836107b1565b946020939093013593505050565b60008060006060848603121561081957600080fd5b610822846107b1565b9250610830602085016107b1565b929592945050506040919091013590565b60006020828403121561085357600080fd5b5035919050565b60006020828403121561086c57600080fd5b61073e826107b1565b6000806040838503121561088857600080fd5b610891836107b1565b915061089f602084016107b1565b90509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b808201808211156103b7576103b76108a8565b600181811c908216806108fe57607f821691505b602082108103610937577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b818103818111156103b7576103b76108a856fea264697066735822122008d7fc4e09519c5dd9f356b03596f6829a151d0bc7682533f9ceab4e459f5ee264736f6c634300081a00336080604052348015600f57600080fd5b506105208061001f6000396000f3fe60806040526004361061002a5760003560e01c806369582bee14610033578063de43156e1461005357005b3661003157005b005b34801561003f57600080fd5b5061003161004e3660046101ba565b610073565b34801561005f57600080fd5b5061003161006e3660046101ba565b6100ee565b6060811561008a5761008782840184610273565b90505b7ffdc887992b033668833927e252058e468fac0b6bd196d520f09c61b740e999486100b58780610369565b6100c560408a0160208b016103ce565b896040013533866040516100de969594939291906103f0565b60405180910390a1505050505050565b606081156101055761010282840184610273565b90505b7fcdc8ee677dc5ebe680fb18cebda5e26ba5ea1f0ba504a47e2a9a2ecb476dc98e6100b58780610369565b60006060828403121561014257600080fd5b50919050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461016c57600080fd5b919050565b60008083601f84011261018357600080fd5b50813567ffffffffffffffff81111561019b57600080fd5b6020830191508360208285010111156101b357600080fd5b9250929050565b6000806000806000608086880312156101d257600080fd5b853567ffffffffffffffff8111156101e957600080fd5b6101f588828901610130565b95505061020460208701610148565b935060408601359250606086013567ffffffffffffffff81111561022757600080fd5b61023388828901610171565b969995985093965092949392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60006020828403121561028557600080fd5b813567ffffffffffffffff81111561029c57600080fd5b8201601f810184136102ad57600080fd5b803567ffffffffffffffff8111156102c7576102c7610244565b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8501160116810181811067ffffffffffffffff8211171561033357610333610244565b60405281815282820160200186101561034b57600080fd5b81602084016020830137600091810160200191909152949350505050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261039e57600080fd5b83018035915067ffffffffffffffff8211156103b957600080fd5b6020019150368190038213156101b357600080fd5b6000602082840312156103e057600080fd5b6103e982610148565b9392505050565b60a081528560a0820152858760c0830137600060c0878301015260007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f880116820173ffffffffffffffffffffffffffffffffffffffff8716602084015285604084015273ffffffffffffffffffffffffffffffffffffffff8516606084015260c083820301608084015283518060c083015260005b818110156104a557602081870181015184830160e0015201610488565b50600060e0838301810191909152601f9091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016909101019897505050505050505056fea2646970667358221220b5ac4aa023957e7bc2aaba2c22840cdbf052fb679bd912caa0c8614a69afc7b164736f6c634300081a003360c060405234801561001057600080fd5b5060405161106f38038061106f83398101604081905261002f916100db565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461006357604051632b2add3d60e01b815260040160405180910390fd5b600380546001600160a01b0319166001600160a01b0385811691909117909155828116608052811660a0526040517f80699e81136d69cb8367ad52a994e25c722a86da654b561d0c14b61a777e7ac590600090a150505061011e565b80516001600160a01b03811681146100d657600080fd5b919050565b6000806000606084860312156100f057600080fd5b6100f9846100bf565b9250610107602085016100bf565b9150610115604085016100bf565b90509250925092565b60805160a051610f2561014a60003960006101e50152600081816102b9015261045b0152610f256000f3fe608060405234801561001057600080fd5b50600436106100f55760003560e01c806397770dff11610097578063c63585cc11610066578063c63585cc14610273578063d7fd7afb14610286578063d936a012146102b4578063ee2815ba146102db57600080fd5b806397770dff1461021a578063a7cb05071461022d578063c39aca3714610240578063c62178ac1461025357600080fd5b8063513a9c05116100d3578063513a9c051461018a578063569541b9146101c0578063842da36d146101e057806391dd645f1461020757600080fd5b80630be15547146100fa5780631f0e251b1461015a5780633ce4a5bc1461016f575b600080fd5b610130610108366004610bd1565b60016020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b61016d610168366004610c13565b6102ee565b005b61013073735b14bb79463307aacbed86daf3322b1e6226ab81565b610130610198366004610bd1565b60026020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b6003546101309073ffffffffffffffffffffffffffffffffffffffff1681565b6101307f000000000000000000000000000000000000000000000000000000000000000081565b61016d610215366004610c35565b610402565b61016d610228366004610c13565b610526565b61016d61023b366004610c61565b610633565b61016d61024e366004610c83565b6106ce565b6004546101309073ffffffffffffffffffffffffffffffffffffffff1681565b610130610281366004610d53565b6108cd565b6102a6610294366004610bd1565b60006020819052908152604090205481565b604051908152602001610151565b6101307f000000000000000000000000000000000000000000000000000000000000000081565b61016d6102e9366004610c35565b610a02565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461033b576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116610388576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600480547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527f3ade88e3922d64780e1bf4460d364c2970b69da813f9c0c07a1c187b5647636c906020015b60405180910390a150565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461044f576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600354600090610497907f00000000000000000000000000000000000000000000000000000000000000009073ffffffffffffffffffffffffffffffffffffffff16846108cd565b60008481526002602090815260409182902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff85169081179091558251878152918201529192507f0ecec485166da6139b13bb7e033e9446e2d35348e80ebf1180d4afe2dba1704e910160405180910390a1505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610573576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff81166105c0576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527fdba79d534382d1a8ae108e4c8ecb27c6ae42ab8b91d44eedf88bd329f3868d5e906020016103f7565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610680576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000828152602081815260409182902083905581518481529081018390527f49f492222906ac486c3c1401fa545626df1f0c0e5a77a05597ea2ed66af9850d91015b60405180910390a15050565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461071b576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff831673735b14bb79463307aacbed86daf3322b1e6226ab1480610768575073ffffffffffffffffffffffffffffffffffffffff831630145b1561079f576040517f82d5d76a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f47e7ef2400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152602482018690528616906347e7ef24906044016020604051808303816000875af1158015610814573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108389190610d96565b506040517fde43156e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84169063de43156e906108939089908990899088908890600401610e01565b600060405180830381600087803b1580156108ad57600080fd5b505af11580156108c1573d6000803e3d6000fd5b50505050505050505050565b60008060006108dc8585610ad3565b6040517fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606084811b8216602084015283901b16603482015291935091508690604801604051602081830303815290604052805190602001206040516020016109c29291907fff00000000000000000000000000000000000000000000000000000000000000815260609290921b7fffffffffffffffffffffffffffffffffffffffff00000000000000000000000016600183015260158201527f96e8ac4277198ff8b6f785478aa9a39f403cb768dd02cbee326c3e7da348845f603582015260550190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291905280516020909101209695505050505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610a4f576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008281526001602090815260409182902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff85169081179091558251858152918201527fd1b36d30f6248e97c473b4d1348ca164a4ef6759022f54a58ec200326c39c45d91016106c2565b6000808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603610b3b576040517fcb1e7cfe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1610610b75578284610b78565b83835b909250905073ffffffffffffffffffffffffffffffffffffffff8216610bca576040517f78b507da00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b9250929050565b600060208284031215610be357600080fd5b5035919050565b803573ffffffffffffffffffffffffffffffffffffffff81168114610c0e57600080fd5b919050565b600060208284031215610c2557600080fd5b610c2e82610bea565b9392505050565b60008060408385031215610c4857600080fd5b82359150610c5860208401610bea565b90509250929050565b60008060408385031215610c7457600080fd5b50508035926020909101359150565b60008060008060008060a08789031215610c9c57600080fd5b863567ffffffffffffffff811115610cb357600080fd5b87016060818a031215610cc557600080fd5b9550610cd360208801610bea565b945060408701359350610ce860608801610bea565b9250608087013567ffffffffffffffff811115610d0457600080fd5b8701601f81018913610d1557600080fd5b803567ffffffffffffffff811115610d2c57600080fd5b896020828401011115610d3e57600080fd5b60208201935080925050509295509295509295565b600080600060608486031215610d6857600080fd5b610d7184610bea565b9250610d7f60208501610bea565b9150610d8d60408501610bea565b90509250925092565b600060208284031215610da857600080fd5b81518015158114610c2e57600080fd5b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b60808152600086357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1883603018112610e3957600080fd5b870160208101903567ffffffffffffffff811115610e5657600080fd5b803603821315610e6557600080fd5b60606080850152610e7a60e085018284610db8565b91505073ffffffffffffffffffffffffffffffffffffffff610e9e60208a01610bea565b1660a0840152604088013560c084015273ffffffffffffffffffffffffffffffffffffffff871660208401528560408401528281036060840152610ee3818587610db8565b9897505050505050505056fea2646970667358221220fea45cb058045b493e646c8b9505ea080ab95fd7ed4498b922d179cf1abec08e64736f6c634300081a003360e060405234801561001057600080fd5b50604051611bb9380380611bb983398101604081905261002f9161020e565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461006357604051632b2add3d60e01b815260040160405180910390fd5b6001600160a01b038216158061008057506001600160a01b038116155b1561009e5760405163d92e233d60e01b815260040160405180910390fd5b60066100aa8982610360565b5060076100b78882610360565b5060ff861660c05260808590528360028111156100d6576100d661041e565b60a08160028111156100ea576100ea61041e565b905250600192909255600080546001600160a01b039283166001600160a01b03199182161790915560088054929093169116179055506104349350505050565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261015157600080fd5b81516001600160401b0381111561016a5761016a61012a565b604051601f8201601f19908116603f011681016001600160401b03811182821017156101985761019861012a565b6040528181528382016020018510156101b057600080fd5b60005b828110156101cf576020818601810151838301820152016101b3565b506000918101602001919091529392505050565b8051600381106101f257600080fd5b919050565b80516001600160a01b03811681146101f257600080fd5b600080600080600080600080610100898b03121561022b57600080fd5b88516001600160401b0381111561024157600080fd5b61024d8b828c01610140565b60208b015190995090506001600160401b0381111561026b57600080fd5b6102778b828c01610140565b975050604089015160ff8116811461028e57600080fd5b60608a015190965094506102a460808a016101e3565b60a08a015190945092506102ba60c08a016101f7565b91506102c860e08a016101f7565b90509295985092959890939650565b600181811c908216806102eb57607f821691505b60208210810361030b57634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111561035b57806000526020600020601f840160051c810160208510156103385750805b601f840160051c820191505b818110156103585760008155600101610344565b50505b505050565b81516001600160401b038111156103795761037961012a565b61038d8161038784546102d7565b84610311565b6020601f8211600181146103c157600083156103a95750848201515b600019600385901b1c1916600184901b178455610358565b600084815260208120601f198516915b828110156103f157878501518255602094850194600190920191016103d1565b508482101561040f5786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b634e487b7160e01b600052602160045260246000fd5b60805160a05160c05161174861047160003960006102170152600061033a0152600081816102eb01528181610ad70152610bdd01526117486000f3fe608060405234801561001057600080fd5b50600436106101985760003560e01c80638b851b95116100e3578063ccc775991161008c578063eddeb12311610066578063eddeb12314610431578063f2441b3214610444578063f687d12a1461046457600080fd5b8063ccc77599146103a4578063d9eeebed146103b7578063dd62ed3e146103eb57600080fd5b8063a9059cbb116100bd578063a9059cbb14610369578063c70126261461037c578063c835d7cc1461038f57600080fd5b80638b851b951461030d57806395d89b411461032d578063a3413d031461033557600080fd5b80633ce4a5bc116101455780634d8943bb1161011f5780634d8943bb146102a757806370a08231146102b057806385e1f4d0146102e657600080fd5b80633ce4a5bc1461024157806342966c681461028157806347e7ef241461029457600080fd5b806318160ddd1161017657806318160ddd146101f557806323b872dd146101fd578063313ce5671461021057600080fd5b806306fdde031461019d578063091d2788146101bb578063095ea7b3146101d2575b600080fd5b6101a5610477565b6040516101b29190611327565b60405180910390f35b6101c460015481565b6040519081526020016101b2565b6101e56101e0366004611366565b610509565b60405190151581526020016101b2565b6005546101c4565b6101e561020b366004611392565b610520565b60405160ff7f00000000000000000000000000000000000000000000000000000000000000001681526020016101b2565b61025c73735b14bb79463307aacbed86daf3322b1e6226ab81565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101b2565b6101e561028f3660046113d3565b6105b7565b6101e56102a2366004611366565b6105cb565b6101c460025481565b6101c46102be3660046113ec565b73ffffffffffffffffffffffffffffffffffffffff1660009081526003602052604090205490565b6101c47f000000000000000000000000000000000000000000000000000000000000000081565b60085461025c9073ffffffffffffffffffffffffffffffffffffffff1681565b6101a561071f565b61035c7f000000000000000000000000000000000000000000000000000000000000000081565b6040516101b29190611409565b6101e5610377366004611366565b61072e565b6101e561038a366004611479565b61073b565b6103a261039d3660046113ec565b61088a565b005b6103a26103b23660046113ec565b61099e565b6103bf610aab565b6040805173ffffffffffffffffffffffffffffffffffffffff90931683526020830191909152016101b2565b6101c46103f9366004611571565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260046020908152604080832093909416825291909152205490565b6103a261043f3660046113d3565b610cc9565b60005461025c9073ffffffffffffffffffffffffffffffffffffffff1681565b6103a26104723660046113d3565b610d4b565b606060068054610486906115aa565b80601f01602080910402602001604051908101604052809291908181526020018280546104b2906115aa565b80156104ff5780601f106104d4576101008083540402835291602001916104ff565b820191906000526020600020905b8154815290600101906020018083116104e257829003601f168201915b5050505050905090565b6000610516338484610dcd565b5060015b92915050565b600061052d848484610ed6565b73ffffffffffffffffffffffffffffffffffffffff8416600090815260046020908152604080832033845290915290205482811015610598576040517f10bad14700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6105ac85336105a7868561162c565b610dcd565b506001949350505050565b60006105c33383611091565b506001919050565b60003373735b14bb79463307aacbed86daf3322b1e6226ab14801590610609575060005473ffffffffffffffffffffffffffffffffffffffff163314155b801561062d575060085473ffffffffffffffffffffffffffffffffffffffff163314155b15610664576040517fddb5de5e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61066e83836111d3565b6040517f735b14bb79463307aacbed86daf3322b1e6226ab000000000000000000000000602082015273ffffffffffffffffffffffffffffffffffffffff8416907f67fc7bdaed5b0ec550d8706b87d60568ab70c6b781263c70101d54cd1564aab390603401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529082905261070e91869061163f565b60405180910390a250600192915050565b606060078054610486906115aa565b6000610516338484610ed6565b6000806000610748610aab565b6040517f23b872dd00000000000000000000000000000000000000000000000000000000815233600482015273735b14bb79463307aacbed86daf3322b1e6226ab602482015260448101829052919350915073ffffffffffffffffffffffffffffffffffffffff8316906323b872dd906064016020604051808303816000875af11580156107da573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107fe9190611661565b610834576040517f0a7cd6d600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61083e3385611091565b60025460405133917f9ffbffc04a397460ee1dbe8c9503e098090567d6b7f4b3c02a8617d800b6d9559161087791899189918791611683565b60405180910390a2506001949350505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab146108d7576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116610924576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527fd55614e962c5fd6ece71614f6348d702468a997a394dd5e5c1677950226d97ae906020015b60405180910390a150565b3373735b14bb79463307aacbed86daf3322b1e6226ab146109eb576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116610a38576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600880547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527f88815d964e380677e86d817e7d65dea59cb7b4c3b5b7a0c8ec7ea4a74f90a38790602001610993565b600080546040517f0be155470000000000000000000000000000000000000000000000000000000081527f000000000000000000000000000000000000000000000000000000000000000060048201528291829173ffffffffffffffffffffffffffffffffffffffff90911690630be1554790602401602060405180830381865afa158015610b3e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b6291906116b2565b905073ffffffffffffffffffffffffffffffffffffffff8116610bb1576040517f78fff39600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080546040517fd7fd7afb0000000000000000000000000000000000000000000000000000000081527f0000000000000000000000000000000000000000000000000000000000000000600482015273ffffffffffffffffffffffffffffffffffffffff9091169063d7fd7afb90602401602060405180830381865afa158015610c40573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c6491906116cf565b905080600003610ca0576040517fe661aed000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060025460015483610cb391906116e8565b610cbd91906116ff565b92959294509192505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610d16576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60028190556040518181527fef13af88e424b5d15f49c77758542c1938b08b8b95b91ed0751f98ba99000d8f90602001610993565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610d98576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018190556040518181527fff5788270f43bfc1ca41c503606d2594aa3023a1a7547de403a3e2f146a4a80a90602001610993565b73ffffffffffffffffffffffffffffffffffffffff8316610e1a576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216610e67576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff83811660008181526004602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8316610f23576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216610f70576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff831660009081526003602052604090205481811015610fd0576040517ffe382aa700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610fda828261162c565b73ffffffffffffffffffffffffffffffffffffffff808616600090815260036020526040808220939093559085168152908120805484929061101d9084906116ff565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161108391815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff82166110de576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff82166000908152600360205260409020548181101561113e576040517ffe382aa700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611148828261162c565b73ffffffffffffffffffffffffffffffffffffffff84166000908152600360205260408120919091556005805484929061118390849061162c565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90602001610ec9565b73ffffffffffffffffffffffffffffffffffffffff8216611220576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b806005600082825461123291906116ff565b909155505073ffffffffffffffffffffffffffffffffffffffff82166000908152600360205260408120805483929061126c9084906116ff565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6000815180845260005b818110156112e9576020818501810151868301820152016112cd565b5060006020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b60208152600061133a60208301846112c3565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff8116811461136357600080fd5b50565b6000806040838503121561137957600080fd5b823561138481611341565b946020939093013593505050565b6000806000606084860312156113a757600080fd5b83356113b281611341565b925060208401356113c281611341565b929592945050506040919091013590565b6000602082840312156113e557600080fd5b5035919050565b6000602082840312156113fe57600080fd5b813561133a81611341565b6020810160038310611444577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000806040838503121561148c57600080fd5b823567ffffffffffffffff8111156114a357600080fd5b8301601f810185136114b457600080fd5b803567ffffffffffffffff8111156114ce576114ce61144a565b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8501160116810181811067ffffffffffffffff8211171561153a5761153a61144a565b60405281815282820160200187101561155257600080fd5b8160208401602083013760006020928201830152969401359450505050565b6000806040838503121561158457600080fd5b823561158f81611341565b9150602083013561159f81611341565b809150509250929050565b600181811c908216806115be57607f821691505b6020821081036115f7577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8181038181111561051a5761051a6115fd565b60408152600061165260408301856112c3565b90508260208301529392505050565b60006020828403121561167357600080fd5b8151801515811461133a57600080fd5b60808152600061169660808301876112c3565b6020830195909552506040810192909252606090910152919050565b6000602082840312156116c457600080fd5b815161133a81611341565b6000602082840312156116e157600080fd5b5051919050565b808202811582820484141761051a5761051a6115fd565b8082018082111561051a5761051a6115fd56fea26469706673582212204013e39523742118b3f2227e145ee7e48176ba6aebead33c596dca2acb59a74c64736f6c634300081a0033a264697066735822122067decc36d8b1edb726774e2fb44b162d21e3b4bf4a180f8771c64c03ca08c05664736f6c634300081a0033", + ABI: "[{\"type\":\"function\",\"name\":\"IS_TEST\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeArtifacts\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedArtifacts_\",\"type\":\"string[]\",\"internalType\":\"string[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeContracts\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedContracts_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeSelectors\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedSelectors_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzSelector[]\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"selectors\",\"type\":\"bytes4[]\",\"internalType\":\"bytes4[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeSenders\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedSenders_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"failed\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"setUp\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"targetArtifactSelectors\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedArtifactSelectors_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzArtifactSelector[]\",\"components\":[{\"name\":\"artifact\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"selectors\",\"type\":\"bytes4[]\",\"internalType\":\"bytes4[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetArtifacts\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedArtifacts_\",\"type\":\"string[]\",\"internalType\":\"string[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetContracts\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedContracts_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetInterfaces\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedInterfaces_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzInterface[]\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"artifacts\",\"type\":\"string[]\",\"internalType\":\"string[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetSelectors\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedSelectors_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzSelector[]\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"selectors\",\"type\":\"bytes4[]\",\"internalType\":\"bytes4[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetSenders\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedSenders_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"testCall\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testCallFailsIfReceiverIsZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawAndCallZETAFailsIfAmountIsReceiverIsZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawAndCallZETAFailsIfAmountIsZero\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawAndCallZRC20FailsIfAmountIsZero\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawAndCallZRC20FailsIfReceiverIsZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawZETA\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawZETAFailsIfAmountIsZero\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawZETAFailsIfNoAllowance\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawZETAFailsIfNoBalance\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawZETAFailsIfReceiverIsZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawZETAWithMessage\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawZETAWithMessageFailsIfNoAllowance\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawZRC20\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawZRC20FailsIfNoAllowance\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawZRC20FailsIfNoBalanceForGasFee\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawZRC20FailsIfNoBalanceForTransfer\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawZRC20FailsIfReceiverIsZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawZRC20FailsIsAmountIs0\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawZRC20WithMessage\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawZRC20WithMessageFailsIfNoAllowance\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"event\",\"name\":\"Call\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"chainId\",\"type\":\"uint256\",\"indexed\":true,\"internalType\":\"uint256\"},{\"name\":\"receiver\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"message\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Withdrawal\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"chainId\",\"type\":\"uint256\",\"indexed\":true,\"internalType\":\"uint256\"},{\"name\":\"receiver\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"zrc20\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"gasfee\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"protocolFlatFee\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"message\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log\",\"inputs\":[{\"name\":\"\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_address\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_array\",\"inputs\":[{\"name\":\"val\",\"type\":\"uint256[]\",\"indexed\":false,\"internalType\":\"uint256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_array\",\"inputs\":[{\"name\":\"val\",\"type\":\"int256[]\",\"indexed\":false,\"internalType\":\"int256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_array\",\"inputs\":[{\"name\":\"val\",\"type\":\"address[]\",\"indexed\":false,\"internalType\":\"address[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_bytes\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_bytes32\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_int\",\"inputs\":[{\"name\":\"\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_address\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_array\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"uint256[]\",\"indexed\":false,\"internalType\":\"uint256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_array\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"int256[]\",\"indexed\":false,\"internalType\":\"int256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_array\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"address[]\",\"indexed\":false,\"internalType\":\"address[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_bytes\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_bytes32\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_decimal_int\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"},{\"name\":\"decimals\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_decimal_uint\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"decimals\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_int\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_string\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_uint\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_string\",\"inputs\":[{\"name\":\"\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_uint\",\"inputs\":[{\"name\":\"\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"logs\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"CallerIsNotFungibleModule\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"FailedZetaSent\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"GasFeeTransferFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientZRC20Amount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientZetaAmount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidTarget\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"LowBalance\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OnlyWZETAOrFungible\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"WithdrawalFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZRC20BurnFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZRC20DepositFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZRC20TransferFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZeroAddress\",\"inputs\":[]}]", + Bin: "0x6080604052600c8054600160ff199182168117909255601f80549091169091179055348015602c57600080fd5b5061e2978061003c6000396000f3fe608060405234801561001057600080fd5b50600436106102265760003560e01c806383ababa91161012a578063ba9adeef116100bd578063e20c9f711161008c578063fa7626d411610071578063fa7626d41461037f578063fbc611c81461038c578063fdad0ad01461039457600080fd5b8063e20c9f711461036f578063ea37902f1461037757600080fd5b8063ba9adeef1461034f578063ceccfab314610357578063dc749dd71461035f578063dde7e9671461036757600080fd5b8063b5508aa9116100f9578063b5508aa91461031f578063b7f0583614610327578063ba414fa61461032f578063ba800c911461034757600080fd5b806383ababa9146102e557806385226c81146102ed578063916a17c614610302578063b0464fdc1461031757600080fd5b806336431b3f116101bd578063423a58741161018c5780635d72228f116101715780635d72228f146102c05780636221b509146102c857806366d9a9a0146102d057600080fd5b8063423a5874146102b05780635006fd80146102b857600080fd5b806336431b3f1461029057806339cbb457146102985780633e5e3c23146102a05780633f7286f4146102a857600080fd5b80631e63d2b9116101f95780631e63d2b91461024d5780631ed7831c1461025557806321aeb18c146102735780632ade38801461027b57600080fd5b806304019fba1461022b5780630a9254e4146102355780631238212c1461023d57806318a4cfdc14610245575b600080fd5b61023361039c565b005b61023361053a565b610233610fa7565b610233611370565b6102336117e9565b61025d611bd5565b60405161026a9190618d35565b60405180910390f35b610233611c37565b610283611d59565b60405161026a9190618dd1565b610233611e9b565b61023361200c565b61025d612174565b61025d6121d4565b610233612234565b6102336123b2565b610233612866565b610233612bb5565b6102d8612dd7565b60405161026a9190618f37565b610233612f59565b6102f5613054565b60405161026a9190618fd5565b61030a613124565b60405161026a919061904c565b61030a61321f565b6102f561331a565b6102336133ea565b610337613627565b604051901515815260200161026a565b6102336136fb565b610233613827565b6102336139ca565b610233613cfe565b610233613dba565b61025d6141f6565b610233614256565b601f546103379060ff1681565b610233614635565b6102336149a8565b6026546040516001600160a01b03909116602482015260009060440160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f84fae76000000000000000000000000000000000000000000000000000000000179052517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fd92e233d000000000000000000000000000000000000000000000000000000006004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b15801561049657600080fd5b505af11580156104aa573d6000803e3d6000fd5b5050602080546040805160008152928301908190527ff41d77490000000000000000000000000000000000000000000000000000000090526001600160a01b0316925063f41d774991506105059060018086602484016190e3565b600060405180830381600087803b15801561051f57600080fd5b505af1158015610533573d6000803e3d6000fd5b5050505050565b602580547fffffffffffffffffffffffff000000000000000000000000000000000000000090811630179091556026805490911661123417905560405161058090618c48565b604051809103906000f08015801561059c573d6000803e3d6000fd5b50602280547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03928316908117909155604080518082018252600f81527f476174657761795a45564d2e736f6c000000000000000000000000000000000060208201526025549151602481019390935292166044820152610680919060640160408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f485cc95500000000000000000000000000000000000000000000000000000000179052614b37565b601f80547fffffffffffffffffffffff0000000000000000000000000000000000000000ff166101006001600160a01b039384168102919091179182905560208054919092049092167fffffffffffffffffffffffff000000000000000000000000000000000000000090921682178155604080517f3ce4a5bc0000000000000000000000000000000000000000000000000000000081529051633ce4a5bc926004808401939192918290030181865afa158015610742573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107669190619114565b602780547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03929092169190911790556040516107aa90618c55565b604051809103906000f0801580156107c6573d6000803e3d6000fd5b50602480547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039283161781556027546040517f06447d5600000000000000000000000000000000000000000000000000000000815292166004830152737109709ecfa91a80626ff3989d68f67f5b1dd12d916306447d569101600060405180830381600087803b15801561086257600080fd5b505af1158015610876573d6000803e3d6000fd5b50505050600080600060405161088b90618c62565b6001600160a01b03938416815291831660208301529091166040820152606001604051809103906000f0801580156108c7573d6000803e3d6000fd5b50602380547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392831690811790915560205460405160129360019384936000939192169061091d90618c6f565b61092c9695949392919061913d565b604051809103906000f080158015610948573d6000803e3d6000fd5b50602180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039283169081179091556023546040517fee2815ba0000000000000000000000000000000000000000000000000000000081526001600482015260248101929092529091169063ee2815ba90604401600060405180830381600087803b1580156109df57600080fd5b505af11580156109f3573d6000803e3d6000fd5b50506023546040517fa7cb050700000000000000000000000000000000000000000000000000000000815260016004820181905260248201526001600160a01b03909116925063a7cb05079150604401600060405180830381600087803b158015610a5d57600080fd5b505af1158015610a71573d6000803e3d6000fd5b50506027546040517fc88a5e6d0000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152633b9aca006024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c88a5e6d9150604401600060405180830381600087803b158015610af157600080fd5b505af1158015610b05573d6000803e3d6000fd5b50505050602260009054906101000a90046001600160a01b03166001600160a01b031663d0e30db0600a6040518263ffffffff1660e01b81526004016000604051808303818588803b158015610b5a57600080fd5b505af1158015610b6e573d6000803e3d6000fd5b50506022546020546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152600a60248201529116935063095ea7b3925060440190506020604051808303816000875af1158015610be2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c06919061922c565b506021546025546040517f47e7ef240000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620186a060248201529116906347e7ef24906044016020604051808303816000875af1158015610c77573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c9b919061922c565b507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b03166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610cfa57600080fd5b505af1158015610d0e573d6000803e3d6000fd5b50506025546040517f06447d560000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506306447d569150602401600060405180830381600087803b158015610d8457600080fd5b505af1158015610d98573d6000803e3d6000fd5b50506021546020546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620186a060248201529116925063095ea7b391506044016020604051808303816000875af1158015610e0c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e30919061922c565b50602260009054906101000a90046001600160a01b03166001600160a01b031663d0e30db0600a6040518263ffffffff1660e01b81526004016000604051808303818588803b158015610e8257600080fd5b505af1158015610e96573d6000803e3d6000fd5b50506022546020546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152600a60248201529116935063095ea7b3925060440190506020604051808303816000875af1158015610f0a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f2e919061922c565b507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b03166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610f8d57600080fd5b505af1158015610fa1573d6000803e3d6000fd5b50505050565b6021546025546040516370a0823160e01b81526001600160a01b03918216600482015260019260009216906370a0823190602401602060405180830381865afa158015610ff8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061101c919061924e565b6025546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561109157600080fd5b505af11580156110a5573d6000803e3d6000fd5b50506021546020546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152600060248201529116925063095ea7b391506044016020604051808303816000875af1158015611117573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061113b919061922c565b506026546040516001600160a01b03909116602482015260009060440160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f84fae7600000000000000000000000000000000000000000000000000000000017905280517ff48448140000000000000000000000000000000000000000000000000000000081529051919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f48448149160048082019260009290919082900301818387803b15801561121757600080fd5b505af115801561122b573d6000803e3d6000fd5b50506020805460265460405160609190911b6bffffffffffffffffffffffff1916928101929092526001600160a01b03169250637993c1e0915060340160408051601f19818403018152908290526021547fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1683526112bf9288916001600160a01b0316908790600401619267565b600060405180830381600087803b1580156112d957600080fd5b505af11580156112ed573d6000803e3d6000fd5b50506021546025546040516370a0823160e01b81526001600160a01b03918216600482015260009450911691506370a0823190602401602060405180830381865afa158015611340573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611364919061924e565b9050610fa18382614b56565b6022546025546040516370a0823160e01b81526001600160a01b03918216600482015260019260009216906370a0823190602401602060405180830381865afa1580156113c1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113e5919061924e565b6022546020546040516370a0823160e01b81526001600160a01b0391821660048201529293506000929116906370a0823190602401602060405180830381865afa158015611437573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061145b919061924e565b6027546026546040516001600160a01b03918216602482015292935016319060009060440160408051601f19818403018152918152602080830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f84fae760000000000000000000000000000000000000000000000000000000001790525490517f81bad6f30000000000000000000000000000000000000000000000000000000081526001600482018190526024820181905260448201819052606482018190526001600160a01b03909216608482015291925090737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b15801561156a57600080fd5b505af115801561157e573d6000803e3d6000fd5b505060255460265460405160609190911b6bffffffffffffffffffffffff191660208201528493506001600160a01b0390911691507fde19dbe881cc0aeeb6e73ce19ac7b5ca695e6be8a076e3eb42292005a7fec1b59060340160408051601f198184030181529082905260225461160a926001600160a01b03909116908c9060009081908b906192a1565b60405180910390a3602080546026546040516001600160a01b039283169363f41d7749936116529316910160609190911b6bffffffffffffffffffffffff1916815260140190565b6040516020818303038152906040528884866040518563ffffffff1660e01b815260040161168394939291906190e3565b600060405180830381600087803b15801561169d57600080fd5b505af11580156116b1573d6000803e3d6000fd5b50506022546025546040516370a0823160e01b81526001600160a01b03918216600482015260009450911691506370a0823190602401602060405180830381865afa158015611704573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611728919061924e565b905061173e611738600188619323565b82614b56565b6022546020546040516370a0823160e01b81526001600160a01b03918216600482015260009291909116906370a0823190602401602060405180830381865afa15801561178f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117b3919061924e565b90506117bf8682614b56565b6117df6117cd866001619336565b6027546001600160a01b031631614b56565b5050505050505050565b6021546025546040516370a0823160e01b81526001600160a01b03918216600482015260019260009216906370a0823190602401602060405180830381865afa15801561183a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061185e919061924e565b6026546040516001600160a01b03909116602482015290915060009060440160408051601f19818403018152918152602080830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f84fae760000000000000000000000000000000000000000000000000000000001790525490517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b15801561196457600080fd5b505af1158015611978573d6000803e3d6000fd5b505060255460265460405160609190911b6bffffffffffffffffffffffff19166020820152600093506001600160a01b0390911691507fde19dbe881cc0aeeb6e73ce19ac7b5ca695e6be8a076e3eb42292005a7fec1b59060340160408051601f198184030181528282526021547f4d8943bb000000000000000000000000000000000000000000000000000000008452915190926001600160a01b039092169189916000918491634d8943bb916004808201926020929091908290030181865afa158015611a4b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a6f919061924e565b88604051611a82969594939291906192a1565b60405180910390a3602080546026546040516001600160a01b0392831693637993c1e093611aca9316910160609190911b6bffffffffffffffffffffffff1916815260140190565b60408051601f19818403018152908290526021547fffffffff0000000000000000000000000000000000000000000000000000000060e085901b168352611b219288916001600160a01b0316908790600401619267565b600060405180830381600087803b158015611b3b57600080fd5b505af1158015611b4f573d6000803e3d6000fd5b50506021546025546040516370a0823160e01b81526001600160a01b03918216600482015260009450911691506370a0823190602401602060405180830381865afa158015611ba2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bc6919061924e565b9050610fa16117388585619323565b60606016805480602002602001604051908101604052809291908181526020018280548015611c2d57602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311611c0f575b5050505050905090565b6040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527f19c08f49000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b158015611cbc57600080fd5b505af1158015611cd0573d6000803e3d6000fd5b50506020805460265460405160609190911b6bffffffffffffffffffffffff1916928101929092526001600160a01b0316925063737a9ed691506034015b604051602081830303815290604052600060016040518463ffffffff1660e01b8152600401611d3f93929190619349565b600060405180830381600087803b158015610f8d57600080fd5b6060601e805480602002602001604051908101604052809291908181526020016000905b82821015611e9257600084815260208082206040805180820182526002870290920180546001600160a01b03168352600181018054835181870281018701909452808452939591948681019491929084015b82821015611e7b578382906000526020600020018054611dee9061936e565b80601f0160208091040260200160405190810160405280929190818152602001828054611e1a9061936e565b8015611e675780601f10611e3c57610100808354040283529160200191611e67565b820191906000526020600020905b815481529060010190602001808311611e4a57829003601f168201915b505050505081526020019060010190611dcf565b505050508152505081526020019060010190611d7d565b50505050905090565b6026546040516001600160a01b03909116602482015260009060440160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f84fae76000000000000000000000000000000000000000000000000000000000179052517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fd92e233d000000000000000000000000000000000000000000000000000000006004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b158015611f9557600080fd5b505af1158015611fa9573d6000803e3d6000fd5b5050602080546040805160008152928301908190526021547f7993c1e0000000000000000000000000000000000000000000000000000000009091526001600160a01b039182169450637993c1e093506105059291600191168660248401619267565b6026546040516001600160a01b03909116602482015260009060440160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f84fae76000000000000000000000000000000000000000000000000000000000179052517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fd92e233d000000000000000000000000000000000000000000000000000000006004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b15801561210657600080fd5b505af115801561211a573d6000803e3d6000fd5b5050602080546040805160008152928301908190527f5d40e1780000000000000000000000000000000000000000000000000000000090526001600160a01b03169250635d40e178915061050590600185602483016193bb565b60606018805480602002602001604051908101604052809291908181526020018280548015611c2d576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311611c0f575050505050905090565b60606017805480602002602001604051908101604052809291908181526020018280548015611c2d576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311611c0f575050505050905090565b6026546040516001600160a01b03909116602482015260009060440160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f84fae76000000000000000000000000000000000000000000000000000000000179052517fc31eb0e00000000000000000000000000000000000000000000000000000000081527f19c08f49000000000000000000000000000000000000000000000000000000006004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b15801561232e57600080fd5b505af1158015612342573d6000803e3d6000fd5b50506020805460265460405160609190911b6bffffffffffffffffffffffff1916928101929092526001600160a01b0316925063f41d7749915060340160405160208183030381529060405260006001856040518563ffffffff1660e01b815260040161050594939291906190e3565b6022546025546040516370a0823160e01b81526001600160a01b03918216600482015260019260009216906370a0823190602401602060405180830381865afa158015612403573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612427919061924e565b6022546020546040516370a0823160e01b81526001600160a01b0391821660048201529293506000929116906370a0823190602401602060405180830381865afa158015612479573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061249d919061924e565b6027546026546040516001600160a01b03918216602482015292935016319060009060440160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f84fae7600000000000000000000000000000000000000000000000000000000017905260255490517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152909150600190737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561259157600080fd5b505af11580156125a5573d6000803e3d6000fd5b50506022546020546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152600060248201529116925063095ea7b391506044016020604051808303816000875af1158015612617573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061263b919061922c565b507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b031663f48448146040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561269a57600080fd5b505af11580156126ae573d6000803e3d6000fd5b50506020805460265460405160609190911b6bffffffffffffffffffffffff1916928101929092526001600160a01b0316925063f41d774991506034016040516020818303038152906040528884866040518563ffffffff1660e01b815260040161271c94939291906190e3565b600060405180830381600087803b15801561273657600080fd5b505af115801561274a573d6000803e3d6000fd5b50506022546025546040516370a0823160e01b81526001600160a01b03918216600482015260009450911691506370a0823190602401602060405180830381865afa15801561279d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127c1919061924e565b90506127cd8682614b56565b6022546020546040516370a0823160e01b81526001600160a01b03918216600482015260009291909116906370a0823190602401602060405180830381865afa15801561281e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612842919061924e565b905061284e8682614b56565b6027546117df9086906001600160a01b031631614b56565b6021546025546040516370a0823160e01b81526001600160a01b03918216600482015260019260009216906370a0823190602401602060405180830381865afa1580156128b7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128db919061924e565b6025546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561295057600080fd5b505af1158015612964573d6000803e3d6000fd5b50506021546020546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152600060248201529116925063095ea7b391506044016020604051808303816000875af11580156129d6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129fa919061922c565b507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b031663f48448146040518163ffffffff1660e01b8152600401600060405180830381600087803b158015612a5957600080fd5b505af1158015612a6d573d6000803e3d6000fd5b50506020805460265460405160609190911b6bffffffffffffffffffffffff1916928101929092526001600160a01b0316925063135390f9915060340160408051601f19818403018152908290526021547fffffffff0000000000000000000000000000000000000000000000000000000060e085901b168352612aff9287916001600160a01b0316906004016193e6565b600060405180830381600087803b158015612b1957600080fd5b505af1158015612b2d573d6000803e3d6000fd5b50506021546025546040516370a0823160e01b81526001600160a01b03918216600482015260009450911691506370a0823190602401602060405180830381865afa158015612b80573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ba4919061924e565b9050612bb08282614b56565b505050565b6022546025546040516370a0823160e01b81526001600160a01b03918216600482015260019260009216906370a0823190602401602060405180830381865afa158015612c06573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c2a919061924e565b6022546040517fa9059cbb0000000000000000000000000000000000000000000000000000000081526101236004820152602481018390529192506001600160a01b03169063a9059cbb906044016020604051808303816000875af1158015612c97573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612cbb919061922c565b506000600190507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b031663f48448146040518163ffffffff1660e01b8152600401600060405180830381600087803b158015612d2057600080fd5b505af1158015612d34573d6000803e3d6000fd5b50506020805460265460405160609190911b6bffffffffffffffffffffffff1916928101929092526001600160a01b0316925063737a9ed6915060340160405160208183030381529060405285846040518463ffffffff1660e01b8152600401612da093929190619349565b600060405180830381600087803b158015612dba57600080fd5b505af1158015612dce573d6000803e3d6000fd5b50505050505050565b6060601b805480602002602001604051908101604052809291908181526020016000905b82821015611e925783829060005260206000209060020201604051806040016040529081600082018054612e2e9061936e565b80601f0160208091040260200160405190810160405280929190818152602001828054612e5a9061936e565b8015612ea75780601f10612e7c57610100808354040283529160200191612ea7565b820191906000526020600020905b815481529060010190602001808311612e8a57829003601f168201915b5050505050815260200160018201805480602002602001604051908101604052809291908181526020018280548015612f4157602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019060040190602082600301049283019260010382029150808411612eee5790505b50505050508152505081526020019060010190612dfb565b6040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b158015612fde57600080fd5b505af1158015612ff2573d6000803e3d6000fd5b5050602080546040805160008152928301908190526021547f135390f9000000000000000000000000000000000000000000000000000000009091526001600160a01b03918216945063135390f99350611d3f929160019116602483016193e6565b6060601a805480602002602001604051908101604052809291908181526020016000905b82821015611e925783829060005260206000200180546130979061936e565b80601f01602080910402602001604051908101604052809291908181526020018280546130c39061936e565b80156131105780601f106130e557610100808354040283529160200191613110565b820191906000526020600020905b8154815290600101906020018083116130f357829003601f168201915b505050505081526020019060010190613078565b6060601d805480602002602001604051908101604052809291908181526020016000905b82821015611e925760008481526020908190206040805180820182526002860290920180546001600160a01b0316835260018101805483518187028101870190945280845293949193858301939283018282801561320757602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190600401906020826003010492830192600103820291508084116131b45790505b50505050508152505081526020019060010190613148565b6060601c805480602002602001604051908101604052809291908181526020016000905b82821015611e925760008481526020908190206040805180820182526002860290920180546001600160a01b0316835260018101805483518187028101870190945280845293949193858301939283018282801561330257602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190600401906020826003010492830192600103820291508084116132af5790505b50505050508152505081526020019060010190613243565b60606019805480602002602001604051908101604052809291908181526020016000905b82821015611e9257838290600052602060002001805461335d9061936e565b80601f01602080910402602001604051908101604052809291908181526020018280546133899061936e565b80156133d65780601f106133ab576101008083540402835291602001916133d6565b820191906000526020600020905b8154815290600101906020018083116133b957829003601f168201915b50505050508152602001906001019061333e565b6026546040516001600160a01b03909116602482015260009060440160408051601f19818403018152918152602080830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f84fae760000000000000000000000000000000000000000000000000000000001790525490517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b1580156134ed57600080fd5b505af1158015613501573d6000803e3d6000fd5b505060255460265460405160609190911b6bffffffffffffffffffffffff19166020820152600193508392506001600160a01b03909116907f5322ffbbf9261ff1f8138247942d2b03b28717141ef0a0dd080fc4be9c4e78d39060340160408051601f198184030181529082905261357a918790619418565b60405180910390a3602080546026546040516001600160a01b0392831693635d40e178936135c29316910160609190911b6bffffffffffffffffffffffff1916815260140190565b60405160208183030381529060405283856040518463ffffffff1660e01b81526004016135f1939291906193bb565b600060405180830381600087803b15801561360b57600080fd5b505af115801561361f573d6000803e3d6000fd5b505050505050565b60085460009060ff161561363f575060085460ff1690565b6040517f667f9d70000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d600482018190527f6661696c65640000000000000000000000000000000000000000000000000000602483015260009163667f9d7090604401602060405180830381865afa1580156136d0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136f4919061924e565b1415905090565b6040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527f5d67094f000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b15801561378057600080fd5b505af1158015613794573d6000803e3d6000fd5b50506020805460265460405160609190911b6bffffffffffffffffffffffff1916928101929092526001600160a01b0316925063135390f9915060340160408051601f19818403018152908290526021547fffffffff0000000000000000000000000000000000000000000000000000000060e085901b168352611d3f926000916001600160a01b0316906004016193e6565b6026546040516001600160a01b03909116602482015260009060440160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f84fae76000000000000000000000000000000000000000000000000000000000179052517fc31eb0e00000000000000000000000000000000000000000000000000000000081527f5d67094f000000000000000000000000000000000000000000000000000000006004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b15801561392157600080fd5b505af1158015613935573d6000803e3d6000fd5b50506020805460265460405160609190911b6bffffffffffffffffffffffff1916928101929092526001600160a01b03169250637993c1e0915060340160408051601f19818403018152908290526021547fffffffff0000000000000000000000000000000000000000000000000000000060e085901b168352610505926000916001600160a01b0316908790600401619267565b6021546025546040516370a0823160e01b81526001600160a01b03918216600482015260019260009216906370a0823190602401602060405180830381865afa158015613a1b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a3f919061924e565b6021546040517fa9059cbb0000000000000000000000000000000000000000000000000000000081526101236004820152602481018390529192506001600160a01b03169063a9059cbb906044016020604051808303816000875af1158015613aac573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613ad0919061922c565b506027546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015613b4357600080fd5b505af1158015613b57573d6000803e3d6000fd5b50506021546040517ff687d12a000000000000000000000000000000000000000000000000000000008152600a60048201526001600160a01b03909116925063f687d12a9150602401600060405180830381600087803b158015613bba57600080fd5b505af1158015613bce573d6000803e3d6000fd5b50506040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527ffe382aa7000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e091506024015b600060405180830381600087803b158015613c5857600080fd5b505af1158015613c6c573d6000803e3d6000fd5b50506020805460265460405160609190911b6bffffffffffffffffffffffff1916928101929092526001600160a01b0316925063135390f9915060340160408051601f19818403018152908290526021547fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1683526135f19287916001600160a01b0316906004016193e6565b6040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b158015613d8357600080fd5b505af1158015613d97573d6000803e3d6000fd5b5050602080546040516001600160a01b03909116935063737a9ed6925001611d0e565b6022546025546040516370a0823160e01b81526001600160a01b03918216600482015260019260009216906370a0823190602401602060405180830381865afa158015613e0b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613e2f919061924e565b6022546020546040516370a0823160e01b81526001600160a01b0391821660048201529293506000929116906370a0823190602401602060405180830381865afa158015613e81573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613ea5919061924e565b6027546025546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152929350163190600190737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015613f2357600080fd5b505af1158015613f37573d6000803e3d6000fd5b50506022546020546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152600060248201529116925063095ea7b391506044016020604051808303816000875af1158015613fa9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613fcd919061922c565b507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b031663f48448146040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561402c57600080fd5b505af1158015614040573d6000803e3d6000fd5b50506020805460265460405160609190911b6bffffffffffffffffffffffff1916928101929092526001600160a01b0316925063737a9ed6915060340160405160208183030381529060405287846040518463ffffffff1660e01b81526004016140ac93929190619349565b600060405180830381600087803b1580156140c657600080fd5b505af11580156140da573d6000803e3d6000fd5b50506022546025546040516370a0823160e01b81526001600160a01b03918216600482015260009450911691506370a0823190602401602060405180830381865afa15801561412d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614151919061924e565b905061415d8582614b56565b6022546020546040516370a0823160e01b81526001600160a01b03918216600482015260009291909116906370a0823190602401602060405180830381865afa1580156141ae573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906141d2919061924e565b90506141de8582614b56565b602754612dce9085906001600160a01b031631614b56565b60606015805480602002602001604051908101604052809291908181526020018280548015611c2d576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311611c0f575050505050905090565b6022546025546040516370a0823160e01b81526001600160a01b03918216600482015260019260009216906370a0823190602401602060405180830381865afa1580156142a7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906142cb919061924e565b6022546020546040516370a0823160e01b81526001600160a01b0391821660048201529293506000929116906370a0823190602401602060405180830381865afa15801561431d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614341919061924e565b6027546020546040517f81bad6f30000000000000000000000000000000000000000000000000000000081526001600482018190526024820181905260448201819052606482018190526001600160a01b0392831660848301529394509116319190737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b1580156143dc57600080fd5b505af11580156143f0573d6000803e3d6000fd5b505060255460265460405160609190911b6bffffffffffffffffffffffff191660208201528493506001600160a01b0390911691507fde19dbe881cc0aeeb6e73ce19ac7b5ca695e6be8a076e3eb42292005a7fec1b59060340160408051601f198184030181529082905260225461447a926001600160a01b03909116908b90600090819061943d565b60405180910390a3602080546026546040516001600160a01b039283169363737a9ed6936144c29316910160609190911b6bffffffffffffffffffffffff1916815260140190565b60405160208183030381529060405287846040518463ffffffff1660e01b81526004016144f193929190619349565b600060405180830381600087803b15801561450b57600080fd5b505af115801561451f573d6000803e3d6000fd5b50506022546025546040516370a0823160e01b81526001600160a01b03918216600482015260009450911691506370a0823190602401602060405180830381865afa158015614572573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614596919061924e565b90506145a6611738600187619323565b6022546020546040516370a0823160e01b81526001600160a01b03918216600482015260009291909116906370a0823190602401602060405180830381865afa1580156145f7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061461b919061924e565b90506146278582614b56565b612dce6117cd856001619336565b6021546025546040516370a0823160e01b81526001600160a01b03918216600482015260019260009216906370a0823190602401602060405180830381865afa158015614686573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906146aa919061924e565b6020546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b15801561473b57600080fd5b505af115801561474f573d6000803e3d6000fd5b505060255460265460405160609190911b6bffffffffffffffffffffffff19166020820152600093506001600160a01b0390911691507fde19dbe881cc0aeeb6e73ce19ac7b5ca695e6be8a076e3eb42292005a7fec1b59060340160408051601f198184030181528282526021547f4d8943bb000000000000000000000000000000000000000000000000000000008452915190926001600160a01b039092169188916000918491634d8943bb916004808201926020929091908290030181865afa158015614822573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614846919061924e565b60405161485795949392919061943d565b60405180910390a3602080546026546040516001600160a01b039283169363135390f99361489f9316910160609190911b6bffffffffffffffffffffffff1916815260140190565b60408051601f19818403018152908290526021547fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1683526148f49287916001600160a01b0316906004016193e6565b600060405180830381600087803b15801561490e57600080fd5b505af1158015614922573d6000803e3d6000fd5b50506021546025546040516370a0823160e01b81526001600160a01b03918216600482015260009450911691506370a0823190602401602060405180830381865afa158015614975573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614999919061924e565b9050612bb06117388484619323565b6021546025546040516370a0823160e01b81526001600160a01b03918216600482015260029260009216906370a0823190602401602060405180830381865afa1580156149f9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614a1d919061924e565b6021549091506001600160a01b031663a9059cbb610123614a3f600185619323565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303816000875af1158015614aa2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614ac6919061922c565b506040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527ffe382aa7000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401613c3e565b6000614b41618c7c565b614b4c848483614bd5565b9150505b92915050565b6040517f98296c540000000000000000000000000000000000000000000000000000000081526004810183905260248101829052737109709ecfa91a80626ff3989d68f67f5b1dd12d906398296c549060440160006040518083038186803b158015614bc157600080fd5b505afa15801561361f573d6000803e3d6000fd5b600080614be28584614c50565b9050614c456040518060400160405280601d81526020017f4552433139363750726f78792e736f6c3a4552433139363750726f78790000008152508286604051602001614c3092919061948e565b60405160208183030381529060405285614c5c565b9150505b9392505050565b6000614c498383614c8a565b60c08101515160009015614c8057614c7984848460c00151614ca5565b9050614c49565b614c798484614e4b565b6000614c968383614f36565b614c4983836020015184614c5c565b600080614cb0614f46565b90506000614cbe8683615019565b90506000614cd582606001518360200151856154bf565b90506000614ce5838389896156d1565b90506000614cf28261654e565b602081015181519192509060030b15614d6557898260400151604051602001614d1c9291906194b0565b60408051601f19818403018152908290527f08c379a0000000000000000000000000000000000000000000000000000000008252614d5c91600401619531565b60405180910390fd5b6000614da86040518060400160405280601581526020017f4465706c6f79656420746f20616464726573733a20000000000000000000000081525083600161671d565b6040517fc6ce059d000000000000000000000000000000000000000000000000000000008152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c6ce059d90614dfb908490600401619531565b602060405180830381865afa158015614e18573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614e3c9190619114565b9b9a5050505050505050505050565b6040517f8d1cc9250000000000000000000000000000000000000000000000000000000081526000908190737109709ecfa91a80626ff3989d68f67f5b1dd12d90638d1cc92590614ea0908790600401619531565b600060405180830381865afa158015614ebd573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052614ee5919081019061962c565b90506000614f138285604051602001614eff929190619661565b60405160208183030381529060405261691d565b90506001600160a01b038116614b4c578484604051602001614d1c929190619690565b614f4282826000616930565b5050565b604080518082018252600381527f6f75740000000000000000000000000000000000000000000000000000000000602082015290517fd145736c000000000000000000000000000000000000000000000000000000008152606091737109709ecfa91a80626ff3989d68f67f5b1dd12d91829063d145736c90614fcd90849060040161973b565b600060405180830381865afa158015614fea573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526150129190810190619782565b9250505090565b61504b6040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b6000737109709ecfa91a80626ff3989d68f67f5b1dd12d90506150966040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b61509f85616a33565b602082015260006150af86616e18565b90506000836001600160a01b031663d930a0e66040518163ffffffff1660e01b8152600401600060405180830381865afa1580156150f1573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526151199190810190619782565b8683856020015160405160200161513394939291906197cb565b60408051601f19818403018152908290527f60f9bb1100000000000000000000000000000000000000000000000000000000825291506000906001600160a01b038616906360f9bb119061518b908590600401619531565b600060405180830381865afa1580156151a8573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526151d09190810190619782565b6040517fdb4235f60000000000000000000000000000000000000000000000000000000081529091506001600160a01b0386169063db4235f6906152189084906004016198cf565b602060405180830381865afa158015615235573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190615259919061922c565b61526e5781604051602001614d1c9190619921565b6040517f49c4fac80000000000000000000000000000000000000000000000000000000081526001600160a01b038616906349c4fac8906152b39084906004016199b3565b600060405180830381865afa1580156152d0573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526152f89190810190619782565b84526040517fdb4235f60000000000000000000000000000000000000000000000000000000081526001600160a01b0386169063db4235f69061533f908490600401619a05565b602060405180830381865afa15801561535c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190615380919061922c565b15615415576040517f49c4fac80000000000000000000000000000000000000000000000000000000081526001600160a01b038616906349c4fac8906153ca908490600401619a05565b600060405180830381865afa1580156153e7573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261540f9190810190619782565b60408501525b846001600160a01b03166349c4fac882866000015160405160200161543a9190619a57565b6040516020818303038152906040526040518363ffffffff1660e01b8152600401615466929190619418565b600060405180830381865afa158015615483573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526154ab9190810190619782565b606085015250608083015250949350505050565b60408051600480825260a0820190925260609160009190816020015b60608152602001906001900390816154db5790505090506040518060400160405280600481526020017f67726570000000000000000000000000000000000000000000000000000000008152508160008151811061553b5761553b619ac3565b60200260200101819052506040518060400160405280600381526020017f2d726c00000000000000000000000000000000000000000000000000000000008152508160018151811061558f5761558f619ac3565b6020026020010181905250846040516020016155ab9190619af2565b604051602081830303815290604052816002815181106155cd576155cd619ac3565b6020026020010181905250826040516020016155e99190619b5e565b6040516020818303038152906040528160038151811061560b5761560b619ac3565b602002602001018190525060006156218261654e565b602080820151604080518082018252600581527f2e6a736f6e00000000000000000000000000000000000000000000000000000081850190815282518084018452600080825290860152825180840190935290518252928101929092529192506156b2906040805180820182526000808252602091820152815180830190925284518252808501908201529061709b565b6156c75785604051602001614d1c9190619b9f565b9695505050505050565b60a0810151604080518082018252600080825260209182015281518083019092528251808352928101910152606090737109709ecfa91a80626ff3989d68f67f5b1dd12d9015615721565b511590565b615895578260200151156157dd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605860248201527f54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f742060448201527f62652075736564207768656e207468652060736b6970566572696679536f757260648201527f6365436f646560206f7074696f6e206973206074727565600000000000000000608482015260a401614d5c565b8260c0015115615895576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605360248201527f54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f742060448201527f62652075736564207768656e207468652060736b69704c6963656e736554797060648201527f6560206f7074696f6e2069732060747275656000000000000000000000000000608482015260a401614d5c565b6040805160ff8082526120008201909252600091816020015b60608152602001906001900390816158ae57905050905060006040518060400160405280600381526020017f6e7078000000000000000000000000000000000000000000000000000000000081525082828061590990619c30565b935060ff168151811061591e5761591e619ac3565b60200260200101819052506040518060400160405280600d81526020017f302e302e312d616c7068612e370000000000000000000000000000000000000081525060405160200161596f9190619c4f565b60405160208183030381529060405282828061598a90619c30565b935060ff168151811061599f5761599f619ac3565b60200260200101819052506040518060400160405280600681526020017f6465706c6f7900000000000000000000000000000000000000000000000000008152508282806159ec90619c30565b935060ff1681518110615a0157615a01619ac3565b60200260200101819052506040518060400160405280600e81526020017f2d2d636f6e74726163744e616d65000000000000000000000000000000000000815250828280615a4e90619c30565b935060ff1681518110615a6357615a63619ac3565b60200260200101819052508760200151828280615a7f90619c30565b935060ff1681518110615a9457615a94619ac3565b60200260200101819052506040518060400160405280600e81526020017f2d2d636f6e747261637450617468000000000000000000000000000000000000815250828280615ae190619c30565b935060ff1681518110615af657615af6619ac3565b602090810291909101015287518282615b0e81619c30565b935060ff1681518110615b2357615b23619ac3565b60200260200101819052506040518060400160405280600981526020017f2d2d636861696e49640000000000000000000000000000000000000000000000815250828280615b7090619c30565b935060ff1681518110615b8557615b85619ac3565b6020026020010181905250615b99466170fc565b8282615ba481619c30565b935060ff1681518110615bb957615bb9619ac3565b60200260200101819052506040518060400160405280600f81526020017f2d2d6275696c64496e666f46696c650000000000000000000000000000000000815250828280615c0690619c30565b935060ff1681518110615c1b57615c1b619ac3565b602002602001018190525086828280615c3390619c30565b935060ff1681518110615c4857615c48619ac3565b6020908102919091010152855115615d6f5760408051808201909152601581527f2d2d636f6e7374727563746f7242797465636f6465000000000000000000000060208201528282615c9981619c30565b935060ff1681518110615cae57615cae619ac3565b60209081029190910101526040517f71aad10d0000000000000000000000000000000000000000000000000000000081526001600160a01b038416906371aad10d90615cfe908990600401619531565b600060405180830381865afa158015615d1b573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052615d439190810190619782565b8282615d4e81619c30565b935060ff1681518110615d6357615d63619ac3565b60200260200101819052505b846020015115615e3f5760408051808201909152601281527f2d2d766572696679536f75726365436f6465000000000000000000000000000060208201528282615db881619c30565b935060ff1681518110615dcd57615dcd619ac3565b60200260200101819052506040518060400160405280600581526020017f66616c7365000000000000000000000000000000000000000000000000000000815250828280615e1a90619c30565b935060ff1681518110615e2f57615e2f619ac3565b6020026020010181905250616006565b615e7761571c8660a0015160408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b615f0a5760408051808201909152600d81527f2d2d6c6963656e7365547970650000000000000000000000000000000000000060208201528282615eba81619c30565b935060ff1681518110615ecf57615ecf619ac3565b60200260200101819052508460a00151604051602001615eef9190619af2565b604051602081830303815290604052828280615e1a90619c30565b8460c00151158015615f4d575060408089015181518083018352600080825260209182015282518084019093528151835290810190820152615f4b90511590565b155b156160065760408051808201909152600d81527f2d2d6c6963656e7365547970650000000000000000000000000000000000000060208201528282615f9181619c30565b935060ff1681518110615fa657615fa6619ac3565b6020026020010181905250615fba8861719c565b604051602001615fca9190619af2565b604051602081830303815290604052828280615fe590619c30565b935060ff1681518110615ffa57615ffa619ac3565b60200260200101819052505b6040808601518151808301835260008082526020918201528251808401909352815183529081019082015261603a90511590565b6160cf5760408051808201909152600b81527f2d2d72656c6179657249640000000000000000000000000000000000000000006020820152828261607d81619c30565b935060ff168151811061609257616092619ac3565b602002602001018190525084604001518282806160ae90619c30565b935060ff16815181106160c3576160c3619ac3565b60200260200101819052505b6060850151156161f05760408051808201909152600681527f2d2d73616c7400000000000000000000000000000000000000000000000000006020820152828261611881619c30565b935060ff168151811061612d5761612d619ac3565b602090810291909101015260608501516040517fb11a19e800000000000000000000000000000000000000000000000000000000815260048101919091526001600160a01b0384169063b11a19e890602401600060405180830381865afa15801561619c573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526161c49190810190619782565b82826161cf81619c30565b935060ff16815181106161e4576161e4619ac3565b60200260200101819052505b60e085015151156162975760408051808201909152600a81527f2d2d6761734c696d6974000000000000000000000000000000000000000000006020820152828261623a81619c30565b935060ff168151811061624f5761624f619ac3565b602002602001018190525061626b8560e00151600001516170fc565b828261627681619c30565b935060ff168151811061628b5761628b619ac3565b60200260200101819052505b60e085015160200151156163415760408051808201909152600a81527f2d2d676173507269636500000000000000000000000000000000000000000000602082015282826162e481619c30565b935060ff16815181106162f9576162f9619ac3565b60200260200101819052506163158560e00151602001516170fc565b828261632081619c30565b935060ff168151811061633557616335619ac3565b60200260200101819052505b60e085015160400151156163eb5760408051808201909152600e81527f2d2d6d61784665655065724761730000000000000000000000000000000000006020820152828261638e81619c30565b935060ff16815181106163a3576163a3619ac3565b60200260200101819052506163bf8560e00151604001516170fc565b82826163ca81619c30565b935060ff16815181106163df576163df619ac3565b60200260200101819052505b60e085015160600151156164955760408051808201909152601681527f2d2d6d61785072696f72697479466565506572476173000000000000000000006020820152828261643881619c30565b935060ff168151811061644d5761644d619ac3565b60200260200101819052506164698560e00151606001516170fc565b828261647481619c30565b935060ff168151811061648957616489619ac3565b60200260200101819052505b60008160ff1667ffffffffffffffff8111156164b3576164b3619544565b6040519080825280602002602001820160405280156164e657816020015b60608152602001906001900390816164d15790505b50905060005b8260ff168160ff16101561653f57838160ff168151811061650f5761650f619ac3565b6020026020010151828260ff168151811061652c5761652c619ac3565b60209081029190910101526001016164ec565b5093505050505b949350505050565b6165756040518060600160405280600060030b815260200160608152602001606081525090565b60408051808201825260048082527f6261736800000000000000000000000000000000000000000000000000000000602083015291517fd145736c000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d92600091849163d145736c916165fb91869101619cba565b600060405180830381865afa158015616618573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526166409190810190619782565b9050600061664e8683617c8b565b90506000846001600160a01b031663f45c1ce7836040518263ffffffff1660e01b815260040161667e9190618fd5565b6000604051808303816000875af115801561669d573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526166c59190810190619d01565b805190915060030b158015906166de5750602081015151155b80156166ed5750604081015151155b156156c7578160008151811061670557616705619ac3565b6020026020010151604051602001614d1c9190619db7565b606060006167528560408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6040805180820182526000808252602091820152815180830190925286518252808701908201529091506167899082905b90617de0565b156168e657600061680682616800846167fa6167cc8a60408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6040805180820182526000808252602091820152815180830190925282518252918201519181019190915290565b90617e07565b90617e69565b604080518082018252600181527f0a000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015290915061686a908290617de0565b156168d457604080518082018252600181527f0a00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526168d1905b8290617eee565b90505b6168dd81617f14565b92505050614c49565b82156168ff578484604051602001614d1c929190619fa3565b5050604080516020810190915260008152614c49565b509392505050565b6000808251602084016000f09392505050565b8160a001511561693f57505050565b600061694c848484617f7d565b905060006169598261654e565b602081015181519192509060030b1580156169f55750604080518082018252600781527f5355434345535300000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526169f590604080518082018252600080825260209182015281518083019092528451825280850190820152616783565b15616a0257505050505050565b60408201515115616a22578160400151604051602001614d1c919061a04a565b80604051602001614d1c919061a0a8565b60606000616a688360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600481527f2e736f6c0000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152909150616acd905b829061709b565b15616b3c57604080518082018252600481527f2e736f6c0000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152614c4990616b37908390618518565b617f14565b604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616b9e905b82906185a2565b600103616c6b57604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616c04906168ca565b50604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152614c4990616b37905b8390617eee565b604080518082018252600581527f2e6a736f6e00000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616cca90616ac6565b15616e0157604080518082018252600181527f2f00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820181905284518086019095529251845283015290616d3290839061863c565b905060008160018351616d459190619323565b81518110616d5557616d55619ac3565b60200260200101519050616df8616b37616dcb6040518060400160405280600581526020017f2e6a736f6e00000000000000000000000000000000000000000000000000000081525060408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b60408051808201825260008082526020918201528151808301909252855182528086019082015290618518565b95945050505050565b82604051602001614d1c919061a113565b50919050565b60606000616e4d8360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600481527f2e736f6c0000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152909150616eaf90616ac6565b15616ebd57614c4981617f14565b604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616f1c90616b97565b600103616f8657604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152614c4990616b3790616c64565b604080518082018252600581527f2e6a736f6e00000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616fe590616ac6565b15616e0157604080518082018252600181527f2f0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082018190528451808601909552925184528301529061704d90839061863c565b90506001815111156170895780600282516170689190619323565b8151811061707857617078619ac3565b602002602001015192505050919050565b5082604051602001614d1c919061a113565b8051825160009111156170b057506000614b50565b815183516020850151600092916170c691619336565b6170d09190619323565b9050826020015181036170e7576001915050614b50565b82516020840151819020912014905092915050565b60606000617109836186e1565b600101905060008167ffffffffffffffff81111561712957617129619544565b6040519080825280601f01601f191660200182016040528015617153576020820181803683370190505b5090508181016020015b600019017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a850494508461715d57509392505050565b604081810151815180830183526000808252602091820181905283518085018552835181529282018383015283518085018552600a81527f554e4c4943454e5345440000000000000000000000000000000000000000000081840190815285518087018752838152840192909252845180860190955251845290830152606091617228905b82906187c3565b1561726857505060408051808201909152600481527f4e6f6e65000000000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600981527f556e6c6963656e73650000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526172c790617221565b1561730757505060408051808201909152600981527f556e6c6963656e736500000000000000000000000000000000000000000000006020820152919050565b604080518082018252600381527f4d495400000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261736690617221565b156173a657505060408051808201909152600381527f4d495400000000000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f47504c2d322e302d6f6e6c7900000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261740590617221565b8061746a5750604080518082018252601081527f47504c2d322e302d6f722d6c61746572000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261746a90617221565b156174aa57505060408051808201909152600981527f474e552047504c763200000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f47504c2d332e302d6f6e6c7900000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261750990617221565b8061756e5750604080518082018252601081527f47504c2d332e302d6f722d6c61746572000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261756e90617221565b156175ae57505060408051808201909152600981527f474e552047504c763300000000000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4c47504c2d322e312d6f6e6c79000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261760d90617221565b806176725750604080518082018252601181527f4c47504c2d322e312d6f722d6c617465720000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261767290617221565b156176b257505060408051808201909152600c81527f474e55204c47504c76322e3100000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4c47504c2d332e302d6f6e6c79000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261771190617221565b806177765750604080518082018252601181527f4c47504c2d332e302d6f722d6c617465720000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261777690617221565b156177b657505060408051808201909152600a81527f474e55204c47504c7633000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f4253442d322d436c6175736500000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261781590617221565b1561785557505060408051808201909152600c81527f4253442d322d436c6175736500000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f4253442d332d436c617573650000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526178b490617221565b156178f457505060408051808201909152600c81527f4253442d332d436c6175736500000000000000000000000000000000000000006020820152919050565b604080518082018252600781527f4d504c2d322e30000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261795390617221565b1561799357505060408051808201909152600781527f4d504c2d322e30000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600781527f4f534c2d332e3000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526179f290617221565b15617a3257505060408051808201909152600781527f4f534c2d332e30000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600a81527f4170616368652d322e300000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617a9190617221565b15617ad157505060408051808201909152600a81527f4170616368652d322e30000000000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4147504c2d332e302d6f6e6c790000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617b3090617221565b80617b955750604080518082018252601181527f4147504c2d332e302d6f722d6c6174657200000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617b9590617221565b15617bd557505060408051808201909152600a81527f474e55204147504c7633000000000000000000000000000000000000000000006020820152919050565b604080518082018252600881527f4255534c2d312e3100000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617c3490617221565b15617c7457505060408051808201909152600781527f42534c20312e31000000000000000000000000000000000000000000000000006020820152919050565b60408084015184519151614d1c929060200161a1f1565b60608060005b8451811015617d165781858281518110617cad57617cad619ac3565b6020026020010151604051602001617cc6929190619661565b604051602081830303815290604052915060018551617ce59190619323565b8114617d0e5781604051602001617cfc919061a35a565b60405160208183030381529060405291505b600101617c91565b5060408051600380825260808201909252600091816020015b6060815260200190600190039081617d2f5790505090508381600081518110617d5a57617d5a619ac3565b60200260200101819052506040518060400160405280600281526020017f2d6300000000000000000000000000000000000000000000000000000000000081525081600181518110617dae57617dae619ac3565b60200260200101819052508181600281518110617dcd57617dcd619ac3565b6020908102919091010152949350505050565b6020808301518351835192840151600093617dfe92918491906187d7565b14159392505050565b60408051808201909152600080825260208201526000617e3984600001518560200151856000015186602001516188e8565b9050836020015181617e4b9190619323565b84518590617e5a908390619323565b90525060208401525090919050565b6040805180820190915260008082526020820152815183511015617e8e575081614b50565b6020808301519084015160019114617eb55750815160208481015190840151829020919020145b8015617ee657825184518590617ecc908390619323565b9052508251602085018051617ee2908390619336565b9052505b509192915050565b6040805180820190915260008082526020820152617f0d838383618a08565b5092915050565b60606000826000015167ffffffffffffffff811115617f3557617f35619544565b6040519080825280601f01601f191660200182016040528015617f5f576020820181803683370190505b5090506000602082019050617f0d8185602001518660000151618ab3565b60606000617f89614f46565b6040805160ff808252612000820190925291925060009190816020015b6060815260200190600190039081617fa657905050905060006040518060400160405280600381526020017f6e7078000000000000000000000000000000000000000000000000000000000081525082828061800190619c30565b935060ff168151811061801657618016619ac3565b60200260200101819052506040518060400160405280600781526020017f5e312e33322e3300000000000000000000000000000000000000000000000000815250604051602001618067919061a39b565b60405160208183030381529060405282828061808290619c30565b935060ff168151811061809757618097619ac3565b60200260200101819052506040518060400160405280600881526020017f76616c69646174650000000000000000000000000000000000000000000000008152508282806180e490619c30565b935060ff16815181106180f9576180f9619ac3565b6020026020010181905250826040516020016181159190619b5e565b60405160208183030381529060405282828061813090619c30565b935060ff168151811061814557618145619ac3565b60200260200101819052506040518060400160405280600a81526020017f2d2d636f6e74726163740000000000000000000000000000000000000000000081525082828061819290619c30565b935060ff16815181106181a7576181a7619ac3565b60200260200101819052506181bc8784618b2d565b82826181c781619c30565b935060ff16815181106181dc576181dc619ac3565b6020908102919091010152855151156182885760408051808201909152600b81527f2d2d7265666572656e63650000000000000000000000000000000000000000006020820152828261822e81619c30565b935060ff168151811061824357618243619ac3565b602002602001018190525061825c866000015184618b2d565b828261826781619c30565b935060ff168151811061827c5761827c619ac3565b60200260200101819052505b8560800151156182f65760408051808201909152601881527f2d2d756e73616665536b697053746f72616765436865636b0000000000000000602082015282826182d181619c30565b935060ff16815181106182e6576182e6619ac3565b602002602001018190525061835c565b841561835c5760408051808201909152601281527f2d2d726571756972655265666572656e636500000000000000000000000000006020820152828261833b81619c30565b935060ff168151811061835057618350619ac3565b60200260200101819052505b604086015151156183f85760408051808201909152600d81527f2d2d756e73616665416c6c6f7700000000000000000000000000000000000000602082015282826183a681619c30565b935060ff16815181106183bb576183bb619ac3565b602002602001018190525085604001518282806183d790619c30565b935060ff16815181106183ec576183ec619ac3565b60200260200101819052505b8560600151156184625760408051808201909152601481527f2d2d756e73616665416c6c6f7752656e616d65730000000000000000000000006020820152828261844181619c30565b935060ff168151811061845657618456619ac3565b60200260200101819052505b60008160ff1667ffffffffffffffff81111561848057618480619544565b6040519080825280602002602001820160405280156184b357816020015b606081526020019060019003908161849e5790505b50905060005b8260ff168160ff16101561850c57838160ff16815181106184dc576184dc619ac3565b6020026020010151828260ff16815181106184f9576184f9619ac3565b60209081029190910101526001016184b9565b50979650505050505050565b604080518082019091526000808252602082015281518351101561853d575081614b50565b8151835160208501516000929161855391619336565b61855d9190619323565b6020840151909150600190821461857e575082516020840151819020908220145b801561859957835185518690618595908390619323565b9052505b50929392505050565b60008082600001516185c685600001518660200151866000015187602001516188e8565b6185d09190619336565b90505b835160208501516185e49190619336565b8111617f0d57816185f48161a3e0565b925050826000015161862b85602001518361860f9190619323565b865161861b9190619323565b83866000015187602001516188e8565b6186359190619336565b90506185d3565b6060600061864a84846185a2565b618655906001619336565b67ffffffffffffffff81111561866d5761866d619544565b6040519080825280602002602001820160405280156186a057816020015b606081526020019060019003908161868b5790505b50905060005b8151811015616915576186bc616b378686617eee565b8282815181106186ce576186ce619ac3565b60209081029190910101526001016186a6565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000831061872a577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310618756576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc10000831061877457662386f26fc10000830492506010015b6305f5e100831061878c576305f5e100830492506008015b61271083106187a057612710830492506004015b606483106187b2576064830492506002015b600a8310614b505760010192915050565b60006187cf8383618b6d565b159392505050565b6000808584116188de576020841161888a57600084156188225760016187fe866020619323565b61880990600861a3fa565b61881490600261a4f8565b61881e9190619323565b1990505b83518116856188318989619336565b61883b9190619323565b805190935082165b8181146188755787841161885d5787945050505050616546565b836188678161a504565b945050828451169050618843565b61887f8785619336565b945050505050616546565b8383206188978588619323565b6188a19087619336565b91505b8582106188dc578482208082036188c9576188bf8684619336565b9350505050616546565b6188d4600184619323565b9250506188a4565b505b5092949350505050565b600083818685116189f357602085116189a25760008515618934576001618910876020619323565b61891b90600861a3fa565b61892690600261a4f8565b6189309190619323565b1990505b845181166000876189458b8b619336565b61894f9190619323565b855190915083165b8281146189945781861061897c5761896f8b8b619336565b9650505050505050616546565b856189868161a3e0565b965050838651169050618957565b859650505050505050616546565b508383206000905b6189b48689619323565b82116189f1578583208082036189d05783945050505050616546565b6189db600185619336565b93505081806189e99061a3e0565b9250506189aa565b505b6189fd8787619336565b979650505050505050565b60408051808201909152600080825260208201526000618a3a85600001518660200151866000015187602001516188e8565b602080870180519186019190915251909150618a569082619323565b835284516020860151618a699190619336565b8103618a785760008552618aaa565b83518351618a869190619336565b85518690618a95908390619323565b9052508351618aa49082619336565b60208601525b50909392505050565b60208110618aeb5781518352618aca602084619336565b9250618ad7602083619336565b9150618ae4602082619323565b9050618ab3565b6000198115618b1a576001618b01836020619323565b618b0d9061010061a4f8565b618b179190619323565b90505b9151835183169219169190911790915250565b60606000618b3b8484615019565b8051602080830151604051939450618b559390910161a51b565b60405160208183030381529060405291505092915050565b8151815160009190811115618b80575081515b6020808501519084015160005b83811015618c395782518251808214618c09576000196020871015618be857600184618bba896020619323565b618bc49190619336565b618bcf90600861a3fa565b618bda90600261a4f8565b618be49190619323565b1990505b8181168382168181039114618c06579750614b509650505050505050565b50505b618c14602086619336565b9450618c21602085619336565b93505050602081618c329190619336565b9050618b8d565b50845186516156c7919061a573565b610b678061a59483390190565b61053f8061b0fb83390190565b61106f8061b63a83390190565b611bb98061c6a983390190565b6040518060e00160405280606081526020016060815260200160608152602001600015158152602001600015158152602001600015158152602001618cbf618cc4565b905290565b60405180610100016040528060001515815260200160001515815260200160608152602001600080191681526020016060815260200160608152602001600015158152602001618cbf6040518060800160405280600081526020016000815260200160008152602001600081525090565b602080825282518282018190526000918401906040840190835b81811015618d765783516001600160a01b0316835260209384019390920191600101618d4f565b509095945050505050565b60005b83811015618d9c578181015183820152602001618d84565b50506000910152565b60008151808452618dbd816020860160208601618d81565b601f01601f19169290920160200192915050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015618ecd577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452815180516001600160a01b03168652602090810151604082880181905281519088018190529101906060600582901b88018101919088019060005b81811015618eb3577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa08a8503018352618e9d848651618da5565b6020958601959094509290920191600101618e63565b509197505050602094850194929092019150600101618df9565b50929695505050505050565b600081518084526020840193506020830160005b82811015618f2d5781517fffffffff0000000000000000000000000000000000000000000000000000000016865260209586019590910190600101618eed565b5093949350505050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015618ecd577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08786030184528151805160408752618fa36040880182618da5565b9050602082015191508681036020880152618fbe8183618ed9565b965050506020938401939190910190600101618f5f565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015618ecd577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452619037858351618da5565b94506020938401939190910190600101618ffd565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015618ecd577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc087860301845281516001600160a01b03815116865260208101519050604060208701526190cd6040870182618ed9565b9550506020938401939190910190600101619074565b6080815260006190f66080830187618da5565b85602084015284604084015282810360608401526189fd8185618da5565b60006020828403121561912657600080fd5b81516001600160a01b0381168114614c4957600080fd5b610100815260056101008201527f544f4b454e000000000000000000000000000000000000000000000000000000610120820152610140602082015260036101408201527f544b4e000000000000000000000000000000000000000000000000000000000061016082015260006101808201905060ff88166040830152866060830152600386106191f7577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b8560808301528460a083015261921860c08301856001600160a01b03169052565b6001600160a01b03831660e08301526189fd565b60006020828403121561923e57600080fd5b81518015158114614c4957600080fd5b60006020828403121561926057600080fd5b5051919050565b60808152600061927a6080830187618da5565b8560208401526001600160a01b038516604084015282810360608401526189fd8185618da5565b60c0815260006192b460c0830189618da5565b6001600160a01b038816602084015286604084015285606084015284608084015282810360a08401526192e78185618da5565b9998505050505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b81810381811115614b5057614b506192f4565b80820180821115614b5057614b506192f4565b60608152600061935c6060830186618da5565b60208301949094525060400152919050565b600181811c9082168061938257607f821691505b602082108103616e12577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6060815260006193ce6060830186618da5565b84602084015282810360408401526156c78185618da5565b6060815260006193f96060830186618da5565b90508360208301526001600160a01b0383166040830152949350505050565b60408152600061942b6040830185618da5565b8281036020840152614c458185618da5565b60c08152600061945060c0830188618da5565b6001600160a01b038716602084015285604084015284606084015283608084015282810360a084015260008152602081019150509695505050505050565b6001600160a01b03831681526040602082015260006165466040830184618da5565b7f4661696c656420746f206465706c6f7920636f6e7472616374200000000000008152600083516194e881601a850160208801618d81565b7f3a20000000000000000000000000000000000000000000000000000000000000601a91840191820152835161952581601c840160208801618d81565b01601c01949350505050565b602081526000614c496020830184618da5565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040516060810167ffffffffffffffff8111828210171561959657619596619544565b60405290565b60008067ffffffffffffffff8411156195b7576195b7619544565b50604051601f19601f85018116603f0116810181811067ffffffffffffffff821117156195e6576195e6619544565b6040528381529050808284018510156195fe57600080fd5b616915846020830185618d81565b600082601f83011261961d57600080fd5b614c498383516020850161959c565b60006020828403121561963e57600080fd5b815167ffffffffffffffff81111561965557600080fd5b614b4c8482850161960c565b60008351619673818460208801618d81565b835190830190619687818360208801618d81565b01949350505050565b7f4661696c656420746f206465706c6f7920636f6e7472616374200000000000008152600083516196c881601a850160208801618d81565b7f207573696e6720636f6e7374727563746f722064617461202200000000000000601a918401918201528351619705816033840160208801618d81565b7f220000000000000000000000000000000000000000000000000000000000000060339290910191820152603401949350505050565b60408152600b60408201527f464f554e4452595f4f55540000000000000000000000000000000000000000006060820152608060208201526000614c496080830184618da5565b60006020828403121561979457600080fd5b815167ffffffffffffffff8111156197ab57600080fd5b8201601f810184136197bc57600080fd5b614b4c8482516020840161959c565b600085516197dd818460208a01618d81565b7f2f000000000000000000000000000000000000000000000000000000000000009083019081528551619817816001840160208a01618d81565b7f2f00000000000000000000000000000000000000000000000000000000000000600192909101918201528451619855816002840160208901618d81565b6001818301019150507f2f0000000000000000000000000000000000000000000000000000000000000060018201528351619897816002840160208801618d81565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600292909101918201526007019695505050505050565b6040815260006198e26040830184618da5565b8281036020840152600481527f2e6173740000000000000000000000000000000000000000000000000000000060208201526040810191505092915050565b7f436f756c64206e6f742066696e642041535420696e206172746966616374200081526000825161995981601f850160208701618d81565b7f2e205365742060617374203d20747275656020696e20666f756e6472792e746f601f9390910192830152507f6d6c000000000000000000000000000000000000000000000000000000000000603f820152604101919050565b6040815260006199c66040830184618da5565b8281036020840152601181527f2e6173742e6162736f6c7574655061746800000000000000000000000000000060208201526040810191505092915050565b604081526000619a186040830184618da5565b8281036020840152600c81527f2e6173742e6c6963656e7365000000000000000000000000000000000000000060208201526040810191505092915050565b7f2e6d657461646174612e736f75726365732e5b27000000000000000000000000815260008251619a8f816014850160208701618d81565b7f275d2e6b656363616b32353600000000000000000000000000000000000000006014939091019283015250602001919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f2200000000000000000000000000000000000000000000000000000000000000815260008251619b2a816001850160208701618d81565b7f22000000000000000000000000000000000000000000000000000000000000006001939091019283015250600201919050565b60008251619b70818460208701618d81565b7f2f6275696c642d696e666f000000000000000000000000000000000000000000920191825250600b01919050565b7f436f756c64206e6f742066696e64206275696c642d696e666f2066696c65207781527f697468206d61746368696e6720736f7572636520636f6465206861736820666f60208201527f7220636f6e747261637420000000000000000000000000000000000000000000604082015260008251619c2381604b850160208701618d81565b91909101604b0192915050565b600060ff821660ff8103619c4657619c466192f4565b60010192915050565b7f406f70656e7a657070656c696e2f646566656e6465722d6465706c6f792d636c81527f69656e742d636c69400000000000000000000000000000000000000000000000602082015260008251619cad816029850160208701618d81565b9190910160290192915050565b60408152601660408201527f4f50454e5a455050454c494e5f424153485f50415448000000000000000000006060820152608060208201526000614c496080830184618da5565b600060208284031215619d1357600080fd5b815167ffffffffffffffff811115619d2a57600080fd5b820160608185031215619d3c57600080fd5b619d44619573565b81518060030b8114619d5557600080fd5b8152602082015167ffffffffffffffff811115619d7157600080fd5b619d7d8682850161960c565b602083015250604082015167ffffffffffffffff811115619d9d57600080fd5b619da98682850161960c565b604083015250949350505050565b7f4661696c656420746f2072756e206261736820636f6d6d616e6420776974682081527f2200000000000000000000000000000000000000000000000000000000000000602082015260008251619e15816021850160208701618d81565b7f222e20496620796f7520617265207573696e672057696e646f77732c2073657460219390910192830152507f20746865204f50454e5a455050454c494e5f424153485f5041544820656e766960418201527f726f6e6d656e74207661726961626c6520746f207468652066756c6c7920717560618201527f616c69666965642070617468206f66207468652062617368206578656375746160818201527f626c652e20466f72206578616d706c652c20696620796f75206172652075736960a18201527f6e672047697420666f722057696e646f77732c206164642074686520666f6c6c60c18201527f6f77696e67206c696e6520696e20746865202e656e762066696c65206f66207960e18201527f6f75722070726f6a65637420287573696e6720666f727761726420736c6173686101018201527f6573293a0a4f50454e5a455050454c494e5f424153485f504154483d22433a2f6101218201527f50726f6772616d2046696c65732f4769742f62696e2f6261736822000000000061014182015261015c01919050565b7f4661696c656420746f2066696e64206c696e652077697468207072656669782081527f270000000000000000000000000000000000000000000000000000000000000060208201526000835161a001816021850160208801618d81565b7f2720696e206f75747075743a2000000000000000000000000000000000000000602191840191820152835161a03e81602e840160208801618d81565b01602e01949350505050565b7f4661696c656420746f2072756e2075706772616465207361666574792076616c81527f69646174696f6e3a200000000000000000000000000000000000000000000000602082015260008251619cad816029850160208701618d81565b7f55706772616465207361666574792076616c69646174696f6e206661696c656481527f3a0a00000000000000000000000000000000000000000000000000000000000060208201526000825161a106816022850160208701618d81565b9190910160220192915050565b7f436f6e7472616374206e616d652000000000000000000000000000000000000081526000825161a14b81600e850160208701618d81565b7f206d75737420626520696e2074686520666f726d6174204d79436f6e74726163600e9390910192830152507f742e736f6c3a4d79436f6e7472616374206f72204d79436f6e74726163742e73602e8201527f6f6c206f72206f75742f4d79436f6e74726163742e736f6c2f4d79436f6e7472604e8201527f6163742e6a736f6e000000000000000000000000000000000000000000000000606e820152607601919050565b7f53504458206c6963656e7365206964656e74696669657220000000000000000081526000835161a229816018850160208801618d81565b7f20696e2000000000000000000000000000000000000000000000000000000000601891840191820152835161a26681601c840160208801618d81565b7f20646f6573206e6f74206c6f6f6b206c696b65206120737570706f7274656420601c92909101918201527f6c6963656e736520666f7220626c6f636b206578706c6f726572207665726966603c8201527f69636174696f6e2e205573652074686520606c6963656e73655479706560206f605c8201527f7074696f6e20746f20737065636966792061206c6963656e736520747970652c607c8201527f206f7220736574207468652060736b69704c6963656e73655479706560206f70609c8201527f74696f6e20746f2060747275656020746f20736b69702e00000000000000000060bc82015260d301949350505050565b6000825161a36c818460208701618d81565b7f2000000000000000000000000000000000000000000000000000000000000000920191825250600101919050565b7f406f70656e7a657070656c696e2f75706772616465732d636f7265400000000081526000825161a3d381601c850160208701618d81565b91909101601c0192915050565b6000600019820361a3f35761a3f36192f4565b5060010190565b8082028115828204841417614b5057614b506192f4565b6001815b600184111561a44c5780850481111561a4305761a4306192f4565b600184161561a43e57908102905b60019390931c92800261a415565b935093915050565b60008261a46357506001614b50565b8161a47057506000614b50565b816001811461a486576002811461a4905761a4ac565b6001915050614b50565b60ff84111561a4a15761a4a16192f4565b50506001821b614b50565b5060208310610133831016604e8410600b841016171561a4cf575081810a614b50565b61a4dc600019848461a411565b806000190482111561a4f05761a4f06192f4565b029392505050565b6000614c49838361a454565b60008161a5135761a5136192f4565b506000190190565b6000835161a52d818460208801618d81565b7f3a00000000000000000000000000000000000000000000000000000000000000908301908152835161a567816001840160208801618d81565b01600101949350505050565b8181036000831280158383131683831282161715617f0d57617f0d6192f456fe60c0604052600d60809081526c2bb930b83832b21022ba3432b960991b60a05260009061002c9082610114565b506040805180820190915260048152630ae8aa8960e31b60208201526001906100559082610114565b506002805460ff1916601217905534801561006f57600080fd5b506101d2565b634e487b7160e01b600052604160045260246000fd5b600181811c9082168061009f57607f821691505b6020821081036100bf57634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111561010f57806000526020600020601f840160051c810160208510156100ec5750805b601f840160051c820191505b8181101561010c57600081556001016100f8565b50505b505050565b81516001600160401b0381111561012d5761012d610075565b6101418161013b845461008b565b846100c5565b6020601f821160018114610175576000831561015d5750848201515b600019600385901b1c1916600184901b17845561010c565b600084815260208120601f198516915b828110156101a55787850151825560209485019460019092019101610185565b50848210156101c35786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b610986806101e16000396000f3fe6080604052600436106100c05760003560e01c8063313ce56711610074578063a9059cbb1161004e578063a9059cbb146101fa578063d0e30db01461021a578063dd62ed3e1461022257600080fd5b8063313ce5671461018c57806370a08231146101b857806395d89b41146101e557600080fd5b806318160ddd116100a557806318160ddd1461012f57806323b872dd1461014c5780632e1a7d4d1461016c57600080fd5b806306fdde03146100d4578063095ea7b3146100ff57600080fd5b366100cf576100cd61025a565b005b600080fd5b3480156100e057600080fd5b506100e96102b5565b6040516100f69190610745565b60405180910390f35b34801561010b57600080fd5b5061011f61011a3660046107da565b610343565b60405190151581526020016100f6565b34801561013b57600080fd5b50475b6040519081526020016100f6565b34801561015857600080fd5b5061011f610167366004610804565b6103bd565b34801561017857600080fd5b506100cd610187366004610841565b610647565b34801561019857600080fd5b506002546101a69060ff1681565b60405160ff90911681526020016100f6565b3480156101c457600080fd5b5061013e6101d336600461085a565b60036020526000908152604090205481565b3480156101f157600080fd5b506100e9610724565b34801561020657600080fd5b5061011f6102153660046107da565b610731565b6100cd61025a565b34801561022e57600080fd5b5061013e61023d366004610875565b600460209081526000928352604080842090915290825290205481565b33600090815260036020526040812080543492906102799084906108d7565b909155505060405134815233907fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c9060200160405180910390a2565b600080546102c2906108ea565b80601f01602080910402602001604051908101604052809291908181526020018280546102ee906108ea565b801561033b5780601f106103105761010080835404028352916020019161033b565b820191906000526020600020905b81548152906001019060200180831161031e57829003601f168201915b505050505081565b33600081815260046020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925906103ab9086815260200190565b60405180910390a35060015b92915050565b73ffffffffffffffffffffffffffffffffffffffff831660009081526003602052604081205482111561042b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600060248201526044015b60405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff841633148015906104a1575073ffffffffffffffffffffffffffffffffffffffff841660009081526004602090815260408083203384529091529020547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff14155b156105605773ffffffffffffffffffffffffffffffffffffffff8416600090815260046020908152604080832033845290915290205482111561051a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526020600482015260006024820152604401610422565b73ffffffffffffffffffffffffffffffffffffffff841660009081526004602090815260408083203384529091528120805484929061055a90849061093d565b90915550505b73ffffffffffffffffffffffffffffffffffffffff84166000908152600360205260408120805484929061059590849061093d565b909155505073ffffffffffffffffffffffffffffffffffffffff8316600090815260036020526040812080548492906105cf9084906108d7565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161063591815260200190565b60405180910390a35060019392505050565b3360009081526003602052604090205481111561069a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526020600482015260006024820152604401610422565b33600090815260036020526040812080548392906106b990849061093d565b9091555050604051339082156108fc029083906000818181858888f193505050501580156106eb573d6000803e3d6000fd5b5060405181815233907f7fcf532c15f0a6db0bd6d0e038bea71d30d808c7d98cb3bf7268a95bf5081b659060200160405180910390a250565b600180546102c2906108ea565b600061073e3384846103bd565b9392505050565b602081526000825180602084015260005b818110156107735760208186018101516040868401015201610756565b5060006040828501015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011684010191505092915050565b803573ffffffffffffffffffffffffffffffffffffffff811681146107d557600080fd5b919050565b600080604083850312156107ed57600080fd5b6107f6836107b1565b946020939093013593505050565b60008060006060848603121561081957600080fd5b610822846107b1565b9250610830602085016107b1565b929592945050506040919091013590565b60006020828403121561085357600080fd5b5035919050565b60006020828403121561086c57600080fd5b61073e826107b1565b6000806040838503121561088857600080fd5b610891836107b1565b915061089f602084016107b1565b90509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b808201808211156103b7576103b76108a8565b600181811c908216806108fe57607f821691505b602082108103610937577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b818103818111156103b7576103b76108a856fea264697066735822122008d7fc4e09519c5dd9f356b03596f6829a151d0bc7682533f9ceab4e459f5ee264736f6c634300081a00336080604052348015600f57600080fd5b506105208061001f6000396000f3fe60806040526004361061002a5760003560e01c806369582bee14610033578063de43156e1461005357005b3661003157005b005b34801561003f57600080fd5b5061003161004e3660046101ba565b610073565b34801561005f57600080fd5b5061003161006e3660046101ba565b6100ee565b6060811561008a5761008782840184610273565b90505b7ffdc887992b033668833927e252058e468fac0b6bd196d520f09c61b740e999486100b58780610369565b6100c560408a0160208b016103ce565b896040013533866040516100de969594939291906103f0565b60405180910390a1505050505050565b606081156101055761010282840184610273565b90505b7fcdc8ee677dc5ebe680fb18cebda5e26ba5ea1f0ba504a47e2a9a2ecb476dc98e6100b58780610369565b60006060828403121561014257600080fd5b50919050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461016c57600080fd5b919050565b60008083601f84011261018357600080fd5b50813567ffffffffffffffff81111561019b57600080fd5b6020830191508360208285010111156101b357600080fd5b9250929050565b6000806000806000608086880312156101d257600080fd5b853567ffffffffffffffff8111156101e957600080fd5b6101f588828901610130565b95505061020460208701610148565b935060408601359250606086013567ffffffffffffffff81111561022757600080fd5b61023388828901610171565b969995985093965092949392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60006020828403121561028557600080fd5b813567ffffffffffffffff81111561029c57600080fd5b8201601f810184136102ad57600080fd5b803567ffffffffffffffff8111156102c7576102c7610244565b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8501160116810181811067ffffffffffffffff8211171561033357610333610244565b60405281815282820160200186101561034b57600080fd5b81602084016020830137600091810160200191909152949350505050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261039e57600080fd5b83018035915067ffffffffffffffff8211156103b957600080fd5b6020019150368190038213156101b357600080fd5b6000602082840312156103e057600080fd5b6103e982610148565b9392505050565b60a081528560a0820152858760c0830137600060c0878301015260007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f880116820173ffffffffffffffffffffffffffffffffffffffff8716602084015285604084015273ffffffffffffffffffffffffffffffffffffffff8516606084015260c083820301608084015283518060c083015260005b818110156104a557602081870181015184830160e0015201610488565b50600060e0838301810191909152601f9091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016909101019897505050505050505056fea2646970667358221220b5ac4aa023957e7bc2aaba2c22840cdbf052fb679bd912caa0c8614a69afc7b164736f6c634300081a003360c060405234801561001057600080fd5b5060405161106f38038061106f83398101604081905261002f916100db565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461006357604051632b2add3d60e01b815260040160405180910390fd5b600380546001600160a01b0319166001600160a01b0385811691909117909155828116608052811660a0526040517f80699e81136d69cb8367ad52a994e25c722a86da654b561d0c14b61a777e7ac590600090a150505061011e565b80516001600160a01b03811681146100d657600080fd5b919050565b6000806000606084860312156100f057600080fd5b6100f9846100bf565b9250610107602085016100bf565b9150610115604085016100bf565b90509250925092565b60805160a051610f2561014a60003960006101e50152600081816102b9015261045b0152610f256000f3fe608060405234801561001057600080fd5b50600436106100f55760003560e01c806397770dff11610097578063c63585cc11610066578063c63585cc14610273578063d7fd7afb14610286578063d936a012146102b4578063ee2815ba146102db57600080fd5b806397770dff1461021a578063a7cb05071461022d578063c39aca3714610240578063c62178ac1461025357600080fd5b8063513a9c05116100d3578063513a9c051461018a578063569541b9146101c0578063842da36d146101e057806391dd645f1461020757600080fd5b80630be15547146100fa5780631f0e251b1461015a5780633ce4a5bc1461016f575b600080fd5b610130610108366004610bd1565b60016020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b61016d610168366004610c13565b6102ee565b005b61013073735b14bb79463307aacbed86daf3322b1e6226ab81565b610130610198366004610bd1565b60026020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b6003546101309073ffffffffffffffffffffffffffffffffffffffff1681565b6101307f000000000000000000000000000000000000000000000000000000000000000081565b61016d610215366004610c35565b610402565b61016d610228366004610c13565b610526565b61016d61023b366004610c61565b610633565b61016d61024e366004610c83565b6106ce565b6004546101309073ffffffffffffffffffffffffffffffffffffffff1681565b610130610281366004610d53565b6108cd565b6102a6610294366004610bd1565b60006020819052908152604090205481565b604051908152602001610151565b6101307f000000000000000000000000000000000000000000000000000000000000000081565b61016d6102e9366004610c35565b610a02565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461033b576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116610388576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600480547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527f3ade88e3922d64780e1bf4460d364c2970b69da813f9c0c07a1c187b5647636c906020015b60405180910390a150565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461044f576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600354600090610497907f00000000000000000000000000000000000000000000000000000000000000009073ffffffffffffffffffffffffffffffffffffffff16846108cd565b60008481526002602090815260409182902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff85169081179091558251878152918201529192507f0ecec485166da6139b13bb7e033e9446e2d35348e80ebf1180d4afe2dba1704e910160405180910390a1505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610573576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff81166105c0576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527fdba79d534382d1a8ae108e4c8ecb27c6ae42ab8b91d44eedf88bd329f3868d5e906020016103f7565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610680576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000828152602081815260409182902083905581518481529081018390527f49f492222906ac486c3c1401fa545626df1f0c0e5a77a05597ea2ed66af9850d91015b60405180910390a15050565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461071b576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff831673735b14bb79463307aacbed86daf3322b1e6226ab1480610768575073ffffffffffffffffffffffffffffffffffffffff831630145b1561079f576040517f82d5d76a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f47e7ef2400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152602482018690528616906347e7ef24906044016020604051808303816000875af1158015610814573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108389190610d96565b506040517fde43156e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84169063de43156e906108939089908990899088908890600401610e01565b600060405180830381600087803b1580156108ad57600080fd5b505af11580156108c1573d6000803e3d6000fd5b50505050505050505050565b60008060006108dc8585610ad3565b6040517fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606084811b8216602084015283901b16603482015291935091508690604801604051602081830303815290604052805190602001206040516020016109c29291907fff00000000000000000000000000000000000000000000000000000000000000815260609290921b7fffffffffffffffffffffffffffffffffffffffff00000000000000000000000016600183015260158201527f96e8ac4277198ff8b6f785478aa9a39f403cb768dd02cbee326c3e7da348845f603582015260550190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291905280516020909101209695505050505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610a4f576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008281526001602090815260409182902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff85169081179091558251858152918201527fd1b36d30f6248e97c473b4d1348ca164a4ef6759022f54a58ec200326c39c45d91016106c2565b6000808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603610b3b576040517fcb1e7cfe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1610610b75578284610b78565b83835b909250905073ffffffffffffffffffffffffffffffffffffffff8216610bca576040517f78b507da00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b9250929050565b600060208284031215610be357600080fd5b5035919050565b803573ffffffffffffffffffffffffffffffffffffffff81168114610c0e57600080fd5b919050565b600060208284031215610c2557600080fd5b610c2e82610bea565b9392505050565b60008060408385031215610c4857600080fd5b82359150610c5860208401610bea565b90509250929050565b60008060408385031215610c7457600080fd5b50508035926020909101359150565b60008060008060008060a08789031215610c9c57600080fd5b863567ffffffffffffffff811115610cb357600080fd5b87016060818a031215610cc557600080fd5b9550610cd360208801610bea565b945060408701359350610ce860608801610bea565b9250608087013567ffffffffffffffff811115610d0457600080fd5b8701601f81018913610d1557600080fd5b803567ffffffffffffffff811115610d2c57600080fd5b896020828401011115610d3e57600080fd5b60208201935080925050509295509295509295565b600080600060608486031215610d6857600080fd5b610d7184610bea565b9250610d7f60208501610bea565b9150610d8d60408501610bea565b90509250925092565b600060208284031215610da857600080fd5b81518015158114610c2e57600080fd5b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b60808152600086357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1883603018112610e3957600080fd5b870160208101903567ffffffffffffffff811115610e5657600080fd5b803603821315610e6557600080fd5b60606080850152610e7a60e085018284610db8565b91505073ffffffffffffffffffffffffffffffffffffffff610e9e60208a01610bea565b1660a0840152604088013560c084015273ffffffffffffffffffffffffffffffffffffffff871660208401528560408401528281036060840152610ee3818587610db8565b9897505050505050505056fea2646970667358221220fea45cb058045b493e646c8b9505ea080ab95fd7ed4498b922d179cf1abec08e64736f6c634300081a003360e060405234801561001057600080fd5b50604051611bb9380380611bb983398101604081905261002f9161020e565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461006357604051632b2add3d60e01b815260040160405180910390fd5b6001600160a01b038216158061008057506001600160a01b038116155b1561009e5760405163d92e233d60e01b815260040160405180910390fd5b60066100aa8982610360565b5060076100b78882610360565b5060ff861660c05260808590528360028111156100d6576100d661041e565b60a08160028111156100ea576100ea61041e565b905250600192909255600080546001600160a01b039283166001600160a01b03199182161790915560088054929093169116179055506104349350505050565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261015157600080fd5b81516001600160401b0381111561016a5761016a61012a565b604051601f8201601f19908116603f011681016001600160401b03811182821017156101985761019861012a565b6040528181528382016020018510156101b057600080fd5b60005b828110156101cf576020818601810151838301820152016101b3565b506000918101602001919091529392505050565b8051600381106101f257600080fd5b919050565b80516001600160a01b03811681146101f257600080fd5b600080600080600080600080610100898b03121561022b57600080fd5b88516001600160401b0381111561024157600080fd5b61024d8b828c01610140565b60208b015190995090506001600160401b0381111561026b57600080fd5b6102778b828c01610140565b975050604089015160ff8116811461028e57600080fd5b60608a015190965094506102a460808a016101e3565b60a08a015190945092506102ba60c08a016101f7565b91506102c860e08a016101f7565b90509295985092959890939650565b600181811c908216806102eb57607f821691505b60208210810361030b57634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111561035b57806000526020600020601f840160051c810160208510156103385750805b601f840160051c820191505b818110156103585760008155600101610344565b50505b505050565b81516001600160401b038111156103795761037961012a565b61038d8161038784546102d7565b84610311565b6020601f8211600181146103c157600083156103a95750848201515b600019600385901b1c1916600184901b178455610358565b600084815260208120601f198516915b828110156103f157878501518255602094850194600190920191016103d1565b508482101561040f5786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b634e487b7160e01b600052602160045260246000fd5b60805160a05160c05161174861047160003960006102170152600061033a0152600081816102eb01528181610ad70152610bdd01526117486000f3fe608060405234801561001057600080fd5b50600436106101985760003560e01c80638b851b95116100e3578063ccc775991161008c578063eddeb12311610066578063eddeb12314610431578063f2441b3214610444578063f687d12a1461046457600080fd5b8063ccc77599146103a4578063d9eeebed146103b7578063dd62ed3e146103eb57600080fd5b8063a9059cbb116100bd578063a9059cbb14610369578063c70126261461037c578063c835d7cc1461038f57600080fd5b80638b851b951461030d57806395d89b411461032d578063a3413d031461033557600080fd5b80633ce4a5bc116101455780634d8943bb1161011f5780634d8943bb146102a757806370a08231146102b057806385e1f4d0146102e657600080fd5b80633ce4a5bc1461024157806342966c681461028157806347e7ef241461029457600080fd5b806318160ddd1161017657806318160ddd146101f557806323b872dd146101fd578063313ce5671461021057600080fd5b806306fdde031461019d578063091d2788146101bb578063095ea7b3146101d2575b600080fd5b6101a5610477565b6040516101b29190611327565b60405180910390f35b6101c460015481565b6040519081526020016101b2565b6101e56101e0366004611366565b610509565b60405190151581526020016101b2565b6005546101c4565b6101e561020b366004611392565b610520565b60405160ff7f00000000000000000000000000000000000000000000000000000000000000001681526020016101b2565b61025c73735b14bb79463307aacbed86daf3322b1e6226ab81565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101b2565b6101e561028f3660046113d3565b6105b7565b6101e56102a2366004611366565b6105cb565b6101c460025481565b6101c46102be3660046113ec565b73ffffffffffffffffffffffffffffffffffffffff1660009081526003602052604090205490565b6101c47f000000000000000000000000000000000000000000000000000000000000000081565b60085461025c9073ffffffffffffffffffffffffffffffffffffffff1681565b6101a561071f565b61035c7f000000000000000000000000000000000000000000000000000000000000000081565b6040516101b29190611409565b6101e5610377366004611366565b61072e565b6101e561038a366004611479565b61073b565b6103a261039d3660046113ec565b61088a565b005b6103a26103b23660046113ec565b61099e565b6103bf610aab565b6040805173ffffffffffffffffffffffffffffffffffffffff90931683526020830191909152016101b2565b6101c46103f9366004611571565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260046020908152604080832093909416825291909152205490565b6103a261043f3660046113d3565b610cc9565b60005461025c9073ffffffffffffffffffffffffffffffffffffffff1681565b6103a26104723660046113d3565b610d4b565b606060068054610486906115aa565b80601f01602080910402602001604051908101604052809291908181526020018280546104b2906115aa565b80156104ff5780601f106104d4576101008083540402835291602001916104ff565b820191906000526020600020905b8154815290600101906020018083116104e257829003601f168201915b5050505050905090565b6000610516338484610dcd565b5060015b92915050565b600061052d848484610ed6565b73ffffffffffffffffffffffffffffffffffffffff8416600090815260046020908152604080832033845290915290205482811015610598576040517f10bad14700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6105ac85336105a7868561162c565b610dcd565b506001949350505050565b60006105c33383611091565b506001919050565b60003373735b14bb79463307aacbed86daf3322b1e6226ab14801590610609575060005473ffffffffffffffffffffffffffffffffffffffff163314155b801561062d575060085473ffffffffffffffffffffffffffffffffffffffff163314155b15610664576040517fddb5de5e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61066e83836111d3565b6040517f735b14bb79463307aacbed86daf3322b1e6226ab000000000000000000000000602082015273ffffffffffffffffffffffffffffffffffffffff8416907f67fc7bdaed5b0ec550d8706b87d60568ab70c6b781263c70101d54cd1564aab390603401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529082905261070e91869061163f565b60405180910390a250600192915050565b606060078054610486906115aa565b6000610516338484610ed6565b6000806000610748610aab565b6040517f23b872dd00000000000000000000000000000000000000000000000000000000815233600482015273735b14bb79463307aacbed86daf3322b1e6226ab602482015260448101829052919350915073ffffffffffffffffffffffffffffffffffffffff8316906323b872dd906064016020604051808303816000875af11580156107da573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107fe9190611661565b610834576040517f0a7cd6d600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61083e3385611091565b60025460405133917f9ffbffc04a397460ee1dbe8c9503e098090567d6b7f4b3c02a8617d800b6d9559161087791899189918791611683565b60405180910390a2506001949350505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab146108d7576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116610924576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527fd55614e962c5fd6ece71614f6348d702468a997a394dd5e5c1677950226d97ae906020015b60405180910390a150565b3373735b14bb79463307aacbed86daf3322b1e6226ab146109eb576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116610a38576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600880547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527f88815d964e380677e86d817e7d65dea59cb7b4c3b5b7a0c8ec7ea4a74f90a38790602001610993565b600080546040517f0be155470000000000000000000000000000000000000000000000000000000081527f000000000000000000000000000000000000000000000000000000000000000060048201528291829173ffffffffffffffffffffffffffffffffffffffff90911690630be1554790602401602060405180830381865afa158015610b3e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b6291906116b2565b905073ffffffffffffffffffffffffffffffffffffffff8116610bb1576040517f78fff39600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080546040517fd7fd7afb0000000000000000000000000000000000000000000000000000000081527f0000000000000000000000000000000000000000000000000000000000000000600482015273ffffffffffffffffffffffffffffffffffffffff9091169063d7fd7afb90602401602060405180830381865afa158015610c40573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c6491906116cf565b905080600003610ca0576040517fe661aed000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060025460015483610cb391906116e8565b610cbd91906116ff565b92959294509192505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610d16576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60028190556040518181527fef13af88e424b5d15f49c77758542c1938b08b8b95b91ed0751f98ba99000d8f90602001610993565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610d98576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018190556040518181527fff5788270f43bfc1ca41c503606d2594aa3023a1a7547de403a3e2f146a4a80a90602001610993565b73ffffffffffffffffffffffffffffffffffffffff8316610e1a576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216610e67576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff83811660008181526004602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8316610f23576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216610f70576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff831660009081526003602052604090205481811015610fd0576040517ffe382aa700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610fda828261162c565b73ffffffffffffffffffffffffffffffffffffffff808616600090815260036020526040808220939093559085168152908120805484929061101d9084906116ff565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161108391815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff82166110de576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff82166000908152600360205260409020548181101561113e576040517ffe382aa700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611148828261162c565b73ffffffffffffffffffffffffffffffffffffffff84166000908152600360205260408120919091556005805484929061118390849061162c565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90602001610ec9565b73ffffffffffffffffffffffffffffffffffffffff8216611220576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b806005600082825461123291906116ff565b909155505073ffffffffffffffffffffffffffffffffffffffff82166000908152600360205260408120805483929061126c9084906116ff565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6000815180845260005b818110156112e9576020818501810151868301820152016112cd565b5060006020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b60208152600061133a60208301846112c3565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff8116811461136357600080fd5b50565b6000806040838503121561137957600080fd5b823561138481611341565b946020939093013593505050565b6000806000606084860312156113a757600080fd5b83356113b281611341565b925060208401356113c281611341565b929592945050506040919091013590565b6000602082840312156113e557600080fd5b5035919050565b6000602082840312156113fe57600080fd5b813561133a81611341565b6020810160038310611444577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000806040838503121561148c57600080fd5b823567ffffffffffffffff8111156114a357600080fd5b8301601f810185136114b457600080fd5b803567ffffffffffffffff8111156114ce576114ce61144a565b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8501160116810181811067ffffffffffffffff8211171561153a5761153a61144a565b60405281815282820160200187101561155257600080fd5b8160208401602083013760006020928201830152969401359450505050565b6000806040838503121561158457600080fd5b823561158f81611341565b9150602083013561159f81611341565b809150509250929050565b600181811c908216806115be57607f821691505b6020821081036115f7577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8181038181111561051a5761051a6115fd565b60408152600061165260408301856112c3565b90508260208301529392505050565b60006020828403121561167357600080fd5b8151801515811461133a57600080fd5b60808152600061169660808301876112c3565b6020830195909552506040810192909252606090910152919050565b6000602082840312156116c457600080fd5b815161133a81611341565b6000602082840312156116e157600080fd5b5051919050565b808202811582820484141761051a5761051a6115fd565b8082018082111561051a5761051a6115fd56fea26469706673582212204013e39523742118b3f2227e145ee7e48176ba6aebead33c596dca2acb59a74c64736f6c634300081a0033a2646970667358221220b650f02365e595aea1d9162a3da2e68f6ae90a87e1e4d905f1cedb5f3292abcd64736f6c634300081a0033", } // GatewayZEVMInboundTestABI is the input ABI used to generate the binding from. @@ -655,6 +655,48 @@ func (_GatewayZEVMInboundTest *GatewayZEVMInboundTestTransactorSession) TestCall return _GatewayZEVMInboundTest.Contract.TestCallFailsIfReceiverIsZeroAddress(&_GatewayZEVMInboundTest.TransactOpts) } +// TestWithdrawAndCallZETAFailsIfAmountIsReceiverIsZeroAddress is a paid mutator transaction binding the contract method 0x04019fba. +// +// Solidity: function testWithdrawAndCallZETAFailsIfAmountIsReceiverIsZeroAddress() returns() +func (_GatewayZEVMInboundTest *GatewayZEVMInboundTestTransactor) TestWithdrawAndCallZETAFailsIfAmountIsReceiverIsZeroAddress(opts *bind.TransactOpts) (*types.Transaction, error) { + return _GatewayZEVMInboundTest.contract.Transact(opts, "testWithdrawAndCallZETAFailsIfAmountIsReceiverIsZeroAddress") +} + +// TestWithdrawAndCallZETAFailsIfAmountIsReceiverIsZeroAddress is a paid mutator transaction binding the contract method 0x04019fba. +// +// Solidity: function testWithdrawAndCallZETAFailsIfAmountIsReceiverIsZeroAddress() returns() +func (_GatewayZEVMInboundTest *GatewayZEVMInboundTestSession) TestWithdrawAndCallZETAFailsIfAmountIsReceiverIsZeroAddress() (*types.Transaction, error) { + return _GatewayZEVMInboundTest.Contract.TestWithdrawAndCallZETAFailsIfAmountIsReceiverIsZeroAddress(&_GatewayZEVMInboundTest.TransactOpts) +} + +// TestWithdrawAndCallZETAFailsIfAmountIsReceiverIsZeroAddress is a paid mutator transaction binding the contract method 0x04019fba. +// +// Solidity: function testWithdrawAndCallZETAFailsIfAmountIsReceiverIsZeroAddress() returns() +func (_GatewayZEVMInboundTest *GatewayZEVMInboundTestTransactorSession) TestWithdrawAndCallZETAFailsIfAmountIsReceiverIsZeroAddress() (*types.Transaction, error) { + return _GatewayZEVMInboundTest.Contract.TestWithdrawAndCallZETAFailsIfAmountIsReceiverIsZeroAddress(&_GatewayZEVMInboundTest.TransactOpts) +} + +// TestWithdrawAndCallZETAFailsIfAmountIsZero is a paid mutator transaction binding the contract method 0x423a5874. +// +// Solidity: function testWithdrawAndCallZETAFailsIfAmountIsZero() returns() +func (_GatewayZEVMInboundTest *GatewayZEVMInboundTestTransactor) TestWithdrawAndCallZETAFailsIfAmountIsZero(opts *bind.TransactOpts) (*types.Transaction, error) { + return _GatewayZEVMInboundTest.contract.Transact(opts, "testWithdrawAndCallZETAFailsIfAmountIsZero") +} + +// TestWithdrawAndCallZETAFailsIfAmountIsZero is a paid mutator transaction binding the contract method 0x423a5874. +// +// Solidity: function testWithdrawAndCallZETAFailsIfAmountIsZero() returns() +func (_GatewayZEVMInboundTest *GatewayZEVMInboundTestSession) TestWithdrawAndCallZETAFailsIfAmountIsZero() (*types.Transaction, error) { + return _GatewayZEVMInboundTest.Contract.TestWithdrawAndCallZETAFailsIfAmountIsZero(&_GatewayZEVMInboundTest.TransactOpts) +} + +// TestWithdrawAndCallZETAFailsIfAmountIsZero is a paid mutator transaction binding the contract method 0x423a5874. +// +// Solidity: function testWithdrawAndCallZETAFailsIfAmountIsZero() returns() +func (_GatewayZEVMInboundTest *GatewayZEVMInboundTestTransactorSession) TestWithdrawAndCallZETAFailsIfAmountIsZero() (*types.Transaction, error) { + return _GatewayZEVMInboundTest.Contract.TestWithdrawAndCallZETAFailsIfAmountIsZero(&_GatewayZEVMInboundTest.TransactOpts) +} + // TestWithdrawAndCallZRC20FailsIfAmountIsZero is a paid mutator transaction binding the contract method 0xba9adeef. // // Solidity: function testWithdrawAndCallZRC20FailsIfAmountIsZero() returns() @@ -697,48 +739,6 @@ func (_GatewayZEVMInboundTest *GatewayZEVMInboundTestTransactorSession) TestWith return _GatewayZEVMInboundTest.Contract.TestWithdrawAndCallZRC20FailsIfReceiverIsZeroAddress(&_GatewayZEVMInboundTest.TransactOpts) } -// TestWithdrawAndcallZETAFailsIfAmountIsReceiverIsZeroAddress is a paid mutator transaction binding the contract method 0x95c379c1. -// -// Solidity: function testWithdrawAndcallZETAFailsIfAmountIsReceiverIsZeroAddress() returns() -func (_GatewayZEVMInboundTest *GatewayZEVMInboundTestTransactor) TestWithdrawAndcallZETAFailsIfAmountIsReceiverIsZeroAddress(opts *bind.TransactOpts) (*types.Transaction, error) { - return _GatewayZEVMInboundTest.contract.Transact(opts, "testWithdrawAndcallZETAFailsIfAmountIsReceiverIsZeroAddress") -} - -// TestWithdrawAndcallZETAFailsIfAmountIsReceiverIsZeroAddress is a paid mutator transaction binding the contract method 0x95c379c1. -// -// Solidity: function testWithdrawAndcallZETAFailsIfAmountIsReceiverIsZeroAddress() returns() -func (_GatewayZEVMInboundTest *GatewayZEVMInboundTestSession) TestWithdrawAndcallZETAFailsIfAmountIsReceiverIsZeroAddress() (*types.Transaction, error) { - return _GatewayZEVMInboundTest.Contract.TestWithdrawAndcallZETAFailsIfAmountIsReceiverIsZeroAddress(&_GatewayZEVMInboundTest.TransactOpts) -} - -// TestWithdrawAndcallZETAFailsIfAmountIsReceiverIsZeroAddress is a paid mutator transaction binding the contract method 0x95c379c1. -// -// Solidity: function testWithdrawAndcallZETAFailsIfAmountIsReceiverIsZeroAddress() returns() -func (_GatewayZEVMInboundTest *GatewayZEVMInboundTestTransactorSession) TestWithdrawAndcallZETAFailsIfAmountIsReceiverIsZeroAddress() (*types.Transaction, error) { - return _GatewayZEVMInboundTest.Contract.TestWithdrawAndcallZETAFailsIfAmountIsReceiverIsZeroAddress(&_GatewayZEVMInboundTest.TransactOpts) -} - -// TestWithdrawAndcallZETAFailsIfAmountIsZero is a paid mutator transaction binding the contract method 0xbcc52b9a. -// -// Solidity: function testWithdrawAndcallZETAFailsIfAmountIsZero() returns() -func (_GatewayZEVMInboundTest *GatewayZEVMInboundTestTransactor) TestWithdrawAndcallZETAFailsIfAmountIsZero(opts *bind.TransactOpts) (*types.Transaction, error) { - return _GatewayZEVMInboundTest.contract.Transact(opts, "testWithdrawAndcallZETAFailsIfAmountIsZero") -} - -// TestWithdrawAndcallZETAFailsIfAmountIsZero is a paid mutator transaction binding the contract method 0xbcc52b9a. -// -// Solidity: function testWithdrawAndcallZETAFailsIfAmountIsZero() returns() -func (_GatewayZEVMInboundTest *GatewayZEVMInboundTestSession) TestWithdrawAndcallZETAFailsIfAmountIsZero() (*types.Transaction, error) { - return _GatewayZEVMInboundTest.Contract.TestWithdrawAndcallZETAFailsIfAmountIsZero(&_GatewayZEVMInboundTest.TransactOpts) -} - -// TestWithdrawAndcallZETAFailsIfAmountIsZero is a paid mutator transaction binding the contract method 0xbcc52b9a. -// -// Solidity: function testWithdrawAndcallZETAFailsIfAmountIsZero() returns() -func (_GatewayZEVMInboundTest *GatewayZEVMInboundTestTransactorSession) TestWithdrawAndcallZETAFailsIfAmountIsZero() (*types.Transaction, error) { - return _GatewayZEVMInboundTest.Contract.TestWithdrawAndcallZETAFailsIfAmountIsZero(&_GatewayZEVMInboundTest.TransactOpts) -} - // TestWithdrawZETA is a paid mutator transaction binding the contract method 0xea37902f. // // Solidity: function testWithdrawZETA() returns() @@ -823,6 +823,27 @@ func (_GatewayZEVMInboundTest *GatewayZEVMInboundTestTransactorSession) TestWith return _GatewayZEVMInboundTest.Contract.TestWithdrawZETAFailsIfNoBalance(&_GatewayZEVMInboundTest.TransactOpts) } +// TestWithdrawZETAFailsIfReceiverIsZeroAddress is a paid mutator transaction binding the contract method 0xdc749dd7. +// +// Solidity: function testWithdrawZETAFailsIfReceiverIsZeroAddress() returns() +func (_GatewayZEVMInboundTest *GatewayZEVMInboundTestTransactor) TestWithdrawZETAFailsIfReceiverIsZeroAddress(opts *bind.TransactOpts) (*types.Transaction, error) { + return _GatewayZEVMInboundTest.contract.Transact(opts, "testWithdrawZETAFailsIfReceiverIsZeroAddress") +} + +// TestWithdrawZETAFailsIfReceiverIsZeroAddress is a paid mutator transaction binding the contract method 0xdc749dd7. +// +// Solidity: function testWithdrawZETAFailsIfReceiverIsZeroAddress() returns() +func (_GatewayZEVMInboundTest *GatewayZEVMInboundTestSession) TestWithdrawZETAFailsIfReceiverIsZeroAddress() (*types.Transaction, error) { + return _GatewayZEVMInboundTest.Contract.TestWithdrawZETAFailsIfReceiverIsZeroAddress(&_GatewayZEVMInboundTest.TransactOpts) +} + +// TestWithdrawZETAFailsIfReceiverIsZeroAddress is a paid mutator transaction binding the contract method 0xdc749dd7. +// +// Solidity: function testWithdrawZETAFailsIfReceiverIsZeroAddress() returns() +func (_GatewayZEVMInboundTest *GatewayZEVMInboundTestTransactorSession) TestWithdrawZETAFailsIfReceiverIsZeroAddress() (*types.Transaction, error) { + return _GatewayZEVMInboundTest.Contract.TestWithdrawZETAFailsIfReceiverIsZeroAddress(&_GatewayZEVMInboundTest.TransactOpts) +} + // TestWithdrawZETAWithMessage is a paid mutator transaction binding the contract method 0x18a4cfdc. // // Solidity: function testWithdrawZETAWithMessage() returns() diff --git a/v2/pkg/gatewayzevm.t.sol/gatewayzevmoutboundtest.go b/v2/pkg/gatewayzevm.t.sol/gatewayzevmoutboundtest.go index 03c9e8ce..3e91efbf 100644 --- a/v2/pkg/gatewayzevm.t.sol/gatewayzevmoutboundtest.go +++ b/v2/pkg/gatewayzevm.t.sol/gatewayzevmoutboundtest.go @@ -49,8 +49,8 @@ type StdInvariantFuzzSelector struct { // GatewayZEVMOutboundTestMetaData contains all meta data concerning the GatewayZEVMOutboundTest contract. var GatewayZEVMOutboundTestMetaData = &bind.MetaData{ - ABI: "[{\"type\":\"function\",\"name\":\"IS_TEST\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"PAUSER_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeArtifacts\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedArtifacts_\",\"type\":\"string[]\",\"internalType\":\"string[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeContracts\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedContracts_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeSelectors\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedSelectors_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzSelector[]\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"selectors\",\"type\":\"bytes4[]\",\"internalType\":\"bytes4[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeSenders\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedSenders_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"failed\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"setUp\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"targetArtifactSelectors\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedArtifactSelectors_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzArtifactSelector[]\",\"components\":[{\"name\":\"artifact\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"selectors\",\"type\":\"bytes4[]\",\"internalType\":\"bytes4[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetArtifacts\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedArtifacts_\",\"type\":\"string[]\",\"internalType\":\"string[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetContracts\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedContracts_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetInterfaces\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedInterfaces_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzInterface[]\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"artifacts\",\"type\":\"string[]\",\"internalType\":\"string[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetSelectors\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedSelectors_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzSelector[]\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"selectors\",\"type\":\"bytes4[]\",\"internalType\":\"bytes4[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetSenders\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedSenders_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"testDeposit\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositAndRevertZRC20AndCallUniversalContract\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositAndRevertZRC20AndCallUniversalContractFailsITargetIsFungibleModule\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositAndRevertZRC20AndCallUniversalContractFailsITargetIsGateway\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositAndRevertZRC20AndCallUniversalContractFailsIfAmountIsZero\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositAndRevertZRC20AndCallUniversalContractFailsIfSenderIsNotFungibleModule\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositAndRevertZRC20AndCallUniversalContractFailsIfTargetIsZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositAndRevertZRC20AndCallUniversalContractFailsIfZRC20IsZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositFailsIfAmountIs0\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositFailsIfSenderNotFungibleModule\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositFailsIfTargetIsFungibleModule\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositFailsIfTargetIsGateway\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositFailsIfTargetIsZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositFailsIfZRC20IsZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositTogglePause\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositZETAAndCallUniversal\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositZETAAndCallUniversalContract\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositZETAAndCallUniversalContractFailsIfSenderIsNotFungibleModule\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositZETAAndCallUniversalContractFailsIfTargetIsAmountIsZero\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositZETAAndCallUniversalContractFailsIfTargetIsFungibleModule\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositZETAAndCallUniversalContractFailsIfTargetIsGateway\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositZETAAndCallUniversalContractFailsIfTargetIsZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositZETAAndCallUniversalContractFailsIfZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositZRC20AndCallUniversalContract\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositZRC20AndCallUniversalContractFailsIfAmountIsZero\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositZRC20AndCallUniversalContractFailsIfSenderIsNotFungibleModule\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositZRC20AndCallUniversalContractFailsIfTargetIsZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositZRC20AndCallUniversalContractFailsIfZRC20IsZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositZRC20AndCallUniversalContractIfTargetIsFungibleModule\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositZRC20AndCallUniversalContractIfTargetIsGateway\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testExecuteFailsIfAmountIsZero\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testExecuteFailsIfTargetIsZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testExecuteFailsIfZrc20IsZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testExecuteRevertUniversalContract\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testExecuteRevertUniversalContractFailsIfAmountIsZero\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testExecuteRevertUniversalContractFailsIfTargetIsZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testExecuteRevertUniversalContractFailsIfZRC20IsZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testExecuteRevertUniversalContractFailsIfZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testExecuteRevertUniversalContractFailsIfZrc20IsZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testExecuteRevertUniversalContractIfSenderIsNotFungibleModule\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testExecuteUniversalContract\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testExecuteUniversalContractFailsIfSenderIsNotFungibleModule\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testExecuteUniversalContractFailsIfZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"event\",\"name\":\"Call\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"chainId\",\"type\":\"uint256\",\"indexed\":true,\"internalType\":\"uint256\"},{\"name\":\"receiver\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"message\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ContextData\",\"inputs\":[{\"name\":\"origin\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"chainID\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"msgSender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"message\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ContextDataRevert\",\"inputs\":[{\"name\":\"origin\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"chainID\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"msgSender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"message\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Withdrawal\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"chainId\",\"type\":\"uint256\",\"indexed\":true,\"internalType\":\"uint256\"},{\"name\":\"receiver\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"zrc20\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"gasfee\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"protocolFlatFee\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"message\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log\",\"inputs\":[{\"name\":\"\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_address\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_array\",\"inputs\":[{\"name\":\"val\",\"type\":\"uint256[]\",\"indexed\":false,\"internalType\":\"uint256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_array\",\"inputs\":[{\"name\":\"val\",\"type\":\"int256[]\",\"indexed\":false,\"internalType\":\"int256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_array\",\"inputs\":[{\"name\":\"val\",\"type\":\"address[]\",\"indexed\":false,\"internalType\":\"address[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_bytes\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_bytes32\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_int\",\"inputs\":[{\"name\":\"\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_address\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_array\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"uint256[]\",\"indexed\":false,\"internalType\":\"uint256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_array\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"int256[]\",\"indexed\":false,\"internalType\":\"int256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_array\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"address[]\",\"indexed\":false,\"internalType\":\"address[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_bytes\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_bytes32\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_decimal_int\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"},{\"name\":\"decimals\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_decimal_uint\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"decimals\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_int\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_string\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_uint\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_string\",\"inputs\":[{\"name\":\"\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_uint\",\"inputs\":[{\"name\":\"\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"logs\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"AccessControlUnauthorizedAccount\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"neededRole\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"type\":\"error\",\"name\":\"CallerIsNotFungibleModule\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"EnforcedPause\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"FailedZetaSent\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"GasFeeTransferFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientZRC20Amount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientZetaAmount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidTarget\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OnlyWZETAOrFungible\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"WithdrawalFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZRC20BurnFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZRC20DepositFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZRC20TransferFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZeroAddress\",\"inputs\":[]}]", - Bin: "0x6080604052600c8054600160ff199182168117909255601f80549091169091179055348015602c57600080fd5b5062010044806200003e6000396000f3fe608060405234801561001057600080fd5b50600436106103835760003560e01c8063828d267c116101de578063b936be8c1161010f578063e09bc659116100ad578063ec294d9f1161007c578063ec294d9f14610599578063ef2b5394146105a1578063fa7626d4146105a9578063fb339a1c146105b657600080fd5b8063e09bc6591461054c578063e20c9f7114610554578063e63ab1e91461055c578063eab7674e1461059157600080fd5b8063c8814d2e116100e9578063c8814d2e1461052c578063d997851314610534578063d9a4fa161461053c578063df881f6c1461054457600080fd5b8063b936be8c14610482578063ba414fa61461050c578063c7b388b11461052457600080fd5b80639c9acd5d1161017c578063a40b515b11610156578063a40b515b146104ec578063b0464fdc146104f4578063b5508aa9146104fc578063b8f2b8211461050457600080fd5b80639c9acd5d146104d45780639ca37e92146104dc578063a0b2c7b1146104e457600080fd5b8063916a17c6116101b8578063916a17c6146104a757806396d9d876146104bc57806397f7661f146104c4578063996b7675146104cc57600080fd5b8063828d267c1461048257806385226c811461048a578063884660a31461049f57600080fd5b80633f7286f4116102b85780635cec7db511610256578063671b91e211610230578063671b91e2146104625780636efa04b51461046a5780637cec29b0146104725780637f924c4e1461047a57600080fd5b80635cec7db5146104455780635d19c049146103a257806366d9a9a01461044d57600080fd5b80634b9324b6116102925780634b9324b6146103a257806351336fb01461043557806358c9987f1461043d5780635b4c90e11461039257600080fd5b80633f7286f41461041d57806344b2a40b1461042557806348f4fd071461042d57600080fd5b80631ed7831c116103255780632fa381f4116102ff5780632fa381f4146103fd578063339bd828146104055780633ab5b1991461040d5780633e5e3c231461041557600080fd5b80631ed7831c146103c25780632468bc0f146103e05780632ade3880146103e857600080fd5b80630bfc4e4a116103615780630bfc4e4a146103a257806314b7a6da146103aa578063198d5ca4146103b25780631c785a14146103ba57600080fd5b8063084fafab1461038857806309f92c1f146103925780630a9254e41461039a575b600080fd5b6103906105be565b005b610390610867565b610390610a1a565b610390611487565b61039061163a565b6103906117a0565b610390611a28565b6103ca61233f565b6040516103d7919061aaf6565b60405180910390f35b6103906123a1565b6103f061286c565b6040516103d7919061ab92565b6103906129ae565b610390612ba0565b610390612d51565b6103ca612f02565b6103ca612f62565b610390612fc2565b61039061314a565b6103906132fd565b6103906134b6565b61039061366b565b610455613822565b6040516103d7919061acf8565b6103906139a4565b610390613b62565b610390613f06565b610390614179565b6103906141b2565b610492614495565b6040516103d7919061ad96565b610390614565565b6104af614858565b6040516103d7919061ae0d565b610390614953565b610390614aa6565b610390614c52565b610390614da6565b610390614ef6565b61039061502d565b6103906151e8565b6104af61539d565b610492615498565b610390615568565b610514615726565b60405190151581526020016103d7565b6103906157fa565b6103906159b8565b610390615b69565b610390615ca0565b610390615e5e565b610390616013565b6103ca6161cc565b6105837f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b6040519081526020016103d7565b61039061622c565b6103906163e1565b610390616590565b601f546105149060ff1681565b610390616741565b60006040516020016105cf9061aea4565b60408051601f19818403018152606080840190925260205490911b6bffffffffffffffffffffffff191660808301529150600090806094810160408051808303601f190181529181529082526027546001600160a01b03908116602084015260019282018390526024805492517f81bad6f300000000000000000000000000000000000000000000000000000000815260048101859052908101849052604481018490526064810193909352166084820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b1580156106bd57600080fd5b505af11580156106d1573d6000803e3d6000fd5b5050602080546040517ffdc887992b033668833927e252058e468fac0b6bd196d520f09c61b740e99948945061072c93506001600160a01b03909116910160609190911b6bffffffffffffffffffffffff1916815260140190565b60408051601f198184030181529082905260275460205461075d936001600160a01b0392831692600192169061aee1565b60405180910390a160275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa7906024015b600060405180830381600087803b1580156107bf57600080fd5b505af11580156107d3573d6000803e3d6000fd5b50506020546021546024546040517f309f50040000000000000000000000000000000000000000000000000000000081526001600160a01b03938416955063309f50049450610831938793811692600192911690899060040161af92565b600060405180830381600087803b15801561084b57600080fd5b505af115801561085f573d6000803e3d6000fd5b505050505050565b60006040516020016108789061aea4565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401819052600184840152825163ca669fa760e01b815260048101919091529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163ca669fa791602480830192600092919082900301818387803b15801561092657600080fd5b505af115801561093a573d6000803e3d6000fd5b5050604051630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b1580156109aa57600080fd5b505af11580156109be573d6000803e3d6000fd5b50506020546024546040517fbcf7f32b0000000000000000000000000000000000000000000000000000000081526001600160a01b03928316945063bcf7f32b935061083192869260009260019290911690899060040161af92565b602580547fffffffffffffffffffffffff0000000000000000000000000000000000000000908116301790915560268054909116611234179055604051610a609061aa05565b604051809103906000f080158015610a7c573d6000803e3d6000fd5b50602280547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03928316908117909155604080518082018252600f81527f476174657761795a45564d2e736f6c000000000000000000000000000000000060208201526025549151602481019390935292166044820152610b60919060640160408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f485cc955000000000000000000000000000000000000000000000000000000001790526168f4565b601f80547fffffffffffffffffffffff0000000000000000000000000000000000000000ff166101006001600160a01b039384168102919091179182905560208054919092049092167fffffffffffffffffffffffff000000000000000000000000000000000000000090921682178155604080517f3ce4a5bc0000000000000000000000000000000000000000000000000000000081529051633ce4a5bc926004808401939192918290030181865afa158015610c22573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c46919061afe7565b602780547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055604051610c8a9061aa13565b604051809103906000f080158015610ca6573d6000803e3d6000fd5b50602480547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039283161781556027546040517f06447d5600000000000000000000000000000000000000000000000000000000815292166004830152737109709ecfa91a80626ff3989d68f67f5b1dd12d916306447d569101600060405180830381600087803b158015610d4257600080fd5b505af1158015610d56573d6000803e3d6000fd5b505050506000806000604051610d6b9061aa21565b6001600160a01b03938416815291831660208301529091166040820152606001604051809103906000f080158015610da7573d6000803e3d6000fd5b50602380547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03928316908117909155602054604051601293600193849360009391921690610dfd9061aa2f565b610e0c9695949392919061b010565b604051809103906000f080158015610e28573d6000803e3d6000fd5b50602180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039283169081179091556023546040517fee2815ba0000000000000000000000000000000000000000000000000000000081526001600482015260248101929092529091169063ee2815ba90604401600060405180830381600087803b158015610ebf57600080fd5b505af1158015610ed3573d6000803e3d6000fd5b50506023546040517fa7cb050700000000000000000000000000000000000000000000000000000000815260016004820181905260248201526001600160a01b03909116925063a7cb05079150604401600060405180830381600087803b158015610f3d57600080fd5b505af1158015610f51573d6000803e3d6000fd5b50506027546040517fc88a5e6d0000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152633b9aca006024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c88a5e6d9150604401600060405180830381600087803b158015610fd157600080fd5b505af1158015610fe5573d6000803e3d6000fd5b50505050602260009054906101000a90046001600160a01b03166001600160a01b031663d0e30db0600a6040518263ffffffff1660e01b81526004016000604051808303818588803b15801561103a57600080fd5b505af115801561104e573d6000803e3d6000fd5b50506022546020546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152600a60248201529116935063095ea7b3925060440190506020604051808303816000875af11580156110c2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110e6919061b0ff565b506021546025546040517f47e7ef240000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620186a060248201529116906347e7ef24906044016020604051808303816000875af1158015611157573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061117b919061b0ff565b507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b03166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156111da57600080fd5b505af11580156111ee573d6000803e3d6000fd5b50506025546040517f06447d560000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506306447d569150602401600060405180830381600087803b15801561126457600080fd5b505af1158015611278573d6000803e3d6000fd5b50506021546020546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620186a060248201529116925063095ea7b391506044016020604051808303816000875af11580156112ec573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611310919061b0ff565b50602260009054906101000a90046001600160a01b03166001600160a01b031663d0e30db0600a6040518263ffffffff1660e01b81526004016000604051808303818588803b15801561136257600080fd5b505af1158015611376573d6000803e3d6000fd5b50506022546020546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152600a60248201529116935063095ea7b3925060440190506020604051808303816000875af11580156113ea573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061140e919061b0ff565b507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b03166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561146d57600080fd5b505af1158015611481573d6000803e3d6000fd5b50505050565b60006040516020016114989061aea4565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401819052600184840152825163ca669fa760e01b815260048101919091529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163ca669fa791602480830192600092919082900301818387803b15801561154657600080fd5b505af115801561155a573d6000803e3d6000fd5b5050604051630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b1580156115ca57600080fd5b505af11580156115de573d6000803e3d6000fd5b50506020546024546040517f309f50040000000000000000000000000000000000000000000000000000000081526001600160a01b03928316945063309f5004935061083192869260009260019290911690899060040161af92565b60275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561169357600080fd5b505af11580156116a7573d6000803e3d6000fd5b5050604051630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b15801561171757600080fd5b505af115801561172b573d6000803e3d6000fd5b50506020546021546040517ff45346dc0000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260016024820152600060448201529116925063f45346dc91506064015b600060405180830381600087803b15801561146d57600080fd5b6021546026546040516370a0823160e01b81526001600160a01b03918216600482015260019260009216906370a0823190602401602060405180830381865afa1580156117f1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611815919061b121565b9050611822600082616913565b60255460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561187b57600080fd5b505af115801561188f573d6000803e3d6000fd5b5050604051630618f58760e51b81527f2b2add3d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b1580156118ff57600080fd5b505af1158015611913573d6000803e3d6000fd5b50506020546021546026546040517ff45346dc0000000000000000000000000000000000000000000000000000000081526001600160a01b0392831660048201526024810188905290821660448201529116925063f45346dc9150606401600060405180830381600087803b15801561198b57600080fd5b505af115801561199f573d6000803e3d6000fd5b50506021546026546040516370a0823160e01b81526001600160a01b03918216600482015260009450911691506370a0823190602401602060405180830381865afa1580156119f2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a16919061b121565b9050611a23600082616913565b505050565b60275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015611a8157600080fd5b505af1158015611a95573d6000803e3d6000fd5b5050602754604080516001600160a01b0390921660248301527f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a60448084019190915281518084039091018152606490920181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb39250611b80919060040161b13a565b600060405180830381600087803b158015611b9a57600080fd5b505af1158015611bae573d6000803e3d6000fd5b50505050602060009054906101000a90046001600160a01b03166001600160a01b0316638456cb596040518163ffffffff1660e01b8152600401600060405180830381600087803b158015611c0257600080fd5b505af1158015611c16573d6000803e3d6000fd5b505060275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b158015611c7357600080fd5b505af1158015611c87573d6000803e3d6000fd5b5050602754604080516001600160a01b0390921660248301527f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a60448084019190915281518084039091018152606490920181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb39250611d72919060040161b13a565b600060405180830381600087803b158015611d8c57600080fd5b505af1158015611da0573d6000803e3d6000fd5b50505050602060009054906101000a90046001600160a01b03166001600160a01b0316633f4ba83a6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015611df457600080fd5b505af1158015611e08573d6000803e3d6000fd5b505060255460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b158015611e6557600080fd5b505af1158015611e79573d6000803e3d6000fd5b50505050602060009054906101000a90046001600160a01b03166001600160a01b0316638456cb596040518163ffffffff1660e01b8152600401600060405180830381600087803b158015611ecd57600080fd5b505af1158015611ee1573d6000803e3d6000fd5b5050604051630618f58760e51b81527fd93c066500000000000000000000000000000000000000000000000000000000600482015260019250737109709ecfa91a80626ff3989d68f67f5b1dd12d915063c31eb0e090602401600060405180830381600087803b158015611f5457600080fd5b505af1158015611f68573d6000803e3d6000fd5b505060275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b158015611fc557600080fd5b505af1158015611fd9573d6000803e3d6000fd5b50506020546021546026546040517ff45346dc0000000000000000000000000000000000000000000000000000000081526001600160a01b0392831660048201526024810187905290821660448201529116925063f45346dc9150606401600060405180830381600087803b15801561205157600080fd5b505af1158015612065573d6000803e3d6000fd5b505060255460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b1580156120c257600080fd5b505af11580156120d6573d6000803e3d6000fd5b50505050602060009054906101000a90046001600160a01b03166001600160a01b0316633f4ba83a6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561212a57600080fd5b505af115801561213e573d6000803e3d6000fd5b50506021546026546040516370a0823160e01b81526001600160a01b03918216600482015260009450911691506370a08231906024015b602060405180830381865afa158015612192573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121b6919061b121565b90506121c3600082616913565b60275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561221c57600080fd5b505af1158015612230573d6000803e3d6000fd5b50506020546021546026546040517ff45346dc0000000000000000000000000000000000000000000000000000000081526001600160a01b0392831660048201526024810188905290821660448201529116925063f45346dc9150606401600060405180830381600087803b1580156122a857600080fd5b505af11580156122bc573d6000803e3d6000fd5b50506021546026546040516370a0823160e01b81526001600160a01b03918216600482015260009450911691506370a0823190602401602060405180830381865afa15801561230f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612333919061b121565b9050611a238382616913565b6060601680548060200260200160405190810160405280929190818152602001828054801561239757602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311612379575b5050505050905090565b6022546027546040516370a0823160e01b81526001600160a01b03918216600482015260019260009216906370a0823190602401602060405180830381865afa1580156123f2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612416919061b121565b6022546020546040516370a0823160e01b81526001600160a01b0391821660048201529293506000929116906370a0823190602401602060405180830381865afa158015612468573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061248c919061b121565b6024546040519192506001600160a01b031631906000906124af9060200161aea4565b60408051601f19818403018152606080840190925260205490911b6bffffffffffffffffffffffff191660808301529150600090806094810160408051808303601f190181529181529082526027546001600160a01b03908116602084015260019282018390526024805492517f81bad6f300000000000000000000000000000000000000000000000000000000815260048101859052908101849052604481018490526064810193909352166084820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b15801561259d57600080fd5b505af11580156125b1573d6000803e3d6000fd5b5050602080546040517fcdc8ee677dc5ebe680fb18cebda5e26ba5ea1f0ba504a47e2a9a2ecb476dc98e945061260c93506001600160a01b03909116910160609190911b6bffffffffffffffffffffffff1916815260140190565b60408051601f198184030181529082905260275460205461263c936001600160a01b03928316928c92169061aee1565b60405180910390a160275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561269d57600080fd5b505af11580156126b1573d6000803e3d6000fd5b50506020546024546040517f21501a950000000000000000000000000000000000000000000000000000000081526001600160a01b0392831694506321501a9593506127089286928c92911690889060040161b14d565b600060405180830381600087803b15801561272257600080fd5b505af1158015612736573d6000803e3d6000fd5b50506022546027546040516370a0823160e01b81526001600160a01b03918216600482015260009450911691506370a0823190602401602060405180830381865afa158015612789573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127ad919061b121565b90506127c26127bc888861b1b6565b82616913565b6022546020546040516370a0823160e01b81526001600160a01b03918216600482015260009291909116906370a0823190602401602060405180830381865afa158015612813573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612837919061b121565b90506128438682616913565b612862612850898761b1c9565b6024546001600160a01b031631616913565b5050505050505050565b6060601e805480602002602001604051908101604052809291908181526020016000905b828210156129a557600084815260208082206040805180820182526002870290920180546001600160a01b03168352600181018054835181870281018701909452808452939591948681019491929084015b8282101561298e5783829060005260206000200180546129019061b1dc565b80601f016020809104026020016040519081016040528092919081815260200182805461292d9061b1dc565b801561297a5780601f1061294f5761010080835404028352916020019161297a565b820191906000526020600020905b81548152906001019060200180831161295d57829003601f168201915b5050505050815260200190600101906128e2565b505050508152505081526020019060010190612890565b50505050905090565b6040516001906000906129c39060200161aea4565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401526001838301528151630618f58760e51b81527f2b2add3d0000000000000000000000000000000000000000000000000000000060048201529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163c31eb0e091602480830192600092919082900301818387803b158015612a8d57600080fd5b505af1158015612aa1573d6000803e3d6000fd5b505060255460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b158015612afe57600080fd5b505af1158015612b12573d6000803e3d6000fd5b50506020546024546040517f21501a950000000000000000000000000000000000000000000000000000000081526001600160a01b0392831694506321501a959350612b699286928992911690889060040161b14d565b600060405180830381600087803b158015612b8357600080fd5b505af1158015612b97573d6000803e3d6000fd5b50505050505050565b6000604051602001612bb19061aea4565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401819052600184840152825163ca669fa760e01b815260048101919091529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163ca669fa791602480830192600092919082900301818387803b158015612c5f57600080fd5b505af1158015612c73573d6000803e3d6000fd5b5050604051630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b158015612ce357600080fd5b505af1158015612cf7573d6000803e3d6000fd5b50506020546021546040517f5af659670000000000000000000000000000000000000000000000000000000081526001600160a01b039283169450635af6596793506108319286921690600190600090899060040161af92565b6000604051602001612d629061aea4565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401819052600184840152825163ca669fa760e01b815260048101919091529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163ca669fa791602480830192600092919082900301818387803b158015612e1057600080fd5b505af1158015612e24573d6000803e3d6000fd5b5050604051630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b158015612e9457600080fd5b505af1158015612ea8573d6000803e3d6000fd5b50506020546021546040517fbcf7f32b0000000000000000000000000000000000000000000000000000000081526001600160a01b03928316945063bcf7f32b93506108319286921690600190600090899060040161af92565b60606018805480602002602001604051908101604052809291908181526020018280548015612397576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311612379575050505050905090565b60606017805480602002602001604051908101604052809291908181526020018280548015612397576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311612379575050505050905090565b60275460405163ca669fa760e01b81526001600160a01b039091166004820152600190737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561301e57600080fd5b505af1158015613032573d6000803e3d6000fd5b5050604051630618f58760e51b81527f82d5d76a000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b1580156130a257600080fd5b505af11580156130b6573d6000803e3d6000fd5b50506020546021546027546040517ff45346dc0000000000000000000000000000000000000000000000000000000081526001600160a01b0392831660048201526024810187905290821660448201529116925063f45346dc91506064015b600060405180830381600087803b15801561312f57600080fd5b505af1158015613143573d6000803e3d6000fd5b5050505050565b600060405160200161315b9061aea4565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401819052600184840152825163ca669fa760e01b815260048101919091529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163ca669fa791602480830192600092919082900301818387803b15801561320957600080fd5b505af115801561321d573d6000803e3d6000fd5b5050604051630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b15801561328d57600080fd5b505af11580156132a1573d6000803e3d6000fd5b50506020546024546040517f5af659670000000000000000000000000000000000000000000000000000000081526001600160a01b039283169450635af65967935061083192869260009260019290911690899060040161af92565b600060405160200161330e9061aea4565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401526001838301528151630618f58760e51b81527f82d5d76a0000000000000000000000000000000000000000000000000000000060048201529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163c31eb0e091602480830192600092919082900301818387803b1580156133d857600080fd5b505af11580156133ec573d6000803e3d6000fd5b505060275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b15801561344957600080fd5b505af115801561345d573d6000803e3d6000fd5b50506020546021546040517f5af659670000000000000000000000000000000000000000000000000000000081526001600160a01b039283169450635af65967935061083192869216906001908690899060040161af92565b60006040516020016134c79061aea4565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401819052600184840152825163ca669fa760e01b815260048101919091529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163ca669fa791602480830192600092919082900301818387803b15801561357557600080fd5b505af1158015613589573d6000803e3d6000fd5b5050604051630618f58760e51b81527f5d67094f000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b1580156135f957600080fd5b505af115801561360d573d6000803e3d6000fd5b50506020546021546024546040517fc39aca370000000000000000000000000000000000000000000000000000000081526001600160a01b03938416955063c39aca379450610831938793811692600092911690899060040161af92565b6040516001906000906136809060200161aea4565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401526001838301528151630618f58760e51b81527f82d5d76a0000000000000000000000000000000000000000000000000000000060048201529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163c31eb0e091602480830192600092919082900301818387803b15801561374a57600080fd5b505af115801561375e573d6000803e3d6000fd5b505060275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b1580156137bb57600080fd5b505af11580156137cf573d6000803e3d6000fd5b50506020546040517f21501a950000000000000000000000000000000000000000000000000000000081526001600160a01b0390911692506321501a959150612b6990849087908590889060040161b14d565b6060601b805480602002602001604051908101604052809291908181526020016000905b828210156129a557838290600052602060002090600202016040518060400160405290816000820180546138799061b1dc565b80601f01602080910402602001604051908101604052809291908181526020018280546138a59061b1dc565b80156138f25780601f106138c7576101008083540402835291602001916138f2565b820191906000526020600020905b8154815290600101906020018083116138d557829003601f168201915b505050505081526020016001820180548060200260200160405190810160405280929190818152602001828054801561398c57602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190600401906020826003010492830192600103820291508084116139395790505b50505050508152505081526020019060010190613846565b60006040516020016139b59061aea4565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401526001838301528151630618f58760e51b81527f2b2add3d0000000000000000000000000000000000000000000000000000000060048201529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163c31eb0e091602480830192600092919082900301818387803b158015613a7f57600080fd5b505af1158015613a93573d6000803e3d6000fd5b505060255460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b158015613af057600080fd5b505af1158015613b04573d6000803e3d6000fd5b50506020546021546024546040517f5af659670000000000000000000000000000000000000000000000000000000081526001600160a01b039384169550635af659679450610831938793811692600192911690899060040161af92565b602154602480546040516370a0823160e01b81526001600160a01b03918216600482015260009391909116916370a082319101602060405180830381865afa158015613bb2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613bd6919061b121565b9050613be3600082616913565b6000604051602001613bf49061aea4565b60408051601f19818403018152606080840190925260205490911b6bffffffffffffffffffffffff191660808301529150600090806094810160408051808303601f190181529181529082526027546001600160a01b03908116602084015260019282018390526024805492517f81bad6f300000000000000000000000000000000000000000000000000000000815260048101859052908101849052604481018490526064810193909352166084820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b158015613ce257600080fd5b505af1158015613cf6573d6000803e3d6000fd5b5050602080546040517fcdc8ee677dc5ebe680fb18cebda5e26ba5ea1f0ba504a47e2a9a2ecb476dc98e9450613d5193506001600160a01b03909116910160609190911b6bffffffffffffffffffffffff1916815260140190565b60408051601f1981840301815290829052602754602054613d82936001600160a01b0392831692600192169061aee1565b60405180910390a160275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015613de357600080fd5b505af1158015613df7573d6000803e3d6000fd5b50506020546021546024546040517fc39aca370000000000000000000000000000000000000000000000000000000081526001600160a01b03938416955063c39aca379450613e55938793811692600192911690899060040161af92565b600060405180830381600087803b158015613e6f57600080fd5b505af1158015613e83573d6000803e3d6000fd5b5050602154602480546040516370a0823160e01b81526001600160a01b03918216600482015260009550921692506370a082319101602060405180830381865afa158015613ed5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613ef9919061b121565b9050611481600182616913565b6000604051602001613f179061aea4565b60408051601f19818403018152606080840190925260205490911b6bffffffffffffffffffffffff191660808301529150600090806094810160408051808303601f190181529181529082526027546001600160a01b03908116602084015260019282018390526024805492517f81bad6f300000000000000000000000000000000000000000000000000000000815260048101859052908101849052604481018490526064810193909352166084820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b15801561400557600080fd5b505af1158015614019573d6000803e3d6000fd5b5050602080546040517fcdc8ee677dc5ebe680fb18cebda5e26ba5ea1f0ba504a47e2a9a2ecb476dc98e945061407493506001600160a01b03909116910160609190911b6bffffffffffffffffffffffff1916815260140190565b60408051601f19818403018152908290526027546020546140a5936001600160a01b0392831692600192169061aee1565b60405180910390a160275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa7906024015b600060405180830381600087803b15801561410757600080fd5b505af115801561411b573d6000803e3d6000fd5b50506020546021546024546040517fbcf7f32b0000000000000000000000000000000000000000000000000000000081526001600160a01b03938416955063bcf7f32b9450610831938793811692600192911690899060040161af92565b6021546026546040516370a0823160e01b81526001600160a01b03918216600482015260019260009216906370a0823190602401612175565b6022546027546040516370a0823160e01b81526001600160a01b03918216600482015260019260009216906370a0823190602401602060405180830381865afa158015614203573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614227919061b121565b6022546020546040516370a0823160e01b81526001600160a01b0391821660048201529293506000929116906370a0823190602401602060405180830381865afa158015614279573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061429d919061b121565b6024546040519192506001600160a01b031631906000906142c09060200161aea4565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401819052600184840152825163ca669fa760e01b815260048101919091529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163ca669fa791602480830192600092919082900301818387803b15801561436e57600080fd5b505af1158015614382573d6000803e3d6000fd5b5050604051630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b1580156143f257600080fd5b505af1158015614406573d6000803e3d6000fd5b50506020546040517f21501a950000000000000000000000000000000000000000000000000000000081526001600160a01b0390911692506321501a95915061445b908490600190600090889060040161b14d565b600060405180830381600087803b15801561447557600080fd5b505af1158015614489573d6000803e3d6000fd5b50505050505050505050565b6060601a805480602002602001604051908101604052809291908181526020016000905b828210156129a55783829060005260206000200180546144d89061b1dc565b80601f01602080910402602001604051908101604052809291908181526020018280546145049061b1dc565b80156145515780601f1061452657610100808354040283529160200191614551565b820191906000526020600020905b81548152906001019060200180831161453457829003601f168201915b5050505050815260200190600101906144b9565b602154602480546040516370a0823160e01b81526001600160a01b03918216600482015260009391909116916370a082319101602060405180830381865afa1580156145b5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906145d9919061b121565b90506145e6600082616913565b60006040516020016145f79061aea4565b60408051601f19818403018152606080840190925260205490911b6bffffffffffffffffffffffff191660808301529150600090806094810160408051808303601f190181529181529082526027546001600160a01b03908116602084015260019282018390526024805492517f81bad6f300000000000000000000000000000000000000000000000000000000815260048101859052908101849052604481018490526064810193909352166084820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b1580156146e557600080fd5b505af11580156146f9573d6000803e3d6000fd5b5050602080546040517ffdc887992b033668833927e252058e468fac0b6bd196d520f09c61b740e99948945061475493506001600160a01b03909116910160609190911b6bffffffffffffffffffffffff1916815260140190565b60408051601f1981840301815290829052602754602054614785936001600160a01b0392831692600192169061aee1565b60405180910390a160275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156147e657600080fd5b505af11580156147fa573d6000803e3d6000fd5b50506020546021546024546040517f5af659670000000000000000000000000000000000000000000000000000000081526001600160a01b039384169550635af659679450613e55938793811692600192911690899060040161af92565b6060601d805480602002602001604051908101604052809291908181526020016000905b828210156129a55760008481526020908190206040805180820182526002860290920180546001600160a01b0316835260018101805483518187028101870190945280845293949193858301939283018282801561493b57602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190600401906020826003010492830192600103820291508084116148e85790505b5050505050815250508152602001906001019061487c565b60275460405163ca669fa760e01b81526001600160a01b039091166004820152600190737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156149af57600080fd5b505af11580156149c3573d6000803e3d6000fd5b5050604051630618f58760e51b81527f82d5d76a000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b158015614a3357600080fd5b505af1158015614a47573d6000803e3d6000fd5b50506020546021546040517ff45346dc0000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260248101869052911660448201819052925063f45346dc9150606401613115565b6000604051602001614ab79061aea4565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401819052600184840152825163ca669fa760e01b815260048101919091529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163ca669fa791602480830192600092919082900301818387803b158015614b6557600080fd5b505af1158015614b79573d6000803e3d6000fd5b5050604051630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b158015614be957600080fd5b505af1158015614bfd573d6000803e3d6000fd5b50506020546040517f21501a950000000000000000000000000000000000000000000000000000000081526001600160a01b0390911692506321501a959150610831908490600190600090889060040161b14d565b60275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015614cab57600080fd5b505af1158015614cbf573d6000803e3d6000fd5b5050604051630618f58760e51b81527f5d67094f000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b158015614d2f57600080fd5b505af1158015614d43573d6000803e3d6000fd5b50506020546021546026546040517ff45346dc0000000000000000000000000000000000000000000000000000000081526001600160a01b0392831660048201526000602482015290821660448201529116925063f45346dc9150606401611786565b60275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015614dff57600080fd5b505af1158015614e13573d6000803e3d6000fd5b5050604051630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b158015614e8357600080fd5b505af1158015614e97573d6000803e3d6000fd5b50506020546026546040517ff45346dc00000000000000000000000000000000000000000000000000000000815260006004820152600160248201526001600160a01b0391821660448201529116925063f45346dc9150606401611786565b6000604051602001614f079061aea4565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401526001838301528151630618f58760e51b81527f2b2add3d0000000000000000000000000000000000000000000000000000000060048201529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163c31eb0e091602480830192600092919082900301818387803b158015614fd157600080fd5b505af1158015614fe5573d6000803e3d6000fd5b505060255460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa791506024016140ed565b6040516001906000906150429060200161aea4565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401526001838301528151630618f58760e51b81527f82d5d76a0000000000000000000000000000000000000000000000000000000060048201529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163c31eb0e091602480830192600092919082900301818387803b15801561510c57600080fd5b505af1158015615120573d6000803e3d6000fd5b505060275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b15801561517d57600080fd5b505af1158015615191573d6000803e3d6000fd5b50506020546027546040517f21501a950000000000000000000000000000000000000000000000000000000081526001600160a01b0392831694506321501a959350612b699286928992911690889060040161b14d565b60006040516020016151f99061aea4565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401819052600184840152825163ca669fa760e01b815260048101919091529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163ca669fa791602480830192600092919082900301818387803b1580156152a757600080fd5b505af11580156152bb573d6000803e3d6000fd5b5050604051630618f58760e51b81527f5d67094f000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b15801561532b57600080fd5b505af115801561533f573d6000803e3d6000fd5b50506020546021546024546040517f309f50040000000000000000000000000000000000000000000000000000000081526001600160a01b03938416955063309f50049450610831938793811692600092911690899060040161af92565b6060601c805480602002602001604051908101604052809291908181526020016000905b828210156129a55760008481526020908190206040805180820182526002860290920180546001600160a01b0316835260018101805483518187028101870190945280845293949193858301939283018282801561548057602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168152602001906004019060208260030104928301926001038202915080841161542d5790505b505050505081525050815260200190600101906153c1565b60606019805480602002602001604051908101604052809291908181526020016000905b828210156129a55783829060005260206000200180546154db9061b1dc565b80601f01602080910402602001604051908101604052809291908181526020018280546155079061b1dc565b80156155545780601f1061552957610100808354040283529160200191615554565b820191906000526020600020905b81548152906001019060200180831161553757829003601f168201915b5050505050815260200190600101906154bc565b60006040516020016155799061aea4565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401526001838301528151630618f58760e51b81527f82d5d76a0000000000000000000000000000000000000000000000000000000060048201529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163c31eb0e091602480830192600092919082900301818387803b15801561564357600080fd5b505af1158015615657573d6000803e3d6000fd5b505060275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b1580156156b457600080fd5b505af11580156156c8573d6000803e3d6000fd5b50506020546021546027546040517f5af659670000000000000000000000000000000000000000000000000000000081526001600160a01b039384169550635af659679450610831938793811692600192911690899060040161af92565b60085460009060ff161561573e575060085460ff1690565b6040517f667f9d70000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d600482018190527f6661696c65640000000000000000000000000000000000000000000000000000602483015260009163667f9d7090604401602060405180830381865afa1580156157cf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906157f3919061b121565b1415905090565b600060405160200161580b9061aea4565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401526001838301528151630618f58760e51b81527f2b2add3d0000000000000000000000000000000000000000000000000000000060048201529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163c31eb0e091602480830192600092919082900301818387803b1580156158d557600080fd5b505af11580156158e9573d6000803e3d6000fd5b505060255460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b15801561594657600080fd5b505af115801561595a573d6000803e3d6000fd5b50506020546021546024546040517fc39aca370000000000000000000000000000000000000000000000000000000081526001600160a01b03938416955063c39aca379450610831938793811692600192911690899060040161af92565b60006040516020016159c99061aea4565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401819052600184840152825163ca669fa760e01b815260048101919091529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163ca669fa791602480830192600092919082900301818387803b158015615a7757600080fd5b505af1158015615a8b573d6000803e3d6000fd5b5050604051630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b158015615afb57600080fd5b505af1158015615b0f573d6000803e3d6000fd5b50506020546021546040517f309f50040000000000000000000000000000000000000000000000000000000081526001600160a01b03928316945063309f500493506108319286921690600190600090899060040161af92565b6000604051602001615b7a9061aea4565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401526001838301528151630618f58760e51b81527f2b2add3d0000000000000000000000000000000000000000000000000000000060048201529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163c31eb0e091602480830192600092919082900301818387803b158015615c4457600080fd5b505af1158015615c58573d6000803e3d6000fd5b505060255460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa791506024016107a5565b6000604051602001615cb19061aea4565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401526001838301528151630618f58760e51b81527f82d5d76a0000000000000000000000000000000000000000000000000000000060048201529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163c31eb0e091602480830192600092919082900301818387803b158015615d7b57600080fd5b505af1158015615d8f573d6000803e3d6000fd5b505060275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b158015615dec57600080fd5b505af1158015615e00573d6000803e3d6000fd5b50506020546021546027546040517fc39aca370000000000000000000000000000000000000000000000000000000081526001600160a01b03938416955063c39aca379450610831938793811692600192911690899060040161af92565b6000604051602001615e6f9061aea4565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401819052600184840152825163ca669fa760e01b815260048101919091529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163ca669fa791602480830192600092919082900301818387803b158015615f1d57600080fd5b505af1158015615f31573d6000803e3d6000fd5b5050604051630618f58760e51b81527f5d67094f000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b158015615fa157600080fd5b505af1158015615fb5573d6000803e3d6000fd5b50506020546021546024546040517fbcf7f32b0000000000000000000000000000000000000000000000000000000081526001600160a01b03938416955063bcf7f32b9450610831938793811692600092911690899060040161af92565b60006040516020016160249061aea4565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401526001838301528151630618f58760e51b81527f82d5d76a0000000000000000000000000000000000000000000000000000000060048201529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163c31eb0e091602480830192600092919082900301818387803b1580156160ee57600080fd5b505af1158015616102573d6000803e3d6000fd5b505060275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b15801561615f57600080fd5b505af1158015616173573d6000803e3d6000fd5b50506020546021546040517fc39aca370000000000000000000000000000000000000000000000000000000081526001600160a01b03928316945063c39aca37935061083192869216906001908690899060040161af92565b60606015805480602002602001604051908101604052809291908181526020018280548015612397576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311612379575050505050905090565b600060405160200161623d9061aea4565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401819052600184840152825163ca669fa760e01b815260048101919091529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163ca669fa791602480830192600092919082900301818387803b1580156162eb57600080fd5b505af11580156162ff573d6000803e3d6000fd5b5050604051630618f58760e51b81527f5d67094f000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b15801561636f57600080fd5b505af1158015616383573d6000803e3d6000fd5b50506020546021546024546040517f5af659670000000000000000000000000000000000000000000000000000000081526001600160a01b039384169550635af659679450610831938793811692600092911690899060040161af92565b60006040516020016163f29061aea4565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401819052600184840152825163ca669fa760e01b815260048101919091529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163ca669fa791602480830192600092919082900301818387803b1580156164a057600080fd5b505af11580156164b4573d6000803e3d6000fd5b5050604051630618f58760e51b81527f19c08f49000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b15801561652457600080fd5b505af1158015616538573d6000803e3d6000fd5b50506020546021546040517f21501a950000000000000000000000000000000000000000000000000000000081526001600160a01b0392831694506321501a959350610831928692600092911690889060040161b14d565b60006040516020016165a19061aea4565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401819052600184840152825163ca669fa760e01b815260048101919091529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163ca669fa791602480830192600092919082900301818387803b15801561664f57600080fd5b505af1158015616663573d6000803e3d6000fd5b5050604051630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b1580156166d357600080fd5b505af11580156166e7573d6000803e3d6000fd5b50506020546021546040517fc39aca370000000000000000000000000000000000000000000000000000000081526001600160a01b03928316945063c39aca3793506108319286921690600190600090899060040161af92565b60006040516020016167529061aea4565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401819052600184840152825163ca669fa760e01b815260048101919091529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163ca669fa791602480830192600092919082900301818387803b15801561680057600080fd5b505af1158015616814573d6000803e3d6000fd5b5050604051630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b15801561688457600080fd5b505af1158015616898573d6000803e3d6000fd5b50506020546024546040517fc39aca370000000000000000000000000000000000000000000000000000000081526001600160a01b03928316945063c39aca37935061083192869260009260019290911690899060040161af92565b60006168fe61aa3d565b616909848483616992565b9150505b92915050565b6040517f98296c540000000000000000000000000000000000000000000000000000000081526004810183905260248101829052737109709ecfa91a80626ff3989d68f67f5b1dd12d906398296c549060440160006040518083038186803b15801561697e57600080fd5b505afa15801561085f573d6000803e3d6000fd5b60008061699f8584616a0d565b9050616a026040518060400160405280601d81526020017f4552433139363750726f78792e736f6c3a4552433139363750726f787900000081525082866040516020016169ed92919061b229565b60405160208183030381529060405285616a19565b9150505b9392505050565b6000616a068383616a47565b60c08101515160009015616a3d57616a3684848460c00151616a62565b9050616a06565b616a368484616c08565b6000616a538383616cf3565b616a0683836020015184616a19565b600080616a6d616d03565b90506000616a7b8683616dd6565b90506000616a92826060015183602001518561727c565b90506000616aa28383898961748e565b90506000616aaf8261830b565b602081015181519192509060030b15616b2257898260400151604051602001616ad992919061b24b565b60408051601f19818403018152908290527f08c379a0000000000000000000000000000000000000000000000000000000008252616b199160040161b13a565b60405180910390fd5b6000616b656040518060400160405280601581526020017f4465706c6f79656420746f20616464726573733a2000000000000000000000008152508360016184da565b6040517fc6ce059d000000000000000000000000000000000000000000000000000000008152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c6ce059d90616bb890849060040161b13a565b602060405180830381865afa158015616bd5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190616bf9919061afe7565b9b9a5050505050505050505050565b6040517f8d1cc9250000000000000000000000000000000000000000000000000000000081526000908190737109709ecfa91a80626ff3989d68f67f5b1dd12d90638d1cc92590616c5d90879060040161b13a565b600060405180830381865afa158015616c7a573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052616ca2919081019061b3b4565b90506000616cd08285604051602001616cbc92919061b3e9565b6040516020818303038152906040526186da565b90506001600160a01b038116616909578484604051602001616ad992919061b418565b616cff828260006186ed565b5050565b604080518082018252600381527f6f75740000000000000000000000000000000000000000000000000000000000602082015290517fd145736c000000000000000000000000000000000000000000000000000000008152606091737109709ecfa91a80626ff3989d68f67f5b1dd12d91829063d145736c90616d8a90849060040161b4c3565b600060405180830381865afa158015616da7573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052616dcf919081019061b50a565b9250505090565b616e086040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b6000737109709ecfa91a80626ff3989d68f67f5b1dd12d9050616e536040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b616e5c856187f0565b60208201526000616e6c86618bd5565b90506000836001600160a01b031663d930a0e66040518163ffffffff1660e01b8152600401600060405180830381865afa158015616eae573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052616ed6919081019061b50a565b86838560200151604051602001616ef0949392919061b553565b60408051601f19818403018152908290527f60f9bb1100000000000000000000000000000000000000000000000000000000825291506000906001600160a01b038616906360f9bb1190616f4890859060040161b13a565b600060405180830381865afa158015616f65573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052616f8d919081019061b50a565b6040517fdb4235f60000000000000000000000000000000000000000000000000000000081529091506001600160a01b0386169063db4235f690616fd590849060040161b657565b602060405180830381865afa158015616ff2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190617016919061b0ff565b61702b5781604051602001616ad9919061b6a9565b6040517f49c4fac80000000000000000000000000000000000000000000000000000000081526001600160a01b038616906349c4fac89061707090849060040161b73b565b600060405180830381865afa15801561708d573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526170b5919081019061b50a565b84526040517fdb4235f60000000000000000000000000000000000000000000000000000000081526001600160a01b0386169063db4235f6906170fc90849060040161b78d565b602060405180830381865afa158015617119573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061713d919061b0ff565b156171d2576040517f49c4fac80000000000000000000000000000000000000000000000000000000081526001600160a01b038616906349c4fac89061718790849060040161b78d565b600060405180830381865afa1580156171a4573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526171cc919081019061b50a565b60408501525b846001600160a01b03166349c4fac88286600001516040516020016171f7919061b7df565b6040516020818303038152906040526040518363ffffffff1660e01b815260040161722392919061b84b565b600060405180830381865afa158015617240573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052617268919081019061b50a565b606085015250608083015250949350505050565b60408051600480825260a0820190925260609160009190816020015b60608152602001906001900390816172985790505090506040518060400160405280600481526020017f6772657000000000000000000000000000000000000000000000000000000000815250816000815181106172f8576172f861b870565b60200260200101819052506040518060400160405280600381526020017f2d726c00000000000000000000000000000000000000000000000000000000008152508160018151811061734c5761734c61b870565b602002602001018190525084604051602001617368919061b89f565b6040516020818303038152906040528160028151811061738a5761738a61b870565b6020026020010181905250826040516020016173a6919061b90b565b604051602081830303815290604052816003815181106173c8576173c861b870565b602002602001018190525060006173de8261830b565b602080820151604080518082018252600581527f2e6a736f6e000000000000000000000000000000000000000000000000000000818501908152825180840184526000808252908601528251808401909352905182529281019290925291925061746f9060408051808201825260008082526020918201528151808301909252845182528085019082015290618e58565b6174845785604051602001616ad9919061b94c565b9695505050505050565b60a0810151604080518082018252600080825260209182015281518083019092528251808352928101910152606090737109709ecfa91a80626ff3989d68f67f5b1dd12d90156174de565b511590565b6176525782602001511561759a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605860248201527f54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f742060448201527f62652075736564207768656e207468652060736b6970566572696679536f757260648201527f6365436f646560206f7074696f6e206973206074727565600000000000000000608482015260a401616b19565b8260c0015115617652576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605360248201527f54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f742060448201527f62652075736564207768656e207468652060736b69704c6963656e736554797060648201527f6560206f7074696f6e2069732060747275656000000000000000000000000000608482015260a401616b19565b6040805160ff8082526120008201909252600091816020015b606081526020019060019003908161766b57905050905060006040518060400160405280600381526020017f6e707800000000000000000000000000000000000000000000000000000000008152508282806176c69061b9dd565b935060ff16815181106176db576176db61b870565b60200260200101819052506040518060400160405280600d81526020017f302e302e312d616c7068612e370000000000000000000000000000000000000081525060405160200161772c919061b9fc565b6040516020818303038152906040528282806177479061b9dd565b935060ff168151811061775c5761775c61b870565b60200260200101819052506040518060400160405280600681526020017f6465706c6f7900000000000000000000000000000000000000000000000000008152508282806177a99061b9dd565b935060ff16815181106177be576177be61b870565b60200260200101819052506040518060400160405280600e81526020017f2d2d636f6e74726163744e616d6500000000000000000000000000000000000081525082828061780b9061b9dd565b935060ff16815181106178205761782061b870565b6020026020010181905250876020015182828061783c9061b9dd565b935060ff16815181106178515761785161b870565b60200260200101819052506040518060400160405280600e81526020017f2d2d636f6e74726163745061746800000000000000000000000000000000000081525082828061789e9061b9dd565b935060ff16815181106178b3576178b361b870565b6020908102919091010152875182826178cb8161b9dd565b935060ff16815181106178e0576178e061b870565b60200260200101819052506040518060400160405280600981526020017f2d2d636861696e4964000000000000000000000000000000000000000000000081525082828061792d9061b9dd565b935060ff16815181106179425761794261b870565b602002602001018190525061795646618eb9565b82826179618161b9dd565b935060ff16815181106179765761797661b870565b60200260200101819052506040518060400160405280600f81526020017f2d2d6275696c64496e666f46696c6500000000000000000000000000000000008152508282806179c39061b9dd565b935060ff16815181106179d8576179d861b870565b6020026020010181905250868282806179f09061b9dd565b935060ff1681518110617a0557617a0561b870565b6020908102919091010152855115617b2c5760408051808201909152601581527f2d2d636f6e7374727563746f7242797465636f6465000000000000000000000060208201528282617a568161b9dd565b935060ff1681518110617a6b57617a6b61b870565b60209081029190910101526040517f71aad10d0000000000000000000000000000000000000000000000000000000081526001600160a01b038416906371aad10d90617abb90899060040161b13a565b600060405180830381865afa158015617ad8573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052617b00919081019061b50a565b8282617b0b8161b9dd565b935060ff1681518110617b2057617b2061b870565b60200260200101819052505b846020015115617bfc5760408051808201909152601281527f2d2d766572696679536f75726365436f6465000000000000000000000000000060208201528282617b758161b9dd565b935060ff1681518110617b8a57617b8a61b870565b60200260200101819052506040518060400160405280600581526020017f66616c7365000000000000000000000000000000000000000000000000000000815250828280617bd79061b9dd565b935060ff1681518110617bec57617bec61b870565b6020026020010181905250617dc3565b617c346174d98660a0015160408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b617cc75760408051808201909152600d81527f2d2d6c6963656e7365547970650000000000000000000000000000000000000060208201528282617c778161b9dd565b935060ff1681518110617c8c57617c8c61b870565b60200260200101819052508460a00151604051602001617cac919061b89f565b604051602081830303815290604052828280617bd79061b9dd565b8460c00151158015617d0a575060408089015181518083018352600080825260209182015282518084019093528151835290810190820152617d0890511590565b155b15617dc35760408051808201909152600d81527f2d2d6c6963656e7365547970650000000000000000000000000000000000000060208201528282617d4e8161b9dd565b935060ff1681518110617d6357617d6361b870565b6020026020010181905250617d7788618f59565b604051602001617d87919061b89f565b604051602081830303815290604052828280617da29061b9dd565b935060ff1681518110617db757617db761b870565b60200260200101819052505b60408086015181518083018352600080825260209182015282518084019093528151835290810190820152617df790511590565b617e8c5760408051808201909152600b81527f2d2d72656c61796572496400000000000000000000000000000000000000000060208201528282617e3a8161b9dd565b935060ff1681518110617e4f57617e4f61b870565b60200260200101819052508460400151828280617e6b9061b9dd565b935060ff1681518110617e8057617e8061b870565b60200260200101819052505b606085015115617fad5760408051808201909152600681527f2d2d73616c74000000000000000000000000000000000000000000000000000060208201528282617ed58161b9dd565b935060ff1681518110617eea57617eea61b870565b602090810291909101015260608501516040517fb11a19e800000000000000000000000000000000000000000000000000000000815260048101919091526001600160a01b0384169063b11a19e890602401600060405180830381865afa158015617f59573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052617f81919081019061b50a565b8282617f8c8161b9dd565b935060ff1681518110617fa157617fa161b870565b60200260200101819052505b60e085015151156180545760408051808201909152600a81527f2d2d6761734c696d69740000000000000000000000000000000000000000000060208201528282617ff78161b9dd565b935060ff168151811061800c5761800c61b870565b60200260200101819052506180288560e0015160000151618eb9565b82826180338161b9dd565b935060ff16815181106180485761804861b870565b60200260200101819052505b60e085015160200151156180fe5760408051808201909152600a81527f2d2d676173507269636500000000000000000000000000000000000000000000602082015282826180a18161b9dd565b935060ff16815181106180b6576180b661b870565b60200260200101819052506180d28560e0015160200151618eb9565b82826180dd8161b9dd565b935060ff16815181106180f2576180f261b870565b60200260200101819052505b60e085015160400151156181a85760408051808201909152600e81527f2d2d6d61784665655065724761730000000000000000000000000000000000006020820152828261814b8161b9dd565b935060ff16815181106181605761816061b870565b602002602001018190525061817c8560e0015160400151618eb9565b82826181878161b9dd565b935060ff168151811061819c5761819c61b870565b60200260200101819052505b60e085015160600151156182525760408051808201909152601681527f2d2d6d61785072696f7269747946656550657247617300000000000000000000602082015282826181f58161b9dd565b935060ff168151811061820a5761820a61b870565b60200260200101819052506182268560e0015160600151618eb9565b82826182318161b9dd565b935060ff16815181106182465761824661b870565b60200260200101819052505b60008160ff1667ffffffffffffffff8111156182705761827061b2cc565b6040519080825280602002602001820160405280156182a357816020015b606081526020019060019003908161828e5790505b50905060005b8260ff168160ff1610156182fc57838160ff16815181106182cc576182cc61b870565b6020026020010151828260ff16815181106182e9576182e961b870565b60209081029190910101526001016182a9565b5093505050505b949350505050565b6183326040518060600160405280600060030b815260200160608152602001606081525090565b60408051808201825260048082527f6261736800000000000000000000000000000000000000000000000000000000602083015291517fd145736c000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d92600091849163d145736c916183b89186910161ba67565b600060405180830381865afa1580156183d5573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526183fd919081019061b50a565b9050600061840b8683619a48565b90506000846001600160a01b031663f45c1ce7836040518263ffffffff1660e01b815260040161843b919061ad96565b6000604051808303816000875af115801561845a573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052618482919081019061baae565b805190915060030b1580159061849b5750602081015151155b80156184aa5750604081015151155b1561748457816000815181106184c2576184c261b870565b6020026020010151604051602001616ad9919061bb64565b6060600061850f8560408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6040805180820182526000808252602091820152815180830190925286518252808701908201529091506185469082905b90619b9d565b156186a35760006185c3826185bd846185b76185898a60408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6040805180820182526000808252602091820152815180830190925282518252918201519181019190915290565b90619bc4565b90619c26565b604080518082018252600181527f0a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152909150618627908290619b9d565b1561869157604080518082018252600181527f0a000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261868e905b8290619cab565b90505b61869a81619cd1565b92505050616a06565b82156186bc578484604051602001616ad992919061bd50565b5050604080516020810190915260008152616a06565b509392505050565b6000808251602084016000f09392505050565b8160a00151156186fc57505050565b6000618709848484619d3a565b905060006187168261830b565b602081015181519192509060030b1580156187b25750604080518082018252600781527f5355434345535300000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526187b290604080518082018252600080825260209182015281518083019092528451825280850190820152618540565b156187bf57505050505050565b604082015151156187df578160400151604051602001616ad9919061bdf7565b80604051602001616ad9919061be55565b606060006188258360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600481527f2e736f6c000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015290915061888a905b8290618e58565b156188f957604080518082018252600481527f2e736f6c0000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616a06906188f490839061a2d5565b619cd1565b604080518082018252600181527f3a000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261895b905b829061a35f565b600103618a2857604080518082018252600181527f3a00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526189c190618687565b50604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616a06906188f4905b8390619cab565b604080518082018252600581527f2e6a736f6e00000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152618a8790618883565b15618bbe57604080518082018252600181527f2f00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820181905284518086019095529251845283015290618aef90839061a3f9565b905060008160018351618b02919061b1b6565b81518110618b1257618b1261b870565b60200260200101519050618bb56188f4618b886040518060400160405280600581526020017f2e6a736f6e00000000000000000000000000000000000000000000000000000081525060408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6040805180820182526000808252602091820152815180830190925285518252808601908201529061a2d5565b95945050505050565b82604051602001616ad9919061bec0565b50919050565b60606000618c0a8360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600481527f2e736f6c0000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152909150618c6c90618883565b15618c7a57616a0681619cd1565b604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152618cd990618954565b600103618d4357604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616a06906188f490618a21565b604080518082018252600581527f2e6a736f6e00000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152618da290618883565b15618bbe57604080518082018252600181527f2f00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820181905284518086019095529251845283015290618e0a90839061a3f9565b9050600181511115618e46578060028251618e25919061b1b6565b81518110618e3557618e3561b870565b602002602001015192505050919050565b5082604051602001616ad9919061bec0565b805182516000911115618e6d5750600061690d565b81518351602085015160009291618e839161b1c9565b618e8d919061b1b6565b905082602001518103618ea457600191505061690d565b82516020840151819020912014905092915050565b60606000618ec68361a49e565b600101905060008167ffffffffffffffff811115618ee657618ee661b2cc565b6040519080825280601f01601f191660200182016040528015618f10576020820181803683370190505b5090508181016020015b600019017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a8504945084618f1a57509392505050565b604081810151815180830183526000808252602091820181905283518085018552835181529282018383015283518085018552600a81527f554e4c4943454e5345440000000000000000000000000000000000000000000081840190815285518087018752838152840192909252845180860190955251845290830152606091618fe5905b829061a580565b1561902557505060408051808201909152600481527f4e6f6e65000000000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600981527f556e6c6963656e736500000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261908490618fde565b156190c457505060408051808201909152600981527f556e6c6963656e736500000000000000000000000000000000000000000000006020820152919050565b604080518082018252600381527f4d495400000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261912390618fde565b1561916357505060408051808201909152600381527f4d495400000000000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f47504c2d322e302d6f6e6c790000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526191c290618fde565b806192275750604080518082018252601081527f47504c2d322e302d6f722d6c61746572000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261922790618fde565b1561926757505060408051808201909152600981527f474e552047504c763200000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f47504c2d332e302d6f6e6c790000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526192c690618fde565b8061932b5750604080518082018252601081527f47504c2d332e302d6f722d6c61746572000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261932b90618fde565b1561936b57505060408051808201909152600981527f474e552047504c763300000000000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4c47504c2d322e312d6f6e6c7900000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526193ca90618fde565b8061942f5750604080518082018252601181527f4c47504c2d322e312d6f722d6c617465720000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261942f90618fde565b1561946f57505060408051808201909152600c81527f474e55204c47504c76322e3100000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4c47504c2d332e302d6f6e6c7900000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526194ce90618fde565b806195335750604080518082018252601181527f4c47504c2d332e302d6f722d6c617465720000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261953390618fde565b1561957357505060408051808201909152600a81527f474e55204c47504c7633000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f4253442d322d436c617573650000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526195d290618fde565b1561961257505060408051808201909152600c81527f4253442d322d436c6175736500000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f4253442d332d436c6175736500000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261967190618fde565b156196b157505060408051808201909152600c81527f4253442d332d436c6175736500000000000000000000000000000000000000006020820152919050565b604080518082018252600781527f4d504c2d322e30000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261971090618fde565b1561975057505060408051808201909152600781527f4d504c2d322e30000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600781527f4f534c2d332e3000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526197af90618fde565b156197ef57505060408051808201909152600781527f4f534c2d332e30000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600a81527f4170616368652d322e30000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261984e90618fde565b1561988e57505060408051808201909152600a81527f4170616368652d322e30000000000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4147504c2d332e302d6f6e6c7900000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526198ed90618fde565b806199525750604080518082018252601181527f4147504c2d332e302d6f722d6c617465720000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261995290618fde565b1561999257505060408051808201909152600a81527f474e55204147504c7633000000000000000000000000000000000000000000006020820152919050565b604080518082018252600881527f4255534c2d312e31000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526199f190618fde565b15619a3157505060408051808201909152600781527f42534c20312e31000000000000000000000000000000000000000000000000006020820152919050565b60408084015184519151616ad9929060200161bf9e565b60608060005b8451811015619ad35781858281518110619a6a57619a6a61b870565b6020026020010151604051602001619a8392919061b3e9565b604051602081830303815290604052915060018551619aa2919061b1b6565b8114619acb5781604051602001619ab9919061c107565b60405160208183030381529060405291505b600101619a4e565b5060408051600380825260808201909252600091816020015b6060815260200190600190039081619aec5790505090508381600081518110619b1757619b1761b870565b60200260200101819052506040518060400160405280600281526020017f2d6300000000000000000000000000000000000000000000000000000000000081525081600181518110619b6b57619b6b61b870565b60200260200101819052508181600281518110619b8a57619b8a61b870565b6020908102919091010152949350505050565b6020808301518351835192840151600093619bbb929184919061a594565b14159392505050565b60408051808201909152600080825260208201526000619bf6846000015185602001518560000151866020015161a6a5565b9050836020015181619c08919061b1b6565b84518590619c1790839061b1b6565b90525060208401525090919050565b6040805180820190915260008082526020820152815183511015619c4b57508161690d565b6020808301519084015160019114619c725750815160208481015190840151829020919020145b8015619ca357825184518590619c8990839061b1b6565b9052508251602085018051619c9f90839061b1c9565b9052505b509192915050565b6040805180820190915260008082526020820152619cca83838361a7c5565b5092915050565b60606000826000015167ffffffffffffffff811115619cf257619cf261b2cc565b6040519080825280601f01601f191660200182016040528015619d1c576020820181803683370190505b5090506000602082019050619cca818560200151866000015161a870565b60606000619d46616d03565b6040805160ff808252612000820190925291925060009190816020015b6060815260200190600190039081619d6357905050905060006040518060400160405280600381526020017f6e70780000000000000000000000000000000000000000000000000000000000815250828280619dbe9061b9dd565b935060ff1681518110619dd357619dd361b870565b60200260200101819052506040518060400160405280600781526020017f5e312e33322e3300000000000000000000000000000000000000000000000000815250604051602001619e24919061c148565b604051602081830303815290604052828280619e3f9061b9dd565b935060ff1681518110619e5457619e5461b870565b60200260200101819052506040518060400160405280600881526020017f76616c6964617465000000000000000000000000000000000000000000000000815250828280619ea19061b9dd565b935060ff1681518110619eb657619eb661b870565b602002602001018190525082604051602001619ed2919061b90b565b604051602081830303815290604052828280619eed9061b9dd565b935060ff1681518110619f0257619f0261b870565b60200260200101819052506040518060400160405280600a81526020017f2d2d636f6e747261637400000000000000000000000000000000000000000000815250828280619f4f9061b9dd565b935060ff1681518110619f6457619f6461b870565b6020026020010181905250619f79878461a8ea565b8282619f848161b9dd565b935060ff1681518110619f9957619f9961b870565b60209081029190910101528551511561a0455760408051808201909152600b81527f2d2d7265666572656e636500000000000000000000000000000000000000000060208201528282619feb8161b9dd565b935060ff168151811061a0005761a00061b870565b602002602001018190525061a01986600001518461a8ea565b828261a0248161b9dd565b935060ff168151811061a0395761a03961b870565b60200260200101819052505b85608001511561a0b35760408051808201909152601881527f2d2d756e73616665536b697053746f72616765436865636b00000000000000006020820152828261a08e8161b9dd565b935060ff168151811061a0a35761a0a361b870565b602002602001018190525061a119565b841561a1195760408051808201909152601281527f2d2d726571756972655265666572656e636500000000000000000000000000006020820152828261a0f88161b9dd565b935060ff168151811061a10d5761a10d61b870565b60200260200101819052505b6040860151511561a1b55760408051808201909152600d81527f2d2d756e73616665416c6c6f77000000000000000000000000000000000000006020820152828261a1638161b9dd565b935060ff168151811061a1785761a17861b870565b6020026020010181905250856040015182828061a1949061b9dd565b935060ff168151811061a1a95761a1a961b870565b60200260200101819052505b85606001511561a21f5760408051808201909152601481527f2d2d756e73616665416c6c6f7752656e616d65730000000000000000000000006020820152828261a1fe8161b9dd565b935060ff168151811061a2135761a21361b870565b60200260200101819052505b60008160ff1667ffffffffffffffff81111561a23d5761a23d61b2cc565b60405190808252806020026020018201604052801561a27057816020015b606081526020019060019003908161a25b5790505b50905060005b8260ff168160ff16101561a2c957838160ff168151811061a2995761a29961b870565b6020026020010151828260ff168151811061a2b65761a2b661b870565b602090810291909101015260010161a276565b50979650505050505050565b604080518082019091526000808252602082015281518351101561a2fa57508161690d565b8151835160208501516000929161a3109161b1c9565b61a31a919061b1b6565b6020840151909150600190821461a33b575082516020840151819020908220145b801561a3565783518551869061a35290839061b1b6565b9052505b50929392505050565b600080826000015161a383856000015186602001518660000151876020015161a6a5565b61a38d919061b1c9565b90505b8351602085015161a3a1919061b1c9565b8111619cca578161a3b18161c18d565b925050826000015161a3e885602001518361a3cc919061b1b6565b865161a3d8919061b1b6565b838660000151876020015161a6a5565b61a3f2919061b1c9565b905061a390565b6060600061a407848461a35f565b61a41290600161b1c9565b67ffffffffffffffff81111561a42a5761a42a61b2cc565b60405190808252806020026020018201604052801561a45d57816020015b606081526020019060019003908161a4485790505b50905060005b81518110156186d25761a4796188f48686619cab565b82828151811061a48b5761a48b61b870565b602090810291909101015260010161a463565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000831061a4e7577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef8100000000831061a513576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc10000831061a53157662386f26fc10000830492506010015b6305f5e100831061a549576305f5e100830492506008015b612710831061a55d57612710830492506004015b6064831061a56f576064830492506002015b600a831061690d5760010192915050565b600061a58c838361a92a565b159392505050565b60008085841161a69b576020841161a647576000841561a5df57600161a5bb86602061b1b6565b61a5c690600861c1a7565b61a5d190600261c2a5565b61a5db919061b1b6565b1990505b835181168561a5ee898961b1c9565b61a5f8919061b1b6565b805190935082165b81811461a6325787841161a61a5787945050505050618303565b8361a6248161c2b1565b94505082845116905061a600565b61a63c878561b1c9565b945050505050618303565b83832061a654858861b1b6565b61a65e908761b1c9565b91505b85821061a6995784822080820361a6865761a67c868461b1c9565b9350505050618303565b61a69160018461b1b6565b92505061a661565b505b5092949350505050565b6000838186851161a7b0576020851161a75f576000851561a6f157600161a6cd87602061b1b6565b61a6d890600861c1a7565b61a6e390600261c2a5565b61a6ed919061b1b6565b1990505b8451811660008761a7028b8b61b1c9565b61a70c919061b1b6565b855190915083165b82811461a7515781861061a7395761a72c8b8b61b1c9565b9650505050505050618303565b8561a7438161c18d565b96505083865116905061a714565b859650505050505050618303565b508383206000905b61a771868961b1b6565b821161a7ae5785832080820361a78d5783945050505050618303565b61a79860018561b1c9565b935050818061a7a69061c18d565b92505061a767565b505b61a7ba878761b1c9565b979650505050505050565b6040805180820190915260008082526020820152600061a7f7856000015186602001518660000151876020015161a6a5565b60208087018051918601919091525190915061a813908261b1b6565b83528451602086015161a826919061b1c9565b810361a835576000855261a867565b8351835161a843919061b1c9565b8551869061a85290839061b1b6565b905250835161a861908261b1c9565b60208601525b50909392505050565b6020811061a8a8578151835261a88760208461b1c9565b925061a89460208361b1c9565b915061a8a160208261b1b6565b905061a870565b600019811561a8d757600161a8be83602061b1b6565b61a8ca9061010061c2a5565b61a8d4919061b1b6565b90505b9151835183169219169190911790915250565b6060600061a8f88484616dd6565b805160208083015160405193945061a9129390910161c2c8565b60405160208183030381529060405291505092915050565b815181516000919081111561a93d575081515b6020808501519084015160005b8381101561a9f6578251825180821461a9c657600019602087101561a9a55760018461a97789602061b1b6565b61a981919061b1c9565b61a98c90600861c1a7565b61a99790600261c2a5565b61a9a1919061b1b6565b1990505b818116838216818103911461a9c357975061690d9650505050505050565b50505b61a9d160208661b1c9565b945061a9de60208561b1c9565b9350505060208161a9ef919061b1c9565b905061a94a565b5084518651617484919061c320565b610b67806200c34183390190565b61053f806200cea883390190565b61106f806200d3e783390190565b611bb9806200e45683390190565b6040518060e0016040528060608152602001606081526020016060815260200160001515815260200160001515815260200160001515815260200161aa8061aa85565b905290565b6040518061010001604052806000151581526020016000151581526020016060815260200160008019168152602001606081526020016060815260200160001515815260200161aa806040518060800160405280600081526020016000815260200160008152602001600081525090565b602080825282518282018190526000918401906040840190835b8181101561ab375783516001600160a01b031683526020938401939092019160010161ab10565b509095945050505050565b60005b8381101561ab5d57818101518382015260200161ab45565b50506000910152565b6000815180845261ab7e81602086016020860161ab42565b601f01601f19169290920160200192915050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b8281101561ac8e577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452815180516001600160a01b03168652602090810151604082880181905281519088018190529101906060600582901b88018101919088019060005b8181101561ac74577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa08a850301835261ac5e84865161ab66565b602095860195909450929092019160010161ac24565b50919750505060209485019492909201915060010161abba565b50929695505050505050565b600081518084526020840193506020830160005b8281101561acee5781517fffffffff000000000000000000000000000000000000000000000000000000001686526020958601959091019060010161acae565b5093949350505050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b8281101561ac8e577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452815180516040875261ad64604088018261ab66565b905060208201519150868103602088015261ad7f818361ac9a565b96505050602093840193919091019060010161ad20565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b8281101561ac8e577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc087860301845261adf885835161ab66565b9450602093840193919091019060010161adbe565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b8281101561ac8e577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc087860301845281516001600160a01b038151168652602081015190506040602087015261ae8e604087018261ac9a565b955050602093840193919091019060010161ae35565b60208152600061690d60208301600581527f68656c6c6f000000000000000000000000000000000000000000000000000000602082015260400190565b60a08152600061aef460a083018761ab66565b6001600160a01b03861660208401528460408401526001600160a01b0384166060840152828103608084015261a7ba81600581527f68656c6c6f000000000000000000000000000000000000000000000000000000602082015260400190565b600081516060845261af69606085018261ab66565b90506001600160a01b036020840151166020850152604083015160408501528091505092915050565b60a08152600061afa560a083018861af54565b6001600160a01b03871660208401528560408401526001600160a01b0385166060840152828103608084015261afdb818561ab66565b98975050505050505050565b60006020828403121561aff957600080fd5b81516001600160a01b0381168114616a0657600080fd5b610100815260056101008201527f544f4b454e000000000000000000000000000000000000000000000000000000610120820152610140602082015260036101408201527f544b4e000000000000000000000000000000000000000000000000000000000061016082015260006101808201905060ff881660408301528660608301526003861061b0ca577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b8560808301528460a083015261b0eb60c08301856001600160a01b03169052565b6001600160a01b03831660e083015261a7ba565b60006020828403121561b11157600080fd5b81518015158114616a0657600080fd5b60006020828403121561b13357600080fd5b5051919050565b602081526000616a06602083018461ab66565b60808152600061b160608083018761af54565b8560208401526001600160a01b0385166040840152828103606084015261a7ba818561ab66565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8181038181111561690d5761690d61b187565b8082018082111561690d5761690d61b187565b600181811c9082168061b1f057607f821691505b602082108103618bcf577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6001600160a01b0383168152604060208201526000618303604083018461ab66565b7f4661696c656420746f206465706c6f7920636f6e74726163742000000000000081526000835161b28381601a85016020880161ab42565b7f3a20000000000000000000000000000000000000000000000000000000000000601a91840191820152835161b2c081601c84016020880161ab42565b01601c01949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040516060810167ffffffffffffffff8111828210171561b31e5761b31e61b2cc565b60405290565b60008067ffffffffffffffff84111561b33f5761b33f61b2cc565b50604051601f19601f85018116603f0116810181811067ffffffffffffffff8211171561b36e5761b36e61b2cc565b60405283815290508082840185101561b38657600080fd5b6186d284602083018561ab42565b600082601f83011261b3a557600080fd5b616a068383516020850161b324565b60006020828403121561b3c657600080fd5b815167ffffffffffffffff81111561b3dd57600080fd5b6169098482850161b394565b6000835161b3fb81846020880161ab42565b83519083019061b40f81836020880161ab42565b01949350505050565b7f4661696c656420746f206465706c6f7920636f6e74726163742000000000000081526000835161b45081601a85016020880161ab42565b7f207573696e6720636f6e7374727563746f722064617461202200000000000000601a91840191820152835161b48d81603384016020880161ab42565b7f220000000000000000000000000000000000000000000000000000000000000060339290910191820152603401949350505050565b60408152600b60408201527f464f554e4452595f4f55540000000000000000000000000000000000000000006060820152608060208201526000616a06608083018461ab66565b60006020828403121561b51c57600080fd5b815167ffffffffffffffff81111561b53357600080fd5b8201601f8101841361b54457600080fd5b6169098482516020840161b324565b6000855161b565818460208a0161ab42565b7f2f00000000000000000000000000000000000000000000000000000000000000908301908152855161b59f816001840160208a0161ab42565b7f2f0000000000000000000000000000000000000000000000000000000000000060019290910191820152845161b5dd81600284016020890161ab42565b6001818301019150507f2f000000000000000000000000000000000000000000000000000000000000006001820152835161b61f81600284016020880161ab42565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600292909101918201526007019695505050505050565b60408152600061b66a604083018461ab66565b8281036020840152600481527f2e6173740000000000000000000000000000000000000000000000000000000060208201526040810191505092915050565b7f436f756c64206e6f742066696e642041535420696e206172746966616374200081526000825161b6e181601f85016020870161ab42565b7f2e205365742060617374203d20747275656020696e20666f756e6472792e746f601f9390910192830152507f6d6c000000000000000000000000000000000000000000000000000000000000603f820152604101919050565b60408152600061b74e604083018461ab66565b8281036020840152601181527f2e6173742e6162736f6c7574655061746800000000000000000000000000000060208201526040810191505092915050565b60408152600061b7a0604083018461ab66565b8281036020840152600c81527f2e6173742e6c6963656e7365000000000000000000000000000000000000000060208201526040810191505092915050565b7f2e6d657461646174612e736f75726365732e5b2700000000000000000000000081526000825161b81781601485016020870161ab42565b7f275d2e6b656363616b32353600000000000000000000000000000000000000006014939091019283015250602001919050565b60408152600061b85e604083018561ab66565b8281036020840152616a02818561ab66565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f220000000000000000000000000000000000000000000000000000000000000081526000825161b8d781600185016020870161ab42565b7f22000000000000000000000000000000000000000000000000000000000000006001939091019283015250600201919050565b6000825161b91d81846020870161ab42565b7f2f6275696c642d696e666f000000000000000000000000000000000000000000920191825250600b01919050565b7f436f756c64206e6f742066696e64206275696c642d696e666f2066696c65207781527f697468206d61746368696e6720736f7572636520636f6465206861736820666f60208201527f7220636f6e74726163742000000000000000000000000000000000000000000060408201526000825161b9d081604b85016020870161ab42565b91909101604b0192915050565b600060ff821660ff810361b9f35761b9f361b187565b60010192915050565b7f406f70656e7a657070656c696e2f646566656e6465722d6465706c6f792d636c81527f69656e742d636c6940000000000000000000000000000000000000000000000060208201526000825161ba5a81602985016020870161ab42565b9190910160290192915050565b60408152601660408201527f4f50454e5a455050454c494e5f424153485f50415448000000000000000000006060820152608060208201526000616a06608083018461ab66565b60006020828403121561bac057600080fd5b815167ffffffffffffffff81111561bad757600080fd5b82016060818503121561bae957600080fd5b61baf161b2fb565b81518060030b811461bb0257600080fd5b8152602082015167ffffffffffffffff81111561bb1e57600080fd5b61bb2a8682850161b394565b602083015250604082015167ffffffffffffffff81111561bb4a57600080fd5b61bb568682850161b394565b604083015250949350505050565b7f4661696c656420746f2072756e206261736820636f6d6d616e6420776974682081527f220000000000000000000000000000000000000000000000000000000000000060208201526000825161bbc281602185016020870161ab42565b7f222e20496620796f7520617265207573696e672057696e646f77732c2073657460219390910192830152507f20746865204f50454e5a455050454c494e5f424153485f5041544820656e766960418201527f726f6e6d656e74207661726961626c6520746f207468652066756c6c7920717560618201527f616c69666965642070617468206f66207468652062617368206578656375746160818201527f626c652e20466f72206578616d706c652c20696620796f75206172652075736960a18201527f6e672047697420666f722057696e646f77732c206164642074686520666f6c6c60c18201527f6f77696e67206c696e6520696e20746865202e656e762066696c65206f66207960e18201527f6f75722070726f6a65637420287573696e6720666f727761726420736c6173686101018201527f6573293a0a4f50454e5a455050454c494e5f424153485f504154483d22433a2f6101218201527f50726f6772616d2046696c65732f4769742f62696e2f6261736822000000000061014182015261015c01919050565b7f4661696c656420746f2066696e64206c696e652077697468207072656669782081527f270000000000000000000000000000000000000000000000000000000000000060208201526000835161bdae81602185016020880161ab42565b7f2720696e206f75747075743a2000000000000000000000000000000000000000602191840191820152835161bdeb81602e84016020880161ab42565b01602e01949350505050565b7f4661696c656420746f2072756e2075706772616465207361666574792076616c81527f69646174696f6e3a20000000000000000000000000000000000000000000000060208201526000825161ba5a81602985016020870161ab42565b7f55706772616465207361666574792076616c69646174696f6e206661696c656481527f3a0a00000000000000000000000000000000000000000000000000000000000060208201526000825161beb381602285016020870161ab42565b9190910160220192915050565b7f436f6e7472616374206e616d652000000000000000000000000000000000000081526000825161bef881600e85016020870161ab42565b7f206d75737420626520696e2074686520666f726d6174204d79436f6e74726163600e9390910192830152507f742e736f6c3a4d79436f6e7472616374206f72204d79436f6e74726163742e73602e8201527f6f6c206f72206f75742f4d79436f6e74726163742e736f6c2f4d79436f6e7472604e8201527f6163742e6a736f6e000000000000000000000000000000000000000000000000606e820152607601919050565b7f53504458206c6963656e7365206964656e74696669657220000000000000000081526000835161bfd681601885016020880161ab42565b7f20696e2000000000000000000000000000000000000000000000000000000000601891840191820152835161c01381601c84016020880161ab42565b7f20646f6573206e6f74206c6f6f6b206c696b65206120737570706f7274656420601c92909101918201527f6c6963656e736520666f7220626c6f636b206578706c6f726572207665726966603c8201527f69636174696f6e2e205573652074686520606c6963656e73655479706560206f605c8201527f7074696f6e20746f20737065636966792061206c6963656e736520747970652c607c8201527f206f7220736574207468652060736b69704c6963656e73655479706560206f70609c8201527f74696f6e20746f2060747275656020746f20736b69702e00000000000000000060bc82015260d301949350505050565b6000825161c11981846020870161ab42565b7f2000000000000000000000000000000000000000000000000000000000000000920191825250600101919050565b7f406f70656e7a657070656c696e2f75706772616465732d636f7265400000000081526000825161c18081601c85016020870161ab42565b91909101601c0192915050565b6000600019820361c1a05761c1a061b187565b5060010190565b808202811582820484141761690d5761690d61b187565b6001815b600184111561c1f95780850481111561c1dd5761c1dd61b187565b600184161561c1eb57908102905b60019390931c92800261c1c2565b935093915050565b60008261c2105750600161690d565b8161c21d5750600061690d565b816001811461c233576002811461c23d5761c259565b600191505061690d565b60ff84111561c24e5761c24e61b187565b50506001821b61690d565b5060208310610133831016604e8410600b841016171561c27c575081810a61690d565b61c289600019848461c1be565b806000190482111561c29d5761c29d61b187565b029392505050565b6000616a06838361c201565b60008161c2c05761c2c061b187565b506000190190565b6000835161c2da81846020880161ab42565b7f3a00000000000000000000000000000000000000000000000000000000000000908301908152835161c31481600184016020880161ab42565b01600101949350505050565b8181036000831280158383131683831282161715619cca57619cca61b18756fe60c0604052600d60809081526c2bb930b83832b21022ba3432b960991b60a05260009061002c9082610114565b506040805180820190915260048152630ae8aa8960e31b60208201526001906100559082610114565b506002805460ff1916601217905534801561006f57600080fd5b506101d2565b634e487b7160e01b600052604160045260246000fd5b600181811c9082168061009f57607f821691505b6020821081036100bf57634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111561010f57806000526020600020601f840160051c810160208510156100ec5750805b601f840160051c820191505b8181101561010c57600081556001016100f8565b50505b505050565b81516001600160401b0381111561012d5761012d610075565b6101418161013b845461008b565b846100c5565b6020601f821160018114610175576000831561015d5750848201515b600019600385901b1c1916600184901b17845561010c565b600084815260208120601f198516915b828110156101a55787850151825560209485019460019092019101610185565b50848210156101c35786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b610986806101e16000396000f3fe6080604052600436106100c05760003560e01c8063313ce56711610074578063a9059cbb1161004e578063a9059cbb146101fa578063d0e30db01461021a578063dd62ed3e1461022257600080fd5b8063313ce5671461018c57806370a08231146101b857806395d89b41146101e557600080fd5b806318160ddd116100a557806318160ddd1461012f57806323b872dd1461014c5780632e1a7d4d1461016c57600080fd5b806306fdde03146100d4578063095ea7b3146100ff57600080fd5b366100cf576100cd61025a565b005b600080fd5b3480156100e057600080fd5b506100e96102b5565b6040516100f69190610745565b60405180910390f35b34801561010b57600080fd5b5061011f61011a3660046107da565b610343565b60405190151581526020016100f6565b34801561013b57600080fd5b50475b6040519081526020016100f6565b34801561015857600080fd5b5061011f610167366004610804565b6103bd565b34801561017857600080fd5b506100cd610187366004610841565b610647565b34801561019857600080fd5b506002546101a69060ff1681565b60405160ff90911681526020016100f6565b3480156101c457600080fd5b5061013e6101d336600461085a565b60036020526000908152604090205481565b3480156101f157600080fd5b506100e9610724565b34801561020657600080fd5b5061011f6102153660046107da565b610731565b6100cd61025a565b34801561022e57600080fd5b5061013e61023d366004610875565b600460209081526000928352604080842090915290825290205481565b33600090815260036020526040812080543492906102799084906108d7565b909155505060405134815233907fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c9060200160405180910390a2565b600080546102c2906108ea565b80601f01602080910402602001604051908101604052809291908181526020018280546102ee906108ea565b801561033b5780601f106103105761010080835404028352916020019161033b565b820191906000526020600020905b81548152906001019060200180831161031e57829003601f168201915b505050505081565b33600081815260046020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925906103ab9086815260200190565b60405180910390a35060015b92915050565b73ffffffffffffffffffffffffffffffffffffffff831660009081526003602052604081205482111561042b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600060248201526044015b60405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff841633148015906104a1575073ffffffffffffffffffffffffffffffffffffffff841660009081526004602090815260408083203384529091529020547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff14155b156105605773ffffffffffffffffffffffffffffffffffffffff8416600090815260046020908152604080832033845290915290205482111561051a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526020600482015260006024820152604401610422565b73ffffffffffffffffffffffffffffffffffffffff841660009081526004602090815260408083203384529091528120805484929061055a90849061093d565b90915550505b73ffffffffffffffffffffffffffffffffffffffff84166000908152600360205260408120805484929061059590849061093d565b909155505073ffffffffffffffffffffffffffffffffffffffff8316600090815260036020526040812080548492906105cf9084906108d7565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161063591815260200190565b60405180910390a35060019392505050565b3360009081526003602052604090205481111561069a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526020600482015260006024820152604401610422565b33600090815260036020526040812080548392906106b990849061093d565b9091555050604051339082156108fc029083906000818181858888f193505050501580156106eb573d6000803e3d6000fd5b5060405181815233907f7fcf532c15f0a6db0bd6d0e038bea71d30d808c7d98cb3bf7268a95bf5081b659060200160405180910390a250565b600180546102c2906108ea565b600061073e3384846103bd565b9392505050565b602081526000825180602084015260005b818110156107735760208186018101516040868401015201610756565b5060006040828501015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011684010191505092915050565b803573ffffffffffffffffffffffffffffffffffffffff811681146107d557600080fd5b919050565b600080604083850312156107ed57600080fd5b6107f6836107b1565b946020939093013593505050565b60008060006060848603121561081957600080fd5b610822846107b1565b9250610830602085016107b1565b929592945050506040919091013590565b60006020828403121561085357600080fd5b5035919050565b60006020828403121561086c57600080fd5b61073e826107b1565b6000806040838503121561088857600080fd5b610891836107b1565b915061089f602084016107b1565b90509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b808201808211156103b7576103b76108a8565b600181811c908216806108fe57607f821691505b602082108103610937577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b818103818111156103b7576103b76108a856fea264697066735822122008d7fc4e09519c5dd9f356b03596f6829a151d0bc7682533f9ceab4e459f5ee264736f6c634300081a00336080604052348015600f57600080fd5b506105208061001f6000396000f3fe60806040526004361061002a5760003560e01c806369582bee14610033578063de43156e1461005357005b3661003157005b005b34801561003f57600080fd5b5061003161004e3660046101ba565b610073565b34801561005f57600080fd5b5061003161006e3660046101ba565b6100ee565b6060811561008a5761008782840184610273565b90505b7ffdc887992b033668833927e252058e468fac0b6bd196d520f09c61b740e999486100b58780610369565b6100c560408a0160208b016103ce565b896040013533866040516100de969594939291906103f0565b60405180910390a1505050505050565b606081156101055761010282840184610273565b90505b7fcdc8ee677dc5ebe680fb18cebda5e26ba5ea1f0ba504a47e2a9a2ecb476dc98e6100b58780610369565b60006060828403121561014257600080fd5b50919050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461016c57600080fd5b919050565b60008083601f84011261018357600080fd5b50813567ffffffffffffffff81111561019b57600080fd5b6020830191508360208285010111156101b357600080fd5b9250929050565b6000806000806000608086880312156101d257600080fd5b853567ffffffffffffffff8111156101e957600080fd5b6101f588828901610130565b95505061020460208701610148565b935060408601359250606086013567ffffffffffffffff81111561022757600080fd5b61023388828901610171565b969995985093965092949392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60006020828403121561028557600080fd5b813567ffffffffffffffff81111561029c57600080fd5b8201601f810184136102ad57600080fd5b803567ffffffffffffffff8111156102c7576102c7610244565b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8501160116810181811067ffffffffffffffff8211171561033357610333610244565b60405281815282820160200186101561034b57600080fd5b81602084016020830137600091810160200191909152949350505050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261039e57600080fd5b83018035915067ffffffffffffffff8211156103b957600080fd5b6020019150368190038213156101b357600080fd5b6000602082840312156103e057600080fd5b6103e982610148565b9392505050565b60a081528560a0820152858760c0830137600060c0878301015260007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f880116820173ffffffffffffffffffffffffffffffffffffffff8716602084015285604084015273ffffffffffffffffffffffffffffffffffffffff8516606084015260c083820301608084015283518060c083015260005b818110156104a557602081870181015184830160e0015201610488565b50600060e0838301810191909152601f9091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016909101019897505050505050505056fea2646970667358221220b5ac4aa023957e7bc2aaba2c22840cdbf052fb679bd912caa0c8614a69afc7b164736f6c634300081a003360c060405234801561001057600080fd5b5060405161106f38038061106f83398101604081905261002f916100db565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461006357604051632b2add3d60e01b815260040160405180910390fd5b600380546001600160a01b0319166001600160a01b0385811691909117909155828116608052811660a0526040517f80699e81136d69cb8367ad52a994e25c722a86da654b561d0c14b61a777e7ac590600090a150505061011e565b80516001600160a01b03811681146100d657600080fd5b919050565b6000806000606084860312156100f057600080fd5b6100f9846100bf565b9250610107602085016100bf565b9150610115604085016100bf565b90509250925092565b60805160a051610f2561014a60003960006101e50152600081816102b9015261045b0152610f256000f3fe608060405234801561001057600080fd5b50600436106100f55760003560e01c806397770dff11610097578063c63585cc11610066578063c63585cc14610273578063d7fd7afb14610286578063d936a012146102b4578063ee2815ba146102db57600080fd5b806397770dff1461021a578063a7cb05071461022d578063c39aca3714610240578063c62178ac1461025357600080fd5b8063513a9c05116100d3578063513a9c051461018a578063569541b9146101c0578063842da36d146101e057806391dd645f1461020757600080fd5b80630be15547146100fa5780631f0e251b1461015a5780633ce4a5bc1461016f575b600080fd5b610130610108366004610bd1565b60016020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b61016d610168366004610c13565b6102ee565b005b61013073735b14bb79463307aacbed86daf3322b1e6226ab81565b610130610198366004610bd1565b60026020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b6003546101309073ffffffffffffffffffffffffffffffffffffffff1681565b6101307f000000000000000000000000000000000000000000000000000000000000000081565b61016d610215366004610c35565b610402565b61016d610228366004610c13565b610526565b61016d61023b366004610c61565b610633565b61016d61024e366004610c83565b6106ce565b6004546101309073ffffffffffffffffffffffffffffffffffffffff1681565b610130610281366004610d53565b6108cd565b6102a6610294366004610bd1565b60006020819052908152604090205481565b604051908152602001610151565b6101307f000000000000000000000000000000000000000000000000000000000000000081565b61016d6102e9366004610c35565b610a02565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461033b576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116610388576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600480547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527f3ade88e3922d64780e1bf4460d364c2970b69da813f9c0c07a1c187b5647636c906020015b60405180910390a150565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461044f576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600354600090610497907f00000000000000000000000000000000000000000000000000000000000000009073ffffffffffffffffffffffffffffffffffffffff16846108cd565b60008481526002602090815260409182902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff85169081179091558251878152918201529192507f0ecec485166da6139b13bb7e033e9446e2d35348e80ebf1180d4afe2dba1704e910160405180910390a1505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610573576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff81166105c0576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527fdba79d534382d1a8ae108e4c8ecb27c6ae42ab8b91d44eedf88bd329f3868d5e906020016103f7565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610680576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000828152602081815260409182902083905581518481529081018390527f49f492222906ac486c3c1401fa545626df1f0c0e5a77a05597ea2ed66af9850d91015b60405180910390a15050565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461071b576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff831673735b14bb79463307aacbed86daf3322b1e6226ab1480610768575073ffffffffffffffffffffffffffffffffffffffff831630145b1561079f576040517f82d5d76a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f47e7ef2400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152602482018690528616906347e7ef24906044016020604051808303816000875af1158015610814573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108389190610d96565b506040517fde43156e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84169063de43156e906108939089908990899088908890600401610e01565b600060405180830381600087803b1580156108ad57600080fd5b505af11580156108c1573d6000803e3d6000fd5b50505050505050505050565b60008060006108dc8585610ad3565b6040517fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606084811b8216602084015283901b16603482015291935091508690604801604051602081830303815290604052805190602001206040516020016109c29291907fff00000000000000000000000000000000000000000000000000000000000000815260609290921b7fffffffffffffffffffffffffffffffffffffffff00000000000000000000000016600183015260158201527f96e8ac4277198ff8b6f785478aa9a39f403cb768dd02cbee326c3e7da348845f603582015260550190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291905280516020909101209695505050505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610a4f576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008281526001602090815260409182902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff85169081179091558251858152918201527fd1b36d30f6248e97c473b4d1348ca164a4ef6759022f54a58ec200326c39c45d91016106c2565b6000808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603610b3b576040517fcb1e7cfe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1610610b75578284610b78565b83835b909250905073ffffffffffffffffffffffffffffffffffffffff8216610bca576040517f78b507da00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b9250929050565b600060208284031215610be357600080fd5b5035919050565b803573ffffffffffffffffffffffffffffffffffffffff81168114610c0e57600080fd5b919050565b600060208284031215610c2557600080fd5b610c2e82610bea565b9392505050565b60008060408385031215610c4857600080fd5b82359150610c5860208401610bea565b90509250929050565b60008060408385031215610c7457600080fd5b50508035926020909101359150565b60008060008060008060a08789031215610c9c57600080fd5b863567ffffffffffffffff811115610cb357600080fd5b87016060818a031215610cc557600080fd5b9550610cd360208801610bea565b945060408701359350610ce860608801610bea565b9250608087013567ffffffffffffffff811115610d0457600080fd5b8701601f81018913610d1557600080fd5b803567ffffffffffffffff811115610d2c57600080fd5b896020828401011115610d3e57600080fd5b60208201935080925050509295509295509295565b600080600060608486031215610d6857600080fd5b610d7184610bea565b9250610d7f60208501610bea565b9150610d8d60408501610bea565b90509250925092565b600060208284031215610da857600080fd5b81518015158114610c2e57600080fd5b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b60808152600086357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1883603018112610e3957600080fd5b870160208101903567ffffffffffffffff811115610e5657600080fd5b803603821315610e6557600080fd5b60606080850152610e7a60e085018284610db8565b91505073ffffffffffffffffffffffffffffffffffffffff610e9e60208a01610bea565b1660a0840152604088013560c084015273ffffffffffffffffffffffffffffffffffffffff871660208401528560408401528281036060840152610ee3818587610db8565b9897505050505050505056fea2646970667358221220fea45cb058045b493e646c8b9505ea080ab95fd7ed4498b922d179cf1abec08e64736f6c634300081a003360e060405234801561001057600080fd5b50604051611bb9380380611bb983398101604081905261002f9161020e565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461006357604051632b2add3d60e01b815260040160405180910390fd5b6001600160a01b038216158061008057506001600160a01b038116155b1561009e5760405163d92e233d60e01b815260040160405180910390fd5b60066100aa8982610360565b5060076100b78882610360565b5060ff861660c05260808590528360028111156100d6576100d661041e565b60a08160028111156100ea576100ea61041e565b905250600192909255600080546001600160a01b039283166001600160a01b03199182161790915560088054929093169116179055506104349350505050565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261015157600080fd5b81516001600160401b0381111561016a5761016a61012a565b604051601f8201601f19908116603f011681016001600160401b03811182821017156101985761019861012a565b6040528181528382016020018510156101b057600080fd5b60005b828110156101cf576020818601810151838301820152016101b3565b506000918101602001919091529392505050565b8051600381106101f257600080fd5b919050565b80516001600160a01b03811681146101f257600080fd5b600080600080600080600080610100898b03121561022b57600080fd5b88516001600160401b0381111561024157600080fd5b61024d8b828c01610140565b60208b015190995090506001600160401b0381111561026b57600080fd5b6102778b828c01610140565b975050604089015160ff8116811461028e57600080fd5b60608a015190965094506102a460808a016101e3565b60a08a015190945092506102ba60c08a016101f7565b91506102c860e08a016101f7565b90509295985092959890939650565b600181811c908216806102eb57607f821691505b60208210810361030b57634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111561035b57806000526020600020601f840160051c810160208510156103385750805b601f840160051c820191505b818110156103585760008155600101610344565b50505b505050565b81516001600160401b038111156103795761037961012a565b61038d8161038784546102d7565b84610311565b6020601f8211600181146103c157600083156103a95750848201515b600019600385901b1c1916600184901b178455610358565b600084815260208120601f198516915b828110156103f157878501518255602094850194600190920191016103d1565b508482101561040f5786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b634e487b7160e01b600052602160045260246000fd5b60805160a05160c05161174861047160003960006102170152600061033a0152600081816102eb01528181610ad70152610bdd01526117486000f3fe608060405234801561001057600080fd5b50600436106101985760003560e01c80638b851b95116100e3578063ccc775991161008c578063eddeb12311610066578063eddeb12314610431578063f2441b3214610444578063f687d12a1461046457600080fd5b8063ccc77599146103a4578063d9eeebed146103b7578063dd62ed3e146103eb57600080fd5b8063a9059cbb116100bd578063a9059cbb14610369578063c70126261461037c578063c835d7cc1461038f57600080fd5b80638b851b951461030d57806395d89b411461032d578063a3413d031461033557600080fd5b80633ce4a5bc116101455780634d8943bb1161011f5780634d8943bb146102a757806370a08231146102b057806385e1f4d0146102e657600080fd5b80633ce4a5bc1461024157806342966c681461028157806347e7ef241461029457600080fd5b806318160ddd1161017657806318160ddd146101f557806323b872dd146101fd578063313ce5671461021057600080fd5b806306fdde031461019d578063091d2788146101bb578063095ea7b3146101d2575b600080fd5b6101a5610477565b6040516101b29190611327565b60405180910390f35b6101c460015481565b6040519081526020016101b2565b6101e56101e0366004611366565b610509565b60405190151581526020016101b2565b6005546101c4565b6101e561020b366004611392565b610520565b60405160ff7f00000000000000000000000000000000000000000000000000000000000000001681526020016101b2565b61025c73735b14bb79463307aacbed86daf3322b1e6226ab81565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101b2565b6101e561028f3660046113d3565b6105b7565b6101e56102a2366004611366565b6105cb565b6101c460025481565b6101c46102be3660046113ec565b73ffffffffffffffffffffffffffffffffffffffff1660009081526003602052604090205490565b6101c47f000000000000000000000000000000000000000000000000000000000000000081565b60085461025c9073ffffffffffffffffffffffffffffffffffffffff1681565b6101a561071f565b61035c7f000000000000000000000000000000000000000000000000000000000000000081565b6040516101b29190611409565b6101e5610377366004611366565b61072e565b6101e561038a366004611479565b61073b565b6103a261039d3660046113ec565b61088a565b005b6103a26103b23660046113ec565b61099e565b6103bf610aab565b6040805173ffffffffffffffffffffffffffffffffffffffff90931683526020830191909152016101b2565b6101c46103f9366004611571565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260046020908152604080832093909416825291909152205490565b6103a261043f3660046113d3565b610cc9565b60005461025c9073ffffffffffffffffffffffffffffffffffffffff1681565b6103a26104723660046113d3565b610d4b565b606060068054610486906115aa565b80601f01602080910402602001604051908101604052809291908181526020018280546104b2906115aa565b80156104ff5780601f106104d4576101008083540402835291602001916104ff565b820191906000526020600020905b8154815290600101906020018083116104e257829003601f168201915b5050505050905090565b6000610516338484610dcd565b5060015b92915050565b600061052d848484610ed6565b73ffffffffffffffffffffffffffffffffffffffff8416600090815260046020908152604080832033845290915290205482811015610598576040517f10bad14700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6105ac85336105a7868561162c565b610dcd565b506001949350505050565b60006105c33383611091565b506001919050565b60003373735b14bb79463307aacbed86daf3322b1e6226ab14801590610609575060005473ffffffffffffffffffffffffffffffffffffffff163314155b801561062d575060085473ffffffffffffffffffffffffffffffffffffffff163314155b15610664576040517fddb5de5e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61066e83836111d3565b6040517f735b14bb79463307aacbed86daf3322b1e6226ab000000000000000000000000602082015273ffffffffffffffffffffffffffffffffffffffff8416907f67fc7bdaed5b0ec550d8706b87d60568ab70c6b781263c70101d54cd1564aab390603401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529082905261070e91869061163f565b60405180910390a250600192915050565b606060078054610486906115aa565b6000610516338484610ed6565b6000806000610748610aab565b6040517f23b872dd00000000000000000000000000000000000000000000000000000000815233600482015273735b14bb79463307aacbed86daf3322b1e6226ab602482015260448101829052919350915073ffffffffffffffffffffffffffffffffffffffff8316906323b872dd906064016020604051808303816000875af11580156107da573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107fe9190611661565b610834576040517f0a7cd6d600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61083e3385611091565b60025460405133917f9ffbffc04a397460ee1dbe8c9503e098090567d6b7f4b3c02a8617d800b6d9559161087791899189918791611683565b60405180910390a2506001949350505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab146108d7576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116610924576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527fd55614e962c5fd6ece71614f6348d702468a997a394dd5e5c1677950226d97ae906020015b60405180910390a150565b3373735b14bb79463307aacbed86daf3322b1e6226ab146109eb576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116610a38576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600880547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527f88815d964e380677e86d817e7d65dea59cb7b4c3b5b7a0c8ec7ea4a74f90a38790602001610993565b600080546040517f0be155470000000000000000000000000000000000000000000000000000000081527f000000000000000000000000000000000000000000000000000000000000000060048201528291829173ffffffffffffffffffffffffffffffffffffffff90911690630be1554790602401602060405180830381865afa158015610b3e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b6291906116b2565b905073ffffffffffffffffffffffffffffffffffffffff8116610bb1576040517f78fff39600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080546040517fd7fd7afb0000000000000000000000000000000000000000000000000000000081527f0000000000000000000000000000000000000000000000000000000000000000600482015273ffffffffffffffffffffffffffffffffffffffff9091169063d7fd7afb90602401602060405180830381865afa158015610c40573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c6491906116cf565b905080600003610ca0576040517fe661aed000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060025460015483610cb391906116e8565b610cbd91906116ff565b92959294509192505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610d16576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60028190556040518181527fef13af88e424b5d15f49c77758542c1938b08b8b95b91ed0751f98ba99000d8f90602001610993565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610d98576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018190556040518181527fff5788270f43bfc1ca41c503606d2594aa3023a1a7547de403a3e2f146a4a80a90602001610993565b73ffffffffffffffffffffffffffffffffffffffff8316610e1a576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216610e67576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff83811660008181526004602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8316610f23576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216610f70576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff831660009081526003602052604090205481811015610fd0576040517ffe382aa700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610fda828261162c565b73ffffffffffffffffffffffffffffffffffffffff808616600090815260036020526040808220939093559085168152908120805484929061101d9084906116ff565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161108391815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff82166110de576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff82166000908152600360205260409020548181101561113e576040517ffe382aa700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611148828261162c565b73ffffffffffffffffffffffffffffffffffffffff84166000908152600360205260408120919091556005805484929061118390849061162c565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90602001610ec9565b73ffffffffffffffffffffffffffffffffffffffff8216611220576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b806005600082825461123291906116ff565b909155505073ffffffffffffffffffffffffffffffffffffffff82166000908152600360205260408120805483929061126c9084906116ff565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6000815180845260005b818110156112e9576020818501810151868301820152016112cd565b5060006020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b60208152600061133a60208301846112c3565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff8116811461136357600080fd5b50565b6000806040838503121561137957600080fd5b823561138481611341565b946020939093013593505050565b6000806000606084860312156113a757600080fd5b83356113b281611341565b925060208401356113c281611341565b929592945050506040919091013590565b6000602082840312156113e557600080fd5b5035919050565b6000602082840312156113fe57600080fd5b813561133a81611341565b6020810160038310611444577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000806040838503121561148c57600080fd5b823567ffffffffffffffff8111156114a357600080fd5b8301601f810185136114b457600080fd5b803567ffffffffffffffff8111156114ce576114ce61144a565b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8501160116810181811067ffffffffffffffff8211171561153a5761153a61144a565b60405281815282820160200187101561155257600080fd5b8160208401602083013760006020928201830152969401359450505050565b6000806040838503121561158457600080fd5b823561158f81611341565b9150602083013561159f81611341565b809150509250929050565b600181811c908216806115be57607f821691505b6020821081036115f7577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8181038181111561051a5761051a6115fd565b60408152600061165260408301856112c3565b90508260208301529392505050565b60006020828403121561167357600080fd5b8151801515811461133a57600080fd5b60808152600061169660808301876112c3565b6020830195909552506040810192909252606090910152919050565b6000602082840312156116c457600080fd5b815161133a81611341565b6000602082840312156116e157600080fd5b5051919050565b808202811582820484141761051a5761051a6115fd565b8082018082111561051a5761051a6115fd56fea26469706673582212204013e39523742118b3f2227e145ee7e48176ba6aebead33c596dca2acb59a74c64736f6c634300081a0033a2646970667358221220f34efb5d5c19f227364e9c898da9fc460e2d15c184f81d9e52c198a6b8479c7464736f6c634300081a0033", + ABI: "[{\"type\":\"function\",\"name\":\"IS_TEST\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"PAUSER_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeArtifacts\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedArtifacts_\",\"type\":\"string[]\",\"internalType\":\"string[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeContracts\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedContracts_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeSelectors\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedSelectors_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzSelector[]\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"selectors\",\"type\":\"bytes4[]\",\"internalType\":\"bytes4[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeSenders\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedSenders_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"failed\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"setUp\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"targetArtifactSelectors\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedArtifactSelectors_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzArtifactSelector[]\",\"components\":[{\"name\":\"artifact\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"selectors\",\"type\":\"bytes4[]\",\"internalType\":\"bytes4[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetArtifacts\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedArtifacts_\",\"type\":\"string[]\",\"internalType\":\"string[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetContracts\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedContracts_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetInterfaces\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedInterfaces_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzInterface[]\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"artifacts\",\"type\":\"string[]\",\"internalType\":\"string[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetSelectors\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedSelectors_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzSelector[]\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"selectors\",\"type\":\"bytes4[]\",\"internalType\":\"bytes4[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetSenders\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedSenders_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"testDeposit\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositAndRevertZRC20AndCallUniversalContract\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositAndRevertZRC20AndCallUniversalContractFailsITargetIsFungibleModule\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositAndRevertZRC20AndCallUniversalContractFailsITargetIsGateway\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositAndRevertZRC20AndCallUniversalContractFailsIfAmountIsZero\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositAndRevertZRC20AndCallUniversalContractFailsIfSenderIsNotFungibleModule\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositAndRevertZRC20AndCallUniversalContractFailsIfTargetIsZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositAndRevertZRC20AndCallUniversalContractFailsIfZRC20IsZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositFailsIfAmountIs0\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositFailsIfSenderNotFungibleModule\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositFailsIfTargetIsFungibleModule\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositFailsIfTargetIsGateway\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositFailsIfTargetIsZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositFailsIfZRC20IsZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositTogglePause\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositZETAAndCallUniversal\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositZETAAndCallUniversalContract\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositZETAAndCallUniversalContractFailsIfSenderIsNotFungibleModule\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositZETAAndCallUniversalContractFailsIfTargetIsAmountIsZero\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositZETAAndCallUniversalContractFailsIfTargetIsFungibleModule\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositZETAAndCallUniversalContractFailsIfTargetIsGateway\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositZETAAndCallUniversalContractFailsIfTargetIsZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositZETAAndCallUniversalContractFailsIfZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositZRC20AndCallUniversalContract\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositZRC20AndCallUniversalContractFailsIfAmountIsZero\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositZRC20AndCallUniversalContractFailsIfSenderIsNotFungibleModule\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositZRC20AndCallUniversalContractFailsIfTargetIsZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositZRC20AndCallUniversalContractFailsIfZRC20IsZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositZRC20AndCallUniversalContractIfTargetIsFungibleModule\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositZRC20AndCallUniversalContractIfTargetIsGateway\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testExecuteFailsIfAmountIsZero\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testExecuteFailsIfTargetIsZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testExecuteFailsIfZRC20IsZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testExecuteRevertUniversalContract\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testExecuteRevertUniversalContractFailsIfAmountIsZero\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testExecuteRevertUniversalContractFailsIfTargetIsZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testExecuteRevertUniversalContractFailsIfZRC20IsZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testExecuteRevertUniversalContractFailsIfZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testExecuteRevertUniversalContractFailsIfZrc20IsZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testExecuteRevertUniversalContractIfSenderIsNotFungibleModule\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testExecuteUniversalContract\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testExecuteUniversalContractFailsIfSenderIsNotFungibleModule\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testExecuteUniversalContractFailsIfZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"event\",\"name\":\"Call\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"chainId\",\"type\":\"uint256\",\"indexed\":true,\"internalType\":\"uint256\"},{\"name\":\"receiver\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"message\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ContextData\",\"inputs\":[{\"name\":\"origin\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"chainID\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"msgSender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"message\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ContextDataRevert\",\"inputs\":[{\"name\":\"origin\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"chainID\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"msgSender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"message\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Withdrawal\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"chainId\",\"type\":\"uint256\",\"indexed\":true,\"internalType\":\"uint256\"},{\"name\":\"receiver\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"zrc20\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"gasfee\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"protocolFlatFee\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"message\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log\",\"inputs\":[{\"name\":\"\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_address\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_array\",\"inputs\":[{\"name\":\"val\",\"type\":\"uint256[]\",\"indexed\":false,\"internalType\":\"uint256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_array\",\"inputs\":[{\"name\":\"val\",\"type\":\"int256[]\",\"indexed\":false,\"internalType\":\"int256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_array\",\"inputs\":[{\"name\":\"val\",\"type\":\"address[]\",\"indexed\":false,\"internalType\":\"address[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_bytes\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_bytes32\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_int\",\"inputs\":[{\"name\":\"\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_address\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_array\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"uint256[]\",\"indexed\":false,\"internalType\":\"uint256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_array\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"int256[]\",\"indexed\":false,\"internalType\":\"int256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_array\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"address[]\",\"indexed\":false,\"internalType\":\"address[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_bytes\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_bytes32\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_decimal_int\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"},{\"name\":\"decimals\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_decimal_uint\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"decimals\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_int\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_string\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_uint\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_string\",\"inputs\":[{\"name\":\"\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_uint\",\"inputs\":[{\"name\":\"\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"logs\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"AccessControlUnauthorizedAccount\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"neededRole\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"type\":\"error\",\"name\":\"CallerIsNotFungibleModule\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"EnforcedPause\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"FailedZetaSent\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"GasFeeTransferFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientZRC20Amount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientZetaAmount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidTarget\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OnlyWZETAOrFungible\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"WithdrawalFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZRC20BurnFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZRC20DepositFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZRC20TransferFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZeroAddress\",\"inputs\":[]}]", + Bin: "0x6080604052600c8054600160ff199182168117909255601f80549091169091179055348015602c57600080fd5b5062010044806200003e6000396000f3fe608060405234801561001057600080fd5b50600436106103835760003560e01c8063828d267c116101de578063b936be8c1161010f578063e09bc659116100ad578063ec294d9f1161007c578063ec294d9f14610599578063ef2b5394146105a1578063fa7626d4146105a9578063fb339a1c146105b657600080fd5b8063e09bc6591461054c578063e20c9f7114610554578063e63ab1e91461055c578063eab7674e1461059157600080fd5b8063c8814d2e116100e9578063c8814d2e1461052c578063d997851314610534578063d9a4fa161461053c578063df881f6c1461054457600080fd5b8063b936be8c14610482578063ba414fa61461050c578063c7b388b11461052457600080fd5b80639c9acd5d1161017c578063a40b515b11610156578063a40b515b146104ec578063b0464fdc146104f4578063b5508aa9146104fc578063b8f2b8211461050457600080fd5b80639c9acd5d146104d45780639ca37e92146104dc578063a0b2c7b1146104e457600080fd5b8063916a17c6116101b8578063916a17c6146104a757806396d9d876146104bc57806397f7661f146104c4578063996b7675146104cc57600080fd5b8063828d267c1461048257806385226c811461048a578063884660a31461049f57600080fd5b80633f7286f4116102b85780635cec7db511610256578063671b91e211610230578063671b91e2146104625780636efa04b51461046a5780637cec29b0146104725780637f924c4e1461047a57600080fd5b80635cec7db5146104455780635d19c0491461039a57806366d9a9a01461044d57600080fd5b80634b9324b6116102925780634b9324b61461039a57806351336fb01461043557806358c9987f1461043d5780635b4c90e1146103e057600080fd5b80633f7286f41461041d57806344b2a40b1461042557806348f4fd071461042d57600080fd5b80632468bc0f116103255780632fa381f4116102ff5780632fa381f4146103fd578063339bd828146104055780633ab5b1991461040d5780633e5e3c231461041557600080fd5b80632468bc0f146103d85780632948df41146103e05780632ade3880146103e857600080fd5b806314b7a6da1161036157806314b7a6da146103a2578063198d5ca4146103aa5780631c785a14146103b25780631ed7831c146103ba57600080fd5b8063084fafab146103885780630a9254e4146103925780630bfc4e4a1461039a575b600080fd5b6103906105be565b005b610390610867565b6103906112d4565b610390611487565b6103906115ed565b610390611875565b6103c261218c565b6040516103cf919061aaf6565b60405180910390f35b6103906121ee565b6103906126b9565b6103f061286c565b6040516103cf919061ab92565b6103906129ae565b610390612ba0565b610390612d51565b6103c2612f02565b6103c2612f62565b610390612fc2565b61039061314a565b6103906132fd565b6103906134b6565b61039061366b565b610455613822565b6040516103cf919061acf8565b6103906139a4565b610390613b62565b610390613f06565b610390614179565b6103906141b2565b610492614495565b6040516103cf919061ad96565b610390614565565b6104af614858565b6040516103cf919061ae0d565b610390614953565b610390614aa6565b610390614c52565b610390614da6565b610390614ef6565b61039061502d565b6103906151e8565b6104af61539d565b610492615498565b610390615568565b610514615726565b60405190151581526020016103cf565b6103906157fa565b6103906159b8565b610390615b69565b610390615ca0565b610390615e5e565b610390616013565b6103c26161cc565b6105837f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b6040519081526020016103cf565b61039061622c565b6103906163e1565b610390616590565b601f546105149060ff1681565b610390616741565b60006040516020016105cf9061aea4565b60408051601f19818403018152606080840190925260205490911b6bffffffffffffffffffffffff191660808301529150600090806094810160408051808303601f190181529181529082526027546001600160a01b03908116602084015260019282018390526024805492517f81bad6f300000000000000000000000000000000000000000000000000000000815260048101859052908101849052604481018490526064810193909352166084820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b1580156106bd57600080fd5b505af11580156106d1573d6000803e3d6000fd5b5050602080546040517ffdc887992b033668833927e252058e468fac0b6bd196d520f09c61b740e99948945061072c93506001600160a01b03909116910160609190911b6bffffffffffffffffffffffff1916815260140190565b60408051601f198184030181529082905260275460205461075d936001600160a01b0392831692600192169061aee1565b60405180910390a160275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa7906024015b600060405180830381600087803b1580156107bf57600080fd5b505af11580156107d3573d6000803e3d6000fd5b50506020546021546024546040517f309f50040000000000000000000000000000000000000000000000000000000081526001600160a01b03938416955063309f50049450610831938793811692600192911690899060040161af92565b600060405180830381600087803b15801561084b57600080fd5b505af115801561085f573d6000803e3d6000fd5b505050505050565b602580547fffffffffffffffffffffffff00000000000000000000000000000000000000009081163017909155602680549091166112341790556040516108ad9061aa05565b604051809103906000f0801580156108c9573d6000803e3d6000fd5b50602280547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03928316908117909155604080518082018252600f81527f476174657761795a45564d2e736f6c0000000000000000000000000000000000602082015260255491516024810193909352921660448201526109ad919060640160408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f485cc955000000000000000000000000000000000000000000000000000000001790526168f4565b601f80547fffffffffffffffffffffff0000000000000000000000000000000000000000ff166101006001600160a01b039384168102919091179182905560208054919092049092167fffffffffffffffffffffffff000000000000000000000000000000000000000090921682178155604080517f3ce4a5bc0000000000000000000000000000000000000000000000000000000081529051633ce4a5bc926004808401939192918290030181865afa158015610a6f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a93919061afe7565b602780547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055604051610ad79061aa13565b604051809103906000f080158015610af3573d6000803e3d6000fd5b50602480547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039283161781556027546040517f06447d5600000000000000000000000000000000000000000000000000000000815292166004830152737109709ecfa91a80626ff3989d68f67f5b1dd12d916306447d569101600060405180830381600087803b158015610b8f57600080fd5b505af1158015610ba3573d6000803e3d6000fd5b505050506000806000604051610bb89061aa21565b6001600160a01b03938416815291831660208301529091166040820152606001604051809103906000f080158015610bf4573d6000803e3d6000fd5b50602380547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03928316908117909155602054604051601293600193849360009391921690610c4a9061aa2f565b610c599695949392919061b010565b604051809103906000f080158015610c75573d6000803e3d6000fd5b50602180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039283169081179091556023546040517fee2815ba0000000000000000000000000000000000000000000000000000000081526001600482015260248101929092529091169063ee2815ba90604401600060405180830381600087803b158015610d0c57600080fd5b505af1158015610d20573d6000803e3d6000fd5b50506023546040517fa7cb050700000000000000000000000000000000000000000000000000000000815260016004820181905260248201526001600160a01b03909116925063a7cb05079150604401600060405180830381600087803b158015610d8a57600080fd5b505af1158015610d9e573d6000803e3d6000fd5b50506027546040517fc88a5e6d0000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152633b9aca006024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c88a5e6d9150604401600060405180830381600087803b158015610e1e57600080fd5b505af1158015610e32573d6000803e3d6000fd5b50505050602260009054906101000a90046001600160a01b03166001600160a01b031663d0e30db0600a6040518263ffffffff1660e01b81526004016000604051808303818588803b158015610e8757600080fd5b505af1158015610e9b573d6000803e3d6000fd5b50506022546020546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152600a60248201529116935063095ea7b3925060440190506020604051808303816000875af1158015610f0f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f33919061b0ff565b506021546025546040517f47e7ef240000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620186a060248201529116906347e7ef24906044016020604051808303816000875af1158015610fa4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fc8919061b0ff565b507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b03166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561102757600080fd5b505af115801561103b573d6000803e3d6000fd5b50506025546040517f06447d560000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506306447d569150602401600060405180830381600087803b1580156110b157600080fd5b505af11580156110c5573d6000803e3d6000fd5b50506021546020546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620186a060248201529116925063095ea7b391506044016020604051808303816000875af1158015611139573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061115d919061b0ff565b50602260009054906101000a90046001600160a01b03166001600160a01b031663d0e30db0600a6040518263ffffffff1660e01b81526004016000604051808303818588803b1580156111af57600080fd5b505af11580156111c3573d6000803e3d6000fd5b50506022546020546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152600a60248201529116935063095ea7b3925060440190506020604051808303816000875af1158015611237573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061125b919061b0ff565b507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b03166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156112ba57600080fd5b505af11580156112ce573d6000803e3d6000fd5b50505050565b60006040516020016112e59061aea4565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401819052600184840152825163ca669fa760e01b815260048101919091529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163ca669fa791602480830192600092919082900301818387803b15801561139357600080fd5b505af11580156113a7573d6000803e3d6000fd5b5050604051630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b15801561141757600080fd5b505af115801561142b573d6000803e3d6000fd5b50506020546024546040517f309f50040000000000000000000000000000000000000000000000000000000081526001600160a01b03928316945063309f5004935061083192869260009260019290911690899060040161af92565b60275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156114e057600080fd5b505af11580156114f4573d6000803e3d6000fd5b5050604051630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b15801561156457600080fd5b505af1158015611578573d6000803e3d6000fd5b50506020546021546040517ff45346dc0000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260016024820152600060448201529116925063f45346dc91506064015b600060405180830381600087803b1580156112ba57600080fd5b6021546026546040516370a0823160e01b81526001600160a01b03918216600482015260019260009216906370a0823190602401602060405180830381865afa15801561163e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611662919061b121565b905061166f600082616913565b60255460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156116c857600080fd5b505af11580156116dc573d6000803e3d6000fd5b5050604051630618f58760e51b81527f2b2add3d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b15801561174c57600080fd5b505af1158015611760573d6000803e3d6000fd5b50506020546021546026546040517ff45346dc0000000000000000000000000000000000000000000000000000000081526001600160a01b0392831660048201526024810188905290821660448201529116925063f45346dc9150606401600060405180830381600087803b1580156117d857600080fd5b505af11580156117ec573d6000803e3d6000fd5b50506021546026546040516370a0823160e01b81526001600160a01b03918216600482015260009450911691506370a0823190602401602060405180830381865afa15801561183f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611863919061b121565b9050611870600082616913565b505050565b60275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156118ce57600080fd5b505af11580156118e2573d6000803e3d6000fd5b5050602754604080516001600160a01b0390921660248301527f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a60448084019190915281518084039091018152606490920181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb392506119cd919060040161b13a565b600060405180830381600087803b1580156119e757600080fd5b505af11580156119fb573d6000803e3d6000fd5b50505050602060009054906101000a90046001600160a01b03166001600160a01b0316638456cb596040518163ffffffff1660e01b8152600401600060405180830381600087803b158015611a4f57600080fd5b505af1158015611a63573d6000803e3d6000fd5b505060275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b158015611ac057600080fd5b505af1158015611ad4573d6000803e3d6000fd5b5050602754604080516001600160a01b0390921660248301527f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a60448084019190915281518084039091018152606490920181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb39250611bbf919060040161b13a565b600060405180830381600087803b158015611bd957600080fd5b505af1158015611bed573d6000803e3d6000fd5b50505050602060009054906101000a90046001600160a01b03166001600160a01b0316633f4ba83a6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015611c4157600080fd5b505af1158015611c55573d6000803e3d6000fd5b505060255460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b158015611cb257600080fd5b505af1158015611cc6573d6000803e3d6000fd5b50505050602060009054906101000a90046001600160a01b03166001600160a01b0316638456cb596040518163ffffffff1660e01b8152600401600060405180830381600087803b158015611d1a57600080fd5b505af1158015611d2e573d6000803e3d6000fd5b5050604051630618f58760e51b81527fd93c066500000000000000000000000000000000000000000000000000000000600482015260019250737109709ecfa91a80626ff3989d68f67f5b1dd12d915063c31eb0e090602401600060405180830381600087803b158015611da157600080fd5b505af1158015611db5573d6000803e3d6000fd5b505060275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b158015611e1257600080fd5b505af1158015611e26573d6000803e3d6000fd5b50506020546021546026546040517ff45346dc0000000000000000000000000000000000000000000000000000000081526001600160a01b0392831660048201526024810187905290821660448201529116925063f45346dc9150606401600060405180830381600087803b158015611e9e57600080fd5b505af1158015611eb2573d6000803e3d6000fd5b505060255460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b158015611f0f57600080fd5b505af1158015611f23573d6000803e3d6000fd5b50505050602060009054906101000a90046001600160a01b03166001600160a01b0316633f4ba83a6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015611f7757600080fd5b505af1158015611f8b573d6000803e3d6000fd5b50506021546026546040516370a0823160e01b81526001600160a01b03918216600482015260009450911691506370a08231906024015b602060405180830381865afa158015611fdf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612003919061b121565b9050612010600082616913565b60275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561206957600080fd5b505af115801561207d573d6000803e3d6000fd5b50506020546021546026546040517ff45346dc0000000000000000000000000000000000000000000000000000000081526001600160a01b0392831660048201526024810188905290821660448201529116925063f45346dc9150606401600060405180830381600087803b1580156120f557600080fd5b505af1158015612109573d6000803e3d6000fd5b50506021546026546040516370a0823160e01b81526001600160a01b03918216600482015260009450911691506370a0823190602401602060405180830381865afa15801561215c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612180919061b121565b90506118708382616913565b606060168054806020026020016040519081016040528092919081815260200182805480156121e457602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116121c6575b5050505050905090565b6022546027546040516370a0823160e01b81526001600160a01b03918216600482015260019260009216906370a0823190602401602060405180830381865afa15801561223f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612263919061b121565b6022546020546040516370a0823160e01b81526001600160a01b0391821660048201529293506000929116906370a0823190602401602060405180830381865afa1580156122b5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122d9919061b121565b6024546040519192506001600160a01b031631906000906122fc9060200161aea4565b60408051601f19818403018152606080840190925260205490911b6bffffffffffffffffffffffff191660808301529150600090806094810160408051808303601f190181529181529082526027546001600160a01b03908116602084015260019282018390526024805492517f81bad6f300000000000000000000000000000000000000000000000000000000815260048101859052908101849052604481018490526064810193909352166084820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b1580156123ea57600080fd5b505af11580156123fe573d6000803e3d6000fd5b5050602080546040517fcdc8ee677dc5ebe680fb18cebda5e26ba5ea1f0ba504a47e2a9a2ecb476dc98e945061245993506001600160a01b03909116910160609190911b6bffffffffffffffffffffffff1916815260140190565b60408051601f1981840301815290829052602754602054612489936001600160a01b03928316928c92169061aee1565b60405180910390a160275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156124ea57600080fd5b505af11580156124fe573d6000803e3d6000fd5b50506020546024546040517f21501a950000000000000000000000000000000000000000000000000000000081526001600160a01b0392831694506321501a9593506125559286928c92911690889060040161b14d565b600060405180830381600087803b15801561256f57600080fd5b505af1158015612583573d6000803e3d6000fd5b50506022546027546040516370a0823160e01b81526001600160a01b03918216600482015260009450911691506370a0823190602401602060405180830381865afa1580156125d6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125fa919061b121565b905061260f612609888861b1b6565b82616913565b6022546020546040516370a0823160e01b81526001600160a01b03918216600482015260009291909116906370a0823190602401602060405180830381865afa158015612660573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612684919061b121565b90506126908682616913565b6126af61269d898761b1c9565b6024546001600160a01b031631616913565b5050505050505050565b60006040516020016126ca9061aea4565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401819052600184840152825163ca669fa760e01b815260048101919091529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163ca669fa791602480830192600092919082900301818387803b15801561277857600080fd5b505af115801561278c573d6000803e3d6000fd5b5050604051630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b1580156127fc57600080fd5b505af1158015612810573d6000803e3d6000fd5b50506020546024546040517fbcf7f32b0000000000000000000000000000000000000000000000000000000081526001600160a01b03928316945063bcf7f32b935061083192869260009260019290911690899060040161af92565b6060601e805480602002602001604051908101604052809291908181526020016000905b828210156129a557600084815260208082206040805180820182526002870290920180546001600160a01b03168352600181018054835181870281018701909452808452939591948681019491929084015b8282101561298e5783829060005260206000200180546129019061b1dc565b80601f016020809104026020016040519081016040528092919081815260200182805461292d9061b1dc565b801561297a5780601f1061294f5761010080835404028352916020019161297a565b820191906000526020600020905b81548152906001019060200180831161295d57829003601f168201915b5050505050815260200190600101906128e2565b505050508152505081526020019060010190612890565b50505050905090565b6040516001906000906129c39060200161aea4565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401526001838301528151630618f58760e51b81527f2b2add3d0000000000000000000000000000000000000000000000000000000060048201529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163c31eb0e091602480830192600092919082900301818387803b158015612a8d57600080fd5b505af1158015612aa1573d6000803e3d6000fd5b505060255460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b158015612afe57600080fd5b505af1158015612b12573d6000803e3d6000fd5b50506020546024546040517f21501a950000000000000000000000000000000000000000000000000000000081526001600160a01b0392831694506321501a959350612b699286928992911690889060040161b14d565b600060405180830381600087803b158015612b8357600080fd5b505af1158015612b97573d6000803e3d6000fd5b50505050505050565b6000604051602001612bb19061aea4565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401819052600184840152825163ca669fa760e01b815260048101919091529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163ca669fa791602480830192600092919082900301818387803b158015612c5f57600080fd5b505af1158015612c73573d6000803e3d6000fd5b5050604051630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b158015612ce357600080fd5b505af1158015612cf7573d6000803e3d6000fd5b50506020546021546040517f5af659670000000000000000000000000000000000000000000000000000000081526001600160a01b039283169450635af6596793506108319286921690600190600090899060040161af92565b6000604051602001612d629061aea4565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401819052600184840152825163ca669fa760e01b815260048101919091529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163ca669fa791602480830192600092919082900301818387803b158015612e1057600080fd5b505af1158015612e24573d6000803e3d6000fd5b5050604051630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b158015612e9457600080fd5b505af1158015612ea8573d6000803e3d6000fd5b50506020546021546040517fbcf7f32b0000000000000000000000000000000000000000000000000000000081526001600160a01b03928316945063bcf7f32b93506108319286921690600190600090899060040161af92565b606060188054806020026020016040519081016040528092919081815260200182805480156121e4576020028201919060005260206000209081546001600160a01b031681526001909101906020018083116121c6575050505050905090565b606060178054806020026020016040519081016040528092919081815260200182805480156121e4576020028201919060005260206000209081546001600160a01b031681526001909101906020018083116121c6575050505050905090565b60275460405163ca669fa760e01b81526001600160a01b039091166004820152600190737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561301e57600080fd5b505af1158015613032573d6000803e3d6000fd5b5050604051630618f58760e51b81527f82d5d76a000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b1580156130a257600080fd5b505af11580156130b6573d6000803e3d6000fd5b50506020546021546027546040517ff45346dc0000000000000000000000000000000000000000000000000000000081526001600160a01b0392831660048201526024810187905290821660448201529116925063f45346dc91506064015b600060405180830381600087803b15801561312f57600080fd5b505af1158015613143573d6000803e3d6000fd5b5050505050565b600060405160200161315b9061aea4565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401819052600184840152825163ca669fa760e01b815260048101919091529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163ca669fa791602480830192600092919082900301818387803b15801561320957600080fd5b505af115801561321d573d6000803e3d6000fd5b5050604051630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b15801561328d57600080fd5b505af11580156132a1573d6000803e3d6000fd5b50506020546024546040517f5af659670000000000000000000000000000000000000000000000000000000081526001600160a01b039283169450635af65967935061083192869260009260019290911690899060040161af92565b600060405160200161330e9061aea4565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401526001838301528151630618f58760e51b81527f82d5d76a0000000000000000000000000000000000000000000000000000000060048201529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163c31eb0e091602480830192600092919082900301818387803b1580156133d857600080fd5b505af11580156133ec573d6000803e3d6000fd5b505060275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b15801561344957600080fd5b505af115801561345d573d6000803e3d6000fd5b50506020546021546040517f5af659670000000000000000000000000000000000000000000000000000000081526001600160a01b039283169450635af65967935061083192869216906001908690899060040161af92565b60006040516020016134c79061aea4565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401819052600184840152825163ca669fa760e01b815260048101919091529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163ca669fa791602480830192600092919082900301818387803b15801561357557600080fd5b505af1158015613589573d6000803e3d6000fd5b5050604051630618f58760e51b81527f5d67094f000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b1580156135f957600080fd5b505af115801561360d573d6000803e3d6000fd5b50506020546021546024546040517fc39aca370000000000000000000000000000000000000000000000000000000081526001600160a01b03938416955063c39aca379450610831938793811692600092911690899060040161af92565b6040516001906000906136809060200161aea4565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401526001838301528151630618f58760e51b81527f82d5d76a0000000000000000000000000000000000000000000000000000000060048201529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163c31eb0e091602480830192600092919082900301818387803b15801561374a57600080fd5b505af115801561375e573d6000803e3d6000fd5b505060275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b1580156137bb57600080fd5b505af11580156137cf573d6000803e3d6000fd5b50506020546040517f21501a950000000000000000000000000000000000000000000000000000000081526001600160a01b0390911692506321501a959150612b6990849087908590889060040161b14d565b6060601b805480602002602001604051908101604052809291908181526020016000905b828210156129a557838290600052602060002090600202016040518060400160405290816000820180546138799061b1dc565b80601f01602080910402602001604051908101604052809291908181526020018280546138a59061b1dc565b80156138f25780601f106138c7576101008083540402835291602001916138f2565b820191906000526020600020905b8154815290600101906020018083116138d557829003601f168201915b505050505081526020016001820180548060200260200160405190810160405280929190818152602001828054801561398c57602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190600401906020826003010492830192600103820291508084116139395790505b50505050508152505081526020019060010190613846565b60006040516020016139b59061aea4565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401526001838301528151630618f58760e51b81527f2b2add3d0000000000000000000000000000000000000000000000000000000060048201529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163c31eb0e091602480830192600092919082900301818387803b158015613a7f57600080fd5b505af1158015613a93573d6000803e3d6000fd5b505060255460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b158015613af057600080fd5b505af1158015613b04573d6000803e3d6000fd5b50506020546021546024546040517f5af659670000000000000000000000000000000000000000000000000000000081526001600160a01b039384169550635af659679450610831938793811692600192911690899060040161af92565b602154602480546040516370a0823160e01b81526001600160a01b03918216600482015260009391909116916370a082319101602060405180830381865afa158015613bb2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613bd6919061b121565b9050613be3600082616913565b6000604051602001613bf49061aea4565b60408051601f19818403018152606080840190925260205490911b6bffffffffffffffffffffffff191660808301529150600090806094810160408051808303601f190181529181529082526027546001600160a01b03908116602084015260019282018390526024805492517f81bad6f300000000000000000000000000000000000000000000000000000000815260048101859052908101849052604481018490526064810193909352166084820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b158015613ce257600080fd5b505af1158015613cf6573d6000803e3d6000fd5b5050602080546040517fcdc8ee677dc5ebe680fb18cebda5e26ba5ea1f0ba504a47e2a9a2ecb476dc98e9450613d5193506001600160a01b03909116910160609190911b6bffffffffffffffffffffffff1916815260140190565b60408051601f1981840301815290829052602754602054613d82936001600160a01b0392831692600192169061aee1565b60405180910390a160275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015613de357600080fd5b505af1158015613df7573d6000803e3d6000fd5b50506020546021546024546040517fc39aca370000000000000000000000000000000000000000000000000000000081526001600160a01b03938416955063c39aca379450613e55938793811692600192911690899060040161af92565b600060405180830381600087803b158015613e6f57600080fd5b505af1158015613e83573d6000803e3d6000fd5b5050602154602480546040516370a0823160e01b81526001600160a01b03918216600482015260009550921692506370a082319101602060405180830381865afa158015613ed5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613ef9919061b121565b90506112ce600182616913565b6000604051602001613f179061aea4565b60408051601f19818403018152606080840190925260205490911b6bffffffffffffffffffffffff191660808301529150600090806094810160408051808303601f190181529181529082526027546001600160a01b03908116602084015260019282018390526024805492517f81bad6f300000000000000000000000000000000000000000000000000000000815260048101859052908101849052604481018490526064810193909352166084820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b15801561400557600080fd5b505af1158015614019573d6000803e3d6000fd5b5050602080546040517fcdc8ee677dc5ebe680fb18cebda5e26ba5ea1f0ba504a47e2a9a2ecb476dc98e945061407493506001600160a01b03909116910160609190911b6bffffffffffffffffffffffff1916815260140190565b60408051601f19818403018152908290526027546020546140a5936001600160a01b0392831692600192169061aee1565b60405180910390a160275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa7906024015b600060405180830381600087803b15801561410757600080fd5b505af115801561411b573d6000803e3d6000fd5b50506020546021546024546040517fbcf7f32b0000000000000000000000000000000000000000000000000000000081526001600160a01b03938416955063bcf7f32b9450610831938793811692600192911690899060040161af92565b6021546026546040516370a0823160e01b81526001600160a01b03918216600482015260019260009216906370a0823190602401611fc2565b6022546027546040516370a0823160e01b81526001600160a01b03918216600482015260019260009216906370a0823190602401602060405180830381865afa158015614203573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614227919061b121565b6022546020546040516370a0823160e01b81526001600160a01b0391821660048201529293506000929116906370a0823190602401602060405180830381865afa158015614279573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061429d919061b121565b6024546040519192506001600160a01b031631906000906142c09060200161aea4565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401819052600184840152825163ca669fa760e01b815260048101919091529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163ca669fa791602480830192600092919082900301818387803b15801561436e57600080fd5b505af1158015614382573d6000803e3d6000fd5b5050604051630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b1580156143f257600080fd5b505af1158015614406573d6000803e3d6000fd5b50506020546040517f21501a950000000000000000000000000000000000000000000000000000000081526001600160a01b0390911692506321501a95915061445b908490600190600090889060040161b14d565b600060405180830381600087803b15801561447557600080fd5b505af1158015614489573d6000803e3d6000fd5b50505050505050505050565b6060601a805480602002602001604051908101604052809291908181526020016000905b828210156129a55783829060005260206000200180546144d89061b1dc565b80601f01602080910402602001604051908101604052809291908181526020018280546145049061b1dc565b80156145515780601f1061452657610100808354040283529160200191614551565b820191906000526020600020905b81548152906001019060200180831161453457829003601f168201915b5050505050815260200190600101906144b9565b602154602480546040516370a0823160e01b81526001600160a01b03918216600482015260009391909116916370a082319101602060405180830381865afa1580156145b5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906145d9919061b121565b90506145e6600082616913565b60006040516020016145f79061aea4565b60408051601f19818403018152606080840190925260205490911b6bffffffffffffffffffffffff191660808301529150600090806094810160408051808303601f190181529181529082526027546001600160a01b03908116602084015260019282018390526024805492517f81bad6f300000000000000000000000000000000000000000000000000000000815260048101859052908101849052604481018490526064810193909352166084820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b1580156146e557600080fd5b505af11580156146f9573d6000803e3d6000fd5b5050602080546040517ffdc887992b033668833927e252058e468fac0b6bd196d520f09c61b740e99948945061475493506001600160a01b03909116910160609190911b6bffffffffffffffffffffffff1916815260140190565b60408051601f1981840301815290829052602754602054614785936001600160a01b0392831692600192169061aee1565b60405180910390a160275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156147e657600080fd5b505af11580156147fa573d6000803e3d6000fd5b50506020546021546024546040517f5af659670000000000000000000000000000000000000000000000000000000081526001600160a01b039384169550635af659679450613e55938793811692600192911690899060040161af92565b6060601d805480602002602001604051908101604052809291908181526020016000905b828210156129a55760008481526020908190206040805180820182526002860290920180546001600160a01b0316835260018101805483518187028101870190945280845293949193858301939283018282801561493b57602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190600401906020826003010492830192600103820291508084116148e85790505b5050505050815250508152602001906001019061487c565b60275460405163ca669fa760e01b81526001600160a01b039091166004820152600190737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156149af57600080fd5b505af11580156149c3573d6000803e3d6000fd5b5050604051630618f58760e51b81527f82d5d76a000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b158015614a3357600080fd5b505af1158015614a47573d6000803e3d6000fd5b50506020546021546040517ff45346dc0000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260248101869052911660448201819052925063f45346dc9150606401613115565b6000604051602001614ab79061aea4565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401819052600184840152825163ca669fa760e01b815260048101919091529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163ca669fa791602480830192600092919082900301818387803b158015614b6557600080fd5b505af1158015614b79573d6000803e3d6000fd5b5050604051630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b158015614be957600080fd5b505af1158015614bfd573d6000803e3d6000fd5b50506020546040517f21501a950000000000000000000000000000000000000000000000000000000081526001600160a01b0390911692506321501a959150610831908490600190600090889060040161b14d565b60275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015614cab57600080fd5b505af1158015614cbf573d6000803e3d6000fd5b5050604051630618f58760e51b81527f5d67094f000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b158015614d2f57600080fd5b505af1158015614d43573d6000803e3d6000fd5b50506020546021546026546040517ff45346dc0000000000000000000000000000000000000000000000000000000081526001600160a01b0392831660048201526000602482015290821660448201529116925063f45346dc91506064016115d3565b60275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015614dff57600080fd5b505af1158015614e13573d6000803e3d6000fd5b5050604051630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b158015614e8357600080fd5b505af1158015614e97573d6000803e3d6000fd5b50506020546026546040517ff45346dc00000000000000000000000000000000000000000000000000000000815260006004820152600160248201526001600160a01b0391821660448201529116925063f45346dc91506064016115d3565b6000604051602001614f079061aea4565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401526001838301528151630618f58760e51b81527f2b2add3d0000000000000000000000000000000000000000000000000000000060048201529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163c31eb0e091602480830192600092919082900301818387803b158015614fd157600080fd5b505af1158015614fe5573d6000803e3d6000fd5b505060255460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa791506024016140ed565b6040516001906000906150429060200161aea4565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401526001838301528151630618f58760e51b81527f82d5d76a0000000000000000000000000000000000000000000000000000000060048201529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163c31eb0e091602480830192600092919082900301818387803b15801561510c57600080fd5b505af1158015615120573d6000803e3d6000fd5b505060275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b15801561517d57600080fd5b505af1158015615191573d6000803e3d6000fd5b50506020546027546040517f21501a950000000000000000000000000000000000000000000000000000000081526001600160a01b0392831694506321501a959350612b699286928992911690889060040161b14d565b60006040516020016151f99061aea4565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401819052600184840152825163ca669fa760e01b815260048101919091529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163ca669fa791602480830192600092919082900301818387803b1580156152a757600080fd5b505af11580156152bb573d6000803e3d6000fd5b5050604051630618f58760e51b81527f5d67094f000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b15801561532b57600080fd5b505af115801561533f573d6000803e3d6000fd5b50506020546021546024546040517f309f50040000000000000000000000000000000000000000000000000000000081526001600160a01b03938416955063309f50049450610831938793811692600092911690899060040161af92565b6060601c805480602002602001604051908101604052809291908181526020016000905b828210156129a55760008481526020908190206040805180820182526002860290920180546001600160a01b0316835260018101805483518187028101870190945280845293949193858301939283018282801561548057602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168152602001906004019060208260030104928301926001038202915080841161542d5790505b505050505081525050815260200190600101906153c1565b60606019805480602002602001604051908101604052809291908181526020016000905b828210156129a55783829060005260206000200180546154db9061b1dc565b80601f01602080910402602001604051908101604052809291908181526020018280546155079061b1dc565b80156155545780601f1061552957610100808354040283529160200191615554565b820191906000526020600020905b81548152906001019060200180831161553757829003601f168201915b5050505050815260200190600101906154bc565b60006040516020016155799061aea4565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401526001838301528151630618f58760e51b81527f82d5d76a0000000000000000000000000000000000000000000000000000000060048201529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163c31eb0e091602480830192600092919082900301818387803b15801561564357600080fd5b505af1158015615657573d6000803e3d6000fd5b505060275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b1580156156b457600080fd5b505af11580156156c8573d6000803e3d6000fd5b50506020546021546027546040517f5af659670000000000000000000000000000000000000000000000000000000081526001600160a01b039384169550635af659679450610831938793811692600192911690899060040161af92565b60085460009060ff161561573e575060085460ff1690565b6040517f667f9d70000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d600482018190527f6661696c65640000000000000000000000000000000000000000000000000000602483015260009163667f9d7090604401602060405180830381865afa1580156157cf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906157f3919061b121565b1415905090565b600060405160200161580b9061aea4565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401526001838301528151630618f58760e51b81527f2b2add3d0000000000000000000000000000000000000000000000000000000060048201529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163c31eb0e091602480830192600092919082900301818387803b1580156158d557600080fd5b505af11580156158e9573d6000803e3d6000fd5b505060255460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b15801561594657600080fd5b505af115801561595a573d6000803e3d6000fd5b50506020546021546024546040517fc39aca370000000000000000000000000000000000000000000000000000000081526001600160a01b03938416955063c39aca379450610831938793811692600192911690899060040161af92565b60006040516020016159c99061aea4565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401819052600184840152825163ca669fa760e01b815260048101919091529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163ca669fa791602480830192600092919082900301818387803b158015615a7757600080fd5b505af1158015615a8b573d6000803e3d6000fd5b5050604051630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b158015615afb57600080fd5b505af1158015615b0f573d6000803e3d6000fd5b50506020546021546040517f309f50040000000000000000000000000000000000000000000000000000000081526001600160a01b03928316945063309f500493506108319286921690600190600090899060040161af92565b6000604051602001615b7a9061aea4565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401526001838301528151630618f58760e51b81527f2b2add3d0000000000000000000000000000000000000000000000000000000060048201529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163c31eb0e091602480830192600092919082900301818387803b158015615c4457600080fd5b505af1158015615c58573d6000803e3d6000fd5b505060255460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa791506024016107a5565b6000604051602001615cb19061aea4565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401526001838301528151630618f58760e51b81527f82d5d76a0000000000000000000000000000000000000000000000000000000060048201529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163c31eb0e091602480830192600092919082900301818387803b158015615d7b57600080fd5b505af1158015615d8f573d6000803e3d6000fd5b505060275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b158015615dec57600080fd5b505af1158015615e00573d6000803e3d6000fd5b50506020546021546027546040517fc39aca370000000000000000000000000000000000000000000000000000000081526001600160a01b03938416955063c39aca379450610831938793811692600192911690899060040161af92565b6000604051602001615e6f9061aea4565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401819052600184840152825163ca669fa760e01b815260048101919091529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163ca669fa791602480830192600092919082900301818387803b158015615f1d57600080fd5b505af1158015615f31573d6000803e3d6000fd5b5050604051630618f58760e51b81527f5d67094f000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b158015615fa157600080fd5b505af1158015615fb5573d6000803e3d6000fd5b50506020546021546024546040517fbcf7f32b0000000000000000000000000000000000000000000000000000000081526001600160a01b03938416955063bcf7f32b9450610831938793811692600092911690899060040161af92565b60006040516020016160249061aea4565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401526001838301528151630618f58760e51b81527f82d5d76a0000000000000000000000000000000000000000000000000000000060048201529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163c31eb0e091602480830192600092919082900301818387803b1580156160ee57600080fd5b505af1158015616102573d6000803e3d6000fd5b505060275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b15801561615f57600080fd5b505af1158015616173573d6000803e3d6000fd5b50506020546021546040517fc39aca370000000000000000000000000000000000000000000000000000000081526001600160a01b03928316945063c39aca37935061083192869216906001908690899060040161af92565b606060158054806020026020016040519081016040528092919081815260200182805480156121e4576020028201919060005260206000209081546001600160a01b031681526001909101906020018083116121c6575050505050905090565b600060405160200161623d9061aea4565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401819052600184840152825163ca669fa760e01b815260048101919091529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163ca669fa791602480830192600092919082900301818387803b1580156162eb57600080fd5b505af11580156162ff573d6000803e3d6000fd5b5050604051630618f58760e51b81527f5d67094f000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b15801561636f57600080fd5b505af1158015616383573d6000803e3d6000fd5b50506020546021546024546040517f5af659670000000000000000000000000000000000000000000000000000000081526001600160a01b039384169550635af659679450610831938793811692600092911690899060040161af92565b60006040516020016163f29061aea4565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401819052600184840152825163ca669fa760e01b815260048101919091529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163ca669fa791602480830192600092919082900301818387803b1580156164a057600080fd5b505af11580156164b4573d6000803e3d6000fd5b5050604051630618f58760e51b81527f19c08f49000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b15801561652457600080fd5b505af1158015616538573d6000803e3d6000fd5b50506020546021546040517f21501a950000000000000000000000000000000000000000000000000000000081526001600160a01b0392831694506321501a959350610831928692600092911690889060040161b14d565b60006040516020016165a19061aea4565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401819052600184840152825163ca669fa760e01b815260048101919091529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163ca669fa791602480830192600092919082900301818387803b15801561664f57600080fd5b505af1158015616663573d6000803e3d6000fd5b5050604051630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b1580156166d357600080fd5b505af11580156166e7573d6000803e3d6000fd5b50506020546021546040517fc39aca370000000000000000000000000000000000000000000000000000000081526001600160a01b03928316945063c39aca3793506108319286921690600190600090899060040161af92565b60006040516020016167529061aea4565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401819052600184840152825163ca669fa760e01b815260048101919091529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163ca669fa791602480830192600092919082900301818387803b15801561680057600080fd5b505af1158015616814573d6000803e3d6000fd5b5050604051630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b15801561688457600080fd5b505af1158015616898573d6000803e3d6000fd5b50506020546024546040517fc39aca370000000000000000000000000000000000000000000000000000000081526001600160a01b03928316945063c39aca37935061083192869260009260019290911690899060040161af92565b60006168fe61aa3d565b616909848483616992565b9150505b92915050565b6040517f98296c540000000000000000000000000000000000000000000000000000000081526004810183905260248101829052737109709ecfa91a80626ff3989d68f67f5b1dd12d906398296c549060440160006040518083038186803b15801561697e57600080fd5b505afa15801561085f573d6000803e3d6000fd5b60008061699f8584616a0d565b9050616a026040518060400160405280601d81526020017f4552433139363750726f78792e736f6c3a4552433139363750726f787900000081525082866040516020016169ed92919061b229565b60405160208183030381529060405285616a19565b9150505b9392505050565b6000616a068383616a47565b60c08101515160009015616a3d57616a3684848460c00151616a62565b9050616a06565b616a368484616c08565b6000616a538383616cf3565b616a0683836020015184616a19565b600080616a6d616d03565b90506000616a7b8683616dd6565b90506000616a92826060015183602001518561727c565b90506000616aa28383898961748e565b90506000616aaf8261830b565b602081015181519192509060030b15616b2257898260400151604051602001616ad992919061b24b565b60408051601f19818403018152908290527f08c379a0000000000000000000000000000000000000000000000000000000008252616b199160040161b13a565b60405180910390fd5b6000616b656040518060400160405280601581526020017f4465706c6f79656420746f20616464726573733a2000000000000000000000008152508360016184da565b6040517fc6ce059d000000000000000000000000000000000000000000000000000000008152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c6ce059d90616bb890849060040161b13a565b602060405180830381865afa158015616bd5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190616bf9919061afe7565b9b9a5050505050505050505050565b6040517f8d1cc9250000000000000000000000000000000000000000000000000000000081526000908190737109709ecfa91a80626ff3989d68f67f5b1dd12d90638d1cc92590616c5d90879060040161b13a565b600060405180830381865afa158015616c7a573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052616ca2919081019061b3b4565b90506000616cd08285604051602001616cbc92919061b3e9565b6040516020818303038152906040526186da565b90506001600160a01b038116616909578484604051602001616ad992919061b418565b616cff828260006186ed565b5050565b604080518082018252600381527f6f75740000000000000000000000000000000000000000000000000000000000602082015290517fd145736c000000000000000000000000000000000000000000000000000000008152606091737109709ecfa91a80626ff3989d68f67f5b1dd12d91829063d145736c90616d8a90849060040161b4c3565b600060405180830381865afa158015616da7573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052616dcf919081019061b50a565b9250505090565b616e086040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b6000737109709ecfa91a80626ff3989d68f67f5b1dd12d9050616e536040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b616e5c856187f0565b60208201526000616e6c86618bd5565b90506000836001600160a01b031663d930a0e66040518163ffffffff1660e01b8152600401600060405180830381865afa158015616eae573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052616ed6919081019061b50a565b86838560200151604051602001616ef0949392919061b553565b60408051601f19818403018152908290527f60f9bb1100000000000000000000000000000000000000000000000000000000825291506000906001600160a01b038616906360f9bb1190616f4890859060040161b13a565b600060405180830381865afa158015616f65573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052616f8d919081019061b50a565b6040517fdb4235f60000000000000000000000000000000000000000000000000000000081529091506001600160a01b0386169063db4235f690616fd590849060040161b657565b602060405180830381865afa158015616ff2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190617016919061b0ff565b61702b5781604051602001616ad9919061b6a9565b6040517f49c4fac80000000000000000000000000000000000000000000000000000000081526001600160a01b038616906349c4fac89061707090849060040161b73b565b600060405180830381865afa15801561708d573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526170b5919081019061b50a565b84526040517fdb4235f60000000000000000000000000000000000000000000000000000000081526001600160a01b0386169063db4235f6906170fc90849060040161b78d565b602060405180830381865afa158015617119573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061713d919061b0ff565b156171d2576040517f49c4fac80000000000000000000000000000000000000000000000000000000081526001600160a01b038616906349c4fac89061718790849060040161b78d565b600060405180830381865afa1580156171a4573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526171cc919081019061b50a565b60408501525b846001600160a01b03166349c4fac88286600001516040516020016171f7919061b7df565b6040516020818303038152906040526040518363ffffffff1660e01b815260040161722392919061b84b565b600060405180830381865afa158015617240573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052617268919081019061b50a565b606085015250608083015250949350505050565b60408051600480825260a0820190925260609160009190816020015b60608152602001906001900390816172985790505090506040518060400160405280600481526020017f6772657000000000000000000000000000000000000000000000000000000000815250816000815181106172f8576172f861b870565b60200260200101819052506040518060400160405280600381526020017f2d726c00000000000000000000000000000000000000000000000000000000008152508160018151811061734c5761734c61b870565b602002602001018190525084604051602001617368919061b89f565b6040516020818303038152906040528160028151811061738a5761738a61b870565b6020026020010181905250826040516020016173a6919061b90b565b604051602081830303815290604052816003815181106173c8576173c861b870565b602002602001018190525060006173de8261830b565b602080820151604080518082018252600581527f2e6a736f6e000000000000000000000000000000000000000000000000000000818501908152825180840184526000808252908601528251808401909352905182529281019290925291925061746f9060408051808201825260008082526020918201528151808301909252845182528085019082015290618e58565b6174845785604051602001616ad9919061b94c565b9695505050505050565b60a0810151604080518082018252600080825260209182015281518083019092528251808352928101910152606090737109709ecfa91a80626ff3989d68f67f5b1dd12d90156174de565b511590565b6176525782602001511561759a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605860248201527f54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f742060448201527f62652075736564207768656e207468652060736b6970566572696679536f757260648201527f6365436f646560206f7074696f6e206973206074727565600000000000000000608482015260a401616b19565b8260c0015115617652576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605360248201527f54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f742060448201527f62652075736564207768656e207468652060736b69704c6963656e736554797060648201527f6560206f7074696f6e2069732060747275656000000000000000000000000000608482015260a401616b19565b6040805160ff8082526120008201909252600091816020015b606081526020019060019003908161766b57905050905060006040518060400160405280600381526020017f6e707800000000000000000000000000000000000000000000000000000000008152508282806176c69061b9dd565b935060ff16815181106176db576176db61b870565b60200260200101819052506040518060400160405280600d81526020017f302e302e312d616c7068612e370000000000000000000000000000000000000081525060405160200161772c919061b9fc565b6040516020818303038152906040528282806177479061b9dd565b935060ff168151811061775c5761775c61b870565b60200260200101819052506040518060400160405280600681526020017f6465706c6f7900000000000000000000000000000000000000000000000000008152508282806177a99061b9dd565b935060ff16815181106177be576177be61b870565b60200260200101819052506040518060400160405280600e81526020017f2d2d636f6e74726163744e616d6500000000000000000000000000000000000081525082828061780b9061b9dd565b935060ff16815181106178205761782061b870565b6020026020010181905250876020015182828061783c9061b9dd565b935060ff16815181106178515761785161b870565b60200260200101819052506040518060400160405280600e81526020017f2d2d636f6e74726163745061746800000000000000000000000000000000000081525082828061789e9061b9dd565b935060ff16815181106178b3576178b361b870565b6020908102919091010152875182826178cb8161b9dd565b935060ff16815181106178e0576178e061b870565b60200260200101819052506040518060400160405280600981526020017f2d2d636861696e4964000000000000000000000000000000000000000000000081525082828061792d9061b9dd565b935060ff16815181106179425761794261b870565b602002602001018190525061795646618eb9565b82826179618161b9dd565b935060ff16815181106179765761797661b870565b60200260200101819052506040518060400160405280600f81526020017f2d2d6275696c64496e666f46696c6500000000000000000000000000000000008152508282806179c39061b9dd565b935060ff16815181106179d8576179d861b870565b6020026020010181905250868282806179f09061b9dd565b935060ff1681518110617a0557617a0561b870565b6020908102919091010152855115617b2c5760408051808201909152601581527f2d2d636f6e7374727563746f7242797465636f6465000000000000000000000060208201528282617a568161b9dd565b935060ff1681518110617a6b57617a6b61b870565b60209081029190910101526040517f71aad10d0000000000000000000000000000000000000000000000000000000081526001600160a01b038416906371aad10d90617abb90899060040161b13a565b600060405180830381865afa158015617ad8573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052617b00919081019061b50a565b8282617b0b8161b9dd565b935060ff1681518110617b2057617b2061b870565b60200260200101819052505b846020015115617bfc5760408051808201909152601281527f2d2d766572696679536f75726365436f6465000000000000000000000000000060208201528282617b758161b9dd565b935060ff1681518110617b8a57617b8a61b870565b60200260200101819052506040518060400160405280600581526020017f66616c7365000000000000000000000000000000000000000000000000000000815250828280617bd79061b9dd565b935060ff1681518110617bec57617bec61b870565b6020026020010181905250617dc3565b617c346174d98660a0015160408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b617cc75760408051808201909152600d81527f2d2d6c6963656e7365547970650000000000000000000000000000000000000060208201528282617c778161b9dd565b935060ff1681518110617c8c57617c8c61b870565b60200260200101819052508460a00151604051602001617cac919061b89f565b604051602081830303815290604052828280617bd79061b9dd565b8460c00151158015617d0a575060408089015181518083018352600080825260209182015282518084019093528151835290810190820152617d0890511590565b155b15617dc35760408051808201909152600d81527f2d2d6c6963656e7365547970650000000000000000000000000000000000000060208201528282617d4e8161b9dd565b935060ff1681518110617d6357617d6361b870565b6020026020010181905250617d7788618f59565b604051602001617d87919061b89f565b604051602081830303815290604052828280617da29061b9dd565b935060ff1681518110617db757617db761b870565b60200260200101819052505b60408086015181518083018352600080825260209182015282518084019093528151835290810190820152617df790511590565b617e8c5760408051808201909152600b81527f2d2d72656c61796572496400000000000000000000000000000000000000000060208201528282617e3a8161b9dd565b935060ff1681518110617e4f57617e4f61b870565b60200260200101819052508460400151828280617e6b9061b9dd565b935060ff1681518110617e8057617e8061b870565b60200260200101819052505b606085015115617fad5760408051808201909152600681527f2d2d73616c74000000000000000000000000000000000000000000000000000060208201528282617ed58161b9dd565b935060ff1681518110617eea57617eea61b870565b602090810291909101015260608501516040517fb11a19e800000000000000000000000000000000000000000000000000000000815260048101919091526001600160a01b0384169063b11a19e890602401600060405180830381865afa158015617f59573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052617f81919081019061b50a565b8282617f8c8161b9dd565b935060ff1681518110617fa157617fa161b870565b60200260200101819052505b60e085015151156180545760408051808201909152600a81527f2d2d6761734c696d69740000000000000000000000000000000000000000000060208201528282617ff78161b9dd565b935060ff168151811061800c5761800c61b870565b60200260200101819052506180288560e0015160000151618eb9565b82826180338161b9dd565b935060ff16815181106180485761804861b870565b60200260200101819052505b60e085015160200151156180fe5760408051808201909152600a81527f2d2d676173507269636500000000000000000000000000000000000000000000602082015282826180a18161b9dd565b935060ff16815181106180b6576180b661b870565b60200260200101819052506180d28560e0015160200151618eb9565b82826180dd8161b9dd565b935060ff16815181106180f2576180f261b870565b60200260200101819052505b60e085015160400151156181a85760408051808201909152600e81527f2d2d6d61784665655065724761730000000000000000000000000000000000006020820152828261814b8161b9dd565b935060ff16815181106181605761816061b870565b602002602001018190525061817c8560e0015160400151618eb9565b82826181878161b9dd565b935060ff168151811061819c5761819c61b870565b60200260200101819052505b60e085015160600151156182525760408051808201909152601681527f2d2d6d61785072696f7269747946656550657247617300000000000000000000602082015282826181f58161b9dd565b935060ff168151811061820a5761820a61b870565b60200260200101819052506182268560e0015160600151618eb9565b82826182318161b9dd565b935060ff16815181106182465761824661b870565b60200260200101819052505b60008160ff1667ffffffffffffffff8111156182705761827061b2cc565b6040519080825280602002602001820160405280156182a357816020015b606081526020019060019003908161828e5790505b50905060005b8260ff168160ff1610156182fc57838160ff16815181106182cc576182cc61b870565b6020026020010151828260ff16815181106182e9576182e961b870565b60209081029190910101526001016182a9565b5093505050505b949350505050565b6183326040518060600160405280600060030b815260200160608152602001606081525090565b60408051808201825260048082527f6261736800000000000000000000000000000000000000000000000000000000602083015291517fd145736c000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d92600091849163d145736c916183b89186910161ba67565b600060405180830381865afa1580156183d5573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526183fd919081019061b50a565b9050600061840b8683619a48565b90506000846001600160a01b031663f45c1ce7836040518263ffffffff1660e01b815260040161843b919061ad96565b6000604051808303816000875af115801561845a573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052618482919081019061baae565b805190915060030b1580159061849b5750602081015151155b80156184aa5750604081015151155b1561748457816000815181106184c2576184c261b870565b6020026020010151604051602001616ad9919061bb64565b6060600061850f8560408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6040805180820182526000808252602091820152815180830190925286518252808701908201529091506185469082905b90619b9d565b156186a35760006185c3826185bd846185b76185898a60408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6040805180820182526000808252602091820152815180830190925282518252918201519181019190915290565b90619bc4565b90619c26565b604080518082018252600181527f0a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152909150618627908290619b9d565b1561869157604080518082018252600181527f0a000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261868e905b8290619cab565b90505b61869a81619cd1565b92505050616a06565b82156186bc578484604051602001616ad992919061bd50565b5050604080516020810190915260008152616a06565b509392505050565b6000808251602084016000f09392505050565b8160a00151156186fc57505050565b6000618709848484619d3a565b905060006187168261830b565b602081015181519192509060030b1580156187b25750604080518082018252600781527f5355434345535300000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526187b290604080518082018252600080825260209182015281518083019092528451825280850190820152618540565b156187bf57505050505050565b604082015151156187df578160400151604051602001616ad9919061bdf7565b80604051602001616ad9919061be55565b606060006188258360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600481527f2e736f6c000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015290915061888a905b8290618e58565b156188f957604080518082018252600481527f2e736f6c0000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616a06906188f490839061a2d5565b619cd1565b604080518082018252600181527f3a000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261895b905b829061a35f565b600103618a2857604080518082018252600181527f3a00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526189c190618687565b50604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616a06906188f4905b8390619cab565b604080518082018252600581527f2e6a736f6e00000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152618a8790618883565b15618bbe57604080518082018252600181527f2f00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820181905284518086019095529251845283015290618aef90839061a3f9565b905060008160018351618b02919061b1b6565b81518110618b1257618b1261b870565b60200260200101519050618bb56188f4618b886040518060400160405280600581526020017f2e6a736f6e00000000000000000000000000000000000000000000000000000081525060408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6040805180820182526000808252602091820152815180830190925285518252808601908201529061a2d5565b95945050505050565b82604051602001616ad9919061bec0565b50919050565b60606000618c0a8360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600481527f2e736f6c0000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152909150618c6c90618883565b15618c7a57616a0681619cd1565b604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152618cd990618954565b600103618d4357604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616a06906188f490618a21565b604080518082018252600581527f2e6a736f6e00000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152618da290618883565b15618bbe57604080518082018252600181527f2f00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820181905284518086019095529251845283015290618e0a90839061a3f9565b9050600181511115618e46578060028251618e25919061b1b6565b81518110618e3557618e3561b870565b602002602001015192505050919050565b5082604051602001616ad9919061bec0565b805182516000911115618e6d5750600061690d565b81518351602085015160009291618e839161b1c9565b618e8d919061b1b6565b905082602001518103618ea457600191505061690d565b82516020840151819020912014905092915050565b60606000618ec68361a49e565b600101905060008167ffffffffffffffff811115618ee657618ee661b2cc565b6040519080825280601f01601f191660200182016040528015618f10576020820181803683370190505b5090508181016020015b600019017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a8504945084618f1a57509392505050565b604081810151815180830183526000808252602091820181905283518085018552835181529282018383015283518085018552600a81527f554e4c4943454e5345440000000000000000000000000000000000000000000081840190815285518087018752838152840192909252845180860190955251845290830152606091618fe5905b829061a580565b1561902557505060408051808201909152600481527f4e6f6e65000000000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600981527f556e6c6963656e736500000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261908490618fde565b156190c457505060408051808201909152600981527f556e6c6963656e736500000000000000000000000000000000000000000000006020820152919050565b604080518082018252600381527f4d495400000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261912390618fde565b1561916357505060408051808201909152600381527f4d495400000000000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f47504c2d322e302d6f6e6c790000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526191c290618fde565b806192275750604080518082018252601081527f47504c2d322e302d6f722d6c61746572000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261922790618fde565b1561926757505060408051808201909152600981527f474e552047504c763200000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f47504c2d332e302d6f6e6c790000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526192c690618fde565b8061932b5750604080518082018252601081527f47504c2d332e302d6f722d6c61746572000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261932b90618fde565b1561936b57505060408051808201909152600981527f474e552047504c763300000000000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4c47504c2d322e312d6f6e6c7900000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526193ca90618fde565b8061942f5750604080518082018252601181527f4c47504c2d322e312d6f722d6c617465720000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261942f90618fde565b1561946f57505060408051808201909152600c81527f474e55204c47504c76322e3100000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4c47504c2d332e302d6f6e6c7900000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526194ce90618fde565b806195335750604080518082018252601181527f4c47504c2d332e302d6f722d6c617465720000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261953390618fde565b1561957357505060408051808201909152600a81527f474e55204c47504c7633000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f4253442d322d436c617573650000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526195d290618fde565b1561961257505060408051808201909152600c81527f4253442d322d436c6175736500000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f4253442d332d436c6175736500000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261967190618fde565b156196b157505060408051808201909152600c81527f4253442d332d436c6175736500000000000000000000000000000000000000006020820152919050565b604080518082018252600781527f4d504c2d322e30000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261971090618fde565b1561975057505060408051808201909152600781527f4d504c2d322e30000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600781527f4f534c2d332e3000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526197af90618fde565b156197ef57505060408051808201909152600781527f4f534c2d332e30000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600a81527f4170616368652d322e30000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261984e90618fde565b1561988e57505060408051808201909152600a81527f4170616368652d322e30000000000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4147504c2d332e302d6f6e6c7900000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526198ed90618fde565b806199525750604080518082018252601181527f4147504c2d332e302d6f722d6c617465720000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261995290618fde565b1561999257505060408051808201909152600a81527f474e55204147504c7633000000000000000000000000000000000000000000006020820152919050565b604080518082018252600881527f4255534c2d312e31000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526199f190618fde565b15619a3157505060408051808201909152600781527f42534c20312e31000000000000000000000000000000000000000000000000006020820152919050565b60408084015184519151616ad9929060200161bf9e565b60608060005b8451811015619ad35781858281518110619a6a57619a6a61b870565b6020026020010151604051602001619a8392919061b3e9565b604051602081830303815290604052915060018551619aa2919061b1b6565b8114619acb5781604051602001619ab9919061c107565b60405160208183030381529060405291505b600101619a4e565b5060408051600380825260808201909252600091816020015b6060815260200190600190039081619aec5790505090508381600081518110619b1757619b1761b870565b60200260200101819052506040518060400160405280600281526020017f2d6300000000000000000000000000000000000000000000000000000000000081525081600181518110619b6b57619b6b61b870565b60200260200101819052508181600281518110619b8a57619b8a61b870565b6020908102919091010152949350505050565b6020808301518351835192840151600093619bbb929184919061a594565b14159392505050565b60408051808201909152600080825260208201526000619bf6846000015185602001518560000151866020015161a6a5565b9050836020015181619c08919061b1b6565b84518590619c1790839061b1b6565b90525060208401525090919050565b6040805180820190915260008082526020820152815183511015619c4b57508161690d565b6020808301519084015160019114619c725750815160208481015190840151829020919020145b8015619ca357825184518590619c8990839061b1b6565b9052508251602085018051619c9f90839061b1c9565b9052505b509192915050565b6040805180820190915260008082526020820152619cca83838361a7c5565b5092915050565b60606000826000015167ffffffffffffffff811115619cf257619cf261b2cc565b6040519080825280601f01601f191660200182016040528015619d1c576020820181803683370190505b5090506000602082019050619cca818560200151866000015161a870565b60606000619d46616d03565b6040805160ff808252612000820190925291925060009190816020015b6060815260200190600190039081619d6357905050905060006040518060400160405280600381526020017f6e70780000000000000000000000000000000000000000000000000000000000815250828280619dbe9061b9dd565b935060ff1681518110619dd357619dd361b870565b60200260200101819052506040518060400160405280600781526020017f5e312e33322e3300000000000000000000000000000000000000000000000000815250604051602001619e24919061c148565b604051602081830303815290604052828280619e3f9061b9dd565b935060ff1681518110619e5457619e5461b870565b60200260200101819052506040518060400160405280600881526020017f76616c6964617465000000000000000000000000000000000000000000000000815250828280619ea19061b9dd565b935060ff1681518110619eb657619eb661b870565b602002602001018190525082604051602001619ed2919061b90b565b604051602081830303815290604052828280619eed9061b9dd565b935060ff1681518110619f0257619f0261b870565b60200260200101819052506040518060400160405280600a81526020017f2d2d636f6e747261637400000000000000000000000000000000000000000000815250828280619f4f9061b9dd565b935060ff1681518110619f6457619f6461b870565b6020026020010181905250619f79878461a8ea565b8282619f848161b9dd565b935060ff1681518110619f9957619f9961b870565b60209081029190910101528551511561a0455760408051808201909152600b81527f2d2d7265666572656e636500000000000000000000000000000000000000000060208201528282619feb8161b9dd565b935060ff168151811061a0005761a00061b870565b602002602001018190525061a01986600001518461a8ea565b828261a0248161b9dd565b935060ff168151811061a0395761a03961b870565b60200260200101819052505b85608001511561a0b35760408051808201909152601881527f2d2d756e73616665536b697053746f72616765436865636b00000000000000006020820152828261a08e8161b9dd565b935060ff168151811061a0a35761a0a361b870565b602002602001018190525061a119565b841561a1195760408051808201909152601281527f2d2d726571756972655265666572656e636500000000000000000000000000006020820152828261a0f88161b9dd565b935060ff168151811061a10d5761a10d61b870565b60200260200101819052505b6040860151511561a1b55760408051808201909152600d81527f2d2d756e73616665416c6c6f77000000000000000000000000000000000000006020820152828261a1638161b9dd565b935060ff168151811061a1785761a17861b870565b6020026020010181905250856040015182828061a1949061b9dd565b935060ff168151811061a1a95761a1a961b870565b60200260200101819052505b85606001511561a21f5760408051808201909152601481527f2d2d756e73616665416c6c6f7752656e616d65730000000000000000000000006020820152828261a1fe8161b9dd565b935060ff168151811061a2135761a21361b870565b60200260200101819052505b60008160ff1667ffffffffffffffff81111561a23d5761a23d61b2cc565b60405190808252806020026020018201604052801561a27057816020015b606081526020019060019003908161a25b5790505b50905060005b8260ff168160ff16101561a2c957838160ff168151811061a2995761a29961b870565b6020026020010151828260ff168151811061a2b65761a2b661b870565b602090810291909101015260010161a276565b50979650505050505050565b604080518082019091526000808252602082015281518351101561a2fa57508161690d565b8151835160208501516000929161a3109161b1c9565b61a31a919061b1b6565b6020840151909150600190821461a33b575082516020840151819020908220145b801561a3565783518551869061a35290839061b1b6565b9052505b50929392505050565b600080826000015161a383856000015186602001518660000151876020015161a6a5565b61a38d919061b1c9565b90505b8351602085015161a3a1919061b1c9565b8111619cca578161a3b18161c18d565b925050826000015161a3e885602001518361a3cc919061b1b6565b865161a3d8919061b1b6565b838660000151876020015161a6a5565b61a3f2919061b1c9565b905061a390565b6060600061a407848461a35f565b61a41290600161b1c9565b67ffffffffffffffff81111561a42a5761a42a61b2cc565b60405190808252806020026020018201604052801561a45d57816020015b606081526020019060019003908161a4485790505b50905060005b81518110156186d25761a4796188f48686619cab565b82828151811061a48b5761a48b61b870565b602090810291909101015260010161a463565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000831061a4e7577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef8100000000831061a513576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc10000831061a53157662386f26fc10000830492506010015b6305f5e100831061a549576305f5e100830492506008015b612710831061a55d57612710830492506004015b6064831061a56f576064830492506002015b600a831061690d5760010192915050565b600061a58c838361a92a565b159392505050565b60008085841161a69b576020841161a647576000841561a5df57600161a5bb86602061b1b6565b61a5c690600861c1a7565b61a5d190600261c2a5565b61a5db919061b1b6565b1990505b835181168561a5ee898961b1c9565b61a5f8919061b1b6565b805190935082165b81811461a6325787841161a61a5787945050505050618303565b8361a6248161c2b1565b94505082845116905061a600565b61a63c878561b1c9565b945050505050618303565b83832061a654858861b1b6565b61a65e908761b1c9565b91505b85821061a6995784822080820361a6865761a67c868461b1c9565b9350505050618303565b61a69160018461b1b6565b92505061a661565b505b5092949350505050565b6000838186851161a7b0576020851161a75f576000851561a6f157600161a6cd87602061b1b6565b61a6d890600861c1a7565b61a6e390600261c2a5565b61a6ed919061b1b6565b1990505b8451811660008761a7028b8b61b1c9565b61a70c919061b1b6565b855190915083165b82811461a7515781861061a7395761a72c8b8b61b1c9565b9650505050505050618303565b8561a7438161c18d565b96505083865116905061a714565b859650505050505050618303565b508383206000905b61a771868961b1b6565b821161a7ae5785832080820361a78d5783945050505050618303565b61a79860018561b1c9565b935050818061a7a69061c18d565b92505061a767565b505b61a7ba878761b1c9565b979650505050505050565b6040805180820190915260008082526020820152600061a7f7856000015186602001518660000151876020015161a6a5565b60208087018051918601919091525190915061a813908261b1b6565b83528451602086015161a826919061b1c9565b810361a835576000855261a867565b8351835161a843919061b1c9565b8551869061a85290839061b1b6565b905250835161a861908261b1c9565b60208601525b50909392505050565b6020811061a8a8578151835261a88760208461b1c9565b925061a89460208361b1c9565b915061a8a160208261b1b6565b905061a870565b600019811561a8d757600161a8be83602061b1b6565b61a8ca9061010061c2a5565b61a8d4919061b1b6565b90505b9151835183169219169190911790915250565b6060600061a8f88484616dd6565b805160208083015160405193945061a9129390910161c2c8565b60405160208183030381529060405291505092915050565b815181516000919081111561a93d575081515b6020808501519084015160005b8381101561a9f6578251825180821461a9c657600019602087101561a9a55760018461a97789602061b1b6565b61a981919061b1c9565b61a98c90600861c1a7565b61a99790600261c2a5565b61a9a1919061b1b6565b1990505b818116838216818103911461a9c357975061690d9650505050505050565b50505b61a9d160208661b1c9565b945061a9de60208561b1c9565b9350505060208161a9ef919061b1c9565b905061a94a565b5084518651617484919061c320565b610b67806200c34183390190565b61053f806200cea883390190565b61106f806200d3e783390190565b611bb9806200e45683390190565b6040518060e0016040528060608152602001606081526020016060815260200160001515815260200160001515815260200160001515815260200161aa8061aa85565b905290565b6040518061010001604052806000151581526020016000151581526020016060815260200160008019168152602001606081526020016060815260200160001515815260200161aa806040518060800160405280600081526020016000815260200160008152602001600081525090565b602080825282518282018190526000918401906040840190835b8181101561ab375783516001600160a01b031683526020938401939092019160010161ab10565b509095945050505050565b60005b8381101561ab5d57818101518382015260200161ab45565b50506000910152565b6000815180845261ab7e81602086016020860161ab42565b601f01601f19169290920160200192915050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b8281101561ac8e577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452815180516001600160a01b03168652602090810151604082880181905281519088018190529101906060600582901b88018101919088019060005b8181101561ac74577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa08a850301835261ac5e84865161ab66565b602095860195909450929092019160010161ac24565b50919750505060209485019492909201915060010161abba565b50929695505050505050565b600081518084526020840193506020830160005b8281101561acee5781517fffffffff000000000000000000000000000000000000000000000000000000001686526020958601959091019060010161acae565b5093949350505050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b8281101561ac8e577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452815180516040875261ad64604088018261ab66565b905060208201519150868103602088015261ad7f818361ac9a565b96505050602093840193919091019060010161ad20565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b8281101561ac8e577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc087860301845261adf885835161ab66565b9450602093840193919091019060010161adbe565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b8281101561ac8e577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc087860301845281516001600160a01b038151168652602081015190506040602087015261ae8e604087018261ac9a565b955050602093840193919091019060010161ae35565b60208152600061690d60208301600581527f68656c6c6f000000000000000000000000000000000000000000000000000000602082015260400190565b60a08152600061aef460a083018761ab66565b6001600160a01b03861660208401528460408401526001600160a01b0384166060840152828103608084015261a7ba81600581527f68656c6c6f000000000000000000000000000000000000000000000000000000602082015260400190565b600081516060845261af69606085018261ab66565b90506001600160a01b036020840151166020850152604083015160408501528091505092915050565b60a08152600061afa560a083018861af54565b6001600160a01b03871660208401528560408401526001600160a01b0385166060840152828103608084015261afdb818561ab66565b98975050505050505050565b60006020828403121561aff957600080fd5b81516001600160a01b0381168114616a0657600080fd5b610100815260056101008201527f544f4b454e000000000000000000000000000000000000000000000000000000610120820152610140602082015260036101408201527f544b4e000000000000000000000000000000000000000000000000000000000061016082015260006101808201905060ff881660408301528660608301526003861061b0ca577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b8560808301528460a083015261b0eb60c08301856001600160a01b03169052565b6001600160a01b03831660e083015261a7ba565b60006020828403121561b11157600080fd5b81518015158114616a0657600080fd5b60006020828403121561b13357600080fd5b5051919050565b602081526000616a06602083018461ab66565b60808152600061b160608083018761af54565b8560208401526001600160a01b0385166040840152828103606084015261a7ba818561ab66565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8181038181111561690d5761690d61b187565b8082018082111561690d5761690d61b187565b600181811c9082168061b1f057607f821691505b602082108103618bcf577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6001600160a01b0383168152604060208201526000618303604083018461ab66565b7f4661696c656420746f206465706c6f7920636f6e74726163742000000000000081526000835161b28381601a85016020880161ab42565b7f3a20000000000000000000000000000000000000000000000000000000000000601a91840191820152835161b2c081601c84016020880161ab42565b01601c01949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040516060810167ffffffffffffffff8111828210171561b31e5761b31e61b2cc565b60405290565b60008067ffffffffffffffff84111561b33f5761b33f61b2cc565b50604051601f19601f85018116603f0116810181811067ffffffffffffffff8211171561b36e5761b36e61b2cc565b60405283815290508082840185101561b38657600080fd5b6186d284602083018561ab42565b600082601f83011261b3a557600080fd5b616a068383516020850161b324565b60006020828403121561b3c657600080fd5b815167ffffffffffffffff81111561b3dd57600080fd5b6169098482850161b394565b6000835161b3fb81846020880161ab42565b83519083019061b40f81836020880161ab42565b01949350505050565b7f4661696c656420746f206465706c6f7920636f6e74726163742000000000000081526000835161b45081601a85016020880161ab42565b7f207573696e6720636f6e7374727563746f722064617461202200000000000000601a91840191820152835161b48d81603384016020880161ab42565b7f220000000000000000000000000000000000000000000000000000000000000060339290910191820152603401949350505050565b60408152600b60408201527f464f554e4452595f4f55540000000000000000000000000000000000000000006060820152608060208201526000616a06608083018461ab66565b60006020828403121561b51c57600080fd5b815167ffffffffffffffff81111561b53357600080fd5b8201601f8101841361b54457600080fd5b6169098482516020840161b324565b6000855161b565818460208a0161ab42565b7f2f00000000000000000000000000000000000000000000000000000000000000908301908152855161b59f816001840160208a0161ab42565b7f2f0000000000000000000000000000000000000000000000000000000000000060019290910191820152845161b5dd81600284016020890161ab42565b6001818301019150507f2f000000000000000000000000000000000000000000000000000000000000006001820152835161b61f81600284016020880161ab42565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600292909101918201526007019695505050505050565b60408152600061b66a604083018461ab66565b8281036020840152600481527f2e6173740000000000000000000000000000000000000000000000000000000060208201526040810191505092915050565b7f436f756c64206e6f742066696e642041535420696e206172746966616374200081526000825161b6e181601f85016020870161ab42565b7f2e205365742060617374203d20747275656020696e20666f756e6472792e746f601f9390910192830152507f6d6c000000000000000000000000000000000000000000000000000000000000603f820152604101919050565b60408152600061b74e604083018461ab66565b8281036020840152601181527f2e6173742e6162736f6c7574655061746800000000000000000000000000000060208201526040810191505092915050565b60408152600061b7a0604083018461ab66565b8281036020840152600c81527f2e6173742e6c6963656e7365000000000000000000000000000000000000000060208201526040810191505092915050565b7f2e6d657461646174612e736f75726365732e5b2700000000000000000000000081526000825161b81781601485016020870161ab42565b7f275d2e6b656363616b32353600000000000000000000000000000000000000006014939091019283015250602001919050565b60408152600061b85e604083018561ab66565b8281036020840152616a02818561ab66565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f220000000000000000000000000000000000000000000000000000000000000081526000825161b8d781600185016020870161ab42565b7f22000000000000000000000000000000000000000000000000000000000000006001939091019283015250600201919050565b6000825161b91d81846020870161ab42565b7f2f6275696c642d696e666f000000000000000000000000000000000000000000920191825250600b01919050565b7f436f756c64206e6f742066696e64206275696c642d696e666f2066696c65207781527f697468206d61746368696e6720736f7572636520636f6465206861736820666f60208201527f7220636f6e74726163742000000000000000000000000000000000000000000060408201526000825161b9d081604b85016020870161ab42565b91909101604b0192915050565b600060ff821660ff810361b9f35761b9f361b187565b60010192915050565b7f406f70656e7a657070656c696e2f646566656e6465722d6465706c6f792d636c81527f69656e742d636c6940000000000000000000000000000000000000000000000060208201526000825161ba5a81602985016020870161ab42565b9190910160290192915050565b60408152601660408201527f4f50454e5a455050454c494e5f424153485f50415448000000000000000000006060820152608060208201526000616a06608083018461ab66565b60006020828403121561bac057600080fd5b815167ffffffffffffffff81111561bad757600080fd5b82016060818503121561bae957600080fd5b61baf161b2fb565b81518060030b811461bb0257600080fd5b8152602082015167ffffffffffffffff81111561bb1e57600080fd5b61bb2a8682850161b394565b602083015250604082015167ffffffffffffffff81111561bb4a57600080fd5b61bb568682850161b394565b604083015250949350505050565b7f4661696c656420746f2072756e206261736820636f6d6d616e6420776974682081527f220000000000000000000000000000000000000000000000000000000000000060208201526000825161bbc281602185016020870161ab42565b7f222e20496620796f7520617265207573696e672057696e646f77732c2073657460219390910192830152507f20746865204f50454e5a455050454c494e5f424153485f5041544820656e766960418201527f726f6e6d656e74207661726961626c6520746f207468652066756c6c7920717560618201527f616c69666965642070617468206f66207468652062617368206578656375746160818201527f626c652e20466f72206578616d706c652c20696620796f75206172652075736960a18201527f6e672047697420666f722057696e646f77732c206164642074686520666f6c6c60c18201527f6f77696e67206c696e6520696e20746865202e656e762066696c65206f66207960e18201527f6f75722070726f6a65637420287573696e6720666f727761726420736c6173686101018201527f6573293a0a4f50454e5a455050454c494e5f424153485f504154483d22433a2f6101218201527f50726f6772616d2046696c65732f4769742f62696e2f6261736822000000000061014182015261015c01919050565b7f4661696c656420746f2066696e64206c696e652077697468207072656669782081527f270000000000000000000000000000000000000000000000000000000000000060208201526000835161bdae81602185016020880161ab42565b7f2720696e206f75747075743a2000000000000000000000000000000000000000602191840191820152835161bdeb81602e84016020880161ab42565b01602e01949350505050565b7f4661696c656420746f2072756e2075706772616465207361666574792076616c81527f69646174696f6e3a20000000000000000000000000000000000000000000000060208201526000825161ba5a81602985016020870161ab42565b7f55706772616465207361666574792076616c69646174696f6e206661696c656481527f3a0a00000000000000000000000000000000000000000000000000000000000060208201526000825161beb381602285016020870161ab42565b9190910160220192915050565b7f436f6e7472616374206e616d652000000000000000000000000000000000000081526000825161bef881600e85016020870161ab42565b7f206d75737420626520696e2074686520666f726d6174204d79436f6e74726163600e9390910192830152507f742e736f6c3a4d79436f6e7472616374206f72204d79436f6e74726163742e73602e8201527f6f6c206f72206f75742f4d79436f6e74726163742e736f6c2f4d79436f6e7472604e8201527f6163742e6a736f6e000000000000000000000000000000000000000000000000606e820152607601919050565b7f53504458206c6963656e7365206964656e74696669657220000000000000000081526000835161bfd681601885016020880161ab42565b7f20696e2000000000000000000000000000000000000000000000000000000000601891840191820152835161c01381601c84016020880161ab42565b7f20646f6573206e6f74206c6f6f6b206c696b65206120737570706f7274656420601c92909101918201527f6c6963656e736520666f7220626c6f636b206578706c6f726572207665726966603c8201527f69636174696f6e2e205573652074686520606c6963656e73655479706560206f605c8201527f7074696f6e20746f20737065636966792061206c6963656e736520747970652c607c8201527f206f7220736574207468652060736b69704c6963656e73655479706560206f70609c8201527f74696f6e20746f2060747275656020746f20736b69702e00000000000000000060bc82015260d301949350505050565b6000825161c11981846020870161ab42565b7f2000000000000000000000000000000000000000000000000000000000000000920191825250600101919050565b7f406f70656e7a657070656c696e2f75706772616465732d636f7265400000000081526000825161c18081601c85016020870161ab42565b91909101601c0192915050565b6000600019820361c1a05761c1a061b187565b5060010190565b808202811582820484141761690d5761690d61b187565b6001815b600184111561c1f95780850481111561c1dd5761c1dd61b187565b600184161561c1eb57908102905b60019390931c92800261c1c2565b935093915050565b60008261c2105750600161690d565b8161c21d5750600061690d565b816001811461c233576002811461c23d5761c259565b600191505061690d565b60ff84111561c24e5761c24e61b187565b50506001821b61690d565b5060208310610133831016604e8410600b841016171561c27c575081810a61690d565b61c289600019848461c1be565b806000190482111561c29d5761c29d61b187565b029392505050565b6000616a06838361c201565b60008161c2c05761c2c061b187565b506000190190565b6000835161c2da81846020880161ab42565b7f3a00000000000000000000000000000000000000000000000000000000000000908301908152835161c31481600184016020880161ab42565b01600101949350505050565b8181036000831280158383131683831282161715619cca57619cca61b18756fe60c0604052600d60809081526c2bb930b83832b21022ba3432b960991b60a05260009061002c9082610114565b506040805180820190915260048152630ae8aa8960e31b60208201526001906100559082610114565b506002805460ff1916601217905534801561006f57600080fd5b506101d2565b634e487b7160e01b600052604160045260246000fd5b600181811c9082168061009f57607f821691505b6020821081036100bf57634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111561010f57806000526020600020601f840160051c810160208510156100ec5750805b601f840160051c820191505b8181101561010c57600081556001016100f8565b50505b505050565b81516001600160401b0381111561012d5761012d610075565b6101418161013b845461008b565b846100c5565b6020601f821160018114610175576000831561015d5750848201515b600019600385901b1c1916600184901b17845561010c565b600084815260208120601f198516915b828110156101a55787850151825560209485019460019092019101610185565b50848210156101c35786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b610986806101e16000396000f3fe6080604052600436106100c05760003560e01c8063313ce56711610074578063a9059cbb1161004e578063a9059cbb146101fa578063d0e30db01461021a578063dd62ed3e1461022257600080fd5b8063313ce5671461018c57806370a08231146101b857806395d89b41146101e557600080fd5b806318160ddd116100a557806318160ddd1461012f57806323b872dd1461014c5780632e1a7d4d1461016c57600080fd5b806306fdde03146100d4578063095ea7b3146100ff57600080fd5b366100cf576100cd61025a565b005b600080fd5b3480156100e057600080fd5b506100e96102b5565b6040516100f69190610745565b60405180910390f35b34801561010b57600080fd5b5061011f61011a3660046107da565b610343565b60405190151581526020016100f6565b34801561013b57600080fd5b50475b6040519081526020016100f6565b34801561015857600080fd5b5061011f610167366004610804565b6103bd565b34801561017857600080fd5b506100cd610187366004610841565b610647565b34801561019857600080fd5b506002546101a69060ff1681565b60405160ff90911681526020016100f6565b3480156101c457600080fd5b5061013e6101d336600461085a565b60036020526000908152604090205481565b3480156101f157600080fd5b506100e9610724565b34801561020657600080fd5b5061011f6102153660046107da565b610731565b6100cd61025a565b34801561022e57600080fd5b5061013e61023d366004610875565b600460209081526000928352604080842090915290825290205481565b33600090815260036020526040812080543492906102799084906108d7565b909155505060405134815233907fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c9060200160405180910390a2565b600080546102c2906108ea565b80601f01602080910402602001604051908101604052809291908181526020018280546102ee906108ea565b801561033b5780601f106103105761010080835404028352916020019161033b565b820191906000526020600020905b81548152906001019060200180831161031e57829003601f168201915b505050505081565b33600081815260046020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925906103ab9086815260200190565b60405180910390a35060015b92915050565b73ffffffffffffffffffffffffffffffffffffffff831660009081526003602052604081205482111561042b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600060248201526044015b60405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff841633148015906104a1575073ffffffffffffffffffffffffffffffffffffffff841660009081526004602090815260408083203384529091529020547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff14155b156105605773ffffffffffffffffffffffffffffffffffffffff8416600090815260046020908152604080832033845290915290205482111561051a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526020600482015260006024820152604401610422565b73ffffffffffffffffffffffffffffffffffffffff841660009081526004602090815260408083203384529091528120805484929061055a90849061093d565b90915550505b73ffffffffffffffffffffffffffffffffffffffff84166000908152600360205260408120805484929061059590849061093d565b909155505073ffffffffffffffffffffffffffffffffffffffff8316600090815260036020526040812080548492906105cf9084906108d7565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161063591815260200190565b60405180910390a35060019392505050565b3360009081526003602052604090205481111561069a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526020600482015260006024820152604401610422565b33600090815260036020526040812080548392906106b990849061093d565b9091555050604051339082156108fc029083906000818181858888f193505050501580156106eb573d6000803e3d6000fd5b5060405181815233907f7fcf532c15f0a6db0bd6d0e038bea71d30d808c7d98cb3bf7268a95bf5081b659060200160405180910390a250565b600180546102c2906108ea565b600061073e3384846103bd565b9392505050565b602081526000825180602084015260005b818110156107735760208186018101516040868401015201610756565b5060006040828501015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011684010191505092915050565b803573ffffffffffffffffffffffffffffffffffffffff811681146107d557600080fd5b919050565b600080604083850312156107ed57600080fd5b6107f6836107b1565b946020939093013593505050565b60008060006060848603121561081957600080fd5b610822846107b1565b9250610830602085016107b1565b929592945050506040919091013590565b60006020828403121561085357600080fd5b5035919050565b60006020828403121561086c57600080fd5b61073e826107b1565b6000806040838503121561088857600080fd5b610891836107b1565b915061089f602084016107b1565b90509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b808201808211156103b7576103b76108a8565b600181811c908216806108fe57607f821691505b602082108103610937577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b818103818111156103b7576103b76108a856fea264697066735822122008d7fc4e09519c5dd9f356b03596f6829a151d0bc7682533f9ceab4e459f5ee264736f6c634300081a00336080604052348015600f57600080fd5b506105208061001f6000396000f3fe60806040526004361061002a5760003560e01c806369582bee14610033578063de43156e1461005357005b3661003157005b005b34801561003f57600080fd5b5061003161004e3660046101ba565b610073565b34801561005f57600080fd5b5061003161006e3660046101ba565b6100ee565b6060811561008a5761008782840184610273565b90505b7ffdc887992b033668833927e252058e468fac0b6bd196d520f09c61b740e999486100b58780610369565b6100c560408a0160208b016103ce565b896040013533866040516100de969594939291906103f0565b60405180910390a1505050505050565b606081156101055761010282840184610273565b90505b7fcdc8ee677dc5ebe680fb18cebda5e26ba5ea1f0ba504a47e2a9a2ecb476dc98e6100b58780610369565b60006060828403121561014257600080fd5b50919050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461016c57600080fd5b919050565b60008083601f84011261018357600080fd5b50813567ffffffffffffffff81111561019b57600080fd5b6020830191508360208285010111156101b357600080fd5b9250929050565b6000806000806000608086880312156101d257600080fd5b853567ffffffffffffffff8111156101e957600080fd5b6101f588828901610130565b95505061020460208701610148565b935060408601359250606086013567ffffffffffffffff81111561022757600080fd5b61023388828901610171565b969995985093965092949392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60006020828403121561028557600080fd5b813567ffffffffffffffff81111561029c57600080fd5b8201601f810184136102ad57600080fd5b803567ffffffffffffffff8111156102c7576102c7610244565b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8501160116810181811067ffffffffffffffff8211171561033357610333610244565b60405281815282820160200186101561034b57600080fd5b81602084016020830137600091810160200191909152949350505050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261039e57600080fd5b83018035915067ffffffffffffffff8211156103b957600080fd5b6020019150368190038213156101b357600080fd5b6000602082840312156103e057600080fd5b6103e982610148565b9392505050565b60a081528560a0820152858760c0830137600060c0878301015260007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f880116820173ffffffffffffffffffffffffffffffffffffffff8716602084015285604084015273ffffffffffffffffffffffffffffffffffffffff8516606084015260c083820301608084015283518060c083015260005b818110156104a557602081870181015184830160e0015201610488565b50600060e0838301810191909152601f9091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016909101019897505050505050505056fea2646970667358221220b5ac4aa023957e7bc2aaba2c22840cdbf052fb679bd912caa0c8614a69afc7b164736f6c634300081a003360c060405234801561001057600080fd5b5060405161106f38038061106f83398101604081905261002f916100db565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461006357604051632b2add3d60e01b815260040160405180910390fd5b600380546001600160a01b0319166001600160a01b0385811691909117909155828116608052811660a0526040517f80699e81136d69cb8367ad52a994e25c722a86da654b561d0c14b61a777e7ac590600090a150505061011e565b80516001600160a01b03811681146100d657600080fd5b919050565b6000806000606084860312156100f057600080fd5b6100f9846100bf565b9250610107602085016100bf565b9150610115604085016100bf565b90509250925092565b60805160a051610f2561014a60003960006101e50152600081816102b9015261045b0152610f256000f3fe608060405234801561001057600080fd5b50600436106100f55760003560e01c806397770dff11610097578063c63585cc11610066578063c63585cc14610273578063d7fd7afb14610286578063d936a012146102b4578063ee2815ba146102db57600080fd5b806397770dff1461021a578063a7cb05071461022d578063c39aca3714610240578063c62178ac1461025357600080fd5b8063513a9c05116100d3578063513a9c051461018a578063569541b9146101c0578063842da36d146101e057806391dd645f1461020757600080fd5b80630be15547146100fa5780631f0e251b1461015a5780633ce4a5bc1461016f575b600080fd5b610130610108366004610bd1565b60016020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b61016d610168366004610c13565b6102ee565b005b61013073735b14bb79463307aacbed86daf3322b1e6226ab81565b610130610198366004610bd1565b60026020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b6003546101309073ffffffffffffffffffffffffffffffffffffffff1681565b6101307f000000000000000000000000000000000000000000000000000000000000000081565b61016d610215366004610c35565b610402565b61016d610228366004610c13565b610526565b61016d61023b366004610c61565b610633565b61016d61024e366004610c83565b6106ce565b6004546101309073ffffffffffffffffffffffffffffffffffffffff1681565b610130610281366004610d53565b6108cd565b6102a6610294366004610bd1565b60006020819052908152604090205481565b604051908152602001610151565b6101307f000000000000000000000000000000000000000000000000000000000000000081565b61016d6102e9366004610c35565b610a02565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461033b576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116610388576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600480547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527f3ade88e3922d64780e1bf4460d364c2970b69da813f9c0c07a1c187b5647636c906020015b60405180910390a150565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461044f576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600354600090610497907f00000000000000000000000000000000000000000000000000000000000000009073ffffffffffffffffffffffffffffffffffffffff16846108cd565b60008481526002602090815260409182902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff85169081179091558251878152918201529192507f0ecec485166da6139b13bb7e033e9446e2d35348e80ebf1180d4afe2dba1704e910160405180910390a1505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610573576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff81166105c0576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527fdba79d534382d1a8ae108e4c8ecb27c6ae42ab8b91d44eedf88bd329f3868d5e906020016103f7565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610680576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000828152602081815260409182902083905581518481529081018390527f49f492222906ac486c3c1401fa545626df1f0c0e5a77a05597ea2ed66af9850d91015b60405180910390a15050565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461071b576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff831673735b14bb79463307aacbed86daf3322b1e6226ab1480610768575073ffffffffffffffffffffffffffffffffffffffff831630145b1561079f576040517f82d5d76a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f47e7ef2400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152602482018690528616906347e7ef24906044016020604051808303816000875af1158015610814573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108389190610d96565b506040517fde43156e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84169063de43156e906108939089908990899088908890600401610e01565b600060405180830381600087803b1580156108ad57600080fd5b505af11580156108c1573d6000803e3d6000fd5b50505050505050505050565b60008060006108dc8585610ad3565b6040517fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606084811b8216602084015283901b16603482015291935091508690604801604051602081830303815290604052805190602001206040516020016109c29291907fff00000000000000000000000000000000000000000000000000000000000000815260609290921b7fffffffffffffffffffffffffffffffffffffffff00000000000000000000000016600183015260158201527f96e8ac4277198ff8b6f785478aa9a39f403cb768dd02cbee326c3e7da348845f603582015260550190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291905280516020909101209695505050505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610a4f576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008281526001602090815260409182902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff85169081179091558251858152918201527fd1b36d30f6248e97c473b4d1348ca164a4ef6759022f54a58ec200326c39c45d91016106c2565b6000808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603610b3b576040517fcb1e7cfe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1610610b75578284610b78565b83835b909250905073ffffffffffffffffffffffffffffffffffffffff8216610bca576040517f78b507da00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b9250929050565b600060208284031215610be357600080fd5b5035919050565b803573ffffffffffffffffffffffffffffffffffffffff81168114610c0e57600080fd5b919050565b600060208284031215610c2557600080fd5b610c2e82610bea565b9392505050565b60008060408385031215610c4857600080fd5b82359150610c5860208401610bea565b90509250929050565b60008060408385031215610c7457600080fd5b50508035926020909101359150565b60008060008060008060a08789031215610c9c57600080fd5b863567ffffffffffffffff811115610cb357600080fd5b87016060818a031215610cc557600080fd5b9550610cd360208801610bea565b945060408701359350610ce860608801610bea565b9250608087013567ffffffffffffffff811115610d0457600080fd5b8701601f81018913610d1557600080fd5b803567ffffffffffffffff811115610d2c57600080fd5b896020828401011115610d3e57600080fd5b60208201935080925050509295509295509295565b600080600060608486031215610d6857600080fd5b610d7184610bea565b9250610d7f60208501610bea565b9150610d8d60408501610bea565b90509250925092565b600060208284031215610da857600080fd5b81518015158114610c2e57600080fd5b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b60808152600086357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1883603018112610e3957600080fd5b870160208101903567ffffffffffffffff811115610e5657600080fd5b803603821315610e6557600080fd5b60606080850152610e7a60e085018284610db8565b91505073ffffffffffffffffffffffffffffffffffffffff610e9e60208a01610bea565b1660a0840152604088013560c084015273ffffffffffffffffffffffffffffffffffffffff871660208401528560408401528281036060840152610ee3818587610db8565b9897505050505050505056fea2646970667358221220fea45cb058045b493e646c8b9505ea080ab95fd7ed4498b922d179cf1abec08e64736f6c634300081a003360e060405234801561001057600080fd5b50604051611bb9380380611bb983398101604081905261002f9161020e565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461006357604051632b2add3d60e01b815260040160405180910390fd5b6001600160a01b038216158061008057506001600160a01b038116155b1561009e5760405163d92e233d60e01b815260040160405180910390fd5b60066100aa8982610360565b5060076100b78882610360565b5060ff861660c05260808590528360028111156100d6576100d661041e565b60a08160028111156100ea576100ea61041e565b905250600192909255600080546001600160a01b039283166001600160a01b03199182161790915560088054929093169116179055506104349350505050565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261015157600080fd5b81516001600160401b0381111561016a5761016a61012a565b604051601f8201601f19908116603f011681016001600160401b03811182821017156101985761019861012a565b6040528181528382016020018510156101b057600080fd5b60005b828110156101cf576020818601810151838301820152016101b3565b506000918101602001919091529392505050565b8051600381106101f257600080fd5b919050565b80516001600160a01b03811681146101f257600080fd5b600080600080600080600080610100898b03121561022b57600080fd5b88516001600160401b0381111561024157600080fd5b61024d8b828c01610140565b60208b015190995090506001600160401b0381111561026b57600080fd5b6102778b828c01610140565b975050604089015160ff8116811461028e57600080fd5b60608a015190965094506102a460808a016101e3565b60a08a015190945092506102ba60c08a016101f7565b91506102c860e08a016101f7565b90509295985092959890939650565b600181811c908216806102eb57607f821691505b60208210810361030b57634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111561035b57806000526020600020601f840160051c810160208510156103385750805b601f840160051c820191505b818110156103585760008155600101610344565b50505b505050565b81516001600160401b038111156103795761037961012a565b61038d8161038784546102d7565b84610311565b6020601f8211600181146103c157600083156103a95750848201515b600019600385901b1c1916600184901b178455610358565b600084815260208120601f198516915b828110156103f157878501518255602094850194600190920191016103d1565b508482101561040f5786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b634e487b7160e01b600052602160045260246000fd5b60805160a05160c05161174861047160003960006102170152600061033a0152600081816102eb01528181610ad70152610bdd01526117486000f3fe608060405234801561001057600080fd5b50600436106101985760003560e01c80638b851b95116100e3578063ccc775991161008c578063eddeb12311610066578063eddeb12314610431578063f2441b3214610444578063f687d12a1461046457600080fd5b8063ccc77599146103a4578063d9eeebed146103b7578063dd62ed3e146103eb57600080fd5b8063a9059cbb116100bd578063a9059cbb14610369578063c70126261461037c578063c835d7cc1461038f57600080fd5b80638b851b951461030d57806395d89b411461032d578063a3413d031461033557600080fd5b80633ce4a5bc116101455780634d8943bb1161011f5780634d8943bb146102a757806370a08231146102b057806385e1f4d0146102e657600080fd5b80633ce4a5bc1461024157806342966c681461028157806347e7ef241461029457600080fd5b806318160ddd1161017657806318160ddd146101f557806323b872dd146101fd578063313ce5671461021057600080fd5b806306fdde031461019d578063091d2788146101bb578063095ea7b3146101d2575b600080fd5b6101a5610477565b6040516101b29190611327565b60405180910390f35b6101c460015481565b6040519081526020016101b2565b6101e56101e0366004611366565b610509565b60405190151581526020016101b2565b6005546101c4565b6101e561020b366004611392565b610520565b60405160ff7f00000000000000000000000000000000000000000000000000000000000000001681526020016101b2565b61025c73735b14bb79463307aacbed86daf3322b1e6226ab81565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101b2565b6101e561028f3660046113d3565b6105b7565b6101e56102a2366004611366565b6105cb565b6101c460025481565b6101c46102be3660046113ec565b73ffffffffffffffffffffffffffffffffffffffff1660009081526003602052604090205490565b6101c47f000000000000000000000000000000000000000000000000000000000000000081565b60085461025c9073ffffffffffffffffffffffffffffffffffffffff1681565b6101a561071f565b61035c7f000000000000000000000000000000000000000000000000000000000000000081565b6040516101b29190611409565b6101e5610377366004611366565b61072e565b6101e561038a366004611479565b61073b565b6103a261039d3660046113ec565b61088a565b005b6103a26103b23660046113ec565b61099e565b6103bf610aab565b6040805173ffffffffffffffffffffffffffffffffffffffff90931683526020830191909152016101b2565b6101c46103f9366004611571565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260046020908152604080832093909416825291909152205490565b6103a261043f3660046113d3565b610cc9565b60005461025c9073ffffffffffffffffffffffffffffffffffffffff1681565b6103a26104723660046113d3565b610d4b565b606060068054610486906115aa565b80601f01602080910402602001604051908101604052809291908181526020018280546104b2906115aa565b80156104ff5780601f106104d4576101008083540402835291602001916104ff565b820191906000526020600020905b8154815290600101906020018083116104e257829003601f168201915b5050505050905090565b6000610516338484610dcd565b5060015b92915050565b600061052d848484610ed6565b73ffffffffffffffffffffffffffffffffffffffff8416600090815260046020908152604080832033845290915290205482811015610598576040517f10bad14700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6105ac85336105a7868561162c565b610dcd565b506001949350505050565b60006105c33383611091565b506001919050565b60003373735b14bb79463307aacbed86daf3322b1e6226ab14801590610609575060005473ffffffffffffffffffffffffffffffffffffffff163314155b801561062d575060085473ffffffffffffffffffffffffffffffffffffffff163314155b15610664576040517fddb5de5e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61066e83836111d3565b6040517f735b14bb79463307aacbed86daf3322b1e6226ab000000000000000000000000602082015273ffffffffffffffffffffffffffffffffffffffff8416907f67fc7bdaed5b0ec550d8706b87d60568ab70c6b781263c70101d54cd1564aab390603401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529082905261070e91869061163f565b60405180910390a250600192915050565b606060078054610486906115aa565b6000610516338484610ed6565b6000806000610748610aab565b6040517f23b872dd00000000000000000000000000000000000000000000000000000000815233600482015273735b14bb79463307aacbed86daf3322b1e6226ab602482015260448101829052919350915073ffffffffffffffffffffffffffffffffffffffff8316906323b872dd906064016020604051808303816000875af11580156107da573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107fe9190611661565b610834576040517f0a7cd6d600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61083e3385611091565b60025460405133917f9ffbffc04a397460ee1dbe8c9503e098090567d6b7f4b3c02a8617d800b6d9559161087791899189918791611683565b60405180910390a2506001949350505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab146108d7576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116610924576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527fd55614e962c5fd6ece71614f6348d702468a997a394dd5e5c1677950226d97ae906020015b60405180910390a150565b3373735b14bb79463307aacbed86daf3322b1e6226ab146109eb576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116610a38576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600880547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527f88815d964e380677e86d817e7d65dea59cb7b4c3b5b7a0c8ec7ea4a74f90a38790602001610993565b600080546040517f0be155470000000000000000000000000000000000000000000000000000000081527f000000000000000000000000000000000000000000000000000000000000000060048201528291829173ffffffffffffffffffffffffffffffffffffffff90911690630be1554790602401602060405180830381865afa158015610b3e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b6291906116b2565b905073ffffffffffffffffffffffffffffffffffffffff8116610bb1576040517f78fff39600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080546040517fd7fd7afb0000000000000000000000000000000000000000000000000000000081527f0000000000000000000000000000000000000000000000000000000000000000600482015273ffffffffffffffffffffffffffffffffffffffff9091169063d7fd7afb90602401602060405180830381865afa158015610c40573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c6491906116cf565b905080600003610ca0576040517fe661aed000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060025460015483610cb391906116e8565b610cbd91906116ff565b92959294509192505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610d16576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60028190556040518181527fef13af88e424b5d15f49c77758542c1938b08b8b95b91ed0751f98ba99000d8f90602001610993565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610d98576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018190556040518181527fff5788270f43bfc1ca41c503606d2594aa3023a1a7547de403a3e2f146a4a80a90602001610993565b73ffffffffffffffffffffffffffffffffffffffff8316610e1a576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216610e67576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff83811660008181526004602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8316610f23576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216610f70576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff831660009081526003602052604090205481811015610fd0576040517ffe382aa700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610fda828261162c565b73ffffffffffffffffffffffffffffffffffffffff808616600090815260036020526040808220939093559085168152908120805484929061101d9084906116ff565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161108391815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff82166110de576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff82166000908152600360205260409020548181101561113e576040517ffe382aa700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611148828261162c565b73ffffffffffffffffffffffffffffffffffffffff84166000908152600360205260408120919091556005805484929061118390849061162c565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90602001610ec9565b73ffffffffffffffffffffffffffffffffffffffff8216611220576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b806005600082825461123291906116ff565b909155505073ffffffffffffffffffffffffffffffffffffffff82166000908152600360205260408120805483929061126c9084906116ff565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6000815180845260005b818110156112e9576020818501810151868301820152016112cd565b5060006020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b60208152600061133a60208301846112c3565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff8116811461136357600080fd5b50565b6000806040838503121561137957600080fd5b823561138481611341565b946020939093013593505050565b6000806000606084860312156113a757600080fd5b83356113b281611341565b925060208401356113c281611341565b929592945050506040919091013590565b6000602082840312156113e557600080fd5b5035919050565b6000602082840312156113fe57600080fd5b813561133a81611341565b6020810160038310611444577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000806040838503121561148c57600080fd5b823567ffffffffffffffff8111156114a357600080fd5b8301601f810185136114b457600080fd5b803567ffffffffffffffff8111156114ce576114ce61144a565b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8501160116810181811067ffffffffffffffff8211171561153a5761153a61144a565b60405281815282820160200187101561155257600080fd5b8160208401602083013760006020928201830152969401359450505050565b6000806040838503121561158457600080fd5b823561158f81611341565b9150602083013561159f81611341565b809150509250929050565b600181811c908216806115be57607f821691505b6020821081036115f7577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8181038181111561051a5761051a6115fd565b60408152600061165260408301856112c3565b90508260208301529392505050565b60006020828403121561167357600080fd5b8151801515811461133a57600080fd5b60808152600061169660808301876112c3565b6020830195909552506040810192909252606090910152919050565b6000602082840312156116c457600080fd5b815161133a81611341565b6000602082840312156116e157600080fd5b5051919050565b808202811582820484141761051a5761051a6115fd565b8082018082111561051a5761051a6115fd56fea26469706673582212204013e39523742118b3f2227e145ee7e48176ba6aebead33c596dca2acb59a74c64736f6c634300081a0033a2646970667358221220785ea9b369456a1d99b0dc22fbe679c14ec736ba0f02ff1bc4ff4cdb0d19027864736f6c634300081a0033", } // GatewayZEVMOutboundTestABI is the input ABI used to generate the binding from. @@ -1316,25 +1316,25 @@ func (_GatewayZEVMOutboundTest *GatewayZEVMOutboundTestTransactorSession) TestEx return _GatewayZEVMOutboundTest.Contract.TestExecuteFailsIfTargetIsZeroAddress(&_GatewayZEVMOutboundTest.TransactOpts) } -// TestExecuteFailsIfZrc20IsZeroAddress is a paid mutator transaction binding the contract method 0x09f92c1f. +// TestExecuteFailsIfZRC20IsZeroAddress is a paid mutator transaction binding the contract method 0x2948df41. // -// Solidity: function testExecuteFailsIfZrc20IsZeroAddress() returns() -func (_GatewayZEVMOutboundTest *GatewayZEVMOutboundTestTransactor) TestExecuteFailsIfZrc20IsZeroAddress(opts *bind.TransactOpts) (*types.Transaction, error) { - return _GatewayZEVMOutboundTest.contract.Transact(opts, "testExecuteFailsIfZrc20IsZeroAddress") +// Solidity: function testExecuteFailsIfZRC20IsZeroAddress() returns() +func (_GatewayZEVMOutboundTest *GatewayZEVMOutboundTestTransactor) TestExecuteFailsIfZRC20IsZeroAddress(opts *bind.TransactOpts) (*types.Transaction, error) { + return _GatewayZEVMOutboundTest.contract.Transact(opts, "testExecuteFailsIfZRC20IsZeroAddress") } -// TestExecuteFailsIfZrc20IsZeroAddress is a paid mutator transaction binding the contract method 0x09f92c1f. +// TestExecuteFailsIfZRC20IsZeroAddress is a paid mutator transaction binding the contract method 0x2948df41. // -// Solidity: function testExecuteFailsIfZrc20IsZeroAddress() returns() -func (_GatewayZEVMOutboundTest *GatewayZEVMOutboundTestSession) TestExecuteFailsIfZrc20IsZeroAddress() (*types.Transaction, error) { - return _GatewayZEVMOutboundTest.Contract.TestExecuteFailsIfZrc20IsZeroAddress(&_GatewayZEVMOutboundTest.TransactOpts) +// Solidity: function testExecuteFailsIfZRC20IsZeroAddress() returns() +func (_GatewayZEVMOutboundTest *GatewayZEVMOutboundTestSession) TestExecuteFailsIfZRC20IsZeroAddress() (*types.Transaction, error) { + return _GatewayZEVMOutboundTest.Contract.TestExecuteFailsIfZRC20IsZeroAddress(&_GatewayZEVMOutboundTest.TransactOpts) } -// TestExecuteFailsIfZrc20IsZeroAddress is a paid mutator transaction binding the contract method 0x09f92c1f. +// TestExecuteFailsIfZRC20IsZeroAddress is a paid mutator transaction binding the contract method 0x2948df41. // -// Solidity: function testExecuteFailsIfZrc20IsZeroAddress() returns() -func (_GatewayZEVMOutboundTest *GatewayZEVMOutboundTestTransactorSession) TestExecuteFailsIfZrc20IsZeroAddress() (*types.Transaction, error) { - return _GatewayZEVMOutboundTest.Contract.TestExecuteFailsIfZrc20IsZeroAddress(&_GatewayZEVMOutboundTest.TransactOpts) +// Solidity: function testExecuteFailsIfZRC20IsZeroAddress() returns() +func (_GatewayZEVMOutboundTest *GatewayZEVMOutboundTestTransactorSession) TestExecuteFailsIfZRC20IsZeroAddress() (*types.Transaction, error) { + return _GatewayZEVMOutboundTest.Contract.TestExecuteFailsIfZRC20IsZeroAddress(&_GatewayZEVMOutboundTest.TransactOpts) } // TestExecuteRevertUniversalContract is a paid mutator transaction binding the contract method 0x084fafab. diff --git a/v2/pkg/zrc20.t.sol/zrc20test.go b/v2/pkg/zrc20.t.sol/zrc20test.go index 99c42180..71a8ef37 100644 --- a/v2/pkg/zrc20.t.sol/zrc20test.go +++ b/v2/pkg/zrc20.t.sol/zrc20test.go @@ -50,7 +50,7 @@ type StdInvariantFuzzSelector struct { // ZRC20TestMetaData contains all meta data concerning the ZRC20Test contract. var ZRC20TestMetaData = &bind.MetaData{ ABI: "[{\"type\":\"function\",\"name\":\"IS_TEST\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeArtifacts\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedArtifacts_\",\"type\":\"string[]\",\"internalType\":\"string[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeContracts\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedContracts_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeSelectors\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedSelectors_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzSelector[]\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"selectors\",\"type\":\"bytes4[]\",\"internalType\":\"bytes4[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeSenders\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedSenders_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"failed\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"setUp\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"targetArtifactSelectors\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedArtifactSelectors_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzArtifactSelector[]\",\"components\":[{\"name\":\"artifact\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"selectors\",\"type\":\"bytes4[]\",\"internalType\":\"bytes4[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetArtifacts\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedArtifacts_\",\"type\":\"string[]\",\"internalType\":\"string[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetContracts\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedContracts_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetInterfaces\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedInterfaces_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzInterface[]\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"artifacts\",\"type\":\"string[]\",\"internalType\":\"string[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetSelectors\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedSelectors_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzSelector[]\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"selectors\",\"type\":\"bytes4[]\",\"internalType\":\"bytes4[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetSenders\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedSenders_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"testApproveFailsIfRecipientIsZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testBurn\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testBurnFailsIfNoBalance\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDeposit\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositFailsIfRecipientIsZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositFailsIfSenderIsNotGateway\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testTransfer\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testTransferFailsIfNoBalance\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testTransferFailsIfRecipientIsZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testTransferFrom\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testTransferFromFailsIfNoAllowance\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testTransferFromFailsIfNoBalance\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testTransferFromFailsIfRecipientIsZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testTransferFromFailsIfSenderIsZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testUpdateGasLimit\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testUpdateGasLimitFailsIfSenderIsNotFungible\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testUpdateGatewayAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testUpdateGatewayAddressFailsIfSenderIsNotFungible\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testUpdateGatewayAddressFailsIfZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testUpdateProtocolFlatFee\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testUpdateProtocolFlatFeeFailsIfSenderIsNotFungible\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testUpdateSystemContractAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testUpdateSystemContractAddressFailsIfSenderIsNotFungible\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testUpdateSystemContractAddressFailsIfZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdraw\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawFailsIfNoAllowance\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawFailsIfNoBalance\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawGasFee\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawGasFeeFailsIfGasCoinNotSetForChainId\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawGasFeeFailsIfGasPriceNotSetForChainId\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testZRC20BasicInfo\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"event\",\"name\":\"log\",\"inputs\":[{\"name\":\"\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_address\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_array\",\"inputs\":[{\"name\":\"val\",\"type\":\"uint256[]\",\"indexed\":false,\"internalType\":\"uint256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_array\",\"inputs\":[{\"name\":\"val\",\"type\":\"int256[]\",\"indexed\":false,\"internalType\":\"int256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_array\",\"inputs\":[{\"name\":\"val\",\"type\":\"address[]\",\"indexed\":false,\"internalType\":\"address[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_bytes\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_bytes32\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_int\",\"inputs\":[{\"name\":\"\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_address\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_array\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"uint256[]\",\"indexed\":false,\"internalType\":\"uint256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_array\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"int256[]\",\"indexed\":false,\"internalType\":\"int256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_array\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"address[]\",\"indexed\":false,\"internalType\":\"address[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_bytes\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_bytes32\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_decimal_int\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"},{\"name\":\"decimals\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_decimal_uint\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"decimals\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_int\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_string\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_uint\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_string\",\"inputs\":[{\"name\":\"\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_uint\",\"inputs\":[{\"name\":\"\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"logs\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"CallerIsNotFungibleModule\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"GasFeeTransferFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidSender\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"LowAllowance\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"LowBalance\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZeroAddress\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZeroGasCoin\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZeroGasPrice\",\"inputs\":[]}]", - Bin: "0x6080604052600c8054600160ff199182168117909255601f80549091169091179055348015602c57600080fd5b5061df6a8061003c6000396000f3fe608060405234801561001057600080fd5b50600436106102f45760003560e01c80638ce7ef0511610191578063d27b0427116100e3578063dfbdf60011610097578063f1f87f4011610071578063f1f87f401461049d578063f2413096146104a5578063fa7626d4146104ad57600080fd5b8063dfbdf60014610485578063e13aba481461048d578063e20c9f711461049557600080fd5b8063d591221f116100c8578063d591221f1461046d578063d97136a214610475578063dcba486a1461047d57600080fd5b8063d27b04271461045d578063d509b16c1461046557600080fd5b8063b549984c11610145578063ba414fa61161011f578063ba414fa614610435578063d04cda981461044d578063d1fd32911461045557600080fd5b8063b549984c1461041d578063b5508aa914610425578063b79cad091461042d57600080fd5b8063a4aa6c7c11610176578063a4aa6c7c14610405578063ae9687dc1461040d578063b0464fdc1461041557600080fd5b80638ce7ef05146103e8578063916a17c6146103f057600080fd5b80634b6295091161024a57806366d9a9a0116101fe5780637f924c4e116101d85780637f924c4e146103c357806380326680146103cb57806385226c81146103d357600080fd5b806366d9a9a01461039e5780636ff45850146103b357806370557298146103bb57600080fd5b8063513999621161022f578063513999621461038657806358fdbbe01461038e5780635f01db7e1461039657600080fd5b80634b629509146103765780634cfc0aaa1461037e57600080fd5b806328438826116102ac5780633be9ec80116102865780633be9ec801461035e5780633e5e3c23146103665780633f7286f41461036e57600080fd5b806328438826146103395780632ade3880146103415780632f6254fc1461035657600080fd5b80630a9254e4116102dd5780630a9254e41461030b5780631142744e146103135780631ed7831c1461031b57600080fd5b80630393998b146102f95780630809dfef14610303575b600080fd5b6103016104ba565b005b6103016105bc565b61030161074a565b610301610e2c565b610323610f10565b6040516103309190619053565b60405180910390f35b610301610f72565b6103496111bd565b60405161033091906190ef565b6103016112ff565b610301611470565b61032361165d565b6103236116bd565b61030161171d565b6103016117f0565b6103016118c9565b610301611c46565b610301611d19565b6103a6611e86565b6040516103309190619255565b610301612008565b610301612218565b610301612468565b61030161268c565b6103db612760565b60405161033091906192f3565b610301612830565b6103f8612a30565b604051610330919061936a565b610301612b2b565b610301612ce0565b6103f8612f6d565b610301613068565b6103db61313a565b61030161320a565b61043d61359c565b6040519015158152602001610330565b610301613670565b6103016137b4565b6103016138f7565b610301613a3a565b6103016140ce565b6103016141b2565b610301614338565b6103016145bb565b6103016146fe565b6103236149a8565b610301614a08565b610301614b4e565b601f5461043d9060ff1681565b604051630618f58760e51b81527f2b2add3d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b15801561052657600080fd5b505af115801561053a573d6000803e3d6000fd5b5050601f546040517feddeb123000000000000000000000000000000000000000000000000000000008152600a60048201526101009091046001600160a01b0316925063eddeb12391506024015b600060405180830381600087803b1580156105a257600080fd5b505af11580156105b6573d6000803e3d6000fd5b50505050565b60225460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561061557600080fd5b505af1158015610629573d6000803e3d6000fd5b5050604051630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b15801561069957600080fd5b505af11580156106ad573d6000803e3d6000fd5b5050601f546040517f47e7ef2400000000000000000000000000000000000000000000000000000000815260006004820152620186a060248201526101009091046001600160a01b031692506347e7ef2491506044015b6020604051808303816000875af1158015610723573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107479190619401565b50565b602480547fffffffffffffffffffffffff000000000000000000000000000000000000000090811630179091556025805490911661123417905560405161079090618f73565b604051809103906000f0801580156107ac573d6000803e3d6000fd5b50602380547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03928316908117909155604080518082018252600f81527f476174657761795a45564d2e736f6c000000000000000000000000000000000060208201526024805492519081019390935292166044820152610890919060640160408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f485cc95500000000000000000000000000000000000000000000000000000000179052614daa565b602280546001600160a01b03929092167fffffffffffffffffffffffff00000000000000000000000000000000000000009283168117909155602180549092168117909155604080517f3ce4a5bc0000000000000000000000000000000000000000000000000000000081529051633ce4a5bc916004808201926020929091908290030181865afa158015610929573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061094d919061943f565b602680547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039290921691821790556040517f06447d560000000000000000000000000000000000000000000000000000000081526004810191909152737109709ecfa91a80626ff3989d68f67f5b1dd12d906306447d5690602401600060405180830381600087803b1580156109eb57600080fd5b505af11580156109ff573d6000803e3d6000fd5b505050506000806000604051610a1490618f80565b6001600160a01b03938416815291831660208301529091166040820152606001604051809103906000f080158015610a50573d6000803e3d6000fd5b50602080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03928316908117909155602154604051601293600193849360009391921690610aa690618f8d565b610ab59695949392919061945a565b604051809103906000f080158015610ad1573d6000803e3d6000fd5b50601f80547fffffffffffffffffffffff0000000000000000000000000000000000000000ff166101006001600160a01b03938416810291909117918290556020546040517fee2815ba00000000000000000000000000000000000000000000000000000000815260016004820152919092048316602482015291169063ee2815ba90604401600060405180830381600087803b158015610b7157600080fd5b505af1158015610b85573d6000803e3d6000fd5b50506020546040517fa7cb050700000000000000000000000000000000000000000000000000000000815260016004820181905260248201526001600160a01b03909116925063a7cb05079150604401600060405180830381600087803b158015610bef57600080fd5b505af1158015610c03573d6000803e3d6000fd5b50506026546040517fc88a5e6d0000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152633b9aca006024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c88a5e6d9150604401600060405180830381600087803b158015610c8357600080fd5b505af1158015610c97573d6000803e3d6000fd5b50506022546040517fc88a5e6d0000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152633b9aca006024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c88a5e6d9150604401600060405180830381600087803b158015610d1757600080fd5b505af1158015610d2b573d6000803e3d6000fd5b5050601f54602480546040517f47e7ef240000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620186a09281019290925261010090920490911692506347e7ef2491506044016020604051808303816000875af1158015610da9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dcd9190619401565b507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b03166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156105a257600080fd5b604051630618f58760e51b81527fddb5de5e000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b158015610e9857600080fd5b505af1158015610eac573d6000803e3d6000fd5b5050601f54602480546040517f47e7ef240000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620186a09281019290925261010090920490911692506347e7ef249150604401610704565b60606016805480602002602001604051908101604052809291908181526020018280548015610f6857602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610f4a575b5050505050905090565b601f546025546040516370a0823160e01b81526001600160a01b0391821660048201526000926101009004909116906370a0823190602401602060405180830381865afa158015610fc7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610feb919061954f565b9050610ff8600082614dc9565b601f54602480546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201526207a12092810183905291926101009004169063095ea7b3906044016020604051808303816000875af1158015611070573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110949190619401565b50604051630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b15801561110157600080fd5b505af1158015611115573d6000803e3d6000fd5b5050601f546025546040517f23b872dd000000000000000000000000000000000000000000000000000000008152600060048201526001600160a01b039182166024820152604481018690526101009092041692506323b872dd91506064015b6020604051808303816000875af1158015611194573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111b89190619401565b505050565b6060601e805480602002602001604051908101604052809291908181526020016000905b828210156112f657600084815260208082206040805180820182526002870290920180546001600160a01b03168352600181018054835181870281018701909452808452939591948681019491929084015b828210156112df57838290600052602060002001805461125290619568565b80601f016020809104026020016040519081016040528092919081815260200182805461127e90619568565b80156112cb5780601f106112a0576101008083540402835291602001916112cb565b820191906000526020600020905b8154815290600101906020018083116112ae57829003601f168201915b505050505081526020019060010190611233565b5050505081525050815260200190600101906111e1565b50505050905090565b60265460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561135857600080fd5b505af115801561136c573d6000803e3d6000fd5b5050601f546040517fc835d7cc00000000000000000000000000000000000000000000000000000000815261321160048201526101009091046001600160a01b0316925063c835d7cc9150602401600060405180830381600087803b1580156113d457600080fd5b505af11580156113e8573d6000803e3d6000fd5b5050505061146e601f60019054906101000a90046001600160a01b03166001600160a01b031663f2441b326040518163ffffffff1660e01b8152600401602060405180830381865afa158015611442573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611466919061943f565b613211614e51565b565b60265460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156114c957600080fd5b505af11580156114dd573d6000803e3d6000fd5b50506020546040517fa7cb050700000000000000000000000000000000000000000000000000000000815260016004820152600060248201526001600160a01b03909116925063a7cb05079150604401600060405180830381600087803b15801561154757600080fd5b505af115801561155b573d6000803e3d6000fd5b5050604051630618f58760e51b81527fe661aed0000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e091506024015b600060405180830381600087803b1580156115cc57600080fd5b505af11580156115e0573d6000803e3d6000fd5b50505050600080601f60019054906101000a90046001600160a01b03166001600160a01b031663d9eeebed6040518163ffffffff1660e01b81526004016040805180830381865afa158015611639573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105b691906195b5565b60606018805480602002602001604051908101604052809291908181526020018280548015610f68576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311610f4a575050505050905090565b60606017805480602002602001604051908101604052809291908181526020018280548015610f68576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311610f4a575050505050905090565b604051630618f58760e51b81527f2b2add3d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b15801561178957600080fd5b505af115801561179d573d6000803e3d6000fd5b5050601f546040517fccc7759900000000000000000000000000000000000000000000000000000000815261321160048201526101009091046001600160a01b0316925063ccc775999150602401610588565b604051630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b15801561185c57600080fd5b505af1158015611870573d6000803e3d6000fd5b5050601f546040517f095ea7b300000000000000000000000000000000000000000000000000000000815260006004820152600a60248201526101009091046001600160a01b0316925063095ea7b39150604401610704565b60265460405163ca669fa760e01b81526001600160a01b039091166004820152600a908190737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561192757600080fd5b505af115801561193b573d6000803e3d6000fd5b5050601f546040517ff687d12a000000000000000000000000000000000000000000000000000000008152600481018690526101009091046001600160a01b0316925063f687d12a9150602401600060405180830381600087803b1580156119a257600080fd5b505af11580156119b6573d6000803e3d6000fd5b505060265460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b158015611a1357600080fd5b505af1158015611a27573d6000803e3d6000fd5b5050601f546040517feddeb123000000000000000000000000000000000000000000000000000000008152600481018590526101009091046001600160a01b0316925063eddeb1239150602401600060405180830381600087803b158015611a8e57600080fd5b505af1158015611aa2573d6000803e3d6000fd5b5050601f546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526101009091046001600160a01b03166004820181905260006024830152925063095ea7b391506044016020604051808303816000875af1158015611b15573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b399190619401565b507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b031663f48448146040518163ffffffff1660e01b8152600401600060405180830381600087803b158015611b9857600080fd5b505af1158015611bac573d6000803e3d6000fd5b5050601f546025546040805160609290921b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000001660208301528051601481840301815260348301918290527fc7012626000000000000000000000000000000000000000000000000000000009091526001600160a01b0361010090930492909216935063c7012626925061117591906001906038016195e1565b604051630618f58760e51b81527f2b2add3d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b158015611cb257600080fd5b505af1158015611cc6573d6000803e3d6000fd5b5050601f546040517fc835d7cc00000000000000000000000000000000000000000000000000000000815261321160048201526101009091046001600160a01b0316925063c835d7cc9150602401610588565b60265460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015611d7257600080fd5b505af1158015611d86573d6000803e3d6000fd5b5050601f546040517ff687d12a000000000000000000000000000000000000000000000000000000008152600a60048201526101009091046001600160a01b0316925063f687d12a9150602401600060405180830381600087803b158015611ded57600080fd5b505af1158015611e01573d6000803e3d6000fd5b5050505061146e600a601f60019054906101000a90046001600160a01b03166001600160a01b031663091d27886040518163ffffffff1660e01b8152600401602060405180830381865afa158015611e5d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e81919061954f565b614dc9565b6060601b805480602002602001604051908101604052809291908181526020016000905b828210156112f65783829060005260206000209060020201604051806040016040529081600082018054611edd90619568565b80601f0160208091040260200160405190810160405280929190818152602001828054611f0990619568565b8015611f565780601f10611f2b57610100808354040283529160200191611f56565b820191906000526020600020905b815481529060010190602001808311611f3957829003601f168201915b5050505050815260200160018201805480602002602001604051908101604052809291908181526020018280548015611ff057602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019060040190602082600301049283019260010382029150808411611f9d5790505b50505050508152505081526020019060010190611eaa565b601f546025546040516370a0823160e01b81526001600160a01b0391821660048201526000926101009004909116906370a0823190602401602060405180830381865afa15801561205d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612081919061954f565b905061208e600082614dc9565b601f54602480546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201526207a12092810183905291926101009004169063095ea7b3906044016020604051808303816000875af1158015612106573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061212a9190619401565b50604051630618f58760e51b81527ffe382aa7000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b15801561219757600080fd5b505af11580156121ab573d6000803e3d6000fd5b5050601f54602480546025546040517f23b872dd0000000000000000000000000000000000000000000000000000000081526001600160a01b039283166004820152908216928101929092526044820186905261010090920490911692506323b872dd9150606401611175565b601f546025546040516370a0823160e01b81526001600160a01b0391821660048201526000926101009004909116906370a0823190602401602060405180830381865afa15801561226d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612291919061954f565b905061229e600082614dc9565b601f54602480546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015261c35092810183905291926101009004169063095ea7b3906044016020604051808303816000875af1158015612315573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123399190619401565b50601f54602480546025546040517f23b872dd0000000000000000000000000000000000000000000000000000000081526001600160a01b0392831660048201529082169281019290925260448201849052610100909204909116906323b872dd906064015b6020604051808303816000875af11580156123be573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123e29190619401565b50601f546025546040516370a0823160e01b81526001600160a01b0391821660048201526000926101009004909116906370a0823190602401602060405180830381865afa158015612438573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061245c919061954f565b90506111b88282614dc9565b6000601f60019054906101000a90046001600160a01b03166001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156124bd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124e1919061954f565b90506124f0620186a082614dc9565b60225460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561254957600080fd5b505af115801561255d573d6000803e3d6000fd5b5050601f54602480546040517f47e7ef240000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620186a09281019290925261010090920490911692506347e7ef2491506044016020604051808303816000875af11580156125db573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125ff9190619401565b506000601f60019054906101000a90046001600160a01b03166001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612655573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612679919061954f565b905061268862030d4082614dc9565b5050565b604051630618f58760e51b81527ffe382aa7000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b1580156126f857600080fd5b505af115801561270c573d6000803e3d6000fd5b5050601f546040517f42966c68000000000000000000000000000000000000000000000000000000008152620249f060048201526101009091046001600160a01b031692506342966c689150602401610704565b6060601a805480602002602001604051908101604052809291908181526020016000905b828210156112f65783829060005260206000200180546127a390619568565b80601f01602080910402602001604051908101604052809291908181526020018280546127cf90619568565b801561281c5780601f106127f15761010080835404028352916020019161281c565b820191906000526020600020905b8154815290600101906020018083116127ff57829003601f168201915b505050505081526020019060010190612784565b601f546025546040516370a0823160e01b81526001600160a01b0391821660048201526000926101009004909116906370a0823190602401602060405180830381865afa158015612885573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128a9919061954f565b90506128b6600082614dc9565b601f54602480546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201526207a12092810183905291926101009004169063095ea7b3906044016020604051808303816000875af115801561292e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129529190619401565b50604051630618f58760e51b81527ffe382aa7000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b1580156129bf57600080fd5b505af11580156129d3573d6000803e3d6000fd5b5050601f546025546040517fa9059cbb0000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201526024810186905261010090920416925063a9059cbb9150604401611175565b6060601d805480602002602001604051908101604052809291908181526020016000905b828210156112f65760008481526020908190206040805180820182526002860290920180546001600160a01b03168352600181018054835181870281018701909452808452939491938583019392830182828015612b1357602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019060040190602082600301049283019260010382029150808411612ac05790505b50505050508152505081526020019060010190612a54565b601f54602480546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201526207a12092810183905291926101009004169063095ea7b3906044016020604051808303816000875af1158015612ba3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612bc79190619401565b50604051630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b158015612c3457600080fd5b505af1158015612c48573d6000803e3d6000fd5b5050601f546040517fa9059cbb00000000000000000000000000000000000000000000000000000000815260006004820152602481018590526101009091046001600160a01b0316925063a9059cbb91506044015b6020604051808303816000875af1158015612cbc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126889190619401565b6000601f60019054906101000a90046001600160a01b03166001600160a01b03166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa158015612d35573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052612d5d91908101906196cb565b9050612d9e6040518060400160405280600581526020017f544f4b454e00000000000000000000000000000000000000000000000000000081525082614eb2565b6000601f60019054906101000a90046001600160a01b03166001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa158015612df3573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052612e1b91908101906196cb565b9050612e5c6040518060400160405280600381526020017f544b4e000000000000000000000000000000000000000000000000000000000081525082614eb2565b6000601f60019054906101000a90046001600160a01b03166001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015612eb1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ed59190619714565b9050612ee560128260ff16614dc9565b6000601f60019054906101000a90046001600160a01b03166001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612f3a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f5e919061954f565b90506105b6620186a082614dc9565b6060601c805480602002602001604051908101604052809291908181526020016000905b828210156112f65760008481526020908190206040805180820182526002860290920180546001600160a01b0316835260018101805483518187028101870190945280845293949193858301939283018282801561305057602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019060040190602082600301049283019260010382029150808411612ffd5790505b50505050508152505081526020019060010190612f91565b604051630618f58760e51b81527f2b2add3d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b1580156130d457600080fd5b505af11580156130e8573d6000803e3d6000fd5b5050601f546040517ff687d12a000000000000000000000000000000000000000000000000000000008152600a60048201526101009091046001600160a01b0316925063f687d12a9150602401610588565b60606019805480602002602001604051908101604052809291908181526020016000905b828210156112f657838290600052602060002001805461317d90619568565b80601f01602080910402602001604051908101604052809291908181526020018280546131a990619568565b80156131f65780601f106131cb576101008083540402835291602001916131f6565b820191906000526020600020905b8154815290600101906020018083116131d957829003601f168201915b50505050508152602001906001019061315e565b60265460405163ca669fa760e01b81526001600160a01b039091166004820152600a906305f5e10090737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561326c57600080fd5b505af1158015613280573d6000803e3d6000fd5b5050601f546040517ff687d12a000000000000000000000000000000000000000000000000000000008152600481018690526101009091046001600160a01b0316925063f687d12a9150602401600060405180830381600087803b1580156132e757600080fd5b505af11580156132fb573d6000803e3d6000fd5b505060265460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b15801561335857600080fd5b505af115801561336c573d6000803e3d6000fd5b5050601f546040517feddeb123000000000000000000000000000000000000000000000000000000008152600481018590526101009091046001600160a01b0316925063eddeb1239150602401600060405180830381600087803b1580156133d357600080fd5b505af11580156133e7573d6000803e3d6000fd5b5050601f546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526101009091046001600160a01b031660048201819052630bebc2006024830152925063095ea7b391506044016020604051808303816000875af115801561345d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134819190619401565b50604051630618f58760e51b81527ffe382aa7000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b1580156134ee57600080fd5b505af1158015613502573d6000803e3d6000fd5b5050601f546025546040805160609290921b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000001660208301528051601481840301815260348301918290527fc7012626000000000000000000000000000000000000000000000000000000009091526001600160a01b0361010090930492909216935063c7012626925061117591906064906038016195e1565b60085460009060ff16156135b4575060085460ff1690565b6040517f667f9d70000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d600482018190527f6661696c65640000000000000000000000000000000000000000000000000000602483015260009163667f9d7090604401602060405180830381865afa158015613645573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613669919061954f565b1415905090565b60265460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156136c957600080fd5b505af11580156136dd573d6000803e3d6000fd5b5050601f546040517feddeb123000000000000000000000000000000000000000000000000000000008152600a60048201526101009091046001600160a01b0316925063eddeb1239150602401600060405180830381600087803b15801561374457600080fd5b505af1158015613758573d6000803e3d6000fd5b5050505061146e600a601f60019054906101000a90046001600160a01b03166001600160a01b0316634d8943bb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611e5d573d6000803e3d6000fd5b60265460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561380d57600080fd5b505af1158015613821573d6000803e3d6000fd5b5050604051630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b15801561389157600080fd5b505af11580156138a5573d6000803e3d6000fd5b5050601f546040517fccc77599000000000000000000000000000000000000000000000000000000008152600060048201526101009091046001600160a01b0316925063ccc775999150602401610588565b60265460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561395057600080fd5b505af1158015613964573d6000803e3d6000fd5b5050604051630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b1580156139d457600080fd5b505af11580156139e8573d6000803e3d6000fd5b5050601f546040517fc835d7cc000000000000000000000000000000000000000000000000000000008152600060048201526101009091046001600160a01b0316925063c835d7cc9150602401610588565b60265460405163ca669fa760e01b81526001600160a01b039091166004820152600a908190737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015613a9857600080fd5b505af1158015613aac573d6000803e3d6000fd5b5050601f546040517ff687d12a000000000000000000000000000000000000000000000000000000008152600481018690526101009091046001600160a01b0316925063f687d12a9150602401600060405180830381600087803b158015613b1357600080fd5b505af1158015613b27573d6000803e3d6000fd5b505060265460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b158015613b8457600080fd5b505af1158015613b98573d6000803e3d6000fd5b5050601f546040517feddeb123000000000000000000000000000000000000000000000000000000008152600481018590526101009091046001600160a01b0316925063eddeb1239150602401600060405180830381600087803b158015613bff57600080fd5b505af1158015613c13573d6000803e3d6000fd5b5050601f54602480546040516370a0823160e01b81526001600160a01b039182166004820152600095506101009093041692506370a082319101602060405180830381865afa158015613c6a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613c8e919061954f565b9050613c9d620186a082614dc9565b6000601f60019054906101000a90046001600160a01b03166001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613cf2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613d16919061954f565b9050613d25620186a082614dc9565b601f546026546040516370a0823160e01b81526001600160a01b0391821660048201526000926101009004909116906370a0823190602401602060405180830381865afa158015613d7a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613d9e919061954f565b601f546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526101009091046001600160a01b03166004820181905261c350602483015291925063095ea7b3906044016020604051808303816000875af1158015613e10573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613e349190619401565b50601f546025546040805160609290921b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000001660208301528051601481840301815260348301918290527fc7012626000000000000000000000000000000000000000000000000000000009091526001600160a01b03610100909304929092169163c701262691613ecc919061c350906038016195e1565b6020604051808303816000875af1158015613eeb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613f0f9190619401565b50601f546026546040516370a0823160e01b81526001600160a01b0391821660048201526000926101009004909116906370a0823190602401602060405180830381865afa158015613f65573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613f89919061954f565b9050613fa985613f998885619766565b613fa39190619766565b82614dc9565b601f54602480546040516370a0823160e01b81526001600160a01b0391821660048201526000936101009004909116916370a082319101602060405180830381865afa158015613ffd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614021919061954f565b905061403d866140338961c350619779565b613fa39190619779565b6000601f60019054906101000a90046001600160a01b03166001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015614092573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906140b6919061954f565b90506140c461c35082614dc9565b5050505050505050565b601f546025546040516370a0823160e01b81526001600160a01b0391821660048201526000926101009004909116906370a0823190602401602060405180830381865afa158015614123573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614147919061954f565b9050614154600082614dc9565b601f546025546040517fa9059cbb0000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015261c350602482018190529261010090049091169063a9059cbb9060440161239f565b601f54602480546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201526207a12092810183905291926101009004169063095ea7b3906044016020604051808303816000875af115801561422a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061424e9190619401565b50604051630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b1580156142bb57600080fd5b505af11580156142cf573d6000803e3d6000fd5b5050601f54602480546040517f23b872dd0000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201526000928101929092526044820186905261010090920490911692506323b872dd9150606401612c9d565b60265460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561439157600080fd5b505af11580156143a5573d6000803e3d6000fd5b5050601f546040517ff687d12a000000000000000000000000000000000000000000000000000000008152600a6004820181905293508392506101009091046001600160a01b03169063f687d12a90602401600060405180830381600087803b15801561441157600080fd5b505af1158015614425573d6000803e3d6000fd5b505060265460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b15801561448257600080fd5b505af1158015614496573d6000803e3d6000fd5b5050601f546040517feddeb123000000000000000000000000000000000000000000000000000000008152600a60048201526101009091046001600160a01b0316925063eddeb1239150602401600060405180830381600087803b1580156144fd57600080fd5b505af1158015614511573d6000803e3d6000fd5b50505050600080601f60019054906101000a90046001600160a01b03166001600160a01b031663d9eeebed6040518163ffffffff1660e01b81526004016040805180830381865afa15801561456a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061458e91906195b5565b601f5491935091506145ae9061010090046001600160a01b031683614e51565b6105b6613fa38486619766565b60265460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561461457600080fd5b505af1158015614628573d6000803e3d6000fd5b5050601f546040517fccc7759900000000000000000000000000000000000000000000000000000000815261321160048201526101009091046001600160a01b0316925063ccc775999150602401600060405180830381600087803b15801561469057600080fd5b505af11580156146a4573d6000803e3d6000fd5b5050505061146e601f60019054906101000a90046001600160a01b03166001600160a01b0316638b851b956040518163ffffffff1660e01b8152600401602060405180830381865afa158015611442573d6000803e3d6000fd5b601f54602480546040516370a0823160e01b81526001600160a01b0391821660048201526000936101009004909116916370a082319101602060405180830381865afa158015614752573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614776919061954f565b9050614785620186a082614dc9565b6000601f60019054906101000a90046001600160a01b03166001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156147da573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906147fe919061954f565b905061480d620186a082614dc9565b601f546040517f42966c6800000000000000000000000000000000000000000000000000000000815261c35060048201526101009091046001600160a01b0316906342966c68906024016020604051808303816000875af1158015614876573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061489a9190619401565b50601f54602480546040516370a0823160e01b81526001600160a01b0391821660048201526000936101009004909116916370a082319101602060405180830381865afa1580156148ef573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614913919061954f565b905061492161c35082614dc9565b6000601f60019054906101000a90046001600160a01b03166001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015614976573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061499a919061954f565b90506105b661c35082614dc9565b60606015805480602002602001604051908101604052809291908181526020018280548015610f68576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311610f4a575050505050905090565b60265460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015614a6157600080fd5b505af1158015614a75573d6000803e3d6000fd5b50506020546040517fee2815ba00000000000000000000000000000000000000000000000000000000815260016004820152600060248201526001600160a01b03909116925063ee2815ba9150604401600060405180830381600087803b158015614adf57600080fd5b505af1158015614af3573d6000803e3d6000fd5b5050604051630618f58760e51b81527f78fff396000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e091506024016115b2565b601f546025546040516370a0823160e01b81526001600160a01b0391821660048201526000926101009004909116906370a0823190602401602060405180830381865afa158015614ba3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614bc7919061954f565b9050614bd4600082614dc9565b601f54602480546040517fdd62ed3e0000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201819052928101929092526000926101009004169063dd62ed3e90604401602060405180830381865afa158015614c4a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614c6e919061954f565b9050614c7b600082614dc9565b604051630618f58760e51b81527f10bad14700000000000000000000000000000000000000000000000000000000600482015261c35090737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b158015614ceb57600080fd5b505af1158015614cff573d6000803e3d6000fd5b5050601f54602480546025546040517f23b872dd0000000000000000000000000000000000000000000000000000000081526001600160a01b039283166004820152908216928101929092526044820186905261010090920490911692506323b872dd91506064016020604051808303816000875af1158015614d86573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105b69190619401565b6000614db4618f9a565b614dbf848483614f04565b9150505b92915050565b6040517f98296c540000000000000000000000000000000000000000000000000000000081526004810183905260248101829052737109709ecfa91a80626ff3989d68f67f5b1dd12d906398296c54906044015b60006040518083038186803b158015614e3557600080fd5b505afa158015614e49573d6000803e3d6000fd5b505050505050565b6040517f515361f60000000000000000000000000000000000000000000000000000000081526001600160a01b03808416600483015282166024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063515361f690604401614e1d565b6040517ff320d963000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063f320d96390614e1d908590859060040161978c565b600080614f118584614f7f565b9050614f746040518060400160405280601d81526020017f4552433139363750726f78792e736f6c3a4552433139363750726f78790000008152508286604051602001614f5f9291906197b1565b60405160208183030381529060405285614f8b565b9150505b9392505050565b6000614f788383614fb9565b60c08101515160009015614faf57614fa884848460c00151614fd4565b9050614f78565b614fa8848461517a565b6000614fc58383615265565b614f7883836020015184614f8b565b600080614fdf615271565b90506000614fed8683615344565b9050600061500482606001518360200151856157ea565b90506000615014838389896159fc565b9050600061502182616879565b602081015181519192509060030b156150945789826040015160405160200161504b9291906197d3565b60408051601f19818403018152908290527f08c379a000000000000000000000000000000000000000000000000000000000825261508b91600401619854565b60405180910390fd5b60006150d76040518060400160405280601581526020017f4465706c6f79656420746f20616464726573733a200000000000000000000000815250836001616a48565b6040517fc6ce059d000000000000000000000000000000000000000000000000000000008152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c6ce059d9061512a908490600401619854565b602060405180830381865afa158015615147573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061516b919061943f565b9b9a5050505050505050505050565b6040517f8d1cc9250000000000000000000000000000000000000000000000000000000081526000908190737109709ecfa91a80626ff3989d68f67f5b1dd12d90638d1cc925906151cf908790600401619854565b600060405180830381865afa1580156151ec573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526152149190810190619887565b90506000615242828560405160200161522e9291906198bc565b604051602081830303815290604052616c48565b90506001600160a01b038116614dbf57848460405160200161504b9291906198eb565b61268882826000616c5b565b604080518082018252600381527f6f75740000000000000000000000000000000000000000000000000000000000602082015290517fd145736c000000000000000000000000000000000000000000000000000000008152606091737109709ecfa91a80626ff3989d68f67f5b1dd12d91829063d145736c906152f8908490600401619996565b600060405180830381865afa158015615315573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261533d91908101906196cb565b9250505090565b6153766040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b6000737109709ecfa91a80626ff3989d68f67f5b1dd12d90506153c16040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b6153ca85616d5e565b602082015260006153da86617143565b90506000836001600160a01b031663d930a0e66040518163ffffffff1660e01b8152600401600060405180830381865afa15801561541c573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261544491908101906196cb565b8683856020015160405160200161545e94939291906199dd565b60408051601f19818403018152908290527f60f9bb1100000000000000000000000000000000000000000000000000000000825291506000906001600160a01b038616906360f9bb11906154b6908590600401619854565b600060405180830381865afa1580156154d3573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526154fb91908101906196cb565b6040517fdb4235f60000000000000000000000000000000000000000000000000000000081529091506001600160a01b0386169063db4235f690615543908490600401619ae1565b602060405180830381865afa158015615560573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906155849190619401565b615599578160405160200161504b9190619b33565b6040517f49c4fac80000000000000000000000000000000000000000000000000000000081526001600160a01b038616906349c4fac8906155de908490600401619bc5565b600060405180830381865afa1580156155fb573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261562391908101906196cb565b84526040517fdb4235f60000000000000000000000000000000000000000000000000000000081526001600160a01b0386169063db4235f69061566a908490600401619c17565b602060405180830381865afa158015615687573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906156ab9190619401565b15615740576040517f49c4fac80000000000000000000000000000000000000000000000000000000081526001600160a01b038616906349c4fac8906156f5908490600401619c17565b600060405180830381865afa158015615712573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261573a91908101906196cb565b60408501525b846001600160a01b03166349c4fac88286600001516040516020016157659190619c69565b6040516020818303038152906040526040518363ffffffff1660e01b815260040161579192919061978c565b600060405180830381865afa1580156157ae573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526157d691908101906196cb565b606085015250608083015250949350505050565b60408051600480825260a0820190925260609160009190816020015b60608152602001906001900390816158065790505090506040518060400160405280600481526020017f67726570000000000000000000000000000000000000000000000000000000008152508160008151811061586657615866619cd5565b60200260200101819052506040518060400160405280600381526020017f2d726c0000000000000000000000000000000000000000000000000000000000815250816001815181106158ba576158ba619cd5565b6020026020010181905250846040516020016158d69190619d04565b604051602081830303815290604052816002815181106158f8576158f8619cd5565b6020026020010181905250826040516020016159149190619d70565b6040516020818303038152906040528160038151811061593657615936619cd5565b6020026020010181905250600061594c82616879565b602080820151604080518082018252600581527f2e6a736f6e00000000000000000000000000000000000000000000000000000081850190815282518084018452600080825290860152825180840190935290518252928101929092529192506159dd90604080518082018252600080825260209182015281518083019092528451825280850190820152906173c6565b6159f2578560405160200161504b9190619db1565b9695505050505050565b60a0810151604080518082018252600080825260209182015281518083019092528251808352928101910152606090737109709ecfa91a80626ff3989d68f67f5b1dd12d9015615a4c565b511590565b615bc057826020015115615b08576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605860248201527f54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f742060448201527f62652075736564207768656e207468652060736b6970566572696679536f757260648201527f6365436f646560206f7074696f6e206973206074727565600000000000000000608482015260a40161508b565b8260c0015115615bc0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605360248201527f54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f742060448201527f62652075736564207768656e207468652060736b69704c6963656e736554797060648201527f6560206f7074696f6e2069732060747275656000000000000000000000000000608482015260a40161508b565b6040805160ff8082526120008201909252600091816020015b6060815260200190600190039081615bd957905050905060006040518060400160405280600381526020017f6e70780000000000000000000000000000000000000000000000000000000000815250828280615c3490619e42565b935060ff1681518110615c4957615c49619cd5565b60200260200101819052506040518060400160405280600d81526020017f302e302e312d616c7068612e3700000000000000000000000000000000000000815250604051602001615c9a9190619e61565b604051602081830303815290604052828280615cb590619e42565b935060ff1681518110615cca57615cca619cd5565b60200260200101819052506040518060400160405280600681526020017f6465706c6f790000000000000000000000000000000000000000000000000000815250828280615d1790619e42565b935060ff1681518110615d2c57615d2c619cd5565b60200260200101819052506040518060400160405280600e81526020017f2d2d636f6e74726163744e616d65000000000000000000000000000000000000815250828280615d7990619e42565b935060ff1681518110615d8e57615d8e619cd5565b60200260200101819052508760200151828280615daa90619e42565b935060ff1681518110615dbf57615dbf619cd5565b60200260200101819052506040518060400160405280600e81526020017f2d2d636f6e747261637450617468000000000000000000000000000000000000815250828280615e0c90619e42565b935060ff1681518110615e2157615e21619cd5565b602090810291909101015287518282615e3981619e42565b935060ff1681518110615e4e57615e4e619cd5565b60200260200101819052506040518060400160405280600981526020017f2d2d636861696e49640000000000000000000000000000000000000000000000815250828280615e9b90619e42565b935060ff1681518110615eb057615eb0619cd5565b6020026020010181905250615ec446617427565b8282615ecf81619e42565b935060ff1681518110615ee457615ee4619cd5565b60200260200101819052506040518060400160405280600f81526020017f2d2d6275696c64496e666f46696c650000000000000000000000000000000000815250828280615f3190619e42565b935060ff1681518110615f4657615f46619cd5565b602002602001018190525086828280615f5e90619e42565b935060ff1681518110615f7357615f73619cd5565b602090810291909101015285511561609a5760408051808201909152601581527f2d2d636f6e7374727563746f7242797465636f6465000000000000000000000060208201528282615fc481619e42565b935060ff1681518110615fd957615fd9619cd5565b60209081029190910101526040517f71aad10d0000000000000000000000000000000000000000000000000000000081526001600160a01b038416906371aad10d90616029908990600401619854565b600060405180830381865afa158015616046573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261606e91908101906196cb565b828261607981619e42565b935060ff168151811061608e5761608e619cd5565b60200260200101819052505b84602001511561616a5760408051808201909152601281527f2d2d766572696679536f75726365436f64650000000000000000000000000000602082015282826160e381619e42565b935060ff16815181106160f8576160f8619cd5565b60200260200101819052506040518060400160405280600581526020017f66616c736500000000000000000000000000000000000000000000000000000081525082828061614590619e42565b935060ff168151811061615a5761615a619cd5565b6020026020010181905250616331565b6161a2615a478660a0015160408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6162355760408051808201909152600d81527f2d2d6c6963656e73655479706500000000000000000000000000000000000000602082015282826161e581619e42565b935060ff16815181106161fa576161fa619cd5565b60200260200101819052508460a0015160405160200161621a9190619d04565b60405160208183030381529060405282828061614590619e42565b8460c0015115801561627857506040808901518151808301835260008082526020918201528251808401909352815183529081019082015261627690511590565b155b156163315760408051808201909152600d81527f2d2d6c6963656e73655479706500000000000000000000000000000000000000602082015282826162bc81619e42565b935060ff16815181106162d1576162d1619cd5565b60200260200101819052506162e5886174c7565b6040516020016162f59190619d04565b60405160208183030381529060405282828061631090619e42565b935060ff168151811061632557616325619cd5565b60200260200101819052505b6040808601518151808301835260008082526020918201528251808401909352815183529081019082015261636590511590565b6163fa5760408051808201909152600b81527f2d2d72656c617965724964000000000000000000000000000000000000000000602082015282826163a881619e42565b935060ff16815181106163bd576163bd619cd5565b602002602001018190525084604001518282806163d990619e42565b935060ff16815181106163ee576163ee619cd5565b60200260200101819052505b60608501511561651b5760408051808201909152600681527f2d2d73616c7400000000000000000000000000000000000000000000000000006020820152828261644381619e42565b935060ff168151811061645857616458619cd5565b602090810291909101015260608501516040517fb11a19e800000000000000000000000000000000000000000000000000000000815260048101919091526001600160a01b0384169063b11a19e890602401600060405180830381865afa1580156164c7573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526164ef91908101906196cb565b82826164fa81619e42565b935060ff168151811061650f5761650f619cd5565b60200260200101819052505b60e085015151156165c25760408051808201909152600a81527f2d2d6761734c696d6974000000000000000000000000000000000000000000006020820152828261656581619e42565b935060ff168151811061657a5761657a619cd5565b60200260200101819052506165968560e0015160000151617427565b82826165a181619e42565b935060ff16815181106165b6576165b6619cd5565b60200260200101819052505b60e0850151602001511561666c5760408051808201909152600a81527f2d2d6761735072696365000000000000000000000000000000000000000000006020820152828261660f81619e42565b935060ff168151811061662457616624619cd5565b60200260200101819052506166408560e0015160200151617427565b828261664b81619e42565b935060ff168151811061666057616660619cd5565b60200260200101819052505b60e085015160400151156167165760408051808201909152600e81527f2d2d6d6178466565506572476173000000000000000000000000000000000000602082015282826166b981619e42565b935060ff16815181106166ce576166ce619cd5565b60200260200101819052506166ea8560e0015160400151617427565b82826166f581619e42565b935060ff168151811061670a5761670a619cd5565b60200260200101819052505b60e085015160600151156167c05760408051808201909152601681527f2d2d6d61785072696f72697479466565506572476173000000000000000000006020820152828261676381619e42565b935060ff168151811061677857616778619cd5565b60200260200101819052506167948560e0015160600151617427565b828261679f81619e42565b935060ff16815181106167b4576167b4619cd5565b60200260200101819052505b60008160ff1667ffffffffffffffff8111156167de576167de619603565b60405190808252806020026020018201604052801561681157816020015b60608152602001906001900390816167fc5790505b50905060005b8260ff168160ff16101561686a57838160ff168151811061683a5761683a619cd5565b6020026020010151828260ff168151811061685757616857619cd5565b6020908102919091010152600101616817565b5093505050505b949350505050565b6168a06040518060600160405280600060030b815260200160608152602001606081525090565b60408051808201825260048082527f6261736800000000000000000000000000000000000000000000000000000000602083015291517fd145736c000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d92600091849163d145736c9161692691869101619ecc565b600060405180830381865afa158015616943573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261696b91908101906196cb565b905060006169798683617fb6565b90506000846001600160a01b031663f45c1ce7836040518263ffffffff1660e01b81526004016169a991906192f3565b6000604051808303816000875af11580156169c8573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526169f09190810190619f13565b805190915060030b15801590616a095750602081015151155b8015616a185750604081015151155b156159f25781600081518110616a3057616a30619cd5565b602002602001015160405160200161504b9190619fc9565b60606000616a7d8560408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600080825260209182015281518083019092528651825280870190820152909150616ab49082905b9061810b565b15616c11576000616b3182616b2b84616b25616af78a60408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6040805180820182526000808252602091820152815180830190925282518252918201519181019190915290565b90618132565b90618194565b604080518082018252600181527f0a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152909150616b9590829061810b565b15616bff57604080518082018252600181527f0a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616bfc905b8290618219565b90505b616c088161823f565b92505050614f78565b8215616c2a57848460405160200161504b92919061a1b5565b5050604080516020810190915260008152614f78565b509392505050565b6000808251602084016000f09392505050565b8160a0015115616c6a57505050565b6000616c778484846182a8565b90506000616c8482616879565b602081015181519192509060030b158015616d205750604080518082018252600781527f535543434553530000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616d2090604080518082018252600080825260209182015281518083019092528451825280850190820152616aae565b15616d2d57505050505050565b60408201515115616d4d57816040015160405160200161504b919061a25c565b8060405160200161504b919061a2ba565b60606000616d938360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600481527f2e736f6c0000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152909150616df8905b82906173c6565b15616e6757604080518082018252600481527f2e736f6c0000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152614f7890616e62908390618843565b61823f565b604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616ec9905b82906188cd565b600103616f9657604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616f2f90616bf5565b50604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152614f7890616e62905b8390618219565b604080518082018252600581527f2e6a736f6e00000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616ff590616df1565b1561712c57604080518082018252600181527f2f0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082018190528451808601909552925184528301529061705d908390618967565b9050600081600183516170709190619779565b8151811061708057617080619cd5565b60200260200101519050617123616e626170f66040518060400160405280600581526020017f2e6a736f6e00000000000000000000000000000000000000000000000000000081525060408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b60408051808201825260008082526020918201528151808301909252855182528086019082015290618843565b95945050505050565b8260405160200161504b919061a325565b50919050565b606060006171788360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600481527f2e736f6c00000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201529091506171da90616df1565b156171e857614f788161823f565b604080518082018252600181527f3a000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261724790616ec2565b6001036172b157604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152614f7890616e6290616f8f565b604080518082018252600581527f2e6a736f6e0000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261731090616df1565b1561712c57604080518082018252600181527f2f00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820181905284518086019095529251845283015290617378908390618967565b90506001815111156173b45780600282516173939190619779565b815181106173a3576173a3619cd5565b602002602001015192505050919050565b508260405160200161504b919061a325565b8051825160009111156173db57506000614dc3565b815183516020850151600092916173f191619766565b6173fb9190619779565b905082602001518103617412576001915050614dc3565b82516020840151819020912014905092915050565b6060600061743483618a0c565b600101905060008167ffffffffffffffff81111561745457617454619603565b6040519080825280601f01601f19166020018201604052801561747e576020820181803683370190505b5090508181016020015b600019017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a850494508461748857509392505050565b604081810151815180830183526000808252602091820181905283518085018552835181529282018383015283518085018552600a81527f554e4c4943454e5345440000000000000000000000000000000000000000000081840190815285518087018752838152840192909252845180860190955251845290830152606091617553905b8290618aee565b1561759357505060408051808201909152600481527f4e6f6e65000000000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600981527f556e6c6963656e73650000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526175f29061754c565b1561763257505060408051808201909152600981527f556e6c6963656e736500000000000000000000000000000000000000000000006020820152919050565b604080518082018252600381527f4d49540000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526176919061754c565b156176d157505060408051808201909152600381527f4d495400000000000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f47504c2d322e302d6f6e6c790000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526177309061754c565b806177955750604080518082018252601081527f47504c2d322e302d6f722d6c6174657200000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526177959061754c565b156177d557505060408051808201909152600981527f474e552047504c763200000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f47504c2d332e302d6f6e6c790000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526178349061754c565b806178995750604080518082018252601081527f47504c2d332e302d6f722d6c6174657200000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526178999061754c565b156178d957505060408051808201909152600981527f474e552047504c763300000000000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4c47504c2d322e312d6f6e6c7900000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526179389061754c565b8061799d5750604080518082018252601181527f4c47504c2d322e312d6f722d6c617465720000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261799d9061754c565b156179dd57505060408051808201909152600c81527f474e55204c47504c76322e3100000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4c47504c2d332e302d6f6e6c790000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617a3c9061754c565b80617aa15750604080518082018252601181527f4c47504c2d332e302d6f722d6c6174657200000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617aa19061754c565b15617ae157505060408051808201909152600a81527f474e55204c47504c7633000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f4253442d322d436c61757365000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617b409061754c565b15617b8057505060408051808201909152600c81527f4253442d322d436c6175736500000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f4253442d332d436c61757365000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617bdf9061754c565b15617c1f57505060408051808201909152600c81527f4253442d332d436c6175736500000000000000000000000000000000000000006020820152919050565b604080518082018252600781527f4d504c2d322e300000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617c7e9061754c565b15617cbe57505060408051808201909152600781527f4d504c2d322e30000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600781527f4f534c2d332e300000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617d1d9061754c565b15617d5d57505060408051808201909152600781527f4f534c2d332e30000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600a81527f4170616368652d322e300000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617dbc9061754c565b15617dfc57505060408051808201909152600a81527f4170616368652d322e30000000000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4147504c2d332e302d6f6e6c790000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617e5b9061754c565b80617ec05750604080518082018252601181527f4147504c2d332e302d6f722d6c6174657200000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617ec09061754c565b15617f0057505060408051808201909152600a81527f474e55204147504c7633000000000000000000000000000000000000000000006020820152919050565b604080518082018252600881527f4255534c2d312e3100000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617f5f9061754c565b15617f9f57505060408051808201909152600781527f42534c20312e31000000000000000000000000000000000000000000000000006020820152919050565b6040808401518451915161504b929060200161a403565b60608060005b84518110156180415781858281518110617fd857617fd8619cd5565b6020026020010151604051602001617ff19291906198bc565b6040516020818303038152906040529150600185516180109190619779565b81146180395781604051602001618027919061a56c565b60405160208183030381529060405291505b600101617fbc565b5060408051600380825260808201909252600091816020015b606081526020019060019003908161805a579050509050838160008151811061808557618085619cd5565b60200260200101819052506040518060400160405280600281526020017f2d63000000000000000000000000000000000000000000000000000000000000815250816001815181106180d9576180d9619cd5565b602002602001018190525081816002815181106180f8576180f8619cd5565b6020908102919091010152949350505050565b60208083015183518351928401516000936181299291849190618b02565b14159392505050565b604080518082019091526000808252602082015260006181648460000151856020015185600001518660200151618c13565b90508360200151816181769190619779565b84518590618185908390619779565b90525060208401525090919050565b60408051808201909152600080825260208201528151835110156181b9575081614dc3565b60208083015190840151600191146181e05750815160208481015190840151829020919020145b8015618211578251845185906181f7908390619779565b905250825160208501805161820d908390619766565b9052505b509192915050565b6040805180820190915260008082526020820152618238838383618d33565b5092915050565b60606000826000015167ffffffffffffffff81111561826057618260619603565b6040519080825280601f01601f19166020018201604052801561828a576020820181803683370190505b50905060006020820190506182388185602001518660000151618dde565b606060006182b4615271565b6040805160ff808252612000820190925291925060009190816020015b60608152602001906001900390816182d157905050905060006040518060400160405280600381526020017f6e7078000000000000000000000000000000000000000000000000000000000081525082828061832c90619e42565b935060ff168151811061834157618341619cd5565b60200260200101819052506040518060400160405280600781526020017f5e312e33322e3300000000000000000000000000000000000000000000000000815250604051602001618392919061a5ad565b6040516020818303038152906040528282806183ad90619e42565b935060ff16815181106183c2576183c2619cd5565b60200260200101819052506040518060400160405280600881526020017f76616c696461746500000000000000000000000000000000000000000000000081525082828061840f90619e42565b935060ff168151811061842457618424619cd5565b6020026020010181905250826040516020016184409190619d70565b60405160208183030381529060405282828061845b90619e42565b935060ff168151811061847057618470619cd5565b60200260200101819052506040518060400160405280600a81526020017f2d2d636f6e7472616374000000000000000000000000000000000000000000008152508282806184bd90619e42565b935060ff16815181106184d2576184d2619cd5565b60200260200101819052506184e78784618e58565b82826184f281619e42565b935060ff168151811061850757618507619cd5565b6020908102919091010152855151156185b35760408051808201909152600b81527f2d2d7265666572656e63650000000000000000000000000000000000000000006020820152828261855981619e42565b935060ff168151811061856e5761856e619cd5565b6020026020010181905250618587866000015184618e58565b828261859281619e42565b935060ff16815181106185a7576185a7619cd5565b60200260200101819052505b8560800151156186215760408051808201909152601881527f2d2d756e73616665536b697053746f72616765436865636b0000000000000000602082015282826185fc81619e42565b935060ff168151811061861157618611619cd5565b6020026020010181905250618687565b84156186875760408051808201909152601281527f2d2d726571756972655265666572656e636500000000000000000000000000006020820152828261866681619e42565b935060ff168151811061867b5761867b619cd5565b60200260200101819052505b604086015151156187235760408051808201909152600d81527f2d2d756e73616665416c6c6f7700000000000000000000000000000000000000602082015282826186d181619e42565b935060ff16815181106186e6576186e6619cd5565b6020026020010181905250856040015182828061870290619e42565b935060ff168151811061871757618717619cd5565b60200260200101819052505b85606001511561878d5760408051808201909152601481527f2d2d756e73616665416c6c6f7752656e616d65730000000000000000000000006020820152828261876c81619e42565b935060ff168151811061878157618781619cd5565b60200260200101819052505b60008160ff1667ffffffffffffffff8111156187ab576187ab619603565b6040519080825280602002602001820160405280156187de57816020015b60608152602001906001900390816187c95790505b50905060005b8260ff168160ff16101561883757838160ff168151811061880757618807619cd5565b6020026020010151828260ff168151811061882457618824619cd5565b60209081029190910101526001016187e4565b50979650505050505050565b6040805180820190915260008082526020820152815183511015618868575081614dc3565b8151835160208501516000929161887e91619766565b6188889190619779565b602084015190915060019082146188a9575082516020840151819020908220145b80156188c4578351855186906188c0908390619779565b9052505b50929392505050565b60008082600001516188f18560000151866020015186600001518760200151618c13565b6188fb9190619766565b90505b8351602085015161890f9190619766565b8111618238578161891f8161a5f2565b925050826000015161895685602001518361893a9190619779565b86516189469190619779565b8386600001518760200151618c13565b6189609190619766565b90506188fe565b6060600061897584846188cd565b618980906001619766565b67ffffffffffffffff81111561899857618998619603565b6040519080825280602002602001820160405280156189cb57816020015b60608152602001906001900390816189b65790505b50905060005b8151811015616c40576189e7616e628686618219565b8282815181106189f9576189f9619cd5565b60209081029190910101526001016189d1565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310618a55577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310618a81576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc100008310618a9f57662386f26fc10000830492506010015b6305f5e1008310618ab7576305f5e100830492506008015b6127108310618acb57612710830492506004015b60648310618add576064830492506002015b600a8310614dc35760010192915050565b6000618afa8383618e98565b159392505050565b600080858411618c095760208411618bb55760008415618b4d576001618b29866020619779565b618b3490600861a60c565b618b3f90600261a70a565b618b499190619779565b1990505b8351811685618b5c8989619766565b618b669190619779565b805190935082165b818114618ba057878411618b885787945050505050616871565b83618b928161a716565b945050828451169050618b6e565b618baa8785619766565b945050505050616871565b838320618bc28588619779565b618bcc9087619766565b91505b858210618c0757848220808203618bf457618bea8684619766565b9350505050616871565b618bff600184619779565b925050618bcf565b505b5092949350505050565b60008381868511618d1e5760208511618ccd5760008515618c5f576001618c3b876020619779565b618c4690600861a60c565b618c5190600261a70a565b618c5b9190619779565b1990505b84518116600087618c708b8b619766565b618c7a9190619779565b855190915083165b828114618cbf57818610618ca757618c9a8b8b619766565b9650505050505050616871565b85618cb18161a5f2565b965050838651169050618c82565b859650505050505050616871565b508383206000905b618cdf8689619779565b8211618d1c57858320808203618cfb5783945050505050616871565b618d06600185619766565b9350508180618d149061a5f2565b925050618cd5565b505b618d288787619766565b979650505050505050565b60408051808201909152600080825260208201526000618d658560000151866020015186600001518760200151618c13565b602080870180519186019190915251909150618d819082619779565b835284516020860151618d949190619766565b8103618da35760008552618dd5565b83518351618db19190619766565b85518690618dc0908390619779565b9052508351618dcf9082619766565b60208601525b50909392505050565b60208110618e165781518352618df5602084619766565b9250618e02602083619766565b9150618e0f602082619779565b9050618dde565b6000198115618e45576001618e2c836020619779565b618e389061010061a70a565b618e429190619779565b90505b9151835183169219169190911790915250565b60606000618e668484615344565b8051602080830151604051939450618e809390910161a72d565b60405160208183030381529060405291505092915050565b8151815160009190811115618eab575081515b6020808501519084015160005b83811015618f645782518251808214618f34576000196020871015618f1357600184618ee5896020619779565b618eef9190619766565b618efa90600861a60c565b618f0590600261a70a565b618f0f9190619779565b1990505b8181168382168181039114618f31579750614dc39650505050505050565b50505b618f3f602086619766565b9450618f4c602085619766565b93505050602081618f5d9190619766565b9050618eb8565b50845186516159f2919061a785565b610b678061a7a683390190565b61106f8061b30d83390190565b611bb98061c37c83390190565b6040518060e00160405280606081526020016060815260200160608152602001600015158152602001600015158152602001600015158152602001618fdd618fe2565b905290565b60405180610100016040528060001515815260200160001515815260200160608152602001600080191681526020016060815260200160608152602001600015158152602001618fdd6040518060800160405280600081526020016000815260200160008152602001600081525090565b602080825282518282018190526000918401906040840190835b818110156190945783516001600160a01b031683526020938401939092019160010161906d565b509095945050505050565b60005b838110156190ba5781810151838201526020016190a2565b50506000910152565b600081518084526190db81602086016020860161909f565b601f01601f19169290920160200192915050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b828110156191eb577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452815180516001600160a01b03168652602090810151604082880181905281519088018190529101906060600582901b88018101919088019060005b818110156191d1577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa08a85030183526191bb8486516190c3565b6020958601959094509290920191600101619181565b509197505050602094850194929092019150600101619117565b50929695505050505050565b600081518084526020840193506020830160005b8281101561924b5781517fffffffff000000000000000000000000000000000000000000000000000000001686526020958601959091019060010161920b565b5093949350505050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b828110156191eb577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc087860301845281518051604087526192c160408801826190c3565b90506020820151915086810360208801526192dc81836191f7565b96505050602093840193919091019060010161927d565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b828110156191eb577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08786030184526193558583516190c3565b9450602093840193919091019060010161931b565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b828110156191eb577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc087860301845281516001600160a01b03815116865260208101519050604060208701526193eb60408701826191f7565b9550506020938401939190910190600101619392565b60006020828403121561941357600080fd5b81518015158114614f7857600080fd5b80516001600160a01b038116811461943a57600080fd5b919050565b60006020828403121561945157600080fd5b614f7882619423565b610100815260056101008201527f544f4b454e000000000000000000000000000000000000000000000000000000610120820152610140602082015260036101408201527f544b4e000000000000000000000000000000000000000000000000000000000061016082015260006101808201905060ff8816604083015286606083015260038610619514577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b8560808301528460a083015261953560c08301856001600160a01b03169052565b6001600160a01b03831660e0830152979650505050505050565b60006020828403121561956157600080fd5b5051919050565b600181811c9082168061957c57607f821691505b60208210810361713d577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600080604083850312156195c857600080fd5b6195d183619423565b6020939093015192949293505050565b6040815260006195f460408301856190c3565b90508260208301529392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040516060810167ffffffffffffffff8111828210171561965557619655619603565b60405290565b60008067ffffffffffffffff84111561967657619676619603565b50604051601f19601f85018116603f0116810181811067ffffffffffffffff821117156196a5576196a5619603565b6040528381529050808284018510156196bd57600080fd5b616c4084602083018561909f565b6000602082840312156196dd57600080fd5b815167ffffffffffffffff8111156196f457600080fd5b8201601f8101841361970557600080fd5b614dbf8482516020840161965b565b60006020828403121561972657600080fd5b815160ff81168114614f7857600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b80820180821115614dc357614dc3619737565b81810381811115614dc357614dc3619737565b60408152600061979f60408301856190c3565b8281036020840152614f7481856190c3565b6001600160a01b038316815260406020820152600061687160408301846190c3565b7f4661696c656420746f206465706c6f7920636f6e74726163742000000000000081526000835161980b81601a85016020880161909f565b7f3a20000000000000000000000000000000000000000000000000000000000000601a91840191820152835161984881601c84016020880161909f565b01601c01949350505050565b602081526000614f7860208301846190c3565b600082601f83011261987857600080fd5b614f788383516020850161965b565b60006020828403121561989957600080fd5b815167ffffffffffffffff8111156198b057600080fd5b614dbf84828501619867565b600083516198ce81846020880161909f565b8351908301906198e281836020880161909f565b01949350505050565b7f4661696c656420746f206465706c6f7920636f6e74726163742000000000000081526000835161992381601a85016020880161909f565b7f207573696e6720636f6e7374727563746f722064617461202200000000000000601a91840191820152835161996081603384016020880161909f565b7f220000000000000000000000000000000000000000000000000000000000000060339290910191820152603401949350505050565b60408152600b60408201527f464f554e4452595f4f55540000000000000000000000000000000000000000006060820152608060208201526000614f7860808301846190c3565b600085516199ef818460208a0161909f565b7f2f000000000000000000000000000000000000000000000000000000000000009083019081528551619a29816001840160208a0161909f565b7f2f00000000000000000000000000000000000000000000000000000000000000600192909101918201528451619a6781600284016020890161909f565b6001818301019150507f2f0000000000000000000000000000000000000000000000000000000000000060018201528351619aa981600284016020880161909f565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600292909101918201526007019695505050505050565b604081526000619af460408301846190c3565b8281036020840152600481527f2e6173740000000000000000000000000000000000000000000000000000000060208201526040810191505092915050565b7f436f756c64206e6f742066696e642041535420696e2061727469666163742000815260008251619b6b81601f85016020870161909f565b7f2e205365742060617374203d20747275656020696e20666f756e6472792e746f601f9390910192830152507f6d6c000000000000000000000000000000000000000000000000000000000000603f820152604101919050565b604081526000619bd860408301846190c3565b8281036020840152601181527f2e6173742e6162736f6c7574655061746800000000000000000000000000000060208201526040810191505092915050565b604081526000619c2a60408301846190c3565b8281036020840152600c81527f2e6173742e6c6963656e7365000000000000000000000000000000000000000060208201526040810191505092915050565b7f2e6d657461646174612e736f75726365732e5b27000000000000000000000000815260008251619ca181601485016020870161909f565b7f275d2e6b656363616b32353600000000000000000000000000000000000000006014939091019283015250602001919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f2200000000000000000000000000000000000000000000000000000000000000815260008251619d3c81600185016020870161909f565b7f22000000000000000000000000000000000000000000000000000000000000006001939091019283015250600201919050565b60008251619d8281846020870161909f565b7f2f6275696c642d696e666f000000000000000000000000000000000000000000920191825250600b01919050565b7f436f756c64206e6f742066696e64206275696c642d696e666f2066696c65207781527f697468206d61746368696e6720736f7572636520636f6465206861736820666f60208201527f7220636f6e747261637420000000000000000000000000000000000000000000604082015260008251619e3581604b85016020870161909f565b91909101604b0192915050565b600060ff821660ff8103619e5857619e58619737565b60010192915050565b7f406f70656e7a657070656c696e2f646566656e6465722d6465706c6f792d636c81527f69656e742d636c69400000000000000000000000000000000000000000000000602082015260008251619ebf81602985016020870161909f565b9190910160290192915050565b60408152601660408201527f4f50454e5a455050454c494e5f424153485f50415448000000000000000000006060820152608060208201526000614f7860808301846190c3565b600060208284031215619f2557600080fd5b815167ffffffffffffffff811115619f3c57600080fd5b820160608185031215619f4e57600080fd5b619f56619632565b81518060030b8114619f6757600080fd5b8152602082015167ffffffffffffffff811115619f8357600080fd5b619f8f86828501619867565b602083015250604082015167ffffffffffffffff811115619faf57600080fd5b619fbb86828501619867565b604083015250949350505050565b7f4661696c656420746f2072756e206261736820636f6d6d616e6420776974682081527f220000000000000000000000000000000000000000000000000000000000000060208201526000825161a02781602185016020870161909f565b7f222e20496620796f7520617265207573696e672057696e646f77732c2073657460219390910192830152507f20746865204f50454e5a455050454c494e5f424153485f5041544820656e766960418201527f726f6e6d656e74207661726961626c6520746f207468652066756c6c7920717560618201527f616c69666965642070617468206f66207468652062617368206578656375746160818201527f626c652e20466f72206578616d706c652c20696620796f75206172652075736960a18201527f6e672047697420666f722057696e646f77732c206164642074686520666f6c6c60c18201527f6f77696e67206c696e6520696e20746865202e656e762066696c65206f66207960e18201527f6f75722070726f6a65637420287573696e6720666f727761726420736c6173686101018201527f6573293a0a4f50454e5a455050454c494e5f424153485f504154483d22433a2f6101218201527f50726f6772616d2046696c65732f4769742f62696e2f6261736822000000000061014182015261015c01919050565b7f4661696c656420746f2066696e64206c696e652077697468207072656669782081527f270000000000000000000000000000000000000000000000000000000000000060208201526000835161a21381602185016020880161909f565b7f2720696e206f75747075743a2000000000000000000000000000000000000000602191840191820152835161a25081602e84016020880161909f565b01602e01949350505050565b7f4661696c656420746f2072756e2075706772616465207361666574792076616c81527f69646174696f6e3a200000000000000000000000000000000000000000000000602082015260008251619ebf81602985016020870161909f565b7f55706772616465207361666574792076616c69646174696f6e206661696c656481527f3a0a00000000000000000000000000000000000000000000000000000000000060208201526000825161a31881602285016020870161909f565b9190910160220192915050565b7f436f6e7472616374206e616d652000000000000000000000000000000000000081526000825161a35d81600e85016020870161909f565b7f206d75737420626520696e2074686520666f726d6174204d79436f6e74726163600e9390910192830152507f742e736f6c3a4d79436f6e7472616374206f72204d79436f6e74726163742e73602e8201527f6f6c206f72206f75742f4d79436f6e74726163742e736f6c2f4d79436f6e7472604e8201527f6163742e6a736f6e000000000000000000000000000000000000000000000000606e820152607601919050565b7f53504458206c6963656e7365206964656e74696669657220000000000000000081526000835161a43b81601885016020880161909f565b7f20696e2000000000000000000000000000000000000000000000000000000000601891840191820152835161a47881601c84016020880161909f565b7f20646f6573206e6f74206c6f6f6b206c696b65206120737570706f7274656420601c92909101918201527f6c6963656e736520666f7220626c6f636b206578706c6f726572207665726966603c8201527f69636174696f6e2e205573652074686520606c6963656e73655479706560206f605c8201527f7074696f6e20746f20737065636966792061206c6963656e736520747970652c607c8201527f206f7220736574207468652060736b69704c6963656e73655479706560206f70609c8201527f74696f6e20746f2060747275656020746f20736b69702e00000000000000000060bc82015260d301949350505050565b6000825161a57e81846020870161909f565b7f2000000000000000000000000000000000000000000000000000000000000000920191825250600101919050565b7f406f70656e7a657070656c696e2f75706772616465732d636f7265400000000081526000825161a5e581601c85016020870161909f565b91909101601c0192915050565b6000600019820361a6055761a605619737565b5060010190565b8082028115828204841417614dc357614dc3619737565b6001815b600184111561a65e5780850481111561a6425761a642619737565b600184161561a65057908102905b60019390931c92800261a627565b935093915050565b60008261a67557506001614dc3565b8161a68257506000614dc3565b816001811461a698576002811461a6a25761a6be565b6001915050614dc3565b60ff84111561a6b35761a6b3619737565b50506001821b614dc3565b5060208310610133831016604e8410600b841016171561a6e1575081810a614dc3565b61a6ee600019848461a623565b806000190482111561a7025761a702619737565b029392505050565b6000614f78838361a666565b60008161a7255761a725619737565b506000190190565b6000835161a73f81846020880161909f565b7f3a00000000000000000000000000000000000000000000000000000000000000908301908152835161a77981600184016020880161909f565b01600101949350505050565b81810360008312801583831316838312821617156182385761823861973756fe60c0604052600d60809081526c2bb930b83832b21022ba3432b960991b60a05260009061002c9082610114565b506040805180820190915260048152630ae8aa8960e31b60208201526001906100559082610114565b506002805460ff1916601217905534801561006f57600080fd5b506101d2565b634e487b7160e01b600052604160045260246000fd5b600181811c9082168061009f57607f821691505b6020821081036100bf57634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111561010f57806000526020600020601f840160051c810160208510156100ec5750805b601f840160051c820191505b8181101561010c57600081556001016100f8565b50505b505050565b81516001600160401b0381111561012d5761012d610075565b6101418161013b845461008b565b846100c5565b6020601f821160018114610175576000831561015d5750848201515b600019600385901b1c1916600184901b17845561010c565b600084815260208120601f198516915b828110156101a55787850151825560209485019460019092019101610185565b50848210156101c35786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b610986806101e16000396000f3fe6080604052600436106100c05760003560e01c8063313ce56711610074578063a9059cbb1161004e578063a9059cbb146101fa578063d0e30db01461021a578063dd62ed3e1461022257600080fd5b8063313ce5671461018c57806370a08231146101b857806395d89b41146101e557600080fd5b806318160ddd116100a557806318160ddd1461012f57806323b872dd1461014c5780632e1a7d4d1461016c57600080fd5b806306fdde03146100d4578063095ea7b3146100ff57600080fd5b366100cf576100cd61025a565b005b600080fd5b3480156100e057600080fd5b506100e96102b5565b6040516100f69190610745565b60405180910390f35b34801561010b57600080fd5b5061011f61011a3660046107da565b610343565b60405190151581526020016100f6565b34801561013b57600080fd5b50475b6040519081526020016100f6565b34801561015857600080fd5b5061011f610167366004610804565b6103bd565b34801561017857600080fd5b506100cd610187366004610841565b610647565b34801561019857600080fd5b506002546101a69060ff1681565b60405160ff90911681526020016100f6565b3480156101c457600080fd5b5061013e6101d336600461085a565b60036020526000908152604090205481565b3480156101f157600080fd5b506100e9610724565b34801561020657600080fd5b5061011f6102153660046107da565b610731565b6100cd61025a565b34801561022e57600080fd5b5061013e61023d366004610875565b600460209081526000928352604080842090915290825290205481565b33600090815260036020526040812080543492906102799084906108d7565b909155505060405134815233907fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c9060200160405180910390a2565b600080546102c2906108ea565b80601f01602080910402602001604051908101604052809291908181526020018280546102ee906108ea565b801561033b5780601f106103105761010080835404028352916020019161033b565b820191906000526020600020905b81548152906001019060200180831161031e57829003601f168201915b505050505081565b33600081815260046020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925906103ab9086815260200190565b60405180910390a35060015b92915050565b73ffffffffffffffffffffffffffffffffffffffff831660009081526003602052604081205482111561042b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600060248201526044015b60405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff841633148015906104a1575073ffffffffffffffffffffffffffffffffffffffff841660009081526004602090815260408083203384529091529020547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff14155b156105605773ffffffffffffffffffffffffffffffffffffffff8416600090815260046020908152604080832033845290915290205482111561051a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526020600482015260006024820152604401610422565b73ffffffffffffffffffffffffffffffffffffffff841660009081526004602090815260408083203384529091528120805484929061055a90849061093d565b90915550505b73ffffffffffffffffffffffffffffffffffffffff84166000908152600360205260408120805484929061059590849061093d565b909155505073ffffffffffffffffffffffffffffffffffffffff8316600090815260036020526040812080548492906105cf9084906108d7565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161063591815260200190565b60405180910390a35060019392505050565b3360009081526003602052604090205481111561069a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526020600482015260006024820152604401610422565b33600090815260036020526040812080548392906106b990849061093d565b9091555050604051339082156108fc029083906000818181858888f193505050501580156106eb573d6000803e3d6000fd5b5060405181815233907f7fcf532c15f0a6db0bd6d0e038bea71d30d808c7d98cb3bf7268a95bf5081b659060200160405180910390a250565b600180546102c2906108ea565b600061073e3384846103bd565b9392505050565b602081526000825180602084015260005b818110156107735760208186018101516040868401015201610756565b5060006040828501015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011684010191505092915050565b803573ffffffffffffffffffffffffffffffffffffffff811681146107d557600080fd5b919050565b600080604083850312156107ed57600080fd5b6107f6836107b1565b946020939093013593505050565b60008060006060848603121561081957600080fd5b610822846107b1565b9250610830602085016107b1565b929592945050506040919091013590565b60006020828403121561085357600080fd5b5035919050565b60006020828403121561086c57600080fd5b61073e826107b1565b6000806040838503121561088857600080fd5b610891836107b1565b915061089f602084016107b1565b90509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b808201808211156103b7576103b76108a8565b600181811c908216806108fe57607f821691505b602082108103610937577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b818103818111156103b7576103b76108a856fea264697066735822122008d7fc4e09519c5dd9f356b03596f6829a151d0bc7682533f9ceab4e459f5ee264736f6c634300081a003360c060405234801561001057600080fd5b5060405161106f38038061106f83398101604081905261002f916100db565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461006357604051632b2add3d60e01b815260040160405180910390fd5b600380546001600160a01b0319166001600160a01b0385811691909117909155828116608052811660a0526040517f80699e81136d69cb8367ad52a994e25c722a86da654b561d0c14b61a777e7ac590600090a150505061011e565b80516001600160a01b03811681146100d657600080fd5b919050565b6000806000606084860312156100f057600080fd5b6100f9846100bf565b9250610107602085016100bf565b9150610115604085016100bf565b90509250925092565b60805160a051610f2561014a60003960006101e50152600081816102b9015261045b0152610f256000f3fe608060405234801561001057600080fd5b50600436106100f55760003560e01c806397770dff11610097578063c63585cc11610066578063c63585cc14610273578063d7fd7afb14610286578063d936a012146102b4578063ee2815ba146102db57600080fd5b806397770dff1461021a578063a7cb05071461022d578063c39aca3714610240578063c62178ac1461025357600080fd5b8063513a9c05116100d3578063513a9c051461018a578063569541b9146101c0578063842da36d146101e057806391dd645f1461020757600080fd5b80630be15547146100fa5780631f0e251b1461015a5780633ce4a5bc1461016f575b600080fd5b610130610108366004610bd1565b60016020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b61016d610168366004610c13565b6102ee565b005b61013073735b14bb79463307aacbed86daf3322b1e6226ab81565b610130610198366004610bd1565b60026020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b6003546101309073ffffffffffffffffffffffffffffffffffffffff1681565b6101307f000000000000000000000000000000000000000000000000000000000000000081565b61016d610215366004610c35565b610402565b61016d610228366004610c13565b610526565b61016d61023b366004610c61565b610633565b61016d61024e366004610c83565b6106ce565b6004546101309073ffffffffffffffffffffffffffffffffffffffff1681565b610130610281366004610d53565b6108cd565b6102a6610294366004610bd1565b60006020819052908152604090205481565b604051908152602001610151565b6101307f000000000000000000000000000000000000000000000000000000000000000081565b61016d6102e9366004610c35565b610a02565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461033b576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116610388576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600480547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527f3ade88e3922d64780e1bf4460d364c2970b69da813f9c0c07a1c187b5647636c906020015b60405180910390a150565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461044f576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600354600090610497907f00000000000000000000000000000000000000000000000000000000000000009073ffffffffffffffffffffffffffffffffffffffff16846108cd565b60008481526002602090815260409182902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff85169081179091558251878152918201529192507f0ecec485166da6139b13bb7e033e9446e2d35348e80ebf1180d4afe2dba1704e910160405180910390a1505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610573576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff81166105c0576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527fdba79d534382d1a8ae108e4c8ecb27c6ae42ab8b91d44eedf88bd329f3868d5e906020016103f7565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610680576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000828152602081815260409182902083905581518481529081018390527f49f492222906ac486c3c1401fa545626df1f0c0e5a77a05597ea2ed66af9850d91015b60405180910390a15050565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461071b576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff831673735b14bb79463307aacbed86daf3322b1e6226ab1480610768575073ffffffffffffffffffffffffffffffffffffffff831630145b1561079f576040517f82d5d76a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f47e7ef2400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152602482018690528616906347e7ef24906044016020604051808303816000875af1158015610814573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108389190610d96565b506040517fde43156e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84169063de43156e906108939089908990899088908890600401610e01565b600060405180830381600087803b1580156108ad57600080fd5b505af11580156108c1573d6000803e3d6000fd5b50505050505050505050565b60008060006108dc8585610ad3565b6040517fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606084811b8216602084015283901b16603482015291935091508690604801604051602081830303815290604052805190602001206040516020016109c29291907fff00000000000000000000000000000000000000000000000000000000000000815260609290921b7fffffffffffffffffffffffffffffffffffffffff00000000000000000000000016600183015260158201527f96e8ac4277198ff8b6f785478aa9a39f403cb768dd02cbee326c3e7da348845f603582015260550190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291905280516020909101209695505050505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610a4f576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008281526001602090815260409182902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff85169081179091558251858152918201527fd1b36d30f6248e97c473b4d1348ca164a4ef6759022f54a58ec200326c39c45d91016106c2565b6000808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603610b3b576040517fcb1e7cfe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1610610b75578284610b78565b83835b909250905073ffffffffffffffffffffffffffffffffffffffff8216610bca576040517f78b507da00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b9250929050565b600060208284031215610be357600080fd5b5035919050565b803573ffffffffffffffffffffffffffffffffffffffff81168114610c0e57600080fd5b919050565b600060208284031215610c2557600080fd5b610c2e82610bea565b9392505050565b60008060408385031215610c4857600080fd5b82359150610c5860208401610bea565b90509250929050565b60008060408385031215610c7457600080fd5b50508035926020909101359150565b60008060008060008060a08789031215610c9c57600080fd5b863567ffffffffffffffff811115610cb357600080fd5b87016060818a031215610cc557600080fd5b9550610cd360208801610bea565b945060408701359350610ce860608801610bea565b9250608087013567ffffffffffffffff811115610d0457600080fd5b8701601f81018913610d1557600080fd5b803567ffffffffffffffff811115610d2c57600080fd5b896020828401011115610d3e57600080fd5b60208201935080925050509295509295509295565b600080600060608486031215610d6857600080fd5b610d7184610bea565b9250610d7f60208501610bea565b9150610d8d60408501610bea565b90509250925092565b600060208284031215610da857600080fd5b81518015158114610c2e57600080fd5b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b60808152600086357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1883603018112610e3957600080fd5b870160208101903567ffffffffffffffff811115610e5657600080fd5b803603821315610e6557600080fd5b60606080850152610e7a60e085018284610db8565b91505073ffffffffffffffffffffffffffffffffffffffff610e9e60208a01610bea565b1660a0840152604088013560c084015273ffffffffffffffffffffffffffffffffffffffff871660208401528560408401528281036060840152610ee3818587610db8565b9897505050505050505056fea2646970667358221220fea45cb058045b493e646c8b9505ea080ab95fd7ed4498b922d179cf1abec08e64736f6c634300081a003360e060405234801561001057600080fd5b50604051611bb9380380611bb983398101604081905261002f9161020e565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461006357604051632b2add3d60e01b815260040160405180910390fd5b6001600160a01b038216158061008057506001600160a01b038116155b1561009e5760405163d92e233d60e01b815260040160405180910390fd5b60066100aa8982610360565b5060076100b78882610360565b5060ff861660c05260808590528360028111156100d6576100d661041e565b60a08160028111156100ea576100ea61041e565b905250600192909255600080546001600160a01b039283166001600160a01b03199182161790915560088054929093169116179055506104349350505050565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261015157600080fd5b81516001600160401b0381111561016a5761016a61012a565b604051601f8201601f19908116603f011681016001600160401b03811182821017156101985761019861012a565b6040528181528382016020018510156101b057600080fd5b60005b828110156101cf576020818601810151838301820152016101b3565b506000918101602001919091529392505050565b8051600381106101f257600080fd5b919050565b80516001600160a01b03811681146101f257600080fd5b600080600080600080600080610100898b03121561022b57600080fd5b88516001600160401b0381111561024157600080fd5b61024d8b828c01610140565b60208b015190995090506001600160401b0381111561026b57600080fd5b6102778b828c01610140565b975050604089015160ff8116811461028e57600080fd5b60608a015190965094506102a460808a016101e3565b60a08a015190945092506102ba60c08a016101f7565b91506102c860e08a016101f7565b90509295985092959890939650565b600181811c908216806102eb57607f821691505b60208210810361030b57634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111561035b57806000526020600020601f840160051c810160208510156103385750805b601f840160051c820191505b818110156103585760008155600101610344565b50505b505050565b81516001600160401b038111156103795761037961012a565b61038d8161038784546102d7565b84610311565b6020601f8211600181146103c157600083156103a95750848201515b600019600385901b1c1916600184901b178455610358565b600084815260208120601f198516915b828110156103f157878501518255602094850194600190920191016103d1565b508482101561040f5786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b634e487b7160e01b600052602160045260246000fd5b60805160a05160c05161174861047160003960006102170152600061033a0152600081816102eb01528181610ad70152610bdd01526117486000f3fe608060405234801561001057600080fd5b50600436106101985760003560e01c80638b851b95116100e3578063ccc775991161008c578063eddeb12311610066578063eddeb12314610431578063f2441b3214610444578063f687d12a1461046457600080fd5b8063ccc77599146103a4578063d9eeebed146103b7578063dd62ed3e146103eb57600080fd5b8063a9059cbb116100bd578063a9059cbb14610369578063c70126261461037c578063c835d7cc1461038f57600080fd5b80638b851b951461030d57806395d89b411461032d578063a3413d031461033557600080fd5b80633ce4a5bc116101455780634d8943bb1161011f5780634d8943bb146102a757806370a08231146102b057806385e1f4d0146102e657600080fd5b80633ce4a5bc1461024157806342966c681461028157806347e7ef241461029457600080fd5b806318160ddd1161017657806318160ddd146101f557806323b872dd146101fd578063313ce5671461021057600080fd5b806306fdde031461019d578063091d2788146101bb578063095ea7b3146101d2575b600080fd5b6101a5610477565b6040516101b29190611327565b60405180910390f35b6101c460015481565b6040519081526020016101b2565b6101e56101e0366004611366565b610509565b60405190151581526020016101b2565b6005546101c4565b6101e561020b366004611392565b610520565b60405160ff7f00000000000000000000000000000000000000000000000000000000000000001681526020016101b2565b61025c73735b14bb79463307aacbed86daf3322b1e6226ab81565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101b2565b6101e561028f3660046113d3565b6105b7565b6101e56102a2366004611366565b6105cb565b6101c460025481565b6101c46102be3660046113ec565b73ffffffffffffffffffffffffffffffffffffffff1660009081526003602052604090205490565b6101c47f000000000000000000000000000000000000000000000000000000000000000081565b60085461025c9073ffffffffffffffffffffffffffffffffffffffff1681565b6101a561071f565b61035c7f000000000000000000000000000000000000000000000000000000000000000081565b6040516101b29190611409565b6101e5610377366004611366565b61072e565b6101e561038a366004611479565b61073b565b6103a261039d3660046113ec565b61088a565b005b6103a26103b23660046113ec565b61099e565b6103bf610aab565b6040805173ffffffffffffffffffffffffffffffffffffffff90931683526020830191909152016101b2565b6101c46103f9366004611571565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260046020908152604080832093909416825291909152205490565b6103a261043f3660046113d3565b610cc9565b60005461025c9073ffffffffffffffffffffffffffffffffffffffff1681565b6103a26104723660046113d3565b610d4b565b606060068054610486906115aa565b80601f01602080910402602001604051908101604052809291908181526020018280546104b2906115aa565b80156104ff5780601f106104d4576101008083540402835291602001916104ff565b820191906000526020600020905b8154815290600101906020018083116104e257829003601f168201915b5050505050905090565b6000610516338484610dcd565b5060015b92915050565b600061052d848484610ed6565b73ffffffffffffffffffffffffffffffffffffffff8416600090815260046020908152604080832033845290915290205482811015610598576040517f10bad14700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6105ac85336105a7868561162c565b610dcd565b506001949350505050565b60006105c33383611091565b506001919050565b60003373735b14bb79463307aacbed86daf3322b1e6226ab14801590610609575060005473ffffffffffffffffffffffffffffffffffffffff163314155b801561062d575060085473ffffffffffffffffffffffffffffffffffffffff163314155b15610664576040517fddb5de5e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61066e83836111d3565b6040517f735b14bb79463307aacbed86daf3322b1e6226ab000000000000000000000000602082015273ffffffffffffffffffffffffffffffffffffffff8416907f67fc7bdaed5b0ec550d8706b87d60568ab70c6b781263c70101d54cd1564aab390603401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529082905261070e91869061163f565b60405180910390a250600192915050565b606060078054610486906115aa565b6000610516338484610ed6565b6000806000610748610aab565b6040517f23b872dd00000000000000000000000000000000000000000000000000000000815233600482015273735b14bb79463307aacbed86daf3322b1e6226ab602482015260448101829052919350915073ffffffffffffffffffffffffffffffffffffffff8316906323b872dd906064016020604051808303816000875af11580156107da573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107fe9190611661565b610834576040517f0a7cd6d600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61083e3385611091565b60025460405133917f9ffbffc04a397460ee1dbe8c9503e098090567d6b7f4b3c02a8617d800b6d9559161087791899189918791611683565b60405180910390a2506001949350505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab146108d7576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116610924576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527fd55614e962c5fd6ece71614f6348d702468a997a394dd5e5c1677950226d97ae906020015b60405180910390a150565b3373735b14bb79463307aacbed86daf3322b1e6226ab146109eb576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116610a38576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600880547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527f88815d964e380677e86d817e7d65dea59cb7b4c3b5b7a0c8ec7ea4a74f90a38790602001610993565b600080546040517f0be155470000000000000000000000000000000000000000000000000000000081527f000000000000000000000000000000000000000000000000000000000000000060048201528291829173ffffffffffffffffffffffffffffffffffffffff90911690630be1554790602401602060405180830381865afa158015610b3e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b6291906116b2565b905073ffffffffffffffffffffffffffffffffffffffff8116610bb1576040517f78fff39600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080546040517fd7fd7afb0000000000000000000000000000000000000000000000000000000081527f0000000000000000000000000000000000000000000000000000000000000000600482015273ffffffffffffffffffffffffffffffffffffffff9091169063d7fd7afb90602401602060405180830381865afa158015610c40573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c6491906116cf565b905080600003610ca0576040517fe661aed000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060025460015483610cb391906116e8565b610cbd91906116ff565b92959294509192505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610d16576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60028190556040518181527fef13af88e424b5d15f49c77758542c1938b08b8b95b91ed0751f98ba99000d8f90602001610993565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610d98576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018190556040518181527fff5788270f43bfc1ca41c503606d2594aa3023a1a7547de403a3e2f146a4a80a90602001610993565b73ffffffffffffffffffffffffffffffffffffffff8316610e1a576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216610e67576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff83811660008181526004602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8316610f23576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216610f70576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff831660009081526003602052604090205481811015610fd0576040517ffe382aa700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610fda828261162c565b73ffffffffffffffffffffffffffffffffffffffff808616600090815260036020526040808220939093559085168152908120805484929061101d9084906116ff565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161108391815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff82166110de576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff82166000908152600360205260409020548181101561113e576040517ffe382aa700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611148828261162c565b73ffffffffffffffffffffffffffffffffffffffff84166000908152600360205260408120919091556005805484929061118390849061162c565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90602001610ec9565b73ffffffffffffffffffffffffffffffffffffffff8216611220576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b806005600082825461123291906116ff565b909155505073ffffffffffffffffffffffffffffffffffffffff82166000908152600360205260408120805483929061126c9084906116ff565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6000815180845260005b818110156112e9576020818501810151868301820152016112cd565b5060006020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b60208152600061133a60208301846112c3565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff8116811461136357600080fd5b50565b6000806040838503121561137957600080fd5b823561138481611341565b946020939093013593505050565b6000806000606084860312156113a757600080fd5b83356113b281611341565b925060208401356113c281611341565b929592945050506040919091013590565b6000602082840312156113e557600080fd5b5035919050565b6000602082840312156113fe57600080fd5b813561133a81611341565b6020810160038310611444577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000806040838503121561148c57600080fd5b823567ffffffffffffffff8111156114a357600080fd5b8301601f810185136114b457600080fd5b803567ffffffffffffffff8111156114ce576114ce61144a565b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8501160116810181811067ffffffffffffffff8211171561153a5761153a61144a565b60405281815282820160200187101561155257600080fd5b8160208401602083013760006020928201830152969401359450505050565b6000806040838503121561158457600080fd5b823561158f81611341565b9150602083013561159f81611341565b809150509250929050565b600181811c908216806115be57607f821691505b6020821081036115f7577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8181038181111561051a5761051a6115fd565b60408152600061165260408301856112c3565b90508260208301529392505050565b60006020828403121561167357600080fd5b8151801515811461133a57600080fd5b60808152600061169660808301876112c3565b6020830195909552506040810192909252606090910152919050565b6000602082840312156116c457600080fd5b815161133a81611341565b6000602082840312156116e157600080fd5b5051919050565b808202811582820484141761051a5761051a6115fd565b8082018082111561051a5761051a6115fd56fea26469706673582212204013e39523742118b3f2227e145ee7e48176ba6aebead33c596dca2acb59a74c64736f6c634300081a0033a2646970667358221220dff427f912b969cfd1b043c733f6768d29cf07b74c928801e2e0f2c552d0209964736f6c634300081a0033", + Bin: "0x6080604052600c8054600160ff199182168117909255601f80549091169091179055348015602c57600080fd5b5061df6a8061003c6000396000f3fe608060405234801561001057600080fd5b50600436106102f45760003560e01c80638ce7ef0511610191578063d27b0427116100e3578063dfbdf60011610097578063f1f87f4011610071578063f1f87f401461049d578063f2413096146104a5578063fa7626d4146104ad57600080fd5b8063dfbdf60014610485578063e13aba481461048d578063e20c9f711461049557600080fd5b8063d591221f116100c8578063d591221f1461046d578063d97136a214610475578063dcba486a1461047d57600080fd5b8063d27b04271461045d578063d509b16c1461046557600080fd5b8063b549984c11610145578063ba414fa61161011f578063ba414fa614610435578063d04cda981461044d578063d1fd32911461045557600080fd5b8063b549984c1461041d578063b5508aa914610425578063b79cad091461042d57600080fd5b8063a4aa6c7c11610176578063a4aa6c7c14610405578063ae9687dc1461040d578063b0464fdc1461041557600080fd5b80638ce7ef05146103e8578063916a17c6146103f057600080fd5b80634b6295091161024a57806366d9a9a0116101fe5780637f924c4e116101d85780637f924c4e146103c357806380326680146103cb57806385226c81146103d357600080fd5b806366d9a9a01461039e5780636ff45850146103b357806370557298146103bb57600080fd5b8063513999621161022f578063513999621461038657806358fdbbe01461038e5780635f01db7e1461039657600080fd5b80634b629509146103765780634cfc0aaa1461037e57600080fd5b806328438826116102ac5780633be9ec80116102865780633be9ec801461035e5780633e5e3c23146103665780633f7286f41461036e57600080fd5b806328438826146103395780632ade3880146103415780632f6254fc1461035657600080fd5b80630a9254e4116102dd5780630a9254e41461030b5780631142744e146103135780631ed7831c1461031b57600080fd5b80630393998b146102f95780630809dfef14610303575b600080fd5b6103016104ba565b005b6103016105bc565b61030161074a565b610301610e2c565b610323610f10565b6040516103309190619053565b60405180910390f35b610301610f72565b6103496111bd565b60405161033091906190ef565b6103016112ff565b610301611470565b61032361165d565b6103236116bd565b61030161171d565b6103016117f0565b6103016118c9565b610301611c46565b610301611d19565b6103a6611e86565b6040516103309190619255565b610301612008565b610301612218565b610301612468565b61030161268c565b6103db612760565b60405161033091906192f3565b610301612830565b6103f8612a30565b604051610330919061936a565b610301612b2b565b610301612ce0565b6103f8612f6d565b610301613068565b6103db61313a565b61030161320a565b61043d61359c565b6040519015158152602001610330565b610301613670565b6103016137b4565b6103016138f7565b610301613a3a565b6103016140ce565b6103016141b2565b610301614338565b6103016145bb565b6103016146fe565b6103236149a8565b610301614a08565b610301614b4e565b601f5461043d9060ff1681565b604051630618f58760e51b81527f2b2add3d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b15801561052657600080fd5b505af115801561053a573d6000803e3d6000fd5b5050601f546040517feddeb123000000000000000000000000000000000000000000000000000000008152600a60048201526101009091046001600160a01b0316925063eddeb12391506024015b600060405180830381600087803b1580156105a257600080fd5b505af11580156105b6573d6000803e3d6000fd5b50505050565b60225460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561061557600080fd5b505af1158015610629573d6000803e3d6000fd5b5050604051630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b15801561069957600080fd5b505af11580156106ad573d6000803e3d6000fd5b5050601f546040517f47e7ef2400000000000000000000000000000000000000000000000000000000815260006004820152620186a060248201526101009091046001600160a01b031692506347e7ef2491506044015b6020604051808303816000875af1158015610723573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107479190619401565b50565b602480547fffffffffffffffffffffffff000000000000000000000000000000000000000090811630179091556025805490911661123417905560405161079090618f73565b604051809103906000f0801580156107ac573d6000803e3d6000fd5b50602380547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03928316908117909155604080518082018252600f81527f476174657761795a45564d2e736f6c000000000000000000000000000000000060208201526024805492519081019390935292166044820152610890919060640160408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f485cc95500000000000000000000000000000000000000000000000000000000179052614daa565b602280546001600160a01b03929092167fffffffffffffffffffffffff00000000000000000000000000000000000000009283168117909155602180549092168117909155604080517f3ce4a5bc0000000000000000000000000000000000000000000000000000000081529051633ce4a5bc916004808201926020929091908290030181865afa158015610929573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061094d919061943f565b602680547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039290921691821790556040517f06447d560000000000000000000000000000000000000000000000000000000081526004810191909152737109709ecfa91a80626ff3989d68f67f5b1dd12d906306447d5690602401600060405180830381600087803b1580156109eb57600080fd5b505af11580156109ff573d6000803e3d6000fd5b505050506000806000604051610a1490618f80565b6001600160a01b03938416815291831660208301529091166040820152606001604051809103906000f080158015610a50573d6000803e3d6000fd5b50602080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03928316908117909155602154604051601293600193849360009391921690610aa690618f8d565b610ab59695949392919061945a565b604051809103906000f080158015610ad1573d6000803e3d6000fd5b50601f80547fffffffffffffffffffffff0000000000000000000000000000000000000000ff166101006001600160a01b03938416810291909117918290556020546040517fee2815ba00000000000000000000000000000000000000000000000000000000815260016004820152919092048316602482015291169063ee2815ba90604401600060405180830381600087803b158015610b7157600080fd5b505af1158015610b85573d6000803e3d6000fd5b50506020546040517fa7cb050700000000000000000000000000000000000000000000000000000000815260016004820181905260248201526001600160a01b03909116925063a7cb05079150604401600060405180830381600087803b158015610bef57600080fd5b505af1158015610c03573d6000803e3d6000fd5b50506026546040517fc88a5e6d0000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152633b9aca006024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c88a5e6d9150604401600060405180830381600087803b158015610c8357600080fd5b505af1158015610c97573d6000803e3d6000fd5b50506022546040517fc88a5e6d0000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152633b9aca006024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c88a5e6d9150604401600060405180830381600087803b158015610d1757600080fd5b505af1158015610d2b573d6000803e3d6000fd5b5050601f54602480546040517f47e7ef240000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620186a09281019290925261010090920490911692506347e7ef2491506044016020604051808303816000875af1158015610da9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dcd9190619401565b507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b03166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156105a257600080fd5b604051630618f58760e51b81527fddb5de5e000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b158015610e9857600080fd5b505af1158015610eac573d6000803e3d6000fd5b5050601f54602480546040517f47e7ef240000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620186a09281019290925261010090920490911692506347e7ef249150604401610704565b60606016805480602002602001604051908101604052809291908181526020018280548015610f6857602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610f4a575b5050505050905090565b601f546025546040516370a0823160e01b81526001600160a01b0391821660048201526000926101009004909116906370a0823190602401602060405180830381865afa158015610fc7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610feb919061954f565b9050610ff8600082614dc9565b601f54602480546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201526207a12092810183905291926101009004169063095ea7b3906044016020604051808303816000875af1158015611070573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110949190619401565b50604051630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b15801561110157600080fd5b505af1158015611115573d6000803e3d6000fd5b5050601f546025546040517f23b872dd000000000000000000000000000000000000000000000000000000008152600060048201526001600160a01b039182166024820152604481018690526101009092041692506323b872dd91506064015b6020604051808303816000875af1158015611194573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111b89190619401565b505050565b6060601e805480602002602001604051908101604052809291908181526020016000905b828210156112f657600084815260208082206040805180820182526002870290920180546001600160a01b03168352600181018054835181870281018701909452808452939591948681019491929084015b828210156112df57838290600052602060002001805461125290619568565b80601f016020809104026020016040519081016040528092919081815260200182805461127e90619568565b80156112cb5780601f106112a0576101008083540402835291602001916112cb565b820191906000526020600020905b8154815290600101906020018083116112ae57829003601f168201915b505050505081526020019060010190611233565b5050505081525050815260200190600101906111e1565b50505050905090565b60265460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561135857600080fd5b505af115801561136c573d6000803e3d6000fd5b5050601f546040517fc835d7cc00000000000000000000000000000000000000000000000000000000815261321160048201526101009091046001600160a01b0316925063c835d7cc9150602401600060405180830381600087803b1580156113d457600080fd5b505af11580156113e8573d6000803e3d6000fd5b5050505061146e601f60019054906101000a90046001600160a01b03166001600160a01b031663f2441b326040518163ffffffff1660e01b8152600401602060405180830381865afa158015611442573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611466919061943f565b613211614e51565b565b60265460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156114c957600080fd5b505af11580156114dd573d6000803e3d6000fd5b50506020546040517fa7cb050700000000000000000000000000000000000000000000000000000000815260016004820152600060248201526001600160a01b03909116925063a7cb05079150604401600060405180830381600087803b15801561154757600080fd5b505af115801561155b573d6000803e3d6000fd5b5050604051630618f58760e51b81527fe661aed0000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e091506024015b600060405180830381600087803b1580156115cc57600080fd5b505af11580156115e0573d6000803e3d6000fd5b50505050600080601f60019054906101000a90046001600160a01b03166001600160a01b031663d9eeebed6040518163ffffffff1660e01b81526004016040805180830381865afa158015611639573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105b691906195b5565b60606018805480602002602001604051908101604052809291908181526020018280548015610f68576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311610f4a575050505050905090565b60606017805480602002602001604051908101604052809291908181526020018280548015610f68576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311610f4a575050505050905090565b604051630618f58760e51b81527f2b2add3d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b15801561178957600080fd5b505af115801561179d573d6000803e3d6000fd5b5050601f546040517fccc7759900000000000000000000000000000000000000000000000000000000815261321160048201526101009091046001600160a01b0316925063ccc775999150602401610588565b604051630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b15801561185c57600080fd5b505af1158015611870573d6000803e3d6000fd5b5050601f546040517f095ea7b300000000000000000000000000000000000000000000000000000000815260006004820152600a60248201526101009091046001600160a01b0316925063095ea7b39150604401610704565b60265460405163ca669fa760e01b81526001600160a01b039091166004820152600a908190737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561192757600080fd5b505af115801561193b573d6000803e3d6000fd5b5050601f546040517ff687d12a000000000000000000000000000000000000000000000000000000008152600481018690526101009091046001600160a01b0316925063f687d12a9150602401600060405180830381600087803b1580156119a257600080fd5b505af11580156119b6573d6000803e3d6000fd5b505060265460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b158015611a1357600080fd5b505af1158015611a27573d6000803e3d6000fd5b5050601f546040517feddeb123000000000000000000000000000000000000000000000000000000008152600481018590526101009091046001600160a01b0316925063eddeb1239150602401600060405180830381600087803b158015611a8e57600080fd5b505af1158015611aa2573d6000803e3d6000fd5b5050601f546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526101009091046001600160a01b03166004820181905260006024830152925063095ea7b391506044016020604051808303816000875af1158015611b15573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b399190619401565b507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b031663f48448146040518163ffffffff1660e01b8152600401600060405180830381600087803b158015611b9857600080fd5b505af1158015611bac573d6000803e3d6000fd5b5050601f546025546040805160609290921b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000001660208301528051601481840301815260348301918290527fc7012626000000000000000000000000000000000000000000000000000000009091526001600160a01b0361010090930492909216935063c7012626925061117591906001906038016195e1565b604051630618f58760e51b81527f2b2add3d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b158015611cb257600080fd5b505af1158015611cc6573d6000803e3d6000fd5b5050601f546040517fc835d7cc00000000000000000000000000000000000000000000000000000000815261321160048201526101009091046001600160a01b0316925063c835d7cc9150602401610588565b60265460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015611d7257600080fd5b505af1158015611d86573d6000803e3d6000fd5b5050601f546040517ff687d12a000000000000000000000000000000000000000000000000000000008152600a60048201526101009091046001600160a01b0316925063f687d12a9150602401600060405180830381600087803b158015611ded57600080fd5b505af1158015611e01573d6000803e3d6000fd5b5050505061146e600a601f60019054906101000a90046001600160a01b03166001600160a01b031663091d27886040518163ffffffff1660e01b8152600401602060405180830381865afa158015611e5d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e81919061954f565b614dc9565b6060601b805480602002602001604051908101604052809291908181526020016000905b828210156112f65783829060005260206000209060020201604051806040016040529081600082018054611edd90619568565b80601f0160208091040260200160405190810160405280929190818152602001828054611f0990619568565b8015611f565780601f10611f2b57610100808354040283529160200191611f56565b820191906000526020600020905b815481529060010190602001808311611f3957829003601f168201915b5050505050815260200160018201805480602002602001604051908101604052809291908181526020018280548015611ff057602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019060040190602082600301049283019260010382029150808411611f9d5790505b50505050508152505081526020019060010190611eaa565b601f546025546040516370a0823160e01b81526001600160a01b0391821660048201526000926101009004909116906370a0823190602401602060405180830381865afa15801561205d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612081919061954f565b905061208e600082614dc9565b601f54602480546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201526207a12092810183905291926101009004169063095ea7b3906044016020604051808303816000875af1158015612106573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061212a9190619401565b50604051630618f58760e51b81527ffe382aa7000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b15801561219757600080fd5b505af11580156121ab573d6000803e3d6000fd5b5050601f54602480546025546040517f23b872dd0000000000000000000000000000000000000000000000000000000081526001600160a01b039283166004820152908216928101929092526044820186905261010090920490911692506323b872dd9150606401611175565b601f546025546040516370a0823160e01b81526001600160a01b0391821660048201526000926101009004909116906370a0823190602401602060405180830381865afa15801561226d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612291919061954f565b905061229e600082614dc9565b601f54602480546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015261c35092810183905291926101009004169063095ea7b3906044016020604051808303816000875af1158015612315573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123399190619401565b50601f54602480546025546040517f23b872dd0000000000000000000000000000000000000000000000000000000081526001600160a01b0392831660048201529082169281019290925260448201849052610100909204909116906323b872dd906064015b6020604051808303816000875af11580156123be573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123e29190619401565b50601f546025546040516370a0823160e01b81526001600160a01b0391821660048201526000926101009004909116906370a0823190602401602060405180830381865afa158015612438573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061245c919061954f565b90506111b88282614dc9565b6000601f60019054906101000a90046001600160a01b03166001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156124bd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124e1919061954f565b90506124f0620186a082614dc9565b60225460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561254957600080fd5b505af115801561255d573d6000803e3d6000fd5b5050601f54602480546040517f47e7ef240000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620186a09281019290925261010090920490911692506347e7ef2491506044016020604051808303816000875af11580156125db573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125ff9190619401565b506000601f60019054906101000a90046001600160a01b03166001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612655573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612679919061954f565b905061268862030d4082614dc9565b5050565b604051630618f58760e51b81527ffe382aa7000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b1580156126f857600080fd5b505af115801561270c573d6000803e3d6000fd5b5050601f546040517f42966c68000000000000000000000000000000000000000000000000000000008152620249f060048201526101009091046001600160a01b031692506342966c689150602401610704565b6060601a805480602002602001604051908101604052809291908181526020016000905b828210156112f65783829060005260206000200180546127a390619568565b80601f01602080910402602001604051908101604052809291908181526020018280546127cf90619568565b801561281c5780601f106127f15761010080835404028352916020019161281c565b820191906000526020600020905b8154815290600101906020018083116127ff57829003601f168201915b505050505081526020019060010190612784565b601f546025546040516370a0823160e01b81526001600160a01b0391821660048201526000926101009004909116906370a0823190602401602060405180830381865afa158015612885573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128a9919061954f565b90506128b6600082614dc9565b601f54602480546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201526207a12092810183905291926101009004169063095ea7b3906044016020604051808303816000875af115801561292e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129529190619401565b50604051630618f58760e51b81527ffe382aa7000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b1580156129bf57600080fd5b505af11580156129d3573d6000803e3d6000fd5b5050601f546025546040517fa9059cbb0000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201526024810186905261010090920416925063a9059cbb9150604401611175565b6060601d805480602002602001604051908101604052809291908181526020016000905b828210156112f65760008481526020908190206040805180820182526002860290920180546001600160a01b03168352600181018054835181870281018701909452808452939491938583019392830182828015612b1357602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019060040190602082600301049283019260010382029150808411612ac05790505b50505050508152505081526020019060010190612a54565b601f54602480546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201526207a12092810183905291926101009004169063095ea7b3906044016020604051808303816000875af1158015612ba3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612bc79190619401565b50604051630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b158015612c3457600080fd5b505af1158015612c48573d6000803e3d6000fd5b5050601f546040517fa9059cbb00000000000000000000000000000000000000000000000000000000815260006004820152602481018590526101009091046001600160a01b0316925063a9059cbb91506044015b6020604051808303816000875af1158015612cbc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126889190619401565b6000601f60019054906101000a90046001600160a01b03166001600160a01b03166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa158015612d35573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052612d5d91908101906196cb565b9050612d9e6040518060400160405280600581526020017f544f4b454e00000000000000000000000000000000000000000000000000000081525082614eb2565b6000601f60019054906101000a90046001600160a01b03166001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa158015612df3573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052612e1b91908101906196cb565b9050612e5c6040518060400160405280600381526020017f544b4e000000000000000000000000000000000000000000000000000000000081525082614eb2565b6000601f60019054906101000a90046001600160a01b03166001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015612eb1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ed59190619714565b9050612ee560128260ff16614dc9565b6000601f60019054906101000a90046001600160a01b03166001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612f3a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f5e919061954f565b90506105b6620186a082614dc9565b6060601c805480602002602001604051908101604052809291908181526020016000905b828210156112f65760008481526020908190206040805180820182526002860290920180546001600160a01b0316835260018101805483518187028101870190945280845293949193858301939283018282801561305057602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019060040190602082600301049283019260010382029150808411612ffd5790505b50505050508152505081526020019060010190612f91565b604051630618f58760e51b81527f2b2add3d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b1580156130d457600080fd5b505af11580156130e8573d6000803e3d6000fd5b5050601f546040517ff687d12a000000000000000000000000000000000000000000000000000000008152600a60048201526101009091046001600160a01b0316925063f687d12a9150602401610588565b60606019805480602002602001604051908101604052809291908181526020016000905b828210156112f657838290600052602060002001805461317d90619568565b80601f01602080910402602001604051908101604052809291908181526020018280546131a990619568565b80156131f65780601f106131cb576101008083540402835291602001916131f6565b820191906000526020600020905b8154815290600101906020018083116131d957829003601f168201915b50505050508152602001906001019061315e565b60265460405163ca669fa760e01b81526001600160a01b039091166004820152600a906305f5e10090737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561326c57600080fd5b505af1158015613280573d6000803e3d6000fd5b5050601f546040517ff687d12a000000000000000000000000000000000000000000000000000000008152600481018690526101009091046001600160a01b0316925063f687d12a9150602401600060405180830381600087803b1580156132e757600080fd5b505af11580156132fb573d6000803e3d6000fd5b505060265460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b15801561335857600080fd5b505af115801561336c573d6000803e3d6000fd5b5050601f546040517feddeb123000000000000000000000000000000000000000000000000000000008152600481018590526101009091046001600160a01b0316925063eddeb1239150602401600060405180830381600087803b1580156133d357600080fd5b505af11580156133e7573d6000803e3d6000fd5b5050601f546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526101009091046001600160a01b031660048201819052630bebc2006024830152925063095ea7b391506044016020604051808303816000875af115801561345d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134819190619401565b50604051630618f58760e51b81527ffe382aa7000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b1580156134ee57600080fd5b505af1158015613502573d6000803e3d6000fd5b5050601f546025546040805160609290921b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000001660208301528051601481840301815260348301918290527fc7012626000000000000000000000000000000000000000000000000000000009091526001600160a01b0361010090930492909216935063c7012626925061117591906064906038016195e1565b60085460009060ff16156135b4575060085460ff1690565b6040517f667f9d70000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d600482018190527f6661696c65640000000000000000000000000000000000000000000000000000602483015260009163667f9d7090604401602060405180830381865afa158015613645573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613669919061954f565b1415905090565b60265460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156136c957600080fd5b505af11580156136dd573d6000803e3d6000fd5b5050601f546040517feddeb123000000000000000000000000000000000000000000000000000000008152600a60048201526101009091046001600160a01b0316925063eddeb1239150602401600060405180830381600087803b15801561374457600080fd5b505af1158015613758573d6000803e3d6000fd5b5050505061146e600a601f60019054906101000a90046001600160a01b03166001600160a01b0316634d8943bb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611e5d573d6000803e3d6000fd5b60265460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561380d57600080fd5b505af1158015613821573d6000803e3d6000fd5b5050604051630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b15801561389157600080fd5b505af11580156138a5573d6000803e3d6000fd5b5050601f546040517fccc77599000000000000000000000000000000000000000000000000000000008152600060048201526101009091046001600160a01b0316925063ccc775999150602401610588565b60265460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561395057600080fd5b505af1158015613964573d6000803e3d6000fd5b5050604051630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b1580156139d457600080fd5b505af11580156139e8573d6000803e3d6000fd5b5050601f546040517fc835d7cc000000000000000000000000000000000000000000000000000000008152600060048201526101009091046001600160a01b0316925063c835d7cc9150602401610588565b60265460405163ca669fa760e01b81526001600160a01b039091166004820152600a908190737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015613a9857600080fd5b505af1158015613aac573d6000803e3d6000fd5b5050601f546040517ff687d12a000000000000000000000000000000000000000000000000000000008152600481018690526101009091046001600160a01b0316925063f687d12a9150602401600060405180830381600087803b158015613b1357600080fd5b505af1158015613b27573d6000803e3d6000fd5b505060265460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b158015613b8457600080fd5b505af1158015613b98573d6000803e3d6000fd5b5050601f546040517feddeb123000000000000000000000000000000000000000000000000000000008152600481018590526101009091046001600160a01b0316925063eddeb1239150602401600060405180830381600087803b158015613bff57600080fd5b505af1158015613c13573d6000803e3d6000fd5b5050601f54602480546040516370a0823160e01b81526001600160a01b039182166004820152600095506101009093041692506370a082319101602060405180830381865afa158015613c6a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613c8e919061954f565b9050613c9d620186a082614dc9565b6000601f60019054906101000a90046001600160a01b03166001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613cf2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613d16919061954f565b9050613d25620186a082614dc9565b601f546026546040516370a0823160e01b81526001600160a01b0391821660048201526000926101009004909116906370a0823190602401602060405180830381865afa158015613d7a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613d9e919061954f565b601f546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526101009091046001600160a01b03166004820181905261c350602483015291925063095ea7b3906044016020604051808303816000875af1158015613e10573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613e349190619401565b50601f546025546040805160609290921b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000001660208301528051601481840301815260348301918290527fc7012626000000000000000000000000000000000000000000000000000000009091526001600160a01b03610100909304929092169163c701262691613ecc919061c350906038016195e1565b6020604051808303816000875af1158015613eeb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613f0f9190619401565b50601f546026546040516370a0823160e01b81526001600160a01b0391821660048201526000926101009004909116906370a0823190602401602060405180830381865afa158015613f65573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613f89919061954f565b9050613fa985613f998885619766565b613fa39190619766565b82614dc9565b601f54602480546040516370a0823160e01b81526001600160a01b0391821660048201526000936101009004909116916370a082319101602060405180830381865afa158015613ffd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614021919061954f565b905061403d866140338961c350619779565b613fa39190619779565b6000601f60019054906101000a90046001600160a01b03166001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015614092573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906140b6919061954f565b90506140c461c35082614dc9565b5050505050505050565b601f546025546040516370a0823160e01b81526001600160a01b0391821660048201526000926101009004909116906370a0823190602401602060405180830381865afa158015614123573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614147919061954f565b9050614154600082614dc9565b601f546025546040517fa9059cbb0000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015261c350602482018190529261010090049091169063a9059cbb9060440161239f565b601f54602480546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201526207a12092810183905291926101009004169063095ea7b3906044016020604051808303816000875af115801561422a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061424e9190619401565b50604051630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b1580156142bb57600080fd5b505af11580156142cf573d6000803e3d6000fd5b5050601f54602480546040517f23b872dd0000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201526000928101929092526044820186905261010090920490911692506323b872dd9150606401612c9d565b60265460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561439157600080fd5b505af11580156143a5573d6000803e3d6000fd5b5050601f546040517ff687d12a000000000000000000000000000000000000000000000000000000008152600a6004820181905293508392506101009091046001600160a01b03169063f687d12a90602401600060405180830381600087803b15801561441157600080fd5b505af1158015614425573d6000803e3d6000fd5b505060265460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b15801561448257600080fd5b505af1158015614496573d6000803e3d6000fd5b5050601f546040517feddeb123000000000000000000000000000000000000000000000000000000008152600a60048201526101009091046001600160a01b0316925063eddeb1239150602401600060405180830381600087803b1580156144fd57600080fd5b505af1158015614511573d6000803e3d6000fd5b50505050600080601f60019054906101000a90046001600160a01b03166001600160a01b031663d9eeebed6040518163ffffffff1660e01b81526004016040805180830381865afa15801561456a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061458e91906195b5565b601f5491935091506145ae9061010090046001600160a01b031683614e51565b6105b6613fa38486619766565b60265460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561461457600080fd5b505af1158015614628573d6000803e3d6000fd5b5050601f546040517fccc7759900000000000000000000000000000000000000000000000000000000815261321160048201526101009091046001600160a01b0316925063ccc775999150602401600060405180830381600087803b15801561469057600080fd5b505af11580156146a4573d6000803e3d6000fd5b5050505061146e601f60019054906101000a90046001600160a01b03166001600160a01b0316638b851b956040518163ffffffff1660e01b8152600401602060405180830381865afa158015611442573d6000803e3d6000fd5b601f54602480546040516370a0823160e01b81526001600160a01b0391821660048201526000936101009004909116916370a082319101602060405180830381865afa158015614752573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614776919061954f565b9050614785620186a082614dc9565b6000601f60019054906101000a90046001600160a01b03166001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156147da573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906147fe919061954f565b905061480d620186a082614dc9565b601f546040517f42966c6800000000000000000000000000000000000000000000000000000000815261c35060048201526101009091046001600160a01b0316906342966c68906024016020604051808303816000875af1158015614876573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061489a9190619401565b50601f54602480546040516370a0823160e01b81526001600160a01b0391821660048201526000936101009004909116916370a082319101602060405180830381865afa1580156148ef573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614913919061954f565b905061492161c35082614dc9565b6000601f60019054906101000a90046001600160a01b03166001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015614976573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061499a919061954f565b90506105b661c35082614dc9565b60606015805480602002602001604051908101604052809291908181526020018280548015610f68576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311610f4a575050505050905090565b60265460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015614a6157600080fd5b505af1158015614a75573d6000803e3d6000fd5b50506020546040517fee2815ba00000000000000000000000000000000000000000000000000000000815260016004820152600060248201526001600160a01b03909116925063ee2815ba9150604401600060405180830381600087803b158015614adf57600080fd5b505af1158015614af3573d6000803e3d6000fd5b5050604051630618f58760e51b81527f78fff396000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e091506024016115b2565b601f546025546040516370a0823160e01b81526001600160a01b0391821660048201526000926101009004909116906370a0823190602401602060405180830381865afa158015614ba3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614bc7919061954f565b9050614bd4600082614dc9565b601f54602480546040517fdd62ed3e0000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201819052928101929092526000926101009004169063dd62ed3e90604401602060405180830381865afa158015614c4a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614c6e919061954f565b9050614c7b600082614dc9565b604051630618f58760e51b81527f10bad14700000000000000000000000000000000000000000000000000000000600482015261c35090737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b158015614ceb57600080fd5b505af1158015614cff573d6000803e3d6000fd5b5050601f54602480546025546040517f23b872dd0000000000000000000000000000000000000000000000000000000081526001600160a01b039283166004820152908216928101929092526044820186905261010090920490911692506323b872dd91506064016020604051808303816000875af1158015614d86573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105b69190619401565b6000614db4618f9a565b614dbf848483614f04565b9150505b92915050565b6040517f98296c540000000000000000000000000000000000000000000000000000000081526004810183905260248101829052737109709ecfa91a80626ff3989d68f67f5b1dd12d906398296c54906044015b60006040518083038186803b158015614e3557600080fd5b505afa158015614e49573d6000803e3d6000fd5b505050505050565b6040517f515361f60000000000000000000000000000000000000000000000000000000081526001600160a01b03808416600483015282166024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063515361f690604401614e1d565b6040517ff320d963000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063f320d96390614e1d908590859060040161978c565b600080614f118584614f7f565b9050614f746040518060400160405280601d81526020017f4552433139363750726f78792e736f6c3a4552433139363750726f78790000008152508286604051602001614f5f9291906197b1565b60405160208183030381529060405285614f8b565b9150505b9392505050565b6000614f788383614fb9565b60c08101515160009015614faf57614fa884848460c00151614fd4565b9050614f78565b614fa8848461517a565b6000614fc58383615265565b614f7883836020015184614f8b565b600080614fdf615271565b90506000614fed8683615344565b9050600061500482606001518360200151856157ea565b90506000615014838389896159fc565b9050600061502182616879565b602081015181519192509060030b156150945789826040015160405160200161504b9291906197d3565b60408051601f19818403018152908290527f08c379a000000000000000000000000000000000000000000000000000000000825261508b91600401619854565b60405180910390fd5b60006150d76040518060400160405280601581526020017f4465706c6f79656420746f20616464726573733a200000000000000000000000815250836001616a48565b6040517fc6ce059d000000000000000000000000000000000000000000000000000000008152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c6ce059d9061512a908490600401619854565b602060405180830381865afa158015615147573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061516b919061943f565b9b9a5050505050505050505050565b6040517f8d1cc9250000000000000000000000000000000000000000000000000000000081526000908190737109709ecfa91a80626ff3989d68f67f5b1dd12d90638d1cc925906151cf908790600401619854565b600060405180830381865afa1580156151ec573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526152149190810190619887565b90506000615242828560405160200161522e9291906198bc565b604051602081830303815290604052616c48565b90506001600160a01b038116614dbf57848460405160200161504b9291906198eb565b61268882826000616c5b565b604080518082018252600381527f6f75740000000000000000000000000000000000000000000000000000000000602082015290517fd145736c000000000000000000000000000000000000000000000000000000008152606091737109709ecfa91a80626ff3989d68f67f5b1dd12d91829063d145736c906152f8908490600401619996565b600060405180830381865afa158015615315573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261533d91908101906196cb565b9250505090565b6153766040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b6000737109709ecfa91a80626ff3989d68f67f5b1dd12d90506153c16040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b6153ca85616d5e565b602082015260006153da86617143565b90506000836001600160a01b031663d930a0e66040518163ffffffff1660e01b8152600401600060405180830381865afa15801561541c573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261544491908101906196cb565b8683856020015160405160200161545e94939291906199dd565b60408051601f19818403018152908290527f60f9bb1100000000000000000000000000000000000000000000000000000000825291506000906001600160a01b038616906360f9bb11906154b6908590600401619854565b600060405180830381865afa1580156154d3573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526154fb91908101906196cb565b6040517fdb4235f60000000000000000000000000000000000000000000000000000000081529091506001600160a01b0386169063db4235f690615543908490600401619ae1565b602060405180830381865afa158015615560573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906155849190619401565b615599578160405160200161504b9190619b33565b6040517f49c4fac80000000000000000000000000000000000000000000000000000000081526001600160a01b038616906349c4fac8906155de908490600401619bc5565b600060405180830381865afa1580156155fb573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261562391908101906196cb565b84526040517fdb4235f60000000000000000000000000000000000000000000000000000000081526001600160a01b0386169063db4235f69061566a908490600401619c17565b602060405180830381865afa158015615687573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906156ab9190619401565b15615740576040517f49c4fac80000000000000000000000000000000000000000000000000000000081526001600160a01b038616906349c4fac8906156f5908490600401619c17565b600060405180830381865afa158015615712573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261573a91908101906196cb565b60408501525b846001600160a01b03166349c4fac88286600001516040516020016157659190619c69565b6040516020818303038152906040526040518363ffffffff1660e01b815260040161579192919061978c565b600060405180830381865afa1580156157ae573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526157d691908101906196cb565b606085015250608083015250949350505050565b60408051600480825260a0820190925260609160009190816020015b60608152602001906001900390816158065790505090506040518060400160405280600481526020017f67726570000000000000000000000000000000000000000000000000000000008152508160008151811061586657615866619cd5565b60200260200101819052506040518060400160405280600381526020017f2d726c0000000000000000000000000000000000000000000000000000000000815250816001815181106158ba576158ba619cd5565b6020026020010181905250846040516020016158d69190619d04565b604051602081830303815290604052816002815181106158f8576158f8619cd5565b6020026020010181905250826040516020016159149190619d70565b6040516020818303038152906040528160038151811061593657615936619cd5565b6020026020010181905250600061594c82616879565b602080820151604080518082018252600581527f2e6a736f6e00000000000000000000000000000000000000000000000000000081850190815282518084018452600080825290860152825180840190935290518252928101929092529192506159dd90604080518082018252600080825260209182015281518083019092528451825280850190820152906173c6565b6159f2578560405160200161504b9190619db1565b9695505050505050565b60a0810151604080518082018252600080825260209182015281518083019092528251808352928101910152606090737109709ecfa91a80626ff3989d68f67f5b1dd12d9015615a4c565b511590565b615bc057826020015115615b08576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605860248201527f54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f742060448201527f62652075736564207768656e207468652060736b6970566572696679536f757260648201527f6365436f646560206f7074696f6e206973206074727565600000000000000000608482015260a40161508b565b8260c0015115615bc0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605360248201527f54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f742060448201527f62652075736564207768656e207468652060736b69704c6963656e736554797060648201527f6560206f7074696f6e2069732060747275656000000000000000000000000000608482015260a40161508b565b6040805160ff8082526120008201909252600091816020015b6060815260200190600190039081615bd957905050905060006040518060400160405280600381526020017f6e70780000000000000000000000000000000000000000000000000000000000815250828280615c3490619e42565b935060ff1681518110615c4957615c49619cd5565b60200260200101819052506040518060400160405280600d81526020017f302e302e312d616c7068612e3700000000000000000000000000000000000000815250604051602001615c9a9190619e61565b604051602081830303815290604052828280615cb590619e42565b935060ff1681518110615cca57615cca619cd5565b60200260200101819052506040518060400160405280600681526020017f6465706c6f790000000000000000000000000000000000000000000000000000815250828280615d1790619e42565b935060ff1681518110615d2c57615d2c619cd5565b60200260200101819052506040518060400160405280600e81526020017f2d2d636f6e74726163744e616d65000000000000000000000000000000000000815250828280615d7990619e42565b935060ff1681518110615d8e57615d8e619cd5565b60200260200101819052508760200151828280615daa90619e42565b935060ff1681518110615dbf57615dbf619cd5565b60200260200101819052506040518060400160405280600e81526020017f2d2d636f6e747261637450617468000000000000000000000000000000000000815250828280615e0c90619e42565b935060ff1681518110615e2157615e21619cd5565b602090810291909101015287518282615e3981619e42565b935060ff1681518110615e4e57615e4e619cd5565b60200260200101819052506040518060400160405280600981526020017f2d2d636861696e49640000000000000000000000000000000000000000000000815250828280615e9b90619e42565b935060ff1681518110615eb057615eb0619cd5565b6020026020010181905250615ec446617427565b8282615ecf81619e42565b935060ff1681518110615ee457615ee4619cd5565b60200260200101819052506040518060400160405280600f81526020017f2d2d6275696c64496e666f46696c650000000000000000000000000000000000815250828280615f3190619e42565b935060ff1681518110615f4657615f46619cd5565b602002602001018190525086828280615f5e90619e42565b935060ff1681518110615f7357615f73619cd5565b602090810291909101015285511561609a5760408051808201909152601581527f2d2d636f6e7374727563746f7242797465636f6465000000000000000000000060208201528282615fc481619e42565b935060ff1681518110615fd957615fd9619cd5565b60209081029190910101526040517f71aad10d0000000000000000000000000000000000000000000000000000000081526001600160a01b038416906371aad10d90616029908990600401619854565b600060405180830381865afa158015616046573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261606e91908101906196cb565b828261607981619e42565b935060ff168151811061608e5761608e619cd5565b60200260200101819052505b84602001511561616a5760408051808201909152601281527f2d2d766572696679536f75726365436f64650000000000000000000000000000602082015282826160e381619e42565b935060ff16815181106160f8576160f8619cd5565b60200260200101819052506040518060400160405280600581526020017f66616c736500000000000000000000000000000000000000000000000000000081525082828061614590619e42565b935060ff168151811061615a5761615a619cd5565b6020026020010181905250616331565b6161a2615a478660a0015160408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6162355760408051808201909152600d81527f2d2d6c6963656e73655479706500000000000000000000000000000000000000602082015282826161e581619e42565b935060ff16815181106161fa576161fa619cd5565b60200260200101819052508460a0015160405160200161621a9190619d04565b60405160208183030381529060405282828061614590619e42565b8460c0015115801561627857506040808901518151808301835260008082526020918201528251808401909352815183529081019082015261627690511590565b155b156163315760408051808201909152600d81527f2d2d6c6963656e73655479706500000000000000000000000000000000000000602082015282826162bc81619e42565b935060ff16815181106162d1576162d1619cd5565b60200260200101819052506162e5886174c7565b6040516020016162f59190619d04565b60405160208183030381529060405282828061631090619e42565b935060ff168151811061632557616325619cd5565b60200260200101819052505b6040808601518151808301835260008082526020918201528251808401909352815183529081019082015261636590511590565b6163fa5760408051808201909152600b81527f2d2d72656c617965724964000000000000000000000000000000000000000000602082015282826163a881619e42565b935060ff16815181106163bd576163bd619cd5565b602002602001018190525084604001518282806163d990619e42565b935060ff16815181106163ee576163ee619cd5565b60200260200101819052505b60608501511561651b5760408051808201909152600681527f2d2d73616c7400000000000000000000000000000000000000000000000000006020820152828261644381619e42565b935060ff168151811061645857616458619cd5565b602090810291909101015260608501516040517fb11a19e800000000000000000000000000000000000000000000000000000000815260048101919091526001600160a01b0384169063b11a19e890602401600060405180830381865afa1580156164c7573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526164ef91908101906196cb565b82826164fa81619e42565b935060ff168151811061650f5761650f619cd5565b60200260200101819052505b60e085015151156165c25760408051808201909152600a81527f2d2d6761734c696d6974000000000000000000000000000000000000000000006020820152828261656581619e42565b935060ff168151811061657a5761657a619cd5565b60200260200101819052506165968560e0015160000151617427565b82826165a181619e42565b935060ff16815181106165b6576165b6619cd5565b60200260200101819052505b60e0850151602001511561666c5760408051808201909152600a81527f2d2d6761735072696365000000000000000000000000000000000000000000006020820152828261660f81619e42565b935060ff168151811061662457616624619cd5565b60200260200101819052506166408560e0015160200151617427565b828261664b81619e42565b935060ff168151811061666057616660619cd5565b60200260200101819052505b60e085015160400151156167165760408051808201909152600e81527f2d2d6d6178466565506572476173000000000000000000000000000000000000602082015282826166b981619e42565b935060ff16815181106166ce576166ce619cd5565b60200260200101819052506166ea8560e0015160400151617427565b82826166f581619e42565b935060ff168151811061670a5761670a619cd5565b60200260200101819052505b60e085015160600151156167c05760408051808201909152601681527f2d2d6d61785072696f72697479466565506572476173000000000000000000006020820152828261676381619e42565b935060ff168151811061677857616778619cd5565b60200260200101819052506167948560e0015160600151617427565b828261679f81619e42565b935060ff16815181106167b4576167b4619cd5565b60200260200101819052505b60008160ff1667ffffffffffffffff8111156167de576167de619603565b60405190808252806020026020018201604052801561681157816020015b60608152602001906001900390816167fc5790505b50905060005b8260ff168160ff16101561686a57838160ff168151811061683a5761683a619cd5565b6020026020010151828260ff168151811061685757616857619cd5565b6020908102919091010152600101616817565b5093505050505b949350505050565b6168a06040518060600160405280600060030b815260200160608152602001606081525090565b60408051808201825260048082527f6261736800000000000000000000000000000000000000000000000000000000602083015291517fd145736c000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d92600091849163d145736c9161692691869101619ecc565b600060405180830381865afa158015616943573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261696b91908101906196cb565b905060006169798683617fb6565b90506000846001600160a01b031663f45c1ce7836040518263ffffffff1660e01b81526004016169a991906192f3565b6000604051808303816000875af11580156169c8573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526169f09190810190619f13565b805190915060030b15801590616a095750602081015151155b8015616a185750604081015151155b156159f25781600081518110616a3057616a30619cd5565b602002602001015160405160200161504b9190619fc9565b60606000616a7d8560408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600080825260209182015281518083019092528651825280870190820152909150616ab49082905b9061810b565b15616c11576000616b3182616b2b84616b25616af78a60408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6040805180820182526000808252602091820152815180830190925282518252918201519181019190915290565b90618132565b90618194565b604080518082018252600181527f0a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152909150616b9590829061810b565b15616bff57604080518082018252600181527f0a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616bfc905b8290618219565b90505b616c088161823f565b92505050614f78565b8215616c2a57848460405160200161504b92919061a1b5565b5050604080516020810190915260008152614f78565b509392505050565b6000808251602084016000f09392505050565b8160a0015115616c6a57505050565b6000616c778484846182a8565b90506000616c8482616879565b602081015181519192509060030b158015616d205750604080518082018252600781527f535543434553530000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616d2090604080518082018252600080825260209182015281518083019092528451825280850190820152616aae565b15616d2d57505050505050565b60408201515115616d4d57816040015160405160200161504b919061a25c565b8060405160200161504b919061a2ba565b60606000616d938360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600481527f2e736f6c0000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152909150616df8905b82906173c6565b15616e6757604080518082018252600481527f2e736f6c0000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152614f7890616e62908390618843565b61823f565b604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616ec9905b82906188cd565b600103616f9657604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616f2f90616bf5565b50604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152614f7890616e62905b8390618219565b604080518082018252600581527f2e6a736f6e00000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616ff590616df1565b1561712c57604080518082018252600181527f2f0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082018190528451808601909552925184528301529061705d908390618967565b9050600081600183516170709190619779565b8151811061708057617080619cd5565b60200260200101519050617123616e626170f66040518060400160405280600581526020017f2e6a736f6e00000000000000000000000000000000000000000000000000000081525060408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b60408051808201825260008082526020918201528151808301909252855182528086019082015290618843565b95945050505050565b8260405160200161504b919061a325565b50919050565b606060006171788360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600481527f2e736f6c00000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201529091506171da90616df1565b156171e857614f788161823f565b604080518082018252600181527f3a000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261724790616ec2565b6001036172b157604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152614f7890616e6290616f8f565b604080518082018252600581527f2e6a736f6e0000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261731090616df1565b1561712c57604080518082018252600181527f2f00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820181905284518086019095529251845283015290617378908390618967565b90506001815111156173b45780600282516173939190619779565b815181106173a3576173a3619cd5565b602002602001015192505050919050565b508260405160200161504b919061a325565b8051825160009111156173db57506000614dc3565b815183516020850151600092916173f191619766565b6173fb9190619779565b905082602001518103617412576001915050614dc3565b82516020840151819020912014905092915050565b6060600061743483618a0c565b600101905060008167ffffffffffffffff81111561745457617454619603565b6040519080825280601f01601f19166020018201604052801561747e576020820181803683370190505b5090508181016020015b600019017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a850494508461748857509392505050565b604081810151815180830183526000808252602091820181905283518085018552835181529282018383015283518085018552600a81527f554e4c4943454e5345440000000000000000000000000000000000000000000081840190815285518087018752838152840192909252845180860190955251845290830152606091617553905b8290618aee565b1561759357505060408051808201909152600481527f4e6f6e65000000000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600981527f556e6c6963656e73650000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526175f29061754c565b1561763257505060408051808201909152600981527f556e6c6963656e736500000000000000000000000000000000000000000000006020820152919050565b604080518082018252600381527f4d49540000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526176919061754c565b156176d157505060408051808201909152600381527f4d495400000000000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f47504c2d322e302d6f6e6c790000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526177309061754c565b806177955750604080518082018252601081527f47504c2d322e302d6f722d6c6174657200000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526177959061754c565b156177d557505060408051808201909152600981527f474e552047504c763200000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f47504c2d332e302d6f6e6c790000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526178349061754c565b806178995750604080518082018252601081527f47504c2d332e302d6f722d6c6174657200000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526178999061754c565b156178d957505060408051808201909152600981527f474e552047504c763300000000000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4c47504c2d322e312d6f6e6c7900000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526179389061754c565b8061799d5750604080518082018252601181527f4c47504c2d322e312d6f722d6c617465720000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261799d9061754c565b156179dd57505060408051808201909152600c81527f474e55204c47504c76322e3100000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4c47504c2d332e302d6f6e6c790000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617a3c9061754c565b80617aa15750604080518082018252601181527f4c47504c2d332e302d6f722d6c6174657200000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617aa19061754c565b15617ae157505060408051808201909152600a81527f474e55204c47504c7633000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f4253442d322d436c61757365000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617b409061754c565b15617b8057505060408051808201909152600c81527f4253442d322d436c6175736500000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f4253442d332d436c61757365000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617bdf9061754c565b15617c1f57505060408051808201909152600c81527f4253442d332d436c6175736500000000000000000000000000000000000000006020820152919050565b604080518082018252600781527f4d504c2d322e300000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617c7e9061754c565b15617cbe57505060408051808201909152600781527f4d504c2d322e30000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600781527f4f534c2d332e300000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617d1d9061754c565b15617d5d57505060408051808201909152600781527f4f534c2d332e30000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600a81527f4170616368652d322e300000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617dbc9061754c565b15617dfc57505060408051808201909152600a81527f4170616368652d322e30000000000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4147504c2d332e302d6f6e6c790000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617e5b9061754c565b80617ec05750604080518082018252601181527f4147504c2d332e302d6f722d6c6174657200000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617ec09061754c565b15617f0057505060408051808201909152600a81527f474e55204147504c7633000000000000000000000000000000000000000000006020820152919050565b604080518082018252600881527f4255534c2d312e3100000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617f5f9061754c565b15617f9f57505060408051808201909152600781527f42534c20312e31000000000000000000000000000000000000000000000000006020820152919050565b6040808401518451915161504b929060200161a403565b60608060005b84518110156180415781858281518110617fd857617fd8619cd5565b6020026020010151604051602001617ff19291906198bc565b6040516020818303038152906040529150600185516180109190619779565b81146180395781604051602001618027919061a56c565b60405160208183030381529060405291505b600101617fbc565b5060408051600380825260808201909252600091816020015b606081526020019060019003908161805a579050509050838160008151811061808557618085619cd5565b60200260200101819052506040518060400160405280600281526020017f2d63000000000000000000000000000000000000000000000000000000000000815250816001815181106180d9576180d9619cd5565b602002602001018190525081816002815181106180f8576180f8619cd5565b6020908102919091010152949350505050565b60208083015183518351928401516000936181299291849190618b02565b14159392505050565b604080518082019091526000808252602082015260006181648460000151856020015185600001518660200151618c13565b90508360200151816181769190619779565b84518590618185908390619779565b90525060208401525090919050565b60408051808201909152600080825260208201528151835110156181b9575081614dc3565b60208083015190840151600191146181e05750815160208481015190840151829020919020145b8015618211578251845185906181f7908390619779565b905250825160208501805161820d908390619766565b9052505b509192915050565b6040805180820190915260008082526020820152618238838383618d33565b5092915050565b60606000826000015167ffffffffffffffff81111561826057618260619603565b6040519080825280601f01601f19166020018201604052801561828a576020820181803683370190505b50905060006020820190506182388185602001518660000151618dde565b606060006182b4615271565b6040805160ff808252612000820190925291925060009190816020015b60608152602001906001900390816182d157905050905060006040518060400160405280600381526020017f6e7078000000000000000000000000000000000000000000000000000000000081525082828061832c90619e42565b935060ff168151811061834157618341619cd5565b60200260200101819052506040518060400160405280600781526020017f5e312e33322e3300000000000000000000000000000000000000000000000000815250604051602001618392919061a5ad565b6040516020818303038152906040528282806183ad90619e42565b935060ff16815181106183c2576183c2619cd5565b60200260200101819052506040518060400160405280600881526020017f76616c696461746500000000000000000000000000000000000000000000000081525082828061840f90619e42565b935060ff168151811061842457618424619cd5565b6020026020010181905250826040516020016184409190619d70565b60405160208183030381529060405282828061845b90619e42565b935060ff168151811061847057618470619cd5565b60200260200101819052506040518060400160405280600a81526020017f2d2d636f6e7472616374000000000000000000000000000000000000000000008152508282806184bd90619e42565b935060ff16815181106184d2576184d2619cd5565b60200260200101819052506184e78784618e58565b82826184f281619e42565b935060ff168151811061850757618507619cd5565b6020908102919091010152855151156185b35760408051808201909152600b81527f2d2d7265666572656e63650000000000000000000000000000000000000000006020820152828261855981619e42565b935060ff168151811061856e5761856e619cd5565b6020026020010181905250618587866000015184618e58565b828261859281619e42565b935060ff16815181106185a7576185a7619cd5565b60200260200101819052505b8560800151156186215760408051808201909152601881527f2d2d756e73616665536b697053746f72616765436865636b0000000000000000602082015282826185fc81619e42565b935060ff168151811061861157618611619cd5565b6020026020010181905250618687565b84156186875760408051808201909152601281527f2d2d726571756972655265666572656e636500000000000000000000000000006020820152828261866681619e42565b935060ff168151811061867b5761867b619cd5565b60200260200101819052505b604086015151156187235760408051808201909152600d81527f2d2d756e73616665416c6c6f7700000000000000000000000000000000000000602082015282826186d181619e42565b935060ff16815181106186e6576186e6619cd5565b6020026020010181905250856040015182828061870290619e42565b935060ff168151811061871757618717619cd5565b60200260200101819052505b85606001511561878d5760408051808201909152601481527f2d2d756e73616665416c6c6f7752656e616d65730000000000000000000000006020820152828261876c81619e42565b935060ff168151811061878157618781619cd5565b60200260200101819052505b60008160ff1667ffffffffffffffff8111156187ab576187ab619603565b6040519080825280602002602001820160405280156187de57816020015b60608152602001906001900390816187c95790505b50905060005b8260ff168160ff16101561883757838160ff168151811061880757618807619cd5565b6020026020010151828260ff168151811061882457618824619cd5565b60209081029190910101526001016187e4565b50979650505050505050565b6040805180820190915260008082526020820152815183511015618868575081614dc3565b8151835160208501516000929161887e91619766565b6188889190619779565b602084015190915060019082146188a9575082516020840151819020908220145b80156188c4578351855186906188c0908390619779565b9052505b50929392505050565b60008082600001516188f18560000151866020015186600001518760200151618c13565b6188fb9190619766565b90505b8351602085015161890f9190619766565b8111618238578161891f8161a5f2565b925050826000015161895685602001518361893a9190619779565b86516189469190619779565b8386600001518760200151618c13565b6189609190619766565b90506188fe565b6060600061897584846188cd565b618980906001619766565b67ffffffffffffffff81111561899857618998619603565b6040519080825280602002602001820160405280156189cb57816020015b60608152602001906001900390816189b65790505b50905060005b8151811015616c40576189e7616e628686618219565b8282815181106189f9576189f9619cd5565b60209081029190910101526001016189d1565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310618a55577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310618a81576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc100008310618a9f57662386f26fc10000830492506010015b6305f5e1008310618ab7576305f5e100830492506008015b6127108310618acb57612710830492506004015b60648310618add576064830492506002015b600a8310614dc35760010192915050565b6000618afa8383618e98565b159392505050565b600080858411618c095760208411618bb55760008415618b4d576001618b29866020619779565b618b3490600861a60c565b618b3f90600261a70a565b618b499190619779565b1990505b8351811685618b5c8989619766565b618b669190619779565b805190935082165b818114618ba057878411618b885787945050505050616871565b83618b928161a716565b945050828451169050618b6e565b618baa8785619766565b945050505050616871565b838320618bc28588619779565b618bcc9087619766565b91505b858210618c0757848220808203618bf457618bea8684619766565b9350505050616871565b618bff600184619779565b925050618bcf565b505b5092949350505050565b60008381868511618d1e5760208511618ccd5760008515618c5f576001618c3b876020619779565b618c4690600861a60c565b618c5190600261a70a565b618c5b9190619779565b1990505b84518116600087618c708b8b619766565b618c7a9190619779565b855190915083165b828114618cbf57818610618ca757618c9a8b8b619766565b9650505050505050616871565b85618cb18161a5f2565b965050838651169050618c82565b859650505050505050616871565b508383206000905b618cdf8689619779565b8211618d1c57858320808203618cfb5783945050505050616871565b618d06600185619766565b9350508180618d149061a5f2565b925050618cd5565b505b618d288787619766565b979650505050505050565b60408051808201909152600080825260208201526000618d658560000151866020015186600001518760200151618c13565b602080870180519186019190915251909150618d819082619779565b835284516020860151618d949190619766565b8103618da35760008552618dd5565b83518351618db19190619766565b85518690618dc0908390619779565b9052508351618dcf9082619766565b60208601525b50909392505050565b60208110618e165781518352618df5602084619766565b9250618e02602083619766565b9150618e0f602082619779565b9050618dde565b6000198115618e45576001618e2c836020619779565b618e389061010061a70a565b618e429190619779565b90505b9151835183169219169190911790915250565b60606000618e668484615344565b8051602080830151604051939450618e809390910161a72d565b60405160208183030381529060405291505092915050565b8151815160009190811115618eab575081515b6020808501519084015160005b83811015618f645782518251808214618f34576000196020871015618f1357600184618ee5896020619779565b618eef9190619766565b618efa90600861a60c565b618f0590600261a70a565b618f0f9190619779565b1990505b8181168382168181039114618f31579750614dc39650505050505050565b50505b618f3f602086619766565b9450618f4c602085619766565b93505050602081618f5d9190619766565b9050618eb8565b50845186516159f2919061a785565b610b678061a7a683390190565b61106f8061b30d83390190565b611bb98061c37c83390190565b6040518060e00160405280606081526020016060815260200160608152602001600015158152602001600015158152602001600015158152602001618fdd618fe2565b905290565b60405180610100016040528060001515815260200160001515815260200160608152602001600080191681526020016060815260200160608152602001600015158152602001618fdd6040518060800160405280600081526020016000815260200160008152602001600081525090565b602080825282518282018190526000918401906040840190835b818110156190945783516001600160a01b031683526020938401939092019160010161906d565b509095945050505050565b60005b838110156190ba5781810151838201526020016190a2565b50506000910152565b600081518084526190db81602086016020860161909f565b601f01601f19169290920160200192915050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b828110156191eb577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452815180516001600160a01b03168652602090810151604082880181905281519088018190529101906060600582901b88018101919088019060005b818110156191d1577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa08a85030183526191bb8486516190c3565b6020958601959094509290920191600101619181565b509197505050602094850194929092019150600101619117565b50929695505050505050565b600081518084526020840193506020830160005b8281101561924b5781517fffffffff000000000000000000000000000000000000000000000000000000001686526020958601959091019060010161920b565b5093949350505050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b828110156191eb577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc087860301845281518051604087526192c160408801826190c3565b90506020820151915086810360208801526192dc81836191f7565b96505050602093840193919091019060010161927d565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b828110156191eb577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08786030184526193558583516190c3565b9450602093840193919091019060010161931b565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b828110156191eb577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc087860301845281516001600160a01b03815116865260208101519050604060208701526193eb60408701826191f7565b9550506020938401939190910190600101619392565b60006020828403121561941357600080fd5b81518015158114614f7857600080fd5b80516001600160a01b038116811461943a57600080fd5b919050565b60006020828403121561945157600080fd5b614f7882619423565b610100815260056101008201527f544f4b454e000000000000000000000000000000000000000000000000000000610120820152610140602082015260036101408201527f544b4e000000000000000000000000000000000000000000000000000000000061016082015260006101808201905060ff8816604083015286606083015260038610619514577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b8560808301528460a083015261953560c08301856001600160a01b03169052565b6001600160a01b03831660e0830152979650505050505050565b60006020828403121561956157600080fd5b5051919050565b600181811c9082168061957c57607f821691505b60208210810361713d577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600080604083850312156195c857600080fd5b6195d183619423565b6020939093015192949293505050565b6040815260006195f460408301856190c3565b90508260208301529392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040516060810167ffffffffffffffff8111828210171561965557619655619603565b60405290565b60008067ffffffffffffffff84111561967657619676619603565b50604051601f19601f85018116603f0116810181811067ffffffffffffffff821117156196a5576196a5619603565b6040528381529050808284018510156196bd57600080fd5b616c4084602083018561909f565b6000602082840312156196dd57600080fd5b815167ffffffffffffffff8111156196f457600080fd5b8201601f8101841361970557600080fd5b614dbf8482516020840161965b565b60006020828403121561972657600080fd5b815160ff81168114614f7857600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b80820180821115614dc357614dc3619737565b81810381811115614dc357614dc3619737565b60408152600061979f60408301856190c3565b8281036020840152614f7481856190c3565b6001600160a01b038316815260406020820152600061687160408301846190c3565b7f4661696c656420746f206465706c6f7920636f6e74726163742000000000000081526000835161980b81601a85016020880161909f565b7f3a20000000000000000000000000000000000000000000000000000000000000601a91840191820152835161984881601c84016020880161909f565b01601c01949350505050565b602081526000614f7860208301846190c3565b600082601f83011261987857600080fd5b614f788383516020850161965b565b60006020828403121561989957600080fd5b815167ffffffffffffffff8111156198b057600080fd5b614dbf84828501619867565b600083516198ce81846020880161909f565b8351908301906198e281836020880161909f565b01949350505050565b7f4661696c656420746f206465706c6f7920636f6e74726163742000000000000081526000835161992381601a85016020880161909f565b7f207573696e6720636f6e7374727563746f722064617461202200000000000000601a91840191820152835161996081603384016020880161909f565b7f220000000000000000000000000000000000000000000000000000000000000060339290910191820152603401949350505050565b60408152600b60408201527f464f554e4452595f4f55540000000000000000000000000000000000000000006060820152608060208201526000614f7860808301846190c3565b600085516199ef818460208a0161909f565b7f2f000000000000000000000000000000000000000000000000000000000000009083019081528551619a29816001840160208a0161909f565b7f2f00000000000000000000000000000000000000000000000000000000000000600192909101918201528451619a6781600284016020890161909f565b6001818301019150507f2f0000000000000000000000000000000000000000000000000000000000000060018201528351619aa981600284016020880161909f565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600292909101918201526007019695505050505050565b604081526000619af460408301846190c3565b8281036020840152600481527f2e6173740000000000000000000000000000000000000000000000000000000060208201526040810191505092915050565b7f436f756c64206e6f742066696e642041535420696e2061727469666163742000815260008251619b6b81601f85016020870161909f565b7f2e205365742060617374203d20747275656020696e20666f756e6472792e746f601f9390910192830152507f6d6c000000000000000000000000000000000000000000000000000000000000603f820152604101919050565b604081526000619bd860408301846190c3565b8281036020840152601181527f2e6173742e6162736f6c7574655061746800000000000000000000000000000060208201526040810191505092915050565b604081526000619c2a60408301846190c3565b8281036020840152600c81527f2e6173742e6c6963656e7365000000000000000000000000000000000000000060208201526040810191505092915050565b7f2e6d657461646174612e736f75726365732e5b27000000000000000000000000815260008251619ca181601485016020870161909f565b7f275d2e6b656363616b32353600000000000000000000000000000000000000006014939091019283015250602001919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f2200000000000000000000000000000000000000000000000000000000000000815260008251619d3c81600185016020870161909f565b7f22000000000000000000000000000000000000000000000000000000000000006001939091019283015250600201919050565b60008251619d8281846020870161909f565b7f2f6275696c642d696e666f000000000000000000000000000000000000000000920191825250600b01919050565b7f436f756c64206e6f742066696e64206275696c642d696e666f2066696c65207781527f697468206d61746368696e6720736f7572636520636f6465206861736820666f60208201527f7220636f6e747261637420000000000000000000000000000000000000000000604082015260008251619e3581604b85016020870161909f565b91909101604b0192915050565b600060ff821660ff8103619e5857619e58619737565b60010192915050565b7f406f70656e7a657070656c696e2f646566656e6465722d6465706c6f792d636c81527f69656e742d636c69400000000000000000000000000000000000000000000000602082015260008251619ebf81602985016020870161909f565b9190910160290192915050565b60408152601660408201527f4f50454e5a455050454c494e5f424153485f50415448000000000000000000006060820152608060208201526000614f7860808301846190c3565b600060208284031215619f2557600080fd5b815167ffffffffffffffff811115619f3c57600080fd5b820160608185031215619f4e57600080fd5b619f56619632565b81518060030b8114619f6757600080fd5b8152602082015167ffffffffffffffff811115619f8357600080fd5b619f8f86828501619867565b602083015250604082015167ffffffffffffffff811115619faf57600080fd5b619fbb86828501619867565b604083015250949350505050565b7f4661696c656420746f2072756e206261736820636f6d6d616e6420776974682081527f220000000000000000000000000000000000000000000000000000000000000060208201526000825161a02781602185016020870161909f565b7f222e20496620796f7520617265207573696e672057696e646f77732c2073657460219390910192830152507f20746865204f50454e5a455050454c494e5f424153485f5041544820656e766960418201527f726f6e6d656e74207661726961626c6520746f207468652066756c6c7920717560618201527f616c69666965642070617468206f66207468652062617368206578656375746160818201527f626c652e20466f72206578616d706c652c20696620796f75206172652075736960a18201527f6e672047697420666f722057696e646f77732c206164642074686520666f6c6c60c18201527f6f77696e67206c696e6520696e20746865202e656e762066696c65206f66207960e18201527f6f75722070726f6a65637420287573696e6720666f727761726420736c6173686101018201527f6573293a0a4f50454e5a455050454c494e5f424153485f504154483d22433a2f6101218201527f50726f6772616d2046696c65732f4769742f62696e2f6261736822000000000061014182015261015c01919050565b7f4661696c656420746f2066696e64206c696e652077697468207072656669782081527f270000000000000000000000000000000000000000000000000000000000000060208201526000835161a21381602185016020880161909f565b7f2720696e206f75747075743a2000000000000000000000000000000000000000602191840191820152835161a25081602e84016020880161909f565b01602e01949350505050565b7f4661696c656420746f2072756e2075706772616465207361666574792076616c81527f69646174696f6e3a200000000000000000000000000000000000000000000000602082015260008251619ebf81602985016020870161909f565b7f55706772616465207361666574792076616c69646174696f6e206661696c656481527f3a0a00000000000000000000000000000000000000000000000000000000000060208201526000825161a31881602285016020870161909f565b9190910160220192915050565b7f436f6e7472616374206e616d652000000000000000000000000000000000000081526000825161a35d81600e85016020870161909f565b7f206d75737420626520696e2074686520666f726d6174204d79436f6e74726163600e9390910192830152507f742e736f6c3a4d79436f6e7472616374206f72204d79436f6e74726163742e73602e8201527f6f6c206f72206f75742f4d79436f6e74726163742e736f6c2f4d79436f6e7472604e8201527f6163742e6a736f6e000000000000000000000000000000000000000000000000606e820152607601919050565b7f53504458206c6963656e7365206964656e74696669657220000000000000000081526000835161a43b81601885016020880161909f565b7f20696e2000000000000000000000000000000000000000000000000000000000601891840191820152835161a47881601c84016020880161909f565b7f20646f6573206e6f74206c6f6f6b206c696b65206120737570706f7274656420601c92909101918201527f6c6963656e736520666f7220626c6f636b206578706c6f726572207665726966603c8201527f69636174696f6e2e205573652074686520606c6963656e73655479706560206f605c8201527f7074696f6e20746f20737065636966792061206c6963656e736520747970652c607c8201527f206f7220736574207468652060736b69704c6963656e73655479706560206f70609c8201527f74696f6e20746f2060747275656020746f20736b69702e00000000000000000060bc82015260d301949350505050565b6000825161a57e81846020870161909f565b7f2000000000000000000000000000000000000000000000000000000000000000920191825250600101919050565b7f406f70656e7a657070656c696e2f75706772616465732d636f7265400000000081526000825161a5e581601c85016020870161909f565b91909101601c0192915050565b6000600019820361a6055761a605619737565b5060010190565b8082028115828204841417614dc357614dc3619737565b6001815b600184111561a65e5780850481111561a6425761a642619737565b600184161561a65057908102905b60019390931c92800261a627565b935093915050565b60008261a67557506001614dc3565b8161a68257506000614dc3565b816001811461a698576002811461a6a25761a6be565b6001915050614dc3565b60ff84111561a6b35761a6b3619737565b50506001821b614dc3565b5060208310610133831016604e8410600b841016171561a6e1575081810a614dc3565b61a6ee600019848461a623565b806000190482111561a7025761a702619737565b029392505050565b6000614f78838361a666565b60008161a7255761a725619737565b506000190190565b6000835161a73f81846020880161909f565b7f3a00000000000000000000000000000000000000000000000000000000000000908301908152835161a77981600184016020880161909f565b01600101949350505050565b81810360008312801583831316838312821617156182385761823861973756fe60c0604052600d60809081526c2bb930b83832b21022ba3432b960991b60a05260009061002c9082610114565b506040805180820190915260048152630ae8aa8960e31b60208201526001906100559082610114565b506002805460ff1916601217905534801561006f57600080fd5b506101d2565b634e487b7160e01b600052604160045260246000fd5b600181811c9082168061009f57607f821691505b6020821081036100bf57634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111561010f57806000526020600020601f840160051c810160208510156100ec5750805b601f840160051c820191505b8181101561010c57600081556001016100f8565b50505b505050565b81516001600160401b0381111561012d5761012d610075565b6101418161013b845461008b565b846100c5565b6020601f821160018114610175576000831561015d5750848201515b600019600385901b1c1916600184901b17845561010c565b600084815260208120601f198516915b828110156101a55787850151825560209485019460019092019101610185565b50848210156101c35786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b610986806101e16000396000f3fe6080604052600436106100c05760003560e01c8063313ce56711610074578063a9059cbb1161004e578063a9059cbb146101fa578063d0e30db01461021a578063dd62ed3e1461022257600080fd5b8063313ce5671461018c57806370a08231146101b857806395d89b41146101e557600080fd5b806318160ddd116100a557806318160ddd1461012f57806323b872dd1461014c5780632e1a7d4d1461016c57600080fd5b806306fdde03146100d4578063095ea7b3146100ff57600080fd5b366100cf576100cd61025a565b005b600080fd5b3480156100e057600080fd5b506100e96102b5565b6040516100f69190610745565b60405180910390f35b34801561010b57600080fd5b5061011f61011a3660046107da565b610343565b60405190151581526020016100f6565b34801561013b57600080fd5b50475b6040519081526020016100f6565b34801561015857600080fd5b5061011f610167366004610804565b6103bd565b34801561017857600080fd5b506100cd610187366004610841565b610647565b34801561019857600080fd5b506002546101a69060ff1681565b60405160ff90911681526020016100f6565b3480156101c457600080fd5b5061013e6101d336600461085a565b60036020526000908152604090205481565b3480156101f157600080fd5b506100e9610724565b34801561020657600080fd5b5061011f6102153660046107da565b610731565b6100cd61025a565b34801561022e57600080fd5b5061013e61023d366004610875565b600460209081526000928352604080842090915290825290205481565b33600090815260036020526040812080543492906102799084906108d7565b909155505060405134815233907fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c9060200160405180910390a2565b600080546102c2906108ea565b80601f01602080910402602001604051908101604052809291908181526020018280546102ee906108ea565b801561033b5780601f106103105761010080835404028352916020019161033b565b820191906000526020600020905b81548152906001019060200180831161031e57829003601f168201915b505050505081565b33600081815260046020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925906103ab9086815260200190565b60405180910390a35060015b92915050565b73ffffffffffffffffffffffffffffffffffffffff831660009081526003602052604081205482111561042b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600060248201526044015b60405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff841633148015906104a1575073ffffffffffffffffffffffffffffffffffffffff841660009081526004602090815260408083203384529091529020547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff14155b156105605773ffffffffffffffffffffffffffffffffffffffff8416600090815260046020908152604080832033845290915290205482111561051a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526020600482015260006024820152604401610422565b73ffffffffffffffffffffffffffffffffffffffff841660009081526004602090815260408083203384529091528120805484929061055a90849061093d565b90915550505b73ffffffffffffffffffffffffffffffffffffffff84166000908152600360205260408120805484929061059590849061093d565b909155505073ffffffffffffffffffffffffffffffffffffffff8316600090815260036020526040812080548492906105cf9084906108d7565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161063591815260200190565b60405180910390a35060019392505050565b3360009081526003602052604090205481111561069a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526020600482015260006024820152604401610422565b33600090815260036020526040812080548392906106b990849061093d565b9091555050604051339082156108fc029083906000818181858888f193505050501580156106eb573d6000803e3d6000fd5b5060405181815233907f7fcf532c15f0a6db0bd6d0e038bea71d30d808c7d98cb3bf7268a95bf5081b659060200160405180910390a250565b600180546102c2906108ea565b600061073e3384846103bd565b9392505050565b602081526000825180602084015260005b818110156107735760208186018101516040868401015201610756565b5060006040828501015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011684010191505092915050565b803573ffffffffffffffffffffffffffffffffffffffff811681146107d557600080fd5b919050565b600080604083850312156107ed57600080fd5b6107f6836107b1565b946020939093013593505050565b60008060006060848603121561081957600080fd5b610822846107b1565b9250610830602085016107b1565b929592945050506040919091013590565b60006020828403121561085357600080fd5b5035919050565b60006020828403121561086c57600080fd5b61073e826107b1565b6000806040838503121561088857600080fd5b610891836107b1565b915061089f602084016107b1565b90509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b808201808211156103b7576103b76108a8565b600181811c908216806108fe57607f821691505b602082108103610937577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b818103818111156103b7576103b76108a856fea264697066735822122008d7fc4e09519c5dd9f356b03596f6829a151d0bc7682533f9ceab4e459f5ee264736f6c634300081a003360c060405234801561001057600080fd5b5060405161106f38038061106f83398101604081905261002f916100db565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461006357604051632b2add3d60e01b815260040160405180910390fd5b600380546001600160a01b0319166001600160a01b0385811691909117909155828116608052811660a0526040517f80699e81136d69cb8367ad52a994e25c722a86da654b561d0c14b61a777e7ac590600090a150505061011e565b80516001600160a01b03811681146100d657600080fd5b919050565b6000806000606084860312156100f057600080fd5b6100f9846100bf565b9250610107602085016100bf565b9150610115604085016100bf565b90509250925092565b60805160a051610f2561014a60003960006101e50152600081816102b9015261045b0152610f256000f3fe608060405234801561001057600080fd5b50600436106100f55760003560e01c806397770dff11610097578063c63585cc11610066578063c63585cc14610273578063d7fd7afb14610286578063d936a012146102b4578063ee2815ba146102db57600080fd5b806397770dff1461021a578063a7cb05071461022d578063c39aca3714610240578063c62178ac1461025357600080fd5b8063513a9c05116100d3578063513a9c051461018a578063569541b9146101c0578063842da36d146101e057806391dd645f1461020757600080fd5b80630be15547146100fa5780631f0e251b1461015a5780633ce4a5bc1461016f575b600080fd5b610130610108366004610bd1565b60016020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b61016d610168366004610c13565b6102ee565b005b61013073735b14bb79463307aacbed86daf3322b1e6226ab81565b610130610198366004610bd1565b60026020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b6003546101309073ffffffffffffffffffffffffffffffffffffffff1681565b6101307f000000000000000000000000000000000000000000000000000000000000000081565b61016d610215366004610c35565b610402565b61016d610228366004610c13565b610526565b61016d61023b366004610c61565b610633565b61016d61024e366004610c83565b6106ce565b6004546101309073ffffffffffffffffffffffffffffffffffffffff1681565b610130610281366004610d53565b6108cd565b6102a6610294366004610bd1565b60006020819052908152604090205481565b604051908152602001610151565b6101307f000000000000000000000000000000000000000000000000000000000000000081565b61016d6102e9366004610c35565b610a02565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461033b576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116610388576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600480547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527f3ade88e3922d64780e1bf4460d364c2970b69da813f9c0c07a1c187b5647636c906020015b60405180910390a150565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461044f576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600354600090610497907f00000000000000000000000000000000000000000000000000000000000000009073ffffffffffffffffffffffffffffffffffffffff16846108cd565b60008481526002602090815260409182902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff85169081179091558251878152918201529192507f0ecec485166da6139b13bb7e033e9446e2d35348e80ebf1180d4afe2dba1704e910160405180910390a1505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610573576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff81166105c0576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527fdba79d534382d1a8ae108e4c8ecb27c6ae42ab8b91d44eedf88bd329f3868d5e906020016103f7565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610680576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000828152602081815260409182902083905581518481529081018390527f49f492222906ac486c3c1401fa545626df1f0c0e5a77a05597ea2ed66af9850d91015b60405180910390a15050565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461071b576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff831673735b14bb79463307aacbed86daf3322b1e6226ab1480610768575073ffffffffffffffffffffffffffffffffffffffff831630145b1561079f576040517f82d5d76a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f47e7ef2400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152602482018690528616906347e7ef24906044016020604051808303816000875af1158015610814573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108389190610d96565b506040517fde43156e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84169063de43156e906108939089908990899088908890600401610e01565b600060405180830381600087803b1580156108ad57600080fd5b505af11580156108c1573d6000803e3d6000fd5b50505050505050505050565b60008060006108dc8585610ad3565b6040517fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606084811b8216602084015283901b16603482015291935091508690604801604051602081830303815290604052805190602001206040516020016109c29291907fff00000000000000000000000000000000000000000000000000000000000000815260609290921b7fffffffffffffffffffffffffffffffffffffffff00000000000000000000000016600183015260158201527f96e8ac4277198ff8b6f785478aa9a39f403cb768dd02cbee326c3e7da348845f603582015260550190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291905280516020909101209695505050505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610a4f576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008281526001602090815260409182902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff85169081179091558251858152918201527fd1b36d30f6248e97c473b4d1348ca164a4ef6759022f54a58ec200326c39c45d91016106c2565b6000808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603610b3b576040517fcb1e7cfe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1610610b75578284610b78565b83835b909250905073ffffffffffffffffffffffffffffffffffffffff8216610bca576040517f78b507da00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b9250929050565b600060208284031215610be357600080fd5b5035919050565b803573ffffffffffffffffffffffffffffffffffffffff81168114610c0e57600080fd5b919050565b600060208284031215610c2557600080fd5b610c2e82610bea565b9392505050565b60008060408385031215610c4857600080fd5b82359150610c5860208401610bea565b90509250929050565b60008060408385031215610c7457600080fd5b50508035926020909101359150565b60008060008060008060a08789031215610c9c57600080fd5b863567ffffffffffffffff811115610cb357600080fd5b87016060818a031215610cc557600080fd5b9550610cd360208801610bea565b945060408701359350610ce860608801610bea565b9250608087013567ffffffffffffffff811115610d0457600080fd5b8701601f81018913610d1557600080fd5b803567ffffffffffffffff811115610d2c57600080fd5b896020828401011115610d3e57600080fd5b60208201935080925050509295509295509295565b600080600060608486031215610d6857600080fd5b610d7184610bea565b9250610d7f60208501610bea565b9150610d8d60408501610bea565b90509250925092565b600060208284031215610da857600080fd5b81518015158114610c2e57600080fd5b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b60808152600086357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1883603018112610e3957600080fd5b870160208101903567ffffffffffffffff811115610e5657600080fd5b803603821315610e6557600080fd5b60606080850152610e7a60e085018284610db8565b91505073ffffffffffffffffffffffffffffffffffffffff610e9e60208a01610bea565b1660a0840152604088013560c084015273ffffffffffffffffffffffffffffffffffffffff871660208401528560408401528281036060840152610ee3818587610db8565b9897505050505050505056fea2646970667358221220fea45cb058045b493e646c8b9505ea080ab95fd7ed4498b922d179cf1abec08e64736f6c634300081a003360e060405234801561001057600080fd5b50604051611bb9380380611bb983398101604081905261002f9161020e565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461006357604051632b2add3d60e01b815260040160405180910390fd5b6001600160a01b038216158061008057506001600160a01b038116155b1561009e5760405163d92e233d60e01b815260040160405180910390fd5b60066100aa8982610360565b5060076100b78882610360565b5060ff861660c05260808590528360028111156100d6576100d661041e565b60a08160028111156100ea576100ea61041e565b905250600192909255600080546001600160a01b039283166001600160a01b03199182161790915560088054929093169116179055506104349350505050565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261015157600080fd5b81516001600160401b0381111561016a5761016a61012a565b604051601f8201601f19908116603f011681016001600160401b03811182821017156101985761019861012a565b6040528181528382016020018510156101b057600080fd5b60005b828110156101cf576020818601810151838301820152016101b3565b506000918101602001919091529392505050565b8051600381106101f257600080fd5b919050565b80516001600160a01b03811681146101f257600080fd5b600080600080600080600080610100898b03121561022b57600080fd5b88516001600160401b0381111561024157600080fd5b61024d8b828c01610140565b60208b015190995090506001600160401b0381111561026b57600080fd5b6102778b828c01610140565b975050604089015160ff8116811461028e57600080fd5b60608a015190965094506102a460808a016101e3565b60a08a015190945092506102ba60c08a016101f7565b91506102c860e08a016101f7565b90509295985092959890939650565b600181811c908216806102eb57607f821691505b60208210810361030b57634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111561035b57806000526020600020601f840160051c810160208510156103385750805b601f840160051c820191505b818110156103585760008155600101610344565b50505b505050565b81516001600160401b038111156103795761037961012a565b61038d8161038784546102d7565b84610311565b6020601f8211600181146103c157600083156103a95750848201515b600019600385901b1c1916600184901b178455610358565b600084815260208120601f198516915b828110156103f157878501518255602094850194600190920191016103d1565b508482101561040f5786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b634e487b7160e01b600052602160045260246000fd5b60805160a05160c05161174861047160003960006102170152600061033a0152600081816102eb01528181610ad70152610bdd01526117486000f3fe608060405234801561001057600080fd5b50600436106101985760003560e01c80638b851b95116100e3578063ccc775991161008c578063eddeb12311610066578063eddeb12314610431578063f2441b3214610444578063f687d12a1461046457600080fd5b8063ccc77599146103a4578063d9eeebed146103b7578063dd62ed3e146103eb57600080fd5b8063a9059cbb116100bd578063a9059cbb14610369578063c70126261461037c578063c835d7cc1461038f57600080fd5b80638b851b951461030d57806395d89b411461032d578063a3413d031461033557600080fd5b80633ce4a5bc116101455780634d8943bb1161011f5780634d8943bb146102a757806370a08231146102b057806385e1f4d0146102e657600080fd5b80633ce4a5bc1461024157806342966c681461028157806347e7ef241461029457600080fd5b806318160ddd1161017657806318160ddd146101f557806323b872dd146101fd578063313ce5671461021057600080fd5b806306fdde031461019d578063091d2788146101bb578063095ea7b3146101d2575b600080fd5b6101a5610477565b6040516101b29190611327565b60405180910390f35b6101c460015481565b6040519081526020016101b2565b6101e56101e0366004611366565b610509565b60405190151581526020016101b2565b6005546101c4565b6101e561020b366004611392565b610520565b60405160ff7f00000000000000000000000000000000000000000000000000000000000000001681526020016101b2565b61025c73735b14bb79463307aacbed86daf3322b1e6226ab81565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101b2565b6101e561028f3660046113d3565b6105b7565b6101e56102a2366004611366565b6105cb565b6101c460025481565b6101c46102be3660046113ec565b73ffffffffffffffffffffffffffffffffffffffff1660009081526003602052604090205490565b6101c47f000000000000000000000000000000000000000000000000000000000000000081565b60085461025c9073ffffffffffffffffffffffffffffffffffffffff1681565b6101a561071f565b61035c7f000000000000000000000000000000000000000000000000000000000000000081565b6040516101b29190611409565b6101e5610377366004611366565b61072e565b6101e561038a366004611479565b61073b565b6103a261039d3660046113ec565b61088a565b005b6103a26103b23660046113ec565b61099e565b6103bf610aab565b6040805173ffffffffffffffffffffffffffffffffffffffff90931683526020830191909152016101b2565b6101c46103f9366004611571565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260046020908152604080832093909416825291909152205490565b6103a261043f3660046113d3565b610cc9565b60005461025c9073ffffffffffffffffffffffffffffffffffffffff1681565b6103a26104723660046113d3565b610d4b565b606060068054610486906115aa565b80601f01602080910402602001604051908101604052809291908181526020018280546104b2906115aa565b80156104ff5780601f106104d4576101008083540402835291602001916104ff565b820191906000526020600020905b8154815290600101906020018083116104e257829003601f168201915b5050505050905090565b6000610516338484610dcd565b5060015b92915050565b600061052d848484610ed6565b73ffffffffffffffffffffffffffffffffffffffff8416600090815260046020908152604080832033845290915290205482811015610598576040517f10bad14700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6105ac85336105a7868561162c565b610dcd565b506001949350505050565b60006105c33383611091565b506001919050565b60003373735b14bb79463307aacbed86daf3322b1e6226ab14801590610609575060005473ffffffffffffffffffffffffffffffffffffffff163314155b801561062d575060085473ffffffffffffffffffffffffffffffffffffffff163314155b15610664576040517fddb5de5e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61066e83836111d3565b6040517f735b14bb79463307aacbed86daf3322b1e6226ab000000000000000000000000602082015273ffffffffffffffffffffffffffffffffffffffff8416907f67fc7bdaed5b0ec550d8706b87d60568ab70c6b781263c70101d54cd1564aab390603401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529082905261070e91869061163f565b60405180910390a250600192915050565b606060078054610486906115aa565b6000610516338484610ed6565b6000806000610748610aab565b6040517f23b872dd00000000000000000000000000000000000000000000000000000000815233600482015273735b14bb79463307aacbed86daf3322b1e6226ab602482015260448101829052919350915073ffffffffffffffffffffffffffffffffffffffff8316906323b872dd906064016020604051808303816000875af11580156107da573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107fe9190611661565b610834576040517f0a7cd6d600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61083e3385611091565b60025460405133917f9ffbffc04a397460ee1dbe8c9503e098090567d6b7f4b3c02a8617d800b6d9559161087791899189918791611683565b60405180910390a2506001949350505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab146108d7576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116610924576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527fd55614e962c5fd6ece71614f6348d702468a997a394dd5e5c1677950226d97ae906020015b60405180910390a150565b3373735b14bb79463307aacbed86daf3322b1e6226ab146109eb576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116610a38576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600880547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527f88815d964e380677e86d817e7d65dea59cb7b4c3b5b7a0c8ec7ea4a74f90a38790602001610993565b600080546040517f0be155470000000000000000000000000000000000000000000000000000000081527f000000000000000000000000000000000000000000000000000000000000000060048201528291829173ffffffffffffffffffffffffffffffffffffffff90911690630be1554790602401602060405180830381865afa158015610b3e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b6291906116b2565b905073ffffffffffffffffffffffffffffffffffffffff8116610bb1576040517f78fff39600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080546040517fd7fd7afb0000000000000000000000000000000000000000000000000000000081527f0000000000000000000000000000000000000000000000000000000000000000600482015273ffffffffffffffffffffffffffffffffffffffff9091169063d7fd7afb90602401602060405180830381865afa158015610c40573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c6491906116cf565b905080600003610ca0576040517fe661aed000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060025460015483610cb391906116e8565b610cbd91906116ff565b92959294509192505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610d16576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60028190556040518181527fef13af88e424b5d15f49c77758542c1938b08b8b95b91ed0751f98ba99000d8f90602001610993565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610d98576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018190556040518181527fff5788270f43bfc1ca41c503606d2594aa3023a1a7547de403a3e2f146a4a80a90602001610993565b73ffffffffffffffffffffffffffffffffffffffff8316610e1a576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216610e67576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff83811660008181526004602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8316610f23576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216610f70576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff831660009081526003602052604090205481811015610fd0576040517ffe382aa700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610fda828261162c565b73ffffffffffffffffffffffffffffffffffffffff808616600090815260036020526040808220939093559085168152908120805484929061101d9084906116ff565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161108391815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff82166110de576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff82166000908152600360205260409020548181101561113e576040517ffe382aa700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611148828261162c565b73ffffffffffffffffffffffffffffffffffffffff84166000908152600360205260408120919091556005805484929061118390849061162c565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90602001610ec9565b73ffffffffffffffffffffffffffffffffffffffff8216611220576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b806005600082825461123291906116ff565b909155505073ffffffffffffffffffffffffffffffffffffffff82166000908152600360205260408120805483929061126c9084906116ff565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6000815180845260005b818110156112e9576020818501810151868301820152016112cd565b5060006020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b60208152600061133a60208301846112c3565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff8116811461136357600080fd5b50565b6000806040838503121561137957600080fd5b823561138481611341565b946020939093013593505050565b6000806000606084860312156113a757600080fd5b83356113b281611341565b925060208401356113c281611341565b929592945050506040919091013590565b6000602082840312156113e557600080fd5b5035919050565b6000602082840312156113fe57600080fd5b813561133a81611341565b6020810160038310611444577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000806040838503121561148c57600080fd5b823567ffffffffffffffff8111156114a357600080fd5b8301601f810185136114b457600080fd5b803567ffffffffffffffff8111156114ce576114ce61144a565b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8501160116810181811067ffffffffffffffff8211171561153a5761153a61144a565b60405281815282820160200187101561155257600080fd5b8160208401602083013760006020928201830152969401359450505050565b6000806040838503121561158457600080fd5b823561158f81611341565b9150602083013561159f81611341565b809150509250929050565b600181811c908216806115be57607f821691505b6020821081036115f7577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8181038181111561051a5761051a6115fd565b60408152600061165260408301856112c3565b90508260208301529392505050565b60006020828403121561167357600080fd5b8151801515811461133a57600080fd5b60808152600061169660808301876112c3565b6020830195909552506040810192909252606090910152919050565b6000602082840312156116c457600080fd5b815161133a81611341565b6000602082840312156116e157600080fd5b5051919050565b808202811582820484141761051a5761051a6115fd565b8082018082111561051a5761051a6115fd56fea26469706673582212204013e39523742118b3f2227e145ee7e48176ba6aebead33c596dca2acb59a74c64736f6c634300081a0033a26469706673582212206b6db1291d20fd33520982e2fe392b296b9edc553852297c492f7091d9ef475964736f6c634300081a0033", } // ZRC20TestABI is the input ABI used to generate the binding from. diff --git a/v2/src/zevm/GatewayZEVM.sol b/v2/src/zevm/GatewayZEVM.sol index 439fd02a..c8d7cdcf 100644 --- a/v2/src/zevm/GatewayZEVM.sol +++ b/v2/src/zevm/GatewayZEVM.sol @@ -149,6 +149,7 @@ contract GatewayZEVM is /// @param receiver The receiver address on the external chain. /// @param amount The amount of tokens to withdraw. function withdraw(bytes memory receiver, uint256 amount, uint256 chainId) external nonReentrant whenNotPaused { + if (receiver.length == 0) revert ZeroAddress(); if (amount == 0) revert InsufficientZetaAmount(); _transferZETA(amount, FUNGIBLE_MODULE_ADDRESS); diff --git a/v2/test/GatewayZEVM.t.sol b/v2/test/GatewayZEVM.t.sol index 5790a7b4..96c55428 100644 --- a/v2/test/GatewayZEVM.t.sol +++ b/v2/test/GatewayZEVM.t.sol @@ -172,13 +172,18 @@ contract GatewayZEVMInboundTest is Test, IGatewayZEVMEvents, IGatewayZEVMErrors gateway.withdraw(abi.encodePacked(addr1), 0, 1); } - function testWithdrawAndcallZETAFailsIfAmountIsZero() public { + function testWithdrawZETAFailsIfReceiverIsZeroAddress() public { + vm.expectRevert(ZeroAddress.selector); + gateway.withdraw(abi.encodePacked(""), 0, 1); + } + + function testWithdrawAndCallZETAFailsIfAmountIsZero() public { bytes memory message = abi.encodeWithSignature("hello(address)", addr1); vm.expectRevert(InsufficientZetaAmount.selector); gateway.withdrawAndCall(abi.encodePacked(addr1), 0, 1, message); } - function testWithdrawAndcallZETAFailsIfAmountIsReceiverIsZeroAddress() public { + function testWithdrawAndCallZETAFailsIfAmountIsReceiverIsZeroAddress() public { bytes memory message = abi.encodeWithSignature("hello(address)", addr1); vm.expectRevert(ZeroAddress.selector); gateway.withdrawAndCall(abi.encodePacked(""), 1, 1, message); @@ -446,7 +451,7 @@ contract GatewayZEVMOutboundTest is Test, IGatewayZEVMEvents, IGatewayZEVMErrors gateway.deposit(address(zrc20), amount, fungibleModule); } - function testExecuteFailsIfZrc20IsZeroAddress() public { + function testExecuteFailsIfZRC20IsZeroAddress() public { bytes memory message = abi.encode("hello"); zContext memory context = zContext({ origin: abi.encodePacked(address(gateway)), sender: fungibleModule, chainID: 1 }); diff --git a/v2/typechain-types/factories/GatewayZEVM__factory.ts b/v2/typechain-types/factories/GatewayZEVM__factory.ts index 1a840e20..7db9268a 100644 --- a/v2/typechain-types/factories/GatewayZEVM__factory.ts +++ b/v2/typechain-types/factories/GatewayZEVM__factory.ts @@ -1041,7 +1041,7 @@ const _abi = [ ] as const; const _bytecode = - "0x60a06040523060805234801561001457600080fd5b5061001d610022565b6100d4565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100725760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146100d15780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b60805161331b6100fd6000396000818161235f01528181612388015261255e015261331b6000f3fe6080604052600436106101bb5760003560e01c80635c975abb116100ec578063ad3cb1cc1161008a578063d547741f11610064578063d547741f14610600578063e63ab1e914610620578063f41d774914610654578063f45346dc1461067457600080fd5b8063ad3cb1cc1461056a578063bcf7f32b146105c0578063c39aca37146105e057600080fd5b80637993c1e0116100c65780637993c1e0146104bb5780638456cb59146104db57806391d14854146104f0578063a217fddf1461055557600080fd5b80635c975abb146104445780635d40e1781461047b578063737a9ed61461049b57600080fd5b806336568abe11610159578063485cc95511610133578063485cc955146103dc5780634f1ef286146103fc57806352d1902d1461040f5780635af659671461042457600080fd5b806336568abe1461037f5780633ce4a5bc1461039f5780633f4ba83a146103c757600080fd5b806321e093b11161019557806321e093b1146102aa578063248a9ca3146102e25780632f2ff15d1461033f578063309f50041461035f57600080fd5b806301ffc9a714610235578063135390f91461026a57806321501a951461028a57600080fd5b36610230576101c8610694565b6000546001600160a01b031633148015906101f757503373735b14bb79463307aacbed86daf3322b1e6226ab14155b1561022e576040517f229930b200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b005b600080fd5b34801561024157600080fd5b50610255610250366004612a3c565b6106f2565b60405190151581526020015b60405180910390f35b34801561027657600080fd5b5061022e610285366004612b8e565b61078b565b34801561029657600080fd5b5061022e6102a5366004612c4a565b6108f9565b3480156102b657600080fd5b506000546102ca906001600160a01b031681565b6040516001600160a01b039091168152602001610261565b3480156102ee57600080fd5b506103316102fd366004612cd6565b60009081527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052604090206001015490565b604051908152602001610261565b34801561034b57600080fd5b5061022e61035a366004612cef565b610ac6565b34801561036b57600080fd5b5061022e61037a366004612d1f565b610b10565b34801561038b57600080fd5b5061022e61039a366004612cef565b610c7a565b3480156103ab57600080fd5b506102ca73735b14bb79463307aacbed86daf3322b1e6226ab81565b3480156103d357600080fd5b5061022e610cc6565b3480156103e857600080fd5b5061022e6103f7366004612dbd565b610cfb565b61022e61040a366004612deb565b610f51565b34801561041b57600080fd5b50610331610f70565b34801561043057600080fd5b5061022e61043f366004612d1f565b610f9f565b34801561045057600080fd5b507fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff16610255565b34801561048757600080fd5b5061022e610496366004612e3b565b6111ae565b3480156104a757600080fd5b5061022e6104b6366004612eb0565b611268565b3480156104c757600080fd5b5061022e6104d6366004612efe565b611348565b3480156104e757600080fd5b5061022e6114bc565b3480156104fc57600080fd5b5061025561050b366004612cef565b60009182527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408084206001600160a01b0393909316845291905290205460ff1690565b34801561056157600080fd5b50610331600081565b34801561057657600080fd5b506105b36040518060400160405280600581526020017f352e302e3000000000000000000000000000000000000000000000000000000081525081565b6040516102619190612fa7565b3480156105cc57600080fd5b5061022e6105db366004612d1f565b6114ee565b3480156105ec57600080fd5b5061022e6105fb366004612d1f565b61161e565b34801561060c57600080fd5b5061022e61061b366004612cef565b61182d565b34801561062c57600080fd5b506103317f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b34801561066057600080fd5b5061022e61066f366004612fba565b611871565b34801561068057600080fd5b5061022e61068f366004613020565b611990565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff16156106f0576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061078557507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b610793611b9f565b61079b610694565b82516000036107d6576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b81600003610810576040517f5d67094f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061081c8383611c20565b90506000336001600160a01b03167fde19dbe881cc0aeeb6e73ce19ac7b5ca695e6be8a076e3eb42292005a7fec1b586858786886001600160a01b0316634d8943bb6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561088d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108b19190613057565b6040516108c2959493929190613070565b60405180910390a3506108f460017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610946576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61094e610694565b6001600160a01b03831661098e576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b836000036109c8576040517f19c08f4900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03831673735b14bb79463307aacbed86daf3322b1e6226ab14806109fb57506001600160a01b03831630145b15610a32576040517f82d5d76a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610a3c8484611f13565b6000546040517fde43156e0000000000000000000000000000000000000000000000000000000081526001600160a01b038086169263de43156e92610a8d928a9216908990889088906004016131ad565b600060405180830381600087803b158015610aa757600080fd5b505af1158015610abb573d6000803e3d6000fd5b505050505050505050565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020526040902060010154610b00816120e1565b610b0a83836120eb565b50505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610b5d576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610b65610694565b6001600160a01b0385161580610b8257506001600160a01b038316155b15610bb9576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b83600003610bf3576040517f5d67094f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f69582bee0000000000000000000000000000000000000000000000000000000081526001600160a01b038416906369582bee90610c4090899089908990889088906004016131ad565b600060405180830381600087803b158015610c5a57600080fd5b505af1158015610c6e573d6000803e3d6000fd5b50505050505050505050565b6001600160a01b0381163314610cbc576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6108f482826121d8565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610cf0816120e1565b610cf861229c565b50565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff16600081158015610d465750825b905060008267ffffffffffffffff166001148015610d635750303b155b905081158015610d71575080155b15610da8576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001660011785558315610e095784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff16680100000000000000001785555b6001600160a01b0387161580610e2657506001600160a01b038616155b15610e5d576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610e6561232c565b610e6d61232c565b610e75612334565b610e7d612344565b610e886000876120eb565b50610eb37f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a876120eb565b50600080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0389161790558315610f485784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50505050505050565b610f59612354565b610f6282612424565b610f6c828261242f565b5050565b6000610f7a612553565b507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc90565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610fec576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610ff4610694565b6001600160a01b038516158061101157506001600160a01b038316155b15611048576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b83600003611082576040517f5d67094f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03831673735b14bb79463307aacbed86daf3322b1e6226ab14806110b557506001600160a01b03831630145b156110ec576040517f82d5d76a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f47e7ef240000000000000000000000000000000000000000000000000000000081526001600160a01b038481166004830152602482018690528616906347e7ef24906044016020604051808303816000875af1158015611154573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061117891906131f4565b610bf3576040517f47d19fab00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6111b6611b9f565b6111be610694565b83516000036111f9576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b82336001600160a01b03167f5322ffbbf9261ff1f8138247942d2b03b28717141ef0a0dd080fc4be9c4e78d386858560405161123793929190613216565b60405180910390a3610b0a60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b611270611b9f565b611278610694565b816000036112b2576040517f19c08f4900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6112d08273735b14bb79463307aacbed86daf3322b1e6226ab611f13565b60008054604051839233927fde19dbe881cc0aeeb6e73ce19ac7b5ca695e6be8a076e3eb42292005a7fec1b5926113179289926001600160a01b0316918991908190613070565b60405180910390a36108f460017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b611350611b9f565b611358610694565b8451600003611393576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b836000036113cd576040517f5d67094f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006113d98585611c20565b90506000336001600160a01b03167fde19dbe881cc0aeeb6e73ce19ac7b5ca695e6be8a076e3eb42292005a7fec1b5888789868a6001600160a01b0316634d8943bb6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561144a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061146e9190613057565b8a8a6040516114839796959493929190613246565b60405180910390a3506114b560017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b5050505050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a6114e6816120e1565b610cf86125b5565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461153b576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611543610694565b6001600160a01b038516158061156057506001600160a01b038316155b15611597576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b836000036115d1576040517f5d67094f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517fde43156e0000000000000000000000000000000000000000000000000000000081526001600160a01b0384169063de43156e90610c4090899089908990889088906004016131ad565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461166b576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611673610694565b6001600160a01b038516158061169057506001600160a01b038316155b156116c7576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b83600003611701576040517f5d67094f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03831673735b14bb79463307aacbed86daf3322b1e6226ab148061173457506001600160a01b03831630145b1561176b576040517f82d5d76a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f47e7ef240000000000000000000000000000000000000000000000000000000081526001600160a01b038481166004830152602482018690528616906347e7ef24906044016020604051808303816000875af11580156117d3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117f791906131f4565b6115d1576040517f47d19fab00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020526040902060010154611867816120e1565b610b0a83836121d8565b611879611b9f565b611881610694565b84516000036118bc576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b836000036118f6576040517f19c08f4900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6119148473735b14bb79463307aacbed86daf3322b1e6226ab611f13565b60008054604051859233927fde19dbe881cc0aeeb6e73ce19ac7b5ca695e6be8a076e3eb42292005a7fec1b59261195f928b926001600160a01b0316918b919081908b908b90613246565b60405180910390a36114b560017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b3373735b14bb79463307aacbed86daf3322b1e6226ab146119dd576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6119e5610694565b6001600160a01b0383161580611a0257506001600160a01b038116155b15611a39576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b81600003611a73576040517f5d67094f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03811673735b14bb79463307aacbed86daf3322b1e6226ab1480611aa657506001600160a01b03811630145b15611add576040517f82d5d76a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f47e7ef240000000000000000000000000000000000000000000000000000000081526001600160a01b038281166004830152602482018490528416906347e7ef24906044016020604051808303816000875af1158015611b45573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b6991906131f4565b6108f4576040517f47d19fab00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0080547ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01611c1a576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60029055565b6000806000836001600160a01b031663d9eeebed6040518163ffffffff1660e01b81526004016040805180830381865afa158015611c62573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c86919061329b565b6040517f23b872dd00000000000000000000000000000000000000000000000000000000815233600482015273735b14bb79463307aacbed86daf3322b1e6226ab60248201526044810182905291935091506001600160a01b038316906323b872dd906064016020604051808303816000875af1158015611d0b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d2f91906131f4565b611d65576040517f0a7cd6d600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f23b872dd000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018690526001600160a01b038516906323b872dd906064016020604051808303816000875af1158015611dd1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611df591906131f4565b611e2b576040517f4dd9ee8d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f42966c68000000000000000000000000000000000000000000000000000000008152600481018690526001600160a01b038516906342966c68906024016020604051808303816000875af1158015611e8b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611eaf91906131f4565b611ee5576040517f2c77e05c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b949350505050565b60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b6000546040517f23b872dd000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018490526001600160a01b03909116906323b872dd906064016020604051808303816000875af1158015611f83573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fa791906131f4565b611fdd576040517fc7ffc47b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000546040517f2e1a7d4d000000000000000000000000000000000000000000000000000000008152600481018490526001600160a01b0390911690632e1a7d4d90602401600060405180830381600087803b15801561203c57600080fd5b505af1158015612050573d6000803e3d6000fd5b505050506000816001600160a01b03168360405160006040518083038185875af1925050503d80600081146120a1576040519150601f19603f3d011682016040523d82523d6000602084013e6120a6565b606091505b50509050806108f4576040517fc7ffc47b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610cf8813361262e565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff166121ce576000848152602082815260408083206001600160a01b0387168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790556121843390565b6001600160a01b0316836001600160a01b0316857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a46001915050610785565b6000915050610785565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff16156121ce576000848152602082815260408083206001600160a01b038716808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339287917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a46001915050610785565b6122a46126bb565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001681557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a150565b6106f0612716565b61233c612716565b6106f061277d565b61234c612716565b6106f06127ce565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806123ed57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166123e17f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b6001600160a01b031614155b156106f0576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610f6c816120e1565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156124a7575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682019092526124a491810190613057565b60015b6124ed576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b03831660048201526024015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8114612549576040517faa1d49a4000000000000000000000000000000000000000000000000000000008152600481018290526024016124e4565b6108f483836127d6565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146106f0576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6125bd610694565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011781557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2583361230e565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408083206001600160a01b038516845290915290205460ff16610f6c576040517fe2517d3f0000000000000000000000000000000000000000000000000000000081526001600160a01b0382166004820152602481018390526044016124e4565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff166106f0576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff166106f0576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612785612716565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055565b611eed612716565b6127df8261282c565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a2805115612824576108f482826128d4565b610f6c61294a565b806001600160a01b03163b60000361287b576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b03821660048201526024016124e4565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6060600080846001600160a01b0316846040516128f191906132c9565b600060405180830381855af49150503d806000811461292c576040519150601f19603f3d011682016040523d82523d6000602084013e612931565b606091505b5091509150612941858383612982565b95945050505050565b34156106f0576040517fb398979f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60608261299757612992826129fa565b6129f3565b81511580156129ae57506001600160a01b0384163b155b156129f0576040517f9996b3150000000000000000000000000000000000000000000000000000000081526001600160a01b03851660048201526024016124e4565b50805b9392505050565b805115612a0a5780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060208284031215612a4e57600080fd5b81357fffffffff00000000000000000000000000000000000000000000000000000000811681146129f357600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600082601f830112612abe57600080fd5b813567ffffffffffffffff811115612ad857612ad8612a7e565b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8501160116810181811067ffffffffffffffff82111715612b4457612b44612a7e565b604052818152838201602001851015612b5c57600080fd5b816020850160208301376000918101602001919091529392505050565b6001600160a01b0381168114610cf857600080fd5b600080600060608486031215612ba357600080fd5b833567ffffffffffffffff811115612bba57600080fd5b612bc686828701612aad565b935050602084013591506040840135612bde81612b79565b809150509250925092565b600060608284031215612bfb57600080fd5b50919050565b60008083601f840112612c1357600080fd5b50813567ffffffffffffffff811115612c2b57600080fd5b602083019150836020828501011115612c4357600080fd5b9250929050565b600080600080600060808688031215612c6257600080fd5b853567ffffffffffffffff811115612c7957600080fd5b612c8588828901612be9565b955050602086013593506040860135612c9d81612b79565b9250606086013567ffffffffffffffff811115612cb957600080fd5b612cc588828901612c01565b969995985093965092949392505050565b600060208284031215612ce857600080fd5b5035919050565b60008060408385031215612d0257600080fd5b823591506020830135612d1481612b79565b809150509250929050565b60008060008060008060a08789031215612d3857600080fd5b863567ffffffffffffffff811115612d4f57600080fd5b612d5b89828a01612be9565b9650506020870135612d6c81612b79565b9450604087013593506060870135612d8381612b79565b9250608087013567ffffffffffffffff811115612d9f57600080fd5b612dab89828a01612c01565b979a9699509497509295939492505050565b60008060408385031215612dd057600080fd5b8235612ddb81612b79565b91506020830135612d1481612b79565b60008060408385031215612dfe57600080fd5b8235612e0981612b79565b9150602083013567ffffffffffffffff811115612e2557600080fd5b612e3185828601612aad565b9150509250929050565b60008060008060608587031215612e5157600080fd5b843567ffffffffffffffff811115612e6857600080fd5b612e7487828801612aad565b94505060208501359250604085013567ffffffffffffffff811115612e9857600080fd5b612ea487828801612c01565b95989497509550505050565b600080600060608486031215612ec557600080fd5b833567ffffffffffffffff811115612edc57600080fd5b612ee886828701612aad565b9660208601359650604090950135949350505050565b600080600080600060808688031215612f1657600080fd5b853567ffffffffffffffff811115612f2d57600080fd5b612c8588828901612aad565b60005b83811015612f54578181015183820152602001612f3c565b50506000910152565b60008151808452612f75816020860160208601612f39565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006129f36020830184612f5d565b600080600080600060808688031215612fd257600080fd5b853567ffffffffffffffff811115612fe957600080fd5b612ff588828901612aad565b9550506020860135935060408601359250606086013567ffffffffffffffff811115612cb957600080fd5b60008060006060848603121561303557600080fd5b833561304081612b79565b9250602084013591506040840135612bde81612b79565b60006020828403121561306957600080fd5b5051919050565b60c08152600061308360c0830188612f5d565b6001600160a01b038716602084015285604084015284606084015283608084015282810360a084015260008152602081019150509695505050505050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b600081357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe183360301811261313e57600080fd5b820160208101903567ffffffffffffffff81111561315b57600080fd5b80360382131561316a57600080fd5b6060855261317c6060860182846130c1565b915050602083013561318d81612b79565b6001600160a01b0316602085015260409283013592909301919091525090565b6080815260006131c0608083018861310a565b6001600160a01b038716602084015285604084015282810360608401526131e88185876130c1565b98975050505050505050565b60006020828403121561320657600080fd5b815180151581146129f357600080fd5b6040815260006132296040830186612f5d565b828103602084015261323c8185876130c1565b9695505050505050565b60c08152600061325960c083018a612f5d565b6001600160a01b038916602084015287604084015286606084015285608084015282810360a084015261328d8185876130c1565b9a9950505050505050505050565b600080604083850312156132ae57600080fd5b82516132b981612b79565b6020939093015192949293505050565b600082516132db818460208701612f39565b919091019291505056fea264697066735822122074bd01c46a1890e26f7c08318fd774812c29e1ccd03d35d939069b787f010fb864736f6c634300081a0033"; + "0x60a06040523060805234801561001457600080fd5b5061001d610022565b6100d4565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100725760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146100d15780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b6080516133566100fd6000396000818161239a015281816123c3015261259901526133566000f3fe6080604052600436106101bb5760003560e01c80635c975abb116100ec578063ad3cb1cc1161008a578063d547741f11610064578063d547741f14610600578063e63ab1e914610620578063f41d774914610654578063f45346dc1461067457600080fd5b8063ad3cb1cc1461056a578063bcf7f32b146105c0578063c39aca37146105e057600080fd5b80637993c1e0116100c65780637993c1e0146104bb5780638456cb59146104db57806391d14854146104f0578063a217fddf1461055557600080fd5b80635c975abb146104445780635d40e1781461047b578063737a9ed61461049b57600080fd5b806336568abe11610159578063485cc95511610133578063485cc955146103dc5780634f1ef286146103fc57806352d1902d1461040f5780635af659671461042457600080fd5b806336568abe1461037f5780633ce4a5bc1461039f5780633f4ba83a146103c757600080fd5b806321e093b11161019557806321e093b1146102aa578063248a9ca3146102e25780632f2ff15d1461033f578063309f50041461035f57600080fd5b806301ffc9a714610235578063135390f91461026a57806321501a951461028a57600080fd5b36610230576101c8610694565b6000546001600160a01b031633148015906101f757503373735b14bb79463307aacbed86daf3322b1e6226ab14155b1561022e576040517f229930b200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b005b600080fd5b34801561024157600080fd5b50610255610250366004612a77565b6106f2565b60405190151581526020015b60405180910390f35b34801561027657600080fd5b5061022e610285366004612bc9565b61078b565b34801561029657600080fd5b5061022e6102a5366004612c85565b6108f9565b3480156102b657600080fd5b506000546102ca906001600160a01b031681565b6040516001600160a01b039091168152602001610261565b3480156102ee57600080fd5b506103316102fd366004612d11565b60009081527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052604090206001015490565b604051908152602001610261565b34801561034b57600080fd5b5061022e61035a366004612d2a565b610ac6565b34801561036b57600080fd5b5061022e61037a366004612d5a565b610b10565b34801561038b57600080fd5b5061022e61039a366004612d2a565b610c7a565b3480156103ab57600080fd5b506102ca73735b14bb79463307aacbed86daf3322b1e6226ab81565b3480156103d357600080fd5b5061022e610cc6565b3480156103e857600080fd5b5061022e6103f7366004612df8565b610cfb565b61022e61040a366004612e26565b610f51565b34801561041b57600080fd5b50610331610f70565b34801561043057600080fd5b5061022e61043f366004612d5a565b610f9f565b34801561045057600080fd5b507fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff16610255565b34801561048757600080fd5b5061022e610496366004612e76565b6111ae565b3480156104a757600080fd5b5061022e6104b6366004612eeb565b611268565b3480156104c757600080fd5b5061022e6104d6366004612f39565b611383565b3480156104e757600080fd5b5061022e6114f7565b3480156104fc57600080fd5b5061025561050b366004612d2a565b60009182527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408084206001600160a01b0393909316845291905290205460ff1690565b34801561056157600080fd5b50610331600081565b34801561057657600080fd5b506105b36040518060400160405280600581526020017f352e302e3000000000000000000000000000000000000000000000000000000081525081565b6040516102619190612fe2565b3480156105cc57600080fd5b5061022e6105db366004612d5a565b611529565b3480156105ec57600080fd5b5061022e6105fb366004612d5a565b611659565b34801561060c57600080fd5b5061022e61061b366004612d2a565b611868565b34801561062c57600080fd5b506103317f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b34801561066057600080fd5b5061022e61066f366004612ff5565b6118ac565b34801561068057600080fd5b5061022e61068f36600461305b565b6119cb565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff16156106f0576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061078557507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b610793611bda565b61079b610694565b82516000036107d6576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b81600003610810576040517f5d67094f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061081c8383611c5b565b90506000336001600160a01b03167fde19dbe881cc0aeeb6e73ce19ac7b5ca695e6be8a076e3eb42292005a7fec1b586858786886001600160a01b0316634d8943bb6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561088d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108b19190613092565b6040516108c29594939291906130ab565b60405180910390a3506108f460017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610946576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61094e610694565b6001600160a01b03831661098e576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b836000036109c8576040517f19c08f4900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03831673735b14bb79463307aacbed86daf3322b1e6226ab14806109fb57506001600160a01b03831630145b15610a32576040517f82d5d76a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610a3c8484611f4e565b6000546040517fde43156e0000000000000000000000000000000000000000000000000000000081526001600160a01b038086169263de43156e92610a8d928a9216908990889088906004016131e8565b600060405180830381600087803b158015610aa757600080fd5b505af1158015610abb573d6000803e3d6000fd5b505050505050505050565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020526040902060010154610b008161211c565b610b0a8383612126565b50505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610b5d576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610b65610694565b6001600160a01b0385161580610b8257506001600160a01b038316155b15610bb9576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b83600003610bf3576040517f5d67094f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f69582bee0000000000000000000000000000000000000000000000000000000081526001600160a01b038416906369582bee90610c4090899089908990889088906004016131e8565b600060405180830381600087803b158015610c5a57600080fd5b505af1158015610c6e573d6000803e3d6000fd5b50505050505050505050565b6001600160a01b0381163314610cbc576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6108f48282612213565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610cf08161211c565b610cf86122d7565b50565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff16600081158015610d465750825b905060008267ffffffffffffffff166001148015610d635750303b155b905081158015610d71575080155b15610da8576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001660011785558315610e095784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff16680100000000000000001785555b6001600160a01b0387161580610e2657506001600160a01b038616155b15610e5d576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610e65612367565b610e6d612367565b610e7561236f565b610e7d61237f565b610e88600087612126565b50610eb37f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a87612126565b50600080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0389161790558315610f485784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50505050505050565b610f5961238f565b610f628261245f565b610f6c828261246a565b5050565b6000610f7a61258e565b507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc90565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610fec576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610ff4610694565b6001600160a01b038516158061101157506001600160a01b038316155b15611048576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b83600003611082576040517f5d67094f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03831673735b14bb79463307aacbed86daf3322b1e6226ab14806110b557506001600160a01b03831630145b156110ec576040517f82d5d76a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f47e7ef240000000000000000000000000000000000000000000000000000000081526001600160a01b038481166004830152602482018690528616906347e7ef24906044016020604051808303816000875af1158015611154573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611178919061322f565b610bf3576040517f47d19fab00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6111b6611bda565b6111be610694565b83516000036111f9576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b82336001600160a01b03167f5322ffbbf9261ff1f8138247942d2b03b28717141ef0a0dd080fc4be9c4e78d386858560405161123793929190613251565b60405180910390a3610b0a60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b611270611bda565b611278610694565b82516000036112b3576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b816000036112ed576040517f19c08f4900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61130b8273735b14bb79463307aacbed86daf3322b1e6226ab611f4e565b60008054604051839233927fde19dbe881cc0aeeb6e73ce19ac7b5ca695e6be8a076e3eb42292005a7fec1b5926113529289926001600160a01b03169189919081906130ab565b60405180910390a36108f460017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b61138b611bda565b611393610694565b84516000036113ce576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b83600003611408576040517f5d67094f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006114148585611c5b565b90506000336001600160a01b03167fde19dbe881cc0aeeb6e73ce19ac7b5ca695e6be8a076e3eb42292005a7fec1b5888789868a6001600160a01b0316634d8943bb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611485573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114a99190613092565b8a8a6040516114be9796959493929190613281565b60405180910390a3506114f060017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b5050505050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a6115218161211c565b610cf86125f0565b3373735b14bb79463307aacbed86daf3322b1e6226ab14611576576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61157e610694565b6001600160a01b038516158061159b57506001600160a01b038316155b156115d2576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8360000361160c576040517f5d67094f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517fde43156e0000000000000000000000000000000000000000000000000000000081526001600160a01b0384169063de43156e90610c4090899089908990889088906004016131e8565b3373735b14bb79463307aacbed86daf3322b1e6226ab146116a6576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6116ae610694565b6001600160a01b03851615806116cb57506001600160a01b038316155b15611702576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8360000361173c576040517f5d67094f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03831673735b14bb79463307aacbed86daf3322b1e6226ab148061176f57506001600160a01b03831630145b156117a6576040517f82d5d76a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f47e7ef240000000000000000000000000000000000000000000000000000000081526001600160a01b038481166004830152602482018690528616906347e7ef24906044016020604051808303816000875af115801561180e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611832919061322f565b61160c576040517f47d19fab00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b62680060205260409020600101546118a28161211c565b610b0a8383612213565b6118b4611bda565b6118bc610694565b84516000036118f7576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b83600003611931576040517f19c08f4900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61194f8473735b14bb79463307aacbed86daf3322b1e6226ab611f4e565b60008054604051859233927fde19dbe881cc0aeeb6e73ce19ac7b5ca695e6be8a076e3eb42292005a7fec1b59261199a928b926001600160a01b0316918b919081908b908b90613281565b60405180910390a36114f060017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b3373735b14bb79463307aacbed86daf3322b1e6226ab14611a18576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611a20610694565b6001600160a01b0383161580611a3d57506001600160a01b038116155b15611a74576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b81600003611aae576040517f5d67094f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03811673735b14bb79463307aacbed86daf3322b1e6226ab1480611ae157506001600160a01b03811630145b15611b18576040517f82d5d76a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f47e7ef240000000000000000000000000000000000000000000000000000000081526001600160a01b038281166004830152602482018490528416906347e7ef24906044016020604051808303816000875af1158015611b80573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ba4919061322f565b6108f4576040517f47d19fab00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0080547ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01611c55576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60029055565b6000806000836001600160a01b031663d9eeebed6040518163ffffffff1660e01b81526004016040805180830381865afa158015611c9d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cc191906132d6565b6040517f23b872dd00000000000000000000000000000000000000000000000000000000815233600482015273735b14bb79463307aacbed86daf3322b1e6226ab60248201526044810182905291935091506001600160a01b038316906323b872dd906064016020604051808303816000875af1158015611d46573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d6a919061322f565b611da0576040517f0a7cd6d600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f23b872dd000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018690526001600160a01b038516906323b872dd906064016020604051808303816000875af1158015611e0c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e30919061322f565b611e66576040517f4dd9ee8d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f42966c68000000000000000000000000000000000000000000000000000000008152600481018690526001600160a01b038516906342966c68906024016020604051808303816000875af1158015611ec6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611eea919061322f565b611f20576040517f2c77e05c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b949350505050565b60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b6000546040517f23b872dd000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018490526001600160a01b03909116906323b872dd906064016020604051808303816000875af1158015611fbe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fe2919061322f565b612018576040517fc7ffc47b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000546040517f2e1a7d4d000000000000000000000000000000000000000000000000000000008152600481018490526001600160a01b0390911690632e1a7d4d90602401600060405180830381600087803b15801561207757600080fd5b505af115801561208b573d6000803e3d6000fd5b505050506000816001600160a01b03168360405160006040518083038185875af1925050503d80600081146120dc576040519150601f19603f3d011682016040523d82523d6000602084013e6120e1565b606091505b50509050806108f4576040517fc7ffc47b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610cf88133612669565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff16612209576000848152602082815260408083206001600160a01b0387168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790556121bf3390565b6001600160a01b0316836001600160a01b0316857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a46001915050610785565b6000915050610785565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff1615612209576000848152602082815260408083206001600160a01b038716808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339287917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a46001915050610785565b6122df6126f6565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001681557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a150565b6106f0612751565b612377612751565b6106f06127b8565b612387612751565b6106f0612809565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148061242857507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031661241c7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b6001600160a01b031614155b156106f0576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610f6c8161211c565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156124e2575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682019092526124df91810190613092565b60015b612528576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b03831660048201526024015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8114612584576040517faa1d49a40000000000000000000000000000000000000000000000000000000081526004810182905260240161251f565b6108f48383612811565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146106f0576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6125f8610694565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011781557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25833612349565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408083206001600160a01b038516845290915290205460ff16610f6c576040517fe2517d3f0000000000000000000000000000000000000000000000000000000081526001600160a01b03821660048201526024810183905260440161251f565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff166106f0576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff166106f0576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6127c0612751565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055565b611f28612751565b61281a82612867565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a280511561285f576108f4828261290f565b610f6c612985565b806001600160a01b03163b6000036128b6576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b038216600482015260240161251f565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6060600080846001600160a01b03168460405161292c9190613304565b600060405180830381855af49150503d8060008114612967576040519150601f19603f3d011682016040523d82523d6000602084013e61296c565b606091505b509150915061297c8583836129bd565b95945050505050565b34156106f0576040517fb398979f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6060826129d2576129cd82612a35565b612a2e565b81511580156129e957506001600160a01b0384163b155b15612a2b576040517f9996b3150000000000000000000000000000000000000000000000000000000081526001600160a01b038516600482015260240161251f565b50805b9392505050565b805115612a455780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060208284031215612a8957600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114612a2e57600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600082601f830112612af957600080fd5b813567ffffffffffffffff811115612b1357612b13612ab9565b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8501160116810181811067ffffffffffffffff82111715612b7f57612b7f612ab9565b604052818152838201602001851015612b9757600080fd5b816020850160208301376000918101602001919091529392505050565b6001600160a01b0381168114610cf857600080fd5b600080600060608486031215612bde57600080fd5b833567ffffffffffffffff811115612bf557600080fd5b612c0186828701612ae8565b935050602084013591506040840135612c1981612bb4565b809150509250925092565b600060608284031215612c3657600080fd5b50919050565b60008083601f840112612c4e57600080fd5b50813567ffffffffffffffff811115612c6657600080fd5b602083019150836020828501011115612c7e57600080fd5b9250929050565b600080600080600060808688031215612c9d57600080fd5b853567ffffffffffffffff811115612cb457600080fd5b612cc088828901612c24565b955050602086013593506040860135612cd881612bb4565b9250606086013567ffffffffffffffff811115612cf457600080fd5b612d0088828901612c3c565b969995985093965092949392505050565b600060208284031215612d2357600080fd5b5035919050565b60008060408385031215612d3d57600080fd5b823591506020830135612d4f81612bb4565b809150509250929050565b60008060008060008060a08789031215612d7357600080fd5b863567ffffffffffffffff811115612d8a57600080fd5b612d9689828a01612c24565b9650506020870135612da781612bb4565b9450604087013593506060870135612dbe81612bb4565b9250608087013567ffffffffffffffff811115612dda57600080fd5b612de689828a01612c3c565b979a9699509497509295939492505050565b60008060408385031215612e0b57600080fd5b8235612e1681612bb4565b91506020830135612d4f81612bb4565b60008060408385031215612e3957600080fd5b8235612e4481612bb4565b9150602083013567ffffffffffffffff811115612e6057600080fd5b612e6c85828601612ae8565b9150509250929050565b60008060008060608587031215612e8c57600080fd5b843567ffffffffffffffff811115612ea357600080fd5b612eaf87828801612ae8565b94505060208501359250604085013567ffffffffffffffff811115612ed357600080fd5b612edf87828801612c3c565b95989497509550505050565b600080600060608486031215612f0057600080fd5b833567ffffffffffffffff811115612f1757600080fd5b612f2386828701612ae8565b9660208601359650604090950135949350505050565b600080600080600060808688031215612f5157600080fd5b853567ffffffffffffffff811115612f6857600080fd5b612cc088828901612ae8565b60005b83811015612f8f578181015183820152602001612f77565b50506000910152565b60008151808452612fb0816020860160208601612f74565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000612a2e6020830184612f98565b60008060008060006080868803121561300d57600080fd5b853567ffffffffffffffff81111561302457600080fd5b61303088828901612ae8565b9550506020860135935060408601359250606086013567ffffffffffffffff811115612cf457600080fd5b60008060006060848603121561307057600080fd5b833561307b81612bb4565b9250602084013591506040840135612c1981612bb4565b6000602082840312156130a457600080fd5b5051919050565b60c0815260006130be60c0830188612f98565b6001600160a01b038716602084015285604084015284606084015283608084015282810360a084015260008152602081019150509695505050505050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b600081357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe183360301811261317957600080fd5b820160208101903567ffffffffffffffff81111561319657600080fd5b8036038213156131a557600080fd5b606085526131b76060860182846130fc565b91505060208301356131c881612bb4565b6001600160a01b0316602085015260409283013592909301919091525090565b6080815260006131fb6080830188613145565b6001600160a01b038716602084015285604084015282810360608401526132238185876130fc565b98975050505050505050565b60006020828403121561324157600080fd5b81518015158114612a2e57600080fd5b6040815260006132646040830186612f98565b82810360208401526132778185876130fc565b9695505050505050565b60c08152600061329460c083018a612f98565b6001600160a01b038916602084015287604084015286606084015285608084015282810360a08401526132c88185876130fc565b9a9950505050505050505050565b600080604083850312156132e957600080fd5b82516132f481612bb4565b6020939093015192949293505050565b60008251613316818460208701612f74565b919091019291505056fea26469706673582212200e1dd6867841bb437442203fb5923a96a958e18ecd874d78d2b77dc1e3acfe1264736f6c634300081a0033"; type GatewayZEVMConstructorParams = | [signer?: Signer]